ZGlmZiAtLWdpdCBhL0FuZHJvaWQubWsgYi9BbmRyb2lkLm1rCmluZGV4IGEwOTgzNzkuLmMxYzc0ZWEgMTAwNjQ0Ci0tLSBhL0FuZHJvaWQubWsKKysrIGIvQW5kcm9pZC5tawpAQCAtMjYxLDcgKzI2MSw3IEBACiAJY29yZS9qYXZhL2FuZHJvaWQvdmlldy9JQXBwbGljYXRpb25Ub2tlbi5haWRsIFwKIAljb3JlL2phdmEvYW5kcm9pZC92aWV3L0lBcHBUcmFuc2l0aW9uQW5pbWF0aW9uU3BlY3NGdXR1cmUuYWlkbCBcCiAJY29yZS9qYXZhL2FuZHJvaWQvdmlldy9JQXNzZXRBdGxhcy5haWRsIFwKLQljb3JlL2phdmEvYW5kcm9pZC92aWV3L0lEb2NrRGl2aWRlclZpc2liaWxpdHlMaXN0ZW5lci5haWRsIFwKKwljb3JlL2phdmEvYW5kcm9pZC92aWV3L0lEb2NrZWRTdGFja0xpc3RlbmVyLmFpZGwgXAogCWNvcmUvamF2YS9hbmRyb2lkL3ZpZXcvSUdyYXBoaWNzU3RhdHMuYWlkbCBcCiAJY29yZS9qYXZhL2FuZHJvaWQvdmlldy9JSW5wdXRGaWx0ZXIuYWlkbCBcCiAJY29yZS9qYXZhL2FuZHJvaWQvdmlldy9JSW5wdXRGaWx0ZXJIb3N0LmFpZGwgXApAQCAtNDk4LDYgKzQ5OCw3IEBACiAJZnJhbWV3b3Jrcy9iYXNlL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9Qb2ludEYuYWlkbCBcCiAJZnJhbWV3b3Jrcy9iYXNlL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9SZWN0Ri5haWRsIFwKIAlmcmFtZXdvcmtzL2Jhc2UvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL1JlY3QuYWlkbCBcCisJZnJhbWV3b3Jrcy9iYXNlL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9JY29uLmFpZGwgXAogCWZyYW1ld29ya3MvYmFzZS9jb3JlL2phdmEvYW5kcm9pZC9hY2NvdW50cy9BdXRoZW50aWNhdG9yRGVzY3JpcHRpb24uYWlkbCBcCiAJZnJhbWV3b3Jrcy9iYXNlL2NvcmUvamF2YS9hbmRyb2lkL2FjY291bnRzL0FjY291bnQuYWlkbCBcCiAJZnJhbWV3b3Jrcy9iYXNlL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9hZG1pbi9TeXN0ZW1VcGRhdGVQb2xpY3kuYWlkbCBcCmRpZmYgLS1naXQgYS9hcGkvY3VycmVudC50eHQgYi9hcGkvY3VycmVudC50eHQKaW5kZXggNTQyMWYwNS4uOWQwZjI5OCAxMDA2NDQKLS0tIGEvYXBpL2N1cnJlbnQudHh0CisrKyBiL2FwaS9jdXJyZW50LnR4dApAQCAtNjcsNyArNjcsNiBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBEVU1QID0gImFuZHJvaWQucGVybWlzc2lvbi5EVU1QIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRVhQQU5EX1NUQVRVU19CQVIgPSAiYW5kcm9pZC5wZXJtaXNzaW9uLkVYUEFORF9TVEFUVVNfQkFSIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRkFDVE9SWV9URVNUID0gImFuZHJvaWQucGVybWlzc2lvbi5GQUNUT1JZX1RFU1QiOwotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBGTEFTSExJR0hUID0gImFuZHJvaWQucGVybWlzc2lvbi5GTEFTSExJR0hUIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgR0VUX0FDQ09VTlRTID0gImFuZHJvaWQucGVybWlzc2lvbi5HRVRfQUNDT1VOVFMiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBHRVRfQUNDT1VOVFNfUFJJVklMRUdFRCA9ICJhbmRyb2lkLnBlcm1pc3Npb24uR0VUX0FDQ09VTlRTX1BSSVZJTEVHRUQiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBHRVRfUEFDS0FHRV9TSVpFID0gImFuZHJvaWQucGVybWlzc2lvbi5HRVRfUEFDS0FHRV9TSVpFIjsKQEAgLTM1MDQsNiArMzUwMyw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIHJlbGVhc2VJbnN0YW5jZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgZGVwcmVjYXRlZCB2b2lkIHJlbW92ZURpYWxvZyhpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCByZXBvcnRGdWxseURyYXduKCk7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnZpZXcuRHJvcFBlcm1pc3Npb25zIHJlcXVlc3REcm9wUGVybWlzc2lvbnMoYW5kcm9pZC52aWV3LkRyYWdFdmVudCk7CiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCB2b2lkIHJlcXVlc3RQZXJtaXNzaW9ucyhqYXZhLmxhbmcuU3RyaW5nW10sIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIHJlcXVlc3RWaXNpYmxlQmVoaW5kKGJvb2xlYW4pOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgYm9vbGVhbiByZXF1ZXN0V2luZG93RmVhdHVyZShpbnQpOwpAQCAtMzUzOCw2ICszNTM4LDcgQEAKICAgICBtZXRob2QgcHVibGljIGRlcHJlY2F0ZWQgdm9pZCBzZXRUaXRsZUNvbG9yKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFZpc2libGUoYm9vbGVhbik7CiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCB2b2lkIHNldFZvbHVtZUNvbnRyb2xTdHJlYW0oaW50KTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0VnJNb2RlKGJvb2xlYW4pOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBzaG91bGRTaG93UmVxdWVzdFBlcm1pc3Npb25SYXRpb25hbGUoamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIHNob3VsZFVwUmVjcmVhdGVUYXNrKGFuZHJvaWQuY29udGVudC5JbnRlbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBzaG93QXNzaXN0KGFuZHJvaWQub3MuQnVuZGxlKTsKQEAgLTQwODAsMTEgKzQwODEsMTQgQEAKICAgfQogCiAgIHB1YmxpYyBjbGFzcyBEYXRlUGlja2VyRGlhbG9nIGV4dGVuZHMgYW5kcm9pZC5hcHAuQWxlcnREaWFsb2cgaW1wbGVtZW50cyBhbmRyb2lkLndpZGdldC5EYXRlUGlja2VyLk9uRGF0ZUNoYW5nZWRMaXN0ZW5lciBhbmRyb2lkLmNvbnRlbnQuRGlhbG9nSW50ZXJmYWNlLk9uQ2xpY2tMaXN0ZW5lciB7CisgICAgY3RvciBwdWJsaWMgRGF0ZVBpY2tlckRpYWxvZyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CisgICAgY3RvciBwdWJsaWMgRGF0ZVBpY2tlckRpYWxvZyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgaW50KTsKICAgICBjdG9yIHB1YmxpYyBEYXRlUGlja2VyRGlhbG9nKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLmFwcC5EYXRlUGlja2VyRGlhbG9nLk9uRGF0ZVNldExpc3RlbmVyLCBpbnQsIGludCwgaW50KTsKICAgICBjdG9yIHB1YmxpYyBEYXRlUGlja2VyRGlhbG9nKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBpbnQsIGFuZHJvaWQuYXBwLkRhdGVQaWNrZXJEaWFsb2cuT25EYXRlU2V0TGlzdGVuZXIsIGludCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC53aWRnZXQuRGF0ZVBpY2tlciBnZXREYXRlUGlja2VyKCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIG9uQ2xpY2soYW5kcm9pZC5jb250ZW50LkRpYWxvZ0ludGVyZmFjZSwgaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgb25EYXRlQ2hhbmdlZChhbmRyb2lkLndpZGdldC5EYXRlUGlja2VyLCBpbnQsIGludCwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0T25EYXRlU2V0TGlzdGVuZXIoYW5kcm9pZC5hcHAuRGF0ZVBpY2tlckRpYWxvZy5PbkRhdGVTZXRMaXN0ZW5lcik7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHVwZGF0ZURhdGUoaW50LCBpbnQsIGludCk7CiAgIH0KIApAQCAtNDIyNCw3ICs0MjI4LDcgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQ09MVU1OX0RFU0NSSVBUSU9OID0gImRlc2NyaXB0aW9uIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQ09MVU1OX0lEID0gIl9pZCI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIENPTFVNTl9MQVNUX01PRElGSUVEX1RJTUVTVEFNUCA9ICJsYXN0X21vZGlmaWVkX3RpbWVzdGFtcCI7Ci0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIENPTFVNTl9MT0NBTF9GSUxFTkFNRSA9ICJsb2NhbF9maWxlbmFtZSI7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBkZXByZWNhdGVkIGphdmEubGFuZy5TdHJpbmcgQ09MVU1OX0xPQ0FMX0ZJTEVOQU1FID0gImxvY2FsX2ZpbGVuYW1lIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQ09MVU1OX0xPQ0FMX1VSSSA9ICJsb2NhbF91cmkiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBDT0xVTU5fTUVESUFQUk9WSURFUl9VUkkgPSAibWVkaWFwcm92aWRlcl91cmkiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBDT0xVTU5fTUVESUFfVFlQRSA9ICJtZWRpYV90eXBlIjsKQEAgLTQ4MzYsNiArNDg0MCw3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEVYVFJBX1BST0dSRVNTID0gImFuZHJvaWQucHJvZ3Jlc3MiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBFWFRSQV9QUk9HUkVTU19JTkRFVEVSTUlOQVRFID0gImFuZHJvaWQucHJvZ3Jlc3NJbmRldGVybWluYXRlIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRVhUUkFfUFJPR1JFU1NfTUFYID0gImFuZHJvaWQucHJvZ3Jlc3NNYXgiOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBFWFRSQV9SRU1PVEVfSU5QVVRfSElTVE9SWSA9ICJhbmRyb2lkLnJlbW90ZUlucHV0SGlzdG9yeSI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEVYVFJBX1NIT1dfQ0hST05PTUVURVIgPSAiYW5kcm9pZC5zaG93Q2hyb25vbWV0ZXIiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBFWFRSQV9TSE9XX1dIRU4gPSAiYW5kcm9pZC5zaG93V2hlbiI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEVYVFJBX1NNQUxMX0lDT04gPSAiYW5kcm9pZC5pY29uIjsKQEAgLTUwMDIsNiArNTAwNyw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmFwcC5Ob3RpZmljYXRpb24uQnVpbGRlciBzZXRQcmlvcml0eShpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5hcHAuTm90aWZpY2F0aW9uLkJ1aWxkZXIgc2V0UHJvZ3Jlc3MoaW50LCBpbnQsIGJvb2xlYW4pOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5hcHAuTm90aWZpY2F0aW9uLkJ1aWxkZXIgc2V0UHVibGljVmVyc2lvbihhbmRyb2lkLmFwcC5Ob3RpZmljYXRpb24pOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5hcHAuTm90aWZpY2F0aW9uLkJ1aWxkZXIgc2V0UmVtb3RlSW5wdXRIaXN0b3J5KGphdmEubGFuZy5DaGFyU2VxdWVuY2VbXSk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmFwcC5Ob3RpZmljYXRpb24uQnVpbGRlciBzZXRTaG93V2hlbihib29sZWFuKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuYXBwLk5vdGlmaWNhdGlvbi5CdWlsZGVyIHNldFNtYWxsSWNvbihpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5hcHAuTm90aWZpY2F0aW9uLkJ1aWxkZXIgc2V0U21hbGxJY29uKGludCwgaW50KTsKQEAgLTUxOTEsNiArNTE5Nyw3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1VQUFJFU1NFRF9FRkZFQ1RTX1VOU0VUID0gLTE7IC8vIDB4ZmZmZmZmZmYKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVVBQUkVTU0VEX0VGRkVDVF9MSUdIVFMgPSAxOyAvLyAweDEKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVVBQUkVTU0VEX0VGRkVDVF9QRUVLID0gMjsgLy8gMHgyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1VQUFJFU1NFRF9FRkZFQ1RfU0NSRUVOX09OID0gNDsgLy8gMHg0CiAgICAgZmllbGQgcHVibGljIGZpbmFsIGludCBwcmlvcml0eUNhbGxTZW5kZXJzOwogICAgIGZpZWxkIHB1YmxpYyBmaW5hbCBpbnQgcHJpb3JpdHlDYXRlZ29yaWVzOwogICAgIGZpZWxkIHB1YmxpYyBmaW5hbCBpbnQgcHJpb3JpdHlNZXNzYWdlU2VuZGVyczsKQEAgLTU3NTEsNiArNTc1OCw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldERldmljZU93bmVyTG9ja1NjcmVlbkluZm8oKTsKICAgICBtZXRob2QgcHVibGljIGphdmEudXRpbC5MaXN0PGJ5dGVbXT4gZ2V0SW5zdGFsbGVkQ2FDZXJ0cyhhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0S2V5Z3VhcmREaXNhYmxlZEZlYXR1cmVzKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lKTsKKyAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0TG9uZ1N1cHBvcnRNZXNzYWdlKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lKTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXRNYXhpbXVtRmFpbGVkUGFzc3dvcmRzRm9yV2lwZShhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSk7CiAgICAgbWV0aG9kIHB1YmxpYyBsb25nIGdldE1heGltdW1UaW1lVG9Mb2NrKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gZ2V0UGFja2FnZVN1c3BlbmRlZChhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSwgamF2YS5sYW5nLlN0cmluZyk7CkBAIC01NzcxLDYgKzU3NzksNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgamF2YS51dGlsLkxpc3Q8amF2YS5sYW5nLlN0cmluZz4gZ2V0UGVybWl0dGVkQWNjZXNzaWJpbGl0eVNlcnZpY2VzKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lKTsKICAgICBtZXRob2QgcHVibGljIGphdmEudXRpbC5MaXN0PGphdmEubGFuZy5TdHJpbmc+IGdldFBlcm1pdHRlZElucHV0TWV0aG9kcyhhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGdldFNjcmVlbkNhcHR1cmVEaXNhYmxlZChhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSk7CisgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldFNob3J0U3VwcG9ydE1lc3NhZ2UoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBnZXRTdG9yYWdlRW5jcnlwdGlvbihhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0U3RvcmFnZUVuY3J5cHRpb25TdGF0dXMoKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuYXBwLmFkbWluLlN5c3RlbVVwZGF0ZVBvbGljeSBnZXRTeXN0ZW1VcGRhdGVQb2xpY3koKTsKQEAgLTU4MTIsNiArNTgyMSw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIHNldEtleWd1YXJkRGlzYWJsZWQoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGJvb2xlYW4pOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRLZXlndWFyZERpc2FibGVkRmVhdHVyZXMoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldExvY2tUYXNrUGFja2FnZXMoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGphdmEubGFuZy5TdHJpbmdbXSkgdGhyb3dzIGphdmEubGFuZy5TZWN1cml0eUV4Y2VwdGlvbjsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0TG9uZ1N1cHBvcnRNZXNzYWdlKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBqYXZhLmxhbmcuU3RyaW5nKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0TWFzdGVyVm9sdW1lTXV0ZWQoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGJvb2xlYW4pOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRNYXhpbXVtRmFpbGVkUGFzc3dvcmRzRm9yV2lwZShhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSwgaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0TWF4aW11bVRpbWVUb0xvY2soYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGxvbmcpOwpAQCAtNTgzNiw2ICs1ODQ2LDcgQEAKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0UmVzdHJpY3Rpb25zUHJvdmlkZXIoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0U2NyZWVuQ2FwdHVyZURpc2FibGVkKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBib29sZWFuKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0U2VjdXJlU2V0dGluZyhhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSwgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZyk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFNob3J0U3VwcG9ydE1lc3NhZ2UoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBzZXRTdGF0dXNCYXJEaXNhYmxlZChhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSwgYm9vbGVhbik7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgc2V0U3RvcmFnZUVuY3J5cHRpb24oYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGJvb2xlYW4pOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRTeXN0ZW1VcGRhdGVQb2xpY3koYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGFuZHJvaWQuYXBwLmFkbWluLlN5c3RlbVVwZGF0ZVBvbGljeSk7CkBAIC03NTYxLDExICs3NTcyLDEyIEBACiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHdyaXRlRGF0YVRvUGlwZShhbmRyb2lkLm9zLlBhcmNlbEZpbGVEZXNjcmlwdG9yLCBhbmRyb2lkLm5ldC5VcmksIGphdmEubGFuZy5TdHJpbmcsIGFuZHJvaWQub3MuQnVuZGxlLCBUKTsKICAgfQogCi0gIHB1YmxpYyBjbGFzcyBDb250ZW50UHJvdmlkZXJDbGllbnQgeworICBwdWJsaWMgY2xhc3MgQ29udGVudFByb3ZpZGVyQ2xpZW50IGltcGxlbWVudHMgamF2YS5sYW5nLkF1dG9DbG9zZWFibGUgewogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRQcm92aWRlclJlc3VsdFtdIGFwcGx5QmF0Y2goamF2YS51dGlsLkFycmF5TGlzdDxhbmRyb2lkLmNvbnRlbnQuQ29udGVudFByb3ZpZGVyT3BlcmF0aW9uPikgdGhyb3dzIGFuZHJvaWQuY29udGVudC5PcGVyYXRpb25BcHBsaWNhdGlvbkV4Y2VwdGlvbiwgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgYnVsa0luc2VydChhbmRyb2lkLm5ldC5VcmksIGFuZHJvaWQuY29udGVudC5Db250ZW50VmFsdWVzW10pIHRocm93cyBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQub3MuQnVuZGxlIGNhbGwoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgYW5kcm9pZC5vcy5CdW5kbGUpIHRocm93cyBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIGFuZHJvaWQubmV0LlVyaSBjYW5vbmljYWxpemUoYW5kcm9pZC5uZXQuVXJpKSB0aHJvd3MgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGNsb3NlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZGVsZXRlKGFuZHJvaWQubmV0LlVyaSwgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZ1tdKSB0aHJvd3MgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFByb3ZpZGVyIGdldExvY2FsQ29udGVudFByb3ZpZGVyKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nW10gZ2V0U3RyZWFtVHlwZXMoYW5kcm9pZC5uZXQuVXJpLCBqYXZhLmxhbmcuU3RyaW5nKSB0aHJvd3MgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CkBAIC03NTc5LDcgKzc1OTEsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgYW5kcm9pZC5jb250ZW50LnJlcy5Bc3NldEZpbGVEZXNjcmlwdG9yIG9wZW5UeXBlZEFzc2V0RmlsZURlc2NyaXB0b3IoYW5kcm9pZC5uZXQuVXJpLCBqYXZhLmxhbmcuU3RyaW5nLCBhbmRyb2lkLm9zLkJ1bmRsZSwgYW5kcm9pZC5vcy5DYW5jZWxsYXRpb25TaWduYWwpIHRocm93cyBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbiwgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmRhdGFiYXNlLkN1cnNvciBxdWVyeShhbmRyb2lkLm5ldC5VcmksIGphdmEubGFuZy5TdHJpbmdbXSwgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZ1tdLCBqYXZhLmxhbmcuU3RyaW5nKSB0aHJvd3MgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmRhdGFiYXNlLkN1cnNvciBxdWVyeShhbmRyb2lkLm5ldC5VcmksIGphdmEubGFuZy5TdHJpbmdbXSwgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZ1tdLCBqYXZhLmxhbmcuU3RyaW5nLCBhbmRyb2lkLm9zLkNhbmNlbGxhdGlvblNpZ25hbCkgdGhyb3dzIGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwotICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiByZWxlYXNlKCk7CisgICAgbWV0aG9kIHB1YmxpYyBkZXByZWNhdGVkIGJvb2xlYW4gcmVsZWFzZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgYW5kcm9pZC5uZXQuVXJpIHVuY2Fub25pY2FsaXplKGFuZHJvaWQubmV0LlVyaSkgdGhyb3dzIGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IHVwZGF0ZShhbmRyb2lkLm5ldC5VcmksIGFuZHJvaWQuY29udGVudC5Db250ZW50VmFsdWVzLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nW10pIHRocm93cyBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKICAgfQpAQCAtODk5Myw2ICs5MDA1LDcgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX0FMV0FZU19SRVRBSU5fVEFTS19TVEFURSA9IDg7IC8vIDB4OAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfQVVUT19SRU1PVkVfRlJPTV9SRUNFTlRTID0gODE5MjsgLy8gMHgyMDAwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19DTEVBUl9UQVNLX09OX0xBVU5DSCA9IDQ7IC8vIDB4NAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfRU5BQkxFX1ZSX01PREUgPSAzMjc2ODsgLy8gMHg4MDAwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19FWENMVURFX0ZST01fUkVDRU5UUyA9IDMyOyAvLyAweDIwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19GSU5JU0hfT05fQ0xPU0VfU1lTVEVNX0RJQUxPR1MgPSAyNTY7IC8vIDB4MTAwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19GSU5JU0hfT05fVEFTS19MQVVOQ0ggPSAyOyAvLyAweDIKQEAgLTk1MDUsNiArOTUxOCw3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEZFQVRVUkVfQ09OTkVDVElPTl9TRVJWSUNFID0gImFuZHJvaWQuc29mdHdhcmUuY29ubmVjdGlvbnNlcnZpY2UiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBGRUFUVVJFX0NPTlNVTUVSX0lSID0gImFuZHJvaWQuaGFyZHdhcmUuY29uc3VtZXJpciI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEZFQVRVUkVfREVWSUNFX0FETUlOID0gImFuZHJvaWQuc29mdHdhcmUuZGV2aWNlX2FkbWluIjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRkVBVFVSRV9FVEhFUk5FVCA9ICJhbmRyb2lkLmhhcmR3YXJlLmV0aGVybmV0IjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRkVBVFVSRV9GQUtFVE9VQ0ggPSAiYW5kcm9pZC5oYXJkd2FyZS5mYWtldG91Y2giOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBGRUFUVVJFX0ZBS0VUT1VDSF9NVUxUSVRPVUNIX0RJU1RJTkNUID0gImFuZHJvaWQuaGFyZHdhcmUuZmFrZXRvdWNoLm11bHRpdG91Y2guZGlzdGluY3QiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBGRUFUVVJFX0ZBS0VUT1VDSF9NVUxUSVRPVUNIX0pBWlpIQU5EID0gImFuZHJvaWQuaGFyZHdhcmUuZmFrZXRvdWNoLm11bHRpdG91Y2guamF6emhhbmQiOwpAQCAtOTU1NiwxNSArOTU3MCwxNSBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBGRUFUVVJFX1VTQl9BQ0NFU1NPUlkgPSAiYW5kcm9pZC5oYXJkd2FyZS51c2IuYWNjZXNzb3J5IjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRkVBVFVSRV9VU0JfSE9TVCA9ICJhbmRyb2lkLmhhcmR3YXJlLnVzYi5ob3N0IjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRkVBVFVSRV9WRVJJRklFRF9CT09UID0gImFuZHJvaWQuc29mdHdhcmUudmVyaWZpZWRfYm9vdCI7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEZFQVRVUkVfVlJfTU9ERSA9ICJhbmRyb2lkLnNvZnR3YXJlLnZyLm1vZGUiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBGRUFUVVJFX1dBVENIID0gImFuZHJvaWQuaGFyZHdhcmUudHlwZS53YXRjaCI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEZFQVRVUkVfV0VCVklFVyA9ICJhbmRyb2lkLnNvZnR3YXJlLndlYnZpZXciOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBGRUFUVVJFX1dJRkkgPSAiYW5kcm9pZC5oYXJkd2FyZS53aWZpIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRkVBVFVSRV9XSUZJX0RJUkVDVCA9ICJhbmRyb2lkLmhhcmR3YXJlLndpZmkuZGlyZWN0IjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHRVRfQUNUSVZJVElFUyA9IDE7IC8vIDB4MQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFVF9DT05GSUdVUkFUSU9OUyA9IDE2Mzg0OyAvLyAweDQwMDAKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHRVRfRElTQUJMRURfQ09NUE9ORU5UUyA9IDUxMjsgLy8gMHgyMDAKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHRVRfRElTQUJMRURfVU5USUxfVVNFRF9DT01QT05FTlRTID0gMzI3Njg7IC8vIDB4ODAwMAotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFVF9FTkNSWVBUSU9OX1VOQVdBUkVfQ09NUE9ORU5UUyA9IDI2MjE0NDsgLy8gMHg0MDAwMAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgZGVwcmVjYXRlZCBpbnQgR0VUX0RJU0FCTEVEX0NPTVBPTkVOVFMgPSA1MTI7IC8vIDB4MjAwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBkZXByZWNhdGVkIGludCBHRVRfRElTQUJMRURfVU5USUxfVVNFRF9DT01QT05FTlRTID0gMzI3Njg7IC8vIDB4ODAwMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFVF9HSURTID0gMjU2OyAvLyAweDEwMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFVF9JTlNUUlVNRU5UQVRJT04gPSAxNjsgLy8gMHgxMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFVF9JTlRFTlRfRklMVEVSUyA9IDMyOyAvLyAweDIwCkBAIC05NTc2LDEwICs5NTkwLDE3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0VUX1NFUlZJQ0VTID0gNDsgLy8gMHg0CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0VUX1NIQVJFRF9MSUJSQVJZX0ZJTEVTID0gMTAyNDsgLy8gMHg0MDAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHRVRfU0lHTkFUVVJFUyA9IDY0OyAvLyAweDQwCi0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0VUX1VOSU5TVEFMTEVEX1BBQ0tBR0VTID0gODE5MjsgLy8gMHgyMDAwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBkZXByZWNhdGVkIGludCBHRVRfVU5JTlNUQUxMRURfUEFDS0FHRVMgPSA4MTkyOyAvLyAweDIwMDAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHRVRfVVJJX1BFUk1JU1NJT05fUEFUVEVSTlMgPSAyMDQ4OyAvLyAweDgwMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BVENIX0FMTCA9IDEzMTA3MjsgLy8gMHgyMDAwMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BVENIX0RFRkFVTFRfT05MWSA9IDY1NTM2OyAvLyAweDEwMDAwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFUQ0hfRElTQUJMRURfQ09NUE9ORU5UUyA9IDUxMjsgLy8gMHgyMDAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVRDSF9ESVNBQkxFRF9VTlRJTF9VU0VEX0NPTVBPTkVOVFMgPSAzMjc2ODsgLy8gMHg4MDAwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFUQ0hfRU5DUllQVElPTl9BV0FSRSA9IDUyNDI4ODsgLy8gMHg4MDAwMAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BVENIX0VOQ1JZUFRJT05fQVdBUkVfQU5EX1VOQVdBUkUgPSA3ODY0MzI7IC8vIDB4YzAwMDAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVRDSF9FTkNSWVBUSU9OX1VOQVdBUkUgPSAyNjIxNDQ7IC8vIDB4NDAwMDAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVRDSF9TWVNURU1fT05MWSA9IDEwNDg1NzY7IC8vIDB4MTAwMDAwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFUQ0hfVU5JTlNUQUxMRURfUEFDS0FHRVMgPSA4MTkyOyAvLyAweDIwMDAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGxvbmcgTUFYSU1VTV9WRVJJRklDQVRJT05fVElNRU9VVCA9IDM2MDAwMDBMOyAvLyAweDM2ZWU4MEwKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQRVJNSVNTSU9OX0RFTklFRCA9IC0xOyAvLyAweGZmZmZmZmZmCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUEVSTUlTU0lPTl9HUkFOVEVEID0gMDsgLy8gMHgwCkBAIC0xMDgyOSw3ICsxMDg1MCw3IEBACiAgICAgZmllbGQgcHVibGljIGZpbmFsIGludCBzdGF0dXNDb2RlOwogICB9CiAKLSAgcHVibGljIGNsYXNzIERybU1hbmFnZXJDbGllbnQgeworICBwdWJsaWMgY2xhc3MgRHJtTWFuYWdlckNsaWVudCBpbXBsZW1lbnRzIGphdmEubGFuZy5BdXRvQ2xvc2VhYmxlIHsKICAgICBjdG9yIHB1YmxpYyBEcm1NYW5hZ2VyQ2xpZW50KGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuZHJtLkRybUluZm8gYWNxdWlyZURybUluZm8oYW5kcm9pZC5kcm0uRHJtSW5mb1JlcXVlc3QpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGFjcXVpcmVSaWdodHMoYW5kcm9pZC5kcm0uRHJtSW5mb1JlcXVlc3QpOwpAQCAtMTA4MzksNiArMTA4NjAsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgaW50IGNoZWNrUmlnaHRzU3RhdHVzKGFuZHJvaWQubmV0LlVyaSk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgY2hlY2tSaWdodHNTdGF0dXMoamF2YS5sYW5nLlN0cmluZywgaW50KTsKICAgICBtZXRob2QgcHVibGljIGludCBjaGVja1JpZ2h0c1N0YXR1cyhhbmRyb2lkLm5ldC5VcmksIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGNsb3NlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmRybS5Ecm1Db252ZXJ0ZWRTdGF0dXMgY2xvc2VDb252ZXJ0U2Vzc2lvbihpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5kcm0uRHJtQ29udmVydGVkU3RhdHVzIGNvbnZlcnREYXRhKGludCwgYnl0ZVtdKTsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmdbXSBnZXRBdmFpbGFibGVEcm1FbmdpbmVzKCk7CkBAIC0xMDg1Miw3ICsxMDg3NCw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldE9yaWdpbmFsTWltZVR5cGUoYW5kcm9pZC5uZXQuVXJpKTsKICAgICBtZXRob2QgcHVibGljIGludCBvcGVuQ29udmVydFNlc3Npb24oamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgcHJvY2Vzc0RybUluZm8oYW5kcm9pZC5kcm0uRHJtSW5mbyk7Ci0gICAgbWV0aG9kIHB1YmxpYyB2b2lkIHJlbGVhc2UoKTsKKyAgICBtZXRob2QgcHVibGljIGRlcHJlY2F0ZWQgdm9pZCByZWxlYXNlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgcmVtb3ZlQWxsUmlnaHRzKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgcmVtb3ZlUmlnaHRzKGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IHJlbW92ZVJpZ2h0cyhhbmRyb2lkLm5ldC5VcmkpOwpAQCAtMTEyNTYsMTQgKzExMjc4LDE0IEBACiAKICAgcHVibGljIHN0YXRpYyBjbGFzcyBCaXRtYXBGYWN0b3J5Lk9wdGlvbnMgewogICAgIGN0b3IgcHVibGljIEJpdG1hcEZhY3RvcnkuT3B0aW9ucygpOwotICAgIG1ldGhvZCBwdWJsaWMgdm9pZCByZXF1ZXN0Q2FuY2VsRGVjb2RlKCk7CisgICAgbWV0aG9kIHB1YmxpYyBkZXByZWNhdGVkIHZvaWQgcmVxdWVzdENhbmNlbERlY29kZSgpOwogICAgIGZpZWxkIHB1YmxpYyBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcCBpbkJpdG1hcDsKICAgICBmaWVsZCBwdWJsaWMgaW50IGluRGVuc2l0eTsKLSAgICBmaWVsZCBwdWJsaWMgYm9vbGVhbiBpbkRpdGhlcjsKKyAgICBmaWVsZCBwdWJsaWMgZGVwcmVjYXRlZCBib29sZWFuIGluRGl0aGVyOwogICAgIGZpZWxkIHB1YmxpYyBkZXByZWNhdGVkIGJvb2xlYW4gaW5JbnB1dFNoYXJlYWJsZTsKICAgICBmaWVsZCBwdWJsaWMgYm9vbGVhbiBpbkp1c3REZWNvZGVCb3VuZHM7CiAgICAgZmllbGQgcHVibGljIGJvb2xlYW4gaW5NdXRhYmxlOwotICAgIGZpZWxkIHB1YmxpYyBib29sZWFuIGluUHJlZmVyUXVhbGl0eU92ZXJTcGVlZDsKKyAgICBmaWVsZCBwdWJsaWMgZGVwcmVjYXRlZCBib29sZWFuIGluUHJlZmVyUXVhbGl0eU92ZXJTcGVlZDsKICAgICBmaWVsZCBwdWJsaWMgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXAuQ29uZmlnIGluUHJlZmVycmVkQ29uZmlnOwogICAgIGZpZWxkIHB1YmxpYyBib29sZWFuIGluUHJlbXVsdGlwbGllZDsKICAgICBmaWVsZCBwdWJsaWMgZGVwcmVjYXRlZCBib29sZWFuIGluUHVyZ2VhYmxlOwpAQCAtMTgyMzIsNyArMTgyNTQsNiBAQAogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGphdmEubGFuZy5TdHJpbmcgZ2V0Q2Fub25pY2FsSUQoamF2YS5sYW5nLlN0cmluZywgYm9vbGVhbltdKTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXREU1RTYXZpbmdzKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC5pY3UudXRpbC5UaW1lWm9uZSBnZXREZWZhdWx0KCk7Ci0gICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgaW50IGdldERlZmF1bHRUaW1lWm9uZVR5cGUoKTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgZ2V0RGlzcGxheU5hbWUoKTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgZ2V0RGlzcGxheU5hbWUoamF2YS51dGlsLkxvY2FsZSk7CiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIGdldERpc3BsYXlOYW1lKGFuZHJvaWQuaWN1LnV0aWwuVUxvY2FsZSk7CkBAIC0xODI1Niw4ICsxODI3Nyw2IEBACiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGluRGF5bGlnaHRUaW1lKGphdmEudXRpbC5EYXRlKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNGcm96ZW4oKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gb2JzZXJ2ZXNEYXlsaWdodFRpbWUoKTsKLSAgICBtZXRob2QgcHVibGljIHN0YXRpYyBzeW5jaHJvbml6ZWQgdm9pZCBzZXREZWZhdWx0KGFuZHJvaWQuaWN1LnV0aWwuVGltZVpvbmUpOwotICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHN5bmNocm9uaXplZCB2b2lkIHNldERlZmF1bHRUaW1lWm9uZVR5cGUoaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0SUQoamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldFJhd09mZnNldChpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiB1c2VEYXlsaWdodFRpbWUoKTsKQEAgLTE4MjcwLDggKzE4Mjg5LDYgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTSE9SVF9DT01NT05MWV9VU0VEID0gNjsgLy8gMHg2CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0hPUlRfR0VORVJJQyA9IDI7IC8vIDB4MgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNIT1JUX0dNVCA9IDQ7IC8vIDB4NAotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRJTUVaT05FX0lDVSA9IDA7IC8vIDB4MAotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRJTUVaT05FX0pESyA9IDE7IC8vIDB4MQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5pY3UudXRpbC5UaW1lWm9uZSBVTktOT1dOX1pPTkU7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIFVOS05PV05fWk9ORV9JRCA9ICJFdGMvVW5rbm93biI7CiAgIH0KQEAgLTE4MzY3LDggKzE4Mzg0LDYgQEAKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBqYXZhLmxhbmcuU3RyaW5nIGdldFZhcmlhbnQoamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzUmlnaHRUb0xlZnQoKTsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLmljdS51dGlsLlVMb2NhbGUgbWluaW1pemVTdWJ0YWdzKGFuZHJvaWQuaWN1LnV0aWwuVUxvY2FsZSk7Ci0gICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIHZvaWQgc2V0RGVmYXVsdChhbmRyb2lkLmljdS51dGlsLlVMb2NhbGUpOwotICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHN5bmNocm9uaXplZCB2b2lkIHNldERlZmF1bHQoYW5kcm9pZC5pY3UudXRpbC5VTG9jYWxlLkNhdGVnb3J5LCBhbmRyb2lkLmljdS51dGlsLlVMb2NhbGUpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5pY3UudXRpbC5VTG9jYWxlIHNldEtleXdvcmRWYWx1ZShqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKTsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBqYXZhLmxhbmcuU3RyaW5nIHNldEtleXdvcmRWYWx1ZShqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKTsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgdG9MYW5ndWFnZVRhZygpOwpAQCAtMjY4NDksNiArMjY4NjQsMjc5IEBACiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIG9uTWVzc2FnZShpbnQsIGludCwgaW50LCBpbnQsIGphdmEubGFuZy5TdHJpbmcpOwogICB9CiAKKyAgcHVibGljIGNsYXNzIEdMRVMzMiBleHRlbmRzIGFuZHJvaWQub3BlbmdsLkdMRVMzMSB7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbEJsZW5kQmFycmllcigpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xCbGVuZEVxdWF0aW9uU2VwYXJhdGVpKGludCwgaW50LCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xCbGVuZEVxdWF0aW9uaShpbnQsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbEJsZW5kRnVuY1NlcGFyYXRlaShpbnQsIGludCwgaW50LCBpbnQsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbEJsZW5kRnVuY2koaW50LCBpbnQsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbENvbG9yTWFza2koaW50LCBib29sZWFuLCBib29sZWFuLCBib29sZWFuLCBib29sZWFuKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsQ29weUltYWdlU3ViRGF0YShpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsRGVidWdNZXNzYWdlQ2FsbGJhY2soYW5kcm9pZC5vcGVuZ2wuR0xFUzMyLkRlYnVnUHJvYyk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbERlYnVnTWVzc2FnZUNvbnRyb2woaW50LCBpbnQsIGludCwgaW50LCBpbnRbXSwgaW50LCBib29sZWFuKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsRGVidWdNZXNzYWdlQ29udHJvbChpbnQsIGludCwgaW50LCBpbnQsIGphdmEubmlvLkludEJ1ZmZlciwgYm9vbGVhbik7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbERlYnVnTWVzc2FnZUluc2VydChpbnQsIGludCwgaW50LCBpbnQsIGludCwgamF2YS5sYW5nLlN0cmluZyk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbERpc2FibGVpKGludCwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsRHJhd0VsZW1lbnRzQmFzZVZlcnRleChpbnQsIGludCwgaW50LCBqYXZhLm5pby5CdWZmZXIsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbERyYXdFbGVtZW50c0luc3RhbmNlZEJhc2VWZXJ0ZXgoaW50LCBpbnQsIGludCwgamF2YS5uaW8uQnVmZmVyLCBpbnQsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbERyYXdFbGVtZW50c0luc3RhbmNlZEJhc2VWZXJ0ZXgoaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbERyYXdSYW5nZUVsZW1lbnRzQmFzZVZlcnRleChpbnQsIGludCwgaW50LCBpbnQsIGludCwgamF2YS5uaW8uQnVmZmVyLCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xFbmFibGVpKGludCwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsRnJhbWVidWZmZXJUZXh0dXJlKGludCwgaW50LCBpbnQsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgaW50IGdsR2V0RGVidWdNZXNzYWdlTG9nKGludCwgaW50LCBpbnRbXSwgaW50LCBpbnRbXSwgaW50LCBpbnRbXSwgaW50LCBpbnRbXSwgaW50LCBpbnRbXSwgaW50LCBieXRlW10sIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgaW50IGdsR2V0RGVidWdNZXNzYWdlTG9nKGludCwgamF2YS5uaW8uSW50QnVmZmVyLCBqYXZhLm5pby5JbnRCdWZmZXIsIGphdmEubmlvLkludEJ1ZmZlciwgamF2YS5uaW8uSW50QnVmZmVyLCBqYXZhLm5pby5JbnRCdWZmZXIsIGphdmEubmlvLkJ5dGVCdWZmZXIpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGphdmEubGFuZy5TdHJpbmdbXSBnbEdldERlYnVnTWVzc2FnZUxvZyhpbnQsIGludFtdLCBpbnQsIGludFtdLCBpbnQsIGludFtdLCBpbnQsIGludFtdLCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGphdmEubGFuZy5TdHJpbmdbXSBnbEdldERlYnVnTWVzc2FnZUxvZyhpbnQsIGphdmEubmlvLkludEJ1ZmZlciwgamF2YS5uaW8uSW50QnVmZmVyLCBqYXZhLm5pby5JbnRCdWZmZXIsIGphdmEubmlvLkludEJ1ZmZlcik7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgaW50IGdsR2V0R3JhcGhpY3NSZXNldFN0YXR1cygpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGphdmEubGFuZy5TdHJpbmcgZ2xHZXRPYmplY3RMYWJlbChpbnQsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgamF2YS5sYW5nLlN0cmluZyBnbEdldE9iamVjdFB0ckxhYmVsKGxvbmcpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGxvbmcgZ2xHZXRQb2ludGVydihpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xHZXRTYW1wbGVyUGFyYW1ldGVySWl2KGludCwgaW50LCBpbnRbXSwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsR2V0U2FtcGxlclBhcmFtZXRlcklpdihpbnQsIGludCwgamF2YS5uaW8uSW50QnVmZmVyKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsR2V0U2FtcGxlclBhcmFtZXRlckl1aXYoaW50LCBpbnQsIGludFtdLCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xHZXRTYW1wbGVyUGFyYW1ldGVySXVpdihpbnQsIGludCwgamF2YS5uaW8uSW50QnVmZmVyKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsR2V0VGV4UGFyYW1ldGVySWl2KGludCwgaW50LCBpbnRbXSwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsR2V0VGV4UGFyYW1ldGVySWl2KGludCwgaW50LCBqYXZhLm5pby5JbnRCdWZmZXIpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xHZXRUZXhQYXJhbWV0ZXJJdWl2KGludCwgaW50LCBpbnRbXSwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsR2V0VGV4UGFyYW1ldGVySXVpdihpbnQsIGludCwgamF2YS5uaW8uSW50QnVmZmVyKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsR2V0blVuaWZvcm1mdihpbnQsIGludCwgaW50LCBmbG9hdFtdLCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xHZXRuVW5pZm9ybWZ2KGludCwgaW50LCBpbnQsIGphdmEubmlvLkZsb2F0QnVmZmVyKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsR2V0blVuaWZvcm1pdihpbnQsIGludCwgaW50LCBpbnRbXSwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsR2V0blVuaWZvcm1pdihpbnQsIGludCwgaW50LCBqYXZhLm5pby5JbnRCdWZmZXIpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xHZXRuVW5pZm9ybXVpdihpbnQsIGludCwgaW50LCBpbnRbXSwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsR2V0blVuaWZvcm11aXYoaW50LCBpbnQsIGludCwgamF2YS5uaW8uSW50QnVmZmVyKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBib29sZWFuIGdsSXNFbmFibGVkaShpbnQsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbE1pblNhbXBsZVNoYWRpbmcoZmxvYXQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xPYmplY3RMYWJlbChpbnQsIGludCwgaW50LCBqYXZhLmxhbmcuU3RyaW5nKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsT2JqZWN0UHRyTGFiZWwobG9uZywgamF2YS5sYW5nLlN0cmluZyk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbFBhdGNoUGFyYW1ldGVyaShpbnQsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbFBvcERlYnVnR3JvdXAoKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsUHJpbWl0aXZlQm91bmRpbmdCb3goZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsUHVzaERlYnVnR3JvdXAoaW50LCBpbnQsIGludCwgamF2YS5sYW5nLlN0cmluZyk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbFJlYWRuUGl4ZWxzKGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgamF2YS5uaW8uQnVmZmVyKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsU2FtcGxlclBhcmFtZXRlcklpdihpbnQsIGludCwgaW50W10sIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbFNhbXBsZXJQYXJhbWV0ZXJJaXYoaW50LCBpbnQsIGphdmEubmlvLkludEJ1ZmZlcik7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbFNhbXBsZXJQYXJhbWV0ZXJJdWl2KGludCwgaW50LCBpbnRbXSwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsU2FtcGxlclBhcmFtZXRlckl1aXYoaW50LCBpbnQsIGphdmEubmlvLkludEJ1ZmZlcik7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbFRleEJ1ZmZlcihpbnQsIGludCwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsVGV4QnVmZmVyUmFuZ2UoaW50LCBpbnQsIGludCwgaW50LCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xUZXhQYXJhbWV0ZXJJaXYoaW50LCBpbnQsIGludFtdLCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xUZXhQYXJhbWV0ZXJJaXYoaW50LCBpbnQsIGphdmEubmlvLkludEJ1ZmZlcik7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbFRleFBhcmFtZXRlckl1aXYoaW50LCBpbnQsIGludFtdLCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xUZXhQYXJhbWV0ZXJJdWl2KGludCwgaW50LCBqYXZhLm5pby5JbnRCdWZmZXIpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xUZXhTdG9yYWdlM0RNdWx0aXNhbXBsZShpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBib29sZWFuKTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9CVUZGRVIgPSAzMzUwNDsgLy8gMHg4MmUwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ0xBTVBfVE9fQk9SREVSID0gMzMwNjk7IC8vIDB4ODEyZAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTE9SQlVSTiA9IDM3NTMwOyAvLyAweDkyOWEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT0xPUkRPREdFID0gMzc1Mjk7IC8vIDB4OTI5OQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzEweDEwID0gMzc4MTk7IC8vIDB4OTNiYgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzEweDUgPSAzNzgxNjsgLy8gMHg5M2I4CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4NiA9IDM3ODE3OyAvLyAweDkzYjkKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg4ID0gMzc4MTg7IC8vIDB4OTNiYQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEwID0gMzc4MjA7IC8vIDB4OTNiYworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEyID0gMzc4MjE7IC8vIDB4OTNiZAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzR4NCA9IDM3ODA4OyAvLyAweDkzYjAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT01QUkVTU0VEX1JHQkFfQVNUQ181eDQgPSAzNzgwOTsgLy8gMHg5M2IxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfNXg1ID0gMzc4MTA7IC8vIDB4OTNiMgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzZ4NSA9IDM3ODExOyAvLyAweDkzYjMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT01QUkVTU0VEX1JHQkFfQVNUQ182eDYgPSAzNzgxMjsgLy8gMHg5M2I0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg1ID0gMzc4MTM7IC8vIDB4OTNiNQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzh4NiA9IDM3ODE0OyAvLyAweDkzYjYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT01QUkVTU0VEX1JHQkFfQVNUQ184eDggPSAzNzgxNTsgLy8gMHg5M2I3CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHgxMCA9IDM3ODUxOyAvLyAweDkzZGIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDUgPSAzNzg0ODsgLy8gMHg5M2Q4CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg2ID0gMzc4NDk7IC8vIDB4OTNkOQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4OCA9IDM3ODUwOyAvLyAweDkzZGEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEwID0gMzc4NTI7IC8vIDB4OTNkYworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTIgPSAzNzg1MzsgLy8gMHg5M2RkCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ180eDQgPSAzNzg0MDsgLy8gMHg5M2QwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ181eDQgPSAzNzg0MTsgLy8gMHg5M2QxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ181eDUgPSAzNzg0MjsgLy8gMHg5M2QyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDUgPSAzNzg0MzsgLy8gMHg5M2QzCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDYgPSAzNzg0NDsgLy8gMHg5M2Q0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDUgPSAzNzg0NTsgLy8gMHg5M2Q1CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDYgPSAzNzg0NjsgLy8gMHg5M2Q2CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDggPSAzNzg0NzsgLy8gMHg5M2Q3CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09OVEVYVF9GTEFHUyA9IDMzMzEwOyAvLyAweDgyMWUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT05URVhUX0ZMQUdfREVCVUdfQklUID0gMjsgLy8gMHgyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09OVEVYVF9GTEFHX1JPQlVTVF9BQ0NFU1NfQklUID0gNDsgLy8gMHg0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09OVEVYVF9MT1NUID0gMTI4NzsgLy8gMHg1MDcKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9EQVJLRU4gPSAzNzUyNzsgLy8gMHg5Mjk3CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfQ0FMTEJBQ0tfRlVOQ1RJT04gPSAzMzM0ODsgLy8gMHg4MjQ0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfQ0FMTEJBQ0tfVVNFUl9QQVJBTSA9IDMzMzQ5OyAvLyAweDgyNDUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19HUk9VUF9TVEFDS19ERVBUSCA9IDMzMzg5OyAvLyAweDgyNmQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19MT0dHRURfTUVTU0FHRVMgPSAzNzE4OTsgLy8gMHg5MTQ1CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfTkVYVF9MT0dHRURfTUVTU0FHRV9MRU5HVEggPSAzMzM0NzsgLy8gMHg4MjQzCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfT1VUUFVUID0gMzc2MDA7IC8vIDB4OTJlMAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX09VVFBVVF9TWU5DSFJPTk9VUyA9IDMzMzQ2OyAvLyAweDgyNDIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19TRVZFUklUWV9ISUdIID0gMzcxOTA7IC8vIDB4OTE0NgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1NFVkVSSVRZX0xPVyA9IDM3MTkyOyAvLyAweDkxNDgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19TRVZFUklUWV9NRURJVU0gPSAzNzE5MTsgLy8gMHg5MTQ3CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfU0VWRVJJVFlfTk9USUZJQ0FUSU9OID0gMzMzODc7IC8vIDB4ODI2YgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1NPVVJDRV9BUEkgPSAzMzM1MDsgLy8gMHg4MjQ2CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfU09VUkNFX0FQUExJQ0FUSU9OID0gMzMzNTQ7IC8vIDB4ODI0YQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1NPVVJDRV9PVEhFUiA9IDMzMzU1OyAvLyAweDgyNGIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19TT1VSQ0VfU0hBREVSX0NPTVBJTEVSID0gMzMzNTI7IC8vIDB4ODI0OAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1NPVVJDRV9USElSRF9QQVJUWSA9IDMzMzUzOyAvLyAweDgyNDkKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19TT1VSQ0VfV0lORE9XX1NZU1RFTSA9IDMzMzUxOyAvLyAweDgyNDcKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19UWVBFX0RFUFJFQ0FURURfQkVIQVZJT1IgPSAzMzM1NzsgLy8gMHg4MjRkCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfVFlQRV9FUlJPUiA9IDMzMzU2OyAvLyAweDgyNGMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19UWVBFX01BUktFUiA9IDMzMzg0OyAvLyAweDgyNjgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19UWVBFX09USEVSID0gMzMzNjE7IC8vIDB4ODI1MQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1RZUEVfUEVSRk9STUFOQ0UgPSAzMzM2MDsgLy8gMHg4MjUwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfVFlQRV9QT1BfR1JPVVAgPSAzMzM4NjsgLy8gMHg4MjZhCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfVFlQRV9QT1JUQUJJTElUWSA9IDMzMzU5OyAvLyAweDgyNGYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19UWVBFX1BVU0hfR1JPVVAgPSAzMzM4NTsgLy8gMHg4MjY5CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfVFlQRV9VTkRFRklORURfQkVIQVZJT1IgPSAzMzM1ODsgLy8gMHg4MjRlCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfRElGRkVSRU5DRSA9IDM3NTM0OyAvLyAweDkyOWUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9FWENMVVNJT04gPSAzNzUzNjsgLy8gMHg5MmEwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfRklSU1RfVkVSVEVYX0NPTlZFTlRJT04gPSAzNjQyOTsgLy8gMHg4ZTRkCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfRlJBQ1RJT05BTF9FVkVOID0gMzY0NzY7IC8vIDB4OGU3YworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0ZSQUNUSU9OQUxfT0REID0gMzY0NzU7IC8vIDB4OGU3YgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0ZSQUdNRU5UX0lOVEVSUE9MQVRJT05fT0ZGU0VUX0JJVFMgPSAzNjQ0NTsgLy8gMHg4ZTVkCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9MQVlFUkVEID0gMzYyNjM7IC8vIDB4OGRhNworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0ZSQU1FQlVGRkVSX0RFRkFVTFRfTEFZRVJTID0gMzc2NTA7IC8vIDB4OTMxMgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTEFZRVJfVEFSR0VUUyA9IDM2MjY0OyAvLyAweDhkYTgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9HRU9NRVRSWV9JTlBVVF9UWVBFID0gMzUwOTU7IC8vIDB4ODkxNworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0dFT01FVFJZX09VVFBVVF9UWVBFID0gMzUwOTY7IC8vIDB4ODkxOAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0dFT01FVFJZX1NIQURFUiA9IDM2MzEzOyAvLyAweDhkZDkKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9HRU9NRVRSWV9TSEFERVJfQklUID0gNDsgLy8gMHg0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfR0VPTUVUUllfU0hBREVSX0lOVk9DQVRJT05TID0gMzQ5NDM7IC8vIDB4ODg3ZgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0dFT01FVFJZX1ZFUlRJQ0VTX09VVCA9IDM1MDk0OyAvLyAweDg5MTYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9HVUlMVFlfQ09OVEVYVF9SRVNFVCA9IDMzMzYzOyAvLyAweDgyNTMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9IQVJETElHSFQgPSAzNzUzMTsgLy8gMHg5MjliCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfSFNMX0NPTE9SID0gMzc1NTE7IC8vIDB4OTJhZgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0hTTF9IVUUgPSAzNzU0OTsgLy8gMHg5MmFkCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfSFNMX0xVTUlOT1NJVFkgPSAzNzU1MjsgLy8gMHg5MmIwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfSFNMX1NBVFVSQVRJT04gPSAzNzU1MDsgLy8gMHg5MmFlCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfSU1BR0VfQlVGRkVSID0gMzY5NDU7IC8vIDB4OTA1MQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0lNQUdFX0NVQkVfTUFQX0FSUkFZID0gMzY5NDg7IC8vIDB4OTA1NAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0lOTk9DRU5UX0NPTlRFWFRfUkVTRVQgPSAzMzM2NDsgLy8gMHg4MjU0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfSU5UX0lNQUdFX0JVRkZFUiA9IDM2OTU2OyAvLyAweDkwNWMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9JTlRfSU1BR0VfQ1VCRV9NQVBfQVJSQVkgPSAzNjk1OTsgLy8gMHg5MDVmCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfSU5UX1NBTVBMRVJfMkRfTVVMVElTQU1QTEVfQVJSQVkgPSAzNzEzMjsgLy8gMHg5MTBjCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfSU5UX1NBTVBMRVJfQlVGRkVSID0gMzYzMDQ7IC8vIDB4OGRkMAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0lOVF9TQU1QTEVSX0NVQkVfTUFQX0FSUkFZID0gMzY4Nzg7IC8vIDB4OTAwZQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0lTT0xJTkVTID0gMzY0NzQ7IC8vIDB4OGU3YQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0lTX1BFUl9QQVRDSCA9IDM3NjA3OyAvLyAweDkyZTcKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9MQVNUX1ZFUlRFWF9DT05WRU5USU9OID0gMzY0MzA7IC8vIDB4OGU0ZQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0xBWUVSX1BST1ZPS0lOR19WRVJURVggPSAzMzM3NDsgLy8gMHg4MjVlCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTElHSFRFTiA9IDM3NTI4OyAvLyAweDkyOTgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9MSU5FU19BREpBQ0VOQ1kgPSAxMDsgLy8gMHhhCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTElORV9TVFJJUF9BREpBQ0VOQ1kgPSAxMTsgLy8gMHhiCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTE9TRV9DT05URVhUX09OX1JFU0VUID0gMzMzNjI7IC8vIDB4ODI1MgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9DT01CSU5FRF9HRU9NRVRSWV9VTklGT1JNX0NPTVBPTkVOVFMgPSAzNTM3ODsgLy8gMHg4YTMyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX0NPTUJJTkVEX1RFU1NfQ09OVFJPTF9VTklGT1JNX0NPTVBPTkVOVFMgPSAzNjM4MjsgLy8gMHg4ZTFlCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX0NPTUJJTkVEX1RFU1NfRVZBTFVBVElPTl9VTklGT1JNX0NPTVBPTkVOVFMgPSAzNjM4MzsgLy8gMHg4ZTFmCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX0RFQlVHX0dST1VQX1NUQUNLX0RFUFRIID0gMzMzODg7IC8vIDB4ODI2YworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9ERUJVR19MT0dHRURfTUVTU0FHRVMgPSAzNzE4ODsgLy8gMHg5MTQ0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX0RFQlVHX01FU1NBR0VfTEVOR1RIID0gMzcxODc7IC8vIDB4OTE0MworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9GUkFHTUVOVF9JTlRFUlBPTEFUSU9OX09GRlNFVCA9IDM2NDQ0OyAvLyAweDhlNWMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfRlJBTUVCVUZGRVJfTEFZRVJTID0gMzc2NTU7IC8vIDB4OTMxNworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9HRU9NRVRSWV9BVE9NSUNfQ09VTlRFUlMgPSAzNzU4OTsgLy8gMHg5MmQ1CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX0dFT01FVFJZX0FUT01JQ19DT1VOVEVSX0JVRkZFUlMgPSAzNzU4MzsgLy8gMHg5MmNmCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX0dFT01FVFJZX0lNQUdFX1VOSUZPUk1TID0gMzcwNjk7IC8vIDB4OTBjZAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9HRU9NRVRSWV9JTlBVVF9DT01QT05FTlRTID0gMzcxNTU7IC8vIDB4OTEyMworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9HRU9NRVRSWV9PVVRQVVRfQ09NUE9ORU5UUyA9IDM3MTU2OyAvLyAweDkxMjQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfR0VPTUVUUllfT1VUUFVUX1ZFUlRJQ0VTID0gMzYzMjA7IC8vIDB4OGRlMAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9HRU9NRVRSWV9TSEFERVJfSU5WT0NBVElPTlMgPSAzNjQ0MjsgLy8gMHg4ZTVhCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX0dFT01FVFJZX1NIQURFUl9TVE9SQUdFX0JMT0NLUyA9IDM3MDc5OyAvLyAweDkwZDcKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfR0VPTUVUUllfVEVYVFVSRV9JTUFHRV9VTklUUyA9IDM1ODgxOyAvLyAweDhjMjkKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfR0VPTUVUUllfVE9UQUxfT1VUUFVUX0NPTVBPTkVOVFMgPSAzNjMyMTsgLy8gMHg4ZGUxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX0dFT01FVFJZX1VOSUZPUk1fQkxPQ0tTID0gMzUzNzI7IC8vIDB4OGEyYworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9HRU9NRVRSWV9VTklGT1JNX0NPTVBPTkVOVFMgPSAzNjMxOTsgLy8gMHg4ZGRmCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX0xBQkVMX0xFTkdUSCA9IDMzNTEyOyAvLyAweDgyZTgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfUEFUQ0hfVkVSVElDRVMgPSAzNjQ3NzsgLy8gMHg4ZTdkCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1RFU1NfQ09OVFJPTF9BVE9NSUNfQ09VTlRFUlMgPSAzNzU4NzsgLy8gMHg5MmQzCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1RFU1NfQ09OVFJPTF9BVE9NSUNfQ09VTlRFUl9CVUZGRVJTID0gMzc1ODE7IC8vIDB4OTJjZAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0NPTlRST0xfSU1BR0VfVU5JRk9STVMgPSAzNzA2NzsgLy8gMHg5MGNiCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1RFU1NfQ09OVFJPTF9JTlBVVF9DT01QT05FTlRTID0gMzQ5MjQ7IC8vIDB4ODg2YworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0NPTlRST0xfT1VUUFVUX0NPTVBPTkVOVFMgPSAzNjQ4MzsgLy8gMHg4ZTgzCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1RFU1NfQ09OVFJPTF9TSEFERVJfU1RPUkFHRV9CTE9DS1MgPSAzNzA4MDsgLy8gMHg5MGQ4CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1RFU1NfQ09OVFJPTF9URVhUVVJFX0lNQUdFX1VOSVRTID0gMzY0ODE7IC8vIDB4OGU4MQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0NPTlRST0xfVE9UQUxfT1VUUFVUX0NPTVBPTkVOVFMgPSAzNjQ4NTsgLy8gMHg4ZTg1CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1RFU1NfQ09OVFJPTF9VTklGT1JNX0JMT0NLUyA9IDM2NDg5OyAvLyAweDhlODkKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfVEVTU19DT05UUk9MX1VOSUZPUk1fQ09NUE9ORU5UUyA9IDM2NDc5OyAvLyAweDhlN2YKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfVEVTU19FVkFMVUFUSU9OX0FUT01JQ19DT1VOVEVSUyA9IDM3NTg4OyAvLyAweDkyZDQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfVEVTU19FVkFMVUFUSU9OX0FUT01JQ19DT1VOVEVSX0JVRkZFUlMgPSAzNzU4MjsgLy8gMHg5MmNlCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1RFU1NfRVZBTFVBVElPTl9JTUFHRV9VTklGT1JNUyA9IDM3MDY4OyAvLyAweDkwY2MKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfVEVTU19FVkFMVUFUSU9OX0lOUFVUX0NPTVBPTkVOVFMgPSAzNDkyNTsgLy8gMHg4ODZkCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1RFU1NfRVZBTFVBVElPTl9PVVRQVVRfQ09NUE9ORU5UUyA9IDM2NDg2OyAvLyAweDhlODYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfVEVTU19FVkFMVUFUSU9OX1NIQURFUl9TVE9SQUdFX0JMT0NLUyA9IDM3MDgxOyAvLyAweDkwZDkKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfVEVTU19FVkFMVUFUSU9OX1RFWFRVUkVfSU1BR0VfVU5JVFMgPSAzNjQ4MjsgLy8gMHg4ZTgyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1RFU1NfRVZBTFVBVElPTl9VTklGT1JNX0JMT0NLUyA9IDM2NDkwOyAvLyAweDhlOGEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfVEVTU19FVkFMVUFUSU9OX1VOSUZPUk1fQ09NUE9ORU5UUyA9IDM2NDgwOyAvLyAweDhlODAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfVEVTU19HRU5fTEVWRUwgPSAzNjQ3ODsgLy8gMHg4ZTdlCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1RFU1NfUEFUQ0hfQ09NUE9ORU5UUyA9IDM2NDg0OyAvLyAweDhlODQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfVEVYVFVSRV9CVUZGRVJfU0laRSA9IDM1ODgzOyAvLyAweDhjMmIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NSU5fRlJBR01FTlRfSU5URVJQT0xBVElPTl9PRkZTRVQgPSAzNjQ0MzsgLy8gMHg4ZTViCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUlOX1NBTVBMRV9TSEFESU5HX1ZBTFVFID0gMzU4OTU7IC8vIDB4OGMzNworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01VTFRJUExZID0gMzc1MjQ7IC8vIDB4OTI5NAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01VTFRJU0FNUExFX0xJTkVfV0lEVEhfR1JBTlVMQVJJVFkgPSAzNzc2MjsgLy8gMHg5MzgyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTVVMVElTQU1QTEVfTElORV9XSURUSF9SQU5HRSA9IDM3NzYxOyAvLyAweDkzODEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9OT19SRVNFVF9OT1RJRklDQVRJT04gPSAzMzM3NzsgLy8gMHg4MjYxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfT1ZFUkxBWSA9IDM3NTI2OyAvLyAweDkyOTYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9QQVRDSEVTID0gMTQ7IC8vIDB4ZQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1BBVENIX1ZFUlRJQ0VTID0gMzY0NjY7IC8vIDB4OGU3MgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1BSSU1JVElWRVNfR0VORVJBVEVEID0gMzU5NzU7IC8vIDB4OGM4NworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1BSSU1JVElWRV9CT1VORElOR19CT1ggPSAzNzU2NjsgLy8gMHg5MmJlCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfUFJJTUlUSVZFX1JFU1RBUlRfRk9SX1BBVENIRVNfU1VQUE9SVEVEID0gMzMzMTM7IC8vIDB4ODIyMQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1BST0dSQU0gPSAzMzUwNjsgLy8gMHg4MmUyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfUFJPR1JBTV9QSVBFTElORSA9IDMzNTA4OyAvLyAweDgyZTQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9RVUFEUyA9IDc7IC8vIDB4NworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1FVRVJZID0gMzM1MDc7IC8vIDB4ODJlMworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1JFRkVSRU5DRURfQllfR0VPTUVUUllfU0hBREVSID0gMzc2NDE7IC8vIDB4OTMwOQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1JFRkVSRU5DRURfQllfVEVTU19DT05UUk9MX1NIQURFUiA9IDM3NjM5OyAvLyAweDkzMDcKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9SRUZFUkVOQ0VEX0JZX1RFU1NfRVZBTFVBVElPTl9TSEFERVIgPSAzNzY0MDsgLy8gMHg5MzA4CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfUkVTRVRfTk9USUZJQ0FUSU9OX1NUUkFURUdZID0gMzMzNjY7IC8vIDB4ODI1NgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1NBTVBMRVIgPSAzMzUxMDsgLy8gMHg4MmU2CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfU0FNUExFUl8yRF9NVUxUSVNBTVBMRV9BUlJBWSA9IDM3MTMxOyAvLyAweDkxMGIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9TQU1QTEVSX0JVRkZFUiA9IDM2MjkwOyAvLyAweDhkYzIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9TQU1QTEVSX0NVQkVfTUFQX0FSUkFZID0gMzY4NzY7IC8vIDB4OTAwYworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1NBTVBMRVJfQ1VCRV9NQVBfQVJSQVlfU0hBRE9XID0gMzY4Nzc7IC8vIDB4OTAwZAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1NBTVBMRV9TSEFESU5HID0gMzU4OTQ7IC8vIDB4OGMzNgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1NDUkVFTiA9IDM3NTI1OyAvLyAweDkyOTUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9TSEFERVIgPSAzMzUwNTsgLy8gMHg4MmUxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfU09GVExJR0hUID0gMzc1MzI7IC8vIDB4OTI5YworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1NUQUNLX09WRVJGTE9XID0gMTI4MzsgLy8gMHg1MDMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9TVEFDS19VTkRFUkZMT1cgPSAxMjg0OyAvLyAweDUwNAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFU1NfQ09OVFJPTF9PVVRQVVRfVkVSVElDRVMgPSAzNjQ2OTsgLy8gMHg4ZTc1CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVEVTU19DT05UUk9MX1NIQURFUiA9IDM2NDg4OyAvLyAweDhlODgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9URVNTX0NPTlRST0xfU0hBREVSX0JJVCA9IDg7IC8vIDB4OAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFU1NfRVZBTFVBVElPTl9TSEFERVIgPSAzNjQ4NzsgLy8gMHg4ZTg3CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVEVTU19FVkFMVUFUSU9OX1NIQURFUl9CSVQgPSAxNjsgLy8gMHgxMAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFU1NfR0VOX01PREUgPSAzNjQ3MDsgLy8gMHg4ZTc2CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVEVTU19HRU5fUE9JTlRfTU9ERSA9IDM2NDczOyAvLyAweDhlNzkKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9URVNTX0dFTl9TUEFDSU5HID0gMzY0NzE7IC8vIDB4OGU3NworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFU1NfR0VOX1ZFUlRFWF9PUkRFUiA9IDM2NDcyOyAvLyAweDhlNzgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9URVhUVVJFXzJEX01VTFRJU0FNUExFX0FSUkFZID0gMzcxMjI7IC8vIDB4OTEwMgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfQklORElOR18yRF9NVUxUSVNBTVBMRV9BUlJBWSA9IDM3MTI1OyAvLyAweDkxMDUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9URVhUVVJFX0JJTkRJTkdfQlVGRkVSID0gMzU4ODQ7IC8vIDB4OGMyYworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfQklORElOR19DVUJFX01BUF9BUlJBWSA9IDM2ODc0OyAvLyAweDkwMGEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9URVhUVVJFX0JPUkRFUl9DT0xPUiA9IDQxMDA7IC8vIDB4MTAwNAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfQlVGRkVSID0gMzU4ODI7IC8vIDB4OGMyYQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfQlVGRkVSX0JJTkRJTkcgPSAzNTg4MjsgLy8gMHg4YzJhCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVEVYVFVSRV9CVUZGRVJfREFUQV9TVE9SRV9CSU5ESU5HID0gMzU4ODU7IC8vIDB4OGMyZAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfQlVGRkVSX09GRlNFVCA9IDM3Mjc3OyAvLyAweDkxOWQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9URVhUVVJFX0JVRkZFUl9PRkZTRVRfQUxJR05NRU5UID0gMzcyNzk7IC8vIDB4OTE5ZgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfQlVGRkVSX1NJWkUgPSAzNzI3ODsgLy8gMHg5MTllCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVEVYVFVSRV9DVUJFX01BUF9BUlJBWSA9IDM2ODczOyAvLyAweDkwMDkKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9UUklBTkdMRVNfQURKQUNFTkNZID0gMTI7IC8vIDB4YworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RSSUFOR0xFX1NUUklQX0FESkFDRU5DWSA9IDEzOyAvLyAweGQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9VTkRFRklORURfVkVSVEVYID0gMzMzNzY7IC8vIDB4ODI2MAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1VOS05PV05fQ09OVEVYVF9SRVNFVCA9IDMzMzY1OyAvLyAweDgyNTUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9VTlNJR05FRF9JTlRfSU1BR0VfQlVGRkVSID0gMzY5Njc7IC8vIDB4OTA2NworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1VOU0lHTkVEX0lOVF9JTUFHRV9DVUJFX01BUF9BUlJBWSA9IDM2OTcwOyAvLyAweDkwNmEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8yRF9NVUxUSVNBTVBMRV9BUlJBWSA9IDM3MTMzOyAvLyAweDkxMGQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl9CVUZGRVIgPSAzNjMxMjsgLy8gMHg4ZGQ4CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfQ1VCRV9NQVBfQVJSQVkgPSAzNjg3OTsgLy8gMHg5MDBmCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVkVSVEVYX0FSUkFZID0gMzI4ODQ7IC8vIDB4ODA3NAorICB9CisKKyAgcHVibGljIHN0YXRpYyBhYnN0cmFjdCBpbnRlcmZhY2UgR0xFUzMyLkRlYnVnUHJvYyB7CisgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIG9uTWVzc2FnZShpbnQsIGludCwgaW50LCBpbnQsIGphdmEubGFuZy5TdHJpbmcpOworICB9CisKICAgcHVibGljIGNsYXNzIEdMRXhjZXB0aW9uIGV4dGVuZHMgamF2YS5sYW5nLlJ1bnRpbWVFeGNlcHRpb24gewogICAgIGN0b3IgcHVibGljIEdMRXhjZXB0aW9uKGludCk7CiAgICAgY3RvciBwdWJsaWMgR0xFeGNlcHRpb24oaW50LCBqYXZhLmxhbmcuU3RyaW5nKTsKQEAgLTI4ODY4LDYgKzI5MTU2LDkgQEAKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQucHJpbnQuUHJpbnRlckluZm8gYnVpbGQoKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQucHJpbnQuUHJpbnRlckluZm8uQnVpbGRlciBzZXRDYXBhYmlsaXRpZXMoYW5kcm9pZC5wcmludC5QcmludGVyQ2FwYWJpbGl0aWVzSW5mbyk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnByaW50LlByaW50ZXJJbmZvLkJ1aWxkZXIgc2V0RGVzY3JpcHRpb24oamF2YS5sYW5nLlN0cmluZyk7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnByaW50LlByaW50ZXJJbmZvLkJ1aWxkZXIgc2V0SGFzQ3VzdG9tUHJpbnRlckljb24oKTsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQucHJpbnQuUHJpbnRlckluZm8uQnVpbGRlciBzZXRJY29uUmVzb3VyY2VJZChpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5wcmludC5QcmludGVySW5mby5CdWlsZGVyIHNldEluZm9JbnRlbnQoYW5kcm9pZC5hcHAuUGVuZGluZ0ludGVudCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnByaW50LlByaW50ZXJJbmZvLkJ1aWxkZXIgc2V0TmFtZShqYXZhLmxhbmcuU3RyaW5nKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQucHJpbnQuUHJpbnRlckluZm8uQnVpbGRlciBzZXRTdGF0dXMoaW50KTsKICAgfQpAQCAtMjg4ODgsNiArMjkxNzksMTAgQEAKIAogcGFja2FnZSBhbmRyb2lkLnByaW50c2VydmljZSB7CiAKKyAgcHVibGljIGNsYXNzIEN1c3RvbVByaW50ZXJJY29uQ2FsbGJhY2sgeworICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBvbkN1c3RvbVByaW50ZXJJY29uTG9hZGVkKGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuSWNvbik7CisgIH0KKwogICBwdWJsaWMgZmluYWwgY2xhc3MgUHJpbnREb2N1bWVudCB7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLm9zLlBhcmNlbEZpbGVEZXNjcmlwdG9yIGdldERhdGEoKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQucHJpbnQuUHJpbnREb2N1bWVudEluZm8gZ2V0SW5mbygpOwpAQCAtMjg5NDMsNiArMjkyMzgsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgYm9vbGVhbiBpc0Rlc3Ryb3llZCgpOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgYm9vbGVhbiBpc1ByaW50ZXJEaXNjb3ZlcnlTdGFydGVkKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIG9uRGVzdHJveSgpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBvblJlcXVlc3RDdXN0b21QcmludGVySWNvbihhbmRyb2lkLnByaW50LlByaW50ZXJJZCwgYW5kcm9pZC5wcmludHNlcnZpY2UuQ3VzdG9tUHJpbnRlckljb25DYWxsYmFjayk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIG9uU3RhcnRQcmludGVyRGlzY292ZXJ5KGphdmEudXRpbC5MaXN0PGFuZHJvaWQucHJpbnQuUHJpbnRlcklkPik7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIG9uU3RhcnRQcmludGVyU3RhdGVUcmFja2luZyhhbmRyb2lkLnByaW50LlByaW50ZXJJZCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIG9uU3RvcFByaW50ZXJEaXNjb3ZlcnkoKTsKQEAgLTI5MzExLDYgKzI5NjA3LDcgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgR0VPQ09ERURfTE9DQVRJT04gPSAiZ2VvY29kZWRfbG9jYXRpb24iOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOQ09NSU5HX1RZUEUgPSAxOyAvLyAweDEKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgSVNfUkVBRCA9ICJpc19yZWFkIjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgTEFTVF9NT0RJRklFRCA9ICJsYXN0X21vZGlmaWVkIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgTElNSVRfUEFSQU1fS0VZID0gImxpbWl0IjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNSVNTRURfVFlQRSA9IDM7IC8vIDB4MwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBORVcgPSAibmV3IjsKQEAgLTMwOTE5LDYgKzMxMjE2LDcgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQUNUSU9OX0xPQ0FUSU9OX1NPVVJDRV9TRVRUSU5HUyA9ICJhbmRyb2lkLnNldHRpbmdzLkxPQ0FUSU9OX1NPVVJDRV9TRVRUSU5HUyI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEFDVElPTl9NQU5BR0VfQUxMX0FQUExJQ0FUSU9OU19TRVRUSU5HUyA9ICJhbmRyb2lkLnNldHRpbmdzLk1BTkFHRV9BTExfQVBQTElDQVRJT05TX1NFVFRJTkdTIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQUNUSU9OX01BTkFHRV9BUFBMSUNBVElPTlNfU0VUVElOR1MgPSAiYW5kcm9pZC5zZXR0aW5ncy5NQU5BR0VfQVBQTElDQVRJT05TX1NFVFRJTkdTIjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQUNUSU9OX01BTkFHRV9ERUZBVUxUX0FQUFNfU0VUVElOR1MgPSAiYW5kcm9pZC5zZXR0aW5ncy5NQU5BR0VfREVGQVVMVF9BUFBTX1NFVFRJTkdTIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQUNUSU9OX01BTkFHRV9PVkVSTEFZX1BFUk1JU1NJT04gPSAiYW5kcm9pZC5zZXR0aW5ncy5hY3Rpb24uTUFOQUdFX09WRVJMQVlfUEVSTUlTU0lPTiI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEFDVElPTl9NQU5BR0VfV1JJVEVfU0VUVElOR1MgPSAiYW5kcm9pZC5zZXR0aW5ncy5hY3Rpb24uTUFOQUdFX1dSSVRFX1NFVFRJTkdTIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQUNUSU9OX01FTU9SWV9DQVJEX1NFVFRJTkdTID0gImFuZHJvaWQuc2V0dGluZ3MuTUVNT1JZX0NBUkRfU0VUVElOR1MiOwpAQCAtMzE1ODAsNiArMzE4NzgsNyBAQAogCiAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgVm9pY2VtYWlsQ29udHJhY3QuU3RhdHVzIGltcGxlbWVudHMgYW5kcm9pZC5wcm92aWRlci5CYXNlQ29sdW1ucyB7CiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC5uZXQuVXJpIGJ1aWxkU291cmNlVXJpKGphdmEubGFuZy5TdHJpbmcpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgc2V0UXVvdGEoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudGVsZWNvbS5QaG9uZUFjY291bnRIYW5kbGUsIGludCwgaW50KTsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQ09ORklHVVJBVElPTl9TVEFURSA9ICJjb25maWd1cmF0aW9uX3N0YXRlIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05GSUdVUkFUSU9OX1NUQVRFX0NBTl9CRV9DT05GSUdVUkVEID0gMjsgLy8gMHgyCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09ORklHVVJBVElPTl9TVEFURV9OT1RfQ09ORklHVVJFRCA9IDE7IC8vIDB4MQpAQCAtMzE1OTYsNiArMzE4OTUsOSBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5PVElGSUNBVElPTl9DSEFOTkVMX1NUQVRFX09LID0gMDsgLy8gMHgwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIFBIT05FX0FDQ09VTlRfQ09NUE9ORU5UX05BTUUgPSAicGhvbmVfYWNjb3VudF9jb21wb25lbnRfbmFtZSI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIFBIT05FX0FDQ09VTlRfSUQgPSAicGhvbmVfYWNjb3VudF9pZCI7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIFFVT1RBX09DQ1VQSUVEID0gInF1b3RhX29jY3VwaWVkIjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgUVVPVEFfVE9UQUwgPSAicXVvdGFfdG90YWwiOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFFVT1RBX1VOQVZBSUxBQkxFID0gLTE7IC8vIDB4ZmZmZmZmZmYKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgU0VUVElOR1NfVVJJID0gInNldHRpbmdzX3VyaSI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIFNPVVJDRV9QQUNLQUdFID0gInNvdXJjZV9wYWNrYWdlIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgVk9JQ0VNQUlMX0FDQ0VTU19VUkkgPSAidm9pY2VtYWlsX2FjY2Vzc191cmkiOwpAQCAtMzE2MTIsNiArMzE5MTQsNyBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBIQVNfQ09OVEVOVCA9ICJoYXNfY29udGVudCI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIElTX1JFQUQgPSAiaXNfcmVhZCI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIElURU1fVFlQRSA9ICJ2bmQuYW5kcm9pZC5jdXJzb3IuaXRlbS92b2ljZW1haWwiOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBMQVNUX01PRElGSUVEID0gImxhc3RfbW9kaWZpZWQiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBNSU1FX1RZUEUgPSAibWltZV90eXBlIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgTlVNQkVSID0gIm51bWJlciI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIFBIT05FX0FDQ09VTlRfQ09NUE9ORU5UX05BTUUgPSAic3Vic2NyaXB0aW9uX2NvbXBvbmVudF9uYW1lIjsKQEAgLTMyODAzLDYgKzMzMTA2LDcgQEAKICAgcHVibGljIGNsYXNzIE5ldHdvcmtTZWN1cml0eVBvbGljeSB7CiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC5zZWN1cml0eS5OZXR3b3JrU2VjdXJpdHlQb2xpY3kgZ2V0SW5zdGFuY2UoKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNDbGVhcnRleHRUcmFmZmljUGVybWl0dGVkKCk7CisgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzQ2xlYXJ0ZXh0VHJhZmZpY1Blcm1pdHRlZChqYXZhLmxhbmcuU3RyaW5nKTsKICAgfQogCiB9CkBAIC0zMzIxOCw2ICszMzUyMiw3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUkVBU09OX1BBQ0tBR0VfQkFOTkVEID0gNzsgLy8gMHg3CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUkVBU09OX1BBQ0tBR0VfQ0hBTkdFRCA9IDU7IC8vIDB4NQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJFQVNPTl9VU0VSX1NUT1BQRUQgPSA2OyAvLyAweDYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgU0VSVklDRV9JTlRFUkZBQ0UgPSAiYW5kcm9pZC5zZXJ2aWNlLm5vdGlmaWNhdGlvbi5Ob3RpZmljYXRpb25Bc3Npc3RhbnRTZXJ2aWNlIjsKICAgfQogCiAgIHB1YmxpYyBjbGFzcyBOb3RpZmljYXRpb25Bc3Npc3RhbnRTZXJ2aWNlLkFkanVzdG1lbnQgewpAQCAtMzMyNDcsNiArMzM1NTIsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgdm9pZCByZXF1ZXN0SW50ZXJydXB0aW9uRmlsdGVyKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCB2b2lkIHJlcXVlc3RMaXN0ZW5lckhpbnRzKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCB2b2lkIHNldE5vdGlmaWNhdGlvbnNTaG93bihqYXZhLmxhbmcuU3RyaW5nW10pOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBDQVRFR09SWV9WUl9OT1RJRklDQVRJT05TID0gImFuZHJvaWQuaW50ZW50LmNhdGVnb3J5LnZyLm5vdGlmaWNhdGlvbnMiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEhJTlRfSE9TVF9ESVNBQkxFX0VGRkVDVFMgPSAxOyAvLyAweDEKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTlRFUlJVUFRJT05fRklMVEVSX0FMQVJNUyA9IDQ7IC8vIDB4NAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOVEVSUlVQVElPTl9GSUxURVJfQUxMID0gMTsgLy8gMHgxCkBAIC0zMzI1Niw2ICszMzU2Miw3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIFNFUlZJQ0VfSU5URVJGQUNFID0gImFuZHJvaWQuc2VydmljZS5ub3RpZmljYXRpb24uTm90aWZpY2F0aW9uTGlzdGVuZXJTZXJ2aWNlIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVVBQUkVTU0VEX0VGRkVDVF9MSUdIVFMgPSAxOyAvLyAweDEKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVVBQUkVTU0VEX0VGRkVDVF9QRUVLID0gMjsgLy8gMHgyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1VQUFJFU1NFRF9FRkZFQ1RfU0NSRUVOX09OID0gNDsgLy8gMHg0CiAgIH0KIAogICBwdWJsaWMgc3RhdGljIGNsYXNzIE5vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZS5SYW5raW5nIHsKQEAgLTMzMzI3LDEwICszMzYzNCwxMyBAQAogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBvbkNsaWNrKCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIG9uU3RhcnRMaXN0ZW5pbmcoKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgb25TdG9wTGlzdGVuaW5nKCk7Ci0gICAgbWV0aG9kIHB1YmxpYyB2b2lkIG9uVGlsZUFkZGVkKCk7CisgICAgbWV0aG9kIHB1YmxpYyBpbnQgb25UaWxlQWRkZWQoKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgb25UaWxlUmVtb3ZlZCgpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGZpbmFsIHZvaWQgcmVxdWVzdExpc3RlbmluZ1N0YXRlKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSk7CiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCB2b2lkIHNob3dEaWFsb2coYW5kcm9pZC5hcHAuRGlhbG9nKTsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQUNUSU9OX1FTX1RJTEUgPSAiYW5kcm9pZC5zZXJ2aWNlLnF1aWNrc2V0dGluZ3MuYWN0aW9uLlFTX1RJTEUiOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRJTEVfTU9ERV9BQ1RJVkUgPSAyOyAvLyAweDIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUSUxFX01PREVfUEFTU0lWRSA9IDE7IC8vIDB4MQogICB9CiAKIH0KQEAgLTM0NTkxLDYgKzM0OTAxLDcgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQUk9QRVJUWV9HRU5FUklDX0NPTkZFUkVOQ0UgPSAyOyAvLyAweDIKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQUk9QRVJUWV9ISUdIX0RFRl9BVURJTyA9IDE2OyAvLyAweDEwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJPUEVSVFlfV0lGSSA9IDg7IC8vIDB4OAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBST1BFUlRZX1dPUktfQ0FMTCA9IDMyOyAvLyAweDIwCiAgIH0KIAogICBwdWJsaWMgZmluYWwgY2xhc3MgQ2FsbEF1ZGlvU3RhdGUgaW1wbGVtZW50cyBhbmRyb2lkLm9zLlBhcmNlbGFibGUgewpAQCAtMzY0MjksNyArMzY3NDAsNiBAQAogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZSBnZXRBcHBsaWNhdGlvbkxvZ28oamF2YS5sYW5nLlN0cmluZykgdGhyb3dzIGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5OYW1lTm90Rm91bmRFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0Q29tcG9uZW50RW5hYmxlZFNldHRpbmcoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZSBnZXREZWZhdWx0QWN0aXZpdHlJY29uKCk7Ci0gICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldERlZmF1bHRCcm93c2VyUGFja2FnZU5hbWUoaW50KTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGUgZ2V0RHJhd2FibGUoamF2YS5sYW5nLlN0cmluZywgaW50LCBhbmRyb2lkLmNvbnRlbnQucG0uQXBwbGljYXRpb25JbmZvKTsKICAgICBtZXRob2QgcHVibGljIGJ5dGVbXSBnZXRFcGhlbWVyYWxDb29raWUoKTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXRFcGhlbWVyYWxDb29raWVNYXhTaXplQnl0ZXMoKTsKQEAgLTM2NDgxLDcgKzM2NzkxLDYgQEAKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuY29udGVudC5wbS5SZXNvbHZlSW5mbyByZXNvbHZlU2VydmljZShhbmRyb2lkLmNvbnRlbnQuSW50ZW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRBcHBsaWNhdGlvbkVuYWJsZWRTZXR0aW5nKGphdmEubGFuZy5TdHJpbmcsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0Q29tcG9uZW50RW5hYmxlZFNldHRpbmcoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGludCwgaW50KTsKLSAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gc2V0RGVmYXVsdEJyb3dzZXJQYWNrYWdlTmFtZShqYXZhLmxhbmcuU3RyaW5nLCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBzZXRFcGhlbWVyYWxDb29raWUoYnl0ZVtdKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0SW5zdGFsbGVyUGFja2FnZU5hbWUoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHZlcmlmeVBlbmRpbmdJbnN0YWxsKGludCwgaW50KTsKQEAgLTM5MzA2LDcgKzM5NjE1LDYgQEAKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gZ2V0UmVzdWx0KCk7CiAgICAgbWV0aG9kIHB1YmxpYyBmbG9hdCBnZXRYKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBmbG9hdCBnZXRZKCk7Ci0gICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnZpZXcuRHJvcFBlcm1pc3Npb25zIHJlcXVlc3REcm9wUGVybWlzc2lvbnMoKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgd3JpdGVUb1BhcmNlbChhbmRyb2lkLm9zLlBhcmNlbCwgaW50KTsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBQ1RJT05fRFJBR19FTkRFRCA9IDQ7IC8vIDB4NAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFDVElPTl9EUkFHX0VOVEVSRUQgPSA1OyAvLyAweDUKQEAgLTQwMjQ0LDYgKzQwNTUyLDggQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBWElTX0xUUklHR0VSID0gMTc7IC8vIDB4MTEKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBWElTX09SSUVOVEFUSU9OID0gODsgLy8gMHg4CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQVhJU19QUkVTU1VSRSA9IDI7IC8vIDB4MgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFYSVNfUkVMQVRJVkVfWCA9IDI3OyAvLyAweDFiCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQVhJU19SRUxBVElWRV9ZID0gMjg7IC8vIDB4MWMKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBWElTX1JUUklHR0VSID0gMTg7IC8vIDB4MTIKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBWElTX1JVRERFUiA9IDIwOyAvLyAweDE0CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQVhJU19SWCA9IDEyOyAvLyAweGMKQEAgLTQwNzc5LDYgKzQxMDg5LDcgQEAKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaGFzTmVzdGVkU2Nyb2xsaW5nUGFyZW50KCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGhhc09uQ2xpY2tMaXN0ZW5lcnMoKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaGFzT3ZlcmxhcHBpbmdSZW5kZXJpbmcoKTsKKyAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaGFzUG9pbnRlckNhcHR1cmUoKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaGFzVHJhbnNpZW50U3RhdGUoKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaGFzV2luZG93Rm9jdXMoKTsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLnZpZXcuVmlldyBpbmZsYXRlKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBpbnQsIGFuZHJvaWQudmlldy5WaWV3R3JvdXApOwpAQCAtNDA5MDUsNiArNDEyMTYsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBwb3N0T25BbmltYXRpb24oamF2YS5sYW5nLlJ1bm5hYmxlKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgcG9zdE9uQW5pbWF0aW9uRGVsYXllZChqYXZhLmxhbmcuUnVubmFibGUsIGxvbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCByZWZyZXNoRHJhd2FibGVTdGF0ZSgpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCByZWxlYXNlUG9pbnRlckNhcHR1cmUoKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gcmVtb3ZlQ2FsbGJhY2tzKGphdmEubGFuZy5SdW5uYWJsZSk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHJlbW92ZU9uQXR0YWNoU3RhdGVDaGFuZ2VMaXN0ZW5lcihhbmRyb2lkLnZpZXcuVmlldy5PbkF0dGFjaFN0YXRlQ2hhbmdlTGlzdGVuZXIpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCByZW1vdmVPbkxheW91dENoYW5nZUxpc3RlbmVyKGFuZHJvaWQudmlldy5WaWV3Lk9uTGF5b3V0Q2hhbmdlTGlzdGVuZXIpOwpAQCAtNDEwMDUsNiArNDEzMTcsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRQYWRkaW5nUmVsYXRpdmUoaW50LCBpbnQsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0UGl2b3RYKGZsb2F0KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0UGl2b3RZKGZsb2F0KTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0UG9pbnRlckNhcHR1cmUoKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0UG9pbnRlckljb24oYW5kcm9pZC52aWV3LlBvaW50ZXJJY29uKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0UHJlc3NlZChib29sZWFuKTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIHZvaWQgc2V0UmlnaHQoaW50KTsKQEAgLTU5NDE2LDggKzU5NzI5LDggQEAKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmdCdWZmZXIgYXBwZW5kVGFpbChqYXZhLmxhbmcuU3RyaW5nQnVmZmVyKTsKICAgICBtZXRob2QgcHVibGljIGludCBlbmQoKTsKICAgICBtZXRob2QgcHVibGljIGludCBlbmQoaW50KTsKLSAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gZmluZChpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBmaW5kKCk7CisgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGZpbmQoaW50KTsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ3JvdXAoKTsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ3JvdXAoaW50KTsKICAgICBtZXRob2QgcHVibGljIGludCBncm91cENvdW50KCk7CkBAIC01OTQ0NSw4ICs1OTc1OCw4IEBACiAgIH0KIAogICBwdWJsaWMgZmluYWwgY2xhc3MgUGF0dGVybiBpbXBsZW1lbnRzIGphdmEuaW8uU2VyaWFsaXphYmxlIHsKLSAgICBtZXRob2QgcHVibGljIHN0YXRpYyBqYXZhLnV0aWwucmVnZXguUGF0dGVybiBjb21waWxlKGphdmEubGFuZy5TdHJpbmcsIGludCkgdGhyb3dzIGphdmEudXRpbC5yZWdleC5QYXR0ZXJuU3ludGF4RXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGphdmEudXRpbC5yZWdleC5QYXR0ZXJuIGNvbXBpbGUoamF2YS5sYW5nLlN0cmluZyk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm4gY29tcGlsZShqYXZhLmxhbmcuU3RyaW5nLCBpbnQpIHRocm93cyBqYXZhLnV0aWwucmVnZXguUGF0dGVyblN5bnRheEV4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIGludCBmbGFncygpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS51dGlsLnJlZ2V4Lk1hdGNoZXIgbWF0Y2hlcihqYXZhLmxhbmcuQ2hhclNlcXVlbmNlKTsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBib29sZWFuIG1hdGNoZXMoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLkNoYXJTZXF1ZW5jZSk7CkBAIC01OTQ2MSw2ICs1OTc3NCw3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTElURVJBTCA9IDE2OyAvLyAweDEwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTVVMVElMSU5FID0gODsgLy8gMHg4CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVU5JQ09ERV9DQVNFID0gNjQ7IC8vIDB4NDAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVTklDT0RFX0NIQVJBQ1RFUl9DTEFTUyA9IDI1NjsgLy8gMHgxMDAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVTklYX0xJTkVTID0gMTsgLy8gMHgxCiAgIH0KIApkaWZmIC0tZ2l0IGEvYXBpL3JlbW92ZWQudHh0IGIvYXBpL3JlbW92ZWQudHh0CmluZGV4IGYxMmU2MWUuLjZiNzk2MWUgMTAwNjQ0Ci0tLSBhL2FwaS9yZW1vdmVkLnR4dAorKysgYi9hcGkvcmVtb3ZlZC50eHQKQEAgLTE5OSw2ICsxOTksMTUgQEAKIAogfQogCitwYWNrYWdlIGFuZHJvaWQudGVzdC5tb2NrIHsKKworICBwdWJsaWMgY2xhc3MgTW9ja1BhY2thZ2VNYW5hZ2VyIGV4dGVuZHMgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyIHsKKyAgICBtZXRob2QgcHVibGljIGRlcHJlY2F0ZWQgamF2YS5sYW5nLlN0cmluZyBnZXREZWZhdWx0QnJvd3NlclBhY2thZ2VOYW1lKGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBkZXByZWNhdGVkIGJvb2xlYW4gc2V0RGVmYXVsdEJyb3dzZXJQYWNrYWdlTmFtZShqYXZhLmxhbmcuU3RyaW5nLCBpbnQpOworICB9CisKK30KKwogcGFja2FnZSBhbmRyb2lkLnRleHQuZm9ybWF0IHsKIAogICBwdWJsaWMgY2xhc3MgRGF0ZUZvcm1hdCB7CmRpZmYgLS1naXQgYS9hcGkvc3lzdGVtLWN1cnJlbnQudHh0IGIvYXBpL3N5c3RlbS1jdXJyZW50LnR4dAppbmRleCA3NjhkZDYzLi41Y2JmMDZjIDEwMDY0NAotLS0gYS9hcGkvc3lzdGVtLWN1cnJlbnQudHh0CisrKyBiL2FwaS9zeXN0ZW0tY3VycmVudC50eHQKQEAgLTkzLDcgKzkzLDYgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRFVNUCA9ICJhbmRyb2lkLnBlcm1pc3Npb24uRFVNUCI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEVYUEFORF9TVEFUVVNfQkFSID0gImFuZHJvaWQucGVybWlzc2lvbi5FWFBBTkRfU1RBVFVTX0JBUiI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEZBQ1RPUllfVEVTVCA9ICJhbmRyb2lkLnBlcm1pc3Npb24uRkFDVE9SWV9URVNUIjsKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRkxBU0hMSUdIVCA9ICJhbmRyb2lkLnBlcm1pc3Npb24uRkxBU0hMSUdIVCI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEZPUkNFX0JBQ0sgPSAiYW5kcm9pZC5wZXJtaXNzaW9uLkZPUkNFX0JBQ0siOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBGT1JDRV9TVE9QX1BBQ0tBR0VTID0gImFuZHJvaWQucGVybWlzc2lvbi5GT1JDRV9TVE9QX1BBQ0tBR0VTIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgR0VUX0FDQ09VTlRTID0gImFuZHJvaWQucGVybWlzc2lvbi5HRVRfQUNDT1VOVFMiOwpAQCAtMzYwOSw2ICszNjA4LDcgQEAKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gcmVsZWFzZUluc3RhbmNlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCBkZXByZWNhdGVkIHZvaWQgcmVtb3ZlRGlhbG9nKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHJlcG9ydEZ1bGx5RHJhd24oKTsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQudmlldy5Ecm9wUGVybWlzc2lvbnMgcmVxdWVzdERyb3BQZXJtaXNzaW9ucyhhbmRyb2lkLnZpZXcuRHJhZ0V2ZW50KTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIHZvaWQgcmVxdWVzdFBlcm1pc3Npb25zKGphdmEubGFuZy5TdHJpbmdbXSwgaW50KTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gcmVxdWVzdFZpc2libGVCZWhpbmQoYm9vbGVhbik7CiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCBib29sZWFuIHJlcXVlc3RXaW5kb3dGZWF0dXJlKGludCk7CkBAIC0zNjQzLDYgKzM2NDMsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgZGVwcmVjYXRlZCB2b2lkIHNldFRpdGxlQ29sb3IoaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0VmlzaWJsZShib29sZWFuKTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIHZvaWQgc2V0Vm9sdW1lQ29udHJvbFN0cmVhbShpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRWck1vZGUoYm9vbGVhbik7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIHNob3VsZFNob3dSZXF1ZXN0UGVybWlzc2lvblJhdGlvbmFsZShqYXZhLmxhbmcuU3RyaW5nKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gc2hvdWxkVXBSZWNyZWF0ZVRhc2soYW5kcm9pZC5jb250ZW50LkludGVudCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIHNob3dBc3Npc3QoYW5kcm9pZC5vcy5CdW5kbGUpOwpAQCAtNDIwMCwxMSArNDIwMSwxNCBAQAogICB9CiAKICAgcHVibGljIGNsYXNzIERhdGVQaWNrZXJEaWFsb2cgZXh0ZW5kcyBhbmRyb2lkLmFwcC5BbGVydERpYWxvZyBpbXBsZW1lbnRzIGFuZHJvaWQud2lkZ2V0LkRhdGVQaWNrZXIuT25EYXRlQ2hhbmdlZExpc3RlbmVyIGFuZHJvaWQuY29udGVudC5EaWFsb2dJbnRlcmZhY2UuT25DbGlja0xpc3RlbmVyIHsKKyAgICBjdG9yIHB1YmxpYyBEYXRlUGlja2VyRGlhbG9nKGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKKyAgICBjdG9yIHB1YmxpYyBEYXRlUGlja2VyRGlhbG9nKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBpbnQpOwogICAgIGN0b3IgcHVibGljIERhdGVQaWNrZXJEaWFsb2coYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQuYXBwLkRhdGVQaWNrZXJEaWFsb2cuT25EYXRlU2V0TGlzdGVuZXIsIGludCwgaW50LCBpbnQpOwogICAgIGN0b3IgcHVibGljIERhdGVQaWNrZXJEaWFsb2coYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGludCwgYW5kcm9pZC5hcHAuRGF0ZVBpY2tlckRpYWxvZy5PbkRhdGVTZXRMaXN0ZW5lciwgaW50LCBpbnQsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLndpZGdldC5EYXRlUGlja2VyIGdldERhdGVQaWNrZXIoKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgb25DbGljayhhbmRyb2lkLmNvbnRlbnQuRGlhbG9nSW50ZXJmYWNlLCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBvbkRhdGVDaGFuZ2VkKGFuZHJvaWQud2lkZ2V0LkRhdGVQaWNrZXIsIGludCwgaW50LCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRPbkRhdGVTZXRMaXN0ZW5lcihhbmRyb2lkLmFwcC5EYXRlUGlja2VyRGlhbG9nLk9uRGF0ZVNldExpc3RlbmVyKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgdXBkYXRlRGF0ZShpbnQsIGludCwgaW50KTsKICAgfQogCkBAIC00MzQ0LDcgKzQzNDgsNyBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBDT0xVTU5fREVTQ1JJUFRJT04gPSAiZGVzY3JpcHRpb24iOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBDT0xVTU5fSUQgPSAiX2lkIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQ09MVU1OX0xBU1RfTU9ESUZJRURfVElNRVNUQU1QID0gImxhc3RfbW9kaWZpZWRfdGltZXN0YW1wIjsKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQ09MVU1OX0xPQ0FMX0ZJTEVOQU1FID0gImxvY2FsX2ZpbGVuYW1lIjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGRlcHJlY2F0ZWQgamF2YS5sYW5nLlN0cmluZyBDT0xVTU5fTE9DQUxfRklMRU5BTUUgPSAibG9jYWxfZmlsZW5hbWUiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBDT0xVTU5fTE9DQUxfVVJJID0gImxvY2FsX3VyaSI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIENPTFVNTl9NRURJQVBST1ZJREVSX1VSSSA9ICJtZWRpYXByb3ZpZGVyX3VyaSI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIENPTFVNTl9NRURJQV9UWVBFID0gIm1lZGlhX3R5cGUiOwpAQCAtNDk1Niw2ICs0OTYwLDcgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRVhUUkFfUFJPR1JFU1MgPSAiYW5kcm9pZC5wcm9ncmVzcyI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEVYVFJBX1BST0dSRVNTX0lOREVURVJNSU5BVEUgPSAiYW5kcm9pZC5wcm9ncmVzc0luZGV0ZXJtaW5hdGUiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBFWFRSQV9QUk9HUkVTU19NQVggPSAiYW5kcm9pZC5wcm9ncmVzc01heCI7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEVYVFJBX1JFTU9URV9JTlBVVF9ISVNUT1JZID0gImFuZHJvaWQucmVtb3RlSW5wdXRIaXN0b3J5IjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRVhUUkFfU0hPV19DSFJPTk9NRVRFUiA9ICJhbmRyb2lkLnNob3dDaHJvbm9tZXRlciI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEVYVFJBX1NIT1dfV0hFTiA9ICJhbmRyb2lkLnNob3dXaGVuIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRVhUUkFfU01BTExfSUNPTiA9ICJhbmRyb2lkLmljb24iOwpAQCAtNTEyMiw2ICs1MTI3LDcgQEAKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuYXBwLk5vdGlmaWNhdGlvbi5CdWlsZGVyIHNldFByaW9yaXR5KGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmFwcC5Ob3RpZmljYXRpb24uQnVpbGRlciBzZXRQcm9ncmVzcyhpbnQsIGludCwgYm9vbGVhbik7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmFwcC5Ob3RpZmljYXRpb24uQnVpbGRlciBzZXRQdWJsaWNWZXJzaW9uKGFuZHJvaWQuYXBwLk5vdGlmaWNhdGlvbik7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmFwcC5Ob3RpZmljYXRpb24uQnVpbGRlciBzZXRSZW1vdGVJbnB1dEhpc3RvcnkoamF2YS5sYW5nLkNoYXJTZXF1ZW5jZVtdKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuYXBwLk5vdGlmaWNhdGlvbi5CdWlsZGVyIHNldFNob3dXaGVuKGJvb2xlYW4pOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5hcHAuTm90aWZpY2F0aW9uLkJ1aWxkZXIgc2V0U21hbGxJY29uKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmFwcC5Ob3RpZmljYXRpb24uQnVpbGRlciBzZXRTbWFsbEljb24oaW50LCBpbnQpOwpAQCAtNTMxMSw2ICs1MzE3LDcgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVVBQUkVTU0VEX0VGRkVDVFNfVU5TRVQgPSAtMTsgLy8gMHhmZmZmZmZmZgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNVUFBSRVNTRURfRUZGRUNUX0xJR0hUUyA9IDE7IC8vIDB4MQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNVUFBSRVNTRURfRUZGRUNUX1BFRUsgPSAyOyAvLyAweDIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVVBQUkVTU0VEX0VGRkVDVF9TQ1JFRU5fT04gPSA0OyAvLyAweDQKICAgICBmaWVsZCBwdWJsaWMgZmluYWwgaW50IHByaW9yaXR5Q2FsbFNlbmRlcnM7CiAgICAgZmllbGQgcHVibGljIGZpbmFsIGludCBwcmlvcml0eUNhdGVnb3JpZXM7CiAgICAgZmllbGQgcHVibGljIGZpbmFsIGludCBwcmlvcml0eU1lc3NhZ2VTZW5kZXJzOwpAQCAtNTg3OSw2ICs1ODg2LDcgQEAKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0RGV2aWNlT3duZXJMb2NrU2NyZWVuSW5mbygpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS51dGlsLkxpc3Q8Ynl0ZVtdPiBnZXRJbnN0YWxsZWRDYUNlcnRzKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lKTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXRLZXlndWFyZERpc2FibGVkRmVhdHVyZXMoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUpOworICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRMb25nU3VwcG9ydE1lc3NhZ2UoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldE1heGltdW1GYWlsZWRQYXNzd29yZHNGb3JXaXBlKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lKTsKICAgICBtZXRob2QgcHVibGljIGxvbmcgZ2V0TWF4aW11bVRpbWVUb0xvY2soYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBnZXRQYWNrYWdlU3VzcGVuZGVkKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBqYXZhLmxhbmcuU3RyaW5nKTsKQEAgLTU5MDMsNiArNTkxMSw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSBnZXRQcm9maWxlT3duZXIoKSB0aHJvd3MgamF2YS5sYW5nLklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0UHJvZmlsZU93bmVyTmFtZUFzVXNlcihpbnQpIHRocm93cyBqYXZhLmxhbmcuSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBnZXRTY3JlZW5DYXB0dXJlRGlzYWJsZWQoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUpOworICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRTaG9ydFN1cHBvcnRNZXNzYWdlKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gZ2V0U3RvcmFnZUVuY3J5cHRpb24oYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldFN0b3JhZ2VFbmNyeXB0aW9uU3RhdHVzKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmFwcC5hZG1pbi5TeXN0ZW1VcGRhdGVQb2xpY3kgZ2V0U3lzdGVtVXBkYXRlUG9saWN5KCk7CkBAIC01OTQ2LDYgKzU5NTUsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBzZXRLZXlndWFyZERpc2FibGVkKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBib29sZWFuKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0S2V5Z3VhcmREaXNhYmxlZEZlYXR1cmVzKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRMb2NrVGFza1BhY2thZ2VzKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBqYXZhLmxhbmcuU3RyaW5nW10pIHRocm93cyBqYXZhLmxhbmcuU2VjdXJpdHlFeGNlcHRpb247CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldExvbmdTdXBwb3J0TWVzc2FnZShhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSwgamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldE1hc3RlclZvbHVtZU11dGVkKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBib29sZWFuKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0TWF4aW11bUZhaWxlZFBhc3N3b3Jkc0ZvcldpcGUoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldE1heGltdW1UaW1lVG9Mb2NrKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBsb25nKTsKQEAgLTU5NzAsNiArNTk4MCw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFJlc3RyaWN0aW9uc1Byb3ZpZGVyKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFNjcmVlbkNhcHR1cmVEaXNhYmxlZChhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSwgYm9vbGVhbik7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFNlY3VyZVNldHRpbmcoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRTaG9ydFN1cHBvcnRNZXNzYWdlKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBqYXZhLmxhbmcuU3RyaW5nKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gc2V0U3RhdHVzQmFyRGlzYWJsZWQoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGJvb2xlYW4pOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IHNldFN0b3JhZ2VFbmNyeXB0aW9uKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBib29sZWFuKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0U3lzdGVtVXBkYXRlUG9saWN5KGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBhbmRyb2lkLmFwcC5hZG1pbi5TeXN0ZW1VcGRhdGVQb2xpY3kpOwpAQCAtNzgwNCwxMSArNzgxNSwxMiBAQAogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3Qgdm9pZCB3cml0ZURhdGFUb1BpcGUoYW5kcm9pZC5vcy5QYXJjZWxGaWxlRGVzY3JpcHRvciwgYW5kcm9pZC5uZXQuVXJpLCBqYXZhLmxhbmcuU3RyaW5nLCBhbmRyb2lkLm9zLkJ1bmRsZSwgVCk7CiAgIH0KIAotICBwdWJsaWMgY2xhc3MgQ29udGVudFByb3ZpZGVyQ2xpZW50IHsKKyAgcHVibGljIGNsYXNzIENvbnRlbnRQcm92aWRlckNsaWVudCBpbXBsZW1lbnRzIGphdmEubGFuZy5BdXRvQ2xvc2VhYmxlIHsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuY29udGVudC5Db250ZW50UHJvdmlkZXJSZXN1bHRbXSBhcHBseUJhdGNoKGphdmEudXRpbC5BcnJheUxpc3Q8YW5kcm9pZC5jb250ZW50LkNvbnRlbnRQcm92aWRlck9wZXJhdGlvbj4pIHRocm93cyBhbmRyb2lkLmNvbnRlbnQuT3BlcmF0aW9uQXBwbGljYXRpb25FeGNlcHRpb24sIGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGJ1bGtJbnNlcnQoYW5kcm9pZC5uZXQuVXJpLCBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFZhbHVlc1tdKSB0aHJvd3MgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLm9zLkJ1bmRsZSBjYWxsKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcsIGFuZHJvaWQub3MuQnVuZGxlKSB0aHJvd3MgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCBhbmRyb2lkLm5ldC5VcmkgY2Fub25pY2FsaXplKGFuZHJvaWQubmV0LlVyaSkgdGhyb3dzIGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBjbG9zZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGRlbGV0ZShhbmRyb2lkLm5ldC5VcmksIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmdbXSkgdGhyb3dzIGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRQcm92aWRlciBnZXRMb2NhbENvbnRlbnRQcm92aWRlcigpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZ1tdIGdldFN0cmVhbVR5cGVzKGFuZHJvaWQubmV0LlVyaSwgamF2YS5sYW5nLlN0cmluZykgdGhyb3dzIGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwpAQCAtNzgyMiw3ICs3ODM0LDcgQEAKICAgICBtZXRob2QgcHVibGljIGZpbmFsIGFuZHJvaWQuY29udGVudC5yZXMuQXNzZXRGaWxlRGVzY3JpcHRvciBvcGVuVHlwZWRBc3NldEZpbGVEZXNjcmlwdG9yKGFuZHJvaWQubmV0LlVyaSwgamF2YS5sYW5nLlN0cmluZywgYW5kcm9pZC5vcy5CdW5kbGUsIGFuZHJvaWQub3MuQ2FuY2VsbGF0aW9uU2lnbmFsKSB0aHJvd3MgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb24sIGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5kYXRhYmFzZS5DdXJzb3IgcXVlcnkoYW5kcm9pZC5uZXQuVXJpLCBqYXZhLmxhbmcuU3RyaW5nW10sIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmdbXSwgamF2YS5sYW5nLlN0cmluZykgdGhyb3dzIGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5kYXRhYmFzZS5DdXJzb3IgcXVlcnkoYW5kcm9pZC5uZXQuVXJpLCBqYXZhLmxhbmcuU3RyaW5nW10sIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmdbXSwgamF2YS5sYW5nLlN0cmluZywgYW5kcm9pZC5vcy5DYW5jZWxsYXRpb25TaWduYWwpIHRocm93cyBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKLSAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gcmVsZWFzZSgpOworICAgIG1ldGhvZCBwdWJsaWMgZGVwcmVjYXRlZCBib29sZWFuIHJlbGVhc2UoKTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIGFuZHJvaWQubmV0LlVyaSB1bmNhbm9uaWNhbGl6ZShhbmRyb2lkLm5ldC5VcmkpIHRocm93cyBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIGludCB1cGRhdGUoYW5kcm9pZC5uZXQuVXJpLCBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFZhbHVlcywgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZ1tdKSB0aHJvd3MgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CiAgIH0KQEAgLTkyNjEsNiArOTI3Myw3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19BTFdBWVNfUkVUQUlOX1RBU0tfU1RBVEUgPSA4OyAvLyAweDgKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX0FVVE9fUkVNT1ZFX0ZST01fUkVDRU5UUyA9IDgxOTI7IC8vIDB4MjAwMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfQ0xFQVJfVEFTS19PTl9MQVVOQ0ggPSA0OyAvLyAweDQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX0VOQUJMRV9WUl9NT0RFID0gMzI3Njg7IC8vIDB4ODAwMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfRVhDTFVERV9GUk9NX1JFQ0VOVFMgPSAzMjsgLy8gMHgyMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfRklOSVNIX09OX0NMT1NFX1NZU1RFTV9ESUFMT0dTID0gMjU2OyAvLyAweDEwMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfRklOSVNIX09OX1RBU0tfTEFVTkNIID0gMjsgLy8gMHgyCkBAIC05NTQyLDEyICs5NTU1LDYgQEAKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgb25QYWNrYWdlc1VuYXZhaWxhYmxlKGphdmEubGFuZy5TdHJpbmdbXSwgYW5kcm9pZC5vcy5Vc2VySGFuZGxlLCBib29sZWFuKTsKICAgfQogCi0gIHB1YmxpYyBjbGFzcyBNYW5pZmVzdERpZ2VzdCBpbXBsZW1lbnRzIGFuZHJvaWQub3MuUGFyY2VsYWJsZSB7Ci0gICAgbWV0aG9kIHB1YmxpYyBpbnQgZGVzY3JpYmVDb250ZW50cygpOwotICAgIG1ldGhvZCBwdWJsaWMgdm9pZCB3cml0ZVRvUGFyY2VsKGFuZHJvaWQub3MuUGFyY2VsLCBpbnQpOwotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5vcy5QYXJjZWxhYmxlLkNyZWF0b3I8YW5kcm9pZC5jb250ZW50LnBtLk1hbmlmZXN0RGlnZXN0PiBDUkVBVE9SOwotICB9Ci0KICAgcHVibGljIGNsYXNzIFBhY2thZ2VJbmZvIGltcGxlbWVudHMgYW5kcm9pZC5vcy5QYXJjZWxhYmxlIHsKICAgICBjdG9yIHB1YmxpYyBQYWNrYWdlSW5mbygpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGRlc2NyaWJlQ29udGVudHMoKTsKQEAgLTk4MjEsNiArOTgyOCw3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEZFQVRVUkVfQ09OTkVDVElPTl9TRVJWSUNFID0gImFuZHJvaWQuc29mdHdhcmUuY29ubmVjdGlvbnNlcnZpY2UiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBGRUFUVVJFX0NPTlNVTUVSX0lSID0gImFuZHJvaWQuaGFyZHdhcmUuY29uc3VtZXJpciI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEZFQVRVUkVfREVWSUNFX0FETUlOID0gImFuZHJvaWQuc29mdHdhcmUuZGV2aWNlX2FkbWluIjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRkVBVFVSRV9FVEhFUk5FVCA9ICJhbmRyb2lkLmhhcmR3YXJlLmV0aGVybmV0IjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRkVBVFVSRV9GQUtFVE9VQ0ggPSAiYW5kcm9pZC5oYXJkd2FyZS5mYWtldG91Y2giOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBGRUFUVVJFX0ZBS0VUT1VDSF9NVUxUSVRPVUNIX0RJU1RJTkNUID0gImFuZHJvaWQuaGFyZHdhcmUuZmFrZXRvdWNoLm11bHRpdG91Y2guZGlzdGluY3QiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBGRUFUVVJFX0ZBS0VUT1VDSF9NVUxUSVRPVUNIX0pBWlpIQU5EID0gImFuZHJvaWQuaGFyZHdhcmUuZmFrZXRvdWNoLm11bHRpdG91Y2guamF6emhhbmQiOwpAQCAtOTg3MiwxNSArOTg4MCwxNSBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBGRUFUVVJFX1VTQl9BQ0NFU1NPUlkgPSAiYW5kcm9pZC5oYXJkd2FyZS51c2IuYWNjZXNzb3J5IjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRkVBVFVSRV9VU0JfSE9TVCA9ICJhbmRyb2lkLmhhcmR3YXJlLnVzYi5ob3N0IjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRkVBVFVSRV9WRVJJRklFRF9CT09UID0gImFuZHJvaWQuc29mdHdhcmUudmVyaWZpZWRfYm9vdCI7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEZFQVRVUkVfVlJfTU9ERSA9ICJhbmRyb2lkLnNvZnR3YXJlLnZyLm1vZGUiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBGRUFUVVJFX1dBVENIID0gImFuZHJvaWQuaGFyZHdhcmUudHlwZS53YXRjaCI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEZFQVRVUkVfV0VCVklFVyA9ICJhbmRyb2lkLnNvZnR3YXJlLndlYnZpZXciOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBGRUFUVVJFX1dJRkkgPSAiYW5kcm9pZC5oYXJkd2FyZS53aWZpIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRkVBVFVSRV9XSUZJX0RJUkVDVCA9ICJhbmRyb2lkLmhhcmR3YXJlLndpZmkuZGlyZWN0IjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHRVRfQUNUSVZJVElFUyA9IDE7IC8vIDB4MQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFVF9DT05GSUdVUkFUSU9OUyA9IDE2Mzg0OyAvLyAweDQwMDAKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHRVRfRElTQUJMRURfQ09NUE9ORU5UUyA9IDUxMjsgLy8gMHgyMDAKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHRVRfRElTQUJMRURfVU5USUxfVVNFRF9DT01QT05FTlRTID0gMzI3Njg7IC8vIDB4ODAwMAotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFVF9FTkNSWVBUSU9OX1VOQVdBUkVfQ09NUE9ORU5UUyA9IDI2MjE0NDsgLy8gMHg0MDAwMAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgZGVwcmVjYXRlZCBpbnQgR0VUX0RJU0FCTEVEX0NPTVBPTkVOVFMgPSA1MTI7IC8vIDB4MjAwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBkZXByZWNhdGVkIGludCBHRVRfRElTQUJMRURfVU5USUxfVVNFRF9DT01QT05FTlRTID0gMzI3Njg7IC8vIDB4ODAwMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFVF9HSURTID0gMjU2OyAvLyAweDEwMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFVF9JTlNUUlVNRU5UQVRJT04gPSAxNjsgLy8gMHgxMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFVF9JTlRFTlRfRklMVEVSUyA9IDMyOyAvLyAweDIwCkBAIC05ODkyLDcgKzk5MDAsNyBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFVF9TRVJWSUNFUyA9IDQ7IC8vIDB4NAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFVF9TSEFSRURfTElCUkFSWV9GSUxFUyA9IDEwMjQ7IC8vIDB4NDAwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0VUX1NJR05BVFVSRVMgPSA2NDsgLy8gMHg0MAotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFVF9VTklOU1RBTExFRF9QQUNLQUdFUyA9IDgxOTI7IC8vIDB4MjAwMAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgZGVwcmVjYXRlZCBpbnQgR0VUX1VOSU5TVEFMTEVEX1BBQ0tBR0VTID0gODE5MjsgLy8gMHgyMDAwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0VUX1VSSV9QRVJNSVNTSU9OX1BBVFRFUk5TID0gMjA0ODsgLy8gMHg4MDAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTlNUQUxMX0ZBSUxFRF9BTFJFQURZX0VYSVNUUyA9IC0xOyAvLyAweGZmZmZmZmZmCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5TVEFMTF9GQUlMRURfQ09ORkxJQ1RJTkdfUFJPVklERVIgPSAtMTM7IC8vIDB4ZmZmZmZmZjMKQEAgLTk5MzMsNiArOTk0MSwxMyBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BU0tfUEVSTUlTU0lPTl9GTEFHUyA9IDI1NTsgLy8gMHhmZgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BVENIX0FMTCA9IDEzMTA3MjsgLy8gMHgyMDAwMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BVENIX0RFRkFVTFRfT05MWSA9IDY1NTM2OyAvLyAweDEwMDAwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFUQ0hfRElTQUJMRURfQ09NUE9ORU5UUyA9IDUxMjsgLy8gMHgyMDAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVRDSF9ESVNBQkxFRF9VTlRJTF9VU0VEX0NPTVBPTkVOVFMgPSAzMjc2ODsgLy8gMHg4MDAwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFUQ0hfRU5DUllQVElPTl9BV0FSRSA9IDUyNDI4ODsgLy8gMHg4MDAwMAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BVENIX0VOQ1JZUFRJT05fQVdBUkVfQU5EX1VOQVdBUkUgPSA3ODY0MzI7IC8vIDB4YzAwMDAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVRDSF9FTkNSWVBUSU9OX1VOQVdBUkUgPSAyNjIxNDQ7IC8vIDB4NDAwMDAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVRDSF9TWVNURU1fT05MWSA9IDEwNDg1NzY7IC8vIDB4MTAwMDAwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFUQ0hfVU5JTlNUQUxMRURfUEFDS0FHRVMgPSA4MTkyOyAvLyAweDIwMDAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGxvbmcgTUFYSU1VTV9WRVJJRklDQVRJT05fVElNRU9VVCA9IDM2MDAwMDBMOyAvLyAweDM2ZWU4MEwKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQRVJNSVNTSU9OX0RFTklFRCA9IC0xOyAvLyAweGZmZmZmZmZmCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUEVSTUlTU0lPTl9HUkFOVEVEID0gMDsgLy8gMHgwCkBAIC0xMTE4OSw3ICsxMTIwNCw3IEBACiAgICAgZmllbGQgcHVibGljIGZpbmFsIGludCBzdGF0dXNDb2RlOwogICB9CiAKLSAgcHVibGljIGNsYXNzIERybU1hbmFnZXJDbGllbnQgeworICBwdWJsaWMgY2xhc3MgRHJtTWFuYWdlckNsaWVudCBpbXBsZW1lbnRzIGphdmEubGFuZy5BdXRvQ2xvc2VhYmxlIHsKICAgICBjdG9yIHB1YmxpYyBEcm1NYW5hZ2VyQ2xpZW50KGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuZHJtLkRybUluZm8gYWNxdWlyZURybUluZm8oYW5kcm9pZC5kcm0uRHJtSW5mb1JlcXVlc3QpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGFjcXVpcmVSaWdodHMoYW5kcm9pZC5kcm0uRHJtSW5mb1JlcXVlc3QpOwpAQCAtMTExOTksNiArMTEyMTQsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgaW50IGNoZWNrUmlnaHRzU3RhdHVzKGFuZHJvaWQubmV0LlVyaSk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgY2hlY2tSaWdodHNTdGF0dXMoamF2YS5sYW5nLlN0cmluZywgaW50KTsKICAgICBtZXRob2QgcHVibGljIGludCBjaGVja1JpZ2h0c1N0YXR1cyhhbmRyb2lkLm5ldC5VcmksIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGNsb3NlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmRybS5Ecm1Db252ZXJ0ZWRTdGF0dXMgY2xvc2VDb252ZXJ0U2Vzc2lvbihpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5kcm0uRHJtQ29udmVydGVkU3RhdHVzIGNvbnZlcnREYXRhKGludCwgYnl0ZVtdKTsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmdbXSBnZXRBdmFpbGFibGVEcm1FbmdpbmVzKCk7CkBAIC0xMTIxMiw3ICsxMTIyOCw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldE9yaWdpbmFsTWltZVR5cGUoYW5kcm9pZC5uZXQuVXJpKTsKICAgICBtZXRob2QgcHVibGljIGludCBvcGVuQ29udmVydFNlc3Npb24oamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgcHJvY2Vzc0RybUluZm8oYW5kcm9pZC5kcm0uRHJtSW5mbyk7Ci0gICAgbWV0aG9kIHB1YmxpYyB2b2lkIHJlbGVhc2UoKTsKKyAgICBtZXRob2QgcHVibGljIGRlcHJlY2F0ZWQgdm9pZCByZWxlYXNlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgcmVtb3ZlQWxsUmlnaHRzKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgcmVtb3ZlUmlnaHRzKGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IHJlbW92ZVJpZ2h0cyhhbmRyb2lkLm5ldC5VcmkpOwpAQCAtMTE2MTYsMTQgKzExNjMyLDE0IEBACiAKICAgcHVibGljIHN0YXRpYyBjbGFzcyBCaXRtYXBGYWN0b3J5Lk9wdGlvbnMgewogICAgIGN0b3IgcHVibGljIEJpdG1hcEZhY3RvcnkuT3B0aW9ucygpOwotICAgIG1ldGhvZCBwdWJsaWMgdm9pZCByZXF1ZXN0Q2FuY2VsRGVjb2RlKCk7CisgICAgbWV0aG9kIHB1YmxpYyBkZXByZWNhdGVkIHZvaWQgcmVxdWVzdENhbmNlbERlY29kZSgpOwogICAgIGZpZWxkIHB1YmxpYyBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcCBpbkJpdG1hcDsKICAgICBmaWVsZCBwdWJsaWMgaW50IGluRGVuc2l0eTsKLSAgICBmaWVsZCBwdWJsaWMgYm9vbGVhbiBpbkRpdGhlcjsKKyAgICBmaWVsZCBwdWJsaWMgZGVwcmVjYXRlZCBib29sZWFuIGluRGl0aGVyOwogICAgIGZpZWxkIHB1YmxpYyBkZXByZWNhdGVkIGJvb2xlYW4gaW5JbnB1dFNoYXJlYWJsZTsKICAgICBmaWVsZCBwdWJsaWMgYm9vbGVhbiBpbkp1c3REZWNvZGVCb3VuZHM7CiAgICAgZmllbGQgcHVibGljIGJvb2xlYW4gaW5NdXRhYmxlOwotICAgIGZpZWxkIHB1YmxpYyBib29sZWFuIGluUHJlZmVyUXVhbGl0eU92ZXJTcGVlZDsKKyAgICBmaWVsZCBwdWJsaWMgZGVwcmVjYXRlZCBib29sZWFuIGluUHJlZmVyUXVhbGl0eU92ZXJTcGVlZDsKICAgICBmaWVsZCBwdWJsaWMgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXAuQ29uZmlnIGluUHJlZmVycmVkQ29uZmlnOwogICAgIGZpZWxkIHB1YmxpYyBib29sZWFuIGluUHJlbXVsdGlwbGllZDsKICAgICBmaWVsZCBwdWJsaWMgZGVwcmVjYXRlZCBib29sZWFuIGluUHVyZ2VhYmxlOwpAQCAtMTkyMTksNyArMTkyMzUsNiBAQAogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGphdmEubGFuZy5TdHJpbmcgZ2V0Q2Fub25pY2FsSUQoamF2YS5sYW5nLlN0cmluZywgYm9vbGVhbltdKTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXREU1RTYXZpbmdzKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC5pY3UudXRpbC5UaW1lWm9uZSBnZXREZWZhdWx0KCk7Ci0gICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgaW50IGdldERlZmF1bHRUaW1lWm9uZVR5cGUoKTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgZ2V0RGlzcGxheU5hbWUoKTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgZ2V0RGlzcGxheU5hbWUoamF2YS51dGlsLkxvY2FsZSk7CiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIGdldERpc3BsYXlOYW1lKGFuZHJvaWQuaWN1LnV0aWwuVUxvY2FsZSk7CkBAIC0xOTI0Myw4ICsxOTI1OCw2IEBACiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGluRGF5bGlnaHRUaW1lKGphdmEudXRpbC5EYXRlKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNGcm96ZW4oKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gb2JzZXJ2ZXNEYXlsaWdodFRpbWUoKTsKLSAgICBtZXRob2QgcHVibGljIHN0YXRpYyBzeW5jaHJvbml6ZWQgdm9pZCBzZXREZWZhdWx0KGFuZHJvaWQuaWN1LnV0aWwuVGltZVpvbmUpOwotICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHN5bmNocm9uaXplZCB2b2lkIHNldERlZmF1bHRUaW1lWm9uZVR5cGUoaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0SUQoamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldFJhd09mZnNldChpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiB1c2VEYXlsaWdodFRpbWUoKTsKQEAgLTE5MjU3LDggKzE5MjcwLDYgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTSE9SVF9DT01NT05MWV9VU0VEID0gNjsgLy8gMHg2CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0hPUlRfR0VORVJJQyA9IDI7IC8vIDB4MgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNIT1JUX0dNVCA9IDQ7IC8vIDB4NAotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRJTUVaT05FX0lDVSA9IDA7IC8vIDB4MAotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRJTUVaT05FX0pESyA9IDE7IC8vIDB4MQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5pY3UudXRpbC5UaW1lWm9uZSBVTktOT1dOX1pPTkU7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIFVOS05PV05fWk9ORV9JRCA9ICJFdGMvVW5rbm93biI7CiAgIH0KQEAgLTE5MzU0LDggKzE5MzY1LDYgQEAKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBqYXZhLmxhbmcuU3RyaW5nIGdldFZhcmlhbnQoamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzUmlnaHRUb0xlZnQoKTsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLmljdS51dGlsLlVMb2NhbGUgbWluaW1pemVTdWJ0YWdzKGFuZHJvaWQuaWN1LnV0aWwuVUxvY2FsZSk7Ci0gICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIHZvaWQgc2V0RGVmYXVsdChhbmRyb2lkLmljdS51dGlsLlVMb2NhbGUpOwotICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHN5bmNocm9uaXplZCB2b2lkIHNldERlZmF1bHQoYW5kcm9pZC5pY3UudXRpbC5VTG9jYWxlLkNhdGVnb3J5LCBhbmRyb2lkLmljdS51dGlsLlVMb2NhbGUpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5pY3UudXRpbC5VTG9jYWxlIHNldEtleXdvcmRWYWx1ZShqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKTsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBqYXZhLmxhbmcuU3RyaW5nIHNldEtleXdvcmRWYWx1ZShqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKTsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgdG9MYW5ndWFnZVRhZygpOwpAQCAtMjU3NTEsNyArMjU3NjAsNiBAQAogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCB3cml0ZVRvUGFyY2VsKGFuZHJvaWQub3MuUGFyY2VsLCBpbnQpOwogICAgIGZpZWxkIHB1YmxpYyBpbnQgYmFuZDsKICAgICBmaWVsZCBwdWJsaWMgYW5kcm9pZC5uZXQud2lmaS5XaWZpU2Nhbm5lci5DaGFubmVsU3BlY1tdIGNoYW5uZWxzOwotICAgIGZpZWxkIHB1YmxpYyBpbnQgZXhwb25lbnQ7CiAgICAgZmllbGQgcHVibGljIGludCBtYXhQZXJpb2RJbk1zOwogICAgIGZpZWxkIHB1YmxpYyBpbnQgbWF4U2NhbnNUb0NhY2hlOwogICAgIGZpZWxkIHB1YmxpYyBpbnQgbnVtQnNzaWRzUGVyU2NhbjsKQEAgLTI4ODQ2LDYgKzI4ODU0LDI3OSBAQAogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBvbk1lc3NhZ2UoaW50LCBpbnQsIGludCwgaW50LCBqYXZhLmxhbmcuU3RyaW5nKTsKICAgfQogCisgIHB1YmxpYyBjbGFzcyBHTEVTMzIgZXh0ZW5kcyBhbmRyb2lkLm9wZW5nbC5HTEVTMzEgeworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xCbGVuZEJhcnJpZXIoKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsQmxlbmRFcXVhdGlvblNlcGFyYXRlaShpbnQsIGludCwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsQmxlbmRFcXVhdGlvbmkoaW50LCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xCbGVuZEZ1bmNTZXBhcmF0ZWkoaW50LCBpbnQsIGludCwgaW50LCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xCbGVuZEZ1bmNpKGludCwgaW50LCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xDb2xvck1hc2tpKGludCwgYm9vbGVhbiwgYm9vbGVhbiwgYm9vbGVhbiwgYm9vbGVhbik7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbENvcHlJbWFnZVN1YkRhdGEoaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbERlYnVnTWVzc2FnZUNhbGxiYWNrKGFuZHJvaWQub3BlbmdsLkdMRVMzMi5EZWJ1Z1Byb2MpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xEZWJ1Z01lc3NhZ2VDb250cm9sKGludCwgaW50LCBpbnQsIGludCwgaW50W10sIGludCwgYm9vbGVhbik7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbERlYnVnTWVzc2FnZUNvbnRyb2woaW50LCBpbnQsIGludCwgaW50LCBqYXZhLm5pby5JbnRCdWZmZXIsIGJvb2xlYW4pOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xEZWJ1Z01lc3NhZ2VJbnNlcnQoaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGphdmEubGFuZy5TdHJpbmcpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xEaXNhYmxlaShpbnQsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbERyYXdFbGVtZW50c0Jhc2VWZXJ0ZXgoaW50LCBpbnQsIGludCwgamF2YS5uaW8uQnVmZmVyLCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWRCYXNlVmVydGV4KGludCwgaW50LCBpbnQsIGphdmEubmlvLkJ1ZmZlciwgaW50LCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWRCYXNlVmVydGV4KGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xEcmF3UmFuZ2VFbGVtZW50c0Jhc2VWZXJ0ZXgoaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGphdmEubmlvLkJ1ZmZlciwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsRW5hYmxlaShpbnQsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbEZyYW1lYnVmZmVyVGV4dHVyZShpbnQsIGludCwgaW50LCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGludCBnbEdldERlYnVnTWVzc2FnZUxvZyhpbnQsIGludCwgaW50W10sIGludCwgaW50W10sIGludCwgaW50W10sIGludCwgaW50W10sIGludCwgaW50W10sIGludCwgYnl0ZVtdLCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGludCBnbEdldERlYnVnTWVzc2FnZUxvZyhpbnQsIGphdmEubmlvLkludEJ1ZmZlciwgamF2YS5uaW8uSW50QnVmZmVyLCBqYXZhLm5pby5JbnRCdWZmZXIsIGphdmEubmlvLkludEJ1ZmZlciwgamF2YS5uaW8uSW50QnVmZmVyLCBqYXZhLm5pby5CeXRlQnVmZmVyKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBqYXZhLmxhbmcuU3RyaW5nW10gZ2xHZXREZWJ1Z01lc3NhZ2VMb2coaW50LCBpbnRbXSwgaW50LCBpbnRbXSwgaW50LCBpbnRbXSwgaW50LCBpbnRbXSwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBqYXZhLmxhbmcuU3RyaW5nW10gZ2xHZXREZWJ1Z01lc3NhZ2VMb2coaW50LCBqYXZhLm5pby5JbnRCdWZmZXIsIGphdmEubmlvLkludEJ1ZmZlciwgamF2YS5uaW8uSW50QnVmZmVyLCBqYXZhLm5pby5JbnRCdWZmZXIpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGludCBnbEdldEdyYXBoaWNzUmVzZXRTdGF0dXMoKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBqYXZhLmxhbmcuU3RyaW5nIGdsR2V0T2JqZWN0TGFiZWwoaW50LCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGphdmEubGFuZy5TdHJpbmcgZ2xHZXRPYmplY3RQdHJMYWJlbChsb25nKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBsb25nIGdsR2V0UG9pbnRlcnYoaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsR2V0U2FtcGxlclBhcmFtZXRlcklpdihpbnQsIGludCwgaW50W10sIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbEdldFNhbXBsZXJQYXJhbWV0ZXJJaXYoaW50LCBpbnQsIGphdmEubmlvLkludEJ1ZmZlcik7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbEdldFNhbXBsZXJQYXJhbWV0ZXJJdWl2KGludCwgaW50LCBpbnRbXSwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsR2V0U2FtcGxlclBhcmFtZXRlckl1aXYoaW50LCBpbnQsIGphdmEubmlvLkludEJ1ZmZlcik7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbEdldFRleFBhcmFtZXRlcklpdihpbnQsIGludCwgaW50W10sIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbEdldFRleFBhcmFtZXRlcklpdihpbnQsIGludCwgamF2YS5uaW8uSW50QnVmZmVyKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsR2V0VGV4UGFyYW1ldGVySXVpdihpbnQsIGludCwgaW50W10sIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbEdldFRleFBhcmFtZXRlckl1aXYoaW50LCBpbnQsIGphdmEubmlvLkludEJ1ZmZlcik7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbEdldG5Vbmlmb3JtZnYoaW50LCBpbnQsIGludCwgZmxvYXRbXSwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsR2V0blVuaWZvcm1mdihpbnQsIGludCwgaW50LCBqYXZhLm5pby5GbG9hdEJ1ZmZlcik7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbEdldG5Vbmlmb3JtaXYoaW50LCBpbnQsIGludCwgaW50W10sIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbEdldG5Vbmlmb3JtaXYoaW50LCBpbnQsIGludCwgamF2YS5uaW8uSW50QnVmZmVyKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsR2V0blVuaWZvcm11aXYoaW50LCBpbnQsIGludCwgaW50W10sIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbEdldG5Vbmlmb3JtdWl2KGludCwgaW50LCBpbnQsIGphdmEubmlvLkludEJ1ZmZlcik7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBnbElzRW5hYmxlZGkoaW50LCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xNaW5TYW1wbGVTaGFkaW5nKGZsb2F0KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsT2JqZWN0TGFiZWwoaW50LCBpbnQsIGludCwgamF2YS5sYW5nLlN0cmluZyk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbE9iamVjdFB0ckxhYmVsKGxvbmcsIGphdmEubGFuZy5TdHJpbmcpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xQYXRjaFBhcmFtZXRlcmkoaW50LCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xQb3BEZWJ1Z0dyb3VwKCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbFByaW1pdGl2ZUJvdW5kaW5nQm94KGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbFB1c2hEZWJ1Z0dyb3VwKGludCwgaW50LCBpbnQsIGphdmEubGFuZy5TdHJpbmcpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xSZWFkblBpeGVscyhpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGphdmEubmlvLkJ1ZmZlcik7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbFNhbXBsZXJQYXJhbWV0ZXJJaXYoaW50LCBpbnQsIGludFtdLCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xTYW1wbGVyUGFyYW1ldGVySWl2KGludCwgaW50LCBqYXZhLm5pby5JbnRCdWZmZXIpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xTYW1wbGVyUGFyYW1ldGVySXVpdihpbnQsIGludCwgaW50W10sIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbFNhbXBsZXJQYXJhbWV0ZXJJdWl2KGludCwgaW50LCBqYXZhLm5pby5JbnRCdWZmZXIpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xUZXhCdWZmZXIoaW50LCBpbnQsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbFRleEJ1ZmZlclJhbmdlKGludCwgaW50LCBpbnQsIGludCwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsVGV4UGFyYW1ldGVySWl2KGludCwgaW50LCBpbnRbXSwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsVGV4UGFyYW1ldGVySWl2KGludCwgaW50LCBqYXZhLm5pby5JbnRCdWZmZXIpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xUZXhQYXJhbWV0ZXJJdWl2KGludCwgaW50LCBpbnRbXSwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsVGV4UGFyYW1ldGVySXVpdihpbnQsIGludCwgamF2YS5uaW8uSW50QnVmZmVyKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsVGV4U3RvcmFnZTNETXVsdGlzYW1wbGUoaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgYm9vbGVhbik7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQlVGRkVSID0gMzM1MDQ7IC8vIDB4ODJlMAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NMQU1QX1RPX0JPUkRFUiA9IDMzMDY5OyAvLyAweDgxMmQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT0xPUkJVUk4gPSAzNzUzMDsgLy8gMHg5MjlhCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09MT1JET0RHRSA9IDM3NTI5OyAvLyAweDkyOTkKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHgxMCA9IDM3ODE5OyAvLyAweDkzYmIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg1ID0gMzc4MTY7IC8vIDB4OTNiOAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzEweDYgPSAzNzgxNzsgLy8gMHg5M2I5CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4OCA9IDM3ODE4OyAvLyAweDkzYmEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT01QUkVTU0VEX1JHQkFfQVNUQ18xMngxMCA9IDM3ODIwOyAvLyAweDkzYmMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT01QUkVTU0VEX1JHQkFfQVNUQ18xMngxMiA9IDM3ODIxOyAvLyAweDkzYmQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT01QUkVTU0VEX1JHQkFfQVNUQ180eDQgPSAzNzgwODsgLy8gMHg5M2IwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfNXg0ID0gMzc4MDk7IC8vIDB4OTNiMQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzV4NSA9IDM3ODEwOyAvLyAweDkzYjIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT01QUkVTU0VEX1JHQkFfQVNUQ182eDUgPSAzNzgxMTsgLy8gMHg5M2IzCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfNng2ID0gMzc4MTI7IC8vIDB4OTNiNAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzh4NSA9IDM3ODEzOyAvLyAweDkzYjUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT01QUkVTU0VEX1JHQkFfQVNUQ184eDYgPSAzNzgxNDsgLy8gMHg5M2I2CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg4ID0gMzc4MTU7IC8vIDB4OTNiNworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4MTAgPSAzNzg1MTsgLy8gMHg5M2RiCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg1ID0gMzc4NDg7IC8vIDB4OTNkOAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4NiA9IDM3ODQ5OyAvLyAweDkzZDkKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDggPSAzNzg1MDsgLy8gMHg5M2RhCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMngxMCA9IDM3ODUyOyAvLyAweDkzZGMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEyID0gMzc4NTM7IC8vIDB4OTNkZAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNHg0ID0gMzc4NDA7IC8vIDB4OTNkMAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNXg0ID0gMzc4NDE7IC8vIDB4OTNkMQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNXg1ID0gMzc4NDI7IC8vIDB4OTNkMgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNng1ID0gMzc4NDM7IC8vIDB4OTNkMworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNng2ID0gMzc4NDQ7IC8vIDB4OTNkNAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg1ID0gMzc4NDU7IC8vIDB4OTNkNQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg2ID0gMzc4NDY7IC8vIDB4OTNkNgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg4ID0gMzc4NDc7IC8vIDB4OTNkNworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTlRFWFRfRkxBR1MgPSAzMzMxMDsgLy8gMHg4MjFlCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09OVEVYVF9GTEFHX0RFQlVHX0JJVCA9IDI7IC8vIDB4MgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTlRFWFRfRkxBR19ST0JVU1RfQUNDRVNTX0JJVCA9IDQ7IC8vIDB4NAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTlRFWFRfTE9TVCA9IDEyODc7IC8vIDB4NTA3CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREFSS0VOID0gMzc1Mjc7IC8vIDB4OTI5NworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX0NBTExCQUNLX0ZVTkNUSU9OID0gMzMzNDg7IC8vIDB4ODI0NAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX0NBTExCQUNLX1VTRVJfUEFSQU0gPSAzMzM0OTsgLy8gMHg4MjQ1CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfR1JPVVBfU1RBQ0tfREVQVEggPSAzMzM4OTsgLy8gMHg4MjZkCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfTE9HR0VEX01FU1NBR0VTID0gMzcxODk7IC8vIDB4OTE0NQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX05FWFRfTE9HR0VEX01FU1NBR0VfTEVOR1RIID0gMzMzNDc7IC8vIDB4ODI0MworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX09VVFBVVCA9IDM3NjAwOyAvLyAweDkyZTAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19PVVRQVVRfU1lOQ0hST05PVVMgPSAzMzM0NjsgLy8gMHg4MjQyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfU0VWRVJJVFlfSElHSCA9IDM3MTkwOyAvLyAweDkxNDYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19TRVZFUklUWV9MT1cgPSAzNzE5MjsgLy8gMHg5MTQ4CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfU0VWRVJJVFlfTUVESVVNID0gMzcxOTE7IC8vIDB4OTE0NworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1NFVkVSSVRZX05PVElGSUNBVElPTiA9IDMzMzg3OyAvLyAweDgyNmIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19TT1VSQ0VfQVBJID0gMzMzNTA7IC8vIDB4ODI0NgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1NPVVJDRV9BUFBMSUNBVElPTiA9IDMzMzU0OyAvLyAweDgyNGEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19TT1VSQ0VfT1RIRVIgPSAzMzM1NTsgLy8gMHg4MjRiCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfU09VUkNFX1NIQURFUl9DT01QSUxFUiA9IDMzMzUyOyAvLyAweDgyNDgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19TT1VSQ0VfVEhJUkRfUEFSVFkgPSAzMzM1MzsgLy8gMHg4MjQ5CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfU09VUkNFX1dJTkRPV19TWVNURU0gPSAzMzM1MTsgLy8gMHg4MjQ3CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfVFlQRV9ERVBSRUNBVEVEX0JFSEFWSU9SID0gMzMzNTc7IC8vIDB4ODI0ZAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1RZUEVfRVJST1IgPSAzMzM1NjsgLy8gMHg4MjRjCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfVFlQRV9NQVJLRVIgPSAzMzM4NDsgLy8gMHg4MjY4CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfVFlQRV9PVEhFUiA9IDMzMzYxOyAvLyAweDgyNTEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19UWVBFX1BFUkZPUk1BTkNFID0gMzMzNjA7IC8vIDB4ODI1MAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1RZUEVfUE9QX0dST1VQID0gMzMzODY7IC8vIDB4ODI2YQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1RZUEVfUE9SVEFCSUxJVFkgPSAzMzM1OTsgLy8gMHg4MjRmCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfVFlQRV9QVVNIX0dST1VQID0gMzMzODU7IC8vIDB4ODI2OQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1RZUEVfVU5ERUZJTkVEX0JFSEFWSU9SID0gMzMzNTg7IC8vIDB4ODI0ZQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RJRkZFUkVOQ0UgPSAzNzUzNDsgLy8gMHg5MjllCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfRVhDTFVTSU9OID0gMzc1MzY7IC8vIDB4OTJhMAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0ZJUlNUX1ZFUlRFWF9DT05WRU5USU9OID0gMzY0Mjk7IC8vIDB4OGU0ZAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0ZSQUNUSU9OQUxfRVZFTiA9IDM2NDc2OyAvLyAweDhlN2MKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9GUkFDVElPTkFMX09ERCA9IDM2NDc1OyAvLyAweDhlN2IKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9GUkFHTUVOVF9JTlRFUlBPTEFUSU9OX09GRlNFVF9CSVRTID0gMzY0NDU7IC8vIDB4OGU1ZAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfTEFZRVJFRCA9IDM2MjYzOyAvLyAweDhkYTcKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9GUkFNRUJVRkZFUl9ERUZBVUxUX0xBWUVSUyA9IDM3NjUwOyAvLyAweDkzMTIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0xBWUVSX1RBUkdFVFMgPSAzNjI2NDsgLy8gMHg4ZGE4CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfR0VPTUVUUllfSU5QVVRfVFlQRSA9IDM1MDk1OyAvLyAweDg5MTcKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9HRU9NRVRSWV9PVVRQVVRfVFlQRSA9IDM1MDk2OyAvLyAweDg5MTgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9HRU9NRVRSWV9TSEFERVIgPSAzNjMxMzsgLy8gMHg4ZGQ5CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfR0VPTUVUUllfU0hBREVSX0JJVCA9IDQ7IC8vIDB4NAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0dFT01FVFJZX1NIQURFUl9JTlZPQ0FUSU9OUyA9IDM0OTQzOyAvLyAweDg4N2YKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9HRU9NRVRSWV9WRVJUSUNFU19PVVQgPSAzNTA5NDsgLy8gMHg4OTE2CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfR1VJTFRZX0NPTlRFWFRfUkVTRVQgPSAzMzM2MzsgLy8gMHg4MjUzCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfSEFSRExJR0hUID0gMzc1MzE7IC8vIDB4OTI5YgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0hTTF9DT0xPUiA9IDM3NTUxOyAvLyAweDkyYWYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9IU0xfSFVFID0gMzc1NDk7IC8vIDB4OTJhZAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0hTTF9MVU1JTk9TSVRZID0gMzc1NTI7IC8vIDB4OTJiMAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0hTTF9TQVRVUkFUSU9OID0gMzc1NTA7IC8vIDB4OTJhZQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0lNQUdFX0JVRkZFUiA9IDM2OTQ1OyAvLyAweDkwNTEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9JTUFHRV9DVUJFX01BUF9BUlJBWSA9IDM2OTQ4OyAvLyAweDkwNTQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9JTk5PQ0VOVF9DT05URVhUX1JFU0VUID0gMzMzNjQ7IC8vIDB4ODI1NAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0lOVF9JTUFHRV9CVUZGRVIgPSAzNjk1NjsgLy8gMHg5MDVjCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfSU5UX0lNQUdFX0NVQkVfTUFQX0FSUkFZID0gMzY5NTk7IC8vIDB4OTA1ZgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0lOVF9TQU1QTEVSXzJEX01VTFRJU0FNUExFX0FSUkFZID0gMzcxMzI7IC8vIDB4OTEwYworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0lOVF9TQU1QTEVSX0JVRkZFUiA9IDM2MzA0OyAvLyAweDhkZDAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9JTlRfU0FNUExFUl9DVUJFX01BUF9BUlJBWSA9IDM2ODc4OyAvLyAweDkwMGUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9JU09MSU5FUyA9IDM2NDc0OyAvLyAweDhlN2EKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9JU19QRVJfUEFUQ0ggPSAzNzYwNzsgLy8gMHg5MmU3CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTEFTVF9WRVJURVhfQ09OVkVOVElPTiA9IDM2NDMwOyAvLyAweDhlNGUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9MQVlFUl9QUk9WT0tJTkdfVkVSVEVYID0gMzMzNzQ7IC8vIDB4ODI1ZQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0xJR0hURU4gPSAzNzUyODsgLy8gMHg5Mjk4CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTElORVNfQURKQUNFTkNZID0gMTA7IC8vIDB4YQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0xJTkVfU1RSSVBfQURKQUNFTkNZID0gMTE7IC8vIDB4YgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0xPU0VfQ09OVEVYVF9PTl9SRVNFVCA9IDMzMzYyOyAvLyAweDgyNTIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfQ09NQklORURfR0VPTUVUUllfVU5JRk9STV9DT01QT05FTlRTID0gMzUzNzg7IC8vIDB4OGEzMgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9DT01CSU5FRF9URVNTX0NPTlRST0xfVU5JRk9STV9DT01QT05FTlRTID0gMzYzODI7IC8vIDB4OGUxZQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9DT01CSU5FRF9URVNTX0VWQUxVQVRJT05fVU5JRk9STV9DT01QT05FTlRTID0gMzYzODM7IC8vIDB4OGUxZgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9ERUJVR19HUk9VUF9TVEFDS19ERVBUSCA9IDMzMzg4OyAvLyAweDgyNmMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfREVCVUdfTE9HR0VEX01FU1NBR0VTID0gMzcxODg7IC8vIDB4OTE0NAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9ERUJVR19NRVNTQUdFX0xFTkdUSCA9IDM3MTg3OyAvLyAweDkxNDMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfRlJBR01FTlRfSU5URVJQT0xBVElPTl9PRkZTRVQgPSAzNjQ0NDsgLy8gMHg4ZTVjCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX0ZSQU1FQlVGRkVSX0xBWUVSUyA9IDM3NjU1OyAvLyAweDkzMTcKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfR0VPTUVUUllfQVRPTUlDX0NPVU5URVJTID0gMzc1ODk7IC8vIDB4OTJkNQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9HRU9NRVRSWV9BVE9NSUNfQ09VTlRFUl9CVUZGRVJTID0gMzc1ODM7IC8vIDB4OTJjZgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9HRU9NRVRSWV9JTUFHRV9VTklGT1JNUyA9IDM3MDY5OyAvLyAweDkwY2QKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfR0VPTUVUUllfSU5QVVRfQ09NUE9ORU5UUyA9IDM3MTU1OyAvLyAweDkxMjMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfR0VPTUVUUllfT1VUUFVUX0NPTVBPTkVOVFMgPSAzNzE1NjsgLy8gMHg5MTI0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX0dFT01FVFJZX09VVFBVVF9WRVJUSUNFUyA9IDM2MzIwOyAvLyAweDhkZTAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfR0VPTUVUUllfU0hBREVSX0lOVk9DQVRJT05TID0gMzY0NDI7IC8vIDB4OGU1YQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9HRU9NRVRSWV9TSEFERVJfU1RPUkFHRV9CTE9DS1MgPSAzNzA3OTsgLy8gMHg5MGQ3CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX0dFT01FVFJZX1RFWFRVUkVfSU1BR0VfVU5JVFMgPSAzNTg4MTsgLy8gMHg4YzI5CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX0dFT01FVFJZX1RPVEFMX09VVFBVVF9DT01QT05FTlRTID0gMzYzMjE7IC8vIDB4OGRlMQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9HRU9NRVRSWV9VTklGT1JNX0JMT0NLUyA9IDM1MzcyOyAvLyAweDhhMmMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfR0VPTUVUUllfVU5JRk9STV9DT01QT05FTlRTID0gMzYzMTk7IC8vIDB4OGRkZgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9MQUJFTF9MRU5HVEggPSAzMzUxMjsgLy8gMHg4MmU4CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1BBVENIX1ZFUlRJQ0VTID0gMzY0Nzc7IC8vIDB4OGU3ZAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0NPTlRST0xfQVRPTUlDX0NPVU5URVJTID0gMzc1ODc7IC8vIDB4OTJkMworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0NPTlRST0xfQVRPTUlDX0NPVU5URVJfQlVGRkVSUyA9IDM3NTgxOyAvLyAweDkyY2QKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfVEVTU19DT05UUk9MX0lNQUdFX1VOSUZPUk1TID0gMzcwNjc7IC8vIDB4OTBjYgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0NPTlRST0xfSU5QVVRfQ09NUE9ORU5UUyA9IDM0OTI0OyAvLyAweDg4NmMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfVEVTU19DT05UUk9MX09VVFBVVF9DT01QT05FTlRTID0gMzY0ODM7IC8vIDB4OGU4MworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0NPTlRST0xfU0hBREVSX1NUT1JBR0VfQkxPQ0tTID0gMzcwODA7IC8vIDB4OTBkOAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0NPTlRST0xfVEVYVFVSRV9JTUFHRV9VTklUUyA9IDM2NDgxOyAvLyAweDhlODEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfVEVTU19DT05UUk9MX1RPVEFMX09VVFBVVF9DT01QT05FTlRTID0gMzY0ODU7IC8vIDB4OGU4NQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0NPTlRST0xfVU5JRk9STV9CTE9DS1MgPSAzNjQ4OTsgLy8gMHg4ZTg5CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1RFU1NfQ09OVFJPTF9VTklGT1JNX0NPTVBPTkVOVFMgPSAzNjQ3OTsgLy8gMHg4ZTdmCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1RFU1NfRVZBTFVBVElPTl9BVE9NSUNfQ09VTlRFUlMgPSAzNzU4ODsgLy8gMHg5MmQ0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1RFU1NfRVZBTFVBVElPTl9BVE9NSUNfQ09VTlRFUl9CVUZGRVJTID0gMzc1ODI7IC8vIDB4OTJjZQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0VWQUxVQVRJT05fSU1BR0VfVU5JRk9STVMgPSAzNzA2ODsgLy8gMHg5MGNjCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1RFU1NfRVZBTFVBVElPTl9JTlBVVF9DT01QT05FTlRTID0gMzQ5MjU7IC8vIDB4ODg2ZAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0VWQUxVQVRJT05fT1VUUFVUX0NPTVBPTkVOVFMgPSAzNjQ4NjsgLy8gMHg4ZTg2CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1RFU1NfRVZBTFVBVElPTl9TSEFERVJfU1RPUkFHRV9CTE9DS1MgPSAzNzA4MTsgLy8gMHg5MGQ5CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1RFU1NfRVZBTFVBVElPTl9URVhUVVJFX0lNQUdFX1VOSVRTID0gMzY0ODI7IC8vIDB4OGU4MgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0VWQUxVQVRJT05fVU5JRk9STV9CTE9DS1MgPSAzNjQ5MDsgLy8gMHg4ZThhCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1RFU1NfRVZBTFVBVElPTl9VTklGT1JNX0NPTVBPTkVOVFMgPSAzNjQ4MDsgLy8gMHg4ZTgwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1RFU1NfR0VOX0xFVkVMID0gMzY0Nzg7IC8vIDB4OGU3ZQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX1BBVENIX0NPTVBPTkVOVFMgPSAzNjQ4NDsgLy8gMHg4ZTg0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1RFWFRVUkVfQlVGRkVSX1NJWkUgPSAzNTg4MzsgLy8gMHg4YzJiCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUlOX0ZSQUdNRU5UX0lOVEVSUE9MQVRJT05fT0ZGU0VUID0gMzY0NDM7IC8vIDB4OGU1YgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01JTl9TQU1QTEVfU0hBRElOR19WQUxVRSA9IDM1ODk1OyAvLyAweDhjMzcKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NVUxUSVBMWSA9IDM3NTI0OyAvLyAweDkyOTQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NVUxUSVNBTVBMRV9MSU5FX1dJRFRIX0dSQU5VTEFSSVRZID0gMzc3NjI7IC8vIDB4OTM4MgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01VTFRJU0FNUExFX0xJTkVfV0lEVEhfUkFOR0UgPSAzNzc2MTsgLy8gMHg5MzgxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTk9fUkVTRVRfTk9USUZJQ0FUSU9OID0gMzMzNzc7IC8vIDB4ODI2MQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX09WRVJMQVkgPSAzNzUyNjsgLy8gMHg5Mjk2CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfUEFUQ0hFUyA9IDE0OyAvLyAweGUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9QQVRDSF9WRVJUSUNFUyA9IDM2NDY2OyAvLyAweDhlNzIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9QUklNSVRJVkVTX0dFTkVSQVRFRCA9IDM1OTc1OyAvLyAweDhjODcKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9QUklNSVRJVkVfQk9VTkRJTkdfQk9YID0gMzc1NjY7IC8vIDB4OTJiZQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1BSSU1JVElWRV9SRVNUQVJUX0ZPUl9QQVRDSEVTX1NVUFBPUlRFRCA9IDMzMzEzOyAvLyAweDgyMjEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9QUk9HUkFNID0gMzM1MDY7IC8vIDB4ODJlMgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1BST0dSQU1fUElQRUxJTkUgPSAzMzUwODsgLy8gMHg4MmU0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfUVVBRFMgPSA3OyAvLyAweDcKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9RVUVSWSA9IDMzNTA3OyAvLyAweDgyZTMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9SRUZFUkVOQ0VEX0JZX0dFT01FVFJZX1NIQURFUiA9IDM3NjQxOyAvLyAweDkzMDkKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9SRUZFUkVOQ0VEX0JZX1RFU1NfQ09OVFJPTF9TSEFERVIgPSAzNzYzOTsgLy8gMHg5MzA3CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfUkVGRVJFTkNFRF9CWV9URVNTX0VWQUxVQVRJT05fU0hBREVSID0gMzc2NDA7IC8vIDB4OTMwOAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1JFU0VUX05PVElGSUNBVElPTl9TVFJBVEVHWSA9IDMzMzY2OyAvLyAweDgyNTYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9TQU1QTEVSID0gMzM1MTA7IC8vIDB4ODJlNgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1NBTVBMRVJfMkRfTVVMVElTQU1QTEVfQVJSQVkgPSAzNzEzMTsgLy8gMHg5MTBiCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfU0FNUExFUl9CVUZGRVIgPSAzNjI5MDsgLy8gMHg4ZGMyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfU0FNUExFUl9DVUJFX01BUF9BUlJBWSA9IDM2ODc2OyAvLyAweDkwMGMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9TQU1QTEVSX0NVQkVfTUFQX0FSUkFZX1NIQURPVyA9IDM2ODc3OyAvLyAweDkwMGQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9TQU1QTEVfU0hBRElORyA9IDM1ODk0OyAvLyAweDhjMzYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9TQ1JFRU4gPSAzNzUyNTsgLy8gMHg5Mjk1CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfU0hBREVSID0gMzM1MDU7IC8vIDB4ODJlMQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1NPRlRMSUdIVCA9IDM3NTMyOyAvLyAweDkyOWMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9TVEFDS19PVkVSRkxPVyA9IDEyODM7IC8vIDB4NTAzCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfU1RBQ0tfVU5ERVJGTE9XID0gMTI4NDsgLy8gMHg1MDQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9URVNTX0NPTlRST0xfT1VUUFVUX1ZFUlRJQ0VTID0gMzY0Njk7IC8vIDB4OGU3NQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFU1NfQ09OVFJPTF9TSEFERVIgPSAzNjQ4ODsgLy8gMHg4ZTg4CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVEVTU19DT05UUk9MX1NIQURFUl9CSVQgPSA4OyAvLyAweDgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9URVNTX0VWQUxVQVRJT05fU0hBREVSID0gMzY0ODc7IC8vIDB4OGU4NworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFU1NfRVZBTFVBVElPTl9TSEFERVJfQklUID0gMTY7IC8vIDB4MTAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9URVNTX0dFTl9NT0RFID0gMzY0NzA7IC8vIDB4OGU3NgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFU1NfR0VOX1BPSU5UX01PREUgPSAzNjQ3MzsgLy8gMHg4ZTc5CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVEVTU19HRU5fU1BBQ0lORyA9IDM2NDcxOyAvLyAweDhlNzcKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9URVNTX0dFTl9WRVJURVhfT1JERVIgPSAzNjQ3MjsgLy8gMHg4ZTc4CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVEVYVFVSRV8yRF9NVUxUSVNBTVBMRV9BUlJBWSA9IDM3MTIyOyAvLyAweDkxMDIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9URVhUVVJFX0JJTkRJTkdfMkRfTVVMVElTQU1QTEVfQVJSQVkgPSAzNzEyNTsgLy8gMHg5MTA1CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVEVYVFVSRV9CSU5ESU5HX0JVRkZFUiA9IDM1ODg0OyAvLyAweDhjMmMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9URVhUVVJFX0JJTkRJTkdfQ1VCRV9NQVBfQVJSQVkgPSAzNjg3NDsgLy8gMHg5MDBhCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVEVYVFVSRV9CT1JERVJfQ09MT1IgPSA0MTAwOyAvLyAweDEwMDQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9URVhUVVJFX0JVRkZFUiA9IDM1ODgyOyAvLyAweDhjMmEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9URVhUVVJFX0JVRkZFUl9CSU5ESU5HID0gMzU4ODI7IC8vIDB4OGMyYQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfQlVGRkVSX0RBVEFfU1RPUkVfQklORElORyA9IDM1ODg1OyAvLyAweDhjMmQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9URVhUVVJFX0JVRkZFUl9PRkZTRVQgPSAzNzI3NzsgLy8gMHg5MTlkCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVEVYVFVSRV9CVUZGRVJfT0ZGU0VUX0FMSUdOTUVOVCA9IDM3Mjc5OyAvLyAweDkxOWYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9URVhUVVJFX0JVRkZFUl9TSVpFID0gMzcyNzg7IC8vIDB4OTE5ZQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfQ1VCRV9NQVBfQVJSQVkgPSAzNjg3MzsgLy8gMHg5MDA5CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVFJJQU5HTEVTX0FESkFDRU5DWSA9IDEyOyAvLyAweGMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9UUklBTkdMRV9TVFJJUF9BREpBQ0VOQ1kgPSAxMzsgLy8gMHhkCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVU5ERUZJTkVEX1ZFUlRFWCA9IDMzMzc2OyAvLyAweDgyNjAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9VTktOT1dOX0NPTlRFWFRfUkVTRVQgPSAzMzM2NTsgLy8gMHg4MjU1CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVU5TSUdORURfSU5UX0lNQUdFX0JVRkZFUiA9IDM2OTY3OyAvLyAweDkwNjcKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9VTlNJR05FRF9JTlRfSU1BR0VfQ1VCRV9NQVBfQVJSQVkgPSAzNjk3MDsgLy8gMHg5MDZhCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfMkRfTVVMVElTQU1QTEVfQVJSQVkgPSAzNzEzMzsgLy8gMHg5MTBkCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfQlVGRkVSID0gMzYzMTI7IC8vIDB4OGRkOAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSX0NVQkVfTUFQX0FSUkFZID0gMzY4Nzk7IC8vIDB4OTAwZgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1ZFUlRFWF9BUlJBWSA9IDMyODg0OyAvLyAweDgwNzQKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgYWJzdHJhY3QgaW50ZXJmYWNlIEdMRVMzMi5EZWJ1Z1Byb2MgeworICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBvbk1lc3NhZ2UoaW50LCBpbnQsIGludCwgaW50LCBqYXZhLmxhbmcuU3RyaW5nKTsKKyAgfQorCiAgIHB1YmxpYyBjbGFzcyBHTEV4Y2VwdGlvbiBleHRlbmRzIGphdmEubGFuZy5SdW50aW1lRXhjZXB0aW9uIHsKICAgICBjdG9yIHB1YmxpYyBHTEV4Y2VwdGlvbihpbnQpOwogICAgIGN0b3IgcHVibGljIEdMRXhjZXB0aW9uKGludCwgamF2YS5sYW5nLlN0cmluZyk7CkBAIC0zMDg3OCw2ICszMTE1OSw5IEBACiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnByaW50LlByaW50ZXJJbmZvIGJ1aWxkKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnByaW50LlByaW50ZXJJbmZvLkJ1aWxkZXIgc2V0Q2FwYWJpbGl0aWVzKGFuZHJvaWQucHJpbnQuUHJpbnRlckNhcGFiaWxpdGllc0luZm8pOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5wcmludC5QcmludGVySW5mby5CdWlsZGVyIHNldERlc2NyaXB0aW9uKGphdmEubGFuZy5TdHJpbmcpOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5wcmludC5QcmludGVySW5mby5CdWlsZGVyIHNldEhhc0N1c3RvbVByaW50ZXJJY29uKCk7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnByaW50LlByaW50ZXJJbmZvLkJ1aWxkZXIgc2V0SWNvblJlc291cmNlSWQoaW50KTsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQucHJpbnQuUHJpbnRlckluZm8uQnVpbGRlciBzZXRJbmZvSW50ZW50KGFuZHJvaWQuYXBwLlBlbmRpbmdJbnRlbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5wcmludC5QcmludGVySW5mby5CdWlsZGVyIHNldE5hbWUoamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnByaW50LlByaW50ZXJJbmZvLkJ1aWxkZXIgc2V0U3RhdHVzKGludCk7CiAgIH0KQEAgLTMwODk4LDYgKzMxMTgyLDEwIEBACiAKIHBhY2thZ2UgYW5kcm9pZC5wcmludHNlcnZpY2UgewogCisgIHB1YmxpYyBjbGFzcyBDdXN0b21QcmludGVySWNvbkNhbGxiYWNrIHsKKyAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gb25DdXN0b21QcmludGVySWNvbkxvYWRlZChhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkljb24pOworICB9CisKICAgcHVibGljIGZpbmFsIGNsYXNzIFByaW50RG9jdW1lbnQgewogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5vcy5QYXJjZWxGaWxlRGVzY3JpcHRvciBnZXREYXRhKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnByaW50LlByaW50RG9jdW1lbnRJbmZvIGdldEluZm8oKTsKQEAgLTMwOTUzLDYgKzMxMjQxLDcgQEAKICAgICBtZXRob2QgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNEZXN0cm95ZWQoKTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNQcmludGVyRGlzY292ZXJ5U3RhcnRlZCgpOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBvbkRlc3Ryb3koKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgb25SZXF1ZXN0Q3VzdG9tUHJpbnRlckljb24oYW5kcm9pZC5wcmludC5QcmludGVySWQsIGFuZHJvaWQucHJpbnRzZXJ2aWNlLkN1c3RvbVByaW50ZXJJY29uQ2FsbGJhY2spOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBvblN0YXJ0UHJpbnRlckRpc2NvdmVyeShqYXZhLnV0aWwuTGlzdDxhbmRyb2lkLnByaW50LlByaW50ZXJJZD4pOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBvblN0YXJ0UHJpbnRlclN0YXRlVHJhY2tpbmcoYW5kcm9pZC5wcmludC5QcmludGVySWQpOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBvblN0b3BQcmludGVyRGlzY292ZXJ5KCk7CkBAIC0zMTMyMSw2ICszMTYxMCw3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEdFT0NPREVEX0xPQ0FUSU9OID0gImdlb2NvZGVkX2xvY2F0aW9uIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTkNPTUlOR19UWVBFID0gMTsgLy8gMHgxCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIElTX1JFQUQgPSAiaXNfcmVhZCI7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIExBU1RfTU9ESUZJRUQgPSAibGFzdF9tb2RpZmllZCI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIExJTUlUX1BBUkFNX0tFWSA9ICJsaW1pdCI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUlTU0VEX1RZUEUgPSAzOyAvLyAweDMKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgTkVXID0gIm5ldyI7CkBAIC0zMzA2MSw2ICszMzM1MSw3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEFDVElPTl9MT0NBVElPTl9TT1VSQ0VfU0VUVElOR1MgPSAiYW5kcm9pZC5zZXR0aW5ncy5MT0NBVElPTl9TT1VSQ0VfU0VUVElOR1MiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBBQ1RJT05fTUFOQUdFX0FMTF9BUFBMSUNBVElPTlNfU0VUVElOR1MgPSAiYW5kcm9pZC5zZXR0aW5ncy5NQU5BR0VfQUxMX0FQUExJQ0FUSU9OU19TRVRUSU5HUyI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEFDVElPTl9NQU5BR0VfQVBQTElDQVRJT05TX1NFVFRJTkdTID0gImFuZHJvaWQuc2V0dGluZ3MuTUFOQUdFX0FQUExJQ0FUSU9OU19TRVRUSU5HUyI7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEFDVElPTl9NQU5BR0VfREVGQVVMVF9BUFBTX1NFVFRJTkdTID0gImFuZHJvaWQuc2V0dGluZ3MuTUFOQUdFX0RFRkFVTFRfQVBQU19TRVRUSU5HUyI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEFDVElPTl9NQU5BR0VfT1ZFUkxBWV9QRVJNSVNTSU9OID0gImFuZHJvaWQuc2V0dGluZ3MuYWN0aW9uLk1BTkFHRV9PVkVSTEFZX1BFUk1JU1NJT04iOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBBQ1RJT05fTUFOQUdFX1dSSVRFX1NFVFRJTkdTID0gImFuZHJvaWQuc2V0dGluZ3MuYWN0aW9uLk1BTkFHRV9XUklURV9TRVRUSU5HUyI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEFDVElPTl9NRU1PUllfQ0FSRF9TRVRUSU5HUyA9ICJhbmRyb2lkLnNldHRpbmdzLk1FTU9SWV9DQVJEX1NFVFRJTkdTIjsKQEAgLTMzNzIzLDYgKzM0MDE0LDcgQEAKIAogICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIFZvaWNlbWFpbENvbnRyYWN0LlN0YXR1cyBpbXBsZW1lbnRzIGFuZHJvaWQucHJvdmlkZXIuQmFzZUNvbHVtbnMgewogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQubmV0LlVyaSBidWlsZFNvdXJjZVVyaShqYXZhLmxhbmcuU3RyaW5nKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIHNldFF1b3RhKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnRlbGVjb20uUGhvbmVBY2NvdW50SGFuZGxlLCBpbnQsIGludCk7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIENPTkZJR1VSQVRJT05fU1RBVEUgPSAiY29uZmlndXJhdGlvbl9zdGF0ZSI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09ORklHVVJBVElPTl9TVEFURV9DQU5fQkVfQ09ORklHVVJFRCA9IDI7IC8vIDB4MgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTkZJR1VSQVRJT05fU1RBVEVfTk9UX0NPTkZJR1VSRUQgPSAxOyAvLyAweDEKQEAgLTMzNzM5LDYgKzM0MDMxLDkgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOT1RJRklDQVRJT05fQ0hBTk5FTF9TVEFURV9PSyA9IDA7IC8vIDB4MAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBQSE9ORV9BQ0NPVU5UX0NPTVBPTkVOVF9OQU1FID0gInBob25lX2FjY291bnRfY29tcG9uZW50X25hbWUiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBQSE9ORV9BQ0NPVU5UX0lEID0gInBob25lX2FjY291bnRfaWQiOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBRVU9UQV9PQ0NVUElFRCA9ICJxdW90YV9vY2N1cGllZCI7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIFFVT1RBX1RPVEFMID0gInF1b3RhX3RvdGFsIjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBRVU9UQV9VTkFWQUlMQUJMRSA9IC0xOyAvLyAweGZmZmZmZmZmCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIFNFVFRJTkdTX1VSSSA9ICJzZXR0aW5nc191cmkiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBTT1VSQ0VfUEFDS0FHRSA9ICJzb3VyY2VfcGFja2FnZSI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIFZPSUNFTUFJTF9BQ0NFU1NfVVJJID0gInZvaWNlbWFpbF9hY2Nlc3NfdXJpIjsKQEAgLTMzNzU1LDYgKzM0MDUwLDcgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgSEFTX0NPTlRFTlQgPSAiaGFzX2NvbnRlbnQiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBJU19SRUFEID0gImlzX3JlYWQiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBJVEVNX1RZUEUgPSAidm5kLmFuZHJvaWQuY3Vyc29yLml0ZW0vdm9pY2VtYWlsIjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgTEFTVF9NT0RJRklFRCA9ICJsYXN0X21vZGlmaWVkIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgTUlNRV9UWVBFID0gIm1pbWVfdHlwZSI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIE5VTUJFUiA9ICJudW1iZXIiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBQSE9ORV9BQ0NPVU5UX0NPTVBPTkVOVF9OQU1FID0gInN1YnNjcmlwdGlvbl9jb21wb25lbnRfbmFtZSI7CkBAIC0zNDk0Niw2ICszNTI0Miw3IEBACiAgIHB1YmxpYyBjbGFzcyBOZXR3b3JrU2VjdXJpdHlQb2xpY3kgewogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQuc2VjdXJpdHkuTmV0d29ya1NlY3VyaXR5UG9saWN5IGdldEluc3RhbmNlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzQ2xlYXJ0ZXh0VHJhZmZpY1Blcm1pdHRlZCgpOworICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc0NsZWFydGV4dFRyYWZmaWNQZXJtaXR0ZWQoamF2YS5sYW5nLlN0cmluZyk7CiAgIH0KIAogfQpAQCAtMzUzNjEsNiArMzU2NTgsNyBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJFQVNPTl9QQUNLQUdFX0JBTk5FRCA9IDc7IC8vIDB4NwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJFQVNPTl9QQUNLQUdFX0NIQU5HRUQgPSA1OyAvLyAweDUKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBSRUFTT05fVVNFUl9TVE9QUEVEID0gNjsgLy8gMHg2CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIFNFUlZJQ0VfSU5URVJGQUNFID0gImFuZHJvaWQuc2VydmljZS5ub3RpZmljYXRpb24uTm90aWZpY2F0aW9uQXNzaXN0YW50U2VydmljZSI7CiAgIH0KIAogICBwdWJsaWMgY2xhc3MgTm90aWZpY2F0aW9uQXNzaXN0YW50U2VydmljZS5BZGp1c3RtZW50IHsKQEAgLTM1Mzk1LDYgKzM1NjkzLDcgQEAKICAgICBtZXRob2QgcHVibGljIGZpbmFsIHZvaWQgc2V0Tm90aWZpY2F0aW9uc1Nob3duKGphdmEubGFuZy5TdHJpbmdbXSk7CiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCB2b2lkIHNldE9uTm90aWZpY2F0aW9uUG9zdGVkVHJpbShpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCB1bnJlZ2lzdGVyQXNTeXN0ZW1TZXJ2aWNlKCkgdGhyb3dzIGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBDQVRFR09SWV9WUl9OT1RJRklDQVRJT05TID0gImFuZHJvaWQuaW50ZW50LmNhdGVnb3J5LnZyLm5vdGlmaWNhdGlvbnMiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEhJTlRfSE9TVF9ESVNBQkxFX0VGRkVDVFMgPSAxOyAvLyAweDEKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTlRFUlJVUFRJT05fRklMVEVSX0FMQVJNUyA9IDQ7IC8vIDB4NAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOVEVSUlVQVElPTl9GSUxURVJfQUxMID0gMTsgLy8gMHgxCkBAIC0zNTQwNCw2ICszNTcwMyw3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIFNFUlZJQ0VfSU5URVJGQUNFID0gImFuZHJvaWQuc2VydmljZS5ub3RpZmljYXRpb24uTm90aWZpY2F0aW9uTGlzdGVuZXJTZXJ2aWNlIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVVBQUkVTU0VEX0VGRkVDVF9MSUdIVFMgPSAxOyAvLyAweDEKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVVBQUkVTU0VEX0VGRkVDVF9QRUVLID0gMjsgLy8gMHgyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1VQUFJFU1NFRF9FRkZFQ1RfU0NSRUVOX09OID0gNDsgLy8gMHg0CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVFJJTV9GVUxMID0gMDsgLy8gMHgwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVFJJTV9MSUdIVCA9IDE7IC8vIDB4MQogICB9CkBAIC0zNTUwMiwxMCArMzU4MDIsMTMgQEAKICAgICBtZXRob2QgcHVibGljIHZvaWQgb25DbGljaygpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBvblN0YXJ0TGlzdGVuaW5nKCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIG9uU3RvcExpc3RlbmluZygpOwotICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBvblRpbGVBZGRlZCgpOworICAgIG1ldGhvZCBwdWJsaWMgaW50IG9uVGlsZUFkZGVkKCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIG9uVGlsZVJlbW92ZWQoKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBmaW5hbCB2b2lkIHJlcXVlc3RMaXN0ZW5pbmdTdGF0ZShhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUpOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgdm9pZCBzaG93RGlhbG9nKGFuZHJvaWQuYXBwLkRpYWxvZyk7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEFDVElPTl9RU19USUxFID0gImFuZHJvaWQuc2VydmljZS5xdWlja3NldHRpbmdzLmFjdGlvbi5RU19USUxFIjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUSUxFX01PREVfQUNUSVZFID0gMjsgLy8gMHgyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVElMRV9NT0RFX1BBU1NJVkUgPSAxOyAvLyAweDEKICAgfQogCiB9CkBAIC0zNjgwOSw2ICszNzExMiw3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJPUEVSVFlfR0VORVJJQ19DT05GRVJFTkNFID0gMjsgLy8gMHgyCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJPUEVSVFlfSElHSF9ERUZfQVVESU8gPSAxNjsgLy8gMHgxMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBST1BFUlRZX1dJRkkgPSA4OyAvLyAweDgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQUk9QRVJUWV9XT1JLX0NBTEwgPSAzMjsgLy8gMHgyMAogICB9CiAKICAgcHVibGljIHN0YXRpYyBhYnN0cmFjdCBkZXByZWNhdGVkIGNsYXNzIENhbGwuTGlzdGVuZXIgZXh0ZW5kcyBhbmRyb2lkLnRlbGVjb20uQ2FsbC5DYWxsYmFjayB7CkBAIC0zODc3Nyw3ICszOTA4MSw2IEBACiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlIGdldEFwcGxpY2F0aW9uTG9nbyhqYXZhLmxhbmcuU3RyaW5nKSB0aHJvd3MgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLk5hbWVOb3RGb3VuZEV4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIGludCBnZXRDb21wb25lbnRFbmFibGVkU2V0dGluZyhhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlIGdldERlZmF1bHRBY3Rpdml0eUljb24oKTsKLSAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0RGVmYXVsdEJyb3dzZXJQYWNrYWdlTmFtZShpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZSBnZXREcmF3YWJsZShqYXZhLmxhbmcuU3RyaW5nLCBpbnQsIGFuZHJvaWQuY29udGVudC5wbS5BcHBsaWNhdGlvbkluZm8pOwogICAgIG1ldGhvZCBwdWJsaWMgYnl0ZVtdIGdldEVwaGVtZXJhbENvb2tpZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldEVwaGVtZXJhbENvb2tpZU1heFNpemVCeXRlcygpOwpAQCAtMzg4MzMsNyArMzkxMzYsNiBAQAogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCByZXZva2VSdW50aW1lUGVybWlzc2lvbihqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBhbmRyb2lkLm9zLlVzZXJIYW5kbGUpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRBcHBsaWNhdGlvbkVuYWJsZWRTZXR0aW5nKGphdmEubGFuZy5TdHJpbmcsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0Q29tcG9uZW50RW5hYmxlZFNldHRpbmcoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGludCwgaW50KTsKLSAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gc2V0RGVmYXVsdEJyb3dzZXJQYWNrYWdlTmFtZShqYXZhLmxhbmcuU3RyaW5nLCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBzZXRFcGhlbWVyYWxDb29raWUoYnl0ZVtdKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0SW5zdGFsbGVyUGFja2FnZU5hbWUoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHVwZGF0ZVBlcm1pc3Npb25GbGFncyhqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBpbnQsIGludCwgYW5kcm9pZC5vcy5Vc2VySGFuZGxlKTsKQEAgLTQxNjYwLDcgKzQxOTYyLDYgQEAKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gZ2V0UmVzdWx0KCk7CiAgICAgbWV0aG9kIHB1YmxpYyBmbG9hdCBnZXRYKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBmbG9hdCBnZXRZKCk7Ci0gICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnZpZXcuRHJvcFBlcm1pc3Npb25zIHJlcXVlc3REcm9wUGVybWlzc2lvbnMoKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgd3JpdGVUb1BhcmNlbChhbmRyb2lkLm9zLlBhcmNlbCwgaW50KTsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBQ1RJT05fRFJBR19FTkRFRCA9IDQ7IC8vIDB4NAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFDVElPTl9EUkFHX0VOVEVSRUQgPSA1OyAvLyAweDUKQEAgLTQyNTk4LDYgKzQyODk5LDggQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBWElTX0xUUklHR0VSID0gMTc7IC8vIDB4MTEKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBWElTX09SSUVOVEFUSU9OID0gODsgLy8gMHg4CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQVhJU19QUkVTU1VSRSA9IDI7IC8vIDB4MgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFYSVNfUkVMQVRJVkVfWCA9IDI3OyAvLyAweDFiCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQVhJU19SRUxBVElWRV9ZID0gMjg7IC8vIDB4MWMKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBWElTX1JUUklHR0VSID0gMTg7IC8vIDB4MTIKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBWElTX1JVRERFUiA9IDIwOyAvLyAweDE0CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQVhJU19SWCA9IDEyOyAvLyAweGMKQEAgLTQzMTMzLDYgKzQzNDM2LDcgQEAKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaGFzTmVzdGVkU2Nyb2xsaW5nUGFyZW50KCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGhhc09uQ2xpY2tMaXN0ZW5lcnMoKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaGFzT3ZlcmxhcHBpbmdSZW5kZXJpbmcoKTsKKyAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaGFzUG9pbnRlckNhcHR1cmUoKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaGFzVHJhbnNpZW50U3RhdGUoKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaGFzV2luZG93Rm9jdXMoKTsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLnZpZXcuVmlldyBpbmZsYXRlKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBpbnQsIGFuZHJvaWQudmlldy5WaWV3R3JvdXApOwpAQCAtNDMyNTksNiArNDM1NjMsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBwb3N0T25BbmltYXRpb24oamF2YS5sYW5nLlJ1bm5hYmxlKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgcG9zdE9uQW5pbWF0aW9uRGVsYXllZChqYXZhLmxhbmcuUnVubmFibGUsIGxvbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCByZWZyZXNoRHJhd2FibGVTdGF0ZSgpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCByZWxlYXNlUG9pbnRlckNhcHR1cmUoKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gcmVtb3ZlQ2FsbGJhY2tzKGphdmEubGFuZy5SdW5uYWJsZSk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHJlbW92ZU9uQXR0YWNoU3RhdGVDaGFuZ2VMaXN0ZW5lcihhbmRyb2lkLnZpZXcuVmlldy5PbkF0dGFjaFN0YXRlQ2hhbmdlTGlzdGVuZXIpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCByZW1vdmVPbkxheW91dENoYW5nZUxpc3RlbmVyKGFuZHJvaWQudmlldy5WaWV3Lk9uTGF5b3V0Q2hhbmdlTGlzdGVuZXIpOwpAQCAtNDMzNTksNiArNDM2NjQsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRQYWRkaW5nUmVsYXRpdmUoaW50LCBpbnQsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0UGl2b3RYKGZsb2F0KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0UGl2b3RZKGZsb2F0KTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0UG9pbnRlckNhcHR1cmUoKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0UG9pbnRlckljb24oYW5kcm9pZC52aWV3LlBvaW50ZXJJY29uKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0UHJlc3NlZChib29sZWFuKTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIHZvaWQgc2V0UmlnaHQoaW50KTsKQEAgLTYyMDg2LDggKzYyMzkyLDggQEAKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmdCdWZmZXIgYXBwZW5kVGFpbChqYXZhLmxhbmcuU3RyaW5nQnVmZmVyKTsKICAgICBtZXRob2QgcHVibGljIGludCBlbmQoKTsKICAgICBtZXRob2QgcHVibGljIGludCBlbmQoaW50KTsKLSAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gZmluZChpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBmaW5kKCk7CisgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGZpbmQoaW50KTsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ3JvdXAoKTsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ3JvdXAoaW50KTsKICAgICBtZXRob2QgcHVibGljIGludCBncm91cENvdW50KCk7CkBAIC02MjExNSw4ICs2MjQyMSw4IEBACiAgIH0KIAogICBwdWJsaWMgZmluYWwgY2xhc3MgUGF0dGVybiBpbXBsZW1lbnRzIGphdmEuaW8uU2VyaWFsaXphYmxlIHsKLSAgICBtZXRob2QgcHVibGljIHN0YXRpYyBqYXZhLnV0aWwucmVnZXguUGF0dGVybiBjb21waWxlKGphdmEubGFuZy5TdHJpbmcsIGludCkgdGhyb3dzIGphdmEudXRpbC5yZWdleC5QYXR0ZXJuU3ludGF4RXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGphdmEudXRpbC5yZWdleC5QYXR0ZXJuIGNvbXBpbGUoamF2YS5sYW5nLlN0cmluZyk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm4gY29tcGlsZShqYXZhLmxhbmcuU3RyaW5nLCBpbnQpIHRocm93cyBqYXZhLnV0aWwucmVnZXguUGF0dGVyblN5bnRheEV4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIGludCBmbGFncygpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS51dGlsLnJlZ2V4Lk1hdGNoZXIgbWF0Y2hlcihqYXZhLmxhbmcuQ2hhclNlcXVlbmNlKTsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBib29sZWFuIG1hdGNoZXMoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLkNoYXJTZXF1ZW5jZSk7CkBAIC02MjEzMSw2ICs2MjQzNyw3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTElURVJBTCA9IDE2OyAvLyAweDEwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTVVMVElMSU5FID0gODsgLy8gMHg4CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVU5JQ09ERV9DQVNFID0gNjQ7IC8vIDB4NDAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVTklDT0RFX0NIQVJBQ1RFUl9DTEFTUyA9IDI1NjsgLy8gMHgxMDAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVTklYX0xJTkVTID0gMTsgLy8gMHgxCiAgIH0KIApkaWZmIC0tZ2l0IGEvYXBpL3N5c3RlbS1yZW1vdmVkLnR4dCBiL2FwaS9zeXN0ZW0tcmVtb3ZlZC50eHQKaW5kZXggNjQyZDJhOC4uOTBhNWRjNyAxMDA2NDQKLS0tIGEvYXBpL3N5c3RlbS1yZW1vdmVkLnR4dAorKysgYi9hcGkvc3lzdGVtLXJlbW92ZWQudHh0CkBAIC0xOTAsNiArMTkwLDE1IEBACiAKIH0KIAorcGFja2FnZSBhbmRyb2lkLnRlc3QubW9jayB7CisKKyAgcHVibGljIGNsYXNzIE1vY2tQYWNrYWdlTWFuYWdlciBleHRlbmRzIGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlciB7CisgICAgbWV0aG9kIHB1YmxpYyBkZXByZWNhdGVkIGphdmEubGFuZy5TdHJpbmcgZ2V0RGVmYXVsdEJyb3dzZXJQYWNrYWdlTmFtZShpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgZGVwcmVjYXRlZCBib29sZWFuIHNldERlZmF1bHRCcm93c2VyUGFja2FnZU5hbWUoamF2YS5sYW5nLlN0cmluZywgaW50KTsKKyAgfQorCit9CisKIHBhY2thZ2UgYW5kcm9pZC50ZXh0LmZvcm1hdCB7CiAKICAgcHVibGljIGNsYXNzIERhdGVGb3JtYXQgewpkaWZmIC0tZ2l0IGEvYXBpL3Rlc3QtY3VycmVudC50eHQgYi9hcGkvdGVzdC1jdXJyZW50LnR4dAppbmRleCBmNDE4ZDM2Li40OTc3OWU4IDEwMDY0NAotLS0gYS9hcGkvdGVzdC1jdXJyZW50LnR4dAorKysgYi9hcGkvdGVzdC1jdXJyZW50LnR4dApAQCAtNjcsNyArNjcsNiBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBEVU1QID0gImFuZHJvaWQucGVybWlzc2lvbi5EVU1QIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRVhQQU5EX1NUQVRVU19CQVIgPSAiYW5kcm9pZC5wZXJtaXNzaW9uLkVYUEFORF9TVEFUVVNfQkFSIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRkFDVE9SWV9URVNUID0gImFuZHJvaWQucGVybWlzc2lvbi5GQUNUT1JZX1RFU1QiOwotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBGTEFTSExJR0hUID0gImFuZHJvaWQucGVybWlzc2lvbi5GTEFTSExJR0hUIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgR0VUX0FDQ09VTlRTID0gImFuZHJvaWQucGVybWlzc2lvbi5HRVRfQUNDT1VOVFMiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBHRVRfQUNDT1VOVFNfUFJJVklMRUdFRCA9ICJhbmRyb2lkLnBlcm1pc3Npb24uR0VUX0FDQ09VTlRTX1BSSVZJTEVHRUQiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBHRVRfUEFDS0FHRV9TSVpFID0gImFuZHJvaWQucGVybWlzc2lvbi5HRVRfUEFDS0FHRV9TSVpFIjsKQEAgLTM1MDQsNiArMzUwMyw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIHJlbGVhc2VJbnN0YW5jZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgZGVwcmVjYXRlZCB2b2lkIHJlbW92ZURpYWxvZyhpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCByZXBvcnRGdWxseURyYXduKCk7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnZpZXcuRHJvcFBlcm1pc3Npb25zIHJlcXVlc3REcm9wUGVybWlzc2lvbnMoYW5kcm9pZC52aWV3LkRyYWdFdmVudCk7CiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCB2b2lkIHJlcXVlc3RQZXJtaXNzaW9ucyhqYXZhLmxhbmcuU3RyaW5nW10sIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIHJlcXVlc3RWaXNpYmxlQmVoaW5kKGJvb2xlYW4pOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgYm9vbGVhbiByZXF1ZXN0V2luZG93RmVhdHVyZShpbnQpOwpAQCAtMzUzOCw2ICszNTM4LDcgQEAKICAgICBtZXRob2QgcHVibGljIGRlcHJlY2F0ZWQgdm9pZCBzZXRUaXRsZUNvbG9yKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFZpc2libGUoYm9vbGVhbik7CiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCB2b2lkIHNldFZvbHVtZUNvbnRyb2xTdHJlYW0oaW50KTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0VnJNb2RlKGJvb2xlYW4pOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBzaG91bGRTaG93UmVxdWVzdFBlcm1pc3Npb25SYXRpb25hbGUoamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIHNob3VsZFVwUmVjcmVhdGVUYXNrKGFuZHJvaWQuY29udGVudC5JbnRlbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBzaG93QXNzaXN0KGFuZHJvaWQub3MuQnVuZGxlKTsKQEAgLTQwODAsMTEgKzQwODEsMTQgQEAKICAgfQogCiAgIHB1YmxpYyBjbGFzcyBEYXRlUGlja2VyRGlhbG9nIGV4dGVuZHMgYW5kcm9pZC5hcHAuQWxlcnREaWFsb2cgaW1wbGVtZW50cyBhbmRyb2lkLndpZGdldC5EYXRlUGlja2VyLk9uRGF0ZUNoYW5nZWRMaXN0ZW5lciBhbmRyb2lkLmNvbnRlbnQuRGlhbG9nSW50ZXJmYWNlLk9uQ2xpY2tMaXN0ZW5lciB7CisgICAgY3RvciBwdWJsaWMgRGF0ZVBpY2tlckRpYWxvZyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CisgICAgY3RvciBwdWJsaWMgRGF0ZVBpY2tlckRpYWxvZyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgaW50KTsKICAgICBjdG9yIHB1YmxpYyBEYXRlUGlja2VyRGlhbG9nKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLmFwcC5EYXRlUGlja2VyRGlhbG9nLk9uRGF0ZVNldExpc3RlbmVyLCBpbnQsIGludCwgaW50KTsKICAgICBjdG9yIHB1YmxpYyBEYXRlUGlja2VyRGlhbG9nKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBpbnQsIGFuZHJvaWQuYXBwLkRhdGVQaWNrZXJEaWFsb2cuT25EYXRlU2V0TGlzdGVuZXIsIGludCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC53aWRnZXQuRGF0ZVBpY2tlciBnZXREYXRlUGlja2VyKCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIG9uQ2xpY2soYW5kcm9pZC5jb250ZW50LkRpYWxvZ0ludGVyZmFjZSwgaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgb25EYXRlQ2hhbmdlZChhbmRyb2lkLndpZGdldC5EYXRlUGlja2VyLCBpbnQsIGludCwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0T25EYXRlU2V0TGlzdGVuZXIoYW5kcm9pZC5hcHAuRGF0ZVBpY2tlckRpYWxvZy5PbkRhdGVTZXRMaXN0ZW5lcik7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHVwZGF0ZURhdGUoaW50LCBpbnQsIGludCk7CiAgIH0KIApAQCAtNDIyNCw3ICs0MjI4LDcgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQ09MVU1OX0RFU0NSSVBUSU9OID0gImRlc2NyaXB0aW9uIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQ09MVU1OX0lEID0gIl9pZCI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIENPTFVNTl9MQVNUX01PRElGSUVEX1RJTUVTVEFNUCA9ICJsYXN0X21vZGlmaWVkX3RpbWVzdGFtcCI7Ci0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIENPTFVNTl9MT0NBTF9GSUxFTkFNRSA9ICJsb2NhbF9maWxlbmFtZSI7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBkZXByZWNhdGVkIGphdmEubGFuZy5TdHJpbmcgQ09MVU1OX0xPQ0FMX0ZJTEVOQU1FID0gImxvY2FsX2ZpbGVuYW1lIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQ09MVU1OX0xPQ0FMX1VSSSA9ICJsb2NhbF91cmkiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBDT0xVTU5fTUVESUFQUk9WSURFUl9VUkkgPSAibWVkaWFwcm92aWRlcl91cmkiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBDT0xVTU5fTUVESUFfVFlQRSA9ICJtZWRpYV90eXBlIjsKQEAgLTQ4MzYsNiArNDg0MCw3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEVYVFJBX1BST0dSRVNTID0gImFuZHJvaWQucHJvZ3Jlc3MiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBFWFRSQV9QUk9HUkVTU19JTkRFVEVSTUlOQVRFID0gImFuZHJvaWQucHJvZ3Jlc3NJbmRldGVybWluYXRlIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRVhUUkFfUFJPR1JFU1NfTUFYID0gImFuZHJvaWQucHJvZ3Jlc3NNYXgiOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBFWFRSQV9SRU1PVEVfSU5QVVRfSElTVE9SWSA9ICJhbmRyb2lkLnJlbW90ZUlucHV0SGlzdG9yeSI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEVYVFJBX1NIT1dfQ0hST05PTUVURVIgPSAiYW5kcm9pZC5zaG93Q2hyb25vbWV0ZXIiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBFWFRSQV9TSE9XX1dIRU4gPSAiYW5kcm9pZC5zaG93V2hlbiI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEVYVFJBX1NNQUxMX0lDT04gPSAiYW5kcm9pZC5pY29uIjsKQEAgLTUwMDIsNiArNTAwNyw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmFwcC5Ob3RpZmljYXRpb24uQnVpbGRlciBzZXRQcmlvcml0eShpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5hcHAuTm90aWZpY2F0aW9uLkJ1aWxkZXIgc2V0UHJvZ3Jlc3MoaW50LCBpbnQsIGJvb2xlYW4pOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5hcHAuTm90aWZpY2F0aW9uLkJ1aWxkZXIgc2V0UHVibGljVmVyc2lvbihhbmRyb2lkLmFwcC5Ob3RpZmljYXRpb24pOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5hcHAuTm90aWZpY2F0aW9uLkJ1aWxkZXIgc2V0UmVtb3RlSW5wdXRIaXN0b3J5KGphdmEubGFuZy5DaGFyU2VxdWVuY2VbXSk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmFwcC5Ob3RpZmljYXRpb24uQnVpbGRlciBzZXRTaG93V2hlbihib29sZWFuKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuYXBwLk5vdGlmaWNhdGlvbi5CdWlsZGVyIHNldFNtYWxsSWNvbihpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5hcHAuTm90aWZpY2F0aW9uLkJ1aWxkZXIgc2V0U21hbGxJY29uKGludCwgaW50KTsKQEAgLTUxOTEsNiArNTE5Nyw3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1VQUFJFU1NFRF9FRkZFQ1RTX1VOU0VUID0gLTE7IC8vIDB4ZmZmZmZmZmYKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVVBQUkVTU0VEX0VGRkVDVF9MSUdIVFMgPSAxOyAvLyAweDEKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVVBQUkVTU0VEX0VGRkVDVF9QRUVLID0gMjsgLy8gMHgyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1VQUFJFU1NFRF9FRkZFQ1RfU0NSRUVOX09OID0gNDsgLy8gMHg0CiAgICAgZmllbGQgcHVibGljIGZpbmFsIGludCBwcmlvcml0eUNhbGxTZW5kZXJzOwogICAgIGZpZWxkIHB1YmxpYyBmaW5hbCBpbnQgcHJpb3JpdHlDYXRlZ29yaWVzOwogICAgIGZpZWxkIHB1YmxpYyBmaW5hbCBpbnQgcHJpb3JpdHlNZXNzYWdlU2VuZGVyczsKQEAgLTU3NTEsNiArNTc1OCw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldERldmljZU93bmVyTG9ja1NjcmVlbkluZm8oKTsKICAgICBtZXRob2QgcHVibGljIGphdmEudXRpbC5MaXN0PGJ5dGVbXT4gZ2V0SW5zdGFsbGVkQ2FDZXJ0cyhhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0S2V5Z3VhcmREaXNhYmxlZEZlYXR1cmVzKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lKTsKKyAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0TG9uZ1N1cHBvcnRNZXNzYWdlKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lKTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXRNYXhpbXVtRmFpbGVkUGFzc3dvcmRzRm9yV2lwZShhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSk7CiAgICAgbWV0aG9kIHB1YmxpYyBsb25nIGdldE1heGltdW1UaW1lVG9Mb2NrKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gZ2V0UGFja2FnZVN1c3BlbmRlZChhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSwgamF2YS5sYW5nLlN0cmluZyk7CkBAIC01NzcxLDYgKzU3NzksNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgamF2YS51dGlsLkxpc3Q8amF2YS5sYW5nLlN0cmluZz4gZ2V0UGVybWl0dGVkQWNjZXNzaWJpbGl0eVNlcnZpY2VzKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lKTsKICAgICBtZXRob2QgcHVibGljIGphdmEudXRpbC5MaXN0PGphdmEubGFuZy5TdHJpbmc+IGdldFBlcm1pdHRlZElucHV0TWV0aG9kcyhhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGdldFNjcmVlbkNhcHR1cmVEaXNhYmxlZChhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSk7CisgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldFNob3J0U3VwcG9ydE1lc3NhZ2UoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBnZXRTdG9yYWdlRW5jcnlwdGlvbihhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0U3RvcmFnZUVuY3J5cHRpb25TdGF0dXMoKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuYXBwLmFkbWluLlN5c3RlbVVwZGF0ZVBvbGljeSBnZXRTeXN0ZW1VcGRhdGVQb2xpY3koKTsKQEAgLTU4MTIsNiArNTgyMSw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIHNldEtleWd1YXJkRGlzYWJsZWQoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGJvb2xlYW4pOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRLZXlndWFyZERpc2FibGVkRmVhdHVyZXMoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldExvY2tUYXNrUGFja2FnZXMoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGphdmEubGFuZy5TdHJpbmdbXSkgdGhyb3dzIGphdmEubGFuZy5TZWN1cml0eUV4Y2VwdGlvbjsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0TG9uZ1N1cHBvcnRNZXNzYWdlKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBqYXZhLmxhbmcuU3RyaW5nKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0TWFzdGVyVm9sdW1lTXV0ZWQoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGJvb2xlYW4pOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRNYXhpbXVtRmFpbGVkUGFzc3dvcmRzRm9yV2lwZShhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSwgaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0TWF4aW11bVRpbWVUb0xvY2soYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGxvbmcpOwpAQCAtNTgzNiw2ICs1ODQ2LDcgQEAKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0UmVzdHJpY3Rpb25zUHJvdmlkZXIoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0U2NyZWVuQ2FwdHVyZURpc2FibGVkKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBib29sZWFuKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0U2VjdXJlU2V0dGluZyhhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSwgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZyk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFNob3J0U3VwcG9ydE1lc3NhZ2UoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBzZXRTdGF0dXNCYXJEaXNhYmxlZChhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSwgYm9vbGVhbik7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgc2V0U3RvcmFnZUVuY3J5cHRpb24oYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGJvb2xlYW4pOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRTeXN0ZW1VcGRhdGVQb2xpY3koYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGFuZHJvaWQuYXBwLmFkbWluLlN5c3RlbVVwZGF0ZVBvbGljeSk7CkBAIC03NTYxLDExICs3NTcyLDEyIEBACiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHdyaXRlRGF0YVRvUGlwZShhbmRyb2lkLm9zLlBhcmNlbEZpbGVEZXNjcmlwdG9yLCBhbmRyb2lkLm5ldC5VcmksIGphdmEubGFuZy5TdHJpbmcsIGFuZHJvaWQub3MuQnVuZGxlLCBUKTsKICAgfQogCi0gIHB1YmxpYyBjbGFzcyBDb250ZW50UHJvdmlkZXJDbGllbnQgeworICBwdWJsaWMgY2xhc3MgQ29udGVudFByb3ZpZGVyQ2xpZW50IGltcGxlbWVudHMgamF2YS5sYW5nLkF1dG9DbG9zZWFibGUgewogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRQcm92aWRlclJlc3VsdFtdIGFwcGx5QmF0Y2goamF2YS51dGlsLkFycmF5TGlzdDxhbmRyb2lkLmNvbnRlbnQuQ29udGVudFByb3ZpZGVyT3BlcmF0aW9uPikgdGhyb3dzIGFuZHJvaWQuY29udGVudC5PcGVyYXRpb25BcHBsaWNhdGlvbkV4Y2VwdGlvbiwgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgYnVsa0luc2VydChhbmRyb2lkLm5ldC5VcmksIGFuZHJvaWQuY29udGVudC5Db250ZW50VmFsdWVzW10pIHRocm93cyBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQub3MuQnVuZGxlIGNhbGwoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgYW5kcm9pZC5vcy5CdW5kbGUpIHRocm93cyBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIGFuZHJvaWQubmV0LlVyaSBjYW5vbmljYWxpemUoYW5kcm9pZC5uZXQuVXJpKSB0aHJvd3MgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGNsb3NlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZGVsZXRlKGFuZHJvaWQubmV0LlVyaSwgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZ1tdKSB0aHJvd3MgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFByb3ZpZGVyIGdldExvY2FsQ29udGVudFByb3ZpZGVyKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nW10gZ2V0U3RyZWFtVHlwZXMoYW5kcm9pZC5uZXQuVXJpLCBqYXZhLmxhbmcuU3RyaW5nKSB0aHJvd3MgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CkBAIC03NTc5LDcgKzc1OTEsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgYW5kcm9pZC5jb250ZW50LnJlcy5Bc3NldEZpbGVEZXNjcmlwdG9yIG9wZW5UeXBlZEFzc2V0RmlsZURlc2NyaXB0b3IoYW5kcm9pZC5uZXQuVXJpLCBqYXZhLmxhbmcuU3RyaW5nLCBhbmRyb2lkLm9zLkJ1bmRsZSwgYW5kcm9pZC5vcy5DYW5jZWxsYXRpb25TaWduYWwpIHRocm93cyBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbiwgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmRhdGFiYXNlLkN1cnNvciBxdWVyeShhbmRyb2lkLm5ldC5VcmksIGphdmEubGFuZy5TdHJpbmdbXSwgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZ1tdLCBqYXZhLmxhbmcuU3RyaW5nKSB0aHJvd3MgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmRhdGFiYXNlLkN1cnNvciBxdWVyeShhbmRyb2lkLm5ldC5VcmksIGphdmEubGFuZy5TdHJpbmdbXSwgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZ1tdLCBqYXZhLmxhbmcuU3RyaW5nLCBhbmRyb2lkLm9zLkNhbmNlbGxhdGlvblNpZ25hbCkgdGhyb3dzIGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwotICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiByZWxlYXNlKCk7CisgICAgbWV0aG9kIHB1YmxpYyBkZXByZWNhdGVkIGJvb2xlYW4gcmVsZWFzZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgYW5kcm9pZC5uZXQuVXJpIHVuY2Fub25pY2FsaXplKGFuZHJvaWQubmV0LlVyaSkgdGhyb3dzIGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IHVwZGF0ZShhbmRyb2lkLm5ldC5VcmksIGFuZHJvaWQuY29udGVudC5Db250ZW50VmFsdWVzLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nW10pIHRocm93cyBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKICAgfQpAQCAtODk5Myw2ICs5MDA1LDcgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX0FMV0FZU19SRVRBSU5fVEFTS19TVEFURSA9IDg7IC8vIDB4OAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfQVVUT19SRU1PVkVfRlJPTV9SRUNFTlRTID0gODE5MjsgLy8gMHgyMDAwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19DTEVBUl9UQVNLX09OX0xBVU5DSCA9IDQ7IC8vIDB4NAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfRU5BQkxFX1ZSX01PREUgPSAzMjc2ODsgLy8gMHg4MDAwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19FWENMVURFX0ZST01fUkVDRU5UUyA9IDMyOyAvLyAweDIwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19GSU5JU0hfT05fQ0xPU0VfU1lTVEVNX0RJQUxPR1MgPSAyNTY7IC8vIDB4MTAwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19GSU5JU0hfT05fVEFTS19MQVVOQ0ggPSAyOyAvLyAweDIKQEAgLTk1MDUsNiArOTUxOCw3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEZFQVRVUkVfQ09OTkVDVElPTl9TRVJWSUNFID0gImFuZHJvaWQuc29mdHdhcmUuY29ubmVjdGlvbnNlcnZpY2UiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBGRUFUVVJFX0NPTlNVTUVSX0lSID0gImFuZHJvaWQuaGFyZHdhcmUuY29uc3VtZXJpciI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEZFQVRVUkVfREVWSUNFX0FETUlOID0gImFuZHJvaWQuc29mdHdhcmUuZGV2aWNlX2FkbWluIjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRkVBVFVSRV9FVEhFUk5FVCA9ICJhbmRyb2lkLmhhcmR3YXJlLmV0aGVybmV0IjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRkVBVFVSRV9GQUtFVE9VQ0ggPSAiYW5kcm9pZC5oYXJkd2FyZS5mYWtldG91Y2giOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBGRUFUVVJFX0ZBS0VUT1VDSF9NVUxUSVRPVUNIX0RJU1RJTkNUID0gImFuZHJvaWQuaGFyZHdhcmUuZmFrZXRvdWNoLm11bHRpdG91Y2guZGlzdGluY3QiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBGRUFUVVJFX0ZBS0VUT1VDSF9NVUxUSVRPVUNIX0pBWlpIQU5EID0gImFuZHJvaWQuaGFyZHdhcmUuZmFrZXRvdWNoLm11bHRpdG91Y2guamF6emhhbmQiOwpAQCAtOTU1NiwxNSArOTU3MCwxNSBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBGRUFUVVJFX1VTQl9BQ0NFU1NPUlkgPSAiYW5kcm9pZC5oYXJkd2FyZS51c2IuYWNjZXNzb3J5IjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRkVBVFVSRV9VU0JfSE9TVCA9ICJhbmRyb2lkLmhhcmR3YXJlLnVzYi5ob3N0IjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRkVBVFVSRV9WRVJJRklFRF9CT09UID0gImFuZHJvaWQuc29mdHdhcmUudmVyaWZpZWRfYm9vdCI7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEZFQVRVUkVfVlJfTU9ERSA9ICJhbmRyb2lkLnNvZnR3YXJlLnZyLm1vZGUiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBGRUFUVVJFX1dBVENIID0gImFuZHJvaWQuaGFyZHdhcmUudHlwZS53YXRjaCI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEZFQVRVUkVfV0VCVklFVyA9ICJhbmRyb2lkLnNvZnR3YXJlLndlYnZpZXciOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBGRUFUVVJFX1dJRkkgPSAiYW5kcm9pZC5oYXJkd2FyZS53aWZpIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRkVBVFVSRV9XSUZJX0RJUkVDVCA9ICJhbmRyb2lkLmhhcmR3YXJlLndpZmkuZGlyZWN0IjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHRVRfQUNUSVZJVElFUyA9IDE7IC8vIDB4MQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFVF9DT05GSUdVUkFUSU9OUyA9IDE2Mzg0OyAvLyAweDQwMDAKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHRVRfRElTQUJMRURfQ09NUE9ORU5UUyA9IDUxMjsgLy8gMHgyMDAKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHRVRfRElTQUJMRURfVU5USUxfVVNFRF9DT01QT05FTlRTID0gMzI3Njg7IC8vIDB4ODAwMAotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFVF9FTkNSWVBUSU9OX1VOQVdBUkVfQ09NUE9ORU5UUyA9IDI2MjE0NDsgLy8gMHg0MDAwMAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgZGVwcmVjYXRlZCBpbnQgR0VUX0RJU0FCTEVEX0NPTVBPTkVOVFMgPSA1MTI7IC8vIDB4MjAwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBkZXByZWNhdGVkIGludCBHRVRfRElTQUJMRURfVU5USUxfVVNFRF9DT01QT05FTlRTID0gMzI3Njg7IC8vIDB4ODAwMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFVF9HSURTID0gMjU2OyAvLyAweDEwMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFVF9JTlNUUlVNRU5UQVRJT04gPSAxNjsgLy8gMHgxMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFVF9JTlRFTlRfRklMVEVSUyA9IDMyOyAvLyAweDIwCkBAIC05NTc2LDEwICs5NTkwLDE3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0VUX1NFUlZJQ0VTID0gNDsgLy8gMHg0CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0VUX1NIQVJFRF9MSUJSQVJZX0ZJTEVTID0gMTAyNDsgLy8gMHg0MDAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHRVRfU0lHTkFUVVJFUyA9IDY0OyAvLyAweDQwCi0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0VUX1VOSU5TVEFMTEVEX1BBQ0tBR0VTID0gODE5MjsgLy8gMHgyMDAwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBkZXByZWNhdGVkIGludCBHRVRfVU5JTlNUQUxMRURfUEFDS0FHRVMgPSA4MTkyOyAvLyAweDIwMDAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHRVRfVVJJX1BFUk1JU1NJT05fUEFUVEVSTlMgPSAyMDQ4OyAvLyAweDgwMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BVENIX0FMTCA9IDEzMTA3MjsgLy8gMHgyMDAwMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BVENIX0RFRkFVTFRfT05MWSA9IDY1NTM2OyAvLyAweDEwMDAwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFUQ0hfRElTQUJMRURfQ09NUE9ORU5UUyA9IDUxMjsgLy8gMHgyMDAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVRDSF9ESVNBQkxFRF9VTlRJTF9VU0VEX0NPTVBPTkVOVFMgPSAzMjc2ODsgLy8gMHg4MDAwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFUQ0hfRU5DUllQVElPTl9BV0FSRSA9IDUyNDI4ODsgLy8gMHg4MDAwMAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BVENIX0VOQ1JZUFRJT05fQVdBUkVfQU5EX1VOQVdBUkUgPSA3ODY0MzI7IC8vIDB4YzAwMDAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVRDSF9FTkNSWVBUSU9OX1VOQVdBUkUgPSAyNjIxNDQ7IC8vIDB4NDAwMDAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVRDSF9TWVNURU1fT05MWSA9IDEwNDg1NzY7IC8vIDB4MTAwMDAwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFUQ0hfVU5JTlNUQUxMRURfUEFDS0FHRVMgPSA4MTkyOyAvLyAweDIwMDAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGxvbmcgTUFYSU1VTV9WRVJJRklDQVRJT05fVElNRU9VVCA9IDM2MDAwMDBMOyAvLyAweDM2ZWU4MEwKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQRVJNSVNTSU9OX0RFTklFRCA9IC0xOyAvLyAweGZmZmZmZmZmCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUEVSTUlTU0lPTl9HUkFOVEVEID0gMDsgLy8gMHgwCkBAIC0xMDgyOSw3ICsxMDg1MCw3IEBACiAgICAgZmllbGQgcHVibGljIGZpbmFsIGludCBzdGF0dXNDb2RlOwogICB9CiAKLSAgcHVibGljIGNsYXNzIERybU1hbmFnZXJDbGllbnQgeworICBwdWJsaWMgY2xhc3MgRHJtTWFuYWdlckNsaWVudCBpbXBsZW1lbnRzIGphdmEubGFuZy5BdXRvQ2xvc2VhYmxlIHsKICAgICBjdG9yIHB1YmxpYyBEcm1NYW5hZ2VyQ2xpZW50KGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuZHJtLkRybUluZm8gYWNxdWlyZURybUluZm8oYW5kcm9pZC5kcm0uRHJtSW5mb1JlcXVlc3QpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGFjcXVpcmVSaWdodHMoYW5kcm9pZC5kcm0uRHJtSW5mb1JlcXVlc3QpOwpAQCAtMTA4MzksNiArMTA4NjAsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgaW50IGNoZWNrUmlnaHRzU3RhdHVzKGFuZHJvaWQubmV0LlVyaSk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgY2hlY2tSaWdodHNTdGF0dXMoamF2YS5sYW5nLlN0cmluZywgaW50KTsKICAgICBtZXRob2QgcHVibGljIGludCBjaGVja1JpZ2h0c1N0YXR1cyhhbmRyb2lkLm5ldC5VcmksIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGNsb3NlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmRybS5Ecm1Db252ZXJ0ZWRTdGF0dXMgY2xvc2VDb252ZXJ0U2Vzc2lvbihpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5kcm0uRHJtQ29udmVydGVkU3RhdHVzIGNvbnZlcnREYXRhKGludCwgYnl0ZVtdKTsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmdbXSBnZXRBdmFpbGFibGVEcm1FbmdpbmVzKCk7CkBAIC0xMDg1Miw3ICsxMDg3NCw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldE9yaWdpbmFsTWltZVR5cGUoYW5kcm9pZC5uZXQuVXJpKTsKICAgICBtZXRob2QgcHVibGljIGludCBvcGVuQ29udmVydFNlc3Npb24oamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgcHJvY2Vzc0RybUluZm8oYW5kcm9pZC5kcm0uRHJtSW5mbyk7Ci0gICAgbWV0aG9kIHB1YmxpYyB2b2lkIHJlbGVhc2UoKTsKKyAgICBtZXRob2QgcHVibGljIGRlcHJlY2F0ZWQgdm9pZCByZWxlYXNlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgcmVtb3ZlQWxsUmlnaHRzKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgcmVtb3ZlUmlnaHRzKGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IHJlbW92ZVJpZ2h0cyhhbmRyb2lkLm5ldC5VcmkpOwpAQCAtMTEyNTYsMTQgKzExMjc4LDE0IEBACiAKICAgcHVibGljIHN0YXRpYyBjbGFzcyBCaXRtYXBGYWN0b3J5Lk9wdGlvbnMgewogICAgIGN0b3IgcHVibGljIEJpdG1hcEZhY3RvcnkuT3B0aW9ucygpOwotICAgIG1ldGhvZCBwdWJsaWMgdm9pZCByZXF1ZXN0Q2FuY2VsRGVjb2RlKCk7CisgICAgbWV0aG9kIHB1YmxpYyBkZXByZWNhdGVkIHZvaWQgcmVxdWVzdENhbmNlbERlY29kZSgpOwogICAgIGZpZWxkIHB1YmxpYyBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcCBpbkJpdG1hcDsKICAgICBmaWVsZCBwdWJsaWMgaW50IGluRGVuc2l0eTsKLSAgICBmaWVsZCBwdWJsaWMgYm9vbGVhbiBpbkRpdGhlcjsKKyAgICBmaWVsZCBwdWJsaWMgZGVwcmVjYXRlZCBib29sZWFuIGluRGl0aGVyOwogICAgIGZpZWxkIHB1YmxpYyBkZXByZWNhdGVkIGJvb2xlYW4gaW5JbnB1dFNoYXJlYWJsZTsKICAgICBmaWVsZCBwdWJsaWMgYm9vbGVhbiBpbkp1c3REZWNvZGVCb3VuZHM7CiAgICAgZmllbGQgcHVibGljIGJvb2xlYW4gaW5NdXRhYmxlOwotICAgIGZpZWxkIHB1YmxpYyBib29sZWFuIGluUHJlZmVyUXVhbGl0eU92ZXJTcGVlZDsKKyAgICBmaWVsZCBwdWJsaWMgZGVwcmVjYXRlZCBib29sZWFuIGluUHJlZmVyUXVhbGl0eU92ZXJTcGVlZDsKICAgICBmaWVsZCBwdWJsaWMgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXAuQ29uZmlnIGluUHJlZmVycmVkQ29uZmlnOwogICAgIGZpZWxkIHB1YmxpYyBib29sZWFuIGluUHJlbXVsdGlwbGllZDsKICAgICBmaWVsZCBwdWJsaWMgZGVwcmVjYXRlZCBib29sZWFuIGluUHVyZ2VhYmxlOwpAQCAtMTgyMzIsNyArMTgyNTQsNiBAQAogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGphdmEubGFuZy5TdHJpbmcgZ2V0Q2Fub25pY2FsSUQoamF2YS5sYW5nLlN0cmluZywgYm9vbGVhbltdKTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXREU1RTYXZpbmdzKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC5pY3UudXRpbC5UaW1lWm9uZSBnZXREZWZhdWx0KCk7Ci0gICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgaW50IGdldERlZmF1bHRUaW1lWm9uZVR5cGUoKTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgZ2V0RGlzcGxheU5hbWUoKTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgZ2V0RGlzcGxheU5hbWUoamF2YS51dGlsLkxvY2FsZSk7CiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIGdldERpc3BsYXlOYW1lKGFuZHJvaWQuaWN1LnV0aWwuVUxvY2FsZSk7CkBAIC0xODI1Niw4ICsxODI3Nyw2IEBACiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGluRGF5bGlnaHRUaW1lKGphdmEudXRpbC5EYXRlKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNGcm96ZW4oKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gb2JzZXJ2ZXNEYXlsaWdodFRpbWUoKTsKLSAgICBtZXRob2QgcHVibGljIHN0YXRpYyBzeW5jaHJvbml6ZWQgdm9pZCBzZXREZWZhdWx0KGFuZHJvaWQuaWN1LnV0aWwuVGltZVpvbmUpOwotICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHN5bmNocm9uaXplZCB2b2lkIHNldERlZmF1bHRUaW1lWm9uZVR5cGUoaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0SUQoamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldFJhd09mZnNldChpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiB1c2VEYXlsaWdodFRpbWUoKTsKQEAgLTE4MjcwLDggKzE4Mjg5LDYgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTSE9SVF9DT01NT05MWV9VU0VEID0gNjsgLy8gMHg2CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0hPUlRfR0VORVJJQyA9IDI7IC8vIDB4MgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNIT1JUX0dNVCA9IDQ7IC8vIDB4NAotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRJTUVaT05FX0lDVSA9IDA7IC8vIDB4MAotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRJTUVaT05FX0pESyA9IDE7IC8vIDB4MQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5pY3UudXRpbC5UaW1lWm9uZSBVTktOT1dOX1pPTkU7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIFVOS05PV05fWk9ORV9JRCA9ICJFdGMvVW5rbm93biI7CiAgIH0KQEAgLTE4MzY3LDggKzE4Mzg0LDYgQEAKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBqYXZhLmxhbmcuU3RyaW5nIGdldFZhcmlhbnQoamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzUmlnaHRUb0xlZnQoKTsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLmljdS51dGlsLlVMb2NhbGUgbWluaW1pemVTdWJ0YWdzKGFuZHJvaWQuaWN1LnV0aWwuVUxvY2FsZSk7Ci0gICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIHZvaWQgc2V0RGVmYXVsdChhbmRyb2lkLmljdS51dGlsLlVMb2NhbGUpOwotICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHN5bmNocm9uaXplZCB2b2lkIHNldERlZmF1bHQoYW5kcm9pZC5pY3UudXRpbC5VTG9jYWxlLkNhdGVnb3J5LCBhbmRyb2lkLmljdS51dGlsLlVMb2NhbGUpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5pY3UudXRpbC5VTG9jYWxlIHNldEtleXdvcmRWYWx1ZShqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKTsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBqYXZhLmxhbmcuU3RyaW5nIHNldEtleXdvcmRWYWx1ZShqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKTsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgdG9MYW5ndWFnZVRhZygpOwpAQCAtMjY4NDksNiArMjY4NjQsMjc5IEBACiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIG9uTWVzc2FnZShpbnQsIGludCwgaW50LCBpbnQsIGphdmEubGFuZy5TdHJpbmcpOwogICB9CiAKKyAgcHVibGljIGNsYXNzIEdMRVMzMiBleHRlbmRzIGFuZHJvaWQub3BlbmdsLkdMRVMzMSB7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbEJsZW5kQmFycmllcigpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xCbGVuZEVxdWF0aW9uU2VwYXJhdGVpKGludCwgaW50LCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xCbGVuZEVxdWF0aW9uaShpbnQsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbEJsZW5kRnVuY1NlcGFyYXRlaShpbnQsIGludCwgaW50LCBpbnQsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbEJsZW5kRnVuY2koaW50LCBpbnQsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbENvbG9yTWFza2koaW50LCBib29sZWFuLCBib29sZWFuLCBib29sZWFuLCBib29sZWFuKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsQ29weUltYWdlU3ViRGF0YShpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsRGVidWdNZXNzYWdlQ2FsbGJhY2soYW5kcm9pZC5vcGVuZ2wuR0xFUzMyLkRlYnVnUHJvYyk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbERlYnVnTWVzc2FnZUNvbnRyb2woaW50LCBpbnQsIGludCwgaW50LCBpbnRbXSwgaW50LCBib29sZWFuKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsRGVidWdNZXNzYWdlQ29udHJvbChpbnQsIGludCwgaW50LCBpbnQsIGphdmEubmlvLkludEJ1ZmZlciwgYm9vbGVhbik7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbERlYnVnTWVzc2FnZUluc2VydChpbnQsIGludCwgaW50LCBpbnQsIGludCwgamF2YS5sYW5nLlN0cmluZyk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbERpc2FibGVpKGludCwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsRHJhd0VsZW1lbnRzQmFzZVZlcnRleChpbnQsIGludCwgaW50LCBqYXZhLm5pby5CdWZmZXIsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbERyYXdFbGVtZW50c0luc3RhbmNlZEJhc2VWZXJ0ZXgoaW50LCBpbnQsIGludCwgamF2YS5uaW8uQnVmZmVyLCBpbnQsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbERyYXdFbGVtZW50c0luc3RhbmNlZEJhc2VWZXJ0ZXgoaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbERyYXdSYW5nZUVsZW1lbnRzQmFzZVZlcnRleChpbnQsIGludCwgaW50LCBpbnQsIGludCwgamF2YS5uaW8uQnVmZmVyLCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xFbmFibGVpKGludCwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsRnJhbWVidWZmZXJUZXh0dXJlKGludCwgaW50LCBpbnQsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgaW50IGdsR2V0RGVidWdNZXNzYWdlTG9nKGludCwgaW50LCBpbnRbXSwgaW50LCBpbnRbXSwgaW50LCBpbnRbXSwgaW50LCBpbnRbXSwgaW50LCBpbnRbXSwgaW50LCBieXRlW10sIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgaW50IGdsR2V0RGVidWdNZXNzYWdlTG9nKGludCwgamF2YS5uaW8uSW50QnVmZmVyLCBqYXZhLm5pby5JbnRCdWZmZXIsIGphdmEubmlvLkludEJ1ZmZlciwgamF2YS5uaW8uSW50QnVmZmVyLCBqYXZhLm5pby5JbnRCdWZmZXIsIGphdmEubmlvLkJ5dGVCdWZmZXIpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGphdmEubGFuZy5TdHJpbmdbXSBnbEdldERlYnVnTWVzc2FnZUxvZyhpbnQsIGludFtdLCBpbnQsIGludFtdLCBpbnQsIGludFtdLCBpbnQsIGludFtdLCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGphdmEubGFuZy5TdHJpbmdbXSBnbEdldERlYnVnTWVzc2FnZUxvZyhpbnQsIGphdmEubmlvLkludEJ1ZmZlciwgamF2YS5uaW8uSW50QnVmZmVyLCBqYXZhLm5pby5JbnRCdWZmZXIsIGphdmEubmlvLkludEJ1ZmZlcik7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgaW50IGdsR2V0R3JhcGhpY3NSZXNldFN0YXR1cygpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGphdmEubGFuZy5TdHJpbmcgZ2xHZXRPYmplY3RMYWJlbChpbnQsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgamF2YS5sYW5nLlN0cmluZyBnbEdldE9iamVjdFB0ckxhYmVsKGxvbmcpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGxvbmcgZ2xHZXRQb2ludGVydihpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xHZXRTYW1wbGVyUGFyYW1ldGVySWl2KGludCwgaW50LCBpbnRbXSwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsR2V0U2FtcGxlclBhcmFtZXRlcklpdihpbnQsIGludCwgamF2YS5uaW8uSW50QnVmZmVyKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsR2V0U2FtcGxlclBhcmFtZXRlckl1aXYoaW50LCBpbnQsIGludFtdLCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xHZXRTYW1wbGVyUGFyYW1ldGVySXVpdihpbnQsIGludCwgamF2YS5uaW8uSW50QnVmZmVyKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsR2V0VGV4UGFyYW1ldGVySWl2KGludCwgaW50LCBpbnRbXSwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsR2V0VGV4UGFyYW1ldGVySWl2KGludCwgaW50LCBqYXZhLm5pby5JbnRCdWZmZXIpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xHZXRUZXhQYXJhbWV0ZXJJdWl2KGludCwgaW50LCBpbnRbXSwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsR2V0VGV4UGFyYW1ldGVySXVpdihpbnQsIGludCwgamF2YS5uaW8uSW50QnVmZmVyKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsR2V0blVuaWZvcm1mdihpbnQsIGludCwgaW50LCBmbG9hdFtdLCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xHZXRuVW5pZm9ybWZ2KGludCwgaW50LCBpbnQsIGphdmEubmlvLkZsb2F0QnVmZmVyKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsR2V0blVuaWZvcm1pdihpbnQsIGludCwgaW50LCBpbnRbXSwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsR2V0blVuaWZvcm1pdihpbnQsIGludCwgaW50LCBqYXZhLm5pby5JbnRCdWZmZXIpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xHZXRuVW5pZm9ybXVpdihpbnQsIGludCwgaW50LCBpbnRbXSwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsR2V0blVuaWZvcm11aXYoaW50LCBpbnQsIGludCwgamF2YS5uaW8uSW50QnVmZmVyKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBib29sZWFuIGdsSXNFbmFibGVkaShpbnQsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbE1pblNhbXBsZVNoYWRpbmcoZmxvYXQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xPYmplY3RMYWJlbChpbnQsIGludCwgaW50LCBqYXZhLmxhbmcuU3RyaW5nKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsT2JqZWN0UHRyTGFiZWwobG9uZywgamF2YS5sYW5nLlN0cmluZyk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbFBhdGNoUGFyYW1ldGVyaShpbnQsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbFBvcERlYnVnR3JvdXAoKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsUHJpbWl0aXZlQm91bmRpbmdCb3goZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsUHVzaERlYnVnR3JvdXAoaW50LCBpbnQsIGludCwgamF2YS5sYW5nLlN0cmluZyk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbFJlYWRuUGl4ZWxzKGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgamF2YS5uaW8uQnVmZmVyKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsU2FtcGxlclBhcmFtZXRlcklpdihpbnQsIGludCwgaW50W10sIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbFNhbXBsZXJQYXJhbWV0ZXJJaXYoaW50LCBpbnQsIGphdmEubmlvLkludEJ1ZmZlcik7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbFNhbXBsZXJQYXJhbWV0ZXJJdWl2KGludCwgaW50LCBpbnRbXSwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsU2FtcGxlclBhcmFtZXRlckl1aXYoaW50LCBpbnQsIGphdmEubmlvLkludEJ1ZmZlcik7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbFRleEJ1ZmZlcihpbnQsIGludCwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsVGV4QnVmZmVyUmFuZ2UoaW50LCBpbnQsIGludCwgaW50LCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xUZXhQYXJhbWV0ZXJJaXYoaW50LCBpbnQsIGludFtdLCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xUZXhQYXJhbWV0ZXJJaXYoaW50LCBpbnQsIGphdmEubmlvLkludEJ1ZmZlcik7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbFRleFBhcmFtZXRlckl1aXYoaW50LCBpbnQsIGludFtdLCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xUZXhQYXJhbWV0ZXJJdWl2KGludCwgaW50LCBqYXZhLm5pby5JbnRCdWZmZXIpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xUZXhTdG9yYWdlM0RNdWx0aXNhbXBsZShpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBib29sZWFuKTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9CVUZGRVIgPSAzMzUwNDsgLy8gMHg4MmUwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ0xBTVBfVE9fQk9SREVSID0gMzMwNjk7IC8vIDB4ODEyZAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTE9SQlVSTiA9IDM3NTMwOyAvLyAweDkyOWEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT0xPUkRPREdFID0gMzc1Mjk7IC8vIDB4OTI5OQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzEweDEwID0gMzc4MTk7IC8vIDB4OTNiYgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzEweDUgPSAzNzgxNjsgLy8gMHg5M2I4CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4NiA9IDM3ODE3OyAvLyAweDkzYjkKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg4ID0gMzc4MTg7IC8vIDB4OTNiYQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEwID0gMzc4MjA7IC8vIDB4OTNiYworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEyID0gMzc4MjE7IC8vIDB4OTNiZAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzR4NCA9IDM3ODA4OyAvLyAweDkzYjAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT01QUkVTU0VEX1JHQkFfQVNUQ181eDQgPSAzNzgwOTsgLy8gMHg5M2IxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfNXg1ID0gMzc4MTA7IC8vIDB4OTNiMgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzZ4NSA9IDM3ODExOyAvLyAweDkzYjMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT01QUkVTU0VEX1JHQkFfQVNUQ182eDYgPSAzNzgxMjsgLy8gMHg5M2I0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg1ID0gMzc4MTM7IC8vIDB4OTNiNQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzh4NiA9IDM3ODE0OyAvLyAweDkzYjYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT01QUkVTU0VEX1JHQkFfQVNUQ184eDggPSAzNzgxNTsgLy8gMHg5M2I3CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHgxMCA9IDM3ODUxOyAvLyAweDkzZGIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDUgPSAzNzg0ODsgLy8gMHg5M2Q4CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg2ID0gMzc4NDk7IC8vIDB4OTNkOQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4OCA9IDM3ODUwOyAvLyAweDkzZGEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEwID0gMzc4NTI7IC8vIDB4OTNkYworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTIgPSAzNzg1MzsgLy8gMHg5M2RkCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ180eDQgPSAzNzg0MDsgLy8gMHg5M2QwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ181eDQgPSAzNzg0MTsgLy8gMHg5M2QxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ181eDUgPSAzNzg0MjsgLy8gMHg5M2QyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDUgPSAzNzg0MzsgLy8gMHg5M2QzCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDYgPSAzNzg0NDsgLy8gMHg5M2Q0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDUgPSAzNzg0NTsgLy8gMHg5M2Q1CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDYgPSAzNzg0NjsgLy8gMHg5M2Q2CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDggPSAzNzg0NzsgLy8gMHg5M2Q3CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09OVEVYVF9GTEFHUyA9IDMzMzEwOyAvLyAweDgyMWUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT05URVhUX0ZMQUdfREVCVUdfQklUID0gMjsgLy8gMHgyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09OVEVYVF9GTEFHX1JPQlVTVF9BQ0NFU1NfQklUID0gNDsgLy8gMHg0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09OVEVYVF9MT1NUID0gMTI4NzsgLy8gMHg1MDcKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9EQVJLRU4gPSAzNzUyNzsgLy8gMHg5Mjk3CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfQ0FMTEJBQ0tfRlVOQ1RJT04gPSAzMzM0ODsgLy8gMHg4MjQ0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfQ0FMTEJBQ0tfVVNFUl9QQVJBTSA9IDMzMzQ5OyAvLyAweDgyNDUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19HUk9VUF9TVEFDS19ERVBUSCA9IDMzMzg5OyAvLyAweDgyNmQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19MT0dHRURfTUVTU0FHRVMgPSAzNzE4OTsgLy8gMHg5MTQ1CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfTkVYVF9MT0dHRURfTUVTU0FHRV9MRU5HVEggPSAzMzM0NzsgLy8gMHg4MjQzCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfT1VUUFVUID0gMzc2MDA7IC8vIDB4OTJlMAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX09VVFBVVF9TWU5DSFJPTk9VUyA9IDMzMzQ2OyAvLyAweDgyNDIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19TRVZFUklUWV9ISUdIID0gMzcxOTA7IC8vIDB4OTE0NgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1NFVkVSSVRZX0xPVyA9IDM3MTkyOyAvLyAweDkxNDgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19TRVZFUklUWV9NRURJVU0gPSAzNzE5MTsgLy8gMHg5MTQ3CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfU0VWRVJJVFlfTk9USUZJQ0FUSU9OID0gMzMzODc7IC8vIDB4ODI2YgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1NPVVJDRV9BUEkgPSAzMzM1MDsgLy8gMHg4MjQ2CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfU09VUkNFX0FQUExJQ0FUSU9OID0gMzMzNTQ7IC8vIDB4ODI0YQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1NPVVJDRV9PVEhFUiA9IDMzMzU1OyAvLyAweDgyNGIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19TT1VSQ0VfU0hBREVSX0NPTVBJTEVSID0gMzMzNTI7IC8vIDB4ODI0OAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1NPVVJDRV9USElSRF9QQVJUWSA9IDMzMzUzOyAvLyAweDgyNDkKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19TT1VSQ0VfV0lORE9XX1NZU1RFTSA9IDMzMzUxOyAvLyAweDgyNDcKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19UWVBFX0RFUFJFQ0FURURfQkVIQVZJT1IgPSAzMzM1NzsgLy8gMHg4MjRkCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfVFlQRV9FUlJPUiA9IDMzMzU2OyAvLyAweDgyNGMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19UWVBFX01BUktFUiA9IDMzMzg0OyAvLyAweDgyNjgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19UWVBFX09USEVSID0gMzMzNjE7IC8vIDB4ODI1MQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1RZUEVfUEVSRk9STUFOQ0UgPSAzMzM2MDsgLy8gMHg4MjUwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfVFlQRV9QT1BfR1JPVVAgPSAzMzM4NjsgLy8gMHg4MjZhCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfVFlQRV9QT1JUQUJJTElUWSA9IDMzMzU5OyAvLyAweDgyNGYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19UWVBFX1BVU0hfR1JPVVAgPSAzMzM4NTsgLy8gMHg4MjY5CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfVFlQRV9VTkRFRklORURfQkVIQVZJT1IgPSAzMzM1ODsgLy8gMHg4MjRlCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfRElGRkVSRU5DRSA9IDM3NTM0OyAvLyAweDkyOWUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9FWENMVVNJT04gPSAzNzUzNjsgLy8gMHg5MmEwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfRklSU1RfVkVSVEVYX0NPTlZFTlRJT04gPSAzNjQyOTsgLy8gMHg4ZTRkCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfRlJBQ1RJT05BTF9FVkVOID0gMzY0NzY7IC8vIDB4OGU3YworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0ZSQUNUSU9OQUxfT0REID0gMzY0NzU7IC8vIDB4OGU3YgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0ZSQUdNRU5UX0lOVEVSUE9MQVRJT05fT0ZGU0VUX0JJVFMgPSAzNjQ0NTsgLy8gMHg4ZTVkCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9MQVlFUkVEID0gMzYyNjM7IC8vIDB4OGRhNworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0ZSQU1FQlVGRkVSX0RFRkFVTFRfTEFZRVJTID0gMzc2NTA7IC8vIDB4OTMxMgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTEFZRVJfVEFSR0VUUyA9IDM2MjY0OyAvLyAweDhkYTgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9HRU9NRVRSWV9JTlBVVF9UWVBFID0gMzUwOTU7IC8vIDB4ODkxNworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0dFT01FVFJZX09VVFBVVF9UWVBFID0gMzUwOTY7IC8vIDB4ODkxOAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0dFT01FVFJZX1NIQURFUiA9IDM2MzEzOyAvLyAweDhkZDkKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9HRU9NRVRSWV9TSEFERVJfQklUID0gNDsgLy8gMHg0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfR0VPTUVUUllfU0hBREVSX0lOVk9DQVRJT05TID0gMzQ5NDM7IC8vIDB4ODg3ZgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0dFT01FVFJZX1ZFUlRJQ0VTX09VVCA9IDM1MDk0OyAvLyAweDg5MTYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9HVUlMVFlfQ09OVEVYVF9SRVNFVCA9IDMzMzYzOyAvLyAweDgyNTMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9IQVJETElHSFQgPSAzNzUzMTsgLy8gMHg5MjliCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfSFNMX0NPTE9SID0gMzc1NTE7IC8vIDB4OTJhZgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0hTTF9IVUUgPSAzNzU0OTsgLy8gMHg5MmFkCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfSFNMX0xVTUlOT1NJVFkgPSAzNzU1MjsgLy8gMHg5MmIwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfSFNMX1NBVFVSQVRJT04gPSAzNzU1MDsgLy8gMHg5MmFlCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfSU1BR0VfQlVGRkVSID0gMzY5NDU7IC8vIDB4OTA1MQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0lNQUdFX0NVQkVfTUFQX0FSUkFZID0gMzY5NDg7IC8vIDB4OTA1NAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0lOTk9DRU5UX0NPTlRFWFRfUkVTRVQgPSAzMzM2NDsgLy8gMHg4MjU0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfSU5UX0lNQUdFX0JVRkZFUiA9IDM2OTU2OyAvLyAweDkwNWMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9JTlRfSU1BR0VfQ1VCRV9NQVBfQVJSQVkgPSAzNjk1OTsgLy8gMHg5MDVmCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfSU5UX1NBTVBMRVJfMkRfTVVMVElTQU1QTEVfQVJSQVkgPSAzNzEzMjsgLy8gMHg5MTBjCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfSU5UX1NBTVBMRVJfQlVGRkVSID0gMzYzMDQ7IC8vIDB4OGRkMAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0lOVF9TQU1QTEVSX0NVQkVfTUFQX0FSUkFZID0gMzY4Nzg7IC8vIDB4OTAwZQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0lTT0xJTkVTID0gMzY0NzQ7IC8vIDB4OGU3YQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0lTX1BFUl9QQVRDSCA9IDM3NjA3OyAvLyAweDkyZTcKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9MQVNUX1ZFUlRFWF9DT05WRU5USU9OID0gMzY0MzA7IC8vIDB4OGU0ZQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0xBWUVSX1BST1ZPS0lOR19WRVJURVggPSAzMzM3NDsgLy8gMHg4MjVlCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTElHSFRFTiA9IDM3NTI4OyAvLyAweDkyOTgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9MSU5FU19BREpBQ0VOQ1kgPSAxMDsgLy8gMHhhCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTElORV9TVFJJUF9BREpBQ0VOQ1kgPSAxMTsgLy8gMHhiCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTE9TRV9DT05URVhUX09OX1JFU0VUID0gMzMzNjI7IC8vIDB4ODI1MgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9DT01CSU5FRF9HRU9NRVRSWV9VTklGT1JNX0NPTVBPTkVOVFMgPSAzNTM3ODsgLy8gMHg4YTMyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX0NPTUJJTkVEX1RFU1NfQ09OVFJPTF9VTklGT1JNX0NPTVBPTkVOVFMgPSAzNjM4MjsgLy8gMHg4ZTFlCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX0NPTUJJTkVEX1RFU1NfRVZBTFVBVElPTl9VTklGT1JNX0NPTVBPTkVOVFMgPSAzNjM4MzsgLy8gMHg4ZTFmCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX0RFQlVHX0dST1VQX1NUQUNLX0RFUFRIID0gMzMzODg7IC8vIDB4ODI2YworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9ERUJVR19MT0dHRURfTUVTU0FHRVMgPSAzNzE4ODsgLy8gMHg5MTQ0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX0RFQlVHX01FU1NBR0VfTEVOR1RIID0gMzcxODc7IC8vIDB4OTE0MworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9GUkFHTUVOVF9JTlRFUlBPTEFUSU9OX09GRlNFVCA9IDM2NDQ0OyAvLyAweDhlNWMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfRlJBTUVCVUZGRVJfTEFZRVJTID0gMzc2NTU7IC8vIDB4OTMxNworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9HRU9NRVRSWV9BVE9NSUNfQ09VTlRFUlMgPSAzNzU4OTsgLy8gMHg5MmQ1CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX0dFT01FVFJZX0FUT01JQ19DT1VOVEVSX0JVRkZFUlMgPSAzNzU4MzsgLy8gMHg5MmNmCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX0dFT01FVFJZX0lNQUdFX1VOSUZPUk1TID0gMzcwNjk7IC8vIDB4OTBjZAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9HRU9NRVRSWV9JTlBVVF9DT01QT05FTlRTID0gMzcxNTU7IC8vIDB4OTEyMworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9HRU9NRVRSWV9PVVRQVVRfQ09NUE9ORU5UUyA9IDM3MTU2OyAvLyAweDkxMjQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfR0VPTUVUUllfT1VUUFVUX1ZFUlRJQ0VTID0gMzYzMjA7IC8vIDB4OGRlMAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9HRU9NRVRSWV9TSEFERVJfSU5WT0NBVElPTlMgPSAzNjQ0MjsgLy8gMHg4ZTVhCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX0dFT01FVFJZX1NIQURFUl9TVE9SQUdFX0JMT0NLUyA9IDM3MDc5OyAvLyAweDkwZDcKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfR0VPTUVUUllfVEVYVFVSRV9JTUFHRV9VTklUUyA9IDM1ODgxOyAvLyAweDhjMjkKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfR0VPTUVUUllfVE9UQUxfT1VUUFVUX0NPTVBPTkVOVFMgPSAzNjMyMTsgLy8gMHg4ZGUxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX0dFT01FVFJZX1VOSUZPUk1fQkxPQ0tTID0gMzUzNzI7IC8vIDB4OGEyYworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9HRU9NRVRSWV9VTklGT1JNX0NPTVBPTkVOVFMgPSAzNjMxOTsgLy8gMHg4ZGRmCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX0xBQkVMX0xFTkdUSCA9IDMzNTEyOyAvLyAweDgyZTgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfUEFUQ0hfVkVSVElDRVMgPSAzNjQ3NzsgLy8gMHg4ZTdkCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1RFU1NfQ09OVFJPTF9BVE9NSUNfQ09VTlRFUlMgPSAzNzU4NzsgLy8gMHg5MmQzCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1RFU1NfQ09OVFJPTF9BVE9NSUNfQ09VTlRFUl9CVUZGRVJTID0gMzc1ODE7IC8vIDB4OTJjZAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0NPTlRST0xfSU1BR0VfVU5JRk9STVMgPSAzNzA2NzsgLy8gMHg5MGNiCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1RFU1NfQ09OVFJPTF9JTlBVVF9DT01QT05FTlRTID0gMzQ5MjQ7IC8vIDB4ODg2YworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0NPTlRST0xfT1VUUFVUX0NPTVBPTkVOVFMgPSAzNjQ4MzsgLy8gMHg4ZTgzCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1RFU1NfQ09OVFJPTF9TSEFERVJfU1RPUkFHRV9CTE9DS1MgPSAzNzA4MDsgLy8gMHg5MGQ4CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1RFU1NfQ09OVFJPTF9URVhUVVJFX0lNQUdFX1VOSVRTID0gMzY0ODE7IC8vIDB4OGU4MQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0NPTlRST0xfVE9UQUxfT1VUUFVUX0NPTVBPTkVOVFMgPSAzNjQ4NTsgLy8gMHg4ZTg1CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1RFU1NfQ09OVFJPTF9VTklGT1JNX0JMT0NLUyA9IDM2NDg5OyAvLyAweDhlODkKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfVEVTU19DT05UUk9MX1VOSUZPUk1fQ09NUE9ORU5UUyA9IDM2NDc5OyAvLyAweDhlN2YKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfVEVTU19FVkFMVUFUSU9OX0FUT01JQ19DT1VOVEVSUyA9IDM3NTg4OyAvLyAweDkyZDQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfVEVTU19FVkFMVUFUSU9OX0FUT01JQ19DT1VOVEVSX0JVRkZFUlMgPSAzNzU4MjsgLy8gMHg5MmNlCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1RFU1NfRVZBTFVBVElPTl9JTUFHRV9VTklGT1JNUyA9IDM3MDY4OyAvLyAweDkwY2MKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfVEVTU19FVkFMVUFUSU9OX0lOUFVUX0NPTVBPTkVOVFMgPSAzNDkyNTsgLy8gMHg4ODZkCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1RFU1NfRVZBTFVBVElPTl9PVVRQVVRfQ09NUE9ORU5UUyA9IDM2NDg2OyAvLyAweDhlODYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfVEVTU19FVkFMVUFUSU9OX1NIQURFUl9TVE9SQUdFX0JMT0NLUyA9IDM3MDgxOyAvLyAweDkwZDkKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfVEVTU19FVkFMVUFUSU9OX1RFWFRVUkVfSU1BR0VfVU5JVFMgPSAzNjQ4MjsgLy8gMHg4ZTgyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1RFU1NfRVZBTFVBVElPTl9VTklGT1JNX0JMT0NLUyA9IDM2NDkwOyAvLyAweDhlOGEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfVEVTU19FVkFMVUFUSU9OX1VOSUZPUk1fQ09NUE9ORU5UUyA9IDM2NDgwOyAvLyAweDhlODAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfVEVTU19HRU5fTEVWRUwgPSAzNjQ3ODsgLy8gMHg4ZTdlCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1RFU1NfUEFUQ0hfQ09NUE9ORU5UUyA9IDM2NDg0OyAvLyAweDhlODQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfVEVYVFVSRV9CVUZGRVJfU0laRSA9IDM1ODgzOyAvLyAweDhjMmIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NSU5fRlJBR01FTlRfSU5URVJQT0xBVElPTl9PRkZTRVQgPSAzNjQ0MzsgLy8gMHg4ZTViCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUlOX1NBTVBMRV9TSEFESU5HX1ZBTFVFID0gMzU4OTU7IC8vIDB4OGMzNworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01VTFRJUExZID0gMzc1MjQ7IC8vIDB4OTI5NAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01VTFRJU0FNUExFX0xJTkVfV0lEVEhfR1JBTlVMQVJJVFkgPSAzNzc2MjsgLy8gMHg5MzgyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTVVMVElTQU1QTEVfTElORV9XSURUSF9SQU5HRSA9IDM3NzYxOyAvLyAweDkzODEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9OT19SRVNFVF9OT1RJRklDQVRJT04gPSAzMzM3NzsgLy8gMHg4MjYxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfT1ZFUkxBWSA9IDM3NTI2OyAvLyAweDkyOTYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9QQVRDSEVTID0gMTQ7IC8vIDB4ZQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1BBVENIX1ZFUlRJQ0VTID0gMzY0NjY7IC8vIDB4OGU3MgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1BSSU1JVElWRVNfR0VORVJBVEVEID0gMzU5NzU7IC8vIDB4OGM4NworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1BSSU1JVElWRV9CT1VORElOR19CT1ggPSAzNzU2NjsgLy8gMHg5MmJlCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfUFJJTUlUSVZFX1JFU1RBUlRfRk9SX1BBVENIRVNfU1VQUE9SVEVEID0gMzMzMTM7IC8vIDB4ODIyMQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1BST0dSQU0gPSAzMzUwNjsgLy8gMHg4MmUyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfUFJPR1JBTV9QSVBFTElORSA9IDMzNTA4OyAvLyAweDgyZTQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9RVUFEUyA9IDc7IC8vIDB4NworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1FVRVJZID0gMzM1MDc7IC8vIDB4ODJlMworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1JFRkVSRU5DRURfQllfR0VPTUVUUllfU0hBREVSID0gMzc2NDE7IC8vIDB4OTMwOQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1JFRkVSRU5DRURfQllfVEVTU19DT05UUk9MX1NIQURFUiA9IDM3NjM5OyAvLyAweDkzMDcKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9SRUZFUkVOQ0VEX0JZX1RFU1NfRVZBTFVBVElPTl9TSEFERVIgPSAzNzY0MDsgLy8gMHg5MzA4CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfUkVTRVRfTk9USUZJQ0FUSU9OX1NUUkFURUdZID0gMzMzNjY7IC8vIDB4ODI1NgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1NBTVBMRVIgPSAzMzUxMDsgLy8gMHg4MmU2CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfU0FNUExFUl8yRF9NVUxUSVNBTVBMRV9BUlJBWSA9IDM3MTMxOyAvLyAweDkxMGIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9TQU1QTEVSX0JVRkZFUiA9IDM2MjkwOyAvLyAweDhkYzIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9TQU1QTEVSX0NVQkVfTUFQX0FSUkFZID0gMzY4NzY7IC8vIDB4OTAwYworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1NBTVBMRVJfQ1VCRV9NQVBfQVJSQVlfU0hBRE9XID0gMzY4Nzc7IC8vIDB4OTAwZAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1NBTVBMRV9TSEFESU5HID0gMzU4OTQ7IC8vIDB4OGMzNgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1NDUkVFTiA9IDM3NTI1OyAvLyAweDkyOTUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9TSEFERVIgPSAzMzUwNTsgLy8gMHg4MmUxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfU09GVExJR0hUID0gMzc1MzI7IC8vIDB4OTI5YworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1NUQUNLX09WRVJGTE9XID0gMTI4MzsgLy8gMHg1MDMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9TVEFDS19VTkRFUkZMT1cgPSAxMjg0OyAvLyAweDUwNAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFU1NfQ09OVFJPTF9PVVRQVVRfVkVSVElDRVMgPSAzNjQ2OTsgLy8gMHg4ZTc1CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVEVTU19DT05UUk9MX1NIQURFUiA9IDM2NDg4OyAvLyAweDhlODgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9URVNTX0NPTlRST0xfU0hBREVSX0JJVCA9IDg7IC8vIDB4OAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFU1NfRVZBTFVBVElPTl9TSEFERVIgPSAzNjQ4NzsgLy8gMHg4ZTg3CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVEVTU19FVkFMVUFUSU9OX1NIQURFUl9CSVQgPSAxNjsgLy8gMHgxMAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFU1NfR0VOX01PREUgPSAzNjQ3MDsgLy8gMHg4ZTc2CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVEVTU19HRU5fUE9JTlRfTU9ERSA9IDM2NDczOyAvLyAweDhlNzkKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9URVNTX0dFTl9TUEFDSU5HID0gMzY0NzE7IC8vIDB4OGU3NworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFU1NfR0VOX1ZFUlRFWF9PUkRFUiA9IDM2NDcyOyAvLyAweDhlNzgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9URVhUVVJFXzJEX01VTFRJU0FNUExFX0FSUkFZID0gMzcxMjI7IC8vIDB4OTEwMgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfQklORElOR18yRF9NVUxUSVNBTVBMRV9BUlJBWSA9IDM3MTI1OyAvLyAweDkxMDUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9URVhUVVJFX0JJTkRJTkdfQlVGRkVSID0gMzU4ODQ7IC8vIDB4OGMyYworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfQklORElOR19DVUJFX01BUF9BUlJBWSA9IDM2ODc0OyAvLyAweDkwMGEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9URVhUVVJFX0JPUkRFUl9DT0xPUiA9IDQxMDA7IC8vIDB4MTAwNAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfQlVGRkVSID0gMzU4ODI7IC8vIDB4OGMyYQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfQlVGRkVSX0JJTkRJTkcgPSAzNTg4MjsgLy8gMHg4YzJhCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVEVYVFVSRV9CVUZGRVJfREFUQV9TVE9SRV9CSU5ESU5HID0gMzU4ODU7IC8vIDB4OGMyZAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfQlVGRkVSX09GRlNFVCA9IDM3Mjc3OyAvLyAweDkxOWQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9URVhUVVJFX0JVRkZFUl9PRkZTRVRfQUxJR05NRU5UID0gMzcyNzk7IC8vIDB4OTE5ZgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfQlVGRkVSX1NJWkUgPSAzNzI3ODsgLy8gMHg5MTllCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVEVYVFVSRV9DVUJFX01BUF9BUlJBWSA9IDM2ODczOyAvLyAweDkwMDkKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9UUklBTkdMRVNfQURKQUNFTkNZID0gMTI7IC8vIDB4YworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RSSUFOR0xFX1NUUklQX0FESkFDRU5DWSA9IDEzOyAvLyAweGQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9VTkRFRklORURfVkVSVEVYID0gMzMzNzY7IC8vIDB4ODI2MAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1VOS05PV05fQ09OVEVYVF9SRVNFVCA9IDMzMzY1OyAvLyAweDgyNTUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9VTlNJR05FRF9JTlRfSU1BR0VfQlVGRkVSID0gMzY5Njc7IC8vIDB4OTA2NworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1VOU0lHTkVEX0lOVF9JTUFHRV9DVUJFX01BUF9BUlJBWSA9IDM2OTcwOyAvLyAweDkwNmEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8yRF9NVUxUSVNBTVBMRV9BUlJBWSA9IDM3MTMzOyAvLyAweDkxMGQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl9CVUZGRVIgPSAzNjMxMjsgLy8gMHg4ZGQ4CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfQ1VCRV9NQVBfQVJSQVkgPSAzNjg3OTsgLy8gMHg5MDBmCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVkVSVEVYX0FSUkFZID0gMzI4ODQ7IC8vIDB4ODA3NAorICB9CisKKyAgcHVibGljIHN0YXRpYyBhYnN0cmFjdCBpbnRlcmZhY2UgR0xFUzMyLkRlYnVnUHJvYyB7CisgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIG9uTWVzc2FnZShpbnQsIGludCwgaW50LCBpbnQsIGphdmEubGFuZy5TdHJpbmcpOworICB9CisKICAgcHVibGljIGNsYXNzIEdMRXhjZXB0aW9uIGV4dGVuZHMgamF2YS5sYW5nLlJ1bnRpbWVFeGNlcHRpb24gewogICAgIGN0b3IgcHVibGljIEdMRXhjZXB0aW9uKGludCk7CiAgICAgY3RvciBwdWJsaWMgR0xFeGNlcHRpb24oaW50LCBqYXZhLmxhbmcuU3RyaW5nKTsKQEAgLTI4ODU3LDYgKzI5MTQ1LDcgQEAKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQucHJpbnQuUHJpbnRlcklkIGdldElkKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldE5hbWUoKTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXRTdGF0dXMoKTsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGUgbG9hZEljb24oYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCB3cml0ZVRvUGFyY2VsKGFuZHJvaWQub3MuUGFyY2VsLCBpbnQpOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5vcy5QYXJjZWxhYmxlLkNyZWF0b3I8YW5kcm9pZC5wcmludC5QcmludGVySW5mbz4gQ1JFQVRPUjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVEFUVVNfQlVTWSA9IDI7IC8vIDB4MgpAQCAtMjg4NzAsNiArMjkxNTksOSBAQAogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5wcmludC5QcmludGVySW5mbyBidWlsZCgpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5wcmludC5QcmludGVySW5mby5CdWlsZGVyIHNldENhcGFiaWxpdGllcyhhbmRyb2lkLnByaW50LlByaW50ZXJDYXBhYmlsaXRpZXNJbmZvKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQucHJpbnQuUHJpbnRlckluZm8uQnVpbGRlciBzZXREZXNjcmlwdGlvbihqYXZhLmxhbmcuU3RyaW5nKTsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQucHJpbnQuUHJpbnRlckluZm8uQnVpbGRlciBzZXRIYXNDdXN0b21QcmludGVySWNvbigpOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5wcmludC5QcmludGVySW5mby5CdWlsZGVyIHNldEljb25SZXNvdXJjZUlkKGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnByaW50LlByaW50ZXJJbmZvLkJ1aWxkZXIgc2V0SW5mb0ludGVudChhbmRyb2lkLmFwcC5QZW5kaW5nSW50ZW50KTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQucHJpbnQuUHJpbnRlckluZm8uQnVpbGRlciBzZXROYW1lKGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5wcmludC5QcmludGVySW5mby5CdWlsZGVyIHNldFN0YXR1cyhpbnQpOwogICB9CkBAIC0yODg5MCw2ICsyOTE4MiwxMCBAQAogCiBwYWNrYWdlIGFuZHJvaWQucHJpbnRzZXJ2aWNlIHsKIAorICBwdWJsaWMgY2xhc3MgQ3VzdG9tUHJpbnRlckljb25DYWxsYmFjayB7CisgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIG9uQ3VzdG9tUHJpbnRlckljb25Mb2FkZWQoYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5JY29uKTsKKyAgfQorCiAgIHB1YmxpYyBmaW5hbCBjbGFzcyBQcmludERvY3VtZW50IHsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQub3MuUGFyY2VsRmlsZURlc2NyaXB0b3IgZ2V0RGF0YSgpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5wcmludC5QcmludERvY3VtZW50SW5mbyBnZXRJbmZvKCk7CkBAIC0yODk0NSw2ICsyOTI0MSw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCBib29sZWFuIGlzRGVzdHJveWVkKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCBib29sZWFuIGlzUHJpbnRlckRpc2NvdmVyeVN0YXJ0ZWQoKTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgb25EZXN0cm95KCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIG9uUmVxdWVzdEN1c3RvbVByaW50ZXJJY29uKGFuZHJvaWQucHJpbnQuUHJpbnRlcklkLCBhbmRyb2lkLnByaW50c2VydmljZS5DdXN0b21QcmludGVySWNvbkNhbGxiYWNrKTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgb25TdGFydFByaW50ZXJEaXNjb3ZlcnkoamF2YS51dGlsLkxpc3Q8YW5kcm9pZC5wcmludC5QcmludGVySWQ+KTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgb25TdGFydFByaW50ZXJTdGF0ZVRyYWNraW5nKGFuZHJvaWQucHJpbnQuUHJpbnRlcklkKTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgb25TdG9wUHJpbnRlckRpc2NvdmVyeSgpOwpAQCAtMjkzMTMsNiArMjk2MTAsNyBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBHRU9DT0RFRF9MT0NBVElPTiA9ICJnZW9jb2RlZF9sb2NhdGlvbiI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5DT01JTkdfVFlQRSA9IDE7IC8vIDB4MQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBJU19SRUFEID0gImlzX3JlYWQiOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBMQVNUX01PRElGSUVEID0gImxhc3RfbW9kaWZpZWQiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBMSU1JVF9QQVJBTV9LRVkgPSAibGltaXQiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1JU1NFRF9UWVBFID0gMzsgLy8gMHgzCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIE5FVyA9ICJuZXciOwpAQCAtMzA5MjEsNiArMzEyMTksNyBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBBQ1RJT05fTE9DQVRJT05fU09VUkNFX1NFVFRJTkdTID0gImFuZHJvaWQuc2V0dGluZ3MuTE9DQVRJT05fU09VUkNFX1NFVFRJTkdTIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQUNUSU9OX01BTkFHRV9BTExfQVBQTElDQVRJT05TX1NFVFRJTkdTID0gImFuZHJvaWQuc2V0dGluZ3MuTUFOQUdFX0FMTF9BUFBMSUNBVElPTlNfU0VUVElOR1MiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBBQ1RJT05fTUFOQUdFX0FQUExJQ0FUSU9OU19TRVRUSU5HUyA9ICJhbmRyb2lkLnNldHRpbmdzLk1BTkFHRV9BUFBMSUNBVElPTlNfU0VUVElOR1MiOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBBQ1RJT05fTUFOQUdFX0RFRkFVTFRfQVBQU19TRVRUSU5HUyA9ICJhbmRyb2lkLnNldHRpbmdzLk1BTkFHRV9ERUZBVUxUX0FQUFNfU0VUVElOR1MiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBBQ1RJT05fTUFOQUdFX09WRVJMQVlfUEVSTUlTU0lPTiA9ICJhbmRyb2lkLnNldHRpbmdzLmFjdGlvbi5NQU5BR0VfT1ZFUkxBWV9QRVJNSVNTSU9OIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQUNUSU9OX01BTkFHRV9XUklURV9TRVRUSU5HUyA9ICJhbmRyb2lkLnNldHRpbmdzLmFjdGlvbi5NQU5BR0VfV1JJVEVfU0VUVElOR1MiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBBQ1RJT05fTUVNT1JZX0NBUkRfU0VUVElOR1MgPSAiYW5kcm9pZC5zZXR0aW5ncy5NRU1PUllfQ0FSRF9TRVRUSU5HUyI7CkBAIC0zMTU4Miw2ICszMTg4MSw3IEBACiAKICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBWb2ljZW1haWxDb250cmFjdC5TdGF0dXMgaW1wbGVtZW50cyBhbmRyb2lkLnByb3ZpZGVyLkJhc2VDb2x1bW5zIHsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLm5ldC5VcmkgYnVpbGRTb3VyY2VVcmkoamF2YS5sYW5nLlN0cmluZyk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRRdW90YShhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC50ZWxlY29tLlBob25lQWNjb3VudEhhbmRsZSwgaW50LCBpbnQpOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBDT05GSUdVUkFUSU9OX1NUQVRFID0gImNvbmZpZ3VyYXRpb25fc3RhdGUiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTkZJR1VSQVRJT05fU1RBVEVfQ0FOX0JFX0NPTkZJR1VSRUQgPSAyOyAvLyAweDIKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05GSUdVUkFUSU9OX1NUQVRFX05PVF9DT05GSUdVUkVEID0gMTsgLy8gMHgxCkBAIC0zMTU5OCw2ICszMTg5OCw5IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTk9USUZJQ0FUSU9OX0NIQU5ORUxfU1RBVEVfT0sgPSAwOyAvLyAweDAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgUEhPTkVfQUNDT1VOVF9DT01QT05FTlRfTkFNRSA9ICJwaG9uZV9hY2NvdW50X2NvbXBvbmVudF9uYW1lIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgUEhPTkVfQUNDT1VOVF9JRCA9ICJwaG9uZV9hY2NvdW50X2lkIjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgUVVPVEFfT0NDVVBJRUQgPSAicXVvdGFfb2NjdXBpZWQiOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBRVU9UQV9UT1RBTCA9ICJxdW90YV90b3RhbCI7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUVVPVEFfVU5BVkFJTEFCTEUgPSAtMTsgLy8gMHhmZmZmZmZmZgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBTRVRUSU5HU19VUkkgPSAic2V0dGluZ3NfdXJpIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgU09VUkNFX1BBQ0tBR0UgPSAic291cmNlX3BhY2thZ2UiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBWT0lDRU1BSUxfQUNDRVNTX1VSSSA9ICJ2b2ljZW1haWxfYWNjZXNzX3VyaSI7CkBAIC0zMTYxNCw2ICszMTkxNyw3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEhBU19DT05URU5UID0gImhhc19jb250ZW50IjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgSVNfUkVBRCA9ICJpc19yZWFkIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgSVRFTV9UWVBFID0gInZuZC5hbmRyb2lkLmN1cnNvci5pdGVtL3ZvaWNlbWFpbCI7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIExBU1RfTU9ESUZJRUQgPSAibGFzdF9tb2RpZmllZCI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIE1JTUVfVFlQRSA9ICJtaW1lX3R5cGUiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBOVU1CRVIgPSAibnVtYmVyIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgUEhPTkVfQUNDT1VOVF9DT01QT05FTlRfTkFNRSA9ICJzdWJzY3JpcHRpb25fY29tcG9uZW50X25hbWUiOwpAQCAtMzI4MDUsNiArMzMxMDksNyBAQAogICBwdWJsaWMgY2xhc3MgTmV0d29ya1NlY3VyaXR5UG9saWN5IHsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLnNlY3VyaXR5Lk5ldHdvcmtTZWN1cml0eVBvbGljeSBnZXRJbnN0YW5jZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc0NsZWFydGV4dFRyYWZmaWNQZXJtaXR0ZWQoKTsKKyAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNDbGVhcnRleHRUcmFmZmljUGVybWl0dGVkKGphdmEubGFuZy5TdHJpbmcpOwogICB9CiAKIH0KQEAgLTMzMjIwLDYgKzMzNTI1LDcgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBSRUFTT05fUEFDS0FHRV9CQU5ORUQgPSA3OyAvLyAweDcKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBSRUFTT05fUEFDS0FHRV9DSEFOR0VEID0gNTsgLy8gMHg1CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUkVBU09OX1VTRVJfU1RPUFBFRCA9IDY7IC8vIDB4NgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBTRVJWSUNFX0lOVEVSRkFDRSA9ICJhbmRyb2lkLnNlcnZpY2Uubm90aWZpY2F0aW9uLk5vdGlmaWNhdGlvbkFzc2lzdGFudFNlcnZpY2UiOwogICB9CiAKICAgcHVibGljIGNsYXNzIE5vdGlmaWNhdGlvbkFzc2lzdGFudFNlcnZpY2UuQWRqdXN0bWVudCB7CkBAIC0zMzI0OSw2ICszMzU1NSw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCB2b2lkIHJlcXVlc3RJbnRlcnJ1cHRpb25GaWx0ZXIoaW50KTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIHZvaWQgcmVxdWVzdExpc3RlbmVySGludHMoaW50KTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIHZvaWQgc2V0Tm90aWZpY2F0aW9uc1Nob3duKGphdmEubGFuZy5TdHJpbmdbXSk7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIENBVEVHT1JZX1ZSX05PVElGSUNBVElPTlMgPSAiYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkudnIubm90aWZpY2F0aW9ucyI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSElOVF9IT1NUX0RJU0FCTEVfRUZGRUNUUyA9IDE7IC8vIDB4MQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOVEVSUlVQVElPTl9GSUxURVJfQUxBUk1TID0gNDsgLy8gMHg0CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5URVJSVVBUSU9OX0ZJTFRFUl9BTEwgPSAxOyAvLyAweDEKQEAgLTMzMjU4LDYgKzMzNTY1LDcgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgU0VSVklDRV9JTlRFUkZBQ0UgPSAiYW5kcm9pZC5zZXJ2aWNlLm5vdGlmaWNhdGlvbi5Ob3RpZmljYXRpb25MaXN0ZW5lclNlcnZpY2UiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNVUFBSRVNTRURfRUZGRUNUX0xJR0hUUyA9IDE7IC8vIDB4MQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNVUFBSRVNTRURfRUZGRUNUX1BFRUsgPSAyOyAvLyAweDIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVVBQUkVTU0VEX0VGRkVDVF9TQ1JFRU5fT04gPSA0OyAvLyAweDQKICAgfQogCiAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgTm90aWZpY2F0aW9uTGlzdGVuZXJTZXJ2aWNlLlJhbmtpbmcgewpAQCAtMzMzMjksMTAgKzMzNjM3LDEzIEBACiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIG9uQ2xpY2soKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgb25TdGFydExpc3RlbmluZygpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBvblN0b3BMaXN0ZW5pbmcoKTsKLSAgICBtZXRob2QgcHVibGljIHZvaWQgb25UaWxlQWRkZWQoKTsKKyAgICBtZXRob2QgcHVibGljIGludCBvblRpbGVBZGRlZCgpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBvblRpbGVSZW1vdmVkKCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgZmluYWwgdm9pZCByZXF1ZXN0TGlzdGVuaW5nU3RhdGUoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lKTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIHZvaWQgc2hvd0RpYWxvZyhhbmRyb2lkLmFwcC5EaWFsb2cpOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBBQ1RJT05fUVNfVElMRSA9ICJhbmRyb2lkLnNlcnZpY2UucXVpY2tzZXR0aW5ncy5hY3Rpb24uUVNfVElMRSI7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVElMRV9NT0RFX0FDVElWRSA9IDI7IC8vIDB4MgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRJTEVfTU9ERV9QQVNTSVZFID0gMTsgLy8gMHgxCiAgIH0KIAogfQpAQCAtMzQ1OTMsNiArMzQ5MDQsNyBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBST1BFUlRZX0dFTkVSSUNfQ09ORkVSRU5DRSA9IDI7IC8vIDB4MgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBST1BFUlRZX0hJR0hfREVGX0FVRElPID0gMTY7IC8vIDB4MTAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQUk9QRVJUWV9XSUZJID0gODsgLy8gMHg4CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJPUEVSVFlfV09SS19DQUxMID0gMzI7IC8vIDB4MjAKICAgfQogCiAgIHB1YmxpYyBmaW5hbCBjbGFzcyBDYWxsQXVkaW9TdGF0ZSBpbXBsZW1lbnRzIGFuZHJvaWQub3MuUGFyY2VsYWJsZSB7CkBAIC0zNjQzMSw3ICszNjc0Myw2IEBACiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlIGdldEFwcGxpY2F0aW9uTG9nbyhqYXZhLmxhbmcuU3RyaW5nKSB0aHJvd3MgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLk5hbWVOb3RGb3VuZEV4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIGludCBnZXRDb21wb25lbnRFbmFibGVkU2V0dGluZyhhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlIGdldERlZmF1bHRBY3Rpdml0eUljb24oKTsKLSAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0RGVmYXVsdEJyb3dzZXJQYWNrYWdlTmFtZShpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZSBnZXREcmF3YWJsZShqYXZhLmxhbmcuU3RyaW5nLCBpbnQsIGFuZHJvaWQuY29udGVudC5wbS5BcHBsaWNhdGlvbkluZm8pOwogICAgIG1ldGhvZCBwdWJsaWMgYnl0ZVtdIGdldEVwaGVtZXJhbENvb2tpZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldEVwaGVtZXJhbENvb2tpZU1heFNpemVCeXRlcygpOwpAQCAtMzY0ODMsNyArMzY3OTQsNiBAQAogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5jb250ZW50LnBtLlJlc29sdmVJbmZvIHJlc29sdmVTZXJ2aWNlKGFuZHJvaWQuY29udGVudC5JbnRlbnQsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldEFwcGxpY2F0aW9uRW5hYmxlZFNldHRpbmcoamF2YS5sYW5nLlN0cmluZywgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRDb21wb25lbnRFbmFibGVkU2V0dGluZyhhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSwgaW50LCBpbnQpOwotICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBzZXREZWZhdWx0QnJvd3NlclBhY2thZ2VOYW1lKGphdmEubGFuZy5TdHJpbmcsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIHNldEVwaGVtZXJhbENvb2tpZShieXRlW10pOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRJbnN0YWxsZXJQYWNrYWdlTmFtZShqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgdmVyaWZ5UGVuZGluZ0luc3RhbGwoaW50LCBpbnQpOwpAQCAtMzkzMDgsNyArMzk2MTgsNiBAQAogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBnZXRSZXN1bHQoKTsKICAgICBtZXRob2QgcHVibGljIGZsb2F0IGdldFgoKTsKICAgICBtZXRob2QgcHVibGljIGZsb2F0IGdldFkoKTsKLSAgICBtZXRob2QgcHVibGljIGFuZHJvaWQudmlldy5Ecm9wUGVybWlzc2lvbnMgcmVxdWVzdERyb3BQZXJtaXNzaW9ucygpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCB3cml0ZVRvUGFyY2VsKGFuZHJvaWQub3MuUGFyY2VsLCBpbnQpOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFDVElPTl9EUkFHX0VOREVEID0gNDsgLy8gMHg0CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQUNUSU9OX0RSQUdfRU5URVJFRCA9IDU7IC8vIDB4NQpAQCAtNDAyNDYsNiArNDA1NTUsOCBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFYSVNfTFRSSUdHRVIgPSAxNzsgLy8gMHgxMQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFYSVNfT1JJRU5UQVRJT04gPSA4OyAvLyAweDgKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBWElTX1BSRVNTVVJFID0gMjsgLy8gMHgyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQVhJU19SRUxBVElWRV9YID0gMjc7IC8vIDB4MWIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBWElTX1JFTEFUSVZFX1kgPSAyODsgLy8gMHgxYwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFYSVNfUlRSSUdHRVIgPSAxODsgLy8gMHgxMgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFYSVNfUlVEREVSID0gMjA7IC8vIDB4MTQKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBWElTX1JYID0gMTI7IC8vIDB4YwpAQCAtNDA3ODEsNiArNDEwOTIsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBoYXNOZXN0ZWRTY3JvbGxpbmdQYXJlbnQoKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaGFzT25DbGlja0xpc3RlbmVycygpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBoYXNPdmVybGFwcGluZ1JlbmRlcmluZygpOworICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBoYXNQb2ludGVyQ2FwdHVyZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBoYXNUcmFuc2llbnRTdGF0ZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBoYXNXaW5kb3dGb2N1cygpOwogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQudmlldy5WaWV3IGluZmxhdGUoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGludCwgYW5kcm9pZC52aWV3LlZpZXdHcm91cCk7CkBAIC00MDkwNyw2ICs0MTIxOSw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHBvc3RPbkFuaW1hdGlvbihqYXZhLmxhbmcuUnVubmFibGUpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBwb3N0T25BbmltYXRpb25EZWxheWVkKGphdmEubGFuZy5SdW5uYWJsZSwgbG9uZyk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHJlZnJlc2hEcmF3YWJsZVN0YXRlKCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHJlbGVhc2VQb2ludGVyQ2FwdHVyZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiByZW1vdmVDYWxsYmFja3MoamF2YS5sYW5nLlJ1bm5hYmxlKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgcmVtb3ZlT25BdHRhY2hTdGF0ZUNoYW5nZUxpc3RlbmVyKGFuZHJvaWQudmlldy5WaWV3Lk9uQXR0YWNoU3RhdGVDaGFuZ2VMaXN0ZW5lcik7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHJlbW92ZU9uTGF5b3V0Q2hhbmdlTGlzdGVuZXIoYW5kcm9pZC52aWV3LlZpZXcuT25MYXlvdXRDaGFuZ2VMaXN0ZW5lcik7CkBAIC00MTAwNyw2ICs0MTMyMCw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFBhZGRpbmdSZWxhdGl2ZShpbnQsIGludCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRQaXZvdFgoZmxvYXQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRQaXZvdFkoZmxvYXQpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRQb2ludGVyQ2FwdHVyZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRQb2ludGVySWNvbihhbmRyb2lkLnZpZXcuUG9pbnRlckljb24pOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRQcmVzc2VkKGJvb2xlYW4pOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgdm9pZCBzZXRSaWdodChpbnQpOwpAQCAtNTk0MTgsOCArNTk3MzIsOCBAQAogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZ0J1ZmZlciBhcHBlbmRUYWlsKGphdmEubGFuZy5TdHJpbmdCdWZmZXIpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGVuZCgpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGVuZChpbnQpOwotICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBmaW5kKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGZpbmQoKTsKKyAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gZmluZChpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBncm91cCgpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBncm91cChpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdyb3VwQ291bnQoKTsKQEAgLTU5NDQ3LDggKzU5NzYxLDggQEAKICAgfQogCiAgIHB1YmxpYyBmaW5hbCBjbGFzcyBQYXR0ZXJuIGltcGxlbWVudHMgamF2YS5pby5TZXJpYWxpemFibGUgewotICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGphdmEudXRpbC5yZWdleC5QYXR0ZXJuIGNvbXBpbGUoamF2YS5sYW5nLlN0cmluZywgaW50KSB0aHJvd3MgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm5TeW50YXhFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm4gY29tcGlsZShqYXZhLmxhbmcuU3RyaW5nKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBqYXZhLnV0aWwucmVnZXguUGF0dGVybiBjb21waWxlKGphdmEubGFuZy5TdHJpbmcsIGludCkgdGhyb3dzIGphdmEudXRpbC5yZWdleC5QYXR0ZXJuU3ludGF4RXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGZsYWdzKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLnV0aWwucmVnZXguTWF0Y2hlciBtYXRjaGVyKGphdmEubGFuZy5DaGFyU2VxdWVuY2UpOwogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGJvb2xlYW4gbWF0Y2hlcyhqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuQ2hhclNlcXVlbmNlKTsKQEAgLTU5NDYzLDYgKzU5Nzc3LDcgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMSVRFUkFMID0gMTY7IC8vIDB4MTAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNVUxUSUxJTkUgPSA4OyAvLyAweDgKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVTklDT0RFX0NBU0UgPSA2NDsgLy8gMHg0MAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVOSUNPREVfQ0hBUkFDVEVSX0NMQVNTID0gMjU2OyAvLyAweDEwMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVOSVhfTElORVMgPSAxOyAvLyAweDEKICAgfQogCmRpZmYgLS1naXQgYS9hcGkvdGVzdC1yZW1vdmVkLnR4dCBiL2FwaS90ZXN0LXJlbW92ZWQudHh0CmluZGV4IGYxMmU2MWUuLjZiNzk2MWUgMTAwNjQ0Ci0tLSBhL2FwaS90ZXN0LXJlbW92ZWQudHh0CisrKyBiL2FwaS90ZXN0LXJlbW92ZWQudHh0CkBAIC0xOTksNiArMTk5LDE1IEBACiAKIH0KIAorcGFja2FnZSBhbmRyb2lkLnRlc3QubW9jayB7CisKKyAgcHVibGljIGNsYXNzIE1vY2tQYWNrYWdlTWFuYWdlciBleHRlbmRzIGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlciB7CisgICAgbWV0aG9kIHB1YmxpYyBkZXByZWNhdGVkIGphdmEubGFuZy5TdHJpbmcgZ2V0RGVmYXVsdEJyb3dzZXJQYWNrYWdlTmFtZShpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgZGVwcmVjYXRlZCBib29sZWFuIHNldERlZmF1bHRCcm93c2VyUGFja2FnZU5hbWUoamF2YS5sYW5nLlN0cmluZywgaW50KTsKKyAgfQorCit9CisKIHBhY2thZ2UgYW5kcm9pZC50ZXh0LmZvcm1hdCB7CiAKICAgcHVibGljIGNsYXNzIERhdGVGb3JtYXQgewpkaWZmIC0tZ2l0IGEvY21kcy9hbS9zcmMvY29tL2FuZHJvaWQvY29tbWFuZHMvYW0vQW0uamF2YSBiL2NtZHMvYW0vc3JjL2NvbS9hbmRyb2lkL2NvbW1hbmRzL2FtL0FtLmphdmEKaW5kZXggNGY3YTEwOS4uNjMwMmQ3NCAxMDA2NDQKLS0tIGEvY21kcy9hbS9zcmMvY29tL2FuZHJvaWQvY29tbWFuZHMvYW0vQW0uamF2YQorKysgYi9jbWRzL2FtL3NyYy9jb20vYW5kcm9pZC9jb21tYW5kcy9hbS9BbS5qYXZhCkBAIC0xNTksNiArMTU5LDcgQEAKICAgICAgICAgICAgICAgICAiICAgICAgIGFtIHN0YWNrIHN0YXJ0IDxESVNQTEFZX0lEPiA8SU5URU5UPlxuIiArCiAgICAgICAgICAgICAgICAgIiAgICAgICBhbSBzdGFjayBtb3ZldGFzayA8VEFTS19JRD4gPFNUQUNLX0lEPiBbdHJ1ZXxmYWxzZV1cbiIgKwogICAgICAgICAgICAgICAgICIgICAgICAgYW0gc3RhY2sgcmVzaXplIDxTVEFDS19JRD4gPExFRlQsVE9QLFJJR0hULEJPVFRPTT5cbiIgKworICAgICAgICAgICAgICAgICIgICAgICAgYW0gc3RhY2sgcmVzaXplLWRvY2tlZC1zdGFjayA8TEVGVCxUT1AsUklHSFQsQk9UVE9NPiBbPFRBU0tfTEVGVCxUQVNLX1RPUCxUQVNLX1JJR0hULFRBU0tfQk9UVE9NPl1cbiIgKwogICAgICAgICAgICAgICAgICIgICAgICAgYW0gc3RhY2sgc2l6ZS1kb2NrZWQtc3RhY2stdGVzdDogPFNURVBfU0laRT4gPGx8dHxyfGI+IFtERUxBWV9NU11cbiIgKwogICAgICAgICAgICAgICAgICIgICAgICAgYW0gc3RhY2sgbW92ZS10b3AtYWN0aXZpdHktdG8tcGlubmVkLXN0YWNrOiA8U1RBQ0tfSUQ+IDxMRUZULFRPUCxSSUdIVCxCT1RUT00+XG4iICsKICAgICAgICAgICAgICAgICAiICAgICAgIGFtIHN0YWNrIHBvc2l0aW9udGFzayA8VEFTS19JRD4gPFNUQUNLX0lEPiA8UE9TSVRJT04+XG4iICsKQEAgLTI5OSw3ICszMDAsMTEgQEAKICAgICAgICAgICAgICAgICAiYW0gc3RhY2sgbW92ZXRhc2s6IG1vdmUgPFRBU0tfSUQ+IGZyb20gaXRzIGN1cnJlbnQgc3RhY2sgdG8gdGhlIHRvcCAodHJ1ZSkgb3IiICsKICAgICAgICAgICAgICAgICAiICAgYm90dG9tIChmYWxzZSkgb2YgPFNUQUNLX0lEPi5cbiIgKwogICAgICAgICAgICAgICAgICJcbiIgKwotICAgICAgICAgICAgICAgICJhbSBzdGFjayByZXNpemU6IGNoYW5nZSA8U1RBQ0tfSUQ+IHNpemUgYW5kIHBvc2l0aW9uIHRvIDxMRUZULFRPUCxSSUdIVCxCT1RUT00+LiIgKworICAgICAgICAgICAgICAgICJhbSBzdGFjayByZXNpemU6IGNoYW5nZSA8U1RBQ0tfSUQ+IHNpemUgYW5kIHBvc2l0aW9uIHRvIDxMRUZULFRPUCxSSUdIVCxCT1RUT00+LlxuIiArCisgICAgICAgICAgICAgICAgIlxuIiArCisgICAgICAgICAgICAgICAgImFtIHN0YWNrIHJlc2l6ZS1kb2NrZWQtc3RhY2s6IGNoYW5nZSBkb2NrZWQgc3RhY2sgdG8gPExFRlQsVE9QLFJJR0hULEJPVFRPTT5cbiIgKworICAgICAgICAgICAgICAgICIgICBhbmQgc3VwcGx5aW5nIHRlbXBvcmFyeSBkaWZmZXJlbnQgdGFzayBib3VuZHMgaW5kaWNhdGVkIGJ5XG4iICsKKyAgICAgICAgICAgICAgICAiICAgPFRBU0tfTEVGVCxUT1AsUklHSFQsQk9UVE9NPlxuIiArCiAgICAgICAgICAgICAgICAgIlxuIiArCiAgICAgICAgICAgICAgICAgImFtIHN0YWNrIHNpemUtZG9ja2VkLXN0YWNrLXRlc3Q6IHRlc3QgY29tbWFuZCBmb3Igc2l6aW5nIGRvY2tlZCBzdGFjayBieVxuIiArCiAgICAgICAgICAgICAgICAgIiAgIDxTVEVQX1NJWkU+IGluY3JlbWVudHMgZnJvbSB0aGUgc2lkZSA8bD5lZnQsIDx0Pm9wLCA8cj5pZ2h0LCBvciA8Yj5vdHRvbVxuIiArCkBAIC0xNjgzLDYgKzE2ODgsOSBAQAogICAgICAgICAgICAgY2FzZSAicmVzaXplIjoKICAgICAgICAgICAgICAgICBydW5TdGFja1Jlc2l6ZSgpOwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAicmVzaXplLWRvY2tlZC1zdGFjayI6CisgICAgICAgICAgICAgICAgcnVuU3RhY2tSZXNpemVEb2NrZWQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgInBvc2l0aW9udGFzayI6CiAgICAgICAgICAgICAgICAgcnVuU3RhY2tQb3NpdGlvblRhc2soKTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTE3NTEsNiArMTc1OSwyMCBAQAogICAgICAgICByZXNpemVTdGFjayhzdGFja0lkLCBib3VuZHMsIDApOwogICAgIH0KIAorICAgIHByaXZhdGUgdm9pZCBydW5TdGFja1Jlc2l6ZURvY2tlZCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBSZWN0IGJvdW5kcyA9IGdldEJvdW5kcygpOworICAgICAgICBmaW5hbCBSZWN0IHRhc2tCb3VuZHMgPSBnZXRCb3VuZHMoKTsKKyAgICAgICAgaWYgKGJvdW5kcyA9PSBudWxsIHx8IHRhc2tCb3VuZHMgPT0gbnVsbCkgeworICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJFcnJvcjogaW52YWxpZCBpbnB1dCBib3VuZHMiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0cnkgeworICAgICAgICAgICAgbUFtLnJlc2l6ZURvY2tlZFN0YWNrKGJvdW5kcywgdGFza0JvdW5kcywgbnVsbCwgbnVsbCwgbnVsbCk7CisgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBzaG93RXJyb3IoIkVycm9yOiByZXNpemluZyBkb2NrZWQgc3RhY2sgIiArIGUpOworICAgICAgICB9CisgICAgfQorCiAgICAgcHJpdmF0ZSB2b2lkIHJlc2l6ZVN0YWNrKGludCBzdGFja0lkLCBSZWN0IGJvdW5kcywgaW50IGRlbGF5TXMpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBpZiAoYm91bmRzID09IG51bGwpIHsKICAgICAgICAgICAgIHNob3dFcnJvcigiRXJyb3I6IGludmFsaWQgaW5wdXQgYm91bmRzIik7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQWN0aW9uQmFyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQWN0aW9uQmFyLmphdmEKaW5kZXggNzJmOGM3Ny4uNmZjMGQ3NCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0FjdGlvbkJhci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9BY3Rpb25CYXIuamF2YQpAQCAtMzEsOSArMzEsMTEgQEAKIGltcG9ydCBhbmRyb2lkLnZpZXcuR3Jhdml0eTsKIGltcG9ydCBhbmRyb2lkLnZpZXcuS2V5RXZlbnQ7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXcuT25Gb2N1c0NoYW5nZUxpc3RlbmVyOwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3RGVidWc7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdHcm91cDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0hpZXJhcmNoeUVuY29kZXI7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdQYXJlbnQ7CiBpbXBvcnQgYW5kcm9pZC52aWV3LldpbmRvdzsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5TcGlubmVyQWRhcHRlcjsKIGltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb247CkBAIC0xMDcxLDYgKzEwNzMsNjYgQEAKICAgICB9CiAKICAgICAvKioKKyAgICAgKiBBdHRlbXB0cyB0byBtb3ZlIGZvY3VzIHRvIHRoZSBBY3Rpb25CYXIgaWYgaXQgZG9lcyBub3QgYWxyZWFkeSBjb250YWluIHRoZSBmb2N1cy4KKyAgICAgKgorICAgICAqIEByZXR1cm4ge0Bjb2RlIHRydWV9IGlmIGZvY3VzIGNoYW5nZXMgb3Ige0Bjb2RlIGZhbHNlfSBpZiBmb2N1cyBkb2Vzbid0IGNoYW5nZS4KKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIHJlcXVlc3RGb2N1cygpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyB2b2lkIG9uRGVzdHJveSgpIHsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb21tb24gaW1wbGVtZW50YXRpb24gZm9yIHJlcXVlc3RGb2N1cyB0aGF0IHRha2VzIGluIHRoZSBUb29sYmFyIGFuZCBtb3ZlcyBmb2N1cworICAgICAqIHRvIHRoZSBjb250ZW50cy4gVGhpcyBtYWtlcyB0aGUgVmlld0dyb3VwcyBjb250YWluaW5nIHRoZSB0b29sYmFyIGFsbG93IGZvY3VzIHdoaWxlIGl0IHN0YXlzCisgICAgICogaW4gdGhlIEFjdGlvbkJhciBhbmQgdGhlbiBwcmV2ZW50cyBpdCBhZ2FpbiBvbmNlIGl0IGxlYXZlcy4KKyAgICAgKgorICAgICAqIEBwYXJhbSB2aWV3R3JvdXAgVGhlIHRvb2xiYXIgVmlld0dyb3VwCisgICAgICogQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgZm9jdXMgY2hhbmdlcyBvciB7QGNvZGUgZmFsc2V9IGlmIGZvY3VzIGRvZXNuJ3QgY2hhbmdlLgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHJvdGVjdGVkIGJvb2xlYW4gcmVxdWVzdEZvY3VzKFZpZXdHcm91cCB2aWV3R3JvdXApIHsKKyAgICAgICAgaWYgKHZpZXdHcm91cCAhPSBudWxsICYmICF2aWV3R3JvdXAuaGFzRm9jdXMoKSkgeworICAgICAgICAgICAgZmluYWwgVmlld0dyb3VwIHRvb2xiYXIgPSB2aWV3R3JvdXAuZ2V0VG91Y2hzY3JlZW5CbG9ja3NGb2N1cygpID8gdmlld0dyb3VwIDogbnVsbDsKKyAgICAgICAgICAgIFZpZXdQYXJlbnQgcGFyZW50ID0gdmlld0dyb3VwLmdldFBhcmVudCgpOworICAgICAgICAgICAgVmlld0dyb3VwIGNvbnRhaW5lciA9IG51bGw7CisgICAgICAgICAgICB3aGlsZSAocGFyZW50ICE9IG51bGwgJiYgcGFyZW50IGluc3RhbmNlb2YgVmlld0dyb3VwKSB7CisgICAgICAgICAgICAgICAgZmluYWwgVmlld0dyb3VwIHZnUGFyZW50ID0gKFZpZXdHcm91cCkgcGFyZW50OworICAgICAgICAgICAgICAgIGlmICh2Z1BhcmVudC5nZXRUb3VjaHNjcmVlbkJsb2Nrc0ZvY3VzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyID0gdmdQYXJlbnQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwYXJlbnQgPSB2Z1BhcmVudC5nZXRQYXJlbnQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjb250YWluZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zZXRUb3VjaHNjcmVlbkJsb2Nrc0ZvY3VzKGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0b29sYmFyICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICB0b29sYmFyLnNldFRvdWNoc2NyZWVuQmxvY2tzRm9jdXMoZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmlld0dyb3VwLnJlcXVlc3RGb2N1cygpOworICAgICAgICAgICAgZmluYWwgVmlldyBmb2N1c2VkID0gdmlld0dyb3VwLmZpbmRGb2N1cygpOworICAgICAgICAgICAgaWYgKGZvY3VzZWQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGZvY3VzZWQuc2V0T25Gb2N1c0NoYW5nZUxpc3RlbmVyKG5ldyBGb2xsb3dPdXRPZkFjdGlvbkJhcih2aWV3R3JvdXAsCisgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIsIHRvb2xiYXIpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5lciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zZXRUb3VjaHNjcmVlbkJsb2Nrc0ZvY3VzKHRydWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAodG9vbGJhciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIHRvb2xiYXIuc2V0VG91Y2hzY3JlZW5CbG9ja3NGb2N1cyh0cnVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLyoqCiAgICAgICogTGlzdGVuZXIgaW50ZXJmYWNlIGZvciBBY3Rpb25CYXIgbmF2aWdhdGlvbiBldmVudHMuCiAgICAgICoKICAgICAgKiBAZGVwcmVjYXRlZCBBY3Rpb24gYmFyIG5hdmlnYXRpb24gbW9kZXMgYXJlIGRlcHJlY2F0ZWQgYW5kIG5vdCBzdXBwb3J0ZWQgYnkgaW5saW5lCkBAIC0xMzg4LDQgKzE0NTAsNDMgQEAKICAgICAgICAgICAgIGVuY29kZXIuYWRkUHJvcGVydHkoImdyYXZpdHkiLCBncmF2aXR5KTsKICAgICAgICAgfQogICAgIH0KKworICAgIC8qKgorICAgICAqIFRyYWNrcyB0aGUgZm9jdXNlZCBWaWV3IHVudGlsIGl0IGxlYXZlcyB0aGUgQWN0aW9uQmFyLCB0aGVuIGl0IHJlc2V0cyB0aGUKKyAgICAgKiB0b3VjaHNjcmVlbkJsb2Nrc0ZvY3VzIHZhbHVlLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIEZvbGxvd091dE9mQWN0aW9uQmFyIGltcGxlbWVudHMgT25Gb2N1c0NoYW5nZUxpc3RlbmVyLCBSdW5uYWJsZSB7CisgICAgICAgIHByaXZhdGUgZmluYWwgVmlld0dyb3VwIG1Gb2N1c1Jvb3Q7CisgICAgICAgIHByaXZhdGUgZmluYWwgVmlld0dyb3VwIG1Db250YWluZXI7CisgICAgICAgIHByaXZhdGUgZmluYWwgVmlld0dyb3VwIG1Ub29sYmFyOworCisgICAgICAgIHB1YmxpYyBGb2xsb3dPdXRPZkFjdGlvbkJhcihWaWV3R3JvdXAgZm9jdXNSb290LCBWaWV3R3JvdXAgY29udGFpbmVyLCBWaWV3R3JvdXAgdG9vbGJhcikgeworICAgICAgICAgICAgbUNvbnRhaW5lciA9IGNvbnRhaW5lcjsKKyAgICAgICAgICAgIG1Ub29sYmFyID0gdG9vbGJhcjsKKyAgICAgICAgICAgIG1Gb2N1c1Jvb3QgPSBmb2N1c1Jvb3Q7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25Gb2N1c0NoYW5nZShWaWV3IHYsIGJvb2xlYW4gaGFzRm9jdXMpIHsKKyAgICAgICAgICAgIGlmICghaGFzRm9jdXMpIHsKKyAgICAgICAgICAgICAgICB2LnNldE9uRm9jdXNDaGFuZ2VMaXN0ZW5lcihudWxsKTsKKyAgICAgICAgICAgICAgICBmaW5hbCBWaWV3IGZvY3VzZWQgPSBtRm9jdXNSb290LmZpbmRGb2N1cygpOworICAgICAgICAgICAgICAgIGlmIChmb2N1c2VkICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9jdXNlZC5zZXRPbkZvY3VzQ2hhbmdlTGlzdGVuZXIodGhpcyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbUZvY3VzUm9vdC5wb3N0KHRoaXMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICBpZiAobUNvbnRhaW5lciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgbUNvbnRhaW5lci5zZXRUb3VjaHNjcmVlbkJsb2Nrc0ZvY3VzKHRydWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1Ub29sYmFyICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBtVG9vbGJhci5zZXRUb3VjaHNjcmVlbkJsb2Nrc0ZvY3VzKHRydWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0FjdGl2aXR5LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQWN0aXZpdHkuamF2YQppbmRleCA0ZWQyZmQ3Li44MzQ2MTYxIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQWN0aXZpdHkuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQWN0aXZpdHkuamF2YQpAQCAtMzEsNiArMzEsOCBAQAogaW1wb3J0IGFuZHJvaWQudHJhbnNpdGlvbi5UcmFuc2l0aW9uTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLnV0aWwuQXJyYXlNYXA7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlN1cGVyTm90Q2FsbGVkRXhjZXB0aW9uOworaW1wb3J0IGFuZHJvaWQudmlldy5EcmFnRXZlbnQ7CitpbXBvcnQgYW5kcm9pZC52aWV3LkRyb3BQZXJtaXNzaW9uczsKIGltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93LldpbmRvd0NvbnRyb2xsZXJDYWxsYmFjazsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5Ub29sYmFyOwogCkBAIC04MTYsNiArODE4LDcgQEAKICAgICBTaGFyZWRFbGVtZW50Q2FsbGJhY2sgbUV4aXRUcmFuc2l0aW9uTGlzdGVuZXIgPSBTaGFyZWRFbGVtZW50Q2FsbGJhY2suTlVMTF9DQUxMQkFDSzsKIAogICAgIHByaXZhdGUgYm9vbGVhbiBtSGFzQ3VycmVudFBlcm1pc3Npb25zUmVxdWVzdDsKKyAgICBwcml2YXRlIGJvb2xlYW4gbUVhdEtleVVwRXZlbnQ7CiAKICAgICAvKiogUmV0dXJuIHRoZSBpbnRlbnQgdGhhdCBzdGFydGVkIHRoaXMgYWN0aXZpdHkuICovCiAgICAgcHVibGljIEludGVudCBnZXRJbnRlbnQoKSB7CkBAIC0xNzAwLDYgKzE3MDMsMTAgQEAKICAgICAgICAgICAgIG1TZWFyY2hNYW5hZ2VyLnN0b3BTZWFyY2goKTsKICAgICAgICAgfQogCisgICAgICAgIGlmIChtQWN0aW9uQmFyICE9IG51bGwpIHsKKyAgICAgICAgICAgIG1BY3Rpb25CYXIub25EZXN0cm95KCk7CisgICAgICAgIH0KKwogICAgICAgICBnZXRBcHBsaWNhdGlvbigpLmRpc3BhdGNoQWN0aXZpdHlEZXN0cm95ZWQodGhpcyk7CiAgICAgfQogCkBAIC0yMjA1LDE0ICsyMjEyLDIyIEBACiAgICAgICogQHBhcmFtIHRvb2xiYXIgVG9vbGJhciB0byBzZXQgYXMgdGhlIEFjdGl2aXR5J3MgYWN0aW9uIGJhcgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldEFjdGlvbkJhcihATnVsbGFibGUgVG9vbGJhciB0b29sYmFyKSB7Ci0gICAgICAgIGlmIChnZXRBY3Rpb25CYXIoKSBpbnN0YW5jZW9mIFdpbmRvd0RlY29yQWN0aW9uQmFyKSB7CisgICAgICAgIGZpbmFsIEFjdGlvbkJhciBhYiA9IGdldEFjdGlvbkJhcigpOworICAgICAgICBpZiAoYWIgaW5zdGFuY2VvZiBXaW5kb3dEZWNvckFjdGlvbkJhcikgewogICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiVGhpcyBBY3Rpdml0eSBhbHJlYWR5IGhhcyBhbiBhY3Rpb24gYmFyIHN1cHBsaWVkICIgKwogICAgICAgICAgICAgICAgICAgICAiYnkgdGhlIHdpbmRvdyBkZWNvci4gRG8gbm90IHJlcXVlc3QgV2luZG93LkZFQVRVUkVfQUNUSU9OX0JBUiBhbmQgc2V0ICIgKwogICAgICAgICAgICAgICAgICAgICAiYW5kcm9pZDp3aW5kb3dBY3Rpb25CYXIgdG8gZmFsc2UgaW4geW91ciB0aGVtZSB0byB1c2UgYSBUb29sYmFyIGluc3RlYWQuIik7CiAgICAgICAgIH0KLSAgICAgICAgLy8gQ2xlYXIgb3V0IHRoZSBNZW51SW5mbGF0ZXIgdG8gbWFrZSBzdXJlIHRoYXQgaXQgaXMgdmFsaWQgZm9yIHRoZSBuZXcgQWN0aW9uIEJhcgorCisgICAgICAgIC8vIElmIHdlIHJlYWNoIGhlcmUgdGhlbiB3ZSdyZSBzZXR0aW5nIGEgbmV3IGFjdGlvbiBiYXIKKyAgICAgICAgLy8gRmlyc3QgY2xlYXIgb3V0IHRoZSBNZW51SW5mbGF0ZXIgdG8gbWFrZSBzdXJlIHRoYXQgaXQgaXMgdmFsaWQgZm9yIHRoZSBuZXcgQWN0aW9uIEJhcgogICAgICAgICBtTWVudUluZmxhdGVyID0gbnVsbDsKIAorICAgICAgICAvLyBJZiB3ZSBoYXZlIGFuIGFjdGlvbiBiYXIgY3VycmVudGx5LCBkZXN0cm95IGl0CisgICAgICAgIGlmIChhYiAhPSBudWxsKSB7CisgICAgICAgICAgICBhYi5vbkRlc3Ryb3koKTsKKyAgICAgICAgfQorCiAgICAgICAgIFRvb2xiYXJBY3Rpb25CYXIgdGJhYiA9IG5ldyBUb29sYmFyQWN0aW9uQmFyKHRvb2xiYXIsIGdldFRpdGxlKCksIHRoaXMpOwogICAgICAgICBtQWN0aW9uQmFyID0gdGJhYjsKICAgICAgICAgbVdpbmRvdy5zZXRDYWxsYmFjayh0YmFiLmdldFdyYXBwZWRXaW5kb3dDYWxsYmFjaygpKTsKQEAgLTI4MjcsOSArMjg0MiwyNSBAQAogCiAgICAgICAgIC8vIExldCBhY3Rpb24gYmFycyBvcGVuIG1lbnVzIGluIHJlc3BvbnNlIHRvIHRoZSBtZW51IGtleSBwcmlvcml0aXplZCBvdmVyCiAgICAgICAgIC8vIHRoZSB3aW5kb3cgaGFuZGxpbmcgaXQKLSAgICAgICAgaWYgKGV2ZW50LmdldEtleUNvZGUoKSA9PSBLZXlFdmVudC5LRVlDT0RFX01FTlUgJiYKKyAgICAgICAgZmluYWwgaW50IGtleUNvZGUgPSBldmVudC5nZXRLZXlDb2RlKCk7CisgICAgICAgIGlmIChrZXlDb2RlID09IEtleUV2ZW50LktFWUNPREVfTUVOVSAmJgogICAgICAgICAgICAgICAgIG1BY3Rpb25CYXIgIT0gbnVsbCAmJiBtQWN0aW9uQmFyLm9uTWVudUtleUV2ZW50KGV2ZW50KSkgewogICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAoa2V5Q29kZSA9PSBLZXlFdmVudC5LRVlDT0RFX0RQQURfVVApIHsKKyAgICAgICAgICAgIC8vIENhcHR1cmUgdGhlIEFsdC11cCBhbmQgc2VuZCBmb2N1cyB0byB0aGUgQWN0aW9uQmFyCisgICAgICAgICAgICBmaW5hbCBpbnQgYWN0aW9uID0gZXZlbnQuZ2V0QWN0aW9uKCk7CisgICAgICAgICAgICBpZiAoYWN0aW9uID09IEtleUV2ZW50LkFDVElPTl9ET1dOKSB7CisgICAgICAgICAgICAgICAgaWYgKGV2ZW50Lmhhc01vZGlmaWVycyhLZXlFdmVudC5NRVRBX0FMVF9PTikpIHsKKyAgICAgICAgICAgICAgICAgICAgZmluYWwgQWN0aW9uQmFyIGFjdGlvbkJhciA9IGdldEFjdGlvbkJhcigpOworICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uQmFyICE9IG51bGwgJiYgYWN0aW9uQmFyLmlzU2hvd2luZygpICYmIGFjdGlvbkJhci5yZXF1ZXN0Rm9jdXMoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbUVhdEtleVVwRXZlbnQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PSBLZXlFdmVudC5BQ1RJT05fVVAgJiYgbUVhdEtleVVwRXZlbnQpIHsKKyAgICAgICAgICAgICAgICBtRWF0S2V5VXBFdmVudCA9IGZhbHNlOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgV2luZG93IHdpbiA9IGdldFdpbmRvdygpOwpAQCAtNjAyMSw2ICs2MDUyLDIyIEBACiAgICAgfQogCiAgICAgLyoqCisgICAgICogRW5hYmxlIG9yIGRpc2FibGUgdmlydHVhbCByZWFsaXR5IChWUikgbW9kZS4KKyAgICAgKgorICAgICAqIDxwPlZSIG1vZGUgaXMgYSBoaW50IHRvIEFuZHJvaWQgc3lzdGVtIHNlcnZpY2VzIHRvIHN3aXRjaCB0byBtb2RlcyBvcHRpbWl6ZWQgZm9yCisgICAgICogaGlnaC1wZXJmb3JtYW5jZSBzdGVyZW9zY29waWMgcmVuZGVyaW5nLjwvcD4KKyAgICAgKgorICAgICAqIEBwYXJhbSBlbmFibGVkIHtAY29kZSB0cnVlfSB0byBlbmFibGUgdGhpcyBtb2RlLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldFZyTW9kZShib29sZWFuIGVuYWJsZWQpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIEFjdGl2aXR5TWFuYWdlck5hdGl2ZS5nZXREZWZhdWx0KCkuc2V0VnJNb2RlKG1Ub2tlbiwgZW5hYmxlZCk7CisgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAvLyBwYXNzCisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKICAgICAgKiBTdGFydCBhbiBhY3Rpb24gbW9kZSBvZiB0aGUgZGVmYXVsdCB0eXBlIHtAbGluayBBY3Rpb25Nb2RlI1RZUEVfUFJJTUFSWX0uCiAgICAgICoKICAgICAgKiBAcGFyYW0gY2FsbGJhY2sgQ2FsbGJhY2sgdGhhdCB3aWxsIG1hbmFnZSBsaWZlY3ljbGUgZXZlbnRzIGZvciB0aGlzIGFjdGlvbiBtb2RlCkBAIC02MzAzLDYgKzYzNTAsMjEgQEAKICAgICAgICAgbUFjdGl2aXR5VHJhbnNpdGlvblN0YXRlLnN0YXJ0UG9zdHBvbmVkRW50ZXJUcmFuc2l0aW9uKCk7CiAgICAgfQogCisgICAgLyoqCisgICAgICogQ3JlYXRlIHtAbGluayBEcm9wUGVybWlzc2lvbnN9IG9iamVjdCBib3VuZCB0byB0aGlzIGFjdGl2aXR5IGFuZCBjb250cm9sbGluZyB0aGUgYWNjZXNzCisgICAgICogcGVybWlzc2lvbnMgZm9yIGNvbnRlbnQgVVJJcyBhc3NvY2lhdGVkIHdpdGggdGhlIHtAbGluayBEcmFnRXZlbnR9LgorICAgICAqIEBwYXJhbSBldmVudCBEcmFnIGV2ZW50CisgICAgICogQHJldHVybiBUaGUgRHJvcFBlcm1pc3Npb25zIG9iamVjdCB1c2VkIHRvIGNvbnRyb2wgYWNjZXNzIHRvIHRoZSBjb250ZW50IFVSSXMuIE51bGwgaWYKKyAgICAgKiBubyBjb250ZW50IFVSSXMgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZXZlbnQgb3IgaWYgcGVybWlzc2lvbnMgY291bGQgbm90IGJlIGdyYW50ZWQuCisgICAgICovCisgICAgcHVibGljIERyb3BQZXJtaXNzaW9ucyByZXF1ZXN0RHJvcFBlcm1pc3Npb25zKERyYWdFdmVudCBldmVudCkgeworICAgICAgICBEcm9wUGVybWlzc2lvbnMgZHJvcFBlcm1pc3Npb25zID0gRHJvcFBlcm1pc3Npb25zLm9idGFpbihldmVudCk7CisgICAgICAgIGlmIChkcm9wUGVybWlzc2lvbnMgIT0gbnVsbCAmJiBkcm9wUGVybWlzc2lvbnMudGFrZShnZXRBY3Rpdml0eVRva2VuKCkpKSB7CisgICAgICAgICAgICByZXR1cm4gZHJvcFBlcm1pc3Npb25zOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKwogICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLSBJbnRlcm5hbCBBUEkgLS0tLS0tLS0tLS0tLS0tLS0tCiAKICAgICBmaW5hbCB2b2lkIHNldFBhcmVudChBY3Rpdml0eSBwYXJlbnQpIHsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9BY3Rpdml0eU1hbmFnZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9BY3Rpdml0eU1hbmFnZXIuamF2YQppbmRleCA2ODFlZDViLi44NjM3ZGRlIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQWN0aXZpdHlNYW5hZ2VyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0FjdGl2aXR5TWFuYWdlci5qYXZhCkBAIC0xMjM3LDYgKzEyMzcsMTggQEAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBSRUNFTlRfSUdOT1JFX0hPTUVfU1RBQ0tfVEFTS1MgPSAweDAwMDg7CiAKICAgICAvKioKKyAgICAgKiBJZ25vcmVzIGFsbCB0YXNrcyB0aGF0IGFyZSBvbiB0aGUgZG9ja2VkIHN0YWNrLgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUkVDRU5UX0lOR09SRV9ET0NLRURfU1RBQ0tfVEFTS1MgPSAweDAwMTA7CisKKyAgICAvKioKKyAgICAgKiBJZ25vcmVzIGFsbCB0YXNrcyB0aGF0IGFyZSBvbiB0aGUgcGlubmVkIHN0YWNrLgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUkVDRU5UX0lOR09SRV9QSU5ORURfU1RBQ0tfVEFTS1MgPSAweDAwMjA7CisKKyAgICAvKioKICAgICAgKiA8cD48L3A+UmV0dXJuIGEgbGlzdCBvZiB0aGUgdGFza3MgdGhhdCB0aGUgdXNlciBoYXMgcmVjZW50bHkgbGF1bmNoZWQsIHdpdGgKICAgICAgKiB0aGUgbW9zdCByZWNlbnQgYmVpbmcgZmlyc3QgYW5kIG9sZGVyIG9uZXMgYWZ0ZXIgaW4gb3JkZXIuCiAgICAgICoKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9BY3Rpdml0eU1hbmFnZXJOYXRpdmUuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9BY3Rpdml0eU1hbmFnZXJOYXRpdmUuamF2YQppbmRleCBkNzI0ODIzLi5kYTIxMDk5IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQWN0aXZpdHlNYW5hZ2VyTmF0aXZlLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0FjdGl2aXR5TWFuYWdlck5hdGl2ZS5qYXZhCkBAIC0zMzIsMTAgKzMzMiw5IEBACiAgICAgICAgIHsKICAgICAgICAgICAgIGRhdGEuZW5mb3JjZUludGVyZmFjZShJQWN0aXZpdHlNYW5hZ2VyLmRlc2NyaXB0b3IpOwogICAgICAgICAgICAgZmluYWwgaW50IHRhc2tJZCA9IGRhdGEucmVhZEludCgpOwotICAgICAgICAgICAgZmluYWwgaW50IGxhdW5jaFN0YWNrSWQgPSBkYXRhLnJlYWRJbnQoKTsKICAgICAgICAgICAgIGZpbmFsIEJ1bmRsZSBvcHRpb25zID0KICAgICAgICAgICAgICAgICAgICAgZGF0YS5yZWFkSW50KCkgPT0gMCA/IG51bGwgOiBCdW5kbGUuQ1JFQVRPUi5jcmVhdGVGcm9tUGFyY2VsKGRhdGEpOwotICAgICAgICAgICAgZmluYWwgaW50IHJlc3VsdCA9IHN0YXJ0QWN0aXZpdHlGcm9tUmVjZW50cyh0YXNrSWQsIGxhdW5jaFN0YWNrSWQsIG9wdGlvbnMpOworICAgICAgICAgICAgZmluYWwgaW50IHJlc3VsdCA9IHN0YXJ0QWN0aXZpdHlGcm9tUmVjZW50cyh0YXNrSWQsIG9wdGlvbnMpOwogICAgICAgICAgICAgcmVwbHkud3JpdGVOb0V4Y2VwdGlvbigpOwogICAgICAgICAgICAgcmVwbHkud3JpdGVJbnQocmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNTcxLDYgKzU3MCwxNCBAQAogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIAorICAgICAgICBjYXNlIEFDVElWSVRZX1JFTEFVTkNIRURfVFJBTlNBQ1RJT046IHsKKyAgICAgICAgICAgIGRhdGEuZW5mb3JjZUludGVyZmFjZShJQWN0aXZpdHlNYW5hZ2VyLmRlc2NyaXB0b3IpOworICAgICAgICAgICAgSUJpbmRlciB0b2tlbiA9IGRhdGEucmVhZFN0cm9uZ0JpbmRlcigpOworICAgICAgICAgICAgYWN0aXZpdHlSZWxhdW5jaGVkKHRva2VuKTsKKyAgICAgICAgICAgIHJlcGx5LndyaXRlTm9FeGNlcHRpb24oKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKICAgICAgICAgY2FzZSBHRVRfQ0FMTElOR19QQUNLQUdFX1RSQU5TQUNUSU9OOiB7CiAgICAgICAgICAgICBkYXRhLmVuZm9yY2VJbnRlcmZhY2UoSUFjdGl2aXR5TWFuYWdlci5kZXNjcmlwdG9yKTsKICAgICAgICAgICAgIElCaW5kZXIgdG9rZW4gPSBkYXRhLnJlYWRTdHJvbmdCaW5kZXIoKTsKQEAgLTc4Niw2ICs3OTMsMzkgQEAKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKKyAgICAgICAgY2FzZSBSRVNJWkVfRE9DS0VEX1NUQUNLX1RSQU5TQUNUSU9OOiB7CisgICAgICAgICAgICBkYXRhLmVuZm9yY2VJbnRlcmZhY2UoSUFjdGl2aXR5TWFuYWdlci5kZXNjcmlwdG9yKTsKKyAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gaGFzQm91bmRzID0gZGF0YS5yZWFkSW50KCkgIT0gMDsKKyAgICAgICAgICAgIFJlY3QgYm91bmRzID0gbnVsbDsKKyAgICAgICAgICAgIGlmIChoYXNCb3VuZHMpIHsKKyAgICAgICAgICAgICAgICBib3VuZHMgPSBSZWN0LkNSRUFUT1IuY3JlYXRlRnJvbVBhcmNlbChkYXRhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gaGFzVGVtcERvY2tlZFRhc2tCb3VuZHMgPSBkYXRhLnJlYWRJbnQoKSAhPSAwOworICAgICAgICAgICAgUmVjdCB0ZW1wRG9ja2VkVGFza0JvdW5kcyA9IG51bGw7CisgICAgICAgICAgICBpZiAoaGFzVGVtcERvY2tlZFRhc2tCb3VuZHMpIHsKKyAgICAgICAgICAgICAgICB0ZW1wRG9ja2VkVGFza0JvdW5kcyA9IFJlY3QuQ1JFQVRPUi5jcmVhdGVGcm9tUGFyY2VsKGRhdGEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBoYXNUZW1wRG9ja2VkVGFza0luc2V0Qm91bmRzID0gZGF0YS5yZWFkSW50KCkgIT0gMDsKKyAgICAgICAgICAgIFJlY3QgdGVtcERvY2tlZFRhc2tJbnNldEJvdW5kcyA9IG51bGw7CisgICAgICAgICAgICBpZiAoaGFzVGVtcERvY2tlZFRhc2tJbnNldEJvdW5kcykgeworICAgICAgICAgICAgICAgIHRlbXBEb2NrZWRUYXNrSW5zZXRCb3VuZHMgPSBSZWN0LkNSRUFUT1IuY3JlYXRlRnJvbVBhcmNlbChkYXRhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gaGFzVGVtcE90aGVyVGFza0JvdW5kcyA9IGRhdGEucmVhZEludCgpICE9IDA7CisgICAgICAgICAgICBSZWN0IHRlbXBPdGhlclRhc2tCb3VuZHMgPSBudWxsOworICAgICAgICAgICAgaWYgKGhhc1RlbXBPdGhlclRhc2tCb3VuZHMpIHsKKyAgICAgICAgICAgICAgICB0ZW1wT3RoZXJUYXNrQm91bmRzID0gUmVjdC5DUkVBVE9SLmNyZWF0ZUZyb21QYXJjZWwoZGF0YSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaW5hbCBib29sZWFuIGhhc1RlbXBPdGhlclRhc2tJbnNldEJvdW5kcyA9IGRhdGEucmVhZEludCgpICE9IDA7CisgICAgICAgICAgICBSZWN0IHRlbXBPdGhlclRhc2tJbnNldEJvdW5kcyA9IG51bGw7CisgICAgICAgICAgICBpZiAoaGFzVGVtcE90aGVyVGFza0luc2V0Qm91bmRzKSB7CisgICAgICAgICAgICAgICAgdGVtcE90aGVyVGFza0luc2V0Qm91bmRzID0gUmVjdC5DUkVBVE9SLmNyZWF0ZUZyb21QYXJjZWwoZGF0YSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXNpemVEb2NrZWRTdGFjayhib3VuZHMsIHRlbXBEb2NrZWRUYXNrQm91bmRzLCB0ZW1wRG9ja2VkVGFza0luc2V0Qm91bmRzLAorICAgICAgICAgICAgICAgICAgICB0ZW1wT3RoZXJUYXNrQm91bmRzLCB0ZW1wT3RoZXJUYXNrSW5zZXRCb3VuZHMpOworICAgICAgICAgICAgcmVwbHkud3JpdGVOb0V4Y2VwdGlvbigpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKwogICAgICAgICBjYXNlIFBPU0lUSU9OX1RBU0tfSU5fU1RBQ0tfVFJBTlNBQ1RJT046IHsKICAgICAgICAgICAgIGRhdGEuZW5mb3JjZUludGVyZmFjZShJQWN0aXZpdHlNYW5hZ2VyLmRlc2NyaXB0b3IpOwogICAgICAgICAgICAgaW50IHRhc2tJZCA9IGRhdGEucmVhZEludCgpOwpAQCAtMTg0NSw2ICsxODg1LDE1IEBACiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCisgICAgICAgIGNhc2UgR0VUX1VSSV9QRVJNSVNTSU9OX09XTkVSX0ZPUl9BQ1RJVklUWV9UUkFOU0FDVElPTjogeworICAgICAgICAgICAgZGF0YS5lbmZvcmNlSW50ZXJmYWNlKElBY3Rpdml0eU1hbmFnZXIuZGVzY3JpcHRvcik7CisgICAgICAgICAgICBJQmluZGVyIGFjdGl2aXR5VG9rZW4gPSBkYXRhLnJlYWRTdHJvbmdCaW5kZXIoKTsKKyAgICAgICAgICAgIElCaW5kZXIgcGVybSA9IGdldFVyaVBlcm1pc3Npb25Pd25lckZvckFjdGl2aXR5KGFjdGl2aXR5VG9rZW4pOworICAgICAgICAgICAgcmVwbHkud3JpdGVOb0V4Y2VwdGlvbigpOworICAgICAgICAgICAgcmVwbHkud3JpdGVTdHJvbmdCaW5kZXIocGVybSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCiAgICAgICAgIGNhc2UgR1JBTlRfVVJJX1BFUk1JU1NJT05fRlJPTV9PV05FUl9UUkFOU0FDVElPTjogewogICAgICAgICAgICAgZGF0YS5lbmZvcmNlSW50ZXJmYWNlKElBY3Rpdml0eU1hbmFnZXIuZGVzY3JpcHRvcik7CiAgICAgICAgICAgICBJQmluZGVyIG93bmVyID0gZGF0YS5yZWFkU3Ryb25nQmluZGVyKCk7CkBAIC0yNzY2LDYgKzI4MTUsMTQgQEAKICAgICAgICAgICAgIHJlcGx5LndyaXRlTm9FeGNlcHRpb24oKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CisgICAgICAgIGNhc2UgU0VUX1ZSX01PREVfVFJBTlNBQ1RJT046IHsKKyAgICAgICAgICAgIGRhdGEuZW5mb3JjZUludGVyZmFjZShJQWN0aXZpdHlNYW5hZ2VyLmRlc2NyaXB0b3IpOworICAgICAgICAgICAgZmluYWwgSUJpbmRlciB0b2tlbiA9IGRhdGEucmVhZFN0cm9uZ0JpbmRlcigpOworICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBlbmFibGUgPSBkYXRhLnJlYWRJbnQoKSA9PSAxOworICAgICAgICAgICAgc2V0VnJNb2RlKHRva2VuLCBlbmFibGUpOworICAgICAgICAgICAgcmVwbHkud3JpdGVOb0V4Y2VwdGlvbigpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBzdXBlci5vblRyYW5zYWN0KGNvZGUsIGRhdGEsIHJlcGx5LCBmbGFncyk7CkBAIC0zMDcxLDEzICszMTI4LDEyIEBACiAgICAgICAgIGRhdGEucmVjeWNsZSgpOwogICAgICAgICByZXR1cm4gcmVzdWx0ICE9IDA7CiAgICAgfQotICAgIHB1YmxpYyBpbnQgc3RhcnRBY3Rpdml0eUZyb21SZWNlbnRzKGludCB0YXNrSWQsIGludCBsYXVuY2hTdGFja0lkLCBCdW5kbGUgb3B0aW9ucykKKyAgICBwdWJsaWMgaW50IHN0YXJ0QWN0aXZpdHlGcm9tUmVjZW50cyhpbnQgdGFza0lkLCBCdW5kbGUgb3B0aW9ucykKICAgICAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewogICAgICAgICBQYXJjZWwgZGF0YSA9IFBhcmNlbC5vYnRhaW4oKTsKICAgICAgICAgUGFyY2VsIHJlcGx5ID0gUGFyY2VsLm9idGFpbigpOwogICAgICAgICBkYXRhLndyaXRlSW50ZXJmYWNlVG9rZW4oSUFjdGl2aXR5TWFuYWdlci5kZXNjcmlwdG9yKTsKICAgICAgICAgZGF0YS53cml0ZUludCh0YXNrSWQpOwotICAgICAgICBkYXRhLndyaXRlSW50KGxhdW5jaFN0YWNrSWQpOwogICAgICAgICBpZiAob3B0aW9ucyA9PSBudWxsKSB7CiAgICAgICAgICAgICBkYXRhLndyaXRlSW50KDApOwogICAgICAgICB9IGVsc2UgewpAQCAtMzM2NSw2ICszNDIxLDE3IEBACiAgICAgICAgIGRhdGEucmVjeWNsZSgpOwogICAgICAgICByZXBseS5yZWN5Y2xlKCk7CiAgICAgfQorICAgIHB1YmxpYyB2b2lkIGFjdGl2aXR5UmVsYXVuY2hlZChJQmluZGVyIHRva2VuKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uCisgICAgeworICAgICAgICBQYXJjZWwgZGF0YSA9IFBhcmNlbC5vYnRhaW4oKTsKKyAgICAgICAgUGFyY2VsIHJlcGx5ID0gUGFyY2VsLm9idGFpbigpOworICAgICAgICBkYXRhLndyaXRlSW50ZXJmYWNlVG9rZW4oSUFjdGl2aXR5TWFuYWdlci5kZXNjcmlwdG9yKTsKKyAgICAgICAgZGF0YS53cml0ZVN0cm9uZ0JpbmRlcih0b2tlbik7CisgICAgICAgIG1SZW1vdGUudHJhbnNhY3QoQUNUSVZJVFlfUkVMQVVOQ0hFRF9UUkFOU0FDVElPTiwgZGF0YSwgcmVwbHksIDApOworICAgICAgICByZXBseS5yZWFkRXhjZXB0aW9uKCk7CisgICAgICAgIGRhdGEucmVjeWNsZSgpOworICAgICAgICByZXBseS5yZWN5Y2xlKCk7CisgICAgfQogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q2FsbGluZ1BhY2thZ2UoSUJpbmRlciB0b2tlbikgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgUGFyY2VsIGRhdGEgPSBQYXJjZWwub2J0YWluKCk7CkBAIC0zNjc1LDYgKzM3NDIsNTAgQEAKICAgICAgICAgcmVwbHkucmVjeWNsZSgpOwogICAgIH0KICAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCByZXNpemVEb2NrZWRTdGFjayhSZWN0IGRvY2tlZEJvdW5kcywgUmVjdCB0ZW1wRG9ja2VkVGFza0JvdW5kcywKKyAgICAgICAgICAgIFJlY3QgdGVtcERvY2tlZFRhc2tJbnNldEJvdW5kcywKKyAgICAgICAgICAgIFJlY3QgdGVtcE90aGVyVGFza0JvdW5kcywgUmVjdCB0ZW1wT3RoZXJUYXNrSW5zZXRCb3VuZHMpCisgICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uCisgICAgeworICAgICAgICBQYXJjZWwgZGF0YSA9IFBhcmNlbC5vYnRhaW4oKTsKKyAgICAgICAgUGFyY2VsIHJlcGx5ID0gUGFyY2VsLm9idGFpbigpOworICAgICAgICBkYXRhLndyaXRlSW50ZXJmYWNlVG9rZW4oSUFjdGl2aXR5TWFuYWdlci5kZXNjcmlwdG9yKTsKKyAgICAgICAgaWYgKGRvY2tlZEJvdW5kcyAhPSBudWxsKSB7CisgICAgICAgICAgICBkYXRhLndyaXRlSW50KDEpOworICAgICAgICAgICAgZG9ja2VkQm91bmRzLndyaXRlVG9QYXJjZWwoZGF0YSwgMCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkYXRhLndyaXRlSW50KDApOworICAgICAgICB9CisgICAgICAgIGlmICh0ZW1wRG9ja2VkVGFza0JvdW5kcyAhPSBudWxsKSB7CisgICAgICAgICAgICBkYXRhLndyaXRlSW50KDEpOworICAgICAgICAgICAgdGVtcERvY2tlZFRhc2tCb3VuZHMud3JpdGVUb1BhcmNlbChkYXRhLCAwKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRhdGEud3JpdGVJbnQoMCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRlbXBEb2NrZWRUYXNrSW5zZXRCb3VuZHMgIT0gbnVsbCkgeworICAgICAgICAgICAgZGF0YS53cml0ZUludCgxKTsKKyAgICAgICAgICAgIHRlbXBEb2NrZWRUYXNrSW5zZXRCb3VuZHMud3JpdGVUb1BhcmNlbChkYXRhLCAwKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRhdGEud3JpdGVJbnQoMCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRlbXBPdGhlclRhc2tCb3VuZHMgIT0gbnVsbCkgeworICAgICAgICAgICAgZGF0YS53cml0ZUludCgxKTsKKyAgICAgICAgICAgIHRlbXBPdGhlclRhc2tCb3VuZHMud3JpdGVUb1BhcmNlbChkYXRhLCAwKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRhdGEud3JpdGVJbnQoMCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRlbXBPdGhlclRhc2tJbnNldEJvdW5kcyAhPSBudWxsKSB7CisgICAgICAgICAgICBkYXRhLndyaXRlSW50KDEpOworICAgICAgICAgICAgdGVtcE90aGVyVGFza0luc2V0Qm91bmRzLndyaXRlVG9QYXJjZWwoZGF0YSwgMCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkYXRhLndyaXRlSW50KDApOworICAgICAgICB9CisgICAgICAgIG1SZW1vdGUudHJhbnNhY3QoUkVTSVpFX0RPQ0tFRF9TVEFDS19UUkFOU0FDVElPTiwgZGF0YSwgcmVwbHksIDApOworICAgICAgICByZXBseS5yZWFkRXhjZXB0aW9uKCk7CisgICAgICAgIGRhdGEucmVjeWNsZSgpOworICAgICAgICByZXBseS5yZWN5Y2xlKCk7CisgICAgfQorICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIHBvc2l0aW9uVGFza0luU3RhY2soaW50IHRhc2tJZCwgaW50IHN0YWNrSWQsIGludCBwb3NpdGlvbikgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgUGFyY2VsIGRhdGEgPSBQYXJjZWwub2J0YWluKCk7CkBAIC01MTEzLDYgKzUyMjQsMTkgQEAKICAgICAgICAgcmV0dXJuIHJlczsKICAgICB9CiAKKyAgICBwdWJsaWMgSUJpbmRlciBnZXRVcmlQZXJtaXNzaW9uT3duZXJGb3JBY3Rpdml0eShJQmluZGVyIGFjdGl2aXR5VG9rZW4pIHRocm93cyBSZW1vdGVFeGNlcHRpb24geworICAgICAgICBQYXJjZWwgZGF0YSA9IFBhcmNlbC5vYnRhaW4oKTsKKyAgICAgICAgUGFyY2VsIHJlcGx5ID0gUGFyY2VsLm9idGFpbigpOworICAgICAgICBkYXRhLndyaXRlSW50ZXJmYWNlVG9rZW4oSUFjdGl2aXR5TWFuYWdlci5kZXNjcmlwdG9yKTsKKyAgICAgICAgZGF0YS53cml0ZVN0cm9uZ0JpbmRlcihhY3Rpdml0eVRva2VuKTsKKyAgICAgICAgbVJlbW90ZS50cmFuc2FjdChHRVRfVVJJX1BFUk1JU1NJT05fT1dORVJfRk9SX0FDVElWSVRZX1RSQU5TQUNUSU9OLCBkYXRhLCByZXBseSwgMCk7CisgICAgICAgIHJlcGx5LnJlYWRFeGNlcHRpb24oKTsKKyAgICAgICAgSUJpbmRlciByZXMgPSByZXBseS5yZWFkU3Ryb25nQmluZGVyKCk7CisgICAgICAgIGRhdGEucmVjeWNsZSgpOworICAgICAgICByZXBseS5yZWN5Y2xlKCk7CisgICAgICAgIHJldHVybiByZXM7CisgICAgfQorCiAgICAgcHVibGljIHZvaWQgZ3JhbnRVcmlQZXJtaXNzaW9uRnJvbU93bmVyKElCaW5kZXIgb3duZXIsIGludCBmcm9tVWlkLCBTdHJpbmcgdGFyZ2V0UGtnLAogICAgICAgICAgICAgVXJpIHVyaSwgaW50IG1vZGUsIGludCBzb3VyY2VVc2VySWQsIGludCB0YXJnZXRVc2VySWQpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewogICAgICAgICBQYXJjZWwgZGF0YSA9IFBhcmNlbC5vYnRhaW4oKTsKQEAgLTU4OTYsNiArNjAyMCwxOCBAQAogICAgICAgICByZXR1cm4gcmVzOwogICAgIH0KIAorICAgIHB1YmxpYyB2b2lkIHNldFZyTW9kZShJQmluZGVyIHRva2VuLCBib29sZWFuIGVuYWJsZWQpIHRocm93cyBSZW1vdGVFeGNlcHRpb24geworICAgICAgICBQYXJjZWwgZGF0YSA9IFBhcmNlbC5vYnRhaW4oKTsKKyAgICAgICAgUGFyY2VsIHJlcGx5ID0gUGFyY2VsLm9idGFpbigpOworICAgICAgICBkYXRhLndyaXRlSW50ZXJmYWNlVG9rZW4oSUFjdGl2aXR5TWFuYWdlci5kZXNjcmlwdG9yKTsKKyAgICAgICAgZGF0YS53cml0ZVN0cm9uZ0JpbmRlcih0b2tlbik7CisgICAgICAgIGRhdGEud3JpdGVJbnQoZW5hYmxlZCA/IDEgOiAwKTsKKyAgICAgICAgbVJlbW90ZS50cmFuc2FjdChTRVRfVlJfTU9ERV9UUkFOU0FDVElPTiwgZGF0YSwgcmVwbHksIDApOworICAgICAgICByZXBseS5yZWFkRXhjZXB0aW9uKCk7CisgICAgICAgIGRhdGEucmVjeWNsZSgpOworICAgICAgICByZXBseS5yZWN5Y2xlKCk7CisgICAgfQorCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIElBY3Rpdml0eUNvbnRhaW5lciBjcmVhdGVTdGFja09uRGlzcGxheShpbnQgZGlzcGxheUlkKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKICAgICAgICAgUGFyY2VsIGRhdGEgPSBQYXJjZWwub2J0YWluKCk7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQWN0aXZpdHlPcHRpb25zLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQWN0aXZpdHlPcHRpb25zLmphdmEKaW5kZXggY2VlMWFhNS4uZTU5NmE2OCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0FjdGl2aXR5T3B0aW9ucy5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9BY3Rpdml0eU9wdGlvbnMuamF2YQpAQCAtMTcsNiArMTcsNyBAQAogcGFja2FnZSBhbmRyb2lkLmFwcDsKIAogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuRE9DS0VEX1NUQUNLX0NSRUFURV9NT0RFX1RPUF9PUl9MRUZUOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuU3RhY2tJZC5JTlZBTElEX1NUQUNLX0lEOwogCiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKQEAgLTY3LDcgKzY4LDggQEAKICAgICAgKiBUaGUgYm91bmRzICh3aW5kb3cgc2l6ZSkgdGhhdCB0aGUgYWN0aXZpdHkgc2hvdWxkIGJlIGxhdW5jaGVkIGluLiBTZXQgdG8gbnVsbCBleHBsaWNpdGx5IGZvcgogICAgICAqIGZ1bGwgc2NyZWVuLiBJZiB0aGUga2V5IGlzIG5vdCBmb3VuZCwgcHJldmlvdXMgYm91bmRzIHdpbGwgYmUgcHJlc2VydmVkLgogICAgICAqIE5PVEU6IFRoaXMgdmFsdWUgaXMgaWdub3JlZCBvbiBkZXZpY2VzIHRoYXQgZG9uJ3QgaGF2ZQotICAgICAqIHtAbGluayBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIjRkVBVFVSRV9GUkVFRk9STV9XSU5ET1dfTUFOQUdFTUVOVH0gZW5hYmxlZC4KKyAgICAgKiB7QGxpbmsgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyI0ZFQVRVUkVfRlJFRUZPUk1fV0lORE9XX01BTkFHRU1FTlR9IG9yCisgICAgICoge0BsaW5rIGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlciNGRUFUVVJFX1BJQ1RVUkVfSU5fUElDVFVSRX0gZW5hYmxlZC4KICAgICAgKiBAaGlkZQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWV9MQVVOQ0hfQk9VTkRTID0gImFuZHJvaWQ6YWN0aXZpdHkubGF1bmNoQm91bmRzIjsKQEAgLTE0NSw2ICsxNDcsMTIgQEAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZX0FOSU1fU1BFQ1MgPSAiYW5kcm9pZDphY3Rpdml0eS5hbmltU3BlY3MiOwogCiAgICAgLyoqCisgICAgICogVGhlIHN0YWNrIGlkIHRoZSBhY3Rpdml0eSBzaG91bGQgYmUgbGF1bmNoZWQgaW50by4KKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfTEFVTkNIX1NUQUNLX0lEID0gImFuZHJvaWQuYWN0aXZpdHkubGF1bmNoU3RhY2tJZCI7CisKKyAgICAvKioKICAgICAgKiBXaGVyZSB0aGUgZG9ja2VkIHN0YWNrIHNob3VsZCBiZSBwb3NpdGlvbmVkLgogICAgICAqIEBoaWRlCiAgICAgICovCkBAIC0yMTUsNiArMjIzLDcgQEAKICAgICBwcml2YXRlIGludCBtUmVzdWx0Q29kZTsKICAgICBwcml2YXRlIGludCBtRXhpdENvb3JkaW5hdG9ySW5kZXg7CiAgICAgcHJpdmF0ZSBQZW5kaW5nSW50ZW50IG1Vc2FnZVRpbWVSZXBvcnQ7CisgICAgcHJpdmF0ZSBpbnQgbUxhdW5jaFN0YWNrSWQgPSBJTlZBTElEX1NUQUNLX0lEOwogICAgIHByaXZhdGUgaW50IG1Eb2NrQ3JlYXRlTW9kZSA9IERPQ0tFRF9TVEFDS19DUkVBVEVfTU9ERV9UT1BfT1JfTEVGVDsKICAgICBwcml2YXRlIEFwcFRyYW5zaXRpb25BbmltYXRpb25TcGVjIG1BbmltU3BlY3NbXTsKIApAQCAtNzU0LDYgKzc2Myw3IEBACiAgICAgICAgICAgICAgICAgbUV4aXRDb29yZGluYXRvckluZGV4ID0gb3B0cy5nZXRJbnQoS0VZX0VYSVRfQ09PUkRJTkFUT1JfSU5ERVgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIG1MYXVuY2hTdGFja0lkID0gb3B0cy5nZXRJbnQoS0VZX0xBVU5DSF9TVEFDS19JRCwgSU5WQUxJRF9TVEFDS19JRCk7CiAgICAgICAgIG1Eb2NrQ3JlYXRlTW9kZSA9IG9wdHMuZ2V0SW50KEtFWV9ET0NLX0NSRUFURV9NT0RFLCBET0NLRURfU1RBQ0tfQ1JFQVRFX01PREVfVE9QX09SX0xFRlQpOwogICAgICAgICBpZiAob3B0cy5jb250YWluc0tleShLRVlfQU5JTV9TUEVDUykpIHsKICAgICAgICAgICAgIFBhcmNlbGFibGVbXSBzcGVjcyA9IG9wdHMuZ2V0UGFyY2VsYWJsZUFycmF5KEtFWV9BTklNX1NQRUNTKTsKQEAgLTkwMSw3ICs5MTEsMTkgQEAKICAgICB9CiAKICAgICAvKiogQGhpZGUgKi8KLSAgICBwdWJsaWMgaW50IGdldERvY2tDcmVhdGVNb2RlKCkgeyByZXR1cm4gbURvY2tDcmVhdGVNb2RlOyB9CisgICAgcHVibGljIGludCBnZXRMYXVuY2hTdGFja0lkKCkgeworICAgICAgICByZXR1cm4gbUxhdW5jaFN0YWNrSWQ7CisgICAgfQorCisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIHZvaWQgc2V0TGF1bmNoU3RhY2tJZChpbnQgbGF1bmNoU3RhY2tJZCkgeworICAgICAgICBtTGF1bmNoU3RhY2tJZCA9IGxhdW5jaFN0YWNrSWQ7CisgICAgfQorCisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIGludCBnZXREb2NrQ3JlYXRlTW9kZSgpIHsKKyAgICAgICAgcmV0dXJuIG1Eb2NrQ3JlYXRlTW9kZTsKKyAgICB9CiAKICAgICAvKiogQGhpZGUgKi8KICAgICBwdWJsaWMgdm9pZCBzZXREb2NrQ3JlYXRlTW9kZShpbnQgZG9ja0NyZWF0ZU1vZGUpIHsKQEAgLTEwNDksNiArMTA3MSw3IEBACiAgICAgICAgICAgICAgICAgYi5wdXRJbnQoS0VZX0VYSVRfQ09PUkRJTkFUT1JfSU5ERVgsIG1FeGl0Q29vcmRpbmF0b3JJbmRleCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgYi5wdXRJbnQoS0VZX0xBVU5DSF9TVEFDS19JRCwgbUxhdW5jaFN0YWNrSWQpOwogICAgICAgICBiLnB1dEludChLRVlfRE9DS19DUkVBVEVfTU9ERSwgbURvY2tDcmVhdGVNb2RlKTsKICAgICAgICAgaWYgKG1BbmltU3BlY3MgIT0gbnVsbCkgewogICAgICAgICAgICAgYi5wdXRQYXJjZWxhYmxlQXJyYXkoS0VZX0FOSU1fU1BFQ1MsIG1BbmltU3BlY3MpOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0FjdGl2aXR5VGhyZWFkLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQWN0aXZpdHlUaHJlYWQuamF2YQppbmRleCAzOTYyYWJkLi4xNzdmYWJlIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQWN0aXZpdHlUaHJlYWQuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQWN0aXZpdHlUaHJlYWQuamF2YQpAQCAtMTIzLDYgKzEyMyw3IEBACiBpbXBvcnQgamF2YS5uZXQuSW5ldEFkZHJlc3M7CiBpbXBvcnQgamF2YS50ZXh0LkRhdGVGb3JtYXQ7CiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKIGltcG9ydCBqYXZhLnV0aWwuTWFwOwpAQCAtODUxLDggKzg1MiwxMyBAQAogICAgICAgICAgICAgICAgIC8vIFRlbGwgdGhlIFZNUnVudGltZSBhYm91dCB0aGUgYXBwbGljYXRpb24sIHVubGVzcyBpdCBpcyBzaGFyZWQKICAgICAgICAgICAgICAgICAvLyBpbnNpZGUgYSBwcm9jZXNzLgogICAgICAgICAgICAgICAgIGlmICghc2hhcmFibGUpIHsKKyAgICAgICAgICAgICAgICAgICAgZmluYWwgTGlzdDxTdHJpbmc+IGNvZGVQYXRocyA9IG5ldyBBcnJheUxpc3Q8PigpOworICAgICAgICAgICAgICAgICAgICBjb2RlUGF0aHMuYWRkKGFwcEluZm8uc291cmNlRGlyKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFwcEluZm8uc3BsaXRTb3VyY2VEaXJzICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIENvbGxlY3Rpb25zLmFkZEFsbChjb2RlUGF0aHMsIGFwcEluZm8uc3BsaXRTb3VyY2VEaXJzKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBWTVJ1bnRpbWUucmVnaXN0ZXJBcHBJbmZvKGFwcEluZm8ucGFja2FnZU5hbWUsIGFwcEluZm8uZGF0YURpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwSW5mby5wcm9jZXNzTmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZVBhdGhzLnRvQXJyYXkobmV3IFN0cmluZ1tjb2RlUGF0aHMuc2l6ZSgpXSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIApAQCAtNDE1NSw2ICs0MTYxLDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci5wZW5kaW5nSW50ZW50cyA9IHBlbmRpbmdOZXdJbnRlbnRzOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gRm9yIGVhY2ggcmVsYXVuY2ggcmVxdWVzdCwgYWN0aXZpdHkgbWFuYWdlciBleHBlY3RzIGFuIGFuc3dlcgorICAgICAgICAgICAgICAgICAgICBpZiAoIXIub25seUxvY2FsUmVxdWVzdCAmJiBmcm9tU2VydmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5TWFuYWdlck5hdGl2ZS5nZXREZWZhdWx0KCkuYWN0aXZpdHlSZWxhdW5jaGVkKHRva2VuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC00MjY5LDYgKzQyODQsMTMgQEAKICAgICAgICAgQWN0aXZpdHlDbGllbnRSZWNvcmQgciA9IG1BY3Rpdml0aWVzLmdldCh0bXAudG9rZW4pOwogICAgICAgICBpZiAoREVCVUdfQ09ORklHVVJBVElPTikgU2xvZy52KFRBRywgIkhhbmRsaW5nIHJlbGF1bmNoIG9mICIgKyByKTsKICAgICAgICAgaWYgKHIgPT0gbnVsbCkgeworICAgICAgICAgICAgaWYgKCF0bXAub25seUxvY2FsUmVxdWVzdCkgeworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5TWFuYWdlck5hdGl2ZS5nZXREZWZhdWx0KCkuYWN0aXZpdHlSZWxhdW5jaGVkKHRtcC50b2tlbik7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHN5c3RlbSBwcm9jZXNzIGhhcyBkaWVkLCBpdCdzIGdhbWUgb3ZlciBmb3IgZXZlcnlvbmUuCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTQzMTQsNiArNDMzNiwxNCBAQAogICAgICAgICByLm92ZXJyaWRlQ29uZmlnID0gdG1wLm92ZXJyaWRlQ29uZmlnOwogCiAgICAgICAgIGhhbmRsZUxhdW5jaEFjdGl2aXR5KHIsIGN1cnJlbnRJbnRlbnQpOworCisgICAgICAgIGlmICghdG1wLm9ubHlMb2NhbFJlcXVlc3QpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgQWN0aXZpdHlNYW5hZ2VyTmF0aXZlLmdldERlZmF1bHQoKS5hY3Rpdml0eVJlbGF1bmNoZWQoci50b2tlbik7CisgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIC8vIElmIHRoZSBzeXN0ZW0gcHJvY2VzcyBoYXMgZGllZCwgaXQncyBnYW1lIG92ZXIgZm9yIGV2ZXJ5b25lLgorICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGNhbGxDYWxsQWN0aXZpdHlPblNhdmVJbnN0YW5jZVN0YXRlKEFjdGl2aXR5Q2xpZW50UmVjb3JkIHIpIHsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9BcHBsaWNhdGlvbkxvYWRlcnMuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9BcHBsaWNhdGlvbkxvYWRlcnMuamF2YQppbmRleCBkZGIyZDQ2Li43ZDBkMWI0IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQXBwbGljYXRpb25Mb2FkZXJzLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0FwcGxpY2F0aW9uTG9hZGVycy5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiAgICAgICAgIHJldHVybiBnQXBwbGljYXRpb25Mb2FkZXJzOwogICAgIH0KIAotICAgIHB1YmxpYyBDbGFzc0xvYWRlciBnZXRDbGFzc0xvYWRlcihTdHJpbmcgemlwLCBTdHJpbmcgbGlicmFyeVNlYXJjaFBhdGgsCisgICAgcHVibGljIENsYXNzTG9hZGVyIGdldENsYXNzTG9hZGVyKFN0cmluZyB6aXAsIGJvb2xlYW4gaXNCdW5kbGVkLCBTdHJpbmcgbGlicmFyeVNlYXJjaFBhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBsaWJyYXJ5UGVybWl0dGVkUGF0aCwgQ2xhc3NMb2FkZXIgcGFyZW50KQogICAgIHsKICAgICAgICAgLyoKQEAgLTU2LDcgKzU2LDggQEAKICAgICAKICAgICAgICAgICAgICAgICBUcmFjZS50cmFjZUJlZ2luKFRyYWNlLlRSQUNFX1RBR19BQ1RJVklUWV9NQU5BR0VSLCB6aXApOwogICAgICAgICAgICAgICAgIFBhdGhDbGFzc0xvYWRlciBwYXRoQ2xhc3Nsb2FkZXIgPQotICAgICAgICAgICAgICAgICAgICBuZXcgUGF0aENsYXNzTG9hZGVyKHppcCwgbGlicmFyeVNlYXJjaFBhdGgsIGxpYnJhcnlQZXJtaXR0ZWRQYXRoLCBwYXJlbnQpOworICAgICAgICAgICAgICAgICAgICBuZXcgUGF0aENsYXNzTG9hZGVyKHppcCwgaXNCdW5kbGVkLCBsaWJyYXJ5U2VhcmNoUGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5UGVybWl0dGVkUGF0aCwgcGFyZW50KTsKICAgICAgICAgICAgICAgICBUcmFjZS50cmFjZUVuZChUcmFjZS5UUkFDRV9UQUdfQUNUSVZJVFlfTUFOQUdFUik7CiAKICAgICAgICAgICAgICAgICBtTG9hZGVycy5wdXQoemlwLCBwYXRoQ2xhc3Nsb2FkZXIpOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0FwcGxpY2F0aW9uUGFja2FnZU1hbmFnZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9BcHBsaWNhdGlvblBhY2thZ2VNYW5hZ2VyLmphdmEKaW5kZXggNzc3MjFlNi4uZTM0YjFhYyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0FwcGxpY2F0aW9uUGFja2FnZU1hbmFnZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQXBwbGljYXRpb25QYWNrYWdlTWFuYWdlci5qYXZhCkBAIC00Miw3ICs0Miw2IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLkluc3RydW1lbnRhdGlvbkluZm87CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLkludGVudEZpbHRlclZlcmlmaWNhdGlvbkluZm87CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLktleVNldDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uTWFuaWZlc3REaWdlc3Q7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VJbmZvOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlSW5zdGFsbGVyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlSXRlbUluZm87CkBAIC0yMjksNyArMjI4LDcgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldFBhY2thZ2VVaWQoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgdXNlckhhbmRsZSkKKyAgICBwdWJsaWMgaW50IGdldFBhY2thZ2VVaWRBc1VzZXIoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgdXNlckhhbmRsZSkKICAgICAgICAgICAgIHRocm93cyBOYW1lTm90Rm91bmRFeGNlcHRpb24gewogICAgICAgICB0cnkgewogICAgICAgICAgICAgaW50IHVpZCA9IG1QTS5nZXRQYWNrYWdlVWlkKHBhY2thZ2VOYW1lLCB1c2VySGFuZGxlKTsKQEAgLTU5MSwxMiArNTkwLDEyIEBACiAgICAgQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIExpc3Q8UGFja2FnZUluZm8+IGdldEluc3RhbGxlZFBhY2thZ2VzKGludCBmbGFncykgewotICAgICAgICByZXR1cm4gZ2V0SW5zdGFsbGVkUGFja2FnZXMoZmxhZ3MsIG1Db250ZXh0LmdldFVzZXJJZCgpKTsKKyAgICAgICAgcmV0dXJuIGdldEluc3RhbGxlZFBhY2thZ2VzQXNVc2VyKGZsYWdzLCBtQ29udGV4dC5nZXRVc2VySWQoKSk7CiAgICAgfQogCiAgICAgLyoqIEBoaWRlICovCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIExpc3Q8UGFja2FnZUluZm8+IGdldEluc3RhbGxlZFBhY2thZ2VzKGludCBmbGFncywgaW50IHVzZXJJZCkgeworICAgIHB1YmxpYyBMaXN0PFBhY2thZ2VJbmZvPiBnZXRJbnN0YWxsZWRQYWNrYWdlc0FzVXNlcihpbnQgZmxhZ3MsIGludCB1c2VySWQpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFBhcmNlbGVkTGlzdFNsaWNlPFBhY2thZ2VJbmZvPiBzbGljZSA9IG1QTS5nZXRJbnN0YWxsZWRQYWNrYWdlcyhmbGFncywgdXNlcklkKTsKICAgICAgICAgICAgIHJldHVybiBzbGljZS5nZXRMaXN0KCk7CkBAIC03ODAsNyArNzc5LDcgQEAKICAgICAgKiBAaGlkZQogICAgICAqLwogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBMaXN0PFJlc29sdmVJbmZvPiBxdWVyeUJyb2FkY2FzdFJlY2VpdmVycyhJbnRlbnQgaW50ZW50LCBpbnQgZmxhZ3MsIGludCB1c2VySWQpIHsKKyAgICBwdWJsaWMgTGlzdDxSZXNvbHZlSW5mbz4gcXVlcnlCcm9hZGNhc3RSZWNlaXZlcnNBc1VzZXIoSW50ZW50IGludGVudCwgaW50IGZsYWdzLCBpbnQgdXNlcklkKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXR1cm4gbVBNLnF1ZXJ5SW50ZW50UmVjZWl2ZXJzKAogICAgICAgICAgICAgICAgIGludGVudCwKQEAgLTc5NCw3ICs3OTMsNyBAQAogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIExpc3Q8UmVzb2x2ZUluZm8+IHF1ZXJ5QnJvYWRjYXN0UmVjZWl2ZXJzKEludGVudCBpbnRlbnQsIGludCBmbGFncykgewotICAgICAgICByZXR1cm4gcXVlcnlCcm9hZGNhc3RSZWNlaXZlcnMoaW50ZW50LCBmbGFncywgbUNvbnRleHQuZ2V0VXNlcklkKCkpOworICAgICAgICByZXR1cm4gcXVlcnlCcm9hZGNhc3RSZWNlaXZlcnNBc1VzZXIoaW50ZW50LCBmbGFncywgbUNvbnRleHQuZ2V0VXNlcklkKCkpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpAQCAtMTQyMSw3ICsxNDIwLDcgQEAKICAgICBwdWJsaWMgdm9pZCBpbnN0YWxsUGFja2FnZShVcmkgcGFja2FnZVVSSSwgSVBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXIgb2JzZXJ2ZXIsIGludCBmbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgaW5zdGFsbGVyUGFja2FnZU5hbWUpIHsKICAgICAgICAgZmluYWwgVmVyaWZpY2F0aW9uUGFyYW1zIHZlcmlmaWNhdGlvblBhcmFtcyA9IG5ldyBWZXJpZmljYXRpb25QYXJhbXMobnVsbCwgbnVsbCwKLSAgICAgICAgICAgICAgICBudWxsLCBWZXJpZmljYXRpb25QYXJhbXMuTk9fVUlELCBudWxsKTsKKyAgICAgICAgICAgICAgICBudWxsLCBWZXJpZmljYXRpb25QYXJhbXMuTk9fVUlEKTsKICAgICAgICAgaW5zdGFsbENvbW1vbihwYWNrYWdlVVJJLCBuZXcgTGVnYWN5UGFja2FnZUluc3RhbGxPYnNlcnZlcihvYnNlcnZlciksIGZsYWdzLAogICAgICAgICAgICAgICAgIGluc3RhbGxlclBhY2thZ2VOYW1lLCB2ZXJpZmljYXRpb25QYXJhbXMsIG51bGwsIG1Db250ZXh0LmdldFVzZXJJZCgpKTsKICAgICB9CkBAIC0xNDI5LDkgKzE0MjgsOSBAQAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIGluc3RhbGxQYWNrYWdlV2l0aFZlcmlmaWNhdGlvbihVcmkgcGFja2FnZVVSSSwgSVBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXIgb2JzZXJ2ZXIsCiAgICAgICAgICAgICBpbnQgZmxhZ3MsIFN0cmluZyBpbnN0YWxsZXJQYWNrYWdlTmFtZSwgVXJpIHZlcmlmaWNhdGlvblVSSSwKLSAgICAgICAgICAgIE1hbmlmZXN0RGlnZXN0IG1hbmlmZXN0RGlnZXN0LCBDb250YWluZXJFbmNyeXB0aW9uUGFyYW1zIGVuY3J5cHRpb25QYXJhbXMpIHsKKyAgICAgICAgICAgIENvbnRhaW5lckVuY3J5cHRpb25QYXJhbXMgZW5jcnlwdGlvblBhcmFtcykgewogICAgICAgICBmaW5hbCBWZXJpZmljYXRpb25QYXJhbXMgdmVyaWZpY2F0aW9uUGFyYW1zID0gbmV3IFZlcmlmaWNhdGlvblBhcmFtcyh2ZXJpZmljYXRpb25VUkksIG51bGwsCi0gICAgICAgICAgICAgICAgbnVsbCwgVmVyaWZpY2F0aW9uUGFyYW1zLk5PX1VJRCwgbWFuaWZlc3REaWdlc3QpOworICAgICAgICAgICAgICAgIG51bGwsIFZlcmlmaWNhdGlvblBhcmFtcy5OT19VSUQpOwogICAgICAgICBpbnN0YWxsQ29tbW9uKHBhY2thZ2VVUkksIG5ldyBMZWdhY3lQYWNrYWdlSW5zdGFsbE9ic2VydmVyKG9ic2VydmVyKSwgZmxhZ3MsCiAgICAgICAgICAgICAgICAgaW5zdGFsbGVyUGFja2FnZU5hbWUsIHZlcmlmaWNhdGlvblBhcmFtcywgZW5jcnlwdGlvblBhcmFtcywgbUNvbnRleHQuZ2V0VXNlcklkKCkpOwogICAgIH0KQEAgLTE0NTUsNyArMTQ1NCw3IEBACiAgICAgcHVibGljIHZvaWQgaW5zdGFsbFBhY2thZ2VBc1VzZXIoVXJpIHBhY2thZ2VVUkksIFBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXIgb2JzZXJ2ZXIsIGludCBmbGFncywKICAgICAgICAgICAgICAgIFN0cmluZyBpbnN0YWxsZXJQYWNrYWdlTmFtZSwgaW50IHVzZXJJZCkgewogICAgICAgICBmaW5hbCBWZXJpZmljYXRpb25QYXJhbXMgdmVyaWZpY2F0aW9uUGFyYW1zID0gbmV3IFZlcmlmaWNhdGlvblBhcmFtcyhudWxsLCBudWxsLAotICAgICAgICAgICAgICAgIG51bGwsIFZlcmlmaWNhdGlvblBhcmFtcy5OT19VSUQsIG51bGwpOworICAgICAgICAgICAgICAgIG51bGwsIFZlcmlmaWNhdGlvblBhcmFtcy5OT19VSUQpOwogICAgICAgICBpbnN0YWxsQ29tbW9uKHBhY2thZ2VVUkksIG9ic2VydmVyLCBmbGFncywgaW5zdGFsbGVyUGFja2FnZU5hbWUsIHZlcmlmaWNhdGlvblBhcmFtcywgbnVsbCwKICAgICAgICAgICAgICAgICB1c2VySWQpOwogICAgIH0KQEAgLTE0NjMsMTAgKzE0NjIsMTAgQEAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBpbnN0YWxsUGFja2FnZVdpdGhWZXJpZmljYXRpb24oVXJpIHBhY2thZ2VVUkksCiAgICAgICAgICAgICBQYWNrYWdlSW5zdGFsbE9ic2VydmVyIG9ic2VydmVyLCBpbnQgZmxhZ3MsIFN0cmluZyBpbnN0YWxsZXJQYWNrYWdlTmFtZSwKLSAgICAgICAgICAgIFVyaSB2ZXJpZmljYXRpb25VUkksIE1hbmlmZXN0RGlnZXN0IG1hbmlmZXN0RGlnZXN0LAorICAgICAgICAgICAgVXJpIHZlcmlmaWNhdGlvblVSSSwKICAgICAgICAgICAgIENvbnRhaW5lckVuY3J5cHRpb25QYXJhbXMgZW5jcnlwdGlvblBhcmFtcykgewogICAgICAgICBmaW5hbCBWZXJpZmljYXRpb25QYXJhbXMgdmVyaWZpY2F0aW9uUGFyYW1zID0gbmV3IFZlcmlmaWNhdGlvblBhcmFtcyh2ZXJpZmljYXRpb25VUkksIG51bGwsCi0gICAgICAgICAgICAgICAgbnVsbCwgVmVyaWZpY2F0aW9uUGFyYW1zLk5PX1VJRCwgbWFuaWZlc3REaWdlc3QpOworICAgICAgICAgICAgICAgIG51bGwsIFZlcmlmaWNhdGlvblBhcmFtcy5OT19VSUQpOwogICAgICAgICBpbnN0YWxsQ29tbW9uKHBhY2thZ2VVUkksIG9ic2VydmVyLCBmbGFncywgaW5zdGFsbGVyUGFja2FnZU5hbWUsIHZlcmlmaWNhdGlvblBhcmFtcywKICAgICAgICAgICAgICAgICBlbmNyeXB0aW9uUGFyYW1zLCBtQ29udGV4dC5nZXRVc2VySWQoKSk7CiAgICAgfQpAQCAtMTU0Nyw3ICsxNTQ2LDcgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldEludGVudFZlcmlmaWNhdGlvblN0YXR1cyhTdHJpbmcgcGFja2FnZU5hbWUsIGludCB1c2VySWQpIHsKKyAgICBwdWJsaWMgaW50IGdldEludGVudFZlcmlmaWNhdGlvblN0YXR1c0FzVXNlcihTdHJpbmcgcGFja2FnZU5hbWUsIGludCB1c2VySWQpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJldHVybiBtUE0uZ2V0SW50ZW50VmVyaWZpY2F0aW9uU3RhdHVzKHBhY2thZ2VOYW1lLCB1c2VySWQpOwogICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewpAQCAtMTU1Nyw3ICsxNTU2LDcgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiB1cGRhdGVJbnRlbnRWZXJpZmljYXRpb25TdGF0dXMoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgc3RhdHVzLCBpbnQgdXNlcklkKSB7CisgICAgcHVibGljIGJvb2xlYW4gdXBkYXRlSW50ZW50VmVyaWZpY2F0aW9uU3RhdHVzQXNVc2VyKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHN0YXR1cywgaW50IHVzZXJJZCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmV0dXJuIG1QTS51cGRhdGVJbnRlbnRWZXJpZmljYXRpb25TdGF0dXMocGFja2FnZU5hbWUsIHN0YXR1cywgdXNlcklkKTsKICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKQEAgLTE1ODcsNyArMTU4Niw3IEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXREZWZhdWx0QnJvd3NlclBhY2thZ2VOYW1lKGludCB1c2VySWQpIHsKKyAgICBwdWJsaWMgU3RyaW5nIGdldERlZmF1bHRCcm93c2VyUGFja2FnZU5hbWVBc1VzZXIoaW50IHVzZXJJZCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmV0dXJuIG1QTS5nZXREZWZhdWx0QnJvd3NlclBhY2thZ2VOYW1lKHVzZXJJZCk7CiAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CkBAIC0xNTk3LDcgKzE1OTYsNyBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIHNldERlZmF1bHRCcm93c2VyUGFja2FnZU5hbWUoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgdXNlcklkKSB7CisgICAgcHVibGljIGJvb2xlYW4gc2V0RGVmYXVsdEJyb3dzZXJQYWNrYWdlTmFtZUFzVXNlcihTdHJpbmcgcGFja2FnZU5hbWUsIGludCB1c2VySWQpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJldHVybiBtUE0uc2V0RGVmYXVsdEJyb3dzZXJQYWNrYWdlTmFtZShwYWNrYWdlTmFtZSwgdXNlcklkKTsKICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKQEAgLTE4NjgsNyArMTg2Nyw3IEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgZ2V0UGFja2FnZVNpemVJbmZvKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHVzZXJIYW5kbGUsCisgICAgcHVibGljIHZvaWQgZ2V0UGFja2FnZVNpemVJbmZvQXNVc2VyKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHVzZXJIYW5kbGUsCiAgICAgICAgICAgICBJUGFja2FnZVN0YXRzT2JzZXJ2ZXIgb2JzZXJ2ZXIpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIG1QTS5nZXRQYWNrYWdlU2l6ZUluZm8ocGFja2FnZU5hbWUsIHVzZXJIYW5kbGUsIG9ic2VydmVyKTsKQEAgLTE5MTUsNyArMTkxNCw3IEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgYWRkUHJlZmVycmVkQWN0aXZpdHkoSW50ZW50RmlsdGVyIGZpbHRlciwgaW50IG1hdGNoLAorICAgIHB1YmxpYyB2b2lkIGFkZFByZWZlcnJlZEFjdGl2aXR5QXNVc2VyKEludGVudEZpbHRlciBmaWx0ZXIsIGludCBtYXRjaCwKICAgICAgICAgICAgIENvbXBvbmVudE5hbWVbXSBzZXQsIENvbXBvbmVudE5hbWUgYWN0aXZpdHksIGludCB1c2VySWQpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIG1QTS5hZGRQcmVmZXJyZWRBY3Rpdml0eShmaWx0ZXIsIG1hdGNoLCBzZXQsIGFjdGl2aXR5LCB1c2VySWQpOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0JhY2tTdGFja1JlY29yZC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0JhY2tTdGFja1JlY29yZC5qYXZhCmluZGV4IDk4NGExODYuLmExNDdjYzggMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9CYWNrU3RhY2tSZWNvcmQuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQmFja1N0YWNrUmVjb3JkLmphdmEKQEAgLTcxOSw3ICs3MTksNyBAQAogICAgICAgICAgICAgICAgICAgICBGcmFnbWVudCBmID0gb3AuZnJhZ21lbnQ7CiAgICAgICAgICAgICAgICAgICAgIGludCBjb250YWluZXJJZCA9IGYubUNvbnRhaW5lcklkOwogICAgICAgICAgICAgICAgICAgICBpZiAobU1hbmFnZXIubUFkZGVkICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbU1hbmFnZXIubUFkZGVkLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gbU1hbmFnZXIubUFkZGVkLnNpemUoKSAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJhZ21lbnQgb2xkID0gbU1hbmFnZXIubUFkZGVkLmdldChpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRnJhZ21lbnRNYW5hZ2VySW1wbC5ERUJVRykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cudihUQUcsCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvRGF0ZVBpY2tlckRpYWxvZy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0RhdGVQaWNrZXJEaWFsb2cuamF2YQppbmRleCAzZmJiZGZmLi44ZDdmMzQ3IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvRGF0ZVBpY2tlckRpYWxvZy5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9EYXRlUGlja2VyRGlhbG9nLmphdmEKQEAgLTE2LDYgKzE2LDkgQEAKIAogcGFja2FnZSBhbmRyb2lkLmFwcDsKIAoraW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5Ob25OdWxsOworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uU3R5bGVSZXM7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkRpYWxvZ0ludGVyZmFjZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuRGlhbG9nSW50ZXJmYWNlLk9uQ2xpY2tMaXN0ZW5lcjsKQEAgLTM1LDk1ICszOCwxMjYgQEAKIAogLyoqCiAgKiBBIHNpbXBsZSBkaWFsb2cgY29udGFpbmluZyBhbiB7QGxpbmsgYW5kcm9pZC53aWRnZXQuRGF0ZVBpY2tlcn0uCi0gKgotICogPHA+U2VlIHRoZSA8YSBocmVmPSJ7QGRvY1Jvb3R9Z3VpZGUvdG9waWNzL3VpL2NvbnRyb2xzL3BpY2tlcnMuaHRtbCI+UGlja2VyczwvYT4KLSAqIGd1aWRlLjwvcD4KKyAqIDxwPgorICogU2VlIHRoZSA8YSBocmVmPSJ7QGRvY1Jvb3R9Z3VpZGUvdG9waWNzL3VpL2NvbnRyb2xzL3BpY2tlcnMuaHRtbCI+UGlja2VyczwvYT4KKyAqIGd1aWRlLgogICovCiBwdWJsaWMgY2xhc3MgRGF0ZVBpY2tlckRpYWxvZyBleHRlbmRzIEFsZXJ0RGlhbG9nIGltcGxlbWVudHMgT25DbGlja0xpc3RlbmVyLAogICAgICAgICBPbkRhdGVDaGFuZ2VkTGlzdGVuZXIgewotCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFlFQVIgPSAieWVhciI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE1PTlRIID0gIm1vbnRoIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREFZID0gImRheSI7CiAKICAgICBwcml2YXRlIGZpbmFsIERhdGVQaWNrZXIgbURhdGVQaWNrZXI7Ci0gICAgcHJpdmF0ZSBmaW5hbCBPbkRhdGVTZXRMaXN0ZW5lciBtRGF0ZVNldExpc3RlbmVyOwogICAgIHByaXZhdGUgZmluYWwgQ2FsZW5kYXIgbUNhbGVuZGFyOwogCisgICAgcHJpdmF0ZSBPbkRhdGVTZXRMaXN0ZW5lciBtRGF0ZVNldExpc3RlbmVyOworCiAgICAgcHJpdmF0ZSBib29sZWFuIG1UaXRsZU5lZWRzVXBkYXRlID0gdHJ1ZTsKIAogICAgIC8qKgotICAgICAqIFRoZSBjYWxsYmFjayB1c2VkIHRvIGluZGljYXRlIHRoZSB1c2VyIGlzIGRvbmUgZmlsbGluZyBpbiB0aGUgZGF0ZS4KKyAgICAgKiBDcmVhdGVzIGEgbmV3IGRhdGUgcGlja2VyIGRpYWxvZyBmb3IgdGhlIGN1cnJlbnQgZGF0ZSB1c2luZyB0aGUgcGFyZW50CisgICAgICogY29udGV4dCdzIGRlZmF1bHQgZGF0ZSBwaWNrZXIgZGlhbG9nIHRoZW1lLgorICAgICAqCisgICAgICogQHBhcmFtIGNvbnRleHQgdGhlIHBhcmVudCBjb250ZXh0CiAgICAgICovCi0gICAgcHVibGljIGludGVyZmFjZSBPbkRhdGVTZXRMaXN0ZW5lciB7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEBwYXJhbSB2aWV3IFRoZSB2aWV3IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGxpc3RlbmVyLgotICAgICAgICAgKiBAcGFyYW0geWVhciBUaGUgeWVhciB0aGF0IHdhcyBzZXQuCi0gICAgICAgICAqIEBwYXJhbSBtb250aE9mWWVhciBUaGUgbW9udGggdGhhdCB3YXMgc2V0ICgwLTExKSBmb3IgY29tcGF0aWJpbGl0eQotICAgICAgICAgKiAgd2l0aCB7QGxpbmsgamF2YS51dGlsLkNhbGVuZGFyfS4KLSAgICAgICAgICogQHBhcmFtIGRheU9mTW9udGggVGhlIGRheSBvZiB0aGUgbW9udGggdGhhdCB3YXMgc2V0LgotICAgICAgICAgKi8KLSAgICAgICAgdm9pZCBvbkRhdGVTZXQoRGF0ZVBpY2tlciB2aWV3LCBpbnQgeWVhciwgaW50IG1vbnRoT2ZZZWFyLCBpbnQgZGF5T2ZNb250aCk7CisgICAgcHVibGljIERhdGVQaWNrZXJEaWFsb2coQ29udGV4dCBjb250ZXh0KSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgMCk7CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogQHBhcmFtIGNvbnRleHQgVGhlIGNvbnRleHQgdGhlIGRpYWxvZyBpcyB0byBydW4gaW4uCi0gICAgICogQHBhcmFtIGNhbGxCYWNrIEhvdyB0aGUgcGFyZW50IGlzIG5vdGlmaWVkIHRoYXQgdGhlIGRhdGUgaXMgc2V0LgotICAgICAqIEBwYXJhbSB5ZWFyIFRoZSBpbml0aWFsIHllYXIgb2YgdGhlIGRpYWxvZy4KLSAgICAgKiBAcGFyYW0gbW9udGhPZlllYXIgVGhlIGluaXRpYWwgbW9udGggb2YgdGhlIGRpYWxvZy4KLSAgICAgKiBAcGFyYW0gZGF5T2ZNb250aCBUaGUgaW5pdGlhbCBkYXkgb2YgdGhlIGRpYWxvZy4KKyAgICAgKiBDcmVhdGVzIGEgbmV3IGRhdGUgcGlja2VyIGRpYWxvZyBmb3IgdGhlIGN1cnJlbnQgZGF0ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjb250ZXh0IHRoZSBwYXJlbnQgY29udGV4dAorICAgICAqIEBwYXJhbSB0aGVtZVJlc0lkIHRoZSByZXNvdXJjZSBJRCBvZiB0aGUgdGhlbWUgYWdhaW5zdCB3aGljaCB0byBpbmZsYXRlCisgICAgICogICAgICAgICAgICAgICAgICAgdGhpcyBkaWFsb2csIG9yIHtAY29kZSAwfSB0byB1c2UgdGhlIHBhcmVudAorICAgICAqICAgICAgICAgICAgICAgICAgIHtAY29kZSBjb250ZXh0fSdzIGRlZmF1bHQgYWxlcnQgZGlhbG9nIHRoZW1lCiAgICAgICovCi0gICAgcHVibGljIERhdGVQaWNrZXJEaWFsb2coQ29udGV4dCBjb250ZXh0LAotICAgICAgICAgICAgT25EYXRlU2V0TGlzdGVuZXIgY2FsbEJhY2ssCi0gICAgICAgICAgICBpbnQgeWVhciwKLSAgICAgICAgICAgIGludCBtb250aE9mWWVhciwKLSAgICAgICAgICAgIGludCBkYXlPZk1vbnRoKSB7Ci0gICAgICAgIHRoaXMoY29udGV4dCwgMCwgY2FsbEJhY2ssIHllYXIsIG1vbnRoT2ZZZWFyLCBkYXlPZk1vbnRoKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgaW50IHJlc29sdmVEaWFsb2dUaGVtZShDb250ZXh0IGNvbnRleHQsIGludCByZXNpZCkgewotICAgICAgICBpZiAocmVzaWQgPT0gMCkgewotICAgICAgICAgICAgZmluYWwgVHlwZWRWYWx1ZSBvdXRWYWx1ZSA9IG5ldyBUeXBlZFZhbHVlKCk7Ci0gICAgICAgICAgICBjb250ZXh0LmdldFRoZW1lKCkucmVzb2x2ZUF0dHJpYnV0ZShSLmF0dHIuZGF0ZVBpY2tlckRpYWxvZ1RoZW1lLCBvdXRWYWx1ZSwgdHJ1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gb3V0VmFsdWUucmVzb3VyY2VJZDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiByZXNpZDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEBwYXJhbSBjb250ZXh0IFRoZSBjb250ZXh0IHRoZSBkaWFsb2cgaXMgdG8gcnVuIGluLgotICAgICAqIEBwYXJhbSB0aGVtZSB0aGUgdGhlbWUgdG8gYXBwbHkgdG8gdGhpcyBkaWFsb2cKLSAgICAgKiBAcGFyYW0gbGlzdGVuZXIgSG93IHRoZSBwYXJlbnQgaXMgbm90aWZpZWQgdGhhdCB0aGUgZGF0ZSBpcyBzZXQuCi0gICAgICogQHBhcmFtIHllYXIgVGhlIGluaXRpYWwgeWVhciBvZiB0aGUgZGlhbG9nLgotICAgICAqIEBwYXJhbSBtb250aE9mWWVhciBUaGUgaW5pdGlhbCBtb250aCBvZiB0aGUgZGlhbG9nLgotICAgICAqIEBwYXJhbSBkYXlPZk1vbnRoIFRoZSBpbml0aWFsIGRheSBvZiB0aGUgZGlhbG9nLgotICAgICAqLwotICAgIHB1YmxpYyBEYXRlUGlja2VyRGlhbG9nKENvbnRleHQgY29udGV4dCwgaW50IHRoZW1lLCBPbkRhdGVTZXRMaXN0ZW5lciBsaXN0ZW5lciwgaW50IHllYXIsCi0gICAgICAgICAgICBpbnQgbW9udGhPZlllYXIsIGludCBkYXlPZk1vbnRoKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIHJlc29sdmVEaWFsb2dUaGVtZShjb250ZXh0LCB0aGVtZSkpOwotCi0gICAgICAgIG1EYXRlU2V0TGlzdGVuZXIgPSBsaXN0ZW5lcjsKLSAgICAgICAgbUNhbGVuZGFyID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKKyAgICBwdWJsaWMgRGF0ZVBpY2tlckRpYWxvZyhDb250ZXh0IGNvbnRleHQsIEBTdHlsZVJlcyBpbnQgdGhlbWVSZXNJZCkgeworICAgICAgICBzdXBlcihjb250ZXh0LCByZXNvbHZlRGlhbG9nVGhlbWUoY29udGV4dCwgdGhlbWVSZXNJZCkpOwogCiAgICAgICAgIGZpbmFsIENvbnRleHQgdGhlbWVDb250ZXh0ID0gZ2V0Q29udGV4dCgpOwogICAgICAgICBmaW5hbCBMYXlvdXRJbmZsYXRlciBpbmZsYXRlciA9IExheW91dEluZmxhdGVyLmZyb20odGhlbWVDb250ZXh0KTsKICAgICAgICAgZmluYWwgVmlldyB2aWV3ID0gaW5mbGF0ZXIuaW5mbGF0ZShSLmxheW91dC5kYXRlX3BpY2tlcl9kaWFsb2csIG51bGwpOwogICAgICAgICBzZXRWaWV3KHZpZXcpOworCiAgICAgICAgIHNldEJ1dHRvbihCVVRUT05fUE9TSVRJVkUsIHRoZW1lQ29udGV4dC5nZXRTdHJpbmcoUi5zdHJpbmcub2spLCB0aGlzKTsKICAgICAgICAgc2V0QnV0dG9uKEJVVFRPTl9ORUdBVElWRSwgdGhlbWVDb250ZXh0LmdldFN0cmluZyhSLnN0cmluZy5jYW5jZWwpLCB0aGlzKTsKICAgICAgICAgc2V0QnV0dG9uUGFuZWxMYXlvdXRIaW50KExBWU9VVF9ISU5UX1NJREUpOwogCisgICAgICAgIG1DYWxlbmRhciA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7CisKKyAgICAgICAgZmluYWwgaW50IHllYXIgPSBtQ2FsZW5kYXIuZ2V0KENhbGVuZGFyLllFQVIpOworICAgICAgICBmaW5hbCBpbnQgbW9udGhPZlllYXIgPSBtQ2FsZW5kYXIuZ2V0KENhbGVuZGFyLk1PTlRIKTsKKyAgICAgICAgZmluYWwgaW50IGRheU9mTW9udGggPSBtQ2FsZW5kYXIuZ2V0KENhbGVuZGFyLkRBWV9PRl9NT05USCk7CiAgICAgICAgIG1EYXRlUGlja2VyID0gKERhdGVQaWNrZXIpIHZpZXcuZmluZFZpZXdCeUlkKFIuaWQuZGF0ZVBpY2tlcik7CiAgICAgICAgIG1EYXRlUGlja2VyLmluaXQoeWVhciwgbW9udGhPZlllYXIsIGRheU9mTW9udGgsIHRoaXMpOwogICAgICAgICBtRGF0ZVBpY2tlci5zZXRWYWxpZGF0aW9uQ2FsbGJhY2sobVZhbGlkYXRpb25DYWxsYmFjayk7CiAgICAgfQogCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBkYXRlIHBpY2tlciBkaWFsb2cgZm9yIHRoZSBzcGVjaWZpZWQgZGF0ZSB1c2luZyB0aGUgcGFyZW50CisgICAgICogY29udGV4dCdzIGRlZmF1bHQgZGF0ZSBwaWNrZXIgZGlhbG9nIHRoZW1lLgorICAgICAqCisgICAgICogQHBhcmFtIGNvbnRleHQgdGhlIHBhcmVudCBjb250ZXh0CisgICAgICogQHBhcmFtIGxpc3RlbmVyIHRoZSBsaXN0ZW5lciB0byBjYWxsIHdoZW4gdGhlIHVzZXIgc2V0cyB0aGUgZGF0ZQorICAgICAqIEBwYXJhbSB5ZWFyIHRoZSBpbml0aWFsbHkgc2VsZWN0ZWQgeWVhcgorICAgICAqIEBwYXJhbSBtb250aCB0aGUgaW5pdGlhbGx5IHNlbGVjdGVkIG1vbnRoICgwLTExIGZvciBjb21wYXRpYmlsaXR5IHdpdGgKKyAgICAgKiAgICAgICAgICAgICAge0BsaW5rIENhbGVuZGFyI01PTlRIfSkKKyAgICAgKiBAcGFyYW0gZGF5T2ZNb250aCB0aGUgaW5pdGlhbGx5IHNlbGVjdGVkIGRheSBvZiBtb250aCAoMS0zMSwgZGVwZW5kaW5nCisgICAgICogICAgICAgICAgICAgICAgICAgb24gbW9udGgpCisgICAgICovCisgICAgcHVibGljIERhdGVQaWNrZXJEaWFsb2coQE51bGxhYmxlIENvbnRleHQgY29udGV4dCwgQE51bGxhYmxlIE9uRGF0ZVNldExpc3RlbmVyIGxpc3RlbmVyLAorICAgICAgICAgICAgaW50IHllYXIsIGludCBtb250aCwgaW50IGRheU9mTW9udGgpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCAwLCBsaXN0ZW5lciwgeWVhciwgbW9udGgsIGRheU9mTW9udGgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgZGF0ZSBwaWNrZXIgZGlhbG9nIGZvciB0aGUgc3BlY2lmaWVkIGRhdGUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gY29udGV4dCB0aGUgcGFyZW50IGNvbnRleHQKKyAgICAgKiBAcGFyYW0gdGhlbWVSZXNJZCB0aGUgcmVzb3VyY2UgSUQgb2YgdGhlIHRoZW1lIGFnYWluc3Qgd2hpY2ggdG8gaW5mbGF0ZQorICAgICAqICAgICAgICAgICAgICAgICAgIHRoaXMgZGlhbG9nLCBvciB7QGNvZGUgMH0gdG8gdXNlIHRoZSBwYXJlbnQKKyAgICAgKiAgICAgICAgICAgICAgICAgICB7QGNvZGUgY29udGV4dH0ncyBkZWZhdWx0IGFsZXJ0IGRpYWxvZyB0aGVtZQorICAgICAqIEBwYXJhbSBsaXN0ZW5lciB0aGUgbGlzdGVuZXIgdG8gY2FsbCB3aGVuIHRoZSB1c2VyIHNldHMgdGhlIGRhdGUKKyAgICAgKiBAcGFyYW0geWVhciB0aGUgaW5pdGlhbGx5IHNlbGVjdGVkIHllYXIKKyAgICAgKiBAcGFyYW0gbW9udGggdGhlIGluaXRpYWxseSBzZWxlY3RlZCBtb250aCAoMC0xMSBmb3IgY29tcGF0aWJpbGl0eSB3aXRoCisgICAgICogICAgICAgICAgICAgIHtAbGluayBDYWxlbmRhciNNT05USH0pCisgICAgICogQHBhcmFtIGRheU9mTW9udGggdGhlIGluaXRpYWxseSBzZWxlY3RlZCBkYXkgb2YgbW9udGggKDEtMzEsIGRlcGVuZGluZworICAgICAqICAgICAgICAgICAgICAgICAgIG9uIG1vbnRoKQorICAgICAqLworICAgIHB1YmxpYyBEYXRlUGlja2VyRGlhbG9nKEBOb25OdWxsIENvbnRleHQgY29udGV4dCwgQFN0eWxlUmVzIGludCB0aGVtZVJlc0lkLAorICAgICAgICAgICAgQE51bGxhYmxlIE9uRGF0ZVNldExpc3RlbmVyIGxpc3RlbmVyLCBpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQgZGF5T2ZNb250aCkgeworICAgICAgICB0aGlzKGNvbnRleHQsIHRoZW1lUmVzSWQpOworCisgICAgICAgIG1EYXRlU2V0TGlzdGVuZXIgPSBsaXN0ZW5lcjsKKworICAgICAgICBtRGF0ZVBpY2tlci51cGRhdGVEYXRlKHllYXIsIG1vbnRoLCBkYXlPZk1vbnRoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IHJlc29sdmVEaWFsb2dUaGVtZShATm9uTnVsbCBDb250ZXh0IGNvbnRleHQsIEBTdHlsZVJlcyBpbnQgdGhlbWVSZXNJZCkgeworICAgICAgICBpZiAodGhlbWVSZXNJZCA9PSAwKSB7CisgICAgICAgICAgICBmaW5hbCBUeXBlZFZhbHVlIG91dFZhbHVlID0gbmV3IFR5cGVkVmFsdWUoKTsKKyAgICAgICAgICAgIGNvbnRleHQuZ2V0VGhlbWUoKS5yZXNvbHZlQXR0cmlidXRlKFIuYXR0ci5kYXRlUGlja2VyRGlhbG9nVGhlbWUsIG91dFZhbHVlLCB0cnVlKTsKKyAgICAgICAgICAgIHJldHVybiBvdXRWYWx1ZS5yZXNvdXJjZUlkOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIHRoZW1lUmVzSWQ7CisgICAgICAgIH0KKyAgICB9CisKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkRhdGVDaGFuZ2VkKERhdGVQaWNrZXIgdmlldywgaW50IHllYXIsIGludCBtb250aCwgaW50IGRheSkgewotICAgICAgICBtRGF0ZVBpY2tlci5pbml0KHllYXIsIG1vbnRoLCBkYXksIHRoaXMpOwotICAgICAgICB1cGRhdGVUaXRsZSh5ZWFyLCBtb250aCwgZGF5KTsKKyAgICBwdWJsaWMgdm9pZCBvbkRhdGVDaGFuZ2VkKERhdGVQaWNrZXIgdmlldywgaW50IHllYXIsIGludCBtb250aCwgaW50IGRheU9mTW9udGgpIHsKKyAgICAgICAgbURhdGVQaWNrZXIuaW5pdCh5ZWFyLCBtb250aCwgZGF5T2ZNb250aCwgdGhpcyk7CisgICAgICAgIHVwZGF0ZVRpdGxlKHllYXIsIG1vbnRoLCBkYXlPZk1vbnRoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBsaXN0ZW5lciB0byBjYWxsIHdoZW4gdGhlIHVzZXIgc2V0cyB0aGUgZGF0ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBsaXN0ZW5lciB0aGUgbGlzdGVuZXIgdG8gY2FsbCB3aGVuIHRoZSB1c2VyIHNldHMgdGhlIGRhdGUKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRPbkRhdGVTZXRMaXN0ZW5lcihATnVsbGFibGUgT25EYXRlU2V0TGlzdGVuZXIgbGlzdGVuZXIpIHsKKyAgICAgICAgbURhdGVTZXRMaXN0ZW5lciA9IGxpc3RlbmVyOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpAQCAtMTQ1LDEwICsxNzksMTEgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBHZXRzIHRoZSB7QGxpbmsgRGF0ZVBpY2tlcn0gY29udGFpbmVkIGluIHRoaXMgZGlhbG9nLgorICAgICAqIFJldHVybnMgdGhlIHtAbGluayBEYXRlUGlja2VyfSBjb250YWluZWQgaW4gdGhpcyBkaWFsb2cuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuIFRoZSBjYWxlbmRhciB2aWV3LgorICAgICAqIEByZXR1cm4gdGhlIGRhdGUgcGlja2VyCiAgICAgICovCisgICAgQE5vbk51bGwKICAgICBwdWJsaWMgRGF0ZVBpY2tlciBnZXREYXRlUGlja2VyKCkgewogICAgICAgICByZXR1cm4gbURhdGVQaWNrZXI7CiAgICAgfQpAQCAtMTU2LDIwICsxOTEsMjIgQEAKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBjdXJyZW50IGRhdGUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0geWVhciBUaGUgZGF0ZSB5ZWFyLgotICAgICAqIEBwYXJhbSBtb250aE9mWWVhciBUaGUgZGF0ZSBtb250aC4KLSAgICAgKiBAcGFyYW0gZGF5T2ZNb250aCBUaGUgZGF0ZSBkYXkgb2YgbW9udGguCisgICAgICogQHBhcmFtIHllYXIgdGhlIHllYXIKKyAgICAgKiBAcGFyYW0gbW9udGggdGhlIG1vbnRoICgwLTExIGZvciBjb21wYXRpYmlsaXR5IHdpdGgKKyAgICAgKiAgICAgICAgICAgICAge0BsaW5rIENhbGVuZGFyI01PTlRIfSkKKyAgICAgKiBAcGFyYW0gZGF5T2ZNb250aCB0aGUgZGF5IG9mIG1vbnRoICgxLTMxLCBkZXBlbmRpbmcgb24gbW9udGgpCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgdXBkYXRlRGF0ZShpbnQgeWVhciwgaW50IG1vbnRoT2ZZZWFyLCBpbnQgZGF5T2ZNb250aCkgewotICAgICAgICBtRGF0ZVBpY2tlci51cGRhdGVEYXRlKHllYXIsIG1vbnRoT2ZZZWFyLCBkYXlPZk1vbnRoKTsKKyAgICBwdWJsaWMgdm9pZCB1cGRhdGVEYXRlKGludCB5ZWFyLCBpbnQgbW9udGgsIGludCBkYXlPZk1vbnRoKSB7CisgICAgICAgIG1EYXRlUGlja2VyLnVwZGF0ZURhdGUoeWVhciwgbW9udGgsIGRheU9mTW9udGgpOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCB1cGRhdGVUaXRsZShpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQgZGF5KSB7CisgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVRpdGxlKGludCB5ZWFyLCBpbnQgbW9udGgsIGludCBkYXlPZk1vbnRoKSB7CiAgICAgICAgIGlmICghbURhdGVQaWNrZXIuZ2V0Q2FsZW5kYXJWaWV3U2hvd24oKSkgewogICAgICAgICAgICAgbUNhbGVuZGFyLnNldChDYWxlbmRhci5ZRUFSLCB5ZWFyKTsKICAgICAgICAgICAgIG1DYWxlbmRhci5zZXQoQ2FsZW5kYXIuTU9OVEgsIG1vbnRoKTsKLSAgICAgICAgICAgIG1DYWxlbmRhci5zZXQoQ2FsZW5kYXIuREFZX09GX01PTlRILCBkYXkpOwotICAgICAgICAgICAgU3RyaW5nIHRpdGxlID0gRGF0ZVV0aWxzLmZvcm1hdERhdGVUaW1lKG1Db250ZXh0LAorICAgICAgICAgICAgbUNhbGVuZGFyLnNldChDYWxlbmRhci5EQVlfT0ZfTU9OVEgsIGRheU9mTW9udGgpOworCisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgdGl0bGUgPSBEYXRlVXRpbHMuZm9ybWF0RGF0ZVRpbWUobUNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgIG1DYWxlbmRhci5nZXRUaW1lSW5NaWxsaXMoKSwKICAgICAgICAgICAgICAgICAgICAgRGF0ZVV0aWxzLkZPUk1BVF9TSE9XX0RBVEUKICAgICAgICAgICAgICAgICAgICAgfCBEYXRlVXRpbHMuRk9STUFUX1NIT1dfV0VFS0RBWQpAQCAtMTc3LDEyICsyMTQsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgfCBEYXRlVXRpbHMuRk9STUFUX0FCQlJFVl9NT05USAogICAgICAgICAgICAgICAgICAgICB8IERhdGVVdGlscy5GT1JNQVRfQUJCUkVWX1dFRUtEQVkpOwogICAgICAgICAgICAgc2V0VGl0bGUodGl0bGUpOworCiAgICAgICAgICAgICBtVGl0bGVOZWVkc1VwZGF0ZSA9IHRydWU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAobVRpdGxlTmVlZHNVcGRhdGUpIHsKLSAgICAgICAgICAgICAgICBtVGl0bGVOZWVkc1VwZGF0ZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgIHNldFRpdGxlKFIuc3RyaW5nLmRhdGVfcGlja2VyX2RpYWxvZ190aXRsZSk7Ci0gICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAobVRpdGxlTmVlZHNVcGRhdGUpIHsKKyAgICAgICAgICAgIHNldFRpdGxlKFIuc3RyaW5nLmRhdGVfcGlja2VyX2RpYWxvZ190aXRsZSk7CisKKyAgICAgICAgICAgIG1UaXRsZU5lZWRzVXBkYXRlID0gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTIxMyw0ICsyNTAsMTkgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH07CisKKyAgICAvKioKKyAgICAgKiBUaGUgbGlzdGVuZXIgdXNlZCB0byBpbmRpY2F0ZSB0aGUgdXNlciBoYXMgZmluaXNoZWQgc2VsZWN0aW5nIGEgZGF0ZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgaW50ZXJmYWNlIE9uRGF0ZVNldExpc3RlbmVyIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBwYXJhbSB2aWV3IHRoZSBwaWNrZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBkaWFsb2cKKyAgICAgICAgICogQHBhcmFtIHllYXIgdGhlIHNlbGVjdGVkIHllYXIKKyAgICAgICAgICogQHBhcmFtIG1vbnRoIHRoZSBzZWxlY3RlZCBtb250aCAoMC0xMSBmb3IgY29tcGF0aWJpbGl0eSB3aXRoCisgICAgICAgICAqICAgICAgICAgICAgICB7QGxpbmsgQ2FsZW5kYXIjTU9OVEh9KQorICAgICAgICAgKiBAcGFyYW0gZGF5T2ZNb250aCB0aCBzZWxlY3RlZCBkYXkgb2YgdGhlIG1vbnRoICgxLTMxLCBkZXBlbmRpbmcgb24KKyAgICAgICAgICogICAgICAgICAgICAgICAgICAgbW9udGgpCisgICAgICAgICAqLworICAgICAgICB2b2lkIG9uRGF0ZVNldChEYXRlUGlja2VyIHZpZXcsIGludCB5ZWFyLCBpbnQgbW9udGgsIGludCBkYXlPZk1vbnRoKTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvRG93bmxvYWRNYW5hZ2VyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvRG93bmxvYWRNYW5hZ2VyLmphdmEKaW5kZXggZmIwZTc5Yi4uYTk1MTZkMCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0Rvd25sb2FkTWFuYWdlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9Eb3dubG9hZE1hbmFnZXIuamF2YQpAQCAtMjcsNiArMjcsNyBAQAogaW1wb3J0IGFuZHJvaWQubmV0LkNvbm5lY3Rpdml0eU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5uZXQuTmV0d29ya1BvbGljeU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5uZXQuVXJpOworaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7CiBpbXBvcnQgYW5kcm9pZC5vcy5FbnZpcm9ubWVudDsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbEZpbGVEZXNjcmlwdG9yOwogaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuRG93bmxvYWRzOwpAQCAtMTA1LDggKzEwNiwxNyBAQAogICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIENPTFVNTl9MT0NBTF9VUkkgPSAibG9jYWxfdXJpIjsKIAogICAgIC8qKgotICAgICAqIFRoZSBwYXRobmFtZSBvZiB0aGUgZmlsZSB3aGVyZSB0aGUgZG93bmxvYWQgaXMgc3RvcmVkLgorICAgICAqIFBhdGggdG8gdGhlIGRvd25sb2FkZWQgZmlsZSBvbiBkaXNrLgorICAgICAqIDxwPgorICAgICAqIE5vdGUgdGhhdCBhcHBzIG1heSBub3QgaGF2ZSBmaWxlc3lzdGVtIHBlcm1pc3Npb25zIHRvIGRpcmVjdGx5IGFjY2VzcworICAgICAqIHRoaXMgcGF0aC4gSW5zdGVhZCBvZiB0cnlpbmcgdG8gb3BlbiB0aGlzIHBhdGggZGlyZWN0bHksIGFwcHMgc2hvdWxkIHVzZQorICAgICAqIHtAbGluayBDb250ZW50UmVzb2x2ZXIjb3BlbkZpbGVEZXNjcmlwdG9yKFVyaSwgU3RyaW5nKX0gdG8gZ2FpbiBhY2Nlc3MuCisgICAgICoKKyAgICAgKiBAZGVwcmVjYXRlZCBhcHBzIHNob3VsZCB0cmFuc2l0aW9uIHRvIHVzaW5nCisgICAgICogICAgICAgICAgICAge0BsaW5rIENvbnRlbnRSZXNvbHZlciNvcGVuRmlsZURlc2NyaXB0b3IoVXJpLCBTdHJpbmcpfQorICAgICAqICAgICAgICAgICAgIGluc3RlYWQuCiAgICAgICovCisgICAgQERlcHJlY2F0ZWQKICAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBDT0xVTU5fTE9DQUxfRklMRU5BTUUgPSAibG9jYWxfZmlsZW5hbWUiOwogCiAgICAgLyoqCkBAIC05MDgsMTYgKzkxOCwxOSBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHJpdmF0ZSBDb250ZW50UmVzb2x2ZXIgbVJlc29sdmVyOwotICAgIHByaXZhdGUgU3RyaW5nIG1QYWNrYWdlTmFtZTsKKyAgICBwcml2YXRlIGZpbmFsIENvbnRlbnRSZXNvbHZlciBtUmVzb2x2ZXI7CisgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbVBhY2thZ2VOYW1lOworICAgIHByaXZhdGUgZmluYWwgaW50IG1UYXJnZXRTZGtWZXJzaW9uOworCiAgICAgcHJpdmF0ZSBVcmkgbUJhc2VVcmkgPSBEb3dubG9hZHMuSW1wbC5DT05URU5UX1VSSTsKIAogICAgIC8qKgogICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgcHVibGljIERvd25sb2FkTWFuYWdlcihDb250ZW50UmVzb2x2ZXIgcmVzb2x2ZXIsIFN0cmluZyBwYWNrYWdlTmFtZSkgewotICAgICAgICBtUmVzb2x2ZXIgPSByZXNvbHZlcjsKLSAgICAgICAgbVBhY2thZ2VOYW1lID0gcGFja2FnZU5hbWU7CisgICAgcHVibGljIERvd25sb2FkTWFuYWdlcihDb250ZXh0IGNvbnRleHQpIHsKKyAgICAgICAgbVJlc29sdmVyID0gY29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKTsKKyAgICAgICAgbVBhY2thZ2VOYW1lID0gY29udGV4dC5nZXRQYWNrYWdlTmFtZSgpOworICAgICAgICBtVGFyZ2V0U2RrVmVyc2lvbiA9IGNvbnRleHQuZ2V0QXBwbGljYXRpb25JbmZvKCkudGFyZ2V0U2RrVmVyc2lvbjsKICAgICB9CiAKICAgICAvKioKQEAgLTk5Nyw3ICsxMDEwLDcgQEAKICAgICAgICAgaWYgKHVuZGVybHlpbmdDdXJzb3IgPT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG5ldyBDdXJzb3JUcmFuc2xhdG9yKHVuZGVybHlpbmdDdXJzb3IsIG1CYXNlVXJpKTsKKyAgICAgICAgcmV0dXJuIG5ldyBDdXJzb3JUcmFuc2xhdG9yKHVuZGVybHlpbmdDdXJzb3IsIG1CYXNlVXJpLCBtVGFyZ2V0U2RrVmVyc2lvbik7CiAgICAgfQogCiAgICAgLyoqCkBAIC0xMjY1LDExICsxMjc4LDEzIEBACiAgICAgICogdW5kZXJseWluZyBkYXRhLgogICAgICAqLwogICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIEN1cnNvclRyYW5zbGF0b3IgZXh0ZW5kcyBDdXJzb3JXcmFwcGVyIHsKLSAgICAgICAgcHJpdmF0ZSBVcmkgbUJhc2VVcmk7CisgICAgICAgIHByaXZhdGUgZmluYWwgVXJpIG1CYXNlVXJpOworICAgICAgICBwcml2YXRlIGZpbmFsIGludCBtVGFyZ2V0U2RrVmVyc2lvbjsKIAotICAgICAgICBwdWJsaWMgQ3Vyc29yVHJhbnNsYXRvcihDdXJzb3IgY3Vyc29yLCBVcmkgYmFzZVVyaSkgeworICAgICAgICBwdWJsaWMgQ3Vyc29yVHJhbnNsYXRvcihDdXJzb3IgY3Vyc29yLCBVcmkgYmFzZVVyaSwgaW50IHRhcmdldFNka1ZlcnNpb24pIHsKICAgICAgICAgICAgIHN1cGVyKGN1cnNvcik7CiAgICAgICAgICAgICBtQmFzZVVyaSA9IGJhc2VVcmk7CisgICAgICAgICAgICBtVGFyZ2V0U2RrVmVyc2lvbiA9IHRhcmdldFNka1ZlcnNpb247CiAgICAgICAgIH0KIAogICAgICAgICBAT3ZlcnJpZGUKQEAgLTEyOTAsOCArMTMwNSwxOSBAQAogCiAgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwdWJsaWMgU3RyaW5nIGdldFN0cmluZyhpbnQgY29sdW1uSW5kZXgpIHsKLSAgICAgICAgICAgIHJldHVybiAoZ2V0Q29sdW1uTmFtZShjb2x1bW5JbmRleCkuZXF1YWxzKENPTFVNTl9MT0NBTF9VUkkpKSA/IGdldExvY2FsVXJpKCkgOgotICAgICAgICAgICAgICAgICAgICBzdXBlci5nZXRTdHJpbmcoY29sdW1uSW5kZXgpOworICAgICAgICAgICAgZmluYWwgU3RyaW5nIGNvbHVtbk5hbWUgPSBnZXRDb2x1bW5OYW1lKGNvbHVtbkluZGV4KTsKKyAgICAgICAgICAgIHN3aXRjaCAoY29sdW1uTmFtZSkgeworICAgICAgICAgICAgICAgIGNhc2UgQ09MVU1OX0xPQ0FMX1VSSToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldExvY2FsVXJpKCk7CisgICAgICAgICAgICAgICAgY2FzZSBDT0xVTU5fTE9DQUxfRklMRU5BTUU6CisgICAgICAgICAgICAgICAgICAgIGlmIChtVGFyZ2V0U2RrVmVyc2lvbiA+PSBCdWlsZC5WRVJTSU9OX0NPREVTLk4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDT0xVTU5fTE9DQUxfRklMRU5BTUUgaXMgZGVwcmVjYXRlZDsiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHVzZSBDb250ZW50UmVzb2x2ZXIub3BlbkZpbGVEZXNjcmlwdG9yKCkgaW5zdGVhZCIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyLmdldFN0cmluZyhjb2x1bW5JbmRleCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBwcml2YXRlIFN0cmluZyBnZXRMb2NhbFVyaSgpIHsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9FbnRlclRyYW5zaXRpb25Db29yZGluYXRvci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0VudGVyVHJhbnNpdGlvbkNvb3JkaW5hdG9yLmphdmEKaW5kZXggMjBmMzQ5NS4uYzZjYzQ1MiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0VudGVyVHJhbnNpdGlvbkNvb3JkaW5hdG9yLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0VudGVyVHJhbnNpdGlvbkNvb3JkaW5hdG9yLmphdmEKQEAgLTMxLDYgKzMxLDcgQEAKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwT3ZlcmxheTsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlld1RyZWVPYnNlcnZlcjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93OworaW1wb3J0IGFuZHJvaWQudmlldy5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlFdmVudDsKIAogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiAKQEAgLTUwMCw2ICs1MDEsMTAgQEAKICAgICBAT3ZlcnJpZGUKICAgICBwcm90ZWN0ZWQgdm9pZCBvblRyYW5zaXRpb25zQ29tcGxldGUoKSB7CiAgICAgICAgIG1vdmVTaGFyZWRFbGVtZW50c0Zyb21PdmVybGF5KCk7CisgICAgICAgIGZpbmFsIFZpZXdHcm91cCBkZWNvclZpZXcgPSBnZXREZWNvcigpOworICAgICAgICBpZiAoZGVjb3JWaWV3ICE9IG51bGwpIHsKKyAgICAgICAgICAgIGRlY29yVmlldy5zZW5kQWNjZXNzaWJpbGl0eUV2ZW50KEFjY2Vzc2liaWxpdHlFdmVudC5UWVBFX1dJTkRPV19DT05URU5UX0NIQU5HRUQpOworICAgICAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHNoYXJlZEVsZW1lbnRUcmFuc2l0aW9uU3RhcnRlZCgpIHsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9JQWN0aXZpdHlNYW5hZ2VyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvSUFjdGl2aXR5TWFuYWdlci5qYXZhCmluZGV4IGY5MWEwYmUuLmNlYjE0YWQgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9JQWN0aXZpdHlNYW5hZ2VyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0lBY3Rpdml0eU1hbmFnZXIuamF2YQpAQCAtOTIsNyArOTIsNyBAQAogICAgICAgICAgICAgaW50IHVzZXJJZCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKICAgICBwdWJsaWMgYm9vbGVhbiBzdGFydE5leHRNYXRjaGluZ0FjdGl2aXR5KElCaW5kZXIgY2FsbGluZ0FjdGl2aXR5LAogICAgICAgICAgICAgSW50ZW50IGludGVudCwgQnVuZGxlIG9wdGlvbnMpIHRocm93cyBSZW1vdGVFeGNlcHRpb247Ci0gICAgcHVibGljIGludCBzdGFydEFjdGl2aXR5RnJvbVJlY2VudHMoaW50IHRhc2tJZCwgaW50IGxhdW5jaFN0YWNrSWQsIEJ1bmRsZSBvcHRpb25zKQorICAgIHB1YmxpYyBpbnQgc3RhcnRBY3Rpdml0eUZyb21SZWNlbnRzKGludCB0YXNrSWQsIEJ1bmRsZSBvcHRpb25zKQogICAgICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKICAgICBwdWJsaWMgYm9vbGVhbiBmaW5pc2hBY3Rpdml0eShJQmluZGVyIHRva2VuLCBpbnQgY29kZSwgSW50ZW50IGRhdGEsIGludCBmaW5pc2hUYXNrKQogICAgICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKQEAgLTEyMiw2ICsxMjIsNyBAQAogICAgICAgICAgICAgUGVyc2lzdGFibGVCdW5kbGUgcGVyc2lzdGVudFN0YXRlLCBDaGFyU2VxdWVuY2UgZGVzY3JpcHRpb24pIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAgICAgcHVibGljIHZvaWQgYWN0aXZpdHlTbGVwdChJQmluZGVyIHRva2VuKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogICAgIHB1YmxpYyB2b2lkIGFjdGl2aXR5RGVzdHJveWVkKElCaW5kZXIgdG9rZW4pIHRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgcHVibGljIHZvaWQgYWN0aXZpdHlSZWxhdW5jaGVkKElCaW5kZXIgdG9rZW4pIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAgICAgcHVibGljIHZvaWQgcmVwb3J0U2l6ZUNvbmZpZ3VyYXRpb25zKElCaW5kZXIgdG9rZW4sIGludFtdIGhvcml6b250YWxTaXplQ29uZmlndXJhdGlvbiwKICAgICAgICAgICAgIGludFtdIHZlcnRpY2FsU2l6ZUNvbmZpZ3VyYXRpb25zLCBpbnRbXSBzbWFsbGVzdFdpZHRoQ29uZmlndXJhdGlvbnMpCiAgICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwpAQCAtMTQ1LDcgKzE0NiwzMSBAQAogICAgIHB1YmxpYyB2b2lkIG1vdmVUYXNrVG9Eb2NrZWRTdGFjayhpbnQgdGFza0lkLCBpbnQgY3JlYXRlTW9kZSwgYm9vbGVhbiB0b1RvcCwgYm9vbGVhbiBhbmltYXRlLAogICAgICAgICAgICAgUmVjdCBpbml0aWFsQm91bmRzKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogICAgIHB1YmxpYyBib29sZWFuIG1vdmVUb3BBY3Rpdml0eVRvUGlubmVkU3RhY2soaW50IHN0YWNrSWQsIFJlY3QgYm91bmRzKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwotICAgIHB1YmxpYyB2b2lkIHJlc2l6ZVN0YWNrKGludCBzdGFja0lkLCBSZWN0IGJvdW5kcywgYm9vbGVhbiBhbGxvd1Jlc2l6ZUluRG9ja2VkTW9kZSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICBwdWJsaWMgdm9pZCByZXNpemVTdGFjayhpbnQgc3RhY2tJZCwgUmVjdCBib3VuZHMsIGJvb2xlYW4gYWxsb3dSZXNpemVJbkRvY2tlZE1vZGUpCisgICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworCisgICAgLyoqCisgICAgICogUmVzaXplcyB0aGUgZG9ja2VkIHN0YWNrLCBhbmQgYWxsIG90aGVyIHN0YWNrcyBhcyB0aGUgcmVzdWx0IG9mIHRoZSBkb2NrIHN0YWNrIGJvdW5kcyBjaGFuZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW0gZG9ja2VkQm91bmRzIFRoZSBib3VuZHMgZm9yIHRoZSBkb2NrZWQgc3RhY2suCisgICAgICogQHBhcmFtIHRlbXBEb2NrZWRUYXNrQm91bmRzIFRoZSB0ZW1wb3JhcnkgYm91bmRzIGZvciB0aGUgdGFza3MgaW4gdGhlIGRvY2tlZCBzdGFjaywgd2hpY2gKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlnaHQgYmUgZGlmZmVyZW50IGZyb20gdGhlIHN0YWNrIGJvdW5kcyB0byBhbGxvdyBtb3JlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsZXhpYmlsaXR5IHdoaWxlIHJlc2l6aW5nLCBvciB7QGNvZGUgbnVsbH0gaWYgdGhleSBzaG91bGQgYmUgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbWUgYXMgdGhlIHN0YWNrIGJvdW5kcy4KKyAgICAgKiBAcGFyYW0gdGVtcERvY2tlZFRhc2tJbnNldEJvdW5kcyBUaGUgdGVtcG9yYXJ5IGJvdW5kcyBmb3IgdGhlIHRhc2tzIHRvIGNhbGN1bGF0ZSB0aGUgaW5zZXRzLgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4gcmVzaXppbmcsIHdlIHVzdWFsbHkgImZyZWV6ZSIgdGhlIGxheW91dCBvZiBhIHRhc2suIFRvCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNoaWV2ZSB0aGF0LCB3ZSBhbHNvIG5lZWQgdG8gImZyZWV6ZSIgdGhlIGluc2V0cywgd2hpY2gKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRzIGFjaGlldmVkIGJ5IGNoYW5naW5nIHRhc2sgYm91bmRzIGJ1dCBub3QgYm91bmRzIHVzZWQKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBjYWxjdWxhdGUgdGhlIGluc2V0cyBpbiB0aGlzIHRyYW5zaWVudCBzdGF0ZQorICAgICAqIEBwYXJhbSB0ZW1wT3RoZXJUYXNrQm91bmRzIFRoZSB0ZW1wb3JhcnkgYm91bmRzIGZvciB0aGUgdGFza3MgaW4gYWxsIG90aGVyIHN0YWNrcywgb3IKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7QGNvZGUgbnVsbH0gaWYgdGhleSBzaG91bGQgYmUgdGhlIHNhbWUgYXMgdGhlIHN0YWNrIGJvdW5kcy4KKyAgICAgKiBAcGFyYW0gdGVtcE90aGVyVGFza0luc2V0Qm91bmRzIExpa2Uge0Bjb2RlIHRlbXBEb2NrZWRUYXNrSW5zZXRCb3VuZHN9LCBidXQgZm9yIHRoZSBvdGhlcgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tzLgorICAgICAqIEB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uCisgICAgICovCisgICAgcHVibGljIHZvaWQgcmVzaXplRG9ja2VkU3RhY2soUmVjdCBkb2NrZWRCb3VuZHMsIFJlY3QgdGVtcERvY2tlZFRhc2tCb3VuZHMsCisgICAgICAgICAgICBSZWN0IHRlbXBEb2NrZWRUYXNrSW5zZXRCb3VuZHMsCisgICAgICAgICAgICBSZWN0IHRlbXBPdGhlclRhc2tCb3VuZHMsIFJlY3QgdGVtcE90aGVyVGFza0luc2V0Qm91bmRzKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogICAgIHB1YmxpYyB2b2lkIHBvc2l0aW9uVGFza0luU3RhY2soaW50IHRhc2tJZCwgaW50IHN0YWNrSWQsIGludCBwb3NpdGlvbikgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKICAgICBwdWJsaWMgTGlzdDxTdGFja0luZm8+IGdldEFsbFN0YWNrSW5mb3MoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogICAgIHB1YmxpYyBTdGFja0luZm8gZ2V0U3RhY2tJbmZvKGludCBzdGFja0lkKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwpAQCAtMzYzLDYgKzM4OCw3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXRQcm92aWRlck1pbWVUeXBlKFVyaSB1cmksIGludCB1c2VySWQpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgSUJpbmRlciBuZXdVcmlQZXJtaXNzaW9uT3duZXIoU3RyaW5nIG5hbWUpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgcHVibGljIElCaW5kZXIgZ2V0VXJpUGVybWlzc2lvbk93bmVyRm9yQWN0aXZpdHkoSUJpbmRlciBhY3Rpdml0eVRva2VuKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogICAgIHB1YmxpYyB2b2lkIGdyYW50VXJpUGVybWlzc2lvbkZyb21Pd25lcihJQmluZGVyIG93bmVyLCBpbnQgZnJvbVVpZCwgU3RyaW5nIHRhcmdldFBrZywKICAgICAgICAgICAgIFVyaSB1cmksIGludCBtb2RlLCBpbnQgc291cmNlVXNlcklkLCBpbnQgdGFyZ2V0VXNlcklkKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogICAgIHB1YmxpYyB2b2lkIHJldm9rZVVyaVBlcm1pc3Npb25Gcm9tT3duZXIoSUJpbmRlciBvd25lciwgVXJpIHVyaSwKQEAgLTU1Miw2ICs1NzgsOCBAQAogCiAgICAgcHVibGljIHZvaWQgZW50ZXJQaWN0dXJlSW5QaWN0dXJlTW9kZShJQmluZGVyIHRva2VuKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCisgICAgcHVibGljIHZvaWQgc2V0VnJNb2RlKElCaW5kZXIgdG9rZW4sIGJvb2xlYW4gZW5hYmxlZCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKwogICAgIC8qCiAgICAgICogUHJpdmF0ZSBub24tQmluZGVyIGludGVyZmFjZXMKICAgICAgKi8KQEAgLTkxNyw0ICs5NDUsOCBAQAogICAgIGludCBJTl9QSUNUVVJFX0lOX1BJQ1RVUkVfTU9ERV9UUkFOU0FDVElPTiA9IElCaW5kZXIuRklSU1RfQ0FMTF9UUkFOU0FDVElPTiArIDM1MzsKICAgICBpbnQgS0lMTF9QQUNLQUdFX0RFUEVOREVOVFNfVFJBTlNBQ1RJT04gPSBJQmluZGVyLkZJUlNUX0NBTExfVFJBTlNBQ1RJT04gKyAzNTQ7CiAgICAgaW50IEVOVEVSX1BJQ1RVUkVfSU5fUElDVFVSRV9NT0RFX1RSQU5TQUNUSU9OID0gSUJpbmRlci5GSVJTVF9DQUxMX1RSQU5TQUNUSU9OICsgMzU1OworICAgIGludCBBQ1RJVklUWV9SRUxBVU5DSEVEX1RSQU5TQUNUSU9OID0gSUJpbmRlci5GSVJTVF9DQUxMX1RSQU5TQUNUSU9OICsgMzU2OworICAgIGludCBHRVRfVVJJX1BFUk1JU1NJT05fT1dORVJfRk9SX0FDVElWSVRZX1RSQU5TQUNUSU9OID0gSUJpbmRlci5GSVJTVF9DQUxMX1RSQU5TQUNUSU9OICsgMzU3OworICAgIGludCBSRVNJWkVfRE9DS0VEX1NUQUNLX1RSQU5TQUNUSU9OID0gSUJpbmRlci5GSVJTVF9DQUxMX1RSQU5TQUNUSU9OICsgMzU4OworICAgIGludCBTRVRfVlJfTU9ERV9UUkFOU0FDVElPTiA9IElCaW5kZXIuRklSU1RfQ0FMTF9UUkFOU0FDVElPTiArIDM1OTsKIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9JTm90aWZpY2F0aW9uTWFuYWdlci5haWRsIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0lOb3RpZmljYXRpb25NYW5hZ2VyLmFpZGwKaW5kZXggMTM2YjgxMC4uZTYwY2IwMyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0lOb3RpZmljYXRpb25NYW5hZ2VyLmFpZGwKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0lOb3RpZmljYXRpb25NYW5hZ2VyLmFpZGwKQEAgLTU0LDYgKzU0LDggQEAKICAgICBpbnQgZ2V0VG9waWNQcmlvcml0eShTdHJpbmcgcGtnLCBpbnQgdWlkLCBpbiBOb3RpZmljYXRpb24uVG9waWMgdG9waWMpOwogICAgIHZvaWQgc2V0VG9waWNJbXBvcnRhbmNlKFN0cmluZyBwa2csIGludCB1aWQsIGluIE5vdGlmaWNhdGlvbi5Ub3BpYyB0b3BpYywgaW50IGltcG9ydGFuY2UpOwogICAgIGludCBnZXRUb3BpY0ltcG9ydGFuY2UoU3RyaW5nIHBrZywgaW50IHVpZCwgaW4gTm90aWZpY2F0aW9uLlRvcGljIHRvcGljKTsKKyAgICB2b2lkIHNldEFwcEltcG9ydGFuY2UoU3RyaW5nIHBrZywgaW50IHVpZCwgaW50IGltcG9ydGFuY2UpOworICAgIGJvb2xlYW4gZG9lc0FwcFVzZVRvcGljcyhTdHJpbmcgcGtnLCBpbnQgdWlkKTsKIAogICAgIC8vIFRPRE86IFJlbW92ZSB0aGlzIHdoZW4gY2FsbGVycyBoYXZlIGJlZW4gbWlncmF0ZWQgdG8gdGhlIGVxdWl2YWxlbnQKICAgICAvLyBJTm90aWZpY2F0aW9uTGlzdGVuZXIgbWV0aG9kLgpAQCAtNzYsNiArNzgsOCBAQAogICAgIHZvaWQgc2V0T25Ob3RpZmljYXRpb25Qb3N0ZWRUcmltRnJvbUxpc3RlbmVyKGluIElOb3RpZmljYXRpb25MaXN0ZW5lciB0b2tlbiwgaW50IHRyaW0pOwogICAgIHZvaWQgc2V0SW50ZXJydXB0aW9uRmlsdGVyKFN0cmluZyBwa2csIGludCBpbnRlcnJ1cHRpb25GaWx0ZXIpOwogCisgICAgdm9pZCBzZXRJbXBvcnRhbmNlRnJvbUFzc2lzdGFudChpbiBJTm90aWZpY2F0aW9uTGlzdGVuZXIgdG9rZW4sIFN0cmluZyBrZXksIGludCBpbXBvcnRhbmNlLCBDaGFyU2VxdWVuY2UgZXhwbGFuYXRpb24pOworCiAgICAgQ29tcG9uZW50TmFtZSBnZXRFZmZlY3RzU3VwcHJlc3NvcigpOwogICAgIGJvb2xlYW4gbWF0Y2hlc0NhbGxGaWx0ZXIoaW4gQnVuZGxlIGV4dHJhcyk7CiAgICAgYm9vbGVhbiBpc1N5c3RlbUNvbmRpdGlvblByb3ZpZGVyRW5hYmxlZChTdHJpbmcgcGF0aCk7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvSVRhc2tTdGFja0xpc3RlbmVyLmFpZGwgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvSVRhc2tTdGFja0xpc3RlbmVyLmFpZGwKaW5kZXggNGIwOTM1Yy4uNTYwZTIyYSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0lUYXNrU3RhY2tMaXN0ZW5lci5haWRsCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9JVGFza1N0YWNrTGlzdGVuZXIuYWlkbApAQCAtMTgsNSArMTgsOSBAQAogCiAvKiogQGhpZGUgKi8KIG9uZXdheSBpbnRlcmZhY2UgSVRhc2tTdGFja0xpc3RlbmVyIHsKKyAgICAvKiogQ2FsbGVkIHdoZW5ldmVyIHRoZXJlIGFyZSBjaGFuZ2VzIHRvIHRoZSBzdGF0ZSBvZiB0YXNrcyBpbiBhIHN0YWNrLiAqLwogICAgIHZvaWQgb25UYXNrU3RhY2tDaGFuZ2VkKCk7CisKKyAgICAvKiogQ2FsbGVkIHdoZW5ldmVyIGFuIEFjdGl2aXR5IGlzIG1vdmVkIHRvIHRoZSBwaW5uZWQgc3RhY2sgZnJvbSBhbm90aGVyIHN0YWNrLiAqLworICAgIHZvaWQgb25BY3Rpdml0eVBpbm5lZCgpOwogfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0xvYWRlZEFway5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0xvYWRlZEFway5qYXZhCmluZGV4IDczMTNmZDEuLjg1NWIyMWUgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9Mb2FkZWRBcGsuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvTG9hZGVkQXBrLmphdmEKQEAgLTM2NiwxMiArMzY2LDIxIEBACiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgICAgICBTdHJpbmcgbGlicmFyeVBlcm1pdHRlZFBhdGggPSBtQXBwRGlyICsgRmlsZS5wYXRoU2VwYXJhdG9yICsgbURhdGFEaXI7CisgICAgICAgICAgICAgICAgYm9vbGVhbiBpc0J1bmRsZWRBcHAgPSBmYWxzZTsKKwogICAgICAgICAgICAgICAgIGlmIChtQXBwbGljYXRpb25JbmZvLmlzU3lzdGVtQXBwKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaXNCdW5kbGVkQXBwID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHBhdGggdG8gc3lzdGVtIGxpYnJhcmllcyB0byBsaWJQYXRoczsKICAgICAgICAgICAgICAgICAgICAgLy8gQWNjZXNzIHRvIHN5c3RlbSBsaWJzIHNob3VsZCBiZSBsaW1pdGVkCiAgICAgICAgICAgICAgICAgICAgIC8vIHRvIGJ1bmRsZWQgYXBwbGljYXRpb25zOyB0aGlzIGlzIHdoeSB1cGRhdGVkCiAgICAgICAgICAgICAgICAgICAgIC8vIHN5c3RlbSBhcHBzIGFyZSBub3QgaW5jbHVkZWQuCiAgICAgICAgICAgICAgICAgICAgIGxpYlBhdGhzLmFkZChTeXN0ZW0uZ2V0UHJvcGVydHkoImphdmEubGlicmFyeS5wYXRoIikpOworCisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIGdyYW50IGJ1bmRsZWQgYXBwcyBhY2Nlc3MgdG8KKyAgICAgICAgICAgICAgICAgICAgLy8gbGlicmFyaWVzIGxvY2F0ZWQgaW4gc3ViZGlyZWN0b3JpZXMgb2YgL3N5c3RlbS9saWIKKyAgICAgICAgICAgICAgICAgICAgbGlicmFyeVBlcm1pdHRlZFBhdGggKz0gRmlsZS5wYXRoU2VwYXJhdG9yICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmdldFByb3BlcnR5KCJqYXZhLmxpYnJhcnkucGF0aCIpOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBsaWJyYXJ5U2VhcmNoUGF0aCA9IFRleHRVdGlscy5qb2luKEZpbGUucGF0aFNlcGFyYXRvciwgbGliUGF0aHMpOwpAQCAtMzg5LDEwICszOTgsOCBAQAogICAgICAgICAgICAgICAgIC8vIGFzIHRoaXMgaXMgZWFybHkgYW5kIG5lY2Vzc2FyeS4KICAgICAgICAgICAgICAgICBTdHJpY3RNb2RlLlRocmVhZFBvbGljeSBvbGRQb2xpY3kgPSBTdHJpY3RNb2RlLmFsbG93VGhyZWFkRGlza1JlYWRzKCk7CiAKLSAgICAgICAgICAgICAgICBTdHJpbmcgbGlicmFyeVBlcm1pdHRlZFBhdGggPSBtQXBwRGlyICsgRmlsZS5wYXRoU2VwYXJhdG9yICsgbURhdGFEaXI7Ci0KLSAgICAgICAgICAgICAgICBtQ2xhc3NMb2FkZXIgPSBBcHBsaWNhdGlvbkxvYWRlcnMuZ2V0RGVmYXVsdCgpLmdldENsYXNzTG9hZGVyKHppcCwgbGlicmFyeVNlYXJjaFBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5UGVybWl0dGVkUGF0aCwgbUJhc2VDbGFzc0xvYWRlcik7CisgICAgICAgICAgICAgICAgbUNsYXNzTG9hZGVyID0gQXBwbGljYXRpb25Mb2FkZXJzLmdldERlZmF1bHQoKS5nZXRDbGFzc0xvYWRlcih6aXAsIGlzQnVuZGxlZEFwcCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcnlTZWFyY2hQYXRoLCBsaWJyYXJ5UGVybWl0dGVkUGF0aCwgbUJhc2VDbGFzc0xvYWRlcik7CiAKICAgICAgICAgICAgICAgICBTdHJpY3RNb2RlLnNldFRocmVhZFBvbGljeShvbGRQb2xpY3kpOwogICAgICAgICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24uamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24uamF2YQppbmRleCA2MjBhYjUwLi5hMzkyYWJkIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL05vdGlmaWNhdGlvbi5qYXZhCkBAIC0xNDUsNiArMTQ1LDExIEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BWF9DSEFSU0VRVUVOQ0VfTEVOR1RIID0gNSAqIDEwMjQ7CiAKICAgICAvKioKKyAgICAgKiBNYXhpbXVtIGVudHJpZXMgb2YgcmVwbHkgdGV4dCB0aGF0IGFyZSBhY2NlcHRlZCBieSBCdWlsZGVyIGFuZCBmcmllbmRzLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVhfUkVQTFlfSElTVE9SWSA9IDU7CisKKyAgICAvKioKICAgICAgKiBBIHRpbWVzdGFtcCByZWxhdGVkIHRvIHRoaXMgbm90aWZpY2F0aW9uLCBpbiBtaWxsaXNlY29uZHMgc2luY2UgdGhlIGVwb2NoLgogICAgICAqCiAgICAgICogRGVmYXVsdCB2YWx1ZToge0BsaW5rIFN5c3RlbSNjdXJyZW50VGltZU1pbGxpcygpIE5vd30uCkBAIC03NDUsNiArNzUwLDEyIEBACiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfU1VCX1RFWFQgPSAiYW5kcm9pZC5zdWJUZXh0IjsKIAogICAgIC8qKgorICAgICAqIHtAbGluayAjZXh0cmFzfSBrZXk6IHRoaXMgaXMgdGhlIHJlbW90ZSBpbnB1dCBoaXN0b3J5LCBhcyBzdXBwbGllZCB0bworICAgICAqIHtAbGluayBCdWlsZGVyI3NldFJlbW90ZUlucHV0SGlzdG9yeShDaGFyU2VxdWVuY2VbXSl9LgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX1JFTU9URV9JTlBVVF9ISVNUT1JZID0gImFuZHJvaWQucmVtb3RlSW5wdXRIaXN0b3J5IjsKKworICAgIC8qKgogICAgICAqIHtAbGluayAjZXh0cmFzfSBrZXk6IHRoaXMgaXMgYSBzbWFsbCBwaWVjZSBvZiBhZGRpdGlvbmFsIHRleHQgYXMgc3VwcGxpZWQgdG8KICAgICAgKiB7QGxpbmsgQnVpbGRlciNzZXRDb250ZW50SW5mbyhDaGFyU2VxdWVuY2UpfS4KICAgICAgKi8KQEAgLTIzMjQsNiArMjMzNSwzNCBAQAogICAgICAgICB9CiAKICAgICAgICAgLyoqCisgICAgICAgICAqIFNldCB0aGUgcmVtb3RlIGlucHV0IGhpc3RvcnkuCisgICAgICAgICAqCisgICAgICAgICAqIFRoaXMgc2hvdWxkIGJlIHNldCB0byB0aGUgbW9zdCByZWNlbnQgaW5wdXRzIHRoYXQgaGF2ZSBiZWVuIHNlbnQKKyAgICAgICAgICogdGhyb3VnaCBhIHtAbGluayBSZW1vdGVJbnB1dH0gb2YgdGhpcyBOb3RpZmljYXRpb24gYW5kIGNsZWFyZWQgb25jZSB0aGUgaXQgaXMgbm8KKyAgICAgICAgICogbG9uZ2VyIHJlbGV2YW50IChlLmcuIGZvciBjaGF0IG5vdGlmaWNhdGlvbnMgb25jZSB0aGUgb3RoZXIgcGFydHkgaGFzIHJlc3BvbmRlZCkuCisgICAgICAgICAqCisgICAgICAgICAqIFRoZSBtb3N0IHJlY2VudCBpbnB1dCBtdXN0IGJlIHN0b3JlZCBhdCB0aGUgMCBpbmRleCwgdGhlIHNlY29uZCBtb3N0IHJlY2VudCBhdCB0aGUKKyAgICAgICAgICogMSBpbmRleCwgZXRjLiBOb3RlIHRoYXQgdGhlIHN5c3RlbSB3aWxsIGxpbWl0IGJvdGggaG93IGZhciBiYWNrIHRoZSBpbnB1dHMgd2lsbCBiZSBzaG93bgorICAgICAgICAgKiBhbmQgaG93IG11Y2ggb2YgZWFjaCBpbmRpdmlkdWFsIGlucHV0IGlzIHNob3duLgorICAgICAgICAgKgorICAgICAgICAgKiA8cD5Ob3RlOiBUaGUgcmVwbHkgdGV4dCB3aWxsIG9ubHkgYmUgc2hvd24gb24gbm90aWZpY2F0aW9ucyB0aGF0IGhhdmUgbGVhc3Qgb25lIGFjdGlvbgorICAgICAgICAgKiB3aXRoIGEge0Bjb2RlIFJlbW90ZUlucHV0fS48L3A+CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXRSZW1vdGVJbnB1dEhpc3RvcnkoQ2hhclNlcXVlbmNlW10gdGV4dCkgeworICAgICAgICAgICAgaWYgKHRleHQgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG1OLmV4dHJhcy5wdXRDaGFyU2VxdWVuY2VBcnJheShFWFRSQV9SRU1PVEVfSU5QVVRfSElTVE9SWSwgbnVsbCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGZpbmFsIGludCBOID0gTWF0aC5taW4oTUFYX1JFUExZX0hJU1RPUlksIHRleHQubGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBDaGFyU2VxdWVuY2VbXSBzYWZlID0gbmV3IENoYXJTZXF1ZW5jZVtOXTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgeworICAgICAgICAgICAgICAgICAgICBzYWZlW2ldID0gc2FmZUNoYXJTZXF1ZW5jZSh0ZXh0W2ldKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbU4uZXh0cmFzLnB1dENoYXJTZXF1ZW5jZUFycmF5KEVYVFJBX1JFTU9URV9JTlBVVF9ISVNUT1JZLCBzYWZlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisKKyAgICAgICAgLyoqCiAgICAgICAgICAqIFNldCB0aGUgbGFyZ2UgbnVtYmVyIGF0IHRoZSByaWdodC1oYW5kIHNpZGUgb2YgdGhlIG5vdGlmaWNhdGlvbi4gIFRoaXMgaXMKICAgICAgICAgICogZXF1aXZhbGVudCB0byBzZXRDb250ZW50SW5mbywgYWx0aG91Z2ggaXQgbWlnaHQgc2hvdyB0aGUgbnVtYmVyIGluIGEgZGlmZmVyZW50CiAgICAgICAgICAqIGZvbnQgc2l6ZSBmb3IgcmVhZGFiaWxpdHkuCkBAIC0zMDAxLDYgKzMwNDAsNyBAQAogICAgICAgICAgICAgcmVzZXROb3RpZmljYXRpb25IZWFkZXIoY29udGVudFZpZXcpOwogICAgICAgICAgICAgcmVzZXRDb250ZW50TWFyZ2lucyhjb250ZW50Vmlldyk7CiAgICAgICAgICAgICBjb250ZW50Vmlldy5zZXRWaWV3VmlzaWJpbGl0eShSLmlkLnJpZ2h0X2ljb24sIFZpZXcuR09ORSk7CisgICAgICAgICAgICBjb250ZW50Vmlldy5zZXRWaWV3VmlzaWJpbGl0eShSLmlkLnRpdGxlLCBWaWV3LkdPTkUpOwogICAgICAgICAgICAgY29udGVudFZpZXcuc2V0VGV4dFZpZXdUZXh0KFIuaWQudGl0bGUsIG51bGwpOwogICAgICAgICAgICAgY29udGVudFZpZXcuc2V0VGV4dFZpZXdUZXh0KFIuaWQudGV4dCwgbnVsbCk7CiAgICAgICAgICAgICBjb250ZW50Vmlldy5zZXRWaWV3VmlzaWJpbGl0eShSLmlkLmxpbmUzLCBWaWV3LkdPTkUpOwpAQCAtMzA0Nyw2ICszMDg3LDcgQEAKICAgICAgICAgICAgIGJpbmROb3RpZmljYXRpb25IZWFkZXIoY29udGVudFZpZXcpOwogICAgICAgICAgICAgYmluZExhcmdlSWNvbihjb250ZW50Vmlldyk7CiAgICAgICAgICAgICBpZiAoZXguZ2V0Q2hhclNlcXVlbmNlKEVYVFJBX1RJVExFKSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgY29udGVudFZpZXcuc2V0Vmlld1Zpc2liaWxpdHkoUi5pZC50aXRsZSwgVmlldy5WSVNJQkxFKTsKICAgICAgICAgICAgICAgICBjb250ZW50Vmlldy5zZXRUZXh0Vmlld1RleHQoUi5pZC50aXRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NMZWdhY3lUZXh0KGV4LmdldENoYXJTZXF1ZW5jZShFWFRSQV9USVRMRSkpKTsKICAgICAgICAgICAgIH0KQEAgLTMwNjUsMTAgKzMxMDYsMjYgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIE5vdGUgZ2V0U3RhbmRhcmRWaWV3IG1heSBoaWRlIGxpbmUgMyBhZ2Fpbi4KICAgICAgICAgICAgIGNvbnRlbnRWaWV3LnNldFZpZXdWaXNpYmlsaXR5KFIuaWQubGluZTMsIHNob3dMaW5lMyA/IFZpZXcuVklTSUJMRSA6IFZpZXcuR09ORSk7CisgICAgICAgICAgICBzZXRDb250ZW50TWluSGVpZ2h0KGNvbnRlbnRWaWV3LCBzaG93UHJvZ3Jlc3MgfHwgbU4ubUxhcmdlSWNvbiAhPSBudWxsKTsKIAogICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnRWaWV3OwogICAgICAgICB9CiAKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBwYXJhbSByZW1vdGVWaWV3IHRoZSByZW1vdGUgdmlldyB0byB1cGRhdGUgdGhlIG1pbmhlaWdodCBpbgorICAgICAgICAgKiBAcGFyYW0gaGFzTWluSGVpZ2h0IGRvZXMgaXQgaGF2ZSBhIG1pbUhlaWdodAorICAgICAgICAgKiBAaGlkZQorICAgICAgICAgKi8KKyAgICAgICAgdm9pZCBzZXRDb250ZW50TWluSGVpZ2h0KFJlbW90ZVZpZXdzIHJlbW90ZVZpZXcsIGJvb2xlYW4gaGFzTWluSGVpZ2h0KSB7CisgICAgICAgICAgICBpbnQgbWluSGVpZ2h0ID0gMDsKKyAgICAgICAgICAgIGlmIChoYXNNaW5IZWlnaHQpIHsKKyAgICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIHNldCB0aGUgbWluSGVpZ2h0IG9mIHRoZSBub3RpZmljYXRpb24KKyAgICAgICAgICAgICAgICBtaW5IZWlnaHQgPSBtQ29udGV4dC5nZXRSZXNvdXJjZXMoKS5nZXREaW1lbnNpb25QaXhlbFNpemUoCisgICAgICAgICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmRpbWVuLm5vdGlmaWNhdGlvbl9taW5fY29udGVudF9oZWlnaHQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVtb3RlVmlldy5zZXRJbnQoUi5pZC5ub3RpZmljYXRpb25fbWFpbl9jb2x1bW4sICJzZXRNaW5pbXVtSGVpZ2h0IiwgbWluSGVpZ2h0KTsKKyAgICAgICAgfQorCiAgICAgICAgIHByaXZhdGUgYm9vbGVhbiBoYW5kbGVQcm9ncmVzc0Jhcihib29sZWFuIGhhc1Byb2dyZXNzLCBSZW1vdGVWaWV3cyBjb250ZW50VmlldywgQnVuZGxlIGV4KSB7CiAgICAgICAgICAgICBmaW5hbCBpbnQgbWF4ID0gZXguZ2V0SW50KEVYVFJBX1BST0dSRVNTX01BWCwgMCk7CiAgICAgICAgICAgICBmaW5hbCBpbnQgcHJvZ3Jlc3MgPSBleC5nZXRJbnQoRVhUUkFfUFJPR1JFU1MsIDApOwpAQCAtMzIxNCw2ICszMjcxLDE0IEBACiAgICAgICAgIHByaXZhdGUgdm9pZCByZXNldFN0YW5kYXJkVGVtcGxhdGVXaXRoQWN0aW9ucyhSZW1vdGVWaWV3cyBiaWcpIHsKICAgICAgICAgICAgIGJpZy5zZXRWaWV3VmlzaWJpbGl0eShSLmlkLmFjdGlvbnMsIFZpZXcuR09ORSk7CiAgICAgICAgICAgICBiaWcucmVtb3ZlQWxsVmlld3MoUi5pZC5hY3Rpb25zKTsKKworICAgICAgICAgICAgYmlnLnNldFZpZXdWaXNpYmlsaXR5KFIuaWQubm90aWZpY2F0aW9uX21hdGVyaWFsX3JlcGx5X2NvbnRhaW5lciwgVmlldy5HT05FKTsKKyAgICAgICAgICAgIGJpZy5zZXRUZXh0Vmlld1RleHQoUi5pZC5ub3RpZmljYXRpb25fbWF0ZXJpYWxfcmVwbHlfdGV4dF8xLCBudWxsKTsKKworICAgICAgICAgICAgYmlnLnNldFZpZXdWaXNpYmlsaXR5KFIuaWQubm90aWZpY2F0aW9uX21hdGVyaWFsX3JlcGx5X3RleHRfMiwgVmlldy5HT05FKTsKKyAgICAgICAgICAgIGJpZy5zZXRUZXh0Vmlld1RleHQoUi5pZC5ub3RpZmljYXRpb25fbWF0ZXJpYWxfcmVwbHlfdGV4dF8yLCBudWxsKTsKKyAgICAgICAgICAgIGJpZy5zZXRWaWV3VmlzaWJpbGl0eShSLmlkLm5vdGlmaWNhdGlvbl9tYXRlcmlhbF9yZXBseV90ZXh0XzMsIFZpZXcuR09ORSk7CisgICAgICAgICAgICBiaWcuc2V0VGV4dFZpZXdUZXh0KFIuaWQubm90aWZpY2F0aW9uX21hdGVyaWFsX3JlcGx5X3RleHRfMywgbnVsbCk7CiAgICAgICAgIH0KIAogICAgICAgICBwcml2YXRlIFJlbW90ZVZpZXdzIGFwcGx5U3RhbmRhcmRUZW1wbGF0ZVdpdGhBY3Rpb25zKGludCBsYXlvdXRJZCkgewpAQCAtMzIyMSwxOCArMzI4Niw2MiBAQAogCiAgICAgICAgICAgICByZXNldFN0YW5kYXJkVGVtcGxhdGVXaXRoQWN0aW9ucyhiaWcpOwogCisgICAgICAgICAgICBib29sZWFuIHZhbGlkUmVtb3RlSW5wdXQgPSBmYWxzZTsKKwogICAgICAgICAgICAgaW50IE4gPSBtQWN0aW9ucy5zaXplKCk7CiAgICAgICAgICAgICBpZiAoTiA+IDApIHsKICAgICAgICAgICAgICAgICBiaWcuc2V0Vmlld1Zpc2liaWxpdHkoUi5pZC5hY3Rpb25zLCBWaWV3LlZJU0lCTEUpOwogICAgICAgICAgICAgICAgIGlmIChOPk1BWF9BQ1RJT05fQlVUVE9OUykgTj1NQVhfQUNUSU9OX0JVVFRPTlM7CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPE47IGkrKykgewotICAgICAgICAgICAgICAgICAgICBmaW5hbCBSZW1vdGVWaWV3cyBidXR0b24gPSBnZW5lcmF0ZUFjdGlvbkJ1dHRvbihtQWN0aW9ucy5nZXQoaSkpOworICAgICAgICAgICAgICAgICAgICBBY3Rpb24gYWN0aW9uID0gbUFjdGlvbnMuZ2V0KGkpOworICAgICAgICAgICAgICAgICAgICB2YWxpZFJlbW90ZUlucHV0IHw9IGhhc1ZhbGlkUmVtb3RlSW5wdXQoYWN0aW9uKTsKKworICAgICAgICAgICAgICAgICAgICBmaW5hbCBSZW1vdGVWaWV3cyBidXR0b24gPSBnZW5lcmF0ZUFjdGlvbkJ1dHRvbihhY3Rpb24pOwogICAgICAgICAgICAgICAgICAgICBiaWcuYWRkVmlldyhSLmlkLmFjdGlvbnMsIGJ1dHRvbik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorCisgICAgICAgICAgICBDaGFyU2VxdWVuY2VbXSByZXBseVRleHQgPSBtTi5leHRyYXMuZ2V0Q2hhclNlcXVlbmNlQXJyYXkoRVhUUkFfUkVNT1RFX0lOUFVUX0hJU1RPUlkpOworICAgICAgICAgICAgaWYgKHZhbGlkUmVtb3RlSW5wdXQgJiYgcmVwbHlUZXh0ICE9IG51bGwKKyAgICAgICAgICAgICAgICAgICAgJiYgcmVwbHlUZXh0Lmxlbmd0aCA+IDAgJiYgIVRleHRVdGlscy5pc0VtcHR5KHJlcGx5VGV4dFswXSkpIHsKKyAgICAgICAgICAgICAgICBiaWcuc2V0Vmlld1Zpc2liaWxpdHkoUi5pZC5ub3RpZmljYXRpb25fbWF0ZXJpYWxfcmVwbHlfY29udGFpbmVyLCBWaWV3LlZJU0lCTEUpOworICAgICAgICAgICAgICAgIGJpZy5zZXRUZXh0Vmlld1RleHQoUi5pZC5ub3RpZmljYXRpb25fbWF0ZXJpYWxfcmVwbHlfdGV4dF8xLCByZXBseVRleHRbMF0pOworCisgICAgICAgICAgICAgICAgaWYgKHJlcGx5VGV4dC5sZW5ndGggPiAxICYmICFUZXh0VXRpbHMuaXNFbXB0eShyZXBseVRleHRbMV0pKSB7CisgICAgICAgICAgICAgICAgICAgIGJpZy5zZXRWaWV3VmlzaWJpbGl0eShSLmlkLm5vdGlmaWNhdGlvbl9tYXRlcmlhbF9yZXBseV90ZXh0XzIsIFZpZXcuVklTSUJMRSk7CisgICAgICAgICAgICAgICAgICAgIGJpZy5zZXRUZXh0Vmlld1RleHQoUi5pZC5ub3RpZmljYXRpb25fbWF0ZXJpYWxfcmVwbHlfdGV4dF8yLCByZXBseVRleHRbMV0pOworCisgICAgICAgICAgICAgICAgICAgIGlmIChyZXBseVRleHQubGVuZ3RoID4gMiAmJiAhVGV4dFV0aWxzLmlzRW1wdHkocmVwbHlUZXh0WzJdKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYmlnLnNldFZpZXdWaXNpYmlsaXR5KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSLmlkLm5vdGlmaWNhdGlvbl9tYXRlcmlhbF9yZXBseV90ZXh0XzMsIFZpZXcuVklTSUJMRSk7CisgICAgICAgICAgICAgICAgICAgICAgICBiaWcuc2V0VGV4dFZpZXdUZXh0KFIuaWQubm90aWZpY2F0aW9uX21hdGVyaWFsX3JlcGx5X3RleHRfMywgcmVwbHlUZXh0WzJdKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgcmV0dXJuIGJpZzsKICAgICAgICAgfQogCisgICAgICAgIHByaXZhdGUgYm9vbGVhbiBoYXNWYWxpZFJlbW90ZUlucHV0KEFjdGlvbiBhY3Rpb24pIHsKKyAgICAgICAgICAgIGlmIChUZXh0VXRpbHMuaXNFbXB0eShhY3Rpb24udGl0bGUpIHx8IGFjdGlvbi5hY3Rpb25JbnRlbnQgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIC8vIFdlaXJkIGFjdGlvbnMKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFJlbW90ZUlucHV0W10gcmVtb3RlSW5wdXRzID0gYWN0aW9uLmdldFJlbW90ZUlucHV0cygpOworICAgICAgICAgICAgaWYgKHJlbW90ZUlucHV0cyA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKFJlbW90ZUlucHV0IHIgOiByZW1vdGVJbnB1dHMpIHsKKyAgICAgICAgICAgICAgICBDaGFyU2VxdWVuY2VbXSBjaG9pY2VzID0gci5nZXRDaG9pY2VzKCk7CisgICAgICAgICAgICAgICAgaWYgKHIuZ2V0QWxsb3dGcmVlRm9ybUlucHV0KCkgfHwgKGNob2ljZXMgIT0gbnVsbCAmJiBjaG9pY2VzLmxlbmd0aCAhPSAwKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKwogICAgICAgICAvKioKICAgICAgICAgICogQ29uc3RydWN0IGEgUmVtb3RlVmlld3MgZm9yIHRoZSBmaW5hbCAxVSBub3RpZmljYXRpb24gbGF5b3V0LiBJbiBvcmRlcjoKICAgICAgICAgICogICAxLiBDdXN0b20gY29udGVudFZpZXcgZnJvbSB0aGUgY2FsbGVyCkBAIC0zMzEyLDYgKzM0MjEsMzcgQEAKICAgICAgICAgICAgIHJldHVybiBhcHBseVN0YW5kYXJkVGVtcGxhdGVXaXRoQWN0aW9ucyhnZXRCaWdCYXNlTGF5b3V0UmVzb3VyY2UoKSk7CiAgICAgICAgIH0KIAorICAgICAgICAvKioKKyAgICAgICAgICogQ29uc3RydWN0IGEgUmVtb3RlVmlld3MgZm9yIHRoZSBkaXNwbGF5IGluIHB1YmxpYyBjb250ZXh0cyBsaWtlIG9uIHRoZSBsb2Nrc2NyZWVuLgorICAgICAgICAgKgorICAgICAgICAgKiBAaGlkZQorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIFJlbW90ZVZpZXdzIG1ha2VQdWJsaWNDb250ZW50VmlldygpIHsKKyAgICAgICAgICAgIGlmIChtTi5wdWJsaWNWZXJzaW9uICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBCdWlsZGVyIGJ1aWxkZXIgPSByZWNvdmVyQnVpbGRlcihtQ29udGV4dCwgbU4ucHVibGljVmVyc2lvbik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJ1aWxkZXIubWFrZUNvbnRlbnRWaWV3KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBCdW5kbGUgc2F2ZWRCdW5kbGUgPSBtTi5leHRyYXM7CisgICAgICAgICAgICBTdHlsZSBzdHlsZSA9IG1TdHlsZTsKKyAgICAgICAgICAgIG1TdHlsZSA9IG51bGw7CisgICAgICAgICAgICBJY29uIGxhcmdlSWNvbiA9IG1OLm1MYXJnZUljb247CisgICAgICAgICAgICBtTi5tTGFyZ2VJY29uID0gbnVsbDsKKyAgICAgICAgICAgIEJ1bmRsZSBwdWJsaWNFeHRyYXMgPSBuZXcgQnVuZGxlKCk7CisgICAgICAgICAgICBwdWJsaWNFeHRyYXMucHV0Qm9vbGVhbihFWFRSQV9TSE9XX1dIRU4sCisgICAgICAgICAgICAgICAgICAgIHNhdmVkQnVuZGxlLmdldEJvb2xlYW4oRVhUUkFfU0hPV19XSEVOKSk7CisgICAgICAgICAgICBwdWJsaWNFeHRyYXMucHV0Qm9vbGVhbihFWFRSQV9TSE9XX0NIUk9OT01FVEVSLAorICAgICAgICAgICAgICAgICAgICBzYXZlZEJ1bmRsZS5nZXRCb29sZWFuKEVYVFJBX1NIT1dfQ0hST05PTUVURVIpKTsKKyAgICAgICAgICAgIHB1YmxpY0V4dHJhcy5wdXRDaGFyU2VxdWVuY2UoRVhUUkFfVElUTEUsCisgICAgICAgICAgICAgICAgICAgIG1Db250ZXh0LmdldFN0cmluZyhSLnN0cmluZy5ub3RpZmljYXRpb25faGlkZGVuX3RleHQpKTsKKyAgICAgICAgICAgIG1OLmV4dHJhcyA9IHB1YmxpY0V4dHJhczsKKyAgICAgICAgICAgIGZpbmFsIFJlbW90ZVZpZXdzIHB1YmxpY1ZpZXcgPSBhcHBseVN0YW5kYXJkVGVtcGxhdGUoZ2V0QmFzZUxheW91dFJlc291cmNlKCkpOworICAgICAgICAgICAgbU4uZXh0cmFzID0gc2F2ZWRCdW5kbGU7CisgICAgICAgICAgICBtTi5tTGFyZ2VJY29uID0gbGFyZ2VJY29uOworICAgICAgICAgICAgbVN0eWxlID0gc3R5bGU7CisgICAgICAgICAgICByZXR1cm4gcHVibGljVmlldzsKKyAgICAgICAgfQorCisKIAogICAgICAgICBwcml2YXRlIFJlbW90ZVZpZXdzIGdlbmVyYXRlQWN0aW9uQnV0dG9uKEFjdGlvbiBhY3Rpb24pIHsKICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gdG9tYnN0b25lID0gKGFjdGlvbi5hY3Rpb25JbnRlbnQgPT0gbnVsbCk7CkBAIC0zODAxLDEyICszOTQxLDcgQEAKICAgICAgICAgICAgICAgICBjb250ZW50Vmlldy5zZXRUZXh0Vmlld1RleHQoUi5pZC50ZXh0LCBtQnVpbGRlci5wcm9jZXNzTGVnYWN5VGV4dChtU3VtbWFyeVRleHQpKTsKICAgICAgICAgICAgICAgICBjb250ZW50Vmlldy5zZXRWaWV3VmlzaWJpbGl0eShSLmlkLmxpbmUzLCBWaWV3LlZJU0lCTEUpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaW50IGltYWdlTWluSGVpZ2h0ID0gbUJ1aWxkZXIubUNvbnRleHQuZ2V0UmVzb3VyY2VzKCkuZ2V0RGltZW5zaW9uUGl4ZWxTaXplKAotICAgICAgICAgICAgICAgICAgICBSLmRpbWVuLm5vdGlmaWNhdGlvbl9iaWdfcGljdHVyZV9jb250ZW50X21pbl9oZWlnaHRfd2l0aF9waWN0dXJlKTsKLSAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gbWFrZSBzcGFjZSBmb3IgdGhlIHJpZ2h0IGltYWdlLCBzbyB3ZSdyZSBlbmZvcmNpbmcgYSBtaW5oZWlnaHQgaWYgdGhlcmUKLSAgICAgICAgICAgIC8vIGlzIGEgcGljdHVyZS4KLSAgICAgICAgICAgIGludCBtaW5IZWlnaHQgPSAobUJ1aWxkZXIubU4ubUxhcmdlSWNvbiA9PSBudWxsKSA/IDAgOiBpbWFnZU1pbkhlaWdodDsKLSAgICAgICAgICAgIGNvbnRlbnRWaWV3LnNldEludChSLmlkLm5vdGlmaWNhdGlvbl9tYWluX2NvbHVtbiwgInNldE1pbmltdW1IZWlnaHQiLCBtaW5IZWlnaHQpOworICAgICAgICAgICAgbUJ1aWxkZXIuc2V0Q29udGVudE1pbkhlaWdodChjb250ZW50VmlldywgbUJ1aWxkZXIubU4ubUxhcmdlSWNvbiAhPSBudWxsKTsKIAogICAgICAgICAgICAgaWYgKG1CaWdMYXJnZUljb25TZXQpIHsKICAgICAgICAgICAgICAgICBtQnVpbGRlci5tTi5tTGFyZ2VJY29uID0gb2xkTGFyZ2VJY29uOwpAQCAtMzg3Myw4ICs0MDA4LDcgQEAKICAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEJpZ1RleHRTdHlsZSBleHRlbmRzIFN0eWxlIHsKIAogICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX0xJTkVTID0gMTM7Ci0gICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBMSU5FU19DT05TVU1FRF9CWV9BQ1RJT05TID0gMzsKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IExJTkVTX0NPTlNVTUVEX0JZX1NVTU1BUlkgPSAyOworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTElORVNfQ09OU1VNRURfQllfQUNUSU9OUyA9IDQ7CiAKICAgICAgICAgcHJpdmF0ZSBDaGFyU2VxdWVuY2UgbUJpZ1RleHQ7CiAKQEAgLTM5NDQsOCArNDA3OCwxMCBAQAogCiAgICAgICAgICAgICBtQnVpbGRlci5nZXRBbGxFeHRyYXMoKS5wdXRDaGFyU2VxdWVuY2UoRVhUUkFfVEVYVCwgb2xkQnVpbGRlckNvbnRlbnRUZXh0KTsKIAotICAgICAgICAgICAgY29udGVudFZpZXcuc2V0VGV4dFZpZXdUZXh0KFIuaWQuYmlnX3RleHQsIG1CdWlsZGVyLnByb2Nlc3NMZWdhY3lUZXh0KG1CaWdUZXh0KSk7Ci0gICAgICAgICAgICBjb250ZW50Vmlldy5zZXRWaWV3VmlzaWJpbGl0eShSLmlkLmJpZ190ZXh0LCBWaWV3LlZJU0lCTEUpOworICAgICAgICAgICAgQ2hhclNlcXVlbmNlIGJpZ1RleHRUZXh0ID0gbUJ1aWxkZXIucHJvY2Vzc0xlZ2FjeVRleHQobUJpZ1RleHQpOworICAgICAgICAgICAgY29udGVudFZpZXcuc2V0VGV4dFZpZXdUZXh0KFIuaWQuYmlnX3RleHQsIGJpZ1RleHRUZXh0KTsKKyAgICAgICAgICAgIGNvbnRlbnRWaWV3LnNldFZpZXdWaXNpYmlsaXR5KFIuaWQuYmlnX3RleHQsCisgICAgICAgICAgICAgICAgICAgIFRleHRVdGlscy5pc0VtcHR5KGJpZ1RleHRUZXh0KSA/IFZpZXcuR09ORSA6IFZpZXcuVklTSUJMRSk7CiAgICAgICAgICAgICBjb250ZW50Vmlldy5zZXRJbnQoUi5pZC5iaWdfdGV4dCwgInNldE1heExpbmVzIiwgY2FsY3VsYXRlTWF4TGluZXMoKSk7CiAKICAgICAgICAgICAgIG1CdWlsZGVyLmFkZFByb2ZpbGVCYWRnZShjb250ZW50VmlldywgUi5pZC5wcm9maWxlX2JhZGdlX2xhcmdlX3RlbXBsYXRlKTsKQEAgLTM5NTgsMTQgKzQwOTQsOSBAQAogICAgICAgICBwcml2YXRlIGludCBjYWxjdWxhdGVNYXhMaW5lcygpIHsKICAgICAgICAgICAgIGludCBsaW5lQ291bnQgPSBNQVhfTElORVM7CiAgICAgICAgICAgICBib29sZWFuIGhhc0FjdGlvbnMgPSBtQnVpbGRlci5tQWN0aW9ucy5zaXplKCkgPiAwOwotICAgICAgICAgICAgYm9vbGVhbiBoYXNTdW1tYXJ5ID0gKG1TdW1tYXJ5VGV4dFNldCA/IG1TdW1tYXJ5VGV4dAotICAgICAgICAgICAgICAgICAgICA6IG1CdWlsZGVyLmdldEFsbEV4dHJhcygpLmdldENoYXJTZXF1ZW5jZShFWFRSQV9TVUJfVEVYVCkpICE9IG51bGw7CiAgICAgICAgICAgICBpZiAoaGFzQWN0aW9ucykgewogICAgICAgICAgICAgICAgIGxpbmVDb3VudCAtPSBMSU5FU19DT05TVU1FRF9CWV9BQ1RJT05TOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGhhc1N1bW1hcnkpIHsKLSAgICAgICAgICAgICAgICBsaW5lQ291bnQgLT0gTElORVNfQ09OU1VNRURfQllfU1VNTUFSWTsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBsaW5lQ291bnQ7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uTWFuYWdlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL05vdGlmaWNhdGlvbk1hbmFnZXIuamF2YQppbmRleCA4NWQ5ODMxLi45YTNjODIwIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uTWFuYWdlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9Ob3RpZmljYXRpb25NYW5hZ2VyLmphdmEKQEAgLTYzNywxMCArNjM3LDEyIEBACiAgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNVUFBSRVNTRURfRUZGRUNUU19VTlNFVCA9IC0xOwogICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVVBQUkVTU0VEX0VGRkVDVF9MSUdIVFMgPSAxIDw8IDA7CiAgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNVUFBSRVNTRURfRUZGRUNUX1BFRUsgPSAxIDw8IDE7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNVUFBSRVNTRURfRUZGRUNUX1NDUkVFTl9PTiA9IDEgPDwgMjsKIAogICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnRbXSBBTExfU1VQUFJFU1NFRF9FRkZFQ1RTID0gewogICAgICAgICAgICAgICAgIFNVUFBSRVNTRURfRUZGRUNUX0xJR0hUUywKICAgICAgICAgICAgICAgICBTVVBQUkVTU0VEX0VGRkVDVF9QRUVLLAorICAgICAgICAgICAgICAgIFNVUFBSRVNTRURfRUZGRUNUX1NDUkVFTl9PTiwKICAgICAgICAgfTsKIAogICAgICAgICAvKioKQEAgLTc1MCw2ICs3NTIsNyBAQAogICAgICAgICAgICAgc3dpdGNoIChlZmZlY3QpIHsKICAgICAgICAgICAgICAgICBjYXNlIFNVUFBSRVNTRURfRUZGRUNUX0xJR0hUUzogcmV0dXJuICJTVVBQUkVTU0VEX0VGRkVDVF9MSUdIVFMiOwogICAgICAgICAgICAgICAgIGNhc2UgU1VQUFJFU1NFRF9FRkZFQ1RfUEVFSzogcmV0dXJuICJTVVBQUkVTU0VEX0VGRkVDVF9QRUVLIjsKKyAgICAgICAgICAgICAgICBjYXNlIFNVUFBSRVNTRURfRUZGRUNUX1NDUkVFTl9PTjogcmV0dXJuICJTVVBQUkVTU0VEX0VGRkVDVF9TQ1JFRU5fT04iOwogICAgICAgICAgICAgICAgIGNhc2UgU1VQUFJFU1NFRF9FRkZFQ1RTX1VOU0VUOiByZXR1cm4gIlNVUFBSRVNTRURfRUZGRUNUU19VTlNFVCI7CiAgICAgICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuICJVTktOT1dOXyIgKyBlZmZlY3Q7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvU3lzdGVtU2VydmljZVJlZ2lzdHJ5LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvU3lzdGVtU2VydmljZVJlZ2lzdHJ5LmphdmEKaW5kZXggMjg4YTJjYi4uODlkNTJmMiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL1N5c3RlbVNlcnZpY2VSZWdpc3RyeS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9TeXN0ZW1TZXJ2aWNlUmVnaXN0cnkuamF2YQpAQCAtMjQ3LDcgKzI0Nyw3IEBACiAgICAgICAgICAgICAgICAgbmV3IENhY2hlZFNlcnZpY2VGZXRjaGVyPERvd25sb2FkTWFuYWdlcj4oKSB7CiAgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgIHB1YmxpYyBEb3dubG9hZE1hbmFnZXIgY3JlYXRlU2VydmljZShDb250ZXh0SW1wbCBjdHgpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERvd25sb2FkTWFuYWdlcihjdHguZ2V0Q29udGVudFJlc29sdmVyKCksIGN0eC5nZXRQYWNrYWdlTmFtZSgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERvd25sb2FkTWFuYWdlcihjdHgpOwogICAgICAgICAgICAgfX0pOwogCiAgICAgICAgIHJlZ2lzdGVyU2VydmljZShDb250ZXh0LkJBVFRFUllfU0VSVklDRSwgQmF0dGVyeU1hbmFnZXIuY2xhc3MsCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvYWRtaW4vRGV2aWNlUG9saWN5TWFuYWdlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL2FkbWluL0RldmljZVBvbGljeU1hbmFnZXIuamF2YQppbmRleCA1ZGY2YmE4Li5mOTQwYmQ2IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvYWRtaW4vRGV2aWNlUG9saWN5TWFuYWdlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9hZG1pbi9EZXZpY2VQb2xpY3lNYW5hZ2VyLmphdmEKQEAgLTQxNDIsNiArNDE0MiwxMCBAQAogICAgICAqIDxwPldoZW4gYWNjb3VudCBtYW5hZ2VtZW50IGlzIGRpc2FibGVkIGZvciBhbiBhY2NvdW50IHR5cGUsIGFkZGluZyBvciByZW1vdmluZyBhbiBhY2NvdW50CiAgICAgICogb2YgdGhhdCB0eXBlIHdpbGwgbm90IGJlIHBvc3NpYmxlLgogICAgICAqCisgICAgICogPHA+RnJvbSB7QGxpbmsgYW5kcm9pZC5vcy5CdWlsZC5WRVJTSU9OX0NPREVTI059IHRoZSBwcm9maWxlIG9yIGRldmljZSBvd25lciBjYW4gc3RpbGwgdXNlCisgICAgICoge0BsaW5rIGFuZHJvaWQuYWNjb3VudHMuQWNjb3VudE1hbmFnZXJ9IEFQSXMgdG8gYWRkIG9yIHJlbW92ZSBhY2NvdW50cyB3aGVuIGFjY291bnQKKyAgICAgKiBtYW5hZ2VtZW50IGZvciBhIHNwZWNpZmljIHR5cGUgaXMgZGlzYWJsZWQuCisgICAgICoKICAgICAgKiBAcGFyYW0gYWRtaW4gV2hpY2gge0BsaW5rIERldmljZUFkbWluUmVjZWl2ZXJ9IHRoaXMgcmVxdWVzdCBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgICogQHBhcmFtIGFjY291bnRUeXBlIEZvciB3aGljaCBhY2NvdW50IG1hbmFnZW1lbnQgaXMgZGlzYWJsZWQgb3IgZW5hYmxlZC4KICAgICAgKiBAcGFyYW0gZGlzYWJsZWQgVGhlIGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IGFjY291bnQgbWFuYWdlbWVudCB3aWxsIGJlIGRpc2FibGVkICh0cnVlKSBvcgpAQCAtNDc5OCw0ICs0ODAyLDEyOSBAQAogICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIHJlKTsKICAgICAgICAgfQogICAgIH0KKworICAgIC8qKgorICAgICAqIENhbGxlZCBieSBhIGRldmljZSBhZG1pbiB0byBzZXQgdGhlIHNob3J0IHN1cHBvcnQgbWVzc2FnZS4gVGhpcyB3aWxsCisgICAgICogYmUgZGlzcGxheWVkIHRvIHRoZSB1c2VyIGluIHNldHRpbmdzIHNjcmVlbnMgd2hlcmUgZnVudGlvbmFsaXR5IGhhcworICAgICAqIGJlZW4gZGlzYWJsZWQgYnkgdGhlIGFkbWluLgorICAgICAqCisgICAgICogVGhlIG1lc3NhZ2Ugc2hvdWxkIGJlIGxpbWl0ZWQgdG8gYSBzaG9ydCBzdGF0ZW1lbnQgc3VjaCBhcworICAgICAqICJUaGlzIHNldHRpbmcgaXMgZGlzYWJsZWQgYnkgeW91ciBhZG1pbmlzdHJhdG9yLiBDb250YWN0IHNvbWVvbmVAZXhhbXBsZS5jb20KKyAgICAgKiAgZm9yIHN1cHBvcnQuIgorICAgICAqIElmIHRoZSBtZXNzYWdlIGlzIGxvbmdlciB0aGFuIDIwMCBjaGFyYWN0ZXJzIGl0IG1heSBiZSB0cnVuY2F0ZWQuCisgICAgICoKKyAgICAgKiBAc2VlICNzZXRMb25nU3VwcG9ydE1lc3NhZ2UKKyAgICAgKgorICAgICAqIEBwYXJhbSBhZG1pbiBXaGljaCB7QGxpbmsgRGV2aWNlQWRtaW5SZWNlaXZlcn0gdGhpcyByZXF1ZXN0IGlzIGFzc29jaWF0ZWQgd2l0aC4KKyAgICAgKiBAcGFyYW0gbWVzc2FnZSBTaG9ydCBtZXNzYWdlIHRvIGJlIGRpc3BsYXllZCB0byB0aGUgdXNlciBpbiBzZXR0aW5ncyBvciBudWxsIHRvCisgICAgICogICAgICAgIGNsZWFyIHRoZSBleGlzdGluZyBtZXNzYWdlLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldFNob3J0U3VwcG9ydE1lc3NhZ2UoQE5vbk51bGwgQ29tcG9uZW50TmFtZSBhZG1pbiwKKyAgICAgICAgICAgIEBOdWxsYWJsZSBTdHJpbmcgbWVzc2FnZSkgeworICAgICAgICBpZiAobVNlcnZpY2UgIT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBtU2VydmljZS5zZXRTaG9ydFN1cHBvcnRNZXNzYWdlKGFkbWluLCBtZXNzYWdlKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2FsbGVkIGJ5IGEgZGV2aWNlIGFkbWluIHRvIGdldCB0aGUgc2hvcnQgc3VwcG9ydCBtZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtIGFkbWluIFdoaWNoIHtAbGluayBEZXZpY2VBZG1pblJlY2VpdmVyfSB0aGlzIHJlcXVlc3QgaXMgYXNzb2NpYXRlZCB3aXRoLgorICAgICAqIEByZXR1cm4gVGhlIG1lc3NhZ2Ugc2V0IGJ5IHtAbGluayAjc2V0U2hvcnRTdXBwb3J0TWVzc2FnZShDb21wb25lbnROYW1lLCBTdHJpbmcpfQorICAgICAqICAgICAgICAgb3IgbnVsbCBpZiBubyBtZXNzYWdlIGhhcyBiZWVuIHNldC4KKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIGdldFNob3J0U3VwcG9ydE1lc3NhZ2UoQE5vbk51bGwgQ29tcG9uZW50TmFtZSBhZG1pbikgeworICAgICAgICBpZiAobVNlcnZpY2UgIT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbVNlcnZpY2UuZ2V0U2hvcnRTdXBwb3J0TWVzc2FnZShhZG1pbik7CisgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIExvZy53KFRBRywgUkVNT1RFX0VYQ0VQVElPTl9NRVNTQUdFLCBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDYWxsZWQgYnkgYSBkZXZpY2UgYWRtaW4gdG8gc2V0IHRoZSBsb25nIHN1cHBvcnQgbWVzc2FnZS4gVGhpcyB3aWxsCisgICAgICogYmUgZGlzcGxheWVkIHRvIHRoZSB1c2VyIGluIHRoZSBkZXZpY2UgYWRtaW5pc3RhdG9ycyBzZXR0aW5ncyBzY3JlZW4uCisgICAgICoKKyAgICAgKiBAc2VlICNzZXRTaG9ydFN1cHBvcnRNZXNzYWdlCisgICAgICoKKyAgICAgKiBAcGFyYW0gYWRtaW4gV2hpY2gge0BsaW5rIERldmljZUFkbWluUmVjZWl2ZXJ9IHRoaXMgcmVxdWVzdCBpcyBhc3NvY2lhdGVkIHdpdGguCisgICAgICogQHBhcmFtIG1lc3NhZ2UgTG9uZyBtZXNzYWdlIHRvIGJlIGRpc3BsYXllZCB0byB0aGUgdXNlciBpbiBzZXR0aW5ncyBvciBudWxsIHRvCisgICAgICogICAgICAgIGNsZWFyIHRoZSBleGlzdGluZyBtZXNzYWdlLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldExvbmdTdXBwb3J0TWVzc2FnZShATm9uTnVsbCBDb21wb25lbnROYW1lIGFkbWluLAorICAgICAgICAgICAgQE51bGxhYmxlIFN0cmluZyBtZXNzYWdlKSB7CisgICAgICAgIGlmIChtU2VydmljZSAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIG1TZXJ2aWNlLnNldExvbmdTdXBwb3J0TWVzc2FnZShhZG1pbiwgbWVzc2FnZSk7CisgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIExvZy53KFRBRywgUkVNT1RFX0VYQ0VQVElPTl9NRVNTQUdFLCBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIENhbGxlZCBieSBhIGRldmljZSBhZG1pbiB0byBnZXQgdGhlIGxvbmcgc3VwcG9ydCBtZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtIGFkbWluIFdoaWNoIHtAbGluayBEZXZpY2VBZG1pblJlY2VpdmVyfSB0aGlzIHJlcXVlc3QgaXMgYXNzb2NpYXRlZCB3aXRoLgorICAgICAqIEByZXR1cm4gVGhlIG1lc3NhZ2Ugc2V0IGJ5IHtAbGluayAjc2V0TG9uZ1N1cHBvcnRNZXNzYWdlKENvbXBvbmVudE5hbWUsIFN0cmluZyl9CisgICAgICogICAgICAgICBvciBudWxsIGlmIG5vIG1lc3NhZ2UgaGFzIGJlZW4gc2V0LgorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgZ2V0TG9uZ1N1cHBvcnRNZXNzYWdlKEBOb25OdWxsIENvbXBvbmVudE5hbWUgYWRtaW4pIHsKKyAgICAgICAgaWYgKG1TZXJ2aWNlICE9IG51bGwpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1TZXJ2aWNlLmdldExvbmdTdXBwb3J0TWVzc2FnZShhZG1pbik7CisgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIExvZy53KFRBRywgUkVNT1RFX0VYQ0VQVElPTl9NRVNTQUdFLCBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDYWxsZWQgYnkgdGhlIHN5c3RlbSB0byBnZXQgdGhlIHNob3J0IHN1cHBvcnQgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBhZG1pbiBXaGljaCB7QGxpbmsgRGV2aWNlQWRtaW5SZWNlaXZlcn0gdGhpcyByZXF1ZXN0IGlzIGFzc29jaWF0ZWQgd2l0aC4KKyAgICAgKiBAcGFyYW0gdXNlckhhbmRsZSB1c2VyIGlkIHRoZSBhZG1pbiBpcyBydW5uaW5nIGFzLgorICAgICAqIEByZXR1cm4gVGhlIG1lc3NhZ2Ugc2V0IGJ5IHtAbGluayAjc2V0U2hvcnRTdXBwb3J0TWVzc2FnZShDb21wb25lbnROYW1lLCBTdHJpbmcpfQorICAgICAqCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIGdldFNob3J0U3VwcG9ydE1lc3NhZ2VGb3JVc2VyKEBOb25OdWxsIENvbXBvbmVudE5hbWUgYWRtaW4sIGludCB1c2VySGFuZGxlKSB7CisgICAgICAgIGlmIChtU2VydmljZSAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHJldHVybiBtU2VydmljZS5nZXRTaG9ydFN1cHBvcnRNZXNzYWdlRm9yVXNlcihhZG1pbiwgdXNlckhhbmRsZSk7CisgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIExvZy53KFRBRywgUkVNT1RFX0VYQ0VQVElPTl9NRVNTQUdFLCBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqIENhbGxlZCBieSB0aGUgc3lzdGVtIHRvIGdldCB0aGUgbG9uZyBzdXBwb3J0IG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW0gYWRtaW4gV2hpY2gge0BsaW5rIERldmljZUFkbWluUmVjZWl2ZXJ9IHRoaXMgcmVxdWVzdCBpcyBhc3NvY2lhdGVkIHdpdGguCisgICAgICogQHBhcmFtIHVzZXJIYW5kbGUgdXNlciBpZCB0aGUgYWRtaW4gaXMgcnVubmluZyBhcy4KKyAgICAgKiBAcmV0dXJuIFRoZSBtZXNzYWdlIHNldCBieSB7QGxpbmsgI3NldExvbmdTdXBwb3J0TWVzc2FnZShDb21wb25lbnROYW1lLCBTdHJpbmcpfQorICAgICAqCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIGdldExvbmdTdXBwb3J0TWVzc2FnZUZvclVzZXIoQE5vbk51bGwgQ29tcG9uZW50TmFtZSBhZG1pbiwgaW50IHVzZXJIYW5kbGUpIHsKKyAgICAgICAgaWYgKG1TZXJ2aWNlICE9IG51bGwpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1TZXJ2aWNlLmdldExvbmdTdXBwb3J0TWVzc2FnZUZvclVzZXIoYWRtaW4sIHVzZXJIYW5kbGUpOworICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsIFJFTU9URV9FWENFUFRJT05fTUVTU0FHRSwgZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL2FkbWluL0lEZXZpY2VQb2xpY3lNYW5hZ2VyLmFpZGwgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvYWRtaW4vSURldmljZVBvbGljeU1hbmFnZXIuYWlkbAppbmRleCAzMGNlNjgyLi5mNDgwYTAyIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvYWRtaW4vSURldmljZVBvbGljeU1hbmFnZXIuYWlkbAorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvYWRtaW4vSURldmljZVBvbGljeU1hbmFnZXIuYWlkbApAQCAtMjQ1LDQgKzI0NSwxMiBAQAogICAgIGJvb2xlYW4gaXNTeXN0ZW1Pbmx5VXNlcihpbiBDb21wb25lbnROYW1lIGFkbWluKTsKICAgICBTdHJpbmcgZ2V0V2lmaU1hY0FkZHJlc3MoKTsKICAgICB2b2lkIHJlYm9vdChpbiBDb21wb25lbnROYW1lIGFkbWluKTsKKworICAgIHZvaWQgc2V0U2hvcnRTdXBwb3J0TWVzc2FnZShpbiBDb21wb25lbnROYW1lIGFkbWluLCBpbiBTdHJpbmcgbWVzc2FnZSk7CisgICAgU3RyaW5nIGdldFNob3J0U3VwcG9ydE1lc3NhZ2UoaW4gQ29tcG9uZW50TmFtZSBhZG1pbik7CisgICAgdm9pZCBzZXRMb25nU3VwcG9ydE1lc3NhZ2UoaW4gQ29tcG9uZW50TmFtZSBhZG1pbiwgaW4gU3RyaW5nIG1lc3NhZ2UpOworICAgIFN0cmluZyBnZXRMb25nU3VwcG9ydE1lc3NhZ2UoaW4gQ29tcG9uZW50TmFtZSBhZG1pbik7CisKKyAgICBTdHJpbmcgZ2V0U2hvcnRTdXBwb3J0TWVzc2FnZUZvclVzZXIoaW4gQ29tcG9uZW50TmFtZSBhZG1pbiwgaW50IHVzZXJIYW5kbGUpOworICAgIFN0cmluZyBnZXRMb25nU3VwcG9ydE1lc3NhZ2VGb3JVc2VyKGluIENvbXBvbmVudE5hbWUgYWRtaW4sIGludCB1c2VySGFuZGxlKTsKIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvQ29udGVudFByb3ZpZGVyQ2xpZW50LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L0NvbnRlbnRQcm92aWRlckNsaWVudC5qYXZhCmluZGV4IGQxMjU5NWYuLmRlYzBkOTEgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvQ29udGVudFByb3ZpZGVyQ2xpZW50LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9Db250ZW50UHJvdmlkZXJDbGllbnQuamF2YQpAQCAtMTksNiArMTksNyBAQAogaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5Ob25OdWxsOwogaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLkFzc2V0RmlsZURlc2NyaXB0b3I7CitpbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5Dcm9zc1Byb2Nlc3NDdXJzb3JXcmFwcGVyOwogaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2UuQ3Vyc29yOwogaW1wb3J0IGFuZHJvaWQubmV0LlVyaTsKIGltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKQEAgLTMyLDI3ICszMywzNCBAQAogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5hbm5vdGF0aW9ucy5HdWFyZGVkQnk7CitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuYW5ub3RhdGlvbnMuVmlzaWJsZUZvclRlc3Rpbmc7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5QcmVjb25kaXRpb25zOwogCiBpbXBvcnQgZGFsdmlrLnN5c3RlbS5DbG9zZUd1YXJkOwogCiBpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5hdG9taWMuQXRvbWljQm9vbGVhbjsKIAogLyoqCi0gKiBUaGUgcHVibGljIGludGVyZmFjZSBvYmplY3QgdXNlZCB0byBpbnRlcmFjdCB3aXRoIGEge0BsaW5rIENvbnRlbnRQcm92aWRlcn0uIFRoaXMgaXMgb2J0YWluZWQgYnkKLSAqIGNhbGxpbmcge0BsaW5rIENvbnRlbnRSZXNvbHZlciNhY3F1aXJlQ29udGVudFByb3ZpZGVyQ2xpZW50fS4gVGhpcyBvYmplY3QgbXVzdCBiZSByZWxlYXNlZAotICogdXNpbmcge0BsaW5rICNyZWxlYXNlfSBpbiBvcmRlciB0byBpbmRpY2F0ZSB0byB0aGUgc3lzdGVtIHRoYXQgdGhlIHtAbGluayBDb250ZW50UHJvdmlkZXJ9IGlzCi0gKiBubyBsb25nZXIgbmVlZGVkIGFuZCBjYW4gYmUga2lsbGVkIHRvIGZyZWUgdXAgcmVzb3VyY2VzLgotICoKLSAqIDxwPk5vdGUgdGhhdCB5b3Ugc2hvdWxkIGdlbmVyYWxseSBjcmVhdGUgYSBuZXcgQ29udGVudFByb3ZpZGVyQ2xpZW50IGluc3RhbmNlCi0gKiBmb3IgZWFjaCB0aHJlYWQgdGhhdCB3aWxsIGJlIHBlcmZvcm1pbmcgb3BlcmF0aW9ucy4gIFVubGlrZQorICogVGhlIHB1YmxpYyBpbnRlcmZhY2Ugb2JqZWN0IHVzZWQgdG8gaW50ZXJhY3Qgd2l0aCBhIHNwZWNpZmljCisgKiB7QGxpbmsgQ29udGVudFByb3ZpZGVyfS4KKyAqIDxwPgorICogSW5zdGFuY2VzIGNhbiBiZSBvYnRhaW5lZCBieSBjYWxsaW5nCisgKiB7QGxpbmsgQ29udGVudFJlc29sdmVyI2FjcXVpcmVDb250ZW50UHJvdmlkZXJDbGllbnR9IG9yCisgKiB7QGxpbmsgQ29udGVudFJlc29sdmVyI2FjcXVpcmVVbnN0YWJsZUNvbnRlbnRQcm92aWRlckNsaWVudH0uIEluc3RhbmNlcyBtdXN0CisgKiBiZSByZWxlYXNlZCB1c2luZyB7QGxpbmsgI2Nsb3NlKCl9IGluIG9yZGVyIHRvIGluZGljYXRlIHRvIHRoZSBzeXN0ZW0gdGhhdAorICogdGhlIHVuZGVybHlpbmcge0BsaW5rIENvbnRlbnRQcm92aWRlcn0gaXMgbm8gbG9uZ2VyIG5lZWRlZCBhbmQgY2FuIGJlIGtpbGxlZAorICogdG8gZnJlZSB1cCByZXNvdXJjZXMuCisgKiA8cD4KKyAqIE5vdGUgdGhhdCB5b3Ugc2hvdWxkIGdlbmVyYWxseSBjcmVhdGUgYSBuZXcgQ29udGVudFByb3ZpZGVyQ2xpZW50IGluc3RhbmNlCisgKiBmb3IgZWFjaCB0aHJlYWQgdGhhdCB3aWxsIGJlIHBlcmZvcm1pbmcgb3BlcmF0aW9ucy4gVW5saWtlCiAgKiB7QGxpbmsgQ29udGVudFJlc29sdmVyfSwgdGhlIG1ldGhvZHMgaGVyZSBzdWNoIGFzIHtAbGluayAjcXVlcnl9IGFuZAotICoge0BsaW5rICNvcGVuRmlsZX0gYXJlIG5vdCB0aHJlYWQgc2FmZSAtLSB5b3UgbXVzdCBub3QgY2FsbAotICoge0BsaW5rICNyZWxlYXNlKCl9IG9uIHRoZSBDb250ZW50UHJvdmlkZXJDbGllbnQgdGhvc2UgY2FsbHMgYXJlIG1hZGUgZnJvbQotICogdW50aWwgeW91IGFyZSBmaW5pc2hlZCB3aXRoIHRoZSBkYXRhIHRoZXkgaGF2ZSByZXR1cm5lZC4KKyAqIHtAbGluayAjb3BlbkZpbGV9IGFyZSBub3QgdGhyZWFkIHNhZmUgLS0geW91IG11c3Qgbm90IGNhbGwge0BsaW5rICNjbG9zZSgpfQorICogb24gdGhlIENvbnRlbnRQcm92aWRlckNsaWVudCB0aG9zZSBjYWxscyBhcmUgbWFkZSBmcm9tIHVudGlsIHlvdSBhcmUgZmluaXNoZWQKKyAqIHdpdGggdGhlIGRhdGEgdGhleSBoYXZlIHJldHVybmVkLgogICovCi1wdWJsaWMgY2xhc3MgQ29udGVudFByb3ZpZGVyQ2xpZW50IHsKK3B1YmxpYyBjbGFzcyBDb250ZW50UHJvdmlkZXJDbGllbnQgaW1wbGVtZW50cyBBdXRvQ2xvc2VhYmxlIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIkNvbnRlbnRQcm92aWRlckNsaWVudCI7CiAKICAgICBAR3VhcmRlZEJ5KCJDb250ZW50UHJvdmlkZXJDbGllbnQuY2xhc3MiKQpAQCAtNjMsMjIgKzcxLDIzIEBACiAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbVBhY2thZ2VOYW1lOwogICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBtU3RhYmxlOwogCi0gICAgcHJpdmF0ZSBmaW5hbCBDbG9zZUd1YXJkIG1HdWFyZCA9IENsb3NlR3VhcmQuZ2V0KCk7CisgICAgcHJpdmF0ZSBmaW5hbCBBdG9taWNCb29sZWFuIG1DbG9zZWQgPSBuZXcgQXRvbWljQm9vbGVhbigpOworICAgIHByaXZhdGUgZmluYWwgQ2xvc2VHdWFyZCBtQ2xvc2VHdWFyZCA9IENsb3NlR3VhcmQuZ2V0KCk7CiAKICAgICBwcml2YXRlIGxvbmcgbUFuclRpbWVvdXQ7CiAgICAgcHJpdmF0ZSBOb3RSZXNwb25kaW5nUnVubmFibGUgbUFuclJ1bm5hYmxlOwogCi0gICAgcHJpdmF0ZSBib29sZWFuIG1SZWxlYXNlZDsKLQogICAgIC8qKiB7QGhpZGV9ICovCi0gICAgQ29udGVudFByb3ZpZGVyQ2xpZW50KAorICAgIEBWaXNpYmxlRm9yVGVzdGluZworICAgIHB1YmxpYyBDb250ZW50UHJvdmlkZXJDbGllbnQoCiAgICAgICAgICAgICBDb250ZW50UmVzb2x2ZXIgY29udGVudFJlc29sdmVyLCBJQ29udGVudFByb3ZpZGVyIGNvbnRlbnRQcm92aWRlciwgYm9vbGVhbiBzdGFibGUpIHsKICAgICAgICAgbUNvbnRlbnRSZXNvbHZlciA9IGNvbnRlbnRSZXNvbHZlcjsKICAgICAgICAgbUNvbnRlbnRQcm92aWRlciA9IGNvbnRlbnRQcm92aWRlcjsKICAgICAgICAgbVBhY2thZ2VOYW1lID0gY29udGVudFJlc29sdmVyLm1QYWNrYWdlTmFtZTsKKwogICAgICAgICBtU3RhYmxlID0gc3RhYmxlOwogCi0gICAgICAgIG1HdWFyZC5vcGVuKCJyZWxlYXNlIik7CisgICAgICAgIG1DbG9zZUd1YXJkLm9wZW4oImNsb3NlIik7CiAgICAgfQogCiAgICAgLyoqIHtAaGlkZX0gKi8KQEAgLTEzMyw4ICsxNDIsOSBAQAogICAgICAgICAgICAgICAgIHJlbW90ZUNhbmNlbGxhdGlvblNpZ25hbCA9IG1Db250ZW50UHJvdmlkZXIuY3JlYXRlQ2FuY2VsbGF0aW9uU2lnbmFsKCk7CiAgICAgICAgICAgICAgICAgY2FuY2VsbGF0aW9uU2lnbmFsLnNldFJlbW90ZShyZW1vdGVDYW5jZWxsYXRpb25TaWduYWwpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG1Db250ZW50UHJvdmlkZXIucXVlcnkobVBhY2thZ2VOYW1lLCB1cmwsIHByb2plY3Rpb24sIHNlbGVjdGlvbiwgc2VsZWN0aW9uQXJncywKLSAgICAgICAgICAgICAgICAgICAgc29ydE9yZGVyLCByZW1vdGVDYW5jZWxsYXRpb25TaWduYWwpOworICAgICAgICAgICAgZmluYWwgQ3Vyc29yIGN1cnNvciA9IG1Db250ZW50UHJvdmlkZXIucXVlcnkobVBhY2thZ2VOYW1lLCB1cmwsIHByb2plY3Rpb24sIHNlbGVjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uQXJncywgc29ydE9yZGVyLCByZW1vdGVDYW5jZWxsYXRpb25TaWduYWwpOworICAgICAgICAgICAgcmV0dXJuIG5ldyBDdXJzb3JXcmFwcGVySW5uZXIoY3Vyc29yKTsKICAgICAgICAgfSBjYXRjaCAoRGVhZE9iamVjdEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBpZiAoIW1TdGFibGUpIHsKICAgICAgICAgICAgICAgICBtQ29udGVudFJlc29sdmVyLnVuc3RhYmxlUHJvdmlkZXJEaWVkKG1Db250ZW50UHJvdmlkZXIpOwpAQCAtNDQ2LDI5ICs0NTYsNDIgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBDYWxsIHRoaXMgdG8gaW5kaWNhdGUgdG8gdGhlIHN5c3RlbSB0aGF0IHRoZSBhc3NvY2lhdGVkIHtAbGluayBDb250ZW50UHJvdmlkZXJ9IGlzIG5vCi0gICAgICogbG9uZ2VyIG5lZWRlZCBieSB0aGlzIHtAbGluayBDb250ZW50UHJvdmlkZXJDbGllbnR9LgotICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGlzIHdhcyByZWxlYXNlLCBmYWxzZSBpZiBpdCB3YXMgYWxyZWFkeSByZWxlYXNlZAorICAgICAqIENsb3NlcyB0aGlzIGNsaWVudCBjb25uZWN0aW9uLCBpbmRpY2F0aW5nIHRvIHRoZSBzeXN0ZW0gdGhhdCB0aGUKKyAgICAgKiB1bmRlcmx5aW5nIHtAbGluayBDb250ZW50UHJvdmlkZXJ9IGlzIG5vIGxvbmdlciBuZWVkZWQuCiAgICAgICovCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgY2xvc2UoKSB7CisgICAgICAgIGNsb3NlSW50ZXJuYWwoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCBieSB7QGxpbmsgI2Nsb3NlKCl9LgorICAgICAqLworICAgIEBEZXByZWNhdGVkCiAgICAgcHVibGljIGJvb2xlYW4gcmVsZWFzZSgpIHsKLSAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7Ci0gICAgICAgICAgICBpZiAobVJlbGVhc2VkKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiQWxyZWFkeSByZWxlYXNlZCIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbVJlbGVhc2VkID0gdHJ1ZTsKLSAgICAgICAgICAgIG1HdWFyZC5jbG9zZSgpOworICAgICAgICByZXR1cm4gY2xvc2VJbnRlcm5hbCgpOworICAgIH0KKworICAgIHByaXZhdGUgYm9vbGVhbiBjbG9zZUludGVybmFsKCkgeworICAgICAgICBtQ2xvc2VHdWFyZC5jbG9zZSgpOworICAgICAgICBpZiAobUNsb3NlZC5jb21wYXJlQW5kU2V0KGZhbHNlLCB0cnVlKSkgewogICAgICAgICAgICAgaWYgKG1TdGFibGUpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gbUNvbnRlbnRSZXNvbHZlci5yZWxlYXNlUHJvdmlkZXIobUNvbnRlbnRQcm92aWRlcik7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHJldHVybiBtQ29udGVudFJlc29sdmVyLnJlbGVhc2VVbnN0YWJsZVByb3ZpZGVyKG1Db250ZW50UHJvdmlkZXIpOwogICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCiAgICAgcHJvdGVjdGVkIHZvaWQgZmluYWxpemUoKSB0aHJvd3MgVGhyb3dhYmxlIHsKLSAgICAgICAgaWYgKG1HdWFyZCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtR3VhcmQud2FybklmT3BlbigpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgbUNsb3NlR3VhcmQud2FybklmT3BlbigpOworICAgICAgICAgICAgY2xvc2UoKTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIHN1cGVyLmZpbmFsaXplKCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTUwMiw0ICs1MjUsMjkgQEAKICAgICAgICAgICAgIG1Db250ZW50UmVzb2x2ZXIuYXBwTm90UmVzcG9uZGluZ1ZpYVByb3ZpZGVyKG1Db250ZW50UHJvdmlkZXIpOwogICAgICAgICB9CiAgICAgfQorCisgICAgcHJpdmF0ZSBmaW5hbCBjbGFzcyBDdXJzb3JXcmFwcGVySW5uZXIgZXh0ZW5kcyBDcm9zc1Byb2Nlc3NDdXJzb3JXcmFwcGVyIHsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBDbG9zZUd1YXJkIG1DbG9zZUd1YXJkID0gQ2xvc2VHdWFyZC5nZXQoKTsKKworICAgICAgICBDdXJzb3JXcmFwcGVySW5uZXIoQ3Vyc29yIGN1cnNvcikgeworICAgICAgICAgICAgc3VwZXIoY3Vyc29yKTsKKyAgICAgICAgICAgIG1DbG9zZUd1YXJkLm9wZW4oImNsb3NlIik7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgY2xvc2UoKSB7CisgICAgICAgICAgICBtQ2xvc2VHdWFyZC5jbG9zZSgpOworICAgICAgICAgICAgc3VwZXIuY2xvc2UoKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgdm9pZCBmaW5hbGl6ZSgpIHRocm93cyBUaHJvd2FibGUgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBtQ2xvc2VHdWFyZC53YXJuSWZPcGVuKCk7CisgICAgICAgICAgICAgICAgY2xvc2UoKTsKKyAgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgICAgc3VwZXIuZmluYWxpemUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvQ29udGVudFJlc29sdmVyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlci5qYXZhCmluZGV4IDlkMGViYzIuLmNlNWQzYjEgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvQ29udGVudFJlc29sdmVyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9Db250ZW50UmVzb2x2ZXIuamF2YQpAQCAtNDcsMTEgKzQ3LDExIEBACiBpbXBvcnQgYW5kcm9pZC51dGlsLkV2ZW50TG9nOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKLWltcG9ydCBkYWx2aWsuc3lzdGVtLkNsb3NlR3VhcmQ7Ci0KIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLkFycmF5VXRpbHM7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5QcmVjb25kaXRpb25zOwogCitpbXBvcnQgZGFsdmlrLnN5c3RlbS5DbG9zZUd1YXJkOworCiBpbXBvcnQgamF2YS5pby5GaWxlOwogaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwogaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwpAQCAtNTksOSArNTksOSBAQAogaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CiBpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLlJhbmRvbTsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5hdG9taWMuQXRvbWljQm9vbGVhbjsKIAogLyoqCiAgKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGFwcGxpY2F0aW9ucyBhY2Nlc3MgdG8gdGhlIGNvbnRlbnQgbW9kZWwuCkBAIC01MTQsOCArNTE0LDkgQEAKICAgICAgICAgICAgIG1heWJlTG9nUXVlcnlUb0V2ZW50TG9nKGR1cmF0aW9uTWlsbGlzLCB1cmksIHByb2plY3Rpb24sIHNlbGVjdGlvbiwgc29ydE9yZGVyKTsKIAogICAgICAgICAgICAgLy8gV3JhcCB0aGUgY3Vyc29yIG9iamVjdCBpbnRvIEN1cnNvcldyYXBwZXJJbm5lciBvYmplY3QuCi0gICAgICAgICAgICBDdXJzb3JXcmFwcGVySW5uZXIgd3JhcHBlciA9IG5ldyBDdXJzb3JXcmFwcGVySW5uZXIocUN1cnNvciwKLSAgICAgICAgICAgICAgICAgICAgc3RhYmxlUHJvdmlkZXIgIT0gbnVsbCA/IHN0YWJsZVByb3ZpZGVyIDogYWNxdWlyZVByb3ZpZGVyKHVyaSkpOworICAgICAgICAgICAgZmluYWwgSUNvbnRlbnRQcm92aWRlciBwcm92aWRlciA9IChzdGFibGVQcm92aWRlciAhPSBudWxsKSA/IHN0YWJsZVByb3ZpZGVyCisgICAgICAgICAgICAgICAgICAgIDogYWNxdWlyZVByb3ZpZGVyKHVyaSk7CisgICAgICAgICAgICBmaW5hbCBDdXJzb3JXcmFwcGVySW5uZXIgd3JhcHBlciA9IG5ldyBDdXJzb3JXcmFwcGVySW5uZXIocUN1cnNvciwgcHJvdmlkZXIpOwogICAgICAgICAgICAgc3RhYmxlUHJvdmlkZXIgPSBudWxsOwogICAgICAgICAgICAgcUN1cnNvciA9IG51bGw7CiAgICAgICAgICAgICByZXR1cm4gd3JhcHBlcjsKQEAgLTI1MDMsNDEgKzI1MDQsMzEgQEAKIAogICAgIHByaXZhdGUgZmluYWwgY2xhc3MgQ3Vyc29yV3JhcHBlcklubmVyIGV4dGVuZHMgQ3Jvc3NQcm9jZXNzQ3Vyc29yV3JhcHBlciB7CiAgICAgICAgIHByaXZhdGUgZmluYWwgSUNvbnRlbnRQcm92aWRlciBtQ29udGVudFByb3ZpZGVyOwotICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUQUc9IkN1cnNvcldyYXBwZXJJbm5lciI7CisgICAgICAgIHByaXZhdGUgZmluYWwgQXRvbWljQm9vbGVhbiBtUHJvdmlkZXJSZWxlYXNlZCA9IG5ldyBBdG9taWNCb29sZWFuKCk7CiAKICAgICAgICAgcHJpdmF0ZSBmaW5hbCBDbG9zZUd1YXJkIG1DbG9zZUd1YXJkID0gQ2xvc2VHdWFyZC5nZXQoKTsKLSAgICAgICAgcHJpdmF0ZSBib29sZWFuIG1Qcm92aWRlclJlbGVhc2VkOwogCi0gICAgICAgIEN1cnNvcldyYXBwZXJJbm5lcihDdXJzb3IgY3Vyc29yLCBJQ29udGVudFByb3ZpZGVyIGljcCkgeworICAgICAgICBDdXJzb3JXcmFwcGVySW5uZXIoQ3Vyc29yIGN1cnNvciwgSUNvbnRlbnRQcm92aWRlciBjb250ZW50UHJvdmlkZXIpIHsKICAgICAgICAgICAgIHN1cGVyKGN1cnNvcik7Ci0gICAgICAgICAgICBtQ29udGVudFByb3ZpZGVyID0gaWNwOworICAgICAgICAgICAgbUNvbnRlbnRQcm92aWRlciA9IGNvbnRlbnRQcm92aWRlcjsKICAgICAgICAgICAgIG1DbG9zZUd1YXJkLm9wZW4oImNsb3NlIik7CiAgICAgICAgIH0KIAogICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHVibGljIHZvaWQgY2xvc2UoKSB7CisgICAgICAgICAgICBtQ2xvc2VHdWFyZC5jbG9zZSgpOwogICAgICAgICAgICAgc3VwZXIuY2xvc2UoKTsKLSAgICAgICAgICAgIENvbnRlbnRSZXNvbHZlci50aGlzLnJlbGVhc2VQcm92aWRlcihtQ29udGVudFByb3ZpZGVyKTsKLSAgICAgICAgICAgIG1Qcm92aWRlclJlbGVhc2VkID0gdHJ1ZTsKIAotICAgICAgICAgICAgaWYgKG1DbG9zZUd1YXJkICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtQ2xvc2VHdWFyZC5jbG9zZSgpOworICAgICAgICAgICAgaWYgKG1Qcm92aWRlclJlbGVhc2VkLmNvbXBhcmVBbmRTZXQoZmFsc2UsIHRydWUpKSB7CisgICAgICAgICAgICAgICAgQ29udGVudFJlc29sdmVyLnRoaXMucmVsZWFzZVByb3ZpZGVyKG1Db250ZW50UHJvdmlkZXIpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHByb3RlY3RlZCB2b2lkIGZpbmFsaXplKCkgdGhyb3dzIFRocm93YWJsZSB7CiAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGlmIChtQ2xvc2VHdWFyZCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1DbG9zZUd1YXJkLndhcm5JZk9wZW4oKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoIW1Qcm92aWRlclJlbGVhc2VkICYmIG1Db250ZW50UHJvdmlkZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAvLyBFdmVuIHRob3VnaCB3ZSBhcmUgdXNpbmcgQ2xvc2VHdWFyZCwgbG9nIHRoaXMgYW55d2F5IHNvIHRoYXQKLSAgICAgICAgICAgICAgICAgICAgLy8gYXBwbGljYXRpb24gZGV2ZWxvcGVycyBhbHdheXMgc2VlIHRoZSBtZXNzYWdlIGluIHRoZSBsb2cuCi0gICAgICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkN1cnNvciBmaW5hbGl6ZWQgd2l0aG91dCBwcmlvciBjbG9zZSgpIik7Ci0gICAgICAgICAgICAgICAgICAgIENvbnRlbnRSZXNvbHZlci50aGlzLnJlbGVhc2VQcm92aWRlcihtQ29udGVudFByb3ZpZGVyKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbUNsb3NlR3VhcmQud2FybklmT3BlbigpOworICAgICAgICAgICAgICAgIGNsb3NlKCk7CiAgICAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgICAgIHN1cGVyLmZpbmFsaXplKCk7CiAgICAgICAgICAgICB9CkBAIC0yNTQ2LDcgKzI1MzcsNyBAQAogCiAgICAgcHJpdmF0ZSBmaW5hbCBjbGFzcyBQYXJjZWxGaWxlRGVzY3JpcHRvcklubmVyIGV4dGVuZHMgUGFyY2VsRmlsZURlc2NyaXB0b3IgewogICAgICAgICBwcml2YXRlIGZpbmFsIElDb250ZW50UHJvdmlkZXIgbUNvbnRlbnRQcm92aWRlcjsKLSAgICAgICAgcHJpdmF0ZSBib29sZWFuIG1Qcm92aWRlclJlbGVhc2VkOworICAgICAgICBwcml2YXRlIGZpbmFsIEF0b21pY0Jvb2xlYW4gbVByb3ZpZGVyUmVsZWFzZWQgPSBuZXcgQXRvbWljQm9vbGVhbigpOwogCiAgICAgICAgIFBhcmNlbEZpbGVEZXNjcmlwdG9ySW5uZXIoUGFyY2VsRmlsZURlc2NyaXB0b3IgcGZkLCBJQ29udGVudFByb3ZpZGVyIGljcCkgewogICAgICAgICAgICAgc3VwZXIocGZkKTsKQEAgLTI1NTUsOSArMjU0Niw4IEBACiAKICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyB2b2lkIHJlbGVhc2VSZXNvdXJjZXMoKSB7Ci0gICAgICAgICAgICBpZiAoIW1Qcm92aWRlclJlbGVhc2VkKSB7CisgICAgICAgICAgICBpZiAobVByb3ZpZGVyUmVsZWFzZWQuY29tcGFyZUFuZFNldChmYWxzZSwgdHJ1ZSkpIHsKICAgICAgICAgICAgICAgICBDb250ZW50UmVzb2x2ZXIudGhpcy5yZWxlYXNlUHJvdmlkZXIobUNvbnRlbnRQcm92aWRlcik7Ci0gICAgICAgICAgICAgICAgbVByb3ZpZGVyUmVsZWFzZWQgPSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMjU4NCw3ICsyNTc0LDkgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIElDb250ZW50U2VydmljZSBzQ29udGVudFNlcnZpY2U7CiAgICAgcHJpdmF0ZSBmaW5hbCBDb250ZXh0IG1Db250ZXh0OworCiAgICAgZmluYWwgU3RyaW5nIG1QYWNrYWdlTmFtZTsKKwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiQ29udGVudFJlc29sdmVyIjsKIAogICAgIC8qKiBAaGlkZSAqLwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9JbnRlbnQuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvSW50ZW50LmphdmEKaW5kZXggOTk3M2ZhZi4uMzVjZDJiZSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9JbnRlbnQuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L0ludGVudC5qYXZhCkBAIC0zNjA0LDYgKzM2MDQsMTUgQEAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9VU0VSX0lEID0gImFuZHJvaWQuaW50ZW50LmV4dHJhLlVTRVJfSUQiOwogCiAgICAgLyoqCisgICAgICogQW4gaW50IHJlcHJlc2VudGluZyB0aGUgdGFzayBpZCB0byBiZSByZXRyaWV2ZWQuIFRoaXMgaXMgdXNlZCB3aGVuIGEgbGF1bmNoIGZyb20gcmVjZW50cyBpcworICAgICAqIGludGVyY2VwdGVkIGJ5IGFub3RoZXIgYWN0aW9uIHN1Y2ggYXMgY3JlZGVudGlhbHMgY29uZmlybWF0aW9uIHRvIHJlbWVtYmVyIHdoaWNoIHRhc2sgc2hvdWxkCisgICAgICogYmUgcmVzdW1lZCB3aGVuIGNvbXBsZXRlLgorICAgICAqCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9UQVNLX0lEID0gImFuZHJvaWQuaW50ZW50LmV4dHJhLlRBU0tfSUQiOworCisgICAgLyoqCiAgICAgICogQW4gSW50ZW50W10gZGVzY3JpYmluZyBhZGRpdGlvbmFsLCBhbHRlcm5hdGUgY2hvaWNlcyB5b3Ugd291bGQgbGlrZSBzaG93biB3aXRoCiAgICAgICoge0BsaW5rICNBQ1RJT05fQ0hPT1NFUn0uCiAgICAgICoKQEAgLTQxNjgsNiArNDE3NywyMSBAQAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfR1JBTlRfUFJFRklYX1VSSV9QRVJNSVNTSU9OID0gMHgwMDAwMDA4MDsKIAogICAgIC8qKgorICAgICAqIEludGVybmFsIGZsYWcgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IGEgc3lzdGVtIGNvbXBvbmVudCBoYXMgZG9uZSB0aGVpcgorICAgICAqIGhvbWV3b3JrIGFuZCB2ZXJpZmllZCB0aGF0IHRoZXkgY29ycmVjdGx5IGhhbmRsZSBwYWNrYWdlcyBhbmQgY29tcG9uZW50cworICAgICAqIHRoYXQgY29tZSBhbmQgZ28gb3ZlciB0aW1lLiBJbiBwYXJ0aWN1bGFyOgorICAgICAqIDx1bD4KKyAgICAgKiA8bGk+QXBwcyBpbnN0YWxsZWQgb24gZXh0ZXJuYWwgc3RvcmFnZSwgd2hpY2ggd2lsbCBhcHBlYXIgdG8gYmUKKyAgICAgKiB1bmluc3RhbGxlZCB3aGlsZSB0aGUgdGhlIGRldmljZSBpcyBlamVjdGVkLgorICAgICAqIDxsaT5BcHBzIHdpdGggZW5jcnlwdGlvbiB1bmF3YXJlIGNvbXBvbmVudHMsIHdoaWNoIHdpbGwgYXBwZWFyIHRvIG5vdAorICAgICAqIGV4aXN0IHdoaWxlIHRoZSBkZXZpY2UgaXMgbG9ja2VkLgorICAgICAqIDwvdWw+CisgICAgICoKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfREVCVUdfVFJJQUdFRF9NSVNTSU5HID0gMHgwMDAwMDEwMDsKKworICAgIC8qKgogICAgICAqIElmIHNldCwgdGhlIG5ldyBhY3Rpdml0eSBpcyBub3Qga2VwdCBpbiB0aGUgaGlzdG9yeSBzdGFjay4gIEFzIHNvb24gYXMKICAgICAgKiB0aGUgdXNlciBuYXZpZ2F0ZXMgYXdheSBmcm9tIGl0LCB0aGUgYWN0aXZpdHkgaXMgZmluaXNoZWQuICBUaGlzIG1heSBhbHNvCiAgICAgICogYmUgc2V0IHdpdGggdGhlIHtAbGluayBhbmRyb2lkLlIuc3R5bGVhYmxlI0FuZHJvaWRNYW5pZmVzdEFjdGl2aXR5X25vSGlzdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9wbS9BY3Rpdml0eUluZm8uamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcG0vQWN0aXZpdHlJbmZvLmphdmEKaW5kZXggMGNiMGU5Zi4uZGVkZjA3ZjUgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcG0vQWN0aXZpdHlJbmZvLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9wbS9BY3Rpdml0eUluZm8uamF2YQpAQCAtMjc2LDYgKzI3NiwzNSBAQAogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfUkVTVU1FX1dISUxFX1BBVVNJTkcgPSAweDQwMDA7CiAgICAgLyoqCisgICAgICogQml0IGluIHtAbGluayAjZmxhZ3N9IGluZGljYXRpbmcgdGhhdCB0aGlzIGFjdGl2aXR5IHNob3VsZCBiZSBydW4gd2l0aCBWUiBtb2RlIGVuYWJsZWQuCisgICAgICoKKyAgICAgKiB7QHNlZSBhbmRyb2lkLmFwcC5BY3Rpdml0eSNzZXRWck1vZGUoYm9vbGVhbil9LgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfRU5BQkxFX1ZSX01PREUgPSAweDgwMDA7CisKKyAgICAvKioKKyAgICAgKiBCaXQgaW4ge0BsaW5rICNmbGFnc30gaW5kaWNhdGluZyBpZiB0aGUgYWN0aXZpdHkgaXMgcmVzaXplYWJsZSB0byBhbnkgZGltZW5zaW9uLgorICAgICAqIFNlZSB7QGxpbmsgYW5kcm9pZC5SLmF0dHIjcmVzaXplYWJsZUFjdGl2aXR5fS4KKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfUkVTSVpFQUJMRSA9IDB4MTAwMDA7CisKKyAgICAvKioKKyAgICAgKiBCaXQgaW4ge0BsaW5rICNmbGFnc30gaW5kaWNhdGluZyBpZiB0aGUgYWN0aXZpdHkgaXMgc3VwcG9ydHMgcGljdHVyZS1pbi1waWN0dXJlIGZvcm0gb2YKKyAgICAgKiBtdWx0aS13aW5kb3cgbW9kZS4gU2VlIHtAbGluayBhbmRyb2lkLlIuYXR0ciNzdXBwb3J0c1BpY3R1cmVJblBpY3R1cmV9LgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19TVVBQT1JUU19QSUNUVVJFX0lOX1BJQ1RVUkUgPSAweDIwMDAwOworCisgICAgLyoqCisgICAgICogQml0IGluIHtAbGluayAjZmxhZ3N9IGluZGljYXRpbmcgaWYgdGhlIGFjdGl2aXR5IGlzIGFsd2F5cyBmb2N1c2FibGUgcmVnYXJkbGVzcyBvZiBpZiBpdCBpcworICAgICAqIGluIGEgdGFzay9zdGFjayB3aG9zZSBhY3Rpdml0aWVzIGFyZSBub3JtYWxseSBub3QgZm9jdXNhYmxlLgorICAgICAqIFNlZSBhbmRyb2lkLlIuYXR0ciNhbHdheXNGb2N1c2FibGUuCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX0FMV0FZU19GT0NVU0FCTEUgPSAweDQwMDAwOworCisgICAgLyoqCiAgICAgICogQGhpZGUgQml0IGluIHtAbGluayAjZmxhZ3N9OiBJZiBzZXQsIHRoaXMgY29tcG9uZW50IHdpbGwgb25seSBiZSBzZWVuCiAgICAgICogYnkgdGhlIHN5c3RlbSB1c2VyLiAgT25seSB3b3JrcyB3aXRoIGJyb2FkY2FzdCByZWNlaXZlcnMuICBTZXQgZnJvbSB0aGUKICAgICAgKiBhbmRyb2lkLlIuYXR0ciNzeXN0ZW1Vc2VyT25seSBhdHRyaWJ1dGUuCkBAIC02NjQsMjAgKzY5Myw2IEBACiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBwYXJlbnRBY3Rpdml0eU5hbWU7CiAKLSAgICAvKioKLSAgICAgKiBWYWx1ZSBpbmRpY2F0aW5nIGlmIHRoZSBhY3Rpdml0eSBpcyByZXNpemVhYmxlIHRvIGFueSBkaW1lbnNpb24uCi0gICAgICogU2VlIHtAbGluayBhbmRyb2lkLlIuYXR0ciNyZXNpemVhYmxlQWN0aXZpdHl9LgotICAgICAqIEBoaWRlCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gcmVzaXplYWJsZTsKLQotICAgIC8qKgotICAgICAqIFZhbHVlIGluZGljYXRpbmcgaWYgdGhlIGFjdGl2aXR5IGlzIHN1cHBvcnRzIHBpY3R1cmUtaW4tcGljdHVyZSBmb3JtIG9mIG11bHRpLXdpbmRvdyBtb2RlLgotICAgICAqIFNlZSB7QGxpbmsgYW5kcm9pZC5SLmF0dHIjc3VwcG9ydHNQaWN0dXJlSW5QaWN0dXJlfS4KLSAgICAgKiBAaGlkZQotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIHN1cHBvcnRzUGlwOwotCiAgICAgLyoqIEBoaWRlICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTE9DS19UQVNLX0xBVU5DSF9NT0RFX0RFRkFVTFQgPSAwOwogICAgIC8qKiBAaGlkZSAqLwpAQCAtNzI5LDggKzc0NCw2IEBACiAgICAgICAgIHVpT3B0aW9ucyA9IG9yaWcudWlPcHRpb25zOwogICAgICAgICBwYXJlbnRBY3Rpdml0eU5hbWUgPSBvcmlnLnBhcmVudEFjdGl2aXR5TmFtZTsKICAgICAgICAgbWF4UmVjZW50cyA9IG9yaWcubWF4UmVjZW50czsKLSAgICAgICAgcmVzaXplYWJsZSA9IG9yaWcucmVzaXplYWJsZTsKLSAgICAgICAgc3VwcG9ydHNQaXAgPSBvcmlnLnN1cHBvcnRzUGlwOwogICAgICAgICBsb2NrVGFza0xhdW5jaE1vZGUgPSBvcmlnLmxvY2tUYXNrTGF1bmNoTW9kZTsKICAgICAgICAgbGF5b3V0ID0gb3JpZy5sYXlvdXQ7CiAgICAgfQpAQCAtNzg1LDcgKzc5OCw2IEBACiAgICAgICAgICAgICBwdy5wcmludGxuKHByZWZpeCArICIgdWlPcHRpb25zPTB4IiArIEludGVnZXIudG9IZXhTdHJpbmcodWlPcHRpb25zKSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKChmbGFncyZEVU1QX0ZMQUdfREVUQUlMUykgIT0gMCkgewotICAgICAgICAgICAgcHcucHJpbnRsbihwcmVmaXggKyAicmVzaXplYWJsZT0iICsgcmVzaXplYWJsZSArICIgc3VwcG9ydHNQaXA9IiArIHN1cHBvcnRzUGlwKTsKICAgICAgICAgICAgIHB3LnByaW50bG4ocHJlZml4ICsgImxvY2tUYXNrTGF1bmNoTW9kZT0iCiAgICAgICAgICAgICAgICAgICAgICsgbG9ja1Rhc2tMYXVuY2hNb2RlVG9TdHJpbmcobG9ja1Rhc2tMYXVuY2hNb2RlKSk7CiAgICAgICAgIH0KQEAgLTgyMyw4ICs4MzUsNiBAQAogICAgICAgICBkZXN0LndyaXRlU3RyaW5nKHBhcmVudEFjdGl2aXR5TmFtZSk7CiAgICAgICAgIGRlc3Qud3JpdGVJbnQocGVyc2lzdGFibGVNb2RlKTsKICAgICAgICAgZGVzdC53cml0ZUludChtYXhSZWNlbnRzKTsKLSAgICAgICAgZGVzdC53cml0ZUludChyZXNpemVhYmxlID8gMSA6IDApOwotICAgICAgICBkZXN0LndyaXRlSW50KHN1cHBvcnRzUGlwID8gMSA6IDApOwogICAgICAgICBkZXN0LndyaXRlSW50KGxvY2tUYXNrTGF1bmNoTW9kZSk7CiAgICAgICAgIGlmIChsYXlvdXQgIT0gbnVsbCkgewogICAgICAgICAgICAgZGVzdC53cml0ZUludCgxKTsKQEAgLTg2NSw4ICs4NzUsNiBAQAogICAgICAgICBwYXJlbnRBY3Rpdml0eU5hbWUgPSBzb3VyY2UucmVhZFN0cmluZygpOwogICAgICAgICBwZXJzaXN0YWJsZU1vZGUgPSBzb3VyY2UucmVhZEludCgpOwogICAgICAgICBtYXhSZWNlbnRzID0gc291cmNlLnJlYWRJbnQoKTsKLSAgICAgICAgcmVzaXplYWJsZSA9IChzb3VyY2UucmVhZEludCgpID09IDEpOwotICAgICAgICBzdXBwb3J0c1BpcCA9IChzb3VyY2UucmVhZEludCgpID09IDEpOwogICAgICAgICBsb2NrVGFza0xhdW5jaE1vZGUgPSBzb3VyY2UucmVhZEludCgpOwogICAgICAgICBpZiAoc291cmNlLnJlYWRJbnQoKSA9PSAxKSB7CiAgICAgICAgICAgICBsYXlvdXQgPSBuZXcgTGF5b3V0KHNvdXJjZSk7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3BtL0NvbXBvbmVudEluZm8uamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcG0vQ29tcG9uZW50SW5mby5qYXZhCmluZGV4IGEyOTVjYzUuLjYzYTE2M2QgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcG0vQ29tcG9uZW50SW5mby5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcG0vQ29tcG9uZW50SW5mby5qYXZhCkBAIC0xNiw2ICsxNiw3IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5jb250ZW50LnBtOwogCitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWU7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZTsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbDsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbGFibGU7CkBAIC0xNDgsNiArMTQ5LDExIEBACiAgICAgICAgIHJldHVybiBiYW5uZXIgIT0gMCA/IGJhbm5lciA6IGFwcGxpY2F0aW9uSW5mby5iYW5uZXI7CiAgICAgfQogCisgICAgLyoqIHtAaGlkZX0gKi8KKyAgICBwdWJsaWMgQ29tcG9uZW50TmFtZSBnZXRDb21wb25lbnROYW1lKCkgeworICAgICAgICByZXR1cm4gbmV3IENvbXBvbmVudE5hbWUocGFja2FnZU5hbWUsIG5hbWUpOworICAgIH0KKwogICAgIHByb3RlY3RlZCB2b2lkIGR1bXBGcm9udChQcmludGVyIHB3LCBTdHJpbmcgcHJlZml4KSB7CiAgICAgICAgIHN1cGVyLmR1bXBGcm9udChwdywgcHJlZml4KTsKICAgICAgICAgaWYgKHByb2Nlc3NOYW1lICE9IG51bGwgJiYgIXBhY2thZ2VOYW1lLmVxdWFscyhwcm9jZXNzTmFtZSkpIHsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcG0vTWFuaWZlc3REaWdlc3QuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcG0vTWFuaWZlc3REaWdlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTdkYzc2NC4uMDAwMDAwMAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3BtL01hbmlmZXN0RGlnZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5jb250ZW50LnBtOwotCi1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5IZXhEdW1wOwotCi1pbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlN5c3RlbUFwaTsKLWltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbDsKLWltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbGFibGU7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLlNsb2c7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuc2VjdXJpdHkuRGlnZXN0SW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5zZWN1cml0eS5NZXNzYWdlRGlnZXN0OwotaW1wb3J0IGphdmEuc2VjdXJpdHkuTm9TdWNoQWxnb3JpdGhtRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci0KLWltcG9ydCBsaWJjb3JlLmlvLklvVXRpbHM7Ci0KLS8qKgotICogUmVwcmVzZW50cyB0aGUgbWFuaWZlc3QgZGlnZXN0IGZvciBhIHBhY2thZ2UuIFRoaXMgaXMgc3VpdGFibGUgZm9yIGNvbXBhcmlzb24KLSAqIG9mIHR3byBwYWNrYWdlcyB0byBrbm93IHdoZXRoZXIgdGhlIG1hbmlmZXN0cyBhcmUgaWRlbnRpY2FsLgotICoKLSAqIEBoaWRlCi0gKi8KLUBTeXN0ZW1BcGkKLXB1YmxpYyBjbGFzcyBNYW5pZmVzdERpZ2VzdCBpbXBsZW1lbnRzIFBhcmNlbGFibGUgewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiTWFuaWZlc3REaWdlc3QiOwotCi0gICAgLyoqIFRoZSBkaWdlc3Qgb2YgdGhlIG1hbmlmZXN0IGluIG91ciBwcmVmZXJyZWQgb3JkZXIuICovCi0gICAgcHJpdmF0ZSBmaW5hbCBieXRlW10gbURpZ2VzdDsKLQotICAgIC8qKiBXaGF0IHdlIHByaW50IG91dCBmaXJzdCB3aGVuIHRvU3RyaW5nKCkgaXMgY2FsbGVkLiAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUT19TVFJJTkdfUFJFRklYID0gIk1hbmlmZXN0RGlnZXN0IHttRGlnZXN0PSI7Ci0KLSAgICAvKiogRGlnZXN0IGFsZ29yaXRobSB0byB1c2UuICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERJR0VTVF9BTEdPUklUSE0gPSAiU0hBLTI1NiI7Ci0KLSAgICBNYW5pZmVzdERpZ2VzdChieXRlW10gZGlnZXN0KSB7Ci0gICAgICAgIG1EaWdlc3QgPSBkaWdlc3Q7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBNYW5pZmVzdERpZ2VzdChQYXJjZWwgc291cmNlKSB7Ci0gICAgICAgIG1EaWdlc3QgPSBzb3VyY2UuY3JlYXRlQnl0ZUFycmF5KCk7Ci0gICAgfQotCi0gICAgc3RhdGljIE1hbmlmZXN0RGlnZXN0IGZyb21JbnB1dFN0cmVhbShJbnB1dFN0cmVhbSBmaWxlSXMpIHsKLSAgICAgICAgaWYgKGZpbGVJcyA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIGZpbmFsIE1lc3NhZ2VEaWdlc3QgbWQ7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBtZCA9IE1lc3NhZ2VEaWdlc3QuZ2V0SW5zdGFuY2UoRElHRVNUX0FMR09SSVRITSk7Ci0gICAgICAgIH0gY2F0Y2ggKE5vU3VjaEFsZ29yaXRobUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihESUdFU1RfQUxHT1JJVEhNICsgIiBtdXN0IGJlIGF2YWlsYWJsZSIsIGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZmluYWwgRGlnZXN0SW5wdXRTdHJlYW0gZGlzID0gbmV3IERpZ2VzdElucHV0U3RyZWFtKG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKGZpbGVJcyksIG1kKTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGJ5dGVbXSByZWFkQnVmZmVyID0gbmV3IGJ5dGVbODE5Ml07Ci0gICAgICAgICAgICB3aGlsZSAoZGlzLnJlYWQocmVhZEJ1ZmZlciwgMCwgcmVhZEJ1ZmZlci5sZW5ndGgpICE9IC0xKSB7Ci0gICAgICAgICAgICAgICAgLy8gbm90IHVzaW5nCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIFNsb2cudyhUQUcsICJDb3VsZCBub3QgcmVhZCBtYW5pZmVzdCIpOwotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICBJb1V0aWxzLmNsb3NlUXVpZXRseShkaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgZmluYWwgYnl0ZVtdIGRpZ2VzdCA9IG1kLmRpZ2VzdCgpOwotICAgICAgICByZXR1cm4gbmV3IE1hbmlmZXN0RGlnZXN0KGRpZ2VzdCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBkZXNjcmliZUNvbnRlbnRzKCkgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG8pIHsKLSAgICAgICAgaWYgKCEobyBpbnN0YW5jZW9mIE1hbmlmZXN0RGlnZXN0KSkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgZmluYWwgTWFuaWZlc3REaWdlc3Qgb3RoZXIgPSAoTWFuaWZlc3REaWdlc3QpIG87Ci0KLSAgICAgICAgcmV0dXJuIHRoaXMgPT0gb3RoZXIgfHwgQXJyYXlzLmVxdWFscyhtRGlnZXN0LCBvdGhlci5tRGlnZXN0KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewotICAgICAgICByZXR1cm4gQXJyYXlzLmhhc2hDb2RlKG1EaWdlc3QpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgICAgIGZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcihUT19TVFJJTkdfUFJFRklYLmxlbmd0aCgpCi0gICAgICAgICAgICAgICAgKyAobURpZ2VzdC5sZW5ndGggKiAzKSArIDEpOwotCi0gICAgICAgIHNiLmFwcGVuZChUT19TVFJJTkdfUFJFRklYKTsKLQotICAgICAgICBmaW5hbCBpbnQgTiA9IG1EaWdlc3QubGVuZ3RoOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgewotICAgICAgICAgICAgZmluYWwgYnl0ZSBiID0gbURpZ2VzdFtpXTsKLSAgICAgICAgICAgIEhleER1bXAuYXBwZW5kQnl0ZUFzSGV4KHNiLCBiLCBmYWxzZSk7Ci0gICAgICAgICAgICBzYi5hcHBlbmQoJywnKTsKLSAgICAgICAgfQotICAgICAgICBzYi5hcHBlbmQoJ30nKTsKLQotICAgICAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB3cml0ZVRvUGFyY2VsKFBhcmNlbCBkZXN0LCBpbnQgZmxhZ3MpIHsKLSAgICAgICAgZGVzdC53cml0ZUJ5dGVBcnJheShtRGlnZXN0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFBhcmNlbGFibGUuQ3JlYXRvcjxNYW5pZmVzdERpZ2VzdD4gQ1JFQVRPUgotICAgICAgICAgICAgPSBuZXcgUGFyY2VsYWJsZS5DcmVhdG9yPE1hbmlmZXN0RGlnZXN0PigpIHsKLSAgICAgICAgcHVibGljIE1hbmlmZXN0RGlnZXN0IGNyZWF0ZUZyb21QYXJjZWwoUGFyY2VsIHNvdXJjZSkgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBNYW5pZmVzdERpZ2VzdChzb3VyY2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIE1hbmlmZXN0RGlnZXN0W10gbmV3QXJyYXkoaW50IHNpemUpIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgTWFuaWZlc3REaWdlc3Rbc2l6ZV07Ci0gICAgICAgIH0KLSAgICB9OwotCi19CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3BtL1BhY2thZ2VNYW5hZ2VyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3BtL1BhY2thZ2VNYW5hZ2VyLmphdmEKaW5kZXggNDBiY2M3ZS4uNzE5YmZjZSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9wbS9QYWNrYWdlTWFuYWdlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcG0vUGFja2FnZU1hbmFnZXIuamF2YQpAQCAtNDcsMTAgKzQ3LDggQEAKIGltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLm9zLlVzZXJIYW5kbGU7CiBpbXBvcnQgYW5kcm9pZC5vcy5zdG9yYWdlLlZvbHVtZUluZm87Ci1pbXBvcnQgYW5kcm9pZC5wcm92aWRlci5TZXR0aW5nczsKIGltcG9ydCBhbmRyb2lkLnV0aWwuQW5kcm9pZEV4Y2VwdGlvbjsKIAotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5BcnJheVV0aWxzOwogCiBpbXBvcnQgamF2YS5pby5GaWxlOwpAQCAtOTUsNiArOTMsMTA5IEBACiAgICAgfQogCiAgICAgLyoqCisgICAgICogQXMgYSBndWlkaW5nIHByaW5jaXBsZToKKyAgICAgKiA8cD4KKyAgICAgKiB7QGNvZGUgR0VUX30gZmxhZ3MgYXJlIHVzZWQgdG8gcmVxdWVzdCBhZGRpdGlvbmFsIGRhdGEgdGhhdCBtYXkgaGF2ZSBiZWVuCisgICAgICogZWxpZGVkIHRvIHNhdmUgd2lyZSBzcGFjZS4KKyAgICAgKiA8cD4KKyAgICAgKiB7QGNvZGUgTUFUQ0hffSBmbGFncyBhcmUgdXNlZCB0byBpbmNsdWRlIGNvbXBvbmVudHMgb3IgcGFja2FnZXMgdGhhdAorICAgICAqIHdvdWxkIGhhdmUgb3RoZXJ3aXNlIGJlZW4gb21pdHRlZCBmcm9tIGEgcmVzdWx0IHNldCBieSBjdXJyZW50IHN5c3RlbQorICAgICAqIHN0YXRlLgorICAgICAqLworCisgICAgLyoqIEBoaWRlICovCisgICAgQEludERlZihmbGFnID0gdHJ1ZSwgdmFsdWUgPSB7CisgICAgICAgICAgICBHRVRfQUNUSVZJVElFUywKKyAgICAgICAgICAgIEdFVF9SRUNFSVZFUlMsCisgICAgICAgICAgICBHRVRfU0VSVklDRVMsCisgICAgICAgICAgICBHRVRfUFJPVklERVJTLAorICAgICAgICAgICAgR0VUX0lOU1RSVU1FTlRBVElPTiwKKyAgICAgICAgICAgIEdFVF9JTlRFTlRfRklMVEVSUywKKyAgICAgICAgICAgIEdFVF9TSUdOQVRVUkVTLAorICAgICAgICAgICAgR0VUX01FVEFfREFUQSwKKyAgICAgICAgICAgIEdFVF9HSURTLAorICAgICAgICAgICAgR0VUX1NIQVJFRF9MSUJSQVJZX0ZJTEVTLAorICAgICAgICAgICAgR0VUX1VSSV9QRVJNSVNTSU9OX1BBVFRFUk5TLAorICAgICAgICAgICAgR0VUX1BFUk1JU1NJT05TLAorICAgICAgICAgICAgR0VUX0NPTkZJR1VSQVRJT05TLAorICAgICAgICAgICAgTUFUQ0hfVU5JTlNUQUxMRURfUEFDS0FHRVMsCisgICAgICAgICAgICBNQVRDSF9ESVNBQkxFRF9DT01QT05FTlRTLAorICAgICAgICAgICAgTUFUQ0hfRElTQUJMRURfVU5USUxfVVNFRF9DT01QT05FTlRTLAorICAgICAgICAgICAgTUFUQ0hfREVCVUdfVFJJQUdFRF9NSVNTSU5HLAorICAgIH0pCisgICAgQFJldGVudGlvbihSZXRlbnRpb25Qb2xpY3kuU09VUkNFKQorICAgIHB1YmxpYyBAaW50ZXJmYWNlIFBhY2thZ2VJbmZvRmxhZ3Mge30KKworICAgIC8qKiBAaGlkZSAqLworICAgIEBJbnREZWYoZmxhZyA9IHRydWUsIHZhbHVlID0geworICAgICAgICAgICAgR0VUX01FVEFfREFUQSwKKyAgICAgICAgICAgIEdFVF9TSEFSRURfTElCUkFSWV9GSUxFUywKKyAgICAgICAgICAgIE1BVENIX1VOSU5TVEFMTEVEX1BBQ0tBR0VTLAorICAgICAgICAgICAgTUFUQ0hfU1lTVEVNX09OTFksCisgICAgICAgICAgICBNQVRDSF9ERUJVR19UUklBR0VEX01JU1NJTkcsCisgICAgfSkKKyAgICBAUmV0ZW50aW9uKFJldGVudGlvblBvbGljeS5TT1VSQ0UpCisgICAgcHVibGljIEBpbnRlcmZhY2UgQXBwbGljYXRpb25JbmZvRmxhZ3Mge30KKworICAgIC8qKiBAaGlkZSAqLworICAgIEBJbnREZWYoZmxhZyA9IHRydWUsIHZhbHVlID0geworICAgICAgICAgICAgR0VUX01FVEFfREFUQSwKKyAgICAgICAgICAgIEdFVF9TSEFSRURfTElCUkFSWV9GSUxFUywKKyAgICAgICAgICAgIE1BVENIX1VOSU5TVEFMTEVEX1BBQ0tBR0VTLAorICAgICAgICAgICAgTUFUQ0hfRElTQUJMRURfQ09NUE9ORU5UUywKKyAgICAgICAgICAgIE1BVENIX0RJU0FCTEVEX1VOVElMX1VTRURfQ09NUE9ORU5UUywKKyAgICAgICAgICAgIE1BVENIX0FMTCwKKyAgICAgICAgICAgIE1BVENIX0RFRkFVTFRfT05MWSwKKyAgICAgICAgICAgIE1BVENIX0VOQ1JZUFRJT05fQVdBUkUsCisgICAgICAgICAgICBNQVRDSF9FTkNSWVBUSU9OX0FXQVJFX0FORF9VTkFXQVJFLAorICAgICAgICAgICAgTUFUQ0hfRU5DUllQVElPTl9VTkFXQVJFLAorICAgICAgICAgICAgTUFUQ0hfU1lTVEVNX09OTFksCisgICAgICAgICAgICBNQVRDSF9ERUJVR19UUklBR0VEX01JU1NJTkcsCisgICAgfSkKKyAgICBAUmV0ZW50aW9uKFJldGVudGlvblBvbGljeS5TT1VSQ0UpCisgICAgcHVibGljIEBpbnRlcmZhY2UgQ29tcG9uZW50SW5mb0ZsYWdzIHt9CisKKyAgICAvKiogQGhpZGUgKi8KKyAgICBASW50RGVmKGZsYWcgPSB0cnVlLCB2YWx1ZSA9IHsKKyAgICAgICAgICAgIEdFVF9NRVRBX0RBVEEsCisgICAgICAgICAgICBHRVRfU0hBUkVEX0xJQlJBUllfRklMRVMsCisgICAgICAgICAgICBHRVRfUkVTT0xWRURfRklMVEVSLAorICAgICAgICAgICAgTUFUQ0hfVU5JTlNUQUxMRURfUEFDS0FHRVMsCisgICAgICAgICAgICBNQVRDSF9ESVNBQkxFRF9DT01QT05FTlRTLAorICAgICAgICAgICAgTUFUQ0hfRElTQUJMRURfVU5USUxfVVNFRF9DT01QT05FTlRTLAorICAgICAgICAgICAgTUFUQ0hfQUxMLAorICAgICAgICAgICAgTUFUQ0hfREVGQVVMVF9PTkxZLAorICAgICAgICAgICAgTUFUQ0hfRU5DUllQVElPTl9BV0FSRSwKKyAgICAgICAgICAgIE1BVENIX0VOQ1JZUFRJT05fQVdBUkVfQU5EX1VOQVdBUkUsCisgICAgICAgICAgICBNQVRDSF9FTkNSWVBUSU9OX1VOQVdBUkUsCisgICAgICAgICAgICBNQVRDSF9TWVNURU1fT05MWSwKKyAgICAgICAgICAgIE1BVENIX0RFQlVHX1RSSUFHRURfTUlTU0lORywKKyAgICB9KQorICAgIEBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlNPVVJDRSkKKyAgICBwdWJsaWMgQGludGVyZmFjZSBSZXNvbHZlSW5mb0ZsYWdzIHt9CisKKyAgICAvKiogQGhpZGUgKi8KKyAgICBASW50RGVmKGZsYWcgPSB0cnVlLCB2YWx1ZSA9IHsKKyAgICAgICAgICAgIEdFVF9NRVRBX0RBVEEsCisgICAgfSkKKyAgICBAUmV0ZW50aW9uKFJldGVudGlvblBvbGljeS5TT1VSQ0UpCisgICAgcHVibGljIEBpbnRlcmZhY2UgUGVybWlzc2lvbkluZm9GbGFncyB7fQorCisgICAgLyoqIEBoaWRlICovCisgICAgQEludERlZihmbGFnID0gdHJ1ZSwgdmFsdWUgPSB7CisgICAgICAgICAgICBHRVRfTUVUQV9EQVRBLAorICAgIH0pCisgICAgQFJldGVudGlvbihSZXRlbnRpb25Qb2xpY3kuU09VUkNFKQorICAgIHB1YmxpYyBAaW50ZXJmYWNlIFBlcm1pc3Npb25Hcm91cEluZm9GbGFncyB7fQorCisgICAgLyoqIEBoaWRlICovCisgICAgQEludERlZihmbGFnID0gdHJ1ZSwgdmFsdWUgPSB7CisgICAgICAgICAgICBHRVRfTUVUQV9EQVRBLAorICAgIH0pCisgICAgQFJldGVudGlvbihSZXRlbnRpb25Qb2xpY3kuU09VUkNFKQorICAgIHB1YmxpYyBAaW50ZXJmYWNlIEluc3RydW1lbnRhdGlvbkluZm9GbGFncyB7fQorCisgICAgLyoqCiAgICAgICoge0BsaW5rIFBhY2thZ2VJbmZvfSBmbGFnOiByZXR1cm4gaW5mb3JtYXRpb24gYWJvdXQKICAgICAgKiBhY3Rpdml0aWVzIGluIHRoZSBwYWNrYWdlIGluIHtAbGluayBQYWNrYWdlSW5mbyNhY3Rpdml0aWVzfS4KICAgICAgKi8KQEAgLTE2Myw5ICsyNjQsMTUgQEAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHRVRfR0lEUyAgICAgICAgICAgICAgICAgICAgPSAweDAwMDAwMTAwOwogCiAgICAgLyoqCisgICAgICogQGRlcHJlY2F0ZWQgcmVwbGFjZWQgd2l0aCB7QGxpbmsgI01BVENIX0RJU0FCTEVEX0NPTVBPTkVOVFN9CisgICAgICovCisgICAgQERlcHJlY2F0ZWQKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHRVRfRElTQUJMRURfQ09NUE9ORU5UUyA9IDB4MDAwMDAyMDA7CisKKyAgICAvKioKICAgICAgKiB7QGxpbmsgUGFja2FnZUluZm99IGZsYWc6IGluY2x1ZGUgZGlzYWJsZWQgY29tcG9uZW50cyBpbiB0aGUgcmV0dXJuZWQgaW5mby4KICAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHRVRfRElTQUJMRURfQ09NUE9ORU5UUyAgICAgPSAweDAwMDAwMjAwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BVENIX0RJU0FCTEVEX0NPTVBPTkVOVFMgPSAweDAwMDAwMjAwOwogCiAgICAgLyoqCiAgICAgICoge0BsaW5rIEFwcGxpY2F0aW9uSW5mb30gZmxhZzogcmV0dXJuIHRoZQpAQCAtMTkyLDYgKzI5OSwxMiBAQAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFVF9QRVJNSVNTSU9OUyAgICAgICAgICAgICAgID0gMHgwMDAwMTAwMDsKIAogICAgIC8qKgorICAgICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIHdpdGgge0BsaW5rICNNQVRDSF9VTklOU1RBTExFRF9QQUNLQUdFU30KKyAgICAgKi8KKyAgICBARGVwcmVjYXRlZAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFVF9VTklOU1RBTExFRF9QQUNLQUdFUyA9IDB4MDAwMDIwMDA7CisKKyAgICAvKioKICAgICAgKiBGbGFnIHBhcmFtZXRlciB0byByZXRyaWV2ZSBzb21lIGluZm9ybWF0aW9uIGFib3V0IGFsbCBhcHBsaWNhdGlvbnMgKGV2ZW4KICAgICAgKiB1bmluc3RhbGxlZCBvbmVzKSB3aGljaCBoYXZlIGRhdGEgZGlyZWN0b3JpZXMuIFRoaXMgc3RhdGUgY291bGQgaGF2ZQogICAgICAqIHJlc3VsdGVkIGlmIGFwcGxpY2F0aW9ucyBoYXZlIGJlZW4gZGVsZXRlZCB3aXRoIGZsYWcKQEAgLTIwMSw3ICszMTQsNyBAQAogICAgICAqIE5vdGU6IHRoaXMgZmxhZyBtYXkgY2F1c2UgbGVzcyBpbmZvcm1hdGlvbiBhYm91dCBjdXJyZW50bHkgaW5zdGFsbGVkCiAgICAgICogYXBwbGljYXRpb25zIHRvIGJlIHJldHVybmVkLgogICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFVF9VTklOU1RBTExFRF9QQUNLQUdFUyA9IDB4MDAwMDIwMDA7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFUQ0hfVU5JTlNUQUxMRURfUEFDS0FHRVMgPSAweDAwMDAyMDAwOwogCiAgICAgLyoqCiAgICAgICoge0BsaW5rIFBhY2thZ2VJbmZvfSBmbGFnOiByZXR1cm4gaW5mb3JtYXRpb24gYWJvdXQKQEAgLTIxMywxMiArMzI2LDE4IEBACiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0VUX0NPTkZJR1VSQVRJT05TID0gMHgwMDAwNDAwMDsKIAogICAgIC8qKgorICAgICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIHdpdGgge0BsaW5rICNNQVRDSF9ESVNBQkxFRF9VTlRJTF9VU0VEX0NPTVBPTkVOVFN9LgorICAgICAqLworICAgIEBEZXByZWNhdGVkCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0VUX0RJU0FCTEVEX1VOVElMX1VTRURfQ09NUE9ORU5UUyA9IDB4MDAwMDgwMDA7CisKKyAgICAvKioKICAgICAgKiB7QGxpbmsgUGFja2FnZUluZm99IGZsYWc6IGluY2x1ZGUgZGlzYWJsZWQgY29tcG9uZW50cyB3aGljaCBhcmUgaW4KICAgICAgKiB0aGF0IHN0YXRlIG9ubHkgYmVjYXVzZSBvZiB7QGxpbmsgI0NPTVBPTkVOVF9FTkFCTEVEX1NUQVRFX0RJU0FCTEVEX1VOVElMX1VTRUR9CiAgICAgICogaW4gdGhlIHJldHVybmVkIGluZm8uICBOb3RlIHRoYXQgaWYgeW91IHNldCB0aGlzIGZsYWcsIGFwcGxpY2F0aW9ucwogICAgICAqIHRoYXQgYXJlIGluIHRoaXMgZGlzYWJsZWQgc3RhdGUgd2lsbCBiZSByZXBvcnRlZCBhcyBlbmFibGVkLgogICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFVF9ESVNBQkxFRF9VTlRJTF9VU0VEX0NPTVBPTkVOVFMgPSAweDAwMDA4MDAwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BVENIX0RJU0FCTEVEX1VOVElMX1VTRURfQ09NUE9ORU5UUyA9IDB4MDAwMDgwMDA7CiAKICAgICAvKioKICAgICAgKiBSZXNvbHV0aW9uIGFuZCBxdWVyeWluZyBmbGFnOiBpZiBzZXQsIG9ubHkgZmlsdGVycyB0aGF0IHN1cHBvcnQgdGhlCkBAIC0yMjksMjggKzM0OCw1NSBAQAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BVENIX0RFRkFVTFRfT05MWSAgPSAweDAwMDEwMDAwOwogCiAgICAgLyoqCi0gICAgICogUXVlcnlpbmcgZmxhZzogaWYgc2V0IGFuZCBpZiB0aGUgcGxhdGZvcm0gaXMgZG9pbmcgYW55IGZpbHRlcmluZyBvZiB0aGUgcmVzdWx0cywgdGhlbgotICAgICAqIHRoZSBmaWx0ZXJpbmcgd2lsbCBub3QgaGFwcGVuLiBUaGlzIGlzIGEgc3lub255bSBmb3Igc2F5aW5nIHRoYXQgYWxsIHJlc3VsdHMgc2hvdWxkCi0gICAgICogYmUgcmV0dXJuZWQuCisgICAgICogUXVlcnlpbmcgZmxhZzogaWYgc2V0IGFuZCBpZiB0aGUgcGxhdGZvcm0gaXMgZG9pbmcgYW55IGZpbHRlcmluZyBvZiB0aGUKKyAgICAgKiByZXN1bHRzLCB0aGVuIHRoZSBmaWx0ZXJpbmcgd2lsbCBub3QgaGFwcGVuLiBUaGlzIGlzIGEgc3lub255bSBmb3Igc2F5aW5nCisgICAgICogdGhhdCBhbGwgcmVzdWx0cyBzaG91bGQgYmUgcmV0dXJuZWQuCisgICAgICogPHA+CisgICAgICogPGVtPlRoaXMgZmxhZyBzaG91bGQgYmUgdXNlZCB3aXRoIGV4dHJlbWUgY2FyZS48L2VtPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BVENIX0FMTCA9IDB4MDAwMjAwMDA7CiAKICAgICAvKioKLSAgICAgKiB7QGxpbmsgUGFja2FnZUluZm99IGZsYWc6IGluY2x1ZGUgY29tcG9uZW50cyB3aGljaCBhcmVuJ3QgZW5jcnlwdGlvbgotICAgICAqIGF3YXJlIGluIHRoZSByZXR1cm5lZCBpbmZvLCByZWdhcmRsZXNzIG9mIHRoZSBjdXJyZW50IHVzZXIgc3RhdGUuCisgICAgICogUXVlcnlpbmcgZmxhZzogaW5jbHVkZSBvbmx5IGNvbXBvbmVudHMgd2hpY2ggYXJlIGVuY3J5cHRpb24gdW5hd2FyZSBpbgorICAgICAqIHRoZSByZXR1cm5lZCBpbmZvLCByZWdhcmRsZXNzIG9mIHRoZSBjdXJyZW50IHVzZXIgc3RhdGUuCiAgICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0VUX0VOQ1JZUFRJT05fVU5BV0FSRV9DT01QT05FTlRTID0gMHgwMDA0MDAwMDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVRDSF9FTkNSWVBUSU9OX1VOQVdBUkUgPSAweDAwMDQwMDAwOwogCiAgICAgLyoqCi0gICAgICoge0BsaW5rIFBhY2thZ2VJbmZvfSBmbGFnOiByZXR1cm4gY29tcG9uZW50cyB0aGF0IGFyZSBtYXJrZWQgYXMKLSAgICAgKiB7QGxpbmsgQ29tcG9uZW50SW5mbyNlbmNyeXB0aW9uQXdhcmV9LCB1bmxlc3MKLSAgICAgKiB7QGxpbmsgI0dFVF9FTkNSWVBUSU9OX1VOQVdBUkVfQ09NUE9ORU5UU30gaXMgYWxzbyBzcGVjaWZpZWQuCi0gICAgICogPHA+Ci0gICAgICogVGhpcyBmbGFnIGlzIGZvciBpbnRlcm5hbCB1c2Ugb25seS4KKyAgICAgKiBRdWVyeWluZyBmbGFnOiBpbmNsdWRlIG9ubHkgY29tcG9uZW50cyB3aGljaCBhcmUgZW5jcnlwdGlvbiBhd2FyZSBpbiB0aGUKKyAgICAgKiByZXR1cm5lZCBpbmZvLCByZWdhcmRsZXNzIG9mIHRoZSBjdXJyZW50IHVzZXIgc3RhdGUuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFUQ0hfRU5DUllQVElPTl9BV0FSRSA9IDB4MDAwODAwMDA7CisKKyAgICAvKioKKyAgICAgKiBRdWVyeWluZyBmbGFnOiBpbmNsdWRlIGJvdGggZW5jcnlwdGlvbiBhd2FyZSBhbmQgdW5hd2FyZSBjb21wb25lbnRzIGluCisgICAgICogdGhlIHJldHVybmVkIGluZm8sIHJlZ2FyZGxlc3Mgb2YgdGhlIGN1cnJlbnQgdXNlciBzdGF0ZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVRDSF9FTkNSWVBUSU9OX0FXQVJFX0FORF9VTkFXQVJFID0gTUFUQ0hfRU5DUllQVElPTl9BV0FSRQorICAgICAgICAgICAgfCBNQVRDSF9FTkNSWVBUSU9OX1VOQVdBUkU7CisKKyAgICAvKioKKyAgICAgKiBRdWVyeWluZyBmbGFnOiBpbmNsdWRlIG9ubHkgY29tcG9uZW50cyBmcm9tIGFwcGxpY2F0aW9ucyB0aGF0IGFyZSBtYXJrZWQKKyAgICAgKiB3aXRoIHtAbGluayBBcHBsaWNhdGlvbkluZm8jRkxBR19TWVNURU19LgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BVENIX1NZU1RFTV9PTkxZID0gMHgwMDEwMDAwMDsKKworICAgIC8qKgorICAgICAqIEludGVybmFsIGZsYWcgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IGEgc3lzdGVtIGNvbXBvbmVudCBoYXMgZG9uZSB0aGVpcgorICAgICAqIGhvbWV3b3JrIGFuZCB2ZXJpZmllZCB0aGF0IHRoZXkgY29ycmVjdGx5IGhhbmRsZSBwYWNrYWdlcyBhbmQgY29tcG9uZW50cworICAgICAqIHRoYXQgY29tZSBhbmQgZ28gb3ZlciB0aW1lLiBJbiBwYXJ0aWN1bGFyOgorICAgICAqIDx1bD4KKyAgICAgKiA8bGk+QXBwcyBpbnN0YWxsZWQgb24gZXh0ZXJuYWwgc3RvcmFnZSwgd2hpY2ggd2lsbCBhcHBlYXIgdG8gYmUKKyAgICAgKiB1bmluc3RhbGxlZCB3aGlsZSB0aGUgdGhlIGRldmljZSBpcyBlamVjdGVkLgorICAgICAqIDxsaT5BcHBzIHdpdGggZW5jcnlwdGlvbiB1bmF3YXJlIGNvbXBvbmVudHMsIHdoaWNoIHdpbGwgYXBwZWFyIHRvIG5vdAorICAgICAqIGV4aXN0IHdoaWxlIHRoZSBkZXZpY2UgaXMgbG9ja2VkLgorICAgICAqIDwvdWw+CiAgICAgICoKKyAgICAgKiBAc2VlICNNQVRDSF9VTklOU1RBTExFRF9QQUNLQUdFUworICAgICAqIEBzZWUgI01BVENIX0VOQ1JZUFRJT05fQVdBUkVfQU5EX1VOQVdBUkUKICAgICAgKiBAaGlkZQogICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BVENIX0VOQ1JZUFRJT05fQVdBUkVfT05MWSA9IDB4MDAwODAwMDA7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFUQ0hfREVCVUdfVFJJQUdFRF9NSVNTSU5HID0gMHgxMDAwMDAwMDsKIAogICAgIC8qKgogICAgICAqIEZsYWcgZm9yIHtAbGluayBhZGRDcm9zc1Byb2ZpbGVJbnRlbnRGaWx0ZXJ9OiBpZiB0aGlzIGZsYWcgaXMgc2V0OgpAQCAtMTgwMSw3ICsxOTQ3LDYgQEAKICAgICAvKioKICAgICAgKiBGZWF0dXJlIGZvciB7QGxpbmsgI2dldFN5c3RlbUF2YWlsYWJsZUZlYXR1cmVzfSBhbmQKICAgICAgKiB7QGxpbmsgI2hhc1N5c3RlbUZlYXR1cmV9OiBUaGlzIGRldmljZSBzdXBwb3J0cyBldGhlcm5ldC4KLSAgICAgKiBAaGlkZQogICAgICAqLwogICAgIEBTZGtDb25zdGFudChTZGtDb25zdGFudFR5cGUuRkVBVFVSRSkKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGRUFUVVJFX0VUSEVSTkVUID0gImFuZHJvaWQuaGFyZHdhcmUuZXRoZXJuZXQiOwpAQCAtMTgzMCw2ICsxOTc1LDE2IEBACiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRkVBVFVSRV9NSURJID0gImFuZHJvaWQuc29mdHdhcmUubWlkaSI7CiAKICAgICAvKioKKyAgICAgKiBGZWF0dXJlIGZvciB7QGxpbmsgI2dldFN5c3RlbUF2YWlsYWJsZUZlYXR1cmVzfSBhbmQge0BsaW5rICNoYXNTeXN0ZW1GZWF0dXJlfToKKyAgICAgKiBUaGUgZGV2aWNlIGltcGxlbWVudHMgYSBhbiBvcHRpbWl6ZWQgbW9kZSBmb3IgdmlydHVhbCByZWFsaXR5IChWUikgYXBwbGljYXRpb25zIHRoYXQgaGFuZGxlcworICAgICAqIHN0ZXJlb3Njb3BpYyByZW5kZXJpbmcgb2Ygbm90aWZpY2F0aW9ucywgYW5kIG1heSBwb3RlbnRpYWxseSBhbHNvIGluY2x1ZGUgb3B0aW1pemF0aW9ucyB0bworICAgICAqIHJlZHVjZSBsYXRlbmN5IGluIHRoZSBncmFwaGljcywgZGlzcGxheSwgYW5kIHNlbnNvciBzdGFja3MuICBQcmVzZW5jZSBvZiB0aGlzIGZlYXR1cmUKKyAgICAgKiBhbHNvIGluZGljYXRlcyB0aGF0IHRoZSBWckNvcmUgbGlicmFyeSBpcyBpbmNsdWRlZCBvbiB0aGlzIGRldmljZS4KKyAgICAgKi8KKyAgICBAU2RrQ29uc3RhbnQoU2RrQ29uc3RhbnRUeXBlLkZFQVRVUkUpCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRkVBVFVSRV9WUl9NT0RFID0gImFuZHJvaWQuc29mdHdhcmUudnIubW9kZSI7CisKKyAgICAvKioKICAgICAgKiBBY3Rpb24gdG8gZXh0ZXJuYWwgc3RvcmFnZSBzZXJ2aWNlIHRvIGNsZWFuIG91dCByZW1vdmVkIGFwcHMuCiAgICAgICogQGhpZGUKICAgICAgKi8KQEAgLTIxMDMsNyArMjI1OCw3IEBACiAgICAgICogQHNlZSAjR0VUX1NJR05BVFVSRVMKICAgICAgKiBAc2VlICNHRVRfVU5JTlNUQUxMRURfUEFDS0FHRVMKICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgUGFja2FnZUluZm8gZ2V0UGFja2FnZUluZm8oU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgZmxhZ3MpCisgICAgcHVibGljIGFic3RyYWN0IFBhY2thZ2VJbmZvIGdldFBhY2thZ2VJbmZvKFN0cmluZyBwYWNrYWdlTmFtZSwgQFBhY2thZ2VJbmZvRmxhZ3MgaW50IGZsYWdzKQogICAgICAgICAgICAgdGhyb3dzIE5hbWVOb3RGb3VuZEV4Y2VwdGlvbjsKIAogICAgIC8qKgpAQCAtMjE0Myw4ICsyMjk4LDggQEAKICAgICAgKiBAc2VlICNHRVRfVU5JTlNUQUxMRURfUEFDS0FHRVMKICAgICAgKi8KICAgICBAUmVxdWlyZXNQZXJtaXNzaW9uKE1hbmlmZXN0LnBlcm1pc3Npb24uSU5URVJBQ1RfQUNST1NTX1VTRVJTKQotICAgIHB1YmxpYyBhYnN0cmFjdCBQYWNrYWdlSW5mbyBnZXRQYWNrYWdlSW5mb0FzVXNlcihTdHJpbmcgcGFja2FnZU5hbWUsIGludCBmbGFncywgaW50IHVzZXJJZCkKLSAgICAgICAgICAgIHRocm93cyBOYW1lTm90Rm91bmRFeGNlcHRpb247CisgICAgcHVibGljIGFic3RyYWN0IFBhY2thZ2VJbmZvIGdldFBhY2thZ2VJbmZvQXNVc2VyKFN0cmluZyBwYWNrYWdlTmFtZSwKKyAgICAgICAgICAgIEBQYWNrYWdlSW5mb0ZsYWdzIGludCBmbGFncywgaW50IHVzZXJJZCkgdGhyb3dzIE5hbWVOb3RGb3VuZEV4Y2VwdGlvbjsKIAogICAgIC8qKgogICAgICAqIE1hcCBmcm9tIHRoZSBjdXJyZW50IHBhY2thZ2UgbmFtZXMgaW4gdXNlIG9uIHRoZSBkZXZpY2UgdG8gd2hhdGV2ZXIKQEAgLTIyMjUsNyArMjM4MCw3IEBACiAgICAgICoKICAgICAgKiBAcmV0dXJuIFJldHVybnMgYW4gaW50ZWdlciB1aWQgd2hvIG93bnMgdGhlIGdpdmVuIHBhY2thZ2UgbmFtZS4KICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgaW50IGdldFBhY2thZ2VVaWQoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgdXNlckhhbmRsZSkKKyAgICBwdWJsaWMgYWJzdHJhY3QgaW50IGdldFBhY2thZ2VVaWRBc1VzZXIoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgdXNlcklkKQogICAgICAgICAgICAgdGhyb3dzIE5hbWVOb3RGb3VuZEV4Y2VwdGlvbjsKIAogICAgIC8qKgpAQCAtMjI0Miw3ICsyMzk3LDcgQEAKICAgICAgKiBAcmV0dXJuIFJldHVybnMgYSB7QGxpbmsgUGVybWlzc2lvbkluZm99IGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlCiAgICAgICogICAgICAgICBwZXJtaXNzaW9uLgogICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBQZXJtaXNzaW9uSW5mbyBnZXRQZXJtaXNzaW9uSW5mbyhTdHJpbmcgbmFtZSwgaW50IGZsYWdzKQorICAgIHB1YmxpYyBhYnN0cmFjdCBQZXJtaXNzaW9uSW5mbyBnZXRQZXJtaXNzaW9uSW5mbyhTdHJpbmcgbmFtZSwgQFBlcm1pc3Npb25JbmZvRmxhZ3MgaW50IGZsYWdzKQogICAgICAgICAgICAgdGhyb3dzIE5hbWVOb3RGb3VuZEV4Y2VwdGlvbjsKIAogICAgIC8qKgpAQCAtMjI2MSw3ICsyNDE2LDcgQEAKICAgICAgKiBhYm91dCBhbGwgb2YgdGhlIHBlcm1pc3Npb25zIGluIHRoZSBnaXZlbiBncm91cC4KICAgICAgKi8KICAgICBwdWJsaWMgYWJzdHJhY3QgTGlzdDxQZXJtaXNzaW9uSW5mbz4gcXVlcnlQZXJtaXNzaW9uc0J5R3JvdXAoU3RyaW5nIGdyb3VwLAotICAgICAgICAgICAgaW50IGZsYWdzKSB0aHJvd3MgTmFtZU5vdEZvdW5kRXhjZXB0aW9uOworICAgICAgICAgICAgQFBlcm1pc3Npb25JbmZvRmxhZ3MgaW50IGZsYWdzKSB0aHJvd3MgTmFtZU5vdEZvdW5kRXhjZXB0aW9uOwogCiAgICAgLyoqCiAgICAgICogUmV0cmlldmUgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiB3ZSBrbm93IGFib3V0IGEgcGFydGljdWxhciBncm91cCBvZgpAQCAtMjI3OSw3ICsyNDM0LDcgQEAKICAgICAgKiBhYm91dCB0aGUgcGVybWlzc2lvbi4KICAgICAgKi8KICAgICBwdWJsaWMgYWJzdHJhY3QgUGVybWlzc2lvbkdyb3VwSW5mbyBnZXRQZXJtaXNzaW9uR3JvdXBJbmZvKFN0cmluZyBuYW1lLAotICAgICAgICAgICAgaW50IGZsYWdzKSB0aHJvd3MgTmFtZU5vdEZvdW5kRXhjZXB0aW9uOworICAgICAgICAgICAgQFBlcm1pc3Npb25Hcm91cEluZm9GbGFncyBpbnQgZmxhZ3MpIHRocm93cyBOYW1lTm90Rm91bmRFeGNlcHRpb247CiAKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZSBhbGwgb2YgdGhlIGtub3duIHBlcm1pc3Npb24gZ3JvdXBzIGluIHRoZSBzeXN0ZW0uCkBAIC0yMjkwLDcgKzI0NDUsOCBAQAogICAgICAqIEByZXR1cm4gUmV0dXJucyBhIGxpc3Qgb2Yge0BsaW5rIFBlcm1pc3Npb25Hcm91cEluZm99IGNvbnRhaW5pbmcKICAgICAgKiBpbmZvcm1hdGlvbiBhYm91dCBhbGwgb2YgdGhlIGtub3duIHBlcm1pc3Npb24gZ3JvdXBzLgogICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBMaXN0PFBlcm1pc3Npb25Hcm91cEluZm8+IGdldEFsbFBlcm1pc3Npb25Hcm91cHMoaW50IGZsYWdzKTsKKyAgICBwdWJsaWMgYWJzdHJhY3QgTGlzdDxQZXJtaXNzaW9uR3JvdXBJbmZvPiBnZXRBbGxQZXJtaXNzaW9uR3JvdXBzKAorICAgICAgICAgICAgQFBlcm1pc3Npb25Hcm91cEluZm9GbGFncyBpbnQgZmxhZ3MpOwogCiAgICAgLyoqCiAgICAgICogUmV0cmlldmUgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiB3ZSBrbm93IGFib3V0IGEgcGFydGljdWxhcgpAQCAtMjMyMCw3ICsyNDc2LDcgQEAKICAgICAgKiBAc2VlICNHRVRfVU5JTlNUQUxMRURfUEFDS0FHRVMKICAgICAgKi8KICAgICBwdWJsaWMgYWJzdHJhY3QgQXBwbGljYXRpb25JbmZvIGdldEFwcGxpY2F0aW9uSW5mbyhTdHJpbmcgcGFja2FnZU5hbWUsCi0gICAgICAgICAgICBpbnQgZmxhZ3MpIHRocm93cyBOYW1lTm90Rm91bmRFeGNlcHRpb247CisgICAgICAgICAgICBAQXBwbGljYXRpb25JbmZvRmxhZ3MgaW50IGZsYWdzKSB0aHJvd3MgTmFtZU5vdEZvdW5kRXhjZXB0aW9uOwogCiAgICAgLyoqCiAgICAgICogUmV0cmlldmUgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiB3ZSBrbm93IGFib3V0IGEgcGFydGljdWxhciBhY3Rpdml0eQpAQCAtMjM0Myw3ICsyNDk5LDcgQEAKICAgICAgKiBAc2VlICNHRVRfU0hBUkVEX0xJQlJBUllfRklMRVMKICAgICAgKi8KICAgICBwdWJsaWMgYWJzdHJhY3QgQWN0aXZpdHlJbmZvIGdldEFjdGl2aXR5SW5mbyhDb21wb25lbnROYW1lIGNvbXBvbmVudCwKLSAgICAgICAgICAgIGludCBmbGFncykgdGhyb3dzIE5hbWVOb3RGb3VuZEV4Y2VwdGlvbjsKKyAgICAgICAgICAgIEBDb21wb25lbnRJbmZvRmxhZ3MgaW50IGZsYWdzKSB0aHJvd3MgTmFtZU5vdEZvdW5kRXhjZXB0aW9uOwogCiAgICAgLyoqCiAgICAgICogUmV0cmlldmUgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiB3ZSBrbm93IGFib3V0IGEgcGFydGljdWxhciByZWNlaXZlcgpAQCAtMjM2Niw3ICsyNTIyLDcgQEAKICAgICAgKiBAc2VlICNHRVRfU0hBUkVEX0xJQlJBUllfRklMRVMKICAgICAgKi8KICAgICBwdWJsaWMgYWJzdHJhY3QgQWN0aXZpdHlJbmZvIGdldFJlY2VpdmVySW5mbyhDb21wb25lbnROYW1lIGNvbXBvbmVudCwKLSAgICAgICAgICAgIGludCBmbGFncykgdGhyb3dzIE5hbWVOb3RGb3VuZEV4Y2VwdGlvbjsKKyAgICAgICAgICAgIEBDb21wb25lbnRJbmZvRmxhZ3MgaW50IGZsYWdzKSB0aHJvd3MgTmFtZU5vdEZvdW5kRXhjZXB0aW9uOwogCiAgICAgLyoqCiAgICAgICogUmV0cmlldmUgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiB3ZSBrbm93IGFib3V0IGEgcGFydGljdWxhciBzZXJ2aWNlCkBAIC0yMzg4LDcgKzI1NDQsNyBAQAogICAgICAqIEBzZWUgI0dFVF9TSEFSRURfTElCUkFSWV9GSUxFUwogICAgICAqLwogICAgIHB1YmxpYyBhYnN0cmFjdCBTZXJ2aWNlSW5mbyBnZXRTZXJ2aWNlSW5mbyhDb21wb25lbnROYW1lIGNvbXBvbmVudCwKLSAgICAgICAgICAgIGludCBmbGFncykgdGhyb3dzIE5hbWVOb3RGb3VuZEV4Y2VwdGlvbjsKKyAgICAgICAgICAgIEBDb21wb25lbnRJbmZvRmxhZ3MgaW50IGZsYWdzKSB0aHJvd3MgTmFtZU5vdEZvdW5kRXhjZXB0aW9uOwogCiAgICAgLyoqCiAgICAgICogUmV0cmlldmUgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiB3ZSBrbm93IGFib3V0IGEgcGFydGljdWxhciBjb250ZW50CkBAIC0yNDEwLDcgKzI1NjYsNyBAQAogICAgICAqIEBzZWUgI0dFVF9TSEFSRURfTElCUkFSWV9GSUxFUwogICAgICAqLwogICAgIHB1YmxpYyBhYnN0cmFjdCBQcm92aWRlckluZm8gZ2V0UHJvdmlkZXJJbmZvKENvbXBvbmVudE5hbWUgY29tcG9uZW50LAotICAgICAgICAgICAgaW50IGZsYWdzKSB0aHJvd3MgTmFtZU5vdEZvdW5kRXhjZXB0aW9uOworICAgICAgICAgICAgQENvbXBvbmVudEluZm9GbGFncyBpbnQgZmxhZ3MpIHRocm93cyBOYW1lTm90Rm91bmRFeGNlcHRpb247CiAKICAgICAvKioKICAgICAgKiBSZXR1cm4gYSBMaXN0IG9mIGFsbCBwYWNrYWdlcyB0aGF0IGFyZSBpbnN0YWxsZWQKQEAgLTI0NDYsNyArMjYwMiw3IEBACiAgICAgICogQHNlZSAjR0VUX1NJR05BVFVSRVMKICAgICAgKiBAc2VlICNHRVRfVU5JTlNUQUxMRURfUEFDS0FHRVMKICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgTGlzdDxQYWNrYWdlSW5mbz4gZ2V0SW5zdGFsbGVkUGFja2FnZXMoaW50IGZsYWdzKTsKKyAgICBwdWJsaWMgYWJzdHJhY3QgTGlzdDxQYWNrYWdlSW5mbz4gZ2V0SW5zdGFsbGVkUGFja2FnZXMoQFBhY2thZ2VJbmZvRmxhZ3MgaW50IGZsYWdzKTsKIAogICAgIC8qKgogICAgICAqIFJldHVybiBhIExpc3Qgb2YgYWxsIGluc3RhbGxlZCBwYWNrYWdlcyB0aGF0IGFyZSBjdXJyZW50bHkKQEAgLTI0NzksNyArMjYzNSw3IEBACiAgICAgICogQHNlZSAjR0VUX1VOSU5TVEFMTEVEX1BBQ0tBR0VTCiAgICAgICovCiAgICAgcHVibGljIGFic3RyYWN0IExpc3Q8UGFja2FnZUluZm8+IGdldFBhY2thZ2VzSG9sZGluZ1Blcm1pc3Npb25zKAotICAgICAgICAgICAgU3RyaW5nW10gcGVybWlzc2lvbnMsIGludCBmbGFncyk7CisgICAgICAgICAgICBTdHJpbmdbXSBwZXJtaXNzaW9ucywgQFBhY2thZ2VJbmZvRmxhZ3MgaW50IGZsYWdzKTsKIAogICAgIC8qKgogICAgICAqIFJldHVybiBhIExpc3Qgb2YgYWxsIHBhY2thZ2VzIHRoYXQgYXJlIGluc3RhbGxlZCBvbiB0aGUgZGV2aWNlLCBmb3IgYSBzcGVjaWZpYyB1c2VyLgpAQCAtMjUxOCw3ICsyNjc0LDggQEAKICAgICAgKgogICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IExpc3Q8UGFja2FnZUluZm8+IGdldEluc3RhbGxlZFBhY2thZ2VzKGludCBmbGFncywgaW50IHVzZXJJZCk7CisgICAgcHVibGljIGFic3RyYWN0IExpc3Q8UGFja2FnZUluZm8+IGdldEluc3RhbGxlZFBhY2thZ2VzQXNVc2VyKEBQYWNrYWdlSW5mb0ZsYWdzIGludCBmbGFncywKKyAgICAgICAgICAgIGludCB1c2VySWQpOwogCiAgICAgLyoqCiAgICAgICogQ2hlY2sgd2hldGhlciBhIHBhcnRpY3VsYXIgcGFja2FnZSBoYXMgYmVlbiBncmFudGVkIGEgcGFydGljdWxhcgpAQCAtMjg1OCw3ICszMDE1LDcgQEAKICAgICAgKiBAc2VlICNHRVRfU0hBUkVEX0xJQlJBUllfRklMRVMKICAgICAgKiBAc2VlICNHRVRfVU5JTlNUQUxMRURfUEFDS0FHRVMKICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgTGlzdDxBcHBsaWNhdGlvbkluZm8+IGdldEluc3RhbGxlZEFwcGxpY2F0aW9ucyhpbnQgZmxhZ3MpOworICAgIHB1YmxpYyBhYnN0cmFjdCBMaXN0PEFwcGxpY2F0aW9uSW5mbz4gZ2V0SW5zdGFsbGVkQXBwbGljYXRpb25zKEBBcHBsaWNhdGlvbkluZm9GbGFncyBpbnQgZmxhZ3MpOwogCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZXBoZW1lcmFsIGFwcGxpY2F0aW9ucyB0aGUgdXNlciByZWNlbnRseSB1c2VkLiBSZXF1aXJlcwpAQCAtMjk5Myw3ICszMTUwLDcgQEAKICAgICAgKiBAc2VlICNHRVRfSU5URU5UX0ZJTFRFUlMKICAgICAgKiBAc2VlICNHRVRfUkVTT0xWRURfRklMVEVSCiAgICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IFJlc29sdmVJbmZvIHJlc29sdmVBY3Rpdml0eShJbnRlbnQgaW50ZW50LCBpbnQgZmxhZ3MpOworICAgIHB1YmxpYyBhYnN0cmFjdCBSZXNvbHZlSW5mbyByZXNvbHZlQWN0aXZpdHkoSW50ZW50IGludGVudCwgQFJlc29sdmVJbmZvRmxhZ3MgaW50IGZsYWdzKTsKIAogICAgIC8qKgogICAgICAqIERldGVybWluZSB0aGUgYmVzdCBhY3Rpb24gdG8gcGVyZm9ybSBmb3IgYSBnaXZlbiBJbnRlbnQgZm9yIGEgZ2l2ZW4gdXNlci4gVGhpcwpAQCAtMzAyNiw3ICszMTgzLDggQEAKICAgICAgKgogICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IFJlc29sdmVJbmZvIHJlc29sdmVBY3Rpdml0eUFzVXNlcihJbnRlbnQgaW50ZW50LCBpbnQgZmxhZ3MsIGludCB1c2VySWQpOworICAgIHB1YmxpYyBhYnN0cmFjdCBSZXNvbHZlSW5mbyByZXNvbHZlQWN0aXZpdHlBc1VzZXIoSW50ZW50IGludGVudCwgQFJlc29sdmVJbmZvRmxhZ3MgaW50IGZsYWdzLAorICAgICAgICAgICAgaW50IHVzZXJJZCk7CiAKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZSBhbGwgYWN0aXZpdGllcyB0aGF0IGNhbiBiZSBwZXJmb3JtZWQgZm9yIHRoZSBnaXZlbiBpbnRlbnQuCkBAIC0zMDQ5LDcgKzMyMDcsNyBAQAogICAgICAqIEBzZWUgI0dFVF9SRVNPTFZFRF9GSUxURVIKICAgICAgKi8KICAgICBwdWJsaWMgYWJzdHJhY3QgTGlzdDxSZXNvbHZlSW5mbz4gcXVlcnlJbnRlbnRBY3Rpdml0aWVzKEludGVudCBpbnRlbnQsCi0gICAgICAgICAgICBpbnQgZmxhZ3MpOworICAgICAgICAgICAgQFJlc29sdmVJbmZvRmxhZ3MgaW50IGZsYWdzKTsKIAogICAgIC8qKgogICAgICAqIFJldHJpZXZlIGFsbCBhY3Rpdml0aWVzIHRoYXQgY2FuIGJlIHBlcmZvcm1lZCBmb3IgdGhlIGdpdmVuIGludGVudCwgZm9yIGEgc3BlY2lmaWMgdXNlci4KQEAgLTMwNzMsOCArMzIzMSw3IEBACiAgICAgICogQGhpZGUKICAgICAgKi8KICAgICBwdWJsaWMgYWJzdHJhY3QgTGlzdDxSZXNvbHZlSW5mbz4gcXVlcnlJbnRlbnRBY3Rpdml0aWVzQXNVc2VyKEludGVudCBpbnRlbnQsCi0gICAgICAgICAgICBpbnQgZmxhZ3MsIGludCB1c2VySWQpOwotCisgICAgICAgICAgICBAUmVzb2x2ZUluZm9GbGFncyBpbnQgZmxhZ3MsIGludCB1c2VySWQpOwogCiAgICAgLyoqCiAgICAgICogUmV0cmlldmUgYSBzZXQgb2YgYWN0aXZpdGllcyB0aGF0IHNob3VsZCBiZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIgYXMKQEAgLTMxMDYsNyArMzI2Myw3IEBACiAgICAgICogQHNlZSAjR0VUX1JFU09MVkVEX0ZJTFRFUgogICAgICAqLwogICAgIHB1YmxpYyBhYnN0cmFjdCBMaXN0PFJlc29sdmVJbmZvPiBxdWVyeUludGVudEFjdGl2aXR5T3B0aW9ucygKLSAgICAgICAgICAgIENvbXBvbmVudE5hbWUgY2FsbGVyLCBJbnRlbnRbXSBzcGVjaWZpY3MsIEludGVudCBpbnRlbnQsIGludCBmbGFncyk7CisgICAgICAgICAgICBDb21wb25lbnROYW1lIGNhbGxlciwgSW50ZW50W10gc3BlY2lmaWNzLCBJbnRlbnQgaW50ZW50LCBAUmVzb2x2ZUluZm9GbGFncyBpbnQgZmxhZ3MpOwogCiAgICAgLyoqCiAgICAgICogUmV0cmlldmUgYWxsIHJlY2VpdmVycyB0aGF0IGNhbiBoYW5kbGUgYSBicm9hZGNhc3Qgb2YgdGhlIGdpdmVuIGludGVudC4KQEAgLTMxMjMsNyArMzI4MCw3IEBACiAgICAgICogQHNlZSAjR0VUX1JFU09MVkVEX0ZJTFRFUgogICAgICAqLwogICAgIHB1YmxpYyBhYnN0cmFjdCBMaXN0PFJlc29sdmVJbmZvPiBxdWVyeUJyb2FkY2FzdFJlY2VpdmVycyhJbnRlbnQgaW50ZW50LAotICAgICAgICAgICAgaW50IGZsYWdzKTsKKyAgICAgICAgICAgIEBSZXNvbHZlSW5mb0ZsYWdzIGludCBmbGFncyk7CiAKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZSBhbGwgcmVjZWl2ZXJzIHRoYXQgY2FuIGhhbmRsZSBhIGJyb2FkY2FzdCBvZiB0aGUgZ2l2ZW4gaW50ZW50LCBmb3IgYSBzcGVjaWZpYwpAQCAtMzE0Miw4ICszMjk5LDggQEAKICAgICAgKiBAc2VlICNHRVRfUkVTT0xWRURfRklMVEVSCiAgICAgICogQGhpZGUKICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgTGlzdDxSZXNvbHZlSW5mbz4gcXVlcnlCcm9hZGNhc3RSZWNlaXZlcnMoSW50ZW50IGludGVudCwKLSAgICAgICAgICAgIGludCBmbGFncywgaW50IHVzZXJJZCk7CisgICAgcHVibGljIGFic3RyYWN0IExpc3Q8UmVzb2x2ZUluZm8+IHF1ZXJ5QnJvYWRjYXN0UmVjZWl2ZXJzQXNVc2VyKEludGVudCBpbnRlbnQsCisgICAgICAgICAgICBAUmVzb2x2ZUluZm9GbGFncyBpbnQgZmxhZ3MsIGludCB1c2VySWQpOwogCiAgICAgLyoqCiAgICAgICogRGV0ZXJtaW5lIHRoZSBiZXN0IHNlcnZpY2UgdG8gaGFuZGxlIGZvciBhIGdpdmVuIEludGVudC4KQEAgLTMxNTksNyArMzMxNiw3IEBACiAgICAgICogQHNlZSAjR0VUX0lOVEVOVF9GSUxURVJTCiAgICAgICogQHNlZSAjR0VUX1JFU09MVkVEX0ZJTFRFUgogICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBSZXNvbHZlSW5mbyByZXNvbHZlU2VydmljZShJbnRlbnQgaW50ZW50LCBpbnQgZmxhZ3MpOworICAgIHB1YmxpYyBhYnN0cmFjdCBSZXNvbHZlSW5mbyByZXNvbHZlU2VydmljZShJbnRlbnQgaW50ZW50LCBAUmVzb2x2ZUluZm9GbGFncyBpbnQgZmxhZ3MpOwogCiAgICAgLyoqCiAgICAgICogUmV0cmlldmUgYWxsIHNlcnZpY2VzIHRoYXQgY2FuIG1hdGNoIHRoZSBnaXZlbiBpbnRlbnQuCkBAIC0zMTc3LDcgKzMzMzQsNyBAQAogICAgICAqIEBzZWUgI0dFVF9SRVNPTFZFRF9GSUxURVIKICAgICAgKi8KICAgICBwdWJsaWMgYWJzdHJhY3QgTGlzdDxSZXNvbHZlSW5mbz4gcXVlcnlJbnRlbnRTZXJ2aWNlcyhJbnRlbnQgaW50ZW50LAotICAgICAgICAgICAgaW50IGZsYWdzKTsKKyAgICAgICAgICAgIEBSZXNvbHZlSW5mb0ZsYWdzIGludCBmbGFncyk7CiAKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZSBhbGwgc2VydmljZXMgdGhhdCBjYW4gbWF0Y2ggdGhlIGdpdmVuIGludGVudCBmb3IgYSBnaXZlbiB1c2VyLgpAQCAtMzE5OCwxMSArMzM1NSwxMSBAQAogICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgcHVibGljIGFic3RyYWN0IExpc3Q8UmVzb2x2ZUluZm8+IHF1ZXJ5SW50ZW50U2VydmljZXNBc1VzZXIoSW50ZW50IGludGVudCwKLSAgICAgICAgICAgIGludCBmbGFncywgaW50IHVzZXJJZCk7CisgICAgICAgICAgICBAUmVzb2x2ZUluZm9GbGFncyBpbnQgZmxhZ3MsIGludCB1c2VySWQpOwogCiAgICAgLyoqIHtAaGlkZX0gKi8KICAgICBwdWJsaWMgYWJzdHJhY3QgTGlzdDxSZXNvbHZlSW5mbz4gcXVlcnlJbnRlbnRDb250ZW50UHJvdmlkZXJzQXNVc2VyKAotICAgICAgICAgICAgSW50ZW50IGludGVudCwgaW50IGZsYWdzLCBpbnQgdXNlcklkKTsKKyAgICAgICAgICAgIEludGVudCBpbnRlbnQsIEBSZXNvbHZlSW5mb0ZsYWdzIGludCBmbGFncywgaW50IHVzZXJJZCk7CiAKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZSBhbGwgcHJvdmlkZXJzIHRoYXQgY2FuIG1hdGNoIHRoZSBnaXZlbiBpbnRlbnQuCkBAIC0zMjE2LDcgKzMzNzMsOCBAQAogICAgICAqIEBzZWUgI0dFVF9JTlRFTlRfRklMVEVSUwogICAgICAqIEBzZWUgI0dFVF9SRVNPTFZFRF9GSUxURVIKICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgTGlzdDxSZXNvbHZlSW5mbz4gcXVlcnlJbnRlbnRDb250ZW50UHJvdmlkZXJzKEludGVudCBpbnRlbnQsIGludCBmbGFncyk7CisgICAgcHVibGljIGFic3RyYWN0IExpc3Q8UmVzb2x2ZUluZm8+IHF1ZXJ5SW50ZW50Q29udGVudFByb3ZpZGVycyhJbnRlbnQgaW50ZW50LAorICAgICAgICAgICAgQFJlc29sdmVJbmZvRmxhZ3MgaW50IGZsYWdzKTsKIAogICAgIC8qKgogICAgICAqIEZpbmQgYSBzaW5nbGUgY29udGVudCBwcm92aWRlciBieSBpdHMgYmFzZSBwYXRoIG5hbWUuCkBAIC0zMjI4LDcgKzMzODYsNyBAQAogICAgICAqICAgICAgICAgZWxzZSBudWxsLgogICAgICAqLwogICAgIHB1YmxpYyBhYnN0cmFjdCBQcm92aWRlckluZm8gcmVzb2x2ZUNvbnRlbnRQcm92aWRlcihTdHJpbmcgbmFtZSwKLSAgICAgICAgICAgIGludCBmbGFncyk7CisgICAgICAgICAgICBAQ29tcG9uZW50SW5mb0ZsYWdzIGludCBmbGFncyk7CiAKICAgICAvKioKICAgICAgKiBGaW5kIGEgc2luZ2xlIGNvbnRlbnQgcHJvdmlkZXIgYnkgaXRzIGJhc2UgcGF0aCBuYW1lLgpAQCAtMzI0MSw3ICszMzk5LDggQEAKICAgICAgKiAgICAgICAgIGVsc2UgbnVsbC4KICAgICAgKiBAaGlkZQogICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBQcm92aWRlckluZm8gcmVzb2x2ZUNvbnRlbnRQcm92aWRlckFzVXNlcihTdHJpbmcgbmFtZSwgaW50IGZsYWdzLCBpbnQgdXNlcklkKTsKKyAgICBwdWJsaWMgYWJzdHJhY3QgUHJvdmlkZXJJbmZvIHJlc29sdmVDb250ZW50UHJvdmlkZXJBc1VzZXIoU3RyaW5nIG5hbWUsCisgICAgICAgICAgICBAQ29tcG9uZW50SW5mb0ZsYWdzIGludCBmbGFncywgaW50IHVzZXJJZCk7CiAKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZSBjb250ZW50IHByb3ZpZGVyIGluZm9ybWF0aW9uLgpAQCAtMzI2Miw3ICszNDIxLDcgQEAKICAgICAgKiAgICAgICAgIDxlbT5JZiB0aGVyZSBhcmUgbm8gbWF0Y2hpbmcgcHJvdmlkZXJzLCBudWxsIGlzIHJldHVybmVkLjwvZW0+CiAgICAgICovCiAgICAgcHVibGljIGFic3RyYWN0IExpc3Q8UHJvdmlkZXJJbmZvPiBxdWVyeUNvbnRlbnRQcm92aWRlcnMoCi0gICAgICAgICAgICBTdHJpbmcgcHJvY2Vzc05hbWUsIGludCB1aWQsIGludCBmbGFncyk7CisgICAgICAgICAgICBTdHJpbmcgcHJvY2Vzc05hbWUsIGludCB1aWQsIEBDb21wb25lbnRJbmZvRmxhZ3MgaW50IGZsYWdzKTsKIAogICAgIC8qKgogICAgICAqIFJldHJpZXZlIGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gd2Uga25vdyBhYm91dCBhIHBhcnRpY3VsYXIKQEAgLTMyNzksOCArMzQzOCw4IEBACiAgICAgICogQHJldHVybiBJbnN0cnVtZW50YXRpb25JbmZvIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlCiAgICAgICogICAgICAgICBpbnN0cnVtZW50YXRpb24uCiAgICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IEluc3RydW1lbnRhdGlvbkluZm8gZ2V0SW5zdHJ1bWVudGF0aW9uSW5mbygKLSAgICAgICAgICAgIENvbXBvbmVudE5hbWUgY2xhc3NOYW1lLCBpbnQgZmxhZ3MpIHRocm93cyBOYW1lTm90Rm91bmRFeGNlcHRpb247CisgICAgcHVibGljIGFic3RyYWN0IEluc3RydW1lbnRhdGlvbkluZm8gZ2V0SW5zdHJ1bWVudGF0aW9uSW5mbyhDb21wb25lbnROYW1lIGNsYXNzTmFtZSwKKyAgICAgICAgICAgIEBJbnN0cnVtZW50YXRpb25JbmZvRmxhZ3MgaW50IGZsYWdzKSB0aHJvd3MgTmFtZU5vdEZvdW5kRXhjZXB0aW9uOwogCiAgICAgLyoqCiAgICAgICogUmV0cmlldmUgaW5mb3JtYXRpb24gYWJvdXQgYXZhaWxhYmxlIGluc3RydW1lbnRhdGlvbiBjb2RlLiAgTWF5IGJlIHVzZWQKQEAgLTMyOTYsOCArMzQ1NSw4IEBACiAgICAgICogICAgICAgICBtYXRjaGluZyBhdmFpbGFibGUgSW5zdHJ1bWVudGF0aW9uLiAgUmV0dXJucyBhbiBlbXB0eSBsaXN0IGlmCiAgICAgICogICAgICAgICB0aGVyZSBpcyBubyBpbnN0cnVtZW50YXRpb24gYXZhaWxhYmxlIGZvciB0aGUgZ2l2ZW4gcGFja2FnZS4KICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgTGlzdDxJbnN0cnVtZW50YXRpb25JbmZvPiBxdWVyeUluc3RydW1lbnRhdGlvbigKLSAgICAgICAgICAgIFN0cmluZyB0YXJnZXRQYWNrYWdlLCBpbnQgZmxhZ3MpOworICAgIHB1YmxpYyBhYnN0cmFjdCBMaXN0PEluc3RydW1lbnRhdGlvbkluZm8+IHF1ZXJ5SW5zdHJ1bWVudGF0aW9uKFN0cmluZyB0YXJnZXRQYWNrYWdlLAorICAgICAgICAgICAgQEluc3RydW1lbnRhdGlvbkluZm9GbGFncyBpbnQgZmxhZ3MpOwogCiAgICAgLyoqCiAgICAgICogUmV0cmlldmUgYW4gaW1hZ2UgZnJvbSBhIHBhY2thZ2UuICBUaGlzIGlzIGEgbG93LWxldmVsIEFQSSB1c2VkIGJ5CkBAIC0zNzMzLDE0ICszODkyLDEzIEBACiAgICAgICogQHNlZSAjR0VUX1NJR05BVFVSRVMKICAgICAgKgogICAgICAqLwotICAgIHB1YmxpYyBQYWNrYWdlSW5mbyBnZXRQYWNrYWdlQXJjaGl2ZUluZm8oU3RyaW5nIGFyY2hpdmVGaWxlUGF0aCwgaW50IGZsYWdzKSB7CisgICAgcHVibGljIFBhY2thZ2VJbmZvIGdldFBhY2thZ2VBcmNoaXZlSW5mbyhTdHJpbmcgYXJjaGl2ZUZpbGVQYXRoLCBAUGFja2FnZUluZm9GbGFncyBpbnQgZmxhZ3MpIHsKICAgICAgICAgZmluYWwgUGFja2FnZVBhcnNlciBwYXJzZXIgPSBuZXcgUGFja2FnZVBhcnNlcigpOwogICAgICAgICBmaW5hbCBGaWxlIGFwa0ZpbGUgPSBuZXcgRmlsZShhcmNoaXZlRmlsZVBhdGgpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgUGFja2FnZVBhcnNlci5QYWNrYWdlIHBrZyA9IHBhcnNlci5wYXJzZU1vbm9saXRoaWNQYWNrYWdlKGFwa0ZpbGUsIDApOwogICAgICAgICAgICAgaWYgKChmbGFncyAmIEdFVF9TSUdOQVRVUkVTKSAhPSAwKSB7CiAgICAgICAgICAgICAgICAgcGFyc2VyLmNvbGxlY3RDZXJ0aWZpY2F0ZXMocGtnLCAwKTsKLSAgICAgICAgICAgICAgICBwYXJzZXIuY29sbGVjdE1hbmlmZXN0RGlnZXN0KHBrZyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBQYWNrYWdlVXNlclN0YXRlIHN0YXRlID0gbmV3IFBhY2thZ2VVc2VyU3RhdGUoKTsKICAgICAgICAgICAgIHJldHVybiBQYWNrYWdlUGFyc2VyLmdlbmVyYXRlUGFja2FnZUluZm8ocGtnLCBudWxsLCBmbGFncywgMCwgMCwgbnVsbCwgc3RhdGUpOwpAQCAtMzgwMCwxNCArMzk1OCwxMiBAQAogICAgICAqIEBwYXJhbSB2ZXJpZmljYXRpb25VUkkgVGhlIGxvY2F0aW9uIG9mIHRoZSBzdXBwbGVtZW50YXJ5IHZlcmlmaWNhdGlvbgogICAgICAqICAgICAgICAgICAgZmlsZS4gVGhpcyBjYW4gYmUgYSAnZmlsZTonIG9yIGEgJ2NvbnRlbnQ6JyBVUkkuIE1heSBiZQogICAgICAqICAgICAgICAgICAge0Bjb2RlIG51bGx9LgotICAgICAqIEBwYXJhbSBtYW5pZmVzdERpZ2VzdCBhbiBvYmplY3QgdGhhdCBob2xkcyB0aGUgZGlnZXN0IG9mIHRoZSBwYWNrYWdlCi0gICAgICogICAgICAgICAgICB3aGljaCBjYW4gYmUgdXNlZCB0byB2ZXJpZnkgb3duZXJzaGlwLiBNYXkgYmUge0Bjb2RlIG51bGx9LgogICAgICAqIEBwYXJhbSBlbmNyeXB0aW9uUGFyYW1zIGlmIHRoZSBwYWNrYWdlIHRvIGJlIGluc3RhbGxlZCBpcyBlbmNyeXB0ZWQsCiAgICAgICogICAgICAgICAgICB0aGVzZSBwYXJhbWV0ZXJzIGRlc2NyaWJpbmcgdGhlIGVuY3J5cHRpb24gYW5kIGF1dGhlbnRpY2F0aW9uCiAgICAgICogICAgICAgICAgICB1c2VkLiBNYXkgYmUge0Bjb2RlIG51bGx9LgogICAgICAqIEBoaWRlCiAgICAgICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayAjaW5zdGFsbFBhY2thZ2VXaXRoVmVyaWZpY2F0aW9uKFVyaSwKLSAgICAgKiAgICAgICAgICAgICBQYWNrYWdlSW5zdGFsbE9ic2VydmVyLCBpbnQsIFN0cmluZywgVXJpLCBNYW5pZmVzdERpZ2VzdCwKKyAgICAgKiAgICAgICAgICAgICBQYWNrYWdlSW5zdGFsbE9ic2VydmVyLCBpbnQsIFN0cmluZywgVXJpLAogICAgICAqICAgICAgICAgICAgIENvbnRhaW5lckVuY3J5cHRpb25QYXJhbXMpfSBpbnN0ZWFkLiBUaGlzIG1ldGhvZCB3aWxsCiAgICAgICogICAgICAgICAgICAgY29udGludWUgdG8gYmUgc3VwcG9ydGVkIGJ1dCB0aGUgb2xkZXIgb2JzZXJ2ZXIgaW50ZXJmYWNlCiAgICAgICogICAgICAgICAgICAgd2lsbCBub3QgZ2V0IGFkZGl0aW9uYWwgZmFpbHVyZSBkZXRhaWxzLgpAQCAtMzgxNSw3ICszOTcxLDcgQEAKICAgICAvLyBAU3lzdGVtQXBpCiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgaW5zdGFsbFBhY2thZ2VXaXRoVmVyaWZpY2F0aW9uKFVyaSBwYWNrYWdlVVJJLAogICAgICAgICAgICAgSVBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXIgb2JzZXJ2ZXIsIGludCBmbGFncywgU3RyaW5nIGluc3RhbGxlclBhY2thZ2VOYW1lLAotICAgICAgICAgICAgVXJpIHZlcmlmaWNhdGlvblVSSSwgTWFuaWZlc3REaWdlc3QgbWFuaWZlc3REaWdlc3QsCisgICAgICAgICAgICBVcmkgdmVyaWZpY2F0aW9uVVJJLAogICAgICAgICAgICAgQ29udGFpbmVyRW5jcnlwdGlvblBhcmFtcyBlbmNyeXB0aW9uUGFyYW1zKTsKIAogICAgIC8qKgpAQCAtMzkyNCw4ICs0MDgwLDYgQEAKICAgICAgKiBAcGFyYW0gdmVyaWZpY2F0aW9uVVJJIFRoZSBsb2NhdGlvbiBvZiB0aGUgc3VwcGxlbWVudGFyeSB2ZXJpZmljYXRpb24KICAgICAgKiAgICAgICAgICAgIGZpbGUuIFRoaXMgY2FuIGJlIGEgJ2ZpbGU6JyBvciBhICdjb250ZW50OicgVVJJLiBNYXkgYmUKICAgICAgKiAgICAgICAgICAgIHtAY29kZSBudWxsfS4KLSAgICAgKiBAcGFyYW0gbWFuaWZlc3REaWdlc3QgYW4gb2JqZWN0IHRoYXQgaG9sZHMgdGhlIGRpZ2VzdCBvZiB0aGUgcGFja2FnZQotICAgICAqICAgICAgICAgICAgd2hpY2ggY2FuIGJlIHVzZWQgdG8gdmVyaWZ5IG93bmVyc2hpcC4gTWF5IGJlIHtAY29kZSBudWxsfS4KICAgICAgKiBAcGFyYW0gZW5jcnlwdGlvblBhcmFtcyBpZiB0aGUgcGFja2FnZSB0byBiZSBpbnN0YWxsZWQgaXMgZW5jcnlwdGVkLAogICAgICAqICAgICAgICAgICAgdGhlc2UgcGFyYW1ldGVycyBkZXNjcmliaW5nIHRoZSBlbmNyeXB0aW9uIGFuZCBhdXRoZW50aWNhdGlvbgogICAgICAqICAgICAgICAgICAgdXNlZC4gTWF5IGJlIHtAY29kZSBudWxsfS4KQEAgLTM5MzMsNyArNDA4Nyw3IEBACiAgICAgICovCiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgaW5zdGFsbFBhY2thZ2VXaXRoVmVyaWZpY2F0aW9uKFVyaSBwYWNrYWdlVVJJLAogICAgICAgICAgICAgUGFja2FnZUluc3RhbGxPYnNlcnZlciBvYnNlcnZlciwgaW50IGZsYWdzLCBTdHJpbmcgaW5zdGFsbGVyUGFja2FnZU5hbWUsCi0gICAgICAgICAgICBVcmkgdmVyaWZpY2F0aW9uVVJJLCBNYW5pZmVzdERpZ2VzdCBtYW5pZmVzdERpZ2VzdCwKKyAgICAgICAgICAgIFVyaSB2ZXJpZmljYXRpb25VUkksCiAgICAgICAgICAgICBDb250YWluZXJFbmNyeXB0aW9uUGFyYW1zIGVuY3J5cHRpb25QYXJhbXMpOwogCiAgICAgLyoqCkBAIC00MDc3LDcgKzQyMzEsNyBAQAogICAgICAqCiAgICAgICogQGhpZGUKICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgaW50IGdldEludGVudFZlcmlmaWNhdGlvblN0YXR1cyhTdHJpbmcgcGFja2FnZU5hbWUsIGludCB1c2VySWQpOworICAgIHB1YmxpYyBhYnN0cmFjdCBpbnQgZ2V0SW50ZW50VmVyaWZpY2F0aW9uU3RhdHVzQXNVc2VyKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHVzZXJJZCk7CiAKICAgICAvKioKICAgICAgKiBBbGxvdyB0byBjaGFuZ2UgdGhlIHN0YXR1cyBvZiBhIEludGVudCBWZXJpZmljYXRpb24gc3RhdHVzIGZvciBhbGwgSW50ZW50RmlsdGVyIG9mIGFuIEFwcC4KQEAgLTQwOTksNyArNDI1Myw3IEBACiAgICAgICoKICAgICAgKiBAaGlkZQogICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIHVwZGF0ZUludGVudFZlcmlmaWNhdGlvblN0YXR1cyhTdHJpbmcgcGFja2FnZU5hbWUsIGludCBzdGF0dXMsCisgICAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gdXBkYXRlSW50ZW50VmVyaWZpY2F0aW9uU3RhdHVzQXNVc2VyKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHN0YXR1cywKICAgICAgICAgICAgIGludCB1c2VySWQpOwogCiAgICAgLyoqCkBAIC00MTQwLDcgKzQyOTQsNyBAQAogICAgICAqCiAgICAgICogQGhpZGUKICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldERlZmF1bHRCcm93c2VyUGFja2FnZU5hbWUoaW50IHVzZXJJZCk7CisgICAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXREZWZhdWx0QnJvd3NlclBhY2thZ2VOYW1lQXNVc2VyKGludCB1c2VySWQpOwogCiAgICAgLyoqCiAgICAgICogU2V0IHRoZSBkZWZhdWx0IEJyb3dzZXIgcGFja2FnZSBuYW1lIGZvciBhIHNwZWNpZmljIHVzZXIuCkBAIC00MTU0LDcgKzQzMDgsNyBAQAogICAgICAqCiAgICAgICogQGhpZGUKICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBzZXREZWZhdWx0QnJvd3NlclBhY2thZ2VOYW1lKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHVzZXJJZCk7CisgICAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gc2V0RGVmYXVsdEJyb3dzZXJQYWNrYWdlTmFtZUFzVXNlcihTdHJpbmcgcGFja2FnZU5hbWUsIGludCB1c2VySWQpOwogCiAgICAgLyoqCiAgICAgICogQ2hhbmdlIHRoZSBpbnN0YWxsZXIgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gcGFja2FnZS4gIFRoZXJlIGFyZSBsaW1pdGF0aW9ucwpAQCAtNDMyNiw3ICs0NDgwLDcgQEAKICAgICAgKiBzaG91bGQgaGF2ZSB0aGUge0BsaW5rIGFuZHJvaWQuTWFuaWZlc3QucGVybWlzc2lvbiNHRVRfUEFDS0FHRV9TSVpFfSBwZXJtaXNzaW9uLgogICAgICAqCiAgICAgICogQHBhcmFtIHBhY2thZ2VOYW1lIFRoZSBuYW1lIG9mIHRoZSBwYWNrYWdlIHdob3NlIHNpemUgaW5mb3JtYXRpb24gaXMgdG8gYmUgcmV0cmlldmVkCi0gICAgICogQHBhcmFtIHVzZXJIYW5kbGUgVGhlIHVzZXIgd2hvc2Ugc2l6ZSBpbmZvcm1hdGlvbiBzaG91bGQgYmUgcmV0cmlldmVkLgorICAgICAqIEBwYXJhbSB1c2VySWQgVGhlIHVzZXIgd2hvc2Ugc2l6ZSBpbmZvcm1hdGlvbiBzaG91bGQgYmUgcmV0cmlldmVkLgogICAgICAqIEBwYXJhbSBvYnNlcnZlciBBbiBvYnNlcnZlciBjYWxsYmFjayB0byBnZXQgbm90aWZpZWQgd2hlbiB0aGUgb3BlcmF0aW9uCiAgICAgICogaXMgY29tcGxldGUuCiAgICAgICoge0BsaW5rIGFuZHJvaWQuY29udGVudC5wbS5JUGFja2FnZVN0YXRzT2JzZXJ2ZXIjb25HZXRTdGF0c0NvbXBsZXRlZChQYWNrYWdlU3RhdHMsIGJvb2xlYW4pfQpAQCAtNDMzNywxNyArNDQ5MSwxNyBAQAogICAgICAqCiAgICAgICogQGhpZGUKICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBnZXRQYWNrYWdlU2l6ZUluZm8oU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgdXNlckhhbmRsZSwKKyAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBnZXRQYWNrYWdlU2l6ZUluZm9Bc1VzZXIoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgdXNlcklkLAogICAgICAgICAgICAgSVBhY2thZ2VTdGF0c09ic2VydmVyIG9ic2VydmVyKTsKIAogICAgIC8qKgotICAgICAqIExpa2Uge0BsaW5rICNnZXRQYWNrYWdlU2l6ZUluZm8oU3RyaW5nLCBpbnQsIElQYWNrYWdlU3RhdHNPYnNlcnZlcil9LCBidXQKKyAgICAgKiBMaWtlIHtAbGluayAjZ2V0UGFja2FnZVNpemVJbmZvQXNVc2VyKFN0cmluZywgaW50LCBJUGFja2FnZVN0YXRzT2JzZXJ2ZXIpfSwgYnV0CiAgICAgICogcmV0dXJucyB0aGUgc2l6ZSBmb3IgdGhlIGNhbGxpbmcgdXNlci4KICAgICAgKgogICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZ2V0UGFja2FnZVNpemVJbmZvKFN0cmluZyBwYWNrYWdlTmFtZSwgSVBhY2thZ2VTdGF0c09ic2VydmVyIG9ic2VydmVyKSB7Ci0gICAgICAgIGdldFBhY2thZ2VTaXplSW5mbyhwYWNrYWdlTmFtZSwgVXNlckhhbmRsZS5teVVzZXJJZCgpLCBvYnNlcnZlcik7CisgICAgICAgIGdldFBhY2thZ2VTaXplSW5mb0FzVXNlcihwYWNrYWdlTmFtZSwgVXNlckhhbmRsZS5teVVzZXJJZCgpLCBvYnNlcnZlcik7CiAgICAgfQogCiAgICAgLyoqCkBAIC00Mzk1LDcgKzQ1NDksNyBAQAogICAgICAqIEBzZWUgI0dFVF9TRVJWSUNFUwogICAgICAqIEBzZWUgI0dFVF9TSUdOQVRVUkVTCiAgICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IExpc3Q8UGFja2FnZUluZm8+IGdldFByZWZlcnJlZFBhY2thZ2VzKGludCBmbGFncyk7CisgICAgcHVibGljIGFic3RyYWN0IExpc3Q8UGFja2FnZUluZm8+IGdldFByZWZlcnJlZFBhY2thZ2VzKEBQYWNrYWdlSW5mb0ZsYWdzIGludCBmbGFncyk7CiAKICAgICAvKioKICAgICAgKiBAZGVwcmVjYXRlZCBUaGlzIGlzIGEgcHJvdGVjdGVkIEFQSSB0aGF0IHNob3VsZCBub3QgaGF2ZSBiZWVuIGF2YWlsYWJsZQpAQCAtNDQyNiw3ICs0NTgwLDcgQEAKICAgICAgICAgICAgIHRvLgogICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgYWRkUHJlZmVycmVkQWN0aXZpdHkoSW50ZW50RmlsdGVyIGZpbHRlciwgaW50IG1hdGNoLAorICAgIHB1YmxpYyB2b2lkIGFkZFByZWZlcnJlZEFjdGl2aXR5QXNVc2VyKEludGVudEZpbHRlciBmaWx0ZXIsIGludCBtYXRjaCwKICAgICAgICAgICAgIENvbXBvbmVudE5hbWVbXSBzZXQsIENvbXBvbmVudE5hbWUgYWN0aXZpdHksIGludCB1c2VySWQpIHsKICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIk5vdCBpbXBsZW1lbnRlZC4gTXVzdCBvdmVycmlkZSBpbiBhIHN1YmNsYXNzLiIpOwogICAgIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcG0vUGFja2FnZVBhcnNlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9wbS9QYWNrYWdlUGFyc2VyLmphdmEKaW5kZXggZjQ0NWNmOC4uMjM2Y2Y2NGEgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcG0vUGFja2FnZVBhcnNlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcG0vUGFja2FnZVBhcnNlci5qYXZhCkBAIC0xMDMyLDMxICsxMDMyLDYgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBHYXRoZXJzIHRoZSB7QGxpbmsgTWFuaWZlc3REaWdlc3R9IGZvciB7QGNvZGUgcGtnfSBpZiBpdCBleGlzdHMgaW4gdGhlCi0gICAgICogQVBLLiBJZiBpdCBzdWNjZXNzZnVsbHkgc2Nhbm5lZCB0aGUgcGFja2FnZSBhbmQgZm91bmQgdGhlCi0gICAgICoge0Bjb2RlIEFuZHJvaWRNYW5pZmVzdC54bWx9LCB7QGNvZGUgdHJ1ZX0gaXMgcmV0dXJuZWQuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgY29sbGVjdE1hbmlmZXN0RGlnZXN0KFBhY2thZ2UgcGtnKSB0aHJvd3MgUGFja2FnZVBhcnNlckV4Y2VwdGlvbiB7Ci0gICAgICAgIHBrZy5tYW5pZmVzdERpZ2VzdCA9IG51bGw7Ci0KLSAgICAgICAgLy8gVE9ETzogZXh0ZW5kIHRvIGdhdGhlciBkaWdlc3QgZm9yIHNwbGl0IEFQS3MKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGZpbmFsIFN0cmljdEphckZpbGUgamFyRmlsZSA9IG5ldyBTdHJpY3RKYXJGaWxlKHBrZy5iYXNlQ29kZVBhdGgpOwotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBmaW5hbCBaaXBFbnRyeSBqZSA9IGphckZpbGUuZmluZEVudHJ5KEFORFJPSURfTUFOSUZFU1RfRklMRU5BTUUpOwotICAgICAgICAgICAgICAgIGlmIChqZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBrZy5tYW5pZmVzdERpZ2VzdCA9IE1hbmlmZXN0RGlnZXN0LmZyb21JbnB1dFN0cmVhbShqYXJGaWxlLmdldElucHV0U3RyZWFtKGplKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgICAgICBqYXJGaWxlLmNsb3NlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIHwgUnVudGltZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUGFja2FnZVBhcnNlckV4Y2VwdGlvbihJTlNUQUxMX1BBUlNFX0ZBSUxFRF9NQU5JRkVTVF9NQUxGT1JNRUQsCi0gICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gY29sbGVjdCBtYW5pZmVzdCBkaWdlc3QiKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgogICAgICAqIENvbGxlY3QgY2VydGlmaWNhdGVzIGZyb20gYWxsIHRoZSBBUEtzIGRlc2NyaWJlZCBpbiB0aGUgZ2l2ZW4gcGFja2FnZSwKICAgICAgKiBwb3B1bGF0aW5nIHtAbGluayBQYWNrYWdlI21TaWduYXR1cmVzfS4gQWxzbyBhc3NlcnRzIHRoYXQgYWxsIEFQSwogICAgICAqIGNvbnRlbnRzIGFyZSBzaWduZWQgY29ycmVjdGx5IGFuZCBjb25zaXN0ZW50bHkuCkBAIC0zMjIzLDEyICszMTk4LDE5IEBACiAgICAgICAgICAgICAgICAgYS5pbmZvLmZsYWdzIHw9IEFjdGl2aXR5SW5mby5GTEFHX1JFU1VNRV9XSElMRV9QQVVTSU5HOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBhLmluZm8ucmVzaXplYWJsZSA9IHNhLmdldEJvb2xlYW4oCi0gICAgICAgICAgICAgICAgICAgIFIuc3R5bGVhYmxlLkFuZHJvaWRNYW5pZmVzdEFjdGl2aXR5X3Jlc2l6ZWFibGVBY3Rpdml0eSwKLSAgICAgICAgICAgICAgICAgICAgb3duZXIuYXBwbGljYXRpb25JbmZvLnRhcmdldFNka1ZlcnNpb24gPj0gQnVpbGQuVkVSU0lPTl9DT0RFUy5OKTsKKyAgICAgICAgICAgIGlmIChzYS5nZXRCb29sZWFuKFIuc3R5bGVhYmxlLkFuZHJvaWRNYW5pZmVzdEFjdGl2aXR5X3Jlc2l6ZWFibGVBY3Rpdml0eSwKKyAgICAgICAgICAgICAgICAgICAgb3duZXIuYXBwbGljYXRpb25JbmZvLnRhcmdldFNka1ZlcnNpb24gPj0gQnVpbGQuVkVSU0lPTl9DT0RFUy5OKSkgeworICAgICAgICAgICAgICAgIGEuaW5mby5mbGFncyB8PSBBY3Rpdml0eUluZm8uRkxBR19SRVNJWkVBQkxFOwogCi0gICAgICAgICAgICBhLmluZm8uc3VwcG9ydHNQaXAgPSBhLmluZm8ucmVzaXplYWJsZSA/IHNhLmdldEJvb2xlYW4oCi0gICAgICAgICAgICAgICAgICAgIFIuc3R5bGVhYmxlLkFuZHJvaWRNYW5pZmVzdEFjdGl2aXR5X3N1cHBvcnRzUGljdHVyZUluUGljdHVyZSwgZmFsc2UpIDogZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKHNhLmdldEJvb2xlYW4oUi5zdHlsZWFibGUuQW5kcm9pZE1hbmlmZXN0QWN0aXZpdHlfc3VwcG9ydHNQaWN0dXJlSW5QaWN0dXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UpKSB7CisgICAgICAgICAgICAgICAgICAgIGEuaW5mby5mbGFncyB8PSBBY3Rpdml0eUluZm8uRkxBR19TVVBQT1JUU19QSUNUVVJFX0lOX1BJQ1RVUkU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoc2EuZ2V0Qm9vbGVhbihSLnN0eWxlYWJsZS5BbmRyb2lkTWFuaWZlc3RBY3Rpdml0eV9hbHdheXNGb2N1c2FibGUsIGZhbHNlKSkgeworICAgICAgICAgICAgICAgIGEuaW5mby5mbGFncyB8PSBBY3Rpdml0eUluZm8uRkxBR19BTFdBWVNfRk9DVVNBQkxFOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBhLmluZm8uc2NyZWVuT3JpZW50YXRpb24gPSBzYS5nZXRJbnQoCiAgICAgICAgICAgICAgICAgICAgIFIuc3R5bGVhYmxlLkFuZHJvaWRNYW5pZmVzdEFjdGl2aXR5X3NjcmVlbk9yaWVudGF0aW9uLApAQCAtNDQ5MiwxMiArNDQ3NCw2IEBACiAgICAgICAgIC8qIFRoZSByZXF1aXJlZCBhY2NvdW50IHR5cGUgd2l0aG91dCB3aGljaCB0aGlzIGFwcGxpY2F0aW9uIHdpbGwgbm90IGZ1bmN0aW9uICovCiAgICAgICAgIHB1YmxpYyBTdHJpbmcgbVJlcXVpcmVkQWNjb3VudFR5cGU7CiAKLSAgICAgICAgLyoqCi0gICAgICAgICAqIERpZ2VzdCBzdWl0YWJsZSBmb3IgY29tcGFyaW5nIHdoZXRoZXIgdGhpcyBwYWNrYWdlJ3MgbWFuaWZlc3QgaXMgdGhlCi0gICAgICAgICAqIHNhbWUgYXMgYW5vdGhlci4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBNYW5pZmVzdERpZ2VzdCBtYW5pZmVzdERpZ2VzdDsKLQogICAgICAgICBwdWJsaWMgU3RyaW5nIG1PdmVybGF5VGFyZ2V0OwogICAgICAgICBwdWJsaWMgaW50IG1PdmVybGF5UHJpb3JpdHk7CiAgICAgICAgIHB1YmxpYyBib29sZWFuIG1UcnVzdGVkT3ZlcmxheTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcG0vUGFyY2VsZWRMaXN0U2xpY2UuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcG0vUGFyY2VsZWRMaXN0U2xpY2UuamF2YQppbmRleCBjZmI0NDczLi45NDU4NThlNiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9wbS9QYXJjZWxlZExpc3RTbGljZS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcG0vUGFyY2VsZWRMaXN0U2xpY2UuamF2YQpAQCAtMjQsNiArMjQsNyBAQAogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIAogLyoqCkBAIC01MCw2ICs1MSwxMCBAQAogCiAgICAgcHJpdmF0ZSBmaW5hbCBMaXN0PFQ+IG1MaXN0OwogCisgICAgcHVibGljIHN0YXRpYyA8VCBleHRlbmRzIFBhcmNlbGFibGU+IFBhcmNlbGVkTGlzdFNsaWNlPFQ+IGVtcHR5TGlzdCgpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQYXJjZWxlZExpc3RTbGljZTxUPihDb2xsZWN0aW9ucy48VD4gZW1wdHlMaXN0KCkpOworICAgIH0KKwogICAgIHB1YmxpYyBQYXJjZWxlZExpc3RTbGljZShMaXN0PFQ+IGxpc3QpIHsKICAgICAgICAgbUxpc3QgPSBsaXN0OwogICAgIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcG0vUmVnaXN0ZXJlZFNlcnZpY2VzQ2FjaGUuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcG0vUmVnaXN0ZXJlZFNlcnZpY2VzQ2FjaGUuamF2YQppbmRleCBhNDEzZjM2Li5iYjI4YmRlIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3BtL1JlZ2lzdGVyZWRTZXJ2aWNlc0NhY2hlLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9wbS9SZWdpc3RlcmVkU2VydmljZXNDYWNoZS5qYXZhCkBAIC0zNjUsNyArMzY1LDcgQEAKICAgICBwcm90ZWN0ZWQgTGlzdDxSZXNvbHZlSW5mbz4gcXVlcnlJbnRlbnRTZXJ2aWNlcyhpbnQgdXNlcklkKSB7CiAgICAgICAgIGZpbmFsIFBhY2thZ2VNYW5hZ2VyIHBtID0gbUNvbnRleHQuZ2V0UGFja2FnZU1hbmFnZXIoKTsKICAgICAgICAgcmV0dXJuIHBtLnF1ZXJ5SW50ZW50U2VydmljZXNBc1VzZXIobmV3IEludGVudChtSW50ZXJmYWNlTmFtZSksCi0gICAgICAgICAgICAgICAgUGFja2FnZU1hbmFnZXIuR0VUX01FVEFfREFUQSB8IFBhY2thZ2VNYW5hZ2VyLkdFVF9FTkNSWVBUSU9OX1VOQVdBUkVfQ09NUE9ORU5UUywKKyAgICAgICAgICAgICAgICBQYWNrYWdlTWFuYWdlci5HRVRfTUVUQV9EQVRBIHwgUGFja2FnZU1hbmFnZXIuTUFUQ0hfRU5DUllQVElPTl9BV0FSRV9BTkRfVU5BV0FSRSwKICAgICAgICAgICAgICAgICB1c2VySWQpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9wbS9SZXNvbHZlSW5mby5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9wbS9SZXNvbHZlSW5mby5qYXZhCmluZGV4IGQ1ZDMwMDcuLmM5YmU2ZWQgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcG0vUmVzb2x2ZUluZm8uamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3BtL1Jlc29sdmVJbmZvLmphdmEKQEAgLTE3Miw3ICsxNzIsOCBAQAogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGhhbmRsZUFsbFdlYkRhdGFVUkk7CiAKLSAgICBwcml2YXRlIENvbXBvbmVudEluZm8gZ2V0Q29tcG9uZW50SW5mbygpIHsKKyAgICAvKioge0BoaWRlfSAqLworICAgIHB1YmxpYyBDb21wb25lbnRJbmZvIGdldENvbXBvbmVudEluZm8oKSB7CiAgICAgICAgIGlmIChhY3Rpdml0eUluZm8gIT0gbnVsbCkgcmV0dXJuIGFjdGl2aXR5SW5mbzsKICAgICAgICAgaWYgKHNlcnZpY2VJbmZvICE9IG51bGwpIHJldHVybiBzZXJ2aWNlSW5mbzsKICAgICAgICAgaWYgKHByb3ZpZGVySW5mbyAhPSBudWxsKSByZXR1cm4gcHJvdmlkZXJJbmZvOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9wbS9WZXJpZmljYXRpb25QYXJhbXMuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcG0vVmVyaWZpY2F0aW9uUGFyYW1zLmphdmEKaW5kZXggZTUxMTliNi4uZjkwZDI5NSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9wbS9WZXJpZmljYXRpb25QYXJhbXMuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3BtL1ZlcmlmaWNhdGlvblBhcmFtcy5qYXZhCkBAIC0xNiw3ICsxNiw2IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5jb250ZW50LnBtOwogCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLk1hbmlmZXN0RGlnZXN0OwogaW1wb3J0IGFuZHJvaWQubmV0LlVyaTsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbDsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbGFibGU7CkBAIC01MSwxMiArNTAsNiBAQAogICAgIHByaXZhdGUgaW50IG1JbnN0YWxsZXJVaWQ7CiAKICAgICAvKioKLSAgICAgKiBBbiBvYmplY3QgdGhhdCBob2xkcyB0aGUgZGlnZXN0IG9mIHRoZSBwYWNrYWdlIHdoaWNoIGNhbiBiZSB1c2VkIHRvCi0gICAgICogdmVyaWZ5IG93bmVyc2hpcC4KLSAgICAgKi8KLSAgICBwcml2YXRlIGZpbmFsIE1hbmlmZXN0RGlnZXN0IG1NYW5pZmVzdERpZ2VzdDsKLQotICAgIC8qKgogICAgICAqIENyZWF0ZXMgdmVyaWZpY2F0aW9uIHNwZWNpZmljYXRpb25zIGZvciBpbnN0YWxsaW5nIHdpdGggYXBwbGljYXRpb24gdmVyaWZpY2F0aW9uLgogICAgICAqCiAgICAgICogQHBhcmFtIHZlcmlmaWNhdGlvblVSSSBUaGUgbG9jYXRpb24gb2YgdGhlIHN1cHBsZW1lbnRhcnkgdmVyaWZpY2F0aW9uCkBAIC02NywxNiArNjAsMTMgQEAKICAgICAgKiAgICAgICAgICAgIE1heSBiZSB7QGNvZGUgbnVsbH0uCiAgICAgICogQHBhcmFtIG9yaWdpbmF0aW5nVWlkIFVJRCBvZiB0aGUgYXBwbGljYXRpb24gdGhhdCB0aGUgaW5zdGFsbCByZXF1ZXN0IG9yaWdpbmF0ZWQKICAgICAgKiAgICAgICAgICAgIGZyb20sIG9yIE5PX1VJRCBpZiBub3QgcHJlc2VudAotICAgICAqIEBwYXJhbSBtYW5pZmVzdERpZ2VzdCBhbiBvYmplY3QgdGhhdCBob2xkcyB0aGUgZGlnZXN0IG9mIHRoZSBwYWNrYWdlCi0gICAgICogICAgICAgICAgICB3aGljaCBjYW4gYmUgdXNlZCB0byB2ZXJpZnkgb3duZXJzaGlwLiBNYXkgYmUge0Bjb2RlIG51bGx9LgogICAgICAqLwogICAgIHB1YmxpYyBWZXJpZmljYXRpb25QYXJhbXMoVXJpIHZlcmlmaWNhdGlvblVSSSwgVXJpIG9yaWdpbmF0aW5nVVJJLCBVcmkgcmVmZXJyZXIsCi0gICAgICAgICAgICBpbnQgb3JpZ2luYXRpbmdVaWQsIE1hbmlmZXN0RGlnZXN0IG1hbmlmZXN0RGlnZXN0KSB7CisgICAgICAgICAgICBpbnQgb3JpZ2luYXRpbmdVaWQpIHsKICAgICAgICAgbVZlcmlmaWNhdGlvblVSSSA9IHZlcmlmaWNhdGlvblVSSTsKICAgICAgICAgbU9yaWdpbmF0aW5nVVJJID0gb3JpZ2luYXRpbmdVUkk7CiAgICAgICAgIG1SZWZlcnJlciA9IHJlZmVycmVyOwogICAgICAgICBtT3JpZ2luYXRpbmdVaWQgPSBvcmlnaW5hdGluZ1VpZDsKLSAgICAgICAgbU1hbmlmZXN0RGlnZXN0ID0gbWFuaWZlc3REaWdlc3Q7CiAgICAgICAgIG1JbnN0YWxsZXJVaWQgPSBOT19VSUQ7CiAgICAgfQogCkBAIC05NywxMCArODcsNiBAQAogICAgICAgICByZXR1cm4gbU9yaWdpbmF0aW5nVWlkOwogICAgIH0KIAotICAgIHB1YmxpYyBNYW5pZmVzdERpZ2VzdCBnZXRNYW5pZmVzdERpZ2VzdCgpIHsKLSAgICAgICAgcmV0dXJuIG1NYW5pZmVzdERpZ2VzdDsKLSAgICB9Ci0KICAgICAvKiogQHJldHVybiBOT19VSUQgd2hlbiBub3Qgc2V0ICovCiAgICAgcHVibGljIGludCBnZXRJbnN0YWxsZXJVaWQoKSB7CiAgICAgICAgIHJldHVybiBtSW5zdGFsbGVyVWlkOwpAQCAtMTU1LDE0ICsxNDEsNiBAQAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1NYW5pZmVzdERpZ2VzdCA9PSBudWxsKSB7Ci0gICAgICAgICAgICBpZiAob3RoZXIubU1hbmlmZXN0RGlnZXN0ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoIW1NYW5pZmVzdERpZ2VzdC5lcXVhbHMob3RoZXIubU1hbmlmZXN0RGlnZXN0KSkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KICAgICAgICAgaWYgKG1JbnN0YWxsZXJVaWQgIT0gb3RoZXIubUluc3RhbGxlclVpZCkgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC0xNzgsOCArMTU2LDcgQEAKICAgICAgICAgaGFzaCArPSA3ICogKG1PcmlnaW5hdGluZ1VSSSA9PSBudWxsID8gMSA6IG1PcmlnaW5hdGluZ1VSSS5oYXNoQ29kZSgpKTsKICAgICAgICAgaGFzaCArPSAxMSAqIChtUmVmZXJyZXIgPT0gbnVsbCA/IDEgOiBtUmVmZXJyZXIuaGFzaENvZGUoKSk7CiAgICAgICAgIGhhc2ggKz0gMTMgKiBtT3JpZ2luYXRpbmdVaWQ7Ci0gICAgICAgIGhhc2ggKz0gMTcgKiAobU1hbmlmZXN0RGlnZXN0ID09IG51bGwgPyAxIDogbU1hbmlmZXN0RGlnZXN0Lmhhc2hDb2RlKCkpOwotICAgICAgICBoYXNoICs9IDE5ICogbUluc3RhbGxlclVpZDsKKyAgICAgICAgaGFzaCArPSAxNyAqIG1JbnN0YWxsZXJVaWQ7CiAKICAgICAgICAgcmV0dXJuIGhhc2g7CiAgICAgfQpAQCAtMTk2LDggKzE3Myw2IEBACiAgICAgICAgIHNiLmFwcGVuZChtUmVmZXJyZXIudG9TdHJpbmcoKSk7CiAgICAgICAgIHNiLmFwcGVuZCgiLG1PcmlnaW5hdGluZ1VpZD0iKTsKICAgICAgICAgc2IuYXBwZW5kKG1PcmlnaW5hdGluZ1VpZCk7Ci0gICAgICAgIHNiLmFwcGVuZCgiLG1NYW5pZmVzdERpZ2VzdD0iKTsKLSAgICAgICAgc2IuYXBwZW5kKG1NYW5pZmVzdERpZ2VzdC50b1N0cmluZygpKTsKICAgICAgICAgc2IuYXBwZW5kKCIsbUluc3RhbGxlclVpZD0iKTsKICAgICAgICAgc2IuYXBwZW5kKG1JbnN0YWxsZXJVaWQpOwogICAgICAgICBzYi5hcHBlbmQoJ30nKTsKQEAgLTIxMSw3ICsxODYsNiBAQAogICAgICAgICBkZXN0LndyaXRlUGFyY2VsYWJsZShtT3JpZ2luYXRpbmdVUkksIDApOwogICAgICAgICBkZXN0LndyaXRlUGFyY2VsYWJsZShtUmVmZXJyZXIsIDApOwogICAgICAgICBkZXN0LndyaXRlSW50KG1PcmlnaW5hdGluZ1VpZCk7Ci0gICAgICAgIGRlc3Qud3JpdGVQYXJjZWxhYmxlKG1NYW5pZmVzdERpZ2VzdCwgMCk7CiAgICAgICAgIGRlc3Qud3JpdGVJbnQobUluc3RhbGxlclVpZCk7CiAgICAgfQogCkBAIC0yMjEsNyArMTk1LDYgQEAKICAgICAgICAgbU9yaWdpbmF0aW5nVVJJID0gc291cmNlLnJlYWRQYXJjZWxhYmxlKFVyaS5jbGFzcy5nZXRDbGFzc0xvYWRlcigpKTsKICAgICAgICAgbVJlZmVycmVyID0gc291cmNlLnJlYWRQYXJjZWxhYmxlKFVyaS5jbGFzcy5nZXRDbGFzc0xvYWRlcigpKTsKICAgICAgICAgbU9yaWdpbmF0aW5nVWlkID0gc291cmNlLnJlYWRJbnQoKTsKLSAgICAgICAgbU1hbmlmZXN0RGlnZXN0ID0gc291cmNlLnJlYWRQYXJjZWxhYmxlKE1hbmlmZXN0RGlnZXN0LmNsYXNzLmdldENsYXNzTG9hZGVyKCkpOwogICAgICAgICBtSW5zdGFsbGVyVWlkID0gc291cmNlLnJlYWRJbnQoKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcmVzL0Fzc2V0TWFuYWdlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9yZXMvQXNzZXRNYW5hZ2VyLmphdmEKaW5kZXggNzY2OTA1My4uN2IwYjk4ZCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9yZXMvQXNzZXRNYW5hZ2VyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9yZXMvQXNzZXRNYW5hZ2VyLmphdmEKQEAgLTE2LDYgKzE2LDExIEBACiAKIHBhY2thZ2UgYW5kcm9pZC5jb250ZW50LnJlczsKIAoraW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5BbnlSZXM7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLkFycmF5UmVzOworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5Ob25OdWxsOworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uU3RyaW5nUmVzOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsRmlsZURlc2NyaXB0b3I7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU3BhcnNlQXJyYXk7CkBAIC0xNDIsODAgKzE0Nyw5NSBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIFJldHJpZXZlIHRoZSBzdHJpbmcgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxhciByZXNvdXJjZQotICAgICAqIGlkZW50aWZpZXIgZm9yIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gLyBza2luLgorICAgICAqIFJldHJpZXZlcyB0aGUgc3RyaW5nIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIgcmVzb3VyY2UKKyAgICAgKiBpZGVudGlmaWVyIGZvciB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtIHJlc0lkIHRoZSByZXNvdXJjZSBpZGVudGlmaWVyIHRvIGxvYWQKKyAgICAgKiBAcmV0dXJuIHRoZSBzdHJpbmcgdmFsdWUsIG9yIHtAY29kZSBudWxsfQogICAgICAqLwotICAgIC8qcGFja2FnZSovIGZpbmFsIENoYXJTZXF1ZW5jZSBnZXRSZXNvdXJjZVRleHQoaW50IGlkZW50KSB7CisgICAgQE51bGxhYmxlCisgICAgZmluYWwgQ2hhclNlcXVlbmNlIGdldFJlc291cmNlVGV4dChAU3RyaW5nUmVzIGludCByZXNJZCkgewogICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKLSAgICAgICAgICAgIFR5cGVkVmFsdWUgdG1wVmFsdWUgPSBtVmFsdWU7Ci0gICAgICAgICAgICBpbnQgYmxvY2sgPSBsb2FkUmVzb3VyY2VWYWx1ZShpZGVudCwgKHNob3J0KSAwLCB0bXBWYWx1ZSwgdHJ1ZSk7Ci0gICAgICAgICAgICBpZiAoYmxvY2sgPj0gMCkgewotICAgICAgICAgICAgICAgIGlmICh0bXBWYWx1ZS50eXBlID09IFR5cGVkVmFsdWUuVFlQRV9TVFJJTkcpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1TdHJpbmdCbG9ja3NbYmxvY2tdLmdldCh0bXBWYWx1ZS5kYXRhKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRtcFZhbHVlLmNvZXJjZVRvU3RyaW5nKCk7CisgICAgICAgICAgICBmaW5hbCBUeXBlZFZhbHVlIG91dFZhbHVlID0gbVZhbHVlOworICAgICAgICAgICAgaWYgKGdldFJlc291cmNlVmFsdWUocmVzSWQsIDAsIG91dFZhbHVlLCB0cnVlKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBvdXRWYWx1ZS5jb2VyY2VUb1N0cmluZygpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogUmV0cmlldmUgdGhlIHN0cmluZyB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFyIHJlc291cmNlCi0gICAgICogaWRlbnRpZmllciBmb3IgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiAvIHNraW4uCisgICAgICogUmV0cmlldmVzIHRoZSBzdHJpbmcgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxhciByZXNvdXJjZQorICAgICAqIGlkZW50aWZpZXIgZm9yIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uCisgICAgICoKKyAgICAgKiBAcGFyYW0gcmVzSWQgdGhlIHJlc291cmNlIGlkZW50aWZpZXIgdG8gbG9hZAorICAgICAqIEBwYXJhbSBiYWdFbnRyeUlkCisgICAgICogQHJldHVybiB0aGUgc3RyaW5nIHZhbHVlLCBvciB7QGNvZGUgbnVsbH0KICAgICAgKi8KLSAgICAvKnBhY2thZ2UqLyBmaW5hbCBDaGFyU2VxdWVuY2UgZ2V0UmVzb3VyY2VCYWdUZXh0KGludCBpZGVudCwgaW50IGJhZ0VudHJ5SWQpIHsKKyAgICBATnVsbGFibGUKKyAgICBmaW5hbCBDaGFyU2VxdWVuY2UgZ2V0UmVzb3VyY2VCYWdUZXh0KEBTdHJpbmdSZXMgaW50IHJlc0lkLCBpbnQgYmFnRW50cnlJZCkgewogICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKLSAgICAgICAgICAgIFR5cGVkVmFsdWUgdG1wVmFsdWUgPSBtVmFsdWU7Ci0gICAgICAgICAgICBpbnQgYmxvY2sgPSBsb2FkUmVzb3VyY2VCYWdWYWx1ZShpZGVudCwgYmFnRW50cnlJZCwgdG1wVmFsdWUsIHRydWUpOwotICAgICAgICAgICAgaWYgKGJsb2NrID49IDApIHsKLSAgICAgICAgICAgICAgICBpZiAodG1wVmFsdWUudHlwZSA9PSBUeXBlZFZhbHVlLlRZUEVfU1RSSU5HKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBtU3RyaW5nQmxvY2tzW2Jsb2NrXS5nZXQodG1wVmFsdWUuZGF0YSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiB0bXBWYWx1ZS5jb2VyY2VUb1N0cmluZygpOworICAgICAgICAgICAgZmluYWwgVHlwZWRWYWx1ZSBvdXRWYWx1ZSA9IG1WYWx1ZTsKKyAgICAgICAgICAgIGZpbmFsIGludCBibG9jayA9IGxvYWRSZXNvdXJjZUJhZ1ZhbHVlKHJlc0lkLCBiYWdFbnRyeUlkLCBvdXRWYWx1ZSwgdHJ1ZSk7CisgICAgICAgICAgICBpZiAoYmxvY2sgPCAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAob3V0VmFsdWUudHlwZSA9PSBUeXBlZFZhbHVlLlRZUEVfU1RSSU5HKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1TdHJpbmdCbG9ja3NbYmxvY2tdLmdldChvdXRWYWx1ZS5kYXRhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBvdXRWYWx1ZS5jb2VyY2VUb1N0cmluZygpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBudWxsOwogICAgIH0KIAogICAgIC8qKgotICAgICAqIFJldHJpZXZlIHRoZSBzdHJpbmcgYXJyYXkgYXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxhciByZXNvdXJjZQotICAgICAqIGlkZW50aWZpZXIuCi0gICAgICogQHBhcmFtIGlkIFJlc291cmNlIGlkIG9mIHRoZSBzdHJpbmcgYXJyYXkKKyAgICAgKiBSZXRyaWV2ZXMgdGhlIHN0cmluZyBhcnJheSBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFyIHJlc291cmNlCisgICAgICogaWRlbnRpZmllciBmb3IgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4KKyAgICAgKgorICAgICAqIEBwYXJhbSByZXNJZCB0aGUgcmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgc3RyaW5nIGFycmF5CisgICAgICogQHJldHVybiB0aGUgc3RyaW5nIGFycmF5LCBvciB7QGNvZGUgbnVsbH0KICAgICAgKi8KLSAgICAvKnBhY2thZ2UqLyBmaW5hbCBTdHJpbmdbXSBnZXRSZXNvdXJjZVN0cmluZ0FycmF5KGZpbmFsIGludCBpZCkgewotICAgICAgICBTdHJpbmdbXSByZXRBcnJheSA9IGdldEFycmF5U3RyaW5nUmVzb3VyY2UoaWQpOwotICAgICAgICByZXR1cm4gcmV0QXJyYXk7CisgICAgQE51bGxhYmxlCisgICAgZmluYWwgU3RyaW5nW10gZ2V0UmVzb3VyY2VTdHJpbmdBcnJheShAQXJyYXlSZXMgaW50IHJlc0lkKSB7CisgICAgICAgIHJldHVybiBnZXRBcnJheVN0cmluZ1Jlc291cmNlKHJlc0lkKTsKICAgICB9CiAKLQotICAgIC8qcGFja2FnZSovIGZpbmFsIGJvb2xlYW4gZ2V0UmVzb3VyY2VWYWx1ZShpbnQgaWRlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZW5zaXR5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlZFZhbHVlIG91dFZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIHJlc29sdmVSZWZzKQotICAgIHsKLSAgICAgICAgaW50IGJsb2NrID0gbG9hZFJlc291cmNlVmFsdWUoaWRlbnQsIChzaG9ydCkgZGVuc2l0eSwgb3V0VmFsdWUsIHJlc29sdmVSZWZzKTsKLSAgICAgICAgaWYgKGJsb2NrID49IDApIHsKLSAgICAgICAgICAgIGlmIChvdXRWYWx1ZS50eXBlICE9IFR5cGVkVmFsdWUuVFlQRV9TVFJJTkcpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KKyAgICAvKioKKyAgICAgKiBQb3B1bGF0ZXMge0Bjb2RlIG91dFZhbHVlfSB3aXRoIHRoZSBkYXRhIGFzc29jaWF0ZWQgYSBwYXJ0aWN1bGFyCisgICAgICogcmVzb3VyY2UgaWRlbnRpZmllciBmb3IgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4KKyAgICAgKgorICAgICAqIEBwYXJhbSByZXNJZCB0aGUgcmVzb3VyY2UgaWRlbnRpZmllciB0byBsb2FkCisgICAgICogQHBhcmFtIGRlbnNpdHlEcGkgdGhlIGRlbnNpdHkgYnVja2V0IGZvciB3aGljaCB0byBsb2FkIHRoZSByZXNvdXJjZQorICAgICAqIEBwYXJhbSBvdXRWYWx1ZSB0aGUgdHlwZWQgdmFsdWUgaW4gd2hpY2ggdG8gcHV0IHRoZSBkYXRhCisgICAgICogQHBhcmFtIHJlc29sdmVSZWZzIHtAY29kZSB0cnVlfSB0byByZXNvbHZlIHJlZmVyZW5jZXMsIHtAY29kZSBmYWxzZX0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgdG8gbGVhdmUgdGhlbSB1bnJlc29sdmVkCisgICAgICogQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgdGhlIGRhdGEgd2FzIGxvYWRlZCBpbnRvIHtAY29kZSBvdXRWYWx1ZX0sCisgICAgICogICAgICAgICB7QGNvZGUgZmFsc2V9IG90aGVyd2lzZQorICAgICAqLworICAgIGZpbmFsIGJvb2xlYW4gZ2V0UmVzb3VyY2VWYWx1ZShAQW55UmVzIGludCByZXNJZCwgaW50IGRlbnNpdHlEcGksIEBOb25OdWxsIFR5cGVkVmFsdWUgb3V0VmFsdWUsCisgICAgICAgICAgICBib29sZWFuIHJlc29sdmVSZWZzKSB7CisgICAgICAgIGZpbmFsIGludCBibG9jayA9IGxvYWRSZXNvdXJjZVZhbHVlKHJlc0lkLCAoc2hvcnQpIGRlbnNpdHlEcGksIG91dFZhbHVlLCByZXNvbHZlUmVmcyk7CisgICAgICAgIGlmIChibG9jayA8IDApIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAob3V0VmFsdWUudHlwZSA9PSBUeXBlZFZhbHVlLlRZUEVfU1RSSU5HKSB7CiAgICAgICAgICAgICBvdXRWYWx1ZS5zdHJpbmcgPSBtU3RyaW5nQmxvY2tzW2Jsb2NrXS5nZXQob3V0VmFsdWUuZGF0YSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIC8qKgogICAgICAqIFJldHJpZXZlIHRoZSB0ZXh0IGFycmF5IGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIgcmVzb3VyY2UKICAgICAgKiBpZGVudGlmaWVyLgotICAgICAqIEBwYXJhbSBpZCBSZXNvdXJjZSBpZCBvZiB0aGUgc3RyaW5nIGFycmF5CisgICAgICoKKyAgICAgKiBAcGFyYW0gcmVzSWQgdGhlIHJlc291cmNlIGlkIG9mIHRoZSBzdHJpbmcgYXJyYXkKICAgICAgKi8KLSAgICAvKnBhY2thZ2UqLyBmaW5hbCBDaGFyU2VxdWVuY2VbXSBnZXRSZXNvdXJjZVRleHRBcnJheShmaW5hbCBpbnQgaWQpIHsKLSAgICAgICAgaW50W10gcmF3SW5mb0FycmF5ID0gZ2V0QXJyYXlTdHJpbmdJbmZvKGlkKTsKLSAgICAgICAgaW50IHJhd0luZm9BcnJheUxlbiA9IHJhd0luZm9BcnJheS5sZW5ndGg7CisgICAgZmluYWwgQ2hhclNlcXVlbmNlW10gZ2V0UmVzb3VyY2VUZXh0QXJyYXkoQEFycmF5UmVzIGludCByZXNJZCkgeworICAgICAgICBmaW5hbCBpbnRbXSByYXdJbmZvQXJyYXkgPSBnZXRBcnJheVN0cmluZ0luZm8ocmVzSWQpOworICAgICAgICBmaW5hbCBpbnQgcmF3SW5mb0FycmF5TGVuID0gcmF3SW5mb0FycmF5Lmxlbmd0aDsKICAgICAgICAgZmluYWwgaW50IGluZm9BcnJheUxlbiA9IHJhd0luZm9BcnJheUxlbiAvIDI7CiAgICAgICAgIGludCBibG9jazsKICAgICAgICAgaW50IGluZGV4OwotICAgICAgICBDaGFyU2VxdWVuY2VbXSByZXRBcnJheSA9IG5ldyBDaGFyU2VxdWVuY2VbaW5mb0FycmF5TGVuXTsKKyAgICAgICAgZmluYWwgQ2hhclNlcXVlbmNlW10gcmV0QXJyYXkgPSBuZXcgQ2hhclNlcXVlbmNlW2luZm9BcnJheUxlbl07CiAgICAgICAgIGZvciAoaW50IGkgPSAwLCBqID0gMDsgaSA8IHJhd0luZm9BcnJheUxlbjsgaSA9IGkgKyAyLCBqKyspIHsKICAgICAgICAgICAgIGJsb2NrID0gcmF3SW5mb0FycmF5W2ldOwogICAgICAgICAgICAgaW5kZXggPSByYXdJbmZvQXJyYXlbaSArIDFdOwpAQCAtMjIzLDMyICsyNDMsNDUgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmV0QXJyYXk7CiAgICAgfQotICAgIAotICAgIC8qcGFja2FnZSovIGZpbmFsIGJvb2xlYW4gZ2V0VGhlbWVWYWx1ZShsb25nIHRoZW1lLCBpbnQgaWRlbnQsCi0gICAgICAgICAgICBUeXBlZFZhbHVlIG91dFZhbHVlLCBib29sZWFuIHJlc29sdmVSZWZzKSB7Ci0gICAgICAgIGludCBibG9jayA9IGxvYWRUaGVtZUF0dHJpYnV0ZVZhbHVlKHRoZW1lLCBpZGVudCwgb3V0VmFsdWUsIHJlc29sdmVSZWZzKTsKLSAgICAgICAgaWYgKGJsb2NrID49IDApIHsKLSAgICAgICAgICAgIGlmIChvdXRWYWx1ZS50eXBlICE9IFR5cGVkVmFsdWUuVFlQRV9TVFJJTkcpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0cmluZ0Jsb2NrW10gYmxvY2tzID0gbVN0cmluZ0Jsb2NrczsKLSAgICAgICAgICAgIGlmIChibG9ja3MgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGVuc3VyZVN0cmluZ0Jsb2NrcygpOwotICAgICAgICAgICAgICAgIGJsb2NrcyA9IG1TdHJpbmdCbG9ja3M7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBvdXRWYWx1ZS5zdHJpbmcgPSBibG9ja3NbYmxvY2tdLmdldChvdXRWYWx1ZS5kYXRhKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLyoqCisgICAgICogUG9wdWxhdGVzIHtAY29kZSBvdXRWYWx1ZX0gd2l0aCB0aGUgZGF0YSBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFyCisgICAgICogcmVzb3VyY2UgaWRlbnRpZmllciBmb3IgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4gUmVzb2x2ZXMgdGhlbWUKKyAgICAgKiBhdHRyaWJ1dGVzIGFnYWluc3QgdGhlIHNwZWNpZmllZCB0aGVtZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSB0aGVtZSB0aGUgbmF0aXZlIHBvaW50ZXIgb2YgdGhlIHRoZW1lCisgICAgICogQHBhcmFtIHJlc0lkIHRoZSByZXNvdXJjZSBpZGVudGlmaWVyIHRvIGxvYWQKKyAgICAgKiBAcGFyYW0gb3V0VmFsdWUgdGhlIHR5cGVkIHZhbHVlIGluIHdoaWNoIHRvIHB1dCB0aGUgZGF0YQorICAgICAqIEBwYXJhbSByZXNvbHZlUmVmcyB7QGNvZGUgdHJ1ZX0gdG8gcmVzb2x2ZSByZWZlcmVuY2VzLCB7QGNvZGUgZmFsc2V9CisgICAgICogICAgICAgICAgICAgICAgICAgIHRvIGxlYXZlIHRoZW0gdW5yZXNvbHZlZAorICAgICAqIEByZXR1cm4ge0Bjb2RlIHRydWV9IGlmIHRoZSBkYXRhIHdhcyBsb2FkZWQgaW50byB7QGNvZGUgb3V0VmFsdWV9LAorICAgICAqICAgICAgICAge0Bjb2RlIGZhbHNlfSBvdGhlcndpc2UKKyAgICAgKi8KKyAgICBmaW5hbCBib29sZWFuIGdldFRoZW1lVmFsdWUobG9uZyB0aGVtZSwgQEFueVJlcyBpbnQgcmVzSWQsIEBOb25OdWxsIFR5cGVkVmFsdWUgb3V0VmFsdWUsCisgICAgICAgICAgICBib29sZWFuIHJlc29sdmVSZWZzKSB7CisgICAgICAgIGZpbmFsIGludCBibG9jayA9IGxvYWRUaGVtZUF0dHJpYnV0ZVZhbHVlKHRoZW1lLCByZXNJZCwgb3V0VmFsdWUsIHJlc29sdmVSZWZzKTsKKyAgICAgICAgaWYgKGJsb2NrIDwgMCkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG91dFZhbHVlLnR5cGUgPT0gVHlwZWRWYWx1ZS5UWVBFX1NUUklORykgeworICAgICAgICAgICAgZmluYWwgU3RyaW5nQmxvY2tbXSBibG9ja3MgPSBlbnN1cmVTdHJpbmdCbG9ja3MoKTsKKyAgICAgICAgICAgIG91dFZhbHVlLnN0cmluZyA9IGJsb2Nrc1tibG9ja10uZ2V0KG91dFZhbHVlLmRhdGEpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIC8qcGFja2FnZSovIGZpbmFsIHZvaWQgZW5zdXJlU3RyaW5nQmxvY2tzKCkgewotICAgICAgICBpZiAobVN0cmluZ0Jsb2NrcyA9PSBudWxsKSB7Ci0gICAgICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKLSAgICAgICAgICAgICAgICBpZiAobVN0cmluZ0Jsb2NrcyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1ha2VTdHJpbmdCbG9ja3Moc1N5c3RlbS5tU3RyaW5nQmxvY2tzKTsKLSAgICAgICAgICAgICAgICB9CisgICAgLyoqCisgICAgICogRW5zdXJlcyB0aGUgc3RyaW5nIGJsb2NrcyBhcmUgbG9hZGVkLgorICAgICAqCisgICAgICogQHJldHVybiB0aGUgc3RyaW5nIGJsb2NrcworICAgICAqLworICAgIEBOb25OdWxsCisgICAgZmluYWwgU3RyaW5nQmxvY2tbXSBlbnN1cmVTdHJpbmdCbG9ja3MoKSB7CisgICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgeworICAgICAgICAgICAgaWYgKG1TdHJpbmdCbG9ja3MgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG1ha2VTdHJpbmdCbG9ja3Moc1N5c3RlbS5tU3RyaW5nQmxvY2tzKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBtU3RyaW5nQmxvY2tzOwogICAgICAgICB9CiAgICAgfQogCkBAIC02OTgsNiArNzMxLDE4IEBACiAgICAgICovCiAgICAgcHVibGljIG5hdGl2ZSBmaW5hbCBTdHJpbmdbXSBnZXRMb2NhbGVzKCk7CiAKKyAgICAvKioKKyAgICAgKiBTYW1lIGFzIGdldExvY2FsZXMoKSwgZXhjZXB0IHRoYXQgbG9jYWxlcyB0aGF0IGFyZSBvbmx5IHByb3ZpZGVkIGJ5IHRoZSBzeXN0ZW0gKGkuZS4gdGhvc2UKKyAgICAgKiBwcmVzZW50IGluIGZyYW1ld29yay1yZXMuYXBrIG9yIGl0cyBvdmVybGF5cykgd2lsbCBub3QgYmUgbGlzdGVkLgorICAgICAqCisgICAgICogRm9yIGV4YW1wbGUsIGlmIHRoZSAic3lzdGVtIiBhc3NldHMgc3VwcG9ydCBFbmdsaXNoLCBGcmVuY2gsIGFuZCBHZXJtYW4sIGFuZCB0aGUgYWRkaXRpb25hbAorICAgICAqIGFzc2V0cyBzdXBwb3J0IENoZXJva2VlIGFuZCBGcmVuY2gsIGdldExvY2FsZXMoKSB3b3VsZCByZXR1cm4KKyAgICAgKiBbQ2hlcm9rZWUsIEVuZ2xpc2gsIEZyZW5jaCwgR2VybWFuXSwgd2hpbGUgZ2V0Tm9uU3lzdGVtTG9jYWxlcygpIHdvdWxkIHJldHVybgorICAgICAqIFtDaGVyb2tlZSwgRnJlbmNoXS4KKyAgICAgKiB7QGhpZGV9CisgICAgICovCisgICAgcHVibGljIG5hdGl2ZSBmaW5hbCBTdHJpbmdbXSBnZXROb25TeXN0ZW1Mb2NhbGVzKCk7CisKICAgICAvKioge0BoaWRlfSAqLwogICAgIHB1YmxpYyBuYXRpdmUgZmluYWwgQ29uZmlndXJhdGlvbltdIGdldFNpemVDb25maWd1cmF0aW9ucygpOwogCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3Jlcy9SZXNvdXJjZXMuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcmVzL1Jlc291cmNlcy5qYXZhCmluZGV4IDYwYzZlODIuLjdiNTZlZWIgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcmVzL1Jlc291cmNlcy5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcmVzL1Jlc291cmNlcy5qYXZhCkBAIC0xNTEsOCArMTUxLDkgQEAKIAogICAgIHByaXZhdGUgYm9vbGVhbiBtUHJlbG9hZGluZzsKIAorICAgIC8vIEN5Y2xpY2FsIGNhY2hlIHVzZWQgZm9yIHJlY2VudGx5LWFjY2Vzc2VkIFhNTCBmaWxlcy4KICAgICBwcml2YXRlIGludCBtTGFzdENhY2hlZFhtbEJsb2NrSW5kZXggPSAtMTsKLSAgICBwcml2YXRlIGZpbmFsIGludFtdIG1DYWNoZWRYbWxCbG9ja0lkcyA9IHsgMCwgMCwgMCwgMCB9OworICAgIHByaXZhdGUgZmluYWwgU3RyaW5nW10gbUNhY2hlZFhtbEJsb2NrRmlsZXMgPSBuZXcgU3RyaW5nWzRdOwogICAgIHByaXZhdGUgZmluYWwgWG1sQmxvY2tbXSBtQ2FjaGVkWG1sQmxvY2tzID0gbmV3IFhtbEJsb2NrWzRdOwogCiAgICAgZmluYWwgQXNzZXRNYW5hZ2VyIG1Bc3NldHM7CkBAIC04NjYsNiArODY3LDExIEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBnZXRWYWx1ZUZvckRlbnNpdHkoaWQsIGRlbnNpdHksIHZhbHVlLCB0cnVlKTsKIAorICAgICAgICAgICAgLy8gSWYgdGhlIGRyYXdhYmxlJ3MgWE1MIGxpdmVzIGluIG91ciBjdXJyZW50IGRlbnNpdHkgcXVhbGlmaWVyLAorICAgICAgICAgICAgLy8gaXQncyBva2F5IHRvIHVzZSBhIHNjYWxlZCB2ZXJzaW9uIGZyb20gdGhlIGNhY2hlLiBPdGhlcndpc2UsIHdlCisgICAgICAgICAgICAvLyBuZWVkIHRvIGFjdHVhbGx5IGxvYWQgdGhlIGRyYXdhYmxlIGZyb20gWE1MLgorICAgICAgICAgICAgZmluYWwgYm9vbGVhbiB1c2VDYWNoZSA9IHZhbHVlLmRlbnNpdHkgPT0gbU1ldHJpY3MuZGVuc2l0eURwaTsKKwogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIFByZXRlbmQgdGhlIHJlcXVlc3RlZCBkZW5zaXR5IGlzIGFjdHVhbGx5IHRoZSBkaXNwbGF5IGRlbnNpdHkuIElmCiAgICAgICAgICAgICAgKiB0aGUgZHJhd2FibGUgcmV0dXJuZWQgaXMgbm90IHRoZSByZXF1ZXN0ZWQgZGVuc2l0eSwgdGhlbiBmb3JjZSBpdApAQCAtODgxLDcgKzg4Nyw3IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gbG9hZERyYXdhYmxlKHZhbHVlLCBpZCwgdGhlbWUpOworICAgICAgICAgICAgcmV0dXJuIGxvYWREcmF3YWJsZSh2YWx1ZSwgaWQsIHRoZW1lLCB1c2VDYWNoZSk7CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICByZWxlYXNlVGVtcFR5cGVkVmFsdWUodmFsdWUpOwogICAgICAgICB9CkBAIC0xOTc2LDcgKzE5ODIsMjEgQEAKIAogICAgICAgICAgICAgaWYgKHNldExvY2FsZXNUb0RlZmF1bHQgfHwgbVJlc29sdmVkTG9jYWxlID09IG51bGwKICAgICAgICAgICAgICAgICAgICAgfHwgKGNvbmZpZ0NoYW5nZXMgJiBDb25maWd1cmF0aW9uLk5BVElWRV9DT05GSUdfTE9DQUxFKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgbVJlc29sdmVkTG9jYWxlID0gbG9jYWxlcy5nZXRGaXJzdE1hdGNoKG1Bc3NldHMuZ2V0TG9jYWxlcygpKTsKKyAgICAgICAgICAgICAgICBpZiAobG9jYWxlcy5zaXplKCkgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGFuIG9wdGltaXphdGlvbiB0byBhdm9pZCB0aGUgSk5JIGNhbGwocykgd2hlbiB0aGUgcmVzdWx0IG9mCisgICAgICAgICAgICAgICAgICAgIC8vIGdldEZpcnN0TWF0Y2hXaXRoRW5nbGlzaFN1cHBvcnRlZCgpIGRvZXMgbm90IGRlcGVuZCBvbiB0aGUgc3VwcG9ydGVkIGxvY2FsZXMuCisgICAgICAgICAgICAgICAgICAgIG1SZXNvbHZlZExvY2FsZSA9IGxvY2FsZXMuZ2V0UHJpbWFyeSgpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZ1tdIHN1cHBvcnRlZExvY2FsZXMgPSBtQXNzZXRzLmdldE5vblN5c3RlbUxvY2FsZXMoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKExvY2FsZUxpc3QuaXNQc2V1ZG9Mb2NhbGVzT25seShzdXBwb3J0ZWRMb2NhbGVzKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgZmFsbGJhY2sgdG8gYWxsIGxvY2FsZXMgKGluY2x1ZGluZyBzeXN0ZW0gbG9jYWxlcykgaWYgdGhlcmUgd2FzIG5vCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2NhbGUgc3BlY2lmaWNhbGx5IHN1cHBvcnRlZCBieSB0aGUgYXNzZXRzLiBUaGlzIGlzIHRvIHByb3Blcmx5IHN1cHBvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFwcHMgdGhhdCBvbmx5IHJlbHkgb24gdGhlIHNoYXJlZCBzeXN0ZW0gYXNzZXRzIGFuZCBkb24ndCBuZWVkIGFzc2V0cyBvZgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlaXIgb3duLgorICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydGVkTG9jYWxlcyA9IG1Bc3NldHMuZ2V0TG9jYWxlcygpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG1SZXNvbHZlZExvY2FsZSA9IGxvY2FsZXMuZ2V0Rmlyc3RNYXRjaFdpdGhFbmdsaXNoU3VwcG9ydGVkKHN1cHBvcnRlZExvY2FsZXMpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1Bc3NldHMuc2V0Q29uZmlndXJhdGlvbihtQ29uZmlndXJhdGlvbi5tY2MsIG1Db25maWd1cmF0aW9uLm1uYywKICAgICAgICAgICAgICAgICAgICAgYWRqdXN0TGFuZ3VhZ2VUYWcobVJlc29sdmVkTG9jYWxlLnRvTGFuZ3VhZ2VUYWcoKSksCkBAIC0yMzUxLDE2ICsyMzcxLDE3IEBACiAgICAgICogdG9vbHMuCiAgICAgICovCiAgICAgcHVibGljIGZpbmFsIHZvaWQgZmx1c2hMYXlvdXRDYWNoZSgpIHsKLSAgICAgICAgc3luY2hyb25pemVkIChtQ2FjaGVkWG1sQmxvY2tJZHMpIHsKLSAgICAgICAgICAgIC8vIEZpcnN0IHNlZSBpZiB0aGlzIGJsb2NrIGlzIGluIG91ciBjYWNoZS4KLSAgICAgICAgICAgIGZpbmFsIGludCBudW0gPSBtQ2FjaGVkWG1sQmxvY2tJZHMubGVuZ3RoOwotICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPG51bTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgbUNhY2hlZFhtbEJsb2NrSWRzW2ldID0gLTA7Ci0gICAgICAgICAgICAgICAgWG1sQmxvY2sgb2xkQmxvY2sgPSBtQ2FjaGVkWG1sQmxvY2tzW2ldOworICAgICAgICBmaW5hbCBTdHJpbmdbXSBjYWNoZWRYbWxCbG9ja0ZpbGVzID0gbUNhY2hlZFhtbEJsb2NrRmlsZXM7CisgICAgICAgIGZpbmFsIFhtbEJsb2NrW10gY2FjaGVkWG1sQmxvY2tzID0gbUNhY2hlZFhtbEJsb2NrczsKKyAgICAgICAgc3luY2hyb25pemVkIChjYWNoZWRYbWxCbG9ja0ZpbGVzKSB7CisgICAgICAgICAgICBmaW5hbCBpbnQgbnVtID0gY2FjaGVkWG1sQmxvY2tGaWxlcy5sZW5ndGg7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bTsgaSsrKSB7CisgICAgICAgICAgICAgICAgZmluYWwgWG1sQmxvY2sgb2xkQmxvY2sgPSBjYWNoZWRYbWxCbG9ja3NbaV07CiAgICAgICAgICAgICAgICAgaWYgKG9sZEJsb2NrICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgb2xkQmxvY2suY2xvc2UoKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbUNhY2hlZFhtbEJsb2Nrc1tpXSA9IG51bGw7CisgICAgICAgICAgICAgICAgY2FjaGVkWG1sQmxvY2tGaWxlc1tpXSA9IG51bGw7CisgICAgICAgICAgICAgICAgY2FjaGVkWG1sQmxvY2tzW2ldID0gbnVsbDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTI0MzcsNiArMjQ1OCwxMiBAQAogCiAgICAgQE51bGxhYmxlCiAgICAgRHJhd2FibGUgbG9hZERyYXdhYmxlKFR5cGVkVmFsdWUgdmFsdWUsIGludCBpZCwgVGhlbWUgdGhlbWUpIHRocm93cyBOb3RGb3VuZEV4Y2VwdGlvbiB7CisgICAgICAgIHJldHVybiBsb2FkRHJhd2FibGUodmFsdWUsIGlkLCB0aGVtZSwgdHJ1ZSk7CisgICAgfQorCisgICAgQE51bGxhYmxlCisgICAgRHJhd2FibGUgbG9hZERyYXdhYmxlKFR5cGVkVmFsdWUgdmFsdWUsIGludCBpZCwgVGhlbWUgdGhlbWUsIGJvb2xlYW4gdXNlQ2FjaGUpCisgICAgICAgICAgICB0aHJvd3MgTm90Rm91bmRFeGNlcHRpb24gewogICAgICAgICB0cnkgewogICAgICAgICAgICAgaWYgKFRSQUNFX0ZPUl9QUkVMT0FEKSB7CiAgICAgICAgICAgICAgICAgLy8gTG9nIG9ubHkgZnJhbWV3b3JrIHJlc291cmNlcwpAQCAtMjQ2MywxNiArMjQ5MCwxNyBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBGaXJzdCwgY2hlY2sgd2hldGhlciB3ZSBoYXZlIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhpcyBkcmF3YWJsZQotICAgICAgICAgICAgLy8gdGhhdCB3YXMgaW5mbGF0ZWQgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIHRoZW1lLgotICAgICAgICAgICAgaWYgKCFtUHJlbG9hZGluZykgeworICAgICAgICAgICAgLy8gdGhhdCB3YXMgaW5mbGF0ZWQgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIHRoZW1lLiBTa2lwIHRoZSBjYWNoZSBpZgorICAgICAgICAgICAgLy8gd2UncmUgY3VycmVudGx5IHByZWxvYWRpbmcgb3Igd2UncmUgbm90IHVzaW5nIHRoZSBjYWNoZS4KKyAgICAgICAgICAgIGlmICghbVByZWxvYWRpbmcgJiYgdXNlQ2FjaGUpIHsKICAgICAgICAgICAgICAgICBmaW5hbCBEcmF3YWJsZSBjYWNoZWREcmF3YWJsZSA9IGNhY2hlcy5nZXRJbnN0YW5jZShrZXksIHRoZW1lKTsKICAgICAgICAgICAgICAgICBpZiAoY2FjaGVkRHJhd2FibGUgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FjaGVkRHJhd2FibGU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAvLyBOZXh0LCBjaGVjayBwcmVsb2FkZWQgZHJhd2FibGVzLiBUaGVzZSBtYXkgY29udGFpbiB1bnJlc29sdmVkIHRoZW1lCi0gICAgICAgICAgICAvLyBhdHRyaWJ1dGVzLgorICAgICAgICAgICAgLy8gTmV4dCwgY2hlY2sgcHJlbG9hZGVkIGRyYXdhYmxlcy4gUHJlbG9hZGVkIGRyYXdhYmxlcyBtYXkgY29udGFpbgorICAgICAgICAgICAgLy8gdW5yZXNvbHZlZCB0aGVtZSBhdHRyaWJ1dGVzLgogICAgICAgICAgICAgZmluYWwgQ29uc3RhbnRTdGF0ZSBjczsKICAgICAgICAgICAgIGlmIChpc0NvbG9yRHJhd2FibGUpIHsKICAgICAgICAgICAgICAgICBjcyA9IHNQcmVsb2FkZWRDb2xvckRyYXdhYmxlcy5nZXQoa2V5KTsKQEAgLTI1MDAsOCArMjUyOCw5IEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIElmIHdlIHdlcmUgYWJsZSB0byBvYnRhaW4gYSBkcmF3YWJsZSwgc3RvcmUgaXQgaW4gdGhlIGFwcHJvcHJpYXRlCi0gICAgICAgICAgICAvLyBjYWNoZTogcHJlbG9hZCwgbm90IHRoZW1lZCwgbnVsbCB0aGVtZSwgb3IgdGhlbWUtc3BlY2lmaWMuCi0gICAgICAgICAgICBpZiAoZHIgIT0gbnVsbCkgeworICAgICAgICAgICAgLy8gY2FjaGU6IHByZWxvYWQsIG5vdCB0aGVtZWQsIG51bGwgdGhlbWUsIG9yIHRoZW1lLXNwZWNpZmljLiBEb24ndAorICAgICAgICAgICAgLy8gcG9sbHV0ZSB0aGUgY2FjaGUgd2l0aCBkcmF3YWJsZXMgbG9hZGVkIGZyb20gYSBmb3JlaWduIGRlbnNpdHkuCisgICAgICAgICAgICBpZiAoZHIgIT0gbnVsbCAmJiB1c2VDYWNoZSkgewogICAgICAgICAgICAgICAgIGRyLnNldENoYW5naW5nQ29uZmlndXJhdGlvbnModmFsdWUuY2hhbmdpbmdDb25maWd1cmF0aW9ucyk7CiAgICAgICAgICAgICAgICAgY2FjaGVEcmF3YWJsZSh2YWx1ZSwgaXNDb2xvckRyYXdhYmxlLCBjYWNoZXMsIHRoZW1lLCBjYW5BcHBseVRoZW1lLCBrZXksIGRyKTsKICAgICAgICAgICAgIH0KQEAgLTI3MzAsNyArMjc1OSwxNiBAQAogICAgICAgICByZXR1cm4gY3NsOwogICAgIH0KIAotICAgIC8qcGFja2FnZSovIFhtbFJlc291cmNlUGFyc2VyIGxvYWRYbWxSZXNvdXJjZVBhcnNlcihpbnQgaWQsIFN0cmluZyB0eXBlKQorICAgIC8qKgorICAgICAqIExvYWRzIGFuIFhNTCBwYXJzZXIgZm9yIHRoZSBzcGVjaWZpZWQgZmlsZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBpZCB0aGUgcmVzb3VyY2UgaWRlbnRpZmllciBmb3IgdGhlIGZpbGUKKyAgICAgKiBAcGFyYW0gdHlwZSB0aGUgdHlwZSBvZiByZXNvdXJjZSAodXNlZCBmb3IgbG9nZ2luZykKKyAgICAgKiBAcmV0dXJuIGEgcGFyc2VyIGZvciB0aGUgc3BlY2lmaWVkIFhNTCBmaWxlCisgICAgICogQHRocm93cyBOb3RGb3VuZEV4Y2VwdGlvbiBpZiB0aGUgZmlsZSBjb3VsZCBub3QgYmUgbG9hZGVkCisgICAgICovCisgICAgQE5vbk51bGwKKyAgICBYbWxSZXNvdXJjZVBhcnNlciBsb2FkWG1sUmVzb3VyY2VQYXJzZXIoQEFueVJlcyBpbnQgaWQsIEBOb25OdWxsIFN0cmluZyB0eXBlKQogICAgICAgICAgICAgdGhyb3dzIE5vdEZvdW5kRXhjZXB0aW9uIHsKICAgICAgICAgZmluYWwgVHlwZWRWYWx1ZSB2YWx1ZSA9IG9idGFpblRlbXBUeXBlZFZhbHVlKGlkKTsKICAgICAgICAgdHJ5IHsKQEAgLTI3NDQsNTMgKzI3ODIsNTggQEAKICAgICAgICAgICAgIHJlbGVhc2VUZW1wVHlwZWRWYWx1ZSh2YWx1ZSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgLypwYWNrYWdlKi8gWG1sUmVzb3VyY2VQYXJzZXIgbG9hZFhtbFJlc291cmNlUGFyc2VyKFN0cmluZyBmaWxlLCBpbnQgaWQsCi0gICAgICAgICAgICBpbnQgYXNzZXRDb29raWUsIFN0cmluZyB0eXBlKSB0aHJvd3MgTm90Rm91bmRFeGNlcHRpb24geworCisgICAgLyoqCisgICAgICogTG9hZHMgYW4gWE1MIHBhcnNlciBmb3IgdGhlIHNwZWNpZmllZCBmaWxlLgorICAgICAqCisgICAgICogQHBhcmFtIGZpbGUgdGhlIHBhdGggZm9yIHRoZSBYTUwgZmlsZSB0byBwYXJzZQorICAgICAqIEBwYXJhbSBpZCB0aGUgcmVzb3VyY2UgaWRlbnRpZmllciBmb3IgdGhlIGZpbGUKKyAgICAgKiBAcGFyYW0gYXNzZXRDb29raWUgdGhlIGFzc2V0IGNvb2tpZSBmb3IgdGhlIGZpbGUKKyAgICAgKiBAcGFyYW0gdHlwZSB0aGUgdHlwZSBvZiByZXNvdXJjZSAodXNlZCBmb3IgbG9nZ2luZykKKyAgICAgKiBAcmV0dXJuIGEgcGFyc2VyIGZvciB0aGUgc3BlY2lmaWVkIFhNTCBmaWxlCisgICAgICogQHRocm93cyBOb3RGb3VuZEV4Y2VwdGlvbiBpZiB0aGUgZmlsZSBjb3VsZCBub3QgYmUgbG9hZGVkCisgICAgICovCisgICAgQE5vbk51bGwKKyAgICBYbWxSZXNvdXJjZVBhcnNlciBsb2FkWG1sUmVzb3VyY2VQYXJzZXIoQE5vbk51bGwgU3RyaW5nIGZpbGUsIEBBbnlSZXMgaW50IGlkLAorICAgICAgICAgICAgaW50IGFzc2V0Q29va2llLCBATm9uTnVsbCBTdHJpbmcgdHlwZSkgdGhyb3dzIE5vdEZvdW5kRXhjZXB0aW9uIHsKICAgICAgICAgaWYgKGlkICE9IDApIHsKICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhlc2UgbWF5IGJlIGNvbXBpbGVkLi4uCi0gICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChtQ2FjaGVkWG1sQmxvY2tJZHMpIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmdbXSBjYWNoZWRYbWxCbG9ja0ZpbGVzID0gbUNhY2hlZFhtbEJsb2NrRmlsZXM7CisgICAgICAgICAgICAgICAgZmluYWwgWG1sQmxvY2tbXSBjYWNoZWRYbWxCbG9ja3MgPSBtQ2FjaGVkWG1sQmxvY2tzOworICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAoY2FjaGVkWG1sQmxvY2tGaWxlcykgewogICAgICAgICAgICAgICAgICAgICAvLyBGaXJzdCBzZWUgaWYgdGhpcyBibG9jayBpcyBpbiBvdXIgY2FjaGUuCi0gICAgICAgICAgICAgICAgICAgIGZpbmFsIGludCBudW0gPSBtQ2FjaGVkWG1sQmxvY2tJZHMubGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpPTA7IGk8bnVtOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtQ2FjaGVkWG1sQmxvY2tJZHNbaV0gPT0gaWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiKioqKiBSRVVTSU5HIFhNTCBCTE9DSyEgIGlkPSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICArIGlkICsgIiwgaW5kZXg9IiArIGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtQ2FjaGVkWG1sQmxvY2tzW2ldLm5ld1BhcnNlcigpOworICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgbnVtID0gY2FjaGVkWG1sQmxvY2tGaWxlcy5sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYWNoZWRYbWxCbG9ja0ZpbGVzW2ldICE9IG51bGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgY2FjaGVkWG1sQmxvY2tGaWxlc1tpXS5lcXVhbHMoZmlsZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FjaGVkWG1sQmxvY2tzW2ldLm5ld1BhcnNlcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgLy8gTm90IGluIHRoZSBjYWNoZSwgY3JlYXRlIGEgbmV3IGJsb2NrIGFuZCBwdXQgaXQgYXQKICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIG5leHQgc2xvdCBpbiB0aGUgY2FjaGUuCi0gICAgICAgICAgICAgICAgICAgIFhtbEJsb2NrIGJsb2NrID0gbUFzc2V0cy5vcGVuWG1sQmxvY2tBc3NldCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NldENvb2tpZSwgZmlsZSk7CisgICAgICAgICAgICAgICAgICAgIGZpbmFsIFhtbEJsb2NrIGJsb2NrID0gbUFzc2V0cy5vcGVuWG1sQmxvY2tBc3NldChhc3NldENvb2tpZSwgZmlsZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChibG9jayAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9zID0gbUxhc3RDYWNoZWRYbWxCbG9ja0luZGV4KzE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9zID49IG51bSkgcG9zID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGludCBwb3MgPSAobUxhc3RDYWNoZWRYbWxCbG9ja0luZGV4ICsgMSkgJSBudW07CiAgICAgICAgICAgICAgICAgICAgICAgICBtTGFzdENhY2hlZFhtbEJsb2NrSW5kZXggPSBwb3M7Ci0gICAgICAgICAgICAgICAgICAgICAgICBYbWxCbG9jayBvbGRCbG9jayA9IG1DYWNoZWRYbWxCbG9ja3NbcG9zXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFhtbEJsb2NrIG9sZEJsb2NrID0gY2FjaGVkWG1sQmxvY2tzW3Bvc107CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2xkQmxvY2sgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZEJsb2NrLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBtQ2FjaGVkWG1sQmxvY2tJZHNbcG9zXSA9IGlkOwotICAgICAgICAgICAgICAgICAgICAgICAgbUNhY2hlZFhtbEJsb2Nrc1twb3NdID0gYmxvY2s7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiKioqKiBDQUNISU5HIE5FVyBYTUwgQkxPQ0shICBpZD0iCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICArIGlkICsgIiwgaW5kZXg9IiArIHBvcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZWRYbWxCbG9ja0ZpbGVzW3Bvc10gPSBmaWxlOworICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVkWG1sQmxvY2tzW3Bvc10gPSBibG9jazsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBibG9jay5uZXdQYXJzZXIoKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTm90Rm91bmRFeGNlcHRpb24gcm5mID0gbmV3IE5vdEZvdW5kRXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICAgICAgICAgIkZpbGUgIiArIGZpbGUgKyAiIGZyb20geG1sIHR5cGUgIiArIHR5cGUgKyAiIHJlc291cmNlIElEICMweCIKLSAgICAgICAgICAgICAgICAgICAgICAgICsgSW50ZWdlci50b0hleFN0cmluZyhpZCkpOworICAgICAgICAgICAgICAgIGZpbmFsIE5vdEZvdW5kRXhjZXB0aW9uIHJuZiA9IG5ldyBOb3RGb3VuZEV4Y2VwdGlvbigiRmlsZSAiICsgZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGZyb20geG1sIHR5cGUgIiArIHR5cGUgKyAiIHJlc291cmNlIElEICMweCIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKGlkKSk7CiAgICAgICAgICAgICAgICAgcm5mLmluaXRDYXVzZShlKTsKICAgICAgICAgICAgICAgICB0aHJvdyBybmY7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICB0aHJvdyBuZXcgTm90Rm91bmRFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgIkZpbGUgIiArIGZpbGUgKyAiIGZyb20geG1sIHR5cGUgIiArIHR5cGUgKyAiIHJlc291cmNlIElEICMweCIKKyAgICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kRXhjZXB0aW9uKCJGaWxlICIgKyBmaWxlICsgIiBmcm9tIHhtbCB0eXBlICIgKyB0eXBlICsgIiByZXNvdXJjZSBJRCAjMHgiCiAgICAgICAgICAgICAgICAgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKGlkKSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9pbnB1dC9JSW5wdXRNYW5hZ2VyLmFpZGwgYi9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9pbnB1dC9JSW5wdXRNYW5hZ2VyLmFpZGwKaW5kZXggZmYzM2JkOS4uYjhmNDY0ZCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvaW5wdXQvSUlucHV0TWFuYWdlci5haWRsCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL2lucHV0L0lJbnB1dE1hbmFnZXIuYWlkbApAQCAtNzMsNCArNzMsNiBAQAogCiAgICAgdm9pZCBzZXRQb2ludGVySWNvblNoYXBlKGludCBzaGFwZUlkKTsKICAgICB2b2lkIHNldEN1c3RvbVBvaW50ZXJJY29uKGluIFBvaW50ZXJJY29uIGljb24pOworCisgICAgdm9pZCBzZXRQb2ludGVySWNvbkRldGFjaGVkKGJvb2xlYW4gZGV0YWNoZWQpOwogfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvaW5wdXQvSW5wdXRNYW5hZ2VyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9pbnB1dC9JbnB1dE1hbmFnZXIuamF2YQppbmRleCBmYWI0NzE4Li4xNmI4NzIyIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9pbnB1dC9JbnB1dE1hbmFnZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9pbnB1dC9JbnB1dE1hbmFnZXIuamF2YQpAQCAtODI5LDYgKzgyOSwyNCBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgLyoqCisgICAgICogVXBkYXRlIHRoZSBwb2ludGVyIGljb24gc3RhdHVzLiBXaGVuIGRldGFjaGVkLCB0aGUgcG9pbnRlciBpY29uIGRpc2FwcGVhcnMsIGFuZCBmdXJ0aGVyCisgICAgICogbW91c2UgbG9jYXRpb24gd2lsbCBiZSBzdHVjayBhdCB0aGUgY3VycmVudCBwb2ludC4gTW91c2UgbW92ZW1lbnQgZXZlbnRzIHdpbGwgc3RpbGwgYXJyaXZlLAorICAgICAqIGFuZCBtb3ZlbWVudCBzaG91bGQgYmUgaGFuZGxlZCB0aHJvdWdoIHtAbGluayBNb3Rpb25FdmVudC5BWElTX1JFTEFUSVZFX1h9IGFuZAorICAgICAqIHtAbGluayBNb3Rpb25FdmVudC5BWElTX1JFTEFUSVZFX1l9LgorICAgICAqCisgICAgICogQHBhcmFtIGRldGFjaGVkIHRydWUgaWYgdGhlIGljb24gd2lsbCBiZSBkZXRhY2hlZCBmcm9tIHRoZSBhY3R1YWwgbW91c2UgbW92ZW1lbnQuCisgICAgICoKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldFBvaW50ZXJJY29uRGV0YWNoZWQoYm9vbGVhbiBkZXRhY2hlZCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgbUltLnNldFBvaW50ZXJJY29uRGV0YWNoZWQoZGV0YWNoZWQpOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgIC8vIERvIG5vdGhpbmcuCisgICAgICAgIH0KKyAgICB9CisKICAgICBwcml2YXRlIHZvaWQgcG9wdWxhdGVJbnB1dERldmljZXNMb2NrZWQoKSB7CiAgICAgICAgIGlmIChtSW5wdXREZXZpY2VzQ2hhbmdlZExpc3RlbmVyID09IG51bGwpIHsKICAgICAgICAgICAgIGZpbmFsIElucHV0RGV2aWNlc0NoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBJbnB1dERldmljZXNDaGFuZ2VkTGlzdGVuZXIoKTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL25ldC9OZXR3b3JrU2NvcmVyQXBwTWFuYWdlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvbmV0L05ldHdvcmtTY29yZXJBcHBNYW5hZ2VyLmphdmEKaW5kZXggZWM3NmI4YS4uYTY2ZWE0OSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvbmV0L05ldHdvcmtTY29yZXJBcHBNYW5hZ2VyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvbmV0L05ldHdvcmtTY29yZXJBcHBNYW5hZ2VyLmphdmEKQEAgLTMzLDYgKzMzLDcgQEAKIAogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogCiAvKioKQEAgLTkwLDEzICs5MSwxOCBAQAogICAgICAqIEByZXR1cm4gdGhlIGxpc3Qgb2Ygc2NvcmVycywgb3IgdGhlIGVtcHR5IGxpc3QgaWYgdGhlcmUgYXJlIG5vIHZhbGlkIHNjb3JlcnMuCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBDb2xsZWN0aW9uPE5ldHdvcmtTY29yZXJBcHBEYXRhPiBnZXRBbGxWYWxpZFNjb3JlcnMoQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICAgIExpc3Q8TmV0d29ya1Njb3JlckFwcERhdGE+IHNjb3JlcnMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgICAgICAgLy8gTmV0d29yayBzY29yZXIgYXBwcyBjYW4gb25seSBydW4gYXMgdGhlIHByaW1hcnkgdXNlciBzbyBleGl0IGVhcmx5IGlmIHdlJ3JlIG5vdCB0aGUKKyAgICAgICAgLy8gcHJpbWFyeSB1c2VyLgorICAgICAgICBpZiAoVXNlckhhbmRsZS5nZXRDYWxsaW5nVXNlcklkKCkgIT0gMCAvKlVTRVJfU1lTVEVNKi8pIHsKKyAgICAgICAgICAgIHJldHVybiBDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKTsKKyAgICAgICAgfQogCisgICAgICAgIExpc3Q8TmV0d29ya1Njb3JlckFwcERhdGE+IHNjb3JlcnMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKICAgICAgICAgUGFja2FnZU1hbmFnZXIgcG0gPSBjb250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCk7CiAgICAgICAgIC8vIE9ubHkgYXBwcyBpbnN0YWxsZWQgdW5kZXIgdGhlIHByaW1hcnkgdXNlciBvZiB0aGUgZGV2aWNlIGNhbiBiZSBzY29yZXJzLgogICAgICAgICAvLyBUT0RPOiBodHRwOi8vYi8yMzQyMjc2MwogICAgICAgICBMaXN0PFJlc29sdmVJbmZvPiByZWNlaXZlcnMgPQotICAgICAgICAgICAgICAgIHBtLnF1ZXJ5QnJvYWRjYXN0UmVjZWl2ZXJzKFNDT1JFX0lOVEVOVCwgMCAvKiBmbGFncyAqLywgVXNlckhhbmRsZS5VU0VSX1NZU1RFTSk7CisgICAgICAgICAgICAgICAgcG0ucXVlcnlCcm9hZGNhc3RSZWNlaXZlcnNBc1VzZXIoU0NPUkVfSU5URU5ULCAwIC8qIGZsYWdzICovLCBVc2VySGFuZGxlLlVTRVJfU1lTVEVNKTsKICAgICAgICAgZm9yIChSZXNvbHZlSW5mbyByZWNlaXZlciA6IHJlY2VpdmVycykgewogICAgICAgICAgICAgLy8gVGhpcyBmaWVsZCBpcyBhIG1pc25vbWVyLCBzZWUgYW5kcm9pZC5jb250ZW50LnBtLlJlc29sdmVJbmZvI2FjdGl2aXR5SW5mbwogICAgICAgICAgICAgZmluYWwgQWN0aXZpdHlJbmZvIHJlY2VpdmVySW5mbyA9IHJlY2VpdmVyLmFjdGl2aXR5SW5mbzsKQEAgLTEwNSw4ICsxMTEsOSBAQAogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCFwZXJtaXNzaW9uLkJST0FEQ0FTVF9ORVRXT1JLX1BSSVZJTEVHRUQuZXF1YWxzKHJlY2VpdmVySW5mby5wZXJtaXNzaW9uKSkgewotICAgICAgICAgICAgICAgIC8vIFJlY2VpdmVyIGRvZXNuJ3QgcmVxdWlyZSB0aGUgQlJPQURDQVNUX05FVFdPUktfUFJJVklMRUdFRCBwZXJtaXNzaW9uLCB3aGljaCBtZWFucwotICAgICAgICAgICAgICAgIC8vIGFueW9uZSBjb3VsZCB0cmlnZ2VyIG5ldHdvcmsgc2NvcmluZyBhbmQgZmxvb2QgdGhlIGZyYW1ld29yayB3aXRoIHNjb3JlIHJlcXVlc3RzLgorICAgICAgICAgICAgICAgIC8vIFJlY2VpdmVyIGRvZXNuJ3QgcmVxdWlyZSB0aGUgQlJPQURDQVNUX05FVFdPUktfUFJJVklMRUdFRCBwZXJtaXNzaW9uLCB3aGljaAorICAgICAgICAgICAgICAgIC8vIG1lYW5zIGFueW9uZSBjb3VsZCB0cmlnZ2VyIG5ldHdvcmsgc2NvcmluZyBhbmQgZmxvb2QgdGhlIGZyYW1ld29yayB3aXRoIHNjb3JlCisgICAgICAgICAgICAgICAgLy8gcmVxdWVzdHMuCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAocG0uY2hlY2tQZXJtaXNzaW9uKHBlcm1pc3Npb24uU0NPUkVfTkVUV09SS1MsIHJlY2VpdmVySW5mby5wYWNrYWdlTmFtZSkgIT0KQEAgLTEyOCw4ICsxMzUsOCBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgLy8gTk9URTogbG9hZExhYmVsIHdpbGwgYXR0ZW1wdCB0byBsb2FkIHRoZSByZWNlaXZlcidzIGxhYmVsIGFuZCBmYWxsIGJhY2sgdG8gdGhlIGFwcAotICAgICAgICAgICAgLy8gbGFiZWwgaWYgbm9uZSBpcyBwcmVzZW50LgorICAgICAgICAgICAgLy8gTk9URTogbG9hZExhYmVsIHdpbGwgYXR0ZW1wdCB0byBsb2FkIHRoZSByZWNlaXZlcidzIGxhYmVsIGFuZCBmYWxsIGJhY2sgdG8gdGhlCisgICAgICAgICAgICAvLyBhcHAgbGFiZWwgaWYgbm9uZSBpcyBwcmVzZW50LgogICAgICAgICAgICAgc2NvcmVycy5hZGQobmV3IE5ldHdvcmtTY29yZXJBcHBEYXRhKHJlY2VpdmVySW5mby5wYWNrYWdlTmFtZSwKICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZXJJbmZvLmFwcGxpY2F0aW9uSW5mby51aWQsIHJlY2VpdmVySW5mby5sb2FkTGFiZWwocG0pLAogICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uQWN0aXZpdHlDbGFzc05hbWUpKTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL25mYy9OZmNBY3Rpdml0eU1hbmFnZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL25mYy9OZmNBY3Rpdml0eU1hbmFnZXIuamF2YQppbmRleCBkNjE5YzBhLi5jN2Q0YzY1IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9uZmMvTmZjQWN0aXZpdHlNYW5hZ2VyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvbmZjL05mY0FjdGl2aXR5TWFuYWdlci5qYXZhCkBAIC0zNzEsNDAgKzM3MSw0NCBAQAogICAgICAgICAgICAgZmxhZ3MgPSBzdGF0ZS5mbGFnczsKICAgICAgICAgICAgIGFjdGl2aXR5ID0gc3RhdGUuYWN0aXZpdHk7CiAgICAgICAgIH0KKyAgICAgICAgZmluYWwgbG9uZyBpZGVudCA9IEJpbmRlci5jbGVhckNhbGxpbmdJZGVudGl0eSgpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgLy8gTWFrZSBjYWxsYmFja3Mgd2l0aG91dCBsb2NrCisgICAgICAgICAgICBpZiAobmRlZkNhbGxiYWNrICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBtZXNzYWdlID0gbmRlZkNhbGxiYWNrLmNyZWF0ZU5kZWZNZXNzYWdlKGV2ZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh1cmlzQ2FsbGJhY2sgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHVyaXMgPSB1cmlzQ2FsbGJhY2suY3JlYXRlQmVhbVVyaXMoZXZlbnQpOworICAgICAgICAgICAgICAgIGlmICh1cmlzICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgQXJyYXlMaXN0PFVyaT4gdmFsaWRVcmlzID0gbmV3IEFycmF5TGlzdDxVcmk+KCk7CisgICAgICAgICAgICAgICAgICAgIGZvciAoVXJpIHVyaSA6IHVyaXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1cmkgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIlVyaSBub3QgYWxsb3dlZCB0byBiZSBudWxsLiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHNjaGVtZSA9IHVyaS5nZXRTY2hlbWUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWUgPT0gbnVsbCB8fCAoIXNjaGVtZS5lcXVhbHNJZ25vcmVDYXNlKCJmaWxlIikgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIXNjaGVtZS5lcXVhbHNJZ25vcmVDYXNlKCJjb250ZW50IikpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiVXJpIG5lZWRzIHRvIGhhdmUgIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZWl0aGVyIHNjaGVtZSBmaWxlIG9yIHNjaGVtZSBjb250ZW50Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB1cmkgPSBDb250ZW50UHJvdmlkZXIubWF5YmVBZGRVc2VySWQodXJpLCBVc2VySGFuZGxlLm15VXNlcklkKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRVcmlzLmFkZCh1cmkpOworICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgLy8gTWFrZSBjYWxsYmFja3Mgd2l0aG91dCBsb2NrCi0gICAgICAgIGlmIChuZGVmQ2FsbGJhY2sgIT0gbnVsbCkgewotICAgICAgICAgICAgbWVzc2FnZSAgPSBuZGVmQ2FsbGJhY2suY3JlYXRlTmRlZk1lc3NhZ2UoZXZlbnQpOwotICAgICAgICB9Ci0gICAgICAgIGlmICh1cmlzQ2FsbGJhY2sgIT0gbnVsbCkgewotICAgICAgICAgICAgdXJpcyA9IHVyaXNDYWxsYmFjay5jcmVhdGVCZWFtVXJpcyhldmVudCk7Ci0gICAgICAgICAgICBpZiAodXJpcyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgQXJyYXlMaXN0PFVyaT4gdmFsaWRVcmlzID0gbmV3IEFycmF5TGlzdDxVcmk+KCk7Ci0gICAgICAgICAgICAgICAgZm9yIChVcmkgdXJpIDogdXJpcykgewotICAgICAgICAgICAgICAgICAgICBpZiAodXJpID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIlVyaSBub3QgYWxsb3dlZCB0byBiZSBudWxsLiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHNjaGVtZSA9IHVyaS5nZXRTY2hlbWUoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtZSA9PSBudWxsIHx8ICghc2NoZW1lLmVxdWFsc0lnbm9yZUNhc2UoImZpbGUiKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICFzY2hlbWUuZXF1YWxzSWdub3JlQ2FzZSgiY29udGVudCIpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiVXJpIG5lZWRzIHRvIGhhdmUgIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlaXRoZXIgc2NoZW1lIGZpbGUgb3Igc2NoZW1lIGNvbnRlbnQiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHVyaSA9IENvbnRlbnRQcm92aWRlci5tYXliZUFkZFVzZXJJZCh1cmksIFVzZXJIYW5kbGUubXlVc2VySWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHZhbGlkVXJpcy5hZGQodXJpKTsKKyAgICAgICAgICAgICAgICAgICAgdXJpcyA9IHZhbGlkVXJpcy50b0FycmF5KG5ldyBVcmlbdmFsaWRVcmlzLnNpemUoKV0pOwogICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHVyaXMgPSB2YWxpZFVyaXMudG9BcnJheShuZXcgVXJpW3ZhbGlkVXJpcy5zaXplKCldKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAodXJpcyAhPSBudWxsICYmIHVyaXMubGVuZ3RoID4gMCkgewotICAgICAgICAgICAgZm9yIChVcmkgdXJpIDogdXJpcykgewotICAgICAgICAgICAgICAgIC8vIEdyYW50IHRoZSBORkMgcHJvY2VzcyBwZXJtaXNzaW9uIHRvIHJlYWQgdGhlc2UgVVJJcwotICAgICAgICAgICAgICAgIGFjdGl2aXR5LmdyYW50VXJpUGVybWlzc2lvbigiY29tLmFuZHJvaWQubmZjIiwgdXJpLAotICAgICAgICAgICAgICAgICAgICAgICAgSW50ZW50LkZMQUdfR1JBTlRfUkVBRF9VUklfUEVSTUlTU0lPTik7CisgICAgICAgICAgICBpZiAodXJpcyAhPSBudWxsICYmIHVyaXMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAgIGZvciAoVXJpIHVyaSA6IHVyaXMpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gR3JhbnQgdGhlIE5GQyBwcm9jZXNzIHBlcm1pc3Npb24gdG8gcmVhZCB0aGVzZSBVUklzCisgICAgICAgICAgICAgICAgICAgIGFjdGl2aXR5LmdyYW50VXJpUGVybWlzc2lvbigiY29tLmFuZHJvaWQubmZjIiwgdXJpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVudC5GTEFHX0dSQU5UX1JFQURfVVJJX1BFUk1JU1NJT04pOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIEJpbmRlci5yZXN0b3JlQ2FsbGluZ0lkZW50aXR5KGlkZW50KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gbmV3IEJlYW1TaGFyZURhdGEobWVzc2FnZSwgdXJpcywgbmV3IFVzZXJIYW5kbGUoVXNlckhhbmRsZS5teVVzZXJJZCgpKSwgZmxhZ3MpOwogICAgIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL29zL0Vudmlyb25tZW50LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9vcy9FbnZpcm9ubWVudC5qYXZhCmluZGV4IGEwMWQzNGEuLjJjYTlhYjhhIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9vcy9FbnZpcm9ubWVudC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL29zL0Vudmlyb25tZW50LmphdmEKQEAgLTM3LDYgKzM3LDcgQEAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRU5WX0FORFJPSURfU1RPUkFHRSA9ICJBTkRST0lEX1NUT1JBR0UiOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFTlZfRE9XTkxPQURfQ0FDSEUgPSAiRE9XTkxPQURfQ0FDSEUiOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFTlZfT0VNX1JPT1QgPSAiT0VNX1JPT1QiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFTlZfT0RNX1JPT1QgPSAiT0RNX1JPT1QiOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFTlZfVkVORE9SX1JPT1QgPSAiVkVORE9SX1JPT1QiOwogCiAgICAgLyoqIHtAaGlkZX0gKi8KQEAgLTU2LDYgKzU3LDcgQEAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBGaWxlIERJUl9BTkRST0lEX1NUT1JBR0UgPSBnZXREaXJlY3RvcnkoRU5WX0FORFJPSURfU1RPUkFHRSwgIi9zdG9yYWdlIik7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgRmlsZSBESVJfRE9XTkxPQURfQ0FDSEUgPSBnZXREaXJlY3RvcnkoRU5WX0RPV05MT0FEX0NBQ0hFLCAiL2NhY2hlIik7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgRmlsZSBESVJfT0VNX1JPT1QgPSBnZXREaXJlY3RvcnkoRU5WX09FTV9ST09ULCAiL29lbSIpOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEZpbGUgRElSX09ETV9ST09UID0gZ2V0RGlyZWN0b3J5KEVOVl9PRE1fUk9PVCwgIi9vZG0iKTsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBGaWxlIERJUl9WRU5ET1JfUk9PVCA9IGdldERpcmVjdG9yeShFTlZfVkVORE9SX1JPT1QsICIvdmVuZG9yIik7CiAKICAgICBwcml2YXRlIHN0YXRpYyBVc2VyRW52aXJvbm1lbnQgc0N1cnJlbnRVc2VyOwpAQCAtMTU2LDYgKzE1OCwxNiBAQAogICAgIH0KIAogICAgIC8qKgorICAgICAqIFJldHVybiByb290IGRpcmVjdG9yeSBvZiB0aGUgIm9kbSIgcGFydGl0aW9uIGhvbGRpbmcgT0RNIGN1c3RvbWl6YXRpb25zLAorICAgICAqIGlmIGFueS4gSWYgcHJlc2VudCwgdGhlIHBhcnRpdGlvbiBpcyBtb3VudGVkIHJlYWQtb25seS4KKyAgICAgKgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBGaWxlIGdldE9kbURpcmVjdG9yeSgpIHsKKyAgICAgICAgcmV0dXJuIERJUl9PRE1fUk9PVDsKKyAgICB9CisKKyAgICAvKioKICAgICAgKiBSZXR1cm4gcm9vdCBkaXJlY3Rvcnkgb2YgdGhlICJ2ZW5kb3IiIHBhcnRpdGlvbiB0aGF0IGhvbGRzIHZlbmRvci1wcm92aWRlZAogICAgICAqIHNvZnR3YXJlIHRoYXQgc2hvdWxkIHBlcnNpc3QgYWNyb3NzIHNpbXBsZSByZWZsYXNoaW5nIG9mIHRoZSAic3lzdGVtIiBwYXJ0aXRpb24uCiAgICAgICogQGhpZGUKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL29zL1BhcmNlbEZpbGVEZXNjcmlwdG9yLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9vcy9QYXJjZWxGaWxlRGVzY3JpcHRvci5qYXZhCmluZGV4IDEzNWYzNjkuLmQ1NDkxZDMgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL29zL1BhcmNlbEZpbGVEZXNjcmlwdG9yLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvb3MvUGFyY2VsRmlsZURlc2NyaXB0b3IuamF2YQpAQCAtMjMzLDYgKzIzMywxOSBAQAogICAgICAgICBmaW5hbCBGaWxlRGVzY3JpcHRvciBmZCA9IG9wZW5JbnRlcm5hbChmaWxlLCBtb2RlKTsKICAgICAgICAgaWYgKGZkID09IG51bGwpIHJldHVybiBudWxsOwogCisgICAgICAgIHJldHVybiBmcm9tRmQoZmQsIGhhbmRsZXIsIGxpc3RlbmVyKTsKKyAgICB9CisKKyAgICAvKioge0BoaWRlfSAqLworICAgIHB1YmxpYyBzdGF0aWMgUGFyY2VsRmlsZURlc2NyaXB0b3IgZnJvbUZkKAorICAgICAgICAgICAgRmlsZURlc2NyaXB0b3IgZmQsIEhhbmRsZXIgaGFuZGxlciwgZmluYWwgT25DbG9zZUxpc3RlbmVyIGxpc3RlbmVyKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBpZiAoaGFuZGxlciA9PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJIYW5kbGVyIG11c3Qgbm90IGJlIG51bGwiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobGlzdGVuZXIgPT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiTGlzdGVuZXIgbXVzdCBub3QgYmUgbnVsbCIpOworICAgICAgICB9CisKICAgICAgICAgZmluYWwgRmlsZURlc2NyaXB0b3JbXSBjb21tID0gY3JlYXRlQ29tbVNvY2tldFBhaXIoKTsKICAgICAgICAgZmluYWwgUGFyY2VsRmlsZURlc2NyaXB0b3IgcGZkID0gbmV3IFBhcmNlbEZpbGVEZXNjcmlwdG9yKGZkLCBjb21tWzBdKTsKICAgICAgICAgZmluYWwgTWVzc2FnZVF1ZXVlIHF1ZXVlID0gaGFuZGxlci5nZXRMb29wZXIoKS5nZXRRdWV1ZSgpOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvb3MvVXNlck1hbmFnZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL29zL1VzZXJNYW5hZ2VyLmphdmEKaW5kZXggYzVhZGFmZS4uMDM3OTE2YSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvb3MvVXNlck1hbmFnZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9vcy9Vc2VyTWFuYWdlci5qYXZhCkBAIC0zMSw2ICszMSw3IEBACiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXBGYWN0b3J5OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdDsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlOworaW1wb3J0IGFuZHJvaWQub3Muc3RvcmFnZS5TdG9yYWdlTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiBpbXBvcnQgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zOwpAQCAtNTYsNiArNTcsMTAgQEAKICAgICAgKiBBdXRoZW50aWNhdG9yLgogICAgICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPmZhbHNlPC9jb2RlPi4KICAgICAgKgorICAgICAqIDxwPkZyb20ge0BsaW5rIGFuZHJvaWQub3MuQnVpbGQuVkVSU0lPTl9DT0RFUyNOfSBhIHByb2ZpbGUgb3IgZGV2aWNlIG93bmVyIGFwcCBjYW4gc3RpbGwKKyAgICAgKiB1c2Uge0BsaW5rIGFuZHJvaWQuYWNjb3VudHMuQWNjb3VudE1hbmFnZXJ9IEFQSXMgdG8gYWRkIG9yIHJlbW92ZSBhY2NvdW50cyB3aGVuIGFjY291bnQKKyAgICAgKiBtYW5hZ2VtZW50IGlzIGRpc2FsbG93ZWQuCisgICAgICoKICAgICAgKiA8cC8+S2V5IGZvciB1c2VyIHJlc3RyaWN0aW9ucy4KICAgICAgKiA8cC8+VHlwZTogQm9vbGVhbgogICAgICAqIEBzZWUgRGV2aWNlUG9saWN5TWFuYWdlciNhZGRVc2VyUmVzdHJpY3Rpb24oQ29tcG9uZW50TmFtZSwgU3RyaW5nKQpAQCAtODUyLDEyICs4NTcsMTUgQEAKICAgICAgKiBAcGFyYW0gdXNlciB0byByZXRyaWV2ZSB0aGUgdW5sb2NrZWQgc3RhdGUgZm9yLgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGlzVXNlclVubG9ja2VkKFVzZXJIYW5kbGUgdXNlcikgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgcmV0dXJuIEFjdGl2aXR5TWFuYWdlck5hdGl2ZS5nZXREZWZhdWx0KCkuaXNVc2VyUnVubmluZygKLSAgICAgICAgICAgICAgICAgICAgdXNlci5nZXRJZGVudGlmaWVyKCksIEFjdGl2aXR5TWFuYWdlci5GTEFHX0FORF9VTkxPQ0tFRCk7Ci0gICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGlzVXNlclVubG9ja2VkKHVzZXIuZ2V0SWRlbnRpZmllcigpKTsKKyAgICB9CisKKyAgICAvKioge0BoaWRlfSAqLworICAgIHB1YmxpYyBib29sZWFuIGlzVXNlclVubG9ja2VkKGludCB1c2VySWQpIHsKKyAgICAgICAgLy8gVE9ETzogZXZlbnR1YWxseSBwaXZvdCB0aGlzIGJhY2sgdG8gbG9vayBhdCBBY3Rpdml0eU1hbmFnZXIgc3RhdGUsCisgICAgICAgIC8vIGJ1dCB0aGVyZSBpcyByYWNlIHdoZXJlIHdlIGNhbiBzdGFydCBhIG5vbi1lbmNyeXB0aW9uLWF3YXJlIGxhdW5jaGVyCisgICAgICAgIC8vIGJlZm9yZSB0aGF0IGxpZmVjeWNsZSBoYXMgZW50ZXJlZCB0aGUgcnVubmluZyB1bmxvY2tlZCBzdGF0ZS4KKyAgICAgICAgcmV0dXJuIG1Db250ZXh0LmdldFN5c3RlbVNlcnZpY2UoU3RvcmFnZU1hbmFnZXIuY2xhc3MpLmlzVXNlcktleVVubG9ja2VkKHVzZXJJZCk7CiAgICAgfQogCiAgICAgLyoqCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9wcmludC9JUHJpbnRNYW5hZ2VyLmFpZGwgYi9jb3JlL2phdmEvYW5kcm9pZC9wcmludC9JUHJpbnRNYW5hZ2VyLmFpZGwKaW5kZXggOGZhN2FiOS4uOWE4MGUzNyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvcHJpbnQvSVByaW50TWFuYWdlci5haWRsCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50L0lQcmludE1hbmFnZXIuYWlkbApAQCAtMTYsNiArMTYsNyBAQAogCiBwYWNrYWdlIGFuZHJvaWQucHJpbnQ7CiAKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkljb247CiBpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CiBpbXBvcnQgYW5kcm9pZC5wcmludC5JUHJpbnRlckRpc2NvdmVyeU9ic2VydmVyOwogaW1wb3J0IGFuZHJvaWQucHJpbnQuSVByaW50RG9jdW1lbnRBZGFwdGVyOwpAQCAtNTMsNiArNTQsMTkgQEAKICAgICB2b2lkIHN0b3BQcmludGVyRGlzY292ZXJ5KGluIElQcmludGVyRGlzY292ZXJ5T2JzZXJ2ZXIgb2JzZXJ2ZXIsIGludCB1c2VySWQpOwogICAgIHZvaWQgdmFsaWRhdGVQcmludGVycyhpbiBMaXN0PFByaW50ZXJJZD4gcHJpbnRlcklkcywgaW50IHVzZXJJZCk7CiAgICAgdm9pZCBzdGFydFByaW50ZXJTdGF0ZVRyYWNraW5nKGluIFByaW50ZXJJZCBwcmludGVySWQsIGludCB1c2VySWQpOworCisgICAgLyoqCisgICAgICogR2V0IHRoZSBjdXN0b20gaWNvbiBmb3IgYSBwcmludGVyLiBJZiB0aGUgaWNvbiBpcyBub3QgY2FjaGVkLCB0aGUgaWNvbiBpcworICAgICAqIHJlcXVlc3RlZCBhc3luY2hyb25vdXNseS4gT25jZSBpdCBpcyBhdmFpbGFibGUgdGhlIHByaW50ZXIgaXMgdXBkYXRlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBwcmludGVySWQgdGhlIGlkIG9mIHRoZSBwcmludGVyIHRoZSBpY29uIHNob3VsZCBiZSBsb2FkZWQgZm9yCisgICAgICogQHBhcmFtIHVzZXJJZCB0aGUgaWQgb2YgdGhlIHVzZXIgcmVxdWVzdGluZyB0aGUgcHJpbnRlcgorICAgICAqIEByZXR1cm4gdGhlIGN1c3RvbSBpY29uIHRvIGJlIHVzZWQgZm9yIHRoZSBwcmludGVyIG9yIG51bGwgaWYgdGhlIGljb24gaXMKKyAgICAgKiAgICAgICAgIG5vdCB5ZXQgYXZhaWxhYmxlCisgICAgICogQHNlZSBhbmRyb2lkLnByaW50LlByaW50ZXJJbmZvLkJ1aWxkZXIjc2V0SGFzQ3VzdG9tUHJpbnRlckljb24oKQorICAgICAqLworICAgIEljb24gZ2V0Q3VzdG9tUHJpbnRlckljb24oaW4gUHJpbnRlcklkIHByaW50ZXJJZCwgaW50IHVzZXJJZCk7CisKICAgICB2b2lkIHN0b3BQcmludGVyU3RhdGVUcmFja2luZyhpbiBQcmludGVySWQgcHJpbnRlcklkLCBpbnQgdXNlcklkKTsKICAgICB2b2lkIGRlc3Ryb3lQcmludGVyRGlzY292ZXJ5U2Vzc2lvbihpbiBJUHJpbnRlckRpc2NvdmVyeU9ic2VydmVyIG9ic2VydmVyLAogICAgICAgICAgICAgaW50IHVzZXJJZCk7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9wcmludC9JUHJpbnRTcG9vbGVyLmFpZGwgYi9jb3JlL2phdmEvYW5kcm9pZC9wcmludC9JUHJpbnRTcG9vbGVyLmFpZGwKaW5kZXggYjdjZmJlYS4uYzM2MjViOCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvcHJpbnQvSVByaW50U3Bvb2xlci5haWRsCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50L0lQcmludFNwb29sZXIuYWlkbApAQCAtMTcsOSArMTcsMTEgQEAKIHBhY2thZ2UgYW5kcm9pZC5wcmludDsKIAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lOworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuSWNvbjsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbEZpbGVEZXNjcmlwdG9yOwogaW1wb3J0IGFuZHJvaWQucHJpbnQuSVByaW50U3Bvb2xlckNsaWVudDsKIGltcG9ydCBhbmRyb2lkLnByaW50LklQcmludFNwb29sZXJDYWxsYmFja3M7CitpbXBvcnQgYW5kcm9pZC5wcmludC5QcmludGVySWQ7CiBpbXBvcnQgYW5kcm9pZC5wcmludC5QcmludGVySW5mbzsKIGltcG9ydCBhbmRyb2lkLnByaW50LlByaW50QXR0cmlidXRlczsKIGltcG9ydCBhbmRyb2lkLnByaW50LlByaW50Sm9iSWQ7CkBAIC01OCw2ICs2MCwzOSBAQAogICAgICAqLwogICAgIHZvaWQgc2V0U3RhdHVzKGluIFByaW50Sm9iSWQgcHJpbnRKb2JJZCwgaW4gQ2hhclNlcXVlbmNlIHN0YXR1cyk7CiAKKyAgICAvKioKKyAgICAgKiBIYW5kbGUgdGhhdCBhIGN1c3RvbSBpY29uIGZvciBhIHByaW50ZXIgd2FzIGxvYWRlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBwcmludGVySWQgdGhlIGlkIG9mIHRoZSBwcmludGVyIHRoZSBpY29uIGJlbG9uZ3MgdG8KKyAgICAgKiBAcGFyYW0gaWNvbiB0aGUgaWNvbiB0aGF0IHdhcyBsb2FkZWQKKyAgICAgKiBAcGFyYW0gY2FsbGJhY2tzIHRoZSBjYWxsYmFjayB0byBjYWxsIG9uY2UgaWNvbiBpcyBzdG9yZWQgaW4gY2FzZQorICAgICAqIEBwYXJhbSBzZXF1ZW5jZSB0aGUgc2VxdWVuY2UgbnVtYmVyIG9mIHRoZSBjYWxsCisgICAgICogQHNlZSBhbmRyb2lkLnByaW50LlByaW50ZXJJbmZvLkJ1aWxkZXIjc2V0SGFzQ3VzdG9tUHJpbnRlckljb24oKQorICAgICAqLworICAgIHZvaWQgb25DdXN0b21QcmludGVySWNvbkxvYWRlZChpbiBQcmludGVySWQgcHJpbnRlcklkLCBpbiBJY29uIGljb24sCisgICAgICAgICAgICBpbiBJUHJpbnRTcG9vbGVyQ2FsbGJhY2tzIGNhbGxiYWNrcywgaW4gaW50IHNlcXVlbmNlKTsKKworICAgIC8qKgorICAgICAqIEdldCB0aGUgY3VzdG9tIGljb24gZm9yIGEgcHJpbnRlci4gSWYgdGhlIGljb24gaXMgbm90IGNhY2hlZCwgdGhlIGljb24gaXMKKyAgICAgKiByZXF1ZXN0ZWQgYXN5bmNocm9ub3VzbHkuIE9uY2UgaXQgaXMgYXZhaWxhYmxlIHRoZSBwcmludGVyIGlzIHVwZGF0ZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcHJpbnRlcklkIHRoZSBpZCBvZiB0aGUgcHJpbnRlciB0aGUgaWNvbiBzaG91bGQgYmUgbG9hZGVkIGZvcgorICAgICAqIEBwYXJhbSBjYWxsYmFja3MgdGhlIGNhbGxiYWNrIHRvIGNhbGwgb25jZSBpY29uIGlzIHJldHJpZXZlZAorICAgICAqIEBwYXJhbSBzZXF1ZW5jZSB0aGUgc2VxdWVuY2UgbnVtYmVyIG9mIHRoZSBjYWxsCisgICAgICogQHNlZSBhbmRyb2lkLnByaW50LlByaW50ZXJJbmZvLkJ1aWxkZXIjc2V0SGFzQ3VzdG9tUHJpbnRlckljb24oKQorICAgICAqLworICAgIHZvaWQgZ2V0Q3VzdG9tUHJpbnRlckljb24oaW4gUHJpbnRlcklkIHByaW50ZXJJZCwKKyAgICAgICAgICAgIGluIElQcmludFNwb29sZXJDYWxsYmFja3MgY2FsbGJhY2tzLCBpbiBpbnQgc2VxdWVuY2UpOworCisgICAgLyoqCisgICAgICogQ2xlYXIgYWxsIHN0YXRlIGZyb20gdGhlIGN1c3RvbSBwcmludGVyIGljb24gY2FjaGUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gY2FsbGJhY2tzIHRoZSBjYWxsYmFjayB0byBjYWxsIG9uY2UgY2FjaGUgaXMgY2xlYXJlZAorICAgICAqIEBwYXJhbSBzZXF1ZW5jZSB0aGUgc2VxdWVuY2UgbnVtYmVyIG9mIHRoZSBjYWxsCisgICAgICovCisgICAgdm9pZCBjbGVhckN1c3RvbVByaW50ZXJJY29uQ2FjaGUoaW4gSVByaW50U3Bvb2xlckNhbGxiYWNrcyBjYWxsYmFja3MsCisgICAgICAgICAgICBpbiBpbnQgc2VxdWVuY2UpOworCiAgICAgdm9pZCBzZXRQcmludEpvYlRhZyhpbiBQcmludEpvYklkIHByaW50Sm9iSWQsIFN0cmluZyB0YWcsIElQcmludFNwb29sZXJDYWxsYmFja3MgY2FsbGJhY2ssCiAgICAgICAgICAgICBpbnQgc2VxdWVuY2UpOwogICAgIHZvaWQgd3JpdGVQcmludEpvYkRhdGEoaW4gUGFyY2VsRmlsZURlc2NyaXB0b3IgZmQsIGluIFByaW50Sm9iSWQgcHJpbnRKb2JJZCk7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9wcmludC9JUHJpbnRTcG9vbGVyQ2FsbGJhY2tzLmFpZGwgYi9jb3JlL2phdmEvYW5kcm9pZC9wcmludC9JUHJpbnRTcG9vbGVyQ2FsbGJhY2tzLmFpZGwKaW5kZXggNDVjNTMzMi4uMjNkNzA2YSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvcHJpbnQvSVByaW50U3Bvb2xlckNhbGxiYWNrcy5haWRsCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50L0lQcmludFNwb29sZXJDYWxsYmFja3MuYWlkbApAQCAtMTYsNyArMTYsOSBAQAogCiBwYWNrYWdlIGFuZHJvaWQucHJpbnQ7CiAKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkljb247CiBpbXBvcnQgYW5kcm9pZC5wcmludC5QcmludEpvYkluZm87CitpbXBvcnQgYW5kcm9pZC5wcmludC5QcmludGVySWQ7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiAKIC8qKgpAQCAtMzIsNCArMzQsMjcgQEAKICAgICB2b2lkIG9uU2V0UHJpbnRKb2JTdGF0ZVJlc3VsdChib29sZWFuIHN1Y2Nlc3MsIGludCBzZXF1ZW5jZSk7CiAgICAgdm9pZCBvblNldFByaW50Sm9iVGFnUmVzdWx0KGJvb2xlYW4gc3VjY2VzcywgaW50IHNlcXVlbmNlKTsKICAgICB2b2lkIG9uR2V0UHJpbnRKb2JJbmZvUmVzdWx0KGluIFByaW50Sm9iSW5mbyBwcmludEpvYiwgaW50IHNlcXVlbmNlKTsKKworICAgIC8qKgorICAgICAqIERlbGl2ZXIgdGhlIHJlc3VsdCBvZiBhIHJlcXVlc3Qgb2YgYSBjdXN0b20gcHJpbnRlciBpY29uLgorICAgICAqCisgICAgICogQHBhcmFtIGljb24gdGhlIGljb24gdGhhdCB3YXMgcmV0cmlldmVkLCBvciBudWxsIGlmIG5vIGljb24gY291bGQgYmUKKyAgICAgKiAgICAgICAgICAgICBmb3VuZAorICAgICAqIEBwYXJhbSBzZXF1ZW5jZSB0aGUgc2VxdWVuY2UgbnVtYmVyIG9mIHRoZSBjYWxsIHRvIGdldCB0aGUgaWNvbgorICAgICAqLworICAgIHZvaWQgb25HZXRDdXN0b21QcmludGVySWNvblJlc3VsdChpbiBJY29uIGljb24sIGludCBzZXF1ZW5jZSk7CisKKyAgICAvKioKKyAgICAgKiBEZWNsYXJlIHRoYXQgdGhlIHByaW50IHNwb29sZXIgY2FjaGVkIGEgY3VzdG9tIHByaW50ZXIgaWNvbi4KKyAgICAgKgorICAgICAqIEBwYXJhbSBzZXF1ZW5jZSB0aGUgc2VxdWVuY2UgbnVtYmVyIG9mIHRoZSBjYWxsIHRvIGNhY2hlIHRoZSBpY29uCisgICAgICovCisgICAgdm9pZCBvbkN1c3RvbVByaW50ZXJJY29uQ2FjaGVkKGludCBzZXF1ZW5jZSk7CisKKyAgICAvKioKKyAgICAgKiBEZWNsYXJlIHRoYXQgdGhlIGN1c3RvbSBwcmludGVyIGljb24gY2FjaGUgd2FzIGNsZWFyZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gc2VxdWVuY2UgdGhlIHNlcXVlbmNlIG51bWJlciBvZiB0aGUgY2FsbCB0byBjbGVhciB0aGUgY2FjaGUKKyAgICAgKi8KKyAgICB2b2lkIGN1c3RvbVByaW50ZXJJY29uQ2FjaGVDbGVhcmVkKGludCBzZXF1ZW5jZSk7CiB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9wcmludC9QYWdlUmFuZ2UuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50L1BhZ2VSYW5nZS5qYXZhCmluZGV4IDhiYzE1N2EuLjU3Yzc3MTggMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50L1BhZ2VSYW5nZS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50L1BhZ2VSYW5nZS5qYXZhCkBAIC0xNiw2ICsxNiw4IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5wcmludDsKIAoraW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5JbnRSYW5nZTsKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTm9uTnVsbDsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbDsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbGFibGU7CiAKQEAgLTQyLDcgKzQ0LDcgQEAKICAgICAgKiBAdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBJZiBzdGFydCBpcyBsZXNzIHRoYW4gemVybyBvciBlbmQKICAgICAgKiBpcyBsZXNzIHRoYW4gemVybyBvciBzdGFydCBncmVhdGVyIHRoYW4gZW5kLgogICAgICAqLwotICAgIHB1YmxpYyBQYWdlUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kKSB7CisgICAgcHVibGljIFBhZ2VSYW5nZShASW50UmFuZ2UoZnJvbSA9IDApIGludCBzdGFydCwgQEludFJhbmdlKGZyb20gPSAwKSBpbnQgZW5kKSB7CiAgICAgICAgIGlmIChzdGFydCA8IDApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInN0YXJ0IGNhbm5vdCBiZSBsZXNzIHRoYW4gemVyby4iKTsKICAgICAgICAgfQpAQCAtNTYsNyArNTgsNyBAQAogICAgICAgICBtRW5kID0gZW5kOwogICAgIH0KIAotICAgIHByaXZhdGUgUGFnZVJhbmdlIChQYXJjZWwgcGFyY2VsKSB7CisgICAgcHJpdmF0ZSBQYWdlUmFuZ2UoQE5vbk51bGwgUGFyY2VsIHBhcmNlbCkgewogICAgICAgICB0aGlzKHBhcmNlbC5yZWFkSW50KCksIHBhcmNlbC5yZWFkSW50KCkpOwogICAgIH0KIApAQCAtNjUsNyArNjcsNyBAQAogICAgICAqCiAgICAgICogQHJldHVybiBUaGUgc3RhcnQgcGFnZSBpbmRleC4KICAgICAgKi8KLSAgICBwdWJsaWMgaW50IGdldFN0YXJ0KCkgeworICAgIHB1YmxpYyBASW50UmFuZ2UoZnJvbSA9IDApIGludCBnZXRTdGFydCgpIHsKICAgICAgICAgcmV0dXJuIG1TdGFydDsKICAgICB9CiAKQEAgLTc0LDcgKzc2LDcgQEAKICAgICAgKgogICAgICAqIEByZXR1cm4gVGhlIGVuZCBwYWdlIGluZGV4LgogICAgICAqLwotICAgIHB1YmxpYyBpbnQgZ2V0RW5kKCkgeworICAgIHB1YmxpYyBASW50UmFuZ2UoZnJvbSA9IDApIGludCBnZXRFbmQoKSB7CiAgICAgICAgIHJldHVybiBtRW5kOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvcHJpbnQvUHJpbnRBdHRyaWJ1dGVzLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9wcmludC9QcmludEF0dHJpYnV0ZXMuamF2YQppbmRleCAyYWZiYjk5Li44ODkyZTM0IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9wcmludC9QcmludEF0dHJpYnV0ZXMuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9wcmludC9QcmludEF0dHJpYnV0ZXMuamF2YQpAQCAtMTYsNiArMTYsMTAgQEAKIAogcGFja2FnZSBhbmRyb2lkLnByaW50OwogCitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLkludERlZjsKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uSW50UmFuZ2U7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk5vbk51bGw7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk51bGxhYmxlOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuTmFtZU5vdEZvdW5kRXhjZXB0aW9uOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzLk5vdEZvdW5kRXhjZXB0aW9uOwpAQCAtMjcsNiArMzEsOCBAQAogCiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuUjsKIAoraW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvbjsKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb25Qb2xpY3k7CiBpbXBvcnQgamF2YS51dGlsLk1hcDsKIAogLyoqCkBAIC0zNyw2ICs0MywxMyBAQAogICogMTAgbWlsbHMgKHRob3VzYW5kIG9mIGFuIGluY2gpIG9uIGFsbCBzaWRlcywgYW5kIGJlIGJsYWNrIGFuZCB3aGl0ZS4KICAqLwogcHVibGljIGZpbmFsIGNsYXNzIFByaW50QXR0cmlidXRlcyBpbXBsZW1lbnRzIFBhcmNlbGFibGUgeworICAgIC8qKiBAaGlkZSAqLworICAgIEBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlNPVVJDRSkKKyAgICBASW50RGVmKGZsYWcgPSB0cnVlLCB2YWx1ZSA9IHsKKyAgICAgICAgICAgIENPTE9SX01PREVfTU9OT0NIUk9NRSwgQ09MT1JfTU9ERV9DT0xPUgorICAgIH0pCisgICAgcHVibGljIEBpbnRlcmZhY2UgQ29sb3JNb2RlIHsKKyAgICB9CiAgICAgLyoqIENvbG9yIG1vZGU6IE1vbm9jaHJvbWUgY29sb3Igc2NoZW1lLCBmb3IgZXhhbXBsZSBvbmUgY29sb3IgaXMgdXNlZC4gKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT0xPUl9NT0RFX01PTk9DSFJPTUUgPSAxIDw8IDA7CiAgICAgLyoqIENvbG9yIG1vZGU6IENvbG9yIGNvbG9yIHNjaGVtZSwgZm9yIGV4YW1wbGUgbWFueSBjb2xvcnMgYXJlIHVzZWQuICovCkBAIC00NSw2ICs1OCwxMyBAQAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBWQUxJRF9DT0xPUl9NT0RFUyA9CiAgICAgICAgICAgICBDT0xPUl9NT0RFX01PTk9DSFJPTUUgfCBDT0xPUl9NT0RFX0NPTE9SOwogCisgICAgLyoqIEBoaWRlICovCisgICAgQFJldGVudGlvbihSZXRlbnRpb25Qb2xpY3kuU09VUkNFKQorICAgIEBJbnREZWYoZmxhZyA9IHRydWUsIHZhbHVlID0geworICAgICAgICAgICAgRFVQTEVYX01PREVfTk9ORSwgRFVQTEVYX01PREVfTE9OR19FREdFLCBEVVBMRVhfTU9ERV9TSE9SVF9FREdFCisgICAgfSkKKyAgICBwdWJsaWMgQGludGVyZmFjZSBEdXBsZXhNb2RlIHsKKyAgICB9CiAgICAgLyoqIER1cGxleCBtb2RlOiBObyBkdXBsZXhpbmcuICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRFVQTEVYX01PREVfTk9ORSA9IDEgPDwgMDsKICAgICAvKiogRHVwbGV4IG1vZGU6IFBhZ2VzIGFyZSB0dXJuZWQgc2lkZXdheXMgYWxvbmcgdGhlIGxvbmcgZWRnZSAtIGxpa2UgYSBib29rLiAqLwpAQCAtNjYsNyArODYsNyBAQAogICAgICAgICAvKiBoaWRlIGNvbnN0cnVjdG9yICovCiAgICAgfQogCi0gICAgcHJpdmF0ZSBQcmludEF0dHJpYnV0ZXMoUGFyY2VsIHBhcmNlbCkgeworICAgIHByaXZhdGUgUHJpbnRBdHRyaWJ1dGVzKEBOb25OdWxsIFBhcmNlbCBwYXJjZWwpIHsKICAgICAgICAgbU1lZGlhU2l6ZSA9IChwYXJjZWwucmVhZEludCgpID09ICAxKSA/IE1lZGlhU2l6ZS5jcmVhdGVGcm9tUGFyY2VsKHBhcmNlbCkgOiBudWxsOwogICAgICAgICBtUmVzb2x1dGlvbiA9IChwYXJjZWwucmVhZEludCgpID09ICAxKSA/IFJlc29sdXRpb24uY3JlYXRlRnJvbVBhcmNlbChwYXJjZWwpIDogbnVsbDsKICAgICAgICAgbU1pbk1hcmdpbnMgPSAocGFyY2VsLnJlYWRJbnQoKSA9PSAgMSkgPyBNYXJnaW5zLmNyZWF0ZUZyb21QYXJjZWwocGFyY2VsKSA6IG51bGw7CkBAIC03OSw3ICs5OSw3IEBACiAgICAgICoKICAgICAgKiBAcmV0dXJuIFRoZSBtZWRpYSBzaXplIG9yIDxjb2RlPm51bGw8L2NvZGU+IGlmIG5vdCBzZXQuCiAgICAgICovCi0gICAgcHVibGljIE1lZGlhU2l6ZSBnZXRNZWRpYVNpemUoKSB7CisgICAgcHVibGljIEBOdWxsYWJsZSBNZWRpYVNpemUgZ2V0TWVkaWFTaXplKCkgewogICAgICAgICByZXR1cm4gbU1lZGlhU2l6ZTsKICAgICB9CiAKQEAgLTk5LDcgKzExOSw3IEBACiAgICAgICoKICAgICAgKiBAcmV0dXJuIFRoZSByZXNvbHV0aW9uIG9yIDxjb2RlPm51bGw8L2NvZGU+IGlmIG5vdCBzZXQuCiAgICAgICovCi0gICAgcHVibGljIFJlc29sdXRpb24gZ2V0UmVzb2x1dGlvbigpIHsKKyAgICBwdWJsaWMgQE51bGxhYmxlIFJlc29sdXRpb24gZ2V0UmVzb2x1dGlvbigpIHsKICAgICAgICAgcmV0dXJuIG1SZXNvbHV0aW9uOwogICAgIH0KIApAQCAtMTI3LDcgKzE0Nyw3IEBACiAgICAgICoKICAgICAgKiBAcmV0dXJuIFRoZSBtYXJnaW5zIG9yIDxjb2RlPm51bGw8L2NvZGU+IGlmIG5vdCBzZXQuCiAgICAgICovCi0gICAgcHVibGljIE1hcmdpbnMgZ2V0TWluTWFyZ2lucygpIHsKKyAgICBwdWJsaWMgQE51bGxhYmxlIE1hcmdpbnMgZ2V0TWluTWFyZ2lucygpIHsKICAgICAgICAgcmV0dXJuIG1NaW5NYXJnaW5zOwogICAgIH0KIApAQCAtMTU4LDcgKzE3OCw3IEBACiAgICAgICogQHNlZSAjQ09MT1JfTU9ERV9DT0xPUgogICAgICAqIEBzZWUgI0NPTE9SX01PREVfTU9OT0NIUk9NRQogICAgICAqLwotICAgIHB1YmxpYyBpbnQgZ2V0Q29sb3JNb2RlKCkgeworICAgIHB1YmxpYyBAQ29sb3JNb2RlIGludCBnZXRDb2xvck1vZGUoKSB7CiAgICAgICAgIHJldHVybiBtQ29sb3JNb2RlOwogICAgIH0KIApAQCAtMTk5LDcgKzIxOSw3IEBACiAgICAgICogQHNlZSAjRFVQTEVYX01PREVfTE9OR19FREdFCiAgICAgICogQHNlZSAjRFVQTEVYX01PREVfU0hPUlRfRURHRQogICAgICAqLwotICAgIHB1YmxpYyBpbnQgZ2V0RHVwbGV4TW9kZSgpIHsKKyAgICBwdWJsaWMgQER1cGxleE1vZGUgaW50IGdldER1cGxleE1vZGUoKSB7CiAgICAgICAgIHJldHVybiBtRHVwbGV4TW9kZTsKICAgICB9CiAKQEAgLTgyOCw3ICs4NDgsOCBAQAogICAgICAgICAgKiBvciB0aGUgd2lkdGhNaWxzIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB6ZXJvIG9yIHRoZSBoZWlnaHRNaWxzIGlzIGxlc3MKICAgICAgICAgICogdGhhbiBvciBlcXVhbCB0byB6ZXJvLgogICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIE1lZGlhU2l6ZShTdHJpbmcgaWQsIFN0cmluZyBsYWJlbCwgaW50IHdpZHRoTWlscywgaW50IGhlaWdodE1pbHMpIHsKKyAgICAgICAgcHVibGljIE1lZGlhU2l6ZShATm9uTnVsbCBTdHJpbmcgaWQsIEBOb25OdWxsIFN0cmluZyBsYWJlbCwKKyAgICAgICAgICAgICAgICBASW50UmFuZ2UoZnJvbSA9IDEpIGludCB3aWR0aE1pbHMsIEBJbnRSYW5nZShmcm9tID0gMSkgaW50IGhlaWdodE1pbHMpIHsKICAgICAgICAgICAgIGlmIChUZXh0VXRpbHMuaXNFbXB0eShpZCkpIHsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJpZCBjYW5ub3QgYmUgZW1wdHkuIik7CiAgICAgICAgICAgICB9CkBAIC04NzIsNyArODkzLDcgQEAKICAgICAgICAgICoKICAgICAgICAgICogQHJldHVybiBUaGUgdW5pcXVlIG1lZGlhIHNpemUgaWQuCiAgICAgICAgICAqLwotICAgICAgICBwdWJsaWMgU3RyaW5nIGdldElkKCkgeworICAgICAgICBwdWJsaWMgQE5vbk51bGwgU3RyaW5nIGdldElkKCkgewogICAgICAgICAgICAgcmV0dXJuIG1JZDsKICAgICAgICAgfQogCkBAIC04ODIsNyArOTAzLDcgQEAKICAgICAgICAgICogQHBhcmFtIHBhY2thZ2VNYW5hZ2VyIFRoZSBwYWNrYWdlIG1hbmFnZXIgZm9yIGxvYWRpbmcgdGhlIGxhYmVsLgogICAgICAgICAgKiBAcmV0dXJuIFRoZSBodW1hbiByZWFkYWJsZSBsYWJlbC4KICAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0TGFiZWwoUGFja2FnZU1hbmFnZXIgcGFja2FnZU1hbmFnZXIpIHsKKyAgICAgICAgcHVibGljIEBOb25OdWxsIFN0cmluZyBnZXRMYWJlbChATm9uTnVsbCBQYWNrYWdlTWFuYWdlciBwYWNrYWdlTWFuYWdlcikgewogICAgICAgICAgICAgaWYgKCFUZXh0VXRpbHMuaXNFbXB0eShtUGFja2FnZU5hbWUpICYmIG1MYWJlbFJlc0lkID4gMCkgewogICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYWNrYWdlTWFuYWdlci5nZXRSZXNvdXJjZXNGb3JBcHBsaWNhdGlvbigKQEAgLTkwMyw3ICs5MjQsNyBAQAogICAgICAgICAgKgogICAgICAgICAgKiBAcmV0dXJuIFRoZSBtZWRpYSB3aWR0aC4KICAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBpbnQgZ2V0V2lkdGhNaWxzKCkgeworICAgICAgICBwdWJsaWMgQEludFJhbmdlKGZyb20gPSAxKSBpbnQgZ2V0V2lkdGhNaWxzKCkgewogICAgICAgICAgICAgcmV0dXJuIG1XaWR0aE1pbHM7CiAgICAgICAgIH0KIApAQCAtOTEyLDcgKzkzMyw3IEBACiAgICAgICAgICAqCiAgICAgICAgICAqIEByZXR1cm4gVGhlIG1lZGlhIGhlaWdodC4KICAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBpbnQgZ2V0SGVpZ2h0TWlscygpIHsKKyAgICAgICAgcHVibGljIEBJbnRSYW5nZShmcm9tID0gMSkgaW50IGdldEhlaWdodE1pbHMoKSB7CiAgICAgICAgICAgICByZXR1cm4gbUhlaWdodE1pbHM7CiAgICAgICAgIH0KIApAQCAtOTM0LDcgKzk1NSw3IEBACiAgICAgICAgICAqIEByZXR1cm4gTmV3IGluc3RhbmNlIGluIGxhbmRzY2FwZSBvcmllbnRhdGlvbiBpZiB0aGlzIG9uZQogICAgICAgICAgKiBpcyBpbiBsYW5kc2NhcGUsIG90aGVyd2lzZSB0aGlzIGluc3RhbmNlLgogICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIE1lZGlhU2l6ZSBhc1BvcnRyYWl0KCkgeworICAgICAgICBwdWJsaWMgQE5vbk51bGwgTWVkaWFTaXplIGFzUG9ydHJhaXQoKSB7CiAgICAgICAgICAgICBpZiAoaXNQb3J0cmFpdCgpKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgICAgICB9CkBAIC05NTEsNyArOTcyLDcgQEAKICAgICAgICAgICogQHJldHVybiBOZXcgaW5zdGFuY2UgaW4gbGFuZHNjYXBlIG9yaWVudGF0aW9uIGlmIHRoaXMgb25lCiAgICAgICAgICAqIGlzIGluIHBvcnRyYWl0LCBvdGhlcndpc2UgdGhpcyBpbnN0YW5jZS4KICAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBNZWRpYVNpemUgYXNMYW5kc2NhcGUoKSB7CisgICAgICAgIHB1YmxpYyBATm9uTnVsbCBNZWRpYVNpemUgYXNMYW5kc2NhcGUoKSB7CiAgICAgICAgICAgICBpZiAoIWlzUG9ydHJhaXQoKSkgewogICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICAgfQpAQCAtMTA2Myw3ICsxMDg0LDggQEAKICAgICAgICAgICogb3IgdGhlIGhvcml6b250YWxEcGkgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHplcm8gb3IgdGhlIHZlcnRpY2FsRHBpIGlzCiAgICAgICAgICAqIGxlc3MgdGhhbiBvciBlcXVhbCB0byB6ZXJvLgogICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIFJlc29sdXRpb24oU3RyaW5nIGlkLCBTdHJpbmcgbGFiZWwsIGludCBob3Jpem9udGFsRHBpLCBpbnQgdmVydGljYWxEcGkpIHsKKyAgICAgICAgcHVibGljIFJlc29sdXRpb24oQE5vbk51bGwgU3RyaW5nIGlkLCBATm9uTnVsbCBTdHJpbmcgbGFiZWwsCisgICAgICAgICAgICAgICAgQEludFJhbmdlKGZyb20gPSAxKSBpbnQgaG9yaXpvbnRhbERwaSwgQEludFJhbmdlKGZyb20gPSAxKSBpbnQgdmVydGljYWxEcGkpIHsKICAgICAgICAgICAgIGlmIChUZXh0VXRpbHMuaXNFbXB0eShpZCkpIHsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJpZCBjYW5ub3QgYmUgZW1wdHkuIik7CiAgICAgICAgICAgICB9CkBAIC0xMDk0LDcgKzExMTYsNyBAQAogICAgICAgICAgKgogICAgICAgICAgKiBAcmV0dXJuIFRoZSB1bmlxdWUgcmVzb2x1dGlvbiBpZC4KICAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0SWQoKSB7CisgICAgICAgIHB1YmxpYyBATm9uTnVsbCBTdHJpbmcgZ2V0SWQoKSB7CiAgICAgICAgICAgICByZXR1cm4gbUlkOwogICAgICAgICB9CiAKQEAgLTExMDMsNyArMTEyNSw3IEBACiAgICAgICAgICAqCiAgICAgICAgICAqIEByZXR1cm4gVGhlIGh1bWFuIHJlYWRhYmxlIGxhYmVsLgogICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIFN0cmluZyBnZXRMYWJlbCgpIHsKKyAgICAgICAgcHVibGljIEBOb25OdWxsIFN0cmluZyBnZXRMYWJlbCgpIHsKICAgICAgICAgICAgIHJldHVybiBtTGFiZWw7CiAgICAgICAgIH0KIApAQCAtMTExMiw3ICsxMTM0LDcgQEAKICAgICAgICAgICoKICAgICAgICAgICogQHJldHVybiBUaGUgaG9yaXpvbnRhbCByZXNvbHV0aW9uLgogICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIGludCBnZXRIb3Jpem9udGFsRHBpKCkgeworICAgICAgICBwdWJsaWMgQEludFJhbmdlKGZyb20gPSAxKSBpbnQgZ2V0SG9yaXpvbnRhbERwaSgpIHsKICAgICAgICAgICAgIHJldHVybiBtSG9yaXpvbnRhbERwaTsKICAgICAgICAgfQogCkBAIC0xMTIxLDcgKzExNDMsNyBAQAogICAgICAgICAgKgogICAgICAgICAgKiBAcmV0dXJuIFRoZSB2ZXJ0aWNhbCByZXNvbHV0aW9uLgogICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIGludCBnZXRWZXJ0aWNhbERwaSgpIHsKKyAgICAgICAgcHVibGljIEBJbnRSYW5nZShmcm9tID0gMSkgaW50IGdldFZlcnRpY2FsRHBpKCkgewogICAgICAgICAgICAgcmV0dXJuIG1WZXJ0aWNhbERwaTsKICAgICAgICAgfQogCkBAIC0xMjA0LDcgKzEyMjYsOCBAQAogICAgICAgICAgKiBAcGFyYW0gcmlnaHRNaWxzIFRoZSByaWdodCBtYXJnaW4gaW4gbWlscyAodGhvdXNhbmRzIG9mIGFuIGluY2gpLgogICAgICAgICAgKiBAcGFyYW0gYm90dG9tTWlscyBUaGUgYm90dG9tIG1hcmdpbiBpbiBtaWxzICh0aG91c2FuZHMgb2YgYW4gaW5jaCkuCiAgICAgICAgICAqLwotICAgICAgICBwdWJsaWMgTWFyZ2lucyhpbnQgbGVmdE1pbHMsIGludCB0b3BNaWxzLCBpbnQgcmlnaHRNaWxzLCBpbnQgYm90dG9tTWlscykgeworICAgICAgICBwdWJsaWMgTWFyZ2lucyhASW50UmFuZ2UoZnJvbSA9IDApIGludCBsZWZ0TWlscywgQEludFJhbmdlKGZyb20gPSAwKSBpbnQgdG9wTWlscywKKyAgICAgICAgICAgICAgICBASW50UmFuZ2UoZnJvbSA9IDApIGludCByaWdodE1pbHMsIEBJbnRSYW5nZShmcm9tID0gMCkgaW50IGJvdHRvbU1pbHMpIHsKICAgICAgICAgICAgIG1Ub3BNaWxzID0gdG9wTWlsczsKICAgICAgICAgICAgIG1MZWZ0TWlscyA9IGxlZnRNaWxzOwogICAgICAgICAgICAgbVJpZ2h0TWlscyA9IHJpZ2h0TWlsczsKQEAgLTEyMTYsNyArMTIzOSw3IEBACiAgICAgICAgICAqCiAgICAgICAgICAqIEByZXR1cm4gVGhlIGxlZnQgbWFyZ2luLgogICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIGludCBnZXRMZWZ0TWlscygpIHsKKyAgICAgICAgcHVibGljIEBJbnRSYW5nZShmcm9tID0gMCkgaW50IGdldExlZnRNaWxzKCkgewogICAgICAgICAgICAgcmV0dXJuIG1MZWZ0TWlsczsKICAgICAgICAgfQogCkBAIC0xMjI1LDcgKzEyNDgsNyBAQAogICAgICAgICAgKgogICAgICAgICAgKiBAcmV0dXJuIFRoZSB0b3AgbWFyZ2luLgogICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIGludCBnZXRUb3BNaWxzKCkgeworICAgICAgICBwdWJsaWMgQEludFJhbmdlKGZyb20gPSAwKSBpbnQgZ2V0VG9wTWlscygpIHsKICAgICAgICAgICAgIHJldHVybiBtVG9wTWlsczsKICAgICAgICAgfQogCkBAIC0xMjM0LDcgKzEyNTcsNyBAQAogICAgICAgICAgKgogICAgICAgICAgKiBAcmV0dXJuIFRoZSByaWdodCBtYXJnaW4uCiAgICAgICAgICAqLwotICAgICAgICBwdWJsaWMgaW50IGdldFJpZ2h0TWlscygpIHsKKyAgICAgICAgcHVibGljIEBJbnRSYW5nZShmcm9tID0gMCkgaW50IGdldFJpZ2h0TWlscygpIHsKICAgICAgICAgICAgIHJldHVybiBtUmlnaHRNaWxzOwogICAgICAgICB9CiAKQEAgLTEyNDMsNyArMTI2Niw3IEBACiAgICAgICAgICAqCiAgICAgICAgICAqIEByZXR1cm4gVGhlIGJvdHRvbSBtYXJnaW4uCiAgICAgICAgICAqLwotICAgICAgICBwdWJsaWMgaW50IGdldEJvdHRvbU1pbHMoKSB7CisgICAgICAgIHB1YmxpYyBASW50UmFuZ2UoZnJvbSA9IDApIGludCBnZXRCb3R0b21NaWxzKCkgewogICAgICAgICAgICAgcmV0dXJuIG1Cb3R0b21NaWxzOwogICAgICAgICB9CiAKQEAgLTEzNjgsNyArMTM5MSw3IEBACiAgICAgICAgICAqIEBwYXJhbSBtZWRpYVNpemUgVGhlIG1lZGlhIHNpemUuCiAgICAgICAgICAqIEByZXR1cm4gVGhpcyBidWlsZGVyLgogICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0TWVkaWFTaXplKE1lZGlhU2l6ZSBtZWRpYVNpemUpIHsKKyAgICAgICAgcHVibGljIEBOb25OdWxsIEJ1aWxkZXIgc2V0TWVkaWFTaXplKEBOb25OdWxsIE1lZGlhU2l6ZSBtZWRpYVNpemUpIHsKICAgICAgICAgICAgIG1BdHRyaWJ1dGVzLnNldE1lZGlhU2l6ZShtZWRpYVNpemUpOwogICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgIH0KQEAgLTEzNzksNyArMTQwMiw3IEBACiAgICAgICAgICAqIEBwYXJhbSByZXNvbHV0aW9uIFRoZSByZXNvbHV0aW9uLgogICAgICAgICAgKiBAcmV0dXJuIFRoaXMgYnVpbGRlci4KICAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldFJlc29sdXRpb24oUmVzb2x1dGlvbiByZXNvbHV0aW9uKSB7CisgICAgICAgIHB1YmxpYyBATm9uTnVsbCBCdWlsZGVyIHNldFJlc29sdXRpb24oQE5vbk51bGwgUmVzb2x1dGlvbiByZXNvbHV0aW9uKSB7CiAgICAgICAgICAgICBtQXR0cmlidXRlcy5zZXRSZXNvbHV0aW9uKHJlc29sdXRpb24pOwogICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgIH0KQEAgLTEzOTEsNyArMTQxNCw3IEBACiAgICAgICAgICAqIEBwYXJhbSBtYXJnaW5zIFRoZSBtYXJnaW5zLgogICAgICAgICAgKiBAcmV0dXJuIFRoaXMgYnVpbGRlci4KICAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldE1pbk1hcmdpbnMoTWFyZ2lucyBtYXJnaW5zKSB7CisgICAgICAgIHB1YmxpYyBATm9uTnVsbCBCdWlsZGVyIHNldE1pbk1hcmdpbnMoQE5vbk51bGwgTWFyZ2lucyBtYXJnaW5zKSB7CiAgICAgICAgICAgICBtQXR0cmlidXRlcy5zZXRNaW5NYXJnaW5zKG1hcmdpbnMpOwogICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgIH0KQEAgLTE0MDUsNyArMTQyOCw3IEBACiAgICAgICAgICAqIEBzZWUgUHJpbnRBdHRyaWJ1dGVzI0NPTE9SX01PREVfTU9OT0NIUk9NRQogICAgICAgICAgKiBAc2VlIFByaW50QXR0cmlidXRlcyNDT0xPUl9NT0RFX0NPTE9SCiAgICAgICAgICAqLwotICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXRDb2xvck1vZGUoaW50IGNvbG9yTW9kZSkgeworICAgICAgICBwdWJsaWMgQE5vbk51bGwgQnVpbGRlciBzZXRDb2xvck1vZGUoQENvbG9yTW9kZSBpbnQgY29sb3JNb2RlKSB7CiAgICAgICAgICAgICBtQXR0cmlidXRlcy5zZXRDb2xvck1vZGUoY29sb3JNb2RlKTsKICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICB9CkBAIC0xNDIwLDcgKzE0NDMsNyBAQAogICAgICAgICAgKiBAc2VlIFByaW50QXR0cmlidXRlcyNEVVBMRVhfTU9ERV9MT05HX0VER0UKICAgICAgICAgICogQHNlZSBQcmludEF0dHJpYnV0ZXMjRFVQTEVYX01PREVfU0hPUlRfRURHRQogICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0RHVwbGV4TW9kZShpbnQgZHVwbGV4TW9kZSkgeworICAgICAgICBwdWJsaWMgQE5vbk51bGwgQnVpbGRlciBzZXREdXBsZXhNb2RlKEBEdXBsZXhNb2RlIGludCBkdXBsZXhNb2RlKSB7CiAgICAgICAgICAgICBtQXR0cmlidXRlcy5zZXREdXBsZXhNb2RlKGR1cGxleE1vZGUpOwogICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgIH0KQEAgLTE0MzAsNyArMTQ1Myw3IEBACiAgICAgICAgICAqCiAgICAgICAgICAqIEByZXR1cm4gVGhlIG5ldyBpbnN0YW5jZS4KICAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBQcmludEF0dHJpYnV0ZXMgYnVpbGQoKSB7CisgICAgICAgIHB1YmxpYyBATm9uTnVsbCBQcmludEF0dHJpYnV0ZXMgYnVpbGQoKSB7CiAgICAgICAgICAgICByZXR1cm4gbUF0dHJpYnV0ZXM7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9wcmludC9QcmludERvY3VtZW50SW5mby5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJpbnQvUHJpbnREb2N1bWVudEluZm8uamF2YQppbmRleCA0NGU2NDEwLi5kYjNiNmY0IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9wcmludC9QcmludERvY3VtZW50SW5mby5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50L1ByaW50RG9jdW1lbnRJbmZvLmphdmEKQEAgLTE2LDEwICsxNiwxNiBAQAogCiBwYWNrYWdlIGFuZHJvaWQucHJpbnQ7CiAKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uSW50RGVmOworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5JbnRSYW5nZTsKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTm9uTnVsbDsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbDsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbGFibGU7CiBpbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRVdGlsczsKIAoraW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvbjsKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb25Qb2xpY3k7CisKIC8qKgogICogVGhpcyBjbGFzcyBlbmNhcHN1bGF0ZXMgaW5mb3JtYXRpb24gYWJvdXQgYSBkb2N1bWVudCBmb3IgcHJpbnRpbmcKICAqIHB1cnBvc2VzLiBUaGlzIG1ldGEtZGF0YSBpcyB1c2VkIGJ5IHRoZSBwbGF0Zm9ybSBhbmQgcHJpbnQgc2VydmljZXMsCkBAIC03NCw2ICs4MCwxMyBAQAogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBBR0VfQ09VTlRfVU5LTk9XTiA9IC0xOwogCisgICAgLyoqIEBoaWRlICovCisgICAgQFJldGVudGlvbihSZXRlbnRpb25Qb2xpY3kuU09VUkNFKQorICAgIEBJbnREZWYoeworICAgICAgICAgICAgQ09OVEVOVF9UWVBFX1VOS05PV04sIENPTlRFTlRfVFlQRV9ET0NVTUVOVCwgQ09OVEVOVF9UWVBFX1BIT1RPCisgICAgfSkKKyAgICBwdWJsaWMgQGludGVyZmFjZSBDb250ZW50VHlwZSB7CisgICAgfQogICAgIC8qKgogICAgICAqIENvbnRlbnQgdHlwZTogdW5rbm93bi4KICAgICAgKi8KQEAgLTExNiw5ICsxMjksOSBAQAogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0gUHJvdG90eXBlIGZyb20gd2hpY2ggdG8gY2xvbmUuCisgICAgICogQHBhcmFtIHByb3RvdHlwZSBmcm9tIHdoaWNoIHRvIGNsb25lLgogICAgICAqLwotICAgIHByaXZhdGUgUHJpbnREb2N1bWVudEluZm8oUHJpbnREb2N1bWVudEluZm8gcHJvdG90eXBlKSB7CisgICAgcHJpdmF0ZSBQcmludERvY3VtZW50SW5mbyhATm9uTnVsbCBQcmludERvY3VtZW50SW5mbyBwcm90b3R5cGUpIHsKICAgICAgICAgbU5hbWUgPSBwcm90b3R5cGUubU5hbWU7CiAgICAgICAgIG1QYWdlQ291bnQgPSBwcm90b3R5cGUubVBhZ2VDb3VudDsKICAgICAgICAgbUNvbnRlbnRUeXBlID0gcHJvdG90eXBlLm1Db250ZW50VHlwZTsKQEAgLTE0Myw3ICsxNTYsNyBAQAogICAgICAqCiAgICAgICogQHJldHVybiBUaGUgZG9jdW1lbnQgbmFtZS4KICAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CisgICAgcHVibGljIEBOb25OdWxsIFN0cmluZyBnZXROYW1lKCkgewogICAgICAgICByZXR1cm4gbU5hbWU7CiAgICAgfQogCkBAIC0xNTQsNyArMTY3LDcgQEAKICAgICAgKgogICAgICAqIEBzZWUgI1BBR0VfQ09VTlRfVU5LTk9XTgogICAgICAqLwotICAgIHB1YmxpYyBpbnQgZ2V0UGFnZUNvdW50KCkgeworICAgIHB1YmxpYyBASW50UmFuZ2UoZnJvbSA9IC0xKSBpbnQgZ2V0UGFnZUNvdW50KCkgewogICAgICAgICByZXR1cm4gbVBhZ2VDb3VudDsKICAgICB9CiAKQEAgLTE2Nyw3ICsxODAsNyBAQAogICAgICAqIEBzZWUgI0NPTlRFTlRfVFlQRV9ET0NVTUVOVAogICAgICAqIEBzZWUgI0NPTlRFTlRfVFlQRV9QSE9UTwogICAgICAqLwotICAgIHB1YmxpYyBpbnQgZ2V0Q29udGVudFR5cGUoKSB7CisgICAgcHVibGljIEBDb250ZW50VHlwZSBpbnQgZ2V0Q29udGVudFR5cGUoKSB7CiAgICAgICAgIHJldHVybiBtQ29udGVudFR5cGU7CiAgICAgfQogCkBAIC0xNzYsNyArMTg5LDcgQEAKICAgICAgKgogICAgICAqIEByZXR1cm4gVGhlIGRhdGEgc2l6ZS4KICAgICAgKi8KLSAgICBwdWJsaWMgbG9uZyBnZXREYXRhU2l6ZSgpIHsKKyAgICBwdWJsaWMgQEludFJhbmdlKGZyb20gPSAwKSBsb25nIGdldERhdGFTaXplKCkgewogICAgICAgICByZXR1cm4gbURhdGFTaXplOwogICAgIH0KIApAQCAtMTg3LDcgKzIwMCw3IEBACiAgICAgICoKICAgICAgKiBAaGlkZQogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldERhdGFTaXplKGxvbmcgZGF0YVNpemUpIHsKKyAgICBwdWJsaWMgdm9pZCBzZXREYXRhU2l6ZShASW50UmFuZ2UoZnJvbSA9IDApIGxvbmcgZGF0YVNpemUpIHsKICAgICAgICAgbURhdGFTaXplID0gZGF0YVNpemU7CiAgICAgfQogCkBAIC0yODgsNyArMzAxLDcgQEAKICAgICAgICAgICogaXMgdGhlIGZpbGUgbmFtZSBpZiB0aGUgY29udGVudCBpdCBkZXNjcmliZXMgaXMgc2F2ZWQgYXMgYSBQREYuCiAgICAgICAgICAqIENhbm5vdCBiZSBlbXB0eS4gCiAgICAgICAgICAqLwotICAgICAgICBwdWJsaWMgQnVpbGRlcihTdHJpbmcgbmFtZSkgeworICAgICAgICBwdWJsaWMgQnVpbGRlcihATm9uTnVsbCBTdHJpbmcgbmFtZSkgewogICAgICAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KG5hbWUpKSB7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigibmFtZSBjYW5ub3QgYmUgZW1wdHkiKTsKICAgICAgICAgICAgIH0KQEAgLTMwMiwxMCArMzE1LDExIEBACiAgICAgICAgICAqIDxzdHJvbmc+RGVmYXVsdDogPC9zdHJvbmc+IHtAbGluayAjUEFHRV9DT1VOVF9VTktOT1dOfQogICAgICAgICAgKiA8L3A+CiAgICAgICAgICAqCi0gICAgICAgICAqIEBwYXJhbSBwYWdlQ291bnQgVGhlIG51bWJlciBvZiBwYWdlcy4gTXVzdCBiZSBncmVhdGVyIHRoYW4KLSAgICAgICAgICogb3IgZXF1YWwgdG8gemVybyBvciB7QGxpbmsgUHJpbnREb2N1bWVudEluZm8jUEFHRV9DT1VOVF9VTktOT1dOfS4KKyAgICAgICAgICogQHBhcmFtIHBhZ2VDb3VudCBUaGUgbnVtYmVyIG9mIHBhZ2VzLiBNdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB6ZXJvIG9yCisgICAgICAgICAqICAgICAgICAgICAge0BsaW5rIFByaW50RG9jdW1lbnRJbmZvI1BBR0VfQ09VTlRfVU5LTk9XTn0uCisgICAgICAgICAqIEByZXR1cm4gVGhpcyBidWlsZGVyLgogICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0UGFnZUNvdW50KGludCBwYWdlQ291bnQpIHsKKyAgICAgICAgcHVibGljIEBOb25OdWxsIEJ1aWxkZXIgc2V0UGFnZUNvdW50KEBJbnRSYW5nZShmcm9tID0gLTEpIGludCBwYWdlQ291bnQpIHsKICAgICAgICAgICAgIGlmIChwYWdlQ291bnQgPCAwICYmIHBhZ2VDb3VudCAhPSBQQUdFX0NPVU5UX1VOS05PV04pIHsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJwYWdlQ291bnQiCiAgICAgICAgICAgICAgICAgICAgICAgICArICIgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVybyBvciIKQEAgLTMyMiwxMiArMzM2LDEyIEBACiAgICAgICAgICAqIDwvcD4KICAgICAgICAgICoKICAgICAgICAgICogQHBhcmFtIHR5cGUgVGhlIGNvbnRlbnQgdHlwZS4KLSAgICAgICAgICoKKyAgICAgICAgICogQHJldHVybiBUaGlzIGJ1aWxkZXIuCiAgICAgICAgICAqIEBzZWUgI0NPTlRFTlRfVFlQRV9VTktOT1dOCiAgICAgICAgICAqIEBzZWUgI0NPTlRFTlRfVFlQRV9ET0NVTUVOVAogICAgICAgICAgKiBAc2VlICNDT05URU5UX1RZUEVfUEhPVE8KICAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldENvbnRlbnRUeXBlKGludCB0eXBlKSB7CisgICAgICAgIHB1YmxpYyBATm9uTnVsbCBCdWlsZGVyIHNldENvbnRlbnRUeXBlKEBDb250ZW50VHlwZSBpbnQgdHlwZSkgewogICAgICAgICAgICAgbVByb3RvdHlwZS5tQ29udGVudFR5cGUgPSB0eXBlOwogICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgIH0KQEAgLTMzNyw3ICszNTEsNyBAQAogICAgICAgICAgKgogICAgICAgICAgKiBAcmV0dXJuIFRoZSBuZXcgaW5zdGFuY2UuCiAgICAgICAgICAqLwotICAgICAgICBwdWJsaWMgUHJpbnREb2N1bWVudEluZm8gYnVpbGQoKSB7CisgICAgICAgIHB1YmxpYyBATm9uTnVsbCBQcmludERvY3VtZW50SW5mbyBidWlsZCgpIHsKICAgICAgICAgICAgIC8vIFplcm8gcGFnZXMgaXMgdGhlIHNhbWUgYXMgdW5rbm93biBhcyBpbiB0aGlzIGNhc2UKICAgICAgICAgICAgIC8vIHdlIHdpbGwgaGF2ZSB0byBhc2sgZm9yIGFsbCBwYWdlcyBhbmQgbG9vayBhIHRoZQogICAgICAgICAgICAgLy8gd2lyaXR0ZW4gUERGIGZpbGUgZm9yIHRoZSBwYWdlIGNvdW50LgpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvcHJpbnQvUHJpbnRKb2IuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50L1ByaW50Sm9iLmphdmEKaW5kZXggMGFiZTIxOS4uNzc3YmFhYiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvcHJpbnQvUHJpbnRKb2IuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9wcmludC9QcmludEpvYi5qYXZhCkBAIC0xNiw2ICsxNiw5IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5wcmludDsKIAoraW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5Ob25OdWxsOworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKKwogLyoqCiAgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBwcmludCBqb2IgZnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgYW4KICAqIGFwcGxpY2F0aW9uLiBJdCBjb250YWlucyBiZWhhdmlvciBtZXRob2RzIGZvciBwZXJmb3JtaW5nIG9wZXJhdGlvbnMKQEAgLTQxLDcgKzQ0LDcgQEAKICAgICAgKgogICAgICAqIEByZXR1cm4gVGhlIGlkLgogICAgICAqLwotICAgIHB1YmxpYyBQcmludEpvYklkIGdldElkKCkgeworICAgIHB1YmxpYyBATm9uTnVsbCBQcmludEpvYklkIGdldElkKCkgewogICAgICAgICByZXR1cm4gbUNhY2hlZEluZm8uZ2V0SWQoKTsKICAgICB9CiAKQEAgLTU1LDcgKzU4LDcgQEAKICAgICAgKgogICAgICAqIEByZXR1cm4gVGhlIHByaW50IGpvYiBpbmZvLgogICAgICAqLwotICAgIHB1YmxpYyBQcmludEpvYkluZm8gZ2V0SW5mbygpIHsKKyAgICBwdWJsaWMgQE51bGxhYmxlIFByaW50Sm9iSW5mbyBnZXRJbmZvKCkgewogICAgICAgICBpZiAoaXNJbkltbXV0YWJsZVN0YXRlKCkpIHsKICAgICAgICAgICAgIHJldHVybiBtQ2FjaGVkSW5mbzsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvcHJpbnQvUHJpbnRKb2JJZC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJpbnQvUHJpbnRKb2JJZC5qYXZhCmluZGV4IDAxNTUwZTIuLmEyZWUwMmIgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50L1ByaW50Sm9iSWQuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9wcmludC9QcmludEpvYklkLmphdmEKQEAgLTE2LDYgKzE2LDcgQEAKIAogcGFja2FnZSBhbmRyb2lkLnByaW50OwogCitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk5vbk51bGw7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOwogaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7CkBAIC05MSwxNCArOTIsMTQgQEAKICAgICAgKgogICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgcHVibGljIFN0cmluZyBmbGF0dGVuVG9TdHJpbmcoKSB7CisgICAgcHVibGljIEBOb25OdWxsIFN0cmluZyBmbGF0dGVuVG9TdHJpbmcoKSB7CiAgICAgICAgIHJldHVybiBtVmFsdWU7CiAgICAgfQogCiAgICAgLyoqCiAgICAgICogVW5mbGF0dGVucyBhIHByaW50IGpvYiBpZCBmcm9tIGEgc3RyaW5nLgogICAgICAqCi0gICAgICogQHN0cmluZyBUaGUgc3RyaW5nLgorICAgICAqIEBwYXJhbSBzdHJpbmcgVGhlIHN0cmluZy4KICAgICAgKiBAcmV0dXJuIFRoZSB1bmZsYXR0ZW5lZCBpZCwgb3IgbnVsbCBpZiB0aGUgc3RyaW5nIGlzIG1hbGZvcm1lZC4KICAgICAgKgogICAgICAqIEBoaWRlCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9wcmludC9QcmludEpvYkluZm8uamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50L1ByaW50Sm9iSW5mby5qYXZhCmluZGV4IDcxNDhjODcuLjIxODM2YjMgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50L1ByaW50Sm9iSW5mby5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50L1ByaW50Sm9iSW5mby5qYXZhCkBAIC0xNyw2ICsxNyw5IEBACiBwYWNrYWdlIGFuZHJvaWQucHJpbnQ7CiAKIGltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uRmxvYXRSYW5nZTsKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uSW50RGVmOworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5JbnRSYW5nZTsKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTm9uTnVsbDsKIGltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTnVsbGFibGU7CiBpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlRlc3RBcGk7CiBpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CkBAIC0yNSw2ICsyOCw4IEBACiAKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLlByZWNvbmRpdGlvbnM7CiAKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb247CitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uUG9saWN5OwogaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CiAKIC8qKgpAQCAtMzUsNiArNDAsMTUgQEAKICAqLwogcHVibGljIGZpbmFsIGNsYXNzIFByaW50Sm9iSW5mbyBpbXBsZW1lbnRzIFBhcmNlbGFibGUgewogCisgICAgLyoqIEBoaWRlICovCisgICAgQEludERlZih7CisgICAgICAgICAgICBTVEFURV9DUkVBVEVELCBTVEFURV9RVUVVRUQsIFNUQVRFX1NUQVJURUQsIFNUQVRFX0JMT0NLRUQsIFNUQVRFX0NPTVBMRVRFRCwKKyAgICAgICAgICAgIFNUQVRFX0ZBSUxFRCwgU1RBVEVfQ0FOQ0VMRUQKKyAgICB9KQorICAgIEBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlNPVVJDRSkKKyAgICBwdWJsaWMgQGludGVyZmFjZSBTdGF0ZSB7CisgICAgfQorCiAgICAgLyoqCiAgICAgICogQ29uc3RhbnQgZm9yIG1hdGNoaW5nIGFueSBwcmludCBqb2Igc3RhdGUuCiAgICAgICoKQEAgLTIwMCw3ICsyMTQsNyBAQAogICAgICAgICBtQWR2YW5jZWRPcHRpb25zID0gb3RoZXIubUFkdmFuY2VkT3B0aW9uczsKICAgICB9CiAKLSAgICBwcml2YXRlIFByaW50Sm9iSW5mbyhQYXJjZWwgcGFyY2VsKSB7CisgICAgcHJpdmF0ZSBQcmludEpvYkluZm8oQE5vbk51bGwgUGFyY2VsIHBhcmNlbCkgewogICAgICAgICBtSWQgPSBwYXJjZWwucmVhZFBhcmNlbGFibGUobnVsbCk7CiAgICAgICAgIG1MYWJlbCA9IHBhcmNlbC5yZWFkU3RyaW5nKCk7CiAgICAgICAgIG1QcmludGVySWQgPSBwYXJjZWwucmVhZFBhcmNlbGFibGUobnVsbCk7CkBAIC0yMzAsNyArMjQ0LDcgQEAKICAgICAgKgogICAgICAqIEByZXR1cm4gVGhlIGlkLgogICAgICAqLwotICAgIHB1YmxpYyBQcmludEpvYklkIGdldElkKCkgeworICAgIHB1YmxpYyBATm9uTnVsbCBQcmludEpvYklkIGdldElkKCkgewogICAgICAgICByZXR1cm4gbUlkOwogICAgIH0KIApAQCAtMjQxLDcgKzI1NSw3IEBACiAgICAgICoKICAgICAgKiBAaGlkZQogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldElkKFByaW50Sm9iSWQgaWQpIHsKKyAgICBwdWJsaWMgdm9pZCBzZXRJZChATm9uTnVsbCBQcmludEpvYklkIGlkKSB7CiAgICAgICAgIHRoaXMubUlkID0gaWQ7CiAgICAgfQogCkBAIC0yNTAsNyArMjY0LDcgQEAKICAgICAgKgogICAgICAqIEByZXR1cm4gVGhlIGxhYmVsLgogICAgICAqLwotICAgIHB1YmxpYyBTdHJpbmcgZ2V0TGFiZWwoKSB7CisgICAgcHVibGljIEBOb25OdWxsIFN0cmluZyBnZXRMYWJlbCgpIHsKICAgICAgICAgcmV0dXJuIG1MYWJlbDsKICAgICB9CiAKQEAgLTI2MSw3ICsyNzUsNyBAQAogICAgICAqCiAgICAgICogQGhpZGUKICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRMYWJlbChTdHJpbmcgbGFiZWwpIHsKKyAgICBwdWJsaWMgdm9pZCBzZXRMYWJlbChATm9uTnVsbCBTdHJpbmcgbGFiZWwpIHsKICAgICAgICAgbUxhYmVsID0gbGFiZWw7CiAgICAgfQogCkBAIC0yNzAsNyArMjg0LDcgQEAKICAgICAgKgogICAgICAqIEByZXR1cm4gVGhlIHRhcmdldCBwcmludGVyIGlkLgogICAgICAqLwotICAgIHB1YmxpYyBQcmludGVySWQgZ2V0UHJpbnRlcklkKCkgeworICAgIHB1YmxpYyBATnVsbGFibGUgUHJpbnRlcklkIGdldFByaW50ZXJJZCgpIHsKICAgICAgICAgcmV0dXJuIG1QcmludGVySWQ7CiAgICAgfQogCkBAIC0yODEsNyArMjk1LDcgQEAKICAgICAgKgogICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0UHJpbnRlcklkKFByaW50ZXJJZCBwcmludGVySWQpIHsKKyAgICBwdWJsaWMgdm9pZCBzZXRQcmludGVySWQoQE5vbk51bGwgUHJpbnRlcklkIHByaW50ZXJJZCkgewogICAgICAgICBtUHJpbnRlcklkID0gcHJpbnRlcklkOwogICAgIH0KIApAQCAtMjkyLDcgKzMwNiw3IEBACiAgICAgICoKICAgICAgKiBAaGlkZQogICAgICAqLwotICAgIHB1YmxpYyBTdHJpbmcgZ2V0UHJpbnRlck5hbWUoKSB7CisgICAgcHVibGljIEBOdWxsYWJsZSBTdHJpbmcgZ2V0UHJpbnRlck5hbWUoKSB7CiAgICAgICAgIHJldHVybiBtUHJpbnRlck5hbWU7CiAgICAgfQogCkBAIC0zMDMsNyArMzE3LDcgQEAKICAgICAgKgogICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0UHJpbnRlck5hbWUoU3RyaW5nIHByaW50ZXJOYW1lKSB7CisgICAgcHVibGljIHZvaWQgc2V0UHJpbnRlck5hbWUoQE5vbk51bGwgU3RyaW5nIHByaW50ZXJOYW1lKSB7CiAgICAgICAgIG1QcmludGVyTmFtZSA9IHByaW50ZXJOYW1lOwogICAgIH0KIApAQCAtMzIwLDcgKzMzNCw3IEBACiAgICAgICogQHNlZSAjU1RBVEVfRkFJTEVECiAgICAgICogQHNlZSAjU1RBVEVfQ0FOQ0VMRUQKICAgICAgKi8KLSAgICBwdWJsaWMgaW50IGdldFN0YXRlKCkgeworICAgIHB1YmxpYyBAU3RhdGUgaW50IGdldFN0YXRlKCkgewogICAgICAgICByZXR1cm4gbVN0YXRlOwogICAgIH0KIApAQCAtNDMxLDcgKzQ0NSw3IEBACiAgICAgICoKICAgICAgKiBAcmV0dXJuIFRoZSBudW1iZXIgb2YgY29waWVzIG9yIHplcm8gaWYgbm90IHNldC4KICAgICAgKi8KLSAgICBwdWJsaWMgaW50IGdldENvcGllcygpIHsKKyAgICBwdWJsaWMgQEludFJhbmdlKGZyb20gPSAwKSBpbnQgZ2V0Q29waWVzKCkgewogICAgICAgICByZXR1cm4gbUNvcGllczsKICAgICB9CiAKQEAgLTQ1NCw3ICs0NjgsNyBAQAogICAgICAqCiAgICAgICogQHJldHVybiBUaGUgaW5jbHVkZWQgcGFnZXMgb3IgPGNvZGU+bnVsbDwvY29kZT4gaWYgbm90IHNldC4KICAgICAgKi8KLSAgICBwdWJsaWMgUGFnZVJhbmdlW10gZ2V0UGFnZXMoKSB7CisgICAgcHVibGljIEBOdWxsYWJsZSBQYWdlUmFuZ2VbXSBnZXRQYWdlcygpIHsKICAgICAgICAgcmV0dXJuIG1QYWdlUmFuZ2VzOwogICAgIH0KIApAQCAtNDc0LDcgKzQ4OCw3IEBACiAgICAgICoKICAgICAgKiBAcmV0dXJuIFRoZSBhdHRyaWJ1dGVzLgogICAgICAqLwotICAgIHB1YmxpYyBQcmludEF0dHJpYnV0ZXMgZ2V0QXR0cmlidXRlcygpIHsKKyAgICBwdWJsaWMgQE5vbk51bGwgUHJpbnRBdHRyaWJ1dGVzIGdldEF0dHJpYnV0ZXMoKSB7CiAgICAgICAgIHJldHVybiBtQXR0cmlidXRlczsKICAgICB9CiAKQEAgLTcxMyw3ICs3MjcsNyBAQAogICAgICAgICAgKiBAcGFyYW0gcHJvdG90eXBlIFByb3RvdHlwZSB0byB1c2UgYXMgYSBzdGFydGluZyBwb2ludC4KICAgICAgICAgICogQ2FuIGJlIDxjb2RlPm51bGw8L2NvZGU+LgogICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIEJ1aWxkZXIoUHJpbnRKb2JJbmZvIHByb3RvdHlwZSkgeworICAgICAgICBwdWJsaWMgQnVpbGRlcihATnVsbGFibGUgUHJpbnRKb2JJbmZvIHByb3RvdHlwZSkgewogICAgICAgICAgICAgbVByb3RvdHlwZSA9IChwcm90b3R5cGUgIT0gbnVsbCkKICAgICAgICAgICAgICAgICAgICAgPyBuZXcgUHJpbnRKb2JJbmZvKHByb3RvdHlwZSkKICAgICAgICAgICAgICAgICAgICAgOiBuZXcgUHJpbnRKb2JJbmZvKCk7CkBAIC03MjQsNyArNzM4LDcgQEAKICAgICAgICAgICoKICAgICAgICAgICogQHBhcmFtIGNvcGllcyBUaGUgbnVtYmVyIG9mIGNvcGllcy4KICAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyB2b2lkIHNldENvcGllcyhpbnQgY29waWVzKSB7CisgICAgICAgIHB1YmxpYyB2b2lkIHNldENvcGllcyhASW50UmFuZ2UoZnJvbSA9IDEpIGludCBjb3BpZXMpIHsKICAgICAgICAgICAgIG1Qcm90b3R5cGUubUNvcGllcyA9IGNvcGllczsKICAgICAgICAgfQogCkBAIC03MzMsNyArNzQ3LDcgQEAKICAgICAgICAgICoKICAgICAgICAgICogQHBhcmFtIGF0dHJpYnV0ZXMgVGhlIGF0dHJpYnV0ZXMuCiAgICAgICAgICAqLwotICAgICAgICBwdWJsaWMgdm9pZCBzZXRBdHRyaWJ1dGVzKFByaW50QXR0cmlidXRlcyBhdHRyaWJ1dGVzKSB7CisgICAgICAgIHB1YmxpYyB2b2lkIHNldEF0dHJpYnV0ZXMoQE5vbk51bGwgUHJpbnRBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpIHsKICAgICAgICAgICAgIG1Qcm90b3R5cGUubUF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzOwogICAgICAgICB9CiAKQEAgLTc0Miw3ICs3NTYsNyBAQAogICAgICAgICAgKgogICAgICAgICAgKiBAcGFyYW0gcGFnZXMgVGhlIGluY2x1ZGVkIHBhZ2VzLgogICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIHZvaWQgc2V0UGFnZXMoUGFnZVJhbmdlW10gcGFnZXMpIHsKKyAgICAgICAgcHVibGljIHZvaWQgc2V0UGFnZXMoQE5vbk51bGwgUGFnZVJhbmdlW10gcGFnZXMpIHsKICAgICAgICAgICAgIG1Qcm90b3R5cGUubVBhZ2VSYW5nZXMgPSBwYWdlczsKICAgICAgICAgfQogCkBAIC03NzQsNyArNzg4LDcgQEAKICAgICAgICAgICogQHBhcmFtIGtleSBUaGUgb3B0aW9uIGtleS4KICAgICAgICAgICogQHBhcmFtIHZhbHVlIFRoZSBvcHRpb24gdmFsdWUuCiAgICAgICAgICAqLwotICAgICAgICBwdWJsaWMgdm9pZCBwdXRBZHZhbmNlZE9wdGlvbihTdHJpbmcga2V5LCBTdHJpbmcgdmFsdWUpIHsKKyAgICAgICAgcHVibGljIHZvaWQgcHV0QWR2YW5jZWRPcHRpb24oQE5vbk51bGwgU3RyaW5nIGtleSwgQE51bGxhYmxlIFN0cmluZyB2YWx1ZSkgewogICAgICAgICAgICAgaWYgKG1Qcm90b3R5cGUubUFkdmFuY2VkT3B0aW9ucyA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgbVByb3RvdHlwZS5tQWR2YW5jZWRPcHRpb25zID0gbmV3IEJ1bmRsZSgpOwogICAgICAgICAgICAgfQpAQCAtNzg3LDcgKzgwMSw3IEBACiAgICAgICAgICAqIEBwYXJhbSBrZXkgVGhlIG9wdGlvbiBrZXkuCiAgICAgICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgb3B0aW9uIHZhbHVlLgogICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIHZvaWQgcHV0QWR2YW5jZWRPcHRpb24oU3RyaW5nIGtleSwgaW50IHZhbHVlKSB7CisgICAgICAgIHB1YmxpYyB2b2lkIHB1dEFkdmFuY2VkT3B0aW9uKEBOb25OdWxsIFN0cmluZyBrZXksIGludCB2YWx1ZSkgewogICAgICAgICAgICAgaWYgKG1Qcm90b3R5cGUubUFkdmFuY2VkT3B0aW9ucyA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgbVByb3RvdHlwZS5tQWR2YW5jZWRPcHRpb25zID0gbmV3IEJ1bmRsZSgpOwogICAgICAgICAgICAgfQpAQCAtNzk5LDcgKzgxMyw3IEBACiAgICAgICAgICAqCiAgICAgICAgICAqIEByZXR1cm4gVGhlIG5ldyBpbnN0YW5jZS4KICAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBQcmludEpvYkluZm8gYnVpbGQoKSB7CisgICAgICAgIHB1YmxpYyBATm9uTnVsbCBQcmludEpvYkluZm8gYnVpbGQoKSB7CiAgICAgICAgICAgICByZXR1cm4gbVByb3RvdHlwZTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50L1ByaW50TWFuYWdlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJpbnQvUHJpbnRNYW5hZ2VyLmphdmEKaW5kZXggM2ZiODEyZS4uM2ViNDg3NCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvcHJpbnQvUHJpbnRNYW5hZ2VyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJpbnQvUHJpbnRNYW5hZ2VyLmphdmEKQEAgLTE2LDExICsxNiwxNCBAQAogCiBwYWNrYWdlIGFuZHJvaWQucHJpbnQ7CiAKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTm9uTnVsbDsKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTnVsbGFibGU7CiBpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7CiBpbXBvcnQgYW5kcm9pZC5hcHAuQXBwbGljYXRpb24uQWN0aXZpdHlMaWZlY3ljbGVDYWxsYmFja3M7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudFNlbmRlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50U2VuZGVyLlNlbmRJbnRlbnRFeGNlcHRpb247CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5JY29uOwogaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwogaW1wb3J0IGFuZHJvaWQub3MuQ2FuY2VsbGF0aW9uU2lnbmFsOwogaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKQEAgLTE4MCw2ICsxODMsOCBAQAogICAgICAqCiAgICAgICogQHBhcmFtIGNvbnRleHQgVGhlIGN1cnJlbnQgY29udGV4dCBpbiB3aGljaCB0byBvcGVyYXRlLgogICAgICAqIEBwYXJhbSBzZXJ2aWNlIFRoZSBiYWNraW5nIHN5c3RlbSBzZXJ2aWNlLgorICAgICAqIEBwYXJhbSB1c2VySWQgVGhlIHVzZXIgaWQgaW4gd2hpY2ggdG8gb3BlcmF0ZS4KKyAgICAgKiBAcGFyYW0gYXBwSWQgVGhlIGFwcGxpY2F0aW9uIGlkIGluIHdoaWNoIHRvIG9wZXJhdGUuCiAgICAgICogQGhpZGUKICAgICAgKi8KICAgICBwdWJsaWMgUHJpbnRNYW5hZ2VyKENvbnRleHQgY29udGV4dCwgSVByaW50TWFuYWdlciBzZXJ2aWNlLCBpbnQgdXNlcklkLCBpbnQgYXBwSWQpIHsKQEAgLTI5MCw2ICsyOTUsNyBAQAogICAgIC8qKgogICAgICAqIEdldHMgYSBwcmludCBqb2IgZ2l2ZW4gaXRzIGlkLgogICAgICAqCisgICAgICogQHBhcmFtIHByaW50Sm9iSWQgVGhlIGlkIG9mIHRoZSBwcmludCBqb2IuCiAgICAgICogQHJldHVybiBUaGUgcHJpbnQgam9iIGxpc3QuCiAgICAgICogQHNlZSBQcmludEpvYgogICAgICAqIEBoaWRlCkBAIC0zMTEsMTIgKzMxNywzNSBAQAogICAgIH0KIAogICAgIC8qKgorICAgICAqIEdldCB0aGUgY3VzdG9tIGljb24gZm9yIGEgcHJpbnRlci4gSWYgdGhlIGljb24gaXMgbm90IGNhY2hlZCwgdGhlIGljb24gaXMKKyAgICAgKiByZXF1ZXN0ZWQgYXN5bmNocm9ub3VzbHkuIE9uY2UgaXQgaXMgYXZhaWxhYmxlIHRoZSBwcmludGVyIGlzIHVwZGF0ZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcHJpbnRlcklkIHRoZSBpZCBvZiB0aGUgcHJpbnRlciB0aGUgaWNvbiBzaG91bGQgYmUgbG9hZGVkIGZvcgorICAgICAqIEByZXR1cm4gdGhlIGN1c3RvbSBpY29uIHRvIGJlIHVzZWQgZm9yIHRoZSBwcmludGVyIG9yIG51bGwgaWYgdGhlIGljb24gaXMKKyAgICAgKiAgICAgICAgIG5vdCB5ZXQgYXZhaWxhYmxlCisgICAgICogQHNlZSBhbmRyb2lkLnByaW50LlByaW50ZXJJbmZvLkJ1aWxkZXIjc2V0SGFzQ3VzdG9tUHJpbnRlckljb24oKQorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIEljb24gZ2V0Q3VzdG9tUHJpbnRlckljb24oUHJpbnRlcklkIHByaW50ZXJJZCkgeworICAgICAgICBpZiAobVNlcnZpY2UgPT0gbnVsbCkgeworICAgICAgICAgICAgTG9nLncoTE9HX1RBRywgIkZlYXR1cmUgYW5kcm9pZC5zb2Z0d2FyZS5wcmludCBub3QgYXZhaWxhYmxlIik7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICB0cnkgeworICAgICAgICAgICAgcmV0dXJuIG1TZXJ2aWNlLmdldEN1c3RvbVByaW50ZXJJY29uKHByaW50ZXJJZCwgbVVzZXJJZCk7CisgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiByZSkgeworICAgICAgICAgICAgTG9nLmUoTE9HX1RBRywgIkVycm9yIGdldHRpbmcgY3VzdG9tIHByaW50ZXIgaWNvbiIsIHJlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICAvKioKICAgICAgKiBHZXRzIHRoZSBwcmludCBqb2JzIGZvciB0aGlzIGFwcGxpY2F0aW9uLgogICAgICAqCiAgICAgICogQHJldHVybiBUaGUgcHJpbnQgam9iIGxpc3QuCiAgICAgICogQHNlZSBQcmludEpvYgogICAgICAqLwotICAgIHB1YmxpYyBMaXN0PFByaW50Sm9iPiBnZXRQcmludEpvYnMoKSB7CisgICAgcHVibGljIEBOb25OdWxsIExpc3Q8UHJpbnRKb2I+IGdldFByaW50Sm9icygpIHsKICAgICAgICAgaWYgKG1TZXJ2aWNlID09IG51bGwpIHsKICAgICAgICAgICAgIExvZy53KExPR19UQUcsICJGZWF0dXJlIGFuZHJvaWQuc29mdHdhcmUucHJpbnQgbm90IGF2YWlsYWJsZSIpOwogICAgICAgICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLmVtcHR5TGlzdCgpOwpAQCAtNDExLDggKzQ0MCw5IEBACiAgICAgICoKICAgICAgKiBAc2VlIFByaW50Sm9iCiAgICAgICovCi0gICAgcHVibGljIFByaW50Sm9iIHByaW50KFN0cmluZyBwcmludEpvYk5hbWUsIFByaW50RG9jdW1lbnRBZGFwdGVyIGRvY3VtZW50QWRhcHRlciwKLSAgICAgICAgICAgIFByaW50QXR0cmlidXRlcyBhdHRyaWJ1dGVzKSB7CisgICAgcHVibGljIEBOb25OdWxsIFByaW50Sm9iIHByaW50KEBOb25OdWxsIFN0cmluZyBwcmludEpvYk5hbWUsCisgICAgICAgICAgICBATm9uTnVsbCBQcmludERvY3VtZW50QWRhcHRlciBkb2N1bWVudEFkYXB0ZXIsCisgICAgICAgICAgICBATnVsbGFibGUgUHJpbnRBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpIHsKICAgICAgICAgaWYgKG1TZXJ2aWNlID09IG51bGwpIHsKICAgICAgICAgICAgIExvZy53KExPR19UQUcsICJGZWF0dXJlIGFuZHJvaWQuc29mdHdhcmUucHJpbnQgbm90IGF2YWlsYWJsZSIpOwogICAgICAgICAgICAgcmV0dXJuIG51bGw7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9wcmludC9QcmludGVyQ2FwYWJpbGl0aWVzSW5mby5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJpbnQvUHJpbnRlckNhcGFiaWxpdGllc0luZm8uamF2YQppbmRleCA5NmYzMTg1Li5kMTM4NzliIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9wcmludC9QcmludGVyQ2FwYWJpbGl0aWVzSW5mby5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50L1ByaW50ZXJDYXBhYmlsaXRpZXNJbmZvLmphdmEKQEAgLTE2LDggKzE2LDExIEBACiAKIHBhY2thZ2UgYW5kcm9pZC5wcmludDsKIAoraW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5Ob25OdWxsOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsYWJsZTsKK2ltcG9ydCBhbmRyb2lkLnByaW50LlByaW50QXR0cmlidXRlcy5Db2xvck1vZGU7CitpbXBvcnQgYW5kcm9pZC5wcmludC5QcmludEF0dHJpYnV0ZXMuRHVwbGV4TW9kZTsKIGltcG9ydCBhbmRyb2lkLnByaW50LlByaW50QXR0cmlidXRlcy5NYXJnaW5zOwogaW1wb3J0IGFuZHJvaWQucHJpbnQuUHJpbnRBdHRyaWJ1dGVzLk1lZGlhU2l6ZTsKIGltcG9ydCBhbmRyb2lkLnByaW50LlByaW50QXR0cmlidXRlcy5SZXNvbHV0aW9uOwpAQCAtMTIxLDcgKzEyNCw3IEBACiAgICAgICoKICAgICAgKiBAcmV0dXJuIFRoZSBtZWRpYSBzaXplcy4KICAgICAgKi8KLSAgICBwdWJsaWMgTGlzdDxNZWRpYVNpemU+IGdldE1lZGlhU2l6ZXMoKSB7CisgICAgcHVibGljIEBOb25OdWxsIExpc3Q8TWVkaWFTaXplPiBnZXRNZWRpYVNpemVzKCkgewogICAgICAgICByZXR1cm4gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTGlzdChtTWVkaWFTaXplcyk7CiAgICAgfQogCkBAIC0xMzAsNyArMTMzLDcgQEAKICAgICAgKgogICAgICAqIEByZXR1cm4gVGhlIHJlc29sdXRpb25zLgogICAgICAqLwotICAgIHB1YmxpYyBMaXN0PFJlc29sdXRpb24+IGdldFJlc29sdXRpb25zKCkgeworICAgIHB1YmxpYyBATm9uTnVsbCBMaXN0PFJlc29sdXRpb24+IGdldFJlc29sdXRpb25zKCkgewogICAgICAgICByZXR1cm4gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTGlzdChtUmVzb2x1dGlvbnMpOwogICAgIH0KIApAQCAtMTQwLDcgKzE0Myw3IEBACiAgICAgICoKICAgICAgKiBAcmV0dXJuIFRoZSBtaW5pbWFsIG1hcmdpbnMuCiAgICAgICovCi0gICAgcHVibGljIE1hcmdpbnMgZ2V0TWluTWFyZ2lucygpIHsKKyAgICBwdWJsaWMgQE5vbk51bGwgTWFyZ2lucyBnZXRNaW5NYXJnaW5zKCkgewogICAgICAgICByZXR1cm4gbU1pbk1hcmdpbnM7CiAgICAgfQogCkBAIC0xNTIsNyArMTU1LDcgQEAKICAgICAgKiBAc2VlIFByaW50QXR0cmlidXRlcyNDT0xPUl9NT0RFX0NPTE9SCiAgICAgICogQHNlZSBQcmludEF0dHJpYnV0ZXMjQ09MT1JfTU9ERV9NT05PQ0hST01FCiAgICAgICovCi0gICAgcHVibGljIGludCBnZXRDb2xvck1vZGVzKCkgeworICAgIHB1YmxpYyBAQ29sb3JNb2RlIGludCBnZXRDb2xvck1vZGVzKCkgewogICAgICAgICByZXR1cm4gbUNvbG9yTW9kZXM7CiAgICAgfQogCkBAIC0xNjUsNyArMTY4LDcgQEAKICAgICAgKiBAc2VlIFByaW50QXR0cmlidXRlcyNEVVBMRVhfTU9ERV9MT05HX0VER0UKICAgICAgKiBAc2VlIFByaW50QXR0cmlidXRlcyNEVVBMRVhfTU9ERV9TSE9SVF9FREdFCiAgICAgICovCi0gICAgcHVibGljIGludCBnZXREdXBsZXhNb2RlcygpIHsKKyAgICBwdWJsaWMgQER1cGxleE1vZGUgaW50IGdldER1cGxleE1vZGVzKCkgewogICAgICAgICByZXR1cm4gbUR1cGxleE1vZGVzOwogICAgIH0KIApAQCAtMTc0LDcgKzE3Nyw3IEBACiAgICAgICoKICAgICAgKiBAcmV0dXJuIFRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMuCiAgICAgICovCi0gICAgcHVibGljIFByaW50QXR0cmlidXRlcyBnZXREZWZhdWx0cygpIHsKKyAgICBwdWJsaWMgQE5vbk51bGwgUHJpbnRBdHRyaWJ1dGVzIGdldERlZmF1bHRzKCkgewogICAgICAgICBQcmludEF0dHJpYnV0ZXMuQnVpbGRlciBidWlsZGVyID0gbmV3IFByaW50QXR0cmlidXRlcy5CdWlsZGVyKCk7CiAKICAgICAgICAgYnVpbGRlci5zZXRNaW5NYXJnaW5zKG1NaW5NYXJnaW5zKTsKQEAgLTQyNSw3ICs0MjgsNyBAQAogICAgICAgICAgKgogICAgICAgICAgKiBAdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBJZiB0aGUgcHJpbnRlciBpZCBpcyA8Y29kZT5udWxsPC9jb2RlPi4KICAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyKFByaW50ZXJJZCBwcmludGVySWQpIHsKKyAgICAgICAgcHVibGljIEJ1aWxkZXIoQE5vbk51bGwgUHJpbnRlcklkIHByaW50ZXJJZCkgewogICAgICAgICAgICAgaWYgKHByaW50ZXJJZCA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigicHJpbnRlcklkIGNhbm5vdCBiZSBudWxsLiIpOwogICAgICAgICAgICAgfQpAQCAtNDQ2LDcgKzQ0OSw3IEBACiAgICAgICAgICAqCiAgICAgICAgICAqIEBzZWUgUHJpbnRBdHRyaWJ1dGVzLk1lZGlhU2l6ZQogICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIEJ1aWxkZXIgYWRkTWVkaWFTaXplKE1lZGlhU2l6ZSBtZWRpYVNpemUsIGJvb2xlYW4gaXNEZWZhdWx0KSB7CisgICAgICAgIHB1YmxpYyBATm9uTnVsbCBCdWlsZGVyIGFkZE1lZGlhU2l6ZShATm9uTnVsbCBNZWRpYVNpemUgbWVkaWFTaXplLCBib29sZWFuIGlzRGVmYXVsdCkgewogICAgICAgICAgICAgaWYgKG1Qcm90b3R5cGUubU1lZGlhU2l6ZXMgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIG1Qcm90b3R5cGUubU1lZGlhU2l6ZXMgPSBuZXcgQXJyYXlMaXN0PE1lZGlhU2l6ZT4oKTsKICAgICAgICAgICAgIH0KQEAgLTQ3NCw3ICs0NzcsNyBAQAogICAgICAgICAgKgogICAgICAgICAgKiBAc2VlIFByaW50QXR0cmlidXRlcy5SZXNvbHV0aW9uCiAgICAgICAgICAqLwotICAgICAgICBwdWJsaWMgQnVpbGRlciBhZGRSZXNvbHV0aW9uKFJlc29sdXRpb24gcmVzb2x1dGlvbiwgYm9vbGVhbiBpc0RlZmF1bHQpIHsKKyAgICAgICAgcHVibGljIEBOb25OdWxsIEJ1aWxkZXIgYWRkUmVzb2x1dGlvbihATm9uTnVsbCBSZXNvbHV0aW9uIHJlc29sdXRpb24sIGJvb2xlYW4gaXNEZWZhdWx0KSB7CiAgICAgICAgICAgICBpZiAobVByb3RvdHlwZS5tUmVzb2x1dGlvbnMgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIG1Qcm90b3R5cGUubVJlc29sdXRpb25zID0gbmV3IEFycmF5TGlzdDxSZXNvbHV0aW9uPigpOwogICAgICAgICAgICAgfQpAQCAtNTAyLDcgKzUwNSw3IEBACiAgICAgICAgICAqCiAgICAgICAgICAqIEBzZWUgUHJpbnRBdHRyaWJ1dGVzLk1hcmdpbnMKICAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldE1pbk1hcmdpbnMoTWFyZ2lucyBtYXJnaW5zKSB7CisgICAgICAgIHB1YmxpYyBATm9uTnVsbCBCdWlsZGVyIHNldE1pbk1hcmdpbnMoQE5vbk51bGwgTWFyZ2lucyBtYXJnaW5zKSB7CiAgICAgICAgICAgICBpZiAobWFyZ2lucyA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigibWFyZ2lucyBjYW5ub3QgYmUgbnVsbCIpOwogICAgICAgICAgICAgfQpAQCAtNTMyLDcgKzUzNSw4IEBACiAgICAgICAgICAqIEBzZWUgUHJpbnRBdHRyaWJ1dGVzI0NPTE9SX01PREVfQ09MT1IKICAgICAgICAgICogQHNlZSBQcmludEF0dHJpYnV0ZXMjQ09MT1JfTU9ERV9NT05PQ0hST01FCiAgICAgICAgICAqLwotICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXRDb2xvck1vZGVzKGludCBjb2xvck1vZGVzLCBpbnQgZGVmYXVsdENvbG9yTW9kZSkgeworICAgICAgICBwdWJsaWMgQE5vbk51bGwgQnVpbGRlciBzZXRDb2xvck1vZGVzKEBDb2xvck1vZGUgaW50IGNvbG9yTW9kZXMsCisgICAgICAgICAgICAgICAgQENvbG9yTW9kZSBpbnQgZGVmYXVsdENvbG9yTW9kZSkgewogICAgICAgICAgICAgaW50IGN1cnJlbnRNb2RlcyA9IGNvbG9yTW9kZXM7CiAgICAgICAgICAgICB3aGlsZSAoY3VycmVudE1vZGVzID4gMCkgewogICAgICAgICAgICAgICAgIGZpbmFsIGludCBjdXJyZW50TW9kZSA9ICgxIDw8IEludGVnZXIubnVtYmVyT2ZUcmFpbGluZ1plcm9zKGN1cnJlbnRNb2RlcykpOwpAQCAtNTYyLDcgKzU2Niw4IEBACiAgICAgICAgICAqIEBzZWUgUHJpbnRBdHRyaWJ1dGVzI0RVUExFWF9NT0RFX0xPTkdfRURHRQogICAgICAgICAgKiBAc2VlIFByaW50QXR0cmlidXRlcyNEVVBMRVhfTU9ERV9TSE9SVF9FREdFCiAgICAgICAgICAqLwotICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXREdXBsZXhNb2RlcyhpbnQgZHVwbGV4TW9kZXMsIGludCBkZWZhdWx0RHVwbGV4TW9kZSkgeworICAgICAgICBwdWJsaWMgQE5vbk51bGwgQnVpbGRlciBzZXREdXBsZXhNb2RlcyhARHVwbGV4TW9kZSBpbnQgZHVwbGV4TW9kZXMsCisgICAgICAgICAgICAgICAgQER1cGxleE1vZGUgaW50IGRlZmF1bHREdXBsZXhNb2RlKSB7CiAgICAgICAgICAgICBpbnQgY3VycmVudE1vZGVzID0gZHVwbGV4TW9kZXM7CiAgICAgICAgICAgICB3aGlsZSAoY3VycmVudE1vZGVzID4gMCkgewogICAgICAgICAgICAgICAgIGZpbmFsIGludCBjdXJyZW50TW9kZSA9ICgxIDw8IEludGVnZXIubnVtYmVyT2ZUcmFpbGluZ1plcm9zKGN1cnJlbnRNb2RlcykpOwpAQCAtNTg5LDcgKzU5NCw3IEBACiAgICAgICAgICAqCiAgICAgICAgICAqIEB0aHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIElmIGEgcmVxdWlyZWQgYXR0cmlidXRlIHdhcyBub3Qgc3BlY2lmaWVkLgogICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIFByaW50ZXJDYXBhYmlsaXRpZXNJbmZvIGJ1aWxkKCkgeworICAgICAgICBwdWJsaWMgQE5vbk51bGwgUHJpbnRlckNhcGFiaWxpdGllc0luZm8gYnVpbGQoKSB7CiAgICAgICAgICAgICBpZiAobVByb3RvdHlwZS5tTWVkaWFTaXplcyA9PSBudWxsIHx8IG1Qcm90b3R5cGUubU1lZGlhU2l6ZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiTm8gbWVkaWEgc2l6ZSBzcGVjaWZpZWQuIik7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9wcmludC9QcmludGVySWQuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50L1ByaW50ZXJJZC5qYXZhCmluZGV4IGEzZjNiMmJmLi44M2VmZTgwIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9wcmludC9QcmludGVySWQuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9wcmludC9QcmludGVySWQuamF2YQpAQCAtMTYsNiArMTYsNyBAQAogCiBwYWNrYWdlIGFuZHJvaWQucHJpbnQ7CiAKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTm9uTnVsbDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZTsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbDsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbGFibGU7CkBAIC02NSw3ICs2Niw3IEBACiAgICAgICoKICAgICAgKiBAcmV0dXJuIFRoZSBwcmludGVyIG5hbWUuCiAgICAgICovCi0gICAgcHVibGljIFN0cmluZyBnZXRMb2NhbElkKCkgeworICAgIHB1YmxpYyBATm9uTnVsbCBTdHJpbmcgZ2V0TG9jYWxJZCgpIHsKICAgICAgICAgcmV0dXJuIG1Mb2NhbElkOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvcHJpbnQvUHJpbnRlckluZm8uamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50L1ByaW50ZXJJbmZvLmphdmEKaW5kZXggN2ZjYzgxZi4uYWZlZjljMCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvcHJpbnQvUHJpbnRlckluZm8uamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9wcmludC9QcmludGVySW5mby5qYXZhCkBAIC0xNiwxMCArMTYsMjYgQEAKIAogcGFja2FnZSBhbmRyb2lkLnByaW50OwogCitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLkRyYXdhYmxlUmVzOworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5JbnREZWY7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk5vbk51bGw7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk51bGxhYmxlOworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5UZXN0QXBpOworaW1wb3J0IGFuZHJvaWQuYXBwLlBlbmRpbmdJbnRlbnQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLkFwcGxpY2F0aW9uSW5mbzsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZUluZm87CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5OYW1lTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZTsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkljb247CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOwogaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7CiAKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb247CitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uUG9saWN5OworCiAvKioKICAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgZGVzY3JpcHRpb24gb2YgYSBwcmludGVyLiBJbnN0YW5jZXMgb2YKICAqIHRoaXMgY2xhc3MgYXJlIGNyZWF0ZWQgYnkgcHJpbnQgc2VydmljZXMgdG8gcmVwb3J0IHRvIHRoZSBzeXN0ZW0KQEAgLTMwLDYgKzQ2LDEzIEBACiAgKi8KIHB1YmxpYyBmaW5hbCBjbGFzcyBQcmludGVySW5mbyBpbXBsZW1lbnRzIFBhcmNlbGFibGUgewogCisgICAgLyoqIEBoaWRlICovCisgICAgQEludERlZih7CisgICAgICAgICAgICBTVEFUVVNfSURMRSwgU1RBVFVTX0JVU1ksIFNUQVRVU19VTkFWQUlMQUJMRQorICAgIH0pCisgICAgQFJldGVudGlvbihSZXRlbnRpb25Qb2xpY3kuU09VUkNFKQorICAgIHB1YmxpYyBAaW50ZXJmYWNlIFN0YXR1cyB7CisgICAgfQogICAgIC8qKiBQcmludGVyIHN0YXR1czogdGhlIHByaW50ZXIgaXMgaWRsZSBhbmQgcmVhZHkgdG8gcHJpbnQuICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RBVFVTX0lETEUgPSAxOwogCkBAIC00MSw2ICs2NCwxOCBAQAogCiAgICAgcHJpdmF0ZSBQcmludGVySWQgbUlkOwogCisgICAgLyoqIFJlc291cmNlIGluc2lkZSB0aGUgcHJpbnRlcidzIHNlcnZpY2VzJ3MgcGFja2FnZSB0byBiZSB1c2VkIGFzIGFuIGljb24gKi8KKyAgICBwcml2YXRlIGludCBtSWNvblJlc291cmNlSWQ7CisKKyAgICAvKiogSWYgYSBjdXN0b20gaWNvbiBjYW4gYmUgbG9hZGVkIGZvciB0aGUgcHJpbnRlciAqLworICAgIHByaXZhdGUgYm9vbGVhbiBtSGFzQ3VzdG9tUHJpbnRlckljb247CisKKyAgICAvKiogVGhlIGdlbmVyYXRpb24gb2YgdGhlIGljb24gaW4gdGhlIGNhY2hlLiAqLworICAgIHByaXZhdGUgaW50IG1DdXN0b21QcmludGVySWNvbkdlbjsKKworICAgIC8qKiBJbnRlbnQgdGhhdCBsYXVuY2hlcyB0aGUgYWN0aXZpdHkgc2hvd2luZyBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwcmludGVyLiAqLworICAgIHByaXZhdGUgUGVuZGluZ0ludGVudCBtSW5mb0ludGVudDsKKwogICAgIHByaXZhdGUgU3RyaW5nIG1OYW1lOwogCiAgICAgcHJpdmF0ZSBpbnQgbVN0YXR1czsKQEAgLTc3LDYgKzExMiwxMCBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbUNhcGFiaWxpdGllcyA9IG51bGw7CiAgICAgICAgIH0KKyAgICAgICAgbUljb25SZXNvdXJjZUlkID0gb3RoZXIubUljb25SZXNvdXJjZUlkOworICAgICAgICBtSGFzQ3VzdG9tUHJpbnRlckljb24gPSBvdGhlci5tSGFzQ3VzdG9tUHJpbnRlckljb247CisgICAgICAgIG1DdXN0b21QcmludGVySWNvbkdlbiA9IG90aGVyLm1DdXN0b21QcmludGVySWNvbkdlbjsKKyAgICAgICAgbUluZm9JbnRlbnQgPSBvdGhlci5tSW5mb0ludGVudDsKICAgICB9CiAKICAgICAvKioKQEAgLTg0LDE2ICsxMjMsNjQgQEAKICAgICAgKgogICAgICAqIEByZXR1cm4gVGhlIHByaW50ZXIgaWQuCiAgICAgICovCi0gICAgcHVibGljIFByaW50ZXJJZCBnZXRJZCgpIHsKKyAgICBwdWJsaWMgQE5vbk51bGwgUHJpbnRlcklkIGdldElkKCkgewogICAgICAgICByZXR1cm4gbUlkOwogICAgIH0KIAogICAgIC8qKgorICAgICAqIEdldCB0aGUgaWNvbiB0byBiZSB1c2VkIGZvciB0aGlzIHByaW50ZXIuIElmIG5vIHBlciBwcmludGVyIGljb24gaXMgYXZhaWxhYmxlLCB0aGUgcHJpbnRlcidzCisgICAgICogc2VydmljZSdzIGljb24gaXMgcmV0dXJuZWQuIElmIHRoZSBwcmludGVyIGhhcyBhIGN1c3RvbSBpY29uIHRoaXMgaWNvbiBtaWdodCBnZXQgcmVxdWVzdGVkCisgICAgICogYXN5bmNocm9ub3VzbHkuIE9uY2UgdGhlIGljb24gaXMgbG9hZGVkIHRoZSBkaXNjb3Zlcnkgc2Vzc2lvbnMgd2lsbCBiZSBub3RpZmllZCB0aGF0IHRoZQorICAgICAqIHByaW50ZXIgY2hhbmdlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjb250ZXh0IFRoZSBjb250ZXh0IHRoYXQgd2lsbCBiZSB1c2luZyB0aGUgaWNvbnMKKyAgICAgKiBAcmV0dXJuIFRoZSBpY29uIHRvIGJlIHVzZWQgZm9yIHRoZSBwcmludGVyIG9yIG51bGwgaWYgbm8gaWNvbiBjb3VsZCBiZSBmb3VuZC4KKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIEBUZXN0QXBpCisgICAgcHVibGljIEBOdWxsYWJsZSBEcmF3YWJsZSBsb2FkSWNvbihATm9uTnVsbCBDb250ZXh0IGNvbnRleHQpIHsKKyAgICAgICAgRHJhd2FibGUgZHJhd2FibGUgPSBudWxsOworICAgICAgICBQYWNrYWdlTWFuYWdlciBwYWNrYWdlTWFuYWdlciA9IGNvbnRleHQuZ2V0UGFja2FnZU1hbmFnZXIoKTsKKworICAgICAgICBpZiAobUhhc0N1c3RvbVByaW50ZXJJY29uKSB7CisgICAgICAgICAgICBQcmludE1hbmFnZXIgcHJpbnRNYW5hZ2VyID0gKFByaW50TWFuYWdlcikgY29udGV4dAorICAgICAgICAgICAgICAgICAgICAuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LlBSSU5UX1NFUlZJQ0UpOworCisgICAgICAgICAgICBJY29uIGljb24gPSBwcmludE1hbmFnZXIuZ2V0Q3VzdG9tUHJpbnRlckljb24obUlkKTsKKworICAgICAgICAgICAgaWYgKGljb24gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGRyYXdhYmxlID0gaWNvbi5sb2FkRHJhd2FibGUoY29udGV4dCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoZHJhd2FibGUgPT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgcGFja2FnZU5hbWUgPSBtSWQuZ2V0U2VydmljZU5hbWUoKS5nZXRQYWNrYWdlTmFtZSgpOworICAgICAgICAgICAgICAgIFBhY2thZ2VJbmZvIHBhY2thZ2VJbmZvID0gcGFja2FnZU1hbmFnZXIuZ2V0UGFja2FnZUluZm8ocGFja2FnZU5hbWUsIDApOworICAgICAgICAgICAgICAgIEFwcGxpY2F0aW9uSW5mbyBhcHBJbmZvID0gcGFja2FnZUluZm8uYXBwbGljYXRpb25JbmZvOworCisgICAgICAgICAgICAgICAgLy8gSWYgbm8gY3VzdG9tIGljb24gaXMgYXZhaWxhYmxlLCB0cnkgdGhlIGljb24gZnJvbSB0aGUgcmVzb3VyY2VzCisgICAgICAgICAgICAgICAgaWYgKG1JY29uUmVzb3VyY2VJZCAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGRyYXdhYmxlID0gcGFja2FnZU1hbmFnZXIuZ2V0RHJhd2FibGUocGFja2FnZU5hbWUsIG1JY29uUmVzb3VyY2VJZCwgYXBwSW5mbyk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gRmFsbCBiYWNrIHRvIHRoZSBwcmludGVyJ3Mgc2VydmljZSdzIGljb24gaWYgbm8gcGVyIHByaW50ZXIgaWNvbiBjb3VsZCBiZSBmb3VuZAorICAgICAgICAgICAgICAgIGlmIChkcmF3YWJsZSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGRyYXdhYmxlID0gYXBwSW5mby5sb2FkSWNvbihwYWNrYWdlTWFuYWdlcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBjYXRjaCAoTmFtZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBkcmF3YWJsZTsKKyAgICB9CisKKyAgICAvKioKICAgICAgKiBHZXQgdGhlIHByaW50ZXIgbmFtZS4KICAgICAgKgogICAgICAqIEByZXR1cm4gVGhlIHByaW50ZXIgbmFtZS4KICAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CisgICAgcHVibGljIEBOdWxsYWJsZSBTdHJpbmcgZ2V0TmFtZSgpIHsKICAgICAgICAgcmV0dXJuIG1OYW1lOwogICAgIH0KIApAQCAtMTA2LDcgKzE5Myw3IEBACiAgICAgICogQHNlZSAjU1RBVFVTX0lETEUKICAgICAgKiBAc2VlICNTVEFUVVNfVU5BVkFJTEFCTEUKICAgICAgKi8KLSAgICBwdWJsaWMgaW50IGdldFN0YXR1cygpIHsKKyAgICBwdWJsaWMgQFN0YXR1cyBpbnQgZ2V0U3RhdHVzKCkgewogICAgICAgICByZXR1cm4gbVN0YXR1czsKICAgICB9CiAKQEAgLTExNSwxNiArMjAyLDI4IEBACiAgICAgICoKICAgICAgKiBAcmV0dXJuIFRoZSBkZXNjcmlwdGlvbi4KICAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgeworICAgIHB1YmxpYyBATnVsbGFibGUgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgewogICAgICAgICByZXR1cm4gbURlc2NyaXB0aW9uOwogICAgIH0KIAogICAgIC8qKgorICAgICAqIEdldCB0aGUge0BsaW5rIFBlbmRpbmdJbnRlbnR9IHRoYXQgbGF1bmNoZXMgdGhlIGFjdGl2aXR5IHNob3dpbmcgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUKKyAgICAgKiBwcmludGVyLgorICAgICAqCisgICAgICogQHJldHVybiB0aGUge0BsaW5rIFBlbmRpbmdJbnRlbnR9IHRoYXQgbGF1bmNoZXMgdGhlIGFjdGl2aXR5IHNob3dpbmcgbW9yZSBpbmZvcm1hdGlvbiBhYm91dAorICAgICAqICAgICAgICAgdGhlIHByaW50ZXIgb3IgbnVsbCBpZiBpdCBpcyBub3QgY29uZmlndXJlZAorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIEBOdWxsYWJsZSBQZW5kaW5nSW50ZW50IGdldEluZm9JbnRlbnQoKSB7CisgICAgICAgIHJldHVybiBtSW5mb0ludGVudDsKKyAgICB9CisKKyAgICAvKioKICAgICAgKiBHZXRzIHRoZSBwcmludGVyIGNhcGFiaWxpdGllcy4KICAgICAgKgogICAgICAqIEByZXR1cm4gVGhlIGNhcGFiaWxpdGllcy4KICAgICAgKi8KLSAgICBwdWJsaWMgUHJpbnRlckNhcGFiaWxpdGllc0luZm8gZ2V0Q2FwYWJpbGl0aWVzKCkgeworICAgIHB1YmxpYyBATnVsbGFibGUgUHJpbnRlckNhcGFiaWxpdGllc0luZm8gZ2V0Q2FwYWJpbGl0aWVzKCkgewogICAgICAgICByZXR1cm4gbUNhcGFiaWxpdGllczsKICAgICB9CiAKQEAgLTEzNCw2ICsyMzMsMTAgQEAKICAgICAgICAgbVN0YXR1cyA9IHBhcmNlbC5yZWFkSW50KCk7CiAgICAgICAgIG1EZXNjcmlwdGlvbiA9IHBhcmNlbC5yZWFkU3RyaW5nKCk7CiAgICAgICAgIG1DYXBhYmlsaXRpZXMgPSBwYXJjZWwucmVhZFBhcmNlbGFibGUobnVsbCk7CisgICAgICAgIG1JY29uUmVzb3VyY2VJZCA9IHBhcmNlbC5yZWFkSW50KCk7CisgICAgICAgIG1IYXNDdXN0b21QcmludGVySWNvbiA9IHBhcmNlbC5yZWFkQnl0ZSgpICE9IDA7CisgICAgICAgIG1DdXN0b21QcmludGVySWNvbkdlbiA9IHBhcmNlbC5yZWFkSW50KCk7CisgICAgICAgIG1JbmZvSW50ZW50ID0gcGFyY2VsLnJlYWRQYXJjZWxhYmxlKG51bGwpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpAQCAtMTQ4LDYgKzI1MSwxMCBAQAogICAgICAgICBwYXJjZWwud3JpdGVJbnQobVN0YXR1cyk7CiAgICAgICAgIHBhcmNlbC53cml0ZVN0cmluZyhtRGVzY3JpcHRpb24pOwogICAgICAgICBwYXJjZWwud3JpdGVQYXJjZWxhYmxlKG1DYXBhYmlsaXRpZXMsIGZsYWdzKTsKKyAgICAgICAgcGFyY2VsLndyaXRlSW50KG1JY29uUmVzb3VyY2VJZCk7CisgICAgICAgIHBhcmNlbC53cml0ZUJ5dGUoKGJ5dGUpIChtSGFzQ3VzdG9tUHJpbnRlckljb24gPyAxIDogMCkpOworICAgICAgICBwYXJjZWwud3JpdGVJbnQobUN1c3RvbVByaW50ZXJJY29uR2VuKTsKKyAgICAgICAgcGFyY2VsLndyaXRlUGFyY2VsYWJsZShtSW5mb0ludGVudCwgZmxhZ3MpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpAQCAtMTU5LDkgKzI2Niw2MSBAQAogICAgICAgICByZXN1bHQgPSBwcmltZSAqIHJlc3VsdCArIG1TdGF0dXM7CiAgICAgICAgIHJlc3VsdCA9IHByaW1lICogcmVzdWx0ICsgKChtRGVzY3JpcHRpb24gIT0gbnVsbCkgPyBtRGVzY3JpcHRpb24uaGFzaENvZGUoKSA6IDApOwogICAgICAgICByZXN1bHQgPSBwcmltZSAqIHJlc3VsdCArICgobUNhcGFiaWxpdGllcyAhPSBudWxsKSA/IG1DYXBhYmlsaXRpZXMuaGFzaENvZGUoKSA6IDApOworICAgICAgICByZXN1bHQgPSBwcmltZSAqIHJlc3VsdCArIG1JY29uUmVzb3VyY2VJZDsKKyAgICAgICAgcmVzdWx0ID0gcHJpbWUgKiByZXN1bHQgKyAobUhhc0N1c3RvbVByaW50ZXJJY29uID8gMSA6IDApOworICAgICAgICByZXN1bHQgPSBwcmltZSAqIHJlc3VsdCArIG1DdXN0b21QcmludGVySWNvbkdlbjsKKyAgICAgICAgcmVzdWx0ID0gcHJpbWUgKiByZXN1bHQgKyAoKG1JbmZvSW50ZW50ICE9IG51bGwpID8gbUluZm9JbnRlbnQuaGFzaENvZGUoKSA6IDApOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAorICAgIC8qKgorICAgICAqIENvbXBhcmUgdHdvIHtAbGluayBQcmludGVySW5mbyBwcmludGVySW5mb3N9IGluIGFsbCBhc3BlY3RzIGJlc2lkZSBiZWluZyBudWxsIGFuZCB0aGUKKyAgICAgKiB7QGxpbmsgI21TdGF0dXN9LgorICAgICAqCisgICAgICogQHBhcmFtIG90aGVyIHRoZSBvdGhlciB7QGxpbmsgUHJpbnRlckluZm99CisgICAgICogQHJldHVybiB0cnVlIGlmZiB0aGUgaW5mb3MgYXJlIGVxdWl2YWxlbnQKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGVxdWFsc0lnbm9yaW5nU3RhdHVzKFByaW50ZXJJbmZvIG90aGVyKSB7CisgICAgICAgIGlmIChtSWQgPT0gbnVsbCkgeworICAgICAgICAgICAgaWYgKG90aGVyLm1JZCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKCFtSWQuZXF1YWxzKG90aGVyLm1JZCkpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIVRleHRVdGlscy5lcXVhbHMobU5hbWUsIG90aGVyLm1OYW1lKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmICghVGV4dFV0aWxzLmVxdWFscyhtRGVzY3JpcHRpb24sIG90aGVyLm1EZXNjcmlwdGlvbikpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAobUNhcGFiaWxpdGllcyA9PSBudWxsKSB7CisgICAgICAgICAgICBpZiAob3RoZXIubUNhcGFiaWxpdGllcyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKCFtQ2FwYWJpbGl0aWVzLmVxdWFscyhvdGhlci5tQ2FwYWJpbGl0aWVzKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmIChtSWNvblJlc291cmNlSWQgIT0gb3RoZXIubUljb25SZXNvdXJjZUlkKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1IYXNDdXN0b21QcmludGVySWNvbiAhPSBvdGhlci5tSGFzQ3VzdG9tUHJpbnRlckljb24pIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAobUN1c3RvbVByaW50ZXJJY29uR2VuICE9IG90aGVyLm1DdXN0b21QcmludGVySWNvbkdlbikgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmIChtSW5mb0ludGVudCA9PSBudWxsKSB7CisgICAgICAgICAgICBpZiAob3RoZXIubUluZm9JbnRlbnQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICghbUluZm9JbnRlbnQuZXF1YWxzKG90aGVyLm1JbmZvSW50ZW50KSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb2JqKSB7CiAgICAgICAgIGlmICh0aGlzID09IG9iaikgewpAQCAtMTc0LDI5ICszMzMsMTIgQEAKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBQcmludGVySW5mbyBvdGhlciA9IChQcmludGVySW5mbykgb2JqOwotICAgICAgICBpZiAobUlkID09IG51bGwpIHsKLSAgICAgICAgICAgIGlmIChvdGhlci5tSWQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICghbUlkLmVxdWFscyhvdGhlci5tSWQpKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFUZXh0VXRpbHMuZXF1YWxzKG1OYW1lLCBvdGhlci5tTmFtZSkpIHsKKyAgICAgICAgaWYgKCFlcXVhbHNJZ25vcmluZ1N0YXR1cyhvdGhlcikpIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBpZiAobVN0YXR1cyAhPSBvdGhlci5tU3RhdHVzKSB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFUZXh0VXRpbHMuZXF1YWxzKG1EZXNjcmlwdGlvbiwgb3RoZXIubURlc2NyaXB0aW9uKSkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtQ2FwYWJpbGl0aWVzID09IG51bGwpIHsKLSAgICAgICAgICAgIGlmIChvdGhlci5tQ2FwYWJpbGl0aWVzICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoIW1DYXBhYmlsaXRpZXMuZXF1YWxzKG90aGVyLm1DYXBhYmlsaXRpZXMpKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0yMDksNiArMzUxLDEwIEBACiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIsIHN0YXR1cz0iKS5hcHBlbmQobVN0YXR1cyk7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIsIGRlc2NyaXB0aW9uPSIpLmFwcGVuZChtRGVzY3JpcHRpb24pOwogICAgICAgICBidWlsZGVyLmFwcGVuZCgiLCBjYXBhYmlsaXRpZXM9IikuYXBwZW5kKG1DYXBhYmlsaXRpZXMpOworICAgICAgICBidWlsZGVyLmFwcGVuZCgiLCBpY29uUmVzSWQ9IikuYXBwZW5kKG1JY29uUmVzb3VyY2VJZCk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIsIGhhc0N1c3RvbVByaW50ZXJJY29uPSIpLmFwcGVuZChtSGFzQ3VzdG9tUHJpbnRlckljb24pOworICAgICAgICBidWlsZGVyLmFwcGVuZCgiLCBjdXN0b21QcmludGVySWNvbkdlbj0iKS5hcHBlbmQobUN1c3RvbVByaW50ZXJJY29uR2VuKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIiwgaW5mb0ludGVudD0iKS5hcHBlbmQobUluZm9JbnRlbnQpOwogICAgICAgICBidWlsZGVyLmFwcGVuZCgiXCJ9Iik7CiAgICAgICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiAgICAgfQpAQCAtMjI4LDcgKzM3NCw3IEBACiAgICAgICAgICAqIEB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIElmIHRoZSBwcmludGVyIGlkIGlzIG51bGwsIG9yIHRoZQogICAgICAgICAgKiBwcmludGVyIG5hbWUgaXMgZW1wdHkgb3IgdGhlIHN0YXR1cyBpcyBub3QgYSB2YWxpZCBvbmUuCiAgICAgICAgICAqLwotICAgICAgICBwdWJsaWMgQnVpbGRlcihQcmludGVySWQgcHJpbnRlcklkLCBTdHJpbmcgbmFtZSwgaW50IHN0YXR1cykgeworICAgICAgICBwdWJsaWMgQnVpbGRlcihATm9uTnVsbCBQcmludGVySWQgcHJpbnRlcklkLCBATm9uTnVsbCBTdHJpbmcgbmFtZSwgQFN0YXR1cyBpbnQgc3RhdHVzKSB7CiAgICAgICAgICAgICBpZiAocHJpbnRlcklkID09IG51bGwpIHsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJwcmludGVySWQgY2Fubm90IGJlIG51bGwuIik7CiAgICAgICAgICAgICB9CkBAIC0yNDksNyArMzk1LDcgQEAKICAgICAgICAgICoKICAgICAgICAgICogQHBhcmFtIG90aGVyIE90aGVyIGluZm8gZnJvbSB3aGljaCB0byBzdGFydCBidWlsZGluZy4KICAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyKFByaW50ZXJJbmZvIG90aGVyKSB7CisgICAgICAgIHB1YmxpYyBCdWlsZGVyKEBOb25OdWxsIFByaW50ZXJJbmZvIG90aGVyKSB7CiAgICAgICAgICAgICBtUHJvdG90eXBlID0gbmV3IFByaW50ZXJJbmZvKCk7CiAgICAgICAgICAgICBtUHJvdG90eXBlLmNvcHlGcm9tKG90aGVyKTsKICAgICAgICAgfQpAQCAtMjY0LDE5ICs0MTAsNTAgQEAKICAgICAgICAgICogQHNlZSBQcmludGVySW5mbyNTVEFUVVNfQlVTWQogICAgICAgICAgKiBAc2VlIFByaW50ZXJJbmZvI1NUQVRVU19VTkFWQUlMQUJMRQogICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0U3RhdHVzKGludCBzdGF0dXMpIHsKKyAgICAgICAgcHVibGljIEBOb25OdWxsIEJ1aWxkZXIgc2V0U3RhdHVzKEBTdGF0dXMgaW50IHN0YXR1cykgewogICAgICAgICAgICAgbVByb3RvdHlwZS5tU3RhdHVzID0gc3RhdHVzOwogICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgIH0KIAogICAgICAgICAvKioKKyAgICAgICAgICogU2V0IGEgZHJhd2FibGUgcmVzb3VyY2UgYXMgaWNvbiBmb3IgdGhpcyBwcmludGVyLiBJZiBubyBpY29uIGlzIHNldCB0aGUgcHJpbnRlcidzCisgICAgICAgICAqIHNlcnZpY2UncyBpY29uIGlzIHVzZWQgZm9yIHRoZSBwcmludGVyLgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gaWNvblJlc291cmNlSWQgVGhlIHJlc291cmNlIElEIG9mIHRoZSBpY29uLgorICAgICAgICAgKiBAcmV0dXJuIFRoaXMgYnVpbGRlci4KKyAgICAgICAgICogQHNlZSBQcmludGVySW5mby5CdWlsZGVyI3NldEhhc0N1c3RvbVByaW50ZXJJY29uCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgQE5vbk51bGwgQnVpbGRlciBzZXRJY29uUmVzb3VyY2VJZChARHJhd2FibGVSZXMgaW50IGljb25SZXNvdXJjZUlkKSB7CisgICAgICAgICAgICBtUHJvdG90eXBlLm1JY29uUmVzb3VyY2VJZCA9IGljb25SZXNvdXJjZUlkOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogRGVjbGFyZXMgdGhhdCB0aGUgcHJpbnQgc2VydmljZSBjYW4gbG9hZCBhIGN1c3RvbSBwZXIgcHJpbnRlcidzIGljb24uIElmIGJvdGgKKyAgICAgICAgICoge0BsaW5rIFByaW50ZXJJbmZvLkJ1aWxkZXIjc2V0SWNvblJlc291cmNlSWR9IGFuZCBhIGN1c3RvbSBpY29uIGFyZSBzZXQgdGhlIHJlc291cmNlIGljb24KKyAgICAgICAgICogaXMgc2hvd24gd2hpbGUgdGhlIGN1c3RvbSBpY29uIGxvYWRzIGJ1dCB0aGVuIHRoZSBjdXN0b20gaWNvbiBpcyB1c2VkLiBJZgorICAgICAgICAgKiB7QGxpbmsgUHJpbnRlckluZm8uQnVpbGRlciNzZXRJY29uUmVzb3VyY2VJZH0gaXMgbm90IHNldCB0aGUgcHJpbnRlcidzIHNlcnZpY2UncyBpY29uIGlzCisgICAgICAgICAqIHNob3duIHdoaWxlIGxvYWRpbmcuCisgICAgICAgICAqIDxwPgorICAgICAgICAgKiBUaGUgaWNvbiBpcyByZXF1ZXN0ZWQgYXN5bmNocm9ub3VzbHkgYW5kIG9ubHkgd2hlbiBuZWVkZWQgdmlhCisgICAgICAgICAqIHtAbGluayBhbmRyb2lkLnByaW50c2VydmljZS5QcmludGVyRGlzY292ZXJ5U2Vzc2lvbiNvblJlcXVlc3RDdXN0b21QcmludGVySWNvbn0uCisgICAgICAgICAqIDwvcD4KKyAgICAgICAgICoKKyAgICAgICAgICogQHJldHVybiBUaGlzIGJ1aWxkZXIuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgQE5vbk51bGwgQnVpbGRlciBzZXRIYXNDdXN0b21QcmludGVySWNvbigpIHsKKyAgICAgICAgICAgIG1Qcm90b3R5cGUubUhhc0N1c3RvbVByaW50ZXJJY29uID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisKKyAgICAgICAgLyoqCiAgICAgICAgICAqIFNldHMgdGhlIDxzdHJvbmc+bG9jYWxpemVkPC9zdHJvbmc+IHByaW50ZXIgbmFtZSB3aGljaAogICAgICAgICAgKiBpcyBzaG93biB0byB0aGUgdXNlcgogICAgICAgICAgKgogICAgICAgICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZS4KICAgICAgICAgICogQHJldHVybiBUaGlzIGJ1aWxkZXIuCiAgICAgICAgICAqLwotICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXROYW1lKFN0cmluZyBuYW1lKSB7CisgICAgICAgIHB1YmxpYyBATm9uTnVsbCBCdWlsZGVyIHNldE5hbWUoQE5vbk51bGwgU3RyaW5nIG5hbWUpIHsKICAgICAgICAgICAgIG1Qcm90b3R5cGUubU5hbWUgPSBuYW1lOwogICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgIH0KQEAgLTI4OCwxOCArNDY1LDMwIEBACiAgICAgICAgICAqIEBwYXJhbSBkZXNjcmlwdGlvbiBUaGUgZGVzY3JpcHRpb24uCiAgICAgICAgICAqIEByZXR1cm4gVGhpcyBidWlsZGVyLgogICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0RGVzY3JpcHRpb24oU3RyaW5nIGRlc2NyaXB0aW9uKSB7CisgICAgICAgIHB1YmxpYyBATm9uTnVsbCBCdWlsZGVyIHNldERlc2NyaXB0aW9uKEBOb25OdWxsIFN0cmluZyBkZXNjcmlwdGlvbikgewogICAgICAgICAgICAgbVByb3RvdHlwZS5tRGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICB9CiAKICAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIHtAbGluayBQZW5kaW5nSW50ZW50fSB0aGF0IGxhdW5jaGVzIGFuIGFjdGl2aXR5IHNob3dpbmcgbW9yZSBpbmZvcm1hdGlvbiBhYm91dAorICAgICAgICAgKiB0aGUgcHJpbnRlci4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIGluZm9JbnRlbnQgVGhlIHtAbGluayBQZW5kaW5nSW50ZW50IGludGVudH0uCisgICAgICAgICAqIEByZXR1cm4gVGhpcyBidWlsZGVyLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIEBOb25OdWxsIEJ1aWxkZXIgc2V0SW5mb0ludGVudChATm9uTnVsbCBQZW5kaW5nSW50ZW50IGluZm9JbnRlbnQpIHsKKyAgICAgICAgICAgIG1Qcm90b3R5cGUubUluZm9JbnRlbnQgPSBpbmZvSW50ZW50OworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAgICAvKioKICAgICAgICAgICogU2V0cyB0aGUgcHJpbnRlciBjYXBhYmlsaXRpZXMuCiAgICAgICAgICAqCiAgICAgICAgICAqIEBwYXJhbSBjYXBhYmlsaXRpZXMgVGhlIGNhcGFiaWxpdGllcy4KICAgICAgICAgICogQHJldHVybiBUaGlzIGJ1aWxkZXIuCiAgICAgICAgICAqLwotICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXRDYXBhYmlsaXRpZXMoUHJpbnRlckNhcGFiaWxpdGllc0luZm8gY2FwYWJpbGl0aWVzKSB7CisgICAgICAgIHB1YmxpYyBATm9uTnVsbCBCdWlsZGVyIHNldENhcGFiaWxpdGllcyhATm9uTnVsbCBQcmludGVyQ2FwYWJpbGl0aWVzSW5mbyBjYXBhYmlsaXRpZXMpIHsKICAgICAgICAgICAgIG1Qcm90b3R5cGUubUNhcGFiaWxpdGllcyA9IGNhcGFiaWxpdGllczsKICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICB9CkBAIC0zMDksNyArNDk4LDcgQEAKICAgICAgICAgICoKICAgICAgICAgICogQHJldHVybiBBIG5ldyB7QGxpbmsgUHJpbnRlckluZm99LgogICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIFByaW50ZXJJbmZvIGJ1aWxkKCkgeworICAgICAgICBwdWJsaWMgQE5vbk51bGwgUHJpbnRlckluZm8gYnVpbGQoKSB7CiAgICAgICAgICAgICByZXR1cm4gbVByb3RvdHlwZTsKICAgICAgICAgfQogCkBAIC0zMTgsNiArNTA3LDE5IEBACiAgICAgICAgICAgICAgICAgICAgIHx8IHN0YXR1cyA9PSBTVEFUVVNfQlVTWQogICAgICAgICAgICAgICAgICAgICB8fCBzdGF0dXMgPT0gU1RBVFVTX1VOQVZBSUxBQkxFKTsKICAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBJbmNyZW1lbnRzIHRoZSBnZW5lcmF0aW9uIG51bWJlciBvZiB0aGUgY3VzdG9tIHByaW50ZXIgaWNvbi4gQXMgdGhlIHtAbGluayBQcmludGVySW5mb30KKyAgICAgICAgICogZG9lcyBub3QgbWF0Y2ggdGhlIHByZXZpb3VzIG9uZSBhbnltb3JlLCB1c2VycyBvZiB0aGUge0BsaW5rIFByaW50ZXJJbmZvfSB3aWxsIHJlbG9hZCB0aGUKKyAgICAgICAgICogaWNvbiBpZiBuZWVkZWQuCisgICAgICAgICAqCisgICAgICAgICAqIEByZXR1cm4gVGhpcyBidWlsZGVyLgorICAgICAgICAgKiBAaGlkZQorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIEBOb25OdWxsIEJ1aWxkZXIgaW5jQ3VzdG9tUHJpbnRlckljb25HZW4oKSB7CisgICAgICAgICAgICBtUHJvdG90eXBlLm1DdXN0b21QcmludGVySWNvbkdlbisrOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFBhcmNlbGFibGUuQ3JlYXRvcjxQcmludGVySW5mbz4gQ1JFQVRPUiA9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9wcmludC9wZGYvUHJpbnRlZFBkZkRvY3VtZW50LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9wcmludC9wZGYvUHJpbnRlZFBkZkRvY3VtZW50LmphdmEKaW5kZXggMmQ4YWFmYS4uZGY3YzA1NCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvcHJpbnQvcGRmL1ByaW50ZWRQZGZEb2N1bWVudC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50L3BkZi9QcmludGVkUGRmRG9jdW1lbnQuamF2YQpAQCAtMTYsMjYgKzE2LDI1IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5wcmludC5wZGY7CiAKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uSW50UmFuZ2U7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk5vbk51bGw7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MucGRmLlBkZkRvY3VtZW50OwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MucGRmLlBkZkRvY3VtZW50LlBhZ2U7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5wZGYuUGRmRG9jdW1lbnQuUGFnZUluZm87CiBpbXBvcnQgYW5kcm9pZC5wcmludC5QcmludEF0dHJpYnV0ZXM7CiBpbXBvcnQgYW5kcm9pZC5wcmludC5QcmludEF0dHJpYnV0ZXMuTWFyZ2luczsKIGltcG9ydCBhbmRyb2lkLnByaW50LlByaW50QXR0cmlidXRlcy5NZWRpYVNpemU7CiAKIC8qKgotICogVGhpcyBjbGFzcyBpcyBhIGhlbHBlciBmb3IgY3JlYXRpbmcgYSBQREYgZmlsZSBmb3IgZ2l2ZW4gcHJpbnQKLSAqIGF0dHJpYnV0ZXMuIEl0IGlzIHVzZWZ1bCBmb3IgaW1wbGVtZW50aW5nIHByaW50aW5nIHZpYSB0aGUgbmF0aXZlCi0gKiBBbmRyb2lkIGdyYXBoaWNzIEFQSXMuCisgKiBUaGlzIGNsYXNzIGlzIGEgaGVscGVyIGZvciBjcmVhdGluZyBhIFBERiBmaWxlIGZvciBnaXZlbiBwcmludCBhdHRyaWJ1dGVzLiBJdCBpcyB1c2VmdWwgZm9yCisgKiBpbXBsZW1lbnRpbmcgcHJpbnRpbmcgdmlhIHRoZSBuYXRpdmUgQW5kcm9pZCBncmFwaGljcyBBUElzLgogICogPHA+Ci0gKiBUaGlzIGNsYXNzIGNvbXB1dGVzIHRoZSBwYWdlIHdpZHRoLCBwYWdlIGhlaWdodCwgYW5kIGNvbnRlbnQgcmVjdGFuZ2xlCi0gKiBmcm9tIHRoZSBwcm92aWRlZCBwcmludCBhdHRyaWJ1dGVzIGFuZCB0aGVzZSBwcmVjb21wdXRlZCB2YWx1ZXMgY2FuIGJlCi0gKiBhY2Nlc3NlZCB2aWEge0BsaW5rICNnZXRQYWdlV2lkdGgoKX0sIHtAbGluayAjZ2V0UGFnZUhlaWdodCgpfSwgYW5kCi0gKiB7QGxpbmsgI2dldFBhZ2VDb250ZW50UmVjdCgpfSwgcmVzcGVjdGl2ZWx5LiBUaGUge0BsaW5rICNzdGFydFBhZ2UoaW50KX0KLSAqIG1ldGhvZHMgY3JlYXRlcyBwYWdlcyB3aG9zZSB7QGxpbmsgUGFnZUluZm99IGlzIGluaXRpYWxpemVkIHdpdGggdGhlCi0gKiBwcmVjb21wdXRlZCB2YWx1ZXMgZm9yIHdpZHRoLCBoZWlnaHQsIGFuZCBjb250ZW50IHJlY3RhbmdsZS4KKyAqIFRoaXMgY2xhc3MgY29tcHV0ZXMgdGhlIHBhZ2Ugd2lkdGgsIHBhZ2UgaGVpZ2h0LCBhbmQgY29udGVudCByZWN0YW5nbGUgZnJvbSB0aGUgcHJvdmlkZWQgcHJpbnQKKyAqIGF0dHJpYnV0ZXMgYW5kIHRoZXNlIHByZWNvbXB1dGVkIHZhbHVlcyBjYW4gYmUgYWNjZXNzZWQgdmlhIHtAbGluayAjZ2V0UGFnZVdpZHRoKCl9LAorICoge0BsaW5rICNnZXRQYWdlSGVpZ2h0KCl9LCBhbmQge0BsaW5rICNnZXRQYWdlQ29udGVudFJlY3QoKX0sIHJlc3BlY3RpdmVseS4gVGhlCisgKiB7QGxpbmsgI3N0YXJ0UGFnZShpbnQpfSBtZXRob2RzIGNyZWF0ZXMgcGFnZXMgd2hvc2UKKyAqIHtAbGluayBhbmRyb2lkLmdyYXBoaWNzLnBkZi5QZGZEb2N1bWVudC5QYWdlSW5mbyBQYWdlSW5mb30gaXMgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgcHJlY29tcHV0ZWQKKyAqIHZhbHVlcyBmb3Igd2lkdGgsIGhlaWdodCwgYW5kIGNvbnRlbnQgcmVjdGFuZ2xlLgogICogPHA+CiAgKiBBIHR5cGljYWwgdXNlIG9mIHRoZSBBUElzIGxvb2tzIGxpa2UgdGhpczoKICAqIDwvcD4KQEAgLTgxLDcgKzgwLDcgQEAKICAgICAgKiBAcGFyYW0gY29udGV4dCBDb250ZXh0IGluc3RhbmNlIGZvciBhY2Nlc3NpbmcgcmVzb3VyY2VzLgogICAgICAqIEBwYXJhbSBhdHRyaWJ1dGVzIFRoZSBwcmludCBhdHRyaWJ1dGVzLgogICAgICAqLwotICAgIHB1YmxpYyBQcmludGVkUGRmRG9jdW1lbnQoQ29udGV4dCBjb250ZXh0LCBQcmludEF0dHJpYnV0ZXMgYXR0cmlidXRlcykgeworICAgIHB1YmxpYyBQcmludGVkUGRmRG9jdW1lbnQoQE5vbk51bGwgQ29udGV4dCBjb250ZXh0LCBATm9uTnVsbCBQcmludEF0dHJpYnV0ZXMgYXR0cmlidXRlcykgewogICAgICAgICBNZWRpYVNpemUgbWVkaWFTaXplID0gYXR0cmlidXRlcy5nZXRNZWRpYVNpemUoKTsKIAogICAgICAgICAvLyBDb21wdXRlIHRoZSBzaXplIG9mIHRoZSB0YXJnZXQgY2FudmFzIGZyb20gdGhlIGF0dHJpYnV0ZXMuCkBAIC0xMDUsMjggKzEwNCwyOCBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIFN0YXJ0cyBhIG5ldyBwYWdlLiBUaGUgcGFnZSBpcyBjcmVhdGVkIHVzaW5nIHdpZHRoLCBoZWlnaHQgIGFuZCBjb250ZW50Ci0gICAgICogcmVjdGFuZ2xlIGNvbXB1dGVkIGZyb20gdGhlIHByaW50IGF0dHJpYnV0ZXMgcGFzc2VkIGluIHRoZSBjb25zdHJ1Y3RvcgotICAgICAqIGFuZCB0aGUgZ2l2ZW4gcGFnZSBudW1iZXIgdG8gY3JlYXRlIGFuIGFwcHJvcHJpYXRlIHtAbGluayBQYWdlSW5mb30uCisgICAgICogU3RhcnRzIGEgbmV3IHBhZ2UuIFRoZSBwYWdlIGlzIGNyZWF0ZWQgdXNpbmcgd2lkdGgsIGhlaWdodCBhbmQgY29udGVudCByZWN0YW5nbGUgY29tcHV0ZWQKKyAgICAgKiBmcm9tIHRoZSBwcmludCBhdHRyaWJ1dGVzIHBhc3NlZCBpbiB0aGUgY29uc3RydWN0b3IgYW5kIHRoZSBnaXZlbiBwYWdlIG51bWJlciB0byBjcmVhdGUgYW4KKyAgICAgKiBhcHByb3ByaWF0ZSB7QGxpbmsgYW5kcm9pZC5ncmFwaGljcy5wZGYuUGRmRG9jdW1lbnQuUGFnZUluZm8gUGFnZUluZm99LgogICAgICAqIDxwPgotICAgICAqIEFmdGVyIHRoZSBwYWdlIGlzIGNyZWF0ZWQgeW91IGNhbiBkcmF3IGFyYml0cmFyeSBjb250ZW50IG9uIHRoZSBwYWdlJ3MKLSAgICAgKiBjYW52YXMgd2hpY2ggeW91IGNhbiBnZXQgYnkgY2FsbGluZyB7QGxpbmsgUGFnZSNnZXRDYW52YXMoKSBQYWdlLmdldENhbnZhcygpfS4KKyAgICAgKiBBZnRlciB0aGUgcGFnZSBpcyBjcmVhdGVkIHlvdSBjYW4gZHJhdyBhcmJpdHJhcnkgY29udGVudCBvbiB0aGUgcGFnZSdzIGNhbnZhcyB3aGljaCB5b3UgY2FuCisgICAgICogZ2V0IGJ5IGNhbGxpbmcge0BsaW5rIGFuZHJvaWQuZ3JhcGhpY3MucGRmLlBkZkRvY3VtZW50LlBhZ2UjZ2V0Q2FudmFzKCkgUGFnZS5nZXRDYW52YXMoKX0uCiAgICAgICogQWZ0ZXIgeW91IGFyZSBkb25lIGRyYXdpbmcgdGhlIGNvbnRlbnQgeW91IHNob3VsZCBmaW5pc2ggdGhlIHBhZ2UgYnkgY2FsbGluZwotICAgICAqIHtAbGluayAjZmluaXNoUGFnZShQYWdlKX0uIEFmdGVyIHRoZSBwYWdlIGlzIGZpbmlzaGVkIHlvdSBzaG91bGQgbm8gbG9uZ2VyCi0gICAgICogYWNjZXNzIHRoZSBwYWdlIG9yIGl0cyBjYW52YXMuCisgICAgICoge0BsaW5rICNmaW5pc2hQYWdlKFBhZ2UpfS4gQWZ0ZXIgdGhlIHBhZ2UgaXMgZmluaXNoZWQgeW91IHNob3VsZCBubyBsb25nZXIgYWNjZXNzIHRoZSBwYWdlIG9yCisgICAgICogaXRzIGNhbnZhcy4KICAgICAgKiA8L3A+CiAgICAgICogPHA+Ci0gICAgICogPHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBEbyBub3QgY2FsbCB0aGlzIG1ldGhvZCBhZnRlciB7QGxpbmsgI2Nsb3NlKCl9LgotICAgICAqIEFsc28gZG8gbm90IGNhbGwgdGhpcyBtZXRob2QgaWYgdGhlIGxhc3QgcGFnZSByZXR1cm5lZCBieSB0aGlzIG1ldGhvZAotICAgICAqIGlzIG5vdCBmaW5pc2hlZCBieSBjYWxsaW5nIHtAbGluayAjZmluaXNoUGFnZShQYWdlKX0uCisgICAgICogPHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBEbyBub3QgY2FsbCB0aGlzIG1ldGhvZCBhZnRlciB7QGxpbmsgI2Nsb3NlKCl9LiBBbHNvIGRvIG5vdCBjYWxsIHRoaXMKKyAgICAgKiBtZXRob2QgaWYgdGhlIGxhc3QgcGFnZSByZXR1cm5lZCBieSB0aGlzIG1ldGhvZCBpcyBub3QgZmluaXNoZWQgYnkgY2FsbGluZworICAgICAqIHtAbGluayAjZmluaXNoUGFnZShQYWdlKX0uCiAgICAgICogPC9wPgogICAgICAqCi0gICAgICogQHBhcmFtIHBhZ2VOdW1iZXIgVGhlIHBhZ2UgbnVtYmVyLiBNdXN0IGJlIGEgcG9zaXRpdmUgdmFsdWUuCisgICAgICogQHBhcmFtIHBhZ2VOdW1iZXIgVGhlIHBhZ2UgbnVtYmVyLiBNdXN0IGJlIGEgbm9uIG5lZ2F0aXZlLgogICAgICAqIEByZXR1cm4gQSBibGFuayBwYWdlLgogICAgICAqCiAgICAgICogQHNlZSAjZmluaXNoUGFnZShQYWdlKQogICAgICAqLwotICAgIHB1YmxpYyBQYWdlIHN0YXJ0UGFnZShpbnQgcGFnZU51bWJlcikgeworICAgIHB1YmxpYyBATm9uTnVsbCBQYWdlIHN0YXJ0UGFnZShASW50UmFuZ2UoZnJvbSA9IDApIGludCBwYWdlTnVtYmVyKSB7CiAgICAgICAgIFBhZ2VJbmZvIHBhZ2VJbmZvID0gbmV3IFBhZ2VJbmZvCiAgICAgICAgICAgICAgICAgLkJ1aWxkZXIobVBhZ2VXaWR0aCwgbVBhZ2VIZWlnaHQsIHBhZ2VOdW1iZXIpCiAgICAgICAgICAgICAgICAgLnNldENvbnRlbnRSZWN0KG1Db250ZW50UmVjdCkKQEAgLTEzOSw3ICsxMzgsNyBAQAogICAgICAqCiAgICAgICogQHJldHVybiBUaGUgcGFnZSB3aWR0aCBpbiBQb3N0U2NyaXB0IHBvaW50cyAoMS83MnRoIG9mIGFuIGluY2gpLgogICAgICAqLwotICAgIHB1YmxpYyBpbnQgZ2V0UGFnZVdpZHRoKCkgeworICAgIHB1YmxpYyBASW50UmFuZ2UoZnJvbSA9IDApIGludCBnZXRQYWdlV2lkdGgoKSB7CiAgICAgICAgIHJldHVybiBtUGFnZVdpZHRoOwogICAgIH0KIApAQCAtMTQ4LDcgKzE0Nyw3IEBACiAgICAgICoKICAgICAgKiBAcmV0dXJuIFRoZSBwYWdlIGhlaWdodCBpbiBQb3N0U2NyaXB0IHBvaW50cyAoMS83MnRoIG9mIGFuIGluY2gpLgogICAgICAqLwotICAgIHB1YmxpYyBpbnQgZ2V0UGFnZUhlaWdodCgpIHsKKyAgICBwdWJsaWMgQEludFJhbmdlKGZyb20gPSAwKSBpbnQgZ2V0UGFnZUhlaWdodCgpIHsKICAgICAgICAgcmV0dXJuIG1QYWdlSGVpZ2h0OwogICAgIH0KIApAQCAtMTU4LDcgKzE1Nyw3IEBACiAgICAgICoKICAgICAgKiBAcmV0dXJuIFRoZSBjb250ZW50IHJlY3RhbmdsZS4KICAgICAgKi8KLSAgICBwdWJsaWMgUmVjdCBnZXRQYWdlQ29udGVudFJlY3QoKSB7CisgICAgcHVibGljIEBOb25OdWxsIFJlY3QgZ2V0UGFnZUNvbnRlbnRSZWN0KCkgewogICAgICAgICByZXR1cm4gbUNvbnRlbnRSZWN0OwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50c2VydmljZS9DdXN0b21QcmludGVySWNvbkNhbGxiYWNrLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9wcmludHNlcnZpY2UvQ3VzdG9tUHJpbnRlckljb25DYWxsYmFjay5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhOWVhOGIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9wcmludHNlcnZpY2UvQ3VzdG9tUHJpbnRlckljb25DYWxsYmFjay5qYXZhCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQucHJpbnRzZXJ2aWNlOworCitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk5vbk51bGw7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk51bGxhYmxlOworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuSWNvbjsKK2ltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKK2ltcG9ydCBhbmRyb2lkLnByaW50LlByaW50ZXJJZDsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOworCisKKy8qKgorICogQ2FsbGJhY2sgZm9yIHtAbGluayBQcmludGVyRGlzY292ZXJ5U2Vzc2lvbiNvblJlcXVlc3RDdXN0b21QcmludGVySWNvbn0uCisgKi8KK3B1YmxpYyBjbGFzcyBDdXN0b21QcmludGVySWNvbkNhbGxiYWNrIHsKKyAgICAvKiogVGhlIHByaW50ZXIgdGhlIGNhbGwgYmFjayBpcyBmb3IgKi8KKyAgICBwcml2YXRlIGZpbmFsIEBOb25OdWxsIFByaW50ZXJJZCBtUHJpbnRlcklkOworICAgIHByaXZhdGUgZmluYWwgQE5vbk51bGwgSVByaW50U2VydmljZUNsaWVudCBtT2JzZXJ2ZXI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIExPR19UQUcgPSAiQ3VzdG9tUHJpbnRlckljb25DYWxsYmFjayI7CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYSBjYWxsYmFjayBjbGFzcyB0byBiZSB1c2VkIG9uY2UgYSBpY29uIGlzIGxvYWRlZAorICAgICAqCisgICAgICogQHBhcmFtIHByaW50ZXJJZCBUaGUgcHJpbnRlciB0aGUgaWNvbiBzaG91bGQgYmUgbG9hZGVkIGZvcgorICAgICAqIEBwYXJhbSBvYnNlcnZlciBUaGUgb2JzZXJ2ZXIgdGhhdCBuZWVkcyB0byBiZSBub3RpZmllZCBhYm91dCB0aGUgdXBkYXRlLgorICAgICAqLworICAgIEN1c3RvbVByaW50ZXJJY29uQ2FsbGJhY2soQE5vbk51bGwgUHJpbnRlcklkIHByaW50ZXJJZCwgQE5vbk51bGwgSVByaW50U2VydmljZUNsaWVudCBvYnNlcnZlcikgeworICAgICAgICBtUHJpbnRlcklkID0gcHJpbnRlcklkOworICAgICAgICBtT2JzZXJ2ZXIgPSBvYnNlcnZlcjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBQcm92aWRlIGEgbmV3IGljb24gZm9yIGEgcHJpbnRlci4gQ2FuIGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZSB0byB1cGRhdGUgdGhlIGljb24uCisgICAgICoKKyAgICAgKiBAcGFyYW0gaWNvbiBUaGUgbmV3IGljb24gZm9yIHRoZSBwcmludGVyIG9yIG51bGwgdG8gdW5zZXQgdGhlIGN1cnJlbnQgaWNvbgorICAgICAqIEByZXR1cm4gdHJ1ZSBpZmYgdGhlIGljb24gY291bGQgYmUgdXBkYXRlZAorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIG9uQ3VzdG9tUHJpbnRlckljb25Mb2FkZWQoQE51bGxhYmxlIEljb24gaWNvbikgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgbU9ic2VydmVyLm9uQ3VzdG9tUHJpbnRlckljb25Mb2FkZWQobVByaW50ZXJJZCwgaWNvbik7CisgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBMb2cuZShMT0dfVEFHICwgIkNvdWxkIG5vdCB1cGRhdGUgaWNvbiIsIGUpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvcHJpbnRzZXJ2aWNlL0lQcmludFNlcnZpY2UuYWlkbCBiL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50c2VydmljZS9JUHJpbnRTZXJ2aWNlLmFpZGwKaW5kZXggZWUzNjYxOS4uMzc1MGQ3YSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvcHJpbnRzZXJ2aWNlL0lQcmludFNlcnZpY2UuYWlkbAorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9wcmludHNlcnZpY2UvSVByaW50U2VydmljZS5haWRsCkBAIC0xMCw3ICsxMCw3IEBACiAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFn/2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIApAQCAtMzUsNiArMzUsMTUgQEAKICAgICB2b2lkIHN0b3BQcmludGVyRGlzY292ZXJ5KCk7CiAgICAgdm9pZCB2YWxpZGF0ZVByaW50ZXJzKGluIExpc3Q8UHJpbnRlcklkPiBwcmludGVySWRzKTsKICAgICB2b2lkIHN0YXJ0UHJpbnRlclN0YXRlVHJhY2tpbmcoaW4gUHJpbnRlcklkIHByaW50ZXJJZCk7CisKKyAgICAvKioKKyAgICAgKiBSZXF1ZXN0IHRoZSBjdXN0b20gaWNvbiBmb3IgYSBwcmludGVyLgorICAgICAqCisgICAgICogQHBhcmFtIHByaW50ZXJJZCB0aGUgaWQgb2YgdGhlIHByaW50ZXIgdGhlIGljb24gc2hvdWxkIGJlIGxvYWRlZCBmb3IKKyAgICAgKiBAc2VlIGFuZHJvaWQucHJpbnQuUHJpbnRlckluZm8uQnVpbGRlciNzZXRIYXNDdXN0b21QcmludGVySWNvbigpCisgICAgICovCisgICAgdm9pZCByZXF1ZXN0Q3VzdG9tUHJpbnRlckljb24oaW4gUHJpbnRlcklkIHByaW50ZXJJZCk7CisKICAgICB2b2lkIHN0b3BQcmludGVyU3RhdGVUcmFja2luZyhpbiBQcmludGVySWQgcHJpbnRlcklkKTsKICAgICB2b2lkIGRlc3Ryb3lQcmludGVyRGlzY292ZXJ5U2Vzc2lvbigpOwogfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvcHJpbnRzZXJ2aWNlL0lQcmludFNlcnZpY2VDbGllbnQuYWlkbCBiL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50c2VydmljZS9JUHJpbnRTZXJ2aWNlQ2xpZW50LmFpZGwKaW5kZXggYjRiYWE0OC4uMGFlMWUxOCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvcHJpbnRzZXJ2aWNlL0lQcmludFNlcnZpY2VDbGllbnQuYWlkbAorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9wcmludHNlcnZpY2UvSVByaW50U2VydmljZUNsaWVudC5haWRsCkBAIC0xNiw2ICsxNiw3IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5wcmludHNlcnZpY2U7CiAKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkljb247CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxGaWxlRGVzY3JpcHRvcjsKIGltcG9ydCBhbmRyb2lkLnByaW50LlByaW50Sm9iSW5mbzsKIGltcG9ydCBhbmRyb2lkLnByaW50LlByaW50ZXJJZDsKQEAgLTUzLDQgKzU0LDEzIEBACiAKICAgICB2b2lkIG9uUHJpbnRlcnNBZGRlZChpbiBQYXJjZWxlZExpc3RTbGljZSBwcmludGVycyk7CiAgICAgdm9pZCBvblByaW50ZXJzUmVtb3ZlZChpbiBQYXJjZWxlZExpc3RTbGljZSBwcmludGVySWRzKTsKKworICAgIC8qKgorICAgICAqIEhhbmRsZSB0aGF0IGEgY3VzdG9tIGljb24gZm9yIGEgcHJpbnRlciB3YXMgbG9hZGVkLgorICAgICAqCisgICAgICogQHBhcmFtIHByaW50ZXJJZCB0aGUgaWQgb2YgdGhlIHByaW50ZXIgdGhlIGljb24gYmVsb25ncyB0bworICAgICAqIEBwYXJhbSBpY29uIHRoZSBpY29uIHRoYXQgd2FzIGxvYWRlZAorICAgICAqIEBzZWUgYW5kcm9pZC5wcmludC5QcmludGVySW5mby5CdWlsZGVyI3NldEhhc0N1c3RvbVByaW50ZXJJY29uKCkKKyAgICAgKi8KKyAgICB2b2lkIG9uQ3VzdG9tUHJpbnRlckljb25Mb2FkZWQoaW4gUHJpbnRlcklkIHByaW50ZXJJZCwgaW4gSWNvbiBpY29uKTsKIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50c2VydmljZS9QcmludERvY3VtZW50LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9wcmludHNlcnZpY2UvUHJpbnREb2N1bWVudC5qYXZhCmluZGV4IGU0M2YyYTguLjAxMjFhZTEgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50c2VydmljZS9QcmludERvY3VtZW50LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJpbnRzZXJ2aWNlL1ByaW50RG9jdW1lbnQuamF2YQpAQCAtMTYsNiArMTYsOCBAQAogCiBwYWNrYWdlIGFuZHJvaWQucHJpbnRzZXJ2aWNlOwogCitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk5vbk51bGw7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk51bGxhYmxlOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsRmlsZURlc2NyaXB0b3I7CiBpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgYW5kcm9pZC5wcmludC5QcmludERvY3VtZW50SW5mbzsKQEAgLTU0LDcgKzU2LDcgQEAKICAgICAgKgogICAgICAqIEByZXR1cm4gVGhlIGRvY3VtZW50IGluZm8uCiAgICAgICovCi0gICAgcHVibGljIFByaW50RG9jdW1lbnRJbmZvIGdldEluZm8oKSB7CisgICAgcHVibGljIEBOb25OdWxsIFByaW50RG9jdW1lbnRJbmZvIGdldEluZm8oKSB7CiAgICAgICAgIFByaW50U2VydmljZS50aHJvd0lmTm90Q2FsbGVkT25NYWluVGhyZWFkKCk7CiAgICAgICAgIHJldHVybiBtSW5mbzsKICAgICB9CkBAIC02OSw3ICs3MSw3IEBACiAgICAgICoKICAgICAgKiBAcmV0dXJuIEEgZmlsZSBkZXNjcmlwdG9yIGZvciByZWFkaW5nIHRoZSBkYXRhLgogICAgICAqLwotICAgIHB1YmxpYyBQYXJjZWxGaWxlRGVzY3JpcHRvciBnZXREYXRhKCkgeworICAgIHB1YmxpYyBATnVsbGFibGUgUGFyY2VsRmlsZURlc2NyaXB0b3IgZ2V0RGF0YSgpIHsKICAgICAgICAgUHJpbnRTZXJ2aWNlLnRocm93SWZOb3RDYWxsZWRPbk1haW5UaHJlYWQoKTsKICAgICAgICAgUGFyY2VsRmlsZURlc2NyaXB0b3Igc291cmNlID0gbnVsbDsKICAgICAgICAgUGFyY2VsRmlsZURlc2NyaXB0b3Igc2luayA9IG51bGw7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9wcmludHNlcnZpY2UvUHJpbnRKb2IuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50c2VydmljZS9QcmludEpvYi5qYXZhCmluZGV4IDg2ZmMyOTIuLjY0MTRiNmEgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50c2VydmljZS9QcmludEpvYi5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50c2VydmljZS9QcmludEpvYi5qYXZhCkBAIC0zNDQsNyArMzQ0LDcgQEAKICAgICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHRhZyB3YXMgc2V0LCBmYWxzZSBvdGhlcndpc2UuCiAgICAgICovCiAgICAgQE1haW5UaHJlYWQKLSAgICBwdWJsaWMgYm9vbGVhbiBzZXRUYWcoU3RyaW5nIHRhZykgeworICAgIHB1YmxpYyBib29sZWFuIHNldFRhZyhATm9uTnVsbCBTdHJpbmcgdGFnKSB7CiAgICAgICAgIFByaW50U2VydmljZS50aHJvd0lmTm90Q2FsbGVkT25NYWluVGhyZWFkKCk7CiAgICAgICAgIGlmIChpc0luSW1tdXRhYmxlU3RhdGUoKSkgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzY0LDcgKzM2NCw4IEBACiAgICAgICoKICAgICAgKiBAc2VlICNzZXRUYWcoU3RyaW5nKQogICAgICAqLwotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGFnKCkgeworICAgIEBNYWluVGhyZWFkCisgICAgcHVibGljIEBOdWxsYWJsZSBTdHJpbmcgZ2V0VGFnKCkgewogICAgICAgICBQcmludFNlcnZpY2UudGhyb3dJZk5vdENhbGxlZE9uTWFpblRocmVhZCgpOwogICAgICAgICByZXR1cm4gZ2V0SW5mbygpLmdldFRhZygpOwogICAgIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50c2VydmljZS9QcmludFNlcnZpY2UuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50c2VydmljZS9QcmludFNlcnZpY2UuamF2YQppbmRleCA2Mjk1ODIyLi5kMDAzN2I3IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9wcmludHNlcnZpY2UvUHJpbnRTZXJ2aWNlLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJpbnRzZXJ2aWNlL1ByaW50U2VydmljZS5qYXZhCkBAIC0xNiw2ICsxNiw3IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5wcmludHNlcnZpY2U7CiAKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTnVsbGFibGU7CiBpbXBvcnQgYW5kcm9pZC5hcHAuU2VydmljZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKQEAgLTE5MSwzMCArMTkyLDI5IEBACiAKICAgICAvKioKICAgICAgKiBJZiB5b3UgZGVjbGFyZWQgYW4gb3B0aW9uYWwgYWN0aXZpdHkgd2l0aCBhZHZhbmNlZCBwcmludCBvcHRpb25zIHZpYSB0aGUKLSAgICAgKiB7QGxpbmsgYW5kcm9pZC5SLmF0dHIjYWR2YW5jZWRQcmludE9wdGlvbnNBY3Rpdml0eSBhZHZhbmNlZFByaW50T3B0aW9uc0FjdGl2aXR5fQotICAgICAqIGF0dHJpYnV0ZSwgdGhpcyBleHRyYSBpcyB1c2VkIHRvIHBhc3MgaW4gdGhlIGN1cnJlbnRseSBjb25zdHJ1Y3RlZCB7QGxpbmsKLSAgICAgKiBQcmludEpvYkluZm99IHRvIHlvdXIgYWN0aXZpdHkgYWxsb3dpbmcgeW91IHRvIG1vZGlmeSBpdC4gQWZ0ZXIgeW91IGFyZQotICAgICAqIGRvbmUsIHlvdSBtdXN0IHJldHVybiB0aGUgbW9kaWZpZWQge0BsaW5rIFByaW50Sm9iSW5mb30gdmlhIHRoZSBzYW1lIGV4dHJhLgorICAgICAqIHtAbGluayBhbmRyb2lkLlIuYXR0ciNhZHZhbmNlZFByaW50T3B0aW9uc0FjdGl2aXR5IGFkdmFuY2VkUHJpbnRPcHRpb25zQWN0aXZpdHl9IGF0dHJpYnV0ZSwKKyAgICAgKiB0aGlzIGV4dHJhIGlzIHVzZWQgdG8gcGFzcyBpbiB0aGUgY3VycmVudGx5IGNvbnN0cnVjdGVkIHtAbGluayBQcmludEpvYkluZm99IHRvIHlvdXIgYWN0aXZpdHkKKyAgICAgKiBhbGxvd2luZyB5b3UgdG8gbW9kaWZ5IGl0LiBBZnRlciB5b3UgYXJlIGRvbmUsIHlvdSBtdXN0IHJldHVybiB0aGUgbW9kaWZpZWQKKyAgICAgKiB7QGxpbmsgUHJpbnRKb2JJbmZvfSB2aWEgdGhlIHNhbWUgZXh0cmEuCiAgICAgICogPHA+Ci0gICAgICogWW91IGNhbm5vdCBtb2RpZnkgdGhlIHBhc3NlZCBpbiB7QGxpbmsgUHJpbnRKb2JJbmZvfSBkaXJlY3RseSwgcmF0aGVyIHlvdQotICAgICAqIHNob3VsZCBidWlsZCBhbm90aGVyIG9uZSB1c2luZyB0aGUge0BsaW5rIFByaW50Sm9iSW5mby5CdWlsZGVyfSBjbGFzcy4gWW91Ci0gICAgICogY2FuIHNwZWNpZnkgYW55IHN0YW5kYXJkIHByb3BlcnRpZXMgYW5kIGFkZCBhZHZhbmNlZCwgcHJpbnRlciBzcGVjaWZpYywKLSAgICAgKiBvbmVzIHZpYSB7QGxpbmsgUHJpbnRKb2JJbmZvLkJ1aWxkZXIjcHV0QWR2YW5jZWRPcHRpb24oU3RyaW5nLCBTdHJpbmcpCi0gICAgICogUHJpbnRKb2JJbmZvLkJ1aWxkZXIucHV0QWR2YW5jZWRPcHRpb24oU3RyaW5nLCBTdHJpbmcpfSBhbmQge0BsaW5rCi0gICAgICogUHJpbnRKb2JJbmZvLkJ1aWxkZXIjcHV0QWR2YW5jZWRPcHRpb24oU3RyaW5nLCBpbnQpCi0gICAgICogUHJpbnRKb2JJbmZvLkJ1aWxkZXIucHV0QWR2YW5jZWRPcHRpb24oU3RyaW5nLCBpbnQpfS4gVGhlIGFkdmFuY2VkIG9wdGlvbnMKLSAgICAgKiBhcmUgbm90IGludGVycHJldGVkIGJ5IHRoZSBzeXN0ZW0sIHRoZXkgd2lsbCBub3QgYmUgdmlzaWJsZSB0byBhcHBsaWNhdGlvbnMsCi0gICAgICogYW5kIGNhbiBvbmx5IGJlIGFjY2Vzc2VkIGJ5IHlvdXIgcHJpbnQgc2VydmljZSB2aWEge0BsaW5rCi0gICAgICogUHJpbnRKb2IjZ2V0QWR2YW5jZWRTdHJpbmdPcHRpb24oU3RyaW5nKSBQcmludEpvYi5nZXRBZHZhbmNlZFN0cmluZ09wdGlvbihTdHJpbmcpfQotICAgICAqIGFuZCB7QGxpbmsgUHJpbnRKb2IjZ2V0QWR2YW5jZWRJbnRPcHRpb24oU3RyaW5nKSBQcmludEpvYi5nZXRBZHZhbmNlZEludE9wdGlvbihTdHJpbmcpfS4KKyAgICAgKiBZb3UgY2Fubm90IG1vZGlmeSB0aGUgcGFzc2VkIGluIHtAbGluayBQcmludEpvYkluZm99IGRpcmVjdGx5LCByYXRoZXIgeW91IHNob3VsZCBidWlsZAorICAgICAqIGFub3RoZXIgb25lIHVzaW5nIHRoZSB7QGxpbmsgYW5kcm9pZC5wcmludC5QcmludEpvYkluZm8uQnVpbGRlciBQcmludEpvYkluZm8uQnVpbGRlcn0gY2xhc3MuCisgICAgICogWW91IGNhbiBzcGVjaWZ5IGFueSBzdGFuZGFyZCBwcm9wZXJ0aWVzIGFuZCBhZGQgYWR2YW5jZWQsIHByaW50ZXIgc3BlY2lmaWMsIG9uZXMgdmlhCisgICAgICoge0BsaW5rIGFuZHJvaWQucHJpbnQuUHJpbnRKb2JJbmZvLkJ1aWxkZXIjcHV0QWR2YW5jZWRPcHRpb24oU3RyaW5nLCBTdHJpbmcpCisgICAgICogUHJpbnRKb2JJbmZvLkJ1aWxkZXIucHV0QWR2YW5jZWRPcHRpb24oU3RyaW5nLCBTdHJpbmcpfSBhbmQKKyAgICAgKiB7QGxpbmsgYW5kcm9pZC5wcmludC5QcmludEpvYkluZm8uQnVpbGRlciNwdXRBZHZhbmNlZE9wdGlvbihTdHJpbmcsIGludCkKKyAgICAgKiBQcmludEpvYkluZm8uQnVpbGRlci5wdXRBZHZhbmNlZE9wdGlvbihTdHJpbmcsIGludCl9LiBUaGUgYWR2YW5jZWQgb3B0aW9ucyBhcmUgbm90CisgICAgICogaW50ZXJwcmV0ZWQgYnkgdGhlIHN5c3RlbSwgdGhleSB3aWxsIG5vdCBiZSB2aXNpYmxlIHRvIGFwcGxpY2F0aW9ucywgYW5kIGNhbiBvbmx5IGJlIGFjY2Vzc2VkCisgICAgICogYnkgeW91ciBwcmludCBzZXJ2aWNlIHZpYSB7QGxpbmsgUHJpbnRKb2IjZ2V0QWR2YW5jZWRTdHJpbmdPcHRpb24oU3RyaW5nKQorICAgICAqIFByaW50Sm9iLmdldEFkdmFuY2VkU3RyaW5nT3B0aW9uKFN0cmluZyl9IGFuZCB7QGxpbmsgUHJpbnRKb2IjZ2V0QWR2YW5jZWRJbnRPcHRpb24oU3RyaW5nKQorICAgICAqIFByaW50Sm9iLmdldEFkdmFuY2VkSW50T3B0aW9uKFN0cmluZyl9LgogICAgICAqIDwvcD4KICAgICAgKiA8cD4KLSAgICAgKiBJZiB0aGUgYWR2YW5jZWQgcHJpbnQgb3B0aW9ucyBhY3Rpdml0eSBvZmZlcnMgY2hhbmdlcyB0byB0aGUgc3RhbmRhcmQgcHJpbnQKLSAgICAgKiBvcHRpb25zLCB5b3UgY2FuIGdldCB0aGUgY3VycmVudCB7QGxpbmsgYW5kcm9pZC5wcmludC5QcmludGVySW5mb30gdXNpbmcgdGhlCi0gICAgICoge0BsaW5rICNFWFRSQV9QUklOVEVSX0lORk99IGV4dHJhIHdoaWNoIHdpbGwgYWxsb3cgeW91IHRvIHByZXNlbnQgdGhlIHVzZXIKLSAgICAgKiB3aXRoIFVJIG9wdGlvbnMgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IHByaW50ZXIuIEZvciBleGFtcGxlLCBpZiB0aGUgY3VycmVudAotICAgICAqIHByaW50ZXIgZG9lcyBub3Qgc3VwcG9ydCBhIGdpdmVuIG1lZGlhIHNpemUsIHlvdSBzaG91bGQgbm90IG9mZmVyIGl0IGluIHRoZQotICAgICAqIGFkdmFuY2VkIHByaW50IG9wdGlvbnMgVUkuCisgICAgICogSWYgdGhlIGFkdmFuY2VkIHByaW50IG9wdGlvbnMgYWN0aXZpdHkgb2ZmZXJzIGNoYW5nZXMgdG8gdGhlIHN0YW5kYXJkIHByaW50IG9wdGlvbnMsIHlvdSBjYW4KKyAgICAgKiBnZXQgdGhlIGN1cnJlbnQge0BsaW5rIGFuZHJvaWQucHJpbnQuUHJpbnRlckluZm8gUHJpbnRlckluZm99IHVzaW5nIHRoZQorICAgICAqIHtAbGluayAjRVhUUkFfUFJJTlRFUl9JTkZPfSBleHRyYSB3aGljaCB3aWxsIGFsbG93IHlvdSB0byBwcmVzZW50IHRoZSB1c2VyIHdpdGggVUkgb3B0aW9ucworICAgICAqIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBwcmludGVyLiBGb3IgZXhhbXBsZSwgaWYgdGhlIGN1cnJlbnQgcHJpbnRlciBkb2VzIG5vdCBzdXBwb3J0IGEKKyAgICAgKiBnaXZlbiBtZWRpYSBzaXplLCB5b3Ugc2hvdWxkIG5vdCBvZmZlciBpdCBpbiB0aGUgYWR2YW5jZWQgcHJpbnQgb3B0aW9ucyBVSS4KICAgICAgKiA8L3A+CiAgICAgICoKICAgICAgKiBAc2VlICNFWFRSQV9QUklOVEVSX0lORk8KQEAgLTI3NSw5ICsyNzUsMTAgQEAKICAgICAvKioKICAgICAgKiBDYWxsYmFjayBhc2tpbmcgeW91IHRvIGNyZWF0ZSBhIG5ldyB7QGxpbmsgUHJpbnRlckRpc2NvdmVyeVNlc3Npb259LgogICAgICAqCisgICAgICogQHJldHVybiBUaGUgY3JlYXRlZCBzZXNzaW9uLgogICAgICAqIEBzZWUgUHJpbnRlckRpc2NvdmVyeVNlc3Npb24KICAgICAgKi8KLSAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgUHJpbnRlckRpc2NvdmVyeVNlc3Npb24gb25DcmVhdGVQcmludGVyRGlzY292ZXJ5U2Vzc2lvbigpOworICAgIHByb3RlY3RlZCBhYnN0cmFjdCBATnVsbGFibGUgUHJpbnRlckRpc2NvdmVyeVNlc3Npb24gb25DcmVhdGVQcmludGVyRGlzY292ZXJ5U2Vzc2lvbigpOwogCiAgICAgLyoqCiAgICAgICogQ2FsbGVkIHdoZW4gY2FuY2VsbGF0aW9uIG9mIGEgcHJpbnQgam9iIGlzIHJlcXVlc3RlZC4gVGhlIHNlcnZpY2UKQEAgLTM2OCw2ICszNjksNyBAQAogICAgICAgICAgICAgICAgIG1IYW5kbGVyLnNlbmRFbXB0eU1lc3NhZ2UoU2VydmljZUhhbmRsZXIuTVNHX0RFU1RST1lfUFJJTlRFUl9ESVNDT1ZFUllfU0VTU0lPTik7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICAgcHVibGljIHZvaWQgc3RhcnRQcmludGVyRGlzY292ZXJ5KExpc3Q8UHJpbnRlcklkPiBwcmlvcml0eUxpc3QpIHsKICAgICAgICAgICAgICAgICBtSGFuZGxlci5vYnRhaW5NZXNzYWdlKFNlcnZpY2VIYW5kbGVyLk1TR19TVEFSVF9QUklOVEVSX0RJU0NPVkVSWSwKICAgICAgICAgICAgICAgICAgICAgICAgIHByaW9yaXR5TGlzdCkuc2VuZFRvVGFyZ2V0KCk7CkBAIC0zOTEsNiArMzkzLDEyIEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIHZvaWQgcmVxdWVzdEN1c3RvbVByaW50ZXJJY29uKFByaW50ZXJJZCBwcmludGVySWQpIHsKKyAgICAgICAgICAgICAgICBtSGFuZGxlci5vYnRhaW5NZXNzYWdlKFNlcnZpY2VIYW5kbGVyLk1TR19SRVFVRVNUX0NVU1RPTV9QUklOVEVSX0lDT04sCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGVySWQpLnNlbmRUb1RhcmdldCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHN0b3BQcmludGVyU3RhdGVUcmFja2luZyhQcmludGVySWQgcHJpbnRlcklkKSB7CiAgICAgICAgICAgICAgICAgbUhhbmRsZXIub2J0YWluTWVzc2FnZShTZXJ2aWNlSGFuZGxlci5NU0dfU1RPUF9QUklOVEVSX1NUQVRFX1RSQUNLSU5HLAogICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRlcklkKS5zZW5kVG9UYXJnZXQoKTsKQEAgLTQyMywxMCArNDMxLDExIEBACiAgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1TR19TVE9QX1BSSU5URVJfRElTQ09WRVJZID0gNDsKICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTVNHX1ZBTElEQVRFX1BSSU5URVJTID0gNTsKICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTVNHX1NUQVJUX1BSSU5URVJfU1RBVEVfVFJBQ0tJTkcgPSA2OwotICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNU0dfU1RPUF9QUklOVEVSX1NUQVRFX1RSQUNLSU5HID0gNzsKLSAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTVNHX09OX1BSSU5USk9CX1FVRVVFRCA9IDg7Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1TR19PTl9SRVFVRVNUX0NBTkNFTF9QUklOVEpPQiA9IDk7Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1TR19TRVRfQ0xJRU5UID0gMTA7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1TR19SRVFVRVNUX0NVU1RPTV9QUklOVEVSX0lDT04gPSA3OworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNU0dfU1RPUF9QUklOVEVSX1NUQVRFX1RSQUNLSU5HID0gODsKKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTVNHX09OX1BSSU5USk9CX1FVRVVFRCA9IDk7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1TR19PTl9SRVFVRVNUX0NBTkNFTF9QUklOVEpPQiA9IDEwOworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNU0dfU0VUX0NMSUVOVCA9IDExOwogCiAgICAgICAgIHB1YmxpYyBTZXJ2aWNlSGFuZGxlcihMb29wZXIgbG9vcGVyKSB7CiAgICAgICAgICAgICBzdXBlcihsb29wZXIsIG51bGwsIHRydWUpOwpAQCAtNTA4LDYgKzUxNywxNyBAQAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBicmVhazsKIAorICAgICAgICAgICAgICAgIGNhc2UgTVNHX1JFUVVFU1RfQ1VTVE9NX1BSSU5URVJfSUNPTjogeworICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIExvZy5pKExPR19UQUcsICJNU0dfUkVRVUVTVF9DVVNUT01fUFJJTlRFUl9JQ09OICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBnZXRQYWNrYWdlTmFtZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAobURpc2NvdmVyeVNlc3Npb24gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgUHJpbnRlcklkIHByaW50ZXJJZCA9IChQcmludGVySWQpIG1lc3NhZ2Uub2JqOworICAgICAgICAgICAgICAgICAgICAgICAgbURpc2NvdmVyeVNlc3Npb24ucmVxdWVzdEN1c3RvbVByaW50ZXJJY29uKHByaW50ZXJJZCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGJyZWFrOworCiAgICAgICAgICAgICAgICAgY2FzZSBNU0dfU1RPUF9QUklOVEVSX1NUQVRFX1RSQUNLSU5HOiB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChERUJVRykgewogICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmkoTE9HX1RBRywgIk1TR19TVE9QX1BSSU5URVJfU1RBVEVfVFJBQ0tJTkcgIgpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvcHJpbnRzZXJ2aWNlL1ByaW50U2VydmljZUluZm8uamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50c2VydmljZS9QcmludFNlcnZpY2VJbmZvLmphdmEKaW5kZXggYTJjNmMwOWUuLmIzM2VmODMgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50c2VydmljZS9QcmludFNlcnZpY2VJbmZvLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJpbnRzZXJ2aWNlL1ByaW50U2VydmljZUluZm8uamF2YQpAQCAtOTgsOCArOTgsNyBAQAogICAgICAqCiAgICAgICogQHBhcmFtIHJlc29sdmVJbmZvIFRoZSBzZXJ2aWNlIHJlc29sdmUgaW5mby4KICAgICAgKiBAcGFyYW0gY29udGV4dCBDb250ZXh0IGZvciBhY2Nlc3NpbmcgcmVzb3VyY2VzLgotICAgICAqIEB0aHJvd3MgWG1sUHVsbFBhcnNlckV4Y2VwdGlvbiBJZiBhIFhNTCBwYXJzaW5nIGVycm9yIG9jY3Vycy4KLSAgICAgKiBAdGhyb3dzIElPRXhjZXB0aW9uIElmIGEgSS9PIGVycm9yIG9jY3Vycy4KKyAgICAgKiBAcmV0dXJuIFRoZSBjcmVhdGVkIGluc3RhbmNlLgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgUHJpbnRTZXJ2aWNlSW5mbyBjcmVhdGUoUmVzb2x2ZUluZm8gcmVzb2x2ZUluZm8sIENvbnRleHQgY29udGV4dCkgewogICAgICAgICBTdHJpbmcgc2V0dGluZ3NBY3Rpdml0eU5hbWUgPSBudWxsOwpAQCAtMjIwLDEwICsyMTksMTIgQEAKICAgICAvKioKICAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgICovCisgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGludCBkZXNjcmliZUNvbnRlbnRzKCkgewogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKKyAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCB3cml0ZVRvUGFyY2VsKFBhcmNlbCBwYXJjZWwsIGludCBmbGFneikgewogICAgICAgICBwYXJjZWwud3JpdGVTdHJpbmcobUlkKTsKICAgICAgICAgcGFyY2VsLndyaXRlUGFyY2VsYWJsZShtUmVzb2x2ZUluZm8sIDApOwpAQCAtMjc1LDEwICsyNzYsMTIgQEAKIAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUGFyY2VsYWJsZS5DcmVhdG9yPFByaW50U2VydmljZUluZm8+IENSRUFUT1IgPQogICAgICAgICAgICAgbmV3IFBhcmNlbGFibGUuQ3JlYXRvcjxQcmludFNlcnZpY2VJbmZvPigpIHsKKyAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyBQcmludFNlcnZpY2VJbmZvIGNyZWF0ZUZyb21QYXJjZWwoUGFyY2VsIHBhcmNlbCkgewogICAgICAgICAgICAgcmV0dXJuIG5ldyBQcmludFNlcnZpY2VJbmZvKHBhcmNlbCk7CiAgICAgICAgIH0KIAorICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHVibGljIFByaW50U2VydmljZUluZm9bXSBuZXdBcnJheShpbnQgc2l6ZSkgewogICAgICAgICAgICAgcmV0dXJuIG5ldyBQcmludFNlcnZpY2VJbmZvW3NpemVdOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9wcmludHNlcnZpY2UvUHJpbnRlckRpc2NvdmVyeVNlc3Npb24uamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50c2VydmljZS9QcmludGVyRGlzY292ZXJ5U2Vzc2lvbi5qYXZhCmluZGV4IDE3Y2I2OGYuLmNkNWE5MDMgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50c2VydmljZS9QcmludGVyRGlzY292ZXJ5U2Vzc2lvbi5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50c2VydmljZS9QcmludGVyRGlzY292ZXJ5U2Vzc2lvbi5qYXZhCkBAIC0xNiw2ICsxNiw3IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5wcmludHNlcnZpY2U7CiAKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTm9uTnVsbDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFyY2VsZWRMaXN0U2xpY2U7CiBpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgYW5kcm9pZC5wcmludC5QcmludGVyQ2FwYWJpbGl0aWVzSW5mbzsKQEAgLTEzOCw3ICsxMzksNyBAQAogICAgICAqIEBzZWUgI3JlbW92ZVByaW50ZXJzKExpc3QpCiAgICAgICogQHNlZSAjaXNEZXN0cm95ZWQoKQogICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCBMaXN0PFByaW50ZXJJbmZvPiBnZXRQcmludGVycygpIHsKKyAgICBwdWJsaWMgZmluYWwgQE5vbk51bGwgTGlzdDxQcmludGVySW5mbz4gZ2V0UHJpbnRlcnMoKSB7CiAgICAgICAgIFByaW50U2VydmljZS50aHJvd0lmTm90Q2FsbGVkT25NYWluVGhyZWFkKCk7CiAgICAgICAgIGlmIChtSXNEZXN0cm95ZWQpIHsKICAgICAgICAgICAgIHJldHVybiBDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKTsKQEAgLTE2MSw3ICsxNjIsNyBAQAogICAgICAqIEBzZWUgI2dldFByaW50ZXJzKCkKICAgICAgKiBAc2VlICNpc0Rlc3Ryb3llZCgpCiAgICAgICovCi0gICAgcHVibGljIGZpbmFsIHZvaWQgYWRkUHJpbnRlcnMoTGlzdDxQcmludGVySW5mbz4gcHJpbnRlcnMpIHsKKyAgICBwdWJsaWMgZmluYWwgdm9pZCBhZGRQcmludGVycyhATm9uTnVsbCBMaXN0PFByaW50ZXJJbmZvPiBwcmludGVycykgewogICAgICAgICBQcmludFNlcnZpY2UudGhyb3dJZk5vdENhbGxlZE9uTWFpblRocmVhZCgpOwogCiAgICAgICAgIC8vIElmIHRoZSBzZXNzaW9uIGlzIGRlc3Ryb3llZCAtIG5vdGhpbmcgZG8gdG8uCkBAIC0yMjUsNyArMjI2LDcgQEAKICAgICAgKiBAc2VlICNnZXRQcmludGVycygpCiAgICAgICogQHNlZSAjaXNEZXN0cm95ZWQoKQogICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCB2b2lkIHJlbW92ZVByaW50ZXJzKExpc3Q8UHJpbnRlcklkPiBwcmludGVySWRzKSB7CisgICAgcHVibGljIGZpbmFsIHZvaWQgcmVtb3ZlUHJpbnRlcnMoQE5vbk51bGwgTGlzdDxQcmludGVySWQ+IHByaW50ZXJJZHMpIHsKICAgICAgICAgUHJpbnRTZXJ2aWNlLnRocm93SWZOb3RDYWxsZWRPbk1haW5UaHJlYWQoKTsKIAogICAgICAgICAvLyBJZiB0aGUgc2Vzc2lvbiBpcyBkZXN0cm95ZWQgLSBub3RoaW5nIGRvIHRvLgpAQCAtMzUwLDcgKzM1MSw3IEBACiAgICAgICogQHNlZSAjcmVtb3ZlUHJpbnRlcnMoTGlzdCkKICAgICAgKiBAc2VlICNpc1ByaW50ZXJEaXNjb3ZlcnlTdGFydGVkKCkKICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBvblN0YXJ0UHJpbnRlckRpc2NvdmVyeShMaXN0PFByaW50ZXJJZD4gcHJpb3JpdHlMaXN0KTsKKyAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBvblN0YXJ0UHJpbnRlckRpc2NvdmVyeShATm9uTnVsbCBMaXN0PFByaW50ZXJJZD4gcHJpb3JpdHlMaXN0KTsKIAogICAgIC8qKgogICAgICAqIENhbGxiYWNrIG5vdGlmeWluZyB5b3UgdGhhdCB5b3Ugc2hvdWxkIHN0b3AgcHJpbnRlciBkaXNjb3ZlcnkuCkBAIC0zNzIsMTAgKzM3MywxMCBAQAogICAgICAqCiAgICAgICogQHBhcmFtIHByaW50ZXJJZHMgVGhlIHByaW50ZXJzIHRvIHZhbGlkYXRlLgogICAgICAqCi0gICAgICogQHNlZSBQcmludGVySW5mby5CdWlsZGVyI3NldENhcGFiaWxpdGllcyhQcmludGVyQ2FwYWJpbGl0aWVzSW5mbykKKyAgICAgKiBAc2VlIGFuZHJvaWQucHJpbnQuUHJpbnRlckluZm8uQnVpbGRlciNzZXRDYXBhYmlsaXRpZXMoUHJpbnRlckNhcGFiaWxpdGllc0luZm8pCiAgICAgICogICAgICBQcmludGVySW5mby5CdWlsZGVyLnNldENhcGFiaWxpdGllcyhQcmludGVyQ2FwYWJpbGl0aWVzSW5mbykKICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBvblZhbGlkYXRlUHJpbnRlcnMoTGlzdDxQcmludGVySWQ+IHByaW50ZXJJZHMpOworICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIG9uVmFsaWRhdGVQcmludGVycyhATm9uTnVsbCBMaXN0PFByaW50ZXJJZD4gcHJpbnRlcklkcyk7CiAKICAgICAvKioKICAgICAgKiBDYWxsYmFjayBhc2tpbmcgeW91IHRvIHN0YXJ0IHRyYWNraW5nIHRoZSBzdGF0ZSBvZiBhIHByaW50ZXIuIFRyYWNraW5nCkBAIC00MDAsMTAgKzQwMSwyNCBAQAogICAgICAqIEBwYXJhbSBwcmludGVySWQgVGhlIHByaW50ZXIgdG8gc3RhcnQgdHJhY2tpbmcuCiAgICAgICoKICAgICAgKiBAc2VlICNvblN0b3BQcmludGVyU3RhdGVUcmFja2luZyhQcmludGVySWQpCi0gICAgICogQHNlZSBQcmludGVySW5mby5CdWlsZGVyI3NldENhcGFiaWxpdGllcyhQcmludGVyQ2FwYWJpbGl0aWVzSW5mbykKKyAgICAgKiBAc2VlIGFuZHJvaWQucHJpbnQuUHJpbnRlckluZm8uQnVpbGRlciNzZXRDYXBhYmlsaXRpZXMoUHJpbnRlckNhcGFiaWxpdGllc0luZm8pCiAgICAgICogICAgICBQcmludGVySW5mby5CdWlsZGVyLnNldENhcGFiaWxpdGllcyhQcmludGVyQ2FwYWJpbGl0aWVzSW5mbykKICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBvblN0YXJ0UHJpbnRlclN0YXRlVHJhY2tpbmcoUHJpbnRlcklkIHByaW50ZXJJZCk7CisgICAgcHVibGljIGFic3RyYWN0IHZvaWQgb25TdGFydFByaW50ZXJTdGF0ZVRyYWNraW5nKEBOb25OdWxsIFByaW50ZXJJZCBwcmludGVySWQpOworCisgICAgLyoqCisgICAgICogUmVxdWVzdCB0aGUgY3VzdG9tIGljb24gZm9yIGEgcHJpbnRlci4gT25jZSB0aGUgaWNvbiBpcyBhdmFpbGFibGUgdXNlCisgICAgICoge0BsaW5rIEN1c3RvbVByaW50ZXJJY29uQ2FsbGJhY2sjb25DdXN0b21QcmludGVySWNvbkxvYWRlZH0gdG8gc2VuZCB0aGUgZGF0YSB0byB0aGUgcHJpbnQKKyAgICAgKiBzZXJ2aWNlLgorICAgICAqCisgICAgICogQHBhcmFtIHByaW50ZXJJZCBUaGUgcHJpbnRlciB0byBpY29uIGJlbG9uZ3MgdG8uCisgICAgICogQHBhcmFtIGNhbGxiYWNrIENhbGxiYWNrIGZvciByZXR1cm5pbmcgdGhlIGljb24gdG8gdGhlIHByaW50IHNwb29sZXIuCisgICAgICoKKyAgICAgKiBAc2VlIGFuZHJvaWQucHJpbnQuUHJpbnRlckluZm8uQnVpbGRlciNzZXRIYXNDdXN0b21QcmludGVySWNvbigpCisgICAgICovCisgICAgcHVibGljIHZvaWQgb25SZXF1ZXN0Q3VzdG9tUHJpbnRlckljb24oQE5vbk51bGwgUHJpbnRlcklkIHByaW50ZXJJZCwKKyAgICAgICAgICAgIEBOb25OdWxsIEN1c3RvbVByaW50ZXJJY29uQ2FsbGJhY2sgY2FsbGJhY2spIHsKKyAgICB9CiAKICAgICAvKioKICAgICAgKiBDYWxsYmFjayBhc2tpbmcgeW91IHRvIHN0b3AgdHJhY2tpbmcgdGhlIHN0YXRlIG9mIGEgcHJpbnRlci4gVGhlIHBhc3NlZApAQCAtNDE0LDcgKzQyOSw3IEBACiAgICAgICoKICAgICAgKiBAc2VlICNvblN0YXJ0UHJpbnRlclN0YXRlVHJhY2tpbmcoUHJpbnRlcklkKQogICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIG9uU3RvcFByaW50ZXJTdGF0ZVRyYWNraW5nKFByaW50ZXJJZCBwcmludGVySWQpOworICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIG9uU3RvcFByaW50ZXJTdGF0ZVRyYWNraW5nKEBOb25OdWxsIFByaW50ZXJJZCBwcmludGVySWQpOwogCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcHJpbnRlcnMgdGhhdCBzaG91bGQgYmUgdHJhY2tlZC4gVGhlc2UgYXJlIHByaW50ZXJzIHRoYXQgYXJlCkBAIC00MzQsNyArNDQ5LDcgQEAKICAgICAgKiBAc2VlICNvblN0b3BQcmludGVyU3RhdGVUcmFja2luZyhQcmludGVySWQpCiAgICAgICogQHNlZSAjaXNEZXN0cm95ZWQoKQogICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCBMaXN0PFByaW50ZXJJZD4gZ2V0VHJhY2tlZFByaW50ZXJzKCkgeworICAgIHB1YmxpYyBmaW5hbCBATm9uTnVsbCBMaXN0PFByaW50ZXJJZD4gZ2V0VHJhY2tlZFByaW50ZXJzKCkgewogICAgICAgICBQcmludFNlcnZpY2UudGhyb3dJZk5vdENhbGxlZE9uTWFpblRocmVhZCgpOwogICAgICAgICBpZiAobUlzRGVzdHJveWVkKSB7CiAgICAgICAgICAgICByZXR1cm4gQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCk7CkBAIC00NzYsNyArNDkxLDcgQEAKICAgICAgICAgcmV0dXJuIG1Jc0Rpc2NvdmVyeVN0YXJ0ZWQ7CiAgICAgfQogCi0gICAgdm9pZCBzdGFydFByaW50ZXJEaXNjb3ZlcnkoTGlzdDxQcmludGVySWQ+IHByaW9yaXR5TGlzdCkgeworICAgIHZvaWQgc3RhcnRQcmludGVyRGlzY292ZXJ5KEBOb25OdWxsIExpc3Q8UHJpbnRlcklkPiBwcmlvcml0eUxpc3QpIHsKICAgICAgICAgaWYgKCFtSXNEZXN0cm95ZWQpIHsKICAgICAgICAgICAgIG1Jc0Rpc2NvdmVyeVN0YXJ0ZWQgPSB0cnVlOwogICAgICAgICAgICAgc2VuZE91dE9mRGlzY292ZXJ5UGVyaW9kUHJpbnRlckNoYW5nZXMoKTsKQEAgLTQ5NCwxMyArNTA5LDEzIEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICB2b2lkIHZhbGlkYXRlUHJpbnRlcnMoTGlzdDxQcmludGVySWQ+IHByaW50ZXJJZHMpIHsKKyAgICB2b2lkIHZhbGlkYXRlUHJpbnRlcnMoQE5vbk51bGwgTGlzdDxQcmludGVySWQ+IHByaW50ZXJJZHMpIHsKICAgICAgICAgaWYgKCFtSXNEZXN0cm95ZWQgJiYgbU9ic2VydmVyICE9IG51bGwpIHsKICAgICAgICAgICAgIG9uVmFsaWRhdGVQcmludGVycyhwcmludGVySWRzKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHZvaWQgc3RhcnRQcmludGVyU3RhdGVUcmFja2luZyhQcmludGVySWQgcHJpbnRlcklkKSB7CisgICAgdm9pZCBzdGFydFByaW50ZXJTdGF0ZVRyYWNraW5nKEBOb25OdWxsIFByaW50ZXJJZCBwcmludGVySWQpIHsKICAgICAgICAgaWYgKCFtSXNEZXN0cm95ZWQgJiYgbU9ic2VydmVyICE9IG51bGwKICAgICAgICAgICAgICAgICAmJiAhbVRyYWNrZWRQcmludGVycy5jb250YWlucyhwcmludGVySWQpKSB7CiAgICAgICAgICAgICBtVHJhY2tlZFByaW50ZXJzLmFkZChwcmludGVySWQpOwpAQCAtNTA4LDcgKzUyMywyMSBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgdm9pZCBzdG9wUHJpbnRlclN0YXRlVHJhY2tpbmcoUHJpbnRlcklkIHByaW50ZXJJZCkgeworICAgIC8qKgorICAgICAqIFJlcXVlc3QgdGhlIGN1c3RvbSBpY29uIGZvciBhIHByaW50ZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcHJpbnRlcklkIFRoZSBwcmludGVyIHRvIGljb24gYmVsb25ncyB0by4KKyAgICAgKiBAc2VlIGFuZHJvaWQucHJpbnQuUHJpbnRlckluZm8uQnVpbGRlciNzZXRIYXNDdXN0b21QcmludGVySWNvbigpCisgICAgICovCisgICAgdm9pZCByZXF1ZXN0Q3VzdG9tUHJpbnRlckljb24oQE5vbk51bGwgUHJpbnRlcklkIHByaW50ZXJJZCkgeworICAgICAgICBpZiAoIW1Jc0Rlc3Ryb3llZCAmJiBtT2JzZXJ2ZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgQ3VzdG9tUHJpbnRlckljb25DYWxsYmFjayBjYWxsYmFjayA9IG5ldyBDdXN0b21QcmludGVySWNvbkNhbGxiYWNrKHByaW50ZXJJZCwKKyAgICAgICAgICAgICAgICAgICAgbU9ic2VydmVyKTsKKyAgICAgICAgICAgIG9uUmVxdWVzdEN1c3RvbVByaW50ZXJJY29uKHByaW50ZXJJZCwgY2FsbGJhY2spOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBzdG9wUHJpbnRlclN0YXRlVHJhY2tpbmcoQE5vbk51bGwgUHJpbnRlcklkIHByaW50ZXJJZCkgewogICAgICAgICBpZiAoIW1Jc0Rlc3Ryb3llZCAmJiBtT2JzZXJ2ZXIgIT0gbnVsbAogICAgICAgICAgICAgICAgICYmIG1UcmFja2VkUHJpbnRlcnMucmVtb3ZlKHByaW50ZXJJZCkpIHsKICAgICAgICAgICAgIG9uU3RvcFByaW50ZXJTdGF0ZVRyYWNraW5nKHByaW50ZXJJZCk7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9wcm92aWRlci9DYWxsTG9nLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9wcm92aWRlci9DYWxsTG9nLmphdmEKaW5kZXggMWQ0ZDU3Mi4uNmE1ZDg1N2MgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3Byb3ZpZGVyL0NhbGxMb2cuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9wcm92aWRlci9DYWxsTG9nLmphdmEKQEAgLTQyMSw2ICs0MjEsMTMgQEAKICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUREX0ZPUl9BTExfVVNFUlMgPSAiYWRkX2Zvcl9hbGxfdXNlcnMiOwogCiAgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgZGF0ZSB0aGUgcm93IGlzIGxhc3QgaW5zZXJ0ZWQsIHVwZGF0ZWQsIG9yIG1hcmtlZCBhcyBkZWxldGVkLCBpbiBtaWxsaXNlY29uZHMKKyAgICAgICAgICogc2luY2UgdGhlIGVwb2NoLiBSZWFkIG9ubHkuCisgICAgICAgICAqIDxQPlR5cGU6IElOVEVHRVIgKGxvbmcpPC9QPgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTEFTVF9NT0RJRklFRCA9ICJsYXN0X21vZGlmaWVkIjsKKworICAgICAgICAvKioKICAgICAgICAgICogSWYgYSBzdWNjZXNzZnVsIGNhbGwgaXMgbWFkZSB0aGF0IGlzIGxvbmdlciB0aGFuIHRoaXMgZHVyYXRpb24sIHVwZGF0ZSB0aGUgcGhvbmUgbnVtYmVyCiAgICAgICAgICAqIGluIHRoZSBDb250YWN0c1Byb3ZpZGVyIHdpdGggdGhlIG5vcm1hbGl6ZWQgdmVyc2lvbiBvZiB0aGUgbnVtYmVyLCBiYXNlZCBvbiB0aGUgdXNlcidzCiAgICAgICAgICAqIGN1cnJlbnQgY291bnRyeSBjb2RlLgpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvcHJvdmlkZXIvTWVkaWFTdG9yZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJvdmlkZXIvTWVkaWFTdG9yZS5qYXZhCmluZGV4IDQ4YjNjMWEuLjg5YWMyN2M5YSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvcHJvdmlkZXIvTWVkaWFTdG9yZS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3Byb3ZpZGVyL01lZGlhU3RvcmUuamF2YQpAQCAtMzg0LDggKzM4NCwxNCBAQAogCiAgICAgcHVibGljIGludGVyZmFjZSBNZWRpYUNvbHVtbnMgZXh0ZW5kcyBCYXNlQ29sdW1ucyB7CiAgICAgICAgIC8qKgotICAgICAgICAgKiBUaGUgZGF0YSBzdHJlYW0gZm9yIHRoZSBmaWxlCi0gICAgICAgICAqIDxQPlR5cGU6IERBVEEgU1RSRUFNPC9QPgorICAgICAgICAgKiBQYXRoIHRvIHRoZSBmaWxlIG9uIGRpc2suCisgICAgICAgICAqIDxwPgorICAgICAgICAgKiBOb3RlIHRoYXQgYXBwcyBtYXkgbm90IGhhdmUgZmlsZXN5c3RlbSBwZXJtaXNzaW9ucyB0byBkaXJlY3RseSBhY2Nlc3MKKyAgICAgICAgICogdGhpcyBwYXRoLiBJbnN0ZWFkIG9mIHRyeWluZyB0byBvcGVuIHRoaXMgcGF0aCBkaXJlY3RseSwgYXBwcyBzaG91bGQKKyAgICAgICAgICogdXNlIHtAbGluayBDb250ZW50UmVzb2x2ZXIjb3BlbkZpbGVEZXNjcmlwdG9yKFVyaSwgU3RyaW5nKX0gdG8gZ2FpbgorICAgICAgICAgKiBhY2Nlc3MuCisgICAgICAgICAqIDxwPgorICAgICAgICAgKiBUeXBlOiBURVhUCiAgICAgICAgICAqLwogICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBEQVRBID0gIl9kYXRhIjsKIApAQCAtMTE0OSw4ICsxMTU1LDE1IEBACiAgICAgICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX1NPUlRfT1JERVIgPSAiaW1hZ2VfaWQgQVNDIjsKIAogICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgKiBUaGUgZGF0YSBzdHJlYW0gZm9yIHRoZSB0aHVtYm5haWwKLSAgICAgICAgICAgICAqIDxQPlR5cGU6IERBVEEgU1RSRUFNPC9QPgorICAgICAgICAgICAgICogUGF0aCB0byB0aGUgdGh1bWJuYWlsIGZpbGUgb24gZGlzay4KKyAgICAgICAgICAgICAqIDxwPgorICAgICAgICAgICAgICogTm90ZSB0aGF0IGFwcHMgbWF5IG5vdCBoYXZlIGZpbGVzeXN0ZW0gcGVybWlzc2lvbnMgdG8gZGlyZWN0bHkKKyAgICAgICAgICAgICAqIGFjY2VzcyB0aGlzIHBhdGguIEluc3RlYWQgb2YgdHJ5aW5nIHRvIG9wZW4gdGhpcyBwYXRoIGRpcmVjdGx5LAorICAgICAgICAgICAgICogYXBwcyBzaG91bGQgdXNlCisgICAgICAgICAgICAgKiB7QGxpbmsgQ29udGVudFJlc29sdmVyI29wZW5GaWxlRGVzY3JpcHRvcihVcmksIFN0cmluZyl9IHRvIGdhaW4KKyAgICAgICAgICAgICAqIGFjY2Vzcy4KKyAgICAgICAgICAgICAqIDxwPgorICAgICAgICAgICAgICogVHlwZTogVEVYVAogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBEQVRBID0gIl9kYXRhIjsKIApAQCAtMTU5Niw4ICsxNjA5LDE1IEBACiAgICAgICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FID0gIm5hbWUiOwogCiAgICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAqIFRoZSBkYXRhIHN0cmVhbSBmb3IgdGhlIHBsYXlsaXN0IGZpbGUKLSAgICAgICAgICAgICAqIDxQPlR5cGU6IERBVEEgU1RSRUFNPC9QPgorICAgICAgICAgICAgICogUGF0aCB0byB0aGUgcGxheWxpc3QgZmlsZSBvbiBkaXNrLgorICAgICAgICAgICAgICogPHA+CisgICAgICAgICAgICAgKiBOb3RlIHRoYXQgYXBwcyBtYXkgbm90IGhhdmUgZmlsZXN5c3RlbSBwZXJtaXNzaW9ucyB0byBkaXJlY3RseQorICAgICAgICAgICAgICogYWNjZXNzIHRoaXMgcGF0aC4gSW5zdGVhZCBvZiB0cnlpbmcgdG8gb3BlbiB0aGlzIHBhdGggZGlyZWN0bHksCisgICAgICAgICAgICAgKiBhcHBzIHNob3VsZCB1c2UKKyAgICAgICAgICAgICAqIHtAbGluayBDb250ZW50UmVzb2x2ZXIjb3BlbkZpbGVEZXNjcmlwdG9yKFVyaSwgU3RyaW5nKX0gdG8gZ2FpbgorICAgICAgICAgICAgICogYWNjZXNzLgorICAgICAgICAgICAgICogPHA+CisgICAgICAgICAgICAgKiBUeXBlOiBURVhUCiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERBVEEgPSAiX2RhdGEiOwogCkBAIC0yMTkyLDggKzIyMTIsMTUgQEAKICAgICAgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfU09SVF9PUkRFUiA9ICJ2aWRlb19pZCBBU0MiOwogCiAgICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAqIFRoZSBkYXRhIHN0cmVhbSBmb3IgdGhlIHRodW1ibmFpbAotICAgICAgICAgICAgICogPFA+VHlwZTogREFUQSBTVFJFQU08L1A+CisgICAgICAgICAgICAgKiBQYXRoIHRvIHRoZSB0aHVtYm5haWwgZmlsZSBvbiBkaXNrLgorICAgICAgICAgICAgICogPHA+CisgICAgICAgICAgICAgKiBOb3RlIHRoYXQgYXBwcyBtYXkgbm90IGhhdmUgZmlsZXN5c3RlbSBwZXJtaXNzaW9ucyB0byBkaXJlY3RseQorICAgICAgICAgICAgICogYWNjZXNzIHRoaXMgcGF0aC4gSW5zdGVhZCBvZiB0cnlpbmcgdG8gb3BlbiB0aGlzIHBhdGggZGlyZWN0bHksCisgICAgICAgICAgICAgKiBhcHBzIHNob3VsZCB1c2UKKyAgICAgICAgICAgICAqIHtAbGluayBDb250ZW50UmVzb2x2ZXIjb3BlbkZpbGVEZXNjcmlwdG9yKFVyaSwgU3RyaW5nKX0gdG8gZ2FpbgorICAgICAgICAgICAgICogYWNjZXNzLgorICAgICAgICAgICAgICogPHA+CisgICAgICAgICAgICAgKiBUeXBlOiBURVhUCiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERBVEEgPSAiX2RhdGEiOwogCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9wcm92aWRlci9TZXR0aW5ncy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJvdmlkZXIvU2V0dGluZ3MuamF2YQppbmRleCBhMWU1NTEwLi40ZWFlZTBiIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9wcm92aWRlci9TZXR0aW5ncy5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3Byb3ZpZGVyL1NldHRpbmdzLmphdmEKQEAgLTEwOTIsNiArMTA5MiwyMiBAQAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFDVElPTl9IT01FX1NFVFRJTkdTCiAgICAgICAgICAgICA9ICJhbmRyb2lkLnNldHRpbmdzLkhPTUVfU0VUVElOR1MiOwogCisKKworICAgIC8qKgorICAgICAqIEFjdGl2aXR5IEFjdGlvbjogU2hvdyBEZWZhdWx0IGFwcHMgc2V0dGluZ3MuCisgICAgICogPHA+CisgICAgICogSW4gc29tZSBjYXNlcywgYSBtYXRjaGluZyBBY3Rpdml0eSBtYXkgbm90IGV4aXN0LCBzbyBlbnN1cmUgeW91CisgICAgICogc2FmZWd1YXJkIGFnYWluc3QgdGhpcy4KKyAgICAgKiA8cD4KKyAgICAgKiBJbnB1dDogTm90aGluZy4KKyAgICAgKiA8cD4KKyAgICAgKiBPdXRwdXQ6IE5vdGhpbmcuCisgICAgICovCisgICAgQFNka0NvbnN0YW50KFNka0NvbnN0YW50VHlwZS5BQ1RJVklUWV9JTlRFTlRfQUNUSU9OKQorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFDVElPTl9NQU5BR0VfREVGQVVMVF9BUFBTX1NFVFRJTkdTCisgICAgICAgICAgICA9ICJhbmRyb2lkLnNldHRpbmdzLk1BTkFHRV9ERUZBVUxUX0FQUFNfU0VUVElOR1MiOworCiAgICAgLyoqCiAgICAgICogQWN0aXZpdHkgQWN0aW9uOiBTaG93IG5vdGlmaWNhdGlvbiBzZXR0aW5ncy4KICAgICAgKgpAQCAtNTYxNyw2ICs1NjMzLDE1IEBACiAgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFTU0lTVF9TQ1JFRU5TSE9UX0VOQUJMRUQgPSAiYXNzaXN0X3NjcmVlbnNob3RfZW5hYmxlZCI7CiAKICAgICAgICAgLyoqCisgICAgICAgICAqIE5hbWVzIG9mIHRoZSBzZXJ2aWNlIGNvbXBvbmVudCB0aGF0IHRoZSBjdXJyZW50IHVzZXIgaGFzIGV4cGxpY2l0bHkgYWxsb3dlZCB0bworICAgICAgICAgKiBzZWUgYW5kIGNoYW5nZSB0aGUgaW1wb3J0YW5jZSBvZiBhbGwgb2YgdGhlIHVzZXIncyBub3RpZmljYXRpb25zLgorICAgICAgICAgKgorICAgICAgICAgKiBAaGlkZQorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRU5BQkxFRF9OT1RJRklDQVRJT05fQVNTSVNUQU5UCisgICAgICAgICAgICAgICAgPSAiZW5hYmxlZF9ub3RpZmljYXRpb25fYXNzaXN0YW50IjsKKworICAgICAgICAvKioKICAgICAgICAgICogTmFtZXMgb2YgdGhlIHNlcnZpY2UgY29tcG9uZW50cyB0aGF0IHRoZSBjdXJyZW50IHVzZXIgaGFzIGV4cGxpY2l0bHkgYWxsb3dlZCB0bwogICAgICAgICAgKiBzZWUgYWxsIG9mIHRoZSB1c2VyJ3Mgbm90aWZpY2F0aW9ucywgc2VwYXJhdGVkIGJ5ICc6Jy4KICAgICAgICAgICoKQEAgLTYxMDgsNiArNjEzMywxMyBAQAogICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBSVJQTEFORV9NT0RFX1RPR0dMRUFCTEVfUkFESU9TID0gImFpcnBsYW5lX21vZGVfdG9nZ2xlYWJsZV9yYWRpb3MiOwogCiAgICAgICAgIC8qKgorICAgICAgICAgKiBBIExvbmcgcmVwcmVzZW50aW5nIGEgYml0bWFwIG9mIHByb2ZpbGVzIHRoYXQgc2hvdWxkIGJlIGRpc2FibGVkIHdoZW4gYmx1ZXRvb3RoIHN0YXJ0cy4KKyAgICAgICAgICogU2VlIHtAbGluayBhbmRyb2lkLmJsdWV0b290aC5CbHVldG9vdGhQcm9maWxlfS4KKyAgICAgICAgICoge0BoaWRlfQorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkxVRVRPT1RIX0RJU0FCTEVEX1BST0ZJTEVTID0gImJsdWV0b290aF9kaXNhYmxlZF9wcm9maWxlcyI7CisKKyAgICAgICAgLyoqCiAgICAgICAgICAqIFRoZSBwb2xpY3kgZm9yIGRlY2lkaW5nIHdoZW4gV2ktRmkgc2hvdWxkIGdvIHRvIHNsZWVwICh3aGljaCB3aWxsIGluCiAgICAgICAgICAqIHR1cm4gc3dpdGNoIHRvIHVzaW5nIHRoZSBtb2JpbGUgZGF0YSBhcyBhbiBJbnRlcm5ldCBjb25uZWN0aW9uKS4KICAgICAgICAgICogPHA+CkBAIC02MzQyLDYgKzYzNzQsMTMgQEAKICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVWRUxPUE1FTlRfRk9SQ0VfUkVTSVpBQkxFX0FDVElWSVRJRVMKICAgICAgICAgICAgICAgICA9ICJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyI7CiAKKyAgICAgICAgLyoqCisgICAgICAgICAqIFdoZXRoZXIgdG8gZW5hYmxlIGV4cGVyaW1lbnRhbCBmcmVlZm9ybSBzdXBwb3J0IGZvciB3aW5kb3dzLgorICAgICAgICAgKiBAaGlkZQorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVWRUxPUE1FTlRfRU5BQkxFX0ZSRUVGT1JNX1dJTkRPV1NfU1VQUE9SVAorICAgICAgICAgICAgICAgID0gImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0IjsKKwogICAgICAgIC8qKgogICAgICAgICAqIFdoZXRoZXIgdXNlciBoYXMgZW5hYmxlZCBkZXZlbG9wbWVudCBzZXR0aW5ncy4KICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3Byb3ZpZGVyL1ZvaWNlbWFpbENvbnRyYWN0LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9wcm92aWRlci9Wb2ljZW1haWxDb250cmFjdC5qYXZhCmluZGV4IDc2ZWFlYTkuLjI0NjgzY2IgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3Byb3ZpZGVyL1ZvaWNlbWFpbENvbnRyYWN0LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJvdmlkZXIvVm9pY2VtYWlsQ29udHJhY3QuamF2YQpAQCAtMjQ1LDYgKzI0NSwxMyBAQAogICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUxFVEVEID0gImRlbGV0ZWQiOwogCiAgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgZGF0ZSB0aGUgcm93IGlzIGxhc3QgaW5zZXJ0ZWQsIHVwZGF0ZWQsIG9yIG1hcmtlZCBhcyBkZWxldGVkLCBpbiBtaWxsaXNlY29uZHMKKyAgICAgICAgICogc2luY2UgdGhlIGVwb2NoLiBSZWFkIG9ubHkuCisgICAgICAgICAqIDxQPlR5cGU6IElOVEVHRVIgKGxvbmcpPC9QPgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTEFTVF9NT0RJRklFRCA9ICJsYXN0X21vZGlmaWVkIjsKKworICAgICAgICAvKioKICAgICAgICAgICogQSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYnVpbGQgdm9pY2VtYWlsIFVSSSBzcGVjaWZpYyB0byBhIHNvdXJjZSBwYWNrYWdlIGJ5IGFwcGVuZGluZwogICAgICAgICAgKiB7QGxpbmsgVm9pY2VtYWlsQ29udHJhY3QjUEFSQU1fS0VZX1NPVVJDRV9QQUNLQUdFfSBwYXJhbSB0byB0aGUgYmFzZSBVUkkuCiAgICAgICAgICAqLwpAQCAtNDQ5LDYgKzQ1NiwyNiBAQAogICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOT1RJRklDQVRJT05fQ0hBTk5FTF9TVEFURV9NRVNTQUdFX1dBSVRJTkcgPSAyOwogCiAgICAgICAgIC8qKgorICAgICAgICAgKiBBbW91bnQgb2YgcmVzb3VyY2UgdGhhdCBpcyB1c2VkIGJ5IGV4aXN0aW5nIHZvaWNlbWFpbCBpbiB0aGUgdmlzdWFsIHZvaWNlbWFpbCBpbmJveCwKKyAgICAgICAgICogb3Ige0BsaW5rICNRVU9UQV9VTkFWQUlMQUJMRX0uIFVuaXQgaXMgbm90IHNwZWNpZmllZC4KKyAgICAgICAgICogPFA+VHlwZTogSU5URUdFUjwvUD4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVT1RBX09DQ1VQSUVEID0gInF1b3RhX29jY3VwaWVkIjsKKworICAgICAgICAvKioKKyAgICAgICAgICogVG90YWwgcmVzb3VyY2UgaW4gdGhlIHZpc3VhbCB2b2ljZW1haWwgaW5ib3ggdGhhdCBjYW4gYmUgdXNlZCwgb3IKKyAgICAgICAgICoge0BsaW5rICNRVU9UQV9VTkFWQUlMQUJMRX0uIFVuaXQgaXMgbm90IHNwZWNpZmllZC4KKyAgICAgICAgICogPFA+VHlwZTogSU5URUdFUjwvUD4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFFVT1RBX1RPVEFMID0gInF1b3RhX3RvdGFsIjsKKworICAgICAgICAvKioKKyAgICAgICAgICogVmFsdWUgZm9yIHtAbGluayAjUVVPVEFfT0NDVVBJRUR9IGFuZCB7QGxpbmsgI1FVT1RBX1RPVEFMfSB0byBpbmRpY2F0ZSB0aGF0IG5vCisgICAgICAgICAqIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZS4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFFVT1RBX1VOQVZBSUxBQkxFID0gLTE7CisKKyAgICAgICAgLyoqCiAgICAgICAgICAqIEEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJ1aWxkIHN0YXR1cyBVUkkgc3BlY2lmaWMgdG8gYSBzb3VyY2UgcGFja2FnZSBieSBhcHBlbmRpbmcKICAgICAgICAgICoge0BsaW5rIFZvaWNlbWFpbENvbnRyYWN0I1BBUkFNX0tFWV9TT1VSQ0VfUEFDS0FHRX0gcGFyYW0gdG8gdGhlIGJhc2UgVVJJLgogICAgICAgICAgKi8KQEAgLTQ4OCw2ICs1MTUsMzkgQEAKICAgICAgICAgfQogCiAgICAgICAgIC8qKgorICAgICAgICAgKiBBIGhlbHBlciBtZXRob2QgdG8gc2V0IHRoZSBxdW90YSBvZiBhIHZvaWNlbWFpbCBzb3VyY2UuIFVuaXQgaXMgdW5zcGVjaWZpZWQuCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSBjb250ZXh0IFRoZSBjb250ZXh0IGZyb20gdGhlIHBhY2thZ2UgY2FsbGluZyB0aGUgbWV0aG9kLiBUaGlzIHdpbGwgYmUgdGhlIHNvdXJjZS4KKyAgICAgICAgICogQHBhcmFtIGFjY291bnRIYW5kbGUgVGhlIGhhbmRsZSBmb3IgdGhlIGFjY291bnQgdGhlIHNvdXJjZSBpcyBhc3NvY2lhdGVkIHdpdGguCisgICAgICAgICAqIEBwYXJhbSBvY2N1cGllZCBTZWUge0BsaW5rIFN0YXR1cyNRVU9UQV9PQ0NVUElFRH0KKyAgICAgICAgICogQHBhcmFtIHRvdGFsIFNlZSB7QGxpbmsgU3RhdHVzI1FVT1RBX1RPVEFMfQorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIHNldFF1b3RhKENvbnRleHQgY29udGV4dCwgUGhvbmVBY2NvdW50SGFuZGxlIGFjY291bnRIYW5kbGUsIGludCBvY2N1cGllZCwKKyAgICAgICAgICAgICAgICBpbnQgdG90YWwpIHsKKyAgICAgICAgICAgIGlmIChvY2N1cGllZCA9PSBRVU9UQV9VTkFWQUlMQUJMRSAmJiB0b3RhbCA9PSBRVU9UQV9VTkFWQUlMQUJMRSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIENvbnRlbnRWYWx1ZXMgdmFsdWVzID0gbmV3IENvbnRlbnRWYWx1ZXMoKTsKKyAgICAgICAgICAgIHZhbHVlcy5wdXQoU3RhdHVzLlBIT05FX0FDQ09VTlRfQ09NUE9ORU5UX05BTUUsCisgICAgICAgICAgICAgICAgICAgIGFjY291bnRIYW5kbGUuZ2V0Q29tcG9uZW50TmFtZSgpLmZsYXR0ZW5Ub1N0cmluZygpKTsKKyAgICAgICAgICAgIHZhbHVlcy5wdXQoU3RhdHVzLlBIT05FX0FDQ09VTlRfSUQsIGFjY291bnRIYW5kbGUuZ2V0SWQoKSk7CisgICAgICAgICAgICBpZiAob2NjdXBpZWQgIT0gUVVPVEFfVU5BVkFJTEFCTEUpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZXMucHV0KFN0YXR1cy5RVU9UQV9PQ0NVUElFRCxvY2N1cGllZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodG90YWwgIT0gUVVPVEFfVU5BVkFJTEFCTEUpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZXMucHV0KFN0YXR1cy5RVU9UQV9UT1RBTCx0b3RhbCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIENvbnRlbnRSZXNvbHZlciBjb250ZW50UmVzb2x2ZXIgPSBjb250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpOworICAgICAgICAgICAgVXJpIHN0YXR1c1VyaSA9IGJ1aWxkU291cmNlVXJpKGNvbnRleHQuZ2V0UGFja2FnZU5hbWUoKSk7CisgICAgICAgICAgICBpZiAoaXNTdGF0dXNQcmVzZW50KGNvbnRlbnRSZXNvbHZlciwgc3RhdHVzVXJpKSkgeworICAgICAgICAgICAgICAgIGNvbnRlbnRSZXNvbHZlci51cGRhdGUoc3RhdHVzVXJpLCB2YWx1ZXMsIG51bGwsIG51bGwpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb250ZW50UmVzb2x2ZXIuaW5zZXJ0KHN0YXR1c1VyaSwgdmFsdWVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qKgogICAgICAgICAgKiBEZXRlcm1pbmVzIGlmIGEgdm9pY2VtYWlsIHNvdXJjZSBleGlzdHMgaW4gdGhlIHN0YXR1cyB0YWJsZS4KICAgICAgICAgICoKICAgICAgICAgICogQHBhcmFtIGNvbnRlbnRSZXNvbHZlciBBIGNvbnRlbnQgcmVzb2x2ZXIgY29uc3RydWN0ZWQgZnJvbSB0aGUgYXBwcm9wcmlhdGUgY29udGV4dC4KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3NlY3VyaXR5L0ZyYW1ld29ya05ldHdvcmtTZWN1cml0eVBvbGljeS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvc2VjdXJpdHkvRnJhbWV3b3JrTmV0d29ya1NlY3VyaXR5UG9saWN5LmphdmEKaW5kZXggZTNkYWM1ZS4uODNmMTczZWMgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3NlY3VyaXR5L0ZyYW1ld29ya05ldHdvcmtTZWN1cml0eVBvbGljeS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3NlY3VyaXR5L0ZyYW1ld29ya05ldHdvcmtTZWN1cml0eVBvbGljeS5qYXZhCkBAIC0zMiw0ICszMiw5IEBACiAgICAgcHVibGljIGJvb2xlYW4gaXNDbGVhcnRleHRUcmFmZmljUGVybWl0dGVkKCkgewogICAgICAgICByZXR1cm4gbUNsZWFydGV4dFRyYWZmaWNQZXJtaXR0ZWQ7CiAgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gaXNDbGVhcnRleHRUcmFmZmljUGVybWl0dGVkKFN0cmluZyBob3N0bmFtZSkgeworICAgICAgICByZXR1cm4gaXNDbGVhcnRleHRUcmFmZmljUGVybWl0dGVkKCk7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvc2VjdXJpdHkvTmV0d29ya1NlY3VyaXR5UG9saWN5LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9zZWN1cml0eS9OZXR3b3JrU2VjdXJpdHlQb2xpY3kuamF2YQppbmRleCA3OTkxZDM3Li4zN2VjNzI1IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9zZWN1cml0eS9OZXR3b3JrU2VjdXJpdHlQb2xpY3kuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9zZWN1cml0eS9OZXR3b3JrU2VjdXJpdHlQb2xpY3kuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB3aGV0aGVyIGNsZWFydGV4dCBuZXR3b3JrIHRyYWZmaWMgKGUuZy4gSFRUUCwgRlRQLCBXZWJTb2NrZXRzLCBYTVBQLCBJTUFQLCBTTVRQIC0tCi0gICAgICogd2l0aG91dCBUTFMgb3IgU1RBUlRUTFMpIGlzIHBlcm1pdHRlZCBmb3IgdGhpcyBwcm9jZXNzLgorICAgICAqIHdpdGhvdXQgVExTIG9yIFNUQVJUVExTKSBpcyBwZXJtaXR0ZWQgZm9yIGFsbCBuZXR3b3JrIGNvbW11bmljYXRpb24gZnJvbSB0aGlzIHByb2Nlc3MuCiAgICAgICoKICAgICAgKiA8cD5XaGVuIGNsZWFydGV4dCBuZXR3b3JrIHRyYWZmaWMgaXMgbm90IHBlcm1pdHRlZCwgdGhlIHBsYXRmb3JtJ3MgY29tcG9uZW50cyAoZS5nLiBIVFRQIGFuZAogICAgICAqIEZUUCBzdGFja3MsIHtAbGluayBhbmRyb2lkLmFwcC5Eb3dubG9hZE1hbmFnZXJ9LCB7QGxpbmsgYW5kcm9pZC5tZWRpYS5NZWRpYVBsYXllcn0pIHdpbGwKQEAgLTY0LDYgKzY0LDE3IEBACiAgICAgfQogCiAgICAgLyoqCisgICAgICogUmV0dXJucyB3aGV0aGVyIGNsZWFydGV4dCBuZXR3b3JrIHRyYWZmaWMgKGUuZy4gSFRUUCwgRlRQLCBYTVBQLCBJTUFQLCBTTVRQIC0tIHdpdGhvdXQKKyAgICAgKiBUTFMgb3IgU1RBUlRUTFMpIGlzIHBlcm1pdHRlZCBmb3IgY29tbXVuaWNhdGluZyB3aXRoIHtAY29kZSBob3N0bmFtZX0gZm9yIHRoaXMgcHJvY2Vzcy4KKyAgICAgKgorICAgICAqIEBzZWUgI2lzQ2xlYXJ0ZXh0VHJhZmZpY1Blcm1pdHRlZCgpCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gaXNDbGVhcnRleHRUcmFmZmljUGVybWl0dGVkKFN0cmluZyBob3N0bmFtZSkgeworICAgICAgICByZXR1cm4gbGliY29yZS5uZXQuTmV0d29ya1NlY3VyaXR5UG9saWN5LmdldEluc3RhbmNlKCkKKyAgICAgICAgICAgICAgICAuaXNDbGVhcnRleHRUcmFmZmljUGVybWl0dGVkKGhvc3RuYW1lKTsKKyAgICB9CisKKyAgICAvKioKICAgICAgKiBTZXRzIHdoZXRoZXIgY2xlYXJ0ZXh0IG5ldHdvcmsgdHJhZmZpYyBpcyBwZXJtaXR0ZWQgZm9yIHRoaXMgcHJvY2Vzcy4KICAgICAgKgogICAgICAqIDxwPlRoaXMgbWV0aG9kIGlzIHVzZWQgYnkgdGhlIHBsYXRmb3JtIGVhcmx5IG9uIGluIHRoZSBhcHBsaWNhdGlvbidzIGluaXRpYWxpemF0aW9uIHRvIHNldApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvc2VjdXJpdHkvbmV0L2NvbmZpZy9BcHBsaWNhdGlvbkNvbmZpZy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvc2VjdXJpdHkvbmV0L2NvbmZpZy9BcHBsaWNhdGlvbkNvbmZpZy5qYXZhCmluZGV4IDcxZDlkNWQuLjRkZTM2Y2QgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3NlY3VyaXR5L25ldC9jb25maWcvQXBwbGljYXRpb25Db25maWcuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9zZWN1cml0eS9uZXQvY29uZmlnL0FwcGxpY2F0aW9uQ29uZmlnLmphdmEKQEAgLTEyMCw2ICsxMjAsMzIgQEAKICAgICAgICAgcmV0dXJuIG1UcnVzdE1hbmFnZXI7CiAgICAgfQogCisgICAgLyoqCisgICAgICogUmV0dXJucyB7QGNvZGUgdHJ1ZX0gaWYgY2xlYXJ0ZXh0IHRyYWZmaWMgaXMgcGVybWl0dGVkIGZvciB0aGlzIGFwcGxpY2F0aW9uLCB3aGljaCBpcyB0aGUKKyAgICAgKiBjYXNlIG9ubHkgaWYgYWxsIGNvbmZpZ3VyYXRpb25zIHBlcm1pdCBjbGVhcnRleHQgdHJhZmZpYy4gRm9yIGZpbmVyLWdyYWluZWQgcG9saWN5IHVzZQorICAgICAqIHtAbGluayAjaXNDbGVhcnRleHRUcmFmZmljUGVybWl0dGVkKFN0cmluZyl9LgorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGlzQ2xlYXJ0ZXh0VHJhZmZpY1Blcm1pdHRlZCgpIHsKKyAgICAgICAgZW5zdXJlSW5pdGlhbGl6ZWQoKTsKKyAgICAgICAgaWYgKG1Db25maWdzICE9IG51bGwpIHsKKyAgICAgICAgICAgIGZvciAoUGFpcjxEb21haW4sIE5ldHdvcmtTZWN1cml0eUNvbmZpZz4gZW50cnkgOiBtQ29uZmlncykgeworICAgICAgICAgICAgICAgIGlmICghZW50cnkuc2Vjb25kLmlzQ2xlYXJ0ZXh0VHJhZmZpY1Blcm1pdHRlZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbURlZmF1bHRDb25maWcuaXNDbGVhcnRleHRUcmFmZmljUGVybWl0dGVkKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB7QGNvZGUgdHJ1ZX0gaWYgY2xlYXJ0ZXh0IHRyYWZmaWMgaXMgcGVybWl0dGVkIGZvciB0aGlzIGFwcGxpY2F0aW9uIHdoZW4gY29ubmVjdGluZworICAgICAqIHRvIHtAY29kZSBob3N0bmFtZX0uCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gaXNDbGVhcnRleHRUcmFmZmljUGVybWl0dGVkKFN0cmluZyBob3N0bmFtZSkgeworICAgICAgICByZXR1cm4gZ2V0Q29uZmlnRm9ySG9zdG5hbWUoaG9zdG5hbWUpLmlzQ2xlYXJ0ZXh0VHJhZmZpY1Blcm1pdHRlZCgpOworICAgIH0KKwogICAgIHByaXZhdGUgdm9pZCBlbnN1cmVJbml0aWFsaXplZCgpIHsKICAgICAgICAgc3luY2hyb25pemVkKG1Mb2NrKSB7CiAgICAgICAgICAgICBpZiAobUluaXRpYWxpemVkKSB7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9zZWN1cml0eS9uZXQvY29uZmlnL0NvbmZpZ05ldHdvcmtTZWN1cml0eVBvbGljeS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvc2VjdXJpdHkvbmV0L2NvbmZpZy9Db25maWdOZXR3b3JrU2VjdXJpdHlQb2xpY3kuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2QxN2MyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvc2VjdXJpdHkvbmV0L2NvbmZpZy9Db25maWdOZXR3b3JrU2VjdXJpdHlQb2xpY3kuamF2YQpAQCAtMCwwICsxLDQwIEBACisvKioKKyAqIENvcHlyaWdodCAoYykgMjAxNSwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgYW5kcm9pZC5zZWN1cml0eS5uZXQuY29uZmlnOworCisvKioKKyAqIHtAbGluayBsaWJjb3JlLm5ldC5OZXR3b3JrU2VjdXJpdHlQb2xpY3l9IGJhc2VkIG9uIGFuIHtAbGluayBBcHBsaWNhdGlvbkNvbmZpZ30uCisgKgorICogQGhpZGUKKyAqLworcHVibGljIGNsYXNzIENvbmZpZ05ldHdvcmtTZWN1cml0eVBvbGljeSBleHRlbmRzIGxpYmNvcmUubmV0Lk5ldHdvcmtTZWN1cml0eVBvbGljeSB7CisgICAgcHJpdmF0ZSBmaW5hbCBBcHBsaWNhdGlvbkNvbmZpZyBtQ29uZmlnOworCisgICAgcHVibGljIENvbmZpZ05ldHdvcmtTZWN1cml0eVBvbGljeShBcHBsaWNhdGlvbkNvbmZpZyBjb25maWcpIHsKKyAgICAgICAgbUNvbmZpZyA9IGNvbmZpZzsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBpc0NsZWFydGV4dFRyYWZmaWNQZXJtaXR0ZWQoKSB7CisgICAgICAgIHJldHVybiBtQ29uZmlnLmlzQ2xlYXJ0ZXh0VHJhZmZpY1Blcm1pdHRlZCgpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIGlzQ2xlYXJ0ZXh0VHJhZmZpY1Blcm1pdHRlZChTdHJpbmcgaG9zdG5hbWUpIHsKKyAgICAgICAgcmV0dXJuIG1Db25maWcuaXNDbGVhcnRleHRUcmFmZmljUGVybWl0dGVkKGhvc3RuYW1lKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9zZWN1cml0eS9uZXQvY29uZmlnL05ldHdvcmtTZWN1cml0eUNvbmZpZ1Byb3ZpZGVyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9zZWN1cml0eS9uZXQvY29uZmlnL05ldHdvcmtTZWN1cml0eUNvbmZpZ1Byb3ZpZGVyLmphdmEKaW5kZXggNWViYzdhYy4uMGY2Njg3MyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvc2VjdXJpdHkvbmV0L2NvbmZpZy9OZXR3b3JrU2VjdXJpdHlDb25maWdQcm92aWRlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3NlY3VyaXR5L25ldC9jb25maWcvTmV0d29ya1NlY3VyaXR5Q29uZmlnUHJvdmlkZXIuamF2YQpAQCAtNDAsNSArNDAsNiBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkZhaWxlZCB0byBpbnN0YWxsIHByb3ZpZGVyIGFzIGhpZ2hlc3QgcHJpb3JpdHkgcHJvdmlkZXIuIgogICAgICAgICAgICAgICAgICAgICArICIgUHJvdmlkZXIgd2FzIGluc3RhbGxlZCBhdCBwb3NpdGlvbiAiICsgcG9zKTsKICAgICAgICAgfQorICAgICAgICBsaWJjb3JlLm5ldC5OZXR3b3JrU2VjdXJpdHlQb2xpY3kuc2V0SW5zdGFuY2UobmV3IENvbmZpZ05ldHdvcmtTZWN1cml0eVBvbGljeShjb25maWcpKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9zZXJ2aWNlL25vdGlmaWNhdGlvbi9JTm90aWZpY2F0aW9uTGlzdGVuZXIuYWlkbCBiL2NvcmUvamF2YS9hbmRyb2lkL3NlcnZpY2Uvbm90aWZpY2F0aW9uL0lOb3RpZmljYXRpb25MaXN0ZW5lci5haWRsCmluZGV4IGU2YmY2YmEuLmEwZGUxN2YgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3NlcnZpY2Uvbm90aWZpY2F0aW9uL0lOb3RpZmljYXRpb25MaXN0ZW5lci5haWRsCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3NlcnZpY2Uvbm90aWZpY2F0aW9uL0lOb3RpZmljYXRpb25MaXN0ZW5lci5haWRsCkBAIC0yMyw2ICsyMyw3IEBACiAvKiogQGhpZGUgKi8KIG9uZXdheSBpbnRlcmZhY2UgSU5vdGlmaWNhdGlvbkxpc3RlbmVyCiB7CisgICAgLy8gbGlzdGVuZXJzIGFuZCBhc3Npc3RhbnRzCiAgICAgdm9pZCBvbkxpc3RlbmVyQ29ubmVjdGVkKGluIE5vdGlmaWNhdGlvblJhbmtpbmdVcGRhdGUgdXBkYXRlKTsKICAgICB2b2lkIG9uTm90aWZpY2F0aW9uUG9zdGVkKGluIElTdGF0dXNCYXJOb3RpZmljYXRpb25Ib2xkZXIgbm90aWZpY2F0aW9uSG9sZGVyLAogICAgICAgICAgICAgaW4gTm90aWZpY2F0aW9uUmFua2luZ1VwZGF0ZSB1cGRhdGUpOwpAQCAtMzEsNCArMzIsMTEgQEAKICAgICB2b2lkIG9uTm90aWZpY2F0aW9uUmFua2luZ1VwZGF0ZShpbiBOb3RpZmljYXRpb25SYW5raW5nVXBkYXRlIHVwZGF0ZSk7CiAgICAgdm9pZCBvbkxpc3RlbmVySGludHNDaGFuZ2VkKGludCBoaW50cyk7CiAgICAgdm9pZCBvbkludGVycnVwdGlvbkZpbHRlckNoYW5nZWQoaW50IGludGVycnVwdGlvbkZpbHRlcik7CisKKyAgICAvLyBhc3Npc3RhbnRzIG9ubHkKKyAgICB2b2lkIG9uTm90aWZpY2F0aW9uRW5xdWV1ZWQoaW4gSVN0YXR1c0Jhck5vdGlmaWNhdGlvbkhvbGRlciBub3RpZmljYXRpb25Ib2xkZXIsIGludCBpbXBvcnRhbmNlLCBib29sZWFuIHVzZXIpOworICAgIHZvaWQgb25Ob3RpZmljYXRpb25WaXNpYmlsaXR5Q2hhbmdlZChTdHJpbmcga2V5LCBsb25nIHRpbWUsIGJvb2xlYW4gdmlzaWJsZSk7CisgICAgdm9pZCBvbk5vdGlmaWNhdGlvbkNsaWNrKFN0cmluZyBrZXksIGxvbmcgdGltZSk7CisgICAgdm9pZCBvbk5vdGlmaWNhdGlvbkFjdGlvbkNsaWNrKFN0cmluZyBrZXksIGxvbmcgdGltZSwgaW50IGFjdGlvbkluZGV4KTsKKyAgICB2b2lkIG9uTm90aWZpY2F0aW9uUmVtb3ZlZFJlYXNvbihTdHJpbmcga2V5LCBsb25nIHRpbWUsIGludCByZWFzb24pOwogfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvc2VydmljZS9ub3RpZmljYXRpb24vTm90aWZpY2F0aW9uQXNzaXN0YW50U2VydmljZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvc2VydmljZS9ub3RpZmljYXRpb24vTm90aWZpY2F0aW9uQXNzaXN0YW50U2VydmljZS5qYXZhCmluZGV4IDVkMTMxN2MuLjNhODk1NmUgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3NlcnZpY2Uvbm90aWZpY2F0aW9uL05vdGlmaWNhdGlvbkFzc2lzdGFudFNlcnZpY2UuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9zZXJ2aWNlL25vdGlmaWNhdGlvbi9Ob3RpZmljYXRpb25Bc3Npc3RhbnRTZXJ2aWNlLmphdmEKQEAgLTE2LDggKzE2LDE1IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5zZXJ2aWNlLm5vdGlmaWNhdGlvbjsKIAoraW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5TZGtDb25zdGFudDsKIGltcG9ydCBhbmRyb2lkLmFwcC5Ob3RpZmljYXRpb247CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKIGltcG9ydCBhbmRyb2lkLm5ldC5Vcmk7CitpbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOworaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsOworaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsYWJsZTsKK2ltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCiAvKioKICAqIEEgc2VydmljZSB0aGF0IGhlbHBzIHRoZSB1c2VyIG1hbmFnZSBub3RpZmljYXRpb25zIGJ5IG1vZGlmeWluZyB0aGUKQEAgLTM1LDYgKzQyLDE1IEBACiAgKiAmbHQ7L3NlcnZpY2U+PC9wcmU+CiAgKi8KIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBOb3RpZmljYXRpb25Bc3Npc3RhbnRTZXJ2aWNlIGV4dGVuZHMgTm90aWZpY2F0aW9uTGlzdGVuZXJTZXJ2aWNlIHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIk5vdGlmaWNhdGlvbkFzc2lzdGFudCI7CisKKyAgICAvKioKKyAgICAgKiBUaGUge0BsaW5rIEludGVudH0gdGhhdCBtdXN0IGJlIGRlY2xhcmVkIGFzIGhhbmRsZWQgYnkgdGhlIHNlcnZpY2UuCisgICAgICovCisgICAgQFNka0NvbnN0YW50KFNka0NvbnN0YW50LlNka0NvbnN0YW50VHlwZS5TRVJWSUNFX0FDVElPTikKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTRVJWSUNFX0lOVEVSRkFDRQorICAgICAgICAgICAgPSAiYW5kcm9pZC5zZXJ2aWNlLm5vdGlmaWNhdGlvbi5Ob3RpZmljYXRpb25Bc3Npc3RhbnRTZXJ2aWNlIjsKKwogICAgIC8qKiBOb3RpZmljYXRpb24gd2FzIGNhbmNlbGVkIGJ5IHRoZSBzdGF0dXMgYmFyIHJlcG9ydGluZyBhIGNsaWNrLiAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJFQVNPTl9ERUxFR0FURV9DTElDSyA9IDE7CiAKQEAgLTk2LDYgKzExMiwxNCBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIElCaW5kZXIgb25CaW5kKEludGVudCBpbnRlbnQpIHsKKyAgICAgICAgaWYgKG1XcmFwcGVyID09IG51bGwpIHsKKyAgICAgICAgICAgIG1XcmFwcGVyID0gbmV3IE5vdGlmaWNhdGlvbkFzc2lzdGFudFdyYXBwZXIoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbVdyYXBwZXI7CisgICAgfQorCiAgICAgLyoqCiAgICAgICogQSBub3RpZmljYXRpb24gd2FzIHBvc3RlZCBieSBhbiBhcHAuIENhbGxlZCBiZWZvcmUgYWxlcnQuCiAgICAgICoKQEAgLTE2Myw3ICsxODcsMTMgQEAKICAgICAgKi8KICAgICBwdWJsaWMgZmluYWwgdm9pZCBhZGp1c3RJbXBvcnRhbmNlKFN0cmluZyBrZXksIEFkanVzdG1lbnQgYWRqdXN0bWVudCkKICAgICB7Ci0gICAgICAgIC8vIFRPRE86IHBhY2sgdXAgdGhlIGFkanVzdG1lbnQgYW5kIHNlbmQgaXQgdG8gdGhlIE5vdGlmaWNhdGlvbk1hbmFnZXIuCisgICAgICAgIGlmICghaXNCb3VuZCgpKSByZXR1cm47CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBnZXROb3RpZmljYXRpb25JbnRlcmZhY2UoKS5zZXRJbXBvcnRhbmNlRnJvbUFzc2lzdGFudChtV3JhcHBlciwga2V5LAorICAgICAgICAgICAgICAgICAgICBhZGp1c3RtZW50Lm1JbXBvcnRhbmNlLCBhZGp1c3RtZW50Lm1FeHBsYW5hdGlvbik7CisgICAgICAgIH0gY2F0Y2ggKGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICBMb2cudihUQUcsICJVbmFibGUgdG8gY29udGFjdCBub3RpZmljYXRpb24gbWFuYWdlciIsIGV4KTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIC8qKgpAQCAtMTcxLDcgKzIwMSw3IEBACiAgICAgICogYmUgZmlyZWQgd2hlbiB0aGUgaG9zdCBub3RpZmljYXRpb24gaXMgZGVsZXRlZCwgb3Igd2hlbiB0aGlzIGFubm90YXRpb24KICAgICAgKiBpcyByZW1vdmVkIG9yIHJlcGxhY2VkLgogICAgICAqCi0gICAgICogQHBhcmFtIGtleSB0aGUgbm90aWZpY2F0aW9uIGtleQorICAgICAqIEBwYXJhbSBrZXkgdGhlIGtleSBvZiB0aGUgbm90aWZpY2F0aW9uIHRvIGJlIGFubm90YXRlZAogICAgICAqIEBwYXJhbSBhbm5vdGF0aW9uIHRoZSBuZXcgYW5ub3RhdGlvbiBvYmplY3QKICAgICAgKi8KICAgICBwdWJsaWMgZmluYWwgdm9pZCBzZXRBbm5vdGF0aW9uKFN0cmluZyBrZXksIE5vdGlmaWNhdGlvbiBhbm5vdGF0aW9uKQpAQCAtMTgyLDEwICsyMTIsNzQgQEAKICAgICAvKioKICAgICAgKiBSZW1vdmUgdGhlIGFubm90YXRpb24gZnJvbSBhIG5vdGlmaWNhdGlvbi4KICAgICAgKgotICAgICAqIEBwYXJhbSBrZXkgdGhlIG5vdGlmaWNhdGlvbiBrZXkKKyAgICAgKiBAcGFyYW0ga2V5IHRoZSBrZXkgb2YgdGhlIG5vdGlmaWNhdGlvbiB0byBiZSBjbGVhbnNlZCBvZiBhbm5vdGF0b25zCiAgICAgICovCiAgICAgcHVibGljIGZpbmFsIHZvaWQgY2xlYXJBbm5vdGF0aW9uKFN0cmluZyBrZXkpCiAgICAgewogICAgICAgICAvLyBUT0RPOiBhc2sgdGhlIE5vdGlmaWNhdGlvbk1hbmFnZXIgdG8gY2xlYXIgdGhlIGFubm90YXRpb24uCiAgICAgfQorCisgICAgcHJpdmF0ZSBjbGFzcyBOb3RpZmljYXRpb25Bc3Npc3RhbnRXcmFwcGVyIGV4dGVuZHMgTm90aWZpY2F0aW9uTGlzdGVuZXJXcmFwcGVyIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uTm90aWZpY2F0aW9uRW5xdWV1ZWQoSVN0YXR1c0Jhck5vdGlmaWNhdGlvbkhvbGRlciBzYm5Ib2xkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGltcG9ydGFuY2UsIGJvb2xlYW4gdXNlcikgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CisgICAgICAgICAgICBTdGF0dXNCYXJOb3RpZmljYXRpb24gc2JuOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBzYm4gPSBzYm5Ib2xkZXIuZ2V0KCk7CisgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIExvZy53KFRBRywgIm9uTm90aWZpY2F0aW9uRW5xdWV1ZWQ6IEVycm9yIHJlY2VpdmluZyBTdGF0dXNCYXJOb3RpZmljYXRpb24iLCBlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgQWRqdXN0bWVudCBhZGp1c3RtZW50ID0KKyAgICAgICAgICAgICAgICAgICAgTm90aWZpY2F0aW9uQXNzaXN0YW50U2VydmljZS50aGlzLm9uTm90aWZpY2F0aW9uRW5xdWV1ZWQoc2JuLCBpbXBvcnRhbmNlLCB1c2VyKTsKKyAgICAgICAgICAgICAgICBpZiAoYWRqdXN0bWVudCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGFkanVzdEltcG9ydGFuY2Uoc2JuLmdldEtleSgpLCBhZGp1c3RtZW50KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdCkgeworICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkVycm9yIHJ1bm5pbmcgb25Ob3RpZmljYXRpb25FbnF1ZXVlZCIsIHQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uTm90aWZpY2F0aW9uVmlzaWJpbGl0eUNoYW5nZWQoU3RyaW5nIGtleSwgbG9uZyB0aW1lLCBib29sZWFuIHZpc2libGUpCisgICAgICAgICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIE5vdGlmaWNhdGlvbkFzc2lzdGFudFNlcnZpY2UudGhpcy5vbk5vdGlmaWNhdGlvblZpc2liaWxpdHlDaGFuZ2VkKGtleSwgdGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGUpOworICAgICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJFcnJvciBydW5uaW5nIG9uTm90aWZpY2F0aW9uVmlzaWJpbGl0eUNoYW5nZWQiLCB0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvbk5vdGlmaWNhdGlvbkNsaWNrKFN0cmluZyBrZXksIGxvbmcgdGltZSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIE5vdGlmaWNhdGlvbkFzc2lzdGFudFNlcnZpY2UudGhpcy5vbk5vdGlmaWNhdGlvbkNsaWNrKGtleSwgdGltZSk7CisgICAgICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdCkgeworICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkVycm9yIHJ1bm5pbmcgb25Ob3RpZmljYXRpb25DbGljayIsIHQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uTm90aWZpY2F0aW9uQWN0aW9uQ2xpY2soU3RyaW5nIGtleSwgbG9uZyB0aW1lLCBpbnQgYWN0aW9uSW5kZXgpCisgICAgICAgICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIE5vdGlmaWNhdGlvbkFzc2lzdGFudFNlcnZpY2UudGhpcy5vbk5vdGlmaWNhdGlvbkFjdGlvbkNsaWNrKGtleSwgdGltZSwgYWN0aW9uSW5kZXgpOworICAgICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJFcnJvciBydW5uaW5nIG9uTm90aWZpY2F0aW9uQWN0aW9uQ2xpY2siLCB0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvbk5vdGlmaWNhdGlvblJlbW92ZWRSZWFzb24oU3RyaW5nIGtleSwgbG9uZyB0aW1lLCBpbnQgcmVhc29uKQorICAgICAgICAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24geworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBOb3RpZmljYXRpb25Bc3Npc3RhbnRTZXJ2aWNlLnRoaXMub25Ob3RpZmljYXRpb25SZW1vdmVkKGtleSwgdGltZSwgcmVhc29uKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0KSB7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRXJyb3IgcnVubmluZyBvbk5vdGlmaWNhdGlvblJlbW92ZWQiLCB0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3NlcnZpY2Uvbm90aWZpY2F0aW9uL05vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvc2VydmljZS9ub3RpZmljYXRpb24vTm90aWZpY2F0aW9uTGlzdGVuZXJTZXJ2aWNlLmphdmEKaW5kZXggMjMyZDRmZS4uYjQyZDllYSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvc2VydmljZS9ub3RpZmljYXRpb24vTm90aWZpY2F0aW9uTGlzdGVuZXJTZXJ2aWNlLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvc2VydmljZS9ub3RpZmljYXRpb24vTm90aWZpY2F0aW9uTGlzdGVuZXJTZXJ2aWNlLmphdmEKQEAgLTE1LDYgKzE1LDcgQEAKICAqLwogCiBwYWNrYWdlIGFuZHJvaWQuc2VydmljZS5ub3RpZmljYXRpb247CitpbXBvcnQgYW5kcm9pZC5zZXJ2aWNlLm5vdGlmaWNhdGlvbi5JU3RhdHVzQmFyTm90aWZpY2F0aW9uSG9sZGVyOwogCiBpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlN5c3RlbUFwaTsKIGltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uU2RrQ29uc3RhbnQ7CkBAIC02MCw2ICs2MSwxNiBAQAogICogICAgICAgICAmbHQ7YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5zZXJ2aWNlLm5vdGlmaWNhdGlvbi5Ob3RpZmljYXRpb25MaXN0ZW5lclNlcnZpY2UiIC8+CiAgKiAgICAgJmx0Oy9pbnRlbnQtZmlsdGVyPgogICogJmx0Oy9zZXJ2aWNlPjwvcHJlPgorICogPHA+IFR5cGljYWxseSwgd2hpbGUgZW5hYmxlZCBpbiB1c2VyIHNldHRpbmdzLCB0aGlzIHNlcnZpY2Ugd2lsbCBiZSBib3VuZCBvbiBib290IG9yIHdoZW4gYQorICogc2V0dGluZ3MgY2hhbmdlIG9jY3VycyB0aGF0IGNvdWxkIGFmZmVjdCB3aGV0aGVyIHRoaXMgc2VydmljZSBzaG91bGQgcnVuLiAgSG93ZXZlciwgZm9yIHNvbWUKKyAqIHN5c3RlbSB1c2FnZSBtb2RlcywgdGhlIHlvdSBtYXkgaW5zdGVhZCBzcGVjaWZ5IHRoYXQgdGhpcyBzZXJ2aWNlIGlzIGluc3RlYWQgYm91bmQgYW5kIHVuYm91bmQKKyAqIGluIHJlc3BvbnNlIHRvIG1vZGUgY2hhbmdlcyBieSBpbmNsdWRpbmcgYSBjYXRlZ29yeSBpbiB0aGUgaW50ZW50IGZpbHRlci4gIEN1cnJlbnRseQorICogc3VwcG9ydGVkIGNhdGVnb3JpZXMgYXJlOgorICogPHVsPgorICogICA8bGk+e0BsaW5rICNDQVRFR09SWV9WUl9OT1RJRklDQVRJT05TfSAtIHRoaXMgc2VydmljZSBpcyBib3VuZCB3aGVuIGFuIEFjdGl2aXR5IGhhcyBlbmFibGVkCisgKiAgIFZSIG1vZGUuIHtAc2VlIGFuZHJvaWQuYXBwLkFjdGl2aXR5I3NldFZyTW9kZShib29sZWFuKX0uPC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CiAgKi8KIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBOb3RpZmljYXRpb25MaXN0ZW5lclNlcnZpY2UgZXh0ZW5kcyBTZXJ2aWNlIHsKICAgICAvLyBUQUcgPSAiTm90aWZpY2F0aW9uTGlzdGVuZXJTZXJ2aWNlW015U3ViY2xhc3NdIgpAQCAtMTEyLDYgKzEyMyw4IEBACiAgICAgICAgICAgICBOb3RpZmljYXRpb25NYW5hZ2VyLlBvbGljeS5TVVBQUkVTU0VEX0VGRkVDVF9MSUdIVFM7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1VQUFJFU1NFRF9FRkZFQ1RfUEVFSyA9CiAgICAgICAgICAgICBOb3RpZmljYXRpb25NYW5hZ2VyLlBvbGljeS5TVVBQUkVTU0VEX0VGRkVDVF9QRUVLOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNVUFBSRVNTRURfRUZGRUNUX1NDUkVFTl9PTiA9CisgICAgICAgICAgICBOb3RpZmljYXRpb25NYW5hZ2VyLlBvbGljeS5TVVBQUkVTU0VEX0VGRkVDVF9TQ1JFRU5fT047CiAKICAgICAvKioKICAgICAgKiBUaGUgZnVsbCB0cmltIG9mIHRoZSBTdGF0dXNCYXJOb3RpZmljYXRpb24gaW5jbHVkaW5nIGFsbCBpdHMgZmVhdHVyZXMuCkBAIC0xNDEsNyArMTU0LDggQEAKICAgICBAU3lzdGVtQXBpCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVFJJTV9MSUdIVCA9IDE7CiAKLSAgICBwcml2YXRlIElOb3RpZmljYXRpb25MaXN0ZW5lcldyYXBwZXIgbVdyYXBwZXIgPSBudWxsOworICAgIC8qKiBAaGlkZSAqLworICAgIHByb3RlY3RlZCBOb3RpZmljYXRpb25MaXN0ZW5lcldyYXBwZXIgbVdyYXBwZXIgPSBudWxsOwogICAgIHByaXZhdGUgUmFua2luZ01hcCBtUmFua2luZ01hcDsKIAogICAgIHByaXZhdGUgSU5vdGlmaWNhdGlvbk1hbmFnZXIgbU5vTWFuOwpAQCAtMTYyLDYgKzE3NiwxNyBAQAogICAgICAgICAgICAgPSAiYW5kcm9pZC5zZXJ2aWNlLm5vdGlmaWNhdGlvbi5Ob3RpZmljYXRpb25MaXN0ZW5lclNlcnZpY2UiOwogCiAgICAgLyoqCisgICAgICogSWYgdGhpcyBjYXRlZ29yeSBpcyBkZWNsYXJlZCBpbiB0aGUgYXBwbGljYXRpb24gbWFuaWZlc3QgZm9yIGEgc2VydmljZSBvZiB0aGlzIHR5cGUsIHRoaXMKKyAgICAgKiBzZXJ2aWNlIHdpbGwgYmUgYm91bmQgd2hlbiBWUiBtb2RlIGlzIGVuYWJsZWQsIGFuZCB1bmJvdW5kIHdoZW4gVlIgbW9kZSBpcyBkaXNhYmxlZCByYXRoZXIKKyAgICAgKiB0aGFuIHRoZSBub3JtYWwgbGlmZWN5Y2xlIGZvciBhIG5vdGlmaWNhdGlvbiBzZXJ2aWNlLgorICAgICAqCisgICAgICoge0BzZWUgYW5kcm9pZC5hcHAuQWN0aXZpdHkjc2V0VnJNb2RlKGJvb2xlYW4pfQorICAgICAqLworICAgIEBTZGtDb25zdGFudChTZGtDb25zdGFudC5TZGtDb25zdGFudFR5cGUuSU5URU5UX0NBVEVHT1JZKQorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENBVEVHT1JZX1ZSX05PVElGSUNBVElPTlMgPQorICAgICAgICAiYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkudnIubm90aWZpY2F0aW9ucyI7CisKKyAgICAvKioKICAgICAgKiBJbXBsZW1lbnQgdGhpcyBtZXRob2QgdG8gbGVhcm4gYWJvdXQgbmV3IG5vdGlmaWNhdGlvbnMgYXMgdGhleSBhcmUgcG9zdGVkIGJ5IGFwcHMuCiAgICAgICoKICAgICAgKiBAcGFyYW0gc2JuIEEgZGF0YSBzdHJ1Y3R1cmUgZW5jYXBzdWxhdGluZyB0aGUgb3JpZ2luYWwge0BsaW5rIGFuZHJvaWQuYXBwLk5vdGlmaWNhdGlvbn0KQEAgLTI3MCw3ICsyOTUsOCBAQAogICAgICAgICAvLyBvcHRpb25hbAogICAgIH0KIAotICAgIHByaXZhdGUgZmluYWwgSU5vdGlmaWNhdGlvbk1hbmFnZXIgZ2V0Tm90aWZpY2F0aW9uSW50ZXJmYWNlKCkgeworICAgIC8qKiBAaGlkZSAqLworICAgIHByb3RlY3RlZCBmaW5hbCBJTm90aWZpY2F0aW9uTWFuYWdlciBnZXROb3RpZmljYXRpb25JbnRlcmZhY2UoKSB7CiAgICAgICAgIGlmIChtTm9NYW4gPT0gbnVsbCkgewogICAgICAgICAgICAgbU5vTWFuID0gSU5vdGlmaWNhdGlvbk1hbmFnZXIuU3R1Yi5hc0ludGVyZmFjZSgKICAgICAgICAgICAgICAgICAgICAgU2VydmljZU1hbmFnZXIuZ2V0U2VydmljZShDb250ZXh0Lk5PVElGSUNBVElPTl9TRVJWSUNFKSk7CkBAIC02MTMsMTIgKzYzOSwxMyBAQAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBJQmluZGVyIG9uQmluZChJbnRlbnQgaW50ZW50KSB7CiAgICAgICAgIGlmIChtV3JhcHBlciA9PSBudWxsKSB7Ci0gICAgICAgICAgICBtV3JhcHBlciA9IG5ldyBJTm90aWZpY2F0aW9uTGlzdGVuZXJXcmFwcGVyKCk7CisgICAgICAgICAgICBtV3JhcHBlciA9IG5ldyBOb3RpZmljYXRpb25MaXN0ZW5lcldyYXBwZXIoKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gbVdyYXBwZXI7CiAgICAgfQogCi0gICAgcHJpdmF0ZSBib29sZWFuIGlzQm91bmQoKSB7CisgICAgLyoqIEBoaWRlICovCisgICAgcHJvdGVjdGVkIGJvb2xlYW4gaXNCb3VuZCgpIHsKICAgICAgICAgaWYgKG1XcmFwcGVyID09IG51bGwpIHsKICAgICAgICAgICAgIExvZy53KFRBRywgIk5vdGlmaWNhdGlvbiBsaXN0ZW5lciBzZXJ2aWNlIG5vdCB5ZXQgYm91bmQuIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC02NDMsNyArNjcwLDcgQEAKICAgICAgICAgICAgIGludCBjdXJyZW50VXNlcikgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CiAgICAgICAgIG1TeXN0ZW1Db250ZXh0ID0gY29udGV4dDsKICAgICAgICAgaWYgKG1XcmFwcGVyID09IG51bGwpIHsKLSAgICAgICAgICAgIG1XcmFwcGVyID0gbmV3IElOb3RpZmljYXRpb25MaXN0ZW5lcldyYXBwZXIoKTsKKyAgICAgICAgICAgIG1XcmFwcGVyID0gbmV3IE5vdGlmaWNhdGlvbkxpc3RlbmVyV3JhcHBlcigpOwogICAgICAgICB9CiAgICAgICAgIElOb3RpZmljYXRpb25NYW5hZ2VyIG5vTWFuID0gZ2V0Tm90aWZpY2F0aW9uSW50ZXJmYWNlKCk7CiAgICAgICAgIG5vTWFuLnJlZ2lzdGVyTGlzdGVuZXIobVdyYXBwZXIsIGNvbXBvbmVudE5hbWUsIGN1cnJlbnRVc2VyKTsKQEAgLTY5NSw3ICs3MjIsOCBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHJpdmF0ZSBjbGFzcyBJTm90aWZpY2F0aW9uTGlzdGVuZXJXcmFwcGVyIGV4dGVuZHMgSU5vdGlmaWNhdGlvbkxpc3RlbmVyLlN0dWIgeworICAgIC8qKiBAaGlkZSAqLworICAgIHByb3RlY3RlZCBjbGFzcyBOb3RpZmljYXRpb25MaXN0ZW5lcldyYXBwZXIgZXh0ZW5kcyBJTm90aWZpY2F0aW9uTGlzdGVuZXIuU3R1YiB7CiAgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwdWJsaWMgdm9pZCBvbk5vdGlmaWNhdGlvblBvc3RlZChJU3RhdHVzQmFyTm90aWZpY2F0aW9uSG9sZGVyIHNibkhvbGRlciwKICAgICAgICAgICAgICAgICBOb3RpZmljYXRpb25SYW5raW5nVXBkYXRlIHVwZGF0ZSkgewpAQCAtNzk2LDYgKzgyNCwzNSBAQAogICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkVycm9yIHJ1bm5pbmcgb25JbnRlcnJ1cHRpb25GaWx0ZXJDaGFuZ2VkIiwgdCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25Ob3RpZmljYXRpb25FbnF1ZXVlZChJU3RhdHVzQmFyTm90aWZpY2F0aW9uSG9sZGVyIG5vdGlmaWNhdGlvbkhvbGRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW1wb3J0YW5jZSwgYm9vbGVhbiB1c2VyKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIC8vIG5vLW9wIGluIHRoZSBsaXN0ZW5lcgorICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uTm90aWZpY2F0aW9uVmlzaWJpbGl0eUNoYW5nZWQoU3RyaW5nIGtleSwgbG9uZyB0aW1lLCBib29sZWFuIHZpc2libGUpCisgICAgICAgICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CisgICAgICAgICAgICAvLyBuby1vcCBpbiB0aGUgbGlzdGVuZXIKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvbk5vdGlmaWNhdGlvbkNsaWNrKFN0cmluZyBrZXksIGxvbmcgdGltZSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CisgICAgICAgICAgICAvLyBuby1vcCBpbiB0aGUgbGlzdGVuZXIKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvbk5vdGlmaWNhdGlvbkFjdGlvbkNsaWNrKFN0cmluZyBrZXksIGxvbmcgdGltZSwgaW50IGFjdGlvbkluZGV4KQorICAgICAgICAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24geworICAgICAgICAgICAgLy8gbm8tb3AgaW4gdGhlIGxpc3RlbmVyCisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25Ob3RpZmljYXRpb25SZW1vdmVkUmVhc29uKFN0cmluZyBrZXksIGxvbmcgdGltZSwgaW50IHJlYXNvbikKKyAgICAgICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIC8vIG5vLW9wIGluIHRoZSBsaXN0ZW5lcgorICAgICAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGFwcGx5VXBkYXRlKE5vdGlmaWNhdGlvblJhbmtpbmdVcGRhdGUgdXBkYXRlKSB7CkBAIC05MDYsNyArOTYzLDggQEAKIAogICAgICAgICAvKioKICAgICAgICAgICogUmV0dXJucyB0aGUgdHlwZShzKSBvZiB2aXN1YWwgZWZmZWN0cyB0aGF0IHNob3VsZCBiZSBzdXBwcmVzc2VkIGZvciB0aGlzIG5vdGlmaWNhdGlvbi4KLSAgICAgICAgICogU2VlIHtAbGluayAjU1VQUFJFU1NFRF9FRkZFQ1RfTElHSFRTfSwge0BsaW5rICNTVVBQUkVTU0VEX0VGRkVDVF9QRUVLfX0uCisgICAgICAgICAqIFNlZSB7QGxpbmsgI1NVUFBSRVNTRURfRUZGRUNUX0xJR0hUU30sIHtAbGluayAjU1VQUFJFU1NFRF9FRkZFQ1RfUEVFS30sCisgICAgICAgICAqIHtAbGluayAjU1VQUFJFU1NFRF9FRkZFQ1RfU0NSRUVOX09OfS4KICAgICAgICAgICovCiAgICAgICAgIHB1YmxpYyBpbnQgZ2V0U3VwcHJlc3NlZFZpc3VhbEVmZmVjdHMoKSB7CiAgICAgICAgICAgICByZXR1cm4gbVN1cHByZXNzZWRWaXN1YWxFZmZlY3RzOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvc2VydmljZS9ub3RpZmljYXRpb24vWmVuTW9kZUNvbmZpZy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvc2VydmljZS9ub3RpZmljYXRpb24vWmVuTW9kZUNvbmZpZy5qYXZhCmluZGV4IDU0MTYyM2QuLjQ2ODg4NDMgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3NlcnZpY2Uvbm90aWZpY2F0aW9uL1plbk1vZGVDb25maWcuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9zZXJ2aWNlL25vdGlmaWNhdGlvbi9aZW5Nb2RlQ29uZmlnLmphdmEKQEAgLTc5LDYgKzc5LDcgQEAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFRkFVTFRfQUxMT1dfUkVQRUFUX0NBTExFUlMgPSBmYWxzZTsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFRkFVTFRfQUxMT1dfUEVFSyA9IHRydWU7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUZBVUxUX0FMTE9XX0xJR0hUUyA9IHRydWU7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUZBVUxUX0FMTE9XX1NDUkVFTl9PTiA9IHRydWU7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgWE1MX1ZFUlNJT04gPSAyOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBaRU5fVEFHID0gInplbiI7CkBAIC05NSw2ICs5Niw3IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFMTE9XX0FUVF9FVkVOVFMgPSAiZXZlbnRzIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUxMT1dfQVRUX1BFRUsgPSAicGVlayI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFMTE9XX0FUVF9MSUdIVFMgPSAibGlnaHRzIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUxMT1dfQVRUX1NDUkVFTl9PTiA9ICJzY3JlZW5fb24iOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENPTkRJVElPTl9UQUcgPSAiY29uZGl0aW9uIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09ORElUSU9OX0FUVF9DT01QT05FTlQgPSAiY29tcG9uZW50IjsKQEAgLTEyOCw2ICsxMzAsNyBAQAogICAgIHB1YmxpYyBpbnQgdXNlciA9IFVzZXJIYW5kbGUuVVNFUl9TWVNURU07CiAgICAgcHVibGljIGJvb2xlYW4gYWxsb3dQZWVrID0gREVGQVVMVF9BTExPV19QRUVLOwogICAgIHB1YmxpYyBib29sZWFuIGFsbG93TGlnaHRzID0gREVGQVVMVF9BTExPV19MSUdIVFM7CisgICAgcHVibGljIGJvb2xlYW4gYWxsb3dTY3JlZW5PbiA9IERFRkFVTFRfQUxMT1dfU0NSRUVOX09OOwogCiAgICAgcHVibGljIFplblJ1bGUgbWFudWFsUnVsZTsKICAgICBwdWJsaWMgQXJyYXlNYXA8U3RyaW5nLCBaZW5SdWxlPiBhdXRvbWF0aWNSdWxlcyA9IG5ldyBBcnJheU1hcDw+KCk7CkBAIC0xNTYsNiArMTU5LDcgQEAKICAgICAgICAgfQogICAgICAgICBhbGxvd1BlZWsgPSBzb3VyY2UucmVhZEludCgpID09IDE7CiAgICAgICAgIGFsbG93TGlnaHRzID0gc291cmNlLnJlYWRJbnQoKSA9PSAxOworICAgICAgICBhbGxvd1NjcmVlbk9uID0gc291cmNlLnJlYWRJbnQoKSA9PSAxOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpAQCAtMTg1LDYgKzE4OSw3IEBACiAgICAgICAgIH0KICAgICAgICAgZGVzdC53cml0ZUludChhbGxvd1BlZWsgPyAxIDogMCk7CiAgICAgICAgIGRlc3Qud3JpdGVJbnQoYWxsb3dMaWdodHMgPyAxIDogMCk7CisgICAgICAgIGRlc3Qud3JpdGVJbnQoYWxsb3dTY3JlZW5PbiA/IDEgOiAwKTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKQEAgLTIwMCw2ICsyMDUsNyBAQAogICAgICAgICAgICAgICAgIC5hcHBlbmQoIixhbGxvd0V2ZW50cz0iKS5hcHBlbmQoYWxsb3dFdmVudHMpCiAgICAgICAgICAgICAgICAgLmFwcGVuZCgiLGFsbG93UGVlaz0iKS5hcHBlbmQoYWxsb3dQZWVrKQogICAgICAgICAgICAgICAgIC5hcHBlbmQoIixhbGxvd0xpZ2h0cz0iKS5hcHBlbmQoYWxsb3dMaWdodHMpCisgICAgICAgICAgICAgICAgLmFwcGVuZCgiLGFsbG93U2NyZWVuT249IikuYXBwZW5kKGFsbG93U2NyZWVuT24pCiAgICAgICAgICAgICAgICAgLmFwcGVuZCgiLGF1dG9tYXRpY1J1bGVzPSIpLmFwcGVuZChhdXRvbWF0aWNSdWxlcykKICAgICAgICAgICAgICAgICAuYXBwZW5kKCIsbWFudWFsUnVsZT0iKS5hcHBlbmQobWFudWFsUnVsZSkKICAgICAgICAgICAgICAgICAuYXBwZW5kKCddJykudG9TdHJpbmcoKTsKQEAgLTI0MCw2ICsyNDYsOSBAQAogICAgICAgICBpZiAoYWxsb3dMaWdodHMgIT0gdG8uYWxsb3dMaWdodHMpIHsKICAgICAgICAgICAgIGQuYWRkTGluZSgiYWxsb3dMaWdodHMiLCBhbGxvd0xpZ2h0cywgdG8uYWxsb3dMaWdodHMpOwogICAgICAgICB9CisgICAgICAgIGlmIChhbGxvd1NjcmVlbk9uICE9IHRvLmFsbG93U2NyZWVuT24pIHsKKyAgICAgICAgICAgIGQuYWRkTGluZSgiYWxsb3dTY3JlZW5PbiIsIGFsbG93U2NyZWVuT24sIHRvLmFsbG93U2NyZWVuT24pOworICAgICAgICB9CiAgICAgICAgIGZpbmFsIEFycmF5U2V0PFN0cmluZz4gYWxsUnVsZXMgPSBuZXcgQXJyYXlTZXQ8PigpOwogICAgICAgICBhZGRLZXlzKGFsbFJ1bGVzLCBhdXRvbWF0aWNSdWxlcyk7CiAgICAgICAgIGFkZEtleXMoYWxsUnVsZXMsIHRvLmF1dG9tYXRpY1J1bGVzKTsKQEAgLTMzOSw2ICszNDgsNyBAQAogICAgICAgICAgICAgICAgICYmIG90aGVyLmFsbG93RXZlbnRzID09IGFsbG93RXZlbnRzCiAgICAgICAgICAgICAgICAgJiYgb3RoZXIuYWxsb3dQZWVrID09IGFsbG93UGVlawogICAgICAgICAgICAgICAgICYmIG90aGVyLmFsbG93TGlnaHRzID09IGFsbG93TGlnaHRzCisgICAgICAgICAgICAgICAgJiYgb3RoZXIuYWxsb3dTY3JlZW5PbiA9PSBhbGxvd1NjcmVlbk9uCiAgICAgICAgICAgICAgICAgJiYgb3RoZXIudXNlciA9PSB1c2VyCiAgICAgICAgICAgICAgICAgJiYgT2JqZWN0cy5lcXVhbHMob3RoZXIuYXV0b21hdGljUnVsZXMsIGF1dG9tYXRpY1J1bGVzKQogICAgICAgICAgICAgICAgICYmIE9iamVjdHMuZXF1YWxzKG90aGVyLm1hbnVhbFJ1bGUsIG1hbnVhbFJ1bGUpOwpAQCAtMzQ4LDcgKzM1OCw3IEBACiAgICAgcHVibGljIGludCBoYXNoQ29kZSgpIHsKICAgICAgICAgcmV0dXJuIE9iamVjdHMuaGFzaChhbGxvd0NhbGxzLCBhbGxvd1JlcGVhdENhbGxlcnMsIGFsbG93TWVzc2FnZXMsIGFsbG93Q2FsbHNGcm9tLAogICAgICAgICAgICAgICAgIGFsbG93TWVzc2FnZXNGcm9tLCBhbGxvd1JlbWluZGVycywgYWxsb3dFdmVudHMsIGFsbG93UGVlaywgYWxsb3dMaWdodHMsCi0gICAgICAgICAgICAgICAgdXNlciwgYXV0b21hdGljUnVsZXMsIG1hbnVhbFJ1bGUpOworICAgICAgICAgICAgICAgIGFsbG93U2NyZWVuT24sIHVzZXIsIGF1dG9tYXRpY1J1bGVzLCBtYW51YWxSdWxlKTsKICAgICB9CiAKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdG9EYXlMaXN0KGludFtdIGRheXMpIHsKQEAgLTQzNSw2ICs0NDUsOCBAQAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIHJ0LmFsbG93UGVlayA9IHNhZmVCb29sZWFuKHBhcnNlciwgQUxMT1dfQVRUX1BFRUssIERFRkFVTFRfQUxMT1dfUEVFSyk7CiAgICAgICAgICAgICAgICAgICAgIHJ0LmFsbG93TGlnaHRzID0gc2FmZUJvb2xlYW4ocGFyc2VyLCBBTExPV19BVFRfTElHSFRTLCBERUZBVUxUX0FMTE9XX0xJR0hUUyk7CisgICAgICAgICAgICAgICAgICAgIHJ0LmFsbG93U2NyZWVuT24gPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVCb29sZWFuKHBhcnNlciwgQUxMT1dfQVRUX1NDUkVFTl9PTiwgREVGQVVMVF9BTExPV19TQ1JFRU5fT04pOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoTUFOVUFMX1RBRy5lcXVhbHModGFnKSkgewogICAgICAgICAgICAgICAgICAgICBydC5tYW51YWxSdWxlID0gcmVhZFJ1bGVYbWwocGFyc2VyKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKEFVVE9NQVRJQ19UQUcuZXF1YWxzKHRhZykpIHsKQEAgLTQ2NSw2ICs0NzcsNyBAQAogICAgICAgICBvdXQuYXR0cmlidXRlKG51bGwsIEFMTE9XX0FUVF9NRVNTQUdFU19GUk9NLCBJbnRlZ2VyLnRvU3RyaW5nKGFsbG93TWVzc2FnZXNGcm9tKSk7CiAgICAgICAgIG91dC5hdHRyaWJ1dGUobnVsbCwgQUxMT1dfQVRUX1BFRUssIEJvb2xlYW4udG9TdHJpbmcoYWxsb3dQZWVrKSk7CiAgICAgICAgIG91dC5hdHRyaWJ1dGUobnVsbCwgQUxMT1dfQVRUX0xJR0hUUywgQm9vbGVhbi50b1N0cmluZyhhbGxvd0xpZ2h0cykpOworICAgICAgICBvdXQuYXR0cmlidXRlKG51bGwsIEFMTE9XX0FUVF9TQ1JFRU5fT04sIEJvb2xlYW4udG9TdHJpbmcoYWxsb3dTY3JlZW5PbikpOwogICAgICAgICBvdXQuZW5kVGFnKG51bGwsIEFMTE9XX1RBRyk7CiAKICAgICAgICAgaWYgKG1hbnVhbFJ1bGUgIT0gbnVsbCkgewpAQCAtNjQzLDYgKzY1Niw5IEBACiAgICAgICAgIGlmICghYWxsb3dMaWdodHMpIHsKICAgICAgICAgICAgIHN1cHByZXNzZWRWaXN1YWxFZmZlY3RzIHw9IFBvbGljeS5TVVBQUkVTU0VEX0VGRkVDVF9MSUdIVFM7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKCFhbGxvd1NjcmVlbk9uKSB7CisgICAgICAgICAgICBzdXBwcmVzc2VkVmlzdWFsRWZmZWN0cyB8PSBQb2xpY3kuU1VQUFJFU1NFRF9FRkZFQ1RfU0NSRUVOX09OOworICAgICAgICB9CiAgICAgICAgIHByaW9yaXR5Q2FsbFNlbmRlcnMgPSBzb3VyY2VUb1ByaW9yaXR5U2VuZGVycyhhbGxvd0NhbGxzRnJvbSwgcHJpb3JpdHlDYWxsU2VuZGVycyk7CiAgICAgICAgIHByaW9yaXR5TWVzc2FnZVNlbmRlcnMgPSBzb3VyY2VUb1ByaW9yaXR5U2VuZGVycyhhbGxvd01lc3NhZ2VzRnJvbSwgcHJpb3JpdHlNZXNzYWdlU2VuZGVycyk7CiAgICAgICAgIHJldHVybiBuZXcgUG9saWN5KHByaW9yaXR5Q2F0ZWdvcmllcywgcHJpb3JpdHlDYWxsU2VuZGVycywgcHJpb3JpdHlNZXNzYWdlU2VuZGVycywKQEAgLTY4MSw2ICs2OTcsOCBAQAogICAgICAgICBpZiAocG9saWN5LnN1cHByZXNzZWRWaXN1YWxFZmZlY3RzICE9IFBvbGljeS5TVVBQUkVTU0VEX0VGRkVDVFNfVU5TRVQpIHsKICAgICAgICAgICAgIGFsbG93UGVlayA9IChwb2xpY3kuc3VwcHJlc3NlZFZpc3VhbEVmZmVjdHMgJiBQb2xpY3kuU1VQUFJFU1NFRF9FRkZFQ1RfUEVFSykgPT0gMDsKICAgICAgICAgICAgIGFsbG93TGlnaHRzID0gKHBvbGljeS5zdXBwcmVzc2VkVmlzdWFsRWZmZWN0cyAmIFBvbGljeS5TVVBQUkVTU0VEX0VGRkVDVF9MSUdIVFMpID09IDA7CisgICAgICAgICAgICBhbGxvd1NjcmVlbk9uID0KKyAgICAgICAgICAgICAgICAgICAgKHBvbGljeS5zdXBwcmVzc2VkVmlzdWFsRWZmZWN0cyAmIFBvbGljeS5TVVBQUkVTU0VEX0VGRkVDVF9TQ1JFRU5fT04pID09IDA7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3NlcnZpY2UvcXVpY2tzZXR0aW5ncy9JUVNTZXJ2aWNlLmFpZGwgYi9jb3JlL2phdmEvYW5kcm9pZC9zZXJ2aWNlL3F1aWNrc2V0dGluZ3MvSVFTU2VydmljZS5haWRsCmluZGV4IDdlNzA1MDEuLjc1ZGE4MmYgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3NlcnZpY2UvcXVpY2tzZXR0aW5ncy9JUVNTZXJ2aWNlLmFpZGwKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvc2VydmljZS9xdWlja3NldHRpbmdzL0lRU1NlcnZpY2UuYWlkbApAQCAtMjQsNCArMjQsNSBAQAogaW50ZXJmYWNlIElRU1NlcnZpY2UgewogICAgIHZvaWQgdXBkYXRlUXNUaWxlKGluIFRpbGUgdGlsZSk7CiAgICAgdm9pZCBvblNob3dEaWFsb2coaW4gVGlsZSB0aWxlKTsKKyAgICB2b2lkIHNldFRpbGVNb2RlKGluIENvbXBvbmVudE5hbWUgY29tcG9uZW50LCBpbnQgbW9kZSk7CiB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9zZXJ2aWNlL3F1aWNrc2V0dGluZ3MvSVFTVGlsZVNlcnZpY2UuYWlkbCBiL2NvcmUvamF2YS9hbmRyb2lkL3NlcnZpY2UvcXVpY2tzZXR0aW5ncy9JUVNUaWxlU2VydmljZS5haWRsCmluZGV4IDYzYTRjNWUuLjQ5OTdmNzUgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3NlcnZpY2UvcXVpY2tzZXR0aW5ncy9JUVNUaWxlU2VydmljZS5haWRsCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3NlcnZpY2UvcXVpY2tzZXR0aW5ncy9JUVNUaWxlU2VydmljZS5haWRsCkBAIC0yMiw2ICsyMiw3IEBACiAgKiBAaGlkZQogICovCiBvbmV3YXkgaW50ZXJmYWNlIElRU1RpbGVTZXJ2aWNlIHsKKyAgICB2b2lkIHNldFFTU2VydmljZShpbiBJUVNTZXJ2aWNlIHNlcnZpY2UpOwogICAgIHZvaWQgc2V0UVNUaWxlKGluIFRpbGUgdGlsZSk7CiAgICAgdm9pZCBvblRpbGVBZGRlZCgpOwogICAgIHZvaWQgb25UaWxlUmVtb3ZlZCgpOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvc2VydmljZS9xdWlja3NldHRpbmdzL1RpbGUuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3NlcnZpY2UvcXVpY2tzZXR0aW5ncy9UaWxlLmphdmEKaW5kZXggYTUzZmM1OS4uNjEwNDkxMyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvc2VydmljZS9xdWlja3NldHRpbmdzL1RpbGUuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9zZXJ2aWNlL3F1aWNrc2V0dGluZ3MvVGlsZS5qYXZhCkBAIC0zNywxMSArMzcsMTIgQEAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIlRpbGUiOwogCiAgICAgcHJpdmF0ZSBDb21wb25lbnROYW1lIG1Db21wb25lbnROYW1lOwotICAgIHByaXZhdGUgSVFTU2VydmljZSBtU2VydmljZTsKICAgICBwcml2YXRlIEljb24gbUljb247CiAgICAgcHJpdmF0ZSBDaGFyU2VxdWVuY2UgbUxhYmVsOwogICAgIHByaXZhdGUgQ2hhclNlcXVlbmNlIG1Db250ZW50RGVzY3JpcHRpb247CiAKKyAgICBwcml2YXRlIElRU1NlcnZpY2UgbVNlcnZpY2U7CisKICAgICAvKioKICAgICAgKiBAaGlkZQogICAgICAqLwpAQCAtNTIsOCArNTMsMTQgQEAKICAgICAvKioKICAgICAgKiBAaGlkZQogICAgICAqLwotICAgIHB1YmxpYyBUaWxlKENvbXBvbmVudE5hbWUgY29tcG9uZW50TmFtZSwgSVFTU2VydmljZSBzZXJ2aWNlKSB7CisgICAgcHVibGljIFRpbGUoQ29tcG9uZW50TmFtZSBjb21wb25lbnROYW1lKSB7CiAgICAgICAgIG1Db21wb25lbnROYW1lID0gY29tcG9uZW50TmFtZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldFNlcnZpY2UoSVFTU2VydmljZSBzZXJ2aWNlKSB7CiAgICAgICAgIG1TZXJ2aWNlID0gc2VydmljZTsKICAgICB9CiAKQEAgLTY1LDYgKzcyLDEzIEBACiAgICAgfQogCiAgICAgLyoqCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgSVFTU2VydmljZSBnZXRRc1NlcnZpY2UoKSB7CisgICAgICAgIHJldHVybiBtU2VydmljZTsKKyAgICB9CisKKyAgICAvKioKICAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGljb24gZm9yIHRoZSB0aWxlLgogICAgICAqLwogICAgIHB1YmxpYyBJY29uIGdldEljb24oKSB7CkBAIC0xMzcsMjEgKzE1MSw4IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAaGlkZQotICAgICAqIE5vdGlmaWVzIHRoZSBJUVNTZXJ2aWNlIHRoYXQgdGhpcyB0aWxlIGlzIHNob3dpbmcgYSBkaWFsb2cuCi0gICAgICovCi0gICAgdm9pZCBvblNob3dEaWFsb2coKSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBtU2VydmljZS5vblNob3dEaWFsb2codGhpcyk7Ci0gICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBMb2cuZShUQUcsICJDb3VsZG4ndCBvblNob3dEaWFsb2ciKTsKLSAgICAgICAgfQotICAgIH0KLQogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIHdyaXRlVG9QYXJjZWwoUGFyY2VsIGRlc3QsIGludCBmbGFncykgewotICAgICAgICBkZXN0LndyaXRlU3Ryb25nSW50ZXJmYWNlKG1TZXJ2aWNlKTsKICAgICAgICAgaWYgKG1Db21wb25lbnROYW1lICE9IG51bGwpIHsKICAgICAgICAgICAgIGRlc3Qud3JpdGVCeXRlKChieXRlKSAxKTsKICAgICAgICAgICAgIG1Db21wb25lbnROYW1lLndyaXRlVG9QYXJjZWwoZGVzdCwgZmxhZ3MpOwpAQCAtMTY5LDcgKzE3MCw2IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHJlYWRGcm9tUGFyY2VsKFBhcmNlbCBzb3VyY2UpIHsKLSAgICAgICAgbVNlcnZpY2UgPSBJUVNTZXJ2aWNlLlN0dWIuYXNJbnRlcmZhY2Uoc291cmNlLnJlYWRTdHJvbmdCaW5kZXIoKSk7CiAgICAgICAgIGlmIChzb3VyY2UucmVhZEJ5dGUoKSAhPSAwKSB7CiAgICAgICAgICAgICBtQ29tcG9uZW50TmFtZSA9IENvbXBvbmVudE5hbWUuQ1JFQVRPUi5jcmVhdGVGcm9tUGFyY2VsKHNvdXJjZSk7CiAgICAgICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9zZXJ2aWNlL3F1aWNrc2V0dGluZ3MvVGlsZVNlcnZpY2UuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3NlcnZpY2UvcXVpY2tzZXR0aW5ncy9UaWxlU2VydmljZS5qYXZhCmluZGV4IGZkMmQ1YjAuLjliNTBlZjUgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3NlcnZpY2UvcXVpY2tzZXR0aW5ncy9UaWxlU2VydmljZS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3NlcnZpY2UvcXVpY2tzZXR0aW5ncy9UaWxlU2VydmljZS5qYXZhCkBAIC0xNSw4ICsxNSwxMSBAQAogICovCiBwYWNrYWdlIGFuZHJvaWQuc2VydmljZS5xdWlja3NldHRpbmdzOwogCitpbXBvcnQgYW5kcm9pZC5NYW5pZmVzdDsKIGltcG9ydCBhbmRyb2lkLmFwcC5EaWFsb2c7CiBpbXBvcnQgYW5kcm9pZC5hcHAuU2VydmljZTsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZTsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwogaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKIGltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CkBAIC0yNiwyOSArMjksMjkgQEAKIGltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlcjsKIAogLyoqCi0gKiBBIFFTVGlsZVNlcnZpY2UgcHJvdmlkZXMgdGhlIHVzZXIgYSB0aWxlIHRoYXQgY2FuIGJlIGFkZGVkIHRvIFF1aWNrIFNldHRpbmdzLgorICogQSBUaWxlU2VydmljZSBwcm92aWRlcyB0aGUgdXNlciBhIHRpbGUgdGhhdCBjYW4gYmUgYWRkZWQgdG8gUXVpY2sgU2V0dGluZ3MuCiAgKiBRdWljayBTZXR0aW5ncyBpcyBhIHNwYWNlIHByb3ZpZGVkIHRoYXQgYWxsb3dzIHRoZSB1c2VyIHRvIGNoYW5nZSBzZXR0aW5ncyBhbmQKICAqIHRha2UgcXVpY2sgYWN0aW9ucyB3aXRob3V0IGxlYXZpbmcgdGhlIGNvbnRleHQgb2YgdGhlaXIgY3VycmVudCBhcHAuCiAgKgotICogPHA+VGhlIGxpZmVjeWNsZSBvZiBhIFFTVGlsZVNlcnZpY2UgaXMgZGlmZmVyZW50IGZyb20gc29tZSBvdGhlciBzZXJ2aWNlcyBpbgorICogPHA+VGhlIGxpZmVjeWNsZSBvZiBhIFRpbGVTZXJ2aWNlIGlzIGRpZmZlcmVudCBmcm9tIHNvbWUgb3RoZXIgc2VydmljZXMgaW4KICAqIHRoYXQgaXQgbWF5IGJlIHVuYm91bmQgZHVyaW5nIHBhcnRzIG9mIGl0cyBsaWZlY3ljbGUuICBBbnkgb2YgdGhlIGZvbGxvd2luZwogICogbGlmZWN5Y2xlIGV2ZW50cyBjYW4gaGFwcGVuIGluZGVwZW50bHkgaW4gYSBzZXBhcmF0ZSBiaW5kaW5nL2NyZWF0aW9uIG9mIHRoZQogICogc2VydmljZS48L3A+CiAgKgogICogPHVsPgotICogPGxpPldoZW4gYSB0aWxlIGlzIGFkZGVkIGJ5IHRoZSB1c2VyIGl0cyBRU1RpbGVTZXJ2aWNlIHdpbGwgYmUgYm91bmQgdG8gYW5kCisgKiA8bGk+V2hlbiBhIHRpbGUgaXMgYWRkZWQgYnkgdGhlIHVzZXIgaXRzIFRpbGVTZXJ2aWNlIHdpbGwgYmUgYm91bmQgdG8gYW5kCiAgKiB7QGxpbmsgI29uVGlsZUFkZGVkKCl9IHdpbGwgYmUgY2FsbGVkLjwvbGk+CiAgKgogICogPGxpPldoZW4gYSB0aWxlIHNob3VsZCBiZSB1cCB0byBkYXRlIGFuZCBsaXN0aW5nIHdpbGwgYmUgaW5kaWNhdGVkIGJ5CiAgKiB7QGxpbmsgI29uU3RhcnRMaXN0ZW5pbmcoKX0gYW5kIHtAbGluayAjb25TdG9wTGlzdGVuaW5nKCl9LjwvbGk+CiAgKgotICogPGxpPldoZW4gdGhlIHVzZXIgcmVtb3ZlcyBhIHRpbGUgZnJvbSBRdWljayBTZXR0aW5ncyB7QGxpbmsgI29uU3RvcExpc3RlbmluZygpfQorICogPGxpPldoZW4gdGhlIHVzZXIgcmVtb3ZlcyBhIHRpbGUgZnJvbSBRdWljayBTZXR0aW5ncyB7QGxpbmsgI29uVGlsZVJlbW92ZWQoKX0KICAqIHdpbGwgYmUgY2FsbGVkLjwvbGk+CiAgKiA8L3VsPgotICogPHA+UVNUaWxlU2VydmljZSB3aWxsIGJlIGRldGVjdGVkIGJ5IHRpbGVzIHRoYXQgbWF0Y2ggdGhlIHtAdmFsdWUgI0FDVElPTl9RU19USUxFfQorICogPHA+VGlsZVNlcnZpY2Ugd2lsbCBiZSBkZXRlY3RlZCBieSB0aWxlcyB0aGF0IG1hdGNoIHRoZSB7QHZhbHVlICNBQ1RJT05fUVNfVElMRX0KICAqIGFuZCByZXF1aXJlIHRoZSBwZXJtaXNzaW9uICJhbmRyb2lkLnBlcm1pc3Npb24uQklORF9RVUlDS19TRVRUSU5HU19USUxFIi4KICAqIFRoZSBsYWJlbCBhbmQgaWNvbiBmb3IgdGhlIHNlcnZpY2Ugd2lsbCBiZSB1c2VkIGFzIHRoZSBkZWZhdWx0IGxhYmVsIGFuZAotICogaWNvbiBmb3IgdGhlIHRpbGUuIEhlcmUgaXMgYW4gZXhhbXBsZSBRU1RpbGVTZXJ2aWNlIGRlY2xhcmF0aW9uLjwvcD4KKyAqIGljb24gZm9yIHRoZSB0aWxlLiBIZXJlIGlzIGFuIGV4YW1wbGUgVGlsZVNlcnZpY2UgZGVjbGFyYXRpb24uPC9wPgogICogPHByZSBjbGFzcz0icHJldHR5cHJpbnQiPgogICoge0BsaXRlcmFsCiAgKiA8c2VydmljZQpAQCAtNjcsMTUgKzcwLDYxIEBACiBwdWJsaWMgY2xhc3MgVGlsZVNlcnZpY2UgZXh0ZW5kcyBTZXJ2aWNlIHsKIAogICAgIC8qKgotICAgICAqIEFjdGlvbiB0aGF0IGlkZW50aWZpZXMgYSBTZXJ2aWNlIGFzIGJlaW5nIGEgUVNUaWxlU2VydmljZS4KKyAgICAgKiBBY3Rpb24gdGhhdCBpZGVudGlmaWVzIGEgU2VydmljZSBhcyBiZWluZyBhIFRpbGVTZXJ2aWNlLgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFDVElPTl9RU19USUxFID0gImFuZHJvaWQuc2VydmljZS5xdWlja3NldHRpbmdzLmFjdGlvbi5RU19USUxFIjsKIAorICAgIC8qKgorICAgICAqIFRoZSB0aWxlIG1vZGUgaGFzbid0IGJlZW4gc2V0IHlldC4KKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRJTEVfTU9ERV9VTlNFVCA9IDA7CisKKyAgICAvKioKKyAgICAgKiBDb25zdGFudCB0byBiZSByZXR1cm5lZCBieSB7QGxpbmsgI29uVGlsZUFkZGVkfS4KKyAgICAgKiA8cD4KKyAgICAgKiBQYXNzaXZlIG1vZGUgaXMgdGhlIGRlZmF1bHQgbW9kZSBmb3IgdGlsZXMuICBUaGUgU3lzdGVtIHdpbGwgdGVsbCB0aGUgdGlsZQorICAgICAqIHdoZW4gaXQgaXMgbW9zdCBpbXBvcnRhbnQgdG8gdXBkYXRlIGJ5IHB1dHRpbmcgaXQgaW4gdGhlIGxpc3RlbmluZyBzdGF0ZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUSUxFX01PREVfUEFTU0lWRSA9IDE7CisKKyAgICAvKioKKyAgICAgKiBDb25zdGFudCB0byBiZSByZXR1cm5lZCBieSB7QGxpbmsgI29uVGlsZUFkZGVkfS4KKyAgICAgKiA8cD4KKyAgICAgKiBBY3RpdmUgbW9kZSBpcyBmb3IgdGlsZXMgd2hpY2ggYWxyZWFkeSBsaXN0ZW4gYW5kIGtlZXAgdHJhY2sgb2YgdGhlaXIgc3RhdGUgaW4gdGhlaXIKKyAgICAgKiBvd24gcHJvY2Vzcy4gIFRoZXNlIHRpbGVzIG1heSByZXF1ZXN0IHRvIHNlbmQgYW4gdXBkYXRlIHRvIHRoZSBTeXN0ZW0gd2hpbGUgdGhlaXIgcHJvY2VzcworICAgICAqIGlzIGFsaXZlIHVzaW5nIHtAbGluayAjcmVxdWVzdExpc3RlbmluZ1N0YXRlfS4gIFRoZSBTeXN0ZW0gd2lsbCBvbmx5IGJpbmQgdGhlc2UgdGlsZXMKKyAgICAgKiBvbiBpdHMgb3duIHdoZW4gYSBjbGljayBuZWVkcyB0byBvY2N1ci4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUSUxFX01PREVfQUNUSVZFID0gMjsKKworICAgIC8qKgorICAgICAqIFVzZWQgdG8gbm90aWZ5IFN5c1VJIHRoYXQgTGlzdGVuaW5nIGhhcyBiZSByZXF1ZXN0ZWQuCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBQ1RJT05fUkVRVUVTVF9MSVNURU5JTkcKKyAgICAgICAgICAgID0gImFuZHJvaWQuc2VydmljZS5xdWlja3NldHRpbmdzLmFjdGlvbi5SRVFVRVNUX0xJU1RFTklORyI7CisKKyAgICAvKioKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX0NPTVBPTkVOVCA9ICJhbmRyb2lkLnNlcnZpY2UucXVpY2tzZXR0aW5ncy5leHRyYS5DT01QT05FTlQiOworCiAgICAgcHJpdmF0ZSBmaW5hbCBIIG1IYW5kbGVyID0gbmV3IEgoTG9vcGVyLmdldE1haW5Mb29wZXIoKSk7CiAKICAgICBwcml2YXRlIGJvb2xlYW4gbUxpc3RlbmluZyA9IGZhbHNlOwogICAgIHByaXZhdGUgVGlsZSBtVGlsZTsKICAgICBwcml2YXRlIElCaW5kZXIgbVRva2VuOworICAgIHByaXZhdGUgSVFTU2VydmljZSBtU2VydmljZTsKKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uRGVzdHJveSgpIHsKKyAgICAgICAgaWYgKG1MaXN0ZW5pbmcpIHsKKyAgICAgICAgICAgIG9uU3RvcExpc3RlbmluZygpOworICAgICAgICAgICAgbUxpc3RlbmluZyA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIHN1cGVyLm9uRGVzdHJveSgpOworICAgIH0KIAogICAgIC8qKgogICAgICAqIENhbGxlZCB3aGVuIHRoZSB1c2VyIGFkZHMgdGhpcyB0aWxlIHRvIFF1aWNrIFNldHRpbmdzLgpAQCAtODMsOCArMTMyLDEyIEBACiAgICAgICogTm90ZSB0aGF0IHRoaXMgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgY2FsbGVkIGJldHdlZW4ge0BsaW5rICNvbkNyZWF0ZSgpfQogICAgICAqIGFuZCB7QGxpbmsgI29uU3RhcnRMaXN0ZW5pbmcoKX0sIGl0IHdpbGwgb25seSBiZSBjYWxsZWQgd2hlbiB0aGUgdGlsZSBpcyBhZGRlZAogICAgICAqIGFuZCBub3Qgb24gc3Vic2VxdWVudCBiaW5kcy4KKyAgICAgKgorICAgICAqIEBzZWUgI1RJTEVfTU9ERV9QQVNTSVZFCisgICAgICogQHNlZSAjVElMRV9NT0RFX0FDVElWRQogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIG9uVGlsZUFkZGVkKCkgeworICAgIHB1YmxpYyBpbnQgb25UaWxlQWRkZWQoKSB7CisgICAgICAgIHJldHVybiBUSUxFX01PREVfUEFTU0lWRTsKICAgICB9CiAKICAgICAvKioKQEAgLTEyOSw3ICsxODIsMTAgQEAKICAgICAgICAgZGlhbG9nLmdldFdpbmRvdygpLmdldEF0dHJpYnV0ZXMoKS50b2tlbiA9IG1Ub2tlbjsKICAgICAgICAgZGlhbG9nLmdldFdpbmRvdygpLnNldFR5cGUoV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuVFlQRV9RU19ESUFMT0cpOwogICAgICAgICBkaWFsb2cuc2hvdygpOwotICAgICAgICBnZXRRc1RpbGUoKS5vblNob3dEaWFsb2coKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIG1TZXJ2aWNlLm9uU2hvd0RpYWxvZyhtVGlsZSk7CisgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgIH0KICAgICB9CiAKICAgICAvKioKQEAgLTE0Nyw2ICsyMDMsMTEgQEAKICAgICBwdWJsaWMgSUJpbmRlciBvbkJpbmQoSW50ZW50IGludGVudCkgewogICAgICAgICByZXR1cm4gbmV3IElRU1RpbGVTZXJ2aWNlLlN0dWIoKSB7CiAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHNldFFTU2VydmljZShJUVNTZXJ2aWNlIHNlcnZpY2UpIHRocm93cyBSZW1vdGVFeGNlcHRpb24geworICAgICAgICAgICAgICAgIG1IYW5kbGVyLm9idGFpbk1lc3NhZ2UoSC5NU0dfU0VUX1NFUlZJQ0UsIHNlcnZpY2UpLnNlbmRUb1RhcmdldCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHNldFFTVGlsZShUaWxlIHRpbGUpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewogICAgICAgICAgICAgICAgIG1IYW5kbGVyLm9idGFpbk1lc3NhZ2UoSC5NU0dfU0VUX1RJTEUsIHRpbGUpLnNlbmRUb1RhcmdldCgpOwogICAgICAgICAgICAgfQpAQCAtMTg1LDYgKzI0Niw3IEBACiAgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNU0dfVElMRV9BRERFRCA9IDQ7CiAgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNU0dfVElMRV9SRU1PVkVEID0gNTsKICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1TR19USUxFX0NMSUNLRUQgPSA2OworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTVNHX1NFVF9TRVJWSUNFID0gNzsKIAogICAgICAgICBwdWJsaWMgSChMb29wZXIgbG9vcGVyKSB7CiAgICAgICAgICAgICBzdXBlcihsb29wZXIpOwpAQCAtMTkzLDE0ICsyNTUsMzUgQEAKICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyB2b2lkIGhhbmRsZU1lc3NhZ2UoTWVzc2FnZSBtc2cpIHsKICAgICAgICAgICAgIHN3aXRjaCAobXNnLndoYXQpIHsKKyAgICAgICAgICAgICAgICBjYXNlIE1TR19TRVRfU0VSVklDRToKKyAgICAgICAgICAgICAgICAgICAgbVNlcnZpY2UgPSAoSVFTU2VydmljZSkgbXNnLm9iajsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1UaWxlICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1UaWxlLnNldFNlcnZpY2UobVNlcnZpY2UpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgTVNHX1NFVF9USUxFOgogICAgICAgICAgICAgICAgICAgICBtVGlsZSA9IChUaWxlKSBtc2cub2JqOworICAgICAgICAgICAgICAgICAgICBpZiAobVNlcnZpY2UgIT0gbnVsbCAmJiBtVGlsZSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtVGlsZS5zZXRTZXJ2aWNlKG1TZXJ2aWNlKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIE1TR19USUxFX0FEREVEOgotICAgICAgICAgICAgICAgICAgICBUaWxlU2VydmljZS50aGlzLm9uVGlsZVJlbW92ZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgaW50IG1vZGUgPSBUaWxlU2VydmljZS50aGlzLm9uVGlsZUFkZGVkKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChtU2VydmljZSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1TZXJ2aWNlLnNldFRpbGVNb2RlKG5ldyBDb21wb25lbnROYW1lKFRpbGVTZXJ2aWNlLnRoaXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpbGVTZXJ2aWNlLnRoaXMuZ2V0Q2xhc3MoKSksIG1vZGUpOworICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgTVNHX1RJTEVfUkVNT1ZFRDoKLSAgICAgICAgICAgICAgICAgICAgVGlsZVNlcnZpY2UudGhpcy5vblRpbGVBZGRlZCgpOworICAgICAgICAgICAgICAgICAgICBpZiAobUxpc3RlbmluZykgeworICAgICAgICAgICAgICAgICAgICAgICAgbUxpc3RlbmluZyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgVGlsZVNlcnZpY2UudGhpcy5vblN0b3BMaXN0ZW5pbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBUaWxlU2VydmljZS50aGlzLm9uVGlsZVJlbW92ZWQoKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBNU0dfU1RPUF9MSVNURU5JTkc6CiAgICAgICAgICAgICAgICAgICAgIGlmIChtTGlzdGVuaW5nKSB7CkBAIC0yMjEsNCArMzA0LDE2IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXF1ZXN0cyB0aGF0IGEgdGlsZSBiZSBwdXQgaW4gdGhlIGxpc3RlbmluZyBzdGF0ZSBzbyBpdCBjYW4gc2VuZCBhbiB1cGRhdGUuCisgICAgICoKKyAgICAgKiBUaGlzIG1ldGhvZCBpcyBvbmx5IGFwcGxpY2FibGUgdG8gdGlsZXMgdGhhdCByZXR1cm4ge0BsaW5rICNUSUxFX01PREVfQUNUSVZFfSBmcm9tCisgICAgICoge0BsaW5rICNvblRpbGVBZGRlZCgpfSwgYW5kIHdpbGwgZG8gbm90aGluZyBvdGhlcndpc2UuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCB2b2lkIHJlcXVlc3RMaXN0ZW5pbmdTdGF0ZShDb250ZXh0IGNvbnRleHQsIENvbXBvbmVudE5hbWUgY29tcG9uZW50KSB7CisgICAgICAgIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KEFDVElPTl9SRVFVRVNUX0xJU1RFTklORyk7CisgICAgICAgIGludGVudC5wdXRFeHRyYShFWFRSQV9DT01QT05FTlQsIGNvbXBvbmVudCk7CisgICAgICAgIGNvbnRleHQuc2VuZEJyb2FkY2FzdChpbnRlbnQsIE1hbmlmZXN0LnBlcm1pc3Npb24uQklORF9RVUlDS19TRVRUSU5HU19USUxFKTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC91dGlsL0xvY2FsZUxpc3QuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3V0aWwvTG9jYWxlTGlzdC5qYXZhCmluZGV4IDFiZWNmYjQuLmYyMmNkZTAgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3V0aWwvTG9jYWxlTGlzdC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3V0aWwvTG9jYWxlTGlzdC5qYXZhCkBAIC0yOCwxMiArMjgsNiBAQAogaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwogaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CiAKLS8vIFRPRE86IFdlIGRvbid0IGV4Y2VwdCB0b28gbWFueSBMb2NhbGVMaXN0cyB0byBleGlzdCBhdCB0aGUgc2FtZSB0aW1lLCBhbmQKLS8vIHdlIG5lZWQgYWNjZXNzIHRvIHRoZSBkYXRhIGF0IG5hdGl2ZSBsZXZlbCwgc28gd2Ugc2hvdWxkIHBhc3MgdGhlIGRhdGEKLS8vIGRvd24gdG8gdGhlIG5hdGl2ZSBsZXZlbCwgY3JlYXRlIGEgbWFwIG9mIGV2ZXJ5IGxpc3Qgc2VlbiB0aGVyZSwgdGFrZSBhCi0vLyBwb2ludGVyIGJhY2ssIGFuZCBqdXN0IGtlZXAgdGhhdCBwb2ludGVyIGluIHRoZSBKYXZhLWxldmVsIG9iamVjdCwgc28KLS8vIHRoaW5ncyBjb3VsZCBiZSBjb3BpZWQgdmVyeSBxdWlja2x5LgotCiAvKioKICAqIExvY2FsZUxpc3QgaXMgYW4gaW1tdXRhYmxlIGxpc3Qgb2YgTG9jYWxlcywgdHlwaWNhbGx5IHVzZWQgdG8ga2VlcCBhbgogICogb3JkZXJlZCB1c2VyIHByZWZlcmVuY2VzIGZvciBsb2NhbGVzLgpAQCAtMjE5LDYgKzIxMywyMCBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNUUklOR19FTl9YQSA9ICJlbi1YQSI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNUUklOR19BUl9YQiA9ICJhci1YQiI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9jYWxlIExPQ0FMRV9FTl9YQSA9IG5ldyBMb2NhbGUoImVuIiwgIlhBIik7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9jYWxlIExPQ0FMRV9BUl9YQiA9IG5ldyBMb2NhbGUoImFyIiwgIlhCIik7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE5VTV9QU0VVRE9fTE9DQUxFUyA9IDI7CisKKyAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzUHNldWRvTG9jYWxlKFN0cmluZyBsb2NhbGUpIHsKKyAgICAgICAgcmV0dXJuIFNUUklOR19FTl9YQS5lcXVhbHMobG9jYWxlKSB8fCBTVFJJTkdfQVJfWEIuZXF1YWxzKGxvY2FsZSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1BzZXVkb0xvY2FsZShMb2NhbGUgbG9jYWxlKSB7CisgICAgICAgIHJldHVybiBMT0NBTEVfRU5fWEEuZXF1YWxzKGxvY2FsZSkgfHwgTE9DQUxFX0FSX1hCLmVxdWFscyhsb2NhbGUpOworICAgIH0KKwogICAgIHByaXZhdGUgc3RhdGljIGludCBtYXRjaFNjb3JlKExvY2FsZSBzdXBwb3J0ZWQsIExvY2FsZSBkZXNpcmVkKSB7CiAgICAgICAgIGlmIChzdXBwb3J0ZWQuZXF1YWxzKGRlc2lyZWQpKSB7CiAgICAgICAgICAgICByZXR1cm4gMTsgIC8vIHJldHVybiBlYXJseSBzbyB3ZSBkb24ndCBkbyB1bm5lY2Vzc2FyeSBjb21wdXRhdGlvbgpAQCAtMjI2LDYgKzIzNCwxMSBAQAogICAgICAgICBpZiAoIXN1cHBvcnRlZC5nZXRMYW5ndWFnZSgpLmVxdWFscyhkZXNpcmVkLmdldExhbmd1YWdlKCkpKSB7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQorICAgICAgICBpZiAoaXNQc2V1ZG9Mb2NhbGUoc3VwcG9ydGVkKSB8fCBpc1BzZXVkb0xvY2FsZShkZXNpcmVkKSkgeworICAgICAgICAgICAgLy8gVGhlIGxvY2FsZXMgYXJlIG5vdCB0aGUgc2FtZSwgYnV0IHRoZSBsYW5ndWFnZXMgYXJlIHRoZSBzYW1lLCBhbmQgb25lIG9mIHRoZSBsb2NhbGVzCisgICAgICAgICAgICAvLyBpcyBhIHBzZXVkby1sb2NhbGUuIFNvIHRoaXMgaXMgbm90IGEgbWF0Y2guCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQogICAgICAgICAvLyBUaGVyZSBpcyBubyBtYXRjaCBpZiB0aGUgdHdvIGxvY2FsZXMgdXNlIGRpZmZlcmVudCBzY3JpcHRzLiBUaGlzIHdpbGwgbW9zdCBpbXBvcmFudGx5CiAgICAgICAgIC8vIHRha2UgY2FyZSBvZiB0cmFkaXRpb25hbCB2cyBzaW1wbGlmaWVkIENoaW5lc2UuCiAgICAgICAgIGZpbmFsIFN0cmluZyBzdXBwb3J0ZWRTY3IgPSBnZXRMaWtlbHlTY3JpcHQoc3VwcG9ydGVkKTsKQEAgLTIzMywyNCArMjQ2LDI2IEBACiAgICAgICAgIHJldHVybiBzdXBwb3J0ZWRTY3IuZXF1YWxzKGRlc2lyZWRTY3IpID8gMSA6IDA7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgZmlyc3QgbWF0Y2ggaW4gdGhlIGxvY2FsZSBsaXN0IGdpdmVuIGFuIHVub3JkZXJlZCBhcnJheSBvZiBzdXBwb3J0ZWQgbG9jYWxlcwotICAgICAqIGluIEJDUDQ3IGZvcm1hdC4KLSAgICAgKgotICAgICAqIElmIHRoZSBsb2NhbGUgbGlzdCBpcyBlbXB0eSwgbnVsbCB3b3VsZCBiZSByZXR1cm5lZC4KLSAgICAgKi8KLSAgICBATnVsbGFibGUKLSAgICBwdWJsaWMgTG9jYWxlIGdldEZpcnN0TWF0Y2goU3RyaW5nW10gc3VwcG9ydGVkTG9jYWxlcykgeworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvY2FsZSBFTl9MQVROID0gTG9jYWxlLmZvckxhbmd1YWdlVGFnKCJlbi1MYXRuIik7CisKKyAgICBwcml2YXRlIExvY2FsZSBjb21wdXRlRmlyc3RNYXRjaChTdHJpbmdbXSBzdXBwb3J0ZWRMb2NhbGVzLCBib29sZWFuIGFzc3VtZUVuZ2xpc2hJc1N1cHBvcnRlZCkgewogICAgICAgICBpZiAobUxpc3QubGVuZ3RoID09IDEpIHsgIC8vIGp1c3Qgb25lIGxvY2FsZSwgcGVyaGFwcyB0aGUgbW9zdCBjb21tb24gc2NlbmFyaW8KICAgICAgICAgICAgIHJldHVybiBtTGlzdFswXTsKICAgICAgICAgfQogICAgICAgICBpZiAobUxpc3QubGVuZ3RoID09IDApIHsgIC8vIGVtcHR5IGxvY2FsZSBsaXN0CiAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgfQotICAgICAgICAvLyBUT0RPOiBGaWd1cmUgb3V0IHdoYXQgdG8gaWYgZW4tWEEgb3IgYXItWEIgYXJlIGluIHRoZSBsb2NhbGUgbGlzdAogICAgICAgICBpbnQgYmVzdEluZGV4ID0gSW50ZWdlci5NQVhfVkFMVUU7Ci0gICAgICAgIGZvciAoU3RyaW5nIHRhZyA6IHN1cHBvcnRlZExvY2FsZXMpIHsKLSAgICAgICAgICAgIGZpbmFsIExvY2FsZSBzdXBwb3J0ZWRMb2NhbGUgPSBMb2NhbGUuZm9yTGFuZ3VhZ2VUYWcodGFnKTsKKyAgICAgICAgZmluYWwgaW50IG51bVN1cHBvcnRlZExvY2FsZXMgPQorICAgICAgICAgICAgICAgIHN1cHBvcnRlZExvY2FsZXMubGVuZ3RoICsgKGFzc3VtZUVuZ2xpc2hJc1N1cHBvcnRlZCA/IDEgOiAwKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1TdXBwb3J0ZWRMb2NhbGVzOyBpKyspIHsKKyAgICAgICAgICAgIGZpbmFsIExvY2FsZSBzdXBwb3J0ZWRMb2NhbGU7CisgICAgICAgICAgICBpZiAoYXNzdW1lRW5nbGlzaElzU3VwcG9ydGVkKSB7CisgICAgICAgICAgICAgICAgLy8gVHJ5IEVuZ2xpc2ggZmlyc3QsIHNvIHdlIGNhbiByZXR1cm4gZWFybHkgaWYgaXQncyBpbiB0aGUgTG9jYWxlTGlzdAorICAgICAgICAgICAgICAgIHN1cHBvcnRlZExvY2FsZSA9IChpID09IDApID8gRU5fTEFUTiA6IExvY2FsZS5mb3JMYW5ndWFnZVRhZyhzdXBwb3J0ZWRMb2NhbGVzW2ktMV0pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzdXBwb3J0ZWRMb2NhbGUgPSBMb2NhbGUuZm9yTGFuZ3VhZ2VUYWcoc3VwcG9ydGVkTG9jYWxlc1tpXSk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBXZSBleHBlY3QgdGhlIGF2ZXJhZ2UgbGVuZ3RoIG9mIGxvY2FsZSBsaXN0cyB1c2VkIGZvciBsb2NhbGUgcmVzb2x1dGlvbiB0byBiZQogICAgICAgICAgICAgLy8gc21hbGxlciB0aGFuIHRocmVlLCBzbyBpdCdzIE9LIHRvIGRvIHRoaXMgYXMgYW4gTyhtbikgYWxnb3JpdGhtLgogICAgICAgICAgICAgZm9yIChpbnQgaWR4ID0gMDsgaWR4IDwgbUxpc3QubGVuZ3RoOyBpZHgrKykgewpAQCAtMjcxLDYgKzI4Niw0NyBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgZmlyc3QgbWF0Y2ggaW4gdGhlIGxvY2FsZSBsaXN0IGdpdmVuIGFuIHVub3JkZXJlZCBhcnJheSBvZiBzdXBwb3J0ZWQgbG9jYWxlcworICAgICAqIGluIEJDUDQ3IGZvcm1hdC4KKyAgICAgKgorICAgICAqIElmIHRoZSBsb2NhbGUgbGlzdCBpcyBlbXB0eSwgbnVsbCB3b3VsZCBiZSByZXR1cm5lZC4KKyAgICAgKi8KKyAgICBATnVsbGFibGUKKyAgICBwdWJsaWMgTG9jYWxlIGdldEZpcnN0TWF0Y2goU3RyaW5nW10gc3VwcG9ydGVkTG9jYWxlcykgeworICAgICAgICByZXR1cm4gY29tcHV0ZUZpcnN0TWF0Y2goc3VwcG9ydGVkTG9jYWxlcywgZmFsc2UgLyogYXNzdW1lIEVuZ2xpc2ggaXMgbm90IHN1cHBvcnRlZCAqLyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2FtZSBhcyBnZXRGaXJzdE1hdGNoKCksIGJ1dCB3aXRoIEVuZ2xpc2ggYXNzdW1lZCB0byBiZSBzdXBwb3J0ZWQsIGV2ZW4gaWYgaXQncyBub3QuCisgICAgICoge0BoaWRlfQorICAgICAqLworICAgIEBOdWxsYWJsZQorICAgIHB1YmxpYyBMb2NhbGUgZ2V0Rmlyc3RNYXRjaFdpdGhFbmdsaXNoU3VwcG9ydGVkKFN0cmluZ1tdIHN1cHBvcnRlZExvY2FsZXMpIHsKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVGaXJzdE1hdGNoKHN1cHBvcnRlZExvY2FsZXMsIHRydWUgLyogYXNzdW1lIEVuZ2xpc2ggaXMgc3VwcG9ydGVkICovKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGFycmF5IG9mIGxvY2FsZSB0YWdzIG9ubHkgY29udGFpbnMgZW1wdHkgbG9jYWxlcyBhbmQgcHNldWRvbG9jYWxlcy4KKyAgICAgKiBBc3N1bWVzIHRoYXQgdGhlcmUgaXMgbm8gcmVwZXRpdGlvbiBpbiB0aGUgaW5wdXQuCisgICAgICoge0BoaWRlfQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1BzZXVkb0xvY2FsZXNPbmx5KFN0cmluZ1tdIHN1cHBvcnRlZExvY2FsZXMpIHsKKyAgICAgICAgaWYgKHN1cHBvcnRlZExvY2FsZXMubGVuZ3RoID4gTlVNX1BTRVVET19MT0NBTEVTICsgMSkgeworICAgICAgICAgICAgLy8gVGhpcyBpcyBmb3Igb3B0aW1pemF0aW9uLiBTaW5jZSB0aGVyZSdzIG5vIHJlcGV0aXRpb24gaW4gdGhlIGlucHV0LCBpZiB3ZSBoYXZlIG1vcmUKKyAgICAgICAgICAgIC8vIHRoYW4gdGhlIG51bWJlciBvZiBwc2V1ZG8tbG9jYWxlcyBwbHVzIG9uZSBmb3IgdGhlIGVtcHR5IHN0cmluZywgaXQncyBndWFyYW50ZWVkCisgICAgICAgICAgICAvLyB0aGF0IHdlIGhhdmUgc29tZSBtZWFuaW5mdWwgbG9jYWxlIGluIHRoZSBsaXN0LCBzbyB0aGUgbGlzdCBpcyBub3QgInByYWN0aWNhbGx5CisgICAgICAgICAgICAvLyBlbXB0eSIuCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChTdHJpbmcgbG9jYWxlIDogc3VwcG9ydGVkTG9jYWxlcykgeworICAgICAgICAgICAgaWYgKCFsb2NhbGUuaXNFbXB0eSgpICYmICFpc1BzZXVkb0xvY2FsZShsb2NhbGUpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwogICAgIHByaXZhdGUgZmluYWwgc3RhdGljIE9iamVjdCBzTG9jayA9IG5ldyBPYmplY3QoKTsKIAogICAgIEBHdWFyZGVkQnkoInNMb2NrIikKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3V0aWwvTG9nLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC91dGlsL0xvZy5qYXZhCmluZGV4IGZlNDE5MzIuLjU0NDQ0NGQgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3V0aWwvTG9nLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdXRpbC9Mb2cuamF2YQpAQCAtMTgsOSArMTgsMTEgQEAKIAogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLm9zLlJ1bnRpbWVJbml0OwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuRmFzdFByaW50V3JpdGVyOworaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuTGluZUJyZWFrQnVmZmVyZWRXcml0ZXI7CiAKIGltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwogaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOworaW1wb3J0IGphdmEuaW8uV3JpdGVyOwogaW1wb3J0IGphdmEubmV0LlVua25vd25Ib3N0RXhjZXB0aW9uOwogCiAvKioKQEAgLTEyNiw3ICsxMjgsNyBAQAogICAgICAqIEBwYXJhbSB0ciBBbiBleGNlcHRpb24gdG8gbG9nCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBpbnQgdihTdHJpbmcgdGFnLCBTdHJpbmcgbXNnLCBUaHJvd2FibGUgdHIpIHsKLSAgICAgICAgcmV0dXJuIHByaW50bG5fbmF0aXZlKExPR19JRF9NQUlOLCBWRVJCT1NFLCB0YWcsIG1zZyArICdcbicgKyBnZXRTdGFja1RyYWNlU3RyaW5nKHRyKSk7CisgICAgICAgIHJldHVybiBwcmludGxucyhMT0dfSURfTUFJTiwgVkVSQk9TRSwgdGFnLCBtc2csIHRyKTsKICAgICB9CiAKICAgICAvKioKQEAgLTE0Nyw3ICsxNDksNyBAQAogICAgICAqIEBwYXJhbSB0ciBBbiBleGNlcHRpb24gdG8gbG9nCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBpbnQgZChTdHJpbmcgdGFnLCBTdHJpbmcgbXNnLCBUaHJvd2FibGUgdHIpIHsKLSAgICAgICAgcmV0dXJuIHByaW50bG5fbmF0aXZlKExPR19JRF9NQUlOLCBERUJVRywgdGFnLCBtc2cgKyAnXG4nICsgZ2V0U3RhY2tUcmFjZVN0cmluZyh0cikpOworICAgICAgICByZXR1cm4gcHJpbnRsbnMoTE9HX0lEX01BSU4sIERFQlVHLCB0YWcsIG1zZywgdHIpOwogICAgIH0KIAogICAgIC8qKgpAQCAtMTY4LDcgKzE3MCw3IEBACiAgICAgICogQHBhcmFtIHRyIEFuIGV4Y2VwdGlvbiB0byBsb2cKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGludCBpKFN0cmluZyB0YWcsIFN0cmluZyBtc2csIFRocm93YWJsZSB0cikgewotICAgICAgICByZXR1cm4gcHJpbnRsbl9uYXRpdmUoTE9HX0lEX01BSU4sIElORk8sIHRhZywgbXNnICsgJ1xuJyArIGdldFN0YWNrVHJhY2VTdHJpbmcodHIpKTsKKyAgICAgICAgcmV0dXJuIHByaW50bG5zKExPR19JRF9NQUlOLCBJTkZPLCB0YWcsIG1zZywgdHIpOwogICAgIH0KIAogICAgIC8qKgpAQCAtMTg5LDcgKzE5MSw3IEBACiAgICAgICogQHBhcmFtIHRyIEFuIGV4Y2VwdGlvbiB0byBsb2cKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGludCB3KFN0cmluZyB0YWcsIFN0cmluZyBtc2csIFRocm93YWJsZSB0cikgewotICAgICAgICByZXR1cm4gcHJpbnRsbl9uYXRpdmUoTE9HX0lEX01BSU4sIFdBUk4sIHRhZywgbXNnICsgJ1xuJyArIGdldFN0YWNrVHJhY2VTdHJpbmcodHIpKTsKKyAgICAgICAgcmV0dXJuIHByaW50bG5zKExPR19JRF9NQUlOLCBXQVJOLCB0YWcsIG1zZywgdHIpOwogICAgIH0KIAogICAgIC8qKgpAQCAtMjE5LDcgKzIyMSw3IEBACiAgICAgICogQHBhcmFtIHRyIEFuIGV4Y2VwdGlvbiB0byBsb2cKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGludCB3KFN0cmluZyB0YWcsIFRocm93YWJsZSB0cikgewotICAgICAgICByZXR1cm4gcHJpbnRsbl9uYXRpdmUoTE9HX0lEX01BSU4sIFdBUk4sIHRhZywgZ2V0U3RhY2tUcmFjZVN0cmluZyh0cikpOworICAgICAgICByZXR1cm4gcHJpbnRsbnMoTE9HX0lEX01BSU4sIFdBUk4sIHRhZywgIiIsIHRyKTsKICAgICB9CiAKICAgICAvKioKQEAgLTI0MCw3ICsyNDIsNyBAQAogICAgICAqIEBwYXJhbSB0ciBBbiBleGNlcHRpb24gdG8gbG9nCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBpbnQgZShTdHJpbmcgdGFnLCBTdHJpbmcgbXNnLCBUaHJvd2FibGUgdHIpIHsKLSAgICAgICAgcmV0dXJuIHByaW50bG5fbmF0aXZlKExPR19JRF9NQUlOLCBFUlJPUiwgdGFnLCBtc2cgKyAnXG4nICsgZ2V0U3RhY2tUcmFjZVN0cmluZyh0cikpOworICAgICAgICByZXR1cm4gcHJpbnRsbnMoTE9HX0lEX01BSU4sIEVSUk9SLCB0YWcsIG1zZywgdHIpOwogICAgIH0KIAogICAgIC8qKgpAQCAtMjkyLDggKzI5NCw3IEBACiAgICAgICAgIC8vIE9ubHkgbWFyayB0aGlzIGFzIEVSUk9SLCBkbyBub3QgdXNlIEFTU0VSVCBzaW5jZSB0aGF0IHNob3VsZCBiZQogICAgICAgICAvLyByZXNlcnZlZCBmb3IgY2FzZXMgd2hlcmUgdGhlIHN5c3RlbSBpcyBndWFyYW50ZWVkIHRvIGFib3J0LgogICAgICAgICAvLyBUaGUgb25UZXJyaWJsZUZhaWx1cmUgY2FsbCBkb2VzIG5vdCBhbHdheXMgY2F1c2UgYSBjcmFzaC4KLSAgICAgICAgaW50IGJ5dGVzID0gcHJpbnRsbl9uYXRpdmUobG9nSWQsIEVSUk9SLCB0YWcsIG1zZyArICdcbicKLSAgICAgICAgICAgICAgICArIGdldFN0YWNrVHJhY2VTdHJpbmcobG9jYWxTdGFjayA/IHdoYXQgOiB0cikpOworICAgICAgICBpbnQgYnl0ZXMgPSBwcmludGxucyhsb2dJZCwgRVJST1IsIHRhZywgbXNnLCBsb2NhbFN0YWNrID8gd2hhdCA6IHRyKTsKICAgICAgICAgc1d0ZkhhbmRsZXIub25UZXJyaWJsZUZhaWx1cmUodGFnLCB3aGF0LCBzeXN0ZW0pOwogICAgICAgICByZXR1cm4gYnl0ZXM7CiAgICAgfQpAQCAtMzY1LDQgKzM2NiwxMDcgQEAKIAogICAgIC8qKiBAaGlkZSAqLyBwdWJsaWMgc3RhdGljIG5hdGl2ZSBpbnQgcHJpbnRsbl9uYXRpdmUoaW50IGJ1ZklELAogICAgICAgICAgICAgaW50IHByaW9yaXR5LCBTdHJpbmcgdGFnLCBTdHJpbmcgbXNnKTsKKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgbWF4aW11bSBwYXlsb2FkIHRoZSBsb2cgZGFlbW9uIGFjY2VwdHMgd2l0aG91dCB0cnVuY2F0aW9uLgorICAgICAqIEByZXR1cm4gTE9HR0VSX0VOVFJZX01BWF9QQVlMT0FELgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBpbnQgbG9nZ2VyX2VudHJ5X21heF9wYXlsb2FkX25hdGl2ZSgpOworCisgICAgLyoqCisgICAgICogSGVscGVyIGZ1bmN0aW9uIGZvciBsb25nIG1lc3NhZ2VzLiBVc2VzIHRoZSBMaW5lQnJlYWtCdWZmZXJlZFdyaXRlciB0byBicmVhaworICAgICAqIHVwIGxvbmcgbWVzc2FnZXMgYW5kIHN0YWNrdHJhY2VzIGFsb25nIG5ld2xpbmVzLCBidXQgdHJpZXMgdG8gd3JpdGUgaW4gbGFyZ2UKKyAgICAgKiBjaHVua3MuIFRoaXMgaXMgdG8gYXZvaWQgdHJ1bmNhdGlvbi4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBpbnQgcHJpbnRsbnMoaW50IGJ1ZklELCBpbnQgcHJpb3JpdHksIFN0cmluZyB0YWcsIFN0cmluZyBtc2csCisgICAgICAgICAgICBUaHJvd2FibGUgdHIpIHsKKyAgICAgICAgSW1tZWRpYXRlTG9nV3JpdGVyIGxvZ1dyaXRlciA9IG5ldyBJbW1lZGlhdGVMb2dXcml0ZXIoYnVmSUQsIHByaW9yaXR5LCB0YWcpOworICAgICAgICAvLyBBY2NlcHRhYmxlIGJ1ZmZlciBzaXplLiBHZXQgdGhlIG5hdGl2ZSBidWZmZXIgc2l6ZSwgc3VidHJhY3QgdHdvIHplcm8gdGVybWluYXRvcnMsCisgICAgICAgIC8vIGFuZCB0aGUgbGVuZ3RoIG9mIHRoZSB0YWcuCisgICAgICAgIC8vIE5vdGU6IHdlIGltcGxpY2l0bHkgYWNjZXB0IHBvc3NpYmxlIHRydW5jYXRpb24gZm9yIE1vZGlmaWVkLVVURjggZGlmZmVyZW5jZXMuIEl0CisgICAgICAgIC8vICAgICAgIGlzIHRvbyBleHBlbnNpdmUgdG8gY29tcHV0ZSB0aGF0IGFoZWFkIG9mIHRpbWUuCisgICAgICAgIGludCBidWZmZXJTaXplID0gTm9QcmVsb2FkSG9sZGVyLkxPR0dFUl9FTlRSWV9NQVhfUEFZTE9BRCAgLy8gQmFzZS4KKyAgICAgICAgICAgICAgICAtIDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUd28gdGVybWluYXRvcnMuCisgICAgICAgICAgICAgICAgLSAodGFnICE9IG51bGwgPyB0YWcubGVuZ3RoKCkgOiAwKSAgICAgICAgICAgICAgICAgLy8gVGFnIGxlbmd0aC4KKyAgICAgICAgICAgICAgICAtIDMyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTb21lIHNsYWNrLgorICAgICAgICAvLyBBdCBsZWFzdCBhc3N1bWUgeW91IGNhbiBwcmludCAqc29tZSogY2hhcmFjdGVycyAodGFnIGlzIG5vdCB0b28gbGFyZ2UpLgorICAgICAgICBidWZmZXJTaXplID0gTWF0aC5tYXgoYnVmZmVyU2l6ZSwgMTAwKTsKKworICAgICAgICBMaW5lQnJlYWtCdWZmZXJlZFdyaXRlciBsYmJ3ID0gbmV3IExpbmVCcmVha0J1ZmZlcmVkV3JpdGVyKGxvZ1dyaXRlciwgYnVmZmVyU2l6ZSk7CisKKyAgICAgICAgbGJidy5wcmludGxuKG1zZyk7CisKKyAgICAgICAgaWYgKHRyICE9IG51bGwpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgdG8gcmVkdWNlIHRoZSBhbW91bnQgb2YgbG9nIHNwZXcgdGhhdCBhcHBzIGRvIGluIHRoZSBub24tZXJyb3IKKyAgICAgICAgICAgIC8vIGNvbmRpdGlvbiBvZiB0aGUgbmV0d29yayBiZWluZyB1bmF2YWlsYWJsZS4KKyAgICAgICAgICAgIFRocm93YWJsZSB0ID0gdHI7CisgICAgICAgICAgICB3aGlsZSAodCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgaWYgKHQgaW5zdGFuY2VvZiBVbmtub3duSG9zdEV4Y2VwdGlvbikgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdCA9IHQuZ2V0Q2F1c2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0ID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICB0ci5wcmludFN0YWNrVHJhY2UobGJidyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBsYmJ3LmZsdXNoKCk7CisKKyAgICAgICAgcmV0dXJuIGxvZ1dyaXRlci5nZXRXcml0dGVuKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogTm9QcmVsb2FkSGVscGVyIGNsYXNzLiBDYWNoZXMgdGhlIExPR0dFUl9FTlRSWV9NQVhfUEFZTE9BRCB2YWx1ZSB0byBhdm9pZAorICAgICAqIGEgSk5JIGNhbGwgZHVyaW5nIGxvZ2dpbmcuCisgICAgICovCisgICAgc3RhdGljIGNsYXNzIE5vUHJlbG9hZEhvbGRlciB7CisgICAgICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IExPR0dFUl9FTlRSWV9NQVhfUEFZTE9BRCA9CisgICAgICAgICAgICAgICAgbG9nZ2VyX2VudHJ5X21heF9wYXlsb2FkX25hdGl2ZSgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEhlbHBlciBjbGFzcyB0byB3cml0ZSB0byB0aGUgbG9nY2F0LiBEaWZmZXJlbnQgZnJvbSBMb2dXcml0ZXIsIHRoaXMgd3JpdGVzCisgICAgICogdGhlIHdob2xlIGdpdmVuIGJ1ZmZlciBhbmQgZG9lcyBub3QgYnJlYWsgYWxvbmcgbmV3bGluZXMuCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgSW1tZWRpYXRlTG9nV3JpdGVyIGV4dGVuZHMgV3JpdGVyIHsKKworICAgICAgICBwcml2YXRlIGludCBidWZJRDsKKyAgICAgICAgcHJpdmF0ZSBpbnQgcHJpb3JpdHk7CisgICAgICAgIHByaXZhdGUgU3RyaW5nIHRhZzsKKworICAgICAgICBwcml2YXRlIGludCB3cml0dGVuID0gMDsKKworICAgICAgICAvKioKKyAgICAgICAgICogQ3JlYXRlIGEgd3JpdGVyIHRoYXQgaW1tZWRpYXRlbHkgd3JpdGVzIHRvIHRoZSBsb2csIHVzaW5nIHRoZSBnaXZlbgorICAgICAgICAgKiBwYXJhbWV0ZXJzLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIEltbWVkaWF0ZUxvZ1dyaXRlcihpbnQgYnVmSUQsIGludCBwcmlvcml0eSwgU3RyaW5nIHRhZykgeworICAgICAgICAgICAgdGhpcy5idWZJRCA9IGJ1ZklEOworICAgICAgICAgICAgdGhpcy5wcmlvcml0eSA9IHByaW9yaXR5OworICAgICAgICAgICAgdGhpcy50YWcgPSB0YWc7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgaW50IGdldFdyaXR0ZW4oKSB7CisgICAgICAgICAgICByZXR1cm4gd3JpdHRlbjsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCB3cml0ZShjaGFyW10gY2J1ZiwgaW50IG9mZiwgaW50IGxlbikgeworICAgICAgICAgICAgLy8gTm90ZTogdXNpbmcgU3RyaW5nIGhlcmUgaGFzIGEgYml0IG9mIG92ZXJoZWFkIGFzIGEgSmF2YSBvYmplY3QgaXMgY3JlYXRlZCwKKyAgICAgICAgICAgIC8vICAgICAgIGJ1dCB1c2luZyB0aGUgY2hhcltdIGRpcmVjdGx5IGlzIG5vdCBlYXNpZXIsIGFzIGl0IG5lZWRzIHRvIGJlIHRyYW5zbGF0ZWQKKyAgICAgICAgICAgIC8vICAgICAgIHRvIGEgQyBjaGFyW10gZm9yIGxvZ2dpbmcuCisgICAgICAgICAgICB3cml0dGVuICs9IHByaW50bG5fbmF0aXZlKGJ1ZklELCBwcmlvcml0eSwgdGFnLCBuZXcgU3RyaW5nKGNidWYsIG9mZiwgbGVuKSk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgZmx1c2goKSB7CisgICAgICAgICAgICAvLyBJZ25vcmVkLgorICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIGNsb3NlKCkgeworICAgICAgICAgICAgLy8gSWdub3JlZC4KKyAgICAgICAgfQorICAgIH0KIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3V0aWwvUGF0aFBhcnNlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdXRpbC9QYXRoUGFyc2VyLmphdmEKaW5kZXggZjE3YTE2Yy4uNzhkNWJjZCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdXRpbC9QYXRoUGFyc2VyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdXRpbC9QYXRoUGFyc2VyLmphdmEKQEAgLTgyLDYgKzgyLDEwIEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAorICAgICAgICBwdWJsaWMgbG9uZyBnZXROYXRpdmVQdHIoKSB7CisgICAgICAgICAgICByZXR1cm4gbU5hdGl2ZVBhdGhEYXRhOworICAgICAgICB9CisKICAgICAgICAgLyoqCiAgICAgICAgICAqIFVwZGF0ZSB0aGUgcGF0aCBkYXRhIHRvIG1hdGNoIHRoZSBzb3VyY2UuCiAgICAgICAgICAqIEJlZm9yZSBjYWxsaW5nIHRoaXMsIG1ha2Ugc3VyZSBjYW5Nb3JwaCh0YXJnZXQsIHNvdXJjZSkgaXMgdHJ1ZS4KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvRHJhZ0V2ZW50LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0RyYWdFdmVudC5qYXZhCmluZGV4IDU5MDNkNGEuLjcxZGIwYjUgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvRHJhZ0V2ZW50LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9EcmFnRXZlbnQuamF2YQpAQCAtMzY0LDIwICszNjQsOSBAQAogICAgICAgICByZXR1cm4gbUNsaXBEZXNjcmlwdGlvbjsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBSZXF1ZXN0cyB0aGUgcGVybWlzc2lvbnMgZm9yIHRoZSBjb250ZW50IFVSSXMgY29udGFpbmVkIGluIHtAbGluayBhbmRyb2lkLmNvbnRlbnQuQ2xpcERhdGF9Ci0gICAgICogb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGV2ZW50LiBXaGljaCBwZXJtaXNzaW9ucyB3aWxsIGJlIGdyYW50ZWQgaXMgZGVmaW5lZCBieSB0aGUgc2V0IG9mCi0gICAgICogZmxhZ3MgcGFzc2VkIHRvIHtAbGluayBWaWV3I3N0YXJ0RHJhZ0FuZERyb3AoQ2xpcERhdGEsIFZpZXcuRHJhZ1NoYWRvd0J1aWxkZXIsIE9iamVjdCwgaW50KX0uCi0gICAgICogUmV0dXJucyB0aGUge0BsaW5rIERyb3BQZXJtaXNzaW9uc30gb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgYnkgdGhlIHJlY2VpdmluZyBhcHAgdG8gcmVsZWFzZQotICAgICAqIHRoZSBwZXJtaXNzaW9ucyBmb3IgdGhlIGNvbnRlbnQgVVJJcyB3aGVuIHRoZXkgYXJlIG5vIGxvbmdlciBuZWVkZWQuCi0gICAgICogVGhpcyBtZXRob2Qgb25seSByZXR1cm5zIHZhbGlkIGRhdGEgaWYgdGhlIGV2ZW50IGFjdGlvbiBpcyB7QGxpbmsgI0FDVElPTl9EUk9QfS4KLSAgICAgKiBAcmV0dXJuIFRoZSBEcm9wUGVybWlzc2lvbnMgb2JqZWN0IHVzZWQgdG8gY29udHJvbCBhY2Nlc3MgdG8gdGhlIGNvbnRlbnQgVVJJcy4KLSAgICAgKi8KLSAgICBwdWJsaWMgRHJvcFBlcm1pc3Npb25zIHJlcXVlc3REcm9wUGVybWlzc2lvbnMoKSB7Ci0gICAgICAgIGlmIChtRHJvcFBlcm1pc3Npb25zID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBuZXcgRHJvcFBlcm1pc3Npb25zKG1Ecm9wUGVybWlzc2lvbnMpOworICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyBJRHJvcFBlcm1pc3Npb25zIGdldERyb3BQZXJtaXNzaW9ucygpIHsKKyAgICAgICAgcmV0dXJuIG1Ecm9wUGVybWlzc2lvbnM7CiAgICAgfQogCiAgICAgLyoqCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0Ryb3BQZXJtaXNzaW9ucy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9Ecm9wUGVybWlzc2lvbnMuamF2YQppbmRleCA3ODA0NjFmLi44Yzk0OGE5IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0Ryb3BQZXJtaXNzaW9ucy5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvRHJvcFBlcm1pc3Npb25zLmphdmEKQEAgLTE2LDExICsxNiwyNyBAQAogCiBwYWNrYWdlIGFuZHJvaWQudmlldzsKIAoraW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKIGltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC52aWV3LklEcm9wUGVybWlzc2lvbnM7CiBpbXBvcnQgZGFsdmlrLnN5c3RlbS5DbG9zZUd1YXJkOwogCiAKKy8qKgorICoge0BsaW5rIERyb3BQZXJtaXNzaW9uc30gY29udHJvbHMgdGhlIGFjY2VzcyBwZXJtaXNzaW9ucyBmb3IgdGhlIGNvbnRlbnQgVVJJcyBhc3NvY2lhdGVkIHdpdGggYQorICoge0BsaW5rIERyYWdFdmVudH0uCisgKiA8cD4KKyAqIFBlcm1pc3Npb24gYXJlIGdyYW50ZWQgd2hlbiB0aGlzIG9iamVjdCBpcyBjcmVhdGVkIGJ5IHtAbGluaworICogYW5kcm9pZC5hcHAuQWN0aXZpdHkjcmVxdWVzdERyb3BQZXJtaXNzaW9ucyhEcmFnRXZlbnQpIEFjdGl2aXR5LnJlcXVlc3REcm9wUGVybWlzc2lvbnN9LgorICogV2hpY2ggcGVybWlzc2lvbnMgYXJlIGdyYW50ZWQgaXMgZGVmaW5lZCBieSB0aGUgc2V0IG9mIGZsYWdzIHBhc3NlZCB0byB7QGxpbmsKKyAqIFZpZXcjc3RhcnREcmFnQW5kRHJvcChhbmRyb2lkLmNvbnRlbnQuQ2xpcERhdGEsIFZpZXcuRHJhZ1NoYWRvd0J1aWxkZXIsIE9iamVjdCwgaW50KQorICogVmlldy5zdGFydERyYWdBbmREcm9wfSBieSB0aGUgYXBwIHRoYXQgc3RhcnRlZCB0aGUgZHJhZyBvcGVyYXRpb24uCisgKiA8cD4KKyAqIFRoZSBsaWZlIGN5Y2xlIG9mIHRoZSBwZXJtaXNzaW9ucyBpcyBib3VuZCB0byB0aGUgYWN0aXZpdHkgdXNlZCB0byBjYWxsIHtAbGluaworICogYW5kcm9pZC5hcHAuQWN0aXZpdHkjcmVxdWVzdERyb3BQZXJtaXNzaW9ucyhEcmFnRXZlbnQpIHJlcXVlc3REcm9wUGVybWlzc2lvbnN9LiBUaGUKKyAqIHBlcm1pc3Npb25zIGFyZSByZXZva2VkIHdoZW4gdGhpcyBhY3Rpdml0eSBpcyBkZXN0cm95ZWQsIG9yIHdoZW4ge0BsaW5rICNyZWxlYXNlKCl9IGlzIGNhbGxlZCwKKyAqIHdoaWNoZXZlciBvY2N1cnMgZmlyc3QuCisgKi8KIHB1YmxpYyBmaW5hbCBjbGFzcyBEcm9wUGVybWlzc2lvbnMgewogCiAgICAgcHJpdmF0ZSBmaW5hbCBJRHJvcFBlcm1pc3Npb25zIG1Ecm9wUGVybWlzc2lvbnM7CkBAIC0yOCwyMSArNDQsNDMgQEAKICAgICBwcml2YXRlIGZpbmFsIENsb3NlR3VhcmQgbUNsb3NlR3VhcmQgPSBDbG9zZUd1YXJkLmdldCgpOwogCiAgICAgLyoqCi0gICAgICogQ3JlYXRlIGEgbmV3IERyb3BQZXJtaXNzaW9ucyBvYmplY3QgdG8gYmUgcGFzc2VkIHRvIHRoZSBjbGllbnQgd2l0aCBhIERyYWdFdmVudC4KLSAgICAgKgorICAgICAqIENyZWF0ZSBhIG5ldyB7QGxpbmsgRHJvcFBlcm1pc3Npb25zfSBvYmplY3QgdG8gY29udHJvbCB0aGUgYWNjZXNzIHBlcm1pc3Npb25zIGZvciBjb250ZW50CisgICAgICogVVJJcyBhc3NvY2lhdGVkIHdpdGgge0BsaW5rIERyYWdFdmVudH0uCisgICAgICogQHBhcmFtIGRyYWdFdmVudCBEcmFnIGV2ZW50CisgICAgICogQHJldHVybiB7QGxpbmsgRHJvcFBlcm1pc3Npb25zfSBvYmplY3Qgb3IgbnVsbCBpZiB0aGVyZSBhcmUgbm8gY29udGVudCBVUklzIGFzc29jaWF0ZWQgd2l0aAorICAgICAqIHRoZSB7QGxpbmsgRHJhZ0V2ZW50fS4KICAgICAgKiBAaGlkZQogICAgICAqLwotICAgIERyb3BQZXJtaXNzaW9ucyhJRHJvcFBlcm1pc3Npb25zIGRyb3BQZXJtaXNzaW9ucykgewotICAgICAgICBtRHJvcFBlcm1pc3Npb25zID0gZHJvcFBlcm1pc3Npb25zOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgbURyb3BQZXJtaXNzaW9ucy50YWtlKCk7Ci0gICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgcHVibGljIHN0YXRpYyBEcm9wUGVybWlzc2lvbnMgb2J0YWluKERyYWdFdmVudCBkcmFnRXZlbnQpIHsKKyAgICAgICAgaWYgKGRyYWdFdmVudC5nZXREcm9wUGVybWlzc2lvbnMoKSA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgfQotICAgICAgICBtQ2xvc2VHdWFyZC5vcGVuKCJyZWxlYXNlIik7CisgICAgICAgIHJldHVybiBuZXcgRHJvcFBlcm1pc3Npb25zKGRyYWdFdmVudC5nZXREcm9wUGVybWlzc2lvbnMoKSk7CisgICAgfQorCisgICAgLyoqIEBoaWRlICovCisgICAgcHJpdmF0ZSBEcm9wUGVybWlzc2lvbnMoSURyb3BQZXJtaXNzaW9ucyBkcm9wUGVybWlzc2lvbnMpIHsKKyAgICAgICAgbURyb3BQZXJtaXNzaW9ucyA9IGRyb3BQZXJtaXNzaW9uczsKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBSZXZva2UgcGVybWlzc2lvbnMgdGFrZW4gYnkge0BsaW5rIERyYWdFdmVudCNyZXF1ZXN0RHJvcFBlcm1pc3Npb25zKCl9LgorICAgICAqIFRha2UgdGhlIHBlcm1pc3Npb25zIGFuZCBiaW5kIHRoZWlyIGxpZmV0aW1lIHRvIHRoZSBhY3Rpdml0eS4KKyAgICAgKiBAcGFyYW0gYWN0aXZpdHlUb2tlbiBCaW5kZXIgcG9pbnRpbmcgdG8gYW4gQWN0aXZpdHkgaW5zdGFuY2UgdG8gYmluZCB0aGUgbGlmZXRpbWUgdG8uCisgICAgICogQHJldHVybiBUcnVlIGlmIHBlcm1pc3Npb25zIGFyZSBzdWNjZXNzZnVsbHkgdGFrZW4uCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiB0YWtlKElCaW5kZXIgYWN0aXZpdHlUb2tlbikgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgbURyb3BQZXJtaXNzaW9ucy50YWtlKGFjdGl2aXR5VG9rZW4pOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIG1DbG9zZUd1YXJkLm9wZW4oInJlbGVhc2UiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV2b2tlIHBlcm1pc3Npb25zIGV4cGxpY2l0bHkuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcmVsZWFzZSgpIHsKICAgICAgICAgdHJ5IHsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvSURvY2tEaXZpZGVyVmlzaWJpbGl0eUxpc3RlbmVyLmFpZGwgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0lEb2NrZWRTdGFja0xpc3RlbmVyLmFpZGwKc2ltaWxhcml0eSBpbmRleCA3MCUKcmVuYW1lIGZyb20gY29yZS9qYXZhL2FuZHJvaWQvdmlldy9JRG9ja0RpdmlkZXJWaXNpYmlsaXR5TGlzdGVuZXIuYWlkbApyZW5hbWUgdG8gY29yZS9qYXZhL2FuZHJvaWQvdmlldy9JRG9ja2VkU3RhY2tMaXN0ZW5lci5haWRsCmluZGV4IGE3ZDVjZGEuLjc3ZmE3ZTIgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvSURvY2tEaXZpZGVyVmlzaWJpbGl0eUxpc3RlbmVyLmFpZGwKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9JRG9ja2VkU3RhY2tMaXN0ZW5lci5haWRsCkBAIC0yMiw2ICsyMiwxNSBAQAogICAqCiAgICogQGhpZGUKICAgKi8KLW9uZXdheSBpbnRlcmZhY2UgSURvY2tEaXZpZGVyVmlzaWJpbGl0eUxpc3RlbmVyIHsKLSAgICB2b2lkIG9uRG9ja0RpdmlkZXJWaXNpYmlsaXR5Q2hhbmdlZChib29sZWFuIHZpc2libGUpOworb25ld2F5IGludGVyZmFjZSBJRG9ja2VkU3RhY2tMaXN0ZW5lciB7CisKKyAgICAvKioKKyAgICAgKiBXaWxsIGZpcmUgd2hlbiBhbiBhcHAgaXMgc2hvd24gaW4gc2lkZSBieSBzaWRlIG1vZGUgYW5kIGEgZGl2aWRlciBzaG91bGQgYmUgc2hvd24uCisgICAgICovCisgICAgdm9pZCBvbkRpdmlkZXJWaXNpYmlsaXR5Q2hhbmdlZChib29sZWFuIHZpc2libGUpOworCisgICAgLyoqCisgICAgICogQ2FsbGVkIHdoZW4gdGhlIGRvY2tlZCBzdGFjayBnZXRzIGNyZWF0ZWQgb3IgcmVtb3ZlZC4KKyAgICAgKi8KKyAgICB2b2lkIG9uRG9ja2VkU3RhY2tFeGlzdHNDaGFuZ2VkKGJvb2xlYW4gZXhpc3RzKTsKIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvSVdpbmRvd01hbmFnZXIuYWlkbCBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvSVdpbmRvd01hbmFnZXIuYWlkbAppbmRleCA3YTM3OWQ1MC4uODRkMzEyZCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9JV2luZG93TWFuYWdlci5haWRsCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvSVdpbmRvd01hbmFnZXIuYWlkbApAQCAtMjksNyArMjksNyBAQAogaW1wb3J0IGFuZHJvaWQub3MuSVJlbW90ZUNhbGxiYWNrOwogaW1wb3J0IGFuZHJvaWQudmlldy5JQXBwbGljYXRpb25Ub2tlbjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuSUFwcFRyYW5zaXRpb25BbmltYXRpb25TcGVjc0Z1dHVyZTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuSURvY2tEaXZpZGVyVmlzaWJpbGl0eUxpc3RlbmVyOworaW1wb3J0IGFuZHJvaWQudmlldy5JRG9ja2VkU3RhY2tMaXN0ZW5lcjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuSU9uS2V5Z3VhcmRFeGl0UmVzdWx0OwogaW1wb3J0IGFuZHJvaWQudmlldy5JUm90YXRpb25XYXRjaGVyOwogaW1wb3J0IGFuZHJvaWQudmlldy5JV2luZG93U2Vzc2lvbjsKQEAgLTEwMSwxMSArMTAxLDE0IEBACiAgICAgICogICAgICAgICAgICAgICAgICAgdGhlIHRhc2sgZG9lc24ndCBleGlzdCB5ZXQuCiAgICAgICogQHBhcmFtIGNvbmZpZ3VyYXRpb24gQ29uZmlndXJhdGlvbiB0aGF0IGlzIGJlaW5nIHVzZWQgd2l0aCB0aGlzIHRhc2suCiAgICAgICogQHBhcmFtIGNyb3BXaW5kb3dzVG9TdGFjayBUcnVlIGlmIHRoZSBhcHAgd2luZG93cyBzaG91bGQgYmUgY3JvcHBlZCB0byB0aGUgc3RhY2sgYm91bmRzLgorICAgICAqIEBwYXJhbSBhbHdheXNGb2N1c2FibGUgVHJ1ZSBpZiB0aGUgYXBwIHdpbmRvd3MgYXJlIGFsd2F5cyBmb2N1c2FibGUgcmVnYXJkbGVzcyBvZiB0aGUgc3RhY2sKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHRoZXkgYXJlIGluLgogICAgICAqLwogICAgIHZvaWQgYWRkQXBwVG9rZW4oaW50IGFkZFBvcywgSUFwcGxpY2F0aW9uVG9rZW4gdG9rZW4sIGludCB0YXNrSWQsIGludCBzdGFja0lkLAogICAgICAgICAgICAgaW50IHJlcXVlc3RlZE9yaWVudGF0aW9uLCBib29sZWFuIGZ1bGxzY3JlZW4sIGJvb2xlYW4gc2hvd1doZW5Mb2NrZWQsIGludCB1c2VySWQsCiAgICAgICAgICAgICBpbnQgY29uZmlnQ2hhbmdlcywgYm9vbGVhbiB2b2ljZUludGVyYWN0aW9uLCBib29sZWFuIGxhdW5jaFRhc2tCZWhpbmQsCi0gICAgICAgICAgICBpbiBSZWN0IHRhc2tCb3VuZHMsIGluIENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiwgYm9vbGVhbiBjcm9wV2luZG93c1RvU3RhY2spOworICAgICAgICAgICAgaW4gUmVjdCB0YXNrQm91bmRzLCBpbiBDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24sIGJvb2xlYW4gY3JvcFdpbmRvd3NUb1N0YWNrLAorICAgICAgICAgICAgYm9vbGVhbiBhbHdheXNGb2N1c2FibGUpOwogICAgIC8qKgogICAgICAqCiAgICAgICogQHBhcmFtIHRva2VuIFRoZSB0b2tlbiB3ZSBhcmUgYWRkaW5nIHRvIHRoZSBpbnB1dCB0YXNrIElkLgpAQCAtMzU0LDcgKzM1NywxNyBAQAogICAgIHZvaWQgc2V0RG9ja2VkU3RhY2tSZXNpemluZyhib29sZWFuIHJlc2l6aW5nKTsKIAogICAgIC8qKgotICAgICAqIFJlZ2lzdGVycyBhIGxpc3RlbmVyIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgZG9jayBkaXZpZGVyIGNoYW5nZXMgaXRzIHZpc2liaWxpdHkuCisgICAgICogUmVnaXN0ZXJzIGEgbGlzdGVuZXIgdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBkb2NrIGRpdmlkZXIgY2hhbmdlcyBpdHMgdmlzaWJpbGl0eSBvciB3aGVuCisgICAgICogdGhlIGRvY2tlZCBzdGFjayBnZXRzIGFkZGVkL3JlbW92ZWQuCiAgICAgICovCi0gICAgdm9pZCByZWdpc3RlckRvY2tEaXZpZGVyVmlzaWJpbGl0eUxpc3RlbmVyKElEb2NrRGl2aWRlclZpc2liaWxpdHlMaXN0ZW5lciBsaXN0ZW5lcik7CisgICAgdm9pZCByZWdpc3RlckRvY2tlZFN0YWNrTGlzdGVuZXIoSURvY2tlZFN0YWNrTGlzdGVuZXIgbGlzdGVuZXIpOworCisgICAgLyoqCisgICAgICogVXBkYXRlcyB0aGUgZGltIGxheWVyIHVzZWQgd2hpbGUgcmVzaXppbmcuCisgICAgICoKKyAgICAgKiBAcGFyYW0gdmlzaWJsZSBXaGV0aGVyIHRoZSBkaW0gbGF5ZXIgc2hvdWxkIGJlIHZpc2libGUuCisgICAgICogQHBhcmFtIHRhcmdldFN0YWNrSWQgVGhlIGlkIG9mIHRoZSB0YXNrIHN0YWNrIHRoZSBkaW0gbGF5ZXIgc2hvdWxkIGJlIHBsYWNlZCBvbi4KKyAgICAgKiBAcGFyYW0gYWxwaGEgVGhlIHRyYW5zbHVjZW5jeSBvZiB0aGUgZGltIGxheWVyLCBiZXR3ZWVuIDAgYW5kIDEuCisgICAgICovCisgICAgdm9pZCBzZXRSZXNpemVEaW1MYXllcihib29sZWFuIHZpc2libGUsIGludCB0YXJnZXRTdGFja0lkLCBmbG9hdCBhbHBoYSk7CiB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0xheW91dEluZmxhdGVyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0xheW91dEluZmxhdGVyLmphdmEKaW5kZXggYWEyOTYzNi4uOTE0YmQ1NiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9MYXlvdXRJbmZsYXRlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvTGF5b3V0SW5mbGF0ZXIuamF2YQpAQCAtNTU1LDYgKzU1NSwyNiBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQ2xhc3NMb2FkZXIgQk9PVF9DTEFTU19MT0FERVIgPSBMYXlvdXRJbmZsYXRlci5jbGFzcy5nZXRDbGFzc0xvYWRlcigpOworCisgICAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIHZlcmlmeUNsYXNzTG9hZGVyKENvbnN0cnVjdG9yPD8gZXh0ZW5kcyBWaWV3PiBjb25zdHJ1Y3RvcikgeworICAgICAgICBmaW5hbCBDbGFzc0xvYWRlciBjb25zdHJ1Y3RvckxvYWRlciA9IGNvbnN0cnVjdG9yLmdldERlY2xhcmluZ0NsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKTsKKyAgICAgICAgaWYgKGNvbnN0cnVjdG9yTG9hZGVyID09IEJPT1RfQ0xBU1NfTE9BREVSKSB7CisgICAgICAgICAgICAvLyBmYXN0IHBhdGggZm9yIGJvb3QgY2xhc3MgbG9hZGVyIChtb3N0IGNvbW1vbiBjYXNlPykgLSBhbHdheXMgb2sKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIC8vIGluIGFsbCBub3JtYWwgY2FzZXMgKG5vIGR5bmFtaWMgY29kZSBsb2FkaW5nKSwgd2Ugd2lsbCBleGl0IHRoZSBmb2xsb3dpbmcgbG9vcCBvbiB0aGUKKyAgICAgICAgLy8gZmlyc3QgaXRlcmF0aW9uIChpLmUuIHdoZW4gdGhlIGRlY2xhcmluZyBjbGFzc2xvYWRlciBpcyB0aGUgY29udGV4dHMgY2xhc3MgbG9hZGVyKS4KKyAgICAgICAgQ2xhc3NMb2FkZXIgY2wgPSBtQ29udGV4dC5nZXRDbGFzc0xvYWRlcigpOworICAgICAgICBkbyB7CisgICAgICAgICAgICBpZiAoY29uc3RydWN0b3JMb2FkZXIgPT0gY2wpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNsID0gY2wuZ2V0UGFyZW50KCk7CisgICAgICAgIH0gd2hpbGUgKGNsICE9IG51bGwpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCiAgICAgLyoqCiAgICAgICogTG93LWxldmVsIGZ1bmN0aW9uIGZvciBpbnN0YW50aWF0aW5nIGEgdmlldyBieSBuYW1lLiBUaGlzIGF0dGVtcHRzIHRvCiAgICAgICogaW5zdGFudGlhdGUgYSB2aWV3IGNsYXNzIG9mIHRoZSBnaXZlbiA8dmFyPm5hbWU8L3Zhcj4gZm91bmQgaW4gdGhpcwpAQCAtNTc1LDYgKzU5NSwxMCBAQAogICAgIHB1YmxpYyBmaW5hbCBWaWV3IGNyZWF0ZVZpZXcoU3RyaW5nIG5hbWUsIFN0cmluZyBwcmVmaXgsIEF0dHJpYnV0ZVNldCBhdHRycykKICAgICAgICAgICAgIHRocm93cyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uLCBJbmZsYXRlRXhjZXB0aW9uIHsKICAgICAgICAgQ29uc3RydWN0b3I8PyBleHRlbmRzIFZpZXc+IGNvbnN0cnVjdG9yID0gc0NvbnN0cnVjdG9yTWFwLmdldChuYW1lKTsKKyAgICAgICAgaWYgKGNvbnN0cnVjdG9yICE9IG51bGwgJiYgIXZlcmlmeUNsYXNzTG9hZGVyKGNvbnN0cnVjdG9yKSkgeworICAgICAgICAgICAgY29uc3RydWN0b3IgPSBudWxsOworICAgICAgICAgICAgc0NvbnN0cnVjdG9yTWFwLnJlbW92ZShuYW1lKTsKKyAgICAgICAgfQogICAgICAgICBDbGFzczw/IGV4dGVuZHMgVmlldz4gY2xhenogPSBudWxsOwogCiAgICAgICAgIHRyeSB7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L01vdGlvbkV2ZW50LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L01vdGlvbkV2ZW50LmphdmEKaW5kZXggMDE5NWRlYy4uN2E1NDRiOCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9Nb3Rpb25FdmVudC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvTW90aW9uRXZlbnQuamF2YQpAQCAtOTc3LDYgKzk3NywzNyBAQAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFYSVNfU0NST0xMID0gMjY7CiAKICAgICAvKioKKyAgICAgKiBBeGlzIGNvbnN0YW50OiBUaGUgbW92ZW1lbnQgb2YgeCBwb3NpdGlvbiBvZiBhIG1vdGlvbiBldmVudC4KKyAgICAgKiA8cD4KKyAgICAgKiA8dWw+CisgICAgICogPGxpPkZvciBhIG1vdXNlLCByZXBvcnRzIGEgZGlmZmVyZW5jZSBvZiB4IHBvc2l0aW9uIGJldHdlZW4gdGhlIHByZXZpb3VzIHBvc2l0aW9uLgorICAgICAqIFRoaXMgaXMgdXNlZnVsIHdoZW4gcG9pbnRlciBpcyBjYXB0dXJlZCwgaW4gdGhhdCBjYXNlIHRoZSBtb3VzZSBwb2ludGVyIGRvZXNuJ3QgY2hhbmdlCisgICAgICogdGhlIGxvY2F0aW9uIGJ1dCB0aGlzIGF4aXMgcmVwb3J0cyB0aGUgZGlmZmVyZW5jZSB3aGljaCBhbGxvd3MgdGhlIGFwcCB0byBzZWUKKyAgICAgKiBob3cgdGhlIG1vdXNlIGlzIG1vdmVkLgorICAgICAqIDwvdWw+CisgICAgICogPC9wPgorICAgICAqCisgICAgICogQHNlZSAjZ2V0QXhpc1ZhbHVlKGludCwgaW50KQorICAgICAqIEBzZWUgI2dldEhpc3RvcmljYWxBeGlzVmFsdWUoaW50LCBpbnQsIGludCkKKyAgICAgKiBAc2VlIE1vdGlvbkV2ZW50LlBvaW50ZXJDb29yZHMjZ2V0QXhpc1ZhbHVlKGludCwgaW50KQorICAgICAqIEBzZWUgSW5wdXREZXZpY2UjZ2V0TW90aW9uUmFuZ2UKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBWElTX1JFTEFUSVZFX1ggPSAyNzsKKworICAgIC8qKgorICAgICAqIEF4aXMgY29uc3RhbnQ6IFRoZSBtb3ZlbWVudCBvZiB5IHBvc2l0aW9uIG9mIGEgbW90aW9uIGV2ZW50LgorICAgICAqIDxwPgorICAgICAqIFRoaXMgaXMgc2ltaWxhciB0byB7QGxpbmsgI0FYSVNfUkVMQVRJVkVfWH0gYnV0IGZvciB5LWF4aXMuCisgICAgICogPC9wPgorICAgICAqCisgICAgICogQHNlZSAjZ2V0QXhpc1ZhbHVlKGludCwgaW50KQorICAgICAqIEBzZWUgI2dldEhpc3RvcmljYWxBeGlzVmFsdWUoaW50LCBpbnQsIGludCkKKyAgICAgKiBAc2VlIE1vdGlvbkV2ZW50LlBvaW50ZXJDb29yZHMjZ2V0QXhpc1ZhbHVlKGludCwgaW50KQorICAgICAqIEBzZWUgSW5wdXREZXZpY2UjZ2V0TW90aW9uUmFuZ2UKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBWElTX1JFTEFUSVZFX1kgPSAyODsKKworICAgIC8qKgogICAgICAqIEF4aXMgY29uc3RhbnQ6IEdlbmVyaWMgMSBheGlzIG9mIGEgbW90aW9uIGV2ZW50LgogICAgICAqIFRoZSBpbnRlcnByZXRhdGlvbiBvZiBhIGdlbmVyaWMgYXhpcyBpcyBkZXZpY2Utc3BlY2lmaWMuCiAgICAgICoKQEAgLTExODcsNiArMTIxOCw4IEBACiAgICAgICAgIG5hbWVzLmFwcGVuZChBWElTX0RJU1RBTkNFLCAiQVhJU19ESVNUQU5DRSIpOwogICAgICAgICBuYW1lcy5hcHBlbmQoQVhJU19USUxULCAiQVhJU19USUxUIik7CiAgICAgICAgIG5hbWVzLmFwcGVuZChBWElTX1NDUk9MTCwgIkFYSVNfU0NST0xMIik7CisgICAgICAgIG5hbWVzLmFwcGVuZChBWElTX1JFTEFUSVZFX1gsICJBWElTX1JFQUxUSVZFX1giKTsKKyAgICAgICAgbmFtZXMuYXBwZW5kKEFYSVNfUkVMQVRJVkVfWSwgIkFYSVNfUkVBTFRJVkVfWSIpOwogICAgICAgICBuYW1lcy5hcHBlbmQoQVhJU19HRU5FUklDXzEsICJBWElTX0dFTkVSSUNfMSIpOwogICAgICAgICBuYW1lcy5hcHBlbmQoQVhJU19HRU5FUklDXzIsICJBWElTX0dFTkVSSUNfMiIpOwogICAgICAgICBuYW1lcy5hcHBlbmQoQVhJU19HRU5FUklDXzMsICJBWElTX0dFTkVSSUNfMyIpOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9TdXJmYWNlLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1N1cmZhY2UuamF2YQppbmRleCAzOTQ2NjBmLi5lZjUwZmRjIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1N1cmZhY2UuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1N1cmZhY2UuamF2YQpAQCAtNTcsNiArNTcsNyBAQAogICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBpbnQgbmF0aXZlR2V0SGVpZ2h0KGxvbmcgbmF0aXZlT2JqZWN0KTsKIAogICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBsb25nIG5hdGl2ZUdldE5leHRGcmFtZU51bWJlcihsb25nIG5hdGl2ZU9iamVjdCk7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGludCBuYXRpdmVTZXRTY2FsaW5nTW9kZShsb25nIG5hdGl2ZU9iamVjdCwgaW50IHNjYWxpbmdNb2RlKTsKIAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUGFyY2VsYWJsZS5DcmVhdG9yPFN1cmZhY2U+IENSRUFUT1IgPQogICAgICAgICAgICAgbmV3IFBhcmNlbGFibGUuQ3JlYXRvcjxTdXJmYWNlPigpIHsKQEAgLTk1LDYgKzk2LDIxIEBACiAgICAgcHJpdmF0ZSBId3VpQ29udGV4dCBtSHd1aUNvbnRleHQ7CiAKICAgICAvKiogQGhpZGUgKi8KKyAgICBAUmV0ZW50aW9uKFJldGVudGlvblBvbGljeS5TT1VSQ0UpCisgICAgQEludERlZih7U0NBTElOR19NT0RFX0ZSRUVaRSwgU0NBTElOR19NT0RFX1NDQUxFX1RPX1dJTkRPVywKKyAgICAgICAgICAgICAgICAgICAgU0NBTElOR19NT0RFX1NDQUxFX0NST1AsIFNDQUxJTkdfTU9ERV9OT19TQ0FMRV9DUk9QfSkKKyAgICBwdWJsaWMgQGludGVyZmFjZSBTY2FsaW5nTW9kZSB7fQorICAgIC8vIEZyb20gc3lzdGVtL3dpbmRvdy5oCisgICAgLyoqIEBoaWRlICovCisgICAgc3RhdGljIGZpbmFsIGludCBTQ0FMSU5HX01PREVfRlJFRVpFID0gMDsKKyAgICAvKiogQGhpZGUgKi8KKyAgICBzdGF0aWMgZmluYWwgaW50IFNDQUxJTkdfTU9ERV9TQ0FMRV9UT19XSU5ET1cgPSAxOworICAgIC8qKiBAaGlkZSAqLworICAgIHN0YXRpYyBmaW5hbCBpbnQgU0NBTElOR19NT0RFX1NDQUxFX0NST1AgPSAyOworICAgIC8qKiBAaGlkZSAqLworICAgIHN0YXRpYyBmaW5hbCBpbnQgU0NBTElOR19NT0RFX05PX1NDQUxFX0NST1AgPSAzOworCisgICAgLyoqIEBoaWRlICovCiAgICAgQEludERlZih7Uk9UQVRJT05fMCwgUk9UQVRJT05fOTAsIFJPVEFUSU9OXzE4MCwgUk9UQVRJT05fMjcwfSkKICAgICBAUmV0ZW50aW9uKFJldGVudGlvblBvbGljeS5TT1VSQ0UpCiAgICAgcHVibGljIEBpbnRlcmZhY2UgUm90YXRpb24ge30KQEAgLTUwMCw2ICs1MTYsMjAgQEAKICAgICB9CiAKICAgICAvKioKKyAgICAgKiBTZXQgdGhlIHNjYWxpbmcgbW9kZSB0byBiZSB1c2VkIGZvciB0aGlzIHN1cmZhY2VzIGJ1ZmZlcnMKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHZvaWQgc2V0U2NhbGluZ01vZGUoQFNjYWxpbmdNb2RlIGludCBzY2FsaW5nTW9kZSkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CisgICAgICAgICAgICBjaGVja05vdFJlbGVhc2VkTG9ja2VkKCk7CisgICAgICAgICAgICBpbnQgZXJyID0gbmF0aXZlU2V0U2NhbGluZ01vZGUobU5hdGl2ZU9iamVjdCwgc2NhbGluZ01vZGUpOworICAgICAgICAgICAgaWYgKGVyciAhPSAwKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCBzY2FsaW5nIG1vZGU6ICIgKyBzY2FsaW5nTW9kZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKICAgICAgKiBFeGNlcHRpb24gdGhyb3duIHdoZW4gYSBDYW52YXMgY291bGRuJ3QgYmUgbG9ja2VkIHdpdGgge0BsaW5rIFN1cmZhY2UjbG9ja0NhbnZhc30sIG9yCiAgICAgICogd2hlbiBhIFN1cmZhY2VUZXh0dXJlIGNvdWxkIG5vdCBzdWNjZXNzZnVsbHkgYmUgYWxsb2NhdGVkLgogICAgICAqLwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9TdXJmYWNlVmlldy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9TdXJmYWNlVmlldy5qYXZhCmluZGV4IDU4OWMwZGMuLmY0ZmE5ODAgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvU3VyZmFjZVZpZXcuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1N1cmZhY2VWaWV3LmphdmEKQEAgLTU3OCw4ICs1NzgsMTkgQEAKICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgIG1TdXJmYWNlLnRyYW5zZmVyRnJvbShtTmV3U3VyZmFjZSk7Ci0KICAgICAgICAgICAgICAgICAgICAgaWYgKHZpc2libGUgJiYgbVN1cmZhY2UuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBzZXQgU0NBTElOR19NT0RFX05PX1NDQUxFX0NST1AgdG8gYWxsb3cgdGhlIFdpbmRvd01hbmFnZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIHVwZGF0ZSBvdXIgU3VyZmFjZSBjcm9wIHdpdGhvdXQgcmVxdWlyaW5nIGEgbmV3IGJ1ZmZlciBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAvLyB1cy4gSW4gdGhlIGRlZmF1bHQgbW9kZSBvZiBTQ0FMSU5HX01PREVfRlJFRVpFLCBzdXJmYWNlIGdlb21ldHJ5CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdGF0ZSAod2hpY2ggaW5jbHVkZXMgY3JvcCkgaXMgb25seSBhcHBsaWVkIHdoZW4gYSBidWZmZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpdGggYXBwcm9wcmlhdGUgZ2VvbWV0cnkgaXMgYXZhaWxhYmxlLiBEdXJpbmcgZHJhZyByZXNpemUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0IGlzIHF1aXRlIGZyZXF1ZW50IHRoYXQgYSBtYXRjaGluZyBidWZmZXIgd2lsbCBub3QgYmUgYXZhaWxhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAoYmVjYXVzZSB3ZSBhcmUgY29uc3RhbnRseSBiZWluZyByZXNpemVkIGFuZCBoYXZlIGZhbGxlbiBiZWhpbmQpLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gSG93ZXZlciBpbiBzdWNoIHNpdHVhdGlvbnMgdGhlIFdpbmRvd01hbmFnZXIgc3RpbGwgbmVlZHMgdG8gYmUgYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gdXBkYXRlIG91ciBjcm9wIHRvIGVuc3VyZSB3ZSBzdGF5IHdpdGhpbiB0aGUgYm91bmRzIG9mIHRoZSBjb250YWluaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aW5kb3cuCisgICAgICAgICAgICAgICAgICAgICAgICBtU3VyZmFjZS5zZXRTY2FsaW5nTW9kZShTdXJmYWNlLlNDQUxJTkdfTU9ERV9OT19TQ0FMRV9DUk9QKTsKKwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtU3VyZmFjZUNyZWF0ZWQgJiYgKHN1cmZhY2VDaGFuZ2VkIHx8IHZpc2libGVDaGFuZ2VkKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TdXJmYWNlQ3JlYXRlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUlzQ3JlYXRpbmcgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9UZXh0dXJlVmlldy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9UZXh0dXJlVmlldy5qYXZhCmluZGV4IDZiNjBiZTkuLjFiZTQ4MTAgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvVGV4dHVyZVZpZXcuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1RleHR1cmVWaWV3LmphdmEKQEAgLTI5Nyw3ICsyOTcsNyBAQAogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgc2V0Rm9yZWdyb3VuZChEcmF3YWJsZSBmb3JlZ3JvdW5kKSB7Ci0gICAgICAgIGlmIChmb3JlZ3JvdW5kICE9IG51bGwpIHsKKyAgICAgICAgaWYgKGZvcmVncm91bmQgIT0gbnVsbCAmJiAhc1RleHR1cmVWaWV3SWdub3Jlc0RyYXdhYmxlU2V0dGVycykgewogICAgICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgICAgICAiVGV4dHVyZVZpZXcgZG9lc24ndCBzdXBwb3J0IGRpc3BsYXlpbmcgYSBmb3JlZ3JvdW5kIGRyYXdhYmxlIik7CiAgICAgICAgIH0KQEAgLTMwNSw3ICszMDUsNyBAQAogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgc2V0QmFja2dyb3VuZERyYXdhYmxlKERyYXdhYmxlIGJhY2tncm91bmQpIHsKLSAgICAgICAgaWYgKGJhY2tncm91bmQgIT0gbnVsbCkgeworICAgICAgICBpZiAoYmFja2dyb3VuZCAhPSBudWxsICYmICFzVGV4dHVyZVZpZXdJZ25vcmVzRHJhd2FibGVTZXR0ZXJzKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oCiAgICAgICAgICAgICAgICAgICAgICJUZXh0dXJlVmlldyBkb2Vzbid0IHN1cHBvcnQgZGlzcGxheWluZyBhIGJhY2tncm91bmQgZHJhd2FibGUiKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9WaWV3LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1ZpZXcuamF2YQppbmRleCBhZmE2Yzc4Li4zYTFlOWFiIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1ZpZXcuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1ZpZXcuamF2YQpAQCAtODEyLDYgKzgxMiwxMiBAQAogICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gc0xheW91dFBhcmFtc0Fsd2F5c0NoYW5nZWQgPSBmYWxzZTsKIAogICAgIC8qKgorICAgICAqIEFsbG93IHNldEZvcmVncm91bmQvc2V0QmFja2dyb3VuZCB0byBiZSBjYWxsZWQgKGFuZCBpZ25vcmVkKSBvbiBhIHRleHR1cmV2aWV3LAorICAgICAqIHdpdGhvdXQgdGhyb3dpbmcKKyAgICAgKi8KKyAgICBzdGF0aWMgYm9vbGVhbiBzVGV4dHVyZVZpZXdJZ25vcmVzRHJhd2FibGVTZXR0ZXJzID0gZmFsc2U7CisKKyAgICAvKioKICAgICAgKiBUaGlzIHZpZXcgZG9lcyBub3Qgd2FudCBrZXlzdHJva2VzLiBVc2Ugd2l0aCBUQUtFU19GT0NVU19NQVNLIHdoZW4KICAgICAgKiBjYWxsaW5nIHNldEZsYWdzLgogICAgICAqLwpAQCAtMzk4NCw2ICszOTkwLDEwIEBACiAgICAgICAgICAgICAvLyB3b3JrLiBQYXJ0aWFsIGxheW91dCBicmVha3MgdGhpcyBhc3N1bXB0aW9uLgogICAgICAgICAgICAgc0xheW91dFBhcmFtc0Fsd2F5c0NoYW5nZWQgPSB0YXJnZXRTZGtWZXJzaW9uIDw9IE07CiAKKyAgICAgICAgICAgIC8vIFByaW9yIHRvIE4sIFRleHR1cmVWaWV3IHdvdWxkIHNpbGVudGx5IGlnbm9yZSBjYWxscyB0byBzZXRCYWNrZ3JvdW5kL3NldEZvcmVncm91bmQuCisgICAgICAgICAgICAvLyBPbiBOKywgd2UgdGhyb3csIGJ1dCB0aGF0IGJyZWFrcyBjb21wYXRpYmlsaXR5IHdpdGggYXBwcyB0aGF0IHVzZSB0aGVzZSBtZXRob2RzLgorICAgICAgICAgICAgc1RleHR1cmVWaWV3SWdub3Jlc0RyYXdhYmxlU2V0dGVycyA9IHRhcmdldFNka1ZlcnNpb24gPD0gTTsKKwogICAgICAgICAgICAgc0NvbXBhdGliaWxpdHlEb25lID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTEyNDgyLDggKzEyNDkyLDcgQEAKICAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGdpdmVuIHBvaW50LCBpbiBsb2NhbCBjb29yZGluYXRlcyBpcyBpbnNpZGUgdGhlIHZpZXcuCiAgICAgICovCiAgICAgLypwYWNrYWdlKi8gZmluYWwgYm9vbGVhbiBwb2ludEluVmlldyhmbG9hdCBsb2NhbFgsIGZsb2F0IGxvY2FsWSkgewotICAgICAgICByZXR1cm4gbG9jYWxYID49IDAgJiYgbG9jYWxYIDwgKG1SaWdodCAtIG1MZWZ0KQotICAgICAgICAgICAgICAgICYmIGxvY2FsWSA+PSAwICYmIGxvY2FsWSA8IChtQm90dG9tIC0gbVRvcCk7CisgICAgICAgIHJldHVybiBwb2ludEluVmlldyhsb2NhbFgsIGxvY2FsWSwgMCk7CiAgICAgfQogCiAgICAgLyoqCkBAIC0xNDcxNiw2ICsxNDcyNSw3IEBACiAgICAgICAgIGRlc3Ryb3lEcmF3aW5nQ2FjaGUoKTsKIAogICAgICAgICBjbGVhbnVwRHJhdygpOworICAgICAgICByZWxlYXNlUG9pbnRlckNhcHR1cmUoKTsKICAgICAgICAgbUN1cnJlbnRBbmltYXRpb24gPSBudWxsOwogICAgIH0KIApAQCAtMjEyMTIsNiArMjEyMjIsNTYgQEAKICAgICAgICAgbVBvaW50ZXJJY29uID0gcG9pbnRlckljb247CiAgICAgfQogCisgICAgLyoqCisgICAgICogUmVxdWVzdCBjYXB0dXJpbmcgZnVydGhlciBtb3VzZSBldmVudHMuCisgICAgICoKKyAgICAgKiBXaGVuIHRoZSB2aWV3IGNhcHR1cmVzLCB0aGUgbW91c2UgcG9pbnRlciBpY29uIHdpbGwgZGlzYXBwZWFyIGFuZCB3aWxsIG5vdCBjaGFuZ2UgaXRzCisgICAgICogcG9zaXRpb24uIEZ1cnRoZXIgbW91c2UgZXZlbnRzIHdpbGwgY29tZSB0byB0aGUgY2FwdHVyaW5nIHZpZXcsIGFuZCB0aGUgbW91c2UgbW92ZW1lbnRzCisgICAgICogd2lsbCBjYW4gYmUgZGV0ZWN0ZWQgdGhyb3VnaCB7QGxpbmsgTW90aW9uRXZlbnQjQVhJU19SRUxBVElWRV9YfSBhbmQKKyAgICAgKiB7QGxpbmsgTW90aW9uRXZlbnQjQVhJU19SRUxBVElWRV9ZfS4gTm9uLW1vdXNlIGV2ZW50cyAodG91Y2hzY3JlZW5zLCBvciBzdHlsdXMpIHdpbGwgbm90CisgICAgICogYmUgYWZmZWN0ZWQuCisgICAgICoKKyAgICAgKiBUaGUgY2FwdHVyZSB3aWxsIGJlIHJlbGVhc2VkIHRocm91Z2gge0BsaW5rICNyZWxlYXNlUG9pbnRlckNhcHR1cmUoKX0sIG9yIHdpbGwgYmUgbG9zdAorICAgICAqIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgdmlldyBvciBjb250YWluaW5nIHdpbmRvdyBkaXNhcHBlYXIuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIHRydWUgd2hlbiBzdWNjZWVkcy4KKyAgICAgKiBAc2VlICNyZWxlYXNlUG9pbnRlckNhcHR1cmUoKQorICAgICAqIEBzZWUgI2hhc1BvaW50ZXJDYXB0dXJlKCkKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRQb2ludGVyQ2FwdHVyZSgpIHsKKyAgICAgICAgZmluYWwgVmlld1Jvb3RJbXBsIHZpZXdSb290SW1wbCA9IGdldFZpZXdSb290SW1wbCgpOworICAgICAgICBpZiAodmlld1Jvb3RJbXBsICE9IG51bGwpIHsKKyAgICAgICAgICAgIHZpZXdSb290SW1wbC5zZXRQb2ludGVyQ2FwdHVyZSh0aGlzKTsKKyAgICAgICAgfQorICAgIH0KKworCisgICAgLyoqCisgICAgICogUmVsZWFzZSB0aGUgY3VycmVudCBjYXB0dXJlIG9mIG1vdXNlIGV2ZW50cy4KKyAgICAgKgorICAgICAqIElmIHRoZSB2aWV3IGRvZXMgbm90IGhhdmUgdGhlIGNhcHR1cmUsIGl0IHdpbGwgZG8gbm90aGluZy4KKyAgICAgKiBAc2VlICNzZXRQb2ludGVyQ2FwdHVyZSgpCisgICAgICogQHNlZSAjaGFzUG9pbnRlckNhcHR1cmUoKQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHJlbGVhc2VQb2ludGVyQ2FwdHVyZSgpIHsKKyAgICAgICAgZmluYWwgVmlld1Jvb3RJbXBsIHZpZXdSb290SW1wbCA9IGdldFZpZXdSb290SW1wbCgpOworICAgICAgICBpZiAodmlld1Jvb3RJbXBsICE9IG51bGwpIHsKKyAgICAgICAgICAgIHZpZXdSb290SW1wbC5yZWxlYXNlUG9pbnRlckNhcHR1cmUodGhpcyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVja3MgdGhlIGNhcHR1cmUgc3RhdHVzIG9mIG1vdXNlIGV2ZW50cy4KKyAgICAgKgorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdmlldyBoYXMgdGhlIGNhcHR1cmUuCisgICAgICogQHNlZSAjc2V0UG9pbnRlckNhcHR1cmUoKQorICAgICAqIEBzZWUgI2hhc1BvaW50ZXJDYXB0dXJlKCkKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBoYXNQb2ludGVyQ2FwdHVyZSgpIHsKKyAgICAgICAgZmluYWwgVmlld1Jvb3RJbXBsIHZpZXdSb290SW1wbCA9IGdldFZpZXdSb290SW1wbCgpOworICAgICAgICByZXR1cm4gKHZpZXdSb290SW1wbCAhPSBudWxsKSAmJiB2aWV3Um9vdEltcGwuaGFzUG9pbnRlckNhcHR1cmUodGhpcyk7CisgICAgfQorCiAgICAgLy8KICAgICAvLyBQcm9wZXJ0aWVzCiAgICAgLy8KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvVmlld0dyb3VwLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1ZpZXdHcm91cC5qYXZhCmluZGV4IGNkOTNkYWIuLjFjMjQzOTIgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvVmlld0dyb3VwLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9WaWV3R3JvdXAuamF2YQpAQCAtMTQxOSw4ICsxNDE5LDkgQEAKIAogICAgICAgICBjYXNlIERyYWdFdmVudC5BQ1RJT05fRFJBR19FTkRFRDogewogICAgICAgICAgICAgLy8gUmVsZWFzZSB0aGUgYm9va2tlZXBpbmcgbm93IHRoYXQgdGhlIGRyYWcgbGlmZWN5Y2xlIGhhcyBlbmRlZAotICAgICAgICAgICAgaWYgKG1DaGlsZHJlbkludGVyZXN0ZWRJbkRyYWcgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGZvciAoVmlldyBjaGlsZCA6IG1DaGlsZHJlbkludGVyZXN0ZWRJbkRyYWcpIHsKKyAgICAgICAgICAgIGZpbmFsIEhhc2hTZXQ8Vmlldz4gY2hpbGRyZW5JbnRlcmVzdGVkSW5EcmFnID0gbUNoaWxkcmVuSW50ZXJlc3RlZEluRHJhZzsKKyAgICAgICAgICAgIGlmIChjaGlsZHJlbkludGVyZXN0ZWRJbkRyYWcgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGZvciAoVmlldyBjaGlsZCA6IGNoaWxkcmVuSW50ZXJlc3RlZEluRHJhZykgewogICAgICAgICAgICAgICAgICAgICAvLyBJZiBhIGNoaWxkIHdhcyBpbnRlcmVzdGVkIGluIHRoZSBvbmdvaW5nIGRyYWcsIGl0J3MgdG9sZCB0aGF0IGl0J3Mgb3ZlcgogICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQuZGlzcGF0Y2hEcmFnRXZlbnQoZXZlbnQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSB0cnVlOwpAQCAtMTQyOCwxMiArMTQyOSwxMSBAQAogICAgICAgICAgICAgICAgICAgICBjaGlsZC5tUHJpdmF0ZUZsYWdzMiAmPSB+Vmlldy5EUkFHX01BU0s7CiAgICAgICAgICAgICAgICAgICAgIGNoaWxkLnJlZnJlc2hEcmF3YWJsZVN0YXRlKCk7CiAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbUNoaWxkcmVuSW50ZXJlc3RlZEluRHJhZy5jbGVhcigpOwotICAgICAgICAgICAgICAgIGlmIChtQ3VycmVudERyYWdTdGFydEV2ZW50ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgbUN1cnJlbnREcmFnU3RhcnRFdmVudC5yZWN5Y2xlKCk7Ci0gICAgICAgICAgICAgICAgICAgIG1DdXJyZW50RHJhZ1N0YXJ0RXZlbnQgPSBudWxsOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjaGlsZHJlbkludGVyZXN0ZWRJbkRyYWcuY2xlYXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtQ3VycmVudERyYWdTdGFydEV2ZW50ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBtQ3VycmVudERyYWdTdGFydEV2ZW50LnJlY3ljbGUoKTsKKyAgICAgICAgICAgICAgICBtQ3VycmVudERyYWdTdGFydEV2ZW50ID0gbnVsbDsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKG1Jc0ludGVyZXN0ZWRJbkRyYWcpIHsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvVmlld1Jvb3RJbXBsLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1ZpZXdSb290SW1wbC5qYXZhCmluZGV4IGZhZjI2NDAuLjFjOWYzYjQgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvVmlld1Jvb3RJbXBsLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9WaWV3Um9vdEltcGwuamF2YQpAQCAtMzksNiArMzksNyBAQAogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGU7CiBpbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5kaXNwbGF5LkRpc3BsYXlNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUuZGlzcGxheS5EaXNwbGF5TWFuYWdlci5EaXNwbGF5TGlzdGVuZXI7CitpbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5pbnB1dC5JbnB1dE1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5tZWRpYS5BdWRpb01hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5CaW5kZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5CdWlsZDsKQEAgLTE3NCw2ICsxNzUsOSBAQAogICAgIFZpZXcgbUFjY2Vzc2liaWxpdHlGb2N1c2VkSG9zdDsKICAgICBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gbUFjY2Vzc2liaWxpdHlGb2N1c2VkVmlydHVhbFZpZXc7CiAKKyAgICAvLyBUaGUgdmlldyB3aGljaCBjYXB0dXJlcyBtb3VzZSBpbnB1dCwgb3IgbnVsbCB3aGVuIG5vIG9uZSBpcyBjYXB0dXJpbmcuCisgICAgVmlldyBtQ2FwdHVyaW5nVmlldzsKKwogICAgIGludCBtVmlld1Zpc2liaWxpdHk7CiAgICAgYm9vbGVhbiBtQXBwVmlzaWJsZSA9IHRydWU7CiAgICAgLy8gRm9yIHJlY2VudHMgdG8gZnJlZWZvcm0gdHJhbnNpdGlvbiB3ZSBuZWVkIHRvIGtlZXAgZHJhd2luZyBhZnRlciB0aGUgYXBwIHJlY2VpdmVzIGluZm9ybWF0aW9uCkBAIC0xOTcsNiArMjAxLDEwIEBACiAgICAgLy8gc28gdGhlIHdpbmRvdyBzaG91bGQgbm8gbG9uZ2VyIGJlIGFjdGl2ZS4KICAgICBib29sZWFuIG1TdG9wcGVkID0gZmFsc2U7CiAKKyAgICAvLyBTZXQgdG8gdHJ1ZSBpZiB0aGUgb3duZXIgb2YgdGhpcyB3aW5kb3cgaXMgaW4gYW1iaWVudCBtb2RlLAorICAgIC8vIHdoaWNoIG1lYW5zIGl0IHdvbid0IHJlY2VpdmUgaW5wdXQgZXZlbnRzLgorICAgIGJvb2xlYW4gbUlzQW1iaWVudE1vZGUgPSBmYWxzZTsKKwogICAgIC8vIFNldCB0byB0cnVlIHRvIHN0b3AgaW5wdXQgZHVyaW5nIGFuIEFjdGl2aXR5IFRyYW5zaXRpb24uCiAgICAgYm9vbGVhbiBtUGF1c2VkRm9yVHJhbnNpdGlvbiA9IGZhbHNlOwogCkBAIC0xMDMyLDYgKzEwNDAsMTAgQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIHB1YmxpYyB2b2lkIHNldElzQW1iaWVudE1vZGUoYm9vbGVhbiBhbWJpZW50KSB7CisgICAgICAgIG1Jc0FtYmllbnRNb2RlID0gYW1iaWVudDsKKyAgICB9CisKICAgICB2b2lkIHNldFdpbmRvd1N0b3BwZWQoYm9vbGVhbiBzdG9wcGVkKSB7CiAgICAgICAgIGlmIChtU3RvcHBlZCAhPSBzdG9wcGVkKSB7CiAgICAgICAgICAgICBtU3RvcHBlZCA9IHN0b3BwZWQ7CkBAIC0zMDA0LDYgKzMwMTYsMzEgQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIHZvaWQgc2V0UG9pbnRlckNhcHR1cmUoVmlldyB2aWV3KSB7CisgICAgICAgIGlmICghbUF0dGFjaEluZm8ubUhhc1dpbmRvd0ZvY3VzKSB7CisgICAgICAgICAgICBMb2cudyhUQUcsICJDYW4ndCBzZXQgY2FwdHVyZSBpZiBpdCdzIG5vdCBmb2N1c2VkLiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChtQ2FwdHVyaW5nVmlldyA9PSB2aWV3KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbUNhcHR1cmluZ1ZpZXcgPSB2aWV3OworICAgICAgICBJbnB1dE1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5zZXRQb2ludGVySWNvbkRldGFjaGVkKHRydWUpOworICAgIH0KKworICAgIHZvaWQgcmVsZWFzZVBvaW50ZXJDYXB0dXJlKFZpZXcgdmlldykgeworICAgICAgICBpZiAobUNhcHR1cmluZ1ZpZXcgIT0gdmlldyB8fCBtQ2FwdHVyaW5nVmlldyA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBtQ2FwdHVyaW5nVmlldyA9IG51bGw7CisgICAgICAgIElucHV0TWFuYWdlci5nZXRJbnN0YW5jZSgpLnNldFBvaW50ZXJJY29uRGV0YWNoZWQoZmFsc2UpOworICAgIH0KKworICAgIGJvb2xlYW4gaGFzUG9pbnRlckNhcHR1cmUoVmlldyB2aWV3KSB7CisgICAgICAgIHJldHVybiB2aWV3ICE9IG51bGwgJiYgbUNhcHR1cmluZ1ZpZXcgPT0gdmlldzsKKyAgICB9CisKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCByZXF1ZXN0Q2hpbGRGb2N1cyhWaWV3IGNoaWxkLCBWaWV3IGZvY3VzZWQpIHsKICAgICAgICAgaWYgKERFQlVHX0lOUFVUX1JFU0laRSkgewpAQCAtMzA4MSw2ICszMTE4LDEwIEBACiAgICAgICAgIG1WaWV3ID0gbnVsbDsKICAgICAgICAgbUF0dGFjaEluZm8ubVJvb3RWaWV3ID0gbnVsbDsKIAorICAgICAgICBpZiAobUNhcHR1cmluZ1ZpZXcgIT0gbnVsbCkgeworICAgICAgICAgICAgcmVsZWFzZVBvaW50ZXJDYXB0dXJlKG1DYXB0dXJpbmdWaWV3KTsKKyAgICAgICAgfQorCiAgICAgICAgIG1TdXJmYWNlLnJlbGVhc2UoKTsKIAogICAgICAgICBpZiAobUlucHV0UXVldWVDYWxsYmFjayAhPSBudWxsICYmIG1JbnB1dFF1ZXVlICE9IG51bGwpIHsKQEAgLTMyNzQsNiArMzMxNSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAmJiBtUGVuZGluZ1N0YWJsZUluc2V0cy5lcXVhbHMoYXJncy5hcmc2KQogICAgICAgICAgICAgICAgICAgICAgICAgJiYgbVBlbmRpbmdWaXNpYmxlSW5zZXRzLmVxdWFscyhhcmdzLmFyZzMpCiAgICAgICAgICAgICAgICAgICAgICAgICAmJiBtUGVuZGluZ091dHNldHMuZXF1YWxzKGFyZ3MuYXJnNykKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIG1QZW5kaW5nQmFja0Ryb3BGcmFtZS5lcXVhbHMoYXJncy5hcmc4KQogICAgICAgICAgICAgICAgICAgICAgICAgJiYgYXJncy5hcmc0ID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtMzM5MCw2ICszNDMyLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNvZnRJbnB1dE1vZGUgJj0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5TT0ZUX0lOUFVUX0lTX0ZPUldBUkRfTkFWSUdBVElPTjsKICAgICAgICAgICAgICAgICAgICAgICAgIG1IYXNIYWRXaW5kb3dGb2N1cyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobUNhcHR1cmluZ1ZpZXcgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZVBvaW50ZXJDYXB0dXJlKG1DYXB0dXJpbmdWaWV3KTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gYnJlYWs7CkBAIC0zNjg1LDcgKzM3MjksNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfSBlbHNlIGlmICgoIW1BdHRhY2hJbmZvLm1IYXNXaW5kb3dGb2N1cwogICAgICAgICAgICAgICAgICAgICAmJiAhcS5tRXZlbnQuaXNGcm9tU291cmNlKElucHV0RGV2aWNlLlNPVVJDRV9DTEFTU19QT0lOVEVSKSkgfHwgbVN0b3BwZWQKLSAgICAgICAgICAgICAgICAgICAgfHwgKG1QYXVzZWRGb3JUcmFuc2l0aW9uICYmICFpc0JhY2socS5tRXZlbnQpKSkgeworICAgICAgICAgICAgICAgICAgICB8fCBtSXNBbWJpZW50TW9kZSB8fCAobVBhdXNlZEZvclRyYW5zaXRpb24gJiYgIWlzQmFjayhxLm1FdmVudCkpKSB7CiAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIGZvY3VzIGV2ZW50IGFuZCB0aGUgd2luZG93IGRvZXNuJ3QgY3VycmVudGx5IGhhdmUgaW5wdXQgZm9jdXMgb3IKICAgICAgICAgICAgICAgICAvLyBoYXMgc3RvcHBlZC4gVGhpcyBjb3VsZCBiZSBhbiBldmVudCB0aGF0IGNhbWUgYmFjayBmcm9tIHRoZSBwcmV2aW91cyBzdGFnZQogICAgICAgICAgICAgICAgIC8vIGJ1dCB0aGUgd2luZG93IGhhcyBsb3N0IGZvY3VzIG9yIHN0b3BwZWQgaW4gdGhlIG1lYW50aW1lLgpAQCAtNDIzNiw3ICs0MjgwLDEwIEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIG1BdHRhY2hJbmZvLm1VbmJ1ZmZlcmVkRGlzcGF0Y2hSZXF1ZXN0ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2xlYW4gaGFuZGxlZCA9IG1WaWV3LmRpc3BhdGNoUG9pbnRlckV2ZW50KGV2ZW50KTsKKyAgICAgICAgICAgIGZpbmFsIFZpZXcgZXZlbnRUYXJnZXQgPQorICAgICAgICAgICAgICAgICAgICAoZXZlbnQuaXNGcm9tU291cmNlKElucHV0RGV2aWNlLlNPVVJDRV9NT1VTRSkgJiYgbUNhcHR1cmluZ1ZpZXcgIT0gbnVsbCkgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1DYXB0dXJpbmdWaWV3IDogbVZpZXc7CisgICAgICAgICAgICBib29sZWFuIGhhbmRsZWQgPSBldmVudFRhcmdldC5kaXNwYXRjaFBvaW50ZXJFdmVudChldmVudCk7CiAgICAgICAgICAgICBpZiAobUF0dGFjaEluZm8ubVVuYnVmZmVyZWREaXNwYXRjaFJlcXVlc3RlZCAmJiAhbVVuYnVmZmVyZWRJbnB1dERpc3BhdGNoKSB7CiAgICAgICAgICAgICAgICAgbVVuYnVmZmVyZWRJbnB1dERpc3BhdGNoID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBpZiAobUNvbnN1bWVCYXRjaGVkSW5wdXRTY2hlZHVsZWQpIHsKQEAgLTU1MTEsNiArNTU1OCw4IEBACiAgICAgICAgICAgICAgICAgd3JpdGVyLnByaW50bG4obVByb2Nlc3NJbnB1dEV2ZW50c1NjaGVkdWxlZCk7CiAgICAgICAgIHdyaXRlci5wcmludChpbm5lclByZWZpeCk7IHdyaXRlci5wcmludCgibVRyYXZlcnNhbFNjaGVkdWxlZD0iKTsKICAgICAgICAgICAgICAgICB3cml0ZXIucHJpbnQobVRyYXZlcnNhbFNjaGVkdWxlZCk7CisgICAgICAgIHdyaXRlci5wcmludChpbm5lclByZWZpeCk7IHdyaXRlci5wcmludCgibUlzQW1iaWVudE1vZGU9Iik7CisgICAgICAgICAgICAgICAgd3JpdGVyLnByaW50KG1Jc0FtYmllbnRNb2RlKTsKICAgICAgICAgaWYgKG1UcmF2ZXJzYWxTY2hlZHVsZWQpIHsKICAgICAgICAgICAgIHdyaXRlci5wcmludCgiIChiYXJyaWVyPSIpOyB3cml0ZXIucHJpbnQobVRyYXZlcnNhbEJhcnJpZXIpOyB3cml0ZXIucHJpbnRsbigiKSIpOwogICAgICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9XaW5kb3dNYW5hZ2VyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1dpbmRvd01hbmFnZXIuamF2YQppbmRleCAyZTg4NGNjLi4yNTFmNGM4IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1dpbmRvd01hbmFnZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1dpbmRvd01hbmFnZXIuamF2YQpAQCAtMTE4Myw2ICsxMTgzLDEzIEBACiAgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBSSVZBVEVfRkxBR19XSUxMX05PVF9SRVBMQUNFX09OX1JFTEFVTkNIID0gMHgwMDAwODAwMDsKIAogICAgICAgICAvKioKKyAgICAgICAgICogRmxhZyB0byBpbmRpY2F0ZSB0aGF0IHRoaXMgY2hpbGQgd2luZG93IHNob3VsZCBhbHdheXMgYmUgbGFpZC1vdXQgaW4gdGhlIHBhcmVudAorICAgICAgICAgKiBmcmFtZSByZWdhcmRsZXNzIG9mIHRoZSBjdXJyZW50IHdpbmRvd2luZyBtb2RlIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAqIEBoaWRlCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQUklWQVRFX0ZMQUdfTEFZT1VUX0NISUxEX1dJTkRPV19JTl9QQVJFTlRfRlJBTUUgPSAweDAwMDEwMDAwOworCisgICAgICAgIC8qKgogICAgICAgICAgKiBDb250cm9sIGZsYWdzIHRoYXQgYXJlIHByaXZhdGUgdG8gdGhlIHBsYXRmb3JtLgogICAgICAgICAgKiBAaGlkZQogICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9MaW5lYXJMYXlvdXQuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9MaW5lYXJMYXlvdXQuamF2YQppbmRleCBhZDkzOWJlLi5mNmU2MTg2IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvTGluZWFyTGF5b3V0LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0xpbmVhckxheW91dC5qYXZhCkBAIC0zNTksNyArMzU5LDYgQEAKICAgICAgICAgZmluYWwgaW50IGNvdW50ID0gZ2V0VmlydHVhbENoaWxkQ291bnQoKTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgICAgICAgICBmaW5hbCBWaWV3IGNoaWxkID0gZ2V0VmlydHVhbENoaWxkQXQoaSk7Ci0KICAgICAgICAgICAgIGlmIChjaGlsZCAhPSBudWxsICYmIGNoaWxkLmdldFZpc2liaWxpdHkoKSAhPSBHT05FKSB7CiAgICAgICAgICAgICAgICAgaWYgKGhhc0RpdmlkZXJCZWZvcmVDaGlsZEF0KGkpKSB7CiAgICAgICAgICAgICAgICAgICAgIGZpbmFsIExheW91dFBhcmFtcyBscCA9IChMYXlvdXRQYXJhbXMpIGNoaWxkLmdldExheW91dFBhcmFtcygpOwpAQCAtMzg4LDcgKzM4Nyw3IEBACiAgICAgICovCiAgICAgcHJpdmF0ZSBWaWV3IGdldExhc3ROb25Hb25lQ2hpbGQoKSB7CiAgICAgICAgIGZvciAoaW50IGkgPSBnZXRWaXJ0dWFsQ2hpbGRDb3VudCgpIC0gMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgICAgIFZpZXcgY2hpbGQgPSBnZXRWaXJ0dWFsQ2hpbGRBdChpKTsKKyAgICAgICAgICAgIGZpbmFsIFZpZXcgY2hpbGQgPSBnZXRWaXJ0dWFsQ2hpbGRBdChpKTsKICAgICAgICAgICAgIGlmIChjaGlsZCAhPSBudWxsICYmIGNoaWxkLmdldFZpc2liaWxpdHkoKSAhPSBHT05FKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkOwogICAgICAgICAgICAgfQpAQCAtNDAxLDcgKzQwMCw2IEBACiAgICAgICAgIGZpbmFsIGJvb2xlYW4gaXNMYXlvdXRSdGwgPSBpc0xheW91dFJ0bCgpOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgICAgICAgIGZpbmFsIFZpZXcgY2hpbGQgPSBnZXRWaXJ0dWFsQ2hpbGRBdChpKTsKLQogICAgICAgICAgICAgaWYgKGNoaWxkICE9IG51bGwgJiYgY2hpbGQuZ2V0VmlzaWJpbGl0eSgpICE9IEdPTkUpIHsKICAgICAgICAgICAgICAgICBpZiAoaGFzRGl2aWRlckJlZm9yZUNoaWxkQXQoaSkpIHsKICAgICAgICAgICAgICAgICAgICAgZmluYWwgTGF5b3V0UGFyYW1zIGxwID0gKExheW91dFBhcmFtcykgY2hpbGQuZ2V0TGF5b3V0UGFyYW1zKCk7CkBAIC01ODgsOCArNTg2LDkgQEAKICAgICAgKiBmb3IgYW4gZXhhbXBsZS48L3A+CiAgICAgICoKICAgICAgKiBAcGFyYW0gaW5kZXggdGhlIGNoaWxkJ3MgaW5kZXgKLSAgICAgKiBAcmV0dXJuIHRoZSBjaGlsZCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4CisgICAgICogQHJldHVybiB0aGUgY2hpbGQgYXQgdGhlIHNwZWNpZmllZCBpbmRleCwgbWF5IGJlIHtAY29kZSBudWxsfQogICAgICAqLworICAgIEBOdWxsYWJsZQogICAgIFZpZXcgZ2V0VmlydHVhbENoaWxkQXQoaW50IGluZGV4KSB7CiAgICAgICAgIHJldHVybiBnZXRDaGlsZEF0KGluZGV4KTsKICAgICB9CkBAIC02NzAsNyArNjY5LDcgQEAKICAgICAgKi8KICAgICBwcml2YXRlIGJvb2xlYW4gYWxsVmlld3NBcmVHb25lQmVmb3JlKGludCBjaGlsZEluZGV4KSB7CiAgICAgICAgIGZvciAoaW50IGkgPSBjaGlsZEluZGV4IC0gMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgICAgIFZpZXcgY2hpbGQgPSBnZXRWaXJ0dWFsQ2hpbGRBdChpKTsKKyAgICAgICAgICAgIGZpbmFsIFZpZXcgY2hpbGQgPSBnZXRWaXJ0dWFsQ2hpbGRBdChpKTsKICAgICAgICAgICAgIGlmIChjaGlsZCAhPSBudWxsICYmIGNoaWxkLmdldFZpc2liaWxpdHkoKSAhPSBHT05FKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQpAQCAtNzE1LDcgKzcxNCw2IEBACiAgICAgICAgIC8vIFNlZSBob3cgdGFsbCBldmVyeW9uZSBpcy4gQWxzbyByZW1lbWJlciBtYXggd2lkdGguCiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewogICAgICAgICAgICAgZmluYWwgVmlldyBjaGlsZCA9IGdldFZpcnR1YWxDaGlsZEF0KGkpOwotCiAgICAgICAgICAgICBpZiAoY2hpbGQgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIG1Ub3RhbExlbmd0aCArPSBtZWFzdXJlTnVsbENoaWxkKGkpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtODM3LDcgKzgzNSw2IEBACiAKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewogICAgICAgICAgICAgICAgIGZpbmFsIFZpZXcgY2hpbGQgPSBnZXRWaXJ0dWFsQ2hpbGRBdChpKTsKLQogICAgICAgICAgICAgICAgIGlmIChjaGlsZCA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIG1Ub3RhbExlbmd0aCArPSBtZWFzdXJlTnVsbENoaWxkKGkpOwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTk0Myw3ICs5NDAsNiBAQAogICAgICAgICAgICAgaWYgKHVzZUxhcmdlc3RDaGlsZCAmJiBoZWlnaHRNb2RlICE9IE1lYXN1cmVTcGVjLkVYQUNUTFkpIHsKICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgZmluYWwgVmlldyBjaGlsZCA9IGdldFZpcnR1YWxDaGlsZEF0KGkpOwotCiAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZCA9PSBudWxsIHx8IGNoaWxkLmdldFZpc2liaWxpdHkoKSA9PSBWaWV3LkdPTkUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC05ODYsNyArOTgyLDcgQEAKICAgICAgICAgICAgICAgICBNZWFzdXJlU3BlYy5FWEFDVExZKTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGk8IGNvdW50OyArK2kpIHsKICAgICAgICAgICAgZmluYWwgVmlldyBjaGlsZCA9IGdldFZpcnR1YWxDaGlsZEF0KGkpOwotICAgICAgICAgICBpZiAoY2hpbGQuZ2V0VmlzaWJpbGl0eSgpICE9IEdPTkUpIHsgCisgICAgICAgICAgIGlmIChjaGlsZCAhPSBudWxsICYmIGNoaWxkLmdldFZpc2liaWxpdHkoKSAhPSBHT05FKSB7CiAgICAgICAgICAgICAgICBMaW5lYXJMYXlvdXQuTGF5b3V0UGFyYW1zIGxwID0gKChMaW5lYXJMYXlvdXQuTGF5b3V0UGFyYW1zKWNoaWxkLmdldExheW91dFBhcmFtcygpKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYgKGxwLndpZHRoID09IExheW91dFBhcmFtcy5NQVRDSF9QQVJFTlQpIHsKQEAgLTEwNTMsNyArMTA0OSw2IEBACiAgICAgICAgIC8vIFNlZSBob3cgd2lkZSBldmVyeW9uZSBpcy4gQWxzbyByZW1lbWJlciBtYXggaGVpZ2h0LgogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgICAgIGZpbmFsIFZpZXcgY2hpbGQgPSBnZXRWaXJ0dWFsQ2hpbGRBdChpKTsKLQogICAgICAgICAgICAgaWYgKGNoaWxkID09IG51bGwpIHsKICAgICAgICAgICAgICAgICBtVG90YWxMZW5ndGggKz0gbWVhc3VyZU51bGxDaGlsZChpKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTEyMTEsNyArMTIwNiw2IEBACiAKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewogICAgICAgICAgICAgICAgIGZpbmFsIFZpZXcgY2hpbGQgPSBnZXRWaXJ0dWFsQ2hpbGRBdChpKTsKLQogICAgICAgICAgICAgICAgIGlmIChjaGlsZCA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIG1Ub3RhbExlbmd0aCArPSBtZWFzdXJlTnVsbENoaWxkKGkpOwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTEzNTcsNyArMTM1MSw2IEBACiAgICAgICAgICAgICBpZiAodXNlTGFyZ2VzdENoaWxkICYmIHdpZHRoTW9kZSAhPSBNZWFzdXJlU3BlYy5FWEFDVExZKSB7CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFZpZXcgY2hpbGQgPSBnZXRWaXJ0dWFsQ2hpbGRBdChpKTsKLQogICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQgPT0gbnVsbCB8fCBjaGlsZC5nZXRWaXNpYmlsaXR5KCkgPT0gVmlldy5HT05FKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTQwMiw3ICsxMzk1LDcgQEAKICAgICAgICAgICAgICAgICBNZWFzdXJlU3BlYy5FWEFDVExZKTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CiAgICAgICAgICAgIGZpbmFsIFZpZXcgY2hpbGQgPSBnZXRWaXJ0dWFsQ2hpbGRBdChpKTsKLSAgICAgICAgICAgaWYgKGNoaWxkLmdldFZpc2liaWxpdHkoKSAhPSBHT05FKSB7IAorICAgICAgICAgICBpZiAoY2hpbGQgIT0gbnVsbCAmJiBjaGlsZC5nZXRWaXNpYmlsaXR5KCkgIT0gR09ORSkgewogICAgICAgICAgICAgICAgTGluZWFyTGF5b3V0LkxheW91dFBhcmFtcyBscCA9IChMaW5lYXJMYXlvdXQuTGF5b3V0UGFyYW1zKSBjaGlsZC5nZXRMYXlvdXRQYXJhbXMoKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYgKGxwLmhlaWdodCA9PSBMYXlvdXRQYXJhbXMuTUFUQ0hfUEFSRU5UKSB7CkBAIC0xNjYyLDkgKzE2NTUsOCBAQAogICAgICAgICB9CiAKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICBpbnQgY2hpbGRJbmRleCA9IHN0YXJ0ICsgZGlyICogaTsKKyAgICAgICAgICAgIGZpbmFsIGludCBjaGlsZEluZGV4ID0gc3RhcnQgKyBkaXIgKiBpOwogICAgICAgICAgICAgZmluYWwgVmlldyBjaGlsZCA9IGdldFZpcnR1YWxDaGlsZEF0KGNoaWxkSW5kZXgpOwotCiAgICAgICAgICAgICBpZiAoY2hpbGQgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGNoaWxkTGVmdCArPSBtZWFzdXJlTnVsbENoaWxkKGNoaWxkSW5kZXgpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZC5nZXRWaXNpYmlsaXR5KCkgIT0gR09ORSkgewpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0xpc3RWaWV3LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvTGlzdFZpZXcuamF2YQppbmRleCAwNjQ4MDhiLi5hMTE4OTdkIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvTGlzdFZpZXcuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvTGlzdFZpZXcuamF2YQpAQCAtMjE4MSw3ICsyMTgxLDcgQEAKICAgICAgICAgYm9vbGVhbiBoYW5kbGVkID0gZmFsc2U7CiAgICAgICAgIGludCBhY3Rpb24gPSBldmVudC5nZXRBY3Rpb24oKTsKICAgICAgICAgaWYgKEtleUV2ZW50LmlzQ29uZmlybUtleShrZXlDb2RlKQotICAgICAgICAgICAgICAgICYmIGV2ZW50Lmhhc05vTW9kaWZpZXJzKCkgJiYgYWN0aW9uID09IEtleUV2ZW50LkFDVElPTl9VUCkgeworICAgICAgICAgICAgICAgICYmIGV2ZW50Lmhhc05vTW9kaWZpZXJzKCkgJiYgYWN0aW9uICE9IEtleUV2ZW50LkFDVElPTl9VUCkgewogICAgICAgICAgICAgaGFuZGxlZCA9IHJlc3VycmVjdFNlbGVjdGlvbklmTmVlZGVkKCk7CiAgICAgICAgICAgICBpZiAoIWhhbmRsZWQgJiYgZXZlbnQuZ2V0UmVwZWF0Q291bnQoKSA9PSAwICYmIGdldENoaWxkQ291bnQoKSA+IDApIHsKICAgICAgICAgICAgICAgICBrZXlQcmVzc2VkKCk7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvUG9wdXBXaW5kb3cuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9Qb3B1cFdpbmRvdy5qYXZhCmluZGV4IGY0YzM0M2EuLjdlOTgxOTMgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9Qb3B1cFdpbmRvdy5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9Qb3B1cFdpbmRvdy5qYXZhCkBAIC0xNiw2ICsxNiw3IEBACiAKIHBhY2thZ2UgYW5kcm9pZC53aWRnZXQ7CiAKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLlBSSVZBVEVfRkxBR19MQVlPVVRfQ0hJTERfV0lORE9XX0lOX1BBUkVOVF9GUkFNRTsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLlBSSVZBVEVfRkxBR19XSUxMX05PVF9SRVBMQUNFX09OX1JFTEFVTkNIOwogCiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuUjsKQEAgLTEzMTMsNyArMTMxNCw4IEBACiAgICAgICAgICAgICBwLndpZHRoID0gbUxhc3RXaWR0aCA9IG1XaWR0aDsKICAgICAgICAgfQogCi0gICAgICAgIHAucHJpdmF0ZUZsYWdzID0gUFJJVkFURV9GTEFHX1dJTExfTk9UX1JFUExBQ0VfT05fUkVMQVVOQ0g7CisgICAgICAgIHAucHJpdmF0ZUZsYWdzID0gUFJJVkFURV9GTEFHX1dJTExfTk9UX1JFUExBQ0VfT05fUkVMQVVOQ0gKKyAgICAgICAgICAgICAgICB8IFBSSVZBVEVfRkxBR19MQVlPVVRfQ0hJTERfV0lORE9XX0lOX1BBUkVOVF9GUkFNRTsKIAogICAgICAgICAvLyBVc2VkIGZvciBkZWJ1Z2dpbmcuCiAgICAgICAgIHAuc2V0VGl0bGUoIlBvcHVwV2luZG93OiIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKGhhc2hDb2RlKCkpKTsKQEAgLTE0NjUsMTAgKzE0NjcsMTQgQEAKICAgICAgICAgfQogCiAgICAgICAgIGlmIChtQ2xpcFRvU2NyZWVuKSB7CisgICAgICAgICAgICBmaW5hbCBpbnQgd2luT2Zmc2V0WCA9IG1TY3JlZW5Mb2NhdGlvblswXSAtIG1EcmF3aW5nTG9jYXRpb25bMF07CisgICAgICAgICAgICBmaW5hbCBpbnQgd2luT2Zmc2V0WSA9IG1TY3JlZW5Mb2NhdGlvblsxXSAtIG1EcmF3aW5nTG9jYXRpb25bMV07CisgICAgICAgICAgICBwLnggKz0gd2luT2Zmc2V0WDsKKyAgICAgICAgICAgIHAueSArPSB3aW5PZmZzZXRZOwogICAgICAgICAgICAgZmluYWwgaW50IGRpc3BsYXlGcmFtZVdpZHRoID0gZGlzcGxheUZyYW1lLnJpZ2h0IC0gZGlzcGxheUZyYW1lLmxlZnQ7CiAgICAgICAgICAgICBmaW5hbCBpbnQgcmlnaHQgPSBwLnggKyBwLndpZHRoOwotICAgICAgICAgICAgaWYgKHJpZ2h0ID4gZGlzcGxheUZyYW1lV2lkdGgpIHsKLSAgICAgICAgICAgICAgICBwLnggLT0gcmlnaHQgLSBkaXNwbGF5RnJhbWVXaWR0aDsKKyAgICAgICAgICAgIGlmIChyaWdodCA+IGRpc3BsYXlGcmFtZS5yaWdodCkgeworICAgICAgICAgICAgICAgIHAueCAtPSByaWdodCAtIGRpc3BsYXlGcmFtZS5yaWdodDsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHAueCA8IGRpc3BsYXlGcmFtZS5sZWZ0KSB7CkBAIC0xNDc3LDEwICsxNDgzLDkgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKG1PdmVybGFwQW5jaG9yKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgaW50IGRpc3BsYXlGcmFtZUhlaWdodCA9IGRpc3BsYXlGcmFtZS5ib3R0b20gLSBkaXNwbGF5RnJhbWUudG9wOwogICAgICAgICAgICAgICAgIGZpbmFsIGludCBib3R0b20gPSBwLnkgKyBwLmhlaWdodDsKICAgICAgICAgICAgICAgICBpZiAoYm90dG9tID4gZGlzcGxheUZyYW1lLmJvdHRvbSkgewotICAgICAgICAgICAgICAgICAgICBwLnkgLT0gYm90dG9tIC0gZGlzcGxheUZyYW1lSGVpZ2h0OworICAgICAgICAgICAgICAgICAgICBwLnkgLT0gYm90dG9tIC0gZGlzcGxheUZyYW1lLmJvdHRvbTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGlmIChvblRvcCkgewpAQCAtMTQ5Miw2ICsxNDk3LDggQEAKICAgICAgICAgICAgICAgICAgICAgcC55ID0gTWF0aC5tYXgocC55LCBkaXNwbGF5RnJhbWUudG9wKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBwLnggLT0gd2luT2Zmc2V0WDsKKyAgICAgICAgICAgIHAueSAtPSB3aW5PZmZzZXRZOwogICAgICAgICB9CiAKICAgICAgICAgcC5ncmF2aXR5IHw9IEdyYXZpdHkuRElTUExBWV9DTElQX1ZFUlRJQ0FMOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1RhYmxlUm93LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvVGFibGVSb3cuamF2YQppbmRleCBmN2Y5YzkxLi4yMjkzMWZjIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvVGFibGVSb3cuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvVGFibGVSb3cuamF2YQpAQCAtOTgsNyArOTgsNyBAQAogICAgICAqIHtAaGlkZX0KICAgICAgKi8KICAgICB2b2lkIHNldENvbHVtbkNvbGxhcHNlZChpbnQgY29sdW1uSW5kZXgsIGJvb2xlYW4gY29sbGFwc2VkKSB7Ci0gICAgICAgIFZpZXcgY2hpbGQgPSBnZXRWaXJ0dWFsQ2hpbGRBdChjb2x1bW5JbmRleCk7CisgICAgICAgIGZpbmFsIFZpZXcgY2hpbGQgPSBnZXRWaXJ0dWFsQ2hpbGRBdChjb2x1bW5JbmRleCk7CiAgICAgICAgIGlmIChjaGlsZCAhPSBudWxsKSB7CiAgICAgICAgICAgICBjaGlsZC5zZXRWaXNpYmlsaXR5KGNvbGxhcHNlZCA/IEdPTkUgOiBWSVNJQkxFKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL2FwcC9Mb2NhbGVQaWNrZXIuamF2YSBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9hcHAvTG9jYWxlUGlja2VyLmphdmEKaW5kZXggNGVmZWZhOS4uNmEzNjVlMCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL2FwcC9Mb2NhbGVQaWNrZXIuamF2YQorKysgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvYXBwL0xvY2FsZVBpY2tlci5qYXZhCkBAIC0yOCw2ICsyOCw3IEBACiBpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CiBpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5TZXR0aW5nczsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuTG9jYWxlTGlzdDsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGFuZHJvaWQudmlldy5MYXlvdXRJbmZsYXRlcjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKQEAgLTQ1LDYgKzQ2LDcgQEAKIHB1YmxpYyBjbGFzcyBMb2NhbGVQaWNrZXIgZXh0ZW5kcyBMaXN0RnJhZ21lbnQgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiTG9jYWxlUGlja2VyIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gcHNldWRvTG9jYWxlcyA9IHsgImVuLVhBIiwgImFyLVhCIiB9OwogCiAgICAgcHVibGljIHN0YXRpYyBpbnRlcmZhY2UgTG9jYWxlU2VsZWN0aW9uTGlzdGVuZXIgewogICAgICAgICAvLyBZb3UgY2FuIGFkZCBhbnkgYXJndW1lbnQgaWYgeW91IHJlYWxseSBuZWVkIGl0Li4uCkBAIC01Nyw3ICs1OSw3IEBACiAgICAgICAgIHN0YXRpYyBmaW5hbCBDb2xsYXRvciBzQ29sbGF0b3IgPSBDb2xsYXRvci5nZXRJbnN0YW5jZSgpOwogCiAgICAgICAgIFN0cmluZyBsYWJlbDsKLSAgICAgICAgTG9jYWxlIGxvY2FsZTsKKyAgICAgICAgZmluYWwgTG9jYWxlIGxvY2FsZTsKIAogICAgICAgICBwdWJsaWMgTG9jYWxlSW5mbyhTdHJpbmcgbGFiZWwsIExvY2FsZSBsb2NhbGUpIHsKICAgICAgICAgICAgIHRoaXMubGFiZWwgPSBsYWJlbDsKQEAgLTgzLDE3ICs4NSwzMCBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmdbXSBnZXRTeXN0ZW1Bc3NldExvY2FsZXMoKSB7CisgICAgICAgIHJldHVybiBSZXNvdXJjZXMuZ2V0U3lzdGVtKCkuZ2V0QXNzZXRzKCkuZ2V0TG9jYWxlcygpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nW10gZ2V0U3VwcG9ydGVkTG9jYWxlcyhDb250ZXh0IGNvbnRleHQpIHsKKyAgICAgICAgcmV0dXJuIGNvbnRleHQuZ2V0UmVzb3VyY2VzKCkuZ2V0U3RyaW5nQXJyYXkoUi5hcnJheS5zdXBwb3J0ZWRfbG9jYWxlcyk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmdbXSBnZXRQc2V1ZG9Mb2NhbGVzKCkgeworICAgICAgICByZXR1cm4gcHNldWRvTG9jYWxlczsKKyAgICB9CisKICAgICBwdWJsaWMgc3RhdGljIExpc3Q8TG9jYWxlSW5mbz4gZ2V0QWxsQXNzZXRMb2NhbGVzKENvbnRleHQgY29udGV4dCwgYm9vbGVhbiBpc0luRGV2ZWxvcGVyTW9kZSkgewogICAgICAgICBmaW5hbCBSZXNvdXJjZXMgcmVzb3VyY2VzID0gY29udGV4dC5nZXRSZXNvdXJjZXMoKTsKIAotICAgICAgICBmaW5hbCBTdHJpbmdbXSBsb2NhbGVzID0gUmVzb3VyY2VzLmdldFN5c3RlbSgpLmdldEFzc2V0cygpLmdldExvY2FsZXMoKTsKKyAgICAgICAgZmluYWwgU3RyaW5nW10gbG9jYWxlcyA9IGdldFN5c3RlbUFzc2V0TG9jYWxlcygpOwogICAgICAgICBMaXN0PFN0cmluZz4gbG9jYWxlTGlzdCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPihsb2NhbGVzLmxlbmd0aCk7CiAgICAgICAgIENvbGxlY3Rpb25zLmFkZEFsbChsb2NhbGVMaXN0LCBsb2NhbGVzKTsKIAogICAgICAgICAvLyBEb24ndCBzaG93IHRoZSBwc2V1ZG9sb2NhbGVzIHVubGVzcyB3ZSdyZSBpbiBkZXZlbG9wZXIgbW9kZS4gaHR0cDovL2IvMTcxOTA0MDcuCiAgICAgICAgIGlmICghaXNJbkRldmVsb3Blck1vZGUpIHsKLSAgICAgICAgICAgIGxvY2FsZUxpc3QucmVtb3ZlKCJhci1YQiIpOwotICAgICAgICAgICAgbG9jYWxlTGlzdC5yZW1vdmUoImVuLVhBIik7CisgICAgICAgICAgICBmb3IgKFN0cmluZyBsb2NhbGUgOiBwc2V1ZG9Mb2NhbGVzKSB7CisgICAgICAgICAgICAgICAgbG9jYWxlTGlzdC5yZW1vdmUobG9jYWxlKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIENvbGxlY3Rpb25zLnNvcnQobG9jYWxlTGlzdCk7CkBAIC0yNDAsMTMgKzI1NSwyNCBAQAogICAgIC8qKgogICAgICAqIFJlcXVlc3RzIHRoZSBzeXN0ZW0gdG8gdXBkYXRlIHRoZSBzeXN0ZW0gbG9jYWxlLiBOb3RlIHRoYXQgdGhlIHN5c3RlbSBsb29rcyBoYWx0ZWQKICAgICAgKiBmb3IgYSB3aGlsZSBkdXJpbmcgdGhlIExvY2FsZSBtaWdyYXRpb24sIHNvIHRoZSBjYWxsZXIgbmVlZCB0byB0YWtlIGNhcmUgb2YgaXQuCisgICAgICoKKyAgICAgKiBAc2VlICN1cGRhdGVMb2NhbGVzKExvY2FsZUxpc3QpCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIHVwZGF0ZUxvY2FsZShMb2NhbGUgbG9jYWxlKSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBJQWN0aXZpdHlNYW5hZ2VyIGFtID0gQWN0aXZpdHlNYW5hZ2VyTmF0aXZlLmdldERlZmF1bHQoKTsKLSAgICAgICAgICAgIENvbmZpZ3VyYXRpb24gY29uZmlnID0gYW0uZ2V0Q29uZmlndXJhdGlvbigpOworICAgICAgICB1cGRhdGVMb2NhbGVzKG5ldyBMb2NhbGVMaXN0KGxvY2FsZSkpOworICAgIH0KIAotICAgICAgICAgICAgY29uZmlnLnNldExvY2FsZShsb2NhbGUpOworICAgIC8qKgorICAgICAqIFJlcXVlc3RzIHRoZSBzeXN0ZW0gdG8gdXBkYXRlIHRoZSBsaXN0IG9mIHN5c3RlbSBsb2NhbGVzLgorICAgICAqIE5vdGUgdGhhdCB0aGUgc3lzdGVtIGxvb2tzIGhhbHRlZCBmb3IgYSB3aGlsZSBkdXJpbmcgdGhlIExvY2FsZSBtaWdyYXRpb24sCisgICAgICogc28gdGhlIGNhbGxlciBuZWVkIHRvIHRha2UgY2FyZSBvZiBpdC4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgdXBkYXRlTG9jYWxlcyhMb2NhbGVMaXN0IGxvY2FsZXMpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGZpbmFsIElBY3Rpdml0eU1hbmFnZXIgYW0gPSBBY3Rpdml0eU1hbmFnZXJOYXRpdmUuZ2V0RGVmYXVsdCgpOworICAgICAgICAgICAgZmluYWwgQ29uZmlndXJhdGlvbiBjb25maWcgPSBhbS5nZXRDb25maWd1cmF0aW9uKCk7CisKKyAgICAgICAgICAgIGNvbmZpZy5zZXRMb2NhbGVzKGxvY2FsZXMpOwogICAgICAgICAgICAgY29uZmlnLnVzZXJTZXRMb2NhbGUgPSB0cnVlOwogCiAgICAgICAgICAgICBhbS51cGRhdGVDb25maWd1cmF0aW9uKGNvbmZpZyk7CkBAIC0yNTYsNCArMjgyLDE5IEBACiAgICAgICAgICAgICAvLyBJbnRlbnRpb25hbGx5IGxlZnQgYmxhbmsKICAgICAgICAgfQogICAgIH0KKworICAgIC8qKgorICAgICAqIEdldCB0aGUgbG9jYWxlIGxpc3QuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFRoZSBsb2NhbGUgbGlzdC4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIExvY2FsZUxpc3QgZ2V0TG9jYWxlcygpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJldHVybiBBY3Rpdml0eU1hbmFnZXJOYXRpdmUuZ2V0RGVmYXVsdCgpCisgICAgICAgICAgICAgICAgICAgIC5nZXRDb25maWd1cmF0aW9uKCkuZ2V0TG9jYWxlcygpOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgLy8gSWYgc29tZXRoaW5nIHdlbnQgd3JvbmcKKyAgICAgICAgICAgIHJldHVybiBMb2NhbGVMaXN0LmdldERlZmF1bHQoKTsKKyAgICAgICAgfQorICAgIH0KIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9hcHAvTG9jYWxlUGlja2VyV2l0aFJlZ2lvbi5qYXZhIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL2FwcC9Mb2NhbGVQaWNrZXJXaXRoUmVnaW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I4Zjg2NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9hcHAvTG9jYWxlUGlja2VyV2l0aFJlZ2lvbi5qYXZhCkBAIC0wLDAgKzEsMjMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5pbnRlcm5hbC5hcHA7CisKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SOworCitpbXBvcnQgYW5kcm9pZC5hcHAuTGlzdEZyYWdtZW50OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzOworaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOworaW1wb3J0IGFuZHJvaWQudXRpbC5BcnJheU1hcDsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuTGF5b3V0SW5mbGF0ZXI7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdHcm91cDsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5BcnJheUFkYXB0ZXI7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuTGlzdFZpZXc7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuVGV4dFZpZXc7CisKK2ltcG9ydCBqYXZhLnRleHQuQ29sbGF0b3I7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkNvbXBhcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitjbGFzcyBMb2NhbGVBZGFwdGVyIGV4dGVuZHMgQXJyYXlBZGFwdGVyPExvY2FsZVBpY2tlci5Mb2NhbGVJbmZvPiB7CisgICAgZmluYWwgcHJpdmF0ZSBNYXA8U3RyaW5nLCBMb2NhbGVQaWNrZXIuTG9jYWxlSW5mbz4gbUxldmVsT25lID0gbmV3IEFycmF5TWFwPD4oKTsKKyAgICBmaW5hbCBwcml2YXRlIE1hcDxTdHJpbmcsIEhhc2hTZXQ8TG9jYWxlUGlja2VyLkxvY2FsZUluZm8+PiBtTGV2ZWxUd28gPSBuZXcgQXJyYXlNYXA8PigpOworICAgIGZpbmFsIHByaXZhdGUgTGF5b3V0SW5mbGF0ZXIgbUluZmxhdGVyOworCisgICAgZmluYWwgc3RhdGljIGNsYXNzIExvY2FsZUF3YXJlQ29tcGFyYXRvciBpbXBsZW1lbnRzIENvbXBhcmF0b3I8TG9jYWxlUGlja2VyLkxvY2FsZUluZm8+IHsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBDb2xsYXRvciBtQ29sbGF0b3I7CisKKyAgICAgICAgcHVibGljIExvY2FsZUF3YXJlQ29tcGFyYXRvcihMb2NhbGUgc29ydExvY2FsZSkgeworICAgICAgICAgICAgbUNvbGxhdG9yID0gQ29sbGF0b3IuZ2V0SW5zdGFuY2Uoc29ydExvY2FsZSk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGludCBjb21wYXJlKExvY2FsZVBpY2tlci5Mb2NhbGVJbmZvIGxocywgTG9jYWxlUGlja2VyLkxvY2FsZUluZm8gcmhzKSB7CisgICAgICAgICAgICByZXR1cm4gbUNvbGxhdG9yLmNvbXBhcmUobGhzLmdldExhYmVsKCksIHJocy5nZXRMYWJlbCgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBMaXN0PExvY2FsZT4gZ2V0Q3VyYXRlZExvY2FsZUxpc3QoQ29udGV4dCBjb250ZXh0KSB7CisgICAgICAgIGZpbmFsIFJlc291cmNlcyByZXNvdXJjZXMgPSBjb250ZXh0LmdldFJlc291cmNlcygpOworICAgICAgICBmaW5hbCBTdHJpbmdbXSBzdXBwb3J0ZWRMb2NhbGVDb2RlcyA9IHJlc291cmNlcy5nZXRTdHJpbmdBcnJheShSLmFycmF5LnN1cHBvcnRlZF9sb2NhbGVzKTsKKworICAgICAgICBmaW5hbCBBcnJheUxpc3Q8TG9jYWxlPiByZXN1bHQgPSBuZXcgQXJyYXlMaXN0PD4oc3VwcG9ydGVkTG9jYWxlQ29kZXMubGVuZ3RoKTsKKyAgICAgICAgZm9yIChTdHJpbmcgbG9jYWxlSWQgOiBzdXBwb3J0ZWRMb2NhbGVDb2RlcykgeworICAgICAgICAgICAgTG9jYWxlIGxvY2FsZSA9IExvY2FsZS5mb3JMYW5ndWFnZVRhZyhsb2NhbGVJZCk7CisgICAgICAgICAgICBpZiAoIWxvY2FsZS5nZXRDb3VudHJ5KCkuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFkZChMb2NhbGUuZm9yTGFuZ3VhZ2VUYWcobG9jYWxlSWQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHB1YmxpYyBMb2NhbGVBZGFwdGVyKENvbnRleHQgY29udGV4dCkgeworICAgICAgICB0aGlzKGNvbnRleHQsIGdldEN1cmF0ZWRMb2NhbGVMaXN0KGNvbnRleHQpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgTG9jYWxlIGdldEJhc2VMb2NhbGUoTG9jYWxlIGxvY2FsZSkgeworICAgICAgICByZXR1cm4gbmV3IExvY2FsZS5CdWlsZGVyKCkKKyAgICAgICAgICAgICAgICAuc2V0TG9jYWxlKGxvY2FsZSkKKyAgICAgICAgICAgICAgICAuc2V0UmVnaW9uKCIiKQorICAgICAgICAgICAgICAgIC5idWlsZCgpOworICAgIH0KKworICAgIC8vIFRoZXJlIGlzIG5vIGdvb2QgQVBJIGF2YWlsYWJsZSBmb3IgdGhpcywgbm90IGV2ZW4gaW4gSUNVLgorICAgIC8vIFdlIGNhbiByZXZpc2l0IHRoaXMgaWYgd2UgZ2V0IHNvbWUgSUNVIHN1cHBvcnQgbGF0ZXIKKyAgICAvLworICAgIC8vIFRoZXJlIGFyZSBjdXJyZW50bHkgc2V2ZXJhbCB0aWNrZXRzIHJlcXVlc3RpbmcgdGhpcyBmZWF0dXJlOgorICAgIC8vICogSUNVIG5lZWRzIHRvIHByb3ZpZGUgYW4gZWFzeSB3YXkgdG8gdGl0bGVjYXNlIG9ubHkgb25lIGZpcnN0IGxldHRlcgorICAgIC8vICAgaHR0cDovL2J1Z3MuaWN1LXByb2plY3Qub3JnL3RyYWMvdGlja2V0LzExNzI5CisgICAgLy8gKiBBZGQgImluaXRpYWwgY2FzZSIKKyAgICAvLyAgICBodHRwOi8vYnVncy5pY3UtcHJvamVjdC5vcmcvdHJhYy90aWNrZXQvODM5NAorICAgIC8vICogQWRkIGNvZGUgZm9yIGluaXRpYWxDYXNlLCB0b1RpdGxlY2FzZSBkb24ndCBtb2RpZnkgYWZ0ZXIgTHQsCisgICAgLy8gICBhdm9pZCA0OUVycywgbG93LWxldmVsIGxhbmd1YWdlLXNwZWNpZmljIGNhc2luZworICAgIC8vICAgaHR0cDovL2J1Z3MuaWN1LXByb2plY3Qub3JnL3RyYWMvdGlja2V0LzEwNDEwCisgICAgLy8gKiBCcmVha0l0ZXJhdG9yLmdldEZpcnN0SW5zdGFuY2U6IE9mdGVuIHlvdSBuZWVkIHRvIHRpdGxlY2FzZSBqdXN0IHRoZSBmaXJzdAorICAgIC8vICAgd29yZCwgYW5kIGxlYXZlIHRoZSByZXN0IG9mIHRoZSBzdHJpbmcgYWxvbmUuICAoY2xvc2VkIGFzIGR1cGxpY2F0ZSkKKyAgICAvLyAgIGh0dHA6Ly9idWdzLmljdS1wcm9qZWN0Lm9yZy90cmFjL3RpY2tldC84OTQ2CisgICAgLy8KKyAgICAvLyBBIChjbHVua3kpIG9wdGlvbiB3aXRoIHRoZSBjdXJyZW50IElDVSBBUEkgaXM6CisgICAgLy8gICBCcmVha0l0ZXJhdG9yIGJyZWFrSXRlcmF0b3IgPSBCcmVha0l0ZXJhdG9yLmdldFNlbnRlbmNlSW5zdGFuY2UobG9jYWxlKTsKKyAgICAvLyAgIFN0cmluZyByZXN1bHQgPSBVQ2hhcmFjdGVyLnRvVGl0bGVDYXNlKGxvY2FsZSwKKyAgICAvLyAgICAgICBzb3VyY2UsIGJyZWFrSXRlcmF0b3IsIFVDaGFyYWN0ZXIuVElUTEVDQVNFX05PX0xPV0VSQ0FTRSk7CisgICAgLy8gVGhhdCBhbHNvIG1lYW5zIGNyZWF0aW5nIEJyZWFrSXRlcmF0b3MgZm9yIGVhY2ggbG9jYWxlLiBFeHBlbnNpdmUuLi4KKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdG9UaXRsZUNhc2UoU3RyaW5nIHMsIExvY2FsZSBsb2NhbGUpIHsKKyAgICAgICAgaWYgKHMubGVuZ3RoKCkgPT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIHM7CisgICAgICAgIH0KKyAgICAgICAgZmluYWwgaW50IGZpcnN0Q29kZVBvaW50TGVuID0gcy5vZmZzZXRCeUNvZGVQb2ludHMoMCwgMSk7CisgICAgICAgIHJldHVybiBzLnN1YnN0cmluZygwLCBmaXJzdENvZGVQb2ludExlbikudG9VcHBlckNhc2UobG9jYWxlKQorICAgICAgICAgICAgICAgICsgcy5zdWJzdHJpbmcoZmlyc3RDb2RlUG9pbnRMZW4pOworICAgIH0KKworICAgIHB1YmxpYyBMb2NhbGVBZGFwdGVyKENvbnRleHQgY29udGV4dCwgTGlzdDxMb2NhbGU+IGxvY2FsZXMpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgUi5sYXlvdXQubG9jYWxlX3BpY2tlcl9pdGVtLCBSLmlkLmxvY2FsZSk7CisgICAgICAgIG1JbmZsYXRlciA9IChMYXlvdXRJbmZsYXRlcikgY29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuTEFZT1VUX0lORkxBVEVSX1NFUlZJQ0UpOworCisgICAgICAgIGZvciAoTG9jYWxlIGxvY2FsZSA6IGxvY2FsZXMpIHsKKyAgICAgICAgICAgIExvY2FsZSBiYXNlTG9jYWxlID0gZ2V0QmFzZUxvY2FsZShsb2NhbGUpOworICAgICAgICAgICAgU3RyaW5nIGxhbmd1YWdlID0gYmFzZUxvY2FsZS50b0xhbmd1YWdlVGFnKCk7CisgICAgICAgICAgICBpZiAoIW1MZXZlbE9uZS5jb250YWluc0tleShsYW5ndWFnZSkpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgbGFiZWwgPSB0b1RpdGxlQ2FzZShiYXNlTG9jYWxlLmdldERpc3BsYXlOYW1lKGJhc2VMb2NhbGUpLCBiYXNlTG9jYWxlKTsKKyAgICAgICAgICAgICAgICBtTGV2ZWxPbmUucHV0KGxhbmd1YWdlLCBuZXcgTG9jYWxlUGlja2VyLkxvY2FsZUluZm8obGFiZWwsIGJhc2VMb2NhbGUpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZmluYWwgSGFzaFNldDxMb2NhbGVQaWNrZXIuTG9jYWxlSW5mbz4gc3ViTG9jYWxlczsKKyAgICAgICAgICAgIGlmIChtTGV2ZWxUd28uY29udGFpbnNLZXkobGFuZ3VhZ2UpKSB7CisgICAgICAgICAgICAgICAgc3ViTG9jYWxlcyA9IG1MZXZlbFR3by5nZXQobGFuZ3VhZ2UpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzdWJMb2NhbGVzID0gbmV3IEhhc2hTZXQ8PigpOworICAgICAgICAgICAgICAgIG1MZXZlbFR3by5wdXQobGFuZ3VhZ2UsIHN1YkxvY2FsZXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgU3RyaW5nIGxhYmVsID0gbG9jYWxlLmdldERpc3BsYXlDb3VudHJ5KGxvY2FsZSk7CisgICAgICAgICAgICBzdWJMb2NhbGVzLmFkZChuZXcgTG9jYWxlUGlja2VyLkxvY2FsZUluZm8obGFiZWwsIGxvY2FsZSkpOworICAgICAgICB9CisKKyAgICAgICAgc2V0QWRhcHRlckxldmVsKG51bGwpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldEFkYXB0ZXJMZXZlbChTdHJpbmcgcGFyZW50TG9jYWxlKSB7CisgICAgICAgIHRoaXMuY2xlYXIoKTsKKworICAgICAgICBpZiAocGFyZW50TG9jYWxlID09IG51bGwpIHsKKyAgICAgICAgICAgIHRoaXMuYWRkQWxsKG1MZXZlbE9uZS52YWx1ZXMoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aGlzLmFkZEFsbChtTGV2ZWxUd28uZ2V0KHBhcmVudExvY2FsZSkpOworICAgICAgICB9CisKKyAgICAgICAgTG9jYWxlIHNvcnRMb2NhbGUgPSAocGFyZW50TG9jYWxlID09IG51bGwpCisgICAgICAgICAgICAgICAgPyBMb2NhbGUuZ2V0RGVmYXVsdCgpCisgICAgICAgICAgICAgICAgOiBMb2NhbGUuZm9yTGFuZ3VhZ2VUYWcocGFyZW50TG9jYWxlKTsKKyAgICAgICAgTG9jYWxlQXdhcmVDb21wYXJhdG9yIGNvbXBhcmF0b3IgPSBuZXcgTG9jYWxlQXdhcmVDb21wYXJhdG9yKHNvcnRMb2NhbGUpOworICAgICAgICB0aGlzLnNvcnQoY29tcGFyYXRvcik7CisKKyAgICAgICAgdGhpcy5ub3RpZnlEYXRhU2V0Q2hhbmdlZCgpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBWaWV3IGdldFZpZXcoaW50IHBvc2l0aW9uLCBWaWV3IGNvbnZlcnRWaWV3LCBWaWV3R3JvdXAgcGFyZW50KSB7CisgICAgICAgIFZpZXcgdmlldzsKKyAgICAgICAgVGV4dFZpZXcgdGV4dDsKKyAgICAgICAgaWYgKGNvbnZlcnRWaWV3ID09IG51bGwpIHsKKyAgICAgICAgICAgIHZpZXcgPSBtSW5mbGF0ZXIuaW5mbGF0ZShSLmxheW91dC5sb2NhbGVfcGlja2VyX2l0ZW0sIHBhcmVudCwgZmFsc2UpOworICAgICAgICAgICAgdGV4dCA9IChUZXh0Vmlldykgdmlldy5maW5kVmlld0J5SWQoUi5pZC5sb2NhbGUpOworICAgICAgICAgICAgdmlldy5zZXRUYWcodGV4dCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2aWV3ID0gY29udmVydFZpZXc7CisgICAgICAgICAgICB0ZXh0ID0gKFRleHRWaWV3KSB2aWV3LmdldFRhZygpOworICAgICAgICB9CisgICAgICAgIExvY2FsZVBpY2tlci5Mb2NhbGVJbmZvIGl0ZW0gPSBnZXRJdGVtKHBvc2l0aW9uKTsKKyAgICAgICAgdGV4dC5zZXRUZXh0KGl0ZW0uZ2V0TGFiZWwoKSk7CisgICAgICAgIHRleHQuc2V0VGV4dExvY2FsZShpdGVtLmdldExvY2FsZSgpKTsKKyAgICAgICAgcmV0dXJuIHZpZXc7CisgICAgfQorfQorCitwdWJsaWMgY2xhc3MgTG9jYWxlUGlja2VyV2l0aFJlZ2lvbiBleHRlbmRzIExpc3RGcmFnbWVudCB7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IExJU1RfTU9ERV9MQU5HVUFHRSA9IDA7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IExJU1RfTU9ERV9DT1VOVFJZID0gMTsKKworICAgIHByaXZhdGUgTG9jYWxlQWRhcHRlciBtQWRhcHRlcjsKKyAgICBwcml2YXRlIGludCBtRGlzcGxheU1vZGUgPSBMSVNUX01PREVfTEFOR1VBR0U7CisKKyAgICBwdWJsaWMgc3RhdGljIGludGVyZmFjZSBMb2NhbGVTZWxlY3Rpb25MaXN0ZW5lciB7CisgICAgICAgIC8vIFlvdSBjYW4gYWRkIGFueSBhcmd1bWVudCBpZiB5b3UgcmVhbGx5IG5lZWQgaXQuLi4KKyAgICAgICAgcHVibGljIHZvaWQgb25Mb2NhbGVTZWxlY3RlZChMb2NhbGUgbG9jYWxlKTsKKyAgICB9CisKKyAgICBwcml2YXRlIExvY2FsZVNlbGVjdGlvbkxpc3RlbmVyIG1MaXN0ZW5lciA9IG51bGw7CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvbkFjdGl2aXR5Q3JlYXRlZChmaW5hbCBCdW5kbGUgc2F2ZWRJbnN0YW5jZVN0YXRlKSB7CisgICAgICAgIHN1cGVyLm9uQWN0aXZpdHlDcmVhdGVkKHNhdmVkSW5zdGFuY2VTdGF0ZSk7CisKKyAgICAgICAgbUFkYXB0ZXIgPSBuZXcgTG9jYWxlQWRhcHRlcihnZXRDb250ZXh0KCkpOworICAgICAgICBtQWRhcHRlci5zZXRBZGFwdGVyTGV2ZWwobnVsbCk7CisgICAgICAgIHNldExpc3RBZGFwdGVyKG1BZGFwdGVyKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRMb2NhbGVTZWxlY3Rpb25MaXN0ZW5lcihMb2NhbGVTZWxlY3Rpb25MaXN0ZW5lciBsaXN0ZW5lcikgeworICAgICAgICBtTGlzdGVuZXIgPSBsaXN0ZW5lcjsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvblJlc3VtZSgpIHsKKyAgICAgICAgc3VwZXIub25SZXN1bWUoKTsKKyAgICAgICAgZ2V0TGlzdFZpZXcoKS5yZXF1ZXN0Rm9jdXMoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBFYWNoIGxpc3RlbmVyIG5lZWRzIHRvIGNhbGwge0BsaW5rIExvY2FsZVBpY2tlci51cGRhdGVMb2NhbGUoTG9jYWxlKX0gdG8gYWN0dWFsbHkKKyAgICAgKiBjaGFuZ2UgdGhlIGxvY2FsZS4KKyAgICAgKiA8cC8+CisgICAgICogV2UgZG9uJ3QgY2FsbCB7QGxpbmsgTG9jYWxlUGlja2VyLnVwZGF0ZUxvY2FsZShMb2NhbGUpfSBhdXRvbWF0aWNhbGx5LCBhcyBpdCBoYWx0cworICAgICAqIHRoZSBzeXN0ZW0gZm9yIGEgbW9tZW50IGFuZCBzb21lIGNhbGxlcnMgd29uJ3Qgd2FudCBpdC4KKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvbkxpc3RJdGVtQ2xpY2soTGlzdFZpZXcgbCwgVmlldyB2LCBpbnQgcG9zaXRpb24sIGxvbmcgaWQpIHsKKyAgICAgICAgZmluYWwgTG9jYWxlIGxvY2FsZSA9ICgoTG9jYWxlUGlja2VyLkxvY2FsZUluZm8pIGdldExpc3RBZGFwdGVyKCkuZ2V0SXRlbShwb3NpdGlvbikpLmxvY2FsZTsKKyAgICAgICAgLy8gVE9ETzogaGFuZGxlIHRoZSBiYWNrIGJ1dHRvbnMgdG8gcmV0dXJuIHRvIHRoZSBsYW5ndWFnZSBsaXN0CisgICAgICAgIGlmIChtRGlzcGxheU1vZGUgPT0gTElTVF9NT0RFX0xBTkdVQUdFKSB7CisgICAgICAgICAgICBtRGlzcGxheU1vZGUgPSBMSVNUX01PREVfQ09VTlRSWTsKKyAgICAgICAgICAgIG1BZGFwdGVyLnNldEFkYXB0ZXJMZXZlbChsb2NhbGUudG9MYW5ndWFnZVRhZygpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAobUxpc3RlbmVyICE9IG51bGwpIHsKKyAgICAgICAgICAgIG1MaXN0ZW5lci5vbkxvY2FsZVNlbGVjdGVkKGxvY2FsZSk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvYXBwL1Jlc29sdmVyQWN0aXZpdHkuamF2YSBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9hcHAvUmVzb2x2ZXJBY3Rpdml0eS5qYXZhCmluZGV4IGJhMDkxMmEuLmFhMzhkZTcgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9hcHAvUmVzb2x2ZXJBY3Rpdml0eS5qYXZhCisrKyBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9hcHAvUmVzb2x2ZXJBY3Rpdml0eS5qYXZhCkBAIC03MTgsOSArNzE4LDkgQEAKIAogICAgICAgICAgICAgICAgICAgICBpZiAocmkuaGFuZGxlQWxsV2ViRGF0YVVSSSkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGRlZmF1bHQgQnJvd3NlciBpZiBuZWVkZWQKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBwYWNrYWdlTmFtZSA9IHBtLmdldERlZmF1bHRCcm93c2VyUGFja2FnZU5hbWUodXNlcklkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBwYWNrYWdlTmFtZSA9IHBtLmdldERlZmF1bHRCcm93c2VyUGFja2FnZU5hbWVBc1VzZXIodXNlcklkKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChUZXh0VXRpbHMuaXNFbXB0eShwYWNrYWdlTmFtZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbS5zZXREZWZhdWx0QnJvd3NlclBhY2thZ2VOYW1lKHJpLmFjdGl2aXR5SW5mby5wYWNrYWdlTmFtZSwgdXNlcklkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbS5zZXREZWZhdWx0QnJvd3NlclBhY2thZ2VOYW1lQXNVc2VyKHJpLmFjdGl2aXR5SW5mby5wYWNrYWdlTmFtZSwgdXNlcklkKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBEb21haW4gVmVyaWZpY2F0aW9uIHN0YXR1cwpAQCAtNzM3LDcgKzczNyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3JpZXMuY29udGFpbnMoSW50ZW50LkNBVEVHT1JZX0JST1dTQUJMRSk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0h0dHBPckh0dHBzICYmIGlzVmlld0FjdGlvbiAmJiBoYXNDYXRlZ29yeUJyb3dzYWJsZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBtLnVwZGF0ZUludGVudFZlcmlmaWNhdGlvblN0YXR1cyhwYWNrYWdlTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbS51cGRhdGVJbnRlbnRWZXJpZmljYXRpb25TdGF0dXNBc1VzZXIocGFja2FnZU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlTWFuYWdlci5JTlRFTlRfRklMVEVSX0RPTUFJTl9WRVJJRklDQVRJT05fU1RBVFVTX0FMV0FZUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJJZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvYXBwL1Rvb2xiYXJBY3Rpb25CYXIuamF2YSBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9hcHAvVG9vbGJhckFjdGlvbkJhci5qYXZhCmluZGV4IDlkMTI4MDMuLjU3NWVmMDIgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9hcHAvVG9vbGJhckFjdGlvbkJhci5qYXZhCisrKyBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9hcHAvVG9vbGJhckFjdGlvbkJhci5qYXZhCkBAIC0yOSwxMCArMjksMTQgQEAKIGltcG9ydCBhbmRyb2lkLnZpZXcuTWVudTsKIGltcG9ydCBhbmRyb2lkLnZpZXcuTWVudUl0ZW07CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXcuT25Gb2N1c0NoYW5nZUxpc3RlbmVyOworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdQYXJlbnQ7CiBpbXBvcnQgYW5kcm9pZC52aWV3LldpbmRvdzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93Q2FsbGJhY2tXcmFwcGVyOwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlNwaW5uZXJBZGFwdGVyOwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlRvb2xiYXI7CisKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC52aWV3Lm1lbnUuTWVudUJ1aWxkZXI7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudmlldy5tZW51Lk1lbnVQcmVzZW50ZXI7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwud2lkZ2V0LkRlY29yVG9vbGJhcjsKQEAgLTQ3OSw2ICs0ODMsMTIgQEAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25EZXN0cm95KCkgeworICAgICAgICAvLyBSZW1vdmUgYW55IGludmFsaWRhdGlvbiBjYWxsYmFja3MKKyAgICAgICAgbURlY29yVG9vbGJhci5nZXRWaWV3R3JvdXAoKS5yZW1vdmVDYWxsYmFja3MobU1lbnVJbnZhbGlkYXRvcik7CisgICAgfQorCiAgICAgcHVibGljIHZvaWQgYWRkT25NZW51VmlzaWJpbGl0eUxpc3RlbmVyKE9uTWVudVZpc2liaWxpdHlMaXN0ZW5lciBsaXN0ZW5lcikgewogICAgICAgICBtTWVudVZpc2liaWxpdHlMaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsKICAgICB9CkBAIC00OTksNiArNTA5LDEyIEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICAvKiogQGhpZGUgKi8KKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiByZXF1ZXN0Rm9jdXMoKSB7CisgICAgICAgIHJldHVybiByZXF1ZXN0Rm9jdXMobURlY29yVG9vbGJhci5nZXRWaWV3R3JvdXAoKSk7CisgICAgfQorCiAgICAgcHJpdmF0ZSBjbGFzcyBUb29sYmFyQ2FsbGJhY2tXcmFwcGVyIGV4dGVuZHMgV2luZG93Q2FsbGJhY2tXcmFwcGVyIHsKICAgICAgICAgcHVibGljIFRvb2xiYXJDYWxsYmFja1dyYXBwZXIoV2luZG93LkNhbGxiYWNrIHdyYXBwZWQpIHsKICAgICAgICAgICAgIHN1cGVyKHdyYXBwZWQpOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL2FwcC9XaW5kb3dEZWNvckFjdGlvbkJhci5qYXZhIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL2FwcC9XaW5kb3dEZWNvckFjdGlvbkJhci5qYXZhCmluZGV4IDA1Y2ZkODEuLmM2YmYxYjQgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9hcHAvV2luZG93RGVjb3JBY3Rpb25CYXIuamF2YQorKysgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvYXBwL1dpbmRvd0RlY29yQWN0aW9uQmFyLmphdmEKQEAgLTE4LDYgKzE4LDggQEAKIAogaW1wb3J0IGFuZHJvaWQuYW5pbWF0aW9uLlZhbHVlQW5pbWF0b3I7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5UeXBlZEFycmF5OworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3Lk9uRm9jdXNDaGFuZ2VMaXN0ZW5lcjsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwOwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3UGFyZW50OwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlRvb2xiYXI7CiAKQEAgLTk1MCw2ICs5NTIsMTIgQEAKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAorICAgIC8qKiBAaGlkZSAqLworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIHJlcXVlc3RGb2N1cygpIHsKKyAgICAgICAgcmV0dXJuIHJlcXVlc3RGb2N1cyhtRGVjb3JUb29sYmFyLmdldFZpZXdHcm91cCgpKTsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBAaGlkZQogICAgICAqLwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL2xvZ2dpbmcvTWV0cmljc0xvZ2dlci5qYXZhIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL2xvZ2dpbmcvTWV0cmljc0xvZ2dlci5qYXZhCmluZGV4IGUyNzZiYzYuLjRiODIxYWIgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9sb2dnaW5nL01ldHJpY3NMb2dnZXIuamF2YQorKysgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvbG9nZ2luZy9NZXRyaWNzTG9nZ2VyLmphdmEKQEAgLTM1LDYgKzM1LDkgQEAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBQ1RJT05fWkVOX0FMTE9XX0xJR0hUUyA9IDI2MjsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOT1RJRklDQVRJT05fVE9QSUNfTk9USUZJQ0FUSU9OID0gMjYzOwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFDVElPTl9ERUZBVUxUX1NNU19BUFBfQ0hBTkdFRCA9IDI2NDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBRU19DT0xPUl9NQVRSSVggPSAyNjU7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUVNfQ1VTVE9NID0gMjY2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFDVElPTl9aRU5fQUxMT1dfU0NSRUVOX09OID0gMjY3OwogCiAgICAgLyoqCiAgICAgICogTG9nZ2VkIHdoZW4gdGhlIHVzZXIgZG9ja3MgYSB3aW5kb3cgZnJvbSByZWNlbnRzIGJ5IGxvbmdwcmVzc2luZyBhIHRhc2sgYW5kIGRyYWdnaW5nIGl0IHRvCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvb3MvWnlnb3RlSW5pdC5qYXZhIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL29zL1p5Z290ZUluaXQuamF2YQppbmRleCA4ZTMxOGEyLi40YTFmN2Y0IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvb3MvWnlnb3RlSW5pdC5qYXZhCisrKyBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9vcy9aeWdvdGVJbml0LmphdmEKQEAgLTUzNCw3ICs1MzQsNyBAQAogICAgICAgICBTdHJpbmcgYXJnc1tdID0gewogICAgICAgICAgICAgIi0tc2V0dWlkPTEwMDAiLAogICAgICAgICAgICAgIi0tc2V0Z2lkPTEwMDAiLAotICAgICAgICAgICAgIi0tc2V0Z3JvdXBzPTEwMDEsMTAwMiwxMDAzLDEwMDQsMTAwNSwxMDA2LDEwMDcsMTAwOCwxMDA5LDEwMTAsMTAxOCwxMDIxLDEwMzIsMzAwMSwzMDAyLDMwMDMsMzAwNiwzMDA3LDMwMDkiLAorICAgICAgICAgICAgIi0tc2V0Z3JvdXBzPTEwMDEsMTAwMiwxMDAzLDEwMDQsMTAwNSwxMDA2LDEwMDcsMTAwOCwxMDA5LDEwMTAsMTAxOCwxMDIxLDEwMzIsMzAwMSwzMDAyLDMwMDMsMzAwNiwzMDA3LDMwMDksMzAxMCIsCiAgICAgICAgICAgICAiLS1jYXBhYmlsaXRpZXM9IiArIGNhcGFiaWxpdGllcyArICIsIiArIGNhcGFiaWxpdGllcywKICAgICAgICAgICAgICItLW5pY2UtbmFtZT1zeXN0ZW1fc2VydmVyIiwKICAgICAgICAgICAgICItLXJ1bnRpbWUtYXJncyIsCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvcG9saWN5L1Bob25lV2luZG93LmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvcG9saWN5L1Bob25lV2luZG93LmphdmEKaW5kZXggMmQ4YmZkNC4uZmFmZTNkMSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3BvbGljeS9QaG9uZVdpbmRvdy5qYXZhCisrKyBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9wb2xpY3kvUGhvbmVXaW5kb3cuamF2YQpAQCAtMjc0LDYgKzI3NCw4IEBACiAKICAgICBwcml2YXRlIGludCBtRGVjb3JDYXB0aW9uU2hhZGUgPSBERUNPUl9DQVBUSU9OX1NIQURFX0FVVE87CiAKKyAgICBwcml2YXRlIGJvb2xlYW4gbVVzZURlY29yQ29udGV4dCA9IGZhbHNlOworCiAgICAgc3RhdGljIGNsYXNzIFdpbmRvd01hbmFnZXJIb2xkZXIgewogICAgICAgICBzdGF0aWMgZmluYWwgSVdpbmRvd01hbmFnZXIgc1dpbmRvd01hbmFnZXIgPSBJV2luZG93TWFuYWdlci5TdHViLmFzSW50ZXJmYWNlKAogICAgICAgICAgICAgICAgIFNlcnZpY2VNYW5hZ2VyLmdldFNlcnZpY2UoIndpbmRvdyIpKTsKQEAgLTI4Niw4ICsyODgsMTQgQEAKICAgICAgICAgbUxheW91dEluZmxhdGVyID0gTGF5b3V0SW5mbGF0ZXIuZnJvbShjb250ZXh0KTsKICAgICB9CiAKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RvciBmb3IgbWFpbiB3aW5kb3cgb2YgYW4gYWN0aXZpdHkuCisgICAgICovCiAgICAgcHVibGljIFBob25lV2luZG93KENvbnRleHQgY29udGV4dCwgV2luZG93IHByZXNlcnZlZFdpbmRvdykgewogICAgICAgICB0aGlzKGNvbnRleHQpOworICAgICAgICAvLyBPbmx5IG1haW4gYWN0aXZpdHkgd2luZG93cyB1c2UgZGVjb3IgY29udGV4dCwgYWxsIHRoZSBvdGhlciB3aW5kb3dzIGRlcGVuZCBvbiB3aGF0ZXZlcgorICAgICAgICAvLyBjb250ZXh0IHRoYXQgd2FzIGdpdmVuIHRvIHRoZW0uCisgICAgICAgIG1Vc2VEZWNvckNvbnRleHQgPSB0cnVlOwogICAgICAgICBpZiAocHJlc2VydmVkV2luZG93ICE9IG51bGwpIHsKICAgICAgICAgICAgIG1EZWNvciA9IChEZWNvclZpZXcpIHByZXNlcnZlZFdpbmRvdy5nZXREZWNvclZpZXcoKTsKICAgICAgICAgICAgIG1FbGV2YXRpb24gPSBwcmVzZXJ2ZWRXaW5kb3cuZ2V0RWxldmF0aW9uKCk7CkBAIC0yMjU5LDE1ICsyMjY3LDE5IEBACiAgICAgICAgIC8vIFN5c3RlbSBwcm9jZXNzIGRvZXNuJ3QgaGF2ZSBhcHBsaWNhdGlvbiBjb250ZXh0IGFuZCBpbiB0aGF0IGNhc2Ugd2UgbmVlZCB0byBkaXJlY3RseSB1c2UKICAgICAgICAgLy8gdGhlIGNvbnRleHQgd2UgaGF2ZS4gT3RoZXJ3aXNlIHdlIHdhbnQgdGhlIGFwcGxpY2F0aW9uIGNvbnRleHQsIHNvIHdlIGRvbid0IGNsaW5nIHRvIHRoZQogICAgICAgICAvLyBhY3Rpdml0eS4KLSAgICAgICAgQ29udGV4dCBhcHBsaWNhdGlvbkNvbnRleHQgPSBnZXRDb250ZXh0KCkuZ2V0QXBwbGljYXRpb25Db250ZXh0KCk7CiAgICAgICAgIENvbnRleHQgY29udGV4dDsKLSAgICAgICAgaWYgKGFwcGxpY2F0aW9uQ29udGV4dCA9PSBudWxsKSB7Ci0gICAgICAgICAgICBjb250ZXh0ID0gZ2V0Q29udGV4dCgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29udGV4dCA9IG5ldyBEZWNvckNvbnRleHQoYXBwbGljYXRpb25Db250ZXh0KTsKLSAgICAgICAgICAgIGlmIChtVGhlbWUgIT0gLTEpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LnNldFRoZW1lKG1UaGVtZSk7CisgICAgICAgIGlmIChtVXNlRGVjb3JDb250ZXh0KSB7CisgICAgICAgICAgICBDb250ZXh0IGFwcGxpY2F0aW9uQ29udGV4dCA9IGdldENvbnRleHQoKS5nZXRBcHBsaWNhdGlvbkNvbnRleHQoKTsKKyAgICAgICAgICAgIGlmIChhcHBsaWNhdGlvbkNvbnRleHQgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGNvbnRleHQgPSBnZXRDb250ZXh0KCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNvbnRleHQgPSBuZXcgRGVjb3JDb250ZXh0KGFwcGxpY2F0aW9uQ29udGV4dCk7CisgICAgICAgICAgICAgICAgaWYgKG1UaGVtZSAhPSAtMSkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnNldFRoZW1lKG1UaGVtZSk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY29udGV4dCA9IGdldENvbnRleHQoKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gbmV3IERlY29yVmlldyhjb250ZXh0LCBmZWF0dXJlSWQsIHRoaXMpOwogICAgIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC91dGlsL0FycmF5VXRpbHMuamF2YSBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC91dGlsL0FycmF5VXRpbHMuamF2YQppbmRleCBlODk3MGJjLi4xNmJmOWRkIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdXRpbC9BcnJheVV0aWxzLmphdmEKKysrIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3V0aWwvQXJyYXlVdGlscy5qYXZhCkBAIC0xMjUsMjggKzEyNSwyOCBAQAogICAgIC8qKgogICAgICAqIENoZWNrcyBpZiBnaXZlbiBhcnJheSBpcyBudWxsIG9yIGhhcyB6ZXJvIGVsZW1lbnRzLgogICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgPFQ+IGJvb2xlYW4gaXNFbXB0eShUW10gYXJyYXkpIHsKKyAgICBwdWJsaWMgc3RhdGljIDxUPiBib29sZWFuIGlzRW1wdHkoQE51bGxhYmxlIFRbXSBhcnJheSkgewogICAgICAgICByZXR1cm4gYXJyYXkgPT0gbnVsbCB8fCBhcnJheS5sZW5ndGggPT0gMDsKICAgICB9CiAKICAgICAvKioKICAgICAgKiBDaGVja3MgaWYgZ2l2ZW4gYXJyYXkgaXMgbnVsbCBvciBoYXMgemVybyBlbGVtZW50cy4KICAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNFbXB0eShpbnRbXSBhcnJheSkgeworICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0VtcHR5KEBOdWxsYWJsZSBpbnRbXSBhcnJheSkgewogICAgICAgICByZXR1cm4gYXJyYXkgPT0gbnVsbCB8fCBhcnJheS5sZW5ndGggPT0gMDsKICAgICB9CiAKICAgICAvKioKICAgICAgKiBDaGVja3MgaWYgZ2l2ZW4gYXJyYXkgaXMgbnVsbCBvciBoYXMgemVybyBlbGVtZW50cy4KICAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNFbXB0eShsb25nW10gYXJyYXkpIHsKKyAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNFbXB0eShATnVsbGFibGUgbG9uZ1tdIGFycmF5KSB7CiAgICAgICAgIHJldHVybiBhcnJheSA9PSBudWxsIHx8IGFycmF5Lmxlbmd0aCA9PSAwOwogICAgIH0KIAogICAgIC8qKgogICAgICAqIENoZWNrcyBpZiBnaXZlbiBhcnJheSBpcyBudWxsIG9yIGhhcyB6ZXJvIGVsZW1lbnRzLgogICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0VtcHR5KGJ5dGVbXSBhcnJheSkgeworICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0VtcHR5KEBOdWxsYWJsZSBieXRlW10gYXJyYXkpIHsKICAgICAgICAgcmV0dXJuIGFycmF5ID09IG51bGwgfHwgYXJyYXkubGVuZ3RoID09IDA7CiAgICAgfQogCkBAIC0xNTYsNyArMTU2LDcgQEAKICAgICAgKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIHRvIGNoZWNrIGZvcgogICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgcHJlc2VudCBpbiB0aGUgYXJyYXkKICAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIDxUPiBib29sZWFuIGNvbnRhaW5zKFRbXSBhcnJheSwgVCB2YWx1ZSkgeworICAgIHB1YmxpYyBzdGF0aWMgPFQ+IGJvb2xlYW4gY29udGFpbnMoQE51bGxhYmxlIFRbXSBhcnJheSwgVCB2YWx1ZSkgewogICAgICAgICByZXR1cm4gaW5kZXhPZihhcnJheSwgdmFsdWUpICE9IC0xOwogICAgIH0KIApAQCAtMTY0LDcgKzE2NCw3IEBACiAgICAgICogUmV0dXJuIGZpcnN0IGluZGV4IG9mIHtAY29kZSB2YWx1ZX0gaW4ge0Bjb2RlIGFycmF5fSwgb3Ige0Bjb2RlIC0xfSBpZgogICAgICAqIG5vdCBmb3VuZC4KICAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIDxUPiBpbnQgaW5kZXhPZihUW10gYXJyYXksIFQgdmFsdWUpIHsKKyAgICBwdWJsaWMgc3RhdGljIDxUPiBpbnQgaW5kZXhPZihATnVsbGFibGUgVFtdIGFycmF5LCBUIHZhbHVlKSB7CiAgICAgICAgIGlmIChhcnJheSA9PSBudWxsKSByZXR1cm4gLTE7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgIGlmIChPYmplY3RzLmVxdWFscyhhcnJheVtpXSwgdmFsdWUpKSByZXR1cm4gaTsKQEAgLTE3NSw3ICsxNzUsNyBAQAogICAgIC8qKgogICAgICAqIFRlc3QgaWYgYWxsIHtAY29kZSBjaGVja30gaXRlbXMgYXJlIGNvbnRhaW5lZCBpbiB7QGNvZGUgYXJyYXl9LgogICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgPFQ+IGJvb2xlYW4gY29udGFpbnNBbGwoVFtdIGFycmF5LCBUW10gY2hlY2spIHsKKyAgICBwdWJsaWMgc3RhdGljIDxUPiBib29sZWFuIGNvbnRhaW5zQWxsKEBOdWxsYWJsZSBUW10gYXJyYXksIFRbXSBjaGVjaykgewogICAgICAgICBpZiAoY2hlY2sgPT0gbnVsbCkgcmV0dXJuIHRydWU7CiAgICAgICAgIGZvciAoVCBjaGVja0l0ZW0gOiBjaGVjaykgewogICAgICAgICAgICAgaWYgKCFjb250YWlucyhhcnJheSwgY2hlY2tJdGVtKSkgewpAQCAtMTg1LDcgKzE4NSw3IEBACiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBjb250YWlucyhpbnRbXSBhcnJheSwgaW50IHZhbHVlKSB7CisgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGNvbnRhaW5zKEBOdWxsYWJsZSBpbnRbXSBhcnJheSwgaW50IHZhbHVlKSB7CiAgICAgICAgIGlmIChhcnJheSA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICAgICAgIGZvciAoaW50IGVsZW1lbnQgOiBhcnJheSkgewogICAgICAgICAgICAgaWYgKGVsZW1lbnQgPT0gdmFsdWUpIHsKQEAgLTE5NSw3ICsxOTUsNyBAQAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgcHVibGljIHN0YXRpYyBib29sZWFuIGNvbnRhaW5zKGxvbmdbXSBhcnJheSwgbG9uZyB2YWx1ZSkgeworICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBjb250YWlucyhATnVsbGFibGUgbG9uZ1tdIGFycmF5LCBsb25nIHZhbHVlKSB7CiAgICAgICAgIGlmIChhcnJheSA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICAgICAgIGZvciAobG9uZyBlbGVtZW50IDogYXJyYXkpIHsKICAgICAgICAgICAgIGlmIChlbGVtZW50ID09IHZhbHVlKSB7CkBAIC0yMDUsMTAgKzIwNSwxMiBAQAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgcHVibGljIHN0YXRpYyBsb25nIHRvdGFsKGxvbmdbXSBhcnJheSkgeworICAgIHB1YmxpYyBzdGF0aWMgbG9uZyB0b3RhbChATnVsbGFibGUgbG9uZ1tdIGFycmF5KSB7CiAgICAgICAgIGxvbmcgdG90YWwgPSAwOwotICAgICAgICBmb3IgKGxvbmcgdmFsdWUgOiBhcnJheSkgewotICAgICAgICAgICAgdG90YWwgKz0gdmFsdWU7CisgICAgICAgIGlmIChhcnJheSAhPSBudWxsKSB7CisgICAgICAgICAgICBmb3IgKGxvbmcgdmFsdWUgOiBhcnJheSkgeworICAgICAgICAgICAgICAgIHRvdGFsICs9IHZhbHVlOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0b3RhbDsKICAgICB9CkBAIC0zNjYsMTEgKzM2OCwxMSBAQAogICAgICAgICByZXR1cm4gY3VyOwogICAgIH0KIAotICAgIHB1YmxpYyBzdGF0aWMgbG9uZ1tdIGNsb25lT3JOdWxsKGxvbmdbXSBhcnJheSkgeworICAgIHB1YmxpYyBzdGF0aWMgQE51bGxhYmxlIGxvbmdbXSBjbG9uZU9yTnVsbChATnVsbGFibGUgbG9uZ1tdIGFycmF5KSB7CiAgICAgICAgIHJldHVybiAoYXJyYXkgIT0gbnVsbCkgPyBhcnJheS5jbG9uZSgpIDogbnVsbDsKICAgICB9CiAKLSAgICBwdWJsaWMgc3RhdGljIDxUPiBBcnJheVNldDxUPiBhZGQoQXJyYXlTZXQ8VD4gY3VyLCBUIHZhbCkgeworICAgIHB1YmxpYyBzdGF0aWMgQE5vbk51bGwgPFQ+IEFycmF5U2V0PFQ+IGFkZChATnVsbGFibGUgQXJyYXlTZXQ8VD4gY3VyLCBUIHZhbCkgewogICAgICAgICBpZiAoY3VyID09IG51bGwpIHsKICAgICAgICAgICAgIGN1ciA9IG5ldyBBcnJheVNldDw+KCk7CiAgICAgICAgIH0KQEAgLTM3OCw3ICszODAsNyBAQAogICAgICAgICByZXR1cm4gY3VyOwogICAgIH0KIAotICAgIHB1YmxpYyBzdGF0aWMgPFQ+IEFycmF5U2V0PFQ+IHJlbW92ZShBcnJheVNldDxUPiBjdXIsIFQgdmFsKSB7CisgICAgcHVibGljIHN0YXRpYyBATnVsbGFibGUgPFQ+IEFycmF5U2V0PFQ+IHJlbW92ZShATnVsbGFibGUgQXJyYXlTZXQ8VD4gY3VyLCBUIHZhbCkgewogICAgICAgICBpZiAoY3VyID09IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICB9CkBAIC0zOTAsMTEgKzM5MiwxMSBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIHN0YXRpYyA8VD4gYm9vbGVhbiBjb250YWlucyhBcnJheVNldDxUPiBjdXIsIFQgdmFsKSB7CisgICAgcHVibGljIHN0YXRpYyA8VD4gYm9vbGVhbiBjb250YWlucyhATnVsbGFibGUgQXJyYXlTZXQ8VD4gY3VyLCBUIHZhbCkgewogICAgICAgICByZXR1cm4gKGN1ciAhPSBudWxsKSA/IGN1ci5jb250YWlucyh2YWwpIDogZmFsc2U7CiAgICAgfQogCi0gICAgcHVibGljIHN0YXRpYyA8VD4gQXJyYXlMaXN0PFQ+IGFkZChBcnJheUxpc3Q8VD4gY3VyLCBUIHZhbCkgeworICAgIHB1YmxpYyBzdGF0aWMgQE5vbk51bGwgPFQ+IEFycmF5TGlzdDxUPiBhZGQoQE51bGxhYmxlIEFycmF5TGlzdDxUPiBjdXIsIFQgdmFsKSB7CiAgICAgICAgIGlmIChjdXIgPT0gbnVsbCkgewogICAgICAgICAgICAgY3VyID0gbmV3IEFycmF5TGlzdDw+KCk7CiAgICAgICAgIH0KQEAgLTQwMiw3ICs0MDQsNyBAQAogICAgICAgICByZXR1cm4gY3VyOwogICAgIH0KIAotICAgIHB1YmxpYyBzdGF0aWMgPFQ+IEFycmF5TGlzdDxUPiByZW1vdmUoQXJyYXlMaXN0PFQ+IGN1ciwgVCB2YWwpIHsKKyAgICBwdWJsaWMgc3RhdGljIEBOdWxsYWJsZSA8VD4gQXJyYXlMaXN0PFQ+IHJlbW92ZShATnVsbGFibGUgQXJyYXlMaXN0PFQ+IGN1ciwgVCB2YWwpIHsKICAgICAgICAgaWYgKGN1ciA9PSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgfQpAQCAtNDE0LDcgKzQxNiw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwdWJsaWMgc3RhdGljIDxUPiBib29sZWFuIGNvbnRhaW5zKEFycmF5TGlzdDxUPiBjdXIsIFQgdmFsKSB7CisgICAgcHVibGljIHN0YXRpYyA8VD4gYm9vbGVhbiBjb250YWlucyhATnVsbGFibGUgQXJyYXlMaXN0PFQ+IGN1ciwgVCB2YWwpIHsKICAgICAgICAgcmV0dXJuIChjdXIgIT0gbnVsbCkgPyBjdXIuY29udGFpbnModmFsKSA6IGZhbHNlOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3V0aWwvTGluZUJyZWFrQnVmZmVyZWRXcml0ZXIuamF2YSBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC91dGlsL0xpbmVCcmVha0J1ZmZlcmVkV3JpdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgzMWU3YQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC91dGlsL0xpbmVCcmVha0J1ZmZlcmVkV3JpdGVyLmphdmEKQEAgLTAsMCArMSwyOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWw7CisKK2ltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOworaW1wb3J0IGphdmEuaW8uV3JpdGVyOworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CisKKy8qKgorICogQSB3cml0ZXIgdGhhdCBicmVha3MgdXAgaXRzIG91dHB1dCBpbnRvIGNodW5rcyBiZWZvcmUgd3JpdGluZyB0byBpdHMgb3V0IHdyaXRlciwKKyAqIGFuZCB3aGljaCBpcyBsaW5lYnJlYWsgYXdhcmUsIGkuZS4sIGNodW5rcyB3aWxsIGNyZWF0ZWQgYWxvbmcgbGluZSBicmVha3MsIGlmCisgKiBwb3NzaWJsZS4KKyAqCisgKiBOb3RlOiB0aGlzIGNsYXNzIGlzIG5vdCB0aHJlYWQtc2FmZS4KKyAqLworcHVibGljIGNsYXNzIExpbmVCcmVha0J1ZmZlcmVkV3JpdGVyIGV4dGVuZHMgUHJpbnRXcml0ZXIgeworCisgICAgLyoqCisgICAgICogQSBidWZmZXIgdG8gY29sbGVjdCBkYXRhIHVudGlsIHRoZSBidWZmZXIgc2l6ZSBpcyByZWFjaGVkLgorICAgICAqCisgICAgICogTm90ZTogd2UgbWFuYWdlIGEgY2hhcltdIG91cnNlbHZlcyB0byBhdm9pZCBhbiBhbGxvY2F0aW9uIHdoZW4gcHJpbnRpbmcgdG8gdGhlCisgICAgICogICAgICAgb3V0IHdyaXRlci4gT3RoZXJ3aXNlIGEgU3RyaW5nQnVpbGRlciB3b3VsZCBoYXZlIGJlZW4gc2ltcGxlciB0byB1c2UuCisgICAgICovCisgICAgcHJpdmF0ZSBjaGFyW10gYnVmZmVyOworCisgICAgLyoqCisgICAgICogVGhlIGluZGV4IG9mIHRoZSBmaXJzdCBmcmVlIGVsZW1lbnQgaW4gdGhlIGJ1ZmZlci4KKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBidWZmZXJJbmRleDsKKworICAgIC8qKgorICAgICAqIFRoZSBjaHVuayBzaXplICg9bWF4aW11bSBidWZmZXIgc2l6ZSkgdG8gdXNlIGZvciB0aGlzIHdyaXRlci4KKyAgICAgKi8KKyAgICBwcml2YXRlIGZpbmFsIGludCBidWZmZXJTaXplOworCisKKyAgICAvKioKKyAgICAgKiBJbmRleCBvZiB0aGUgbGFzdCBuZXdsaW5lIGNoYXJhY3RlciBkaXNjb3ZlcmVkIGluIHRoZSBidWZmZXIuIFRoZSB3cml0ZXIgd2lsbCB0cnkKKyAgICAgKiB0byBzcGxpdCB0aGVyZS4KKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBsYXN0TmV3bGluZSA9IC0xOworCisgICAgLyoqCisgICAgICogVGhlIGxpbmUgc2VwYXJhdG9yIGZvciBwcmludGxuKCkuCisgICAgICovCisgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbGluZVNlcGFyYXRvcjsKKworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIG5ldyBsaW5lYnJlYWstYXdhcmUgYnVmZmVyZWQgd3JpdGVyIHdpdGggdGhlIGdpdmVuIG91dHB1dCBhbmQgYnVmZmVyCisgICAgICogc2l6ZS4gVGhlIGluaXRpYWwgY2FwYWNpdHkgd2lsbCBiZSBhIGRlZmF1bHQgdmFsdWUuCisgICAgICogQHBhcmFtIG91dCBUaGUgd3JpdGVyIHRvIHdyaXRlIHRvLgorICAgICAqIEBwYXJhbSBidWZmZXJTaXplIFRoZSBtYXhpbXVtIGJ1ZmZlciBzaXplLgorICAgICAqLworICAgIHB1YmxpYyBMaW5lQnJlYWtCdWZmZXJlZFdyaXRlcihXcml0ZXIgb3V0LCBpbnQgYnVmZmVyU2l6ZSkgeworICAgICAgICB0aGlzKG91dCwgYnVmZmVyU2l6ZSwgMTYpOyAgLy8gMTYgaXMgdGhlIGRlZmF1bHQgc2l6ZSBvZiBhIFN0cmluZ0J1aWxkZXIgYnVmZmVyLgorICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIG5ldyBsaW5lYnJlYWstYXdhcmUgYnVmZmVyZWQgd3JpdGVyIHdpdGggdGhlIGdpdmVuIG91dHB1dCwgYnVmZmVyCisgICAgICogc2l6ZSBhbmQgaW5pdGlhbCBjYXBhY2l0eS4KKyAgICAgKiBAcGFyYW0gb3V0IFRoZSB3cml0ZXIgdG8gd3JpdGUgdG8uCisgICAgICogQHBhcmFtIGJ1ZmZlclNpemUgVGhlIG1heGltdW0gYnVmZmVyIHNpemUuCisgICAgICogQHBhcmFtIGluaXRpYWxDYXBhY2l0eSBUaGUgaW5pdGlhbCBjYXBhY2l0eSBvZiB0aGUgaW50ZXJuYWwgYnVmZmVyLgorICAgICAqLworICAgIHB1YmxpYyBMaW5lQnJlYWtCdWZmZXJlZFdyaXRlcihXcml0ZXIgb3V0LCBpbnQgYnVmZmVyU2l6ZSwgaW50IGluaXRpYWxDYXBhY2l0eSkgeworICAgICAgICBzdXBlcihvdXQpOworICAgICAgICB0aGlzLmJ1ZmZlciA9IG5ldyBjaGFyW01hdGgubWluKGluaXRpYWxDYXBhY2l0eSwgYnVmZmVyU2l6ZSldOworICAgICAgICB0aGlzLmJ1ZmZlckluZGV4ID0gMDsKKyAgICAgICAgdGhpcy5idWZmZXJTaXplID0gYnVmZmVyU2l6ZTsKKyAgICAgICAgdGhpcy5saW5lU2VwYXJhdG9yID0gU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEZsdXNoIHRoZSBjdXJyZW50IGJ1ZmZlci4gVGhpcyB3aWxsIGlnbm9yZSBsaW5lIGJyZWFrcy4KKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBmbHVzaCgpIHsKKyAgICAgICAgd3JpdGVCdWZmZXIoYnVmZmVySW5kZXgpOworICAgICAgICBidWZmZXJJbmRleCA9IDA7CisgICAgICAgIHN1cGVyLmZsdXNoKCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgd3JpdGUoaW50IGMpIHsKKyAgICAgICAgaWYgKGJ1ZmZlckluZGV4IDwgYnVmZmVyU2l6ZSkgeworICAgICAgICAgICAgYnVmZmVyW2J1ZmZlckluZGV4XSA9IChjaGFyKWM7CisgICAgICAgICAgICBidWZmZXJJbmRleCsrOworICAgICAgICAgICAgaWYgKChjaGFyKWMgPT0gJ1xuJykgeworICAgICAgICAgICAgICAgIGxhc3ROZXdsaW5lID0gYnVmZmVySW5kZXg7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBUaGlzIHNob3VsZCBiZSBhbiB1bmNvbW1vbiBjYXNlLCB3ZSBtb3N0bHkgZXhwZWN0IGNoYXJbXSBhbmQgU3RyaW5nLiBTbworICAgICAgICAgICAgLy8gbGV0IHRoZSBjaHVua2luZyBiZSBoYW5kbGVkIGJ5IHRoZSBjaGFyW10gY2FzZS4KKyAgICAgICAgICAgIHdyaXRlKG5ldyBjaGFyW10geyAoY2hhciljIH0sIDAgLDEpOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgcHJpbnRsbigpIHsKKyAgICAgICAgd3JpdGUobGluZVNlcGFyYXRvcik7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgd3JpdGUoY2hhcltdIGJ1ZiwgaW50IG9mZiwgaW50IGxlbikgeworICAgICAgICB3aGlsZSAoYnVmZmVySW5kZXggKyBsZW4gPiBidWZmZXJTaXplKSB7CisgICAgICAgICAgICAvLyBGaW5kIHRoZSBuZXh0IG5ld2xpbmUgaW4gdGhlIGJ1ZmZlciwgc2VlIGlmIHRoYXQncyBiZWxvdyB0aGUgbGltaXQuCisgICAgICAgICAgICAvLyBSZXBlYXQuCisgICAgICAgICAgICBpbnQgbmV4dE5ld0xpbmUgPSAtMTsKKyAgICAgICAgICAgIGludCBtYXhMZW5ndGggPSBidWZmZXJTaXplIC0gYnVmZmVySW5kZXg7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1heExlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKGJ1ZltvZmYgKyBpXSA9PSAnXG4nKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChidWZmZXJJbmRleCArIGkgPCBidWZmZXJTaXplKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXh0TmV3TGluZSA9IGk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG5leHROZXdMaW5lICE9IC0xKSB7CisgICAgICAgICAgICAgICAgLy8gV2UgY2FuIGFkZCBzb21lIG1vcmUgZGF0YS4KKyAgICAgICAgICAgICAgICBhcHBlbmRUb0J1ZmZlcihidWYsIG9mZiwgbmV4dE5ld0xpbmUpOworICAgICAgICAgICAgICAgIHdyaXRlQnVmZmVyKGJ1ZmZlckluZGV4KTsKKyAgICAgICAgICAgICAgICBidWZmZXJJbmRleCA9IDA7CisgICAgICAgICAgICAgICAgbGFzdE5ld2xpbmUgPSAtMTsKKyAgICAgICAgICAgICAgICBvZmYgKz0gbmV4dE5ld0xpbmUgKyAxOworICAgICAgICAgICAgICAgIGxlbiAtPSBuZXh0TmV3TGluZSArIDE7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGxhc3ROZXdsaW5lICE9IC0xKSB7CisgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBsYXN0IG5ld2xpbmUuCisgICAgICAgICAgICAgICAgd3JpdGVCdWZmZXIobGFzdE5ld2xpbmUpOworICAgICAgICAgICAgICAgIHJlbW92ZUZyb21CdWZmZXIobGFzdE5ld2xpbmUgKyAxKTsKKyAgICAgICAgICAgICAgICBsYXN0TmV3bGluZSA9IC0xOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBPSywgdGhlcmUgd2FzIG5vIG5ld2xpbmUsIGJyZWFrIGF0IGEgZnVsbCBidWZmZXIuCisgICAgICAgICAgICAgICAgaW50IHJlc3QgPSBidWZmZXJTaXplIC0gYnVmZmVySW5kZXg7CisgICAgICAgICAgICAgICAgYXBwZW5kVG9CdWZmZXIoYnVmLCBvZmYsIHJlc3QpOworICAgICAgICAgICAgICAgIHdyaXRlQnVmZmVyKGJ1ZmZlckluZGV4KTsKKyAgICAgICAgICAgICAgICBidWZmZXJJbmRleCA9IDA7CisgICAgICAgICAgICAgICAgb2ZmICs9IHJlc3Q7CisgICAgICAgICAgICAgICAgbGVuIC09IHJlc3Q7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBBZGQgdG8gdGhlIGJ1ZmZlciwgdGhpcyB3aWxsIGZpdC4KKyAgICAgICAgaWYgKGxlbiA+IDApIHsKKyAgICAgICAgICAgIC8vIEFkZCB0aGUgY2hhcnMsIGZpbmQgdGhlIGxhc3QgbmV3bGluZS4KKyAgICAgICAgICAgIGFwcGVuZFRvQnVmZmVyKGJ1Ziwgb2ZmLCBsZW4pOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IGxlbiAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgICAgICAgICAgaWYgKGJ1ZltvZmYgKyBpXSA9PSAnXG4nKSB7CisgICAgICAgICAgICAgICAgICAgIGxhc3ROZXdsaW5lID0gYnVmZmVySW5kZXggLSBsZW4gKyBpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCB3cml0ZShTdHJpbmcgcywgaW50IG9mZiwgaW50IGxlbikgeworICAgICAgICB3aGlsZSAoYnVmZmVySW5kZXggKyBsZW4gPiBidWZmZXJTaXplKSB7CisgICAgICAgICAgICAvLyBGaW5kIHRoZSBuZXh0IG5ld2xpbmUgaW4gdGhlIGJ1ZmZlciwgc2VlIGlmIHRoYXQncyBiZWxvdyB0aGUgbGltaXQuCisgICAgICAgICAgICAvLyBSZXBlYXQuCisgICAgICAgICAgICBpbnQgbmV4dE5ld0xpbmUgPSAtMTsKKyAgICAgICAgICAgIGludCBtYXhMZW5ndGggPSBidWZmZXJTaXplIC0gYnVmZmVySW5kZXg7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1heExlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKHMuY2hhckF0KG9mZiArIGkpID09ICdcbicpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJ1ZmZlckluZGV4ICsgaSA8IGJ1ZmZlclNpemUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5leHROZXdMaW5lID0gaTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobmV4dE5ld0xpbmUgIT0gLTEpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBjYW4gYWRkIHNvbWUgbW9yZSBkYXRhLgorICAgICAgICAgICAgICAgIGFwcGVuZFRvQnVmZmVyKHMsIG9mZiwgbmV4dE5ld0xpbmUpOworICAgICAgICAgICAgICAgIHdyaXRlQnVmZmVyKGJ1ZmZlckluZGV4KTsKKyAgICAgICAgICAgICAgICBidWZmZXJJbmRleCA9IDA7CisgICAgICAgICAgICAgICAgbGFzdE5ld2xpbmUgPSAtMTsKKyAgICAgICAgICAgICAgICBvZmYgKz0gbmV4dE5ld0xpbmUgKyAxOworICAgICAgICAgICAgICAgIGxlbiAtPSBuZXh0TmV3TGluZSArIDE7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGxhc3ROZXdsaW5lICE9IC0xKSB7CisgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBsYXN0IG5ld2xpbmUuCisgICAgICAgICAgICAgICAgd3JpdGVCdWZmZXIobGFzdE5ld2xpbmUpOworICAgICAgICAgICAgICAgIHJlbW92ZUZyb21CdWZmZXIobGFzdE5ld2xpbmUgKyAxKTsKKyAgICAgICAgICAgICAgICBsYXN0TmV3bGluZSA9IC0xOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBPSywgdGhlcmUgd2FzIG5vIG5ld2xpbmUsIGJyZWFrIGF0IGEgZnVsbCBidWZmZXIuCisgICAgICAgICAgICAgICAgaW50IHJlc3QgPSBidWZmZXJTaXplIC0gYnVmZmVySW5kZXg7CisgICAgICAgICAgICAgICAgYXBwZW5kVG9CdWZmZXIocywgb2ZmLCByZXN0KTsKKyAgICAgICAgICAgICAgICB3cml0ZUJ1ZmZlcihidWZmZXJJbmRleCk7CisgICAgICAgICAgICAgICAgYnVmZmVySW5kZXggPSAwOworICAgICAgICAgICAgICAgIG9mZiArPSByZXN0OworICAgICAgICAgICAgICAgIGxlbiAtPSByZXN0OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gQWRkIHRvIHRoZSBidWZmZXIsIHRoaXMgd2lsbCBmaXQuCisgICAgICAgIGlmIChsZW4gPiAwKSB7CisgICAgICAgICAgICAvLyBBZGQgdGhlIGNoYXJzLCBmaW5kIHRoZSBsYXN0IG5ld2xpbmUuCisgICAgICAgICAgICBhcHBlbmRUb0J1ZmZlcihzLCBvZmYsIGxlbik7CisgICAgICAgICAgICBmb3IgKGludCBpID0gbGVuIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgICAgICAgICBpZiAocy5jaGFyQXQob2ZmICsgaSkgPT0gJ1xuJykgeworICAgICAgICAgICAgICAgICAgICBsYXN0TmV3bGluZSA9IGJ1ZmZlckluZGV4IC0gbGVuICsgaTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQXBwZW5kIHRoZSBjaGFyYWN0ZXJzIHRvIHRoZSBidWZmZXIuIFRoaXMgd2lsbCBwb3RlbnRpYWxseSByZXNpemUgdGhlIGJ1ZmZlciwKKyAgICAgKiBhbmQgbW92ZSB0aGUgaW5kZXggYWxvbmcuCisgICAgICogQHBhcmFtIGJ1ZiBUaGUgY2hhcltdIGNvbnRhaW5pbmcgdGhlIGRhdGEuCisgICAgICogQHBhcmFtIG9mZiBUaGUgc3RhcnQgaW5kZXggdG8gY29weSBmcm9tLgorICAgICAqIEBwYXJhbSBsZW4gVGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGNvcHkuCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIGFwcGVuZFRvQnVmZmVyKGNoYXJbXSBidWYsIGludCBvZmYsIGludCBsZW4pIHsKKyAgICAgICAgaWYgKGJ1ZmZlckluZGV4ICsgbGVuID4gYnVmZmVyLmxlbmd0aCkgeworICAgICAgICAgICAgZW5zdXJlQ2FwYWNpdHkoYnVmZmVySW5kZXggKyBsZW4pOworICAgICAgICB9CisgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoYnVmLCBvZmYsIGJ1ZmZlciwgYnVmZmVySW5kZXgsIGxlbik7CisgICAgICAgIGJ1ZmZlckluZGV4ICs9IGxlbjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBcHBlbmQgdGhlIGNoYXJhY3RlcnMgZnJvbSB0aGUgZ2l2ZW4gc3RyaW5nIHRvIHRoZSBidWZmZXIuIFRoaXMgd2lsbCBwb3RlbnRpYWxseQorICAgICAqIHJlc2l6ZSB0aGUgYnVmZmVyLCBhbmQgbW92ZSB0aGUgaW5kZXggYWxvbmcuCisgICAgICogQHBhcmFtIHMgVGhlIHN0cmluZyBzdXBwbHlpbmcgdGhlIGNoYXJhY3RlcnMuCisgICAgICogQHBhcmFtIG9mZiBUaGUgc3RhcnQgaW5kZXggdG8gY29weSBmcm9tLgorICAgICAqIEBwYXJhbSBsZW4gVGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGNvcHkuCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIGFwcGVuZFRvQnVmZmVyKFN0cmluZyBzLCBpbnQgb2ZmLCBpbnQgbGVuKSB7CisgICAgICAgIGlmIChidWZmZXJJbmRleCArIGxlbiA+IGJ1ZmZlci5sZW5ndGgpIHsKKyAgICAgICAgICAgIGVuc3VyZUNhcGFjaXR5KGJ1ZmZlckluZGV4ICsgbGVuKTsKKyAgICAgICAgfQorICAgICAgICBzLmdldENoYXJzKG9mZiwgb2ZmICsgbGVuLCBidWZmZXIsIGJ1ZmZlckluZGV4KTsKKyAgICAgICAgYnVmZmVySW5kZXggKz0gbGVuOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlc2l6ZSB0aGUgYnVmZmVyLiBXZSB1c2UgdGhlIHVzdWFsIGRvdWJsZS10aGUtc2l6ZSBwbHVzIGNvbnN0YW50IHNjaGVtZSBmb3IKKyAgICAgKiBhbW9ydGl6ZWQgTygxKSBpbnNlcnQuIE5vdGU6IHdlIGV4cGVjdCBzbWFsbCBidWZmZXJzLCBzbyB0aGlzIHdvbid0IGNoZWNrIGZvcgorICAgICAqIG92ZXJmbG93LgorICAgICAqIEBwYXJhbSBjYXBhY2l0eSBUaGUgc2l6ZSB0byBiZSBlbnN1cmVkLgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCBlbnN1cmVDYXBhY2l0eShpbnQgY2FwYWNpdHkpIHsKKyAgICAgICAgaW50IG5ld1NpemUgPSBidWZmZXIubGVuZ3RoICogMiArIDI7CisgICAgICAgIGlmIChuZXdTaXplIDwgY2FwYWNpdHkpIHsKKyAgICAgICAgICAgIG5ld1NpemUgPSBjYXBhY2l0eTsKKyAgICAgICAgfQorICAgICAgICBidWZmZXIgPSBBcnJheXMuY29weU9mKGJ1ZmZlciwgbmV3U2l6ZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVtb3ZlIHRoZSBjaGFyYWN0ZXJzIHVwIHRvIChhbmQgZXhjbHVkaW5nKSBpbmRleCBpIGZyb20gdGhlIGJ1ZmZlci4gVGhpcyB3aWxsCisgICAgICogbm90IHJlc2l6ZSB0aGUgYnVmZmVyLCBidXQgd2lsbCB1cGRhdGUgYnVmZmVySW5kZXguCisgICAgICogQHBhcmFtIGkgVGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIHJlbW92ZSBmcm9tIHRoZSBmcm9udC4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgcmVtb3ZlRnJvbUJ1ZmZlcihpbnQgaSkgeworICAgICAgICBpbnQgcmVzdCA9IGJ1ZmZlckluZGV4IC0gaTsKKyAgICAgICAgaWYgKHJlc3QgPiAwKSB7CisgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KGJ1ZmZlciwgYnVmZmVySW5kZXggLSByZXN0LCBidWZmZXIsIDAsIHJlc3QpOworICAgICAgICAgICAgYnVmZmVySW5kZXggPSByZXN0OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYnVmZmVySW5kZXggPSAwOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogSGVscGVyIG1ldGhvZCwgd3JpdGUgdGhlIGdpdmVuIHBhcnQgb2YgdGhlIGJ1ZmZlciwgW3N0YXJ0LGxlbmd0aCksIHRvIHRoZSBvdXRwdXQuCisgICAgICogQHBhcmFtIGxlbmd0aCBUaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gZmx1c2guCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIHdyaXRlQnVmZmVyKGludCBsZW5ndGgpIHsKKyAgICAgICAgaWYgKGxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgIHN1cGVyLndyaXRlKGJ1ZmZlciwgMCwgbGVuZ3RoKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC92aWV3L0lEcm9wUGVybWlzc2lvbnMuYWlkbCBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC92aWV3L0lEcm9wUGVybWlzc2lvbnMuYWlkbAppbmRleCA4NmQyN2U3Li4yNDM4YmRhIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdmlldy9JRHJvcFBlcm1pc3Npb25zLmFpZGwKKysrIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ZpZXcvSURyb3BQZXJtaXNzaW9ucy5haWRsCkBAIC0xNiwxMSArMTYsMTMgQEAKIAogcGFja2FnZSBjb20uYW5kcm9pZC5pbnRlcm5hbC52aWV3OwogCitpbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOworCiAvKioKICAqIEludGVyZmFjZSB0byBhbGxvdyBhIGRyb3AgcmVjZWl2ZXIgdG8gcmVxdWVzdCBwZXJtaXNzaW9ucyBmb3IgVVJJcyBwYXNzZWQgYWxvbmcgd2l0aCBDbGlwRGF0YQogICogY29udGFpbmVkIGluIERyYWdFdmVudC4KICAqLwogaW50ZXJmYWNlIElEcm9wUGVybWlzc2lvbnMgewotICAgIHZvaWQgdGFrZSgpOworICAgIHZvaWQgdGFrZShJQmluZGVyIGFjdGl2aXR5VG9rZW4pOwogICAgIHZvaWQgcmVsZWFzZSgpOwogfQpkaWZmIC0tZ2l0IGEvY29yZS9qbmkvQW5kcm9pZC5tayBiL2NvcmUvam5pL0FuZHJvaWQubWsKaW5kZXggYTlhMTk4Yi4uMzA1OTNmMiAxMDA2NDQKLS0tIGEvY29yZS9qbmkvQW5kcm9pZC5taworKysgYi9jb3JlL2puaS9BbmRyb2lkLm1rCkBAIC00MywxMSArNDMsMTMgQEAKICAgICBhbmRyb2lkX29wZW5nbF9HTEVTMzAuY3BwIFwKICAgICBhbmRyb2lkX29wZW5nbF9HTEVTMzEuY3BwIFwKICAgICBhbmRyb2lkX29wZW5nbF9HTEVTMzFFeHQuY3BwIFwKKyAgICBhbmRyb2lkX29wZW5nbF9HTEVTMzIuY3BwIFwKICAgICBhbmRyb2lkX2RhdGFiYXNlX0N1cnNvcldpbmRvdy5jcHAgXAogICAgIGFuZHJvaWRfZGF0YWJhc2VfU1FMaXRlQ29tbW9uLmNwcCBcCiAgICAgYW5kcm9pZF9kYXRhYmFzZV9TUUxpdGVDb25uZWN0aW9uLmNwcCBcCiAgICAgYW5kcm9pZF9kYXRhYmFzZV9TUUxpdGVHbG9iYWwuY3BwIFwKICAgICBhbmRyb2lkX2RhdGFiYXNlX1NRTGl0ZURlYnVnLmNwcCBcCisgICAgYW5kcm9pZF9ncmFwaGljc19kcmF3YWJsZV9WZWN0b3JEcmF3YWJsZS5jcHAgXAogICAgIGFuZHJvaWRfdmlld19EaXNwbGF5RXZlbnRSZWNlaXZlci5jcHAgXAogICAgIGFuZHJvaWRfdmlld19EaXNwbGF5TGlzdENhbnZhcy5jcHAgXAogICAgIGFuZHJvaWRfdmlld19HcmFwaGljQnVmZmVyLmNwcCBcCkBAIC0xODQsNiArMTg2LDggQEAKICAgICAkKGNhbGwgaW5jbHVkZS1wYXRoLWZvciwgbGliaGFyZHdhcmVfbGVnYWN5KS9oYXJkd2FyZV9sZWdhY3kgXAogICAgICQoVE9QKS9mcmFtZXdvcmtzL2F2L2luY2x1ZGUgXAogICAgICQoVE9QKS9mcmFtZXdvcmtzL2Jhc2UvbWVkaWEvam5pIFwKKyAgICAkKFRPUCkvc3lzdGVtL2NvcmUvYmFzZS9pbmNsdWRlIFwKKyAgICAkKFRPUCkvc3lzdGVtL2NvcmUvaW5jbHVkZSBcCiAgICAgJChUT1ApL3N5c3RlbS9tZWRpYS9jYW1lcmEvaW5jbHVkZSBcCiAgICAgJChUT1ApL3N5c3RlbS9uZXRkL2luY2x1ZGUgXAogICAgIGV4dGVybmFsL3BkZml1bS9jb3JlL2luY2x1ZGUvZnBkZmFwaSBcCmRpZmYgLS1naXQgYS9jb3JlL2puaS9BbmRyb2lkUnVudGltZS5jcHAgYi9jb3JlL2puaS9BbmRyb2lkUnVudGltZS5jcHAKaW5kZXggZjZmNDViNS4uNjNmMTkzZCAxMDA2NDQKLS0tIGEvY29yZS9qbmkvQW5kcm9pZFJ1bnRpbWUuY3BwCisrKyBiL2NvcmUvam5pL0FuZHJvaWRSdW50aW1lLmNwcApAQCAtODAsNiArODAsNyBAQAogZXh0ZXJuIGludCByZWdpc3Rlcl9hbmRyb2lkX29wZW5nbF9qbmlfR0xFUzMwKEpOSUVudiogZW52KTsKIGV4dGVybiBpbnQgcmVnaXN0ZXJfYW5kcm9pZF9vcGVuZ2xfam5pX0dMRVMzMShKTklFbnYqIGVudik7CiBleHRlcm4gaW50IHJlZ2lzdGVyX2FuZHJvaWRfb3BlbmdsX2puaV9HTEVTMzFFeHQoSk5JRW52KiBlbnYpOworZXh0ZXJuIGludCByZWdpc3Rlcl9hbmRyb2lkX29wZW5nbF9qbmlfR0xFUzMyKEpOSUVudiogZW52KTsKIAogZXh0ZXJuIGludCByZWdpc3Rlcl9hbmRyb2lkX2hhcmR3YXJlX0NhbWVyYShKTklFbnYgKmVudik7CiBleHRlcm4gaW50IHJlZ2lzdGVyX2FuZHJvaWRfaGFyZHdhcmVfY2FtZXJhMl9DYW1lcmFNZXRhZGF0YShKTklFbnYgKmVudik7CkBAIC0xMjksNiArMTMwLDcgQEAKIGV4dGVybiBpbnQgcmVnaXN0ZXJfYW5kcm9pZF9ncmFwaGljc19SZWdpb24oSk5JRW52KiBlbnYpOwogZXh0ZXJuIGludCByZWdpc3Rlcl9hbmRyb2lkX2dyYXBoaWNzX1N1cmZhY2VUZXh0dXJlKEpOSUVudiogZW52KTsKIGV4dGVybiBpbnQgcmVnaXN0ZXJfYW5kcm9pZF9ncmFwaGljc19YZmVybW9kZShKTklFbnYqIGVudik7CitleHRlcm4gaW50IHJlZ2lzdGVyX2FuZHJvaWRfZ3JhcGhpY3NfZHJhd2FibGVfVmVjdG9yRHJhd2FibGUoSk5JRW52KiBlbnYpOwogZXh0ZXJuIGludCByZWdpc3Rlcl9hbmRyb2lkX2dyYXBoaWNzX3BkZl9QZGZEb2N1bWVudChKTklFbnYqIGVudik7CiBleHRlcm4gaW50IHJlZ2lzdGVyX2FuZHJvaWRfZ3JhcGhpY3NfcGRmX1BkZkVkaXRvcihKTklFbnYqIGVudik7CiBleHRlcm4gaW50IHJlZ2lzdGVyX2FuZHJvaWRfZ3JhcGhpY3NfcGRmX1BkZlJlbmRlcmVyKEpOSUVudiogZW52KTsKQEAgLTEyODAsNiArMTI4Miw3IEBACiAgICAgUkVHX0pOSShyZWdpc3Rlcl9hbmRyb2lkX29wZW5nbF9qbmlfR0xFUzMwKSwKICAgICBSRUdfSk5JKHJlZ2lzdGVyX2FuZHJvaWRfb3BlbmdsX2puaV9HTEVTMzEpLAogICAgIFJFR19KTkkocmVnaXN0ZXJfYW5kcm9pZF9vcGVuZ2xfam5pX0dMRVMzMUV4dCksCisgICAgUkVHX0pOSShyZWdpc3Rlcl9hbmRyb2lkX29wZW5nbF9qbmlfR0xFUzMyKSwKIAogICAgIFJFR19KTkkocmVnaXN0ZXJfYW5kcm9pZF9ncmFwaGljc19CaXRtYXApLAogICAgIFJFR19KTkkocmVnaXN0ZXJfYW5kcm9pZF9ncmFwaGljc19CaXRtYXBGYWN0b3J5KSwKQEAgLTEzMTAsNiArMTMxMyw3IEBACiAgICAgUkVHX0pOSShyZWdpc3Rlcl9hbmRyb2lkX2dyYXBoaWNzX1R5cGVmYWNlKSwKICAgICBSRUdfSk5JKHJlZ2lzdGVyX2FuZHJvaWRfZ3JhcGhpY3NfWGZlcm1vZGUpLAogICAgIFJFR19KTkkocmVnaXN0ZXJfYW5kcm9pZF9ncmFwaGljc19ZdXZJbWFnZSksCisgICAgUkVHX0pOSShyZWdpc3Rlcl9hbmRyb2lkX2dyYXBoaWNzX2RyYXdhYmxlX1ZlY3RvckRyYXdhYmxlKSwKICAgICBSRUdfSk5JKHJlZ2lzdGVyX2FuZHJvaWRfZ3JhcGhpY3NfcGRmX1BkZkRvY3VtZW50KSwKICAgICBSRUdfSk5JKHJlZ2lzdGVyX2FuZHJvaWRfZ3JhcGhpY3NfcGRmX1BkZkVkaXRvciksCiAgICAgUkVHX0pOSShyZWdpc3Rlcl9hbmRyb2lkX2dyYXBoaWNzX3BkZl9QZGZSZW5kZXJlciksCmRpZmYgLS1naXQgYS9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL0JpdG1hcEZhY3RvcnkuY3BwIGIvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9CaXRtYXBGYWN0b3J5LmNwcAppbmRleCA0YTBmM2ZjLi5kOGVjMjJhIDEwMDY0NAotLS0gYS9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL0JpdG1hcEZhY3RvcnkuY3BwCisrKyBiL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvQml0bWFwRmFjdG9yeS5jcHAKQEAgLTU4NywxMCArNTg3LDYgQEAKICAgICByZXR1cm4gZG9EZWNvZGUoZW52LCBzdHJlYW0ucmVsZWFzZSgpLCBOVUxMLCBvcHRpb25zKTsKIH0KIAotc3RhdGljIHZvaWQgbmF0aXZlUmVxdWVzdENhbmNlbChKTklFbnYqLCBqb2JqZWN0IGpvcHRpb25zKSB7Ci0gICAgLy8gRGVwcmVjYXRlZAotfQotCiBzdGF0aWMgamJvb2xlYW4gbmF0aXZlSXNTZWVrYWJsZShKTklFbnYqIGVudiwgam9iamVjdCwgam9iamVjdCBmaWxlRGVzY3JpcHRvcikgewogICAgIGppbnQgZGVzY3JpcHRvciA9IGpuaUdldEZERnJvbUZpbGVEZXNjcmlwdG9yKGVudiwgZmlsZURlc2NyaXB0b3IpOwogICAgIHJldHVybiA6OmxzZWVrNjQoZGVzY3JpcHRvciwgMCwgU0VFS19DVVIpICE9IC0xID8gSk5JX1RSVUUgOiBKTklfRkFMU0U7CkBAIC02MzAsMTAgKzYyNiw2IEBACiAgICAgfSwKIH07CiAKLXN0YXRpYyBjb25zdCBKTklOYXRpdmVNZXRob2QgZ09wdGlvbnNNZXRob2RzW10gPSB7Ci0gICAgeyAgICJyZXF1ZXN0Q2FuY2VsIiwgIigpViIsICh2b2lkKiluYXRpdmVSZXF1ZXN0Q2FuY2VsIH0KLX07Ci0KIGludCByZWdpc3Rlcl9hbmRyb2lkX2dyYXBoaWNzX0JpdG1hcEZhY3RvcnkoSk5JRW52KiBlbnYpIHsKICAgICBqY2xhc3Mgb3B0aW9uc19jbGFzcyA9IEZpbmRDbGFzc09yRGllKGVudiwgImFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwRmFjdG9yeSRPcHRpb25zIik7CiAgICAgZ09wdGlvbnNfYml0bWFwRmllbGRJRCA9IEdldEZpZWxkSURPckRpZShlbnYsIG9wdGlvbnNfY2xhc3MsICJpbkJpdG1hcCIsCkBAIC02NjUsOCArNjU3LDYgQEAKICAgICBnSW5zZXRTdHJ1Y3RfY29uc3RydWN0b3JNZXRob2RJRCA9IEdldE1ldGhvZElET3JEaWUoZW52LCBnSW5zZXRTdHJ1Y3RfY2xhc3MsICI8aW5pdD4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKElJSUlJSUlJRklGKVYiKTsKIAotICAgIGFuZHJvaWQ6OlJlZ2lzdGVyTWV0aG9kc09yRGllKGVudiwgImFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwRmFjdG9yeSRPcHRpb25zIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnT3B0aW9uc01ldGhvZHMsIE5FTEVNKGdPcHRpb25zTWV0aG9kcykpOwogICAgIHJldHVybiBhbmRyb2lkOjpSZWdpc3Rlck1ldGhvZHNPckRpZShlbnYsICJhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcEZhY3RvcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnTWV0aG9kcywgTkVMRU0oZ01ldGhvZHMpKTsKIH0KZGlmZiAtLWdpdCBhL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvRm9udEZhbWlseS5jcHAgYi9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL0ZvbnRGYW1pbHkuY3BwCmluZGV4IGFiMGRmNTUuLjdjOGRiZTggMTAwNjQ0Ci0tLSBhL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvRm9udEZhbWlseS5jcHAKKysrIGIvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9Gb250RmFtaWx5LmNwcApAQCAtMzYsMTIgKzM2LDEyIEBACiBuYW1lc3BhY2UgYW5kcm9pZCB7CiAKIHN0YXRpYyBqbG9uZyBGb250RmFtaWx5X2NyZWF0ZShKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eiwganN0cmluZyBsYW5nLCBqaW50IHZhcmlhbnQpIHsKLSAgICBGb250TGFuZ3VhZ2UgZm9udExhbmd1YWdlOwotICAgIGlmIChsYW5nICE9IE5VTEwpIHsKLSAgICAgICAgU2NvcGVkVXRmQ2hhcnMgc3RyKGVudiwgbGFuZyk7Ci0gICAgICAgIGZvbnRMYW5ndWFnZSA9IEZvbnRMYW5ndWFnZShzdHIuY19zdHIoKSwgc3RyLnNpemUoKSk7CisgICAgaWYgKGxhbmcgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gKGpsb25nKW5ldyBGb250RmFtaWx5KHZhcmlhbnQpOwogICAgIH0KLSAgICByZXR1cm4gKGpsb25nKW5ldyBGb250RmFtaWx5KGZvbnRMYW5ndWFnZSwgdmFyaWFudCk7CisgICAgU2NvcGVkVXRmQ2hhcnMgc3RyKGVudiwgbGFuZyk7CisgICAgdWludDMyX3QgbGFuZ0lkID0gRm9udFN0eWxlOjpyZWdpc3Rlckxhbmd1YWdlTGlzdChzdHIuY19zdHIoKSk7CisgICAgcmV0dXJuIChqbG9uZyluZXcgRm9udEZhbWlseShsYW5nSWQsIHZhcmlhbnQpOwogfQogCiBzdGF0aWMgdm9pZCBGb250RmFtaWx5X3VucmVmKEpOSUVudiogZW52LCBqb2JqZWN0IGNsYXp6LCBqbG9uZyBmYW1pbHlQdHIpIHsKZGlmZiAtLWdpdCBhL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvUGFpbnQuY3BwIGIvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9QYWludC5jcHAKaW5kZXggNjU0ZDE0OC4uMGEyNWEwYSAxMDA2NDQKLS0tIGEvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9QYWludC5jcHAKKysrIGIvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9QYWludC5jcHAKQEAgLTMxMyw5NCArMzEzLDEwIEBACiAgICAgICAgIG9iai0+c2V0VGV4dEFsaWduKGFsaWduKTsKICAgICB9CiAKLSAgICAvLyBnZW5lcmF0ZSBiY3A0NyBpZGVudGlmaWVyIGZvciB0aGUgc3VwcGxpZWQgbG9jYWxlCi0gICAgc3RhdGljIHZvaWQgdG9MYW5ndWFnZVRhZyhjaGFyKiBvdXRwdXQsIHNpemVfdCBvdXRTaXplLAotICAgICAgICAgICAgY29uc3QgY2hhciogbG9jYWxlKSB7Ci0gICAgICAgIGlmIChvdXRwdXQgPT0gTlVMTCB8fCBvdXRTaXplIDw9IDApIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBpZiAobG9jYWxlID09IE5VTEwpIHsKLSAgICAgICAgICAgIG91dHB1dFswXSA9ICdcMCc7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgY2hhciBjYW5vbmljYWxDaGFyc1tVTE9DX0ZVTExOQU1FX0NBUEFDSVRZXTsKLSAgICAgICAgVUVycm9yQ29kZSB1RXJyID0gVV9aRVJPX0VSUk9SOwotICAgICAgICB1bG9jX2Nhbm9uaWNhbGl6ZShsb2NhbGUsIGNhbm9uaWNhbENoYXJzLCBVTE9DX0ZVTExOQU1FX0NBUEFDSVRZLAotICAgICAgICAgICAgICAgICZ1RXJyKTsKLSAgICAgICAgaWYgKFVfU1VDQ0VTUyh1RXJyKSkgewotICAgICAgICAgICAgY2hhciBsaWtlbHlDaGFyc1tVTE9DX0ZVTExOQU1FX0NBUEFDSVRZXTsKLSAgICAgICAgICAgIHVFcnIgPSBVX1pFUk9fRVJST1I7Ci0gICAgICAgICAgICB1bG9jX2FkZExpa2VseVN1YnRhZ3MoY2Fub25pY2FsQ2hhcnMsIGxpa2VseUNoYXJzLAotICAgICAgICAgICAgICAgICAgICBVTE9DX0ZVTExOQU1FX0NBUEFDSVRZLCAmdUVycik7Ci0gICAgICAgICAgICBpZiAoVV9TVUNDRVNTKHVFcnIpKSB7Ci0gICAgICAgICAgICAgICAgdUVyciA9IFVfWkVST19FUlJPUjsKLSAgICAgICAgICAgICAgICB1bG9jX3RvTGFuZ3VhZ2VUYWcobGlrZWx5Q2hhcnMsIG91dHB1dCwgb3V0U2l6ZSwgRkFMU0UsICZ1RXJyKTsKLSAgICAgICAgICAgICAgICBpZiAoVV9TVUNDRVNTKHVFcnIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBBTE9HRCgidWxvY190b0xhbmd1YWdlVGFnKFwiJXNcIikgZmFpbGVkOiAlcyIsIGxpa2VseUNoYXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfZXJyb3JOYW1lKHVFcnIpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEFMT0dEKCJ1bG9jX2FkZExpa2VseVN1YnRhZ3MoXCIlc1wiKSBmYWlsZWQ6ICVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbm9uaWNhbENoYXJzLCB1X2Vycm9yTmFtZSh1RXJyKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBTE9HRCgidWxvY19jYW5vbmljYWxpemUoXCIlc1wiKSBmYWlsZWQ6ICVzIiwgbG9jYWxlLAotICAgICAgICAgICAgICAgICAgICB1X2Vycm9yTmFtZSh1RXJyKSk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gdW5hYmxlIHRvIGJ1aWxkIGEgcHJvcGVyIGxhbmd1YWdlIGlkZW50aWZpZXIKLSAgICAgICAgb3V0cHV0WzBdID0gJ1wwJzsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCB0b0xhbmd1YWdlVGFncyhzdGQ6OnN0cmluZyogb3V0cHV0LCBjb25zdCBjaGFyKiBsb2NhbGVzKSB7Ci0gICAgICAgIGlmIChvdXRwdXQgPT0gTlVMTCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChsb2NhbGVzID09IE5VTEwpIHsKLSAgICAgICAgICAgIG91dHB1dC0+Y2xlYXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGNoYXIgbGFuZ1RhZ1tVTE9DX0ZVTExOQU1FX0NBUEFDSVRZXTsKLSAgICAgICAgY29uc3QgY2hhciogY29tbWFMb2MgPSBzdHJjaHIobG9jYWxlcywgJywnKTsKLSAgICAgICAgaWYgKGNvbW1hTG9jID09IE5VTEwpIHsKLSAgICAgICAgICAgIGFzc2VydChsb2NhbGVzWzBdICE9ICdcMCcpOyAgLy8gdGhlIHN0cmluZyBzaG91bGQgbm90IGJlIGVtcHR5Ci0gICAgICAgICAgICB0b0xhbmd1YWdlVGFnKGxhbmdUYWcsIFVMT0NfRlVMTE5BTUVfQ0FQQUNJVFksIGxvY2FsZXMpOwotICAgICAgICAgICAgKm91dHB1dCA9IGxhbmdUYWc7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBzaXplX3QgbGVuID0gc3RybGVuKGxvY2FsZXMpOwotICAgICAgICBjaGFyIGxvY2FsZVtsZW5dOwotICAgICAgICBvdXRwdXQtPmNsZWFyKCk7Ci0gICAgICAgIG91dHB1dC0+cmVzZXJ2ZShsZW4pOwotICAgICAgICBjb25zdCBjaGFyKiBsYXN0U3RhcnQgPSBsb2NhbGVzOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBhc3NlcnQobGFzdFN0YXJ0ID4gY29tbWFMb2MpOyAgLy8gdGhlIHN1YnN0cmluZyBzaG91bGQgbm90IGJlIGVtcHR5Ci0gICAgICAgICAgICBzdHJuY3B5KGxvY2FsZSwgbGFzdFN0YXJ0LCBjb21tYUxvYyAtIGxhc3RTdGFydCk7Ci0gICAgICAgICAgICBsb2NhbGVbY29tbWFMb2MgLSBsYXN0U3RhcnRdID0gJ1wwJzsKLSAgICAgICAgICAgIHRvTGFuZ3VhZ2VUYWcobGFuZ1RhZywgVUxPQ19GVUxMTkFNRV9DQVBBQ0lUWSwgbG9jYWxlKTsKLSAgICAgICAgICAgIGlmIChsYW5nVGFnWzBdICE9ICdcMCcpIHsKLSAgICAgICAgICAgICAgICBvdXRwdXQtPmFwcGVuZChsYW5nVGFnKTsKLSAgICAgICAgICAgICAgICBvdXRwdXQtPnB1c2hfYmFjaygnLCcpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbGFzdFN0YXJ0ID0gY29tbWFMb2MgKyAxOwotICAgICAgICAgICAgY29tbWFMb2MgPSBzdHJjaHIobGFzdFN0YXJ0LCAnLCcpOwotICAgICAgICB9IHdoaWxlIChjb21tYUxvYyAhPSBOVUxMKTsKLSAgICAgICAgYXNzZXJ0KGxhc3RTdGFydFswXSAhPSAnXDAnKTsgIC8vIHRoZSBmaW5hbCBzdWJzdHJpbmcgc2hvdWxkIG5vdCBiZSBlbXB0eQotICAgICAgICB0b0xhbmd1YWdlVGFnKGxhbmdUYWcsIFVMT0NfRlVMTE5BTUVfQ0FQQUNJVFksIGxhc3RTdGFydCk7Ci0gICAgICAgIGlmIChsYW5nVGFnWzBdICE9ICdcMCcpIHsKLSAgICAgICAgICAgIG91dHB1dC0+YXBwZW5kKGxhbmdUYWcpOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgc3RhdGljIGppbnQgc2V0VGV4dExvY2FsZXMoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosIGpsb25nIG9iakhhbmRsZSwganN0cmluZyBsb2NhbGVzKSB7CiAgICAgICAgIFBhaW50KiBvYmogPSByZWludGVycHJldF9jYXN0PFBhaW50Kj4ob2JqSGFuZGxlKTsKICAgICAgICAgU2NvcGVkVXRmQ2hhcnMgbG9jYWxlc0NoYXJzKGVudiwgbG9jYWxlcyk7Ci0gICAgICAgIHN0ZDo6c3RyaW5nIGJ1ZjsKLSAgICAgICAgdG9MYW5ndWFnZVRhZ3MoJmJ1ZiwgbG9jYWxlc0NoYXJzLmNfc3RyKCkpOwotICAgICAgICBqaW50IG1pbmlraW5MYW5nTGlzdElkID0gRm9udFN0eWxlOjpyZWdpc3Rlckxhbmd1YWdlTGlzdChidWYpOworICAgICAgICBqaW50IG1pbmlraW5MYW5nTGlzdElkID0gRm9udFN0eWxlOjpyZWdpc3Rlckxhbmd1YWdlTGlzdChsb2NhbGVzQ2hhcnMuY19zdHIoKSk7CiAgICAgICAgIG9iai0+c2V0TWluaWtpbkxhbmdMaXN0SWQobWluaWtpbkxhbmdMaXN0SWQpOwogICAgICAgICByZXR1cm4gbWluaWtpbkxhbmdMaXN0SWQ7CiAgICAgfQpkaWZmIC0tZ2l0IGEvY29yZS9qbmkvYW5kcm9pZF9hcHBfTmF0aXZlQWN0aXZpdHkuY3BwIGIvY29yZS9qbmkvYW5kcm9pZF9hcHBfTmF0aXZlQWN0aXZpdHkuY3BwCmluZGV4IDZlY2IzZmIuLjg4YTU2ZDIgMTAwNjQ0Ci0tLSBhL2NvcmUvam5pL2FuZHJvaWRfYXBwX05hdGl2ZUFjdGl2aXR5LmNwcAorKysgYi9jb3JlL2puaS9hbmRyb2lkX2FwcF9OYXRpdmVBY3Rpdml0eS5jcHAKQEAgLTI3MCw3ICsyNzAsNyBAQAogICAgIGJvb2wgbmVlZE5hdGl2ZUJyaWRnZSA9IGZhbHNlOwogCiAgICAgdm9pZCogaGFuZGxlID0gT3Blbk5hdGl2ZUxpYnJhcnkoZW52LCBzZGtWZXJzaW9uLCBwYXRoU3RyLCBjbGFzc0xvYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5UGF0aCwgaXNvbGF0aW9uUGF0aCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIGxpYnJhcnlQYXRoLCBpc29sYXRpb25QYXRoKTsKICAgICBpZiAoaGFuZGxlID09IE5VTEwpIHsKICAgICAgICAgaWYgKE5hdGl2ZUJyaWRnZUlzU3VwcG9ydGVkKHBhdGhTdHIpKSB7CiAgICAgICAgICAgICBoYW5kbGUgPSBOYXRpdmVCcmlkZ2VMb2FkTGlicmFyeShwYXRoU3RyLCBSVExEX0xBWlkpOwpkaWZmIC0tZ2l0IGEvY29yZS9qbmkvYW5kcm9pZF9ncmFwaGljc19kcmF3YWJsZV9WZWN0b3JEcmF3YWJsZS5jcHAgYi9jb3JlL2puaS9hbmRyb2lkX2dyYXBoaWNzX2RyYXdhYmxlX1ZlY3RvckRyYXdhYmxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2Q0YzZhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9qbmkvYW5kcm9pZF9ncmFwaGljc19kcmF3YWJsZV9WZWN0b3JEcmF3YWJsZS5jcHAKQEAgLTAsMCArMSwzODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSAiam5pLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NKTkkuaCIKKyNpbmNsdWRlICJjb3JlX2puaV9oZWxwZXJzLmgiCisjaW5jbHVkZSAibG9nL2xvZy5oIgorCisjaW5jbHVkZSAiUGFpbnQuaCIKKyNpbmNsdWRlICJWZWN0b3JEcmF3YWJsZS5oIgorCituYW1lc3BhY2UgYW5kcm9pZCB7Cit1c2luZyBuYW1lc3BhY2UgdWlyZW5kZXJlcjsKK3VzaW5nIG5hbWVzcGFjZSB1aXJlbmRlcmVyOjpWZWN0b3JEcmF3YWJsZTsKKworc3RhdGljIGpsb25nIGNyZWF0ZVRyZWUoSk5JRW52Kiwgam9iamVjdCwgamxvbmcgZ3JvdXBQdHIpIHsKKyAgICBWZWN0b3JEcmF3YWJsZTo6R3JvdXAqIHJvb3RHcm91cCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VmVjdG9yRHJhd2FibGU6Okdyb3VwKj4oZ3JvdXBQdHIpOworICAgIFZlY3RvckRyYXdhYmxlOjpUcmVlKiB0cmVlID0gbmV3IFZlY3RvckRyYXdhYmxlOjpUcmVlKHJvb3RHcm91cCk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8amxvbmc+KHRyZWUpOworfQorCitzdGF0aWMgdm9pZCBkZWxldGVUcmVlKEpOSUVudiosIGpvYmplY3QsIGpsb25nIHRyZWVQdHIpIHsKKyAgICBWZWN0b3JEcmF3YWJsZTo6VHJlZSogdHJlZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8VmVjdG9yRHJhd2FibGU6OlRyZWUqPih0cmVlUHRyKTsKKyAgICBkZWxldGUgdHJlZTsKK30KKworc3RhdGljIHZvaWQgc2V0VHJlZVZpZXdwb3J0U2l6ZShKTklFbnYqLCBqb2JqZWN0LCBqbG9uZyB0cmVlUHRyLAorICAgICAgICBqZmxvYXQgdmlld3BvcnRXaWR0aCwgamZsb2F0IHZpZXdwb3J0SGVpZ2h0KSB7CisgICAgVmVjdG9yRHJhd2FibGU6OlRyZWUqIHRyZWUgPSByZWludGVycHJldF9jYXN0PFZlY3RvckRyYXdhYmxlOjpUcmVlKj4odHJlZVB0cik7CisgICAgdHJlZS0+c2V0Vmlld3BvcnRTaXplKHZpZXdwb3J0V2lkdGgsIHZpZXdwb3J0SGVpZ2h0KTsKK30KKworc3RhdGljIGpib29sZWFuIHNldFJvb3RBbHBoYShKTklFbnYqLCBqb2JqZWN0LCBqbG9uZyB0cmVlUHRyLCBqZmxvYXQgYWxwaGEpIHsKKyAgICBWZWN0b3JEcmF3YWJsZTo6VHJlZSogdHJlZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8VmVjdG9yRHJhd2FibGU6OlRyZWUqPih0cmVlUHRyKTsKKyAgICByZXR1cm4gdHJlZS0+c2V0Um9vdEFscGhhKGFscGhhKTsKK30KKworc3RhdGljIGpmbG9hdCBnZXRSb290QWxwaGEoSk5JRW52Kiwgam9iamVjdCwgamxvbmcgdHJlZVB0cikgeworICAgIFZlY3RvckRyYXdhYmxlOjpUcmVlKiB0cmVlID0gcmVpbnRlcnByZXRfY2FzdDxWZWN0b3JEcmF3YWJsZTo6VHJlZSo+KHRyZWVQdHIpOworICAgIHJldHVybiB0cmVlLT5nZXRSb290QWxwaGEoKTsKK30KKworc3RhdGljIHZvaWQgc2V0QWxsb3dDYWNoaW5nKEpOSUVudiosIGpvYmplY3QsIGpsb25nIHRyZWVQdHIsIGpib29sZWFuIGFsbG93Q2FjaGluZykgeworICAgIFZlY3RvckRyYXdhYmxlOjpUcmVlKiB0cmVlID0gcmVpbnRlcnByZXRfY2FzdDxWZWN0b3JEcmF3YWJsZTo6VHJlZSo+KHRyZWVQdHIpOworICAgIHRyZWUtPnNldEFsbG93Q2FjaGluZyhhbGxvd0NhY2hpbmcpOworfQorCitzdGF0aWMgdm9pZCBkcmF3KEpOSUVudiogZW52LCBqb2JqZWN0LCBqbG9uZyB0cmVlUHRyLCBqbG9uZyBjYW52YXNQdHIsCisgICAgICAgIGpsb25nIGNvbG9yRmlsdGVyUHRyLCBqb2JqZWN0IGpyZWN0LCBqYm9vbGVhbiBuZWVkc01pcnJvcmluZywgamJvb2xlYW4gY2FuUmV1c2VDYWNoZSkgeworICAgIFZlY3RvckRyYXdhYmxlOjpUcmVlKiB0cmVlID0gcmVpbnRlcnByZXRfY2FzdDxWZWN0b3JEcmF3YWJsZTo6VHJlZSo+KHRyZWVQdHIpOworICAgIENhbnZhcyogY2FudmFzID0gcmVpbnRlcnByZXRfY2FzdDxDYW52YXMqPihjYW52YXNQdHIpOworICAgIFNrUmVjdCByZWN0OworICAgIEdyYXBoaWNzSk5JOjpqcmVjdF90b19yZWN0KGVudiwganJlY3QsICZyZWN0KTsKKyAgICBTa0NvbG9yRmlsdGVyKiBjb2xvckZpbHRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8U2tDb2xvckZpbHRlcio+KGNvbG9yRmlsdGVyUHRyKTsKKyAgICB0cmVlLT5kcmF3KGNhbnZhcywgY29sb3JGaWx0ZXIsIHJlY3QsIG5lZWRzTWlycm9yaW5nLCBjYW5SZXVzZUNhY2hlKTsKK30KKworc3RhdGljIGpsb25nIGNyZWF0ZUVtcHR5RnVsbFBhdGgoSk5JRW52Kiwgam9iamVjdCkgeworICAgIFZlY3RvckRyYXdhYmxlOjpGdWxsUGF0aCogbmV3UGF0aCA9IG5ldyBWZWN0b3JEcmF3YWJsZTo6RnVsbFBhdGgoKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxqbG9uZz4obmV3UGF0aCk7Cit9CisKK3N0YXRpYyBqbG9uZyBjcmVhdGVGdWxsUGF0aChKTklFbnYqLCBqb2JqZWN0LCBqbG9uZyBzcmNGdWxsUGF0aFB0cikgeworICAgIFZlY3RvckRyYXdhYmxlOjpGdWxsUGF0aCogc3JjRnVsbFBhdGggPQorICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxWZWN0b3JEcmF3YWJsZTo6RnVsbFBhdGgqPihzcmNGdWxsUGF0aFB0cik7CisgICAgVmVjdG9yRHJhd2FibGU6OkZ1bGxQYXRoKiBuZXdQYXRoID0gbmV3IFZlY3RvckRyYXdhYmxlOjpGdWxsUGF0aCgqc3JjRnVsbFBhdGgpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGpsb25nPihuZXdQYXRoKTsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlRnVsbFBhdGhQcm9wZXJ0aWVzQW5kU3Ryb2tlU3R5bGVzKEpOSUVudiosIGpvYmplY3QsIGpsb25nIGZ1bGxQYXRoUHRyLAorICAgICAgICBqZmxvYXQgc3Ryb2tlV2lkdGgsIGppbnQgc3Ryb2tlQ29sb3IsIGpmbG9hdCBzdHJva2VBbHBoYSwgamludCBmaWxsQ29sb3IsIGpmbG9hdCBmaWxsQWxwaGEsCisgICAgICAgIGpmbG9hdCB0cmltUGF0aFN0YXJ0LCBqZmxvYXQgdHJpbVBhdGhFbmQsIGpmbG9hdCB0cmltUGF0aE9mZnNldCwgamZsb2F0IHN0cm9rZU1pdGVyTGltaXQsCisgICAgICAgIGppbnQgc3Ryb2tlTGluZUNhcCwgamludCBzdHJva2VMaW5lSm9pbikgeworICAgIFZlY3RvckRyYXdhYmxlOjpGdWxsUGF0aCogZnVsbFBhdGggPSByZWludGVycHJldF9jYXN0PFZlY3RvckRyYXdhYmxlOjpGdWxsUGF0aCo+KGZ1bGxQYXRoUHRyKTsKKyAgICBmdWxsUGF0aC0+dXBkYXRlUHJvcGVydGllcyhzdHJva2VXaWR0aCwgc3Ryb2tlQ29sb3IsIHN0cm9rZUFscGhhLCBmaWxsQ29sb3IsIGZpbGxBbHBoYSwKKyAgICAgICAgICAgIHRyaW1QYXRoU3RhcnQsIHRyaW1QYXRoRW5kLCB0cmltUGF0aE9mZnNldCwgc3Ryb2tlTWl0ZXJMaW1pdCwgc3Ryb2tlTGluZUNhcCwKKyAgICAgICAgICAgIHN0cm9rZUxpbmVKb2luKTsKK30KKworc3RhdGljIGpib29sZWFuIGdldEZ1bGxQYXRoUHJvcGVydGllcyhKTklFbnYqIGVudiwgam9iamVjdCwgamxvbmcgZnVsbFBhdGhQdHIsCisgICAgICAgIGpieXRlQXJyYXkgb3V0UHJvcGVydGllcywgamludCBsZW5ndGgpIHsKKyAgICBWZWN0b3JEcmF3YWJsZTo6RnVsbFBhdGgqIGZ1bGxQYXRoID0gcmVpbnRlcnByZXRfY2FzdDxWZWN0b3JEcmF3YWJsZTo6RnVsbFBhdGgqPihmdWxsUGF0aFB0cik7CisgICAgaW50OF90IHBhdGhQcm9wZXJ0aWVzW2xlbmd0aF07CisgICAgYm9vbCBzdWNjZXNzID0gZnVsbFBhdGgtPmdldFByb3BlcnRpZXMocGF0aFByb3BlcnRpZXMsIGxlbmd0aCk7CisgICAgZW52LT5TZXRCeXRlQXJyYXlSZWdpb24ob3V0UHJvcGVydGllcywgMCwgbGVuZ3RoLCByZWludGVycHJldF9jYXN0PGludDhfdCo+KCZwYXRoUHJvcGVydGllcykpOworICAgIHJldHVybiBzdWNjZXNzOworfQorCitzdGF0aWMgamJvb2xlYW4gZ2V0R3JvdXBQcm9wZXJ0aWVzKEpOSUVudiogZW52LCBqb2JqZWN0LCBqbG9uZyBncm91cFB0ciwKKyAgICAgICAgamZsb2F0QXJyYXkgb3V0UHJvcGVydGllcywgamludCBsZW5ndGgpIHsKKyAgICBWZWN0b3JEcmF3YWJsZTo6R3JvdXAqIGdyb3VwID0gcmVpbnRlcnByZXRfY2FzdDxWZWN0b3JEcmF3YWJsZTo6R3JvdXAqPihncm91cFB0cik7CisgICAgZmxvYXQgZ3JvdXBQcm9wZXJ0aWVzW2xlbmd0aF07CisgICAgYm9vbCBzdWNjZXNzID0gZ3JvdXAtPmdldFByb3BlcnRpZXMoZ3JvdXBQcm9wZXJ0aWVzLCBsZW5ndGgpOworICAgIGVudi0+U2V0RmxvYXRBcnJheVJlZ2lvbihvdXRQcm9wZXJ0aWVzLCAwLCBsZW5ndGgsIHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPigmZ3JvdXBQcm9wZXJ0aWVzKSk7CisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKK3N0YXRpYyBqbG9uZyBjcmVhdGVFbXB0eUNsaXBQYXRoKEpOSUVudiosIGpvYmplY3QpIHsKKyAgICBWZWN0b3JEcmF3YWJsZTo6Q2xpcFBhdGgqIG5ld1BhdGggPSBuZXcgVmVjdG9yRHJhd2FibGU6OkNsaXBQYXRoKCk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8amxvbmc+KG5ld1BhdGgpOworfQorCitzdGF0aWMgamxvbmcgY3JlYXRlQ2xpcFBhdGgoSk5JRW52Kiwgam9iamVjdCwgamxvbmcgc3JjQ2xpcFBhdGhQdHIpIHsKKyAgICBWZWN0b3JEcmF3YWJsZTo6Q2xpcFBhdGgqIHNyY0NsaXBQYXRoID0KKyAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8VmVjdG9yRHJhd2FibGU6OkNsaXBQYXRoKj4oc3JjQ2xpcFBhdGhQdHIpOworICAgIFZlY3RvckRyYXdhYmxlOjpDbGlwUGF0aCogbmV3UGF0aCA9IG5ldyBWZWN0b3JEcmF3YWJsZTo6Q2xpcFBhdGgoKnNyY0NsaXBQYXRoKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxqbG9uZz4obmV3UGF0aCk7Cit9CisKK3N0YXRpYyBqbG9uZyBjcmVhdGVFbXB0eUdyb3VwKEpOSUVudiosIGpvYmplY3QpIHsKKyAgICBWZWN0b3JEcmF3YWJsZTo6R3JvdXAqIG5ld0dyb3VwID0gbmV3IFZlY3RvckRyYXdhYmxlOjpHcm91cCgpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGpsb25nPihuZXdHcm91cCk7Cit9CisKK3N0YXRpYyBqbG9uZyBjcmVhdGVHcm91cChKTklFbnYqLCBqb2JqZWN0LCBqbG9uZyBzcmNHcm91cFB0cikgeworICAgIFZlY3RvckRyYXdhYmxlOjpHcm91cCogc3JjR3JvdXAgPSByZWludGVycHJldF9jYXN0PFZlY3RvckRyYXdhYmxlOjpHcm91cCo+KHNyY0dyb3VwUHRyKTsKKyAgICBWZWN0b3JEcmF3YWJsZTo6R3JvdXAqIG5ld0dyb3VwID0gbmV3IFZlY3RvckRyYXdhYmxlOjpHcm91cCgqc3JjR3JvdXApOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGpsb25nPihuZXdHcm91cCk7Cit9CisKK3N0YXRpYyB2b2lkIGRlbGV0ZU5vZGUoSk5JRW52Kiwgam9iamVjdCwgamxvbmcgbm9kZVB0cikgeworICAgIFZlY3RvckRyYXdhYmxlOjpOb2RlKiBub2RlID0gcmVpbnRlcnByZXRfY2FzdDxWZWN0b3JEcmF3YWJsZTo6Tm9kZSo+KG5vZGVQdHIpOworICAgIGRlbGV0ZSBub2RlOworfQorCitzdGF0aWMgdm9pZCBzZXROb2RlTmFtZShKTklFbnYqIGVudiwgam9iamVjdCwgamxvbmcgbm9kZVB0ciwganN0cmluZyBuYW1lU3RyKSB7CisgICAgVmVjdG9yRHJhd2FibGU6Ok5vZGUqIG5vZGUgPSByZWludGVycHJldF9jYXN0PFZlY3RvckRyYXdhYmxlOjpOb2RlKj4obm9kZVB0cik7CisgICAgY29uc3QgY2hhciogbm9kZU5hbWUgPSBlbnYtPkdldFN0cmluZ1VURkNoYXJzKG5hbWVTdHIsIE5VTEwpOworICAgIG5vZGUtPnNldE5hbWUobm9kZU5hbWUpOworICAgIGVudi0+UmVsZWFzZVN0cmluZ1VURkNoYXJzKG5hbWVTdHIsIG5vZGVOYW1lKTsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlR3JvdXBQcm9wZXJ0aWVzKEpOSUVudiosIGpvYmplY3QsIGpsb25nIGdyb3VwUHRyLCBqZmxvYXQgcm90YXRlLCBqZmxvYXQgcGl2b3RYLAorICAgICAgICBqZmxvYXQgcGl2b3RZLCBqZmxvYXQgc2NhbGVYLCBqZmxvYXQgc2NhbGVZLCBqZmxvYXQgdHJhbnNsYXRlWCwgamZsb2F0IHRyYW5zbGF0ZVkpIHsKKyAgICBWZWN0b3JEcmF3YWJsZTo6R3JvdXAqIGdyb3VwID0gcmVpbnRlcnByZXRfY2FzdDxWZWN0b3JEcmF3YWJsZTo6R3JvdXAqPihncm91cFB0cik7CisgICAgZ3JvdXAtPnVwZGF0ZUxvY2FsTWF0cml4KHJvdGF0ZSwgcGl2b3RYLCBwaXZvdFksIHNjYWxlWCwgc2NhbGVZLCB0cmFuc2xhdGVYLCB0cmFuc2xhdGVZKTsKK30KKworc3RhdGljIHZvaWQgYWRkQ2hpbGQoSk5JRW52Kiwgam9iamVjdCwgamxvbmcgZ3JvdXBQdHIsIGpsb25nIGNoaWxkUHRyKSB7CisgICAgVmVjdG9yRHJhd2FibGU6Okdyb3VwKiBncm91cCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VmVjdG9yRHJhd2FibGU6Okdyb3VwKj4oZ3JvdXBQdHIpOworICAgIFZlY3RvckRyYXdhYmxlOjpOb2RlKiBjaGlsZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VmVjdG9yRHJhd2FibGU6Ok5vZGUqPihjaGlsZFB0cik7CisgICAgZ3JvdXAtPmFkZENoaWxkKGNoaWxkKTsKK30KKworc3RhdGljIHZvaWQgc2V0UGF0aFN0cmluZyhKTklFbnYqIGVudiwgam9iamVjdCwgamxvbmcgcGF0aFB0ciwganN0cmluZyBpbnB1dFN0ciwKKyAgICAgICAgamludCBzdHJpbmdMZW5ndGgpIHsKKyAgICBWZWN0b3JEcmF3YWJsZTo6UGF0aCogcGF0aCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VmVjdG9yRHJhd2FibGU6OlBhdGgqPihwYXRoUHRyKTsKKyAgICBjb25zdCBjaGFyKiBwYXRoU3RyaW5nID0gZW52LT5HZXRTdHJpbmdVVEZDaGFycyhpbnB1dFN0ciwgTlVMTCk7CisgICAgcGF0aC0+c2V0UGF0aChwYXRoU3RyaW5nLCBzdHJpbmdMZW5ndGgpOworICAgIGVudi0+UmVsZWFzZVN0cmluZ1VURkNoYXJzKGlucHV0U3RyLCBwYXRoU3RyaW5nKTsKK30KKworc3RhdGljIGpmbG9hdCBnZXRSb3RhdGlvbihKTklFbnYqLCBqb2JqZWN0LCBqbG9uZyBncm91cFB0cikgeworICAgIFZlY3RvckRyYXdhYmxlOjpHcm91cCogZ3JvdXAgPSByZWludGVycHJldF9jYXN0PFZlY3RvckRyYXdhYmxlOjpHcm91cCo+KGdyb3VwUHRyKTsKKyAgICByZXR1cm4gZ3JvdXAtPmdldFJvdGF0aW9uKCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldFJvdGF0aW9uKEpOSUVudiosIGpvYmplY3QsIGpsb25nIGdyb3VwUHRyLCBqZmxvYXQgcm90YXRpb24pIHsKKyAgICBWZWN0b3JEcmF3YWJsZTo6R3JvdXAqIGdyb3VwID0gcmVpbnRlcnByZXRfY2FzdDxWZWN0b3JEcmF3YWJsZTo6R3JvdXAqPihncm91cFB0cik7CisgICAgZ3JvdXAtPnNldFJvdGF0aW9uKHJvdGF0aW9uKTsKK30KKworc3RhdGljIGpmbG9hdCBnZXRQaXZvdFgoSk5JRW52Kiwgam9iamVjdCwgamxvbmcgZ3JvdXBQdHIpIHsKKyAgICBWZWN0b3JEcmF3YWJsZTo6R3JvdXAqIGdyb3VwID0gcmVpbnRlcnByZXRfY2FzdDxWZWN0b3JEcmF3YWJsZTo6R3JvdXAqPihncm91cFB0cik7CisgICAgcmV0dXJuIGdyb3VwLT5nZXRQaXZvdFgoKTsKK30KKworc3RhdGljIHZvaWQgc2V0UGl2b3RYKEpOSUVudiosIGpvYmplY3QsIGpsb25nIGdyb3VwUHRyLCBqZmxvYXQgcGl2b3RYKSB7CisgICAgVmVjdG9yRHJhd2FibGU6Okdyb3VwKiBncm91cCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VmVjdG9yRHJhd2FibGU6Okdyb3VwKj4oZ3JvdXBQdHIpOworICAgIGdyb3VwLT5zZXRQaXZvdFgocGl2b3RYKTsKK30KKworc3RhdGljIGpmbG9hdCBnZXRQaXZvdFkoSk5JRW52Kiwgam9iamVjdCwgamxvbmcgZ3JvdXBQdHIpIHsKKyAgICBWZWN0b3JEcmF3YWJsZTo6R3JvdXAqIGdyb3VwID0gcmVpbnRlcnByZXRfY2FzdDxWZWN0b3JEcmF3YWJsZTo6R3JvdXAqPihncm91cFB0cik7CisgICAgcmV0dXJuIGdyb3VwLT5nZXRQaXZvdFkoKTsKK30KKworc3RhdGljIHZvaWQgc2V0UGl2b3RZKEpOSUVudiosIGpvYmplY3QsIGpsb25nIGdyb3VwUHRyLCBqZmxvYXQgcGl2b3RZKSB7CisgICAgVmVjdG9yRHJhd2FibGU6Okdyb3VwKiBncm91cCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VmVjdG9yRHJhd2FibGU6Okdyb3VwKj4oZ3JvdXBQdHIpOworICAgIGdyb3VwLT5zZXRQaXZvdFkocGl2b3RZKTsKK30KKworc3RhdGljIGpmbG9hdCBnZXRTY2FsZVgoSk5JRW52Kiwgam9iamVjdCwgamxvbmcgZ3JvdXBQdHIpIHsKKyAgICBWZWN0b3JEcmF3YWJsZTo6R3JvdXAqIGdyb3VwID0gcmVpbnRlcnByZXRfY2FzdDxWZWN0b3JEcmF3YWJsZTo6R3JvdXAqPihncm91cFB0cik7CisgICAgcmV0dXJuIGdyb3VwLT5nZXRTY2FsZVgoKTsKK30KKworc3RhdGljIHZvaWQgc2V0U2NhbGVYKEpOSUVudiosIGpvYmplY3QsIGpsb25nIGdyb3VwUHRyLCBqZmxvYXQgc2NhbGVYKSB7CisgICAgVmVjdG9yRHJhd2FibGU6Okdyb3VwKiBncm91cCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VmVjdG9yRHJhd2FibGU6Okdyb3VwKj4oZ3JvdXBQdHIpOworICAgIGdyb3VwLT5zZXRTY2FsZVgoc2NhbGVYKTsKK30KKworc3RhdGljIGpmbG9hdCBnZXRTY2FsZVkoSk5JRW52Kiwgam9iamVjdCwgamxvbmcgZ3JvdXBQdHIpIHsKKyAgICBWZWN0b3JEcmF3YWJsZTo6R3JvdXAqIGdyb3VwID0gcmVpbnRlcnByZXRfY2FzdDxWZWN0b3JEcmF3YWJsZTo6R3JvdXAqPihncm91cFB0cik7CisgICAgcmV0dXJuIGdyb3VwLT5nZXRTY2FsZVkoKTsKK30KKworc3RhdGljIHZvaWQgc2V0U2NhbGVZKEpOSUVudiosIGpvYmplY3QsIGpsb25nIGdyb3VwUHRyLCBqZmxvYXQgc2NhbGVZKSB7CisgICAgVmVjdG9yRHJhd2FibGU6Okdyb3VwKiBncm91cCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VmVjdG9yRHJhd2FibGU6Okdyb3VwKj4oZ3JvdXBQdHIpOworICAgIGdyb3VwLT5zZXRTY2FsZVkoc2NhbGVZKTsKK30KKworc3RhdGljIGpmbG9hdCBnZXRUcmFuc2xhdGVYKEpOSUVudiosIGpvYmplY3QsIGpsb25nIGdyb3VwUHRyKSB7CisgICAgVmVjdG9yRHJhd2FibGU6Okdyb3VwKiBncm91cCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VmVjdG9yRHJhd2FibGU6Okdyb3VwKj4oZ3JvdXBQdHIpOworICAgIHJldHVybiBncm91cC0+Z2V0VHJhbnNsYXRlWCgpOworfQorCitzdGF0aWMgdm9pZCBzZXRUcmFuc2xhdGVYKEpOSUVudiosIGpvYmplY3QsIGpsb25nIGdyb3VwUHRyLCBqZmxvYXQgdHJhbnNsYXRlWCkgeworICAgIFZlY3RvckRyYXdhYmxlOjpHcm91cCogZ3JvdXAgPSByZWludGVycHJldF9jYXN0PFZlY3RvckRyYXdhYmxlOjpHcm91cCo+KGdyb3VwUHRyKTsKKyAgICBncm91cC0+c2V0VHJhbnNsYXRlWCh0cmFuc2xhdGVYKTsKK30KKworc3RhdGljIGpmbG9hdCBnZXRUcmFuc2xhdGVZKEpOSUVudiosIGpvYmplY3QsIGpsb25nIGdyb3VwUHRyKSB7CisgICAgVmVjdG9yRHJhd2FibGU6Okdyb3VwKiBncm91cCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VmVjdG9yRHJhd2FibGU6Okdyb3VwKj4oZ3JvdXBQdHIpOworICAgIHJldHVybiBncm91cC0+Z2V0VHJhbnNsYXRlWSgpOworfQorCitzdGF0aWMgdm9pZCBzZXRUcmFuc2xhdGVZKEpOSUVudiosIGpvYmplY3QsIGpsb25nIGdyb3VwUHRyLCBqZmxvYXQgdHJhbnNsYXRlWSkgeworICAgIFZlY3RvckRyYXdhYmxlOjpHcm91cCogZ3JvdXAgPSByZWludGVycHJldF9jYXN0PFZlY3RvckRyYXdhYmxlOjpHcm91cCo+KGdyb3VwUHRyKTsKKyAgICBncm91cC0+c2V0VHJhbnNsYXRlWSh0cmFuc2xhdGVZKTsKK30KKworc3RhdGljIHZvaWQgc2V0UGF0aERhdGEoSk5JRW52Kiwgam9iamVjdCwgamxvbmcgcGF0aFB0ciwgamxvbmcgcGF0aERhdGFQdHIpIHsKKyAgICBWZWN0b3JEcmF3YWJsZTo6UGF0aCogcGF0aCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VmVjdG9yRHJhd2FibGU6OlBhdGgqPihwYXRoUHRyKTsKKyAgICBQYXRoRGF0YSogcGF0aERhdGEgPSByZWludGVycHJldF9jYXN0PFBhdGhEYXRhKj4ocGF0aERhdGFQdHIpOworICAgIHBhdGgtPnNldFBhdGhEYXRhKCpwYXRoRGF0YSk7Cit9CisKK3N0YXRpYyBqZmxvYXQgZ2V0U3Ryb2tlV2lkdGgoSk5JRW52Kiwgam9iamVjdCwgamxvbmcgZnVsbFBhdGhQdHIpIHsKKyAgICBWZWN0b3JEcmF3YWJsZTo6RnVsbFBhdGgqIGZ1bGxQYXRoID0gcmVpbnRlcnByZXRfY2FzdDxWZWN0b3JEcmF3YWJsZTo6RnVsbFBhdGgqPihmdWxsUGF0aFB0cik7CisgICAgcmV0dXJuIGZ1bGxQYXRoLT5nZXRTdHJva2VXaWR0aCgpOworfQorCitzdGF0aWMgdm9pZCBzZXRTdHJva2VXaWR0aChKTklFbnYqLCBqb2JqZWN0LCBqbG9uZyBmdWxsUGF0aFB0ciwgamZsb2F0IHN0cm9rZVdpZHRoKSB7CisgICAgVmVjdG9yRHJhd2FibGU6OkZ1bGxQYXRoKiBmdWxsUGF0aCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VmVjdG9yRHJhd2FibGU6OkZ1bGxQYXRoKj4oZnVsbFBhdGhQdHIpOworICAgIGZ1bGxQYXRoLT5zZXRTdHJva2VXaWR0aChzdHJva2VXaWR0aCk7Cit9CisKK3N0YXRpYyBqaW50IGdldFN0cm9rZUNvbG9yKEpOSUVudiosIGpvYmplY3QsIGpsb25nIGZ1bGxQYXRoUHRyKSB7CisgICAgVmVjdG9yRHJhd2FibGU6OkZ1bGxQYXRoKiBmdWxsUGF0aCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VmVjdG9yRHJhd2FibGU6OkZ1bGxQYXRoKj4oZnVsbFBhdGhQdHIpOworICAgIHJldHVybiBmdWxsUGF0aC0+Z2V0U3Ryb2tlQ29sb3IoKTsKK30KKworc3RhdGljIHZvaWQgc2V0U3Ryb2tlQ29sb3IoSk5JRW52Kiwgam9iamVjdCwgamxvbmcgZnVsbFBhdGhQdHIsIGppbnQgc3Ryb2tlQ29sb3IpIHsKKyAgICBWZWN0b3JEcmF3YWJsZTo6RnVsbFBhdGgqIGZ1bGxQYXRoID0gcmVpbnRlcnByZXRfY2FzdDxWZWN0b3JEcmF3YWJsZTo6RnVsbFBhdGgqPihmdWxsUGF0aFB0cik7CisgICAgZnVsbFBhdGgtPnNldFN0cm9rZUNvbG9yKHN0cm9rZUNvbG9yKTsKK30KKworc3RhdGljIGpmbG9hdCBnZXRTdHJva2VBbHBoYShKTklFbnYqLCBqb2JqZWN0LCBqbG9uZyBmdWxsUGF0aFB0cikgeworICAgIFZlY3RvckRyYXdhYmxlOjpGdWxsUGF0aCogZnVsbFBhdGggPSByZWludGVycHJldF9jYXN0PFZlY3RvckRyYXdhYmxlOjpGdWxsUGF0aCo+KGZ1bGxQYXRoUHRyKTsKKyAgICByZXR1cm4gZnVsbFBhdGgtPmdldFN0cm9rZUFscGhhKCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldFN0cm9rZUFscGhhKEpOSUVudiosIGpvYmplY3QsIGpsb25nIGZ1bGxQYXRoUHRyLCBqZmxvYXQgc3Ryb2tlQWxwaGEpIHsKKyAgICBWZWN0b3JEcmF3YWJsZTo6RnVsbFBhdGgqIGZ1bGxQYXRoID0gcmVpbnRlcnByZXRfY2FzdDxWZWN0b3JEcmF3YWJsZTo6RnVsbFBhdGgqPihmdWxsUGF0aFB0cik7CisgICAgZnVsbFBhdGgtPnNldFN0cm9rZUFscGhhKHN0cm9rZUFscGhhKTsKK30KKworc3RhdGljIGppbnQgZ2V0RmlsbENvbG9yKEpOSUVudiosIGpvYmplY3QsIGpsb25nIGZ1bGxQYXRoUHRyKSB7CisgICAgVmVjdG9yRHJhd2FibGU6OkZ1bGxQYXRoKiBmdWxsUGF0aCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VmVjdG9yRHJhd2FibGU6OkZ1bGxQYXRoKj4oZnVsbFBhdGhQdHIpOworICAgIHJldHVybiBmdWxsUGF0aC0+Z2V0RmlsbENvbG9yKCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldEZpbGxDb2xvcihKTklFbnYqLCBqb2JqZWN0LCBqbG9uZyBmdWxsUGF0aFB0ciwgamludCBmaWxsQ29sb3IpIHsKKyAgICBWZWN0b3JEcmF3YWJsZTo6RnVsbFBhdGgqIGZ1bGxQYXRoID0gcmVpbnRlcnByZXRfY2FzdDxWZWN0b3JEcmF3YWJsZTo6RnVsbFBhdGgqPihmdWxsUGF0aFB0cik7CisgICAgZnVsbFBhdGgtPnNldEZpbGxDb2xvcihmaWxsQ29sb3IpOworfQorCitzdGF0aWMgamZsb2F0IGdldEZpbGxBbHBoYShKTklFbnYqLCBqb2JqZWN0LCBqbG9uZyBmdWxsUGF0aFB0cikgeworICAgIFZlY3RvckRyYXdhYmxlOjpGdWxsUGF0aCogZnVsbFBhdGggPSByZWludGVycHJldF9jYXN0PFZlY3RvckRyYXdhYmxlOjpGdWxsUGF0aCo+KGZ1bGxQYXRoUHRyKTsKKyAgICByZXR1cm4gZnVsbFBhdGgtPmdldEZpbGxBbHBoYSgpOworfQorCitzdGF0aWMgdm9pZCBzZXRGaWxsQWxwaGEoSk5JRW52Kiwgam9iamVjdCwgamxvbmcgZnVsbFBhdGhQdHIsIGpmbG9hdCBmaWxsQWxwaGEpIHsKKyAgICBWZWN0b3JEcmF3YWJsZTo6RnVsbFBhdGgqIGZ1bGxQYXRoID0gcmVpbnRlcnByZXRfY2FzdDxWZWN0b3JEcmF3YWJsZTo6RnVsbFBhdGgqPihmdWxsUGF0aFB0cik7CisgICAgZnVsbFBhdGgtPnNldEZpbGxBbHBoYShmaWxsQWxwaGEpOworfQorCitzdGF0aWMgamZsb2F0IGdldFRyaW1QYXRoU3RhcnQoSk5JRW52Kiwgam9iamVjdCwgamxvbmcgZnVsbFBhdGhQdHIpIHsKKyAgICBWZWN0b3JEcmF3YWJsZTo6RnVsbFBhdGgqIGZ1bGxQYXRoID0gcmVpbnRlcnByZXRfY2FzdDxWZWN0b3JEcmF3YWJsZTo6RnVsbFBhdGgqPihmdWxsUGF0aFB0cik7CisgICAgcmV0dXJuIGZ1bGxQYXRoLT5nZXRUcmltUGF0aFN0YXJ0KCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldFRyaW1QYXRoU3RhcnQoSk5JRW52Kiwgam9iamVjdCwgamxvbmcgZnVsbFBhdGhQdHIsIGpmbG9hdCB0cmltUGF0aFN0YXJ0KSB7CisgICAgVmVjdG9yRHJhd2FibGU6OkZ1bGxQYXRoKiBmdWxsUGF0aCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VmVjdG9yRHJhd2FibGU6OkZ1bGxQYXRoKj4oZnVsbFBhdGhQdHIpOworICAgIGZ1bGxQYXRoLT5zZXRUcmltUGF0aFN0YXJ0KHRyaW1QYXRoU3RhcnQpOworfQorCitzdGF0aWMgamZsb2F0IGdldFRyaW1QYXRoRW5kKEpOSUVudiosIGpvYmplY3QsIGpsb25nIGZ1bGxQYXRoUHRyKSB7CisgICAgVmVjdG9yRHJhd2FibGU6OkZ1bGxQYXRoKiBmdWxsUGF0aCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VmVjdG9yRHJhd2FibGU6OkZ1bGxQYXRoKj4oZnVsbFBhdGhQdHIpOworICAgIHJldHVybiBmdWxsUGF0aC0+Z2V0VHJpbVBhdGhFbmQoKTsKK30KKworc3RhdGljIHZvaWQgc2V0VHJpbVBhdGhFbmQoSk5JRW52Kiwgam9iamVjdCwgamxvbmcgZnVsbFBhdGhQdHIsIGpmbG9hdCB0cmltUGF0aEVuZCkgeworICAgIFZlY3RvckRyYXdhYmxlOjpGdWxsUGF0aCogZnVsbFBhdGggPSByZWludGVycHJldF9jYXN0PFZlY3RvckRyYXdhYmxlOjpGdWxsUGF0aCo+KGZ1bGxQYXRoUHRyKTsKKyAgICBmdWxsUGF0aC0+c2V0VHJpbVBhdGhFbmQodHJpbVBhdGhFbmQpOworfQorCitzdGF0aWMgamZsb2F0IGdldFRyaW1QYXRoT2Zmc2V0KEpOSUVudiosIGpvYmplY3QsIGpsb25nIGZ1bGxQYXRoUHRyKSB7CisgICAgVmVjdG9yRHJhd2FibGU6OkZ1bGxQYXRoKiBmdWxsUGF0aCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VmVjdG9yRHJhd2FibGU6OkZ1bGxQYXRoKj4oZnVsbFBhdGhQdHIpOworICAgIHJldHVybiBmdWxsUGF0aC0+Z2V0VHJpbVBhdGhPZmZzZXQoKTsKK30KKworc3RhdGljIHZvaWQgc2V0VHJpbVBhdGhPZmZzZXQoSk5JRW52Kiwgam9iamVjdCwgamxvbmcgZnVsbFBhdGhQdHIsIGpmbG9hdCB0cmltUGF0aE9mZnNldCkgeworICAgIFZlY3RvckRyYXdhYmxlOjpGdWxsUGF0aCogZnVsbFBhdGggPSByZWludGVycHJldF9jYXN0PFZlY3RvckRyYXdhYmxlOjpGdWxsUGF0aCo+KGZ1bGxQYXRoUHRyKTsKKyAgICBmdWxsUGF0aC0+c2V0VHJpbVBhdGhPZmZzZXQodHJpbVBhdGhPZmZzZXQpOworfQorCitzdGF0aWMgY29uc3QgSk5JTmF0aXZlTWV0aG9kIGdNZXRob2RzW10gPSB7CisgICAgICAgIHsibkNyZWF0ZVJlbmRlcmVyIiwgIiEoSilKIiwgKHZvaWQqKWNyZWF0ZVRyZWV9LAorICAgICAgICB7Im5EZXN0cm95UmVuZGVyZXIiLCAiIShKKVYiLCAodm9pZCopZGVsZXRlVHJlZX0sCisgICAgICAgIHsiblNldFJlbmRlcmVyVmlld3BvcnRTaXplIiwgIiEoSkZGKVYiLCAodm9pZCopc2V0VHJlZVZpZXdwb3J0U2l6ZX0sCisgICAgICAgIHsiblNldFJvb3RBbHBoYSIsICIhKEpGKVoiLCAodm9pZCopc2V0Um9vdEFscGhhfSwKKyAgICAgICAgeyJuR2V0Um9vdEFscGhhIiwgIiEoSilGIiwgKHZvaWQqKWdldFJvb3RBbHBoYX0sCisgICAgICAgIHsiblNldEFsbG93Q2FjaGluZyIsICIhKEpaKVYiLCAodm9pZCopc2V0QWxsb3dDYWNoaW5nfSwKKworICAgICAgICB7Im5EcmF3IiwgIihKSkpMYW5kcm9pZC9ncmFwaGljcy9SZWN0O1paKVYiLCAodm9pZCopZHJhd30sCisgICAgICAgIHsibkNyZWF0ZUZ1bGxQYXRoIiwgIiEoKUoiLCAodm9pZCopY3JlYXRlRW1wdHlGdWxsUGF0aH0sCisgICAgICAgIHsibkNyZWF0ZUZ1bGxQYXRoIiwgIiEoSilKIiwgKHZvaWQqKWNyZWF0ZUZ1bGxQYXRofSwKKyAgICAgICAgeyJuVXBkYXRlRnVsbFBhdGhQcm9wZXJ0aWVzIiwgIiEoSkZJRklGRkZGRklJKVYiLCAodm9pZCopdXBkYXRlRnVsbFBhdGhQcm9wZXJ0aWVzQW5kU3Ryb2tlU3R5bGVzfSwKKyAgICAgICAgeyJuR2V0RnVsbFBhdGhQcm9wZXJ0aWVzIiwgIihKW0JJKVoiLCAodm9pZCopZ2V0RnVsbFBhdGhQcm9wZXJ0aWVzfSwKKyAgICAgICAgeyJuR2V0R3JvdXBQcm9wZXJ0aWVzIiwgIihKW0ZJKVoiLCAodm9pZCopZ2V0R3JvdXBQcm9wZXJ0aWVzfSwKKworICAgICAgICB7Im5DcmVhdGVDbGlwUGF0aCIsICIhKClKIiwgKHZvaWQqKWNyZWF0ZUVtcHR5Q2xpcFBhdGh9LAorICAgICAgICB7Im5DcmVhdGVDbGlwUGF0aCIsICIhKEopSiIsICh2b2lkKiljcmVhdGVDbGlwUGF0aH0sCisgICAgICAgIHsibkNyZWF0ZUdyb3VwIiwgIiEoKUoiLCAodm9pZCopY3JlYXRlRW1wdHlHcm91cH0sCisgICAgICAgIHsibkNyZWF0ZUdyb3VwIiwgIiEoSilKIiwgKHZvaWQqKWNyZWF0ZUdyb3VwfSwKKyAgICAgICAgeyJuRGVzdHJveSIsICIhKEopViIsICh2b2lkKilkZWxldGVOb2RlfSwKKyAgICAgICAgeyJuU2V0TmFtZSIsICIoSkxqYXZhL2xhbmcvU3RyaW5nOylWIiwgKHZvaWQqKXNldE5vZGVOYW1lfSwKKyAgICAgICAgeyJuVXBkYXRlR3JvdXBQcm9wZXJ0aWVzIiwgIiEoSkZGRkZGRkYpViIsICh2b2lkKil1cGRhdGVHcm91cFByb3BlcnRpZXN9LAorCisgICAgICAgIHsibkFkZENoaWxkIiwgIiEoSkopViIsICh2b2lkKilhZGRDaGlsZH0sCisgICAgICAgIHsiblNldFBhdGhTdHJpbmciLCAiKEpMamF2YS9sYW5nL1N0cmluZztJKVYiLCAodm9pZCopc2V0UGF0aFN0cmluZ30sCisKKyAgICAgICAgeyJuR2V0Um90YXRpb24iLCAiIShKKUYiLCAodm9pZCopZ2V0Um90YXRpb259LAorICAgICAgICB7Im5TZXRSb3RhdGlvbiIsICIhKEpGKVYiLCAodm9pZCopc2V0Um90YXRpb259LAorICAgICAgICB7Im5HZXRQaXZvdFgiLCAiIShKKUYiLCAodm9pZCopZ2V0UGl2b3RYfSwKKyAgICAgICAgeyJuU2V0UGl2b3RYIiwgIiEoSkYpViIsICh2b2lkKilzZXRQaXZvdFh9LAorICAgICAgICB7Im5HZXRQaXZvdFkiLCAiIShKKUYiLCAodm9pZCopZ2V0UGl2b3RZfSwKKyAgICAgICAgeyJuU2V0UGl2b3RZIiwgIiEoSkYpViIsICh2b2lkKilzZXRQaXZvdFl9LAorICAgICAgICB7Im5HZXRTY2FsZVgiLCAiIShKKUYiLCAodm9pZCopZ2V0U2NhbGVYfSwKKyAgICAgICAgeyJuU2V0U2NhbGVYIiwgIiEoSkYpViIsICh2b2lkKilzZXRTY2FsZVh9LAorICAgICAgICB7Im5HZXRTY2FsZVkiLCAiIShKKUYiLCAodm9pZCopZ2V0U2NhbGVZfSwKKyAgICAgICAgeyJuU2V0U2NhbGVZIiwgIiEoSkYpViIsICh2b2lkKilzZXRTY2FsZVl9LAorICAgICAgICB7Im5HZXRUcmFuc2xhdGVYIiwgIiEoSilGIiwgKHZvaWQqKWdldFRyYW5zbGF0ZVh9LAorICAgICAgICB7Im5TZXRUcmFuc2xhdGVYIiwgIiEoSkYpViIsICh2b2lkKilzZXRUcmFuc2xhdGVYfSwKKyAgICAgICAgeyJuR2V0VHJhbnNsYXRlWSIsICIhKEopRiIsICh2b2lkKilnZXRUcmFuc2xhdGVZfSwKKyAgICAgICAgeyJuU2V0VHJhbnNsYXRlWSIsICIhKEpGKVYiLCAodm9pZCopc2V0VHJhbnNsYXRlWX0sCisKKyAgICAgICAgeyJuU2V0UGF0aERhdGEiLCAiIShKSilWIiwgKHZvaWQqKXNldFBhdGhEYXRhfSwKKyAgICAgICAgeyJuR2V0U3Ryb2tlV2lkdGgiLCAiIShKKUYiLCAodm9pZCopZ2V0U3Ryb2tlV2lkdGh9LAorICAgICAgICB7Im5TZXRTdHJva2VXaWR0aCIsICIhKEpGKVYiLCAodm9pZCopc2V0U3Ryb2tlV2lkdGh9LAorICAgICAgICB7Im5HZXRTdHJva2VDb2xvciIsICIhKEopSSIsICh2b2lkKilnZXRTdHJva2VDb2xvcn0sCisgICAgICAgIHsiblNldFN0cm9rZUNvbG9yIiwgIiEoSkkpViIsICh2b2lkKilzZXRTdHJva2VDb2xvcn0sCisgICAgICAgIHsibkdldFN0cm9rZUFscGhhIiwgIiEoSilGIiwgKHZvaWQqKWdldFN0cm9rZUFscGhhfSwKKyAgICAgICAgeyJuU2V0U3Ryb2tlQWxwaGEiLCAiIShKRilWIiwgKHZvaWQqKXNldFN0cm9rZUFscGhhfSwKKyAgICAgICAgeyJuR2V0RmlsbENvbG9yIiwgIiEoSilJIiwgKHZvaWQqKWdldEZpbGxDb2xvcn0sCisgICAgICAgIHsiblNldEZpbGxDb2xvciIsICIhKEpJKVYiLCAodm9pZCopc2V0RmlsbENvbG9yfSwKKyAgICAgICAgeyJuR2V0RmlsbEFscGhhIiwgIiEoSilGIiwgKHZvaWQqKWdldEZpbGxBbHBoYX0sCisgICAgICAgIHsiblNldEZpbGxBbHBoYSIsICIhKEpGKVYiLCAodm9pZCopc2V0RmlsbEFscGhhfSwKKyAgICAgICAgeyJuR2V0VHJpbVBhdGhTdGFydCIsICIhKEopRiIsICh2b2lkKilnZXRUcmltUGF0aFN0YXJ0fSwKKyAgICAgICAgeyJuU2V0VHJpbVBhdGhTdGFydCIsICIhKEpGKVYiLCAodm9pZCopc2V0VHJpbVBhdGhTdGFydH0sCisgICAgICAgIHsibkdldFRyaW1QYXRoRW5kIiwgIiEoSilGIiwgKHZvaWQqKWdldFRyaW1QYXRoRW5kfSwKKyAgICAgICAgeyJuU2V0VHJpbVBhdGhFbmQiLCAiIShKRilWIiwgKHZvaWQqKXNldFRyaW1QYXRoRW5kfSwKKyAgICAgICAgeyJuR2V0VHJpbVBhdGhPZmZzZXQiLCAiIShKKUYiLCAodm9pZCopZ2V0VHJpbVBhdGhPZmZzZXR9LAorICAgICAgICB7Im5TZXRUcmltUGF0aE9mZnNldCIsICIhKEpGKVYiLCAodm9pZCopc2V0VHJpbVBhdGhPZmZzZXR9LAorfTsKKworaW50IHJlZ2lzdGVyX2FuZHJvaWRfZ3JhcGhpY3NfZHJhd2FibGVfVmVjdG9yRHJhd2FibGUoSk5JRW52KiBlbnYpIHsKKyAgICByZXR1cm4gUmVnaXN0ZXJNZXRob2RzT3JEaWUoZW52LCAiYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9WZWN0b3JEcmF3YWJsZSIsIGdNZXRob2RzLCBORUxFTShnTWV0aG9kcykpOworfQorCit9OyAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvY29yZS9qbmkvYW5kcm9pZF9vcGVuZ2xfR0xFUzMyLmNwcCBiL2NvcmUvam5pL2FuZHJvaWRfb3BlbmdsX0dMRVMzMi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjlhMWE4ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvam5pL2FuZHJvaWRfb3BlbmdsX0dMRVMzMi5jcHAKQEAgLTAsMCArMSwxOTk5IEBACisvKgorICogQ29weXJpZ2h0IDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvLyBUaGlzIHNvdXJjZSBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkCisKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnVzZWQtdmFyaWFibGUiCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW51c2VkLWJ1dC1zZXQtdmFyaWFibGUiCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW51c2VkLWZ1bmN0aW9uIgorCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8R0xFUzMvZ2wzMi5oPgorI2luY2x1ZGUgPGpuaS5oPgorI2luY2x1ZGUgPEpOSUhlbHAuaD4KKyNpbmNsdWRlIDxhbmRyb2lkX3J1bnRpbWUvQW5kcm9pZFJ1bnRpbWUuaD4KKyNpbmNsdWRlIDx1dGlscy9taXNjLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKK3N0YXRpYyBpbnQgaW5pdGlhbGl6ZWQgPSAwOworCitzdGF0aWMgamNsYXNzIG5pb0FjY2Vzc0NsYXNzOworc3RhdGljIGpjbGFzcyBidWZmZXJDbGFzczsKK3N0YXRpYyBqbWV0aG9kSUQgZ2V0QmFzZVBvaW50ZXJJRDsKK3N0YXRpYyBqbWV0aG9kSUQgZ2V0QmFzZUFycmF5SUQ7CitzdGF0aWMgam1ldGhvZElEIGdldEJhc2VBcnJheU9mZnNldElEOworc3RhdGljIGpmaWVsZElEIHBvc2l0aW9uSUQ7CitzdGF0aWMgamZpZWxkSUQgbGltaXRJRDsKK3N0YXRpYyBqZmllbGRJRCBlbGVtZW50U2l6ZVNoaWZ0SUQ7CisKKworLyogc3BlY2lhbCBjYWxscyBpbXBsZW1lbnRlZCBpbiBBbmRyb2lkJ3MgR0xFUyB3cmFwcGVyIHVzZWQgdG8gbW9yZQorICogZWZmaWNpZW50bHkgYm91bmQtY2hlY2sgcGFzc2VkIGFycmF5cyAqLworZXh0ZXJuICJDIiB7CisjaWZkZWYgR0xfVkVSU0lPTl9FU19DTV8xXzEKK0dMX0FQSSB2b2lkIEdMX0FQSUVOVFJZIGdsQ29sb3JQb2ludGVyQm91bmRzKEdMaW50IHNpemUsIEdMZW51bSB0eXBlLCBHTHNpemVpIHN0cmlkZSwKKyAgICAgICAgY29uc3QgR0x2b2lkICpwdHIsIEdMc2l6ZWkgY291bnQpOworR0xfQVBJIHZvaWQgR0xfQVBJRU5UUlkgZ2xOb3JtYWxQb2ludGVyQm91bmRzKEdMZW51bSB0eXBlLCBHTHNpemVpIHN0cmlkZSwKKyAgICAgICAgY29uc3QgR0x2b2lkICpwb2ludGVyLCBHTHNpemVpIGNvdW50KTsKK0dMX0FQSSB2b2lkIEdMX0FQSUVOVFJZIGdsVGV4Q29vcmRQb2ludGVyQm91bmRzKEdMaW50IHNpemUsIEdMZW51bSB0eXBlLAorICAgICAgICBHTHNpemVpIHN0cmlkZSwgY29uc3QgR0x2b2lkICpwb2ludGVyLCBHTHNpemVpIGNvdW50KTsKK0dMX0FQSSB2b2lkIEdMX0FQSUVOVFJZIGdsVmVydGV4UG9pbnRlckJvdW5kcyhHTGludCBzaXplLCBHTGVudW0gdHlwZSwKKyAgICAgICAgR0xzaXplaSBzdHJpZGUsIGNvbnN0IEdMdm9pZCAqcG9pbnRlciwgR0xzaXplaSBjb3VudCk7CitHTF9BUEkgdm9pZCBHTF9BUElFTlRSWSBnbFBvaW50U2l6ZVBvaW50ZXJPRVNCb3VuZHMoR0xlbnVtIHR5cGUsCisgICAgICAgIEdMc2l6ZWkgc3RyaWRlLCBjb25zdCBHTHZvaWQgKnBvaW50ZXIsIEdMc2l6ZWkgY291bnQpOworR0xfQVBJIHZvaWQgR0xfQVBJRU5UUlkgZ2xNYXRyaXhJbmRleFBvaW50ZXJPRVNCb3VuZHMoR0xpbnQgc2l6ZSwgR0xlbnVtIHR5cGUsCisgICAgICAgIEdMc2l6ZWkgc3RyaWRlLCBjb25zdCBHTHZvaWQgKnBvaW50ZXIsIEdMc2l6ZWkgY291bnQpOworR0xfQVBJIHZvaWQgR0xfQVBJRU5UUlkgZ2xXZWlnaHRQb2ludGVyT0VTQm91bmRzKEdMaW50IHNpemUsIEdMZW51bSB0eXBlLAorICAgICAgICBHTHNpemVpIHN0cmlkZSwgY29uc3QgR0x2b2lkICpwb2ludGVyLCBHTHNpemVpIGNvdW50KTsKKyNlbmRpZgorI2lmZGVmIEdMX0VTX1ZFUlNJT05fMl8wCitzdGF0aWMgdm9pZCBnbFZlcnRleEF0dHJpYlBvaW50ZXJCb3VuZHMoR0x1aW50IGluZHgsIEdMaW50IHNpemUsIEdMZW51bSB0eXBlLAorICAgICAgICBHTGJvb2xlYW4gbm9ybWFsaXplZCwgR0xzaXplaSBzdHJpZGUsIGNvbnN0IEdMdm9pZCAqcG9pbnRlciwgR0xzaXplaSBjb3VudCkgeworICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcihpbmR4LCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHBvaW50ZXIpOworfQorI2VuZGlmCisjaWZkZWYgR0xfRVNfVkVSU0lPTl8zXzAKK3N0YXRpYyB2b2lkIGdsVmVydGV4QXR0cmliSVBvaW50ZXJCb3VuZHMoR0x1aW50IGluZHgsIEdMaW50IHNpemUsIEdMZW51bSB0eXBlLAorICAgICAgICBHTHNpemVpIHN0cmlkZSwgY29uc3QgR0x2b2lkICpwb2ludGVyLCBHTHNpemVpIGNvdW50KSB7CisgICAgZ2xWZXJ0ZXhBdHRyaWJJUG9pbnRlcihpbmR4LCBzaXplLCB0eXBlLCBzdHJpZGUsIHBvaW50ZXIpOworfQorI2VuZGlmCit9CisKKy8qIENhY2hlIG1ldGhvZCBJRHMgZWFjaCB0aW1lIHRoZSBjbGFzcyBpcyBsb2FkZWQuICovCisKK3N0YXRpYyB2b2lkCituYXRpdmVDbGFzc0luaXQoSk5JRW52ICpfZW52LCBqY2xhc3MgZ2xJbXBsQ2xhc3MpCit7CisgICAgamNsYXNzIG5pb0FjY2Vzc0NsYXNzTG9jYWwgPSBfZW52LT5GaW5kQ2xhc3MoImphdmEvbmlvL05JT0FjY2VzcyIpOworICAgIG5pb0FjY2Vzc0NsYXNzID0gKGpjbGFzcykgX2Vudi0+TmV3R2xvYmFsUmVmKG5pb0FjY2Vzc0NsYXNzTG9jYWwpOworCisgICAgamNsYXNzIGJ1ZmZlckNsYXNzTG9jYWwgPSBfZW52LT5GaW5kQ2xhc3MoImphdmEvbmlvL0J1ZmZlciIpOworICAgIGJ1ZmZlckNsYXNzID0gKGpjbGFzcykgX2Vudi0+TmV3R2xvYmFsUmVmKGJ1ZmZlckNsYXNzTG9jYWwpOworCisgICAgZ2V0QmFzZVBvaW50ZXJJRCA9IF9lbnYtPkdldFN0YXRpY01ldGhvZElEKG5pb0FjY2Vzc0NsYXNzLAorICAgICAgICAgICAgImdldEJhc2VQb2ludGVyIiwgIihMamF2YS9uaW8vQnVmZmVyOylKIik7CisgICAgZ2V0QmFzZUFycmF5SUQgPSBfZW52LT5HZXRTdGF0aWNNZXRob2RJRChuaW9BY2Nlc3NDbGFzcywKKyAgICAgICAgICAgICJnZXRCYXNlQXJyYXkiLCAiKExqYXZhL25pby9CdWZmZXI7KUxqYXZhL2xhbmcvT2JqZWN0OyIpOworICAgIGdldEJhc2VBcnJheU9mZnNldElEID0gX2Vudi0+R2V0U3RhdGljTWV0aG9kSUQobmlvQWNjZXNzQ2xhc3MsCisgICAgICAgICAgICAiZ2V0QmFzZUFycmF5T2Zmc2V0IiwgIihMamF2YS9uaW8vQnVmZmVyOylJIik7CisKKyAgICBwb3NpdGlvbklEID0gX2Vudi0+R2V0RmllbGRJRChidWZmZXJDbGFzcywgInBvc2l0aW9uIiwgIkkiKTsKKyAgICBsaW1pdElEID0gX2Vudi0+R2V0RmllbGRJRChidWZmZXJDbGFzcywgImxpbWl0IiwgIkkiKTsKKyAgICBlbGVtZW50U2l6ZVNoaWZ0SUQgPQorICAgICAgICBfZW52LT5HZXRGaWVsZElEKGJ1ZmZlckNsYXNzLCAiX2VsZW1lbnRTaXplU2hpZnQiLCAiSSIpOworfQorCitzdGF0aWMgdm9pZCAqCitnZXRQb2ludGVyKEpOSUVudiAqX2Vudiwgam9iamVjdCBidWZmZXIsIGphcnJheSAqYXJyYXksIGppbnQgKnJlbWFpbmluZywgamludCAqb2Zmc2V0KQoreworICAgIGppbnQgcG9zaXRpb247CisgICAgamludCBsaW1pdDsKKyAgICBqaW50IGVsZW1lbnRTaXplU2hpZnQ7CisgICAgamxvbmcgcG9pbnRlcjsKKworICAgIHBvc2l0aW9uID0gX2Vudi0+R2V0SW50RmllbGQoYnVmZmVyLCBwb3NpdGlvbklEKTsKKyAgICBsaW1pdCA9IF9lbnYtPkdldEludEZpZWxkKGJ1ZmZlciwgbGltaXRJRCk7CisgICAgZWxlbWVudFNpemVTaGlmdCA9IF9lbnYtPkdldEludEZpZWxkKGJ1ZmZlciwgZWxlbWVudFNpemVTaGlmdElEKTsKKyAgICAqcmVtYWluaW5nID0gKGxpbWl0IC0gcG9zaXRpb24pIDw8IGVsZW1lbnRTaXplU2hpZnQ7CisgICAgcG9pbnRlciA9IF9lbnYtPkNhbGxTdGF0aWNMb25nTWV0aG9kKG5pb0FjY2Vzc0NsYXNzLAorICAgICAgICAgICAgZ2V0QmFzZVBvaW50ZXJJRCwgYnVmZmVyKTsKKyAgICBpZiAocG9pbnRlciAhPSAwTCkgeworICAgICAgICAqYXJyYXkgPSBOVUxMOworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocG9pbnRlcik7CisgICAgfQorCisgICAgKmFycmF5ID0gKGphcnJheSkgX2Vudi0+Q2FsbFN0YXRpY09iamVjdE1ldGhvZChuaW9BY2Nlc3NDbGFzcywKKyAgICAgICAgICAgIGdldEJhc2VBcnJheUlELCBidWZmZXIpOworICAgICpvZmZzZXQgPSBfZW52LT5DYWxsU3RhdGljSW50TWV0aG9kKG5pb0FjY2Vzc0NsYXNzLAorICAgICAgICAgICAgZ2V0QmFzZUFycmF5T2Zmc2V0SUQsIGJ1ZmZlcik7CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworY2xhc3MgQnl0ZUFycmF5R2V0dGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCogR2V0KEpOSUVudiogX2VudiwgamJ5dGVBcnJheSBhcnJheSwgamJvb2xlYW4qIGlzX2NvcHkpIHsKKyAgICAgICAgcmV0dXJuIF9lbnYtPkdldEJ5dGVBcnJheUVsZW1lbnRzKGFycmF5LCBpc19jb3B5KTsKKyAgICB9Cit9OworY2xhc3MgQm9vbGVhbkFycmF5R2V0dGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCogR2V0KEpOSUVudiogX2VudiwgamJvb2xlYW5BcnJheSBhcnJheSwgamJvb2xlYW4qIGlzX2NvcHkpIHsKKyAgICAgICAgcmV0dXJuIF9lbnYtPkdldEJvb2xlYW5BcnJheUVsZW1lbnRzKGFycmF5LCBpc19jb3B5KTsKKyAgICB9Cit9OworY2xhc3MgQ2hhckFycmF5R2V0dGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCogR2V0KEpOSUVudiogX2VudiwgamNoYXJBcnJheSBhcnJheSwgamJvb2xlYW4qIGlzX2NvcHkpIHsKKyAgICAgICAgcmV0dXJuIF9lbnYtPkdldENoYXJBcnJheUVsZW1lbnRzKGFycmF5LCBpc19jb3B5KTsKKyAgICB9Cit9OworY2xhc3MgU2hvcnRBcnJheUdldHRlciB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQqIEdldChKTklFbnYqIF9lbnYsIGpzaG9ydEFycmF5IGFycmF5LCBqYm9vbGVhbiogaXNfY29weSkgeworICAgICAgICByZXR1cm4gX2Vudi0+R2V0U2hvcnRBcnJheUVsZW1lbnRzKGFycmF5LCBpc19jb3B5KTsKKyAgICB9Cit9OworY2xhc3MgSW50QXJyYXlHZXR0ZXIgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkKiBHZXQoSk5JRW52KiBfZW52LCBqaW50QXJyYXkgYXJyYXksIGpib29sZWFuKiBpc19jb3B5KSB7CisgICAgICAgIHJldHVybiBfZW52LT5HZXRJbnRBcnJheUVsZW1lbnRzKGFycmF5LCBpc19jb3B5KTsKKyAgICB9Cit9OworY2xhc3MgTG9uZ0FycmF5R2V0dGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCogR2V0KEpOSUVudiogX2VudiwgamxvbmdBcnJheSBhcnJheSwgamJvb2xlYW4qIGlzX2NvcHkpIHsKKyAgICAgICAgcmV0dXJuIF9lbnYtPkdldExvbmdBcnJheUVsZW1lbnRzKGFycmF5LCBpc19jb3B5KTsKKyAgICB9Cit9OworY2xhc3MgRmxvYXRBcnJheUdldHRlciB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQqIEdldChKTklFbnYqIF9lbnYsIGpmbG9hdEFycmF5IGFycmF5LCBqYm9vbGVhbiogaXNfY29weSkgeworICAgICAgICByZXR1cm4gX2Vudi0+R2V0RmxvYXRBcnJheUVsZW1lbnRzKGFycmF5LCBpc19jb3B5KTsKKyAgICB9Cit9OworY2xhc3MgRG91YmxlQXJyYXlHZXR0ZXIgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkKiBHZXQoSk5JRW52KiBfZW52LCBqZG91YmxlQXJyYXkgYXJyYXksIGpib29sZWFuKiBpc19jb3B5KSB7CisgICAgICAgIHJldHVybiBfZW52LT5HZXREb3VibGVBcnJheUVsZW1lbnRzKGFycmF5LCBpc19jb3B5KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBKVFlQRUFSUkFZLCB0eXBlbmFtZSBBUlJBWUdFVFRFUj4KK3N0YXRpYyB2b2lkKgorZ2V0QXJyYXlQb2ludGVyKEpOSUVudiAqX2VudiwgSlRZUEVBUlJBWSBhcnJheSwgamJvb2xlYW4qIGlzX2NvcHkpIHsKKyAgICByZXR1cm4gQVJSQVlHRVRURVI6OkdldChfZW52LCBhcnJheSwgaXNfY29weSk7Cit9CisKK2NsYXNzIEJ5dGVBcnJheVJlbGVhc2VyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBSZWxlYXNlKEpOSUVudiogX2VudiwgamJ5dGVBcnJheSBhcnJheSwgamJ5dGUqIGRhdGEsIGpib29sZWFuIGNvbW1pdCkgeworICAgICAgICBfZW52LT5SZWxlYXNlQnl0ZUFycmF5RWxlbWVudHMoYXJyYXksIGRhdGEsIGNvbW1pdCA/IDAgOiBKTklfQUJPUlQpOworICAgIH0KK307CitjbGFzcyBCb29sZWFuQXJyYXlSZWxlYXNlciB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgUmVsZWFzZShKTklFbnYqIF9lbnYsIGpib29sZWFuQXJyYXkgYXJyYXksIGpib29sZWFuKiBkYXRhLCBqYm9vbGVhbiBjb21taXQpIHsKKyAgICAgICAgX2Vudi0+UmVsZWFzZUJvb2xlYW5BcnJheUVsZW1lbnRzKGFycmF5LCBkYXRhLCBjb21taXQgPyAwIDogSk5JX0FCT1JUKTsKKyAgICB9Cit9OworY2xhc3MgQ2hhckFycmF5UmVsZWFzZXIgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIFJlbGVhc2UoSk5JRW52KiBfZW52LCBqY2hhckFycmF5IGFycmF5LCBqY2hhciogZGF0YSwgamJvb2xlYW4gY29tbWl0KSB7CisgICAgICAgIF9lbnYtPlJlbGVhc2VDaGFyQXJyYXlFbGVtZW50cyhhcnJheSwgZGF0YSwgY29tbWl0ID8gMCA6IEpOSV9BQk9SVCk7CisgICAgfQorfTsKK2NsYXNzIFNob3J0QXJyYXlSZWxlYXNlciB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgUmVsZWFzZShKTklFbnYqIF9lbnYsIGpzaG9ydEFycmF5IGFycmF5LCBqc2hvcnQqIGRhdGEsIGpib29sZWFuIGNvbW1pdCkgeworICAgICAgICBfZW52LT5SZWxlYXNlU2hvcnRBcnJheUVsZW1lbnRzKGFycmF5LCBkYXRhLCBjb21taXQgPyAwIDogSk5JX0FCT1JUKTsKKyAgICB9Cit9OworY2xhc3MgSW50QXJyYXlSZWxlYXNlciB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgUmVsZWFzZShKTklFbnYqIF9lbnYsIGppbnRBcnJheSBhcnJheSwgamludCogZGF0YSwgamJvb2xlYW4gY29tbWl0KSB7CisgICAgICAgIF9lbnYtPlJlbGVhc2VJbnRBcnJheUVsZW1lbnRzKGFycmF5LCBkYXRhLCBjb21taXQgPyAwIDogSk5JX0FCT1JUKTsKKyAgICB9Cit9OworY2xhc3MgTG9uZ0FycmF5UmVsZWFzZXIgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIFJlbGVhc2UoSk5JRW52KiBfZW52LCBqbG9uZ0FycmF5IGFycmF5LCBqbG9uZyogZGF0YSwgamJvb2xlYW4gY29tbWl0KSB7CisgICAgICAgIF9lbnYtPlJlbGVhc2VMb25nQXJyYXlFbGVtZW50cyhhcnJheSwgZGF0YSwgY29tbWl0ID8gMCA6IEpOSV9BQk9SVCk7CisgICAgfQorfTsKK2NsYXNzIEZsb2F0QXJyYXlSZWxlYXNlciB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgUmVsZWFzZShKTklFbnYqIF9lbnYsIGpmbG9hdEFycmF5IGFycmF5LCBqZmxvYXQqIGRhdGEsIGpib29sZWFuIGNvbW1pdCkgeworICAgICAgICBfZW52LT5SZWxlYXNlRmxvYXRBcnJheUVsZW1lbnRzKGFycmF5LCBkYXRhLCBjb21taXQgPyAwIDogSk5JX0FCT1JUKTsKKyAgICB9Cit9OworY2xhc3MgRG91YmxlQXJyYXlSZWxlYXNlciB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgUmVsZWFzZShKTklFbnYqIF9lbnYsIGpkb3VibGVBcnJheSBhcnJheSwgamRvdWJsZSogZGF0YSwgamJvb2xlYW4gY29tbWl0KSB7CisgICAgICAgIF9lbnYtPlJlbGVhc2VEb3VibGVBcnJheUVsZW1lbnRzKGFycmF5LCBkYXRhLCBjb21taXQgPyAwIDogSk5JX0FCT1JUKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBKVFlQRUFSUkFZLCB0eXBlbmFtZSBOVFlQRUFSUkFZLCB0eXBlbmFtZSBBUlJBWVJFTEVBU0VSPgorc3RhdGljIHZvaWQKK3JlbGVhc2VBcnJheVBvaW50ZXIoSk5JRW52ICpfZW52LCBKVFlQRUFSUkFZIGFycmF5LCBOVFlQRUFSUkFZIGRhdGEsIGpib29sZWFuIGNvbW1pdCkgeworICAgIEFSUkFZUkVMRUFTRVI6OlJlbGVhc2UoX2VudiwgYXJyYXksIGRhdGEsIGNvbW1pdCk7Cit9CisKK3N0YXRpYyB2b2lkCityZWxlYXNlUG9pbnRlcihKTklFbnYgKl9lbnYsIGphcnJheSBhcnJheSwgdm9pZCAqZGF0YSwgamJvb2xlYW4gY29tbWl0KQoreworICAgIF9lbnYtPlJlbGVhc2VQcmltaXRpdmVBcnJheUNyaXRpY2FsKGFycmF5LCBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICBjb21taXQgPyAwIDogSk5JX0FCT1JUKTsKK30KKworc3RhdGljIHZvaWQgKgorZ2V0RGlyZWN0QnVmZmVyUG9pbnRlcihKTklFbnYgKl9lbnYsIGpvYmplY3QgYnVmZmVyKSB7CisgICAgY2hhciogYnVmID0gKGNoYXIqKSBfZW52LT5HZXREaXJlY3RCdWZmZXJBZGRyZXNzKGJ1ZmZlcik7CisgICAgaWYgKGJ1ZikgeworICAgICAgICBqaW50IHBvc2l0aW9uID0gX2Vudi0+R2V0SW50RmllbGQoYnVmZmVyLCBwb3NpdGlvbklEKTsKKyAgICAgICAgamludCBlbGVtZW50U2l6ZVNoaWZ0ID0gX2Vudi0+R2V0SW50RmllbGQoYnVmZmVyLCBlbGVtZW50U2l6ZVNoaWZ0SUQpOworICAgICAgICBidWYgKz0gcG9zaXRpb24gPDwgZWxlbWVudFNpemVTaGlmdDsKKyAgICB9IGVsc2UgeworICAgICAgICBqbmlUaHJvd0V4Y2VwdGlvbihfZW52LCAiamF2YS9sYW5nL0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJNdXN0IHVzZSBhIG5hdGl2ZSBvcmRlciBkaXJlY3QgQnVmZmVyIik7CisgICAgfQorICAgIHJldHVybiAodm9pZCopIGJ1ZjsKK30KKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyoKKyAqIHJldHVybnMgdGhlIG51bWJlciBvZiB2YWx1ZXMgZ2xHZXQgcmV0dXJucyBmb3IgYSBnaXZlbiBwbmFtZS4KKyAqCisgKiBUaGUgY29kZSBiZWxvdyBpcyB3cml0dGVuIHN1Y2ggdGhhdCBwbmFtZXMgcmVxdWlyaW5nIG9ubHkgb25lIHZhbHVlcworICogYXJlIHRoZSBkZWZhdWx0IChhbmQgYXJlIG5vdCBleHBsaWNpdGVseSB0ZXN0ZWQgZm9yKS4gVGhpcyBtYWtlcyB0aGUKKyAqIGNoZWNraW5nIGNvZGUgbXVjaCBzaG9ydGVyL3JlYWRhYmxlL2VmZmljaWVudC4KKyAqCisgKiBUaGlzIG1lYW5zIHRoYXQgdW5rbm93biBwbmFtZXMgKGUuZy46IGV4dGVuc2lvbnMpIHdpbGwgZGVmYXVsdCB0byAxLiBJZgorICogdGhhdCB1bmtub3duIHBuYW1lIG5lZWRzIG1vcmUgdGhhbiAxIHZhbHVlLCB0aGVuIHRoZSB2YWxpZGF0aW9uIGNoZWNrCisgKiBpcyBpbmNvbXBsZXRlIGFuZCB0aGUgYXBwIG1heSBjcmFzaCBpZiBpdCBwYXNzZWQgdGhlIHdyb25nIG51bWJlciBwYXJhbXMuCisgKi8KK3N0YXRpYyBpbnQgZ2V0TmVlZGVkQ291bnQoR0xpbnQgcG5hbWUpIHsKKyAgICBpbnQgbmVlZGVkID0gMTsKKyNpZmRlZiBHTF9FU19WRVJTSU9OXzJfMAorICAgIC8vIEdMRVMgMi54IHBuYW1lcworICAgIHN3aXRjaCAocG5hbWUpIHsKKyAgICAgICAgY2FzZSBHTF9BTElBU0VEX0xJTkVfV0lEVEhfUkFOR0U6CisgICAgICAgIGNhc2UgR0xfQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFOgorICAgICAgICAgICAgbmVlZGVkID0gMjsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR0xfQkxFTkRfQ09MT1I6CisgICAgICAgIGNhc2UgR0xfQ09MT1JfQ0xFQVJfVkFMVUU6CisgICAgICAgIGNhc2UgR0xfQ09MT1JfV1JJVEVNQVNLOgorICAgICAgICBjYXNlIEdMX1NDSVNTT1JfQk9YOgorICAgICAgICBjYXNlIEdMX1ZJRVdQT1JUOgorICAgICAgICAgICAgbmVlZGVkID0gNDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFM6CisgICAgICAgICAgICBnbEdldEludGVnZXJ2KEdMX05VTV9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUywgJm5lZWRlZCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdMX1NIQURFUl9CSU5BUllfRk9STUFUUzoKKyAgICAgICAgICAgIGdsR2V0SW50ZWdlcnYoR0xfTlVNX1NIQURFUl9CSU5BUllfRk9STUFUUywgJm5lZWRlZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisjZW5kaWYKKworI2lmZGVmIEdMX1ZFUlNJT05fRVNfQ01fMV8xCisgICAgLy8gR0xFUyAxLnggcG5hbWVzCisgICAgc3dpdGNoIChwbmFtZSkgeworICAgICAgICBjYXNlIEdMX0FMSUFTRURfTElORV9XSURUSF9SQU5HRToKKyAgICAgICAgY2FzZSBHTF9BTElBU0VEX1BPSU5UX1NJWkVfUkFOR0U6CisgICAgICAgIGNhc2UgR0xfREVQVEhfUkFOR0U6CisgICAgICAgIGNhc2UgR0xfU01PT1RIX0xJTkVfV0lEVEhfUkFOR0U6CisgICAgICAgIGNhc2UgR0xfU01PT1RIX1BPSU5UX1NJWkVfUkFOR0U6CisgICAgICAgICAgICBuZWVkZWQgPSAyOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBHTF9DVVJSRU5UX05PUk1BTDoKKyAgICAgICAgY2FzZSBHTF9QT0lOVF9ESVNUQU5DRV9BVFRFTlVBVElPTjoKKyAgICAgICAgICAgIG5lZWRlZCA9IDM7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdMX0NPTE9SX0NMRUFSX1ZBTFVFOgorICAgICAgICBjYXNlIEdMX0NPTE9SX1dSSVRFTUFTSzoKKyAgICAgICAgY2FzZSBHTF9DVVJSRU5UX0NPTE9SOgorICAgICAgICBjYXNlIEdMX0NVUlJFTlRfVEVYVFVSRV9DT09SRFM6CisgICAgICAgIGNhc2UgR0xfRk9HX0NPTE9SOgorICAgICAgICBjYXNlIEdMX0xJR0hUX01PREVMX0FNQklFTlQ6CisgICAgICAgIGNhc2UgR0xfU0NJU1NPUl9CT1g6CisgICAgICAgIGNhc2UgR0xfVklFV1BPUlQ6CisgICAgICAgICAgICBuZWVkZWQgPSA0OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBHTF9NT0RFTFZJRVdfTUFUUklYOgorICAgICAgICBjYXNlIEdMX1BST0pFQ1RJT05fTUFUUklYOgorICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUFUUklYOgorICAgICAgICAgICAgbmVlZGVkID0gMTY7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTOgorICAgICAgICAgICAgZ2xHZXRJbnRlZ2VydihHTF9OVU1fQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFMsICZuZWVkZWQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuIG5lZWRlZDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEpUWVBFQVJSQVksIHR5cGVuYW1lIEFSUkFZR0VUVEVSLCB0eXBlbmFtZSBOVFlQRUFSUkFZLAorICAgICAgICAgIHR5cGVuYW1lIEFSUkFZUkVMRUFTRVIsIHR5cGVuYW1lIENUWVBFLCB2b2lkIEdFVChHTGVudW0sIENUWVBFKik+CitzdGF0aWMgdm9pZAorZ2V0CisgIChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGppbnQgcG5hbWUsIEpUWVBFQVJSQVkgcGFyYW1zX3JlZiwgamludCBvZmZzZXQpIHsKKyAgICBqaW50IF9leGNlcHRpb24gPSAwOworICAgIGNvbnN0IGNoYXIgKiBfZXhjZXB0aW9uVHlwZTsKKyAgICBjb25zdCBjaGFyICogX2V4Y2VwdGlvbk1lc3NhZ2U7CisgICAgQ1RZUEUgKnBhcmFtc19iYXNlID0gKENUWVBFICopIDA7CisgICAgamludCBfcmVtYWluaW5nOworICAgIENUWVBFICpwYXJhbXMgPSAoQ1RZUEUgKikgMDsKKyAgICBpbnQgX25lZWRlZCA9IDA7CisKKyAgICBpZiAoIXBhcmFtc19yZWYpIHsKKyAgICAgICAgX2V4Y2VwdGlvbiA9IDE7CisgICAgICAgIF9leGNlcHRpb25UeXBlID0gImphdmEvbGFuZy9JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iOworICAgICAgICBfZXhjZXB0aW9uTWVzc2FnZSA9ICJwYXJhbXMgPT0gbnVsbCI7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisgICAgaWYgKG9mZnNldCA8IDApIHsKKyAgICAgICAgX2V4Y2VwdGlvbiA9IDE7CisgICAgICAgIF9leGNlcHRpb25UeXBlID0gImphdmEvbGFuZy9JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iOworICAgICAgICBfZXhjZXB0aW9uTWVzc2FnZSA9ICJvZmZzZXQgPCAwIjsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICBfcmVtYWluaW5nID0gX2Vudi0+R2V0QXJyYXlMZW5ndGgocGFyYW1zX3JlZikgLSBvZmZzZXQ7CisgICAgX25lZWRlZCA9IGdldE5lZWRlZENvdW50KHBuYW1lKTsKKyAgICAvLyBpZiB3ZSBkaWRuJ3QgZmluZCB0aGlzIHBuYW1lLCB3ZSBqdXN0IGFzc3VtZSB0aGUgdXNlciBwYXNzZWQKKyAgICAvLyBhbiBhcnJheSBvZiB0aGUgcmlnaHQgc2l6ZSAtLSB0aGlzIG1pZ2h0IGhhcHBlbiB3aXRoIGV4dGVuc2lvbnMKKyAgICAvLyBvciBpZiB3ZSBmb3JnZXQgYW4gZW51bSBoZXJlLgorICAgIGlmIChfcmVtYWluaW5nIDwgX25lZWRlZCkgeworICAgICAgICBfZXhjZXB0aW9uID0gMTsKKyAgICAgICAgX2V4Y2VwdGlvblR5cGUgPSAiamF2YS9sYW5nL0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiI7CisgICAgICAgIF9leGNlcHRpb25NZXNzYWdlID0gImxlbmd0aCAtIG9mZnNldCA8IG5lZWRlZCI7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisgICAgcGFyYW1zX2Jhc2UgPSAoQ1RZUEUgKikgZ2V0QXJyYXlQb2ludGVyPEpUWVBFQVJSQVksIEFSUkFZR0VUVEVSPigKKyAgICAgICAgX2VudiwgcGFyYW1zX3JlZiwgKGpib29sZWFuICopMCk7CisgICAgcGFyYW1zID0gcGFyYW1zX2Jhc2UgKyBvZmZzZXQ7CisKKyAgICBHRVQoCisgICAgICAgIChHTGVudW0pcG5hbWUsCisgICAgICAgIChDVFlQRSAqKXBhcmFtcworICAgICk7CisKK2V4aXQ6CisgICAgaWYgKHBhcmFtc19iYXNlKSB7CisgICAgICAgIHJlbGVhc2VBcnJheVBvaW50ZXI8SlRZUEVBUlJBWSwgTlRZUEVBUlJBWSwgQVJSQVlSRUxFQVNFUj4oCisgICAgICAgICAgICBfZW52LCBwYXJhbXNfcmVmLCBwYXJhbXNfYmFzZSwgIV9leGNlcHRpb24pOworICAgIH0KKyAgICBpZiAoX2V4Y2VwdGlvbikgeworICAgICAgICBqbmlUaHJvd0V4Y2VwdGlvbihfZW52LCBfZXhjZXB0aW9uVHlwZSwgX2V4Y2VwdGlvbk1lc3NhZ2UpOworICAgIH0KK30KKworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ1RZUEUsIHR5cGVuYW1lIEpUWVBFQVJSQVksIHR5cGVuYW1lIEFSUkFZR0VUVEVSLCB0eXBlbmFtZSBOVFlQRUFSUkFZLAorICAgICAgICAgIHR5cGVuYW1lIEFSUkFZUkVMRUFTRVIsIHZvaWQgR0VUKEdMZW51bSwgQ1RZUEUqKT4KK3N0YXRpYyB2b2lkCitnZXRhcnJheQorICAoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqaW50IHBuYW1lLCBqb2JqZWN0IHBhcmFtc19idWYpIHsKKyAgICBqaW50IF9leGNlcHRpb24gPSAwOworICAgIGNvbnN0IGNoYXIgKiBfZXhjZXB0aW9uVHlwZTsKKyAgICBjb25zdCBjaGFyICogX2V4Y2VwdGlvbk1lc3NhZ2U7CisgICAgSlRZUEVBUlJBWSBfYXJyYXkgPSAoSlRZUEVBUlJBWSkgMDsKKyAgICBqaW50IF9idWZmZXJPZmZzZXQgPSAoamludCkgMDsKKyAgICBqaW50IF9yZW1haW5pbmc7CisgICAgQ1RZUEUgKnBhcmFtcyA9IChDVFlQRSAqKSAwOworICAgIGludCBfbmVlZGVkID0gMDsKKworICAgIHBhcmFtcyA9IChDVFlQRSAqKWdldFBvaW50ZXIoX2VudiwgcGFyYW1zX2J1ZiwgKGphcnJheSopJl9hcnJheSwgJl9yZW1haW5pbmcsICZfYnVmZmVyT2Zmc2V0KTsKKyAgICBfcmVtYWluaW5nIC89IHNpemVvZihDVFlQRSk7ICAgIC8vIGNvbnZlcnQgZnJvbSBieXRlcyB0byBpdGVtIGNvdW50CisgICAgX25lZWRlZCA9IGdldE5lZWRlZENvdW50KHBuYW1lKTsKKyAgICAvLyBpZiB3ZSBkaWRuJ3QgZmluZCB0aGlzIHBuYW1lLCB3ZSBqdXN0IGFzc3VtZSB0aGUgdXNlciBwYXNzZWQKKyAgICAvLyBhbiBhcnJheSBvZiB0aGUgcmlnaHQgc2l6ZSAtLSB0aGlzIG1pZ2h0IGhhcHBlbiB3aXRoIGV4dGVuc2lvbnMKKyAgICAvLyBvciBpZiB3ZSBmb3JnZXQgYW4gZW51bSBoZXJlLgorICAgIGlmIChfbmVlZGVkPjAgJiYgX3JlbWFpbmluZyA8IF9uZWVkZWQpIHsKKyAgICAgICAgX2V4Y2VwdGlvbiA9IDE7CisgICAgICAgIF9leGNlcHRpb25UeXBlID0gImphdmEvbGFuZy9JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iOworICAgICAgICBfZXhjZXB0aW9uTWVzc2FnZSA9ICJyZW1haW5pbmcoKSA8IG5lZWRlZCI7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisgICAgaWYgKHBhcmFtcyA9PSBOVUxMKSB7CisgICAgICAgIGNoYXIgKiBfcGFyYW1zQmFzZSA9IChjaGFyICopIGdldEFycmF5UG9pbnRlcjxKVFlQRUFSUkFZLCBBUlJBWUdFVFRFUj4oCisgICAgICAgICAgICBfZW52LCBfYXJyYXksIChqYm9vbGVhbiAqKSAwKTsKKyAgICAgICAgcGFyYW1zID0gKENUWVBFICopIChfcGFyYW1zQmFzZSArIF9idWZmZXJPZmZzZXQpOworICAgIH0KKyAgICBHRVQoCisgICAgICAgIChHTGVudW0pcG5hbWUsCisgICAgICAgIChDVFlQRSAqKXBhcmFtcworICAgICk7CisKK2V4aXQ6CisgICAgaWYgKF9hcnJheSkgeworICAgICAgICByZWxlYXNlQXJyYXlQb2ludGVyPEpUWVBFQVJSQVksIE5UWVBFQVJSQVksIEFSUkFZUkVMRUFTRVI+KAorICAgICAgICAgICAgX2VudiwgX2FycmF5LCAoTlRZUEVBUlJBWSlwYXJhbXMsIF9leGNlcHRpb24gPyBKTklfRkFMU0UgOiBKTklfVFJVRSk7CisgICAgfQorICAgIGlmIChfZXhjZXB0aW9uKSB7CisgICAgICAgIGpuaVRocm93RXhjZXB0aW9uKF9lbnYsIF9leGNlcHRpb25UeXBlLCBfZXhjZXB0aW9uTWVzc2FnZSk7CisgICAgfQorfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLyogdm9pZCBnbEJsZW5kQmFycmllciAoIHZvaWQgKSAqLworc3RhdGljIHZvaWQKK2FuZHJvaWRfZ2xCbGVuZEJhcnJpZXJfXworICAoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzKSB7CisgICAgZ2xCbGVuZEJhcnJpZXIoKTsKK30KKworLyogdm9pZCBnbENvcHlJbWFnZVN1YkRhdGEgKCBHTHVpbnQgc3JjTmFtZSwgR0xlbnVtIHNyY1RhcmdldCwgR0xpbnQgc3JjTGV2ZWwsIEdMaW50IHNyY1gsIEdMaW50IHNyY1ksIEdMaW50IHNyY1osIEdMdWludCBkc3ROYW1lLCBHTGVudW0gZHN0VGFyZ2V0LCBHTGludCBkc3RMZXZlbCwgR0xpbnQgZHN0WCwgR0xpbnQgZHN0WSwgR0xpbnQgZHN0WiwgR0xzaXplaSBzcmNXaWR0aCwgR0xzaXplaSBzcmNIZWlnaHQsIEdMc2l6ZWkgc3JjRGVwdGggKSAqLworc3RhdGljIHZvaWQKK2FuZHJvaWRfZ2xDb3B5SW1hZ2VTdWJEYXRhX19JSUlJSUlJSUlJSUlJSUkKKyAgKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamludCBzcmNOYW1lLCBqaW50IHNyY1RhcmdldCwgamludCBzcmNMZXZlbCwgamludCBzcmNYLCBqaW50IHNyY1ksIGppbnQgc3JjWiwgamludCBkc3ROYW1lLCBqaW50IGRzdFRhcmdldCwgamludCBkc3RMZXZlbCwgamludCBkc3RYLCBqaW50IGRzdFksIGppbnQgZHN0WiwgamludCBzcmNXaWR0aCwgamludCBzcmNIZWlnaHQsIGppbnQgc3JjRGVwdGgpIHsKKyAgICBnbENvcHlJbWFnZVN1YkRhdGEoCisgICAgICAgIChHTHVpbnQpc3JjTmFtZSwKKyAgICAgICAgKEdMZW51bSlzcmNUYXJnZXQsCisgICAgICAgIChHTGludClzcmNMZXZlbCwKKyAgICAgICAgKEdMaW50KXNyY1gsCisgICAgICAgIChHTGludClzcmNZLAorICAgICAgICAoR0xpbnQpc3JjWiwKKyAgICAgICAgKEdMdWludClkc3ROYW1lLAorICAgICAgICAoR0xlbnVtKWRzdFRhcmdldCwKKyAgICAgICAgKEdMaW50KWRzdExldmVsLAorICAgICAgICAoR0xpbnQpZHN0WCwKKyAgICAgICAgKEdMaW50KWRzdFksCisgICAgICAgIChHTGludClkc3RaLAorICAgICAgICAoR0xzaXplaSlzcmNXaWR0aCwKKyAgICAgICAgKEdMc2l6ZWkpc3JjSGVpZ2h0LAorICAgICAgICAoR0xzaXplaSlzcmNEZXB0aAorICAgICk7Cit9CisKKy8qIHZvaWQgZ2xEZWJ1Z01lc3NhZ2VDb250cm9sICggR0xlbnVtIHNvdXJjZSwgR0xlbnVtIHR5cGUsIEdMZW51bSBzZXZlcml0eSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0x1aW50ICppZHMsIEdMYm9vbGVhbiBlbmFibGVkICkgKi8KK3N0YXRpYyB2b2lkCithbmRyb2lkX2dsRGVidWdNZXNzYWdlQ29udHJvbF9fSUlJSV8zSUlaCisgIChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGppbnQgc291cmNlLCBqaW50IHR5cGUsIGppbnQgc2V2ZXJpdHksIGppbnQgY291bnQsIGppbnRBcnJheSBpZHNfcmVmLCBqaW50IG9mZnNldCwgamJvb2xlYW4gZW5hYmxlZCkgeworICAgIGppbnQgX2V4Y2VwdGlvbiA9IDA7CisgICAgY29uc3QgY2hhciAqIF9leGNlcHRpb25UeXBlID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICogX2V4Y2VwdGlvbk1lc3NhZ2UgPSBOVUxMOworICAgIEdMdWludCAqaWRzX2Jhc2UgPSAoR0x1aW50ICopIDA7CisgICAgamludCBfcmVtYWluaW5nOworICAgIEdMdWludCAqaWRzID0gKEdMdWludCAqKSAwOworCisgICAgaWYgKCFpZHNfcmVmKSB7CisgICAgICAgIF9leGNlcHRpb24gPSAxOworICAgICAgICBfZXhjZXB0aW9uVHlwZSA9ICJqYXZhL2xhbmcvSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIjsKKyAgICAgICAgX2V4Y2VwdGlvbk1lc3NhZ2UgPSAiaWRzID09IG51bGwiOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIGlmIChvZmZzZXQgPCAwKSB7CisgICAgICAgIF9leGNlcHRpb24gPSAxOworICAgICAgICBfZXhjZXB0aW9uVHlwZSA9ICJqYXZhL2xhbmcvSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIjsKKyAgICAgICAgX2V4Y2VwdGlvbk1lc3NhZ2UgPSAib2Zmc2V0IDwgMCI7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisgICAgX3JlbWFpbmluZyA9IF9lbnYtPkdldEFycmF5TGVuZ3RoKGlkc19yZWYpIC0gb2Zmc2V0OworICAgIGlmIChfcmVtYWluaW5nIDwgY291bnQpIHsKKyAgICAgICAgX2V4Y2VwdGlvbiA9IDE7CisgICAgICAgIF9leGNlcHRpb25UeXBlID0gImphdmEvbGFuZy9JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iOworICAgICAgICBfZXhjZXB0aW9uTWVzc2FnZSA9ICJsZW5ndGggLSBvZmZzZXQgPCBjb3VudCA8IG5lZWRlZCI7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisgICAgaWRzX2Jhc2UgPSAoR0x1aW50ICopCisgICAgICAgIF9lbnYtPkdldEludEFycmF5RWxlbWVudHMoaWRzX3JlZiwgKGpib29sZWFuICopMCk7CisgICAgaWRzID0gaWRzX2Jhc2UgKyBvZmZzZXQ7CisKKyAgICBnbERlYnVnTWVzc2FnZUNvbnRyb2woCisgICAgICAgIChHTGVudW0pc291cmNlLAorICAgICAgICAoR0xlbnVtKXR5cGUsCisgICAgICAgIChHTGVudW0pc2V2ZXJpdHksCisgICAgICAgIChHTHNpemVpKWNvdW50LAorICAgICAgICAoR0x1aW50ICopaWRzLAorICAgICAgICAoR0xib29sZWFuKWVuYWJsZWQKKyAgICApOworCitleGl0OgorICAgIGlmIChpZHNfYmFzZSkgeworICAgICAgICBfZW52LT5SZWxlYXNlSW50QXJyYXlFbGVtZW50cyhpZHNfcmVmLCAoamludCopaWRzX2Jhc2UsCisgICAgICAgICAgICBKTklfQUJPUlQpOworICAgIH0KKyAgICBpZiAoX2V4Y2VwdGlvbikgeworICAgICAgICBqbmlUaHJvd0V4Y2VwdGlvbihfZW52LCBfZXhjZXB0aW9uVHlwZSwgX2V4Y2VwdGlvbk1lc3NhZ2UpOworICAgIH0KK30KKworLyogdm9pZCBnbERlYnVnTWVzc2FnZUNvbnRyb2wgKCBHTGVudW0gc291cmNlLCBHTGVudW0gdHlwZSwgR0xlbnVtIHNldmVyaXR5LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQgKmlkcywgR0xib29sZWFuIGVuYWJsZWQgKSAqLworc3RhdGljIHZvaWQKK2FuZHJvaWRfZ2xEZWJ1Z01lc3NhZ2VDb250cm9sX19JSUlJTGphdmFfbmlvX0ludEJ1ZmZlcl8yWgorICAoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqaW50IHNvdXJjZSwgamludCB0eXBlLCBqaW50IHNldmVyaXR5LCBqaW50IGNvdW50LCBqb2JqZWN0IGlkc19idWYsIGpib29sZWFuIGVuYWJsZWQpIHsKKyAgICBqaW50IF9leGNlcHRpb24gPSAwOworICAgIGNvbnN0IGNoYXIgKiBfZXhjZXB0aW9uVHlwZSA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqIF9leGNlcHRpb25NZXNzYWdlID0gTlVMTDsKKyAgICBqaW50QXJyYXkgX2FycmF5ID0gKGppbnRBcnJheSkgMDsKKyAgICBqaW50IF9idWZmZXJPZmZzZXQgPSAoamludCkgMDsKKyAgICBqaW50IF9yZW1haW5pbmc7CisgICAgR0x1aW50ICppZHMgPSAoR0x1aW50ICopIDA7CisKKyAgICBpZHMgPSAoR0x1aW50ICopZ2V0UG9pbnRlcihfZW52LCBpZHNfYnVmLCAoamFycmF5KikmX2FycmF5LCAmX3JlbWFpbmluZywgJl9idWZmZXJPZmZzZXQpOworICAgIGlmIChfcmVtYWluaW5nIDwgY291bnQpIHsKKyAgICAgICAgX2V4Y2VwdGlvbiA9IDE7CisgICAgICAgIF9leGNlcHRpb25UeXBlID0gImphdmEvbGFuZy9JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iOworICAgICAgICBfZXhjZXB0aW9uTWVzc2FnZSA9ICJyZW1haW5pbmcoKSA8IGNvdW50IDwgbmVlZGVkIjsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICBpZiAoaWRzID09IE5VTEwpIHsKKyAgICAgICAgY2hhciAqIF9pZHNCYXNlID0gKGNoYXIgKilfZW52LT5HZXRJbnRBcnJheUVsZW1lbnRzKF9hcnJheSwgKGpib29sZWFuICopIDApOworICAgICAgICBpZHMgPSAoR0x1aW50ICopIChfaWRzQmFzZSArIF9idWZmZXJPZmZzZXQpOworICAgIH0KKyAgICBnbERlYnVnTWVzc2FnZUNvbnRyb2woCisgICAgICAgIChHTGVudW0pc291cmNlLAorICAgICAgICAoR0xlbnVtKXR5cGUsCisgICAgICAgIChHTGVudW0pc2V2ZXJpdHksCisgICAgICAgIChHTHNpemVpKWNvdW50LAorICAgICAgICAoR0x1aW50ICopaWRzLAorICAgICAgICAoR0xib29sZWFuKWVuYWJsZWQKKyAgICApOworCitleGl0OgorICAgIGlmIChfYXJyYXkpIHsKKyAgICAgICAgX2Vudi0+UmVsZWFzZUludEFycmF5RWxlbWVudHMoX2FycmF5LCAoamludCopaWRzLCBKTklfQUJPUlQpOworICAgIH0KKyAgICBpZiAoX2V4Y2VwdGlvbikgeworICAgICAgICBqbmlUaHJvd0V4Y2VwdGlvbihfZW52LCBfZXhjZXB0aW9uVHlwZSwgX2V4Y2VwdGlvbk1lc3NhZ2UpOworICAgIH0KK30KKworLyogdm9pZCBnbERlYnVnTWVzc2FnZUluc2VydCAoIEdMZW51bSBzb3VyY2UsIEdMZW51bSB0eXBlLCBHTHVpbnQgaWQsIEdMZW51bSBzZXZlcml0eSwgR0xzaXplaSBsZW5ndGgsIGNvbnN0IEdMY2hhciAqYnVmICkgKi8KK3N0YXRpYyB2b2lkCithbmRyb2lkX2dsRGVidWdNZXNzYWdlSW5zZXJ0X19JSUlJSUxqYXZhX2xhbmdfU3RyaW5nXzIKKyAgKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamludCBzb3VyY2UsIGppbnQgdHlwZSwgamludCBpZCwgamludCBzZXZlcml0eSwgamludCBsZW5ndGgsIGpzdHJpbmcgYnVmKSB7CisgICAgamludCBfZXhjZXB0aW9uID0gMDsKKyAgICBjb25zdCBjaGFyICogX2V4Y2VwdGlvblR5cGUgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKiBfZXhjZXB0aW9uTWVzc2FnZSA9IE5VTEw7CisgICAgY29uc3QgY2hhciogX25hdGl2ZWJ1ZiA9IDA7CisKKyAgICBpZiAoIWJ1ZikgeworICAgICAgICBfZXhjZXB0aW9uID0gMTsKKyAgICAgICAgX2V4Y2VwdGlvblR5cGUgPSAiamF2YS9sYW5nL0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiI7CisgICAgICAgIF9leGNlcHRpb25NZXNzYWdlID0gImJ1ZiA9PSBudWxsIjsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICBfbmF0aXZlYnVmID0gX2Vudi0+R2V0U3RyaW5nVVRGQ2hhcnMoYnVmLCAwKTsKKworICAgIGdsRGVidWdNZXNzYWdlSW5zZXJ0KAorICAgICAgICAoR0xlbnVtKXNvdXJjZSwKKyAgICAgICAgKEdMZW51bSl0eXBlLAorICAgICAgICAoR0x1aW50KWlkLAorICAgICAgICAoR0xlbnVtKXNldmVyaXR5LAorICAgICAgICAoR0xzaXplaSlsZW5ndGgsCisgICAgICAgIChHTGNoYXIgKilfbmF0aXZlYnVmCisgICAgKTsKKworZXhpdDoKKyAgICBpZiAoX25hdGl2ZWJ1ZikgeworICAgICAgICBfZW52LT5SZWxlYXNlU3RyaW5nVVRGQ2hhcnMoYnVmLCBfbmF0aXZlYnVmKTsKKyAgICB9CisKKyAgICBpZiAoX2V4Y2VwdGlvbikgeworICAgICAgICBqbmlUaHJvd0V4Y2VwdGlvbihfZW52LCBfZXhjZXB0aW9uVHlwZSwgX2V4Y2VwdGlvbk1lc3NhZ2UpOworICAgIH0KK30KKworLyogdm9pZCBnbERlYnVnTWVzc2FnZUNhbGxiYWNrICggR0xERUJVR1BST0MgY2FsbGJhY2ssIGNvbnN0IHZvaWQgKnVzZXJQYXJhbSApICovCitzdGF0aWMgdm9pZAorYW5kcm9pZF9nbERlYnVnTWVzc2FnZUNhbGxiYWNrKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgam9iamVjdCBjYWxsYmFjaykgeworICAgIGpuaVRocm93RXhjZXB0aW9uKF9lbnYsICJqYXZhL2xhbmcvVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24iLCAibm90IHlldCBpbXBsZW1lbnRlZCIpOworfQorLyogR0x1aW50IGdsR2V0RGVidWdNZXNzYWdlTG9nICggR0x1aW50IGNvdW50LCBHTHNpemVpIGJ1ZlNpemUsIEdMZW51bSAqc291cmNlcywgR0xlbnVtICp0eXBlcywgR0x1aW50ICppZHMsIEdMZW51bSAqc2V2ZXJpdGllcywgR0xzaXplaSAqbGVuZ3RocywgR0xjaGFyICptZXNzYWdlTG9nICkgKi8KK3N0YXRpYyBqaW50CithbmRyb2lkX2dsR2V0RGVidWdNZXNzYWdlTG9nX19JSV8zSUlfM0lJXzNJSV8zSUlfM0lJXzNCSQorICAoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqaW50IGNvdW50LCBqaW50IGJ1ZlNpemUsIGppbnRBcnJheSBzb3VyY2VzX3JlZiwgamludCBzb3VyY2VzT2Zmc2V0LCBqaW50QXJyYXkgdHlwZXNfcmVmLCBqaW50IHR5cGVzT2Zmc2V0LCBqaW50QXJyYXkgaWRzX3JlZiwgamludCBpZHNPZmZzZXQsIGppbnRBcnJheSBzZXZlcml0aWVzX3JlZiwgamludCBzZXZlcml0aWVzT2Zmc2V0LCBqaW50QXJyYXkgbGVuZ3Roc19yZWYsIGppbnQgbGVuZ3Roc09mZnNldCwgamJ5dGVBcnJheSBtZXNzYWdlTG9nX3JlZiwgamludCBtZXNzYWdlTG9nT2Zmc2V0KSB7CisgICAgam5pVGhyb3dFeGNlcHRpb24oX2VudiwgImphdmEvbGFuZy9VbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiIsICJub3QgeWV0IGltcGxlbWVudGVkIik7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qIEdMdWludCBnbEdldERlYnVnTWVzc2FnZUxvZyAoIEdMdWludCBjb3VudCwgR0xzaXplaSBidWZTaXplLCBHTGVudW0gKnNvdXJjZXMsIEdMZW51bSAqdHlwZXMsIEdMdWludCAqaWRzLCBHTGVudW0gKnNldmVyaXRpZXMsIEdMc2l6ZWkgKmxlbmd0aHMsIEdMY2hhciAqbWVzc2FnZUxvZyApICovCitzdGF0aWMgdWludAorYW5kcm9pZF9nbEdldERlYnVnTWVzc2FnZUxvZ19fSUxqYXZhX25pb19JbnRCdWZmZXJfMkxqYXZhX25pb19JbnRCdWZmZXJfMkxqYXZhX25pb19JbnRCdWZmZXJfMkxqYXZhX25pb19JbnRCdWZmZXJfMkxqYXZhX25pb19JbnRCdWZmZXJfMkxqYXZhX25pb19CeXRlQnVmZmVyXzIKKyAgKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamludCBjb3VudCwgam9iamVjdCBzb3VyY2VzX3JlZiwgam9iamVjdCB0eXBlc19yZWYsIGpvYmplY3QgaWRzX3JlZiwgam9iamVjdCBzZXZlcml0aWVzX3JlZiwgam9iamVjdCBsZW5ndGhzX3JlZiwgam9iamVjdCBtZXNzYWdlTG9nX3JlZikgeworICAgIGpuaVRocm93RXhjZXB0aW9uKF9lbnYsICJqYXZhL2xhbmcvVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24iLCAibm90IHlldCBpbXBsZW1lbnRlZCIpOworICAgIHJldHVybiAwOworfQorCisvKiBHTHVpbnQgZ2xHZXREZWJ1Z01lc3NhZ2VMb2cgKCBHTHVpbnQgY291bnQsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xlbnVtICpzb3VyY2VzLCBHTGVudW0gKnR5cGVzLCBHTHVpbnQgKmlkcywgR0xlbnVtICpzZXZlcml0aWVzLCBHTHNpemVpICpsZW5ndGhzLCBHTGNoYXIgKm1lc3NhZ2VMb2cgKSAqLworc3RhdGljIGpvYmplY3RBcnJheQorYW5kcm9pZF9nbEdldERlYnVnTWVzc2FnZUxvZ19fSV8zSUlfM0lJXzNJSV8zSUkKKyAgKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamludCBjb3VudCwgamludEFycmF5IHNvdXJjZXNfcmVmLCBqaW50IHNvdXJjZXNPZmZzZXQsIGppbnRBcnJheSB0eXBlc19yZWYsIGppbnQgdHlwZXNPZmZzZXQsIGppbnRBcnJheSBpZHNfcmVmLCBqaW50IGlkc09mZnNldCwgamludEFycmF5IHNldmVyaXRpZXNfcmVmLCBqaW50IHNldmVyaXRpZXNPZmZzZXQpIHsKKyAgICBqbmlUaHJvd0V4Y2VwdGlvbihfZW52LCAiamF2YS9sYW5nL1Vuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIiwgIm5vdCB5ZXQgaW1wbGVtZW50ZWQiKTsKKyAgICByZXR1cm4gMDsKK30KKworLyogR0x1aW50IGdsR2V0RGVidWdNZXNzYWdlTG9nICggR0x1aW50IGNvdW50LCBHTHNpemVpIGJ1ZlNpemUsIEdMZW51bSAqc291cmNlcywgR0xlbnVtICp0eXBlcywgR0x1aW50ICppZHMsIEdMZW51bSAqc2V2ZXJpdGllcywgR0xzaXplaSAqbGVuZ3RocywgR0xjaGFyICptZXNzYWdlTG9nICkgKi8KK3N0YXRpYyBqb2JqZWN0QXJyYXkKK2FuZHJvaWRfZ2xHZXREZWJ1Z01lc3NhZ2VMb2dfX0lMamF2YV9uaW9fSW50QnVmZmVyXzJMamF2YV9uaW9fSW50QnVmZmVyXzJMamF2YV9uaW9fSW50QnVmZmVyXzJMamF2YV9uaW9fSW50QnVmZmVyXzIKKyAgKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamludCBjb3VudCwgam9iamVjdCBzb3VyY2VzX3JlZiwgam9iamVjdCB0eXBlc19yZWYsIGpvYmplY3QgaWRzX3JlZiwgam9iamVjdCBzZXZlcml0aWVzX3JlZikgeworICAgIGpuaVRocm93RXhjZXB0aW9uKF9lbnYsICJqYXZhL2xhbmcvVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24iLCAibm90IHlldCBpbXBsZW1lbnRlZCIpOworICAgIHJldHVybiAwOworfQorLyogdm9pZCBnbFB1c2hEZWJ1Z0dyb3VwICggR0xlbnVtIHNvdXJjZSwgR0x1aW50IGlkLCBHTHNpemVpIGxlbmd0aCwgY29uc3QgR0xjaGFyICptZXNzYWdlICkgKi8KK3N0YXRpYyB2b2lkCithbmRyb2lkX2dsUHVzaERlYnVnR3JvdXBfX0lJSUxqYXZhX2xhbmdfU3RyaW5nXzIKKyAgKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamludCBzb3VyY2UsIGppbnQgaWQsIGppbnQgbGVuZ3RoLCBqc3RyaW5nIG1lc3NhZ2UpIHsKKyAgICBqaW50IF9leGNlcHRpb24gPSAwOworICAgIGNvbnN0IGNoYXIgKiBfZXhjZXB0aW9uVHlwZSA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqIF9leGNlcHRpb25NZXNzYWdlID0gTlVMTDsKKyAgICBjb25zdCBjaGFyKiBfbmF0aXZlbWVzc2FnZSA9IDA7CisgICAganNpemUgX3N0cmluZ2xlbiA9IDA7CisKKyAgICBpZiAoIW1lc3NhZ2UpIHsKKyAgICAgICAgX2V4Y2VwdGlvbiA9IDE7CisgICAgICAgIF9leGNlcHRpb25UeXBlID0gImphdmEvbGFuZy9JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iOworICAgICAgICBfZXhjZXB0aW9uTWVzc2FnZSA9ICJtZXNzYWdlID09IG51bGwiOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIF9uYXRpdmVtZXNzYWdlID0gX2Vudi0+R2V0U3RyaW5nVVRGQ2hhcnMobWVzc2FnZSwgMCk7CisgICAgX3N0cmluZ2xlbiA9IF9lbnYtPkdldFN0cmluZ1VURkxlbmd0aChtZXNzYWdlKTsKKyAgICBpZiAobGVuZ3RoID4gX3N0cmluZ2xlbikgeworICAgICAgICBfZXhjZXB0aW9uID0gMTsKKyAgICAgICAgX2V4Y2VwdGlvblR5cGUgPSAiamF2YS9sYW5nL0FycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiI7CisgICAgICAgIF9leGNlcHRpb25NZXNzYWdlID0gImxlbmd0aCBvZiBtZXNzYWdlIGlzIHNob3J0ZXIgdGhhbiBsZW5ndGggYXJndW1lbnQiOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgZ2xQdXNoRGVidWdHcm91cCgKKyAgICAgICAgKEdMZW51bSlzb3VyY2UsCisgICAgICAgIChHTHVpbnQpaWQsCisgICAgICAgIChHTHNpemVpKWxlbmd0aCwKKyAgICAgICAgKEdMY2hhciAqKV9uYXRpdmVtZXNzYWdlCisgICAgKTsKKworZXhpdDoKKyAgICBpZiAoX25hdGl2ZW1lc3NhZ2UpIHsKKyAgICAgICAgX2Vudi0+UmVsZWFzZVN0cmluZ1VURkNoYXJzKG1lc3NhZ2UsIF9uYXRpdmVtZXNzYWdlKTsKKyAgICB9CisKKyAgICBpZiAoX2V4Y2VwdGlvbikgeworICAgICAgICBqbmlUaHJvd0V4Y2VwdGlvbihfZW52LCBfZXhjZXB0aW9uVHlwZSwgX2V4Y2VwdGlvbk1lc3NhZ2UpOworICAgIH0KK30KKworLyogdm9pZCBnbFBvcERlYnVnR3JvdXAgKCB2b2lkICkgKi8KK3N0YXRpYyB2b2lkCithbmRyb2lkX2dsUG9wRGVidWdHcm91cF9fCisgIChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMpIHsKKyAgICBnbFBvcERlYnVnR3JvdXAoKTsKK30KKworLyogdm9pZCBnbE9iamVjdExhYmVsICggR0xlbnVtIGlkZW50aWZpZXIsIEdMdWludCBuYW1lLCBHTHNpemVpIGxlbmd0aCwgY29uc3QgR0xjaGFyICpsYWJlbCApICovCitzdGF0aWMgdm9pZAorYW5kcm9pZF9nbE9iamVjdExhYmVsX19JSUlMamF2YV9sYW5nX1N0cmluZ18yCisgIChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGppbnQgaWRlbnRpZmllciwgamludCBuYW1lLCBqaW50IGxlbmd0aCwganN0cmluZyBsYWJlbCkgeworICAgIGppbnQgX2V4Y2VwdGlvbiA9IDA7CisgICAgY29uc3QgY2hhciAqIF9leGNlcHRpb25UeXBlID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICogX2V4Y2VwdGlvbk1lc3NhZ2UgPSBOVUxMOworICAgIGNvbnN0IGNoYXIqIF9uYXRpdmVsYWJlbCA9IDA7CisgICAganNpemUgX3N0cmluZ2xlbiA9IDA7CisKKyAgICBpZiAobGFiZWwpIHsKKyAgICAgICAgX25hdGl2ZWxhYmVsID0gX2Vudi0+R2V0U3RyaW5nVVRGQ2hhcnMobGFiZWwsIDApOworICAgICAgICBfc3RyaW5nbGVuID0gX2Vudi0+R2V0U3RyaW5nVVRGTGVuZ3RoKGxhYmVsKTsKKyAgICAgICAgaWYgKGxlbmd0aCA+IF9zdHJpbmdsZW4pIHsKKyAgICAgICAgICAgIF9leGNlcHRpb24gPSAxOworICAgICAgICAgICAgX2V4Y2VwdGlvblR5cGUgPSAiamF2YS9sYW5nL0FycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiI7CisgICAgICAgICAgICBfZXhjZXB0aW9uTWVzc2FnZSA9ICJsZW5ndGggb2YgbGFiZWwgaXMgc2hvcnRlciB0aGFuIGxlbmd0aCBhcmd1bWVudCI7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBnbE9iamVjdExhYmVsKAorICAgICAgICAoR0xlbnVtKWlkZW50aWZpZXIsCisgICAgICAgIChHTHVpbnQpbmFtZSwKKyAgICAgICAgKEdMc2l6ZWkpbGVuZ3RoLAorICAgICAgICAoR0xjaGFyICopX25hdGl2ZWxhYmVsCisgICAgKTsKKworZXhpdDoKKyAgICBpZiAoX25hdGl2ZWxhYmVsKSB7CisgICAgICAgIF9lbnYtPlJlbGVhc2VTdHJpbmdVVEZDaGFycyhsYWJlbCwgX25hdGl2ZWxhYmVsKTsKKyAgICB9CisKKyAgICBpZiAoX2V4Y2VwdGlvbikgeworICAgICAgICBqbmlUaHJvd0V4Y2VwdGlvbihfZW52LCBfZXhjZXB0aW9uVHlwZSwgX2V4Y2VwdGlvbk1lc3NhZ2UpOworICAgIH0KK30KKworLyogdm9pZCBnbEdldE9iamVjdExhYmVsICggR0xlbnVtIGlkZW50aWZpZXIsIEdMdWludCBuYW1lLCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xjaGFyICpsYWJlbCApICovCitzdGF0aWMganN0cmluZworYW5kcm9pZF9nbEdldE9iamVjdExhYmVsKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamludCBpZGVudGlmaWVyLCBqaW50IG5hbWUpIHsKKyAgICBqbmlUaHJvd0V4Y2VwdGlvbihfZW52LCAiamF2YS9sYW5nL1Vuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIiwgIm5vdCB5ZXQgaW1wbGVtZW50ZWQiKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworLyogdm9pZCBnbE9iamVjdFB0ckxhYmVsICggY29uc3Qgdm9pZCAqcHRyLCBHTHNpemVpIGxlbmd0aCwgY29uc3QgR0xjaGFyICpsYWJlbCApICovCitzdGF0aWMgdm9pZAorYW5kcm9pZF9nbE9iamVjdFB0ckxhYmVsKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgcHRyLCBqc3RyaW5nIGxhYmVsKSB7CisgICAgam5pVGhyb3dFeGNlcHRpb24oX2VudiwgImphdmEvbGFuZy9VbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiIsICJub3QgeWV0IGltcGxlbWVudGVkIik7Cit9CisKKy8qIHZvaWQgZ2xHZXRPYmplY3RQdHJMYWJlbCAoIGNvbnN0IHZvaWQgKnB0ciwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIEdMY2hhciAqbGFiZWwgKSAqLworc3RhdGljIGpzdHJpbmcKK2FuZHJvaWRfZ2xHZXRPYmplY3RQdHJMYWJlbChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIHB0cikgeworICAgIGpuaVRocm93RXhjZXB0aW9uKF9lbnYsICJqYXZhL2xhbmcvVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24iLCAibm90IHlldCBpbXBsZW1lbnRlZCIpOworICAgIHJldHVybiBOVUxMOworfQorCisvKiB2b2lkIGdsR2V0UG9pbnRlcnYgKCBHTGVudW0gcG5hbWUsIHZvaWQgKipwYXJhbXMgKSAqLworc3RhdGljIGpsb25nCithbmRyb2lkX2dsR2V0UG9pbnRlcnYoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqaW50IHBuYW1lKSB7CisgICAgam5pVGhyb3dFeGNlcHRpb24oX2VudiwgImphdmEvbGFuZy9VbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiIsICJub3QgeWV0IGltcGxlbWVudGVkIik7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIHZvaWQgZ2xFbmFibGVpICggR0xlbnVtIHRhcmdldCwgR0x1aW50IGluZGV4ICkgKi8KK3N0YXRpYyB2b2lkCithbmRyb2lkX2dsRW5hYmxlaV9fSUkKKyAgKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamludCB0YXJnZXQsIGppbnQgaW5kZXgpIHsKKyAgICBnbEVuYWJsZWkoCisgICAgICAgIChHTGVudW0pdGFyZ2V0LAorICAgICAgICAoR0x1aW50KWluZGV4CisgICAgKTsKK30KKworLyogdm9pZCBnbERpc2FibGVpICggR0xlbnVtIHRhcmdldCwgR0x1aW50IGluZGV4ICkgKi8KK3N0YXRpYyB2b2lkCithbmRyb2lkX2dsRGlzYWJsZWlfX0lJCisgIChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGppbnQgdGFyZ2V0LCBqaW50IGluZGV4KSB7CisgICAgZ2xEaXNhYmxlaSgKKyAgICAgICAgKEdMZW51bSl0YXJnZXQsCisgICAgICAgIChHTHVpbnQpaW5kZXgKKyAgICApOworfQorCisvKiB2b2lkIGdsQmxlbmRFcXVhdGlvbmkgKCBHTHVpbnQgYnVmLCBHTGVudW0gbW9kZSApICovCitzdGF0aWMgdm9pZAorYW5kcm9pZF9nbEJsZW5kRXF1YXRpb25pX19JSQorICAoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqaW50IGJ1ZiwgamludCBtb2RlKSB7CisgICAgZ2xCbGVuZEVxdWF0aW9uaSgKKyAgICAgICAgKEdMdWludClidWYsCisgICAgICAgIChHTGVudW0pbW9kZQorICAgICk7Cit9CisKKy8qIHZvaWQgZ2xCbGVuZEVxdWF0aW9uU2VwYXJhdGVpICggR0x1aW50IGJ1ZiwgR0xlbnVtIG1vZGVSR0IsIEdMZW51bSBtb2RlQWxwaGEgKSAqLworc3RhdGljIHZvaWQKK2FuZHJvaWRfZ2xCbGVuZEVxdWF0aW9uU2VwYXJhdGVpX19JSUkKKyAgKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamludCBidWYsIGppbnQgbW9kZVJHQiwgamludCBtb2RlQWxwaGEpIHsKKyAgICBnbEJsZW5kRXF1YXRpb25TZXBhcmF0ZWkoCisgICAgICAgIChHTHVpbnQpYnVmLAorICAgICAgICAoR0xlbnVtKW1vZGVSR0IsCisgICAgICAgIChHTGVudW0pbW9kZUFscGhhCisgICAgKTsKK30KKworLyogdm9pZCBnbEJsZW5kRnVuY2kgKCBHTHVpbnQgYnVmLCBHTGVudW0gc3JjLCBHTGVudW0gZHN0ICkgKi8KK3N0YXRpYyB2b2lkCithbmRyb2lkX2dsQmxlbmRGdW5jaV9fSUlJCisgIChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGppbnQgYnVmLCBqaW50IHNyYywgamludCBkc3QpIHsKKyAgICBnbEJsZW5kRnVuY2koCisgICAgICAgIChHTHVpbnQpYnVmLAorICAgICAgICAoR0xlbnVtKXNyYywKKyAgICAgICAgKEdMZW51bSlkc3QKKyAgICApOworfQorCisvKiB2b2lkIGdsQmxlbmRGdW5jU2VwYXJhdGVpICggR0x1aW50IGJ1ZiwgR0xlbnVtIHNyY1JHQiwgR0xlbnVtIGRzdFJHQiwgR0xlbnVtIHNyY0FscGhhLCBHTGVudW0gZHN0QWxwaGEgKSAqLworc3RhdGljIHZvaWQKK2FuZHJvaWRfZ2xCbGVuZEZ1bmNTZXBhcmF0ZWlfX0lJSUlJCisgIChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGppbnQgYnVmLCBqaW50IHNyY1JHQiwgamludCBkc3RSR0IsIGppbnQgc3JjQWxwaGEsIGppbnQgZHN0QWxwaGEpIHsKKyAgICBnbEJsZW5kRnVuY1NlcGFyYXRlaSgKKyAgICAgICAgKEdMdWludClidWYsCisgICAgICAgIChHTGVudW0pc3JjUkdCLAorICAgICAgICAoR0xlbnVtKWRzdFJHQiwKKyAgICAgICAgKEdMZW51bSlzcmNBbHBoYSwKKyAgICAgICAgKEdMZW51bSlkc3RBbHBoYQorICAgICk7Cit9CisKKy8qIHZvaWQgZ2xDb2xvck1hc2tpICggR0x1aW50IGluZGV4LCBHTGJvb2xlYW4gciwgR0xib29sZWFuIGcsIEdMYm9vbGVhbiBiLCBHTGJvb2xlYW4gYSApICovCitzdGF0aWMgdm9pZAorYW5kcm9pZF9nbENvbG9yTWFza2lfX0laWlpaCisgIChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGppbnQgaW5kZXgsIGpib29sZWFuIHIsIGpib29sZWFuIGcsIGpib29sZWFuIGIsIGpib29sZWFuIGEpIHsKKyAgICBnbENvbG9yTWFza2koCisgICAgICAgIChHTHVpbnQpaW5kZXgsCisgICAgICAgIChHTGJvb2xlYW4pciwKKyAgICAgICAgKEdMYm9vbGVhbilnLAorICAgICAgICAoR0xib29sZWFuKWIsCisgICAgICAgIChHTGJvb2xlYW4pYQorICAgICk7Cit9CisKKy8qIEdMYm9vbGVhbiBnbElzRW5hYmxlZGkgKCBHTGVudW0gdGFyZ2V0LCBHTHVpbnQgaW5kZXggKSAqLworc3RhdGljIGpib29sZWFuCithbmRyb2lkX2dsSXNFbmFibGVkaV9fSUkKKyAgKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamludCB0YXJnZXQsIGppbnQgaW5kZXgpIHsKKyAgICBHTGJvb2xlYW4gX3JldHVyblZhbHVlOworICAgIF9yZXR1cm5WYWx1ZSA9IGdsSXNFbmFibGVkaSgKKyAgICAgICAgKEdMZW51bSl0YXJnZXQsCisgICAgICAgIChHTHVpbnQpaW5kZXgKKyAgICApOworICAgIHJldHVybiAoamJvb2xlYW4pX3JldHVyblZhbHVlOworfQorCisvKiB2b2lkIGdsRHJhd0VsZW1lbnRzQmFzZVZlcnRleCAoIEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCAqaW5kaWNlcywgR0xpbnQgYmFzZXZlcnRleCApICovCitzdGF0aWMgdm9pZAorYW5kcm9pZF9nbERyYXdFbGVtZW50c0Jhc2VWZXJ0ZXhfX0lJSUxqYXZhX25pb19CdWZmZXJfMkkKKyAgKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamludCBtb2RlLCBqaW50IGNvdW50LCBqaW50IHR5cGUsIGpvYmplY3QgaW5kaWNlc19idWYsIGppbnQgYmFzZXZlcnRleCkgeworICAgIGppbnQgX2V4Y2VwdGlvbiA9IDA7CisgICAgY29uc3QgY2hhciAqIF9leGNlcHRpb25UeXBlID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICogX2V4Y2VwdGlvbk1lc3NhZ2UgPSBOVUxMOworICAgIGphcnJheSBfYXJyYXkgPSAoamFycmF5KSAwOworICAgIGppbnQgX2J1ZmZlck9mZnNldCA9IChqaW50KSAwOworICAgIGppbnQgX3JlbWFpbmluZzsKKyAgICB2b2lkICppbmRpY2VzID0gKHZvaWQgKikgMDsKKworICAgIGluZGljZXMgPSAodm9pZCAqKWdldFBvaW50ZXIoX2VudiwgaW5kaWNlc19idWYsIChqYXJyYXkqKSZfYXJyYXksICZfcmVtYWluaW5nLCAmX2J1ZmZlck9mZnNldCk7CisgICAgaWYgKF9yZW1haW5pbmcgPCBjb3VudC1iYXNldmVydGV4KSB7CisgICAgICAgIF9leGNlcHRpb24gPSAxOworICAgICAgICBfZXhjZXB0aW9uVHlwZSA9ICJqYXZhL2xhbmcvQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIjsKKyAgICAgICAgX2V4Y2VwdGlvbk1lc3NhZ2UgPSAicmVtYWluaW5nKCkgPCBjb3VudC1iYXNldmVydGV4IDwgbmVlZGVkIjsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICBpZiAoaW5kaWNlcyA9PSBOVUxMKSB7CisgICAgICAgIGNoYXIgKiBfaW5kaWNlc0Jhc2UgPSAoY2hhciAqKV9lbnYtPkdldFByaW1pdGl2ZUFycmF5Q3JpdGljYWwoX2FycmF5LCAoamJvb2xlYW4gKikgMCk7CisgICAgICAgIGluZGljZXMgPSAodm9pZCAqKSAoX2luZGljZXNCYXNlICsgX2J1ZmZlck9mZnNldCk7CisgICAgfQorICAgIGdsRHJhd0VsZW1lbnRzQmFzZVZlcnRleCgKKyAgICAgICAgKEdMZW51bSltb2RlLAorICAgICAgICAoR0xzaXplaSljb3VudCwKKyAgICAgICAgKEdMZW51bSl0eXBlLAorICAgICAgICAodm9pZCAqKWluZGljZXMsCisgICAgICAgIChHTGludCliYXNldmVydGV4CisgICAgKTsKKworZXhpdDoKKyAgICBpZiAoX2FycmF5KSB7CisgICAgICAgIHJlbGVhc2VQb2ludGVyKF9lbnYsIF9hcnJheSwgaW5kaWNlcywgSk5JX0ZBTFNFKTsKKyAgICB9CisgICAgaWYgKF9leGNlcHRpb24pIHsKKyAgICAgICAgam5pVGhyb3dFeGNlcHRpb24oX2VudiwgX2V4Y2VwdGlvblR5cGUsIF9leGNlcHRpb25NZXNzYWdlKTsKKyAgICB9Cit9CisKKy8qIHZvaWQgZ2xEcmF3UmFuZ2VFbGVtZW50c0Jhc2VWZXJ0ZXggKCBHTGVudW0gbW9kZSwgR0x1aW50IHN0YXJ0LCBHTHVpbnQgZW5kLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCAqaW5kaWNlcywgR0xpbnQgYmFzZXZlcnRleCApICovCitzdGF0aWMgdm9pZAorYW5kcm9pZF9nbERyYXdSYW5nZUVsZW1lbnRzQmFzZVZlcnRleF9fSUlJSUlMamF2YV9uaW9fQnVmZmVyXzJJCisgIChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGppbnQgbW9kZSwgamludCBzdGFydCwgamludCBlbmQsIGppbnQgY291bnQsIGppbnQgdHlwZSwgam9iamVjdCBpbmRpY2VzX2J1ZiwgamludCBiYXNldmVydGV4KSB7CisgICAgamludCBfZXhjZXB0aW9uID0gMDsKKyAgICBjb25zdCBjaGFyICogX2V4Y2VwdGlvblR5cGUgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKiBfZXhjZXB0aW9uTWVzc2FnZSA9IE5VTEw7CisgICAgamFycmF5IF9hcnJheSA9IChqYXJyYXkpIDA7CisgICAgamludCBfYnVmZmVyT2Zmc2V0ID0gKGppbnQpIDA7CisgICAgamludCBfcmVtYWluaW5nOworICAgIHZvaWQgKmluZGljZXMgPSAodm9pZCAqKSAwOworCisgICAgaW5kaWNlcyA9ICh2b2lkICopZ2V0UG9pbnRlcihfZW52LCBpbmRpY2VzX2J1ZiwgKGphcnJheSopJl9hcnJheSwgJl9yZW1haW5pbmcsICZfYnVmZmVyT2Zmc2V0KTsKKyAgICBpZiAoX3JlbWFpbmluZyA8IGNvdW50LWJhc2V2ZXJ0ZXgpIHsKKyAgICAgICAgX2V4Y2VwdGlvbiA9IDE7CisgICAgICAgIF9leGNlcHRpb25UeXBlID0gImphdmEvbGFuZy9BcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24iOworICAgICAgICBfZXhjZXB0aW9uTWVzc2FnZSA9ICJyZW1haW5pbmcoKSA8IGNvdW50LWJhc2V2ZXJ0ZXggPCBuZWVkZWQiOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIGlmIChpbmRpY2VzID09IE5VTEwpIHsKKyAgICAgICAgY2hhciAqIF9pbmRpY2VzQmFzZSA9IChjaGFyICopX2Vudi0+R2V0UHJpbWl0aXZlQXJyYXlDcml0aWNhbChfYXJyYXksIChqYm9vbGVhbiAqKSAwKTsKKyAgICAgICAgaW5kaWNlcyA9ICh2b2lkICopIChfaW5kaWNlc0Jhc2UgKyBfYnVmZmVyT2Zmc2V0KTsKKyAgICB9CisgICAgZ2xEcmF3UmFuZ2VFbGVtZW50c0Jhc2VWZXJ0ZXgoCisgICAgICAgIChHTGVudW0pbW9kZSwKKyAgICAgICAgKEdMdWludClzdGFydCwKKyAgICAgICAgKEdMdWludCllbmQsCisgICAgICAgIChHTHNpemVpKWNvdW50LAorICAgICAgICAoR0xlbnVtKXR5cGUsCisgICAgICAgICh2b2lkICopaW5kaWNlcywKKyAgICAgICAgKEdMaW50KWJhc2V2ZXJ0ZXgKKyAgICApOworCitleGl0OgorICAgIGlmIChfYXJyYXkpIHsKKyAgICAgICAgcmVsZWFzZVBvaW50ZXIoX2VudiwgX2FycmF5LCBpbmRpY2VzLCBKTklfRkFMU0UpOworICAgIH0KKyAgICBpZiAoX2V4Y2VwdGlvbikgeworICAgICAgICBqbmlUaHJvd0V4Y2VwdGlvbihfZW52LCBfZXhjZXB0aW9uVHlwZSwgX2V4Y2VwdGlvbk1lc3NhZ2UpOworICAgIH0KK30KKworLyogdm9pZCBnbERyYXdFbGVtZW50c0luc3RhbmNlZEJhc2VWZXJ0ZXggKCBHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQgKmluZGljZXMsIEdMc2l6ZWkgaW5zdGFuY2VDb3VudCwgR0xpbnQgYmFzZXZlcnRleCApICovCitzdGF0aWMgdm9pZAorYW5kcm9pZF9nbERyYXdFbGVtZW50c0luc3RhbmNlZEJhc2VWZXJ0ZXhfX0lJSUxqYXZhX25pb19CdWZmZXJfMklJCisgIChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGppbnQgbW9kZSwgamludCBjb3VudCwgamludCB0eXBlLCBqb2JqZWN0IGluZGljZXNfYnVmLCBqaW50IGluc3RhbmNlQ291bnQsIGppbnQgYmFzZXZlcnRleCkgeworICAgIGppbnQgX2V4Y2VwdGlvbiA9IDA7CisgICAgY29uc3QgY2hhciAqIF9leGNlcHRpb25UeXBlID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICogX2V4Y2VwdGlvbk1lc3NhZ2UgPSBOVUxMOworICAgIGphcnJheSBfYXJyYXkgPSAoamFycmF5KSAwOworICAgIGppbnQgX2J1ZmZlck9mZnNldCA9IChqaW50KSAwOworICAgIGppbnQgX3JlbWFpbmluZzsKKyAgICB2b2lkICppbmRpY2VzID0gKHZvaWQgKikgMDsKKworICAgIGluZGljZXMgPSAodm9pZCAqKWdldFBvaW50ZXIoX2VudiwgaW5kaWNlc19idWYsICZfYXJyYXksICZfcmVtYWluaW5nLCAmX2J1ZmZlck9mZnNldCk7CisgICAgaWYgKF9yZW1haW5pbmcgPCBjb3VudC1iYXNldmVydGV4KSB7CisgICAgICAgIF9leGNlcHRpb24gPSAxOworICAgICAgICBfZXhjZXB0aW9uVHlwZSA9ICJqYXZhL2xhbmcvQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIjsKKyAgICAgICAgX2V4Y2VwdGlvbk1lc3NhZ2UgPSAicmVtYWluaW5nKCkgPCBjb3VudC1iYXNldmVydGV4IDwgbmVlZGVkIjsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICBpZiAoaW5kaWNlcyA9PSBOVUxMKSB7CisgICAgICAgIGNoYXIgKiBfaW5kaWNlc0Jhc2UgPSAoY2hhciAqKV9lbnYtPkdldFByaW1pdGl2ZUFycmF5Q3JpdGljYWwoX2FycmF5LCAoamJvb2xlYW4gKikgMCk7CisgICAgICAgIGluZGljZXMgPSAodm9pZCAqKSAoX2luZGljZXNCYXNlICsgX2J1ZmZlck9mZnNldCk7CisgICAgfQorICAgIGdsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQmFzZVZlcnRleCgKKyAgICAgICAgKEdMZW51bSltb2RlLAorICAgICAgICAoR0xzaXplaSljb3VudCwKKyAgICAgICAgKEdMZW51bSl0eXBlLAorICAgICAgICAodm9pZCAqKWluZGljZXMsCisgICAgICAgIChHTHNpemVpKWluc3RhbmNlQ291bnQsCisgICAgICAgIChHTGludCkgYmFzZXZlcnRleAorICAgICk7CisKK2V4aXQ6CisgICAgaWYgKF9hcnJheSkgeworICAgICAgICByZWxlYXNlUG9pbnRlcihfZW52LCBfYXJyYXksIGluZGljZXMsIEpOSV9GQUxTRSk7CisgICAgfQorfQorCisvKiB2b2lkIGdsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQmFzZVZlcnRleCAoIEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCAqaW5kaWNlcywgR0xzaXplaSBpbnN0YW5jZUNvdW50LCBHTGludCBiYXNldmVydGV4ICkgKi8KK3N0YXRpYyB2b2lkCithbmRyb2lkX2dsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQmFzZVZlcnRleF9fSUlJSUlJCisgIChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGppbnQgbW9kZSwgamludCBjb3VudCwgamludCB0eXBlLCBqaW50IGluZGljZXNPZmZzZXQsIGppbnQgaW5zdGFuY2VDb3VudCwgamludCBiYXNldmVydGV4KSB7CisgICAgZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWRCYXNlVmVydGV4KAorICAgICAgICAoR0xlbnVtKW1vZGUsCisgICAgICAgIChHTHNpemVpKWNvdW50LAorICAgICAgICAoR0xlbnVtKXR5cGUsCisgICAgICAgICh2b2lkICopc3RhdGljX2Nhc3Q8dWludHB0cl90PihpbmRpY2VzT2Zmc2V0KSwKKyAgICAgICAgKEdMc2l6ZWkpaW5zdGFuY2VDb3VudCwKKyAgICAgICAgKEdMaW50KWJhc2V2ZXJ0ZXgKKyAgICApOworfQorLyogdm9pZCBnbEZyYW1lYnVmZmVyVGV4dHVyZSAoIEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTHVpbnQgdGV4dHVyZSwgR0xpbnQgbGV2ZWwgKSAqLworc3RhdGljIHZvaWQKK2FuZHJvaWRfZ2xGcmFtZWJ1ZmZlclRleHR1cmVfX0lJSUkKKyAgKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamludCB0YXJnZXQsIGppbnQgYXR0YWNobWVudCwgamludCB0ZXh0dXJlLCBqaW50IGxldmVsKSB7CisgICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUoCisgICAgICAgIChHTGVudW0pdGFyZ2V0LAorICAgICAgICAoR0xlbnVtKWF0dGFjaG1lbnQsCisgICAgICAgIChHTHVpbnQpdGV4dHVyZSwKKyAgICAgICAgKEdMaW50KWxldmVsCisgICAgKTsKK30KKworLyogdm9pZCBnbFByaW1pdGl2ZUJvdW5kaW5nQm94ICggR0xmbG9hdCBtaW5YLCBHTGZsb2F0IG1pblksIEdMZmxvYXQgbWluWiwgR0xmbG9hdCBtaW5XLCBHTGZsb2F0IG1heFgsIEdMZmxvYXQgbWF4WSwgR0xmbG9hdCBtYXhaLCBHTGZsb2F0IG1heFcgKSAqLworc3RhdGljIHZvaWQKK2FuZHJvaWRfZ2xQcmltaXRpdmVCb3VuZGluZ0JveF9fRkZGRkZGRkYKKyAgKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamZsb2F0IG1pblgsIGpmbG9hdCBtaW5ZLCBqZmxvYXQgbWluWiwgamZsb2F0IG1pblcsIGpmbG9hdCBtYXhYLCBqZmxvYXQgbWF4WSwgamZsb2F0IG1heFosIGpmbG9hdCBtYXhXKSB7CisgICAgZ2xQcmltaXRpdmVCb3VuZGluZ0JveCgKKyAgICAgICAgKEdMZmxvYXQpbWluWCwKKyAgICAgICAgKEdMZmxvYXQpbWluWSwKKyAgICAgICAgKEdMZmxvYXQpbWluWiwKKyAgICAgICAgKEdMZmxvYXQpbWluVywKKyAgICAgICAgKEdMZmxvYXQpbWF4WCwKKyAgICAgICAgKEdMZmxvYXQpbWF4WSwKKyAgICAgICAgKEdMZmxvYXQpbWF4WiwKKyAgICAgICAgKEdMZmxvYXQpbWF4VworICAgICk7Cit9CisKKy8qIEdMZW51bSBnbEdldEdyYXBoaWNzUmVzZXRTdGF0dXMgKCB2b2lkICkgKi8KK3N0YXRpYyBqaW50CithbmRyb2lkX2dsR2V0R3JhcGhpY3NSZXNldFN0YXR1c19fCisgIChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMpIHsKKyAgICBHTGVudW0gX3JldHVyblZhbHVlOworICAgIF9yZXR1cm5WYWx1ZSA9IGdsR2V0R3JhcGhpY3NSZXNldFN0YXR1cygpOworICAgIHJldHVybiAoamludClfcmV0dXJuVmFsdWU7Cit9CisKKy8qIHZvaWQgZ2xSZWFkblBpeGVscyAoIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xzaXplaSBidWZTaXplLCB2b2lkICpkYXRhICkgKi8KK3N0YXRpYyB2b2lkCithbmRyb2lkX2dsUmVhZG5QaXhlbHNfX0lJSUlJSUlMamF2YV9uaW9fQnVmZmVyXzIKKyAgKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamludCB4LCBqaW50IHksIGppbnQgd2lkdGgsIGppbnQgaGVpZ2h0LCBqaW50IGZvcm1hdCwgamludCB0eXBlLCBqaW50IGJ1ZlNpemUsIGpvYmplY3QgZGF0YV9idWYpIHsKKyAgICBqaW50IF9leGNlcHRpb24gPSAwOworICAgIGNvbnN0IGNoYXIgKiBfZXhjZXB0aW9uVHlwZSA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqIF9leGNlcHRpb25NZXNzYWdlID0gTlVMTDsKKyAgICBqYXJyYXkgX2FycmF5ID0gKGphcnJheSkgMDsKKyAgICBqaW50IF9idWZmZXJPZmZzZXQgPSAoamludCkgMDsKKyAgICBqaW50IF9yZW1haW5pbmc7CisgICAgdm9pZCAqZGF0YSA9ICh2b2lkICopIDA7CisKKyAgICBkYXRhID0gKHZvaWQgKilnZXRQb2ludGVyKF9lbnYsIGRhdGFfYnVmLCAoamFycmF5KikmX2FycmF5LCAmX3JlbWFpbmluZywgJl9idWZmZXJPZmZzZXQpOworICAgIGlmIChfcmVtYWluaW5nIDwgYnVmU2l6ZSkgeworICAgICAgICBfZXhjZXB0aW9uID0gMTsKKyAgICAgICAgX2V4Y2VwdGlvblR5cGUgPSAiamF2YS9sYW5nL0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiI7CisgICAgICAgIF9leGNlcHRpb25NZXNzYWdlID0gInJlbWFpbmluZygpIDwgYnVmU2l6ZSA8IG5lZWRlZCI7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisgICAgaWYgKGRhdGEgPT0gTlVMTCkgeworICAgICAgICBjaGFyICogX2RhdGFCYXNlID0gKGNoYXIgKilfZW52LT5HZXRQcmltaXRpdmVBcnJheUNyaXRpY2FsKF9hcnJheSwgKGpib29sZWFuICopIDApOworICAgICAgICBkYXRhID0gKHZvaWQgKikgKF9kYXRhQmFzZSArIF9idWZmZXJPZmZzZXQpOworICAgIH0KKyAgICBnbFJlYWRuUGl4ZWxzKAorICAgICAgICAoR0xpbnQpeCwKKyAgICAgICAgKEdMaW50KXksCisgICAgICAgIChHTHNpemVpKXdpZHRoLAorICAgICAgICAoR0xzaXplaSloZWlnaHQsCisgICAgICAgIChHTGVudW0pZm9ybWF0LAorICAgICAgICAoR0xlbnVtKXR5cGUsCisgICAgICAgIChHTHNpemVpKWJ1ZlNpemUsCisgICAgICAgICh2b2lkICopZGF0YQorICAgICk7CisKK2V4aXQ6CisgICAgaWYgKF9hcnJheSkgeworICAgICAgICByZWxlYXNlUG9pbnRlcihfZW52LCBfYXJyYXksIGRhdGEsIF9leGNlcHRpb24gPyBKTklfRkFMU0UgOiBKTklfVFJVRSk7CisgICAgfQorICAgIGlmIChfZXhjZXB0aW9uKSB7CisgICAgICAgIGpuaVRocm93RXhjZXB0aW9uKF9lbnYsIF9leGNlcHRpb25UeXBlLCBfZXhjZXB0aW9uTWVzc2FnZSk7CisgICAgfQorfQorCisvKiB2b2lkIGdsR2V0blVuaWZvcm1mdiAoIEdMdWludCBwcm9ncmFtLCBHTGludCBsb2NhdGlvbiwgR0xzaXplaSBidWZTaXplLCBHTGZsb2F0ICpwYXJhbXMgKSAqLworc3RhdGljIHZvaWQKK2FuZHJvaWRfZ2xHZXRuVW5pZm9ybWZ2X19JSUlfM0ZJCisgIChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGppbnQgcHJvZ3JhbSwgamludCBsb2NhdGlvbiwgamludCBidWZTaXplLCBqZmxvYXRBcnJheSBwYXJhbXNfcmVmLCBqaW50IG9mZnNldCkgeworICAgIGppbnQgX2V4Y2VwdGlvbiA9IDA7CisgICAgY29uc3QgY2hhciAqIF9leGNlcHRpb25UeXBlID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICogX2V4Y2VwdGlvbk1lc3NhZ2UgPSBOVUxMOworICAgIEdMZmxvYXQgKnBhcmFtc19iYXNlID0gKEdMZmxvYXQgKikgMDsKKyAgICBqaW50IF9yZW1haW5pbmc7CisgICAgR0xmbG9hdCAqcGFyYW1zID0gKEdMZmxvYXQgKikgMDsKKworICAgIGlmICghcGFyYW1zX3JlZikgeworICAgICAgICBfZXhjZXB0aW9uID0gMTsKKyAgICAgICAgX2V4Y2VwdGlvblR5cGUgPSAiamF2YS9sYW5nL0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiI7CisgICAgICAgIF9leGNlcHRpb25NZXNzYWdlID0gInBhcmFtcyA9PSBudWxsIjsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICBpZiAob2Zmc2V0IDwgMCkgeworICAgICAgICBfZXhjZXB0aW9uID0gMTsKKyAgICAgICAgX2V4Y2VwdGlvblR5cGUgPSAiamF2YS9sYW5nL0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiI7CisgICAgICAgIF9leGNlcHRpb25NZXNzYWdlID0gIm9mZnNldCA8IDAiOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIF9yZW1haW5pbmcgPSBfZW52LT5HZXRBcnJheUxlbmd0aChwYXJhbXNfcmVmKSAtIG9mZnNldDsKKyAgICBpZiAoX3JlbWFpbmluZyA8IGJ1ZlNpemUpIHsKKyAgICAgICAgX2V4Y2VwdGlvbiA9IDE7CisgICAgICAgIF9leGNlcHRpb25UeXBlID0gImphdmEvbGFuZy9JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iOworICAgICAgICBfZXhjZXB0aW9uTWVzc2FnZSA9ICJsZW5ndGggLSBvZmZzZXQgPCBidWZTaXplIDwgbmVlZGVkIjsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICBwYXJhbXNfYmFzZSA9IChHTGZsb2F0ICopCisgICAgICAgIF9lbnYtPkdldEZsb2F0QXJyYXlFbGVtZW50cyhwYXJhbXNfcmVmLCAoamJvb2xlYW4gKikwKTsKKyAgICBwYXJhbXMgPSBwYXJhbXNfYmFzZSArIG9mZnNldDsKKworICAgIGdsR2V0blVuaWZvcm1mdigKKyAgICAgICAgKEdMdWludClwcm9ncmFtLAorICAgICAgICAoR0xpbnQpbG9jYXRpb24sCisgICAgICAgIChHTHNpemVpKWJ1ZlNpemUsCisgICAgICAgIChHTGZsb2F0ICopcGFyYW1zCisgICAgKTsKKworZXhpdDoKKyAgICBpZiAocGFyYW1zX2Jhc2UpIHsKKyAgICAgICAgX2Vudi0+UmVsZWFzZUZsb2F0QXJyYXlFbGVtZW50cyhwYXJhbXNfcmVmLCAoamZsb2F0KilwYXJhbXNfYmFzZSwKKyAgICAgICAgICAgIF9leGNlcHRpb24gPyBKTklfQUJPUlQ6IDApOworICAgIH0KKyAgICBpZiAoX2V4Y2VwdGlvbikgeworICAgICAgICBqbmlUaHJvd0V4Y2VwdGlvbihfZW52LCBfZXhjZXB0aW9uVHlwZSwgX2V4Y2VwdGlvbk1lc3NhZ2UpOworICAgIH0KK30KKworLyogdm9pZCBnbEdldG5Vbmlmb3JtZnYgKCBHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgYnVmU2l6ZSwgR0xmbG9hdCAqcGFyYW1zICkgKi8KK3N0YXRpYyB2b2lkCithbmRyb2lkX2dsR2V0blVuaWZvcm1mdl9fSUlJTGphdmFfbmlvX0Zsb2F0QnVmZmVyXzIKKyAgKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamludCBwcm9ncmFtLCBqaW50IGxvY2F0aW9uLCBqaW50IGJ1ZlNpemUsIGpvYmplY3QgcGFyYW1zX2J1ZikgeworICAgIGppbnQgX2V4Y2VwdGlvbiA9IDA7CisgICAgY29uc3QgY2hhciAqIF9leGNlcHRpb25UeXBlID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICogX2V4Y2VwdGlvbk1lc3NhZ2UgPSBOVUxMOworICAgIGpmbG9hdEFycmF5IF9hcnJheSA9IChqZmxvYXRBcnJheSkgMDsKKyAgICBqaW50IF9idWZmZXJPZmZzZXQgPSAoamludCkgMDsKKyAgICBqaW50IF9yZW1haW5pbmc7CisgICAgR0xmbG9hdCAqcGFyYW1zID0gKEdMZmxvYXQgKikgMDsKKworICAgIHBhcmFtcyA9IChHTGZsb2F0ICopZ2V0UG9pbnRlcihfZW52LCBwYXJhbXNfYnVmLCAoamFycmF5KikmX2FycmF5LCAmX3JlbWFpbmluZywgJl9idWZmZXJPZmZzZXQpOworICAgIGlmIChfcmVtYWluaW5nIDwgYnVmU2l6ZSkgeworICAgICAgICBfZXhjZXB0aW9uID0gMTsKKyAgICAgICAgX2V4Y2VwdGlvblR5cGUgPSAiamF2YS9sYW5nL0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiI7CisgICAgICAgIF9leGNlcHRpb25NZXNzYWdlID0gInJlbWFpbmluZygpIDwgYnVmU2l6ZSA8IG5lZWRlZCI7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisgICAgaWYgKHBhcmFtcyA9PSBOVUxMKSB7CisgICAgICAgIGNoYXIgKiBfcGFyYW1zQmFzZSA9IChjaGFyICopX2Vudi0+R2V0RmxvYXRBcnJheUVsZW1lbnRzKF9hcnJheSwgKGpib29sZWFuICopIDApOworICAgICAgICBwYXJhbXMgPSAoR0xmbG9hdCAqKSAoX3BhcmFtc0Jhc2UgKyBfYnVmZmVyT2Zmc2V0KTsKKyAgICB9CisgICAgZ2xHZXRuVW5pZm9ybWZ2KAorICAgICAgICAoR0x1aW50KXByb2dyYW0sCisgICAgICAgIChHTGludClsb2NhdGlvbiwKKyAgICAgICAgKEdMc2l6ZWkpYnVmU2l6ZSwKKyAgICAgICAgKEdMZmxvYXQgKilwYXJhbXMKKyAgICApOworCitleGl0OgorICAgIGlmIChfYXJyYXkpIHsKKyAgICAgICAgX2Vudi0+UmVsZWFzZUZsb2F0QXJyYXlFbGVtZW50cyhfYXJyYXksIChqZmxvYXQqKXBhcmFtcywgX2V4Y2VwdGlvbiA/IEpOSV9BQk9SVCA6IDApOworICAgIH0KKyAgICBpZiAoX2V4Y2VwdGlvbikgeworICAgICAgICBqbmlUaHJvd0V4Y2VwdGlvbihfZW52LCBfZXhjZXB0aW9uVHlwZSwgX2V4Y2VwdGlvbk1lc3NhZ2UpOworICAgIH0KK30KKworLyogdm9pZCBnbEdldG5Vbmlmb3JtaXYgKCBHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgYnVmU2l6ZSwgR0xpbnQgKnBhcmFtcyApICovCitzdGF0aWMgdm9pZAorYW5kcm9pZF9nbEdldG5Vbmlmb3JtaXZfX0lJSV8zSUkKKyAgKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamludCBwcm9ncmFtLCBqaW50IGxvY2F0aW9uLCBqaW50IGJ1ZlNpemUsIGppbnRBcnJheSBwYXJhbXNfcmVmLCBqaW50IG9mZnNldCkgeworICAgIGppbnQgX2V4Y2VwdGlvbiA9IDA7CisgICAgY29uc3QgY2hhciAqIF9leGNlcHRpb25UeXBlID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICogX2V4Y2VwdGlvbk1lc3NhZ2UgPSBOVUxMOworICAgIEdMaW50ICpwYXJhbXNfYmFzZSA9IChHTGludCAqKSAwOworICAgIGppbnQgX3JlbWFpbmluZzsKKyAgICBHTGludCAqcGFyYW1zID0gKEdMaW50ICopIDA7CisKKyAgICBpZiAoIXBhcmFtc19yZWYpIHsKKyAgICAgICAgX2V4Y2VwdGlvbiA9IDE7CisgICAgICAgIF9leGNlcHRpb25UeXBlID0gImphdmEvbGFuZy9JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iOworICAgICAgICBfZXhjZXB0aW9uTWVzc2FnZSA9ICJwYXJhbXMgPT0gbnVsbCI7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisgICAgaWYgKG9mZnNldCA8IDApIHsKKyAgICAgICAgX2V4Y2VwdGlvbiA9IDE7CisgICAgICAgIF9leGNlcHRpb25UeXBlID0gImphdmEvbGFuZy9JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iOworICAgICAgICBfZXhjZXB0aW9uTWVzc2FnZSA9ICJvZmZzZXQgPCAwIjsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICBfcmVtYWluaW5nID0gX2Vudi0+R2V0QXJyYXlMZW5ndGgocGFyYW1zX3JlZikgLSBvZmZzZXQ7CisgICAgaWYgKF9yZW1haW5pbmcgPCBidWZTaXplKSB7CisgICAgICAgIF9leGNlcHRpb24gPSAxOworICAgICAgICBfZXhjZXB0aW9uVHlwZSA9ICJqYXZhL2xhbmcvSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIjsKKyAgICAgICAgX2V4Y2VwdGlvbk1lc3NhZ2UgPSAibGVuZ3RoIC0gb2Zmc2V0IDwgYnVmU2l6ZSA8IG5lZWRlZCI7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisgICAgcGFyYW1zX2Jhc2UgPSAoR0xpbnQgKikKKyAgICAgICAgX2Vudi0+R2V0SW50QXJyYXlFbGVtZW50cyhwYXJhbXNfcmVmLCAoamJvb2xlYW4gKikwKTsKKyAgICBwYXJhbXMgPSBwYXJhbXNfYmFzZSArIG9mZnNldDsKKworICAgIGdsR2V0blVuaWZvcm1pdigKKyAgICAgICAgKEdMdWludClwcm9ncmFtLAorICAgICAgICAoR0xpbnQpbG9jYXRpb24sCisgICAgICAgIChHTHNpemVpKWJ1ZlNpemUsCisgICAgICAgIChHTGludCAqKXBhcmFtcworICAgICk7CisKK2V4aXQ6CisgICAgaWYgKHBhcmFtc19iYXNlKSB7CisgICAgICAgIF9lbnYtPlJlbGVhc2VJbnRBcnJheUVsZW1lbnRzKHBhcmFtc19yZWYsIChqaW50KilwYXJhbXNfYmFzZSwKKyAgICAgICAgICAgIF9leGNlcHRpb24gPyBKTklfQUJPUlQ6IDApOworICAgIH0KKyAgICBpZiAoX2V4Y2VwdGlvbikgeworICAgICAgICBqbmlUaHJvd0V4Y2VwdGlvbihfZW52LCBfZXhjZXB0aW9uVHlwZSwgX2V4Y2VwdGlvbk1lc3NhZ2UpOworICAgIH0KK30KKworLyogdm9pZCBnbEdldG5Vbmlmb3JtaXYgKCBHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgYnVmU2l6ZSwgR0xpbnQgKnBhcmFtcyApICovCitzdGF0aWMgdm9pZAorYW5kcm9pZF9nbEdldG5Vbmlmb3JtaXZfX0lJSUxqYXZhX25pb19JbnRCdWZmZXJfMgorICAoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqaW50IHByb2dyYW0sIGppbnQgbG9jYXRpb24sIGppbnQgYnVmU2l6ZSwgam9iamVjdCBwYXJhbXNfYnVmKSB7CisgICAgamludCBfZXhjZXB0aW9uID0gMDsKKyAgICBjb25zdCBjaGFyICogX2V4Y2VwdGlvblR5cGUgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKiBfZXhjZXB0aW9uTWVzc2FnZSA9IE5VTEw7CisgICAgamludEFycmF5IF9hcnJheSA9IChqaW50QXJyYXkpIDA7CisgICAgamludCBfYnVmZmVyT2Zmc2V0ID0gKGppbnQpIDA7CisgICAgamludCBfcmVtYWluaW5nOworICAgIEdMaW50ICpwYXJhbXMgPSAoR0xpbnQgKikgMDsKKworICAgIHBhcmFtcyA9IChHTGludCAqKWdldFBvaW50ZXIoX2VudiwgcGFyYW1zX2J1ZiwgKGphcnJheSopJl9hcnJheSwgJl9yZW1haW5pbmcsICZfYnVmZmVyT2Zmc2V0KTsKKyAgICBpZiAoX3JlbWFpbmluZyA8IGJ1ZlNpemUpIHsKKyAgICAgICAgX2V4Y2VwdGlvbiA9IDE7CisgICAgICAgIF9leGNlcHRpb25UeXBlID0gImphdmEvbGFuZy9JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iOworICAgICAgICBfZXhjZXB0aW9uTWVzc2FnZSA9ICJyZW1haW5pbmcoKSA8IGJ1ZlNpemUgPCBuZWVkZWQiOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIGlmIChwYXJhbXMgPT0gTlVMTCkgeworICAgICAgICBjaGFyICogX3BhcmFtc0Jhc2UgPSAoY2hhciAqKV9lbnYtPkdldEludEFycmF5RWxlbWVudHMoX2FycmF5LCAoamJvb2xlYW4gKikgMCk7CisgICAgICAgIHBhcmFtcyA9IChHTGludCAqKSAoX3BhcmFtc0Jhc2UgKyBfYnVmZmVyT2Zmc2V0KTsKKyAgICB9CisgICAgZ2xHZXRuVW5pZm9ybWl2KAorICAgICAgICAoR0x1aW50KXByb2dyYW0sCisgICAgICAgIChHTGludClsb2NhdGlvbiwKKyAgICAgICAgKEdMc2l6ZWkpYnVmU2l6ZSwKKyAgICAgICAgKEdMaW50ICopcGFyYW1zCisgICAgKTsKKworZXhpdDoKKyAgICBpZiAoX2FycmF5KSB7CisgICAgICAgIF9lbnYtPlJlbGVhc2VJbnRBcnJheUVsZW1lbnRzKF9hcnJheSwgKGppbnQqKXBhcmFtcywgX2V4Y2VwdGlvbiA/IEpOSV9BQk9SVCA6IDApOworICAgIH0KKyAgICBpZiAoX2V4Y2VwdGlvbikgeworICAgICAgICBqbmlUaHJvd0V4Y2VwdGlvbihfZW52LCBfZXhjZXB0aW9uVHlwZSwgX2V4Y2VwdGlvbk1lc3NhZ2UpOworICAgIH0KK30KKworLyogdm9pZCBnbEdldG5Vbmlmb3JtdWl2ICggR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGJ1ZlNpemUsIEdMdWludCAqcGFyYW1zICkgKi8KK3N0YXRpYyB2b2lkCithbmRyb2lkX2dsR2V0blVuaWZvcm11aXZfX0lJSV8zSUkKKyAgKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamludCBwcm9ncmFtLCBqaW50IGxvY2F0aW9uLCBqaW50IGJ1ZlNpemUsIGppbnRBcnJheSBwYXJhbXNfcmVmLCBqaW50IG9mZnNldCkgeworICAgIGppbnQgX2V4Y2VwdGlvbiA9IDA7CisgICAgY29uc3QgY2hhciAqIF9leGNlcHRpb25UeXBlID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICogX2V4Y2VwdGlvbk1lc3NhZ2UgPSBOVUxMOworICAgIEdMdWludCAqcGFyYW1zX2Jhc2UgPSAoR0x1aW50ICopIDA7CisgICAgamludCBfcmVtYWluaW5nOworICAgIEdMdWludCAqcGFyYW1zID0gKEdMdWludCAqKSAwOworCisgICAgaWYgKCFwYXJhbXNfcmVmKSB7CisgICAgICAgIF9leGNlcHRpb24gPSAxOworICAgICAgICBfZXhjZXB0aW9uVHlwZSA9ICJqYXZhL2xhbmcvSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIjsKKyAgICAgICAgX2V4Y2VwdGlvbk1lc3NhZ2UgPSAicGFyYW1zID09IG51bGwiOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIGlmIChvZmZzZXQgPCAwKSB7CisgICAgICAgIF9leGNlcHRpb24gPSAxOworICAgICAgICBfZXhjZXB0aW9uVHlwZSA9ICJqYXZhL2xhbmcvSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIjsKKyAgICAgICAgX2V4Y2VwdGlvbk1lc3NhZ2UgPSAib2Zmc2V0IDwgMCI7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisgICAgX3JlbWFpbmluZyA9IF9lbnYtPkdldEFycmF5TGVuZ3RoKHBhcmFtc19yZWYpIC0gb2Zmc2V0OworICAgIGlmIChfcmVtYWluaW5nIDwgYnVmU2l6ZSkgeworICAgICAgICBfZXhjZXB0aW9uID0gMTsKKyAgICAgICAgX2V4Y2VwdGlvblR5cGUgPSAiamF2YS9sYW5nL0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiI7CisgICAgICAgIF9leGNlcHRpb25NZXNzYWdlID0gImxlbmd0aCAtIG9mZnNldCA8IGJ1ZlNpemUgPCBuZWVkZWQiOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIHBhcmFtc19iYXNlID0gKEdMdWludCAqKQorICAgICAgICBfZW52LT5HZXRJbnRBcnJheUVsZW1lbnRzKHBhcmFtc19yZWYsIChqYm9vbGVhbiAqKTApOworICAgIHBhcmFtcyA9IHBhcmFtc19iYXNlICsgb2Zmc2V0OworCisgICAgZ2xHZXRuVW5pZm9ybXVpdigKKyAgICAgICAgKEdMdWludClwcm9ncmFtLAorICAgICAgICAoR0xpbnQpbG9jYXRpb24sCisgICAgICAgIChHTHNpemVpKWJ1ZlNpemUsCisgICAgICAgIChHTHVpbnQgKilwYXJhbXMKKyAgICApOworCitleGl0OgorICAgIGlmIChwYXJhbXNfYmFzZSkgeworICAgICAgICBfZW52LT5SZWxlYXNlSW50QXJyYXlFbGVtZW50cyhwYXJhbXNfcmVmLCAoamludCopcGFyYW1zX2Jhc2UsCisgICAgICAgICAgICBfZXhjZXB0aW9uID8gSk5JX0FCT1JUOiAwKTsKKyAgICB9CisgICAgaWYgKF9leGNlcHRpb24pIHsKKyAgICAgICAgam5pVGhyb3dFeGNlcHRpb24oX2VudiwgX2V4Y2VwdGlvblR5cGUsIF9leGNlcHRpb25NZXNzYWdlKTsKKyAgICB9Cit9CisKKy8qIHZvaWQgZ2xHZXRuVW5pZm9ybXVpdiAoIEdMdWludCBwcm9ncmFtLCBHTGludCBsb2NhdGlvbiwgR0xzaXplaSBidWZTaXplLCBHTHVpbnQgKnBhcmFtcyApICovCitzdGF0aWMgdm9pZAorYW5kcm9pZF9nbEdldG5Vbmlmb3JtdWl2X19JSUlMamF2YV9uaW9fSW50QnVmZmVyXzIKKyAgKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamludCBwcm9ncmFtLCBqaW50IGxvY2F0aW9uLCBqaW50IGJ1ZlNpemUsIGpvYmplY3QgcGFyYW1zX2J1ZikgeworICAgIGppbnQgX2V4Y2VwdGlvbiA9IDA7CisgICAgY29uc3QgY2hhciAqIF9leGNlcHRpb25UeXBlID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICogX2V4Y2VwdGlvbk1lc3NhZ2UgPSBOVUxMOworICAgIGppbnRBcnJheSBfYXJyYXkgPSAoamludEFycmF5KSAwOworICAgIGppbnQgX2J1ZmZlck9mZnNldCA9IChqaW50KSAwOworICAgIGppbnQgX3JlbWFpbmluZzsKKyAgICBHTHVpbnQgKnBhcmFtcyA9IChHTHVpbnQgKikgMDsKKworICAgIHBhcmFtcyA9IChHTHVpbnQgKilnZXRQb2ludGVyKF9lbnYsIHBhcmFtc19idWYsIChqYXJyYXkqKSZfYXJyYXksICZfcmVtYWluaW5nLCAmX2J1ZmZlck9mZnNldCk7CisgICAgaWYgKF9yZW1haW5pbmcgPCBidWZTaXplKSB7CisgICAgICAgIF9leGNlcHRpb24gPSAxOworICAgICAgICBfZXhjZXB0aW9uVHlwZSA9ICJqYXZhL2xhbmcvSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIjsKKyAgICAgICAgX2V4Y2VwdGlvbk1lc3NhZ2UgPSAicmVtYWluaW5nKCkgPCBidWZTaXplIDwgbmVlZGVkIjsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICBpZiAocGFyYW1zID09IE5VTEwpIHsKKyAgICAgICAgY2hhciAqIF9wYXJhbXNCYXNlID0gKGNoYXIgKilfZW52LT5HZXRJbnRBcnJheUVsZW1lbnRzKF9hcnJheSwgKGpib29sZWFuICopIDApOworICAgICAgICBwYXJhbXMgPSAoR0x1aW50ICopIChfcGFyYW1zQmFzZSArIF9idWZmZXJPZmZzZXQpOworICAgIH0KKyAgICBnbEdldG5Vbmlmb3JtdWl2KAorICAgICAgICAoR0x1aW50KXByb2dyYW0sCisgICAgICAgIChHTGludClsb2NhdGlvbiwKKyAgICAgICAgKEdMc2l6ZWkpYnVmU2l6ZSwKKyAgICAgICAgKEdMdWludCAqKXBhcmFtcworICAgICk7CisKK2V4aXQ6CisgICAgaWYgKF9hcnJheSkgeworICAgICAgICBfZW52LT5SZWxlYXNlSW50QXJyYXlFbGVtZW50cyhfYXJyYXksIChqaW50KilwYXJhbXMsIF9leGNlcHRpb24gPyBKTklfQUJPUlQgOiAwKTsKKyAgICB9CisgICAgaWYgKF9leGNlcHRpb24pIHsKKyAgICAgICAgam5pVGhyb3dFeGNlcHRpb24oX2VudiwgX2V4Y2VwdGlvblR5cGUsIF9leGNlcHRpb25NZXNzYWdlKTsKKyAgICB9Cit9CisKKy8qIHZvaWQgZ2xNaW5TYW1wbGVTaGFkaW5nICggR0xmbG9hdCB2YWx1ZSApICovCitzdGF0aWMgdm9pZAorYW5kcm9pZF9nbE1pblNhbXBsZVNoYWRpbmdfX0YKKyAgKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamZsb2F0IHZhbHVlKSB7CisgICAgZ2xNaW5TYW1wbGVTaGFkaW5nKAorICAgICAgICAoR0xmbG9hdCl2YWx1ZQorICAgICk7Cit9CisKKy8qIHZvaWQgZ2xQYXRjaFBhcmFtZXRlcmkgKCBHTGVudW0gcG5hbWUsIEdMaW50IHZhbHVlICkgKi8KK3N0YXRpYyB2b2lkCithbmRyb2lkX2dsUGF0Y2hQYXJhbWV0ZXJpX19JSQorICAoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqaW50IHBuYW1lLCBqaW50IHZhbHVlKSB7CisgICAgZ2xQYXRjaFBhcmFtZXRlcmkoCisgICAgICAgIChHTGVudW0pcG5hbWUsCisgICAgICAgIChHTGludCl2YWx1ZQorICAgICk7Cit9CisKKy8qIHZvaWQgZ2xUZXhQYXJhbWV0ZXJJaXYgKCBHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIGNvbnN0IEdMaW50ICpwYXJhbXMgKSAqLworc3RhdGljIHZvaWQKK2FuZHJvaWRfZ2xUZXhQYXJhbWV0ZXJJaXZfX0lJXzNJSQorICAoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqaW50IHRhcmdldCwgamludCBwbmFtZSwgamludEFycmF5IHBhcmFtc19yZWYsIGppbnQgb2Zmc2V0KSB7CisgICAgamludCBfZXhjZXB0aW9uID0gMDsKKyAgICBjb25zdCBjaGFyICogX2V4Y2VwdGlvblR5cGUgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKiBfZXhjZXB0aW9uTWVzc2FnZSA9IE5VTEw7CisgICAgR0xpbnQgKnBhcmFtc19iYXNlID0gKEdMaW50ICopIDA7CisgICAgamludCBfcmVtYWluaW5nOworICAgIEdMaW50ICpwYXJhbXMgPSAoR0xpbnQgKikgMDsKKworICAgIGlmICghcGFyYW1zX3JlZikgeworICAgICAgICBfZXhjZXB0aW9uID0gMTsKKyAgICAgICAgX2V4Y2VwdGlvblR5cGUgPSAiamF2YS9sYW5nL0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiI7CisgICAgICAgIF9leGNlcHRpb25NZXNzYWdlID0gInBhcmFtcyA9PSBudWxsIjsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICBpZiAob2Zmc2V0IDwgMCkgeworICAgICAgICBfZXhjZXB0aW9uID0gMTsKKyAgICAgICAgX2V4Y2VwdGlvblR5cGUgPSAiamF2YS9sYW5nL0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiI7CisgICAgICAgIF9leGNlcHRpb25NZXNzYWdlID0gIm9mZnNldCA8IDAiOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIF9yZW1haW5pbmcgPSBfZW52LT5HZXRBcnJheUxlbmd0aChwYXJhbXNfcmVmKSAtIG9mZnNldDsKKyAgICBwYXJhbXNfYmFzZSA9IChHTGludCAqKQorICAgICAgICBfZW52LT5HZXRJbnRBcnJheUVsZW1lbnRzKHBhcmFtc19yZWYsIChqYm9vbGVhbiAqKTApOworICAgIHBhcmFtcyA9IHBhcmFtc19iYXNlICsgb2Zmc2V0OworCisgICAgZ2xUZXhQYXJhbWV0ZXJJaXYoCisgICAgICAgIChHTGVudW0pdGFyZ2V0LAorICAgICAgICAoR0xlbnVtKXBuYW1lLAorICAgICAgICAoR0xpbnQgKilwYXJhbXMKKyAgICApOworCitleGl0OgorICAgIGlmIChwYXJhbXNfYmFzZSkgeworICAgICAgICBfZW52LT5SZWxlYXNlSW50QXJyYXlFbGVtZW50cyhwYXJhbXNfcmVmLCAoamludCopcGFyYW1zX2Jhc2UsCisgICAgICAgICAgICBKTklfQUJPUlQpOworICAgIH0KKyAgICBpZiAoX2V4Y2VwdGlvbikgeworICAgICAgICBqbmlUaHJvd0V4Y2VwdGlvbihfZW52LCBfZXhjZXB0aW9uVHlwZSwgX2V4Y2VwdGlvbk1lc3NhZ2UpOworICAgIH0KK30KKworLyogdm9pZCBnbFRleFBhcmFtZXRlcklpdiAoIEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgY29uc3QgR0xpbnQgKnBhcmFtcyApICovCitzdGF0aWMgdm9pZAorYW5kcm9pZF9nbFRleFBhcmFtZXRlcklpdl9fSUlMamF2YV9uaW9fSW50QnVmZmVyXzIKKyAgKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamludCB0YXJnZXQsIGppbnQgcG5hbWUsIGpvYmplY3QgcGFyYW1zX2J1ZikgeworICAgIGppbnRBcnJheSBfYXJyYXkgPSAoamludEFycmF5KSAwOworICAgIGppbnQgX2J1ZmZlck9mZnNldCA9IChqaW50KSAwOworICAgIGppbnQgX3JlbWFpbmluZzsKKyAgICBHTGludCAqcGFyYW1zID0gKEdMaW50ICopIDA7CisKKyAgICBwYXJhbXMgPSAoR0xpbnQgKilnZXRQb2ludGVyKF9lbnYsIHBhcmFtc19idWYsIChqYXJyYXkqKSZfYXJyYXksICZfcmVtYWluaW5nLCAmX2J1ZmZlck9mZnNldCk7CisgICAgaWYgKHBhcmFtcyA9PSBOVUxMKSB7CisgICAgICAgIGNoYXIgKiBfcGFyYW1zQmFzZSA9IChjaGFyICopX2Vudi0+R2V0SW50QXJyYXlFbGVtZW50cyhfYXJyYXksIChqYm9vbGVhbiAqKSAwKTsKKyAgICAgICAgcGFyYW1zID0gKEdMaW50ICopIChfcGFyYW1zQmFzZSArIF9idWZmZXJPZmZzZXQpOworICAgIH0KKyAgICBnbFRleFBhcmFtZXRlcklpdigKKyAgICAgICAgKEdMZW51bSl0YXJnZXQsCisgICAgICAgIChHTGVudW0pcG5hbWUsCisgICAgICAgIChHTGludCAqKXBhcmFtcworICAgICk7CisgICAgaWYgKF9hcnJheSkgeworICAgICAgICBfZW52LT5SZWxlYXNlSW50QXJyYXlFbGVtZW50cyhfYXJyYXksIChqaW50KilwYXJhbXMsIEpOSV9BQk9SVCk7CisgICAgfQorfQorCisvKiB2b2lkIGdsVGV4UGFyYW1ldGVySXVpdiAoIEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgY29uc3QgR0x1aW50ICpwYXJhbXMgKSAqLworc3RhdGljIHZvaWQKK2FuZHJvaWRfZ2xUZXhQYXJhbWV0ZXJJdWl2X19JSV8zSUkKKyAgKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamludCB0YXJnZXQsIGppbnQgcG5hbWUsIGppbnRBcnJheSBwYXJhbXNfcmVmLCBqaW50IG9mZnNldCkgeworICAgIGppbnQgX2V4Y2VwdGlvbiA9IDA7CisgICAgY29uc3QgY2hhciAqIF9leGNlcHRpb25UeXBlID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICogX2V4Y2VwdGlvbk1lc3NhZ2UgPSBOVUxMOworICAgIEdMdWludCAqcGFyYW1zX2Jhc2UgPSAoR0x1aW50ICopIDA7CisgICAgamludCBfcmVtYWluaW5nOworICAgIEdMdWludCAqcGFyYW1zID0gKEdMdWludCAqKSAwOworCisgICAgaWYgKCFwYXJhbXNfcmVmKSB7CisgICAgICAgIF9leGNlcHRpb24gPSAxOworICAgICAgICBfZXhjZXB0aW9uVHlwZSA9ICJqYXZhL2xhbmcvSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIjsKKyAgICAgICAgX2V4Y2VwdGlvbk1lc3NhZ2UgPSAicGFyYW1zID09IG51bGwiOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIGlmIChvZmZzZXQgPCAwKSB7CisgICAgICAgIF9leGNlcHRpb24gPSAxOworICAgICAgICBfZXhjZXB0aW9uVHlwZSA9ICJqYXZhL2xhbmcvSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIjsKKyAgICAgICAgX2V4Y2VwdGlvbk1lc3NhZ2UgPSAib2Zmc2V0IDwgMCI7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisgICAgX3JlbWFpbmluZyA9IF9lbnYtPkdldEFycmF5TGVuZ3RoKHBhcmFtc19yZWYpIC0gb2Zmc2V0OworICAgIHBhcmFtc19iYXNlID0gKEdMdWludCAqKQorICAgICAgICBfZW52LT5HZXRJbnRBcnJheUVsZW1lbnRzKHBhcmFtc19yZWYsIChqYm9vbGVhbiAqKTApOworICAgIHBhcmFtcyA9IHBhcmFtc19iYXNlICsgb2Zmc2V0OworCisgICAgZ2xUZXhQYXJhbWV0ZXJJdWl2KAorICAgICAgICAoR0xlbnVtKXRhcmdldCwKKyAgICAgICAgKEdMZW51bSlwbmFtZSwKKyAgICAgICAgKEdMdWludCAqKXBhcmFtcworICAgICk7CisKK2V4aXQ6CisgICAgaWYgKHBhcmFtc19iYXNlKSB7CisgICAgICAgIF9lbnYtPlJlbGVhc2VJbnRBcnJheUVsZW1lbnRzKHBhcmFtc19yZWYsIChqaW50KilwYXJhbXNfYmFzZSwKKyAgICAgICAgICAgIEpOSV9BQk9SVCk7CisgICAgfQorICAgIGlmIChfZXhjZXB0aW9uKSB7CisgICAgICAgIGpuaVRocm93RXhjZXB0aW9uKF9lbnYsIF9leGNlcHRpb25UeXBlLCBfZXhjZXB0aW9uTWVzc2FnZSk7CisgICAgfQorfQorCisvKiB2b2lkIGdsVGV4UGFyYW1ldGVySXVpdiAoIEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgY29uc3QgR0x1aW50ICpwYXJhbXMgKSAqLworc3RhdGljIHZvaWQKK2FuZHJvaWRfZ2xUZXhQYXJhbWV0ZXJJdWl2X19JSUxqYXZhX25pb19JbnRCdWZmZXJfMgorICAoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqaW50IHRhcmdldCwgamludCBwbmFtZSwgam9iamVjdCBwYXJhbXNfYnVmKSB7CisgICAgamludEFycmF5IF9hcnJheSA9IChqaW50QXJyYXkpIDA7CisgICAgamludCBfYnVmZmVyT2Zmc2V0ID0gKGppbnQpIDA7CisgICAgamludCBfcmVtYWluaW5nOworICAgIEdMdWludCAqcGFyYW1zID0gKEdMdWludCAqKSAwOworCisgICAgcGFyYW1zID0gKEdMdWludCAqKWdldFBvaW50ZXIoX2VudiwgcGFyYW1zX2J1ZiwgKGphcnJheSopJl9hcnJheSwgJl9yZW1haW5pbmcsICZfYnVmZmVyT2Zmc2V0KTsKKyAgICBpZiAocGFyYW1zID09IE5VTEwpIHsKKyAgICAgICAgY2hhciAqIF9wYXJhbXNCYXNlID0gKGNoYXIgKilfZW52LT5HZXRJbnRBcnJheUVsZW1lbnRzKF9hcnJheSwgKGpib29sZWFuICopIDApOworICAgICAgICBwYXJhbXMgPSAoR0x1aW50ICopIChfcGFyYW1zQmFzZSArIF9idWZmZXJPZmZzZXQpOworICAgIH0KKyAgICBnbFRleFBhcmFtZXRlckl1aXYoCisgICAgICAgIChHTGVudW0pdGFyZ2V0LAorICAgICAgICAoR0xlbnVtKXBuYW1lLAorICAgICAgICAoR0x1aW50ICopcGFyYW1zCisgICAgKTsKKyAgICBpZiAoX2FycmF5KSB7CisgICAgICAgIF9lbnYtPlJlbGVhc2VJbnRBcnJheUVsZW1lbnRzKF9hcnJheSwgKGppbnQqKXBhcmFtcywgSk5JX0FCT1JUKTsKKyAgICB9Cit9CisKKy8qIHZvaWQgZ2xHZXRUZXhQYXJhbWV0ZXJJaXYgKCBHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMgKSAqLworc3RhdGljIHZvaWQKK2FuZHJvaWRfZ2xHZXRUZXhQYXJhbWV0ZXJJaXZfX0lJXzNJSQorICAoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqaW50IHRhcmdldCwgamludCBwbmFtZSwgamludEFycmF5IHBhcmFtc19yZWYsIGppbnQgb2Zmc2V0KSB7CisgICAgamludCBfZXhjZXB0aW9uID0gMDsKKyAgICBjb25zdCBjaGFyICogX2V4Y2VwdGlvblR5cGUgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKiBfZXhjZXB0aW9uTWVzc2FnZSA9IE5VTEw7CisgICAgR0xpbnQgKnBhcmFtc19iYXNlID0gKEdMaW50ICopIDA7CisgICAgamludCBfcmVtYWluaW5nOworICAgIEdMaW50ICpwYXJhbXMgPSAoR0xpbnQgKikgMDsKKworICAgIGlmICghcGFyYW1zX3JlZikgeworICAgICAgICBfZXhjZXB0aW9uID0gMTsKKyAgICAgICAgX2V4Y2VwdGlvblR5cGUgPSAiamF2YS9sYW5nL0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiI7CisgICAgICAgIF9leGNlcHRpb25NZXNzYWdlID0gInBhcmFtcyA9PSBudWxsIjsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICBpZiAob2Zmc2V0IDwgMCkgeworICAgICAgICBfZXhjZXB0aW9uID0gMTsKKyAgICAgICAgX2V4Y2VwdGlvblR5cGUgPSAiamF2YS9sYW5nL0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiI7CisgICAgICAgIF9leGNlcHRpb25NZXNzYWdlID0gIm9mZnNldCA8IDAiOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIF9yZW1haW5pbmcgPSBfZW52LT5HZXRBcnJheUxlbmd0aChwYXJhbXNfcmVmKSAtIG9mZnNldDsKKyAgICBwYXJhbXNfYmFzZSA9IChHTGludCAqKQorICAgICAgICBfZW52LT5HZXRJbnRBcnJheUVsZW1lbnRzKHBhcmFtc19yZWYsIChqYm9vbGVhbiAqKTApOworICAgIHBhcmFtcyA9IHBhcmFtc19iYXNlICsgb2Zmc2V0OworCisgICAgZ2xHZXRUZXhQYXJhbWV0ZXJJaXYoCisgICAgICAgIChHTGVudW0pdGFyZ2V0LAorICAgICAgICAoR0xlbnVtKXBuYW1lLAorICAgICAgICAoR0xpbnQgKilwYXJhbXMKKyAgICApOworCitleGl0OgorICAgIGlmIChwYXJhbXNfYmFzZSkgeworICAgICAgICBfZW52LT5SZWxlYXNlSW50QXJyYXlFbGVtZW50cyhwYXJhbXNfcmVmLCAoamludCopcGFyYW1zX2Jhc2UsCisgICAgICAgICAgICBfZXhjZXB0aW9uID8gSk5JX0FCT1JUOiAwKTsKKyAgICB9CisgICAgaWYgKF9leGNlcHRpb24pIHsKKyAgICAgICAgam5pVGhyb3dFeGNlcHRpb24oX2VudiwgX2V4Y2VwdGlvblR5cGUsIF9leGNlcHRpb25NZXNzYWdlKTsKKyAgICB9Cit9CisKKy8qIHZvaWQgZ2xHZXRUZXhQYXJhbWV0ZXJJaXYgKCBHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMgKSAqLworc3RhdGljIHZvaWQKK2FuZHJvaWRfZ2xHZXRUZXhQYXJhbWV0ZXJJaXZfX0lJTGphdmFfbmlvX0ludEJ1ZmZlcl8yCisgIChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGppbnQgdGFyZ2V0LCBqaW50IHBuYW1lLCBqb2JqZWN0IHBhcmFtc19idWYpIHsKKyAgICBqaW50QXJyYXkgX2FycmF5ID0gKGppbnRBcnJheSkgMDsKKyAgICBqaW50IF9idWZmZXJPZmZzZXQgPSAoamludCkgMDsKKyAgICBqaW50IF9yZW1haW5pbmc7CisgICAgR0xpbnQgKnBhcmFtcyA9IChHTGludCAqKSAwOworCisgICAgcGFyYW1zID0gKEdMaW50ICopZ2V0UG9pbnRlcihfZW52LCBwYXJhbXNfYnVmLCAoamFycmF5KikmX2FycmF5LCAmX3JlbWFpbmluZywgJl9idWZmZXJPZmZzZXQpOworICAgIGlmIChwYXJhbXMgPT0gTlVMTCkgeworICAgICAgICBjaGFyICogX3BhcmFtc0Jhc2UgPSAoY2hhciAqKV9lbnYtPkdldEludEFycmF5RWxlbWVudHMoX2FycmF5LCAoamJvb2xlYW4gKikgMCk7CisgICAgICAgIHBhcmFtcyA9IChHTGludCAqKSAoX3BhcmFtc0Jhc2UgKyBfYnVmZmVyT2Zmc2V0KTsKKyAgICB9CisgICAgZ2xHZXRUZXhQYXJhbWV0ZXJJaXYoCisgICAgICAgIChHTGVudW0pdGFyZ2V0LAorICAgICAgICAoR0xlbnVtKXBuYW1lLAorICAgICAgICAoR0xpbnQgKilwYXJhbXMKKyAgICApOworICAgIGlmIChfYXJyYXkpIHsKKyAgICAgICAgX2Vudi0+UmVsZWFzZUludEFycmF5RWxlbWVudHMoX2FycmF5LCAoamludCopcGFyYW1zLCAwKTsKKyAgICB9Cit9CisKKy8qIHZvaWQgZ2xHZXRUZXhQYXJhbWV0ZXJJdWl2ICggR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTHVpbnQgKnBhcmFtcyApICovCitzdGF0aWMgdm9pZAorYW5kcm9pZF9nbEdldFRleFBhcmFtZXRlckl1aXZfX0lJXzNJSQorICAoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqaW50IHRhcmdldCwgamludCBwbmFtZSwgamludEFycmF5IHBhcmFtc19yZWYsIGppbnQgb2Zmc2V0KSB7CisgICAgamludCBfZXhjZXB0aW9uID0gMDsKKyAgICBjb25zdCBjaGFyICogX2V4Y2VwdGlvblR5cGUgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKiBfZXhjZXB0aW9uTWVzc2FnZSA9IE5VTEw7CisgICAgR0x1aW50ICpwYXJhbXNfYmFzZSA9IChHTHVpbnQgKikgMDsKKyAgICBqaW50IF9yZW1haW5pbmc7CisgICAgR0x1aW50ICpwYXJhbXMgPSAoR0x1aW50ICopIDA7CisKKyAgICBpZiAoIXBhcmFtc19yZWYpIHsKKyAgICAgICAgX2V4Y2VwdGlvbiA9IDE7CisgICAgICAgIF9leGNlcHRpb25UeXBlID0gImphdmEvbGFuZy9JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iOworICAgICAgICBfZXhjZXB0aW9uTWVzc2FnZSA9ICJwYXJhbXMgPT0gbnVsbCI7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisgICAgaWYgKG9mZnNldCA8IDApIHsKKyAgICAgICAgX2V4Y2VwdGlvbiA9IDE7CisgICAgICAgIF9leGNlcHRpb25UeXBlID0gImphdmEvbGFuZy9JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iOworICAgICAgICBfZXhjZXB0aW9uTWVzc2FnZSA9ICJvZmZzZXQgPCAwIjsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICBfcmVtYWluaW5nID0gX2Vudi0+R2V0QXJyYXlMZW5ndGgocGFyYW1zX3JlZikgLSBvZmZzZXQ7CisgICAgcGFyYW1zX2Jhc2UgPSAoR0x1aW50ICopCisgICAgICAgIF9lbnYtPkdldEludEFycmF5RWxlbWVudHMocGFyYW1zX3JlZiwgKGpib29sZWFuICopMCk7CisgICAgcGFyYW1zID0gcGFyYW1zX2Jhc2UgKyBvZmZzZXQ7CisKKyAgICBnbEdldFRleFBhcmFtZXRlckl1aXYoCisgICAgICAgIChHTGVudW0pdGFyZ2V0LAorICAgICAgICAoR0xlbnVtKXBuYW1lLAorICAgICAgICAoR0x1aW50ICopcGFyYW1zCisgICAgKTsKKworZXhpdDoKKyAgICBpZiAocGFyYW1zX2Jhc2UpIHsKKyAgICAgICAgX2Vudi0+UmVsZWFzZUludEFycmF5RWxlbWVudHMocGFyYW1zX3JlZiwgKGppbnQqKXBhcmFtc19iYXNlLAorICAgICAgICAgICAgX2V4Y2VwdGlvbiA/IEpOSV9BQk9SVDogMCk7CisgICAgfQorICAgIGlmIChfZXhjZXB0aW9uKSB7CisgICAgICAgIGpuaVRocm93RXhjZXB0aW9uKF9lbnYsIF9leGNlcHRpb25UeXBlLCBfZXhjZXB0aW9uTWVzc2FnZSk7CisgICAgfQorfQorCisvKiB2b2lkIGdsR2V0VGV4UGFyYW1ldGVySXVpdiAoIEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0x1aW50ICpwYXJhbXMgKSAqLworc3RhdGljIHZvaWQKK2FuZHJvaWRfZ2xHZXRUZXhQYXJhbWV0ZXJJdWl2X19JSUxqYXZhX25pb19JbnRCdWZmZXJfMgorICAoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqaW50IHRhcmdldCwgamludCBwbmFtZSwgam9iamVjdCBwYXJhbXNfYnVmKSB7CisgICAgamludEFycmF5IF9hcnJheSA9IChqaW50QXJyYXkpIDA7CisgICAgamludCBfYnVmZmVyT2Zmc2V0ID0gKGppbnQpIDA7CisgICAgamludCBfcmVtYWluaW5nOworICAgIEdMdWludCAqcGFyYW1zID0gKEdMdWludCAqKSAwOworCisgICAgcGFyYW1zID0gKEdMdWludCAqKWdldFBvaW50ZXIoX2VudiwgcGFyYW1zX2J1ZiwgKGphcnJheSopJl9hcnJheSwgJl9yZW1haW5pbmcsICZfYnVmZmVyT2Zmc2V0KTsKKyAgICBpZiAocGFyYW1zID09IE5VTEwpIHsKKyAgICAgICAgY2hhciAqIF9wYXJhbXNCYXNlID0gKGNoYXIgKilfZW52LT5HZXRJbnRBcnJheUVsZW1lbnRzKF9hcnJheSwgKGpib29sZWFuICopIDApOworICAgICAgICBwYXJhbXMgPSAoR0x1aW50ICopIChfcGFyYW1zQmFzZSArIF9idWZmZXJPZmZzZXQpOworICAgIH0KKyAgICBnbEdldFRleFBhcmFtZXRlckl1aXYoCisgICAgICAgIChHTGVudW0pdGFyZ2V0LAorICAgICAgICAoR0xlbnVtKXBuYW1lLAorICAgICAgICAoR0x1aW50ICopcGFyYW1zCisgICAgKTsKKyAgICBpZiAoX2FycmF5KSB7CisgICAgICAgIF9lbnYtPlJlbGVhc2VJbnRBcnJheUVsZW1lbnRzKF9hcnJheSwgKGppbnQqKXBhcmFtcywgMCk7CisgICAgfQorfQorCisvKiB2b2lkIGdsU2FtcGxlclBhcmFtZXRlcklpdiAoIEdMdWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUsIGNvbnN0IEdMaW50ICpwYXJhbSApICovCitzdGF0aWMgdm9pZAorYW5kcm9pZF9nbFNhbXBsZXJQYXJhbWV0ZXJJaXZfX0lJXzNJSQorICAoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqaW50IHNhbXBsZXIsIGppbnQgcG5hbWUsIGppbnRBcnJheSBwYXJhbV9yZWYsIGppbnQgb2Zmc2V0KSB7CisgICAgamludCBfZXhjZXB0aW9uID0gMDsKKyAgICBjb25zdCBjaGFyICogX2V4Y2VwdGlvblR5cGUgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKiBfZXhjZXB0aW9uTWVzc2FnZSA9IE5VTEw7CisgICAgR0xpbnQgKnBhcmFtX2Jhc2UgPSAoR0xpbnQgKikgMDsKKyAgICBqaW50IF9yZW1haW5pbmc7CisgICAgR0xpbnQgKnBhcmFtID0gKEdMaW50ICopIDA7CisKKyAgICBpZiAoIXBhcmFtX3JlZikgeworICAgICAgICBfZXhjZXB0aW9uID0gMTsKKyAgICAgICAgX2V4Y2VwdGlvblR5cGUgPSAiamF2YS9sYW5nL0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiI7CisgICAgICAgIF9leGNlcHRpb25NZXNzYWdlID0gInBhcmFtID09IG51bGwiOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIGlmIChvZmZzZXQgPCAwKSB7CisgICAgICAgIF9leGNlcHRpb24gPSAxOworICAgICAgICBfZXhjZXB0aW9uVHlwZSA9ICJqYXZhL2xhbmcvSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIjsKKyAgICAgICAgX2V4Y2VwdGlvbk1lc3NhZ2UgPSAib2Zmc2V0IDwgMCI7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisgICAgX3JlbWFpbmluZyA9IF9lbnYtPkdldEFycmF5TGVuZ3RoKHBhcmFtX3JlZikgLSBvZmZzZXQ7CisgICAgcGFyYW1fYmFzZSA9IChHTGludCAqKQorICAgICAgICBfZW52LT5HZXRJbnRBcnJheUVsZW1lbnRzKHBhcmFtX3JlZiwgKGpib29sZWFuICopMCk7CisgICAgcGFyYW0gPSBwYXJhbV9iYXNlICsgb2Zmc2V0OworCisgICAgZ2xTYW1wbGVyUGFyYW1ldGVySWl2KAorICAgICAgICAoR0x1aW50KXNhbXBsZXIsCisgICAgICAgIChHTGVudW0pcG5hbWUsCisgICAgICAgIChHTGludCAqKXBhcmFtCisgICAgKTsKKworZXhpdDoKKyAgICBpZiAocGFyYW1fYmFzZSkgeworICAgICAgICBfZW52LT5SZWxlYXNlSW50QXJyYXlFbGVtZW50cyhwYXJhbV9yZWYsIChqaW50KilwYXJhbV9iYXNlLAorICAgICAgICAgICAgSk5JX0FCT1JUKTsKKyAgICB9CisgICAgaWYgKF9leGNlcHRpb24pIHsKKyAgICAgICAgam5pVGhyb3dFeGNlcHRpb24oX2VudiwgX2V4Y2VwdGlvblR5cGUsIF9leGNlcHRpb25NZXNzYWdlKTsKKyAgICB9Cit9CisKKy8qIHZvaWQgZ2xTYW1wbGVyUGFyYW1ldGVySWl2ICggR0x1aW50IHNhbXBsZXIsIEdMZW51bSBwbmFtZSwgY29uc3QgR0xpbnQgKnBhcmFtICkgKi8KK3N0YXRpYyB2b2lkCithbmRyb2lkX2dsU2FtcGxlclBhcmFtZXRlcklpdl9fSUlMamF2YV9uaW9fSW50QnVmZmVyXzIKKyAgKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamludCBzYW1wbGVyLCBqaW50IHBuYW1lLCBqb2JqZWN0IHBhcmFtX2J1ZikgeworICAgIGppbnRBcnJheSBfYXJyYXkgPSAoamludEFycmF5KSAwOworICAgIGppbnQgX2J1ZmZlck9mZnNldCA9IChqaW50KSAwOworICAgIGppbnQgX3JlbWFpbmluZzsKKyAgICBHTGludCAqcGFyYW0gPSAoR0xpbnQgKikgMDsKKworICAgIHBhcmFtID0gKEdMaW50ICopZ2V0UG9pbnRlcihfZW52LCBwYXJhbV9idWYsIChqYXJyYXkqKSZfYXJyYXksICZfcmVtYWluaW5nLCAmX2J1ZmZlck9mZnNldCk7CisgICAgaWYgKHBhcmFtID09IE5VTEwpIHsKKyAgICAgICAgY2hhciAqIF9wYXJhbUJhc2UgPSAoY2hhciAqKV9lbnYtPkdldEludEFycmF5RWxlbWVudHMoX2FycmF5LCAoamJvb2xlYW4gKikgMCk7CisgICAgICAgIHBhcmFtID0gKEdMaW50ICopIChfcGFyYW1CYXNlICsgX2J1ZmZlck9mZnNldCk7CisgICAgfQorICAgIGdsU2FtcGxlclBhcmFtZXRlcklpdigKKyAgICAgICAgKEdMdWludClzYW1wbGVyLAorICAgICAgICAoR0xlbnVtKXBuYW1lLAorICAgICAgICAoR0xpbnQgKilwYXJhbQorICAgICk7CisgICAgaWYgKF9hcnJheSkgeworICAgICAgICBfZW52LT5SZWxlYXNlSW50QXJyYXlFbGVtZW50cyhfYXJyYXksIChqaW50KilwYXJhbSwgSk5JX0FCT1JUKTsKKyAgICB9Cit9CisKKy8qIHZvaWQgZ2xTYW1wbGVyUGFyYW1ldGVySXVpdiAoIEdMdWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUsIGNvbnN0IEdMdWludCAqcGFyYW0gKSAqLworc3RhdGljIHZvaWQKK2FuZHJvaWRfZ2xTYW1wbGVyUGFyYW1ldGVySXVpdl9fSUlfM0lJCisgIChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGppbnQgc2FtcGxlciwgamludCBwbmFtZSwgamludEFycmF5IHBhcmFtX3JlZiwgamludCBvZmZzZXQpIHsKKyAgICBqaW50IF9leGNlcHRpb24gPSAwOworICAgIGNvbnN0IGNoYXIgKiBfZXhjZXB0aW9uVHlwZSA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqIF9leGNlcHRpb25NZXNzYWdlID0gTlVMTDsKKyAgICBHTHVpbnQgKnBhcmFtX2Jhc2UgPSAoR0x1aW50ICopIDA7CisgICAgamludCBfcmVtYWluaW5nOworICAgIEdMdWludCAqcGFyYW0gPSAoR0x1aW50ICopIDA7CisKKyAgICBpZiAoIXBhcmFtX3JlZikgeworICAgICAgICBfZXhjZXB0aW9uID0gMTsKKyAgICAgICAgX2V4Y2VwdGlvblR5cGUgPSAiamF2YS9sYW5nL0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiI7CisgICAgICAgIF9leGNlcHRpb25NZXNzYWdlID0gInBhcmFtID09IG51bGwiOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIGlmIChvZmZzZXQgPCAwKSB7CisgICAgICAgIF9leGNlcHRpb24gPSAxOworICAgICAgICBfZXhjZXB0aW9uVHlwZSA9ICJqYXZhL2xhbmcvSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIjsKKyAgICAgICAgX2V4Y2VwdGlvbk1lc3NhZ2UgPSAib2Zmc2V0IDwgMCI7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisgICAgX3JlbWFpbmluZyA9IF9lbnYtPkdldEFycmF5TGVuZ3RoKHBhcmFtX3JlZikgLSBvZmZzZXQ7CisgICAgcGFyYW1fYmFzZSA9IChHTHVpbnQgKikKKyAgICAgICAgX2Vudi0+R2V0SW50QXJyYXlFbGVtZW50cyhwYXJhbV9yZWYsIChqYm9vbGVhbiAqKTApOworICAgIHBhcmFtID0gcGFyYW1fYmFzZSArIG9mZnNldDsKKworICAgIGdsU2FtcGxlclBhcmFtZXRlckl1aXYoCisgICAgICAgIChHTHVpbnQpc2FtcGxlciwKKyAgICAgICAgKEdMZW51bSlwbmFtZSwKKyAgICAgICAgKEdMdWludCAqKXBhcmFtCisgICAgKTsKKworZXhpdDoKKyAgICBpZiAocGFyYW1fYmFzZSkgeworICAgICAgICBfZW52LT5SZWxlYXNlSW50QXJyYXlFbGVtZW50cyhwYXJhbV9yZWYsIChqaW50KilwYXJhbV9iYXNlLAorICAgICAgICAgICAgSk5JX0FCT1JUKTsKKyAgICB9CisgICAgaWYgKF9leGNlcHRpb24pIHsKKyAgICAgICAgam5pVGhyb3dFeGNlcHRpb24oX2VudiwgX2V4Y2VwdGlvblR5cGUsIF9leGNlcHRpb25NZXNzYWdlKTsKKyAgICB9Cit9CisKKy8qIHZvaWQgZ2xTYW1wbGVyUGFyYW1ldGVySXVpdiAoIEdMdWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUsIGNvbnN0IEdMdWludCAqcGFyYW0gKSAqLworc3RhdGljIHZvaWQKK2FuZHJvaWRfZ2xTYW1wbGVyUGFyYW1ldGVySXVpdl9fSUlMamF2YV9uaW9fSW50QnVmZmVyXzIKKyAgKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamludCBzYW1wbGVyLCBqaW50IHBuYW1lLCBqb2JqZWN0IHBhcmFtX2J1ZikgeworICAgIGppbnRBcnJheSBfYXJyYXkgPSAoamludEFycmF5KSAwOworICAgIGppbnQgX2J1ZmZlck9mZnNldCA9IChqaW50KSAwOworICAgIGppbnQgX3JlbWFpbmluZzsKKyAgICBHTHVpbnQgKnBhcmFtID0gKEdMdWludCAqKSAwOworCisgICAgcGFyYW0gPSAoR0x1aW50ICopZ2V0UG9pbnRlcihfZW52LCBwYXJhbV9idWYsIChqYXJyYXkqKSZfYXJyYXksICZfcmVtYWluaW5nLCAmX2J1ZmZlck9mZnNldCk7CisgICAgaWYgKHBhcmFtID09IE5VTEwpIHsKKyAgICAgICAgY2hhciAqIF9wYXJhbUJhc2UgPSAoY2hhciAqKV9lbnYtPkdldEludEFycmF5RWxlbWVudHMoX2FycmF5LCAoamJvb2xlYW4gKikgMCk7CisgICAgICAgIHBhcmFtID0gKEdMdWludCAqKSAoX3BhcmFtQmFzZSArIF9idWZmZXJPZmZzZXQpOworICAgIH0KKyAgICBnbFNhbXBsZXJQYXJhbWV0ZXJJdWl2KAorICAgICAgICAoR0x1aW50KXNhbXBsZXIsCisgICAgICAgIChHTGVudW0pcG5hbWUsCisgICAgICAgIChHTHVpbnQgKilwYXJhbQorICAgICk7CisgICAgaWYgKF9hcnJheSkgeworICAgICAgICBfZW52LT5SZWxlYXNlSW50QXJyYXlFbGVtZW50cyhfYXJyYXksIChqaW50KilwYXJhbSwgSk5JX0FCT1JUKTsKKyAgICB9Cit9CisKKy8qIHZvaWQgZ2xHZXRTYW1wbGVyUGFyYW1ldGVySWl2ICggR0x1aW50IHNhbXBsZXIsIEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcyApICovCitzdGF0aWMgdm9pZAorYW5kcm9pZF9nbEdldFNhbXBsZXJQYXJhbWV0ZXJJaXZfX0lJXzNJSQorICAoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqaW50IHNhbXBsZXIsIGppbnQgcG5hbWUsIGppbnRBcnJheSBwYXJhbXNfcmVmLCBqaW50IG9mZnNldCkgeworICAgIGppbnQgX2V4Y2VwdGlvbiA9IDA7CisgICAgY29uc3QgY2hhciAqIF9leGNlcHRpb25UeXBlID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICogX2V4Y2VwdGlvbk1lc3NhZ2UgPSBOVUxMOworICAgIEdMaW50ICpwYXJhbXNfYmFzZSA9IChHTGludCAqKSAwOworICAgIGppbnQgX3JlbWFpbmluZzsKKyAgICBHTGludCAqcGFyYW1zID0gKEdMaW50ICopIDA7CisKKyAgICBpZiAoIXBhcmFtc19yZWYpIHsKKyAgICAgICAgX2V4Y2VwdGlvbiA9IDE7CisgICAgICAgIF9leGNlcHRpb25UeXBlID0gImphdmEvbGFuZy9JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iOworICAgICAgICBfZXhjZXB0aW9uTWVzc2FnZSA9ICJwYXJhbXMgPT0gbnVsbCI7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisgICAgaWYgKG9mZnNldCA8IDApIHsKKyAgICAgICAgX2V4Y2VwdGlvbiA9IDE7CisgICAgICAgIF9leGNlcHRpb25UeXBlID0gImphdmEvbGFuZy9JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iOworICAgICAgICBfZXhjZXB0aW9uTWVzc2FnZSA9ICJvZmZzZXQgPCAwIjsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICBfcmVtYWluaW5nID0gX2Vudi0+R2V0QXJyYXlMZW5ndGgocGFyYW1zX3JlZikgLSBvZmZzZXQ7CisgICAgcGFyYW1zX2Jhc2UgPSAoR0xpbnQgKikKKyAgICAgICAgX2Vudi0+R2V0SW50QXJyYXlFbGVtZW50cyhwYXJhbXNfcmVmLCAoamJvb2xlYW4gKikwKTsKKyAgICBwYXJhbXMgPSBwYXJhbXNfYmFzZSArIG9mZnNldDsKKworICAgIGdsR2V0U2FtcGxlclBhcmFtZXRlcklpdigKKyAgICAgICAgKEdMdWludClzYW1wbGVyLAorICAgICAgICAoR0xlbnVtKXBuYW1lLAorICAgICAgICAoR0xpbnQgKilwYXJhbXMKKyAgICApOworCitleGl0OgorICAgIGlmIChwYXJhbXNfYmFzZSkgeworICAgICAgICBfZW52LT5SZWxlYXNlSW50QXJyYXlFbGVtZW50cyhwYXJhbXNfcmVmLCAoamludCopcGFyYW1zX2Jhc2UsCisgICAgICAgICAgICBfZXhjZXB0aW9uID8gSk5JX0FCT1JUOiAwKTsKKyAgICB9CisgICAgaWYgKF9leGNlcHRpb24pIHsKKyAgICAgICAgam5pVGhyb3dFeGNlcHRpb24oX2VudiwgX2V4Y2VwdGlvblR5cGUsIF9leGNlcHRpb25NZXNzYWdlKTsKKyAgICB9Cit9CisKKy8qIHZvaWQgZ2xHZXRTYW1wbGVyUGFyYW1ldGVySWl2ICggR0x1aW50IHNhbXBsZXIsIEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcyApICovCitzdGF0aWMgdm9pZAorYW5kcm9pZF9nbEdldFNhbXBsZXJQYXJhbWV0ZXJJaXZfX0lJTGphdmFfbmlvX0ludEJ1ZmZlcl8yCisgIChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGppbnQgc2FtcGxlciwgamludCBwbmFtZSwgam9iamVjdCBwYXJhbXNfYnVmKSB7CisgICAgamludEFycmF5IF9hcnJheSA9IChqaW50QXJyYXkpIDA7CisgICAgamludCBfYnVmZmVyT2Zmc2V0ID0gKGppbnQpIDA7CisgICAgamludCBfcmVtYWluaW5nOworICAgIEdMaW50ICpwYXJhbXMgPSAoR0xpbnQgKikgMDsKKworICAgIHBhcmFtcyA9IChHTGludCAqKWdldFBvaW50ZXIoX2VudiwgcGFyYW1zX2J1ZiwgKGphcnJheSopJl9hcnJheSwgJl9yZW1haW5pbmcsICZfYnVmZmVyT2Zmc2V0KTsKKyAgICBpZiAocGFyYW1zID09IE5VTEwpIHsKKyAgICAgICAgY2hhciAqIF9wYXJhbXNCYXNlID0gKGNoYXIgKilfZW52LT5HZXRJbnRBcnJheUVsZW1lbnRzKF9hcnJheSwgKGpib29sZWFuICopIDApOworICAgICAgICBwYXJhbXMgPSAoR0xpbnQgKikgKF9wYXJhbXNCYXNlICsgX2J1ZmZlck9mZnNldCk7CisgICAgfQorICAgIGdsR2V0U2FtcGxlclBhcmFtZXRlcklpdigKKyAgICAgICAgKEdMdWludClzYW1wbGVyLAorICAgICAgICAoR0xlbnVtKXBuYW1lLAorICAgICAgICAoR0xpbnQgKilwYXJhbXMKKyAgICApOworICAgIGlmIChfYXJyYXkpIHsKKyAgICAgICAgX2Vudi0+UmVsZWFzZUludEFycmF5RWxlbWVudHMoX2FycmF5LCAoamludCopcGFyYW1zLCAwKTsKKyAgICB9Cit9CisKKy8qIHZvaWQgZ2xHZXRTYW1wbGVyUGFyYW1ldGVySXVpdiAoIEdMdWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUsIEdMdWludCAqcGFyYW1zICkgKi8KK3N0YXRpYyB2b2lkCithbmRyb2lkX2dsR2V0U2FtcGxlclBhcmFtZXRlckl1aXZfX0lJXzNJSQorICAoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqaW50IHNhbXBsZXIsIGppbnQgcG5hbWUsIGppbnRBcnJheSBwYXJhbXNfcmVmLCBqaW50IG9mZnNldCkgeworICAgIGppbnQgX2V4Y2VwdGlvbiA9IDA7CisgICAgY29uc3QgY2hhciAqIF9leGNlcHRpb25UeXBlID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICogX2V4Y2VwdGlvbk1lc3NhZ2UgPSBOVUxMOworICAgIEdMdWludCAqcGFyYW1zX2Jhc2UgPSAoR0x1aW50ICopIDA7CisgICAgamludCBfcmVtYWluaW5nOworICAgIEdMdWludCAqcGFyYW1zID0gKEdMdWludCAqKSAwOworCisgICAgaWYgKCFwYXJhbXNfcmVmKSB7CisgICAgICAgIF9leGNlcHRpb24gPSAxOworICAgICAgICBfZXhjZXB0aW9uVHlwZSA9ICJqYXZhL2xhbmcvSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIjsKKyAgICAgICAgX2V4Y2VwdGlvbk1lc3NhZ2UgPSAicGFyYW1zID09IG51bGwiOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIGlmIChvZmZzZXQgPCAwKSB7CisgICAgICAgIF9leGNlcHRpb24gPSAxOworICAgICAgICBfZXhjZXB0aW9uVHlwZSA9ICJqYXZhL2xhbmcvSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIjsKKyAgICAgICAgX2V4Y2VwdGlvbk1lc3NhZ2UgPSAib2Zmc2V0IDwgMCI7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisgICAgX3JlbWFpbmluZyA9IF9lbnYtPkdldEFycmF5TGVuZ3RoKHBhcmFtc19yZWYpIC0gb2Zmc2V0OworICAgIHBhcmFtc19iYXNlID0gKEdMdWludCAqKQorICAgICAgICBfZW52LT5HZXRJbnRBcnJheUVsZW1lbnRzKHBhcmFtc19yZWYsIChqYm9vbGVhbiAqKTApOworICAgIHBhcmFtcyA9IHBhcmFtc19iYXNlICsgb2Zmc2V0OworCisgICAgZ2xHZXRTYW1wbGVyUGFyYW1ldGVySXVpdigKKyAgICAgICAgKEdMdWludClzYW1wbGVyLAorICAgICAgICAoR0xlbnVtKXBuYW1lLAorICAgICAgICAoR0x1aW50ICopcGFyYW1zCisgICAgKTsKKworZXhpdDoKKyAgICBpZiAocGFyYW1zX2Jhc2UpIHsKKyAgICAgICAgX2Vudi0+UmVsZWFzZUludEFycmF5RWxlbWVudHMocGFyYW1zX3JlZiwgKGppbnQqKXBhcmFtc19iYXNlLAorICAgICAgICAgICAgX2V4Y2VwdGlvbiA/IEpOSV9BQk9SVDogMCk7CisgICAgfQorICAgIGlmIChfZXhjZXB0aW9uKSB7CisgICAgICAgIGpuaVRocm93RXhjZXB0aW9uKF9lbnYsIF9leGNlcHRpb25UeXBlLCBfZXhjZXB0aW9uTWVzc2FnZSk7CisgICAgfQorfQorCisvKiB2b2lkIGdsR2V0U2FtcGxlclBhcmFtZXRlckl1aXYgKCBHTHVpbnQgc2FtcGxlciwgR0xlbnVtIHBuYW1lLCBHTHVpbnQgKnBhcmFtcyApICovCitzdGF0aWMgdm9pZAorYW5kcm9pZF9nbEdldFNhbXBsZXJQYXJhbWV0ZXJJdWl2X19JSUxqYXZhX25pb19JbnRCdWZmZXJfMgorICAoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqaW50IHNhbXBsZXIsIGppbnQgcG5hbWUsIGpvYmplY3QgcGFyYW1zX2J1ZikgeworICAgIGppbnRBcnJheSBfYXJyYXkgPSAoamludEFycmF5KSAwOworICAgIGppbnQgX2J1ZmZlck9mZnNldCA9IChqaW50KSAwOworICAgIGppbnQgX3JlbWFpbmluZzsKKyAgICBHTHVpbnQgKnBhcmFtcyA9IChHTHVpbnQgKikgMDsKKworICAgIHBhcmFtcyA9IChHTHVpbnQgKilnZXRQb2ludGVyKF9lbnYsIHBhcmFtc19idWYsIChqYXJyYXkqKSZfYXJyYXksICZfcmVtYWluaW5nLCAmX2J1ZmZlck9mZnNldCk7CisgICAgaWYgKHBhcmFtcyA9PSBOVUxMKSB7CisgICAgICAgIGNoYXIgKiBfcGFyYW1zQmFzZSA9IChjaGFyICopX2Vudi0+R2V0SW50QXJyYXlFbGVtZW50cyhfYXJyYXksIChqYm9vbGVhbiAqKSAwKTsKKyAgICAgICAgcGFyYW1zID0gKEdMdWludCAqKSAoX3BhcmFtc0Jhc2UgKyBfYnVmZmVyT2Zmc2V0KTsKKyAgICB9CisgICAgZ2xHZXRTYW1wbGVyUGFyYW1ldGVySXVpdigKKyAgICAgICAgKEdMdWludClzYW1wbGVyLAorICAgICAgICAoR0xlbnVtKXBuYW1lLAorICAgICAgICAoR0x1aW50ICopcGFyYW1zCisgICAgKTsKKyAgICBpZiAoX2FycmF5KSB7CisgICAgICAgIF9lbnYtPlJlbGVhc2VJbnRBcnJheUVsZW1lbnRzKF9hcnJheSwgKGppbnQqKXBhcmFtcywgMCk7CisgICAgfQorfQorCisvKiB2b2lkIGdsVGV4QnVmZmVyICggR0xlbnVtIHRhcmdldCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHVpbnQgYnVmZmVyICkgKi8KK3N0YXRpYyB2b2lkCithbmRyb2lkX2dsVGV4QnVmZmVyX19JSUkKKyAgKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamludCB0YXJnZXQsIGppbnQgaW50ZXJuYWxmb3JtYXQsIGppbnQgYnVmZmVyKSB7CisgICAgZ2xUZXhCdWZmZXIoCisgICAgICAgIChHTGVudW0pdGFyZ2V0LAorICAgICAgICAoR0xlbnVtKWludGVybmFsZm9ybWF0LAorICAgICAgICAoR0x1aW50KWJ1ZmZlcgorICAgICk7Cit9CisKKy8qIHZvaWQgZ2xUZXhCdWZmZXJSYW5nZSAoIEdMZW51bSB0YXJnZXQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0x1aW50IGJ1ZmZlciwgR0xpbnRwdHIgb2Zmc2V0LCBHTHNpemVpcHRyIHNpemUgKSAqLworc3RhdGljIHZvaWQKK2FuZHJvaWRfZ2xUZXhCdWZmZXJSYW5nZV9fSUlJSUkKKyAgKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamludCB0YXJnZXQsIGppbnQgaW50ZXJuYWxmb3JtYXQsIGppbnQgYnVmZmVyLCBqaW50IG9mZnNldCwgamludCBzaXplKSB7CisgICAgZ2xUZXhCdWZmZXJSYW5nZSgKKyAgICAgICAgKEdMZW51bSl0YXJnZXQsCisgICAgICAgIChHTGVudW0paW50ZXJuYWxmb3JtYXQsCisgICAgICAgIChHTHVpbnQpYnVmZmVyLAorICAgICAgICAoR0xpbnRwdHIpb2Zmc2V0LAorICAgICAgICAoR0xzaXplaXB0cilzaXplCisgICAgKTsKK30KKworLyogdm9pZCBnbFRleFN0b3JhZ2UzRE11bHRpc2FtcGxlICggR0xlbnVtIHRhcmdldCwgR0xzaXplaSBzYW1wbGVzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGJvb2xlYW4gZml4ZWRzYW1wbGVsb2NhdGlvbnMgKSAqLworc3RhdGljIHZvaWQKK2FuZHJvaWRfZ2xUZXhTdG9yYWdlM0RNdWx0aXNhbXBsZV9fSUlJSUlJWgorICAoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqaW50IHRhcmdldCwgamludCBzYW1wbGVzLCBqaW50IGludGVybmFsZm9ybWF0LCBqaW50IHdpZHRoLCBqaW50IGhlaWdodCwgamludCBkZXB0aCwgamJvb2xlYW4gZml4ZWRzYW1wbGVsb2NhdGlvbnMpIHsKKyAgICBnbFRleFN0b3JhZ2UzRE11bHRpc2FtcGxlKAorICAgICAgICAoR0xlbnVtKXRhcmdldCwKKyAgICAgICAgKEdMc2l6ZWkpc2FtcGxlcywKKyAgICAgICAgKEdMZW51bSlpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgKEdMc2l6ZWkpd2lkdGgsCisgICAgICAgIChHTHNpemVpKWhlaWdodCwKKyAgICAgICAgKEdMc2l6ZWkpZGVwdGgsCisgICAgICAgIChHTGJvb2xlYW4pZml4ZWRzYW1wbGVsb2NhdGlvbnMKKyAgICApOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqY2xhc3NQYXRoTmFtZSA9ICJhbmRyb2lkL29wZW5nbC9HTEVTMzIiOworCitzdGF0aWMgY29uc3QgSk5JTmF0aXZlTWV0aG9kIG1ldGhvZHNbXSA9IHsKK3siX25hdGl2ZUNsYXNzSW5pdCIsICIoKVYiLCAodm9pZCopbmF0aXZlQ2xhc3NJbml0IH0sCit7ImdsQmxlbmRCYXJyaWVyIiwgIigpViIsICh2b2lkICopIGFuZHJvaWRfZ2xCbGVuZEJhcnJpZXJfXyB9LAoreyJnbENvcHlJbWFnZVN1YkRhdGEiLCAiKElJSUlJSUlJSUlJSUlJSSlWIiwgKHZvaWQgKikgYW5kcm9pZF9nbENvcHlJbWFnZVN1YkRhdGFfX0lJSUlJSUlJSUlJSUlJSSB9LAoreyJnbERlYnVnTWVzc2FnZUNvbnRyb2wiLCAiKElJSUlbSUlaKVYiLCAodm9pZCAqKSBhbmRyb2lkX2dsRGVidWdNZXNzYWdlQ29udHJvbF9fSUlJSV8zSUlaIH0sCit7ImdsRGVidWdNZXNzYWdlQ29udHJvbCIsICIoSUlJSUxqYXZhL25pby9JbnRCdWZmZXI7WilWIiwgKHZvaWQgKikgYW5kcm9pZF9nbERlYnVnTWVzc2FnZUNvbnRyb2xfX0lJSUlMamF2YV9uaW9fSW50QnVmZmVyXzJaIH0sCit7ImdsRGVidWdNZXNzYWdlSW5zZXJ0IiwgIihJSUlJSUxqYXZhL2xhbmcvU3RyaW5nOylWIiwgKHZvaWQgKikgYW5kcm9pZF9nbERlYnVnTWVzc2FnZUluc2VydF9fSUlJSUlMamF2YV9sYW5nX1N0cmluZ18yIH0sCit7ImdsRGVidWdNZXNzYWdlQ2FsbGJhY2siLCAiKExhbmRyb2lkL29wZW5nbC9HTEVTMzIkRGVidWdQcm9jOylWIiwgKHZvaWQgKikgYW5kcm9pZF9nbERlYnVnTWVzc2FnZUNhbGxiYWNrIH0sCit7ImdsR2V0RGVidWdNZXNzYWdlTG9nIiwgIihJSVtJSVtJSVtJSVtJSVtJSVtCSSlJIiwgKHZvaWQgKikgYW5kcm9pZF9nbEdldERlYnVnTWVzc2FnZUxvZ19fSUlfM0lJXzNJSV8zSUlfM0lJXzNJSV8zQkkgfSwKK3siZ2xHZXREZWJ1Z01lc3NhZ2VMb2ciLCAiKElMamF2YS9uaW8vSW50QnVmZmVyO0xqYXZhL25pby9JbnRCdWZmZXI7TGphdmEvbmlvL0ludEJ1ZmZlcjtMamF2YS9uaW8vSW50QnVmZmVyO0xqYXZhL25pby9JbnRCdWZmZXI7TGphdmEvbmlvL0J5dGVCdWZmZXI7KUkiLCAodm9pZCAqKSBhbmRyb2lkX2dsR2V0RGVidWdNZXNzYWdlTG9nX19JTGphdmFfbmlvX0ludEJ1ZmZlcl8yTGphdmFfbmlvX0ludEJ1ZmZlcl8yTGphdmFfbmlvX0ludEJ1ZmZlcl8yTGphdmFfbmlvX0ludEJ1ZmZlcl8yTGphdmFfbmlvX0ludEJ1ZmZlcl8yTGphdmFfbmlvX0J5dGVCdWZmZXJfMiB9LAoreyJnbEdldERlYnVnTWVzc2FnZUxvZyIsICIoSVtJSVtJSVtJSVtJSSlbTGphdmEvbGFuZy9TdHJpbmc7IiwgKHZvaWQgKikgYW5kcm9pZF9nbEdldERlYnVnTWVzc2FnZUxvZ19fSV8zSUlfM0lJXzNJSV8zSUkgfSwKK3siZ2xHZXREZWJ1Z01lc3NhZ2VMb2ciLCAiKElMamF2YS9uaW8vSW50QnVmZmVyO0xqYXZhL25pby9JbnRCdWZmZXI7TGphdmEvbmlvL0ludEJ1ZmZlcjtMamF2YS9uaW8vSW50QnVmZmVyOylbTGphdmEvbGFuZy9TdHJpbmc7IiwgKHZvaWQgKikgYW5kcm9pZF9nbEdldERlYnVnTWVzc2FnZUxvZ19fSUxqYXZhX25pb19JbnRCdWZmZXJfMkxqYXZhX25pb19JbnRCdWZmZXJfMkxqYXZhX25pb19JbnRCdWZmZXJfMkxqYXZhX25pb19JbnRCdWZmZXJfMiB9LAoreyJnbFB1c2hEZWJ1Z0dyb3VwIiwgIihJSUlMamF2YS9sYW5nL1N0cmluZzspViIsICh2b2lkICopIGFuZHJvaWRfZ2xQdXNoRGVidWdHcm91cF9fSUlJTGphdmFfbGFuZ19TdHJpbmdfMiB9LAoreyJnbFBvcERlYnVnR3JvdXAiLCAiKClWIiwgKHZvaWQgKikgYW5kcm9pZF9nbFBvcERlYnVnR3JvdXBfXyB9LAoreyJnbE9iamVjdExhYmVsIiwgIihJSUlMamF2YS9sYW5nL1N0cmluZzspViIsICh2b2lkICopIGFuZHJvaWRfZ2xPYmplY3RMYWJlbF9fSUlJTGphdmFfbGFuZ19TdHJpbmdfMiB9LAoreyJnbEdldE9iamVjdExhYmVsIiwgIihJSSlMamF2YS9sYW5nL1N0cmluZzsiLCAodm9pZCAqKSBhbmRyb2lkX2dsR2V0T2JqZWN0TGFiZWwgfSwKK3siZ2xPYmplY3RQdHJMYWJlbCIsICIoSkxqYXZhL2xhbmcvU3RyaW5nOylWIiwgKHZvaWQgKikgYW5kcm9pZF9nbE9iamVjdFB0ckxhYmVsIH0sCit7ImdsR2V0T2JqZWN0UHRyTGFiZWwiLCAiKEopTGphdmEvbGFuZy9TdHJpbmc7IiwgKHZvaWQgKikgYW5kcm9pZF9nbEdldE9iamVjdFB0ckxhYmVsIH0sCit7ImdsR2V0UG9pbnRlcnYiLCAiKEkpSiIsICh2b2lkICopIGFuZHJvaWRfZ2xHZXRQb2ludGVydiB9LAoreyJnbEVuYWJsZWkiLCAiKElJKVYiLCAodm9pZCAqKSBhbmRyb2lkX2dsRW5hYmxlaV9fSUkgfSwKK3siZ2xEaXNhYmxlaSIsICIoSUkpViIsICh2b2lkICopIGFuZHJvaWRfZ2xEaXNhYmxlaV9fSUkgfSwKK3siZ2xCbGVuZEVxdWF0aW9uaSIsICIoSUkpViIsICh2b2lkICopIGFuZHJvaWRfZ2xCbGVuZEVxdWF0aW9uaV9fSUkgfSwKK3siZ2xCbGVuZEVxdWF0aW9uU2VwYXJhdGVpIiwgIihJSUkpViIsICh2b2lkICopIGFuZHJvaWRfZ2xCbGVuZEVxdWF0aW9uU2VwYXJhdGVpX19JSUkgfSwKK3siZ2xCbGVuZEZ1bmNpIiwgIihJSUkpViIsICh2b2lkICopIGFuZHJvaWRfZ2xCbGVuZEZ1bmNpX19JSUkgfSwKK3siZ2xCbGVuZEZ1bmNTZXBhcmF0ZWkiLCAiKElJSUlJKVYiLCAodm9pZCAqKSBhbmRyb2lkX2dsQmxlbmRGdW5jU2VwYXJhdGVpX19JSUlJSSB9LAoreyJnbENvbG9yTWFza2kiLCAiKElaWlpaKVYiLCAodm9pZCAqKSBhbmRyb2lkX2dsQ29sb3JNYXNraV9fSVpaWlogfSwKK3siZ2xJc0VuYWJsZWRpIiwgIihJSSlaIiwgKHZvaWQgKikgYW5kcm9pZF9nbElzRW5hYmxlZGlfX0lJIH0sCit7ImdsRHJhd0VsZW1lbnRzQmFzZVZlcnRleCIsICIoSUlJTGphdmEvbmlvL0J1ZmZlcjtJKVYiLCAodm9pZCAqKSBhbmRyb2lkX2dsRHJhd0VsZW1lbnRzQmFzZVZlcnRleF9fSUlJTGphdmFfbmlvX0J1ZmZlcl8ySSB9LAoreyJnbERyYXdSYW5nZUVsZW1lbnRzQmFzZVZlcnRleCIsICIoSUlJSUlMamF2YS9uaW8vQnVmZmVyO0kpViIsICh2b2lkICopIGFuZHJvaWRfZ2xEcmF3UmFuZ2VFbGVtZW50c0Jhc2VWZXJ0ZXhfX0lJSUlJTGphdmFfbmlvX0J1ZmZlcl8ySSB9LAoreyJnbERyYXdFbGVtZW50c0luc3RhbmNlZEJhc2VWZXJ0ZXgiLCAiKElJSUxqYXZhL25pby9CdWZmZXI7SUkpViIsICh2b2lkICopIGFuZHJvaWRfZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWRCYXNlVmVydGV4X19JSUlMamF2YV9uaW9fQnVmZmVyXzJJSSB9LAoreyJnbERyYXdFbGVtZW50c0luc3RhbmNlZEJhc2VWZXJ0ZXgiLCAiKElJSUlJSSlWIiwgKHZvaWQgKikgYW5kcm9pZF9nbERyYXdFbGVtZW50c0luc3RhbmNlZEJhc2VWZXJ0ZXhfX0lJSUlJSSB9LAoreyJnbEZyYW1lYnVmZmVyVGV4dHVyZSIsICIoSUlJSSlWIiwgKHZvaWQgKikgYW5kcm9pZF9nbEZyYW1lYnVmZmVyVGV4dHVyZV9fSUlJSSB9LAoreyJnbFByaW1pdGl2ZUJvdW5kaW5nQm94IiwgIihGRkZGRkZGRilWIiwgKHZvaWQgKikgYW5kcm9pZF9nbFByaW1pdGl2ZUJvdW5kaW5nQm94X19GRkZGRkZGRiB9LAoreyJnbEdldEdyYXBoaWNzUmVzZXRTdGF0dXMiLCAiKClJIiwgKHZvaWQgKikgYW5kcm9pZF9nbEdldEdyYXBoaWNzUmVzZXRTdGF0dXNfXyB9LAoreyJnbFJlYWRuUGl4ZWxzIiwgIihJSUlJSUlJTGphdmEvbmlvL0J1ZmZlcjspViIsICh2b2lkICopIGFuZHJvaWRfZ2xSZWFkblBpeGVsc19fSUlJSUlJSUxqYXZhX25pb19CdWZmZXJfMiB9LAoreyJnbEdldG5Vbmlmb3JtZnYiLCAiKElJSVtGSSlWIiwgKHZvaWQgKikgYW5kcm9pZF9nbEdldG5Vbmlmb3JtZnZfX0lJSV8zRkkgfSwKK3siZ2xHZXRuVW5pZm9ybWZ2IiwgIihJSUlMamF2YS9uaW8vRmxvYXRCdWZmZXI7KVYiLCAodm9pZCAqKSBhbmRyb2lkX2dsR2V0blVuaWZvcm1mdl9fSUlJTGphdmFfbmlvX0Zsb2F0QnVmZmVyXzIgfSwKK3siZ2xHZXRuVW5pZm9ybWl2IiwgIihJSUlbSUkpViIsICh2b2lkICopIGFuZHJvaWRfZ2xHZXRuVW5pZm9ybWl2X19JSUlfM0lJIH0sCit7ImdsR2V0blVuaWZvcm1pdiIsICIoSUlJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIsICh2b2lkICopIGFuZHJvaWRfZ2xHZXRuVW5pZm9ybWl2X19JSUlMamF2YV9uaW9fSW50QnVmZmVyXzIgfSwKK3siZ2xHZXRuVW5pZm9ybXVpdiIsICIoSUlJW0lJKVYiLCAodm9pZCAqKSBhbmRyb2lkX2dsR2V0blVuaWZvcm11aXZfX0lJSV8zSUkgfSwKK3siZ2xHZXRuVW5pZm9ybXVpdiIsICIoSUlJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIsICh2b2lkICopIGFuZHJvaWRfZ2xHZXRuVW5pZm9ybXVpdl9fSUlJTGphdmFfbmlvX0ludEJ1ZmZlcl8yIH0sCit7ImdsTWluU2FtcGxlU2hhZGluZyIsICIoRilWIiwgKHZvaWQgKikgYW5kcm9pZF9nbE1pblNhbXBsZVNoYWRpbmdfX0YgfSwKK3siZ2xQYXRjaFBhcmFtZXRlcmkiLCAiKElJKVYiLCAodm9pZCAqKSBhbmRyb2lkX2dsUGF0Y2hQYXJhbWV0ZXJpX19JSSB9LAoreyJnbFRleFBhcmFtZXRlcklpdiIsICIoSUlbSUkpViIsICh2b2lkICopIGFuZHJvaWRfZ2xUZXhQYXJhbWV0ZXJJaXZfX0lJXzNJSSB9LAoreyJnbFRleFBhcmFtZXRlcklpdiIsICIoSUlMamF2YS9uaW8vSW50QnVmZmVyOylWIiwgKHZvaWQgKikgYW5kcm9pZF9nbFRleFBhcmFtZXRlcklpdl9fSUlMamF2YV9uaW9fSW50QnVmZmVyXzIgfSwKK3siZ2xUZXhQYXJhbWV0ZXJJdWl2IiwgIihJSVtJSSlWIiwgKHZvaWQgKikgYW5kcm9pZF9nbFRleFBhcmFtZXRlckl1aXZfX0lJXzNJSSB9LAoreyJnbFRleFBhcmFtZXRlckl1aXYiLCAiKElJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIsICh2b2lkICopIGFuZHJvaWRfZ2xUZXhQYXJhbWV0ZXJJdWl2X19JSUxqYXZhX25pb19JbnRCdWZmZXJfMiB9LAoreyJnbEdldFRleFBhcmFtZXRlcklpdiIsICIoSUlbSUkpViIsICh2b2lkICopIGFuZHJvaWRfZ2xHZXRUZXhQYXJhbWV0ZXJJaXZfX0lJXzNJSSB9LAoreyJnbEdldFRleFBhcmFtZXRlcklpdiIsICIoSUlMamF2YS9uaW8vSW50QnVmZmVyOylWIiwgKHZvaWQgKikgYW5kcm9pZF9nbEdldFRleFBhcmFtZXRlcklpdl9fSUlMamF2YV9uaW9fSW50QnVmZmVyXzIgfSwKK3siZ2xHZXRUZXhQYXJhbWV0ZXJJdWl2IiwgIihJSVtJSSlWIiwgKHZvaWQgKikgYW5kcm9pZF9nbEdldFRleFBhcmFtZXRlckl1aXZfX0lJXzNJSSB9LAoreyJnbEdldFRleFBhcmFtZXRlckl1aXYiLCAiKElJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIsICh2b2lkICopIGFuZHJvaWRfZ2xHZXRUZXhQYXJhbWV0ZXJJdWl2X19JSUxqYXZhX25pb19JbnRCdWZmZXJfMiB9LAoreyJnbFNhbXBsZXJQYXJhbWV0ZXJJaXYiLCAiKElJW0lJKVYiLCAodm9pZCAqKSBhbmRyb2lkX2dsU2FtcGxlclBhcmFtZXRlcklpdl9fSUlfM0lJIH0sCit7ImdsU2FtcGxlclBhcmFtZXRlcklpdiIsICIoSUlMamF2YS9uaW8vSW50QnVmZmVyOylWIiwgKHZvaWQgKikgYW5kcm9pZF9nbFNhbXBsZXJQYXJhbWV0ZXJJaXZfX0lJTGphdmFfbmlvX0ludEJ1ZmZlcl8yIH0sCit7ImdsU2FtcGxlclBhcmFtZXRlckl1aXYiLCAiKElJW0lJKVYiLCAodm9pZCAqKSBhbmRyb2lkX2dsU2FtcGxlclBhcmFtZXRlckl1aXZfX0lJXzNJSSB9LAoreyJnbFNhbXBsZXJQYXJhbWV0ZXJJdWl2IiwgIihJSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLCAodm9pZCAqKSBhbmRyb2lkX2dsU2FtcGxlclBhcmFtZXRlckl1aXZfX0lJTGphdmFfbmlvX0ludEJ1ZmZlcl8yIH0sCit7ImdsR2V0U2FtcGxlclBhcmFtZXRlcklpdiIsICIoSUlbSUkpViIsICh2b2lkICopIGFuZHJvaWRfZ2xHZXRTYW1wbGVyUGFyYW1ldGVySWl2X19JSV8zSUkgfSwKK3siZ2xHZXRTYW1wbGVyUGFyYW1ldGVySWl2IiwgIihJSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLCAodm9pZCAqKSBhbmRyb2lkX2dsR2V0U2FtcGxlclBhcmFtZXRlcklpdl9fSUlMamF2YV9uaW9fSW50QnVmZmVyXzIgfSwKK3siZ2xHZXRTYW1wbGVyUGFyYW1ldGVySXVpdiIsICIoSUlbSUkpViIsICh2b2lkICopIGFuZHJvaWRfZ2xHZXRTYW1wbGVyUGFyYW1ldGVySXVpdl9fSUlfM0lJIH0sCit7ImdsR2V0U2FtcGxlclBhcmFtZXRlckl1aXYiLCAiKElJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIsICh2b2lkICopIGFuZHJvaWRfZ2xHZXRTYW1wbGVyUGFyYW1ldGVySXVpdl9fSUlMamF2YV9uaW9fSW50QnVmZmVyXzIgfSwKK3siZ2xUZXhCdWZmZXIiLCAiKElJSSlWIiwgKHZvaWQgKikgYW5kcm9pZF9nbFRleEJ1ZmZlcl9fSUlJIH0sCit7ImdsVGV4QnVmZmVyUmFuZ2UiLCAiKElJSUlJKVYiLCAodm9pZCAqKSBhbmRyb2lkX2dsVGV4QnVmZmVyUmFuZ2VfX0lJSUlJIH0sCit7ImdsVGV4U3RvcmFnZTNETXVsdGlzYW1wbGUiLCAiKElJSUlJSVopViIsICh2b2lkICopIGFuZHJvaWRfZ2xUZXhTdG9yYWdlM0RNdWx0aXNhbXBsZV9fSUlJSUlJWiB9LAorfTsKKworaW50IHJlZ2lzdGVyX2FuZHJvaWRfb3BlbmdsX2puaV9HTEVTMzIoSk5JRW52ICpfZW52KQoreworICAgIGludCBlcnI7CisgICAgZXJyID0gYW5kcm9pZDo6QW5kcm9pZFJ1bnRpbWU6OnJlZ2lzdGVyTmF0aXZlTWV0aG9kcyhfZW52LCBjbGFzc1BhdGhOYW1lLCBtZXRob2RzLCBORUxFTShtZXRob2RzKSk7CisgICAgcmV0dXJuIGVycjsKK30KZGlmZiAtLWdpdCBhL2NvcmUvam5pL2FuZHJvaWRfdXRpbF9Bc3NldE1hbmFnZXIuY3BwIGIvY29yZS9qbmkvYW5kcm9pZF91dGlsX0Fzc2V0TWFuYWdlci5jcHAKaW5kZXggOTA2MDZhMzUuLjM0NzNkOWQgMTAwNjQ0Ci0tLSBhL2NvcmUvam5pL2FuZHJvaWRfdXRpbF9Bc3NldE1hbmFnZXIuY3BwCisrKyBiL2NvcmUvam5pL2FuZHJvaWRfdXRpbF9Bc3NldE1hbmFnZXIuY3BwCkBAIC01NzgsNyArNTc4LDcgQEAKICAgICByZXR1cm4gYW0tPmlzVXBUb0RhdGUoKSA/IEpOSV9UUlVFIDogSk5JX0ZBTFNFOwogfQogCi1zdGF0aWMgam9iamVjdEFycmF5IGFuZHJvaWRfY29udGVudF9Bc3NldE1hbmFnZXJfZ2V0TG9jYWxlcyhKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eikKK3N0YXRpYyBqb2JqZWN0QXJyYXkgZ2V0TG9jYWxlcyhKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eiwgYm9vbCBpbmNsdWRlU3lzdGVtTG9jYWxlcykKIHsKICAgICBWZWN0b3I8U3RyaW5nOD4gbG9jYWxlczsKIApAQCAtNTg3LDcgKzU4Nyw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGFtLT5nZXRMb2NhbGVzKCZsb2NhbGVzKTsKKyAgICBhbS0+Z2V0TG9jYWxlcygmbG9jYWxlcywgaW5jbHVkZVN5c3RlbUxvY2FsZXMpOwogCiAgICAgY29uc3QgaW50IE4gPSBsb2NhbGVzLnNpemUoKTsKIApAQCAtNjA4LDYgKzYwOCwxNiBAQAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3N0YXRpYyBqb2JqZWN0QXJyYXkgYW5kcm9pZF9jb250ZW50X0Fzc2V0TWFuYWdlcl9nZXRMb2NhbGVzKEpOSUVudiogZW52LCBqb2JqZWN0IGNsYXp6KQoreworICAgIHJldHVybiBnZXRMb2NhbGVzKGVudiwgY2xhenosIHRydWUgLyogaW5jbHVkZSBzeXN0ZW0gbG9jYWxlcyAqLyk7Cit9CisKK3N0YXRpYyBqb2JqZWN0QXJyYXkgYW5kcm9pZF9jb250ZW50X0Fzc2V0TWFuYWdlcl9nZXROb25TeXN0ZW1Mb2NhbGVzKEpOSUVudiogZW52LCBqb2JqZWN0IGNsYXp6KQoreworICAgIHJldHVybiBnZXRMb2NhbGVzKGVudiwgY2xhenosIGZhbHNlIC8qIGRvbid0IGluY2x1ZGUgc3lzdGVtIGxvY2FsZXMgKi8pOworfQorCiBzdGF0aWMgam9iamVjdCBjb25zdHJ1Y3RDb25maWd1cmF0aW9uT2JqZWN0KEpOSUVudiogZW52LCBjb25zdCBSZXNUYWJsZV9jb25maWcmIGNvbmZpZykgewogICAgIGpvYmplY3QgcmVzdWx0ID0gZW52LT5OZXdPYmplY3QoZ0NvbmZpZ3VyYXRpb25PZmZzZXRzLmNsYXNzT2JqZWN0LAogICAgICAgICAgICAgZ0NvbmZpZ3VyYXRpb25PZmZzZXRzLmNvbnN0cnVjdG9yKTsKQEAgLTIxNTQsNiArMjE2NCw4IEBACiAgICAgLy8gUmVzb3VyY2VzLgogICAgIHsgImdldExvY2FsZXMiLCAgICAgICIoKVtMamF2YS9sYW5nL1N0cmluZzsiLAogICAgICAgICAodm9pZCopIGFuZHJvaWRfY29udGVudF9Bc3NldE1hbmFnZXJfZ2V0TG9jYWxlcyB9LAorICAgIHsgImdldE5vblN5c3RlbUxvY2FsZXMiLCAiKClbTGphdmEvbGFuZy9TdHJpbmc7IiwKKyAgICAgICAgKHZvaWQqKSBhbmRyb2lkX2NvbnRlbnRfQXNzZXRNYW5hZ2VyX2dldE5vblN5c3RlbUxvY2FsZXMgfSwKICAgICB7ICJnZXRTaXplQ29uZmlndXJhdGlvbnMiLCAiKClbTGFuZHJvaWQvY29udGVudC9yZXMvQ29uZmlndXJhdGlvbjsiLAogICAgICAgICAodm9pZCopIGFuZHJvaWRfY29udGVudF9Bc3NldE1hbmFnZXJfZ2V0U2l6ZUNvbmZpZ3VyYXRpb25zIH0sCiAgICAgeyAic2V0Q29uZmlndXJhdGlvbiIsICIhKElJTGphdmEvbGFuZy9TdHJpbmc7SUlJSUlJSUlJSUlJSUkpViIsCmRpZmYgLS1naXQgYS9jb3JlL2puaS9hbmRyb2lkX3V0aWxfTG9nLmNwcCBiL2NvcmUvam5pL2FuZHJvaWRfdXRpbF9Mb2cuY3BwCmluZGV4IDJkMjNjZGEuLjc3MTllMzEgMTAwNjQ0Ci0tLSBhL2NvcmUvam5pL2FuZHJvaWRfdXRpbF9Mb2cuY3BwCisrKyBiL2NvcmUvam5pL2FuZHJvaWRfdXRpbF9Mb2cuY3BwCkBAIC0xOCw4ICsxOCwxMCBAQAogI2RlZmluZSBMT0dfTkFNRVNQQUNFICJsb2cudGFnLiIKICNkZWZpbmUgTE9HX1RBRyAiTG9nX3ByaW50bG4iCiAKKyNpbmNsdWRlIDxhbmRyb2lkLWJhc2UvbWFjcm9zLmg+CiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CiAjaW5jbHVkZSA8Y3V0aWxzL3Byb3BlcnRpZXMuaD4KKyNpbmNsdWRlIDxsb2cvbG9nZ2VyLmg+ICAgICAgICAgICAgICAgLy8gRm9yIExPR0dFUl9FTlRSWV9NQVhfUEFZTE9BRC4KICNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KICNpbmNsdWRlIDx1dGlscy9TdHJpbmc4Lmg+CiAKQEAgLTEwOSwxMiArMTExLDIzIEBACiB9CiAKIC8qCisgKiBJbiBjbGFzcyBhbmRyb2lkLnV0aWwuTG9nOgorICogIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBpbnQgbG9nZ2VyX2VudHJ5X21heF9wYXlsb2FkX25hdGl2ZSgpCisgKi8KK3N0YXRpYyBqaW50IGFuZHJvaWRfdXRpbF9Mb2dfbG9nZ2VyX2VudHJ5X21heF9wYXlsb2FkX25hdGl2ZShKTklFbnYqIGVudiBBVFRSSUJVVEVfVU5VU0VELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpvYmplY3QgY2xhenogQVRUUklCVVRFX1VOVVNFRCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8amludD4oTE9HR0VSX0VOVFJZX01BWF9QQVlMT0FEKTsKK30KKworLyoKICAqIEpOSSByZWdpc3RyYXRpb24uCiAgKi8KIHN0YXRpYyBjb25zdCBKTklOYXRpdmVNZXRob2QgZ01ldGhvZHNbXSA9IHsKICAgICAvKiBuYW1lLCBzaWduYXR1cmUsIGZ1bmNQdHIgKi8KICAgICB7ICJpc0xvZ2dhYmxlIiwgICAgICAiKExqYXZhL2xhbmcvU3RyaW5nO0kpWiIsICh2b2lkKikgYW5kcm9pZF91dGlsX0xvZ19pc0xvZ2dhYmxlIH0sCiAgICAgeyAicHJpbnRsbl9uYXRpdmUiLCAgIihJSUxqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylJIiwgKHZvaWQqKSBhbmRyb2lkX3V0aWxfTG9nX3ByaW50bG5fbmF0aXZlIH0sCisgICAgeyAibG9nZ2VyX2VudHJ5X21heF9wYXlsb2FkX25hdGl2ZSIsICAiKClJIiwgKHZvaWQqKSBhbmRyb2lkX3V0aWxfTG9nX2xvZ2dlcl9lbnRyeV9tYXhfcGF5bG9hZF9uYXRpdmUgfSwKIH07CiAKIGludCByZWdpc3Rlcl9hbmRyb2lkX3V0aWxfTG9nKEpOSUVudiogZW52KQpkaWZmIC0tZ2l0IGEvY29yZS9qbmkvYW5kcm9pZF92aWV3X0Rpc3BsYXlMaXN0Q2FudmFzLmNwcCBiL2NvcmUvam5pL2FuZHJvaWRfdmlld19EaXNwbGF5TGlzdENhbnZhcy5jcHAKaW5kZXggOWI0MWViMy4uZDJjOTlmZCAxMDA2NDQKLS0tIGEvY29yZS9qbmkvYW5kcm9pZF92aWV3X0Rpc3BsYXlMaXN0Q2FudmFzLmNwcAorKysgYi9jb3JlL2puaS9hbmRyb2lkX3ZpZXdfRGlzcGxheUxpc3RDYW52YXMuY3BwCkBAIC0yNyw3ICsyNywxMyBAQAogI2luY2x1ZGUgPFNrQml0bWFwLmg+CiAjaW5jbHVkZSA8U2tSZWdpb24uaD4KIAorI2lmIEhXVUlfTkVXX09QUworI2luY2x1ZGUgPFJlY29yZGluZ0NhbnZhcy5oPgordHlwZWRlZiBhbmRyb2lkOjp1aXJlbmRlcmVyOjpSZWNvcmRpbmdDYW52YXMgY2FudmFzX3Q7CisjZWxzZQogI2luY2x1ZGUgPERpc3BsYXlMaXN0Q2FudmFzLmg+Cit0eXBlZGVmIGFuZHJvaWQ6OnVpcmVuZGVyZXI6OkRpc3BsYXlMaXN0Q2FudmFzIGNhbnZhc190OworI2VuZGlmCiAjaW5jbHVkZSA8UmVjdC5oPgogI2luY2x1ZGUgPFJlbmRlck5vZGUuaD4KICNpbmNsdWRlIDxDYW52YXNQcm9wZXJ0eS5oPgpAQCAtNDYsNyArNTIsNyBAQAogCiBzdGF0aWMgdm9pZCBhbmRyb2lkX3ZpZXdfRGlzcGxheUxpc3RDYW52YXNfaW5zZXJ0UmVvcmRlckJhcnJpZXIoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosCiAgICAgICAgIGpsb25nIGNhbnZhc1B0ciwgamJvb2xlYW4gcmVvcmRlckVuYWJsZSkgewotICAgIERpc3BsYXlMaXN0Q2FudmFzKiBjYW52YXMgPSByZWludGVycHJldF9jYXN0PERpc3BsYXlMaXN0Q2FudmFzKj4oY2FudmFzUHRyKTsKKyAgICBjYW52YXNfdCogY2FudmFzID0gcmVpbnRlcnByZXRfY2FzdDxjYW52YXNfdCo+KGNhbnZhc1B0cik7CiAgICAgY2FudmFzLT5pbnNlcnRSZW9yZGVyQmFycmllcihyZW9yZGVyRW5hYmxlKTsKIH0KIApAQCAtNTYsNyArNjIsNyBAQAogCiBzdGF0aWMgdm9pZCBhbmRyb2lkX3ZpZXdfRGlzcGxheUxpc3RDYW52YXNfY2FsbERyYXdHTEZ1bmN0aW9uKEpOSUVudiogZW52LCBqb2JqZWN0IGNsYXp6LAogICAgICAgICBqbG9uZyBjYW52YXNQdHIsIGpsb25nIGZ1bmN0b3JQdHIpIHsKLSAgICBEaXNwbGF5TGlzdENhbnZhcyogY2FudmFzID0gcmVpbnRlcnByZXRfY2FzdDxEaXNwbGF5TGlzdENhbnZhcyo+KGNhbnZhc1B0cik7CisgICAgY2FudmFzX3QqIGNhbnZhcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2FudmFzX3QqPihjYW52YXNQdHIpOwogICAgIEZ1bmN0b3IqIGZ1bmN0b3IgPSByZWludGVycHJldF9jYXN0PEZ1bmN0b3IqPihmdW5jdG9yUHRyKTsKICAgICBjYW52YXMtPmNhbGxEcmF3R0xGdW5jdGlvbihmdW5jdG9yKTsKIH0KQEAgLTgwLDcgKzg2LDcgQEAKIHN0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19EaXNwbGF5TGlzdENhbnZhc19kcmF3Um91bmRSZWN0UHJvcHMoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosCiAgICAgICAgIGpsb25nIGNhbnZhc1B0ciwgamxvbmcgbGVmdFByb3BQdHIsIGpsb25nIHRvcFByb3BQdHIsIGpsb25nIHJpZ2h0UHJvcFB0ciwKICAgICAgICAgamxvbmcgYm90dG9tUHJvcFB0ciwgamxvbmcgcnhQcm9wUHRyLCBqbG9uZyByeVByb3BQdHIsIGpsb25nIHBhaW50UHJvcFB0cikgewotICAgIERpc3BsYXlMaXN0Q2FudmFzKiBjYW52YXMgPSByZWludGVycHJldF9jYXN0PERpc3BsYXlMaXN0Q2FudmFzKj4oY2FudmFzUHRyKTsKKyAgICBjYW52YXNfdCogY2FudmFzID0gcmVpbnRlcnByZXRfY2FzdDxjYW52YXNfdCo+KGNhbnZhc1B0cik7CiAgICAgQ2FudmFzUHJvcGVydHlQcmltaXRpdmUqIGxlZnRQcm9wID0gcmVpbnRlcnByZXRfY2FzdDxDYW52YXNQcm9wZXJ0eVByaW1pdGl2ZSo+KGxlZnRQcm9wUHRyKTsKICAgICBDYW52YXNQcm9wZXJ0eVByaW1pdGl2ZSogdG9wUHJvcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q2FudmFzUHJvcGVydHlQcmltaXRpdmUqPih0b3BQcm9wUHRyKTsKICAgICBDYW52YXNQcm9wZXJ0eVByaW1pdGl2ZSogcmlnaHRQcm9wID0gcmVpbnRlcnByZXRfY2FzdDxDYW52YXNQcm9wZXJ0eVByaW1pdGl2ZSo+KHJpZ2h0UHJvcFB0cik7CkBAIC05Myw3ICs5OSw3IEBACiAKIHN0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19EaXNwbGF5TGlzdENhbnZhc19kcmF3Q2lyY2xlUHJvcHMoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosCiAgICAgICAgIGpsb25nIGNhbnZhc1B0ciwgamxvbmcgeFByb3BQdHIsIGpsb25nIHlQcm9wUHRyLCBqbG9uZyByYWRpdXNQcm9wUHRyLCBqbG9uZyBwYWludFByb3BQdHIpIHsKLSAgICBEaXNwbGF5TGlzdENhbnZhcyogY2FudmFzID0gcmVpbnRlcnByZXRfY2FzdDxEaXNwbGF5TGlzdENhbnZhcyo+KGNhbnZhc1B0cik7CisgICAgY2FudmFzX3QqIGNhbnZhcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2FudmFzX3QqPihjYW52YXNQdHIpOwogICAgIENhbnZhc1Byb3BlcnR5UHJpbWl0aXZlKiB4UHJvcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q2FudmFzUHJvcGVydHlQcmltaXRpdmUqPih4UHJvcFB0cik7CiAgICAgQ2FudmFzUHJvcGVydHlQcmltaXRpdmUqIHlQcm9wID0gcmVpbnRlcnByZXRfY2FzdDxDYW52YXNQcm9wZXJ0eVByaW1pdGl2ZSo+KHlQcm9wUHRyKTsKICAgICBDYW52YXNQcm9wZXJ0eVByaW1pdGl2ZSogcmFkaXVzUHJvcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q2FudmFzUHJvcGVydHlQcmltaXRpdmUqPihyYWRpdXNQcm9wUHRyKTsKQEAgLTEwNywyNSArMTEzLDI1IEBACiAKIHN0YXRpYyBqbG9uZyBhbmRyb2lkX3ZpZXdfRGlzcGxheUxpc3RDYW52YXNfZmluaXNoUmVjb3JkaW5nKEpOSUVudiogZW52LAogICAgICAgICBqb2JqZWN0IGNsYXp6LCBqbG9uZyBjYW52YXNQdHIpIHsKLSAgICBEaXNwbGF5TGlzdENhbnZhcyogY2FudmFzID0gcmVpbnRlcnByZXRfY2FzdDxEaXNwbGF5TGlzdENhbnZhcyo+KGNhbnZhc1B0cik7CisgICAgY2FudmFzX3QqIGNhbnZhcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2FudmFzX3QqPihjYW52YXNQdHIpOwogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGpsb25nPihjYW52YXMtPmZpbmlzaFJlY29yZGluZygpKTsKIH0KIAogc3RhdGljIGpsb25nIGFuZHJvaWRfdmlld19EaXNwbGF5TGlzdENhbnZhc19jcmVhdGVEaXNwbGF5TGlzdENhbnZhcyhKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eiwKICAgICAgICAgamludCB3aWR0aCwgamludCBoZWlnaHQpIHsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxqbG9uZz4obmV3IERpc3BsYXlMaXN0Q2FudmFzKHdpZHRoLCBoZWlnaHQpKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxqbG9uZz4obmV3IGNhbnZhc190KHdpZHRoLCBoZWlnaHQpKTsKIH0KIAogc3RhdGljIHZvaWQgYW5kcm9pZF92aWV3X0Rpc3BsYXlMaXN0Q2FudmFzX3Jlc2V0RGlzcGxheUxpc3RDYW52YXMoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosCiAgICAgICAgIGpsb25nIGNhbnZhc1B0ciwgamludCB3aWR0aCwgamludCBoZWlnaHQpIHsKLSAgICBEaXNwbGF5TGlzdENhbnZhcyogY2FudmFzID0gcmVpbnRlcnByZXRfY2FzdDxEaXNwbGF5TGlzdENhbnZhcyo+KGNhbnZhc1B0cik7CisgICAgY2FudmFzX3QqIGNhbnZhcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2FudmFzX3QqPihjYW52YXNQdHIpOwogICAgIGNhbnZhcy0+cmVzZXQod2lkdGgsIGhlaWdodCk7CiB9CiAKIAogc3RhdGljIHZvaWQgYW5kcm9pZF92aWV3X0Rpc3BsYXlMaXN0Q2FudmFzX2RyYXdSZW5kZXJOb2RlKEpOSUVudiogZW52LAogICAgICAgICBqb2JqZWN0IGNsYXp6LCBqbG9uZyBjYW52YXNQdHIsIGpsb25nIHJlbmRlck5vZGVQdHIpIHsKLSAgICBEaXNwbGF5TGlzdENhbnZhcyogY2FudmFzID0gcmVpbnRlcnByZXRfY2FzdDxEaXNwbGF5TGlzdENhbnZhcyo+KGNhbnZhc1B0cik7CisgICAgY2FudmFzX3QqIGNhbnZhcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2FudmFzX3QqPihjYW52YXNQdHIpOwogICAgIFJlbmRlck5vZGUqIHJlbmRlck5vZGUgPSByZWludGVycHJldF9jYXN0PFJlbmRlck5vZGUqPihyZW5kZXJOb2RlUHRyKTsKICAgICBjYW52YXMtPmRyYXdSZW5kZXJOb2RlKHJlbmRlck5vZGUpOwogfQpAQCAtMTM2LDcgKzE0Miw3IEBACiAKIHN0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19EaXNwbGF5TGlzdENhbnZhc19kcmF3TGF5ZXIoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosCiAgICAgICAgIGpsb25nIGNhbnZhc1B0ciwgamxvbmcgbGF5ZXJQdHIpIHsKLSAgICBEaXNwbGF5TGlzdENhbnZhcyogY2FudmFzID0gcmVpbnRlcnByZXRfY2FzdDxEaXNwbGF5TGlzdENhbnZhcyo+KGNhbnZhc1B0cik7CisgICAgY2FudmFzX3QqIGNhbnZhcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2FudmFzX3QqPihjYW52YXNQdHIpOwogICAgIERlZmVycmVkTGF5ZXJVcGRhdGVyKiBsYXllciA9IHJlaW50ZXJwcmV0X2Nhc3Q8RGVmZXJyZWRMYXllclVwZGF0ZXIqPihsYXllclB0cik7CiAgICAgY2FudmFzLT5kcmF3TGF5ZXIobGF5ZXIpOwogfQpkaWZmIC0tZ2l0IGEvY29yZS9qbmkvYW5kcm9pZF92aWV3X1N1cmZhY2UuY3BwIGIvY29yZS9qbmkvYW5kcm9pZF92aWV3X1N1cmZhY2UuY3BwCmluZGV4IGY2ZTY4YzQuLmNmNjg0NDkgMTAwNjQ0Ci0tLSBhL2NvcmUvam5pL2FuZHJvaWRfdmlld19TdXJmYWNlLmNwcAorKysgYi9jb3JlL2puaS9hbmRyb2lkX3ZpZXdfU3VyZmFjZS5jcHAKQEAgLTQ2NSwxMSArNDY1LDE3IEBACiAgICAgYW53LT5xdWVyeShhbncsIE5BVElWRV9XSU5ET1dfSEVJR0hULCAmdmFsdWUpOwogICAgIHJldHVybiB2YWx1ZTsKIH0KKwogc3RhdGljIGpsb25nIG5hdGl2ZUdldE5leHRGcmFtZU51bWJlcihKTklFbnYgKmVudiwgamNsYXNzIGNsYXp6LCBqbG9uZyBuYXRpdmVPYmplY3QpIHsKICAgICBTdXJmYWNlKiBzdXJmYWNlID0gcmVpbnRlcnByZXRfY2FzdDxTdXJmYWNlKj4obmF0aXZlT2JqZWN0KTsKICAgICByZXR1cm4gc3VyZmFjZS0+Z2V0TmV4dEZyYW1lTnVtYmVyKCk7CiB9CiAKK3N0YXRpYyBqaW50IG5hdGl2ZVNldFNjYWxpbmdNb2RlKEpOSUVudiAqZW52LCBqY2xhc3MgY2xhenosIGpsb25nIG5hdGl2ZU9iamVjdCwgamludCBzY2FsaW5nTW9kZSkgeworICAgIFN1cmZhY2UqIHN1cmZhY2UgPSByZWludGVycHJldF9jYXN0PFN1cmZhY2UqPihuYXRpdmVPYmplY3QpOworICAgIHJldHVybiBzdXJmYWNlLT5zZXRTY2FsaW5nTW9kZShzY2FsaW5nTW9kZSk7Cit9CisKIG5hbWVzcGFjZSB1aXJlbmRlcmVyIHsKIAogdXNpbmcgbmFtZXNwYWNlIGFuZHJvaWQ6OnVpcmVuZGVyZXI6OnJlbmRlcnRocmVhZDsKQEAgLTU0Niw2ICs1NTIsNyBAQAogICAgIHsibmF0aXZlR2V0V2lkdGgiLCAiKEopSSIsICh2b2lkKiluYXRpdmVHZXRXaWR0aCB9LAogICAgIHsibmF0aXZlR2V0SGVpZ2h0IiwgIihKKUkiLCAodm9pZCopbmF0aXZlR2V0SGVpZ2h0IH0sCiAgICAgeyJuYXRpdmVHZXROZXh0RnJhbWVOdW1iZXIiLCAiKEopSiIsICh2b2lkKiluYXRpdmVHZXROZXh0RnJhbWVOdW1iZXIgfSwKKyAgICB7Im5hdGl2ZVNldFNjYWxpbmdNb2RlIiwgIihKSSlJIiwgKHZvaWQqKW5hdGl2ZVNldFNjYWxpbmdNb2RlIH0sCiAKICAgICAvLyBIV1VJIGNvbnRleHQKICAgICB7Im5Id3VpQ3JlYXRlIiwgIihKSilKIiwgKHZvaWQqKSBod3VpOjpjcmVhdGUgfSwKZGlmZiAtLWdpdCBhL2NvcmUvam5pL2NvbV9hbmRyb2lkX2ludGVybmFsX29zX1p5Z290ZS5jcHAgYi9jb3JlL2puaS9jb21fYW5kcm9pZF9pbnRlcm5hbF9vc19aeWdvdGUuY3BwCmluZGV4IDk2ZDE1MGIuLjA0MWU2OTMgMTAwNjQ0Ci0tLSBhL2NvcmUvam5pL2NvbV9hbmRyb2lkX2ludGVybmFsX29zX1p5Z290ZS5jcHAKKysrIGIvY29yZS9qbmkvY29tX2FuZHJvaWRfaW50ZXJuYWxfb3NfWnlnb3RlLmNwcApAQCAtNjA1LDEwICs2MDUsMzIgQEAKICAgICAgICAgamludCBkZWJ1Z19mbGFncywgam9iamVjdEFycmF5IHJsaW1pdHMsCiAgICAgICAgIGppbnQgbW91bnRfZXh0ZXJuYWwsIGpzdHJpbmcgc2VfaW5mbywganN0cmluZyBzZV9uYW1lLAogICAgICAgICBqaW50QXJyYXkgZmRzVG9DbG9zZSwganN0cmluZyBpbnN0cnVjdGlvblNldCwganN0cmluZyBhcHBEYXRhRGlyKSB7Ci0gICAgLy8gR3JhbnQgQ0FQX1dBS0VfQUxBUk0gdG8gdGhlIEJsdWV0b290aCBwcm9jZXNzLgogICAgIGpsb25nIGNhcGFiaWxpdGllcyA9IDA7CisKKyAgICAvLyBHcmFudCBDQVBfV0FLRV9BTEFSTSB0byB0aGUgQmx1ZXRvb3RoIHByb2Nlc3MuCiAgICAgaWYgKHVpZCA9PSBBSURfQkxVRVRPT1RIKSB7Ci0gICAgICAgIGNhcGFiaWxpdGllcyB8PSAoMUxMIDw8IENBUF9XQUtFX0FMQVJNKTsKKyAgICAgIGNhcGFiaWxpdGllcyB8PSAoMUxMIDw8IENBUF9XQUtFX0FMQVJNKTsKKyAgICB9CisKKyAgICAvLyBHcmFudCBDQVBfQkxPQ0tfU1VTUEVORCB0byBwcm9jZXNzZXMgdGhhdCBiZWxvbmcgdG8gR0lEICJ3YWtlbG9jayIKKyAgICBib29sIGdpZF93YWtlbG9ja19mb3VuZCA9IGZhbHNlOworICAgIGlmIChnaWQgPT0gQUlEX1dBS0VMT0NLKSB7CisgICAgICBnaWRfd2FrZWxvY2tfZm91bmQgPSB0cnVlOworICAgIH0gZWxzZSBpZiAoZ2lkcyAhPSBOVUxMKSB7CisgICAgICBqc2l6ZSBnaWRzX251bSA9IGVudi0+R2V0QXJyYXlMZW5ndGgoZ2lkcyk7CisgICAgICBTY29wZWRJbnRBcnJheVJPIGFyKGVudiwgZ2lkcyk7CisgICAgICBpZiAoYXIuZ2V0KCkgPT0gTlVMTCkgeworICAgICAgICBSdW50aW1lQWJvcnQoZW52LCBfX0xJTkVfXywgIkJhZCBnaWRzIGFycmF5Iik7CisgICAgICB9CisgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGdpZHNfbnVtOyBpKyspIHsKKyAgICAgICAgaWYgKGFyW2ldID09IEFJRF9XQUtFTE9DSykgeworICAgICAgICAgIGdpZF93YWtlbG9ja19mb3VuZCA9IHRydWU7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgaWYgKGdpZF93YWtlbG9ja19mb3VuZCkgeworICAgICAgY2FwYWJpbGl0aWVzIHw9ICgxTEwgPDwgQ0FQX0JMT0NLX1NVU1BFTkQpOwogICAgIH0KIAogICAgIHJldHVybiBGb3JrQW5kU3BlY2lhbGl6ZUNvbW1vbihlbnYsIHVpZCwgZ2lkLCBnaWRzLCBkZWJ1Z19mbGFncywKZGlmZiAtLWdpdCBhL2NvcmUvcmVzL0FuZHJvaWRNYW5pZmVzdC54bWwgYi9jb3JlL3Jlcy9BbmRyb2lkTWFuaWZlc3QueG1sCmluZGV4IDEwOTBmOTAuLmMxNTRlOTEgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL0FuZHJvaWRNYW5pZmVzdC54bWwKKysrIGIvY29yZS9yZXMvQW5kcm9pZE1hbmlmZXN0LnhtbApAQCAtMTA3LDYgKzEwNyw3IEBACiAgICAgPHByb3RlY3RlZC1icm9hZGNhc3QgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmJhY2t1cC5pbnRlbnQuQ0xFQVIiIC8+CiAgICAgPHByb3RlY3RlZC1icm9hZGNhc3QgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmJhY2t1cC5pbnRlbnQuSU5JVCIgLz4KIAorICAgIDxwcm90ZWN0ZWQtYnJvYWRjYXN0IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5ibHVldG9vdGguaW50ZW50LkRJU0NPVkVSQUJMRV9USU1FT1VUIiAvPgogICAgIDxwcm90ZWN0ZWQtYnJvYWRjYXN0IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5ibHVldG9vdGguYWRhcHRlci5hY3Rpb24uU1RBVEVfQ0hBTkdFRCIgLz4KICAgICA8cHJvdGVjdGVkLWJyb2FkY2FzdCBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuYmx1ZXRvb3RoLmFkYXB0ZXIuYWN0aW9uLlNDQU5fTU9ERV9DSEFOR0VEIiAvPgogICAgIDxwcm90ZWN0ZWQtYnJvYWRjYXN0IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5ibHVldG9vdGguYWRhcHRlci5hY3Rpb24uRElTQ09WRVJZX1NUQVJURUQiIC8+CkBAIC04ODgsNiArODg5LDExIEBACiAgICAgICAgIGFuZHJvaWQ6cHJvdGVjdGlvbkxldmVsPSJub3JtYWwiCiAgICAgICAgIGFuZHJvaWQ6cGVybWlzc2lvbkZsYWdzPSJoaWRkZW4iLz4KIAorICAgIDwhLS0gQGhpZGUgV2UgbmVlZCB0byBrZWVwIHRoaXMgYXJvdW5kIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAtLT4KKyAgICA8cGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5GTEFTSExJR0hUIgorICAgICAgICBhbmRyb2lkOnByb3RlY3Rpb25MZXZlbD0ibm9ybWFsIgorICAgICAgICBhbmRyb2lkOnBlcm1pc3Npb25GbGFncz0iaGlkZGVuIi8+CisKICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiAgICAgPCEtLSBJTlNUQUxMIFBFUk1JU1NJT05TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgogICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KQEAgLTExOTMsMTQgKzExOTksNiBAQAogICAgICAgICBhbmRyb2lkOmRlc2NyaXB0aW9uPSJAc3RyaW5nL3Blcm1kZXNjX3ZpYnJhdGUiCiAgICAgICAgIGFuZHJvaWQ6cHJvdGVjdGlvbkxldmVsPSJub3JtYWwiIC8+CiAKLSAgICA8IS0tIEFsbG93cyBhY2Nlc3MgdG8gdGhlIGZsYXNobGlnaHQuCi0gICAgICAgICA8cD5Qcm90ZWN0aW9uIGxldmVsOiBub3JtYWwKLSAgICAtLT4KLSAgICA8cGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5GTEFTSExJR0hUIgotICAgICAgICBhbmRyb2lkOmxhYmVsPSJAc3RyaW5nL3Blcm1sYWJfZmxhc2hsaWdodCIKLSAgICAgICAgYW5kcm9pZDpkZXNjcmlwdGlvbj0iQHN0cmluZy9wZXJtZGVzY19mbGFzaGxpZ2h0IgotICAgICAgICBhbmRyb2lkOnByb3RlY3Rpb25MZXZlbD0ibm9ybWFsIiAvPgotCiAgICAgPCEtLSBBbGxvd3MgdXNpbmcgUG93ZXJNYW5hZ2VyIFdha2VMb2NrcyB0byBrZWVwIHByb2Nlc3NvciBmcm9tIHNsZWVwaW5nIG9yIHNjcmVlbgogICAgICAgICAgZnJvbSBkaW1taW5nLgogICAgICAgICAgPHA+UHJvdGVjdGlvbiBsZXZlbDogbm9ybWFsCkBAIC0xOTAxLDcgKzE4OTksNyBAQAogCiAgICAgPCEtLSBBbGxvd3MgYW4gYXBwbGljYXRpb24gdG8gYmluZCB0byB0aGlyZCBwYXJ0eSBxdWljayBzZXR0aW5ncyB0aWxlcy4KICAgICAgICAgIDxwPlNob3VsZCBvbmx5IGJlIHJlcXVlc3RlZCBieSB0aGUgU3lzdGVtLCBzaG91bGQgYmUgcmVxdWlyZWQgYnkKLSAgICAgICAgIFFTVGlsZVNlcnZpY2UgZGVjbGFyYXRpb25zLi0tPgorICAgICAgICAgVGlsZVNlcnZpY2UgZGVjbGFyYXRpb25zLi0tPgogICAgIDxwZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLkJJTkRfUVVJQ0tfU0VUVElOR1NfVElMRSIKICAgICAgICAgYW5kcm9pZDpwcm90ZWN0aW9uTGV2ZWw9InNpZ25hdHVyZSIgLz4KIApkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL2xheW91dC9ub3RpZmljYXRpb25fbWF0ZXJpYWxfcmVwbHlfdGV4dC54bWwgYi9jb3JlL3Jlcy9yZXMvbGF5b3V0L25vdGlmaWNhdGlvbl9tYXRlcmlhbF9yZXBseV90ZXh0LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzIyZWI0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9yZXMvcmVzL2xheW91dC9ub3RpZmljYXRpb25fbWF0ZXJpYWxfcmVwbHlfdGV4dC54bWwKQEAgLTAsMCArMSw2MSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhLS0KKyAgfiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICB+CisgIH4gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICB+CisgIH4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgfgorICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgfiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZQorICAtLT4KKworPCEtLSBOb3RlOiB0aGlzIGxheW91dCBpcyBpbmNsdWRlZCBmcm9tIGEgdmlldyBzdHViOyBsYXlvdXQgYXR0cmlidXRlcyB3aWxsIGJlIG92ZXJyaWRkZW4uIC0tPgorPExpbmVhckxheW91dAorICAgICAgICB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvbm90aWZpY2F0aW9uX21hdGVyaWFsX3JlcGx5X2NvbnRhaW5lciIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgorICAgICAgICBhbmRyb2lkOnBhZGRpbmdTdGFydD0iQGRpbWVuL25vdGlmaWNhdGlvbl9jb250ZW50X21hcmdpbl9zdGFydCI+CisKKyAgICA8SW1hZ2VWaWV3CisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSIxZGlwIgorICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9hY3Rpb25fZGl2aWRlciIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbkJvdHRvbT0iMTVkcCIKKyAgICAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGRyYXdhYmxlL25vdGlmaWNhdGlvbl90ZW1wbGF0ZV9kaXZpZGVyIiAvPgorCisgICAgPFRleHRWaWV3CisgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL25vdGlmaWNhdGlvbl9tYXRlcmlhbF9yZXBseV90ZXh0XzMiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5FbmQ9IkBkaW1lbi9ub3RpZmljYXRpb25fY29udGVudF9tYXJnaW5fZW5kIgorICAgICAgICAgICAgYW5kcm9pZDp2aXNpYmlsaXR5PSJnb25lIgorICAgICAgICAgICAgYW5kcm9pZDp0ZXh0QXBwZWFyYW5jZT0iQHN0eWxlL1RleHRBcHBlYXJhbmNlLk1hdGVyaWFsLk5vdGlmaWNhdGlvbi5SZXBseSIKKyAgICAgICAgICAgIGFuZHJvaWQ6c2luZ2xlTGluZT0idHJ1ZSIgLz4KKworICAgIDxUZXh0VmlldworICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9ub3RpZmljYXRpb25fbWF0ZXJpYWxfcmVwbHlfdGV4dF8yIgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luRW5kPSJAZGltZW4vbm90aWZpY2F0aW9uX2NvbnRlbnRfbWFyZ2luX2VuZCIKKyAgICAgICAgICAgIGFuZHJvaWQ6dmlzaWJpbGl0eT0iZ29uZSIKKyAgICAgICAgICAgIGFuZHJvaWQ6dGV4dEFwcGVhcmFuY2U9IkBzdHlsZS9UZXh0QXBwZWFyYW5jZS5NYXRlcmlhbC5Ob3RpZmljYXRpb24uUmVwbHkiCisgICAgICAgICAgICBhbmRyb2lkOnNpbmdsZUxpbmU9InRydWUiIC8+CisKKyAgICA8VGV4dFZpZXcKKyAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvbm90aWZpY2F0aW9uX21hdGVyaWFsX3JlcGx5X3RleHRfMSIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbkJvdHRvbT0iMTVkcCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbkVuZD0iQGRpbWVuL25vdGlmaWNhdGlvbl9jb250ZW50X21hcmdpbl9lbmQiCisgICAgICAgICAgICBhbmRyb2lkOnRleHRBcHBlYXJhbmNlPSJAc3R5bGUvVGV4dEFwcGVhcmFuY2UuTWF0ZXJpYWwuTm90aWZpY2F0aW9uLlJlcGx5IgorICAgICAgICAgICAgYW5kcm9pZDpzaW5nbGVMaW5lPSJ0cnVlIiAvPgorCis8L0xpbmVhckxheW91dD4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy9sYXlvdXQvbm90aWZpY2F0aW9uX3RlbXBsYXRlX21hdGVyaWFsX2Jhc2UueG1sIGIvY29yZS9yZXMvcmVzL2xheW91dC9ub3RpZmljYXRpb25fdGVtcGxhdGVfbWF0ZXJpYWxfYmFzZS54bWwKaW5kZXggYjY5ZWIyNC4uZmRiYmJkNiAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL2xheW91dC9ub3RpZmljYXRpb25fdGVtcGxhdGVfbWF0ZXJpYWxfYmFzZS54bWwKKysrIGIvY29yZS9yZXMvcmVzL2xheW91dC9ub3RpZmljYXRpb25fdGVtcGxhdGVfbWF0ZXJpYWxfYmFzZS54bWwKQEAgLTI1LDEyICsyNSwxMiBAQAogICAgIDxMaW5lYXJMYXlvdXQKICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9ub3RpZmljYXRpb25fbWFpbl9jb2x1bW4iCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfZ3Jhdml0eT0idG9wIgogICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5TdGFydD0iQGRpbWVuL25vdGlmaWNhdGlvbl9jb250ZW50X21hcmdpbl9zdGFydCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luRW5kPSJAZGltZW4vbm90aWZpY2F0aW9uX2NvbnRlbnRfbWFyZ2luX2VuZCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luVG9wPSJAZGltZW4vbm90aWZpY2F0aW9uX2NvbnRlbnRfbWFyZ2luX3RvcCIKLSAgICAgICAgYW5kcm9pZDptaW5IZWlnaHQ9IkBkaW1lbi9ub3RpZmljYXRpb25fbWluX2NvbnRlbnRfaGVpZ2h0IgorICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5Cb3R0b209IkBkaW1lbi9ub3RpZmljYXRpb25fY29udGVudF9tYXJnaW5fYm90dG9tIgogICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKICAgICAgICAgPgogICAgICAgICA8aW5jbHVkZSBsYXlvdXQ9IkBsYXlvdXQvbm90aWZpY2F0aW9uX3RlbXBsYXRlX3BhcnRfbGluZTEiIC8+CkBAIC00Miw3ICs0Miw3IEBACiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2dyYXZpdHk9ImJvdHRvbSIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luU3RhcnQ9IkBkaW1lbi9ub3RpZmljYXRpb25fY29udGVudF9tYXJnaW5fc3RhcnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbkJvdHRvbT0iMTFkcCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luRW5kPSJAZGltZW4vbm90aWZpY2F0aW9uX2NvbnRlbnRfbWFyZ2luX2VuZCI+CisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbkVuZD0iQGRpbWVuL25vdGlmaWNhdGlvbl9jb250ZW50X21hcmdpbl9lbmQiID4KICAgICAgICAgPGluY2x1ZGUgbGF5b3V0PSJAbGF5b3V0L25vdGlmaWNhdGlvbl90ZW1wbGF0ZV9wcm9ncmVzcyIgLz4KICAgICA8L0ZyYW1lTGF5b3V0PgogICAgIDxpbmNsdWRlIGxheW91dD0iQGxheW91dC9ub3RpZmljYXRpb25fdGVtcGxhdGVfcmlnaHRfaWNvbiIgLz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy9sYXlvdXQvbm90aWZpY2F0aW9uX3RlbXBsYXRlX21hdGVyaWFsX2JpZ19iYXNlLnhtbCBiL2NvcmUvcmVzL3Jlcy9sYXlvdXQvbm90aWZpY2F0aW9uX3RlbXBsYXRlX21hdGVyaWFsX2JpZ19iYXNlLnhtbAppbmRleCBlYjAyZThiLi5kZmQ3MmMwIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvbGF5b3V0L25vdGlmaWNhdGlvbl90ZW1wbGF0ZV9tYXRlcmlhbF9iaWdfYmFzZS54bWwKKysrIGIvY29yZS9yZXMvcmVzL2xheW91dC9ub3RpZmljYXRpb25fdGVtcGxhdGVfbWF0ZXJpYWxfYmlnX2Jhc2UueG1sCkBAIC0yNSw3ICsyNSw3IEBACiAgICAgPEZyYW1lTGF5b3V0CiAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvc3RhdHVzX2Jhcl9sYXRlc3RfZXZlbnRfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJAZGltZW4vbm90aWZpY2F0aW9uX21pbl9oZWlnaHQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9ncmF2aXR5PSJ0b3AiCiAgICAgICAgIGFuZHJvaWQ6dGFnPSJiYXNlIgogICAgICAgICA+CkBAIC0zOCw3ICszOCw3IEBACiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5TdGFydD0iQGRpbWVuL25vdGlmaWNhdGlvbl9jb250ZW50X21hcmdpbl9zdGFydCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbkVuZD0iQGRpbWVuL25vdGlmaWNhdGlvbl9jb250ZW50X21hcmdpbl9lbmQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5Ub3A9IkBkaW1lbi9ub3RpZmljYXRpb25fY29udGVudF9tYXJnaW5fdG9wIgotICAgICAgICAgICAgYW5kcm9pZDptaW5IZWlnaHQ9IkBkaW1lbi9ub3RpZmljYXRpb25fbWluX2NvbnRlbnRfaGVpZ2h0IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luQm90dG9tPSJAZGltZW4vbm90aWZpY2F0aW9uX2NvbnRlbnRfbWFyZ2luX2JvdHRvbSIKICAgICAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgogICAgICAgICAgICAgPgogICAgICAgICAgICAgPGluY2x1ZGUgbGF5b3V0PSJAbGF5b3V0L25vdGlmaWNhdGlvbl90ZW1wbGF0ZV9wYXJ0X2xpbmUxIiAvPgpAQCAtNTUsNiArNTUsMTEgQEAKICAgICAgICAgPC9GcmFtZUxheW91dD4KICAgICAgICAgPGluY2x1ZGUgbGF5b3V0PSJAbGF5b3V0L25vdGlmaWNhdGlvbl90ZW1wbGF0ZV9yaWdodF9pY29uIiAvPgogICAgIDwvRnJhbWVMYXlvdXQ+CisgICAgPFZpZXdTdHViIGFuZHJvaWQ6bGF5b3V0PSJAbGF5b3V0L25vdGlmaWNhdGlvbl9tYXRlcmlhbF9yZXBseV90ZXh0IgorICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9ub3RpZmljYXRpb25fbWF0ZXJpYWxfcmVwbHlfY29udGFpbmVyIgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgIC8+CiAgICAgPGluY2x1ZGUKICAgICAgICAgbGF5b3V0PSJAbGF5b3V0L25vdGlmaWNhdGlvbl9tYXRlcmlhbF9hY3Rpb25fbGlzdCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy9sYXlvdXQvbm90aWZpY2F0aW9uX3RlbXBsYXRlX21hdGVyaWFsX2JpZ19tZWRpYS54bWwgYi9jb3JlL3Jlcy9yZXMvbGF5b3V0L25vdGlmaWNhdGlvbl90ZW1wbGF0ZV9tYXRlcmlhbF9iaWdfbWVkaWEueG1sCmluZGV4IDA0MjdjOGEuLmMzZGI3YzUgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy9sYXlvdXQvbm90aWZpY2F0aW9uX3RlbXBsYXRlX21hdGVyaWFsX2JpZ19tZWRpYS54bWwKKysrIGIvY29yZS9yZXMvcmVzL2xheW91dC9ub3RpZmljYXRpb25fdGVtcGxhdGVfbWF0ZXJpYWxfYmlnX21lZGlhLnhtbApAQCAtMzMsNiArMzMsNyBAQAogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luVG9wPSJAZGltZW4vbm90aWZpY2F0aW9uX2NvbnRlbnRfbWFyZ2luX3RvcCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luU3RhcnQ9IkBkaW1lbi9ub3RpZmljYXRpb25fY29udGVudF9tYXJnaW5fc3RhcnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbkJvdHRvbT0iQGRpbWVuL25vdGlmaWNhdGlvbl9jb250ZW50X21hcmdpbl9ib3R0b20iCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbkVuZD0iMjRkcCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfdG9TdGFydE9mPSJAaWQvcmlnaHRfaWNvbiIKICAgICAgICAgYW5kcm9pZDptaW5IZWlnaHQ9IkBkaW1lbi9ub3RpZmljYXRpb25fbWluX2NvbnRlbnRfaGVpZ2h0IgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL2xheW91dC9ub3RpZmljYXRpb25fdGVtcGxhdGVfbWF0ZXJpYWxfYmlnX3BpY3R1cmUueG1sIGIvY29yZS9yZXMvcmVzL2xheW91dC9ub3RpZmljYXRpb25fdGVtcGxhdGVfbWF0ZXJpYWxfYmlnX3BpY3R1cmUueG1sCmluZGV4IDU4ZTNkMWIuLjVjMDdiOWIgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy9sYXlvdXQvbm90aWZpY2F0aW9uX3RlbXBsYXRlX21hdGVyaWFsX2JpZ19waWN0dXJlLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvbGF5b3V0L25vdGlmaWNhdGlvbl90ZW1wbGF0ZV9tYXRlcmlhbF9iaWdfcGljdHVyZS54bWwKQEAgLTUyLDYgKzUyLDEzIEBACiAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luQm90dG9tPSIxNmRwIgogICAgICAgICAgICAgICAgIGFuZHJvaWQ6c2NhbGVUeXBlPSJjZW50ZXJDcm9wIgogICAgICAgICAgICAgICAgIC8+CisgICAgICAgIDxWaWV3U3R1YiBhbmRyb2lkOmxheW91dD0iQGxheW91dC9ub3RpZmljYXRpb25fbWF0ZXJpYWxfcmVwbHlfdGV4dCIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL25vdGlmaWNhdGlvbl9tYXRlcmlhbF9yZXBseV9jb250YWluZXIiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5TdGFydD0iLTE2ZHAiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luRW5kPSItMTZkcCIKKyAgICAgICAgICAgICAgICAvPgogICAgICAgICA8aW5jbHVkZSBsYXlvdXQ9IkBsYXlvdXQvbm90aWZpY2F0aW9uX21hdGVyaWFsX2FjdGlvbl9saXN0IiAvPgogICAgIDwvTGluZWFyTGF5b3V0PgogPC9GcmFtZUxheW91dD4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy9sYXlvdXQvbm90aWZpY2F0aW9uX3RlbXBsYXRlX21hdGVyaWFsX2JpZ190ZXh0LnhtbCBiL2NvcmUvcmVzL3Jlcy9sYXlvdXQvbm90aWZpY2F0aW9uX3RlbXBsYXRlX21hdGVyaWFsX2JpZ190ZXh0LnhtbAppbmRleCA5ZTAxMGYyLi5lYmFmZmMzIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvbGF5b3V0L25vdGlmaWNhdGlvbl90ZW1wbGF0ZV9tYXRlcmlhbF9iaWdfdGV4dC54bWwKKysrIGIvY29yZS9yZXMvcmVzL2xheW91dC9ub3RpZmljYXRpb25fdGVtcGxhdGVfbWF0ZXJpYWxfYmlnX3RleHQueG1sCkBAIC0zOSwxMCArMzksMTEgQEAKICAgICAgICAgPExpbmVhckxheW91dAogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iMGRwIgotICAgICAgICAgICAgYW5kcm9pZDpwYWRkaW5nQm90dG9tPSIxM2RwIgorICAgICAgICAgICAgYW5kcm9pZDpwYWRkaW5nQm90dG9tPSJAZGltZW4vbm90aWZpY2F0aW9uX2NvbnRlbnRfbWFyZ2luX2JvdHRvbSIKICAgICAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCiAgICAgICAgICAgICBhbmRyb2lkOmdyYXZpdHk9InRvcCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMSIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpblRvcD0iMS41ZHAiCiAgICAgICAgICAgICA+CiAgICAgICAgICAgICA8Y29tLmFuZHJvaWQuaW50ZXJuYWwud2lkZ2V0LkltYWdlRmxvYXRpbmdUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL2JpZ190ZXh0IgogICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dEFwcGVhcmFuY2U9IkBzdHlsZS9UZXh0QXBwZWFyYW5jZS5NYXRlcmlhbC5Ob3RpZmljYXRpb24iCkBAIC02Miw2ICs2MywxMyBAQAogICAgICAgICAgICAgICAgIGFuZHJvaWQ6Y29udGVudERlc2NyaXB0aW9uPSJAc3RyaW5nL25vdGlmaWNhdGlvbl93b3JrX3Byb2ZpbGVfY29udGVudF9kZXNjcmlwdGlvbiIKICAgICAgICAgICAgICAgICAvPgogICAgICAgICA8L0xpbmVhckxheW91dD4KKyAgICAgICAgPFZpZXdTdHViIGFuZHJvaWQ6bGF5b3V0PSJAbGF5b3V0L25vdGlmaWNhdGlvbl9tYXRlcmlhbF9yZXBseV90ZXh0IgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvbm90aWZpY2F0aW9uX21hdGVyaWFsX3JlcGx5X2NvbnRhaW5lciIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpblN0YXJ0PSItMTZkcCIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5FbmQ9Ii0xNmRwIgorICAgICAgICAvPgogICAgICAgICA8aW5jbHVkZSBsYXlvdXQ9IkBsYXlvdXQvbm90aWZpY2F0aW9uX21hdGVyaWFsX2FjdGlvbl9saXN0IiAvPgogICAgIDwvTGluZWFyTGF5b3V0PgogICAgIDxpbmNsdWRlIGxheW91dD0iQGxheW91dC9ub3RpZmljYXRpb25fdGVtcGxhdGVfcmlnaHRfaWNvbiIgLz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy9sYXlvdXQvbm90aWZpY2F0aW9uX3RlbXBsYXRlX21hdGVyaWFsX2luYm94LnhtbCBiL2NvcmUvcmVzL3Jlcy9sYXlvdXQvbm90aWZpY2F0aW9uX3RlbXBsYXRlX21hdGVyaWFsX2luYm94LnhtbAppbmRleCA4YzBhYmM5Li4xNGJmODk5IDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvbGF5b3V0L25vdGlmaWNhdGlvbl90ZW1wbGF0ZV9tYXRlcmlhbF9pbmJveC54bWwKKysrIGIvY29yZS9yZXMvcmVzL2xheW91dC9ub3RpZmljYXRpb25fdGVtcGxhdGVfbWF0ZXJpYWxfaW5ib3gueG1sCkBAIC0xMjMsMTMgKzEyMyw2IEBACiAgICAgICAgICAgICBhbmRyb2lkOnZpc2liaWxpdHk9ImdvbmUiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiCiAgICAgICAgICAgICAvPgotICAgICAgICA8RnJhbWVMYXlvdXQKLSAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvaW5ib3hfZW5kX3BhZCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjEzZHAiCi0gICAgICAgICAgICBhbmRyb2lkOnZpc2liaWxpdHk9ImdvbmUiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjAiCi0gICAgICAgIC8+CiAgICAgICAgIDxpbmNsdWRlIGxheW91dD0iQGxheW91dC9ub3RpZmljYXRpb25fbWF0ZXJpYWxfYWN0aW9uX2xpc3QiIC8+CiAgICAgPC9MaW5lYXJMYXlvdXQ+CiAgICAgPGluY2x1ZGUgbGF5b3V0PSJAbGF5b3V0L25vdGlmaWNhdGlvbl90ZW1wbGF0ZV9yaWdodF9pY29uIiAvPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL2xheW91dC9ub3RpZmljYXRpb25fdGVtcGxhdGVfbWF0ZXJpYWxfbWVkaWEueG1sIGIvY29yZS9yZXMvcmVzL2xheW91dC9ub3RpZmljYXRpb25fdGVtcGxhdGVfbWF0ZXJpYWxfbWVkaWEueG1sCmluZGV4IGRjNGFmYjguLmYwY2VkNWYgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy9sYXlvdXQvbm90aWZpY2F0aW9uX3RlbXBsYXRlX21hdGVyaWFsX21lZGlhLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvbGF5b3V0L25vdGlmaWNhdGlvbl90ZW1wbGF0ZV9tYXRlcmlhbF9tZWRpYS54bWwKQEAgLTI5LDcgKzI5LDcgQEAKICAgICA8TGluZWFyTGF5b3V0CiAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvbm90aWZpY2F0aW9uX21haW5fY29sdW1uIgogICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgotICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IkBkaW1lbi9ub3RpZmljYXRpb25fbWluX2NvbnRlbnRfaGVpZ2h0IgorICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSIjMDAwMDAwMDAiCiAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpblN0YXJ0PSJAZGltZW4vbm90aWZpY2F0aW9uX2NvbnRlbnRfbWFyZ2luX3N0YXJ0IgpAQCAtNDMsNiArNDMsNyBAQAogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfZ3Jhdml0eT0iZmlsbF92ZXJ0aWNhbCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMSIKICAgICAgICAgICAgIGFuZHJvaWQ6bWluSGVpZ2h0PSJAZGltZW4vbm90aWZpY2F0aW9uX21pbl9jb250ZW50X2hlaWdodCIKKyAgICAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ0JvdHRvbT0iQGRpbWVuL25vdGlmaWNhdGlvbl9jb250ZW50X21hcmdpbl9ib3R0b20iCiAgICAgICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKICAgICAgICAgICAgID4KICAgICAgICAgICAgIDxpbmNsdWRlIGxheW91dD0iQGxheW91dC9ub3RpZmljYXRpb25fdGVtcGxhdGVfcGFydF9saW5lMSIvPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL2xheW91dC9ub3RpZmljYXRpb25fdGVtcGxhdGVfcGFydF9saW5lMS54bWwgYi9jb3JlL3Jlcy9yZXMvbGF5b3V0L25vdGlmaWNhdGlvbl90ZW1wbGF0ZV9wYXJ0X2xpbmUxLnhtbAppbmRleCBlN2FjNDA4Li4zMDhiMzBmIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvbGF5b3V0L25vdGlmaWNhdGlvbl90ZW1wbGF0ZV9wYXJ0X2xpbmUxLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvbGF5b3V0L25vdGlmaWNhdGlvbl90ZW1wbGF0ZV9wYXJ0X2xpbmUxLnhtbApAQCAtMjAsNyArMjAsNiBAQAogICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKLSAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5Cb3R0b209IjFkcCIKICAgICA+CiAgICAgPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvdGl0bGUiCiAgICAgICAgIGFuZHJvaWQ6dGV4dEFwcGVhcmFuY2U9IkBzdHlsZS9UZXh0QXBwZWFyYW5jZS5NYXRlcmlhbC5Ob3RpZmljYXRpb24uVGl0bGUiCmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvbGF5b3V0L25vdGlmaWNhdGlvbl90ZW1wbGF0ZV9wYXJ0X2xpbmUzLnhtbCBiL2NvcmUvcmVzL3Jlcy9sYXlvdXQvbm90aWZpY2F0aW9uX3RlbXBsYXRlX3BhcnRfbGluZTMueG1sCmluZGV4IDc2MzM3YWMuLmRjNDdhNDggMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy9sYXlvdXQvbm90aWZpY2F0aW9uX3RlbXBsYXRlX3BhcnRfbGluZTMueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy9sYXlvdXQvbm90aWZpY2F0aW9uX3RlbXBsYXRlX3BhcnRfbGluZTMueG1sCkBAIC0yMCwxNyArMjAsMTggQEAKICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCi0gICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXJfdmVydGljYWwiCisgICAgYW5kcm9pZDpncmF2aXR5PSJ0b3AiCiAgICAgPgogICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL3RleHQiCiAgICAgICAgIGFuZHJvaWQ6dGV4dEFwcGVhcmFuY2U9IkBzdHlsZS9UZXh0QXBwZWFyYW5jZS5NYXRlcmlhbC5Ob3RpZmljYXRpb24iCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSIwZHAiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2dyYXZpdHk9ImNlbnRlciIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfZ3Jhdml0eT0idG9wIgogICAgICAgICBhbmRyb2lkOnNpbmdsZUxpbmU9InRydWUiCiAgICAgICAgIGFuZHJvaWQ6ZWxsaXBzaXplPSJtYXJxdWVlIgogICAgICAgICBhbmRyb2lkOmZhZGluZ0VkZ2U9Imhvcml6b250YWwiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpblRvcD0iMS41ZHAiCiAgICAgICAgIC8+CiAgICAgPEltYWdlVmlldyBhbmRyb2lkOmlkPSJAK2lkL3Byb2ZpbGVfYmFkZ2VfbGluZTMiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJAZGltZW4vbm90aWZpY2F0aW9uX2JhZGdlX3NpemUiCmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvbGF5b3V0L3RleHRfZHJhZ190aHVtYm5haWwueG1sIGIvY29yZS9yZXMvcmVzL2xheW91dC90ZXh0X2RyYWdfdGh1bWJuYWlsLnhtbAppbmRleCA2M2QyYzA1Li5iMWE1OGNkIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvbGF5b3V0L3RleHRfZHJhZ190aHVtYm5haWwueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy9sYXlvdXQvdGV4dF9kcmFnX3RodW1ibmFpbC54bWwKQEAgLTEsNiArMSw1IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgogPCEtLQotLyogYXBwcy9jb21tb24vYXNzZXRzL2RlZmF1bHQvZGVmYXVsdC9za2lucy9TdGF0dXNCYXIueG1sCiAqKgogKiogQ29weXJpZ2h0IDIwMTAsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKICoqCmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWFmL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1hZi9zdHJpbmdzLnhtbAppbmRleCAxYWM3ZTk4Li4zNmMxNjdlIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWFmL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtYWYvc3RyaW5ncy54bWwKQEAgLTIyMyw2ICsyMjMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiJTbHVpdCBub3UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+Ijk5OSsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fY2hpbGRyZW5fY291bnRfYnJhY2tldGVkIiBtc2dpZD0iMTc2OTQyNTQ3MzE2ODM0NzgzOSI+Iig8eGxpZmY6ZyBpZD0iTk9USUZJQ0FUSU9OQ09VTlQiPiVkPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4iSW5ob3VkIHZlcnN0ZWVrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4iVmVpbGlnbW9kdXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiJBbmRyb2lkLXN0ZWxzZWwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+IlBlcnNvb25saWsiPC9zdHJpbmc+CkBAIC0zNTMsOCArMzU0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiJMYWF0IGRpZSBwcm9ncmFtIHRvZSBvbSBmb3RvXCdzIGVuIHZpZGVvXCdzIG1ldCBkaWUga2FtZXJhIHRlIG5lZW0uIEhpZXJkaWUgdG9lc3RlbW1pbmcgbGFhdCBkaWUgcHJvZ3JhbSB0b2Ugb20gZGllIGthbWVyYSB0ZSBlbmlnZXIgdHlkIHNvbmRlciBqb3UgYmV2ZXN0aWdpbmcgdGUgZ2VicnVpay4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4iYmVoZWVyIHZpYnJhc2llIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiJMYWF0IGRpZSBwcm9ncmFtIHRvZSBvbSBkaWUgdmlicmF0b3IgdGUgYmVoZWVyLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiJiZWhlZXIgZmxpdHNsaWciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+IkxhYXQgZGllIHByb2dyYW0gdG9lIG9tIGRpZSBmbGl0c2xpZyB0ZSBiZWhlZXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4ic2tha2VsIGZvb25ub21tZXJzIGRpcmVrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+IkxhYXQgZGllIHByb2dyYW0gdG9lIG9tIHRlbGVmb29ubm9tbWVycyBzb25kZXIgam91IHR1c3NlbnRyZWRlIHRlIGJlbC4gRGl0IGthbiB0b3Qgb252ZXJ3YWd0ZSBoZWZmaW5ncyBvZiBvcHJvZXBlIGxlaS4gTGV0IGRhYXJvcCBkYXQgZGl0IG5pZSBkaWUgcHJvZ3JhbSB0b2VsYWF0IG9tIG5vb2Rub21tZXJzIHRlIGJlbCBuaWUuIEt3YWFkd2lsbGlnZSBwcm9ncmFtbWUga2FuIGpvdSBnZWxkIGtvcyBkZXVyIG9wcm9lcGUgc29uZGVyIGpvdSBiZXZlc3RpZ2luZyB0ZSBtYWFrLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiIG1zZ2lkPSIzNTc0OTQzODQ3MTgxNzkzOTE4Ij4idG9lZ2FuZyB0b3Qga2l0c2Jvb2Rza2Fwb3Byb2VwZGllbnMiPC9zdHJpbmc+CkBAIC04NTgsMTAgKzg1NywxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+IlNueSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4iS29waWVlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+IlBsYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXN0ZV9hc19wbGFpbl90ZXh0IiBtc2dpZD0iNTQyNzc5Mjc0MTkwODAxMDY3NSI+IlBsYWsgYXMgc2tvb250ZWtzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiJWZXJ2YW5nLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+IlZlZSB1aXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IktvcGllZXIgVVJMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4iS2llcyB0ZWtzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiJPbnRkb2VuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiJIZXJkb2VuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGV4dFNlbGVjdGlvbkNBQlRpdGxlIiBtc2dpZD0iNTIzNjg1MDM5NDM3MDgyMDM1NyI+IlRla3NrZXVzZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiJWb2VnIGJ5IHdvb3JkZWJvZWsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+IlZlZSB1aXQiPC9zdHJpbmc+CkBAIC0xMTA3LDYgKzExMDksNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4iVmVyYW5kZXIgbXV1cnBhcGllciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+Iktlbm5pc2dld2luZ2x1aXN0ZXJhYXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+IlRvZXN0YW5kdmVyc2thZmZlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9hc3Npc3RhbnRfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjkwOTQ1NjA1NTU2OTEwMjk1MiI+Iktlbm5pc2dld2luZ2Fzc2lzdGVudCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iVlBOIGdlYWt0aXZlZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiJWUE4gaXMgZ2Vha3RpdmVlciBkZXVyIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0IiBtc2dpZD0iMzAxMTMwNjYwNzEyNjQ1MDMyMiI+IlJhYWsgb20gZGllIG5ldHdlcmsgdGUgYmVzdHV1ci4iPC9zdHJpbmc+CkBAIC0xNDQwLDEyICsxNDQzLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4iT3BnZWRhdGVlciBkZXVyIGpvdSBhZG1pbmlzdHJhdGV1ciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4iRGV1ciBqb3UgYWRtaW5pc3RyYXRldXIgdWl0Z2V2ZWUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTk2MDQzMTEyMzgxNjI1MzAzNCI+Ik9tIGJhdHRlcnlsZXdlIHRlIGhlbHAgdmVyYmV0ZXIsIHZlcm1pbmRlciBiYXR0ZXJ5YmVzcGFhcmRlciBqb3UgdG9lc3RlbCBzZSB3ZXJrdmVycmlndGluZyBlbiBiZXBlcmsgdmlicmFzaWUsIGxpZ2dpbmdkaWVuc3RlIGVuIGRpZSBtZWVzdGUgYWd0ZXJncm9uZGRhdGEuIEUtcG9zLCBib29kc2thcHBlIGVuIGFuZGVyIHByb2dyYW1tZSB3YXQgb3Agc2lua3JvbmlzZXJpbmcgc3RhYXRtYWFrLCBzYWwgZGFsayBuaWUgb3BkYXRlZXIgdGVuc3kgankgaHVsbGUgb29wbWFhayBuaWUuXG5cbkJhdHRlcnliZXNwYWFyZGVyIHNrYWtlbCBvdXRvbWF0aWVzIGFmIHdhbm5lZXIgam91IHRvZXN0ZWwgYmVzaWcgaXMgb20gdGUgbGFhaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV90aXRsZSIgbXNnaWQ9Ijc0OTM5ODk3MjI2MTAwMDg3MDAiPiJCZWxhbmdyaWtoZWlkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiJHZWJsb2trZWVyOiBNb2V0IG5vb2l0IGhpZXJkaWUga2VubmlzZ2V3aW5ncyB3eXMgbmllIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNjQ0NzY0MDQ0OTkxODQyNzE4NyI+IkxhYWc6IFd5cyBzb25kZXIga2xhbmsgYWFuIGRpZSBvbmRlcmthbnQgdmFuIGRpZSBrZW5uaXNnZXdpbmdseXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNzk5MTE1NzY5NzYwOTU3NTI3MSI+Ik5vcm1hYWw6IFd5cyBoaWVyZGllIGtlbm5pc2dld2luZ3Mgc29uZGVyIGtsYW5rIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiJIb29nOiBXeXMgYWFuIGRpZSBib2thbnQgdmFuIGRpZSBrZW5uaXNnZXdpbmdzbHlzIGVuIG1hYWsgXCduIGdlbHVpZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiJEcmluZ2VuZDogVmVyc2t5biB2bHVndGlnIG9wIGRpZSBza2VybSBlbiBtYWFrIFwnbiBnZWx1aWQiPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0iemVuX21vZGVfZHVyYXRpb25fbWludXRlc19zdW1tYXJ5IiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNDM2Nzg3NzQwODA3MjAwMDg0OCI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPiUxJGQgbWludXRlIGxhbmsgKHRvdCA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj5FZW4gbWludXV0IGxhbmsgKHRvdCA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8wIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWFtL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1hbS9zdHJpbmdzLnhtbAppbmRleCBkN2IwOGViLi5lYzE2YWRkIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWFtL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtYW0vc3RyaW5ncy54bWwKQEAgLTIyMyw2ICsyMjMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiLhiqDhiIHhipUg4YmG4YiN4Y2NIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiI5OTkrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2NoaWxkcmVuX2NvdW50X2JyYWNrZXRlZCIgbXNnaWQ9IjE3Njk0MjU0NzMxNjgzNDc4MzkiPiIoPHhsaWZmOmcgaWQ9Ik5PVElGSUNBVElPTkNPVU5UIj4lZDwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IuGLreGLmOGJtuGJvSDhibDhi7DhiaXhiYDhi4vhiI0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiLhi6jhiJrhi6vhiLXhibDhiJvhiJ3hipUg4YiB4YqQ4YmzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4iQW5kcm9pZCDhiLXhiK3hi5PhibUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+IuGLqOGMjeGIjSI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IuGImOGJsOGMjeGJoOGIquGLq+GLjSDhiaDhiqvhiJzhiKvhi40g4Y2O4Ym24YuO4Ym94YqV4YqTIOGJquGLsuGLruGLjuGJveGKlSDhiqXhipXhi7Lhi6vhipDhiLMg4Yut4Y2I4YmF4Yu14YiI4Ymz4YiN4Y2iIOGLreGIhSDhjYjhiYPhi7Ug4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGKq+GInOGIq+GLjeGKlSDhiaDhiJvhipXhipvhi43hiJ0g4YyK4YucIOGLq+GIi+GKleGJsCDhiJvhiKjhjIvhjIjhjKsg4Yql4YqV4Yuy4Yyg4YmA4YidIOGLreGNiOGJheGLteGIiOGJs+GIjeGNoiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiLhipDhi5vhiKog4Ymw4YmG4Yyj4Yyg4YitIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiLhipDhi5vhiKrhi43hipUg4YiI4YiY4YmG4Yyj4Yyg4YitIOGIiOGImOGJsOGMjeGJoOGIquGLq+GLjSDhi63hjYjhiYXhi7PhiInhjaIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4i4Yuo4Yml4Yit4YiD4YqV4Yml4YiN4Yyt4YmzIOGJsOGJhuGMo+GMoOGIrSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4i4Yuo4Yml4YiN4Yyt4YmzIOGJpeGIreGIg+GKkeGKlSDhiIjhiJjhiYbhjKPhjKDhiK0g4YiI4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGLreGNiOGJheGLs+GIieGNoiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+IuGJoOGJgOGMpeGJsyDhiLXhiI3hiq0g4YmB4Yyl4Yiu4Ym9IOGLsOGLjeGIjSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQaG9uZSIgbXNnaWQ9IjM3NDA3OTc1NzYxMTM3NjA4MjciPiLhiJjhibDhjI3hiaDhiKrhi6vhi40g4Yur4YiL4YqV4YmwIOGMo+GIjeGJgyDhjIjhiaXhipDhibUg4Yuo4Yi14YiN4YqtIOGJgeGMpeGIruGJvSDhiIvhi60g4Yql4YqV4Yuy4Yuw4YuN4YiNIOGLreGNiOGJheGLteGIiOGJs+GIjeGNoiDhi63hiIUg4Yur4YiN4Ymw4Yyg4Ymg4YmBIOGKreGNjeGLq+GLjuGJveGKlSDhi4jhi63hiJ0g4Yyl4Yiq4YuO4Ym94YqVIOGIiuGLq+GIteGKqOGJteGIjSDhi63hib3hiIvhiI3hjaIg4Yut4YiFIOGImOGJsOGMjeGJoOGIquGLq+GLjSDhi6jhi7XhipXhjIjhibDhipsg4Yi14YiN4YqtIOGJgeGMpeGIruGJveGKlSDhiqXhipXhi7Lhi7Dhi43hiI0g4Yql4YqV4Yuw4Yib4Yut4Y2I4YmF4Yu14YiI4Ym1IOGIjeGJpSDhiaDhiI3hjaIg4Ymw4YqV4Yqu4YiNIOGKoOGLmOGIjSDhiJjhibDhjI3hiaDhiKrhi6vhi47hib0g4Yur4YiL4YqV4YmwIOGIm+GIqOGMi+GMiOGMqyDhjKXhiKrhi47hib3hipUg4Ymg4Yib4Yu14Yio4YyNIOGMiOGKleGLmOGJpSDhiIrhi6vhiLXhi4jhjKHhiIUg4Yut4Ym94YiL4YiJ4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiLhi6jhiqDhi63hiqThiJ3hiqThiLUg4Yyl4YiqIOGKoOGMiOGIjeGMjeGIjuGJteGKlSDhi63hi7DhiK3hiLPhiI0iPC9zdHJpbmc+CkBAIC04NTgsMTAgKzg1NywxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+IuGJgeGIqOGMpSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4i4YyN4YiL4Ymj4YytIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzdGUiIG1zZ2lkPSI1NjI5ODgwODM2ODA1MDM2NDMzIj4i4YiI4Yyl4Y2NIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiLhiqXhipXhi7Ag4Yi14YqQ4YyjIOGKoOGIjeGJoyDhjL3hiIHhjY0g4YiI4Yyl4Y2NIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiLhibDhiqsuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4i4Yiw4Yit4YudIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiLhi6hVUkwg4YmF4YyCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4i4Y2F4YiB4Y2NIOGIneGIqOGMpSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVuZG8iIG1zZ2lkPSI3OTA1Nzg4NTAyNDkxNzQyMzI4Ij4i4YmA4YiN4Yml4Yi1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiLhi7XhjIjhiJ0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4i4Yuo4Y2F4YiB4Y2NIOGIneGIreGMqyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiLhi4jhi7Ag4YiY4Yud4YyI4YmgIOGJg+GIi+GJtSDhiqDhiq3hiI0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+IuGIsOGIreGLnSI8L3N0cmluZz4KQEAgLTExMDcsNiArMTEwOSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiLhiI3hjKPhjY0g4YiI4YuN4YylIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4i4Yib4Yiz4YuI4YmC4YurIOGKoOGLs+GIm+GMrSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbmRpdGlvbl9wcm92aWRlcl9zZXJ2aWNlX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMzIxMzQzMzUyOTA2NTI0NTY0Ij4i4Yuo4YiB4YqU4YmzIOGKoOGJheGIq+GJoiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9hc3Npc3RhbnRfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjkwOTQ1NjA1NTU2OTEwMjk1MiI+IuGLqOGIm+GIs+GLiOGJguGLqyDhiKjhi7PhibUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IlZQTiDhipDhiYXhibfhiI3hjaIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiJWUE4g4YmgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+4YyI4Yml4Yiv4YiNIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4i4Yqg4YuN4Ymz4Yio4YiY4Yio4YmlIOGIiOGIm+GLsOGIq+GMgOGJtSAg4YqV4Yqr4Y2iIjwvc3RyaW5nPgpAQCAtMTQ0MCwxMiArMTQ0Myw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+IuGJoOGKoOGIteGJsOGLs+GLs+GIquGLjiDhibDhi5jhiJ3hipfhiI0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX2RlbGV0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iNzY1MDU3NzM4NzQ5MzEwMTM1MyI+IuGJoOGKpeGIreGIteGLjiDhiqDhiLXhibDhi7Phi7PhiKog4Ymw4Yiw4Yit4Yuf4YiNIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiLhi6jhiaPhibXhiKog4YuV4Yu14Yic4YqVIOGIiOGIm+GIu+GIu+GIjSDhiJvhjIjhi50g4Yql4YqV4Yuy4Ym74YiN4Y2jIOGKouGInOGLreGIjeGNoyDhiJjhiI3hi5Xhiq3hibUg4Yqg4YiL4YiL4YqtIOGKpeGKkyDhiIzhiI7hib0g4Ymg4Yib4YiY4Yiz4Yiw4YiNIOGIi+GLrSDhi6jhiJrhiJjhiKjhiq7hi5kg4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuO4Ym9IOGKpeGIreGIteGLjiDhiqvhiI3hiqjhjYjhibHhi4vhibjhi40g4Ymg4YmA4YitIOGKoOGLreGLmOGIneGKkeGIneGNolxuXG7hi6jhiaPhibXhiKog4YqD4Yut4YiNIOGJhuGMo+GJoiDhi6jhiqXhiK3hiLXhi44g4YiY4Yij4Yiq4YurIOGKg+GLreGIjSDhiaDhiJrhiJ7hiIvhiaDhibUg4YyK4YucIOGJoOGIq+GItS3hiLDhiK0g4Yut4Yyg4Y2L4YiN4Y2iIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfdGl0bGUiIG1zZ2lkPSI3NDkzOTg5NzIyNjEwMDA4NzAwIj4i4Yqg4Yi14Y2I4YiL4YyK4YqQ4Ym1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiLhi6jhibPhjIjhi7DhjaYg4Yql4YqQ4Yqd4YiF4YqVIOGIm+GIs+GLiOGJguGLq+GLjuGJvSDhjYjhjYXhiJ4g4Yqg4Ymz4Yiz4YutIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNjQ0NzY0MDQ0OTkxODQyNzE4NyI+IuGLneGJheGJsOGKm+GNpiDhiaDhjLjhjKXhibMg4Yuo4Yib4Yiz4YuI4YmC4YurIOGLneGIreGLneGIrSDhi6jhibPhib3hipvhi43hipUg4Yqt4Y2N4YiNIOGKoOGIs+GLrSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI3OTkxMTU3Njk3NjA5NTc1MjcxIj4i4YiY4Yuw4Ymg4Yqb4Y2mIOGJoOGMuOGMpeGJsyDhiqXhipDhip3hiIXhipUg4Yib4Yiz4YuI4YmC4Yur4YuO4Ym9IOGKoOGIs+GLrSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMTUyMjM4NjM3NzM3MjE1NjU0Ij4i4Yqo4Y2N4Ymw4Yqb4Y2mIOGLqOGIm+GIs+GLiOGJguGLq+GLjuGJveGKlSDhi53hiK3hi53hiK0g4Yuo4YiL4Yut4Yqb4YuN4YqVIOGKreGNjeGIjSDhiqDhiLPhi60g4Yql4YqTIOGLteGIneGNhSDhiqDhiLDhiJsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSIxMTUzNjkzMDgwNDY3OTA0NDc0Ij4i4Yqg4Yi14Ym44Yqz4Yut4Y2mIOGLiOGLsCDhjIjhjLgg4Yib4Yur4YuNIOGKoOGKleGIsyDhiqXhipMg4Yu14Yid4Y2FIOGJheGLsyI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPuGIiCUxJGQg4Yuw4YmC4YmD4YuO4Ym9ICjhiqXhiLXhiqggPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4g4Yu14Yio4Yi1KTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+4YiIJTEkZCDhi7DhiYLhiYPhi47hib0gKOGKpeGIteGKqCA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPiDhi7XhiKjhiLUpPC9pdGVtPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1hci9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtYXIvc3RyaW5ncy54bWwKaW5kZXggYzE4ZmM0YS4uMTJlZjc1OSAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1hci9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWFyL3N0cmluZ3MueG1sCkBAIC0yMjcsNiArMjI3LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9ja2Rvd24iIG1zZ2lkPSI4NzUxNTQyNTE0NzI0MzMyODczIj4i2YLZgdmEINin2YTYotmGIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiI5OTkrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2NoaWxkcmVuX2NvdW50X2JyYWNrZXRlZCIgbXNnaWQ9IjE3Njk0MjU0NzMxNjgzNDc4MzkiPiIoPHhsaWZmOmcgaWQ9Ik5PVElGSUNBVElPTkNPVU5UIj4lZDwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+Itin2YTZhdit2KrZiNmK2KfYqiDZhdiu2YHZitipIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4i2KfZhNmI2LbYuSDYp9mE2KLZhdmGIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4i4oCP2YbYuNin2YUgQW5kcm9pZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4i2LTYrti12YoiPC9zdHJpbmc+CkBAIC0zNTcsOCArMzU4LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYp9mE2KrZgtin2Lcg2LXZiNixINmI2YXZgtin2LfYuSDZgdmK2K/ZitmIINmF2YYg2K7ZhNin2YQg2KfZhNmD2KfZhdmK2LHYpy4g2YjZitiq2YrYrSDZh9iw2Kcg2KfZhNil2LDZhiDZhNmE2KrYt9io2YrZgiDYp9iz2KrYrtiv2KfZhSDYp9mE2YPYp9mF2YrYsdinINmB2Yog2KPZiiDZiNmC2Kog2YjYqNiv2YjZhiDZhdmI2KfZgdmC2Kkg2YXZhtmDLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiLYp9mE2KrYrdmD2YUg2YHZiiDYp9mE2KfZh9iq2LLYp9iyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYp9mE2KrYrdmD2YUg2YHZiiDYp9mE2YfYstmR2KfYsi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4i2KfZhNiq2K3Zg9mFINmB2Yog2KfZhNi22YjYoSDYp9mE2YjYp9mF2LYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNin2YTYqtit2YPZhSDZgdmKINin2YTYttmI2KEg2KfZhNmI2KfZhdi2LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+Itin2KrYtdin2YQg2YXYqNin2LTYsSDYqNij2LHZgtin2YUg2KfZhNmH2YjYp9iq2YEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2LfZhNioINij2LHZgtin2YUg2YfYp9iq2YHZitipINio2K/ZiNmGINiq2K/YrtmEINmF2YbZgy4g2YjZgtivINmK2KTYr9mKINiw2YTZgyDYpdmE2Ykg2KrYrdmF2YQg2LHYs9mI2YUg2LrZitixINmF2KrZiNmC2LnYqSDYo9mIINil2KzYsdin2KEg2YXZg9in2YTZhdin2Kog2LrZitixINmF2KrZiNmC2LnYqS4g2YjZhdmGINin2YTYrNiv2YrYsSDYqNin2YTYsNmD2LEg2KPZhiDYsNmE2YMg2YTYpyDZitiq2YrYrSDZhNmE2KrYt9io2YrZgiDYp9mE2KfYqti12KfZhCDYqNij2LHZgtin2YUg2KfZhNi32YjYp9ix2KYuINmI2YLYryDYqtik2K/ZiiDYp9mE2KrYt9io2YrZgtin2Kog2KfZhNi22KfYsdipINil2YTZiSDYqtit2YXZhNmDINiq2YPYp9mE2YrZgSDZhdin2YTZitipINmF2YYg2K7ZhNin2YQg2KXYrNix2KfYoSDZhdmD2KfZhNmF2KfYqiDYqNiv2YjZhiDZhdmI2KfZgdmC2Kkg2YXZhtmDLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiIG1zZ2lkPSIzNTc0OTQzODQ3MTgxNzkzOTE4Ij4i2KfZhNmI2LXZiNmEINil2YTZiSDYrtiv2YXYqSDYp9mE2KfYqti12KfZhCDYudio2LEg2KfZhNix2LPYp9im2YQg2KfZhNmB2YjYsdmK2KkiPC9zdHJpbmc+CkBAIC04NzgsMTAgKzg3NywxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+ItmC2LUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+ItmG2LPYriI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+ItmE2LXZgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4i2KfZhNmE2LXZgiDZg9mG2LUg2LnYp9iv2YoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXBsYWNlIiBtc2dpZD0iNTc4MTY4NjA1OTA2MzE0ODkzMCI+Itin2LPYqtio2K/Yp9mELi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+Itit2LDZgSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4i4oCP2YbYs9iuINi52YbZiNin2YYgVVJMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4i2KrYrdiv2YrYryDZhti1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiLYqtix2KfYrNi5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiLYpdi52KfYr9ipIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGV4dFNlbGVjdGlvbkNBQlRpdGxlIiBtc2dpZD0iNTIzNjg1MDM5NDM3MDgyMDM1NyI+Itiq2K3Yr9mK2K8g2KfZhNmG2LUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4i2KXYttin2YHYqSDYpdmE2Ykg2KfZhNmC2KfZhdmI2LMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+Itit2LDZgSI8L3N0cmluZz4KQEAgLTExMzUsNiArMTEzNyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiLYqti62YrZitixINin2YTYrtmE2YHZitipIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4i2KjYsdmG2KfZhdisINiq2YTZgtmR2Yog2KfZhNil2LTYudin2LHYp9iqINin2YTYtdmI2KrZitipIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiLZhdmI2YHYsSDYp9mE2K3Yp9mE2KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiLZhdiz2KfYudivINin2YTYpdi02LnYp9ixIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiLigI/YqtmFINiq2YbYtNmK2Lcg2KfZhNi02KjZg9ipINin2YTYuNin2YfYsdmK2Kkg2KfZhNiu2KfYtdipIChWUE4pIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4i4oCP2KrZhSDYqtmG2LTZiti3IFZQTiDYqNmI2KfYs9i32KkgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4i2KfZhNmF2LMg2YTYpdiv2KfYsdipINin2YTYtNio2YPYqS4iPC9zdHJpbmc+CkBAIC0xNDc2LDEyICsxNDc5LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4i2KrZhSDYp9mE2KrYrdiv2YrYqyDYqNmI2KfYs9i32Kkg2KfZhNmF2LTYsdmBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiLYqtmFINit2LDZgSDYp9mE2K3YstmF2Kkg2LnZhiDYt9ix2YrZgiDYp9mE2YXYtNix2YEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTk2MDQzMTEyMzgxNjI1MzAzNCI+ItmE2YTZhdiz2KfYudiv2Kkg2YHZiiDYqtit2LPZitmGINi52YXYsSDYp9mE2KjYt9in2LHZitip2Iwg2YrYs9in2LnYryDZhdmI2YHYsSDYp9mE2KjYt9in2LHZitipINmB2Yog2KrZgtmE2YrZhCDYo9iv2KfYoSDYp9mE2KzZh9in2LIg2YjZitmB2LHYtiDZgtmK2K/Zi9inINi52YTZiSDYp9mE2KfZh9iq2LLYp9iyINmI2K7Yr9mF2KfYqiDYp9mE2YXZiNmC2Lkg2YjZhdi52LjZhSDYqNmK2KfZhtin2Kog2KfZhNiu2YTZgdmK2KkuINmC2K8g2YTYpyDZitiq2YUg2KrYrdiv2YrYqyDYp9mE2KjYsdmK2K8g2KfZhNil2YTZg9iq2LHZiNmG2Yog2YjYp9mE2YXYsdin2LPZhNipINmI2KfZhNiq2LfYqNmK2YLYp9iqINin2YTYo9iu2LHZiSDYp9mE2KrZiiDYqti52KrZhdivINi52YTZiSDYp9mE2YXYstin2YXZhtipINmF2Kcg2YTZhSDYqtmB2KrYrdmH2KcuXG5cbtmK2KrZhSDYpdmK2YLYp9mBINmF2YjZgdixINin2YTYqNi32KfYsdmK2Kkg2KrZhNmC2KfYptmK2YvYpyDYo9ir2YbYp9ihINi02K3ZhiDYp9mE2KzZh9in2LIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfdGl0bGUiIG1zZ2lkPSI3NDkzOTg5NzIyNjEwMDA4NzAwIj4i2KfZhNij2YfZhdmK2KkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iNzExODgyNjkwMDc2NzA0NzEyNSI+ItmF2K3YuNmI2LE6INi52K/ZhSDYudix2LYg2YfYsNmHINin2YTYpdi02LnYp9ix2KfYqiDZhdi32YTZgtmL2KciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4i2YXZhtiu2YHYtiDYp9mE2KPZh9mF2YrYqTog2LnYsdi2INio2KPYs9mB2YQg2YLYp9im2YXYqSDYp9mE2KXYtNi52KfYsdin2Kog2YjYqNiv2YjZhiDYqtmG2KjZitmHINi12YjYqtmKIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiLYudin2K/Zijog2LnYsdi2INmH2LDZhyDYp9mE2KXYtNi52KfYsdin2Kog2KjYr9mI2YYg2KrZhtio2YrZhyDYtdmI2KrZiiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMTUyMjM4NjM3NzM3MjE1NjU0Ij4i2LnYp9mE2Yog2KfZhNij2YfZhdmK2Kk6INi52LHYtiDYqNij2LnZhNmJINmC2KfYptmF2Kkg2KfZhNil2LTYudin2LHYp9iqINmF2Lkg2KXYtdiv2KfYsSDYqtmG2KjZitmHINi12YjYqtmKIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+Iti52KfYrNmEOiDYp9mE2LjZh9mI2LEg2LPYsdmK2LnZi9inINi52YTZiSDYp9mE2LTYp9i02Kkg2YXYuSDYpdi12K/Yp9ixINiq2YbYqNmK2Ycg2LXZiNiq2YoiPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0iemVuX21vZGVfZHVyYXRpb25fbWludXRlc19zdW1tYXJ5IiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNDM2Nzg3NzQwODA3MjAwMDg0OCI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0iemVybyI+4oCP2YTZhdiv2Kkg2KPZgtmEINmF2YYg2K/ZgtmK2YLYqSAoJTEkZCnCoCjYrdiq2YkgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9InR3byI+4oCP2YTZhdiv2Kkg2K/ZgtmK2YLYqtmK2YbCoCglMSRkKSAo2K3YqtmJIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtYXotckFaL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1hei1yQVovc3RyaW5ncy54bWwKaW5kZXggNWRlMGI1OS4uN2YwZTZkNyAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1hei1yQVovc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1hei1yQVovc3RyaW5ncy54bWwKQEAgLTIyMyw2ICsyMjMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiLEsG5kaSBraWxpZGzJmXlpbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJNyZl6bXVuIGdpemxpZGlyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4iVMmZaGzDvGvJmXNpeiByZWppbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+IkFuZHJvaWQgc2lzdGVtaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4ixZ7JmXhzaSI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IlTJmXRiaXHJmSBrYW1lcmEgaWzJmSDFn8mZa2lsIHbJmSB2aWRlbyDDp8mZa23JmXnJmSBpbWthbiB5YXJhZMSxci4gQnUgaWNhesmZIHTJmXRiaXHJmSBzaXppbiB0yZlzZGlxaW5peiBvbG1hZGFuIGthbWVyYWRhbiBpc3RpZmFkyZkgaWNhesmZc2kgdmVyaXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl92aWJyYXRlIiBtc2dpZD0iNzY5NjQyNzAyNjA1NzcwNTgzNCI+InZpYnJhc2l5YXlhIG7JmXphcsmZdCBlZGlyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiJUyZl0YmlxyZkgdmlicmF0b3J1IGlkYXLJmSBldG3JmSBpY2F6yZlzaSB2ZXJpci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4iRmxhc2ggacWfxLHEn8SxbsSxIGlkYXLJmSBlZGlyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiJUyZl0YmlxyZkgc2lxbmFsIGnFn8SxxJ/EsSBuYSBuyZl6YXLJmXQgZXRtyZl5yZkgaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4idGVsZWZvbiBuw7ZtcsmZbMmZcmluyZkgYmlyYmHFn2EgesmZbmcgZWRpciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQaG9uZSIgbXNnaWQ9IjM3NDA3OTc1NzYxMTM3NjA4MjciPiJUyZl0YmlxyZkgU2l6aW4gbcO8ZGF4aWzJmW5peiBvbG1hZGFuIHRlbGVmb24gesmZbmdsyZlyaSBldG3JmXnJmSBpbWthbiB2ZXJpci4gWsmZcsmZcmxpIHTJmXRiaXFsyZlyIFNpemTJmW4geMmZYsmZcnNpeiDFn8mZa2lsZMmZIG3DvHh0yZlsaWYgesmZbmdsyZlyIGVkyZlyyZlrLCBTaXrJmSBtYWRkaSB6aXlhbiB2dXJhIGJpbMmZci4gUWV5ZDogQnUsIHTJmXRiaXFsyZlyyZkgdMmZY2lsaSBuw7ZtcsmZbMmZcsmZIHrJmW5nIGV0bcmZecmZIGljYXrJmSB2ZXJtaXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiJJTVMgesmZbmcgeGlkbcmZdGluyZkgZ2lyacWfIjwvc3RyaW5nPgpAQCAtODU4LDEwICs4NTcsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiJLyZlzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weSIgbXNnaWQ9IjI2ODE5NDYyMjk1MzM1MTE5ODciPiJLb3B5YWxhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzdGUiIG1zZ2lkPSI1NjI5ODgwODM2ODA1MDM2NDMzIj4iWWVybMmZxZ9kaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXN0ZV9hc19wbGFpbl90ZXh0IiBtc2dpZD0iNTQyNzc5Mjc0MTkwODAxMDY3NSI+IkFkaSBtyZl0biBraW1pIGvDtsOnw7xyw7xuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiLGj3bJmXogZXQuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4iU2lsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiJVUkwga29weWFsYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+Ik3JmXRuIHNlw6dpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVuZG8iIG1zZ2lkPSI3OTA1Nzg4NTAyNDkxNzQyMzI4Ij4iTMmZxJ92IGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+IlllbmlkyZluIGVkaW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4iTcmZdG4gc2XDp2ltaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiJMw7zEn8mZdMmZIMmZbGF2yZkgZXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+IlNpbCI8L3N0cmluZz4KQEAgLTExMDcsNiArMTEwOSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiJEaXZhciBrYcSfxLF6xLFuxLEgZMmZeWnFn2luIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4iQmlsZGlyacWfIGRpbmzJmXnJmW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+IsWeyZlyYWl0IHByb3ZheWRlcmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiJCaWxkaXJpxZ8ga8O2bcmZa8OnaXNpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJWUE4gYWt0aXZsyZnFn2RpcmlsZGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiJWUE4gPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IHTJmXLJmWZpbmTJmW4gYWt0aXZsyZnFn2RpcmlsaWIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiLFnsmZYsmZa8mZbmkgaWRhcsmZIGV0bcmZayDDvMOnw7xuIHRveHVudW4uIjwvc3RyaW5nPgpAQCAtMTQ0MCwxMiArMTQ0Myw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+IlNpemluIGFkbWluaXN0cmF0b3IgdMmZcsmZZmluZMmZbiB5ZW5pbMmZbmRpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiJBZG1pbmlzdHJhdG9ydW51eiB0yZlyyZlmaW5kyZluIHNpbGluaWIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTk2MDQzMTEyMzgxNjI1MzAzNCI+IkJhdGFyZXlhbsSxbiBpc3Rpc21hciBtw7xkZMmZdGluaSB0yZlrbWlsbMmZxZ9kaXJtyZlrIMO8w6fDvG4gYmF0YXJleWEgccmZbmHJmXRpIGNpaGF6xLFuxLF6xLFuIG3JmWhzdWxkYXJsxLHEn8SxbsSxIGF6YWxkxLFyIHbJmSB0aXRyyZl0bcmZLCBtyZlrYW4geGlkbcmZdGzJmXJpIHbJmSDJmW4gc29uIGZvbiBtyZlsdW1hdGxhcsSxbsSxIG3JmWhkdWRsYcWfZMSxcsSxci4gU2lueHJvbmxhxZ9tYXlhIGFyeGF5xLFuIG9sYW4gZS1wb8OndCwgbWVzYWpsYcWfbWEgdsmZIGRpZ8mZciBwcm9xcmFtbGFyIHNpeiBvbmxhcsSxIGHDp21heWFuYSBraW1pIHllbmlsyZlubcmZecmZIGJpbMmZci5cblxuQ2loYXrEsW7EsXogZG9sZHVydWxhbiB6YW1hbiBiYXRhcmV5YSBxyZluYcmZdGkgYXZ0b21hdGlrIG9sYXJhcSBzw7Zuw7xyLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX3RpdGxlIiBtc2dpZD0iNzQ5Mzk4OTcyMjYxMDAwODcwMCI+IsaPaMmZbWl5ecmZdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSI3MTE4ODI2OTAwNzY3MDQ3MTI1Ij4iQmxvayBlZGlsZGk6IEJ1IGJpbGRpcmnFn2zJmXJpIGhlw6cgdmF4dCBnw7ZzdMmZcm3JmXlpbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjY0NDc2NDA0NDk5MTg0MjcxODciPiJBbMOnYXE6IEJpbGRpcmnFn2zJmXIgc2l5YWjEsXPEsW7EsW4gYcWfYcSfxLFzxLFuZGEgc8mZc3NpeiBnw7ZzdMmZcmluIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiJOb3JtYWw6IEJ1IGJpbGRpxZ9syZlyaSBzyZlzc2l6IGfDtnN0yZlyaW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzE1MjIzODYzNzczNzIxNTY1NCI+IlnDvGtzyZlrOiBCaWxkaXJpxZ9syZlyIHNpeWFoxLFzxLFuZGEgeXV4YXLEsWRhIGfDtnN0yZlyaW4gdsmZIHPJmXNsaSBlZGluIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+IlTJmWNpbGk6IEVrcmFuZGEgbsmZesmZciBzYWzEsW4gdsmZIHPJmXNsaSBlZGluIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj4gJTEkZCBkyZlxaXHJmWxpayAoc2FhdCA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPiByYWTJmXNpbsmZIHHJmWTJmXIpPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+QmlyIGTJmXFpccmZbGlrIChzYWF0IDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzAiPiUyJHM8L3hsaWZmOmc+IHJhZMmZc2luyZkgccmZZMmZcik8L2l0ZW0+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWIrc3IrTGF0bi9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtYitzcitMYXRuL3N0cmluZ3MueG1sCmluZGV4IDg4NzFiYmMuLmFjNWNlNjYgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtYitzcitMYXRuL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtYitzcitMYXRuL3N0cmluZ3MueG1sCkBAIC0yMjQsNiArMjI0LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9ja2Rvd24iIG1zZ2lkPSI4NzUxNTQyNTE0NzI0MzMyODczIj4iWmFrbGp1xI1haiBvZG1haCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJTYWRyxb5haiBqZSBzYWtyaXZlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+IkJlemJlZG5pIHJlxb5pbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+IkFuZHJvaWQgc2lzdGVtIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNlcl9vd25lcl9sYWJlbCIgbXNnaWQ9IjI4MDQzNTE4OTgwMDEwMzg5NTEiPiJMacSNbm8iPC9zdHJpbmc+CkBAIC0zNTQsOCArMzU1LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiJEb3p2b2xqYXZhIGFwbGlrYWNpamkgZGEgc25pbWEgc2xpa2UgaSB2aWRlbyBzbmlta2Uga2FtZXJvbS4gT3ZhIGRvenZvbGEgb21vZ3XEh2F2YSBhcGxpa2FjaWppIGRhIHUgYmlsbyBrb20gdHJlbnV0a3Uga29yaXN0aSBrYW1lcnUgYmV6IHZhxaFlIHBvdHZyZGUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl92aWJyYXRlIiBtc2dpZD0iNzY5NjQyNzAyNjA1NzcwNTgzNCI+ImtvbnRyb2xhIHZpYnJhY2lqZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4iRG96dm9samF2YSBhcGxpa2FjaWppIGRhIGtvbnRyb2xpxaFlIHZpYnJhY2lqdS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4ia29udHJvbGEgb3N2ZXRsamVuamEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+IkRvenZvbGphdmEgYXBsaWthY2lqaSBkYSBrb250cm9sacWhZSBibGljLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+ImRpcmVrdG5vIHBveml2YW5qZSBicm9qZXZhIHRlbGVmb25hIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+IkRvenZvbGphdmEgYXBsaWthY2lqaSBkYSBwb3ppdmEgYnJvamV2ZSB0ZWxlZm9uYSBiZXogdmHFoWUgZG96dm9sZS4gT3ZvIG1vxb5lIGRhIGRvdmVkZSBkbyBuZW/EjWVraXZhbmloIHRyb8Wha292YSBpbGkgcG96aXZhLiBJbWFqdGUgbmEgdW11IGRhIG92byBuZSBkb3p2b2xqYXZhIGFwbGlrYWNpamkgZGEgcG96aXZhIGJyb2pldmUgemEgaGl0bmUgc2x1xI1hamV2ZS4gWmxvbmFtZXJuZSBhcGxpa2FjaWplIG1vZ3UgZGEgcG96aXZhanUgYmV6IHZhxaFlIHBvdHZyZGUsIMWhdG8gbW/FvmUgZGEgZG92ZWRlIGRvIHRyb8Wha292YS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ltc0NhbGxTZXJ2aWNlIiBtc2dpZD0iMzU3NDk0Mzg0NzE4MTc5MzkxOCI+InByaXN0dXAgdXNsdXppIHBveml2YSBwb21vxId1IHJhem1lbmUgdHJlbnV0bmloIHBvcnVrYSI8L3N0cmluZz4KQEAgLTg2MywxMCArODYyLDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJjdXQiIG1zZ2lkPSIzMDkyNTY5NDA4NDM4NjI2MjYxIj4iSXNlY2kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+IktvcGlyYWoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiJOYWxlcGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXN0ZV9hc19wbGFpbl90ZXh0IiBtc2dpZD0iNTQyNzc5Mjc0MTkwODAxMDY3NSI+Ik5hbGVwaSBrYW8gb2JpxI1hbiB0ZWtzdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4iWmFtZW5pLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+Ikl6YnJpxaFpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiJLb3BpcmFqIFVSTCBhZHJlc3UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiJJemFiZXJpIHRla3N0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiJPcG96b3ZpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiJQb25vdmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4iSXpib3IgdGVrc3RhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWRkVG9EaWN0aW9uYXJ5IiBtc2dpZD0iNDM1MjE2MTUzNDUxMDA1Nzg3NCI+IkRvZGFqIHUgcmXEjW5payI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4iSXpicmnFoWkiPC9zdHJpbmc+CkBAIC0xMTE0LDYgKzExMTYsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4iUHJvbWVuYSBwb3phZGluZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+Ik1vbml0b3Igb2JhdmXFoXRlbmphIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiJEb2JhdmxqYcSNIHVzbG92YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9hc3Npc3RhbnRfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjkwOTQ1NjA1NTU2OTEwMjk1MiI+IlBvbW/Eh25payB6YSBvYmF2ZcWhdGVuamEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IlZQTiBqZSBha3RpdmlyYW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiJBcGxpa2FjaWphIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiBqZSBha3RpdmlyYWxhIFZQTiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0IiBtc2dpZD0iMzAxMTMwNjYwNzEyNjQ1MDMyMiI+IkRvZGlybml0ZSBkYSBiaXN0ZSB1cHJhdmxqYWxpIG1yZcW+b20uIjwvc3RyaW5nPgpAQCAtMTQ0OSwxMiArMTQ1Miw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+IkHFvnVyaXJhbyBqZSBhZG1pbmlzdHJhdG9yIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiJJemJyaXNhbyBqZSB2YcWhIGFkbWlpc3RyYXRvciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4iRGEgYmkgcHJvZHXFvmlsYSB2cmVtZSB0cmFqYW5qYSBiYXRlcmlqZSwgdcWhdGVkYSBiYXRlcmlqZSBzbWFuanVqZSBwZXJmb3JtYW5zZSB1cmXEkWFqYSBpIG9ncmFuacSNYXZhIHZpYnJhY2lqdSwgdXNsdWdlIGxva2FjaWplIGkgdmXEh2ludSBwb3phZGluc2tpaCBwb2RhdGFrYS4gSW1lamwsIHJhem1lbmEgcG9ydWthIGkgZHJ1Z2UgYXBsaWthY2lqZSBrb2plIHNlIG9zbGFuamFqdSBuYSBzaW5ocm9uaXphY2lqdSBtb8W+ZGEgbmXEh2UgZGEgc2UgYcW+dXJpcmFqdSBha28gaWggbmUgb3R2b3JpdGUuXG5cblXFoXRlZGEgYmF0ZXJpamUgc2UgYXV0b21hdHNraSBpc2tsanXEjXVqZSBrYWRhIHNlIHVyZcSRYWogcHVuaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV90aXRsZSIgbXNnaWQ9Ijc0OTM5ODk3MjI2MTAwMDg3MDAiPiJWYcW+bm9zdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSI3MTE4ODI2OTAwNzY3MDQ3MTI1Ij4iQmxva2lyYW5hOiBPdmEgb2JhdmXFoXRlbmphIHNlIG5pa2FkYSBuZSBwcmlrYXp1anUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4iTmlza2E6IFByaWthenVqdSBzZSB1IGRudSBsaXN0ZSBvYmF2ZcWhdGVuamEgYmV6IHp2dWthIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiJVb2JpxI1hamVuYTogT3ZhIG9iYXZlxaF0ZW5qYSBzZSBwcmlrYXp1anUgYmV6IHp2dWthIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiJWaXNva2E6IFByaWthenVqdSBzZSB1IHZyaHUgbGlzdGUgb2JhdmXFoXRlbmphIGkgYWt0aXZpcmEgc2UgenZ1xI1uaSBzaWduYWwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSIxMTUzNjkzMDgwNDY3OTA0NDc0Ij4iSGl0bmE6IE5ha3JhdGtvIHNlIHByaWthenVqdSBuYSBla3JhbnUgaSBha3RpdmlyYSBzZSB6dnXEjW5pIHNpZ25hbCI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPiUxJGQgbWludXQgKGRvIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJmZXciPiUxJGQgbWludXRhIChkbyA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWJnL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1iZy9zdHJpbmdzLnhtbAppbmRleCBmYzAzMTdhLi4zMDFlMWUzIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWJnL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtYmcvc3RyaW5ncy54bWwKQEAgLTIyMyw2ICsyMjMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiLQl9Cw0LrQu9GO0YfQstCw0L3QtSDRgdC10LPQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLQodC60YDQuNGC0L4g0YHRitC00YrRgNC20LDQvdC40LUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiLQkdC10LfQvtC/0LDRgdC10L0g0YDQtdC20LjQvCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+ItCh0LjRgdGC0LXQvNC90L4g0L7RgiBBbmRyb2lkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNlcl9vd25lcl9sYWJlbCIgbXNnaWQ9IjI4MDQzNTE4OTgwMDEwMzg5NTEiPiLQm9C40YfQtdC9Ijwvc3RyaW5nPgpAQCAtMzUzLDggKzM1NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4i0KDQsNC30YDQtdGI0LDQstCwINC90LAg0L/RgNC40LvQvtC20LXQvdC40LXRgtC+INC00LAg0L/RgNCw0LLQuCDRgdC90LjQvNC60Lgg0Lgg0LLQuNC00LXQvtC60LvQuNC/0L7QstC1INGBINC60LDQvNC10YDQsNGC0LAuINCi0L7QstCwINGA0LDQt9GA0LXRiNC10L3QuNC1INC80YMg0L/QvtC30LLQvtC70Y/QstCwINC00LAg0Y8g0LjQt9C/0L7Qu9C30LLQsCDQv9C+INCy0YHRj9C60L4g0LLRgNC10LzQtSDQsdC10Lcg0L/QvtGC0LLRitGA0LbQtNC10L3QuNC1INC+0YIg0LLQsNGI0LAg0YHRgtGA0LDQvdCwLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiLQutC+0L3RgtGA0L7Qu9C40YDQsNC90LUg0L3QsCDQstC40LHRgNC40YDQsNC90LXRgtC+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiLQoNCw0LfRgNC10YjQsNCy0LAg0L3QsCDQv9GA0LjQu9C+0LbQtdC90LjQtdGC0L4g0LTQsCDQutC+0L3RgtGA0L7Qu9C40YDQsCDRg9GB0YLRgNC+0LnRgdGC0LLQvtGC0L4g0LfQsCDQstC40LHRgNCw0YbQuNGPLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiLQutC+0L3RgtGA0L7Qu9C40YDQsNC90LUg0L3QsCDRhNC10L3QtdGA0YfQtdGC0L4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+ItCg0LDQt9GA0LXRiNCw0LLQsCDQvdCwINC/0YDQuNC70L7QttC10L3QuNC10YLQviDQtNCwINC60L7QvdGC0YDQvtC70LjRgNCwINGE0LXQvdC10YDRh9C10YLQvi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiLQtNC40YDQtdC60YLQvdC+INC+0LHQsNC20LTQsNC90LUg0LTQviDRgtC10LvQtdGE0L7QvdC90Lgg0L3QvtC80LXRgNCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+ItCg0LDQt9GA0LXRiNCw0LLQsCDQvdCwINC/0YDQuNC70L7QttC10L3QuNC10YLQviDQtNCwINGB0LUg0L7QsdCw0LbQtNCwINCx0LXQtyDQstCw0YjQsCDQvdCw0LzQtdGB0LAg0LTQviDRgtC10LvQtdGE0L7QvdC90Lgg0L3QvtC80LXRgNCwLCDQutC+0LXRgtC+INC80L7QttC1INC00LAg0LTQvtCy0LXQtNC1INC00L4g0L3QtdC+0YfQsNC60LLQsNC90L4g0YLQsNC60YHRg9Cy0LDQvdC1INC40LvQuCDQvtCx0LDQttC00LDQvdC40Y8uINCe0LHRitGA0L3QtdGC0LUg0LLQvdC40LzQsNC90LjQtSwg0YfQtSDRgtC+0LLQsCDQvdC1INC80YMg0L/QvtC30LLQvtC70Y/QstCwINC00LAg0LjQt9Cy0YrRgNGI0LLQsCDQvtCx0LDQttC00LDQvdC40Y8g0LTQviDRgdC/0LXRiNC90LjRgtC1INGB0LvRg9C20LHQuC4g0JfQu9C+0L3QsNC80LXRgNC10L3QuNGC0LUg0L/RgNC40LvQvtC20LXQvdC40Y8g0LzQvtCz0LDRgiDQtNCwINCy0Lgg0LLRitCy0LvQtdC60LDRgiDQsiDRgNCw0LfRhdC+0LTQuCwg0LrQsNGC0L4g0LjQt9Cy0YrRgNGI0LLQsNGCINC+0LHQsNC20LTQsNC90LjRjyDQsdC10Lcg0L/QvtGC0LLRitGA0LbQtNC10L3QuNC1INC+0YIg0LLQsNGI0LAg0YHRgtGA0LDQvdCwLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiIG1zZ2lkPSIzNTc0OTQzODQ3MTgxNzkzOTE4Ij4i0LTQvtGB0YLRitC/INC00L4g0YPRgdC70YPQs9Cw0YLQsCDQt9CwINC90LXQt9Cw0LHQsNCy0L3QuCDRgdGK0L7QsdGJ0LXQvdC40Y8g0LfQsCDQvtCx0LDQttC00LDQvdC40Y8iPC9zdHJpbmc+CkBAIC04NTgsMTAgKzg1NywxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+ItCY0LfRgNGP0LfQstCw0L3QtSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4i0JrQvtC/0LjRgNCw0L3QtSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+ItCf0L7RgdGC0LDQstGP0L3QtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4i0J/QvtGB0YLQsNCy0Y/QvdC1INC60LDRgtC+INC90LXRhNC+0YDQvNCw0YLQuNGA0LDQvSDRgtC10LrRgdGCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiLQl9Cw0LzRj9C90LAuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4i0JjQt9GC0YDQuNCy0LDQvdC1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiLQmtC+0L/QuNGA0LDQvdC1INC90LAgVVJMINCw0LTRgNC10YHQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+ItCY0LfQsdC+0YAg0L3QsCDRgtC10LrRgdGCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiLQntGC0LzRj9C90LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+ItCS0YrQt9GB0YLQsNC90L7QstGP0LLQsNC90LUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4i0JjQt9Cx0LjRgNCw0L3QtSDQvdCwINGC0LXQutGB0YIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4i0JTQvtCx0LDQstGP0L3QtSDQsiDRgNC10YfQvdC40LrQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4i0JjQt9GC0YDQuNCy0LDQvdC1Ijwvc3RyaW5nPgpAQCAtMTEwNyw2ICsxMTA5LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+ItCf0YDQvtC80Y/QvdCwINC90LAg0YLQsNC/0LXRgtCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4i0KHQu9GD0YjQsNGC0LXQuyDQvdCwINC40LfQstC10YHRgtC40Y8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+ItCU0L7RgdGC0LDQstGH0LjQuiDQvdCwINGD0YHQu9C+0LLQuNGPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2Fzc2lzdGFudF9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iOTA5NDU2MDU1NTY5MTAyOTUyIj4i0J/QvtC80L7RidC90LjQuiDQt9CwINC40LfQstC10YHRgtC40Y8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IlZQTiDQtSDQsNC60YLQuNCy0LjRgNCw0L3QsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+IlZQTiDQtSDQsNC60YLQuNCy0LjRgNCw0L3QsCDQvtGCIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0IiBtc2dpZD0iMzAxMTMwNjYwNzEyNjQ1MDMyMiI+ItCU0L7QutC+0YHQvdC10YLQtSDQt9CwINGD0L/RgNCw0LLQu9C10L3QuNC1INC90LAg0LzRgNC10LbQsNGC0LAuIjwvc3RyaW5nPgpAQCAtMTQ0MCwxMiArMTQ0Myw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+ItCQ0LrRgtGD0LDQu9C40LfQuNGA0LDQvdC+INC+0YIg0LDQtNC80LjQvdC40YHRgtGA0LDRgtC+0YDQsCDQstC4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiLQmNC30YLRgNC40YLQviDQvtGCINCw0LTQvNC40L3QuNGB0YLRgNCw0YLQvtGA0LAg0LLQuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4i0KEg0YbQtdC7INGD0LTRitC70LbQsNCy0LDQvdC1INC90LAg0LbQuNCy0L7RgtCwINC90LAg0LHQsNGC0LXRgNC40Y/RgtCwINGA0LXQttC40LzRitGCINC30LAg0LfQsNC/0LDQt9Cy0LDQvdC10YLQviDQuSDQvdCw0LzQsNC70Y/QstCwINC10YTQtdC60YLQuNCy0L3QvtGB0YLRgtCwINC90LAg0YPRgdGC0YDQvtC50YHRgtCy0L7RgtC+INCy0Lgg0Lgg0L7Qs9GA0LDQvdC40YfQsNCy0LAg0LLQuNCx0YDQuNGA0LDQvdC10YLQviwg0YPRgdC70YPQs9C40YLQtSDQt9CwINC80LXRgdGC0L7Qv9C+0LvQvtC20LXQvdC40LUg0Lgg0L/QvtCy0LXRh9C10YLQviDQtNCw0L3QvdC4INC90LAg0LfQsNC00LXQvSDQv9C70LDQvS4g0J/RgNC40LvQvtC20LXQvdC40Y/RgtCwINC30LAg0LXQu9C10LrRgtGA0L7QvdC90LAg0L/QvtGJ0LAsINGB0YrQvtCx0YnQtdC90LjRjyDQuCDQtNGALiwg0LrQvtC40YLQviDRgNCw0LfRh9C40YLQsNGCINC90LAg0YHQuNC90YXRgNC+0L3QuNC30LjRgNCw0L3QtSwg0LzQvtC20LUg0LTQsCDQvdC1INGB0LUg0LDQutGC0YPQsNC70LjQt9C40YDQsNGCLCDQvtGB0LLQtdC9INCw0LrQviDQvdC1INCz0Lgg0L7RgtCy0L7RgNC40YLQtS5cblxu0KDQtdC20LjQvNGK0YIg0LfQsCDQt9Cw0L/QsNC30LLQsNC90LUg0L3QsCDQsdCw0YLQtdGA0LjRj9GC0LAg0YHQtSDQuNC30LrQu9GO0YfQstCwINCw0LLRgtC+0LzQsNGC0LjRh9C90L4sINC60L7Qs9Cw0YLQviDRg9GB0YLRgNC+0LnRgdGC0LLQvtGC0L4g0LLQuCDRgdC1INC30LDRgNC10LbQtNCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX3RpdGxlIiBtc2dpZD0iNzQ5Mzk4OTcyMjYxMDAwODcwMCI+ItCS0LDQttC90L7RgdGCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiLQkdC70L7QutC40YDQsNC90L46INCi0LXQt9C4INC40LfQstC10YHRgtC40Y8g0L3QuNC60L7Qs9CwINC00LAg0L3QtSDRgdC1INC/0L7QutCw0LfQstCw0YIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4i0JzQsNC70L7QstCw0LbQvdC+OiDQn9C+0LrQsNC30LLQsNC90LUg0LHQtdC3INC30LLRg9C60L7QsiDRgdC40LPQvdCw0Lsg0LIg0LTQvtC70L3QsNGC0LAg0YfQsNGB0YIg0L3QsCDRgdC/0LjRgdGK0LrQsCDRgSDQuNC30LLQtdGB0YLQuNGPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiLQndC+0YDQvNCw0LvQvdC+OiDQotC10LfQuCDQuNC30LLQtdGB0YLQuNGPINC00LAg0YHQtSDQv9C+0LrQsNC30LLQsNGCINCx0LXQtyDQt9Cy0YPQutC+0LIg0YHQuNCz0L3QsNC7Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiLQktCw0LbQvdC+OiDQn9C+0LrQsNC30LLQsNC90LUg0LIg0LPQvtGA0L3QsNGC0LAg0YfQsNGB0YIg0L3QsCDRgdC/0LjRgdGK0LrQsCDRgSDQuNC30LLQtdGB0YLQuNGPINC4INC40LfQtNCw0LLQsNC90LUg0L3QsCDQt9Cy0YPQutC+0LIg0YHQuNCz0L3QsNC7Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+ItCh0L/QtdGI0L3Qvjog0J/QvtC60LDQt9Cy0LDQvdC1INC90LAg0LXQutGA0LDQvdCwINC4INC40LfQtNCw0LLQsNC90LUg0L3QsCDQt9Cy0YPQutC+0LIg0YHQuNCz0L3QsNC7Ijwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj7Ql9CwICUxJGQg0LzQuNC90YPRgtC4ICjQtNC+IDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPtCX0LAg0LXQtNC90LAg0LzQuNC90YPRgtCwICjQtNC+IDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzAiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtYm4tckJEL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1ibi1yQkQvc3RyaW5ncy54bWwKaW5kZXggZGUxMGM2MS4uOWM4OGQ0NCAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1ibi1yQkQvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1ibi1yQkQvc3RyaW5ncy54bWwKQEAgLTIyMyw2ICsyMjMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiLgpo/gppbgpqjgpocg4Kay4KaVIOCmleCmsOCngeCmqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4i4Kev4Kev4KevKyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+4Kaf4Ka/KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLgprLgp4HgppXgpr7gpqjgp4sg4Kas4Ka/4Ka34Kav4Ka84Kas4Ka44KeN4Kak4KeBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4i4Kao4Ka/4Kaw4Ka+4Kaq4KamIOCmruCni+CmoSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+IkFuZHJvaWQg4Ka44Ka/4Ka44KeN4Kaf4KeH4KauIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNlcl9vd25lcl9sYWJlbCIgbXNnaWQ9IjI4MDQzNTE4OTgwMDEwMzg5NTEiPiLgpqzgp43gpq/gppXgp43gpqTgpr/gppfgpqQiPC9zdHJpbmc+CkBAIC0zNTMsOCArMzU0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiLgppXgp43gpq/gpr7gpq7gp4fgprDgpr7gprAg4Ka44Ka+4Ka54Ka+4Kav4KeN4Kav4KeHIOCmm+CmrOCmvyDgpqTgp4HgprLgpqTgp4cg4KaTIOCmreCmv+CmoeCmv+CmkyDgpqTgp4jgprDgpr8g4KaV4Kaw4Kak4KeHIOCmheCnjeCmr+CmvuCmquCnjeCmsuCmv+CmleCnh+CmtuCmvuCmqOCmn+Cmv+CmleCnhyDgpq7gpp7gp43gppzgp4HgprAg4KaV4Kaw4KeH4Ke3IOCmj+CmhyDgpoXgpqjgp4Hgpq7gpqTgpr/gpp/gpr8g4KaF4KeN4Kav4Ka+4Kaq4KeN4Kay4Ka/4KaV4KeH4Ka24Ka+4Kao4Kaf4Ka/4KaV4KeHIOCmhuCmquCmqOCmvuCmsCDgpqjgpr/gprbgp43gpprgpq/gprzgpqTgpr4g4Kab4Ka+4Kah4Ka84Ka+4KaHIOCmr+Cnh+CmleCni+CmqOCniyDgprjgpq7gpq/gprwg4KaV4KeN4Kav4Ka+4Kau4KeH4Kaw4Ka+IOCmrOCnjeCmr+CmrOCmueCmvuCmsCDgppXgprDgpqTgp4cg4Kau4Kae4KeN4Kac4KeB4KawIOCmleCmsOCnh+CntyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiLgppXgpq7gp43gpqrgpqgg4Kao4Ka/4Kav4Ka84Kao4KeN4Kak4KeN4Kaw4KajIOCmleCmsOCngeCmqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4i4KaF4KeN4Kav4Ka+4Kaq4KeN4Kay4Ka/4KaV4KeH4Ka24Ka+4Kao4KaV4KeHIOCmleCmruCnjeCmquCmlSDgpqjgpr/gpq/gprzgpqjgp43gpqTgp43gprDgpqMg4KaV4Kaw4Kak4KeHIOCmpuCnh+Cmr+CmvOCntyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiLgpqvgp43gprLgp43gpq/gpr7gprbgprLgpr7gpofgpp8g4Kao4Ka/4Kav4Ka84Kao4KeN4Kak4KeN4Kaw4KajIOCmleCmsOCnhyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4i4KaF4KeN4Kav4Ka+4Kaq4KeN4Kay4Ka/4KaV4KeH4Ka24Ka+4Kao4KaV4KeHIOCmn+CmsOCnjeCmmuCmsuCmvuCmh+CmnyDgpqjgpr/gpq/gprzgpqjgp43gpqTgp43gprDgpqMg4KaV4Kaw4Kak4KeHIOCmpuCnh+Cmr+CmvOCntyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+IuCmuOCmsOCmvuCmuOCmsOCmvyDgpqvgp4vgpqgg4Kao4Kau4KeN4Kas4Kaw4KaX4KeB4Kay4Ka/4Kak4KeHIOCmleCmsiDgppXgprDgp4ciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4i4KaF4KeN4Kav4Ka+4Kaq4KeN4Kay4Ka/4KaV4KeH4Ka24Ka+4Kao4Kaf4Ka/4KaV4KeHIOCmhuCmquCmqOCmvuCmsCDgprngprjgp43gpqTgppXgp43gprfgp4fgpqog4Kab4Ka+4Kah4Ka84Ka+4KaHIOCmq+Cni+CmqCDgpqjgpq7gp43gpqzgprDgppfgp4HgprLgpr/gpqTgp4cg4KaV4KayIOCmleCmsOCmpOCnhyDgpq7gpp7gp43gppzgp4HgprAg4KaV4Kaw4KeH4Ke3IOCmj+Cmn+CmvyDgpoXgpqrgp43gprDgpqTgp43gpq/gpr7gprbgpr/gpqQg4Kaq4Kaw4Ka/4Kau4Ka+4KajIOCmluCmsOCmmuCmviDgpqzgpr4g4KaV4Kay4KeH4KawIOCmleCmvuCmsOCmoyDgprngpqTgp4cg4Kaq4Ka+4Kaw4KeH4Ke3IOCmruCmqOCnhyDgprDgpr7gppbgpqzgp4fgpqgsIOCmj+Cmn+CmvyDgpoXgp43gpq/gpr7gpqrgp43gprLgpr/gppXgp4fgprbgpr7gpqjgpp/gpr/gprAg4Kam4KeN4Kas4Ka+4Kaw4Ka+IOCmnOCmsOCngeCmsOCmvyDgpqjgpq7gp43gpqzgprDgppfgp4HgprLgpr/gpqTgp4cg4KaV4KayIOCmleCmsOCmvuCmleCnhyDgpoXgpqjgp4Hgpq7gpqTgpr8g4Kam4KeH4Kav4Ka8IOCmqOCmvuCntyDgppXgp43gprfgpqTgpr/gppXgpr7gprDgppUg4KaF4KeN4Kav4Ka+4Kaq4KeN4Kay4Ka/4KaV4KeH4Ka24Ka+4Kao4KaX4KeB4Kay4Ka/IOCmhuCmquCmqOCmvuCmsCDgprjgpq7gp43gpq7gpqTgpr8g4Kab4Ka+4Kah4Ka84Ka+4KaHIOCmleCmsiDgppXgprDgpr7gprAg4Kar4Kay4KeHIOCmhuCmquCmqOCmvuCmleCnhyDgpoXgprngp4fgpqTgp4HgppUg4KaF4Kaw4KeN4KalIOCmquCnjeCmsOCmpuCmvuCmqCDgppXgprDgpqTgp4cg4Ka54Kak4KeHIOCmquCmvuCmsOCnh+CntyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiIG1zZ2lkPSIzNTc0OTQzODQ3MTgxNzkzOTE4Ij4iSU1TIOCmquCmsOCmv+Cmt+Cnh+CmrOCmvuCmpOCnhyDgpoXgp43gpq/gpr7gppXgp43gprjgp4fgprgiPC9zdHJpbmc+CkBAIC04NTgsMTAgKzg1NywxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+IuCmleCmvuCmn+CngeCmqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4i4KaF4Kao4KeB4Kay4Ka/4Kaq4Ka/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzdGUiIG1zZ2lkPSI1NjI5ODgwODM2ODA1MDM2NDMzIj4i4KaG4Kaf4KaV4Ka+4KaoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiLgpqrgp43gprLgp4fgpofgpqgg4Kaf4KeH4KaV4KeN4Ka44KafIOCmueCmv+CmuOCmvuCmrOCnhyDgpobgpp/gppXgpr7gpqgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXBsYWNlIiBtc2dpZD0iNTc4MTY4NjA1OTA2MzE0ODkzMCI+IuCmquCnjeCmsOCmpOCmv+CmuOCnjeCmpeCmvuCmquCmqCDgppXgprDgp4HgpqguLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4i4Kau4KeB4Kab4KeB4KaoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiJVUkwg4KaF4Kao4KeB4Kay4Ka/4Kaq4Ka/IOCmleCmsOCngeCmqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+IuCmquCmvuCmoOCnjeCmryDgpqjgpr/gprDgp43gpqzgpr7gpprgpqgg4KaV4Kaw4KeB4KaoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiLgpqrgp4LgprDgp43gpqzgpr7gpqzgprjgp43gpqXgpr7gpq/gprwg4Kar4Ka/4Kaw4KeB4KaoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiLgpqrgp4HgpqjgprDgpr7gpq/gprwg4KaV4Kaw4KeB4KaoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGV4dFNlbGVjdGlvbkNBQlRpdGxlIiBtc2dpZD0iNTIzNjg1MDM5NDM3MDgyMDM1NyI+IuCmquCmvuCmoOCnjeCmryDgpqjgpr/gprDgp43gpqzgpr7gpprgpqgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4i4KaF4Kat4Ka/4Kan4Ka+4Kao4KeHIOCmr+CngeCmleCnjeCmpCDgppXgprDgp4HgpqgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+IuCmruCngeCmm+CngeCmqCI8L3N0cmluZz4KQEAgLTExMDcsNiArMTEwOSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiLgppPgpq/gprzgpr7gprLgpqrgp4fgpqrgpr7gprAg4Kaq4Kaw4Ka/4Kas4Kaw4KeN4Kak4KaoIOCmleCmsOCngeCmqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+IuCmrOCmv+CmnOCnjeCmnuCmquCnjeCmpOCmv+CmsCDgprbgp43gprDgp4vgpqTgpr4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+IuCmtuCmsOCnjeCmpCDgpqrgp43gprDgpqbgpr7gpqjgppXgpr7gprDgp4AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiLgpqzgpr/gppzgp43gpp7gpqrgp43gpqTgpr8g4Ka44Ka54Ka+4Kav4Ka84KaVIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJWUE4g4Ka44KaV4KeN4Kaw4Ka/4Kav4Ka8Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IOCmj+CmsCDgpqbgp43gpqzgpr7gprDgpr4gVlBOIOCmuOCmleCnjeCmsOCmv+Cmr+CmvCDgppXgprDgpr4g4Ka54Kav4Ka84KeH4Kab4KeHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4i4Kao4KeH4Kaf4KaT4Kav4Ka84Ka+4Kaw4KeN4KaVIOCmquCmsOCmv+CmmuCmvuCmsuCmqOCmviDgppXgprDgpqTgp4cg4Ka44KeN4Kaq4Kaw4KeN4Ka2IOCmleCmsOCngeCmqOCntyI8L3N0cmluZz4KQEAgLTE0NDAsMTIgKzE0NDMsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV91cGRhdGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijg4NTY2MzEzMjI0NDAxODcwNzEiPiLgpobgpqrgpqjgpr7gprAg4Kaq4KeN4Kaw4Ka24Ka+4Ka44KaVIOCmpuCnjeCmrOCmvuCmsOCmviDgpobgpqrgpqHgp4fgpp8g4KaV4Kaw4Ka+IOCmueCmr+CmvOCnh+Cmm+CnhyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4i4KaG4Kaq4Kao4Ka+4KawIOCmquCnjeCmsOCmtuCmvuCmuOCmlSDgpqbgp43gpqzgpr7gprDgpr4g4Kau4KeB4Kab4KeHIOCmq+Cnh+CmsuCmviDgprngpq/gprzgp4fgppvgp4ciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTk2MDQzMTEyMzgxNjI1MzAzNCI+IuCmrOCnjeCmr+CmvuCmn+CmsOCmv+CmsCDgprLgpr7gpofgpqsg4KaJ4Kao4KeN4Kao4KakIOCmleCmsOCmpOCnhyDgprjgprngpr7gpq/gprzgpqTgpr4g4KaV4Kaw4Kak4KeHLCDgpqzgp43gpq/gpr7gpp/gpr7gprDgpr8g4Ka44Ka+4Ka24KeN4Kaw4Kav4Ka84KaV4Ka+4Kaw4KeAIOCmhuCmquCmqOCmvuCmsCDgpqHgpr/gpq3gpr7gpofgprjgp4fgprAg4KaV4Ka+4Kaw4KeN4Kav4Ka44Kau4KeN4Kaq4Ka+4Kam4Kao4Ka+IOCmueCnjeCmsOCmvuCmuCDgppXgprDgp4cg4KaP4Kas4KaCIOCmleCmruCnjeCmquCmqCwg4KaF4Kas4Ka44KeN4Kal4Ka+4KaoIOCmquCmsOCmv+Cmt+Cnh+CmrOCmvuCmuOCmruCnguCmuSDgpo/gpqzgpoIg4KaF4Kan4Ka/4KaV4Ka+4KaC4Ka2IOCmrOCnjeCmr+CmvuCmleCml+CnjeCmsOCmvuCmieCmqOCnjeCmoSDgpqHgp4fgpp/gpr4g4Ka44KeA4Kau4Ka/4KakIOCmleCmsOCnh+CntyDgpofgpq7gp4fgprIsIOCmrOCmvuCmsOCnjeCmpOCmvuCmquCnjeCmsOCnh+CmsOCmoyDgpo/gpqzgpoIg4KaF4Kao4KeN4Kav4Ka+4Kao4KeN4KavIOCmheCnjeCmr+CmvuCmquCnjeCmsuCmv+CmleCnh+CmtuCmvuCmqOCml+CngeCmsuCmv+CmleCnhyDgpq/gp4fgppfgp4HgprLgpr8g4Ka44Ka/4KaZ4KeN4KaV4KeH4KawIOCmieCmquCmsCDgpqjgpr/gprDgp43gpq3gprAg4KaV4Kaw4KeHIOCmuOCnh+Cml+CngeCmsuCmv+CmleCnhyDgpobgpqrgpqjgpr8g4Kao4Ka+IOCmluCni+CmsuCmviDgpqrgprDgp43gpq/gpqjgp43gpqQg4Kao4Ka+4KaTIOCmhuCmquCmoeCnh+CmnyDgprngpqTgp4cg4Kaq4Ka+4Kaw4KeH4Ke3XG5cbuCmhuCmquCmqOCmvuCmsCDgpqHgpr/gpq3gpr7gpofgprjgpp/gpr/gppXgp4cg4Kav4KaW4KaoIOCmmuCmvuCmsOCnjeCmnCDgppXgprDgpr4g4Ka54Kav4Ka8IOCmpOCmluCmqCDgpqzgp43gpq/gpr7gpp/gpr7gprDgpr8g4Ka44Ka+4Ka24KeN4Kaw4Kav4Ka84KaV4Ka+4Kaw4KeAIOCmuOCnjeCmrOCmr+CmvOCmguCmleCnjeCmsOCmv+Cmr+CmvOCmreCmvuCmrOCnhyDgpqzgpqjgp43gpqcg4Ka54Kav4Ka84KeHIOCmr+CmvuCmr+CmvOCntyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX3RpdGxlIiBtc2dpZD0iNzQ5Mzk4OTcyMjYxMDAwODcwMCI+IuCml+CngeCmsOCngeCmpOCnjeCmrCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSI3MTE4ODI2OTAwNzY3MDQ3MTI1Ij4i4KaF4Kas4Kaw4KeB4Kam4KeN4KanOiDgpo/gpocg4Kas4Ka/4Kac4KeN4Kae4Kaq4KeN4Kak4Ka/4KaX4KeB4Kay4Ka/IOCmleCmluCmqOCmhyDgpqbgp4fgppbgpr7gpqjgp4sg4Ka54Kas4KeHIOCmqOCmviI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjY0NDc2NDA0NDk5MTg0MjcxODciPiLgpqjgpr/gpq7gp43gpqg6IOCmrOCmv+CmnOCnjeCmnuCmquCnjeCmpOCmvyDgpqTgpr7gprLgpr/gppXgpr7gprAg4Kao4KeA4Kaa4KeH4KawIOCmheCmguCmtuCnhyDgpqjgpr/gpoPgprbgpqzgp43gpqbgp4cg4Kaq4KeN4Kaw4Kam4Kaw4KeN4Ka24KaoIOCmleCmsOCmviDgprngpq/gprwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNzk5MTE1NzY5NzYwOTU3NTI3MSI+IuCmuOCmvuCmp+CmvuCmsOCmqDog4KaP4KaHIOCmrOCmv+CmnOCnjeCmnuCmquCnjeCmpOCmv+Cml+CngeCmsuCmvyDgpqjgpr/gpoPgprbgpqzgp43gpqbgp4cg4Kaq4KeN4Kaw4Kam4Kaw4KeN4Ka24KaoIOCmleCmsOCmviDgprngpq/gprwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzE1MjIzODYzNzczNzIxNTY1NCI+IuCmieCmmuCnjeCmmjog4Kas4Ka/4Kac4KeN4Kae4Kaq4KeN4Kak4Ka/IOCmpOCmvuCmsuCmv+CmleCmvuCmsCDgprbgp4DgprDgp43gprfgp4cg4Kam4KeH4KaW4Ka+4Kao4KeLIOCmueCmr+CmvCDgpo/gpqzgpoIg4Ka24Kas4KeN4KamIOCmleCmsOCnhyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiLgppzgprDgp4HgprDgp4A6IOCmuOCnjeCmleCnjeCmsOCngOCmqOCnh+CmsCDgpongpqrgprDgp4cg4Kaq4KeN4Kaw4Kam4Kaw4KeN4Ka24Ka/4KakIOCmueCmr+CmvCDgpo/gpqzgpoIg4Ka24Kas4KeN4KamIOCmleCmsOCnhyI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPiUxJGQg4Kau4Ka/4Kao4Ka/4Kaf4KeH4KawIOCmnOCmqOCnjeCmryAoPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4g4Kaq4Kaw4KeN4Kav4Kao4KeN4KakKTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+JTEkZCDgpq7gpr/gpqjgpr/gpp/gp4fgprAg4Kac4Kao4KeN4KavICg8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPiDgpqrgprDgp43gpq/gpqjgp43gpqQpPC9pdGVtPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1jYS9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtY2Evc3RyaW5ncy54bWwKaW5kZXggZGY3Y2Y3OS4uODU1NGI4NCAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1jYS9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWNhL3N0cmluZ3MueG1sCkBAIC0yMjMsNiArMjIzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9ja2Rvd24iIG1zZ2lkPSI4NzUxNTQyNTE0NzI0MzMyODczIj4iQmxvcXVlamEgYXJhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiIrOTk5Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2NoaWxkcmVuX2NvdW50X2JyYWNrZXRlZCIgbXNnaWQ9IjE3Njk0MjU0NzMxNjgzNDc4MzkiPiIoPHhsaWZmOmcgaWQ9Ik5PVElGSUNBVElPTkNPVU5UIj4lZDwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IkNvbnRpbmd1dCBhbWFnYXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiJNb2RlIHNlZ3VyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4iU2lzdGVtYSBBbmRyb2lkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNlcl9vd25lcl9sYWJlbCIgbXNnaWQ9IjI4MDQzNTE4OTgwMDEwMzg5NTEiPiJQZXJzb25hbCI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IlBlcm1ldCBxdWUgbFwnYXBsaWNhY2nDsyBmYWNpIGZvdG9zIGkgdsOtZGVvcyBhbWIgbGEgY8OgbWVyYS4gQXF1ZXN0IHBlcm3DrXMgcGVybWV0IHF1ZSBsXCdhcGxpY2FjacOzIHV0aWxpdHppIGxhIGPDoG1lcmEgZW4gcXVhbHNldm9sIG1vbWVudCBzZW5zZSBsYSB0ZXZhIGNvbmZpcm1hY2nDsy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4iY29udHJvbGFyIGxhIHZpYnJhY2nDsyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4iUGVybWV0IHF1ZSBsXCdhcGxpY2FjacOzIGNvbnRyb2xpIGVsIHZpYnJhZG9yLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiJjb250cm9sYSBsYSBsbGFudGVybmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+IlBlcm1ldCBxdWUgbFwnYXBsaWNhY2nDsyBjb250cm9saSBsYSBsbGFudGVybmEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4idHJ1Y2FyIGRpcmVjdGFtZW50IGEgbsO6bWVyb3MgZGUgdGVsw6hmb24iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4iUGVybWV0IHF1ZSBsXCdhcGxpY2FjacOzIHRydXF1aSBhIG7Dum1lcm9zIGRlIHRlbMOoZm9uIHNlbnNlIGxhIHRldmEgaW50ZXJ2ZW5jacOzLiBBcXVlc3RhIGFjY2nDsyBwb3QgcHJvZHVpciBjw6BycmVjcyBvIHRydWNhZGVzIGluZXNwZXJhZGVzLiBUaW5ndWVzIGVuIGNvbXB0ZSBxdWUgYWl4w7Igbm8gcGVybWV0IHF1ZSBsXCdhcGxpY2FjacOzIHRydXF1aSBhIG7Dum1lcm9zIGRcJ2VtZXJnw6huY2lhLiBMZXMgYXBsaWNhY2lvbnMgbWFsaWNpb3NlcyBwb2RlbiBmZXIgdHJ1Y2FkZXMgc2Vuc2UgbGEgdGV2YSBjb25maXJtYWNpw7MsIGNvc2EgcXVlIGV0IHBvdCBmZXIgZ2FzdGFyIGRpbmVycy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ltc0NhbGxTZXJ2aWNlIiBtc2dpZD0iMzU3NDk0Mzg0NzE4MTc5MzkxOCI+ImFjY8OpcyBhbCBzZXJ2ZWkgZGUgdHJ1Y2FkZXMgSU1TIjwvc3RyaW5nPgpAQCAtODU4LDEwICs4NTcsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiJSZXRhbGxhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weSIgbXNnaWQ9IjI2ODE5NDYyMjk1MzM1MTE5ODciPiJDb3BpYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+IkVuZ2FueGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXN0ZV9hc19wbGFpbl90ZXh0IiBtc2dpZD0iNTQyNzc5Mjc0MTkwODAxMDY3NSI+IkVuZ2FueGEgY29tIGEgdGV4dCBzZW5zZSBmb3JtYXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXBsYWNlIiBtc2dpZD0iNTc4MTY4NjA1OTA2MzE0ODkzMCI+IlZvbHMgc3Vic3RpdHVpci4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZSIgbXNnaWQ9IjYwOTg2ODQ4NDQwMjE2OTc3ODkiPiJTdXByaW1laXgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IkNvcGlhIGxcJ1VSTCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+IlNlbGVjY2lvbmEgZWwgdGV4dCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVuZG8iIG1zZ2lkPSI3OTA1Nzg4NTAyNDkxNzQyMzI4Ij4iRGVzZsOpcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlZG8iIG1zZ2lkPSI3NzU5NDY0ODc2NTY2ODAzODg4Ij4iUmVmw6lzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGV4dFNlbGVjdGlvbkNBQlRpdGxlIiBtc2dpZD0iNTIzNjg1MDM5NDM3MDgyMDM1NyI+IlNlbGVjY2nDsyBkZSB0ZXh0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWRkVG9EaWN0aW9uYXJ5IiBtc2dpZD0iNDM1MjE2MTUzNDUxMDA1Nzg3NCI+IkFmZWdlaXggYWwgZGljY2lvbmFyaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4iU3VwcmltZWl4Ijwvc3RyaW5nPgpAQCAtMTEwNyw2ICsxMTA5LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+IkNhbnZpYSBlbCBmb25zIGRlIHBhbnRhbGxhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4iT2llbnQgZGUgbm90aWZpY2FjaW9ucyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbmRpdGlvbl9wcm92aWRlcl9zZXJ2aWNlX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMzIxMzQzMzUyOTA2NTI0NTY0Ij4iUHJvdmXDr2RvciBkZSBjb25kaWNpb25zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2Fzc2lzdGFudF9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iOTA5NDU2MDU1NTY5MTAyOTUyIj4iQXNzaXN0ZW50IGRlIG5vdGlmaWNhY2lvbnMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IlZQTiBhY3RpdmFkYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiBoYSBhY3RpdmF0IFZQTiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0IiBtc2dpZD0iMzAxMTMwNjYwNzEyNjQ1MDMyMiI+IlRvY2EgcGVyIGdlc3Rpb25hciBsYSB4YXJ4YS4iPC9zdHJpbmc+CkBAIC0xNDQwLDEyICsxNDQzLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4iTFwnYWRtaW5pc3RyYWRvciBsXCdoYSBhY3R1YWxpdHphdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4iTFwnYWRtaW5pc3RyYWRvciBobyBoYSBzdXByaW1pdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4iUGVyIHRhbCBkXCdhdWdtZW50YXIgbGEgZHVyYWRhIGRlIGxhIGJhdGVyaWEsIGxhIGZ1bmNpw7MgZFwnZXN0YWx2aSBkZSBiYXRlcmlhIHJlZHVlaXggZWwgcmVuZGltZW50IGRlbCBkaXNwb3NpdGl1IGkgZW4gbGltaXRhIGxhIHZpYnJhY2nDsyBpIGxhIG1ham9yaWEgZGUgZGFkZXMgZW4gc2Vnb24gcGxhLiDDiXMgcG9zc2libGUgcXVlIGVsIGNvcnJldSBlbGVjdHLDsm5pYywgbGEgbWlzc2F0Z2VyaWEgaSBsYSByZXN0YSBkXCdhcGxpY2FjaW9ucyBxdWUgc2Ugc2luY3Jvbml0emVuIGFtYiBmcmVxw7zDqG5jaWEgbm8gc1wnYWN0dWFsaXR6aW4gbGxldmF0IHF1ZSBsZXMgb2JyaXMuXG5cbkxcJ2VzdGFsdmkgZGUgYmF0ZXJpYSBlcyBkZXNhY3RpdmEgYXV0b23DoHRpY2FtZW50IG1lbnRyZSBlbCBkaXNwb3NpdGl1IHNcJ2VzdMOgIGNhcnJlZ2FudC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV90aXRsZSIgbXNnaWQ9Ijc0OTM5ODk3MjI2MTAwMDg3MDAiPiJJbXBvcnTDoG5jaWEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iNzExODgyNjkwMDc2NzA0NzEyNSI+IkJsb3F1ZWphZGE6IG5vIG1vc3RyYSBtYWkgYXF1ZXN0ZXMgbm90aWZpY2FjaW9ucyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjY0NDc2NDA0NDk5MTg0MjcxODciPiJCYWl4YTogbW9zdHJhIGRlIG1hbmVyYSBzaWxlbmNpb3NhIGEgbGEgcGFydCBpbmZlcmlvciBkZSBsYSBsbGlzdGEgZGUgbm90aWZpY2FjaW9ucyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI3OTkxMTU3Njk3NjA5NTc1MjcxIj4iTm9ybWFsOiBtb3N0cmEgYXF1ZXN0ZXMgbm90aWZpY2FjaW9ucyBkZSBtYW5lcmEgc2lsZW5jaW9zYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMTUyMjM4NjM3NzM3MjE1NjU0Ij4iQWx0YTogbW9zdHJhIGEgbGEgcGFydCBzdXBlcmlvciBkZSBsYSBsbGlzdGEgZGUgbm90aWZpY2FjaW9ucyBpIGVtZXQgdW4gc28iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSIxMTUzNjkzMDgwNDY3OTA0NDc0Ij4iVXJnZW50OiBtb3N0cmEgYSBsYSBwYW50YWxsYSBpIGVtZXQgdW4gc28iPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0iemVuX21vZGVfZHVyYXRpb25fbWludXRlc19zdW1tYXJ5IiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNDM2Nzg3NzQwODA3MjAwMDg0OCI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPkR1cmFudCAlMSRkIG1pbnV0cyAoZmlucyBhIGxlcyA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj5EdXJhbnQgMSBtaW51dCAoZmlucyBhIGxlcyA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8wIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CkBAIC0xNTEyLDUgKzE1MDksNSBAQAogICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfbm90aWZpY2F0aW9uX3RvcGljX2xhYmVsIiBtc2dpZD0iMjI3NTg2MTQ1NzkxODcwODI5Ij4iQWx0cmVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3RvcGljIiBtc2dpZD0iMzU3MjI4MDQzOTg4MDAyMzIzMyI+IlR1IGhhcyBkZWZpbml0IGxhIGltcG9ydMOgbmNpYSBkXCdhcXVlc3RlcyBub3RpZmljYWNpb25zLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV9wZXJzb24iIG1zZ2lkPSI5MTYwMTMzNTk3MjYyOTM4Mjk2Ij4iQXF1ZXN0IG1pc3NhdGdlIMOpcyBpbXBvcnRhbnQgcGVyIGxlcyBwZXJzb25lcyBxdWUgaGkgaGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3BlcnNvbiIgbXNnaWQ9IjkxNjAxMzM1OTcyNjI5MzgyOTYiPiJBcXVlc3QgbWlzc2F0Z2Ugw6lzIGltcG9ydGFudCBwZXIgbGVzIHBlcnNvbmVzIGltcGxpY2FkZXMuIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWNzL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1jcy9zdHJpbmdzLnhtbAppbmRleCBiNGMxOWE0Li4yZWNhNDlhIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWNzL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtY3Mvc3RyaW5ncy54bWwKQEAgLTIyNSw2ICsyMjUsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiJaYW1rbm91dCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJTa3J5dMO9IG9ic2FoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4iTm91em92w70gcmXFvmltIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4iU3lzdMOpbSBBbmRyb2lkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNlcl9vd25lcl9sYWJlbCIgbXNnaWQ9IjI4MDQzNTE4OTgwMDEwMzg5NTEiPiJPc29ibsOtIjwvc3RyaW5nPgpAQCAtMzU1LDggKzM1Niw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4iVW1vxb7FiHVqZSBhcGxpa2FjaSBwb8WZaXpvdmF0IGZvdG9ncmFmaWUgYSB2aWRlYSBwb21vY8OtIGZvdG9hcGFyw6F0dS4gVG90byBvcHLDoXZuxJtuw60gdW1vxb7FiHVqZSBhcGxpa2FjaSBwb3XFvsOtdmF0IGZvdG9hcGFyw6F0IGtkeWtvbGl2IGkgYmV6IHZhxaFlaG8gc3ZvbGVuw60uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl92aWJyYXRlIiBtc2dpZD0iNzY5NjQyNzAyNjA1NzcwNTgzNCI+Im92bMOhZMOhbsOtIHZpYnJhY8OtIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiJVbW/FvsWIdWplIGFwbGlrYWNpIG92bMOhZGF0IHZpYnJhY2UuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mbGFzaGxpZ2h0IiBtc2dpZD0iMjE1NTkyMDgxMDEyMTk4NDIxNSI+Im92bMOhZMOhbsOtIGtvbnRyb2xreSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4iVW1vxb7FiHVqZSBhcGxpa2FjaSBvdmzDoWRhdCBzdsOtdGlsbnUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4icMWZw61tw6kgdm9sw6Fuw60gbmEgdGVsZWZvbm7DrSDEjcOtc2xhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+IlVtb8W+xYh1amUgYXBsaWthY2kgdm9sYXQgbmEgdGVsZWZvbm7DrSDEjcOtc2xhIGJleiB2YcWhZWhvIHDFmWnEjWluxJtuw60uIE3Fr8W+ZSBtw610IHphIG7DoXNsZWRlayBuZW/EjWVrw6F2YW7DqSBwb3BsYXRreSBuZWJvIGhvdm9yeS4gVG90byBvcHLDoXZuxJtuw60gbmV1bW/FvsWIdWplIGFwbGlrYWNpIHZvbGF0IG5hIHTDrXPFiG92w6EgxI3DrXNsYS4gxaBrb2RsaXbDqSBhcGxpa2FjZSB2w6FzIG1vaG91IHDFmWlwcmF2aXQgbyBwZW7DrXplIHVza3V0ZcSNxYhvdsOhbsOtbSBob3ZvcsWvIGJleiB2YcWhZWhvIHN2b2xlbsOtLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiIG1zZ2lkPSIzNTc0OTQzODQ3MTgxNzkzOTE4Ij4icMWZw61zdHVwIGtlIHNsdcW+YsSbIHphc8OtbMOhbsOtIHJ5Y2hsw71jaCB6cHLDoXYgcHJvIMO6xI1lbHkgaG92b3LFryI8L3N0cmluZz4KQEAgLTg2OCwxMCArODY3LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJjdXQiIG1zZ2lkPSIzMDkyNTY5NDA4NDM4NjI2MjYxIj4iVnlqbW91dCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4iS29ww61yb3ZhdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+IlZsb8W+aXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXN0ZV9hc19wbGFpbl90ZXh0IiBtc2dpZD0iNTQyNzc5Mjc0MTkwODAxMDY3NSI+IlZsb8W+aXQgamFrbyBwcm9zdMO9IHRleHQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXBsYWNlIiBtc2dpZD0iNTc4MTY4NjA1OTA2MzE0ODkzMCI+Ik5haHJhZGl04oCiIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+IlNtYXphdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4iS29ww61yb3ZhdCBhZHJlc3UgVVJMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4iVnlicmF0IHRleHQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmRvIiBtc2dpZD0iNzkwNTc4ODUwMjQ5MTc0MjMyOCI+IlZyw6F0aXQgenDEm3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+Ik9wYWtvdmF0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGV4dFNlbGVjdGlvbkNBQlRpdGxlIiBtc2dpZD0iNTIzNjg1MDM5NDM3MDgyMDM1NyI+IlbDvWLEm3IgdGV4dHUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4iUMWZaWRhdCBkbyBzbG92bsOta3UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+IlNtYXphdCI8L3N0cmluZz4KQEAgLTExMjEsNiArMTEyMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiJabcSbbml0IHRhcGV0dSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+IkFwbGlrYWNlIHBvc2xvdWNoYWrDrWPDrSBvem7DoW1lbsOtIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiJQb3NreXRvdmF0ZWwgcG9kbcOtbmt5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2Fzc2lzdGFudF9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iOTA5NDU2MDU1NTY5MTAyOTUyIj4iQXNpc3RlbnQgb3puw6FtZW7DrSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iU8OtxaUgVlBOIGplIGFrdGl2b3bDoW5hIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4iQXBsaWthY2UgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IGFrdGl2b3ZhbGEgc8OtxaUgVlBOIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4iRG90eWtlbSB6b2JyYXrDrXRlIHNwcsOhdnUgc8OtdMSbLiI8L3N0cmluZz4KQEAgLTE0NTgsMTIgKzE0NjEsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV91cGRhdGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijg4NTY2MzEzMjI0NDAxODcwNzEiPiJBa3R1YWxpem92w6FubyBhZG1pbmlzdHLDoXRvcmVtIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiJTbWF6w6FubyBhZG1pbmlzdHLDoXRvcmVtIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiJTcG/FmWnEjSBiYXRlcmllIHphIMO6xI1lbGVtIHByb2Rsb3XFvmVuw60gdsO9ZHLFvmUgYmF0ZXJpZSBzbmnFvnVqZSB2w71rb24gemHFmcOtemVuw60gYSBvbWV6dWplIHZpYnJhY2UsIHNsdcW+YnkgdXLEjW92w6Fuw60gcG9sb2h5IGEgdsSbdMWhaW51IGRhdCBuYSBwb3phZMOtLiBFLW1haWwsIGFwbGlrYWNlIHBybyB6YXPDrWzDoW7DrSB6cHLDoXYgYSBkYWzFocOtIGFwbGlrYWNlLCBrdGVyw6kgcG91xb7DrXZhasOtIHN5bmNocm9uaXphY2ksIHNlIG5lbXVzZWrDrSBha3R1YWxpem92YXQsIGRva3VkIGplIG5lb3RldsWZZXRlLlxuXG5QxZlpIG5hYsOtamVuw60gemHFmcOtemVuw60gc2Ugc3BvxZlpxI0gYmF0ZXJpZSBhdXRvbWF0aWNreSB2eXBuZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV90aXRsZSIgbXNnaWQ9Ijc0OTM5ODk3MjI2MTAwMDg3MDAiPiJExa9sZcW+aXRvc3QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iNzExODgyNjkwMDc2NzA0NzEyNSI+IkJsb2tvdsOhbm86IFRhdG8gb3puw6FtZW7DrSBuaWtkeSBuZXpvYnJhem92YXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4iTsOtemvDoTogVGF0byBvem7DoW1lbsOtIHpvYnJhem92YXQgbmEga29uY2kgc2V6bmFtdSBiZXogenZ1a292w6lobyB1cG96b3JuxJtuw60iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNzk5MTE1NzY5NzYwOTU3NTI3MSI+Ik5vcm3DoWxuw606IFRhdG8gb3puw6FtZW7DrSB6b2JyYXpvdmF0IGJleiB6dnVrb3bDqWhvIHVwb3pvcm7Em27DrSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMTUyMjM4NjM3NzM3MjE1NjU0Ij4iVnlzb2vDoTogVGF0byBvem7DoW1lbsOtIHpvYnJhem92YXQgbmEgemHEjcOhdGt1IHNlem5hbXUgYcKgdXBvem9ybml0IG5hIG7EmyB6dnVrZW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSIxMTUzNjkzMDgwNDY3OTA0NDc0Ij4iVXJnZW50bsOtOiBUYXRvIG96bsOhbWVuw60gem9icmF6b3ZhdCBwxZnDrW1vIG5hIG9icmF6b3ZjZSBhwqB1cG96b3JuaXQgbmEgbsSbIHp2dWtlbSI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJmZXciPiUxJGQgbWludXR5IChkbyA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ibWFueSI+JTEkZCBtaW51dHkgKGRvIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZGEvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWRhL3N0cmluZ3MueG1sCmluZGV4IDJkNWVjMDkuLjJhNzE5YjAgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZGEvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1kYS9zdHJpbmdzLnhtbApAQCAtMjIzLDYgKzIyMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2tkb3duIiBtc2dpZD0iODc1MTU0MjUxNDcyNDMzMjg3MyI+IkzDpXMgbnUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+Ijk5OSsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fY2hpbGRyZW5fY291bnRfYnJhY2tldGVkIiBtc2dpZD0iMTc2OTQyNTQ3MzE2ODM0NzgzOSI+Iig8eGxpZmY6ZyBpZD0iTk9USUZJQ0FUSU9OQ09VTlQiPiVkPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4iSW5kaG9sZGV0IGVyIHNranVsdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+IlNpa2tlciB0aWxzdGFuZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+IkFuZHJvaWQtc3lzdGVtIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNlcl9vd25lcl9sYWJlbCIgbXNnaWQ9IjI4MDQzNTE4OTgwMDEwMzg5NTEiPiJQZXJzb25saWciPC9zdHJpbmc+CkBAIC0zNTMsOCArMzU0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiJUaWxsYWRlciwgYXQgYXBwZW4ga2FuIHRhZ2UgYmlsbGVkZXIgb2cgdmlkZW9lciBtZWQga2FtZXJhZXQuIE1lZCBkZW5uZSB0aWxsYWRlbHNlIGthbiBhcHBlbiB0aWwgZW5odmVyIHRpZCBicnVnZSBrYW1lcmFldCB1ZGVuIGRpbiBiZWtyw6ZmdGVsc2UuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl92aWJyYXRlIiBtc2dpZD0iNzY5NjQyNzAyNjA1NzcwNTgzNCI+ImtvbnRyb2xsZXJlIHZpYnJhdGlvbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4iVGlsbGFkZXIsIGF0IGFwcGVuIGthbiBrb250cm9sbGVyZSB2aWJyYXRvcmVuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiJrb250cm9sbGVyIGxvbW1lbHlndGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+IlRpbGxhZGVyLCBhdCBhcHBlbiBrYW4ga29udHJvbGxlcmUgbG9tbWVseWd0ZW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4icmluZ2UgZGlyZWt0ZSBvcCB0aWwgdGVsZWZvbm51bXJlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+IlRpbGxhZGVyLCBhdCBhcHBlbiBrYW4gcmluZ2UgdGlsIHRlbGVmb25udW1yZSB1ZGVuIGRpbiBpbmRncmliZW4uIERldHRlIGthbiByZXN1bHRlcmUgaSB1dmVudGVkZSBvcGtyw6Z2bmluZ2VyIGVsbGVyIG9wa2FsZC4gQmVtw6ZyaywgYXQgYXBwZW4gbWVkIGRlbm5lIHRpbGxhZGVsc2UgaWtrZSBrYW4gcmluZ2UgdGlsIG7DuGRvcGthbGRzbnVtcmUuIFNrYWRlbGlnZSBhcHBzIGthbiBrb3N0ZSBkaWcgcGVuZ2UgdmVkIGF0IGZvcmV0YWdlIG9wa2FsZCB1ZGVuIGRpbiBiZWtyw6ZmdGVsc2UuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiJmw6UgYWRnYW5nIHRpbCBjaGF0LW9wa2FsZHN0amVuZXN0ZSI8L3N0cmluZz4KQEAgLTg1OCwxMCArODU3LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJjdXQiIG1zZ2lkPSIzMDkyNTY5NDA4NDM4NjI2MjYxIj4iS2xpcCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4iS29waWVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzdGUiIG1zZ2lkPSI1NjI5ODgwODM2ODA1MDM2NDMzIj4iSW5kc8OmdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4iSW5kc8OmdCBzb20gYWxtaW5kZWxpZyB0ZWtzdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4iRXJzdGF0Li4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+IlNsZXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IktvcGllciB3ZWJhZHJlc3NlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4iTWFya8OpciB0ZWtzdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVuZG8iIG1zZ2lkPSI3OTA1Nzg4NTAyNDkxNzQyMzI4Ij4iRm9ydHJ5ZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlZG8iIG1zZ2lkPSI3NzU5NDY0ODc2NTY2ODAzODg4Ij4iQW5udWxsZXIgZm9ydHJ5ZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiJUZWtzdG1hcmtlcmluZyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiJGw7hqIHRpbCBvcmRib2ciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+IlNsZXQiPC9zdHJpbmc+CkBAIC0xMTA3LDYgKzExMDksNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4iU2tpZnQgYmFnZ3J1bmQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiJVbmRlcnJldG5pbmdzbHl0dGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiJUamVuZXN0ZSB0aWwgZm9ybWlkbGluZyBhZiBiZXRpbmdlbHNlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9hc3Npc3RhbnRfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjkwOTQ1NjA1NTU2OTEwMjk1MiI+IlVuZGVycmV0bmluZ3Nhc3Npc3RlbnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IlZQTiBlciBha3RpdmVyZXQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4iVlBOIGFrdGl2ZXJlcyBhZiA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiJUcnlrIGZvciBhdCBhZG1pbmlzdHJlcmUgbmV0dsOmcmtldC4iPC9zdHJpbmc+CkBAIC0xNDQwLDEyICsxNDQzLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4iT3BkYXRlcmV0IGFmIGFkbWluaXN0cmF0b3IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX2RlbGV0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iNzY1MDU3NzM4NzQ5MzEwMTM1MyI+IlNsZXR0ZXQgYWYgZGluIGFkbWluaXN0cmF0b3IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTk2MDQzMTEyMzgxNjI1MzAzNCI+IkJhdHRlcmlzcGFyZWZ1bmt0aW9uZW4gaGrDpmxwZXIgbWVkIGF0IGZvcmzDpm5nZSBiYXR0ZXJpZXRzIGxldmV0aWQgdmVkIGF0IHJlZHVjZXJlIGVuaGVkZW5zIHlkZWV2bmUgb2cgYmVncsOmbnNlIHZpYnJhdGlvbiwgcGxhY2VyaW5nc3RqZW5lc3RlciBvZyBkZXQgbWVzdGUgYmFnZ3J1bmRzZGF0YS4gRS1tYWlsLCBiZXNrZWRmdW5rdGlvbmVyIG9nIGFuZHJlIGFwcHMsIGRlciBiZW55dHRlciBzeW5rcm9uaXNlcmluZywgb3BkYXRlcmVzIG11bGlndmlzIGlra2UsIG1lZG1pbmRyZSBkdSDDpWJuZXIgZGVtLlxuXG5CYXR0ZXJpc3BhcmVmdW5rdGlvbmVuIHNsdWtrZXIgYXV0b21hdGlzaywgbsOlciBlbmhlZGVuIG9wbGFkZXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfdGl0bGUiIG1zZ2lkPSI3NDkzOTg5NzIyNjEwMDA4NzAwIj4iVmlndGlnaGVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiJCbG9rZXJldDogVmlzIGFsZHJpZyBkaXNzZSB1bmRlcnJldG5pbmdlciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjY0NDc2NDA0NDk5MTg0MjcxODciPiJMYXY6IFZpcyBseWRsw7hzdCBuZWRlcnN0IHDDpSBsaXN0ZW4gb3ZlciB1bmRlcnJldG5pbmdlciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI3OTkxMTU3Njk3NjA5NTc1MjcxIj4iTm9ybWFsOiBWaXMgZGlzc2UgdW5kZXJyZXRuaW5nZXIgbHlkbMO4c3QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzE1MjIzODYzNzczNzIxNTY1NCI+IkjDuGo6IFZpcyDDuHZlcnN0IHDDpSBsaXN0ZW4gb3ZlciB1bmRlcnJldG5pbmdlciwgb2cgZ2l2IGx5ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiJQcmVzc2VyZW5kZTogVmlzIHDDpSBza8Omcm1lbiwgb2cgZ2l2IGx5ZCI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPkkgJTEkZCBtaW51dHRlciAoaW5kdGlsIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+SSAlMSRkIG1pbnV0dGVyIChpbmR0aWwgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1kZS9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZGUvc3RyaW5ncy54bWwKaW5kZXggNzdmMDQ5Yi4uZDExNmEyNCAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1kZS9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWRlL3N0cmluZ3MueG1sCkBAIC0yMjMsNiArMjIzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9ja2Rvd24iIG1zZ2lkPSI4NzUxNTQyNTE0NzI0MzMyODczIj4iSmV0enQgc3BlcnJlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJJbmhhbHRlIGF1c2dlYmxlbmRldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+IkFiZ2VzaWNoZXJ0ZXIgTW9kdXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiJBbmRyb2lkLVN5c3RlbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4iUHJpdmF0Ijwvc3RyaW5nPgpAQCAtMzUzLDggKzM1NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4iRXJtw7ZnbGljaHQgZGVyIEFwcCwgQmlsZGVyIHVuZCBWaWRlb3MgbWl0IGRlciBLYW1lcmEgYXVmenVuZWhtZW4uIERpZSBCZXJlY2h0aWd1bmcgZXJsYXVidCBkZXIgQXBwLCBkaWUgS2FtZXJhIGplZGVyemVpdCB1bmQgb2huZSBJaHJlIEJlc3TDpHRpZ3VuZyB6dSBudXR6ZW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl92aWJyYXRlIiBtc2dpZD0iNzY5NjQyNzAyNjA1NzcwNTgzNCI+IlZpYnJhdGlvbnNhbGFybSBzdGV1ZXJuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiJFcm3DtmdsaWNodCBkZXIgQXBwLCBkZW4gVmlicmF0aW9uc2FsYXJtIHp1IHN0ZXVlcm4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4iTGljaHRhbnplaWdlIHN0ZXVlcm4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+IkVybcO2Z2xpY2h0IGRlciBBcHAsIGRpZSBMaWNodGFuemVpZ2UgenUgc3RldWVybiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+IlRlbGVmb25udW1tZXJuIGRpcmVrdCBhbnJ1ZmVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+IkVybcO2Z2xpY2h0IGRlciBBcHAsIG9obmUgSWhyIEVpbmdyZWlmZW4gVGVsZWZvbm51bW1lcm4genUgd8OkaGxlbi4gRGllcyBrYW5uIHp1IHVuZXJ3YXJ0ZXRlbiBLb3N0ZW4gdW5kIEFucnVmZW4gZsO8aHJlbi4gQmVhY2h0ZW4gU2llLCBkYXNzIGRpZSBBcHAga2VpbmUgTm90cnVmbnVtbWVybiB3w6RobGVuIGthbm4uIFNjaMOkZGxpY2hlIEFwcHMgdmVydXJzYWNoZW4gbcO2Z2xpY2hlcndlaXNlIEtvc3RlbiwgaW5kZW0gc2llIEFucnVmZSBvaG5lIElocmUgQmVzdMOkdGlndW5nIHTDpHRpZ2VuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiIG1zZ2lkPSIzNTc0OTQzODQ3MTgxNzkzOTE4Ij4iWnVncmlmZiBhdWYgSU1TLUFucnVmZGllbnN0Ijwvc3RyaW5nPgpAQCAtODU4LDEwICs4NTcsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiJBdXNzY2huZWlkZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+IktvcGllcmVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzdGUiIG1zZ2lkPSI1NjI5ODgwODM2ODA1MDM2NDMzIj4iRWluZsO8Z2VuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiJOdXIgVGV4dCBlaW5mw7xnZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXBsYWNlIiBtc2dpZD0iNTc4MTY4NjA1OTA2MzE0ODkzMCI+IkVyc2V0emVuLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+IkzDtnNjaGVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiJVUkwga29waWVyZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiJUZXh0IGF1c3fDpGhsZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmRvIiBtc2dpZD0iNzkwNTc4ODUwMjQ5MTc0MjMyOCI+IlLDvGNrZ8OkbmdpZyBtYWNoZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+IldpZWRlcmhvbGVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGV4dFNlbGVjdGlvbkNBQlRpdGxlIiBtc2dpZD0iNTIzNjg1MDM5NDM3MDgyMDM1NyI+IlRleHRhdXN3YWhsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWRkVG9EaWN0aW9uYXJ5IiBtc2dpZD0iNDM1MjE2MTUzNDUxMDA1Nzg3NCI+Ilp1bSBXw7ZydGVyYnVjaCBoaW56dWbDvGdlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4iTMO2c2NoZW4iPC9zdHJpbmc+CkBAIC0xMTA3LDYgKzExMDksNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4iSGludGVyZ3J1bmQgw6RuZGVybiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+IkJlbmFjaHJpY2h0aWd1bmdzLUxpc3RlbmVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiJCZWRpbmd1bmdzcHJvdmlkZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiJCZW5hY2hyaWNodGlndW5nc2Fzc2lzdGVudCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iVlBOIGFrdGl2aWVydCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+IlZQTiB3dXJkZSB2b24gPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IGFrdGl2aWVydC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiJadW0gVmVyd2FsdGVuIGRlcyBOZXR6d2Vya3MgYmVyw7xocmVuIjwvc3RyaW5nPgpAQCAtMTQ0MCwxMiArMTQ0Myw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+IlZvbiBJaHJlbSBBZG1pbmlzdHJhdG9yIGFrdHVhbGlzaWVydCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4iVm9uIElocmVtIEFkbWluaXN0cmF0b3IgZ2Vsw7ZzY2h0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiJEZXIgRW5lcmdpZXNwYXJtb2R1cyBzY2hvbnQgZGVuIEFra3UsIGluZGVtIGVyIGRpZSBMZWlzdHVuZyBkZXMgR2Vyw6R0cyByZWR1emllcnQgdW5kIGRpZSBWaWJyYXRpb25zZnVua3Rpb24gc293aWUgZGllIG1laXN0ZW4gSGludGVyZ3J1bmRkYXRlbmFrdGl2aXTDpHRlbiBlaW5zY2hyw6Rua3QuIEUtTWFpbCwgU01TL01NUyB1bmQgYW5kZXJlIEFwcHMsIGRpZSBhdWYgSWhyZW0gR2Vyw6R0IHN5bmNocm9uaXNpZXJ0IHdlcmRlbiwgd2VyZGVuIG3DtmdsaWNoZXJ3ZWlzZSBlcnN0IG5hY2ggZGVtIMOWZmZuZW4gYWt0dWFsaXNpZXJ0LlxuXG5EZXIgRW5lcmdpZXNwYXJtb2R1cyB3aXJkIGF1dG9tYXRpc2NoIGRlYWt0aXZpZXJ0LCB3ZW5uIElociBHZXLDpHQgYXVmZ2VsYWRlbiB3aXJkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX3RpdGxlIiBtc2dpZD0iNzQ5Mzk4OTcyMjYxMDAwODcwMCI+IldpY2h0aWdrZWl0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiJCbG9ja2llcnQ6IEtlaW5lIEJlbmFjaHJpY2h0aWd1bmdlbiBhbnplaWdlbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjY0NDc2NDA0NDk5MTg0MjcxODciPiJOaWVkcmlnOiBCZW5hY2hyaWNodGlndW5nZW4gZ2FueiB1bnRlbiBpbiBkZXIgQmVuYWNocmljaHRpZ3VuZ3NsaXN0ZSB1bmQgb2huZSBUb24gYW56ZWlnZW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNzk5MTE1NzY5NzYwOTU3NTI3MSI+Ik5vcm1hbDogQmVuYWNocmljaHRpZ3VuZ2VuIG9obmUgVG9uIGFuemVpZ2VuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiJIb2NoOiBCZW5hY2hyaWNodGlndW5nZW4gZ2FueiBvYmVuIGluIGRlciBCZW5hY2hyaWNodGlndW5nc2xpc3RlIHVuZCBtaXQgVG9uIGFuemVpZ2VuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+IkRyaW5nZW5kOiBNaXQgVG9uIGF1ZiBkZW0gRGlzcGxheSBlaW5ibGVuZGVuIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj4lMSRkwqBNaW51dGVuIChiaXMgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+McKgTWludXRlIChiaXMgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMCI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1lbC9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZWwvc3RyaW5ncy54bWwKaW5kZXggNjY2YjY1Yi4uODExNmIxNiAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1lbC9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWVsL3N0cmluZ3MueG1sCkBAIC0yMjMsNiArMjIzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9ja2Rvd24iIG1zZ2lkPSI4NzUxNTQyNTE0NzI0MzMyODczIj4izprOu861zq/OtM+JzrzOsSDPhM+Oz4HOsSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLOms+Bz4XPhs+MIM+AzrXPgc65zrXPh8+MzrzOtc69zr8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiLOkc+Dz4bOsc67zq7PgiDOu861zrnPhM6/z4XPgc6zzq/OsSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+Is6jz43Pg8+EzrfOvM6xIEFuZHJvaWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+Is6gz4HOv8+Dz4nPgM65zrrPjCI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+Is6Vz4DOuc+Ez4HOrc+AzrXOuSDPg8+EzrfOvSDOtc+GzrHPgc68zr/Os86uIM+EzrcgzrvOrs+Izrcgz4bPic+Ezr/Os8+BzrHPhs65z47OvSDOus6xzrkgzrLOr869z4TOtc6/IM68zrUgz4TOtyDPhs+Jz4TOv86zz4HOsc+GzrnOus6uIM68zrfPh86xzr3Ori4gzpHPhc+Ezq4gzrcgzqzOtM61zrnOsSDOtM6vzr3Otc65IM+EzrcgzrTPhc69zrHPhM+Mz4TOt8+EzrEgz4PPhM63zr0gzrXPhs6xz4HOvM6/zrPOriDOvc6xIM+Hz4HOt8+DzrnOvM6/z4DOv865zrXOryDPhM63IM+Gz4nPhM6/zrPPgc6xz4bOuc66zq4gzrzOt8+HzrHOvc6uIM6xzr3OrCDPgM6sz4POsSDPg8+EzrnOs868zq4gz4fPic+Bzq/PgiDPhM63zr0gzq3Os866z4HOuc+Dzq4gz4POsc+CLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiLOrc67zrXOs8+Hzr/PgiDOtM+Mzr3Ot8+DzrfPgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4izpXPgM65z4TPgc6tz4DOtc65IM+Dz4TOt869IM61z4bOsc+BzrzOv86zzq4gz4TOv869IM6tzrvOtc6zz4fOvyDPhM63z4IgzrTPjM69zrfPg863z4IuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mbGFzaGxpZ2h0IiBtc2dpZD0iMjE1NTkyMDgxMDEyMTk4NDIxNSI+Is6tzrvOtc6zz4fOv8+CIM+GzrHOus6/z40iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+Is6Vz4DOuc+Ez4HOrc+AzrXOuSDPg8+EzrfOvSDOtc+GzrHPgc68zr/Os86uIM+Ezr/OvSDOrc67zrXOs8+Hzr8gz4TOv8+FIM+GzrHOus6/z40uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4izrHPgM61z4XOuM61zq/Osc+CIM66zrvOrs+Dzrcgz4TOt867zrXPhs+Jzr3Ouc66z47OvSDOsc+BzrnOuM68z47OvSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQaG9uZSIgbXNnaWQ9IjM3NDA3OTc1NzYxMTM3NjA4MjciPiLOlc+AzrnPhM+Bzq3PgM61zrkgz4PPhM63zr0gzrXPhs6xz4HOvM6/zrPOriDPhM63zr0gzrrOu86uz4POtyDOsc+BzrnOuM68z47OvSDPhM63zrvOtc+Gz47Ovc6/z4Ugz4fPic+Bzq/PgiDOtM65zrrOriDPg86xz4Igz4DOsc+Bzq3OvM6yzrHPg863LiDOkc+Fz4TPjCDOvM+Azr/Pgc61zq8gzr3OsSDPgM+Bzr/Ous6xzrvOrc+DzrXOuSDOvM63IM6xzr3Osc68zrXOvc+MzrzOtc69zrXPgiDPh8+BzrXPjs+DzrXOuc+CIM6uIM66zrvOrs+DzrXOuc+CLiDOiM+HzrXPhM61IM+Fz4DPjM+Izrcgz4zPhM65IM60zrXOvSDOtc+AzrnPhM+Bzq3PgM61z4TOsc65IM+Dz4TOt869IM61z4bOsc+BzrzOv86zzq4gzrcgzrrOu86uz4POtyDOsc+BzrnOuM68z47OvSDOrc66z4TOsc66z4TOt8+CIM6xzr3OrM6zzrrOt8+CLiDOn865IM66zrHOus+MzrLOv8+FzrvOtc+CIM61z4bOsc+BzrzOv86zzq3PgiDOtc69zrTOrc+HzrXPhM6xzrkgzr3OsSDPg86xz4IgzrrOv8+Dz4TOr8+Dzr/Phc69IM+Hz4HOrs68zrHPhM6xLCDPgM+BzrHOs868zrHPhM6/z4DOv865z47Ovc+EzrHPgiDOus67zq7Pg861zrnPgiDPh8+Jz4HOr8+CIM+EzrfOvSDOrc6zzrrPgc65z4POriDPg86xz4IuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiLPgM+Bz4zPg86yzrHPg863IM+Dz4TOt869IM+Fz4DOt8+BzrXPg86vzrEgzrrOu86uz4POtc+Jzr0gz4TOt8+CIElNUyI8L3N0cmluZz4KQEAgLTg1OCwxMCArODU3LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJjdXQiIG1zZ2lkPSIzMDkyNTY5NDA4NDM4NjI2MjYxIj4izpHPgM6/zrrOv8+Azq4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+Is6Rzr3PhM65zrPPgc6xz4bOriI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+Is6Vz4DOuc66z4zOu867zrfPg863Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiLOlc+AzrnOus+MzrvOu863z4POtyDPic+CIM6xz4DOu8+MIM66zrXOr868zrXOvc6/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiLOkc69z4TOuc66zrHPhM6sz4PPhM6xz4POty4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZSIgbXNnaWQ9IjYwOTg2ODQ4NDQwMjE2OTc3ODkiPiLOlM65zrHOs8+BzrHPhs6uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiLOkc69z4TOuc6zz4HOsc+Gzq4gzrTOuc61z43OuM+Fzr3Pg863z4IgVVJMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4izpXPgM65zrvOv86zzq4gzrrOtc65zrzOrc69zr/PhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVuZG8iIG1zZ2lkPSI3OTA1Nzg4NTAyNDkxNzQyMzI4Ij4izpHOvc6xzq/Pgc61z4POtyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlZG8iIG1zZ2lkPSI3NzU5NDY0ODc2NTY2ODAzODg4Ij4izpXPgM6xzr3OrM67zrfPiM63Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGV4dFNlbGVjdGlvbkNBQlRpdGxlIiBtc2dpZD0iNTIzNjg1MDM5NDM3MDgyMDM1NyI+Is6Vz4DOuc67zr/Os86uIM66zrXOuc68zq3Ovc6/z4UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4izqDPgc6/z4POuM6uzrrOtyDPg8+Ezr8gzrvOtc6+zrnOus+MIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiLOlM65zrHOs8+BzrHPhs6uIjwvc3RyaW5nPgpAQCAtMTEwNyw2ICsxMTA5LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+Is6RzrvOu86xzrPOriDPhM6xz4DOtc+Ez4POsc+Bzq/Osc+CIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4izqXPgM63z4HOtc+Dzq/OsSDOsc66z4HPjM6xz4POt8+CIM61zrnOtM6/z4DOv86vzrfPg863z4IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+Is6gzqzPgc6/z4fOv8+CIM+Dz4XOvc64zrfOus+Ozr0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiLOks6/zrfOuM+Mz4IgzrXOuc60zr/PgM6/zrnOrs+DzrXPic69Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiLOpM6/IFZQTiDOtc69zrXPgc6zzr/PgM6/zrnOrs64zrfOus61Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4izqTOvyBWUE4gzrXOvc61z4HOs86/z4DOv865zq7OuM63zrrOtSDOsc+Az4wgz4TOt869IM61z4bOsc+BzrzOv86zzq4gPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4izpHOs86zzq/Ovs+EzrUgzrPOuc6xIM+EzrcgzrTOuc6xz4fOtc6vz4HOuc+Dzrcgz4TOv8+FIM60zrnOus+Ez43Ov8+FLiI8L3N0cmluZz4KQEAgLTE0NDAsMTIgKzE0NDMsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV91cGRhdGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijg4NTY2MzEzMjI0NDAxODcwNzEiPiLOlc69zrfOvM61z4HPjs64zrfOus61IM6xz4DPjCDPhM6/IM60zrnOsc+HzrXOuc+BzrnPg8+Ezq4gz4POsc+CIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiLOlM65zrHOs8+BzqzPhs63zrrOtSDOsc+Az4wgz4TOvyDOtM65zrHPh861zrnPgc65z4PPhM6uIM+DzrHPgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4izqDPgc6/zrrOtc65zrzOrc69zr/PhSDOvc6xIM6yzrXOu8+EzrnPjs+DzrXOuSDPhM63IM60zrnOrM+BzrrOtc65zrEgzrbPic6uz4Igz4TOt8+CIM68z4DOsc+EzrHPgc6vzrHPgiDPg86xz4IsIM63IM6Vzr7Ov865zrrOv869z4zOvM63z4POtyDOvM+AzrHPhM6xz4HOr86xz4IgzrzOtc65z47Ovc61zrkgz4TOt869IM6xz4DPjM60zr/Pg863IM+EzrfPgiDPg8+Fz4POus61z4XOrs+CIM+DzrHPgiDOus6xzrkgz4DOtc+BzrnOv8+Bzq/Ots61zrkgzrvOtc65z4TOv8+Fz4HOs86vzrXPgiDPjM+Az4nPgiDOtyDOtM+Mzr3Ot8+DzrcsIM6/zrkgz4XPgM63z4HOtc+Dzq/Otc+CIM+Ezr/PgM6/zrjOtc+Dzq/Osc+CIM66zrHOuSDPhM6xIM+AzrXPgc65z4PPg8+Mz4TOtc+BzrEgzrTOtc60zr/OvM6tzr3OsSDPgM6xz4HOsc+DzrrOt869zq/Ov8+FLiDOpM6/IM63zrvOtc66z4TPgc6/zr3Ouc66z4wgz4TOsc+Hz4XOtM+Bzr/OvM61zq/OvywgzrcgzrHOvc+EzrHOu867zrHOs86uIM68zrfOvc+FzrzOrM+Ez4nOvSDOus6xzrkgzqzOu867zrXPgiDOtc+GzrHPgc68zr/Os86tz4Igz4DOv8+FIM6yzrHPg86vzrbOv869z4TOsc65IM+Dz4TOvyDPg8+FzrPPh8+Bzr/Ovc65z4POvM+MIM61zr3OtM6tz4fOtc+EzrHOuSDOvc6xIM68zrfOvSDOtc69zrfOvM61z4HPjs69zr/Ovc+EzrHOuSDOrc+Jz4Igz4zPhM6/z4Ugz4TOuc+CIM6xzr3Ov86vzr7Otc+EzrUuXG5cbs6XIM6Vzr7Ov865zrrOv869z4zOvM63z4POtyDOvM+AzrHPhM6xz4HOr86xz4IgzrHPgM61zr3Otc+BzrPOv8+Azr/Ouc61zq/PhM6xzrkgzrHPhc+Ez4zOvM6xz4TOsSDPjM+EzrHOvSDOtyDPg8+Fz4POus61z4XOriDPg86xz4Igz4bOv8+Bz4TOr862zrXOuS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV90aXRsZSIgbXNnaWQ9Ijc0OTM5ODk3MjI2MTAwMDg3MDAiPiLOks6xz4HPjc+EzrfPhM6xIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiLOkc+Azr/Ous67zrXOuc+DzrzOrc69zrXPgjogzp3OsSDOvM63zr0gzrXOvM+GzrHOvc6vzrbOv869z4TOsc65IM+Azr/PhM6tIM6xz4XPhM6tz4Igzr/OuSDOtc65zrTOv8+Azr/Ouc6uz4POtc65z4IiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4izqfOsc68zrfOu86uz4IgzrLOsc+Bz43PhM63z4TOsc+COiDOnc6xIM61zrzPhs6xzr3Or862zr/Ovc+EzrHOuSDPg8+Ezr8gzrrOrM+Ez4kgz4TOvM6uzrzOsSDPhM63z4IgzrvOr8+Dz4TOsc+CIM61zrnOtM6/z4DOv865zq7Pg861z4nOvSDPh8+Jz4HOr8+CIM+Ezrcgz4PPhc69zr/OtM61zq/OsSDOrs+Hzr/PhSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI3OTkxMTU3Njk3NjA5NTc1MjcxIj4izprOsc69zr/Ovc65zrrOriDOss6xz4HPjc+EzrfPhM6xOiDOnc6xIM61zrzPhs6xzr3Or862zr/Ovc+EzrHOuSDOsc+Fz4TOrc+CIM6/zrkgzrXOuc60zr/PgM6/zrnOrs+DzrXOuc+CIM+Hz4nPgc6vz4Igzq7Ph86/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiLOpc+IzrfOu86uz4IgzrLOsc+Bz43PhM63z4TOsc+COiDOnc6xIM61zrzPhs6xzr3Or862zr/Ovc+EzrHOuSDPg8+EzrfOvSDOus6/z4HPhc+Gzq4gz4TOt8+CIM67zq/Pg8+EzrHPgiDOtc65zrTOv8+Azr/Ouc6uz4POtc+Jzr0gz4PPhc69zr/OtM61z4XPjM68zrXOvc61z4IgzrHPgM+MIM66zqzPgM6/zrnOv869IM6uz4fOvyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiLOlc+AzrXOr86zzr/Phc+DzrXPgjogzp3OsSDPgM+Bzr/Oss6szrvOu86/zr3PhM6xzrkgz4PPhM63zr0gzr/OuM+Mzr3OtyDOus6xzrkgzr3OsSDPg8+Fzr3Ov860zrXPjc6/zr3PhM6xzrkgzrHPgM+MIM66zqzPgM6/zrnOv869IM6uz4fOvyI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+zpPOuc6xICUxJGQgzrvOtc+Az4TOrCAozq3Pic+CIM+EzrnPgiA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj7Ok865zrEgzq3Ovc6xIM67zrXPgM+Ez4wgKM6tz4nPgiDPhM65z4IgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMCI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1lbi1yQVUvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWVuLXJBVS9zdHJpbmdzLnhtbAppbmRleCA5MzUwZWY3Mi4uOTMwYzMxMCAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1lbi1yQVUvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1lbi1yQVUvc3RyaW5ncy54bWwKQEAgLTIyMyw2ICsyMjMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiJMb2NrIG5vdyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJDb250ZW50cyBoaWRkZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiJTYWZlIG1vZGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiJBbmRyb2lkIHN5c3RlbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4iUGVyc29uYWwiPC9zdHJpbmc+CkBAIC0zNTMsOCArMzU0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiJBbGxvd3MgdGhlIGFwcCB0byB0YWtlIHBpY3R1cmVzIGFuZCB2aWRlb3Mgd2l0aCB0aGUgY2FtZXJhLiBUaGlzIHBlcm1pc3Npb24gYWxsb3dzIHRoZSBhcHAgdG8gdXNlIHRoZSBjYW1lcmEgYXQgYW55IHRpbWUgd2l0aG91dCB5b3VyIGNvbmZpcm1hdGlvbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4iY29udHJvbCB2aWJyYXRpb24iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+IkFsbG93cyB0aGUgYXBwIHRvIGNvbnRyb2wgdGhlIHZpYnJhdG9yLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiJjb250cm9sIGZsYXNobGlnaHQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+IkFsbG93cyB0aGUgYXBwIHRvIGNvbnRyb2wgdGhlIGZsYXNobGlnaHQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4iZGlyZWN0bHkgY2FsbCBwaG9uZSBudW1iZXJzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+IkFsbG93cyB0aGUgYXBwIHRvIGNhbGwgcGhvbmUgbnVtYmVycyB3aXRob3V0IHlvdXIgaW50ZXJ2ZW50aW9uLiBUaGlzIG1heSByZXN1bHQgaW4gdW5leHBlY3RlZCBjaGFyZ2VzIG9yIGNhbGxzLiBOb3RlIHRoYXQgdGhpcyBkb2VzblwndCBhbGxvdyB0aGUgYXBwIHRvIGNhbGwgZW1lcmdlbmN5IG51bWJlcnMuIE1hbGljaW91cyBhcHBzIG1heSBjb3N0IHlvdSBtb25leSBieSBtYWtpbmcgY2FsbHMgd2l0aG91dCB5b3VyIGNvbmZpcm1hdGlvbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ltc0NhbGxTZXJ2aWNlIiBtc2dpZD0iMzU3NDk0Mzg0NzE4MTc5MzkxOCI+ImFjY2VzcyBJTVMgY2FsbCBzZXJ2aWNlIjwvc3RyaW5nPgpAQCAtODU4LDEwICs4NTcsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiJDdXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+IkNvcHkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiJQYXN0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4iUGFzdGUgYXMgcGxhaW4gdGV4dCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4iUmVwbGFjZS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZSIgbXNnaWQ9IjYwOTg2ODQ4NDQwMjE2OTc3ODkiPiJEZWxldGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IkNvcHkgVVJMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4iU2VsZWN0IHRleHQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmRvIiBtc2dpZD0iNzkwNTc4ODUwMjQ5MTc0MjMyOCI+IlVuZG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+IlJlZG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4iVGV4dCBzZWxlY3Rpb24iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4iQWRkIHRvIGRpY3Rpb25hcnkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+IkRlbGV0ZSI8L3N0cmluZz4KQEAgLTExMDcsNiArMTEwOSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiJDaGFuZ2Ugd2FsbHBhcGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4iTm90aWZpY2F0aW9uIGxpc3RlbmVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiJDb25kaXRpb24gcHJvdmlkZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiJOb3RpZmljYXRpb24gYXNzaXN0YW50Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJWUE4gYWN0aXZhdGVkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4iVlBOIGlzIGFjdGl2YXRlZCBieSA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiJUb3VjaCB0byBtYW5hZ2UgdGhlIG5ldHdvcmsuIjwvc3RyaW5nPgpAQCAtMTQ0MCwxMiArMTQ0Myw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+IlVwZGF0ZWQgYnkgeW91ciBhZG1pbmlzdHJhdG9yIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiJEZWxldGVkIGJ5IHlvdXIgYWRtaW5pc3RyYXRvciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4iVG8gaGVscCBpbXByb3ZlIGJhdHRlcnkgbGlmZSwgYmF0dGVyeSBzYXZlciByZWR1Y2VzIHlvdXIgZGV2aWNl4oCZcyBwZXJmb3JtYW5jZSBhbmQgbGltaXRzIHZpYnJhdGlvbiwgbG9jYXRpb24gc2VydmljZXMgYW5kIG1vc3QgYmFja2dyb3VuZCBkYXRhLiBFbWFpbCwgbWVzc2FnaW5nLCBhbmQgb3RoZXIgYXBwcyB0aGF0IHJlbHkgb24gc3luY2luZyBtYXkgbm90IHVwZGF0ZSB1bmxlc3MgeW91IG9wZW4gdGhlbS5cblxuQmF0dGVyeSBzYXZlciB0dXJucyBvZmYgYXV0b21hdGljYWxseSB3aGVuIHlvdXIgZGV2aWNlIGlzIGNoYXJnaW5nLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX3RpdGxlIiBtc2dpZD0iNzQ5Mzk4OTcyMjYxMDAwODcwMCI+IkltcG9ydGFuY2UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iNzExODgyNjkwMDc2NzA0NzEyNSI+IkJsb2NrZWQ6IE5ldmVyIHNob3cgdGhlc2Ugbm90aWZpY2F0aW9ucyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjY0NDc2NDA0NDk5MTg0MjcxODciPiJMb3c6IFNpbGVudGx5IHNob3cgYXQgdGhlIGJvdHRvbSBvZiB0aGUgbm90aWZpY2F0aW9uIGxpc3QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNzk5MTE1NzY5NzYwOTU3NTI3MSI+Ik5vcm1hbDogU2lsZW50bHkgc2hvdyB0aGVzZSBub3RpZmljYXRpb25zIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiJIaWdoOiBTaG93IGF0IHRoZSB0b3Agb2YgdGhlIG5vdGlmaWNhdGlvbnMgbGlzdCBhbmQgbWFrZSBzb3VuZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiJVcmdlbnQ6IFBlZWsgb250byB0aGUgc2NyZWVuIGFuZCBtYWtlIHNvdW5kIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5Gb3IgJTEkZCBtaW51dGVzICh1bnRpbCA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj5Gb3Igb25lIG1pbnV0ZSAodW50aWwgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMCI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1lbi1yR0Ivc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWVuLXJHQi9zdHJpbmdzLnhtbAppbmRleCA5MzUwZWY3Mi4uOTMwYzMxMCAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1lbi1yR0Ivc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1lbi1yR0Ivc3RyaW5ncy54bWwKQEAgLTIyMyw2ICsyMjMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiJMb2NrIG5vdyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJDb250ZW50cyBoaWRkZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiJTYWZlIG1vZGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiJBbmRyb2lkIHN5c3RlbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4iUGVyc29uYWwiPC9zdHJpbmc+CkBAIC0zNTMsOCArMzU0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiJBbGxvd3MgdGhlIGFwcCB0byB0YWtlIHBpY3R1cmVzIGFuZCB2aWRlb3Mgd2l0aCB0aGUgY2FtZXJhLiBUaGlzIHBlcm1pc3Npb24gYWxsb3dzIHRoZSBhcHAgdG8gdXNlIHRoZSBjYW1lcmEgYXQgYW55IHRpbWUgd2l0aG91dCB5b3VyIGNvbmZpcm1hdGlvbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4iY29udHJvbCB2aWJyYXRpb24iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+IkFsbG93cyB0aGUgYXBwIHRvIGNvbnRyb2wgdGhlIHZpYnJhdG9yLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiJjb250cm9sIGZsYXNobGlnaHQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+IkFsbG93cyB0aGUgYXBwIHRvIGNvbnRyb2wgdGhlIGZsYXNobGlnaHQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4iZGlyZWN0bHkgY2FsbCBwaG9uZSBudW1iZXJzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+IkFsbG93cyB0aGUgYXBwIHRvIGNhbGwgcGhvbmUgbnVtYmVycyB3aXRob3V0IHlvdXIgaW50ZXJ2ZW50aW9uLiBUaGlzIG1heSByZXN1bHQgaW4gdW5leHBlY3RlZCBjaGFyZ2VzIG9yIGNhbGxzLiBOb3RlIHRoYXQgdGhpcyBkb2VzblwndCBhbGxvdyB0aGUgYXBwIHRvIGNhbGwgZW1lcmdlbmN5IG51bWJlcnMuIE1hbGljaW91cyBhcHBzIG1heSBjb3N0IHlvdSBtb25leSBieSBtYWtpbmcgY2FsbHMgd2l0aG91dCB5b3VyIGNvbmZpcm1hdGlvbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ltc0NhbGxTZXJ2aWNlIiBtc2dpZD0iMzU3NDk0Mzg0NzE4MTc5MzkxOCI+ImFjY2VzcyBJTVMgY2FsbCBzZXJ2aWNlIjwvc3RyaW5nPgpAQCAtODU4LDEwICs4NTcsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiJDdXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+IkNvcHkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiJQYXN0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4iUGFzdGUgYXMgcGxhaW4gdGV4dCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4iUmVwbGFjZS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZSIgbXNnaWQ9IjYwOTg2ODQ4NDQwMjE2OTc3ODkiPiJEZWxldGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IkNvcHkgVVJMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4iU2VsZWN0IHRleHQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmRvIiBtc2dpZD0iNzkwNTc4ODUwMjQ5MTc0MjMyOCI+IlVuZG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+IlJlZG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4iVGV4dCBzZWxlY3Rpb24iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4iQWRkIHRvIGRpY3Rpb25hcnkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+IkRlbGV0ZSI8L3N0cmluZz4KQEAgLTExMDcsNiArMTEwOSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiJDaGFuZ2Ugd2FsbHBhcGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4iTm90aWZpY2F0aW9uIGxpc3RlbmVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiJDb25kaXRpb24gcHJvdmlkZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiJOb3RpZmljYXRpb24gYXNzaXN0YW50Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJWUE4gYWN0aXZhdGVkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4iVlBOIGlzIGFjdGl2YXRlZCBieSA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiJUb3VjaCB0byBtYW5hZ2UgdGhlIG5ldHdvcmsuIjwvc3RyaW5nPgpAQCAtMTQ0MCwxMiArMTQ0Myw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+IlVwZGF0ZWQgYnkgeW91ciBhZG1pbmlzdHJhdG9yIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiJEZWxldGVkIGJ5IHlvdXIgYWRtaW5pc3RyYXRvciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4iVG8gaGVscCBpbXByb3ZlIGJhdHRlcnkgbGlmZSwgYmF0dGVyeSBzYXZlciByZWR1Y2VzIHlvdXIgZGV2aWNl4oCZcyBwZXJmb3JtYW5jZSBhbmQgbGltaXRzIHZpYnJhdGlvbiwgbG9jYXRpb24gc2VydmljZXMgYW5kIG1vc3QgYmFja2dyb3VuZCBkYXRhLiBFbWFpbCwgbWVzc2FnaW5nLCBhbmQgb3RoZXIgYXBwcyB0aGF0IHJlbHkgb24gc3luY2luZyBtYXkgbm90IHVwZGF0ZSB1bmxlc3MgeW91IG9wZW4gdGhlbS5cblxuQmF0dGVyeSBzYXZlciB0dXJucyBvZmYgYXV0b21hdGljYWxseSB3aGVuIHlvdXIgZGV2aWNlIGlzIGNoYXJnaW5nLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX3RpdGxlIiBtc2dpZD0iNzQ5Mzk4OTcyMjYxMDAwODcwMCI+IkltcG9ydGFuY2UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iNzExODgyNjkwMDc2NzA0NzEyNSI+IkJsb2NrZWQ6IE5ldmVyIHNob3cgdGhlc2Ugbm90aWZpY2F0aW9ucyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjY0NDc2NDA0NDk5MTg0MjcxODciPiJMb3c6IFNpbGVudGx5IHNob3cgYXQgdGhlIGJvdHRvbSBvZiB0aGUgbm90aWZpY2F0aW9uIGxpc3QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNzk5MTE1NzY5NzYwOTU3NTI3MSI+Ik5vcm1hbDogU2lsZW50bHkgc2hvdyB0aGVzZSBub3RpZmljYXRpb25zIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiJIaWdoOiBTaG93IGF0IHRoZSB0b3Agb2YgdGhlIG5vdGlmaWNhdGlvbnMgbGlzdCBhbmQgbWFrZSBzb3VuZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiJVcmdlbnQ6IFBlZWsgb250byB0aGUgc2NyZWVuIGFuZCBtYWtlIHNvdW5kIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5Gb3IgJTEkZCBtaW51dGVzICh1bnRpbCA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj5Gb3Igb25lIG1pbnV0ZSAodW50aWwgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMCI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1lbi1ySU4vc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWVuLXJJTi9zdHJpbmdzLnhtbAppbmRleCA5MzUwZWY3Mi4uOTMwYzMxMCAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1lbi1ySU4vc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1lbi1ySU4vc3RyaW5ncy54bWwKQEAgLTIyMyw2ICsyMjMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiJMb2NrIG5vdyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJDb250ZW50cyBoaWRkZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiJTYWZlIG1vZGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiJBbmRyb2lkIHN5c3RlbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4iUGVyc29uYWwiPC9zdHJpbmc+CkBAIC0zNTMsOCArMzU0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiJBbGxvd3MgdGhlIGFwcCB0byB0YWtlIHBpY3R1cmVzIGFuZCB2aWRlb3Mgd2l0aCB0aGUgY2FtZXJhLiBUaGlzIHBlcm1pc3Npb24gYWxsb3dzIHRoZSBhcHAgdG8gdXNlIHRoZSBjYW1lcmEgYXQgYW55IHRpbWUgd2l0aG91dCB5b3VyIGNvbmZpcm1hdGlvbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4iY29udHJvbCB2aWJyYXRpb24iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+IkFsbG93cyB0aGUgYXBwIHRvIGNvbnRyb2wgdGhlIHZpYnJhdG9yLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiJjb250cm9sIGZsYXNobGlnaHQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+IkFsbG93cyB0aGUgYXBwIHRvIGNvbnRyb2wgdGhlIGZsYXNobGlnaHQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4iZGlyZWN0bHkgY2FsbCBwaG9uZSBudW1iZXJzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+IkFsbG93cyB0aGUgYXBwIHRvIGNhbGwgcGhvbmUgbnVtYmVycyB3aXRob3V0IHlvdXIgaW50ZXJ2ZW50aW9uLiBUaGlzIG1heSByZXN1bHQgaW4gdW5leHBlY3RlZCBjaGFyZ2VzIG9yIGNhbGxzLiBOb3RlIHRoYXQgdGhpcyBkb2VzblwndCBhbGxvdyB0aGUgYXBwIHRvIGNhbGwgZW1lcmdlbmN5IG51bWJlcnMuIE1hbGljaW91cyBhcHBzIG1heSBjb3N0IHlvdSBtb25leSBieSBtYWtpbmcgY2FsbHMgd2l0aG91dCB5b3VyIGNvbmZpcm1hdGlvbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ltc0NhbGxTZXJ2aWNlIiBtc2dpZD0iMzU3NDk0Mzg0NzE4MTc5MzkxOCI+ImFjY2VzcyBJTVMgY2FsbCBzZXJ2aWNlIjwvc3RyaW5nPgpAQCAtODU4LDEwICs4NTcsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiJDdXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+IkNvcHkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiJQYXN0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4iUGFzdGUgYXMgcGxhaW4gdGV4dCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4iUmVwbGFjZS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZSIgbXNnaWQ9IjYwOTg2ODQ4NDQwMjE2OTc3ODkiPiJEZWxldGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IkNvcHkgVVJMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4iU2VsZWN0IHRleHQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmRvIiBtc2dpZD0iNzkwNTc4ODUwMjQ5MTc0MjMyOCI+IlVuZG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+IlJlZG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4iVGV4dCBzZWxlY3Rpb24iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4iQWRkIHRvIGRpY3Rpb25hcnkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+IkRlbGV0ZSI8L3N0cmluZz4KQEAgLTExMDcsNiArMTEwOSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiJDaGFuZ2Ugd2FsbHBhcGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4iTm90aWZpY2F0aW9uIGxpc3RlbmVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiJDb25kaXRpb24gcHJvdmlkZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiJOb3RpZmljYXRpb24gYXNzaXN0YW50Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJWUE4gYWN0aXZhdGVkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4iVlBOIGlzIGFjdGl2YXRlZCBieSA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiJUb3VjaCB0byBtYW5hZ2UgdGhlIG5ldHdvcmsuIjwvc3RyaW5nPgpAQCAtMTQ0MCwxMiArMTQ0Myw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+IlVwZGF0ZWQgYnkgeW91ciBhZG1pbmlzdHJhdG9yIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiJEZWxldGVkIGJ5IHlvdXIgYWRtaW5pc3RyYXRvciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4iVG8gaGVscCBpbXByb3ZlIGJhdHRlcnkgbGlmZSwgYmF0dGVyeSBzYXZlciByZWR1Y2VzIHlvdXIgZGV2aWNl4oCZcyBwZXJmb3JtYW5jZSBhbmQgbGltaXRzIHZpYnJhdGlvbiwgbG9jYXRpb24gc2VydmljZXMgYW5kIG1vc3QgYmFja2dyb3VuZCBkYXRhLiBFbWFpbCwgbWVzc2FnaW5nLCBhbmQgb3RoZXIgYXBwcyB0aGF0IHJlbHkgb24gc3luY2luZyBtYXkgbm90IHVwZGF0ZSB1bmxlc3MgeW91IG9wZW4gdGhlbS5cblxuQmF0dGVyeSBzYXZlciB0dXJucyBvZmYgYXV0b21hdGljYWxseSB3aGVuIHlvdXIgZGV2aWNlIGlzIGNoYXJnaW5nLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX3RpdGxlIiBtc2dpZD0iNzQ5Mzk4OTcyMjYxMDAwODcwMCI+IkltcG9ydGFuY2UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iNzExODgyNjkwMDc2NzA0NzEyNSI+IkJsb2NrZWQ6IE5ldmVyIHNob3cgdGhlc2Ugbm90aWZpY2F0aW9ucyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjY0NDc2NDA0NDk5MTg0MjcxODciPiJMb3c6IFNpbGVudGx5IHNob3cgYXQgdGhlIGJvdHRvbSBvZiB0aGUgbm90aWZpY2F0aW9uIGxpc3QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNzk5MTE1NzY5NzYwOTU3NTI3MSI+Ik5vcm1hbDogU2lsZW50bHkgc2hvdyB0aGVzZSBub3RpZmljYXRpb25zIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiJIaWdoOiBTaG93IGF0IHRoZSB0b3Agb2YgdGhlIG5vdGlmaWNhdGlvbnMgbGlzdCBhbmQgbWFrZSBzb3VuZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiJVcmdlbnQ6IFBlZWsgb250byB0aGUgc2NyZWVuIGFuZCBtYWtlIHNvdW5kIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5Gb3IgJTEkZCBtaW51dGVzICh1bnRpbCA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj5Gb3Igb25lIG1pbnV0ZSAodW50aWwgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMCI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1lcy1yVVMvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWVzLXJVUy9zdHJpbmdzLnhtbAppbmRleCAzMzljMzE1Li4yNThlZjMzIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWVzLXJVUy9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWVzLXJVUy9zdHJpbmdzLnhtbApAQCAtMjIzLDYgKzIyMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2tkb3duIiBtc2dpZD0iODc1MTU0MjUxNDcyNDMzMjg3MyI+IkJsb3F1ZWFyIGFob3JhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiI5OTkrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2NoaWxkcmVuX2NvdW50X2JyYWNrZXRlZCIgbXNnaWQ9IjE3Njk0MjU0NzMxNjgzNDc4MzkiPiIoPHhsaWZmOmcgaWQ9Ik5PVElGSUNBVElPTkNPVU5UIj4lZDwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IkNvbnRlbmlkb3Mgb2N1bHRvcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+Ik1vZG8gc2VndXJvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4iU2lzdGVtYSBBbmRyb2lkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNlcl9vd25lcl9sYWJlbCIgbXNnaWQ9IjI4MDQzNTE4OTgwMDEwMzg5NTEiPiJQZXJzb25hbCI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IlBlcm1pdGUgcXVlIGxhIGFwbGljYWNpw7NuIHNhcXVlIGZvdG9zIG8gZ3JhYmUgdmlkZW9zIGNvbiBsYSBjw6FtYXJhLiBFc3RlIHBlcm1pc28gYXV0b3JpemEgYSBsYSBhcGxpY2FjacOzbiBhIHV0aWxpemFyIGxhIGPDoW1hcmEgZW4gY3VhbHF1aWVyIG1vbWVudG8gc2luIHR1IGNvbmZpcm1hY2nDs24uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl92aWJyYXRlIiBtc2dpZD0iNzY5NjQyNzAyNjA1NzcwNTgzNCI+ImNvbnRyb2xhciBsYSB2aWJyYWNpw7NuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiJQZXJtaXRlIHF1ZSBsYSBhcGxpY2FjacOzbiBjb250cm9sZSBsYSB2aWJyYWNpw7NuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiJjb250cm9sYXIgbGludGVybmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+IlBlcm1pdGUgcXVlIGxhIGFwbGljYWNpw7NuIGNvbnRyb2xlIGxhIGZ1bmNpw7NuIGRlIGxpbnRlcm5hLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+ImxsYW1hciBkaXJlY3RhbWVudGUgYSBuw7ptZXJvcyBkZSB0ZWzDqWZvbm8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4iUGVybWl0ZSBxdWUgbGEgYXBsaWNhY2nDs24gaGFnYSBsbGFtYWRhcyBhIG7Dum1lcm9zIGRlIHRlbMOpZm9ubyBzaW4gaW50ZXJ2ZW5jacOzbiBkZWwgdXN1YXJpbywgbG8gcXVlIHB1ZWRlIGRhciBsdWdhciBhIGxsYW1hZGFzIG8gY2FyZ29zIGluZXNwZXJhZG9zLiBUZW4gZW4gY3VlbnRhIHF1ZSBsYXMgYXBsaWNhY2lvbmVzIG5vIHB1ZWRlbiB1c2FyIGVzdGUgc2VydmljaW8gcGFyYSByZWFsaXphciBsbGFtYWRhcyBhIG7Dum1lcm9zIGRlIGVtZXJnZW5jaWEsIHBlcm8gbGFzIGFwbGljYWNpb25lcyBtYWxpbnRlbmNpb25hZGFzIHB1ZWRlbiBjYXVzYXJ0ZSBnYXN0b3MgaW1wcmV2aXN0b3MgYWwgcmVhbGl6YXIgbGxhbWFkYXMgc2luIHR1IGNvbmZpcm1hY2nDs24uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiJhY2NlZGVyIGFsIHNlcnZpY2lvIElNUyBwYXJhIHJlYWxpemFyIGxsYW1hZGFzIjwvc3RyaW5nPgpAQCAtODU4LDEwICs4NTcsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiJDb3J0YXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+IkNvcGlhciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+IlBlZ2FyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiJQZWdhciBjb21vIHRleHRvIHNpbiBmb3JtYXRvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiJSZWVtcGxhemFyLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+IkVsaW1pbmFyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiJDb3BpYXIgVVJMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4iU2VsZWNjaW9uYXIgdGV4dG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmRvIiBtc2dpZD0iNzkwNTc4ODUwMjQ5MTc0MjMyOCI+IkRlc2hhY2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiJSZWhhY2VyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGV4dFNlbGVjdGlvbkNBQlRpdGxlIiBtc2dpZD0iNTIzNjg1MDM5NDM3MDgyMDM1NyI+IlNlbGVjY2nDs24gZGUgdGV4dG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4iQWdyZWdhciBhbCBkaWNjaW9uYXJpbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4iRWxpbWluYXIiPC9zdHJpbmc+CkBAIC0xMTA3LDYgKzExMDksNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4iQ2FtYmlhciBmb25kbyBkZSBwYW50YWxsYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+IkFnZW50ZSBkZSBlc2N1Y2hhIGRlIG5vdGlmaWNhY2lvbmVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiJQcm92ZWVkb3IgZGUgY29uZGljaW9uZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiJBc2lzdGVudGUgZGUgbm90aWZpY2FjaW9uZXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IlZQTiBhY3RpdmFkYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+IlZQTiBlc3TDoSBhY3RpdmFkbyBwb3IgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4iVG9jYSBwYXJhIGFkbWluaXN0cmFyIGxhIHJlZC4iPC9zdHJpbmc+CkBAIC0xNDQwLDEyICsxNDQzLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4iQWN0dWFsaXphZG8gcG9yIGVsIGFkbWluaXN0cmFkb3IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX2RlbGV0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iNzY1MDU3NzM4NzQ5MzEwMTM1MyI+IkxvIGVsaW1pbsOzIGVsIGFkbWluaXN0cmFkb3IuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiJQYXJhIGF5dWRhciBhIG1lam9yYXIgbGEgZHVyYWNpw7NuIGRlIGxhIGJhdGVyw61hLCBlbCBhaG9ycm8gZGUgYmF0ZXLDrWEgcmVkdWNlIGVsIHJlbmRpbWllbnRvIGRlbCBkaXNwb3NpdGl2byB5IGxpbWl0YSBsYSB2aWJyYWNpw7NuLCBsb3Mgc2VydmljaW9zIGRlIHViaWNhY2nDs24geSBsYSBtYXlvcsOtYSBkZSBsb3MgZGF0b3MgZW4gc2VndW5kbyBwbGFuby4gRXMgcG9zaWJsZSBxdWUgZWwgY29ycmVvIGVsZWN0csOzbmljbywgbGEgbWVuc2FqZXLDrWEgeSBvdHJhcyBhcGxpY2FjaW9uZXMgcXVlIHNlIGJhc2FuIGVuIGxhIHNpbmNyb25pemFjacOzbiBubyBwdWVkYW4gYWN0dWFsaXphcnNlLCBhIG1lbm9zIHF1ZSBsb3MgYWJyYXMuXG5cbkVsIGFob3JybyBkZSBiYXRlcsOtYSBzZSBkZXNhY3RpdmEgZGUgZm9ybWEgYXV0b23DoXRpY2EgY3VhbmRvIGVsIGRpc3Bvc2l0aXZvIHNlIGVzdMOhIGNhcmdhbmRvLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX3RpdGxlIiBtc2dpZD0iNzQ5Mzk4OTcyMjYxMDAwODcwMCI+IkltcG9ydGFuY2lhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiJCbG9xdWVhZGE6IG5vIG1vc3RyYXIgbnVuY2EgZXN0YXMgbm90aWZpY2FjaW9uZXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4iQmFqYTogbW9zdHJhciBlbiBsYSBwYXJ0ZSBpbmZlcmlvciBkZSBsYSBsaXN0YSBkZSBub3RpZmljYWNpw7NuIHNpbiBlbWl0aXIgc29uaWRvIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiJOb3JtYWw6IG1vc3RyYXIgZXN0YXMgbm90aWZpY2FjaW9uZXMgZGUgbWFuZXJhIHNpbGVuY2lvc2EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzE1MjIzODYzNzczNzIxNTY1NCI+IkFsdGE6IG1vc3RyYXIgZW4gbGEgcGFydGUgc3VwZXJpb3IgZGUgbGEgbGlzdGEgZGUgbm90aWZpY2FjaW9uZXMgeSBlbWl0aXIgc29uaWRvIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+IlVyZ2VudGU6IG1vc3RyYXIgZW4gbGEgcGFudGFsbGEgeSBlbWl0aXIgc29uaWRvIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5EdXJhbnRlICUxJGQgbWludXRvcyBoYXN0YSBsYShzKSA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPjwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPkR1cmFudGUgMSBtaW51dG87IGhhc3RhIGxhKHMpIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzAiPiUyJHM8L3hsaWZmOmc+PC9pdGVtPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1lcy9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZXMvc3RyaW5ncy54bWwKaW5kZXggNWI4MmEwOC4uOTg0OGJiNiAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1lcy9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWVzL3N0cmluZ3MueG1sCkBAIC0yMjMsNiArMjIzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9ja2Rvd24iIG1zZ2lkPSI4NzUxNTQyNTE0NzI0MzMyODczIj4iQmxvcXVlYXIgYWhvcmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+IiZndDsgOTk5Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2NoaWxkcmVuX2NvdW50X2JyYWNrZXRlZCIgbXNnaWQ9IjE3Njk0MjU0NzMxNjgzNDc4MzkiPiIoPHhsaWZmOmcgaWQ9Ik5PVElGSUNBVElPTkNPVU5UIj4lZDwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IkNvbnRlbmlkb3Mgb2N1bHRvcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+Ik1vZG8gc2VndXJvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4iU2lzdGVtYSBBbmRyb2lkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNlcl9vd25lcl9sYWJlbCIgbXNnaWQ9IjI4MDQzNTE4OTgwMDEwMzg5NTEiPiJQZXJzb25hbCI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IlBlcm1pdGUgcXVlIGxhIGFwbGljYWNpw7NuIGhhZ2EgZm90b3MgbyBncmFiZSB2w61kZW9zIGNvbiBsYSBjw6FtYXJhLiBFc3RlIHBlcm1pc28gYXV0b3JpemEgYSBsYSBhcGxpY2FjacOzbiBhIHV0aWxpemFyIGxhIGPDoW1hcmEgZW4gY3VhbHF1aWVyIG1vbWVudG8gc2luIHR1IGNvbmZpcm1hY2nDs24uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl92aWJyYXRlIiBtc2dpZD0iNzY5NjQyNzAyNjA1NzcwNTgzNCI+ImNvbnRyb2xhciBsYSB2aWJyYWNpw7NuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiJQZXJtaXRlIHF1ZSBsYSBhcGxpY2FjacOzbiBjb250cm9sZSBsYSBmdW5jacOzbiBkZSB2aWJyYWNpw7NuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiJjb250cm9sYXIgbGludGVybmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+IlBlcm1pdGUgcXVlIGxhIGFwbGljYWNpw7NuIGNvbnRyb2xlIGxhIGZ1bmNpw7NuIGRlIGxpbnRlcm5hLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+ImxsYW1hciBkaXJlY3RhbWVudGUgYSBuw7ptZXJvcyBkZSB0ZWzDqWZvbm8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4iUGVybWl0ZSBxdWUgbGEgYXBsaWNhY2nDs24gaGFnYSBsbGFtYWRhcyBzaW4gaW50ZXJ2ZW5jacOzbiBkZWwgdXN1YXJpbywgbG8gcXVlIHB1ZWRlIGRhciBsdWdhciBhIGxsYW1hZGFzIG8gY2FyZ29zIGluZXNwZXJhZG9zLiBUZW4gZW4gY3VlbnRhIHF1ZSBsYXMgYXBsaWNhY2lvbmVzIG5vIHB1ZWRlbiB1c2FyIGVzdGUgc2VydmljaW8gcGFyYSByZWFsaXphciBsbGFtYWRhcyBhIG7Dum1lcm9zIGRlIGVtZXJnZW5jaWEsIHBlcm8gbGFzIGFwbGljYWNpb25lcyBtYWxpbnRlbmNpb25hZGFzIHB1ZWRlbiBjYXVzYXJ0ZSBnYXN0b3MgaW1wcmV2aXN0b3MgYWwgcmVhbGl6YXIgbGxhbWFkYXMgc2luIHR1IGNvbmZpcm1hY2nDs24uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiJhY2NlZGVyIGFsIHNlcnZpY2lvIGRlIGxsYW1hZGFzIElNUyI8L3N0cmluZz4KQEAgLTg1OCwxMCArODU3LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJjdXQiIG1zZ2lkPSIzMDkyNTY5NDA4NDM4NjI2MjYxIj4iQ29ydGFyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weSIgbXNnaWQ9IjI2ODE5NDYyMjk1MzM1MTE5ODciPiJDb3BpYXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiJQZWdhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4iUGVnYXIgY29tbyB0ZXh0byBzaW4gZm9ybWF0byI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4iU3VzdGl0dWlyLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+IkVsaW1pbmFyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiJDb3BpYXIgVVJMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4iU2VsZWNjaW9uYXIgdGV4dG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmRvIiBtc2dpZD0iNzkwNTc4ODUwMjQ5MTc0MjMyOCI+IkRlc2hhY2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiJSZWhhY2VyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGV4dFNlbGVjdGlvbkNBQlRpdGxlIiBtc2dpZD0iNTIzNjg1MDM5NDM3MDgyMDM1NyI+IlNlbGVjY2nDs24gZGUgdGV4dG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4iQcOxYWRpciBhbCBkaWNjaW9uYXJpbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4iRWxpbWluYXIiPC9zdHJpbmc+CkBAIC0xMTA3LDYgKzExMDksNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4iQ2FtYmlhciBmb25kbyBkZSBwYW50YWxsYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+IkRldGVjdG9yIGRlIG5vdGlmaWNhY2lvbmVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiJQcm92ZWVkb3IgZGUgY29uZGljaW9uZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiJBc2lzdGVudGUgZGUgbm90aWZpY2FjaW9uZXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IlZQTiBhY3RpdmFkYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+IlZQTiBhY3RpdmFkYSBwb3IgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4iVG9jYSBwYXJhIGFkbWluaXN0cmFyIGxhIHJlZC4iPC9zdHJpbmc+CkBAIC0xNDQwLDEyICsxNDQzLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4iQWN0dWFsaXphZG8gcG9yIHR1IGFkbWluaXN0cmFkb3IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX2RlbGV0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iNzY1MDU3NzM4NzQ5MzEwMTM1MyI+IkVsaW1pbmFkbyBwb3IgdHUgYWRtaW5pc3RyYWRvciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4iUGFyYSBheXVkYXIgYSBtZWpvcmFyIGxhIGR1cmFjacOzbiBkZSBsYSBiYXRlcsOtYSwgbGEgZnVuY2nDs24gZGUgYWhvcnJvIGRlIGVuZXJnw61hIHJlZHVjZSBlbCByZW5kaW1pZW50byBkZWwgZGlzcG9zaXRpdm8geSBsaW1pdGEgbGEgdmlicmFjacOzbiwgbG9zIHNlcnZpY2lvcyBkZSB1YmljYWNpw7NuIHkgbGEgbWF5b3IgcGFydGUgZGUgbGEgdHJhbnNtaXNpw7NuIGRlIGRhdG9zIGVuIHNlZ3VuZG8gcGxhbm8uIEVzIHBvc2libGUgcXVlIGxhcyBhcGxpY2FjaW9uZXMgcXVlIHNlIHNpbmNyb25pemFuLCBjb21vIGxhcyBkZSBjb3JyZW8geSBtZW5zYWplcywgbm8gc2UgYWN0dWFsaWNlbiBhIG1lbm9zIHF1ZSBsYXMgYWJyYXMuXG5cbkxhIGZ1bmNpw7NuIGRlIGFob3JybyBkZSBlbmVyZ8OtYSBzZSBkZXNhY3RpdmEgYXV0b23DoXRpY2FtZW50ZSBjdWFuZG8gZWwgZGlzcG9zaXRpdm8gc2UgZXN0w6EgY2FyZ2FuZG8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfdGl0bGUiIG1zZ2lkPSI3NDkzOTg5NzIyNjEwMDA4NzAwIj4iSW1wb3J0YW5jaWEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iNzExODgyNjkwMDc2NzA0NzEyNSI+IkJsb3F1ZWFkYTogbm8gbW9zdHJhciBlc3RhcyBub3RpZmljYWNpb25lcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjY0NDc2NDA0NDk5MTg0MjcxODciPiJCYWphOiBtb3N0cmFyIGVuIGxhIHBhcnRlIGluZmVyaW9yIGRlIGxhIGxpc3RhIGRlIG5vdGlmaWNhY2lvbmVzIGRlIGZvcm1hIHNpbGVuY2lvc2EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNzk5MTE1NzY5NzYwOTU3NTI3MSI+Ik5vcm1hbDogbW9zdHJhciBlc3RhcyBub3RpZmljYWNpb25lcyBkZSBmb3JtYSBzaWxlbmNpb3NhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiJBbHRhOiBtb3N0cmFyIGVuIGxhIHBhcnRlIHN1cGVyaW9yIGRlIGxhIGxpc3RhIGRlIG5vdGlmaWNhY2lvbmVzIHkgZW1pdGlyIHNvbmlkbyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiJVcmdlbnRlOiBtb3N0cmFyIGVuIGxhIHBhbnRhbGxhIHkgZW1pdGlyIHNvbmlkbyI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+RHVyYW50ZSAlMSRkIG1pbnV0b3MgKGhhc3RhIGxhcyA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj5EdXJhbnRlIHVuIG1pbnV0byAoaGFzdGEgbGFzIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzAiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZXQtckVFL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1ldC1yRUUvc3RyaW5ncy54bWwKaW5kZXggOWJiOTU1Yi4uNDY2YmQ1ZCAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1ldC1yRUUvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1ldC1yRUUvc3RyaW5ncy54bWwKQEAgLTIyMyw2ICsyMjMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiJMdWt1c3RhIGtvaGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+Ijk5OSsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fY2hpbGRyZW5fY291bnRfYnJhY2tldGVkIiBtc2dpZD0iMTc2OTQyNTQ3MzE2ODM0NzgzOSI+Iig8eGxpZmY6ZyBpZD0iTk9USUZJQ0FUSU9OQ09VTlQiPiVkPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4iU2lzdSBvbiBwZWlkZXR1ZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+IlR1cnZhcmXFvmlpbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+IkFuZHJvaWQtc8O8c3RlZW0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+IklzaWtsaWsiPC9zdHJpbmc+CkBAIC0zNTMsOCArMzU0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgdGVoYSBrYWFtZXJhZ2EgcGlsdGUgamEgdmlkZW9pZC4gU2VlIGx1YmEgdsO1aW1hbGRhYiByYWtlbmR1c2VsIGthc3V0YWRhIGthYW1lcmF0IG1pcyB0YWhlcyBhamFsIHRlaWUga2lubml0dXNldGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl92aWJyYXRlIiBtc2dpZD0iNzY5NjQyNzAyNjA1NzcwNTgzNCI+Imp1aHRpZ2UgdmlicmVlcmltaXN0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwganVodGlkYSB2aWJyZWVyaW1pc3QuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mbGFzaGxpZ2h0IiBtc2dpZD0iMjE1NTkyMDgxMDEyMTk4NDIxNSI+Imp1aGkgdGFza3VsYW1waSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIGp1aHRpZGEgdGFza3VsYW1waS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiJoZWxpc3RhIG90c2UgdGVsZWZvbmludW1icml0ZWxlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCB0ZWllIHNla2t1bWlzZXRhIHRlbGVmb25pbnVtYnJpdGVsZSBoZWxpc3RhZGEuIFNlZSB2w7VpYiBww7VoanVzdGFkYSBvb3RhbWF0dWlkIHRhc3VzaWQgdsO1aSB0ZWxlZm9uaWvDtW5lc2lkLiBQYW5nZSB0w6RoZWxlLCBldCBzZWUgZWkgbHViYSByYWtlbmR1c2VsIGhlbGlzdGFkYSBow6RkYWFiaW51bWJyaXRlbGUuIFBhaGF0YWh0bGlrdWQgcmFrZW5kdXNlZCB2w7VpdmFkIHRlaWxlIGt1bHVzaWQgdGVraXRhZGEsIHRlaGVzIHRlbGVmb25pa8O1bmVzaWQgdGVpZSBraW5uaXR1c2V0YS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ltc0NhbGxTZXJ2aWNlIiBtc2dpZD0iMzU3NDk0Mzg0NzE4MTc5MzkxOCI+Imp1dXJkZXDDpMOkcyBJTVMta8O1bmV0ZWVudXNlbGUiPC9zdHJpbmc+CkBAIC04NTgsMTAgKzg1NywxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+IkzDtWlrYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4iS29wZWVyaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+IktsZWViaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4iS2xlZWJpIGxpaHR0ZWtzdGluYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4iQXNlbmRhLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+Ikt1c3R1dGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IktvcGVlcmkgVVJMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4iVmFsaWdlIHRla3N0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiJWw7V0YSB0YWdhc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+IlRlZSB1dWVzdGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4iVGVrc3RpIHZhbGltaW5lIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWRkVG9EaWN0aW9uYXJ5IiBtc2dpZD0iNDM1MjE2MTUzNDUxMDA1Nzg3NCI+Ikxpc2Egc8O1bmFzdGlra3UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+Ikt1c3R1dGEiPC9zdHJpbmc+CkBAIC0xMTA3LDYgKzExMDksNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4iTXV1dGtlIHRhdXN0YXBpbHRpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4iTcOkcmd1YW5uZXRlIGt1dWxhbWlzdGVlbnVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiJUaW5naW11c2UgcGFra3VqYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9hc3Npc3RhbnRfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjkwOTQ1NjA1NTU2OTEwMjk1MiI+Ik3DpHJndWFubmV0ZSBhYmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IlZQTiBvbiBha3RpdmVlcml0dWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiJWUE4taSBha3RpdmVlcmlzIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0IiBtc2dpZD0iMzAxMTMwNjYwNzEyNjQ1MDMyMiI+IlbDtXJndSBoYWxkYW1pc2VrcyBwdXVkdXRhZ2UuIjwvc3RyaW5nPgpAQCAtMTQ0MCwxMiArMTQ0Myw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+IlbDpHJza2VuZGFzIGFkbWluaXN0cmFhdG9yIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiJLdXN0dXRhcyB0ZWllIGFkbWluaXN0cmFhdG9yIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiJBa3Uga2VzdHVzZSBwYXJhbmRhbWlzZWtzIHbDpGhlbmRhYiBha3Vzw6TDpHN0amEgdGVpZSBzZWFkbWUgdG9pbWl2dXN0IG5pbmcgcGlpcmFiIHZpYnJhdHNpb29uaSwgYXN1a29oYXRlZW51c2VpZCBqYSBzdXVyZW1hdCBvc2EgdGF1c3RhYW5kbWV0ZXN0LiBFLXBvc3RpLCBzw7VudW1zaWRldCBqYSBtdWlkIHPDvG5rcm9vbmltaXNlbGUgdHVnaW5ldmFpZCByYWtlbmR1c2kgdsO1aWRha3NlIHbDpHJza2VuZGFkYSBhaW51bHQgc2lpcywga3VpIHRlIG5lZWQgYXZhdGUuXG5cbkFrdXPDpMOkc3RqYSBsw7xsaXRhdGFrc2Ugc2VhZG1lIGxhYWRpbWlzZSBhamFsIGF1dG9tYWF0c2VsdCB2w6RsamEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfdGl0bGUiIG1zZ2lkPSI3NDkzOTg5NzIyNjEwMDA4NzAwIj4iVMOkaHRzdXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iNzExODgyNjkwMDc2NzA0NzEyNSI+IkJsb2tlZXJpdHVkOiDDpHJhIGt1bmFnaSBuw6RpdGEgbmVpZCBtw6RyZ3VhbmRlaWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4iTWFkYWw6IGt1dmEgdmFpa3NlbHQgbcOkcmd1YW5uZXRlIGxvZW5kaSBhbGxvc2FzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiJUYXZhbGluZToga3V2YSBuZWVkIG3DpHJndWFuZGVkIHZhaWtzZWx0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiJLw7VyZ2U6IGt1dmEgbcOkcmd1YW5uZXRlIGxvZW5kaSDDvGxhb3NhcyBrb29zIGhlbGlnYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiJLaWlyZWxvb211bGluZToga3V2YSBla3JhYW5pIHNlcnZhcyBrb29zIGhlbGlnYSI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+JTEkZCBtaW51dGlrcyAoa3VuaSA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj7DnGhla3MgbWludXRpa3MgKGt1bmkgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMCI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1ldS1yRVMvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWV1LXJFUy9zdHJpbmdzLnhtbAppbmRleCBlZmZmNTg5Li5jZGI4NjIyIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWV1LXJFUy9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWV1LXJFUy9zdHJpbmdzLnhtbApAQCAtMjIzLDYgKzIyMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2tkb3duIiBtc2dpZD0iODc1MTU0MjUxNDcyNDMzMjg3MyI+IkJsb2tlYXR1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiI5OTkrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2NoaWxkcmVuX2NvdW50X2JyYWNrZXRlZCIgbXNnaWQ9IjE3Njk0MjU0NzMxNjgzNDc4MzkiPiIoPHhsaWZmOmcgaWQ9Ik5PVElGSUNBVElPTkNPVU5UIj4lZDwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IkVkdWtpYWsgZXprdXRhdHV0YSBkYXVkZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+Ik1vZHUgc2VndXJ1YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+IkFuZHJvaWQgc2lzdGVtYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4iUGVydHNvbmFsYWsiPC9zdHJpbmc+CkBAIC0zNTMsOCArMzU0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiJLYW1lcmFyZWtpbiBhcmdhemtpYWsgYXRlcmF0emVrbyBldGEgYmlkZW9hayBncmFiYXR6ZWtvIGJhaW1lbmEgZW1hdGVuIGRpZSBhcGxpa2F6aW9laS4gQmFpbWVuIGhvcnJla2luLCBhcGxpa2F6aW9hayBrYW1lcmEgZWRvbm9peiBlcmFiaWwgZGV6YWtlIHp1cmUgYmFpbWVuaWsgZ2FiZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4iYmlicmF6aW9hIGtvbnRyb2xhdHplYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4iQmlicmFnYWlsdWEga29udHJvbGF0emVhIGJhaW1lbnR6ZW4gZGllIGFwbGlrYXppb2VpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiJrb250cm9sYXR1IGxpbnRlcm5hIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiJMaW50ZXJuYSBrb250cm9sYXR6ZWEgYmFpbWVudHplbiBkaWUgYXBsaWthemlvZWkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4iZGVpdHUgenV6ZW5lYW4gdGVsZWZvbm8temVuYmFraWV0YXJhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+IlRlbGVmb25vLXplbmJha2lldGFyYSB6dWsgZXNrdSBoYXJ0dSBnYWJlIGRlaXR6ZWtvIGJhaW1lbmEgZW1hdGVuIGRpZSBhcGxpa2F6aW9laS4gSG9ycmVsYSwgdXN0ZWthYmVrbyBnYXN0dWFrIGVkbyBkZWlhayBlcmFnaW4gZGFpdGV6a2UuIEFwbGlrYXppbyBnYWl6dG9layBlcmFiaWwgZGV6YWtldGUgenVrIGJlcnJldHNpIGdhYmVrbyBkZWlhayBlZ2luZGEgZ2FzdHVhayBlcmFnaXRla28uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiJBdHppdHUgSU1TIGRlaS16ZXJiaXR6dWEiPC9zdHJpbmc+CkBAIC0zODMsOCArMzgyLDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldEFjY291bnRzIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNzQxNDk2NTM0NzY5NjYwMDI3Ij4iVGFibGV0YWsgZXphZ3V0emVuIGRpdHVlbiBrb250dWVuIHplcnJlbmRhIGxvcnR6ZWtvIGJhaW1lbmEgZW1hdGVuIGRpZSBhcGxpa2F6aW9laS4gSW5zdGFsYXR1dGEgZGl0dXp1biBhcGxpa2F6aW9layBzb3J0dXRha28ga29udHVhayBoYXIgZGFpdGV6a2UgYmFybmUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0QWNjb3VudHMiIHByb2R1Y3Q9InR2IiBtc2dpZD0iNDE5MDYzMzM5NTYzMzkwNzU0MyI+IlRlbGViaXN0YWsgZXphZ3V0emVuIGRpdHVlbiBrb250dWVuIHplcnJlbmRhIGxvcnR6ZWEgYmFpbWVudHplbiBkaWUgYXBsaWthemlvZWkuIEluc3RhbGF0dXRhIGRpdHV6dW4gYXBsaWthemlvZWsgc29ydHV0YWtvIGtvbnR1YWsgc2FyIGRhaXRlemtlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldEFjY291bnRzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzQ0ODMxNjgyMjQ1MTgwNzM4MiI+IlRlbGVmb25vYWsgZXphZ3V0emVuIGRpdHVlbiBrb250dWVuIHplcnJlbmRhIGxvcnR6ZWtvIGJhaW1lbmEgZW1hdGVuIGRpZSBhcGxpa2F6aW9laS4gSW5zdGFsYXR1dGEgZGl0dXp1biBhcGxpa2F6aW9layBzb3J0dXRha28ga29udHVhayBoYXIgZGFpdGV6a2UgYmFybmUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NOZXR3b3JrU3RhdGUiIG1zZ2lkPSI0OTUxMDI3OTY0MzQ4OTc0NzczIj4ic2FyZS1rb25leGlvYWsgaWt1c3RlYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc05ldHdvcmtTdGF0ZSIgbXNnaWQ9IjgzMTg5NjQ0MjQ2NzU5NjA5NzUiPiJTYXJlLWtvbmV4aW9laSBidXJ1emtvIGluZm9ybWF6aW9hIGlrdXN0ZWtvIGJhaW1lbmEgZW1hdGVuIGRpZSBhcGxpa2F6aW9laTsgYWRpYmlkZXosIHplciBzYXJlIGRhdWRlbiBldGEgemVpbnR6dWsgZGF1ZGVuIGtvbmVrdGF0dXRhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzTmV0d29ya1N0YXRlIiBtc2dpZD0iNDk1MTAyNzk2NDM0ODk3NDc3MyI+InNhcmVrbyBrb25leGlvYWsgaWt1c3RlYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc05ldHdvcmtTdGF0ZSIgbXNnaWQ9IjgzMTg5NjQ0MjQ2NzU5NjA5NzUiPiJTYXJla28ga29uZXhpb2VpIGJ1cnV6a28gaW5mb3JtYXppb2EgaWt1c3Rla28gYmFpbWVuYSBlbWF0ZW4gZGllIGFwbGlrYXppb2VpOyBhZGliaWRleiwgemVyIHNhcmUgZGF1ZGVuIGV0YSB6ZWludHp1ayBkYXVkZW4ga29uZWt0YXR1dGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jcmVhdGVOZXR3b3JrU29ja2V0cyIgbXNnaWQ9Ijc5MzQ1MTY2MzEzODQxNjgxMDciPiJJemFuIHNhcmVyYWtvIHNhcmJpZGUgb3NvYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NyZWF0ZU5ldHdvcmtTb2NrZXRzIiBtc2dpZD0iMzQwMzA2MjE4Nzc3OTcyNDE4NSI+IlNhcmUtc29ja2V0YWsgc29ydHpla28gZXRhIHNhcmUtcHJvdG9rb2xvIHBlcnRzb25hbGl6YXR1YWsgZXJhYmlsdHpla28gYmFpbWVuYSBlbWF0ZW4gZGllIGFwbGlrYXppb2VpLiBBcmFrYXR6YWlsZWFrIGV0YSBiZXN0ZSBhcGxpa2F6aW8gYmF0enVlayBJbnRlcm5ldGVyYSBrb25la3RhdHpla28gbW9kdWFrIGVza2FpbnR6ZW4gZGl0dXp0ZSwgYmVyYXosIGJhaW1lbiBob3JpIGV6IGRhIGJlaGFycmV6a29hIGRhdHVhayBJbnRlcm5ldGVyYSBiaWRhbHR6ZWtvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlTmV0d29ya1N0YXRlIiBtc2dpZD0iOTU4ODg0MjkxNDU0MzI3MzA5Ij4iYWxkYXR1IHNhcmVhcmVuIGtvbmVrdGFnYXJyaXRhc3VuYSI8L3N0cmluZz4KQEAgLTg1OCwxMCArODU3LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJjdXQiIG1zZ2lkPSIzMDkyNTY5NDA4NDM4NjI2MjYxIj4iRWJha2kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+IktvcGlhdHUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiJJdHNhdHNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiJJdHNhdHNpIHRlc3R1IGFycnVudCBnaXNhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiJPcmRlenR14oCmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+IkV6YWJhdHUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IktvcGlhdHUgVVJMYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+IkhhdXRhdHUgdGVzdHVhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiJEZXNlZ2luIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiJCZXJyZWdpbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiJUZXN0dWEgaGF1dGF0emVhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWRkVG9EaWN0aW9uYXJ5IiBtc2dpZD0iNDM1MjE2MTUzNDUxMDA1Nzg3NCI+IkdlaGl0dSBoaXp0ZWdpYW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+IkV6YWJhdHUiPC9zdHJpbmc+CkBAIC0xMTA3LDYgKzExMDksNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4iQWxkYXR1IGhvcm1hLXBhcGVyYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+Ikpha2luYXJhenBlbmFrIGhhdXRlbWF0ZWtvIHplcmJpdHp1YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbmRpdGlvbl9wcm92aWRlcl9zZXJ2aWNlX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMzIxMzQzMzUyOTA2NTI0NTY0Ij4iQmFsZGludHphLWhvcm5pdHphaWxlYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9hc3Npc3RhbnRfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjkwOTQ1NjA1NTU2OTEwMjk1MiI+Ikpha2luYXJhenBlbmVuIGxhZ3VudHphaWxlYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iVlBOIGVnaW5iaWRlYSBha3RpYmF0dXRhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IGFwbGlrYXppb2FrIFZQTiBrb25leGlvYSBha3RpYmF0dSBkdSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0IiBtc2dpZD0iMzAxMTMwNjYwNzEyNjQ1MDMyMiI+IlVraXR1IHNhcmVhIGt1ZGVhdHpla28uIjwvc3RyaW5nPgpAQCAtMTQ0MCwxMiArMTQ0Myw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+IkFkbWluaXN0cmF0emFpbGVhayBlZ3VuZXJhdHUgZHUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX2RlbGV0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iNzY1MDU3NzM4NzQ5MzEwMTM1MyI+IkFkbWluaXN0cmF0emFpbGVhayBlemFiYXR1IGR1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiJCYXRlcmlhayBnZWhpYWdvIGlyYXVuIGRlemFuLCBiYXRlcmlhLWF1cnJlemxlYWsgZ2FpbHVhcmVuIGZ1bnR6aW9uYW1lbmR1YSwgZGFyZGFyYSwgIGtva2FwZW4temVyYml0enVhayBldGEgYXR6ZWtvIHBsYW5va28gZGF0dWVuIGVyYWJpbGVyYSBnZWhpZW5hIG11Z2F0emVuIGRpdHUuIFBvc3RhIGVsZWt0cm9uaWtvYSwgbWV6dWFrIGV0YSBzaW5rcm9uaXphdHplbiBkaXJlbiBnYWluZXJha28gemVyYml0enVhayBleiBkaXJhIGVndW5lcmF0dWtvIGlyZWtpIGV6ZWFuLlxuXG5HYWlsdWEga2FyZ2F0emVuIGV6YXJyaSBvcmR1a28gZGVzYWt0aWJhdHplbiBkYSBiYXRlcmlhLWF1cnJlemxlYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV90aXRsZSIgbXNnaWQ9Ijc0OTM5ODk3MjI2MTAwMDg3MDAiPiJHYXJyYW50emlhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiJCbG9rZWF0dXRhOiBleiBlcmFrdXRzaSBqYWtpbmFyYXpwZW4gaGF1ZWsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4iVHhpa2lhOiBlcmFrdXRzaSBqYWtpbmFyYXpwZW4gaGF1ZWsgemVycmVuZGFyZW4gYmVoZWFsZGVhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI3OTkxMTU3Njk3NjA5NTc1MjcxIj4iTm9ybWFsYTogZXJha3V0c2kgamFraW5hcmF6cGVuIGhhdWVrLCBiYWluYSBzb2ludXJpayBlZ2luIGdhYmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzE1MjIzODYzNzczNzIxNTY1NCI+IkhhbmRpYTogZXJha3V0c2kgamFraW5hcmF6cGVuIGhhdWVrIHplcnJlbmRhcmVuIGdvaWFsZGVhbiBldGEgZWdpbiBzb2ludWEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSIxMTUzNjkzMDgwNDY3OTA0NDc0Ij4iUHJlbWlhemtvYTogYWdlcnJhcmF6aSBqYWtpbmFyYXpwZW4gaGF1ZWsgcGFudGFpbGFuIGV0YSBlZ2luIHNvaW51YSI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+JTEkZCBtaW51dHV6ICg8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPiBhcnRlKTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPk1pbnV0dSBiYXRleiAoPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMCI+JTIkczwveGxpZmY6Zz4gYXJ0ZSk8L2l0ZW0+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWZhL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1mYS9zdHJpbmdzLnhtbAppbmRleCBkNWVkNWRiLi5iMGRhNWZlIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWZhL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZmEvc3RyaW5ncy54bWwKQEAgLTIyMyw2ICsyMjMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiLYp9qp2YbZiNmGINmC2YHZhCDYtNmI2K8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+Itio24zYtNiq2LEg2KfYsiA5OTkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fY2hpbGRyZW5fY291bnRfYnJhY2tldGVkIiBtc2dpZD0iMTc2OTQyNTQ3MzE2ODM0NzgzOSI+Iig8eGxpZmY6ZyBpZD0iTk9USUZJQ0FUSU9OQ09VTlQiPiVkPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4i2YXYrdiq2YjYp9mH2Kcg2b7ZhtmH2KfZhiDZh9iz2KrZhtivIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4i2K3Yp9mE2Kog2KfbjNmF2YYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiLigI/Ys9uM2LPYqtmFIEFuZHJvaWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+Iti02K7YtduMIjwvc3RyaW5nPgpAQCAtMzUzLDggKzM1NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINio2Kcg2K/ZiNix2KjbjNmGINio2Ycg2Lnaqdiz2KjYsdiv2KfYsduMINmIINmB24zZhNmF2KjYsdiv2KfYsduMINio2b7Ysdiv2KfYstivLiDYp9uM2YYg2YXYrNmI2LIg2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCM4oCM2K/Zh9ivINin2LIg2K/ZiNix2KjbjNmGINiv2LEg2YfYsSDYstmF2KfZhtuMINio2K/ZiNmGINiq2KPbjNuM2K8g2LTZhdinINin2LPYqtmB2KfYr9mHINqp2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4i2qnZhtiq2LHZhCDZhNix2LLYtCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2YTYsdiy2KfZhtmG2K/ZhyDYsdinINqp2YbYqtix2YQg2qnZhtivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiLaqdmG2KrYsdmEINqG2LHYp9i6INmC2YjZhyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2obYsdin2Log2YLZiNmHINix2Kcg2qnZhtiq2LHZhCDaqdmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4i2KrZhdin2LMg2YXYs9iq2YLbjNmFINio2Kcg2LTZhdin2LHZhyDYqtmE2YHZhuKAjNmH2KciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINio2K/ZiNmGINiv2K7Yp9mE2Kog2LTZhdinINio2Kcg2LTZhdin2LHZh+KAjNmH2KfbjCDYqtmE2YHZhiDYqtmF2KfYsyDYqNqv24zYsdivLiDYp9uM2YYg2YXZhdqp2YYg2KfYs9iqINio2KfYudirINin24zYrNin2K8g2YfYstuM2YbZhyDbjNinINiq2YXYp9iz4oCM2YfYp9uMINm+24zYtOKAjNio24zZhtuMINmG2LTYr9mHINi02YjYry4g2KrZiNis2Ycg2K/Yp9i02KrZhyDYqNin2LTbjNivINqp2Ycg2KfbjNmGINio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YbZhduM4oCM2K/Zh9ivINio2Ycg2KjYsdmC2LHYp9ix24wg2KrZhdin2LPigIzZh9in24wg2KfYtti32LHYp9ix24wg2KjZvtix2K/Yp9iy2K8uINio2LHZhtin2YXZh+KAjNmH2KfbjCDZhdiu2LHYqCDZhdmF2qnZhiDYp9iz2Kog2KjYpyDYqNix2YLYsdin2LHbjCDYqtmF2KfYsyDYqNiv2YjZhiDYqtij24zbjNivINi02YXYpyDZh9iy24zZhtmH4oCM2YfYp9uM24wg2LHYpyDYqNix2KfbjCDYtNmF2Kcg2KfbjNis2KfYryDaqdmG2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ltc0NhbGxTZXJ2aWNlIiBtc2dpZD0iMzU3NDk0Mzg0NzE4MTc5MzkxOCI+IuKAj9iv2LPYqtix2LPbjCDYqNmHINiz2LHZiNuM2LMg2KrZhdin2LMgSU1TIjwvc3RyaW5nPgpAQCAtODU4LDEwICs4NTcsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiLYqNix2LQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+Itqp2b7bjCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+Itis2KfbjCDar9iw2KfYsduMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiLYrNin24zigIzar9iw2KfYsduMINio2Ycg2LnZhtmI2KfZhiDZhdiq2YYg2LPYp9iv2YciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXBsYWNlIiBtc2dpZD0iNTc4MTY4NjA1OTA2MzE0ODkzMCI+Itis2KfbjNqv2LLbjNmGINi02YjYry4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZSIgbXNnaWQ9IjYwOTg2ODQ4NDQwMjE2OTc3ODkiPiLYrdiw2YEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IuKAj9qp2b7bjCBVUkwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiLYp9mG2KrYrtin2Kgg2YXYqtmGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiLZhNi62YgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+Itin2YbYrNin2YUg2YXYrNiv2K8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4i2KfZhtiq2K7Yp9ioINmF2KrZhiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiLYp9mB2LLZiNiv2YYg2KjZhyDZgdix2YfZhtqv4oCM2YTYutiqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiLYrdiw2YEiPC9zdHJpbmc+CkBAIC04OTIsNyArODk0LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9IndoaWNoSG9tZUFwcGxpY2F0aW9uTmFtZWQiIG1zZ2lkPSI0NDkzNDM4NTkzMjE0NzYwOTc5Ij4i4oCP2KfYs9iq2YHYp9iv2Ycg2KfYsiAlMSRzINio2Ycg2LnZhtmI2KfZhiDYqNix2YbYp9mF2Ycg2LXZgdit2Ycg2KfYtdmE24wiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbHdheXNVc2UiIG1zZ2lkPSI0NTgzMDE4MzY4MDAwNjEwNDM4Ij4i2KfYs9iq2YHYp9iv2Ycg2KjZhyDYtdmI2LHYqiDZvtuM2LTigIzZgdix2LYg2KjYsdin24wg2KfbjNmGINi52YXZhNqp2LHYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VfYV9kaWZmZXJlbnRfYXBwIiBtc2dpZD0iODEzNDkyNjIzMDU4NTcxMDI0MyI+Itin2LPYqtiq2YHYp9iv2Ycg2KfYsiDbjNqpINio2LHZhtin2YXZhyDYr9uM2q/YsSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNsZWFyRGVmYXVsdEhpbnRNc2ciIG1zZ2lkPSIzMjUyNTg0Njg5NTEyMDc3MjU3Ij4i4oCP2b7bjNi04oCM2YHYsdi2INix2Kcg2K/YsSDYqtmG2LjbjNmF2KfYqiDYs9uM2LPYqtmFJmd0OyDYqNix2YbYp9mF2YfigI7Zh9inJmd0OyDZhdmI2LHYryDYr9in2YbZhNmI2K8g2LTYr9mHINm+2KfaqSDaqdmG24zYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjbGVhckRlZmF1bHRIaW50TXNnIiBtc2dpZD0iMzI1MjU4NDY4OTUxMjA3NzI1NyI+IuKAj9m+24zYtOKAjNmB2LHYtiDYsdinINiv2LEg2KrZhti424zZhdin2Kog2LPbjNiz2KrZhSZndDsg2KjYsdmG2KfZhdmH4oCO2YfYpyZndDsg2YXZiNix2K8g2KjYp9ix2q/bjNix24wg2LTYr9mHINm+2KfaqSDaqdmG24zYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VBY3Rpdml0eSIgbXNnaWQ9Ijc0ODY4NzYxNDc3NTE4MDMzMzMiPiLYp9mG2KrYrtin2Kgg2LnZhdmE2qnYsdivIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlVXNiQWN0aXZpdHkiIG1zZ2lkPSI2ODk0NzQ4NDE2MDczNTgzNTA5Ij4i4oCP2KfZhtiq2K7Yp9ioINio2LHZhtin2YXZhyDYqNix2KfbjCDYr9iz2Krar9in2YcgVVNCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm9BcHBsaWNhdGlvbnMiIG1zZ2lkPSIyOTkxODE0MjczOTM2NTA0Njg5Ij4i4oCP2YfbjNqGINio2LHZhtin2YXZh+KAjNin24wg2YbZhduM4oCM4oCO2KrZiNin2YbYryDYp9uM2YYg2qnYp9ixINix2Kcg2KfZhtis2KfZhSDYr9mH2K8uIjwvc3RyaW5nPgpAQCAtOTE0LDcgKzkxNiw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJsYXVuY2hfd2FybmluZ19vcmlnaW5hbCIgbXNnaWQ9IjE4ODEwMjAyMzAyMTY2ODY4MyI+Ijx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4g2KfYsiDYp9io2KrYr9inINix2KfZh+KAjNin2YbYr9in2LLbjCDYtNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbl9jb21wYXRfbW9kZV9zY2FsZSIgbXNnaWQ9IjMyMDI5NTU2Njc2NzU5NDQ0OTkiPiLZhdmC24zYp9izIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuX2NvbXBhdF9tb2RlX3Nob3ciIG1zZ2lkPSI0MDEzODc4ODc2NDg2NjU1ODkyIj4i2YfZhduM2LTZhyDZhti02KfZhiDYr9in2K/ZhyDYtNmI2K8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzY3JlZW5fY29tcGF0X21vZGVfaGludCIgbXNnaWQ9IjEwNjQ1MjQwODQ1NDMzMDQ0NTkiPiLigI/Yr9ixINiq2YbYuNuM2YXYp9iqINiz24zYs9iq2YUgJmd0O9io2LHZhtin2YXZh+KAjtmH2KcgJmd0OyDZhdmI2LHYryDYr9in2YbZhNmI2K8g2LTYr9mHINii2YYg2LHYpyDYr9mI2KjYp9ix2Ycg2YHYudin2YQg2qnZhtuM2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuX2NvbXBhdF9tb2RlX2hpbnQiIG1zZ2lkPSIxMDY0NTI0MDg0NTQzMzA0NDU5Ij4i4oCP2K/YsSDYqtmG2LjbjNmF2KfYqiDYs9uM2LPYqtmFICZndDvYqNix2YbYp9mF2YfigI7Zh9inICZndDsg2YXZiNix2K8g2KjYp9ix2q/bjNix24wg2LTYr9mHINii2YYg2LHYpyDYr9mI2KjYp9ix2Ycg2YHYudin2YQg2qnZhtuM2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic212X2FwcGxpY2F0aW9uIiBtc2dpZD0iMzMwNzIwOTE5MjE1NTQ0MjgyOSI+IuKAj9io2LHZhtin2YXZhyA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+ICjZvtix2K/Yp9iy2LQgPHhsaWZmOmcgaWQ9IlBST0NFU1MiPiUyJHM8L3hsaWZmOmc+KSDYrti34oCM2YXYtNuMIFN0cmljdE1vZGUg2KfYrNix2KfbjNuMINiu2YjYryDYsdinINmG2YLYtiDaqdix2K/ZhyDYp9iz2KouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic212X3Byb2Nlc3MiIG1zZ2lkPSI1MTIwMzk3MDEyMDQ3NDYyNDQ2Ij4i4oCP2YHYsdii24zZhtivIDx4bGlmZjpnIGlkPSJQUk9DRVNTIj4lMSRzPC94bGlmZjpnPiDYrti34oCM2YXYtNuMIFN0cmljdE1vZGUg2KfYrNix2KfbjCDYrtmI2K/aqdin2LEg2K7ZiNivINix2Kcg2YbZgti2INqp2LHYr9mHINin2LPYqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3VwZ3JhZGluZ190aXRsZSIgbXNnaWQ9IjE1ODQxOTIyODU0NDE0MDU3NDYiPiLigI9BbmRyb2lkINiv2LEg2K3Yp9mEINin2LHYqtmC2Kcg2KfYs9iqLi4uIjwvc3RyaW5nPgpAQCAtOTI3LDcgKzkyOSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJoZWF2eV93ZWlnaHRfbm90aWZpY2F0aW9uIiBtc2dpZD0iOTA4NzA2Mzk4NTc3NjYyNjE2NiI+Ijx4bGlmZjpnIGlkPSJBUFAiPiUxJHM8L3hsaWZmOmc+INiv2LEg2K3Yp9mEINin2KzYsdinIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaGVhdnlfd2VpZ2h0X25vdGlmaWNhdGlvbl9kZXRhaWwiIG1zZ2lkPSIxNzIxNjgxNzQxNjE3ODk4ODY1Ij4i2YTZhdizINqp2LHYr9mGINio2LHYp9uMINio2KfYstqp2LHYr9mGINio2LHZhtin2YXZhyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImhlYXZ5X3dlaWdodF9zd2l0Y2hlcl90aXRsZSIgbXNnaWQ9IjcxNTMxNjcwODU0MDMyOTgxNjkiPiLYqNix2YbYp9mF2Ycg2LnZiNi2INi02YjYr9ifIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGVhdnlfd2VpZ2h0X3N3aXRjaGVyX3RleHQiIG1zZ2lkPSI3MDIyNjMxOTI0NTM0NDA2NDAzIj4i2KjYsdmG2KfZhdmHINiv24zar9ix24wg2KfYsiDZgtio2YQg2K/YsSDYrdin2YQg2KfYrNix2Kcg2KfYs9iqINqp2Ycg2KjYp9uM2K8g2YLYqNmEINin2LIg2KfbjNmG2qnZhyDYqNix2YbYp9mF2Ycg2KzYr9uM2K/bjCDYsdinINi02LHZiNi5INqp2YbbjNivINmF2KrZiNmC2YEg2LTZiNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhlYXZ5X3dlaWdodF9zd2l0Y2hlcl90ZXh0IiBtc2dpZD0iNzAyMjYzMTkyNDUzNDQwNjQwMyI+Itio2LHZhtin2YXZhyDYr9uM2q/YsduMINin2LIg2YLYqNmEINiv2LEg2K3Yp9mEINin2KzYsdin2LPYqiDaqdmHINio2KfbjNivINmF2KrZiNmC2YEg2LTZiNivINiq2Kcg2KjYqtmI2KfZhtuM2K8g2KjYsdmG2KfZhdmHINis2K/bjNivINix2Kcg2LTYsdmI2Lkg2qnZhtuM2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ib2xkX2FwcF9hY3Rpb24iIG1zZ2lkPSI0OTMxMjkxNzIyMzg1NjYyODIiPiLYqNin2LLar9i02Kog2KjZhyA8eGxpZmY6ZyBpZD0iT0xEX0FQUCI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJvbGRfYXBwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjA4MjA5NDI3NTU4MDM1ODA0OSI+Itio2LHZhtin2YXZhyDYrNiv24zYryDYtNix2YjYuSDZhti02YjYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZXdfYXBwX2FjdGlvbiIgbXNnaWQ9IjU0NzI3NTY5MjY5NDU0NDA3MDYiPiLYtNix2YjYuSA8eGxpZmY6ZyBpZD0iT0xEX0FQUCI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CkBAIC0xMTA3LDYgKzExMDksNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4i2KrYutuM24zYsSDaqdin2LrYsNiv24zZiNin2LHbjCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+Iti02YbZiNmG2K/ZhyDYp9i52YTYp9mGIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiLYp9ix2KfYptmH4oCM2K/Zh9mG2K/ZhyDZiNi22LnbjNiqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2Fzc2lzdGFudF9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iOTA5NDU2MDU1NTY5MTAyOTUyIj4i2K/Ys9iq24zYp9ixINin2LnZhNin2YYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IuKAj1ZQTiDZgdi52KfZhCDYtNivIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4i4oCPVlBOINiq2YjYs9i3IDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDZgdi52KfZhCDYtNiv2Ycg2KfYs9iqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4i2KjYsdin24wg2YXYr9uM2LHbjNiqINi02KjaqdmHINmE2YXYsyDaqdmG24zYry4iPC9zdHJpbmc+CkBAIC0xNDQwLDEyICsxNDQzLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4i2KrZiNiz2Lcg2LPYsdm+2LHYs9iqINi02YXYpyDYqNmH4oCM2LHZiNiy2LHYs9in2YbbjCDYtNivIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiLYqtmI2LPYtyDYs9ix2b7Ysdiz2KrYqtin2YYg2K3YsNmBINi02K8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTk2MDQzMTEyMzgxNjI1MzAzNCI+Itio2LHYp9uMINqp2YXaqSDYqNmHINio2YfYqNmI2K8g2LnZhdixINio2KfYqtix24zYjCDYqNmH24zZhtmH4oCM2LPYp9iy24wg2KjYp9iq2LHbjCDYudmF2YTaqdix2K8g2K/Ys9iq2q/Yp9mH2KrYp9mGINix2Kcg2qnYp9mH2LQg2YXbjOKAjNiv2YfYryDZiCDZhNix2LLYtNiMINiz2LHZiNuM2LPigIzZh9in24wg2YXYqNiq2YbbjCDYqNixINmF2qnYp9mG2Iwg2Ygg2K/Ys9iq2LHYs9uMINio2Ycg2Kfaqdir2LEg2K/Yp9iv2YfigIzZh9inINiv2LEg2b7Ys+KAjNiy2YXbjNmG2Ycg2LHYpyDZhdit2K/ZiNivINmF24zigIzaqdmG2K8uINin24zZhduM2YTYjCDZvtuM2KfZheKAjNix2LPYp9mG24wg2Ygg2KjYsdmG2KfZhdmH4oCM2YfYp9uMINiv24zar9ix24wg2qnZhyDYqNmHINmH2YXar9in2YXigIzYs9in2LLbjCDZiNin2KjYs9iq2YfigIzYp9mG2K/YjCDYqtinINiy2YXYp9mG24zigIzaqdmHINii2YbigIzZh9inINix2Kcg2KjYp9iyINmG2qnZhtuM2K8g2YbZhduM4oCM2KrZiNin2YbZhtivINio2YfigIzYsdmI2LIg2LTZiNmG2K8uXG5cbtio2YfbjNmG2YfigIzYs9in2LLbjCDYqNin2KrYsduMINio2YfigIzYtdmI2LHYqiDYrtmI2K/aqdin2LEg2K/YsSDZh9mG2q/Yp9mFINi02KfYsdqYINi02K/ZhiDYr9iz2Krar9in2Ycg2K7Yp9mF2YjYtCDZhduM4oCM2LTZiNivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX3RpdGxlIiBtc2dpZD0iNzQ5Mzk4OTcyMjYxMDAwODcwMCI+Itin2YfZhduM2KoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iNzExODgyNjkwMDc2NzA0NzEyNSI+ItmF2LPYr9mI2K86INmH2LHar9iyINin24zZhiDYp9i52YTYp9mG4oCM2YfYpyDZhti02KfZhiDYr9in2K/ZhyDZhti02YjYryI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjY0NDc2NDA0NDk5MTg0MjcxODciPiLZvtin24zbjNmGOiDYqNiv2YjZhiDYtdiv2Kcg2K/YsSDZvtin24zbjNmGINmB2YfYsdiz2Kog2KfYudmE2KfZhiDZhti02KfZhiDYr9in2K/ZhyDYtNmI2K8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNzk5MTE1NzY5NzYwOTU3NTI3MSI+Iti52KfYr9uMOiDYp9uM2YYg2KfYudmE2KfZhuKAjNmH2Kcg2KjYr9mI2YYg2LXYr9inINmG2LTYp9mGINiv2KfYr9mHINi02YjYryI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMTUyMjM4NjM3NzM3MjE1NjU0Ij4i2KjYp9mE2Kc6INiv2LEg2KjYp9mE2KfbjCDZgdmH2LHYs9iqINin2LnZhNin2YbigIzZh9inINmIINio2Ycg2YfZhdix2KfZhyDYtdiv2Kcg2YbYtNin2YYg2K/Yp9iv2Ycg2LTZiNivIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+Iti22LHZiNix24w6INmG2YXYp9uMINqp2YTbjCDYqNmHINmH2YXYsdin2Ycg2LXYr9inINiv2LEg2LXZgdit2Ycg2YbYtNin2YYg2K/Yp9iv2Ycg2LTZiNivIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+4oCP2KjZhyDZhdiv2KogJTEkZCDYr9mC24zZgtmHICjYqtinIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+4oCP2KjZhyDZhdiv2KogJTEkZCDYr9mC24zZgtmHICjYqtinIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZmkvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWZpL3N0cmluZ3MueG1sCmluZGV4IDdiNDJhMWEuLmY3ZGI2NzggMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZmkvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1maS9zdHJpbmdzLnhtbApAQCAtMjIzLDYgKzIyMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2tkb3duIiBtc2dpZD0iODc1MTU0MjUxNDcyNDMzMjg3MyI+Ikx1a2l0c2Ugbnl0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiI5OTkrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2NoaWxkcmVuX2NvdW50X2JyYWNrZXRlZCIgbXNnaWQ9IjE3Njk0MjU0NzMxNjgzNDc4MzkiPiIoPHhsaWZmOmcgaWQ9Ik5PVElGSUNBVElPTkNPVU5UIj4lZDwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IlNpc8OkbHTDtiBwaWlsb3RldHR1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4iU3VvamF0dHUgdGlsYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+IkFuZHJvaWQtasOkcmplc3RlbG3DpCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4iSGVua2lsw7Zrb2h0LiI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IkFudGFhIHNvdmVsbHVrc2VuIG90dGFhIGt1dmlhIGphIGt1dmF0YSB2aWRlb2l0YSBrYW1lcmFsbGEuIFNvdmVsbHVzIHZvaSBrw6R5dHTDpMOkIGthbWVyYWEgbWlsbG9pbiB0YWhhbnNhIGlsbWFuIGx1cGFhc2kuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl92aWJyYXRlIiBtc2dpZD0iNzY5NjQyNzAyNjA1NzcwNTgzNCI+ImhhbGxpdHNlIHbDpHJpbsOkw6QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+IkFudGFhIHNvdmVsbHVrc2VuIGhhbGxpdGEgdsOkcmluw6TDpC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4iaGFsbGl0c2UgdGFza3VsYW1wcHVhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiJBbnRhYSBzb3ZlbGx1a3NlbiBoYWxsaXRhIHRhc2t1bGFtcHB1YS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiJzb2l0dGFhIHB1aGVsaW5udW1lcm9paGluIHN1b3JhYW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4iQW50YWEgc292ZWxsdWtzZW4gc29pdHRhYSBwdWhlbGlubnVtZXJvaWhpbiBreXN5bcOkdHTDpCBzaW51bHRhLiBUw6Rtw6Qgdm9pIGFpaGV1dHRhYSBvZG90dGFtYXR0b21pYSBrdWx1amEgdGFpIHB1aGVsdWl0YS4gSHVvbWFhLCBldHTDpCB0w6Rtw6QgZWkgYW5uYSBzb3ZlbGx1a3NlbGxlIGx1cGFhIHNvaXR0YWEgaMOkdMOkbnVtZXJvaWhpbi4gSGFpdGFsbGlzZXQgc292ZWxsdWtzZXQgdm9pdmF0IGFpaGV1dHRhYSBzaW51bGxlIGt1bHVqYSBzb2l0dGFtYWxsYSBwdWhlbHVpdGEgaWxtYW4gbHVwYWEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiJwaWthdmllc3RpcGFsdmVsdW4gcHVoZWx1a8OkeXR0w7ZvaWtldXMiPC9zdHJpbmc+CkBAIC04NTgsMTAgKzg1NywxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+IkxlaWtrYWEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+IktvcGlvaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+IkxpaXTDpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4iTGlpdMOkIHBlbGtrw6Ruw6QgdGVrc3RpbsOkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiJLb3J2YWEuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4iUG9pc3RhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiJLb3Bpb2kgVVJMLW9zb2l0ZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+IlZhbGl0c2UgdGVrc3Rpw6QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmRvIiBtc2dpZD0iNzkwNTc4ODUwMjQ5MTc0MjMyOCI+Ikt1bW9hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiJUb2lzdGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4iVGVrc3RpbiB2YWxpbnRhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWRkVG9EaWN0aW9uYXJ5IiBtc2dpZD0iNDM1MjE2MTUzNDUxMDA1Nzg3NCI+Ikxpc8Okw6Qgc2FuYWtpcmphYW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+IlBvaXN0YSI8L3N0cmluZz4KQEAgLTExMDcsNiArMTEwOSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiJWYWloZGEgdGF1c3Rha3V2YWEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiJJbG1vaXR1c2t1dW50ZWxpamEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+IkVodG9qZW4gdG9pbWl0dXNwYWx2ZWx1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2Fzc2lzdGFudF9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iOTA5NDU2MDU1NTY5MTAyOTUyIj4iSWxtb2l0dXNhcHVyaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iVlBOIG9uIGFrdGl2b2l0dSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiBvbiBha3Rpdm9pbnV0IFZQTi15aHRleWRlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0IiBtc2dpZD0iMzAxMTMwNjYwNzEyNjQ1MDMyMiI+IlZvaXQgaGFsbGlubm9pZGEgdmVya2tvYSBrb3NrZXR0YW1hbGxhLiI8L3N0cmluZz4KQEAgLTE0NDAsMTIgKzE0NDMsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV91cGRhdGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijg4NTY2MzEzMjI0NDAxODcwNzEiPiJKw6RyamVzdGVsbcOkbnZhbHZvamFzaSBvbiBww6Rpdml0dMOkbnl0IHBha2V0aW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiJKw6RyamVzdGVsbcOkbnZhbHZvamEgb24gcG9pc3RhbnV0IHBha2V0aW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiJKb3MgaGFsdWF0IHBhcmFudGFhIGFrdW4ga2VzdG9hLCB2aXJyYW5zw6TDpHN0w7YgdsOkaGVudMOkw6QgbGFpdHRlZXNpIHN1b3JpdHVza3lrecOkIGphIHJham9pdHRhYSB2w6RyaW7DpMOkLCBzaWphaW50aXBhbHZlbHVpdGEgamEgdXNlaW1waWEgdGF1c3RhdGlldG9qYS4gU8OkaGvDtnBvc3RpLCB2aWVzdGl0IGphIG11dXQgc3lua3Jvbm9pbnRpaW4gcGVydXN0dXZhdCBzb3ZlbGx1a3NldCBlaXbDpHQgdsOkbHR0w6Rtw6R0dMOkIHDDpGl2aXR5LCBlbGxldCBhdmFhIG5paXTDpC5cblxuVmlycmFuc8Okw6RzdMO2IHBvaXN0dXUga8OkeXTDtnN0w6QgYXV0b21hYXR0aXNlc3RpLCBrdW4gbGFpdHRlZXNpIGxhdGF1dHV1LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX3RpdGxlIiBtc2dpZD0iNzQ5Mzk4OTcyMjYxMDAwODcwMCI+IlTDpHJrZXlzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiJFc3RldHR5OiDDpGzDpCBrb3NrYWFuIG7DpHl0w6QgbsOkaXTDpCBpbG1vaXR1a3NpYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4iTWF0YWxhOiBuw6R5dMOkIG7DpG3DpCBpbG1vaXR1a3NldCBodW9tYWFtYXR0b21hc3RpIGx1ZXR0ZWxvbiBhbGFvc2Fzc2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiJUYXZhbGxpbmVuOiBuw6R5dMOkIG7DpG3DpCBpbG1vaXR1a3NldCBodW9tYWFtYXR0b21hc3RpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMTUyMjM4NjM3NzM3MjE1NjU0Ij4iS29ya2VhOiBuw6R5dMOkIG7DpG3DpCBpbG1vaXR1a3NldCBsdWV0dGVsb24geWzDpG9zYXNzYSBqYSB0b2lzdGEgw6TDpG5pbWVya2tpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiJLaWlyZWVsbGluZW46IG7DpHl0w6QgaWxtb2l0dXMgbsOkeXTDtmxsw6QgamEgdG9pc3RhIMOkw6RuaW1lcmtraS4iPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0iemVuX21vZGVfZHVyYXRpb25fbWludXRlc19zdW1tYXJ5IiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNDM2Nzg3NzQwODA3MjAwMDg0OCI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPiUxJGQgbWludXV0aWtzaSAoa3VubmVzIGtlbGxvIG9uIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPlloZGVrc2kgbWludXV0aWtzaSAoa3VubmVzIGtlbGxvIG9uIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzAiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZnItckNBL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1mci1yQ0Evc3RyaW5ncy54bWwKaW5kZXggNWRlYmM5Yy4uNTBhZWQ5NSAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1mci1yQ0Evc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1mci1yQ0Evc3RyaW5ncy54bWwKQEAgLTIyMyw2ICsyMjMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiJWZXJyb3VpbGxlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iJmd0Ozk5OSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJDb250ZW51cyBtYXNxdcOpcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+Ik1vZGUgc8OpY3VyaXPDqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+IlN5c3TDqG1lIEFuZHJvaWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+IlBlcnNvbm5lbCI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IlBlcm1ldCDDoCBsXCdhcHBsaWNhdGlvbiBkZSBwcmVuZHJlIGRlcyBwaG90b3MgZXQgZGUgZmlsbWVyIGRlcyB2aWTDqW9zIGF2ZWMgbFwnYXBwYXJlaWwgcGhvdG8uIENldHRlIGF1dG9yaXNhdGlvbiBsdWkgcGVybWV0IGRcJ3V0aWxpc2VyIGxcJ2FwcGFyZWlsIHBob3RvIMOgIHRvdXQgbW9tZW50IHNhbnMgdm90cmUgY29uc2VudGVtZW50LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiJnw6lyZXIgbGUgdmlicmV1ciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4iUGVybWV0IMOgIGxcJ2FwcGxpY2F0aW9uIGRlIGfDqXJlciBsZSB2aWJyZXVyIGRlIGxcJ2FwcGFyZWlsLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiJnw6lyZXIgbGEgbGFtcGUgZGUgcG9jaGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+IlBlcm1ldCDDoCBsXCdhcHBsaWNhdGlvbiBkZSBnw6lyZXIgbGEgbGFtcGUgZGUgcG9jaGUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4iYXBwZWxlciBkaXJlY3RlbWVudCBkZXMgbnVtw6lyb3MgZGUgdMOpbMOpcGhvbmUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4iUGVybWV0IMOgIGxcJ2FwcGxpY2F0aW9uIGRcJ2FwcGVsZXIgZGVzIG51bcOpcm9zIGRlIHTDqWzDqXBob25lIHNhbnMgdm90cmUgaW50ZXJ2ZW50aW9uLiBDZXR0ZSBhdXRvcmlzYXRpb24gcGV1dCBlbnRyYcOubmVyIGRlcyBmcmFpcyBvdSBkZXMgYXBwZWxzIGltcHLDqXZ1cyBldCBuZSBwZXJtZXQgcGFzIMOgIGxcJ2FwcGxpY2F0aW9uIGRcJ2FwcGVsZXIgZGVzIG51bcOpcm9zIGRcJ3VyZ2VuY2UuIERlcyBhcHBsaWNhdGlvbnMgbWFsdmVpbGxhbnRlcyBwZXV2ZW50IGfDqW7DqXJlciBkZXMgZnJhaXMgZW4gcGFzc2FudCBkZXMgYXBwZWxzIHNhbnMgdm90cmUgY29uc2VudGVtZW50LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiIG1zZ2lkPSIzNTc0OTQzODQ3MTgxNzkzOTE4Ij4iYWNjw6lkZXIgYXUgc2VydmljZSBkXCdhcHBlbCBJTVMiPC9zdHJpbmc+CkBAIC04NTgsMTAgKzg1NywxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+IkNvdXBlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4iQ29waWVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzdGUiIG1zZ2lkPSI1NjI5ODgwODM2ODA1MDM2NDMzIj4iQ29sbGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiJDb2xsZXIgZW4gdGV4dGUgYnJ1dCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4iUmVtcGxhY2VyLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+IlN1cHByaW1lciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4iQ29waWVyIGxcJ1VSTCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+IlPDqWxlY3Rpb25uZXIgZHUgdGV4dGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmRvIiBtc2dpZD0iNzkwNTc4ODUwMjQ5MTc0MjMyOCI+IkFubnVsZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+IlLDqXDDqXRlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiJTw6lsZWN0aW9uIGRlIHRleHRlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWRkVG9EaWN0aW9uYXJ5IiBtc2dpZD0iNDM1MjE2MTUzNDUxMDA1Nzg3NCI+IkFqb3V0ZXIgYXUgZGljdGlvbm5haXJlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiJTdXBwcmltZXIiPC9zdHJpbmc+CkBAIC0xMTA3LDYgKzExMDksNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4iQ2hhbmdlciBkZSBmb25kIGRcJ8OpY3JhbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+Ik91dGlsIGRcJ8OpY291dGUgZGVzIG5vdGlmaWNhdGlvbnMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+IkZvdXJuaXNzZXVyIGRlIGNvbmRpdGlvbnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiJBc3Npc3RhbnQgZGVzIG5vdGlmaWNhdGlvbnMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IlZQTiBhY3RpdsOpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4iVlBOIGFjdGl2w6kgcGFyIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0IiBtc2dpZD0iMzAxMTMwNjYwNzEyNjQ1MDMyMiI+IkFwcHV5ZXogaWNpIHBvdXIgZ8OpcmVyIGxlIHLDqXNlYXUuIjwvc3RyaW5nPgpAQCAtMTQ0MCwxMiArMTQ0Myw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+Ik1pcyDDoCBqb3VyIHBhciB2b3RyZSBhZG1pbmlzdHJhdGV1ciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4iU3VwcHJpbcOpIHBhciB2b3RyZSBhZG1pbmlzdHJhdGV1ciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4iUG91ciBhbcOpbGlvcmVyIGxcJ2F1dG9ub21pZSBkZSBsYSBwaWxlLCBsYSBmb25jdGlvbiBkXCfDqWNvbm9taWUgZFwnw6luZXJnaWUgcsOpZHVpdCBsZXMgcGVyZm9ybWFuY2VzIGRlIHZvdHJlIGFwcGFyZWlsIGV0IGxpbWl0ZSBsYSB2aWJyYXRpb24sIGxlcyBzZXJ2aWNlcyBkZSBsb2NhbGlzYXRpb24gYWluc2kgcXVlIGxhIHBsdXBhcnQgZGVzIGRvbm7DqWVzIGVuIGFycmnDqHJlLXBsYW4uIExlcyBhcHBsaWNhdGlvbnMgQ291cnJpZWwsIE1lc3NhZ2VzIGV0IGRcJ2F1dHJlcyBxdWkgcmVwb3NlbnQgc3VyIGxhIHN5bmNocm9uaXNhdGlvbiBuZSBwZXV2ZW50IHBhcyBzZSBtZXR0cmUgw6Agam91ciwgc2F1ZiBzaSB2b3VzIGxlcyBvdXZyZXouIFxuXG4gTFwnw6ljb25vbWlzZXVyIGRcJ8OpbmVyZ2llIHNlIGTDqXNhY3RpdmUgYXV0b21hdGlxdWVtZW50IGxvcnNxdWUgdm90cmUgYXBwYXJlaWwgZXN0IGVuIGNoYXJnZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV90aXRsZSIgbXNnaWQ9Ijc0OTM5ODk3MjI2MTAwMDg3MDAiPiJJbXBvcnRhbmNlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiJCbG9xdcOpZSA6IG5lIGphbWFpcyBhZmZpY2hlciBjZXMgbm90aWZpY2F0aW9ucyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjY0NDc2NDA0NDk5MTg0MjcxODciPiJGYWlibGUgOiBhZmZpY2hlciBlbiBtb2RlIHNpbGVuY2lldXggYXUgYmFzIGRlIGxhIGxpc3RlIGRlIG5vdGlmaWNhdGlvbnMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNzk5MTE1NzY5NzYwOTU3NTI3MSI+Ik5vcm1hbGUgOiBhZmZpY2hlciBjZXMgbm90aWZpY2F0aW9ucyBlbiBtb2RlIHNpbGVuY2lldXgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzE1MjIzODYzNzczNzIxNTY1NCI+IsOJbGV2w6llIDogYWZmaWNoZXIgZW4gaGF1dCBkZSBsYSBsaXN0ZSBkZXMgbm90aWZpY2F0aW9ucyBldCDDqW1ldHRyZSB1biBzb24iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSIxMTUzNjkzMDgwNDY3OTA0NDc0Ij4iVXJnZW50IDogYWZmaWNoZXIgc3VyIGxcJ8OpY3JhbiBldCDDqW1ldHRyZSB1biBzb24iPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0iemVuX21vZGVfZHVyYXRpb25fbWludXRlc19zdW1tYXJ5IiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNDM2Nzg3NzQwODA3MjAwMDg0OCI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj5QZW5kYW50ICUxJGQgbWludXRlIChqdXNxdVwnw6AgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5QZW5kYW50ICUxJGQgbWludXRlcyAoanVzcXVcJ8OgIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZnIvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWZyL3N0cmluZ3MueG1sCmluZGV4IDZjMWFmODcuLjMzZDIwMTYgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZnIvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1mci9zdHJpbmdzLnhtbApAQCAtMTg5LDcgKzE4OSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJzaWxlbnRfbW9kZV9yaW5nIiBtc2dpZD0iODU5MjI0MTgxNjE5NDA3NDM1MyI+IlNvbm5lcmllIGFjdGl2w6llIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVib290X3RvX3VwZGF0ZV90aXRsZSIgbXNnaWQ9IjYyMTI2MzY4MDI1MzY4MjM4NTAiPiJNaXNlIMOgIGpvdXIgZHUgc3lzdMOobWUgQW5kcm9pZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlYm9vdF90b191cGRhdGVfcHJlcGFyZSIgbXNnaWQ9IjYzMDU4NTM4MzE5NTUzMTA4OTAiPiJQcsOpcGFyYXRpb24gZGUgbGEgbWlzZSDDoCBqb3VyIGVuIGNvdXJz4oCmIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVib290X3RvX3VwZGF0ZV9wYWNrYWdlIiBtc2dpZD0iMzg3MTMwMjMyNDUwMDkyNzI5MSI+IlRyYWl0ZW1lbnQgZHUgcGFja2FnZSBkZSBtaXNlcyDDoCBqb3VyIGVuIGNvdXJz4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVib290X3RvX3VwZGF0ZV9wYWNrYWdlIiBtc2dpZD0iMzg3MTMwMjMyNDUwMDkyNzI5MSI+IlRyYWl0ZW1lbnQgZHUgcGFja2FnZSBkZSBtaXNlIMOgIGpvdXLigKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWJvb3RfdG9fdXBkYXRlX3JlYm9vdCIgbXNnaWQ9IjY0Mjg0NDEwMDA5NTE1NjUxODUiPiJSZWTDqW1hcnJhZ2UgZW4gY291cnPigKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWJvb3RfdG9fcmVzZXRfdGl0bGUiIG1zZ2lkPSI0MTQyMzU1OTE1MzQwNjI3NDkwIj4iUsOpdGFibGlyIGxhIGNvbmZpZ3VyYXRpb24gZFwndXNpbmUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWJvb3RfdG9fcmVzZXRfbWVzc2FnZSIgbXNnaWQ9IjI0MzIwNzc0OTExMDE0MTYzNDUiPiJSZWTDqW1hcnJhZ2UgZW4gY291cnPigKYiPC9zdHJpbmc+CkBAIC0yMjMsNiArMjIzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9ja2Rvd24iIG1zZ2lkPSI4NzUxNTQyNTE0NzI0MzMyODczIj4iVmVycm91aWxsZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+IiZndDs5OTkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fY2hpbGRyZW5fY291bnRfYnJhY2tldGVkIiBtc2dpZD0iMTc2OTQyNTQ3MzE2ODM0NzgzOSI+Iig8eGxpZmY6ZyBpZD0iTk9USUZJQ0FUSU9OQ09VTlQiPiVkPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4iQ29udGVudXMgbWFzcXXDqXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiJNb2RlIHPDqWN1cmlzw6kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiJTeXN0w6htZSBBbmRyb2lkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNlcl9vd25lcl9sYWJlbCIgbXNnaWQ9IjI4MDQzNTE4OTgwMDEwMzg5NTEiPiJQZXJzb25uZWwiPC9zdHJpbmc+CkBAIC0zNTMsOCArMzU0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiJQZXJtZXQgw6AgbFwnYXBwbGljYXRpb24gZGUgcHJlbmRyZSBkZXMgcGhvdG9zIGV0IGRlIGZpbG1lciBkZXMgdmlkw6lvcyBhdmVjIGxcJ2FwcGFyZWlsIHBob3RvLiBDZXR0ZSBhdXRvcmlzYXRpb24gbHVpIHBlcm1ldCBkXCd1dGlsaXNlciBsXCdhcHBhcmVpbCBwaG90byDDoCB0b3V0IG1vbWVudCBzYW5zIHZvdHJlIGNvbnNlbnRlbWVudC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4iY29udHLDtGxlciBsZSB2aWJyZXVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiJQZXJtZXQgw6AgbFwnYXBwbGljYXRpb24gZGUgY29udHLDtGxlciBsZSB2aWJyZXVyLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiJjb250csO0bGVyIGxhIGxhbXBlIGRlIHBvY2hlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiJQZXJtZXQgw6AgbFwnYXBwbGljYXRpb24gZGUgY29udHLDtGxlciBsYSBsYW1wZSBkZSBwb2NoZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiJhcHBlbGVyIGRpcmVjdGVtZW50IGxlcyBudW3DqXJvcyBkZSB0w6lsw6lwaG9uZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQaG9uZSIgbXNnaWQ9IjM3NDA3OTc1NzYxMTM3NjA4MjciPiJQZXJtZXQgw6AgbFwnYXBwbGljYXRpb24gZFwnYXBwZWxlciBkZXMgbnVtw6lyb3MgZGUgdMOpbMOpcGhvbmUgc2FucyB2b3RyZSBpbnRlcnZlbnRpb24uIENldHRlIGF1dG9yaXNhdGlvbiBwZXV0IGVudHJhw65uZXIgZGVzIGZyYWlzIG91IGRlcyBhcHBlbHMgaW1wcsOpdnVzIGV0IG5lIHBlcm1ldCBwYXMgw6AgbFwnYXBwbGljYXRpb24gZFwnYXBwZWxlciBkZXMgbnVtw6lyb3MgZFwndXJnZW5jZS4gTGVzIGFwcGxpY2F0aW9ucyBtYWx2ZWlsbGFudGVzIHBldXZlbnQgZ8OpbsOpcmVyIGRlcyBmcmFpcyBlbiBwYXNzYW50IGRlcyBhcHBlbHMgc2FucyB2b3RyZSBjb25zZW50ZW1lbnQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiJhY2PDqWRlciBhdSBzZXJ2aWNlIGRcJ2FwcGVsIElNUyI8L3N0cmluZz4KQEAgLTg1OCwxMCArODU3LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJjdXQiIG1zZ2lkPSIzMDkyNTY5NDA4NDM4NjI2MjYxIj4iQ291cGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weSIgbXNnaWQ9IjI2ODE5NDYyMjk1MzM1MTE5ODciPiJDb3BpZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiJDb2xsZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXN0ZV9hc19wbGFpbl90ZXh0IiBtc2dpZD0iNTQyNzc5Mjc0MTkwODAxMDY3NSI+IkNvbGxlciBhdSBmb3JtYXQgdGV4dGUgYnJ1dCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4iUmVtcGxhY2VyLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+IlN1cHByaW1lciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4iQ29waWVyIGxcJ1VSTCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+IlPDqWxlY3Rpb25uZXIgdGV4dGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmRvIiBtc2dpZD0iNzkwNTc4ODUwMjQ5MTc0MjMyOCI+IkFubnVsZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+IlLDqXRhYmxpciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiJTw6lsZWN0aW9uIGRlIHRleHRlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWRkVG9EaWN0aW9uYXJ5IiBtc2dpZD0iNDM1MjE2MTUzNDUxMDA1Nzg3NCI+IkFqb3V0ZXIgYXUgZGljdGlvbm5haXJlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiJTdXBwcmltZXIiPC9zdHJpbmc+CkBAIC0xMTA3LDYgKzExMDksNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4iQ2hhbmdlciBkZSBmb25kIGRcJ8OpY3JhbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+Ik91dGlsIGRcJ8OpY291dGUgZGVzIG5vdGlmaWNhdGlvbnMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+IkZvdXJuaXNzZXVyIGRlIGNvbmRpdGlvbnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiJBc3Npc3RhbnQgZGUgbm90aWZpY2F0aW9ucyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iVlBOIGFjdGl2w6kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiJWUE4gYWN0aXbDqSBwYXIgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4iQXBwdXlleiBpY2kgcG91ciBnw6lyZXIgbGUgcsOpc2VhdS4iPC9zdHJpbmc+CkBAIC0xNDQwLDEyICsxNDQzLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4iTWlzIMOgIGpvdXIgcGFyIHZvdHJlIGFkbWluaXN0cmF0ZXVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiJTdXBwcmltw6kgcGFyIHZvdHJlIGFkbWluaXN0cmF0ZXVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiJQb3VyIGFtw6lsaW9yZXIgbFwnYXV0b25vbWllIGRlIGxhIGJhdHRlcmllLCBsXCfDqWNvbm9taXNldXIgZGUgYmF0dGVyaWUgcsOpZHVpdCBsZXMgcGVyZm9ybWFuY2VzIGV0IGTDqXNhY3RpdmUgbGUgdmlicmV1ciwgbGVzIHNlcnZpY2VzIGRlIGxvY2FsaXNhdGlvbiBldCBsYSBwbHVwYXJ0IGRlcyBkb25uw6llcyBlbiBhcnJpw6hyZS1wbGFuLiBMZXMgbWVzc2FnZXJpZXMgw6lsZWN0cm9uaXF1ZXMgb3UgYXV0cmVzIGFwcGxpY2F0aW9ucyB1dGlsaXNhbnQgbGEgc3luY2hyb25pc2F0aW9uIHBvdXJyYWllbnQgbmUgcGFzIHNlIG1ldHRyZSDDoCBqb3VyLCBzYXVmIHNpIHZvdXMgbGVzIG91dnJlei5cblxuTFwnw6ljb25vbWlzZXVyIGRlIGJhdHRlcmllIHNcJ8OpdGVpbnQgYXV0b21hdGlxdWVtZW50IGxvcnNxdWUgbFwnYXBwYXJlaWwgZXN0IGVuIGNoYXJnZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV90aXRsZSIgbXNnaWQ9Ijc0OTM5ODk3MjI2MTAwMDg3MDAiPiJJbXBvcnRhbmNlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiJCbG9xdcOpZcKgOiBuZSBqYW1haXMgYWZmaWNoZXIgY2VzIG5vdGlmaWNhdGlvbnMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4iRmFpYmxlwqA6IGFmZmljaGVyIGVuIG1vZGUgc2lsZW5jaWV1eCBhdSBiYXMgZGUgbGEgbGlzdGUgZGUgbm90aWZpY2F0aW9ucyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI3OTkxMTU3Njk3NjA5NTc1MjcxIj4iTm9ybWFsZcKgOiBhZmZpY2hlciBjZXMgbm90aWZpY2F0aW9ucyBlbiBtb2RlIHNpbGVuY2lldXgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzE1MjIzODYzNzczNzIxNTY1NCI+IsOJbGV2w6llwqA6IGFmZmljaGVyIGVuIGhhdXQgZGUgbGEgbGlzdGUgZGVzIG5vdGlmaWNhdGlvbnMgZXQgw6ltZXR0cmUgdW4gc29uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+IlVyZ2VudMKgOiBhZmZpY2hlciBzdXIgbFwnw6ljcmFuIGV0IMOpbWV0dHJlIHVuIHNvbiI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPlBlbmRhbnQgJTEkZMKgbWludXRlIChqdXNxdVwnw6AgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5QZW5kYW50ICUxJGTCoG1pbnV0ZXMgKGp1c3F1XCfDoCA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CkBAIC0xNTExLDYgKzE1MDgsNiBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkZDwveGxpZmY6Zz7CoMOpbMOpbWVudHMgc8OpbGVjdGlvbm7DqXM8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9ub3RpZmljYXRpb25fdG9waWNfbGFiZWwiIG1zZ2lkPSIyMjc1ODYxNDU3OTE4NzA4MjkiPiJEaXZlcnMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fdG9waWMiIG1zZ2lkPSIzNTcyMjgwNDM5ODgwMDIzMjMzIj4iVm91cyBhdmV6IGTDqWZpbmkgbFwnaW1wb3J0YW5jZSBkZSBjZXMgbm90aWZpY2F0aW9ucy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fdG9waWMiIG1zZ2lkPSIzNTcyMjgwNDM5ODgwMDIzMjMzIj4iVm91cyBkw6lmaW5pc3NleiBsXCdpbXBvcnRhbmNlIGRlIGNlcyBub3RpZmljYXRpb25zLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV9wZXJzb24iIG1zZ2lkPSI5MTYwMTMzNTk3MjYyOTM4Mjk2Ij4iQ2VzIG5vdGlmaWNhdGlvbnMgc29udCBpbXBvcnRhbnRlcyBlbiByYWlzb24gZGVzIHBhcnRpY2lwYW50cy4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZ2wtckVTL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1nbC1yRVMvc3RyaW5ncy54bWwKaW5kZXggMjdhYzQ5MC4uNzk0NzgyNSAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1nbC1yRVMvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1nbC1yRVMvc3RyaW5ncy54bWwKQEAgLTIyMyw2ICsyMjMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiJCbG9xdWVhciBhZ29yYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iJmd0Ozk5OSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJDb250aWRvIG9jdWx0byI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+Ik1vZG8gc2VndXJvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4iU2lzdGVtYSBBbmRyb2lkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNlcl9vd25lcl9sYWJlbCIgbXNnaWQ9IjI4MDQzNTE4OTgwMDEwMzg5NTEiPiJQZXJzb2FsIjwvc3RyaW5nPgpAQCAtMzUzLDggKzM1NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4iUGVybWl0ZSDDoSBhcGxpY2FjacOzbiB0b21hciBpbWF4ZXMgZSB2w61kZW9zIGNvYSBjw6FtYXJhLiBDb24gZXN0ZSBwZXJtaXNvIGEgYXBsaWNhY2nDs24gcG9kZSB1dGlsaXphciBhIGPDoW1hcmEgZW4gY2FscXVlcmEgbW9tZW50byBzZW4gYSB0w7phIGNvbmZpcm1hY2nDs24uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl92aWJyYXRlIiBtc2dpZD0iNzY5NjQyNzAyNjA1NzcwNTgzNCI+ImNvbnRyb2xhciBhIHZpYnJhY2nDs24iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+IlBlcm1pdGUgw6EgYXBsaWNhY2nDs24gY29udHJvbGFyIG8gdmlicmFkb3IuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mbGFzaGxpZ2h0IiBtc2dpZD0iMjE1NTkyMDgxMDEyMTk4NDIxNSI+ImNvbnRyb2xhciBhIGxhbnRlcm5hIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiJQZXJtaXRlIMOhIGFwbGljYWNpw7NuIGNvbnRyb2xhciBhIGx1eiBkbyBmbGFzaC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiJjaGFtYXIgZGlyZWN0YW1lbnRlIGFvcyBuw7ptZXJvcyBkZSB0ZWzDqWZvbm8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4iUGVybWl0ZSDDoSBhcGxpY2FjacOzbiBjaGFtYXIgYSBuw7ptZXJvcyBkZSB0ZWzDqWZvbm8gc2VuIGEgdMO6YSBpbnRlcnZlbmNpw7NuLiBFc3RhIGFjY2nDs24gcG9kZSBpbXBsaWNhciBjaGFtYWRhcyBvdSBjdXN0b3MgaW5lc3BlcmFkb3MuIFRlbiBlbiBjb250YSBxdWUgaXN0byBub24gcGVybWl0ZSDDoSBhcGxpY2FjacOzbiBjaGFtYXIgYSBuw7ptZXJvcyBkZSBlbWVyeGVuY2lhLiDDiSBwb3NpYmxlIHF1ZSBhcGxpY2FjacOzbnMgbWFsaWNpb3NhcyBjaGUgY3VzdGVuIGRpw7FlaXJvIGRlYmlkbyDDoSByZWFsaXphY2nDs24gZGUgY2hhbWFkYXMgc2VuIGEgdMO6YSBjb25maXJtYWNpw7NuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiIG1zZ2lkPSIzNTc0OTQzODQ3MTgxNzkzOTE4Ij4iYWNjZXNvIGFvIHNlcnZpem8gZGUgY2hhbWFkYXMgZGUgSU1TIjwvc3RyaW5nPgpAQCAtODU4LDEwICs4NTcsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiJDb3J0YXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+IkNvcGlhciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+IlBlZ2FyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiJQZWdhciBjb21vIHRleHRvIHNlbiBmb3JtYXRvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiJTdWJzdGl0dcOtcuKApiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZSIgbXNnaWQ9IjYwOTg2ODQ4NDQwMjE2OTc3ODkiPiJFbGltaW5hciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4iQ29waWFyIFVSTCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+IlNlbGVjY2lvbmFyIHRleHRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiJEZXNmYWNlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlZG8iIG1zZ2lkPSI3NzU5NDY0ODc2NTY2ODAzODg4Ij4iUmVmYWNlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiJTZWxlY2Npw7NuIGRlIHRleHRvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWRkVG9EaWN0aW9uYXJ5IiBtc2dpZD0iNDM1MjE2MTUzNDUxMDA1Nzg3NCI+IkVuZ2FkaXIgYW8gZGljaW9uYXJpbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4iRWxpbWluYXIiPC9zdHJpbmc+CkBAIC0xMTA3LDYgKzExMDksNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4iQ2FtYmlhciBmb25kbyBkZSBwYW50YWxsYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+IkF4ZW50ZSBkZSBlc2NvaXRhIGRlIG5vdGlmaWNhY2nDs25zIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiJQcm92ZWRvciBkZSBjb25kaWNpw7NucyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9hc3Npc3RhbnRfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjkwOTQ1NjA1NTU2OTEwMjk1MiI+IkFzaXN0ZW50ZSBkZSBub3RpZmljYWNpw7NucyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iVlBOIGFjdGl2YWRhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IGFjdGl2b3UgYSBWUE4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiJUb2NhIGFxdcOtIHBhcmEgeGVzdGlvbmFyIGEgcmVkZS4iPC9zdHJpbmc+CkBAIC0xNDQwLDEyICsxNDQzLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4iQWN0dWFsaXphZG8gcG9sbyBhZG1pbmlzdHJhZG9yIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiJFbGltaW5hZG8gcG9sbyBhZG1pbmlzdHJhZG9yIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiJQYXJhIGF4dWRhciBhIG1lbGxvcmFyIGEgZHVyYWNpw7NuIGRhIGJhdGVyw61hLCBhIGZ1bmNpw7NuIGFmb3JybyBkZSBiYXRlcsOtYSByZWR1Y2UgbyByZW5kZW1lbnRvIGRvIHRldSBkaXNwb3NpdGl2byBlIGxpbWl0YSBhIHZpYnJhY2nDs24sIG9zIHNlcnZpem9zIGRlIGxvY2FsaXphY2nDs24gZSBhIG1haW9yw61hIGRvcyBkYXRvcyBlbiBzZWd1bmRvIHBsYW5vLiDDiSBwb3NpYmxlIHF1ZSBvIGNvcnJlbyBlbGVjdHLDs25pY28sIGFzIG1lbnNheGVzIGUgb3V0cmFzIGFwbGljYWNpw7NucyBxdWUgZGVwZW5kZW4gZGEgc2luY3Jvbml6YWNpw7NuIG5vbiBzZSBhY3R1YWxpY2VuIGEgbWVub3MgcXVlIG9zIGFicmFzLiBcblxuQSBmdW5jacOzbiBhZm9ycm8gZGUgYmF0ZXLDrWEgZGVzYWN0w612YXNlIGF1dG9tYXRpY2FtZW50ZSBjYW5kbyBwb3MgYSBjYXJnYXIgbyB0ZXUgZGlzcG9zaXRpdm8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfdGl0bGUiIG1zZ2lkPSI3NDkzOTg5NzIyNjEwMDA4NzAwIj4iSW1wb3J0YW5jaWEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iNzExODgyNjkwMDc2NzA0NzEyNSI+IkJsb3F1ZWFkYTogbm9uIG1vc3RyYXIgbnVuY2EgZXN0YXMgbm90aWZpY2FjacOzbnMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4iQmFpeGE6IG1vc3RyYXIgZGUgZm9ybWEgc2lsZW5jaW9zYSBuYSBwYXJ0ZSBpbmZlcmlvciBkYSBsaXN0YSBkZSBub3RpZmljYWNpw7NucyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI3OTkxMTU3Njk3NjA5NTc1MjcxIj4iTm9ybWFsOiBtb3N0cmFyIGVzdGFzIG5vdGlmaWNhY2nDs25zIGRlIGZvcm1hIHNpbGVuY2lvc2EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzE1MjIzODYzNzczNzIxNTY1NCI+IkFsdGE6IG1vc3RyYXIgbmEgcGFydGUgc3VwZXJpb3IgZGEgbGlzdGEgZGUgbm90aWZpY2FjacOzbnMgZSBlbWl0aXIgc29uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+IlVyeGVudGU6IG1vc3RyYXIgbmEgcGFudGFsbGEgZSBlbWl0aXIgc29uIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5EdXJhbnRlICUxJGQgbWludXRvcyAoYXRhIGFzIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPkR1cmFudGUgdW4gbWludXRvIChhdGEgYXMgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMCI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1ndS1ySU4vc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWd1LXJJTi9zdHJpbmdzLnhtbAppbmRleCBiY2IzMzIxLi5hYTk0NzhiIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWd1LXJJTi9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWd1LXJJTi9zdHJpbmdzLnhtbApAQCAtMjIzLDYgKzIyMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2tkb3duIiBtc2dpZD0iODc1MTU0MjUxNDcyNDMzMjg3MyI+IuCqueCqteCrhyDgqrLgq4ngqpUg4KqV4Kqw4KuLIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiI5OTkrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2NoaWxkcmVuX2NvdW50X2JyYWNrZXRlZCIgbXNnaWQ9IjE3Njk0MjU0NzMxNjgzNDc4MzkiPiIoPHhsaWZmOmcgaWQ9Ik5PVElGSUNBVElPTkNPVU5UIj4lZDwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IuCquOCqvuCqruCql+CrjeCqsOCrgOCqkyDgqpvgq4Hgqqrgqr7gqrXgq4fgqrIg4Kqb4KuHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4i4Kq44KuB4Kqw4KqV4KuN4Kq34Kq/4KqkIOCqruCri+CqoSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+IkFuZHJvaWQg4Kq44Kq/4Kq44KuN4Kqf4KquIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNlcl9vd25lcl9sYWJlbCIgbXNnaWQ9IjI4MDQzNTE4OTgwMDEwMzg5NTEiPiLgqrXgq43gqq/gqpXgq43gqqTgqr/gqpfgqqQiPC9zdHJpbmc+CkBAIC0zNTMsOCArMzU0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiLgqo/gqqrgq43gqrLgqr/gqpXgq4fgqrbgqqjgqqjgq4cg4KqV4KuF4Kqu4KuH4Kqw4Kq+IOCqteCqoeCrhyDgqprgqr/gqqTgq43gqrDgq4sg4KqF4Kqo4KuHIOCqteCqv+CqoeCqv+Cqk+CqnSDgqrLgq4fgqrXgqr7gqqjgq4Ag4Kqu4KqC4Kqc4KuC4Kqw4KuAIOCqhuCqquCrhyDgqpvgq4cuIOCqhiDgqqrgqrDgqrXgqr7gqqjgqpfgq4Ag4KqP4Kqq4KuN4Kqy4Kq/4KqV4KuH4Kq24Kqo4Kqo4KuHIOCqpOCqruCqvuCqsOCrgCDgqqrgq4Hgqrfgq43gqp/gqr8g4Kq14Kq/4Kqo4Kq+IOCqleCri+CqiOCqquCqoyDgqrjgqq7gqq/gq4cg4KqV4KuF4Kqu4KuH4Kqw4Kq+4Kqo4Kq+IOCqieCqquCqr+Cri+Cql+CqqOCrgCDgqq7gqoLgqpzgq4LgqrDgq4Ag4KqG4Kqq4KuHIOCqm+Crhy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4i4Kq14Kq+4KqH4Kqs4KuN4Kqw4KuH4Kq24KqoIOCqqOCqv+Cqr+CqguCqpOCrjeCqsOCqv+CqpCDgqpXgqrDgq4siPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+IuCqj+CqquCrjeCqsuCqv+CqleCrh+CqtuCqqOCqqOCrhyDgqrXgqr7gqofgqqzgq43gqrDgq4fgqp/gqrDgqqjgq4cg4Kqo4Kq/4Kqv4KqC4Kqk4KuN4Kqw4Kq/4KqkIOCqleCqsOCqteCqvuCqqOCrgCDgqq7gqoLgqpzgq4LgqrDgq4Ag4KqG4Kqq4KuHIOCqm+Crhy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4i4Kqr4KuN4Kqy4KuH4Kq24Kqy4Kq+4KqH4KqfIOCqqOCqv+Cqr+CqguCqpOCrjeCqsOCqv+CqpCDgqpXgqrDgq4siPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+IuCqj+CqquCrjeCqsuCqv+CqleCrh+CqtuCqqOCqqOCrhyDgqqvgq43gqrLgq4fgqrbgqrLgqr7gqofgqp/gqqjgq4cg4Kqo4Kq/4Kqv4KqC4Kqk4KuN4Kqw4Kq/4KqkIOCqleCqsOCqteCqvuCqqOCrgCDgqq7gqoLgqpzgq4LgqrDgq4Ag4KqG4Kqq4KuHIOCqm+Crhy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiLgqrjgq4Dgqqfgqr4g4KqcIOCqq+Cri+CqqCDgqqjgqoLgqqzgqrDgq43gqrgg4Kqq4KqwIOCqleCrieCqsiDgqpXgqrDgq4siPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4i4KqP4Kqq4KuN4Kqy4Kq/4KqV4KuH4Kq24Kqo4Kqo4KuHIOCqpOCqruCqvuCqsOCqviDgqrngqrjgq43gqqTgqpXgq43gqrfgq4fgqqog4Kq14Kq/4Kqo4Kq+IOCqq+Cri+CqqCDgqqjgqoLgqqzgqrDgq43gqrgg4Kqq4KqwIOCqleCrieCqsiDgqpXgqrDgqrXgqr7gqqjgq4Ag4Kqu4KqC4Kqc4KuC4Kqw4KuAIOCqhuCqquCrhyDgqpvgq4cuIOCqhiDgqoXgqqjgqqrgq4fgqpXgq43gqrfgqr/gqqQg4Kq24KuB4Kqy4KuN4KqVIOCqheCqpeCqteCqviDgqpXgq4ngqrLgq43gqrjgqq7gqr7gqoIg4Kqq4Kqw4Kq/4Kqj4Kqu4KuAIOCqtuCqleCrhyDgqpvgq4cuIOCqqOCri+CqguCqp+CriyDgqpXgq4cg4KqGIOCqj+CqquCrjeCqsuCqv+CqleCrh+CqtuCqqOCqqOCrhyDgqpXgqp/gq4vgqpXgqp/gq4Dgqqjgqr4g4Kqo4KqC4Kqs4Kqw4KuN4Kq4IOCqquCqsCDgqpXgq4ngqrIg4KqV4Kqw4Kq14Kq+4Kqo4KuAIOCqruCqguCqnOCrguCqsOCrgCDgqobgqqrgqqTgq4HgqoIg4Kqo4Kql4KuALiDgqqbgq4HgqrDgq43gqq3gqr7gqrXgqqjgqr7gqqrgq4LgqrDgq43gqqMg4KqP4Kqq4KuN4Kqy4Kq/4KqV4KuH4Kq24Kqo4KuLIOCqpOCqruCqvuCqsOCrgCDgqqrgq4Hgqrfgq43gqp/gqr8g4Kq14Kq/4Kqo4Kq+IOCqleCrieCqsuCrjeCquCDgqpXgqrDgq4Dgqqjgq4cg4Kqk4Kqu4Kq+4Kqw4Kq+IOCqquCriOCquOCqviDgqpbgqrDgq43gqpog4KqV4Kqw4KuAIOCqtuCqleCrhyDgqpvgq4cuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiJJTVMg4KqV4KuJ4KqyIOCquOCrh+CqteCqviDgqo3gqpXgq43gqrjgq4fgqrgg4KqV4Kqw4KuLIjwvc3RyaW5nPgpAQCAtODU4LDEwICs4NTcsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiLgqpXgqr7gqqrgq4siPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+IuCqleCrieCqquCqvyDgqpXgqrDgq4siPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiLgqqrgq4fgqrjgq43gqp8g4KqV4Kqw4KuLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiLgqrjgqr7gqqbgq4Ag4Kqf4KuH4KqV4KuN4Kq44KuN4KqfIOCqpOCqsOCrgOCqleCrhyDgqqrgq4fgqrjgq43gqp8g4KqV4Kqw4KuLIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiLgqqzgqqbgqrLgq4vigKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4i4KqV4Kq+4Kqi4KuAIOCqqOCqvuCqluCriyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4iVVJMIOCqqOCrgCDgqpXgq4ngqqrgqr8g4KqV4Kqw4KuLIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4i4Kqf4KuH4KqV4KuN4Kq44KuN4KqfIOCqquCquOCqguCqpiDgqpXgqrDgq4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmRvIiBtc2dpZD0iNzkwNTc4ODUwMjQ5MTc0MjMyOCI+IuCqquCrguCqsOCrjeCqteCqteCqpOCrjSDgqpXgqrDgq4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+IuCqq+CqsOCrgCDgqpXgqrDgq4siPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4i4Kqf4KuH4KqV4KuN4Kq44KuN4KqfIOCqquCquOCqguCqpuCql+CrgCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiLgqrbgqqzgq43gqqbgqpXgq4vgqrbgqq7gqr7gqoIg4KqJ4Kqu4KuH4Kqw4KuLIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiLgqpXgqr7gqqLgq4Ag4Kqo4Kq+4KqW4KuLIjwvc3RyaW5nPgpAQCAtMTEwNyw2ICsxMTA5LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+IuCqteCrieCqsuCqquCrh+CqquCqsCDgqqzgqqbgqrLgq4siPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiLgqrjgq4Lgqprgqqjgqr4g4Kq44Kq+4KqC4Kqt4Kqz4Kqo4Kq+4KqwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiLgqrbgqrDgqqQg4Kqq4KuN4Kqw4Kqm4Kq+4Kqk4Kq+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2Fzc2lzdGFudF9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iOTA5NDU2MDU1NTY5MTAyOTUyIj4i4Kq44KuC4Kqa4Kqo4Kq+IOCquOCqueCqvuCqr+CqlSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iVlBOIOCquOCqleCrjeCqsOCqv+CqryDgqpXgqrDgq43gqq/gq4HgqoIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g4Kqm4KuN4Kq14Kq+4Kqw4Kq+IFZQTiDgqrjgqpXgq43gqrDgqr/gqq8g4Kql4Kqv4KuB4KqCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4i4Kqo4KuH4Kqf4Kq14Kqw4KuN4KqV4Kqo4KuHIOCquOCqguCqmuCqvuCqsuCqv+CqpCDgqpXgqrDgqrXgqr4g4Kqu4Kq+4Kqf4KuHIOCqn+CqmiDgqpXgqrDgq4suIjwvc3RyaW5nPgpAQCAtMTQ0MCwxMiArMTQ0Myw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+IuCqpOCqruCqvuCqsOCqviDgqrXgq43gqq/gqrXgqrjgq43gqqXgqr7gqqrgqpUg4Kqm4KuN4Kq14Kq+4Kqw4Kq+IOCqheCqquCqoeCrh+CqnyDgqqXgqq/gq4fgqrIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX2RlbGV0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iNzY1MDU3NzM4NzQ5MzEwMTM1MyI+IuCqpOCqruCqvuCqsOCqviDgqrXgq43gqq/gqrXgqrjgq43gqqXgqr7gqqrgqpUg4Kqm4KuN4Kq14Kq+4Kqw4Kq+IOCqleCqvuCqouCrgCDgqqjgqr7gqpbgq4fgqrIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTk2MDQzMTEyMzgxNjI1MzAzNCI+IuCqrOCrheCqn+CqsOCrgCDgqobgqrXgqrDgqqbgqr4g4Kq14Kqn4KuBIOCquOCqvuCqsOCrgCDgqpXgqrDgqrXgqr7gqq7gqr7gqoIg4Kq44Kq54Kq+4KqvIOCqruCqvuCqn+Crhywg4Kqs4KuF4Kqf4Kqw4KuAIOCquOCrh+CqteCqsCDgqqTgqq7gqr7gqrDgqr4g4KqJ4Kqq4KqV4Kqw4Kqj4Kqo4Kq+IOCqquCrjeCqsOCqpuCqsOCrjeCqtuCqqOCqqOCrhyDgqpjgqp/gqr7gqqHgq4cg4Kqb4KuHIOCqheCqqOCrhyDgqrXgqr7gqofgqqzgq43gqrDgq4fgqrbgqqgsIOCquOCrjeCqpeCqvuCqqCDgqrjgq4fgqrXgqr7gqpMg4KqF4Kqo4KuHIOCqruCri+Cqn+CqvuCqreCqvuCql+CqqOCqviDgqqrgq4Pgqrfgq43gqqDgqq3gq4Lgqq7gqr8g4Kqh4KuH4Kqf4Kq+4Kqo4KuHIOCquOCrgOCqruCqv+CqpCDgqpXgqrDgq4cg4Kqb4KuHLiDgqofgqq7gq4fgqofgqrIsIOCqruCrh+CquOCrh+CqnOCqv+CqguCqlyDgqoXgqqjgq4cg4KqF4Kqo4KuN4KqvIOCqj+CqquCrjeCqsuCqv+CqleCrh+CqtuCqqOCriyDgqpzgq4cg4Kq44Kqu4Kqo4KuN4Kq14Kqv4KqoIOCqquCqsCDgqobgqqfgqr7gqrAg4Kqw4Kq+4KqW4KuHIOCqm+CrhyDgqqTgq4cg4Kqk4Kqu4KuHIOCqpOCrh+CqruCqqOCrhyDgqpbgq4vgqrLgqrbgq4sg4Kqo4Kq54KuA4KqCIOCqpOCrjeCqr+CqvuCqgiDgqrjgq4Hgqqfgq4Ag4KqF4Kqq4Kqh4KuH4KqfIOCqpeCqiCDgqrbgqpXgqqTgq4Ag4Kqo4Kql4KuALlxuXG7gqpzgq43gqq/gqr7gqrDgq4cg4Kqk4Kqu4Kq+4Kqw4KuB4KqCIOCqieCqquCqleCqsOCqoyDgqprgqr7gqrDgq43gqpwg4Kql4KqIIOCqsOCqueCrjeCqr+CrgeCqgiDgqrngq4vgqq8g4Kqk4KuN4Kqv4Kq+4Kqw4KuHIOCqrOCrheCqn+CqsOCrgCDgqrjgq4fgqrXgqrAg4KqG4Kqq4Kqu4KuH4Kqz4KuHIOCqrOCqguCqpyDgqqXgqogg4Kqc4Kq+4KqvIOCqm+Crhy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV90aXRsZSIgbXNnaWQ9Ijc0OTM5ODk3MjI2MTAwMDg3MDAiPiLgqq7gqrngqqTgq43gqrUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iNzExODgyNjkwMDc2NzA0NzEyNSI+IuCqheCqteCqsOCri+Cqp+Cqv+CqpDog4KqGIOCquOCrguCqmuCqqOCqvuCqkyDgqpXgq43gqq/gqr7gqrDgq4fgqq8g4Kqs4Kqk4Kq+4Kq14Kq24KuLIOCqqOCqueCrgOCqgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjY0NDc2NDA0NDk5MTg0MjcxODciPiLgqqjgqr/gqq7gq43gqqg6IOCquOCrguCqmuCqqOCqvuCqqOCrgCDgqrjgq4Lgqprgqr/gqqjgq4Ag4Kqo4KuA4Kqa4KuHIOCqmuCrgeCqquCqmuCqvuCqqiDgqqzgqqTgqr7gqrXgq4siPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNzk5MTE1NzY5NzYwOTU3NTI3MSI+IuCquOCqvuCqruCqvuCqqOCrjeCqrzog4KqGIOCquOCrguCqmuCqqOCqvuCqkyDgqprgq4Hgqqrgqprgqr7gqqog4Kqs4Kqk4Kq+4Kq14KuLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiLgqongqprgq43gqpo6IOCquOCrguCqmuCqqOCqvuCqk+CqqOCrgCDgqrjgq4Lgqprgqr/gqqjgq4Ag4Kqf4KuL4KqaIOCqquCqsCDgqqzgqqTgqr7gqrXgq4sg4KqF4Kqo4KuHIOCqheCqteCqvuCqnCDgqpXgqrDgq4siPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSIxMTUzNjkzMDgwNDY3OTA0NDc0Ij4i4Kqk4Kq+4Kqk4KuN4KqV4Kq+4Kqy4Kq/4KqVIDog4Kq44KuN4KqV4KuN4Kqw4KuA4KqoIOCqquCqsCDgqqTgq43gqrXgqrDgqr/gqqQg4Kqm4KuN4Kqw4Kq34KuN4Kqf4Kq/IOCqleCqsOCriyDgqoXgqqjgq4cg4KqF4Kq14Kq+4KqcIOCqleCqsOCriyI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPiUxJGQg4Kqu4Kq/4Kqo4Kq/4KqfIOCqruCqvuCqn+CrhyAoPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4g4Kq44KuB4Kqn4KuAKTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+JTEkZCDgqq7gqr/gqqjgqr/gqp8g4Kqu4Kq+4Kqf4KuHICg8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPiDgqrjgq4Hgqqfgq4ApPC9pdGVtPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1oaS9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtaGkvc3RyaW5ncy54bWwKaW5kZXggZWY4YmU2NC4uZDNkMWUyYyAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1oaS9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWhpL3N0cmluZ3MueG1sCkBAIC0yMjMsNiArMjIzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9ja2Rvd24iIG1zZ2lkPSI4NzUxNTQyNTE0NzI0MzMyODczIj4i4KSF4KSt4KWAIOCksuClieCklSDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+Ijk5OSsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fY2hpbGRyZW5fY291bnRfYnJhY2tldGVkIiBtc2dpZD0iMTc2OTQyNTQ3MzE2ODM0NzgzOSI+Iig8eGxpZmY6ZyBpZD0iTk9USUZJQ0FUSU9OQ09VTlQiPiVkPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4i4KSb4KS/4KSq4KWAIOCkueClgeCkiCDgpLjgpL7gpK7gpJfgpY3gpLDgpYAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiLgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQg4KSu4KWL4KShIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4iQW5kcm9pZCDgpLjgpL/gpLjgpY3igI3gpJ/gpK4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+IuCkteCljeCkr+CkleCljeCkpOCkv+Ckl+CkpCI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkleCliOCkruCksOClhyDgpLjgpYcg4KSa4KS/4KSk4KWN4KSwIOCklOCksCDgpLXgpYDgpKHgpL/gpK/gpYsg4KSy4KWH4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkr+CkuSDgpIXgpKjgpYHgpK7gpKTgpL8g4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KSV4KS/4KS44KWAIOCkreClgCDgpLjgpK7gpK8g4KSG4KSq4KSV4KWAIOCkquClgeCkt+CljeCkn+CkvyDgpJXgpYcg4KSs4KS/4KSo4KS+IOCkleCliOCkruCksOClhyDgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpYAg4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiLgpJXgpILgpKrgpKgg4KSo4KS/4KSv4KSC4KSk4KWN4KSw4KS/4KSkIOCkleCksOClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4i4KSQ4KSq4KWN4KS4IOCkleCliyDgpJXgpILgpKrgpKjgpJXgpLDgpY3gpKTgpL4g4KSo4KS/4KSv4KSC4KSk4KWN4KSw4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiLgpKvgpLzgpY3gpLLgpYjgpLbgpLLgpL7gpIfgpJ8g4KSo4KS/4KSv4KSC4KSk4KWN4KSw4KS/4KSkIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4i4KSQ4KSq4KWN4KS4IOCkleCliyDgpKvgpLzgpY3gpLLgpYjgpLbgpLLgpL7gpIfgpJ8g4KSo4KS/4KSv4KSC4KSk4KWN4KSw4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+IuCkq+CkvOCli+CkqCDgpKjgpILgpKzgpLAg4KSq4KSwIOCkuOClgOCkp+ClhyDgpJXgpYngpLIg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkhuCkquCkleClhyDgpLngpLjgpY3igI3gpKTgpJXgpY3gpLfgpYfgpKog4KSV4KWHIOCkrOCkv+CkqOCkviDgpKvgpLzgpYvgpKgg4KSo4KSC4KSs4KSwIOCkquCksCDgpJXgpYngpLIg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkh+CkuOCkleClhyDgpKrgpLDgpL/gpKPgpL7gpK4g4KSF4KSq4KWN4KSw4KSk4KWN4oCN4KSv4KS+4KS24KS/4KSkIOCktuClgeCksuCljeKAjeCklSDgpK/gpL4g4KSV4KWJ4KSyIOCkueCliyDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiDgpKfgpY3gpK/gpL7gpKgg4KSm4KWH4KSCIOCkleCkvyDgpK/gpLkg4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KSG4KSq4KS+4KSk4KSV4KS+4KSy4KWA4KSoIOCkqOCkguCkrOCksCDgpKrgpLAg4KSV4KWJ4KSyIOCkqOCkueClgOCkgiDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+LiDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSQ4KSq4KWN4KS4ICDgpIbgpKrgpJXgpYAg4KSq4KWB4KS34KWN4KSf4KS/IOCkleClhyDgpKzgpL/gpKjgpL4g4KSV4KWJ4KSyIOCkleCksOCkleClhyDgpIbgpKrgpJXgpL4g4KSn4KSoIOCkteCljeKAjeCkr+CkryDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ltc0NhbGxTZXJ2aWNlIiBtc2dpZD0iMzU3NDk0Mzg0NzE4MTc5MzkxOCI+IklNUyDgpJXgpYngpLIg4KS44KWH4KS14KS+IOCkkOCkleCljeKAjeCkuOClh+CkuCDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CkBAIC04NTgsMTAgKzg1NywxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+IuCkleCkvuCkn+Clh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4i4KSq4KWN4KSw4KSk4KS/4KSy4KS/4KSq4KS/IOCkrOCkqOCkvuCkj+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+IuCkmuCkv+CkquCkleCkvuCkj+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4i4KS44KS+4KSm4KWHIOCkquCkvuCkoCDgpJXgpYcg4KSw4KWC4KSqIOCkruClh+CkgiDgpJrgpL/gpKrgpJXgpL7gpI/gpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXBsYWNlIiBtc2dpZD0iNTc4MTY4NjA1OTA2MzE0ODkzMCI+IuCkrOCkpuCksuClh+CkguKAoiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZSIgbXNnaWQ9IjYwOTg2ODQ4NDQwMjE2OTc3ODkiPiLgpLngpJ/gpL7gpI/gpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IlVSTCDgpJXgpYAg4KSq4KWN4KSw4KSk4KS/4KSy4KS/4KSq4KS/IOCkrOCkqOCkvuCkj+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+IuCksuClh+CkliDgpJXgpYsg4KSa4KWB4KSo4KWH4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiLgpLXgpL7gpKrgpLgg4KSy4KS+4KSP4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiLgpKvgpL/gpLAg4KS44KWHIOCkleCksOClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiLgpLLgpYfgpJYg4KSa4KSv4KSoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWRkVG9EaWN0aW9uYXJ5IiBtc2dpZD0iNDM1MjE2MTUzNDUxMDA1Nzg3NCI+IuCktuCkrOCljeCkpuCkleCli+CktiDgpK7gpYfgpIIg4KSc4KWL4KSh4KS84KWH4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiLgpLngpJ/gpL7gpI/gpIIiPC9zdHJpbmc+CkBAIC0xMTA3LDYgKzExMDksNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4i4KS14KWJ4KSy4KSq4KWH4KSq4KSwIOCkrOCkpuCksuClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+IuCkqOCli+Ckn+Ckv+Ckq+Ckv+CkleClh+CktuCkqCDgpLbgpY3gpLDgpLXgpKPgpJXgpLDgpY3gpKTgpL4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+IuCkuOCljeCkpeCkv+CkpOCkvyDgpKrgpY3gpLDgpKbgpL7gpKTgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiLgpKjgpYvgpJ/gpL/gpKvgpL/gpJXgpYfgpLbgpKgg4KS44KS54KS+4KSv4KSVIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJWUE4g4KS44KSV4KWN4KSw4KS/4KSvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4iVlBOIOCkleCliyA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g4KSm4KWN4KS14KS+4KSw4KS+IOCkuOCkleCljeCksOCkv+CkryDgpJXgpL/gpK/gpL4g4KSX4KSv4KS+IOCkueCliCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0IiBtc2dpZD0iMzAxMTMwNjYwNzEyNjQ1MDMyMiI+IuCkqOClh+Ckn+CkteCksOCljeCklSDgpKrgpY3gpLDgpKzgpILgpKfgpL/gpKQg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KS44KWN4oCN4KSq4KSw4KWN4KS2IOCkleCksOClh+Ckgi4iPC9zdHJpbmc+CkBAIC0xNDQwLDEyICsxNDQzLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4i4KSG4KSq4KSV4KWHIOCkqOCkv+Ckr+CkguCkpOCljeCksOCklSDgpKbgpY3gpLXgpL7gpLDgpL4g4KSF4KSq4KSh4KWH4KSfIOCkleCkv+Ckr+CkviDgpJfgpK/gpL4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX2RlbGV0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iNzY1MDU3NzM4NzQ5MzEwMTM1MyI+IuCkhuCkquCkleClhyDgpKjgpL/gpK/gpILgpKTgpY3gpLDgpJUg4KSm4KWN4KS14KS+4KSw4KS+IOCkueCkn+CkvuCkr+CkviDgpJfgpK/gpL4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTk2MDQzMTEyMzgxNjI1MzAzNCI+IuCkrOCliOCkn+CksOClgCDgpJzgpYDgpLXgpKgg4KSV4KS+4KSyIOCkleCliyDgpKzgpYfgpLngpKTgpLAg4KSs4KSo4KS+4KSo4KWHIOCkruClh+CkgiDgpLjgpLngpL7gpK/gpKTgpL4g4KSV4KWHIOCksuCkv+Ckjywg4KSs4KWI4KSf4KSw4KWAIOCkuOClh+CkteCksCDgpIbgpKrgpJXgpYcg4KSh4KS/4KS14KS+4KSH4KS4IOCkleClhyDgpKrgpY3gpLDgpKbgpLDgpY3gpLbgpKgg4KSV4KWLIOCkleCkriDgpJXgpLAg4KSm4KWH4KSk4KS+IOCkueCliCDgpJTgpLAg4KSV4KSC4KSq4KSoLCDgpLjgpY3igI3gpKXgpL7gpKgg4KS44KWH4KS14KS+4KST4KSCIOCklOCksCDgpIXgpKfgpL/gpJXgpL7gpILgpLYg4KSq4KWD4KS34KWN4oCN4KSg4KSt4KWC4KSu4KS/IOCkoeClh+Ckn+CkviDgpJXgpYsg4KS44KWA4KSu4KS/4KSkIOCkleCksCDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLngpYsg4KS44KSV4KSk4KS+IOCkueCliCDgpJXgpL8g4KSI4KSu4KWH4KSyLCDgpLjgpILgpKbgpYfgpLYg4KS44KWH4KS14KS+IOCkpOCkpeCkviDgpLjgpK7gpKjgpY3igI3gpLXgpK/gpKgg4KSq4KSwIOCkhuCkp+CkvuCksOCkv+CkpCDgpIXgpKjgpY3igI3gpK8g4KSQ4KSq4KWN4oCN4KS4IOCkpOCkrCDgpKTgpJUg4KSo4KS+IOCkluClgeCksuClh+CkgiDgpJzgpKwg4KSk4KSVIOCkleCkvyDgpIbgpKog4KSJ4KSo4KWN4oCN4KS54KWH4KSCIOCkqOCkueClgOCkgiDgpJbgpYvgpLLgpKTgpYcuXG5cbuCknOCkrCDgpIbgpKrgpJXgpL4g4KSh4KS/4KS14KS+4KSH4KS4IOCkmuCkvuCksOCljeCknCDgpLngpYsg4KSw4KS54KS+IOCkueCli+CkpOCkviDgpLngpYgg4KSk4KWLIOCkrOCliOCkn+CksOClgCDgpLjgpYfgpLXgpLAg4KSF4KSq4KSo4KWHIOCkhuCkqiDgpKzgpILgpKYg4KS54KWLIOCknOCkvuCkpOCkviDgpLngpYguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfdGl0bGUiIG1zZ2lkPSI3NDkzOTg5NzIyNjEwMDA4NzAwIj4i4KSu4KS54KSk4KWN4oCN4KS1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiLgpIXgpLXgpLDgpYvgpKfgpL/gpKQ6IOCkr+ClhyDgpKjgpYvgpJ/gpL/gpKvgpL/gpJXgpYfgpLbgpKgg4KSV4KSt4KWAIOCkqOCkviDgpKbgpL/gpJbgpL7gpI/gpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4i4KSo4KS/4KSu4KWN4oCN4KSoOiDgpKjgpYvgpJ/gpL/gpKvgpL/gpJXgpYfgpLbgpKgg4KS44KWC4KSa4KWAIOCkleClhyDgpKjgpYDgpJrgpYcg4KSu4KWM4KSoIOCksOClguCkqiDgpLjgpYcg4KSm4KS/4KSW4KS+4KSP4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiLgpLjgpL7gpK7gpL7gpKjgpY3igI3gpK86IOCkr+ClhyDgpKjgpYvgpJ/gpL/gpKvgpL/gpJXgpYfgpLbgpKgg4KSu4KWM4KSoIOCksOClguCkqiDgpLjgpYcg4KSm4KS/4KSW4KS+4KSP4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiLgpIngpJrgpY3igI3gpJo6IOCkqOCli+Ckn+Ckv+Ckq+Ckv+CkleClh+CktuCkqCDgpLjgpYLgpJrgpYAg4KSV4KWHIOCktuClgOCksOCljeCktyDgpKrgpLAg4KSm4KS/4KSW4KS+4KSP4KSCIOCklOCksCDgpKfgpY3igI3gpLXgpKjgpL8g4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+IuCkpOCkpOCljeKAjeCkleCkvuCksjog4KS44KWN4oCN4KSV4KWN4KSw4KWA4KSoIOCkquCksCDgpI/gpJUg4KSd4KSy4KSVIOCkpuClh+CkluClh+CkgiDgpJTgpLAg4KSn4KWN4oCN4KS14KSo4KS/IOCkleCksOClh+CkgiI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPiUxJGQg4KSu4KS/4KSo4KSfIOCkleClhyDgpLLgpL/gpI8gKDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+IOCkpOCklSk8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPiUxJGQg4KSu4KS/4KSo4KSfIOCkleClhyDgpLLgpL/gpI8gKDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+IOCkpOCklSk8L2l0ZW0+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWhyL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1oci9zdHJpbmdzLnhtbAppbmRleCBiZDBiMWZhLi5kYzU1YzU3IDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWhyL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtaHIvc3RyaW5ncy54bWwKQEAgLTIyNCw2ICsyMjQsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiJaYWtsanXEjWFqIHNhZGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+Ijk5OSsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fY2hpbGRyZW5fY291bnRfYnJhY2tldGVkIiBtc2dpZD0iMTc2OTQyNTQ3MzE2ODM0NzgzOSI+Iig8eGxpZmY6ZyBpZD0iTk9USUZJQ0FUSU9OQ09VTlQiPiVkPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4iU2FkcsW+YWogamUgc2tyaXZlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+IlNpZ3VyYW4gbmHEjWluIHJhZGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiJTdXN0YXYgQW5kcm9pZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4iT3NvYm5vIjwvc3RyaW5nPgpAQCAtMzU0LDggKzM1NSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4iQXBsaWthY2lqaSBvbW9ndcSHdWplIHNuaW1hbmplIHNsaWthIGkgdmlkZW96YXBpc2EgZm90b2FwYXJhdG9tLiBUYSBkb3p2b2xhIGFwbGlrYWNpamkgb21vZ3XEh3VqZSB1cG90cmVidSBmb3RvYXBhcmF0YSB1IGJpbG8ga29qZW0gdHJlbnV0a3UgYmV6IHZhxaFlZyBvZG9icmVuamEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl92aWJyYXRlIiBtc2dpZD0iNzY5NjQyNzAyNjA1NzcwNTgzNCI+InVwcmF2bGphbmplIHZpYnJhY2lqb20iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+IkFwbGlrYWNpamkgb21vZ3XEh3VqZSBuYWR6b3IgbmFkIHZpYnJhdG9yb20uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mbGFzaGxpZ2h0IiBtc2dpZD0iMjE1NTkyMDgxMDEyMTk4NDIxNSI+InVwcmF2bGphbmplIHN2amV0aWxqa29tIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiJBcGxpa2FjaWppIG9tb2d1xId1amUgdXByYXZsamFuamUgc3ZqZXRpbGprb20uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4iaXpyYXZubyBwb3ppdmFuamUgdGVsZWZvbnNrb2cgYnJvamEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4iQXBsaWthY2lqaSBvbW9ndcSHdWplIHBveml2YW5qZSB0ZWxlZm9uc2tpaCBicm9qZXZhIGJleiB2YcWhZWcgc3VkamVsb3ZhbmphLiBUbyBtb8W+ZSBkb3Zlc3RpIGRvIG5lb8SNZWtpdmFuaWggdHJvxaFrb3ZhIGlsaSBwb3ppdmEuIFV6bWl0ZSB1IG9iemlyIGRhIHNlIGFwbGlrYWNpamkgdGltZSBuZSBvbW9ndcSHdWplIHBveml2YW5qZSBicm9qZXZhIHUgbnXFvmRpLiBabG9uYW1qZXJuZSBhcGxpa2FjaWplIG1vZ3UgdmFtIHV6cm9rb3ZhdGkgZG9kYXRuZSB0cm/FoWtvdmUgcG9zdGF2bGphbmplbSBwb3ppdmEgYmV6IHZhxaFlZyBvZG9icmVuamEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiJwcmlzdHVwaXRpIHVzbHV6aSBwb3ppdmEgaXpyYXZuaWggcG9ydWthIjwvc3RyaW5nPgpAQCAtODYzLDEwICs4NjIsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiJJenJlxb5pIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weSIgbXNnaWQ9IjI2ODE5NDYyMjk1MzM1MTE5ODciPiJLb3BpcmFqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzdGUiIG1zZ2lkPSI1NjI5ODgwODM2ODA1MDM2NDMzIj4iWmFsaWplcGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXN0ZV9hc19wbGFpbl90ZXh0IiBtc2dpZD0iNTQyNzc5Mjc0MTkwODAxMDY3NSI+IlphbGlqZXBpIGthbyBvYmnEjW5pIHRla3N0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiJaYW1pamVuaeKApiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZSIgbXNnaWQ9IjYwOTg2ODQ4NDQwMjE2OTc3ODkiPiJJemJyacWhaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4iS29waXJhaiBVUkwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiJPZGFiaXIgdGVrc3RhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiJQb25pxaF0aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlZG8iIG1zZ2lkPSI3NzU5NDY0ODc2NTY2ODAzODg4Ij4iUG9ub3ZpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGV4dFNlbGVjdGlvbkNBQlRpdGxlIiBtc2dpZD0iNTIzNjg1MDM5NDM3MDgyMDM1NyI+Ik9kYWJpciB0ZWtzdGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4iRG9kYWogdSByamXEjW5payI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4iSXpicmnFoWkiPC9zdHJpbmc+CkBAIC0xMTE0LDYgKzExMTYsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4iUHJvbWplbmEgcG96YWRpbnNrZSBzbGlrZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+IlNsdcWhYXRlbGogb2JhdmlqZXN0aSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbmRpdGlvbl9wcm92aWRlcl9zZXJ2aWNlX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMzIxMzQzMzUyOTA2NTI0NTY0Ij4iRGF2YXRhbGogdXZqZXRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2Fzc2lzdGFudF9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iOTA5NDU2MDU1NTY5MTAyOTUyIj4iUG9tb8SHbmlrIHphIG9iYXZpamVzdGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IlZQTiBha3RpdmlyYW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiJBcGxpa2FjaWphIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiBha3RpdmlyYWxhIGplIFZQTiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0IiBtc2dpZD0iMzAxMTMwNjYwNzEyNjQ1MDMyMiI+IkRvZGlybml0ZSB6YSB1cHJhdmxqYW5qZSBtcmXFvm9tLiI8L3N0cmluZz4KQEAgLTE0NDksMTIgKzE0NTIsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV91cGRhdGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijg4NTY2MzEzMjI0NDAxODcwNzEiPiJBxb51cmlyYSB2YcWhIGFkbWluaXN0cmF0b3IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX2RlbGV0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iNzY1MDU3NzM4NzQ5MzEwMTM1MyI+Ikl6YnJpc2FvIGFkbWluaXN0cmF0b3IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTk2MDQzMTEyMzgxNjI1MzAzNCI+IkRhIGJpIHNlIHByb2R1bGppbG8gdHJhamFuamUgYmF0ZXJpamUsIHXFoXRlZGEgYmF0ZXJpamUgc21hbmp1amUgcmFkIHVyZcSRYWphIGkgb2dyYW5pxI1hdmEgdmlicmFjaWp1LCB1c2x1Z2UgbG9rYWNpamUgaSB2ZcSHaW51IHBvemFkaW5za2loIHBvZGF0YWthLiBBcGxpa2FjaWplIHphIGUtcG/FoXR1LCBzbGFuamUgcG9ydWthIGkgZHJ1Z2UgYXBsaWthY2lqZSBrb2plIHNlIG9zbGFuamFqdSBuYSBzaW5rcm9uaXphY2lqdSBtb8W+ZGEgc2UgbmXEh2UgYcW+dXJpcmF0aSBha28gaWggbmUgb3R2b3JpdGUuXG5cblXFoXRlZGEgYmF0ZXJpamUgaXNrbGp1xI11amUgc2UgYXV0b21hdHNraSBkb2sgc2UgdXJlxJFhaiBwdW5pLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX3RpdGxlIiBtc2dpZD0iNzQ5Mzk4OTcyMjYxMDAwODcwMCI+IlZhxb5ub3N0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiJCbG9raXJhbm86IG5pa2FkIG5lIHByaWthenVqIHRlIG9iYXZpamVzdGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4iTmlza286IHRpaG8gcHJpa2HFvmkgbmEgZG51IHBvcGlzYSBvYmF2aWplc3RpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiJVb2JpxI1hamVubzogcHJpa2F6dWogdGUgb2JhdmlqZXN0aSB0aWhvIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiJWaXNva286IHByaWthxb5pIG5hIHZyaHUgcG9waXNhIG9iYXZpamVzdGkgaSBlbWl0aXJhaiB6dnXEjW5pIHNpZ25hbCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiJIaXRubzogcHJpa2HFvmkgbmEgemFzbG9udSBpIGVtaXRpcmFqIHp2dcSNbmkgc2lnbmFsIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+JTEkZCBtaW51dHUgKGRvIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJmZXciPiUxJGQgbWludXRlIChkbyA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWh1L3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1odS9zdHJpbmdzLnhtbAppbmRleCAwZjNiODQ5Li4zMTc2YzY1IDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWh1L3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtaHUvc3RyaW5ncy54bWwKQEAgLTIyMyw2ICsyMjMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiJaw6Fyb2zDoXMgbW9zdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJUYXJ0YWxvbSBlbHJlanR2ZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+IkJpenRvbnPDoWdpIMO8emVtbcOzZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+IkFuZHJvaWQgcmVuZHN6ZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+IlN6ZW3DqWx5ZXMiPC9zdHJpbmc+CkBAIC0zNTMsOCArMzU0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiJMZWhldMWRdsOpIHRlc3ppIGF6IGFsa2FsbWF6w6FzIHN6w6Ftw6FyYSwgaG9neSBhIGbDqW55a8OpcGV6xZFnw6lwcGVsIGZvdMOza2F0IMOpcyB2aWRlw7NrYXQga8Opc3rDrXRzZW4uIEF6IGVuZ2Vkw6lsbHllbCByZW5kZWxrZXrFkSBhbGthbG1hesOhcyBiw6FybWlrb3IsIGF6IMOWbiBqw7N2w6FoYWd5w6FzYSBuw6lsa8O8bCBoYXN6bsOhbGhhdGphIGEgZsOpbnlrw6lwZXrFkWfDqXBldC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4icmV6Z8OpcyBzemFiw6FseW96w6FzYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4iTGVoZXTFkXbDqSB0ZXN6aSBheiBhbGthbG1hesOhcyBzesOhbcOhcmEgYSByZXpnw6lzIHZlesOpcmzDqXPDqXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mbGFzaGxpZ2h0IiBtc2dpZD0iMjE1NTkyMDgxMDEyMTk4NDIxNSI+InZha3UgdmV6w6lybMOpc2UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+IkxlaGV0xZF2w6kgdGVzemkgYXogYWxrYWxtYXrDoXMgc3rDoW3DoXJhIGEgdmFrdSB2ZXrDqXJsw6lzw6l0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+InRlbGVmb25zesOhbW9rIGvDtnp2ZXRsZW4gaMOtdsOhc2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4iTGVoZXTFkXbDqSB0ZXN6aSBheiBhbGthbG1hesOhcyBzesOhbcOhcmEsIGhvZ3kgYXogw5ZuIGrDs3bDoWhhZ3nDoXNhIG7DqWxrw7xsIGjDrXZqb24gZmVsIHRlbGVmb25zesOhbW9rYXQuIEVubmVrIGVyZWRtw6lueWVrw6ludCB2w6FyYXRsYW4gdGVyaGVsw6lzZWtrZWwgdmFneSB0ZWxlZm9uaMOtdsOhc29ra2FsIHRhbMOhbGtvemhhdC4gVmVneWUgZmlneWVsZW1iZSwgaG9neSBleiBuZW0gdGVzemkgbGVoZXTFkXbDqSBzZWfDqWx5aMOtdsOzIHN6w6Ftb2sgaMOtdsOhc8OhdCBheiBhbGthbG1hesOhcyBzesOhbcOhcmEuIEEgcm9zc3ppbmR1bGF0w7ogYWxrYWxtYXrDoXNvayBheiDDlm4gasOzdsOhaGFnecOhc2EgbsOpbGvDvGwga2V6ZGVtw6lueWV6aGV0bmVrIGjDrXbDoXNva2F0LCDDrWd5IGvDtmx0c8OpZ2VrIG1lcsO8bGhldG5layBmZWwuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiJob3p6w6Fmw6lyw6lzIGF6IElNUy1ow612w6Fzc3pvbGfDoWx0YXTDoXNob3oiPC9zdHJpbmc+CkBAIC04NTgsMTAgKzg1NywxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+IktpdsOhZ8OhcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4iTcOhc29sw6FzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzdGUiIG1zZ2lkPSI1NjI5ODgwODM2ODA1MDM2NDMzIj4iQmVpbGxlc3p0w6lzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiJCZWlsbGVzenTDqXMgZWd5c3plcsWxIHN6w7Z2ZWdrw6ludCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4iQ3NlcmUuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4iVMO2cmzDqXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IlVSTCBtw6Fzb2zDoXNhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4iU3rDtnZlZyBraWplbMO2bMOpc2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmRvIiBtc2dpZD0iNzkwNTc4ODUwMjQ5MTc0MjMyOCI+IlZpc3N6YXZvbsOhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlZG8iIG1zZ2lkPSI3NzU5NDY0ODc2NTY2ODAzODg4Ij4iw5pqcmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4iU3rDtnZlZyBraWplbMO2bMOpc2UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4iSG96esOhYWTDoXMgYSBzesOzdMOhcmhveiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4iVMO2cmzDqXMiPC9zdHJpbmc+CkBAIC0xMTA3LDYgKzExMDksNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4iSMOhdHTDqXJrw6lwIG1lZ3bDoWx0b3p0YXTDoXNhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4iw4lydGVzw610w6lzZmlneWVsxZEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+IkZlbHTDqXRlbGJpenRvc8OtdMOzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2Fzc2lzdGFudF9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iOTA5NDU2MDU1NTY5MTAyOTUyIj4iw4lydGVzw610w6lzaSBzZWfDqWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IlZQTiBha3RpdsOhbHZhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4iQSh6KSA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4gYWt0aXbDoWx0YSBhIFZQTi10Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4iw4lyaW50c2UgbWVnIGEgaMOhbMOzemF0IGtlemVsw6lzw6loZXouIjwvc3RyaW5nPgpAQCAtMTQ0MCwxMiArMTQ0Myw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+IkZyaXNzw610ZXR0ZSBhIHJlbmRzemVyZ2F6ZGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX2RlbGV0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iNzY1MDU3NzM4NzQ5MzEwMTM1MyI+IkEgcmVuZHN6ZXJnYXpkYSB0w7Zyw7ZsdGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTk2MDQzMTEyMzgxNjI1MzAzNCI+IkF6IGFra3VtdWzDoXRvcmlkxZEgbsO2dmVsw6lzZSDDqXJkZWvDqWJlbiBheiBlbmVyZ2lhdGFrYXLDqWtvcyBtw7NkIGNzw7Zra2VudGkgYXogZXN6a8O2eiB0ZWxqZXPDrXRtw6luecOpdCwgw6lzIGtvcmzDoXRvenphIGEgcmV6Z8Opc3QsIGEgaGVseXN6b2xnw6FsdGF0w6Fzb2thdCwgdmFsYW1pbnQgYSBsZWd0w7ZiYiBow6F0dMOpcmFkYXRvdCBpcy4gRWzFkWZvcmR1bGhhdCwgaG9neSBhem9rIGF6IGUtbWFpbC0sIMO8emVuZXRrw7xsZMWRIMOpcyBlZ3nDqWIgYWxrYWxtYXrDoXNvaywgYW1lbHllayBzemlua3Jvbml6w6Fsw6Fzw6FyYSBzesOhbcOtdCwgY3NhayBha2tvciBmcmlzc8OtdGVuZWssIGhhIG1lZ255aXRqYSBhem9rYXQuXG5cbkF6IGVuZXJnaWF0YWthcsOpa29zIG3Ds2QgYXV0b21hdGlrdXNhbiBraWthcGNzb2wsIGhhIGVzemvDtnplIHTDtmx0xZFuIHZhbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV90aXRsZSIgbXNnaWQ9Ijc0OTM5ODk3MjI2MTAwMDg3MDAiPiJGb250b3Nzw6FnIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiJMZXRpbHR2YTogc29oYSBuZW0gamVsZW5uZWsgbWVnIGV6ZWsgYXogw6lydGVzw610w6lzZWsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4iQWxhY3Nvbnk6IGF6IMOpcnRlc8OtdMOpc2VrIGF6IMOpcnRlc8OtdMOpc2kgbGlzdGEgdsOpZ8OpbiBqZWxlbm5layBtZWcgaGFuZ2plbHrDqXMgbsOpbGvDvGwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNzk5MTE1NzY5NzYwOTU3NTI3MSI+Ik5vcm3DoWw6IGhhbmcgbsOpbGvDvGwgamVsZW5uZWsgbWVnIGV6ZWsgYXogw6lydGVzw610w6lzZWsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzE1MjIzODYzNzczNzIxNTY1NCI+Ik1hZ2FzOiBheiDDqXJ0ZXPDrXTDqXNlayBheiDDqXJ0ZXPDrXTDqXNpIGxpc3RhIGVsZWrDqW4gamVsZW5uZWsgbWVnIGhhbmdqZWx6w6lzc2VsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+IlPDvHJnxZFzOiBheiDDqXJ0ZXPDrXTDqXNlayBmZWx1Z3JhbmFrIGEga8OpcGVybnnFkW4gaGFuZ2plbHrDqXNzZWwiPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0iemVuX21vZGVfZHVyYXRpb25fbWludXRlc19zdW1tYXJ5IiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNDM2Nzg3NzQwODA3MjAwMDg0OCI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPiUxJGQgcGVyY2VuIMOhdCAoZWRkaWc6IDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPkVneSBwZXJjZW4gw6F0IChlZGRpZzogPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMCI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1oeS1yQU0vc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWh5LXJBTS9zdHJpbmdzLnhtbAppbmRleCBkYzY3ZTJkLi5kNzJlZThkIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWh5LXJBTS9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWh5LXJBTS9zdHJpbmdzLnhtbApAQCAtMjIzLDYgKzIyMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2tkb3duIiBtc2dpZD0iODc1MTU0MjUxNDcyNDMzMjg3MyI+ItS/1bjVstW61aXVrCDVsNWr1bTVoSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLUstW41b7VodW21aTVodWv1bjWgtWp1bXVuNaC1bbVqCDVqdWh1oTWgdW+1aHVriDVpyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+ItSx1bbVvtW/1aHVttWjINW81aXVqtWr1bQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiJBbmRyb2lkINWw1aHVtNWh1a/VodaA1aMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+ItSx1bbVsdW21aHVr9Wh1bYiPC9zdHJpbmc+CkBAIC0zNTMsOCArMzU0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiLUudW41oLVtdWsINWnINW/1aHVrNWr1b0g1bDVodW+1aXVrNW+1aHVrtWr1bYg1obVuNW/1bjVrdaB1avVr9W41b4g1azVuNaC1b3VodW21a/VodaA1aXVrCDWhyDVv9Wl1b3VodW21a/VodaA1aXVrDog1LHVtdW9INWp1bjWgtW11azVv9W+1bjWgtWp1bXVuNaC1bbVqCDVsNW21aHWgNWh1b7VuNaA1bjWgtWp1bXVuNaC1bYg1acg1b/VodWs1avVvSDVsNWh1b7VpdWs1b7VodWu1avVtiDWhdWj1b/VodWj1bjWgNWu1aXVrCDWhtW41b/VuNWt1oHVq9Wv1agg1oHVodW21a/VodaB1aHVriDVqtWh1bTVodW21aHVr2Ag1aHVvNWh1bbWgSDVsdWl1oAg1bDVodW91b/VodW/1bTVodW2OiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiLVr9Wh1bzVodW+1aHWgNWl1awg1anWgNWp1bzVuNaC1bTVqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4i1LnVuNaC1bXVrCDVpyDVv9Wh1azVq9W9INWw1aHVvtWl1azVvtWh1a7Vq9W2INWv1aHVvNWh1b7VodaA1aXVrCDVqdaA1anVvNW41oHVqDoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4i1a/VodW81aHVvtWh1oDVpdWsINWs1aHVutW/1aXWgNWoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiLUudW41oLVtdWsINWnINW/1aHVrNWr1b0g1bDVodW+1aXVrNW+1aHVrtWr1bYg1a/VodW81aHVvtWh1oDVpdWsINWs1aHVutW/1aXWgNWoOiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+ItW41oLVstWy1aHVr9Wr1bjWgNWl1bYg1abVodW21aPVpdWsINWw1aXVvNWh1a3VuNW91aHVsNWh1bTVodaA1bbVpdaA1avVtiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQaG9uZSIgbXNnaWQ9IjM3NDA3OTc1NzYxMTM3NjA4MjciPiLUudW41oLVtdWsINWnINW/1aHVrNWr1b0g1bDVodW+1aXVrNW+1aHVrtWr1bYg1abVodW21aPVpdWsINWw1aXVvNWh1a3VuNW91aHVsNWh1bTVodaA1bbVpdaA1avVtiDVodW81aHVttaBINWx1aXWgCDVtNWr1bvVodW01b/VuNaC1anVtdWh1bY6INWN1aEg1a/VodaA1bjVsiDVpyDVsNWh1bbVo9Wl1oHVttWl1awg1aHVttWv1aHVttWt1aHVv9Wl1b3VpdWs1asg1aPVodW21bHVuNaC1bTVttWl1oDVqyDVr9Wh1bQg1abVodW21aPVpdaA1as6INWG1a/VodW/1asg1bjWgtW21aXWgdWl1oQsINW41oAg1b3VoSDVqdW41oLVtdWsINW51asg1b/VodWs1avVvSDVsNWh1b7VpdWs1b7VodWu1avVtiDVptWh1bbVo9Wl1awg1aHWgNW/1aHVr9Wh1oDVoyDVq9aA1aHVvtWr1bPVodWv1bbVpdaA1asg1bDVodW01aHWgNW21aXWgNWr1bY6INWO1bbVodW91aHWgNWh1oAg1bDVodW+1aXVrNW+1aHVrtW21aXWgNWoINWv1aHWgNW41bIg1aXVtsKg1bHVpdaAINWw1aHVt9W+1avWgSDVptWh1bbVo9Wl1oAg1a/VodW/1aHWgNWl1axgINWh1bzVodW21oEg1bHVpdaAINWw1aHVvdW/1aHVv9W01aHVtjoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ltc0NhbGxTZXJ2aWNlIiBtc2dpZD0iMzU3NDk0Mzg0NzE4MTc5MzkxOCI+ItaF1aPVv9W+1aXVrCBJTVMg1abVodW21aPVpdaA1asg1a7VodW81aHVtdW41oLVqdW11bjWgtW21avWgSI8L3N0cmluZz4KQEAgLTg1OCwxMCArODU3LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJjdXQiIG1zZ2lkPSIzMDkyNTY5NDA4NDM4NjI2MjYxIj4i1L/Vv9aA1aXVrCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4i1YrVodW/1bPVpdW21aXVrCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+ItWP1aXVstWh1aTWgNWl1awiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXN0ZV9hc19wbGFpbl90ZXh0IiBtc2dpZD0iNTQyNzc5Mjc0MTkwODAxMDY3NSI+ItWP1aXVstWh1aTWgNWl1awg1bjWgNW61aXVvSDVvdW41b7VuNaA1aHVr9Wh1bYg1b/VpdaE1b3VvyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4i1ZPVuNWt1aHWgNWr1bbVpdWsLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+ItWL1bbVu9Wl1awiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+ItWK1aHVv9Wz1aXVttWl1awgVVJMLdWoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4i1LjVttW/1oDVpdWsINW/1aXWhNW91b8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmRvIiBtc2dpZD0iNzkwNTc4ODUwMjQ5MTc0MjMyOCI+ItWA1aXVv9Wh1oDVr9Wl1awiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+ItS/1oDVr9W21aXVrCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiLVj9Wl1oTVvdW/1asg1ajVttW/1oDVuNaC1anVtdW41oLVtiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiLUsdW+1aXVrNWh1oHVttWl1awg1aLVodW81aHWgNWh1bbVuNaC1bQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+ItWL1bbVu9Wl1awiPC9zdHJpbmc+CkBAIC0xMTA3LDYgKzExMDksNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4i1ZPVuNWt1aXVrCDVutWh1b3Vv9Wh1bzVqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+ItS+1aHVttW41oLWgdW01aHVtiDVuNaC1bbVr9W21aTVq9aAIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiLVitWh1bXVtNWh1bbVttWl1oDVqyDVtNWh1b/VodWv1aHWgNWh1oAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiLUvtWh1bbVuNaC1oHVuNaC1bTVttWl1oDVqyDWhdWj1bbVodWv1aHVtiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iVlBOLdWoINWh1a/Vv9Wr1b7VodaB1b7VodWuINWnIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4iVlBOLdW2INWh1a/Vv9Wr1b7VodaB1b7VodWuINWnIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPi3VqyDVr9W41bLVtNWr1oEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiLVgNW61aXWhGDCoNaB1aHVttaB1asg1a/VodW81aHVvtWh1oDVtNWh1bYg1bDVodW01aHWgDoiPC9zdHJpbmc+CkBAIC0xNDQwLDEyICsxNDQzLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4i1LHVpNW01avVttWr1b3Vv9aA1aHVv9W41oDVqCDVqdWh1oDVtNWh1oHWgNWl1awg1acg1aHVtdW2Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiLUsdWk1bTVq9W21avVvdW/1oDVodW/1bjWgNWoINW71bbVu9Wl1awg1acg1aHVtdW2Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiLVhNWh1oDVv9Wv1bjWgdWrINWh1bfVrdWh1b/VodW21oTVqyDVqtWh1bTVr9Wl1b/VqCDVpdaA1a/VodaA1aHWgdW21aXVrNW41oIg1bbVutWh1b/VodWv1bjVviwg1bTVodaA1b/Vr9W41oHVqyDVp9W21aXWgNWj1avVodW11asg1a3VttWh1bXVtNWh1bYg1aPVuNaA1a7VodW81bjWgtW11anVqCDVvdWh1bDVtNWh1bbVodaD1aHVr9W41oLVtCDVpyDVvdWh1oDWhNWrINWh1bfVrdWh1b/VodW21oTVqCwg1anWgNWp1bzVuNaB1agsINW/1aXVstWh1aTWgNW41oLVqdW11aHVtiDVrtWh1bzVodW11bjWgtWp1bXVuNaC1bbVttWl1oDVqCDWhyDVsNWl1b/VttWh1bfVpdaA1b/VuNaC1bQg1aHVt9Wt1aHVv9W41bIg1bfVodW/INWj1bjWgNWu1ajVttWp1aHWgdW21aXWgDog1LfVrNaD1bjVvdW/1agsINWw1aHVstW41oDVpNWh1aPWgNW41oLVqdW11bjWgtW21bbVpdaA1asg1oPVuNWt1aHVttWh1a/VuNaC1bTVqCDWhyDVv9W+1bXVodWs1bbVpdaA1asg1bDVodW01aHVqtWh1bTVpdaB1bjWgtW01avWgSDVr9Wh1a3VvtWh1a4g1aHVtdWsINWw1aHVvtWl1azVvtWh1a7VttWl1oDVqCDVr9Wh1oDVuNWyINWl1bYg1bnVqdWh1oDVtNWh1oHVvtWl1awsINWl1anVpSDVpNW41oLWhCDVpNaA1aHVttaEINW51aPVuNaA1a7VodaA1a/VpdaEOlxuXG7UtdaA1aIg1bHVpdaAINW91aHWgNaE1agg1azVq9aB1oTVodW+1bjWgNW+1bjWgtW0INWnLCDVtNWh1oDVv9Wv1bjWgdWrINWn1bbVpdaA1aPVq9Wh1bXVqyDVrdW21aHVtdW01aHVtiDVo9W41oDVrtWh1bzVuNaC1bXVqdW2INWr1bbWhNW21aHVt9Wt1aHVv9W41oDVpdW2INWh1bbVu9Wh1b/VvtW41oLVtCDVpzoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV90aXRsZSIgbXNnaWQ9Ijc0OTM5ODk3MjI2MTAwMDg3MDAiPiLUv9Wh1oDWh9W41oDVuNaC1anVtdW41oLVtiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSI3MTE4ODI2OTAwNzY3MDQ3MTI1Ij4i1LHWgNWj1aXVrNWh1oPVodWv1b7VodWuINWnLiDUtdaA1aLVpdaEINW51oHVuNaC1oHVodWk1oDVpdWsINWh1bXVvSDVrtWh1bbVuNaC1oHVuNaC1bTVttWl1oDVqCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjY0NDc2NDA0NDk5MTg0MjcxODciPiLVkdWh1a7WgC4g1ZHVuNaC1oHVodWk1oDVpdWsINWu1aHVttW41oLWgdW41oLVtNW21aXWgNWrINaB1aHVttWv1asg1bbVpdaA1oTWh9W41oLVtCDVodW81aHVttaBINWx1aHVtdW21aHVtdWr1bYg1aHVptWk1aHVttW31aHVttWrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiLVhtW41oDVtNWh1awuINWR1bjWgtaB1aHVpNaA1aXVrCDVodW11b0g1a7VodW21bjWgtaB1bjWgtW01bbVpdaA1bYg1aHVvNWh1bbWgSDVsdWh1bXVttWh1bXVq9W2INWh1abVpNWh1bbVt9Wh1bbVqyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMTUyMjM4NjM3NzM3MjE1NjU0Ij4i1LLVodaA1bHWgC4g1ZHVuNaC1oHVodWk1oDVpdWsINWu1aHVttW41oLWgdW41oLVtNW21aXWgNWrINaB1aHVttWv1asg1b7VpdaA1ofVuNaC1bQg1ocg1bDVttW51aXWgdW21aXVrCDVsdWh1bXVttWh1bXVq9W2INWh1abVpNWh1bbVt9Wh1bYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSIxMTUzNjkzMDgwNDY3OTA0NDc0Ij4i1YDWgNWh1b/VodW6LiDVkdW41oLWgdWh1aTWgNWl1awg1afVr9aA1aHVttWr1bYg1ocg1bDVttW51aXWgdW21aXVrCDVsdWh1bXVttWh1bXVq9W2INWh1abVpNWh1bbVt9Wh1bYiPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0iemVuX21vZGVfZHVyYXRpb25fbWludXRlc19zdW1tYXJ5IiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNDM2Nzg3NzQwODA3MjAwMDg0OCI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj4lMSRkINaA1bjVutWlICjVtNWr1bbVudaHIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+JTEkZCDWgNW41brVpSAo1bTVq9W21bnWhyA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWluL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1pbi9zdHJpbmdzLnhtbAppbmRleCBkMTMxNjhhLi4wMjRlZWE0IDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWluL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtaW4vc3RyaW5ncy54bWwKQEAgLTIyMyw2ICsyMjMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiJLdW5jaSBzZWthcmFuZyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJLb250ZW4gdGVyc2VtYnVueWkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiJNb2RlIGFtYW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiJTaXN0ZW0gQW5kcm9pZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4iUHJpYmFkaSI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+Ik1lbXVuZ2tpbmthbiBhcGxpa2FzaSBtZW5nYW1iaWwgZ2FtYmFyIGRhbiB2aWRlbyBkZW5nYW4ga2FtZXJhLiBJemluIGluaSBtZW11bmdraW5rYW4gYXBsaWthc2kgbWVuZ2d1bmFrYW4ga2FtZXJhIGthcGFuIHNhamEgdGFucGEga29uZmlybWFzaSBBbmRhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiJrb250cm9sIGdldGFyYW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+Ik1lbmdpemlua2FuIGFwbGlrYXNpIHVudHVrIG1lbmdlbmRhbGlrYW4gdmlicmF0b3IuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mbGFzaGxpZ2h0IiBtc2dpZD0iMjE1NTkyMDgxMDEyMTk4NDIxNSI+Im1lbmdvbnRyb2wgbGFtcHUgc2VudGVyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiJNZW5naXppbmthbiBhcGwgbWVuZ29udHJvbCBsYW1wdSBraWxhdC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiJwYW5nZ2lsIG5vbW9yIHRlbGVwb24gc2VjYXJhIGxhbmdzdW5nIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+Ik1lbXVuZ2tpbmthbiBhcGxpa2FzaSBtZW5naHVidW5naSBub21vciB0ZWxlcG9uIHRhbnBhIGNhbXB1ciB0YW5nYW4gQW5kYS4gSXppbiBpbmkgZGFwYXQgbWVuZ2FraWJhdGthbiBiaWF5YSBhdGF1IHBhbmdnaWxhbiB0YWsgdGVyZHVnYS4gUGVyaGF0aWthbiBiYWh3YSBpemluIGluaSB0aWRhayBtZW11bmdraW5rYW4gYXBsaWthc2kgbWVuZ2h1YnVuZ2kgbm9tb3IgZGFydXJhdC4gQXBsaWthc2kgYmVyYmFoYXlhIGRhcGF0IG1lbnllYmFia2FuIEFuZGEgZGlrZW5ha2FuIGJpYXlhIGRlbmdhbiBtZWxha3VrYW4gcGFuZ2dpbGFuIHRhbnBhIGtvbmZpcm1hc2kgQW5kYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ltc0NhbGxTZXJ2aWNlIiBtc2dpZD0iMzU3NDk0Mzg0NzE4MTc5MzkxOCI+ImFrc2VzIGxheWFuYW4gcGFuZ2dpbGFuIElNUyI8L3N0cmluZz4KQEAgLTg1OCwxMCArODU3LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJjdXQiIG1zZ2lkPSIzMDkyNTY5NDA4NDM4NjI2MjYxIj4iUG90b25nIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weSIgbXNnaWQ9IjI2ODE5NDYyMjk1MzM1MTE5ODciPiJTYWxpbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+IlRlbXBlbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4iVGVtcGVsIHNlYmFnYWkgdGVrcyBiaWFzYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4iR2FudGkuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4iSGFwdXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IlNhbGluIFVSTCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+IlBpbGloIHRla3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmRvIiBtc2dpZD0iNzkwNTc4ODUwMjQ5MTc0MjMyOCI+IlVydW5na2FuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiJVbGFuZ2kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4iUGVtaWxpaGFuIHRla3MiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4iVGFtYmFoa2FuIGtlIGthbXVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiJIYXB1cyI8L3N0cmluZz4KQEAgLTExMDcsNiArMTEwOSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiJVYmFoIHdhbGxwYXBlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+IlBlbmRlbmdhciBwZW1iZXJpdGFodWFuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiJQZW55ZWRpYSBrZXRlbnR1YW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiJBc2lzdGVuIG5vdGlmaWthc2kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IlZQTiBkaWFrdGlma2FuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4iVlBOIGRpYWt0aWZrYW4gb2xlaCA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiJTZW50dWggdW50dWsgbWVuZ2Vsb2xhIGphcmluZ2FuLiI8L3N0cmluZz4KQEAgLTE0NDAsMTIgKzE0NDMsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV91cGRhdGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijg4NTY2MzEzMjI0NDAxODcwNzEiPiJEaXBlcmJhcnVpIG9sZWggYWRtaW5pc3RyYXRvciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4iRGloYXB1cyBvbGVoIGFkbWluaXN0cmF0b3IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTk2MDQzMTEyMzgxNjI1MzAzNCI+IlVudHVrIG1lbWJhbnR1IG1lbmluZ2thdGthbiBtYXNhIHBha2FpIGJhdGVyYWksIHBlbmdoZW1hdCBiYXRlcmFpIG1lbmd1cmFuZ2kga2luZXJqYSBwZXJhbmdrYXQgZGFuIG1lbWJhdGFzaSBnZXRhcmFuLCBsYXlhbmFuIGxva2FzaSwgZGFuIGtlYmFueWFrYW4gZGF0YSBsYXRhciBiZWxha2FuZy4gRW1haWwsIHBlcnBlc2FuYW4sIGRhbiBhcGxpa2FzaSBsYWluIHlhbmcgbWVuZ2FuZGFsa2FuIHNpbmtyb25pc2FzaSBtdW5na2luIHRpZGFrIGRpcGVyYmFydWkga2VjdWFsaSBqaWthIGRpYnVrYS5cblxuUGVuZ2hlbWF0IGJhdGVyYWkgb3RvbWF0aXMgbm9uYWt0aWYgamlrYSBwZXJhbmdrYXQgZGlpc2kgZGF5YW55YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV90aXRsZSIgbXNnaWQ9Ijc0OTM5ODk3MjI2MTAwMDg3MDAiPiJUaW5na2F0IEtlcGVudGluZ2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiJEaWJsb2tpcjogSmFuZ2FuIHBlcm5haCBtZW5hbXBpbGthbiBub3RpZmlrYXNpIGluaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjY0NDc2NDA0NDk5MTg0MjcxODciPiJSZW5kYWg6IE1lbmFtcGlsa2FuIGRpIGJhZ2lhbiBiYXdhaCBkYWZ0YXIgbm90aWZpa2FzaSBzZWNhcmEgZGlhbS1kaWFtIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiJOb3JtYWw6IE1lbmFtcGlsa2FuIG5vdGlmaWthc2kgaW5pIHNlY2FyYSBkaWFtLWRpYW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzE1MjIzODYzNzczNzIxNTY1NCI+IlRpbmdnaTogTWVuYW1waWxrYW4gZGkgYmFnaWFuIGF0YXMgZGFmdGFyIG5vdGlmaWthc2kgZGFuIG1lbWJ1bnlpa2FuIHN1YXJhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+IkRhcnVyYXQ6IE11bmN1bCBkaSBsYXlhciBkYW4gbWVtYnVueWlrYW4gc3VhcmEiPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0iemVuX21vZGVfZHVyYXRpb25fbWludXRlc19zdW1tYXJ5IiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNDM2Nzg3NzQwODA3MjAwMDg0OCI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPlNlbGFtYSAlMSRkIG1lbml0IChoaW5nZ2EgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+U2VsYW1hIHNhdHUgbWVuaXQgKGhpbmdnYSA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8wIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWlzLXJJUy9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtaXMtcklTL3N0cmluZ3MueG1sCmluZGV4IDBjNDIyOTMuLjI0MGM3MTUgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtaXMtcklTL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtaXMtcklTL3N0cmluZ3MueG1sCkBAIC0yMjMsNiArMjIzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9ja2Rvd24iIG1zZ2lkPSI4NzUxNTQyNTE0NzI0MzMyODczIj4iTMOmc2EgbsO6bmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+Ijk5OSsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fY2hpbGRyZW5fY291bnRfYnJhY2tldGVkIiBtc2dpZD0iMTc2OTQyNTQ3MzE2ODM0NzgzOSI+Iig8eGxpZmY6ZyBpZD0iTk9USUZJQ0FUSU9OQ09VTlQiPiVkPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4iSW5uaWhhbGQgZmFsacOwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4iw5ZydWdnIHN0aWxsaW5nIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4iQW5kcm9pZCBrZXJmacOwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNlcl9vd25lcl9sYWJlbCIgbXNnaWQ9IjI4MDQzNTE4OTgwMDEwMzg5NTEiPiJQZXJzw7NudWxlZ3QiPC9zdHJpbmc+CkBAIC0zNTMsOCArMzU0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiJMZXlmaXIgZm9ycml0aSBhw7AgdGFrYSBteW5kaXIgb2cgbXluZHNrZWnDsCBtZcOwIG15bmRhdsOpbGlubmkuIMOeZXNzaSBoZWltaWxkIGxleWZpciBmb3JyaXRpbnUgYcOwIG5vdGEgbXluZGF2w6lsaW5hIGh2ZW7DpnIgc2VtIGVyIMOhbiDDvmlubmFyIGhlaW1pbGRhci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4ic3Rqw7NybmEgdGl0cmluZ2kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+IkxleWZpciBmb3JyaXRpIGHDsCBzdGrDs3JuYSB0aXRyYXJhbnVtLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiJzdGrDs3JuYSB2YXNhbGrDs3NpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiJMZXlmaXIgZm9ycml0aSBhw7Agc3Rqw7NybmEgdmFzYWxqw7NzaW51LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+ImhyaW5namEgYmVpbnQgw60gc8OtbWFuw7ptZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4iTGV5ZmlyIGZvcnJpdGkgYcOwIGhyaW5namEgw60gc8OtbWFuw7ptZXIgw6FuIMOtaGx1dHVuYXIgbm90YW5kYS4gw55ldHRhIGdldHVyIGhhZnQgw60gZsO2ciBtZcOwIHPDqXIgw7N1bWJlw7BpbiBnasO2bGQgb2cgc8OtbXTDtmwuIEF0aHVnYcOwdSBhw7Agw75ldHRhIGxleWZpciBmb3JyaXRpbnUgZWtraSBhw7AgaHJpbmdqYSDDrSBuZXnDsGFybsO6bWVyLiBTcGlsbGlmb3JyaXQgZ2V0YSBzdG9mbmHDsCB0aWwga29zdG5hw7BhciBmeXJpciDDvmlnIG1lw7Agw752w60gYcOwIGhyaW5namEgc8OtbXTDtmwgw6FuIMO+aW5uYXIgaGVpbWlsZGFyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiIG1zZ2lkPSIzNTc0OTQzODQ3MTgxNzkzOTE4Ij4iZsOhIGHDsGdhbmcgYcOwIElNUy1zw61tdGFsc8O+asOzbnVzdHUiPC9zdHJpbmc+CkBAIC04NTgsMTAgKzg1NywxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+IktsaXBwYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4iQWZyaXRhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzdGUiIG1zZ2lkPSI1NjI5ODgwODM2ODA1MDM2NDMzIj4iTMOtbWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXN0ZV9hc19wbGFpbl90ZXh0IiBtc2dpZD0iNTQyNzc5Mjc0MTkwODAxMDY3NSI+IkzDrW1hIHNlbSDDs3NuacOwaW5uIHRleHRhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiJTa2lwdGEgw7p04oCmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+IkV5w7BhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiJBZnJpdGEgdmVmc2zDs8OwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4iVmVsamEgdGV4dGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmRvIiBtc2dpZD0iNzkwNTc4ODUwMjQ5MTc0MjMyOCI+IkFmdHVya2FsbGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+IkVuZHVyZ2VyYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiJUZXh0YXZhbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiJCw6Z0YSB2acOwIG9yw7BhYsOzayI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4iRXnDsGEiPC9zdHJpbmc+CkBAIC0xMTA3LDYgKzExMDksNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4iU2tpcHRhIHVtIHZlZ2dmw7PDsHVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4iVGlsa3lubmluZ2FobHVzdHVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiJTa2lseXLDsGF2ZWl0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9hc3Npc3RhbnRfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjkwOTQ1NjA1NTU2OTEwMjk1MiI+IlRpbGt5bm5pbmdhYcOwc3Rvw7AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IlZQTiB2aXJramHDsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+IlZQTiBlciB2aXJramHDsCBtZcOwIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0IiBtc2dpZD0iMzAxMTMwNjYwNzEyNjQ1MDMyMiI+IlNuZXJ0dSB0aWwgYcOwIGhhZmEgdW1zasOzbiBtZcOwIG5ldGludS4iPC9zdHJpbmc+CkBAIC0xNDQwLDEyICsxNDQzLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4iVXBwZsOmcnQgYWYga2VyZmlzc3Rqw7NyYW51bSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4iRXl0dCBhZiBrZXJmaXNzdGrDs3JhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiJUaWwgYcOwIGF1a2EgZW5kaW5ndSByYWZobMO2w7B1bm5hciBtdW4gb3JrdXNwYXJuYcOwdXIgZHJhZ2Egw7pyIGFma8O2c3R1bSB0w6ZraXNpbnMgb2cgdGFrbWFya2EgdGl0cmluZywgc3Rhw7BzZXRuaW5nYXLDvmrDs251c3R1IG9nIG1lZ25pw7AgYWYgYmFrZ3J1bm5zZ8O2Z251bS4gRWtraSBlciB2w61zdCBhw7AgdMO2bHZ1cMOzc3R1ciwgc2tpbGFib8OwIG9nIMO2bm51ciBmb3JyaXQgc2VtIHJlacOwYSBzaWcgw6Egc2Ftc3RpbGxpbmd1IHVwcGbDpnJpc3QgbmVtYSDDvsO6IG9wbmlyIMO+YXUuXG5cblNqw6FsZmtyYWZhIGVyIHNsw7Zra3Qgw6Egb3JrdXNwYXJuYcOwaSDDvmVnYXIgdMOma2nDsCBlciDDrSBobGXDsHNsdS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV90aXRsZSIgbXNnaWQ9Ijc0OTM5ODk3MjI2MTAwMDg3MDAiPiJNaWtpbHbDpmdpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiLDmnRpbG9rYcOwYXI6IEFsZHJlaSBzw71uYSDDvmVzc2FyIHRpbGt5bm5pbmdhciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjY0NDc2NDA0NDk5MTg0MjcxODciPiJMw6l0dHbDpmdhcjogU8O9bmEgbmXDsHN0IMOhIHRpbGt5bm5pbmdhbGlzdGFudW0gw6FuIGhsasOzw7BzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiJWZW5qdWxlZ2FyOiBTw71uYSDDvmVzc2FyIHRpbGt5bm5pbmdhciDDoW4gaGxqw7PDsHMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzE1MjIzODYzNzczNzIxNTY1NCI+Ik1pa2lsdsOmZ2FyOiBTw71uYSBlZnN0IMOhIHRpbGt5bm5pbmdhbGlzdGFudW0gb2cgc3BpbGEgaGxqw7PDsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiLDgXLDrcOwYW5kaTogQmlydGEgw6Egc2tqw6FudW0gb2cgc3BpbGEgaGxqw7PDsCI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPsONICUxJGQgbcOtbsO6dHUgKHRpbCA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPsONICUxJGQgbcOtbsO6dHVyICh0aWwgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1pdC9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtaXQvc3RyaW5ncy54bWwKaW5kZXggNTgxNzZjZS4uZWNlNTAzZCAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1pdC9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWl0L3N0cmluZ3MueG1sCkBAIC0yMjMsNiArMjIzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9ja2Rvd24iIG1zZ2lkPSI4NzUxNTQyNTE0NzI0MzMyODczIj4iQmxvY2NhIG9yYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJDb250ZW51dGkgbmFzY29zdGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiJNb2RhbGl0w6AgcHJvdnZpc29yaWEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiJTaXN0ZW1hIEFuZHJvaWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+IlBlcnNvbmFsZSI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IkNvbnNlbnRlIGFsbFwnYXBwbGljYXppb25lIGRpIHNjYXR0YXJlIGZvdG8gZSByaXByZW5kZXJlIHZpZGVvIGNvbiBsYSBmb3RvY2FtZXJhLiBRdWVzdGEgYXV0b3JpenphemlvbmUgY29uc2VudGUgYWxsXCdhcHBsaWNhemlvbmUgZGkgdXRpbGl6emFyZSBsYSBmb3RvY2FtZXJhIGluIHF1YWxzaWFzaSBtb21lbnRvIHNlbnphIGxhIHR1YSBjb25mZXJtYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4iY29udHJvbGxvIHZpYnJhemlvbmUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+IkNvbnNlbnRlIGFsbFwnYXBwbGljYXppb25lIGRpIGNvbnRyb2xsYXJlIGxhIHZpYnJhemlvbmUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mbGFzaGxpZ2h0IiBtc2dpZD0iMjE1NTkyMDgxMDEyMTk4NDIxNSI+ImNvbnRyb2xsbyBmbGFzaCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4iQ29uc2VudGUgYWxsXCdhcHBsaWNhemlvbmUgZGkgY29udHJvbGxhcmUgaWwgZmxhc2guIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4iY2hpYW1hdGEgZGlyZXR0YSBuLiB0ZWxlZm9ubyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQaG9uZSIgbXNnaWQ9IjM3NDA3OTc1NzYxMTM3NjA4MjciPiJDb25zZW50ZSBhbGxcJ2FwcGxpY2F6aW9uZSBkaSBjaGlhbWFyZSBudW1lcmkgZGkgdGVsZWZvbm8gc2VuemEgaWwgdHVvIGludGVydmVudG8uIENpw7IgcHXDsiBjb21wb3J0YXJlIGNoaWFtYXRlIG8gYWRkZWJpdGkgaW1wcmV2aXN0aS4gVGllbmkgcHJlc2VudGUgY2hlIGNpw7Igbm9uIGNvbnNlbnRlIGFsbFwnYXBwbGljYXppb25lIGRpIGNoaWFtYXJlIG51bWVyaSBkaSBlbWVyZ2VuemEuIEFwcGxpY2F6aW9uaSBkYW5ub3NlIHBvdHJlYmJlcm8gZ2VuZXJhcmUgZGVpIGNvc3RpIGVmZmV0dHVhbmRvIGNoaWFtYXRlIHNlbnphIGxhIHR1YSBjb25mZXJtYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ltc0NhbGxTZXJ2aWNlIiBtc2dpZD0iMzU3NDk0Mzg0NzE4MTc5MzkxOCI+IkFjY2Vzc28gYWwgc2Vydml6aW8gZGkgY2hpYW1hdGEgSU1TIjwvc3RyaW5nPgpAQCAtODU4LDEwICs4NTcsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiJUYWdsaWEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+IkNvcGlhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzdGUiIG1zZ2lkPSI1NjI5ODgwODM2ODA1MDM2NDMzIj4iSW5jb2xsYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4iSW5jb2xsYSBjb21lIHRlc3RvIG5vcm1hbGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXBsYWNlIiBtc2dpZD0iNTc4MTY4NjA1OTA2MzE0ODkzMCI+IlNvc3RpdHVpc2NpLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+IkVsaW1pbmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IkNvcGlhIFVSTCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+IlNlbGV6aW9uYSB0ZXN0byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVuZG8iIG1zZ2lkPSI3OTA1Nzg4NTAyNDkxNzQyMzI4Ij4iQW5udWxsYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlZG8iIG1zZ2lkPSI3NzU5NDY0ODc2NTY2ODAzODg4Ij4iUmlwZXRpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGV4dFNlbGVjdGlvbkNBQlRpdGxlIiBtc2dpZD0iNTIzNjg1MDM5NDM3MDgyMDM1NyI+IlNlbGV6aW9uZSB0ZXN0byI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiJBZ2dpdW5naSBhbCBkaXppb25hcmlvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiJFbGltaW5hIjwvc3RyaW5nPgpAQCAtMTEwNyw2ICsxMTA5LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+IkNhbWJpYSBzZm9uZG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiJMaXN0ZW5lciBkaSBub3RpZmljYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbmRpdGlvbl9wcm92aWRlcl9zZXJ2aWNlX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMzIxMzQzMzUyOTA2NTI0NTY0Ij4iUHJvdmlkZXIgY29uZGl6aW9uaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9hc3Npc3RhbnRfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjkwOTQ1NjA1NTU2OTEwMjk1MiI+IkFzc2lzdGVudGUgbm90aWZpY2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IlZQTiBhdHRpdmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiJWUE4gYXR0aXZhdGEgZGEgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4iVG9jY2EgcGVyIGdlc3RpcmUgbGEgcmV0ZS4iPC9zdHJpbmc+CkBAIC0xNDQwLDEyICsxNDQzLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4iQWdnaW9ybmF0byBkYWxsXCdhbW1pbmlzdHJhdG9yZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4iRWxpbWluYXRvIGRhbGxcJ2FtbWluaXN0cmF0b3JlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiJQZXIgYXVtZW50YXJlIGxhIGR1cmF0YSBkZWxsYSBiYXR0ZXJpYSwgbGEgZnVuemlvbmUgZGkgcmlzcGFybWlvIGVuZXJnZXRpY28gcmlkdWNlIGxlIHByZXN0YXppb25pIGRlbCBkaXNwb3NpdGl2byBlIGxpbWl0YSB2aWJyYXppb25lLCBzZXJ2aXppIGRpIGxvY2FsaXp6YXppb25lIGUgbGEgbWFnZ2lvciBwYXJ0ZSBkZWkgZGF0aSBpbiBiYWNrZ3JvdW5kLiBBcHAgZGkgZW1haWwsIG1lc3NhZ2dpIGUgYWx0cmUgYXBwIGNoZSBzaSBiYXNhbm8gc3VsbGEgc2luY3Jvbml6emF6aW9uZSBwb3RyZWJiZXJvIGVzc2VyZSBhZ2dpb3JuYXRlIHNvbHRhbnRvIGFsbFwnYXBlcnR1cmEuXG5cbkxhIGZ1bnppb25lIGRpIHJpc3Bhcm1pbyBlbmVyZ2V0aWNvIHZpZW5lIGRpc2F0dGl2YXRhIGF1dG9tYXRpY2FtZW50ZSBxdWFuZG8gaWwgZGlzcG9zaXRpdm8gw6ggaW4gY2FyaWNhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX3RpdGxlIiBtc2dpZD0iNzQ5Mzk4OTcyMjYxMDAwODcwMCI+IkltcG9ydGFuemEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iNzExODgyNjkwMDc2NzA0NzEyNSI+IkJsb2NjYXRvOiBub24gbW9zdHJhcmUgbWFpIHF1ZXN0ZSBub3RpZmljaGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4iQmFzc2E6IG1vc3RyYSBzaWxlbnppb3NhbWVudGUgYWxsYSBmaW5lIGRlbGxcJ2VsZW5jbyBkaSBub3RpZmljaGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNzk5MTE1NzY5NzYwOTU3NTI3MSI+Ik5vcm1hbGU6IG1vc3RyYSBzaWxlbnppb3NhbWVudGUgcXVlc3RlIG5vdGlmaWNoZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMTUyMjM4NjM3NzM3MjE1NjU0Ij4iQWx0YTogbW9zdHJhIGFsbFwnaW5pemlvIGRlbGxcJ2VsZW5jbyBkaSBub3RpZmljaGUgZSByaXByb2R1Y2kgc3Vvbm8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSIxMTUzNjkzMDgwNDY3OTA0NDc0Ij4iVXJnZW50ZTogYXByaSBzdWxsbyBzY2hlcm1vIGUgcmlwcm9kdWNpIHN1b25vIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5QZXIgJTEkZCBtaW51dGkgKGZpbm8gYWxsZSBvcmUgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+UGVyIHVuIG1pbnV0byAoZmlubyBhbGxlIG9yZSA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8wIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CkBAIC0xNDc4LDggKzE0NzUsOCBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5QZXIgJWQgb3JlPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+UGVyIDEgb3JhPC9pdGVtPgogICAgIDwvcGx1cmFscz4KLSAgICA8c3RyaW5nIG5hbWU9Inplbl9tb2RlX3VudGlsIiBtc2dpZD0iNzMzNjMwODQ5MjI4OTg3NTA4OCI+IkZpbm8gYWxsZSBvcmUgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iemVuX21vZGVfYWxhcm0iIG1zZ2lkPSI5MTI4MjA1NzIxMzAxMzMwNzk3Ij4iRmlubyBhbGxlIG9yZSA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRSI+JTEkczwveGxpZmY6Zz4gKHByb3NzaW1hIHN2ZWdsaWEpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iemVuX21vZGVfdW50aWwiIG1zZ2lkPSI3MzM2MzA4NDkyMjg5ODc1MDg4Ij4iRmlubyBhIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Inplbl9tb2RlX2FsYXJtIiBtc2dpZD0iOTEyODIwNTcyMTMwMTMzMDc5NyI+IkZpbm8gYSA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRSI+JTEkczwveGxpZmY6Zz4gKHByb3NzaW1hIHN2ZWdsaWEpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iemVuX21vZGVfZm9yZXZlciIgbXNnaWQ9Ijc0MjAwMTE5MzY3NzAwODY5OTMiPiJGaW5vIGFsbGEgZGlzYXR0aXZhemlvbmUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ6ZW5fbW9kZV9mb3JldmVyX2RuZCIgbXNnaWQ9IjM3OTIxMzI2OTY1NzIxODkwODEiPiJGaW5vIGFsbGEgZGlzYXR0aXZhemlvbmUgZGkgTm9uIGRpc3R1cmJhcmUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ6ZW5fbW9kZV9ydWxlX25hbWVfY29tYmluYXRpb24iIG1zZ2lkPSIxOTExMDk5Mzk5NjgwNzY0NzciPiI8eGxpZmY6ZyBpZD0iRklSU1QiPiUxJHM8L3hsaWZmOmc+Lzx4bGlmZjpnIGlkPSJSRVNUIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtaXcvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWl3L3N0cmluZ3MueG1sCmluZGV4IGIwYzc0MzcuLjE0NGFmYzAgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtaXcvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1pdy9zdHJpbmdzLnhtbApAQCAtMjI1LDYgKzIyNSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2tkb3duIiBtc2dpZD0iODc1MTU0MjUxNDcyNDMzMjg3MyI+Iteg16LXnCDXoteb16nXmdeVIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiI5OTkrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2NoaWxkcmVuX2NvdW50X2JyYWNrZXRlZCIgbXNnaWQ9IjE3Njk0MjU0NzMxNjgzNDc4MzkiPiIoPHhsaWZmOmcgaWQ9Ik5PVElGSUNBVElPTkNPVU5UIj4lZDwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IteU16rXldeb158g157Xldeh16rXqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+Itee16bXkSDXkdeY15XXlyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+IuKAj9ee16LXqNeb16ogQW5kcm9pZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4i15DXmdep15kiPC9zdHJpbmc+CkBAIC0zNTUsOCArMzU2LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNem15zXnSDXqtee15XXoNeV16og15XXodeo15jXldeg15nXnSDXkdeQ157Xptei15XXqiDXlNee16bXnNee15QuINeQ15nXqdeV16gg15bXlCDXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeU16nXqtee16kg15HXntem15zXnteUINeR15vXnCDXoteqINec15zXkCDXkNeZ16nXldeo15ouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl92aWJyYXRlIiBtc2dpZD0iNzY5NjQyNzAyNjA1NzcwNTgzNCI+Itep15zXmdeY15Qg15HXqNeY15giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16nXnNeV15gg15HXqNeY15guIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mbGFzaGxpZ2h0IiBtc2dpZD0iMjE1NTkyMDgxMDEyMTk4NDIxNSI+Itep15zXmdeY15Qg15HXpNeg16EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16nXnNeV15gg15HXpNeg16EuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4i15TXqten16nXqCDXmdep15nXqNeV16og15zXnteh16TXqNeZINeY15zXpNeV158iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXlNeq16fXqdeoINec157Xodek16jXmSDXmNec16TXldefINec15zXkCDXlNeq16LXqNeR15XXqteaLiDXpNei15XXnNeUINeW15Ug16LXqdeV15nXlCDXnNeS16jXldedINec16nXmdeX15XXqiDXkNeVINec15fXmdeV15HXmdedINec15Ag16bXpNeV15nXmdedLiDXqdeZ150g15zXkSDXqdeU15PXkdeoINec15Ag157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXlNeq16fXqdeoINec157Xodek16jXmSDXl9eZ16jXldedLiDXkNek15zXmden16bXmdeV16og15bXk9eV16DXmdeV16og16LXqdeV15nXldeqINec15LXqNeV150g15zXotec15XXmdeV16og16LXnCDXmdeT15kg15HXmdem15XXoiDXqdeZ15fXldeqINec15zXkCDXlNeq16LXqNeR15XXqteaLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiIG1zZ2lkPSIzNTc0OTQzODQ3MTgxNzkzOTE4Ij4i4oCP15LXmdep15Qg15DXnCDXqdeZ16jXldeqINep15nXl9eV16ogSU1TIjwvc3RyaW5nPgpAQCAtODY4LDEwICs4NjcsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiLXl9eq15XXmiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4i15TXoteq16ciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiLXlNeT15HXpyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4i15TXk9eR16cg15vXmNen16HXmCDXpNep15XXmCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4i15TXl9ec16MuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4i157Xl9enIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiLXlNei16rXpyDXm9eq15XXkdeqINeQ16rXqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+IteR15fXqCDXmNen16HXmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVuZG8iIG1zZ2lkPSI3OTA1Nzg4NTAyNDkxNzQyMzI4Ij4i15HXmNecIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiLXkdem16Ig157Xl9eT16kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4i15HXl9eZ16jXqiDXmNen16HXmCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiLXlNeV16HXoyDXnNee15nXnNeV158iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+Itee15fXpyI8L3N0cmluZz4KQEAgLTExMjEsNiArMTEyMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiLXqdeg15Qg15jXpNeYIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4i157XkNeW15nXnyDXnNeU16rXqNeQ15XXqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbmRpdGlvbl9wcm92aWRlcl9zZXJ2aWNlX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMzIxMzQzMzUyOTA2NTI0NTY0Ij4i16HXpNenINeq16DXkNeZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2Fzc2lzdGFudF9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iOTA5NDU2MDU1NTY5MTAyOTUyIj4i15DXodeZ16HXmNeg15gg15TXlNeV15PXoteV16oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IuKAj1ZQTiDXnteV16TXotecIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4i4oCPVlBOINee15XXpNei15wg16LXnCDXmdeT15kgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4i15LXoiDXm9eT15kg15zXoNeU15wg15DXqiDXlNeo16nXqi4iPC9zdHJpbmc+CkBAIC0xNDU4LDEyICsxNDYxLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4i16LXldeT15vXnyDXotecINeZ15PXmSDXnteg15TXnCDXlNee16LXqNeb16og16nXnNeaIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiLXoNee15fXp9eUINei15wg15nXk9eZINee16DXlNecINeU157Xoteo15vXqiDXqdec15oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTk2MDQzMTEyMzgxNjI1MzAzNCI+Iteb15PXmSDXnNei15bXldeoINeR16nXmdek15XXqCDXl9eZ15kg15TXodeV15zXnNeULCDXqteb15XXoNeqINeU15fXmdeh15vXldefINeR16HXldec15zXlCDXntem157Xptee16og15DXqiDXpNei15XXnNeV16og15TXnteb16nXmdeoINeV157XkteR15nXnNeUINeo15jXmCwg16nXmdeo15XXqteZINee15nXp9eV150g15XXkNeqINeo15XXkSDXoNeq15XXoNeZINeU16jXp9eiLiDXkNeZ157XmdeZ15wsINeU16LXkdeo16og15TXldeT16LXldeqINeV15DXpNec15nXp9em15nXldeqINeQ15fXqNeV16og15TXnteh16rXnteb15XXqiDXotecINeh16DXm9eo15XXnyDXotep15XXmdeV16og16nXnNeQINec15TXqtei15PXm9efLCDXkNec15Ag15DXnSDXqtek16rXlyDXkNeV16rXny5cblxu16rXm9eV16DXqiDXlNeX15nXodeb15XXnyDXkdeh15XXnNec15Qg157Xldep15HXqteqINeQ15XXmNeV157XmNeZ16og15vXqdeU157Xm9ep15nXqCDXkdeY16LXmdeg15QuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfdGl0bGUiIG1zZ2lkPSI3NDkzOTg5NzIyNjEwMDA4NzAwIj4i15fXqdeZ15HXldeqIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiLXl9eh15nXnteUOiDXnNei15XXnNedINeQ15wg16rXpteZ15Ig15TXldeT16LXldeqINeQ15zXlCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjY0NDc2NDA0NDk5MTg0MjcxODciPiLXoNee15XXm9eUOiDXlNem15Ig15HXqteX16rXmdeqINeo16nXmdee16og15TXlNeV15PXoteV16og15HXnNeZINec15TXqdee15nXoiDXptec15nXnCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI3OTkxMTU3Njk3NjA5NTc1MjcxIj4i16jXkteZ15zXlDog15TXpteSINeU15XXk9ei15XXqiDXkNec15Qg15HXnNeZINec15TXqdee15nXoiDXptec15nXnCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMTUyMjM4NjM3NzM3MjE1NjU0Ij4i15LXkdeV15TXlDog15TXpteSINeR16jXkNepINeo16nXmdee16og15TXlNeV15PXoteV16og15XXlNep157XoiDXptec15nXnCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiLXk9eX15XXpNeUOiDXlNem15Ig15zXqNeS16Ig16LXnCDXlNee16HXmiDXldeU16nXnteiINem15zXmdecIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9InR3byI+4oCP15zXntep15ogJWQg15PXp9eV16ogKNei15MgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im1hbnkiPuKAj9ec157XqdeaICUxJGQg15PXp9eV16ogKNei15MgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgpAQCAtMTU0Nyw2ICsxNTQ0LDYgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPteR15fXqNeqIDx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRkPC94bGlmZjpnPjwvaXRlbT4KICAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X25vdGlmaWNhdGlvbl90b3BpY19sYWJlbCIgbXNnaWQ9IjIyNzU4NjE0NTc5MTg3MDgyOSI+Itep15XXoNeV16oiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fdG9waWMiIG1zZ2lkPSIzNTcyMjgwNDM5ODgwMDIzMjMzIj4i15DXqteUINee15LXk9eZ16gg15DXqiDXl9ep15nXkdeV16rXnyDXqdecINeU15XXk9ei15XXqiDXkNec15QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3RvcGljIiBtc2dpZD0iMzU3MjI4MDQzOTg4MDAyMzIzMyI+IteQ16rXlCDXnteS15PXmdeoINeQ16og15TXl9ep15nXkdeV16og16nXnCDXlNeU15XXk9ei15XXqiDXlNeQ15zXlC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fcGVyc29uIiBtc2dpZD0iOTE2MDEzMzU5NzI2MjkzODI5NiI+IteU15TXldeT16LXlCDXl9ep15XXkdeUINeR16nXnCDXlNeQ16DXqdeZ150g15TXntei15XXqNeR15nXnS4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtamEvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWphL3N0cmluZ3MueG1sCmluZGV4IGE4MWI4YjQuLmVkZmFiMjIgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtamEvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1qYS9zdHJpbmdzLnhtbApAQCAtMjIzLDYgKzIyMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2tkb3duIiBtc2dpZD0iODc1MTU0MjUxNDcyNDMzMjg3MyI+IuS7iuOBmeOBkOODreODg+OCryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4i77yIPHhsaWZmOmcgaWQ9Ik5PVElGSUNBVElPTkNPVU5UIj4lZDwveGxpZmY6Zz4g5Lu277yJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IuOCs+ODs+ODhuODs+ODhOOBjOmdnuihqOekuiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+IuOCu+ODvOODleODouODvOODiSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+IkFuZHJvaWTjgrfjgrnjg4bjg6AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+IuWAi+S6uueUqCI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IuOCq+ODoeODqeOBp+OBruWGmeecn+OBqOWLleeUu+OBruaSruW9seOCkuOCouODl+ODquOBq+ioseWPr+OBl+OBvuOBmeOAguOBk+OCjOOBq+OCiOOCiuOAgeOCouODl+ODquOBjOeiuuiqjeOBquOBl+OBp+OBhOOBpOOBp+OCguOCq+ODoeODqeOCkuS9v+eUqOOBp+OBjeOCi+OCiOOBhuOBq+OBquOCiuOBvuOBmeOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiLjg5DjgqTjg5bjg6zjg7zjgrfjg6fjg7Pjga7liLblvqEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+IuODkOOCpOODluODrOODvOOCt+ODp+ODs+OBruWItuW+oeOCkuOCouODl+ODquOBq+ioseWPr+OBl+OBvuOBmeOAgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiLjg6njgqTjg4jjga7jgrPjg7Pjg4jjg63jg7zjg6siPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+IuODqeOCpOODiOOBruWItuW+oeOCkuOCouODl+ODquOBq+ioseWPr+OBl+OBvuOBmeOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+Iumbu+ipseeVquWPt+eZuuS/oSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQaG9uZSIgbXNnaWQ9IjM3NDA3OTc1NzYxMTM3NjA4MjciPiLpm7voqbHnlarlj7fjgbjjga7oh6rli5Xnmbrkv6HjgpLjgqLjg5fjg6rjgavoqLHlj6/jgZfjgb7jgZnjgILjgZPjgozjgavjgojjgorjgIHkuojmnJ/jgZvjgaznmbrkv6HjgoTmlpnph5HjgYznmbrnlJ/jgZnjgovlj6/og73mgKfjgYzjgYLjgorjgb7jgZnjgILjgarjgYrjgIHnt4rmgKXpgJrloLHnlarlj7fjgbjjga7nmbrkv6Hjga/oqLHlj6/jgZXjgozjgb7jgZvjgpPjgILmgqrmhI/jga7jgYLjgovjgqLjg5fjg6rjgYznorroqo3jgarjgZfjgafnmbrkv6HjgZfjgIHmlpnph5HjgYznmbrnlJ/jgZnjgovmgZDjgozjgYzjgYLjgorjgb7jgZnjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ltc0NhbGxTZXJ2aWNlIiBtc2dpZD0iMzU3NDk0Mzg0NzE4MTc5MzkxOCI+IklNU+mAmuipseOCteODvOODk+OCueOBuOOBruOCouOCr+OCu+OCuSI8L3N0cmluZz4KQEAgLTg1OCwxMCArODU3LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJjdXQiIG1zZ2lkPSIzMDkyNTY5NDA4NDM4NjI2MjYxIj4i5YiH44KK5Y+W44KKIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weSIgbXNnaWQ9IjI2ODE5NDYyMjk1MzM1MTE5ODciPiLjgrPjg5Tjg7wiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiLosrzjgorku5jjgZEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXN0ZV9hc19wbGFpbl90ZXh0IiBtc2dpZD0iNTQyNzc5Mjc0MTkwODAxMDY3NSI+IuabuOW8j+OBquOBl+ODhuOCreOCueODiOOBqOOBl+OBpuiyvOOCiuS7mOOBkSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4i572u5o+bLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+IuWJiumZpCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4iVVJM44KS44Kz44OU44O8Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4i44OG44Kt44K544OI44KS6YG45oqeIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiLlhYPjgavmiLvjgZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+IuOChOOCiuebtOOBlyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiLjg4bjgq3jgrnjg4jpgbjmip4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4i6L6e5pu444Gr6L+95YqgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiLliYrpmaQiPC9zdHJpbmc+CkBAIC0xMTA3LDYgKzExMDksNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4i5aOB57SZ44KS5aSJ5pu0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4i6YCa55+l44Oq44K544OK44O8Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiLjgrPjg7Pjg4fjgqPjgrfjg6fjg7Pjg5fjg63jg5DjgqTjg4AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiLpgJrnn6XjgqLjgrfjgrnjgr/jg7Pjg4giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IlZQTuOBjOacieWKueOBq+OBquOCiuOBvuOBl+OBnyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+IlZQTuOBjDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPuOBq+OCiOOCiuacieWKueWMluOBleOCjOOBvuOBl+OBnyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0IiBtc2dpZD0iMzAxMTMwNjYwNzEyNjQ1MDMyMiI+IuOCv+ODg+ODl+OBl+OBpuODjeODg+ODiOODr+ODvOOCr+OCkueuoeeQhuOBl+OBvuOBmeOAgiI8L3N0cmluZz4KQEAgLTE0NDAsMTIgKzE0NDMsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV91cGRhdGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijg4NTY2MzEzMjI0NDAxODcwNzEiPiLnrqHnkIbogIXjgavjgojjgaPjgabmm7TmlrDjgZXjgozjgabjgYTjgb7jgZkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX2RlbGV0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iNzY1MDU3NzM4NzQ5MzEwMTM1MyI+IueuoeeQhuiAheOBq+OCiOOBo+OBpuWJiumZpOOBleOCjOOBvuOBl+OBnyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4i44OQ44OD44OG44Oq44O844KS6ZW35oyB44Gh44GV44Gb44KL44Gf44KB44CB44OQ44OD44OG44Oq44O844K744O844OQ44O844Gv56uv5pyr44Gu44OR44OV44Kp44O844Oe44Oz44K544KS5oqR44GI44CB44OQ44Kk44OW44Os44O844K344On44Oz44CB5L2N572u5oOF5aCx44K144O844OT44K544CB5aSn5Y2K44Gu44OQ44OD44Kv44Kw44Op44Km44Oz44OJ44OH44O844K/44KS5Yi26ZmQ44GX44G+44GZ44CC44Oh44O844Or44CBU01T44KE44CB5ZCM5pyf44KS5L2/55So44GZ44KL44Gd44Gu5LuW44Gu44Ki44OX44Oq44Gv44CB6LW35YuV44GX44Gm44KC5pu05paw44GV44KM44Gq44GE44GT44Go44GM44GC44KK44G+44GZ44CCXG5cbuODkOODg+ODhuODquODvOOCu+ODvOODkOODvOOBr+err+acq+OBruWFhembu+S4reOBr+iHquWLleeahOOBq09GRuOBq+OBquOCiuOBvuOBmeOAgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX3RpdGxlIiBtc2dpZD0iNzQ5Mzk4OTcyMjYxMDAwODcwMCI+IumHjeimgeW6piI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSI3MTE4ODI2OTAwNzY3MDQ3MTI1Ij4i44OW44Ot44OD44KvOiDku4rlvozjga/jgZPjga7pgJrnn6XjgpLooajnpLrjgZfjgarjgYQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4i5L2OOiDpgJrnn6Xjg6rjgrnjg4jjga7kuIvjgavjg57jg4rjg7zjg6Ljg7zjg4njgafooajnpLrjgZnjgosiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNzk5MTE1NzY5NzYwOTU3NTI3MSI+Iuaomea6ljog44GT44Gu6YCa55+l44KS44Oe44OK44O844Oi44O844OJ44Gn6KGo56S644GZ44KLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiLpq5g6IOmAmuefpeODquOCueODiOOBruS4iuOBq+ihqOekuuOBl+OAgemfs+WjsOOBp+OCguefpeOCieOBm+OCiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiLnt4rmgKU6IOeUu+mdouOBq+ODl+ODrOODk+ODpeODvOOCkuihqOekuuOBl+OAgemfs+WjsOOBp+OCguefpeOCieOBm+OCiyI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+JTEkZOWIhumWk++8iDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+44G+44Gn77yJPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+MeWIhumWk++8iDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzAiPiUyJHM8L3hsaWZmOmc+44G+44Gn77yJPC9pdGVtPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1rYS1yR0Uvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWthLXJHRS9zdHJpbmdzLnhtbAppbmRleCAyNjlhZjYxLi5mZmRkMzFjIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWthLXJHRS9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWthLXJHRS9zdHJpbmdzLnhtbApAQCAtMjIzLDYgKzIyMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2tkb3duIiBtc2dpZD0iODc1MTU0MjUxNDcyNDMzMjg3MyI+IuGDkOGDruGDmuGDkCDhg6nhg5Dhg5nhg5Thg6Lhg5Xhg5AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+Ijk5OSsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fY2hpbGRyZW5fY291bnRfYnJhY2tldGVkIiBtc2dpZD0iMTc2OTQyNTQ3MzE2ODM0NzgzOSI+Iig8eGxpZmY6ZyBpZD0iTk9USUZJQ0FUSU9OQ09VTlQiPiVkPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4i4YOo4YOY4YOS4YOX4YOQ4YOV4YOh4YOYIOGDk+GDkOGDm+GDkOGDmuGDo+GDmuGDmOGDkCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+IuGDo+GDoeGDkOGDpOGDoOGDl+GDruGDnSDhg6Dhg5Thg5/hg5jhg5vhg5giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiJBbmRyb2lkLeGDmOGDoSDhg6Hhg5jhg6Hhg6Lhg5Thg5vhg5AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+IuGDnuGDmOGDoOGDkOGDk+GDmCI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IuGDkOGDnuGDoSDhg6jhg5Thg5Thg6vhg5rhg5Thg5Hhg5Ag4YOZ4YOQ4YOb4YOU4YOg4YOY4YOXIOGDoeGDo+GDoOGDkOGDl+GDmOGDoeGDkCDhg5Phg5Ag4YOV4YOY4YOT4YOU4YOd4YOhIOGDkuGDkOGDk+GDkOGDpuGDlOGDkeGDkC4g4YOU4YOhIOGDnOGDlOGDkeGDkOGDoOGDl+GDleGDkCDhg5Dhg57hg6Eg4YOj4YOk4YOa4YOU4YOR4YOQ4YOhIOGDkOGDq+GDmuGDlOGDleGDoSwg4YOc4YOU4YOR4YOY4YOh4YOb4YOY4YOU4YOgIOGDk+GDoOGDneGDoSDhg5Lhg5Dhg5vhg53hg5jhg6fhg5Thg5zhg53hg6Eg4YOZ4YOQ4YOb4YOU4YOg4YOQIOGDl+GDpeGDleGDlOGDnOGDmCDhg5Phg5Dhg5Phg5Dhg6Hhg6Lhg6Phg6Dhg5Thg5Hhg5jhg6Eg4YOS4YOQ4YOg4YOU4YOo4YOULiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiLhg5Xhg5jhg5Hhg6Dhg5Dhg6rhg5jhg5jhg6Eg4YOZ4YOd4YOc4YOi4YOg4YOd4YOa4YOYIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiLhg5Dhg57hg6Eg4YOo4YOU4YOU4YOr4YOa4YOU4YOR4YOQLCDhg5vhg5Dhg6Dhg5fhg53hg6Eg4YOV4YOY4YOR4YOg4YOY4YOg4YOU4YOR4YOQLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiLhg6Thg5Dhg5zhg6Dhg5jhg6Eg4YOb4YOQ4YOg4YOX4YOV4YOQIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiLhg5Dhg57hg6Eg4YOo4YOU4YOU4YOr4YOa4YOU4YOR4YOQLCDhg5vhg5Dhg6Dhg5fhg53hg6Eg4YOS4YOQ4YOc4YOQ4YOX4YOU4YOR4YOQLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+IuGDnuGDmOGDoOGDk+GDkOGDnuGDmOGDoOGDmCDhg5Phg5Dhg6Dhg5Thg5nhg5Xhg5Ag4YOi4YOU4YOa4YOU4YOk4YOd4YOc4YOY4YOhIOGDnOGDneGDm+GDoOGDlOGDkeGDluGDlCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQaG9uZSIgbXNnaWQ9IjM3NDA3OTc1NzYxMTM3NjA4MjciPiLhg5Dhg57hg6Eg4YOo4YOU4YOU4YOr4YOa4YOU4YOR4YOQIOGDk+GDkOGDoOGDlOGDmeGDneGDoSDhg6Lhg5Thg5rhg5Thg6Thg53hg5zhg5jhg6Eg4YOc4YOd4YOb4YOg4YOU4YOR4YOW4YOUIOGDl+GDpeGDleGDlOGDnOGDmCDhg6nhg5Dhg6Dhg5Thg5Xhg5jhg6Eg4YOS4YOQ4YOg4YOU4YOo4YOULiDhg5Dhg5vhg5Dhg5wg4YOo4YOU4YOh4YOQ4YOr4YOa4YOd4YOQIOGDkuGDkOGDm+GDneGDmOGDrOGDleGDmOGDneGDoSDhg5fhg6Xhg5Xhg5Thg5zhg6Eg4YOh4YOQ4YOi4YOU4YOa4YOU4YOk4YOd4YOc4YOYIOGDpeGDleGDmOGDl+GDkOGDoOGDluGDlCDhg5vhg53hg6Phg5rhg53hg5Phg5zhg5Thg5rhg5gg4YOu4YOQ4YOg4YOv4YOU4YOR4YOY4YOh4YOQIOGDk+GDkCDhg5bhg5Dhg6Dhg5Thg5Hhg5jhg6Eg4YOS4YOQ4YOp4YOU4YOc4YOQLiDhg5Lhg5Dhg5jhg5fhg5Xhg5Dhg5rhg5jhg6Hhg6zhg5jhg5zhg5Thg5csIOGDoOGDneGDmyDhg5Dhg57hg6Eg4YOS4YOQ4YOT4YOQ4YOj4YOT4YOU4YOR4YOU4YOa4YOYIOGDk+GDkOGDruGDm+GDkOGDoOGDlOGDkeGDmOGDoSDhg5zhg53hg5vhg6Dhg5Thg5Hhg5bhg5Qg4YOT4YOQ4YOg4YOU4YOZ4YOV4YOQIOGDkOGDoCDhg6jhg5Thg6Phg6vhg5rhg5jhg5AuIOGDm+GDkOGDleGDnOGDlCDhg5Dhg57hg5Thg5Hhg6Eg4YOo4YOU4YOU4YOr4YOa4YOU4YOR4YOQIOGDl+GDpeGDleGDlOGDnOGDmCDhg5Phg5Dhg5Phg5Dhg6Hhg6Lhg6Phg6Dhg5Thg5Hhg5jhg6Eg4YOS4YOQ4YOg4YOU4YOo4YOUIOGDluGDkOGDoOGDlOGDkeGDmOGDoSDhg5Lhg5Dhg5zhg67hg53hg6Dhg6rhg5jhg5Thg5rhg5Thg5Hhg5Ag4YOT4YOQIOGDqOGDlOGDoeGDkOGDkeGDkOGDm+GDmOGDoeGDmCDhg6Hhg5Dhg6Thg5Dhg6Hhg6Phg6Dhg5jhg6Eg4YOS4YOQ4YOT4YOQ4YOu4YOT4YOQ4YOqIOGDm+GDneGDkuGDmOGDrOGDlOGDleGDly4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ltc0NhbGxTZXJ2aWNlIiBtc2dpZD0iMzU3NDk0Mzg0NzE4MTc5MzkxOCI+IklNUyDhg5bhg5Dhg6Dhg5Thg5Hhg5jhg6Eg4YOh4YOU4YOg4YOV4YOY4YOh4YOW4YOUIOGDrOGDleGDk+GDneGDm+GDkCI8L3N0cmluZz4KQEAgLTg1OCwxMCArODU3LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJjdXQiIG1zZ2lkPSIzMDkyNTY5NDA4NDM4NjI2MjYxIj4i4YOQ4YOb4YOd4YOt4YOg4YOQIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weSIgbXNnaWQ9IjI2ODE5NDYyMjk1MzM1MTE5ODciPiLhg5nhg53hg57hg5jhg6Dhg5Thg5Hhg5AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiLhg6nhg5Dhg6Hhg5vhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXN0ZV9hc19wbGFpbl90ZXh0IiBtc2dpZD0iNTQyNzc5Mjc0MTkwODAxMDY3NSI+IuGDqeGDleGDlOGDo+GDmuGDlOGDkeGDoOGDmOGDlSDhg6Lhg5Thg6Xhg6Hhg6Lhg5Dhg5Mg4YOp4YOQ4YOh4YOb4YOQIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiLhg6nhg5Dhg5zhg5Dhg6rhg5Xhg5rhg5Thg5Hhg5DigKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4i4YOs4YOQ4YOo4YOa4YOQIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiJVUkwg4YOZ4YOd4YOe4YOY4YOg4YOU4YOR4YOQIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4i4YOi4YOU4YOl4YOh4YOi4YOY4YOhIOGDm+GDneGDnOGDmOGDqOGDleGDnOGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVuZG8iIG1zZ2lkPSI3OTA1Nzg4NTAyNDkxNzQyMzI4Ij4i4YOT4YOQ4YOR4YOg4YOj4YOc4YOU4YOR4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiLhg5Lhg5Dhg5vhg5Thg53hg6Dhg5Thg5Hhg5AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4i4YOi4YOU4YOl4YOh4YOi4YOY4YOhIOGDm+GDneGDnOGDmOGDqOGDleGDnOGDkCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiLhg5rhg5Thg6Xhg6Hhg5jhg5nhg53hg5zhg6jhg5gg4YOT4YOQ4YOb4YOQ4YOi4YOU4YOR4YOQIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiLhg6zhg5Dhg6jhg5rhg5AiPC9zdHJpbmc+CkBAIC0xMTA3LDYgKzExMDksNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4i4YOk4YOd4YOc4YOY4YOhIOGDqOGDlOGDquGDleGDmuGDkCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+IuGDqOGDlOGDouGDp+GDneGDkeGDmOGDnOGDlOGDkeGDlOGDkeGDmOGDoSDhg5vhg6Hhg5vhg5Thg5zhg5Thg5rhg5giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+IuGDm+GDk+GDkuGDneGDm+GDkOGDoOGDlOGDneGDkeGDmOGDoSDhg57hg6Dhg53hg5Xhg5Dhg5jhg5Phg5Thg6Dhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiLhg6jhg5Thg6Lhg6fhg53hg5Hhg5jhg5zhg5Thg5Hhg5Dhg5fhg5Ag4YOQ4YOh4YOY4YOh4YOi4YOU4YOc4YOi4YOYIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJWUE4g4YOS4YOQ4YOQ4YOl4YOi4YOY4YOj4YOg4YOU4YOR4YOj4YOa4YOY4YOQIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4iVlBOIOGDkuGDkOGDkOGDpeGDouGDmOGDo+GDoOGDlOGDkeGDo+GDmuGDmOGDkCA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4t4YOY4YOhIOGDm+GDmOGDlOGDoCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0IiBtc2dpZD0iMzAxMTMwNjYwNzEyNjQ1MDMyMiI+IuGDqOGDlOGDlOGDruGDlOGDlyDhg6Xhg6Hhg5Thg5rhg5jhg6Eg4YOh4YOQ4YOb4YOQ4YOg4YOX4YOQ4YOV4YOQ4YOTLiI8L3N0cmluZz4KQEAgLTE0NDAsMTIgKzE0NDMsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV91cGRhdGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijg4NTY2MzEzMjI0NDAxODcwNzEiPiLhg5Lhg5Dhg5zhg5Dhg67hg5rhg5Thg5Hhg6Phg5rhg5jhg5Ag4YOX4YOl4YOV4YOU4YOc4YOYIOGDkOGDk+GDm+GDmOGDnOGDmOGDoeGDouGDoOGDkOGDouGDneGDoOGDmOGDoSDhg5vhg5jhg5Thg6AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX2RlbGV0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iNzY1MDU3NzM4NzQ5MzEwMTM1MyI+IuGDl+GDpeGDleGDlOGDnOGDmCDhg5Dhg5Phg5vhg5jhg5zhg5jhg6Hhg6Lhg6Dhg5Dhg6Lhg53hg6Dhg5jhg6Eg4YOb4YOY4YOU4YOgIOGDrOGDkOGDqOGDmuGDmOGDmuGDmCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4i4YOU4YOa4YOU4YOb4YOU4YOc4YOi4YOY4YOhIOGDm+GDneGDpeGDm+GDlOGDk+GDlOGDkeGDmOGDoSDhg5Xhg5Dhg5Phg5jhg6Eg4YOS4YOQ4YOj4YOb4YOv4YOd4YOR4YOU4YOh4YOU4YOR4YOY4YOh4YOQ4YOX4YOV4YOY4YOhLCDhg5Thg5rhg5Thg5vhg5Thg5zhg6Lhg5jhg6Eg4YOT4YOQ4YOb4YOW4YOd4YOS4YOYIOGDkOGDm+GDquGDmOGDoOGDlOGDkeGDoSDhg5fhg6Xhg5Xhg5Thg5zhg5gg4YOb4YOd4YOs4YOn4YOd4YOR4YOY4YOa4YOd4YOR4YOY4YOhIOGDqOGDlOGDoeGDoOGDo+GDmuGDlOGDkeGDkOGDoSDhg5Phg5Ag4YOW4YOm4YOj4YOT4YOQ4YOV4YOhIOGDleGDmOGDkeGDoOGDkOGDquGDmOGDkOGDoSwg4YOQ4YOT4YOS4YOY4YOa4YOb4YOT4YOU4YOR4YOQ4YOg4YOU4YOd4YOR4YOY4YOhIOGDm+GDneGDm+GDoeGDkOGDruGDo+GDoOGDlOGDkeGDlOGDkeGDoSDhg5Phg5Ag4YOr4YOY4YOg4YOY4YOX4YOQ4YOTIOGDpOGDneGDnOGDo+GDoCDhg5vhg53hg5zhg5Dhg6rhg5Thg5vhg5Thg5Hhg6EuIOGDlOGDmi3hg6Thg53hg6Hhg6Lhg5AsIOGDqOGDlOGDouGDp+GDneGDkeGDmOGDnOGDlOGDkeGDlOGDkeGDmCDhg5Phg5Ag4YOh4YOu4YOV4YOQIOGDoeGDmOGDnOGDpeGDoOGDneGDnOGDmOGDluGDkOGDquGDmOGDkOGDluGDlCDhg5Phg5Dhg6fhg6Dhg5Phg5zhg53hg5Hhg5jhg5rhg5gg4YOQ4YOe4YOa4YOY4YOZ4YOQ4YOq4YOY4YOU4YOR4YOY4YOhIOGDkuGDkOGDnOGDkOGDruGDmuGDlOGDkeGDkCDhg5Dhg6Ag4YOb4YOd4YOu4YOT4YOU4YOR4YOQIOGDm+GDkOGDlyDhg5Lhg5Dhg67hg6Hhg5zhg5Thg5Dhg5vhg5Phg5QuIFxuXG4g4YOU4YOa4YOU4YOb4YOU4YOc4YOi4YOY4YOhIOGDk+GDkOGDm+GDluGDneGDkuGDleGDlOGDmuGDmCDhg5Dhg5Xhg6Lhg53hg5vhg5Dhg6Lhg6Phg6Dhg5Dhg5Mg4YOS4YOQ4YOb4YOd4YOY4YOg4YOX4YOV4YOU4YOR4YOQLCDhg6Dhg53hg5Phg5Thg6Hhg5Dhg6og4YOX4YOl4YOV4YOU4YOc4YOhIOGDm+GDneGDrOGDp+GDneGDkeGDmOGDmuGDneGDkeGDkOGDoSDhg5Phg5Dhg5vhg6Lhg5Thg5zhg5fhg5Dhg5wg4YOo4YOU4YOQ4YOU4YOg4YOX4YOU4YOR4YOXLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX3RpdGxlIiBtc2dpZD0iNzQ5Mzk4OTcyMjYxMDAwODcwMCI+IuGDm+GDnOGDmOGDqOGDleGDnOGDlOGDmuGDneGDkeGDmOGDoSDhg5Phg53hg5zhg5QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iNzExODgyNjkwMDc2NzA0NzEyNSI+IuGDk+GDkOGDkeGDmuGDneGDmeGDmOGDmuGDmDog4YOU4YOhIOGDqOGDlOGDouGDp+GDneGDkeGDmOGDnOGDlOGDkeGDlOGDkeGDmCDhg5Dhg6bhg5Dhg6Dhg5Dhg6Hhg53hg5Phg5Thg6Eg4YOS4YOQ4YOb4YOd4YOp4YOc4YOT4YOU4YOR4YOQIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNjQ0NzY0MDQ0OTkxODQyNzE4NyI+IuGDk+GDkOGDkeGDkOGDmuGDmDog4YOU4YOhIOGDqOGDlOGDouGDp+GDneGDkeGDmOGDnOGDlOGDkeGDlOGDkeGDmCDhg6Hhg5jhg5jhg6Eg4YOR4YOd4YOa4YOd4YOo4YOYLCDhg6Phg67hg5vhg53hg5Mg4YOS4YOQ4YOb4YOd4YOp4YOc4YOT4YOU4YOR4YOQIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiLhg5zhg53hg6Dhg5vhg5Dhg5rhg6Phg6Dhg5g6IOGDlOGDoSDhg6jhg5Thg6Lhg6fhg53hg5Hhg5jhg5zhg5Thg5Hhg5Thg5Hhg5gg4YOj4YOu4YOb4YOd4YOTIOGDkuGDkOGDm+GDneGDqeGDnOGDk+GDlOGDkeGDkCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMTUyMjM4NjM3NzM3MjE1NjU0Ij4i4YOb4YOQ4YOm4YOQ4YOa4YOYOiDhg5Thg6Eg4YOo4YOU4YOi4YOn4YOd4YOR4YOY4YOc4YOU4YOR4YOU4YOR4YOYIOGDoeGDmOGDmOGDoSDhg5fhg5Dhg5Xhg6jhg5gsIOGDruGDm+GDneGDleGDkOGDnCDhg6Hhg5jhg5Lhg5zhg5Dhg5rhg5fhg5Dhg5wg4YOU4YOg4YOX4YOQ4YOTIOGDkuGDkOGDm+GDneGDqeGDnOGDk+GDlOGDkeGDkCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiLhg5Lhg5Dhg5Phg5Dhg6Phg5Phg5Thg5Hhg5Thg5rhg5g6IOGDqOGDlOGDouGDp+GDneGDkeGDmOGDnOGDlOGDkeGDlOGDkeGDmCDhg57hg5jhg6Dhg5Phg5Dhg57hg5jhg6Ag4YOU4YOZ4YOg4YOQ4YOc4YOW4YOULCDhg67hg5vhg53hg5Xhg5Dhg5wg4YOh4YOY4YOS4YOc4YOQ4YOa4YOX4YOQ4YOcIOGDlOGDoOGDl+GDkOGDkyDhg5Lhg5Dhg5vhg53hg6nhg5zhg5Phg5Thg5Hhg5AiPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0iemVuX21vZGVfZHVyYXRpb25fbWludXRlc19zdW1tYXJ5IiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNDM2Nzg3NzQwODA3MjAwMDg0OCI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPiUxJGQg4YOs4YOj4YOX4YOY4YOhIOGDkuGDkOGDnOGDm+GDkOGDleGDmuGDneGDkeGDkOGDqOGDmCAoPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4t4YOb4YOT4YOUKTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPuGDlOGDoOGDl+GDmCDhg6zhg6Phg5fhg5jhg6Eg4YOS4YOQ4YOc4YOb4YOQ4YOV4YOa4YOd4YOR4YOQ4YOo4YOYICg8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8wIj4lMiRzPC94bGlmZjpnPi3hg5vhg5Phg5QpPC9pdGVtPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1ray1yS1ovc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWtrLXJLWi9zdHJpbmdzLnhtbAppbmRleCA2ZTI2MjkyLi5mZjU4ZWFhIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWtrLXJLWi9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWtrLXJLWi9zdHJpbmdzLnhtbApAQCAtMjIzLDYgKzIyMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2tkb3duIiBtc2dpZD0iODc1MTU0MjUxNDcyNDMzMjg3MyI+ItKa0LDQt9GW0YAg0LHQtdC60ZbRgtGDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiI5OTkrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2NoaWxkcmVuX2NvdW50X2JyYWNrZXRlZCIgbXNnaWQ9IjE3Njk0MjU0NzMxNjgzNDc4MzkiPiIoPHhsaWZmOmcgaWQ9Ik5PVElGSUNBVElPTkNPVU5UIj4lZDwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+ItCc0LDQt9C80rHQvSDQttCw0YHRi9GA0YvQu9KT0LDQvSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+ItKa0LDRg9GW0L/RgdGW0Lcg0YDQtdC20LjQvCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+IkFuZHJvaWQg0LbSr9C50LXRgdGWIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNlcl9vd25lcl9sYWJlbCIgbXNnaWQ9IjI4MDQzNTE4OTgwMDEwMzg5NTEiPiLQltC10LrQtSI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+ItKa0L7Qu9C00LDQvdCx0LDSk9CwINC60LDQvNC10YDQsNC90Ysg0pvQvtC70LTQsNC90YvQvywg0YTQvtGC0L7RgdGD0YDQtdGCINC90LXQvNC10YHQtSDQsdC10LnQvdC1INC20LDQt9GDINC80q/QvNC60ZbQvdC00ZbQs9GW0L0g0LHQtdGA0LXQtNGWLiDQkdKx0Lsg0YDSsdKb0YHQsNGCINC60LDQvNC10YDQsNC90Ysg0LrQtdC3INC60LXQu9Cz0LXQvSDRg9Cw0pvRi9GC0YLQsCDRgdGW0LfQtNGW0qMg0pvSsdC/0YLQsNGD0YvSo9GL0LfQtNGLINKb0LDQttC10YIg0LXRgtC/0LXQuSDSm9C+0LvQtNCw0L3RgyDQvNKv0LzQutGW0L3QtNGW0LPRltC9INCx0LXRgNC10LTRli4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4i0YLQtdGA0LHQtdC70ZbRgdGC0ZYg0LHQsNGB0pvQsNGA0YMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+ItKa0L7Qu9C00LDQvdCx0LDSk9CwINCy0LjQsdGA0LDRgtC+0YDQtNGLINCx0LDRgdKb0LDRgNGD0pPQsCDRgNKx0pvRgdCw0YIg0LHQtdGA0LXQtNGWLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiLRgdC40LPQvdCw0LvQtNGL0psg0YjQsNC80LTRiyDQsdCw0YHSm9Cw0YDRgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4i0prQvtC70LTQsNC90LHQsNKT0LAg0pvQsNC70YLQsCDRiNCw0LzRi9C9INCx0LDRgdKb0LDRgNGD0pPQsCDRgNKx0pvRgdCw0YIg0LHQtdGA0LXQtNGWLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+ItC906nQvNGW0YDQu9C10YDQs9C1INGC0ZbQutC10LvQtdC5INGC0LXQu9C10YTQvtC9INGI0LDQu9GDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+ItKa0L7Qu9C00LDQvdCx0LDSk9CwINGB0ZbQt9C00ZbSoyDSm9Cw0YLRi9GB0YPRi9Kj0YvQt9GB0YvQtyDSm9C+0qPRi9GA0LDRgyDRiNCw0LvRgyDQvNKv0LzQutGW0L3QtNGW0LPRltC9INCx0LXRgNC10LTRli4g0J3TmdGC0LjQttC10YHRltC90LTQtSDSm9C+0YHRi9C80YjQsCDRgtOp0LvQtdC8INC90LXQvNC10YHQtSDQutKv0YLQv9C10LPQtdC9INKb0L7So9GL0YDQsNGDINCw0LvRg9GL0qPRi9C3INC80q/QvNC60ZbQvS4g0JXRgdGW0qPRltC30LTQtSDQsdC+0LvRgdGL0L0sINKb0L7Qu9C00LDQvdCx0LAg0YLTqdGC0LXQvdGI0LUg0LHQsNC50LvQsNC90YvRgdGC0LDRgNKT0LAg0pvQvtKj0YvRgNCw0YMg0YjQsNC70LAg0LDQu9C80LDQudC00YsuINCX0LDQu9Cw0LvQtNGLINKb0L7Qu9C00LDQvdCx0LDQu9Cw0YAg0YHRltC30LTRltKjINGA0rHSm9GB0LDRgtGL0qPRi9C30YHRi9C3INKb0L7So9GL0YDQsNGD0LvQsNGAINGI0LDQu9GL0L8sINC60q/RgtC/0LXQs9C10L0g0YLTqdC70LXQvNC00LXRgNCz0LUg0YHQtdCx0LXQvyDQsdC+0LvRg9GLINC80q/QvNC60ZbQvS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ltc0NhbGxTZXJ2aWNlIiBtc2dpZD0iMzU3NDk0Mzg0NzE4MTc5MzkxOCI+IklNUyDSm9C+0qPRi9GA0LDRgyDSm9GL0LfQvNC10YLRltC9INC/0LDQudC00LDQu9Cw0L3RgyI8L3N0cmluZz4KQEAgLTg1OCwxMCArODU3LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJjdXQiIG1zZ2lkPSIzMDkyNTY5NDA4NDM4NjI2MjYxIj4i0prQuNGL0L8g0LDQu9GDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weSIgbXNnaWQ9IjI2ODE5NDYyMjk1MzM1MTE5ODciPiLQmtOp0YjRltGA0YMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiLSmtC+0Y4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXN0ZV9hc19wbGFpbl90ZXh0IiBtc2dpZD0iNTQyNzc5Mjc0MTkwODAxMDY3NSI+ItCa05nQtNGW0LzQs9GWINC805nRgtGW0L0g0YDQtdGC0ZbQvdC00LUg0pvQvtGOIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiLigKYg0YHTqdC30ZbQvSDQsNC70LzQsNGB0YLRi9GA0YMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4i0JbQvtGOIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiJVUkwg0LzQtdC60LXQvdC20LDQudGL0L0g0LrTqdGI0ZbRgNGDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4i0JzTmdGC0ZbQvdC00ZYg0LHTqdC70LXQutGC0LXRgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVuZG8iIG1zZ2lkPSI3OTA1Nzg4NTAyNDkxNzQyMzI4Ij4i0JrQtdGA0ZYg0pvQsNC50YLQsNGA0YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+ItKa0LDQudGC0LDRgNGDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGV4dFNlbGVjdGlvbkNBQlRpdGxlIiBtc2dpZD0iNTIzNjg1MDM5NDM3MDgyMDM1NyI+ItCc05nRgtGW0L0g0YLQsNKj0LTQsNGDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWRkVG9EaWN0aW9uYXJ5IiBtc2dpZD0iNDM1MjE2MTUzNDUxMDA1Nzg3NCI+ItCh06nQt9C00ZbQutC60LUg0pvQvtGB0YMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+ItCW0L7RjiI8L3N0cmluZz4KQEAgLTExMDcsNiArMTEwOSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiLQkNGA0YLSm9GLINGE0L7QvdGL0L0g06nQt9Cz0LXRgNGC0YMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiLQpdCw0LHQsNGAINCx0LDSm9GL0LvQsNKT0YvRiCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbmRpdGlvbl9wcm92aWRlcl9zZXJ2aWNlX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMzIxMzQzMzUyOTA2NTI0NTY0Ij4i0KjQsNGA0YIg0L/RgNC+0LLQsNC50LTQtdGA0ZYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiLQpdCw0LHQsNGA0LvQsNC90LTRi9GA0YMg0LrTqdC80LXQutGI0ZbRgdGWIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJWUE4g0LHQtdC70YHQtdC90LTRliI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+ItCS0JbQrSA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g0LDRgNKb0YvQu9GLINKb0L7RgdGL0LvSk9Cw0L0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiLQltC10LvRltC90ZYg0LHQsNGB0pvQsNGA0YMg0q/RiNGW0L0g0YLSr9GA0YLRgy4iPC9zdHJpbmc+CkBAIC0xNDQwLDEyICsxNDQzLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4i05jQutGW0LzRiNGWINC20LDSo9Cw0YDRgtGC0YsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX2RlbGV0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iNzY1MDU3NzM4NzQ5MzEwMTM1MyI+ItOY0LrRltC80YjRliDQttC+0LnSk9Cw0L0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTk2MDQzMTEyMzgxNjI1MzAzNCI+ItCR0LDRgtCw0YDQtdGP0L3Ri9KjINKb0YvQt9C80LXRgiDQutOp0YDRgdC10YLRgyDQvNC10YDQt9GW0LzRltC9INC20LDSm9GB0LDRgNGC0YMg0q/RiNGW0L0g0LHQsNGC0LDRgNC10Y8g0q/QvdC10LzQtNC10LPRltGIINKb0rHRgNGL0LvSk9GL0L3Ri9KjINOp0L3RltC80LTRltC70ZbQs9GW0L0g0YLTqdC80LXQvdC00LXRgtC10LTRliDQttOZ0L3QtSDQtNGW0YDRltC70LTRliwg0L7RgNGL0L3QtNGLINCw0L3Ri9Kb0YLQsNGDINKb0YvQt9C80LXRgtGC0LXRgNGW0L0g0LbTmdC90LUg0YTQvtC90LTRi9KbINC00LXRgNC10LrRgtC10YDQtNGW0qMg0LrTqdC/0YjRltC70ZbQs9GW0L0g0YjQtdC60YLQtdC50LTRli4g0K3Qu9C10LrRgtGA0L7QvdC00YvSmyDQv9C+0YjRgtCwLCDRhdCw0LHQsNGAINCw0LvQvNCw0YHRgyDQttOZ0L3QtSDRgdC40L3RhdGA0L7QvdC00LDRg9KT0LAg0L3QtdCz0ZbQt9C00LXQu9Cz0LXQvSDQsdCw0YHSm9CwINKb0L7Qu9C00LDQvdCx0LDQu9Cw0YAg0LDRiNKb0LDQvdGI0LAg0LbQsNKj0LDRgNGC0YvQu9C80LDRg9GLINC80q/QvNC60ZbQvS5cblxu0JHQsNGC0LDRgNC10Y8g0q/QvdC10LzQtNC10LPRltGIINKb0rHRgNGL0LvSk9GLINC30LDRgNGP0LTRgtCw0LvRi9C/INC20LDRgtKb0LDQvdC00LAg0LDQstGC0L7QvNCw0YLRgtGLINGC0q/RgNC00LUg06nRiNC10LTRli4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV90aXRsZSIgbXNnaWQ9Ijc0OTM5ODk3MjI2MTAwMDg3MDAiPiLQnNCw0qPRi9C30LTRi9C70YvSmyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSI3MTE4ODI2OTAwNzY3MDQ3MTI1Ij4i0JHSsdKT0LDRgtGC0LDQu9KT0LDQvTog0L7RgdGLINGF0LDQsdCw0YDQu9Cw0L3QtNGL0YDRg9C70LDRgNC00Ysg0LXRiNKb0LDRiNCw0L0g0LrTqdGA0YHQtdGC0L/QtdGDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNjQ0NzY0MDQ0OTkxODQyNzE4NyI+ItCi06nQvNC10L06INGF0LDQsdCw0YDQu9Cw0L3QtNGL0YDRg9C70LDRgCDRgtGW0LfRltC80L3RltKjINGC06nQvNC10L3Qs9GWINC20LDSk9GL0L3QtNCwINKv0L3RgdGW0Lcg0LrTqdGA0YHQtdGC0YMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNzk5MTE1NzY5NzYwOTU3NTI3MSI+ItKa0LDQu9GL0L/RgtGLOiDQvtGB0Ysg0YXQsNCx0LDRgNC70LDQvdC00YvRgNGD0LvQsNGA0LTRiyDSr9C90YHRltC3INC606nRgNGB0LXRgtGDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiLQltC+0pPQsNGA0Ys6INGF0LDQsdCw0YDQu9Cw0L3QtNGL0YDRg9C70LDRgCDRgtGW0LfRltC80ZbQvdGW0qMg0LbQvtKT0LDRgNKT0Ysg0LbQsNKT0YvQvdC00LAg0LrTqdGA0YHQtdGC0YMg0LbTmdC90LUg0LTRi9Cx0YvRgSDRiNGL0pPQsNGA0YMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSIxMTUzNjkzMDgwNDY3OTA0NDc0Ij4i0KjSsdKT0YvQuzog0Y3QutGA0LDQvdKT0LAg0LHQtdC60ZbRgtGDINC205nQvdC1INC00YvQsdGL0YEg0YjRi9KT0LDRgNGDIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj4lMSRkINC80LjQvdGD0YIg0LHQvtC50YsgKDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+INC00LXQudGW0L0pPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+0JHRltGAINC80LjQvdGD0YIg0LHQvtC50YsgKDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzAiPiUyJHM8L3hsaWZmOmc+INC00LXQudGW0L0pPC9pdGVtPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1rbS1yS0gvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWttLXJLSC9zdHJpbmdzLnhtbAppbmRleCAxNjdmYTE3Li4yNjEyMTJmIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWttLXJLSC9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWttLXJLSC9zdHJpbmdzLnhtbApAQCAtMjIzLDYgKzIyMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2tkb3duIiBtc2dpZD0iODc1MTU0MjUxNDcyNDMzMjg3MyI+IuGeheGetuGegOGfi+Gen+GfhOKAi+GepeGeoeGevOGenOGek+GfgeGfhyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLhnpThnrbhnpPigIvhnpvhnrbhnoDhn4vigIvhnpjhnrbhno/hnrfhnoDhnrYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiLhnprhnpThn4DhnpTigIvigIvigIvhnp/hnrvhnpzhno/hn5LhnpDhnrfhnpfhnrbhnpYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiLhnpThn5Lhnprhnpbhn5DhnpPhn5LhnpLigIvigIsgQW5kcm9pZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4i4Z6V4Z+S4Z6R4Z624Z6b4Z+L4Z6B4Z+S4Z6b4Z694Z6TIjwvc3RyaW5nPgpAQCAtMzUzLDggKzM1NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4i4Z6y4Z+S4Z6Z4oCL4Z6A4Z6Y4Z+S4Z6Y4Z6c4Z634Z6S4Z644oCL4Z6Q4Z6P4oCL4Z6a4Z684Z6UIOGek+Get+GehOKAi+GenOGeuOGeiuGfgeGeouGevOKAi+GeiuGfhOGemeKAi+GelOGfkuGemuGevuKAi+GemOGfieGetuGen+GfiuGeuOGek+KAi+GekOGej+GflCDhnpzhnrbigIvhnrLhn5LhnpnigIvhnoDhnpjhn5LhnpjhnpzhnrfhnpLhnrjigIvigIvhnpThn5Lhnprhnr7igIvhnpjhn4nhnrbhnp/hn4rhnrjhnpPigIvhnpDhno/igIvhnpPhn4XigIvhnpbhn4HhnpvigIvigIvhno7hnrbhnpjhnr3hnpnigIvhnorhn4ThnpnigIvhnoLhn5LhnpjhnrbhnpPigIvhnoDhnrbhnprigIvhnpThnonhn5LhnofhnrbhnoDhn4vigIvhnprhnpThnp/hn4vigIvhnqLhn5LhnpPhnoDhn5QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4i4Z6W4Z634Z6T4Z634Z6P4Z+S4Z6Z4oCL4Z6A4Z624Z6a4oCL4Z6J4Z+Q4Z6aIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiLhnrLhn5LhnpnigIvhnoDhnpjhn5LhnpjhnpzhnrfhnpLhnrjigIvhnoLhn5LhnprhnpThn4vhnoLhn5LhnprhnoTigIvhnoDhnpjhn5LhnpjhnpzhnrfhnpLhnrjigIvhnonhn5Dhnprhn5QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4i4Z6P4Z+S4Z6a4Z694Z6P4Z6W4Z634Z6T4Z634Z6P4Z+S4Z6Z4oCL4Z6W4Z634Z6bIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiLhnrLhn5LhnpnigIvhnoDhnpjhn5LhnpjhnpzhnrfhnpLhnrjigIvhnpbhnrfhnpPhnrfhno/hn5LhnpnigIvhnpbhnrfhnpvhn5QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiLhnqDhn4XigIvhnpvhn4HhnoHigIvhnpHhnrzhnprhnp/hn5Dhnpbhn5LhnpHigIvhnorhn4ThnpnigIvhnpXhn5LhnpHhnrbhnpvhn4siPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4i4Z6y4Z+S4Z6Z4oCL4Z6A4Z6Y4Z+S4Z6Y4Z6c4Z634Z6S4Z644oCL4Z6g4Z+F4oCL4Z6b4Z+B4Z6B4oCL4Z6R4Z684Z6a4Z6f4Z+Q4Z6W4Z+S4Z6R4oCL4Z6K4Z+E4Z6Z4oCL4Z6C4Z+S4Z6Y4Z624Z6T4oCL4Z6f4Z6A4Z6Y4Z+S4Z6Y4Z6X4Z624Z6W4oCL4Z6a4Z6U4Z6f4Z+L4oCL4Z6i4Z+S4Z6T4Z6A4Z+U4oCLIOGenOGetuKAi+GeouGetuGeheKAi+GegOGetuGej+Gfi+KAi+Gem+Geu+GemeKAiyDhnqzigIvhnqDhn4XigIvhnorhn4ThnpnigIvhnpjhnrfhnpPigIvhnprhn4bhnpbhnrnhnoTigIvhnpHhnrvhnoDhn5Qg4Z6F4Z+G4Z6O4Z624Z+G4oCL4Z6Q4Z624oCLIOGenOGetuKAi+GemOGet+Gek+KAi+GeouGek+Geu+GeieGfkuGeieGetuGej+KAi+GesuGfkuGemeKAi+GegOGemOGfkuGemOGenOGet+GekuGeuOKAi+GeoOGfheKAi+Gem+GfgeGegeKAi+GeluGfgeGem+KAi+GeouGetuGen+Gek+GfkuGek+KAi+GekeGfgeGflCDhnoDhnpjhn5LhnpjhnpzhnrfhnpLhnrjigIvhnpbhn5LhnpnhnrbhnpThnrbhnpHigIvhnqLhnrbhnoXigIvhnoDhnrbhno/hn4vigIvhnpvhnrvhnpnigIvhnprhnpThnp/hn4vigIvhnqLhn5LhnpPhnoDigIsg4Z6K4Z+E4Z6Z4oCL4Z6S4Z+S4Z6c4Z6+4Z6A4Z624Z6a4oCL4Z6g4Z+F4oCL4Z6K4Z+E4Z6Z4oCL4Z6C4Z+S4Z6Y4Z624Z6T4oCL4Z6A4Z624Z6a4oCL4Z6U4Z6J4Z+S4Z6H4Z624Z6A4Z+L4oCL4Z6a4Z6U4Z6f4Z+L4oCL4Z6i4Z+S4Z6T4Z6A4Z+UIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiLhnoXhnrzhnpvhnorhn4bhno7hnr7hnprhnoDhnrbhnprhnp/hn4HhnpzhnrbhnoDhnpjhn5LhnpjhnoDhnrbhnprhnqDhn4Xhno/hnrbhnpggSU1TIjwvc3RyaW5nPgpAQCAtODU4LDEwICs4NTcsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiLhnoDhnrbhno/hn4siPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+IuGeheGemOGfkuGem+GehCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+IuGelOGet+GekeKAi+Gel+GfkuGeh+GetuGelOGfiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4i4Z6U4Z634Z6R4Z6X4Z+S4Z6H4Z624Z6U4Z+L4Z6H4Z624Z6i4Z6P4Z+S4Z6Q4Z6U4Z6R4Z6S4Z6Y4Z+S4Z6Y4Z6P4Z62Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiLhnofhn4bhnpPhnr3hnp8uLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4i4Z6b4Z674Z6UIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiLhnoXhnpjhn5LhnpvhnoQgVVJMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4i4Z6H4Z+S4Z6a4Z6+4Z6f4oCL4Z6i4Z6P4Z+S4Z6Q4Z6U4Z6RIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiLhnpjhnrfhnpPhnpLhn5Lhnpzhnr7hnpzhnrfhnokiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+IuGekuGfkuGenOGevuGenOGet+GeiSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiLhnoDhnrbhnprigIvhnofhn5Lhnprhnr7hnp/igIvhnqLhno/hn5LhnpDhnpThnpEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4i4Z6U4Z6T4Z+S4Z6Q4Z+C4Z6Y4oCL4Z6R4Z+F4oCL4Z6c4Z6F4Z6T4Z624Z6T4Z674Z6A4Z+S4Z6a4Z6YIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiLhnpvhnrvhnpQiPC9zdHJpbmc+CkBAIC0xMTA5LDYgKzExMTEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4i4Z6U4Z+S4Z6K4Z684Z6a4oCL4Z6V4Z+S4Z6R4Z624Z+G4Z6E4oCL4Z6a4Z684Z6U4Z6X4Z624Z6WIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4i4Z6A4Z6Y4Z+S4Z6Y4Z6c4Z634Z6S4Z644oCL4Z6f4Z+S4Z6K4Z624Z6U4Z+L4oCL4Z6A4Z624Z6a4oCL4Z6H4Z684Z6T4oCL4Z6K4Z+G4Z6O4Z654Z6EIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiLhnoDhn5LhnprhnrvhnpjhnqDhn4rhnrvhnpPigIvhnpXhn5Lhnorhnpvhn4vigIvhnpvhnoDhn5LhnoHhnoHhno7hn5LhnowiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiLhnofhn4bhnpPhnr3hnpnhnoDhnrbhnprhnofhnrzhnpPhnorhn4bhno7hnrnhnoQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IuGelOGetuGek+KAi+GekuGfkuGenOGevuKAi+GesuGfkuGemSBWUE4g4Z6f4Z6A4Z6Y4Z+S4Z6YIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4i4Z6U4Z624Z6T4oCL4Z6S4Z+S4Z6c4Z6+4oCL4Z6y4Z+S4Z6ZIFZQTiDhnp/hnoDhnpjhn5LhnpjigIvhnorhn4ThnpkgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4i4Z6U4Z+J4Z+HIOGeiuGevuGemOGfkuGelOGeuOKAi+GeguGfkuGemuGelOGfi+GeguGfkuGemuGehOKAi+GelOGejuGfkuGeiuGetuGeieGflCI8L3N0cmluZz4KQEAgLTE0NDIsMTIgKzE0NDUsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV91cGRhdGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijg4NTY2MzEzMjI0NDAxODcwNzEiPiLhnpThnrbhnpPhnpLhn5Lhnpzhnr7hnpThnoXhn5LhnoXhnrvhnpThn5LhnpThnpPhn5LhnpPhnpfhnrbhnpbhnorhn4ThnpnhnqLhn5LhnpPhnoDhnoLhn5LhnprhnpThn4vhnoLhn5LhnprhnoThnprhnpThnp/hn4vhnqLhn5LhnpPhnoAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX2RlbGV0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iNzY1MDU3NzM4NzQ5MzEwMTM1MyI+IuGelOGetuGek+Gem+Geu+GelOGeiuGfhOGemeGeouGfkuGek+GegOGeguGfkuGemuGelOGfi+GeguGfkuGemuGehOGemuGelOGen+Gfi+GeouGfkuGek+GegCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4i4Z6K4Z6+4Z6Y4Z+S4Z6U4Z644Z6H4Z694Z6Z4Z6y4Z+S4Z6Z4Z6Q4Z624Z6Y4Z6W4Z6b4Z6Q4Z+S4Z6Y4Z6U4Z+S4Z6a4Z6f4Z6+4Z6a4Z6h4Z6+4Z6EIOGegOGemOGfkuGemOGenOGet+GekuGeuOGen+Gek+GfkuGen+GfhuGen+GfhuGeheGfg+GekOGetuGemOGeluGem+GekOGfkuGemOGegOGetuGej+Gfi+GelOGek+GfkuGekOGemeGelOGfkuGemuGej+Get+GelOGej+GfkuGej+Get+GegOGetuGemuGep+GelOGegOGemuGejuGfjeGemuGelOGen+Gfi+GeouGfkuGek+GegCDhnpPhnrfhnoThnoDhnpjhn5Lhnprhnrfhno/hnpfhnrbhnpbhnonhn5Dhnpog4Z6f4Z+B4Z6c4Z624Z6A4Z6Y4Z+S4Z6Y4Z6R4Z644Z6P4Z624Z+G4Z6EIOGek+Get+GehOGekeGet+Gek+GfkuGek+Gek+GfkOGemeGeleGfkuGekeGfg+GegeGetuGehOGegOGfkuGemuGfhOGemeGen+GfkuGekeGevuGemuGej+GfguGekeGetuGfhuGehOGeouGen+Gfi+GflCDhnoDhnrbhnprhnpXhn5Lhnonhnr7hnp/hnrbhnprhnqLhn4rhnrjhnpjhn4nhn4Lhnpsg4Z6T4Z634Z6E4Z6A4Z6Y4Z+S4Z6Y4Z6c4Z634Z6S4Z644Z6V4Z+S4Z6f4Z+B4Z6E4Z6R4Z+A4Z6P4Z6K4Z+C4Z6b4Z6W4Z654Z6E4Z6V4Z+S4Z6i4Z+C4Z6A4Z6b4Z6+4Z6A4Z624Z6a4Z6S4Z+S4Z6c4Z6+4Z6f4Z6Y4Z6A4Z624Z6b4Z6A4Z6Y4Z+S4Z6Y4Z6i4Z624Z6F4Z6T4Z654Z6E4Z6Y4Z634Z6T4Z6S4Z+S4Z6c4Z6+4Z6U4Z6F4Z+S4Z6F4Z674Z6U4Z+S4Z6U4Z6T4Z+S4Z6T4Z6X4Z624Z6W4Z6R4Z+BIOGem+Geu+Gfh+Gej+GfkuGemuGetuGej+GfguGeouGfkuGek+GegOGelOGevuGegOGeluGeveGegOGenOGetuGflFxuXG7hnoDhnpjhn5LhnpjhnpzhnrfhnpLhnrjhnp/hnpPhn5Lhnp/hn4bhnp/hn4bhnoXhn4PhnpThnrfhnpHhnorhn4Thnpnhnp/hn5Lhnpzhn5DhnpnhnpThn5Lhnprhnpzhno/hn5Lhno/hnrcg4Z6T4Z+F4Z6W4Z+B4Z6b4Z6K4Z+C4Z6b4Z6n4Z6U4Z6A4Z6a4Z6O4Z+N4Z6a4Z6U4Z6f4Z+L4Z6i4Z+S4Z6T4Z6A4Z6A4Z+G4Z6W4Z674Z6E4Z6f4Z624Z6A4Z6Q4Z+S4Z6Y4Z+UIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfdGl0bGUiIG1zZ2lkPSI3NDkzOTg5NzIyNjEwMDA4NzAwIj4i4Z6f4Z624Z6a4Z+I4Z6f4Z+G4Z6B4Z624Z6T4Z+LIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiLhnpThnrbhnpPhnprhnrbhnprhnrbhn4bhnoThn5Yg4Z6A4Z674Z+G4Z6U4Z6E4Z+S4Z6g4Z624Z6J4Z6A4Z624Z6a4Z6H4Z684Z6T4Z6K4Z+G4Z6O4Z654Z6E4Z6R4Z624Z+G4Z6E4Z6T4Z+B4Z+HIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNjQ0NzY0MDQ0OTkxODQyNzE4NyI+IuGegOGemOGfkuGemuGet+Gej+GekeGetuGelOGfliDhnpThnoThn5LhnqDhnrbhnonhnp/hn5LhnoThnrbhno/hn4vhn5fhnpPhn4XhnpXhn5LhnpPhn4LhnoDhnoHhnrbhnoThnoDhn5Lhnprhn4ThnpjhnpThnonhn5LhnofhnrjhnpPhn4PhnoDhnrbhnprhnofhnrzhnpPhnorhn4bhno7hnrnhnoQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNzk5MTE1NzY5NzYwOTU3NTI3MSI+IuGekuGemOGfkuGemOGej+GetuGfliDhnpThnoThn5LhnqDhnrbhnonhnoDhnrbhnprhnofhnrzhnpPhnorhn4bhno7hnrnhnoThnpHhnrbhn4bhnoThnpPhn4Hhn4fhnp/hn5LhnoThnrbhno/hn4vhn5ciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzE1MjIzODYzNzczNzIxNTY1NCI+IuGegOGemOGfkuGemuGet+Gej+GegeGfkuGeluGen+Gfi+GfliDhnpThnoThn5LhnqDhnrbhnonhnpPhn4XhnpXhn5LhnpPhn4LhnoDhnoHhnrbhnoThnpvhnr7hnpThnonhn5LhnofhnrjhnpPhn4PhnoDhnrbhnprhnofhnrzhnpPhnorhn4bhno7hnrnhnoQg4Z6T4Z634Z6E4Z6U4Z6T4Z+S4Z6b4Z664Z6f4Z+G4Z6h4Z+B4Z6EIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+IuGelOGek+GfkuGekeGetuGek+Gfi+GfliDhnpvhn4Thno/hnpThnoThn5LhnqDhnrbhnonhnpPhn4Xhnpvhnr7hnqLhn4HhnoDhn5LhnprhnoThn4sg4Z6T4Z634Z6E4Z6U4Z6T4Z+S4Z6b4Z664Z6f4Z+G4Z6h4Z+B4Z6EIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj7hnprhnpnhn4jhnpbhn4HhnpsgJTEkZCDhnpPhnrbhnpHhnrggKOGemuGeoOGevOGej+GeiuGem+GfiyA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj7hnprhnpnhn4jhnpbhn4Hhnpvhnpjhnr3hnpnhnpPhnrbhnpHhnrggKOGemuGeoOGevOGej+GeiuGem+GfiyA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8wIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWtuLXJJTi9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMta24tcklOL3N0cmluZ3MueG1sCmluZGV4IDE3Y2NiZDEuLmYwODM3MDIgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMta24tcklOL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMta24tcklOL3N0cmluZ3MueG1sCkBAIC0yMjMsNiArMjIzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9ja2Rvd24iIG1zZ2lkPSI4NzUxNTQyNTE0NzI0MzMyODczIj4i4LKI4LKXIOCysuCyvuCyleCzjSDgsq7gsr7gsqHgsr8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+Ijk5OSsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fY2hpbGRyZW5fY291bnRfYnJhY2tldGVkIiBtc2dpZD0iMTc2OTQyNTQ3MzE2ODM0NzgzOSI+Iig8eGxpZmY6ZyBpZD0iTk9USUZJQ0FUSU9OQ09VTlQiPiVkPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4i4LK14LK/4LK34LKv4LKX4LKz4LKo4LON4LKo4LOBIOCyruCysOCzhuCyruCyvuCyoeCysuCyvuCyl+Cyv+CypuCzhiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+IuCyuOCzgeCysOCyleCzjeCyt+Cyv+CypCDgsq7gs4vgsqHgs40iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiJBbmRyb2lkIOCyuOCyv+CyuOCzjeCyn+CygiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4i4LK14LOI4LKv4LKV4LON4LKk4LK/4LKVIjwvc3RyaW5nPgpAQCAtMzUzLDggKzM1NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4i4LKV4LON4LKv4LK+4LKu4LKw4LK+IOCyruCzguCysuCylSDgsprgsr/gsqTgs43gsrDgspfgsrPgs4Eg4LKu4LKk4LON4LKk4LOBIOCyteCzgOCyoeCyv+Cyr+CziuCyl+Cys+CyqOCzjeCyqOCzgSDgsrjgs4bgsrDgs4bgsrngsr/gsqHgsr/gsq/gsrLgs4Eg4LKF4LKq4LON4LKy4LK/4LKV4LOH4LK24LKo4LON4oCN4oCN4LKX4LOGIOCyheCyteCyleCyvuCytiDgsq7gsr7gsqHgsr/gspXgs4rgsqHgs4HgsqTgs43gsqTgsqbgs4YuIOCyiCDgsoXgsqjgs4Hgsq7gsqTgsr/gsq/gs4Eg4LKo4LK/4LKu4LON4LKuIOCyluCyvuCypOCysOCyvyDgsofgsrLgs43gsrLgsqbgs4bgsq/gs4cg4LKv4LK+4LK14LOB4LKm4LOHIOCyuOCyruCyr+CypuCysuCzjeCysuCyvyDgspXgs43gsq/gsr7gsq7gsrDgsr7gsrXgsqjgs43gsqjgs4Eg4LKs4LKz4LK44LKy4LOBIOCyheCyquCzjeCysuCyv+CyleCzh+CytuCyqOCzjeKAjeKAjeCyl+CzhiDgsoXgsqjgs4Hgsq7gsqTgsr/gsrjgs4HgsqTgs43gsqTgsqbgs4YuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl92aWJyYXRlIiBtc2dpZD0iNzY5NjQyNzAyNjA1NzcwNTgzNCI+IuCyteCziOCyrOCzjeCysOCzh+Cyt+CyqOCzjeKAjOKAjCDgsqjgsr/gsq/gsoLgsqTgs43gsrDgsr/gsrjgsr8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+IuCyteCziOCyrOCzjeCysOCzh+Cyn+CysOCzjeKAjCDgsqjgsr/gsq/gsoLgsqTgs43gsrDgsr/gsrjgsrLgs4Eg4LKF4LKq4LON4LKy4LK/4LKV4LOH4LK24LKo4LON4oCM4LKX4LOGIOCyheCyqOCzgeCyruCypOCyv+CyuOCzgeCypOCzjeCypOCypuCzhi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4i4LKr4LON4LKy4LON4LKv4LK+4LK24LON4oCM4LKy4LOI4LKf4LONIOCyqOCyv+Cyr+CyguCypOCzjeCysOCyv+CyuOCyvyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4i4LKr4LON4LKy4LON4LKv4LK+4LK24LON4oCM4LKy4LOI4LKf4LONIOCyqOCyv+Cyr+CyguCypOCzjeCysOCyv+CyuOCysuCzgSDgsoXgsqrgs43gsrLgsr/gspXgs4fgsrbgsqjgs43igIzigIzgspfgs4Yg4LKF4LKo4LOB4LKu4LKk4LK/4LK44LOB4LKk4LON4LKk4LKm4LOGLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+IuCyq+Czi+CyqOCzjSDgsrjgsoLgspbgs43gsq/gs4bgspfgsrPgsr/gspfgs4Yg4LKo4LOH4LKw4LK14LK+4LKX4LK/IOCyleCysOCzhiDgsq7gsr7gsqHgsr8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4i4LKo4LK/4LKu4LON4LKuIOCyueCyuOCzjeCypOCyleCzjeCyt+Czh+CyqiDgsofgsrLgs43gsrLgsqbgs4bgsq/gs4cg4LKr4LOL4LKo4LON4oCNIOCyuOCyguCyluCzjeCyr+CzhuCyl+Cys+Cyv+Cyl+CzhiDgspXgsrDgs4Yg4LKu4LK+4LKh4LKy4LOBIOCyheCyquCzjeCysuCyv+CyleCzh+CytuCyqOCzjeKAjeKAjeCyl+CzhiDgsoXgsqjgs4Hgsq7gsqTgsr/gsrjgs4HgsqTgs43gsqTgsqbgs4YuIOCyh+CypuCzgSDgsoXgsqjgsr/gsrDgs4DgspXgs43gsrfgsr/gsqQg4LK24LOB4LKy4LON4LKV4LKX4LKz4LOBIOCyheCypeCyteCyviDgspXgsrDgs4bgspfgsrPgsr/gspfgs4Yg4LKV4LK+4LKw4LKj4LK14LK+4LKX4LKs4LK54LOB4LKm4LOBLiDgsqTgs4HgsrDgs43gsqTgs4Eg4LK44LKC4LKW4LON4LKv4LOG4LKX4LKz4LK/4LKX4LOGIOCyleCysOCzhuCyruCyvuCyoeCysuCzgSDgsogg4LKF4LKq4LON4LKy4LK/4LKV4LOH4LK24LKo4LON4oCNIOCyheCyqOCzgeCyruCypOCyv+CyuOCzgeCyteCzgeCypuCyv+CysuCzjeCysiDgso7gsoLgsqzgs4Hgsqbgs4Eg4LKX4LKu4LKo4LKm4LKy4LON4LKy4LK/4LKw4LKy4LK/LiDgsqbgs4HgsrDgs4Hgsqbgs43gsqbgs4fgsrbgsqrgs4LgsrDgsr/gsqQg4LKF4LKq4LON4LKy4LK/4LKV4LOH4LK24LKo4LON4oCN4oCN4LKX4LKz4LOBIOCyqOCyv+CyruCzjeCyriDgspbgsr7gsqTgsrDgsr8g4LKH4LKy4LON4LKy4LKm4LOG4LKv4LOHIOCyleCysOCzhuCyl+Cys+CyqOCzjeCyqOCzgSDgsq7gsr7gsqHgs4HgsrXgs4HgsqbgsrAg4LKu4LOC4LKy4LKVIOCyqOCyv+CyruCzjeCyriDgsrngsqMg4LKW4LKw4LON4LKa4LK+4LKX4LKs4LK54LOB4LKm4LOBLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiIG1zZ2lkPSIzNTc0OTQzODQ3MTgxNzkzOTE4Ij4iSU1TIOCyleCysOCzhiDgsrjgs4fgsrXgs4bgsq/gsqjgs43gsqjgs4Eg4LKq4LON4LKw4LK14LOH4LK24LK/4LK44LK/Ijwvc3RyaW5nPgpAQCAtODU4LDEwICs4NTcsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiLgspXgsqTgs43gsqTgsrDgsr/gsrjgs4EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+IuCyqOCyleCysuCyv+CyuOCzgSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+IuCyheCyguCyn+Cyv+CyuOCyvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4i4LK44LKw4LKzIOCyquCyoOCzjeCyr+CypuCyguCypOCzhiDgsoXgsoLgsp/gsr/gsrjgs4EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXBsYWNlIiBtc2dpZD0iNTc4MTY4NjA1OTA2MzE0ODkzMCI+IuCyuOCzjeCypeCyvuCyqOCyvuCyguCypOCysOCyv+CyuOCzgS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZSIgbXNnaWQ9IjYwOTg2ODQ4NDQwMjE2OTc3ODkiPiLgsoXgsrPgsr/gsrjgs4EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IlVSTCDgsqjgspXgsrLgsr/gsrjgs4EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiLgsqrgsqDgs43gsq/gsrXgsqjgs43gsqjgs4Eg4LKG4LKv4LON4LKV4LOG4LKu4LK+4LKh4LK/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiLgsrDgsqbgs43gsqbgs4Hgspfgs4rgsrPgsr/gsrjgsr8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+IuCyquCzgeCyqOCygyDgsq7gsr7gsqHgs4EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4i4LKq4LKg4LON4LKv4LKmIOCyhuCyr+CzjeCyleCzhiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiLgsqjgsr/gspjgsoLgsp/gsr/gspfgs4Yg4LK44LOH4LKw4LK/4LK44LK/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiLgsoXgsrPgsr/gsrjgs4EiPC9zdHJpbmc+CkBAIC0xMTA3LDYgKzExMDksNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4i4LK14LK+4LKy4LON4oCM4LKq4LOH4LKq4LKw4LONIOCyrOCypuCysuCyv+CyuOCyvyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+IuCyheCyp+Cyv+CyuOCzguCymuCyqOCzhiDgspXgs4fgsrPgs4HgspciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+IuCyleCyguCyoeCzgOCytuCyqOCzjSDgsqrgs4LgsrDgs4jgspXgs4bgsqbgsr7gsrDgsrDgs4EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiLgsoXgsqfgsr/gsrjgs4Lgsprgsqjgs4Yg4LK44LK54LK+4LKv4LKVIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJWUE4g4LK44LKV4LON4LKw4LK/4LKv4LKX4LOK4LKC4LKh4LK/4LKm4LOGIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IOCyruCzguCysuCylSBWUE4g4LK44LKV4LON4LKw4LK/4LKv4LKX4LOK4LKC4LKh4LK/4LKm4LOGIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4i4LKo4LOG4LKf4LON4oCN4LK14LKw4LON4LKV4LONIOCyqOCyv+CysOCzjeCyteCyueCyv+CyuOCysuCzgSDgsrjgs43gsqrgsrDgs43gsrbgsr/gsrjgsr8iPC9zdHJpbmc+CkBAIC0xNDQwLDEyICsxNDQzLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4i4LKo4LK/4LKu4LON4LKuIOCyqOCyv+CysOCzjeCyteCyvuCyueCyleCysOCyv+CyguCypiDgsqjgsrXgs4DgspXgsrDgsr/gsrjgsrLgsr7gspfgsr/gsqbgs4YiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX2RlbGV0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iNzY1MDU3NzM4NzQ5MzEwMTM1MyI+IuCyqOCyv+CyruCzjeCyriDgsqjgsr/gsrDgs43gsrXgsr7gsrngspXgsrDgsr/gsoLgsqYg4LKF4LKz4LK/4LK44LKy4LK+4LKX4LK/4LKm4LOGIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiLgsqjgsr/gsq7gs43gsq4g4LKs4LON4LKv4LK+4LKf4LKw4LK/4LKvIOCyrOCyvuCys+Cyv+CyleCzhuCyr+CyqOCzjeCyqOCzgSDgsrjgs4Hgsqfgsr7gsrDgsr/gsrjgsrLgs4Eg4LK44LK54LK+4LKvIOCyruCyvuCyoeCysuCzgSwg4LKs4LON4LKv4LK+4LKf4LKw4LK/IOCyieCys+Cyv+CyleCzhuCyr+CzgSDgsqjgsr/gsq7gs43gsq4g4LK44LK+4LKn4LKo4LKmIOCyleCyvuCysOCzjeCyr+CyleCzjeCyt+CyruCypOCzhuCyr+CyqOCzjeCyqOCzgSDgspXgsqHgsr/gsq7gs4Yg4LKu4LK+4LKh4LOB4LKk4LON4LKk4LKm4LOGIOCyruCypOCzjeCypOCzgSDgsrXgs4jgsqzgs43gsrDgs4fgsrfgsqjgs40sIOCyuOCzjeCypeCysyDgsrjgs4fgsrXgs4bgspfgsrPgs4Eg4LK54LK+4LKX4LOCIOCyueCzhuCymuCzjeCymuCyv+CyqCDgsrngsr/gsqjgs43gsqjgs4bgsrLgs4Yg4LKh4LOH4LKf4LK+4LK14LKo4LON4LKo4LOBIOCyruCyv+CypOCyv+Cyl+CziuCys+Cyv+CyuOCzgeCypOCzjeCypOCypuCzhi4g4LK44LK/4LKC4LKV4LONIOCyruCyvuCyoeCzgeCyteCzgeCypuCyqOCzjeCyqOCzgSDgsoXgsrXgsrLgsoLgsqzgsr/gsrjgsr/gsrDgs4HgsrUg4LKH4LKu4LOH4LKy4LONLCDgsrjgsoLgsqbgs4fgsrYg4LKV4LKz4LOB4LK54LK/4LK44LOB4LK14LK/4LKV4LOGLCDgsq7gsqTgs43gsqTgs4Eg4LKH4LKk4LKwIOCyheCyquCzjeCysuCyv+CyleCzh+CytuCyqOCzjeKAjOCyl+Cys+CzgSDgsqjgs4DgsrXgs4Eg4LKk4LOG4LKw4LOG4LKv4LKmIOCyueCziuCysOCypOCzgSDgsqjgsrXgs4DgspXgsrDgsqPgspfgs4rgsrPgs43gsrPgs4HgsrXgs4Hgsqbgsr/gsrLgs43gsrIuXG5cbuCyqOCyv+CyruCzjeCyriDgsrjgsr7gsqfgsqjgsrXgs4Eg4LKa4LK+4LKw4LON4LKc4LONIOCyhuCyl+CzgeCypOCzjeCypOCyv+CysOCzgeCytSDgsrjgsq7gsq/gsqbgsrLgs43gsrLgsr8g4LKs4LON4LKv4LK+4LKf4LKw4LK/IOCyieCys+Cyv+CyleCzhuCyr+CzgSDgsobgsqvgs40g4LKG4LKX4LOB4LKk4LON4LKk4LKm4LOGLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX3RpdGxlIiBtc2dpZD0iNzQ5Mzk4OTcyMjYxMDAwODcwMCI+IuCyquCzjeCysOCyvuCyruCzgeCyluCzjeCyr+CypOCzhiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSI3MTE4ODI2OTAwNzY3MDQ3MTI1Ij4i4LKo4LK/4LKw4LON4LKs4LKC4LKn4LK/4LK44LKy4LK+4LKX4LK/4LKm4LOGOiDgsogg4LKF4LKn4LK/4LK44LOC4LKa4LKo4LOG4LKX4LKz4LKo4LON4LKo4LOBIOCyjuCyguCypuCyv+Cyl+CzgiDgsqTgs4vgsrDgsr/gsrjgsqzgs4fgsqEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4i4LKV4LKh4LK/4LKu4LOGOiDgsoXgsqfgsr/gsrjgs4Lgsprgsqjgs4Yg4LKq4LKf4LON4LKf4LK/4LKvIOCyleCzhuCys+CyreCyvuCyl+CypuCysuCzjeCysuCyvyDgsrjgs43gsqXgsqzgs43gsqfgsrXgsr7gspfgsr8g4LKk4LOL4LKw4LK/4LK44LOBIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiLgsrjgsr7gsq7gsr7gsqjgs43gsq86IOCyiCDgsoXgsqfgsr/gsrjgs4Lgsprgsqjgs4bgspfgsrPgsqjgs43gsqjgs4Eg4LK44LON4LKl4LKs4LON4LKn4LK14LK+4LKX4LK/IOCypOCzi+CysOCyv+CyuOCzgSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMTUyMjM4NjM3NzM3MjE1NjU0Ij4i4LKF4LKn4LK/4LKVOiDgsoXgsqfgsr/gsrjgs4Lgsprgsqjgs4bgspfgsrMg4LKq4LKf4LON4LKf4LK/4LKvIOCyruCzh+CysuCzjeCyreCyvuCyl+CypuCysuCzjeCysuCyvyDgsqTgs4vgsrDgsr/gsrjgs4Eg4LKu4LKk4LON4LKk4LOBIOCyp+CzjeCyteCyqOCyvyDgsq7gsr7gsqHgs4EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSIxMTUzNjkzMDgwNDY3OTA0NDc0Ij4i4LKk4LOB4LKw4LON4LKk4LOBOiDgsqrgsrDgsqbgs4bgsq/gsqjgs43gsqjgs4Eg4LK14LOA4LKV4LON4LK34LK/4LK44LK/IOCyruCypOCzjeCypOCzgSDgsqfgs43gsrXgsqjgsr8g4LKu4LK+4LKh4LOBIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+JTEkZCDgsqjgsr/gsq7gsr/gsrfgspfgsrPgsrXgsrDgs4bgspfgs4YgKDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+IOCyteCysOCzhuCyl+Czhik8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPiUxJGQg4LKo4LK/4LKu4LK/4LK34LKX4LKz4LK14LKw4LOG4LKX4LOGICg8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPiDgsrXgsrDgs4bgspfgs4YpPC9pdGVtPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1rby9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMta28vc3RyaW5ncy54bWwKaW5kZXggYTc4MDM3Zi4uYzhmMDhjNyAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1rby9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWtvL3N0cmluZ3MueG1sCkBAIC0yMjMsNiArMjIzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9ja2Rvd24iIG1zZ2lkPSI4NzUxNTQyNTE0NzI0MzMyODczIj4i7KeA6riIIOyeoOq3uOq4sCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+6rCcKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLsiKjqsqjsp4Qg7L2Y7YWQ7LigIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4i7JWI7KCEIOuqqOuTnCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+IkFuZHJvaWQg7Iuc7Iqk7YWcIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNlcl9vd25lcl9sYWJlbCIgbXNnaWQ9IjI4MDQzNTE4OTgwMDEwMzg5NTEiPiLqsJzsnbgiPC9zdHJpbmc+CkBAIC0zNTMsOCArMzU0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiLslbHsnbQg7Lm066mU652866GcIOyCrOynhOqzvCDrj5nsmIHsg4HsnYQg7LCN7J2EIOyImCDsnojrj4TroZ0g7ZeI7Jqp7ZWp64uI64ukLiDsnbQg6raM7ZWc7J2EIOyCrOyaqe2VmOuptCDslbHsnbQg7Ja47KCc65Og7KeAIOyCrOyaqeyekOydmCDtmZXsnbgg7JeG7J20IOy5tOuplOudvOulvCDsgqzsmqntlaAg7IiYIOyeiOyKteuLiOuLpC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4i7KeE64+ZIOygnOyWtCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4i7JWx7J20IOynhOuPmeydhCDsoJzslrTtlaAg7IiYIOyeiOuPhOuhnSDtl4jsmqntlanri4jri6QuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mbGFzaGxpZ2h0IiBtc2dpZD0iMjE1NTkyMDgxMDEyMTk4NDIxNSI+Iuy5tOuplOudvCDtlIzrnpjsi5wg7KCc7Ja0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiLslbHsnbQg7Lm066mU6528IO2UjOuemOyLnOulvCDsoJzslrTtlaAg7IiYIOyeiOuPhOuhnSDtl4jsmqntlanri4jri6QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4i7KCE7ZmU67KI7Zi4IOyekOuPmSDsl7DqsrAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4i7JWx7J20IOyCrOyaqeyekOydmCDsobDsnpEg7JeG7J20IOyghO2ZlOuyiO2YuOuhnCDsoITtmZTrpbwg6rG4IOyImCDsnojrj4TroZ0g7ZeI7Jqp7ZWp64uI64ukLiDsnbQg6rK97JqwIOyYiOyDgey5mCDrqrvtlZwg7Ya17ZmUIOyalOq4iOydtCDrtoDqs7zrkKAg7IiYIOyeiOyKteuLiOuLpC4g7JWx7J20IOu5hOyDgSDsoITtmZTrpbwg6rG464+E66GdIO2VmOuKlCDqtoztlZzsnYAg7KO87Ja07KeA7KeAIOyViuyKteuLiOuLpC4g7JWF7ISxIOyVseydtCDsgqzsmqnsnpDsnZgg7ZmV7J24IOyXhuydtCDsoITtmZTrpbwg6rG47Ja0IOyalOq4iOydtCDrtoDqs7zrkKAg7IiYIOyeiOyKteuLiOuLpC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ltc0NhbGxTZXJ2aWNlIiBtc2dpZD0iMzU3NDk0Mzg0NzE4MTc5MzkxOCI+IklNUyDthrXtmZQg7ISc67mE7Iqk7JeQIOyVoeyEuOyKpCI8L3N0cmluZz4KQEAgLTg1OCwxMCArODU3LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJjdXQiIG1zZ2lkPSIzMDkyNTY5NDA4NDM4NjI2MjYxIj4i7J6Y652864K06riwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weSIgbXNnaWQ9IjI2ODE5NDYyMjk1MzM1MTE5ODciPiLrs7XsgqwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiLrtpnsl6zrhKPquLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXN0ZV9hc19wbGFpbl90ZXh0IiBtc2dpZD0iNTQyNzc5Mjc0MTkwODAxMDY3NSI+IuydvOuwmCDthY3siqTtirjroZwg67aZ7Jes64Sj6riwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiLrsJTqvrjquLAuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4i7IKt7KCcIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiJVUkwg67O17IKsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4i7YWN7Iqk7Yq4IOyEoO2DnSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVuZG8iIG1zZ2lkPSI3OTA1Nzg4NTAyNDkxNzQyMzI4Ij4i7Iuk7ZaJ7Leo7IaMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiLri6Tsi5wg7Iuk7ZaJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGV4dFNlbGVjdGlvbkNBQlRpdGxlIiBtc2dpZD0iNTIzNjg1MDM5NDM3MDgyMDM1NyI+Iu2FjeyKpO2KuCDshKDtg50iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4i7IKs7KCE7JeQIOy2lOqwgCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4i7IKt7KCcIjwvc3RyaW5nPgpAQCAtMTEwNyw2ICsxMTA5LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+IuuwsOqyve2ZlOuptCDrs4Dqsr0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiLslYzrprwg7IiY7Iug6riwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiLsobDqsbQg7KCc6rO17J6QIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2Fzc2lzdGFudF9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iOTA5NDU2MDU1NTY5MTAyOTUyIj4i7JWM66a8IOyWtOyLnOyKpO2EtO2KuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iVlBO7J20IO2ZnOyEse2ZlOuQqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+IlZQTuydtCA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz7sl5Ag7J2Y7ZW0IO2ZnOyEse2ZlOuQqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0IiBtc2dpZD0iMzAxMTMwNjYwNzEyNjQ1MDMyMiI+IuuEpO2KuOybjO2BrOulvCDqtIDrpqztlZjroKTrqbQg7YSw7LmY7ZWY7IS47JqULiI8L3N0cmluZz4KQEAgLTE0NDAsMTIgKzE0NDMsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV91cGRhdGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijg4NTY2MzEzMjI0NDAxODcwNzEiPiLqtIDrpqzsnpDsl5Ag7J2Y7ZW0IOyXheuNsOydtO2KuOuQqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4i6rSA66as7J6Q6rCAIOyCreygnO2VqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4i67Cw7YSw66asIOyImOuqhSDqsJzshKDsnYQg7JyE7ZW0LCDrsLDthLDrpqwg7IS47J2067KE64qUIOq4sOq4sOydmCDshLHriqXsnYQg7KSE7J206rOgIOynhOuPmSwg7JyE7LmYIOyEnOu5hOyKpCDrsI8g64yA67aA67aE7J2YIOuwseq3uOudvOyatOuTnCDrjbDsnbTthLDrpbwg7KCc7ZWc7ZWp64uI64ukLiDsnbTrqZTsnbwsIOuplOyLnOyngCDrsI8g64+Z6riw7ZmU7JeQIOydmOyhtO2VmOuKlCDquLDtg4Ag7JWx7J2AIOyVseydhCDsl7Qg65WM6rmM7KeAIOyXheuNsOydtO2KuOuQmOyngCDslYrsnYQg7IiYIOyeiOyKteuLiOuLpC5cblxu67Cw7YSw66asIOyEuOydtOuyhOuKlCDquLDquLDrpbwg7Lap7KCEIOykkeydvCDrlYzripQg7J6Q64+Z7Jy866GcIOyCrOyaqSDspJHsp4DrkKnri4jri6QuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfdGl0bGUiIG1zZ2lkPSI3NDkzOTg5NzIyNjEwMDA4NzAwIj4i7KSR7JqU64+EIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiLssKjri6g6IOyVjOumvCDri6Tsi5wg7ZGc7IucIOyViO2VqCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjY0NDc2NDA0NDk5MTg0MjcxODciPiLrgq7snYw6IOyVjOumvCDrqqnroZ0g7ZWY64uo7JeQIOustOydjOycvOuhnCDtkZzsi5wiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNzk5MTE1NzY5NzYwOTU3NTI3MSI+IuydvOuwmDog66y07J2M7Jy866GcIOyVjOumvCDtkZzsi5wiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzE1MjIzODYzNzczNzIxNTY1NCI+IuuGkuydjDog7JWM66a8IOuqqeuhnSDsg4Hri6jsl5Ag7ZGc7Iuc7ZWY6rOgIOyGjOumrOuhnCDslYzrprwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSIxMTUzNjkzMDgwNDY3OTA0NDc0Ij4i6ri06riJOiDtmZTrqbTsl5Ag7ZGc7Iuc7ZWY6rOgIOyGjOumrOuhnCDslYzrprwiPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0iemVuX21vZGVfZHVyYXRpb25fbWludXRlc19zdW1tYXJ5IiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNDM2Nzg3NzQwODA3MjAwMDg0OCI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPiUxJGTrtoQg64+Z7JWIKDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+6rmM7KeAKTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjHrtoQg64+Z7JWIKDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzAiPiUyJHM8L3hsaWZmOmc+6rmM7KeAKTwvaXRlbT4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMta3ktcktHL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1reS1yS0cvc3RyaW5ncy54bWwKaW5kZXggOWQyYzgwYzMuLjRkODQ5MzMgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMta3ktcktHL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMta3ktcktHL3N0cmluZ3MueG1sCkBAIC0yMjMsNiArMjIzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9ja2Rvd24iIG1zZ2lkPSI4NzUxNTQyNTE0NzI0MzMyODczIj4i0JDQt9GL0YAg0LrRg9C70L/Rg9C70L7QviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLQnNCw0LfQvNGD0L3QtNCw0YAg0LbQsNGI0YvRgNGL0LvQs9Cw0L0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiLQmtC+0L7Qv9GB0YPQtyDRgNC10LbQuNC8Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4iQW5kcm9pZCDQotGD0YLRg9C80YMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+ItCW0LXQutC1Ijwvc3RyaW5nPgpAQCAtMzUzLDggKzM1NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4i0JrQvtC70LTQvtC90LzQvtCz0L4g0LrQsNC80LXRgNCwINCw0YDQutGL0LvRg9GDINCy0LjQtNC10L4g0LbQsNC90LAg0YHSr9GA06nRgiDRgtCw0YDRgtGD0YMg0YPRgNGD0LrRgdCw0YLRi9C9INCx0LXRgNC10YIuINCR0YPQuyDRg9GA0YPQutGB0LDRgiwg0LrQsNC80LXRgNCw0L3RiyDQutCw0LDQu9Cw0LPQsNC9INGD0LHQsNC60YLQsCwg0YHQuNC30LTQuNC9INGL0YDQsNGB0YLQvtC+0qPRg9C30YHRg9C3INC60L7Qu9C00L7QvdGD0YMg0YPRgNGD0LrRgdCw0YLRi9C9INCx0LXRgNC10YIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl92aWJyYXRlIiBtc2dpZD0iNzY5NjQyNzAyNjA1NzcwNTgzNCI+ItGC0LjRgtC40YDTqdOp0L3SryDQsdCw0YjQutCw0YDRg9GDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiLQmtC+0LvQtNC+0L3QvNC+0LPQviDQtNC40YDQuNC70LTQtdCz0LjRh9GC0Lgg0LrTqdC306nQvNOp0LvQtNOp06kg0LzSr9C80LrSr9C90YfSr9C70q/Qs9Kv0L0g0LHQtdGA0LXRgi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4i0LrQvtC7INGH0YvRgNCw0LrRgtGLINC606nQt9Op0LzTqdC70LTTqdOpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiLQmtC+0LvQtNC+0L3QvNC+0LPQviDQutC+0LvRh9GL0YDQsNC60YLRiyDQutOp0LfTqdC806nQu9C006nTqSDQvNKv0LzQutKv0L3Rh9Kv0LvSr9Cz0q/QvSDQsdC10YDQtdGCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+ItGC0LXQu9C10YTQvtC9INC90L7QvNC10YDQu9C10YDQuNC90LUg0YLSr9C3INGH0LDQu9GD0YMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4i0JrQvtC70LTQvtC90LzQvtCz0L4g0YHQuNC30LTQuNC9INC60LDRgtGL0YjRg9GD0qPRg9C30YHRg9C3INGC0LXQu9C10YTQvtC9INC90L7QvNGD0YDQu9Cw0YDQs9CwINGH0LDQu9GD0YMg0YPRgNGD0LrRgdCw0YLRi9C9INCx0LXRgNC10YIuINCR0YPQuyDRgdC40Lcg0LrSr9GC0L/TqdCz06nQvSDRh9GL0LPRi9C80LTQsNGA0LPQsCDQttC1INGH0LDQu9GD0YPQu9Cw0YDQs9CwINCw0LvRi9C/INC60LXQu9C40YjQuCDQvNKv0LzQutKv0L0uINCR0YPQuyDQutGD0YLQutCw0YDRg9GD0YfRg9C70LDRgNC00YvQvSDQvdC+0LzRg9GA0LvQsNGA0YvQvdCwINGH0LDQu9GD0YPQs9CwINGD0YDRg9C60YHQsNGCINCx0LXRgNCx0LXQuSDRgtGD0YDQs9Cw0L3QtNGL0LPRi9C9INGN0YHQutC1INCw0LvRi9Kj0YvQty4g0JfRi9GP0L3QtNGD0YMg0LrQvtC70LTQvtC90LzQvtC70L7RgCwg0YHQuNC30LTQuNC9INGL0YDQsNGB0YLQvtC+0qPRg9C30YHRg9C3INGH0LDQu9GD0YPQu9Cw0YDQtNGLINCw0YLQutCw0YDRi9C/LCDQutOp0L8g0YfRi9Cz0YvQvNC00LDRgNCz0LAg0YHQtdCx0LXQv9C60LXRgCDQsdC+0LvRg9GI0YMg0LzSr9C80LrSr9C9LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiIG1zZ2lkPSIzNTc0OTQzODQ3MTgxNzkzOTE4Ij4iSU1TINGH0LDQu9GD0YMg0LrRi9C30LzQsNGC0YvQvdCwINC80q/QvNC60q/QvdGH0q/Qu9Kv0Log0LDQu9GD0YMiPC9zdHJpbmc+CkBAIC04NTksMTAgKzg1OCwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+ItCa0LXRgdKv0q8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+ItCa06nRh9Kv0YDSr9KvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzdGUiIG1zZ2lkPSI1NjI5ODgwODM2ODA1MDM2NDMzIj4i0KfQsNC/0YLQvtC+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiLQltOp0L3TqdC606nQuSDRgtC10LrRgdGCINC60LDRgtCw0YDRiyDRh9Cw0L/RgtC+0L4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXBsYWNlIiBtc2dpZD0iNTc4MTY4NjA1OTA2MzE0ODkzMCI+ItCQ0LvQvNCw0YjRgtGL0YDRg9GD4oCmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+ItCW0L7QuiDQutGL0LvRg9GDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiJVUkwg0LrTqdGH0q/RgNC806nQu9Op06kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiLQotC10LrRgdGCINGC0LDQvdC00L7QviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVuZG8iIG1zZ2lkPSI3OTA1Nzg4NTAyNDkxNzQyMzI4Ij4i0JDRgNGC0LrQsCDQutCw0LnRgtCw0YDRg9GDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiLQmtCw0LnRgtCw0LvQvtC+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGV4dFNlbGVjdGlvbkNBQlRpdGxlIiBtc2dpZD0iNTIzNjg1MDM5NDM3MDgyMDM1NyI+ItCi0LXQutGB0YIg0YLQsNC90LTQvtC+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWRkVG9EaWN0aW9uYXJ5IiBtc2dpZD0iNDM1MjE2MTUzNDUxMDA1Nzg3NCI+ItCh06nQt9C00q/QutC606kg0LrQvtGI0YPRgyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4i0JbQvtC6INC60YvQu9GD0YMiPC9zdHJpbmc+CkBAIC0xMTA4LDYgKzExMTAsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4i0KLRg9GI0LrQsNCz0LDQt9C00Ysg06nQt9Cz06nRgNGC0q/SryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+ItCt0YHQutC10YDRgtKv0q8g0YLRi9Kj0YjQsNCz0YvRh9GLIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiLQqNCw0YDRgiDRgtKv0LfSr9Kv0YfSryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9hc3Npc3RhbnRfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjkwOTQ1NjA1NTU2OTEwMjk1MiI+ItCt0YHQutC10YDRgtC80LUg0LbQsNGA0LTQsNC80YfRi9GB0YsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IlZQTiDQuNGI0YLQtdGC0LjQu9C00LgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiJWUE4gPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+INCw0YDQutGL0LvRg9GDINC20LDQvdC00YvRgNGL0LvQtNGLIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4i0LbQtdC70LXQvdC4INCx0LDRiNC60LDRgNGD0YMg0q/Rh9Kv0L0g0LHQsNGB0YvSo9GL0LcuIjwvc3RyaW5nPgpAQCAtMTQ0MSwxMiArMTQ0NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+ItCQ0LTQvNC40L3QuNGB0YLRgNCw0YLQvtGA0YPSo9GD0Lcg0LbQsNKj0YvRgNGC0LrQsNC9Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiLQkNC00LzQuNC90LjRgdGC0YDQsNGC0L7RgNGD0qPRg9C3INGC0LDRgNCw0LHRi9C90LDQvSDQttC+0Log0LrRi9C70YvQvdCz0LDQvSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4i0JHQsNGC0LDRgNC10Y/QvdGL0L0g06nQvNKv0YDSr9C9INGD0LfQsNGA0YLRg9GDINKv0YfSr9C9LCDQsdCw0YLQsNGA0LXRj9C90Ysg0q/QvdOp0LzQtNOp0LPSr9GHINGC0q/Qt9C806nQs9Kv0qPSr9C30LTSr9C9INC40YjQuNC90LjQvSDQvNCw0LnQvdCw0L/RgtGD0YPQu9GD0LPRg9C9INCw0LfQsNC50YLRi9C/LCDQtNC40YDQuNC70LTTqdOpLCDQttCw0LnQs9Cw0YjQutCw0L0g0LbQtdGA0LTQuCDQsNC90YvQutGC0L7QviDQutGL0LfQvNCw0YLRgtCw0YDRiyDQttCw0L3QsCDRhNC+0L3QtNGD0Log0LTQsNC50YvQvdC00LDRgNC00YvQvSDQutOp0L/Rh9Kv0LvSr9Cz0q/QvSDRh9C10LrRgtC10L8g0LrQvtGR0YIuINCt0LvQtdC60YLRgNC+0L3QtNGD0Log0L/QvtGH0YLQsCwg0LHQuNC70LTQuNGA0q/SryDQttCw0LfRi9GI0YPRgyDQttCw0L3QsCDQsdCw0YjQutCwINGI0LDQudC60LXRiNGC0LXRiNGC0LjRgNKv0q/Qs9OpINCx0LDQudC70LDQvdGL0YjRgtGD0YMg0LrQvtC70LTQvtC90LzQvtC70L7RgCDQsNGH0YvQu9C80LDQudGL0L3Rh9CwINC20LDSo9GL0YDRgtGL0LvQsdCw0Lkg0LrQsNC70YvRiNGLINC80q/QvNC60q/QvS5cblxu0JHQsNGC0LDRgNC10Y8g0q/QvdOp0LzQtNOp0LPSr9GHINGC0q/Qt9C806nQs9Kv0qPSr9C3INC60YPQsdCw0YLRgtCw0LvRi9C/INC20LDRgtC60LDQvdC00LAg0LDQstGC0L7QvNCw0YLRgtGL0Log0YLSr9GA0LTTqSDTqdGH0q/QvyDQutCw0LvQsNGCLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX3RpdGxlIiBtc2dpZD0iNzQ5Mzk4OTcyMjYxMDAwODcwMCI+ItCc0LDQsNC90LjQu9Kv0q/Qu9Kv0LPSryI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSI3MTE4ODI2OTAwNzY3MDQ3MTI1Ij4i0JHTqdCz06nRgtGC06nQu9Cz06nQvTog0JHRg9C7INGN0YHQutC10YDRgtC80LXQu9C10YAg0Y3RhyDQutCw0YfQsNC9INC606nRgNGB06nRgtKv0LvQsdOp0YHSr9C9Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNjQ0NzY0MDQ0OTkxODQyNzE4NyI+ItCi06nQvNOp0L06INCt0YHQutC10YDRgtC80LXQu9C10YAg0YLQuNC30LzQtdGB0LjQvdC40L0g0Y3SoyDRi9C70LTRi9C50YvQvdC00LAg0q/QvdGB0q/QtyDQutOp0YDRgdOp0YLSr9C70YHSr9C9Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiLQmtCw0LTQuNC80LrQuDog0JHRg9C7INGN0YHQutC10YDRgtC80LXQu9C10YAg0q/QvdGB0q/QtyDQutOp0YDRgdOp0YLSr9C70YHSr9C9Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiLQltC+0LPQvtGA0YM6INCt0YHQutC10YDRgtC80LXQu9C10YAg0YLQuNC30LzQtdGB0LjQvdC40L0g0Y3SoyDQttC+0LPQvtGA0YPRgdGD0L3QtNCwINKv0L0g0YfRi9Cz0LDRgNGL0L8g0LrTqdGA0YHTqdGC0q/Qu9GB0q/QvSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiLQqNCw0YjRi9C70YvRiDog0q7QvSDQvNC10L3QtdC9INC60L7RiNGC0L7Qu9GD0L8sINGN0LrRgNCw0L3Qs9CwINGH0YvQs9Cw0YDRi9C70YHRi9C9Ijwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj4lMSRkINC80q/QvdOp0YLQutOpICg8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPiDRh9C10LnQuNC9KTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPtCR0LjRgCDQvNKv0L3TqdGC0LrTqSAoPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMCI+JTIkczwveGxpZmY6Zz4g0YfQtdC50LjQvSk8L2l0ZW0+CkBAIC0xNTEyLDYgKzE1MDksNiBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IkNPVU5UXzAiPiUxJGQ8L3hsaWZmOmc+INGC0LDQvdC00LDQu9C00Ys8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9ub3RpZmljYXRpb25fdG9waWNfbGFiZWwiIG1zZ2lkPSIyMjc1ODYxNDU3OTE4NzA4MjkiPiLQmtCw0LvQs9Cw0L0t0LrQsNGC0LrQsNC90LTQsNGAIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3RvcGljIiBtc2dpZD0iMzU3MjI4MDQzOTg4MDAyMzIzMyI+ItCR0YPQuyDRjdGB0LrQtdGA0YLQvNC10LvQtdGA0LTQuNC9INC80LDQsNC90LjQu9Kv0q/Qu9Kv0LPSr9C9INGB0LjQtyDQutC+0LnQtNGD0qPRg9C3LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV9wZXJzb24iIG1zZ2lkPSI5MTYwMTMzNTk3MjYyOTM4Mjk2Ij4i0JDQs9CwINC60LDRgtGL0YjQutCw0L0g0LDQtNCw0LzQtNCw0YDQtNCw0L0g0YPQu9Cw0Lwg0LDQuyDQvNCw0LDQvdC40LvSr9KvLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV90b3BpYyIgbXNnaWQ9IjM1NzIyODA0Mzk4ODAwMjMyMzMiPiLQkdGD0Lsg0Y3RgdC60LXRgNGC0LzQtdC70LXRgNC00LjQvSDQvNCw0LDQvdC40LvSr9Kv0LvSr9Cz0q/QvSDQsdC10LvQs9C40LvQtdC00LjSo9C40LcuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3BlcnNvbiIgbXNnaWQ9IjkxNjAxMzM1OTcyNjI5MzgyOTYiPiLQkdGD0LvQsNGAINGB0LjQtyDSr9GH0q/QvSDQvNCw0LDQvdC40LvSr9KvINCw0LTQsNC80LTQsNGALiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1sYW5kL2NvbmZpZy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWxhbmQvY29uZmlnLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzA4ZGM1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1sYW5kL2NvbmZpZy54bWwKQEAgLTAsMCArMSwxOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhLS0KKyAgfiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICB+CisgIH4gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICB+CisgIH4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgfgorICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgfiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZQorICAtLT4KKzxyZXNvdXJjZXM+CisgICAgPGludGVnZXIgbmFtZT0iY29uZmlnX2RvY2tlZFN0YWNrRGl2aWRlclNuYXBNb2RlIj4yPC9pbnRlZ2VyPgorPC9yZXNvdXJjZXM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1sby1yTEEvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWxvLXJMQS9zdHJpbmdzLnhtbAppbmRleCAwNTEwYTI1Li4xMmQ2N2JiIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWxvLXJMQS9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWxvLXJMQS9zdHJpbmdzLnhtbApAQCAtMjIzLDYgKzIyMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2tkb3duIiBtc2dpZD0iODc1MTU0MjUxNDcyNDMzMjg3MyI+IuC6peC6seC6reC6geKAi+C6lOC6veC6p+KAi+C6meC6teC7iSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLgu4Dgupngurfgu4nguq3guqvgurLigIvgupbgurfguoHigIvgu4Dguorgurfgu4jguq3guofigIvgu4Tguqfgu4kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiJTYWZlIG1vZGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiLguqXgurDguprgurvgupogQW5kcm9pZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4i4oCL4Lqq4LuI4Lqn4LqZ4oCL4LuC4LqVIjwvc3RyaW5nPgpAQCAtMzUzLDggKzM1NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4i4Lqt4Lqw4LqZ4Lq44LqN4Lqy4LqU4LuD4Lqr4LuJ4LuB4Lqt4Lqx4Lqa4Lqv4LqW4LuI4Lqy4LqN4Lqu4Lq54LqaIOC7geC6peC6sOC6p+C6tOC6lOC6teC7guC6reC6lOC7ieC6p+C6jeC6geC7ieC6reC6h+C6luC7iOC6suC6jeC6ruC6ueC6mi4g4LqB4Lqy4LqZ4Lqt4Lqw4LqZ4Lq44LqN4Lqy4LqU4LqZ4Lq14LuJ4LqI4Lqw4Lqt4Lqy4LqZ4Lq44LqN4Lqy4LqU4LuD4Lqr4LuJ4LuB4Lqt4Lqx4Lqa4LqvIOC6quC6suC6oeC6suC6lOC7g+C6iuC7ieC6geC7ieC6reC6h+C6luC7iOC6suC6jeC6ruC6ueC6muC7hOC6lOC7ieC6leC6sOC6q+C6peC6reC6lOC7gOC6p+C6peC6siDgu4LgupTguo3guprgu43gu4jgupXgu4nguq3guofgupbgu4ngurLguoHgurLgupnguqLgurfgupnguqLgurHgupnguojgurLguoHgupfgu4jgurLgupkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl92aWJyYXRlIiBtc2dpZD0iNzY5NjQyNzAyNjA1NzcwNTgzNCI+IuC6hOC6p+C6muC6hOC6uOC6oeC6geC6suC6meC6quC6seC7iOC6mSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4i4Lqt4Lqw4LqZ4Lq44LqN4Lqy4LqU4LuD4Lqr4LuJ4LuB4Lqt4Lqx4Lqa4Lqv4LqE4Lqn4Lqa4LqE4Lq44Lqh4LuC4LqV4Lqq4Lqx4LuI4LqZLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiLguoTguqfguprguoTgurjguqHgu4Tgup/gu4Hgup/guqXgupQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+IuC6reC6sOC6meC6uOC6jeC6suC6lOC7g+C6q+C7ieC7geC6reC6seC6muC6ryDguoTguqfguprguoTgurjguqHgu4Tgup/gu4Hgup/guqXgupQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4i4LuC4LqX4Lqr4Lqy4LuA4Lqa4Lq14LuC4LqX4Lql4Lqw4Lqq4Lqx4Lqa4LuC4LqU4LqN4LqB4Lq74LqHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+IuC6reC6sOC6meC6uOC6jeC6suC6lOC7g+C6q+C7ieC7geC6reC6seC6muC6r+C7guC6l+C6q+C6suC7gOC6muC6teC7guC6l+C6peC6sOC6quC6seC6muC7hOC6lOC7iSDgu4LgupTguo3guprgu43gu4jgupXgu4nguq3guofgupbgu4ngurLguoHgurLgupngupTgurPgu4DgupngurXgupnguoHgurLgupngu4PgupTgu4bguojgurLguoHgupfgu4jgurLgupkuIOC6hOC6uOC6meC6quC6u+C6oeC6muC6seC6lOC6meC6teC7ieC6reC6suC6lOC6geC7jeC7iOC7g+C6q+C7ieC7gOC6geC6teC6lOC6hOC7iOC6suC7g+C6iuC7ieC6iOC7iOC6suC6jeC7g+C6meC6geC6suC6meC7guC6l+C6l+C6teC7iOC6muC7jeC7iOC6hOC6suC6lOC6hOC6tOC6lOC7hOC6lOC7iS4g4Lud4Lqy4LqN4LuA4Lqr4LqUOiDguoTgurjgupnguqrgurvguqHguprgurHgupTgupngurXgu4nguprgu43gu4jgu4TgupTgu4ngu4DgupvgurHgupnguoHgurLgupnguq3gurDgupngurjguo3gurLgupTgu4Pguqvgu4ngu4Hguq3gurHguprguq8g4Lqq4Lqy4Lqh4Lqy4LqU4LuC4LqX4Lqr4Lqy4LuA4Lqa4Lq14Lqq4Lq44LqB4LuA4Lqq4Lq14LqZLiDgu4Hguq3gurHguprguq/gupfgurXgu4jgu4DgupvgurHgupnguq3gurHgupngupXgurDguqXgurLguo3guq3gurLgupTgu4Dguq7gurHgupTgu4Pguqvgu4ngupfgu4jgurLgupkg4LqV4LuJ4Lqt4LqH4LuA4Lqq4LqN4LqE4LuI4Lqy4LuC4LqX4LuC4LqU4LqN4LqX4Lq14LuI4Lqa4LuN4LuI4LuE4LqU4LuJ4LqE4Lqy4LqU4LqE4Lq04LqULiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiIG1zZ2lkPSIzNTc0OTQzODQ3MTgxNzkzOTE4Ij4i4LuA4LqC4Lq74LuJ4Lqy4oCL4Lqr4Lqy4oCL4LqB4Lqy4LqZ4oCL4Lqa4LuN4oCL4Lql4Lq04oCL4LqB4Lqy4LqZ4oCL4LuC4LqXIElNUyI8L3N0cmluZz4KQEAgLTg1OCwxMCArODU3LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJjdXQiIG1zZ2lkPSIzMDkyNTY5NDA4NDM4NjI2MjYxIj4i4LqV4Lqx4LqUIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weSIgbXNnaWQ9IjI2ODE5NDYyMjk1MzM1MTE5ODciPiLguqrgurPgu4DgupngurvgurIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiLguqfgurLguociPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXN0ZV9hc19wbGFpbl90ZXh0IiBtc2dpZD0iNTQyNzc5Mjc0MTkwODAxMDY3NSI+IuC6p+C6suC6h+C7gOC6m+C6seC6meC6guC7jeC7ieC6hOC6p+C6suC6oeC6l+C6s+C6oeC6sOC6lOC6siI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4i4LuB4LqX4LqZ4LqX4Lq14LuI4oCmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+IuC6peC6tuC6miI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4i4Lqq4Lqz4LuA4LqZ4Lq74LqyIFVSTCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+IuC7gOC6peC6t+C6reC6geC6guC7jeC7ieC6hOC6p+C6suC6oSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVuZG8iIG1zZ2lkPSI3OTA1Nzg4NTAyNDkxNzQyMzI4Ij4i4Lqa4LuN4LuI4oCL4LuA4Lqu4Lqx4LqUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiLgu4Dguq7gurHgupTgu4Pgu53gu4giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4i4LqB4Lqy4LqZ4LuA4Lql4Lq34Lqt4LqB4LqC4LuN4LuJ4LqE4Lqn4Lqy4LqhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWRkVG9EaWN0aW9uYXJ5IiBtc2dpZD0iNDM1MjE2MTUzNDUxMDA1Nzg3NCI+IuC7gOC6nuC6teC7iOC6oeC7hOC6m+C6l+C6teC7iOC6p+C6seC6lOC6iOC6sOC6meC6suC6meC6uOC6geC6u+C6oSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4i4Lql4Lq24LqaIjwvc3RyaW5nPgpAQCAtMTEwNyw2ICsxMTA5LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+IuC6m+C7iOC6veC6meC6nuC6suC6muC6nuC6t+C7ieC6meC6q+C6vOC6seC6hyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+IuC7guC6leC6n+C6seC6h+C6geC6suC6meC7geC6iOC7ieC6h+C7gOC6leC6t+C6reC6mSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbmRpdGlvbl9wcm92aWRlcl9zZXJ2aWNlX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMzIxMzQzMzUyOTA2NTI0NTY0Ij4i4oCL4Lqc4Lq54LuI4oCL4Lqq4Lqw4oCL4Luc4Lqt4LqH4oCL4LuA4LqH4Lq34LuI4Lqt4LqZ4oCL4LuE4LqCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2Fzc2lzdGFudF9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iOTA5NDU2MDU1NTY5MTAyOTUyIj4i4LqV4Lq74Lqn4LqK4LuI4Lqn4LqN4oCL4LqB4Lqy4LqZ4oCL4LuB4LqI4LuJ4LqH4oCL4LuA4LqV4Lq34Lqt4LqZIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiLgu4DgupvgurXgupTgupngurPgu4Pguorgu4kgVlBOIOC7geC6peC7ieC6pyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+IuC7gOC6m+C6teC6lOC7g+C6iuC7iSBWUE4g4LuC4LqU4LqNIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0IiBtc2dpZD0iMzAxMTMwNjYwNzEyNjQ1MDMyMiI+IuC7geC6leC6sOC7gOC6nuC6t+C7iOC6reC6iOC6seC6lOC6geC6suC6meC7gOC6hOC6t+C6reC6guC7iOC6suC6jS4iPC9zdHJpbmc+CkBAIC0xNDQwLDEyICsxNDQzLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4i4Lqt4Lqx4Lqa4oCL4LuA4LqU4LqU4oCL4LuC4LqU4LqN4oCL4Lqc4Lq54LuJ4oCL4LqE4Lqn4Lqa4oCL4LqE4Lq44Lqh4oCL4LqC4Lqt4LqH4oCL4LqX4LuI4Lqy4LqZ4oCL4LuB4Lql4LuJ4LqnIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiLgupbgurfguoHigIvgupzgurngu4nigIvguoTguqfguprigIvguoTgurjguqHigIvguoLguq3guofigIvgupfgu4jgurLgupnigIvguqXgurbguprigIvgu4TgupvigIvgu4HguqXgu4nguqciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTk2MDQzMTEyMzgxNjI1MzAzNCI+IuC7gOC6nuC6t+C7iOC6reKAi+C6iuC7iOC6p+C6jeKAi+C7gOC6nuC6teC7iOC6oeKAi+C6reC6suKAi+C6jeC6uOKAi+C7geC6muC6seC6lOKAi+C7gOC6leC6teKAi+C6o+C6tSwg4LqV4Lq74Lqn4oCL4Lqb4Lqw4oCL4Lqi4Lqx4LqU4oCL4LuE4Lqf4oCL4LuB4Lqa4Lqx4LqU4oCL4LuA4LqV4Lq14oCL4Lqj4Lq14oCL4Lqr4Lq84Lq44LqU4oCL4Lqb4Lqw4oCL4Lqq4Lq04LqU4oCL4LqX4Lq04oCL4Lqe4Lqy4Lqa4oCL4LqB4Lqy4LqZ4oCL4LuA4Lqu4Lqx4LqU4oCL4Lqn4Lq94LqB4oCL4LqC4Lqt4LqH4oCL4Lqt4Lq44oCL4Lqb4Lqw4oCL4LqB4Lqt4LqZ4oCL4LqC4Lqt4LqH4oCL4LqX4LuI4Lqy4LqZ4oCL4Lql4Lq74LqHIOC7geC6peC6sOKAi+C6iOC6s+KAi+C6geC6seC6lOKAi+C6geC6suC6meKAi+C6quC6seC7iOC6mSwg4LqB4Lqy4LqZ4oCL4Lqa4LuN4oCL4Lql4Lq04oCL4LqB4Lqy4LqZ4oCL4Lqr4Lqy4LqX4Lq14LuI4LqV4Lqx4LuJ4LqHLCDgu4HguqXgurDigIvguoLgu43gu4nigIvguqHgurngupnigIvgup7gurfgu4ngupnigIvguqvgurzgurHguofigIvgu4DguoHgurfguq3guprigIvgupfgurHguofigIvgu53gurvgupQuIOC6reC6teKAi+C7gOC6oeC6pywg4LqB4Lqy4LqZ4oCL4Lqq4Lq74LuI4LqH4oCL4LqC4LuN4LuJ4oCL4LqE4Lqn4Lqy4LqhLCDgu4HguqXgurDigIvgu4Hguq3gurHguprguq3gurfgu4jgupngu4bigIvgupfgurXgu4jguq3gurLigIvgu4TguqrguoHgurLgupnigIvguorgurTguofigIvguoTgu4zigIvguq3gurLgupTigIvguojgurDigIvguprgu43gu4jigIvguq3gurHguprigIvgu4DgupTgupQg4LqZ4Lqt4LqB4oCL4LqI4Lqy4LqB4Lqn4LuI4Lqy4oCL4LqX4LuI4Lqy4LqZ4oCL4LuA4Lqb4Lq14LqU4oCL4Lqh4Lqx4LqZLlxuXG7gupXgurvguqfigIvgupvgurDigIvguqLgurHgupTigIvgu4Tgup/igIvgu4HguprgurHgupTigIvgu4DgupXgurXigIvguqPgurXguojgurDigIvgupvgurTgupTigIvguq3gurHgupTigIvgupXgurDigIvgu4LgupnigIvguqHgurHgupQg4LuA4Lqh4Lq34LuI4Lqt4oCL4Lqt4Lq44oCL4Lqb4Lqw4oCL4LqB4Lqt4LqZ4oCL4LqC4Lqt4LqH4oCL4LqX4LuI4Lqy4LqZ4oCL4LqB4Lqz4oCL4Lql4Lqx4LqH4oCL4Lqq4Lqy4LqB4Lqi4Lq54LuILiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX3RpdGxlIiBtc2dpZD0iNzQ5Mzk4OTcyMjYxMDAwODcwMCI+IuC6hOC6p+C6suC6oeC6quC7jeC6suC6hOC6seC6mSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSI3MTE4ODI2OTAwNzY3MDQ3MTI1Ij4i4Lqa4Lql4Lqx4Lqt4LqB4LuB4Lql4LuJ4LqnOiDguqLgu4jgurLguqrgurDgu4HgupTguofguoHgurLgupngu4Hguojgu4nguofgu4DgupXgurfguq3gupngu4Dguqvgurzgurvgu4jgurLgupngurXgu4kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4i4LqV4LuN4LuI4LqyOiDguqrgurDgu4HgupTguofguqLgurngu4jguqrgu4jguqfgupnguqXgurjgu4jguqHguoLguq3guofguqXgurLguo3guoHgurLgupngu4Hguojgu4nguofgu4DgupXgurfguq3gupngu4HguprguprguqHgurXguprgu43gu4jguqrgur3guociPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNzk5MTE1NzY5NzYwOTU3NTI3MSI+IuC6m+C6u+C6geC6geC6sOC6leC6tDog4Lqq4Lqw4LuB4LqU4LqH4LqB4Lqy4LqZ4LuB4LqI4LuJ4LqH4LuA4LqV4Lq34Lqt4LqZ4LuA4Lqr4Lq84Lq74LuI4Lqy4LqZ4Lq14LuJ4LuB4Lqa4Lqa4Lqa4LuN4LuI4Lqh4Lq14Lqq4Lq94LqHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiLguqrgurnguoc6IOC6quC6sOC7geC6lOC6h+C6ouC6ueC7iOC6quC7iOC6p+C6meC7gOC6l+C6tOC6h+C6guC6reC6h+C6peC6suC6jeC6geC6suC6meC7geC6iOC7ieC6h+C7gOC6leC6t+C6reC6mSDgu4HguqXgurDguqrgurvgu4jguofguqrgur3guofgupTgurHguociPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSIxMTUzNjkzMDgwNDY3OTA0NDc0Ij4i4LqU4LuI4Lqn4LqZOiDgu4DgupTgurHgu4nguofguoLgurbgu4ngupngu4DgupfgurTguofguqvgupngu4ngurLguojgu40g4LuB4Lql4Lqw4Lqq4Lq74LuI4LqH4Lqq4Lq94LqH4LqU4Lqx4LqHIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj7gu4DgupvgurHgupnigIvgu4DguqfigIvguqXgurIgJTEkZCDgupngurLigIvgupfgurUgKOC6iOC6u+C6meKAi+C6ruC6reC6lCA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj7igIvgu4DgupvgurHgupnigIvgu4DguqfigIvguqXgurIgMSDgupngurLigIvgupfgurUgKOC6iOC6u+C6meKAi+C6ruC6reC6lCA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8wIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWx0L3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1sdC9zdHJpbmdzLnhtbAppbmRleCA2N2VmZjYzLi5lMzVlZGQ2IDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWx0L3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbHQvc3RyaW5ncy54bWwKQEAgLTIyNSw2ICsyMjUsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiJVxb5yYWtpbnRpIGRhYmFyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiI5OTkrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2NoaWxkcmVuX2NvdW50X2JyYWNrZXRlZCIgbXNnaWQ9IjE3Njk0MjU0NzMxNjgzNDc4MzkiPiIoPHhsaWZmOmcgaWQ9Ik5PVElGSUNBVElPTkNPVU5UIj4lZDwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IlR1cmlueXMgcGFzbMSXcHRhcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+IlNhdWdvcyByZcW+aW1hcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+IuKAnkFuZHJvaWTigJwgc2lzdGVtYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4iQXNtZW5pbsSXIjwvc3RyaW5nPgpAQCAtMzU1LDggKzM1Niw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4iTGVpZMW+aWFtYSBwcm9ncmFtYWkgZm90b2dyYWZ1b3RpIGlyIGZpbG11b3RpIGthbWVyYS4gxaBpcyBsZWlkaW1hcyBzdXRlaWtpYSB0ZWlzxJkgcHJvZ3JhbWFpIG5hdWRvdGkga2FtZXLEhSBiZXQga2FkYSBiZSBqxatzxbMgcGF0dmlydGluaW1vLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiJ2YWxkeXRpIHZpYnJhY2lqxIUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+IkxlaWTFvmlhbWEgcHJvZ3JhbWFpIHZhbGR5dGkgdmlicmF2aW3EhS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4idmFsZHl0aSDFoXZpZXNvcyBzaWduYWzEhSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4iTGVpZMW+aWFtYSBwcm9ncmFtYWkgdmFsZHl0aSDFoXZpZXNvcyBzaWduYWzEhS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiJza2FtYmludGkgdGllc2lvZ2lhaSB0ZWxlZm9ubyBudW1lcmlhaXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4iTGVpZMW+aWFtYSBwcm9ncmFtYWkgc2thbWJpbnRpIHRlbGVmb27FsyBudW1lcmlhaXMgYmUgasWrc8WzIMSvc2lracWhaW1vLiBExJdsIHRvIGdhbGkgYXRzaXJhc3RpIG5lbnVtYXR5dMWzIGFwbW9rZXN0aW5pbcWzIGFyIHNrYW1idcSNacWzLiBBdG1pbmtpdGUsIGthZCBwcm9ncmFtYWkgbmVsZWlkxb5pYW1hIHNrYW1iaW50aSBwYWdhbGJvcyB0ZWxlZm9uxbMgbnVtZXJpYWlzLiBLZW5rxJdqacWha29zIHByb2dyYW1vcyBnYWxpIHNrYW1iaW50aSBiZSBqxatzxbMgcGF0dmlydGluaW1vLCBvIGTEl2wgdG8ganVtcyBnYWxpIGLFq3RpIHRhaWtvbWkgbW9rZXPEjWlhaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ltc0NhbGxTZXJ2aWNlIiBtc2dpZD0iMzU3NDk0Mzg0NzE4MTc5MzkxOCI+InBhc2lla3RpIElNUyBza2FtYnXEjWnFsyBwYXNsYXVnxIUiPC9zdHJpbmc+CkBAIC04NjgsMTAgKzg2NywxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+IknFoWtpcnB0aSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4iS29waWp1b3RpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzdGUiIG1zZ2lkPSI1NjI5ODgwODM2ODA1MDM2NDMzIj4ixK5rbGlqdW90aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4ixK5rbGlqdW90aSBrYWlwIGdyeW7EhWrEryB0ZWtzdMSFIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiJQYWtlaXN0aeKAoiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZSIgbXNnaWQ9IjYwOTg2ODQ4NDQwMjE2OTc3ODkiPiJJxaF0cmludGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IktvcGlqdW90aSBVUkwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiJQYXNpcmlua3RpIHRla3N0xIUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmRvIiBtc2dpZD0iNzkwNTc4ODUwMjQ5MTc0MjMyOCI+IkFudWxpdW90aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlZG8iIG1zZ2lkPSI3NzU5NDY0ODc2NTY2ODAzODg4Ij4iR3LEhcW+aW50aSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiJUZWtzdG8gcGFzaXJpbmtpbWFzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWRkVG9EaWN0aW9uYXJ5IiBtc2dpZD0iNDM1MjE2MTUzNDUxMDA1Nzg3NCI+IlByaWTEl3RpIHByaWUgxb5vZHlubyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4iScWhdHJpbnRpIjwvc3RyaW5nPgpAQCAtMTEyMSw2ICsxMTIzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+IktlaXN0aSBkYXJiYWxhdWtpbyBmb27EhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+IlByYW5lxaFpbcWzIHNrYWl0eW1vIHByaWVtb27ElyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbmRpdGlvbl9wcm92aWRlcl9zZXJ2aWNlX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMzIxMzQzMzUyOTA2NTI0NTY0Ij4iU8SFbHlnb3MgdGVpa8SXamFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2Fzc2lzdGFudF9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iOTA5NDU2MDU1NTY5MTAyOTUyIj4iUHJhbmXFoWltxbMgcGFnZWxiaWtsaXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IlZQTiBzdWFrdHl2aW50YXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiJWUE4gc3Vha3R5dmlubyDigJ48eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz7igJwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiJQYWxpZXNraXRlLCBrYWQgdmFsZHl0dW3El3RlIHRpbmtsxIUuIjwvc3RyaW5nPgpAQCAtMTQ1OCwxMiArMTQ2MSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+IkF0bmF1amlubyBhZG1pbmlzdHJhdG9yaXVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiJJxaF0cnluxJcgYWRtaW5pc3RyYXRvcml1cyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4iS2FkIHRhdXNvdMWzIGFrdW11bGlhdG9yaWF1cyBlbmVyZ2lqxIUgYWt1bXVsaWF0b3JpYXVzIHRhdXNvamltbyBwcmllbW9uxJcgc3VtYcW+aW5hIMSvcmVuZ2luaW8gdmVpa2ltxIUgaXIgYXByaWJvamEgdmlicmF2aW3EhSwgdmlldG92xJdzIHBhc2xhdWdhcyBiZWkgZGF1Z3VtxIUgZm9uaW5pxbMgZHVvbWVuxbMuIEVsLiBwYcWhdG8sIHN1c2lyYcWhaW7El2ppbW8gaXIga2l0b3MgcHJvZ3JhbW9zLCBrdXJpb3MgdmVpa2lhIHNpbmNocm9uaXphdmltbyBwYWdyaW5kdSwgZ2FsaSBixat0aSBuZWF0bmF1amludG9zLCBuZWJlbnQgamFzIGF0aWRhcnlzaXRlLlxuXG5Ba3VtdWxpYXRvcmlhdXMgdGF1c29qaW1vIHByaWVtb27ElyBhdXRvbWF0acWha2FpIGnFoWp1bmdpYW1hLCBrYWkgxK9yZW5naW55cyDEr2tyYXVuYW1hcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV90aXRsZSIgbXNnaWQ9Ijc0OTM5ODk3MjI2MTAwMDg3MDAiPiJTdmFyYmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iNzExODgyNjkwMDc2NzA0NzEyNSI+IlXFvmJsb2t1b3RhOiBuaWVrYWRhIG5lcm9keXRpIMWhacWzIHByYW5lxaFpbcWzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNjQ0NzY0MDQ0OTkxODQyNzE4NyI+Ik1hxb5hOiB0eWxpYWkgcm9keXRpIHByYW5lxaFpbcWzIHPEhXJhxaFvIGFwYcSNaW9qZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI3OTkxMTU3Njk3NjA5NTc1MjcxIj4ixK5wcmFzdGE6IHR5bGlhaSByb2R5dGkgxaFpdW9zIHByYW5lxaFpbXVzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiJEaWRlbMSXOiByb2R5dGkgcHJhbmXFoWltxbMgc8SFcmHFoW8gdmlyxaF1amUgaXIgc2thbWLEl3RpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+IlNrdWJ1OiByb2R5dGkgZWtyYW5lIGlyIHNrYW1ixJd0aSI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPiUxJGQgbWludXTEmSAoaWtpIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJmZXciPiUxJGQgbWludXRlcyAoaWtpIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbHYvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWx2L3N0cmluZ3MueG1sCmluZGV4IDk1YzM1MzYuLmRlMDJhNGYgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbHYvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1sdi9zdHJpbmdzLnhtbApAQCAtMjI0LDYgKzIyNCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2tkb3duIiBtc2dpZD0iODc1MTU0MjUxNDcyNDMzMjg3MyI+IkJsb8S3xJN0IHTFq2zEq3QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+IlDEgXJzbmllZHoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fY2hpbGRyZW5fY291bnRfYnJhY2tldGVkIiBtc2dpZD0iMTc2OTQyNTQ3MzE2ODM0NzgzOSI+Iig8eGxpZmY6ZyBpZD0iTk9USUZJQ0FUSU9OQ09VTlQiPiVkPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4iU2F0dXJzIHBhc2zEk3B0cyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+IkRyb8WhYWlzIHJlxb7Eq21zIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4iQW5kcm9pZCBzaXN0xJNtYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4iUGVyc29uaXNrcyI8L3N0cmluZz4KQEAgLTM1NCw4ICszNTUsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IsS7YXVqIGxpZXRvdG5laSB1esWGZW10IGF0dMSTbHVzIHVuIHZpZGVva2xpcHVzIGFyIGthbWVydS4gQXIgxaFvIGF0xLxhdWp1IGxpZXRvdG5lIHZhciBqZWJrdXLEgSBicsSrZMSrIGl6bWFudG90IGthbWVydSBiZXogasWrc3UgYXBzdGlwcmluxIFqdW1hLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiJrb250cm9sxJN0IHZpYnJvc2lnbsSBbHUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+IsS7YXVqIGxpZXRvdG5laSBrb250cm9sxJN0IHZpYnJvc2lnbsSBbHUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mbGFzaGxpZ2h0IiBtc2dpZD0iMjE1NTkyMDgxMDEyMTk4NDIxNSI+ImtvbnRyb2zEk3QgdXpsaWVzbW9qdW11Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiLEu2F1aiBsaWV0b3RuZWkga29udHJvbMSTdCB6aWJzcHVsZHppLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+InRpZcWhaSB6dmFuxKt0IHV6IHTEgWxydcWGYSBudW11cmllbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQaG9uZSIgbXNnaWQ9IjM3NDA3OTc1NzYxMTM3NjA4MjciPiLEu2F1aiBsaWV0b3RuZWkgenZhbsSrdCB1eiB0xIFscnXFhmEgbnVtdXJpZW0gYmV6IGrFq3N1IGllamF1a8WhYW7EgXMuIFRhcyB2YXIgcmFkxKt0IG5lcGFyZWR6xJN0YXMgaXptYWtzYXMgdmFpIHp2YW51cy4gxYVlbWlldCB2xJNyxIEsIGthIGxpZXRvdG5laSBuYXYgYXTEvGF1dHMgenZhbsSrdCB1eiB0xIFscnXFhmEgbnVtdXJpZW0gxIFya8SBcnRhcyBzaXR1xIFjaWrEgW0uIMS7YXVucHLEgXTEq2dhcyBsaWV0b3RuZXMgdmFyIHJhZMSrdCBqdW1zIGl6bWFrc2FzLCB2ZWljb3QgenZhbnVzIGJleiBqxatzdSBhcHN0aXByaW7EgWp1bWEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiJwaWVrxLzFq3QgdMWrbMSrdMSTasSBcyB6acWGb2p1bWFwbWFpxYZhcyBwYWthbHBvanVtYW0sIGxhaSB2ZWlrdHUgenZhbnVzIjwvc3RyaW5nPgpAQCAtODYzLDEwICs4NjIsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiJJemdyaWV6dCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4iS29wxJN0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzdGUiIG1zZ2lkPSI1NjI5ODgwODM2ODA1MDM2NDMzIj4iSWVsxKttxJN0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiJJZWzEq23Ek3Qga8SBIHZpZW5rxIFyxaF1IHRla3N0dSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4iQWl6c3TEgXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4iRHrEk3N0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiJLb3DEk3QgVVJMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4iQXRsYXPEq3QgdGVrc3R1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiJBdHNhdWt0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiJBdGNlbHQgYXRzYXVrxaFhbnUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4iVGVrc3RhIGF0bGFzZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiJQaWV2aWVub3QgdsSBcmRuxKtjYWkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+IkR6xJNzdCI8L3N0cmluZz4KQEAgLTExMTQsNiArMTExNiw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiJUYXBldGVzIG1hacWGYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+IlBhemnFhm9qdW11IHV6dHbEk3LEk2pzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiJOb3NhY8SranVtdSBzbmllZHrEk2pzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2Fzc2lzdGFudF9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iOTA5NDU2MDU1NTY5MTAyOTUyIj4iUGF6acWGb2p1bXUgcGFsxKtncyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iVlBOIGlyIGFrdGl2aXrEk3RzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+IkxpZXRvanVtcHJvZ3JhbW1hIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiBha3Rpdml6xJNqYSBWUE4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4iUGllc2thcmlldGllcywgbGFpIHDEgXJ2YWxkxKt0dSB0xKtrbHUuIjwvc3RyaW5nPgpAQCAtMTQ0OSwxMiArMTQ1Miw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+IkF0amF1bmluxIFqYSBhZG1pbmlzdHJhdG9ycyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4iSXpkesSTc2EgasWrc3UgYWRtaW5pc3RyYXRvcnMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTk2MDQzMTEyMzgxNjI1MzAzNCI+IkxhaSBwYWlsZHppbsSBdHUgYWt1bXVsYXRvcmEgZGFyYsSrYnUsIGFrdW11bGF0b3JhIGphdWRhcyB0YXVwxKvFoWFuYXMgcmXFvsSrbcSBIHRpZWsgc2FtYXppbsSBdGEgaWVyxKtjZXMgdmVpa3RzcMSTamEgdW4gdGllayBpZXJvYmXFvm90YSB2aWJyxIFjaWphLCBhdHJhxaFhbsSBcyB2aWV0dSBwYWthbHBvanVtaSB1biBsaWVsxIFrxIEgZGHEvGEgZm9uYSBkYXR1LiBFLXBhc3RhLCB6acWGb2p1bWFwbWFpxYZhcyB1biBjaXRhIHZlaWRhIGxpZXRvdG5lcywga3VydSBkYXJixKtiYXMgcGFtYXTEgSBpciBkYXR1IHNpbmhyb25pesSBY2lqYSwgdmFyIG5ldGlrdCBhdGphdW5pbsSBdGFzLCBqYSB0xIFzIG5lYXR2ZXJhdC5cblxuVGlrbMSrZHogdGllayBzxIFrdGEgaWVyxKtjZXMgdXpsxIFkZSwgYWt1bXVsYXRvcmEgamF1ZGFzIHRhdXDEq8WhYW5hcyByZcW+xKttcyBhdXRvbcSBdGlza2kgdGllayBpenNsxJNndHMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfdGl0bGUiIG1zZ2lkPSI3NDkzOTg5NzIyNjEwMDA4NzAwIj4iU3ZhcsSrZ3VtcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSI3MTE4ODI2OTAwNzY3MDQ3MTI1Ij4iQmxvxLfEk3RzOiBuZWthZCBuZXLEgWTEq3QgxaFvcyBwYXppxYZvanVtdXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4iWmVtdTogcsSBZMSrdCBwYXppxYZvanVtdSBzYXJha3N0YSBhcGFrxaFkYcS8xIEgYmV6IHNrYcWGYXMgc2lnbsSBbGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNzk5MTE1NzY5NzYwOTU3NTI3MSI+Ik5vcm3EgWxpOiByxIFkxKt0IMWhb3MgcGF6acWGb2p1bXVzIGJleiBza2HFhmFzIHNpZ27EgWxhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiJBdWdzdHU6IHLEgWTEq3QgcGF6acWGb2p1bXUgc2FyYWtzdGEgYXVnxaFkYcS8xIEgdW4gYXIgc2thxYZhcyBzaWduxIFsdSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiJTdGVpZHphbWk6IHLEgWTEq3QgZWtyxIFuxIEgYXIgc2thxYZhcyBzaWduxIFsdSI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJ6ZXJvIj4lMSRkwqBtaW7Fq3RlcyAobMSrZHogPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+JTEkZMKgbWluxat0aSAobMSrZHogPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1tay1yTUsvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLW1rLXJNSy9zdHJpbmdzLnhtbAppbmRleCA1YzEyYTM2Li45NmEyOWE1IDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLW1rLXJNSy9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLW1rLXJNSy9zdHJpbmdzLnhtbApAQCAtMjIzLDYgKzIyMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2tkb3duIiBtc2dpZD0iODc1MTU0MjUxNDcyNDMzMjg3MyI+ItCX0LDQutC70YPRh9C4INGB0LXQs9CwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiI5OTkrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2NoaWxkcmVuX2NvdW50X2JyYWNrZXRlZCIgbXNnaWQ9IjE3Njk0MjU0NzMxNjgzNDc4MzkiPiIoPHhsaWZmOmcgaWQ9Ik5PVElGSUNBVElPTkNPVU5UIj4lZDwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+ItCh0L7QtNGA0LbQuNC90LjRgtC1INGB0LUg0YHQutGA0LjQtdC90LgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiLQkdC10LfQsdC10LTQtdC9INGA0LXQttC40LwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiLQodC40YHRgtC10LwgQW5kcm9pZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4i0JvQuNGH0L3QuCI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+ItCe0LLQvtC30LzQvtC20YPQstCwINCw0L/Qu9C40LrQsNGG0LjRmNCw0YLQsCDQtNCwINC/0YDQsNCy0Lgg0YTQvtGC0L7Qs9GA0LDRhNC40Lgg0Lgg0LTQsCDRgdC90LjQvNCwINCy0LjQtNC10LAg0YHQviDQutCw0LzQtdGA0LDRgtCwLiDQntCy0LDQsCDQtNC+0LfQstC+0LvQsCDQvtCy0L7Qt9C80L7QttGD0LLQsCDQsNC/0LvQuNC60LDRhtC40ZjQsNGC0LAg0LTQsCDRmNCwINC60L7RgNC40YHRgtC4INC60LDQvNC10YDQsNGC0LAg0LLQviDQutC+0LUg0LHQuNC70L4g0LLRgNC10LzQtSDQsdC10Lcg0LLQsNGI0LAg0L/QvtGC0LLRgNC00LAuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl92aWJyYXRlIiBtc2dpZD0iNzY5NjQyNzAyNjA1NzcwNTgzNCI+ItC60L7QvdGC0YDQvtC70LjRgNCw0Zgg0LLQuNCx0YDQsNGG0LjQuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4i0JTQvtC30LLQvtC70YPQstCwINCw0L/Qu9C40LrQsNGG0LjRmNCw0YLQsCDQtNCwINCz0Lgg0LrQvtC90YLRgNC+0LvQuNGA0LAg0LLQuNCx0YDQsNGG0LjQuNGC0LUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mbGFzaGxpZ2h0IiBtc2dpZD0iMjE1NTkyMDgxMDEyMTk4NDIxNSI+ItC60L7QvdGC0YDQvtC70LjRgNCw0Zgg0YHQuNGY0LDQu9C40YfQutCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiLQlNC+0LfQstC+0LvRg9Cy0LAg0LDQv9C70LjQutCw0YbQuNGY0LDRgtCwINC00LAg0ZjQsCDQutC+0L3RgtGA0L7Qu9C40YDQsCDQsdCw0YLQtdGA0LjRgdC60LDRgtCwINC70LDQvNCx0LAuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4i0LTQuNGA0LXQutGC0L3QviDQuNC30LHQuNGA0LDRmCDRgtC10LvQtdGE0L7QvdGB0LrQuCDQsdGA0L7QtdCy0LgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4i0J7QstC+0LfQvNC+0LbRg9Cy0LAg0LDQv9C70LjQutCw0YbQuNGY0LDRgtCwINC00LAg0L/QvtCy0LjQutGD0LLQsCDRgtC10LvQtdGE0L7QvdGB0LrQuCDQsdGA0L7QtdCy0Lgg0LHQtdC3INCy0LDRiNCwINC40L3RgtC10YDQstC10L3RhtC40ZjQsC4g0J7QstCwINC80L7QttC1INC00LAg0L/RgNC10LTQuNC30LLQuNC60LAg0L3QtdC+0YfQtdC60YPQstCw0L3QuCDRgtGA0L7RiNC+0YbQuCDQuNC70Lgg0L/QvtCy0LjRhtC4LiDQmNC80LDRmNGC0LUg0L3QsCDRg9C8INC00LXQutCwINC+0LLQsCDQvdC1INC00L7Qt9Cy0L7Qu9GD0LLQsCDQsNC/0LvQuNC60LDRhtC40ZjQsNGC0LAg0LTQsCDQv9C+0LLQuNC60YPQstCwINCx0YDQvtC10LLQuCDQvdCwINGB0LvRg9C20LHQuCDQt9CwINC40YLQvdCwINC/0L7QvNC+0YguINCX0LvQvtC90LDQvNC10YDQvdC40YLQtSDQsNC/0LvQuNC60LDRhtC40Lgg0LzQvtC20LUg0LTQsCDQstC1INGH0LjQvdCw0YIg0L/QsNGA0Lgg0L/QvtGA0LDQtNC4INC/0L7QstC40YbQuCDQsdC10Lcg0LLQsNGI0LAg0L/QvtGC0LLRgNC00LAuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiLQv9GA0LjRgdGC0LDQv9C4INC00L4g0YPRgdC70YPQs9Cw0YLQsCDQt9CwINC/0L7QstC40YbQuCBJTVMiPC9zdHJpbmc+CkBAIC04NTgsMTAgKzg1NywxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+ItCY0YHQtdGH0LgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+ItCa0L7Qv9C40YDQsNGYIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzdGUiIG1zZ2lkPSI1NjI5ODgwODM2ODA1MDM2NDMzIj4i0JfQsNC70LXQv9C4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiLQl9Cw0LvQtdC/0Lgg0LrQsNC60L4g0L7QsdC40YfQtdC9INGC0LXQutGB0YIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXBsYWNlIiBtc2dpZD0iNTc4MTY4NjA1OTA2MzE0ODkzMCI+ItCX0LDQvNC10L3QuC4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZSIgbXNnaWQ9IjYwOTg2ODQ4NDQwMjE2OTc3ODkiPiLQmNC30LHRgNC40YjQuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4i0JrQvtC/0LjRgNCw0Zgg0KPQoNCbIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4i0JjQt9Cx0LXRgNC4INGC0LXQutGB0YIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmRvIiBtc2dpZD0iNzkwNTc4ODUwMjQ5MTc0MjMyOCI+ItCS0YDQsNGC0LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+ItCf0L7QstGC0L7RgNC4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGV4dFNlbGVjdGlvbkNBQlRpdGxlIiBtc2dpZD0iNTIzNjg1MDM5NDM3MDgyMDM1NyI+ItCY0LfQsdC+0YAg0L3QsCDRgtC10LrRgdGCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWRkVG9EaWN0aW9uYXJ5IiBtc2dpZD0iNDM1MjE2MTUzNDUxMDA1Nzg3NCI+ItCU0L7QtNCw0Zgg0LLQviDRgNC10YfQvdC40LoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+ItCY0LfQsdGA0LjRiNC4Ijwvc3RyaW5nPgpAQCAtMTEwNyw2ICsxMTA5LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+ItCf0YDQvtC80LXQvdC4INGC0LDQv9C10YIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiLQodC70YPRiNCw0YLQtdC7INC90LAg0LjQt9Cy0LXRgdGC0YPQstCw0ZrQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbmRpdGlvbl9wcm92aWRlcl9zZXJ2aWNlX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMzIxMzQzMzUyOTA2NTI0NTY0Ij4i0JTQsNCy0LDRgtC10Lsg0L3QsCDRg9GB0LvQvtCyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2Fzc2lzdGFudF9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iOTA5NDU2MDU1NTY5MTAyOTUyIj4i0J/QvtC80L7RiNC90LjQuiDQt9CwINC40LfQstC10YHRgtGD0LLQsNGa0LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+ItCQ0LrRgtC40LLQuNGA0LDQvdCwIFZQTiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+IlZQTiDQtSDQsNC60YLQuNCy0LjRgNCw0L3QsCDRgdC+IDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0IiBtc2dpZD0iMzAxMTMwNjYwNzEyNjQ1MDMyMiI+ItCU0L7Qv9GA0Lgg0LfQsCDQtNCwINGD0L/RgNCw0LLRg9Cy0LDRiCDRgdC+INC80YDQtdC20LDRgtCwLiI8L3N0cmluZz4KQEAgLTEyNTAsNyArMTI1Myw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iMTc1MTYxODU1NDUzOTA4NzYyMiI+ItCf0L7QstGA0LfQuCDRgdC1INGB0L4g0YPRgNC10LQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlX2Zvcl9yZW1vdGVfZGlzcGxheSIgbXNnaWQ9IjMzOTU1NDE3NDU4NzIwMTc1ODMiPiLQn9GA0LXRhNGA0LvQuCDQtdC60YDQsNC9INC90LAg0YPRgNC10LQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjQ3NzYyMzYyMDI2MTA4Mjg3MDYiPiLQn9GA0LXQsdCw0YDRg9Cy0LDRmtC1INC30LAg0YPRgNC10LTQuC4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZXh0ZW5kZWRfc2V0dGluZ3MiIG1zZ2lkPSI4NzAxNTUzNDIzNjcwMTYwNCI+ItCf0L7QtNC10YHRg9Cy0LDRmtCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9leHRlbmRlZF9zZXR0aW5ncyIgbXNnaWQ9Ijg3MDE1NTM0MjM2NzAxNjA0Ij4i0J/QvtGB0YLQsNCy0LrQuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9Ijg5NjYxMjAyODYzNzQxNTg2NDkiPiLQmNGB0LrQu9GD0YfQuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19zY2FubmluZyIgbXNnaWQ9IjcyNzk5MDg3NjE3NTgyOTM3ODMiPiLQodC60LXQvdC40YDQsNGa0LUuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfY29ubmVjdGluZyIgbXNnaWQ9IjY0MjI1NzE3MTYwMDc4MjU0NDAiPiLQodC1INC/0L7QstGA0LfRg9Cy0LAuLi4iPC9zdHJpbmc+CkBAIC0xNDQyLDEyICsxNDQ1LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4i0JDQttGD0YDQuNGA0LDQvdC+INC+0LQg0LDQtNC80LjQvdC40YHRgtGA0LDRgtC+0YDQvtGCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiLQmNC30LHRgNC40YjQsNC90L4g0L7QtCDQsNC00LzQuNC90LjRgdGC0YDQsNGC0L7RgNC+0YIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTk2MDQzMTEyMzgxNjI1MzAzNCI+ItCX0LAg0LTQsCDQstC4INC/0L7QvNC+0LPQvdC1INC00LAg0ZjQsCDQv9C+0LTQvtCx0YDQuNGC0LUg0YLRgNCw0ZjQvdC+0YHRgtCwINC90LAg0LHQsNGC0LXRgNC40ZjQsNGC0LAsINGI0YLQtdC00LDRh9C+0YIg0L3QsCDQsdCw0YLQtdGA0LjRmNCw0YLQsCDRmNCwINC90LDQvNCw0LvRg9Cy0LAg0LjQt9Cy0LXQtNCx0LDRgtCwINC90LAg0YPRgNC10LTQvtGCINC4INCz0L4g0L7Qs9GA0LDQvdC40YfRg9Cy0LAg0LLQuNCx0YDQuNGA0LDRmtC10YLQviwg0YPRgdC70YPQs9C40YLQtSDQt9CwINC70L7QutCw0YbQuNGY0LAg0Lgg0L/QvtCy0LXRnNC10YLQviDQv9C+0LTQsNGC0L7RhtC4INC+0LQg0LfQsNC00L3QuNC90LAuINCVLdC/0L7RiNGC0LDRgtCwLCDQuNGB0L/RgNCw0ZzQsNGa0LXRgtC+INC/0L7RgNCw0LrQuCDQuCDQtNGA0YPQs9C40YLQtSDQsNC/0LvQuNC60LDRhtC40Lgg0LrQvtC4INGB0LUg0L/QvtGC0L/QuNGA0LDQsNGCINC90LAg0YHQuNC90YXRgNC+0L3QuNC30LDRhtC40ZjQsCDQvNC+0LbQtdCx0Lgg0L3QtdC80LAg0LTQsCDRgdC1INCw0LbRg9GA0LjRgNCw0LDRgiDQtNC+0LrQvtC70LrRgyDQvdC1INCz0Lgg0L7RgtCy0L7RgNC40YLQtS5cblxu0KjRgtC10LTQsNGH0L7RgiDQvdCwINCx0LDRgtC10YDQuNGY0LDRgtCwINCw0LLRgtC+0LzQsNGC0YHQutC4INGB0LUg0LjRgdC60LvRg9GH0YPQstCwINC60L7Qs9CwINGD0YDQtdC00L7RgiDRgdC1INC/0L7Qu9C90LguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfdGl0bGUiIG1zZ2lkPSI3NDkzOTg5NzIyNjEwMDA4NzAwIj4i0JLQsNC20L3QvtGB0YIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iNzExODgyNjkwMDc2NzA0NzEyNSI+ItCR0LvQvtC60LjRgNCw0L3Qvjog0L3QuNC60L7Qs9Cw0Ygg0L3QtSDQv9C+0LrQsNC20YPQstCw0Zgg0LPQuCDQvtCy0LjQtSDQuNC30LLQtdGB0YLRg9Cy0LDRmtCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNjQ0NzY0MDQ0OTkxODQyNzE4NyI+ItCd0LjRgdC60L46INC/0L7QutCw0LbRg9Cy0LDRmCDQs9C4INGC0LjQstC60L4g0L3QsCDQtNC90L7RgtC+INC90LAg0YHQv9C40YHQvtC60L7RgiDRgdC+INC40LfQstC10YHRgtGD0LLQsNGa0LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNzk5MTE1NzY5NzYwOTU3NTI3MSI+ItCd0L7RgNC80LDQu9C90L46INC/0L7QutCw0LbRg9Cy0LDRmCDQs9C4INC+0LLQuNC1INC40LfQstC10YHRgtGD0LLQsNGa0LAg0YLQuNCy0LrQviI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMTUyMjM4NjM3NzM3MjE1NjU0Ij4i0JLQuNGB0L7QutC+OiDQv9C+0LrQsNC20YPQstCw0Zgg0LPQuCDQvdCwINCy0YDQsiDQvdCwINGB0L/QuNGB0L7QutC+0YIg0YHQviDQuNC30LLQtdGB0YLRg9Cy0LDRmtCwINC4INC00LDRmCDQt9Cy0YPQuiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiLQmNGC0L3Qvjog0L3QtdC60LAg0YHQtSDQv9C+0ZjQsNCy0LDRgiDQvdCwINC10LrRgNCw0L3QvtGCINC4INC00LDRmCDQuNC8INC30LLRg9C6Ijwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+0JfQsCAlMSRkINC80LjQvdGD0YLQsCAo0LTQviA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPtCX0LAgJTEkZCDQvNC40L3Rg9GC0LggKNC00L4gPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1tbC1ySU4vc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLW1sLXJJTi9zdHJpbmdzLnhtbAppbmRleCA4NDJlZTRhLi5mNjg2OWUzIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLW1sLXJJTi9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLW1sLXJJTi9zdHJpbmdzLnhtbApAQCAtMjIzLDYgKzIyMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2tkb3duIiBtc2dpZD0iODc1MTU0MjUxNDcyNDMzMjg3MyI+IuC0h+C0quC1jeC0quC1i+C1viDgtLLgtYvgtJXgtY3gtJXgtYHgtJrgtYbgtK/gtY3gtK/gtYHgtJUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+Ijk5OSsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fY2hpbGRyZW5fY291bnRfYnJhY2tldGVkIiBtc2dpZD0iMTc2OTQyNTQ3MzE2ODM0NzgzOSI+Iig8eGxpZmY6ZyBpZD0iTk9USUZJQ0FUSU9OQ09VTlQiPiVkPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4i4LSV4LWL4LW64LSf4LS+4LSV4LWN4oCM4LSx4LWN4LSx4LWB4LSV4LW+IOC0ruC0seC0muC1jeC0muC1gSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+IuC0uOC1geC0sOC0leC1jeC0t+C0v+C0pCDgtK7gtYvgtKHgtY0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiJBbmRyb2lkIOC0uOC0v+C0uOC1jeC0seC1jeC0seC0giI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4i4LS14LWN4LSv4LSV4LWN4LSk4LS/4LSX4LSk4LSCIjwvc3RyaW5nPgpAQCAtMzUzLDggKzM1NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4i4LSV4LWN4LSv4LS+4LSu4LSxIOC0ieC0quC0r+C1i+C0l+C0v+C0muC1jeC0muC1jSDgtJrgtL/gtKTgtY3gtLDgtJngtY3gtJngtLPgtYHgtIIg4LS14LWA4LSh4LS/4LSv4LWL4LSV4LSz4LWB4LSCIOC0juC0n+C1geC0leC1jeC0leC0vuC1uyDgtIXgtKrgtY3gtLLgtL/gtJXgtY3gtJXgtYfgtLfgtKjgtYYg4LSF4LSo4LWB4LS14LSm4LS/4LSV4LWN4LSV4LWB4LSo4LWN4LSo4LWBLiDgtKjgtL/gtJngtY3gtJngtLPgtYHgtJ/gtYYg4LS44LWN4LSl4LS/4LSw4LWA4LSV4LSw4LSj4LSu4LS/4LSy4LWN4LSy4LS+4LSk4LWGIOC0j+C0pOC1geC0uOC0ruC0r+C0pOC1jeC0pOC1geC0giDgtJXgtY3gtK/gtL7gtK7gtLEg4LSJ4LSq4LSv4LWL4LSX4LS/4LSV4LWN4LSV4LS+4LW7IOC0iCDgtIXgtKjgtYHgtK7gtKTgtL8g4LSF4LSq4LWN4LSy4LS/4LSV4LWN4LSV4LWH4LS34LSo4LWGIOC0heC0qOC1geC0teC0puC0v+C0leC1jeC0leC1geC0qOC1jeC0qOC1gS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4i4LS14LWI4LSs4LWN4LSw4LWH4LSx4LWN4LSx4LWB4LSa4LWG4LSv4LWN4LSv4LW9IOC0qOC0v+C0r+C0qOC1jeC0pOC1jeC0sOC0v+C0leC1jeC0leC1geC0lSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4i4LS14LWI4LSs4LWN4LSw4LWH4LSx4LWN4LSx4LW8IOC0qOC0v+C0r+C0qOC1jeC0pOC1jeC0sOC0v+C0leC1jeC0leC1geC0qOC1jeC0qOC0pOC0v+C0qOC1jSDgtIXgtKrgtY3gtLLgtL/gtJXgtY3gtJXgtYfgtLfgtKjgtYYg4LSF4LSo4LWB4LS14LSm4LS/4LSV4LWN4LSV4LWB4LSo4LWN4LSo4LWBLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiLgtJ/gtYvgtbzgtJrgtY3gtJrgtY0g4LSo4LS/4LSv4LSo4LWN4LSk4LWN4LSw4LS/4LSV4LWN4LSV4LWB4LSVIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiLgtKvgtY3gtLLgtL7gtLfgtY3gtLLgtYjgtLHgtY3gtLHgtL/gtKjgtYYg4LSo4LS/4LSv4LSo4LWN4LSk4LWN4LSw4LS/4LSV4LWN4LSV4LWB4LSo4LWN4LSo4LSk4LS/4LSo4LWNIOC0heC0quC1jeC0suC0v+C0leC1jeC0leC1h+C0t+C0qOC1hiDgtIXgtKjgtYHgtLXgtKbgtL/gtJXgtY3gtJXgtYHgtKjgtY3gtKjgtYEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4i4LSr4LWL4LW6IOC0qOC0ruC1jeC0quC0seC1geC0leC0s+C0v+C0suC1h+C0leC1jeC0leC1jSDgtKjgtYfgtLDgtL/gtJ/gtY3gtJ/gtY0g4LS14LS/4LSz4LS/4LSV4LWN4LSV4LWB4LSVIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+IuC0qOC0v+C0meC1jeC0meC0s+C1geC0n+C1hiDgtIfgtJ/gtKrgtYbgtJ/gtb0g4LSH4LSy4LWN4LSy4LS+4LSk4LWGIOC0q+C1i+C1uiDgtKjgtK7gtY3gtKrgtLHgtYHgtJXgtLPgtL/gtLLgtYfgtJXgtY3gtJXgtY0g4LSV4LWL4LW+IOC0muC1huC0r+C1jeC0r+C0vuC1uyDgtIXgtKrgtY3gtLLgtL/gtJXgtY3gtJXgtYfgtLfgtKjgtYYg4LSF4LSo4LWB4LS14LSm4LS/4LSV4LWN4LSV4LWB4LSo4LWN4LSo4LWBLiDgtIfgtKTgtY0g4LSF4LSq4LWN4LSw4LSk4LWA4LSV4LWN4LS34LS/4LSkIOC0qOC0v+C0sOC0leC1jeC0leC1geC0leC1vuC0leC1jeC0leC1iyDgtJXgtYvgtLPgtYHgtJXgtb7gtJXgtY3gtJXgtYsg4LSH4LSf4LSv4LS+4LSV4LWN4LSV4LS+4LSCLiDgtIfgtKTgtY0g4LSF4LSf4LS/4LSv4LSo4LWN4LSk4LSwIOC0qOC0ruC1jeC0quC0seC1geC0leC0s+C0v+C0suC1h+C0leC1jeC0leC1jSDgtLXgtL/gtLPgtL/gtJXgtY3gtJXgtL7gtbsg4LSF4LSq4LWN4LSy4LS/4LSV4LWN4LSV4LWH4LS34LSo4LWGIOC0heC0qOC1geC0teC0puC0v+C0leC1jeC0leC0v+C0suC1jeC0suC1huC0qOC1jeC0qCDgtJXgtL7gtLDgtY3gtK/gtIIg4LS24LWN4LSw4LSm4LWN4LSn4LS/4LSV4LWN4LSV4LWB4LSVLiDgtJXgtY3gtLfgtYHgtKbgtY3gtLDgtJXgtLDgtK7gtL7gtK8g4LSF4LSq4LWN4LSy4LS/4LSV4LWN4LSV4LWH4LS34LSo4LWB4LSV4LW+IOC0qOC0v+C0meC1jeC0meC0s+C1geC0n+C1hiDgtLjgtY3gtKXgtL/gtLDgtYDgtJXgtLDgtKPgtK7gtL/gtLLgtY3gtLLgtL7gtKTgtYYg4LSV4LWL4LSz4LWB4LSV4LW+IOC0muC1huC0r+C1jeC0r+C1geC0qOC1jeC0qOC0pOC1jSDgtKrgtKPgtJrgtY3gtJrgtYbgtLLgtLXgtL/gtKjgtL/gtJ/gtK/gtL7gtJXgtY3gtJXgtL7gtIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiJJTVMg4LSV4LWL4LW+IOC0uOC1h+C0teC0qOC0giDgtIbgtJXgtY3gtLjgtLjgtY0g4LSa4LWG4LSv4LWN4LSv4LWB4LSVIjwvc3RyaW5nPgpAQCAtODU4LDEwICs4NTcsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiLgtK7gtYHgtLHgtL/gtJXgtY3gtJXgtYHgtJUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+IuC0quC0leC0sOC1jeKAjeC0pOC1jeC0pOC1geC0lSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+IuC0kuC0n+C1jeC0n+C0v+C0leC1jeC0leC1geC0lSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4i4LSq4LWN4LSy4LWG4LSv4LS/4LW7IOC0n+C1huC0leC1jeKAjOC0uOC1jeC0seC1jeC0seC0vuC0r+C0vyDgtJLgtJ/gtY3gtJ/gtL/gtJXgtY3gtJXgtYHgtJUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXBsYWNlIiBtc2dpZD0iNTc4MTY4NjA1OTA2MzE0ODkzMCI+IuC0ruC0vuC0seC1jeC0seC0v+C0uOC1jeC0peC0vuC0quC0v+C0leC1jeC0leC1geC0lS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZSIgbXNnaWQ9IjYwOTg2ODQ4NDQwMjE2OTc3ODkiPiLgtIfgtLLgtY3gtLLgtL7gtKTgtL7gtJXgtY3gtJXgtYHgtJUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IlVSTCDgtKrgtJXgtbzgtKTgtY3gtKTgtYHgtJUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiLgtJ/gtYbgtJXgtY3igIzgtLjgtY3igIzgtLHgtY3gtLHgtY0g4LSk4LS/4LSw4LSe4LWN4LSe4LWG4LSf4LWB4LSV4LWN4LSV4LWB4LSVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiLgtKrgtLTgtK/gtKrgtJ/gtL/gtK/gtL7gtJXgtY3gtJXgtYHgtJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+IuC0teC1gOC0o+C1jeC0n+C1geC0giDgtJrgtYbgtK/gtY3gtK/gtYHgtJUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4i4LSf4LWG4LSV4LWN4oCM4LS44LWN4LSx4LWN4LSx4LWNIOC0pOC0v+C0sOC0nuC1jeC0nuC1huC0n+C1geC0leC1jeC0leC1vSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiLgtKjgtL/gtJjgtKPgtY3gtJ/gtYHgtLXgtL/gtb0g4LSa4LWH4LW84LSV4LWN4LSV4LWB4LSVIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiLgtIfgtLLgtY3gtLLgtL7gtKTgtL7gtJXgtY3gtJXgtYHgtJUiPC9zdHJpbmc+CkBAIC0xMTA3LDYgKzExMDksNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4i4LS14LS+4LW+4LSq4LWH4LSq4LWN4LSq4LW8IOC0ruC0vuC0seC1jeC0seC1geC0lSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+IuC0heC0seC0v+C0r+C0v+C0quC1jeC0quC1jSDgtLLgtL/gtLjgtKPgtbwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+IuC0leC0o+C1jeC0n+C1gOC0t+C1uyDgtKbgtL7gtKTgtL7gtLXgtY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiLgtIXgtLHgtL/gtK/gtL/gtKrgtY3gtKrgtY0g4LS44LS54LS+4LSv4LS/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJWUE4g4LS44LSc4LWA4LS14LSu4LS+4LSV4LWN4LSV4LS/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IOC0ieC0quC0r+C1i+C0l+C0v+C0muC1jeC0muC1jSBWUE4g4LSq4LWN4LSw4LS14LW84LSk4LWN4LSk4LSo4LSV4LWN4LS34LSu4LSu4LS+4LSV4LWN4LSV4LS/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4i4LSo4LWG4LSx4LWN4LSx4LWN4oCM4LS14LW84LSV4LWN4LSV4LWNIOC0qOC0v+C0r+C0qOC1jeC0pOC1jeC0sOC0v+C0leC1jeC0leC0vuC1uyDgtLjgtY3igIzgtKrgtbzgtLbgtL/gtJXgtY3gtJXgtYHgtJUuIjwvc3RyaW5nPgpAQCAtMTQ0MCwxMiArMTQ0Myw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+IuC0qOC0v+C0meC1jeC0meC0s+C1geC0n+C1hiDgtIXgtKHgtY3igIzgtK7gtL/gtKjgtL/gtLjgtY3igIzgtJ/gtY3gtLDgtYfgtLHgtY3gtLHgtbwg4LSF4LSq4LWN4oCM4LSh4LWH4LSx4LWN4LSx4LWB4LSa4LWG4LSv4LWN4oCM4LSk4LWBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiLgtKjgtL/gtJngtY3gtJngtLPgtYHgtJ/gtYYg4LSF4LSh4LWN4oCM4LSu4LS/4LSo4LS/4LS44LWN4oCM4LSf4LWN4LSw4LWH4LSx4LWN4LSx4LW8IOC0h+C0suC1jeC0suC0vuC0pOC0vuC0leC1jeC0leC0vyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4i4LSs4LS+4LSx4LWN4LSx4LSx4LS/IOC0huC0r+C1geC0uOC1jeC0uOC1jSDgtK7gtYbgtJrgtY3gtJrgtKrgtY3gtKrgtYbgtJ/gtYHgtKTgtY3gtKTgtL7gtbsg4LS44LS54LS+4LSv4LS/4LSV4LWN4LSV4LWB4LSo4LWN4LSo4LSk4LS/4LSo4LWNLCDgtKzgtL7gtLHgtY3gtLHgtLHgtL8g4LS44LWH4LS14LW8IOC0qOC0v+C0meC1jeC0meC0s+C1geC0n+C1hiDgtIngtKrgtJXgtLDgtKPgtKTgtY3gtKTgtL/gtKjgtY3gtLHgtYYg4LSq4LWN4LSw4LSV4LSf4LSo4LSk4LWN4LSk4LWGIOC0leC1geC0seC0r+C1jeKAjOC0leC1jeC0leC1geC0leC0r+C1geC0giDgtLXgtYjgtKzgtY3gtLDgtYfgtLfgtKjgtYbgtK/gtYHgtIIg4LSu4LS/4LSV4LWN4LSVIOC0quC0tuC1jeC0muC0vuC0pOC1jeC0pOC0siDgtLXgtL/gtLXgtLDgtKTgtY3gtKTgtYbgtK/gtYHgtIIg4LSq4LSw4LS/4LSu4LS/4LSk4LSq4LWN4LSq4LWG4LSf4LWB4LSk4LWN4LSk4LWB4LSV4LSv4LWB4LSCIOC0muC1huC0r+C1jeC0r+C1geC0qOC1jeC0qOC1gS4g4LSH4LSu4LWG4LSv4LS/4LW9LCDgtLjgtKjgtY3gtKbgtYfgtLbgtK7gtK/gtK/gtY3igIzgtJXgtY3gtJXgtb0sIOC0uOC0ruC0qOC1jeC0teC0r+C0v+C0quC1jeC0quC0v+C0leC1jeC0leC0suC0v+C0qOC1hiDgtIbgtLbgtY3gtLDgtK/gtL/gtJrgtY3gtJrgtYHgtLPgtY3gtLMg4LSu4LSx4LWN4LSx4LWNIOC0heC0quC1jeC0suC0v+C0leC1jeC0leC1h+C0t+C0qOC1geC0leC1viDgtI7gtKjgtY3gtKjgtL/gtLUg4LSo4LS/4LSZ4LWN4LSZ4LW+IOC0pOC1geC0seC0leC1jeC0leC1geC0qOC1jeC0qOC0pOC1geC0teC0sOC1hiDgtIXgtKrgtY3igIzgtKHgtYfgtLHgtY3gtLHgtYHgtJrgtYbgtK/gtY3gtK/gtL7gtKjgtL/gtJ/gtK/gtL/gtLLgtY3gtLIuXG5cbuC0qOC0v+C0meC1jeC0meC0s+C1geC0n+C1hiDgtIngtKrgtJXgtLDgtKPgtIIg4LSa4LS+4LW84LSc4LWN4LSc4LWB4LSa4LWG4LSv4LWN4LSv4LWB4LSu4LWN4LSq4LWL4LW+IOC0rOC0vuC0seC1jeC0seC0seC0vyDgtLjgtYfgtLXgtbwg4LS44LWN4LS14LSv4LSCIOC0k+C0q+C0vuC0leC1geC0gi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV90aXRsZSIgbXNnaWQ9Ijc0OTM5ODk3MjI2MTAwMDg3MDAiPiLgtKrgtY3gtLDgtL7gtKfgtL7gtKjgtY3gtK/gtIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iNzExODgyNjkwMDc2NzA0NzEyNSI+IuC0rOC1jeC0suC1i+C0leC1jeC0leC1geC0muC1huC0r+C1jeC0pOC1gTog4LSIIOC0heC0seC0v+C0r+C0v+C0quC1jeC0quC1geC0leC1viDgtJLgtLDgtL/gtJXgtY3gtJXgtLLgtYHgtIIg4LSV4LS+4LSj4LS/4LSV4LWN4LSV4LSw4LWB4LSk4LWNIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNjQ0NzY0MDQ0OTkxODQyNzE4NyI+IuC0pOC0vuC0tOC1jeC0qOC1jeC0qOC0pOC1jTog4LSF4LSx4LS/4LSv4LS/4LSq4LWN4LSq4LWNIOC0suC0v+C0uOC1jeC0seC1jeC0seC0v+C0qOC1jeC0seC1hiDgtKTgtL7gtLTgtYYg4LS24LSs4LWN4LSm4LSu4LWB4LSj4LWN4LSf4LS+4LSV4LWN4LSV4LS+4LSk4LWGIOC0leC0vuC0o+C0v+C0leC1jeC0leC1geC0lSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI3OTkxMTU3Njk3NjA5NTc1MjcxIj4i4LS44LS+4LSn4LS+4LSw4LSj4LSCOiDgtIgg4LSF4LSx4LS/4LSv4LS/4LSq4LWN4LSq4LWB4LSV4LW+IOC0qOC0v+C0tuC0rOC1jeC0puC0ruC0vuC0r+C0vyDgtJXgtL7gtKPgtL/gtJXgtY3gtJXgtYHgtJUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzE1MjIzODYzNzczNzIxNTY1NCI+IuC0ieC0r+C1vOC0qOC1jeC0qOC0pOC1jTog4LSF4LSx4LS/4LSv4LS/4LSq4LWN4LSq4LWNIOC0suC0v+C0uOC1jeC0seC1jeC0seC0v+C0qOC1jeC0seC1hiDgtI/gtLHgtY3gtLHgtLXgtYHgtIIg4LSu4LWB4LSV4LSz4LS/4LW9IOC0leC0vuC0o+C0v+C0leC1jeC0leC1geC0lSwg4LS24LSs4LWN4LSm4LSu4LWB4LSj4LWN4LSf4LS+4LSV4LWN4LSV4LWB4LSVIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+IuC0heC0n+C0v+C0r+C0qOC1jeC0pOC0sOC0gjog4LS44LWN4LSV4LWN4LSw4LWA4LSo4LS/4LW9IOC0puC1g+C0tuC1jeC0r+C0ruC0vuC0leC1jeC0leC1geC0lSwg4LS24LSs4LWN4LSm4LSu4LWB4LSj4LWN4LSf4LS+4LSV4LWN4LSV4LWB4LSVIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj4lMSRkIOC0ruC0v+C0qOC0v+C0seC1jeC0seC1jSDgtLjgtK7gtK/gtKTgtY3gtKTgtYfgtJXgtY3gtJXgtY0gKDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+IOC0teC0sOC1hik8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj7gtJLgtLDgtYEg4LSu4LS/4LSo4LS/4LSx4LWN4LSx4LWNIOC0uOC0ruC0r+C0pOC1jeC0pOC1h+C0leC1jeC0leC1jSAoPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMCI+JTIkczwveGxpZmY6Zz4g4LS14LSw4LWGKTwvaXRlbT4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbW4tck1OL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1tbi1yTU4vc3RyaW5ncy54bWwKaW5kZXggYmRmYmU3YS4uZDk4MmVjZSAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1tbi1yTU4vc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1tbi1yTU4vc3RyaW5ncy54bWwKQEAgLTIyMyw2ICsyMjMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiLQntC00L7QviDRgtKv0LPQttC40YUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+Ijk5OSsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fY2hpbGRyZW5fY291bnRfYnJhY2tldGVkIiBtc2dpZD0iMTc2OTQyNTQ3MzE2ODM0NzgzOSI+Iig8eGxpZmY6ZyBpZD0iTk9USUZJQ0FUSU9OQ09VTlQiPiVkPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4i0JrQvtC90YLQtdC90YLRi9CzINC90YPRg9GB0LDQvSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+ItCQ0Y7Rg9C70LPSr9C5INCz0L7RgNC40LwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiLQkNC90LTRgNC+0LnQtCDRgdC40YHRgtC10LwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+ItCl0YPQstC40LnQvSI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+ItCQ0L/QvyDQvdGMINC60LDQvNC10YDQsNCw0YAg0LfRg9GA0LDQsyDQsNCy0LDRhSDQsdC+0LvQvtC9INCy0LjQtNC10L4g0LHQuNGH0LjRhSDQsdC+0LvQvtC80LbRgtC+0LkuINCt0L3RjSDQt9Op0LLRiNOp06nRgNOp0Lsg0L3RjCDQsNC/0L8t0LQg0Y/QvNCw0YAg0Ycg0q/QtdC0INGC0LDQvdGLINC306nQstGI06nTqdGA06nQu9Cz0q/QudCz0Y3RjdGAINC60LDQvNC10YAg0LDRiNC40LPQu9Cw0YUg0LHQvtC70L7QvNC20LjQudCzINC+0LvQs9C+0L3Qvi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4i0YfQuNGH0LjRgNCz0Y3RjdCzINGD0LTQuNGA0LTQsNGFIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiLQkNC/0L8g0L3RjCDRh9C40YfQuNGA0LPRjdGN0LMg0YPQtNC40YDQtNCw0YUg0LHQvtC70L7QvNC20YLQvtC5LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiLQs9Cw0YAg0YfQuNC50LTRjdC9INGD0LTQuNGA0LTQsNGFIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiLQkNC/0L8g0L3RjCDQs9Cw0YAg0YfQuNC50LTRjdC90LMg0YPQtNC40YDQtNCw0YUg0LHQvtC70L7QvNC20YLQvtC5LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+ItGD0YLQsNGB0L3RiyDQtNGD0LPQsNCw0YDRgiDRiNGD0YPQtCDQtNGD0YPQtNC70LDQs9CwINGF0LjQudGFIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+ItCQ0L/QvyDQvdGMINGC0LDQvdGLINC+0YDQvtC70YbQvtC+0LPSr9C50LPRjdGN0YAg0LTRg9GD0LTQu9Cw0LPQsCDRhdC40LnRhSDQsdC+0LvQvtC80LbRgtC+0LkuINCt0L3RjSDQvdGMINGC06nQu9Op0LLQu9Op0LPQtNOp06nQs9Kv0Lkg0YLTqdC70LHTqdGA0YIg0L7RgNGD0YPQu9Cw0YUg0Y3RgdCy0Y3QuyDQtNGD0YPQtNC70LDQs9CwINGF0LjQudC90Y0uINCt0L3RjSDQvdGMINCw0L/Qvy3QsyDRj9Cw0YDQsNC70YLQsNC5INC00YPQs9Cw0LDRgNGCINC00YPRg9C00LvQsNCz0LAg0YXQuNC50YXQudCzINC306nQstGI06nTqdGA06nRhdCz0q/QuS4g0KXQvtGA0YLQvtC5INCw0L/QvyDQvdGMINGC0LDQvdGLINC306nQstGI06nTqdGA06nQu9Cz0q/QudCz0Y3RjdGAINC00YPRg9C00LvQsNCz0LAg0YXQuNC50LYg0YLQsNC90YvQsyDRgtOp0LvQsdOp0YDRgiDQvtGA0YPRg9C70LYg0LHQvtC70LfQvtGI0LPSr9C5Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiJJTVMg0LTRg9GD0LTQu9Cw0LPRi9C9INKv0LnQu9GH0LjQu9Cz0Y3RjdC90LQg0YXQsNC90LTQsNGFIjwvc3RyaW5nPgpAQCAtODU4LDEwICs4NTcsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiLQotCw0YHQu9Cw0YUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+ItCl0YPRg9C70LDRhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+ItCR0YPRg9C70LPQsNGFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiLQpdC+0L7RgdC+0L0g0YLQtdC60YHRgiDRhdGN0LvQsdGN0YDRjdGN0YAg0LHRg9GD0LvQs9Cw0YUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXBsYWNlIiBtc2dpZD0iNTc4MTY4NjA1OTA2MzE0ODkzMCI+ItCe0YDQu9GD0YPQu9Cw0YXigKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4i0KPRgdGC0LPQsNGFIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiJVUkwg0YXRg9GD0LvQsNGFIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4i0KLQtdC60YHRgiDRgdC+0L3Qs9C+0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmRvIiBtc2dpZD0iNzkwNTc4ODUwMjQ5MTc0MjMyOCI+ItCR0YPRhtCw0LDRhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlZG8iIG1zZ2lkPSI3NzU5NDY0ODc2NTY2ODAzODg4Ij4i0JTQsNGF0LjQvSDRhdC40LnRhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiLQotC10LrRgdGCINGB0L7QvdCz0L7RhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiLQotC+0LvRjCDQsdC40YfQuNCz0YIg0L3RjdC80Y3RhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4i0KPRgdGC0LPQsNGFIjwvc3RyaW5nPgpAQCAtMTEwNyw2ICsxMTA5LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+ItCl0LDQvdGL0L0g0LfRg9GA0LDQsyDRgdC+0LvQuNGFIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4i0JzRjdC00Y3Qs9C00Y3QuyDRgdC+0L3RgdC+0LPRhyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbmRpdGlvbl9wcm92aWRlcl9zZXJ2aWNlX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMzIxMzQzMzUyOTA2NTI0NTY0Ij4i0J3TqdGF0YbTqdC7INC90LjQudC70q/Sr9C70Y3Qs9GHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2Fzc2lzdGFudF9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iOTA5NDU2MDU1NTY5MTAyOTUyIj4i0JzRjdC00Y3Qs9C00LvQuNC50L0g0YLRg9GB0LvQsNCz0YciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IlZQTiDQuNC00Y3QstGF0YLRjdC5INCx0L7Qu9C+0LIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiJWUE4t0LMgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+INC40LTRjdCy0YXRgtGN0Lkg0LHQvtC70LPQvtCyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4i0KHSr9C70LbRjdGN0LMg0YPQtNC40YDQtNCw0YUg0LHQvtC7INGF0q/RgNC90Y0g0q/Sry4iPC9zdHJpbmc+CkBAIC0xNDQwLDEyICsxNDQzLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4i0KLQsNC90LDQuSDQsNC00LzQuNC9INGI0LjQvdGN0YfQuNC70YHRjdC9Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiLQotCw0L3RiyDQsNC00LzQuNC9INGD0YHRgtCz0LDRgdCw0L0g0LHQsNC50L3QsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4i0JHQsNGC0LDRgNC10Lkg0YXQsNC00LPQsNC70LDRhSDRhNGD0L3QutGGINC90Ywg0YLQsNC90Ysg0YLTqdGF06nTqdGA06nQvNC20LjQudC9INGG0Y3QvdGN0LPQuNC50LMg0YXQsNC00LPQsNC70LDRhdGL0L0g0YLRg9C70LQg0LPSr9C50YbRjdGC0LPRjdC70LjQudCzINCx0LDQs9Cw0YHQs9Cw0LYsINGH0LjRh9GA0Y3Qu9GC0LjQudCzINCx0YPRg9GA0YPRg9C70LYsINCx0LDQudGA0YjQu9GL0L0g0q/QudC70YfQuNC70LPRjdGN0L3Sr9Kv0LQg0LHQvtC70L7QvSDQsdGD0YHQsNC0INOp0LPTqdCz0LTQu9C40LnQvSDRhdGN0LzQttGN0Y3QsyDQsdCw0LPQsNGB0LPQsNC00LDQsyDRjtC8LiDQmC3QvNGN0LnQuywg0LzQtdGB0YHQtdC2INCx0L7Qu9C+0L0g0LHRg9GB0LDQtCDRgdC40L3RhdGA0L7QvSDRhdC40LnQtNGN0LMg0LDQv9C70LjQutC10LnRiNC90q/Sr9C0INC00LDRgNCw0LAg0LTQsNGF0LjQvSDQvdGN0Y3Qs9C00Y3RhSDRhdKv0YDRgtC70Y3RjSDQsNCy0YLQvtC80LDRgtCw0LDRgCDRiNC40L3RjdGH0LvRjdC70YIg0YXQuNC50YXQs9Kv0LkuXG5cbtCc06nQvSDQsdCw0YLQsNGA0LXQuSDRhdCw0LTQs9Cw0LvQsNGFINGE0YPQvdC60YYg0L3RjCDRgtCw0L3Ri9CzINGC06nRhdOp06nRgNOp0LzQttOp06kg0YbRjdC90Y3Qs9C70Y3RhSDSr9C10LQg0LDQstGC0L7QvNCw0YLQsNCw0YAg0YPQvdGC0YDQsNGFINGO0LwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfdGl0bGUiIG1zZ2lkPSI3NDkzOTg5NzIyNjEwMDA4NzAwIj4i0JDRhyDRhdC+0LvQsdC+0LPQtNC+0LsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iNzExODgyNjkwMDc2NzA0NzEyNSI+ItCR0LvQvtC60LvQvtGB0L7QvTog0K3QtNCz0Y3RjdGAINC80Y3QtNGN0LPQtNC70LjQudCzINGF0Y3Qt9GN0Y0g0Ycg0YXQsNGA0YPRg9C70LDRhdCz0q/QuSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjY0NDc2NDA0NDk5MTg0MjcxODciPiLQkdCw0LPQsDog0JzRjdC00Y3Qs9C00LvQuNC50LMg0LbQsNCz0YHQsNCw0LvRgtGL0L0g0LTQvtC+0LQg0YXRjdGB0Y3Qs9GCINC00YPRg9Cz0q/QuSDRhdCw0YDRg9GD0LvQsNGFIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiLQldGA0LTQuNC50L06INCt0LTQs9GN0Y3RgCDQvNGN0LTRjdCz0LTQu9C40LnQsyDQtNGD0YPQs9Kv0Lkg0YXQsNGA0YPRg9C70LDRhSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMTUyMjM4NjM3NzM3MjE1NjU0Ij4i06jQvdC006nRgDog0LzRjdC00Y3Qs9C00LvQuNC50LMg0LbQsNCz0YHQsNCw0LvRgtGL0L0g0Y3RhdGN0L3QtCDQtNGD0YPRgtCw0Lkg0YXQsNGA0YPRg9C70LDRhSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiLQr9Cw0YDQsNC70YLQsNC5OiDQlNGN0LvQs9GN0YbRjdC90LQg0Y/QsNGA0LDQu9GC0LDQuSwg0LTRg9GD0YLQsNC5INCz0LDRgNCz0LDRhSI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+ICUxJGQg0LzQuNC90YPRgtGL0L0g0YLRg9GA0YggKCA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPiDRhdKv0YDRgtGN0LspPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+0L3RjdCzINC80LjQvdGD0YLRi9C9INGC0YPRgNGIICg8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8wIj4lMiRzPC94bGlmZjpnPiDRhdKv0YDRgtGN0LspPC9pdGVtPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1tci1ySU4vc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLW1yLXJJTi9zdHJpbmdzLnhtbAppbmRleCBjMzIzYjg1Li40MDg3MTk5IDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLW1yLXJJTi9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLW1yLXJJTi9zdHJpbmdzLnhtbApAQCAtMjIzLDYgKzIyMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2tkb3duIiBtc2dpZD0iODc1MTU0MjUxNDcyNDMzMjg3MyI+IuCkhuCkpOCkviDgpLLgpYngpJUg4KSV4KSw4KS+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiI5OTkrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2NoaWxkcmVuX2NvdW50X2JyYWNrZXRlZCIgbXNnaWQ9IjE3Njk0MjU0NzMxNjgzNDc4MzkiPiIoPHhsaWZmOmcgaWQ9Ik5PVElGSUNBVElPTkNPVU5UIj4lZDwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IuCksuCkquCkteCkv+CksuClh+CksuClgCDgpLjgpL7gpK7gpJfgpY3gpLDgpYAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiLgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQg4KSu4KWL4KShIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4iQW5kcm9pZCDgpLjgpL/gpLjgpY3igI3gpJ/gpK4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+IuCkteCliOCkr+CkleCljeCkpOCkv+CklSI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IuCkleClheCkruClh+CksOCljeKAjeCkr+CkvuCkuOCkuSDgpJrgpL/gpKTgpY3gpLDgpYcg4KSG4KSj4KS/IOCkteCljeCkueCkv+CkoeCkv+CkkyDgpJjgpYfgpKPgpY3gpK/gpL7gpLjgpL7gpKDgpYAg4KSF4KWF4KSqIOCksuCkviDgpIXgpKjgpYHgpK7gpKTgpYAg4KSm4KWH4KSk4KWHLiDgpLngpYAg4KSq4KSw4KS14KS+4KSo4KSX4KWAIOCkhuCkquCksuCljeCkr+CkviDgpKrgpYHgpLfgpY3gpJ/gpYDgpJXgpLDgpKPgpL7gpLbgpL/gpLXgpL7gpK8g4KSV4KWL4KSj4KSk4KWN4KSv4KS+4KS54KWAIOCkteClh+Cks+ClgCDgpJXgpYXgpK7gpYfgpLDgpL4g4KS14KS+4KSq4KSw4KSj4KWN4KSv4KS+4KS44KS+4KSg4KWAIOCkheClheCkqiDgpLLgpL4g4KSq4KSw4KS14KS+4KSo4KSX4KWAIOCkpuClh+CkpOClhy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4i4KSV4KSC4KSq4KSoIOCkqOCkv+Ckr+CkguCkpOCljeCksOCkv+CkpCDgpJXgpLDgpL4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+IuCkheClheCkqiDgpLLgpL4g4KS14KWN4KS54KS+4KSv4KSs4KWN4KSw4KWH4KSf4KSwIOCkqOCkv+Ckr+CkguCkpOCljeCksOCkv+CkpCDgpJXgpLDgpKPgpY3gpK/gpL7gpLjgpL7gpKDgpYAg4KSF4KSo4KWB4KSu4KSk4KWAIOCkpuClh+CkpOClhy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4i4KSr4KWN4KSy4KWF4KS24KSy4KS+4KSH4KSfIOCkqOCkv+Ckr+CkguCkpOCljeCksOCkv+CkpCDgpJXgpLDgpL4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+IuCkq+CljeCksuClheCktuCksuCkvuCkh+CknyDgpKjgpL/gpK/gpILgpKTgpY3gpLDgpL/gpKQg4KSV4KSw4KSj4KWN4KSv4KS+4KS44KS+4KSg4KWAIOCkheClheCkqiDgpLLgpL4g4KSF4KSo4KWB4KSu4KSk4KWAIOCkpuClh+CkpOClhy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiLgpKvgpYvgpKgg4KSo4KSC4KSs4KSw4KS14KSwIOCkquCljeCksOCkpOCljeCkr+CkleCljeCktyDgpJXgpYngpLIg4KSV4KSw4KS+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+IuCkhuCkquCksuCljeCkr+CkviDgpLngpLjgpY3gpKTgpJXgpY3gpLfgpYfgpKrgpL7gpLbgpL/gpLXgpL7gpK8g4KSr4KWL4KSoIOCkqOCkguCkrOCksOCkteCksCDgpJXgpYngpLIg4KSV4KSw4KSj4KWN4KSv4KS+4KS44KS+4KSg4KWAIOCkheClheCkqiDgpLLgpL4g4KSF4KSo4KWB4KSu4KSk4KWAIOCkpuClh+CkpOClhy4g4KSv4KS+4KSu4KWB4KSz4KWHIOCkheCkqOCkquClh+CkleCljeCkt+Ckv+CkpCDgpLbgpYHgpLLgpY3gpJUg4KSV4KS/4KSC4KS14KS+IOCkleClieCksiDgpLLgpL7gpJfgpYIg4KS24KSV4KSk4KS+4KSkLiDgpLLgpJXgpY3gpLfgpL7gpKQg4KSg4KWH4KS14KS+IOCkleClgCDgpLngpYcg4KSG4KSj4KWA4KSs4KS+4KSj4KWA4KSa4KWN4KSv4KS+IOCkqOCkguCkrOCksOCkteCksCDgpJXgpYngpLIg4KSV4KSw4KSj4KWN4KSv4KS+4KS44KS+4KSg4KWAIOCkheClheCkqiDgpLLgpL4g4KSF4KSo4KWB4KSu4KSk4KWAIOCkpuClh+CkpCDgpKjgpL7gpLngpYAuIOCkpuClgeCksOCljeCkreCkvuCkteCkqOCkvuCkquClguCksOCljeCkoyDgpIXgpYXgpKrgpY3gpLgg4KSo4KWAIOCkhuCkquCksuCljeCkr+CkviDgpKrgpYHgpLfgpY3gpJ/gpL/gpJXgpLDgpKPgpL7gpLbgpL/gpLXgpL7gpK8g4KSV4KWJ4KSyIOCkleClh+CksuCljeCkr+CkvuCkruClgeCks+ClhyDgpIbgpKrgpLLgpYcg4KSq4KWI4KS44KWHIOCkluCksOCljeCkmiDgpLngpYvgpIog4KS24KSV4KSk4KS+4KSkLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiIG1zZ2lkPSIzNTc0OTQzODQ3MTgxNzkzOTE4Ij4iSU1TIOCkleClieCksiDgpLjgpYfgpLXgpYfgpK7gpKfgpY3igI3gpK/gpYcg4KSq4KWN4KSw4KS14KWH4KS2IOCkleCksOCkviI8L3N0cmluZz4KQEAgLTg1OCwxMCArODU3LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJjdXQiIG1zZ2lkPSIzMDkyNTY5NDA4NDM4NjI2MjYxIj4i4KSV4KSfIOCkleCksOCkviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4i4KSV4KWJ4KSq4KWAIOCkleCksOCkviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+IuCkquClh+CkuOCljeCknyDgpJXgpLDgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXN0ZV9hc19wbGFpbl90ZXh0IiBtc2dpZD0iNTQyNzc5Mjc0MTkwODAxMDY3NSI+IuCkuOCkvuCkp+CkviDgpK7gpJzgpJXgpYLgpLAg4KSu4KWN4KS54KSj4KWC4KSoIOCkquClh+CkuOCljeCknyDgpJXgpLDgpL4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXBsYWNlIiBtc2dpZD0iNTc4MTY4NjA1OTA2MzE0ODkzMCI+IuCkquClgeCkqOCksOCljeCkuOCljeCkpeCkv+CkpCDgpJXgpLDgpL7igKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4i4KS54KSf4KS14KS+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiJVUkwg4KSV4KWJ4KSq4KWAIOCkleCksOCkviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+IuCkruCknOCkleClguCksCDgpKjgpL/gpLXgpKHgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmRvIiBtc2dpZD0iNzkwNTc4ODUwMjQ5MTc0MjMyOCI+IuCkquClguCksOCljeCkteCkteCkpCDgpJXgpLDgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+IuCkquClgeCkqOCljeCkueCkviDgpJXgpLDgpL4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4i4KSu4KSc4KSV4KWC4KSwIOCkqOCkv+CkteCkoSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiLgpLbgpKzgpY3gpKbgpJXgpYvgpLbgpL7gpKQg4KSc4KWL4KSh4KS+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiLgpLngpJ/gpLXgpL4iPC9zdHJpbmc+CkBAIC0xMTA3LDYgKzExMDksNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4i4KS14KWJ4KSy4KSq4KWH4KSq4KSwIOCkrOCkpuCksuCkviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+IuCkuOClguCkmuCkqOCkviDgpJDgpJXgpKPgpL7gpLDgpL4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+IuCkheCknyDgpKrgpY3gpLDgpKbgpL7gpKTgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiLgpLjgpYLgpJrgpKjgpL4g4KS44KS54KS+4KSv4KWN4KSv4KSVIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJWUE4g4KS44KSV4KWN4KSw4KS/4KSvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IOCkpuCljeCkteCkvuCksOClhyBWUE4g4KS44KSV4KWN4KSw4KS/4KSvIOCkleClh+CksuClhyDgpIbgpLngpYciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiLgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KS14KWN4KSv4KS14KS44KWN4KSl4KS+4KSq4KS/4KSkIOCkleCksOCko+CljeCkr+CkvuCkuOCkvuCkoOClgCDgpLjgpY3gpKrgpLDgpY3gpLYg4KSV4KSw4KS+LiI8L3N0cmluZz4KQEAgLTE0NDAsMTIgKzE0NDMsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV91cGRhdGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijg4NTY2MzEzMjI0NDAxODcwNzEiPiLgpIbgpKrgpLLgpY3gpK/gpL4g4KSq4KWN4KSw4KS24KS+4KS44KSV4KS+4KSm4KWN4KS14KS+4KSw4KWHIOCkheCkpuCljeCkr+CkpOCkqOCkv+CkpCDgpJXgpYfgpLLgpYciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX2RlbGV0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iNzY1MDU3NzM4NzQ5MzEwMTM1MyI+IuCkhuCkquCksuCljeCkr+CkviDgpKrgpY3gpLDgpLbgpL7gpLjgpJXgpL7gpKbgpY3gpLXgpL7gpLDgpYcg4KS54KSf4KS14KS/4KSy4KWHIOCkhuCkueClhyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4i4KSs4KWF4KSf4KSw4KWA4KSa4KWHIOCkhuCkr+ClgeCkt+CljeCkryDgpLjgpYHgpKfgpL7gpLDgpL/gpKQg4KSV4KSw4KSj4KWN4oCN4KSv4KS+4KSkIOCkruCkpuCkpCDgpJXgpLDgpKPgpY3gpK/gpL7gpLjgpL7gpKDgpYAsIOCkrOClheCkn+CksOClgCDgpKzgpJrgpKTgpJXgpLDgpY3gpKTgpL4g4KSG4KSq4KSy4KWN4KSv4KS+IOCkoeCkv+CkteCljeCkueCkvuCkh+CkuOCkmuClhyDgpJXgpL7gpLDgpY3gpK/gpKrgpY3gpLDgpKbgpLDgpY3gpLbgpKgg4KSV4KSu4KWAIOCkleCksOCkpOCliyDgpIbgpKPgpL8g4KSV4KSC4KSq4KSoLCDgpLjgpY3gpKXgpL7gpKgg4KS44KWH4KS14KS+IOCkhuCko+CkvyDgpKzgpLDgpL7gpJog4KSq4KS+4KSw4KWN4KS24KWN4KS14KSt4KWC4KSu4KWAIOCkoeClh+Ckn+CkviDgpK7gpLDgpY3gpK/gpL7gpKbgpL/gpKQg4KSV4KSw4KSk4KWLLiDgpLjgpILgpJXgpL7gpLLgpKjgpL7gpLXgpLAg4KSF4KS14KSy4KSC4KSs4KWC4KSoIOCkheCkuOCko+CkvuCksOClhyDgpIjgpK7gpYfgpLIsIOCkuOCkguCkpuClh+CktuCkqCDgpIbgpKPgpL8g4KSH4KSk4KSwIOCkheKAjeClheCkquCljeCkuCDgpIbgpKrgpKMg4KSJ4KSY4KSh4KSy4KWN4KSv4KS+4KS24KS/4KS14KS+4KSvIOCkheCkpuCljeCkr+CkpOCkqOCkv+CkpCDgpLngpYvgpIog4KS24KSV4KSkIOCkqOCkvuCkueClgOCkpC5cblxu4KSG4KSq4KSy4KWHIOCkoeCkv+CkteCljeCkueCkvuCkh+CkuCDgpJrgpL7gpLDgpY3gpJwg4KS54KWL4KSkIOCkheCkuOCkpOClhyDgpKTgpYfgpLXgpY3gpLngpL4g4KSs4KWF4KSf4KSw4KWAIOCkrOCkmuCkpOCkleCksOCljeCkpOCkviDgpLjgpY3gpLXgpK/gpILgpJrgpLLgpL/gpKTgpKrgpKPgpYcg4KSs4KSC4KSmIOCkueCli+CkpOCliy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV90aXRsZSIgbXNnaWQ9Ijc0OTM5ODk3MjI2MTAwMDg3MDAiPiLgpK7gpLngpKTgpY3gpKTgpY3gpLUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iNzExODgyNjkwMDc2NzA0NzEyNSI+IuCkheCkteCksOCli+Ckp+Ckv+CkpCDgpJXgpYfgpLLgpYc6IOCkr+CkviDgpLjgpYLgpJrgpKjgpL4g4KSV4KSn4KWA4KS54KWAIOCkpuCksOCljeCktuCkteClgiDgpKjgpJXgpL4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4i4KSV4KSu4KWAOiDgpLbgpL7gpILgpKTgpKrgpKPgpYcg4KS44KWC4KSa4KSo4KS+IOCkuOClguCkmuClgOCkmuCljeCkr+CkviDgpKTgpLPgpL7gpLbgpYAg4KSm4KSw4KWN4KS24KS14KS+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiLgpLjgpL7gpK7gpL7gpKjgpY3gpK86IOCkr+CkviDgpLjgpYLgpJrgpKjgpL4g4KS24KS+4KSC4KSk4KSq4KSj4KWHIOCkpuCksOCljeCktuCkteCkviI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMTUyMjM4NjM3NzM3MjE1NjU0Ij4i4KS44KSw4KWN4KS14KWL4KSa4KWN4KSaOiDgpLjgpYLgpJrgpKjgpL4g4KS44KWC4KSa4KWA4KSa4KWN4KSv4KS+IOCktuClgOCksOCljeCkt+CkuOCljeCkpeCkvuCkqOClgCDgpKbgpLDgpY3gpLbgpLXgpL4g4KSG4KSj4KS/IOCkp+CljeCkteCkqOClgCDgpJrgpL7gpLLgpYIg4KSV4KSw4KS+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+IuCkpOCljeCkteCksOCkv+CkpDog4KS44KWN4KSV4KWN4KSw4KWA4KSo4KS14KSwIOCkoeCli+CkleCkvuCkteClguCkqCDgpKrgpLngpL4g4KSG4KSj4KS/IOCkp+CljeCkteCkqOClgCDgpJrgpL7gpLLgpYIg4KSV4KSw4KS+Ijwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+JTEkZCDgpK7gpL/gpKjgpL/gpJ/gpL7gpLjgpL7gpKDgpYAgKDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+IOCkquCksOCljeCkr+CkguCkpCk8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPiUxJGQg4KSu4KS/4KSo4KS/4KSf4KS+4KSC4KS44KS+4KSg4KWAICg8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPiDgpKrgpLDgpY3gpK/gpILgpKQpPC9pdGVtPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1tcy1yTVkvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLW1zLXJNWS9zdHJpbmdzLnhtbAppbmRleCAyMTA1YjkwLi4wOTIzZTkxIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLW1zLXJNWS9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLW1zLXJNWS9zdHJpbmdzLnhtbApAQCAtMjIzLDYgKzIyMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2tkb3duIiBtc2dpZD0iODc1MTU0MjUxNDcyNDMzMjg3MyI+Ikt1bmNpIHNla2FyYW5nIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiI5OTkrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2NoaWxkcmVuX2NvdW50X2JyYWNrZXRlZCIgbXNnaWQ9IjE3Njk0MjU0NzMxNjgzNDc4MzkiPiIoPHhsaWZmOmcgaWQ9Ik5PVElGSUNBVElPTkNPVU5UIj4lZDwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IkthbmR1bmdhbiB0ZXJzZW1idW55aSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+Ik1vZCBzZWxhbWF0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4iU2lzdGVtIEFuZHJvaWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+IlBlcmliYWRpIjwvc3RyaW5nPgpAQCAtMzUzLDggKzM1NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbmdhbWJpbCBnYW1iYXIgZGFuIHZpZGVvIG1lbmdndW5ha2FuIGthbWVyYS4gS2ViZW5hcmFuIGluaSBtZW1iZW5hcmthbiBhcGwgdW50dWsgbWVuZ2d1bmFrYW4ga2FtZXJhIHBhZGEgYmlsYS1iaWxhIG1hc2EgdGFucGEgcGVuZ2VzYWhhbiBhbmRhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiJrYXdhbCBnZXRhcmFuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiJNZW1iZW5hcmthbiBhcGwgbWVuZ2F3YWwgcGVuZ2dldGFyLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiJtZW5nYXdhbCBsYW1wdSBzdWx1aCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4iTWVtYmVuYXJrYW4gYXBsIG1lbmdhd2FsIGxhbXB1IHN1bHVoLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+InBhbmdnaWwgdGVydXMgbm9tYm9yIHRlbGVmb24iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbWFuZ2dpbCBub21ib3IgdGVsZWZvbiB0YW5wYSBjYW1wdXIgdGFuZ2FuIGFuZGEuIEluaSBtdW5na2luIG1lbnllYmFia2FuIGNhaiBhdGF1IHBhbmdnaWxhbiB5YW5nIGRpIGx1YXIgamFuZ2thYW4uIEFwbCBoYXNhZCBib2xlaCBtZW55ZWJhYmthbiBhbmRhIGtlcnVnaWFuIHdhbmcgZGVuZ2FuIG1lbWJ1YXQgcGFuZ2dpbGFuIHRhbnBhIHBlbmdlc2FoYW4gYW5kYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ltc0NhbGxTZXJ2aWNlIiBtc2dpZD0iMzU3NDk0Mzg0NzE4MTc5MzkxOCI+ImFrc2VzIHBlcmtoaWRtYXRhbiBwYW5nZ2lsYW4gSU1TIjwvc3RyaW5nPgpAQCAtODU4LDEwICs4NTcsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiJQb3RvbmciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+IlNhbGluIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzdGUiIG1zZ2lkPSI1NjI5ODgwODM2ODA1MDM2NDMzIj4iVGFtcGFsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiJUYW1wYWwgc2ViYWdhaSB0ZWtzIGJpYXNhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiJHYW50aS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZSIgbXNnaWQ9IjYwOTg2ODQ4NDQwMjE2OTc3ODkiPiJQYWRhbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4iU2FsaW4gVVJMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4iUGlsaWggdGVrcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVuZG8iIG1zZ2lkPSI3OTA1Nzg4NTAyNDkxNzQyMzI4Ij4iQnVhdCBhc2FsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiJCdWF0IHNlbXVsYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiJQZW1pbGloYW4gdGVrcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiJUYW1iYWgga2Uga2FtdXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+IlBhZGFtIjwvc3RyaW5nPgpAQCAtMTEwNyw2ICsxMTA5LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+IlR1a2FyIGtlcnRhcyBkaW5kaW5nIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4iUGVuZGVuZ2FyIHBlbWJlcml0YWh1YW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+IlBlbWJla2FsIGtlYWRhYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiJQZW1iYW50dSBwZW1iZXJpdGFodWFuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJWUE4gZGlha3RpZmthbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+IlZQTiBkaWFrdGlma2FuIG9sZWggPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4iU2VudHVoIHVudHVrIG1lbmd1cnVzIHJhbmdrYWlhbi4iPC9zdHJpbmc+CkBAIC0xNDQwLDEyICsxNDQzLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4iRGlrZW1hcyBraW5pIG9sZWggcGVudGFkYmlyIGFuZGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX2RlbGV0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iNzY1MDU3NzM4NzQ5MzEwMTM1MyI+IkRpcGFkYW1rYW4gb2xlaCBwZW50YWRiaXIgYW5kYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4iVW50dWsgbWVtYmFudHUgbWVtcGVyYmFpayBoYXlhdCBiYXRlcmksIHBlbmppbWF0IGJhdGVyaSBtZW5ndXJhbmdrYW4gcHJlc3Rhc2kgcGVyYW50aSBhbmRhIGRhbiBtZW5nZWhhZGthbiBnZXRhcmFuLCBwZXJraGlkbWF0YW4gbG9rYXNpIGRhbiBrZWJhbnlha2FuIGRhdGEgbGF0YXIgYmVsYWthbmcuIEUtbWVsLCBwZW1lc2VqYW4gZGFuIGFwbCBsYWluIHlhbmcgYmVyZ2FudHVuZyBrZXBhZGEgcGVueWVnZXJha2FuIG11bmdraW4gdGlkYWsgbWVuZ2VtYXMga2luaSwgbWVsYWlua2FuIGFuZGEgbWVtYnVrYSBhcGwgaXR1LlxuXG5QZW5qaW1hdCBiYXRlcmkgZGltYXRpa2FuIHNlY2FyYSBhdXRvbWF0aWsgc2VtYXNhIHBlcmFudGkgYW5kYSBzZWRhbmcgZGljYXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfdGl0bGUiIG1zZ2lkPSI3NDkzOTg5NzIyNjEwMDA4NzAwIj4iS2VwZW50aW5nYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iNzExODgyNjkwMDc2NzA0NzEyNSI+IkRpc2VrYXQ6IEphbmdhbiBzZWthbGkta2FsaSB0dW5qdWtrYW4gcGVtYmVyaXRhaHVhbiBpbmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4iUmVuZGFoOiBUdW5qdWtrYW4gcGFkYSBiYWhhZ2lhbiBiYXdhaCBzZW5hcmFpIHBlbWJlcml0YWh1YW4gc2VjYXJhIHNlbnlhcCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI3OTkxMTU3Njk3NjA5NTc1MjcxIj4iQmlhc2E6IFR1bmp1a2thbiBwZW1iZXJpdGFodWFuIGluaSBzZWNhcmEgc2VueWFwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiJUaW5nZ2k6IFR1bmp1a2thbiBwYWRhIGJhaGFnaWFuIGF0YXMgc2VuYXJhaSBwZW1iZXJpdGFodWFuIGRhbiBidW55aWthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiJTZWdlcmE6IEludGFpIHBhZGEgc2tyaW4gZGFuIGJ1bnlpa2FuIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5TZWxhbWEgJTEkZCBtaW5pdCAoc2VoaW5nZ2EgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+U2VsYW1hIHNhdHUgbWluaXQgKHNlaGluZ2dhIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzAiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbXktck1NL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1teS1yTU0vc3RyaW5ncy54bWwKaW5kZXggZTgxNzhlMy4uM2VmN2U2YyAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1teS1yTU0vc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1teS1yTU0vc3RyaW5ncy54bWwKQEAgLTIyMyw2ICsyMjMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiLhgJrhgIHhgK8g4YCe4YCx4YCs4YC34YCV4YCt4YCQ4YC64YCb4YCU4YC6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiLhgYnhgYnhgYkrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2NoaWxkcmVuX2NvdW50X2JyYWNrZXRlZCIgbXNnaWQ9IjE3Njk0MjU0NzMxNjgzNDc4MzkiPiIoPHhsaWZmOmcgaWQ9Ik5PVElGSUNBVElPTkNPVU5UIj4lZDwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IuGAoeGAgOGAvOGAseGArOGAhOGAuuGAuOGAoeGAm+GArOGAmeGAu+GArOGAuCDhgJ3hgL7hgIDhgLrhgJHhgKzhgLgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiLhgKHhgJThgLnhgJDhgJvhgKzhgJrhgLrhgIDhgIThgLrhgLjhgJnhgL7hgK8g4YCF4YCU4YCF4YC6KFNhZmUgbW9kZSkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiJBbmRyb2lkwqDhgIXhgJThgIXhgLoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+IuGAgOGAreGAr+GAmuGAuuGAm+GAseGAuCI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IuGAoeGAleGAnOGAruGAgOGAseGAuOGAm+GAvuGAhOGAuuGAuOGAoeGArOGAuCDhgKHhgJzhgK3hgK/hgKHhgJzhgLvhgLHhgKzhgIDhgLog4YCT4YCs4YCQ4YC64YCV4YCv4YC24YCb4YCt4YCv4YCA4YC64YCB4YC94YCE4YC34YC64YGKIOGAl+GAruGAkuGAruGAmuGAreGAryDhgJvhgK3hgK/hgIDhgLrhgIDhgLDhgLjhgIHhgL3hgIThgLfhgLog4YCV4YC84YCv4YCV4YCr4YGLIOGAkuGAruGAgeGAveGAhOGAt+GAuuGAleGAvOGAr+GAgeGAu+GAgOGAuuGAgCDhgKHhgJXhgJzhgK7hgIDhgLHhgLjhgJvhgL7hgIThgLrhgLjhgIDhgK3hgK8g4YCh4YCB4YC74YCt4YCU4YC64YCZ4YCb4YC94YCx4YC4IOGAgOGAhOGAuuGAmeGAm+GArOGAoeGArOGAuCDhgIHhgL3hgIThgLfhgLrhgJXhgLzhgK/hgIHhgLvhgIDhgLog4YCZ4YCc4YCt4YCv4YCh4YCV4YC64YCV4YCyIOGAnuGAr+GAtuGAuOGAgeGAveGAhOGAt+GAuuGAleGAvOGAr+GAleGAq+GAnuGAiuGAuuGBiyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiLhgJDhgK/hgJThgLrhgIHhgK/hgJThgLrhgJnhgL7hgK/hgKHhgKzhgLgg4YCR4YCt4YCU4YC64YC44YCB4YC74YCv4YCV4YC64YCB4YC84YCE4YC64YC4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiJhcHDhgKHhgKzhgLgg4YCQ4YCv4YCU4YC64YCB4YCr4YCF4YCA4YC64YCA4YCt4YCvIOGAkeGAreGAlOGAuuGAuOGAgeGAu+GAr+GAleGAuuGAgeGAveGAhOGAt+GAuiDhgJXhgLzhgK/hgJ7hgIrhgLrhgYsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4i4YCT4YCr4YCQ4YC64YCZ4YCu4YC44YCh4YCs4YC4IOGAkeGAreGAlOGAuuGAuOGAnuGAreGAmeGAuuGAuOGAm+GAlOGAuiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4iYXBw4YCh4YCs4YC4IOGAgOGArOGAuCDhgJbhgJzhgIDhgLrhgJvhgL7hgJnhgK7hgLjhgIDhgK3hgK8g4YCR4YCt4YCU4YC64YC44YCB4YC74YCv4YCV4YC64YCB4YC94YCE4YC34YC6IOGAleGAvOGAr+GAnuGAiuGAuuGBiyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+IuGAluGAr+GAlOGAuuGAuOGAlOGAtuGAleGAq+GAkOGAuuGAmeGAu+GArOGAuOGAgOGAreGAr+GAkOGAreGAr+GAgOGAuuGAm+GAreGAr+GAgOGAuuGAgeGAseGAq+GAuuGAhuGAreGAr+GAgeGAvOGAhOGAuuGAuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQaG9uZSIgbXNnaWQ9IjM3NDA3OTc1NzYxMTM3NjA4MjciPiLhgKHhgJXhgJzhgK7hgIDhgLHhgLjhgJvhgL7hgIThgLrhgLjhgKHhgKzhgLgg4YCh4YCc4YCt4YCv4YCh4YCc4YC74YCx4YCs4YCA4YC6IOGAluGAr+GAlOGAuuGAuOGAgeGAseGAq+GAuuGAgeGAveGAhOGAt+GAuiDhgJXhgLzhgK/hgJXhgKvhgYsg4YCZ4YCc4YCt4YCv4YCh4YCV4YC64YCe4YCx4YCsIOGAluGAr+GAlOGAuuGAuOGAgSDhgJnhgLvhgKzhgLgg4YCW4YC84YCF4YC64YCV4YCx4YCr4YC64YCU4YCt4YCv4YCE4YC64YCV4YCr4YCe4YCK4YC64YGLIOGAkuGAruGAgeGAveGAhOGAt+GAuuGAleGAvOGAr+GAgeGAvOGAhOGAuuGAuOGAmeGAvuGArCDhgKHhgJvhgLHhgLjhgJXhgLHhgKvhgLrhgJbhgK/hgJThgLrhgLjhgIHhgLHhgKvhgLrhgIHhgLzhgIThgLrhgLgg4YCZ4YCV4YCr4YCd4YCE4YC64YCV4YCr4YGLIOGAnuGAtuGAnuGAmuGAluGAvOGAheGAuuGAheGAm+GArCDhgKHhgJXhgJzhgK7hgIDhgLHhgLjhgJvhgL7hgIThgLrhgLjhgJnhgLvhgKzhgLjhgIAg4YCe4YCE4YC34YC64YCZ4YCe4YCt4YCV4YCyIOGAluGAr+GAlOGAuuGAuOGAgeGAseGAq+GAuuGAgeGAvOGAhOGAuuGAuOGAluGAvOGAhOGAt+GAuiDhgJbhgK/hgJThgLrhgLjhgIEg4YCV4YCt4YCv4YCZ4YCt4YCv4YCA4YC74YCU4YCt4YCv4YCE4YC64YCV4YCr4YCe4YCK4YC64YGLIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiJJTVMg4YCW4YCv4YCU4YC64YC44YCB4YCx4YCr4YC64YCG4YCt4YCv4YCZ4YC+4YCvIOGAneGAlOGAuuGAhuGAseGArOGAhOGAuuGAjOGArOGAlCDhgJ3hgIThgLrhgIDhgLzhgIrhgLfhgLrhgJXhgKsiPC9zdHJpbmc+CkBAIC04NTgsMTAgKzg1NywxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+IuGAluGAvOGAkOGAuuGAgeGAvOGAhOGAuuGAuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4i4YCA4YCw4YC44YCB4YC84YCE4YC64YC4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzdGUiIG1zZ2lkPSI1NjI5ODgwODM2ODA1MDM2NDMzIj4iUGFzdGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXN0ZV9hc19wbGFpbl90ZXh0IiBtc2dpZD0iNTQyNzc5Mjc0MTkwODAxMDY3NSI+IuGAheGArOGAnuGArOGAuOGAoeGAkOGAreGAr+GAhOGAuuGAuCDhgIDhgLDhgLjhgJHhgIrhgLfhgLrhgJXhgKsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXBsYWNlIiBtc2dpZD0iNTc4MTY4NjA1OTA2MzE0ODkzMCI+IuGAoeGAheGArOGAuOGAkeGAreGAr+GAgeGAvOGAhOGAuuGAuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZSIgbXNnaWQ9IjYwOTg2ODQ4NDQwMjE2OTc3ODkiPiLhgJbhgLvhgIDhgLrhgJXhgIXhgLrhgJvhgJThgLoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IlVSTOGAoeGArOGAuCDhgIDhgLDhgLjhgIHhgLzhgIThgLrhgLgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiLhgIXhgKzhgJ7hgKzhgLgg4YCb4YC94YCx4YC44YCb4YCU4YC6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiLhgJXhgLzhgJThgLrhgJbhgLvhgIDhgLrhgJvhgJThgLoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+IuGAkeGAleGAuuGAnOGAr+GAleGAuuGAleGAqyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiLhgIXhgKzhgJDhgK3hgK/hgJvhgL3hgLHhgLjhgIHhgLvhgJrhgLrhgJnhgL7hgK8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4i4YCh4YCY4YCt4YCT4YCs4YCU4YC64YCR4YCyIOGAkeGAiuGAt+GAuuGAleGAqyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4i4YCW4YC74YCA4YC64YCV4YCF4YC64YCb4YCU4YC6Ijwvc3RyaW5nPgpAQCAtMTEwNyw2ICsxMTA5LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+IuGAlOGAseGArOGAgOGAuuGAgeGAtuGAleGAvOGAseGArOGAhOGAuuGAuOGAgeGAvOGAhOGAuuGAuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+IuGAoeGAgOGAvOGAseGArOGAhOGAuuGAuOGAgOGAvOGArOGAuOGAgeGAu+GAgOGAuiDhgJThgKzhgLjhgJDhgLHhgKzhgIThgLrhgJ7hgLAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+IuGAoeGAgeGAvOGAseGAoeGAlOGAsSDhgIXhgK7hgJnhgLbhgJXhgLHhgLjhgJ7hgLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiLhgJ7hgJDhgK3hgJXhgLHhgLjhgIHhgLvhgIDhgLog4YCh4YCA4YCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJWUE4g4YCW4YC94YCE4YC34YC64YCR4YCs4YC44YCV4YCr4YCe4YCK4YC6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+4YCZ4YC+VlBO4YCh4YCc4YCv4YCV4YC64YCc4YCv4YCV4YC64YCU4YCx4YCe4YCK4YC6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4i4YCA4YC94YCU4YC64YCb4YCA4YC6IOGAkeGAreGAlOGAuuGAuOGAnuGAreGAmeGAuuGAuOGAm+GAlOGAuiDhgJDhgK3hgK/hgLfhgJHhgK3hgJXhgKsiPC9zdHJpbmc+CkBAIC0xNDQwLDEyICsxNDQzLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4i4YCe4YCE4YC34YC64YCF4YCu4YCZ4YC24YCB4YCU4YC34YC64YCB4YC94YCy4YCe4YCw4YCZ4YC+IOGAoeGAhuGAhOGAt+GAuuGAmeGAvOGAvuGAhOGAt+GAuuGAkeGArOGAuOGAleGAq+GAnuGAiuGAuuGBiyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4i4YCe4YCE4YC34YC6IOGAoeGAgOGAuuGAkuGAmeGAhOGAuuGAoeGArOGAuCDhgJbhgLvhgIDhgLrhgJXhgIXhgLrhgJvhgJThgLoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTk2MDQzMTEyMzgxNjI1MzAzNCI+IuGAmOGAgOGAuuGAkeGAm+GAruGAnuGAgOGAuuGAkOGAmeGAuuGAuCDhgIDhgLzhgKzhgJvhgL7hgIrhgLrhgIHhgLbhgJvhgJThgLrhgYog4YCY4YCA4YC64YCR4YCb4YCu4YCh4YCs4YC44YCR4YCt4YCU4YC64YC44YCe4YCK4YC6IOGAnuGAhOGAt+GAuuGAgOGAreGAm+GAreGAmuGArOGBjyDhgIbhgLHhgKzhgIThgLrhgJvhgL3hgIDhgLrhgIHhgLvhgIDhgLrhgIDhgK3hgK8gIOGAnOGAu+GAvuGAseGArOGAt+GAleGAseGAuOGAleGAvOGAruGAuCDhgJDhgK/hgJThgLrhgIHhgKvhgJnhgL7hgK/hgYog4YCQ4YCK4YC64YCU4YCx4YCb4YCs4YCd4YCU4YC64YCG4YCx4YCs4YCE4YC64YCZ4YC+4YCv4YCZ4YC74YCs4YC44YCU4YC+4YCE4YC34YC64YGKIOGAlOGAseGArOGAgOGAuuGAgeGAtuGAkuGAseGAkOGArOGAoeGAmeGAu+GArOGAuOGAheGAr+GAgOGAreGAryDhgIDhgJThgLfhgLrhgJ7hgJDhgLrhgJXhgLHhgLjhgY/hgYsg4YCF4YCE4YC34YC64YCc4YCv4YCV4YC64YCV4YCx4YC44YCb4YCc4YCx4YC34YCb4YC+4YCt4YCe4YCK4YC34YC6IOGAoeGAruGAuOGAmeGAseGAuOGBiiDhgIXhgKzhgJXhgK3hgK/hgLfhgIHhgLzhgIThgLrhgLjhgJThgL7hgIThgLfhgLrhgYog4YCh4YCB4YC84YCs4YC44YCh4YCV4YCc4YCu4YCA4YCx4YC44YCb4YC+4YCE4YC64YC44YCZ4YC74YCs4YC44YCA4YCt4YCvIOGBjuGAhOGAuuGAuOGAkOGAreGAr+GAt+GAoeGArOGAuCDhgJ7hgIThgLog4YCW4YC94YCE4YC34YC64YCZ4YC+4YCe4YCsIOGAoeGAhuGAhOGAt+GAuuGAmeGAvOGAvuGAhOGAt+GAuuGAmeGAveGAmeGAuuGAuOGAmeGAtuGAmeGAiuGAuuGAluGAvOGAheGAuuGBj+GBiyBcblxuIOGAgOGAreGAm+GAreGAmuGArOGAoeGArOGAuCDhgKHhgKzhgLjhgJ7hgL3hgIThgLrhgLjhgJThgLHhgIXhgInhgLog4YCY4YCA4YC64YCR4YCb4YCu4YCh4YCs4YC44YCR4YCt4YCU4YC64YC44YCh4YCs4YC4IOGAoeGAnOGAreGAr+GAoeGAnOGAu+GAseGArOGAgOGAuiDhgJXhgK3hgJDhgLrhgJHhgKzhgLjhgJ7hgIrhgLrhgYsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV90aXRsZSIgbXNnaWQ9Ijc0OTM5ODk3MjI2MTAwMDg3MDAiPiLhgKHhgJvhgLHhgLjhgJXhgKvhgJnhgL7hgK8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iNzExODgyNjkwMDc2NzA0NzEyNSI+IuGAleGAreGAkOGAuuGAhuGAreGAr+GAt+GAkeGArOGAuC0g4YCk4YCe4YCQ4YCt4YCV4YCx4YC44YCB4YC74YCA4YC64YCZ4YC74YCs4YC44YCA4YCt4YCvIOGAmOGAmuGAuuGAkOGAseGArOGAt+GAmeGAviDhgJnhgJXhgLzhgJXhgKvhgJThgL7hgIThgLfhgLoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4i4YCU4YCt4YCZ4YC34YC6LSDhgJDhgK3hgJDhgLrhgIbhgK3hgJDhgLrhgIXhgL3hgKwg4YCe4YCQ4YCt4YCV4YCx4YC44YCB4YC74YCA4YC64YCZ4YC74YCs4YC44YGPIOGAheGArOGAm+GAhOGAuuGAuCDhgKHhgLHhgKzhgIDhgLrhgJXhgK3hgK/hgIThgLrhgLjhgJnhgL7hgKwg4YCV4YC84YCV4YCrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiJcJ+GAleGAr+GAtuGAmeGAvuGAlOGAui0g4YCk4YCe4YCQ4YCt4YCV4YCx4YC44YCB4YC74YCA4YC64YCZ4YC74YCs4YC44YCA4YCt4YCvIOGAkOGAreGAkOGAuuGAhuGAreGAkOGAuuGAheGAveGArCDhgJXhgLzhgJXhgKsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzE1MjIzODYzNzczNzIxNTY1NCI+IuGAmeGAvOGAhOGAt+GAuuGAmeGArOGAuC0g4YCe4YCQ4YCt4YCV4YCx4YC44YCB4YC74YCA4YC64YCZ4YC74YCs4YC44YGPIOGAheGArOGAm+GAhOGAuuGAuOGAkeGAreGAleGAuuGAmeGAvuGArCDhgJXhgLzhgJzhgLvhgIDhgLog4YCh4YCe4YC24YCZ4YC84YCK4YC64YCV4YCx4YC44YCV4YCrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+IuGAoeGAm+GAseGAuOGAgOGAvOGAruGAuC0gOiDhgJnhgLvhgIDhgLrhgJThgL7hgKzhgJXhgLzhgIThgLrhgJnhgL7hgKwg4YCV4YC84YCV4YCx4YC44YCc4YC74YCA4YC6IOGAoeGAnuGAtuGAmeGAvOGAiuGAuuGAleGAseGAuOGAleGAqyI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+JTEkZCDhgJnhgK3hgJThgIXhgLrhgJDhgL3hgIThgLogKDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+4YCh4YCR4YCtKTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPuGAkOGAheGAuuGAmeGAreGAlOGAheGAuuGAkOGAveGAhOGAuiAoPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMCI+JTIkczwveGxpZmY6Zz4g4YCh4YCR4YCtKTwvaXRlbT4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbmIvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLW5iL3N0cmluZ3MueG1sCmluZGV4IDAzM2M1NDEuLmNkNjVkODUgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbmIvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1uYi9zdHJpbmdzLnhtbApAQCAtMjIzLDYgKzIyMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2tkb3duIiBtc2dpZD0iODc1MTU0MjUxNDcyNDMzMjg3MyI+IkzDpXMgbsOlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiI5OTkrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2NoaWxkcmVuX2NvdW50X2JyYWNrZXRlZCIgbXNnaWQ9IjE3Njk0MjU0NzMxNjgzNDc4MzkiPiIoPHhsaWZmOmcgaWQ9Ik5PVElGSUNBVElPTkNPVU5UIj4lZDwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IklubmhvbGRldCBlciBza2p1bHQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiJTaWtrZXJtb2R1cyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+IkFuZHJvaWQtc3lzdGVtIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNlcl9vd25lcl9sYWJlbCIgbXNnaWQ9IjI4MDQzNTE4OTgwMDEwMzg5NTEiPiJQZXJzb25saWciPC9zdHJpbmc+CkBAIC0zNTMsOCArMzU0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiJBcHBlbiB0aWxsYXRlcyDDpSB0YSBiaWxkZXIgb2cgZmlsbWUgbWVkIGthbWVyYWV0LiBEZXQgYmV0eXIgYXQgYXBwZW4ga2FuIGJydWtlIGthbWVyYWV0IG7DpXIgc29tIGhlbHN0IHV0ZW4gYmVrcmVmdGVsc2UgZnJhIGRlZy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4ia29udHJvbGxlcmUgdmlicmVyaW5nZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+IkxhciBhcHBlbiBrb250cm9sbGVyZSB2aWJyZXJpbmdzZnVua3Nqb25lbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4ia29udHJvbGxlcmUgbG9tbWVseWt0ZW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+IkxhciBhcHBlbiBrb250cm9sbGVyZSBsb21tZWx5a3Rlbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiJyaW5nZSB0ZWxlZm9ubnVtbWVyIGRpcmVrdGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4iTGFyIGFwcGVuIHJpbmdlIHRlbGVmb25udW1yZSB1dGVuIGF0IGR1IGdqw7hyIG5vZS4gRGV0dGUga2FuIHJlc3VsdGVyZSBpIHV2ZW50ZWRlIG9wcHJpbmduaW5nZXIgb2cga29zdG5hZGVyLiBBcHBlbiBrYW4gaW1pZGxlcnRpZCBpa2tlIHJpbmdlIG7DuGRudW1yZS4gTWVyayBhdCBza2FkZWxpZ2UgYXBwZXIga2FuIHDDpWbDuHJlIGRlZyBrb3N0bmFkZXIgdmVkIMOlIHJpbmdlIHV0ZW4gYmVrcmVmdGVsc2UgZnJhIGRlZy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ltc0NhbGxTZXJ2aWNlIiBtc2dpZD0iMzU3NDk0Mzg0NzE4MTc5MzkxOCI+ImbDpSB0aWxnYW5nIHRpbCBuZXR0cHJhdHRqZW5lc3RlbiBmb3IgcmluZ2luZyI8L3N0cmluZz4KQEAgLTg1OCwxMCArODU3LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJjdXQiIG1zZ2lkPSIzMDkyNTY5NDA4NDM4NjI2MjYxIj4iS2xpcHAgdXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+IktvcGllciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+IkxpbSBpbm4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXN0ZV9hc19wbGFpbl90ZXh0IiBtc2dpZD0iNTQyNzc5Mjc0MTkwODAxMDY3NSI+IkxpbSBpbm4gc29tIHJlbiB0ZWtzdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4iRXJzdGF0dCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZSIgbXNnaWQ9IjYwOTg2ODQ4NDQwMjE2OTc3ODkiPiJTbGV0dCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4iS29waWVyIFVSTCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+Ik1hcmtlciB0ZWtzdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVuZG8iIG1zZ2lkPSI3OTA1Nzg4NTAyNDkxNzQyMzI4Ij4iQW5ncmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+IlV0ZsO4ciBsaWtldmVsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGV4dFNlbGVjdGlvbkNBQlRpdGxlIiBtc2dpZD0iNTIzNjg1MDM5NDM3MDgyMDM1NyI+Ik1lcmtldCB0ZWtzdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiJMZWdnIHRpbCBpIG9yZGxpc3RlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4iU2xldHQiPC9zdHJpbmc+CkBAIC0xMTA3LDYgKzExMDksNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4iVmVsZyBiYWtncnVubnNiaWxkZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+IlZhcnNlbGx5dHRlcmVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiJCZXRpbmdlbHNlc2xldmVyYW5kw7hyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2Fzc2lzdGFudF9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iOTA5NDU2MDU1NTY5MTAyOTUyIj4iVmFyc2VsYXNzaXN0ZW50Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJWUE4gZXIgYWt0aXZlcnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiJWUE4gZXIgYWt0aXZlcnQgYXYgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4iVHJ5a2sgZm9yIMOlIGFkbWluaXN0cmVyZSBuZXR0dmVya2V0LiI8L3N0cmluZz4KQEAgLTE0NDAsMTIgKzE0NDMsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV91cGRhdGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijg4NTY2MzEzMjI0NDAxODcwNzEiPiJPcHBkYXRlcnQgYXYgYWRtaW5pc3RyYXRvcmVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiJTbGV0dGV0IGF2IGFkbWluaXN0cmF0b3JlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4iRm9yIMOlIGZvcmxlbmdlIGJhdHRlcmlsZXZldGlkZW4gcmVkdXNlcmVyIGJhdHRlcmlzcGFyZXJlbiB5dGVsc2VuIHRpbCBlbmhldGVuIGRpbiBvZyBiZWdyZW5zZXIgdmlicmVyaW5nLCBwb3Npc2pvbnN0amVuZXN0ZXIgb2cgbWVzdGVwYXJ0ZW4gYXYgYmFrZ3J1bm5zZGF0YWVuZS4gRS1wb3N0LCBzZW5kaW5nIGF2IG1lbGRpbmdlciBvZyBhbmRyZSBhcHBlciBzb20gZXIgYXZoZW5naWcgYXYgc3lua3JvbmlzZXJpbmcsIG9wcGRhdGVyZXMga2Fuc2tqZSBpa2tlIG1lZCBtaW5kcmUgZHUgw6VwbmVyIGRlbS5cblxuQmF0dGVyaXNwYXJpbmcgc2zDpXMgYXYgYXV0b21hdGlzayBuw6VyIGVuaGV0ZW4gbGFkZXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfdGl0bGUiIG1zZ2lkPSI3NDkzOTg5NzIyNjEwMDA4NzAwIj4iVmlrdGlnaGV0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiJCbG9ra2VydDogQWxkcmkgdmlzIGRpc3NlIHZhcnNsZW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNjQ0NzY0MDQ0OTkxODQyNzE4NyI+IkxhdnQ6IFZpcyBuZWRlcnN0IGkgdmFyc2VsbGlzdGVuIHV0ZW4gbHlkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiJOb3JtYWx0OiBWaXMgZGlzc2UgdmFyc2xlbmUgdXRlbiBseWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzE1MjIzODYzNzczNzIxNTY1NCI+IkjDuHl0OiBWaXMgw7h2ZXJzdCBpIHZhcnNlbGxpc3RlbiBtZWQgbHlkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+Ikhhc3RlcjogVmlzZXMgZm9ydCBww6Ugc2tqZXJtZW4gbWVkIGx5ZCI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+SSAlMSRkIG1pbnV0dGVyICh0aWwgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+SSAxIG1pbnV0dCAodGlsIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzAiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbmUtck5QL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1uZS1yTlAvc3RyaW5ncy54bWwKaW5kZXggZWMxM2ViYi4uMzAxMDk0YiAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1uZS1yTlAvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1uZS1yTlAvc3RyaW5ncy54bWwKQEAgLTIyMyw2ICsyMjMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiLgpIXgpKwg4KSs4KSo4KWN4KSmIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4i4KWv4KWv4KWvKyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLgpLLgpYHgpJXgpYfgpJXgpL4g4KS44KS+4KSu4KS+4KSX4KWN4KSw4KWA4KS54KSw4KWCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4i4KS44KWB4KSw4KSV4KWN4KS34KS/4KSkIOCkruCli+CkoSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+IuCkj+CkqOCljeCkoeCljeCksOCli+Ckh+CkoSDgpKrgpY3gpLDgpKPgpL7gpLLgpYAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+IuCkteCljeCkr+CkleCljeCkpOCkv+Ckl+CkpCI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+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+ClpCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiLgpJXgpK7gpY3gpKrgpKgg4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSjIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkreCkvuCkh+CkrOCljeCksOClh+Ckn+CksCDgpKjgpL/gpK/gpKjgpY3gpKTgpY3gpLDgpKMg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4i4KSr4KWN4KSy4KWN4KSv4KS+4KS44KSy4KS+4KSI4KSfIOCkqOCkv+Ckr+CkqOCljeCkpOCljeCksOCkoyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+IuCkq+CljeCksuCljeCkr+CkvuCkuCDgpKrgpY3gpLDgpJXgpL7gpLbgpLLgpL7gpIgg4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSjIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+IuCkq+Cli+CkqCDgpKjgpK7gpY3gpKzgpLDgpLngpLDgpYLgpK7gpL4g4KS44KS/4KSn4KWIIOCkleCksiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkueCkuOCljeCkpOCkleCljeCkt+Clh+CkqiDgpKzgpYfgpJfgpLDgpYgg4KSr4KWL4KSoIOCkqOCkruCljeCkrOCksCDgpJXgpLIg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkr+CkuOCksuClhyDgpIXgpKjgpKrgpYfgpJXgpY3gpLfgpL/gpKQg4KS24KWB4KSy4KWN4KSVIOCkteCkviDgpJXgpLLgpLngpLDgpYIg4KSX4KSw4KS+4KSJ4KSoIOCkuOCkleCljeCkm+ClpCDgpK/gpLjgpLLgpYcg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkhuCkquCkpOCkleCkvuCksuClgOCkqCDgpKjgpK7gpY3gpKzgpLDgpLngpLDgpYIg4KSV4KSyIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSB4KSm4KWI4KSoIOCkteCkv+CkmuCkvuCksCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQg4KSW4KSw4KS+4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KS44KWN4KS14KWA4KSV4KS+4KSwIOCkrOCkv+CkqOCkviDgpJXgpLLgpLngpLDgpYIg4KSX4KSw4KWH4KSwIOCkpOCkquCkvuCkiOCkgeCksuCkvuCkiCDgpKzgpKLgpYAg4KSq4KWI4KS44KS+IOCkpOCkv+CksOCkvuCkieCkqCDgpLjgpJXgpY3gpJvgpaQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ltc0NhbGxTZXJ2aWNlIiBtc2dpZD0iMzU3NDk0Mzg0NzE4MTc5MzkxOCI+IklNUyDgpJXgpLIg4KS44KWH4KS14KS+IOCkquCkueClgeCkgeCkmiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CkBAIC04NTgsMTAgKzg1NywxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+IuCkleCkvuCkn+CljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4i4KSq4KWN4KSw4KSk4KS/4KSy4KS/4KSq4KS/IOCkrOCkqOCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+IuCkn+CkvuCkgeCkuOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4i4KS44KS+4KSu4KS+4KSo4KWN4KSvIOCkquCkvuCkoOCkleCliyDgpLDgpYLgpKrgpK7gpL4g4KSf4KS+4KSB4KS44KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiLgpLXgpL/gpLjgpY3gpKXgpL7gpKrgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4oCmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+IuCkruClh+Ckn+CljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4iVVJMIOCkleCliyDgpKrgpY3gpLDgpKTgpL/gpLLgpL/gpKog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4i4KSq4KS+4KSgIOCkmuCkr+CkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmRvIiBtc2dpZD0iNzkwNTc4ODUwMjQ5MTc0MjMyOCI+IuCkheCkqOCkoeClgiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+IuCksOCkv+CkoeClgiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4i4KSq4KS+4KSgIOCkmuCkr+CkqOCkpOCkviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiLgpLbgpKzgpY3gpKbgpJXgpYvgpLbgpK7gpL4g4KSl4KSq4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiLgpK7gpYfgpJ/gpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CkBAIC0xMTEzLDYgKzExMTUsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4i4KS14KS+4KSy4KSq4KWH4KSq4KSwIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiLgpLjgpYLgpJrgpKjgpL4g4KS44KWB4KSo4KWN4KSo4KWH4KS14KS+4KSy4KS+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiLgpLjgpLDgpY3gpKQg4KSq4KWN4KSw4KSm4KS+4KSv4KSVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2Fzc2lzdGFudF9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iOTA5NDU2MDU1NTY5MTAyOTUyIj4i4KS44KWC4KSa4KSo4KS+IOCkuOCkueCkvuCkr+CklSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iVlBOIOCkuOCkleCljeCksOCkv+CkryDgpK3gpK/gpYsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiJWUE4gPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+4KSm4KWN4KS14KS+4KSw4KS+IOCkuOCkleCljeCksOCkv+CkryDgpJfgpLDgpL/gpI/gpJXgpYsg4KS54KWLIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4i4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkquCljeCksOCkrOCkqOCljeCkpyDgpJfgpLDgpY3gpKgg4KSb4KWB4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgpAQCAtMTQ0NiwxMiArMTQ0OSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+IuCkpOCkquCkvuCkiOCkgeCkleCliyDgpKrgpY3gpLDgpLbgpL7gpLjgpJXgpKbgpY3gpLXgpL7gpLDgpL4g4KSF4KSm4KWN4KSv4KS+4KS14KSn4KS/4KSVIOCkl+CksOCkv+Ckj+CkleCliyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkquCljeCksOCktuCkvuCkuOCkleCkpuCljeCkteCkvuCksOCkviDgpLngpJ/gpL7gpIfgpI/gpJXgpYsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTk2MDQzMTEyMzgxNjI1MzAzNCI+IuCkrOCljeCkr+CkvuCkn+CljeCksOClgOCkleCliyDgpIbgpK/gpYEg4KS44KWB4KSn4KS+4KSw4KWN4KSoLCDgpKzgpY3gpK/gpL7gpJ/gpY3gpLDgpYAg4KS44KSC4KSw4KSV4KWN4KS34KSV4KSy4KWHIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpK/gpKjgpY3gpKTgpY3gpLDgpJXgpYsg4KSV4KS+4KSw4KWN4KSv4KS44KSu4KWN4KSq4KS+4KSm4KSoIOCkmOCkn+CkvuCkieCkgeCkmyDgpLAg4KSt4KS+4KSH4KSs4KWN4KSw4KWH4KS44KSoLCDgpLjgpY3gpKXgpL7gpKgg4KS44KWH4KS14KS+IOCksCDgpKzgpLngpYHgpLjgpILgpJbgpY3gpK/gpJUg4KSq4KWD4KS34KWN4KSg4KSt4KWC4KSu4KS/IOCkoeClh+Ckn+CkviDgpLjgpYDgpK7gpL/gpKQg4KSX4KSw4KWN4KSm4KSb4KWkIOCkh+CkruClh+Cksiwg4KS44KSo4KWN4KSm4KWH4KS2LCDgpLAg4KSF4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClgiDgpJzgpYHgpKgg4KS44KS/4KSZ4KWN4KSV4KSu4KS+IOCkreCksCDgpKrgpLDgpY3gpJvgpKjgpY0g4KSF4KSm4KWN4KSv4KS+4KS14KSn4KS/4KSVIOCkqOCkueClgeCkqCDgpLjgpJXgpY3gpJvgpKjgpY0g4KSc4KSs4KS44KSu4KWN4KSuIOCkpOCkquCkvuCkiOCkgSDgpKTgpL/gpKjgpYDgpLngpLDgpYLgpLLgpL7gpIgg4KSW4KWL4KSy4KWN4KSo4KWB4KS54KWB4KSo4KWN4KSoXG5cbiDgpKzgpY3gpK/gpL7gpJ/gpY3gpLDgpYAg4KS44KSC4KSw4KSV4KWN4KS34KSVIOCkuOCljeCkteCkpDog4KSo4KS/4KS44KWN4KSV4KWD4KSvIOCkueClgeCkqOCljeCkmyDgpJzgpKwg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkr+CkqOCljeCkpOCljeCksCDgpJrgpL7gpLDgpY3gpJwg4KS54KWB4KSB4KSm4KWIIOCkueClgeCkqOCljeCkm+ClpCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX3RpdGxlIiBtc2dpZD0iNzQ5Mzk4OTcyMjYxMDAwODcwMCI+IuCkruCkueCkpOCljeCkpOCljeCktSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSI3MTE4ODI2OTAwNzY3MDQ3MTI1Ij4i4KSw4KWL4KSV4KS/4KSP4KSV4KS+OiDgpK/gpYAg4KS44KWC4KSa4KSo4KS+4KS54KSw4KWCIOCkleCkueCkv+CksuCljeCkr+CliCDgpKjgpKbgpYfgpJbgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4i4KSo4KWN4KSv4KWC4KSoOiDgpJrgpYHgpKrgpJrgpL7gpKog4KS44KWC4KSa4KSo4KS+IOCkuOClguCkmuClgOCkleCliyDgpKvgpYfgpKbgpK7gpL4g4KSm4KWH4KSW4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiLgpLjgpL7gpK7gpL7gpKjgpY3gpK86IOCkmuClgeCkquCkmuCkvuCkqiDgpK/gpYAg4KS44KWC4KSa4KSo4KS+4KS54KSw4KWCIOCkpuClh+CkluCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMTUyMjM4NjM3NzM3MjE1NjU0Ij4i4KSJ4KSa4KWN4KSaOiDgpLjgpYLgpJrgpKjgpL4g4KS44KWC4KSa4KWA4KSV4KWLIOCktuClgOCksOCljeCkt+CkruCkviDgpKbgpYfgpJbgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0g4KSwIOCkhuCkteCkvuCknCDgpKjgpL/gpJXgpL7gpLLgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSIxMTUzNjkzMDgwNDY3OTA0NDc0Ij4i4KSc4KSw4KWB4KSw4KWAOiDgpLjgpY3gpJXgpY3gpLDgpL/gpKjgpK7gpL4g4KSd4KSy4KSV4KWN4KSVIOCkueClh+CksOCljeCkqOClgeCkueCli+CkuOCljSDgpLAg4KSG4KS14KS+4KScIOCkqOCkv+CkleCkvuCksuCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+ICUxJGQg4KSu4KS/4KSo4KWH4KSf4KSV4KWLIOCksuCkvuCkl+CkvyAoPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4g4KS44KSu4KWN4KSuKTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPuCkj+CklSDgpK7gpL/gpKjgpYfgpJ/gpJXgpYsg4KSy4KS+4KSX4KS/ICg8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8wIj4lMiRzPC94bGlmZjpnPiDgpLjgpK7gpY3gpK4pPC9pdGVtPgpAQCAtMTUxNyw2ICsxNTE0LDYgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRkPC94bGlmZjpnPiDgpJrgpK/gpKgg4KSX4KSw4KS/4KSv4KWLPC9pdGVtPgogICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfbm90aWZpY2F0aW9uX3RvcGljX2xhYmVsIiBtc2dpZD0iMjI3NTg2MTQ1NzkxODcwODI5Ij4i4KS14KS/4KS14KS/4KSnIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3RvcGljIiBtc2dpZD0iMzU3MjI4MDQzOTg4MDAyMzIzMyI+IuCkpOCkquCkvuCkiOCkguCksuClhyDgpK/gpYAg4KS44KWC4KSa4KSo4KS+4KS54KSw4KWCIOCkruCkueCkpOCljeCkpOCljeCktSDgpLjgpYfgpJ8g4KSX4KSw4KWN4KSo4KWB4KS54KWB4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3RvcGljIiBtc2dpZD0iMzU3MjI4MDQzOTg4MDAyMzIzMyI+IuCkpOCkquCkvuCkiOCkguCksuClhyDgpK/gpYAg4KS44KWC4KSa4KSo4KS+4KS54KSw4KWC4KSV4KWLIOCkruCkueCkpOCljeCkpOCljeCktSDgpLjgpYfgpJ8g4KSX4KSw4KWN4KSo4KWB4KS54KWB4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3BlcnNvbiIgbXNnaWQ9IjkxNjAxMzM1OTcyNjI5MzgyOTYiPiLgpK/gpLjgpK7gpL4g4KS44KSZ4KWN4KSy4KSX4KWN4KSoIOCkreCkj+CkleCkviDgpK7gpL7gpKjgpL/gpLjgpLngpLDgpYLgpJXgpYsg4KSV4KS+4KSw4KSj4KSy4KWHIOCkl+CksOCljeCkpuCkviDgpK/gpYsg4KSu4KS54KSk4KWN4KS14KSq4KWC4KSw4KWN4KSjIOCkm+ClpCI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1ubC9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbmwvc3RyaW5ncy54bWwKaW5kZXggZDMwZDgzNi4uMTQwNzk5MSAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1ubC9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLW5sL3N0cmluZ3MueG1sCkBAIC0yMjMsNiArMjIzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9ja2Rvd24iIG1zZ2lkPSI4NzUxNTQyNTE0NzI0MzMyODczIj4iTnUgdmVyZ3JlbmRlbGVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiI5OTkgKyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJJbmhvdWQgdmVyYm9yZ2VuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4iVmVpbGlnZSBtb2R1cyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+IkFuZHJvaWQtc3lzdGVlbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4iUGVyc29vbmxpamsiPC9zdHJpbmc+CkBAIC0zNTMsOCArMzU0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiJIaWVybWVlIGthbiBkZSBhcHAgZm90b1wncyBlbiB2aWRlb1wncyBtYWtlbiBtZXQgZGUgY2FtZXJhLiBNZXQgZGV6ZSB0b2VzdGVtbWluZyBrYW4gZGUgYXBwIGRlIGNhbWVyYSBhbHRpamQgZ2VicnVpa2VuLCB6b25kZXIgamUgYmV2ZXN0aWdpbmcuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl92aWJyYXRlIiBtc2dpZD0iNzY5NjQyNzAyNjA1NzcwNTgzNCI+InRyaWxsaW5nIGJlaGVyZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+IkhpZXJtZWUga2FuIGRlIGFwcCBkZSB0cmlsc3RhbmQgYmVoZXJlbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4iemFrbGFtcCBiZWRpZW5lbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4iSGllcm1lZSBrYW4gZGUgYXBwIGRlIHpha2xhbXAgYmVkaWVuZW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4idGVsZWZvb25udW1tZXJzIHJlY2h0c3RyZWVrcyBiZWxsZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4iSGllcm1lZSBrYW4gZGUgYXBwIHpvbmRlciBqZSB0dXNzZW5rb21zdCB0ZWxlZm9vbm51bW1lcnMgYmVsbGVuLiBEaXQga2FuIHRvdCBvbnZlcndhY2h0ZSBrb3N0ZW4gb2Ygb3Byb2VwZW4gbGVpZGVuLiBEZSBhcHAga2FuIGhpZXJtZWUgZ2VlbiBub29kbnVtbWVycyBiZWxsZW4uIFNjaGFkZWxpamtlIGFwcHMga3VubmVuIHUgZ2VsZCBrb3N0ZW4gZG9vciBudW1tZXJzIHRlIGJlbGxlbiB6b25kZXIgb20gamUgYmV2ZXN0aWdpbmcgdGUgdnJhZ2VuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiIG1zZ2lkPSIzNTc0OTQzODQ3MTgxNzkzOTE4Ij4idG9lZ2FuZyB0b3QgSU1TLXNlcnZpY2Ugdm9vciBiZWxsZW4iPC9zdHJpbmc+CkBAIC04NTgsMTAgKzg1NywxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+IktuaXBwZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+IktvcGnDq3JlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+IlBsYWtrZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXN0ZV9hc19wbGFpbl90ZXh0IiBtc2dpZD0iNTQyNzc5Mjc0MTkwODAxMDY3NSI+IlBsYWtrZW4gYWxzIHBsYXR0ZSB0ZWtzdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4iVmVydmFuZ2VuLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+IlZlcndpamRlcmVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiJVUkwga29wacOrcmVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4iVGVrc3Qgc2VsZWN0ZXJlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVuZG8iIG1zZ2lkPSI3OTA1Nzg4NTAyNDkxNzQyMzI4Ij4iT25nZWRhYW4gbWFrZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+Ik9wbmlldXciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4iVGVrc3RzZWxlY3RpZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiJUb2V2b2VnZW4gYWFuIHdvb3JkZW5ib2VrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiJWZXJ3aWpkZXJlbiI8L3N0cmluZz4KQEAgLTExMDcsNiArMTEwOSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiJBY2h0ZXJncm9uZCB3aWp6aWdlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+Ikxpc3RlbmVyIHZvb3IgbWVsZGluZ2VuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiJQcm92aWRlciB2YW4gdm9vcndhYXJkZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiJNZWxkaW5nc2Fzc2lzdGVudCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iVlBOIGlzIGdlYWN0aXZlZXJkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4iVlBOIHdvcmR0IGdlYWN0aXZlZXJkIGRvb3IgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4iUmFhayBhYW4gb20gaGV0IG5ldHdlcmsgdGUgYmVoZXJlbi4iPC9zdHJpbmc+CkBAIC0xNDQwLDEyICsxNDQzLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4iR2XDvHBkYXRldCBkb29yIGplIGJlaGVlcmRlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4iVmVyd2lqZGVyZCBkb29yIGplIGJlaGVlcmRlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4iQWNjdWJlc3BhcmluZyBiZXBlcmt0IGRlIHByZXN0YXRpZXMgdmFuIGplIGFwcGFyYWF0LCBkZSB0cmlsc3RhbmQsIGxvY2F0aWVzZXJ2aWNlcyBlbiBkZSBtZWVzdGUgYWNodGVyZ3JvbmRnZWdldmVucyBvbSBkZSBnZWJydWlrc2R1dXIgdmFuIGRlIGFjY3UgdGUgdmVybGVuZ2VuLlxuXG5BY2N1YmVzcGFyaW5nIHdvcmR0IGF1dG9tYXRpc2NoIHVpdGdlc2NoYWtlbGQgdGVyd2lqbCBqZSBhcHBhcmFhdCB3b3JkdCBvcGdlbGFkZW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfdGl0bGUiIG1zZ2lkPSI3NDkzOTg5NzIyNjEwMDA4NzAwIj4iQmVsYW5nIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiJHZWJsb2trZWVyZDogZGV6ZSBtZWxkaW5nZW4gbm9vaXQgd2VlcmdldmVuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNjQ0NzY0MDQ0OTkxODQyNzE4NyI+IkxhYWc6IHpvbmRlciBnZWx1aWQgb25kZXIgYWFuIGRlIGxpanN0IG1ldCBtZWxkaW5nZW4gd2VlcmdldmVuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiJOb3JtYWFsOiBkZXplIG1lbGRpbmdlbiB6b25kZXIgZ2VsdWlkIHdlZXJnZXZlbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMTUyMjM4NjM3NzM3MjE1NjU0Ij4iSG9vZzogYm92ZW4gYWFuIGRlIGxpanN0IG1ldCBtZWxkaW5nZW4gd2VlcmdldmVuIGVuIGdlbHVpZCBsYXRlbiBob3JlbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiJVcmdlbnQ6IG9wIGhldCBzY2hlcm0gd2VlcmdldmVuIGVuIGdlbHVpZCBsYXRlbiBob3JlbiI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+JTEkZCBtaW51dGVuICh0b3QgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+RcOpbiBtaW51dXQgKHRvdCA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8wIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXBhLXJJTi9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtcGEtcklOL3N0cmluZ3MueG1sCmluZGV4IDA2YjU0OWUuLjM5ZjIwZjUgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtcGEtcklOL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtcGEtcklOL3N0cmluZ3MueG1sCkBAIC0yMjMsNiArMjIzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9ja2Rvd24iIG1zZ2lkPSI4NzUxNTQyNTE0NzI0MzMyODczIj4i4Ki54KmB4KijIOCosuCpjOColSDgqJXgqLDgqYsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+Ijk5OSsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fY2hpbGRyZW5fY291bnRfYnJhY2tldGVkIiBtc2dpZD0iMTc2OTQyNTQ3MzE2ODM0NzgzOSI+Iig8eGxpZmY6ZyBpZD0iTk9USUZJQ0FUSU9OQ09VTlQiPiVkPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4i4Ki44Kiu4Kmx4KiX4Kiw4KmA4KiG4KiCIOCosuCpgeColeCovuCoiOCohuCogiDgqJfgqIjgqIbgqIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiLgqLjgqYHgqLDgqbHgqJbgqL/gqIXgqKQg4Kiu4KmL4KihIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4iQW5kcm9pZCBTeXN0ZW0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+IuCoqOCov+CpseConOCpgCI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IuCokOCoqiDgqKjgqYLgqbAg4KiV4KmI4Kiu4Kiw4KmHIOCoqOCovuCosiDgqKTgqLjgqLXgqYDgqLDgqL7gqIIg4KiF4Kik4KmHIOCoteCpgOCooeCpgOCokyDgqLLgqYjgqKMg4Kim4KmAIOCohuCol+Cov+CohiDgqKbgqL/gqbDgqKbgqL4g4Ki54KmI4KWkIOCoh+CouSDgqIXgqKjgqYHgqK7gqKTgqYAg4KiQ4KiqIOCoqOCpguCpsCDgqKTgqYHgqLngqL7gqKHgqYAg4Kiq4KmB4Ki44Ki84Kif4KmAIOCopOCpi+CogiDgqKzgqL/gqKjgqL7gqIIg4KiV4Ki/4Ki44KmHIOCoteCpgCDgqLjgqK7gqYfgqIIg4KiV4KmI4Kiu4Kiw4Ki+IOCoteCosOCopOCooyDgqKbgqYAg4KiG4KiX4Ki/4KiGIOCopuCov+CpsOCopuCpgCDgqLngqYjgpaQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4i4Ki14Ki+4KiI4Kis4KmN4Kiw4KmH4Ki44Ki84KioIOCopOCphyDgqKjgqL/gqK/gqbDgqKTgqLDgqKMg4Kiq4Ki+4KiTIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiLgqJDgqKog4Kio4KmC4KmwIOCoteCovuCoiOCorOCpjeCosOCph+Con+CosCDgqKTgqYcg4Kio4Ki/4Kiv4Kmw4Kik4Kiw4KijIOCoquCovuCoieCooyDgqKbgqYAg4KiG4KiX4Ki/4KiGIOCopuCov+CpsOCopuCoviDgqLngqYjgpaQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4i4Kir4Kiy4KmI4Ki44Ki84Kiy4Ki+4KiI4KifIOCopOCphyDgqKjgqL/gqK/gqbDgqKTgqLDgqKMg4Kiq4Ki+4KiTIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiLgqJDgqKog4Kio4KmC4KmwIOCoq+CosuCpiOCouOCovOCosuCovuCoiOConyDgqKTgqYcg4Kio4Ki/4Kiv4Kmw4Kik4Kiw4KijIOCoquCovuCoieCooyDgqKbgqYAg4KiG4KiX4Ki/4KiGIOCopuCov+CpsOCopuCoviDgqLngqYjgpaQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiLgqKvgqYvgqKgg4Kio4Kmw4Kis4Kiw4Ki+4KiCIOCopOCphyDgqLjgqL/gqbHgqKfgqYcg4KiV4Ki+4KiyIOColeCosOCpiyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQaG9uZSIgbXNnaWQ9IjM3NDA3OTc1NzYxMTM3NjA4MjciPiLgqJDgqKog4Kio4KmC4KmwIOCopOCpgeCoueCovuCooeCphyDgqKbgqJbgqLzgqLIg4Kik4KmL4KiCIOCorOCov+CoqOCovuCogiDgqKvgqYvgqKgg4Kio4Kmw4Kis4Kiw4Ki+4KiCIOCopOCphyDgqJXgqL7gqLIg4KiV4Kiw4KioIOCopuCpgCDgqIbgqJfgqL/gqIYg4Kim4Ki/4Kmw4Kim4Ki+IOCoueCpiOClpCDgqIfgqLjgqKbgqYcg4Ki44Ki/4Kmx4Kif4KmHIOCoteConOCpi+CogiDgqIXgqJXgqLLgqKrgqL/gqKQg4KiW4Ki84Kiw4Kia4KmHIOConOCovuCogiDgqJXgqL7gqLLgqL7gqIIg4Ki54KmLIOCouOColeCopuCpgOCohuCogiDgqLngqKjgpaQg4Kin4Ki/4KiG4KioIOCopuCov+CokyDgqJXgqL8g4KiH4Ki5IOCokOCoqiDgqKjgqYLgqbAg4KiQ4Kiu4Kiw4Kic4KmI4KiC4Ki44KmAIOCoqOCpsOCorOCosOCovuCogiDgqKTgqYcg4KiV4Ki+4KiyIOColeCosOCoqCDgqKbgqYAg4KiG4KiX4Ki/4KiGIOCoqOCoueCpgOCogiDgqKbgqL/gqbDgqKbgqL7gpaQg4KiW4Ki84Kiw4Ki+4KisIOCokOCoquCouCDgqKTgqYHgqLngqL7gqKHgqYAg4Kiq4KmB4Ki44Ki84Kif4KmAIOCopOCpi+CogiDgqKzgqL/gqKjgqL7gqIIg4KiV4Ki+4Kiy4Ki+4KiCIOColeCosOColeCphyDgqKTgqYHgqLngqL7gqKjgqYLgqbAg4KiW4Ki84Kiw4Kia4KmHIOCoquCoviDgqLjgqJXgqKbgqYcg4Ki54Kio4KWkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiJJTVMg4KiV4Ki+4KiyIOCouOCph+CoteCoviDgqKTgqbHgqJUg4Kiq4Ki54KmB4Kmw4KiaIjwvc3RyaW5nPgpAQCAtODU4LDEwICs4NTcsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiLgqJXgqbHgqJ/gqYsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+IuColeCovuCoquCpgCDgqJXgqLDgqYsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiLgqKrgqYfgqLjgqJ8g4KiV4Kiw4KmLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiLgqLjgqKfgqL7gqLDgqKgg4Kiy4Ki/4KiW4KikIOCopuCphyDgqKTgqYzgqLAgXCfgqKTgqYcg4Kiq4KmH4Ki44KifIOColeCosOCpiyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4i4Kis4Kim4Kiy4KmL4oCmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+IuCoruCov+Con+CovuCokyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4iVVJMIOColeCovuCoquCpgCDgqJXgqLDgqYsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiLgqJ/gqYjgqJXgqLjgqJ8g4Kia4KmB4Kij4KmLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiLgqKrgqLngqL/gqLLgqL7gqIIg4Ki14Kiw4KiX4Ki+IOColeCosOCpiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlZG8iIG1zZ2lkPSI3NzU5NDY0ODc2NTY2ODAzODg4Ij4i4Kiu4KmB4KmcLeCok+CoueCpgCDgqJXgqLDgqYsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4i4Kif4KmI4KiV4Ki44KifIOComuCpi+CooyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiLgqLjgqLzgqKzgqKbgqJXgqYvgqLjgqLwg4Ki14Ki/4Kmx4KiaIOConOCpi+CpnOCpiyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4i4Kiu4Ki/4Kif4Ki+4KiTIjwvc3RyaW5nPgpAQCAtMTEwNyw2ICsxMTA5LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+IuCoteCovuCosuCoquCph+CoquCosCDgqKzgqKbgqLLgqYsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiLgqLjgqYLgqJrgqKjgqL4g4Ki44KmB4Kij4KioIOCoteCovuCosuCoviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbmRpdGlvbl9wcm92aWRlcl9zZXJ2aWNlX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMzIxMzQzMzUyOTA2NTI0NTY0Ij4i4Ki44Kil4Ki/4Kik4KmAIOCoquCpjeCosOCopuCovuCopOCoviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9hc3Npc3RhbnRfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjkwOTQ1NjA1NTU2OTEwMjk1MiI+IuCouOCpguComuCoqOCoviDgqLjgqLngqL7gqIfgqJUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IlZQTiDgqLjgqJXgqL/gqLDgqL/gqIYg4KiV4KmA4Kik4Ki+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4iVlBOIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDgqLDgqL7gqLngqYDgqIIg4Ki44KiV4Ki/4Kiw4Ki/4KiGIOCorOCoo+CovuCoh+CohiDgqJfgqL/gqIYg4Ki54KmIIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4i4Kio4KmI4Kif4Ki14Kiw4KiVIOCoteCov+CoteCouOCopeCov+CopCDgqJXgqLDgqKgg4Kiy4KiIIOCom+Cpi+CoueCoteCpi+ClpCI8L3N0cmluZz4KQEAgLTE0NDAsMTIgKzE0NDMsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV91cGRhdGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijg4NTY2MzEzMjI0NDAxODcwNzEiPiLgqKTgqYHgqLngqL7gqKHgqYcg4Kiq4KmN4Kiw4Ki44Ki84Ki+4Ki44KiVIOCopuCpgeCohuCosOCoviDgqIXgqKrgqKHgqYfgqJ8g4KiV4KmA4Kik4Ki+IOCol+Cov+CohiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4i4Kik4KmB4Ki54Ki+4Kih4KmHIOCoquCpjeCosOCorOCpsOCop+ColSDgqLXgqbHgqLLgqYvgqIIg4Kiu4Ki/4Kif4Ki+4KiH4KiGIOCol+Cov+CohiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4i4Kis4KmI4Kif4Kiw4KmAIOCouOCoruCosOCpseCopeCoviDgqKjgqYLgqbAg4Kis4Ki/4Ki54Kik4KiwIOCouOCoueCovuCoh+CopOCoviDgqJXgqLDgqKgg4Kiy4KiILCDgqKzgqYjgqJ/gqLDgqYAg4Ki44KmH4Ki14KiwIOCopOCpgeCoueCovuCooeCpgCDgqKHgqL/gqLXgqL7gqIjgqLgg4Kim4Ki+IOCoquCpjeCosOCopuCosOCouOCovOCoqCDgqJjgqJ/gqL7gqIngqILgqKbgqL4g4Ki54KmIIOCoheCopOCphyDgqLXgqL7gqIjgqKzgqY3gqLDgqYfgqLjgqLzgqKgsIOCoqOCov+CosOCop+CovuCosOCov+CopCDgqLjgqKXgqL7gqKgg4Ki44KmH4Ki14Ki+4Ki14Ki+4KiCIOCoheCopOCphyDgqJzgqLzgqL/gqIbgqKbgqL7gqKTgqLAg4Kiq4Ki/4Kib4KmL4KiV4KmcIOCooeCovuCon+CoviDgqKjgqYLgqbAg4Ki44KmA4Kiu4Ki/4KikIOColeCosOCopuCoviDgqLngqYjgpaQg4KiI4Kiu4KmH4KiyLCDgqK7gqYjgqLjgqYfgqJzgqL/gqbDgqJcg4KiF4Kik4KmHIOCoueCpi+CosCDgqJDgqKrgqLgsIOConOCpiyDgqLjgqL/gqbDgqJXgqL/gqbDgqJcg4Kik4KmHIOCoqOCov+CosOCoreCosCDgqLngqKgsIOCoieCouSDgqIngqKbgqYvgqIIg4Kik4Kmx4KiVIOCoheCoquCooeCph+ConyDgqKjgqLngqYDgqIIg4KiV4KmA4Kik4KmHIOConOCoviDgqLjgqJXgqKbgqYcg4Kic4Kim4KmL4KiCIOCopOCpseColSDgqKTgqYHgqLjgqYDgqIIg4KiJ4Ki54Kio4Ki+4KiCIOCoqOCpguCpsCDgqJbgqYvgqLLgqY3gqLngqKbgqYcg4Kio4Ki54KmA4KiC4KWkXG5cbuCorOCpiOCon+CosOCpgCDgqLjgqYfgqLXgqLAg4KiG4Kif4KmL4Kiu4KmI4Kif4Ki/4KiV4Kiy4KmAIOCorOCpsOCopiDgqLngqYHgqbDgqKbgqL4g4Ki54KmIIOConOCopuCpi+CogiDgqKTgqYHgqLngqL7gqKHgqYAg4Kih4Ki/4Ki14Ki+4KiI4Ki4IOComuCovuCosOConCDgqLngqYsg4Kiw4Ki54KmAIOCoueCpgeCpsOCopuCpgCDgqLngqYjgpaQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV90aXRsZSIgbXNnaWQ9Ijc0OTM5ODk3MjI2MTAwMDg3MDAiPiLgqK7gqLngqbHgqKTgqKTgqL4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iNzExODgyNjkwMDc2NzA0NzEyNSI+IuCorOCosuCpjOColSDgqJXgqYDgqKTgqL46IOCoh+CouSDgqLjgqYLgqJrgqKjgqL7gqLXgqL7gqIIg4KiV4Kim4KmHIOCoqOCoviDgqLXgqL/gqJbgqL7gqJMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4i4KiY4Kmx4KifOiDgqJrgqYHgqbHgqKrgqJrgqL7gqKog4Kii4Kmw4KiXIOCoqOCovuCosiDgqLjgqYLgqJrgqKjgqL4g4Ki44KmC4Kia4KmAIOCopuCphyDgqLngqYfgqKDgqL7gqIIg4Ki14Ki/4KiW4Ki+4KiTIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiLgqLjgqKfgqL7gqLDgqKg6IOCoh+CouSDgqLjgqYLgqJrgqKjgqL7gqLXgqL7gqIIg4Kia4KmB4Kmx4Kiq4Kia4Ki+4KiqIOCoouCpsOColyDgqKjgqL7gqLIg4Ki14Ki/4KiW4Ki+4KiTIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiLgqLXgqbHgqKc6IOCouOCpguComuCoqOCovuCoteCovuCogiDgqLjgqYLgqJrgqYAg4Kim4KmHIOCouOCov+ColuCosCBcJ+CopOCphyDgqLXgqL/gqJbgqL7gqJMg4KiF4Kik4KmHIOCohuCoteCovuConOCovCDgqJXgqLDgqYsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSIxMTUzNjkzMDgwNDY3OTA0NDc0Ij4i4Kic4Ki84Kiw4KmC4Kiw4KmAOiDgqLjgqJXgqLDgqYDgqKggXCfgqKTgqYcg4Kid4Ki+4Kik4KmAIOCoruCovuCosOCpiyDgqIXgqKTgqYcg4KiG4Ki14Ki+4Kic4Ki8IOColeCosOCpiyI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPiUxJGQg4Kiu4Ki/4Kmw4Kif4Ki+4KiCIOCopOCpseColSAoPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4g4Kik4Kmx4KiVKSA8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPiUxJGQg4Kiu4Ki/4Kmw4Kif4Ki+4KiCIOCopOCpseColSAoPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4g4Kik4Kmx4KiVKTwvaXRlbT4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtcGwvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXBsL3N0cmluZ3MueG1sCmluZGV4IDkzZWE5ZjQuLmYzZTUwYjUgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtcGwvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1wbC9zdHJpbmdzLnhtbApAQCAtMjI1LDYgKzIyNSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2tkb3duIiBtc2dpZD0iODc1MTU0MjUxNDcyNDMzMjg3MyI+IlphYmxva3VqIHRlcmF6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiImZ3Q7OTk5Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2NoaWxkcmVuX2NvdW50X2JyYWNrZXRlZCIgbXNnaWQ9IjE3Njk0MjU0NzMxNjgzNDc4MzkiPiIoPHhsaWZmOmcgaWQ9Ik5PVElGSUNBVElPTkNPVU5UIj4lZDwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IlRyZcWbY2kgdWtyeXRlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4iVHJ5YiBhd2FyeWpueSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+IlN5c3RlbSBBbmRyb2lkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNlcl9vd25lcl9sYWJlbCIgbXNnaWQ9IjI4MDQzNTE4OTgwMDEwMzg5NTEiPiJPc29iaXN0ZSI8L3N0cmluZz4KQEAgLTM1NSw4ICszNTYsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IlBvendhbGEgYXBsaWthY2ppIG5hIHJvYmllbmllIHpkasSZxIcgaSBuYWdyeXdhbmllIGZpbG3Ds3cgcHJ6eSB1xbx5Y2l1IGFwYXJhdHUuIEFwbGlrYWNqYSB6IHR5bSB1cHJhd25pZW5pZW0gbW/FvGUgdcW8ecSHIGFwYXJhdHUgdyBkb3dvbG55bSBtb21lbmNpZSBiZXogVHdvamVnbyBwb3R3aWVyZHplbmlhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiJzdGVyb3dhbmllIHdpYnJhY2phbWkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+IlBvendhbGEgYXBsaWthY2ppIG5hIHN0ZXJvd2FuaWUgd2licmFjamFtaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4ia29udHJvbG93YW5pZSBsYXRhcmtpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiJQb3p3YWxhIGFwbGlrYWNqaSBuYSBzdGVyb3dhbmllIGxhdGFya8SFLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+ImJlenBvxZtyZWRuaWUgd3liaWVyYW5pZSBudW1lcsOzdyB0ZWxlZm9uw7N3Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+IlBvendhbGEgYXBsaWthY2ppIG5hIGR6d29uaWVuaWUgcG9kIG51bWVyeSB0ZWxlZm9uw7N3IGJleiBUd29qZWogd2llZHp5LiBNb8W8ZSB0byBza3V0a293YcSHIG5pZW9jemVraXdhbnltaSBvcMWCYXRhbWkgbHViIHBvxYLEhWN6ZW5pYW1pLiBBcGxpa2FjamEgbmllIG1vxbxlIGR6d29uacSHIHBvZCBudW1lcnkgYWxhcm1vd2UuIFrFgm/Fm2xpd2UgYXBsaWthY2plIG1vZ8SFIGdlbmVyb3dhxIcga29zenR5LCB3eWtvbnVqxIVjIHBvxYLEhWN6ZW5pYSBiZXogVHdvamVnbyBwb3R3aWVyZHplbmlhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiIG1zZ2lkPSIzNTc0OTQzODQ3MTgxNzkzOTE4Ij4idXPFgnVnYSB0ZWxlZm9uaWN6bmEgeiBkb3N0xJlwZW0gZG8ga29tdW5pa2F0b3JhIjwvc3RyaW5nPgpAQCAtODY4LDEwICs4NjcsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiJXeXRuaWoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+IktvcGl1aiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+IldrbGVqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiJXa2xlaiBqYWtvIHp3eWvFgnkgdGVrc3QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXBsYWNlIiBtc2dpZD0iNTc4MTY4NjA1OTA2MzE0ODkzMCI+Ilphc3TEhXAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4iVXN1xYQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IktvcGl1aiBhZHJlcyBVUkwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiJaYXpuYWN6IHRla3N0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiJDb2ZuaWoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+IlBvbsOzdyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiJaYXpuYWN6YW5pZSB0ZWtzdHUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4iRG9kYWogZG8gc8WCb3duaWthIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiJVc3XFhCI8L3N0cmluZz4KQEAgLTExMjEsNiArMTEyMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiJabWllxYQgdGFwZXTEmSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+Ik9kYmlvcm5payBwb3dpYWRvbWllxYQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+IkRvc3Rhd2NhIHdhcnVua8OzdyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9hc3Npc3RhbnRfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjkwOTQ1NjA1NTU2OTEwMjk1MiI+IkFzeXN0ZW50IHBvd2lhZG9taWXFhCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iVlBOIGFrdHl3bnkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiJPYnPFgnVnYSBzaWVjaSBWUE4gem9zdGHFgmEgd8WCxIVjem9uYSBwcnpleiBhcGxpa2FjasSZIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0IiBtc2dpZD0iMzAxMTMwNjYwNzEyNjQ1MDMyMiI+IkRvdGtuaWosIGFieSB6YXJ6xIVkemHEhyBzaWVjacSFLiI8L3N0cmluZz4KQEAgLTE0NTgsMTIgKzE0NjEsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV91cGRhdGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijg4NTY2MzEzMjI0NDAxODcwNzEiPiJaYWt0dWFsaXpvd2FuZSBwcnpleiBhZG1pbmlzdHJhdG9yYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4iVXN1bmnEmXR5IHByemV6IGFkbWluaXN0cmF0b3JhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiJBYnkgd3lkxYJ1xbx5xIcgY3phcyBwcmFjeSBiYXRlcmlpLCBPc3pjesSZZHphbmllIGJhdGVyaWkgb2dyYW5pY3phIGFrdHl3bm/Fm8SHIHVyesSFZHplbmlhLCB3IHR5bSB3aWJyYWNqZSwgdXPFgnVnaSBsb2thbGl6YWN5am5lIGkgcHJ6ZXR3YXJ6YW5pZSB3acSZa3N6b8WbY2kgZGFueWNoIHcgdGxlLiBQb2N6dGEsIGN6YXQgaSBpbm5lIHN5bmNocm9uaXpvd2FuZSBhcGxpa2FjamUgbW9nxIUgbmllIGFrdHVhbGl6b3dhxIcgc3dvamVqIHphd2FydG/Fm2NpLCBkb3DDs2tpIGljaCBuaWUgb3R3b3J6eXN6LlxuXG5Pc3pjesSZZHphbmllIGJhdGVyaWkgd3nFgsSFY3phIHNpxJkgYXV0b21hdHljem5pZSBwb2RjemFzIMWCYWRvd2FuaWEgdXJ6xIVkemVuaWEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfdGl0bGUiIG1zZ2lkPSI3NDkzOTg5NzIyNjEwMDA4NzAwIj4iV2HFvG5vxZvEhyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSI3MTE4ODI2OTAwNzY3MDQ3MTI1Ij4iWmFibG9rb3dhbmE6IG5pZ2R5IG5pZSBwb2thenVqIHR5Y2ggcG93aWFkb21pZcWEIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNjQ0NzY0MDQ0OTkxODQyNzE4NyI+Ik5pc2thOiBwb2thenVqIG5hIGRvbGUgbGlzdHkgcG93aWFkb21pZcWEIGJleiBzeWduYcWCdSBkxbp3acSZa293ZWdvIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiJOb3JtYWxuYTogcG9rYXp1aiB0ZSBwb3dpYWRvbWllbmlhIGJleiBzeWduYcWCdSBkxbp3acSZa293ZWdvIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiJXeXNva2E6IHBva2F6dWogbmEgcG9jesSFdGt1IGxpc3R5IHBvd2lhZG9taWXFhCBpIG9kdHdhcnphaiBkxbp3acSZayI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiJQaWxuYTogd3nFm3dpZXRsYWogbmEgZWtyYW5pZSBpIG9kdHdhcnphaiBkxbp3acSZayI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJmZXciPlByemV6ICUxJGQgbWludXR5IChkbyA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ibWFueSI+UHJ6ZXogJTEkZCBtaW51dCAoZG8gPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1wdC1yQlIvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXB0LXJCUi9zdHJpbmdzLnhtbAppbmRleCAzNTUyNzk1Li44OWJiYmU4IDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXB0LXJCUi9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXB0LXJCUi9zdHJpbmdzLnhtbApAQCAtMjIzLDYgKzIyMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2tkb3duIiBtc2dpZD0iODc1MTU0MjUxNDcyNDMzMjg3MyI+IkJsb3F1ZWFyIGFnb3JhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiImZ3Q7OTk5Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2NoaWxkcmVuX2NvdW50X2JyYWNrZXRlZCIgbXNnaWQ9IjE3Njk0MjU0NzMxNjgzNDc4MzkiPiIoPHhsaWZmOmcgaWQ9Ik5PVElGSUNBVElPTkNPVU5UIj4lZDwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IkNvbnRlw7pkbyBvY3VsdG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiJNb2RvIGRlIHNlZ3VyYW7Dp2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiJTaXN0ZW1hIEFuZHJvaWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+IlBlc3NvYWwiPC9zdHJpbmc+CkBAIC0zNTMsOCArMzU0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiJQZXJtaXRlIHF1ZSBvIGFwcCB0aXJlIGZvdG9zIGUgZmlsbWUgdsOtZGVvcyBjb20gYSBjw6JtZXJhLiBFc3RhIHBlcm1pc3PDo28gYXV0b3JpemEgbyBhcHAgYSB1c2FyIGEgY8OibWVyYSBhIHF1YWxxdWVyIG1vbWVudG8gc2VtIHN1YSBjb25maXJtYcOnw6NvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiJjb250cm9sYXIgdmlicmHDp8OjbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4iUGVybWl0ZSBxdWUgbyBhcHAgY29udHJvbGUgYSB2aWJyYcOnw6NvLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiJjb250cm9sYXIgbGFudGVybmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+IlBlcm1pdGUgcXVlIG8gYXBwIGNvbnRyb2xlIGEgbGFudGVybmEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4ibGlnYXIgZGlyZXRhbWVudGUgcGFyYSBuw7ptZXJvcyBkZSB0ZWxlZm9uZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQaG9uZSIgbXNnaWQ9IjM3NDA3OTc1NzYxMTM3NjA4MjciPiJQZXJtaXRlIHF1ZSBvIGFwcCBsaWd1ZSBwYXJhIG7Dum1lcm9zIGRlIHRlbGVmb25lIHNlbSBzdWEgaW50ZXJ2ZW7Dp8Ojby4gSXNzbyBwb2RlIHJlc3VsdGFyIGVtIGNvYnJhbsOnYXMgb3UgY2hhbWFkYXMgaW5lc3BlcmFkYXMuIEVzdGEgb3DDp8OjbyBuw6NvIHBlcm1pdGUgcXVlIG8gYXBwIGxpZ3VlIHBhcmEgbsO6bWVyb3MgZGUgZW1lcmfDqm5jaWEuIEFwcHMgbWFsaWNpb3NvcyBwb2RlbSBnZXJhciBjdXN0b3MgY29tIGNoYW1hZGFzIGZlaXRhcyBzZW0gc3VhIGNvbmZpcm1hw6fDo28uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiJhY2Vzc2FyIHNlcnZpw6dvIGRlIG1lbnNhZ2VucyBpbnN0YW50w6JuZWFzIHBhcmEgY2hhbWFkYXMiPC9zdHJpbmc+CkBAIC04NTgsMTAgKzg1NywxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+IlJlY29ydGFyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weSIgbXNnaWQ9IjI2ODE5NDYyMjk1MzM1MTE5ODciPiJDb3BpYXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiJDb2xhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4iQ29sYXIgY29tbyB0ZXh0byBzaW1wbGVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiJTdWJzdGl0dWlyLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+IkV4Y2x1aXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IkNvcGlhciBVUkwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiJTZWxlY2lvbmFyIHRleHRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiJEZXNmYXplciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlZG8iIG1zZ2lkPSI3NzU5NDY0ODc2NTY2ODAzODg4Ij4iUmVmYXplciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiJTZWxlw6fDo28gZGUgdGV4dG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4iQWRpY2lvbmFyIGFvIGRpY2lvbsOhcmlvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiJFeGNsdWlyIjwvc3RyaW5nPgpAQCAtMTEwNyw2ICsxMTA5LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+IkFsdGVyYXIgcGxhbm8gZGUgZnVuZG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiJPdXZpbnRlIGRlIG5vdGlmaWNhw6fDtWVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiJQcm92ZWRvciBkZSBjb25kacOnw7VlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9hc3Npc3RhbnRfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjkwOTQ1NjA1NTU2OTEwMjk1MiI+IkFzc2lzdGVudGUgZGUgbm90aWZpY2HDp8OjbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iVlBOIGF0aXZhZGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiJBIFZQTiBlc3TDoSBhdGl2YWRhIHBvciA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiJUb3F1ZSBwYXJhIGdlcmVuY2lhciBhIHJlZGUuIjwvc3RyaW5nPgpAQCAtMTQ0MCwxMiArMTQ0Myw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+IkF0dWFsaXphZG8gcGVsbyBhZG1pbmlzdHJhZG9yIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiJFeGNsdcOtZG8gcGVsbyBzZXUgYWRtaW5pc3RyYWRvciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4iUGFyYSBhanVkYXIgYSBtZWxob3JhciBhIGR1cmHDp8OjbyBkYSBiYXRlcmlhLCBvIGVjb25vbWl6YWRvciBkZSBiYXRlcmlhIHJlZHV6IG8gZGVzZW1wZW5obyBlIG9zIGxpbWl0ZXMgZGUgdmlicmHDp8OjbyBkbyBkaXNwb3NpdGl2bywgb3Mgc2VydmnDp29zIGRlIGxvY2FsaXphw6fDo28gZSBhIG1haW9yaWEgZG9zIGRhZG9zIGRlIHNlZ3VuZG8gcGxhbm8uIEUtbWFpbCwgbWVuc2FnZW5zIGUgb3V0cm9zIGFwbGljYXRpdm9zIHF1ZSBkZXBlbmRlbSBkZSBzaW5jcm9uaXphw6fDo28gbsOjbyBwb2RlbSBzZXIgYXR1YWxpemFkb3MsIGEgbsOjbyBzZXIgcXVlIHZvY8OqIG9zIGFicmEuXG5cbk8gZWNvbm9taXphZG9yIGRlIGJhdGVyaWEgw6kgZGVzbGlnYWRvIGF1dG9tYXRpY2FtZW50ZSBxdWFuZG8gbyBkaXNwb3NpdGl2byBlc3TDoSBzZW5kbyBjYXJyZWdhZG8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfdGl0bGUiIG1zZ2lkPSI3NDkzOTg5NzIyNjEwMDA4NzAwIj4iSW1wb3J0w6JuY2lhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiJCbG9xdWVhZGE6IG51bmNhIG1vc3RyYXIgZXNzYXMgbm90aWZpY2HDp8O1ZXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4iQmFpeGE6IG1vc3RyYXIgbmEgcGFydGUgaW5mZXJpb3IgZGEgbGlzdGEgZGUgbm90aWZpY2HDp8O1ZXMgZGUgZm9ybWEgc2lsZW5jaW9zYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI3OTkxMTU3Njk3NjA5NTc1MjcxIj4iTm9ybWFsOiBtb3N0cmFyIGVzc2FzIG5vdGlmaWNhw6fDtWVzIGRlIGZvcm1hIHNpbGVuY2lvc2EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzE1MjIzODYzNzczNzIxNTY1NCI+IkFsdGE6IG1vc3RyYXIgbmEgcGFydGUgc3VwZXJpb3IgZGEgbGlzdGEgZGUgbm90aWZpY2HDp8O1ZXMgZSBlbWl0aXIgc29tIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+IlVyZ2VudGU6IG1vc3RyYXIgcGFyY2lhbG1lbnRlIG5hIHRlbGEgZSBlbWl0aXIgc29tIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+UG9yICUxJGQgbWludXRvcyAoYXTDqSDDoHMgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5Qb3IgJTEkZCBtaW51dG9zIChhdMOpIMOgcyA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXB0LXJQVC9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtcHQtclBUL3N0cmluZ3MueG1sCmluZGV4IGYyZTk0MDIuLmY1NTlkYmIgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtcHQtclBUL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtcHQtclBUL3N0cmluZ3MueG1sCkBAIC0yMjMsNiArMjIzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9ja2Rvd24iIG1zZ2lkPSI4NzUxNTQyNTE0NzI0MzMyODczIj4iQmxvcXVlYXIgYWdvcmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+Ijk5OSsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fY2hpbGRyZW5fY291bnRfYnJhY2tldGVkIiBtc2dpZD0iMTc2OTQyNTQ3MzE2ODM0NzgzOSI+Iig8eGxpZmY6ZyBpZD0iTk9USUZJQ0FUSU9OQ09VTlQiPiVkPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4iQ29udGXDumRvIG9jdWx0byI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+Ik1vZG8gc2VndXJvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4iU2lzdGVtYSBBbmRyb2lkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNlcl9vd25lcl9sYWJlbCIgbXNnaWQ9IjI4MDQzNTE4OTgwMDEwMzg5NTEiPiJQZXNzb2FsIjwvc3RyaW5nPgpAQCAtMzUzLDggKzM1NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4iUGVybWl0ZSBxdWUgYSBhcGxpY2HDp8OjbyB0aXJlIGZvdG9ncmFmaWFzIGUgZ3JhdmUgdsOtZGVvcyBjb20gYSBjw6JtYXJhLiBFc3RhIGF1dG9yaXphw6fDo28gcGVybWl0ZSBxdWUgYSBhcGxpY2HDp8OjbyB1dGlsaXplIGEgY8OibWFyYSBzZW0gYSBzdWEgY29uZmlybWHDp8OjbyBlbSBxdWFscXVlciBhbHR1cmEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl92aWJyYXRlIiBtc2dpZD0iNzY5NjQyNzAyNjA1NzcwNTgzNCI+ImNvbnRyb2xhciB2aWJyYcOnw6NvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiJQZXJtaXRlIMOgIGFwbGljYcOnw6NvIGNvbnRyb2xhciBvIHZpYnJhZG9yLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiJjb250cm9sYXIgbGFudGVybmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+IlBlcm1pdGUgw6AgYXBsaWNhw6fDo28gY29udHJvbGFyIGEgbGFudGVybmEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4ibWFyY2FyIG7Dum1lcm9zIGRlIHRlbGVmb25lIGRpcmV0YW1lbnRlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+IlBlcm1pdGUgcXVlIGEgYXBsaWNhw6fDo28gbGlndWUgcGFyYSBuw7ptZXJvcyBkZSB0ZWxlZm9uZSBzZW0gYSBpbnRlcnZlbsOnw6NvIGRvIHV0aWxpemFkb3IuIEVzdGEgYcOnw6NvIHBvZGUgcmVzdWx0YXIgZW0gY29icmFuw6dhcyBvdSBjaGFtYWRhcyBpbmVzcGVyYWRhcy4gVGVuaGEgZW0gYXRlbsOnw6NvIHF1ZSBpc3RvIG7Do28gcGVybWl0ZSBxdWUgYSBhcGxpY2HDp8OjbyBsaWd1ZSBwYXJhIG7Dum1lcm9zIGRlIGVtZXJnw6puY2lhLiBBcyBhcGxpY2HDp8O1ZXMgbWFsaWNpb3NhcyBwb2RlbSBmYXplciBjb20gcXVlIGluY29ycmEgZW0gY3VzdG9zLCBmYXplbmRvIGNoYW1hZGFzIHNlbSBhIHN1YSBjb25maXJtYcOnw6NvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiIG1zZ2lkPSIzNTc0OTQzODQ3MTgxNzkzOTE4Ij4iYWNlZGVyIGFvIHNlcnZpw6dvIGRlIGNoYW1hZGFzIElNUyI8L3N0cmluZz4KQEAgLTg1OCwxMCArODU3LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJjdXQiIG1zZ2lkPSIzMDkyNTY5NDA4NDM4NjI2MjYxIj4iQ29ydGFyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weSIgbXNnaWQ9IjI2ODE5NDYyMjk1MzM1MTE5ODciPiJDb3BpYXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiJDb2xhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4iQ29sYXIgY29tbyB0ZXh0byBzaW1wbGVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiJTdWJzdGl0dWlyLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+IkVsaW1pbmFyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiJDb3BpYXIgVVJMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4iU2VsZWNpb25hciB0ZXh0byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVuZG8iIG1zZ2lkPSI3OTA1Nzg4NTAyNDkxNzQyMzI4Ij4iQW51bGFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiJSZWZhemVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGV4dFNlbGVjdGlvbkNBQlRpdGxlIiBtc2dpZD0iNTIzNjg1MDM5NDM3MDgyMDM1NyI+IlNlbGVjw6fDo28gZGUgdGV4dG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4iQWRpY2lvbmFyIGFvIGRpY2lvbsOhcmlvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiJFbGltaW5hciI8L3N0cmluZz4KQEAgLTExMDcsNiArMTEwOSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiJBbHRlcmFyIGltYWdlbSBkZSBmdW5kbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+IlNlcnZpw6dvIGRlIGVzY3V0YSBkZSBub3RpZmljYcOnw7VlcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbmRpdGlvbl9wcm92aWRlcl9zZXJ2aWNlX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMzIxMzQzMzUyOTA2NTI0NTY0Ij4iRm9ybmVjZWRvciBkZSBjb25kacOnw6NvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2Fzc2lzdGFudF9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iOTA5NDU2MDU1NTY5MTAyOTUyIj4iQXNzaXN0ZW50ZSBkZSBub3RpZmljYcOnw7VlcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iVlBOIGF0aXZhZGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiJBIFZQTiBmb2kgYXRpdmFkYSBwZWxvIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0IiBtc2dpZD0iMzAxMTMwNjYwNzEyNjQ1MDMyMiI+IlRvcXVlIHBhcmEgZ2VyaXIgYSByZWRlLiI8L3N0cmluZz4KQEAgLTE0NDAsMTIgKzE0NDMsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV91cGRhdGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijg4NTY2MzEzMjI0NDAxODcwNzEiPiJBdHVhbGl6YWRvIHBlbG8gYWRtaW5pc3RyYWRvciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4iRWxpbWluYWRvIHBlbG8gYWRtaW5pc3RyYWRvciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4iUGFyYSBhanVkYXIgYSBtZWxob3JhciBhIGF1dG9ub21pYSBkYSBiYXRlcmlhLCBhIHBvdXBhbsOnYSBkZSBiYXRlcmlhIHJlZHV6IG8gZGVzZW1wZW5obyBkbyBzZXUgZGlzcG9zaXRpdm8gZSBsaW1pdGEgYSB2aWJyYcOnw6NvLCBvcyBzZXJ2acOnb3MgZGUgbG9jYWxpemHDp8OjbyBlIGEgbWFpb3JpYSBkb3MgZGFkb3MgZW0gc2VndW5kbyBwbGFuby4gTyBlbWFpbCwgYXMgbWVuc2FnZW5zIGUgb3V0cmFzIGFwbGljYcOnw7VlcyBxdWUgZGVwZW5kZW0gZGEgc2luY3Jvbml6YcOnw6NvIG7Do28gcG9kZW0gc2VyIGF0dWFsaXphZG9zIGV4Y2V0byBzZSBvcyBhYnJpci5cblxuQSBwb3VwYW7Dp2EgZGUgYmF0ZXJpYSBkZXNsaWdhLXNlIGF1dG9tYXRpY2FtZW50ZSBxdWFuZG8gbyBkaXNwb3NpdGl2byBlc3TDoSBhIGNhcnJlZ2FyLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX3RpdGxlIiBtc2dpZD0iNzQ5Mzk4OTcyMjYxMDAwODcwMCI+IkltcG9ydMOibmNpYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSI3MTE4ODI2OTAwNzY3MDQ3MTI1Ij4iQmxvcXVlYWRvOiBudW5jYSBtb3N0cmFyIGVzdGFzIG5vdGlmaWNhw6fDtWVzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNjQ0NzY0MDQ0OTkxODQyNzE4NyI+IkJhaXhvOiBtb3N0cmFyIG5hIHBhcnRlIGluZmVyaW9yIGRhIGxpc3RhIGRlIG5vdGlmaWNhw6fDtWVzIHNlbSBzb20iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNzk5MTE1NzY5NzYwOTU3NTI3MSI+Ik5vcm1hbDogbW9zdHJhciBlc3RhcyBub3RpZmljYcOnw7VlcyBzZW0gc29tIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiJFbGV2YWRvOiBtb3N0cmFyIG5hIHBhcnRlIHN1cGVyaW9yIGRhIGxpc3RhIGRlIG5vdGlmaWNhw6fDtWVzIGNvbSBzb20iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSIxMTUzNjkzMDgwNDY3OTA0NDc0Ij4iVXJnZW50ZTogbW9zdHJhciBubyBlY3LDoyBjb20gc29tIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5EdXJhbnRlICUxJGQgbWludXRvcyAoYXTDqSDDoHMgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+RHVyYW50ZSB1bSBtaW51dG8gKGF0w6kgw6BzIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzAiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KQEAgLTE0NzksNyArMTQ3Niw3IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj5EdXJhbnRlIDEgaDwvaXRlbT4KICAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJ6ZW5fbW9kZV91bnRpbCIgbXNnaWQ9IjczMzYzMDg0OTIyODk4NzUwODgiPiJBdMOpIMOgcyA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ6ZW5fbW9kZV9hbGFybSIgbXNnaWQ9IjkxMjgyMDU3MjEzMDEzMzA3OTciPiJBdMOpIMOgcyA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRSI+JTEkczwveGxpZmY6Zz4gKHByw7N4aW1vIGFsYXJtZSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ6ZW5fbW9kZV9hbGFybSIgbXNnaWQ9IjkxMjgyMDU3MjEzMDEzMzA3OTciPiJBdMOpIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FIj4lMSRzPC94bGlmZjpnPiAocHLDs3hpbW8gYWxhcm1lKSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Inplbl9tb2RlX2ZvcmV2ZXIiIG1zZ2lkPSI3NDIwMDExOTM2NzcwMDg2OTkzIj4iQXTDqSBxdWUgbyB1dGlsaXphZG9yIGRlc2F0aXZlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iemVuX21vZGVfZm9yZXZlcl9kbmQiIG1zZ2lkPSIzNzkyMTMyNjk2NTcyMTg5MDgxIj4iQXTDqSBkZXNhdGl2YXIgTsOjbyBpbmNvbW9kYXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ6ZW5fbW9kZV9ydWxlX25hbWVfY29tYmluYXRpb24iIG1zZ2lkPSIxOTExMDk5Mzk5NjgwNzY0NzciPiI8eGxpZmY6ZyBpZD0iRklSU1QiPiUxJHM8L3hsaWZmOmc+Lzx4bGlmZjpnIGlkPSJSRVNUIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtcHQvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXB0L3N0cmluZ3MueG1sCmluZGV4IDM1NTI3OTUuLjg5YmJiZTggMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtcHQvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1wdC9zdHJpbmdzLnhtbApAQCAtMjIzLDYgKzIyMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2tkb3duIiBtc2dpZD0iODc1MTU0MjUxNDcyNDMzMjg3MyI+IkJsb3F1ZWFyIGFnb3JhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiImZ3Q7OTk5Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2NoaWxkcmVuX2NvdW50X2JyYWNrZXRlZCIgbXNnaWQ9IjE3Njk0MjU0NzMxNjgzNDc4MzkiPiIoPHhsaWZmOmcgaWQ9Ik5PVElGSUNBVElPTkNPVU5UIj4lZDwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IkNvbnRlw7pkbyBvY3VsdG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiJNb2RvIGRlIHNlZ3VyYW7Dp2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiJTaXN0ZW1hIEFuZHJvaWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+IlBlc3NvYWwiPC9zdHJpbmc+CkBAIC0zNTMsOCArMzU0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiJQZXJtaXRlIHF1ZSBvIGFwcCB0aXJlIGZvdG9zIGUgZmlsbWUgdsOtZGVvcyBjb20gYSBjw6JtZXJhLiBFc3RhIHBlcm1pc3PDo28gYXV0b3JpemEgbyBhcHAgYSB1c2FyIGEgY8OibWVyYSBhIHF1YWxxdWVyIG1vbWVudG8gc2VtIHN1YSBjb25maXJtYcOnw6NvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiJjb250cm9sYXIgdmlicmHDp8OjbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4iUGVybWl0ZSBxdWUgbyBhcHAgY29udHJvbGUgYSB2aWJyYcOnw6NvLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiJjb250cm9sYXIgbGFudGVybmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+IlBlcm1pdGUgcXVlIG8gYXBwIGNvbnRyb2xlIGEgbGFudGVybmEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4ibGlnYXIgZGlyZXRhbWVudGUgcGFyYSBuw7ptZXJvcyBkZSB0ZWxlZm9uZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQaG9uZSIgbXNnaWQ9IjM3NDA3OTc1NzYxMTM3NjA4MjciPiJQZXJtaXRlIHF1ZSBvIGFwcCBsaWd1ZSBwYXJhIG7Dum1lcm9zIGRlIHRlbGVmb25lIHNlbSBzdWEgaW50ZXJ2ZW7Dp8Ojby4gSXNzbyBwb2RlIHJlc3VsdGFyIGVtIGNvYnJhbsOnYXMgb3UgY2hhbWFkYXMgaW5lc3BlcmFkYXMuIEVzdGEgb3DDp8OjbyBuw6NvIHBlcm1pdGUgcXVlIG8gYXBwIGxpZ3VlIHBhcmEgbsO6bWVyb3MgZGUgZW1lcmfDqm5jaWEuIEFwcHMgbWFsaWNpb3NvcyBwb2RlbSBnZXJhciBjdXN0b3MgY29tIGNoYW1hZGFzIGZlaXRhcyBzZW0gc3VhIGNvbmZpcm1hw6fDo28uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiJhY2Vzc2FyIHNlcnZpw6dvIGRlIG1lbnNhZ2VucyBpbnN0YW50w6JuZWFzIHBhcmEgY2hhbWFkYXMiPC9zdHJpbmc+CkBAIC04NTgsMTAgKzg1NywxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+IlJlY29ydGFyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weSIgbXNnaWQ9IjI2ODE5NDYyMjk1MzM1MTE5ODciPiJDb3BpYXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiJDb2xhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4iQ29sYXIgY29tbyB0ZXh0byBzaW1wbGVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiJTdWJzdGl0dWlyLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+IkV4Y2x1aXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IkNvcGlhciBVUkwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiJTZWxlY2lvbmFyIHRleHRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiJEZXNmYXplciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlZG8iIG1zZ2lkPSI3NzU5NDY0ODc2NTY2ODAzODg4Ij4iUmVmYXplciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiJTZWxlw6fDo28gZGUgdGV4dG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4iQWRpY2lvbmFyIGFvIGRpY2lvbsOhcmlvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiJFeGNsdWlyIjwvc3RyaW5nPgpAQCAtMTEwNyw2ICsxMTA5LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+IkFsdGVyYXIgcGxhbm8gZGUgZnVuZG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiJPdXZpbnRlIGRlIG5vdGlmaWNhw6fDtWVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiJQcm92ZWRvciBkZSBjb25kacOnw7VlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9hc3Npc3RhbnRfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjkwOTQ1NjA1NTU2OTEwMjk1MiI+IkFzc2lzdGVudGUgZGUgbm90aWZpY2HDp8OjbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iVlBOIGF0aXZhZGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiJBIFZQTiBlc3TDoSBhdGl2YWRhIHBvciA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiJUb3F1ZSBwYXJhIGdlcmVuY2lhciBhIHJlZGUuIjwvc3RyaW5nPgpAQCAtMTQ0MCwxMiArMTQ0Myw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+IkF0dWFsaXphZG8gcGVsbyBhZG1pbmlzdHJhZG9yIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiJFeGNsdcOtZG8gcGVsbyBzZXUgYWRtaW5pc3RyYWRvciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4iUGFyYSBhanVkYXIgYSBtZWxob3JhciBhIGR1cmHDp8OjbyBkYSBiYXRlcmlhLCBvIGVjb25vbWl6YWRvciBkZSBiYXRlcmlhIHJlZHV6IG8gZGVzZW1wZW5obyBlIG9zIGxpbWl0ZXMgZGUgdmlicmHDp8OjbyBkbyBkaXNwb3NpdGl2bywgb3Mgc2VydmnDp29zIGRlIGxvY2FsaXphw6fDo28gZSBhIG1haW9yaWEgZG9zIGRhZG9zIGRlIHNlZ3VuZG8gcGxhbm8uIEUtbWFpbCwgbWVuc2FnZW5zIGUgb3V0cm9zIGFwbGljYXRpdm9zIHF1ZSBkZXBlbmRlbSBkZSBzaW5jcm9uaXphw6fDo28gbsOjbyBwb2RlbSBzZXIgYXR1YWxpemFkb3MsIGEgbsOjbyBzZXIgcXVlIHZvY8OqIG9zIGFicmEuXG5cbk8gZWNvbm9taXphZG9yIGRlIGJhdGVyaWEgw6kgZGVzbGlnYWRvIGF1dG9tYXRpY2FtZW50ZSBxdWFuZG8gbyBkaXNwb3NpdGl2byBlc3TDoSBzZW5kbyBjYXJyZWdhZG8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfdGl0bGUiIG1zZ2lkPSI3NDkzOTg5NzIyNjEwMDA4NzAwIj4iSW1wb3J0w6JuY2lhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiJCbG9xdWVhZGE6IG51bmNhIG1vc3RyYXIgZXNzYXMgbm90aWZpY2HDp8O1ZXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4iQmFpeGE6IG1vc3RyYXIgbmEgcGFydGUgaW5mZXJpb3IgZGEgbGlzdGEgZGUgbm90aWZpY2HDp8O1ZXMgZGUgZm9ybWEgc2lsZW5jaW9zYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI3OTkxMTU3Njk3NjA5NTc1MjcxIj4iTm9ybWFsOiBtb3N0cmFyIGVzc2FzIG5vdGlmaWNhw6fDtWVzIGRlIGZvcm1hIHNpbGVuY2lvc2EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzE1MjIzODYzNzczNzIxNTY1NCI+IkFsdGE6IG1vc3RyYXIgbmEgcGFydGUgc3VwZXJpb3IgZGEgbGlzdGEgZGUgbm90aWZpY2HDp8O1ZXMgZSBlbWl0aXIgc29tIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+IlVyZ2VudGU6IG1vc3RyYXIgcGFyY2lhbG1lbnRlIG5hIHRlbGEgZSBlbWl0aXIgc29tIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+UG9yICUxJGQgbWludXRvcyAoYXTDqSDDoHMgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5Qb3IgJTEkZCBtaW51dG9zIChhdMOpIMOgcyA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXJvL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1yby9zdHJpbmdzLnhtbAppbmRleCAyZjg2MmIyLi40MDg2ZTY5IDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXJvL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtcm8vc3RyaW5ncy54bWwKQEAgLTIyNCw2ICsyMjQsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiJCbG9jYcibaSBhY3VtIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiLLgzk5OSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJDb27Im2ludXR1bCBlc3RlIGFzY3VucyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+Ik1vZCBzaWd1ciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+IlNpc3RlbXVsIEFuZHJvaWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+IlBlcnNvbmFsIjwvc3RyaW5nPgpAQCAtMzU0LDggKzM1NSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4iUGVybWl0ZSBhcGxpY2HIm2llaSBzxIMgcmVhbGl6ZXplIGZvdG9ncmFmaWkgyJlpIHZpZGVvY2xpcHVyaSBjdSBjYW1lcmEgZm90by4gQ3UgYWNlYXN0xIMgcGVybWlzaXVuZSBhcGxpY2HIm2lhIHV0aWxpemVhesSDIGNhbWVyYSBmb3RvIG9yaWPDom5kIMiZaSBmxINyxIMgY29uZmlybWFyZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4iY29udHJvbGVhesSDIHZpYnJhcmVhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiJQZXJtaXRlIGFwbGljYcibaWVpIHPEgyBjb250cm9sZXplIG1lY2FuaXNtdWwgZGUgdmlicmFyZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4iY29udHJvbCBsYW50ZXJuxIMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+IlBlcm1pdGUgYXBsaWNhyJtpZWkgc8SDIGNvbnRyb2xlemUgbGFudGVybmEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4iYXBlbGFyZSBkaXJlY3TEgyBudW1lcmUgZGUgdGVsZWZvbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQaG9uZSIgbXNnaWQ9IjM3NDA3OTc1NzYxMTM3NjA4MjciPiJQZXJtaXRlIGFwbGljYcibaWVpIHPEgyBhcGVsZXplIG51bWVyZSBkZSB0ZWxlZm9uIGbEg3LEgyBpbnRlcnZlbsWjaWEgZHZzLiBBY2VzdCBsdWNydSBwb2F0ZSBkZXRlcm1pbmEgYXBhcmnIm2lhIHVub3IgdGF4ZSBzYXUgYSB1bm9yIGFwZWx1cmkgbmVhxZ90ZXB0YXRlLiBDdSBhY2Vhc3TEgyBwZXJtaXNpdW5lIGFwbGljYcibaWEgbnUgcG9hdGUgYXBlbGEgbnVtZXJlbGUgZGUgdXJnZW7Fo8SDLiBBcGxpY2HFo2lpbGUgcsSDdSBpbnRlbsWjaW9uYXRlIHBvdCBhY3VtdWxhIGNvc3R1cmkgcHJpbiBlZmVjdHVhcmVhIHVub3IgYXBlbHVyaSBmxINyxIMgY29uZmlybWFyZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ltc0NhbGxTZXJ2aWNlIiBtc2dpZD0iMzU3NDk0Mzg0NzE4MTc5MzkxOCI+ImFjY2VzZWF6xIMgc2VydmljaXVsIGRlIGFwZWxhcmUgSU1TIjwvc3RyaW5nPgpAQCAtODYzLDEwICs4NjIsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiJEZWN1cGHFo2kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+IkNvcGlhyJtpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzdGUiIG1zZ2lkPSI1NjI5ODgwODM2ODA1MDM2NDMzIj4iSW5zZXJhyJtpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiJJbnNlcmHIm2kgY2EgdGV4dCBzaW1wbHUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXBsYWNlIiBtc2dpZD0iNTc4MTY4NjA1OTA2MzE0ODkzMCI+IsOObmxvY3VpxaNpLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+IsiYdGVyZ2XIm2kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IkNvcGlhyJtpIGFkcmVzYSBVUkwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiJTZWxlY3RhyJtpIHRleHQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmRvIiBtc2dpZD0iNzkwNTc4ODUwMjQ5MTc0MjMyOCI+IkFudWxhyJtpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiJSZXBldGHIm2kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4iU2VsZWN0YXJlIHRleHQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4iQWTEg3VnYcibaSDDrm4gZGljxaNpb25hciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4iyJh0ZXJnZcibaSI8L3N0cmluZz4KQEAgLTExMTQsNiArMTExNiw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiJNb2RpZmljYcWjaSBpbWFnaW5lYSBkZSBmdW5kYWwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiJTZXJ2aWNpdSBkZSBjaXRpcmUgYSBub3RpZmljxINyaWxvciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbmRpdGlvbl9wcm92aWRlcl9zZXJ2aWNlX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMzIxMzQzMzUyOTA2NTI0NTY0Ij4iRnVybml6b3IgZGUgY29uZGnIm2lpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2Fzc2lzdGFudF9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iOTA5NDU2MDU1NTY5MTAyOTUyIj4iQXNpc3RlbnQgcGVudHJ1IG5vdGlmaWPEg3JpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJWUE4gYWN0aXZhdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+IlZQTiBlc3RlIGFjdGl2YXTEgyBkZSA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiJBdGluZ2XIm2kgcGVudHJ1IGEgZ2VzdGlvbmEgcmXFo2VhdWEuIjwvc3RyaW5nPgpAQCAtMTQ0OSwxMiArMTQ1Miw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+IkFjdHVhbGl6YXQgZGUgdW4gYWRtaW5pc3RyYXRvciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4iyJh0ZXJzIGRlIGFkbWluaXN0cmF0b3IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTk2MDQzMTEyMzgxNjI1MzAzNCI+IlBlbnRydSBhIMOubWJ1bsSDdMSDyJtpIGF1dG9ub21pYSBiYXRlcmllaSwgZnVuY8ibaWEgZGUgZWNvbm9taXNpcmUgYSBlbmVyZ2llaSByZWR1Y2UgcGVyZm9ybWFuyJtlbGUgZGlzcG96aXRpdnVsdWkgyJlpIGxpbWl0ZWF6xIMgdmlicmHIm2lpbGUsIHNlcnZpY2lpbGUgZGUgbG9jYWxpemFyZSDImWkgbWFqb3JpdGF0ZWEgZGF0ZWxvciBkZSBmdW5kYWwuIEVzdGUgcG9zaWJpbCBjYSBlLW1haWx1cmlsZSwgbWVzYWdlcmlhIMiZaSBhbHRlIGFwbGljYcibaWkgY2FyZSBkZXBpbmQgZGUgc2luY3Jvbml6YXJlIHPEgyBudSBzZSBhY3R1YWxpemV6ZSBkYWPEgyBudSBsZSBkZXNjaGlkZcibaS5cblxuRnVuY8ibaWEgZGUgZWNvbm9taXNpcmUgYSBlbmVyZ2llaSBzZSBkZXphY3RpdmVhesSDIGF1dG9tYXQgY8OibmQgZGlzcG96aXRpdnVsIHNlIMOubmNhcmPEgy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV90aXRsZSIgbXNnaWQ9Ijc0OTM5ODk3MjI2MTAwMDg3MDAiPiJJbXBvcnRhbsibxIMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iNzExODgyNjkwMDc2NzA0NzEyNSI+IkJsb2NhdGU6IGFjZXN0ZSBub3RpZmljxINyaSBudSBzZSBhZmnImWVhesSDIG5pY2lvZGF0xIMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4iUmVkdXPEgzogc2UgYWZpyJllYXrEgyDDrm4gcGFydGVhIGRlIGpvcyBhIGxpc3RlaSBjdSBub3RpZmljxINyaSBmxINyxIMgYSBzZSBlbWl0ZSB1biBzdW5ldCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI3OTkxMTU3Njk3NjA5NTc1MjcxIj4iTm9ybWFsxIM6IGFjZXN0ZSBub3RpZmljxINyaSBzZSBhZmnImWVhesSDIGbEg3LEgyBhIHNlIGVtaXRlIHVuIHN1bmV0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiJSaWRpY2F0xIM6IHNlIGFmaciZZWF6xIMgw65uIHBhcnRlYSBkZSBzdXMgYSBsaXN0ZWkgY3Ugbm90aWZpY8SDcmkgyJlpIHNlIGVtaXRlIHVuIHN1bmV0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+IlVyZ2VudGU6IHNlIGFmaciZZWF6xIMgcGVudHJ1IG8gc2N1cnTEgyBkdXJhdMSDIHBlIGVjcmFuIMiZaSBzZSBlbWl0ZSB1biBzdW5ldCI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJmZXciPlRpbXAgZGUgJTEkZCBtaW51dGUgKHDDom7EgyBsYSA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPlRpbXAgZGUgJTEkZCBkZSBtaW51dGUgKHDDom7EgyBsYSA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXJ1L3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1ydS9zdHJpbmdzLnhtbAppbmRleCAzYjQ1ZDQxLi5lZTM5YjgzIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXJ1L3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtcnUvc3RyaW5ncy54bWwKQEAgLTIyNSw2ICsyMjUsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiLQl9Cw0LHQu9C+0LrQuNGA0L7QstCw0YLRjCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iJmd0Ozk5OSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLQodC+0LTQtdGA0LbQuNC80L7QtSDRgdC60YDRi9GC0L4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiLQkdC10LfQvtC/0LDRgdC90YvQuSDRgNC10LbQuNC8Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4i0KHQuNGB0YLQtdC80LAgQW5kcm9pZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4i0JvQuNGH0L3Ri9C1INC00LDQvdC90YvQtSI8L3N0cmluZz4KQEAgLTM1NSw4ICszNTYsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+ItCf0YDQuNC70L7QttC10L3QuNC1INGB0LzQvtC20LXRgiDRgdC90LjQvNCw0YLRjCDRhNC+0YLQvtCz0YDQsNGE0LjQuCDQuCDQstC40LTQtdC+0YDQvtC70LjQutC4INGBINC/0L7QvNC+0YnRjNGOINC60LDQvNC10YDRiyDQsiDQu9GO0LHQvtC1INCy0YDQtdC80Y8g0LHQtdC3INCy0LDRiNC10LPQviDRgNCw0LfRgNC10YjQtdC90LjRjy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4i0KPQv9GA0LDQstC70LXQvdC40LUg0YTRg9C90LrRhtC40LXQuSDQstC40LHRgNC+0YHQuNCz0L3QsNC70LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+ItCf0YDQuNC70L7QttC10L3QuNC1INGB0LzQvtC20LXRgiDQutC+0L3RgtGA0L7Qu9C40YDQvtCy0LDRgtGMINCy0LjQsdGA0L7RgdC40LPQvdCw0LvRiy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4i0KPQv9GA0LDQstC70LXQvdC40LUg0LLRgdC/0YvRiNC60L7QuSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4i0J/RgNC40LvQvtC20LXQvdC40LUg0YHQvNC+0LbQtdGCINC60L7QvdGC0YDQvtC70LjRgNC+0LLQsNGC0Ywg0LLRgdC/0YvRiNC60YMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4i0J7RgdGD0YnQtdGB0YLQstC70LXQvdC40LUg0YLQtdC70LXRhNC+0L3QvdGL0YUg0LLRi9C30L7QstC+0LIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4i0J/RgNC40LvQvtC20LXQvdC40LUg0YHQvNC+0LbQtdGCINCx0LXQtyDQstCw0YjQtdCz0L4g0YPRh9Cw0YHRgtC40Y8g0LfQstC+0L3QuNGC0Ywg0L3QsCDQu9GO0LHQvtC5INC90L7QvNC10YAg0YLQtdC70LXRhNC+0L3QsC4g0K3RgtC+INC90LUg0L7RgtC90L7RgdC40YLRgdGPINC6INC90L7QvNC10YDQsNC8INGN0LrRgdGC0YDQtdC90L3Ri9GFINGB0LvRg9C20LEuINCS0YDQtdC00L7QvdC+0YHQvdGL0LUg0L/RgNC+0LPRgNCw0LzQvNGLINGB0LzQvtCz0YPRgiDRgdC+0LLQtdGA0YjQsNGC0Ywg0LLRi9C30L7QstGLINCx0LXQtyDQstCw0YjQtdCz0L4g0YDQsNC30YDQtdGI0LXQvdC40Y8sINGH0YLQviDQvNC+0LbQtdGCINC/0YDQuNCy0LXRgdGC0Lgg0Log0L3QtdC/0YDQtdC00LLQuNC00LXQvdC90YvQvCDRgNCw0YHRhdC+0LTQsNC8LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiIG1zZ2lkPSIzNTc0OTQzODQ3MTgxNzkzOTE4Ij4i0YHQvtCy0LXRgNGI0LXQvdC40LUg0LfQstC+0L3QutC+0LIg0YEg0L/QvtC80L7RidGM0Y4g0YHQu9GD0LbQsdGLIElNUyI8L3N0cmluZz4KQEAgLTg2OCwxMCArODY3LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJjdXQiIG1zZ2lkPSIzMDkyNTY5NDA4NDM4NjI2MjYxIj4i0JLRi9GA0LXQt9Cw0YLRjCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4i0JrQvtC/0LjRgNC+0LLQsNGC0YwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiLQktGB0YLQsNCy0LjRgtGMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiLQktGB0YLQsNCy0LjRgtGMINC60LDQuiDQvtCx0YvRh9C90YvQuSDRgtC10LrRgdGCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiLQl9Cw0LzQtdC90LjRgtGMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+ItCj0LTQsNC70LjRgtGMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiLQmtC+0L/QuNGA0L7QstCw0YLRjCBVUkwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiLQktGL0LHRgNCw0YLRjCDRgtC10LrRgdGCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiLQntGC0LzQtdC90LjRgtGMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiLQn9C+0LLRgtC+0YDQuNGC0YwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4i0JLRi9Cx0L7RgCDRgtC10LrRgdGC0LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4i0JTQvtCx0LDQstC40YLRjCDQsiDRgdC70L7QstCw0YDRjCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4i0KPQtNCw0LvQuNGC0YwiPC9zdHJpbmc+CkBAIC0xMTIxLDYgKzExMjMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4i0KHQvNC10L3QuNGC0Ywg0L7QsdC+0LgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiLQodC70YPQttCx0LAg0L/RgNC+0YHQvNC+0YLRgNCwINGD0LLQtdC00L7QvNC70LXQvdC40LkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+ItCf0L7RgdGC0LDQstGJ0LjQuiDRg9GB0LvQvtCy0LjQuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9hc3Npc3RhbnRfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjkwOTQ1NjA1NTU2OTEwMjk1MiI+ItCQ0YHRgdC40YHRgtC10L3RgiDRg9Cy0LXQtNC+0LzQu9C10L3QuNC5Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiLQodC10YLRjCBWUE4g0LDQutGC0LjQstC90LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiLQodC10YLRjCBWUE4g0LDQutGC0LjQstC40YDQvtCy0LDQvdCwINC/0YDQuNC70L7QttC10L3QuNC10LwgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4i0J3QsNC20LzQuNGC0LUsINGH0YLQvtCx0Ysg0L7RgtC60YDRi9GC0Ywg0L3QsNGB0YLRgNC+0LnQutC4LiI8L3N0cmluZz4KQEAgLTE0NTgsMTIgKzE0NjEsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV91cGRhdGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijg4NTY2MzEzMjI0NDAxODcwNzEiPiLQntCx0L3QvtCy0LvQtdC90L4g0LDQtNC80LjQvdC40YHRgtGA0LDRgtC+0YDQvtC8Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiLQo9C00LDQu9C10L3QviDQsNC00LzQuNC90LjRgdGC0YDQsNGC0L7RgNC+0LwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTk2MDQzMTEyMzgxNjI1MzAzNCI+ItCn0YLQvtCx0Ysg0L/RgNC+0LTQu9C40YLRjCDQstGA0LXQvNGPINGA0LDQsdC+0YLRiyDRg9GB0YLRgNC+0LnRgdGC0LLQsCDQvtGCINCx0LDRgtCw0YDQtdC4LCDQsiDRgNC10LbQuNC80LUg0Y3QvdC10YDQs9C+0YHQsdC10YDQtdC20LXQvdC40Y8g0YHQvdC40LbQsNC10YLRgdGPINC/0YDQvtC40LfQstC+0LTQuNGC0LXQu9GM0L3QvtGB0YLRjCwg0LAg0YLQsNC60LbQtSDQvtCz0YDQsNC90LjRh9C40LLQsNC10YLRgdGPINC40YHQv9C+0LvRjNC30L7QstCw0L3QuNC1INCy0LjQsdGA0LDRhtC40LgsINCz0LXQvtC70L7QutCw0YbQuNC4INC4INGE0L7QvdC+0LLQvtC5INC/0LXRgNC10LTQsNGH0Lgg0LTQsNC90L3Ri9GFLiDQlNCw0L3QvdGL0LUsINGC0YDQtdCx0YPRjtGJ0LjQtSDRgdC40L3RhdGA0L7QvdC40LfQsNGG0LjQuCwg0LzQvtCz0YPRgiDQvtCx0L3QvtCy0LvRj9GC0YzRgdGPINGC0L7Qu9GM0LrQviDQutC+0LPQtNCwINCy0Ysg0L7RgtC60YDQvtC10YLQtSDQv9GA0LjQu9C+0LbQtdC90LjQtS5cblxu0KDQtdC20LjQvCDRjdC90LXRgNCz0L7RgdCx0LXRgNC10LbQtdC90LjRjyDQsNCy0YLQvtC80LDRgtC40YfQtdGB0LrQuCDQvtGC0LrQu9GO0YfQsNC10YLRgdGPINCy0L4g0LLRgNC10LzRjyDQt9Cw0YDRj9C00LrQuCDRg9GB0YLRgNC+0LnRgdGC0LLQsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV90aXRsZSIgbXNnaWQ9Ijc0OTM5ODk3MjI2MTAwMDg3MDAiPiLQktCw0LbQvdC+0YHRgtGMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiLQl9Cw0LHQu9C+0LrQuNGA0L7QstCw0L3Qvjog0L3QtSDQv9C+0LrQsNC30YvQstCw0YLRjCDRjdGC0Lgg0YPQstC10LTQvtC80LvQtdC90LjRjyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjY0NDc2NDA0NDk5MTg0MjcxODciPiLQndC40LfQutCw0Y86INC/0L7QutCw0LfRi9Cy0LDRgtGMINCx0LXQtyDQt9Cy0YPQutCwINCyINC60L7QvdGG0LUg0YHQv9C40YHQutCwINGD0LLQtdC00L7QvNC70LXQvdC40LkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNzk5MTE1NzY5NzYwOTU3NTI3MSI+ItCe0LHRi9GH0L3QsNGPOiDQv9C+0LrQsNC30YvQstCw0YLRjCDRg9Cy0LXQtNC+0LzQu9C10L3QuNGPINCx0LXQtyDQt9Cy0YPQutCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiLQktGL0YHQvtC60LDRjzog0L/QvtC60LDQt9GL0LLQsNGC0Ywg0YHQviDQt9Cy0YPQutC+0Lwg0LIg0L3QsNGH0LDQu9C1INGB0L/QuNGB0LrQsCDRg9Cy0LXQtNC+0LzQu9C10L3QuNC5Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+ItCh0YDQvtGH0L3Qvjog0L/QvtC60LDQt9GL0LLQsNGC0Ywg0YHQviDQt9Cy0YPQutC+0LLRi9C8INGB0LjQs9C90LDQu9C+0Lwg0L/QvtCy0LXRgNGFINCy0YHQtdGFINC+0LrQvtC9Ijwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+JTEkZCDQvNC40L3Rg9GC0LAgKNC00L4gPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9ImZldyI+JTEkZCDQvNC40L3Rg9GC0YsgKNC00L4gPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgpAQCAtMTU0Nyw2ICsxNTQ0LDYgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+0JLRi9Cx0YDQsNC90L46IDx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRkPC94bGlmZjpnPjwvaXRlbT4KICAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X25vdGlmaWNhdGlvbl90b3BpY19sYWJlbCIgbXNnaWQ9IjIyNzU4NjE0NTc5MTg3MDgyOSI+ItCU0YDRg9Cz0L7QtSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV90b3BpYyIgbXNnaWQ9IjM1NzIyODA0Mzk4ODAwMjMyMzMiPiLQktGLINC+0L/RgNC10LTQtdC70LjQu9C4INCy0LDQttC90L7RgdGC0Ywg0Y3RgtC40YUg0YPQstC10LTQvtC80LvQtdC90LjQuS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fcGVyc29uIiBtc2dpZD0iOTE2MDEzMzU5NzI2MjkzODI5NiI+ItCt0YLQuCDQu9GO0LTQuCDQtNC70Y8g0LLQsNGBINCy0LDQttC90YsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fdG9waWMiIG1zZ2lkPSIzNTcyMjgwNDM5ODgwMDIzMjMzIj4i0JLRiyDQvtC/0YDQtdC00LXQu9GP0LXRgtC1INCy0LDQttC90L7RgdGC0Ywg0Y3RgtC40YUg0YPQstC10LTQvtC80LvQtdC90LjQuS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fcGVyc29uIiBtc2dpZD0iOTE2MDEzMzU5NzI2MjkzODI5NiI+ItCS0LDQttC90L7QtSAo0LvRjtC00LgpIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXNpLXJMSy9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtc2ktckxLL3N0cmluZ3MueG1sCmluZGV4IDBmY2I2YjUxLi41MzY0Yzk4IDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXNpLXJMSy9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXNpLXJMSy9zdHJpbmdzLnhtbApAQCAtMjIzLDYgKzIyMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2tkb3duIiBtc2dpZD0iODc1MTU0MjUxNDcyNDMzMjg3MyI+IuC2r+C3kOC2seC3iiDgtoXgtpzgt5Tgt4Xgt5Qg4Lav4La44Lax4LeK4LaxIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiI5OTkrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2NoaWxkcmVuX2NvdW50X2JyYWNrZXRlZCIgbXNnaWQ9IjE3Njk0MjU0NzMxNjgzNDc4MzkiPiIoPHhsaWZmOmcgaWQ9Ik5PVElGSUNBVElPTkNPVU5UIj4lZDwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IuC3g+C3kOC2n+C3gOC3lOC2q+C3lCDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgtq3gt48iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiLgtobgtrvgtprgt4rigI3gt4Lgt5Lgtq0g4LaG4Laa4LeP4La74La6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4iQW5kcm9pZCDgtrTgtq/gt4rgtrDgtq3gt5LgtroiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+IuC2tOC3nuC2r+C3iuC2nOC2veC3kuC2miI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IuC2muC3kOC2uOC2u+C3j+C3gOC3meC2seC3iiDgtrTgt5LgtrHgt4rgtq3gt5bgtrsg4Lac4LeQ4Lax4LeT4La44LanIOC3g+C3hCDgt4Dgt5Pgtqngt5Lgtrrgt50g4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtrjgt5ngtrgg4LaF4LeA4LeD4La74La6IOC2uOC2n+C3kuC2seC3iiDgtpTgtrbgtpzgt5og4LaF4Lax4LeU4Lav4LeQ4Lax4LeU4La44Laa4LeS4Lax4LeKIOC2reC3nOC2u+C3gCDgtpXgtrHgt5Hgtrgg4LeA4Lea4La94LeP4LeA4Laa4Lav4LeTIOC2muC3kOC2uOC2u+C3j+C3gCDgtrfgt4/gt4Dgt5Lgtq3gt48g4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiLgtprgtrjgt4rgtrTgtrHgtrog4La04LeP4La94Lax4La6IOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4i4Laa4La44LeK4La04Laa4La6IOC2tOC3j+C2veC2seC2uuC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4i4LeD4LeQ4Lar4LeZ4LeF4LeSIOC2huC2veC3neC2muC2uiDgtrTgt4/gtr3gtrHgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiLgt4Pgt5Dgtqvgt5ngt4Xgt5Lgtrog4La04LeP4La94Lax4La64LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+IuC2r+C3lOC2u+C2muC2ruC2sSDgtoXgtoLgtpog4LeA4LeZ4LatIOC2jeC2ouC3lOC3gOC2uCDgtoXgtrjgtq3gtrHgt4rgtrEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4i4LaU4La24Lac4LeaIOC2uOC3kOC2r+C3kuC3hOC2reC3iiDgt4Dgt5Pgtrjgtprgt4og4Lax4Lec4La44LeQ4Lat4LeS4LeAIOC2r+C3lOC2u+C2muC2ruC2sSDgtoXgtoLgtpog4LaH4La44Lat4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtrjgt5ngt4Tgt5Ig4La04LeK4oCN4La74Lat4LeS4LaR4La94La6IOC3gOC2seC3iuC2seC3miDgtoXgtrHgtrTgt5rgtprgt4rgt4Lgt5Lgtq0g4LaF4La64Laa4LeS4La74LeT4La44LeKIOC3hOC3nSDgtofgtrjgtq3gt5Tgtrjgt4og4LaH4Lat4LeS4LeA4LeT4La44La64LeSLiDgtrjgt5ngtrrgtrHgt4og4LeE4Lav4LeS4LeD4LeSIOC2heC2guC2miDgt4Dgtr3gtqcg4LaH4La44Lat4LeU4La44LeKIOC2nOC3kOC2seC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2seC3nOC2r+C3meC2sSDgtrbgt4Dgtqcg4LeD4Lan4LeE4Lax4LeKIOC2muC2u+C2nOC2seC3iuC2sS4g4LaU4La24Lac4LeaIOC2heC2seC3lOC2r+C3kOC2seC3lOC2uOC2muC3iiDgtrHgt5zgtrjgt5Dgtq3gt5Lgt4Ag4LaH4La44Lat4LeU4La44LeKIOC2nOC3kOC2seC3k+C2uOC3meC2seC3iiDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La64LeZ4Lav4LeU4La44LeKIOC2lOC2tuC2nOC3miDgtrjgt5Tgtq/gtr3gt4og4Lax4LeS4Laa4La74LeU4Lar4LeaIOC3gOC3kOC2uiDgtprgtrvgtrrgt5IuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiJJTVMg4LaH4La44Lat4LeU4La44LeKIOC3g+C3muC3gOC3j+C3gOC2pyDgtrTgt5Lgt4Dgt5Lgt4Pgt5ngtrHgt4rgtrEiPC9zdHJpbmc+CkBAIC04NjAsMTAgKzg1OSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+IuC2muC2tOC2seC3iuC2sSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4i4La04LeS4Lan4La04Lat4LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+IuC2heC2veC3gOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4i4LeD4La74La9IOC2tOC3meC3hSDgtr3gt5ngt4Mg4LaF4La94LeA4Lax4LeK4LaxIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiLgtrTgt4rigI3gtrvgtq3gt5Lgt4Pgt4rgtq7gt4/gtrTgtrHgtrog4Laa4La74Lax4LeK4LaxLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+IuC2uOC2muC2seC3iuC2sSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4iVVJMIOC2tOC3kuC2p+C2tOC2reC3iiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiLgtrTgt5ngt4Ug4Lat4Led4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiLgtoXgt4Pgt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiLgtrrgt4Xgt5Ig4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGV4dFNlbGVjdGlvbkNBQlRpdGxlIiBtc2dpZD0iNTIzNjg1MDM5NDM3MDgyMDM1NyI+IuC2tOC3meC3hSDgtq3gt5rgtrvgt5PgtrgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4i4LeB4La24LeK4LavIOC2muC3neC3guC2uuC2pyDgtpHgtprgtq3gt5Qg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiLgtrjgtprgtrHgt4rgtrEiPC9zdHJpbmc+CkBAIC0xMTA5LDYgKzExMTEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4i4La24LeS4Lat4LeU4La04LatIOC3gOC3meC2seC3g+C3iiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiLgtq/gt5DgtrHgt5Tgtrjgt4rgtq/gt5Pgtrjgt4og4LaF4LeD4Lax4LeK4Lax4LePIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiLgtq3gtq3gt4rgtq3gt4rgt4Dgtrog4LeD4La04La64Lax4LeK4Lax4LePIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2Fzc2lzdGFudF9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iOTA5NDU2MDU1NTY5MTAyOTUyIj4i4Lav4LeQ4Lax4LeU4La44LeK4Lav4LeT4La44LeKIOC3g+C3hOC3j+C2uuC2miI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iVlBOIOC2muC3iuKAjeC2u+C3kuC2uuC3j+C2reC3iuC2uOC2muC2uuC3kiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDgtrjgtp/gt5LgtrHgt4ogVlBOIOC3g+C2muC3iuKAjeC2u+C3k+C2uiDgtprgtrvgtrEg4La94Lav4LeSIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4i4Lai4LeP4La94La6IOC2muC3heC2uOC2seC3j+C2muC2u+C2q+C2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LeD4LeK4La04La74LeK4LeBIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CkBAIC0xNDQyLDEyICsxNDQ1LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4i4LaU4La24Lac4LeaIOC2tOC2u+C3kuC2tOC3j+C2veC2miDgt4Dgt5Lgt4Pgt5LgtrHgt4og4La64LeP4LeA4Lat4LeK4Laa4LeP4La94LeT4LaxIOC2muC2u+C2sSDgtr3gtq/gt5MiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX2RlbGV0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iNzY1MDU3NzM4NzQ5MzEwMTM1MyI+IuC2lOC2tuC2nOC3miDgtrTgtrvgt5LgtrTgt4/gtr3gtpog4LeA4LeS4LeD4LeS4Lax4LeKIOC2uOC2muC2sSDgtr3gtq8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTk2MDQzMTEyMzgxNjI1MzAzNCI+IuC2tuC3kOC2p+C2u+C3kiDgtobgtrrgt5Qg4Laa4LeP4La94La6IOC3gOC3kOC2qeC3kuC2r+C3kuC2uuC3lOC2q+C3lCDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaL4Lav4LeA4LeUIOC2muC3kuC2u+C3k+C2uOC2pywg4La24LeQ4Lan4La74LeSIOC3g+C3lOC2u+C3kOC2muC3lOC2uCDgtpTgtrbgt5og4LaL4La04LeP4LaC4Lac4La64LeaIOC2muC3iuKAjeC2u+C3kuC2uuC3j+C2muC3j+C2u+C3k+C2reC3iuC3gOC2uiDgtoXgtqngt5TgtprgtrvgtrEg4LaF4Lat4La7IOC2muC2uOC3iuC2tOC2seC2uiwg4La04LeS4LeE4LeS4Lan4LeT4La44LeKIOC3g+C3muC3gOC3jywg4LeD4LeEIOC2tuC3nOC3hOC3neC2uOC2uuC2muC3iiDgtrTgt4Pgt5Tgtrbgt5Lgtrjgt4og4Lav4Lat4LeK4LatIOC3g+C3k+C2uOC3jyDgtprgtrvgtrrgt5IuIOC2lOC2tiDgtpLgt4Dgt48g4LeA4LeS4LeA4LeY4LatIOC2seC3nOC2muC2u+C2seC3iuC2seC3miDgtrHgtrjgt4og4La44LeS4LeDIOC2iuC2uOC3muC2veC3iiwg4La04Lar4LeS4LeA4LeS4Lap4Laa4La74Lar4La6LCDgt4Pgt4Qg4LeD4La44La44LeU4LeE4LeU4La74LeK4LatIOC2muC3kuC2u+C3k+C2uCDgtrjgtq0g4La74Laz4LePIOC2tOC3gOC2reC3kuC2sSDgt4Dgt5ngtrHgtq3gt4og4La64LeZ4Lav4LeU4La44LeKIOC2uuC3j+C3gOC2reC3iuC2muC3j+C2veC3k+C2sSDgtrHgt5zgt4Dgt5Lgtrog4LeE4LeQ4Laa4LeS4La6LlxuXG7gtpTgtrbgt5og4LaL4La04LeP4LaC4Lac4La6IOC2huC2u+C3neC2tOC2q+C2uiDgt4DgtrEg4LeA4LeS4LanIOC2tuC3kOC2p+C2u+C3kiDgt4Pgt5Tgtrvgt5Dgtprgt5Tgtrgg4LeD4LeK4LeA4La64LaC4Laa4LeK4oCN4La74LeS4La64LeAIOC2heC2muC3iuKAjeC2u+C3kuC2uiDgt4Dgt5ouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfdGl0bGUiIG1zZ2lkPSI3NDkzOTg5NzIyNjEwMDA4NzAwIj4i4LeA4LeQ4Lav4Lac4Lat4LeK4Laa4La4Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiLgtoXgt4Dgt4Tgt5Lgtrsg4Laa4LeFOiDgtrjgt5ngtrgg4Lav4LeQ4Lax4LeU4La44LeK4Lav4LeT4La44LeKIOC2muC3kuC3g+C3kuC2r+C3jyDgtrHgt5zgtrTgt5ngtrHgt4rgt4DgtrHgt4rgtrEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4i4LaF4Lap4LeUOiDgtq/gt5DgtrHgt5Tgtrjgt4rgtq/gt5Pgtrjgt4og4La94LeQ4La64LeS4LeD4LeK4Lat4LeU4LeA4LeZ4LeE4LeSIOC2tOC3hOC3heC3kuC2seC3iuC2uCDgtrHgt5Lgt4Hgt4rgt4Hgtrbgt4rgtq/gt4Ag4La04LeZ4Lax4LeK4LeA4Lax4LeK4LaxIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiLgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtro6IOC2seC3kuC3geC3iuC3geC2tuC3iuC2r+C3gCDgtrjgt5ngtrgg4Lav4LeQ4Lax4LeU4La44LeK4Lav4LeT4La44LeKIOC2tOC3meC2seC3iuC3gOC2seC3iuC2sSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMTUyMjM4NjM3NzM3MjE1NjU0Ij4i4LeA4LeQ4Lap4LeSOiDgtq/gt5DgtrHgt5Tgtrjgt4rgtq/gt5Pgtrjgt4og4La94LeQ4La64LeS4LeD4LeK4Lat4LeU4LeA4LeZ4LeE4LeSIOC2ieC3hOC3heC3kuC2seC3iuC2uCDgtrTgt5ngtrHgt4rgt4DgtrHgt4rgtrEg4LeD4LeEIOC3geC2tuC3iuC2ryDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSIxMTUzNjkzMDgwNDY3OTA0NDc0Ij4i4LeE4Lav4LeS4LeD4LeSOiDgtq3gt5Lgtrvgtrrgtqcg4La04LeQ4La44LeS4LarIOC3geC2tuC3iuC2ryDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0iemVuX21vZGVfZHVyYXRpb25fbWludXRlc19zdW1tYXJ5IiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNDM2Nzg3NzQwODA3MjAwMDg0OCI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj7gtrjgt5LgtrHgt5Lgtq3gt4rgtq3gt5QgJTEkZCDgtprgt4og4LeD4Laz4LeE4LePICg8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPiDgtq3gt5ngtprgt4opPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj7gtrjgt5LgtrHgt5Lgtq3gt4rgtq3gt5QgJTEkZCDgtprgt4og4LeD4Laz4LeE4LePICg8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPiDgtq3gt5ngtprgt4opPC9pdGVtPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1zay9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtc2svc3RyaW5ncy54bWwKaW5kZXggZDI2ZGNjNi4uOTBjY2Q1NCAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1zay9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXNrL3N0cmluZ3MueG1sCkBAIC0yMjUsNiArMjI1LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9ja2Rvd24iIG1zZ2lkPSI4NzUxNTQyNTE0NzI0MzMyODczIj4iVXphbWtuw7rFpSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJTa3J5dMO9IG9ic2FoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4iTsO6ZHpvdsO9IHJlxb5pbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+IlN5c3TDqW0gQW5kcm9pZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4iT3NvYm7DqSI8L3N0cmluZz4KQEAgLTM1NSw4ICszNTYsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IlVtb8W+xYh1amUgYXBsaWvDoWNpaSBmb3RvZ3JhZm92YcWlIGEgbmFocsOhdmHFpSB2aWRlw6EgcG9tb2NvdSBmb3RvYXBhcsOhdHUuIFRvdG8gcG92b2xlbmllIHVtb8W+xYh1amUgYXBsaWvDoWNpaSBwb3XFvsOtdmHFpSBmb3RvYXBhcsOhdCBrZWR5a2/EvnZlayBhIGJleiB2w6HFoWhvIHBvdHZyZGVuaWEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl92aWJyYXRlIiBtc2dpZD0iNzY5NjQyNzAyNjA1NzcwNTgzNCI+Im92bMOhZGHFpSB2aWJyb3ZhbmllIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiJVbW/FvsWIdWplIGFwbGlrw6FjaWkgb3Zsw6FkYcWlIHZpYnLDoWNpZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4ib3Zsw6FkYcWlIGtvbnRyb2xrdSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4iVW1vxb7FiHVqZSBhcGxpa8OhY2lpIG92bMOhZGHFpSBzdmV0bG8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4icHJpYW1vIHZvbGHFpSBuYSB0ZWxlZsOzbm5lIMSNw61zbGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4iVW1vxb7FiHVqZSBhcGxpa8OhY2lpIHZvbGHFpSB0ZWxlZsOzbm5lIMSNw61zbGEgYmV6IHbDocWhaG8gesOhc2FodS4gViBkw7RzbGVka3UgdG9obyBzYSBtw7TFvnUgw7rEjXRvdmHFpSBuZW/EjWFrw6F2YW7DqSBwb3BsYXRreSBhbGVibyBzYSBtw7TFvnUgdXNrdXRvxI1uacWlIG5lb8SNYWvDoXZhbsOpIGhvdm9yeS4gVG90byBwb3ZvbGVuaWUgbmV1bW/FvsWIdWplIGFwbGlrw6FjaWkgdm9sYcWlIG5hIMSNw61zbGEgdGllc8WIb3bDqWhvIHZvbGFuaWEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiJwcsOtc3R1cCBrIHNsdcW+YmUgdm9sYW5pYSBJTVMiPC9zdHJpbmc+CkBAIC04NjgsMTAgKzg2NywxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+IlZ5c3RyaWhuw7rFpSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4iS29ww61yb3ZhxaUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiJQcmlsZXBpxaUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXN0ZV9hc19wbGFpbl90ZXh0IiBtc2dpZD0iNTQyNzc5Mjc0MTkwODAxMDY3NSI+IlByaWxlcGnFpSBha28gb2J5xI1ham7DvSB0ZXh0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiJOYWhyYWRpxaXigKIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4iT2RzdHLDoW5pxaUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IlNrb3DDrXJvdmHFpSB3ZWJvdsO6IGFkcmVzdSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+IlZ5YnJhxaUgdGV4dCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVuZG8iIG1zZ2lkPSI3OTA1Nzg4NTAyNDkxNzQyMzI4Ij4iU3DDpMWlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiJabm92YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiJWw71iZXIgdGV4dHUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4iUHJpZGHFpSBkbyBzbG92bsOta2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+Ik9kc3Ryw6FuacWlIjwvc3RyaW5nPgpAQCAtMTEyMSw2ICsxMTIzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+IlptZW5pxaUgdGFwZXR1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4iQXBsaWvDoWNpYSBuYSBwb8SNw7p2YW5pZSB1cG96b3JuZW7DrSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbmRpdGlvbl9wcm92aWRlcl9zZXJ2aWNlX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMzIxMzQzMzUyOTA2NTI0NTY0Ij4iUG9za3l0b3ZhdGXEviBwb2RtaWVua3kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiJBc2lzdGVudCB1cG96b3JuZW7DrSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iU2llxaUgVlBOIGplIGFrdGl2b3ZhbsOhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4iQXBsaWvDoWNpdSA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4gYWt0aXZvdmFsYSBzaWXFpSBWUE4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiJEb3R5a29tIG3DtMW+ZXRlIHNwcmF2b3ZhxaUgc2llxaUuIjwvc3RyaW5nPgpAQCAtMTQ1OCwxMiArMTQ2MSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+IkFrdHVhbGl6b3ZhbsOpIHNwcsOhdmNvbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4iT2RzdHLDoW5lbsO9IHNwcsOhdmNvbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4iUyBjaWXEvm9tIHByZWTEusW+acWlIHbDvWRyxb4gYmF0w6lyaWUgem7DrcW+aSDFoWV0cmnEjSBiYXTDqXJpZSB2w71rb25ub3PFpSB6YXJpYWRlbmlhIGHCoG9ibWVkesOtIHZpYnLDoWNpZSwgc2x1xb5ieSB1csSNb3ZhbmlhIHBvbG9oeSBhwqBkw6F0b3bDqSBwcmVub3N5IG5hIHBvemFkw60uIFBvxaF0YSwgxI1ldCBhIMSPYWzFoWllIGFwbGlrw6FjaWUsIGt0b3LDqSBzYSBzcG9saWVoYWrDuiBuYSBzeW5jaHJvbml6w6FjaXUsIHNhIG1vxb5ubyBuZWJ1ZMO6IGFrdHVhbGl6b3ZhxaUsIGRva2lhxL4gaWNoIG5lb3R2b3LDrXRlLlxuXG5QcmkgbmFiw61qYW7DrSB6YXJpYWRlbmlhIHNhIMWhZXRyacSNIGJhdMOpcmllIGF1dG9tYXRpY2t5IHZ5cG5lLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX3RpdGxlIiBtc2dpZD0iNzQ5Mzk4OTcyMjYxMDAwODcwMCI+IkTDtGxlxb5pdG9zxaUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iNzExODgyNjkwMDc2NzA0NzEyNSI+IkJsb2tvdmFuw6k6IFRpZXRvIHVwb3pvcm5lbmlhIG5pa2R5IG5lem9icmF6b3ZhxaUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4iTsOtemtlOiBab2JyYXpvdmHFpSB2wqBkb2xuZWogxI1hc3RpIHpvem5hbXUgdXBvem9ybmVuw60gYmV6IHp2dWtvdsOpaG8gc2lnbsOhbHUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNzk5MTE1NzY5NzYwOTU3NTI3MSI+Ik5vcm3DoWxuZTogVGlldG8gdXBvem9ybmVuaWEgem9icmF6b3ZhxaUgYmV6IHp2dWtvdsOpaG8gc2lnbsOhbHUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzE1MjIzODYzNzczNzIxNTY1NCI+IlZ5c29rw6k6IFpvYnJhem92YcWlIHbCoGhvcm5laiDEjWFzdGkgem96bmFtdSB1cG96b3JuZW7DrSBzbyB6dnVrb3bDvW0gc2lnbsOhbG9tIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+Ik5lb2RrbGFkbsOpOiBab2JyYXppxaUgY2V6IG9icmF6b3ZrdSBzbyB6dnVrb3bDvW0gc2lnbsOhbG9tIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9ImZldyI+JTEkZCBtaW7DunR5IChkbyA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ibWFueSI+JTEkZCBtaW7DunR5IChkbyA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXNsL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1zbC9zdHJpbmdzLnhtbAppbmRleCBkODQwZWNkLi40ZTliMWM1IDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXNsL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtc2wvc3RyaW5ncy54bWwKQEAgLTIyNSw2ICsyMjUsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiJaYWtsZW5pIHpkYWoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+Ijk5OSArIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2NoaWxkcmVuX2NvdW50X2JyYWNrZXRlZCIgbXNnaWQ9IjE3Njk0MjU0NzMxNjgzNDc4MzkiPiIoPHhsaWZmOmcgaWQ9Ik5PVElGSUNBVElPTkNPVU5UIj4lZDwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IlZzZWJpbmEgamUgc2tyaXRhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4iVmFybmkgbmHEjWluIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4iU2lzdGVtIEFuZHJvaWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+Ik9zZWJubyI8L3N0cmluZz4KQEAgLTM1NSw4ICszNTYsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IkFwbGlrYWNpamkgb21vZ2/EjWEgZm90b2dyYWZpcmFuamUgaW4gc25lbWFuamUgdmlkZW9wb3NuZXRrb3YgcyBrYW1lcm8uIFMgdGVtIGRvdm9samVuamVtIGxhaGtvIGFwbGlrYWNpamEga2FkYXIga29saSB1cG9yYWJsamEga2FtZXJvIGJyZXogdmHFoWUgcG90cmRpdHZlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiJuYWR6b3IgdmlicmlyYW5qYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4iQXBsaWthY2lqaSBvbW9nb8SNYSBuYWR6b3IgdmlicmlyYW5qYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4ibmFkem9yIHN2ZXRpbGtlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiJBcGxpa2FjaWppIG9tb2dvxI1hIG5hZHpvciBzdmV0aWxrZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiJuZXBvc3JlZG5vIGtsaWNhbmplIHRlbGVmb25za2loIMWhdGV2aWxrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+IkFwbGlrYWNpamkgb21vZ2/EjWEga2xpY2FuamUgdGVsZWZvbnNraWggxaF0ZXZpbGsgYnJleiB2YcWhZWdhIHBvc3JlZG92YW5qYS4gWmFyYWRpIHRlZ2EgbGFoa28gcHJpZGUgZG8gbmVwcmnEjWFrb3ZhbmloIHN0cm/FoWtvdiBhbGkga2xpY2V2LiBBcGxpa2FjaWppIHRvIG5lIGRvdm9sanVqZSBvcHJhdmxqYW5qYSBrbGljZXYgdiBzaWxpLiBabG9uYW1lcm5lIGFwbGlrYWNpamUgbGFoa28ga2xpxI1lam8gYnJleiB2YcWhZSBwb3RyZGl0dmUsIGthciB2YXMgbGFoa28gZHJhZ28gc3RhbmUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiJkb3N0b3AgZG8gc3Rvcml0dmUgemEga2xpY2FuamUgSU1TIjwvc3RyaW5nPgpAQCAtODY4LDEwICs4NjcsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiJJenJlxb5pIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weSIgbXNnaWQ9IjI2ODE5NDYyMjk1MzM1MTE5ODciPiJLb3BpcmFqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzdGUiIG1zZ2lkPSI1NjI5ODgwODM2ODA1MDM2NDMzIj4iUHJpbGVwaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4iUHJpbGVwaSBrb3QgbmF2YWRubyBiZXNlZGlsbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4iWmFtZW5qYWog4oCiIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+Ikl6YnJpxaFpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiJLb3BpcmFqIFVSTCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+Ikl6YmlyYSBiZXNlZGlsYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVuZG8iIG1zZ2lkPSI3OTA1Nzg4NTAyNDkxNzQyMzI4Ij4iUmF6dmVsamF2aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlZG8iIG1zZ2lkPSI3NzU5NDY0ODc2NTY2ODAzODg4Ij4iVXZlbGphdmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4iSXpicmFubyBiZXNlZGlsbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiJEb2RhaiB2IHNsb3ZhciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4iSXpicmnFoWkiPC9zdHJpbmc+CkBAIC0xMTIxLDYgKzExMjMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4iU3ByZW1pbmphbmplIG96YWRqYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+IlBvc2x1xaFhbGVjIG9idmVzdGlsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiJQb251ZG5payBwb2dvamV2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2Fzc2lzdGFudF9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iOTA5NDU2MDU1NTY5MTAyOTUyIj4iUG9tb8SNbmlrIHphIG9idmVzdGlsYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iVlBOIGFrdGl2aXJhbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+IlZQTiBqZSBha3RpdmlyYWxhIGFwbGlrYWNpamEgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4iRG90YWtuaXRlIHNlLCDEjWUgxb5lbGl0ZSB1cHJhdmxqYXRpIG9tcmXFvmplLiI8L3N0cmluZz4KQEAgLTE0NTgsMTIgKzE0NjEsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV91cGRhdGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijg4NTY2MzEzMjI0NDAxODcwNzEiPiJQb3NvZG9iaWwgc2tyYm5payI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4iSXpicmlzYWwgc2tyYm5payI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4iVmFyxI1ldmFuamUgeiBlbmVyZ2lqbyBha3VtdWxhdG9yamEgcG9kYWxqxaFhIMSNYXMgbmplZ292ZWdhIGRlbG92YW5qYSB0YWtvLCBkYSB6bWFuasWhYSB6bW9nbGppdm9zdCBkZWxvdmFuamEgbmFwcmF2ZSBpbiBvbWVqaSB2aWJyaXJhbmplLCBsb2thY2lqc2tlIHN0b3JpdHZlIHRlciBwcmVub3MgdmXEjWluZSBwb2RhdGtvdiB2IG96YWRqdS4gQXBsaWthY2lqZSB6YSBlLXBvxaF0bywgc3Bvcm/EjWFuamUgaW4gZHJ1Z28sIGtpIHVwb3JhYmxqYWpvIHNpbmhyb25pemlyYW5qZSwgc2UgbW9yZGEgbmUgcG9zb2RhYmxqYWpvLCByYXplbiDEjWUgamloIG9kcHJldGUuXG5cblZhcsSNZXZhbmplIHogZW5lcmdpam8gYWt1bXVsYXRvcmphIHNlIHNhbW9kZWpubyBpemtsb3BpIG1lZCBwb2xuamVuamVtIGFrdW11bGF0b3JqYSBuYXByYXZlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX3RpdGxlIiBtc2dpZD0iNzQ5Mzk4OTcyMjYxMDAwODcwMCI+IlBvbWVtYm5vc3QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iNzExODgyNjkwMDc2NzA0NzEyNSI+IkJsb2tpcmFubzogbmlrb2xpIG5lIHByaWthxb5pIHRlaCBvYnZlc3RpbCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjY0NDc2NDA0NDk5MTg0MjcxODciPiJNYW5qIHBvbWVtYm5vOiBwcmlrYcW+aSBuYSBkbnUgc2V6bmFtYSBvYnZlc3RpbCBicmV6IHp2b2thIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiJPYmnEjWFqbm86IHByaWthxb5pIHRhIG9idmVzdGlsYSBicmV6IHp2b2thIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiJQb21lbWJubzogcHJpa2HFvmkgbmEgdnJodSBzZXpuYW1hIG9idmVzdGlsIGluIHByZWR2YWphaiB6dm9rIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+Ik51am5vOiB6YSBoaXAgcG9rYcW+aSBwcmVkb2dsZWQgbmEgemFzbG9udSBpbiBwcmVkdmFqYWogenZvayI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPiVkIG1pbnV0byAoZG8gPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9InR3byI+JWQgbWludXRpIChkbyA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXNxLXJBTC9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtc3EtckFML3N0cmluZ3MueG1sCmluZGV4IDQzNjU3OTZjLi5iZTljNzA5IDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXNxLXJBTC9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXNxLXJBTC9zdHJpbmdzLnhtbApAQCAtMjIzLDYgKzIyMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2tkb3duIiBtc2dpZD0iODc1MTU0MjUxNDcyNDMzMjg3MyI+Ikt5w6cgdGFuaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJQw6tybWJhanRqZXQgamFuw6sgdMOrIGZzaGVodXJhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4iTW9kYWxpdGV0aSBpIHNpZ3VyaXPDqyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+IlNpc3RlbWkgXCJhbmRyb2lkXCIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+IlBlcnNvbmFsIjwvc3RyaW5nPgpAQCAtMzUzLDggKzM1NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4iTGVqb24gYXBsaWthY2lvbiB0w6sga3Jpam9qw6sgZm90b2dyYWZpIGRoZSB2aWRlbyBtZSBrYW1lcsOrbi4gS2pvIGxlamUgbXVuZMOrc29uIHDDq3Jkb3JpbWluIGUga2FtZXLDq3MgbsOrIMOnZG8ga29ow6sgcGEga29uZmlybWltaW4gdMOrbmQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl92aWJyYXRlIiBtc2dpZD0iNzY5NjQyNzAyNjA1NzcwNTgzNCI+ImtvbnRyb2xsbyBkcmlkaGplbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4iTGVqb24gYXBsaWthY2lvbmluIHTDqyBrb250cm9sbG9qw6sgZHJpZGjDq3Npbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4ia29udHJvbGxvIGVsZWt0cmlrdW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+Ikxlam9uIGFwbGlrYWNpb25pbiB0w6sga29udHJvbGxvasOrIGVsZWt0cmlrdW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4idGVsZWZvbm8gZHJlanRww6tyZHJlanQgbnVtcmF0IGUgdGVsZWZvbml0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+Ikxlam9uIGFwbGlrYWNpb25pbiB0w6sgdGVsZWZvbm9qw6sgbnVtcmEgcGEgbmTDq3JoeXJqZW4gdMOrbmRlLiBLam8gbXVuZCB0w6sgcmV6dWx0b2rDqyBuw6sgdGFyaWZhIG9zZSB0ZWxlZm9uYXRhIHTDqyBwYXByaXR1cmEuIEtpIHBhcmFzeXNoIHNlIGtqbyBudWsgZSBsZWpvbiBhcGxpa2FjaW9uaW4gdMOrIHRlbGVmb25vasOrIG51bXJhIHVyZ2plbmNlLiBBcGxpa2FjaW9uZSBrZXFkYXNow6tzZSBtdW5kIHTDqyB0w6sga3VzaHRvam7DqyBwYXJhIGR1a2Uga3J5ZXIgdGVsZWZvbmF0YSBwYSBrb25maXJtaW1pbiB0w6tuZC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ltc0NhbGxTZXJ2aWNlIiBtc2dpZD0iMzU3NDk0Mzg0NzE4MTc5MzkxOCI+InFhc2plIG7DqyBzaMOrcmJpbWluIGUgdGVsZWZvbmF0YXZlIElNUyI8L3N0cmluZz4KQEAgLTg1OCwxMCArODU3LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJjdXQiIG1zZ2lkPSIzMDkyNTY5NDA4NDM4NjI2MjYxIj4iUHJpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weSIgbXNnaWQ9IjI2ODE5NDYyMjk1MzM1MTE5ODciPiJLb3BqbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+Ik5naml0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiJOZ2ppdGUgc2kgdGVrc3QgdMOrIHRoamVzaHTDqyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4iWsOrdmVuZMOrc2/igKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4iRnNoaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4iS29wam8gVVJMLW7DqyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+IlDDq3J6Z2ppZGggdGVrc3RpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVuZG8iIG1zZ2lkPSI3OTA1Nzg4NTAyNDkxNzQyMzI4Ij4iWmhiw6tqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiJSaWLDq2oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4iUMOrcnpnamVkaGphIGUgdGVrc3RpdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiJTaHRvIG7DqyBmamFsb3IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+IkZzaGkiPC9zdHJpbmc+CkBAIC0xMTA3LDYgKzExMDksNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4iTmRyeXNobyBpbWF6aGluIGUgc2ZvbmRpdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+IkTDq2dqdWVzIG5qb2Z0aW1lc2giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+Ik9mcnVlcyBrdXNodGVzaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9hc3Npc3RhbnRfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjkwOTQ1NjA1NTU2OTEwMjk1MiI+IkFzaXN0ZW50aSBpIG5qb2Z0aW1ldmUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IlZQTi1qYSB1IGFrdGl2aXp1YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+IlZQTi1qYSDDq3NodMOrIGFrdGl2aXp1YXIgbmdhIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0IiBtc2dpZD0iMzAxMTMwNjYwNzEyNjQ1MDMyMiI+IlByZWsgcMOrciB0w6sgbWVuYXhodWFyIHJyamV0aW4uIjwvc3RyaW5nPgpAQCAtMTQ0MCwxMiArMTQ0Myw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+IlDDq3JkaXTDq3N1YXIgbmdhIGFkbWluaXN0cmF0b3JpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiJVIGZzaGkgbmdhIGFkbWluaXN0cmF0b3JpIHl0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiJQw6tyIHTDqyBww6tybWlyw6tzdWFyIGpldMOrZ2phdMOrc2luw6sgZSBiYXRlcmlzw6ssIG9wc2lvbmkgaSBrdXJzaW1pdCB0w6sgYmF0ZXJpc8OrIHVsIHJlbmRpbWVudGluIGUgcGFqaXNqZXMgdMOrbmRlIHNpIGRoZSBrdWZpem9uIGRyaWRoamV0IGRoZSBzaHVtaWPDq24gZSB0w6sgZGjDq25hdmUgbsOrIHNmb25kLiBNYWlsLWksIG1lc2F6aGV0IGRoZSBhcGxpa2FjaW9uZXQgZSB0amVyYSBxw6sgc2lua3Jvbml6b2hlbiBhdXRvbWF0aWtpc2h0IG11bmQgdMOrIG1vcyBww6tyZGl0w6tzb2hlbiBwYSBpIGhhcHVyLlxuXG5LdXJzaW1pIGkgYmF0ZXJpc8OrIMOnYWt0aXZpem9oZXQgYXV0b21hdGlraXNodCBrdXIgcGFqaXNqYSB2aWhldCBuw6sgbmdhcmtpbS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV90aXRsZSIgbXNnaWQ9Ijc0OTM5ODk3MjI2MTAwMDg3MDAiPiJSw6tuZMOrc2lhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiJUw6sgYmxsb2t1YXJhOiBNb3MgaSBzaGZhcSBhc25qw6toZXLDqyBrw6t0byBuam9mdGltZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjY0NDc2NDA0NDk5MTg0MjcxODciPiJUw6sgdWzDq3RhOiBTaGZhcWkgbsOrIGhlc2h0amUgbsOrIGZ1bmQgdMOrIGxpc3TDq3Mgc8OrIG5qb2Z0aW1ldmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNzk5MTE1NzY5NzYwOTU3NTI3MSI+Ik5vcm1hbGU6IFNoZmFxaSBrw6t0byBuam9mdGltZSBuw6sgaGVzaHRqZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMTUyMjM4NjM3NzM3MjE1NjU0Ij4iVMOrIGxhcnRhOiBTaGZhcWkgbsOrIGtyeWUgdMOrIGxpc3TDq3Mgc8OrIG5qb2Z0aW1ldmUgZGhlIGzDq3NobyB0aW5ndWxsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+IlVyZ2plbnRlOiBTaGZhcSBuasOrIHbDq3NodHJpbSB0w6sgc2hwZWp0w6sgbsOrIGVrcmFuIGRoZSBsw6tzaG8gdGluZ3VsbCI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+UMOrciAlMSRkIG1pbnV0YSAoZGVyaSBuw6sgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+UMOrciBuasOrIG1pbnV0w6sgKGRlcmkgbsOrIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzAiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtc3Ivc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXNyL3N0cmluZ3MueG1sCmluZGV4IDRlMTk1Y2MuLmEzNjE4YWIgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtc3Ivc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1zci9zdHJpbmdzLnhtbApAQCAtMjI0LDYgKzIyNCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2tkb3duIiBtc2dpZD0iODc1MTU0MjUxNDcyNDMzMjg3MyI+ItCX0LDQutGZ0YPRh9Cw0Zgg0L7QtNC80LDRhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLQodCw0LTRgNC20LDRmCDRmNC1INGB0LDQutGA0LjQstC10L0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiLQkdC10LfQsdC10LTQvdC4INGA0LXQttC40LwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiJBbmRyb2lkINGB0LjRgdGC0LXQvCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4i0JvQuNGH0L3QviI8L3N0cmluZz4KQEAgLTM1NCw4ICszNTUsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+ItCU0L7Qt9Cy0L7RmdCw0LLQsCDQsNC/0LvQuNC60LDRhtC40ZjQuCDQtNCwINGB0L3QuNC80LAg0YHQu9C40LrQtSDQuCDQstC40LTQtdC+INGB0L3QuNC80LrQtSDQutCw0LzQtdGA0L7QvC4g0J7QstCwINC00L7Qt9Cy0L7Qu9CwINC+0LzQvtCz0YPRm9Cw0LLQsCDQsNC/0LvQuNC60LDRhtC40ZjQuCDQtNCwINGDINCx0LjQu9C+INC60L7QvCDRgtGA0LXQvdGD0YLQutGDINC60L7RgNC40YHRgtC4INC60LDQvNC10YDRgyDQsdC10Lcg0LLQsNGI0LUg0L/QvtGC0LLRgNC00LUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl92aWJyYXRlIiBtc2dpZD0iNzY5NjQyNzAyNjA1NzcwNTgzNCI+ItC60L7QvdGC0YDQvtC70LAg0LLQuNCx0YDQsNGG0LjRmNC1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiLQlNC+0LfQstC+0ZnQsNCy0LAg0LDQv9C70LjQutCw0YbQuNGY0Lgg0LTQsCDQutC+0L3RgtGA0L7Qu9C40YjQtSDQstC40LHRgNCw0YbQuNGY0YMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mbGFzaGxpZ2h0IiBtc2dpZD0iMjE1NTkyMDgxMDEyMTk4NDIxNSI+ItC60L7QvdGC0YDQvtC70LAg0L7RgdCy0LXRgtGZ0LXRmtCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiLQlNC+0LfQstC+0ZnQsNCy0LAg0LDQv9C70LjQutCw0YbQuNGY0Lgg0LTQsCDQutC+0L3RgtGA0L7Qu9C40YjQtSDQsdC70LjRhi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiLQtNC40YDQtdC60YLQvdC+INC/0L7Qt9C40LLQsNGa0LUg0LHRgNC+0ZjQtdCy0LAg0YLQtdC70LXRhNC+0L3QsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQaG9uZSIgbXNnaWQ9IjM3NDA3OTc1NzYxMTM3NjA4MjciPiLQlNC+0LfQstC+0ZnQsNCy0LAg0LDQv9C70LjQutCw0YbQuNGY0Lgg0LTQsCDQv9C+0LfQuNCy0LAg0LHRgNC+0ZjQtdCy0LUg0YLQtdC70LXRhNC+0L3QsCDQsdC10Lcg0LLQsNGI0LUg0LTQvtC30LLQvtC70LUuINCe0LLQviDQvNC+0LbQtSDQtNCwINC00L7QstC10LTQtSDQtNC+INC90LXQvtGH0LXQutC40LLQsNC90LjRhSDRgtGA0L7RiNC60L7QstCwINC40LvQuCDQv9C+0LfQuNCy0LAuINCY0LzQsNGY0YLQtSDQvdCwINGD0LzRgyDQtNCwINC+0LLQviDQvdC1INC00L7Qt9Cy0L7RmdCw0LLQsCDQsNC/0LvQuNC60LDRhtC40ZjQuCDQtNCwINC/0L7Qt9C40LLQsCDQsdGA0L7RmNC10LLQtSDQt9CwINGF0LjRgtC90LUg0YHQu9GD0YfQsNGY0LXQstC1LiDQl9C70L7QvdCw0LzQtdGA0L3QtSDQsNC/0LvQuNC60LDRhtC40ZjQtSDQvNC+0LPRgyDQtNCwINC/0L7Qt9C40LLQsNGY0YMg0LHQtdC3INCy0LDRiNC1INC/0L7RgtCy0YDQtNC1LCDRiNGC0L4g0LzQvtC20LUg0LTQsCDQtNC+0LLQtdC00LUg0LTQviDRgtGA0L7RiNC60L7QstCwLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiIG1zZ2lkPSIzNTc0OTQzODQ3MTgxNzkzOTE4Ij4i0L/RgNC40YHRgtGD0L8g0YPRgdC70YPQt9C4INC/0L7Qt9C40LLQsCDQv9C+0LzQvtGb0YMg0YDQsNC30LzQtdC90LUg0YLRgNC10L3Rg9GC0L3QuNGFINC/0L7RgNGD0LrQsCI8L3N0cmluZz4KQEAgLTg2MywxMCArODYyLDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJjdXQiIG1zZ2lkPSIzMDkyNTY5NDA4NDM4NjI2MjYxIj4i0JjRgdC10YbQuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4i0JrQvtC/0LjRgNCw0ZgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiLQndCw0LvQtdC/0LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXN0ZV9hc19wbGFpbl90ZXh0IiBtc2dpZD0iNTQyNzc5Mjc0MTkwODAxMDY3NSI+ItCd0LDQu9C10L/QuCDQutCw0L4g0L7QsdC40YfQsNC9INGC0LXQutGB0YIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXBsYWNlIiBtc2dpZD0iNTc4MTY4NjA1OTA2MzE0ODkzMCI+ItCX0LDQvNC10L3QuC4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZSIgbXNnaWQ9IjYwOTg2ODQ4NDQwMjE2OTc3ODkiPiLQmNC30LHRgNC40YjQuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4i0JrQvtC/0LjRgNCw0ZggVVJMINCw0LTRgNC10YHRgyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+ItCY0LfQsNCx0LXRgNC4INGC0LXQutGB0YIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmRvIiBtc2dpZD0iNzkwNTc4ODUwMjQ5MTc0MjMyOCI+ItCe0L/QvtC30L7QstC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiLQn9C+0L3QvtCy0LgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4i0JjQt9Cx0L7RgCDRgtC10LrRgdGC0LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4i0JTQvtC00LDRmCDRgyDRgNC10YfQvdC40LoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+ItCY0LfQsdGA0LjRiNC4Ijwvc3RyaW5nPgpAQCAtMTExNCw2ICsxMTE2LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+ItCf0YDQvtC80LXQvdCwINC/0L7Qt9Cw0LTQuNC90LUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiLQnNC+0L3QuNGC0L7RgCDQvtCx0LDQstC10YjRgtC10ZrQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbmRpdGlvbl9wcm92aWRlcl9zZXJ2aWNlX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMzIxMzQzMzUyOTA2NTI0NTY0Ij4i0JTQvtCx0LDQstGZ0LDRhyDRg9GB0LvQvtCy0LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiLQn9C+0LzQvtGb0L3QuNC6INC30LAg0L7QsdCw0LLQtdGI0YLQtdGa0LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IlZQTiDRmNC1INCw0LrRgtC40LLQuNGA0LDQvSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+ItCQ0L/Qu9C40LrQsNGG0LjRmNCwIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDRmNC1INCw0LrRgtC40LLQuNGA0LDQu9CwIFZQTiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0IiBtc2dpZD0iMzAxMTMwNjYwNzEyNjQ1MDMyMiI+ItCU0L7QtNC40YDQvdC40YLQtSDQtNCwINCx0LjRgdGC0LUg0YPQv9GA0LDQstGZ0LDQu9C4INC80YDQtdC20L7QvC4iPC9zdHJpbmc+CkBAIC0xNDQ5LDEyICsxNDUyLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4i0JDQttGD0YDQuNGA0LDQviDRmNC1INCw0LTQvNC40L3QuNGB0YLRgNCw0YLQvtGAIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiLQmNC30LHRgNC40YHQsNC+INGY0LUg0LLQsNGIINCw0LTQvNC40LjRgdGC0YDQsNGC0L7RgCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4i0JTQsCDQsdC4INC/0YDQvtC00YPQttC40LvQsCDQstGA0LXQvNC1INGC0YDQsNGY0LDRmtCwINCx0LDRgtC10YDQuNGY0LUsINGD0YjRgtC10LTQsCDQsdCw0YLQtdGA0LjRmNC1INGB0LzQsNGa0YPRmNC1INC/0LXRgNGE0L7RgNC80LDQvdGB0LUg0YPRgNC10ZLQsNGY0LAg0Lgg0L7Qs9GA0LDQvdC40YfQsNCy0LAg0LLQuNCx0YDQsNGG0LjRmNGDLCDRg9GB0LvRg9Cz0LUg0LvQvtC60LDRhtC40ZjQtSDQuCDQstC10ZvQuNC90YMg0L/QvtC30LDQtNC40L3RgdC60LjRhSDQv9C+0LTQsNGC0LDQutCwLiDQmNC80LXRmNC7LCDRgNCw0LfQvNC10L3QsCDQv9C+0YDRg9C60LAg0Lgg0LTRgNGD0LPQtSDQsNC/0LvQuNC60LDRhtC40ZjQtSDQutC+0ZjQtSDRgdC1INC+0YHQu9Cw0ZrQsNGY0YMg0L3QsCDRgdC40L3RhdGA0L7QvdC40LfQsNGG0LjRmNGDINC80L7QttC00LAg0L3QtdGb0LUg0LTQsCDRgdC1INCw0LbRg9GA0LjRgNCw0ZjRgyDQsNC60L4g0LjRhSDQvdC1INC+0YLQstC+0YDQuNGC0LUuXG5cbtCj0YjRgtC10LTQsCDQsdCw0YLQtdGA0LjRmNC1INGB0LUg0LDRg9GC0L7QvNCw0YLRgdC60Lgg0LjRgdC60ZnRg9GH0YPRmNC1INC60LDQtNCwINGB0LUg0YPRgNC10ZLQsNGYINC/0YPQvdC4LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX3RpdGxlIiBtc2dpZD0iNzQ5Mzk4OTcyMjYxMDAwODcwMCI+ItCS0LDQttC90L7RgdGCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiLQkdC70L7QutC40YDQsNC90LA6INCe0LLQsCDQvtCx0LDQstC10YjRgtC10ZrQsCDRgdC1INC90LjQutCw0LTQsCDQvdC1INC/0YDQuNC60LDQt9GD0ZjRgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjY0NDc2NDA0NDk5MTg0MjcxODciPiLQndC40YHQutCwOiDQn9GA0LjQutCw0LfRg9GY0YMg0YHQtSDRgyDQtNC90YMg0LvQuNGB0YLQtSDQvtCx0LDQstC10YjRgtC10ZrQsCDQsdC10Lcg0LfQstGD0LrQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI3OTkxMTU3Njk3NjA5NTc1MjcxIj4i0KPQvtCx0LjRh9Cw0ZjQtdC90LA6INCe0LLQsCDQvtCx0LDQstC10YjRgtC10ZrQsCDRgdC1INC/0YDQuNC60LDQt9GD0ZjRgyDQsdC10Lcg0LfQstGD0LrQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMTUyMjM4NjM3NzM3MjE1NjU0Ij4i0JLQuNGB0L7QutCwOiDQn9GA0LjQutCw0LfRg9GY0YMg0YHQtSDRgyDQstGA0YXRgyDQu9C40YHRgtC1INC+0LHQsNCy0LXRiNGC0LXRmtCwINC4INCw0LrRgtC40LLQuNGA0LAg0YHQtSDQt9Cy0YPRh9C90Lgg0YHQuNCz0L3QsNC7Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+ItCl0LjRgtC90LA6INCd0LDQutGA0LDRgtC60L4g0YHQtSDQv9GA0LjQutCw0LfRg9GY0YMg0L3QsCDQtdC60YDQsNC90YMg0Lgg0LDQutGC0LjQstC40YDQsCDRgdC1INC30LLRg9GH0L3QuCDRgdC40LPQvdCw0LsiPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0iemVuX21vZGVfZHVyYXRpb25fbWludXRlc19zdW1tYXJ5IiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNDM2Nzg3NzQwODA3MjAwMDg0OCI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj4lMSRkINC80LjQvdGD0YIgKNC00L4gPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9ImZldyI+JTEkZCDQvNC40L3Rg9GC0LAgKNC00L4gPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1zdi9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtc3Yvc3RyaW5ncy54bWwKaW5kZXggODk4NjA3My4uYjA3ZGMyOCAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1zdi9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXN2L3N0cmluZ3MueG1sCkBAIC0yMjMsNiArMjIzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9ja2Rvd24iIG1zZ2lkPSI4NzUxNTQyNTE0NzI0MzMyODczIj4iTMOlcyBudSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJJbm5laMOlbGwgaGFyIGRvbHRzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4iU8Oka2VydCBsw6RnZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+IkFuZHJvaWQtc3lzdGVtIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNlcl9vd25lcl9sYWJlbCIgbXNnaWQ9IjI4MDQzNTE4OTgwMDEwMzg5NTEiPiJQZXJzb25saWd0Ijwvc3RyaW5nPgpAQCAtMzUzLDggKzM1NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4iVGlsbMOldGVyIGF0dCBhcHBlbiB0YXIgYmlsZGVyIG9jaCBzcGVsYXIgaW4gdmlkZW9yIG1lZCBrYW1lcmFuLiBNZWQgZGVuIGjDpHIgYmVow7ZyaWdoZXRlbiB0aWxsw6V0cyBhcHBlbiBhdHQgYW52w6RuZGEga2FtZXJhbiBuw6RyIHNvbSBoZWxzdCB1dGFuIGRpdHQgZ29ka8Okbm5hbmRlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiJzdHlyYSB2aWJyYXRpb24iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+IlRpbGzDpXRlciBhdHQgYXBwZW4gc3R5ciB2aWJyYXRpb25lbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4ic3R5cmEgbGFtcGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+IlRpbGzDpXRlciBhdHQgYXBwZW4gc3R5ciBsYW1wYW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4icmluZ2EgdGVsZWZvbm51bW1lciBkaXJla3QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4iVGlsbMOldGVyIGF0dCBhcHBlbiByaW5nZXIgdGVsZWZvbm51bW1lciB1dGFuIG7DpWdvbiBha3RpdiDDpXRnw6RyZCBmcsOlbiBkaWcuIERldHRhIGthbiBsZWRhIHRpbGwgb3bDpG50YWRlIGF2Z2lmdGVyIG9jaCBzYW10YWwuIE9ic2VydmVyYSBhdHQgYXBwZW4gaW50ZSB0aWxsw6V0cyByaW5nYSBuw7Zkc2FtdGFsLiBTa2FkbGlnYSBhcHBhciBrYW4gcmluZ2EgdXRhbiBkaXR0IGdvZGvDpG5uYW5kZSBvY2ggZGV0dGEga2FuIGtvc3RhIHBlbmdhci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ltc0NhbGxTZXJ2aWNlIiBtc2dpZD0iMzU3NDk0Mzg0NzE4MTc5MzkxOCI+InRpbGxnw6VuZyB0aWxsIHRqw6Ruc3RlbiBmw7ZyIHNuYWJibWVkZGVsYW5kZW4gdmlkIHNhbXRhbCI8L3N0cmluZz4KQEAgLTg1OCwxMCArODU3LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJjdXQiIG1zZ2lkPSIzMDkyNTY5NDA4NDM4NjI2MjYxIj4iS2xpcHAgdXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+IktvcGllcmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiJLbGlzdHJhIGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiJLbGlzdHJhIGluIHNvbSBvZm9ybWF0ZXJhZCB0ZXh0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiJFcnPDpHR0Li4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+IlRhIGJvcnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IktvcGllcmEgd2ViYmFkcmVzcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+Ik1hcmtlcmEgdGV4dCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVuZG8iIG1zZ2lkPSI3OTA1Nzg4NTAyNDkxNzQyMzI4Ij4iw4VuZ3JhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiJHw7ZyIG9tIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGV4dFNlbGVjdGlvbkNBQlRpdGxlIiBtc2dpZD0iNTIzNjg1MDM5NDM3MDgyMDM1NyI+IlRleHRtYXJrZXJpbmciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4iTMOkZ2cgdGlsbCBpIG9yZGxpc3RhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiJUYSBib3J0Ijwvc3RyaW5nPgpAQCAtMTEwNyw2ICsxMTA5LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+IsOEbmRyYSBiYWtncnVuZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+Ik1lZGRlbGFuZGVseXNzbmFyZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbmRpdGlvbl9wcm92aWRlcl9zZXJ2aWNlX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMzIxMzQzMzUyOTA2NTI0NTY0Ij4iTGV2ZXJhbnTDtnIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiJBdmlzZXJpbmdzYXNzaXN0ZW50Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJWUE4gw6RyIGFrdGl2ZXJhdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+IlZQTiBha3RpdmVyYXMgYXYgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4iVHJ5Y2sgb20gZHUgdmlsbCBoYW50ZXJhIG7DpHR2ZXJrZXQuIjwvc3RyaW5nPgpAQCAtMTQ0MCwxMiArMTQ0Myw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+IlVwcGRhdGVyYXQgYXYgYWRtaW5pc3RyYXTDtnJlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4iUGFrZXRldCBoYXIgcmFkZXJhdHMgYXYgYWRtaW5pc3RyYXTDtnJlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4iSSBiYXR0ZXJpc3BhcmzDpGdldCByZWR1Y2VyYXMgZW5oZXRlbnMgcHJlc3RhbmRhIHPDpSBhdHQgYmF0dGVyaWV0IHNrYSByw6Rja2EgbMOkbmdyZSBvY2ggdmlicmF0aW9uLCBwbGF0c3Rqw6Ruc3RlciBzYW10IGRlbiBtZXN0YSBhbnbDpG5kbmluZ2VuIGF2IGJha2dydW5kc2RhdGEgYmVncsOkbnNhcy4gRGV0IGthbiBow6RuZGEgYXR0IGFwcGFyIGbDtnIgZS1wb3N0LCBzbXMgb2NoIGFubmF0IHNvbSBrcsOkdmVyIHN5bmtyb25pc2VyaW5nIGludGUgdXBwZGF0ZXJhcyBmw7ZycsOkbiBkdSDDtnBwbmFyIGRlbS5cblxuQmF0dGVyaXNwYXJsw6RnZXQgaW5ha3RpdmVyYXMgYXV0b21hdGlza3QgbsOkciBlbmhldGVuIGxhZGRhcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV90aXRsZSIgbXNnaWQ9Ijc0OTM5ODk3MjI2MTAwMDg3MDAiPiJSZWxldmFucyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSI3MTE4ODI2OTAwNzY3MDQ3MTI1Ij4iQmxvY2tlcmFkOiBWaXNhIGFsZHJpZyBkZXNzYSBhdmlzZXJpbmdhciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjY0NDc2NDA0NDk5MTg0MjcxODciPiJMw6VnOiBWaXNhIGzDpG5nc3QgbmVkIGkgYXZpc2VyaW5nc2xpc3RhbiDigJMgdXRhbiBsanVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiJOb3JtYWw6IFZpc2EgYXZpc2VyaW5nYXJuYSDigJMgdXRhbiBsanVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiJIw7ZnOiBWaXNhIGjDtmdzdCB1cHAgaSBhdmlzZXJpbmdzbGlzdGFuIOKAkyBtZWQgbGp1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiJCcsOlZHNrYW5kZTogVmlzYSBww6Ugc2vDpHJtZW4g4oCTIG1lZCBsanVkIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5JICUxJGQgbWludXRlciAodGlsbCBrbC4gPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+SSBlbiBtaW51dCAodGlsbCBrbC4gPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMCI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1zdy9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtc3cvc3RyaW5ncy54bWwKaW5kZXggN2QwZjNjYS4uY2YwMDYzYyAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1zdy9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXN3L3N0cmluZ3MueG1sCkBAIC0yMjUsNiArMjI1LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9ja2Rvd24iIG1zZ2lkPSI4NzUxNTQyNTE0NzI0MzMyODczIj4iRnVuZ2Egc2FzYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJNYXVkaHVpIHlhbWVmaWNod2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiJNdGluZG8gc2FsYW1hIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4iTWZ1bW8gd2EgQW5kcm9pZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4iQmluYWZzaSI8L3N0cmluZz4KQEAgLTM1NSw4ICszNTYsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IkluYXJ1aHVzdSBwcm9ncmFtdSBrdXBpZ2EgcGljaGEgbmEgdmlkZW8ga3dhIGthbWVyYS4gS2liYWxpIGhpa2kga2luYXJ1aHVzdSBwcm9ncmFtdSBrdXR1bWlhIGthbWVyYSBrd2Egd2FrYXRpIHdvd290ZSBiaWxhIHV0aGliaXRpc2hvIHdha28uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl92aWJyYXRlIiBtc2dpZD0iNzY5NjQyNzAyNjA1NzcwNTgzNCI+Ikt1ZGhpYml0aSBtdGV0ZW1vIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiJJbmFydWh1c3UgcHJvZ3JhbXUga3VkaGliaXRpIGtpdGluZ2lzaGkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mbGFzaGxpZ2h0IiBtc2dpZD0iMjE1NTkyMDgxMDEyMTk4NDIxNSI+ImRoaWJpdGkgdG9jaGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+IkluYXJ1aHVzdSBwcm9ncmFtdSBrdWRoaWJpdGkgdG9jaGkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4icGlnYSBzaW11IG1vamEga3dhIG1vamEga3dhIG5hbWJhcmkgemEgc2ltdSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQaG9uZSIgbXNnaWQ9IjM3NDA3OTc1NzYxMTM3NjA4MjciPiJJbmFydWh1c3UgcHJvZ3JhbXUga3VwaWdhIG5hbWJhcmkgemEgc2ltdSBiaWxhIHlhIHdld2Uga3VpbmdpbGlhIGthdGkuIEhpaSBpbmF3ZXphIGt1c2FiYWJpc2hhIGdoYXJhbWEgemlzaXpvdGFyYWppd2EgYXUgc2ltdS4gS3VtYnVrYSBrdXdhIGhpaSBoYWlydWh1c3UgcHJvZ3JhbXUga3VwaWdhIG5hbWJhcmkgemEgZGhhcnVyYS4gUHJvZ3JhbXUgaGFzaWRpIHppbmF3ZXphIGt1a3VnaGFyaW11IHBlc2Ega3dhIGt1cGlnYSBzaW11IGJpbGEgdXRoaWJpdGlzaG8gd2Frby4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ltc0NhbGxTZXJ2aWNlIiBtc2dpZD0iMzU3NDk0Mzg0NzE4MTc5MzkxOCI+ImZpa2lhIGh1ZHVtYSB5YSBzaW11IHlhIElNUyI8L3N0cmluZz4KQEAgLTc5NCw3ICs3OTMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9wYXNzd29yZF9yZW1lbWJlciIgbXNnaWQ9IjY0OTE4Nzk2Nzg5OTY3NDk0NjYiPiJLdW1idWthIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9wYXNzd29yZF9uZXZlciIgbXNnaWQ9IjgyNzQzMzAyOTY3ODU4NTUxMDUiPiJLYXR1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ib3Blbl9wZXJtaXNzaW9uX2RlbnkiIG1zZ2lkPSI3Mzc0MDM2NzA4MzE2NjI5ODAwIj4iSGF1bmEgaWRoaW5pIHlhIGt1ZnVuZ3VhIHVrdXJhc2EgaHV1LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRleHRfY29waWVkIiBtc2dpZD0iNDk4NTcyOTUyNDY3MDEzMTM4NSI+Ik1hYW5kaXNoaSB5YW1lbmFraWxpd2Ega3dlbnllIHViYW8ga2xpcHUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGV4dF9jb3BpZWQiIG1zZ2lkPSI0OTg1NzI5NTI0NjcwMTMxMzg1Ij4iTWFhbmRpc2hpIHlhbWVuYWtpbGl3YSBrd2VueWUgdWJhbyB3YSBrdW5ha2lsaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtb3JlX2l0ZW1fbGFiZWwiIG1zZ2lkPSI0NjUwOTE4OTIzMDgzMzIwNDk1Ij4iWmFpZGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmVwZW5kX3Nob3J0Y3V0X2xhYmVsIiBtc2dpZD0iMjU3MjIxNDQ2MTY3NjAxNTY0MiI+Ik1lbnl1KyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc3BhY2Vfc2hvcnRjdXRfbGFiZWwiIG1zZ2lkPSIyNDEwMzI4NjM5MjcyMTYyNTM3Ij4ibXdhbnlhIjwvc3RyaW5nPgpAQCAtODYwLDEwICs4NTksMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiJLYXRhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weSIgbXNnaWQ9IjI2ODE5NDYyMjk1MzM1MTE5ODciPiJOYWthbGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiJCYW5kaWthIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiJCYW5kaWthIGthbWEgbWFhbmRpc2hpIGRoYWhpcmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXBsYWNlIiBtc2dpZD0iNTc4MTY4NjA1OTA2MzE0ODkzMCI+IkJhZGlsaXNoYS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZSIgbXNnaWQ9IjYwOTg2ODQ4NDQwMjE2OTc3ODkiPiJGdXRhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiJOYWtpbGkgVVJMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4iQ2hhZ3VhIG1hYW5kaXNoaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVuZG8iIG1zZ2lkPSI3OTA1Nzg4NTAyNDkxNzQyMzI4Ij4iVGVuZHVhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiJSZWplc2hhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGV4dFNlbGVjdGlvbkNBQlRpdGxlIiBtc2dpZD0iNTIzNjg1MDM5NDM3MDgyMDM1NyI+IlVjaGFndXppIHdhIG1hYW5kaXNoaT8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4iT25nZXphIGt3ZW55ZSBrYW11c2kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+IkZ1dGEiPC9zdHJpbmc+CkBAIC0xMTA5LDYgKzExMTEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4iQmFkaWxpc2hhIG1hbmRoYXJpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4iS2lzaWtpbGl6aSBjaGEgYXJpZmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+Ik10b2EgbWFzaGFydGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiJNcmF0aWJ1IHdhIGFyaWZhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJWUE4gaW1ld2V6ZXNod2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiJWUE4gaW1lYW1pbGlzaHdhIG5hIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0IiBtc2dpZD0iMzAxMTMwNjYwNzEyNjQ1MDMyMiI+Ikd1c2EgaWxpIGt1ZGhpYml0aSBtdGFuZGFvLiI8L3N0cmluZz4KQEAgLTE0NDIsMTIgKzE0NDUsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV91cGRhdGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijg4NTY2MzEzMjI0NDAxODcwNzEiPiJLaW1lc2FzaXN3YSBuYSBtc2ltYW1pemkgd2FrbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4iS2lsaWZ1dHdhIG5hIG1zaW1hbWl6aSB3YWtvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiJLdXNhaWRpYSBrdWJvcmVzaGEgbXVkYSB3YSBtYXR1bWl6aSB5YSBiZXRyaSwgaW5heW9va29hIGJldHJpIGh1cHVuZ3V6YSB1dGVuZGFqaSB3YSBraWZhYSBjaGFrbyBuYSBrdXB1bmd1emEgbXRldGVtbywgaHVkdW1hIHphIHV0YW1idXppIHdhIG1haGFsaSwgbmEgZGF0YSBueWluZ2kgeWEgY2hpbmkgY2hpbmkuIEJhcnVhIHBlcGUsIHVqdW1iZSBuYSBwcm9ncmFtdSBueWluZ2luZSB6aW5hem90ZWdlLGVhIHVzYXdhemlzaGFqaSBodWVuZGEgemlzaXNhc2lzaHdlIHVzaXBvemlmdW5ndWEuXG5cbkluYXlvb2tvYSBiZXRyaSBodWppemltYSBraW90b21hdGlraSBraWZhYSBjaGFrbyBraW5hcG9rdXdhIGtpbmFjaGFqaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV90aXRsZSIgbXNnaWQ9Ijc0OTM5ODk3MjI2MTAwMDg3MDAiPiJVbXVoaW11Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiJJbWV6dWl3YTogVXNpb255ZXNoZSBhcmlmYSBoaXppIGthbXdlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNjQ0NzY0MDQ0OTkxODQyNzE4NyI+IkNoaW5pOiBPbnllc2hhIGthdGlrYSBzZWhlbXUgeWEgY2hpbmkgeWEgb3JvZGhhIHlhIGFyaWZhIGJpbGEga3V0b2Egc2F1dGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNzk5MTE1NzY5NzYwOTU3NTI3MSI+Ikthd2FpZGE6IE9ueWVzaGEgYXJpZmEgaGl6aSBiaWxhIHNhdXRpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiJKdXU6IE9ueWVzaGEga2F0aWthIHNlaGVtdSB5YSBqdXUgeWEgb3JvZGhhIHlhIGFyaWZhIG5hIGl0b2Ugc2F1dGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSIxMTUzNjkzMDgwNDY3OTA0NDc0Ij4iTXVoaW11OiBXZWthIG9ueWVzaG8gbGEga3VjaHVuZ3VsaWEga3dlbnllIHNrcmluaSBuYSBpdG9lIHNhdXRpIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5Ld2EgZGFraWthICUxJGQgKGhhZGkgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+S3dhIGRha2lrYSBtb2phIChoYWRpIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzAiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtc3c2MDBkcC9jb25maWcueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1zdzYwMGRwL2NvbmZpZy54bWwKaW5kZXggNWEwMDdjZS4uN2Y1N2RlZCAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1zdzYwMGRwL2NvbmZpZy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1zdzYwMGRwL2NvbmZpZy54bWwKQEAgLTQwLDUgKzQwLDYgQEAKICAgICA8IS0tIFVzZSBhIGxhcmdlciBzY2FsaW5nIHNwYW4gZm9yIGxhcmdlciBzY3JlZW4gZGV2aWNlcy4gLS0+CiAgICAgPGRpbWVuIG5hbWU9ImNvbmZpZ19taW5TY2FsaW5nU3BhbiI+MzJtbTwvZGltZW4+CiAKKyAgICA8aW50ZWdlciBuYW1lPSJjb25maWdfZG9ja2VkU3RhY2tEaXZpZGVyU25hcE1vZGUiPjE8L2ludGVnZXI+CiA8L3Jlc291cmNlcz4KIApkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy10YS1ySU4vc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXRhLXJJTi9zdHJpbmdzLnhtbAppbmRleCBlNDE5ZWVhLi5lY2VmYjc3IDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXRhLXJJTi9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXRhLXJJTi9zdHJpbmdzLnhtbApAQCAtMjIzLDYgKzIyMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2tkb3duIiBtc2dpZD0iODc1MTU0MjUxNDcyNDMzMjg3MyI+IuCuh+CuquCvjeCuquCvi+CupOCvgSDgrqrgr4Lgrp/gr43grp/gr4EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+Ijk5OSsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fY2hpbGRyZW5fY291bnRfYnJhY2tldGVkIiBtc2dpZD0iMTc2OTQyNTQ3MzE2ODM0NzgzOSI+Iig8eGxpZmY6ZyBpZD0iTk9USUZJQ0FUSU9OQ09VTlQiPiVkPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4i4K6u4K6x4K+I4K6o4K+N4K6k4K+B4K6z4K+N4K6zIOCuieCus+CvjeCus+Cun+CuleCvjeCuleCuruCvjSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+IuCuquCuvuCupOCvgeCuleCuvuCuquCvjeCuquCvgSDgrqrgrq/grqngr43grq7gr4HgrrHgr4giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiJBbmRyb2lkIOCuheCuruCviOCuquCvjeCuquCvgSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4i4K6k4K6p4K6/4K6q4K+N4K6q4K6f4K+N4K6fIjwvc3RyaW5nPgpAQCAtMzUzLDggKzM1NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4i4K6V4K+H4K6u4K6w4K6+IOCuruCvguCusuCuruCuvuCuleCuquCvjSDgrqrgrp/grpngr43grpXgrrPgr4jgrq/gr4Hgrq7gr40sIOCuteCvgOCun+Cuv+Cur+Cvi+CuleCvjeCuleCus+CviOCur+CvgeCuruCvjSDgro7grp/gr4HgrpXgr43grpUg4K6q4K6v4K6p4K+N4K6q4K6+4K6f4K+N4K6f4K+IIOCuheCuqeCvgeCuruCupOCuv+CuleCvjeCuleCuv+CuseCupOCvgS4g4K6J4K6Z4K+N4K6V4K6z4K+NIOCuieCuseCvgeCupOCuv+CuquCvjeCuquCun+CvgeCupOCvjeCupOCusuCvjSDgrofgrqngr43grrHgrr8g4K6V4K+H4K6u4K6w4K6+4K614K+IIOCujuCuqOCvjeCuqOCvh+CusOCupOCvjeCupOCuv+CusuCvgeCuruCvjSDgrqrgrq/grqngr43grqrgrp/gr4HgrqTgr43grqTgrqrgr40g4K6q4K6v4K6p4K+N4K6q4K6+4K6f4K+N4K6f4K+IIOCuh+CupOCvgSDgroXgrqngr4Hgrq7grqTgrr/grpXgr43grpXgrr/grrHgrqTgr4EuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl92aWJyYXRlIiBtc2dpZD0iNzY5NjQyNzAyNjA1NzcwNTgzNCI+IuCuheCupOCuv+CusOCvjeCuteCviOCuleCvjSDgrpXgrp/gr43grp/gr4Hgrqrgr43grqrgrp/gr4HgrqTgr43grqTgr4HgrqTgrrLgr40iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+IuCuheCupOCuv+CusOCvjeCuteCviOCuleCvjSDgrpXgrp/gr43grp/gr4Hgrqrgr43grqrgrp/gr4HgrqTgr43grqTgrqrgr40g4K6q4K6v4K6p4K+N4K6q4K6+4K6f4K+N4K6f4K+IIOCuheCuqeCvgeCuruCupOCuv+CuleCvjeCuleCuv+CuseCupOCvgS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4i4K6D4K6q4K+N4K6y4K6+4K634K+N4K6y4K+I4K6f4K+N4K6f4K+IIOCuh+Cur+CuleCvjeCuleCvgeCupOCusuCvjSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4i4K6D4K6q4K+N4K6z4K6+4K634K+NIOCusuCviOCun+CvjeCun+CviOCuleCvjSDgrpXgrp/gr43grp/gr4Hgrqrgr43grqrgrp/gr4HgrqTgr43grqQsIOCuquCur+CuqeCvjeCuquCuvuCun+CvjeCun+CviCDgroXgrqngr4Hgrq7grqTgrr/grpXgr43grpXgrr/grrHgrqTgr4EuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4i4K6k4K+K4K6y4K+I4K6q4K+H4K6a4K6/IOCujuCuo+CvjeCuleCus+CviCDgrqjgr4fgrrDgrp/grr/grq/grr7grpUg4K6F4K604K+I4K6k4K+N4K6k4K6y4K+NIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+IuCuieCumeCvjeCuleCus+CvjSDgrqTgrrLgr4jgrq/gr4Dgrp/gr43grp/grr/grqngr43grrHgrr8g4K6u4K+K4K6q4K+I4K6y4K+NIOCujuCuo+CvjeCuleCus+CviCDgroXgrrTgr4jgrpXgr43grpXgrqrgr40g4K6q4K6v4K6p4K+N4K6q4K6+4K6f4K+N4K6f4K+IIOCuheCuqeCvgeCuruCupOCuv+CuleCvjeCuleCuv+CuseCupOCvgS4g4K6H4K6k4K6p4K+NIOCuteCuv+Cus+CviOCuteCuvuCulSDgro7grqTgrr/grrDgr43grqrgrr7grrDgrr7grqQg4K6V4K6f4K+N4K6f4K6j4K6Z4K+N4K6V4K6z4K+LIOCuheCutOCviOCuquCvjeCuquCvgeCuleCus+CviyDgro/grrHgr43grqrgrp/grrLgrr7grq7gr40uIOCuheCuteCumuCusOCuleCuvuCusiDgro7grqPgr43grpXgrrPgr4gg4K6F4K604K+I4K6V4K+N4K6VIOCuh+CupOCvgSDgrqrgrq/grqngr43grqrgrr7grp/gr43grp/gr4gg4K6F4K6p4K+B4K6u4K6k4K6/4K6V4K+N4K6V4K6+4K6k4K+BIOCujuCuqeCvjeCuquCupOCviCDgrqjgrr/grqngr4jgrrXgrr/grrLgr43grpXgr4rgrrPgr43grrPgrrXgr4Hgrq7gr40uIOCupOCvgOCumeCvjeCuleCuv+CutOCviOCuleCvjeCuleCvgeCuruCvjSDgrqrgrq/grqngr43grqrgrr7grp/gr4HgrpXgrrPgr40sIOCuieCumeCvjeCuleCus+CvjSDgrongrrHgr4HgrqTgrr/grqrgr43grqrgrp/gr4HgrqTgr43grqTgrrLgr40g4K6H4K6p4K+N4K6x4K6/IOCuheCutOCviOCuquCvjeCuquCvgeCuleCus+CviOCumuCvjSDgrprgr4bgrq/gr43grrXgrqTgrr7grrLgr40g4K6J4K6Z4K+N4K6V4K6z4K+B4K6V4K+N4K6V4K+B4K6a4K+NIOCumuCvhuCusuCuteCvgSDgro/grrHgr43grqrgrp/grpXgr43grpXgr4Lgrp/gr4Hgrq7gr40uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiJJTVMg4K6F4K604K+I4K6q4K+N4K6q4K+B4K6a4K+NIOCumuCvh+CuteCviOCur+CviCDgroXgrqPgr4HgrpXgr4HgrqTgrrLgr40iPC9zdHJpbmc+CkBAIC04NTgsMTAgKzg1NywxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+IuCuteCvhuCun+CvjeCun+CvgSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4i4K6o4K6V4K6y4K+G4K6f4K+BIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzdGUiIG1zZ2lkPSI1NjI5ODgwODM2ODA1MDM2NDMzIj4i4K6S4K6f4K+N4K6f4K+BIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiLgro7grrPgrr/grq8g4K6J4K6w4K+I4K6v4K6+4K6VIOCukuCun+CvjeCun+CvgSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4i4K6u4K6+4K6x4K+N4K6x4K+BLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+IuCuqOCvgOCuleCvjeCuleCvgSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4iVVJMIOCukCDgrqjgrpXgrrLgr4bgrp/gr4EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiLgrongrrDgr4jgrq/gr4jgrqTgr40g4K6k4K+H4K6w4K+N4K614K+B4K6a4K+G4K6v4K+N4K6VIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiLgrprgr4bgrq/grrLgr43grqTgrrXgrr/grrDgr40iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+IuCuruCvgOCuo+CvjeCun+CvgeCuruCvjeCumuCvhuCur+CvjSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiLgrongrrDgr4gg4K6k4K+H4K6w4K+N4K6o4K+N4K6k4K+G4K6f4K+B4K6k4K+N4K6k4K6y4K+NIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWRkVG9EaWN0aW9uYXJ5IiBtc2dpZD0iNDM1MjE2MTUzNDUxMDA1Nzg3NCI+IuCuheCuleCusOCuvuCupOCuv+Cur+Cuv+CusuCvjSDgrprgr4fgrrDgr40iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+IuCuqOCvgOCuleCvjeCuleCvgSI8L3N0cmluZz4KQEAgLTExMDcsNiArMTEwOSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiLgrrXgrr7grrLgr43grqrgr4fgrqrgr43grqrgrrDgr4gg4K6u4K6+4K6x4K+N4K6x4K+BIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4i4K6F4K6x4K6/4K614K6/4K6q4K+N4K6q4K+B4K6V4K6z4K+I4K6V4K+NIOCuleCuo+CvjeCuleCuvuCuo+Cuv+CuleCvjeCuleCvgeCuruCvjSDgrprgr4fgrrXgr4giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+IuCuqOCuv+CuquCuqOCvjeCupOCuqeCviCDgrrXgrrTgrpngr43grpXgr4HgrqjgrrDgr40iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiLgroXgrrHgrr/grrXgrr/grqrgr43grqrgr4Eg4K6J4K6k4K614K6/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJWUE4g4K6a4K+G4K6v4K6y4K+N4K6q4K6f4K+B4K6k4K+N4K6k4K6q4K+N4K6q4K6f4K+N4K6f4K6k4K+BIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IOCuhuCusuCvjSBWUE4g4K6a4K+G4K6v4K6y4K+N4K6q4K6f4K+B4K6k4K+N4K6k4K6q4K+N4K6q4K6f4K+N4K6f4K6k4K+BIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4i4K6o4K+G4K6f4K+N4K614K+K4K6w4K+N4K6V4K+N4K6V4K+IIOCuqOCuv+CusOCvjeCuteCuleCuv+CuleCvjeCuleCupOCvjSDgrqTgr4rgrp/grrXgr4Hgrq7gr40uIjwvc3RyaW5nPgpAQCAtMTQ0MCwxMiArMTQ0Myw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+IuCuieCumeCvjeCuleCus+CvjSDgrqjgrr/grrDgr43grrXgrr7grpXgrr8g4K6q4K+B4K6k4K+B4K6q4K+N4K6q4K6/4K6k4K+N4K6k4K+B4K6z4K+N4K6z4K6+4K6w4K+NIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiLgrqjgrr/grrDgr43grrXgrr7grpXgrr8g4K6o4K+A4K6V4K+N4K6V4K6/4K614K6/4K6f4K+N4K6f4K6+4K6w4K+NIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiLgrqrgr4fgrp/gr43grp/grrDgrr8g4K6G4K6v4K+B4K6z4K+IIOCuruCvh+CuruCvjeCuquCun+CvgeCupOCvjeCupCwg4K6q4K+H4K6f4K+N4K6f4K6w4K6/IOCumuCvh+CuruCuv+CuquCvjeCuquCuvuCuqeCvjSDgrongrpngr43grpXgrrPgr40g4K6a4K6+4K6k4K6p4K6k4K+N4K6k4K6/4K6p4K+NIOCumuCvhuCur+CusuCvjeCupOCuv+CuseCuqeCviOCuleCvjSDgrpXgr4HgrrHgr4jgrqTgr43grqTgr4EsIOCuheCupOCuv+CusOCvjeCuteCvgSwg4K6H4K6f4K6a4K+NIOCumuCvh+CuteCviOCuleCus+CvjSDgrq7grrHgr43grrHgr4Hgrq7gr40g4K6q4K+G4K6w4K+B4K6u4K+N4K6q4K6+4K6y4K6+4K6pIOCuquCuv+CuqeCvjeCuquCvgeCusuCupOCvjSDgrqTgrrDgrrXgr4Eg4K6q4K+L4K6p4K+N4K6x4K614K6x4K+N4K6x4K+I4K6V4K+NIOCuleCun+CvjeCun+CvgeCuquCvjeCuquCun+CvgeCupOCvjeCupOCvgeCuleCuv+CuseCupOCvgS4g4K6S4K6k4K+N4K6k4K6/4K6a4K+I4K614K+I4K6a4K+NIOCumuCuvuCusOCvjeCuqOCvjeCupOCvgeCus+CvjeCusyDgrq7grr/grqngr43grqngrp7gr43grprgrrLgr40sIOCumuCvhuCur+CvjeCupOCuv+Cur+Cuv+Cun+CusuCvjSDgrq7grrHgr43grrHgr4Hgrq7gr40g4K6q4K6/4K6xIOCuquCur+CuqeCvjeCuquCuvuCun+CvgeCuleCus+CvjSDgrqTgrr/grrHgrpXgr43grpXgr4Hgrq7gr43grrXgrrDgr4gsIOCuheCuteCviCDgrqrgr4HgrqTgr4Hgrqrgr43grqrgrr/grpXgr43grpXgrqrgr43grqrgrp/grr7grq7grrLgr40g4K6H4K6w4K+B4K6V4K+N4K6V4K6y4K6+4K6u4K+NLlxuXG7grongrpngr43grpXgrrPgr40g4K6D4K6q4K+L4K6p4K+NIOCumuCuvuCusOCvjeCunOCvjSDgrprgr4bgrq/gr43grq/grqrgr43grqrgrp/gr4Hgrq7gr43grqrgr4vgrqTgr4EsIOCuquCvh+Cun+CvjeCun+CusOCuvyDgrprgr4fgrq7grr/grqrgr43grqrgrr7grqngr40g4K6k4K6+4K6p4K6+4K6V4K614K+HIOCuruCvgeCun+CumeCvjeCuleCvgeCuruCvjS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV90aXRsZSIgbXNnaWQ9Ijc0OTM5ODk3MjI2MTAwMDg3MDAiPiLgrq7gr4HgrpXgr43grpXgrr/grq/grqTgr43grqTgr4HgrrXgrq7gr40iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iNzExODgyNjkwMDc2NzA0NzEyNSI+IuCupOCun+CvgeCuleCvjeCuleCuquCvjeCuquCun+CvjeCun+CupOCvgTog4K6H4K6o4K+N4K6kIOCuheCuseCuv+CuteCuv+CuquCvjeCuquCvgeCuleCus+CviCDgrpLgrrDgr4Hgrqrgr4vgrqTgr4Hgrq7gr40g4K6V4K6+4K6f4K+N4K6f4K6+4K6k4K+BIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNjQ0NzY0MDQ0OTkxODQyNzE4NyI+IuCuleCvgeCuseCviOCuteCvgTog4K6S4K6y4K6/4K6v4K6/4K6p4K+N4K6x4K6/IOCuheCuseCuv+CuteCuv+CuquCvjeCuquCvgeCuquCvjSDgrqrgrp/gr43grp/grr/grq/grrLgrr/grqngr40g4K6V4K+A4K604K+HIOCuleCuvuCun+CvjeCun+CvgeCuruCvjSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI3OTkxMTU3Njk3NjA5NTc1MjcxIj4i4K6H4K6v4K6y4K+N4K6q4K+BOiDgrpLgrrLgrr/grq/grr/grqngr43grrHgrr8g4K6H4K6o4K+N4K6kIOCuheCuseCuv+CuteCuv+CuquCvjeCuquCvgeCuleCus+CviOCuleCvjSDgrpXgrr7grp/gr43grp/gr4Hgrq7gr40iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzE1MjIzODYzNzczNzIxNTY1NCI+IuCuheCupOCuv+CuleCuruCvjTog4K6F4K6x4K6/4K614K6/4K6q4K+N4K6q4K+B4K6V4K6z4K+NIOCuquCun+CvjeCun+Cuv+Cur+CusuCuv+CuqeCvjSDgrq7gr4fgrrLgr40g4K6q4K6V4K+B4K6k4K6/4K6v4K6/4K6y4K+NIOCukuCusuCuv+Cur+CvgeCun+CuqeCvjSDgrpXgrr7grp/gr43grp/gr4Hgrq7gr40iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSIxMTUzNjkzMDgwNDY3OTA0NDc0Ij4i4K6F4K614K6a4K6w4K6u4K+NOiDgrpLgrrLgrr/grq/gr4Hgrp/grqngr40g4K6k4K6/4K6w4K+I4K6v4K6/4K6y4K+NIOCupOCvi+CuqeCvjeCuseCvgeCuruCvjSI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+JTEkZCDgrqjgrr/grq7grr/grp/grpngr43grpXgrrPgr4HgrpXgr43grpXgr4EgKDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+IOCuteCusOCviCk8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj7grpLgrrDgr4Eg4K6o4K6/4K6u4K6/4K6f4K6k4K+N4K6k4K6/4K6x4K+N4K6V4K+BICg8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8wIj4lMiRzPC94bGlmZjpnPiDgrrXgrrDgr4gpPC9pdGVtPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy10ZS1ySU4vc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXRlLXJJTi9zdHJpbmdzLnhtbAppbmRleCBhNmM4MGFkLi5iMWJjY2QyIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXRlLXJJTi9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXRlLXJJTi9zdHJpbmdzLnhtbApAQCAtMjIzLDYgKzIyMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2tkb3duIiBtc2dpZD0iODc1MTU0MjUxNDcyNDMzMjg3MyI+IuCwh+CwquCxjeCwquCxgeCwoeCxgSDgsLLgsL7gsJXgsY0g4LCa4LGH4LCv4LCC4LCh4LC/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiI5OTkrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2NoaWxkcmVuX2NvdW50X2JyYWNrZXRlZCIgbXNnaWQ9IjE3Njk0MjU0NzMxNjgzNDc4MzkiPiIoPHhsaWZmOmcgaWQ9Ik5PVElGSUNBVElPTkNPVU5UIj4lZDwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IuCwleCwguCwn+CxhuCwguCwn+CxjeKAjOCwsuCxgSDgsKbgsL7gsJrgsKzgsKHgsY3gsKHgsL7gsK/gsL8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiLgsLjgsYHgsLDgsJXgsY3gsLfgsL/gsKQg4LCu4LGL4LCh4LGNIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4iQW5kcm9pZCDgsLjgsL/gsLjgsY3gsJ/gsK7gsY0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+IuCwteCxjeCwr+CwleCxjeCwpOCwv+Cwl+CwpOCwgiI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IuCwleCxhuCwruCxhuCwsOCwvuCwpOCxiyDgsJrgsL/gsKTgsY3gsLDgsL7gsLLgsYEg4LCu4LCw4LC/4LCv4LGBIOCwteCxgOCwoeCwv+Cwr+Cxi+CwsuCwqOCxgSDgsKTgsYDgsK/gsKHgsL7gsKjgsL/gsJXgsL8g4LCF4LCo4LGB4LC14LCw4LGN4LCk4LCo4LC+4LCo4LGN4LCo4LC/IOCwheCwqOCxgeCwruCwpOCwv+CwuOCxjeCwpOCxgeCwguCwpuCwvy4g4LCIIOCwheCwqOCxgeCwruCwpOCwvyDgsK7gsYAg4LCo4LC/4LCw4LGN4LCn4LC+4LCw4LCjIOCwsuCxh+CwleCxgeCwguCwoeCwvuCwqOCxhyDgsI7gsKrgsY3gsKrgsYHgsKHgsYjgsKjgsL4g4LCV4LGG4LCu4LGG4LCw4LC+4LCo4LGBIOCwieCwquCwr+Cxi+Cwl+Cwv+CwguCwmuCwoeCwvuCwqOCwv+CwleCwvyDgsIXgsKjgsYHgsLXgsLDgsY3gsKTgsKjgsL7gsKjgsY3gsKjgsL8g4LCF4LCo4LGB4LCu4LCk4LC/4LC44LGN4LCk4LGB4LCC4LCm4LC/LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiLgsLXgsYjgsKzgsY3gsLDgsYfgsLfgsKjgsY3igIzgsKjgsYEg4LCo4LC/4LCv4LCC4LCk4LGN4LCw4LC/4LCC4LCa4LCh4LCCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiLgsLXgsYjgsKzgsY3gsLDgsYfgsJ/gsLDgsY3igIzgsKjgsYEg4LCo4LC/4LCv4LCC4LCk4LGN4LCw4LC/4LCC4LCa4LCh4LC+4LCo4LC/4LCV4LC/IOCwheCwqOCxgeCwteCwsOCxjeCwpOCwqOCwvuCwqOCxjeCwqOCwvyDgsIXgsKjgsYHgsK7gsKTgsL/gsLjgsY3gsKTgsYHgsILgsKbgsL8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mbGFzaGxpZ2h0IiBtc2dpZD0iMjE1NTkyMDgxMDEyMTk4NDIxNSI+IuCwq+CxjeCwsuCwvuCwt+CxjeKAjOCwleCwvuCwguCwpOCwv+CwqOCwvyDgsKjgsL/gsK/gsILgsKTgsY3gsLDgsL/gsILgsJrgsKHgsIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+IuCwq+CxjeCwsuCwvuCwt+CxjeKAjOCwsuCxiOCwn+CxjeKAjOCwqOCxgSDgsKjgsL/gsK/gsILgsKTgsY3gsLDgsL/gsILgsJrgsKHgsL7gsKjgsL/gsJXgsL8g4LCF4LCo4LGB4LC14LCw4LGN4LCk4LCo4LC+4LCo4LGN4LCo4LC/IOCwheCwqOCxgeCwruCwpOCwv+CwuOCxjeCwpOCxgeCwguCwpuCwvy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiLgsKvgsYvgsKjgsY0g4LCo4LCC4LCs4LCw4LGN4oCM4LCy4LCV4LGBIOCwqOCxh+CwsOCxgeCwl+CwviDgsJXgsL7gsLLgsY0g4LCa4LGH4LCv4LCh4LCCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+IuCwruCxgCDgsKrgsY3gsLDgsK7gsYfgsK/gsIIg4LCy4LGH4LCV4LGB4LCC4LCh4LC+IOCwq+Cxi+CwqOCxjSDgsKjgsILgsKzgsLDgsY3igIzgsLLgsJXgsYEg4LCV4LC+4LCy4LGNIOCwmuCxh+Cwr+CwoeCwvuCwqOCwv+CwleCwvyDgsIXgsKjgsYHgsLXgsLDgsY3gsKTgsKjgsL7gsKjgsY3gsKjgsL8g4LCF4LCo4LGB4LCu4LCk4LC/4LC44LGN4LCk4LGB4LCC4LCm4LC/LiDgsKbgsYDgsKjgsL8g4LC14LCy4LCoIOCwheCwqOCxgeCwleCxi+CwqOCwvyDgsJvgsL7gsLDgsY3gsJzgsYDgsLLgsYEg4LC14LC/4LCn4LC/4LCC4LCa4LCs4LCh4LC14LCa4LGN4LCa4LGBIOCwsuCxh+CwpuCwviDgsJXgsL7gsLLgsY3igIzgsLLgsYEg4LCw4LC+4LC14LCa4LGN4LCa4LGBLiDgsIfgsKbgsL8g4LCF4LCk4LGN4LCv4LC14LC44LCwIOCwqOCwguCwrOCwsOCxjeKAjOCwsuCwleCxgSDgsJXgsL7gsLLgsY0g4LCa4LGH4LCv4LCh4LC+4LCo4LC/4LCV4LC/IOCwheCwqOCxgeCwteCwsOCxjeCwpOCwqOCwvuCwqOCxjeCwqOCwvyDgsIXgsKjgsYHgsK7gsKTgsL/gsILgsJrgsKbgsKjgsL8g4LCX4LGB4LCw4LGN4LCk4LGB4LCC4LCa4LGB4LCV4LGL4LCC4LCh4LC/LiDgsLngsL7gsKjgsL/gsJXgsLDgsK7gsYjgsKgg4LCF4LCo4LGB4LC14LCw4LGN4LCk4LCo4LC+4LCy4LGBIOCwruCxgCDgsKjgsL/gsLDgsY3gsKfgsL7gsLDgsKMg4LCy4LGH4LCV4LGB4LCC4LCh4LC+4LCo4LGHIOCwleCwvuCwsuCxjeKAjOCwsuCxgSDgsJrgsYfgsK/gsKHgsIIg4LCm4LGN4LC14LC+4LCw4LC+IOCwruCxgOCwleCxgSDgsKHgsKzgsY3gsKzgsYEg4LCW4LCw4LGN4LCa4LCv4LGN4LCv4LGH4LCy4LC+IOCwmuCxh+Cwr+CwteCwmuCxjeCwmuCxgS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ltc0NhbGxTZXJ2aWNlIiBtc2dpZD0iMzU3NDk0Mzg0NzE4MTc5MzkxOCI+IklNUyDgsJXgsL7gsLLgsY0g4LC44LGH4LC1IOCwquCxjeCwsOCwvuCwquCxjeCwr+CwpCDgsIXgsKjgsYHgsK7gsKTgsL8iPC9zdHJpbmc+CkBAIC04NTgsMTAgKzg1NywxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+IuCwleCwpOCxjeCwpOCwv+CwsOCwv+CwguCwmuCxgSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4i4LCV4LC+4LCq4LGAIOCwmuCxh+Cwr+CwvyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+IuCwheCwpOCwv+CwleCwv+CwguCwmuCxgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4i4LC44LC+4LCm4LC+IOCwteCwmuCwqOCwgiDgsLXgsLLgsYYg4LCF4LCk4LC/4LCV4LC/4LCC4LCa4LGBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiLgsK3gsLDgsY3gsKTgsYAg4LCa4LGH4LCv4LCC4LCh4LC/Li4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+IuCwpOCxiuCwsuCwl+Cwv+CwguCwmuCxgSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4iVVJM4LCo4LC/IOCwleCwvuCwquCxgCDgsJrgsYfgsK/gsL8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiLgsLXgsJrgsKjgsL7gsKjgsY3gsKjgsL8g4LCO4LCC4LCa4LGB4LCV4LGL4LCC4LCh4LC/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiLgsJrgsLDgsY3gsK8g4LCw4LCm4LGN4LCm4LGBIOCwmuCxh+Cwr+CwvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlZG8iIG1zZ2lkPSI3NzU5NDY0ODc2NTY2ODAzODg4Ij4i4LCa4LCw4LGN4LCv4LCo4LGBIOCwquCxgeCwqOCwsOCwvuCwteCxg+CwpOCwgiDgsJrgsYfgsK/gsL8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4i4LC14LCa4LCoIOCwjuCwguCwquCwv+CwlSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiLgsKjgsL/gsJjgsILgsJ/gsYHgsLXgsYHgsJXgsYEg4LCc4LGL4LCh4LC/4LCC4LCa4LGBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiLgsKTgsYrgsLLgsJfgsL/gsILgsJrgsYEiPC9zdHJpbmc+CkBAIC0xMTA3LDYgKzExMDksNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4i4LC14LC+4LCy4LGN4oCM4LCq4LGH4LCq4LCw4LGN4oCM4LCo4LGBIOCwruCwvuCwsOCxjeCwmuCwguCwoeCwvyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+IuCwqOCxi+Cwn+Cwv+Cwq+Cwv+CwleCxh+Cwt+CwqOCxjSDgsKrgsLDgsL/gsLbgsYDgsLLgsKgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+IuCwt+CwsOCwpOCxgSDgsKrgsY3gsLDgsKbgsL7gsKQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiLgsKjgsYvgsJ/gsL/gsKvgsL/gsJXgsYfgsLfgsKjgsY0g4LC44LC54LC+4LCv4LCV4LCCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJWUE4g4LC44LCV4LGN4LCw4LC/4LCv4LCCIOCwmuCxh+Cwr+CwrOCwoeCwv+CwguCwpuCwvyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDgsKbgsY3gsLXgsL7gsLDgsL4gVlBOIOCwuOCwleCxjeCwsOCwv+Cwr+CwgiDgsJrgsYfgsK/gsKzgsKHgsL/gsILgsKbgsL8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiLgsKjgsYbgsJ/gsY3igIzgsLXgsLDgsY3gsJXgsY3igIzgsKjgsYEg4LCo4LC/4LCw4LGN4LC14LC54LC/4LCC4LCa4LCh4LC+4LCo4LC/4LCV4LC/IOCwpOCwvuCwleCwguCwoeCwvy4iPC9zdHJpbmc+CkBAIC0xNDQwLDEyICsxNDQzLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4i4LCu4LGAIOCwqOCwv+CwsOCxjeCwteCwvuCwueCwleCxgeCwoeCxgSDgsKjgsLXgsYDgsJXgsLDgsL/gsILgsJrgsL7gsLDgsYEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX2RlbGV0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iNzY1MDU3NzM4NzQ5MzEwMTM1MyI+IuCwruCxgCDgsKjgsL/gsLDgsY3gsLXgsL7gsLngsJXgsYHgsLLgsYEg4LCk4LGK4LCy4LCX4LC/4LCC4LCa4LC+4LCw4LGBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiLgsKzgsY3gsK/gsL7gsJ/gsLDgsYAg4LCc4LGA4LC14LC/4LCk4LCV4LC+4LCy4LC+4LCo4LGN4LCo4LC/IOCwruCxhuCwsOCxgeCwl+CxgeCwquCwsOCwmuCwoeCwguCwsuCxiyDgsLjgsLngsL7gsK/gsKrgsKHgsJ/gsL7gsKjgsL/gsJXgsL8sIOCwrOCxjeCwr+CwvuCwn+CwsOCxgCDgsLjgsYfgsLXgsLDgsY0g4LCu4LGAIOCwquCwsOCwv+CwleCwsOCwgiDgsKrgsKjgsL/gsKTgsYDgsLDgsYHgsKjgsYEg4LCk4LCX4LGN4LCX4LC/4LC44LGN4LCk4LGB4LCC4LCm4LC/IOCwruCwsOCwv+Cwr+CxgSDgsLXgsYjgsKzgsY3gsLDgsYfgsLfgsKjgsY3igIzgsKjgsYEsIOCwuOCxjeCwpeCwvuCwqCDgsLjgsYfgsLXgsLLgsKjgsYEg4LCu4LCw4LC/4LCv4LGBIOCwjuCwleCxjeCwleCxgeCwtSDgsKjgsYfgsKrgsKXgsY3gsK8g4LCh4LGH4LCf4LC+4LCo4LGBIOCwquCwsOCwv+CwruCwv+CwpOCwgiDgsJrgsYfgsLjgsY3gsKTgsYHgsILgsKbgsL8uIOCwh+CwruCxhuCwr+Cwv+CwsuCxjSwg4LCu4LGG4LC44LGH4LCc4LC/4LCC4LCX4LGNIOCwruCwsOCwv+Cwr+CxgSDgsLjgsK7gsJXgsL7gsLLgsYDgsJXgsLDgsKPgsKrgsYgg4LCG4LCn4LC+4LCw4LCq4LCh4LGHIOCwh+CwpOCwsCDgsIXgsKjgsYHgsLXgsLDgsY3gsKTgsKjgsL7gsLLgsYEg4LCu4LGA4LCw4LGBIOCwteCwvuCwn+Cwv+CwqOCwvyDgsKTgsYbgsLDgsL/gsLjgsY3gsKTgsYcg4LCu4LC/4LCo4LC54LC+IOCwqOCwteCxgOCwleCwsOCwv+CwguCwmuCwrOCwoeCwteCxgS5cblxu4LCu4LGAIOCwquCwsOCwv+CwleCwsOCwgiDgsJvgsL7gsLDgsY3gsJzgsY0g4LCF4LC14LGB4LCk4LGB4LCo4LGN4LCo4LCq4LGN4LCq4LGB4LCh4LGBIOCwrOCxjeCwr+CwvuCwn+CwsOCxgCDgsLjgsYfgsLXgsLDgsY0g4LC44LGN4LC14LCv4LCC4LCa4LC+4LCy4LCV4LCC4LCX4LC+IOCwhuCwq+CxjSDgsIXgsLXgsYHgsKTgsYHgsILgsKbgsL8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfdGl0bGUiIG1zZ2lkPSI3NDkzOTg5NzIyNjEwMDA4NzAwIj4i4LCq4LGN4LCw4LC+4LCu4LGB4LCW4LGN4LCv4LCkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiLgsKzgsY3gsLLgsL7gsJXgsY0g4LCa4LGH4LCv4LCs4LCh4LC/4LCC4LCm4LC/OiDgsIgg4LCo4LGL4LCf4LC/4LCr4LC/4LCV4LGH4LC34LCo4LGN4oCM4LCy4LCo4LGBIOCwjuCwquCxjeCwquCxgeCwoeCxgiDgsJrgsYLgsKrgsKbgsYEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4i4LCk4LCV4LGN4LCV4LGB4LC1OiDgsKjgsYvgsJ/gsL/gsKvgsL/gsJXgsYfgsLfgsKjgsY3igIzgsLIg4LCc4LC+4LCs4LC/4LCk4LC+IOCwpuCwv+Cwl+CxgeCwtSDgsK3gsL7gsJfgsILgsLLgsYsg4LC24LCs4LGN4LCm4LCCIOCwsuCxh+CwleCxgeCwguCwoeCwviDgsJrgsYLgsKrgsYHgsKTgsYHgsILgsKbgsL8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNzk5MTE1NzY5NzYwOTU3NTI3MSI+IuCwuOCwvuCwp+CwvuCwsOCwo+Cwgjog4LCIIOCwqOCxi+Cwn+Cwv+Cwq+Cwv+CwleCxh+Cwt+CwqOCxjeKAjOCwsuCwqOCxgSDgsLbgsKzgsY3gsKbgsIIg4LCy4LGH4LCV4LGB4LCC4LCh4LC+IOCwmuCxguCwquCxgeCwpOCxgeCwguCwpuCwvyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMTUyMjM4NjM3NzM3MjE1NjU0Ij4i4LCF4LCn4LC/4LCV4LCCOiDgsKjgsYvgsJ/gsL/gsKvgsL/gsJXgsYfgsLfgsKjgsY3igIzgsLIg4LCc4LC+4LCs4LC/4LCk4LC+IOCwjuCwl+CxgeCwtSDgsK3gsL7gsJfgsILgsLLgsYsg4LC24LCs4LGN4LCm4LCC4LCk4LGLIOCwmuCxguCwquCxgeCwpOCxgeCwguCwpuCwvyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiLgsIXgsKTgsY3gsK/gsLXgsLjgsLDgsII6IOCwuOCxjeCwleCxjeCwsOCxgOCwqOCxjeKAjOCwquCxiCDgsLbgsYDgsJjgsY3gsLDgsILgsJfgsL4g4LC24LCs4LGN4LCm4LCC4LCk4LGLIOCwmuCxguCwquCxgeCwpOCxgeCwguCwpuCwvyI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+JTEkZCDgsKjgsL/gsK7gsL/gsLfgsL7gsLIg4LCq4LC+4LCf4LGBICg8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPiDgsLXgsLDgsJXgsYEpPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+4LCS4LCVIOCwqOCwv+CwruCwv+Cwt+CwgiDgsKrgsL7gsJ/gsYEgKDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzAiPiUyJHM8L3hsaWZmOmc+IOCwteCwsOCwleCxgSk8L2l0ZW0+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXRoL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy10aC9zdHJpbmdzLnhtbAppbmRleCA1MThhNjI5Li4wYjhlNjBkIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXRoL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtdGgvc3RyaW5ncy54bWwKQEAgLTIyMyw2ICsyMjMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiLguKXguYfguK3guIHguYDguKXguKIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+Ijk5OSsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fY2hpbGRyZW5fY291bnRfYnJhY2tldGVkIiBtc2dpZD0iMTc2OTQyNTQ3MzE2ODM0NzgzOSI+Iig8eGxpZmY6ZyBpZD0iTk9USUZJQ0FUSU9OQ09VTlQiPiVkPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4i4LmA4LiZ4Li34LmJ4Lit4Lir4Liy4LiW4Li54LiB4LiL4LmI4Lit4LiZ4LmE4Lin4LmJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4i4LmC4Lir4Lih4LiU4Lib4Lil4Lit4LiU4Lig4Lix4LiiIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4i4Lij4Liw4Lia4LiaIEFuZHJvaWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+IuC4quC5iOC4p+C4meC4leC4seC4pyI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IuC4reC4meC4uOC4jeC4suC4leC5g+C4q+C5ieC5geC4reC4m+C4nuC4peC4tOC5gOC4hOC4iuC4seC4meC4luC5iOC4suC4ouC4oOC4suC4nuC5geC4peC4sOC4p+C4tOC4lOC4teC5guC4reC4lOC5ieC4p+C4ouC4geC4peC5ieC4reC4h+C4luC5iOC4suC4ouC4o+C4ueC4m+C4meC4teC5iSDguIHguLLguKPguK3guJnguLjguI3guLLguJXguJnguLXguYnguIjguLDguJfguLPguYPguKvguYnguYHguK3guJvguJ7guKXguLTguYDguITguIrguLHguJnguKrguLLguKHguLLguKPguJbguYPguIrguYnguIHguKXguYnguK3guIfguJbguYjguLLguKLguKPguLnguJvguYTguJTguYnguJfguLjguIHguYDguKHguLfguYjguK3guYLguJTguKLguYTguKHguYjguJXguYnguK3guIfguKPguK3guIHguLLguKPguKLguLfguJnguKLguLHguJnguIjguLLguIHguITguLjguJMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4i4LiE4Lin4Lia4LiE4Li44Lih4LiB4Liy4Lij4Liq4Lix4LmI4LiZ4LmA4LiV4Li34Lit4LiZIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiLguK3guJnguLjguI3guLLguJXguYPguKvguYnguYHguK3guJvguJ7guKXguLTguYDguITguIrguLHguJnguITguKfguJrguITguLjguKHguIHguLLguKPguKrguLHguYjguJnguYDguJXguLfguK3guJkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4i4LiE4Lin4Lia4LiE4Li44Lih4LmE4Lif4LiJ4Liy4LiiIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiLguK3guJnguLjguI3guLLguJXguYPguKvguYnguYHguK3guJvguJ7guKXguLTguYDguITguIrguLHguJnguITguKfguJrguITguLjguKHguYTguJ/guInguLLguKIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiLguYLguJfguKPguJXguLTguJTguJXguYjguK3guKvguKHguLLguKLguYDguKXguILguYLguJfguKPguKjguLHguJ7guJfguYzguYLguJTguKLguJXguKPguIciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4i4Lit4LiZ4Li44LiN4Liy4LiV4LmD4Lir4LmJ4LmB4Lit4Lib4Lie4Lil4Li04LmA4LiE4LiK4Lix4LiZ4LmC4LiX4Lij4LmA4LiC4LmJ4Liy4LmC4LiX4Lij4Lio4Lix4Lie4LiX4LmM4LmC4LiU4Lii4LmE4Lih4LmI4LiV4LmJ4Lit4LiH4LmD4Lir4LmJ4LiE4Li44LiT4LiI4Lix4LiU4LiB4Liy4LijIOC4i+C4tuC5iOC4h+C4reC4suC4iOC4l+C4s+C5g+C4q+C5ieC4oeC4teC4geC4suC4o+C5gOC4o+C4teC4ouC4geC5gOC4geC5h+C4muC5gOC4h+C4tOC4meC4q+C4o+C4t+C4reC4geC4suC4o+C5guC4l+C4o+C4l+C4teC5iOC5hOC4oeC5iOC4hOC4suC4lOC4hOC4tOC4lCDguYLguJvguKPguJTguJfguKPguLLguJrguKfguYjguLLguIHguLLguKPguJfguLPguIfguLLguJnguJnguLXguYnguYTguKHguYjguYTguJTguYnguK3guJnguLjguI3guLLguJXguYPguKvguYnguYHguK3guJvguJ7guKXguLTguYDguITguIrguLHguJnguYLguJfguKPguYTguJvguKvguKHguLLguKLguYDguKXguILguInguLjguIHguYDguInguLTguJkg4LmB4Lit4Lib4Lie4Lil4Li04LmA4LiE4LiK4Lix4LiZ4LiX4Li14LmI4LmA4Lib4LmH4LiZ4Lit4Lix4LiZ4LiV4Lij4Liy4Lii4Lit4Liy4LiI4LiX4Liz4LmD4Lir4LmJ4LiE4Li44LiT4LiV4LmJ4Lit4LiH4LmA4Liq4Li14Lii4LiE4LmI4Liy4Lia4Lij4Li04LiB4Liy4Lij4LiU4LmJ4Lin4Lii4LiB4Liy4Lij4LmC4LiX4Lij4LmC4LiU4Lii4LmE4Lih4LmI4LiC4Lit4LiB4Liy4Lij4Lii4Li34LiZ4Lii4Lix4LiZ4LiI4Liy4LiB4LiE4Li44LiTIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiLguYDguILguYnguLLguJbguLbguIfguJrguKPguLTguIHguLLguKPguYLguJfguKMgSU1TIjwvc3RyaW5nPgpAQCAtODU4LDEwICs4NTcsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiLguJXguLHguJQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+IuC4hOC4seC4lOC4peC4reC4gSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+IuC4p+C4suC4hyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4i4Lin4Liy4LiH4LmA4Lib4LmH4LiZ4LiC4LmJ4Lit4LiE4Lin4Liy4Lih4LiY4Lij4Lij4Lih4LiU4LiyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiLguYHguJfguJnguJfguLXguYguLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4i4Lil4LiaIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiLguITguLHguJTguKXguK3guIEgVVJMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4i4LmA4Lil4Li34Lit4LiB4LiC4LmJ4Lit4LiE4Lin4Liy4LihIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiLguYDguKXguLTguIHguJfguLMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+IuC4l+C4s+C4i+C5ieC4syI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiLguIHguLLguKPguYDguKXguLfguK3guIHguILguYnguK3guITguKfguLLguKEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4i4LmA4Lie4Li04LmI4Lih4LmD4LiZ4Lie4LiI4LiZ4Liy4LiZ4Li44LiB4Lij4LihIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiLguKXguJoiPC9zdHJpbmc+CkBAIC0xMTA3LDYgKzExMDksNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4i4LmA4Lib4Lil4Li14LmI4Lii4LiZ4Lin4Lit4Lil4LmA4Lib4LmA4Lib4Lit4Lij4LmMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4i4LiV4Lix4Lin4Lif4Lix4LiH4LiB4Liy4Lij4LmB4LiI4LmJ4LiH4LmA4LiV4Li34Lit4LiZIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiLguJzguLnguYnguYDguKrguJnguK3guYDguIfguLfguYjguK3guJnguYTguIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiLguJzguLnguYnguIrguYjguKfguKLguIHguLLguKPguYHguIjguYnguIfguYDguJXguLfguK3guJkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IlZQTiDguYDguJvguLTguJTguYPguIrguYnguIfguLLguJnguYHguKXguYnguKciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiLguYDguJvguLTguJTguYPguIrguYnguIfguLLguJkgVlBOIOC5guC4lOC4oiA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiLguYHguJXguLDguYDguJ7guLfguYjguK3guIjguLHguJTguIHguLLguKPguYDguITguKPguLfguK3guILguYjguLLguKIiPC9zdHJpbmc+CkBAIC0xNDQwLDEyICsxNDQzLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4i4Lit4Lix4Lib4LmA4LiU4LiV4LmC4LiU4Lii4Lic4Li54LmJ4LiU4Li54LmB4Lil4Lij4Liw4Lia4LiaIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiLguKXguJrguYLguJTguKLguJzguLnguYnguJTguLnguYHguKXguKPguLDguJrguJrguILguK3guIfguITguLjguJMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTk2MDQzMTEyMzgxNjI1MzAzNCI+IuC5gOC4nuC4t+C5iOC4reC4iuC5iOC4p+C4ouC4m+C4o+C4seC4muC4m+C4o+C4uOC4h+C4reC4suC4ouC4uOC4geC4suC4o+C5g+C4iuC5ieC4h+C4suC4meC5geC4muC4leC5gOC4leC4reC4o+C4teC5iCDguYLguKvguKHguJTguJvguKPguLDguKvguKLguLHguJTguYHguJrguJXguYDguJXguK3guKPguLXguYjguIjguLDguKXguJTguIHguLLguKPguJfguLPguIfguLLguJnguILguK3guIfguK3guLjguJvguIHguKPguJPguYzguYHguKXguLDguIjguLPguIHguLHguJTguIHguLLguKPguKrguLHguYjguJkg4Lia4Lij4Li04LiB4Liy4Lij4LiV4Liz4LmB4Lir4LiZ4LmI4LiHIOC5geC4peC4sOC4guC5ieC4reC4oeC4ueC4peC5geC4muC5h+C4geC4geC4o+C4suC4p+C4lOC5jOC4quC5iOC4p+C4meC5g+C4q+C4jeC5iCDguKrguLPguKvguKPguLHguJrguK3guLXguYDguKHguKUg4LiB4Liy4Lij4Lij4Lix4Lia4Liq4LmI4LiH4LiC4LmJ4Lit4LiE4Lin4Liy4LihIOC5geC4peC4sOC5geC4reC4m+C4reC4t+C5iOC4meC5hiDguJfguLXguYjguYPguIrguYnguIHguLLguKPguIvguLTguIfguITguYzguIjguLDguYTguKHguYjguK3guLHguJvguYDguJTguJXguKvguLLguIHguITguLjguJPguYTguKHguYjguYDguJvguLTguJTguILguLbguYnguJnguKHguLJcblxu4LmC4Lir4Lih4LiU4Lib4Lij4Liw4Lir4Lii4Lix4LiU4LmB4Lia4LiV4LmA4LiV4Lit4Lij4Li14LmI4LiI4Liw4Lib4Li04LiU4LmC4LiU4Lii4Lit4Lix4LiV4LmC4LiZ4Lih4Lix4LiV4Li04LiC4LiT4Liw4LiK4Liy4Lij4LmM4LiI4Lit4Li44Lib4LiB4Lij4LiT4LmMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfdGl0bGUiIG1zZ2lkPSI3NDkzOTg5NzIyNjEwMDA4NzAwIj4i4LiE4Lin4Liy4Lih4Liq4Liz4LiE4Lix4LiNIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiLguJrguKXguYfguK3guIE6IOC4reC4ouC5iOC4suC5geC4quC4lOC4h+C4geC4suC4o+C5geC4iOC5ieC4h+C5gOC4leC4t+C4reC4meC5gOC4q+C4peC5iOC4suC4meC4teC5iSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjY0NDc2NDA0NDk5MTg0MjcxODciPiLguJXguYjguLM6IOC5geC4quC4lOC4h+C4l+C4teC5iOC4lOC5ieC4suC4meC4peC5iOC4suC4h+C4guC4reC4h+C4o+C4suC4ouC4geC4suC4o+C5geC4iOC5ieC4h+C5gOC4leC4t+C4reC4meC5guC4lOC4ouC5hOC4oeC5iOC4quC5iOC4h+C5gOC4quC4teC4ouC4hyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI3OTkxMTU3Njk3NjA5NTc1MjcxIj4i4Lib4LiB4LiV4Li0OiDguYHguKrguJTguIfguIHguLLguKPguYHguIjguYnguIfguYDguJXguLfguK3guJnguYDguKvguKXguYjguLLguJnguLXguYnguYLguJTguKLguYTguKHguYjguKrguYjguIfguYDguKrguLXguKLguIciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzE1MjIzODYzNzczNzIxNTY1NCI+IuC4quC4ueC4hzog4LmB4Liq4LiU4LiH4LiX4Li14LmI4LiU4LmJ4Liy4LiZ4Lia4LiZ4LiC4Lit4LiH4Lij4Liy4Lii4LiB4Liy4Lij4LmB4LiI4LmJ4LiH4LmA4LiV4Li34Lit4LiZ4LmB4Lil4Liw4Liq4LmI4LiH4LmA4Liq4Li14Lii4LiHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+IuC4lOC5iOC4p+C4mTog4LmB4Liq4LiU4LiH4Lia4LiZ4Lir4LiZ4LmJ4Liy4LiI4Lit4LmD4LiZ4LiK4LmI4Lin4LiH4LmA4Lin4Lil4Liy4Liq4Lix4LmJ4LiZ4LmGIOC5geC4peC4sOC4quC5iOC4h+C5gOC4quC4teC4ouC4hyI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+4Lij4Liw4Lii4Liw4LmA4Lin4Lil4LiyICUxJGQg4LiZ4Liy4LiX4Li1ICjguIjguJnguJbguLbguIfguYDguKfguKXguLIgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+4Lij4Liw4Lii4Liw4LmA4Lin4Lil4LiyIDEg4LiZ4Liy4LiX4Li1ICjguIjguJnguJbguLbguIfguYDguKfguKXguLIgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMCI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy10bC9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtdGwvc3RyaW5ncy54bWwKaW5kZXggMWI3YTEwZC4uMDJhMzU4NyAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy10bC9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXRsL3N0cmluZ3MueG1sCkBAIC0yMjMsNiArMjIzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9ja2Rvd24iIG1zZ2lkPSI4NzUxNTQyNTE0NzI0MzMyODczIj4iSS1sb2NrIG5nYXlvbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJOYWthdGFnbyBhbmcgbWdhIGNvbnRlbnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiJTYWZlIG1vZGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiJBbmRyb2lkIFN5c3RlbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4iUGVyc29uYWwiPC9zdHJpbmc+CkBAIC0zNTMsOCArMzU0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiJQaW5hcGF5YWdhbiBhbmcgYXBwIG5hIGt1bXVoYSBuZyBtZ2EgbGFyYXdhbiBhdCB2aWRlbyBnYW1pdCBhbmcgY2FtZXJhLiBQaW5hcGF5YWdhbiBuZyBwYWhpbnR1bG90IG5hIGl0byBhbmcgYXBwIG5hIGdhbWl0aW4gYW5nIGNhbWVyYSBhbnVtYW5nIG9yYXMgbmFuZyB3YWxhIG5nIGl5b25nIGt1bXBpcm1hc3lvbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4ia29udHJvbGluIGFuZyBwYWctdmlicmF0ZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4iUGluYXBheWFnYW4gYW5nIGFwcCBuYSBrb250cm9saW4gYW5nIHZpYnJhdG9yLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiJrb250cm9saW4gYW5nIGZsYXNobGlnaHQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+IlBpbmFwYXlhZ2FuIGFuZyBhcHAgbmEga29udHJvbGluIGFuZyBmbGFzaGxpZ2h0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+ImRpcmVrdGFuZyB0YXdhZ2FuIGFuZyBtZ2EgbnVtZXJvIG5nIHRlbGVwb25vIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+IlBpbmFwYXlhZ2FuIGFuZyBhcHAgbmEgdHVtYXdhZyBzYSBtZ2EgbnVtZXJvIG5nIHRlbGVwb25vIG5hbmcgd2FsYSBuZyBpeW9uZyBwYW5naGloaW1hc29rLiBNYWFhcmkgaXRvbmcgbWFncmVzdWx0YSBzYSBtZ2EgaGluZGkgaW5hYXNhaGFuZyBwYWdzaW5naWwgbyB0YXdhZy4gVGFuZGFhbiBuYSBoaW5kaSBuaXRvIHBpbmFwYXlhZ2FuIGFuZyBhcHAgbmEgdHVtYXdhZyBzYSBtZ2EgbnVtZXJvbmcgcGFuZy1lbWVyZ2VuY3kuIE1hYWFyaW5nIG1hZ3BhZ2FzdG9zIHNhIGl5byBuZyBwZXJhIGFuZyBuYWtha2FoYW1hayBuYSBhcHBzIHNhIHBhbWFtYWdpdGFuIG5nIHBhZ3Rhd2FnIG5hbmcgd2FsYSBuZyBpeW9uZyBrdW1waXJtYXN5b24uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiJpLWFjY2VzcyBhbmcgc2VyYmlzeW8gc2EgdGF3YWcgbmcgSU1TIjwvc3RyaW5nPgpAQCAtODU4LDEwICs4NTcsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiJJLWN1dCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4iS29weWFoaW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiJJLXBhc3RlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiJJLXBhc3RlIGJpbGFuZyBwbGFpbiB0ZXh0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiJQYWxpdGFuLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+IlRhbmdnYWxpbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4iS29weWFoaW4gYW5nIFVSTCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+IlB1bWlsaSBuZyB0ZWtzdG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmRvIiBtc2dpZD0iNzkwNTc4ODUwMjQ5MTc0MjMyOCI+IkktdW5kbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlZG8iIG1zZ2lkPSI3NzU5NDY0ODc2NTY2ODAzODg4Ij4iR2F3aW5nIG11bGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4iUGFncGlsaSBuZyB0ZWtzdG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4iSWRhZ2RhZyBzYSBkaWtzeXVuYXJ5byI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4iVGFuZ2dhbGluIjwvc3RyaW5nPgpAQCAtMTEwNyw2ICsxMTA5LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+IkJhZ3VoaW4gYW5nIHdhbGxwYXBlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+Ik5vdGlmaWNhdGlvbiBsaXN0ZW5lciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbmRpdGlvbl9wcm92aWRlcl9zZXJ2aWNlX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMzIxMzQzMzUyOTA2NTI0NTY0Ij4iTmFnYmliaWdheSBuZyBrdW5kaXN5b24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiJOb3RpZmljYXRpb24gYXNzaXN0YW50Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJOYWthLWFjdGl2YXRlIGFuZyBWUE4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiJJc2luYWFrdGlibyBhbmcgVlBOIG5nIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0IiBtc2dpZD0iMzAxMTMwNjYwNzEyNjQ1MDMyMiI+IlBpbmR1dGluIHVwYW5nIHBhbWFoYWxhYW4gYW5nIG5ldHdvcmsuIjwvc3RyaW5nPgpAQCAtMTQ0MCwxMiArMTQ0Myw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+Ik5hLXVwZGF0ZSBuZyBpeW9uZyBhZG1pbmlzdHJhdG9yIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiJOYS1kZWxldGUgbmcgaXlvbmcgYWRtaW5pc3RyYXRvciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4iVXBhbmcgbWF0dWx1bmdhbmcgcGFnYnV0aWhpbiBhbmcgdGFnYWwgbmcgYmF0ZXJ5YSwgYmluYWJhd2FzYW4gbmcgcGFuZ3RpcGlkIG5nIGJhdGVyeWEgYW5nIHBhZ2dhbmFwIG5nIGl5b25nIGRldmljZSBhdCBuaWxpbGltaXRhaGFuIGFuZyBwYWctdmlicmF0ZSwgbWdhIHNlcmJpc3lvIG5nIGxva2FzeW9uIGF0IGthcmFtaWhhbiBzYSBkYXRhIG5nIGJhY2tncm91bmQuIE1hYWFyaW5nIGhpbmRpIG1hZy11cGRhdGUgYW5nIGVtYWlsLCBwYWdtZW1lbnNhaGUgYXQgaWJhIHBhbmcgbWdhIGFwcCBuYSB1bWFhc2Egc2EgcGFnc2ktc3luYyBtYWxpYmFuIGt1bmcgYnVrc2FuIG1vIGFuZyBtZ2EgaXlvbi5cblxuQXd0b21hdGlrb25nIG5hZy1vLW9mZiBhbmcgcGFuZ3RpcGlkIG5nIGJhdGVyeWEga2FwYWcgbmFnY2hhLWNoYXJnZSBhbmcgaXlvbmcgZGV2aWNlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX3RpdGxlIiBtc2dpZD0iNzQ5Mzk4OTcyMjYxMDAwODcwMCI+IkthaGFsYWdhaGFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiJOYWthLWJsb2NrOiBIdXdhZyBrYWlsYW5tYW4gaXBha2l0YSBhbmcgbWdhIG5vdGlmaWNhdGlvbiBuYSBpdG8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4iTWFiYWJhOiBUYWhpbWlrIG5hIGlwYWtpdGEgc2EgaWJhYmEgbmcgbGlzdGFoYW4gbmcgbWdhIG5vdGlmaWNhdGlvbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI3OTkxMTU3Njk3NjA5NTc1MjcxIj4iTm9ybWFsOiBUYWhpbWlrIG5hIGlwYWtpdGEgYW5nIG1nYSBub3RpZmljYXRpb24gbmEgaXRvIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiJNYXRhYXM6IElwYWtpdGEgc2EgdGFhcyBuZyBsaXN0YWhhbiBuZyBtZ2Egbm90aWZpY2F0aW9uIGF0IG1hZy1wbGF5IG5nIHR1bm9nIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+IkFnYXJhbjogSXBhc2lsaXAgc2Egc2NyZWVuIGF0IG1hZy1wbGF5IG5nIHR1bm9nIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+U2EgbG9vYiBuZyAlMSRkIG1pbnV0byAoaGFuZ2dhbmcgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5TYSBsb29iIG5nICUxJGQgbmEgbWludXRvIChoYW5nZ2FuZyA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXRyL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy10ci9zdHJpbmdzLnhtbAppbmRleCAzOTA0YWE1Li4yODNiY2ViYiAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy10ci9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXRyL3N0cmluZ3MueG1sCkBAIC0yMjMsNiArMjIzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9ja2Rvd24iIG1zZ2lkPSI4NzUxNTQyNTE0NzI0MzMyODczIj4ixZ5pbWRpIGtpbGl0bGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+Ijk5OSsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fY2hpbGRyZW5fY291bnRfYnJhY2tldGVkIiBtc2dpZD0iMTc2OTQyNTQ3MzE2ODM0NzgzOSI+Iig8eGxpZmY6ZyBpZD0iTk9USUZJQ0FUSU9OQ09VTlQiPiVkPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4ixLDDp2VyaWsgZ2l6bGVuZGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiJHw7x2ZW5saSBtb2QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiJBbmRyb2lkIFNpc3RlbWkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+IktpxZ9pc2VsIjwvc3RyaW5nPgpAQCAtMzUzLDggKzM1NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4iVXlndWxhbWF5YSBrYW1lcmF5bGEgZm90b8SfcmFmIHZlIHZpZGVvIMOnZWttZSBpem5pIHZlcmlyLiBCdSBpemluLCB1eWd1bGFtYW7EsW4gc2l6aW4gb25hecSxbsSxeiBvbG1hZGFuIGlzdGVkacSfaSB6YW1hbiBrYW1lcmF5xLEga3VsbGFubWFzxLFuYSBvbGFuYWsgc2HEn2xhci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4idGl0cmXFn2ltaSBkZW5ldGxlbWUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+IlV5Z3VsYW1heWEsIHRpdHJlxZ9pbWkgZGVuZXRsZW1lIGl6bmkgdmVyaXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mbGFzaGxpZ2h0IiBtc2dpZD0iMjE1NTkyMDgxMDEyMTk4NDIxNSI+ImVsIGZlbmVyaW5pIGRlbmV0bGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+IlV5Z3VsYW1heWEsIGVsIGZlbmVyaW5pIGRlbmV0bGVtZSBpem5pIHZlcmlyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+InRlbGVmb24gbnVtYXJhbGFyxLFuYSBkb8SfcnVkYW4gw6dhxJ9yxLEgeWFwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+IlV5Z3VsYW1heWEgc2l6aW4gbcO8ZGFoYWxlbml6IG9sbWFkYW4gdGVsZWZvbiBudW1hcmFsYXLEsW5hIMOnYcSfcsSxIHlhcG1hIGl6bmkgdmVyaXIuIEJ1IGR1cnVtIGJla2xlbm1leWVuIMO2ZGVtZWxlcmUgdmV5YSDDp2HEn3LEsWxhcmEgbmVkZW4gb2xhYmlsaXIuIEFuY2FrIGJ1IGl6bmluLCB1eWd1bGFtYW7EsW4gYWNpbCBudW1hcmFsYXJhIMOnYcSfcsSxIHlhcG1hc8SxbmEgb2xhbmFrIHNhxJ9sYW1hZMSxxJ/EsW7EsSB1bnV0bWF5xLFuLiBLw7Z0w7wgYW1hw6dsxLEgdXlndWxhbWFsYXIgb25hecSxbsSxeiBvbG1hZGFuIMOnYcSfcsSxbGFyIHlhcGFyYWsgc2l6aSB6YXJhcmEgc29rYWJpbGlyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiIG1zZ2lkPSIzNTc0OTQzODQ3MTgxNzkzOTE4Ij4iSU1TIMOnYcSfcsSxIGhpem1ldGluZSBlcmnFn21lIjwvc3RyaW5nPgpAQCAtODU4LDEwICs4NTcsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiJLZXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+IktvcHlhbGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiJZYXDEscWfdMSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4iRMO8eiBtZXRpbiBvbGFyYWsgeWFwxLHFn3TEsXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXBsYWNlIiBtc2dpZD0iNTc4MTY4NjA1OTA2MzE0ODkzMCI+IkRlxJ9pxZ90aXIuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4iU2lsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiJVUkxcJ3lpIGtvcHlhbGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiJNZXRpbiBzZcOnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiJHZXJpIGFsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiJZZW5pZGVuIHlhcCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiJNZXRpbiBzZcOnaW1pIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWRkVG9EaWN0aW9uYXJ5IiBtc2dpZD0iNDM1MjE2MTUzNDUxMDA1Nzg3NCI+IlPDtnpsw7zEn2UgZWtsZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4iU2lsIjwvc3RyaW5nPgpAQCAtMTEwNyw2ICsxMTA5LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+IkR1dmFyIGthxJ/EsWTEsW7EsSBkZcSfacWfdGlyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4iQmlsZGlyaW0gZGlubGV5aWNpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiJEdXJ1bSBzYcSfbGF5xLFjxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiJCaWxkaXJpbSB5YXJkxLFtY8Sxc8SxIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJWUE4gZXRraW5sZcWfdGlyaWxkaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+IlZQTiwgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IHRhcmFmxLFuZGFuIGV0a2lubGXFn3RpcmlsZGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiJBxJ/EsSB5w7ZuZXRtZWsgacOnaW4gZG9rdW51bi4iPC9zdHJpbmc+CkBAIC0xNDQwLDEyICsxNDQzLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4iWcO2bmV0aWNpbml6IHRhcmFmxLFuZGFuIGfDvG5jZWxsZW5kaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4iWcO2bmV0aWNpbml6IHRhcmFmxLFuZGFuIHNpbGluZGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTk2MDQzMTEyMzgxNjI1MzAzNCI+IlBpbCB0YXNhcnJ1ZnUgw7Z6ZWxsacSfaSwgcGlsIMO2bXLDvG7DvCBpeWlsZcWfdGlybWV5ZSB5YXJkxLFtY8SxIG9sbWFrIGnDp2luIGNpaGF6xLFuIHBlcmZvcm1hbnPEsW7EsSBkw7zFn8O8csO8ciwgdGl0cmXFn2ltaSwga29udW0gaGl6bWV0bGVyaW5pIHZlIGFya2EgcGxhbiB2ZXJpbGVyaW5pbiDDp2/En3VudSBzxLFuxLFybGFyLiBTZW5rcm9uaXphc3lvbmEgZGF5YWzEsSBvbGFyYWsgw6dhbMSxxZ9hbiBlLXBvc3RhLCBtZXNhamxhxZ9tYSB1eWd1bGFtYWxhcsSxIHZlIGRpxJ9lciB1eWd1bGFtYWxhciwgYnVubGFyxLEgYcOnbWFkxLHEn8SxbsSxeiBzw7xyZWNlIGfDvG5jZWxsZW5tZXllYmlsaXIuXG5cbkNpaGF6xLFuxLF6IMWfYXJqIG9sdXJrZW4gcGlsIHRhc2FycnVmdSBvdG9tYXRpayBvbGFyYWsga2FwYXTEsWzEsXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfdGl0bGUiIG1zZ2lkPSI3NDkzOTg5NzIyNjEwMDA4NzAwIj4iw5ZuZW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iNzExODgyNjkwMDc2NzA0NzEyNSI+IkVuZ2VsbGVuZGk6IEJ1IGJpbGRpcmltbGVyaSBoacOnYmlyIHphbWFuIGfDtnN0ZXJtZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjY0NDc2NDA0NDk5MTg0MjcxODciPiJEw7zFn8O8azogQmlsZGlyaW0gbGlzdGVzaW5pbiBhbHTEsW5kYSBzZXNzaXpjZSBnw7ZzdGVyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiJOb3JtYWw6IEJ1IGJpbGRpcmltbGVyaSBzZXNzaXpjZSBnw7ZzdGVyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiJZw7xrc2VrOiBCaWxkaXJpbSBsaXN0ZXNpbmluIMO8c3TDvG5kZSBnw7ZzdGVyIHZlIHNlcyDDp8Sxa2FyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+IkFjaWw6IEVrcmFuYSBnZXRpciB2ZSBzZXMgw6fEsWthciI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+JTEkZCBkYWtpa2EgacOnaW4gKMWfdSBzYWF0ZSBrYWRhcjogPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+QmlyIGRha2lrYSBpw6dpbiAoxZ91IHNhYXRlIGthZGFyOiA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8wIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXVrL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy11ay9zdHJpbmdzLnhtbAppbmRleCBlMzhlYzFkLi5mY2U0Y2MzIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXVrL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtdWsvc3RyaW5ncy54bWwKQEAgLTIyNSw2ICsyMjUsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiLQkdC70L7QutGD0LLQsNGC0Lgg0LfQsNGA0LDQtyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLQktC80ZbRgdGCINGB0YXQvtCy0LDQvdC+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4i0JHQtdC30L8uINGA0LXQttC40LwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiLQodC40YHRgtC10LzQsCBBbmRyb2lkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNlcl9vd25lcl9sYWJlbCIgbXNnaWQ9IjI4MDQzNTE4OTgwMDEwMzg5NTEiPiLQntGB0L7QsdC40YHRgtGWINC00LDQvdGWIjwvc3RyaW5nPgpAQCAtMzU1LDggKzM1Niw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4i0JTQvtC30LLQvtC70Y/RlCDQv9GA0L7Qs9GA0LDQvNGWINGE0L7RgtC+0LPRgNCw0YTRg9Cy0LDRgtC4INGC0LAg0LfQvdGW0LzQsNGC0Lgg0LLRltC00LXQviDQt9CwINC00L7Qv9C+0LzQvtCz0L7RjiDQutCw0LzQtdGA0LguINCi0LDQutC40Lkg0LTQvtC30LLRltC7INC00LDRlCDQv9GA0L7Qs9GA0LDQvNGWINC30LzQvtCz0YMg0LHRg9C00Ywt0LrQvtC70Lgg0LLQuNC60L7RgNC40YHRgtC+0LLRg9Cy0LDRgtC4INC60LDQvNC10YDRgyDQsdC10Lcg0LLQsNGI0L7Qs9C+INC/0ZbQtNGC0LLQtdGA0LTQttC10L3QvdGPLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiLQutC+0L3RgtGA0L7Qu9GO0LLQsNGC0Lgg0LLRltCx0YDQvtGB0LjQs9C90LDQuyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4i0JTQvtC30LLQvtC70Y/RlCDQv9GA0L7Qs9GA0LDQvNGWINC60L7QvdGC0YDQvtC70Y7QstCw0YLQuCDQstGW0LHRgNC+0YHQuNCz0L3QsNC7LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiLQutC+0L3RgtGALiDQsdC70LjQvC4g0YHQstGW0YLQu9C+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiLQlNC+0LfQstC+0LvRj9GUINC/0YDQvtCz0YDQsNC80ZYg0LrQvtC90YLRgNC+0LvRjtCy0LDRgtC4INGB0LLRltGC0LvQvtCy0LjQuSDRgdC40LPQvdCw0LsuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4i0L/RgNGP0LzQviDQvdCw0LHQuNGA0LDRgtC4INC90L7QvNC10YDQuCDRgtC10LsuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+ItCU0L7Qt9Cy0L7Qu9GP0ZQg0L/RgNC+0LPRgNCw0LzRliDQvdCw0LHQuNGA0LDRgtC4INC90L7QvNC10YDQuCDRgtC10LvQtdGE0L7QvdGDINCx0LXQtyDQstCw0YjQvtCz0L4g0LLRltC00L7QvNCwLiDQptC1INC80L7QttC1INGB0L/RgNC40YfQuNC90LjRgtC4INC90LXQvtGH0ZbQutGD0LLQsNC90LUg0YHRgtGP0LPQvdC10L3QvdGPINC/0LvQsNGC0Lgg0YfQuCDQt9C00ZbQudGB0L3QtdC90L3RjyDQtNC30LLRltC90LrRltCyLiDQl9Cw0YPQstCw0LbRgtC1LCDRidC+INGG0LUg0L3QtSDQtNC+0LfQstC+0LvRj9GUINC/0YDQvtCz0YDQsNC80ZYg0L3QsNCx0LjRgNCw0YLQuCDQtdC60YHRgtGA0LXQvdGWINC90L7QvNC10YDQuC4g0KjQutGW0LTQu9C40LLRliDQv9GA0L7Qs9GA0LDQvNC4INC80L7QttGD0YLRjCDQt9C00ZbQudGB0L3RjtCy0LDRgtC4INC00LfQstGW0L3QutC4INCx0LXQtyDQstCw0YjQvtCz0L4g0L/RltC00YLQstC10YDQtNC20LXQvdC90Y8sINC30LAg0YnQviDQtyDQstCw0YEg0YHRgtGP0LPRg9Cy0LDRgtC40LzRg9GC0YzRgdGPINC60L7RiNGC0LguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiLQvtGC0YDQuNC80YPQstCw0YLQuCDQtNC+0YHRgtGD0L8g0LTQviDRgtC10LvQtdGE0L7QvdC90L7RlyDRgdC70YPQttCx0LggSU1TIjwvc3RyaW5nPgpAQCAtNTQyLDggKzU0MSw4IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjkxOTI1MTQ4MDY5NzU4OTg5NjEiPiLQo9C60LDQt9Cw0YLQuCI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9ImVtYWlsQWRkcmVzc1R5cGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iODA3Mzk5NDM1Mjk1NjEyOTEyNyI+ItCU0L7QvC4iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI3MDg0MjM3MzU2NjAyNjI1NjA0Ij4i0KDQvtCxLiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjgwNzM5OTQzNTI5NTYxMjkxMjciPiLQlNC+0LzQsNGI0L3RjyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjcwODQyMzczNTY2MDI2MjU2MDQiPiLQoNC+0LHQvtGH0LAiPC9pdGVtPgogICAgIDxpdGVtIG1zZ2lkPSIxMTEyMDQ0NDEwNjU5MDExMDIzIj4i0IbQvdGI0LUiPC9pdGVtPgogICAgIDxpdGVtIG1zZ2lkPSIyMzc0OTEzOTUyODcwMTEwNjE4Ij4i0KPQutCw0LfQsNGC0LgiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KQEAgLTg2OCwxMCArODY3LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJjdXQiIG1zZ2lkPSIzMDkyNTY5NDA4NDM4NjI2MjYxIj4i0JLQuNGA0ZbQty4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+ItCa0L7Qv9GW0Y7Qsi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiLQktGB0YLQsNCy0LjRgtC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiLQktGB0YLQsNCy0LjRgtC4INGP0Log0L/RgNC+0YHRgtC40Lkg0YLQtdC60YHRgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4i0JfQsNC80ZbQvdC40YLQuC4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZSIgbXNnaWQ9IjYwOTg2ODQ4NDQwMjE2OTc3ODkiPiLQktC40LTQsNC70LjRgtC4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiLQmtC+0L/RltGO0LIuIFVSTCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+ItCS0LjQsdGA0LDRgtC4INGC0LXQutGB0YIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmRvIiBtc2dpZD0iNzkwNTc4ODUwMjQ5MTc0MjMyOCI+ItCS0ZbQtNC80ZbQvdC40YLQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlZG8iIG1zZ2lkPSI3NzU5NDY0ODc2NTY2ODAzODg4Ij4i0J/QvtCy0YLQvtGA0LjRgtC4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGV4dFNlbGVjdGlvbkNBQlRpdGxlIiBtc2dpZD0iNTIzNjg1MDM5NDM3MDgyMDM1NyI+ItCS0LjQsdGW0YAg0YLQtdC60YHRgtGDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWRkVG9EaWN0aW9uYXJ5IiBtc2dpZD0iNDM1MjE2MTUzNDUxMDA1Nzg3NCI+ItCU0L7QtNCw0YLQuCDQsiDRgdC70L7QstC90LjQuiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4i0JLQuNC00LDQu9C40YLQuCI8L3N0cmluZz4KQEAgLTExMjEsNiArMTEyMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiLQl9C80ZbQvdC40YLQuCDRhNC+0L3QvtCy0LjQuSDQvNCw0LvRjtC90L7QuiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+ItCh0LvRg9C20LHQsCDRh9C40YLQsNC90L3RjyDRgdC/0L7QstGW0YnQtdC90YwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+ItCf0L7RgdGC0LDRh9Cw0LvRjNC90LjQuiDRg9C80L7QsiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9hc3Npc3RhbnRfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjkwOTQ1NjA1NTU2OTEwMjk1MiI+ItCU0LjRgdC/0LXRgtGH0LXRgCDRgdC/0L7QstGW0YnQtdC90YwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+ItCc0LXRgNC10LbRgyBWUE4g0LDQutGC0LjQstC+0LLQsNC90L4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiLQnNC10YDQtdC20YMgVlBOINCw0LrRgtC40LLQvtCy0LDQvdC+INC/0YDQvtCz0YDQsNC80L7RjiA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiLQotC+0YDQutC90ZbRgtGM0YHRjywg0YnQvtCxINC60LXRgNGD0LLQsNGC0Lgg0LzQtdGA0LXQttC10Y4uIjwvc3RyaW5nPgpAQCAtMTQ1OCwxMiArMTQ2MSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+ItCe0L3QvtCy0LvQtdC90L4g0LDQtNC80ZbQvdGW0YHRgtGA0LDRgtC+0YDQvtC8Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiLQktC40LTQsNC70LjQsiDQsNC00LzRltC90ZbRgdGC0YDQsNGC0L7RgCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4i0KnQvtCxINC/0L7QtNC+0LLQttC40YLQuCDRh9Cw0YEg0YDQvtCx0L7RgtC4INCw0LrRg9C80YPQu9GP0YLQvtGA0LAsINGE0YPQvdC60YbRltGPINC30LDQvtGJ0LDQtNC20LXQvdC90Y8g0LfQsNGA0Y/QtNGDINCw0LrRg9C80YPQu9GP0YLQvtGA0LAg0LfQvdC40LbRg9GUINC/0YDQvtC00YPQutGC0LjQstC90ZbRgdGC0Ywg0L/RgNC40YHRgtGA0L7Rjiwg0LAg0YLQsNC60L7QtiDQvtCx0LzQtdC20YPRlCDQstGW0LHRgNCw0YbRltGOLCDRhNGD0L3QutGG0ZbRlyDRgdC70YPQttCxINC70L7QutCw0YbRltGXINGC0LAg0L/QtdGA0LXQtNCw0LLQsNC90L3RjyDQsdGW0LvRjNGI0L7RgdGC0ZYg0YTQvtC90L7QstC40YUg0LTQsNC90LjRhS4g0JXQu9C10LrRgtGA0L7QvdC90LAg0L/QvtGI0YLQsCwg0YfQsNGC0Lgg0Lkg0ZbQvdGI0ZYg0LTQvtC00LDRgtC60LgsINGP0LrRliDRgdC40L3RhdGA0L7QvdGW0LfRg9GO0YLRjNGB0Y8sINC80L7QttGD0YLRjCDQvdC1INC+0L3QvtCy0LvRjtCy0LDRgtC40YHRjywg0LTQvtC60Lgg0LLQuCDRl9GFINC90LUg0LLRltC00LrRgNC40ZTRgtC1LlxuXG7QpNGD0L3QutGG0ZbRjyDQt9Cw0L7RidCw0LTQttC10L3QvdGPINC30LDRgNGP0LTRgyDQsNC60YPQvNGD0LvRj9GC0L7RgNCwINCw0LLRgtC+0LzQsNGC0LjRh9C90L4g0LLQuNC80LjQutCw0ZTRgtGM0YHRjyDQv9GW0LQg0YfQsNGBINC30LDRgNGP0LTQttCw0L3QvdGPINC/0YDQuNGB0YLRgNC+0Y4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfdGl0bGUiIG1zZ2lkPSI3NDkzOTg5NzIyNjEwMDA4NzAwIj4i0J/RgNGW0L7RgNC40YLQtdGCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiLQl9Cw0LHQu9C+0LrQvtCy0LDQvdC+OiDQvdC1INC/0L7QutCw0LfRg9Cy0LDRgtC4INGG0ZYg0YHQv9C+0LLRltGJ0LXQvdC90Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4i0J3QuNC30YzQutC40Lkg0L/RgNGW0L7RgNC40YLQtdGCOiDQv9C+0LrQsNC30YPQstCw0YLQuCDRhtGWINGB0L/QvtCy0ZbRidC10L3QvdGPINCy0L3QuNC30YMg0YHQv9C40YHQutGDINCx0LXQtyDQt9Cy0YPQutC+0LLQvtCz0L4g0YHQuNCz0L3QsNC70YMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNzk5MTE1NzY5NzYwOTU3NTI3MSI+ItCh0YLQsNC90LTQsNGA0YLQvdC40Lkg0L/RgNGW0L7RgNC40YLQtdGCOiDQv9C+0LrQsNC30YPQstCw0YLQuCDRhtGWINGB0L/QvtCy0ZbRidC10L3QvdGPINCx0LXQtyDQt9Cy0YPQutC+0LLQvtCz0L4g0YHQuNCz0L3QsNC70YMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzE1MjIzODYzNzczNzIxNTY1NCI+ItCS0LjRgdC+0LrQuNC5INC/0YDRltC+0YDQuNGC0LXRgjog0L/QvtC60LDQt9GD0LLQsNGC0Lgg0YbRliDRgdC/0L7QstGW0YnQtdC90L3RjyDQstCz0L7RgNGWINGB0L/QuNGB0LrRgyDQt9GWINC30LLRg9C60L7QstC40Lwg0YHQuNCz0L3QsNC70L7QvCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiLQotC10YDQvNGW0L3QvtCy0L46INC/0L7QutCw0LfRg9Cy0LDRgtC4INGG0ZYg0YHQv9C+0LLRltGJ0LXQvdC90Y8g0L3QsCDQtdC60YDQsNC90ZYg0LfRliDQt9Cy0YPQutC+0LLQuNC8INGB0LjQs9C90LDQu9C+0LwiPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0iemVuX21vZGVfZHVyYXRpb25fbWludXRlc19zdW1tYXJ5IiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNDM2Nzg3NzQwODA3MjAwMDg0OCI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj4lMSRkINGF0LLQuNC70LjQvdGDICjQtNC+IDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJmZXciPiUxJGQg0YXQstC40LvQuNC90LggKNC00L4gPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy11ci1yUEsvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXVyLXJQSy9zdHJpbmdzLnhtbAppbmRleCBmZmIyOTAwLi41MTlmNDJiIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXVyLXJQSy9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXVyLXJQSy9zdHJpbmdzLnhtbApAQCAtMjIzLDYgKzIyMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2tkb3duIiBtc2dpZD0iODc1MTU0MjUxNDcyNDMzMjg3MyI+Itin2KjavtuMINmF2YLZgdmEINqp2LHbjNq6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiLigI45OTkr4oCOIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2NoaWxkcmVuX2NvdW50X2JyYWNrZXRlZCIgbXNnaWQ9IjE3Njk0MjU0NzMxNjgzNDc4MzkiPiIoPHhsaWZmOmcgaWQ9Ik5PVElGSUNBVElPTkNPVU5UIj4lZDwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+ItmF2YjYp9ivINmF2K7ZgduMINuB24zauiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+Itit2YHYp9i42KrbjCDZiNi22LkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiLigI9BbmRyb2lkINiz2LPZudmFIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNlcl9vd25lcl9sYWJlbCIgbXNnaWQ9IjI4MDQzNTE4OTgwMDEwMzg5NTEiPiLYsNin2KrbjCI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+Itin24zZviDaqdmIINqp24zZhdix25Ig2LPbkiDYqti12YjbjNix24zauiDZhNuM2YbbkiDYp9mI2LEg2YjbjNqI24zZiNiyINio2YbYp9mG25Ig2qnbjCDYp9is2KfYstiqINiv24zYqtinINuB25LblCDbjNuBINin2KzYp9iy2Kog2KfbjNm+INqp2Ygg2KLZviDaqduMINiq2LXYr9uM2YIg2qnbkiDYqNi624zYsSDaqdiz24wg2KjavtuMINmI2YLYqiDaqduM2YXYsdinINin2LPYqti52YXYp9mEINqp2LHZhtuSINqp24wg2KfYrNin2LLYqiDYr9uM2KrbjCDbgduS25QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4i2KfYsdiq2LnYp9i0INqp2Ygg2qnZhtm52LHZiNmEINqp2LHbjNq6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiLYp9uM2b4g2qnZiCDZiNin2KbYqNix24zZudixINqp2YbZudix2YjZhCDaqdix2YbbkiDaqduMINin2KzYp9iy2Kog2K/bjNiq2Kcg24HbktuUIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mbGFzaGxpZ2h0IiBtc2dpZD0iMjE1NTkyMDgxMDEyMTk4NDIxNSI+ItmB2YTbjNi0INmE2KfYptm5INqp2YbZudix2YjZhCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4i2KfbjNm+INqp2Ygg2YHZhNuM2LQg2YTYp9im2bkg2qnZhtm52LHZiNmEINqp2LHZhtuSINqp24wg2KfYrNin2LLYqiDYr9uM2KrYpyDbgduS25QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiLYqNix2KfbgSDYsdin2LPYqiDZgdmI2YYg2YbZhdio2LHYsiDZvtixINqp2KfZhCDaqdix24zauiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQaG9uZSIgbXNnaWQ9IjM3NDA3OTc1NzYxMTM3NjA4MjciPiLYp9uM2b4g2qnZiCDYotm+INqp24wg2YXYr9in2K7ZhNiqINqp25Ig2KjYutuM2LEg2YHZiNmGINmG2YXYqNix2YjauiDZvtixINqp2KfZhCDaqdix2YbbkiDaqduMINin2KzYp9iy2Kog2K/bjNiq2Kcg24HbktuUINin2LMg2qnbkiDZhtiq24zYrNuSINmF24zauiDYutuM2LEg2YXYqtmI2YLYuSDahtin2LHYrNiyINuM2Kcg2qnYp9mE24zauiDbgdmI2LPaqdiq24wg24HbjNq625Qg2YbZiNm5INqp2LHZhNuM2rog2qnbgSDbjNuBINin24zZviDaqdmIINuB2Ybar9in2YXbjCDZhtmF2KjYsdmI2rog2b7YsSDaqdin2YQg2qnYsdmG25Ig2qnbjCDYp9is2KfYstiqINmG24HbjNq6INiv24zYqtinINuB25LblCDZhtmC2LXYp9mGINiv24Eg2KfbjNm+2LMg2KLZviDaqduMINiq2LXYr9uM2YIg2qnbkiDYqNi624zYsSDaqdin2YTbjNq6INqp2LHaqduSINii2b4g2qnbjCDYsdmC2YUg2LXYsdmBINqp2LHZiNinINiz2qnYqtuSINuB24zautuUIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiLigI9JTVMg2qnYp9mEINiz2LHZiNizINiq2qkg2LHYs9in2KbbjCDYrdin2LXZhCDaqdix24zauiI8L3N0cmluZz4KQEAgLTg1OCwxMCArODU3LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJjdXQiIG1zZ2lkPSIzMDkyNTY5NDA4NDM4NjI2MjYxIj4i2qnYp9m524zauiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4i2qnYp9m+24wg2qnYsduM2roiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiLZvtuM2LPZuSDaqdix24zauiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4i2LPYp9iv24Eg2YXYqtmGINqp25Ig2LfZiNixINm+2LEg2b7bjNiz2bkg2qnYsduM2roiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXBsYWNlIiBtc2dpZD0iNTc4MTY4NjA1OTA2MzE0ODkzMCI+Itiq2KjYr9uM2YQg2qnYsduM2rrigKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4i2K3YsNmBINqp2LHbjNq6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiLigI9VUkwg2qnYp9m+24wg2qnYsduM2roiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiLZhdiq2YYg2YXZhtiq2K7YqCDaqdix24zauiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVuZG8iIG1zZ2lkPSI3OTA1Nzg4NTAyNDkxNzQyMzI4Ij4i2qnYp9mE2LnYr9mFINqp2LHbjNq6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiLYr9mI2KjYp9ix24Eg2qnYsduM2roiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4i2YXYqtmGINqp2Kcg2KfZhtiq2K7Yp9ioIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWRkVG9EaWN0aW9uYXJ5IiBtc2dpZD0iNDM1MjE2MTUzNDUxMDA1Nzg3NCI+ItmE2LrYqiDZhduM2rog2LTYp9mF2YQg2qnYsduM2roiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+Itit2LDZgSDaqdix24zauiI8L3N0cmluZz4KQEAgLTExMDcsNiArMTEwOSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiLZiNin2YQg2b7bjNm+2LEg2KrYqNiv24zZhCDaqdix24zauiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+Itin2LfZhNin2Lkg2LPZhtmG25Ig2YjYp9mE2KciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+Iti02LHYtyDZgdix2KfbgdmFINqp2YbZhtiv24EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiLYp9i32YTYp9i5INqp2Kcg2YXYudin2YjZhiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4i4oCPVlBOINmB2LnYp9mEINuB2Yjar9uM2KciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiLigI88eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g2qnbkiDYsNix24zYuduBIFZQTiDZgdi52KfZhCDbgduSIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4i2YbbjNm5INmI2LHaqSDaqdinINmG2LjZhSDaqdix2YbbkiDaqduM2YTYptuSINqG2r7ZiNim24zautuUIjwvc3RyaW5nPgpAQCAtMTQ0MCwxMiArMTQ0Myw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+Itii2b4g2qnbkiDZhdmG2KrYuNmFINmG25Ig2KfZviDaiNmK2bkg2qnYsSDYr9uM2KciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX2RlbGV0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iNzY1MDU3NzM4NzQ5MzEwMTM1MyI+Itii2b4g2qnbkiDZhdmG2KrYuNmFINqp24wg2KzYp9mG2Kgg2LPbkiDYrdiw2YEg2qnYsSDYr9uM2Kcg2q/bjNinIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiLYqNuM2bnYsduMINqp24wg2YXbjNi52KfYryDYqNuB2KrYsSDaqdix2YbbkiDZhduM2rog2YXYr9ivINqp2LHZhtuSINqp24zZhNim25LYjCDYqNuM2bnYsduMINiz24zZiNixINii2b4g2qnbkiDYotmE24Eg2qnbjCDaqdin2LHaqdix2K/ar9uMINqp2YUg2qnYsSDYr9uM2KrbjCDbgduSINin2YjYsSDZiNin2KbYqNix24zYtNmG2Iwg2YXZgtin2YUg2qnbjCDYs9ix2YjYs9iyINin2YjYsSDZvtizINmF2YbYuNixINqp2Kcg2KjbjNi02KrYsSDaiNuM2bnYpyDZhdit2K/ZiNivINqp2LEg2K/bjNiq24wg24HbktuUINin24wg2YXbjNmE2Iwg2b7bjNi62KfZhSDYsdiz2KfZhtuMINin2YjYsSDZhdi32KfYqNmC2Kog2b7YsNuM2LHbjCDZvtixINmF2YbYrdi12LEg2K/bjNqv2LEg2KfbjNm+2LMg2YXZhdqp2YYg24HbkiDYp9izINmI2YLYqiDYqtqpINin2b4g2ojbjNm5INmG24Eg24HZiNq6INis2Kgg2KraqSDYotm+INin2YbbgduM2rog2YbbgSDaqdq+2YjZhNuM2rrblFxuXG7Yotm+INqp2Kcg2KLZhNuBINqG2KfYsdisINuB2YjYqtuSINmI2YLYqiDYqNuM2bnYsduMINiz24zZiNixINiu2YjYryDYqNiu2YjYryDYotmBINuB2Ygg2KzYp9iq24wg24HbktuUIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfdGl0bGUiIG1zZ2lkPSI3NDkzOTg5NzIyNjEwMDA4NzAwIj4i2KfbgdmF24zYqiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSI3MTE4ODI2OTAwNzY3MDQ3MTI1Ij4i2YXYs9iv2YjYryDaqdix2K/bgTog24zbgSDYp9i32YTYp9i52KfYqiDaqdio2r7bjCDZhdiqINiv2qnavtin2KbbjNq6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNjQ0NzY0MDQ0OTkxODQyNzE4NyI+Itm+2LPYqjog2KfYt9mE2KfYudin2Kog2qnbjCDZgduB2LHYs9iqINqp25Ig2YbbjNqG25Ig2K7Yp9mF2YjYtNuMINiz25Ig2K/aqdq+2KfYptuM2roiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNzk5MTE1NzY5NzYwOTU3NTI3MSI+Iti52KfZhTog2K7Yp9mF2YjYtNuMINiz25Ig24zbgSDYp9i32YTYp9i52KfYqiDYr9qp2r7Yp9im24zauiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMTUyMjM4NjM3NzM3MjE1NjU0Ij4i2KfYudmE24w6INin2LfZhNin2LnYp9iqINqp24wg2YHbgdix2LPYqiDZvtixINiz2Kgg2LPbkiDYp9mI2b7YsSDYr9qp2r7Yp9im24zauiDYp9mI2LEg2KLZiNin2LIg2obZhNin2KbbjNq6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+Itin2LHYrNmG2bk6INin2LPaqdix24zZhiDZvtixINiv2qnavtin2KbbjNq6INin2YjYsSDYotmI2KfYsiDahtmE2KfYptuM2roiPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0iemVuX21vZGVfZHVyYXRpb25fbWludXRlc19zdW1tYXJ5IiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNDM2Nzg3NzQwODA3MjAwMDg0OCI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPuKAjyUxJGQg2YXZhtm5INqp24zZhNim25IgKDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+INiq2qkpPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+2KfbjNqpINmF2YbZuSDaqduM2YTYptuSICjYqtqpIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzAiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtdXotclVaL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy11ei1yVVovc3RyaW5ncy54bWwKaW5kZXggYzMzMzYwZC4uZTkwZDkyMSAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy11ei1yVVovc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy11ei1yVVovc3RyaW5ncy54bWwKQEAgLTIyMyw2ICsyMjMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiJRdWxmbGFzaCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJLb250ZW50IHlhc2hpcmlsZGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiJYYXZmc2l6IHVzdWwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiJBbmRyb2lkIHRpemltaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4iU2hheHNpeSI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+Iklsb3ZhZ2Ega2FtZXJhZGFuIGZveWRhbGFuaWIgcmFzbSB2YSB2aWRlb2dhIG9saXNoZ2EgcnV4c2F0IGJlcmFkaS4gQnUgcnV4c2F0IGlsb3ZhZ2Egc2l6ZGFuIHRhc2RpcWxhc2huaSBzb+KAmHJhbWFzZGFuIGthbWVyYWRhbiBmb3lkYWxhbmlzaGdhIGlta29uIGJlcmFkaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4idGVicmFuaXNobmkgYm9zaHFhcmlzaCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4iSWxvdmEgdGVicmFuaXNobGkgc2lnbmFsbGFybmkgYm9zaHFhcmlzaGkgbXVta2luLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiJjaGlyb3EgY2hhcW5hc2hpbmkgYm9zaHFhcmlzaCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4iSWxvdmEgY2hhcW5vcW5pIGJvc2hxYXJpc2hpIG11bWtpbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiJ0ZWxlZm9uIHJhcWFtbGFyaWdhIHRvZ+KAmHJpZGFuIHRv4oCYZ+KAmHJpIHFv4oCYbmfigJhpcm9xIHFpbGlzaCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQaG9uZSIgbXNnaWQ9IjM3NDA3OTc1NzYxMTM3NjA4MjciPiJJbG92YWdhIHNpem5pbmcgeW9yZGFtaW5naXpzaXogdGVsZWZvbmdhIHFv4oCYbmfigJhpcm9xIHFpbGlzaCBpbWtvbmluaSBiZXJhZGkuIEJ1IGt1dGlsbWFnYW4gcW/igJhuZ+KAmGlyb3FsYXJuaSBhbWFsZ2Egb3NoaXJpc2hpIHlva2kgb3J0aXFjaGEgdG/igJhsb3ZsYXJuaSB5dXphZ2Ega2VsdGlyaXNoaSBtdW1raW4uIFNodW5nYSBl4oCZdGlib3IgcWlsaW5raSwgdSBmYXZxdWxvZGRhIHRlbGVmb24gcmFxYW1sYXJpZ2EgcW/igJhuZ+KAmGlyb3FsYXIgcWlsaXNoZ2EgcnV4c2F0IGJlcm1heWRpLiBaYXJhcmxpIGlsb3ZhbGFyIHNpemRhbiBzb+KAmHJhbWFzZGFuIHFv4oCYbmfigJhpcm9xbGFybmkgYW1hbGdhIG9zaGlyaWIsIHB1bGluZ2l6bmkgc2FyZmxhc2hpIG11bWtpbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ltc0NhbGxTZXJ2aWNlIiBtc2dpZD0iMzU3NDk0Mzg0NzE4MTc5MzkxOCI+IklNUyBxb+KAmG5n4oCYaXJvcSB4aXptYXRpZ2Ega2lyaXNoIjwvc3RyaW5nPgpAQCAtODU4LDEwICs4NTcsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiJLZXNpc2giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+Ik51c3hhIG9saXNoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzdGUiIG1zZ2lkPSI1NjI5ODgwODM2ODA1MDM2NDMzIj4iSm95bGFzaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4iT2RkaXkgbWF0biBzaWZhdGlkYSBqb3lsYXNoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiJBbG1hc2h0aXJpc2giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4iT+KAmGNoaXJpc2giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IlVSTOKAmWRhbiBudXN4YSBvbGlzaCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+Ik1hdG5uaSB0YW5sYXNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiJCZWtvciBxaWxpc2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+IlFheXRhcmlzaCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiJNYXRuaSBiZWxnaWxhc2giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4iTHVn4oCYYXRnYSBxb+KAmHNoaXNoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiJP4oCYY2hpcmlzaCI8L3N0cmluZz4KQEAgLTExMDcsNiArMTEwOSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiJGb24gcmFzbWluaSBv4oCYemdhcnRpcmlzaCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+IkJpbGRpcmlzaG5vbWEgdGluZ2xvdmNoaXNpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiJTaGFydGxhcm5pIHRhcWRpbSBldHV2Y2hpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2Fzc2lzdGFudF9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iOTA5NDU2MDU1NTY5MTAyOTUyIj4iQmlsZGlyaXNobm9tYSB5b3JkYW1jaGlzaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iVlBOIGZhb2xsYXNodGlyaWxkaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+IlZQTiA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4gdG9tb25pZGFuIGZhb2xsYXNodGlyaWxnYW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiJUYXJtb3FuaSBib3NocWFyaXNoIHVjaHVuIGJvc2luZy4iPC9zdHJpbmc+CkBAIC0xNDQwLDEyICsxNDQzLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4iQWRtaW5pc3RyYXRvcmluZ2l6IHRvbW9uaWRhbiB5YW5naWxhbmRpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiJBZG1pbmlzdHJhdG9yaW5naXogdG9tb25pZGFuIG/igJhjaGlyaWxnYW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTk2MDQzMTEyMzgxNjI1MzAzNCI+IkJhdGFyZXlhIHF1dnZhdGluaSB1em9xcm9xIHZhcXRnYSB5ZXRrYXppc2ggdWNodW4gcXV2dmF0IHRlamFzaCBmdW5rc2l5YXNpIHF1cmlsbWFuZ2l6IHVudW1kb3JsaWdpbmkga2FtYXl0aXJhZGkgaGFtZGEgdW5pbmcgdGVicmFuaXNoaSB2YSBvcnFhIGZvbmRhIGludGVybmV0ZGFuIGZveWRhbGFuaXNoaW5pIGNoZWtsYXlkaS4gU2lueHJvbmxhbmlzaG5pIHRhbGFiIHFpbGFkaWdhbiBlLXBvY2h0YSwgeGFiYXIgYWxtYXNoaW51diB2YSBib3NocWEgaWxvdmFsYXIgZXNhIHFhY2hvbmtpIHVsYXJuaSBpc2hnYSB0dXNoaXJnYW5pbmdpemRhIHlhbmdpbGFuYWRpLlxuXG5RdXJpbG1hIHF1dnZhdCBvbGF5b3RnYW5kYSBxdXZ2YXQgdGVqYXNoIGZ1bmtzaXlhc2kgYXZ0b21hdGlrIHRhcnpkYSBv4oCYY2hhZGkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfdGl0bGUiIG1zZ2lkPSI3NDkzOTg5NzIyNjEwMDA4NzAwIj4iTXVoaW1saWdpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiJCbG9rbGFuZ2FuOiBidSBiaWxkaXJpc2hub21hbGFyIGJvc2hxYSBrb+KAmHJzYXRpbG1hc2luIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNjQ0NzY0MDQ0OTkxODQyNzE4NyI+IlBhc3Q6IGJpbGRpcmlzaG5vbWFsYXIgcm/igJh5eGF0aW5pbmcgb3hpcmlkYSBvdm96c2l6IGtv4oCYcnNhdGlsc2luIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiJPZGRpeTogYnUgYmlsZGlyaXNobm9tYWxhciBvdm96c2l6IGtv4oCYcnNhdGlsc2luIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiJZdXFvcmk6IGJpbGRpcmlzaG5vbWFsYXIgcm/igJh5eGF0aW5pbmcgYm9zaGlkYSBvdm96IGJpbGFuIGtv4oCYcnNhdGlsc2luIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+IlNob3NoaWxpbmNoOiBiYXJjaGEgb3luYWxhciB1c3RpZGEgc2lnbmFsIG92b3ppIGJpbGFuIGtv4oCYcnNhdGlsc2luIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj4lMSRkIGRhcWlxYSAoPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4gZ2FjaGEpPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+QmlyIGRhcWlxYSAoPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMCI+JTIkczwveGxpZmY6Zz4gZ2FjaGEpPC9pdGVtPgpAQCAtMTUxMSw2ICsxNTA4LDYgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRkPC94bGlmZjpnPiB0YSB0YW5sYW5kaTwvaXRlbT4KICAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X25vdGlmaWNhdGlvbl90b3BpY19sYWJlbCIgbXNnaWQ9IjIyNzU4NjE0NTc5MTg3MDgyOSI+IkJvc2hxYSBiZWxnaWxhciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV90b3BpYyIgbXNnaWQ9IjM1NzIyODA0Mzk4ODAwMjMyMzMiPiJVc2hidSBiaWxkaXJpc2hub21hbGFybmluZyBtdWhpbWxpZ2luaSBv4oCYcm5hdGdhbnNpei4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fcGVyc29uIiBtc2dpZD0iOTE2MDEzMzU5NzI2MjkzODI5NiI+IkphbGIgcWlsaW5nYW4gb2RhbWxhciB0dWZheWxpIGJ1IG11aGltLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV90b3BpYyIgbXNnaWQ9IjM1NzIyODA0Mzk4ODAwMjMyMzMiPiJTaXogdXNoYnUgYmlsZGlyaXNobm9tYWxhcm5pbmcgbXVoaW1saWdpbmkgYmVsZ2lsYWdhbnNpei4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fcGVyc29uIiBtc2dpZD0iOTE2MDEzMzU5NzI2MjkzODI5NiI+IkJ1IG9kYW1sYXIgc2l6IHVjaHVuIG11aGltLiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy12aS9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtdmkvc3RyaW5ncy54bWwKaW5kZXggNDllMTRkZi4uMzFlMDkwYiAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy12aS9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXZpL3N0cmluZ3MueG1sCkBAIC0yMjMsNiArMjIzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9ja2Rvd24iIG1zZ2lkPSI4NzUxNTQyNTE0NzI0MzMyODczIj4iS2jDs2EgbmdheSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJO4buZaSBkdW5nIGLhu4sg4bqpbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+IkNo4bq/IMSR4buZIGFuIHRvw6BuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4iSOG7hyB0aOG7kW5nIEFuZHJvaWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+IkPDoSBuaMOibiI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IkNobyBwaMOpcCDhu6luZyBk4bulbmcgY2jhu6VwIOG6o25oIHbDoCBxdWF5IHZpZGVvIGLhurFuZyBtw6F5IOG6o25oLiBRdXnhu4FuIG7DoHkgY2hvIHBow6lwIOG7qW5nIGThu6VuZyBz4butIGThu6VuZyBtw6F5IOG6o25oIGLhuqV0IGvhu7MgbMO6YyBuw6BvIG3DoCBraMO0bmcgY+G6p24gc+G7sSB4w6FjIG5o4bqtbiBj4bunYSBi4bqhbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4ia2nhu4NtIHNvw6F0IHJ1bmciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+IkNobyBwaMOpcCDhu6luZyBk4bulbmcga2nhu4NtIHNvw6F0IGLhu5kgcnVuZy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4ia2nhu4NtIHNvw6F0IMSRw6huIG5ow6F5Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiJDaG8gcGjDqXAg4bupbmcgZOG7pW5nIGtp4buDbSBzb8OhdCDEkcOobiBuaMOheS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiJn4buNaSB0cuG7sWMgdGnhur9wIHPhu5EgxJFp4buHbiB0aG/huqFpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+IkNobyBwaMOpcCDhu6luZyBk4bulbmcgZ+G7jWkgY8OhYyBz4buRIMSRaeG7h24gdGhv4bqhaSBtw6Aga2jDtG5nIGPhuqduIHPhu7EgY2FuIHRoaeG7h3AgY+G7p2EgYuG6oW4uIFZp4buHYyBuw6B5IGPDsyB0aOG7gyBk4bqrbiDEkeG6v24gY8OhYyBraG/huqNuIHBow60gaG/hurdjIGN14buZYyBn4buNaSBraMO0bmcgbW9uZyBtdeG7kW4uIEzGsHUgw70gcuG6sW5nIHF1eeG7gW4gbsOgeSBraMO0bmcgY2hvIHBow6lwIOG7qW5nIGThu6VuZyBn4buNaSBjw6FjIHPhu5Ega2jhuqluIGPhuqVwLiBDw6FjIOG7qW5nIGThu6VuZyDEkeG7mWMgaOG6oWkgY8OzIHRo4buDIGtoaeG6v24gYuG6oW4gdOG7kW4gdGnhu4FuIGRvIHRo4buxYyBoaeG7h24gY3Xhu5ljIGfhu41pIG3DoCBraMO0bmcgY+G6p24gc+G7sSB4w6FjIG5o4bqtbiBj4bunYSBi4bqhbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ltc0NhbGxTZXJ2aWNlIiBtc2dpZD0iMzU3NDk0Mzg0NzE4MTc5MzkxOCI+InRydXkgY+G6rXAgZOG7i2NoIHbhu6UgZ+G7jWkgxJFp4buHbiBxdWEgSU1TIjwvc3RyaW5nPgpAQCAtODU4LDEwICs4NTcsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiJD4bqvdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4iU2FvIGNow6lwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzdGUiIG1zZ2lkPSI1NjI5ODgwODM2ODA1MDM2NDMzIj4iRMOhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4iRMOhbiBkxrDhu5tpIGThuqFuZyB2xINuIGLhuqNuIHRodeG6p24gdMO6eSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4iVGhheSB0aOG6vy4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZSIgbXNnaWQ9IjYwOTg2ODQ4NDQwMjE2OTc3ODkiPiJYw7NhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiJTYW8gY2jDqXAgVVJMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4iQ2jhu41uIHbEg24gYuG6o24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmRvIiBtc2dpZD0iNzkwNTc4ODUwMjQ5MTc0MjMyOCI+Ikhvw6BuIHTDoWMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+IkzDoG0gbOG6oWkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4iTOG7sWEgY2jhu41uIHbEg24gYuG6o24iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4iVGjDqm0gdsOgbyB04burIMSRaeG7g24iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+IljDs2EiPC9zdHJpbmc+CkBAIC0xMTA3LDYgKzExMDksNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4iVGhheSDEkeG7lWkgaMOsbmggbuG7gW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiJUcsOsbmggeOG7rSBsw70gdGjDtG5nIGLDoW8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+IlRyw6xuaCBjdW5nIGPhuqVwIMSRaeG7gXUga2nhu4duIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2Fzc2lzdGFudF9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iOTA5NDU2MDU1NTY5MTAyOTUyIj4iVHLhu6MgbMO9IHRow7RuZyBiw6FvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiLEkMOjIGvDrWNoIGhv4bqhdCBWUE4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiJWUE4gxJHGsOG7o2MgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IGvDrWNoIGhv4bqhdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0IiBtc2dpZD0iMzAxMTMwNjYwNzEyNjQ1MDMyMiI+IkNo4bqhbSDEkeG7gyBxdeG6o24gbMO9IG3huqFuZy4iPC9zdHJpbmc+CkBAIC0xNDQwLDEyICsxNDQzLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4ixJDGsOG7o2MgY+G6rXAgbmjhuq10IGLhu59pIHF14bqjbiB0cuG7iyB2acOqbiBj4bunYSBi4bqhbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4ixJDDoyBi4buLIHjDs2EgYuG7n2kgcXXhuqNuIHRy4buLIHZpw6puIGPhu6dhIGLhuqFuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiLEkOG7gyBnacO6cCB0xINuZyB0deG7lWkgdGjhu40gcGluLCB0csOsbmggdGnhur90IGtp4buHbSBwaW4gc+G6vSBnaeG6o20gaGnhu4d1IHN14bqldCB0aGnhur90IGLhu4sgY+G7p2EgYuG6oW4gdsOgIGjhuqFuIGNo4bq/IHJ1bmcsIGThu4tjaCB24bulIHbhu4sgdHLDrSB2w6AgaOG6p3UgaOG6v3QgZOG7ryBsaeG7h3UgbuG7gW4uIEVtYWlsLCBuaOG6r24gdGluIHbDoCBjw6FjIOG7qW5nIGThu6VuZyBraMOhYyBk4buxYSB0csOqbiDEkeG7k25nIGLhu5kgaMOzYSBjw7MgdGjhu4Mga2jDtG5nIGPhuq1wIG5o4bqtdCBu4bq/dSBi4bqhbiBraMO0bmcgbeG7nyBjaMO6bmcuXG5cblRyw6xuaCB0aeG6v3Qga2nhu4dtIHBpbiB04buxIMSR4buZbmcgdOG6r3Qga2hpIHRoaeG6v3QgYuG7iyBj4bunYSBi4bqhbiDEkWFuZyBz4bqhYy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV90aXRsZSIgbXNnaWQ9Ijc0OTM5ODk3MjI2MTAwMDg3MDAiPiJN4bupYyDEkeG7mSBxdWFuIHRy4buNbmciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iNzExODgyNjkwMDc2NzA0NzEyNSI+IsSQw6MgY2jhurduOiBLaMO0bmcgYmFvIGdp4budIGhp4buDbiB0aOG7iyBjw6FjIHRow7RuZyBiw6FvIG7DoHkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4iVGjhuqVwOiBIaeG7g24gdGjhu4sgaW0gbOG6t25nIOG7nyBjdeG7kWkgZGFuaCBzw6FjaCB0aMO0bmcgYsOhbyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI3OTkxMTU3Njk3NjA5NTc1MjcxIj4iQsOsbmggdGjGsOG7nW5nOiBIaeG7g24gdGjhu4sgaW0gbOG6t25nIGPDoWMgdGjDtG5nIGLDoW8gbsOgeSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMTUyMjM4NjM3NzM3MjE1NjU0Ij4iQ2FvOiBIaeG7g24gdGjhu4sg4bufIMSR4bqndSBkYW5oIHPDoWNoIHRow7RuZyBiw6FvIHbDoCBwaMOhdCByYSDDom0gdGhhbmgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSIxMTUzNjkzMDgwNDY3OTA0NDc0Ij4iS2jhuqluIGPhuqVwOiBIaeG7g24gdGjhu4sgdHLDqm4gbcOgbiBow6xuaCB2w6AgcGjDoXQgcmEgw6JtIHRoYW5oIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5Ucm9uZyAlMSRkIHBow7p0IChjaG8gxJHhur9uIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPlRyb25nIG3hu5l0IHBow7p0IChjaG8gxJHhur9uIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzAiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtemgtckNOL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy16aC1yQ04vc3RyaW5ncy54bWwKaW5kZXggMTgwM2Y5OS4uYzVjZDU5YSAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy16aC1yQ04vc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy16aC1yQ04vc3RyaW5ncy54bWwKQEAgLTIyMyw2ICsyMjMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiLnq4vljbPplIHlrpoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+Ijk5OSsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fY2hpbGRyZW5fY291bnRfYnJhY2tldGVkIiBtc2dpZD0iMTc2OTQyNTQ3MzE2ODM0NzgzOSI+Iu+8iDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+IOadoe+8iSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLlhoXlrrnlt7LpmpDol48iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiLlronlhajmqKHlvI8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiJBbmRyb2lkIOezu+e7nyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4i5Liq5Lq6Ijwvc3RyaW5nPgpAQCAtMzUzLDggKzM1NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4i5YWB6K646K+l5bqU55So5L2/55So55u45py65ouN5pGE54Wn54mH5ZKM6KeG6aKR44CC5q2k5p2D6ZmQ5Y+v6K6p6K+l5bqU55So6ZqP5pe25L2/55So55u45py677yM6ICM5peg6ZyA5oKo55qE56Gu6K6k44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl92aWJyYXRlIiBtc2dpZD0iNzY5NjQyNzAyNjA1NzcwNTgzNCI+IuaOp+WItuaMr+WKqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4i5YWB6K645bqU55So5o6n5Yi25oyv5Yqo5Zmo44CCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mbGFzaGxpZ2h0IiBtc2dpZD0iMjE1NTkyMDgxMDEyMTk4NDIxNSI+IuaOp+WItumXquWFieeBryI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4i5YWB6K645bqU55So5o6n5Yi26Zeq5YWJ54Gv44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4i55u05o6l5ouo5omT55S16K+d5Y+356CBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+IuWFgeiuuOivpeW6lOeUqOWcqOaCqOacquaJp+ihjOaTjeS9nOeahOaDheWGteS4i+aLqOaJk+eUteivneWPt+eggeOAguatpOadg+mZkOWPr+iDveS8muWvvOiHtOaEj+WkluaUtui0ueaIluWRvOWPq+OAguivt+azqOaEj++8jOatpOadg+mZkOS4jeWFgeiuuOivpeW6lOeUqOaLqOaJk+e0p+aApeeUteivneWPt+eggeOAguaBtuaEj+W6lOeUqOWPr+mAmui/h+aLqOaJk+eUteivneS6p+eUn+ebuOWFs+i0ueeUqO+8jOiAjOaXoOmcgOaCqOeahOehruiupOOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiIG1zZ2lkPSIzNTc0OTQzODQ3MTgxNzkzOTE4Ij4i5L2/55So5Y2z5pe26YCa6K6v6YCa6K+d5pyN5YqhIjwvc3RyaW5nPgpAQCAtODU4LDEwICs4NTcsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiLliarliIciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+IuWkjeWItiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+IueymOi0tCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4i5Lul57qv5paH5pys5b2i5byP57KY6LS0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiLmm7/mjaIuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4i5Yig6ZmkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiLlpI3liLbnvZHlnYAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiLpgInmi6nmloflrZciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmRvIiBtc2dpZD0iNzkwNTc4ODUwMjQ5MTc0MjMyOCI+IuaSpOa2iCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlZG8iIG1zZ2lkPSI3NzU5NDY0ODc2NTY2ODAzODg4Ij4i6YeN5YGaIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGV4dFNlbGVjdGlvbkNBQlRpdGxlIiBtc2dpZD0iNTIzNjg1MDM5NDM3MDgyMDM1NyI+IuaWh+Wtl+mAieaLqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiLmt7vliqDliLDlrZflhbgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+IuWIoOmZpCI8L3N0cmluZz4KQEAgLTExMDcsNiArMTEwOSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiLmm7TmlLnlo4HnurgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiLpgJrnn6XkvqblkKzlmagiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+IuadoeS7tuaPkOS+m+eoi+W6jyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9hc3Npc3RhbnRfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjkwOTQ1NjA1NTU2OTEwMjk1MiI+IumAmuefpeWKqeaJiyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4i5bey5r+A5rS7VlBOIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+5bey5r+A5rS7VlBOIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4i6Kem5pG45Y+v566h55CG572R57uc44CCIjwvc3RyaW5nPgpAQCAtMTQ0MCwxMiArMTQ0Myw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+IueUseaCqOWNleS9jeeahOeuoeeQhuWRmOabtOaWsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4i5bey6KKr566h55CG5ZGY5Yig6ZmkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiLkuLrkuoblu7bplb/nlLXmsaDnmoTnu63oiKrml7bpl7TvvIzoioLnlLXliqnmiYvkvJrpmY3kvY7orr7lpIfnmoTmgKfog73vvIzlubbpmZDliLbmjK/liqjjgIHkvY3nva7kv6Hmga/mnI3liqHlkozlpKfpg6jliIblkI7lj7DmtYHph4/jgILlr7nkuo7nlLXlrZDpgq7ku7bjgIHogYrlpKnlt6XlhbfnrYnkvp3otZbkuo7lkIzmraXlip/og73nmoTlupTnlKjvvIzlj6/og73opoHmiZPlvIDov5nnsbvlupTnlKjml7bmiY3og73mlLbliLDmlrDkv6Hmga/jgIJcblxu6IqC55S15Yqp5omL5Lya5Zyo6K6+5aSH5YWF55S15pe26Ieq5Yqo5YWz6Zet44CCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfdGl0bGUiIG1zZ2lkPSI3NDkzOTg5NzIyNjEwMDA4NzAwIj4i6YeN6KaB5oCnIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiLlsY/olL3vvJrkuIDlvovkuI3mmL7npLrov5nkupvpgJrnn6UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4i5L2O77ya5Zyo6YCa55+l5YiX6KGo5bqV6YOo5pi+56S677yM5LiN5Y+R5Ye65o+Q56S66Z+zIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiLkuIDoiKzvvJrmmL7npLrov5nkupvpgJrnn6XvvIzkvYbkuI3lj5Hlh7rmj5DnpLrpn7MiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzE1MjIzODYzNzczNzIxNTY1NCI+IumrmO+8muWcqOmAmuefpeWIl+ihqOmhtumDqOaYvuekuu+8jOW5tuWPkeWHuuaPkOekuumfsyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiLntKfmgKXvvJrlnKjlsY/luZXkuIrmjIHnu63mmL7npLrvvIzlubblj5Hlh7rmj5DnpLrpn7MiPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0iemVuX21vZGVfZHVyYXRpb25fbWludXRlc19zdW1tYXJ5IiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNDM2Nzg3NzQwODA3MjAwMDg0OCI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPiUxJGQg5YiG6ZKf77yI5YiwPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz7vvIk8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj4xIOWIhumSn++8iOWIsDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzAiPiUyJHM8L3hsaWZmOmc+77yJPC9pdGVtPgpAQCAtMTUxMiw1ICsxNTA5LDUgQEAKICAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X25vdGlmaWNhdGlvbl90b3BpY19sYWJlbCIgbXNnaWQ9IjIyNzU4NjE0NTc5MTg3MDgyOSI+IuWFtuS7liI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV90b3BpYyIgbXNnaWQ9IjM1NzIyODA0Mzk4ODAwMjMyMzMiPiLov5nkupvpgJrnn6XnmoTph43opoHmgKfnlLHmgqjmnaXorr7nva7jgIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fcGVyc29uIiBtc2dpZD0iOTE2MDEzMzU5NzI2MjkzODI5NiI+Iui/meadoemAmuefpea2ieWPiueJueWumuS6uuWjq++8jOWboOatpOiiq+W9kuS4uumHjeimgemAmuefpeOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV9wZXJzb24iIG1zZ2lkPSI5MTYwMTMzNTk3MjYyOTM4Mjk2Ij4i6L+Z5p2h6YCa55+l5raJ5Y+K54m55a6a55qE5Lq677yM5Zug5q2k6KKr5b2S5Li66YeN6KaB6YCa55+l44CCIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXpoLXJISy9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtemgtckhLL3N0cmluZ3MueG1sCmluZGV4IDRiNjMyMGMuLjM2YmEyYWQ2IDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXpoLXJISy9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXpoLXJISy9zdHJpbmdzLnhtbApAQCAtMjIzLDYgKzIyMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2tkb3duIiBtc2dpZD0iODc1MTU0MjUxNDcyNDMzMjg3MyI+Iueri+WNs+mOluWumiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLlhaflrrnlt7LpmrHol48iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiLlronlhajmqKHlvI8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiJBbmRyb2lkIOezu+e1sSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4i5YCL5Lq6Ijwvc3RyaW5nPgpAQCAtMzUzLDggKzM1NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4i5YWB6Kix5oeJ55So56iL5byP5L2/55So55u45qmf5ouN54Wn5ZKM6YyE5b2x44CC6YCZ6aCF5qyK6ZmQ5YWB6Kix5oeJ55So56iL5byP6Zqo5pmC5L2/55So55u45qmf77yM6ICM5LiN6ZyA57aT5oKo56K66KqN44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl92aWJyYXRlIiBtc2dpZD0iNzY5NjQyNzAyNjA1NzcwNTgzNCI+IuaOp+WItumch+WLlSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4i5YWB6Kix5oeJ55So56iL5byP5o6n5Yi26ZyH5YuV44CCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mbGFzaGxpZ2h0IiBtc2dpZD0iMjE1NTkyMDgxMDEyMTk4NDIxNSI+IuaOp+WItumWg+WFieeHiCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4i5YWB6Kix5oeJ55So56iL5byP5o6n5Yi26ZaD5YWJ54eI44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4i55u05o6l5pKl5omT6Zu76Kmx6Jmf56K8Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+IuWFgeioseaHieeUqOeoi+W8j+e5numBjuaCqOiHquihjOaSpeaJk+mbu+ipseiZn+eivO+8jOS9huWPr+iDveacg+eUoueUn+acqumgkOacn+eahOiyu+eUqOaIluaSpeaJk+acqumgkOacn+eahOmbu+ipseOAguazqOaEj++8mumAmemgheasiumZkOS4jeWFgeioseaHieeUqOeoi+W8j+aSpeaJk+e3iuaApembu+ipseOAguaDoeaEj+aHieeUqOeoi+W8j+WPr+iDveacque2k+aCqOeiuuiqjeaTheiHquaSpeaJk+mbu+ipse+8jOWinuWKoOaCqOeahOaUr+WHuuOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiIG1zZ2lkPSIzNTc0OTQzODQ3MTgxNzkzOTE4Ij4i5L2/55SoIElNUyDpgJroqbHmnI3li5kiPC9zdHJpbmc+CkBAIC04NTgsMTAgKzg1NywxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+IuWJquS4iyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4i6KSH6KO9Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzdGUiIG1zZ2lkPSI1NjI5ODgwODM2ODA1MDM2NDMzIj4i6LK85LiKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiLku6XntJTmloflrZfmoLzlvI/osrzkuIoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXBsYWNlIiBtc2dpZD0iNTc4MTY4NjA1OTA2MzE0ODkzMCI+IuWPluS7oy4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZSIgbXNnaWQ9IjYwOTg2ODQ4NDQwMjE2OTc3ODkiPiLliKrpmaQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+Iuikh+ijvee2suWdgCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+IumBuOWPluaWh+WtlyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVuZG8iIG1zZ2lkPSI3OTA1Nzg4NTAyNDkxNzQyMzI4Ij4i5b6p5Y6fIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiLlj5bmtojlvqnljp8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4i6YG45Y+W5paH5a2XIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWRkVG9EaWN0aW9uYXJ5IiBtc2dpZD0iNDM1MjE2MTUzNDUxMDA1Nzg3NCI+IuWKoOWFpeWtl+WFuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4i5Yiq6ZmkIjwvc3RyaW5nPgpAQCAtMTEwNyw2ICsxMTA5LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+IuiuiuabtOahjOW4gyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+IumAmuefpeaOpeiBveWZqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbmRpdGlvbl9wcm92aWRlcl9zZXJ2aWNlX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMzIxMzQzMzUyOTA2NTI0NTY0Ij4i5qKd5Lu25L6b5oeJ5ZWGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2Fzc2lzdGFudF9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iOTA5NDU2MDU1NTY5MTAyOTUyIj4i6YCa55+l5bCP5bmr5omLIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJWUE4g5bey5ZWf55So44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IOW3suWVn+eUqCBWUE4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiLovJXop7jljbPlj6/nrqHnkIbntrLntaHjgIIiPC9zdHJpbmc+CkBAIC0xNDQwLDEyICsxNDQzLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4i5bey55Sx5oKo55qE566h55CG5ZOh5pu05pawIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiLlt7LnlLHnrqHnkIblk6HliKrpmaQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTk2MDQzMTEyMzgxNjI1MzAzNCI+IuevgOe0hOmbu+axoOeUqOmHj+aooeW8j+acieWKqeaWvOW7tumVt+mbu+axoOWjveWRve+8jOS9humAmeacg+mZjeS9juijnee9ruaViOiDve+8jOS4pumZkOWItumch+WLleOAgeWumuS9jeacjeWLmeWPiuWkp+mDqOWIhuiDjOaZr+aVuOaTmuWCs+i8uOOAgumZpOmdnuaCqOWVn+eUqO+8jOWQpuWJh+mbu+mDteOAgeefreioiuWPiuWFtuS7lumcgOimgeS9v+eUqOWQjOatpeWKn+iDveeahOaHieeUqOeoi+W8j+Wdh+S4jeacg+abtOaWsOOAglxuXG7nlbboo53nva7lhYXpm7vmmYLvvIznr4DntITpm7vmsaDnlKjph4/mqKHlvI/mnIPoh6rli5Xpl5zplonjgIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV90aXRsZSIgbXNnaWQ9Ijc0OTM5ODk3MjI2MTAwMDg3MDAiPiLph43opoHmgKciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iNzExODgyNjkwMDc2NzA0NzEyNSI+IuW3suWwgemOlu+8muawuOS4jemhr+ekuumAmeS6m+mAmuefpSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjY0NDc2NDA0NDk5MTg0MjcxODciPiLkvY7vvJrku6XpnZzpn7PmlrnlvI/poa/npLrlnKjpgJrnn6XmuIXllq7lupXpg6giPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNzk5MTE1NzY5NzYwOTU3NTI3MSI+IuS4gOiIrO+8muS7pemdnOmfs+aWueW8j+mhr+ekuumAmeS6m+mAmuefpSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMTUyMjM4NjM3NzM3MjE1NjU0Ij4i6auY77ya6aGv56S65Zyo6YCa55+l5riF5Zau6aCC6YOo5Lim55m85Ye66Z+z5pWIIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+Iue3iuaApe+8muS4jeaZguaWvOieouW5leWHuuePvuS4pueZvOWHuumfs+aViCI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+6ZyA5pmCICUxJGQg5YiG6ZCYICjlrozmiJDmmYLplpPvvJo8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj7pnIDmmYIgMSDliIbpkJggKOWujOaIkOaZgumWk++8mjx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzAiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtemgtclRXL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy16aC1yVFcvc3RyaW5ncy54bWwKaW5kZXggOThmMTg0OC4uNzJlYTUyMyAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy16aC1yVFcvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy16aC1yVFcvc3RyaW5ncy54bWwKQEAgLTIyMyw2ICsyMjMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiLnq4vljbPpjpblrpoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+Iui2hemBjiA5OTkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fY2hpbGRyZW5fY291bnRfYnJhY2tldGVkIiBtc2dpZD0iMTc2OTQyNTQ3MzE2ODM0NzgzOSI+Iig8eGxpZmY6ZyBpZD0iTk9USUZJQ0FUSU9OQ09VTlQiPiVkPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4i5YWn5a655bey6Zqx6JePIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4i5a6J5YWo5qih5byPIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4iQW5kcm9pZCDns7vntbEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+IuWAi+S6uiI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IuWFgeioseaHieeUqOeoi+W8j+S9v+eUqOebuOapn+aLjeeFp+WSjOmMhOW9seOAgumAmemgheasiumZkOWPr+iuk+aHieeUqOeoi+W8j+maqOaZguS9v+eUqOebuOapn++8jOiAjOS4jemcgOiri+axguaCqOmAsuihjOeiuuiqjeOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiLmjqfliLbpnIfli5UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+IuWFgeioseaHieeUqOeoi+W8j+aOp+WItumch+WLleOAgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiLmjqfliLbploPlhYnnh4giPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+IuWFgeioseaHieeUqOeoi+W8j+aOp+WItumWg+WFieeHiOOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+IuebtOaOpeaSpeaJk+mbu+ipseiZn+eivCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQaG9uZSIgbXNnaWQ9IjM3NDA3OTc1NzYxMTM3NjA4MjciPiLlhYHoqLHmh4nnlKjnqIvlvI/oh6rooYzmkqXmiZPpm7voqbHvvIzkvYblj6/og73nlKLnlJ/pnZ7poJDmnJ/nmoTosrvnlKjmiJbmkqXmiZPpnZ7poJDmnJ/nmoTpm7voqbHjgILms6jmhI/vvJrpgJnpoIXmrIrpmZDkuI3lhYHoqLHmh4nnlKjnqIvlvI/mkqXmiZPnt4rmgKXpm7voqbHjgILmg6HmhI/mh4nnlKjnqIvlvI/lj6/og73liKnnlKjmraTlip/og73mk4Xoh6rmkqXmiZPpm7voqbHvvIzlop7liqDmgqjkuI3lv4XopoHnmoTpoY3lpJbmlK/lh7rjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ltc0NhbGxTZXJ2aWNlIiBtc2dpZD0iMzU3NDk0Mzg0NzE4MTc5MzkxOCI+IuWtmOWPliBJTVMg5pKl6Jmf5pyN5YuZIjwvc3RyaW5nPgpAQCAtODU4LDEwICs4NTcsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiLliarkuIsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+Iuikh+ijvSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+IuiyvOS4iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4i5Lul57SU5paH5a2X6LK85LiKIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiLlj5bku6PigKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4i5Yiq6ZmkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiLopIfoo73ntrLlnYAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiLpgbjlj5bmloflrZciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmRvIiBtc2dpZD0iNzkwNTc4ODUwMjQ5MTc0MjMyOCI+IuW+qeWOnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlZG8iIG1zZ2lkPSI3NzU5NDY0ODc2NTY2ODAzODg4Ij4i6YeN5YGaIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGV4dFNlbGVjdGlvbkNBQlRpdGxlIiBtc2dpZD0iNTIzNjg1MDM5NDM3MDgyMDM1NyI+IumBuOWPluaWh+WtlyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiLliqDlhaXlrZflhbgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+IuWIqumZpCI8L3N0cmluZz4KQEAgLTExMDcsNiArMTEwOSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiLorormm7TmoYzluIMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiLpgJrnn6XmjqXogb3lmagiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+IuaineS7tuaPkOS+m+iAhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9hc3Npc3RhbnRfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjkwOTQ1NjA1NTU2OTEwMjk1MiI+IumAmuefpeWwj+W5q+aJiyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iVlBOIOW3suWVn+eUqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDlt7LllZ/nlKggVlBOIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4i6LyV6Ke45Y2z5Y+v566h55CG57ay6Lev44CCIjwvc3RyaW5nPgpAQCAtMTQ0MCwxMiArMTQ0Myw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+IueUseaCqOeahOeuoeeQhuWToeabtOaWsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4i5bey6YGt566h55CG5ZOh5Yiq6ZmkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiLnr4DntITogJfpm7vph4/mqKHlvI/mnIPpgI/pgY7pmY3kvY7oo53nva7mlYjog73jgIHpnIfli5XpmZDliLbjgIHlrprkvY3mnI3li5npmZDliLblkozlpKflpJrmlbjog4zmma/os4fmlpnpgYvkvZzpmZDliLbnrYnmlrnlvI/vvIzlu7bplbfpm7vmsaDnuozoiKrlipvjgILmraTlpJbvvIzlpoLmnpzmnKrplovllZ/pm7vlrZDpg7Xku7bjgIHnsKHoqIrlkozlhbbku5bpnIDopoHkvb/nlKjlkIzmraXlip/og73nmoTmh4nnlKjnqIvlvI/vvIzns7vntbHlsIfkuI3mnIPoh6rli5Xmm7TmlrDpgJnkupvmh4nnlKjnqIvlvI/jgIJcblxu55W25oKo54K66KOd572u5YWF6Zu75pmC77yM56+A57SE6ICX6Zu76YeP5qih5byP5pyD6Ieq5YuV6Zec6ZaJ44CCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfdGl0bGUiIG1zZ2lkPSI3NDkzOTg5NzIyNjEwMDA4NzAwIj4i6YeN6KaB5oCnIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiLlsIHpjpbvvJrkuIDlvovkuI3poa/npLrpgJnkupvpgJrnn6UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4i5L2O77ya6aGv56S65Zyo6YCa55+l5riF5Zau5bqV6YOo5LiU5LiN55m85Ye65Lu75L2V6Z+z5pWIIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiLkuIDoiKzvvJrpoa/npLrpgJnkupvpgJrnn6XkuJTkuI3nmbzlh7rku7vkvZXpn7PmlYgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzE1MjIzODYzNzczNzIxNTY1NCI+IumrmO+8mumhr+ekuuWcqOmAmuefpea4heWWrumgguerr+S4pueZvOWHuumfs+aViCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiLnt4rmgKXvvJrmjIHnuozpoa/npLrlnKjonqLluZXkuIrkuKbnmbzlh7rpn7PmlYgiPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0iemVuX21vZGVfZHVyYXRpb25fbWludXRlc19zdW1tYXJ5IiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNDM2Nzg3NzQwODA3MjAwMDg0OCI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPuaMgee6jCAlMSRkIOWIhumQmCAo57WQ5p2f5pmC6ZaT77yaPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+5oyB57qMIDEg5YiG6ZCYICjntZDmnZ/mmYLplpPvvJo8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8wIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXp1L3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy16dS9zdHJpbmdzLnhtbAppbmRleCAwOTM0MWVlLi5iZWU3ZWVhIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXp1L3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtenUvc3RyaW5ncy54bWwKQEAgLTIyMyw2ICsyMjMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiJLaGl5YSBtYW5qZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJPa3VxdWtldGh3ZSBrdWZpaGxpd2UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiJJbW9kaSBlcGhlcGhpbGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiJVaGxlbG8gbHdlLUFuZHJvaWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+Ik9rb211bnR1IHNpcXUiPC9zdHJpbmc+CkBAIC0zNTMsOCArMzU0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiJJdnVtZWxhIHVobGVsbyBsb2t1c2ViZW56YSB1a3V0aGF0aGEgaXppdGhvbWJlIG5hbWF2aWRpeW8gbmdla2hhbWVyYS4gTGUgbXZ1bWUgaXZ1bWVsYSB1aGxlbG8gbG9rdXNlYmVuemEgdWt1c2ViZW56aXNhIGlraGFtZXJhIG5nYW5vbWEgaXNpcGhpIGlzaWtoYXRoaSBuZ2FwaGFuZGxlIGt3ZW12dW1lIHlha2hvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiJsYXd1bGEgdWt1ZGxpZGxpemEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+Ikl2dW1lbGEgdWhsZWxvIGxva3VzZWJlbnphIHVrdWxhd3VsYSBpc2lkbGlkbGl6aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4ibGF3dWxhIHVrdWtoYW55YSBrd2VmdWxhc2hpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiJJdnVtZWxhIHVobGVsbyBsb2t1c2ViZW56YSB1a3VsYXd1bGEgdWt1a2hhbnlhIGt3ZWZ1bGVzaGkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4ibmdva3Vxb25kaWxlIHNoYXllbGEgaXppbm9tYm9sbyB6b2NpbmdvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+Ikl2dW1lbGEgdWhsZWxvIGxva3VzZWJlbnphIHVrdXNoYXllbGEgaXppbm9tYm9sbyB6ZWZvbmkgbmdhcGhhbmRsZSBrb2t1aGxhbmdhbnllbGEga3dha2hvLiBMb2todSBrdW5nYWhvbGVsYSBlbWFzaGFqaW5pIG5vbWEgYW1ha2hvbGkgYW5nYWxpbmRlbGVraWxlLiBRYXBoZWxhIHVrdXRoaSBsb2todSBha3V2dW1lbGkgdWhsZWxvIGxva3VzZWJlbnphIHVrdXNoYXllbGEgaXppbm9tYm9sbyB6ZXNpbW8gZXNpcGh1dGh1bWF5by4gSXppbmhsZWxvIHpva3VzZWJlbnphIGV6aW5nYWx1bmdpbGUgemluZ2FiaXphIGltYWxpIG5nb2t3ZW56ZSBhbWFraG9saSBuZ2FwaGFuZGxlIGtva3VxaW5pc2VraXNhIGt3YWtoby4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ltc0NhbGxTZXJ2aWNlIiBtc2dpZD0iMzU3NDk0Mzg0NzE4MTc5MzkxOCI+ImZpbnllbGVsYSBrdXNldmlzaSB5ZWtob2xpIHllLUlNUyI8L3N0cmluZz4KQEAgLTg1OCwxMCArODU3LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJjdXQiIG1zZ2lkPSIzMDkyNTY5NDA4NDM4NjI2MjYxIj4iTnFhbXVsYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4iS29waXNoYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+Ik5hbWF0aGlzZWxhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiJOYW1hdGhpc2VsYSBuamVuZ29tYmhhbG8gb3NvYmFsYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4iQnV5aXNlbGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4iU3VzYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4iS29waXNoYSBpLVVSTCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+IktoZXRoYSB1bWJoYWxvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiJIbGVobGlzYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlZG8iIG1zZ2lkPSI3NzU5NDY0ODc2NTY2ODAzODg4Ij4iWWVuemEgZnV0aGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4iSW5rZXRobyB5b21iaGFsbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiJFbmdlemEga3dpc2ljaGF6YW1hendpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiJTdXNhIjwvc3RyaW5nPgpAQCAtMTEwNyw2ICsxMTA5LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+IlNoaW50c2hhIGlwaGVwaGFkb25nYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+IlVtbGFsZWxpIHdlc2F6aXNvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiJVbWhsaW56ZWtpIHdlc2ltbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9hc3Npc3RhbnRfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjkwOTQ1NjA1NTU2OTEwMjk1MiI+IlVtc2l6aSB3ZXNhemlzbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iSS1WUE4gaXNpeWFzZWJlbnphIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4iaS1WUE4gaXZ1c3dlIG5ndSA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiJUaGludGEgdWt1emUgd2VuZ2FtZWxlIGluZXRoaXdla2hpLiI8L3N0cmluZz4KQEAgLTE0NDAsMTIgKzE0NDMsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV91cGRhdGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijg4NTY2MzEzMjI0NDAxODcwNzEiPiJJYnV5ZWtlendlIG5ndW1xb25kaXNpIHdha2hvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiJJc3Vzd2Ugbmd1bWxhd3VsaSB3YWtobyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4iVWt1c2l6YSB1a3V0aHV0aHVraXNhIGltcGlsbyB5ZWJoZXRocmksIGlzaWxvbmRvbG96ZSBzZWJoZXRocmkgc2VobGlzYSB1a3VzZWJlbnphIGt3ZWRpdmF5aXNpIHlha2hvIGZ1dGhpIHNpa2hhd3VsZWxlIHVrdWRsaWRsaXphLCBhbWFzZXZpc2kgd2VuZGF3bywgbmVkYXRoYSBlbmluZ2kgeWFuZ2FzZW11dmEuIEktaW1leWlsaSwgaW1pbGF5ZXpvLCBuZXppbnllIGl6aW5obGVsbyB6b2t1c2ViZW56YSBlemluY2lrZSBla3V2dW1lbGFuaXNlbmkgemluZ2FobGUgemluZ2FidXlla2V6d2EgbmdhcGhhbmRsZSBrb2t1dGhpIHV6aXZ1bGUuXG5cbklzaWxvbmRvbG96aSBzZWJoZXRocmkgc2l5YXZhbGVrYSBuZ29rdXplbnpha2FsZWxheW8gdW1hIGlkaXZheWlzaSB5YWtobyBpc2hhamEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfdGl0bGUiIG1zZ2lkPSI3NDkzOTg5NzIyNjEwMDA4NzAwIj4iVWt1YmFsdWxla2EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iNzExODgyNjkwMDc2NzA0NzEyNSI+Ik9rdXZpbmppd2U6IFVuZ2Fsb2tvdGhpIHVib25pc2UgbGV6aSB6YXppc28iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4iT2t1cGhhbnNpOiBCb25pc2Egbmdva3V0aHVsaWxlIG5nYXBoYW5zaSBrb2hsdSBsd2VzYXppc28iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNzk5MTE1NzY5NzYwOTU3NTI3MSI+Ik9rdWp3YXllbGVraWxlOiBCb25pc2Egbmdva3V0aHVsaWxlIGxlemkgemF6aXNvIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiJPa3VwaGV6dWx1OiBCb25pc2EgbmdhcGhlenVsdSBrb2hsdSBsd2V6YXppc28gdXBoaW5kZSB3ZW56ZSB1bXNpbmRvIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+Ik9rdXBodXRodW1heW86IEJoZWthIGt1c2lrcmluaSB1cGhpbmRlIHdlbnplIHVtc2luZG8iPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0iemVuX21vZGVfZHVyYXRpb25fbWludXRlc19zdW1tYXJ5IiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNDM2Nzg3NzQwODA3MjAwMDg0OCI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj5Pa3dhbWFtaW5pdGhpIGFuZ3UtJTEkZCAoa3V6ZSBrdWJlIG5nby08eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPk9rd2FtYW1pbml0aGkgYW5ndS0lMSRkIChrdXplIGt1YmUgbmdvLTx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMvYXR0cnNfbWFuaWZlc3QueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy9hdHRyc19tYW5pZmVzdC54bWwKaW5kZXggMmExMTA4MS4uNThhNzdlOCAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy9hdHRyc19tYW5pZmVzdC54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy9hdHRyc19tYW5pZmVzdC54bWwKQEAgLTE4NTcsNiArMTg1NywxMSBAQAogICAgICAgICA8YXR0ciBuYW1lPSJsb2NrVGFza01vZGUiIC8+CiAgICAgICAgIDxhdHRyIG5hbWU9InNob3dGb3JBbGxVc2VycyIgLz4KICAgICAgICAgPGF0dHIgbmFtZT0iZW5jcnlwdGlvbkF3YXJlIiAvPgorICAgICAgICA8IS0tIEBoaWRlIFRoaXMgYWN0aXZpdHkgaXMgYWx3YXlzIGZvY3VzYWJsZSByZWdhcmRsZXNzIG9mIGlmIGl0IGlzIGluIGEgdGFzay9zdGFjayB3aG9zZQorICAgICAgICAgICAgIGFjdGl2aXRpZXMgYXJlIG5vcm1hbGx5IG5vdCBmb2N1c2FibGUuCisgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHtAbGluayBhbmRyb2lkLlIuYXR0ciNzdXBwb3J0c1BpY3R1cmVJblBpY3R1cmV9IGFjdGl2aXRpZXMgYXJlIHBsYWNlZAorICAgICAgICAgICAgIGluIGEgdGFzay9zdGFjayB0aGF0IGlzbid0IGZvY3VzYWJsZS4gVGhpcyBmbGFnIGFsbG93cyB0aGVtIHRvIGJlIGZvY3VzYWJsZS4tLT4KKyAgICAgICAgPGF0dHIgbmFtZT0iYWx3YXlzRm9jdXNhYmxlIiBmb3JtYXQ9ImJvb2xlYW4iIC8+CiAgICAgPC9kZWNsYXJlLXN0eWxlYWJsZT4KIAogICAgIDwhLS0gVGhlIDxjb2RlPmFjdGl2aXR5LWFsaWFzPC9jb2RlPiB0YWcgZGVjbGFyZXMgYSBuZXcKZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMvY29uZmlnLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMvY29uZmlnLnhtbAppbmRleCAzMTM5ODdhLi5kMTNhNjIyIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzL2NvbmZpZy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy9jb25maWcueG1sCkBAIC0yMzcwLDcgKzIzNzAsNyBAQAogICAgIDwhLS0gU2V0IGluaXRpYWwgTWF4UmV0cnkgdmFsdWUgZm9yIG9wZXJhdG9ycyAtLT4KICAgICA8aW50ZWdlciBuYW1lPSJjb25maWdfbWRjX2luaXRpYWxfbWF4X3JldHJ5Ij4xPC9pbnRlZ2VyPgogCi0gICAgPCEtLSBUaGUgT0VNIHNwZWNpZmllZCBzZW5zb3IgdHlwZSBmb3IgdGhlIGdlc3R1cmUgdG8gbGF1bmNoIHRoZSBjYW1lYXIgYXBwLiAtLT4KKyAgICA8IS0tIFRoZSBPRU0gc3BlY2lmaWVkIHNlbnNvciB0eXBlIGZvciB0aGUgZ2VzdHVyZSB0byBsYXVuY2ggdGhlIGNhbWVyYSBhcHAuIC0tPgogICAgIDxpbnRlZ2VyIG5hbWU9ImNvbmZpZ19jYW1lcmFMYXVuY2hHZXN0dXJlU2Vuc29yVHlwZSI+LTE8L2ludGVnZXI+CiAgICAgPCEtLSBUaGUgT0VNIHNwZWNpZmllZCBzZW5zb3Igc3RyaW5nIHR5cGUgZm9yIHRoZSBnZXN0dXJlIHRvIGxhdW5jaCBjYW1lcmEgYXBwLCB0aGlzIHZhbHVlCiAgICAgICAgICBtdXN0IG1hdGNoIHRoZSB2YWx1ZSBvZiBjb25maWdfY2FtZXJhTGF1bmNoR2VzdHVyZVNlbnNvclR5cGUgaW4gT0VNJ3MgSEFMIC0tPgpAQCAtMjQxMCw0ICsyNDEwLDExIEBACiAKICAgICA8IS0tIERlZmF1bHQgYm91bmRzIFtsZWZ0IHRvcCByaWdodCBib3R0b21dIG9uIHNjcmVlbiBmb3IgcGljdHVyZS1pbi1waWN0dXJlIHdpbmRvd3MuIC0tPgogICAgIDxzdHJpbmcgdHJhbnNsYXRhYmxlPSJmYWxzZSIgbmFtZT0iY29uZmlnX2RlZmF1bHRQaWN0dXJlSW5QaWN0dXJlQm91bmRzIj4iMCAwIDEwMCAxMDAiPC9zdHJpbmc+CisKKyAgICA8IS0tIENvbnRyb2xzIHRoZSBzbmFwIG1vZGUgZm9yIHRoZSBkb2NrZWQgc3RhY2sgZGl2aWRlcgorICAgICAgICAgICAgIDAgLSAzIHNuYXAgdGFyZ2V0czogbGVmdC90b3AgaGFzIDE2OjkgcmF0aW8sIDE6MSwgYW5kIHJpZ2h0L2JvdHRvbSBoYXMgMTY6OSByYXRpbworICAgICAgICAgICAgIDEgLSAzIHNuYXAgdGFyZ2V0czogZml4ZWQgcmF0aW8sIDE6MSwgKDEgLSBmaXhlZCByYXRpbykKKyAgICAgICAgICAgICAyIC0gMSBzbmFwIHRhcmdldDogMToxCisgICAgLS0+CisgICAgPGludGVnZXIgbmFtZT0iY29uZmlnX2RvY2tlZFN0YWNrRGl2aWRlclNuYXBNb2RlIj4wPC9pbnRlZ2VyPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzL2RpbWVucy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzL2RpbWVucy54bWwKaW5kZXggYjE2NzcxMS4uMzdiMmMxMiAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy9kaW1lbnMueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMvZGltZW5zLnhtbApAQCAtNDcsNyArNDcsNyBAQAogCiAgICAgPCEtLSBIb3cgbXVjaCB0aGUgY29udGVudCBpbiB0aGUgZGl2aWRlciBpcyBpbnNldCBmcm9tIHRoZSB3aW5kb3cgYm91bmRzIHdoZW4gcmVzdGluZy4gVXNlZCB0bwogICAgICAgICAgY2FsY3VsYXRlIHRoZSBib3VuZHMgb2YgdGhlIHN0YWNrcy0tPgotICAgIDxkaW1lbiBuYW1lPSJkb2NrZWRfc3RhY2tfZGl2aWRlcl9pbnNldHMiPjE4ZHA8L2RpbWVuPgorICAgIDxkaW1lbiBuYW1lPSJkb2NrZWRfc3RhY2tfZGl2aWRlcl9pbnNldHMiPjE5ZHA8L2RpbWVuPgogCiAgICAgPCEtLSBNaW4gd2lkdGggZm9yIGEgdGFibGV0IGRldmljZSAtLT4KICAgICA8ZGltZW4gbmFtZT0ibWluX3hsYXJnZV9zY3JlZW5fd2lkdGgiPjgwMGRwPC9kaW1lbj4KQEAgLTE0Miw2ICsxNDIsOSBAQAogICAgIDwhLS0gaGVpZ2h0IG9mIHRoZSBjb250ZW50IG1hcmdpbiB0byBhY2NvbW9kYXRlIGZvciB0aGUgaGVhZGVyIC0tPgogICAgIDxkaW1lbiBuYW1lPSJub3RpZmljYXRpb25fY29udGVudF9tYXJnaW5fdG9wIj4zMGRwPC9kaW1lbj4KIAorICAgIDwhLS0gaGVpZ2h0IG9mIHRoZSBjb250ZW50IG1hcmdpbiBvbiB0aGUgYm90dG9tIC0tPgorICAgIDxkaW1lbiBuYW1lPSJub3RpZmljYXRpb25fY29udGVudF9tYXJnaW5fYm90dG9tIj4xM2RwPC9kaW1lbj4KKwogICAgIDwhLS0gaGVpZ2h0IG9mIG5vdGlmaWNhdGlvbiBoZWFkZXIgdmlldyBpZiBwcmVzZW50IC0tPgogICAgIDxkaW1lbiBuYW1lPSJub3RpZmljYXRpb25faGVhZGVyX2hlaWdodCI+MzJkcDwvZGltZW4+CiAKQEAgLTE1MywxNCArMTU2LDExIEBACiAgICAgPCEtLSBUaGUgd2lkdGggb2YgdGhlIGJpZyBpY29ucyBpbiBub3RpZmljYXRpb25zLiAtLT4KICAgICA8ZGltZW4gbmFtZT0ibm90aWZpY2F0aW9uX2xhcmdlX2ljb25faGVpZ2h0Ij42NGRwPC9kaW1lbj4KIAotICAgIDwhLS0gIE1pbiBoZWlnaHQgb2YgdGhlIG5vdGlmaWNhdGlvbiBjb250ZW50LiAtLT4KLSAgICA8ZGltZW4gbmFtZT0ibm90aWZpY2F0aW9uX21pbl9jb250ZW50X2hlaWdodCI+NTRkcDwvZGltZW4+Ci0KICAgICA8IS0tIFRoZSBtaW5pbXVtIHdpZHRoIG9mIHRoZSBhcHAgbmFtZSBpbiB0aGUgaGVhZGVyIGlmIGl0IHNocmlua3MgLS0+CiAgICAgPGRpbWVuIG5hbWU9Im5vdGlmaWNhdGlvbl9oZWFkZXJfc2hyaW5rX21pbl93aWR0aCI+NzJkcDwvZGltZW4+CiAKLSAgICA8IS0tIFRoZSBtaW5pbXVtIGhlaWdodCBvZiB0aGUgY29udGVudCBpZiB0aGVyZSBpcyBhIHBpY3R1cmUgcHJlc2VudCB3aXRoIGJpZyBwaWN0dXJlIC0tPgotICAgIDxkaW1lbiBuYW1lPSJub3RpZmljYXRpb25fYmlnX3BpY3R1cmVfY29udGVudF9taW5faGVpZ2h0X3dpdGhfcGljdHVyZSI+NDFkcDwvZGltZW4+CisgICAgPCEtLSBUaGUgbWluaW11bSBoZWlnaHQgb2YgdGhlIGNvbnRlbnQgaWYgdGhlcmUgYXJlIGF0IGxlYXN0IHR3byBsaW5lcyBvciBhIHBpY3R1cmUtLT4KKyAgICA8ZGltZW4gbmFtZT0ibm90aWZpY2F0aW9uX21pbl9jb250ZW50X2hlaWdodCI+NDFkcDwvZGltZW4+CiAKICAgICA8IS0tIFByZWZlcnJlZCB3aWR0aCBvZiB0aGUgc2VhcmNoIHZpZXcuIC0tPgogICAgIDxkaW1lbiBuYW1lPSJzZWFyY2hfdmlld19wcmVmZXJyZWRfd2lkdGgiPjMyMGRpcDwvZGltZW4+CkBAIC00MjksNCArNDI5LDYgQEAKIAogICAgIDxpdGVtIHR5cGU9ImRpbWVuIiBmb3JtYXQ9ImludGVnZXIiIG5hbWU9InRpbWVfcGlja2VyX2NvbHVtbl9zdGFydF9tYXRlcmlhbCI+MDwvaXRlbT4KICAgICA8aXRlbSB0eXBlPSJkaW1lbiIgZm9ybWF0PSJpbnRlZ2VyIiBuYW1lPSJ0aW1lX3BpY2tlcl9jb2x1bW5fZW5kX21hdGVyaWFsIj4xPC9pdGVtPgorCisgICAgPGl0ZW0gdHlwZT0iZnJhY3Rpb24iIG5hbWU9ImRvY2tlZF9zdGFja19kaXZpZGVyX2ZpeGVkX3JhdGlvIj4zNC4xNSU8L2l0ZW0+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMvbG9jYWxlX2NvbmZpZy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzL2xvY2FsZV9jb25maWcueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjZmQ5ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzL2xvY2FsZV9jb25maWcueG1sCkBAIC0wLDAgKzEsNDk5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCEtLQorKiogQ29weXJpZ2h0IDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorKioKKyoqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworKiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorKiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisqKgorKiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKioKKyoqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyoqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisqKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyoqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyoqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KKy0tPgorPHJlc291cmNlcyB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisKKyAgICA8c3RyaW5nLWFycmF5IHRyYW5zbGF0YWJsZT0iZmFsc2UiIG5hbWU9InN1cHBvcnRlZF9sb2NhbGVzIj4KKyAgICAgICAgPGl0ZW0+YWYtTkE8L2l0ZW0+IDwhLS0gQWZyaWthYW5zIChOYW1pYmlhKSAtLT4KKyAgICAgICAgPGl0ZW0+YWYtWkE8L2l0ZW0+IDwhLS0gQWZyaWthYW5zIChTb3V0aCBBZnJpY2EpIC0tPgorICAgICAgICA8aXRlbT5hZ3EtQ008L2l0ZW0+IDwhLS0gQWdoZW0gKENhbWVyb29uKSAtLT4KKyAgICAgICAgPGl0ZW0+YWstR0g8L2l0ZW0+IDwhLS0gQWthbiAoR2hhbmEpIC0tPgorICAgICAgICA8aXRlbT5hbS1FVDwvaXRlbT4gPCEtLSBBbWhhcmljIChFdGhpb3BpYSkgLS0+CisgICAgICAgIDxpdGVtPmFyLUFFPC9pdGVtPiA8IS0tIEFyYWJpYyAoVW5pdGVkIEFyYWIgRW1pcmF0ZXMpIC0tPgorICAgICAgICA8aXRlbT5hci1CSDwvaXRlbT4gPCEtLSBBcmFiaWMgKEJhaHJhaW4pIC0tPgorICAgICAgICA8aXRlbT5hci1ESjwvaXRlbT4gPCEtLSBBcmFiaWMgKERqaWJvdXRpKSAtLT4KKyAgICAgICAgPGl0ZW0+YXItRFo8L2l0ZW0+IDwhLS0gQXJhYmljIChBbGdlcmlhKSAtLT4KKyAgICAgICAgPGl0ZW0+YXItRUc8L2l0ZW0+IDwhLS0gQXJhYmljIChFZ3lwdCkgLS0+CisgICAgICAgIDxpdGVtPmFyLUVIPC9pdGVtPiA8IS0tIEFyYWJpYyAoV2VzdGVybiBTYWhhcmEpIC0tPgorICAgICAgICA8aXRlbT5hci1FUjwvaXRlbT4gPCEtLSBBcmFiaWMgKEVyaXRyZWEpIC0tPgorICAgICAgICA8aXRlbT5hci1JTDwvaXRlbT4gPCEtLSBBcmFiaWMgKElzcmFlbCkgLS0+CisgICAgICAgIDxpdGVtPmFyLUlRPC9pdGVtPiA8IS0tIEFyYWJpYyAoSXJhcSkgLS0+CisgICAgICAgIDxpdGVtPmFyLUpPPC9pdGVtPiA8IS0tIEFyYWJpYyAoSm9yZGFuKSAtLT4KKyAgICAgICAgPGl0ZW0+YXItS008L2l0ZW0+IDwhLS0gQXJhYmljIChDb21vcm9zKSAtLT4KKyAgICAgICAgPGl0ZW0+YXItS1c8L2l0ZW0+IDwhLS0gQXJhYmljIChLdXdhaXQpIC0tPgorICAgICAgICA8aXRlbT5hci1MQjwvaXRlbT4gPCEtLSBBcmFiaWMgKExlYmFub24pIC0tPgorICAgICAgICA8aXRlbT5hci1MWTwvaXRlbT4gPCEtLSBBcmFiaWMgKExpYnlhKSAtLT4KKyAgICAgICAgPGl0ZW0+YXItTUE8L2l0ZW0+IDwhLS0gQXJhYmljIChNb3JvY2NvKSAtLT4KKyAgICAgICAgPGl0ZW0+YXItTVI8L2l0ZW0+IDwhLS0gQXJhYmljIChNYXVyaXRhbmlhKSAtLT4KKyAgICAgICAgPGl0ZW0+YXItT008L2l0ZW0+IDwhLS0gQXJhYmljIChPbWFuKSAtLT4KKyAgICAgICAgPGl0ZW0+YXItUFM8L2l0ZW0+IDwhLS0gQXJhYmljIChQYWxlc3RpbmUpIC0tPgorICAgICAgICA8aXRlbT5hci1RQTwvaXRlbT4gPCEtLSBBcmFiaWMgKFFhdGFyKSAtLT4KKyAgICAgICAgPGl0ZW0+YXItU0E8L2l0ZW0+IDwhLS0gQXJhYmljIChTYXVkaSBBcmFiaWEpIC0tPgorICAgICAgICA8aXRlbT5hci1TRDwvaXRlbT4gPCEtLSBBcmFiaWMgKFN1ZGFuKSAtLT4KKyAgICAgICAgPGl0ZW0+YXItU088L2l0ZW0+IDwhLS0gQXJhYmljIChTb21hbGlhKSAtLT4KKyAgICAgICAgPGl0ZW0+YXItU1M8L2l0ZW0+IDwhLS0gQXJhYmljIChTb3V0aCBTdWRhbikgLS0+CisgICAgICAgIDxpdGVtPmFyLVNZPC9pdGVtPiA8IS0tIEFyYWJpYyAoU3lyaWEpIC0tPgorICAgICAgICA8aXRlbT5hci1URDwvaXRlbT4gPCEtLSBBcmFiaWMgKENoYWQpIC0tPgorICAgICAgICA8aXRlbT5hci1UTjwvaXRlbT4gPCEtLSBBcmFiaWMgKFR1bmlzaWEpIC0tPgorICAgICAgICA8aXRlbT5hci1YQjwvaXRlbT4gPCEtLSBSaWdodC10by1sZWZ0IHBzZXVkb2xvY2FsZSAtLT4KKyAgICAgICAgPGl0ZW0+YXItWUU8L2l0ZW0+IDwhLS0gQXJhYmljIChZZW1lbikgLS0+CisgICAgICAgIDxpdGVtPmFzLUlOPC9pdGVtPiA8IS0tIEFzc2FtZXNlIChJbmRpYSkgLS0+CisgICAgICAgIDxpdGVtPmFzYS1UWjwvaXRlbT4gPCEtLSBBc3UgKFRhbnphbmlhKSAtLT4KKyAgICAgICAgPGl0ZW0+YXotQ3lybC1BWjwvaXRlbT4gPCEtLSBBemVyYmFpamFuaSAoQ3lyaWxsaWMsQXplcmJhaWphbikgLS0+CisgICAgICAgIDxpdGVtPmF6LUxhdG4tQVo8L2l0ZW0+IDwhLS0gQXplcmJhaWphbmkgKExhdGluLEF6ZXJiYWlqYW4pIC0tPgorICAgICAgICA8aXRlbT5iYXMtQ008L2l0ZW0+IDwhLS0gQmFzYWEgKENhbWVyb29uKSAtLT4KKyAgICAgICAgPGl0ZW0+YmUtQlk8L2l0ZW0+IDwhLS0gQmVsYXJ1c2lhbiAoQmVsYXJ1cykgLS0+CisgICAgICAgIDxpdGVtPmJlbS1aTTwvaXRlbT4gPCEtLSBCZW1iYSAoWmFtYmlhKSAtLT4KKyAgICAgICAgPGl0ZW0+YmV6LVRaPC9pdGVtPiA8IS0tIEJlbmEgKFRhbnphbmlhKSAtLT4KKyAgICAgICAgPGl0ZW0+YmctQkc8L2l0ZW0+IDwhLS0gQnVsZ2FyaWFuIChCdWxnYXJpYSkgLS0+CisgICAgICAgIDxpdGVtPmJtLU1MPC9pdGVtPiA8IS0tIEJhbWJhcmEgKE1hbGkpIC0tPgorICAgICAgICA8aXRlbT5ibi1CRDwvaXRlbT4gPCEtLSBCZW5nYWxpIChCYW5nbGFkZXNoKSAtLT4KKyAgICAgICAgPGl0ZW0+Ym4tSU48L2l0ZW0+IDwhLS0gQmVuZ2FsaSAoSW5kaWEpIC0tPgorICAgICAgICA8aXRlbT5iby1DTjwvaXRlbT4gPCEtLSBUaWJldGFuIChDaGluYSkgLS0+CisgICAgICAgIDxpdGVtPmJvLUlOPC9pdGVtPiA8IS0tIFRpYmV0YW4gKEluZGlhKSAtLT4KKyAgICAgICAgPGl0ZW0+YnItRlI8L2l0ZW0+IDwhLS0gQnJldG9uIChGcmFuY2UpIC0tPgorICAgICAgICA8aXRlbT5icngtSU48L2l0ZW0+IDwhLS0gQm9kbyAoSW5kaWEpIC0tPgorICAgICAgICA8aXRlbT5icy1DeXJsLUJBPC9pdGVtPiA8IS0tIEJvc25pYW4gKEN5cmlsbGljLEJvc25pYSAmIEhlcnplZ292aW5hKSAtLT4KKyAgICAgICAgPGl0ZW0+YnMtTGF0bi1CQTwvaXRlbT4gPCEtLSBCb3NuaWFuIChMYXRpbixCb3NuaWEgJiBIZXJ6ZWdvdmluYSkgLS0+CisgICAgICAgIDxpdGVtPmNhLUFEPC9pdGVtPiA8IS0tIENhdGFsYW4gKEFuZG9ycmEpIC0tPgorICAgICAgICA8aXRlbT5jYS1FUzwvaXRlbT4gPCEtLSBDYXRhbGFuIChTcGFpbikgLS0+CisgICAgICAgIDxpdGVtPmNhLUZSPC9pdGVtPiA8IS0tIENhdGFsYW4gKEZyYW5jZSkgLS0+CisgICAgICAgIDxpdGVtPmNhLUlUPC9pdGVtPiA8IS0tIENhdGFsYW4gKEl0YWx5KSAtLT4KKyAgICAgICAgPGl0ZW0+Y2UtUlU8L2l0ZW0+IDwhLS0gQ2hlY2hlbiAoUnVzc2lhKSAtLT4KKyAgICAgICAgPGl0ZW0+Y2dnLVVHPC9pdGVtPiA8IS0tIENoaWdhIChVZ2FuZGEpIC0tPgorICAgICAgICA8aXRlbT5jaHItVVM8L2l0ZW0+IDwhLS0gQ2hlcm9rZWUgKFVuaXRlZCBTdGF0ZXMpIC0tPgorICAgICAgICA8aXRlbT5jcy1DWjwvaXRlbT4gPCEtLSBDemVjaCAoQ3plY2ggUmVwdWJsaWMpIC0tPgorICAgICAgICA8aXRlbT5jeS1HQjwvaXRlbT4gPCEtLSBXZWxzaCAoVW5pdGVkIEtpbmdkb20pIC0tPgorICAgICAgICA8aXRlbT5kYS1ESzwvaXRlbT4gPCEtLSBEYW5pc2ggKERlbm1hcmspIC0tPgorICAgICAgICA8aXRlbT5kYS1HTDwvaXRlbT4gPCEtLSBEYW5pc2ggKEdyZWVubGFuZCkgLS0+CisgICAgICAgIDxpdGVtPmRhdi1LRTwvaXRlbT4gPCEtLSBUYWl0YSAoS2VueWEpIC0tPgorICAgICAgICA8aXRlbT5kZS1BVDwvaXRlbT4gPCEtLSBHZXJtYW4gKEF1c3RyaWEpIC0tPgorICAgICAgICA8aXRlbT5kZS1CRTwvaXRlbT4gPCEtLSBHZXJtYW4gKEJlbGdpdW0pIC0tPgorICAgICAgICA8aXRlbT5kZS1DSDwvaXRlbT4gPCEtLSBHZXJtYW4gKFN3aXR6ZXJsYW5kKSAtLT4KKyAgICAgICAgPGl0ZW0+ZGUtREU8L2l0ZW0+IDwhLS0gR2VybWFuIChHZXJtYW55KSAtLT4KKyAgICAgICAgPGl0ZW0+ZGUtTEk8L2l0ZW0+IDwhLS0gR2VybWFuIChMaWVjaHRlbnN0ZWluKSAtLT4KKyAgICAgICAgPGl0ZW0+ZGUtTFU8L2l0ZW0+IDwhLS0gR2VybWFuIChMdXhlbWJvdXJnKSAtLT4KKyAgICAgICAgPGl0ZW0+ZGplLU5FPC9pdGVtPiA8IS0tIFphcm1hIChOaWdlcikgLS0+CisgICAgICAgIDxpdGVtPmRzYi1ERTwvaXRlbT4gPCEtLSBMb3dlciBTb3JiaWFuIChHZXJtYW55KSAtLT4KKyAgICAgICAgPGl0ZW0+ZHVhLUNNPC9pdGVtPiA8IS0tIER1YWxhIChDYW1lcm9vbikgLS0+CisgICAgICAgIDxpdGVtPmR5by1TTjwvaXRlbT4gPCEtLSBKb2xhLUZvbnlpIChTZW5lZ2FsKSAtLT4KKyAgICAgICAgPGl0ZW0+ZHotQlQ8L2l0ZW0+IDwhLS0gRHpvbmdraGEgKEJodXRhbikgLS0+CisgICAgICAgIDxpdGVtPmVidS1LRTwvaXRlbT4gPCEtLSBFbWJ1IChLZW55YSkgLS0+CisgICAgICAgIDxpdGVtPmVlLUdIPC9pdGVtPiA8IS0tIEV3ZSAoR2hhbmEpIC0tPgorICAgICAgICA8aXRlbT5lZS1URzwvaXRlbT4gPCEtLSBFd2UgKFRvZ28pIC0tPgorICAgICAgICA8aXRlbT5lbC1DWTwvaXRlbT4gPCEtLSBHcmVlayAoQ3lwcnVzKSAtLT4KKyAgICAgICAgPGl0ZW0+ZWwtR1I8L2l0ZW0+IDwhLS0gR3JlZWsgKEdyZWVjZSkgLS0+CisgICAgICAgIDxpdGVtPmVuLUFHPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKEFudGlndWEgJiBCYXJidWRhKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tQUk8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoQW5ndWlsbGEpIC0tPgorICAgICAgICA8aXRlbT5lbi1BUzwvaXRlbT4gPCEtLSBFbmdsaXNoIChBbWVyaWNhbiBTYW1vYSkgLS0+CisgICAgICAgIDxpdGVtPmVuLUFUPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKEF1c3RyaWEpIC0tPgorICAgICAgICA8aXRlbT5lbi1BVTwvaXRlbT4gPCEtLSBFbmdsaXNoIChBdXN0cmFsaWEpIC0tPgorICAgICAgICA8aXRlbT5lbi1CQjwvaXRlbT4gPCEtLSBFbmdsaXNoIChCYXJiYWRvcykgLS0+CisgICAgICAgIDxpdGVtPmVuLUJFPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKEJlbGdpdW0pIC0tPgorICAgICAgICA8aXRlbT5lbi1CSTwvaXRlbT4gPCEtLSBFbmdsaXNoIChCdXJ1bmRpKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tQk08L2l0ZW0+IDwhLS0gRW5nbGlzaCAoQmVybXVkYSkgLS0+CisgICAgICAgIDxpdGVtPmVuLUJTPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKEJhaGFtYXMpIC0tPgorICAgICAgICA8aXRlbT5lbi1CVzwvaXRlbT4gPCEtLSBFbmdsaXNoIChCb3Rzd2FuYSkgLS0+CisgICAgICAgIDxpdGVtPmVuLUJaPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKEJlbGl6ZSkgLS0+CisgICAgICAgIDxpdGVtPmVuLUNBPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKENhbmFkYSkgLS0+CisgICAgICAgIDxpdGVtPmVuLUNDPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKENvY29zIChLZWVsaW5nKSBJc2xhbmRzKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tQ0g8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoU3dpdHplcmxhbmQpIC0tPgorICAgICAgICA8aXRlbT5lbi1DSzwvaXRlbT4gPCEtLSBFbmdsaXNoIChDb29rIElzbGFuZHMpIC0tPgorICAgICAgICA8aXRlbT5lbi1DTTwvaXRlbT4gPCEtLSBFbmdsaXNoIChDYW1lcm9vbikgLS0+CisgICAgICAgIDxpdGVtPmVuLUNYPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKENocmlzdG1hcyBJc2xhbmQpIC0tPgorICAgICAgICA8aXRlbT5lbi1DWTwvaXRlbT4gPCEtLSBFbmdsaXNoIChDeXBydXMpIC0tPgorICAgICAgICA8aXRlbT5lbi1ERTwvaXRlbT4gPCEtLSBFbmdsaXNoIChHZXJtYW55KSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tREc8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoRGllZ28gR2FyY2lhKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tREs8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoRGVubWFyaykgLS0+CisgICAgICAgIDxpdGVtPmVuLURNPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKERvbWluaWNhKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tRVI8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoRXJpdHJlYSkgLS0+CisgICAgICAgIDxpdGVtPmVuLUZJPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKEZpbmxhbmQpIC0tPgorICAgICAgICA8aXRlbT5lbi1GSjwvaXRlbT4gPCEtLSBFbmdsaXNoIChGaWppKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tRks8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoRmFsa2xhbmQgSXNsYW5kcyAoSXNsYXMgTWFsdmluYXMpKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tRk08L2l0ZW0+IDwhLS0gRW5nbGlzaCAoTWljcm9uZXNpYSkgLS0+CisgICAgICAgIDxpdGVtPmVuLUdCPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKFVuaXRlZCBLaW5nZG9tKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tR0Q8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoR3JlbmFkYSkgLS0+CisgICAgICAgIDxpdGVtPmVuLUdHPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKEd1ZXJuc2V5KSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tR0g8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoR2hhbmEpIC0tPgorICAgICAgICA8aXRlbT5lbi1HSTwvaXRlbT4gPCEtLSBFbmdsaXNoIChHaWJyYWx0YXIpIC0tPgorICAgICAgICA8aXRlbT5lbi1HTTwvaXRlbT4gPCEtLSBFbmdsaXNoIChHYW1iaWEpIC0tPgorICAgICAgICA8aXRlbT5lbi1HVTwvaXRlbT4gPCEtLSBFbmdsaXNoIChHdWFtKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tR1k8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoR3V5YW5hKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tSEs8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoSG9uZyBLb25nKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tSUU8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoSXJlbGFuZCkgLS0+CisgICAgICAgIDxpdGVtPmVuLUlMPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKElzcmFlbCkgLS0+CisgICAgICAgIDxpdGVtPmVuLUlNPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKElzbGUgb2YgTWFuKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tSU48L2l0ZW0+IDwhLS0gRW5nbGlzaCAoSW5kaWEpIC0tPgorICAgICAgICA8aXRlbT5lbi1JTzwvaXRlbT4gPCEtLSBFbmdsaXNoIChCcml0aXNoIEluZGlhbiBPY2VhbiBUZXJyaXRvcnkpIC0tPgorICAgICAgICA8aXRlbT5lbi1KRTwvaXRlbT4gPCEtLSBFbmdsaXNoIChKZXJzZXkpIC0tPgorICAgICAgICA8aXRlbT5lbi1KTTwvaXRlbT4gPCEtLSBFbmdsaXNoIChKYW1haWNhKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tS0U8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoS2VueWEpIC0tPgorICAgICAgICA8aXRlbT5lbi1LSTwvaXRlbT4gPCEtLSBFbmdsaXNoIChLaXJpYmF0aSkgLS0+CisgICAgICAgIDxpdGVtPmVuLUtOPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKFN0LiBLaXR0cyAmIE5ldmlzKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tS1k8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoQ2F5bWFuIElzbGFuZHMpIC0tPgorICAgICAgICA8aXRlbT5lbi1MQzwvaXRlbT4gPCEtLSBFbmdsaXNoIChTdC4gTHVjaWEpIC0tPgorICAgICAgICA8aXRlbT5lbi1MUjwvaXRlbT4gPCEtLSBFbmdsaXNoIChMaWJlcmlhKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tTFM8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoTGVzb3RobykgLS0+CisgICAgICAgIDxpdGVtPmVuLU1HPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKE1hZGFnYXNjYXIpIC0tPgorICAgICAgICA8aXRlbT5lbi1NSDwvaXRlbT4gPCEtLSBFbmdsaXNoIChNYXJzaGFsbCBJc2xhbmRzKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tTU88L2l0ZW0+IDwhLS0gRW5nbGlzaCAoTWFjYXUpIC0tPgorICAgICAgICA8aXRlbT5lbi1NUDwvaXRlbT4gPCEtLSBFbmdsaXNoIChOb3J0aGVybiBNYXJpYW5hIElzbGFuZHMpIC0tPgorICAgICAgICA8aXRlbT5lbi1NUzwvaXRlbT4gPCEtLSBFbmdsaXNoIChNb250c2VycmF0KSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tTVQ8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoTWFsdGEpIC0tPgorICAgICAgICA8aXRlbT5lbi1NVTwvaXRlbT4gPCEtLSBFbmdsaXNoIChNYXVyaXRpdXMpIC0tPgorICAgICAgICA8aXRlbT5lbi1NVzwvaXRlbT4gPCEtLSBFbmdsaXNoIChNYWxhd2kpIC0tPgorICAgICAgICA8aXRlbT5lbi1NWTwvaXRlbT4gPCEtLSBFbmdsaXNoIChNYWxheXNpYSkgLS0+CisgICAgICAgIDxpdGVtPmVuLU5BPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKE5hbWliaWEpIC0tPgorICAgICAgICA8aXRlbT5lbi1ORjwvaXRlbT4gPCEtLSBFbmdsaXNoIChOb3Jmb2xrIElzbGFuZCkgLS0+CisgICAgICAgIDxpdGVtPmVuLU5HPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKE5pZ2VyaWEpIC0tPgorICAgICAgICA8aXRlbT5lbi1OTDwvaXRlbT4gPCEtLSBFbmdsaXNoIChOZXRoZXJsYW5kcykgLS0+CisgICAgICAgIDxpdGVtPmVuLU5SPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKE5hdXJ1KSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tTlU8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoTml1ZSkgLS0+CisgICAgICAgIDxpdGVtPmVuLU5aPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKE5ldyBaZWFsYW5kKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tUEc8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoUGFwdWEgTmV3IEd1aW5lYSkgLS0+CisgICAgICAgIDxpdGVtPmVuLVBIPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKFBoaWxpcHBpbmVzKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tUEs8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoUGFraXN0YW4pIC0tPgorICAgICAgICA8aXRlbT5lbi1QTjwvaXRlbT4gPCEtLSBFbmdsaXNoIChQaXRjYWlybiBJc2xhbmRzKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tUFI8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoUHVlcnRvIFJpY28pIC0tPgorICAgICAgICA8aXRlbT5lbi1QVzwvaXRlbT4gPCEtLSBFbmdsaXNoIChQYWxhdSkgLS0+CisgICAgICAgIDxpdGVtPmVuLVJXPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKFJ3YW5kYSkgLS0+CisgICAgICAgIDxpdGVtPmVuLVNCPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKFNvbG9tb24gSXNsYW5kcykgLS0+CisgICAgICAgIDxpdGVtPmVuLVNDPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKFNleWNoZWxsZXMpIC0tPgorICAgICAgICA8aXRlbT5lbi1TRDwvaXRlbT4gPCEtLSBFbmdsaXNoIChTdWRhbikgLS0+CisgICAgICAgIDxpdGVtPmVuLVNFPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKFN3ZWRlbikgLS0+CisgICAgICAgIDxpdGVtPmVuLVNHPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKFNpbmdhcG9yZSkgLS0+CisgICAgICAgIDxpdGVtPmVuLVNIPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKFN0LiBIZWxlbmEpIC0tPgorICAgICAgICA8aXRlbT5lbi1TSTwvaXRlbT4gPCEtLSBFbmdsaXNoIChTbG92ZW5pYSkgLS0+CisgICAgICAgIDxpdGVtPmVuLVNMPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKFNpZXJyYSBMZW9uZSkgLS0+CisgICAgICAgIDxpdGVtPmVuLVNTPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKFNvdXRoIFN1ZGFuKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tU1g8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoU2ludCBNYWFydGVuKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tU1o8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoU3dhemlsYW5kKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tVEM8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoVHVya3MgJiBDYWljb3MgSXNsYW5kcykgLS0+CisgICAgICAgIDxpdGVtPmVuLVRLPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKFRva2VsYXUpIC0tPgorICAgICAgICA8aXRlbT5lbi1UTzwvaXRlbT4gPCEtLSBFbmdsaXNoIChUb25nYSkgLS0+CisgICAgICAgIDxpdGVtPmVuLVRUPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKFRyaW5pZGFkICYgVG9iYWdvKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tVFY8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoVHV2YWx1KSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tVFo8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoVGFuemFuaWEpIC0tPgorICAgICAgICA8aXRlbT5lbi1VRzwvaXRlbT4gPCEtLSBFbmdsaXNoIChVZ2FuZGEpIC0tPgorICAgICAgICA8aXRlbT5lbi1VTTwvaXRlbT4gPCEtLSBFbmdsaXNoIChVLlMuIE91dGx5aW5nIElzbGFuZHMpIC0tPgorICAgICAgICA8aXRlbT5lbi1VUzwvaXRlbT4gPCEtLSBFbmdsaXNoIChVbml0ZWQgU3RhdGVzKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tVkM8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoU3QuIFZpbmNlbnQgJiBHcmVuYWRpbmVzKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tVkc8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoQnJpdGlzaCBWaXJnaW4gSXNsYW5kcykgLS0+CisgICAgICAgIDxpdGVtPmVuLVZJPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKFUuUy4gVmlyZ2luIElzbGFuZHMpIC0tPgorICAgICAgICA8aXRlbT5lbi1WVTwvaXRlbT4gPCEtLSBFbmdsaXNoIChWYW51YXR1KSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tV1M8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoU2Ftb2EpIC0tPgorICAgICAgICA8aXRlbT5lbi1YQTwvaXRlbT4gPCEtLSBMZWZ0LXRvLXJpZ2h0IHBzZXVkb2xvY2FsZSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tWkE8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoU291dGggQWZyaWNhKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tWk08L2l0ZW0+IDwhLS0gRW5nbGlzaCAoWmFtYmlhKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tWlc8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoWmltYmFid2UpIC0tPgorICAgICAgICA8aXRlbT5lcy1BUjwvaXRlbT4gPCEtLSBTcGFuaXNoIChBcmdlbnRpbmEpIC0tPgorICAgICAgICA8aXRlbT5lcy1CTzwvaXRlbT4gPCEtLSBTcGFuaXNoIChCb2xpdmlhKSAtLT4KKyAgICAgICAgPGl0ZW0+ZXMtQ0w8L2l0ZW0+IDwhLS0gU3BhbmlzaCAoQ2hpbGUpIC0tPgorICAgICAgICA8aXRlbT5lcy1DTzwvaXRlbT4gPCEtLSBTcGFuaXNoIChDb2xvbWJpYSkgLS0+CisgICAgICAgIDxpdGVtPmVzLUNSPC9pdGVtPiA8IS0tIFNwYW5pc2ggKENvc3RhIFJpY2EpIC0tPgorICAgICAgICA8aXRlbT5lcy1DVTwvaXRlbT4gPCEtLSBTcGFuaXNoIChDdWJhKSAtLT4KKyAgICAgICAgPGl0ZW0+ZXMtRE88L2l0ZW0+IDwhLS0gU3BhbmlzaCAoRG9taW5pY2FuIFJlcHVibGljKSAtLT4KKyAgICAgICAgPGl0ZW0+ZXMtRUE8L2l0ZW0+IDwhLS0gU3BhbmlzaCAoQ2V1dGEgJiBNZWxpbGxhKSAtLT4KKyAgICAgICAgPGl0ZW0+ZXMtRUM8L2l0ZW0+IDwhLS0gU3BhbmlzaCAoRWN1YWRvcikgLS0+CisgICAgICAgIDxpdGVtPmVzLUVTPC9pdGVtPiA8IS0tIFNwYW5pc2ggKFNwYWluKSAtLT4KKyAgICAgICAgPGl0ZW0+ZXMtR1E8L2l0ZW0+IDwhLS0gU3BhbmlzaCAoRXF1YXRvcmlhbCBHdWluZWEpIC0tPgorICAgICAgICA8aXRlbT5lcy1HVDwvaXRlbT4gPCEtLSBTcGFuaXNoIChHdWF0ZW1hbGEpIC0tPgorICAgICAgICA8aXRlbT5lcy1ITjwvaXRlbT4gPCEtLSBTcGFuaXNoIChIb25kdXJhcykgLS0+CisgICAgICAgIDxpdGVtPmVzLUlDPC9pdGVtPiA8IS0tIFNwYW5pc2ggKENhbmFyeSBJc2xhbmRzKSAtLT4KKyAgICAgICAgPGl0ZW0+ZXMtTVg8L2l0ZW0+IDwhLS0gU3BhbmlzaCAoTWV4aWNvKSAtLT4KKyAgICAgICAgPGl0ZW0+ZXMtTkk8L2l0ZW0+IDwhLS0gU3BhbmlzaCAoTmljYXJhZ3VhKSAtLT4KKyAgICAgICAgPGl0ZW0+ZXMtUEE8L2l0ZW0+IDwhLS0gU3BhbmlzaCAoUGFuYW1hKSAtLT4KKyAgICAgICAgPGl0ZW0+ZXMtUEU8L2l0ZW0+IDwhLS0gU3BhbmlzaCAoUGVydSkgLS0+CisgICAgICAgIDxpdGVtPmVzLVBIPC9pdGVtPiA8IS0tIFNwYW5pc2ggKFBoaWxpcHBpbmVzKSAtLT4KKyAgICAgICAgPGl0ZW0+ZXMtUFI8L2l0ZW0+IDwhLS0gU3BhbmlzaCAoUHVlcnRvIFJpY28pIC0tPgorICAgICAgICA8aXRlbT5lcy1QWTwvaXRlbT4gPCEtLSBTcGFuaXNoIChQYXJhZ3VheSkgLS0+CisgICAgICAgIDxpdGVtPmVzLVNWPC9pdGVtPiA8IS0tIFNwYW5pc2ggKEVsIFNhbHZhZG9yKSAtLT4KKyAgICAgICAgPGl0ZW0+ZXMtVVM8L2l0ZW0+IDwhLS0gU3BhbmlzaCAoVW5pdGVkIFN0YXRlcykgLS0+CisgICAgICAgIDxpdGVtPmVzLVVZPC9pdGVtPiA8IS0tIFNwYW5pc2ggKFVydWd1YXkpIC0tPgorICAgICAgICA8aXRlbT5lcy1WRTwvaXRlbT4gPCEtLSBTcGFuaXNoIChWZW5lenVlbGEpIC0tPgorICAgICAgICA8aXRlbT5ldC1FRTwvaXRlbT4gPCEtLSBFc3RvbmlhbiAoRXN0b25pYSkgLS0+CisgICAgICAgIDxpdGVtPmV1LUVTPC9pdGVtPiA8IS0tIEJhc3F1ZSAoU3BhaW4pIC0tPgorICAgICAgICA8aXRlbT5ld28tQ008L2l0ZW0+IDwhLS0gRXdvbmRvIChDYW1lcm9vbikgLS0+CisgICAgICAgIDxpdGVtPmZhLUFGPC9pdGVtPiA8IS0tIFBlcnNpYW4gKEFmZ2hhbmlzdGFuKSAtLT4KKyAgICAgICAgPGl0ZW0+ZmEtSVI8L2l0ZW0+IDwhLS0gUGVyc2lhbiAoSXJhbikgLS0+CisgICAgICAgIDxpdGVtPmZmLUNNPC9pdGVtPiA8IS0tIEZ1bGFoIChDYW1lcm9vbikgLS0+CisgICAgICAgIDxpdGVtPmZmLUdOPC9pdGVtPiA8IS0tIEZ1bGFoIChHdWluZWEpIC0tPgorICAgICAgICA8aXRlbT5mZi1NUjwvaXRlbT4gPCEtLSBGdWxhaCAoTWF1cml0YW5pYSkgLS0+CisgICAgICAgIDxpdGVtPmZmLVNOPC9pdGVtPiA8IS0tIEZ1bGFoIChTZW5lZ2FsKSAtLT4KKyAgICAgICAgPGl0ZW0+ZmktRkk8L2l0ZW0+IDwhLS0gRmlubmlzaCAoRmlubGFuZCkgLS0+CisgICAgICAgIDxpdGVtPmZpbC1QSDwvaXRlbT4gPCEtLSBGaWxpcGlubyAoUGhpbGlwcGluZXMpIC0tPgorICAgICAgICA8aXRlbT5mby1ESzwvaXRlbT4gPCEtLSBGYXJvZXNlIChEZW5tYXJrKSAtLT4KKyAgICAgICAgPGl0ZW0+Zm8tRk88L2l0ZW0+IDwhLS0gRmFyb2VzZSAoRmFyb2UgSXNsYW5kcykgLS0+CisgICAgICAgIDxpdGVtPmZyLUJFPC9pdGVtPiA8IS0tIEZyZW5jaCAoQmVsZ2l1bSkgLS0+CisgICAgICAgIDxpdGVtPmZyLUJGPC9pdGVtPiA8IS0tIEZyZW5jaCAoQnVya2luYSBGYXNvKSAtLT4KKyAgICAgICAgPGl0ZW0+ZnItQkk8L2l0ZW0+IDwhLS0gRnJlbmNoIChCdXJ1bmRpKSAtLT4KKyAgICAgICAgPGl0ZW0+ZnItQko8L2l0ZW0+IDwhLS0gRnJlbmNoIChCZW5pbikgLS0+CisgICAgICAgIDxpdGVtPmZyLUJMPC9pdGVtPiA8IS0tIEZyZW5jaCAoU3QuIEJhcnRow6lsZW15KSAtLT4KKyAgICAgICAgPGl0ZW0+ZnItQ0E8L2l0ZW0+IDwhLS0gRnJlbmNoIChDYW5hZGEpIC0tPgorICAgICAgICA8aXRlbT5mci1DRDwvaXRlbT4gPCEtLSBGcmVuY2ggKENvbmdvIChEUkMpKSAtLT4KKyAgICAgICAgPGl0ZW0+ZnItQ0Y8L2l0ZW0+IDwhLS0gRnJlbmNoIChDZW50cmFsIEFmcmljYW4gUmVwdWJsaWMpIC0tPgorICAgICAgICA8aXRlbT5mci1DRzwvaXRlbT4gPCEtLSBGcmVuY2ggKENvbmdvIChSZXB1YmxpYykpIC0tPgorICAgICAgICA8aXRlbT5mci1DSDwvaXRlbT4gPCEtLSBGcmVuY2ggKFN3aXR6ZXJsYW5kKSAtLT4KKyAgICAgICAgPGl0ZW0+ZnItQ0k8L2l0ZW0+IDwhLS0gRnJlbmNoIChDw7R0ZSBk4oCZSXZvaXJlKSAtLT4KKyAgICAgICAgPGl0ZW0+ZnItQ008L2l0ZW0+IDwhLS0gRnJlbmNoIChDYW1lcm9vbikgLS0+CisgICAgICAgIDxpdGVtPmZyLURKPC9pdGVtPiA8IS0tIEZyZW5jaCAoRGppYm91dGkpIC0tPgorICAgICAgICA8aXRlbT5mci1EWjwvaXRlbT4gPCEtLSBGcmVuY2ggKEFsZ2VyaWEpIC0tPgorICAgICAgICA8aXRlbT5mci1GUjwvaXRlbT4gPCEtLSBGcmVuY2ggKEZyYW5jZSkgLS0+CisgICAgICAgIDxpdGVtPmZyLUdBPC9pdGVtPiA8IS0tIEZyZW5jaCAoR2Fib24pIC0tPgorICAgICAgICA8aXRlbT5mci1HRjwvaXRlbT4gPCEtLSBGcmVuY2ggKEZyZW5jaCBHdWlhbmEpIC0tPgorICAgICAgICA8aXRlbT5mci1HTjwvaXRlbT4gPCEtLSBGcmVuY2ggKEd1aW5lYSkgLS0+CisgICAgICAgIDxpdGVtPmZyLUdQPC9pdGVtPiA8IS0tIEZyZW5jaCAoR3VhZGVsb3VwZSkgLS0+CisgICAgICAgIDxpdGVtPmZyLUdRPC9pdGVtPiA8IS0tIEZyZW5jaCAoRXF1YXRvcmlhbCBHdWluZWEpIC0tPgorICAgICAgICA8aXRlbT5mci1IVDwvaXRlbT4gPCEtLSBGcmVuY2ggKEhhaXRpKSAtLT4KKyAgICAgICAgPGl0ZW0+ZnItS008L2l0ZW0+IDwhLS0gRnJlbmNoIChDb21vcm9zKSAtLT4KKyAgICAgICAgPGl0ZW0+ZnItTFU8L2l0ZW0+IDwhLS0gRnJlbmNoIChMdXhlbWJvdXJnKSAtLT4KKyAgICAgICAgPGl0ZW0+ZnItTUE8L2l0ZW0+IDwhLS0gRnJlbmNoIChNb3JvY2NvKSAtLT4KKyAgICAgICAgPGl0ZW0+ZnItTUM8L2l0ZW0+IDwhLS0gRnJlbmNoIChNb25hY28pIC0tPgorICAgICAgICA8aXRlbT5mci1NRjwvaXRlbT4gPCEtLSBGcmVuY2ggKFN0LiBNYXJ0aW4pIC0tPgorICAgICAgICA8aXRlbT5mci1NRzwvaXRlbT4gPCEtLSBGcmVuY2ggKE1hZGFnYXNjYXIpIC0tPgorICAgICAgICA8aXRlbT5mci1NTDwvaXRlbT4gPCEtLSBGcmVuY2ggKE1hbGkpIC0tPgorICAgICAgICA8aXRlbT5mci1NUTwvaXRlbT4gPCEtLSBGcmVuY2ggKE1hcnRpbmlxdWUpIC0tPgorICAgICAgICA8aXRlbT5mci1NUjwvaXRlbT4gPCEtLSBGcmVuY2ggKE1hdXJpdGFuaWEpIC0tPgorICAgICAgICA8aXRlbT5mci1NVTwvaXRlbT4gPCEtLSBGcmVuY2ggKE1hdXJpdGl1cykgLS0+CisgICAgICAgIDxpdGVtPmZyLU5DPC9pdGVtPiA8IS0tIEZyZW5jaCAoTmV3IENhbGVkb25pYSkgLS0+CisgICAgICAgIDxpdGVtPmZyLU5FPC9pdGVtPiA8IS0tIEZyZW5jaCAoTmlnZXIpIC0tPgorICAgICAgICA8aXRlbT5mci1QRjwvaXRlbT4gPCEtLSBGcmVuY2ggKEZyZW5jaCBQb2x5bmVzaWEpIC0tPgorICAgICAgICA8aXRlbT5mci1QTTwvaXRlbT4gPCEtLSBGcmVuY2ggKFN0LiBQaWVycmUgJiBNaXF1ZWxvbikgLS0+CisgICAgICAgIDxpdGVtPmZyLVJFPC9pdGVtPiA8IS0tIEZyZW5jaCAoUsOpdW5pb24pIC0tPgorICAgICAgICA8aXRlbT5mci1SVzwvaXRlbT4gPCEtLSBGcmVuY2ggKFJ3YW5kYSkgLS0+CisgICAgICAgIDxpdGVtPmZyLVNDPC9pdGVtPiA8IS0tIEZyZW5jaCAoU2V5Y2hlbGxlcykgLS0+CisgICAgICAgIDxpdGVtPmZyLVNOPC9pdGVtPiA8IS0tIEZyZW5jaCAoU2VuZWdhbCkgLS0+CisgICAgICAgIDxpdGVtPmZyLVNZPC9pdGVtPiA8IS0tIEZyZW5jaCAoU3lyaWEpIC0tPgorICAgICAgICA8aXRlbT5mci1URDwvaXRlbT4gPCEtLSBGcmVuY2ggKENoYWQpIC0tPgorICAgICAgICA8aXRlbT5mci1URzwvaXRlbT4gPCEtLSBGcmVuY2ggKFRvZ28pIC0tPgorICAgICAgICA8aXRlbT5mci1UTjwvaXRlbT4gPCEtLSBGcmVuY2ggKFR1bmlzaWEpIC0tPgorICAgICAgICA8aXRlbT5mci1WVTwvaXRlbT4gPCEtLSBGcmVuY2ggKFZhbnVhdHUpIC0tPgorICAgICAgICA8aXRlbT5mci1XRjwvaXRlbT4gPCEtLSBGcmVuY2ggKFdhbGxpcyAmIEZ1dHVuYSkgLS0+CisgICAgICAgIDxpdGVtPmZyLVlUPC9pdGVtPiA8IS0tIEZyZW5jaCAoTWF5b3R0ZSkgLS0+CisgICAgICAgIDxpdGVtPmZ1ci1JVDwvaXRlbT4gPCEtLSBGcml1bGlhbiAoSXRhbHkpIC0tPgorICAgICAgICA8aXRlbT5meS1OTDwvaXRlbT4gPCEtLSBXZXN0ZXJuIEZyaXNpYW4gKE5ldGhlcmxhbmRzKSAtLT4KKyAgICAgICAgPGl0ZW0+Z2EtSUU8L2l0ZW0+IDwhLS0gSXJpc2ggKElyZWxhbmQpIC0tPgorICAgICAgICA8aXRlbT5nZC1HQjwvaXRlbT4gPCEtLSBTY290dGlzaCBHYWVsaWMgKFVuaXRlZCBLaW5nZG9tKSAtLT4KKyAgICAgICAgPGl0ZW0+Z2wtRVM8L2l0ZW0+IDwhLS0gR2FsaWNpYW4gKFNwYWluKSAtLT4KKyAgICAgICAgPGl0ZW0+Z3N3LUNIPC9pdGVtPiA8IS0tIFN3aXNzIEdlcm1hbiAoU3dpdHplcmxhbmQpIC0tPgorICAgICAgICA8aXRlbT5nc3ctRlI8L2l0ZW0+IDwhLS0gU3dpc3MgR2VybWFuIChGcmFuY2UpIC0tPgorICAgICAgICA8aXRlbT5nc3ctTEk8L2l0ZW0+IDwhLS0gU3dpc3MgR2VybWFuIChMaWVjaHRlbnN0ZWluKSAtLT4KKyAgICAgICAgPGl0ZW0+Z3UtSU48L2l0ZW0+IDwhLS0gR3VqYXJhdGkgKEluZGlhKSAtLT4KKyAgICAgICAgPGl0ZW0+Z3V6LUtFPC9pdGVtPiA8IS0tIEd1c2lpIChLZW55YSkgLS0+CisgICAgICAgIDxpdGVtPmd2LUlNPC9pdGVtPiA8IS0tIE1hbnggKElzbGUgb2YgTWFuKSAtLT4KKyAgICAgICAgPGl0ZW0+aGEtR0g8L2l0ZW0+IDwhLS0gSGF1c2EgKEdoYW5hKSAtLT4KKyAgICAgICAgPGl0ZW0+aGEtTkU8L2l0ZW0+IDwhLS0gSGF1c2EgKE5pZ2VyKSAtLT4KKyAgICAgICAgPGl0ZW0+aGEtTkc8L2l0ZW0+IDwhLS0gSGF1c2EgKE5pZ2VyaWEpIC0tPgorICAgICAgICA8aXRlbT5oYXctVVM8L2l0ZW0+IDwhLS0gSGF3YWlpYW4gKFVuaXRlZCBTdGF0ZXMpIC0tPgorICAgICAgICA8aXRlbT5pdy1JTDwvaXRlbT4gPCEtLSBIZWJyZXcgKElzcmFlbCkgLS0+CisgICAgICAgIDxpdGVtPmhpLUlOPC9pdGVtPiA8IS0tIEhpbmRpIChJbmRpYSkgLS0+CisgICAgICAgIDxpdGVtPmhyLUJBPC9pdGVtPiA8IS0tIENyb2F0aWFuIChCb3NuaWEgJiBIZXJ6ZWdvdmluYSkgLS0+CisgICAgICAgIDxpdGVtPmhyLUhSPC9pdGVtPiA8IS0tIENyb2F0aWFuIChDcm9hdGlhKSAtLT4KKyAgICAgICAgPGl0ZW0+aHNiLURFPC9pdGVtPiA8IS0tIFVwcGVyIFNvcmJpYW4gKEdlcm1hbnkpIC0tPgorICAgICAgICA8aXRlbT5odS1IVTwvaXRlbT4gPCEtLSBIdW5nYXJpYW4gKEh1bmdhcnkpIC0tPgorICAgICAgICA8aXRlbT5oeS1BTTwvaXRlbT4gPCEtLSBBcm1lbmlhbiAoQXJtZW5pYSkgLS0+CisgICAgICAgIDxpdGVtPmluLUlEPC9pdGVtPiA8IS0tIEluZG9uZXNpYW4gKEluZG9uZXNpYSkgLS0+CisgICAgICAgIDxpdGVtPmlnLU5HPC9pdGVtPiA8IS0tIElnYm8gKE5pZ2VyaWEpIC0tPgorICAgICAgICA8aXRlbT5paS1DTjwvaXRlbT4gPCEtLSBTaWNodWFuIFlpIChDaGluYSkgLS0+CisgICAgICAgIDxpdGVtPmlzLUlTPC9pdGVtPiA8IS0tIEljZWxhbmRpYyAoSWNlbGFuZCkgLS0+CisgICAgICAgIDxpdGVtPml0LUNIPC9pdGVtPiA8IS0tIEl0YWxpYW4gKFN3aXR6ZXJsYW5kKSAtLT4KKyAgICAgICAgPGl0ZW0+aXQtSVQ8L2l0ZW0+IDwhLS0gSXRhbGlhbiAoSXRhbHkpIC0tPgorICAgICAgICA8aXRlbT5pdC1TTTwvaXRlbT4gPCEtLSBJdGFsaWFuIChTYW4gTWFyaW5vKSAtLT4KKyAgICAgICAgPGl0ZW0+amEtSlA8L2l0ZW0+IDwhLS0gSmFwYW5lc2UgKEphcGFuKSAtLT4KKyAgICAgICAgPGl0ZW0+amdvLUNNPC9pdGVtPiA8IS0tIE5nb21iYSAoQ2FtZXJvb24pIC0tPgorICAgICAgICA8aXRlbT5qbWMtVFo8L2l0ZW0+IDwhLS0gTWFjaGFtZSAoVGFuemFuaWEpIC0tPgorICAgICAgICA8aXRlbT5rYS1HRTwvaXRlbT4gPCEtLSBHZW9yZ2lhbiAoR2VvcmdpYSkgLS0+CisgICAgICAgIDxpdGVtPmthYi1EWjwvaXRlbT4gPCEtLSBLYWJ5bGUgKEFsZ2VyaWEpIC0tPgorICAgICAgICA8aXRlbT5rYW0tS0U8L2l0ZW0+IDwhLS0gS2FtYmEgKEtlbnlhKSAtLT4KKyAgICAgICAgPGl0ZW0+a2RlLVRaPC9pdGVtPiA8IS0tIE1ha29uZGUgKFRhbnphbmlhKSAtLT4KKyAgICAgICAgPGl0ZW0+a2VhLUNWPC9pdGVtPiA8IS0tIEthYnV2ZXJkaWFudSAoQ2FwZSBWZXJkZSkgLS0+CisgICAgICAgIDxpdGVtPmtocS1NTDwvaXRlbT4gPCEtLSBLb3lyYSBDaGlpbmkgKE1hbGkpIC0tPgorICAgICAgICA8aXRlbT5raS1LRTwvaXRlbT4gPCEtLSBLaWt1eXUgKEtlbnlhKSAtLT4KKyAgICAgICAgPGl0ZW0+a2stS1o8L2l0ZW0+IDwhLS0gS2F6YWtoIChLYXpha2hzdGFuKSAtLT4KKyAgICAgICAgPGl0ZW0+a2tqLUNNPC9pdGVtPiA8IS0tIEtha28gKENhbWVyb29uKSAtLT4KKyAgICAgICAgPGl0ZW0+a2wtR0w8L2l0ZW0+IDwhLS0gS2FsYWFsbGlzdXQgKEdyZWVubGFuZCkgLS0+CisgICAgICAgIDxpdGVtPmtsbi1LRTwvaXRlbT4gPCEtLSBLYWxlbmppbiAoS2VueWEpIC0tPgorICAgICAgICA8aXRlbT5rbS1LSDwvaXRlbT4gPCEtLSBLaG1lciAoQ2FtYm9kaWEpIC0tPgorICAgICAgICA8aXRlbT5rbi1JTjwvaXRlbT4gPCEtLSBLYW5uYWRhIChJbmRpYSkgLS0+CisgICAgICAgIDxpdGVtPmtvLUtQPC9pdGVtPiA8IS0tIEtvcmVhbiAoTm9ydGggS29yZWEpIC0tPgorICAgICAgICA8aXRlbT5rby1LUjwvaXRlbT4gPCEtLSBLb3JlYW4gKFNvdXRoIEtvcmVhKSAtLT4KKyAgICAgICAgPGl0ZW0+a29rLUlOPC9pdGVtPiA8IS0tIEtvbmthbmkgKEluZGlhKSAtLT4KKyAgICAgICAgPGl0ZW0+a3NiLVRaPC9pdGVtPiA8IS0tIFNoYW1iYWxhIChUYW56YW5pYSkgLS0+CisgICAgICAgIDxpdGVtPmtzZi1DTTwvaXRlbT4gPCEtLSBCYWZpYSAoQ2FtZXJvb24pIC0tPgorICAgICAgICA8aXRlbT5rc2gtREU8L2l0ZW0+IDwhLS0gQ29sb2duaWFuIChHZXJtYW55KSAtLT4KKyAgICAgICAgPGl0ZW0+a3ctR0I8L2l0ZW0+IDwhLS0gQ29ybmlzaCAoVW5pdGVkIEtpbmdkb20pIC0tPgorICAgICAgICA8aXRlbT5reS1LRzwvaXRlbT4gPCEtLSBLeXJneXogKEt5cmd5enN0YW4pIC0tPgorICAgICAgICA8aXRlbT5sYWctVFo8L2l0ZW0+IDwhLS0gTGFuZ2kgKFRhbnphbmlhKSAtLT4KKyAgICAgICAgPGl0ZW0+bGItTFU8L2l0ZW0+IDwhLS0gTHV4ZW1ib3VyZ2lzaCAoTHV4ZW1ib3VyZykgLS0+CisgICAgICAgIDxpdGVtPmxnLVVHPC9pdGVtPiA8IS0tIEdhbmRhIChVZ2FuZGEpIC0tPgorICAgICAgICA8aXRlbT5sa3QtVVM8L2l0ZW0+IDwhLS0gTGFrb3RhIChVbml0ZWQgU3RhdGVzKSAtLT4KKyAgICAgICAgPGl0ZW0+bG4tQU88L2l0ZW0+IDwhLS0gTGluZ2FsYSAoQW5nb2xhKSAtLT4KKyAgICAgICAgPGl0ZW0+bG4tQ0Q8L2l0ZW0+IDwhLS0gTGluZ2FsYSAoQ29uZ28gKERSQykpIC0tPgorICAgICAgICA8aXRlbT5sbi1DRjwvaXRlbT4gPCEtLSBMaW5nYWxhIChDZW50cmFsIEFmcmljYW4gUmVwdWJsaWMpIC0tPgorICAgICAgICA8aXRlbT5sbi1DRzwvaXRlbT4gPCEtLSBMaW5nYWxhIChDb25nbyAoUmVwdWJsaWMpKSAtLT4KKyAgICAgICAgPGl0ZW0+bG8tTEE8L2l0ZW0+IDwhLS0gTGFvIChMYW9zKSAtLT4KKyAgICAgICAgPGl0ZW0+bHQtTFQ8L2l0ZW0+IDwhLS0gTGl0aHVhbmlhbiAoTGl0aHVhbmlhKSAtLT4KKyAgICAgICAgPGl0ZW0+bHUtQ0Q8L2l0ZW0+IDwhLS0gTHViYS1LYXRhbmdhIChDb25nbyAoRFJDKSkgLS0+CisgICAgICAgIDxpdGVtPmx1by1LRTwvaXRlbT4gPCEtLSBMdW8gKEtlbnlhKSAtLT4KKyAgICAgICAgPGl0ZW0+bHV5LUtFPC9pdGVtPiA8IS0tIEx1eWlhIChLZW55YSkgLS0+CisgICAgICAgIDxpdGVtPmx2LUxWPC9pdGVtPiA8IS0tIExhdHZpYW4gKExhdHZpYSkgLS0+CisgICAgICAgIDxpdGVtPm1hcy1LRTwvaXRlbT4gPCEtLSBNYXNhaSAoS2VueWEpIC0tPgorICAgICAgICA8aXRlbT5tYXMtVFo8L2l0ZW0+IDwhLS0gTWFzYWkgKFRhbnphbmlhKSAtLT4KKyAgICAgICAgPGl0ZW0+bWVyLUtFPC9pdGVtPiA8IS0tIE1lcnUgKEtlbnlhKSAtLT4KKyAgICAgICAgPGl0ZW0+bWZlLU1VPC9pdGVtPiA8IS0tIE1vcmlzeWVuIChNYXVyaXRpdXMpIC0tPgorICAgICAgICA8aXRlbT5tZy1NRzwvaXRlbT4gPCEtLSBNYWxhZ2FzeSAoTWFkYWdhc2NhcikgLS0+CisgICAgICAgIDxpdGVtPm1naC1NWjwvaXRlbT4gPCEtLSBNYWtodXdhLU1lZXR0byAoTW96YW1iaXF1ZSkgLS0+CisgICAgICAgIDxpdGVtPm1nby1DTTwvaXRlbT4gPCEtLSBNZXRhyrwgKENhbWVyb29uKSAtLT4KKyAgICAgICAgPGl0ZW0+bWstTUs8L2l0ZW0+IDwhLS0gTWFjZWRvbmlhbiAoTWFjZWRvbmlhIChGWVJPTSkpIC0tPgorICAgICAgICA8aXRlbT5tbC1JTjwvaXRlbT4gPCEtLSBNYWxheWFsYW0gKEluZGlhKSAtLT4KKyAgICAgICAgPGl0ZW0+bW4tTU48L2l0ZW0+IDwhLS0gTW9uZ29saWFuIChNb25nb2xpYSkgLS0+CisgICAgICAgIDxpdGVtPm1yLUlOPC9pdGVtPiA8IS0tIE1hcmF0aGkgKEluZGlhKSAtLT4KKyAgICAgICAgPGl0ZW0+bXMtQk48L2l0ZW0+IDwhLS0gTWFsYXkgKEJydW5laSkgLS0+CisgICAgICAgIDxpdGVtPm1zLU1ZPC9pdGVtPiA8IS0tIE1hbGF5IChNYWxheXNpYSkgLS0+CisgICAgICAgIDxpdGVtPm1zLVNHPC9pdGVtPiA8IS0tIE1hbGF5IChTaW5nYXBvcmUpIC0tPgorICAgICAgICA8aXRlbT5tdC1NVDwvaXRlbT4gPCEtLSBNYWx0ZXNlIChNYWx0YSkgLS0+CisgICAgICAgIDxpdGVtPm15LU1NPC9pdGVtPiA8IS0tIEJ1cm1lc2UgKE15YW5tYXIgKEJ1cm1hKSkgLS0+CisgICAgICAgIDxpdGVtPm16bi1JUjwvaXRlbT4gPCEtLSBNYXphbmRlcmFuaSAoSXJhbikgLS0+CisgICAgICAgIDxpdGVtPm5hcS1OQTwvaXRlbT4gPCEtLSBOYW1hIChOYW1pYmlhKSAtLT4KKyAgICAgICAgPGl0ZW0+bmItTk88L2l0ZW0+IDwhLS0gTm9yd2VnaWFuIEJva23DpWwgKE5vcndheSkgLS0+CisgICAgICAgIDxpdGVtPm5iLVNKPC9pdGVtPiA8IS0tIE5vcndlZ2lhbiBCb2ttw6VsIChTdmFsYmFyZCAmIEphbiBNYXllbikgLS0+CisgICAgICAgIDxpdGVtPm5kLVpXPC9pdGVtPiA8IS0tIE5vcnRoIE5kZWJlbGUgKFppbWJhYndlKSAtLT4KKyAgICAgICAgPGl0ZW0+bmUtSU48L2l0ZW0+IDwhLS0gTmVwYWxpIChJbmRpYSkgLS0+CisgICAgICAgIDxpdGVtPm5lLU5QPC9pdGVtPiA8IS0tIE5lcGFsaSAoTmVwYWwpIC0tPgorICAgICAgICA8aXRlbT5ubC1BVzwvaXRlbT4gPCEtLSBEdXRjaCAoQXJ1YmEpIC0tPgorICAgICAgICA8aXRlbT5ubC1CRTwvaXRlbT4gPCEtLSBEdXRjaCAoQmVsZ2l1bSkgLS0+CisgICAgICAgIDxpdGVtPm5sLUJRPC9pdGVtPiA8IS0tIER1dGNoIChDYXJpYmJlYW4gTmV0aGVybGFuZHMpIC0tPgorICAgICAgICA8aXRlbT5ubC1DVzwvaXRlbT4gPCEtLSBEdXRjaCAoQ3VyYcOnYW8pIC0tPgorICAgICAgICA8aXRlbT5ubC1OTDwvaXRlbT4gPCEtLSBEdXRjaCAoTmV0aGVybGFuZHMpIC0tPgorICAgICAgICA8aXRlbT5ubC1TUjwvaXRlbT4gPCEtLSBEdXRjaCAoU3VyaW5hbWUpIC0tPgorICAgICAgICA8aXRlbT5ubC1TWDwvaXRlbT4gPCEtLSBEdXRjaCAoU2ludCBNYWFydGVuKSAtLT4KKyAgICAgICAgPGl0ZW0+bm1nLUNNPC9pdGVtPiA8IS0tIEt3YXNpbyAoQ2FtZXJvb24pIC0tPgorICAgICAgICA8aXRlbT5ubi1OTzwvaXRlbT4gPCEtLSBOb3J3ZWdpYW4gTnlub3JzayAoTm9yd2F5KSAtLT4KKyAgICAgICAgPGl0ZW0+bm5oLUNNPC9pdGVtPiA8IS0tIE5naWVtYm9vbiAoQ2FtZXJvb24pIC0tPgorICAgICAgICA8aXRlbT5udXMtU1M8L2l0ZW0+IDwhLS0gTnVlciAoU291dGggU3VkYW4pIC0tPgorICAgICAgICA8aXRlbT5ueW4tVUc8L2l0ZW0+IDwhLS0gTnlhbmtvbGUgKFVnYW5kYSkgLS0+CisgICAgICAgIDxpdGVtPm9tLUVUPC9pdGVtPiA8IS0tIE9yb21vIChFdGhpb3BpYSkgLS0+CisgICAgICAgIDxpdGVtPm9tLUtFPC9pdGVtPiA8IS0tIE9yb21vIChLZW55YSkgLS0+CisgICAgICAgIDxpdGVtPm9yLUlOPC9pdGVtPiA8IS0tIE9yaXlhIChJbmRpYSkgLS0+CisgICAgICAgIDxpdGVtPm9zLUdFPC9pdGVtPiA8IS0tIE9zc2V0aWMgKEdlb3JnaWEpIC0tPgorICAgICAgICA8aXRlbT5vcy1SVTwvaXRlbT4gPCEtLSBPc3NldGljIChSdXNzaWEpIC0tPgorICAgICAgICA8aXRlbT5wYS1BcmFiLVBLPC9pdGVtPiA8IS0tIFB1bmphYmkgKEFyYWJpYyxQYWtpc3RhbikgLS0+CisgICAgICAgIDxpdGVtPnBhLUd1cnUtSU48L2l0ZW0+IDwhLS0gUHVuamFiaSAoR3VybXVraGksSW5kaWEpIC0tPgorICAgICAgICA8aXRlbT5wbC1QTDwvaXRlbT4gPCEtLSBQb2xpc2ggKFBvbGFuZCkgLS0+CisgICAgICAgIDxpdGVtPnBzLUFGPC9pdGVtPiA8IS0tIFBhc2h0byAoQWZnaGFuaXN0YW4pIC0tPgorICAgICAgICA8aXRlbT5wdC1BTzwvaXRlbT4gPCEtLSBQb3J0dWd1ZXNlIChBbmdvbGEpIC0tPgorICAgICAgICA8aXRlbT5wdC1CUjwvaXRlbT4gPCEtLSBQb3J0dWd1ZXNlIChCcmF6aWwpIC0tPgorICAgICAgICA8aXRlbT5wdC1DVjwvaXRlbT4gPCEtLSBQb3J0dWd1ZXNlIChDYXBlIFZlcmRlKSAtLT4KKyAgICAgICAgPGl0ZW0+cHQtR1c8L2l0ZW0+IDwhLS0gUG9ydHVndWVzZSAoR3VpbmVhLUJpc3NhdSkgLS0+CisgICAgICAgIDxpdGVtPnB0LU1PPC9pdGVtPiA8IS0tIFBvcnR1Z3Vlc2UgKE1hY2F1KSAtLT4KKyAgICAgICAgPGl0ZW0+cHQtTVo8L2l0ZW0+IDwhLS0gUG9ydHVndWVzZSAoTW96YW1iaXF1ZSkgLS0+CisgICAgICAgIDxpdGVtPnB0LVBUPC9pdGVtPiA8IS0tIFBvcnR1Z3Vlc2UgKFBvcnR1Z2FsKSAtLT4KKyAgICAgICAgPGl0ZW0+cHQtU1Q8L2l0ZW0+IDwhLS0gUG9ydHVndWVzZSAoU8OjbyBUb23DqSAmIFByw61uY2lwZSkgLS0+CisgICAgICAgIDxpdGVtPnB0LVRMPC9pdGVtPiA8IS0tIFBvcnR1Z3Vlc2UgKFRpbW9yLUxlc3RlKSAtLT4KKyAgICAgICAgPGl0ZW0+cXUtQk88L2l0ZW0+IDwhLS0gUXVlY2h1YSAoQm9saXZpYSkgLS0+CisgICAgICAgIDxpdGVtPnF1LUVDPC9pdGVtPiA8IS0tIFF1ZWNodWEgKEVjdWFkb3IpIC0tPgorICAgICAgICA8aXRlbT5xdS1QRTwvaXRlbT4gPCEtLSBRdWVjaHVhIChQZXJ1KSAtLT4KKyAgICAgICAgPGl0ZW0+cm0tQ0g8L2l0ZW0+IDwhLS0gUm9tYW5zaCAoU3dpdHplcmxhbmQpIC0tPgorICAgICAgICA8aXRlbT5ybi1CSTwvaXRlbT4gPCEtLSBSdW5kaSAoQnVydW5kaSkgLS0+CisgICAgICAgIDxpdGVtPnJvLU1EPC9pdGVtPiA8IS0tIFJvbWFuaWFuIChNb2xkb3ZhKSAtLT4KKyAgICAgICAgPGl0ZW0+cm8tUk88L2l0ZW0+IDwhLS0gUm9tYW5pYW4gKFJvbWFuaWEpIC0tPgorICAgICAgICA8aXRlbT5yb2YtVFo8L2l0ZW0+IDwhLS0gUm9tYm8gKFRhbnphbmlhKSAtLT4KKyAgICAgICAgPGl0ZW0+cnUtQlk8L2l0ZW0+IDwhLS0gUnVzc2lhbiAoQmVsYXJ1cykgLS0+CisgICAgICAgIDxpdGVtPnJ1LUtHPC9pdGVtPiA8IS0tIFJ1c3NpYW4gKEt5cmd5enN0YW4pIC0tPgorICAgICAgICA8aXRlbT5ydS1LWjwvaXRlbT4gPCEtLSBSdXNzaWFuIChLYXpha2hzdGFuKSAtLT4KKyAgICAgICAgPGl0ZW0+cnUtTUQ8L2l0ZW0+IDwhLS0gUnVzc2lhbiAoTW9sZG92YSkgLS0+CisgICAgICAgIDxpdGVtPnJ1LVJVPC9pdGVtPiA8IS0tIFJ1c3NpYW4gKFJ1c3NpYSkgLS0+CisgICAgICAgIDxpdGVtPnJ1LVVBPC9pdGVtPiA8IS0tIFJ1c3NpYW4gKFVrcmFpbmUpIC0tPgorICAgICAgICA8aXRlbT5ydy1SVzwvaXRlbT4gPCEtLSBLaW55YXJ3YW5kYSAoUndhbmRhKSAtLT4KKyAgICAgICAgPGl0ZW0+cndrLVRaPC9pdGVtPiA8IS0tIFJ3YSAoVGFuemFuaWEpIC0tPgorICAgICAgICA8aXRlbT5zYWgtUlU8L2l0ZW0+IDwhLS0gU2FraGEgKFJ1c3NpYSkgLS0+CisgICAgICAgIDxpdGVtPnNhcS1LRTwvaXRlbT4gPCEtLSBTYW1idXJ1IChLZW55YSkgLS0+CisgICAgICAgIDxpdGVtPnNicC1UWjwvaXRlbT4gPCEtLSBTYW5ndSAoVGFuemFuaWEpIC0tPgorICAgICAgICA8aXRlbT5zZS1GSTwvaXRlbT4gPCEtLSBOb3J0aGVybiBTYW1pIChGaW5sYW5kKSAtLT4KKyAgICAgICAgPGl0ZW0+c2UtTk88L2l0ZW0+IDwhLS0gTm9ydGhlcm4gU2FtaSAoTm9yd2F5KSAtLT4KKyAgICAgICAgPGl0ZW0+c2UtU0U8L2l0ZW0+IDwhLS0gTm9ydGhlcm4gU2FtaSAoU3dlZGVuKSAtLT4KKyAgICAgICAgPGl0ZW0+c2VoLU1aPC9pdGVtPiA8IS0tIFNlbmEgKE1vemFtYmlxdWUpIC0tPgorICAgICAgICA8aXRlbT5zZXMtTUw8L2l0ZW0+IDwhLS0gS295cmFib3JvIFNlbm5pIChNYWxpKSAtLT4KKyAgICAgICAgPGl0ZW0+c2ctQ0Y8L2l0ZW0+IDwhLS0gU2FuZ28gKENlbnRyYWwgQWZyaWNhbiBSZXB1YmxpYykgLS0+CisgICAgICAgIDxpdGVtPnNpLUxLPC9pdGVtPiA8IS0tIFNpbmhhbGEgKFNyaSBMYW5rYSkgLS0+CisgICAgICAgIDxpdGVtPnNrLVNLPC9pdGVtPiA8IS0tIFNsb3ZhayAoU2xvdmFraWEpIC0tPgorICAgICAgICA8aXRlbT5zbC1TSTwvaXRlbT4gPCEtLSBTbG92ZW5pYW4gKFNsb3ZlbmlhKSAtLT4KKyAgICAgICAgPGl0ZW0+c21uLUZJPC9pdGVtPiA8IS0tIEluYXJpIFNhbWkgKEZpbmxhbmQpIC0tPgorICAgICAgICA8aXRlbT5zbi1aVzwvaXRlbT4gPCEtLSBTaG9uYSAoWmltYmFid2UpIC0tPgorICAgICAgICA8aXRlbT5zby1ESjwvaXRlbT4gPCEtLSBTb21hbGkgKERqaWJvdXRpKSAtLT4KKyAgICAgICAgPGl0ZW0+c28tRVQ8L2l0ZW0+IDwhLS0gU29tYWxpIChFdGhpb3BpYSkgLS0+CisgICAgICAgIDxpdGVtPnNvLUtFPC9pdGVtPiA8IS0tIFNvbWFsaSAoS2VueWEpIC0tPgorICAgICAgICA8aXRlbT5zby1TTzwvaXRlbT4gPCEtLSBTb21hbGkgKFNvbWFsaWEpIC0tPgorICAgICAgICA8aXRlbT5zcS1BTDwvaXRlbT4gPCEtLSBBbGJhbmlhbiAoQWxiYW5pYSkgLS0+CisgICAgICAgIDxpdGVtPnNxLU1LPC9pdGVtPiA8IS0tIEFsYmFuaWFuIChNYWNlZG9uaWEgKEZZUk9NKSkgLS0+CisgICAgICAgIDxpdGVtPnNxLVhLPC9pdGVtPiA8IS0tIEFsYmFuaWFuIChLb3Nvdm8pIC0tPgorICAgICAgICA8aXRlbT5zci1DeXJsLUJBPC9pdGVtPiA8IS0tIFNlcmJpYW4gKEN5cmlsbGljLEJvc25pYSAmIEhlcnplZ292aW5hKSAtLT4KKyAgICAgICAgPGl0ZW0+c3ItQ3lybC1NRTwvaXRlbT4gPCEtLSBTZXJiaWFuIChDeXJpbGxpYyxNb250ZW5lZ3JvKSAtLT4KKyAgICAgICAgPGl0ZW0+c3ItQ3lybC1SUzwvaXRlbT4gPCEtLSBTZXJiaWFuIChDeXJpbGxpYyxTZXJiaWEpIC0tPgorICAgICAgICA8aXRlbT5zci1DeXJsLVhLPC9pdGVtPiA8IS0tIFNlcmJpYW4gKEN5cmlsbGljLEtvc292bykgLS0+CisgICAgICAgIDxpdGVtPnNyLUxhdG4tQkE8L2l0ZW0+IDwhLS0gU2VyYmlhbiAoTGF0aW4sQm9zbmlhICYgSGVyemVnb3ZpbmEpIC0tPgorICAgICAgICA8aXRlbT5zci1MYXRuLU1FPC9pdGVtPiA8IS0tIFNlcmJpYW4gKExhdGluLE1vbnRlbmVncm8pIC0tPgorICAgICAgICA8aXRlbT5zci1MYXRuLVJTPC9pdGVtPiA8IS0tIFNlcmJpYW4gKExhdGluLFNlcmJpYSkgLS0+CisgICAgICAgIDxpdGVtPnNyLUxhdG4tWEs8L2l0ZW0+IDwhLS0gU2VyYmlhbiAoTGF0aW4sS29zb3ZvKSAtLT4KKyAgICAgICAgPGl0ZW0+c3YtQVg8L2l0ZW0+IDwhLS0gU3dlZGlzaCAow4VsYW5kIElzbGFuZHMpIC0tPgorICAgICAgICA8aXRlbT5zdi1GSTwvaXRlbT4gPCEtLSBTd2VkaXNoIChGaW5sYW5kKSAtLT4KKyAgICAgICAgPGl0ZW0+c3YtU0U8L2l0ZW0+IDwhLS0gU3dlZGlzaCAoU3dlZGVuKSAtLT4KKyAgICAgICAgPGl0ZW0+c3ctQ0Q8L2l0ZW0+IDwhLS0gU3dhaGlsaSAoQ29uZ28gKERSQykpIC0tPgorICAgICAgICA8aXRlbT5zdy1LRTwvaXRlbT4gPCEtLSBTd2FoaWxpIChLZW55YSkgLS0+CisgICAgICAgIDxpdGVtPnN3LVRaPC9pdGVtPiA8IS0tIFN3YWhpbGkgKFRhbnphbmlhKSAtLT4KKyAgICAgICAgPGl0ZW0+c3ctVUc8L2l0ZW0+IDwhLS0gU3dhaGlsaSAoVWdhbmRhKSAtLT4KKyAgICAgICAgPGl0ZW0+dGEtSU48L2l0ZW0+IDwhLS0gVGFtaWwgKEluZGlhKSAtLT4KKyAgICAgICAgPGl0ZW0+dGEtTEs8L2l0ZW0+IDwhLS0gVGFtaWwgKFNyaSBMYW5rYSkgLS0+CisgICAgICAgIDxpdGVtPnRhLU1ZPC9pdGVtPiA8IS0tIFRhbWlsIChNYWxheXNpYSkgLS0+CisgICAgICAgIDxpdGVtPnRhLVNHPC9pdGVtPiA8IS0tIFRhbWlsIChTaW5nYXBvcmUpIC0tPgorICAgICAgICA8aXRlbT50ZS1JTjwvaXRlbT4gPCEtLSBUZWx1Z3UgKEluZGlhKSAtLT4KKyAgICAgICAgPGl0ZW0+dGVvLUtFPC9pdGVtPiA8IS0tIFRlc28gKEtlbnlhKSAtLT4KKyAgICAgICAgPGl0ZW0+dGVvLVVHPC9pdGVtPiA8IS0tIFRlc28gKFVnYW5kYSkgLS0+CisgICAgICAgIDxpdGVtPnRoLVRIPC9pdGVtPiA8IS0tIFRoYWkgKFRoYWlsYW5kKSAtLT4KKyAgICAgICAgPGl0ZW0+dGktRVI8L2l0ZW0+IDwhLS0gVGlncmlueWEgKEVyaXRyZWEpIC0tPgorICAgICAgICA8aXRlbT50aS1FVDwvaXRlbT4gPCEtLSBUaWdyaW55YSAoRXRoaW9waWEpIC0tPgorICAgICAgICA8aXRlbT50by1UTzwvaXRlbT4gPCEtLSBUb25nYW4gKFRvbmdhKSAtLT4KKyAgICAgICAgPGl0ZW0+dHItQ1k8L2l0ZW0+IDwhLS0gVHVya2lzaCAoQ3lwcnVzKSAtLT4KKyAgICAgICAgPGl0ZW0+dHItVFI8L2l0ZW0+IDwhLS0gVHVya2lzaCAoVHVya2V5KSAtLT4KKyAgICAgICAgPGl0ZW0+dHdxLU5FPC9pdGVtPiA8IS0tIFRhc2F3YXEgKE5pZ2VyKSAtLT4KKyAgICAgICAgPGl0ZW0+dHptLU1BPC9pdGVtPiA8IS0tIENlbnRyYWwgQXRsYXMgVGFtYXppZ2h0IChNb3JvY2NvKSAtLT4KKyAgICAgICAgPGl0ZW0+dWctQ048L2l0ZW0+IDwhLS0gVXlnaHVyIChDaGluYSkgLS0+CisgICAgICAgIDxpdGVtPnVrLVVBPC9pdGVtPiA8IS0tIFVrcmFpbmlhbiAoVWtyYWluZSkgLS0+CisgICAgICAgIDxpdGVtPnVyLUlOPC9pdGVtPiA8IS0tIFVyZHUgKEluZGlhKSAtLT4KKyAgICAgICAgPGl0ZW0+dXItUEs8L2l0ZW0+IDwhLS0gVXJkdSAoUGFraXN0YW4pIC0tPgorICAgICAgICA8aXRlbT51ei1BcmFiLUFGPC9pdGVtPiA8IS0tIFV6YmVrIChBcmFiaWMsQWZnaGFuaXN0YW4pIC0tPgorICAgICAgICA8aXRlbT51ei1DeXJsLVVaPC9pdGVtPiA8IS0tIFV6YmVrIChDeXJpbGxpYyxVemJla2lzdGFuKSAtLT4KKyAgICAgICAgPGl0ZW0+dXotTGF0bi1VWjwvaXRlbT4gPCEtLSBVemJlayAoTGF0aW4sVXpiZWtpc3RhbikgLS0+CisgICAgICAgIDxpdGVtPnZpLVZOPC9pdGVtPiA8IS0tIFZpZXRuYW1lc2UgKFZpZXRuYW0pIC0tPgorICAgICAgICA8aXRlbT52dW4tVFo8L2l0ZW0+IDwhLS0gVnVuam8gKFRhbnphbmlhKSAtLT4KKyAgICAgICAgPGl0ZW0+d2FlLUNIPC9pdGVtPiA8IS0tIFdhbHNlciAoU3dpdHplcmxhbmQpIC0tPgorICAgICAgICA8aXRlbT54b2ctVUc8L2l0ZW0+IDwhLS0gU29nYSAoVWdhbmRhKSAtLT4KKyAgICAgICAgPGl0ZW0+eWF2LUNNPC9pdGVtPiA8IS0tIFlhbmdiZW4gKENhbWVyb29uKSAtLT4KKyAgICAgICAgPGl0ZW0+eW8tQko8L2l0ZW0+IDwhLS0gWW9ydWJhIChCZW5pbikgLS0+CisgICAgICAgIDxpdGVtPnlvLU5HPC9pdGVtPiA8IS0tIFlvcnViYSAoTmlnZXJpYSkgLS0+CisgICAgICAgIDxpdGVtPnpnaC1NQTwvaXRlbT4gPCEtLSBTdGFuZGFyZCBNb3JvY2NhbiBUYW1hemlnaHQgKE1vcm9jY28pIC0tPgorICAgICAgICA8aXRlbT56aC1IYW5zLUNOPC9pdGVtPiA8IS0tIENoaW5lc2UgKFNpbXBsaWZpZWQgSGFuLENoaW5hKSAtLT4KKyAgICAgICAgPGl0ZW0+emgtSGFucy1ISzwvaXRlbT4gPCEtLSBDaGluZXNlIChTaW1wbGlmaWVkIEhhbixIb25nIEtvbmcpIC0tPgorICAgICAgICA8aXRlbT56aC1IYW5zLU1PPC9pdGVtPiA8IS0tIENoaW5lc2UgKFNpbXBsaWZpZWQgSGFuLE1hY2F1KSAtLT4KKyAgICAgICAgPGl0ZW0+emgtSGFucy1TRzwvaXRlbT4gPCEtLSBDaGluZXNlIChTaW1wbGlmaWVkIEhhbixTaW5nYXBvcmUpIC0tPgorICAgICAgICA8aXRlbT56aC1IYW50LUhLPC9pdGVtPiA8IS0tIENoaW5lc2UgKFRyYWRpdGlvbmFsIEhhbixIb25nIEtvbmcpIC0tPgorICAgICAgICA8aXRlbT56aC1IYW50LU1PPC9pdGVtPiA8IS0tIENoaW5lc2UgKFRyYWRpdGlvbmFsIEhhbixNYWNhdSkgLS0+CisgICAgICAgIDxpdGVtPnpoLUhhbnQtVFc8L2l0ZW0+IDwhLS0gQ2hpbmVzZSAoVHJhZGl0aW9uYWwgSGFuLFRhaXdhbikgLS0+CisgICAgICAgIDxpdGVtPnp1LVpBPC9pdGVtPiA8IS0tIFp1bHUgKFNvdXRoIEFmcmljYSkgLS0+CisgICAgPC9zdHJpbmctYXJyYXk+CisKKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwKaW5kZXggZjcyNjg2MC4uYmU5YmE2MiAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCkBAIC00ODcsMTAgKzQ4NywzNCBAQAogICAgIDwhLS0gVGFrZSBidWcgcmVwb3J0IG1lbnUgdGl0bGUgW0NIQVIgTElNSVQ9Tk9ORV0gLS0+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdGl0bGUiPlRha2UgYnVnIHJlcG9ydDwvc3RyaW5nPgogICAgIDwhLS0gTWVzc2FnZSBpbiBidWdyZXBvcnQgZGlhbG9nIGRlc2NyaWJpbmcgd2hhdCBpdCBkb2VzIFtDSEFSIExJTUlUPU5PTkVdIC0tPgorICAgIDwhLS0gVE9ETzogcmVtb3ZlIGlmIG5vdCB1c2VkIGFueW1vcmUgLS0+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfbWVzc2FnZSI+VGhpcyB3aWxsIGNvbGxlY3QgaW5mb3JtYXRpb24gYWJvdXQgeW91cgogICAgICAgICBjdXJyZW50IGRldmljZSBzdGF0ZSwgdG8gc2VuZCBhcyBhbiBlLW1haWwgbWVzc2FnZS4gIEl0IHdpbGwgdGFrZSBhIGxpdHRsZQogICAgICAgICB0aW1lIGZyb20gc3RhcnRpbmcgdGhlIGJ1ZyByZXBvcnQgdW50aWwgaXQgaXMgcmVhZHkgdG8gYmUgc2VudDsgcGxlYXNlIGJlCiAgICAgICAgIHBhdGllbnQuPC9zdHJpbmc+CisgICAgPCEtLSBUaXRsZSBpbiB0aGUgYnVncmVwb3J0IGRpYWxvZyBmb3IgdGhlIGludGVyYWN0aXZlIHdvcmtmbG93LiBbQ0hBUiBMSU1JVD0yMF0gLS0+CisgICAgPCEtLSBETyBOT1QgVFJBTlNMQVRFIFlFVDogZmluYWwgcGhyYXNpbmcgc3RpbGwgYmVpbmcgZGlzY3Vzc2VkIC0tPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X29wdGlvbl9pbnRlcmFjdGl2ZV90aXRsZSI+SW50ZXJhY3RpdmUgcmVwb3J0PC9zdHJpbmc+CisgICAgPCEtLSBTdW1tYXJ5IGluIHRoZSBidWdyZXBvcnQgZGlhbG9nIGZvciB0aGUgaW50ZXJhY3RpdmUgd29ya2Zsb3cuIFtDSEFSIExJTUlUPU5PTkVdIC0tPgorICAgIDwhLS0gRE8gTk9UIFRSQU5TTEFURSBZRVQ6IGZpbmFsIHBocmFzaW5nIHN0aWxsIGJlaW5nIGRpc2N1c3NlZCAtLT4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9vcHRpb25faW50ZXJhY3RpdmVfc3VtbWFyeSI+VXNlIHRoaXMgdW5kZXIgbW9zdCBjaXJjdW1zdGFuY2VzLgorICAgICAgICBJdCBhbGxvd3MgeW91IHRvIHRyYWNrIHByb2dyZXNzIG9mIHRoZSByZXBvcnQgYW5kIGVudGVyIG1vcmUgZGV0YWlscyBhYm91dCB0aGUgcHJvYmxlbS4KKyAgICAgICAgSXQgbWlnaHQgb21pdCBzb21lIGxlc3MtdXNlZCBzZWN0aW9ucyB0aGF0IHRha2UgYSBsb25nIHRpbWUgdG8gcmVwb3J0Ljwvc3RyaW5nPgorICAgIDwhLS0gVGl0bGUgaW4gdGhlIGJ1Z3JlcG9ydCBkaWFsb2cgZm9yIHRoZSBmdWxsIHdvcmtmbG93LiBbQ0hBUiBMSU1JVD0yMF0gLS0+CisgICAgPCEtLSBETyBOT1QgVFJBTlNMQVRFIFlFVDogZmluYWwgcGhyYXNpbmcgc3RpbGwgYmVpbmcgZGlzY3Vzc2VkIC0tPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X29wdGlvbl9mdWxsX3RpdGxlIj5GdWxsIHJlcG9ydDwvc3RyaW5nPgorICAgIDwhLS0gU3VtbWFyeSBpbiB0aGUgYnVncmVwb3J0IGRpYWxvZyBmb3IgdGhlIGZ1bGwgd29ya2Zsb3cuIFtDSEFSIExJTUlUPTIwXSAtLT4KKyAgICA8IS0tIERPIE5PVCBUUkFOU0xBVEUgWUVUOiBmaW5hbCBwaHJhc2luZyBzdGlsbCBiZWluZyBkaXNjdXNzZWQgLS0+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfb3B0aW9uX2Z1bGxfc3VtbWFyeSI+VXNlIHRoaXMgb3B0aW9uIGZvciBtaW5pbWFsIGludGVyZmVyZW5jZSB3aGVuCisgICAgICAgIHlvdXIgZGV2aWNlIGlzIHVucmVzcG9uc2l2ZSBvciB0b28gc2xvdywgb3Igd2hlbiB5b3UgbmVlZCBhbGwgc2VjdGlvbnMuCisgICAgICAgIERvZXMgbm90IHRha2UgYSBzY3JlZW5zaG90IG9yIGFsbG93IHlvdSB0byBlbnRlciBtb3JlIGRldGFpbHMuPC9zdHJpbmc+CisgICAgPCEtLSAgVG9hc3QgbWVzc2FnZSBpbmZvcm1pbmcgdXNlciBpbiBob3cgbWFueSBzZWNvbmRzIGEgYnVncmVwb3J0IHNjcmVlbnNob3Qgd2lsbCBiZSB0YWtlbiAtLT4KKyAgICA8IS0tIERPIE5PVCBUUkFOU0xBVEUgWUVUOiBmaW5hbCBwaHJhc2luZyBzdGlsbCBiZWluZyBkaXNjdXNzZWQgLS0+CisgICAgPHBsdXJhbHMgbmFtZT0iYnVncmVwb3J0X2NvdW50ZG93biI+CisgICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPlRha2luZyBzY3JlZW5zaG90IGZvciBidWcgcmVwb3J0IGluIDx4bGlmZjpnIGlkPSJudW1iZXIiPiVkPC94bGlmZjpnPiBzZWNvbmQuPC9pdGVtPgorICAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPlRha2luZyBzY3JlZW5zaG90IGZvciBidWcgcmVwb3J0IGluIDx4bGlmZjpnIGlkPSJudW1iZXIiPiVkPC94bGlmZjpnPiBzZWNvbmRzLjwvaXRlbT4KKyAgICA8L3BsdXJhbHM+CisKICAgICA8IS0tIEZvcm1hdCBmb3IgYnVpbGQgc3VtbWFyeSBpbmZvIFtDSEFSIExJTUlUPU5PTkVdIC0tPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0YXR1cyIgdHJhbnNsYXRhYmxlPSJmYWxzZSI+JXMgKCVzKTwvc3RyaW5nPgogCkBAIC01MzcsNiArNTYxLDkgQEAKICAgICA8IS0tIFRoZSBkaXZpZGVyIHN5bWJvbCBiZXR3ZWVuIGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgbm90aWZpY2F0aW9uIGhlYWRlci4gbm90IHRyYW5zbGF0YWJsZSBbQ0hBUiBMSU1JVD0xXSAtLT4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oZWFkZXJfZGl2aWRlcl9zeW1ib2wiIHRyYW5zbGF0YWJsZT0iZmFsc2UiPuKAojwvc3RyaW5nPgogCisgICAgPCEtLSBUZXh0IHNob3duIGluIHBsYWNlIG9mIG5vdGlmaWNhdGlvbiBjb250ZW50cyB3aGVuIHRoZSBub3RpZmljYXRpb24gaXMgaGlkZGVuIG9uIGEgc2VjdXJlIGxvY2tzY3JlZW4gLS0+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiPkNvbnRlbnRzIGhpZGRlbjwvc3RyaW5nPgorCiAgICAgPCEtLSBEaXNwbGF5ZWQgdG8gdGhlIHVzZXIgdG8gdGVsbCB0aGVtIHRoYXQgdGhleSBoYXZlIHN0YXJ0ZWQgdXAgdGhlIHBob25lIGluICJzYWZlIG1vZGUiIC0tPgogICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiPlNhZmUgbW9kZTwvc3RyaW5nPgogCkBAIC05OTksMTEgKzEwMjYsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSI+QWxsb3dzIHRoZSBhcHAgdG8gY29udHJvbCB0aGUgdmlicmF0b3IuPC9zdHJpbmc+CiAKICAgICA8IS0tIFRpdGxlIG9mIGFuIGFwcGxpY2F0aW9uIHBlcm1pc3Npb24sIGxpc3RlZCBzbyB0aGUgdXNlciBjYW4gY2hvb3NlIHdoZXRoZXIgdGhleSB3YW50IHRvIGFsbG93IHRoZSBhcHBsaWNhdGlvbiB0byBkbyB0aGlzLiAtLT4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCI+Y29udHJvbCBmbGFzaGxpZ2h0PC9zdHJpbmc+Ci0gICAgPCEtLSBEZXNjcmlwdGlvbiBvZiBhbiBhcHBsaWNhdGlvbiBwZXJtaXNzaW9uLCBsaXN0ZWQgc28gdGhlIHVzZXIgY2FuIGNob29zZSB3aGV0aGVyIHRoZXkgd2FudCB0byBhbGxvdyB0aGUgYXBwbGljYXRpb24gdG8gZG8gdGhpcy4gLS0+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0Ij5BbGxvd3MgdGhlIGFwcCB0byBjb250cm9sIHRoZSBmbGFzaGxpZ2h0Ljwvc3RyaW5nPgotCi0gICAgPCEtLSBUaXRsZSBvZiBhbiBhcHBsaWNhdGlvbiBwZXJtaXNzaW9uLCBsaXN0ZWQgc28gdGhlIHVzZXIgY2FuIGNob29zZSB3aGV0aGVyIHRoZXkgd2FudCB0byBhbGxvdyB0aGUgYXBwbGljYXRpb24gdG8gZG8gdGhpcy4gLS0+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSI+ZGlyZWN0bHkgY2FsbCBwaG9uZSBudW1iZXJzPC9zdHJpbmc+CiAgICAgPCEtLSBEZXNjcmlwdGlvbiBvZiBhbiBhcHBsaWNhdGlvbiBwZXJtaXNzaW9uLCBsaXN0ZWQgc28gdGhlIHVzZXIgY2FuIGNob29zZSB3aGV0aGVyIHRoZXkgd2FudCB0byBhbGxvdyB0aGUgYXBwbGljYXRpb24gdG8gZG8gdGhpcy4gLS0+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiPkFsbG93cyB0aGUgYXBwIHRvIGNhbGwgcGhvbmUgbnVtYmVycwpAQCAtMzA3OCw2ICszMTAwLDkgQEAKICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIj5Ob3RpZmljYXRpb24gbGlzdGVuZXI8L3N0cmluZz4KICAgICA8IS0tIExhYmVsIHRvIHNob3cgZm9yIGEgc2VydmljZSB0aGF0IGlzIHJ1bm5pbmcgYmVjYXVzZSBpdCBpcyBwcm92aWRpbmcgY29uZGl0aW9ucy4gLS0+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIj5Db25kaXRpb24gcHJvdmlkZXI8L3N0cmluZz4KKyAgICA8IS0tIExhYmVsIHRvIHNob3cgZm9yIGEgc2VydmljZSB0aGF0IGlzIHJ1bm5pbmcgYmVjYXVzZSBpdCBpcyBvYnNlcnZpbmcgYW5kIG1vZGlmeWluZyB0aGUKKyAgICAgICAgIGltcG9ydGFuY2Ugb2YgdGhlIHVzZXIncyBub3RpZmljYXRpb25zLiAtLT4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9hc3Npc3RhbnRfYmluZGluZ19sYWJlbCI+Tm90aWZpY2F0aW9uIGFzc2lzdGFudDwvc3RyaW5nPgogCiAgICAgPCEtLSBEbyBOb3QgVHJhbnNsYXRlOiBBbHRlcm5hdGUgZXJpLnhtbCAtLT4KICAgICA8c3RyaW5nIG5hbWU9ImFsdGVybmF0ZV9lcmlfZmlsZSI+L2RhdGEvZXJpLnhtbDwvc3RyaW5nPgpAQCAtMzk2MywyNSArMzk4OCw2IEBACiAgICAgPCEtLSBbQ0hBUl9MSU1JVD1OT05FXSBCYXR0ZXJ5IHNhdmVyOiBGZWF0dXJlIGRlc2NyaXB0aW9uIC0tPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiI+VG8gaGVscCBpbXByb3ZlIGJhdHRlcnkgbGlmZSwgYmF0dGVyeSBzYXZlciByZWR1Y2VzIHlvdXIgZGV2aWNl4oCZcyBwZXJmb3JtYW5jZSBhbmQgbGltaXRzIHZpYnJhdGlvbiwgbG9jYXRpb24gc2VydmljZXMsIGFuZCBtb3N0IGJhY2tncm91bmQgZGF0YS4gRW1haWwsIG1lc3NhZ2luZywgYW5kIG90aGVyIGFwcHMgdGhhdCByZWx5IG9uIHN5bmNpbmcgbWF5IG5vdCB1cGRhdGUgdW5sZXNzIHlvdSBvcGVuIHRoZW0uXG5cbkJhdHRlcnkgc2F2ZXIgdHVybnMgb2ZmIGF1dG9tYXRpY2FsbHkgd2hlbiB5b3VyIGRldmljZSBpcyBjaGFyZ2luZy48L3N0cmluZz4KIAotCi0gICAgPCEtLSBbQ0hBUiBMSU1JVD0xMDBdIE5vdGlmaWNhdGlvbiBpbXBvcnRhbmNlIHNsaWRlciB0aXRsZSAtLT4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX3RpdGxlIj5JbXBvcnRhbmNlPC9zdHJpbmc+Ci0KLSAgICA8IS0tIFtDSEFSIExJTUlUPTEwMF0gTm90aWZpY2F0aW9uIEltcG9ydGFuY2Ugc2xpZGVyOiBibG9ja2VkIGltcG9ydGFuY2UgbGV2ZWwgZGVzY3JpcHRpb24gLS0+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIj5CbG9ja2VkOiBOZXZlciBzaG93IHRoZXNlIG5vdGlmaWNhdGlvbnM8L3N0cmluZz4KLQotICAgIDwhLS0gW0NIQVIgTElNSVQ9MTAwXSBOb3RpZmljYXRpb24gSW1wb3J0YW5jZSBzbGlkZXI6IGxvdyBpbXBvcnRhbmNlIGxldmVsIGRlc2NyaXB0aW9uIC0tPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93Ij5Mb3c6IFNpbGVudGx5IHNob3cgYXQgdGhlIGJvdHRvbSBvZiB0aGUgbm90aWZpY2F0aW9uIGxpc3Q8L3N0cmluZz4KLQotICAgIDwhLS0gW0NIQVIgTElNSVQ9MTAwXSBOb3RpZmljYXRpb24gSW1wb3J0YW5jZSBzbGlkZXI6IG5vcm1hbCBpbXBvcnRhbmNlIGxldmVsIGRlc2NyaXB0aW9uIC0tPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCI+Tm9ybWFsOiBTaWxlbnRseSBzaG93IHRoZXNlIG5vdGlmaWNhdGlvbnM8L3N0cmluZz4KLQotICAgIDwhLS0gW0NIQVIgTElNSVQ9MTAwXSBOb3RpZmljYXRpb24gSW1wb3J0YW5jZSBzbGlkZXI6IGhpZ2ggaW1wb3J0YW5jZSBsZXZlbCBkZXNjcmlwdGlvbiAtLT4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giPkhpZ2g6IFNob3cgYXQgdGhlIHRvcCBvZiB0aGUgbm90aWZpY2F0aW9ucyBsaXN0IGFuZCBtYWtlIHNvdW5kPC9zdHJpbmc+Ci0KLSAgICA8IS0tIFtDSEFSIExJTUlUPTEwMF0gTm90aWZpY2F0aW9uIEltcG9ydGFuY2Ugc2xpZGVyOiBtYXggaW1wb3J0YW5jZSBsZXZlbCBkZXNjcmlwdGlvbiAtLT4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCI+VXJnZW50OiBQZWVrIG9udG8gdGhlIHNjcmVlbiBhbmQgbWFrZSBzb3VuZDwvc3RyaW5nPgotCiAgICAgPCEtLSBaZW4gbW9kZSBjb25kaXRpb24gLSBzdW1tYXJ5OiB0aW1lIGR1cmF0aW9uIGluIG1pbnV0ZXMuIFtDSEFSIExJTUlUPU5PTkVdIC0tPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSI+CiAgICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPkZvciBvbmUgbWludXRlICh1bnRpbCA8eGxpZmY6ZyBpZD0iZm9ybWF0dGVkVGltZSIgZXhhbXBsZT0iMTA6MDAgUE0iPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMvc3R5bGVzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMvc3R5bGVzLnhtbAppbmRleCA5YTQwMTZiLi45MzdkODNkIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzL3N0eWxlcy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy9zdHlsZXMueG1sCkBAIC0xMjM1LDcgKzEyMzUsNyBAQAogICAgICAgICA8aXRlbSBuYW1lPSJzdWJ0aXRsZVRleHRBcHBlYXJhbmNlIj5Ac3R5bGUvVGV4dEFwcGVhcmFuY2UuV2lkZ2V0LlRvb2xiYXIuU3VidGl0bGU8L2l0ZW0+CiAgICAgICAgIDxpdGVtIG5hbWU9Im1pbkhlaWdodCI+P2F0dHIvYWN0aW9uQmFyU2l6ZTwvaXRlbT4KICAgICAgICAgPGl0ZW0gbmFtZT0idGl0bGVNYXJnaW4iPjRkcDwvaXRlbT4KLSAgICAgICAgPGl0ZW0gbmFtZT0ibWF4QnV0dG9uSGVpZ2h0Ij41NmRwPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJtYXhCdXR0b25IZWlnaHQiPkBkaW1lbi9hY3Rpb25fYmFyX2RlZmF1bHRfaGVpZ2h0X21hdGVyaWFsPC9pdGVtPgogICAgICAgICA8aXRlbSBuYW1lPSJidXR0b25HcmF2aXR5Ij50b3A8L2l0ZW0+CiAgICAgICAgIDxpdGVtIG5hbWU9Im5hdmlnYXRpb25CdXR0b25TdHlsZSI+QHN0eWxlL1dpZGdldC5Ub29sYmFyLkJ1dHRvbi5OYXZpZ2F0aW9uPC9pdGVtPgogICAgICAgICA8aXRlbSBuYW1lPSJjb2xsYXBzZUljb24iPj9hdHRyL2hvbWVBc1VwSW5kaWNhdG9yPC9pdGVtPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy9zdHlsZXNfbWF0ZXJpYWwueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy9zdHlsZXNfbWF0ZXJpYWwueG1sCmluZGV4IDc0ZWJmMjYuLjg0ODVlNTkgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMvc3R5bGVzX21hdGVyaWFsLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzL3N0eWxlc19tYXRlcmlhbC54bWwKQEAgLTQzMiw2ICs0MzIsOCBAQAogICAgICAgICA8aXRlbSBuYW1lPSJ0ZXh0U2l6ZSI+QGRpbWVuL25vdGlmaWNhdGlvbl90ZXh0X3NpemU8L2l0ZW0+CiAgICAgPC9zdHlsZT4KIAorICAgIDxzdHlsZSBuYW1lPSJUZXh0QXBwZWFyYW5jZS5NYXRlcmlhbC5Ob3RpZmljYXRpb24uUmVwbHkiIC8+CisKICAgICA8c3R5bGUgbmFtZT0iVGV4dEFwcGVhcmFuY2UuTWF0ZXJpYWwuTm90aWZpY2F0aW9uLlRpdGxlIj4KICAgICAgICAgPGl0ZW0gbmFtZT0idGV4dENvbG9yIj5AY29sb3IvcHJpbWFyeV90ZXh0X2RlZmF1bHRfbWF0ZXJpYWxfbGlnaHQ8L2l0ZW0+CiAgICAgICAgIDxpdGVtIG5hbWU9InRleHRTaXplIj5AZGltZW4vbm90aWZpY2F0aW9uX3RpdGxlX3RleHRfc2l6ZTwvaXRlbT4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMvc3R5bGVzX21pY3JvLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMvc3R5bGVzX21pY3JvLnhtbAppbmRleCAwNTgzNWU3Li43ZGRlNWY4IDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzL3N0eWxlc19taWNyby54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy9zdHlsZXNfbWljcm8ueG1sCkBAIC0yNiw2ICsyNiwxMCBAQAogICAgICAgICA8aXRlbSBuYW1lPSJ0YXNrT3BlbkV4aXRBbmltYXRpb24iPkBudWxsPC9pdGVtPgogICAgICAgICA8aXRlbSBuYW1lPSJ0YXNrQ2xvc2VFbnRlckFuaW1hdGlvbiI+QG51bGw8L2l0ZW0+CiAgICAgICAgIDxpdGVtIG5hbWU9InRhc2tDbG9zZUV4aXRBbmltYXRpb24iPkBhbmltL3NsaWRlX291dF9taWNybzwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0idGFza1RvRnJvbnRFbnRlckFuaW1hdGlvbiI+QGFuaW0vc2xpZGVfaW5fbWljcm88L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InRhc2tUb0Zyb250RXhpdEFuaW1hdGlvbiI+QG51bGw8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InRhc2tUb0JhY2tFbnRlckFuaW1hdGlvbiI+QG51bGw8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InRhc2tUb0JhY2tFeGl0QW5pbWF0aW9uIj5AYW5pbS9zbGlkZV9vdXRfbWljcm88L2l0ZW0+CiAgICAgICAgIDxpdGVtIG5hbWU9IndhbGxwYXBlck9wZW5FbnRlckFuaW1hdGlvbiI+QG51bGw8L2l0ZW0+CiAgICAgICAgIDxpdGVtIG5hbWU9IndhbGxwYXBlck9wZW5FeGl0QW5pbWF0aW9uIj5AYW5pbS9zbGlkZV9vdXRfbWljcm88L2l0ZW0+CiAgICAgICAgIDxpdGVtIG5hbWU9IndhbGxwYXBlckNsb3NlRW50ZXJBbmltYXRpb24iPkBhbmltL3NsaWRlX2luX21pY3JvPC9pdGVtPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy9zeW1ib2xzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMvc3ltYm9scy54bWwKaW5kZXggNjQwZjkwYi4uODQ1YzhjOSAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy9zeW1ib2xzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzL3N5bWJvbHMueG1sCkBAIC0xMTA0LDYgKzExMDQsNyBAQAogICA8amF2YS1zeW1ib2wgdHlwZT0ic3RyaW5nIiBuYW1lPSJjb25maWdfZXRoZXJuZXRfdGNwX2J1ZmZlcnMiIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHJpbmciIG5hbWU9ImNvbmZpZ193aWZpX3RjcF9idWZmZXJzIiAvPgogCisgIDxqYXZhLXN5bWJvbCB0eXBlPSJwbHVyYWxzIiBuYW1lPSJidWdyZXBvcnRfY291bnRkb3duIiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0icGx1cmFscyIgbmFtZT0iZHVyYXRpb25faG91cnMiIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJwbHVyYWxzIiBuYW1lPSJkdXJhdGlvbl9taW51dGVzIiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0icGx1cmFscyIgbmFtZT0iZHVyYXRpb25fc2Vjb25kcyIgLz4KQEAgLTExMjQsNiArMTEyNSw3IEBACiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJhcnJheSIgbmFtZT0ic2ltX2NvbG9ycyIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9ImFycmF5IiBuYW1lPSJzcGVjaWFsX2xvY2FsZV9jb2RlcyIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9ImFycmF5IiBuYW1lPSJzcGVjaWFsX2xvY2FsZV9uYW1lcyIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9ImFycmF5IiBuYW1lPSJzdXBwb3J0ZWRfbG9jYWxlcyIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9ImFycmF5IiBuYW1lPSJjb25maWdfY2RtYV9kdW5fc3VwcG9ydGVkX3R5cGVzIiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0iYXJyYXkiIG5hbWU9ImNvbmZpZ19kaXNhYmxlZFVudGlsVXNlZFByZWluc3RhbGxlZEltZXMiIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJhcnJheSIgbmFtZT0iY29uZmlnX2Rpc2FibGVkVW50aWxVc2VkUHJlaW5zdGFsbGVkQ2FycmllckFwcHMiIC8+CkBAIC0xNDkwLDYgKzE0OTIsOCBAQAogICA8amF2YS1zeW1ib2wgdHlwZT0iYm9vbCIgbmFtZT0idGFyZ2V0X2hvbmV5Y29tYl9uZWVkc19vcHRpb25zX21lbnUiIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJkaW1lbiIgbmFtZT0iZG9ja2VkX3N0YWNrX2RpdmlkZXJfdGhpY2tuZXNzIiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0iZGltZW4iIG5hbWU9ImRvY2tlZF9zdGFja19kaXZpZGVyX2luc2V0cyIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9ImludGVnZXIiIG5hbWU9ImNvbmZpZ19kb2NrZWRTdGFja0RpdmlkZXJTbmFwTW9kZSIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9ImZyYWN0aW9uIiBuYW1lPSJkb2NrZWRfc3RhY2tfZGl2aWRlcl9maXhlZF9yYXRpbyIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9ImRpbWVuIiBuYW1lPSJuYXZpZ2F0aW9uX2Jhcl9oZWlnaHQiIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJkaW1lbiIgbmFtZT0ibmF2aWdhdGlvbl9iYXJfaGVpZ2h0X2xhbmRzY2FwZSIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9ImRpbWVuIiBuYW1lPSJuYXZpZ2F0aW9uX2Jhcl93aWR0aCIgLz4KQEAgLTE1NjMsOSArMTU2NywxMyBAQAogICA8amF2YS1zeW1ib2wgdHlwZT0ic3RyaW5nIiBuYW1lPSJhbmRyb2lkX3ByZXBhcmluZ19hcGsiIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHJpbmciIG5hbWU9ImFuZHJvaWRfc3RhcnRfdGl0bGUiIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHJpbmciIG5hbWU9ImFuZHJvaWRfdXBncmFkaW5nX3RpdGxlIiAvPgotICA8amF2YS1zeW1ib2wgdHlwZT0ic3RyaW5nIiBuYW1lPSJidWdyZXBvcnRfdGl0bGUiIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHJpbmciIG5hbWU9ImJ1Z3JlcG9ydF9tZXNzYWdlIiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0ic3RyaW5nIiBuYW1lPSJidWdyZXBvcnRfb3B0aW9uX2Z1bGxfc3VtbWFyeSIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9InN0cmluZyIgbmFtZT0iYnVncmVwb3J0X29wdGlvbl9mdWxsX3RpdGxlIiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0ic3RyaW5nIiBuYW1lPSJidWdyZXBvcnRfb3B0aW9uX2ludGVyYWN0aXZlX3N1bW1hcnkiIC8+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHJpbmciIG5hbWU9ImJ1Z3JlcG9ydF9vcHRpb25faW50ZXJhY3RpdmVfdGl0bGUiIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHJpbmciIG5hbWU9ImJ1Z3JlcG9ydF9zdGF0dXMiIC8+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHJpbmciIG5hbWU9ImJ1Z3JlcG9ydF90aXRsZSIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9InN0cmluZyIgbmFtZT0iY29uZmlnX29yaWVudGF0aW9uU2Vuc29yVHlwZSIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9InN0cmluZyIgbmFtZT0iZmFjZXVubG9ja19tdWx0aXBsZV9mYWlsdXJlcyIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9InN0cmluZyIgbmFtZT0iZ2xvYmFsX2FjdGlvbl9wb3dlcl9vZmYiIC8+CkBAIC0xODEwLDYgKzE4MTgsNyBAQAogICA8amF2YS1zeW1ib2wgdHlwZT0ic3RyaW5nIiBuYW1lPSJsb3dfaW50ZXJuYWxfc3RvcmFnZV92aWV3X3RpdGxlIiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0ic3RyaW5nIiBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9InN0cmluZyIgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9InN0cmluZyIgbmFtZT0ibm90aWZpY2F0aW9uX2Fzc2lzdGFudF9iaW5kaW5nX2xhYmVsIiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0ic3RyaW5nIiBuYW1lPSJyZXBvcnQiIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHJpbmciIG5hbWU9InNlbGVjdF9pbnB1dF9tZXRob2QiIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHJpbmciIG5hbWU9InNlbGVjdF9rZXlib2FyZF9sYXlvdXRfbm90aWZpY2F0aW9uX3RpdGxlIiAvPgpAQCAtMjA5MCwxMiArMjA5OSw2IEBACiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJhcnJheSIgbmFtZT0iY29uZmlnX3N5c3RlbV9jb25kaXRpb25fcHJvdmlkZXJzIiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0ic3RyaW5nIiBuYW1lPSJtdXRlZF9ieSIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9InN0cmluZyIgbmFtZT0iemVuX21vZGVfYWxhcm0iIC8+Ci0gIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHJpbmciIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIC8+Ci0gIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHJpbmciIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgLz4KLSAgPGphdmEtc3ltYm9sIHR5cGU9InN0cmluZyIgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgLz4KLSAgPGphdmEtc3ltYm9sIHR5cGU9InN0cmluZyIgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgLz4KLSAgPGphdmEtc3ltYm9sIHR5cGU9InN0cmluZyIgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiAvPgotICA8amF2YS1zeW1ib2wgdHlwZT0ic3RyaW5nIiBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV90aXRsZSIgLz4KIAogICA8amF2YS1zeW1ib2wgdHlwZT0ic3RyaW5nIiBuYW1lPSJzZWxlY3RfZGF5IiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0ic3RyaW5nIiBuYW1lPSJzZWxlY3RfeWVhciIgLz4KQEAgLTIzNjUsNyArMjM2OCwxMyBAQAogICA8amF2YS1zeW1ib2wgdHlwZT0iaWQiIG5hbWU9ImFkZFRvRGljdGlvbmFyeUJ1dHRvbiIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9ImlkIiBuYW1lPSJkZWxldGVCdXR0b24iIC8+CiAKKyAgPGphdmEtc3ltYm9sIHR5cGU9ImlkIiBuYW1lPSJub3RpZmljYXRpb25fbWF0ZXJpYWxfcmVwbHlfY29udGFpbmVyIiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0iaWQiIG5hbWU9Im5vdGlmaWNhdGlvbl9tYXRlcmlhbF9yZXBseV90ZXh0XzEiIC8+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJpZCIgbmFtZT0ibm90aWZpY2F0aW9uX21hdGVyaWFsX3JlcGx5X3RleHRfMiIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9ImlkIiBuYW1lPSJub3RpZmljYXRpb25fbWF0ZXJpYWxfcmVwbHlfdGV4dF8zIiAvPgorCiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHJpbmciIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIC8+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHJpbmciIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9ImlkIiBuYW1lPSJhcHBfbmFtZV90ZXh0IiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0iaWQiIG5hbWU9Im51bWJlcl9vZl9jaGlsZHJlbiIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9ImlkIiBuYW1lPSJoZWFkZXJfc3ViX3RleHQiIC8+CkBAIC0yMzgxLDcgKzIzOTAsNyBAQAogICA8amF2YS1zeW1ib2wgdHlwZT0iZHJhd2FibGUiIG5hbWU9ImljX2V4cGFuZF9idW5kbGUiIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJkcmF3YWJsZSIgbmFtZT0iaWNfY29sbGFwc2VfYnVuZGxlIiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0iZGltZW4iIG5hbWU9Im5vdGlmaWNhdGlvbl9oZWFkZXJfaGVpZ2h0IiAvPgotICA8amF2YS1zeW1ib2wgdHlwZT0iZGltZW4iIG5hbWU9Im5vdGlmaWNhdGlvbl9iaWdfcGljdHVyZV9jb250ZW50X21pbl9oZWlnaHRfd2l0aF9waWN0dXJlIiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0iZGltZW4iIG5hbWU9Im5vdGlmaWNhdGlvbl9taW5fY29udGVudF9oZWlnaHQiIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJkaW1lbiIgbmFtZT0ibm90aWZpY2F0aW9uX2hlYWRlcl9zaHJpbmtfbWluX3dpZHRoIiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0iZGltZW4iIG5hbWU9Im5vdGlmaWNhdGlvbl9jb250ZW50X21hcmdpbl9zdGFydCIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9ImRpbWVuIiBuYW1lPSJub3RpZmljYXRpb25fY29udGVudF9tYXJnaW5fZW5kIiAvPgpkaWZmIC0tZ2l0IGEvY29yZS90ZXN0cy9jb3JldGVzdHMvQW5kcm9pZC5tayBiL2NvcmUvdGVzdHMvY29yZXRlc3RzL0FuZHJvaWQubWsKaW5kZXggN2NkMjVhZi4uZWU4OTIxZSAxMDA2NDQKLS0tIGEvY29yZS90ZXN0cy9jb3JldGVzdHMvQW5kcm9pZC5taworKysgYi9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9BbmRyb2lkLm1rCkBAIC0yMiw3ICsyMiw3IEBACiAJJChjYWxsIGFsbC1qYXZhLWZpbGVzLXVuZGVyLCBFbmFibGVkVGVzdEFwcC9zcmMpCiAKIExPQ0FMX0RYX0ZMQUdTIDo9IC0tY29yZS1saWJyYXJ5Ci1MT0NBTF9BQVBUX0ZMQUdTID0gLTAgZGF0IC0wIGdsZAorTE9DQUxfQUFQVF9GTEFHUyA9IC0wIGRhdCAtMCBnbGQgLWMgZmEKIExPQ0FMX1NUQVRJQ19KQVZBX0xJQlJBUklFUyA6PSBcCiAgICAgY29yZS10ZXN0cy1zdXBwb3J0IFwKICAgICBhbmRyb2lkLWNvbW1vbiBcCmRpZmYgLS1naXQgYS9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9BbmRyb2lkTWFuaWZlc3QueG1sIGIvY29yZS90ZXN0cy9jb3JldGVzdHMvQW5kcm9pZE1hbmlmZXN0LnhtbAppbmRleCA1MTc3ODM2Li5jMDQ1M2Y4IDEwMDY0NAotLS0gYS9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9BbmRyb2lkTWFuaWZlc3QueG1sCisrKyBiL2NvcmUvdGVzdHMvY29yZXRlc3RzL0FuZHJvaWRNYW5pZmVzdC54bWwKQEAgLTE0Niw2ICsxNDYsMTYgQEAKICAgICAgICAgICAgIDwvaW50ZW50LWZpbHRlcj4KICAgICAgICAgPC9hY3Rpdml0eT4KIAorICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLndpZGdldC5EYXRlUGlja2VyQWN0aXZpdHkiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYWJlbD0iRGF0ZVBpY2tlckFjdGl2aXR5IgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6c2NyZWVuT3JpZW50YXRpb249InBvcnRyYWl0IgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGhlbWU9IkBhbmRyb2lkOnN0eWxlL1RoZW1lLk1hdGVyaWFsLkxpZ2h0Ij4KKyAgICAgICAgICAgIDxpbnRlbnQtZmlsdGVyPgorICAgICAgICAgICAgICAgIDxhY3Rpb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTiIgLz4KKyAgICAgICAgICAgICAgICA8Y2F0ZWdvcnkgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5jYXRlZ29yeS5GUkFNRVdPUktfSU5TVFJVTUVOVEFUSU9OX1RFU1QiIC8+CisgICAgICAgICAgICA8L2ludGVudC1maWx0ZXI+CisgICAgICAgIDwvYWN0aXZpdHk+CisKICAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC53aWRnZXQuZm9jdXMuRGVzY2VuZGFudEZvY3VzYWJpbGl0eSIgYW5kcm9pZDpsYWJlbD0iRGVzY2VuZGFudEZvY3VzYWJpbGl0eSI+CiAgICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KICAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4iIC8+CmRpZmYgLS1naXQgYS9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9yZXMvbGF5b3V0L2RhdGVwaWNrZXJfbGF5b3V0LnhtbCBiL2NvcmUvdGVzdHMvY29yZXRlc3RzL3Jlcy9sYXlvdXQvZGF0ZXBpY2tlcl9sYXlvdXQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3OWY4N2QKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9yZXMvbGF5b3V0L2RhdGVwaWNrZXJfbGF5b3V0LnhtbApAQCAtMCwwICsxLDMzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCEtLSBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorCis8UmVsYXRpdmVMYXlvdXQKKyAgICAgICAgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CisgICAgPERhdGVQaWNrZXIKKyAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvZGF0ZVBpY2tlciIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2NlbnRlckluUGFyZW50PSJ0cnVlIi8+CisgICAgPEVkaXRUZXh0CisgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2JlbG93UGlja2VyIgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJTb21lIFRleHQiCisgICAgICAgICAgICBhbmRyb2lkOnRleHRBbGlnbm1lbnQ9ImNlbnRlciIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2JlbG93PSJAaWQvZGF0ZVBpY2tlciIvPgorPC9SZWxhdGl2ZUxheW91dD4KZGlmZiAtLWdpdCBhL2NvcmUvdGVzdHMvY29yZXRlc3RzL3Jlcy92YWx1ZXMtZmEvc3RyaW5ncy54bWwgYi9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9yZXMvdmFsdWVzLWZhL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4M2Y1ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9yZXMvdmFsdWVzLWZhL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxyZXNvdXJjZXM+CisgICAgPHN0cmluZyBuYW1lPSJkdW1teV9zdHJpbmciPtix2LTYqtmH2ZQg2KfZhNqp24w8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS90ZXN0cy9jb3JldGVzdHMvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbCBiL2NvcmUvdGVzdHMvY29yZXRlc3RzL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwKaW5kZXggMDRiMDQ3OC4uZWY5MTViYiAxMDA2NDQKLS0tIGEvY29yZS90ZXN0cy9jb3JldGVzdHMvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCkBAIC0xMzksNCArMTM5LDcgQEAKICAgICA8IS0tIFJlc3RyaWN0aW9uc01hbmFnZXJUZXN0IC0tPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdHJpY3Rpb25NYW5hZ2VyX3RpdGxlIj5UaXRsZTwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdHJpY3Rpb25NYW5hZ2VyX2Rlc2MiPkRlc2NyaXB0aW9uPC9zdHJpbmc+CisKKyAgICA8IS0tIFJlc291cmNlc0xvY2FsZVJlc29sdXRpb25UZXN0IC0tPgorICAgIDxzdHJpbmcgbmFtZT0iZHVtbXlfc3RyaW5nIj5kdW1teSBzdHJpbmc8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS90ZXN0cy9jb3JldGVzdHMvc3JjL2FuZHJvaWQvY29udGVudC9wbS9NYW5pZmVzdERpZ2VzdFRlc3QuamF2YSBiL2NvcmUvdGVzdHMvY29yZXRlc3RzL3NyYy9hbmRyb2lkL2NvbnRlbnQvcG0vTWFuaWZlc3REaWdlc3RUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3NDk1ZTEuLjAwMDAwMDAKLS0tIGEvY29yZS90ZXN0cy9jb3JldGVzdHMvc3JjL2FuZHJvaWQvY29udGVudC9wbS9NYW5pZmVzdERpZ2VzdFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQuY29udGVudC5wbTsKLQotaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsOwotaW1wb3J0IGFuZHJvaWQudGVzdC5BbmRyb2lkVGVzdENhc2U7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLnNlY3VyaXR5Lk1lc3NhZ2VEaWdlc3Q7Ci0KLXB1YmxpYyBjbGFzcyBNYW5pZmVzdERpZ2VzdFRlc3QgZXh0ZW5kcyBBbmRyb2lkVGVzdENhc2UgewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJ5dGVbXSBNRVNTQUdFXzEgPSB7Ci0gICAgICAgICAgICAoYnl0ZSkgMHgwMCwgKGJ5dGUpIDB4QUEsIChieXRlKSAweDU1LCAoYnl0ZSkgMHhGRgotICAgIH07Ci0KLSAgICBwdWJsaWMgdm9pZCB0ZXN0TWFuaWZlc3REaWdlc3RfRnJvbUlucHV0U3RyZWFtX051bGwoKSB7Ci0gICAgICAgIGFzc2VydE51bGwoIkF0dHJpYnV0ZXMgd2VyZSBudWxsLCBzbyBNYW5pZmVzdERpZ2VzdC5mcm9tQXR0cmlidXRlcyBzaG91bGQgcmV0dXJuIG51bGwiLAotICAgICAgICAgICAgICAgIE1hbmlmZXN0RGlnZXN0LmZyb21JbnB1dFN0cmVhbShudWxsKSk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgdGVzdE1hbmlmZXN0RGlnZXN0X0Zyb21JbnB1dFN0cmVhbV9UaHJvd3NJb0V4Y2VwdGlvbigpIHsKLSAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBuZXcgSW5wdXRTdHJlYW0oKSB7Ci0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBpbnQgcmVhZCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgYXNzZXJ0TnVsbCgiSW5wdXRTdHJlYW0gdGhyZXcgZXhjZXB0aW9uLCBzbyBNYW5pZmVzdERpZ2VzdCBzaG91bGQgYmUgbnVsbCIsCi0gICAgICAgICAgICAgICAgTWFuaWZlc3REaWdlc3QuZnJvbUlucHV0U3RyZWFtKGlzKSk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgdGVzdE1hbmlmZXN0RGlnZXN0X0VxdWFscygpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShNRVNTQUdFXzEpOwotCi0gICAgICAgIE1hbmlmZXN0RGlnZXN0IGV4cGVjdGVkID0KLSAgICAgICAgICAgICAgICBuZXcgTWFuaWZlc3REaWdlc3QoTWVzc2FnZURpZ2VzdC5nZXRJbnN0YW5jZSgiU0hBLTI1NiIpLmRpZ2VzdChNRVNTQUdFXzEpKTsKLQotICAgICAgICBNYW5pZmVzdERpZ2VzdCBhY3R1YWwgPSBNYW5pZmVzdERpZ2VzdC5mcm9tSW5wdXRTdHJlYW0oaXMpOwotICAgICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQsIGFjdHVhbCk7Ci0KLSAgICAgICAgTWFuaWZlc3REaWdlc3QgdW5leHBlY3RlZCA9IG5ldyBNYW5pZmVzdERpZ2VzdChuZXcgYnl0ZVswXSk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHVuZXhwZWN0ZWQuZXF1YWxzKGFjdHVhbCkpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHRlc3RNYW5pZmVzdERpZ2VzdF9QYXJjZWwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oTUVTU0FHRV8xKTsKLQotICAgICAgICBNYW5pZmVzdERpZ2VzdCBkaWdlc3QgPSBNYW5pZmVzdERpZ2VzdC5mcm9tSW5wdXRTdHJlYW0oaXMpOwotCi0gICAgICAgIFBhcmNlbCBwID0gUGFyY2VsLm9idGFpbigpOwotICAgICAgICBkaWdlc3Qud3JpdGVUb1BhcmNlbChwLCAwKTsKLSAgICAgICAgcC5zZXREYXRhUG9zaXRpb24oMCk7Ci0KLSAgICAgICAgTWFuaWZlc3REaWdlc3QgZnJvbVBhcmNlbCA9IE1hbmlmZXN0RGlnZXN0LkNSRUFUT1IuY3JlYXRlRnJvbVBhcmNlbChwKTsKLQotICAgICAgICBhc3NlcnRFcXVhbHMoIk1hbmlmZXN0RGlnZXN0IGdvaW5nIHRocm91Z2ggcGFyY2VsaW5nIHNob3VsZCBiZSB0aGUgc2FtZSBhcyBiZWZvcmU6ICIKLSAgICAgICAgICAgICAgICArIGRpZ2VzdC50b1N0cmluZygpICsgIiBhbmQgIiArIGZyb21QYXJjZWwudG9TdHJpbmcoKSwgZGlnZXN0LAotICAgICAgICAgICAgICAgIGZyb21QYXJjZWwpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2NvcmUvdGVzdHMvY29yZXRlc3RzL3NyYy9hbmRyb2lkL2NvbnRlbnQvcG0vVmVyaWZpY2F0aW9uUGFyYW1zVGVzdC5qYXZhIGIvY29yZS90ZXN0cy9jb3JldGVzdHMvc3JjL2FuZHJvaWQvY29udGVudC9wbS9WZXJpZmljYXRpb25QYXJhbXNUZXN0LmphdmEKaW5kZXggOWIyMTZjYi4uZDk2MzgxMiAxMDA2NDQKLS0tIGEvY29yZS90ZXN0cy9jb3JldGVzdHMvc3JjL2FuZHJvaWQvY29udGVudC9wbS9WZXJpZmljYXRpb25QYXJhbXNUZXN0LmphdmEKKysrIGIvY29yZS90ZXN0cy9jb3JldGVzdHMvc3JjL2FuZHJvaWQvY29udGVudC9wbS9WZXJpZmljYXRpb25QYXJhbXNUZXN0LmphdmEKQEAgLTE2LDcgKzE2LDYgQEAKIAogcGFja2FnZSBhbmRyb2lkLmNvbnRlbnQucG07CiAKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uTWFuaWZlc3REaWdlc3Q7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlZlcmlmaWNhdGlvblBhcmFtczsKIGltcG9ydCBhbmRyb2lkLm5ldC5Vcmk7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7CkBAIC0zMyw3ICszMiw2IEBACiAgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIFZFUklGSUNBVElPTl9VUklfU1RSSU5HID0gImh0dHA6Ly92ZXJpZmljYXRpb24udXJpL3BhdGgiOwogICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBPUklHSU5BVElOR19VUklfU1RSSU5HID0gImh0dHA6Ly9vcmlnaW5hdGluZy51cmkvcGF0aCI7CiAgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIFJFRkVSUkVSX1NUUklORyA9ICJodHRwOi8vcmVmZXJyZXIudXJpL3BhdGgiOwotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGJ5dGVbXSBESUdFU1RfQllURVMgPSAiZmFrZSBkaWdlc3QiLmdldEJ5dGVzKCk7CiAgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IElOU1RBTExFUl9VSUQgPSA0MjsKIAogICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFVyaSBWRVJJRklDQVRJT05fVVJJID0gVXJpLnBhcnNlKFZFUklGSUNBVElPTl9VUklfU1RSSU5HKTsKQEAgLTQyLDExICs0MCw5IEBACiAKICAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQgT1JJR0lOQVRJTkdfVUlEID0gMTAwNDI7CiAKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBNYW5pZmVzdERpZ2VzdCBNQU5JRkVTVF9ESUdFU1QgPSBuZXcgTWFuaWZlc3REaWdlc3QoRElHRVNUX0JZVEVTKTsKLQogICAgIHB1YmxpYyB2b2lkIHRlc3RQYXJjZWwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgVmVyaWZpY2F0aW9uUGFyYW1zIGV4cGVjdGVkID0gbmV3IFZlcmlmaWNhdGlvblBhcmFtcyhWRVJJRklDQVRJT05fVVJJLCBPUklHSU5BVElOR19VUkksCi0gICAgICAgICAgICAgICAgUkVGRVJSRVIsIE9SSUdJTkFUSU5HX1VJRCwgTUFOSUZFU1RfRElHRVNUKTsKKyAgICAgICAgICAgICAgICBSRUZFUlJFUiwgT1JJR0lOQVRJTkdfVUlEKTsKIAogICAgICAgICBQYXJjZWwgcGFyY2VsID0gUGFyY2VsLm9idGFpbigpOwogICAgICAgICBleHBlY3RlZC53cml0ZVRvUGFyY2VsKHBhcmNlbCwgMCk7CkBAIC02MSw4NSArNTcsNzAgQEAKICAgICAgICAgYXNzZXJ0RXF1YWxzKFJFRkVSUkVSLCBhY3R1YWwuZ2V0UmVmZXJyZXIoKSk7CiAKICAgICAgICAgYXNzZXJ0RXF1YWxzKE9SSUdJTkFUSU5HX1VJRCwgYWN0dWFsLmdldE9yaWdpbmF0aW5nVWlkKCkpOwotCi0gICAgICAgIGFzc2VydEVxdWFscyhNQU5JRkVTVF9ESUdFU1QsIGFjdHVhbC5nZXRNYW5pZmVzdERpZ2VzdCgpKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB0ZXN0RXF1YWxzX1N1Y2Nlc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgVmVyaWZpY2F0aW9uUGFyYW1zIHBhcmFtczEgPSBuZXcgVmVyaWZpY2F0aW9uUGFyYW1zKFZFUklGSUNBVElPTl9VUkksIE9SSUdJTkFUSU5HX1VSSSwKLSAgICAgICAgICAgICAgICBSRUZFUlJFUiwgT1JJR0lOQVRJTkdfVUlELCBNQU5JRkVTVF9ESUdFU1QpOworICAgICAgICAgICAgICAgIFJFRkVSUkVSLCBPUklHSU5BVElOR19VSUQpOwogCiAgICAgICAgIFZlcmlmaWNhdGlvblBhcmFtcyBwYXJhbXMyID0gbmV3IFZlcmlmaWNhdGlvblBhcmFtcygKICAgICAgICAgICAgICAgICBVcmkucGFyc2UoVkVSSUZJQ0FUSU9OX1VSSV9TVFJJTkcpLCBVcmkucGFyc2UoT1JJR0lOQVRJTkdfVVJJX1NUUklORyksCi0gICAgICAgICAgICAgICAgVXJpLnBhcnNlKFJFRkVSUkVSX1NUUklORyksIE9SSUdJTkFUSU5HX1VJRCwgbmV3IE1hbmlmZXN0RGlnZXN0KERJR0VTVF9CWVRFUykpOworICAgICAgICAgICAgICAgIFVyaS5wYXJzZShSRUZFUlJFUl9TVFJJTkcpLCBPUklHSU5BVElOR19VSUQpOwogCiAgICAgICAgIGFzc2VydEVxdWFscyhwYXJhbXMxLCBwYXJhbXMyKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB0ZXN0RXF1YWxzX1ZlcmlmaWNhdGlvblVyaV9GYWlsdXJlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFZlcmlmaWNhdGlvblBhcmFtcyBwYXJhbXMxID0gbmV3IFZlcmlmaWNhdGlvblBhcmFtcyhWRVJJRklDQVRJT05fVVJJLCBPUklHSU5BVElOR19VUkksCi0gICAgICAgICAgICAgICAgUkVGRVJSRVIsIE9SSUdJTkFUSU5HX1VJRCwgTUFOSUZFU1RfRElHRVNUKTsKKyAgICAgICAgICAgICAgICBSRUZFUlJFUiwgT1JJR0lOQVRJTkdfVUlEKTsKIAogICAgICAgICBWZXJpZmljYXRpb25QYXJhbXMgcGFyYW1zMiA9IG5ldyBWZXJpZmljYXRpb25QYXJhbXMoCiAgICAgICAgICAgICAgICAgVXJpLnBhcnNlKCJodHRwOi8vYS5kaWZmZXJlbnQudXJpLyIpLCBVcmkucGFyc2UoT1JJR0lOQVRJTkdfVVJJX1NUUklORyksCi0gICAgICAgICAgICAgICAgVXJpLnBhcnNlKFJFRkVSUkVSX1NUUklORyksIE9SSUdJTkFUSU5HX1VJRCwgbmV3IE1hbmlmZXN0RGlnZXN0KERJR0VTVF9CWVRFUykpOworICAgICAgICAgICAgICAgIFVyaS5wYXJzZShSRUZFUlJFUl9TVFJJTkcpLCBPUklHSU5BVElOR19VSUQpOwogCiAgICAgICAgIGFzc2VydEZhbHNlKHBhcmFtczEuZXF1YWxzKHBhcmFtczIpKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB0ZXN0RXF1YWxzX09yaWdpbmF0aW5nVXJpX0ZhaWx1cmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgVmVyaWZpY2F0aW9uUGFyYW1zIHBhcmFtczEgPSBuZXcgVmVyaWZpY2F0aW9uUGFyYW1zKFZFUklGSUNBVElPTl9VUkksIE9SSUdJTkFUSU5HX1VSSSwKLSAgICAgICAgICAgICAgICBSRUZFUlJFUiwgT1JJR0lOQVRJTkdfVUlELCBNQU5JRkVTVF9ESUdFU1QpOworICAgICAgICAgICAgICAgIFJFRkVSUkVSLCBPUklHSU5BVElOR19VSUQpOwogCiAgICAgICAgIFZlcmlmaWNhdGlvblBhcmFtcyBwYXJhbXMyID0gbmV3IFZlcmlmaWNhdGlvblBhcmFtcygKICAgICAgICAgICAgICAgICBVcmkucGFyc2UoVkVSSUZJQ0FUSU9OX1VSSV9TVFJJTkcpLCBVcmkucGFyc2UoImh0dHA6Ly9hLmRpZmZlcmVudC51cmkvIiksCi0gICAgICAgICAgICAgICAgVXJpLnBhcnNlKFJFRkVSUkVSX1NUUklORyksIE9SSUdJTkFUSU5HX1VJRCwgbmV3IE1hbmlmZXN0RGlnZXN0KERJR0VTVF9CWVRFUykpOworICAgICAgICAgICAgICAgIFVyaS5wYXJzZShSRUZFUlJFUl9TVFJJTkcpLCBPUklHSU5BVElOR19VSUQpOwogCiAgICAgICAgIGFzc2VydEZhbHNlKHBhcmFtczEuZXF1YWxzKHBhcmFtczIpKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB0ZXN0RXF1YWxzX1JlZmVycmVyX0ZhaWx1cmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgVmVyaWZpY2F0aW9uUGFyYW1zIHBhcmFtczEgPSBuZXcgVmVyaWZpY2F0aW9uUGFyYW1zKFZFUklGSUNBVElPTl9VUkksIE9SSUdJTkFUSU5HX1VSSSwKLSAgICAgICAgICAgICAgICBSRUZFUlJFUiwgT1JJR0lOQVRJTkdfVUlELCBNQU5JRkVTVF9ESUdFU1QpOworICAgICAgICAgICAgICAgIFJFRkVSUkVSLCBPUklHSU5BVElOR19VSUQpOwogCiAgICAgICAgIFZlcmlmaWNhdGlvblBhcmFtcyBwYXJhbXMyID0gbmV3IFZlcmlmaWNhdGlvblBhcmFtcygKICAgICAgICAgICAgICAgICBVcmkucGFyc2UoVkVSSUZJQ0FUSU9OX1VSSV9TVFJJTkcpLCBVcmkucGFyc2UoT1JJR0lOQVRJTkdfVVJJX1NUUklORyksCi0gICAgICAgICAgICAgICAgVXJpLnBhcnNlKCJodHRwOi8vYS5kaWZmZXJlbnQudXJpLyIpLCBPUklHSU5BVElOR19VSUQsCi0gICAgICAgICAgICAgICAgbmV3IE1hbmlmZXN0RGlnZXN0KERJR0VTVF9CWVRFUykpOworICAgICAgICAgICAgICAgIFVyaS5wYXJzZSgiaHR0cDovL2EuZGlmZmVyZW50LnVyaS8iKSwgT1JJR0lOQVRJTkdfVUlEKTsKIAogICAgICAgICBhc3NlcnRGYWxzZShwYXJhbXMxLmVxdWFscyhwYXJhbXMyKSk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgdGVzdEVxdWFsc19PcmlnaW5hdGluZ19VaWRfRmFpbHVyZSgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBWZXJpZmljYXRpb25QYXJhbXMgcGFyYW1zMSA9IG5ldyBWZXJpZmljYXRpb25QYXJhbXMoVkVSSUZJQ0FUSU9OX1VSSSwgT1JJR0lOQVRJTkdfVVJJLAotICAgICAgICAgICAgICAgIFJFRkVSUkVSLCBPUklHSU5BVElOR19VSUQsIE1BTklGRVNUX0RJR0VTVCk7CisgICAgICAgICAgICAgICAgUkVGRVJSRVIsIE9SSUdJTkFUSU5HX1VJRCk7CiAKICAgICAgICAgVmVyaWZpY2F0aW9uUGFyYW1zIHBhcmFtczIgPSBuZXcgVmVyaWZpY2F0aW9uUGFyYW1zKAogICAgICAgICAgICAgICAgIFVyaS5wYXJzZShWRVJJRklDQVRJT05fVVJJX1NUUklORyksIFVyaS5wYXJzZShPUklHSU5BVElOR19VUklfU1RSSU5HKSwKLSAgICAgICAgICAgICAgICBVcmkucGFyc2UoUkVGRVJSRVJfU1RSSU5HKSwgMTIzNDUsIG5ldyBNYW5pZmVzdERpZ2VzdChESUdFU1RfQllURVMpKTsKLQotICAgICAgICBhc3NlcnRGYWxzZShwYXJhbXMxLmVxdWFscyhwYXJhbXMyKSk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgdGVzdEVxdWFsc19NYW5pZmVzdERpZ2VzdF9GYWlsdXJlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIFZlcmlmaWNhdGlvblBhcmFtcyBwYXJhbXMxID0gbmV3IFZlcmlmaWNhdGlvblBhcmFtcyhWRVJJRklDQVRJT05fVVJJLCBPUklHSU5BVElOR19VUkksCi0gICAgICAgICAgICAgICAgUkVGRVJSRVIsIE9SSUdJTkFUSU5HX1VJRCwgTUFOSUZFU1RfRElHRVNUKTsKLQotICAgICAgICBWZXJpZmljYXRpb25QYXJhbXMgcGFyYW1zMiA9IG5ldyBWZXJpZmljYXRpb25QYXJhbXMoCi0gICAgICAgICAgICAgICAgVXJpLnBhcnNlKFZFUklGSUNBVElPTl9VUklfU1RSSU5HKSwgVXJpLnBhcnNlKE9SSUdJTkFUSU5HX1VSSV9TVFJJTkcpLAotICAgICAgICAgICAgICAgIFVyaS5wYXJzZShSRUZFUlJFUl9TVFJJTkcpLCBPUklHSU5BVElOR19VSUQsCi0gICAgICAgICAgICAgICAgbmV3IE1hbmlmZXN0RGlnZXN0KCJhIGRpZmZlcmVudCBkaWdlc3QiLmdldEJ5dGVzKCkpKTsKKyAgICAgICAgICAgICAgICBVcmkucGFyc2UoUkVGRVJSRVJfU1RSSU5HKSwgMTIzNDUpOwogCiAgICAgICAgIGFzc2VydEZhbHNlKHBhcmFtczEuZXF1YWxzKHBhcmFtczIpKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB0ZXN0RXF1YWxzX0luc3RhbGxlclVpZF9GYWlsdXJlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFZlcmlmaWNhdGlvblBhcmFtcyBwYXJhbXMxID0gbmV3IFZlcmlmaWNhdGlvblBhcmFtcyhWRVJJRklDQVRJT05fVVJJLCBPUklHSU5BVElOR19VUkksCi0gICAgICAgICAgICAgICAgUkVGRVJSRVIsIE9SSUdJTkFUSU5HX1VJRCwgTUFOSUZFU1RfRElHRVNUKTsKKyAgICAgICAgICAgICAgICBSRUZFUlJFUiwgT1JJR0lOQVRJTkdfVUlEKTsKIAogICAgICAgICBWZXJpZmljYXRpb25QYXJhbXMgcGFyYW1zMiA9IG5ldyBWZXJpZmljYXRpb25QYXJhbXMoCiAgICAgICAgICAgICAgICAgVXJpLnBhcnNlKFZFUklGSUNBVElPTl9VUklfU1RSSU5HKSwgVXJpLnBhcnNlKE9SSUdJTkFUSU5HX1VSSV9TVFJJTkcpLAotICAgICAgICAgICAgICAgIFVyaS5wYXJzZShSRUZFUlJFUl9TVFJJTkcpLCBPUklHSU5BVElOR19VSUQsIG5ldyBNYW5pZmVzdERpZ2VzdChESUdFU1RfQllURVMpKTsKKyAgICAgICAgICAgICAgICBVcmkucGFyc2UoUkVGRVJSRVJfU1RSSU5HKSwgT1JJR0lOQVRJTkdfVUlEKTsKICAgICAgICAgcGFyYW1zMi5zZXRJbnN0YWxsZXJVaWQoSU5TVEFMTEVSX1VJRCk7CiAKICAgICAgICAgYXNzZXJ0RmFsc2UocGFyYW1zMS5lcXVhbHMocGFyYW1zMikpOwpAQCAtMTQ3LDc4ICsxMjgsNjUgQEAKIAogICAgIHB1YmxpYyB2b2lkIHRlc3RIYXNoQ29kZV9TdWNjZXNzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFZlcmlmaWNhdGlvblBhcmFtcyBwYXJhbXMxID0gbmV3IFZlcmlmaWNhdGlvblBhcmFtcyhWRVJJRklDQVRJT05fVVJJLCBPUklHSU5BVElOR19VUkksCi0gICAgICAgICAgICAgICAgUkVGRVJSRVIsIE9SSUdJTkFUSU5HX1VJRCwgTUFOSUZFU1RfRElHRVNUKTsKKyAgICAgICAgICAgICAgICBSRUZFUlJFUiwgT1JJR0lOQVRJTkdfVUlEKTsKIAogICAgICAgICBWZXJpZmljYXRpb25QYXJhbXMgcGFyYW1zMiA9IG5ldyBWZXJpZmljYXRpb25QYXJhbXMoCiAgICAgICAgICAgICAgICAgVXJpLnBhcnNlKFZFUklGSUNBVElPTl9VUklfU1RSSU5HKSwgVXJpLnBhcnNlKE9SSUdJTkFUSU5HX1VSSV9TVFJJTkcpLAotICAgICAgICAgICAgICAgIFVyaS5wYXJzZShSRUZFUlJFUl9TVFJJTkcpLCBPUklHSU5BVElOR19VSUQsIG5ldyBNYW5pZmVzdERpZ2VzdChESUdFU1RfQllURVMpKTsKKyAgICAgICAgICAgICAgICBVcmkucGFyc2UoUkVGRVJSRVJfU1RSSU5HKSwgT1JJR0lOQVRJTkdfVUlEKTsKIAogICAgICAgICBhc3NlcnRFcXVhbHMocGFyYW1zMS5oYXNoQ29kZSgpLCBwYXJhbXMyLmhhc2hDb2RlKCkpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHRlc3RIYXNoQ29kZV9WZXJpZmljYXRpb25VcmlfRmFpbHVyZSgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBWZXJpZmljYXRpb25QYXJhbXMgcGFyYW1zMSA9IG5ldyBWZXJpZmljYXRpb25QYXJhbXMoVkVSSUZJQ0FUSU9OX1VSSSwgT1JJR0lOQVRJTkdfVVJJLAotICAgICAgICAgICAgICAgIFJFRkVSUkVSLCBPUklHSU5BVElOR19VSUQsIE1BTklGRVNUX0RJR0VTVCk7CisgICAgICAgICAgICAgICAgUkVGRVJSRVIsIE9SSUdJTkFUSU5HX1VJRCk7CiAKICAgICAgICAgVmVyaWZpY2F0aW9uUGFyYW1zIHBhcmFtczIgPSBuZXcgVmVyaWZpY2F0aW9uUGFyYW1zKG51bGwsIFVyaS5wYXJzZShPUklHSU5BVElOR19VUklfU1RSSU5HKSwKLSAgICAgICAgICAgICAgICBVcmkucGFyc2UoUkVGRVJSRVJfU1RSSU5HKSwgT1JJR0lOQVRJTkdfVUlELCBuZXcgTWFuaWZlc3REaWdlc3QoRElHRVNUX0JZVEVTKSk7CisgICAgICAgICAgICAgICAgVXJpLnBhcnNlKFJFRkVSUkVSX1NUUklORyksIE9SSUdJTkFUSU5HX1VJRCk7CiAKICAgICAgICAgYXNzZXJ0RmFsc2UocGFyYW1zMS5oYXNoQ29kZSgpID09IHBhcmFtczIuaGFzaENvZGUoKSk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgdGVzdEhhc2hDb2RlX09yaWdpbmF0aW5nVXJpX0ZhaWx1cmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgVmVyaWZpY2F0aW9uUGFyYW1zIHBhcmFtczEgPSBuZXcgVmVyaWZpY2F0aW9uUGFyYW1zKFZFUklGSUNBVElPTl9VUkksIE9SSUdJTkFUSU5HX1VSSSwKLSAgICAgICAgICAgICAgICBSRUZFUlJFUiwgT1JJR0lOQVRJTkdfVUlELCBNQU5JRkVTVF9ESUdFU1QpOworICAgICAgICAgICAgICAgIFJFRkVSUkVSLCBPUklHSU5BVElOR19VSUQpOwogCiAgICAgICAgIFZlcmlmaWNhdGlvblBhcmFtcyBwYXJhbXMyID0gbmV3IFZlcmlmaWNhdGlvblBhcmFtcygKICAgICAgICAgICAgICAgICBVcmkucGFyc2UoVkVSSUZJQ0FUSU9OX1VSSV9TVFJJTkcpLCBVcmkucGFyc2UoImh0dHA6Ly9hLmRpZmZlcmVudC51cmkvIiksCi0gICAgICAgICAgICAgICAgVXJpLnBhcnNlKFJFRkVSUkVSX1NUUklORyksIE9SSUdJTkFUSU5HX1VJRCwgbmV3IE1hbmlmZXN0RGlnZXN0KERJR0VTVF9CWVRFUykpOworICAgICAgICAgICAgICAgIFVyaS5wYXJzZShSRUZFUlJFUl9TVFJJTkcpLCBPUklHSU5BVElOR19VSUQpOwogCiAgICAgICAgIGFzc2VydEZhbHNlKHBhcmFtczEuaGFzaENvZGUoKSA9PSBwYXJhbXMyLmhhc2hDb2RlKCkpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHRlc3RIYXNoQ29kZV9SZWZlcnJlcl9GYWlsdXJlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFZlcmlmaWNhdGlvblBhcmFtcyBwYXJhbXMxID0gbmV3IFZlcmlmaWNhdGlvblBhcmFtcyhWRVJJRklDQVRJT05fVVJJLCBPUklHSU5BVElOR19VUkksCi0gICAgICAgICAgICAgICAgUkVGRVJSRVIsIE9SSUdJTkFUSU5HX1VJRCwgTUFOSUZFU1RfRElHRVNUKTsKKyAgICAgICAgICAgICAgICBSRUZFUlJFUiwgT1JJR0lOQVRJTkdfVUlEKTsKIAogICAgICAgICBWZXJpZmljYXRpb25QYXJhbXMgcGFyYW1zMiA9IG5ldyBWZXJpZmljYXRpb25QYXJhbXMoCiAgICAgICAgICAgICAgICAgVXJpLnBhcnNlKFZFUklGSUNBVElPTl9VUklfU1RSSU5HKSwgVXJpLnBhcnNlKE9SSUdJTkFUSU5HX1VSSV9TVFJJTkcpLCBudWxsLAotICAgICAgICAgICAgICAgIE9SSUdJTkFUSU5HX1VJRCwgbmV3IE1hbmlmZXN0RGlnZXN0KERJR0VTVF9CWVRFUykpOworICAgICAgICAgICAgICAgIE9SSUdJTkFUSU5HX1VJRCk7CiAKICAgICAgICAgYXNzZXJ0RmFsc2UocGFyYW1zMS5oYXNoQ29kZSgpID09IHBhcmFtczIuaGFzaENvZGUoKSk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgdGVzdEhhc2hDb2RlX09yaWdpbmF0aW5nX1VpZF9GYWlsdXJlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFZlcmlmaWNhdGlvblBhcmFtcyBwYXJhbXMxID0gbmV3IFZlcmlmaWNhdGlvblBhcmFtcyhWRVJJRklDQVRJT05fVVJJLCBPUklHSU5BVElOR19VUkksCi0gICAgICAgICAgICAgICAgUkVGRVJSRVIsIE9SSUdJTkFUSU5HX1VJRCwgTUFOSUZFU1RfRElHRVNUKTsKKyAgICAgICAgICAgICAgICBSRUZFUlJFUiwgT1JJR0lOQVRJTkdfVUlEKTsKIAogICAgICAgICBWZXJpZmljYXRpb25QYXJhbXMgcGFyYW1zMiA9IG5ldyBWZXJpZmljYXRpb25QYXJhbXMoCiAgICAgICAgICAgICAgICAgVXJpLnBhcnNlKFZFUklGSUNBVElPTl9VUklfU1RSSU5HKSwgVXJpLnBhcnNlKE9SSUdJTkFUSU5HX1VSSV9TVFJJTkcpLAotICAgICAgICAgICAgICAgIFVyaS5wYXJzZShSRUZFUlJFUl9TVFJJTkcpLCAxMjM0NSwgbmV3IE1hbmlmZXN0RGlnZXN0KERJR0VTVF9CWVRFUykpOwotCi0gICAgICAgIGFzc2VydEZhbHNlKHBhcmFtczEuaGFzaENvZGUoKSA9PSBwYXJhbXMyLmhhc2hDb2RlKCkpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHRlc3RIYXNoQ29kZV9NYW5pZmVzdERpZ2VzdF9GYWlsdXJlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIFZlcmlmaWNhdGlvblBhcmFtcyBwYXJhbXMxID0gbmV3IFZlcmlmaWNhdGlvblBhcmFtcyhWRVJJRklDQVRJT05fVVJJLCBPUklHSU5BVElOR19VUkksCi0gICAgICAgICAgICAgICAgUkVGRVJSRVIsIE9SSUdJTkFUSU5HX1VJRCwgTUFOSUZFU1RfRElHRVNUKTsKLQotICAgICAgICBWZXJpZmljYXRpb25QYXJhbXMgcGFyYW1zMiA9IG5ldyBWZXJpZmljYXRpb25QYXJhbXMoCi0gICAgICAgICAgICAgICAgVXJpLnBhcnNlKFZFUklGSUNBVElPTl9VUklfU1RSSU5HKSwgVXJpLnBhcnNlKE9SSUdJTkFUSU5HX1VSSV9TVFJJTkcpLAotICAgICAgICAgICAgICAgIFVyaS5wYXJzZShSRUZFUlJFUl9TVFJJTkcpLCBPUklHSU5BVElOR19VSUQsCi0gICAgICAgICAgICAgICAgbmV3IE1hbmlmZXN0RGlnZXN0KCJhIGRpZmZlcmVudCBkaWdlc3QiLmdldEJ5dGVzKCkpKTsKKyAgICAgICAgICAgICAgICBVcmkucGFyc2UoUkVGRVJSRVJfU1RSSU5HKSwgMTIzNDUpOwogCiAgICAgICAgIGFzc2VydEZhbHNlKHBhcmFtczEuaGFzaENvZGUoKSA9PSBwYXJhbXMyLmhhc2hDb2RlKCkpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHRlc3RIYXNoQ29kZV9JbnN0YWxsZXJVaWRfRmFpbHVyZSgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBWZXJpZmljYXRpb25QYXJhbXMgcGFyYW1zMSA9IG5ldyBWZXJpZmljYXRpb25QYXJhbXMoVkVSSUZJQ0FUSU9OX1VSSSwgT1JJR0lOQVRJTkdfVVJJLAotICAgICAgICAgICAgICAgIFJFRkVSUkVSLCBPUklHSU5BVElOR19VSUQsIE1BTklGRVNUX0RJR0VTVCk7CisgICAgICAgICAgICAgICAgUkVGRVJSRVIsIE9SSUdJTkFUSU5HX1VJRCk7CiAKICAgICAgICAgVmVyaWZpY2F0aW9uUGFyYW1zIHBhcmFtczIgPSBuZXcgVmVyaWZpY2F0aW9uUGFyYW1zKAogICAgICAgICAgICAgICAgIFVyaS5wYXJzZShWRVJJRklDQVRJT05fVVJJX1NUUklORyksIFVyaS5wYXJzZShPUklHSU5BVElOR19VUklfU1RSSU5HKSwKLSAgICAgICAgICAgICAgICBVcmkucGFyc2UoUkVGRVJSRVJfU1RSSU5HKSwgT1JJR0lOQVRJTkdfVUlELAotICAgICAgICAgICAgICAgIG5ldyBNYW5pZmVzdERpZ2VzdCgiYSBkaWZmZXJlbnQgZGlnZXN0Ii5nZXRCeXRlcygpKSk7CisgICAgICAgICAgICAgICAgVXJpLnBhcnNlKFJFRkVSUkVSX1NUUklORyksIE9SSUdJTkFUSU5HX1VJRCk7CiAgICAgICAgIHBhcmFtczIuc2V0SW5zdGFsbGVyVWlkKElOU1RBTExFUl9VSUQpOwogCiAgICAgICAgIGFzc2VydEZhbHNlKHBhcmFtczEuaGFzaENvZGUoKSA9PSBwYXJhbXMyLmhhc2hDb2RlKCkpOwpkaWZmIC0tZ2l0IGEvY29yZS90ZXN0cy9jb3JldGVzdHMvc3JjL2FuZHJvaWQvY29udGVudC9yZXMvUmVzb3VyY2VzTG9jYWxlUmVzb2x1dGlvblRlc3QuamF2YSBiL2NvcmUvdGVzdHMvY29yZXRlc3RzL3NyYy9hbmRyb2lkL2NvbnRlbnQvcmVzL1Jlc291cmNlc0xvY2FsZVJlc29sdXRpb25UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVjMDAzMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvdGVzdHMvY29yZXRlc3RzL3NyYy9hbmRyb2lkL2NvbnRlbnQvcmVzL1Jlc291cmNlc0xvY2FsZVJlc29sdXRpb25UZXN0LmphdmEKQEAgLTAsMCArMSw1MyBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyoKKyogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisqCisqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisqCisqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqLworCitwYWNrYWdlIGFuZHJvaWQuY29udGVudC5yZXM7CisKK2ltcG9ydCBhbmRyb2lkLnRlc3QuQW5kcm9pZFRlc3RDYXNlOworaW1wb3J0IGFuZHJvaWQudGVzdC5zdWl0ZWJ1aWxkZXIuYW5ub3RhdGlvbi5TbWFsbFRlc3Q7CitpbXBvcnQgYW5kcm9pZC51dGlsLkRpc3BsYXlNZXRyaWNzOworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2NhbGVMaXN0OworCitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworCitwdWJsaWMgY2xhc3MgUmVzb3VyY2VzTG9jYWxlUmVzb2x1dGlvblRlc3QgZXh0ZW5kcyBBbmRyb2lkVGVzdENhc2UgeworICAgIEBTbWFsbFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0R2V0UmVzb2x2ZWRMb2NhbGVfZW5nbGlzaElzQWx3YXlzQ29uc2lkZXJlZFN1cHBvcnRlZCgpIHsKKyAgICAgICAgLy8gRmlyc3QgbWFrZSBzdXJlIEVuZ2xpc2ggaGFzIG5vIGV4cGxpY2l0IGFzc2V0cyBvdGhlciB0aGFuIHRoZSBkZWZhdWx0IGFzc2V0cworICAgICAgICBmaW5hbCBBc3NldE1hbmFnZXIgYXNzZXRzID0gZ2V0Q29udGV4dCgpLmdldEFzc2V0cygpOworICAgICAgICBmaW5hbCBTdHJpbmcgc3VwcG9ydGVkTG9jYWxlc1tdID0gYXNzZXRzLmdldE5vblN5c3RlbUxvY2FsZXMoKTsKKyAgICAgICAgZm9yIChTdHJpbmcgbGFuZ3VhZ2VUYWcgOiBzdXBwb3J0ZWRMb2NhbGVzKSB7CisgICAgICAgICAgICBpZiAoImVuLVhBIi5lcXVhbHMobGFuZ3VhZ2VUYWcpKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhc3NlcnRGYWxzZSgKKyAgICAgICAgICAgICAgICAgICAgInN1cHBvcnRlZCBsb2NhbGVzOiAiICsgQXJyYXlzLnRvU3RyaW5nKHN1cHBvcnRlZExvY2FsZXMpLAorICAgICAgICAgICAgICAgICAgICAiZW4iLmVxdWFscyhMb2NhbGUuZm9yTGFuZ3VhZ2VUYWcobGFuZ3VhZ2VUYWcpLmdldExhbmd1YWdlKCkpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZpbmFsIERpc3BsYXlNZXRyaWNzIGRtID0gbmV3IERpc3BsYXlNZXRyaWNzKCk7CisgICAgICAgIGRtLnNldFRvRGVmYXVsdHMoKTsKKyAgICAgICAgZmluYWwgQ29uZmlndXJhdGlvbiBjZmcgPSBuZXcgQ29uZmlndXJhdGlvbigpOworICAgICAgICBjZmcuc2V0VG9EZWZhdWx0cygpOworICAgICAgICAvLyBBdmVzdGFuIGFuZCBFbmdsaXNoIGhhdmUgbm8gYXNzZXRzLCBidXQgUGVyc2lhbiBkb2VzLgorICAgICAgICBjZmcuc2V0TG9jYWxlcyhMb2NhbGVMaXN0LmZvckxhbmd1YWdlVGFncygiYWUsZW4sZmEiKSk7CisgICAgICAgIFJlc291cmNlcyByZXMgPSBuZXcgUmVzb3VyY2VzKGFzc2V0cywgZG0sIGNmZyk7CisgICAgICAgIC8vIFdlIHNob3VsZCBnZXQgRW5nbGlzaCwgYmVjYXVzZSBpdCBpcyBhbHdheXMgY29uc2lkZXJlZCBzdXBwb3J0ZWQuCisgICAgICAgIGFzc2VydEVxdWFscygiZW4iLCByZXMuZ2V0UmVzb2x2ZWRMb2NhbGUoKS50b0xhbmd1YWdlVGFnKCkpOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvY29yZS90ZXN0cy9jb3JldGVzdHMvc3JjL2FuZHJvaWQvd2lkZ2V0L0RhdGVQaWNrZXJBY3Rpdml0eS5qYXZhIGIvY29yZS90ZXN0cy9jb3JldGVzdHMvc3JjL2FuZHJvaWQvd2lkZ2V0L0RhdGVQaWNrZXJBY3Rpdml0eS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzYjI1YTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9zcmMvYW5kcm9pZC93aWRnZXQvRGF0ZVBpY2tlckFjdGl2aXR5LmphdmEKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgYW5kcm9pZC53aWRnZXQ7CisKK2ltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eTsKK2ltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKK2ltcG9ydCBjb20uYW5kcm9pZC5mcmFtZXdvcmtzLmNvcmV0ZXN0cy5SOworCisvKioKKyAqIEEgbWluaW1hbCBhcHBsaWNhdGlvbiBmb3IgRGF0ZVBpY2tlckZvY3VzVGVzdC4KKyAqLworcHVibGljIGNsYXNzIERhdGVQaWNrZXJBY3Rpdml0eSBleHRlbmRzIEFjdGl2aXR5IHsKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvbkNyZWF0ZShCdW5kbGUgc2F2ZWRJbnN0YW5jZVN0YXRlKSB7CisgICAgICAgIHN1cGVyLm9uQ3JlYXRlKHNhdmVkSW5zdGFuY2VTdGF0ZSk7CisgICAgICAgIHNldENvbnRlbnRWaWV3KFIubGF5b3V0LmRhdGVwaWNrZXJfbGF5b3V0KTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9zcmMvYW5kcm9pZC93aWRnZXQvRGF0ZVBpY2tlckZvY3VzVGVzdC5qYXZhIGIvY29yZS90ZXN0cy9jb3JldGVzdHMvc3JjL2FuZHJvaWQvd2lkZ2V0L0RhdGVQaWNrZXJGb2N1c1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTNlNDBmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS90ZXN0cy9jb3JldGVzdHMvc3JjL2FuZHJvaWQvd2lkZ2V0L0RhdGVQaWNrZXJGb2N1c1Rlc3QuamF2YQpAQCAtMCwwICsxLDI1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgYW5kcm9pZC53aWRnZXQ7CisKK2ltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eTsKK2ltcG9ydCBhbmRyb2lkLmFwcC5JbnN0cnVtZW50YXRpb247CitpbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsKK2ltcG9ydCBhbmRyb2lkLnRlc3QuQWN0aXZpdHlJbnN0cnVtZW50YXRpb25UZXN0Q2FzZTI7CitpbXBvcnQgYW5kcm9pZC52aWV3LktleUV2ZW50OworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OworCitpbXBvcnQgY29tLmFuZHJvaWQuZnJhbWV3b3Jrcy5jb3JldGVzdHMuUjsKKworLyoqCisgKiBUZXN0IHtAbGluayBEYXRlUGlja2VyfSBmb2N1cyBjaGFuZ2VzLgorICovCitwdWJsaWMgY2xhc3MgRGF0ZVBpY2tlckZvY3VzVGVzdCBleHRlbmRzIEFjdGl2aXR5SW5zdHJ1bWVudGF0aW9uVGVzdENhc2UyPERhdGVQaWNrZXJBY3Rpdml0eT4geworCisgICAgcHJpdmF0ZSBBY3Rpdml0eSBtQWN0aXZpdHk7CisgICAgcHJpdmF0ZSBJbnN0cnVtZW50YXRpb24gbUluc3RydW1lbnRhdGlvbjsKKyAgICBwcml2YXRlIERhdGVQaWNrZXIgbURhdGVQaWNrZXI7CisKKyAgICBwdWJsaWMgRGF0ZVBpY2tlckZvY3VzVGVzdCgpIHsKKyAgICAgICAgc3VwZXIoRGF0ZVBpY2tlckFjdGl2aXR5LmNsYXNzKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBzdXBlci5zZXRVcCgpOworCisgICAgICAgIG1BY3Rpdml0eSA9IGdldEFjdGl2aXR5KCk7CisgICAgICAgIG1JbnN0cnVtZW50YXRpb24gPSBnZXRJbnN0cnVtZW50YXRpb24oKTsKKworICAgICAgICBtRGF0ZVBpY2tlciA9IChEYXRlUGlja2VyKSBtQWN0aXZpdHkuZmluZFZpZXdCeUlkKFIuaWQuZGF0ZVBpY2tlcik7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGFicyAoZm9yd2FyZCBhbmQgYmFja3dhcmQpIHRocm91Z2ggdGhlIERhdGVQaWNrZXIgdG8gZW5zdXJlIHRoZSBjb3JyZWN0CisgICAgICogVmlld3MgZ2FpbiBmb2N1cy4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCB0ZXN0Rm9jdXNUcmF2ZWwoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICAgICAgcnVuVGVzdE9uVWlUaHJlYWQobmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgYXNzZXJ0VHJ1ZShtRGF0ZVBpY2tlci5yZXF1ZXN0Rm9jdXMoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICBhc3NlcnRWaWV3SGFzRm9jdXMoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5pZC5kYXRlX3BpY2tlcl9oZWFkZXJfeWVhcik7CisgICAgICAgIHNlbmRLZXkoS2V5RXZlbnQuS0VZQ09ERV9UQUIpOworICAgICAgICBhc3NlcnRWaWV3SGFzRm9jdXMoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5pZC5wcmV2KTsKKyAgICAgICAgc2VuZEtleShLZXlFdmVudC5LRVlDT0RFX1RBQik7CisgICAgICAgIGFzc2VydFZpZXdIYXNGb2N1cyhjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmlkLm5leHQpOworICAgICAgICBzZW5kS2V5KEtleUV2ZW50LktFWUNPREVfVEFCKTsKKyAgICAgICAgYXNzZXJ0Vmlld0hhc0ZvY3VzKGNvbS5hbmRyb2lkLmludGVybmFsLlIuaWQuZGF5X3BpY2tlcl92aWV3X3BhZ2VyKTsKKyAgICAgICAgc2VuZEtleShLZXlFdmVudC5LRVlDT0RFX1RBQik7CisgICAgICAgIGFzc2VydFZpZXdIYXNGb2N1cyhSLmlkLmJlbG93UGlja2VyKTsKKyAgICAgICAgc2VuZFNoaWZ0S2V5KEtleUV2ZW50LktFWUNPREVfVEFCKTsKKyAgICAgICAgYXNzZXJ0Vmlld0hhc0ZvY3VzKGNvbS5hbmRyb2lkLmludGVybmFsLlIuaWQuZGF5X3BpY2tlcl92aWV3X3BhZ2VyKTsKKyAgICAgICAgc2VuZFNoaWZ0S2V5KEtleUV2ZW50LktFWUNPREVfVEFCKTsKKyAgICAgICAgYXNzZXJ0Vmlld0hhc0ZvY3VzKGNvbS5hbmRyb2lkLmludGVybmFsLlIuaWQubmV4dCk7CisgICAgICAgIHNlbmRTaGlmdEtleShLZXlFdmVudC5LRVlDT0RFX1RBQik7CisgICAgICAgIGFzc2VydFZpZXdIYXNGb2N1cyhjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmlkLnByZXYpOworICAgICAgICBzZW5kU2hpZnRLZXkoS2V5RXZlbnQuS0VZQ09ERV9UQUIpOworICAgICAgICBhc3NlcnRWaWV3SGFzRm9jdXMoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5pZC5kYXRlX3BpY2tlcl9oZWFkZXJfeWVhcik7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHNlbmRLZXkoaW50IGtleWNvZGUpIHsKKyAgICAgICAgbUluc3RydW1lbnRhdGlvbi5zZW5kS2V5RG93blVwU3luYyhrZXljb2RlKTsKKyAgICAgICAgbUluc3RydW1lbnRhdGlvbi53YWl0Rm9ySWRsZVN5bmMoKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgYXNzZXJ0Vmlld0hhc0ZvY3VzKGZpbmFsIGludCBpZCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgICAgIHJ1blRlc3RPblVpVGhyZWFkKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICAgIFZpZXcgdmlldyA9IG1BY3Rpdml0eS5maW5kVmlld0J5SWQoaWQpOworICAgICAgICAgICAgICAgIGFzc2VydFRydWUodmlldy5oYXNGb2N1cygpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHNlbmRTaGlmdEtleShpbnQga2V5Y29kZSkgeworICAgICAgICBmaW5hbCBLZXlFdmVudCBzaGlmdERvd24gPSBuZXcgS2V5RXZlbnQoS2V5RXZlbnQuQUNUSU9OX0RPV04sIEtleUV2ZW50LktFWUNPREVfU0hJRlRfTEVGVCk7CisgICAgICAgIG1JbnN0cnVtZW50YXRpb24uc2VuZEtleVN5bmMoc2hpZnREb3duKTsKKworICAgICAgICBmaW5hbCBLZXlFdmVudCBrZXlEb3duID0gbmV3IEtleUV2ZW50KFN5c3RlbUNsb2NrLnVwdGltZU1pbGxpcygpLAorICAgICAgICAgICAgICAgIFN5c3RlbUNsb2NrLnVwdGltZU1pbGxpcygpLCBLZXlFdmVudC5BQ1RJT05fRE9XTiwga2V5Y29kZSwgMCwKKyAgICAgICAgICAgICAgICBLZXlFdmVudC5NRVRBX1NISUZUX09OKTsKKyAgICAgICAgbUluc3RydW1lbnRhdGlvbi5zZW5kS2V5U3luYyhrZXlEb3duKTsKKworICAgICAgICBmaW5hbCBLZXlFdmVudCBrZXlVcCA9IG5ldyBLZXlFdmVudChTeXN0ZW1DbG9jay51cHRpbWVNaWxsaXMoKSwKKyAgICAgICAgICAgICAgICBTeXN0ZW1DbG9jay51cHRpbWVNaWxsaXMoKSwgS2V5RXZlbnQuQUNUSU9OX1VQLCBrZXljb2RlLCAwLAorICAgICAgICAgICAgICAgIEtleUV2ZW50Lk1FVEFfU0hJRlRfT04pOworICAgICAgICBtSW5zdHJ1bWVudGF0aW9uLnNlbmRLZXlTeW5jKGtleVVwKTsKKworICAgICAgICBmaW5hbCBLZXlFdmVudCBzaGlmdFVwID0gbmV3IEtleUV2ZW50KEtleUV2ZW50LkFDVElPTl9VUCwgS2V5RXZlbnQuS0VZQ09ERV9TSElGVF9MRUZUKTsKKyAgICAgICAgbUluc3RydW1lbnRhdGlvbi5zZW5kS2V5U3luYyhzaGlmdFVwKTsKKworICAgICAgICBtSW5zdHJ1bWVudGF0aW9uLndhaXRGb3JJZGxlU3luYygpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRlc3RzIHRvIGVuc3VyZSB0aGUga2V5Ym9hcmQgY2FuIHNlbGVjdCB0aGUgY3VycmVudCB5ZWFyLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHRlc3RZZWFyQ2hvaWNlKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgICAgIHNldEtub3duRGF0ZSgpOworICAgICAgICBydW5UZXN0T25VaVRocmVhZChuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICBWaWV3IHllYXIgPSBtRGF0ZVBpY2tlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmRWaWV3QnlJZChjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmlkLmRhdGVfcGlja2VyX2hlYWRlcl95ZWFyKTsKKyAgICAgICAgICAgICAgICBhc3NlcnRUcnVlKHllYXIucmVxdWVzdEZvY3VzKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgc2VuZEtleShLZXlFdmVudC5LRVlDT0RFX0VOVEVSKTsKKyAgICAgICAgcnVuVGVzdE9uVWlUaHJlYWQobmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgVmlldyB5ZWFyU2VsZWN0ID0gbURhdGVQaWNrZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBmaW5kVmlld0J5SWQoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5pZC5kYXRlX3BpY2tlcl95ZWFyX3BpY2tlcik7CisgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKHllYXJTZWxlY3QsIG1EYXRlUGlja2VyLmZpbmRGb2N1cygpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIHNlbmRLZXkoS2V5RXZlbnQuS0VZQ09ERV9EUEFEX1VQKTsKKyAgICAgICAgc2VuZEtleShLZXlFdmVudC5LRVlDT0RFX0VOVEVSKTsKKyAgICAgICAgcnVuVGVzdE9uVWlUaHJlYWQobmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgVmlldyB5ZWFyU2VsZWN0ID0gbURhdGVQaWNrZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBmaW5kVmlld0J5SWQoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5pZC5kYXRlX3BpY2tlcl95ZWFyX3BpY2tlcik7CisgICAgICAgICAgICAgICAgYXNzZXJ0Tm90U2FtZShWaWV3LlZJU0lCTEUsIHllYXJTZWxlY3QuZ2V0VmlzaWJpbGl0eSgpKTsKKyAgICAgICAgICAgICAgICBWaWV3IHllYXIgPSBtRGF0ZVBpY2tlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmRWaWV3QnlJZChjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmlkLmRhdGVfcGlja2VyX2hlYWRlcl95ZWFyKTsKKyAgICAgICAgICAgICAgICBhc3NlcnRUcnVlKHllYXIuaGFzRm9jdXMoKSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMTQsIG1EYXRlUGlja2VyLmdldFllYXIoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRlc3RBcnJvd1Rocm91Z2hEYXlzKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgICAgIHNldEtub3duRGF0ZSgpOworICAgICAgICBydW5UZXN0T25VaVRocmVhZChuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICBWaWV3IHByZXYgPSBtRGF0ZVBpY2tlci5maW5kVmlld0J5SWQoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5pZC5uZXh0KTsKKyAgICAgICAgICAgICAgICBwcmV2LnJlcXVlc3RGb2N1cygpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgc2VuZEtleShLZXlFdmVudC5LRVlDT0RFX1RBQik7CisgICAgICAgIC8vIFNob3VsZCBzZWxlY3QgdGhlIGN1cnJlbnQgZGF0ZSBhbmQgdGhlIGRhdGUgc2hvdWxkbid0IGNoYW5nZQorICAgICAgICBzZW5kS2V5KEtleUV2ZW50LktFWUNPREVfRU5URVIpOworICAgICAgICBhc3NlcnREYXRlSXMoMTIsIDMxLCAyMDE1KTsKKyAgICAgICAgLy8gTW92ZSByaWdodCB0byBKYW51YXJ5IDI0LCAyMDE2CisgICAgICAgIHNlbmRLZXkoS2V5RXZlbnQuS0VZQ09ERV9EUEFEX1JJR0hUKTsKKyAgICAgICAgc2VuZEtleShLZXlFdmVudC5LRVlDT0RFX0VOVEVSKTsKKyAgICAgICAgYXNzZXJ0RGF0ZUlzKDEsIDI0LCAyMDE2KTsKKyAgICAgICAgLy8gTW92ZSBkb3duIHRvIEphbnVhcnkgMzEsIDIwMTYKKyAgICAgICAgc2VuZEtleShLZXlFdmVudC5LRVlDT0RFX0RQQURfRE9XTik7CisgICAgICAgIHNlbmRLZXkoS2V5RXZlbnQuS0VZQ09ERV9FTlRFUik7CisgICAgICAgIGFzc2VydERhdGVJcygxLCAzMSwgMjAxNik7CisgICAgICAgIC8vIE1vdmUgdXAgdG8gSmFudWFyeSA1LCAyMDE2CisgICAgICAgIHNlbmRLZXkoS2V5RXZlbnQuS0VZQ09ERV9EUEFEX1VQKTsKKyAgICAgICAgc2VuZEtleShLZXlFdmVudC5LRVlDT0RFX0RQQURfVVApOworICAgICAgICBzZW5kS2V5KEtleUV2ZW50LktFWUNPREVfRFBBRF9VUCk7CisgICAgICAgIHNlbmRLZXkoS2V5RXZlbnQuS0VZQ09ERV9EUEFEX1VQKTsKKyAgICAgICAgc2VuZEtleShLZXlFdmVudC5LRVlDT0RFX0RQQURfUklHSFQpOworICAgICAgICBzZW5kS2V5KEtleUV2ZW50LktFWUNPREVfRFBBRF9SSUdIVCk7CisgICAgICAgIHNlbmRLZXkoS2V5RXZlbnQuS0VZQ09ERV9FTlRFUik7CisgICAgICAgIGFzc2VydERhdGVJcygxLCA1LCAyMDE2KTsKKyAgICAgICAgLy8gTW92ZSB1cCB0byBwcmV2IGFycm93IGtleQorICAgICAgICBzZW5kS2V5KEtleUV2ZW50LktFWUNPREVfRFBBRF9VUCk7CisgICAgICAgIGFzc2VydFZpZXdIYXNGb2N1cyhjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmlkLnByZXYpOworICAgICAgICAvLyB0YWIgYmFjayBpbnRvIHRoZSBkYXktc2VsZWN0aW9uIHBhZ2VyCisgICAgICAgIHNlbmRLZXkoS2V5RXZlbnQuS0VZQ09ERV9UQUIpOworICAgICAgICBzZW5kS2V5KEtleUV2ZW50LktFWUNPREVfVEFCKTsKKyAgICAgICAgc2VuZEtleShLZXlFdmVudC5LRVlDT0RFX0VOVEVSKTsKKyAgICAgICAgYXNzZXJ0Vmlld0hhc0ZvY3VzKGNvbS5hbmRyb2lkLmludGVybmFsLlIuaWQuZGF5X3BpY2tlcl92aWV3X3BhZ2VyKTsKKyAgICAgICAgYXNzZXJ0RGF0ZUlzKDEsIDUsIDIwMTYpOworCisgICAgICAgIC8vIE1vdmUgdXAgb3V0IGFnYWluLCB0aGVuIGRvd24gYmFjayBpbnRvIHRoZSBkYXktc2VsZWN0aW9uIHBhZ2VyLgorICAgICAgICAvLyBJdCBzaG91bGQgbGFuZCByaWdodCBiZWxvdyB0aGUgcHJldiBidXR0b24gKDEvMy8yMDE2KQorICAgICAgICBzZW5kS2V5KEtleUV2ZW50LktFWUNPREVfRFBBRF9VUCk7CisgICAgICAgIHNlbmRLZXkoS2V5RXZlbnQuS0VZQ09ERV9EUEFEX0RPV04pOworICAgICAgICBzZW5kS2V5KEtleUV2ZW50LktFWUNPREVfRU5URVIpOworICAgICAgICBhc3NlcnRWaWV3SGFzRm9jdXMoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5pZC5kYXlfcGlja2VyX3ZpZXdfcGFnZXIpOworICAgICAgICBhc3NlcnREYXRlSXMoMSwgMywgMjAxNik7CisKKyAgICAgICAgLy8gTW92ZSBsZWZ0IHRvIHByZXZpb3VzIG1vbnRoICgxMi8xMi8yMDE1KQorICAgICAgICBzZW5kS2V5KEtleUV2ZW50LktFWUNPREVfRFBBRF9MRUZUKTsKKyAgICAgICAgc2VuZEtleShLZXlFdmVudC5LRVlDT0RFX0VOVEVSKTsKKyAgICAgICAgYXNzZXJ0RGF0ZUlzKDEyLCAxMiwgMjAxNSk7CisgICAgICAgIC8vIE5vdyBtYWtlIHN1cmUgdGhlIHN0YXJ0IG9mIHRoZSBtb250aCB3b3JrcworICAgICAgICAvLyBNb3ZlIHVwIHRvIDEyLzUvMjAxNSBhbmQgcmlnaHQgdG8gMS8xLzIwMTYKKyAgICAgICAgc2VuZEtleShLZXlFdmVudC5LRVlDT0RFX0RQQURfVVApOworICAgICAgICBzZW5kS2V5KEtleUV2ZW50LktFWUNPREVfRFBBRF9SSUdIVCk7CisgICAgICAgIHNlbmRLZXkoS2V5RXZlbnQuS0VZQ09ERV9FTlRFUik7CisgICAgICAgIGFzc2VydERhdGVJcygxLCAxLCAyMDE2KTsKKyAgICAgICAgLy8gTm93IG1ha2Ugc3VyZSB0aGUgbGVmdCBrZXkgZ29lcyBiYWNrIHRvIHByZXZpb3VzIG1vbnRoICgxMi81LzIwMTUpCisgICAgICAgIHNlbmRLZXkoS2V5RXZlbnQuS0VZQ09ERV9EUEFEX0xFRlQpOworICAgICAgICBzZW5kS2V5KEtleUV2ZW50LktFWUNPREVfRU5URVIpOworICAgICAgICBhc3NlcnREYXRlSXMoMTIsIDUsIDIwMTUpOworICAgICAgICAvLyBOb3cgZ28gdG8gYSBtaXNtYXRjaGVkIHJvdyAobm8gc3VjaCByb3cgb24gcHJldmlvdXMgbW9udGgpCisgICAgICAgIC8vIFRoaXMgbW92ZXMgb3ZlciB0byAxLzMxLzIwMTYgYW5kIHRoZW4gbGVmdCB0byAxMi8zMS8yMDE1CisgICAgICAgIHNlbmRLZXkoS2V5RXZlbnQuS0VZQ09ERV9EUEFEX0RPV04pOworICAgICAgICBzZW5kS2V5KEtleUV2ZW50LktFWUNPREVfRFBBRF9ET1dOKTsKKyAgICAgICAgc2VuZEtleShLZXlFdmVudC5LRVlDT0RFX0RQQURfRE9XTik7CisgICAgICAgIHNlbmRLZXkoS2V5RXZlbnQuS0VZQ09ERV9EUEFEX1JJR0hUKTsKKyAgICAgICAgc2VuZEtleShLZXlFdmVudC5LRVlDT0RFX0RQQURfRE9XTik7CisgICAgICAgIHNlbmRLZXkoS2V5RXZlbnQuS0VZQ09ERV9EUEFEX0RPV04pOworICAgICAgICBzZW5kS2V5KEtleUV2ZW50LktFWUNPREVfRFBBRF9MRUZUKTsKKyAgICAgICAgc2VuZEtleShLZXlFdmVudC5LRVlDT0RFX0VOVEVSKTsKKyAgICAgICAgYXNzZXJ0RGF0ZUlzKDEyLCAzMSwgMjAxNSk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGFzc2VydERhdGVJcyhpbnQgbW9udGgsIGZpbmFsIGludCBkYXksIGZpbmFsIGludCB5ZWFyKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICAgICAgZmluYWwgaW50IG1vbnRoSW50ID0gbW9udGggLSAxOyAvLyBtb250aHMgYXJlIDAtYmFzZWQKKyAgICAgICAgcnVuVGVzdE9uVWlUaHJlYWQobmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKGRheSwgbURhdGVQaWNrZXIuZ2V0RGF5T2ZNb250aCgpKTsKKyAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoeWVhciwgbURhdGVQaWNrZXIuZ2V0WWVhcigpKTsKKyAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMobW9udGhJbnQsIG1EYXRlUGlja2VyLmdldE1vbnRoKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgc2V0S25vd25EYXRlKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgICAgIHJ1blRlc3RPblVpVGhyZWFkKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICAgIG1EYXRlUGlja2VyLnVwZGF0ZURhdGUoMjAxNSwgMTEsIDMxKTsgLy8gRGVjZW1iZXIgMzEsIDIwMTUKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIG1JbnN0cnVtZW50YXRpb24ud2FpdEZvcklkbGVTeW5jKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvY29yZS90ZXN0cy9jb3JldGVzdHMvc3JjL2NvbS9hbmRyb2lkL2ludGVybmFsL3V0aWwvTGluZUJyZWFrQnVmZmVyZWRXcml0ZXJUZXN0LmphdmEgYi9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9zcmMvY29tL2FuZHJvaWQvaW50ZXJuYWwvdXRpbC9MaW5lQnJlYWtCdWZmZXJlZFdyaXRlclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWFlMTA0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS90ZXN0cy9jb3JldGVzdHMvc3JjL2NvbS9hbmRyb2lkL2ludGVybmFsL3V0aWwvTGluZUJyZWFrQnVmZmVyZWRXcml0ZXJUZXN0LmphdmEKQEAgLTAsMCArMSwyMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWw7CisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CisKK2ltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CitpbXBvcnQgamF2YS5pby5Xcml0ZXI7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworLyoqCisgKiBUZXN0cyBmb3Ige0BsaW5rIEluZGVudGluZ1ByaW50V3JpdGVyfS4KKyAqLworcHVibGljIGNsYXNzIExpbmVCcmVha0J1ZmZlcmVkV3JpdGVyVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKworICAgIHByaXZhdGUgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIG1TdHJlYW07CisgICAgcHJpdmF0ZSBSZWNvcmRpbmdXcml0ZXIgbVdyaXRlcjsKKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHN1cGVyLnNldFVwKCk7CisKKyAgICAgICAgbVdyaXRlciA9IG5ldyBSZWNvcmRpbmdXcml0ZXIoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0TGVzc1RoYW5CdWZmZXJTaXplKCkgeworICAgICAgICBmaW5hbCBMaW5lQnJlYWtCdWZmZXJlZFdyaXRlciBsdyA9IG5ldyBMaW5lQnJlYWtCdWZmZXJlZFdyaXRlcihtV3JpdGVyLCAxMDAwKTsKKworICAgICAgICBsdy5wcmludGxuKCJIZWxsbyIpOworICAgICAgICBsdy5wcmludGxuKCJXb3JsZCIpOworICAgICAgICBsdy5wcmludGxuKCJUZXN0Iik7CisgICAgICAgIGx3LmZsdXNoKCk7CisKKyAgICAgICAgYXNzZXJ0T3V0cHV0KCJIZWxsb1xuV29ybGRcblRlc3RcbiIpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRlc3RNb3JlVGhhbkJ1ZmZlclNpemVOb0xpbmVCcmVha3MoKSB7CisgICAgICAgIGZpbmFsIExpbmVCcmVha0J1ZmZlcmVkV3JpdGVyIGx3ID0gbmV3IExpbmVCcmVha0J1ZmZlcmVkV3JpdGVyKG1Xcml0ZXIsIDIwKTsKKworICAgICAgICBTdHJpbmcgbGl0ZXJhbCA9ICJhYWFhYWFhYWFhYWFhYWEiOworICAgICAgICBsdy5wcmludChsaXRlcmFsKTsKKyAgICAgICAgbHcucHJpbnQobGl0ZXJhbCk7CisgICAgICAgIGx3LmZsdXNoKCk7CisKKyAgICAgICAgLy8gSGF2ZSB0byBtYW51YWxseSBpbnNwZWN0IG91dHB1dC4KKyAgICAgICAgTGlzdDxTdHJpbmc+IHJlc3VsdCA9IG1Xcml0ZXIuZ2V0U3RyaW5ncygpOworICAgICAgICAvLyBFeHBlY3QgdHdvIHN0cmluZ3MuCisgICAgICAgIGFzc2VydEVxdWFscygyLCByZXN1bHQuc2l6ZSgpKTsKKyAgICAgICAgLy8gRXhwZWN0IHRoZSBzdHJpbmdzIHRvIHN1bSB1cCB0byB0aGUgb3JpZ2luYWwgaW5wdXQuCisgICAgICAgIGFzc2VydEVxdWFscygyICogbGl0ZXJhbC5sZW5ndGgoKSwgcmVzdWx0LmdldCgwKS5sZW5ndGgoKSArIHJlc3VsdC5nZXQoMSkubGVuZ3RoKCkpOworICAgICAgICAvLyBTdHJpbmdzIHNob3VsZCBvbmx5IGJlIGEuCisgICAgICAgIGZvciAoU3RyaW5nIHMgOiByZXN1bHQpIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcy5sZW5ndGgoKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCdhJywgcy5jaGFyQXQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdE1vcmVUaGFuQnVmZmVyU2l6ZU5vTGluZUJyZWFrc1NpbmdsZVN0cmluZygpIHsKKyAgICAgICAgZmluYWwgTGluZUJyZWFrQnVmZmVyZWRXcml0ZXIgbHcgPSBuZXcgTGluZUJyZWFrQnVmZmVyZWRXcml0ZXIobVdyaXRlciwgMjApOworCisgICAgICAgIFN0cmluZyBsaXRlcmFsID0gImFhYWFhYWFhYWFhYWFhYSI7CisgICAgICAgIGx3LnByaW50KGxpdGVyYWwgKyBsaXRlcmFsKTsKKyAgICAgICAgbHcuZmx1c2goKTsKKworICAgICAgICAvLyBIYXZlIHRvIG1hbnVhbGx5IGluc3BlY3Qgb3V0cHV0LgorICAgICAgICBMaXN0PFN0cmluZz4gcmVzdWx0ID0gbVdyaXRlci5nZXRTdHJpbmdzKCk7CisgICAgICAgIC8vIEV4cGVjdCB0d28gc3RyaW5ncy4KKyAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIHJlc3VsdC5zaXplKCkpOworICAgICAgICAvLyBFeHBlY3QgdGhlIHN0cmluZ3MgdG8gc3VtIHVwIHRvIHRoZSBvcmlnaW5hbCBpbnB1dC4KKyAgICAgICAgYXNzZXJ0RXF1YWxzKDIgKiBsaXRlcmFsLmxlbmd0aCgpLCByZXN1bHQuZ2V0KDApLmxlbmd0aCgpICsgcmVzdWx0LmdldCgxKS5sZW5ndGgoKSk7CisgICAgICAgIC8vIFN0cmluZ3Mgc2hvdWxkIG9ubHkgYmUgYS4KKyAgICAgICAgZm9yIChTdHJpbmcgcyA6IHJlc3VsdCkgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzLmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoJ2EnLCBzLmNoYXJBdChpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0TW9yZVRoYW5CdWZmZXJTaXplTGluZUJyZWFrQmVmb3JlKCkgeworICAgICAgICBmaW5hbCBMaW5lQnJlYWtCdWZmZXJlZFdyaXRlciBsdyA9IG5ldyBMaW5lQnJlYWtCdWZmZXJlZFdyaXRlcihtV3JpdGVyLCAyMCk7CisKKyAgICAgICAgU3RyaW5nIGxpdGVyYWwxID0gImFhYWFhYWFhYWFcbmJiYmIiOworICAgICAgICBTdHJpbmcgbGl0ZXJhbDIgPSAiY2NjY2NjY2NjYyI7CisgICAgICAgIGx3LnByaW50KGxpdGVyYWwxKTsKKyAgICAgICAgbHcucHJpbnQobGl0ZXJhbDIpOworICAgICAgICBsdy5mbHVzaCgpOworCisgICAgICAgIGFzc2VydE91dHB1dCgiYWFhYWFhYWFhYSIsICJiYmJiY2NjY2NjY2NjYyIpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRlc3RNb3JlVGhhbkJ1ZmZlclNpemVMaW5lQnJlYWtCZWZvcmVTaW5nbGVTdHJpbmcoKSB7CisgICAgICAgIGZpbmFsIExpbmVCcmVha0J1ZmZlcmVkV3JpdGVyIGx3ID0gbmV3IExpbmVCcmVha0J1ZmZlcmVkV3JpdGVyKG1Xcml0ZXIsIDIwKTsKKworICAgICAgICBTdHJpbmcgbGl0ZXJhbDEgPSAiYWFhYWFhYWFhYVxuYmJiYiI7CisgICAgICAgIFN0cmluZyBsaXRlcmFsMiA9ICJjY2NjY2NjY2NjIjsKKyAgICAgICAgbHcucHJpbnQobGl0ZXJhbDEgKyBsaXRlcmFsMik7CisgICAgICAgIGx3LmZsdXNoKCk7CisKKyAgICAgICAgYXNzZXJ0T3V0cHV0KCJhYWFhYWFhYWFhIiwgImJiYmJjY2NjY2NjY2NjIik7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdE1vcmVUaGFuQnVmZmVyU2l6ZUxpbmVCcmVha05ldygpIHsKKyAgICAgICAgZmluYWwgTGluZUJyZWFrQnVmZmVyZWRXcml0ZXIgbHcgPSBuZXcgTGluZUJyZWFrQnVmZmVyZWRXcml0ZXIobVdyaXRlciwgMjApOworCisgICAgICAgIFN0cmluZyBsaXRlcmFsMSA9ICJhYWFhYWFhYWFhYmJiYmIiOworICAgICAgICBTdHJpbmcgbGl0ZXJhbDIgPSAiY1xuZFxuZGRkZGRkZGRkIjsKKyAgICAgICAgbHcucHJpbnQobGl0ZXJhbDEpOworICAgICAgICBsdy5wcmludChsaXRlcmFsMik7CisgICAgICAgIGx3LmZsdXNoKCk7CisKKyAgICAgICAgYXNzZXJ0T3V0cHV0KCJhYWFhYWFhYWFhYmJiYmJjXG5kIiwgImRkZGRkZGRkZCIpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRlc3RNb3JlVGhhbkJ1ZmZlclNpemVMaW5lQnJlYWtCZWZvcmVBbmROZXcoKSB7CisgICAgICAgIGZpbmFsIExpbmVCcmVha0J1ZmZlcmVkV3JpdGVyIGx3ID0gbmV3IExpbmVCcmVha0J1ZmZlcmVkV3JpdGVyKG1Xcml0ZXIsIDIwKTsKKworICAgICAgICBTdHJpbmcgbGl0ZXJhbDEgPSAiYWFhYWFhYWFhYVxuYmJiYmIiOworICAgICAgICBTdHJpbmcgbGl0ZXJhbDIgPSAiY1xuZFxuZGRkZGRkZGRkIjsKKyAgICAgICAgbHcucHJpbnQobGl0ZXJhbDEpOworICAgICAgICBsdy5wcmludChsaXRlcmFsMik7CisgICAgICAgIGx3LmZsdXNoKCk7CisKKyAgICAgICAgYXNzZXJ0T3V0cHV0KCJhYWFhYWFhYWFhXG5iYmJiYmNcbmQiLCAiZGRkZGRkZGRkIik7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdE1vcmVUaGFuQnVmZmVyU2l6ZUludCgpIHsKKyAgICAgICAgZmluYWwgTGluZUJyZWFrQnVmZmVyZWRXcml0ZXIgbHcgPSBuZXcgTGluZUJyZWFrQnVmZmVyZWRXcml0ZXIobVdyaXRlciwgMTUpOworCisgICAgICAgIGludCBsaXRlcmFsMSA9IDEyMzQ1Njc4OTA7CisgICAgICAgIGludCBsaXRlcmFsMiA9IDk4NzY1NDMyMTsKKyAgICAgICAgbHcucHJpbnQobGl0ZXJhbDEpOworICAgICAgICBsdy5wcmludChsaXRlcmFsMik7CisgICAgICAgIGx3LmZsdXNoKCk7CisKKyAgICAgICAgYXNzZXJ0T3V0cHV0KCIxMjM0NTY3ODkwOTg3NjUiLCAiNDMyMSIpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRlc3RNb3JlVGhhbkJ1ZmZlclNpemVDaGFyKCkgeworICAgICAgICBmaW5hbCBMaW5lQnJlYWtCdWZmZXJlZFdyaXRlciBsdyA9IG5ldyBMaW5lQnJlYWtCdWZmZXJlZFdyaXRlcihtV3JpdGVyLCAxNSk7CisKKyAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IDEwOyBpKyspIHsKKyAgICAgICAgICAgIGx3LnByaW50KCckJyk7CisgICAgICAgIH0KKyAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IDEwOyBpKyspIHsKKyAgICAgICAgICAgIGx3LnByaW50KCclJyk7CisgICAgICAgIH0KKyAgICAgICAgbHcuZmx1c2goKTsKKworICAgICAgICBhc3NlcnRPdXRwdXQoIiQkJCQkJCQkJCQlJSUlJSIsICIlJSUlJSIpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRlc3RNb3JlVGhhbkJ1ZmZlclNpemVMaW5lQnJlYWtOZXdDaGFycygpIHsKKyAgICAgICAgZmluYWwgTGluZUJyZWFrQnVmZmVyZWRXcml0ZXIgbHcgPSBuZXcgTGluZUJyZWFrQnVmZmVyZWRXcml0ZXIobVdyaXRlciwgMjApOworCisgICAgICAgIFN0cmluZyBsaXRlcmFsMSA9ICJhYWFhYWFhYWFhYmJiYmIiOworICAgICAgICBTdHJpbmcgbGl0ZXJhbDIgPSAiY1xuZFxuZGRkZGRkZGRkIjsKKyAgICAgICAgbHcucHJpbnQobGl0ZXJhbDEudG9DaGFyQXJyYXkoKSk7CisgICAgICAgIGx3LnByaW50KGxpdGVyYWwyLnRvQ2hhckFycmF5KCkpOworICAgICAgICBsdy5mbHVzaCgpOworCisgICAgICAgIGFzc2VydE91dHB1dCgiYWFhYWFhYWFhYWJiYmJiY1xuZCIsICJkZGRkZGRkZGQiKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgYXNzZXJ0T3V0cHV0KFN0cmluZy4uLiBnb2xkZW4pIHsKKyAgICAgICAgTGlzdDxTdHJpbmc+IGdvbGRMaXN0ID0gY3JlYXRlVGVzdEdvbGRlbihnb2xkZW4pOworICAgICAgICBhc3NlcnRFcXVhbHMoZ29sZExpc3QsIG1Xcml0ZXIuZ2V0U3RyaW5ncygpKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBMaXN0PFN0cmluZz4gY3JlYXRlVGVzdEdvbGRlbihTdHJpbmcuLi4gYXJncykgeworICAgICAgICBMaXN0PFN0cmluZz4gcmV0ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisgICAgICAgIGZvciAoU3RyaW5nIHMgOiBhcmdzKSB7CisgICAgICAgICAgICByZXQuYWRkKHMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisgICAgLy8gQSB3cml0ZXIgcmVjb3JkaW5nIGNhbGxzIHRvIHdyaXRlLgorICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGNsYXNzIFJlY29yZGluZ1dyaXRlciBleHRlbmRzIFdyaXRlciB7CisKKyAgICAgICAgcHJpdmF0ZSBMaXN0PFN0cmluZz4gc3RyaW5ncyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCisgICAgICAgIHB1YmxpYyBSZWNvcmRpbmdXcml0ZXIoKSB7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgTGlzdDxTdHJpbmc+IGdldFN0cmluZ3MoKSB7CisgICAgICAgICAgICByZXR1cm4gc3RyaW5nczsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCB3cml0ZShjaGFyW10gY2J1ZiwgaW50IG9mZiwgaW50IGxlbikgeworICAgICAgICAgICAgc3RyaW5ncy5hZGQobmV3IFN0cmluZyhjYnVmLCBvZmYsIGxlbikpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIGZsdXNoKCkgeworICAgICAgICAgICAgLy8gSWdub3JlLgorICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIGNsb3NlKCkgeworICAgICAgICAgICAgLy8gSWdub3JlLgorICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZGF0YS9ldGMvcGxhdGZvcm0ueG1sIGIvZGF0YS9ldGMvcGxhdGZvcm0ueG1sCmluZGV4IGI0Zjg4YzMzLi45OTlkNDdiIDEwMDY0NAotLS0gYS9kYXRhL2V0Yy9wbGF0Zm9ybS54bWwKKysrIGIvZGF0YS9ldGMvcGxhdGZvcm0ueG1sCkBAIC00NCw2ICs0NCw3IEBACiAKICAgICA8cGVybWlzc2lvbiBuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uQkxVRVRPT1RIX1NUQUNLIiA+CiAgICAgICAgIDxncm91cCBnaWQ9Im5ldF9idF9zdGFjayIgLz4KKyAgICAgICAgPGdyb3VwIGdpZD0id2FrZWxvY2siIC8+CiAgICAgPC9wZXJtaXNzaW9uPgogCiAgICAgPHBlcm1pc3Npb24gbmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLk5FVF9UVU5ORUxJTkciID4KZGlmZiAtLWdpdCBhL2RhdGEvZm9udHMvZm9udHMueG1sIGIvZGF0YS9mb250cy9mb250cy54bWwKaW5kZXggNTU0YjZmMS4uNzMxYmY0MiAxMDA2NDQKLS0tIGEvZGF0YS9mb250cy9mb250cy54bWwKKysrIGIvZGF0YS9mb250cy9mb250cy54bWwKQEAgLTM0NCw3ICszNDQsNyBAQAogICAgIDxmYW1pbHk+CiAgICAgICAgIDxmb250IHdlaWdodD0iNDAwIiBzdHlsZT0ibm9ybWFsIj5OYW51bUdvdGhpYy50dGY8L2ZvbnQ+CiAgICAgPC9mYW1pbHk+Ci0gICAgPGZhbWlseSBsYW5nPSJ1bmQtUWFhZSI+CisgICAgPGZhbWlseSBsYW5nPSJ1bmQtWnN5ZSI+CiAgICAgICAgIDxmb250IHdlaWdodD0iNDAwIiBzdHlsZT0ibm9ybWFsIj5Ob3RvQ29sb3JFbW9qaS50dGY8L2ZvbnQ+CiAgICAgPC9mYW1pbHk+CiAgICAgPGZhbWlseT4KZGlmZiAtLWdpdCBhL2RybS9qYXZhL2FuZHJvaWQvZHJtL0RybU1hbmFnZXJDbGllbnQuamF2YSBiL2RybS9qYXZhL2FuZHJvaWQvZHJtL0RybU1hbmFnZXJDbGllbnQuamF2YQppbmRleCBjMDVlYTJlLi43MDRmMGNlIDEwMDY0NAotLS0gYS9kcm0vamF2YS9hbmRyb2lkL2RybS9Ecm1NYW5hZ2VyQ2xpZW50LmphdmEKKysrIGIvZHJtL2phdmEvYW5kcm9pZC9kcm0vRHJtTWFuYWdlckNsaWVudC5qYXZhCkBAIC0zOCwxMyArMzgsMTQgQEAKIGltcG9ydCBqYXZhLmxhbmcucmVmLldlYWtSZWZlcmVuY2U7CiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5hdG9taWMuQXRvbWljQm9vbGVhbjsKIAogLyoqCiAgKiBUaGUgbWFpbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UgZm9yIHRoZSBEUk0gZnJhbWV3b3JrLiBBbiBhcHBsaWNhdGlvbiBtdXN0IGluc3RhbnRpYXRlIHRoaXMgY2xhc3MKICAqIHRvIGFjY2VzcyBEUk0gYWdlbnRzIHRocm91Z2ggdGhlIERSTSBmcmFtZXdvcmsuCiAgKgogICovCi1wdWJsaWMgY2xhc3MgRHJtTWFuYWdlckNsaWVudCB7CitwdWJsaWMgY2xhc3MgRHJtTWFuYWdlckNsaWVudCBpbXBsZW1lbnRzIEF1dG9DbG9zZWFibGUgewogICAgIC8qKgogICAgICAqIEluZGljYXRlcyB0aGF0IGEgcmVxdWVzdCB3YXMgc3VjY2Vzc2Z1bCBvciB0aGF0IG5vIGVycm9yIG9jY3VycmVkLgogICAgICAqLwpAQCAtNjEsNiArNjIsNyBAQAogICAgIEhhbmRsZXJUaHJlYWQgbUV2ZW50VGhyZWFkOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiRHJtTWFuYWdlckNsaWVudCI7CiAKKyAgICBwcml2YXRlIGZpbmFsIEF0b21pY0Jvb2xlYW4gbUNsb3NlZCA9IG5ldyBBdG9taWNCb29sZWFuKCk7CiAgICAgcHJpdmF0ZSBmaW5hbCBDbG9zZUd1YXJkIG1DbG9zZUd1YXJkID0gQ2xvc2VHdWFyZC5nZXQoKTsKIAogICAgIHN0YXRpYyB7CkBAIC0xMTcsNyArMTE5LDYgQEAKIAogICAgIHByaXZhdGUgaW50IG1VbmlxdWVJZDsKICAgICBwcml2YXRlIGxvbmcgbU5hdGl2ZUNvbnRleHQ7Ci0gICAgcHJpdmF0ZSB2b2xhdGlsZSBib29sZWFuIG1SZWxlYXNlZDsKICAgICBwcml2YXRlIENvbnRleHQgbUNvbnRleHQ7CiAgICAgcHJpdmF0ZSBJbmZvSGFuZGxlciBtSW5mb0hhbmRsZXI7CiAgICAgcHJpdmF0ZSBFdmVudEhhbmRsZXIgbUV2ZW50SGFuZGxlcjsKQEAgLTI2MSw0MSArMjYyLDQ3IEBACiAgICAgQE92ZXJyaWRlCiAgICAgcHJvdGVjdGVkIHZvaWQgZmluYWxpemUoKSB0aHJvd3MgVGhyb3dhYmxlIHsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGlmIChtQ2xvc2VHdWFyZCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbUNsb3NlR3VhcmQud2FybklmT3BlbigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmVsZWFzZSgpOworICAgICAgICAgICAgbUNsb3NlR3VhcmQud2FybklmT3BlbigpOworICAgICAgICAgICAgY2xvc2UoKTsKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIHN1cGVyLmZpbmFsaXplKCk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvKioKLSAgICAgKiBSZWxlYXNlcyByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgRHJtTWFuYWdlckNsaWVudC4KLSAgICAgKgotICAgICAqIEl0IGlzIGNvbnNpZGVyZWQgZ29vZCBwcmFjdGljZSB0byBjYWxsIHRoaXMgbWV0aG9kIHdoZW4gdGhlIHtAbGluayBEcm1NYW5hZ2VyQ2xpZW50fSBvYmplY3QKLSAgICAgKiBpcyBubyBsb25nZXIgbmVlZGVkIGluIHlvdXIgYXBwbGljYXRpb24uIEFmdGVyIHJlbGVhc2UoKSBpcyBjYWxsZWQsCi0gICAgICoge0BsaW5rIERybU1hbmFnZXJDbGllbnR9IGlzIG5vIGxvbmdlciB1c2FibGUgc2luY2UgaXQgaGFzIGxvc3QgYWxsIG9mIGl0cyByZXF1aXJlZCByZXNvdXJjZS4KKyAgICAgKiBSZWxlYXNlcyByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IHNlc3Npb24gb2YKKyAgICAgKiBEcm1NYW5hZ2VyQ2xpZW50LiBJdCBpcyBjb25zaWRlcmVkIGdvb2QgcHJhY3RpY2UgdG8gY2FsbCB0aGlzIG1ldGhvZCB3aGVuCisgICAgICogdGhlIHtAbGluayBEcm1NYW5hZ2VyQ2xpZW50fSBvYmplY3QgaXMgbm8gbG9uZ2VyIG5lZWRlZCBpbiB5b3VyCisgICAgICogYXBwbGljYXRpb24uIEFmdGVyIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCwge0BsaW5rIERybU1hbmFnZXJDbGllbnR9IGlzIG5vCisgICAgICogbG9uZ2VyIHVzYWJsZSBzaW5jZSBpdCBoYXMgbG9zdCBhbGwgb2YgaXRzIHJlcXVpcmVkIHJlc291cmNlLgogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHJlbGVhc2UoKSB7Ci0gICAgICAgIGlmIChtUmVsZWFzZWQpIHJldHVybjsKLSAgICAgICAgbVJlbGVhc2VkID0gdHJ1ZTsKLQotICAgICAgICBpZiAobUV2ZW50SGFuZGxlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtRXZlbnRUaHJlYWQucXVpdCgpOwotICAgICAgICAgICAgbUV2ZW50VGhyZWFkID0gbnVsbDsKLSAgICAgICAgfQotICAgICAgICBpZiAobUluZm9IYW5kbGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1JbmZvVGhyZWFkLnF1aXQoKTsKLSAgICAgICAgICAgIG1JbmZvVGhyZWFkID0gbnVsbDsKLSAgICAgICAgfQotICAgICAgICBtRXZlbnRIYW5kbGVyID0gbnVsbDsKLSAgICAgICAgbUluZm9IYW5kbGVyID0gbnVsbDsKLSAgICAgICAgbU9uRXZlbnRMaXN0ZW5lciA9IG51bGw7Ci0gICAgICAgIG1PbkluZm9MaXN0ZW5lciA9IG51bGw7Ci0gICAgICAgIG1PbkVycm9yTGlzdGVuZXIgPSBudWxsOwotICAgICAgICBfcmVsZWFzZShtVW5pcXVlSWQpOworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIGNsb3NlKCkgewogICAgICAgICBtQ2xvc2VHdWFyZC5jbG9zZSgpOworICAgICAgICBpZiAobUNsb3NlZC5jb21wYXJlQW5kU2V0KGZhbHNlLCB0cnVlKSkgeworICAgICAgICAgICAgaWYgKG1FdmVudEhhbmRsZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG1FdmVudFRocmVhZC5xdWl0KCk7CisgICAgICAgICAgICAgICAgbUV2ZW50VGhyZWFkID0gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtSW5mb0hhbmRsZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG1JbmZvVGhyZWFkLnF1aXQoKTsKKyAgICAgICAgICAgICAgICBtSW5mb1RocmVhZCA9IG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtRXZlbnRIYW5kbGVyID0gbnVsbDsKKyAgICAgICAgICAgIG1JbmZvSGFuZGxlciA9IG51bGw7CisgICAgICAgICAgICBtT25FdmVudExpc3RlbmVyID0gbnVsbDsKKyAgICAgICAgICAgIG1PbkluZm9MaXN0ZW5lciA9IG51bGw7CisgICAgICAgICAgICBtT25FcnJvckxpc3RlbmVyID0gbnVsbDsKKyAgICAgICAgICAgIF9yZWxlYXNlKG1VbmlxdWVJZCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCBieSB7QGxpbmsgI2Nsb3NlKCl9LgorICAgICAqLworICAgIEBEZXByZWNhdGVkCisgICAgcHVibGljIHZvaWQgcmVsZWFzZSgpIHsKKyAgICAgICAgY2xvc2UoKTsKICAgICB9CiAKICAgICAvKioKZGlmZiAtLWdpdCBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9CaXRtYXBGYWN0b3J5LmphdmEgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvQml0bWFwRmFjdG9yeS5qYXZhCmluZGV4IGRhNTg4ODQuLjE3NWM3MjYgMTAwNjQ0Ci0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9CaXRtYXBGYWN0b3J5LmphdmEKKysrIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL0JpdG1hcEZhY3RvcnkuamF2YQpAQCAtMTYzLDggKzE2MywxMSBAQAogICAgICAgICBwdWJsaWMgYm9vbGVhbiBpblByZW11bHRpcGxpZWQ7CiAKICAgICAgICAgLyoqCi0gICAgICAgICAqIElmIGRpdGhlciBpcyB0cnVlLCB0aGUgZGVjb2RlciB3aWxsIGF0dGVtcHQgdG8gZGl0aGVyIHRoZSBkZWNvZGVkCi0gICAgICAgICAqIGltYWdlLgorICAgICAgICAgKiBAZGVwcmVjYXRlZCBBcyBvZiB7QGxpbmsgYW5kcm9pZC5vcy5CdWlsZC5WRVJTSU9OX0NPREVTI059LCB0aGlzIGlzCisgICAgICAgICAqIGlnbm9yZWQuCisgICAgICAgICAqCisgICAgICAgICAqIEluIHtAbGluayBhbmRyb2lkLm9zLkJ1aWxkLlZFUlNJT05fQ09ERVMjTX0gYW5kIGJlbG93LCBpZiBkaXRoZXIgaXMKKyAgICAgICAgICogdHJ1ZSwgdGhlIGRlY29kZXIgd2lsbCBhdHRlbXB0IHRvIGRpdGhlciB0aGUgZGVjb2RlZCBpbWFnZS4KICAgICAgICAgICovCiAgICAgICAgIHB1YmxpYyBib29sZWFuIGluRGl0aGVyOwogCkBAIC0zMDgsNyArMzExLDExIEBACiAgICAgICAgIHB1YmxpYyBib29sZWFuIGluSW5wdXRTaGFyZWFibGU7CiAKICAgICAgICAgLyoqCi0gICAgICAgICAqIElmIGluUHJlZmVyUXVhbGl0eU92ZXJTcGVlZCBpcyBzZXQgdG8gdHJ1ZSwgdGhlIGRlY29kZXIgd2lsbCB0cnkgdG8KKyAgICAgICAgICogQGRlcHJlY2F0ZWQgQXMgb2Yge0BsaW5rIGFuZHJvaWQub3MuQnVpbGQuVkVSU0lPTl9DT0RFUyNOfSwgdGhpcyBpcworICAgICAgICAgKiBpZ25vcmVkLiAgVGhlIG91dHB1dCB3aWxsIGFsd2F5cyBiZSBoaWdoIHF1YWxpdHkuCisgICAgICAgICAqCisgICAgICAgICAqIEluIHtAbGluayBhbmRyb2lkLm9zLkJ1aWxkLlZFUlNJT05fQ09ERVMjTX0gYW5kIGJlbG93LCBpZgorICAgICAgICAgKiBpblByZWZlclF1YWxpdHlPdmVyU3BlZWQgaXMgc2V0IHRvIHRydWUsIHRoZSBkZWNvZGVyIHdpbGwgdHJ5IHRvCiAgICAgICAgICAqIGRlY29kZSB0aGUgcmVjb25zdHJ1Y3RlZCBpbWFnZSB0byBhIGhpZ2hlciBxdWFsaXR5IGV2ZW4gYXQgdGhlCiAgICAgICAgICAqIGV4cGVuc2Ugb2YgdGhlIGRlY29kaW5nIHNwZWVkLiBDdXJyZW50bHkgdGhlIGZpZWxkIG9ubHkgYWZmZWN0cyBKUEVHCiAgICAgICAgICAqIGRlY29kZSwgaW4gdGhlIGNhc2Ugb2Ygd2hpY2ggYSBtb3JlIGFjY3VyYXRlLCBidXQgc2xpZ2h0bHkgc2xvd2VyLApAQCAtMzQ3LDggKzM1NCw2IEBACiAgICAgICAgICAqLwogICAgICAgICBwdWJsaWMgYnl0ZVtdIGluVGVtcFN0b3JhZ2U7CiAKLSAgICAgICAgcHJpdmF0ZSBuYXRpdmUgdm9pZCByZXF1ZXN0Q2FuY2VsKCk7Ci0KICAgICAgICAgLyoqCiAgICAgICAgICAqIEZsYWcgdG8gaW5kaWNhdGUgdGhhdCBjYW5jZWwgaGFzIGJlZW4gY2FsbGVkIG9uIHRoaXMgb2JqZWN0LiAgVGhpcwogICAgICAgICAgKiBpcyB1c2VmdWwgaWYgdGhlcmUncyBhbiBpbnRlcm1lZGlhcnkgdGhhdCB3YW50cyB0byBmaXJzdCBkZWNvZGUgdGhlCkBAIC0zNTksMTYgKzM2NCwxOSBAQAogICAgICAgICBwdWJsaWMgYm9vbGVhbiBtQ2FuY2VsOwogCiAgICAgICAgIC8qKgotICAgICAgICAgKiAgVGhpcyBjYW4gYmUgY2FsbGVkIGZyb20gYW5vdGhlciB0aHJlYWQgd2hpbGUgdGhpcyBvcHRpb25zIG9iamVjdCBpcwotICAgICAgICAgKiAgaW5zaWRlIGEgZGVjb2RlLi4uIGNhbGwuIENhbGxpbmcgdGhpcyB3aWxsIG5vdGlmeSB0aGUgZGVjb2RlciB0aGF0Ci0gICAgICAgICAqICBpdCBzaG91bGQgY2FuY2VsIGl0cyBvcGVyYXRpb24uIFRoaXMgaXMgbm90IGd1YXJhbnRlZWQgdG8gY2FuY2VsCi0gICAgICAgICAqICB0aGUgZGVjb2RlLCBidXQgaWYgaXQgZG9lcywgdGhlIGRlY29kZXIuLi4gb3BlcmF0aW9uIHdpbGwgcmV0dXJuCi0gICAgICAgICAqICBudWxsLCBvciBpZiBpbkp1c3REZWNvZGVCb3VuZHMgaXMgdHJ1ZSwgd2lsbCBzZXQgb3V0V2lkdGgvb3V0SGVpZ2h0CisgICAgICAgICAqICBAZGVwcmVjYXRlZCBBcyBvZiB7QGxpbmsgYW5kcm9pZC5vcy5CdWlsZC5WRVJTSU9OX0NPREVTI059LCB0aGlzCisgICAgICAgICAqICB3aWxsIG5vdCBhZmZlY3QgdGhlIGRlY29kZSwgdGhvdWdoIGl0IHdpbGwgc3RpbGwgc2V0IG1DYW5jZWwuCisgICAgICAgICAqCisgICAgICAgICAqICBJbiB7QGxpbmsgYW5kcm9pZC5vcy5CdWlsZC5WRVJTSU9OX0NPREVTI019IGFuZCBiZWxvdywgaWYgdGhpcyBjYW4KKyAgICAgICAgICogIGJlIGNhbGxlZCBmcm9tIGFub3RoZXIgdGhyZWFkIHdoaWxlIHRoaXMgb3B0aW9ucyBvYmplY3QgaXMgaW5zaWRlCisgICAgICAgICAqICBhIGRlY29kZS4uLiBjYWxsLiBDYWxsaW5nIHRoaXMgd2lsbCBub3RpZnkgdGhlIGRlY29kZXIgdGhhdCBpdAorICAgICAgICAgKiAgc2hvdWxkIGNhbmNlbCBpdHMgb3BlcmF0aW9uLiBUaGlzIGlzIG5vdCBndWFyYW50ZWVkIHRvIGNhbmNlbCB0aGUKKyAgICAgICAgICogIGRlY29kZSwgYnV0IGlmIGl0IGRvZXMsIHRoZSBkZWNvZGVyLi4uIG9wZXJhdGlvbiB3aWxsIHJldHVybiBudWxsLAorICAgICAgICAgKiAgb3IgaWYgaW5KdXN0RGVjb2RlQm91bmRzIGlzIHRydWUsIHdpbGwgc2V0IG91dFdpZHRoL291dEhlaWdodAogICAgICAgICAgKiAgdG8gLTEKICAgICAgICAgICovCiAgICAgICAgIHB1YmxpYyB2b2lkIHJlcXVlc3RDYW5jZWxEZWNvZGUoKSB7CiAgICAgICAgICAgICBtQ2FuY2VsID0gdHJ1ZTsKLSAgICAgICAgICAgIHJlcXVlc3RDYW5jZWwoKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL0NhbnZhcy5qYXZhIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL0NhbnZhcy5qYXZhCmluZGV4IDVhY2MxYTMuLjFjYzUzNDYgMTAwNjQ0Ci0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9DYW52YXMuamF2YQorKysgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvQ2FudmFzLmphdmEKQEAgLTY1NCw2ICs2NTQsMTIgQEAKICAgICAvKioKICAgICAgKiBSZXR1cm4sIGluIGN0bSwgdGhlIGN1cnJlbnQgdHJhbnNmb3JtYXRpb24gbWF0cml4LiBUaGlzIGRvZXMgbm90IGFsdGVyCiAgICAgICogdGhlIG1hdHJpeCBpbiB0aGUgY2FudmFzLCBidXQganVzdCByZXR1cm5zIGEgY29weSBvZiBpdC4KKyAgICAgKgorICAgICAqIEBkZXByZWNhdGVkIHtAbGluayAjaXNIYXJkd2FyZUFjY2VsZXJhdGVkKCkgSGFyZHdhcmUgYWNjZWxlcmF0ZWR9IGNhbnZhc2VzIG1heSBoYXZlIGFueQorICAgICAqIG1hdHJpeCB3aGVuIHBhc3NlZCB0byBhIFZpZXcgb3IgRHJhd2FibGUsIGFzIGl0IGlzIGltcGxlbWVudGF0aW9uIGRlZmluZWQgd2hlcmUgaW4gdGhlCisgICAgICogaGllcmFyY2h5IHN1Y2ggY2FudmFzZXMgYXJlIGNyZWF0ZWQuIEl0IGlzIHJlY29tbWVuZGVkIGluIHN1Y2ggY2FzZXMgdG8gZWl0aGVyIGRyYXcgY29udGVudHMKKyAgICAgKiBpcnJlc3BlY3RpdmUgb2YgdGhlIGN1cnJlbnQgbWF0cml4LCBvciB0byB0cmFjayByZWxldmFudCB0cmFuc2Zvcm0gc3RhdGUgb3V0c2lkZSBvZiB0aGUKKyAgICAgKiBjYW52YXMuCiAgICAgICovCiAgICAgQERlcHJlY2F0ZWQKICAgICBwdWJsaWMgdm9pZCBnZXRNYXRyaXgoQE5vbk51bGwgTWF0cml4IGN0bSkgewpAQCAtNjYzLDYgKzY2OSwxMiBAQAogICAgIC8qKgogICAgICAqIFJldHVybiBhIG5ldyBtYXRyaXggd2l0aCBhIGNvcHkgb2YgdGhlIGNhbnZhcycgY3VycmVudCB0cmFuc2Zvcm1hdGlvbgogICAgICAqIG1hdHJpeC4KKyAgICAgKgorICAgICAqIEBkZXByZWNhdGVkIHtAbGluayAjaXNIYXJkd2FyZUFjY2VsZXJhdGVkKCkgSGFyZHdhcmUgYWNjZWxlcmF0ZWR9IGNhbnZhc2VzIG1heSBoYXZlIGFueQorICAgICAqIG1hdHJpeCB3aGVuIHBhc3NlZCB0byBhIFZpZXcgb3IgRHJhd2FibGUsIGFzIGl0IGlzIGltcGxlbWVudGF0aW9uIGRlZmluZWQgd2hlcmUgaW4gdGhlCisgICAgICogaGllcmFyY2h5IHN1Y2ggY2FudmFzZXMgYXJlIGNyZWF0ZWQuIEl0IGlzIHJlY29tbWVuZGVkIGluIHN1Y2ggY2FzZXMgdG8gZWl0aGVyIGRyYXcgY29udGVudHMKKyAgICAgKiBpcnJlc3BlY3RpdmUgb2YgdGhlIGN1cnJlbnQgbWF0cml4LCBvciB0byB0cmFjayByZWxldmFudCB0cmFuc2Zvcm0gc3RhdGUgb3V0c2lkZSBvZiB0aGUKKyAgICAgKiBjYW52YXMuCiAgICAgICovCiAgICAgQERlcHJlY2F0ZWQKICAgICBwdWJsaWMgZmluYWwgQE5vbk51bGwgTWF0cml4IGdldE1hdHJpeCgpIHsKQEAgLTgxMiw2ICs4MjQsNyBAQAogICAgICAqIEBkZXByZWNhdGVkIFVubGlrZSBhbGwgb3RoZXIgY2xpcCBjYWxscyB0aGlzIEFQSSBkb2VzIG5vdCByZXNwZWN0IHRoZQogICAgICAqICAgICAgICAgICAgIGN1cnJlbnQgbWF0cml4LiBVc2Uge0BsaW5rICNjbGlwUmVjdChSZWN0KX0gYXMgYW4gYWx0ZXJuYXRpdmUuCiAgICAgICovCisgICAgQERlcHJlY2F0ZWQKICAgICBwdWJsaWMgYm9vbGVhbiBjbGlwUmVnaW9uKEBOb25OdWxsIFJlZ2lvbiByZWdpb24sIEBOb25OdWxsIFJlZ2lvbi5PcCBvcCkgewogICAgICAgICByZXR1cm4gbmF0aXZlX2NsaXBSZWdpb24obU5hdGl2ZUNhbnZhc1dyYXBwZXIsIHJlZ2lvbi5uaSgpLCBvcC5uYXRpdmVJbnQpOwogICAgIH0KQEAgLTgyOSw2ICs4NDIsNyBAQAogICAgICAqIEBkZXByZWNhdGVkIFVubGlrZSBhbGwgb3RoZXIgY2xpcCBjYWxscyB0aGlzIEFQSSBkb2VzIG5vdCByZXNwZWN0IHRoZQogICAgICAqICAgICAgICAgICAgIGN1cnJlbnQgbWF0cml4LiBVc2Uge0BsaW5rICNjbGlwUmVjdChSZWN0KX0gYXMgYW4gYWx0ZXJuYXRpdmUuCiAgICAgICovCisgICAgQERlcHJlY2F0ZWQKICAgICBwdWJsaWMgYm9vbGVhbiBjbGlwUmVnaW9uKEBOb25OdWxsIFJlZ2lvbiByZWdpb24pIHsKICAgICAgICAgcmV0dXJuIGNsaXBSZWdpb24ocmVnaW9uLCBSZWdpb24uT3AuSU5URVJTRUNUKTsKICAgICB9CkBAIC0xMDc5LDExICsxMDkzLDEyIEBACiAgICAgICogICAgICAgICAgICAgICAgIChjb3VudCA+PiAyKS4KICAgICAgKiBAcGFyYW0gcGFpbnQgICAgVGhlIHBhaW50IHVzZWQgdG8gZHJhdyB0aGUgcG9pbnRzCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgZHJhd0xpbmVzKEBTaXplKG1pbj00LG11bHRpcGxlPTIpIGZsb2F0W10gcHRzLCBpbnQgb2Zmc2V0LCBpbnQgY291bnQsIFBhaW50IHBhaW50KSB7CisgICAgcHVibGljIHZvaWQgZHJhd0xpbmVzKEBTaXplKG11bHRpcGxlPTQpIEBOb25OdWxsIGZsb2F0W10gcHRzLCBpbnQgb2Zmc2V0LCBpbnQgY291bnQsCisgICAgICAgICAgICBATm9uTnVsbCBQYWludCBwYWludCkgewogICAgICAgICBuYXRpdmVfZHJhd0xpbmVzKG1OYXRpdmVDYW52YXNXcmFwcGVyLCBwdHMsIG9mZnNldCwgY291bnQsIHBhaW50LmdldE5hdGl2ZUluc3RhbmNlKCkpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRyYXdMaW5lcyhAU2l6ZShtaW49NCxtdWx0aXBsZT0yKSBATm9uTnVsbCBmbG9hdFtdIHB0cywgQE5vbk51bGwgUGFpbnQgcGFpbnQpIHsKKyAgICBwdWJsaWMgdm9pZCBkcmF3TGluZXMoQFNpemUobXVsdGlwbGU9NCkgQE5vbk51bGwgZmxvYXRbXSBwdHMsIEBOb25OdWxsIFBhaW50IHBhaW50KSB7CiAgICAgICAgIGRyYXdMaW5lcyhwdHMsIDAsIHB0cy5sZW5ndGgsIHBhaW50KTsKICAgICB9CiAKQEAgLTE4MjksMTYgKzE4NDQsMTYgQEAKICAgICAgKiBEcmF3IHRoZSB0ZXh0IGluIHRoZSBhcnJheSwgd2l0aCBlYWNoIGNoYXJhY3RlcidzIG9yaWdpbiBzcGVjaWZpZWQgYnkKICAgICAgKiB0aGUgcG9zIGFycmF5LgogICAgICAqCi0gICAgICogVGhpcyBtZXRob2QgZG9lcyBub3Qgc3VwcG9ydCBnbHlwaCBjb21wb3NpdGlvbiBhbmQgZGVjb21wb3NpdGlvbiBhbmQKLSAgICAgKiBzaG91bGQgdGhlcmVmb3JlIG5vdCBiZSB1c2VkIHRvIHJlbmRlciBjb21wbGV4IHNjcmlwdHMuIEl0IGFsc28gZG9lc24ndAotICAgICAqIGhhbmRsZSBzdXBwbGVtZW50YXJ5IGNoYXJhY3RlcnMgKGVnIGVtb2ppKS4KLSAgICAgKgogICAgICAqIEBwYXJhbSB0ZXh0ICAgICBUaGUgdGV4dCB0byBiZSBkcmF3bgogICAgICAqIEBwYXJhbSBpbmRleCAgICBUaGUgaW5kZXggb2YgdGhlIGZpcnN0IGNoYXJhY3RlciB0byBkcmF3CiAgICAgICogQHBhcmFtIGNvdW50ICAgIFRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0byBkcmF3LCBzdGFydGluZyBmcm9tIGluZGV4LgogICAgICAqIEBwYXJhbSBwb3MgICAgICBBcnJheSBvZiBbeCx5XSBwb3NpdGlvbnMsIHVzZWQgdG8gcG9zaXRpb24gZWFjaAogICAgICAqICAgICAgICAgICAgICAgICBjaGFyYWN0ZXIKICAgICAgKiBAcGFyYW0gcGFpbnQgICAgVGhlIHBhaW50IHVzZWQgZm9yIHRoZSB0ZXh0IChlLmcuIGNvbG9yLCBzaXplLCBzdHlsZSkKKyAgICAgKgorICAgICAqIEBkZXByZWNhdGVkIFRoaXMgbWV0aG9kIGRvZXMgbm90IHN1cHBvcnQgZ2x5cGggY29tcG9zaXRpb24gYW5kIGRlY29tcG9zaXRpb24gYW5kCisgICAgICogc2hvdWxkIHRoZXJlZm9yZSBub3QgYmUgdXNlZCB0byByZW5kZXIgY29tcGxleCBzY3JpcHRzLiBJdCBhbHNvIGRvZXNuJ3QKKyAgICAgKiBoYW5kbGUgc3VwcGxlbWVudGFyeSBjaGFyYWN0ZXJzIChlZyBlbW9qaSkuCiAgICAgICovCiAgICAgQERlcHJlY2F0ZWQKICAgICBwdWJsaWMgdm9pZCBkcmF3UG9zVGV4dChATm9uTnVsbCBjaGFyW10gdGV4dCwgaW50IGluZGV4LCBpbnQgY291bnQsCkBAIC0xODU2LDEzICsxODcxLDEzIEBACiAgICAgICogRHJhdyB0aGUgdGV4dCBpbiB0aGUgYXJyYXksIHdpdGggZWFjaCBjaGFyYWN0ZXIncyBvcmlnaW4gc3BlY2lmaWVkIGJ5CiAgICAgICogdGhlIHBvcyBhcnJheS4KICAgICAgKgotICAgICAqIFRoaXMgbWV0aG9kIGRvZXMgbm90IHN1cHBvcnQgZ2x5cGggY29tcG9zaXRpb24gYW5kIGRlY29tcG9zaXRpb24gYW5kCi0gICAgICogc2hvdWxkIHRoZXJlZm9yZSBub3QgYmUgdXNlZCB0byByZW5kZXIgY29tcGxleCBzY3JpcHRzLiBJdCBhbHNvIGRvZXNuJ3QKLSAgICAgKiBoYW5kbGUgc3VwcGxlbWVudGFyeSBjaGFyYWN0ZXJzIChlZyBlbW9qaSkuCi0gICAgICoKICAgICAgKiBAcGFyYW0gdGV4dCAgVGhlIHRleHQgdG8gYmUgZHJhd24KICAgICAgKiBAcGFyYW0gcG9zICAgQXJyYXkgb2YgW3gseV0gcG9zaXRpb25zLCB1c2VkIHRvIHBvc2l0aW9uIGVhY2ggY2hhcmFjdGVyCiAgICAgICogQHBhcmFtIHBhaW50IFRoZSBwYWludCB1c2VkIGZvciB0aGUgdGV4dCAoZS5nLiBjb2xvciwgc2l6ZSwgc3R5bGUpCisgICAgICoKKyAgICAgKiBAZGVwcmVjYXRlZCBUaGlzIG1ldGhvZCBkb2VzIG5vdCBzdXBwb3J0IGdseXBoIGNvbXBvc2l0aW9uIGFuZCBkZWNvbXBvc2l0aW9uIGFuZAorICAgICAqIHNob3VsZCB0aGVyZWZvcmUgbm90IGJlIHVzZWQgdG8gcmVuZGVyIGNvbXBsZXggc2NyaXB0cy4gSXQgYWxzbyBkb2Vzbid0CisgICAgICogaGFuZGxlIHN1cHBsZW1lbnRhcnkgY2hhcmFjdGVycyAoZWcgZW1vamkpLgogICAgICAqLwogICAgIEBEZXByZWNhdGVkCiAgICAgcHVibGljIHZvaWQgZHJhd1Bvc1RleHQoQE5vbk51bGwgU3RyaW5nIHRleHQsIEBOb25OdWxsIEBTaXplKG11bHRpcGxlPTIpIGZsb2F0W10gcG9zLApkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0FuaW1hdGVkVmVjdG9yRHJhd2FibGUuamF2YSBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9BbmltYXRlZFZlY3RvckRyYXdhYmxlLmphdmEKaW5kZXggMTg1NzM0NS4uODRjYTU0NiAxMDA2NDQKLS0tIGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0FuaW1hdGVkVmVjdG9yRHJhd2FibGUuamF2YQorKysgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvQW5pbWF0ZWRWZWN0b3JEcmF3YWJsZS5qYXZhCkBAIC0xOSw2ICsxOSw3IEBACiBpbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uQW5pbWF0b3JMaXN0ZW5lckFkYXB0ZXI7CiBpbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uQW5pbWF0b3JTZXQ7CiBpbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uQW5pbWF0b3IuQW5pbWF0b3JMaXN0ZW5lcjsKK2ltcG9ydCBhbmRyb2lkLmFuaW1hdGlvbi5WYWx1ZUFuaW1hdG9yOwogaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5Ob25OdWxsOwogaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLkNvbG9yU3RhdGVMaXN0OwpAQCAtMTQwLDYgKzE0MSwxNSBAQAogICAgIC8qKiBMb2NhbCwgbXV0YWJsZSBhbmltYXRvciBzZXQuICovCiAgICAgcHJpdmF0ZSBmaW5hbCBBbmltYXRvclNldCBtQW5pbWF0b3JTZXQgPSBuZXcgQW5pbWF0b3JTZXQoKTsKIAorCisgICAgcHJpdmF0ZSBmaW5hbCBWYWx1ZUFuaW1hdG9yLkFuaW1hdG9yVXBkYXRlTGlzdGVuZXIgbVVwZGF0ZUxpc3RlbmVyID0KKyAgICAgICAgICAgIG5ldyBWYWx1ZUFuaW1hdG9yLkFuaW1hdG9yVXBkYXRlTGlzdGVuZXIoKSB7CisgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25BbmltYXRpb25VcGRhdGUoVmFsdWVBbmltYXRvciBhbmltYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgaW52YWxpZGF0ZVNlbGYoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworCiAgICAgLyoqCiAgICAgICogVGhlIHJlc291cmNlcyBhZ2FpbnN0IHdoaWNoIHRoaXMgZHJhd2FibGUgd2FzIGNyZWF0ZWQuIFVzZWQgdG8gYXR0ZW1wdAogICAgICAqIHRvIGluZmxhdGUgYW5pbWF0b3JzIGlmIGFwcGx5VGhlbWUoKSBkb2Vzbid0IGdldCBjYWxsZWQuCkBAIC0yMDEsOSArMjExLDYgQEAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBkcmF3KENhbnZhcyBjYW52YXMpIHsKICAgICAgICAgbUFuaW1hdGVkVmVjdG9yU3RhdGUubVZlY3RvckRyYXdhYmxlLmRyYXcoY2FudmFzKTsKLSAgICAgICAgaWYgKGlzU3RhcnRlZCgpKSB7Ci0gICAgICAgICAgICBpbnZhbGlkYXRlU2VsZigpOwotICAgICAgICB9CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCkBAIC00ODYsNiArNDkzLDcgQEAKICAgICAgICAgICogICAgICAgICAgICBhbmltYXRvcnMsIG9yIHtAY29kZSBudWxsfSBpZiBub3QgYXZhaWxhYmxlCiAgICAgICAgICAqLwogICAgICAgICBwdWJsaWMgdm9pZCBwcmVwYXJlTG9jYWxBbmltYXRvcnMoQE5vbk51bGwgQW5pbWF0b3JTZXQgYW5pbWF0b3JTZXQsCisgICAgICAgICAgICAgICAgQE5vbk51bGwgVmFsdWVBbmltYXRvci5BbmltYXRvclVwZGF0ZUxpc3RlbmVyIHVwZGF0ZUxpc3RlbmVyLAogICAgICAgICAgICAgICAgIEBOdWxsYWJsZSBSZXNvdXJjZXMgcmVzKSB7CiAgICAgICAgICAgICAvLyBDaGVjayBmb3IgdW5pbmZsYXRlZCBhbmltYXRvcnMuIFdlIGNhbiByZW1vdmUgdGhpcyBhZnRlciB3ZSBhZGQKICAgICAgICAgICAgIC8vIHN1cHBvcnQgZm9yIEFuaW1hdG9yLmFwcGx5VGhlbWUoKS4gU2VlIGNvbW1lbnRzIGluIGluZmxhdGUoKS4KQEAgLTUxMSw2ICs1MTksMTcgQEAKICAgICAgICAgICAgICAgICAgICAgZmluYWwgQW5pbWF0b3IgbmV4dEFuaW0gPSBwcmVwYXJlTG9jYWxBbmltYXRvcihpKTsKICAgICAgICAgICAgICAgICAgICAgYnVpbGRlci53aXRoKG5leHRBbmltKTsKICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBTZXR1cCBhIHZhbHVlIGFuaW1hdG9yIHRvIGdldCBhbmltYXRpb24gdXBkYXRlIGNhbGxiYWNrcy4KKyAgICAgICAgICAgICAgICBsb25nIHRvdGFsRHVyYXRpb24gPSBhbmltYXRvclNldC5nZXRUb3RhbER1cmF0aW9uKCk7CisgICAgICAgICAgICAgICAgVmFsdWVBbmltYXRvciB1cGRhdGVBbmltID0gVmFsdWVBbmltYXRvci5vZkZsb2F0KDBmLCAxZik7CisgICAgICAgICAgICAgICAgaWYgKHRvdGFsRHVyYXRpb24gPT0gVmFsdWVBbmltYXRvci5EVVJBVElPTl9JTkZJTklURSkgeworICAgICAgICAgICAgICAgICAgICB1cGRhdGVBbmltLnNldFJlcGVhdENvdW50KFZhbHVlQW5pbWF0b3IuSU5GSU5JVEUpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUFuaW0uc2V0RHVyYXRpb24odG90YWxEdXJhdGlvbik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHVwZGF0ZUFuaW0uYWRkVXBkYXRlTGlzdGVuZXIodXBkYXRlTGlzdGVuZXIpOworICAgICAgICAgICAgICAgIGJ1aWxkZXIud2l0aCh1cGRhdGVBbmltKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC02MDMsNyArNjIyLDcgQEAKICAgICBATm9uTnVsbAogICAgIHByaXZhdGUgdm9pZCBlbnN1cmVBbmltYXRvclNldCgpIHsKICAgICAgICAgaWYgKCFtSGFzQW5pbWF0b3JTZXQpIHsKLSAgICAgICAgICAgIG1BbmltYXRlZFZlY3RvclN0YXRlLnByZXBhcmVMb2NhbEFuaW1hdG9ycyhtQW5pbWF0b3JTZXQsIG1SZXMpOworICAgICAgICAgICAgbUFuaW1hdGVkVmVjdG9yU3RhdGUucHJlcGFyZUxvY2FsQW5pbWF0b3JzKG1BbmltYXRvclNldCwgbVVwZGF0ZUxpc3RlbmVyLCBtUmVzKTsKICAgICAgICAgICAgIG1IYXNBbmltYXRvclNldCA9IHRydWU7CiAgICAgICAgICAgICBtUmVzID0gbnVsbDsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9JRG9ja0RpdmlkZXJWaXNpYmlsaXR5TGlzdGVuZXIuYWlkbCBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9JY29uLmFpZGwKc2ltaWxhcml0eSBpbmRleCA2NyUKY29weSBmcm9tIGNvcmUvamF2YS9hbmRyb2lkL3ZpZXcvSURvY2tEaXZpZGVyVmlzaWJpbGl0eUxpc3RlbmVyLmFpZGwKY29weSB0byBncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvSWNvbi5haWRsCmluZGV4IGE3ZDVjZGEuLmI4MmNmYzQgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvSURvY2tEaXZpZGVyVmlzaWJpbGl0eUxpc3RlbmVyLmFpZGwKKysrIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0ljb24uYWlkbApAQCAtMTQsMTQgKzE0LDYgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKLXBhY2thZ2UgYW5kcm9pZC52aWV3OworcGFja2FnZSBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlOwogCi0vKioKLSAgKiBMaXN0ZW5lciBmb3Igc2hvd2luZy9oaWRpbmcgb2YgdGhlIGRvY2sgZGl2aWRlci4gV2lsbCBmaXJlIHdoZW4gYW4gYXBwIGlzIHNob3duIGluIHNpZGUgYnkgc2lkZQotICAqIG1vZGUgYW5kIGEgZGl2aWRlciBzaG91bGQgYmUgc2hvd24uCi0gICoKLSAgKiBAaGlkZQotICAqLwotb25ld2F5IGludGVyZmFjZSBJRG9ja0RpdmlkZXJWaXNpYmlsaXR5TGlzdGVuZXIgewotICAgIHZvaWQgb25Eb2NrRGl2aWRlclZpc2liaWxpdHlDaGFuZ2VkKGJvb2xlYW4gdmlzaWJsZSk7Ci19CitwYXJjZWxhYmxlIEljb247CmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvVmVjdG9yRHJhd2FibGUuamF2YSBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9WZWN0b3JEcmF3YWJsZS5qYXZhCmluZGV4IDM3NjFhOTkuLjY1MjYwMjEgMTAwNjQ0Ci0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9WZWN0b3JEcmF3YWJsZS5qYXZhCisrKyBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9WZWN0b3JEcmF3YWJsZS5qYXZhCkBAIC0yMCwxNSArMjAsOSBAQAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzLlRoZW1lOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuVHlwZWRBcnJheTsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcDsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNhbnZhczsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNvbG9yOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQ29sb3JGaWx0ZXI7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5JbnNldHM7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5NYXRyaXg7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5QYWludDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBhdGg7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5QYXRoTWVhc3VyZTsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBpeGVsRm9ybWF0OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUG9ydGVyRHVmZkNvbG9yRmlsdGVyOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdDsKQEAgLTM4LDcgKzMyLDYgQEAKIGltcG9ydCBhbmRyb2lkLnV0aWwuRGlzcGxheU1ldHJpY3M7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxheW91dERpcmVjdGlvbjsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotaW1wb3J0IGFuZHJvaWQudXRpbC5NYXRoVXRpbHM7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlBhdGhQYXJzZXI7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlhtbDsKIApAQCAtNDgsNiArNDEsOCBAQAogaW1wb3J0IG9yZy54bWxwdWxsLnYxLlhtbFB1bGxQYXJzZXJFeGNlcHRpb247CiAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7CitpbXBvcnQgamF2YS5uaW8uQnl0ZU9yZGVyOwogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLlN0YWNrOwogCkBAIC0xOTYsMjEgKzE5MSw2IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNIQVBFX1BBVEggPSAicGF0aCI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNIQVBFX1ZFQ1RPUiA9ICJ2ZWN0b3IiOwogCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IExJTkVDQVBfQlVUVCA9IDA7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IExJTkVDQVBfUk9VTkQgPSAxOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBMSU5FQ0FQX1NRVUFSRSA9IDI7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTElORUpPSU5fTUlURVIgPSAwOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBMSU5FSk9JTl9ST1VORCA9IDE7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IExJTkVKT0lOX0JFVkVMID0gMjsKLQotICAgIC8vIENhcCB0aGUgYml0bWFwIHNpemUsIHN1Y2ggdGhhdCBpdCB3b24ndCBodXJ0IHRoZSBwZXJmb3JtYW5jZSB0b28gbXVjaAotICAgIC8vIGFuZCBpdCB3b24ndCBjcmFzaCBkdWUgdG8gYSB2ZXJ5IGxhcmdlIHNjYWxlLgotICAgIC8vIFRoZSBkcmF3YWJsZSB3aWxsIGxvb2sgYmx1cnJ5IGFib3ZlIHRoaXMgc2l6ZS4KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX0NBQ0hFRF9CSVRNQVBfU0laRSA9IDIwNDg7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERCR19WRUNUT1JfRFJBV0FCTEUgPSBmYWxzZTsKLQogICAgIHByaXZhdGUgVmVjdG9yRHJhd2FibGVTdGF0ZSBtVmVjdG9yU3RhdGU7CiAKICAgICBwcml2YXRlIFBvcnRlckR1ZmZDb2xvckZpbHRlciBtVGludEZpbHRlcjsKQEAgLTIxOCwxMCArMTk4LDYgQEAKIAogICAgIHByaXZhdGUgYm9vbGVhbiBtTXV0YXRlZDsKIAotICAgIC8vIEFuaW1hdGVkVmVjdG9yRHJhd2FibGUgbmVlZHMgdG8gdHVybiBvZmYgdGhlIGNhY2hlIGFsbCB0aGUgdGltZSwgb3RoZXJ3aXNlLAotICAgIC8vIGNhY2hpbmcgdGhlIGJpdG1hcCBieSBkZWZhdWx0IGlzIGFsbG93ZWQuCi0gICAgcHJpdmF0ZSBib29sZWFuIG1BbGxvd0NhY2hpbmcgPSB0cnVlOwotCiAgICAgLyoqIFRoZSBkZW5zaXR5IG9mIHRoZSBkaXNwbGF5IG9uIHdoaWNoIHRoaXMgZHJhd2FibGUgd2lsbCBiZSByZW5kZXJlZC4gKi8KICAgICBwcml2YXRlIGludCBtVGFyZ2V0RGVuc2l0eTsKIApAQCAtMjM1LDggKzIxMSw2IEBACiAgICAgcHJpdmF0ZSBib29sZWFuIG1EcGlTY2FsZWREaXJ0eSA9IHRydWU7CiAKICAgICAvLyBUZW1wIHZhcmlhYmxlLCBvbmx5IGZvciBzYXZpbmcgIm5ldyIgb3BlcmF0aW9uIGF0IHRoZSBkcmF3KCkgdGltZS4KLSAgICBwcml2YXRlIGZpbmFsIGZsb2F0W10gbVRtcEZsb2F0cyA9IG5ldyBmbG9hdFs5XTsKLSAgICBwcml2YXRlIGZpbmFsIE1hdHJpeCBtVG1wTWF0cml4ID0gbmV3IE1hdHJpeCgpOwogICAgIHByaXZhdGUgZmluYWwgUmVjdCBtVG1wQm91bmRzID0gbmV3IFJlY3QoKTsKIAogICAgIHB1YmxpYyBWZWN0b3JEcmF3YWJsZSgpIHsKQEAgLTI0OSw3ICsyMjMsNiBAQAogICAgICAqLwogICAgIHByaXZhdGUgVmVjdG9yRHJhd2FibGUoQE5vbk51bGwgVmVjdG9yRHJhd2FibGVTdGF0ZSBzdGF0ZSwgQE51bGxhYmxlIFJlc291cmNlcyByZXMpIHsKICAgICAgICAgbVZlY3RvclN0YXRlID0gc3RhdGU7Ci0KICAgICAgICAgdXBkYXRlTG9jYWxTdGF0ZShyZXMpOwogICAgIH0KIApAQCAtMjYyLDcgKzIzNSw3IEBACiAgICAgICogICAgICAgICAgICBkaXNwbGF5ZWQsIG9yIHtAY29kZSBudWxsfSB0byB1c2UgdGhlIGNvbnN0YW50IHN0YXRlIGRlZmF1bHRzCiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZUxvY2FsU3RhdGUoUmVzb3VyY2VzIHJlcykgewotICAgICAgICBmaW5hbCBpbnQgZGVuc2l0eSA9IERyYXdhYmxlLnJlc29sdmVEZW5zaXR5KHJlcywgbVZlY3RvclN0YXRlLm1WUGF0aFJlbmRlcmVyLm1EZW5zaXR5KTsKKyAgICAgICAgZmluYWwgaW50IGRlbnNpdHkgPSBEcmF3YWJsZS5yZXNvbHZlRGVuc2l0eShyZXMsIG1WZWN0b3JTdGF0ZS5tRGVuc2l0eSk7CiAgICAgICAgIGlmIChtVGFyZ2V0RGVuc2l0eSAhPSBkZW5zaXR5KSB7CiAgICAgICAgICAgICBtVGFyZ2V0RGVuc2l0eSA9IGRlbnNpdHk7CiAgICAgICAgICAgICBtRHBpU2NhbGVkRGlydHkgPSB0cnVlOwpAQCAtMjg5LDcgKzI2Miw3IEBACiAgICAgfQogCiAgICAgT2JqZWN0IGdldFRhcmdldEJ5TmFtZShTdHJpbmcgbmFtZSkgewotICAgICAgICByZXR1cm4gbVZlY3RvclN0YXRlLm1WUGF0aFJlbmRlcmVyLm1WR1RhcmdldHNNYXAuZ2V0KG5hbWUpOworICAgICAgICByZXR1cm4gbVZlY3RvclN0YXRlLm1WR1RhcmdldHNNYXAuZ2V0KG5hbWUpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpAQCAtMzEwLDYxICsyODMsMjMgQEAKIAogICAgICAgICAvLyBDb2xvciBmaWx0ZXJzIGFsd2F5cyBvdmVycmlkZSB0aW50IGZpbHRlcnMuCiAgICAgICAgIGZpbmFsIENvbG9yRmlsdGVyIGNvbG9yRmlsdGVyID0gKG1Db2xvckZpbHRlciA9PSBudWxsID8gbVRpbnRGaWx0ZXIgOiBtQ29sb3JGaWx0ZXIpOwotCi0gICAgICAgIC8vIFRoZSBpbWFnZVZpZXcgY2FuIHNjYWxlIHRoZSBjYW52YXMgaW4gZGlmZmVyZW50IHdheXMsIGluIG9yZGVyIHRvCi0gICAgICAgIC8vIGF2b2lkIGJsdXJyeSBzY2FsaW5nLCB3ZSBoYXZlIHRvIGRyYXcgaW50byBhIGJpdG1hcCB3aXRoIGV4YWN0IHBpeGVsCi0gICAgICAgIC8vIHNpemUgZmlyc3QuIFRoaXMgYml0bWFwIHNpemUgaXMgZGV0ZXJtaW5lZCBieSB0aGUgYm91bmRzIGFuZCB0aGUKLSAgICAgICAgLy8gY2FudmFzIHNjYWxlLgotICAgICAgICBjYW52YXMuZ2V0TWF0cml4KG1UbXBNYXRyaXgpOwotICAgICAgICBtVG1wTWF0cml4LmdldFZhbHVlcyhtVG1wRmxvYXRzKTsKLSAgICAgICAgZmxvYXQgY2FudmFzU2NhbGVYID0gTWF0aC5hYnMobVRtcEZsb2F0c1tNYXRyaXguTVNDQUxFX1hdKTsKLSAgICAgICAgZmxvYXQgY2FudmFzU2NhbGVZID0gTWF0aC5hYnMobVRtcEZsb2F0c1tNYXRyaXguTVNDQUxFX1ldKTsKLSAgICAgICAgaW50IHNjYWxlZFdpZHRoID0gKGludCkgKG1UbXBCb3VuZHMud2lkdGgoKSAqIGNhbnZhc1NjYWxlWCk7Ci0gICAgICAgIGludCBzY2FsZWRIZWlnaHQgPSAoaW50KSAobVRtcEJvdW5kcy5oZWlnaHQoKSAqIGNhbnZhc1NjYWxlWSk7Ci0gICAgICAgIHNjYWxlZFdpZHRoID0gTWF0aC5taW4oTUFYX0NBQ0hFRF9CSVRNQVBfU0laRSwgc2NhbGVkV2lkdGgpOwotICAgICAgICBzY2FsZWRIZWlnaHQgPSBNYXRoLm1pbihNQVhfQ0FDSEVEX0JJVE1BUF9TSVpFLCBzY2FsZWRIZWlnaHQpOwotCi0gICAgICAgIGlmIChzY2FsZWRXaWR0aCA8PSAwIHx8IHNjYWxlZEhlaWdodCA8PSAwKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBmaW5hbCBpbnQgc2F2ZUNvdW50ID0gY2FudmFzLnNhdmUoKTsKLSAgICAgICAgY2FudmFzLnRyYW5zbGF0ZShtVG1wQm91bmRzLmxlZnQsIG1UbXBCb3VuZHMudG9wKTsKLQotICAgICAgICAvLyBIYW5kbGUgUlRMIG1pcnJvcmluZy4KLSAgICAgICAgZmluYWwgYm9vbGVhbiBuZWVkTWlycm9yaW5nID0gbmVlZE1pcnJvcmluZygpOwotICAgICAgICBpZiAobmVlZE1pcnJvcmluZykgewotICAgICAgICAgICAgY2FudmFzLnRyYW5zbGF0ZShtVG1wQm91bmRzLndpZHRoKCksIDApOwotICAgICAgICAgICAgY2FudmFzLnNjYWxlKC0xLjBmLCAxLjBmKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIGNhbnZhcyBoYXMgYmVlbiB0cmFuc2xhdGVkIHRvIHRoZSByaWdodCBwb3NpdGlvbi4KLSAgICAgICAgLy8gQW5kIHdlIHVzZSB0aGlzIGJvdW5kIGZvciB0aGUgZGVzdGluYXRpb24gcmVjdCBmb3IgdGhlIGRyYXdCaXRtYXAsIHNvCi0gICAgICAgIC8vIHdlIG9mZnNldCB0byAoMCwgMCk7Ci0gICAgICAgIG1UbXBCb3VuZHMub2Zmc2V0VG8oMCwgMCk7Ci0KLSAgICAgICAgbVZlY3RvclN0YXRlLmNyZWF0ZUNhY2hlZEJpdG1hcElmTmVlZGVkKHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQpOwotICAgICAgICBpZiAoIW1BbGxvd0NhY2hpbmcpIHsKLSAgICAgICAgICAgIG1WZWN0b3JTdGF0ZS51cGRhdGVDYWNoZWRCaXRtYXAoc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIW1WZWN0b3JTdGF0ZS5jYW5SZXVzZUNhY2hlKCkpIHsKLSAgICAgICAgICAgICAgICBtVmVjdG9yU3RhdGUudXBkYXRlQ2FjaGVkQml0bWFwKHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQpOwotICAgICAgICAgICAgICAgIG1WZWN0b3JTdGF0ZS51cGRhdGVDYWNoZVN0YXRlcygpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIG1WZWN0b3JTdGF0ZS5kcmF3Q2FjaGVkQml0bWFwV2l0aFJvb3RBbHBoYShjYW52YXMsIGNvbG9yRmlsdGVyLCBtVG1wQm91bmRzKTsKLSAgICAgICAgY2FudmFzLnJlc3RvcmVUb0NvdW50KHNhdmVDb3VudCk7CisgICAgICAgIGZpbmFsIGxvbmcgY29sb3JGaWx0ZXJOYXRpdmVJbnN0YW5jZSA9IGNvbG9yRmlsdGVyID09IG51bGwgPyAwIDoKKyAgICAgICAgICAgICAgICBjb2xvckZpbHRlci5uYXRpdmVfaW5zdGFuY2U7CisgICAgICAgIGJvb2xlYW4gY2FuUmV1c2VDYWNoZSA9IG1WZWN0b3JTdGF0ZS5jYW5SZXVzZUNhY2hlKCk7CisgICAgICAgIG5EcmF3KG1WZWN0b3JTdGF0ZS5nZXROYXRpdmVSZW5kZXJlcigpLCBjYW52YXMuZ2V0TmF0aXZlQ2FudmFzV3JhcHBlcigpLAorICAgICAgICAgICAgICAgIGNvbG9yRmlsdGVyTmF0aXZlSW5zdGFuY2UsIG1UbXBCb3VuZHMsIG5lZWRNaXJyb3JpbmcoKSwKKyAgICAgICAgICAgICAgICBjYW5SZXVzZUNhY2hlKTsKICAgICB9CiAKKwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBpbnQgZ2V0QWxwaGEoKSB7Ci0gICAgICAgIHJldHVybiBtVmVjdG9yU3RhdGUubVZQYXRoUmVuZGVyZXIuZ2V0Um9vdEFscGhhKCk7CisgICAgICAgIHJldHVybiAoaW50KSAobVZlY3RvclN0YXRlLmdldEFscGhhKCkgKiAyNTUpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIHNldEFscGhhKGludCBhbHBoYSkgewotICAgICAgICBpZiAobVZlY3RvclN0YXRlLm1WUGF0aFJlbmRlcmVyLmdldFJvb3RBbHBoYSgpICE9IGFscGhhKSB7Ci0gICAgICAgICAgICBtVmVjdG9yU3RhdGUubVZQYXRoUmVuZGVyZXIuc2V0Um9vdEFscGhhKGFscGhhKTsKKyAgICAgICAgaWYgKG1WZWN0b3JTdGF0ZS5zZXRBbHBoYShhbHBoYSAvIDI1NWYpKSB7CiAgICAgICAgICAgICBpbnZhbGlkYXRlU2VsZigpOwogICAgICAgICB9CiAgICAgfQpAQCAtNDEwLDcgKzM0NSw3IEBACiAgICAgICAgIGJvb2xlYW4gY2hhbmdlZCA9IGZhbHNlOwogCiAgICAgICAgIGZpbmFsIFZlY3RvckRyYXdhYmxlU3RhdGUgc3RhdGUgPSBtVmVjdG9yU3RhdGU7Ci0gICAgICAgIGlmIChzdGF0ZS5tVlBhdGhSZW5kZXJlciAhPSBudWxsICYmIHN0YXRlLm1WUGF0aFJlbmRlcmVyLm9uU3RhdGVDaGFuZ2Uoc3RhdGVTZXQpKSB7CisgICAgICAgIGlmIChzdGF0ZS5vblN0YXRlQ2hhbmdlKHN0YXRlU2V0KSkgewogICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICBzdGF0ZS5tQ2FjaGVEaXJ0eSA9IHRydWU7CiAgICAgICAgIH0KQEAgLTQ1NywxNiArMzkyLDE1IEBACiAgICAgICogZnJvbSB0aGUgc291cmNlIGRlbnNpdHkgYWdhaW5zdCB3aGljaCB0aGUgY29uc3RhbnQgc3RhdGUgd2FzIGxvYWRlZC4KICAgICAgKi8KICAgICB2b2lkIGNvbXB1dGVWZWN0b3JTaXplKCkgewotICAgICAgICBmaW5hbCBWUGF0aFJlbmRlcmVyIHBhdGhSZW5kZXJlciA9IG1WZWN0b3JTdGF0ZS5tVlBhdGhSZW5kZXJlcjsKLSAgICAgICAgZmluYWwgSW5zZXRzIG9wdGljYWxJbnNldHMgPSBwYXRoUmVuZGVyZXIubU9wdGljYWxJbnNldHM7CisgICAgICAgIGZpbmFsIEluc2V0cyBvcHRpY2FsSW5zZXRzID0gbVZlY3RvclN0YXRlLm1PcHRpY2FsSW5zZXRzOwogCi0gICAgICAgIGZpbmFsIGludCBzb3VyY2VEZW5zaXR5ID0gcGF0aFJlbmRlcmVyLm1EZW5zaXR5OworICAgICAgICBmaW5hbCBpbnQgc291cmNlRGVuc2l0eSA9IG1WZWN0b3JTdGF0ZS5tRGVuc2l0eTsKICAgICAgICAgZmluYWwgaW50IHRhcmdldERlbnNpdHkgPSBtVGFyZ2V0RGVuc2l0eTsKICAgICAgICAgaWYgKHRhcmdldERlbnNpdHkgIT0gc291cmNlRGVuc2l0eSkgewogICAgICAgICAgICAgbURwaVNjYWxlZFdpZHRoID0gRHJhd2FibGUuc2NhbGVGcm9tRGVuc2l0eSgKLSAgICAgICAgICAgICAgICAgICAgKGludCkgcGF0aFJlbmRlcmVyLm1CYXNlV2lkdGgsIHNvdXJjZURlbnNpdHksIHRhcmdldERlbnNpdHksIHRydWUpOworICAgICAgICAgICAgICAgICAgICAoaW50KSBtVmVjdG9yU3RhdGUubUJhc2VXaWR0aCwgc291cmNlRGVuc2l0eSwgdGFyZ2V0RGVuc2l0eSwgdHJ1ZSk7CiAgICAgICAgICAgICBtRHBpU2NhbGVkSGVpZ2h0ID0gRHJhd2FibGUuc2NhbGVGcm9tRGVuc2l0eSgKLSAgICAgICAgICAgICAgICAgICAgKGludCkgcGF0aFJlbmRlcmVyLm1CYXNlSGVpZ2h0LHNvdXJjZURlbnNpdHksIHRhcmdldERlbnNpdHksIHRydWUpOworICAgICAgICAgICAgICAgICAgICAoaW50KSBtVmVjdG9yU3RhdGUubUJhc2VIZWlnaHQsc291cmNlRGVuc2l0eSwgdGFyZ2V0RGVuc2l0eSwgdHJ1ZSk7CiAgICAgICAgICAgICBmaW5hbCBpbnQgbGVmdCA9IERyYXdhYmxlLnNjYWxlRnJvbURlbnNpdHkoCiAgICAgICAgICAgICAgICAgICAgIG9wdGljYWxJbnNldHMubGVmdCwgc291cmNlRGVuc2l0eSwgdGFyZ2V0RGVuc2l0eSwgZmFsc2UpOwogICAgICAgICAgICAgZmluYWwgaW50IHJpZ2h0ID0gRHJhd2FibGUuc2NhbGVGcm9tRGVuc2l0eSgKQEAgLTQ3Nyw4ICs0MTEsOCBAQAogICAgICAgICAgICAgICAgICAgICBvcHRpY2FsSW5zZXRzLmJvdHRvbSwgc291cmNlRGVuc2l0eSwgdGFyZ2V0RGVuc2l0eSwgZmFsc2UpOwogICAgICAgICAgICAgbURwaVNjYWxlZEluc2V0cyA9IEluc2V0cy5vZihsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbURwaVNjYWxlZFdpZHRoID0gKGludCkgcGF0aFJlbmRlcmVyLm1CYXNlV2lkdGg7Ci0gICAgICAgICAgICBtRHBpU2NhbGVkSGVpZ2h0ID0gKGludCkgcGF0aFJlbmRlcmVyLm1CYXNlSGVpZ2h0OworICAgICAgICAgICAgbURwaVNjYWxlZFdpZHRoID0gKGludCkgbVZlY3RvclN0YXRlLm1CYXNlV2lkdGg7CisgICAgICAgICAgICBtRHBpU2NhbGVkSGVpZ2h0ID0gKGludCkgbVZlY3RvclN0YXRlLm1CYXNlSGVpZ2h0OwogICAgICAgICAgICAgbURwaVNjYWxlZEluc2V0cyA9IG9wdGljYWxJbnNldHM7CiAgICAgICAgIH0KIApAQCAtNDk5LDggKzQzMyw3IEBACiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBmaW5hbCBWUGF0aFJlbmRlcmVyIHBhdGggPSBzdGF0ZS5tVlBhdGhSZW5kZXJlcjsKLSAgICAgICAgZmluYWwgYm9vbGVhbiBjaGFuZ2VkRGVuc2l0eSA9IHBhdGguc2V0RGVuc2l0eSgKKyAgICAgICAgZmluYWwgYm9vbGVhbiBjaGFuZ2VkRGVuc2l0eSA9IG1WZWN0b3JTdGF0ZS5zZXREZW5zaXR5KAogICAgICAgICAgICAgICAgIERyYXdhYmxlLnJlc29sdmVEZW5zaXR5KHQuZ2V0UmVzb3VyY2VzKCksIDApKTsKICAgICAgICAgbURwaVNjYWxlZERpcnR5IHw9IGNoYW5nZWREZW5zaXR5OwogCkBAIC01MTEsNyArNDQ0LDcgQEAKICAgICAgICAgICAgICAgICBzdGF0ZS5tQ2FjaGVEaXJ0eSA9IHRydWU7CiAgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGVGcm9tVHlwZWRBcnJheShhKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFhtbFB1bGxQYXJzZXJFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIHJldGhyb3dBc1J1bnRpbWVFeGNlcHRpb24oZSk7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7CiAgICAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgICAgIGEucmVjeWNsZSgpOwogICAgICAgICAgICAgfQpAQCAtNTI1LDggKzQ1OCw4IEBACiAgICAgICAgICAgICBzdGF0ZS5tVGludCA9IHN0YXRlLm1UaW50Lm9idGFpbkZvclRoZW1lKHQpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHBhdGggIT0gbnVsbCAmJiBwYXRoLmNhbkFwcGx5VGhlbWUoKSkgewotICAgICAgICAgICAgcGF0aC5hcHBseVRoZW1lKHQpOworICAgICAgICBpZiAobVZlY3RvclN0YXRlICE9IG51bGwgJiYgbVZlY3RvclN0YXRlLmNhbkFwcGx5VGhlbWUoKSkgeworICAgICAgICAgICAgbVZlY3RvclN0YXRlLmFwcGx5VGhlbWUodCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBVcGRhdGUgbG9jYWwgcHJvcGVydGllcy4KQEAgLTU0MCwxNyArNDczLDE3IEBACiAgICAgICogQGhpZGUKICAgICAgKi8KICAgICBwdWJsaWMgZmxvYXQgZ2V0UGl4ZWxTaXplKCkgewotICAgICAgICBpZiAobVZlY3RvclN0YXRlID09IG51bGwgfHwgbVZlY3RvclN0YXRlLm1WUGF0aFJlbmRlcmVyID09IG51bGwgfHwKLSAgICAgICAgICAgICAgICBtVmVjdG9yU3RhdGUubVZQYXRoUmVuZGVyZXIubUJhc2VXaWR0aCA9PSAwIHx8Ci0gICAgICAgICAgICAgICAgbVZlY3RvclN0YXRlLm1WUGF0aFJlbmRlcmVyLm1CYXNlSGVpZ2h0ID09IDAgfHwKLSAgICAgICAgICAgICAgICBtVmVjdG9yU3RhdGUubVZQYXRoUmVuZGVyZXIubVZpZXdwb3J0SGVpZ2h0ID09IDAgfHwKLSAgICAgICAgICAgICAgICBtVmVjdG9yU3RhdGUubVZQYXRoUmVuZGVyZXIubVZpZXdwb3J0V2lkdGggPT0gMCkgeworICAgICAgICBpZiAobVZlY3RvclN0YXRlID09IG51bGwgfHwKKyAgICAgICAgICAgICAgICBtVmVjdG9yU3RhdGUubUJhc2VXaWR0aCA9PSAwIHx8CisgICAgICAgICAgICAgICAgbVZlY3RvclN0YXRlLm1CYXNlSGVpZ2h0ID09IDAgfHwKKyAgICAgICAgICAgICAgICBtVmVjdG9yU3RhdGUubVZpZXdwb3J0SGVpZ2h0ID09IDAgfHwKKyAgICAgICAgICAgICAgICBtVmVjdG9yU3RhdGUubVZpZXdwb3J0V2lkdGggPT0gMCkgewogICAgICAgICAgICAgcmV0dXJuIDE7IC8vIGZhbGwgYmFjayB0byAxOjEgcGl4ZWwgbWFwcGluZy4KICAgICAgICAgfQotICAgICAgICBmbG9hdCBpbnRyaW5zaWNXaWR0aCA9IG1WZWN0b3JTdGF0ZS5tVlBhdGhSZW5kZXJlci5tQmFzZVdpZHRoOwotICAgICAgICBmbG9hdCBpbnRyaW5zaWNIZWlnaHQgPSBtVmVjdG9yU3RhdGUubVZQYXRoUmVuZGVyZXIubUJhc2VIZWlnaHQ7Ci0gICAgICAgIGZsb2F0IHZpZXdwb3J0V2lkdGggPSBtVmVjdG9yU3RhdGUubVZQYXRoUmVuZGVyZXIubVZpZXdwb3J0V2lkdGg7Ci0gICAgICAgIGZsb2F0IHZpZXdwb3J0SGVpZ2h0ID0gbVZlY3RvclN0YXRlLm1WUGF0aFJlbmRlcmVyLm1WaWV3cG9ydEhlaWdodDsKKyAgICAgICAgZmxvYXQgaW50cmluc2ljV2lkdGggPSBtVmVjdG9yU3RhdGUubUJhc2VXaWR0aDsKKyAgICAgICAgZmxvYXQgaW50cmluc2ljSGVpZ2h0ID0gbVZlY3RvclN0YXRlLm1CYXNlSGVpZ2h0OworICAgICAgICBmbG9hdCB2aWV3cG9ydFdpZHRoID0gbVZlY3RvclN0YXRlLm1WaWV3cG9ydFdpZHRoOworICAgICAgICBmbG9hdCB2aWV3cG9ydEhlaWdodCA9IG1WZWN0b3JTdGF0ZS5tVmlld3BvcnRIZWlnaHQ7CiAgICAgICAgIGZsb2F0IHNjYWxlWCA9IHZpZXdwb3J0V2lkdGggLyBpbnRyaW5zaWNXaWR0aDsKICAgICAgICAgZmxvYXQgc2NhbGVZID0gdmlld3BvcnRIZWlnaHQgLyBpbnRyaW5zaWNIZWlnaHQ7CiAgICAgICAgIHJldHVybiBNYXRoLm1pbihzY2FsZVgsIHNjYWxlWSk7CkBAIC01ODIsMjAgKzUxNSwyMCBAQAogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9CiAKLSAgICBwcml2YXRlIHN0YXRpYyBpbnQgYXBwbHlBbHBoYShpbnQgY29sb3IsIGZsb2F0IGFscGhhKSB7Ci0gICAgICAgIGludCBhbHBoYUJ5dGVzID0gQ29sb3IuYWxwaGEoY29sb3IpOwotICAgICAgICBjb2xvciAmPSAweDAwRkZGRkZGOwotICAgICAgICBjb2xvciB8PSAoKGludCkgKGFscGhhQnl0ZXMgKiBhbHBoYSkpIDw8IDI0OwotICAgICAgICByZXR1cm4gY29sb3I7Ci0gICAgfQotCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgaW5mbGF0ZShATm9uTnVsbCBSZXNvdXJjZXMgciwgQE5vbk51bGwgWG1sUHVsbFBhcnNlciBwYXJzZXIsCiAgICAgICAgICAgICBATm9uTnVsbCBBdHRyaWJ1dGVTZXQgYXR0cnMsIEBOdWxsYWJsZSBUaGVtZSB0aGVtZSkKICAgICAgICAgICAgIHRocm93cyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CisgICAgICAgIGlmIChtVmVjdG9yU3RhdGUubVJvb3RHcm91cCAhPSBudWxsIHx8IG1WZWN0b3JTdGF0ZS5tTmF0aXZlUmVuZGVyZXJQdHIgIT0gMCkgeworICAgICAgICAgICAgLy8gVGhpcyBWRCBoYXMgYmVlbiB1c2VkIHRvIGRpc3BsYXkgb3RoZXIgVkQgcmVzb3VyY2UgY29udGVudCwgY2xlYW4gdXAuCisgICAgICAgICAgICBtVmVjdG9yU3RhdGUubVJvb3RHcm91cCA9IG5ldyBWR3JvdXAoKTsKKyAgICAgICAgICAgIGlmIChtVmVjdG9yU3RhdGUubU5hdGl2ZVJlbmRlcmVyUHRyICE9IDApIHsKKyAgICAgICAgICAgICAgICBuRGVzdHJveVJlbmRlcmVyKG1WZWN0b3JTdGF0ZS5tTmF0aXZlUmVuZGVyZXJQdHIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbVZlY3RvclN0YXRlLm1OYXRpdmVSZW5kZXJlclB0ciA9IG5DcmVhdGVSZW5kZXJlcihtVmVjdG9yU3RhdGUubVJvb3RHcm91cC5tTmF0aXZlUHRyKTsKKyAgICAgICAgfQogICAgICAgICBmaW5hbCBWZWN0b3JEcmF3YWJsZVN0YXRlIHN0YXRlID0gbVZlY3RvclN0YXRlOwotICAgICAgICBzdGF0ZS5tVlBhdGhSZW5kZXJlciA9IG5ldyBWUGF0aFJlbmRlcmVyKCk7Ci0gICAgICAgIHN0YXRlLm1WUGF0aFJlbmRlcmVyLnNldERlbnNpdHkoRHJhd2FibGUucmVzb2x2ZURlbnNpdHkociwgMCkpOworICAgICAgICBzdGF0ZS5zZXREZW5zaXR5KERyYXdhYmxlLnJlc29sdmVEZW5zaXR5KHIsIDApKTsKIAogICAgICAgICBmaW5hbCBUeXBlZEFycmF5IGEgPSBvYnRhaW5BdHRyaWJ1dGVzKHIsIHRoZW1lLCBhdHRycywgUi5zdHlsZWFibGUuVmVjdG9yRHJhd2FibGUpOwogICAgICAgICB1cGRhdGVTdGF0ZUZyb21UeXBlZEFycmF5KGEpOwpAQCAtNjEyLDcgKzU0NSw2IEBACiAKICAgICBwcml2YXRlIHZvaWQgdXBkYXRlU3RhdGVGcm9tVHlwZWRBcnJheShUeXBlZEFycmF5IGEpIHRocm93cyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uIHsKICAgICAgICAgZmluYWwgVmVjdG9yRHJhd2FibGVTdGF0ZSBzdGF0ZSA9IG1WZWN0b3JTdGF0ZTsKLSAgICAgICAgZmluYWwgVlBhdGhSZW5kZXJlciBwYXRoUmVuZGVyZXIgPSBzdGF0ZS5tVlBhdGhSZW5kZXJlcjsKIAogICAgICAgICAvLyBBY2NvdW50IGZvciBhbnkgY29uZmlndXJhdGlvbiBjaGFuZ2VzLgogICAgICAgICBzdGF0ZS5tQ2hhbmdpbmdDb25maWd1cmF0aW9ucyB8PSBhLmdldENoYW5naW5nQ29uZmlndXJhdGlvbnMoKTsKQEAgLTYzMyw2MyArNTY1LDYzIEBACiAgICAgICAgIHN0YXRlLm1BdXRvTWlycm9yZWQgPSBhLmdldEJvb2xlYW4oCiAgICAgICAgICAgICAgICAgUi5zdHlsZWFibGUuVmVjdG9yRHJhd2FibGVfYXV0b01pcnJvcmVkLCBzdGF0ZS5tQXV0b01pcnJvcmVkKTsKIAotICAgICAgICBwYXRoUmVuZGVyZXIubVZpZXdwb3J0V2lkdGggPSBhLmdldEZsb2F0KAotICAgICAgICAgICAgICAgIFIuc3R5bGVhYmxlLlZlY3RvckRyYXdhYmxlX3ZpZXdwb3J0V2lkdGgsIHBhdGhSZW5kZXJlci5tVmlld3BvcnRXaWR0aCk7Ci0gICAgICAgIHBhdGhSZW5kZXJlci5tVmlld3BvcnRIZWlnaHQgPSBhLmdldEZsb2F0KAotICAgICAgICAgICAgICAgIFIuc3R5bGVhYmxlLlZlY3RvckRyYXdhYmxlX3ZpZXdwb3J0SGVpZ2h0LCBwYXRoUmVuZGVyZXIubVZpZXdwb3J0SGVpZ2h0KTsKKyAgICAgICAgZmxvYXQgdmlld3BvcnRXaWR0aCA9IGEuZ2V0RmxvYXQoCisgICAgICAgICAgICAgICAgUi5zdHlsZWFibGUuVmVjdG9yRHJhd2FibGVfdmlld3BvcnRXaWR0aCwgc3RhdGUubVZpZXdwb3J0V2lkdGgpOworICAgICAgICBmbG9hdCB2aWV3cG9ydEhlaWdodCA9IGEuZ2V0RmxvYXQoCisgICAgICAgICAgICAgICAgUi5zdHlsZWFibGUuVmVjdG9yRHJhd2FibGVfdmlld3BvcnRIZWlnaHQsIHN0YXRlLm1WaWV3cG9ydEhlaWdodCk7CisgICAgICAgIHN0YXRlLnNldFZpZXdwb3J0U2l6ZSh2aWV3cG9ydFdpZHRoLCB2aWV3cG9ydEhlaWdodCk7CiAKLSAgICAgICAgaWYgKHBhdGhSZW5kZXJlci5tVmlld3BvcnRXaWR0aCA8PSAwKSB7CisgICAgICAgIGlmIChzdGF0ZS5tVmlld3BvcnRXaWR0aCA8PSAwKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgWG1sUHVsbFBhcnNlckV4Y2VwdGlvbihhLmdldFBvc2l0aW9uRGVzY3JpcHRpb24oKSArCiAgICAgICAgICAgICAgICAgICAgICI8dmVjdG9yPiB0YWcgcmVxdWlyZXMgdmlld3BvcnRXaWR0aCA+IDAiKTsKLSAgICAgICAgfSBlbHNlIGlmIChwYXRoUmVuZGVyZXIubVZpZXdwb3J0SGVpZ2h0IDw9IDApIHsKKyAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS5tVmlld3BvcnRIZWlnaHQgPD0gMCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFhtbFB1bGxQYXJzZXJFeGNlcHRpb24oYS5nZXRQb3NpdGlvbkRlc2NyaXB0aW9uKCkgKwogICAgICAgICAgICAgICAgICAgICAiPHZlY3Rvcj4gdGFnIHJlcXVpcmVzIHZpZXdwb3J0SGVpZ2h0ID4gMCIpOwogICAgICAgICB9CiAKLSAgICAgICAgcGF0aFJlbmRlcmVyLm1CYXNlV2lkdGggPSBhLmdldERpbWVuc2lvbigKLSAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5WZWN0b3JEcmF3YWJsZV93aWR0aCwgcGF0aFJlbmRlcmVyLm1CYXNlV2lkdGgpOwotICAgICAgICBwYXRoUmVuZGVyZXIubUJhc2VIZWlnaHQgPSBhLmdldERpbWVuc2lvbigKLSAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5WZWN0b3JEcmF3YWJsZV9oZWlnaHQsIHBhdGhSZW5kZXJlci5tQmFzZUhlaWdodCk7CisgICAgICAgIHN0YXRlLm1CYXNlV2lkdGggPSBhLmdldERpbWVuc2lvbigKKyAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5WZWN0b3JEcmF3YWJsZV93aWR0aCwgc3RhdGUubUJhc2VXaWR0aCk7CisgICAgICAgIHN0YXRlLm1CYXNlSGVpZ2h0ID0gYS5nZXREaW1lbnNpb24oCisgICAgICAgICAgICAgICAgUi5zdHlsZWFibGUuVmVjdG9yRHJhd2FibGVfaGVpZ2h0LCBzdGF0ZS5tQmFzZUhlaWdodCk7CiAKLSAgICAgICAgaWYgKHBhdGhSZW5kZXJlci5tQmFzZVdpZHRoIDw9IDApIHsKKyAgICAgICAgaWYgKHN0YXRlLm1CYXNlV2lkdGggPD0gMCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFhtbFB1bGxQYXJzZXJFeGNlcHRpb24oYS5nZXRQb3NpdGlvbkRlc2NyaXB0aW9uKCkgKwogICAgICAgICAgICAgICAgICAgICAiPHZlY3Rvcj4gdGFnIHJlcXVpcmVzIHdpZHRoID4gMCIpOwotICAgICAgICB9IGVsc2UgaWYgKHBhdGhSZW5kZXJlci5tQmFzZUhlaWdodCA8PSAwKSB7CisgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUubUJhc2VIZWlnaHQgPD0gMCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFhtbFB1bGxQYXJzZXJFeGNlcHRpb24oYS5nZXRQb3NpdGlvbkRlc2NyaXB0aW9uKCkgKwogICAgICAgICAgICAgICAgICAgICAiPHZlY3Rvcj4gdGFnIHJlcXVpcmVzIGhlaWdodCA+IDAiKTsKICAgICAgICAgfQogCiAgICAgICAgIGZpbmFsIGludCBpbnNldExlZnQgPSBhLmdldERpbWVuc2lvblBpeGVsT2Zmc2V0KAotICAgICAgICAgICAgICAgIFIuc3R5bGVhYmxlLlZlY3RvckRyYXdhYmxlX29wdGljYWxJbnNldExlZnQsIHBhdGhSZW5kZXJlci5tT3B0aWNhbEluc2V0cy5sZWZ0KTsKKyAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5WZWN0b3JEcmF3YWJsZV9vcHRpY2FsSW5zZXRMZWZ0LCBzdGF0ZS5tT3B0aWNhbEluc2V0cy5sZWZ0KTsKICAgICAgICAgZmluYWwgaW50IGluc2V0VG9wID0gYS5nZXREaW1lbnNpb25QaXhlbE9mZnNldCgKLSAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5WZWN0b3JEcmF3YWJsZV9vcHRpY2FsSW5zZXRUb3AsIHBhdGhSZW5kZXJlci5tT3B0aWNhbEluc2V0cy50b3ApOworICAgICAgICAgICAgICAgIFIuc3R5bGVhYmxlLlZlY3RvckRyYXdhYmxlX29wdGljYWxJbnNldFRvcCwgc3RhdGUubU9wdGljYWxJbnNldHMudG9wKTsKICAgICAgICAgZmluYWwgaW50IGluc2V0UmlnaHQgPSBhLmdldERpbWVuc2lvblBpeGVsT2Zmc2V0KAotICAgICAgICAgICAgICAgIFIuc3R5bGVhYmxlLlZlY3RvckRyYXdhYmxlX29wdGljYWxJbnNldFJpZ2h0LCBwYXRoUmVuZGVyZXIubU9wdGljYWxJbnNldHMucmlnaHQpOworICAgICAgICAgICAgICAgIFIuc3R5bGVhYmxlLlZlY3RvckRyYXdhYmxlX29wdGljYWxJbnNldFJpZ2h0LCBzdGF0ZS5tT3B0aWNhbEluc2V0cy5yaWdodCk7CiAgICAgICAgIGZpbmFsIGludCBpbnNldEJvdHRvbSA9IGEuZ2V0RGltZW5zaW9uUGl4ZWxPZmZzZXQoCi0gICAgICAgICAgICAgICAgUi5zdHlsZWFibGUuVmVjdG9yRHJhd2FibGVfb3B0aWNhbEluc2V0Qm90dG9tLCBwYXRoUmVuZGVyZXIubU9wdGljYWxJbnNldHMuYm90dG9tKTsKLSAgICAgICAgcGF0aFJlbmRlcmVyLm1PcHRpY2FsSW5zZXRzID0gSW5zZXRzLm9mKGluc2V0TGVmdCwgaW5zZXRUb3AsIGluc2V0UmlnaHQsIGluc2V0Qm90dG9tKTsKKyAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5WZWN0b3JEcmF3YWJsZV9vcHRpY2FsSW5zZXRCb3R0b20sIHN0YXRlLm1PcHRpY2FsSW5zZXRzLmJvdHRvbSk7CisgICAgICAgIHN0YXRlLm1PcHRpY2FsSW5zZXRzID0gSW5zZXRzLm9mKGluc2V0TGVmdCwgaW5zZXRUb3AsIGluc2V0UmlnaHQsIGluc2V0Qm90dG9tKTsKIAogICAgICAgICBmaW5hbCBmbG9hdCBhbHBoYUluRmxvYXQgPSBhLmdldEZsb2F0KAotICAgICAgICAgICAgICAgIFIuc3R5bGVhYmxlLlZlY3RvckRyYXdhYmxlX2FscGhhLCBwYXRoUmVuZGVyZXIuZ2V0QWxwaGEoKSk7Ci0gICAgICAgIHBhdGhSZW5kZXJlci5zZXRBbHBoYShhbHBoYUluRmxvYXQpOworICAgICAgICAgICAgICAgIFIuc3R5bGVhYmxlLlZlY3RvckRyYXdhYmxlX2FscGhhLCBzdGF0ZS5nZXRBbHBoYSgpKTsKKyAgICAgICAgc3RhdGUuc2V0QWxwaGEoYWxwaGFJbkZsb2F0KTsKIAogICAgICAgICBmaW5hbCBTdHJpbmcgbmFtZSA9IGEuZ2V0U3RyaW5nKFIuc3R5bGVhYmxlLlZlY3RvckRyYXdhYmxlX25hbWUpOwogICAgICAgICBpZiAobmFtZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBwYXRoUmVuZGVyZXIubVJvb3ROYW1lID0gbmFtZTsKLSAgICAgICAgICAgIHBhdGhSZW5kZXJlci5tVkdUYXJnZXRzTWFwLnB1dChuYW1lLCBwYXRoUmVuZGVyZXIpOworICAgICAgICAgICAgc3RhdGUubVJvb3ROYW1lID0gbmFtZTsKKyAgICAgICAgICAgIHN0YXRlLm1WR1RhcmdldHNNYXAucHV0KG5hbWUsIHN0YXRlKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbmZsYXRlQ2hpbGRFbGVtZW50cyhSZXNvdXJjZXMgcmVzLCBYbWxQdWxsUGFyc2VyIHBhcnNlciwgQXR0cmlidXRlU2V0IGF0dHJzLAogICAgICAgICAgICAgVGhlbWUgdGhlbWUpIHRocm93cyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIGZpbmFsIFZlY3RvckRyYXdhYmxlU3RhdGUgc3RhdGUgPSBtVmVjdG9yU3RhdGU7Ci0gICAgICAgIGZpbmFsIFZQYXRoUmVuZGVyZXIgcGF0aFJlbmRlcmVyID0gc3RhdGUubVZQYXRoUmVuZGVyZXI7CiAgICAgICAgIGJvb2xlYW4gbm9QYXRoVGFnID0gdHJ1ZTsKIAogICAgICAgICAvLyBVc2UgYSBzdGFjayB0byBoZWxwIHRvIGJ1aWxkIHRoZSBncm91cCB0cmVlLgogICAgICAgICAvLyBUaGUgdG9wIG9mIHRoZSBzdGFjayBpcyBhbHdheXMgdGhlIGN1cnJlbnQgZ3JvdXAuCiAgICAgICAgIGZpbmFsIFN0YWNrPFZHcm91cD4gZ3JvdXBTdGFjayA9IG5ldyBTdGFjazxWR3JvdXA+KCk7Ci0gICAgICAgIGdyb3VwU3RhY2sucHVzaChwYXRoUmVuZGVyZXIubVJvb3RHcm91cCk7CisgICAgICAgIGdyb3VwU3RhY2sucHVzaChzdGF0ZS5tUm9vdEdyb3VwKTsKIAogICAgICAgICBpbnQgZXZlbnRUeXBlID0gcGFyc2VyLmdldEV2ZW50VHlwZSgpOwogICAgICAgICB3aGlsZSAoZXZlbnRUeXBlICE9IFhtbFB1bGxQYXJzZXIuRU5EX0RPQ1VNRU5UKSB7CkBAIC03MDIsNyArNjM0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgcGF0aC5pbmZsYXRlKHJlcywgYXR0cnMsIHRoZW1lKTsKICAgICAgICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLmFkZENoaWxkKHBhdGgpOwogICAgICAgICAgICAgICAgICAgICBpZiAocGF0aC5nZXRQYXRoTmFtZSgpICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhSZW5kZXJlci5tVkdUYXJnZXRzTWFwLnB1dChwYXRoLmdldFBhdGhOYW1lKCksIHBhdGgpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUubVZHVGFyZ2V0c01hcC5wdXQocGF0aC5nZXRQYXRoTmFtZSgpLCBwYXRoKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBub1BhdGhUYWcgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgc3RhdGUubUNoYW5naW5nQ29uZmlndXJhdGlvbnMgfD0gcGF0aC5tQ2hhbmdpbmdDb25maWd1cmF0aW9uczsKQEAgLTcxMSw3ICs2NDMsNyBAQAogICAgICAgICAgICAgICAgICAgICBwYXRoLmluZmxhdGUocmVzLCBhdHRycywgdGhlbWUpOwogICAgICAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAuYWRkQ2hpbGQocGF0aCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwYXRoLmdldFBhdGhOYW1lKCkgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcGF0aFJlbmRlcmVyLm1WR1RhcmdldHNNYXAucHV0KHBhdGguZ2V0UGF0aE5hbWUoKSwgcGF0aCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5tVkdUYXJnZXRzTWFwLnB1dChwYXRoLmdldFBhdGhOYW1lKCksIHBhdGgpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIHN0YXRlLm1DaGFuZ2luZ0NvbmZpZ3VyYXRpb25zIHw9IHBhdGgubUNoYW5naW5nQ29uZmlndXJhdGlvbnM7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChTSEFQRV9HUk9VUC5lcXVhbHModGFnTmFtZSkpIHsKQEAgLTcyMCw3ICs2NTIsNyBAQAogICAgICAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAuYWRkQ2hpbGQobmV3Q2hpbGRHcm91cCk7CiAgICAgICAgICAgICAgICAgICAgIGdyb3VwU3RhY2sucHVzaChuZXdDaGlsZEdyb3VwKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0NoaWxkR3JvdXAuZ2V0R3JvdXBOYW1lKCkgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcGF0aFJlbmRlcmVyLm1WR1RhcmdldHNNYXAucHV0KG5ld0NoaWxkR3JvdXAuZ2V0R3JvdXBOYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5tVkdUYXJnZXRzTWFwLnB1dChuZXdDaGlsZEdyb3VwLmdldEdyb3VwTmFtZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdDaGlsZEdyb3VwKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBzdGF0ZS5tQ2hhbmdpbmdDb25maWd1cmF0aW9ucyB8PSBuZXdDaGlsZEdyb3VwLm1DaGFuZ2luZ0NvbmZpZ3VyYXRpb25zOwpAQCAtNzM0LDExICs2NjYsNiBAQAogICAgICAgICAgICAgZXZlbnRUeXBlID0gcGFyc2VyLm5leHQoKTsKICAgICAgICAgfQogCi0gICAgICAgIC8vIFByaW50IHRoZSB0cmVlIG91dCBmb3IgZGVidWcuCi0gICAgICAgIGlmIChEQkdfVkVDVE9SX0RSQVdBQkxFKSB7Ci0gICAgICAgICAgICBwYXRoUmVuZGVyZXIucHJpbnRHcm91cFRyZWUoKTsKLSAgICAgICAgfQotCiAgICAgICAgIGlmIChub1BhdGhUYWcpIHsKICAgICAgICAgICAgIGZpbmFsIFN0cmluZ0J1ZmZlciB0YWcgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAKQEAgLTc1Nyw3ICs2ODQsNyBAQAogICAgIH0KIAogICAgIHZvaWQgc2V0QWxsb3dDYWNoaW5nKGJvb2xlYW4gYWxsb3dDYWNoaW5nKSB7Ci0gICAgICAgIG1BbGxvd0NhY2hpbmcgPSBhbGxvd0NhY2hpbmc7CisgICAgICAgIG5TZXRBbGxvd0NhY2hpbmcobVZlY3RvclN0YXRlLmdldE5hdGl2ZVJlbmRlcmVyKCksIGFsbG93Q2FjaGluZyk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSBib29sZWFuIG5lZWRNaXJyb3JpbmcoKSB7CkBAIC03NzgsODQgKzcwNSw2OCBAQAogICAgIH0KIAogICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIFZlY3RvckRyYXdhYmxlU3RhdGUgZXh0ZW5kcyBDb25zdGFudFN0YXRlIHsKKyAgICAgICAgLy8gVmFyaWFibGVzIGJlbG93IG5lZWQgdG8gYmUgY29waWVkIChkZWVwIGNvcHkgaWYgYXBwbGljYWJsZSkgZm9yIG11dGF0aW9uLgogICAgICAgICBpbnRbXSBtVGhlbWVBdHRyczsKICAgICAgICAgaW50IG1DaGFuZ2luZ0NvbmZpZ3VyYXRpb25zOwotICAgICAgICBWUGF0aFJlbmRlcmVyIG1WUGF0aFJlbmRlcmVyOwogICAgICAgICBDb2xvclN0YXRlTGlzdCBtVGludCA9IG51bGw7CiAgICAgICAgIE1vZGUgbVRpbnRNb2RlID0gREVGQVVMVF9USU5UX01PREU7CiAgICAgICAgIGJvb2xlYW4gbUF1dG9NaXJyb3JlZDsKIAotICAgICAgICBCaXRtYXAgbUNhY2hlZEJpdG1hcDsKKyAgICAgICAgZmxvYXQgbUJhc2VXaWR0aCA9IDA7CisgICAgICAgIGZsb2F0IG1CYXNlSGVpZ2h0ID0gMDsKKyAgICAgICAgZmxvYXQgbVZpZXdwb3J0V2lkdGggPSAwOworICAgICAgICBmbG9hdCBtVmlld3BvcnRIZWlnaHQgPSAwOworICAgICAgICBJbnNldHMgbU9wdGljYWxJbnNldHMgPSBJbnNldHMuTk9ORTsKKyAgICAgICAgU3RyaW5nIG1Sb290TmFtZSA9IG51bGw7CisgICAgICAgIFZHcm91cCBtUm9vdEdyb3VwOworICAgICAgICBsb25nIG1OYXRpdmVSZW5kZXJlclB0cjsKKworICAgICAgICBpbnQgbURlbnNpdHkgPSBEaXNwbGF5TWV0cmljcy5ERU5TSVRZX0RFRkFVTFQ7CisgICAgICAgIGZpbmFsIEFycmF5TWFwPFN0cmluZywgT2JqZWN0PiBtVkdUYXJnZXRzTWFwID0gbmV3IEFycmF5TWFwPD4oKTsKKworICAgICAgICAvLyBGaWVsZHMgZm9yIGNhY2hlCiAgICAgICAgIGludFtdIG1DYWNoZWRUaGVtZUF0dHJzOwogICAgICAgICBDb2xvclN0YXRlTGlzdCBtQ2FjaGVkVGludDsKICAgICAgICAgTW9kZSBtQ2FjaGVkVGludE1vZGU7Ci0gICAgICAgIGludCBtQ2FjaGVkUm9vdEFscGhhOwogICAgICAgICBib29sZWFuIG1DYWNoZWRBdXRvTWlycm9yZWQ7CiAgICAgICAgIGJvb2xlYW4gbUNhY2hlRGlydHk7Ci0gICAgICAgIC8qKiBUZW1wb3JhcnkgcGFpbnQgb2JqZWN0IHVzZWQgdG8gZHJhdyBjYWNoZWQgYml0bWFwcy4gKi8KLSAgICAgICAgUGFpbnQgbVRlbXBQYWludDsKIAogICAgICAgICAvLyBEZWVwIGNvcHkgZm9yIG11dGF0ZSgpIG9yIGltcGxpY2l0bHkgbXV0YXRlLgogICAgICAgICBwdWJsaWMgVmVjdG9yRHJhd2FibGVTdGF0ZShWZWN0b3JEcmF3YWJsZVN0YXRlIGNvcHkpIHsKICAgICAgICAgICAgIGlmIChjb3B5ICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBtVGhlbWVBdHRycyA9IGNvcHkubVRoZW1lQXR0cnM7CiAgICAgICAgICAgICAgICAgbUNoYW5naW5nQ29uZmlndXJhdGlvbnMgPSBjb3B5Lm1DaGFuZ2luZ0NvbmZpZ3VyYXRpb25zOwotICAgICAgICAgICAgICAgIG1WUGF0aFJlbmRlcmVyID0gbmV3IFZQYXRoUmVuZGVyZXIoY29weS5tVlBhdGhSZW5kZXJlcik7CiAgICAgICAgICAgICAgICAgbVRpbnQgPSBjb3B5Lm1UaW50OwogICAgICAgICAgICAgICAgIG1UaW50TW9kZSA9IGNvcHkubVRpbnRNb2RlOwogICAgICAgICAgICAgICAgIG1BdXRvTWlycm9yZWQgPSBjb3B5Lm1BdXRvTWlycm9yZWQ7CisgICAgICAgICAgICAgICAgbVJvb3RHcm91cCA9IG5ldyBWR3JvdXAoY29weS5tUm9vdEdyb3VwLCBtVkdUYXJnZXRzTWFwKTsKKyAgICAgICAgICAgICAgICBtTmF0aXZlUmVuZGVyZXJQdHIgPSBuQ3JlYXRlUmVuZGVyZXIobVJvb3RHcm91cC5tTmF0aXZlUHRyKTsKKworICAgICAgICAgICAgICAgIG1CYXNlV2lkdGggPSBjb3B5Lm1CYXNlV2lkdGg7CisgICAgICAgICAgICAgICAgbUJhc2VIZWlnaHQgPSBjb3B5Lm1CYXNlSGVpZ2h0OworICAgICAgICAgICAgICAgIHNldFZpZXdwb3J0U2l6ZShjb3B5Lm1WaWV3cG9ydFdpZHRoLCBjb3B5Lm1WaWV3cG9ydEhlaWdodCk7CisgICAgICAgICAgICAgICAgbU9wdGljYWxJbnNldHMgPSBjb3B5Lm1PcHRpY2FsSW5zZXRzOworCisgICAgICAgICAgICAgICAgbVJvb3ROYW1lID0gY29weS5tUm9vdE5hbWU7CisgICAgICAgICAgICAgICAgbURlbnNpdHkgPSBjb3B5Lm1EZW5zaXR5OworICAgICAgICAgICAgICAgIGlmIChjb3B5Lm1Sb290TmFtZSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIG1WR1RhcmdldHNNYXAucHV0KGNvcHkubVJvb3ROYW1lLCB0aGlzKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBwdWJsaWMgdm9pZCBkcmF3Q2FjaGVkQml0bWFwV2l0aFJvb3RBbHBoYShDYW52YXMgY2FudmFzLCBDb2xvckZpbHRlciBmaWx0ZXIsCi0gICAgICAgICAgICAgICAgUmVjdCBvcmlnaW5hbEJvdW5kcykgewotICAgICAgICAgICAgLy8gVGhlIGJpdG1hcCdzIHNpemUgaXMgdGhlIHNhbWUgYXMgdGhlIGJvdW5kcy4KLSAgICAgICAgICAgIGZpbmFsIFBhaW50IHAgPSBnZXRQYWludChmaWx0ZXIpOwotICAgICAgICAgICAgY2FudmFzLmRyYXdCaXRtYXAobUNhY2hlZEJpdG1hcCwgbnVsbCwgb3JpZ2luYWxCb3VuZHMsIHApOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGJvb2xlYW4gaGFzVHJhbnNsdWNlbnRSb290KCkgewotICAgICAgICAgICAgcmV0dXJuIG1WUGF0aFJlbmRlcmVyLmdldFJvb3RBbHBoYSgpIDwgMjU1OwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEByZXR1cm4gbnVsbCB3aGVuIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGFscGhhIHBhaW50LgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIFBhaW50IGdldFBhaW50KENvbG9yRmlsdGVyIGZpbHRlcikgewotICAgICAgICAgICAgaWYgKCFoYXNUcmFuc2x1Y2VudFJvb3QoKSAmJiBmaWx0ZXIgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgZmluYWxpemUoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICAgICAgICAgIGlmIChtTmF0aXZlUmVuZGVyZXJQdHIgIT0gMCkgeworICAgICAgICAgICAgICAgIG5EZXN0cm95UmVuZGVyZXIobU5hdGl2ZVJlbmRlcmVyUHRyKTsKKyAgICAgICAgICAgICAgICBtTmF0aXZlUmVuZGVyZXJQdHIgPSAwOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobVRlbXBQYWludCA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbVRlbXBQYWludCA9IG5ldyBQYWludCgpOwotICAgICAgICAgICAgICAgIG1UZW1wUGFpbnQuc2V0RmlsdGVyQml0bWFwKHRydWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbVRlbXBQYWludC5zZXRBbHBoYShtVlBhdGhSZW5kZXJlci5nZXRSb290QWxwaGEoKSk7Ci0gICAgICAgICAgICBtVGVtcFBhaW50LnNldENvbG9yRmlsdGVyKGZpbHRlcik7Ci0gICAgICAgICAgICByZXR1cm4gbVRlbXBQYWludDsKKyAgICAgICAgICAgIHN1cGVyLmZpbmFsaXplKCk7CiAgICAgICAgIH0KIAotICAgICAgICBwdWJsaWMgdm9pZCB1cGRhdGVDYWNoZWRCaXRtYXAoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7Ci0gICAgICAgICAgICBtQ2FjaGVkQml0bWFwLmVyYXNlQ29sb3IoQ29sb3IuVFJBTlNQQVJFTlQpOwotICAgICAgICAgICAgQ2FudmFzIHRtcENhbnZhcyA9IG5ldyBDYW52YXMobUNhY2hlZEJpdG1hcCk7Ci0gICAgICAgICAgICBtVlBhdGhSZW5kZXJlci5kcmF3KHRtcENhbnZhcywgd2lkdGgsIGhlaWdodCwgbnVsbCk7Ci0gICAgICAgIH0KIAotICAgICAgICBwdWJsaWMgdm9pZCBjcmVhdGVDYWNoZWRCaXRtYXBJZk5lZWRlZChpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKLSAgICAgICAgICAgIGlmIChtQ2FjaGVkQml0bWFwID09IG51bGwgfHwgIWNhblJldXNlQml0bWFwKHdpZHRoLCBoZWlnaHQpKSB7Ci0gICAgICAgICAgICAgICAgbUNhY2hlZEJpdG1hcCA9IEJpdG1hcC5jcmVhdGVCaXRtYXAod2lkdGgsIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgIEJpdG1hcC5Db25maWcuQVJHQl84ODg4KTsKLSAgICAgICAgICAgICAgICBtQ2FjaGVEaXJ0eSA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBib29sZWFuIGNhblJldXNlQml0bWFwKGludCB3aWR0aCwgaW50IGhlaWdodCkgewotICAgICAgICAgICAgaWYgKHdpZHRoID09IG1DYWNoZWRCaXRtYXAuZ2V0V2lkdGgoKQotICAgICAgICAgICAgICAgICAgICAmJiBoZWlnaHQgPT0gbUNhY2hlZEJpdG1hcC5nZXRIZWlnaHQoKSkgewotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBsb25nIGdldE5hdGl2ZVJlbmRlcmVyKCkgeworICAgICAgICAgICAgcmV0dXJuIG1OYXRpdmVSZW5kZXJlclB0cjsKICAgICAgICAgfQogCiAgICAgICAgIHB1YmxpYyBib29sZWFuIGNhblJldXNlQ2FjaGUoKSB7CkBAIC04NjMsMTAgKzc3NCwxMCBAQAogICAgICAgICAgICAgICAgICAgICAmJiBtQ2FjaGVkVGhlbWVBdHRycyA9PSBtVGhlbWVBdHRycwogICAgICAgICAgICAgICAgICAgICAmJiBtQ2FjaGVkVGludCA9PSBtVGludAogICAgICAgICAgICAgICAgICAgICAmJiBtQ2FjaGVkVGludE1vZGUgPT0gbVRpbnRNb2RlCi0gICAgICAgICAgICAgICAgICAgICYmIG1DYWNoZWRBdXRvTWlycm9yZWQgPT0gbUF1dG9NaXJyb3JlZAotICAgICAgICAgICAgICAgICAgICAmJiBtQ2FjaGVkUm9vdEFscGhhID09IG1WUGF0aFJlbmRlcmVyLmdldFJvb3RBbHBoYSgpKSB7CisgICAgICAgICAgICAgICAgICAgICYmIG1DYWNoZWRBdXRvTWlycm9yZWQgPT0gbUF1dG9NaXJyb3JlZCkgewogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgdXBkYXRlQ2FjaGVTdGF0ZXMoKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCkBAIC04NzYsMjEgKzc4NywyNSBAQAogICAgICAgICAgICAgbUNhY2hlZFRoZW1lQXR0cnMgPSBtVGhlbWVBdHRyczsKICAgICAgICAgICAgIG1DYWNoZWRUaW50ID0gbVRpbnQ7CiAgICAgICAgICAgICBtQ2FjaGVkVGludE1vZGUgPSBtVGludE1vZGU7Ci0gICAgICAgICAgICBtQ2FjaGVkUm9vdEFscGhhID0gbVZQYXRoUmVuZGVyZXIuZ2V0Um9vdEFscGhhKCk7CiAgICAgICAgICAgICBtQ2FjaGVkQXV0b01pcnJvcmVkID0gbUF1dG9NaXJyb3JlZDsKICAgICAgICAgICAgIG1DYWNoZURpcnR5ID0gZmFsc2U7CiAgICAgICAgIH0KIAorICAgICAgICBwdWJsaWMgdm9pZCBhcHBseVRoZW1lKFRoZW1lIHQpIHsKKyAgICAgICAgICAgIG1Sb290R3JvdXAuYXBwbHlUaGVtZSh0KTsKKyAgICAgICAgfQorCiAgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwdWJsaWMgYm9vbGVhbiBjYW5BcHBseVRoZW1lKCkgewogICAgICAgICAgICAgcmV0dXJuIG1UaGVtZUF0dHJzICE9IG51bGwKLSAgICAgICAgICAgICAgICAgICAgfHwgKG1WUGF0aFJlbmRlcmVyICE9IG51bGwgJiYgbVZQYXRoUmVuZGVyZXIuY2FuQXBwbHlUaGVtZSgpKQorICAgICAgICAgICAgICAgICAgICB8fCAobVJvb3RHcm91cCAhPSBudWxsICYmIG1Sb290R3JvdXAuY2FuQXBwbHlUaGVtZSgpKQogICAgICAgICAgICAgICAgICAgICB8fCAobVRpbnQgIT0gbnVsbCAmJiBtVGludC5jYW5BcHBseVRoZW1lKCkpCiAgICAgICAgICAgICAgICAgICAgIHx8IHN1cGVyLmNhbkFwcGx5VGhlbWUoKTsKICAgICAgICAgfQogCiAgICAgICAgIHB1YmxpYyBWZWN0b3JEcmF3YWJsZVN0YXRlKCkgewotICAgICAgICAgICAgbVZQYXRoUmVuZGVyZXIgPSBuZXcgVlBhdGhSZW5kZXJlcigpOworICAgICAgICAgICAgbVJvb3RHcm91cCA9IG5ldyBWR3JvdXAoKTsKKyAgICAgICAgICAgIG1OYXRpdmVSZW5kZXJlclB0ciA9IG5DcmVhdGVSZW5kZXJlcihtUm9vdEdyb3VwLm1OYXRpdmVQdHIpOwogICAgICAgICB9CiAKICAgICAgICAgQE92ZXJyaWRlCkBAIC05MTEsODAgKzgyNiwxMyBAQAogCiAgICAgICAgIHB1YmxpYyBib29sZWFuIGlzU3RhdGVmdWwoKSB7CiAgICAgICAgICAgICByZXR1cm4gKG1UaW50ICE9IG51bGwgJiYgbVRpbnQuaXNTdGF0ZWZ1bCgpKQotICAgICAgICAgICAgICAgICAgICB8fCAobVZQYXRoUmVuZGVyZXIgIT0gbnVsbCAmJiBtVlBhdGhSZW5kZXJlci5pc1N0YXRlZnVsKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgVlBhdGhSZW5kZXJlciB7Ci0gICAgICAgIC8qIFJpZ2h0IG5vdyB0aGUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUgaXMgb3JnYW5pemVkIGFzIGEgdHJlZS4KLSAgICAgICAgICogRWFjaCBub2RlIGNhbiBiZSBhIGdyb3VwIG5vZGUsIG9yIGEgcGF0aC4KLSAgICAgICAgICogQSBncm91cCBub2RlIGNhbiBoYXZlIGdyb3VwcyBvciBwYXRocyBhcyBjaGlsZHJlbiwgYnV0IGEgcGF0aCBub2RlIGhhcwotICAgICAgICAgKiBubyBjaGlsZHJlbi4KLSAgICAgICAgICogT25lIGV4YW1wbGUgY2FuIGJlOgotICAgICAgICAgKiAgICAgICAgICAgICAgICAgUm9vdCBHcm91cAotICAgICAgICAgKiAgICAgICAgICAgICAgICAvICAgIHwgICAgIFwKLSAgICAgICAgICogICAgICAgICAgIEdyb3VwICAgIFBhdGggICAgR3JvdXAKLSAgICAgICAgICogICAgICAgICAgLyAgICAgXCAgICAgICAgICAgICB8Ci0gICAgICAgICAqICAgICAgICAgUGF0aCAgIFBhdGggICAgICAgICBQYXRoCi0gICAgICAgICAqCi0gICAgICAgICAqLwotICAgICAgICAvLyBWYXJpYWJsZXMgdGhhdCBvbmx5IHVzZWQgdGVtcG9yYXJpbHkgaW5zaWRlIHRoZSBkcmF3KCkgY2FsbCwgc28gdGhlcmUKLSAgICAgICAgLy8gaXMgbm8gbmVlZCBmb3IgZGVlcCBjb3B5aW5nLgotICAgICAgICBwcml2YXRlIGZpbmFsIFRlbXBTdGF0ZSBtVGVtcFN0YXRlID0gbmV3IFRlbXBTdGF0ZSgpOwotCi0gICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0gICAgICAgIC8vIFZhcmlhYmxlcyBiZWxvdyBuZWVkIHRvIGJlIGNvcGllZCAoZGVlcCBjb3B5IGlmIGFwcGxpY2FibGUpIGZvciBtdXRhdGlvbi4KLSAgICAgICAgcHJpdmF0ZSBpbnQgbUNoYW5naW5nQ29uZmlndXJhdGlvbnM7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgVkdyb3VwIG1Sb290R3JvdXA7Ci0gICAgICAgIGZsb2F0IG1CYXNlV2lkdGggPSAwOwotICAgICAgICBmbG9hdCBtQmFzZUhlaWdodCA9IDA7Ci0gICAgICAgIGZsb2F0IG1WaWV3cG9ydFdpZHRoID0gMDsKLSAgICAgICAgZmxvYXQgbVZpZXdwb3J0SGVpZ2h0ID0gMDsKLSAgICAgICAgSW5zZXRzIG1PcHRpY2FsSW5zZXRzID0gSW5zZXRzLk5PTkU7Ci0gICAgICAgIGludCBtUm9vdEFscGhhID0gMHhGRjsKLSAgICAgICAgU3RyaW5nIG1Sb290TmFtZSA9IG51bGw7Ci0KLSAgICAgICAgaW50IG1EZW5zaXR5ID0gRGlzcGxheU1ldHJpY3MuREVOU0lUWV9ERUZBVUxUOwotCi0gICAgICAgIGZpbmFsIEFycmF5TWFwPFN0cmluZywgT2JqZWN0PiBtVkdUYXJnZXRzTWFwID0gbmV3IEFycmF5TWFwPD4oKTsKLQotICAgICAgICBwdWJsaWMgVlBhdGhSZW5kZXJlcigpIHsKLSAgICAgICAgICAgIG1Sb290R3JvdXAgPSBuZXcgVkdyb3VwKCk7CisgICAgICAgICAgICAgICAgICAgIHx8IChtUm9vdEdyb3VwICE9IG51bGwgJiYgbVJvb3RHcm91cC5pc1N0YXRlZnVsKCkpOwogICAgICAgICB9CiAKLSAgICAgICAgcHVibGljIHZvaWQgc2V0Um9vdEFscGhhKGludCBhbHBoYSkgewotICAgICAgICAgICAgbVJvb3RBbHBoYSA9IGFscGhhOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGludCBnZXRSb290QWxwaGEoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbVJvb3RBbHBoYTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHNldEFscGhhKCkgYW5kIGdldEFscGhhKCkgYXJlIHVzZWQgbW9zdGx5IGZvciBhbmltYXRpb24gcHVycG9zZSwgc2luY2UKLSAgICAgICAgLy8gQW5pbWF0b3IgbGlrZSB0byB1c2UgYWxwaGEgZnJvbSAwIHRvIDEuCi0gICAgICAgIHB1YmxpYyB2b2lkIHNldEFscGhhKGZsb2F0IGFscGhhKSB7Ci0gICAgICAgICAgICBzZXRSb290QWxwaGEoKGludCkgKGFscGhhICogMjU1KSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKLSAgICAgICAgcHVibGljIGZsb2F0IGdldEFscGhhKCkgewotICAgICAgICAgICAgcmV0dXJuIGdldFJvb3RBbHBoYSgpIC8gMjU1LjBmOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIFZQYXRoUmVuZGVyZXIoVlBhdGhSZW5kZXJlciBjb3B5KSB7Ci0gICAgICAgICAgICBtUm9vdEdyb3VwID0gbmV3IFZHcm91cChjb3B5Lm1Sb290R3JvdXAsIG1WR1RhcmdldHNNYXApOwotICAgICAgICAgICAgbUJhc2VXaWR0aCA9IGNvcHkubUJhc2VXaWR0aDsKLSAgICAgICAgICAgIG1CYXNlSGVpZ2h0ID0gY29weS5tQmFzZUhlaWdodDsKLSAgICAgICAgICAgIG1WaWV3cG9ydFdpZHRoID0gY29weS5tVmlld3BvcnRXaWR0aDsKLSAgICAgICAgICAgIG1WaWV3cG9ydEhlaWdodCA9IGNvcHkubVZpZXdwb3J0SGVpZ2h0OwotICAgICAgICAgICAgbU9wdGljYWxJbnNldHMgPSBjb3B5Lm1PcHRpY2FsSW5zZXRzOwotICAgICAgICAgICAgbUNoYW5naW5nQ29uZmlndXJhdGlvbnMgPSBjb3B5Lm1DaGFuZ2luZ0NvbmZpZ3VyYXRpb25zOwotICAgICAgICAgICAgbVJvb3RBbHBoYSA9IGNvcHkubVJvb3RBbHBoYTsKLSAgICAgICAgICAgIG1Sb290TmFtZSA9IGNvcHkubVJvb3ROYW1lOwotICAgICAgICAgICAgbURlbnNpdHkgPSBjb3B5Lm1EZW5zaXR5OwotICAgICAgICAgICAgaWYgKGNvcHkubVJvb3ROYW1lICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtVkdUYXJnZXRzTWFwLnB1dChjb3B5Lm1Sb290TmFtZSwgdGhpcyk7Ci0gICAgICAgICAgICB9CisgICAgICAgIHZvaWQgc2V0Vmlld3BvcnRTaXplKGZsb2F0IHZpZXdwb3J0V2lkdGgsIGZsb2F0IHZpZXdwb3J0SGVpZ2h0KSB7CisgICAgICAgICAgICBtVmlld3BvcnRXaWR0aCA9IHZpZXdwb3J0V2lkdGg7CisgICAgICAgICAgICBtVmlld3BvcnRIZWlnaHQgPSB2aWV3cG9ydEhlaWdodDsKKyAgICAgICAgICAgIG5TZXRSZW5kZXJlclZpZXdwb3J0U2l6ZShnZXROYXRpdmVSZW5kZXJlcigpLCB2aWV3cG9ydFdpZHRoLCB2aWV3cG9ydEhlaWdodCk7CiAgICAgICAgIH0KIAogICAgICAgICBwdWJsaWMgZmluYWwgYm9vbGVhbiBzZXREZW5zaXR5KGludCB0YXJnZXREZW5zaXR5KSB7CkBAIC0xMDEyLDY4ICs4NjAsNTAgQEAKICAgICAgICAgICAgIG1PcHRpY2FsSW5zZXRzID0gSW5zZXRzLm9mKGluc2V0TGVmdCwgaW5zZXRUb3AsIGluc2V0UmlnaHQsIGluc2V0Qm90dG9tKTsKICAgICAgICAgfQogCi0gICAgICAgIHB1YmxpYyBib29sZWFuIGNhbkFwcGx5VGhlbWUoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbVJvb3RHcm91cC5jYW5BcHBseVRoZW1lKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBhcHBseVRoZW1lKFRoZW1lIHQpIHsKLSAgICAgICAgICAgIG1Sb290R3JvdXAuYXBwbHlUaGVtZSh0KTsKLSAgICAgICAgfQotCiAgICAgICAgIHB1YmxpYyBib29sZWFuIG9uU3RhdGVDaGFuZ2UoaW50W10gc3RhdGVTZXQpIHsKICAgICAgICAgICAgIHJldHVybiBtUm9vdEdyb3VwLm9uU3RhdGVDaGFuZ2Uoc3RhdGVTZXQpOwogICAgICAgICB9CiAKLSAgICAgICAgcHVibGljIGJvb2xlYW4gaXNTdGF0ZWZ1bCgpIHsKLSAgICAgICAgICAgIHJldHVybiBtUm9vdEdyb3VwLmlzU3RhdGVmdWwoKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIHNldEFscGhhKCkgYW5kIGdldEFscGhhKCkgYXJlIHVzZWQgbW9zdGx5IGZvciBhbmltYXRpb24gcHVycG9zZS4gUmV0dXJuIHRydWUgaWYgYWxwaGEKKyAgICAgICAgICogaGFzIGNoYW5nZWQuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgYm9vbGVhbiBzZXRBbHBoYShmbG9hdCBhbHBoYSkgeworICAgICAgICAgICAgcmV0dXJuIG5TZXRSb290QWxwaGEobU5hdGl2ZVJlbmRlcmVyUHRyLCBhbHBoYSk7CiAgICAgICAgIH0KIAotICAgICAgICBwdWJsaWMgdm9pZCBkcmF3KENhbnZhcyBjYW52YXMsIGludCB3LCBpbnQgaCwgQ29sb3JGaWx0ZXIgZmlsdGVyKSB7Ci0gICAgICAgICAgICBmaW5hbCBmbG9hdCBzY2FsZVggPSB3IC8gbVZpZXdwb3J0V2lkdGg7Ci0gICAgICAgICAgICBmaW5hbCBmbG9hdCBzY2FsZVkgPSBoIC8gbVZpZXdwb3J0SGVpZ2h0OwotICAgICAgICAgICAgbVJvb3RHcm91cC5kcmF3KGNhbnZhcywgbVRlbXBTdGF0ZSwgTWF0cml4LklERU5USVRZX01BVFJJWCwgZmlsdGVyLCBzY2FsZVgsIHNjYWxlWSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBwcmludEdyb3VwVHJlZSgpIHsKLSAgICAgICAgICAgIG1Sb290R3JvdXAucHJpbnRHcm91cFRyZWUoIiIpOworICAgICAgICBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKyAgICAgICAgcHVibGljIGZsb2F0IGdldEFscGhhKCkgeworICAgICAgICAgICAgcmV0dXJuIG5HZXRSb290QWxwaGEobU5hdGl2ZVJlbmRlcmVyUHRyKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIFZHcm91cCBpbXBsZW1lbnRzIFZPYmplY3QgewotICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgR1JPVVBfSU5ERU5UID0gIiAgICAiOworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUk9UQVRFX0lOREVYID0gMDsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFBJVk9UX1hfSU5ERVggPSAxOworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUElWT1RfWV9JTkRFWCA9IDI7CisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTQ0FMRV9YX0lOREVYID0gMzsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNDQUxFX1lfSU5ERVggPSA0OworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVFJBTlNMQVRFX1hfSU5ERVggPSA1OworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVFJBTlNMQVRFX1lfSU5ERVggPSA2OworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVFJBTlNGT1JNX1BST1BFUlRZX0NPVU5UID0gNzsKIAotICAgICAgICAvLyBtU3RhY2tlZE1hdHJpeCBpcyBvbmx5IHVzZWQgdGVtcG9yYXJpbHkgd2hlbiBkcmF3aW5nLCBpdCBjb21iaW5lcyBhbGwKLSAgICAgICAgLy8gdGhlIHBhcmVudHMnIGxvY2FsIG1hdHJpY2VzIHdpdGggdGhlIGN1cnJlbnQgb25lLgotICAgICAgICBwcml2YXRlIGZpbmFsIE1hdHJpeCBtU3RhY2tlZE1hdHJpeCA9IG5ldyBNYXRyaXgoKTsKLQorICAgICAgICAvLyBUZW1wIGFycmF5IHRvIHN0b3JlIHRyYW5zZm9ybSB2YWx1ZXMgb2J0YWluZWQgZnJvbSBuYXRpdmUuCisgICAgICAgIHByaXZhdGUgZmxvYXRbXSBtVHJhbnNmb3JtOwogICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogICAgICAgICAvLyBWYXJpYWJsZXMgYmVsb3cgbmVlZCB0byBiZSBjb3BpZWQgKGRlZXAgY29weSBpZiBhcHBsaWNhYmxlKSBmb3IgbXV0YXRpb24uCiAgICAgICAgIHByaXZhdGUgZmluYWwgQXJyYXlMaXN0PFZPYmplY3Q+IG1DaGlsZHJlbiA9IG5ldyBBcnJheUxpc3Q8PigpOwotCi0gICAgICAgIHByaXZhdGUgZmxvYXQgbVJvdGF0ZSA9IDA7Ci0gICAgICAgIHByaXZhdGUgZmxvYXQgbVBpdm90WCA9IDA7Ci0gICAgICAgIHByaXZhdGUgZmxvYXQgbVBpdm90WSA9IDA7Ci0gICAgICAgIHByaXZhdGUgZmxvYXQgbVNjYWxlWCA9IDE7Ci0gICAgICAgIHByaXZhdGUgZmxvYXQgbVNjYWxlWSA9IDE7Ci0gICAgICAgIHByaXZhdGUgZmxvYXQgbVRyYW5zbGF0ZVggPSAwOwotICAgICAgICBwcml2YXRlIGZsb2F0IG1UcmFuc2xhdGVZID0gMDsKICAgICAgICAgcHJpdmF0ZSBib29sZWFuIG1Jc1N0YXRlZnVsOwogCiAgICAgICAgIC8vIG1Mb2NhbE1hdHJpeCBpcyB1cGRhdGVkIGJhc2VkIG9uIHRoZSB1cGRhdGUgb2YgdHJhbnNmb3JtYXRpb24gaW5mb3JtYXRpb24sCiAgICAgICAgIC8vIGVpdGhlciBwYXJzZWQgZnJvbSB0aGUgWE1MIG9yIGJ5IGFuaW1hdGlvbi4KLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBNYXRyaXggbUxvY2FsTWF0cml4ID0gbmV3IE1hdHJpeCgpOwogICAgICAgICBwcml2YXRlIGludCBtQ2hhbmdpbmdDb25maWd1cmF0aW9uczsKICAgICAgICAgcHJpdmF0ZSBpbnRbXSBtVGhlbWVBdHRyczsKICAgICAgICAgcHJpdmF0ZSBTdHJpbmcgbUdyb3VwTmFtZSA9IG51bGw7CisgICAgICAgIHByaXZhdGUgbG9uZyBtTmF0aXZlUHRyID0gMDsKIAogICAgICAgICBwdWJsaWMgVkdyb3VwKFZHcm91cCBjb3B5LCBBcnJheU1hcDxTdHJpbmcsIE9iamVjdD4gdGFyZ2V0c01hcCkgewotICAgICAgICAgICAgbVJvdGF0ZSA9IGNvcHkubVJvdGF0ZTsKLSAgICAgICAgICAgIG1QaXZvdFggPSBjb3B5Lm1QaXZvdFg7Ci0gICAgICAgICAgICBtUGl2b3RZID0gY29weS5tUGl2b3RZOwotICAgICAgICAgICAgbVNjYWxlWCA9IGNvcHkubVNjYWxlWDsKLSAgICAgICAgICAgIG1TY2FsZVkgPSBjb3B5Lm1TY2FsZVk7Ci0gICAgICAgICAgICBtVHJhbnNsYXRlWCA9IGNvcHkubVRyYW5zbGF0ZVg7Ci0gICAgICAgICAgICBtVHJhbnNsYXRlWSA9IGNvcHkubVRyYW5zbGF0ZVk7CisKICAgICAgICAgICAgIG1Jc1N0YXRlZnVsID0gY29weS5tSXNTdGF0ZWZ1bDsKICAgICAgICAgICAgIG1UaGVtZUF0dHJzID0gY29weS5tVGhlbWVBdHRyczsKICAgICAgICAgICAgIG1Hcm91cE5hbWUgPSBjb3B5Lm1Hcm91cE5hbWU7CkBAIC0xMDgxLDE1ICs5MTEsMTQgQEAKICAgICAgICAgICAgIGlmIChtR3JvdXBOYW1lICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICB0YXJnZXRzTWFwLnB1dChtR3JvdXBOYW1lLCB0aGlzKTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbUxvY2FsTWF0cml4LnNldChjb3B5Lm1Mb2NhbE1hdHJpeCk7CisgICAgICAgICAgICBtTmF0aXZlUHRyID0gbkNyZWF0ZUdyb3VwKGNvcHkubU5hdGl2ZVB0cik7CiAKICAgICAgICAgICAgIGZpbmFsIEFycmF5TGlzdDxWT2JqZWN0PiBjaGlsZHJlbiA9IGNvcHkubUNoaWxkcmVuOwogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5zaXplKCk7IGkrKykgewogICAgICAgICAgICAgICAgIGZpbmFsIFZPYmplY3QgY29weUNoaWxkID0gY2hpbGRyZW4uZ2V0KGkpOwogICAgICAgICAgICAgICAgIGlmIChjb3B5Q2hpbGQgaW5zdGFuY2VvZiBWR3JvdXApIHsKICAgICAgICAgICAgICAgICAgICAgZmluYWwgVkdyb3VwIGNvcHlHcm91cCA9IChWR3JvdXApIGNvcHlDaGlsZDsKLSAgICAgICAgICAgICAgICAgICAgbUNoaWxkcmVuLmFkZChuZXcgVkdyb3VwKGNvcHlHcm91cCwgdGFyZ2V0c01hcCkpOworICAgICAgICAgICAgICAgICAgICBhZGRDaGlsZChuZXcgVkdyb3VwKGNvcHlHcm91cCwgdGFyZ2V0c01hcCkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFZQYXRoIG5ld1BhdGg7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjb3B5Q2hpbGQgaW5zdGFuY2VvZiBWRnVsbFBhdGgpIHsKQEAgLTEwOTksNyArOTI4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIlVua25vd24gb2JqZWN0IGluIHRoZSB0cmVlISIpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIG1DaGlsZHJlbi5hZGQobmV3UGF0aCk7CisgICAgICAgICAgICAgICAgICAgIGFkZENoaWxkKG5ld1BhdGgpOwogICAgICAgICAgICAgICAgICAgICBpZiAobmV3UGF0aC5tUGF0aE5hbWUgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0c01hcC5wdXQobmV3UGF0aC5tUGF0aE5hbWUsIG5ld1BhdGgpOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0xMTA4LDQzICs5MzcsMjMgQEAKICAgICAgICAgfQogCiAgICAgICAgIHB1YmxpYyBWR3JvdXAoKSB7CisgICAgICAgICAgICBtTmF0aXZlUHRyID0gbkNyZWF0ZUdyb3VwKCk7CiAgICAgICAgIH0KIAogICAgICAgICBwdWJsaWMgU3RyaW5nIGdldEdyb3VwTmFtZSgpIHsKICAgICAgICAgICAgIHJldHVybiBtR3JvdXBOYW1lOwogICAgICAgICB9CiAKLSAgICAgICAgcHVibGljIE1hdHJpeCBnZXRMb2NhbE1hdHJpeCgpIHsKLSAgICAgICAgICAgIHJldHVybiBtTG9jYWxNYXRyaXg7Ci0gICAgICAgIH0KLQogICAgICAgICBwdWJsaWMgdm9pZCBhZGRDaGlsZChWT2JqZWN0IGNoaWxkKSB7CisgICAgICAgICAgICBuQWRkQ2hpbGQobU5hdGl2ZVB0ciwgY2hpbGQuZ2V0TmF0aXZlUHRyKCkpOwogICAgICAgICAgICAgbUNoaWxkcmVuLmFkZChjaGlsZCk7CiAKICAgICAgICAgICAgIG1Jc1N0YXRlZnVsIHw9IGNoaWxkLmlzU3RhdGVmdWwoKTsKICAgICAgICAgfQogCiAgICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBkcmF3KENhbnZhcyBjYW52YXMsIFRlbXBTdGF0ZSB0ZW1wLCBNYXRyaXggY3VycmVudE1hdHJpeCwKLSAgICAgICAgICAgICAgICBDb2xvckZpbHRlciBmaWx0ZXIsIGZsb2F0IHNjYWxlWCwgZmxvYXQgc2NhbGVZKSB7Ci0gICAgICAgICAgICAvLyBDYWxjdWxhdGUgY3VycmVudCBncm91cCdzIG1hdHJpeCBieSBwcmVDb25jYXQgdGhlIHBhcmVudCdzIGFuZAotICAgICAgICAgICAgLy8gYW5kIHRoZSBjdXJyZW50IG9uZSBvbiB0aGUgdG9wIG9mIHRoZSBzdGFjay4KLSAgICAgICAgICAgIC8vIEJhc2ljYWxseSB0aGUgTWZpbmFsID0gTXZpZXdwb3J0ICogTTAgKiBNMSAqIE0yOwotICAgICAgICAgICAgLy8gTWkgdGhlIGxvY2FsIG1hdHJpeCBhdCBsZXZlbCBpIG9mIHRoZSBncm91cCB0cmVlLgotICAgICAgICAgICAgbVN0YWNrZWRNYXRyaXguc2V0KGN1cnJlbnRNYXRyaXgpOwotICAgICAgICAgICAgbVN0YWNrZWRNYXRyaXgucHJlQ29uY2F0KG1Mb2NhbE1hdHJpeCk7Ci0KLSAgICAgICAgICAgIC8vIFNhdmUgdGhlIGN1cnJlbnQgY2xpcCBpbmZvcm1hdGlvbiwgd2hpY2ggaXMgbG9jYWwgdG8gdGhpcyBncm91cC4KLSAgICAgICAgICAgIGNhbnZhcy5zYXZlKCk7Ci0KLSAgICAgICAgICAgIC8vIERyYXcgdGhlIGdyb3VwIHRyZWUgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlIFhNTCBmaWxlLgotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDAsIGNvdW50ID0gbUNoaWxkcmVuLnNpemUoKTsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICBmaW5hbCBWT2JqZWN0IGNoaWxkID0gbUNoaWxkcmVuLmdldChpKTsKLSAgICAgICAgICAgICAgICBjaGlsZC5kcmF3KGNhbnZhcywgdGVtcCwgbVN0YWNrZWRNYXRyaXgsIGZpbHRlciwgc2NhbGVYLCBzY2FsZVkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBSZXN0b3JlIHRoZSBwcmV2aW91cyBjbGlwIGluZm9ybWF0aW9uLgotICAgICAgICAgICAgY2FudmFzLnJlc3RvcmUoKTsKKyAgICAgICAgcHVibGljIGxvbmcgZ2V0TmF0aXZlUHRyKCkgeworICAgICAgICAgICAgcmV0dXJuIG1OYXRpdmVQdHI7CiAgICAgICAgIH0KIAogICAgICAgICBAT3ZlcnJpZGUKQEAgLTExNTUsMjcgKzk2NCw0MyBAQAogICAgICAgICAgICAgYS5yZWN5Y2xlKCk7CiAgICAgICAgIH0KIAotICAgICAgICBwcml2YXRlIHZvaWQgdXBkYXRlU3RhdGVGcm9tVHlwZWRBcnJheShUeXBlZEFycmF5IGEpIHsKKyAgICAgICAgdm9pZCB1cGRhdGVTdGF0ZUZyb21UeXBlZEFycmF5KFR5cGVkQXJyYXkgYSkgewogICAgICAgICAgICAgLy8gQWNjb3VudCBmb3IgYW55IGNvbmZpZ3VyYXRpb24gY2hhbmdlcy4KICAgICAgICAgICAgIG1DaGFuZ2luZ0NvbmZpZ3VyYXRpb25zIHw9IGEuZ2V0Q2hhbmdpbmdDb25maWd1cmF0aW9ucygpOwogCiAgICAgICAgICAgICAvLyBFeHRyYWN0IHRoZSB0aGVtZSBhdHRyaWJ1dGVzLCBpZiBhbnkuCiAgICAgICAgICAgICBtVGhlbWVBdHRycyA9IGEuZXh0cmFjdFRoZW1lQXR0cnMoKTsKLQotICAgICAgICAgICAgbVJvdGF0ZSA9IGEuZ2V0RmxvYXQoUi5zdHlsZWFibGUuVmVjdG9yRHJhd2FibGVHcm91cF9yb3RhdGlvbiwgbVJvdGF0ZSk7Ci0gICAgICAgICAgICBtUGl2b3RYID0gYS5nZXRGbG9hdChSLnN0eWxlYWJsZS5WZWN0b3JEcmF3YWJsZUdyb3VwX3Bpdm90WCwgbVBpdm90WCk7Ci0gICAgICAgICAgICBtUGl2b3RZID0gYS5nZXRGbG9hdChSLnN0eWxlYWJsZS5WZWN0b3JEcmF3YWJsZUdyb3VwX3Bpdm90WSwgbVBpdm90WSk7Ci0gICAgICAgICAgICBtU2NhbGVYID0gYS5nZXRGbG9hdChSLnN0eWxlYWJsZS5WZWN0b3JEcmF3YWJsZUdyb3VwX3NjYWxlWCwgbVNjYWxlWCk7Ci0gICAgICAgICAgICBtU2NhbGVZID0gYS5nZXRGbG9hdChSLnN0eWxlYWJsZS5WZWN0b3JEcmF3YWJsZUdyb3VwX3NjYWxlWSwgbVNjYWxlWSk7Ci0gICAgICAgICAgICBtVHJhbnNsYXRlWCA9IGEuZ2V0RmxvYXQoUi5zdHlsZWFibGUuVmVjdG9yRHJhd2FibGVHcm91cF90cmFuc2xhdGVYLCBtVHJhbnNsYXRlWCk7Ci0gICAgICAgICAgICBtVHJhbnNsYXRlWSA9IGEuZ2V0RmxvYXQoUi5zdHlsZWFibGUuVmVjdG9yRHJhd2FibGVHcm91cF90cmFuc2xhdGVZLCBtVHJhbnNsYXRlWSk7CisgICAgICAgICAgICBpZiAobVRyYW5zZm9ybSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgLy8gTGF6eSBpbml0aWFsaXphdGlvbjogSWYgdGhlIGdyb3VwIGlzIGNyZWF0ZWQgdGhyb3VnaCBjb3B5IGNvbnN0cnVjdG9yLCB0aGlzIG1heQorICAgICAgICAgICAgICAgIC8vIG5ldmVyIGdldCBjYWxsZWQuCisgICAgICAgICAgICAgICAgbVRyYW5zZm9ybSA9IG5ldyBmbG9hdFtUUkFOU0ZPUk1fUFJPUEVSVFlfQ09VTlRdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYm9vbGVhbiBzdWNjZXNzID0gbkdldEdyb3VwUHJvcGVydGllcyhtTmF0aXZlUHRyLCBtVHJhbnNmb3JtLCBUUkFOU0ZPUk1fUFJPUEVSVFlfQ09VTlQpOworICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkVycm9yOiBpbmNvbnNpc3RlbnQgcHJvcGVydHkgY291bnQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZsb2F0IHJvdGF0ZSA9IGEuZ2V0RmxvYXQoUi5zdHlsZWFibGUuVmVjdG9yRHJhd2FibGVHcm91cF9yb3RhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgbVRyYW5zZm9ybVtST1RBVEVfSU5ERVhdKTsKKyAgICAgICAgICAgIGZsb2F0IHBpdm90WCA9IGEuZ2V0RmxvYXQoUi5zdHlsZWFibGUuVmVjdG9yRHJhd2FibGVHcm91cF9waXZvdFgsCisgICAgICAgICAgICAgICAgICAgIG1UcmFuc2Zvcm1bUElWT1RfWF9JTkRFWF0pOworICAgICAgICAgICAgZmxvYXQgcGl2b3RZID0gYS5nZXRGbG9hdChSLnN0eWxlYWJsZS5WZWN0b3JEcmF3YWJsZUdyb3VwX3Bpdm90WSwKKyAgICAgICAgICAgICAgICAgICAgbVRyYW5zZm9ybVtQSVZPVF9ZX0lOREVYXSk7CisgICAgICAgICAgICBmbG9hdCBzY2FsZVggPSBhLmdldEZsb2F0KFIuc3R5bGVhYmxlLlZlY3RvckRyYXdhYmxlR3JvdXBfc2NhbGVYLAorICAgICAgICAgICAgICAgICAgICBtVHJhbnNmb3JtW1NDQUxFX1hfSU5ERVhdKTsKKyAgICAgICAgICAgIGZsb2F0IHNjYWxlWSA9IGEuZ2V0RmxvYXQoUi5zdHlsZWFibGUuVmVjdG9yRHJhd2FibGVHcm91cF9zY2FsZVksCisgICAgICAgICAgICAgICAgICAgIG1UcmFuc2Zvcm1bU0NBTEVfWV9JTkRFWF0pOworICAgICAgICAgICAgZmxvYXQgdHJhbnNsYXRlWCA9IGEuZ2V0RmxvYXQoUi5zdHlsZWFibGUuVmVjdG9yRHJhd2FibGVHcm91cF90cmFuc2xhdGVYLAorICAgICAgICAgICAgICAgICAgICBtVHJhbnNmb3JtW1RSQU5TTEFURV9YX0lOREVYXSk7CisgICAgICAgICAgICBmbG9hdCB0cmFuc2xhdGVZID0gYS5nZXRGbG9hdChSLnN0eWxlYWJsZS5WZWN0b3JEcmF3YWJsZUdyb3VwX3RyYW5zbGF0ZVksCisgICAgICAgICAgICAgICAgICAgIG1UcmFuc2Zvcm1bVFJBTlNMQVRFX1lfSU5ERVhdKTsKIAogICAgICAgICAgICAgZmluYWwgU3RyaW5nIGdyb3VwTmFtZSA9IGEuZ2V0U3RyaW5nKFIuc3R5bGVhYmxlLlZlY3RvckRyYXdhYmxlR3JvdXBfbmFtZSk7CiAgICAgICAgICAgICBpZiAoZ3JvdXBOYW1lICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBtR3JvdXBOYW1lID0gZ3JvdXBOYW1lOworICAgICAgICAgICAgICAgIG5TZXROYW1lKG1OYXRpdmVQdHIsIG1Hcm91cE5hbWUpOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB1cGRhdGVMb2NhbE1hdHJpeCgpOworICAgICAgICAgICAgIG5VcGRhdGVHcm91cFByb3BlcnRpZXMobU5hdGl2ZVB0ciwgcm90YXRlLCBwaXZvdFgsIHBpdm90WSwgc2NhbGVYLCBzY2FsZVksCisgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGVYLCB0cmFuc2xhdGVZKTsKICAgICAgICAgfQogCiAgICAgICAgIEBPdmVycmlkZQpAQCAtMTIxNiw2ICsxMDQxLDE2IEBACiAgICAgICAgIH0KIAogICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHJvdGVjdGVkIHZvaWQgZmluYWxpemUoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICAgICAgICAgIGlmIChtTmF0aXZlUHRyICE9IDApIHsKKyAgICAgICAgICAgICAgICBuRGVzdHJveShtTmF0aXZlUHRyKTsKKyAgICAgICAgICAgICAgICBtTmF0aXZlUHRyID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN1cGVyLmZpbmFsaXplKCk7CisgICAgICAgIH0KKworCisgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwdWJsaWMgdm9pZCBhcHBseVRoZW1lKFRoZW1lIHQpIHsKICAgICAgICAgICAgIGlmIChtVGhlbWVBdHRycyAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgZmluYWwgVHlwZWRBcnJheSBhID0gdC5yZXNvbHZlQXR0cmlidXRlcyhtVGhlbWVBdHRycywKQEAgLTEyMzYsMTI0ICsxMDcxLDc1IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBwcml2YXRlIHZvaWQgdXBkYXRlTG9jYWxNYXRyaXgoKSB7Ci0gICAgICAgICAgICAvLyBUaGUgb3JkZXIgd2UgYXBwbHkgaXMgdGhlIHNhbWUgYXMgdGhlCi0gICAgICAgICAgICAvLyBSZW5kZXJOb2RlLmNwcDo6YXBwbHlWaWV3UHJvcGVydHlUcmFuc2Zvcm1zKCkuCi0gICAgICAgICAgICBtTG9jYWxNYXRyaXgucmVzZXQoKTsKLSAgICAgICAgICAgIG1Mb2NhbE1hdHJpeC5wb3N0VHJhbnNsYXRlKC1tUGl2b3RYLCAtbVBpdm90WSk7Ci0gICAgICAgICAgICBtTG9jYWxNYXRyaXgucG9zdFNjYWxlKG1TY2FsZVgsIG1TY2FsZVkpOwotICAgICAgICAgICAgbUxvY2FsTWF0cml4LnBvc3RSb3RhdGUobVJvdGF0ZSwgMCwgMCk7Ci0gICAgICAgICAgICBtTG9jYWxNYXRyaXgucG9zdFRyYW5zbGF0ZShtVHJhbnNsYXRlWCArIG1QaXZvdFgsIG1UcmFuc2xhdGVZICsgbVBpdm90WSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBwcmludEdyb3VwVHJlZShTdHJpbmcgaW5kZW50KSB7Ci0gICAgICAgICAgICBMb2cudihMT0dUQUcsIGluZGVudCArICJncm91cDoiICsgZ2V0R3JvdXBOYW1lKCkgKyAiIHJvdGF0aW9uIGlzICIgKyBtUm90YXRlKTsKLSAgICAgICAgICAgIExvZy52KExPR1RBRywgaW5kZW50ICsgIm1hdHJpeDoiICsgZ2V0TG9jYWxNYXRyaXgoKS50b1N0cmluZygpKTsKLQotICAgICAgICAgICAgZmluYWwgaW50IGNvdW50ID0gbUNoaWxkcmVuLnNpemUoKTsKLSAgICAgICAgICAgIGlmIChjb3VudCA+IDApIHsKLSAgICAgICAgICAgICAgICBpbmRlbnQgKz0gR1JPVVBfSU5ERU5UOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUaGVuIHByaW50IGFsbCB0aGUgY2hpbGRyZW4gZ3JvdXBzLgotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgVk9iamVjdCBjaGlsZCA9IG1DaGlsZHJlbi5nZXQoaSk7Ci0gICAgICAgICAgICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgVkdyb3VwKSB7Ci0gICAgICAgICAgICAgICAgICAgICgoVkdyb3VwKSBjaGlsZCkucHJpbnRHcm91cFRyZWUoaW5kZW50KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQogICAgICAgICAvKiBTZXR0ZXJzIGFuZCBHZXR0ZXJzLCB1c2VkIGJ5IGFuaW1hdG9yIGZyb20gQW5pbWF0ZWRWZWN0b3JEcmF3YWJsZS4gKi8KICAgICAgICAgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCiAgICAgICAgIHB1YmxpYyBmbG9hdCBnZXRSb3RhdGlvbigpIHsKLSAgICAgICAgICAgIHJldHVybiBtUm90YXRlOworICAgICAgICAgICAgcmV0dXJuIG5HZXRSb3RhdGlvbihtTmF0aXZlUHRyKTsKICAgICAgICAgfQogCiAgICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQogICAgICAgICBwdWJsaWMgdm9pZCBzZXRSb3RhdGlvbihmbG9hdCByb3RhdGlvbikgewotICAgICAgICAgICAgaWYgKHJvdGF0aW9uICE9IG1Sb3RhdGUpIHsKLSAgICAgICAgICAgICAgICBtUm90YXRlID0gcm90YXRpb247Ci0gICAgICAgICAgICAgICAgdXBkYXRlTG9jYWxNYXRyaXgoKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5TZXRSb3RhdGlvbihtTmF0aXZlUHRyLCByb3RhdGlvbik7CiAgICAgICAgIH0KIAogICAgICAgICBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKICAgICAgICAgcHVibGljIGZsb2F0IGdldFBpdm90WCgpIHsKLSAgICAgICAgICAgIHJldHVybiBtUGl2b3RYOworICAgICAgICAgICAgcmV0dXJuIG5HZXRQaXZvdFgobU5hdGl2ZVB0cik7CiAgICAgICAgIH0KIAogICAgICAgICBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKICAgICAgICAgcHVibGljIHZvaWQgc2V0UGl2b3RYKGZsb2F0IHBpdm90WCkgewotICAgICAgICAgICAgaWYgKHBpdm90WCAhPSBtUGl2b3RYKSB7Ci0gICAgICAgICAgICAgICAgbVBpdm90WCA9IHBpdm90WDsKLSAgICAgICAgICAgICAgICB1cGRhdGVMb2NhbE1hdHJpeCgpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgblNldFBpdm90WChtTmF0aXZlUHRyLCBwaXZvdFgpOwogICAgICAgICB9CiAKICAgICAgICAgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCiAgICAgICAgIHB1YmxpYyBmbG9hdCBnZXRQaXZvdFkoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbVBpdm90WTsKKyAgICAgICAgICAgIHJldHVybiBuR2V0UGl2b3RZKG1OYXRpdmVQdHIpOwogICAgICAgICB9CiAKICAgICAgICAgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCiAgICAgICAgIHB1YmxpYyB2b2lkIHNldFBpdm90WShmbG9hdCBwaXZvdFkpIHsKLSAgICAgICAgICAgIGlmIChwaXZvdFkgIT0gbVBpdm90WSkgewotICAgICAgICAgICAgICAgIG1QaXZvdFkgPSBwaXZvdFk7Ci0gICAgICAgICAgICAgICAgdXBkYXRlTG9jYWxNYXRyaXgoKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5TZXRQaXZvdFkobU5hdGl2ZVB0ciwgcGl2b3RZKTsKICAgICAgICAgfQogCiAgICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQogICAgICAgICBwdWJsaWMgZmxvYXQgZ2V0U2NhbGVYKCkgewotICAgICAgICAgICAgcmV0dXJuIG1TY2FsZVg7CisgICAgICAgICAgICByZXR1cm4gbkdldFNjYWxlWChtTmF0aXZlUHRyKTsKICAgICAgICAgfQogCiAgICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQogICAgICAgICBwdWJsaWMgdm9pZCBzZXRTY2FsZVgoZmxvYXQgc2NhbGVYKSB7Ci0gICAgICAgICAgICBpZiAoc2NhbGVYICE9IG1TY2FsZVgpIHsKLSAgICAgICAgICAgICAgICBtU2NhbGVYID0gc2NhbGVYOwotICAgICAgICAgICAgICAgIHVwZGF0ZUxvY2FsTWF0cml4KCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBuU2V0U2NhbGVYKG1OYXRpdmVQdHIsIHNjYWxlWCk7CiAgICAgICAgIH0KIAogICAgICAgICBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKICAgICAgICAgcHVibGljIGZsb2F0IGdldFNjYWxlWSgpIHsKLSAgICAgICAgICAgIHJldHVybiBtU2NhbGVZOworICAgICAgICAgICAgcmV0dXJuIG5HZXRTY2FsZVkobU5hdGl2ZVB0cik7CiAgICAgICAgIH0KIAogICAgICAgICBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKICAgICAgICAgcHVibGljIHZvaWQgc2V0U2NhbGVZKGZsb2F0IHNjYWxlWSkgewotICAgICAgICAgICAgaWYgKHNjYWxlWSAhPSBtU2NhbGVZKSB7Ci0gICAgICAgICAgICAgICAgbVNjYWxlWSA9IHNjYWxlWTsKLSAgICAgICAgICAgICAgICB1cGRhdGVMb2NhbE1hdHJpeCgpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgblNldFNjYWxlWShtTmF0aXZlUHRyLCBzY2FsZVkpOwogICAgICAgICB9CiAKICAgICAgICAgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCiAgICAgICAgIHB1YmxpYyBmbG9hdCBnZXRUcmFuc2xhdGVYKCkgewotICAgICAgICAgICAgcmV0dXJuIG1UcmFuc2xhdGVYOworICAgICAgICAgICAgcmV0dXJuIG5HZXRUcmFuc2xhdGVYKG1OYXRpdmVQdHIpOwogICAgICAgICB9CiAKICAgICAgICAgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCiAgICAgICAgIHB1YmxpYyB2b2lkIHNldFRyYW5zbGF0ZVgoZmxvYXQgdHJhbnNsYXRlWCkgewotICAgICAgICAgICAgaWYgKHRyYW5zbGF0ZVggIT0gbVRyYW5zbGF0ZVgpIHsKLSAgICAgICAgICAgICAgICBtVHJhbnNsYXRlWCA9IHRyYW5zbGF0ZVg7Ci0gICAgICAgICAgICAgICAgdXBkYXRlTG9jYWxNYXRyaXgoKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5TZXRUcmFuc2xhdGVYKG1OYXRpdmVQdHIsIHRyYW5zbGF0ZVgpOwogICAgICAgICB9CiAKICAgICAgICAgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCiAgICAgICAgIHB1YmxpYyBmbG9hdCBnZXRUcmFuc2xhdGVZKCkgewotICAgICAgICAgICAgcmV0dXJuIG1UcmFuc2xhdGVZOworICAgICAgICAgICAgcmV0dXJuIG5HZXRUcmFuc2xhdGVZKG1OYXRpdmVQdHIpOwogICAgICAgICB9CiAKICAgICAgICAgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCiAgICAgICAgIHB1YmxpYyB2b2lkIHNldFRyYW5zbGF0ZVkoZmxvYXQgdHJhbnNsYXRlWSkgewotICAgICAgICAgICAgaWYgKHRyYW5zbGF0ZVkgIT0gbVRyYW5zbGF0ZVkpIHsKLSAgICAgICAgICAgICAgICBtVHJhbnNsYXRlWSA9IHRyYW5zbGF0ZVk7Ci0gICAgICAgICAgICAgICAgdXBkYXRlTG9jYWxNYXRyaXgoKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5TZXRUcmFuc2xhdGVZKG1OYXRpdmVQdHIsIHRyYW5zbGF0ZVkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMzYyLDYgKzExNDgsNyBAQAogICAgICAqLwogICAgIHByaXZhdGUgc3RhdGljIGFic3RyYWN0IGNsYXNzIFZQYXRoIGltcGxlbWVudHMgVk9iamVjdCB7CiAgICAgICAgIHByb3RlY3RlZCBQYXRoUGFyc2VyLlBhdGhEYXRhIG1QYXRoRGF0YSA9IG51bGw7CisKICAgICAgICAgU3RyaW5nIG1QYXRoTmFtZTsKICAgICAgICAgaW50IG1DaGFuZ2luZ0NvbmZpZ3VyYXRpb25zOwogCkBAIC0xMzc5LDEwICsxMTY2LDYgQEAKICAgICAgICAgICAgIHJldHVybiBtUGF0aE5hbWU7CiAgICAgICAgIH0KIAotICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc0NsaXBQYXRoKCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KICAgICAgICAgLyogU2V0dGVycyBhbmQgR2V0dGVycywgdXNlZCBieSBhbmltYXRvciBmcm9tIEFuaW1hdGVkVmVjdG9yRHJhd2FibGUuICovCiAgICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQogICAgICAgICBwdWJsaWMgUGF0aFBhcnNlci5QYXRoRGF0YSBnZXRQYXRoRGF0YSgpIHsKQEAgLTEzOTMsNzkgKzExNzYsNyBAQAogICAgICAgICBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKICAgICAgICAgcHVibGljIHZvaWQgc2V0UGF0aERhdGEoUGF0aFBhcnNlci5QYXRoRGF0YSBwYXRoRGF0YSkgewogICAgICAgICAgICAgbVBhdGhEYXRhLnNldFBhdGhEYXRhKHBhdGhEYXRhKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgZmluYWwgdm9pZCBkcmF3KENhbnZhcyBjYW52YXMsIFRlbXBTdGF0ZSB0ZW1wLCBNYXRyaXggZ3JvdXBTdGFja2VkTWF0cml4LAotICAgICAgICAgICAgICAgIENvbG9yRmlsdGVyIGZpbHRlciwgZmxvYXQgc2NhbGVYLCBmbG9hdCBzY2FsZVkpIHsKLSAgICAgICAgICAgIGZpbmFsIGZsb2F0IG1hdHJpeFNjYWxlID0gVlBhdGguZ2V0TWF0cml4U2NhbGUoZ3JvdXBTdGFja2VkTWF0cml4KTsKLSAgICAgICAgICAgIGlmIChtYXRyaXhTY2FsZSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2hlbiBlaXRoZXIgeCBvciB5IGlzIHNjYWxlZCB0byAwLCB3ZSBkb24ndCBuZWVkIHRvIGRyYXcgYW55dGhpbmcuCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmaW5hbCBQYXRoIHBhdGggPSB0ZW1wLnBhdGg7Ci0gICAgICAgICAgICBwYXRoLnJlc2V0KCk7Ci0gICAgICAgICAgICB0b1BhdGgodGVtcCwgcGF0aCk7Ci0KLSAgICAgICAgICAgIGZpbmFsIE1hdHJpeCBwYXRoTWF0cml4ID0gdGVtcC5wYXRoTWF0cml4OwotICAgICAgICAgICAgcGF0aE1hdHJpeC5zZXQoZ3JvdXBTdGFja2VkTWF0cml4KTsKLSAgICAgICAgICAgIHBhdGhNYXRyaXgucG9zdFNjYWxlKHNjYWxlWCwgc2NhbGVZKTsKLQotICAgICAgICAgICAgZmluYWwgUGF0aCByZW5kZXJQYXRoID0gdGVtcC5yZW5kZXJQYXRoOwotICAgICAgICAgICAgcmVuZGVyUGF0aC5yZXNldCgpOwotICAgICAgICAgICAgcmVuZGVyUGF0aC5hZGRQYXRoKHBhdGgsIHBhdGhNYXRyaXgpOwotCi0gICAgICAgICAgICBmaW5hbCBmbG9hdCBtaW5TY2FsZSA9IE1hdGgubWluKHNjYWxlWCwgc2NhbGVZKTsKLSAgICAgICAgICAgIGZpbmFsIGZsb2F0IHN0cm9rZVNjYWxlID0gbWluU2NhbGUgKiBtYXRyaXhTY2FsZTsKLSAgICAgICAgICAgIGRyYXdQYXRoKHRlbXAsIHJlbmRlclBhdGgsIGNhbnZhcywgZmlsdGVyLCBzdHJva2VTY2FsZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogV3JpdGVzIHRoZSBwYXRoJ3Mgbm9kZXMgdG8gYW4gb3V0cHV0IFBhdGggZm9yIHJlbmRlcmluZy4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIHRlbXAgdGVtcG9yYXJ5IHN0YXRlIHZhcmlhYmxlcwotICAgICAgICAgKiBAcGFyYW0gb3V0UGF0aCB0aGUgb3V0cHV0IHBhdGgKLSAgICAgICAgICovCi0gICAgICAgIHByb3RlY3RlZCB2b2lkIHRvUGF0aChUZW1wU3RhdGUgdGVtcCwgUGF0aCBvdXRQYXRoKSB7Ci0gICAgICAgICAgICBpZiAobVBhdGhEYXRhICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBQYXRoUGFyc2VyLmNyZWF0ZVBhdGhGcm9tUGF0aERhdGEob3V0UGF0aCwgbVBhdGhEYXRhKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBEcmF3cyB0aGUgc3BlY2lmaWVkIHBhdGggaW50byB0aGUgc3VwcGxpZWQgY2FudmFzLgotICAgICAgICAgKi8KLSAgICAgICAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgZHJhd1BhdGgoVGVtcFN0YXRlIHRlbXAsIFBhdGggcGF0aCwgQ2FudmFzIGNhbnZhcywKLSAgICAgICAgICAgICAgICBDb2xvckZpbHRlciBmaWx0ZXIsIGZsb2F0IHN0cm9rZVNjYWxlKTsKLQotICAgICAgICBwcml2YXRlIHN0YXRpYyBmbG9hdCBnZXRNYXRyaXhTY2FsZShNYXRyaXggZ3JvdXBTdGFja2VkTWF0cml4KSB7Ci0gICAgICAgICAgICAvLyBHaXZlbiB1bml0IHZlY3RvcnMgQSA9ICgwLCAxKSBhbmQgQiA9ICgxLCAwKS4KLSAgICAgICAgICAgIC8vIEFmdGVyIG1hdHJpeCBtYXBwaW5nLCB3ZSBnb3QgQScgYW5kIEInLiBMZXQgdGhldGEgPSB0aGUgYW5nZWwgYi90IEEnIGFuZCBCJy4KLSAgICAgICAgICAgIC8vIFRoZXJlZm9yZSwgdGhlIGZpbmFsIHNjYWxlIHdlIHdhbnQgaXMgbWluKHxBJ3wgKiBzaW4odGhldGEpLCB8Qid8ICogc2luKHRoZXRhKSksCi0gICAgICAgICAgICAvLyB3aGljaCBpcyAofEEnfCAqIHxCJ3wgKiBzaW4odGhldGEpKSAvIG1heCAofEEnfCwgfEInfCk7Ci0gICAgICAgICAgICAvLyBJZiAgbWF4ICh8QSd8LCB8Qid8KSA9IDAsIHRoYXQgbWVhbnMgZWl0aGVyIHggb3IgeSBoYXMgYSBzY2FsZSBvZiAwLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIEZvciBub24tc2tldyBjYXNlLCB3aGljaCBpcyBtb3N0IG9mIHRoZSBjYXNlcywgbWF0cml4IHNjYWxlIGlzIGNvbXB1dGluZyBleGFjdGx5IHRoZQotICAgICAgICAgICAgLy8gc2NhbGUgb24geCBhbmQgeSBheGlzLCBhbmQgdGFrZSB0aGUgbWluaW1hbCBvZiB0aGVzZSB0d28uCi0gICAgICAgICAgICAvLyBGb3Igc2tldyBjYXNlLCBhbiB1bml0IHNxdWFyZSB3aWxsIG1hcHBlZCB0byBhIHBhcmFsbGVsb2dyYW0uIEFuZCB0aGlzIGZ1bmN0aW9uIHdpbGwKLSAgICAgICAgICAgIC8vIHJldHVybiB0aGUgbWluaW1hbCBoZWlnaHQgb2YgdGhlIDIgYmFzZXMuCi0gICAgICAgICAgICBmbG9hdFtdIHVuaXRWZWN0b3JzID0gbmV3IGZsb2F0W10gezAsIDEsIDEsIDB9OwotICAgICAgICAgICAgZ3JvdXBTdGFja2VkTWF0cml4Lm1hcFZlY3RvcnModW5pdFZlY3RvcnMpOwotICAgICAgICAgICAgZmxvYXQgc2NhbGVYID0gTWF0aFV0aWxzLm1hZyh1bml0VmVjdG9yc1swXSwgdW5pdFZlY3RvcnNbMV0pOwotICAgICAgICAgICAgZmxvYXQgc2NhbGVZID0gTWF0aFV0aWxzLm1hZyh1bml0VmVjdG9yc1syXSwgdW5pdFZlY3RvcnNbM10pOwotICAgICAgICAgICAgZmxvYXQgY3Jvc3NQcm9kdWN0ID0gTWF0aFV0aWxzLmNyb3NzKHVuaXRWZWN0b3JzWzBdLCB1bml0VmVjdG9yc1sxXSwKLSAgICAgICAgICAgICAgICAgICAgdW5pdFZlY3RvcnNbMl0sIHVuaXRWZWN0b3JzWzNdKTsKLSAgICAgICAgICAgIGZsb2F0IG1heFNjYWxlID0gTWF0aFV0aWxzLm1heChzY2FsZVgsIHNjYWxlWSk7Ci0KLSAgICAgICAgICAgIGZsb2F0IG1hdHJpeFNjYWxlID0gMDsKLSAgICAgICAgICAgIGlmIChtYXhTY2FsZSA+IDApIHsKLSAgICAgICAgICAgICAgICBtYXRyaXhTY2FsZSA9IE1hdGhVdGlscy5hYnMoY3Jvc3NQcm9kdWN0KSAvIG1heFNjYWxlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKERCR19WRUNUT1JfRFJBV0FCTEUpIHsKLSAgICAgICAgICAgICAgICBMb2cuZChMT0dUQUcsICJTY2FsZSB4ICIgKyBzY2FsZVggKyAiIHkgIiArIHNjYWxlWSArICIgZmluYWwgIiArIG1hdHJpeFNjYWxlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBtYXRyaXhTY2FsZTsKKyAgICAgICAgICAgIG5TZXRQYXRoRGF0YShnZXROYXRpdmVQdHIoKSwgbVBhdGhEYXRhLmdldE5hdGl2ZVB0cigpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTQ3MywyMSArMTE4NCwzMSBAQAogICAgICAqIENsaXAgcGF0aCwgd2hpY2ggb25seSBoYXMgbmFtZSBhbmQgcGF0aERhdGEuCiAgICAgICovCiAgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgVkNsaXBQYXRoIGV4dGVuZHMgVlBhdGggeworICAgICAgICBsb25nIG1OYXRpdmVQdHIgPSAwOwogICAgICAgICBwdWJsaWMgVkNsaXBQYXRoKCkgeworICAgICAgICAgICAgbU5hdGl2ZVB0ciA9IG5DcmVhdGVDbGlwUGF0aCgpOwogICAgICAgICAgICAgLy8gRW1wdHkgY29uc3RydWN0b3IuCiAgICAgICAgIH0KIAogICAgICAgICBwdWJsaWMgVkNsaXBQYXRoKFZDbGlwUGF0aCBjb3B5KSB7CiAgICAgICAgICAgICBzdXBlcihjb3B5KTsKKyAgICAgICAgICAgIG1OYXRpdmVQdHIgPSBuQ3JlYXRlQ2xpcFBhdGgoY29weS5tTmF0aXZlUHRyKTsKICAgICAgICAgfQogCiAgICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBkcmF3UGF0aChUZW1wU3RhdGUgdGVtcCwgUGF0aCByZW5kZXJQYXRoLCBDYW52YXMgY2FudmFzLCBDb2xvckZpbHRlciBmaWx0ZXIsCi0gICAgICAgICAgICAgICAgZmxvYXQgc3Ryb2tlU2NhbGUpIHsKLSAgICAgICAgICAgIGNhbnZhcy5jbGlwUGF0aChyZW5kZXJQYXRoKTsKKyAgICAgICAgcHVibGljIGxvbmcgZ2V0TmF0aXZlUHRyKCkgeworICAgICAgICAgICAgcmV0dXJuIG1OYXRpdmVQdHI7CiAgICAgICAgIH0KIAogICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHJvdGVjdGVkIHZvaWQgZmluYWxpemUoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICAgICAgICAgIGlmIChtTmF0aXZlUHRyICE9IDApIHsKKyAgICAgICAgICAgICAgICBuRGVzdHJveShtTmF0aXZlUHRyKTsKKyAgICAgICAgICAgICAgICBtTmF0aXZlUHRyID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN1cGVyLmZpbmFsaXplKCk7CisgICAgICAgIH0KKyAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyB2b2lkIGluZmxhdGUoUmVzb3VyY2VzIHIsIEF0dHJpYnV0ZVNldCBhdHRycywgVGhlbWUgdGhlbWUpIHsKICAgICAgICAgICAgIGZpbmFsIFR5cGVkQXJyYXkgYSA9IG9idGFpbkF0dHJpYnV0ZXMociwgdGhlbWUsIGF0dHJzLAogICAgICAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5WZWN0b3JEcmF3YWJsZUNsaXBQYXRoKTsKQEAgLTE1MjIsOTUgKzEyNDMsNTQgQEAKICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBwYXRoTmFtZSA9IGEuZ2V0U3RyaW5nKFIuc3R5bGVhYmxlLlZlY3RvckRyYXdhYmxlQ2xpcFBhdGhfbmFtZSk7CiAgICAgICAgICAgICBpZiAocGF0aE5hbWUgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIG1QYXRoTmFtZSA9IHBhdGhOYW1lOworICAgICAgICAgICAgICAgIG5TZXROYW1lKG1OYXRpdmVQdHIsIG1QYXRoTmFtZSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBwYXRoRGF0YVN0cmluZyA9IGEuZ2V0U3RyaW5nKFIuc3R5bGVhYmxlLlZlY3RvckRyYXdhYmxlQ2xpcFBhdGhfcGF0aERhdGEpOwogICAgICAgICAgICAgaWYgKHBhdGhEYXRhU3RyaW5nICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBtUGF0aERhdGEgPSBuZXcgUGF0aFBhcnNlci5QYXRoRGF0YShwYXRoRGF0YVN0cmluZyk7CisgICAgICAgICAgICAgICAgblNldFBhdGhTdHJpbmcobU5hdGl2ZVB0ciwgcGF0aERhdGFTdHJpbmcsIHBhdGhEYXRhU3RyaW5nLmxlbmd0aCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc0NsaXBQYXRoKCkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KICAgICB9CiAKICAgICAvKioKICAgICAgKiBOb3JtYWwgcGF0aCwgd2hpY2ggY29udGFpbnMgYWxsIHRoZSBmaWxsIC8gcGFpbnQgaW5mb3JtYXRpb24uCiAgICAgICovCiAgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgVkZ1bGxQYXRoIGV4dGVuZHMgVlBhdGggeworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1RST0tFX1dJRFRIX0lOREVYID0gMDsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNUUk9LRV9DT0xPUl9JTkRFWCA9IDE7CisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTVFJPS0VfQUxQSEFfSU5ERVggPSAyOworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRklMTF9DT0xPUl9JTkRFWCA9IDM7CisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBGSUxMX0FMUEhBX0lOREVYID0gNDsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFRSSU1fUEFUSF9TVEFSVF9JTkRFWCA9IDU7CisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBUUklNX1BBVEhfRU5EX0lOREVYID0gNjsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFRSSU1fUEFUSF9PRkZTRVRfSU5ERVggPSA3OworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1RST0tFX0xJTkVfQ0FQX0lOREVYID0gODsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNUUk9LRV9MSU5FX0pPSU5fSU5ERVggPSA5OworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1RST0tFX01JVEVSX0xJTUlUX0lOREVYID0gMTA7CisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBUT1RBTF9QUk9QRVJUWV9DT1VOVCA9IDExOworCisgICAgICAgIC8vIFRlbXAgYXJyYXkgdG8gc3RvcmUgcHJvcGVydHkgZGF0YSBvYnRhaW5lZCBmcm9tIG5hdGl2ZSBnZXR0ZXIuCisgICAgICAgIHByaXZhdGUgYnl0ZVtdIG1Qcm9wZXJ0eURhdGE7CiAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAgICAgICAgIC8vIFZhcmlhYmxlcyBiZWxvdyBuZWVkIHRvIGJlIGNvcGllZCAoZGVlcCBjb3B5IGlmIGFwcGxpY2FibGUpIGZvciBtdXRhdGlvbi4KICAgICAgICAgcHJpdmF0ZSBpbnRbXSBtVGhlbWVBdHRyczsKLQogICAgICAgICBDb2xvclN0YXRlTGlzdCBtU3Ryb2tlQ29sb3JzID0gbnVsbDsKLSAgICAgICAgaW50IG1TdHJva2VDb2xvciA9IENvbG9yLlRSQU5TUEFSRU5UOwotICAgICAgICBmbG9hdCBtU3Ryb2tlV2lkdGggPSAwOwotCiAgICAgICAgIENvbG9yU3RhdGVMaXN0IG1GaWxsQ29sb3JzID0gbnVsbDsKLSAgICAgICAgaW50IG1GaWxsQ29sb3IgPSBDb2xvci5UUkFOU1BBUkVOVDsKLSAgICAgICAgZmxvYXQgbVN0cm9rZUFscGhhID0gMS4wZjsKLSAgICAgICAgaW50IG1GaWxsUnVsZTsKLSAgICAgICAgZmxvYXQgbUZpbGxBbHBoYSA9IDEuMGY7Ci0gICAgICAgIGZsb2F0IG1UcmltUGF0aFN0YXJ0ID0gMDsKLSAgICAgICAgZmxvYXQgbVRyaW1QYXRoRW5kID0gMTsKLSAgICAgICAgZmxvYXQgbVRyaW1QYXRoT2Zmc2V0ID0gMDsKLQotICAgICAgICBQYWludC5DYXAgbVN0cm9rZUxpbmVDYXAgPSBQYWludC5DYXAuQlVUVDsKLSAgICAgICAgUGFpbnQuSm9pbiBtU3Ryb2tlTGluZUpvaW4gPSBQYWludC5Kb2luLk1JVEVSOwotICAgICAgICBmbG9hdCBtU3Ryb2tlTWl0ZXJsaW1pdCA9IDQ7CisgICAgICAgIHByaXZhdGUgbG9uZyBtTmF0aXZlUHRyID0gMDsKIAogICAgICAgICBwdWJsaWMgVkZ1bGxQYXRoKCkgewogICAgICAgICAgICAgLy8gRW1wdHkgY29uc3RydWN0b3IuCisgICAgICAgICAgICBtTmF0aXZlUHRyID0gbkNyZWF0ZUZ1bGxQYXRoKCk7CiAgICAgICAgIH0KIAogICAgICAgICBwdWJsaWMgVkZ1bGxQYXRoKFZGdWxsUGF0aCBjb3B5KSB7CiAgICAgICAgICAgICBzdXBlcihjb3B5KTsKLQorICAgICAgICAgICAgbU5hdGl2ZVB0ciA9IG5DcmVhdGVGdWxsUGF0aChjb3B5Lm1OYXRpdmVQdHIpOwogICAgICAgICAgICAgbVRoZW1lQXR0cnMgPSBjb3B5Lm1UaGVtZUF0dHJzOwotCiAgICAgICAgICAgICBtU3Ryb2tlQ29sb3JzID0gY29weS5tU3Ryb2tlQ29sb3JzOwotICAgICAgICAgICAgbVN0cm9rZUNvbG9yID0gY29weS5tU3Ryb2tlQ29sb3I7Ci0gICAgICAgICAgICBtU3Ryb2tlV2lkdGggPSBjb3B5Lm1TdHJva2VXaWR0aDsKLSAgICAgICAgICAgIG1TdHJva2VBbHBoYSA9IGNvcHkubVN0cm9rZUFscGhhOwogICAgICAgICAgICAgbUZpbGxDb2xvcnMgPSBjb3B5Lm1GaWxsQ29sb3JzOwotICAgICAgICAgICAgbUZpbGxDb2xvciA9IGNvcHkubUZpbGxDb2xvcjsKLSAgICAgICAgICAgIG1GaWxsUnVsZSA9IGNvcHkubUZpbGxSdWxlOwotICAgICAgICAgICAgbUZpbGxBbHBoYSA9IGNvcHkubUZpbGxBbHBoYTsKLSAgICAgICAgICAgIG1UcmltUGF0aFN0YXJ0ID0gY29weS5tVHJpbVBhdGhTdGFydDsKLSAgICAgICAgICAgIG1UcmltUGF0aEVuZCA9IGNvcHkubVRyaW1QYXRoRW5kOwotICAgICAgICAgICAgbVRyaW1QYXRoT2Zmc2V0ID0gY29weS5tVHJpbVBhdGhPZmZzZXQ7Ci0KLSAgICAgICAgICAgIG1TdHJva2VMaW5lQ2FwID0gY29weS5tU3Ryb2tlTGluZUNhcDsKLSAgICAgICAgICAgIG1TdHJva2VMaW5lSm9pbiA9IGNvcHkubVN0cm9rZUxpbmVKb2luOwotICAgICAgICAgICAgbVN0cm9rZU1pdGVybGltaXQgPSBjb3B5Lm1TdHJva2VNaXRlcmxpbWl0OwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBQYWludC5DYXAgZ2V0U3Ryb2tlTGluZUNhcChpbnQgaWQsIFBhaW50LkNhcCBkZWZWYWx1ZSkgewotICAgICAgICAgICAgc3dpdGNoIChpZCkgewotICAgICAgICAgICAgICAgIGNhc2UgTElORUNBUF9CVVRUOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gUGFpbnQuQ2FwLkJVVFQ7Ci0gICAgICAgICAgICAgICAgY2FzZSBMSU5FQ0FQX1JPVU5EOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gUGFpbnQuQ2FwLlJPVU5EOwotICAgICAgICAgICAgICAgIGNhc2UgTElORUNBUF9TUVVBUkU6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBQYWludC5DYXAuU1FVQVJFOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWZWYWx1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgUGFpbnQuSm9pbiBnZXRTdHJva2VMaW5lSm9pbihpbnQgaWQsIFBhaW50LkpvaW4gZGVmVmFsdWUpIHsKLSAgICAgICAgICAgIHN3aXRjaCAoaWQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIExJTkVKT0lOX01JVEVSOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gUGFpbnQuSm9pbi5NSVRFUjsKLSAgICAgICAgICAgICAgICBjYXNlIExJTkVKT0lOX1JPVU5EOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gUGFpbnQuSm9pbi5ST1VORDsKLSAgICAgICAgICAgICAgICBjYXNlIExJTkVKT0lOX0JFVkVMOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gUGFpbnQuSm9pbi5CRVZFTDsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmVmFsdWU7Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBAT3ZlcnJpZGUKQEAgLTE2MTgsMTcgKzEyOTgsMjIgQEAKICAgICAgICAgICAgIGJvb2xlYW4gY2hhbmdlZCA9IGZhbHNlOwogCiAgICAgICAgICAgICBpZiAobVN0cm9rZUNvbG9ycyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgaW50IG9sZFN0cm9rZUNvbG9yID0gbVN0cm9rZUNvbG9yOwotICAgICAgICAgICAgICAgIG1TdHJva2VDb2xvciA9IG1TdHJva2VDb2xvcnMuZ2V0Q29sb3JGb3JTdGF0ZShzdGF0ZVNldCwgb2xkU3Ryb2tlQ29sb3IpOwotICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gb2xkU3Ryb2tlQ29sb3IgIT0gbVN0cm9rZUNvbG9yOworICAgICAgICAgICAgICAgIGZpbmFsIGludCBvbGRTdHJva2VDb2xvciA9IGdldFN0cm9rZUNvbG9yKCk7CisgICAgICAgICAgICAgICAgZmluYWwgaW50IG5ld1N0cm9rZUNvbG9yID0gbVN0cm9rZUNvbG9ycy5nZXRDb2xvckZvclN0YXRlKHN0YXRlU2V0LCBvbGRTdHJva2VDb2xvcik7CisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBvbGRTdHJva2VDb2xvciAhPSBuZXdTdHJva2VDb2xvcjsKKyAgICAgICAgICAgICAgICBpZiAob2xkU3Ryb2tlQ29sb3IgIT0gbmV3U3Ryb2tlQ29sb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgblNldFN0cm9rZUNvbG9yKG1OYXRpdmVQdHIsIG5ld1N0cm9rZUNvbG9yKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChtRmlsbENvbG9ycyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgaW50IG9sZEZpbGxDb2xvciA9IG1GaWxsQ29sb3I7Ci0gICAgICAgICAgICAgICAgbUZpbGxDb2xvciA9IG1GaWxsQ29sb3JzLmdldENvbG9yRm9yU3RhdGUoc3RhdGVTZXQsIG9sZEZpbGxDb2xvcik7Ci0gICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBvbGRGaWxsQ29sb3IgIT0gbUZpbGxDb2xvcjsKKyAgICAgICAgICAgICAgICBmaW5hbCBpbnQgb2xkRmlsbENvbG9yID0gZ2V0RmlsbENvbG9yKCk7CisgICAgICAgICAgICAgICAgZmluYWwgaW50IG5ld0ZpbGxDb2xvciA9IG1GaWxsQ29sb3JzLmdldENvbG9yRm9yU3RhdGUoc3RhdGVTZXQsIG9sZEZpbGxDb2xvcik7CisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBvbGRGaWxsQ29sb3IgIT0gbmV3RmlsbENvbG9yOworICAgICAgICAgICAgICAgIGlmIChvbGRGaWxsQ29sb3IgIT0gbmV3RmlsbENvbG9yKSB7CisgICAgICAgICAgICAgICAgICAgIG5TZXRGaWxsQ29sb3IobU5hdGl2ZVB0ciwgbmV3RmlsbENvbG9yKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIHJldHVybiBjaGFuZ2VkOwogICAgICAgICB9CiAKQEAgLTE2MzgsMTAxICsxMzIzLDggQEAKICAgICAgICAgfQogCiAgICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCB0b1BhdGgoVGVtcFN0YXRlIHRlbXAsIFBhdGggcGF0aCkgewotICAgICAgICAgICAgc3VwZXIudG9QYXRoKHRlbXAsIHBhdGgpOwotCi0gICAgICAgICAgICBpZiAobVRyaW1QYXRoU3RhcnQgIT0gMC4wZiB8fCBtVHJpbVBhdGhFbmQgIT0gMS4wZikgewotICAgICAgICAgICAgICAgIFZGdWxsUGF0aC5hcHBseVRyaW0odGVtcCwgcGF0aCwgbVRyaW1QYXRoU3RhcnQsIG1UcmltUGF0aEVuZCwgbVRyaW1QYXRoT2Zmc2V0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBkcmF3UGF0aChUZW1wU3RhdGUgdGVtcCwgUGF0aCBwYXRoLCBDYW52YXMgY2FudmFzLCBDb2xvckZpbHRlciBmaWx0ZXIsCi0gICAgICAgICAgICAgICAgZmxvYXQgc3Ryb2tlU2NhbGUpIHsKLSAgICAgICAgICAgIGRyYXdQYXRoRmlsbCh0ZW1wLCBwYXRoLCBjYW52YXMsIGZpbHRlcik7Ci0gICAgICAgICAgICBkcmF3UGF0aFN0cm9rZSh0ZW1wLCBwYXRoLCBjYW52YXMsIGZpbHRlciwgc3Ryb2tlU2NhbGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIERyYXdzIHRoaXMgcGF0aCdzIGZpbGwsIGlmIG5lY2Vzc2FyeS4KLSAgICAgICAgICovCi0gICAgICAgIHByaXZhdGUgdm9pZCBkcmF3UGF0aEZpbGwoVGVtcFN0YXRlIHRlbXAsIFBhdGggcGF0aCwgQ2FudmFzIGNhbnZhcywgQ29sb3JGaWx0ZXIgZmlsdGVyKSB7Ci0gICAgICAgICAgICBpZiAobUZpbGxDb2xvciA9PSBDb2xvci5UUkFOU1BBUkVOVCkgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHRlbXAubUZpbGxQYWludCA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdGVtcC5tRmlsbFBhaW50ID0gbmV3IFBhaW50KCk7Ci0gICAgICAgICAgICAgICAgdGVtcC5tRmlsbFBhaW50LnNldFN0eWxlKFBhaW50LlN0eWxlLkZJTEwpOwotICAgICAgICAgICAgICAgIHRlbXAubUZpbGxQYWludC5zZXRBbnRpQWxpYXModHJ1ZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZpbmFsIFBhaW50IGZpbGxQYWludCA9IHRlbXAubUZpbGxQYWludDsKLSAgICAgICAgICAgIGZpbGxQYWludC5zZXRDb2xvcihhcHBseUFscGhhKG1GaWxsQ29sb3IsIG1GaWxsQWxwaGEpKTsKLSAgICAgICAgICAgIGZpbGxQYWludC5zZXRDb2xvckZpbHRlcihmaWx0ZXIpOwotICAgICAgICAgICAgY2FudmFzLmRyYXdQYXRoKHBhdGgsIGZpbGxQYWludCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogRHJhd3MgdGhpcyBwYXRoJ3Mgc3Ryb2tlLCBpZiBuZWNlc3NhcnkuCi0gICAgICAgICAqLwotICAgICAgICBwcml2YXRlIHZvaWQgZHJhd1BhdGhTdHJva2UoVGVtcFN0YXRlIHRlbXAsIFBhdGggcGF0aCwgQ2FudmFzIGNhbnZhcywgQ29sb3JGaWx0ZXIgZmlsdGVyLAotICAgICAgICAgICAgICAgIGZsb2F0IHN0cm9rZVNjYWxlKSB7Ci0gICAgICAgICAgICBpZiAobVN0cm9rZUNvbG9yID09IENvbG9yLlRSQU5TUEFSRU5UKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodGVtcC5tU3Ryb2tlUGFpbnQgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHRlbXAubVN0cm9rZVBhaW50ID0gbmV3IFBhaW50KCk7Ci0gICAgICAgICAgICAgICAgdGVtcC5tU3Ryb2tlUGFpbnQuc2V0U3R5bGUoUGFpbnQuU3R5bGUuU1RST0tFKTsKLSAgICAgICAgICAgICAgICB0ZW1wLm1TdHJva2VQYWludC5zZXRBbnRpQWxpYXModHJ1ZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZpbmFsIFBhaW50IHN0cm9rZVBhaW50ID0gdGVtcC5tU3Ryb2tlUGFpbnQ7Ci0gICAgICAgICAgICBpZiAobVN0cm9rZUxpbmVKb2luICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBzdHJva2VQYWludC5zZXRTdHJva2VKb2luKG1TdHJva2VMaW5lSm9pbik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChtU3Ryb2tlTGluZUNhcCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgc3Ryb2tlUGFpbnQuc2V0U3Ryb2tlQ2FwKG1TdHJva2VMaW5lQ2FwKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3Ryb2tlUGFpbnQuc2V0U3Ryb2tlTWl0ZXIobVN0cm9rZU1pdGVybGltaXQpOwotICAgICAgICAgICAgc3Ryb2tlUGFpbnQuc2V0Q29sb3IoYXBwbHlBbHBoYShtU3Ryb2tlQ29sb3IsIG1TdHJva2VBbHBoYSkpOwotICAgICAgICAgICAgc3Ryb2tlUGFpbnQuc2V0Q29sb3JGaWx0ZXIoZmlsdGVyKTsKLSAgICAgICAgICAgIHN0cm9rZVBhaW50LnNldFN0cm9rZVdpZHRoKG1TdHJva2VXaWR0aCAqIHN0cm9rZVNjYWxlKTsKLSAgICAgICAgICAgIGNhbnZhcy5kcmF3UGF0aChwYXRoLCBzdHJva2VQYWludCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQXBwbGllcyB0cmltbWluZyB0byB0aGUgc3BlY2lmaWVkIHBhdGguCi0gICAgICAgICAqLwotICAgICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGFwcGx5VHJpbShUZW1wU3RhdGUgdGVtcCwgUGF0aCBwYXRoLCBmbG9hdCBtVHJpbVBhdGhTdGFydCwKLSAgICAgICAgICAgICAgICBmbG9hdCBtVHJpbVBhdGhFbmQsIGZsb2F0IG1UcmltUGF0aE9mZnNldCkgewotICAgICAgICAgICAgaWYgKG1UcmltUGF0aFN0YXJ0ID09IDAuMGYgJiYgbVRyaW1QYXRoRW5kID09IDEuMGYpIHsKLSAgICAgICAgICAgICAgICAvLyBObyB0cmltbWluZyBuZWNlc3NhcnkuCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodGVtcC5tUGF0aE1lYXN1cmUgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHRlbXAubVBhdGhNZWFzdXJlID0gbmV3IFBhdGhNZWFzdXJlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmaW5hbCBQYXRoTWVhc3VyZSBwYXRoTWVhc3VyZSA9IHRlbXAubVBhdGhNZWFzdXJlOwotICAgICAgICAgICAgcGF0aE1lYXN1cmUuc2V0UGF0aChwYXRoLCBmYWxzZSk7Ci0KLSAgICAgICAgICAgIGZpbmFsIGZsb2F0IGxlbiA9IHBhdGhNZWFzdXJlLmdldExlbmd0aCgpOwotICAgICAgICAgICAgZmluYWwgZmxvYXQgc3RhcnQgPSBsZW4gKiAoKG1UcmltUGF0aFN0YXJ0ICsgbVRyaW1QYXRoT2Zmc2V0KSAlIDEuMGYpOwotICAgICAgICAgICAgZmluYWwgZmxvYXQgZW5kID0gbGVuICogKChtVHJpbVBhdGhFbmQgKyBtVHJpbVBhdGhPZmZzZXQpICUgMS4wZik7Ci0gICAgICAgICAgICBwYXRoLnJlc2V0KCk7Ci0gICAgICAgICAgICBpZiAoc3RhcnQgPiBlbmQpIHsKLSAgICAgICAgICAgICAgICBwYXRoTWVhc3VyZS5nZXRTZWdtZW50KHN0YXJ0LCBsZW4sIHBhdGgsIHRydWUpOwotICAgICAgICAgICAgICAgIHBhdGhNZWFzdXJlLmdldFNlZ21lbnQoMCwgZW5kLCBwYXRoLCB0cnVlKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcGF0aE1lYXN1cmUuZ2V0U2VnbWVudChzdGFydCwgZW5kLCBwYXRoLCB0cnVlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gRml4IGJ1ZyBpbiBtZWFzdXJlLgotICAgICAgICAgICAgcGF0aC5yTGluZVRvKDAsIDApOworICAgICAgICBwdWJsaWMgbG9uZyBnZXROYXRpdmVQdHIoKSB7CisgICAgICAgICAgICByZXR1cm4gbU5hdGl2ZVB0cjsKICAgICAgICAgfQogCiAgICAgICAgIEBPdmVycmlkZQpAQCAtMTc0Myw3ICsxMzM1LDQ0IEBACiAgICAgICAgICAgICBhLnJlY3ljbGUoKTsKICAgICAgICAgfQogCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgdm9pZCBmaW5hbGl6ZSgpIHRocm93cyBUaHJvd2FibGUgeworICAgICAgICAgICAgaWYgKG1OYXRpdmVQdHIgIT0gMCkgeworICAgICAgICAgICAgICAgIG5EZXN0cm95KG1OYXRpdmVQdHIpOworICAgICAgICAgICAgICAgIG1OYXRpdmVQdHIgPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3VwZXIuZmluYWxpemUoKTsKKyAgICAgICAgfQorCiAgICAgICAgIHByaXZhdGUgdm9pZCB1cGRhdGVTdGF0ZUZyb21UeXBlZEFycmF5KFR5cGVkQXJyYXkgYSkgeworICAgICAgICAgICAgaW50IGJ5dGVDb3VudCA9IFRPVEFMX1BST1BFUlRZX0NPVU5UICogNDsKKyAgICAgICAgICAgIGlmIChtUHJvcGVydHlEYXRhID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAvLyBMYXp5IGluaXRpYWxpemF0aW9uOiBJZiB0aGUgcGF0aCBpcyBjcmVhdGVkIHRocm91Z2ggY29weSBjb25zdHJ1Y3RvciwgdGhpcyBtYXkKKyAgICAgICAgICAgICAgICAvLyBuZXZlciBnZXQgY2FsbGVkLgorICAgICAgICAgICAgICAgIG1Qcm9wZXJ0eURhdGEgPSBuZXcgYnl0ZVtieXRlQ291bnRdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gVGhlIGJ1bGsgZ2V0dGVycy9zZXR0ZXJzIG9mIHByb3BlcnR5IGRhdGEgKGUuZy4gc3Ryb2tlIHdpZHRoLCBjb2xvciwgZXRjKSBhbGxvd3MgdXMKKyAgICAgICAgICAgIC8vIHRvIHB1bGwgY3VycmVudCB2YWx1ZXMgZnJvbSBuYXRpdmUgYW5kIHN0b3JlIG1vZGlmaWNhdGlvbnMgd2l0aCBvbmx5IHR3byBtZXRob2RzLAorICAgICAgICAgICAgLy8gbWluaW1pemluZyBKTkkgb3ZlcmhlYWQuCisgICAgICAgICAgICBib29sZWFuIHN1Y2Nlc3MgPSBuR2V0RnVsbFBhdGhQcm9wZXJ0aWVzKG1OYXRpdmVQdHIsIG1Qcm9wZXJ0eURhdGEsIGJ5dGVDb3VudCk7CisgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiRXJyb3I6IGluY29uc2lzdGVudCBwcm9wZXJ0eSBjb3VudCIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBCeXRlQnVmZmVyIHByb3BlcnRpZXMgPSBCeXRlQnVmZmVyLndyYXAobVByb3BlcnR5RGF0YSk7CisgICAgICAgICAgICBwcm9wZXJ0aWVzLm9yZGVyKEJ5dGVPcmRlci5uYXRpdmVPcmRlcigpKTsKKyAgICAgICAgICAgIGZsb2F0IHN0cm9rZVdpZHRoID0gcHJvcGVydGllcy5nZXRGbG9hdChTVFJPS0VfV0lEVEhfSU5ERVggKiA0KTsKKyAgICAgICAgICAgIGludCBzdHJva2VDb2xvciA9IHByb3BlcnRpZXMuZ2V0SW50KFNUUk9LRV9DT0xPUl9JTkRFWCAqIDQpOworICAgICAgICAgICAgZmxvYXQgc3Ryb2tlQWxwaGEgPSBwcm9wZXJ0aWVzLmdldEZsb2F0KFNUUk9LRV9BTFBIQV9JTkRFWCAqIDQpOworICAgICAgICAgICAgaW50IGZpbGxDb2xvciA9ICBwcm9wZXJ0aWVzLmdldEludChGSUxMX0NPTE9SX0lOREVYICogNCk7CisgICAgICAgICAgICBmbG9hdCBmaWxsQWxwaGEgPSBwcm9wZXJ0aWVzLmdldEZsb2F0KEZJTExfQUxQSEFfSU5ERVggKiA0KTsKKyAgICAgICAgICAgIGZsb2F0IHRyaW1QYXRoU3RhcnQgPSBwcm9wZXJ0aWVzLmdldEZsb2F0KFRSSU1fUEFUSF9TVEFSVF9JTkRFWCAqIDQpOworICAgICAgICAgICAgZmxvYXQgdHJpbVBhdGhFbmQgPSBwcm9wZXJ0aWVzLmdldEZsb2F0KFRSSU1fUEFUSF9FTkRfSU5ERVggKiA0KTsKKyAgICAgICAgICAgIGZsb2F0IHRyaW1QYXRoT2Zmc2V0ID0gcHJvcGVydGllcy5nZXRGbG9hdChUUklNX1BBVEhfT0ZGU0VUX0lOREVYICogNCk7CisgICAgICAgICAgICBpbnQgc3Ryb2tlTGluZUNhcCA9ICBwcm9wZXJ0aWVzLmdldEludChTVFJPS0VfTElORV9DQVBfSU5ERVggKiA0KTsKKyAgICAgICAgICAgIGludCBzdHJva2VMaW5lSm9pbiA9IHByb3BlcnRpZXMuZ2V0SW50KFNUUk9LRV9MSU5FX0pPSU5fSU5ERVggKiA0KTsKKyAgICAgICAgICAgIGZsb2F0IHN0cm9rZU1pdGVyTGltaXQgPSBwcm9wZXJ0aWVzLmdldEZsb2F0KFNUUk9LRV9NSVRFUl9MSU1JVF9JTkRFWCAqIDQpOworCiAgICAgICAgICAgICAvLyBBY2NvdW50IGZvciBhbnkgY29uZmlndXJhdGlvbiBjaGFuZ2VzLgogICAgICAgICAgICAgbUNoYW5naW5nQ29uZmlndXJhdGlvbnMgfD0gYS5nZXRDaGFuZ2luZ0NvbmZpZ3VyYXRpb25zKCk7CiAKQEAgLTE3NTMsMTEgKzEzODIsMTMgQEAKICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBwYXRoTmFtZSA9IGEuZ2V0U3RyaW5nKFIuc3R5bGVhYmxlLlZlY3RvckRyYXdhYmxlUGF0aF9uYW1lKTsKICAgICAgICAgICAgIGlmIChwYXRoTmFtZSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgbVBhdGhOYW1lID0gcGF0aE5hbWU7CisgICAgICAgICAgICAgICAgblNldE5hbWUobU5hdGl2ZVB0ciwgbVBhdGhOYW1lKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgZmluYWwgU3RyaW5nIHBhdGhTdHJpbmcgPSBhLmdldFN0cmluZyhSLnN0eWxlYWJsZS5WZWN0b3JEcmF3YWJsZVBhdGhfcGF0aERhdGEpOwogICAgICAgICAgICAgaWYgKHBhdGhTdHJpbmcgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIG1QYXRoRGF0YSA9IG5ldyBQYXRoUGFyc2VyLlBhdGhEYXRhKHBhdGhTdHJpbmcpOworICAgICAgICAgICAgICAgIG5TZXRQYXRoU3RyaW5nKG1OYXRpdmVQdHIsIHBhdGhTdHJpbmcsIHBhdGhTdHJpbmcubGVuZ3RoKCkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBmaW5hbCBDb2xvclN0YXRlTGlzdCBmaWxsQ29sb3JzID0gYS5nZXRDb2xvclN0YXRlTGlzdCgKQEAgLTE3NjYsNyArMTM5Nyw3IEBACiAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGNvbG9yIHN0YXRlIGxpc3QgaXNuJ3Qgc3RhdGVmdWwsIGRpc2NhcmQgdGhlIHN0YXRlCiAgICAgICAgICAgICAgICAgLy8gbGlzdCBhbmQga2VlcCB0aGUgZGVmYXVsdCAoZS5nLiB0aGUgb25seSkgY29sb3IuCiAgICAgICAgICAgICAgICAgbUZpbGxDb2xvcnMgPSBmaWxsQ29sb3JzLmlzU3RhdGVmdWwoKSA/IGZpbGxDb2xvcnMgOiBudWxsOwotICAgICAgICAgICAgICAgIG1GaWxsQ29sb3IgPSBmaWxsQ29sb3JzLmdldERlZmF1bHRDb2xvcigpOworICAgICAgICAgICAgICAgIGZpbGxDb2xvciA9IGZpbGxDb2xvcnMuZ2V0RGVmYXVsdENvbG9yKCk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGZpbmFsIENvbG9yU3RhdGVMaXN0IHN0cm9rZUNvbG9ycyA9IGEuZ2V0Q29sb3JTdGF0ZUxpc3QoCkBAIC0xNzc1LDIzICsxNDA2LDMwIEBACiAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGNvbG9yIHN0YXRlIGxpc3QgaXNuJ3Qgc3RhdGVmdWwsIGRpc2NhcmQgdGhlIHN0YXRlCiAgICAgICAgICAgICAgICAgLy8gbGlzdCBhbmQga2VlcCB0aGUgZGVmYXVsdCAoZS5nLiB0aGUgb25seSkgY29sb3IuCiAgICAgICAgICAgICAgICAgbVN0cm9rZUNvbG9ycyA9IHN0cm9rZUNvbG9ycy5pc1N0YXRlZnVsKCkgPyBzdHJva2VDb2xvcnMgOiBudWxsOwotICAgICAgICAgICAgICAgIG1TdHJva2VDb2xvciA9IHN0cm9rZUNvbG9ycy5nZXREZWZhdWx0Q29sb3IoKTsKKyAgICAgICAgICAgICAgICBzdHJva2VDb2xvciA9IHN0cm9rZUNvbG9ycy5nZXREZWZhdWx0Q29sb3IoKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpbGxBbHBoYSA9IGEuZ2V0RmxvYXQoUi5zdHlsZWFibGUuVmVjdG9yRHJhd2FibGVQYXRoX2ZpbGxBbHBoYSwgZmlsbEFscGhhKTsKIAotICAgICAgICAgICAgbUZpbGxBbHBoYSA9IGEuZ2V0RmxvYXQoUi5zdHlsZWFibGUuVmVjdG9yRHJhd2FibGVQYXRoX2ZpbGxBbHBoYSwgbUZpbGxBbHBoYSk7Ci0gICAgICAgICAgICBtU3Ryb2tlTGluZUNhcCA9IGdldFN0cm9rZUxpbmVDYXAoYS5nZXRJbnQoCi0gICAgICAgICAgICAgICAgICAgIFIuc3R5bGVhYmxlLlZlY3RvckRyYXdhYmxlUGF0aF9zdHJva2VMaW5lQ2FwLCAtMSksIG1TdHJva2VMaW5lQ2FwKTsKLSAgICAgICAgICAgIG1TdHJva2VMaW5lSm9pbiA9IGdldFN0cm9rZUxpbmVKb2luKGEuZ2V0SW50KAotICAgICAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5WZWN0b3JEcmF3YWJsZVBhdGhfc3Ryb2tlTGluZUpvaW4sIC0xKSwgbVN0cm9rZUxpbmVKb2luKTsKLSAgICAgICAgICAgIG1TdHJva2VNaXRlcmxpbWl0ID0gYS5nZXRGbG9hdCgKLSAgICAgICAgICAgICAgICAgICAgUi5zdHlsZWFibGUuVmVjdG9yRHJhd2FibGVQYXRoX3N0cm9rZU1pdGVyTGltaXQsIG1TdHJva2VNaXRlcmxpbWl0KTsKLSAgICAgICAgICAgIG1TdHJva2VBbHBoYSA9IGEuZ2V0RmxvYXQoUi5zdHlsZWFibGUuVmVjdG9yRHJhd2FibGVQYXRoX3N0cm9rZUFscGhhLCBtU3Ryb2tlQWxwaGEpOwotICAgICAgICAgICAgbVN0cm9rZVdpZHRoID0gYS5nZXRGbG9hdChSLnN0eWxlYWJsZS5WZWN0b3JEcmF3YWJsZVBhdGhfc3Ryb2tlV2lkdGgsIG1TdHJva2VXaWR0aCk7Ci0gICAgICAgICAgICBtVHJpbVBhdGhFbmQgPSBhLmdldEZsb2F0KFIuc3R5bGVhYmxlLlZlY3RvckRyYXdhYmxlUGF0aF90cmltUGF0aEVuZCwgbVRyaW1QYXRoRW5kKTsKLSAgICAgICAgICAgIG1UcmltUGF0aE9mZnNldCA9IGEuZ2V0RmxvYXQoCi0gICAgICAgICAgICAgICAgICAgIFIuc3R5bGVhYmxlLlZlY3RvckRyYXdhYmxlUGF0aF90cmltUGF0aE9mZnNldCwgbVRyaW1QYXRoT2Zmc2V0KTsKLSAgICAgICAgICAgIG1UcmltUGF0aFN0YXJ0ID0gYS5nZXRGbG9hdCgKLSAgICAgICAgICAgICAgICAgICAgUi5zdHlsZWFibGUuVmVjdG9yRHJhd2FibGVQYXRoX3RyaW1QYXRoU3RhcnQsIG1UcmltUGF0aFN0YXJ0KTsKKyAgICAgICAgICAgIHN0cm9rZUxpbmVDYXAgPSBhLmdldEludCgKKyAgICAgICAgICAgICAgICAgICAgUi5zdHlsZWFibGUuVmVjdG9yRHJhd2FibGVQYXRoX3N0cm9rZUxpbmVDYXAsIHN0cm9rZUxpbmVDYXApOworICAgICAgICAgICAgc3Ryb2tlTGluZUpvaW4gPSBhLmdldEludCgKKyAgICAgICAgICAgICAgICAgICAgUi5zdHlsZWFibGUuVmVjdG9yRHJhd2FibGVQYXRoX3N0cm9rZUxpbmVKb2luLCBzdHJva2VMaW5lSm9pbik7CisgICAgICAgICAgICBzdHJva2VNaXRlckxpbWl0ID0gYS5nZXRGbG9hdCgKKyAgICAgICAgICAgICAgICAgICAgUi5zdHlsZWFibGUuVmVjdG9yRHJhd2FibGVQYXRoX3N0cm9rZU1pdGVyTGltaXQsIHN0cm9rZU1pdGVyTGltaXQpOworICAgICAgICAgICAgc3Ryb2tlQWxwaGEgPSBhLmdldEZsb2F0KFIuc3R5bGVhYmxlLlZlY3RvckRyYXdhYmxlUGF0aF9zdHJva2VBbHBoYSwKKyAgICAgICAgICAgICAgICAgICAgc3Ryb2tlQWxwaGEpOworICAgICAgICAgICAgc3Ryb2tlV2lkdGggPSBhLmdldEZsb2F0KFIuc3R5bGVhYmxlLlZlY3RvckRyYXdhYmxlUGF0aF9zdHJva2VXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGgpOworICAgICAgICAgICAgdHJpbVBhdGhFbmQgPSBhLmdldEZsb2F0KFIuc3R5bGVhYmxlLlZlY3RvckRyYXdhYmxlUGF0aF90cmltUGF0aEVuZCwKKyAgICAgICAgICAgICAgICAgICAgdHJpbVBhdGhFbmQpOworICAgICAgICAgICAgdHJpbVBhdGhPZmZzZXQgPSBhLmdldEZsb2F0KAorICAgICAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5WZWN0b3JEcmF3YWJsZVBhdGhfdHJpbVBhdGhPZmZzZXQsIHRyaW1QYXRoT2Zmc2V0KTsKKyAgICAgICAgICAgIHRyaW1QYXRoU3RhcnQgPSBhLmdldEZsb2F0KAorICAgICAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5WZWN0b3JEcmF3YWJsZVBhdGhfdHJpbVBhdGhTdGFydCwgdHJpbVBhdGhTdGFydCk7CisKKyAgICAgICAgICAgIG5VcGRhdGVGdWxsUGF0aFByb3BlcnRpZXMobU5hdGl2ZVB0ciwgc3Ryb2tlV2lkdGgsIHN0cm9rZUNvbG9yLCBzdHJva2VBbHBoYSwKKyAgICAgICAgICAgICAgICAgICAgZmlsbENvbG9yLCBmaWxsQWxwaGEsIHRyaW1QYXRoU3RhcnQsIHRyaW1QYXRoRW5kLCB0cmltUGF0aE9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgc3Ryb2tlTWl0ZXJMaW1pdCwgc3Ryb2tlTGluZUNhcCwgc3Ryb2tlTGluZUpvaW4pOwogICAgICAgICB9CiAKICAgICAgICAgQE92ZXJyaWRlCkBAIC0xODEzLDEwNCArMTQ1MSwxNjkgQEAKICAgICAgICAgLyogU2V0dGVycyBhbmQgR2V0dGVycywgdXNlZCBieSBhbmltYXRvciBmcm9tIEFuaW1hdGVkVmVjdG9yRHJhd2FibGUuICovCiAgICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQogICAgICAgICBpbnQgZ2V0U3Ryb2tlQ29sb3IoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbVN0cm9rZUNvbG9yOworICAgICAgICAgICAgcmV0dXJuIG5HZXRTdHJva2VDb2xvcihtTmF0aXZlUHRyKTsKICAgICAgICAgfQogCiAgICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQogICAgICAgICB2b2lkIHNldFN0cm9rZUNvbG9yKGludCBzdHJva2VDb2xvcikgewogICAgICAgICAgICAgbVN0cm9rZUNvbG9ycyA9IG51bGw7Ci0gICAgICAgICAgICBtU3Ryb2tlQ29sb3IgPSBzdHJva2VDb2xvcjsKKyAgICAgICAgICAgIG5TZXRTdHJva2VDb2xvcihtTmF0aXZlUHRyLCBzdHJva2VDb2xvcik7CiAgICAgICAgIH0KIAogICAgICAgICBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKICAgICAgICAgZmxvYXQgZ2V0U3Ryb2tlV2lkdGgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbVN0cm9rZVdpZHRoOworICAgICAgICAgICAgcmV0dXJuIG5HZXRTdHJva2VXaWR0aChtTmF0aXZlUHRyKTsKICAgICAgICAgfQogCiAgICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQogICAgICAgICB2b2lkIHNldFN0cm9rZVdpZHRoKGZsb2F0IHN0cm9rZVdpZHRoKSB7Ci0gICAgICAgICAgICBtU3Ryb2tlV2lkdGggPSBzdHJva2VXaWR0aDsKKyAgICAgICAgICAgIG5TZXRTdHJva2VXaWR0aChtTmF0aXZlUHRyLCBzdHJva2VXaWR0aCk7CiAgICAgICAgIH0KIAogICAgICAgICBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKICAgICAgICAgZmxvYXQgZ2V0U3Ryb2tlQWxwaGEoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbVN0cm9rZUFscGhhOworICAgICAgICAgICAgcmV0dXJuIG5HZXRTdHJva2VBbHBoYShtTmF0aXZlUHRyKTsKICAgICAgICAgfQogCiAgICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQogICAgICAgICB2b2lkIHNldFN0cm9rZUFscGhhKGZsb2F0IHN0cm9rZUFscGhhKSB7Ci0gICAgICAgICAgICBtU3Ryb2tlQWxwaGEgPSBzdHJva2VBbHBoYTsKKyAgICAgICAgICAgIG5TZXRTdHJva2VBbHBoYShtTmF0aXZlUHRyLCBzdHJva2VBbHBoYSk7CiAgICAgICAgIH0KIAogICAgICAgICBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKICAgICAgICAgaW50IGdldEZpbGxDb2xvcigpIHsKLSAgICAgICAgICAgIHJldHVybiBtRmlsbENvbG9yOworICAgICAgICAgICAgcmV0dXJuIG5HZXRGaWxsQ29sb3IobU5hdGl2ZVB0cik7CiAgICAgICAgIH0KIAogICAgICAgICBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKICAgICAgICAgdm9pZCBzZXRGaWxsQ29sb3IoaW50IGZpbGxDb2xvcikgewogICAgICAgICAgICAgbUZpbGxDb2xvcnMgPSBudWxsOwotICAgICAgICAgICAgbUZpbGxDb2xvciA9IGZpbGxDb2xvcjsKKyAgICAgICAgICAgIG5TZXRGaWxsQ29sb3IobU5hdGl2ZVB0ciwgZmlsbENvbG9yKTsKICAgICAgICAgfQogCiAgICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQogICAgICAgICBmbG9hdCBnZXRGaWxsQWxwaGEoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbUZpbGxBbHBoYTsKKyAgICAgICAgICAgIHJldHVybiBuR2V0RmlsbEFscGhhKG1OYXRpdmVQdHIpOwogICAgICAgICB9CiAKICAgICAgICAgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCiAgICAgICAgIHZvaWQgc2V0RmlsbEFscGhhKGZsb2F0IGZpbGxBbHBoYSkgewotICAgICAgICAgICAgbUZpbGxBbHBoYSA9IGZpbGxBbHBoYTsKKyAgICAgICAgICAgIG5TZXRGaWxsQWxwaGEobU5hdGl2ZVB0ciwgZmlsbEFscGhhKTsKICAgICAgICAgfQogCiAgICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQogICAgICAgICBmbG9hdCBnZXRUcmltUGF0aFN0YXJ0KCkgewotICAgICAgICAgICAgcmV0dXJuIG1UcmltUGF0aFN0YXJ0OworICAgICAgICAgICAgcmV0dXJuIG5HZXRUcmltUGF0aFN0YXJ0KG1OYXRpdmVQdHIpOwogICAgICAgICB9CiAKICAgICAgICAgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCiAgICAgICAgIHZvaWQgc2V0VHJpbVBhdGhTdGFydChmbG9hdCB0cmltUGF0aFN0YXJ0KSB7Ci0gICAgICAgICAgICBtVHJpbVBhdGhTdGFydCA9IHRyaW1QYXRoU3RhcnQ7CisgICAgICAgICAgICBuU2V0VHJpbVBhdGhTdGFydChtTmF0aXZlUHRyLCB0cmltUGF0aFN0YXJ0KTsKICAgICAgICAgfQogCiAgICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQogICAgICAgICBmbG9hdCBnZXRUcmltUGF0aEVuZCgpIHsKLSAgICAgICAgICAgIHJldHVybiBtVHJpbVBhdGhFbmQ7CisgICAgICAgICAgICByZXR1cm4gbkdldFRyaW1QYXRoRW5kKG1OYXRpdmVQdHIpOwogICAgICAgICB9CiAKICAgICAgICAgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCiAgICAgICAgIHZvaWQgc2V0VHJpbVBhdGhFbmQoZmxvYXQgdHJpbVBhdGhFbmQpIHsKLSAgICAgICAgICAgIG1UcmltUGF0aEVuZCA9IHRyaW1QYXRoRW5kOworICAgICAgICAgICAgblNldFRyaW1QYXRoRW5kKG1OYXRpdmVQdHIsIHRyaW1QYXRoRW5kKTsKICAgICAgICAgfQogCiAgICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQogICAgICAgICBmbG9hdCBnZXRUcmltUGF0aE9mZnNldCgpIHsKLSAgICAgICAgICAgIHJldHVybiBtVHJpbVBhdGhPZmZzZXQ7CisgICAgICAgICAgICByZXR1cm4gbkdldFRyaW1QYXRoT2Zmc2V0KG1OYXRpdmVQdHIpOwogICAgICAgICB9CiAKICAgICAgICAgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCiAgICAgICAgIHZvaWQgc2V0VHJpbVBhdGhPZmZzZXQoZmxvYXQgdHJpbVBhdGhPZmZzZXQpIHsKLSAgICAgICAgICAgIG1UcmltUGF0aE9mZnNldCA9IHRyaW1QYXRoT2Zmc2V0OworICAgICAgICAgICAgblNldFRyaW1QYXRoT2Zmc2V0KG1OYXRpdmVQdHIsIHRyaW1QYXRoT2Zmc2V0KTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHN0YXRpYyBjbGFzcyBUZW1wU3RhdGUgewotICAgICAgICBmaW5hbCBNYXRyaXggcGF0aE1hdHJpeCA9IG5ldyBNYXRyaXgoKTsKLSAgICAgICAgZmluYWwgUGF0aCBwYXRoID0gbmV3IFBhdGgoKTsKLSAgICAgICAgZmluYWwgUGF0aCByZW5kZXJQYXRoID0gbmV3IFBhdGgoKTsKLQotICAgICAgICBQYXRoTWVhc3VyZSBtUGF0aE1lYXN1cmU7Ci0gICAgICAgIFBhaW50IG1GaWxsUGFpbnQ7Ci0gICAgICAgIFBhaW50IG1TdHJva2VQYWludDsKLSAgICB9Ci0KICAgICBpbnRlcmZhY2UgVk9iamVjdCB7Ci0gICAgICAgIHZvaWQgZHJhdyhDYW52YXMgY2FudmFzLCBUZW1wU3RhdGUgdGVtcCwgTWF0cml4IGN1cnJlbnRNYXRyaXgsCi0gICAgICAgICAgICAgICAgQ29sb3JGaWx0ZXIgZmlsdGVyLCBmbG9hdCBzY2FsZVgsIGZsb2F0IHNjYWxlWSk7CisgICAgICAgIGxvbmcgZ2V0TmF0aXZlUHRyKCk7CiAgICAgICAgIHZvaWQgaW5mbGF0ZShSZXNvdXJjZXMgciwgQXR0cmlidXRlU2V0IGF0dHJzLCBUaGVtZSB0aGVtZSk7CiAgICAgICAgIGJvb2xlYW4gY2FuQXBwbHlUaGVtZSgpOwogICAgICAgICB2b2lkIGFwcGx5VGhlbWUoVGhlbWUgdCk7CiAgICAgICAgIGJvb2xlYW4gb25TdGF0ZUNoYW5nZShpbnRbXSBzdGF0ZSk7CiAgICAgICAgIGJvb2xlYW4gaXNTdGF0ZWZ1bCgpOwogICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBsb25nIG5DcmVhdGVSZW5kZXJlcihsb25nIHJvb3RHcm91cFB0cik7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgbkRlc3Ryb3lSZW5kZXJlcihsb25nIHJlbmRlcmVyUHRyKTsKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuU2V0UmVuZGVyZXJWaWV3cG9ydFNpemUobG9uZyByZW5kZXJlclB0ciwgZmxvYXQgdmlld3BvcnRXaWR0aCwKKyAgICAgICAgICAgIGZsb2F0IHZpZXdwb3J0SGVpZ2h0KTsKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgYm9vbGVhbiBuU2V0Um9vdEFscGhhKGxvbmcgcmVuZGVyZXJQdHIsIGZsb2F0IGFscGhhKTsKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgZmxvYXQgbkdldFJvb3RBbHBoYShsb25nIHJlbmRlcmVyUHRyKTsKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuU2V0QWxsb3dDYWNoaW5nKGxvbmcgcmVuZGVyZXJQdHIsIGJvb2xlYW4gYWxsb3dDYWNoaW5nKTsKKworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIG5EcmF3KGxvbmcgcmVuZGVyZXJQdHIsIGxvbmcgY2FudmFzV3JhcHBlclB0ciwKKyAgICAgICAgICAgIGxvbmcgY29sb3JGaWx0ZXJQdHIsIFJlY3QgYm91bmRzLCBib29sZWFuIG5lZWRzTWlycm9yaW5nLCBib29sZWFuIGNhblJldXNlQ2FjaGUpOworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBsb25nIG5DcmVhdGVGdWxsUGF0aCgpOworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBsb25nIG5DcmVhdGVGdWxsUGF0aChsb25nIG1OYXRpdmVGdWxsUGF0aFB0cik7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGJvb2xlYW4gbkdldEZ1bGxQYXRoUHJvcGVydGllcyhsb25nIHBhdGhQdHIsIGJ5dGVbXSBwcm9wZXJ0aWVzLAorICAgICAgICAgICAgaW50IGxlbmd0aCk7CisKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuVXBkYXRlRnVsbFBhdGhQcm9wZXJ0aWVzKGxvbmcgcGF0aFB0ciwgZmxvYXQgc3Ryb2tlV2lkdGgsCisgICAgICAgICAgICBpbnQgc3Ryb2tlQ29sb3IsIGZsb2F0IHN0cm9rZUFscGhhLCBpbnQgZmlsbENvbG9yLCBmbG9hdCBmaWxsQWxwaGEsIGZsb2F0IHRyaW1QYXRoU3RhcnQsCisgICAgICAgICAgICBmbG9hdCB0cmltUGF0aEVuZCwgZmxvYXQgdHJpbVBhdGhPZmZzZXQsIGZsb2F0IHN0cm9rZU1pdGVyTGltaXQsIGludCBzdHJva2VMaW5lQ2FwLAorICAgICAgICAgICAgaW50IHN0cm9rZUxpbmVKb2luKTsKKworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBsb25nIG5DcmVhdGVDbGlwUGF0aCgpOworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBsb25nIG5DcmVhdGVDbGlwUGF0aChsb25nIGNsaXBQYXRoUHRyKTsKKworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBsb25nIG5DcmVhdGVHcm91cCgpOworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBsb25nIG5DcmVhdGVHcm91cChsb25nIGdyb3VwUHRyKTsKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuRGVzdHJveShsb25nIG5vZGVQdHIpOworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIG5TZXROYW1lKGxvbmcgbm9kZVB0ciwgU3RyaW5nIG5hbWUpOworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBib29sZWFuIG5HZXRHcm91cFByb3BlcnRpZXMobG9uZyBncm91cFB0ciwgZmxvYXRbXSBwcm9wZXJ0aWVzLAorICAgICAgICAgICAgaW50IGxlbmd0aCk7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgblVwZGF0ZUdyb3VwUHJvcGVydGllcyhsb25nIGdyb3VwUHRyLCBmbG9hdCByb3RhdGUsIGZsb2F0IHBpdm90WCwKKyAgICAgICAgICAgIGZsb2F0IHBpdm90WSwgZmxvYXQgc2NhbGVYLCBmbG9hdCBzY2FsZVksIGZsb2F0IHRyYW5zbGF0ZVgsIGZsb2F0IHRyYW5zbGF0ZVkpOworCisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgbkFkZENoaWxkKGxvbmcgZ3JvdXBQdHIsIGxvbmcgbm9kZVB0cik7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgblNldFBhdGhTdHJpbmcobG9uZyBwYXRoUHRyLCBTdHJpbmcgcGF0aFN0cmluZywgaW50IGxlbmd0aCk7CisKKyAgICAvKioKKyAgICAgKiBUaGUgc2V0dGVycyBhbmQgZ2V0dGVycyBiZWxvdyBmb3IgcGF0aHMgYW5kIGdyb3VwcyBhcmUgaGVyZSB0ZW1wb3JhcmlseSwgYW5kIHdpbGwgYmUKKyAgICAgKiByZW1vdmVkIG9uY2UgdGhlIGFuaW1hdGlvbiBpbiBBVkQgaXMgcmVwbGFjZWQgd2l0aCBSZW5kZXJOb2RlQW5pbWF0b3IsIGluIHdoaWNoIGNhc2UgdGhlCisgICAgICogYW5pbWF0aW9uIHdpbGwgbW9kaWZ5IHRoZXNlIHByb3BlcnRpZXMgaW4gbmF0aXZlLiBCeSB0aGVuIG5vIEpOSSBob3BwaW5nIHdvdWxkIGJlIG5lY2Vzc2FyeQorICAgICAqIGZvciBWRCBkdXJpbmcgYW5pbWF0aW9uLCBhbmQgdGhlc2Ugc2V0dGVycyBhbmQgZ2V0dGVycyB3aWxsIGJlIG9ic29sZXRlLgorICAgICAqLworICAgIC8vIFNldHRlcnMgYW5kIGdldHRlcnMgZHVyaW5nIGFuaW1hdGlvbi4KKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgZmxvYXQgbkdldFJvdGF0aW9uKGxvbmcgZ3JvdXBQdHIpOworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIG5TZXRSb3RhdGlvbihsb25nIGdyb3VwUHRyLCBmbG9hdCByb3RhdGlvbik7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGZsb2F0IG5HZXRQaXZvdFgobG9uZyBncm91cFB0cik7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgblNldFBpdm90WChsb25nIGdyb3VwUHRyLCBmbG9hdCBwaXZvdFgpOworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBmbG9hdCBuR2V0UGl2b3RZKGxvbmcgZ3JvdXBQdHIpOworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIG5TZXRQaXZvdFkobG9uZyBncm91cFB0ciwgZmxvYXQgcGl2b3RZKTsKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgZmxvYXQgbkdldFNjYWxlWChsb25nIGdyb3VwUHRyKTsKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuU2V0U2NhbGVYKGxvbmcgZ3JvdXBQdHIsIGZsb2F0IHNjYWxlWCk7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGZsb2F0IG5HZXRTY2FsZVkobG9uZyBncm91cFB0cik7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgblNldFNjYWxlWShsb25nIGdyb3VwUHRyLCBmbG9hdCBzY2FsZVkpOworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBmbG9hdCBuR2V0VHJhbnNsYXRlWChsb25nIGdyb3VwUHRyKTsKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuU2V0VHJhbnNsYXRlWChsb25nIGdyb3VwUHRyLCBmbG9hdCB0cmFuc2xhdGVYKTsKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgZmxvYXQgbkdldFRyYW5zbGF0ZVkobG9uZyBncm91cFB0cik7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgblNldFRyYW5zbGF0ZVkobG9uZyBncm91cFB0ciwgZmxvYXQgdHJhbnNsYXRlWSk7CisKKyAgICAvLyBTZXR0ZXJzIGFuZCBnZXR0ZXJzIGZvciBWUGF0aCBkdXJpbmcgYW5pbWF0aW9uLgorICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIG5TZXRQYXRoRGF0YShsb25nIHBhdGhQdHIsIGxvbmcgcGF0aERhdGFQdHIpOworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBmbG9hdCBuR2V0U3Ryb2tlV2lkdGgobG9uZyBwYXRoUHRyKTsKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuU2V0U3Ryb2tlV2lkdGgobG9uZyBwYXRoUHRyLCBmbG9hdCB3aWR0aCk7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGludCBuR2V0U3Ryb2tlQ29sb3IobG9uZyBwYXRoUHRyKTsKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuU2V0U3Ryb2tlQ29sb3IobG9uZyBwYXRoUHRyLCBpbnQgc3Ryb2tlQ29sb3IpOworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBmbG9hdCBuR2V0U3Ryb2tlQWxwaGEobG9uZyBwYXRoUHRyKTsKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuU2V0U3Ryb2tlQWxwaGEobG9uZyBwYXRoUHRyLCBmbG9hdCBhbHBoYSk7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGludCBuR2V0RmlsbENvbG9yKGxvbmcgcGF0aFB0cik7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgblNldEZpbGxDb2xvcihsb25nIHBhdGhQdHIsIGludCBmaWxsQ29sb3IpOworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBmbG9hdCBuR2V0RmlsbEFscGhhKGxvbmcgcGF0aFB0cik7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgblNldEZpbGxBbHBoYShsb25nIHBhdGhQdHIsIGZsb2F0IGZpbGxBbHBoYSk7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGZsb2F0IG5HZXRUcmltUGF0aFN0YXJ0KGxvbmcgcGF0aFB0cik7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgblNldFRyaW1QYXRoU3RhcnQobG9uZyBwYXRoUHRyLCBmbG9hdCB0cmltUGF0aFN0YXJ0KTsKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgZmxvYXQgbkdldFRyaW1QYXRoRW5kKGxvbmcgcGF0aFB0cik7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgblNldFRyaW1QYXRoRW5kKGxvbmcgcGF0aFB0ciwgZmxvYXQgdHJpbVBhdGhFbmQpOworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBmbG9hdCBuR2V0VHJpbVBhdGhPZmZzZXQobG9uZyBwYXRoUHRyKTsKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuU2V0VHJpbVBhdGhPZmZzZXQobG9uZyBwYXRoUHRyLCBmbG9hdCB0cmltUGF0aE9mZnNldCk7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FuZHJvaWRmdy9Bc3NldE1hbmFnZXIuaCBiL2luY2x1ZGUvYW5kcm9pZGZ3L0Fzc2V0TWFuYWdlci5oCmluZGV4IDNkNGU0N2QuLjkxNGFjM2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYW5kcm9pZGZ3L0Fzc2V0TWFuYWdlci5oCisrKyBiL2luY2x1ZGUvYW5kcm9pZGZ3L0Fzc2V0TWFuYWdlci5oCkBAIC0xMDAsMTYgKzEwMCwxNyBAQAogICAgICAqIHRoZW4gb24gc3VjY2VzcywgKmNvb2tpZSBpcyBzZXQgdG8gdGhlIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gdGhlCiAgICAgICogbmV3bHktYWRkZWQgYXNzZXQgc291cmNlLgogICAgICAqLwotICAgIGJvb2wgYWRkQXNzZXRQYXRoKGNvbnN0IFN0cmluZzgmIHBhdGgsIGludDMyX3QqIGNvb2tpZSwgYm9vbCBhcHBBc0xpYj1mYWxzZSk7CisgICAgYm9vbCBhZGRBc3NldFBhdGgoY29uc3QgU3RyaW5nOCYgcGF0aCwgaW50MzJfdCogY29va2llLAorICAgICAgICBib29sIGFwcEFzTGliPWZhbHNlLCBib29sIGlzU3lzdGVtQXNzZXQ9ZmFsc2UpOwogICAgIGJvb2wgYWRkT3ZlcmxheVBhdGgoY29uc3QgU3RyaW5nOCYgcGF0aCwgaW50MzJfdCogY29va2llKTsKIAotICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAvKgogICAgICAqIENvbnZlbmllbmNlIGZvciBhZGRpbmcgdGhlIHN0YW5kYXJkIHN5c3RlbSBhc3NldHMuICBVc2VzIHRoZQogICAgICAqIEFORFJPSURfUk9PVCBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBmaW5kIHRoZW0uCiAgICAgICovCiAgICAgYm9vbCBhZGREZWZhdWx0QXNzZXRzKCk7CiAKLSAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgLyoKICAgICAgKiBJdGVyYXRlIG92ZXIgdGhlIGFzc2V0IHBhdGhzIGluIHRoaXMgbWFuYWdlci4gIChQcmV2aW91c2x5CiAgICAgICogYWRkZWQgdmlhIGFkZEFzc2V0UGF0aCgpIGFuZCBhZGREZWZhdWx0QXNzZXRzKCkuKSAgT24gZmlyc3QgY2FsbCwKICAgICAgKiAnY29va2llJyBtdXN0IGJlIDAsIHJlc3VsdGluZyBpbiB0aGUgZmlyc3QgY29va2llIGJlaW5nIHJldHVybmVkLgpAQCAtMTE4LDcgKzExOSw3IEBACiAgICAgICovCiAgICAgaW50MzJfdCBuZXh0QXNzZXRQYXRoKGNvbnN0IGludDMyX3QgY29va2llKSBjb25zdDsKIAotICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAvKgogICAgICAqIFJldHVybiBhbiBhc3NldCBwYXRoIGluIHRoZSBtYW5hZ2VyLiAgJ3doaWNoJyBtdXN0IGJlIGJldHdlZW4gMCBhbmQKICAgICAgKiBjb3VudEFzc2V0UGF0aHMoKS4KICAgICAgKi8KQEAgLTIyMSwxMSArMjIyLDExIEBACiAgICAgICogdGhlIGN1cnJlbnQgZGF0YS4KICAgICAgKi8KICAgICBib29sIGlzVXBUb0RhdGUoKTsKLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUga25vd24gbG9jYWxlcyBmb3IgdGhpcyBhc3NldCBtYW5hZ2VyIG9iamVjdC4KICAgICAgKi8KLSAgICB2b2lkIGdldExvY2FsZXMoVmVjdG9yPFN0cmluZzg+KiBsb2NhbGVzKSBjb25zdDsKKyAgICB2b2lkIGdldExvY2FsZXMoVmVjdG9yPFN0cmluZzg+KiBsb2NhbGVzLCBib29sIGluY2x1ZGVTeXN0ZW1Mb2NhbGVzPXRydWUpIGNvbnN0OwogCiAgICAgLyoqCiAgICAgICogR2VuZXJhdGUgaWRtYXAgZGF0YSB0byB0cmFuc2xhdGUgcmVzb3VyY2VzIElEcyBiZXR3ZWVuIGEgcGFja2FnZSBhbmQgYQpAQCAtMjM3LDExICsyMzgsMTMgQEAKIHByaXZhdGU6CiAgICAgc3RydWN0IGFzc2V0X3BhdGgKICAgICB7Ci0gICAgICAgIGFzc2V0X3BhdGgoKSA6IHBhdGgoIiIpLCB0eXBlKGtGaWxlVHlwZVJlZ3VsYXIpLCBpZG1hcCgiIiksIGlzU3lzdGVtT3ZlcmxheShmYWxzZSkge30KKyAgICAgICAgYXNzZXRfcGF0aCgpIDogcGF0aCgiIiksIHR5cGUoa0ZpbGVUeXBlUmVndWxhciksIGlkbWFwKCIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgaXNTeXN0ZW1PdmVybGF5KGZhbHNlKSwgaXNTeXN0ZW1Bc3NldChmYWxzZSkge30KICAgICAgICAgU3RyaW5nOCBwYXRoOwogICAgICAgICBGaWxlVHlwZSB0eXBlOwogICAgICAgICBTdHJpbmc4IGlkbWFwOwogICAgICAgICBib29sIGlzU3lzdGVtT3ZlcmxheTsKKyAgICAgICAgYm9vbCBpc1N5c3RlbUFzc2V0OwogICAgIH07CiAKICAgICBBc3NldCogb3BlbkluUGF0aExvY2tlZChjb25zdCBjaGFyKiBmaWxlTmFtZSwgQWNjZXNzTW9kZSBtb2RlLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hbmRyb2lkZncvUmVzb3VyY2VUeXBlcy5oIGIvaW5jbHVkZS9hbmRyb2lkZncvUmVzb3VyY2VUeXBlcy5oCmluZGV4IDQ5YjYzMzMuLjQyOGEyYjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYW5kcm9pZGZ3L1Jlc291cmNlVHlwZXMuaAorKysgYi9pbmNsdWRlL2FuZHJvaWRmdy9SZXNvdXJjZVR5cGVzLmgKQEAgLTE1NTIsOSArMTU1Miw5IEBACiAKICAgICBzdGF0dXNfdCBhZGQoQXNzZXQqIGFzc2V0LCBjb25zdCBpbnQzMl90IGNvb2tpZT0tMSwgYm9vbCBjb3B5RGF0YT1mYWxzZSk7CiAgICAgc3RhdHVzX3QgYWRkKEFzc2V0KiBhc3NldCwgQXNzZXQqIGlkbWFwQXNzZXQsIGNvbnN0IGludDMyX3QgY29va2llPS0xLCBib29sIGNvcHlEYXRhPWZhbHNlLAotICAgICAgICAgICAgYm9vbCBhcHBBc0xpYj1mYWxzZSk7CisgICAgICAgICAgICBib29sIGFwcEFzTGliPWZhbHNlLCBib29sIGlzU3lzdGVtQXNzZXQ9ZmFsc2UpOwogCi0gICAgc3RhdHVzX3QgYWRkKFJlc1RhYmxlKiBzcmMpOworICAgIHN0YXR1c190IGFkZChSZXNUYWJsZSogc3JjLCBib29sIGlzU3lzdGVtQXNzZXQ9ZmFsc2UpOwogICAgIHN0YXR1c190IGFkZEVtcHR5KGNvbnN0IGludDMyX3QgY29va2llKTsKIAogICAgIHN0YXR1c190IGdldEVycm9yKCkgY29uc3Q7CkBAIC0xODIyLDkgKzE4MjIsOSBAQAogCiAgICAgLy8gUmV0dXJuIHRoZSBjb25maWd1cmF0aW9ucyAoUmVzVGFibGVfY29uZmlnKSB0aGF0IHdlIGtub3cgYWJvdXQKICAgICB2b2lkIGdldENvbmZpZ3VyYXRpb25zKFZlY3RvcjxSZXNUYWJsZV9jb25maWc+KiBjb25maWdzLCBib29sIGlnbm9yZU1pcG1hcD1mYWxzZSwKLSAgICAgICAgICAgIGJvb2wgaWdub3JlQW5kcm9pZFBhY2thZ2U9ZmFsc2UpIGNvbnN0OworICAgICAgICAgICAgYm9vbCBpZ25vcmVBbmRyb2lkUGFja2FnZT1mYWxzZSwgYm9vbCBpbmNsdWRlU3lzdGVtQ29uZmlncz10cnVlKSBjb25zdDsKIAotICAgIHZvaWQgZ2V0TG9jYWxlcyhWZWN0b3I8U3RyaW5nOD4qIGxvY2FsZXMpIGNvbnN0OworICAgIHZvaWQgZ2V0TG9jYWxlcyhWZWN0b3I8U3RyaW5nOD4qIGxvY2FsZXMsIGJvb2wgaW5jbHVkZVN5c3RlbUxvY2FsZXM9dHJ1ZSkgY29uc3Q7CiAKICAgICAvLyBHZW5lcmF0ZSBhbiBpZG1hcC4KICAgICAvLwpAQCAtMTg2MCw3ICsxODYwLDcgQEAKICAgICB0eXBlZGVmIFZlY3RvcjxUeXBlKj4gVHlwZUxpc3Q7CiAKICAgICBzdGF0dXNfdCBhZGRJbnRlcm5hbChjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSwgY29uc3Qgdm9pZCogaWRtYXBEYXRhLCBzaXplX3QgaWRtYXBEYXRhU2l6ZSwKLSAgICAgICAgICAgIGJvb2wgYXBwQXNMaWIsIGNvbnN0IGludDMyX3QgY29va2llLCBib29sIGNvcHlEYXRhKTsKKyAgICAgICAgICAgIGJvb2wgYXBwQXNMaWIsIGNvbnN0IGludDMyX3QgY29va2llLCBib29sIGNvcHlEYXRhLCBib29sIGlzU3lzdGVtQXNzZXQ9ZmFsc2UpOwogCiAgICAgc3NpemVfdCBnZXRSZXNvdXJjZVBhY2thZ2VJbmRleCh1aW50MzJfdCByZXNJRCkgY29uc3Q7CiAKQEAgLTE4NzMsMTAgKzE4NzMsMTEgQEAKICAgICAgICAgICAgIHNpemVfdCBuYW1lTGVuLCB1aW50MzJfdCogb3V0VHlwZVNwZWNGbGFncykgY29uc3Q7CiAKICAgICBzdGF0dXNfdCBwYXJzZVBhY2thZ2UoCi0gICAgICAgIGNvbnN0IFJlc1RhYmxlX3BhY2thZ2UqIGNvbnN0IHBrZywgY29uc3QgSGVhZGVyKiBjb25zdCBoZWFkZXIsIGJvb2wgYXBwQXNMaWIpOworICAgICAgICBjb25zdCBSZXNUYWJsZV9wYWNrYWdlKiBjb25zdCBwa2csIGNvbnN0IEhlYWRlciogY29uc3QgaGVhZGVyLAorICAgICAgICBib29sIGFwcEFzTGliLCBib29sIGlzU3lzdGVtQXNzZXQpOwogCiAgICAgdm9pZCBwcmludF92YWx1ZShjb25zdCBQYWNrYWdlKiBwa2csIGNvbnN0IFJlc192YWx1ZSYgdmFsdWUpIGNvbnN0OwotICAgIAorCiAgICAgbXV0YWJsZSBNdXRleCAgICAgICAgICAgICAgIG1Mb2NrOwogCiAgICAgc3RhdHVzX3QgICAgICAgICAgICAgICAgICAgIG1FcnJvcjsKZGlmZiAtLWdpdCBhL2tleXN0b3JlL2phdmEvYW5kcm9pZC9zZWN1cml0eS9LZXlDaGFpbi5qYXZhIGIva2V5c3RvcmUvamF2YS9hbmRyb2lkL3NlY3VyaXR5L0tleUNoYWluLmphdmEKaW5kZXggNDBmYjBkMy4uN2FkYWQ4YSAxMDA2NDQKLS0tIGEva2V5c3RvcmUvamF2YS9hbmRyb2lkL3NlY3VyaXR5L0tleUNoYWluLmphdmEKKysrIGIva2V5c3RvcmUvamF2YS9hbmRyb2lkL3NlY3VyaXR5L0tleUNoYWluLmphdmEKQEAgLTM1MCw3ICszNTAsNyBAQAogCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUge0Bjb2RlIFByaXZhdGVLZXl9IGZvciB0aGUgcmVxdWVzdGVkIGFsaWFzLCBvciBudWxsCi0gICAgICogaWYgbm8gdGhlcmUgaXMgbm8gcmVzdWx0LgorICAgICAqIGlmIHRoZXJlIGlzIG5vIHJlc3VsdC4KICAgICAgKgogICAgICAqIDxwPiBUaGlzIG1ldGhvZCBtYXkgYmxvY2sgd2hpbGUgd2FpdGluZyBmb3IgYSBjb25uZWN0aW9uIHRvIGFub3RoZXIgcHJvY2VzcywgYW5kIG11c3QgbmV2ZXIKICAgICAgKiBiZSBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQuCkBAIC0zNzEsNyArMzcxLDcgQEAKICAgICAgICAgICAgIGZpbmFsIElLZXlDaGFpblNlcnZpY2Uga2V5Q2hhaW5TZXJ2aWNlID0ga2V5Q2hhaW5Db25uZWN0aW9uLmdldFNlcnZpY2UoKTsKICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBrZXlJZCA9IGtleUNoYWluU2VydmljZS5yZXF1ZXN0UHJpdmF0ZUtleShhbGlhcyk7CiAgICAgICAgICAgICBpZiAoa2V5SWQgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBLZXlDaGFpbkV4Y2VwdGlvbigia2V5c3RvcmUgaGFkIGEgcHJvYmxlbSIpOworICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIEFuZHJvaWRLZXlTdG9yZVByb3ZpZGVyLmxvYWRBbmRyb2lkS2V5U3RvcmVQcml2YXRlS2V5RnJvbUtleXN0b3JlKAogICAgICAgICAgICAgICAgICAgICBLZXlTdG9yZS5nZXRJbnN0YW5jZSgpLCBrZXlJZCwgS2V5U3RvcmUuVUlEX1NFTEYpOwpkaWZmIC0tZ2l0IGEvbGlicy9hbmRyb2lkZncvQXNzZXRNYW5hZ2VyLmNwcCBiL2xpYnMvYW5kcm9pZGZ3L0Fzc2V0TWFuYWdlci5jcHAKaW5kZXggOGEwM2I5NC4uNjkxM2Y0MyAxMDA2NDQKLS0tIGEvbGlicy9hbmRyb2lkZncvQXNzZXRNYW5hZ2VyLmNwcAorKysgYi9saWJzL2FuZHJvaWRmdy9Bc3NldE1hbmFnZXIuY3BwCkBAIC0xNzYsNyArMTc2LDggQEAKICAgICBkZWxldGVbXSBtVmVuZG9yOwogfQogCi1ib29sIEFzc2V0TWFuYWdlcjo6YWRkQXNzZXRQYXRoKGNvbnN0IFN0cmluZzgmIHBhdGgsIGludDMyX3QqIGNvb2tpZSwgYm9vbCBhcHBBc0xpYikKK2Jvb2wgQXNzZXRNYW5hZ2VyOjphZGRBc3NldFBhdGgoCisgICAgICAgIGNvbnN0IFN0cmluZzgmIHBhdGgsIGludDMyX3QqIGNvb2tpZSwgYm9vbCBhcHBBc0xpYiwgYm9vbCBpc1N5c3RlbUFzc2V0KQogewogICAgIEF1dG9NdXRleCBfbChtTG9jayk7CiAKQEAgLTIyMiw2ICsyMjMsNyBAQAogICAgIH0KICAgICBkZWxldGUgbWFuaWZlc3RBc3NldDsKIAorICAgIGFwLmlzU3lzdGVtQXNzZXQgPSBpc1N5c3RlbUFzc2V0OwogICAgIG1Bc3NldFBhdGhzLmFkZChhcCk7CiAKICAgICAvLyBuZXcgcGF0aHMgYXJlIGFsd2F5cyBhZGRlZCBhdCB0aGUgZW5kCkBAIC0yMzMsNiArMjM1LDcgQEAKICAgICAvLyBMb2FkIG92ZXJsYXlzLCBpZiBhbnkKICAgICBhc3NldF9wYXRoIG9hcDsKICAgICBmb3IgKHNpemVfdCBpZHggPSAwOyBtWmlwU2V0LmdldE92ZXJsYXkoYXAucGF0aCwgaWR4LCAmb2FwKTsgaWR4KyspIHsKKyAgICAgICAgb2FwLmlzU3lzdGVtQXNzZXQgPSBpc1N5c3RlbUFzc2V0OwogICAgICAgICBtQXNzZXRQYXRocy5hZGQob2FwKTsKICAgICB9CiAjZW5kaWYKQEAgLTM0MCw3ICszNDMsNyBAQAogICAgIFN0cmluZzggcGF0aChyb290KTsKICAgICBwYXRoLmFwcGVuZFBhdGgoa1N5c3RlbUFzc2V0cyk7CiAKLSAgICByZXR1cm4gYWRkQXNzZXRQYXRoKHBhdGgsIE5VTEwpOworICAgIHJldHVybiBhZGRBc3NldFBhdGgocGF0aCwgTlVMTCwgZmFsc2UgLyogYXBwQXNMaWIgKi8sIHRydWUgLyogaXNTeXN0ZW1Bc3NldCAqLyk7CiB9CiAKIGludDMyX3QgQXNzZXRNYW5hZ2VyOjpuZXh0QXNzZXRQYXRoKGNvbnN0IGludDMyX3QgY29va2llKSBjb25zdApAQCAtNjgyLDEwICs2ODUsMTAgQEAKICAgICAgICAgQUxPR1YoIkluc3RhbGxpbmcgcmVzb3VyY2UgYXNzZXQgJXAgaW4gdG8gdGFibGUgJXBcbiIsIGFzcywgbVJlc291cmNlcyk7CiAgICAgICAgIGlmIChzaGFyZWRSZXMgIT0gTlVMTCkgewogICAgICAgICAgICAgQUxPR1YoIkNvcHlpbmcgZXhpc3RpbmcgcmVzb3VyY2VzIGZvciAlcyIsIGFwLnBhdGguc3RyaW5nKCkpOwotICAgICAgICAgICAgbVJlc291cmNlcy0+YWRkKHNoYXJlZFJlcyk7CisgICAgICAgICAgICBtUmVzb3VyY2VzLT5hZGQoc2hhcmVkUmVzLCBhcC5pc1N5c3RlbUFzc2V0KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFMT0dWKCJQYXJzaW5nIHJlc291cmNlcyBmb3IgJXMiLCBhcC5wYXRoLnN0cmluZygpKTsKLSAgICAgICAgICAgIG1SZXNvdXJjZXMtPmFkZChhc3MsIGlkbWFwLCBuZXh0RW50cnlJZHggKyAxLCAhc2hhcmVkLCBhcHBBc0xpYik7CisgICAgICAgICAgICBtUmVzb3VyY2VzLT5hZGQoYXNzLCBpZG1hcCwgbmV4dEVudHJ5SWR4ICsgMSwgIXNoYXJlZCwgYXBwQXNMaWIsIGFwLmlzU3lzdGVtQXNzZXQpOwogICAgICAgICB9CiAgICAgICAgIG9ubHlFbXB0eVJlc291cmNlcyA9IGZhbHNlOwogCkBAIC04MzEsMTEgKzgzNCwxMSBAQAogICAgIHJldHVybiBtWmlwU2V0LmlzVXBUb0RhdGUoKTsKIH0KIAotdm9pZCBBc3NldE1hbmFnZXI6OmdldExvY2FsZXMoVmVjdG9yPFN0cmluZzg+KiBsb2NhbGVzKSBjb25zdAordm9pZCBBc3NldE1hbmFnZXI6OmdldExvY2FsZXMoVmVjdG9yPFN0cmluZzg+KiBsb2NhbGVzLCBib29sIGluY2x1ZGVTeXN0ZW1Mb2NhbGVzKSBjb25zdAogewogICAgIFJlc1RhYmxlKiByZXMgPSBtUmVzb3VyY2VzOwogICAgIGlmIChyZXMgIT0gTlVMTCkgewotICAgICAgICByZXMtPmdldExvY2FsZXMobG9jYWxlcyk7CisgICAgICAgIHJlcy0+Z2V0TG9jYWxlcyhsb2NhbGVzLCBpbmNsdWRlU3lzdGVtTG9jYWxlcyk7CiAgICAgfQogCiAgICAgY29uc3Qgc2l6ZV90IG51bUxvY2FsZXMgPSBsb2NhbGVzLT5zaXplKCk7CmRpZmYgLS1naXQgYS9saWJzL2FuZHJvaWRmdy9SZXNvdXJjZVR5cGVzLmNwcCBiL2xpYnMvYW5kcm9pZGZ3L1Jlc291cmNlVHlwZXMuY3BwCmluZGV4IDIxYjU0M2UuLjQ0ZjkyYzcgMTAwNjQ0Ci0tLSBhL2xpYnMvYW5kcm9pZGZ3L1Jlc291cmNlVHlwZXMuY3BwCisrKyBiL2xpYnMvYW5kcm9pZGZ3L1Jlc291cmNlVHlwZXMuY3BwCkBAIC0zMDgwLDEzICszMDgwLDE2IEBACiAvLyB0YWJsZSB0aGF0IGRlZmluZWQgdGhlIHBhY2thZ2UpOyB0aGUgb25lcyBhZnRlciBhcmUgc2tpbnMgb24gdG9wIG9mIGl0Lgogc3RydWN0IFJlc1RhYmxlOjpQYWNrYWdlR3JvdXAKIHsKLSAgICBQYWNrYWdlR3JvdXAoUmVzVGFibGUqIF9vd25lciwgY29uc3QgU3RyaW5nMTYmIF9uYW1lLCB1aW50MzJfdCBfaWQsIGJvb2wgYXBwQXNMaWIpCisgICAgUGFja2FnZUdyb3VwKAorICAgICAgICAgICAgUmVzVGFibGUqIF9vd25lciwgY29uc3QgU3RyaW5nMTYmIF9uYW1lLCB1aW50MzJfdCBfaWQsCisgICAgICAgICAgICBib29sIGFwcEFzTGliLCBib29sIF9pc1N5c3RlbUFzc2V0KQogICAgICAgICA6IG93bmVyKF9vd25lcikKICAgICAgICAgLCBuYW1lKF9uYW1lKQogICAgICAgICAsIGlkKF9pZCkKICAgICAgICAgLCBsYXJnZXN0VHlwZUlkKDApCiAgICAgICAgICwgYmFncyhOVUxMKQogICAgICAgICAsIGR5bmFtaWNSZWZUYWJsZShzdGF0aWNfY2FzdDx1aW50OF90PihfaWQpLCBhcHBBc0xpYikKKyAgICAgICAgLCBpc1N5c3RlbUFzc2V0KF9pc1N5c3RlbUFzc2V0KQogICAgIHsgfQogCiAgICAgflBhY2thZ2VHcm91cCgpIHsKQEAgLTMxNzgsNiArMzE4MSwxMCBAQAogICAgIC8vIGJ5IGhhdmluZyB0aGVzZSB0YWJsZXMgaW4gYSBwZXItcGFja2FnZSBzY29wZSByYXRoZXIgdGhhbgogICAgIC8vIHBlci1wYWNrYWdlLWdyb3VwLgogICAgIER5bmFtaWNSZWZUYWJsZSAgICAgICAgICAgICAgICAgZHluYW1pY1JlZlRhYmxlOworCisgICAgLy8gSWYgdGhlIHBhY2thZ2UgZ3JvdXAgY29tZXMgZnJvbSBhIHN5c3RlbSBhc3NldC4gVXNlZCBpbgorICAgIC8vIGRldGVybWluaW5nIG5vbi1zeXN0ZW0gbG9jYWxlcy4KKyAgICBjb25zdCBib29sICAgICAgICAgICAgICAgICAgICAgIGlzU3lzdGVtQXNzZXQ7CiB9OwogCiBzdHJ1Y3QgUmVzVGFibGU6OmJhZ19zZXQKQEAgLTM1NzIsOCArMzU3OSw5IEBACiAgICAgICAgICAgICBjb3B5RGF0YSk7CiB9CiAKLXN0YXR1c190IFJlc1RhYmxlOjphZGQoQXNzZXQqIGFzc2V0LCBBc3NldCogaWRtYXBBc3NldCwgY29uc3QgaW50MzJfdCBjb29raWUsIGJvb2wgY29weURhdGEsCi0gICAgICAgIGJvb2wgYXBwQXNMaWIpIHsKK3N0YXR1c190IFJlc1RhYmxlOjphZGQoCisgICAgICAgIEFzc2V0KiBhc3NldCwgQXNzZXQqIGlkbWFwQXNzZXQsIGNvbnN0IGludDMyX3QgY29va2llLCBib29sIGNvcHlEYXRhLAorICAgICAgICBib29sIGFwcEFzTGliLCBib29sIGlzU3lzdGVtQXNzZXQpIHsKICAgICBjb25zdCB2b2lkKiBkYXRhID0gYXNzZXQtPmdldEJ1ZmZlcih0cnVlKTsKICAgICBpZiAoZGF0YSA9PSBOVUxMKSB7CiAgICAgICAgIEFMT0dXKCJVbmFibGUgdG8gZ2V0IGJ1ZmZlciBvZiByZXNvdXJjZSBhc3NldCBmaWxlIik7CkBAIC0zNTkyLDIwICszNjAwLDIxIEBACiAgICAgfQogCiAgICAgcmV0dXJuIGFkZEludGVybmFsKGRhdGEsIHN0YXRpY19jYXN0PHNpemVfdD4oYXNzZXQtPmdldExlbmd0aCgpKSwKLSAgICAgICAgICAgIGlkbWFwRGF0YSwgaWRtYXBTaXplLCBhcHBBc0xpYiwgY29va2llLCBjb3B5RGF0YSk7CisgICAgICAgICAgICBpZG1hcERhdGEsIGlkbWFwU2l6ZSwgYXBwQXNMaWIsIGNvb2tpZSwgY29weURhdGEsIGlzU3lzdGVtQXNzZXQpOwogfQogCi1zdGF0dXNfdCBSZXNUYWJsZTo6YWRkKFJlc1RhYmxlKiBzcmMpCitzdGF0dXNfdCBSZXNUYWJsZTo6YWRkKFJlc1RhYmxlKiBzcmMsIGJvb2wgaXNTeXN0ZW1Bc3NldCkKIHsKICAgICBtRXJyb3IgPSBzcmMtPm1FcnJvcjsKIAotICAgIGZvciAoc2l6ZV90IGk9MDsgaTxzcmMtPm1IZWFkZXJzLnNpemUoKTsgaSsrKSB7CisgICAgZm9yIChzaXplX3QgaT0wOyBpIDwgc3JjLT5tSGVhZGVycy5zaXplKCk7IGkrKykgewogICAgICAgICBtSGVhZGVycy5hZGQoc3JjLT5tSGVhZGVyc1tpXSk7CiAgICAgfQogCi0gICAgZm9yIChzaXplX3QgaT0wOyBpPHNyYy0+bVBhY2thZ2VHcm91cHMuc2l6ZSgpOyBpKyspIHsKKyAgICBmb3IgKHNpemVfdCBpPTA7IGkgPCBzcmMtPm1QYWNrYWdlR3JvdXBzLnNpemUoKTsgaSsrKSB7CiAgICAgICAgIFBhY2thZ2VHcm91cCogc3JjUGcgPSBzcmMtPm1QYWNrYWdlR3JvdXBzW2ldOwotICAgICAgICBQYWNrYWdlR3JvdXAqIHBnID0gbmV3IFBhY2thZ2VHcm91cCh0aGlzLCBzcmNQZy0+bmFtZSwgc3JjUGctPmlkLCBmYWxzZSk7CisgICAgICAgIFBhY2thZ2VHcm91cCogcGcgPSBuZXcgUGFja2FnZUdyb3VwKHRoaXMsIHNyY1BnLT5uYW1lLCBzcmNQZy0+aWQsCisgICAgICAgICAgICAgICAgZmFsc2UgLyogYXBwQXNMaWIgKi8sIGlzU3lzdGVtQXNzZXQgfHwgc3JjUGctPmlzU3lzdGVtQXNzZXQpOwogICAgICAgICBmb3IgKHNpemVfdCBqPTA7IGo8c3JjUGctPnBhY2thZ2VzLnNpemUoKTsgaisrKSB7CiAgICAgICAgICAgICBwZy0+cGFja2FnZXMuYWRkKHNyY1BnLT5wYWNrYWdlc1tqXSk7CiAgICAgICAgIH0KQEAgLTM2NDYsNyArMzY1NSw3IEBACiB9CiAKIHN0YXR1c190IFJlc1RhYmxlOjphZGRJbnRlcm5hbChjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QgZGF0YVNpemUsIGNvbnN0IHZvaWQqIGlkbWFwRGF0YSwgc2l6ZV90IGlkbWFwRGF0YVNpemUsCi0gICAgICAgIGJvb2wgYXBwQXNMaWIsIGNvbnN0IGludDMyX3QgY29va2llLCBib29sIGNvcHlEYXRhKQorICAgICAgICBib29sIGFwcEFzTGliLCBjb25zdCBpbnQzMl90IGNvb2tpZSwgYm9vbCBjb3B5RGF0YSwgYm9vbCBpc1N5c3RlbUFzc2V0KQogewogICAgIGlmICghZGF0YSkgewogICAgICAgICByZXR1cm4gTk9fRVJST1I7CkBAIC0zNzQ5LDcgKzM3NTgsOCBAQAogICAgICAgICAgICAgICAgIHJldHVybiAobUVycm9yPUJBRF9UWVBFKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKHBhcnNlUGFja2FnZSgoUmVzVGFibGVfcGFja2FnZSopY2h1bmssIGhlYWRlciwgYXBwQXNMaWIpICE9IE5PX0VSUk9SKSB7CisgICAgICAgICAgICBpZiAocGFyc2VQYWNrYWdlKAorICAgICAgICAgICAgICAgICAgICAoUmVzVGFibGVfcGFja2FnZSopY2h1bmssIGhlYWRlciwgYXBwQXNMaWIsIGlzU3lzdGVtQXNzZXQpICE9IE5PX0VSUk9SKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1FcnJvcjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGN1clBhY2thZ2UrKzsKQEAgLTU2NjMsNyArNTY3Myw3IEBACiB9CiAKIHZvaWQgUmVzVGFibGU6OmdldENvbmZpZ3VyYXRpb25zKFZlY3RvcjxSZXNUYWJsZV9jb25maWc+KiBjb25maWdzLCBib29sIGlnbm9yZU1pcG1hcCwKLSAgICAgICAgYm9vbCBpZ25vcmVBbmRyb2lkUGFja2FnZSkgY29uc3QgeworICAgICAgICBib29sIGlnbm9yZUFuZHJvaWRQYWNrYWdlLCBib29sIGluY2x1ZGVTeXN0ZW1Db25maWdzKSBjb25zdCB7CiAgICAgY29uc3Qgc2l6ZV90IHBhY2thZ2VDb3VudCA9IG1QYWNrYWdlR3JvdXBzLnNpemUoKTsKICAgICBTdHJpbmcxNiBhbmRyb2lkKCJhbmRyb2lkIik7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYWNrYWdlQ291bnQ7IGkrKykgewpAQCAtNTY3MSw2ICs1NjgxLDkgQEAKICAgICAgICAgaWYgKGlnbm9yZUFuZHJvaWRQYWNrYWdlICYmIGFuZHJvaWQgPT0gcGFja2FnZUdyb3VwLT5uYW1lKSB7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQorICAgICAgICBpZiAoIWluY2x1ZGVTeXN0ZW1Db25maWdzICYmIHBhY2thZ2VHcm91cC0+aXNTeXN0ZW1Bc3NldCkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KICAgICAgICAgY29uc3Qgc2l6ZV90IHR5cGVDb3VudCA9IHBhY2thZ2VHcm91cC0+dHlwZXMuc2l6ZSgpOwogICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IHR5cGVDb3VudDsgaisrKSB7CiAgICAgICAgICAgICBjb25zdCBUeXBlTGlzdCYgdHlwZUxpc3QgPSBwYWNrYWdlR3JvdXAtPnR5cGVzW2pdOwpAQCAtNTcwNywxMSArNTcyMCwxNCBAQAogICAgIH0KIH0KIAotdm9pZCBSZXNUYWJsZTo6Z2V0TG9jYWxlcyhWZWN0b3I8U3RyaW5nOD4qIGxvY2FsZXMpIGNvbnN0Cit2b2lkIFJlc1RhYmxlOjpnZXRMb2NhbGVzKFZlY3RvcjxTdHJpbmc4PiogbG9jYWxlcywgYm9vbCBpbmNsdWRlU3lzdGVtTG9jYWxlcykgY29uc3QKIHsKICAgICBWZWN0b3I8UmVzVGFibGVfY29uZmlnPiBjb25maWdzOwogICAgIEFMT0dWKCJjYWxsaW5nIGdldENvbmZpZ3VyYXRpb25zIik7Ci0gICAgZ2V0Q29uZmlndXJhdGlvbnMoJmNvbmZpZ3MpOworICAgIGdldENvbmZpZ3VyYXRpb25zKCZjb25maWdzLAorICAgICAgICAgICAgZmFsc2UgLyogaWdub3JlTWlwbWFwICovLAorICAgICAgICAgICAgZmFsc2UgLyogaWdub3JlQW5kcm9pZFBhY2thZ2UgKi8sCisgICAgICAgICAgICBpbmNsdWRlU3lzdGVtTG9jYWxlcyAvKiBpbmNsdWRlU3lzdGVtQ29uZmlncyAqLyk7CiAgICAgQUxPR1YoImNhbGxlZCBnZXRDb25maWd1cmF0aW9ucyBzaXplPSVkIiwgKGludCljb25maWdzLnNpemUoKSk7CiAgICAgY29uc3Qgc2l6ZV90IEkgPSBjb25maWdzLnNpemUoKTsKIApAQCAtNTkzNyw3ICs1OTUzLDcgQEAKIH0KIAogc3RhdHVzX3QgUmVzVGFibGU6OnBhcnNlUGFja2FnZShjb25zdCBSZXNUYWJsZV9wYWNrYWdlKiBjb25zdCBwa2csCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEhlYWRlciogY29uc3QgaGVhZGVyLCBib29sIGFwcEFzTGliKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBIZWFkZXIqIGNvbnN0IGhlYWRlciwgYm9vbCBhcHBBc0xpYiwgYm9vbCBpc1N5c3RlbUFzc2V0KQogewogICAgIGNvbnN0IHVpbnQ4X3QqIGJhc2UgPSAoY29uc3QgdWludDhfdCopcGtnOwogICAgIHN0YXR1c190IGVyciA9IHZhbGlkYXRlX2NodW5rKCZwa2ctPmhlYWRlciwgc2l6ZW9mKCpwa2cpIC0gc2l6ZW9mKHBrZy0+dHlwZUlkT2Zmc2V0KSwKQEAgLTU5ODUsOCArNjAwMSw4IEBACiAgICAgaWYgKGlkID49IDI1NikgewogICAgICAgICBMT0dfQUxXQVlTX0ZBVEFMKCJQYWNrYWdlIGlkIG91dCBvZiByYW5nZSIpOwogICAgICAgICByZXR1cm4gTk9fRVJST1I7Ci0gICAgfSBlbHNlIGlmIChpZCA9PSAwIHx8IGFwcEFzTGliKSB7Ci0gICAgICAgIC8vIFRoaXMgaXMgYSBsaWJyYXJ5IHNvIGFzc2lnbiBhbiBJRAorICAgIH0gZWxzZSBpZiAoaWQgPT0gMCB8fCBhcHBBc0xpYiB8fCBpc1N5c3RlbUFzc2V0KSB7CisgICAgICAgIC8vIFRoaXMgaXMgYSBsaWJyYXJ5IG9yIGEgc3lzdGVtIGFzc2V0LCBzbyBhc3NpZ24gYW4gSUQKICAgICAgICAgaWQgPSBtTmV4dFBhY2thZ2VJZCsrOwogICAgIH0KIApAQCAtNjAxOCw3ICs2MDM0LDcgQEAKIAogICAgICAgICBjaGFyMTZfdCB0bXBOYW1lW3NpemVvZihwa2ctPm5hbWUpL3NpemVvZihwa2ctPm5hbWVbMF0pXTsKICAgICAgICAgc3RyY3B5MTZfZHRvaCh0bXBOYW1lLCBwa2ctPm5hbWUsIHNpemVvZihwa2ctPm5hbWUpL3NpemVvZihwa2ctPm5hbWVbMF0pKTsKLSAgICAgICAgZ3JvdXAgPSBuZXcgUGFja2FnZUdyb3VwKHRoaXMsIFN0cmluZzE2KHRtcE5hbWUpLCBpZCwgYXBwQXNMaWIpOworICAgICAgICBncm91cCA9IG5ldyBQYWNrYWdlR3JvdXAodGhpcywgU3RyaW5nMTYodG1wTmFtZSksIGlkLCBhcHBBc0xpYiwgaXNTeXN0ZW1Bc3NldCk7CiAgICAgICAgIGlmIChncm91cCA9PSBOVUxMKSB7CiAgICAgICAgICAgICBkZWxldGUgcGFja2FnZTsKICAgICAgICAgICAgIHJldHVybiAobUVycm9yPU5PX01FTU9SWSk7CmRpZmYgLS1naXQgYS9saWJzL2NvbW1vbl90aW1lL2NvbW1vbl90aW1lX3NlcnZlci5jcHAgYi9saWJzL2NvbW1vbl90aW1lL2NvbW1vbl90aW1lX3NlcnZlci5jcHAKaW5kZXggMDEzNzJlMC4uZjcyZmZhYSAxMDA2NDQKLS0tIGEvbGlicy9jb21tb25fdGltZS9jb21tb25fdGltZV9zZXJ2ZXIuY3BwCisrKyBiL2xpYnMvY29tbW9uX3RpbWUvY29tbW9uX3RpbWVfc2VydmVyLmNwcApAQCAtMTQzLDcgKzE0Myw3IEBACiAKICAgICAvLyBDcmVhdGUgdGhlIGV2ZW50ZmQgd2Ugd2lsbCB1c2UgdG8gc2lnbmFsIG91ciB0aHJlYWQgdG8gd2FrZSB1cCB3aGVuCiAgICAgLy8gbmVlZGVkLgotICAgIG1XYWtldXBUaHJlYWRGRCA9IGV2ZW50ZmQoMCwgRUZEX05PTkJMT0NLKTsKKyAgICBtV2FrZXVwVGhyZWFkRkQgPSBldmVudGZkKDAsIEVGRF9OT05CTE9DSyB8IEVGRF9DTE9FWEVDKTsKIAogICAgIC8vIHNlZWQgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yICh1c2VkIHRvIGdlbmVyYXRlZCB0aW1lbGluZSBJRHMpCiAgICAgc3JhbmQ0OChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHN5c3RlbVRpbWUoKSkpOwpkaWZmIC0tZ2l0IGEvbGlicy9od3VpL0FuZHJvaWQubWsgYi9saWJzL2h3dWkvQW5kcm9pZC5tawppbmRleCAwZDFlZTQ2Li4xMTA1NmQ0IDEwMDY0NAotLS0gYS9saWJzL2h3dWkvQW5kcm9pZC5taworKysgYi9saWJzL2h3dWkvQW5kcm9pZC5tawpAQCAtODYsNyArODYsNyBAQAogICAgIFRleHREcm9wU2hhZG93Q2FjaGUuY3BwIFwKICAgICBUZXh0dXJlLmNwcCBcCiAgICAgVGV4dHVyZUNhY2hlLmNwcCBcCi0gICAgVmVjdG9yRHJhd2FibGVQYXRoLmNwcCBcCisgICAgVmVjdG9yRHJhd2FibGUuY3BwIFwKICAgICBwcm90b3MvaHd1aS5wcm90bwogCiBod3VpX3Rlc3RfY29tbW9uX3NyY19maWxlcyA6PSBcCkBAIC0xMDgsNiArMTA4LDcgQEAKICAgICBod3VpX3NyY19maWxlcyArPSBcCiAgICAgICAgIEJha2VkT3BEaXNwYXRjaGVyLmNwcCBcCiAgICAgICAgIEJha2VkT3BSZW5kZXJlci5jcHAgXAorICAgICAgICBCYWtlZE9wU3RhdGUuY3BwIFwKICAgICAgICAgT3BSZW9yZGVyZXIuY3BwIFwKICAgICAgICAgUmVjb3JkaW5nQ2FudmFzLmNwcAogCmRpZmYgLS1naXQgYS9saWJzL2h3dWkvQmFrZWRPcERpc3BhdGNoZXIuY3BwIGIvbGlicy9od3VpL0Jha2VkT3BEaXNwYXRjaGVyLmNwcAppbmRleCAwZjA3NjhmLi4wOTc2NzVhIDEwMDY0NAotLS0gYS9saWJzL2h3dWkvQmFrZWRPcERpc3BhdGNoZXIuY3BwCisrKyBiL2xpYnMvaHd1aS9CYWtlZE9wRGlzcGF0Y2hlci5jcHAKQEAgLTc5LDcgKzc5LDkgQEAKICAgICAgICAgICAgIC5zZXRUcmFuc2Zvcm0oTWF0cml4NDo6aWRlbnRpdHkoKSwgVHJhbnNmb3JtRmxhZ3M6Ok5vbmUpCiAgICAgICAgICAgICAuc2V0TW9kZWxWaWV3SWRlbnRpdHlFbXB0eUJvdW5kcygpCiAgICAgICAgICAgICAuYnVpbGQoKTsKLSAgICByZW5kZXJlci5yZW5kZXJHbG9wKG51bGxwdHIsIG9wTGlzdC5jbGlwU2lkZUZsYWdzID8gJm9wTGlzdC5jbGlwIDogbnVsbHB0ciwgZ2xvcCk7CisgICAgQ2xpcFJlY3QgcmVuZGVyVGFyZ2V0Q2xpcChvcExpc3QuY2xpcCk7CisgICAgY29uc3QgQ2xpcEJhc2UqIGNsaXAgPSBvcExpc3QuY2xpcFNpZGVGbGFncyA/ICZyZW5kZXJUYXJnZXRDbGlwIDogbnVsbHB0cjsKKyAgICByZW5kZXJlci5yZW5kZXJHbG9wKG51bGxwdHIsIGNsaXAsIGdsb3ApOwogfQogCiB2b2lkIEJha2VkT3BEaXNwYXRjaGVyOjpvbk1lcmdlZFBhdGNoT3BzKEJha2VkT3BSZW5kZXJlciYgcmVuZGVyZXIsCkBAIC0xODMsNyArMTg1LDkgQEAKICAgICAgICAgICAgIC5zZXRUcmFuc2Zvcm0oTWF0cml4NDo6aWRlbnRpdHkoKSwgVHJhbnNmb3JtRmxhZ3M6Ok5vbmUpCiAgICAgICAgICAgICAuc2V0TW9kZWxWaWV3SWRlbnRpdHlFbXB0eUJvdW5kcygpCiAgICAgICAgICAgICAuYnVpbGQoKTsKLSAgICByZW5kZXJlci5yZW5kZXJHbG9wKG51bGxwdHIsIG9wTGlzdC5jbGlwU2lkZUZsYWdzID8gJm9wTGlzdC5jbGlwIDogbnVsbHB0ciwgZ2xvcCk7CisgICAgQ2xpcFJlY3QgcmVuZGVyVGFyZ2V0Q2xpcChvcExpc3QuY2xpcCk7CisgICAgY29uc3QgQ2xpcEJhc2UqIGNsaXAgPSBvcExpc3QuY2xpcFNpZGVGbGFncyA/ICZyZW5kZXJUYXJnZXRDbGlwIDogbnVsbHB0cjsKKyAgICByZW5kZXJlci5yZW5kZXJHbG9wKG51bGxwdHIsIGNsaXAsIGdsb3ApOwogfQogCiBzdGF0aWMgdm9pZCByZW5kZXJUZXh0U2hhZG93KEJha2VkT3BSZW5kZXJlciYgcmVuZGVyZXIsIEZvbnRSZW5kZXJlciYgZm9udFJlbmRlcmVyLApAQCAtMjI0LDcgKzIyOCw3IEBACiB9OwogCiBzdGF0aWMgdm9pZCByZW5kZXJUZXh0T3AoQmFrZWRPcFJlbmRlcmVyJiByZW5kZXJlciwgY29uc3QgVGV4dE9wJiBvcCwgY29uc3QgQmFrZWRPcFN0YXRlJiBzdGF0ZSwKLSAgICAgICAgY29uc3QgUmVjdCogcmVuZGVyQ2xpcCwgVGV4dFJlbmRlclR5cGUgcmVuZGVyVHlwZSkgeworICAgICAgICBjb25zdCBDbGlwQmFzZSogcmVuZGVyQ2xpcCwgVGV4dFJlbmRlclR5cGUgcmVuZGVyVHlwZSkgewogICAgIEZvbnRSZW5kZXJlciYgZm9udFJlbmRlcmVyID0gcmVuZGVyZXIuY2FjaGVzKCkuZm9udFJlbmRlcmVyLmdldEZvbnRSZW5kZXJlcigpOwogCiAgICAgaWYgKENDX1VOTElLRUxZKFBhaW50VXRpbHM6Omhhc1RleHRTaGFkb3cob3AucGFpbnQpKSkgewpAQCAtMjcyLDcgKzI3Niw3IEBACiAKICAgICBib29sIGZvcmNlRmluaXNoID0gKHJlbmRlclR5cGUgPT0gVGV4dFJlbmRlclR5cGU6OkZsdXNoKTsKICAgICBib29sIG11c3REaXJ0eVJlbmRlclRhcmdldCA9IHJlbmRlcmVyLm9mZnNjcmVlblJlbmRlclRhcmdldCgpOwotICAgIGNvbnN0IFJlY3QqIGxvY2FsT3BDbGlwID0gcHVyZVRyYW5zbGF0ZSA/ICZzdGF0ZS5jb21wdXRlZFN0YXRlLmNsaXBSZWN0IDogbnVsbHB0cjsKKyAgICBjb25zdCBSZWN0KiBsb2NhbE9wQ2xpcCA9IHB1cmVUcmFuc2xhdGUgPyAmc3RhdGUuY29tcHV0ZWRTdGF0ZS5jbGlwUmVjdCgpIDogbnVsbHB0cjsKICAgICBmb250UmVuZGVyZXIucmVuZGVyUG9zVGV4dChvcC5wYWludCwgbG9jYWxPcENsaXAsCiAgICAgICAgICAgICAoY29uc3QgY2hhciopIG9wLmdseXBocywgb3AuZ2x5cGhDb3VudCwgeCwgeSwKICAgICAgICAgICAgIG9wLnBvc2l0aW9ucywgbXVzdERpcnR5UmVuZGVyVGFyZ2V0ID8gJmxheWVyQm91bmRzIDogbnVsbHB0ciwgJmZ1bmN0b3IsIGZvcmNlRmluaXNoKTsKQEAgLTI4Nyw3ICsyOTEsOCBAQAogCiB2b2lkIEJha2VkT3BEaXNwYXRjaGVyOjpvbk1lcmdlZFRleHRPcHMoQmFrZWRPcFJlbmRlcmVyJiByZW5kZXJlciwKICAgICAgICAgY29uc3QgTWVyZ2VkQmFrZWRPcExpc3QmIG9wTGlzdCkgewotICAgIGNvbnN0IFJlY3QqIGNsaXAgPSBvcExpc3QuY2xpcFNpZGVGbGFncyA/ICZvcExpc3QuY2xpcCA6IG51bGxwdHI7CisgICAgQ2xpcFJlY3QgcmVuZGVyVGFyZ2V0Q2xpcChvcExpc3QuY2xpcCk7CisgICAgY29uc3QgQ2xpcEJhc2UqIGNsaXAgPSBvcExpc3QuY2xpcFNpZGVGbGFncyA/ICZyZW5kZXJUYXJnZXRDbGlwIDogbnVsbHB0cjsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9wTGlzdC5jb3VudDsgaSsrKSB7CiAgICAgICAgIGNvbnN0IEJha2VkT3BTdGF0ZSYgc3RhdGUgPSAqKG9wTGlzdC5zdGF0ZXNbaV0pOwogICAgICAgICBjb25zdCBUZXh0T3AmIG9wID0gKihzdGF0aWNfY2FzdDxjb25zdCBUZXh0T3AqPihzdGF0ZS5vcCkpOwpAQCAtMjk3LDI2ICszMDIsNiBAQAogICAgIH0KIH0KIAotdm9pZCBCYWtlZE9wRGlzcGF0Y2hlcjo6b25SZW5kZXJOb2RlT3AoQmFrZWRPcFJlbmRlcmVyJiwgY29uc3QgUmVuZGVyTm9kZU9wJiwgY29uc3QgQmFrZWRPcFN0YXRlJikgewotICAgIExPR19BTFdBWVNfRkFUQUwoInVuc3VwcG9ydGVkIG9wZXJhdGlvbiIpOwotfQotCi12b2lkIEJha2VkT3BEaXNwYXRjaGVyOjpvbkJlZ2luTGF5ZXJPcChCYWtlZE9wUmVuZGVyZXImLCBjb25zdCBCZWdpbkxheWVyT3AmLCBjb25zdCBCYWtlZE9wU3RhdGUmKSB7Ci0gICAgTE9HX0FMV0FZU19GQVRBTCgidW5zdXBwb3J0ZWQgb3BlcmF0aW9uIik7Ci19Ci0KLXZvaWQgQmFrZWRPcERpc3BhdGNoZXI6Om9uRW5kTGF5ZXJPcChCYWtlZE9wUmVuZGVyZXImLCBjb25zdCBFbmRMYXllck9wJiwgY29uc3QgQmFrZWRPcFN0YXRlJikgewotICAgIExPR19BTFdBWVNfRkFUQUwoInVuc3VwcG9ydGVkIG9wZXJhdGlvbiIpOwotfQotCi12b2lkIEJha2VkT3BEaXNwYXRjaGVyOjpvbkNpcmNsZVByb3BzT3AoQmFrZWRPcFJlbmRlcmVyJiwgY29uc3QgQ2lyY2xlUHJvcHNPcCYsIGNvbnN0IEJha2VkT3BTdGF0ZSYpIHsKLSAgICBMT0dfQUxXQVlTX0ZBVEFMKCJ1bnN1cHBvcnRlZCBvcGVyYXRpb24iKTsKLX0KLQotdm9pZCBCYWtlZE9wRGlzcGF0Y2hlcjo6b25Sb3VuZFJlY3RQcm9wc09wKEJha2VkT3BSZW5kZXJlciYsIGNvbnN0IFJvdW5kUmVjdFByb3BzT3AmLCBjb25zdCBCYWtlZE9wU3RhdGUmKSB7Ci0gICAgTE9HX0FMV0FZU19GQVRBTCgidW5zdXBwb3J0ZWQgb3BlcmF0aW9uIik7Ci19Ci0KIG5hbWVzcGFjZSBWZXJ0ZXhCdWZmZXJSZW5kZXJGbGFncyB7CiAgICAgZW51bSB7CiAgICAgICAgIE9mZnNldCA9IDB4MSwKQEAgLTcwMSwxNCArNjg2LDEzIEBACiB9CiAKIHZvaWQgQmFrZWRPcERpc3BhdGNoZXI6Om9uVGV4dE9wKEJha2VkT3BSZW5kZXJlciYgcmVuZGVyZXIsIGNvbnN0IFRleHRPcCYgb3AsIGNvbnN0IEJha2VkT3BTdGF0ZSYgc3RhdGUpIHsKLSAgICBjb25zdCBSZWN0KiBjbGlwID0gc3RhdGUuY29tcHV0ZWRTdGF0ZS5jbGlwU2lkZUZsYWdzID8gJnN0YXRlLmNvbXB1dGVkU3RhdGUuY2xpcFJlY3QgOiBudWxscHRyOwotICAgIHJlbmRlclRleHRPcChyZW5kZXJlciwgb3AsIHN0YXRlLCBjbGlwLCBUZXh0UmVuZGVyVHlwZTo6Rmx1c2gpOworICAgIHJlbmRlclRleHRPcChyZW5kZXJlciwgb3AsIHN0YXRlLCBzdGF0ZS5jb21wdXRlZFN0YXRlLmdldENsaXBJZk5lZWRlZCgpLCBUZXh0UmVuZGVyVHlwZTo6Rmx1c2gpOwogfQogCiB2b2lkIEJha2VkT3BEaXNwYXRjaGVyOjpvblRleHRPblBhdGhPcChCYWtlZE9wUmVuZGVyZXImIHJlbmRlcmVyLCBjb25zdCBUZXh0T25QYXRoT3AmIG9wLCBjb25zdCBCYWtlZE9wU3RhdGUmIHN0YXRlKSB7CiAgICAgLy8gTm90ZTogY2FuJ3QgdHJ1c3QgY2xpcFNpZGVGbGFncyBzaW5jZSB3ZSByZWNvcmQgd2l0aCB1bm1hcHBlZEJvdW5kcyA9PSBjbGlwLgogICAgIC8vIFRPRE86IHJlc3BlY3QgY2xpcFNpZGVGbGFncywgb25jZSB3ZSByZWNvcmQgd2l0aCBib3VuZHMKLSAgICBjb25zdCBSZWN0KiByZW5kZXJUYXJnZXRDbGlwID0gJnN0YXRlLmNvbXB1dGVkU3RhdGUuY2xpcFJlY3Q7CisgICAgYXV0byByZW5kZXJUYXJnZXRDbGlwID0gc3RhdGUuY29tcHV0ZWRTdGF0ZS5jbGlwU3RhdGU7CiAKICAgICBGb250UmVuZGVyZXImIGZvbnRSZW5kZXJlciA9IHJlbmRlcmVyLmNhY2hlcygpLmZvbnRSZW5kZXJlci5nZXRGb250UmVuZGVyZXIoKTsKICAgICBmb250UmVuZGVyZXIuc2V0Rm9udChvcC5wYWludCwgU2tNYXRyaXg6OkkoKSk7CmRpZmYgLS1naXQgYS9saWJzL2h3dWkvQmFrZWRPcERpc3BhdGNoZXIuaCBiL2xpYnMvaHd1aS9CYWtlZE9wRGlzcGF0Y2hlci5oCmluZGV4IGVkMzRhZGEuLjRkZmRkM2YgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9CYWtlZE9wRGlzcGF0Y2hlci5oCisrKyBiL2xpYnMvaHd1aS9CYWtlZE9wRGlzcGF0Y2hlci5oCkBAIC0zNiwxMyArMzYsMTMgQEAKICAgICAvLyBEZWNsYXJlcyBhbGwgIm9uTWVyZ2VkQml0bWFwT3BzKC4uLikiIHN0eWxlIG1ldGhvZHMgZm9yIG1lcmdlYWJsZSBvcCB0eXBlcwogI2RlZmluZSBYKFR5cGUpIFwKICAgICAgICAgc3RhdGljIHZvaWQgb25NZXJnZWQjI1R5cGUjI3MoQmFrZWRPcFJlbmRlcmVyJiByZW5kZXJlciwgY29uc3QgTWVyZ2VkQmFrZWRPcExpc3QmIG9wTGlzdCk7Ci0gICAgTUFQX01FUkdFRF9PUFMoWCkKKyAgICBNQVBfTUVSR0VBQkxFX09QUyhYKQogI3VuZGVmIFgKIAogICAgIC8vIERlY2xhcmVzIGFsbCAib25CaXRtYXBPcCguLi4pIiBzdHlsZSBtZXRob2RzIGZvciBldmVyeSBvcCB0eXBlCiAjZGVmaW5lIFgoVHlwZSkgXAogICAgICAgICBzdGF0aWMgdm9pZCBvbiMjVHlwZShCYWtlZE9wUmVuZGVyZXImIHJlbmRlcmVyLCBjb25zdCBUeXBlJiBvcCwgY29uc3QgQmFrZWRPcFN0YXRlJiBzdGF0ZSk7Ci0gICAgTUFQX09QUyhYKQorICAgIE1BUF9SRU5ERVJBQkxFX09QUyhYKQogI3VuZGVmIFgKIAogfTsKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9CYWtlZE9wUmVuZGVyZXIuY3BwIGIvbGlicy9od3VpL0Jha2VkT3BSZW5kZXJlci5jcHAKaW5kZXggZjgyODJkYy4uYTBkNWZhZSAxMDA2NDQKLS0tIGEvbGlicy9od3VpL0Jha2VkT3BSZW5kZXJlci5jcHAKKysrIGIvbGlicy9od3VpL0Jha2VkT3BSZW5kZXJlci5jcHAKQEAgLTYwLDI3ICs2MCw2NyBAQAogfQogCiB2b2lkIEJha2VkT3BSZW5kZXJlcjo6ZW5kTGF5ZXIoKSB7CisgICAgaWYgKG1SZW5kZXJUYXJnZXQuc3RlbmNpbCkgeworICAgICAgICAvLyBpZiBzdGVuY2lsIHdhcyB1c2VkIGZvciBjbGlwcGluZywgZGV0YWNoIGl0IGFuZCByZXR1cm4gaXQgdG8gcG9vbAorICAgICAgICBnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgMCk7CisgICAgICAgIExPR19BTFdBWVNfRkFUQUxfSUYoR0xVdGlsczo6ZHVtcEdMRXJyb3JzKCksICJnbGZicmIgZW5kbGF5ZXIgZmFpbGVkIik7CisgICAgICAgIG1DYWNoZXMucmVuZGVyQnVmZmVyQ2FjaGUucHV0KG1SZW5kZXJUYXJnZXQuc3RlbmNpbCk7CisgICAgICAgIG1SZW5kZXJUYXJnZXQuc3RlbmNpbCA9IG51bGxwdHI7CisgICAgfQorICAgIG1SZW5kZXJUYXJnZXQubGFzdFN0ZW5jaWxDbGlwID0gbnVsbHB0cjsKKwogICAgIG1SZW5kZXJUYXJnZXQub2Zmc2NyZWVuQnVmZmVyLT51cGRhdGVNZXNoRnJvbVJlZ2lvbigpOwotICAgIG1SZW5kZXJUYXJnZXQub2Zmc2NyZWVuQnVmZmVyID0gbnVsbHB0cjsKKyAgICBtUmVuZGVyVGFyZ2V0Lm9mZnNjcmVlbkJ1ZmZlciA9IG51bGxwdHI7IC8vIEl0J3MgaW4gZHJhd0xheWVyT3AncyBoYW5kcyBub3cuCiAKICAgICAvLyBEZXRhY2ggdGhlIHRleHR1cmUgZnJvbSB0aGUgRkJPCiAgICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIDAsIDApOwogICAgIExPR19BTFdBWVNfRkFUQUxfSUYoR0xVdGlsczo6ZHVtcEdMRXJyb3JzKCksICJlbmRMYXllciBGQUlMRUQiKTsKICAgICBtUmVuZGVyU3RhdGUuZGVsZXRlRnJhbWVidWZmZXIobVJlbmRlclRhcmdldC5mcmFtZUJ1ZmZlcklkKTsKLSAgICBtUmVuZGVyVGFyZ2V0LmZyYW1lQnVmZmVySWQgPSAtMTsKKyAgICBtUmVuZGVyVGFyZ2V0LmZyYW1lQnVmZmVySWQgPSAwOwogfQogCiB2b2lkIEJha2VkT3BSZW5kZXJlcjo6c3RhcnRGcmFtZSh1aW50MzJfdCB3aWR0aCwgdWludDMyX3QgaGVpZ2h0LCBjb25zdCBSZWN0JiByZXBhaW50UmVjdCkgeworICAgIExPR19BTFdBWVNfRkFUQUxfSUYobVJlbmRlclRhcmdldC5mcmFtZUJ1ZmZlcklkICE9IDAsICJwcmltYXJ5IGZyYW1lYnVmZmVySWQgbXVzdCBiZSAwIik7CiAgICAgbVJlbmRlclN0YXRlLmJpbmRGcmFtZWJ1ZmZlcigwKTsKICAgICBzZXRWaWV3cG9ydCh3aWR0aCwgaGVpZ2h0KTsKLSAgICBtQ2FjaGVzLmNsZWFyR2FyYmFnZSgpOwogCiAgICAgaWYgKCFtT3BhcXVlKSB7CiAgICAgICAgIGNsZWFyQ29sb3JCdWZmZXIocmVwYWludFJlY3QpOwogICAgIH0KKworICAgIG1SZW5kZXJTdGF0ZS5kZWJ1Z092ZXJkcmF3KHRydWUsIHRydWUpOwogfQogCi12b2lkIEJha2VkT3BSZW5kZXJlcjo6ZW5kRnJhbWUoKSB7Cit2b2lkIEJha2VkT3BSZW5kZXJlcjo6ZW5kRnJhbWUoY29uc3QgUmVjdCYgcmVwYWludFJlY3QpIHsKKyAgICBpZiAoQ0NfVU5MSUtFTFkoUHJvcGVydGllczo6ZGVidWdPdmVyZHJhdykpIHsKKyAgICAgICAgQ2xpcFJlY3Qgb3ZlcmRyYXdDbGlwKHJlcGFpbnRSZWN0KTsKKyAgICAgICAgUmVjdCB2aWV3cG9ydFJlY3QobVJlbmRlclRhcmdldC52aWV3cG9ydFdpZHRoLCBtUmVuZGVyVGFyZ2V0LnZpZXdwb3J0SGVpZ2h0KTsKKyAgICAgICAgLy8gb3ZlcmRyYXcgdmlzdWFsaXphdGlvbgorICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8PSA0OyBpKyspIHsKKyAgICAgICAgICAgIGlmIChpIDwgNCkgeworICAgICAgICAgICAgICAgIC8vIG50aCBsZXZlbCBvZiBvdmVyZHJhdyB0ZXN0cyBmb3IgbisxIGRyYXdzIHBlciBwaXhlbAorICAgICAgICAgICAgICAgIG1SZW5kZXJTdGF0ZS5zdGVuY2lsKCkuZW5hYmxlRGVidWdUZXN0KGkgKyAxLCBmYWxzZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIDR0aCBsZXZlbCB0ZXN0cyBmb3IgNCBvciBoaWdoZXIgZHJhd3MgcGVyIHBpeGVsCisgICAgICAgICAgICAgICAgbVJlbmRlclN0YXRlLnN0ZW5jaWwoKS5lbmFibGVEZWJ1Z1Rlc3QoNCwgdHJ1ZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFNrUGFpbnQgcGFpbnQ7CisgICAgICAgICAgICBwYWludC5zZXRDb2xvcihtQ2FjaGVzLmdldE92ZXJkcmF3Q29sb3IoaSkpOworICAgICAgICAgICAgR2xvcCBnbG9wOworICAgICAgICAgICAgR2xvcEJ1aWxkZXIobVJlbmRlclN0YXRlLCBtQ2FjaGVzLCAmZ2xvcCkKKyAgICAgICAgICAgICAgICAgICAgLnNldFJvdW5kUmVjdENsaXBTdGF0ZShudWxscHRyKQorICAgICAgICAgICAgICAgICAgICAuc2V0TWVzaFVuaXRRdWFkKCkKKyAgICAgICAgICAgICAgICAgICAgLnNldEZpbGxQYWludChwYWludCwgMS4wZikKKyAgICAgICAgICAgICAgICAgICAgLnNldFRyYW5zZm9ybShNYXRyaXg0OjppZGVudGl0eSgpLCBUcmFuc2Zvcm1GbGFnczo6Tm9uZSkKKyAgICAgICAgICAgICAgICAgICAgLnNldE1vZGVsVmlld01hcFVuaXRUb1JlY3Qodmlld3BvcnRSZWN0KQorICAgICAgICAgICAgICAgICAgICAuYnVpbGQoKTsKKyAgICAgICAgICAgIHJlbmRlckdsb3AobnVsbHB0ciwgJm92ZXJkcmF3Q2xpcCwgZ2xvcCk7CisgICAgICAgIH0KKyAgICAgICAgbVJlbmRlclN0YXRlLnN0ZW5jaWwoKS5kaXNhYmxlKCk7CisgICAgfQorCisgICAgbUNhY2hlcy5jbGVhckdhcmJhZ2UoKTsKICAgICBtQ2FjaGVzLnBhdGhDYWNoZS50cmltKCk7CiAgICAgbUNhY2hlcy50ZXNzZWxsYXRpb25DYWNoZS50cmltKCk7CiAKQEAgLTEyOCwxMiArMTY4LDEyMSBAQAogICAgIHJldHVybiB0ZXh0dXJlOwogfQogCi12b2lkIEJha2VkT3BSZW5kZXJlcjo6cHJlcGFyZVJlbmRlcihjb25zdCBSZWN0KiBkaXJ0eUJvdW5kcywgY29uc3QgUmVjdCogY2xpcCkgeworLy8gY2xlYXJzIGFuZCByZS1maWxscyBzdGVuY2lsIHdpdGggcHJvdmlkZWQgcmVuZGVydGFyZ2V0IHNwYWNlIHF1YWRzLAorLy8gYW5kIHRoZW4gcHV0IHN0ZW5jaWwgaW50byB0ZXN0IG1vZGUKK3ZvaWQgQmFrZWRPcFJlbmRlcmVyOjpzZXR1cFN0ZW5jaWxRdWFkcyhzdGQ6OnZlY3RvcjxWZXJ0ZXg+JiBxdWFkVmVydGljZXMsCisgICAgICAgIGludCBpbmNyZW1lbnRUaHJlc2hvbGQpIHsKKyAgICBtUmVuZGVyU3RhdGUuc3RlbmNpbCgpLmVuYWJsZVdyaXRlKGluY3JlbWVudFRocmVzaG9sZCk7CisgICAgbVJlbmRlclN0YXRlLnN0ZW5jaWwoKS5jbGVhcigpOworICAgIEdsb3AgZ2xvcDsKKyAgICBHbG9wQnVpbGRlcihtUmVuZGVyU3RhdGUsIG1DYWNoZXMsICZnbG9wKQorICAgICAgICAgICAgLnNldFJvdW5kUmVjdENsaXBTdGF0ZShudWxscHRyKQorICAgICAgICAgICAgLnNldE1lc2hJbmRleGVkUXVhZHMocXVhZFZlcnRpY2VzLmRhdGEoKSwgcXVhZFZlcnRpY2VzLnNpemUoKSAvIDQpCisgICAgICAgICAgICAuc2V0RmlsbEJsYWNrKCkKKyAgICAgICAgICAgIC5zZXRUcmFuc2Zvcm0oTWF0cml4NDo6aWRlbnRpdHkoKSwgVHJhbnNmb3JtRmxhZ3M6Ok5vbmUpCisgICAgICAgICAgICAuc2V0TW9kZWxWaWV3SWRlbnRpdHlFbXB0eUJvdW5kcygpCisgICAgICAgICAgICAuYnVpbGQoKTsKKyAgICBtUmVuZGVyU3RhdGUucmVuZGVyKGdsb3AsIG1SZW5kZXJUYXJnZXQub3J0aG9NYXRyaXgpOworICAgIG1SZW5kZXJTdGF0ZS5zdGVuY2lsKCkuZW5hYmxlVGVzdChpbmNyZW1lbnRUaHJlc2hvbGQpOworfQorCit2b2lkIEJha2VkT3BSZW5kZXJlcjo6c2V0dXBTdGVuY2lsUmVjdExpc3QoY29uc3QgQ2xpcEJhc2UqIGNsaXApIHsKKyAgICBhdXRvJiYgcmVjdExpc3QgPSByZWludGVycHJldF9jYXN0PGNvbnN0IENsaXBSZWN0TGlzdCo+KGNsaXApLT5yZWN0TGlzdDsKKyAgICBpbnQgcXVhZENvdW50ID0gcmVjdExpc3QuZ2V0VHJhbnNmb3JtZWRSZWN0YW5nbGVzQ291bnQoKTsKKyAgICBzdGQ6OnZlY3RvcjxWZXJ0ZXg+IHJlY3RhbmdsZVZlcnRpY2VzOworICAgIHJlY3RhbmdsZVZlcnRpY2VzLnJlc2VydmUocXVhZENvdW50ICogNCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBxdWFkQ291bnQ7IGkrKykgeworICAgICAgICBjb25zdCBUcmFuc2Zvcm1lZFJlY3RhbmdsZSYgdHIocmVjdExpc3QuZ2V0VHJhbnNmb3JtZWRSZWN0YW5nbGUoaSkpOworICAgICAgICBjb25zdCBNYXRyaXg0JiB0cmFuc2Zvcm0gPSB0ci5nZXRUcmFuc2Zvcm0oKTsKKyAgICAgICAgUmVjdCBib3VuZHMgPSB0ci5nZXRCb3VuZHMoKTsKKyAgICAgICAgaWYgKHRyYW5zZm9ybS5yZWN0VG9SZWN0KCkpIHsKKyAgICAgICAgICAgIC8vIElmIHJlY3RUb1JlY3QsIGNhbiBzaW1wbHkgbWFwIGJvdW5kcyBiZWZvcmUgc3RvcmluZyB2ZXJ0cworICAgICAgICAgICAgdHJhbnNmb3JtLm1hcFJlY3QoYm91bmRzKTsKKyAgICAgICAgICAgIGJvdW5kcy5kb0ludGVyc2VjdChjbGlwLT5yZWN0KTsKKyAgICAgICAgICAgIGlmIChib3VuZHMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7IC8vIHdpbGwgYmUgb3V0c2lkZSBvZiBzY2lzc29yLCBza2lwCisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZWN0YW5nbGVWZXJ0aWNlcy5wdXNoX2JhY2soVmVydGV4e2JvdW5kcy5sZWZ0LCBib3VuZHMudG9wfSk7CisgICAgICAgIHJlY3RhbmdsZVZlcnRpY2VzLnB1c2hfYmFjayhWZXJ0ZXh7Ym91bmRzLnJpZ2h0LCBib3VuZHMudG9wfSk7CisgICAgICAgIHJlY3RhbmdsZVZlcnRpY2VzLnB1c2hfYmFjayhWZXJ0ZXh7Ym91bmRzLmxlZnQsIGJvdW5kcy5ib3R0b219KTsKKyAgICAgICAgcmVjdGFuZ2xlVmVydGljZXMucHVzaF9iYWNrKFZlcnRleHtib3VuZHMucmlnaHQsIGJvdW5kcy5ib3R0b219KTsKKworICAgICAgICBpZiAoIXRyYW5zZm9ybS5yZWN0VG9SZWN0KCkpIHsKKyAgICAgICAgICAgIC8vIElmIG5vdCByZWN0VG9SZWN0LCBtdXN0IG1hcCBlYWNoIHBvaW50IGluZGl2aWR1YWxseQorICAgICAgICAgICAgZm9yIChhdXRvIGN1ciA9IHJlY3RhbmdsZVZlcnRpY2VzLmVuZCgpIC0gNDsgY3VyIDwgcmVjdGFuZ2xlVmVydGljZXMuZW5kKCk7IGN1cisrKSB7CisgICAgICAgICAgICAgICAgdHJhbnNmb3JtLm1hcFBvaW50KGN1ci0+eCwgY3VyLT55KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBzZXR1cFN0ZW5jaWxRdWFkcyhyZWN0YW5nbGVWZXJ0aWNlcywgcmVjdExpc3QuZ2V0VHJhbnNmb3JtZWRSZWN0YW5nbGVzQ291bnQoKSk7Cit9CisKK3ZvaWQgQmFrZWRPcFJlbmRlcmVyOjpzZXR1cFN0ZW5jaWxSZWdpb24oY29uc3QgQ2xpcEJhc2UqIGNsaXApIHsKKyAgICBhdXRvJiYgcmVnaW9uID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBDbGlwUmVnaW9uKj4oY2xpcCktPnJlZ2lvbjsKKworICAgIHN0ZDo6dmVjdG9yPFZlcnRleD4gcmVnaW9uVmVydGljZXM7CisgICAgU2tSZWdpb246OkNsaXBlcmF0b3IgaXQocmVnaW9uLCBjbGlwLT5yZWN0LnRvU2tJUmVjdCgpKTsKKyAgICB3aGlsZSAoIWl0LmRvbmUoKSkgeworICAgICAgICBjb25zdCBTa0lSZWN0JiByID0gaXQucmVjdCgpOworICAgICAgICByZWdpb25WZXJ0aWNlcy5wdXNoX2JhY2soVmVydGV4eyhmbG9hdClyLmZMZWZ0LCAoZmxvYXQpci5mVG9wfSk7CisgICAgICAgIHJlZ2lvblZlcnRpY2VzLnB1c2hfYmFjayhWZXJ0ZXh7KGZsb2F0KXIuZlJpZ2h0LCAoZmxvYXQpci5mVG9wfSk7CisgICAgICAgIHJlZ2lvblZlcnRpY2VzLnB1c2hfYmFjayhWZXJ0ZXh7KGZsb2F0KXIuZkxlZnQsIChmbG9hdClyLmZCb3R0b219KTsKKyAgICAgICAgcmVnaW9uVmVydGljZXMucHVzaF9iYWNrKFZlcnRleHsoZmxvYXQpci5mUmlnaHQsIChmbG9hdClyLmZCb3R0b219KTsKKyAgICAgICAgaXQubmV4dCgpOworICAgIH0KKyAgICBzZXR1cFN0ZW5jaWxRdWFkcyhyZWdpb25WZXJ0aWNlcywgMCk7Cit9CisKK3ZvaWQgQmFrZWRPcFJlbmRlcmVyOjpwcmVwYXJlUmVuZGVyKGNvbnN0IFJlY3QqIGRpcnR5Qm91bmRzLCBjb25zdCBDbGlwQmFzZSogY2xpcCkgeworICAgIC8vIHByZXBhcmUgc2Npc3NvciAvIHN0ZW5jaWwKICAgICBtUmVuZGVyU3RhdGUuc2Npc3NvcigpLnNldEVuYWJsZWQoY2xpcCAhPSBudWxscHRyKTsKICAgICBpZiAoY2xpcCkgewotICAgICAgICBtUmVuZGVyU3RhdGUuc2Npc3NvcigpLnNldChjbGlwLT5sZWZ0LCBtUmVuZGVyVGFyZ2V0LnZpZXdwb3J0SGVpZ2h0IC0gY2xpcC0+Ym90dG9tLAotICAgICAgICAgICAgY2xpcC0+Z2V0V2lkdGgoKSwgY2xpcC0+Z2V0SGVpZ2h0KCkpOworICAgICAgICBtUmVuZGVyU3RhdGUuc2Npc3NvcigpLnNldChtUmVuZGVyVGFyZ2V0LnZpZXdwb3J0SGVpZ2h0LCBjbGlwLT5yZWN0KTsKICAgICB9CisKKyAgICBpZiAoQ0NfTElLRUxZKCFQcm9wZXJ0aWVzOjpkZWJ1Z092ZXJkcmF3KSkgeworICAgICAgICAvLyBvbmx5IG1vZGlmeSBzdGVuY2lsIG1vZGUgYW5kIGNvbnRlbnQgd2hlbiBpdCdzIG5vdCB1c2VkIGZvciBvdmVyZHJhdyB2aXN1YWxpemF0aW9uCisgICAgICAgIGlmIChDQ19VTkxJS0VMWShjbGlwICYmIGNsaXAtPm1vZGUgIT0gQ2xpcE1vZGU6OlJlY3RhbmdsZSkpIHsKKyAgICAgICAgICAgIC8vIE5PVEU6IHRoaXMgcG9pbnRlciBjaGVjayBpcyBvbmx5IHNhZmUgZm9yIG5vbi1yZWN0IGNsaXBzLAorICAgICAgICAgICAgLy8gc2luY2UgcmVjdCBjbGlwcyBtYXkgYmUgY3JlYXRlZCBvbiB0aGUgc3RhY2sKKyAgICAgICAgICAgIGlmIChtUmVuZGVyVGFyZ2V0Lmxhc3RTdGVuY2lsQ2xpcCAhPSBjbGlwKSB7CisgICAgICAgICAgICAgICAgLy8gU3RlbmNpbCBuZWVkZWQsIGJ1dCBjdXJyZW50IHN0ZW5jaWwgaXNuJ3QgdXAgdG8gZGF0ZQorICAgICAgICAgICAgICAgIG1SZW5kZXJUYXJnZXQubGFzdFN0ZW5jaWxDbGlwID0gY2xpcDsKKworICAgICAgICAgICAgICAgIGlmIChtUmVuZGVyVGFyZ2V0LmZyYW1lQnVmZmVySWQgIT0gMCAmJiAhbVJlbmRlclRhcmdldC5zdGVuY2lsKSB7CisgICAgICAgICAgICAgICAgICAgIE9mZnNjcmVlbkJ1ZmZlciogbGF5ZXIgPSBtUmVuZGVyVGFyZ2V0Lm9mZnNjcmVlbkJ1ZmZlcjsKKyAgICAgICAgICAgICAgICAgICAgbVJlbmRlclRhcmdldC5zdGVuY2lsID0gbUNhY2hlcy5yZW5kZXJCdWZmZXJDYWNoZS5nZXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RlbmNpbDo6Z2V0TGF5ZXJTdGVuY2lsRm9ybWF0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXItPnRleHR1cmUud2lkdGgsIGxheWVyLT50ZXh0dXJlLmhlaWdodCk7CisgICAgICAgICAgICAgICAgICAgIC8vIHN0ZW5jaWwgaXMgYm91bmQgKyBhbGxvY2F0ZWQgLSBhc3NvY2lhdGUgaXQgd2l0aCBjdXJyZW50IEZCTworICAgICAgICAgICAgICAgICAgICBnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfUkVOREVSQlVGRkVSLCBtUmVuZGVyVGFyZ2V0LnN0ZW5jaWwtPmdldE5hbWUoKSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGNsaXAtPm1vZGUgPT0gQ2xpcE1vZGU6OlJlY3RhbmdsZUxpc3QpIHsKKyAgICAgICAgICAgICAgICAgICAgc2V0dXBTdGVuY2lsUmVjdExpc3QoY2xpcCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc2V0dXBTdGVuY2lsUmVnaW9uKGNsaXApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gc3RlbmNpbCBpcyB1cCB0byBkYXRlIC0ganVzdCBuZWVkIHRvIGVuc3VyZSBpdCdzIGVuYWJsZWQgKHNpbmNlIGFuIHVuY2xpcHBlZAorICAgICAgICAgICAgICAgIC8vIG9yIHNjaXNzb3Itb25seSBjbGlwcGVkIG9wIG1heSBoYXZlIGJlZW4gZHJhd24sIGRpc2FibGluZyB0aGUgc3RlbmNpbCkKKyAgICAgICAgICAgICAgICBpbnQgaW5jcmVtZW50VGhyZXNob2xkID0gMDsKKyAgICAgICAgICAgICAgICBpZiAoQ0NfTElLRUxZKGNsaXAtPm1vZGUgPT0gQ2xpcE1vZGU6OlJlY3RhbmdsZUxpc3QpKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8mJiByZWN0TGlzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ2xpcFJlY3RMaXN0Kj4oY2xpcCktPnJlY3RMaXN0OworICAgICAgICAgICAgICAgICAgICBpbmNyZW1lbnRUaHJlc2hvbGQgPSByZWN0TGlzdC5nZXRUcmFuc2Zvcm1lZFJlY3RhbmdsZXNDb3VudCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtUmVuZGVyU3RhdGUuc3RlbmNpbCgpLmVuYWJsZVRlc3QoaW5jcmVtZW50VGhyZXNob2xkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIGVpdGhlciBzY2lzc29yIG9yIG5vIGNsaXAsIHNvIGRpc2FibGUgc3RlbmNpbCB0ZXN0CisgICAgICAgICAgICBtUmVuZGVyU3RhdGUuc3RlbmNpbCgpLmRpc2FibGUoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIGRpcnR5IG9mZnNjcmVlbmJ1ZmZlcgogICAgIGlmIChkaXJ0eUJvdW5kcyAmJiBtUmVuZGVyVGFyZ2V0Lm9mZnNjcmVlbkJ1ZmZlcikgewogICAgICAgICAvLyByZWdpc3RlciBsYXllciBkYW1hZ2UgdG8gZHJhdy1iYWNrIHJlZ2lvbgogICAgICAgICBhbmRyb2lkOjpSZWN0IGRpcnR5KGRpcnR5Qm91bmRzLT5sZWZ0LCBkaXJ0eUJvdW5kcy0+dG9wLApAQCAtMTQyLDE3ICsyOTEsMTggQEAKICAgICB9CiB9CiAKLXZvaWQgQmFrZWRPcFJlbmRlcmVyOjpyZW5kZXJHbG9wKGNvbnN0IFJlY3QqIGRpcnR5Qm91bmRzLCBjb25zdCBSZWN0KiBjbGlwLCBjb25zdCBHbG9wJiBnbG9wKSB7Cit2b2lkIEJha2VkT3BSZW5kZXJlcjo6cmVuZGVyR2xvcChjb25zdCBSZWN0KiBkaXJ0eUJvdW5kcywgY29uc3QgQ2xpcEJhc2UqIGNsaXAsCisgICAgICAgIGNvbnN0IEdsb3AmIGdsb3ApIHsKICAgICBwcmVwYXJlUmVuZGVyKGRpcnR5Qm91bmRzLCBjbGlwKTsKICAgICBtUmVuZGVyU3RhdGUucmVuZGVyKGdsb3AsIG1SZW5kZXJUYXJnZXQub3J0aG9NYXRyaXgpOwogICAgIGlmICghbVJlbmRlclRhcmdldC5mcmFtZUJ1ZmZlcklkKSBtSGFzRHJhd24gPSB0cnVlOwogfQogCiB2b2lkIEJha2VkT3BSZW5kZXJlcjo6cmVuZGVyRnVuY3Rvcihjb25zdCBGdW5jdG9yT3AmIG9wLCBjb25zdCBCYWtlZE9wU3RhdGUmIHN0YXRlKSB7Ci0gICAgcHJlcGFyZVJlbmRlcigmc3RhdGUuY29tcHV0ZWRTdGF0ZS5jbGlwcGVkQm91bmRzLCAmc3RhdGUuY29tcHV0ZWRTdGF0ZS5jbGlwUmVjdCk7CisgICAgcHJlcGFyZVJlbmRlcigmc3RhdGUuY29tcHV0ZWRTdGF0ZS5jbGlwcGVkQm91bmRzLCBzdGF0ZS5jb21wdXRlZFN0YXRlLmdldENsaXBJZk5lZWRlZCgpKTsKIAogICAgIERyYXdHbEluZm8gaW5mbzsKLSAgICBhdXRvJiYgY2xpcCA9IHN0YXRlLmNvbXB1dGVkU3RhdGUuY2xpcFJlY3Q7CisgICAgYXV0byYmIGNsaXAgPSBzdGF0ZS5jb21wdXRlZFN0YXRlLmNsaXBSZWN0KCk7CiAgICAgaW5mby5jbGlwTGVmdCA9IGNsaXAubGVmdDsKICAgICBpbmZvLmNsaXBUb3AgPSBjbGlwLnRvcDsKICAgICBpbmZvLmNsaXBSaWdodCA9IGNsaXAucmlnaHQ7CmRpZmYgLS1naXQgYS9saWJzL2h3dWkvQmFrZWRPcFJlbmRlcmVyLmggYi9saWJzL2h3dWkvQmFrZWRPcFJlbmRlcmVyLmgKaW5kZXggZjE1OGU4Yi4uNjVlOGIyOSAxMDA2NDQKLS0tIGEvbGlicy9od3VpL0Jha2VkT3BSZW5kZXJlci5oCisrKyBiL2xpYnMvaHd1aS9CYWtlZE9wUmVuZGVyZXIuaApAQCAtMjcsNiArMjcsNyBAQAogc3RydWN0IEdsb3A7CiBjbGFzcyBMYXllcjsKIGNsYXNzIFJlbmRlclN0YXRlOworc3RydWN0IENsaXBCYXNlOwogCiAvKioKICAqIE1haW4gcmVuZGVyaW5nIG1hbmFnZXIgZm9yIGEgY29sbGVjdGlvbiBvZiB3b3JrIC0gb25lIGZyYW1lICsgYW55IGNvbnRhaW5lZCBGQk9zLgpAQCAtNTksNyArNjAsNyBAQAogICAgIENhY2hlcyYgY2FjaGVzKCkgeyByZXR1cm4gbUNhY2hlczsgfQogCiAgICAgdm9pZCBzdGFydEZyYW1lKHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQsIGNvbnN0IFJlY3QmIHJlcGFpbnRSZWN0KTsKLSAgICB2b2lkIGVuZEZyYW1lKCk7CisgICAgdm9pZCBlbmRGcmFtZShjb25zdCBSZWN0JiByZXBhaW50UmVjdCk7CiAgICAgT2Zmc2NyZWVuQnVmZmVyKiBzdGFydFRlbXBvcmFyeUxheWVyKHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQpOwogICAgIHZvaWQgc3RhcnRSZXBhaW50TGF5ZXIoT2Zmc2NyZWVuQnVmZmVyKiBvZmZzY3JlZW5CdWZmZXIsIGNvbnN0IFJlY3QmIHJlcGFpbnRSZWN0KTsKICAgICB2b2lkIGVuZExheWVyKCk7CkBAIC02OCwyMSArNjksMjMgQEAKICAgICBjb25zdCBMaWdodEluZm8mIGdldExpZ2h0SW5mbygpIGNvbnN0IHsgcmV0dXJuIG1MaWdodEluZm87IH0KIAogICAgIHZvaWQgcmVuZGVyR2xvcChjb25zdCBCYWtlZE9wU3RhdGUmIHN0YXRlLCBjb25zdCBHbG9wJiBnbG9wKSB7Ci0gICAgICAgIGJvb2wgdXNlU2Npc3NvciA9IHN0YXRlLmNvbXB1dGVkU3RhdGUuY2xpcFNpZGVGbGFncyAhPSBPcENsaXBTaWRlRmxhZ3M6Ok5vbmU7CiAgICAgICAgIHJlbmRlckdsb3AoJnN0YXRlLmNvbXB1dGVkU3RhdGUuY2xpcHBlZEJvdW5kcywKLSAgICAgICAgICAgICAgICB1c2VTY2lzc29yID8gJnN0YXRlLmNvbXB1dGVkU3RhdGUuY2xpcFJlY3QgOiBudWxscHRyLAorICAgICAgICAgICAgICAgIHN0YXRlLmNvbXB1dGVkU3RhdGUuZ2V0Q2xpcElmTmVlZGVkKCksCiAgICAgICAgICAgICAgICAgZ2xvcCk7CiAgICAgfQogICAgIHZvaWQgcmVuZGVyRnVuY3Rvcihjb25zdCBGdW5jdG9yT3AmIG9wLCBjb25zdCBCYWtlZE9wU3RhdGUmIHN0YXRlKTsKIAotICAgIHZvaWQgcmVuZGVyR2xvcChjb25zdCBSZWN0KiBkaXJ0eUJvdW5kcywgY29uc3QgUmVjdCogY2xpcCwgY29uc3QgR2xvcCYgZ2xvcCk7CisgICAgdm9pZCByZW5kZXJHbG9wKGNvbnN0IFJlY3QqIGRpcnR5Qm91bmRzLCBjb25zdCBDbGlwQmFzZSogY2xpcCwgY29uc3QgR2xvcCYgZ2xvcCk7CiAgICAgYm9vbCBvZmZzY3JlZW5SZW5kZXJUYXJnZXQoKSB7IHJldHVybiBtUmVuZGVyVGFyZ2V0Lm9mZnNjcmVlbkJ1ZmZlciAhPSBudWxscHRyOyB9CiAgICAgdm9pZCBkaXJ0eVJlbmRlclRhcmdldChjb25zdCBSZWN0JiBkaXJ0eVJlY3QpOwogICAgIGJvb2wgZGlkRHJhdygpIGNvbnN0IHsgcmV0dXJuIG1IYXNEcmF3bjsgfQogcHJpdmF0ZToKICAgICB2b2lkIHNldFZpZXdwb3J0KHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQpOwogICAgIHZvaWQgY2xlYXJDb2xvckJ1ZmZlcihjb25zdCBSZWN0JiBjbGVhclJlY3QpOwotICAgIHZvaWQgcHJlcGFyZVJlbmRlcihjb25zdCBSZWN0KiBkaXJ0eUJvdW5kcywgY29uc3QgUmVjdCogY2xpcCk7CisgICAgdm9pZCBwcmVwYXJlUmVuZGVyKGNvbnN0IFJlY3QqIGRpcnR5Qm91bmRzLCBjb25zdCBDbGlwQmFzZSogY2xpcCk7CisgICAgdm9pZCBzZXR1cFN0ZW5jaWxSZWN0TGlzdChjb25zdCBDbGlwQmFzZSogY2xpcCk7CisgICAgdm9pZCBzZXR1cFN0ZW5jaWxSZWdpb24oY29uc3QgQ2xpcEJhc2UqIGNsaXApOworICAgIHZvaWQgc2V0dXBTdGVuY2lsUXVhZHMoc3RkOjp2ZWN0b3I8VmVydGV4PiYgcXVhZFZlcnRpY2VzLCBpbnQgaW5jcmVtZW50VGhyZXNob2xkKTsKIAogICAgIFJlbmRlclN0YXRlJiBtUmVuZGVyU3RhdGU7CiAgICAgQ2FjaGVzJiBtQ2FjaGVzOwpAQCAtOTIsMTAgKzk1LDIzIEBACiAgICAgLy8gcmVuZGVyIHRhcmdldCBzdGF0ZSAtIHNldHVwIGJ5IHN0YXJ0L2VuZCBsYXllci9mcmFtZQogICAgIC8vIG9ubHkgdmFsaWQgdG8gdXNlIGluIGJldHdlZW4gc3RhcnQvZW5kIHBhaXJzLgogICAgIHN0cnVjdCB7CisgICAgICAgIC8vIElmIG5vdCBkcmF3aW5nIHRvIGEgbGF5ZXI6IGZibyA9IDAsIG9mZnNjcmVlbkJ1ZmZlciA9IG51bGwsCisgICAgICAgIC8vIE90aGVyd2lzZSB0aGVzZSByZWZlciB0byBjdXJyZW50bHkgcGFpbnRpbmcgbGF5ZXIncyBzdGF0ZQogICAgICAgICBHTHVpbnQgZnJhbWVCdWZmZXJJZCA9IDA7CiAgICAgICAgIE9mZnNjcmVlbkJ1ZmZlciogb2Zmc2NyZWVuQnVmZmVyID0gbnVsbHB0cjsKKworICAgICAgICAvLyBVc2VkIHdoZW4gZHJhd2luZyB0byBhIGxheWVyIGFuZCB1c2luZyBzdGVuY2lsIGNsaXBwaW5nLiBvdGhlcndpc2UgbnVsbC4KKyAgICAgICAgUmVuZGVyQnVmZmVyKiBzdGVuY2lsID0gbnVsbHB0cjsKKworICAgICAgICAvLyB2YWx1ZSByZXByZXNlbnRpbmcgdGhlIENsaXBSZWN0TGlzdCogb3IgQ2xpcFJlZ2lvbiogY3VycmVudGx5IHN0b3JlZCBpbgorICAgICAgICAvLyB0aGUgc3RlbmNpbCBvZiB0aGUgY3VycmVudCByZW5kZXIgdGFyZ2V0CisgICAgICAgIGNvbnN0IENsaXBCYXNlKiBsYXN0U3RlbmNpbENsaXAgPSBudWxscHRyOworCisgICAgICAgIC8vIFNpemUgb2YgcmVuZGVyYWJsZSByZWdpb24gaW4gY3VycmVudCByZW5kZXIgdGFyZ2V0IC0gZm9yIGxheWVycywgbWF5IG5vdCBtYXRjaCBhY3R1YWwKKyAgICAgICAgLy8gYm91bmRzIG9mIEZCTyB0ZXh0dXJlLiBvZmZzY3JlZW5CdWZmZXItPnRleHR1cmUgaGFzIHRoaXMgaW5mb3JtYXRpb24uCiAgICAgICAgIHVpbnQzMl90IHZpZXdwb3J0V2lkdGggPSAwOwogICAgICAgICB1aW50MzJfdCB2aWV3cG9ydEhlaWdodCA9IDA7CisKICAgICAgICAgTWF0cml4NCBvcnRob01hdHJpeDsKICAgICB9IG1SZW5kZXJUYXJnZXQ7CiAKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9CYWtlZE9wU3RhdGUuY3BwIGIvbGlicy9od3VpL0Jha2VkT3BTdGF0ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZiOTQzYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvaHd1aS9CYWtlZE9wU3RhdGUuY3BwCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSAiQmFrZWRPcFN0YXRlLmgiCisKKyNpbmNsdWRlICJDbGlwQXJlYS5oIgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgdWlyZW5kZXJlciB7CisKK1Jlc29sdmVkUmVuZGVyU3RhdGU6OlJlc29sdmVkUmVuZGVyU3RhdGUoTGluZWFyQWxsb2NhdG9yJiBhbGxvY2F0b3IsIFNuYXBzaG90JiBzbmFwc2hvdCwKKyAgICAgICAgY29uc3QgUmVjb3JkZWRPcCYgcmVjb3JkZWRPcCwgYm9vbCBleHBhbmRGb3JTdHJva2UpIHsKKyAgICAvLyByZXNvbHZlZE1hdHJpeCA9IHBhcmVudE1hdHJpeCAqIGxvY2FsTWF0cml4CisgICAgdHJhbnNmb3JtLmxvYWRNdWx0aXBseSgqc25hcHNob3QudHJhbnNmb3JtLCByZWNvcmRlZE9wLmxvY2FsTWF0cml4KTsKKworICAgIC8vIHJlc29sdmVkQ2xpcHBlZEJvdW5kcyA9IGludGVyc2VjdChyZXNvbHZlZE1hdHJpeCAqIG9wQm91bmRzLCByZXNvbHZlZENsaXBSZWN0KQorICAgIGNsaXBwZWRCb3VuZHMgPSByZWNvcmRlZE9wLnVubWFwcGVkQm91bmRzOworICAgIGlmIChDQ19VTkxJS0VMWShleHBhbmRGb3JTdHJva2UpKSB7CisgICAgICAgIC8vIGFjY291bnQgZm9yIG5vbi1oYWlybGluZSBzdHJva2UKKyAgICAgICAgY2xpcHBlZEJvdW5kcy5vdXRzZXQocmVjb3JkZWRPcC5wYWludC0+Z2V0U3Ryb2tlV2lkdGgoKSAqIDAuNWYpOworICAgIH0KKyAgICB0cmFuc2Zvcm0ubWFwUmVjdChjbGlwcGVkQm91bmRzKTsKKyAgICBpZiAoQ0NfVU5MSUtFTFkoZXhwYW5kRm9yU3Ryb2tlCisgICAgICAgICAgICAmJiAoIXRyYW5zZm9ybS5pc1B1cmVUcmFuc2xhdGUoKSB8fCByZWNvcmRlZE9wLnBhaW50LT5nZXRTdHJva2VXaWR0aCgpIDwgMS4wZikpKSB7CisgICAgICAgIC8vIGFjY291bnQgZm9yIGhhaXJsaW5lIHN0cm9rZSB3aGVuIHN0cm9rZSBtYXkgYmUgPCAxIHNjYWxlZCBwaXhlbAorICAgICAgICAvLyBOb24gdHJhbnNsYXRlIHx8IHN0cm9rZVdpZHRoIDwgMSBpcyBjb25zZXJ2YXRpdmUsIGJ1dCB3aWxsIGNvdmVyIGFsbCBjYXNlcworICAgICAgICBjbGlwcGVkQm91bmRzLm91dHNldCgwLjVmKTsKKyAgICB9CisKKyAgICAvLyByZXNvbHZlZENsaXBSZWN0ID0gaW50ZXJzZWN0KHBhcmVudE1hdHJpeCAqIGxvY2FsQ2xpcCwgcGFyZW50Q2xpcCkKKyAgICBjbGlwU3RhdGUgPSBzbmFwc2hvdC5tdXRhdGVDbGlwQXJlYSgpLnNlcmlhbGl6ZUludGVyc2VjdGVkQ2xpcChhbGxvY2F0b3IsCisgICAgICAgICAgICByZWNvcmRlZE9wLmxvY2FsQ2xpcCwgKihzbmFwc2hvdC50cmFuc2Zvcm0pKTsKKyAgICBMT0dfQUxXQVlTX0ZBVEFMX0lGKCFjbGlwU3RhdGUsICJtdXN0IGNsaXAhIik7CisKKyAgICBjb25zdCBSZWN0JiBjbGlwUmVjdCA9IGNsaXBTdGF0ZS0+cmVjdDsKKyAgICBpZiAoQ0NfVU5MSUtFTFkoY2xpcFJlY3QuaXNFbXB0eSgpIHx8ICFjbGlwcGVkQm91bmRzLmludGVyc2VjdHMoY2xpcFJlY3QpKSkgeworICAgICAgICAvLyBSZWplY3RlZCBiYXNlZCBvbiBlaXRoZXIgZW1wdHkgY2xpcCwgb3IgYm91bmRzIG5vdCBpbnRlcnNlY3Rpbmcgd2l0aCBjbGlwCisgICAgICAgIGlmIChjbGlwU3RhdGUpIHsKKyAgICAgICAgICAgIGFsbG9jYXRvci5yZXdpbmRJZkxhc3RBbGxvYyhjbGlwU3RhdGUpOworICAgICAgICAgICAgY2xpcFN0YXRlID0gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICBjbGlwcGVkQm91bmRzLnNldEVtcHR5KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTm90IHJlamVjdGVkISBjb21wdXRlIHRydWUgY2xpcHBlZEJvdW5kcyBhbmQgY2xpcFNpZGVGbGFncworICAgICAgICBpZiAoY2xpcFJlY3QubGVmdCA+IGNsaXBwZWRCb3VuZHMubGVmdCkgY2xpcFNpZGVGbGFncyB8PSBPcENsaXBTaWRlRmxhZ3M6OkxlZnQ7CisgICAgICAgIGlmIChjbGlwUmVjdC50b3AgPiBjbGlwcGVkQm91bmRzLnRvcCkgY2xpcFNpZGVGbGFncyB8PSBPcENsaXBTaWRlRmxhZ3M6OlRvcDsKKyAgICAgICAgaWYgKGNsaXBSZWN0LnJpZ2h0IDwgY2xpcHBlZEJvdW5kcy5yaWdodCkgY2xpcFNpZGVGbGFncyB8PSBPcENsaXBTaWRlRmxhZ3M6OlJpZ2h0OworICAgICAgICBpZiAoY2xpcFJlY3QuYm90dG9tIDwgY2xpcHBlZEJvdW5kcy5ib3R0b20pIGNsaXBTaWRlRmxhZ3MgfD0gT3BDbGlwU2lkZUZsYWdzOjpCb3R0b207CisgICAgICAgIGNsaXBwZWRCb3VuZHMuZG9JbnRlcnNlY3QoY2xpcFJlY3QpOworICAgIH0KK30KKworUmVzb2x2ZWRSZW5kZXJTdGF0ZTo6UmVzb2x2ZWRSZW5kZXJTdGF0ZShMaW5lYXJBbGxvY2F0b3ImIGFsbG9jYXRvciwgU25hcHNob3QmIHNuYXBzaG90KSB7CisgICAgdHJhbnNmb3JtID0gKnNuYXBzaG90LnRyYW5zZm9ybTsKKworICAgIC8vIFNpbmNlIHRoZSBvcCBkb2Vzbid0IGhhdmUga25vd24gYm91bmRzLCB3ZSBjb25zZXJ2YXRpdmVseSBzZXQgdGhlIG1hcHBlZCBib3VuZHMKKyAgICAvLyB0byB0aGUgY3VycmVudCBjbGlwUmVjdCwgYW5kIGNsaXBTaWRlRmxhZ3MgdG8gRnVsbC4KKyAgICBjbGlwU3RhdGUgPSBzbmFwc2hvdC5tdXRhdGVDbGlwQXJlYSgpLnNlcmlhbGl6ZUNsaXAoYWxsb2NhdG9yKTsKKyAgICBMT0dfQUxXQVlTX0ZBVEFMX0lGKCFjbGlwU3RhdGUsICJjbGlwU3RhdGUgcmVxdWlyZWQiKTsKKyAgICBjbGlwcGVkQm91bmRzID0gY2xpcFN0YXRlLT5yZWN0OworICAgIHRyYW5zZm9ybS5tYXBSZWN0KGNsaXBwZWRCb3VuZHMpOworICAgIGNsaXBTaWRlRmxhZ3MgPSBPcENsaXBTaWRlRmxhZ3M6OkZ1bGw7Cit9CisKK30gLy8gbmFtZXNwYWNlIHVpcmVuZGVyZXIKK30gLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9CYWtlZE9wU3RhdGUuaCBiL2xpYnMvaHd1aS9CYWtlZE9wU3RhdGUuaAppbmRleCBiMTJjMGM5Li45ZGY0ZTNhIDEwMDY0NAotLS0gYS9saWJzL2h3dWkvQmFrZWRPcFN0YXRlLmgKKysrIGIvbGlicy9od3VpL0Jha2VkT3BTdGF0ZS5oCkBAIC01Miw4OSArNTIsMzUgQEAKICAqLwogY2xhc3MgUmVzb2x2ZWRSZW5kZXJTdGF0ZSB7CiBwdWJsaWM6Ci0gICAgLy8gVE9ETzogcmVtb3ZlIHRoZSBtYXBSZWN0cy9tYXRyaXggbXVsdGlwbHkgd2hlbiBzbmFwc2hvdCAmIHJlY29yZGVkIHRyYW5zZm9ybXMgYXJlIHRyYW5zbGF0ZXMKLSAgICBSZXNvbHZlZFJlbmRlclN0YXRlKGNvbnN0IFNuYXBzaG90JiBzbmFwc2hvdCwgY29uc3QgUmVjb3JkZWRPcCYgcmVjb3JkZWRPcCwgYm9vbCBleHBhbmRGb3JTdHJva2UpIHsKLSAgICAgICAgLyogVE9ETzogYmVuY2htYXJrIGEgZmFzdCBwYXRoIGZvciB0cmFuc2xhdGUtb25seSBtYXRyaWNlcywgc3VjaCBhczoKLSAgICAgICAgaWYgKENDX0xJS0VMWShzbmFwc2hvdC50cmFuc2Zvcm0tPmdldFR5cGUoKSA9PSBNYXRyaXg0OjprVHlwZVRyYW5zbGF0ZQotICAgICAgICAgICAgICAgICYmIHJlY29yZGVkT3AubG9jYWxNYXRyaXguZ2V0VHlwZSgpID09IE1hdHJpeDQ6OmtUeXBlVHJhbnNsYXRlKSkgewotICAgICAgICAgICAgZmxvYXQgdHJhbnNsYXRlWCA9IHNuYXBzaG90LnRyYW5zZm9ybS0+Z2V0VHJhbnNsYXRlWCgpICsgcmVjb3JkZWRPcC5sb2NhbE1hdHJpeC5nZXRUcmFuc2xhdGVYKCk7Ci0gICAgICAgICAgICBmbG9hdCB0cmFuc2xhdGVZID0gc25hcHNob3QudHJhbnNmb3JtLT5nZXRUcmFuc2xhdGVZKCkgKyByZWNvcmRlZE9wLmxvY2FsTWF0cml4LmdldFRyYW5zbGF0ZVkoKTsKLSAgICAgICAgICAgIHRyYW5zZm9ybS5sb2FkVHJhbnNsYXRlKHRyYW5zbGF0ZVgsIHRyYW5zbGF0ZVksIDApOworICAgIFJlc29sdmVkUmVuZGVyU3RhdGUoTGluZWFyQWxsb2NhdG9yJiBhbGxvY2F0b3IsIFNuYXBzaG90JiBzbmFwc2hvdCwKKyAgICAgICAgICAgIGNvbnN0IFJlY29yZGVkT3AmIHJlY29yZGVkT3AsIGJvb2wgZXhwYW5kRm9yU3Ryb2tlKTsKIAotICAgICAgICAgICAgLy8gcmVzb2x2ZWRDbGlwUmVjdCA9IGludGVyc2VjdChwYXJlbnRNYXRyaXggKiBsb2NhbENsaXAsIHBhcmVudENsaXApCi0gICAgICAgICAgICBjbGlwUmVjdCA9IHJlY29yZGVkT3AubG9jYWxDbGlwUmVjdDsKLSAgICAgICAgICAgIGNsaXBSZWN0LnRyYW5zbGF0ZSh0cmFuc2xhdGVYLCB0cmFuc2xhdGVZKTsKLSAgICAgICAgICAgIGNsaXBSZWN0LmRvSW50ZXJzZWN0KHNuYXBzaG90LmdldENsaXBSZWN0KCkpOwotICAgICAgICAgICAgY2xpcFJlY3Quc25hcFRvUGl4ZWxCb3VuZGFyaWVzKCk7Ci0KLSAgICAgICAgICAgIC8vIHJlc29sdmVkQ2xpcHBlZEJvdW5kcyA9IGludGVyc2VjdChyZXNvbHZlZE1hdHJpeCAqIG9wQm91bmRzLCByZXNvbHZlZENsaXBSZWN0KQotICAgICAgICAgICAgY2xpcHBlZEJvdW5kcyA9IHJlY29yZGVkT3AudW5tYXBwZWRCb3VuZHM7Ci0gICAgICAgICAgICBjbGlwcGVkQm91bmRzLnRyYW5zbGF0ZSh0cmFuc2xhdGVYLCB0cmFuc2xhdGVZKTsKLSAgICAgICAgfSAuLi4gKi8KLQotICAgICAgICAvLyByZXNvbHZlZE1hdHJpeCA9IHBhcmVudE1hdHJpeCAqIGxvY2FsTWF0cml4Ci0gICAgICAgIHRyYW5zZm9ybS5sb2FkTXVsdGlwbHkoKnNuYXBzaG90LnRyYW5zZm9ybSwgcmVjb3JkZWRPcC5sb2NhbE1hdHJpeCk7Ci0KLSAgICAgICAgLy8gcmVzb2x2ZWRDbGlwUmVjdCA9IGludGVyc2VjdChwYXJlbnRNYXRyaXggKiBsb2NhbENsaXAsIHBhcmVudENsaXApCi0gICAgICAgIGNsaXBSZWN0ID0gcmVjb3JkZWRPcC5sb2NhbENsaXBSZWN0OwotICAgICAgICBzbmFwc2hvdC50cmFuc2Zvcm0tPm1hcFJlY3QoY2xpcFJlY3QpOwotICAgICAgICBjbGlwUmVjdC5kb0ludGVyc2VjdChzbmFwc2hvdC5nZXRSZW5kZXJUYXJnZXRDbGlwKCkpOwotICAgICAgICBjbGlwUmVjdC5zbmFwVG9QaXhlbEJvdW5kYXJpZXMoKTsKLQotICAgICAgICAvLyByZXNvbHZlZENsaXBwZWRCb3VuZHMgPSBpbnRlcnNlY3QocmVzb2x2ZWRNYXRyaXggKiBvcEJvdW5kcywgcmVzb2x2ZWRDbGlwUmVjdCkKLSAgICAgICAgY2xpcHBlZEJvdW5kcyA9IHJlY29yZGVkT3AudW5tYXBwZWRCb3VuZHM7Ci0gICAgICAgIGlmIChDQ19VTkxJS0VMWShleHBhbmRGb3JTdHJva2UpKSB7Ci0gICAgICAgICAgICAvLyBhY2NvdW50IGZvciBub24taGFpcmxpbmUgc3Ryb2tlCi0gICAgICAgICAgICBjbGlwcGVkQm91bmRzLm91dHNldChyZWNvcmRlZE9wLnBhaW50LT5nZXRTdHJva2VXaWR0aCgpICogMC41Zik7Ci0gICAgICAgIH0KLSAgICAgICAgdHJhbnNmb3JtLm1hcFJlY3QoY2xpcHBlZEJvdW5kcyk7Ci0gICAgICAgIGlmIChDQ19VTkxJS0VMWShleHBhbmRGb3JTdHJva2UKLSAgICAgICAgICAgICAgICAmJiAoIXRyYW5zZm9ybS5pc1B1cmVUcmFuc2xhdGUoKSB8fCByZWNvcmRlZE9wLnBhaW50LT5nZXRTdHJva2VXaWR0aCgpIDwgMS4wZikpKSB7Ci0gICAgICAgICAgICAvLyBhY2NvdW50IGZvciBoYWlybGluZSBzdHJva2Ugd2hlbiBzdHJva2UgbWF5IGJlIDwgMSBzY2FsZWQgcGl4ZWwKLSAgICAgICAgICAgIC8vIE5vbiB0cmFuc2xhdGUgfHwgc3Ryb2tlV2lkdGggPCAxIGlzIGNvbnNlcnZhdGl2ZSwgYnV0IHdpbGwgY292ZXIgYWxsIGNhc2VzCi0gICAgICAgICAgICBjbGlwcGVkQm91bmRzLm91dHNldCgwLjVmKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChjbGlwUmVjdC5sZWZ0ID4gY2xpcHBlZEJvdW5kcy5sZWZ0KSBjbGlwU2lkZUZsYWdzIHw9IE9wQ2xpcFNpZGVGbGFnczo6TGVmdDsKLSAgICAgICAgaWYgKGNsaXBSZWN0LnRvcCA+IGNsaXBwZWRCb3VuZHMudG9wKSBjbGlwU2lkZUZsYWdzIHw9IE9wQ2xpcFNpZGVGbGFnczo6VG9wOwotICAgICAgICBpZiAoY2xpcFJlY3QucmlnaHQgPCBjbGlwcGVkQm91bmRzLnJpZ2h0KSBjbGlwU2lkZUZsYWdzIHw9IE9wQ2xpcFNpZGVGbGFnczo6UmlnaHQ7Ci0gICAgICAgIGlmIChjbGlwUmVjdC5ib3R0b20gPCBjbGlwcGVkQm91bmRzLmJvdHRvbSkgY2xpcFNpZGVGbGFncyB8PSBPcENsaXBTaWRlRmxhZ3M6OkJvdHRvbTsKLSAgICAgICAgY2xpcHBlZEJvdW5kcy5kb0ludGVyc2VjdChjbGlwUmVjdCk7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIFRPRE86IG9uY2Ugd2Ugc3VwcG9ydCBjb21wbGV4IGNsaXBzLCB3ZSBtYXkgd2FudCB0byByZWplY3QgdG8gYXZvaWQgdGhhdCB3b3JrIHdoZXJlCi0gICAgICAgICAqIHBvc3NpYmxlLiBTaG91bGQgd2U6Ci0gICAgICAgICAqIDEgLSBxdWlja3JlamVjdCBiYXNlZCBvbiBjbGlwcGVkQm91bmRzLCBxdWljayBlYXJseSAoZHVwbGljYXRpbmcgbG9naWMgaW4gcmVzb2x2ZWRPcCkKLSAgICAgICAgICogMiAtIG1lcmdlIHN0dWZmIGludG8gdHJ5Q29uc3RydWN0IGZhY3RvcnkgbWV0aG9kLCBzbyBpdCBjYW4gaGFuZGxlIHF1aWNrUmVqZWN0aW9uCi0gICAgICAgICAqICAgICAgICAgYW5kIGVhcmx5IHJldHVybiBudWxsIGluIG9uZSBwbGFjZS4KLSAgICAgICAgICovCi0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ29uc3RydWN0b3IgZm9yIHVuYm91bmRlZCBvcHMgd2l0aG91dCB0cmFuc2Zvcm0vY2xpcCAobmFtZWx5IHNoYWRvd3MpCi0gICAgICoKLSAgICAgKiBTaW5jZSB0aGUgb3AgZG9lc24ndCBoYXZlIGtub3duIGJvdW5kcywgd2UgY29uc2VydmF0aXZlbHkgc2V0IHRoZSBtYXBwZWQgYm91bmRzCi0gICAgICogdG8gdGhlIGN1cnJlbnQgY2xpcFJlY3QsIGFuZCBjbGlwU2lkZUZsYWdzIHRvIEZ1bGwuCi0gICAgICovCi0gICAgUmVzb2x2ZWRSZW5kZXJTdGF0ZShjb25zdCBTbmFwc2hvdCYgc25hcHNob3QpIHsKLSAgICAgICAgdHJhbnNmb3JtID0gKnNuYXBzaG90LnRyYW5zZm9ybTsKLSAgICAgICAgY2xpcFJlY3QgPSBzbmFwc2hvdC5nZXRSZW5kZXJUYXJnZXRDbGlwKCk7Ci0gICAgICAgIGNsaXBwZWRCb3VuZHMgPSBjbGlwUmVjdDsKLSAgICAgICAgdHJhbnNmb3JtLm1hcFJlY3QoY2xpcHBlZEJvdW5kcyk7Ci0gICAgICAgIGNsaXBTaWRlRmxhZ3MgPSBPcENsaXBTaWRlRmxhZ3M6OkZ1bGw7Ci0gICAgfQorICAgIC8vIENvbnN0cnVjdG9yIGZvciB1bmJvdW5kZWQgb3BzIHdpdGhvdXQgdHJhbnNmb3JtL2NsaXAgKG5hbWVseSBzaGFkb3dzKQorICAgIFJlc29sdmVkUmVuZGVyU3RhdGUoTGluZWFyQWxsb2NhdG9yJiBhbGxvY2F0b3IsIFNuYXBzaG90JiBzbmFwc2hvdCk7CiAKICAgICBSZWN0IGNvbXB1dGVMb2NhbFNwYWNlQ2xpcCgpIGNvbnN0IHsKICAgICAgICAgTWF0cml4NCBpbnZlcnNlOwogICAgICAgICBpbnZlcnNlLmxvYWRJbnZlcnNlKHRyYW5zZm9ybSk7CiAKLSAgICAgICAgUmVjdCBvdXRDbGlwKGNsaXBSZWN0KTsKKyAgICAgICAgUmVjdCBvdXRDbGlwKGNsaXBSZWN0KCkpOwogICAgICAgICBpbnZlcnNlLm1hcFJlY3Qob3V0Q2xpcCk7CiAgICAgICAgIHJldHVybiBvdXRDbGlwOwogICAgIH0KIAogICAgIE1hdHJpeDQgdHJhbnNmb3JtOwotICAgIFJlY3QgY2xpcFJlY3Q7CisgICAgY29uc3QgUmVjdCYgY2xpcFJlY3QoKSBjb25zdCB7CisgICAgICAgIHJldHVybiBjbGlwU3RhdGUtPnJlY3Q7CisgICAgfQorICAgIGJvb2wgcmVxdWlyZXNDbGlwKCkgY29uc3QgeworICAgICAgICByZXR1cm4gY2xpcFNpZGVGbGFncyAhPSBPcENsaXBTaWRlRmxhZ3M6Ok5vbmUKKyAgICAgICAgICAgICAgICB8fCBDQ19VTkxJS0VMWShjbGlwU3RhdGUtPm1vZGUgIT0gQ2xpcE1vZGU6OlJlY3RhbmdsZSk7CisgICAgfQorCisgICAgLy8gcmV0dXJucyB0aGUgY2xpcCBpZiBpdCdzIG5lZWRlZCB0byBkcmF3IHRoZSBvcGVyYXRpb24sIG90aGVyd2lzZSBudWxscHRyCisgICAgY29uc3QgQ2xpcEJhc2UqIGdldENsaXBJZk5lZWRlZCgpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIHJlcXVpcmVzQ2xpcCgpID8gY2xpcFN0YXRlIDogbnVsbHB0cjsKKyAgICB9CisgICAgY29uc3QgQ2xpcEJhc2UqIGNsaXBTdGF0ZSA9IG51bGxwdHI7CiAgICAgaW50IGNsaXBTaWRlRmxhZ3MgPSAwOwogICAgIFJlY3QgY2xpcHBlZEJvdW5kczsKIH07CkBAIC0xNDcsOCArOTMsOSBAQAogY2xhc3MgQmFrZWRPcFN0YXRlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgQmFrZWRPcFN0YXRlKiB0cnlDb25zdHJ1Y3QoTGluZWFyQWxsb2NhdG9yJiBhbGxvY2F0b3IsCi0gICAgICAgICAgICBjb25zdCBTbmFwc2hvdCYgc25hcHNob3QsIGNvbnN0IFJlY29yZGVkT3AmIHJlY29yZGVkT3ApIHsKLSAgICAgICAgQmFrZWRPcFN0YXRlKiBiYWtlZFN0YXRlID0gbmV3IChhbGxvY2F0b3IpIEJha2VkT3BTdGF0ZShzbmFwc2hvdCwgcmVjb3JkZWRPcCwgZmFsc2UpOworICAgICAgICAgICAgU25hcHNob3QmIHNuYXBzaG90LCBjb25zdCBSZWNvcmRlZE9wJiByZWNvcmRlZE9wKSB7CisgICAgICAgIEJha2VkT3BTdGF0ZSogYmFrZWRTdGF0ZSA9IG5ldyAoYWxsb2NhdG9yKSBCYWtlZE9wU3RhdGUoCisgICAgICAgICAgICAgICAgYWxsb2NhdG9yLCBzbmFwc2hvdCwgcmVjb3JkZWRPcCwgZmFsc2UpOwogICAgICAgICBpZiAoYmFrZWRTdGF0ZS0+Y29tcHV0ZWRTdGF0ZS5jbGlwcGVkQm91bmRzLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgLy8gYm91bmRzIGFyZSBlbXB0eSwgc28gb3AgaXMgcmVqZWN0ZWQKICAgICAgICAgICAgIGFsbG9jYXRvci5yZXdpbmRJZkxhc3RBbGxvYyhiYWtlZFN0YXRlKTsKQEAgLTE2NSwxMyArMTEyLDEzIEBACiAgICAgfTsKIAogICAgIHN0YXRpYyBCYWtlZE9wU3RhdGUqIHRyeVN0cm9rZWFibGVPcENvbnN0cnVjdChMaW5lYXJBbGxvY2F0b3ImIGFsbG9jYXRvciwKLSAgICAgICAgICAgIGNvbnN0IFNuYXBzaG90JiBzbmFwc2hvdCwgY29uc3QgUmVjb3JkZWRPcCYgcmVjb3JkZWRPcCwgU3Ryb2tlQmVoYXZpb3Igc3Ryb2tlQmVoYXZpb3IpIHsKKyAgICAgICAgICAgIFNuYXBzaG90JiBzbmFwc2hvdCwgY29uc3QgUmVjb3JkZWRPcCYgcmVjb3JkZWRPcCwgU3Ryb2tlQmVoYXZpb3Igc3Ryb2tlQmVoYXZpb3IpIHsKICAgICAgICAgYm9vbCBleHBhbmRGb3JTdHJva2UgPSAoc3Ryb2tlQmVoYXZpb3IgPT0gU3Ryb2tlQmVoYXZpb3I6OlN0eWxlRGVmaW5lZCkKICAgICAgICAgICAgICAgICA/IChyZWNvcmRlZE9wLnBhaW50ICYmIHJlY29yZGVkT3AucGFpbnQtPmdldFN0eWxlKCkgIT0gU2tQYWludDo6a0ZpbGxfU3R5bGUpCiAgICAgICAgICAgICAgICAgOiB0cnVlOwogCiAgICAgICAgIEJha2VkT3BTdGF0ZSogYmFrZWRTdGF0ZSA9IG5ldyAoYWxsb2NhdG9yKSBCYWtlZE9wU3RhdGUoCi0gICAgICAgICAgICAgICAgc25hcHNob3QsIHJlY29yZGVkT3AsIGV4cGFuZEZvclN0cm9rZSk7CisgICAgICAgICAgICAgICAgYWxsb2NhdG9yLCBzbmFwc2hvdCwgcmVjb3JkZWRPcCwgZXhwYW5kRm9yU3Ryb2tlKTsKICAgICAgICAgaWYgKGJha2VkU3RhdGUtPmNvbXB1dGVkU3RhdGUuY2xpcHBlZEJvdW5kcy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIC8vIGJvdW5kcyBhcmUgZW1wdHksIHNvIG9wIGlzIHJlamVjdGVkCiAgICAgICAgICAgICBhbGxvY2F0b3IucmV3aW5kSWZMYXN0QWxsb2MoYmFrZWRTdGF0ZSk7CkBAIC0xODEsMTEgKzEyOCwxMSBAQAogICAgIH0KIAogICAgIHN0YXRpYyBCYWtlZE9wU3RhdGUqIHRyeVNoYWRvd09wQ29uc3RydWN0KExpbmVhckFsbG9jYXRvciYgYWxsb2NhdG9yLAotICAgICAgICAgICAgY29uc3QgU25hcHNob3QmIHNuYXBzaG90LCBjb25zdCBTaGFkb3dPcCogc2hhZG93T3BQdHIpIHsKKyAgICAgICAgICAgIFNuYXBzaG90JiBzbmFwc2hvdCwgY29uc3QgU2hhZG93T3AqIHNoYWRvd09wUHRyKSB7CiAgICAgICAgIGlmIChzbmFwc2hvdC5nZXRSZW5kZXJUYXJnZXRDbGlwKCkuaXNFbXB0eSgpKSByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICAvLyBjbGlwIGlzbid0IGVtcHR5LCBzbyBjb25zdHJ1Y3QgdGhlIG9wCi0gICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRvcikgQmFrZWRPcFN0YXRlKHNuYXBzaG90LCBzaGFkb3dPcFB0cik7CisgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRvcikgQmFrZWRPcFN0YXRlKGFsbG9jYXRvciwgc25hcHNob3QsIHNoYWRvd09wUHRyKTsKICAgICB9CiAKICAgICBzdGF0aWMgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzaXplLCBMaW5lYXJBbGxvY2F0b3ImIGFsbG9jYXRvcikgewpAQCAtMjAyLDE1ICsxNDksMTYgQEAKICAgICBjb25zdCBSZWNvcmRlZE9wKiBvcDsKIAogcHJpdmF0ZToKLSAgICBCYWtlZE9wU3RhdGUoY29uc3QgU25hcHNob3QmIHNuYXBzaG90LCBjb25zdCBSZWNvcmRlZE9wJiByZWNvcmRlZE9wLCBib29sIGV4cGFuZEZvclN0cm9rZSkKLSAgICAgICAgICAgIDogY29tcHV0ZWRTdGF0ZShzbmFwc2hvdCwgcmVjb3JkZWRPcCwgZXhwYW5kRm9yU3Ryb2tlKQorICAgIEJha2VkT3BTdGF0ZShMaW5lYXJBbGxvY2F0b3ImIGFsbG9jYXRvciwgU25hcHNob3QmIHNuYXBzaG90LAorICAgICAgICAgICAgY29uc3QgUmVjb3JkZWRPcCYgcmVjb3JkZWRPcCwgYm9vbCBleHBhbmRGb3JTdHJva2UpCisgICAgICAgICAgICA6IGNvbXB1dGVkU3RhdGUoYWxsb2NhdG9yLCBzbmFwc2hvdCwgcmVjb3JkZWRPcCwgZXhwYW5kRm9yU3Ryb2tlKQogICAgICAgICAgICAgLCBhbHBoYShzbmFwc2hvdC5hbHBoYSkKICAgICAgICAgICAgICwgcm91bmRSZWN0Q2xpcFN0YXRlKHNuYXBzaG90LnJvdW5kUmVjdENsaXBTdGF0ZSkKICAgICAgICAgICAgICwgcHJvamVjdGlvblBhdGhNYXNrKHNuYXBzaG90LnByb2plY3Rpb25QYXRoTWFzaykKICAgICAgICAgICAgICwgb3AoJnJlY29yZGVkT3ApIHt9CiAKLSAgICBCYWtlZE9wU3RhdGUoY29uc3QgU25hcHNob3QmIHNuYXBzaG90LCBjb25zdCBTaGFkb3dPcCogc2hhZG93T3BQdHIpCi0gICAgICAgICAgICA6IGNvbXB1dGVkU3RhdGUoc25hcHNob3QpCisgICAgQmFrZWRPcFN0YXRlKExpbmVhckFsbG9jYXRvciYgYWxsb2NhdG9yLCBTbmFwc2hvdCYgc25hcHNob3QsIGNvbnN0IFNoYWRvd09wKiBzaGFkb3dPcFB0cikKKyAgICAgICAgICAgIDogY29tcHV0ZWRTdGF0ZShhbGxvY2F0b3IsIHNuYXBzaG90KQogICAgICAgICAgICAgLCBhbHBoYShzbmFwc2hvdC5hbHBoYSkKICAgICAgICAgICAgICwgcm91bmRSZWN0Q2xpcFN0YXRlKHNuYXBzaG90LnJvdW5kUmVjdENsaXBTdGF0ZSkKICAgICAgICAgICAgICwgcHJvamVjdGlvblBhdGhNYXNrKHNuYXBzaG90LnByb2plY3Rpb25QYXRoTWFzaykKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9DYW52YXNTdGF0ZS5jcHAgYi9saWJzL2h3dWkvQ2FudmFzU3RhdGUuY3BwCmluZGV4IDZhNmNjNDIuLmNmMjcyNmIgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9DYW52YXNTdGF0ZS5jcHAKKysrIGIvbGlicy9od3VpL0NhbnZhc1N0YXRlLmNwcApAQCAtNDUsNiArNDUsMjEgQEAKICAgICB9CiB9CiAKK3ZvaWQgQ2FudmFzU3RhdGU6OmluaXRpYWxpemVSZWNvcmRpbmdTYXZlU3RhY2soaW50IHZpZXdwb3J0V2lkdGgsIGludCB2aWV3cG9ydEhlaWdodCkgeworICAgIGlmIChtV2lkdGggIT0gdmlld3BvcnRXaWR0aCB8fCBtSGVpZ2h0ICE9IHZpZXdwb3J0SGVpZ2h0KSB7CisgICAgICAgIG1XaWR0aCA9IHZpZXdwb3J0V2lkdGg7CisgICAgICAgIG1IZWlnaHQgPSB2aWV3cG9ydEhlaWdodDsKKyAgICAgICAgbUZpcnN0U25hcHNob3QuaW5pdGlhbGl6ZVZpZXdwb3J0KHZpZXdwb3J0V2lkdGgsIHZpZXdwb3J0SGVpZ2h0KTsKKyAgICAgICAgbUNhbnZhcy5vblZpZXdwb3J0SW5pdGlhbGl6ZWQoKTsKKyAgICB9CisKKyAgICBmcmVlQWxsU25hcHNob3RzKCk7CisgICAgbVNuYXBzaG90ID0gYWxsb2NTbmFwc2hvdCgmbUZpcnN0U25hcHNob3QsCisgICAgICAgICAgICBTa0NhbnZhczo6a01hdHJpeF9TYXZlRmxhZyB8IFNrQ2FudmFzOjprQ2xpcF9TYXZlRmxhZyk7CisgICAgbVNuYXBzaG90LT5zZXRSZWxhdGl2ZUxpZ2h0Q2VudGVyKFZlY3RvcjMoKSk7CisgICAgbVNhdmVDb3VudCA9IDE7Cit9CisKIHZvaWQgQ2FudmFzU3RhdGU6OmluaXRpYWxpemVTYXZlU3RhY2soCiAgICAgICAgIGludCB2aWV3cG9ydFdpZHRoLCBpbnQgdmlld3BvcnRIZWlnaHQsCiAgICAgICAgIGZsb2F0IGNsaXBMZWZ0LCBmbG9hdCBjbGlwVG9wLApAQCAtMTkyLDcgKzIwNyw3IEBACiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKIGJvb2wgQ2FudmFzU3RhdGU6OmNsaXBSZWN0KGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwgU2tSZWdpb246Ok9wIG9wKSB7Ci0gICAgbVNuYXBzaG90LT5jbGlwKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSwgb3ApOworICAgIG1TbmFwc2hvdC0+Y2xpcChSZWN0KGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSksIG9wKTsKICAgICBtRGlydHlDbGlwID0gdHJ1ZTsKICAgICByZXR1cm4gIW1TbmFwc2hvdC0+Y2xpcElzRW1wdHkoKTsKIH0KZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9DYW52YXNTdGF0ZS5oIGIvbGlicy9od3VpL0NhbnZhc1N0YXRlLmgKaW5kZXggNDcwOWVmNC4uYjllODdhZSAxMDA2NDQKLS0tIGEvbGlicy9od3VpL0NhbnZhc1N0YXRlLmgKKysrIGIvbGlicy9od3VpL0NhbnZhc1N0YXRlLmgKQEAgLTgwLDYgKzgwLDEyIEBACiAgICAgICogSW5pdGlhbGl6ZXMgdGhlIGZpcnN0IHNuYXBzaG90LCBjb21wdXRpbmcgdGhlIHByb2plY3Rpb24gbWF0cml4LAogICAgICAqIGFuZCBzdG9yZXMgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIHJlbmRlciB0YXJnZXQuCiAgICAgICovCisgICAgdm9pZCBpbml0aWFsaXplUmVjb3JkaW5nU2F2ZVN0YWNrKGludCB2aWV3cG9ydFdpZHRoLCBpbnQgdmlld3BvcnRIZWlnaHQpOworCisgICAgLyoqCisgICAgICogSW5pdGlhbGl6ZXMgdGhlIGZpcnN0IHNuYXBzaG90LCBjb21wdXRpbmcgdGhlIHByb2plY3Rpb24gbWF0cml4LAorICAgICAqIGFuZCBzdG9yZXMgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIHJlbmRlciB0YXJnZXQuCisgICAgICovCiAgICAgdm9pZCBpbml0aWFsaXplU2F2ZVN0YWNrKGludCB2aWV3cG9ydFdpZHRoLCBpbnQgdmlld3BvcnRIZWlnaHQsCiAgICAgICAgICAgICBmbG9hdCBjbGlwTGVmdCwgZmxvYXQgY2xpcFRvcCwgZmxvYXQgY2xpcFJpZ2h0LCBmbG9hdCBjbGlwQm90dG9tLAogICAgICAgICAgICAgY29uc3QgVmVjdG9yMyYgbGlnaHRDZW50ZXIpOwpAQCAtMTY4LDYgKzE3NCw3IEBACiAgICAgdm9pZCBmcmVlQWxsU25hcHNob3RzKCk7CiAKICAgICAvLy8gaW5kaWNhdGVzIHRoYXQgdGhlIGNsaXAgaGFzIGJlZW4gY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCB0aW1lIGl0IHdhcyBjb25zdW1lZAorICAgIC8vIFRPRE86IGRlbGV0ZSB3aGVuIHN3aXRjaGluZyB0byBIV1VJX05FV19PUFMKICAgICBib29sIG1EaXJ0eUNsaXA7CiAKICAgICAvLy8gRGltZW5zaW9ucyBvZiB0aGUgZHJhd2luZyBzdXJmYWNlCmRpZmYgLS1naXQgYS9saWJzL2h3dWkvQ2xpcEFyZWEuY3BwIGIvbGlicy9od3VpL0NsaXBBcmVhLmNwcAppbmRleCBmZDZmMGI1Li4xNjAwOTBkIDEwMDY0NAotLS0gYS9saWJzL2h3dWkvQ2xpcEFyZWEuY3BwCisrKyBiL2xpYnMvaHd1aS9DbGlwQXJlYS5jcHAKQEAgLTE1LDEwICsxNSwxMSBAQAogICovCiAjaW5jbHVkZSAiQ2xpcEFyZWEuaCIKIAorI2luY2x1ZGUgInV0aWxzL0xpbmVhckFsbG9jYXRvci5oIgorCiAjaW5jbHVkZSA8U2tQYXRoLmg+CiAjaW5jbHVkZSA8bGltaXRzPgotCi0jaW5jbHVkZSAiUmVjdC5oIgorI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgogCiBuYW1lc3BhY2UgYW5kcm9pZCB7CiBuYW1lc3BhY2UgdWlyZW5kZXJlciB7CkBAIC0xNzEsMTIgKzE3MiwxOCBAQAogICAgIHJldHVybiByZWN0YW5nbGVMaXN0QXNSZWdpb247CiB9CiAKK3ZvaWQgUmVjdGFuZ2xlTGlzdDo6dHJhbnNmb3JtKGNvbnN0IE1hdHJpeDQmIHRyYW5zZm9ybSkgeworICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBtVHJhbnNmb3JtZWRSZWN0YW5nbGVzQ291bnQ7IGluZGV4KyspIHsKKyAgICAgICAgbVRyYW5zZm9ybWVkUmVjdGFuZ2xlc1tpbmRleF0udHJhbnNmb3JtKHRyYW5zZm9ybSk7CisgICAgfQorfQorCiAvKgogICogQ2xpcEFyZWEKICAqLwogCiBDbGlwQXJlYTo6Q2xpcEFyZWEoKQotICAgICAgICA6IG1Nb2RlKE1vZGU6OlJlY3RhbmdsZSkgeworICAgICAgICA6IG1Nb2RlKENsaXBNb2RlOjpSZWN0YW5nbGUpIHsKIH0KIAogLyoKQEAgLTE4NCw0NSArMTkxLDQ0IEBACiAgKi8KIAogdm9pZCBDbGlwQXJlYTo6c2V0Vmlld3BvcnREaW1lbnNpb25zKGludCB3aWR0aCwgaW50IGhlaWdodCkgeworICAgIG1Qb3N0Vmlld3BvcnRDbGlwT2JzZXJ2ZWQgPSBmYWxzZTsKICAgICBtVmlld3BvcnRCb3VuZHMuc2V0KDAsIDAsIHdpZHRoLCBoZWlnaHQpOwogICAgIG1DbGlwUmVjdCA9IG1WaWV3cG9ydEJvdW5kczsKIH0KIAogdm9pZCBDbGlwQXJlYTo6c2V0RW1wdHkoKSB7Ci0gICAgbU1vZGUgPSBNb2RlOjpSZWN0YW5nbGU7CisgICAgb25DbGlwVXBkYXRlZCgpOworICAgIG1Nb2RlID0gQ2xpcE1vZGU6OlJlY3RhbmdsZTsKICAgICBtQ2xpcFJlY3Quc2V0RW1wdHkoKTsKICAgICBtQ2xpcFJlZ2lvbi5zZXRFbXB0eSgpOwogICAgIG1SZWN0YW5nbGVMaXN0LnNldEVtcHR5KCk7CiB9CiAKIHZvaWQgQ2xpcEFyZWE6OnNldENsaXAoZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tKSB7Ci0gICAgbU1vZGUgPSBNb2RlOjpSZWN0YW5nbGU7CisgICAgb25DbGlwVXBkYXRlZCgpOworICAgIG1Nb2RlID0gQ2xpcE1vZGU6OlJlY3RhbmdsZTsKICAgICBtQ2xpcFJlY3Quc2V0KGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CiAgICAgbUNsaXBSZWdpb24uc2V0RW1wdHkoKTsKIH0KIAotdm9pZCBDbGlwQXJlYTo6Y2xpcFJlY3RXaXRoVHJhbnNmb3JtKGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsCi0gICAgICAgIGZsb2F0IGJvdHRvbSwgY29uc3QgbWF0NCogdHJhbnNmb3JtLCBTa1JlZ2lvbjo6T3Agb3ApIHsKLSAgICBSZWN0IHIobGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKLSAgICBjbGlwUmVjdFdpdGhUcmFuc2Zvcm0ociwgdHJhbnNmb3JtLCBvcCk7Ci19Ci0KIHZvaWQgQ2xpcEFyZWE6OmNsaXBSZWN0V2l0aFRyYW5zZm9ybShjb25zdCBSZWN0JiByLCBjb25zdCBtYXQ0KiB0cmFuc2Zvcm0sCiAgICAgICAgIFNrUmVnaW9uOjpPcCBvcCkgeworICAgIG9uQ2xpcFVwZGF0ZWQoKTsKICAgICBzd2l0Y2ggKG1Nb2RlKSB7Ci0gICAgY2FzZSBNb2RlOjpSZWN0YW5nbGU6CisgICAgY2FzZSBDbGlwTW9kZTo6UmVjdGFuZ2xlOgogICAgICAgICByZWN0YW5nbGVNb2RlQ2xpcFJlY3RXaXRoVHJhbnNmb3JtKHIsIHRyYW5zZm9ybSwgb3ApOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIE1vZGU6OlJlY3RhbmdsZUxpc3Q6CisgICAgY2FzZSBDbGlwTW9kZTo6UmVjdGFuZ2xlTGlzdDoKICAgICAgICAgcmVjdGFuZ2xlTGlzdE1vZGVDbGlwUmVjdFdpdGhUcmFuc2Zvcm0ociwgdHJhbnNmb3JtLCBvcCk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgTW9kZTo6UmVnaW9uOgorICAgIGNhc2UgQ2xpcE1vZGU6OlJlZ2lvbjoKICAgICAgICAgcmVnaW9uTW9kZUNsaXBSZWN0V2l0aFRyYW5zZm9ybShyLCB0cmFuc2Zvcm0sIG9wKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogfQogCiB2b2lkIENsaXBBcmVhOjpjbGlwUmVnaW9uKGNvbnN0IFNrUmVnaW9uJiByZWdpb24sIFNrUmVnaW9uOjpPcCBvcCkgeworICAgIG9uQ2xpcFVwZGF0ZWQoKTsKICAgICBlbnRlclJlZ2lvbk1vZGUoKTsKICAgICBtQ2xpcFJlZ2lvbi5vcChyZWdpb24sIG9wKTsKICAgICBvbkNsaXBSZWdpb25VcGRhdGVkKCk7CkBAIC0yMzAsNiArMjM2LDcgQEAKIAogdm9pZCBDbGlwQXJlYTo6Y2xpcFBhdGhXaXRoVHJhbnNmb3JtKGNvbnN0IFNrUGF0aCYgcGF0aCwgY29uc3QgbWF0NCogdHJhbnNmb3JtLAogICAgICAgICBTa1JlZ2lvbjo6T3Agb3ApIHsKKyAgICBvbkNsaXBVcGRhdGVkKCk7CiAgICAgU2tNYXRyaXggc2tUcmFuc2Zvcm07CiAgICAgdHJhbnNmb3JtLT5jb3B5VG8oc2tUcmFuc2Zvcm0pOwogICAgIFNrUGF0aCB0cmFuc2Zvcm1lZDsKQEAgLTI0Nyw3ICsyNTQsNyBAQAogICAgIC8vIEVudGVyaW5nIHJlY3RhbmdsZSBtb2RlIGRpc2NhcmRzIGFueQogICAgIC8vIGV4aXN0aW5nIGNsaXBwaW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIG90aGVyIG1vZGVzLgogICAgIC8vIFRoZSBvbmx5IHdheSB0aGlzIG9jY3VycyBpcyBieSBhIGNsaXAgc2V0dGluZyBvcGVyYXRpb24uCi0gICAgbU1vZGUgPSBNb2RlOjpSZWN0YW5nbGU7CisgICAgbU1vZGUgPSBDbGlwTW9kZTo6UmVjdGFuZ2xlOwogfQogCiB2b2lkIENsaXBBcmVhOjpyZWN0YW5nbGVNb2RlQ2xpcFJlY3RXaXRoVHJhbnNmb3JtKGNvbnN0IFJlY3QmIHIsCkBAIC0yNzQsMTMgKzI4MSw2IEBACiAgICAgcmVjdGFuZ2xlTGlzdE1vZGVDbGlwUmVjdFdpdGhUcmFuc2Zvcm0ociwgdHJhbnNmb3JtLCBvcCk7CiB9CiAKLXZvaWQgQ2xpcEFyZWE6OnJlY3RhbmdsZU1vZGVDbGlwUmVjdFdpdGhUcmFuc2Zvcm0oZmxvYXQgbGVmdCwgZmxvYXQgdG9wLAotICAgICAgICBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLCBjb25zdCBtYXQ0KiB0cmFuc2Zvcm0sIFNrUmVnaW9uOjpPcCBvcCkgewotICAgIFJlY3QgcihsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwotICAgIHJlY3RhbmdsZU1vZGVDbGlwUmVjdFdpdGhUcmFuc2Zvcm0ociwgdHJhbnNmb3JtLCBvcCk7Ci0gICAgbUNsaXBSZWN0ID0gbVJlY3RhbmdsZUxpc3QuY2FsY3VsYXRlQm91bmRzKCk7Ci19Ci0KIC8qCiAgKiBSZWN0YW5nbGVMaXN0IG1vZGUgaW1wbGVtZW50YXRpb24KICAqLwpAQCAtMjg5LDggKzI4OSw4IEBACiAgICAgLy8gSXMgaXMgb25seSBsZWdhbCB0byBlbnRlciByZWN0YW5nbGUgbGlzdCBtb2RlIGZyb20KICAgICAvLyByZWN0YW5nbGUgbW9kZSwgc2luY2UgcmVjdGFuZ2xlIGxpc3QgbW9kZSBjYW5ub3QgcmVwcmVzZW50CiAgICAgLy8gYWxsIGNsaXAgYXJlYXMgdGhhdCBjYW4gYmUgcmVwcmVzZW50ZWQgYnkgYSByZWdpb24uCi0gICAgQUxPR19BU1NFUlQobU1vZGUgPT0gTW9kZTo6UmVjdGFuZ2xlKTsKLSAgICBtTW9kZSA9IE1vZGU6OlJlY3RhbmdsZUxpc3Q7CisgICAgQUxPR19BU1NFUlQobU1vZGUgPT0gQ2xpcE1vZGU6OlJlY3RhbmdsZSk7CisgICAgbU1vZGUgPSBDbGlwTW9kZTo6UmVjdGFuZ2xlTGlzdDsKICAgICBtUmVjdGFuZ2xlTGlzdC5zZXQobUNsaXBSZWN0LCBNYXRyaXg0OjppZGVudGl0eSgpKTsKIH0KIApAQCAtMzAzLDIzICszMDMsMTYgQEAKICAgICB9CiB9CiAKLXZvaWQgQ2xpcEFyZWE6OnJlY3RhbmdsZUxpc3RNb2RlQ2xpcFJlY3RXaXRoVHJhbnNmb3JtKGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwKLSAgICAgICAgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwgY29uc3QgbWF0NCogdHJhbnNmb3JtLCBTa1JlZ2lvbjo6T3Agb3ApIHsKLSAgICBSZWN0IHIobGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKLSAgICByZWN0YW5nbGVMaXN0TW9kZUNsaXBSZWN0V2l0aFRyYW5zZm9ybShyLCB0cmFuc2Zvcm0sIG9wKTsKLX0KLQogLyoKICAqIFJlZ2lvbiBtb2RlIGltcGxlbWVudGF0aW9uCiAgKi8KIAogdm9pZCBDbGlwQXJlYTo6ZW50ZXJSZWdpb25Nb2RlKCkgewotICAgIE1vZGUgb2xkTW9kZSA9IG1Nb2RlOwotICAgIG1Nb2RlID0gTW9kZTo6UmVnaW9uOwotICAgIGlmIChvbGRNb2RlICE9IE1vZGU6OlJlZ2lvbikgewotICAgICAgICBpZiAob2xkTW9kZSA9PSBNb2RlOjpSZWN0YW5nbGUpIHsKLSAgICAgICAgICAgIG1DbGlwUmVnaW9uLnNldFJlY3QobUNsaXBSZWN0LmxlZnQsIG1DbGlwUmVjdC50b3AsCi0gICAgICAgICAgICAgICAgICAgIG1DbGlwUmVjdC5yaWdodCwgbUNsaXBSZWN0LmJvdHRvbSk7CisgICAgQ2xpcE1vZGUgb2xkTW9kZSA9IG1Nb2RlOworICAgIG1Nb2RlID0gQ2xpcE1vZGU6OlJlZ2lvbjsKKyAgICBpZiAob2xkTW9kZSAhPSBDbGlwTW9kZTo6UmVnaW9uKSB7CisgICAgICAgIGlmIChvbGRNb2RlID09IENsaXBNb2RlOjpSZWN0YW5nbGUpIHsKKyAgICAgICAgICAgIG1DbGlwUmVnaW9uLnNldFJlY3QobUNsaXBSZWN0LnRvU2tJUmVjdCgpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1DbGlwUmVnaW9uID0gbVJlY3RhbmdsZUxpc3QuY29udmVydFRvUmVnaW9uKGNyZWF0ZVZpZXdwb3J0UmVnaW9uKCkpOwogICAgICAgICAgICAgb25DbGlwUmVnaW9uVXBkYXRlZCgpOwpAQCAtMzM2LDExICszMjksNiBAQAogICAgIG9uQ2xpcFJlZ2lvblVwZGF0ZWQoKTsKIH0KIAotdm9pZCBDbGlwQXJlYTo6cmVnaW9uTW9kZUNsaXBSZWN0V2l0aFRyYW5zZm9ybShmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsCi0gICAgICAgIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sIGNvbnN0IG1hdDQqIHRyYW5zZm9ybSwgU2tSZWdpb246Ok9wIG9wKSB7Ci0gICAgcmVnaW9uTW9kZUNsaXBSZWN0V2l0aFRyYW5zZm9ybShSZWN0KGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSksIHRyYW5zZm9ybSwgb3ApOwotfQotCiB2b2lkIENsaXBBcmVhOjpvbkNsaXBSZWdpb25VcGRhdGVkKCkgewogICAgIGlmICghbUNsaXBSZWdpb24uaXNFbXB0eSgpKSB7CiAgICAgICAgIG1DbGlwUmVjdC5zZXQobUNsaXBSZWdpb24uZ2V0Qm91bmRzKCkpOwpAQCAtMzU0LDUgKzM0MiwxNzIgQEAKICAgICB9CiB9CiAKKy8qKgorICogQ2xpcCBzZXJpYWxpemF0aW9uCisgKi8KKworY29uc3QgQ2xpcEJhc2UqIENsaXBBcmVhOjpzZXJpYWxpemVDbGlwKExpbmVhckFsbG9jYXRvciYgYWxsb2NhdG9yKSB7CisgICAgaWYgKCFtUG9zdFZpZXdwb3J0Q2xpcE9ic2VydmVkKSB7CisgICAgICAgIC8vIE9ubHkgaW5pdGlhbCBjbGlwLXRvLXZpZXdwb3J0IG9ic2VydmVkLCBzbyBubyBzZXJpYWxpemF0aW9uIG9mIGNsaXAgbmVjZXNzYXJ5CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFJlY3Q+Ojp2YWx1ZSwKKyAgICAgICAgICAgICJleHBlY3QgUmVjdCB0byBiZSB0cml2aWFsbHkgZGVzdHJ1Y3RpYmxlIik7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8UmVjdGFuZ2xlTGlzdD46OnZhbHVlLAorICAgICAgICAgICAgImV4cGVjdCBSZWN0YW5nbGVMaXN0IHRvIGJlIHRyaXZpYWxseSBkZXN0cnVjdGlibGUiKTsKKworICAgIGlmIChtTGFzdFNlcmlhbGl6YXRpb24gPT0gbnVsbHB0cikgeworICAgICAgICBzd2l0Y2ggKG1Nb2RlKSB7CisgICAgICAgIGNhc2UgQ2xpcE1vZGU6OlJlY3RhbmdsZToKKyAgICAgICAgICAgIG1MYXN0U2VyaWFsaXphdGlvbiA9IGFsbG9jYXRvci5jcmVhdGU8Q2xpcFJlY3Q+KG1DbGlwUmVjdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDbGlwTW9kZTo6UmVjdGFuZ2xlTGlzdDoKKyAgICAgICAgICAgIG1MYXN0U2VyaWFsaXphdGlvbiA9IGFsbG9jYXRvci5jcmVhdGU8Q2xpcFJlY3RMaXN0PihtUmVjdGFuZ2xlTGlzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDbGlwTW9kZTo6UmVnaW9uOgorICAgICAgICAgICAgbUxhc3RTZXJpYWxpemF0aW9uID0gYWxsb2NhdG9yLmNyZWF0ZTxDbGlwUmVnaW9uPihtQ2xpcFJlZ2lvbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbUxhc3RTZXJpYWxpemF0aW9uOworfQorCitpbmxpbmUgc3RhdGljIGNvbnN0IFJlY3QmIGdldFJlY3QoY29uc3QgQ2xpcEJhc2UqIHNjYikgeworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IENsaXBSZWN0Kj4oc2NiKS0+cmVjdDsKK30KKworaW5saW5lIHN0YXRpYyBjb25zdCBSZWN0YW5nbGVMaXN0JiBnZXRSZWN0TGlzdChjb25zdCBDbGlwQmFzZSogc2NiKSB7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ2xpcFJlY3RMaXN0Kj4oc2NiKS0+cmVjdExpc3Q7Cit9CisKK2lubGluZSBzdGF0aWMgY29uc3QgU2tSZWdpb24mIGdldFJlZ2lvbihjb25zdCBDbGlwQmFzZSogc2NiKSB7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ2xpcFJlZ2lvbio+KHNjYiktPnJlZ2lvbjsKK30KKworLy8gQ29uc2VydmF0aXZlIGNoZWNrIGZvciB0b28gbWFueSByZWN0YW5nbGVzIHRvIGZpdCBpbiByZWN0YW5nbGUgbGlzdC4KKy8vIEZvciBzaW1wbGljaXR5LCBkb2Vzbid0IGFjY291bnQgZm9yIHJlY3QgbWVyZ2luZworc3RhdGljIGJvb2wgY2Fubm90Rml0SW5SZWN0YW5nbGVMaXN0KGNvbnN0IENsaXBBcmVhJiBjbGlwQXJlYSwgY29uc3QgQ2xpcEJhc2UqIHNjYikgeworICAgIGludCBjdXJyZW50UmVjdENvdW50ID0gY2xpcEFyZWEuaXNSZWN0YW5nbGVMaXN0KCkKKyAgICAgICAgICAgID8gY2xpcEFyZWEuZ2V0UmVjdGFuZ2xlTGlzdCgpLmdldFRyYW5zZm9ybWVkUmVjdGFuZ2xlc0NvdW50KCkKKyAgICAgICAgICAgIDogMTsKKyAgICBpbnQgcmVjb3JkZWRSZWN0Q291bnQgPSAoc2NiLT5tb2RlID09IENsaXBNb2RlOjpSZWN0YW5nbGVMaXN0KQorICAgICAgICAgICAgPyBnZXRSZWN0TGlzdChzY2IpLmdldFRyYW5zZm9ybWVkUmVjdGFuZ2xlc0NvdW50KCkKKyAgICAgICAgICAgIDogMTsKKyAgICByZXR1cm4gY3VycmVudFJlY3RDb3VudCArIHJlY29yZGVkUmVjdENvdW50ID4gUmVjdGFuZ2xlTGlzdDo6a01heFRyYW5zZm9ybWVkUmVjdGFuZ2xlczsKK30KKworY29uc3QgQ2xpcEJhc2UqIENsaXBBcmVhOjpzZXJpYWxpemVJbnRlcnNlY3RlZENsaXAoTGluZWFyQWxsb2NhdG9yJiBhbGxvY2F0b3IsCisgICAgICAgIGNvbnN0IENsaXBCYXNlKiByZWNvcmRlZENsaXAsIGNvbnN0IE1hdHJpeDQmIHJlY29yZGVkQ2xpcFRyYW5zZm9ybSkgeworICAgIC8vIGlmIG5vIHJlY29yZGVkQ2xpcCBwYXNzZWQsIGp1c3Qgc2VyaWFsaXplIGN1cnJlbnQgc3RhdGUKKyAgICBpZiAoIXJlY29yZGVkQ2xpcCkgcmV0dXJuIHNlcmlhbGl6ZUNsaXAoYWxsb2NhdG9yKTsKKworICAgIGlmICghbUxhc3RSZXNvbHV0aW9uUmVzdWx0CisgICAgICAgICAgICB8fCByZWNvcmRlZENsaXAgIT0gbUxhc3RSZXNvbHV0aW9uQ2xpcAorICAgICAgICAgICAgfHwgcmVjb3JkZWRDbGlwVHJhbnNmb3JtICE9IG1MYXN0UmVzb2x1dGlvblRyYW5zZm9ybSkgeworICAgICAgICBtTGFzdFJlc29sdXRpb25DbGlwID0gcmVjb3JkZWRDbGlwOworICAgICAgICBtTGFzdFJlc29sdXRpb25UcmFuc2Zvcm0gPSByZWNvcmRlZENsaXBUcmFuc2Zvcm07CisKKyAgICAgICAgaWYgKENDX0xJS0VMWShtTW9kZSA9PSBDbGlwTW9kZTo6UmVjdGFuZ2xlCisgICAgICAgICAgICAgICAgJiYgcmVjb3JkZWRDbGlwLT5tb2RlID09IENsaXBNb2RlOjpSZWN0YW5nbGUKKyAgICAgICAgICAgICAgICAmJiByZWNvcmRlZENsaXBUcmFuc2Zvcm0ucmVjdFRvUmVjdCgpKSkgeworICAgICAgICAgICAgLy8gY29tbW9uIGNhc2UgLSByZXN1bHQgaXMgYSBzaW5nbGUgcmVjdGFuZ2xlCisgICAgICAgICAgICBhdXRvIHJlY3RDbGlwID0gYWxsb2NhdG9yLmNyZWF0ZTxDbGlwUmVjdD4oZ2V0UmVjdChyZWNvcmRlZENsaXApKTsKKyAgICAgICAgICAgIHJlY29yZGVkQ2xpcFRyYW5zZm9ybS5tYXBSZWN0KHJlY3RDbGlwLT5yZWN0KTsKKyAgICAgICAgICAgIHJlY3RDbGlwLT5yZWN0LmRvSW50ZXJzZWN0KG1DbGlwUmVjdCk7CisgICAgICAgICAgICBtTGFzdFJlc29sdXRpb25SZXN1bHQgPSByZWN0Q2xpcDsKKyAgICAgICAgfSBlbHNlIGlmIChDQ19VTkxJS0VMWShtTW9kZSA9PSBDbGlwTW9kZTo6UmVnaW9uCisgICAgICAgICAgICAgICAgfHwgcmVjb3JkZWRDbGlwLT5tb2RlID09IENsaXBNb2RlOjpSZWdpb24KKyAgICAgICAgICAgICAgICB8fCBjYW5ub3RGaXRJblJlY3RhbmdsZUxpc3QoKnRoaXMsIHJlY29yZGVkQ2xpcCkpKSB7CisgICAgICAgICAgICAvLyByZWdpb24gY2FzZQorICAgICAgICAgICAgU2tSZWdpb24gb3RoZXI7CisgICAgICAgICAgICBzd2l0Y2ggKHJlY29yZGVkQ2xpcC0+bW9kZSkgeworICAgICAgICAgICAgY2FzZSBDbGlwTW9kZTo6UmVjdGFuZ2xlOgorICAgICAgICAgICAgICAgIGlmIChDQ19MSUtFTFkocmVjb3JkZWRDbGlwVHJhbnNmb3JtLnJlY3RUb1JlY3QoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gc2ltcGxlIHRyYW5zZm9ybSwgc2tpcCBjcmVhdGluZyBTa1BhdGgKKyAgICAgICAgICAgICAgICAgICAgUmVjdCByZXN1bHRDbGlwKGdldFJlY3QocmVjb3JkZWRDbGlwKSk7CisgICAgICAgICAgICAgICAgICAgIHJlY29yZGVkQ2xpcFRyYW5zZm9ybS5tYXBSZWN0KHJlc3VsdENsaXApOworICAgICAgICAgICAgICAgICAgICBvdGhlci5zZXRSZWN0KHJlc3VsdENsaXAudG9Ta0lSZWN0KCkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIFNrUGF0aCB0cmFuc2Zvcm1lZFJlY3QgPSBwYXRoRnJvbVRyYW5zZm9ybWVkUmVjdGFuZ2xlKGdldFJlY3QocmVjb3JkZWRDbGlwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRlZENsaXBUcmFuc2Zvcm0pOworICAgICAgICAgICAgICAgICAgICBvdGhlci5zZXRQYXRoKHRyYW5zZm9ybWVkUmVjdCwgY3JlYXRlVmlld3BvcnRSZWdpb24oKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDbGlwTW9kZTo6UmVjdGFuZ2xlTGlzdDogeworICAgICAgICAgICAgICAgIFJlY3RhbmdsZUxpc3QgdHJhbnNmb3JtZWRMaXN0KGdldFJlY3RMaXN0KHJlY29yZGVkQ2xpcCkpOworICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkTGlzdC50cmFuc2Zvcm0ocmVjb3JkZWRDbGlwVHJhbnNmb3JtKTsKKyAgICAgICAgICAgICAgICBvdGhlciA9IHRyYW5zZm9ybWVkTGlzdC5jb252ZXJ0VG9SZWdpb24oY3JlYXRlVmlld3BvcnRSZWdpb24oKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIENsaXBNb2RlOjpSZWdpb246CisgICAgICAgICAgICAgICAgb3RoZXIgPSBnZXRSZWdpb24ocmVjb3JkZWRDbGlwKTsKKworICAgICAgICAgICAgICAgIC8vIFRPRE86IGhhbmRsZSBub24tdHJhbnNsYXRlIHRyYW5zZm9ybXMgcHJvcGVybHkhCisgICAgICAgICAgICAgICAgb3RoZXIudHJhbnNsYXRlKHJlY29yZGVkQ2xpcFRyYW5zZm9ybS5nZXRUcmFuc2xhdGVYKCksCisgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRlZENsaXBUcmFuc2Zvcm0uZ2V0VHJhbnNsYXRlWSgpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQ2xpcFJlZ2lvbiogcmVnaW9uQ2xpcCA9IGFsbG9jYXRvci5jcmVhdGU8Q2xpcFJlZ2lvbj4oKTsKKyAgICAgICAgICAgIHN3aXRjaCAobU1vZGUpIHsKKyAgICAgICAgICAgIGNhc2UgQ2xpcE1vZGU6OlJlY3RhbmdsZToKKyAgICAgICAgICAgICAgICByZWdpb25DbGlwLT5yZWdpb24ub3AobUNsaXBSZWN0LnRvU2tJUmVjdCgpLCBvdGhlciwgU2tSZWdpb246OmtJbnRlcnNlY3RfT3ApOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDbGlwTW9kZTo6UmVjdGFuZ2xlTGlzdDoKKyAgICAgICAgICAgICAgICByZWdpb25DbGlwLT5yZWdpb24ub3AobVJlY3RhbmdsZUxpc3QuY29udmVydFRvUmVnaW9uKGNyZWF0ZVZpZXdwb3J0UmVnaW9uKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXIsIFNrUmVnaW9uOjprSW50ZXJzZWN0X09wKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ2xpcE1vZGU6OlJlZ2lvbjoKKyAgICAgICAgICAgICAgICByZWdpb25DbGlwLT5yZWdpb24ub3AobUNsaXBSZWdpb24sIG90aGVyLCBTa1JlZ2lvbjo6a0ludGVyc2VjdF9PcCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZWdpb25DbGlwLT5yZWN0LnNldChyZWdpb25DbGlwLT5yZWdpb24uZ2V0Qm91bmRzKCkpOworICAgICAgICAgICAgbUxhc3RSZXNvbHV0aW9uUmVzdWx0ID0gcmVnaW9uQ2xpcDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8gcmVjdExpc3RDbGlwID0gYWxsb2NhdG9yLmNyZWF0ZTxDbGlwUmVjdExpc3Q+KG1SZWN0YW5nbGVMaXN0KTsKKyAgICAgICAgICAgIGF1dG8mJiByZWN0TGlzdCA9IHJlY3RMaXN0Q2xpcC0+cmVjdExpc3Q7CisgICAgICAgICAgICBpZiAobU1vZGUgPT0gQ2xpcE1vZGU6OlJlY3RhbmdsZSkgeworICAgICAgICAgICAgICAgIHJlY3RMaXN0LnNldChtQ2xpcFJlY3QsIE1hdHJpeDQ6OmlkZW50aXR5KCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocmVjb3JkZWRDbGlwLT5tb2RlID09IENsaXBNb2RlOjpSZWN0YW5nbGUpIHsKKyAgICAgICAgICAgICAgICByZWN0TGlzdC5pbnRlcnNlY3RXaXRoKGdldFJlY3QocmVjb3JkZWRDbGlwKSwgcmVjb3JkZWRDbGlwVHJhbnNmb3JtKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY29uc3QgUmVjdGFuZ2xlTGlzdCYgb3RoZXIgPSBnZXRSZWN0TGlzdChyZWNvcmRlZENsaXApOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb3RoZXIuZ2V0VHJhbnNmb3JtZWRSZWN0YW5nbGVzQ291bnQoKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8mJiB0ciA9IG90aGVyLmdldFRyYW5zZm9ybWVkUmVjdGFuZ2xlKGkpOworICAgICAgICAgICAgICAgICAgICBNYXRyaXg0IHRvdGFsVHJhbnNmb3JtKHJlY29yZGVkQ2xpcFRyYW5zZm9ybSk7CisgICAgICAgICAgICAgICAgICAgIHRvdGFsVHJhbnNmb3JtLm11bHRpcGx5KHRyLmdldFRyYW5zZm9ybSgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVjdExpc3QuaW50ZXJzZWN0V2l0aCh0ci5nZXRCb3VuZHMoKSwgdG90YWxUcmFuc2Zvcm0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlY3RMaXN0Q2xpcC0+cmVjdCA9IHJlY3RMaXN0LmNhbGN1bGF0ZUJvdW5kcygpOworICAgICAgICAgICAgbUxhc3RSZXNvbHV0aW9uUmVzdWx0ID0gcmVjdExpc3RDbGlwOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBtTGFzdFJlc29sdXRpb25SZXN1bHQ7Cit9CisKK3ZvaWQgQ2xpcEFyZWE6OmFwcGx5Q2xpcChjb25zdCBDbGlwQmFzZSogY2xpcCwgY29uc3QgTWF0cml4NCYgdHJhbnNmb3JtKSB7CisgICAgaWYgKCFjbGlwKSByZXR1cm47IC8vIG5vdGhpbmcgdG8gZG8KKworICAgIGlmIChDQ19MSUtFTFkoY2xpcC0+bW9kZSA9PSBDbGlwTW9kZTo6UmVjdGFuZ2xlKSkgeworICAgICAgICBjbGlwUmVjdFdpdGhUcmFuc2Zvcm0oZ2V0UmVjdChjbGlwKSwgJnRyYW5zZm9ybSwgU2tSZWdpb246OmtJbnRlcnNlY3RfT3ApOworICAgIH0gZWxzZSBpZiAoQ0NfTElLRUxZKGNsaXAtPm1vZGUgPT0gQ2xpcE1vZGU6OlJlY3RhbmdsZUxpc3QpKSB7CisgICAgICAgIGF1dG8mJiByZWN0TGlzdCA9IGdldFJlY3RMaXN0KGNsaXApOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlY3RMaXN0LmdldFRyYW5zZm9ybWVkUmVjdGFuZ2xlc0NvdW50KCk7IGkrKykgeworICAgICAgICAgICAgYXV0byYmIHRyID0gcmVjdExpc3QuZ2V0VHJhbnNmb3JtZWRSZWN0YW5nbGUoaSk7CisgICAgICAgICAgICBNYXRyaXg0IHRvdGFsVHJhbnNmb3JtKHRyYW5zZm9ybSk7CisgICAgICAgICAgICB0b3RhbFRyYW5zZm9ybS5tdWx0aXBseSh0ci5nZXRUcmFuc2Zvcm0oKSk7CisgICAgICAgICAgICBjbGlwUmVjdFdpdGhUcmFuc2Zvcm0odHIuZ2V0Qm91bmRzKCksICZ0b3RhbFRyYW5zZm9ybSwgU2tSZWdpb246OmtJbnRlcnNlY3RfT3ApOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgU2tSZWdpb24gcmVnaW9uKGdldFJlZ2lvbihjbGlwKSk7CisgICAgICAgIC8vIFRPRE86IGhhbmRsZSBub24tdHJhbnNsYXRlIHRyYW5zZm9ybXMgcHJvcGVybHkhCisgICAgICAgIHJlZ2lvbi50cmFuc2xhdGUodHJhbnNmb3JtLmdldFRyYW5zbGF0ZVgoKSwgdHJhbnNmb3JtLmdldFRyYW5zbGF0ZVkoKSk7CisgICAgICAgIGNsaXBSZWdpb24ocmVnaW9uLCBTa1JlZ2lvbjo6a0ludGVyc2VjdF9PcCk7CisgICAgfQorfQorCiB9IC8qIG5hbWVzcGFjZSB1aXJlbmRlcmVyICovCiB9IC8qIG5hbWVzcGFjZSBhbmRyb2lkICovCmRpZmYgLS1naXQgYS9saWJzL2h3dWkvQ2xpcEFyZWEuaCBiL2xpYnMvaHd1aS9DbGlwQXJlYS5oCmluZGV4IGY4OGZkOTIuLjQ3OTc5NmQgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9DbGlwQXJlYS5oCisrKyBiL2xpYnMvaHd1aS9DbGlwQXJlYS5oCkBAIC0xNiwxNSArMTYsMTcgQEAKICNpZm5kZWYgQ0xJUEFSRUFfSAogI2RlZmluZSBDTElQQVJFQV9ICiAKLSNpbmNsdWRlIDxTa1JlZ2lvbi5oPgotCiAjaW5jbHVkZSAiTWF0cml4LmgiCiAjaW5jbHVkZSAiUmVjdC5oIgogI2luY2x1ZGUgInV0aWxzL1BhaXIuaCIKIAorI2luY2x1ZGUgPFNrUmVnaW9uLmg+CisKIG5hbWVzcGFjZSBhbmRyb2lkIHsKIG5hbWVzcGFjZSB1aXJlbmRlcmVyIHsKIAorY2xhc3MgTGluZWFyQWxsb2NhdG9yOworCiBSZWN0IHRyYW5zZm9ybUFuZENhbGN1bGF0ZUJvdW5kcyhjb25zdCBSZWN0JiByLCBjb25zdCBNYXRyaXg0JiB0cmFuc2Zvcm0pOwogCiBjbGFzcyBUcmFuc2Zvcm1lZFJlY3RhbmdsZSB7CkBAIC01MCw2ICs1MiwxMiBAQAogICAgICAgICByZXR1cm4gbVRyYW5zZm9ybTsKICAgICB9CiAKKyAgICB2b2lkIHRyYW5zZm9ybShjb25zdCBNYXRyaXg0JiB0cmFuc2Zvcm0pIHsKKyAgICAgICAgTWF0cml4NCB0OworICAgICAgICB0LmxvYWRNdWx0aXBseSh0cmFuc2Zvcm0sIG1UcmFuc2Zvcm0pOworICAgICAgICBtVHJhbnNmb3JtID0gdDsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgUmVjdCBtQm91bmRzOwogICAgIE1hdHJpeDQgbVRyYW5zZm9ybTsKQEAgLTY2LDI3ICs3NCw2MiBAQAogICAgIHZvaWQgc2V0RW1wdHkoKTsKICAgICB2b2lkIHNldChjb25zdCBSZWN0JiBib3VuZHMsIGNvbnN0IE1hdHJpeDQmIHRyYW5zZm9ybSk7CiAgICAgYm9vbCBpbnRlcnNlY3RXaXRoKGNvbnN0IFJlY3QmIGJvdW5kcywgY29uc3QgTWF0cml4NCYgdHJhbnNmb3JtKTsKKyAgICB2b2lkIHRyYW5zZm9ybShjb25zdCBNYXRyaXg0JiB0cmFuc2Zvcm0pOwogCiAgICAgU2tSZWdpb24gY29udmVydFRvUmVnaW9uKGNvbnN0IFNrUmVnaW9uJiBjbGlwKSBjb25zdDsKICAgICBSZWN0IGNhbGN1bGF0ZUJvdW5kcygpIGNvbnN0OwogCi1wcml2YXRlOgogICAgIGVudW0gewogICAgICAgICBrTWF4VHJhbnNmb3JtZWRSZWN0YW5nbGVzID0gNQogICAgIH07CiAKK3ByaXZhdGU6CiAgICAgaW50IG1UcmFuc2Zvcm1lZFJlY3RhbmdsZXNDb3VudDsKICAgICBUcmFuc2Zvcm1lZFJlY3RhbmdsZSBtVHJhbnNmb3JtZWRSZWN0YW5nbGVzW2tNYXhUcmFuc2Zvcm1lZFJlY3RhbmdsZXNdOwogfTsKIAotY2xhc3MgQ2xpcEFyZWEgewotcHJpdmF0ZToKLSAgICBlbnVtIGNsYXNzIE1vZGUgewotICAgICAgICBSZWN0YW5nbGUsCi0gICAgICAgIFJlZ2lvbiwKLSAgICAgICAgUmVjdGFuZ2xlTGlzdAotICAgIH07CitlbnVtIGNsYXNzIENsaXBNb2RlIHsKKyAgICBSZWN0YW5nbGUsCisgICAgUmVjdGFuZ2xlTGlzdCwKIAorICAgIC8vIHJlZ2lvbiBhbmQgcGF0aCAtIGludGVyc2VjdGVkLiBpZiBlaXRoZXIgaXMgZW1wdHksIGRvbid0IHVzZQorICAgIFJlZ2lvbgorfTsKKworc3RydWN0IENsaXBCYXNlIHsKKyAgICBDbGlwQmFzZShDbGlwTW9kZSBtb2RlKQorICAgICAgICAgICAgOiBtb2RlKG1vZGUpIHt9CisgICAgQ2xpcEJhc2UoY29uc3QgUmVjdCYgcmVjdCkKKyAgICAgICAgICAgIDogbW9kZShDbGlwTW9kZTo6UmVjdGFuZ2xlKQorICAgICAgICAgICAgLCByZWN0KHJlY3QpIHt9CisgICAgY29uc3QgQ2xpcE1vZGUgbW9kZTsKKyAgICAvLyBCb3VuZHMgb2YgdGhlIGNsaXBwaW5nIGFyZWEsIHVzZWQgdG8gZGVmaW5lIHRoZSBzY2lzc29yLCBhbmQgZGVmaW5lIHdoaWNoCisgICAgLy8gcG9ydGlvbiBvZiB0aGUgc3RlbmNpbCBpcyB1cGRhdGVkL3VzZWQKKyAgICBSZWN0IHJlY3Q7Cit9OworCitzdHJ1Y3QgQ2xpcFJlY3QgOiBDbGlwQmFzZSB7CisgICAgQ2xpcFJlY3QoY29uc3QgUmVjdCYgcmVjdCkKKyAgICAgICAgICAgIDogQ2xpcEJhc2UocmVjdCkge30KK307CisKK3N0cnVjdCBDbGlwUmVjdExpc3QgOiBDbGlwQmFzZSB7CisgICAgQ2xpcFJlY3RMaXN0KGNvbnN0IFJlY3RhbmdsZUxpc3QmIHJlY3RMaXN0KQorICAgICAgICAgICAgOiBDbGlwQmFzZShDbGlwTW9kZTo6UmVjdGFuZ2xlTGlzdCkKKyAgICAgICAgICAgICwgcmVjdExpc3QocmVjdExpc3QpIHt9CisgICAgUmVjdGFuZ2xlTGlzdCByZWN0TGlzdDsKK307CisKK3N0cnVjdCBDbGlwUmVnaW9uIDogQ2xpcEJhc2UgeworICAgIENsaXBSZWdpb24oY29uc3QgU2tSZWdpb24mIHJlZ2lvbikKKyAgICAgICAgICAgIDogQ2xpcEJhc2UoQ2xpcE1vZGU6OlJlZ2lvbikKKyAgICAgICAgICAgICwgcmVnaW9uKHJlZ2lvbikge30KKyAgICBDbGlwUmVnaW9uKCkKKyAgICAgICAgICAgIDogQ2xpcEJhc2UoQ2xpcE1vZGU6OlJlZ2lvbikge30KKyAgICBTa1JlZ2lvbiByZWdpb247Cit9OworCitjbGFzcyBDbGlwQXJlYSB7CiBwdWJsaWM6CiAgICAgQ2xpcEFyZWEoKTsKIApAQCAtOTgsOCArMTQxLDYgQEAKIAogICAgIHZvaWQgc2V0RW1wdHkoKTsKICAgICB2b2lkIHNldENsaXAoZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tKTsKLSAgICB2b2lkIGNsaXBSZWN0V2l0aFRyYW5zZm9ybShmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sCi0gICAgICAgICAgICBjb25zdCBtYXQ0KiB0cmFuc2Zvcm0sIFNrUmVnaW9uOjpPcCBvcCk7CiAgICAgdm9pZCBjbGlwUmVjdFdpdGhUcmFuc2Zvcm0oY29uc3QgUmVjdCYgciwgY29uc3QgbWF0NCogdHJhbnNmb3JtLAogICAgICAgICAgICAgU2tSZWdpb246Ok9wIG9wKTsKICAgICB2b2lkIGNsaXBSZWdpb24oY29uc3QgU2tSZWdpb24mIHJlZ2lvbiwgU2tSZWdpb246Ok9wIG9wKTsKQEAgLTExOSwyNiArMTYwLDI3IEBACiAgICAgfQogCiAgICAgYm9vbCBpc1JlZ2lvbigpIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuIE1vZGU6OlJlZ2lvbiA9PSBtTW9kZTsKKyAgICAgICAgcmV0dXJuIENsaXBNb2RlOjpSZWdpb24gPT0gbU1vZGU7CiAgICAgfQogCiAgICAgYm9vbCBpc1NpbXBsZSgpIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuIG1Nb2RlID09IE1vZGU6OlJlY3RhbmdsZTsKKyAgICAgICAgcmV0dXJuIG1Nb2RlID09IENsaXBNb2RlOjpSZWN0YW5nbGU7CiAgICAgfQogCiAgICAgYm9vbCBpc1JlY3RhbmdsZUxpc3QoKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiBtTW9kZSA9PSBNb2RlOjpSZWN0YW5nbGVMaXN0OworICAgICAgICByZXR1cm4gbU1vZGUgPT0gQ2xpcE1vZGU6OlJlY3RhbmdsZUxpc3Q7CiAgICAgfQogCisgICAgY29uc3QgQ2xpcEJhc2UqIHNlcmlhbGl6ZUNsaXAoTGluZWFyQWxsb2NhdG9yJiBhbGxvY2F0b3IpOworICAgIGNvbnN0IENsaXBCYXNlKiBzZXJpYWxpemVJbnRlcnNlY3RlZENsaXAoTGluZWFyQWxsb2NhdG9yJiBhbGxvY2F0b3IsCisgICAgICAgICAgICBjb25zdCBDbGlwQmFzZSogcmVjb3JkZWRDbGlwLCBjb25zdCBNYXRyaXg0JiByZWNvcmRlZENsaXBUcmFuc2Zvcm0pOworICAgIHZvaWQgYXBwbHlDbGlwKGNvbnN0IENsaXBCYXNlKiByZWNvcmRlZENsaXAsIGNvbnN0IE1hdHJpeDQmIHJlY29yZGVkQ2xpcFRyYW5zZm9ybSk7CisKIHByaXZhdGU6CiAgICAgdm9pZCBlbnRlclJlY3RhbmdsZU1vZGUoKTsKICAgICB2b2lkIHJlY3RhbmdsZU1vZGVDbGlwUmVjdFdpdGhUcmFuc2Zvcm0oY29uc3QgUmVjdCYgciwgY29uc3QgbWF0NCogdHJhbnNmb3JtLCBTa1JlZ2lvbjo6T3Agb3ApOwotICAgIHZvaWQgcmVjdGFuZ2xlTW9kZUNsaXBSZWN0V2l0aFRyYW5zZm9ybShmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LAotICAgICAgICAgICAgZmxvYXQgYm90dG9tLCBjb25zdCBtYXQ0KiB0cmFuc2Zvcm0sIFNrUmVnaW9uOjpPcCBvcCk7CiAKICAgICB2b2lkIGVudGVyUmVjdGFuZ2xlTGlzdE1vZGUoKTsKLSAgICB2b2lkIHJlY3RhbmdsZUxpc3RNb2RlQ2xpcFJlY3RXaXRoVHJhbnNmb3JtKGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwKLSAgICAgICAgICAgIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sIGNvbnN0IG1hdDQqIHRyYW5zZm9ybSwgU2tSZWdpb246Ok9wIG9wKTsKICAgICB2b2lkIHJlY3RhbmdsZUxpc3RNb2RlQ2xpcFJlY3RXaXRoVHJhbnNmb3JtKGNvbnN0IFJlY3QmIHIsCiAgICAgICAgICAgICBjb25zdCBtYXQ0KiB0cmFuc2Zvcm0sIFNrUmVnaW9uOjpPcCBvcCk7CiAKQEAgLTE0NywxMiArMTg5LDE3IEBACiAgICAgdm9pZCBlbnRlclJlZ2lvbk1vZGUoKTsKICAgICB2b2lkIHJlZ2lvbk1vZGVDbGlwUmVjdFdpdGhUcmFuc2Zvcm0oY29uc3QgUmVjdCYgciwgY29uc3QgbWF0NCogdHJhbnNmb3JtLAogICAgICAgICAgICAgU2tSZWdpb246Ok9wIG9wKTsKLSAgICB2b2lkIHJlZ2lvbk1vZGVDbGlwUmVjdFdpdGhUcmFuc2Zvcm0oZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwKLSAgICAgICAgICAgIGZsb2F0IGJvdHRvbSwgY29uc3QgbWF0NCogdHJhbnNmb3JtLCBTa1JlZ2lvbjo6T3Agb3ApOwogCiAgICAgdm9pZCBlbnN1cmVDbGlwUmVnaW9uKCk7CiAgICAgdm9pZCBvbkNsaXBSZWdpb25VcGRhdGVkKCk7CiAKKyAgICAvLyBDYWxsZWQgYnkgZXZlcnkgc3RhdGUgbW9kaWZ5aW5nIHB1YmxpYyBtZXRob2QuCisgICAgdm9pZCBvbkNsaXBVcGRhdGVkKCkgeworICAgICAgICBtUG9zdFZpZXdwb3J0Q2xpcE9ic2VydmVkID0gdHJ1ZTsKKyAgICAgICAgbUxhc3RTZXJpYWxpemF0aW9uID0gbnVsbHB0cjsKKyAgICAgICAgbUxhc3RSZXNvbHV0aW9uUmVzdWx0ID0gbnVsbHB0cjsKKyAgICB9CisKICAgICBTa1JlZ2lvbiBjcmVhdGVWaWV3cG9ydFJlZ2lvbigpIHsKICAgICAgICAgcmV0dXJuIFNrUmVnaW9uKG1WaWV3cG9ydEJvdW5kcy50b1NrSVJlY3QoKSk7CiAgICAgfQpAQCAtMTYzLDcgKzIxMCwyMiBAQAogICAgICAgICBwYXRoQXNSZWdpb24uc2V0UGF0aChwYXRoLCBjcmVhdGVWaWV3cG9ydFJlZ2lvbigpKTsKICAgICB9CiAKLSAgICBNb2RlIG1Nb2RlOworICAgIENsaXBNb2RlIG1Nb2RlOworICAgIGJvb2wgbVBvc3RWaWV3cG9ydENsaXBPYnNlcnZlZCA9IGZhbHNlOworCisgICAgLyoqCisgICAgICogSWYgbUxhc3RTZXJpYWxpemF0aW9uIGlzIG5vbi1udWxsLCBpdCByZXByZXNlbnRzIGFuIGFscmVhZHkgc2VyaWFsaXplZCBjb3B5CisgICAgICogb2YgdGhlIGN1cnJlbnQgY2xpcCBzdGF0ZS4gSWYgbnVsbCwgaXQgaGFzIG5vdCBiZWVuIGNvbXB1dGVkLgorICAgICAqLworICAgIGNvbnN0IENsaXBCYXNlKiBtTGFzdFNlcmlhbGl6YXRpb24gPSBudWxscHRyOworCisgICAgLyoqCisgICAgICogVGhpcyBwYWlyIG9mIHBvaW50ZXJzIGlzIGEgc2luZ2xlIGVudHJ5IGNhY2hlIG9mIG1vc3QgcmVjZW50bHkgc2VlbgorICAgICAqLworICAgIGNvbnN0IENsaXBCYXNlKiBtTGFzdFJlc29sdXRpb25SZXN1bHQgPSBudWxscHRyOworICAgIGNvbnN0IENsaXBCYXNlKiBtTGFzdFJlc29sdXRpb25DbGlwID0gbnVsbHB0cjsKKyAgICBNYXRyaXg0IG1MYXN0UmVzb2x1dGlvblRyYW5zZm9ybTsKKwogICAgIFJlY3QgbVZpZXdwb3J0Qm91bmRzOwogICAgIFJlY3QgbUNsaXBSZWN0OwogICAgIFNrUmVnaW9uIG1DbGlwUmVnaW9uOwpkaWZmIC0tZ2l0IGEvbGlicy9od3VpL0ZvbnRSZW5kZXJlci5oIGIvbGlicy9od3VpL0ZvbnRSZW5kZXJlci5oCmluZGV4IGZmNGRjNGEuLjk5OTQ0OTggMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9Gb250UmVuZGVyZXIuaAorKysgYi9saWJzL2h3dWkvRm9udFJlbmRlcmVyLmgKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpZiBIV1VJX05FV19PUFMKIGNsYXNzIEJha2VkT3BTdGF0ZTsKIGNsYXNzIEJha2VkT3BSZW5kZXJlcjsKK3N0cnVjdCBDbGlwQmFzZTsKICNlbHNlCiBjbGFzcyBPcGVuR0xSZW5kZXJlcjsKICNlbmRpZgpAQCAtNTcsNyArNTgsNyBAQAogI2lmIEhXVUlfTkVXX09QUwogICAgICAgICAgICAgQmFrZWRPcFJlbmRlcmVyKiByZW5kZXJlciwKICAgICAgICAgICAgIGNvbnN0IEJha2VkT3BTdGF0ZSogYmFrZWRTdGF0ZSwKLSAgICAgICAgICAgIGNvbnN0IFJlY3QqIGNsaXAsCisgICAgICAgICAgICBjb25zdCBDbGlwQmFzZSogY2xpcCwKICNlbHNlCiAgICAgICAgICAgICBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXIsCiAjZW5kaWYKQEAgLTgxLDcgKzgyLDcgQEAKICNpZiBIV1VJX05FV19PUFMKICAgICBCYWtlZE9wUmVuZGVyZXIqIHJlbmRlcmVyOwogICAgIGNvbnN0IEJha2VkT3BTdGF0ZSogYmFrZWRTdGF0ZTsKLSAgICBjb25zdCBSZWN0KiBjbGlwOworICAgIGNvbnN0IENsaXBCYXNlKiBjbGlwOwogI2Vsc2UKICAgICBPcGVuR0xSZW5kZXJlciogcmVuZGVyZXI7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9HbG9wLmggYi9saWJzL2h3dWkvR2xvcC5oCmluZGV4IGJjZjgxOWUuLmU3MmYzOTYgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9HbG9wLmgKKysrIGIvbGlicy9od3VpL0dsb3AuaApAQCAtNjQsNyArNjQsNyBAQAogCiAgICAgICAgIC8vIENhbnZhcyB0cmFuc2Zvcm0gaXNuJ3QgYXBwbGllZCB0byB0aGUgbWVzaCBhdCBkcmF3IHRpbWUsCiAgICAgICAgIC8vc2luY2UgaXQncyBhbHJlYWR5IGJ1aWx0IGluLgotICAgICAgICBNZXNoSWdub3Jlc0NhbnZhc1RyYW5zZm9ybSA9IDEgPDwgMSwgLy8gVE9ETzogcmVtb3ZlCisgICAgICAgIE1lc2hJZ25vcmVzQ2FudmFzVHJhbnNmb3JtID0gMSA8PCAxLCAvLyBUT0RPOiByZW1vdmUgZm9yIEhXVUlfTkVXX09QUwogICAgIH07CiB9OwogCmRpZmYgLS1naXQgYS9saWJzL2h3dWkvR2xvcEJ1aWxkZXIuY3BwIGIvbGlicy9od3VpL0dsb3BCdWlsZGVyLmNwcAppbmRleCAyNTA3ZmYzLi40NWZjMTZjIDEwMDY0NAotLS0gYS9saWJzL2h3dWkvR2xvcEJ1aWxkZXIuY3BwCisrKyBiL2xpYnMvaHd1aS9HbG9wQnVpbGRlci5jcHAKQEAgLTc4LDcgKzc4LDcgQEAKICAgICBtT3V0R2xvcC0+bWVzaC52ZXJ0aWNlcyA9IHsKICAgICAgICAgICAgIHZibywKICAgICAgICAgICAgIFZlcnRleEF0dHJpYkZsYWdzOjpUZXh0dXJlQ29vcmQsCi0gICAgICAgICAgICBudWxscHRyLCBudWxscHRyLCBudWxscHRyLAorICAgICAgICAgICAgbnVsbHB0ciwgKGNvbnN0IHZvaWQqKSBrTWVzaFRleHR1cmVPZmZzZXQsIG51bGxwdHIsCiAgICAgICAgICAgICBrVGV4dHVyZVZlcnRleFN0cmlkZSB9OwogICAgIG1PdXRHbG9wLT5tZXNoLmVsZW1lbnRDb3VudCA9IGVsZW1lbnRDb3VudDsKICAgICByZXR1cm4gKnRoaXM7CmRpZmYgLS1naXQgYS9saWJzL2h3dWkvSmFua1RyYWNrZXIuY3BwIGIvbGlicy9od3VpL0phbmtUcmFja2VyLmNwcAppbmRleCBlYjliNTVmLi5jMzA1ZjY1IDEwMDY0NAotLS0gYS9saWJzL2h3dWkvSmFua1RyYWNrZXIuY3BwCisrKyBiL2xpYnMvaHd1aS9KYW5rVHJhY2tlci5jcHAKQEAgLTI0Myw2ICsyNDMsNyBAQAogICAgIGRwcmludGYoZmQsICJcblRvdGFsIGZyYW1lcyByZW5kZXJlZDogJXUiLCBkYXRhLT50b3RhbEZyYW1lQ291bnQpOwogICAgIGRwcmludGYoZmQsICJcbkphbmt5IGZyYW1lczogJXUgKCUuMmYlJSkiLCBkYXRhLT5qYW5rRnJhbWVDb3VudCwKICAgICAgICAgICAgIChmbG9hdCkgZGF0YS0+amFua0ZyYW1lQ291bnQgLyAoZmxvYXQpIGRhdGEtPnRvdGFsRnJhbWVDb3VudCAqIDEwMC4wZik7CisgICAgZHByaW50ZihmZCwgIlxuNTB0aCBwZXJjZW50aWxlOiAldW1zIiwgZmluZFBlcmNlbnRpbGUoZGF0YSwgNTApKTsKICAgICBkcHJpbnRmKGZkLCAiXG45MHRoIHBlcmNlbnRpbGU6ICV1bXMiLCBmaW5kUGVyY2VudGlsZShkYXRhLCA5MCkpOwogICAgIGRwcmludGYoZmQsICJcbjk1dGggcGVyY2VudGlsZTogJXVtcyIsIGZpbmRQZXJjZW50aWxlKGRhdGEsIDk1KSk7CiAgICAgZHByaW50ZihmZCwgIlxuOTl0aCBwZXJjZW50aWxlOiAldW1zIiwgZmluZFBlcmNlbnRpbGUoZGF0YSwgOTkpKTsKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9PcFJlb3JkZXJlci5jcHAgYi9saWJzL2h3dWkvT3BSZW9yZGVyZXIuY3BwCmluZGV4IGJkYzhmNjguLjNmNDkyZDUgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9PcFJlb3JkZXJlci5jcHAKKysrIGIvbGlicy9od3VpL09wUmVvcmRlcmVyLmNwcApAQCAtOTEsOCArOTEsNyBAQAogCiAgICAgTWVyZ2luZ09wQmF0Y2goYmF0Y2hpZF90IGJhdGNoSWQsIEJha2VkT3BTdGF0ZSogb3ApCiAgICAgICAgICAgICA6IEJhdGNoQmFzZShiYXRjaElkLCBvcCwgdHJ1ZSkKLSAgICAgICAgICAgICwgbUNsaXBTaWRlRmxhZ3Mob3AtPmNvbXB1dGVkU3RhdGUuY2xpcFNpZGVGbGFncykKLSAgICAgICAgICAgICwgbUNsaXBSZWN0KG9wLT5jb21wdXRlZFN0YXRlLmNsaXBSZWN0KSB7CisgICAgICAgICAgICAsIG1DbGlwU2lkZUZsYWdzKG9wLT5jb21wdXRlZFN0YXRlLmNsaXBTaWRlRmxhZ3MpIHsKICAgICB9CiAKICAgICAvKgpAQCAtMTk0LDIyICsxOTMsMTcgQEAKICAgICAgICAgbUJvdW5kcy51bmlvbldpdGgob3AtPmNvbXB1dGVkU3RhdGUuY2xpcHBlZEJvdW5kcyk7CiAgICAgICAgIG1PcHMucHVzaF9iYWNrKG9wKTsKIAotICAgICAgICBjb25zdCBpbnQgbmV3Q2xpcFNpZGVGbGFncyA9IG9wLT5jb21wdXRlZFN0YXRlLmNsaXBTaWRlRmxhZ3M7Ci0gICAgICAgIG1DbGlwU2lkZUZsYWdzIHw9IG5ld0NsaXBTaWRlRmxhZ3M7Ci0KLSAgICAgICAgY29uc3QgUmVjdCYgb3BDbGlwID0gb3AtPmNvbXB1dGVkU3RhdGUuY2xpcFJlY3Q7Ci0gICAgICAgIGlmIChuZXdDbGlwU2lkZUZsYWdzICYgT3BDbGlwU2lkZUZsYWdzOjpMZWZ0KSBtQ2xpcFJlY3QubGVmdCA9IG9wQ2xpcC5sZWZ0OwotICAgICAgICBpZiAobmV3Q2xpcFNpZGVGbGFncyAmIE9wQ2xpcFNpZGVGbGFnczo6VG9wKSBtQ2xpcFJlY3QudG9wID0gb3BDbGlwLnRvcDsKLSAgICAgICAgaWYgKG5ld0NsaXBTaWRlRmxhZ3MgJiBPcENsaXBTaWRlRmxhZ3M6OlJpZ2h0KSBtQ2xpcFJlY3QucmlnaHQgPSBvcENsaXAucmlnaHQ7Ci0gICAgICAgIGlmIChuZXdDbGlwU2lkZUZsYWdzICYgT3BDbGlwU2lkZUZsYWdzOjpCb3R0b20pIG1DbGlwUmVjdC5ib3R0b20gPSBvcENsaXAuYm90dG9tOworICAgICAgICAvLyBCZWNhdXNlIGEgbmV3IG9wIG11c3QgaGF2ZSBwYXNzZWQgY2FuTWVyZ2VXaXRoKCksIHdlIGtub3cgaXQncyBwYXNzZWQgdGhlIGNsaXBwaW5nIGNvbXBhdAorICAgICAgICAvLyBjaGVjaywgYW5kIGRvZXNuJ3QgZXh0ZW5kIHBhc3QgYSBzaWRlIG9mIHRoZSBjbGlwIHRoYXQncyBpbiB1c2UgYnkgdGhlIG1lcmdlZCBiYXRjaC4KKyAgICAgICAgLy8gVGhlcmVmb3JlIGl0J3Mgc2FmZSB0byBzaW1wbHkgYWx3YXlzIG1lcmdlIGZsYWdzLCBhbmQgdXNlIHRoZSBib3VuZHMgYXMgdGhlIGNsaXAgcmVjdC4KKyAgICAgICAgbUNsaXBTaWRlRmxhZ3MgfD0gb3AtPmNvbXB1dGVkU3RhdGUuY2xpcFNpZGVGbGFnczsKICAgICB9CiAKICAgICBpbnQgZ2V0Q2xpcFNpZGVGbGFncygpIGNvbnN0IHsgcmV0dXJuIG1DbGlwU2lkZUZsYWdzOyB9Ci0gICAgY29uc3QgUmVjdCYgZ2V0Q2xpcFJlY3QoKSBjb25zdCB7IHJldHVybiBtQ2xpcFJlY3Q7IH0KKyAgICBjb25zdCBSZWN0JiBnZXRDbGlwUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1Cb3VuZHM7IH0KIAogcHJpdmF0ZToKICAgICBpbnQgbUNsaXBTaWRlRmxhZ3M7Ci0gICAgUmVjdCBtQ2xpcFJlY3Q7CiB9OwogCiBPcFJlb3JkZXJlcjo6TGF5ZXJSZW9yZGVyZXI6OkxheWVyUmVvcmRlcmVyKHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQsCkBAIC00NjYsNyArNDYwLDcgQEAKICAgICAgICAgICAgIGRlZmVyQmVnaW5MYXllck9wKCpuZXcgKG1BbGxvY2F0b3IpIEJlZ2luTGF5ZXJPcCgKICAgICAgICAgICAgICAgICAgICAgc2F2ZUxheWVyQm91bmRzLAogICAgICAgICAgICAgICAgICAgICBNYXRyaXg0OjppZGVudGl0eSgpLAotICAgICAgICAgICAgICAgICAgICBzYXZlTGF5ZXJCb3VuZHMsCisgICAgICAgICAgICAgICAgICAgIG51bGxwdHIsIC8vIG5vIHJlY29yZC10aW1lIGNsaXAgLSBuZWVkIG9ubHkgcmVzcGVjdCBkZWZlci10aW1lIG9uZQogICAgICAgICAgICAgICAgICAgICAmc2F2ZUxheWVyUGFpbnQpKTsKICAgICAgICAgICAgIGRlZmVyTm9kZU9wcyhub2RlKTsKICAgICAgICAgICAgIGRlZmVyRW5kTGF5ZXJPcCgqbmV3IChtQWxsb2NhdG9yKSBFbmRMYXllck9wKCkpOwpAQCAtNjEwLDcgKzYwNCw3IEBACiAgICAgICAgICAgICBtQ2FudmFzU3RhdGUuZ2V0TG9jYWxDbGlwQm91bmRzKCksCiAgICAgICAgICAgICBtQ2FudmFzU3RhdGUuY3VycmVudFNuYXBzaG90KCktPmdldFJlbGF0aXZlTGlnaHRDZW50ZXIoKSk7CiAgICAgQmFrZWRPcFN0YXRlKiBiYWtlZE9wU3RhdGUgPSBCYWtlZE9wU3RhdGU6OnRyeVNoYWRvd09wQ29uc3RydWN0KAotICAgICAgICAgICAgbUFsbG9jYXRvciwgKm1DYW52YXNTdGF0ZS5jdXJyZW50U25hcHNob3QoKSwgc2hhZG93T3ApOworICAgICAgICAgICAgbUFsbG9jYXRvciwgKm1DYW52YXNTdGF0ZS53cml0YWJsZVNuYXBzaG90KCksIHNoYWRvd09wKTsKICAgICBpZiAoQ0NfTElLRUxZKGJha2VkT3BTdGF0ZSkpIHsKICAgICAgICAgY3VycmVudExheWVyKCkuZGVmZXJVbm1lcmdlYWJsZU9wKG1BbGxvY2F0b3IsIGJha2VkT3BTdGF0ZSwgT3BCYXRjaFR5cGU6OlNoYWRvdyk7CiAgICAgfQpAQCAtNjU4LDkgKzY1Miw3IEBACiAgICAgICAgIFtdKE9wUmVvcmRlcmVyJiByZW9yZGVyZXIsIGNvbnN0IFJlY29yZGVkT3AmIG9wKSB7IHJlb3JkZXJlci5kZWZlciMjVHlwZShzdGF0aWNfY2FzdDxjb25zdCBUeXBlJj4ob3ApKTsgfSwKIHZvaWQgT3BSZW9yZGVyZXI6OmRlZmVyTm9kZU9wcyhjb25zdCBSZW5kZXJOb2RlJiByZW5kZXJOb2RlKSB7CiAgICAgdHlwZWRlZiB2b2lkICgqT3BEaXNwYXRjaGVyKSAoT3BSZW9yZGVyZXImIHJlb3JkZXJlciwgY29uc3QgUmVjb3JkZWRPcCYgb3ApOwotICAgIHN0YXRpYyBPcERpc3BhdGNoZXIgcmVjZWl2ZXJzW10gPSB7Ci0gICAgICAgIE1BUF9PUFMoT1BfUkVDRUlWRVIpCi0gICAgfTsKKyAgICBzdGF0aWMgT3BEaXNwYXRjaGVyIHJlY2VpdmVyc1tdID0gQlVJTERfREVGRVJSQUJMRV9PUF9MVVQoT1BfUkVDRUlWRVIpOwogCiAgICAgLy8gY2FuJ3QgYmUgbnVsbCwgc2luY2UgREw9bnVsbCBub2RlIHJlamVjdGlvbiBoYXBwZW5zIGJlZm9yZSBkZWZlck5vZGVQcm9wc0FuZE9wcwogICAgIGNvbnN0IERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCA9ICoocmVuZGVyTm9kZS5nZXREaXNwbGF5TGlzdCgpKTsKQEAgLTY4NywxMCArNjc5LDEwIEBACiAgICAgaWYgKG9wLnJlbmRlck5vZGUtPm5vdGhpbmdUb0RyYXcoKSkgcmV0dXJuOwogICAgIGludCBjb3VudCA9IG1DYW52YXNTdGF0ZS5zYXZlKFNrQ2FudmFzOjprQ2xpcF9TYXZlRmxhZyB8IFNrQ2FudmFzOjprTWF0cml4X1NhdmVGbGFnKTsKIAotICAgIC8vIGFwcGx5IHN0YXRlIGZyb20gUmVjb3JkZWRPcAorICAgIC8vIGFwcGx5IHN0YXRlIGZyb20gUmVjb3JkZWRPcCAoY2xpcCBmaXJzdCwgc2luY2Ugb3AncyBjbGlwIGlzIHRyYW5zZm9ybWVkIGJ5IGN1cnJlbnQgbWF0cml4KQorICAgIG1DYW52YXNTdGF0ZS53cml0YWJsZVNuYXBzaG90KCktPm11dGF0ZUNsaXBBcmVhKCkuYXBwbHlDbGlwKG9wLmxvY2FsQ2xpcCwKKyAgICAgICAgICAgICptQ2FudmFzU3RhdGUuY3VycmVudFNuYXBzaG90KCktPnRyYW5zZm9ybSk7CiAgICAgbUNhbnZhc1N0YXRlLmNvbmNhdE1hdHJpeChvcC5sb2NhbE1hdHJpeCk7Ci0gICAgbUNhbnZhc1N0YXRlLmNsaXBSZWN0KG9wLmxvY2FsQ2xpcFJlY3QubGVmdCwgb3AubG9jYWxDbGlwUmVjdC50b3AsCi0gICAgICAgICAgICBvcC5sb2NhbENsaXBSZWN0LnJpZ2h0LCBvcC5sb2NhbENsaXBSZWN0LmJvdHRvbSwgU2tSZWdpb246OmtJbnRlcnNlY3RfT3ApOwogCiAgICAgLy8gdGhlbiBhcHBseSBzdGF0ZSBmcm9tIG5vZGUgcHJvcGVydGllcywgYW5kIGRlZmVyIG9wcwogICAgIGRlZmVyTm9kZVByb3BzQW5kT3BzKCpvcC5yZW5kZXJOb2RlKTsKQEAgLTcxMiw3ICs3MDQsNyBAQAogICAgICAgICBCYWtlZE9wU3RhdGU6OlN0cm9rZUJlaGF2aW9yIHN0cm9rZUJlaGF2aW9yKSB7CiAgICAgLy8gTm90ZTogaGVyZSB3ZSBhY2NvdW50IGZvciBzdHJva2Ugd2hlbiBiYWtpbmcgdGhlIG9wCiAgICAgQmFrZWRPcFN0YXRlKiBiYWtlZFN0YXRlID0gQmFrZWRPcFN0YXRlOjp0cnlTdHJva2VhYmxlT3BDb25zdHJ1Y3QoCi0gICAgICAgICAgICBtQWxsb2NhdG9yLCAqbUNhbnZhc1N0YXRlLmN1cnJlbnRTbmFwc2hvdCgpLCBvcCwgc3Ryb2tlQmVoYXZpb3IpOworICAgICAgICAgICAgbUFsbG9jYXRvciwgKm1DYW52YXNTdGF0ZS53cml0YWJsZVNuYXBzaG90KCksIG9wLCBzdHJva2VCZWhhdmlvcik7CiAgICAgaWYgKCFiYWtlZFN0YXRlKSByZXR1cm47IC8vIHF1aWNrIHJlamVjdGVkCiAgICAgY3VycmVudExheWVyKCkuZGVmZXJVbm1lcmdlYWJsZU9wKG1BbGxvY2F0b3IsIGJha2VkU3RhdGUsIGJhdGNoSWQpOwogfQpAQCAtNzc1LDcgKzc2Nyw3IEBACiAgICAgY29uc3QgT3ZhbE9wKiByZXNvbHZlZE9wID0gbmV3IChtQWxsb2NhdG9yKSBPdmFsT3AoCiAgICAgICAgICAgICB1bm1hcHBlZEJvdW5kcywKICAgICAgICAgICAgIG9wLmxvY2FsTWF0cml4LAotICAgICAgICAgICAgb3AubG9jYWxDbGlwUmVjdCwKKyAgICAgICAgICAgIG9wLmxvY2FsQ2xpcCwKICAgICAgICAgICAgIG9wLnBhaW50KTsKICAgICBkZWZlck92YWxPcCgqcmVzb2x2ZWRPcCk7CiB9CkBAIC04MzUsNyArODI3LDcgQEAKICAgICBjb25zdCBSb3VuZFJlY3RPcCogcmVzb2x2ZWRPcCA9IG5ldyAobUFsbG9jYXRvcikgUm91bmRSZWN0T3AoCiAgICAgICAgICAgICBSZWN0KCoob3AubGVmdCksICoob3AudG9wKSwgKihvcC5yaWdodCksICoob3AuYm90dG9tKSksCiAgICAgICAgICAgICBvcC5sb2NhbE1hdHJpeCwKLSAgICAgICAgICAgIG9wLmxvY2FsQ2xpcFJlY3QsCisgICAgICAgICAgICBvcC5sb2NhbENsaXAsCiAgICAgICAgICAgICBvcC5wYWludCwgKm9wLnJ4LCAqb3AucnkpOwogICAgIGRlZmVyUm91bmRSZWN0T3AoKnJlc29sdmVkT3ApOwogfQpAQCAtOTU5LDcgKzk1MSw3IEBACiAgICAgTGF5ZXJPcCogZHJhd0xheWVyT3AgPSBuZXcgKG1BbGxvY2F0b3IpIExheWVyT3AoCiAgICAgICAgICAgICBiZWdpbkxheWVyT3AudW5tYXBwZWRCb3VuZHMsCiAgICAgICAgICAgICBiZWdpbkxheWVyT3AubG9jYWxNYXRyaXgsCi0gICAgICAgICAgICBiZWdpbkxheWVyT3AubG9jYWxDbGlwUmVjdCwKKyAgICAgICAgICAgIGJlZ2luTGF5ZXJPcC5sb2NhbENsaXAsCiAgICAgICAgICAgICBiZWdpbkxheWVyT3AucGFpbnQsCiAgICAgICAgICAgICAmbUxheWVyUmVvcmRlcmVyc1tmaW5pc2hlZExheWVySW5kZXhdLm9mZnNjcmVlbkJ1ZmZlcik7CiAgICAgQmFrZWRPcFN0YXRlKiBiYWtlZE9wU3RhdGUgPSB0cnlCYWtlT3BTdGF0ZSgqZHJhd0xheWVyT3ApOwpAQCAtOTc0LDEzICs5NjYsNSBAQAogICAgIH0KIH0KIAotdm9pZCBPcFJlb3JkZXJlcjo6ZGVmZXJMYXllck9wKGNvbnN0IExheWVyT3AmIG9wKSB7Ci0gICAgTE9HX0FMV0FZU19GQVRBTCgidW5zdXBwb3J0ZWQiKTsKLX0KLQotdm9pZCBPcFJlb3JkZXJlcjo6ZGVmZXJTaGFkb3dPcChjb25zdCBTaGFkb3dPcCYgb3ApIHsKLSAgICBMT0dfQUxXQVlTX0ZBVEFMKCJ1bnN1cHBvcnRlZCIpOwotfQotCiB9IC8vIG5hbWVzcGFjZSB1aXJlbmRlcmVyCiB9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9saWJzL2h3dWkvT3BSZW9yZGVyZXIuaCBiL2xpYnMvaHd1aS9PcFJlb3JkZXJlci5oCmluZGV4IGRiYmNlOGIuLjQyOTkxM2YgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9PcFJlb3JkZXJlci5oCisrKyBiL2xpYnMvaHd1aS9PcFJlb3JkZXJlci5oCkBAIC0xMzgsNyArMTM4LDcgQEAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgU3RhdGljRGlzcGF0Y2hlciwgdHlwZW5hbWUgUmVuZGVyZXI+CiAgICAgdm9pZCByZXBsYXlCYWtlZE9wcyhSZW5kZXJlciYgcmVuZGVyZXIpIHsKICAgICAgICAgLyoqCi0gICAgICAgICAqIGRlZmluZXMgYSBMVVQgb2YgbGFtYmRhcyB3aGljaCBhbGxvdyBhIHJlY29yZGVkIEJha2VkT3BTdGF0ZSB0byB1c2Ugc3RhdGUtPm9wLT5vcElkIHRvCisgICAgICAgICAqIERlZmluZXMgYSBMVVQgb2YgbGFtYmRhcyB3aGljaCBhbGxvdyBhIHJlY29yZGVkIEJha2VkT3BTdGF0ZSB0byB1c2Ugc3RhdGUtPm9wLT5vcElkIHRvCiAgICAgICAgICAqIGRpc3BhdGNoIHRoZSBvcCB2aWEgYSBtZXRob2Qgb24gYSBzdGF0aWMgZGlzcGF0Y2hlciB3aGVuIHRoZSBvcCBpcyByZXBsYXllZC4KICAgICAgICAgICoKICAgICAgICAgICogRm9yIGV4YW1wbGUgYSBCaXRtYXBPcCB3b3VsZCByZXNvbHZlLCB2aWEgdGhlIGxhbWJkYSBsb29rdXAsIHRvIGNhbGxpbmc6CkBAIC0xNDksMjkgKzE0OSwxOSBAQAogICAgICAgICAgICAgICAgIFtdKHZvaWQqIHJlbmRlcmVyLCBjb25zdCBCYWtlZE9wU3RhdGUmIHN0YXRlKSB7IFwKICAgICAgICAgICAgICAgICAgICAgU3RhdGljRGlzcGF0Y2hlcjo6b24jI1R5cGUoKihzdGF0aWNfY2FzdDxSZW5kZXJlcio+KHJlbmRlcmVyKSksIHN0YXRpY19jYXN0PGNvbnN0IFR5cGUmPigqKHN0YXRlLm9wKSksIHN0YXRlKTsgXAogICAgICAgICAgICAgICAgIH0sCi0gICAgICAgIHN0YXRpYyBCYWtlZE9wUmVjZWl2ZXIgdW5tZXJnZWRSZWNlaXZlcnNbXSA9IHsKLSAgICAgICAgICAgIE1BUF9PUFMoWCkKLSAgICAgICAgfTsKKyAgICAgICAgc3RhdGljIEJha2VkT3BSZWNlaXZlciB1bm1lcmdlZFJlY2VpdmVyc1tdID0gQlVJTERfUkVOREVSQUJMRV9PUF9MVVQoWCk7CiAgICAgICAgICN1bmRlZiBYCiAKICAgICAgICAgLyoqCi0gICAgICAgICAqIGRlZmluZXMgYSBMVVQgb2YgbGFtYmRhcyB3aGljaCBhbGxvdyBtZXJnZWQgYXJyYXlzIG9mIEJha2VkT3BTdGF0ZSogdG8gYmUgcGFzc2VkIHRvIGEKLSAgICAgICAgICogc3RhdGljIGRpc3BhdGNoZXIgd2hlbiB0aGUgZ3JvdXAgb2YgbWVyZ2VkIG9wcyBpcyByZXBsYXllZC4gVW5tZXJnZWFibGUgb3BzIHRyaWdnZXIKLSAgICAgICAgICogYSBMT0dfQUxXQVlTX0ZBVEFMKCkuCisgICAgICAgICAqIERlZmluZXMgYSBMVVQgb2YgbGFtYmRhcyB3aGljaCBhbGxvdyBtZXJnZWQgYXJyYXlzIG9mIEJha2VkT3BTdGF0ZSogdG8gYmUgcGFzc2VkIHRvIGEKKyAgICAgICAgICogc3RhdGljIGRpc3BhdGNoZXIgd2hlbiB0aGUgZ3JvdXAgb2YgbWVyZ2VkIG9wcyBpcyByZXBsYXllZC4KICAgICAgICAgICovCiAgICAgICAgICNkZWZpbmUgWChUeXBlKSBcCiAgICAgICAgICAgICAgICAgW10odm9pZCogcmVuZGVyZXIsIGNvbnN0IE1lcmdlZEJha2VkT3BMaXN0JiBvcExpc3QpIHsgXAotICAgICAgICAgICAgICAgICAgICBMT0dfQUxXQVlTX0ZBVEFMKCJvcCB0eXBlICVkIGRvZXMgbm90IHN1cHBvcnQgbWVyZ2luZyIsIG9wTGlzdC5zdGF0ZXNbMF0tPm9wLT5vcElkKTsgXAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICNkZWZpbmUgWShUeXBlKSBcCi0gICAgICAgICAgICAgICAgW10odm9pZCogcmVuZGVyZXIsIGNvbnN0IE1lcmdlZEJha2VkT3BMaXN0JiBvcExpc3QpIHsgXAogICAgICAgICAgICAgICAgICAgICBTdGF0aWNEaXNwYXRjaGVyOjpvbk1lcmdlZCMjVHlwZSMjcygqKHN0YXRpY19jYXN0PFJlbmRlcmVyKj4ocmVuZGVyZXIpKSwgb3BMaXN0KTsgXAogICAgICAgICAgICAgICAgIH0sCi0gICAgICAgIHN0YXRpYyBNZXJnZWRPcFJlY2VpdmVyIG1lcmdlZFJlY2VpdmVyc1tdID0gewotICAgICAgICAgICAgTUFQX09QU19CQVNFRF9PTl9NRVJHRUFCSUxJVFkoWCwgWSkKLSAgICAgICAgfTsKKyAgICAgICAgc3RhdGljIE1lcmdlZE9wUmVjZWl2ZXIgbWVyZ2VkUmVjZWl2ZXJzW10gPSBCVUlMRF9NRVJHRUFCTEVfT1BfTFVUKFgpOwogICAgICAgICAjdW5kZWYgWAotICAgICAgICAjdW5kZWYgWQogCiAgICAgICAgIC8vIFJlbGF5IHRocm91Z2ggbGF5ZXJzIGluIHJldmVyc2Ugb3JkZXIsIHNpbmNlIGxheWVycwogICAgICAgICAvLyBsYXRlciBpbiB0aGUgbGlzdCB3aWxsIGJlIGRyYXduIGJ5IGVhcmxpZXIgb25lcwpAQCAtMTkyLDcgKzE4Miw3IEBACiAgICAgICAgIGNvbnN0IExheWVyUmVvcmRlcmVyJiBmYm8wID0gbUxheWVyUmVvcmRlcmVyc1swXTsKICAgICAgICAgcmVuZGVyZXIuc3RhcnRGcmFtZShmYm8wLndpZHRoLCBmYm8wLmhlaWdodCwgZmJvMC5yZXBhaW50UmVjdCk7CiAgICAgICAgIGZibzAucmVwbGF5QmFrZWRPcHNJbXBsKCh2b2lkKikmcmVuZGVyZXIsIHVubWVyZ2VkUmVjZWl2ZXJzLCBtZXJnZWRSZWNlaXZlcnMpOwotICAgICAgICByZW5kZXJlci5lbmRGcmFtZSgpOworICAgICAgICByZW5kZXJlci5lbmRGcmFtZShmYm8wLnJlcGFpbnRSZWN0KTsKICAgICB9CiAKICAgICB2b2lkIGR1bXAoKSBjb25zdCB7CkBAIC0yMjMsNyArMjEzLDcgQEAKICAgICBMYXllclJlb3JkZXJlciYgY3VycmVudExheWVyKCkgeyByZXR1cm4gbUxheWVyUmVvcmRlcmVyc1ttTGF5ZXJTdGFjay5iYWNrKCldOyB9CiAKICAgICBCYWtlZE9wU3RhdGUqIHRyeUJha2VPcFN0YXRlKGNvbnN0IFJlY29yZGVkT3AmIHJlY29yZGVkT3ApIHsKLSAgICAgICAgcmV0dXJuIEJha2VkT3BTdGF0ZTo6dHJ5Q29uc3RydWN0KG1BbGxvY2F0b3IsICptQ2FudmFzU3RhdGUuY3VycmVudFNuYXBzaG90KCksIHJlY29yZGVkT3ApOworICAgICAgICByZXR1cm4gQmFrZWRPcFN0YXRlOjp0cnlDb25zdHJ1Y3QobUFsbG9jYXRvciwgKm1DYW52YXNTdGF0ZS53cml0YWJsZVNuYXBzaG90KCksIHJlY29yZGVkT3ApOwogICAgIH0KIAogICAgIC8vIHNob3VsZCBhbHdheXMgYmUgc3Vycm91bmRlZCBieSBhIHNhdmUvcmVzdG9yZSBwYWlyLCBhbmQgbm90IGNhbGxlZCBpZiBEaXNwbGF5TGlzdCBpcyBudWxsCkBAIC0yNTYsOSArMjQ2LDkgQEAKICAgICAgKiBUaGVzZSBwcml2YXRlIG1ldGhvZHMgYXJlIGNhbGxlZCBmcm9tIHdpdGhpbiBkZWZlckltcGwgdG8gZGVmZXIgZWFjaCBpbmRpdmlkdWFsIG9wCiAgICAgICogdHlwZSBkaWZmZXJlbnRseS4KICAgICAgKi8KLSNkZWZpbmUgSU5URVJOQUxfT1BfSEFORExFUihUeXBlKSBcCi0gICAgdm9pZCBkZWZlciMjVHlwZShjb25zdCBUeXBlJiBvcCk7Ci0gICAgTUFQX09QUyhJTlRFUk5BTF9PUF9IQU5ETEVSKQorI2RlZmluZSBYKFR5cGUpIHZvaWQgZGVmZXIjI1R5cGUoY29uc3QgVHlwZSYgb3ApOworICAgIE1BUF9ERUZFUlJBQkxFX09QUyhYKQorI3VuZGVmIFgKIAogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxTa1BhdGg+ID4gbUZyYW1lQWxsb2NhdGVkUGF0aHM7CiAKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9QYXRoUGFyc2VyLmggYi9saWJzL2h3dWkvUGF0aFBhcnNlci5oCmluZGV4IDRjODdiMTguLmM0YmJiNzQgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9QYXRoUGFyc2VyLmgKKysrIGIvbGlicy9od3VpL1BhdGhQYXJzZXIuaApAQCAtMTcsNyArMTcsNyBAQAogI2lmbmRlZiBBTkRST0lEX0hXVUlfUEFUSFBBUlNFUl9ICiAjZGVmaW5lIEFORFJPSURfSFdVSV9QQVRIUEFSU0VSX0gKIAotI2luY2x1ZGUgIlZlY3RvckRyYXdhYmxlUGF0aC5oIgorI2luY2x1ZGUgIlZlY3RvckRyYXdhYmxlLmgiCiAjaW5jbHVkZSAidXRpbHMvVmVjdG9yRHJhd2FibGVVdGlscy5oIgogCiAjaW5jbHVkZSA8am5pLmg+CmRpZmYgLS1naXQgYS9saWJzL2h3dWkvUHJvcGVydGllcy5jcHAgYi9saWJzL2h3dWkvUHJvcGVydGllcy5jcHAKaW5kZXggMDY2OTU5Ni4uMDgzYWViNyAxMDA2NDQKLS0tIGEvbGlicy9od3VpL1Byb3BlcnRpZXMuY3BwCisrKyBiL2xpYnMvaHd1aS9Qcm9wZXJ0aWVzLmNwcApAQCAtNTMsNiArNTMsOCBAQAogUHJvZmlsZVR5cGUgUHJvcGVydGllczo6c1Byb2ZpbGVUeXBlID0gUHJvZmlsZVR5cGU6Ok5vbmU7CiBib29sIFByb3BlcnRpZXM6OnNEaXNhYmxlUHJvZmlsZUJhcnMgPSBmYWxzZTsKIAorYm9vbCBQcm9wZXJ0aWVzOjp3YWl0Rm9yR3B1Q29tcGxldGlvbiA9IGZhbHNlOworCiBzdGF0aWMgaW50IHByb3BlcnR5X2dldF9pbnQoY29uc3QgY2hhcioga2V5LCBpbnQgZGVmYXVsdFZhbHVlKSB7CiAgICAgY2hhciBidWZbUFJPUEVSVFlfVkFMVUVfTUFYXSA9IHsnXDAnLH07CiAKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9Qcm9wZXJ0aWVzLmggYi9saWJzL2h3dWkvUHJvcGVydGllcy5oCmluZGV4IDFkZGU3ZTAuLjg4ZjFkYmMgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9Qcm9wZXJ0aWVzLmgKKysrIGIvbGlicy9od3VpL1Byb3BlcnRpZXMuaApAQCAtMjg1LDYgKzI4NSw5IEBACiAKICAgICBzdGF0aWMgUHJvZmlsZVR5cGUgZ2V0UHJvZmlsZVR5cGUoKTsKIAorICAgIC8vIFNob3VsZCBiZSB1c2VkIG9ubHkgYnkgdGVzdCBhcHBzCisgICAgc3RhdGljIGJvb2wgd2FpdEZvckdwdUNvbXBsZXRpb247CisKIHByaXZhdGU6CiAgICAgc3RhdGljIFByb2ZpbGVUeXBlIHNQcm9maWxlVHlwZTsKICAgICBzdGF0aWMgYm9vbCBzRGlzYWJsZVByb2ZpbGVCYXJzOwpkaWZmIC0tZ2l0IGEvbGlicy9od3VpL1JlY29yZGVkT3AuaCBiL2xpYnMvaHd1aS9SZWNvcmRlZE9wLmgKaW5kZXggY2ZkZDBkMi4uYjI0M2Y5OSAxMDA2NDQKLS0tIGEvbGlicy9od3VpL1JlY29yZGVkT3AuaAorKysgYi9saWJzL2h3dWkvUmVjb3JkZWRPcC5oCkBAIC0zMyw2OCArMzMsOTYgQEAKIG5hbWVzcGFjZSBhbmRyb2lkIHsKIG5hbWVzcGFjZSB1aXJlbmRlcmVyIHsKIAorc3RydWN0IENsaXBCYXNlOwogY2xhc3MgT2Zmc2NyZWVuQnVmZmVyOwogY2xhc3MgUmVuZGVyTm9kZTsKIHN0cnVjdCBWZXJ0ZXg7CiAKIC8qKgotICogT24gb2YgdGhlIHByb3ZpZGVkIG1hY3JvcyBpcyBleGVjdXRlZCBmb3IgZWFjaCBvcCB0eXBlIGluIG9yZGVyLiBUaGUgZmlyc3Qgd2lsbCBiZSB1c2VkIGZvciBvcHMKLSAqIHRoYXQgY2Fubm90IG1lcmdlLCBhbmQgdGhlIHNlY29uZCBmb3IgdGhvc2UgdGhhdCBjYW4uCisgKiBBdXRob3JpdGF0aXZlIG9wIGxpc3QsIHVzZWQgZm9yIGdlbmVyYXRpbmcgdGhlIG9wIElEIGVudW0sIElEIGJhc2VkIExVVFMsIGFuZAorICogdGhlIGZ1bmN0aW9ucyB0byB3aGljaCB0aGV5IGRpc3BhdGNoLiBQYXJhbWV0ZXIgbWFjcm9zIGFyZSBleGVjdXRlZCBmb3IgZWFjaCBvcCwKKyAqIGluIG9yZGVyLCBiYXNlZCBvbiB0aGUgb3AncyB0eXBlLgogICoKLSAqIFRoaXMgc2VydmVzIGFzIHRoZSBhdXRob3JpdGF0aXZlIGxpc3Qgb2Ygb3BzLCB1c2VkIGZvciBnZW5lcmF0aW5nIElEIGVudW0sIGFuZCBJRCBiYXNlZCBMVVRzLgorICogVGhlcmUgYXJlIDQgdHlwZXMgb2Ygb3A6CisgKgorICogUHJlIHJlbmRlciAtIG5vdCBkaXJlY3RseSBjb25zdW1lZCBieSByZW5kZXJlciwgcmVvcmRlciBzdGFnZSByZXNvbHZlcyB0aGlzIGludG8gcmVuZGVyYWJsZSB0eXBlCisgKiBSZW5kZXIgb25seSAtIGdlbmVyYXRlZCByZW5kZXJhYmxlIG9wcyAtIG5ldmVyIHBhc3NlZCB0byBhIHJlb3JkZXJlcgorICogVW5tZXJnZWFibGUgLSByZW9yZGVyYWJsZSwgcmVuZGVyYWJsZSAoYnV0IG5vdCBtZXJnZWFibGUpCisgKiBNZXJnZWFibGUgLSByZW9yZGVyYWJsZSwgcmVuZGVyYWJsZSAoYW5kIG1lcmdlYWJsZSkKICAqLwotI2RlZmluZSBNQVBfT1BTX0JBU0VEX09OX01FUkdFQUJJTElUWShVX09QX0ZOLCBNX09QX0ZOKSBcCi0gICAgICAgIFVfT1BfRk4oQXJjT3ApIFwKLSAgICAgICAgTV9PUF9GTihCaXRtYXBPcCkgXAotICAgICAgICBVX09QX0ZOKEJpdG1hcE1lc2hPcCkgXAotICAgICAgICBVX09QX0ZOKEJpdG1hcFJlY3RPcCkgXAotICAgICAgICBVX09QX0ZOKENpcmNsZVByb3BzT3ApIFwKLSAgICAgICAgVV9PUF9GTihGdW5jdG9yT3ApIFwKLSAgICAgICAgVV9PUF9GTihMaW5lc09wKSBcCi0gICAgICAgIFVfT1BfRk4oT3ZhbE9wKSBcCi0gICAgICAgIE1fT1BfRk4oUGF0Y2hPcCkgXAotICAgICAgICBVX09QX0ZOKFBhdGhPcCkgXAotICAgICAgICBVX09QX0ZOKFBvaW50c09wKSBcCi0gICAgICAgIFVfT1BfRk4oUmVjdE9wKSBcCi0gICAgICAgIFVfT1BfRk4oUmVuZGVyTm9kZU9wKSBcCi0gICAgICAgIFVfT1BfRk4oUm91bmRSZWN0T3ApIFwKLSAgICAgICAgVV9PUF9GTihSb3VuZFJlY3RQcm9wc09wKSBcCi0gICAgICAgIFVfT1BfRk4oU2hhZG93T3ApIFwKLSAgICAgICAgVV9PUF9GTihTaW1wbGVSZWN0c09wKSBcCi0gICAgICAgIE1fT1BfRk4oVGV4dE9wKSBcCi0gICAgICAgIFVfT1BfRk4oVGV4dE9uUGF0aE9wKSBcCi0gICAgICAgIFVfT1BfRk4oVGV4dHVyZUxheWVyT3ApIFwKLSAgICAgICAgVV9PUF9GTihCZWdpbkxheWVyT3ApIFwKLSAgICAgICAgVV9PUF9GTihFbmRMYXllck9wKSBcCi0gICAgICAgIFVfT1BfRk4oTGF5ZXJPcCkKKyNkZWZpbmUgTUFQX09QU19CQVNFRF9PTl9UWVBFKFBSRV9SRU5ERVJfT1BfRk4sIFJFTkRFUl9PTkxZX09QX0ZOLCBVTk1FUkdFQUJMRV9PUF9GTiwgTUVSR0VBQkxFX09QX0ZOKSBcCisgICAgICAgIFBSRV9SRU5ERVJfT1BfRk4oUmVuZGVyTm9kZU9wKSBcCisgICAgICAgIFBSRV9SRU5ERVJfT1BfRk4oQ2lyY2xlUHJvcHNPcCkgXAorICAgICAgICBQUkVfUkVOREVSX09QX0ZOKFJvdW5kUmVjdFByb3BzT3ApIFwKKyAgICAgICAgUFJFX1JFTkRFUl9PUF9GTihCZWdpbkxheWVyT3ApIFwKKyAgICAgICAgUFJFX1JFTkRFUl9PUF9GTihFbmRMYXllck9wKSBcCisgICAgICAgIFwKKyAgICAgICAgUkVOREVSX09OTFlfT1BfRk4oU2hhZG93T3ApIFwKKyAgICAgICAgUkVOREVSX09OTFlfT1BfRk4oTGF5ZXJPcCkgXAorICAgICAgICBcCisgICAgICAgIFVOTUVSR0VBQkxFX09QX0ZOKEFyY09wKSBcCisgICAgICAgIFVOTUVSR0VBQkxFX09QX0ZOKEJpdG1hcE1lc2hPcCkgXAorICAgICAgICBVTk1FUkdFQUJMRV9PUF9GTihCaXRtYXBSZWN0T3ApIFwKKyAgICAgICAgVU5NRVJHRUFCTEVfT1BfRk4oRnVuY3Rvck9wKSBcCisgICAgICAgIFVOTUVSR0VBQkxFX09QX0ZOKExpbmVzT3ApIFwKKyAgICAgICAgVU5NRVJHRUFCTEVfT1BfRk4oT3ZhbE9wKSBcCisgICAgICAgIFVOTUVSR0VBQkxFX09QX0ZOKFBhdGhPcCkgXAorICAgICAgICBVTk1FUkdFQUJMRV9PUF9GTihQb2ludHNPcCkgXAorICAgICAgICBVTk1FUkdFQUJMRV9PUF9GTihSZWN0T3ApIFwKKyAgICAgICAgVU5NRVJHRUFCTEVfT1BfRk4oUm91bmRSZWN0T3ApIFwKKyAgICAgICAgVU5NRVJHRUFCTEVfT1BfRk4oU2ltcGxlUmVjdHNPcCkgXAorICAgICAgICBVTk1FUkdFQUJMRV9PUF9GTihUZXh0T25QYXRoT3ApIFwKKyAgICAgICAgVU5NRVJHRUFCTEVfT1BfRk4oVGV4dHVyZUxheWVyT3ApIFwKKyAgICAgICAgXAorICAgICAgICBNRVJHRUFCTEVfT1BfRk4oQml0bWFwT3ApIFwKKyAgICAgICAgTUVSR0VBQkxFX09QX0ZOKFBhdGNoT3ApIFwKKyAgICAgICAgTUVSR0VBQkxFX09QX0ZOKFRleHRPcCkKIAogLyoqCi0gKiBUaGUgcHJvdmlkZWQgbWFjcm8gaXMgZXhlY3V0ZWQgZm9yIGVhY2ggb3AgdHlwZSBpbiBvcmRlci4gVGhpcyBpcyB1c2VkIGluIGNhc2VzIHdoZXJlCi0gKiBtZXJnZS1hYmlsaXR5IG9mIG9wcyBkb2Vzbid0IG1hdHRlci4KKyAqIExVVCBnZW5lcmF0b3JzLCB3aGljaCB3aWxsIGluc2VydCBudWxscHRyIGZvciB1bnN1cHBvcnRlZCBvcHMKICAqLwotI2RlZmluZSBNQVBfT1BTKE9QX0ZOKSBcCi0gICAgICAgIE1BUF9PUFNfQkFTRURfT05fTUVSR0VBQklMSVRZKE9QX0ZOLCBPUF9GTikKKyNkZWZpbmUgTlVMTFBUUl9PUF9GTihUeXBlKSBudWxscHRyLAogCisjZGVmaW5lIEJVSUxEX0RFRkVSUkFCTEVfT1BfTFVUKE9QX0ZOKSBcCisgICAgICAgIHsgTUFQX09QU19CQVNFRF9PTl9UWVBFKE9QX0ZOLCBOVUxMUFRSX09QX0ZOLCBPUF9GTiwgT1BfRk4pIH0KKworI2RlZmluZSBCVUlMRF9NRVJHRUFCTEVfT1BfTFVUKE9QX0ZOKSBcCisgICAgICAgIHsgTUFQX09QU19CQVNFRF9PTl9UWVBFKE5VTExQVFJfT1BfRk4sIE5VTExQVFJfT1BfRk4sIE5VTExQVFJfT1BfRk4sIE9QX0ZOKSB9CisKKyNkZWZpbmUgQlVJTERfUkVOREVSQUJMRV9PUF9MVVQoT1BfRk4pIFwKKyAgICAgICAgeyBNQVBfT1BTX0JBU0VEX09OX1RZUEUoTlVMTFBUUl9PUF9GTiwgT1BfRk4sIE9QX0ZOLCBPUF9GTikgfQorCisvKioKKyAqIE9wIG1hcHBpbmcgZnVuY3Rpb25zLCB3aGljaCBza2lwIHVuc3VwcG9ydGVkIG9wcy4KKyAqCisgKiBOb3RlOiBEbyBub3QgdXNlIGZvciBMVVRTLCBzaW5jZSB0aGVzZSBkbyBub3QgcHJlc2VydmUgSUQgb3JkZXIuCisgKi8KICNkZWZpbmUgTlVMTF9PUF9GTihUeXBlKQogCi0jZGVmaW5lIE1BUF9NRVJHRURfT1BTKE9QX0ZOKSBcCi0gICAgICAgIE1BUF9PUFNfQkFTRURfT05fTUVSR0VBQklMSVRZKE5VTExfT1BfRk4sIE9QX0ZOKQorI2RlZmluZSBNQVBfTUVSR0VBQkxFX09QUyhPUF9GTikgXAorICAgICAgICBNQVBfT1BTX0JBU0VEX09OX1RZUEUoTlVMTF9PUF9GTiwgTlVMTF9PUF9GTiwgTlVMTF9PUF9GTiwgT1BfRk4pCisKKyNkZWZpbmUgTUFQX1JFTkRFUkFCTEVfT1BTKE9QX0ZOKSBcCisgICAgICAgIE1BUF9PUFNfQkFTRURfT05fVFlQRShOVUxMX09QX0ZOLCBPUF9GTiwgT1BfRk4sIE9QX0ZOKQorCisjZGVmaW5lIE1BUF9ERUZFUlJBQkxFX09QUyhPUF9GTikgXAorICAgICAgICBNQVBfT1BTX0JBU0VEX09OX1RZUEUoT1BfRk4sIE5VTExfT1BfRk4sIE9QX0ZOLCBPUF9GTikKIAogLy8gR2VuZXJhdGUgT3BJZCBlbnVtCiAjZGVmaW5lIElERU5USVRZX0ZOKFR5cGUpIFR5cGUsCiBuYW1lc3BhY2UgUmVjb3JkZWRPcElkIHsKICAgICBlbnVtIHsKLSAgICAgICAgTUFQX09QUyhJREVOVElUWV9GTikKKyAgICAgICAgTUFQX09QU19CQVNFRF9PTl9UWVBFKElERU5USVRZX0ZOLCBJREVOVElUWV9GTiwgSURFTlRJVFlfRk4sIElERU5USVRZX0ZOKQogICAgICAgICBDb3VudCwKICAgICB9OwogfQotc3RhdGljX2Fzc2VydChSZWNvcmRlZE9wSWQ6OkFyY09wID09IDAsCitzdGF0aWNfYXNzZXJ0KFJlY29yZGVkT3BJZDo6UmVuZGVyTm9kZU9wID09IDAsCiAgICAgICAgICJGaXJzdCBpbmRleCBtdXN0IGJlIHplcm8gZm9yIExVVHMgdG8gd29yayIpOwogCi0jZGVmaW5lIEJBU0VfUEFSQU1TIGNvbnN0IFJlY3QmIHVubWFwcGVkQm91bmRzLCBjb25zdCBNYXRyaXg0JiBsb2NhbE1hdHJpeCwgY29uc3QgUmVjdCYgbG9jYWxDbGlwUmVjdCwgY29uc3QgU2tQYWludCogcGFpbnQKLSNkZWZpbmUgQkFTRV9QQVJBTVNfUEFJTlRMRVNTIGNvbnN0IFJlY3QmIHVubWFwcGVkQm91bmRzLCBjb25zdCBNYXRyaXg0JiBsb2NhbE1hdHJpeCwgY29uc3QgUmVjdCYgbG9jYWxDbGlwUmVjdAotI2RlZmluZSBTVVBFUihUeXBlKSBSZWNvcmRlZE9wKFJlY29yZGVkT3BJZDo6VHlwZSwgdW5tYXBwZWRCb3VuZHMsIGxvY2FsTWF0cml4LCBsb2NhbENsaXBSZWN0LCBwYWludCkKLSNkZWZpbmUgU1VQRVJfUEFJTlRMRVNTKFR5cGUpIFJlY29yZGVkT3AoUmVjb3JkZWRPcElkOjpUeXBlLCB1bm1hcHBlZEJvdW5kcywgbG9jYWxNYXRyaXgsIGxvY2FsQ2xpcFJlY3QsIG51bGxwdHIpCisjZGVmaW5lIEJBU0VfUEFSQU1TIGNvbnN0IFJlY3QmIHVubWFwcGVkQm91bmRzLCBjb25zdCBNYXRyaXg0JiBsb2NhbE1hdHJpeCwgY29uc3QgQ2xpcEJhc2UqIGxvY2FsQ2xpcCwgY29uc3QgU2tQYWludCogcGFpbnQKKyNkZWZpbmUgQkFTRV9QQVJBTVNfUEFJTlRMRVNTIGNvbnN0IFJlY3QmIHVubWFwcGVkQm91bmRzLCBjb25zdCBNYXRyaXg0JiBsb2NhbE1hdHJpeCwgY29uc3QgQ2xpcEJhc2UqIGxvY2FsQ2xpcAorI2RlZmluZSBTVVBFUihUeXBlKSBSZWNvcmRlZE9wKFJlY29yZGVkT3BJZDo6VHlwZSwgdW5tYXBwZWRCb3VuZHMsIGxvY2FsTWF0cml4LCBsb2NhbENsaXAsIHBhaW50KQorI2RlZmluZSBTVVBFUl9QQUlOVExFU1MoVHlwZSkgUmVjb3JkZWRPcChSZWNvcmRlZE9wSWQ6OlR5cGUsIHVubWFwcGVkQm91bmRzLCBsb2NhbE1hdHJpeCwgbG9jYWxDbGlwLCBudWxscHRyKQogCiBzdHJ1Y3QgUmVjb3JkZWRPcCB7CiAgICAgLyogSUQgZnJvbSBSZWNvcmRlZE9wSWQgLSBnZW5lcmFsbHkgdXNlZCBmb3IganVtcGluZyBpbnRvIGZ1bmN0aW9uIHRhYmxlcyAqLwpAQCAtMTA2LDggKzEzNCw4IEBACiAgICAgLyogdHJhbnNmb3JtIGluIHJlY29yZGluZyBzcGFjZSAodnMgRGlzcGxheUxpc3Qgb3JpZ2luKSAqLwogICAgIGNvbnN0IE1hdHJpeDQgbG9jYWxNYXRyaXg7CiAKLSAgICAvKiBjbGlwIGluIHJlY29yZGluZyBzcGFjZSAqLwotICAgIGNvbnN0IFJlY3QgbG9jYWxDbGlwUmVjdDsKKyAgICAvKiBjbGlwIGluIHJlY29yZGluZyBzcGFjZSAtIG51bGxwdHIgaWYgbm90IGNsaXBwZWQgKi8KKyAgICBjb25zdCBDbGlwQmFzZSogbG9jYWxDbGlwOwogCiAgICAgLyogb3B0aW9uYWwgcGFpbnQsIHN0b3JlZCBpbiBiYXNlIG9iamVjdCB0byBzaW1wbGlmeSBtZXJnaW5nIGxvZ2ljICovCiAgICAgY29uc3QgU2tQYWludCogcGFpbnQ7CkBAIC0xMTYsNyArMTQ0LDcgQEAKICAgICAgICAgICAgIDogb3BJZChvcElkKQogICAgICAgICAgICAgLCB1bm1hcHBlZEJvdW5kcyh1bm1hcHBlZEJvdW5kcykKICAgICAgICAgICAgICwgbG9jYWxNYXRyaXgobG9jYWxNYXRyaXgpCi0gICAgICAgICAgICAsIGxvY2FsQ2xpcFJlY3QobG9jYWxDbGlwUmVjdCkKKyAgICAgICAgICAgICwgbG9jYWxDbGlwKGxvY2FsQ2xpcCkKICAgICAgICAgICAgICwgcGFpbnQocGFpbnQpIHt9CiB9OwogCkBAIC0xODcsOSArMjE1LDkgQEAKIH07CiAKIHN0cnVjdCBDaXJjbGVQcm9wc09wIDogUmVjb3JkZWRPcCB7Ci0gICAgQ2lyY2xlUHJvcHNPcChjb25zdCBNYXRyaXg0JiBsb2NhbE1hdHJpeCwgY29uc3QgUmVjdCYgbG9jYWxDbGlwUmVjdCwgY29uc3QgU2tQYWludCogcGFpbnQsCisgICAgQ2lyY2xlUHJvcHNPcChjb25zdCBNYXRyaXg0JiBsb2NhbE1hdHJpeCwgY29uc3QgQ2xpcEJhc2UqIGxvY2FsQ2xpcCwgY29uc3QgU2tQYWludCogcGFpbnQsCiAgICAgICAgICAgICBmbG9hdCogeCwgZmxvYXQqIHksIGZsb2F0KiByYWRpdXMpCi0gICAgICAgICAgICA6IFJlY29yZGVkT3AoUmVjb3JkZWRPcElkOjpDaXJjbGVQcm9wc09wLCBSZWN0KCksIGxvY2FsTWF0cml4LCBsb2NhbENsaXBSZWN0LCBwYWludCkKKyAgICAgICAgICAgIDogUmVjb3JkZWRPcChSZWNvcmRlZE9wSWQ6OkNpcmNsZVByb3BzT3AsIFJlY3QoKSwgbG9jYWxNYXRyaXgsIGxvY2FsQ2xpcCwgcGFpbnQpCiAgICAgICAgICAgICAsIHgoeCkKICAgICAgICAgICAgICwgeSh5KQogICAgICAgICAgICAgLCByYWRpdXMocmFkaXVzKSB7fQpAQCAtMjU5LDkgKzI4Nyw5IEBACiB9OwogCiBzdHJ1Y3QgUm91bmRSZWN0UHJvcHNPcCA6IFJlY29yZGVkT3AgewotICAgIFJvdW5kUmVjdFByb3BzT3AoY29uc3QgTWF0cml4NCYgbG9jYWxNYXRyaXgsIGNvbnN0IFJlY3QmIGxvY2FsQ2xpcFJlY3QsIGNvbnN0IFNrUGFpbnQqIHBhaW50LAorICAgIFJvdW5kUmVjdFByb3BzT3AoY29uc3QgTWF0cml4NCYgbG9jYWxNYXRyaXgsIGNvbnN0IENsaXBCYXNlKiBsb2NhbENsaXAsIGNvbnN0IFNrUGFpbnQqIHBhaW50LAogICAgICAgICAgICAgZmxvYXQqIGxlZnQsIGZsb2F0KiB0b3AsIGZsb2F0KiByaWdodCwgZmxvYXQqIGJvdHRvbSwgZmxvYXQgKnJ4LCBmbG9hdCAqcnkpCi0gICAgICAgICAgICA6IFJlY29yZGVkT3AoUmVjb3JkZWRPcElkOjpSb3VuZFJlY3RQcm9wc09wLCBSZWN0KCksIGxvY2FsTWF0cml4LCBsb2NhbENsaXBSZWN0LCBwYWludCkKKyAgICAgICAgICAgIDogUmVjb3JkZWRPcChSZWNvcmRlZE9wSWQ6OlJvdW5kUmVjdFByb3BzT3AsIFJlY3QoKSwgbG9jYWxNYXRyaXgsIGxvY2FsQ2xpcCwgcGFpbnQpCiAgICAgICAgICAgICAsIGxlZnQobGVmdCkKICAgICAgICAgICAgICwgdG9wKHRvcCkKICAgICAgICAgICAgICwgcmlnaHQocmlnaHQpCkBAIC0yODYsMTIgKzMxNCwxMyBAQAogICovCiBzdHJ1Y3QgU2hhZG93T3AgOiBSZWNvcmRlZE9wIHsKICAgICBTaGFkb3dPcChjb25zdCBSZW5kZXJOb2RlT3AmIGNhc3Rlck9wLCBmbG9hdCBjYXN0ZXJBbHBoYSwgY29uc3QgU2tQYXRoKiBjYXN0ZXJQYXRoLAotICAgICAgICAgICAgY29uc3QgUmVjdCYgY2xpcFJlY3QsIGNvbnN0IFZlY3RvcjMmIGxpZ2h0Q2VudGVyKQotICAgICAgICAgICAgOiBSZWNvcmRlZE9wKFJlY29yZGVkT3BJZDo6U2hhZG93T3AsIFJlY3QoKSwgTWF0cml4NDo6aWRlbnRpdHkoKSwgY2xpcFJlY3QsIG51bGxwdHIpCisgICAgICAgICAgICBjb25zdCBSZWN0JiBsb2NhbENsaXBSZWN0LCBjb25zdCBWZWN0b3IzJiBsaWdodENlbnRlcikKKyAgICAgICAgICAgIDogUmVjb3JkZWRPcChSZWNvcmRlZE9wSWQ6OlNoYWRvd09wLCBSZWN0KCksIE1hdHJpeDQ6OmlkZW50aXR5KCksIG51bGxwdHIsIG51bGxwdHIpCiAgICAgICAgICAgICAsIHNoYWRvd01hdHJpeFhZKGNhc3Rlck9wLmxvY2FsTWF0cml4KQogICAgICAgICAgICAgLCBzaGFkb3dNYXRyaXhaKGNhc3Rlck9wLmxvY2FsTWF0cml4KQogICAgICAgICAgICAgLCBjYXN0ZXJBbHBoYShjYXN0ZXJBbHBoYSkKICAgICAgICAgICAgICwgY2FzdGVyUGF0aChjYXN0ZXJQYXRoKQorICAgICAgICAgICAgLCBsb2NhbENsaXBSZWN0KGxvY2FsQ2xpcFJlY3QpCiAgICAgICAgICAgICAsIGxpZ2h0Q2VudGVyKGxpZ2h0Q2VudGVyKSB7CiAgICAgICAgIGNvbnN0IFJlbmRlck5vZGUmIG5vZGUgPSAqY2FzdGVyT3AucmVuZGVyTm9kZTsKICAgICAgICAgbm9kZS5hcHBseVZpZXdQcm9wZXJ0eVRyYW5zZm9ybXMoc2hhZG93TWF0cml4WFksIGZhbHNlKTsKQEAgLTMwMSw2ICszMzAsNyBAQAogICAgIE1hdHJpeDQgc2hhZG93TWF0cml4WjsKICAgICBjb25zdCBmbG9hdCBjYXN0ZXJBbHBoYTsKICAgICBjb25zdCBTa1BhdGgqIGNhc3RlclBhdGg7CisgICAgY29uc3QgUmVjdCBsb2NhbENsaXBSZWN0OwogICAgIGNvbnN0IFZlY3RvcjMgbGlnaHRDZW50ZXI7CiB9OwogCkBAIC0zNzQsNyArNDA0LDcgQEAKICAqLwogc3RydWN0IEVuZExheWVyT3AgOiBSZWNvcmRlZE9wIHsKICAgICBFbmRMYXllck9wKCkKLSAgICAgICAgICAgIDogUmVjb3JkZWRPcChSZWNvcmRlZE9wSWQ6OkVuZExheWVyT3AsIFJlY3QoKSwgTWF0cml4NDo6aWRlbnRpdHkoKSwgUmVjdCgpLCBudWxscHRyKSB7fQorICAgICAgICAgICAgOiBSZWNvcmRlZE9wKFJlY29yZGVkT3BJZDo6RW5kTGF5ZXJPcCwgUmVjdCgpLCBNYXRyaXg0OjppZGVudGl0eSgpLCBudWxscHRyLCBudWxscHRyKSB7fQogfTsKIAogLyoqCkBAIC0zODgsMTMgKzQxOCwxMyBAQAogICAgIExheWVyT3AoQkFTRV9QQVJBTVMsIE9mZnNjcmVlbkJ1ZmZlcioqIGxheWVySGFuZGxlKQogICAgICAgICAgICAgOiBTVVBFUl9QQUlOVExFU1MoTGF5ZXJPcCkKICAgICAgICAgICAgICwgbGF5ZXJIYW5kbGUobGF5ZXJIYW5kbGUpCi0gICAgICAgICAgICAsIGFscGhhKHBhaW50LT5nZXRBbHBoYSgpIC8gMjU1LjBmKQorICAgICAgICAgICAgLCBhbHBoYShwYWludCA/IHBhaW50LT5nZXRBbHBoYSgpIC8gMjU1LjBmIDogMS4wZikKICAgICAgICAgICAgICwgbW9kZShQYWludFV0aWxzOjpnZXRYZmVybW9kZURpcmVjdChwYWludCkpCi0gICAgICAgICAgICAsIGNvbG9yRmlsdGVyKHBhaW50LT5nZXRDb2xvckZpbHRlcigpKQorICAgICAgICAgICAgLCBjb2xvckZpbHRlcihwYWludCA/IHBhaW50LT5nZXRDb2xvckZpbHRlcigpIDogbnVsbHB0cikKICAgICAgICAgICAgICwgZGVzdHJveSh0cnVlKSB7fQogCiAgICAgTGF5ZXJPcChSZW5kZXJOb2RlJiBub2RlKQotICAgICAgICA6IFJlY29yZGVkT3AoUmVjb3JkZWRPcElkOjpMYXllck9wLCBSZWN0KG5vZGUuZ2V0V2lkdGgoKSwgbm9kZS5nZXRIZWlnaHQoKSksIE1hdHJpeDQ6OmlkZW50aXR5KCksIFJlY3Qobm9kZS5nZXRXaWR0aCgpLCBub2RlLmdldEhlaWdodCgpKSwgbnVsbHB0cikKKyAgICAgICAgOiBSZWNvcmRlZE9wKFJlY29yZGVkT3BJZDo6TGF5ZXJPcCwgUmVjdChub2RlLmdldFdpZHRoKCksIG5vZGUuZ2V0SGVpZ2h0KCkpLCBNYXRyaXg0OjppZGVudGl0eSgpLCBudWxscHRyLCBudWxscHRyKQogICAgICAgICAsIGxheWVySGFuZGxlKG5vZGUuZ2V0TGF5ZXJIYW5kbGUoKSkKICAgICAgICAgLCBhbHBoYShub2RlLnByb3BlcnRpZXMoKS5sYXllclByb3BlcnRpZXMoKS5hbHBoYSgpIC8gMjU1LjBmKQogICAgICAgICAsIG1vZGUobm9kZS5wcm9wZXJ0aWVzKCkubGF5ZXJQcm9wZXJ0aWVzKCkueGZlck1vZGUoKSkKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9SZWNvcmRpbmdDYW52YXMuY3BwIGIvbGlicy9od3VpL1JlY29yZGluZ0NhbnZhcy5jcHAKaW5kZXggZjc1ZDhkNC4uZjdmNmNhZiAxMDA2NDQKLS0tIGEvbGlicy9od3VpL1JlY29yZGluZ0NhbnZhcy5jcHAKKysrIGIvbGlicy9od3VpL1JlY29yZGluZ0NhbnZhcy5jcHAKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgICAgICJwcmVwYXJlRGlydHkgY2FsbGVkIGEgc2Vjb25kIHRpbWUgZHVyaW5nIGEgcmVjb3JkaW5nISIpOwogICAgIG1EaXNwbGF5TGlzdCA9IG5ldyBEaXNwbGF5TGlzdCgpOwogCi0gICAgbVN0YXRlLmluaXRpYWxpemVTYXZlU3RhY2sod2lkdGgsIGhlaWdodCwgMCwgMCwgd2lkdGgsIGhlaWdodCwgVmVjdG9yMygpKTsKKyAgICBtU3RhdGUuaW5pdGlhbGl6ZVJlY29yZGluZ1NhdmVTdGFjayh3aWR0aCwgaGVpZ2h0KTsKIAogICAgIG1EZWZlcnJlZEJhcnJpZXJUeXBlID0gRGVmZXJyZWRCYXJyaWVyVHlwZTo6SW5PcmRlcjsKICAgICBtU3RhdGUuc2V0RGlydHlDbGlwKGZhbHNlKTsKQEAgLTE1NSw2ICsxNTUsOCBAQAogICAgICAgICByZXR1cm4gc2F2ZVZhbHVlOwogICAgIH0KIAorICAgIGF1dG8gcHJldmlvdXNDbGlwID0gZ2V0UmVjb3JkZWRDbGlwKCk7IC8vIG5vdGU6IGRvbmUgd2hpbGUgc25hcHNob3QgPT0gcHJldmlvdXMKKwogICAgIHNuYXBzaG90LmZsYWdzIHw9IFNuYXBzaG90OjprRmxhZ0Zib1RhcmdldCB8IFNuYXBzaG90OjprRmxhZ0lzRmJvTGF5ZXI7CiAgICAgc25hcHNob3QuaW5pdGlhbGl6ZVZpZXdwb3J0KHVudHJhbnNmb3JtZWRCb3VuZHMuZ2V0V2lkdGgoKSwgdW50cmFuc2Zvcm1lZEJvdW5kcy5nZXRIZWlnaHQoKSk7CiAgICAgc25hcHNob3QudHJhbnNmb3JtLT5sb2FkVHJhbnNsYXRlKC11bnRyYW5zZm9ybWVkQm91bmRzLmxlZnQsIC11bnRyYW5zZm9ybWVkQm91bmRzLnRvcCwgMC4wZik7CkBAIC0xNjcsNyArMTY5LDcgQEAKICAgICBhZGRPcChuZXcgKGFsbG9jKCkpIEJlZ2luTGF5ZXJPcCgKICAgICAgICAgICAgIFJlY3QobGVmdCwgdG9wLCByaWdodCwgYm90dG9tKSwKICAgICAgICAgICAgICpwcmV2aW91cy50cmFuc2Zvcm0sIC8vIHRyYW5zZm9ybSB0byAqZHJhdyogd2l0aAotICAgICAgICAgICAgcHJldmlvdXMuZ2V0UmVuZGVyVGFyZ2V0Q2xpcCgpLCAvLyBjbGlwIHRvICpkcmF3KiB3aXRoCisgICAgICAgICAgICBwcmV2aW91c0NsaXAsIC8vIGNsaXAgdG8gKmRyYXcqIHdpdGgKICAgICAgICAgICAgIHJlZlBhaW50KHBhaW50KSkpOwogCiAgICAgcmV0dXJuIHNhdmVWYWx1ZTsKQEAgLTIyOSwxMSArMjMxLDEwIEBACiB9CiAKIHZvaWQgUmVjb3JkaW5nQ2FudmFzOjpkcmF3UGFpbnQoY29uc3QgU2tQYWludCYgcGFpbnQpIHsKLSAgICAvLyBUT0RPOiBtb3JlIGVmZmljaWVudCByZWNvcmRpbmc/CiAgICAgYWRkT3AobmV3IChhbGxvYygpKSBSZWN0T3AoCi0gICAgICAgICAgICBtU3RhdGUuZ2V0UmVuZGVyVGFyZ2V0Q2xpcEJvdW5kcygpLAorICAgICAgICAgICAgbVN0YXRlLmdldFJlbmRlclRhcmdldENsaXBCb3VuZHMoKSwgLy8gT0ssIHNpbmNlIHdlJ3ZlIG5vdCBwYXNzZWQgdHJhbnNmb3JtCiAgICAgICAgICAgICBNYXRyaXg0OjppZGVudGl0eSgpLAotICAgICAgICAgICAgbVN0YXRlLmdldFJlbmRlclRhcmdldENsaXBCb3VuZHMoKSwKKyAgICAgICAgICAgIGdldFJlY29yZGVkQ2xpcCgpLAogICAgICAgICAgICAgcmVmUGFpbnQoJnBhaW50KSkpOwogfQogCkBAIC0yNTMsNyArMjU0LDcgQEAKICAgICBhZGRPcChuZXcgKGFsbG9jKCkpIFBvaW50c09wKAogICAgICAgICAgICAgY2FsY0JvdW5kc09mUG9pbnRzKHBvaW50cywgZmxvYXRDb3VudCksCiAgICAgICAgICAgICAqbVN0YXRlLmN1cnJlbnRTbmFwc2hvdCgpLT50cmFuc2Zvcm0sCi0gICAgICAgICAgICBtU3RhdGUuZ2V0UmVuZGVyVGFyZ2V0Q2xpcEJvdW5kcygpLAorICAgICAgICAgICAgZ2V0UmVjb3JkZWRDbGlwKCksCiAgICAgICAgICAgICByZWZQYWludCgmcGFpbnQpLCByZWZCdWZmZXI8ZmxvYXQ+KHBvaW50cywgZmxvYXRDb3VudCksIGZsb2F0Q291bnQpKTsKIH0KIApAQCAtMjY0LDcgKzI2NSw3IEBACiAgICAgYWRkT3AobmV3IChhbGxvYygpKSBMaW5lc09wKAogICAgICAgICAgICAgY2FsY0JvdW5kc09mUG9pbnRzKHBvaW50cywgZmxvYXRDb3VudCksCiAgICAgICAgICAgICAqbVN0YXRlLmN1cnJlbnRTbmFwc2hvdCgpLT50cmFuc2Zvcm0sCi0gICAgICAgICAgICBtU3RhdGUuZ2V0UmVuZGVyVGFyZ2V0Q2xpcEJvdW5kcygpLAorICAgICAgICAgICAgZ2V0UmVjb3JkZWRDbGlwKCksCiAgICAgICAgICAgICByZWZQYWludCgmcGFpbnQpLCByZWZCdWZmZXI8ZmxvYXQ+KHBvaW50cywgZmxvYXRDb3VudCksIGZsb2F0Q291bnQpKTsKIH0KIApAQCAtMjcyLDcgKzI3Myw3IEBACiAgICAgYWRkT3AobmV3IChhbGxvYygpKSBSZWN0T3AoCiAgICAgICAgICAgICBSZWN0KGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSksCiAgICAgICAgICAgICAqKG1TdGF0ZS5jdXJyZW50U25hcHNob3QoKS0+dHJhbnNmb3JtKSwKLSAgICAgICAgICAgIG1TdGF0ZS5nZXRSZW5kZXJUYXJnZXRDbGlwQm91bmRzKCksCisgICAgICAgICAgICBnZXRSZWNvcmRlZENsaXAoKSwKICAgICAgICAgICAgIHJlZlBhaW50KCZwYWludCkpKTsKIH0KIApAQCAtMzA1LDcgKzMwNiw3IEBACiAgICAgYWRkT3AobmV3IChhbGxvYygpKSBTaW1wbGVSZWN0c09wKAogICAgICAgICAgICAgUmVjdChsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pLAogICAgICAgICAgICAgKihtU3RhdGUuY3VycmVudFNuYXBzaG90KCktPnRyYW5zZm9ybSksCi0gICAgICAgICAgICBtU3RhdGUuZ2V0UmVuZGVyVGFyZ2V0Q2xpcEJvdW5kcygpLAorICAgICAgICAgICAgZ2V0UmVjb3JkZWRDbGlwKCksCiAgICAgICAgICAgICByZWZQYWludChwYWludCksIHJlY3REYXRhLCB2ZXJ0ZXhDb3VudCkpOwogfQogCkBAIC0zMzksNyArMzQwLDcgQEAKICAgICBhZGRPcChuZXcgKGFsbG9jKCkpIFJvdW5kUmVjdE9wKAogICAgICAgICAgICAgUmVjdChsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pLAogICAgICAgICAgICAgKihtU3RhdGUuY3VycmVudFNuYXBzaG90KCktPnRyYW5zZm9ybSksCi0gICAgICAgICAgICBtU3RhdGUuZ2V0UmVuZGVyVGFyZ2V0Q2xpcEJvdW5kcygpLAorICAgICAgICAgICAgZ2V0UmVjb3JkZWRDbGlwKCksCiAgICAgICAgICAgICByZWZQYWludCgmcGFpbnQpLCByeCwgcnkpKTsKIH0KIApAQCAtMzU4LDcgKzM1OSw3IEBACiAgICAgcmVmQml0bWFwc0luU2hhZGVyKHBhaW50LT52YWx1ZS5nZXRTaGFkZXIoKSk7CiAgICAgYWRkT3AobmV3IChhbGxvYygpKSBSb3VuZFJlY3RQcm9wc09wKAogICAgICAgICAgICAgKihtU3RhdGUuY3VycmVudFNuYXBzaG90KCktPnRyYW5zZm9ybSksCi0gICAgICAgICAgICBtU3RhdGUuZ2V0UmVuZGVyVGFyZ2V0Q2xpcEJvdW5kcygpLAorICAgICAgICAgICAgZ2V0UmVjb3JkZWRDbGlwKCksCiAgICAgICAgICAgICAmcGFpbnQtPnZhbHVlLAogICAgICAgICAgICAgJmxlZnQtPnZhbHVlLCAmdG9wLT52YWx1ZSwgJnJpZ2h0LT52YWx1ZSwgJmJvdHRvbS0+dmFsdWUsCiAgICAgICAgICAgICAmcngtPnZhbHVlLCAmcnktPnZhbHVlKSk7CkBAIC0zODAsNyArMzgxLDcgQEAKICAgICByZWZCaXRtYXBzSW5TaGFkZXIocGFpbnQtPnZhbHVlLmdldFNoYWRlcigpKTsKICAgICBhZGRPcChuZXcgKGFsbG9jKCkpIENpcmNsZVByb3BzT3AoCiAgICAgICAgICAgICAqKG1TdGF0ZS5jdXJyZW50U25hcHNob3QoKS0+dHJhbnNmb3JtKSwKLSAgICAgICAgICAgIG1TdGF0ZS5nZXRSZW5kZXJUYXJnZXRDbGlwQm91bmRzKCksCisgICAgICAgICAgICBnZXRSZWNvcmRlZENsaXAoKSwKICAgICAgICAgICAgICZwYWludC0+dmFsdWUsCiAgICAgICAgICAgICAmeC0+dmFsdWUsICZ5LT52YWx1ZSwgJnJhZGl1cy0+dmFsdWUpKTsKIH0KQEAgLTM5MCw3ICszOTEsNyBAQAogICAgIGFkZE9wKG5ldyAoYWxsb2MoKSkgT3ZhbE9wKAogICAgICAgICAgICAgUmVjdChsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pLAogICAgICAgICAgICAgKihtU3RhdGUuY3VycmVudFNuYXBzaG90KCktPnRyYW5zZm9ybSksCi0gICAgICAgICAgICBtU3RhdGUuZ2V0UmVuZGVyVGFyZ2V0Q2xpcEJvdW5kcygpLAorICAgICAgICAgICAgZ2V0UmVjb3JkZWRDbGlwKCksCiAgICAgICAgICAgICByZWZQYWludCgmcGFpbnQpKSk7CiB9CiAKQEAgLTM5OSw3ICs0MDAsNyBAQAogICAgIGFkZE9wKG5ldyAoYWxsb2MoKSkgQXJjT3AoCiAgICAgICAgICAgICBSZWN0KGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSksCiAgICAgICAgICAgICAqKG1TdGF0ZS5jdXJyZW50U25hcHNob3QoKS0+dHJhbnNmb3JtKSwKLSAgICAgICAgICAgIG1TdGF0ZS5nZXRSZW5kZXJUYXJnZXRDbGlwQm91bmRzKCksCisgICAgICAgICAgICBnZXRSZWNvcmRlZENsaXAoKSwKICAgICAgICAgICAgIHJlZlBhaW50KCZwYWludCksCiAgICAgICAgICAgICBzdGFydEFuZ2xlLCBzd2VlcEFuZ2xlLCB1c2VDZW50ZXIpKTsKIH0KQEAgLTQwOCw3ICs0MDksNyBAQAogICAgIGFkZE9wKG5ldyAoYWxsb2MoKSkgUGF0aE9wKAogICAgICAgICAgICAgUmVjdChwYXRoLmdldEJvdW5kcygpKSwKICAgICAgICAgICAgICoobVN0YXRlLmN1cnJlbnRTbmFwc2hvdCgpLT50cmFuc2Zvcm0pLAotICAgICAgICAgICAgbVN0YXRlLmdldFJlbmRlclRhcmdldENsaXBCb3VuZHMoKSwKKyAgICAgICAgICAgIGdldFJlY29yZGVkQ2xpcCgpLAogICAgICAgICAgICAgcmVmUGFpbnQoJnBhaW50KSwgcmVmUGF0aCgmcGF0aCkpKTsKIH0KIApAQCAtNDU5LDcgKzQ2MCw3IEBACiAgICAgICAgIGFkZE9wKG5ldyAoYWxsb2MoKSkgQml0bWFwUmVjdE9wKAogICAgICAgICAgICAgICAgIFJlY3QoZHN0TGVmdCwgZHN0VG9wLCBkc3RSaWdodCwgZHN0Qm90dG9tKSwKICAgICAgICAgICAgICAgICAqKG1TdGF0ZS5jdXJyZW50U25hcHNob3QoKS0+dHJhbnNmb3JtKSwKLSAgICAgICAgICAgICAgICBtU3RhdGUuZ2V0UmVuZGVyVGFyZ2V0Q2xpcEJvdW5kcygpLAorICAgICAgICAgICAgICAgIGdldFJlY29yZGVkQ2xpcCgpLAogICAgICAgICAgICAgICAgIHJlZlBhaW50KHBhaW50KSwgcmVmQml0bWFwKGJpdG1hcCksCiAgICAgICAgICAgICAgICAgUmVjdChzcmNMZWZ0LCBzcmNUb3AsIHNyY1JpZ2h0LCBzcmNCb3R0b20pKSk7CiAgICAgfQpAQCAtNDcxLDcgKzQ3Miw3IEBACiAgICAgYWRkT3AobmV3IChhbGxvYygpKSBCaXRtYXBNZXNoT3AoCiAgICAgICAgICAgICBjYWxjQm91bmRzT2ZQb2ludHModmVydGljZXMsIHZlcnRleENvdW50ICogMiksCiAgICAgICAgICAgICAqKG1TdGF0ZS5jdXJyZW50U25hcHNob3QoKS0+dHJhbnNmb3JtKSwKLSAgICAgICAgICAgIG1TdGF0ZS5nZXRSZW5kZXJUYXJnZXRDbGlwQm91bmRzKCksCisgICAgICAgICAgICBnZXRSZWNvcmRlZENsaXAoKSwKICAgICAgICAgICAgIHJlZlBhaW50KHBhaW50KSwgcmVmQml0bWFwKGJpdG1hcCksIG1lc2hXaWR0aCwgbWVzaEhlaWdodCwKICAgICAgICAgICAgIHJlZkJ1ZmZlcjxmbG9hdD4odmVydGljZXMsIHZlcnRleENvdW50ICogMiksIC8vIDIgZmxvYXRzIHBlciB2ZXJ0ZXgKICAgICAgICAgICAgIHJlZkJ1ZmZlcjxpbnQ+KGNvbG9ycywgdmVydGV4Q291bnQpKSk7IC8vIDEgY29sb3IgcGVyIHZlcnRleApAQCAtNDgzLDcgKzQ4NCw3IEBACiAgICAgYWRkT3AobmV3IChhbGxvYygpKSBQYXRjaE9wKAogICAgICAgICAgICAgUmVjdChkc3RMZWZ0LCBkc3RUb3AsIGRzdFJpZ2h0LCBkc3RCb3R0b20pLAogICAgICAgICAgICAgKihtU3RhdGUuY3VycmVudFNuYXBzaG90KCktPnRyYW5zZm9ybSksCi0gICAgICAgICAgICBtU3RhdGUuZ2V0UmVuZGVyVGFyZ2V0Q2xpcEJvdW5kcygpLAorICAgICAgICAgICAgZ2V0UmVjb3JkZWRDbGlwKCksCiAgICAgICAgICAgICByZWZQYWludChwYWludCksIHJlZkJpdG1hcChiaXRtYXApLCByZWZQYXRjaCgmcGF0Y2gpKSk7CiB9CiAKQEAgLTQ5OSw3ICs1MDAsNyBAQAogICAgIGFkZE9wKG5ldyAoYWxsb2MoKSkgVGV4dE9wKAogICAgICAgICAgICAgUmVjdChib3VuZHNMZWZ0LCBib3VuZHNUb3AsIGJvdW5kc1JpZ2h0LCBib3VuZHNCb3R0b20pLAogICAgICAgICAgICAgKihtU3RhdGUuY3VycmVudFNuYXBzaG90KCktPnRyYW5zZm9ybSksCi0gICAgICAgICAgICBtU3RhdGUuZ2V0UmVuZGVyVGFyZ2V0Q2xpcEJvdW5kcygpLAorICAgICAgICAgICAgZ2V0UmVjb3JkZWRDbGlwKCksCiAgICAgICAgICAgICByZWZQYWludCgmcGFpbnQpLCBnbHlwaHMsIHBvc2l0aW9ucywgZ2x5cGhDb3VudCwgeCwgeSkpOwogICAgIGRyYXdUZXh0RGVjb3JhdGlvbnMoeCwgeSwgdG90YWxBZHZhbmNlLCBwYWludCk7CiB9CkBAIC01MDksOSArNTEwLDkgQEAKICAgICBpZiAoIWdseXBocyB8fCBnbHlwaENvdW50IDw9IDAgfHwgUGFpbnRVdGlsczo6cGFpbnRXaWxsTm90RHJhd1RleHQocGFpbnQpKSByZXR1cm47CiAgICAgZ2x5cGhzID0gcmVmQnVmZmVyPGdseXBoX3Q+KGdseXBocywgZ2x5cGhDb3VudCk7CiAgICAgYWRkT3AobmV3IChhbGxvYygpKSBUZXh0T25QYXRoT3AoCi0gICAgICAgICAgICBtU3RhdGUuZ2V0UmVuZGVyVGFyZ2V0Q2xpcEJvdW5kcygpLCAvLyBUT0RPOiBleHBsaWNpdGx5IGRlZmluZSBib3VuZHMKKyAgICAgICAgICAgIG1TdGF0ZS5nZXRMb2NhbENsaXBCb3VuZHMoKSwgLy8gVE9ETzogZXhwbGljaXRseSBkZWZpbmUgYm91bmRzCiAgICAgICAgICAgICAqKG1TdGF0ZS5jdXJyZW50U25hcHNob3QoKS0+dHJhbnNmb3JtKSwKLSAgICAgICAgICAgIG1TdGF0ZS5nZXRSZW5kZXJUYXJnZXRDbGlwQm91bmRzKCksCisgICAgICAgICAgICBnZXRSZWNvcmRlZENsaXAoKSwKICAgICAgICAgICAgIHJlZlBhaW50KCZwYWludCksIGdseXBocywgZ2x5cGhDb3VudCwgcmVmUGF0aCgmcGF0aCksIGhPZmZzZXQsIHZPZmZzZXQpKTsKIH0KIApAQCAtNTE5LDcgKzUyMCw3IEBACiAgICAgYWRkT3AobmV3IChhbGxvYygpKSBCaXRtYXBPcCgKICAgICAgICAgICAgIFJlY3QoYml0bWFwLT53aWR0aCgpLCBiaXRtYXAtPmhlaWdodCgpKSwKICAgICAgICAgICAgICoobVN0YXRlLmN1cnJlbnRTbmFwc2hvdCgpLT50cmFuc2Zvcm0pLAotICAgICAgICAgICAgbVN0YXRlLmdldFJlbmRlclRhcmdldENsaXBCb3VuZHMoKSwKKyAgICAgICAgICAgIGdldFJlY29yZGVkQ2xpcCgpLAogICAgICAgICAgICAgcmVmUGFpbnQocGFpbnQpLCByZWZCaXRtYXAoKmJpdG1hcCkpKTsKIH0KIApAQCAtNTI4LDcgKzUyOSw3IEBACiAgICAgUmVuZGVyTm9kZU9wKiBvcCA9IG5ldyAoYWxsb2MoKSkgUmVuZGVyTm9kZU9wKAogICAgICAgICAgICAgUmVjdChzdGFnaW5nUHJvcHMuZ2V0V2lkdGgoKSwgc3RhZ2luZ1Byb3BzLmdldEhlaWdodCgpKSwKICAgICAgICAgICAgICoobVN0YXRlLmN1cnJlbnRTbmFwc2hvdCgpLT50cmFuc2Zvcm0pLAotICAgICAgICAgICAgbVN0YXRlLmdldFJlbmRlclRhcmdldENsaXBCb3VuZHMoKSwKKyAgICAgICAgICAgIGdldFJlY29yZGVkQ2xpcCgpLAogICAgICAgICAgICAgcmVuZGVyTm9kZSk7CiAgICAgaW50IG9wSW5kZXggPSBhZGRPcChvcCk7CiAgICAgaW50IGNoaWxkSW5kZXggPSBtRGlzcGxheUxpc3QtPmFkZENoaWxkKG9wKTsKQEAgLTU1NCwxNiArNTU1LDE2IEBACiAgICAgYWRkT3AobmV3IChhbGxvYygpKSBUZXh0dXJlTGF5ZXJPcCgKICAgICAgICAgICAgIFJlY3QobGF5ZXItPmdldFdpZHRoKCksIGxheWVyLT5nZXRIZWlnaHQoKSksCiAgICAgICAgICAgICB0b3RhbFRyYW5zZm9ybSwKLSAgICAgICAgICAgIG1TdGF0ZS5nZXRSZW5kZXJUYXJnZXRDbGlwQm91bmRzKCksCisgICAgICAgICAgICBnZXRSZWNvcmRlZENsaXAoKSwKICAgICAgICAgICAgIGxheWVyKSk7CiB9CiAKIHZvaWQgUmVjb3JkaW5nQ2FudmFzOjpjYWxsRHJhd0dMRnVuY3Rpb24oRnVuY3RvciogZnVuY3RvcikgewogICAgIG1EaXNwbGF5TGlzdC0+ZnVuY3RvcnMucHVzaF9iYWNrKGZ1bmN0b3IpOwogICAgIGFkZE9wKG5ldyAoYWxsb2MoKSkgRnVuY3Rvck9wKAotICAgICAgICAgICAgbVN0YXRlLmdldFJlbmRlclRhcmdldENsaXBCb3VuZHMoKSwgLy8gVE9ETzogZXhwbGljaXRseSBkZWZpbmUgYm91bmRzCisgICAgICAgICAgICBtU3RhdGUuZ2V0TG9jYWxDbGlwQm91bmRzKCksIC8vIFRPRE86IGV4cGxpY2l0bHkgZGVmaW5lIGJvdW5kcwogICAgICAgICAgICAgKihtU3RhdGUuY3VycmVudFNuYXBzaG90KCktPnRyYW5zZm9ybSksCi0gICAgICAgICAgICBtU3RhdGUuZ2V0UmVuZGVyVGFyZ2V0Q2xpcEJvdW5kcygpLAorICAgICAgICAgICAgZ2V0UmVjb3JkZWRDbGlwKCksCiAgICAgICAgICAgICBmdW5jdG9yKSk7CiB9CiAKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9SZWNvcmRpbmdDYW52YXMuaCBiL2xpYnMvaHd1aS9SZWNvcmRpbmdDYW52YXMuaAppbmRleCA0OGNjOTFhLi4xYTJhYzk3ZiAxMDA2NDQKLS0tIGEvbGlicy9od3VpL1JlY29yZGluZ0NhbnZhcy5oCisrKyBiL2xpYnMvaHd1aS9SZWNvcmRpbmdDYW52YXMuaApAQCAtMzYsMTAgKzM2LDExIEBACiBuYW1lc3BhY2UgYW5kcm9pZCB7CiBuYW1lc3BhY2UgdWlyZW5kZXJlciB7CiAKK3N0cnVjdCBDbGlwQmFzZTsKIGNsYXNzIERlZmVycmVkTGF5ZXJVcGRhdGVyOwogc3RydWN0IFJlY29yZGVkT3A7CiAKLWNsYXNzIFJlY29yZGluZ0NhbnZhczogcHVibGljIENhbnZhcywgcHVibGljIENhbnZhc1N0YXRlQ2xpZW50IHsKK2NsYXNzIEFORFJPSURfQVBJIFJlY29yZGluZ0NhbnZhczogcHVibGljIENhbnZhcywgcHVibGljIENhbnZhc1N0YXRlQ2xpZW50IHsKICAgICBlbnVtIGNsYXNzIERlZmVycmVkQmFycmllclR5cGUgewogICAgICAgICBOb25lLAogICAgICAgICBJbk9yZGVyLApAQCAtMTk5LDYgKzIwMCw5IEBACiAgICAgdmlydHVhbCBib29sIGRyYXdUZXh0QWJzb2x1dGVQb3MoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogCiBwcml2YXRlOgorICAgIGNvbnN0IENsaXBCYXNlKiBnZXRSZWNvcmRlZENsaXAoKSB7CisgICAgICAgIHJldHVybiBtU3RhdGUud3JpdGFibGVTbmFwc2hvdCgpLT5tdXRhdGVDbGlwQXJlYSgpLnNlcmlhbGl6ZUNsaXAoYWxsb2MoKSk7CisgICAgfQogCiAgICAgdm9pZCBkcmF3Qml0bWFwKGNvbnN0IFNrQml0bWFwKiBiaXRtYXAsIGNvbnN0IFNrUGFpbnQqIHBhaW50KTsKICAgICB2b2lkIGRyYXdTaW1wbGVSZWN0cyhjb25zdCBmbG9hdCogcmVjdHMsIGludCB2ZXJ0ZXhDb3VudCwgY29uc3QgU2tQYWludCogcGFpbnQpOwpkaWZmIC0tZ2l0IGEvbGlicy9od3VpL1NuYXBzaG90LmNwcCBiL2xpYnMvaHd1aS9TbmFwc2hvdC5jcHAKaW5kZXggMmY1MzViYi4uYzZkODk3NyAxMDA2NDQKLS0tIGEvbGlicy9od3VpL1NuYXBzaG90LmNwcAorKysgYi9saWJzL2h3dWkvU25hcHNob3QuY3BwCkBAIC04OCw5ICs4OCw5IEBACiAgICAgbUNsaXBBcmVhLT5jbGlwUmVnaW9uKHJlZ2lvbiwgb3ApOwogfQogCi12b2lkIFNuYXBzaG90OjpjbGlwKGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwgU2tSZWdpb246Ok9wIG9wKSB7Cit2b2lkIFNuYXBzaG90OjpjbGlwKGNvbnN0IFJlY3QmIGxvY2FsQ2xpcCwgU2tSZWdpb246Ok9wIG9wKSB7CiAgICAgZmxhZ3MgfD0gU25hcHNob3Q6OmtGbGFnQ2xpcFNldDsKLSAgICBtQ2xpcEFyZWEtPmNsaXBSZWN0V2l0aFRyYW5zZm9ybShsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sIHRyYW5zZm9ybSwgb3ApOworICAgIG1DbGlwQXJlYS0+Y2xpcFJlY3RXaXRoVHJhbnNmb3JtKGxvY2FsQ2xpcCwgdHJhbnNmb3JtLCBvcCk7CiB9CiAKIHZvaWQgU25hcHNob3Q6OmNsaXBQYXRoKGNvbnN0IFNrUGF0aCYgcGF0aCwgU2tSZWdpb246Ok9wIG9wKSB7CmRpZmYgLS1naXQgYS9saWJzL2h3dWkvU25hcHNob3QuaCBiL2xpYnMvaHd1aS9TbmFwc2hvdC5oCmluZGV4IDQ3ODliMzMuLjVmYWMzYTEgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9TbmFwc2hvdC5oCisrKyBiL2xpYnMvaHd1aS9TbmFwc2hvdC5oCkBAIC0xMjQsNyArMTI0LDcgQEAKICAgICAgKiB0aGUgc3BlY2lmaWVkIG9wZXJhdGlvbi4gVGhlIHNwZWNpZmllZCByZWN0YW5nbGUgaXMgdHJhbnNmb3JtZWQKICAgICAgKiBieSB0aGlzIHNuYXBzaG90J3MgdHJhc25mb3JtYXRpb24uCiAgICAgICovCi0gICAgdm9pZCBjbGlwKGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwgU2tSZWdpb246Ok9wIG9wKTsKKyAgICB2b2lkIGNsaXAoY29uc3QgUmVjdCYgbG9jYWxDbGlwLCBTa1JlZ2lvbjo6T3Agb3ApOwogCiAgICAgLyoqCiAgICAgICogTW9kaWZpZXMgdGhlIGN1cnJlbnQgY2xpcCB3aXRoIHRoZSBuZXcgY2xpcCByZWN0YW5nbGUgYW5kCkBAIC0xNjcsNiArMTY3LDcgQEAKICAgICBjb25zdCBTa1JlZ2lvbiYgZ2V0Q2xpcFJlZ2lvbigpIGNvbnN0IHsgcmV0dXJuIG1DbGlwQXJlYS0+Z2V0Q2xpcFJlZ2lvbigpOyB9CiAgICAgYm9vbCBjbGlwSXNTaW1wbGUoKSBjb25zdCB7IHJldHVybiBtQ2xpcEFyZWEtPmlzU2ltcGxlKCk7IH0KICAgICBjb25zdCBDbGlwQXJlYSYgZ2V0Q2xpcEFyZWEoKSBjb25zdCB7IHJldHVybiAqbUNsaXBBcmVhOyB9CisgICAgQ2xpcEFyZWEmIG11dGF0ZUNsaXBBcmVhKCkgeyByZXR1cm4gKm1DbGlwQXJlYTsgfQogCiAgICAgLyoqCiAgICAgICogUmVzZXRzIHRoZSBjbGlwIHRvIHRoZSBzcGVjaWZpZWQgcmVjdC4KZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9WZWN0b3JEcmF3YWJsZS5jcHAgYi9saWJzL2h3dWkvVmVjdG9yRHJhd2FibGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2Y2IxMDQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2h3dWkvVmVjdG9yRHJhd2FibGUuY3BwCkBAIC0wLDAgKzEsNDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgIlZlY3RvckRyYXdhYmxlLmgiCisKKyNpbmNsdWRlICJQYXRoUGFyc2VyLmgiCisjaW5jbHVkZSAiU2tJbWFnZUluZm8uaCIKKyNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KKyNpbmNsdWRlICJ1dGlscy9NYWNyb3MuaCIKKyNpbmNsdWRlICJ1dGlscy9WZWN0b3JEcmF3YWJsZVV0aWxzLmgiCisKKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKK25hbWVzcGFjZSB1aXJlbmRlcmVyIHsKK25hbWVzcGFjZSBWZWN0b3JEcmF3YWJsZSB7CisKK2NvbnN0IGludCBUcmVlOjpNQVhfQ0FDSEVEX0JJVE1BUF9TSVpFID0gMjA0ODsKKwordm9pZCBQYXRoOjpkcmF3KENhbnZhcyogb3V0Q2FudmFzLCBjb25zdCBTa01hdHJpeCYgZ3JvdXBTdGFja2VkTWF0cml4LCBmbG9hdCBzY2FsZVgsIGZsb2F0IHNjYWxlWSkgeworICAgIGZsb2F0IG1hdHJpeFNjYWxlID0gZ2V0TWF0cml4U2NhbGUoZ3JvdXBTdGFja2VkTWF0cml4KTsKKyAgICBpZiAobWF0cml4U2NhbGUgPT0gMCkgeworICAgICAgICAvLyBXaGVuIGVpdGhlciB4IG9yIHkgaXMgc2NhbGVkIHRvIDAsIHdlIGRvbid0IG5lZWQgdG8gZHJhdyBhbnl0aGluZy4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IFNrUGF0aCB1cGRhdGVkUGF0aCA9IGdldFVwZGF0ZWRQYXRoKCk7CisgICAgU2tNYXRyaXggcGF0aE1hdHJpeChncm91cFN0YWNrZWRNYXRyaXgpOworICAgIHBhdGhNYXRyaXgucG9zdFNjYWxlKHNjYWxlWCwgc2NhbGVZKTsKKworICAgIC8vVE9ETzogdHJ5IGFwcGx5IHRoZSBwYXRoIG1hdHJpeCB0byB0aGUgY2FudmFzIGluc3RlYWQgb2YgY3JlYXRpbmcgYSBuZXcgcGF0aC4KKyAgICBTa1BhdGggcmVuZGVyUGF0aDsKKyAgICByZW5kZXJQYXRoLnJlc2V0KCk7CisgICAgcmVuZGVyUGF0aC5hZGRQYXRoKHVwZGF0ZWRQYXRoLCBwYXRoTWF0cml4KTsKKworICAgIGZsb2F0IG1pblNjYWxlID0gZm1pbihzY2FsZVgsIHNjYWxlWSk7CisgICAgZmxvYXQgc3Ryb2tlU2NhbGUgPSBtaW5TY2FsZSAqIG1hdHJpeFNjYWxlOworICAgIGRyYXdQYXRoKG91dENhbnZhcywgcmVuZGVyUGF0aCwgc3Ryb2tlU2NhbGUpOworfQorCit2b2lkIFBhdGg6OnNldFBhdGhEYXRhKGNvbnN0IERhdGEmIGRhdGEpIHsKKyAgICBpZiAobURhdGEgPT0gZGF0YSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8vIFVwZGF0ZXMgdGhlIHBhdGggZGF0YS4gTm90ZSB0aGF0IHdlIGRvbid0IGdlbmVyYXRlIGEgbmV3IFNraWEgcGF0aCByaWdodCBhd2F5CisgICAgLy8gYmVjYXVzZSB0aGVyZSBhcmUgY2FzZXMgd2hlcmUgdGhlIGFuaW1hdGlvbiBpcyBjaGFuZ2luZyB0aGUgcGF0aCBkYXRhLCBidXQgdGhlIHZpZXcKKyAgICAvLyB0aGF0IGhvc3RzIHRoZSBWRCBoYXMgZ29uZSBvZmYgc2NyZWVuLCBpbiB3aGljaCBjYXNlIHdlIHdvbid0IGV2ZW4gZHJhdy4gU28gd2UKKyAgICAvLyBwb3N0cG9uZSB0aGUgU2tpYSBwYXRoIGdlbmVyYXRpb24gdG8gdGhlIGRyYXcgdGltZS4KKyAgICBtRGF0YSA9IGRhdGE7CisgICAgbVNrUGF0aERpcnR5ID0gdHJ1ZTsKK30KKwordm9pZCBQYXRoOjpkdW1wKCkgeworICAgIEFMT0dEKCJQYXRoOiAlcyBoYXMgJXp1IHBvaW50cyIsIG1OYW1lLmNfc3RyKCksIG1EYXRhLnBvaW50cy5zaXplKCkpOworfQorCitmbG9hdCBQYXRoOjpnZXRNYXRyaXhTY2FsZShjb25zdCBTa01hdHJpeCYgZ3JvdXBTdGFja2VkTWF0cml4KSB7CisgICAgLy8gR2l2ZW4gdW5pdCB2ZWN0b3JzIEEgPSAoMCwgMSkgYW5kIEIgPSAoMSwgMCkuCisgICAgLy8gQWZ0ZXIgbWF0cml4IG1hcHBpbmcsIHdlIGdvdCBBJyBhbmQgQicuIExldCB0aGV0YSA9IHRoZSBhbmdlbCBiL3QgQScgYW5kIEInLgorICAgIC8vIFRoZXJlZm9yZSwgdGhlIGZpbmFsIHNjYWxlIHdlIHdhbnQgaXMgbWluKHxBJ3wgKiBzaW4odGhldGEpLCB8Qid8ICogc2luKHRoZXRhKSksCisgICAgLy8gd2hpY2ggaXMgKHxBJ3wgKiB8Qid8ICogc2luKHRoZXRhKSkgLyBtYXggKHxBJ3wsIHxCJ3wpOworICAgIC8vIElmICBtYXggKHxBJ3wsIHxCJ3wpID0gMCwgdGhhdCBtZWFucyBlaXRoZXIgeCBvciB5IGhhcyBhIHNjYWxlIG9mIDAuCisgICAgLy8KKyAgICAvLyBGb3Igbm9uLXNrZXcgY2FzZSwgd2hpY2ggaXMgbW9zdCBvZiB0aGUgY2FzZXMsIG1hdHJpeCBzY2FsZSBpcyBjb21wdXRpbmcgZXhhY3RseSB0aGUKKyAgICAvLyBzY2FsZSBvbiB4IGFuZCB5IGF4aXMsIGFuZCB0YWtlIHRoZSBtaW5pbWFsIG9mIHRoZXNlIHR3by4KKyAgICAvLyBGb3Igc2tldyBjYXNlLCBhbiB1bml0IHNxdWFyZSB3aWxsIG1hcHBlZCB0byBhIHBhcmFsbGVsb2dyYW0uIEFuZCB0aGlzIGZ1bmN0aW9uIHdpbGwKKyAgICAvLyByZXR1cm4gdGhlIG1pbmltYWwgaGVpZ2h0IG9mIHRoZSAyIGJhc2VzLgorICAgIFNrVmVjdG9yIHNrVmVjdG9yc1syXTsKKyAgICBza1ZlY3RvcnNbMF0uc2V0KDAsIDEpOworICAgIHNrVmVjdG9yc1sxXS5zZXQoMSwgMCk7CisgICAgZ3JvdXBTdGFja2VkTWF0cml4Lm1hcFZlY3RvcnMoc2tWZWN0b3JzLCAyKTsKKyAgICBmbG9hdCBzY2FsZVggPSBoeXBvdGYoc2tWZWN0b3JzWzBdLmZYLCBza1ZlY3RvcnNbMF0uZlkpOworICAgIGZsb2F0IHNjYWxlWSA9IGh5cG90Zihza1ZlY3RvcnNbMV0uZlgsIHNrVmVjdG9yc1sxXS5mWSk7CisgICAgZmxvYXQgY3Jvc3NQcm9kdWN0ID0gc2tWZWN0b3JzWzBdLmNyb3NzKHNrVmVjdG9yc1sxXSk7CisgICAgZmxvYXQgbWF4U2NhbGUgPSBmbWF4KHNjYWxlWCwgc2NhbGVZKTsKKworICAgIGZsb2F0IG1hdHJpeFNjYWxlID0gMDsKKyAgICBpZiAobWF4U2NhbGUgPiAwKSB7CisgICAgICAgIG1hdHJpeFNjYWxlID0gZmFicyhjcm9zc1Byb2R1Y3QpIC8gbWF4U2NhbGU7CisgICAgfQorICAgIHJldHVybiBtYXRyaXhTY2FsZTsKK30KK1BhdGg6OlBhdGgoY29uc3QgY2hhciogcGF0aFN0ciwgc2l6ZV90IHN0ckxlbmd0aCkgeworICAgIFBhdGhQYXJzZXI6OlBhcnNlUmVzdWx0IHJlc3VsdDsKKyAgICBQYXRoUGFyc2VyOjpnZXRQYXRoRGF0YUZyb21TdHJpbmcoJm1EYXRhLCAmcmVzdWx0LCBwYXRoU3RyLCBzdHJMZW5ndGgpOworICAgIGlmICghcmVzdWx0LmZhaWx1cmVPY2N1cnJlZCkgeworICAgICAgICBWZWN0b3JEcmF3YWJsZVV0aWxzOjp2ZXJic1RvUGF0aCgmbVNrUGF0aCwgbURhdGEpOworICAgIH0KK30KKworUGF0aDo6UGF0aChjb25zdCBEYXRhJiBkYXRhKSB7CisgICAgbURhdGEgPSBkYXRhOworICAgIC8vIE5vdyB3ZSBuZWVkIHRvIGNvbnN0cnVjdCBhIHBhdGgKKyAgICBWZWN0b3JEcmF3YWJsZVV0aWxzOjp2ZXJic1RvUGF0aCgmbVNrUGF0aCwgZGF0YSk7Cit9CisKK1BhdGg6OlBhdGgoY29uc3QgUGF0aCYgcGF0aCkgOiBOb2RlKHBhdGgpIHsKKyAgICBtRGF0YSA9IHBhdGgubURhdGE7CisgICAgVmVjdG9yRHJhd2FibGVVdGlsczo6dmVyYnNUb1BhdGgoJm1Ta1BhdGgsIG1EYXRhKTsKK30KKworYm9vbCBQYXRoOjpjYW5Nb3JwaChjb25zdCBEYXRhJiBtb3JwaFRvKSB7CisgICAgcmV0dXJuIFZlY3RvckRyYXdhYmxlVXRpbHM6OmNhbk1vcnBoKG1EYXRhLCBtb3JwaFRvKTsKK30KKworYm9vbCBQYXRoOjpjYW5Nb3JwaChjb25zdCBQYXRoJiBwYXRoKSB7CisgICAgcmV0dXJuIGNhbk1vcnBoKHBhdGgubURhdGEpOworfQorCitjb25zdCBTa1BhdGgmIFBhdGg6OmdldFVwZGF0ZWRQYXRoKCkgeworICAgIGlmIChtU2tQYXRoRGlydHkpIHsKKyAgICAgICAgbVNrUGF0aC5yZXNldCgpOworICAgICAgICBWZWN0b3JEcmF3YWJsZVV0aWxzOjp2ZXJic1RvUGF0aCgmbVNrUGF0aCwgbURhdGEpOworICAgICAgICBtU2tQYXRoRGlydHkgPSBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIG1Ta1BhdGg7Cit9CisKK3ZvaWQgUGF0aDo6c2V0UGF0aChjb25zdCBjaGFyKiBwYXRoU3RyLCBzaXplX3Qgc3RyTGVuZ3RoKSB7CisgICAgUGF0aFBhcnNlcjo6UGFyc2VSZXN1bHQgcmVzdWx0OworICAgIG1Ta1BhdGhEaXJ0eSA9IHRydWU7CisgICAgUGF0aFBhcnNlcjo6Z2V0UGF0aERhdGFGcm9tU3RyaW5nKCZtRGF0YSwgJnJlc3VsdCwgcGF0aFN0ciwgc3RyTGVuZ3RoKTsKK30KKworRnVsbFBhdGg6OkZ1bGxQYXRoKGNvbnN0IEZ1bGxQYXRoJiBwYXRoKSA6IFBhdGgocGF0aCkgeworICAgIG1TdHJva2VXaWR0aCA9IHBhdGgubVN0cm9rZVdpZHRoOworICAgIG1TdHJva2VDb2xvciA9IHBhdGgubVN0cm9rZUNvbG9yOworICAgIG1TdHJva2VBbHBoYSA9IHBhdGgubVN0cm9rZUFscGhhOworICAgIG1GaWxsQ29sb3IgPSBwYXRoLm1GaWxsQ29sb3I7CisgICAgbUZpbGxBbHBoYSA9IHBhdGgubUZpbGxBbHBoYTsKKyAgICBtVHJpbVBhdGhTdGFydCA9IHBhdGgubVRyaW1QYXRoU3RhcnQ7CisgICAgbVRyaW1QYXRoRW5kID0gcGF0aC5tVHJpbVBhdGhFbmQ7CisgICAgbVRyaW1QYXRoT2Zmc2V0ID0gcGF0aC5tVHJpbVBhdGhPZmZzZXQ7CisgICAgbVN0cm9rZU1pdGVyTGltaXQgPSBwYXRoLm1TdHJva2VNaXRlckxpbWl0OworICAgIG1TdHJva2VMaW5lQ2FwID0gcGF0aC5tU3Ryb2tlTGluZUNhcDsKKyAgICBtU3Ryb2tlTGluZUpvaW4gPSBwYXRoLm1TdHJva2VMaW5lSm9pbjsKK30KKworY29uc3QgU2tQYXRoJiBGdWxsUGF0aDo6Z2V0VXBkYXRlZFBhdGgoKSB7CisgICAgaWYgKCFtU2tQYXRoRGlydHkgJiYgIW1UcmltRGlydHkpIHsKKyAgICAgICAgcmV0dXJuIG1UcmltbWVkU2tQYXRoOworICAgIH0KKyAgICBQYXRoOjpnZXRVcGRhdGVkUGF0aCgpOworICAgIGlmIChtVHJpbVBhdGhTdGFydCAhPSAwLjBmIHx8IG1UcmltUGF0aEVuZCAhPSAxLjBmKSB7CisgICAgICAgIGFwcGx5VHJpbSgpOworICAgICAgICByZXR1cm4gbVRyaW1tZWRTa1BhdGg7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIG1Ta1BhdGg7CisgICAgfQorfQorCit2b2lkIEZ1bGxQYXRoOjp1cGRhdGVQcm9wZXJ0aWVzKGZsb2F0IHN0cm9rZVdpZHRoLCBTa0NvbG9yIHN0cm9rZUNvbG9yLCBmbG9hdCBzdHJva2VBbHBoYSwKKyAgICAgICAgU2tDb2xvciBmaWxsQ29sb3IsIGZsb2F0IGZpbGxBbHBoYSwgZmxvYXQgdHJpbVBhdGhTdGFydCwgZmxvYXQgdHJpbVBhdGhFbmQsCisgICAgICAgIGZsb2F0IHRyaW1QYXRoT2Zmc2V0LCBmbG9hdCBzdHJva2VNaXRlckxpbWl0LCBpbnQgc3Ryb2tlTGluZUNhcCwgaW50IHN0cm9rZUxpbmVKb2luKSB7CisgICAgbVN0cm9rZVdpZHRoID0gc3Ryb2tlV2lkdGg7CisgICAgbVN0cm9rZUNvbG9yID0gc3Ryb2tlQ29sb3I7CisgICAgbVN0cm9rZUFscGhhID0gc3Ryb2tlQWxwaGE7CisgICAgbUZpbGxDb2xvciA9IGZpbGxDb2xvcjsKKyAgICBtRmlsbEFscGhhID0gZmlsbEFscGhhOworICAgIG1TdHJva2VNaXRlckxpbWl0ID0gc3Ryb2tlTWl0ZXJMaW1pdDsKKyAgICBtU3Ryb2tlTGluZUNhcCA9IFNrUGFpbnQ6OkNhcChzdHJva2VMaW5lQ2FwKTsKKyAgICBtU3Ryb2tlTGluZUpvaW4gPSBTa1BhaW50OjpKb2luKHN0cm9rZUxpbmVKb2luKTsKKworICAgIC8vIElmIGFueSB0cmltIHByb3BlcnR5IGNoYW5nZXMsIG1hcmsgdHJpbSBkaXJ0eSBhbmQgdXBkYXRlIHRoZSB0cmltIHBhdGgKKyAgICBzZXRUcmltUGF0aFN0YXJ0KHRyaW1QYXRoU3RhcnQpOworICAgIHNldFRyaW1QYXRoRW5kKHRyaW1QYXRoRW5kKTsKKyAgICBzZXRUcmltUGF0aE9mZnNldCh0cmltUGF0aE9mZnNldCk7Cit9CisKK2lubGluZSBTa0NvbG9yIGFwcGx5QWxwaGEoU2tDb2xvciBjb2xvciwgZmxvYXQgYWxwaGEpIHsKKyAgICBpbnQgYWxwaGFCeXRlcyA9IFNrQ29sb3JHZXRBKGNvbG9yKTsKKyAgICByZXR1cm4gU2tDb2xvclNldEEoY29sb3IsIGFscGhhQnl0ZXMgKiBhbHBoYSk7Cit9CisKK3ZvaWQgRnVsbFBhdGg6OmRyYXdQYXRoKENhbnZhcyogb3V0Q2FudmFzLCBjb25zdCBTa1BhdGgmIHJlbmRlclBhdGgsIGZsb2F0IHN0cm9rZVNjYWxlKXsKKyAgICAvLyBEcmF3IHBhdGgncyBmaWxsLCBpZiBmaWxsIGNvbG9yIGlzbid0IHRyYW5zcGFyZW50LgorICAgIGlmIChtRmlsbENvbG9yICE9IFNLX0NvbG9yVFJBTlNQQVJFTlQpIHsKKyAgICAgICAgbVBhaW50LnNldFN0eWxlKFNrUGFpbnQ6OlN0eWxlOjprRmlsbF9TdHlsZSk7CisgICAgICAgIG1QYWludC5zZXRBbnRpQWxpYXModHJ1ZSk7CisgICAgICAgIG1QYWludC5zZXRDb2xvcihhcHBseUFscGhhKG1GaWxsQ29sb3IsIG1GaWxsQWxwaGEpKTsKKyAgICAgICAgb3V0Q2FudmFzLT5kcmF3UGF0aChyZW5kZXJQYXRoLCBtUGFpbnQpOworICAgIH0KKyAgICAvLyBEcmF3IHBhdGgncyBzdHJva2UsIGlmIHN0cm9rZSBjb2xvciBpc24ndCB0cmFuc3BhcmVudAorICAgIGlmIChtU3Ryb2tlQ29sb3IgIT0gU0tfQ29sb3JUUkFOU1BBUkVOVCkgeworICAgICAgICBtUGFpbnQuc2V0U3R5bGUoU2tQYWludDo6U3R5bGU6OmtTdHJva2VfU3R5bGUpOworICAgICAgICBtUGFpbnQuc2V0QW50aUFsaWFzKHRydWUpOworICAgICAgICBtUGFpbnQuc2V0U3Ryb2tlSm9pbihtU3Ryb2tlTGluZUpvaW4pOworICAgICAgICBtUGFpbnQuc2V0U3Ryb2tlQ2FwKG1TdHJva2VMaW5lQ2FwKTsKKyAgICAgICAgbVBhaW50LnNldFN0cm9rZU1pdGVyKG1TdHJva2VNaXRlckxpbWl0KTsKKyAgICAgICAgbVBhaW50LnNldENvbG9yKGFwcGx5QWxwaGEobVN0cm9rZUNvbG9yLCBtU3Ryb2tlQWxwaGEpKTsKKyAgICAgICAgbVBhaW50LnNldFN0cm9rZVdpZHRoKG1TdHJva2VXaWR0aCAqIHN0cm9rZVNjYWxlKTsKKyAgICAgICAgb3V0Q2FudmFzLT5kcmF3UGF0aChyZW5kZXJQYXRoLCBtUGFpbnQpOworICAgIH0KK30KKworLyoqCisgKiBBcHBsaWVzIHRyaW1taW5nIHRvIHRoZSBzcGVjaWZpZWQgcGF0aC4KKyAqLwordm9pZCBGdWxsUGF0aDo6YXBwbHlUcmltKCkgeworICAgIGlmIChtVHJpbVBhdGhTdGFydCA9PSAwLjBmICYmIG1UcmltUGF0aEVuZCA9PSAxLjBmKSB7CisgICAgICAgIC8vIE5vIHRyaW1taW5nIG5lY2Vzc2FyeS4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBTa1BhdGhNZWFzdXJlIG1lYXN1cmUobVNrUGF0aCwgZmFsc2UpOworICAgIGZsb2F0IGxlbiA9IFNrU2NhbGFyVG9GbG9hdChtZWFzdXJlLmdldExlbmd0aCgpKTsKKyAgICBmbG9hdCBzdGFydCA9IGxlbiAqIGZtb2QoKG1UcmltUGF0aFN0YXJ0ICsgbVRyaW1QYXRoT2Zmc2V0KSwgMS4wZik7CisgICAgZmxvYXQgZW5kID0gbGVuICogZm1vZCgobVRyaW1QYXRoRW5kICsgbVRyaW1QYXRoT2Zmc2V0KSwgMS4wZik7CisKKyAgICBtVHJpbW1lZFNrUGF0aC5yZXNldCgpOworICAgIGlmIChzdGFydCA+IGVuZCkgeworICAgICAgICBtZWFzdXJlLmdldFNlZ21lbnQoc3RhcnQsIGxlbiwgJm1UcmltbWVkU2tQYXRoLCB0cnVlKTsKKyAgICAgICAgbWVhc3VyZS5nZXRTZWdtZW50KDAsIGVuZCwgJm1UcmltbWVkU2tQYXRoLCB0cnVlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtZWFzdXJlLmdldFNlZ21lbnQoc3RhcnQsIGVuZCwgJm1UcmltbWVkU2tQYXRoLCB0cnVlKTsKKyAgICB9CisgICAgbVRyaW1EaXJ0eSA9IGZhbHNlOworfQorCitpbmxpbmUgaW50IHB1dERhdGEoaW50OF90KiBvdXRCeXRlcywgaW50IHN0YXJ0SW5kZXgsIGZsb2F0IHZhbHVlKSB7CisgICAgaW50IHNpemUgPSBzaXplb2YoZmxvYXQpOworICAgIG1lbWNweSgmb3V0Qnl0ZXNbc3RhcnRJbmRleF0sICZ2YWx1ZSwgc2l6ZSk7CisgICAgcmV0dXJuIHNpemU7Cit9CisKK2lubGluZSBpbnQgcHV0RGF0YShpbnQ4X3QqIG91dEJ5dGVzLCBpbnQgc3RhcnRJbmRleCwgaW50IHZhbHVlKSB7CisgICAgaW50IHNpemUgPSBzaXplb2YoaW50KTsKKyAgICBtZW1jcHkoJm91dEJ5dGVzW3N0YXJ0SW5kZXhdLCAmdmFsdWUsIHNpemUpOworICAgIHJldHVybiBzaXplOworfQorCitzdHJ1Y3QgRnVsbFBhdGhQcm9wZXJ0aWVzIHsKKyAgICAvLyBUT0RPOiBDb25zaWRlciBzdG9yaW5nIGZ1bGwgcGF0aCBwcm9wZXJ0aWVzIGluIHRoaXMgc3RydWN0IGluc3RlYWQgb2YgdGhlIGZpZWxkcy4KKyAgICBmbG9hdCBzdHJva2VXaWR0aDsKKyAgICBTa0NvbG9yIHN0cm9rZUNvbG9yOworICAgIGZsb2F0IHN0cm9rZUFscGhhOworICAgIFNrQ29sb3IgZmlsbENvbG9yOworICAgIGZsb2F0IGZpbGxBbHBoYTsKKyAgICBmbG9hdCB0cmltUGF0aFN0YXJ0OworICAgIGZsb2F0IHRyaW1QYXRoRW5kOworICAgIGZsb2F0IHRyaW1QYXRoT2Zmc2V0OworICAgIGludDMyX3Qgc3Ryb2tlTGluZUNhcDsKKyAgICBpbnQzMl90IHN0cm9rZUxpbmVKb2luOworICAgIGZsb2F0IHN0cm9rZU1pdGVyTGltaXQ7Cit9OworCitSRVFVSVJFX0NPTVBBVElCTEVfTEFZT1VUKEZ1bGxQYXRoUHJvcGVydGllcyk7CisKK3N0YXRpY19hc3NlcnQoc2l6ZW9mKGZsb2F0KSA9PSBzaXplb2YoaW50MzJfdCksICJmbG9hdCBpcyBub3QgdGhlIHNhbWUgc2l6ZSBhcyBpbnQzMl90Iik7CitzdGF0aWNfYXNzZXJ0KHNpemVvZihTa0NvbG9yKSA9PSBzaXplb2YoaW50MzJfdCksICJTa0NvbG9yIGlzIG5vdCB0aGUgc2FtZSBzaXplIGFzIGludDMyX3QiKTsKKworYm9vbCBGdWxsUGF0aDo6Z2V0UHJvcGVydGllcyhpbnQ4X3QqIG91dFByb3BlcnRpZXMsIGludCBsZW5ndGgpIHsKKyAgICBpbnQgcHJvcGVydHlEYXRhU2l6ZSA9IHNpemVvZihGdWxsUGF0aFByb3BlcnRpZXMpOworICAgIGlmIChsZW5ndGggIT0gcHJvcGVydHlEYXRhU2l6ZSkgeworICAgICAgICBMT0dfQUxXQVlTX0ZBVEFMKCJQcm9wZXJ0aWVzIG5lZWRzIGV4YWN0bHkgJWQgYnl0ZXMsIGEgYnl0ZSBhcnJheSBvZiBzaXplICVkIGlzIHByb3ZpZGVkIiwKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eURhdGFTaXplLCBsZW5ndGgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIC8vIFRPRE86IGNvbnNpZGVyIHJlcGxhY2luZyB0aGUgcHJvcGVydHkgZmllbGRzIHdpdGggYSBGdWxsUGF0aFByb3BlcnRpZXMgc3RydWN0LgorICAgIEZ1bGxQYXRoUHJvcGVydGllcyBwcm9wZXJ0aWVzOworICAgIHByb3BlcnRpZXMuc3Ryb2tlV2lkdGggPSBtU3Ryb2tlV2lkdGg7CisgICAgcHJvcGVydGllcy5zdHJva2VDb2xvciA9IG1TdHJva2VDb2xvcjsKKyAgICBwcm9wZXJ0aWVzLnN0cm9rZUFscGhhID0gbVN0cm9rZUFscGhhOworICAgIHByb3BlcnRpZXMuZmlsbENvbG9yID0gbUZpbGxDb2xvcjsKKyAgICBwcm9wZXJ0aWVzLmZpbGxBbHBoYSA9IG1GaWxsQWxwaGE7CisgICAgcHJvcGVydGllcy50cmltUGF0aFN0YXJ0ID0gbVRyaW1QYXRoU3RhcnQ7CisgICAgcHJvcGVydGllcy50cmltUGF0aEVuZCA9IG1UcmltUGF0aEVuZDsKKyAgICBwcm9wZXJ0aWVzLnRyaW1QYXRoT2Zmc2V0ID0gbVRyaW1QYXRoT2Zmc2V0OworICAgIHByb3BlcnRpZXMuc3Ryb2tlTGluZUNhcCA9IG1TdHJva2VMaW5lQ2FwOworICAgIHByb3BlcnRpZXMuc3Ryb2tlTGluZUpvaW4gPSBtU3Ryb2tlTGluZUpvaW47CisgICAgcHJvcGVydGllcy5zdHJva2VNaXRlckxpbWl0ID0gbVN0cm9rZU1pdGVyTGltaXQ7CisKKyAgICBtZW1jcHkob3V0UHJvcGVydGllcywgJnByb3BlcnRpZXMsIGxlbmd0aCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQ2xpcFBhdGg6OmRyYXdQYXRoKENhbnZhcyogb3V0Q2FudmFzLCBjb25zdCBTa1BhdGgmIHJlbmRlclBhdGgsCisgICAgICAgIGZsb2F0IHN0cm9rZVNjYWxlKXsKKyAgICBvdXRDYW52YXMtPmNsaXBQYXRoKCZyZW5kZXJQYXRoLCBTa1JlZ2lvbjo6a0ludGVyc2VjdF9PcCk7Cit9CisKK0dyb3VwOjpHcm91cChjb25zdCBHcm91cCYgZ3JvdXApIDogTm9kZShncm91cCkgeworICAgIG1Sb3RhdGUgPSBncm91cC5tUm90YXRlOworICAgIG1QaXZvdFggPSBncm91cC5tUGl2b3RYOworICAgIG1QaXZvdFkgPSBncm91cC5tUGl2b3RZOworICAgIG1TY2FsZVggPSBncm91cC5tU2NhbGVYOworICAgIG1TY2FsZVkgPSBncm91cC5tU2NhbGVZOworICAgIG1UcmFuc2xhdGVYID0gZ3JvdXAubVRyYW5zbGF0ZVg7CisgICAgbVRyYW5zbGF0ZVkgPSBncm91cC5tVHJhbnNsYXRlWTsKK30KKwordm9pZCBHcm91cDo6ZHJhdyhDYW52YXMqIG91dENhbnZhcywgY29uc3QgU2tNYXRyaXgmIGN1cnJlbnRNYXRyaXgsIGZsb2F0IHNjYWxlWCwKKyAgICAgICAgZmxvYXQgc2NhbGVZKSB7CisgICAgLy8gVE9ETzogVHJ5IGFwcGx5IHRoZSBtYXRyaXggdG8gdGhlIGNhbnZhcyBpbnN0ZWFkIG9mIHBhc3NpbmcgaXQgZG93biB0aGUgdHJlZQorCisgICAgLy8gQ2FsY3VsYXRlIGN1cnJlbnQgZ3JvdXAncyBtYXRyaXggYnkgcHJlQ29uY2F0IHRoZSBwYXJlbnQncyBhbmQKKyAgICAvLyBhbmQgdGhlIGN1cnJlbnQgb25lIG9uIHRoZSB0b3Agb2YgdGhlIHN0YWNrLgorICAgIC8vIEJhc2ljYWxseSB0aGUgTWZpbmFsID0gTXZpZXdwb3J0ICogTTAgKiBNMSAqIE0yOworICAgIC8vIE1pIHRoZSBsb2NhbCBtYXRyaXggYXQgbGV2ZWwgaSBvZiB0aGUgZ3JvdXAgdHJlZS4KKyAgICBTa01hdHJpeCBzdGFja2VkTWF0cml4OworICAgIGdldExvY2FsTWF0cml4KCZzdGFja2VkTWF0cml4KTsKKyAgICBzdGFja2VkTWF0cml4LnBvc3RDb25jYXQoY3VycmVudE1hdHJpeCk7CisKKyAgICAvLyBTYXZlIHRoZSBjdXJyZW50IGNsaXAgaW5mb3JtYXRpb24sIHdoaWNoIGlzIGxvY2FsIHRvIHRoaXMgZ3JvdXAuCisgICAgb3V0Q2FudmFzLT5zYXZlKFNrQ2FudmFzOjprTWF0cml4Q2xpcF9TYXZlRmxhZyk7CisgICAgLy8gRHJhdyB0aGUgZ3JvdXAgdHJlZSBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUgWE1MIGZpbGUuCisgICAgZm9yIChOb2RlKiBjaGlsZCA6IG1DaGlsZHJlbikgeworICAgICAgICBjaGlsZC0+ZHJhdyhvdXRDYW52YXMsIHN0YWNrZWRNYXRyaXgsIHNjYWxlWCwgc2NhbGVZKTsKKyAgICB9CisgICAgLy8gUmVzdG9yZSB0aGUgcHJldmlvdXMgY2xpcCBpbmZvcm1hdGlvbi4KKyAgICBvdXRDYW52YXMtPnJlc3RvcmUoKTsKK30KKwordm9pZCBHcm91cDo6ZHVtcCgpIHsKKyAgICBBTE9HRCgiR3JvdXAgJXMgaGFzICV6dSBjaGlsZHJlbjogIiwgbU5hbWUuY19zdHIoKSwgbUNoaWxkcmVuLnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtQ2hpbGRyZW4uc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgbUNoaWxkcmVuW2ldLT5kdW1wKCk7CisgICAgfQorfQorCit2b2lkIEdyb3VwOjp1cGRhdGVMb2NhbE1hdHJpeChmbG9hdCByb3RhdGUsIGZsb2F0IHBpdm90WCwgZmxvYXQgcGl2b3RZLAorICAgICAgICBmbG9hdCBzY2FsZVgsIGZsb2F0IHNjYWxlWSwgZmxvYXQgdHJhbnNsYXRlWCwgZmxvYXQgdHJhbnNsYXRlWSkgeworICAgIHNldFJvdGF0aW9uKHJvdGF0ZSk7CisgICAgc2V0UGl2b3RYKHBpdm90WCk7CisgICAgc2V0UGl2b3RZKHBpdm90WSk7CisgICAgc2V0U2NhbGVYKHNjYWxlWCk7CisgICAgc2V0U2NhbGVZKHNjYWxlWSk7CisgICAgc2V0VHJhbnNsYXRlWCh0cmFuc2xhdGVYKTsKKyAgICBzZXRUcmFuc2xhdGVZKHRyYW5zbGF0ZVkpOworfQorCit2b2lkIEdyb3VwOjpnZXRMb2NhbE1hdHJpeChTa01hdHJpeCogb3V0TWF0cml4KSB7CisgICAgb3V0TWF0cml4LT5yZXNldCgpOworICAgIC8vIFRPRE86IHVzZSByb3RhdGUobVJvdGF0ZSwgbVBpdm90WCwgbVBpdm90WSkgYW5kIHNjYWxlIHdpdGggcGl2b3QgcG9pbnQsIGluc3RlYWQgb2YKKyAgICAvLyB0cmFuc2xhdGluZyB0byBwaXZvdCBmb3Igcm90YXRpbmcgYW5kIHNjYWxpbmcsIHRoZW4gdHJhbnNsYXRpbmcgYmFjay4KKyAgICBvdXRNYXRyaXgtPnBvc3RUcmFuc2xhdGUoLW1QaXZvdFgsIC1tUGl2b3RZKTsKKyAgICBvdXRNYXRyaXgtPnBvc3RTY2FsZShtU2NhbGVYLCBtU2NhbGVZKTsKKyAgICBvdXRNYXRyaXgtPnBvc3RSb3RhdGUobVJvdGF0ZSwgMCwgMCk7CisgICAgb3V0TWF0cml4LT5wb3N0VHJhbnNsYXRlKG1UcmFuc2xhdGVYICsgbVBpdm90WCwgbVRyYW5zbGF0ZVkgKyBtUGl2b3RZKTsKK30KKwordm9pZCBHcm91cDo6YWRkQ2hpbGQoTm9kZSogY2hpbGQpIHsKKyAgICBtQ2hpbGRyZW4ucHVzaF9iYWNrKGNoaWxkKTsKK30KKworYm9vbCBHcm91cDo6Z2V0UHJvcGVydGllcyhmbG9hdCogb3V0UHJvcGVydGllcywgaW50IGxlbmd0aCkgeworICAgIGludCBwcm9wZXJ0eUNvdW50ID0gc3RhdGljX2Nhc3Q8aW50PihQcm9wZXJ0eTo6Q291bnQpOworICAgIGlmIChsZW5ndGggIT0gcHJvcGVydHlDb3VudCkgeworICAgICAgICBMT0dfQUxXQVlTX0ZBVEFMKCJQcm9wZXJ0aWVzIG5lZWRzIGV4YWN0bHkgJWQgYnl0ZXMsIGEgYnl0ZSBhcnJheSBvZiBzaXplICVkIGlzIHByb3ZpZGVkIiwKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eUNvdW50LCBsZW5ndGgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJvcGVydHlDb3VudDsgaSsrKSB7CisgICAgICAgIFByb3BlcnR5IGN1cnJlbnRQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PFByb3BlcnR5PihpKTsKKyAgICAgICAgc3dpdGNoIChjdXJyZW50UHJvcGVydHkpIHsKKyAgICAgICAgY2FzZSBQcm9wZXJ0eTo6Um90YXRlX1Byb3BlcnR5OgorICAgICAgICAgICAgb3V0UHJvcGVydGllc1tpXSA9IG1Sb3RhdGU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQcm9wZXJ0eTo6UGl2b3RYX1Byb3BlcnR5OgorICAgICAgICAgICAgb3V0UHJvcGVydGllc1tpXSA9IG1QaXZvdFg7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQcm9wZXJ0eTo6UGl2b3RZX1Byb3BlcnR5OgorICAgICAgICAgICAgb3V0UHJvcGVydGllc1tpXSA9IG1QaXZvdFk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQcm9wZXJ0eTo6U2NhbGVYX1Byb3BlcnR5OgorICAgICAgICAgICAgb3V0UHJvcGVydGllc1tpXSA9IG1TY2FsZVg7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQcm9wZXJ0eTo6U2NhbGVZX1Byb3BlcnR5OgorICAgICAgICAgICAgb3V0UHJvcGVydGllc1tpXSA9IG1TY2FsZVk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQcm9wZXJ0eTo6VHJhbnNsYXRlWF9Qcm9wZXJ0eToKKyAgICAgICAgICAgIG91dFByb3BlcnRpZXNbaV0gPSBtVHJhbnNsYXRlWDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFByb3BlcnR5OjpUcmFuc2xhdGVZX1Byb3BlcnR5OgorICAgICAgICAgICAgb3V0UHJvcGVydGllc1tpXSA9IG1UcmFuc2xhdGVZOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBMT0dfQUxXQVlTX0ZBVEFMKCJJbnZhbGlkIGlucHV0IGluZGV4OiAlZCIsIGkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFRyZWU6OmRyYXcoQ2FudmFzKiBvdXRDYW52YXMsIFNrQ29sb3JGaWx0ZXIqIGNvbG9yRmlsdGVyLAorICAgICAgICBjb25zdCBTa1JlY3QmIGJvdW5kcywgYm9vbCBuZWVkc01pcnJvcmluZywgYm9vbCBjYW5SZXVzZUNhY2hlKSB7CisgICAgLy8gVGhlIGltYWdlVmlldyBjYW4gc2NhbGUgdGhlIGNhbnZhcyBpbiBkaWZmZXJlbnQgd2F5cywgaW4gb3JkZXIgdG8KKyAgICAvLyBhdm9pZCBibHVycnkgc2NhbGluZywgd2UgaGF2ZSB0byBkcmF3IGludG8gYSBiaXRtYXAgd2l0aCBleGFjdCBwaXhlbAorICAgIC8vIHNpemUgZmlyc3QuIFRoaXMgYml0bWFwIHNpemUgaXMgZGV0ZXJtaW5lZCBieSB0aGUgYm91bmRzIGFuZCB0aGUKKyAgICAvLyBjYW52YXMgc2NhbGUuCisgICAgb3V0Q2FudmFzLT5nZXRNYXRyaXgoJm1DYW52YXNNYXRyaXgpOworICAgIG1Cb3VuZHMgPSBib3VuZHM7CisgICAgZmxvYXQgY2FudmFzU2NhbGVYID0gMS4wZjsKKyAgICBmbG9hdCBjYW52YXNTY2FsZVkgPSAxLjBmOworICAgIGlmIChtQ2FudmFzTWF0cml4LmdldFNrZXdYKCkgPT0gMCAmJiBtQ2FudmFzTWF0cml4LmdldFNrZXdZKCkgPT0gMCkgeworICAgICAgICAvLyBPbmx5IHVzZSB0aGUgc2NhbGUgdmFsdWUgd2hlbiB0aGVyZSdzIG5vIHNrZXcgb3Igcm90YXRpb24gaW4gdGhlIGNhbnZhcyBtYXRyaXguCisgICAgICAgIGNhbnZhc1NjYWxlWCA9IG1DYW52YXNNYXRyaXguZ2V0U2NhbGVYKCk7CisgICAgICAgIGNhbnZhc1NjYWxlWSA9IG1DYW52YXNNYXRyaXguZ2V0U2NhbGVZKCk7CisgICAgfQorICAgIGludCBzY2FsZWRXaWR0aCA9IChpbnQpIChtQm91bmRzLndpZHRoKCkgKiBjYW52YXNTY2FsZVgpOworICAgIGludCBzY2FsZWRIZWlnaHQgPSAoaW50KSAobUJvdW5kcy5oZWlnaHQoKSAqIGNhbnZhc1NjYWxlWSk7CisgICAgc2NhbGVkV2lkdGggPSBzdGQ6Om1pbihUcmVlOjpNQVhfQ0FDSEVEX0JJVE1BUF9TSVpFLCBzY2FsZWRXaWR0aCk7CisgICAgc2NhbGVkSGVpZ2h0ID0gc3RkOjptaW4oVHJlZTo6TUFYX0NBQ0hFRF9CSVRNQVBfU0laRSwgc2NhbGVkSGVpZ2h0KTsKKworICAgIGlmIChzY2FsZWRXaWR0aCA8PSAwIHx8IHNjYWxlZEhlaWdodCA8PSAwKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpbnQgc2F2ZUNvdW50ID0gb3V0Q2FudmFzLT5zYXZlKFNrQ2FudmFzOjpTYXZlRmxhZ3M6OmtNYXRyaXhDbGlwX1NhdmVGbGFnKTsKKyAgICBvdXRDYW52YXMtPnRyYW5zbGF0ZShtQm91bmRzLmZMZWZ0LCBtQm91bmRzLmZUb3ApOworCisgICAgLy8gSGFuZGxlIFJUTCBtaXJyb3JpbmcuCisgICAgaWYgKG5lZWRzTWlycm9yaW5nKSB7CisgICAgICAgIG91dENhbnZhcy0+dHJhbnNsYXRlKG1Cb3VuZHMud2lkdGgoKSwgMCk7CisgICAgICAgIG91dENhbnZhcy0+c2NhbGUoLTEuMGYsIDEuMGYpOworICAgIH0KKworICAgIC8vIEF0IHRoaXMgcG9pbnQsIGNhbnZhcyBoYXMgYmVlbiB0cmFuc2xhdGVkIHRvIHRoZSByaWdodCBwb3NpdGlvbi4KKyAgICAvLyBBbmQgd2UgdXNlIHRoaXMgYm91bmQgZm9yIHRoZSBkZXN0aW5hdGlvbiByZWN0IGZvciB0aGUgZHJhd0JpdG1hcCwgc28KKyAgICAvLyB3ZSBvZmZzZXQgdG8gKDAsIDApOworICAgIG1Cb3VuZHMub2Zmc2V0VG8oMCwgMCk7CisKKyAgICBjcmVhdGVDYWNoZWRCaXRtYXBJZk5lZWRlZChzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0KTsKKyAgICBpZiAoIW1BbGxvd0NhY2hpbmcpIHsKKyAgICAgICAgdXBkYXRlQ2FjaGVkQml0bWFwKHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghY2FuUmV1c2VDYWNoZSB8fCBtQ2FjaGVEaXJ0eSkgeworICAgICAgICAgICAgdXBkYXRlQ2FjaGVkQml0bWFwKHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQpOworICAgICAgICB9CisgICAgfQorICAgIGRyYXdDYWNoZWRCaXRtYXBXaXRoUm9vdEFscGhhKG91dENhbnZhcywgY29sb3JGaWx0ZXIsIG1Cb3VuZHMpOworCisgICAgb3V0Q2FudmFzLT5yZXN0b3JlVG9Db3VudChzYXZlQ291bnQpOworfQorCit2b2lkIFRyZWU6OmRyYXdDYWNoZWRCaXRtYXBXaXRoUm9vdEFscGhhKENhbnZhcyogb3V0Q2FudmFzLCBTa0NvbG9yRmlsdGVyKiBmaWx0ZXIsCisgICAgICAgIGNvbnN0IFNrUmVjdCYgb3JpZ2luYWxCb3VuZHMpIHsKKyAgICBTa1BhaW50KiBwYWludDsKKyAgICBpZiAobVJvb3RBbHBoYSA9PSAxLjBmICYmIGZpbHRlciA9PSBOVUxMKSB7CisgICAgICAgIHBhaW50ID0gTlVMTDsKKyAgICB9IGVsc2UgeworICAgICAgICBtUGFpbnQuc2V0RmlsdGVyUXVhbGl0eShrTG93X1NrRmlsdGVyUXVhbGl0eSk7CisgICAgICAgIG1QYWludC5zZXRBbHBoYShtUm9vdEFscGhhICogMjU1KTsKKyAgICAgICAgbVBhaW50LnNldENvbG9yRmlsdGVyKGZpbHRlcik7CisgICAgICAgIHBhaW50ID0gJm1QYWludDsKKyAgICB9CisgICAgb3V0Q2FudmFzLT5kcmF3Qml0bWFwKG1DYWNoZWRCaXRtYXAsIDAsIDAsIG1DYWNoZWRCaXRtYXAud2lkdGgoKSwgbUNhY2hlZEJpdG1hcC5oZWlnaHQoKSwKKyAgICAgICAgICAgIG9yaWdpbmFsQm91bmRzLmZMZWZ0LCBvcmlnaW5hbEJvdW5kcy5mVG9wLCBvcmlnaW5hbEJvdW5kcy5mUmlnaHQsCisgICAgICAgICAgICBvcmlnaW5hbEJvdW5kcy5mQm90dG9tLCBwYWludCk7Cit9CisKK3ZvaWQgVHJlZTo6dXBkYXRlQ2FjaGVkQml0bWFwKGludCB3aWR0aCwgaW50IGhlaWdodCkgeworICAgIG1DYWNoZWRCaXRtYXAuZXJhc2VDb2xvcihTS19Db2xvclRSQU5TUEFSRU5UKTsKKyAgICBDYW52YXMqIG91dENhbnZhcyA9IENhbnZhczo6Y3JlYXRlX2NhbnZhcyhtQ2FjaGVkQml0bWFwKTsKKyAgICBmbG9hdCBzY2FsZVggPSB3aWR0aCAvIG1WaWV3cG9ydFdpZHRoOworICAgIGZsb2F0IHNjYWxlWSA9IGhlaWdodCAvIG1WaWV3cG9ydEhlaWdodDsKKyAgICBtUm9vdE5vZGUtPmRyYXcob3V0Q2FudmFzLCBTa01hdHJpeDo6SSgpLCBzY2FsZVgsIHNjYWxlWSk7CisgICAgbUNhY2hlRGlydHkgPSBmYWxzZTsKK30KKwordm9pZCBUcmVlOjpjcmVhdGVDYWNoZWRCaXRtYXBJZk5lZWRlZChpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKKyAgICBpZiAoIWNhblJldXNlQml0bWFwKHdpZHRoLCBoZWlnaHQpKSB7CisgICAgICAgIFNrSW1hZ2VJbmZvIGluZm8gPSBTa0ltYWdlSW5mbzo6TWFrZSh3aWR0aCwgaGVpZ2h0LAorICAgICAgICAgICAgICAgIGtOMzJfU2tDb2xvclR5cGUsIGtQcmVtdWxfU2tBbHBoYVR5cGUpOworICAgICAgICBtQ2FjaGVkQml0bWFwLnNldEluZm8oaW5mbyk7CisgICAgICAgIC8vIFRPRE86IENvdW50IHRoZSBiaXRtYXAgY2FjaGUgYWdhaW5zdCBhcHAncyBqYXZhIGhlYXAKKyAgICAgICAgbUNhY2hlZEJpdG1hcC5hbGxvY1BpeGVscyhpbmZvKTsKKyAgICAgICAgbUNhY2hlRGlydHkgPSB0cnVlOworICAgIH0KK30KKworYm9vbCBUcmVlOjpjYW5SZXVzZUJpdG1hcChpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKKyAgICByZXR1cm4gd2lkdGggPT0gbUNhY2hlZEJpdG1hcC53aWR0aCgpICYmIGhlaWdodCA9PSBtQ2FjaGVkQml0bWFwLmhlaWdodCgpOworfQorCit9OyAvLyBuYW1lc3BhY2UgVmVjdG9yRHJhd2FibGUKKworfTsgLy8gbmFtZXNwYWNlIHVpcmVuZGVyZXIKK307IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9saWJzL2h3dWkvVmVjdG9yRHJhd2FibGUuaCBiL2xpYnMvaHd1aS9WZWN0b3JEcmF3YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjODRiMDUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2h3dWkvVmVjdG9yRHJhd2FibGUuaApAQCAtMCwwICsxLDMzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQU5EUk9JRF9IV1VJX1ZQQVRIX0gKKyNkZWZpbmUgQU5EUk9JRF9IV1VJX1ZQQVRIX0gKKworI2luY2x1ZGUgIkNhbnZhcy5oIgorI2luY2x1ZGUgPFNrQml0bWFwLmg+CisjaW5jbHVkZSA8U2tDb2xvci5oPgorI2luY2x1ZGUgPFNrTWF0cml4Lmg+CisjaW5jbHVkZSA8U2tQYWludC5oPgorI2luY2x1ZGUgPFNrUGF0aC5oPgorI2luY2x1ZGUgPFNrUGF0aE1lYXN1cmUuaD4KKyNpbmNsdWRlIDxTa1JlY3QuaD4KKworI2luY2x1ZGUgPGN1dGlscy9jb21waWxlci5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHZlY3Rvcj4KKyNpbmNsdWRlIDxzdHJpbmc+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKK25hbWVzcGFjZSB1aXJlbmRlcmVyIHsKKworbmFtZXNwYWNlIFZlY3RvckRyYXdhYmxlIHsKKyNkZWZpbmUgVkRfU0VUX1BST1BfV0lUSF9GTEFHKGZpZWxkLCB2YWx1ZSwgZmxhZykgKFZEX1NFVF9QUk9QKGZpZWxkLCB2YWx1ZSkgPyAoZmxhZyA9IHRydWUsIHRydWUpOiBmYWxzZSk7CisjZGVmaW5lIFZEX1NFVF9QUk9QKGZpZWxkLCB2YWx1ZSkgKHZhbHVlICE9IGZpZWxkID8gKGZpZWxkID0gdmFsdWUsIHRydWUpIDogZmFsc2UpCisKKy8qIEEgVmVjdG9yRHJhd2FibGUgaXMgY29tcG9zZWQgb2YgYSB0cmVlIG9mIG5vZGVzLgorICogRWFjaCBub2RlIGNhbiBiZSBhIGdyb3VwIG5vZGUsIG9yIGEgcGF0aC4KKyAqIEEgZ3JvdXAgbm9kZSBjYW4gaGF2ZSBncm91cHMgb3IgcGF0aHMgYXMgY2hpbGRyZW4sIGJ1dCBhIHBhdGggbm9kZSBoYXMKKyAqIG5vIGNoaWxkcmVuLgorICogT25lIGV4YW1wbGUgY2FuIGJlOgorICogICAgICAgICAgICAgICAgIFJvb3QgR3JvdXAKKyAqICAgICAgICAgICAgICAgIC8gICAgfCAgICAgXAorICogICAgICAgICAgIEdyb3VwICAgIFBhdGggICAgR3JvdXAKKyAqICAgICAgICAgIC8gICAgIFwgICAgICAgICAgICAgfAorICogICAgICAgICBQYXRoICAgUGF0aCAgICAgICAgIFBhdGgKKyAqCisgKi8KK2NsYXNzIEFORFJPSURfQVBJIE5vZGUgeworcHVibGljOgorICAgIE5vZGUoY29uc3QgTm9kZSYgbm9kZSkgeworICAgICAgICBtTmFtZSA9IG5vZGUubU5hbWU7CisgICAgfQorICAgIE5vZGUoKSB7fQorICAgIHZpcnR1YWwgdm9pZCBkcmF3KENhbnZhcyogb3V0Q2FudmFzLCBjb25zdCBTa01hdHJpeCYgY3VycmVudE1hdHJpeCwKKyAgICAgICAgICAgIGZsb2F0IHNjYWxlWCwgZmxvYXQgc2NhbGVZKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGR1bXAoKSA9IDA7CisgICAgdm9pZCBzZXROYW1lKGNvbnN0IGNoYXIqIG5hbWUpIHsKKyAgICAgICAgbU5hbWUgPSBuYW1lOworICAgIH0KKyAgICB2aXJ0dWFsIH5Ob2RlKCl7fQorcHJvdGVjdGVkOgorICAgIHN0ZDo6c3RyaW5nIG1OYW1lOworfTsKKworY2xhc3MgQU5EUk9JRF9BUEkgUGF0aCA6IHB1YmxpYyBOb2RlIHsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgQU5EUk9JRF9BUEkgRGF0YSB7CisgICAgICAgIHN0ZDo6dmVjdG9yPGNoYXI+IHZlcmJzOworICAgICAgICBzdGQ6OnZlY3RvcjxzaXplX3Q+IHZlcmJTaXplczsKKyAgICAgICAgc3RkOjp2ZWN0b3I8ZmxvYXQ+IHBvaW50czsKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IERhdGEmIGRhdGEpIGNvbnN0IHsKKyAgICAgICAgICAgIHJldHVybiB2ZXJicyA9PSBkYXRhLnZlcmJzICYmIHZlcmJTaXplcyA9PSBkYXRhLnZlcmJTaXplcworICAgICAgICAgICAgICAgICAgICAmJiBwb2ludHMgPT0gZGF0YS5wb2ludHM7CisgICAgICAgIH0KKyAgICB9OworICAgIFBhdGgoY29uc3QgRGF0YSYgbm9kZXMpOworICAgIFBhdGgoY29uc3QgUGF0aCYgcGF0aCk7CisgICAgUGF0aChjb25zdCBjaGFyKiBwYXRoLCBzaXplX3Qgc3RyTGVuZ3RoKTsKKyAgICBQYXRoKCkge30KKyAgICB2b2lkIGR1bXAoKSBvdmVycmlkZTsKKyAgICBib29sIGNhbk1vcnBoKGNvbnN0IERhdGEmIHBhdGgpOworICAgIGJvb2wgY2FuTW9ycGgoY29uc3QgUGF0aCYgcGF0aCk7CisgICAgdm9pZCBkcmF3KENhbnZhcyogb3V0Q2FudmFzLCBjb25zdCBTa01hdHJpeCYgZ3JvdXBTdGFja2VkTWF0cml4LAorICAgICAgICAgICAgZmxvYXQgc2NhbGVYLCBmbG9hdCBzY2FsZVkpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0UGF0aChjb25zdCBjaGFyKiBwYXRoLCBzaXplX3Qgc3RyTGVuZ3RoKTsKKyAgICB2b2lkIHNldFBhdGhEYXRhKGNvbnN0IERhdGEmIGRhdGEpOworICAgIHN0YXRpYyBmbG9hdCBnZXRNYXRyaXhTY2FsZShjb25zdCBTa01hdHJpeCYgZ3JvdXBTdGFja2VkTWF0cml4KTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgY29uc3QgU2tQYXRoJiBnZXRVcGRhdGVkUGF0aCgpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0aChDYW52YXMgKm91dENhbnZhcywgY29uc3QgU2tQYXRoJiByZW5kZXJQYXRoLAorICAgICAgICAgICAgZmxvYXQgc3Ryb2tlU2NhbGUpID0gMDsKKyAgICBEYXRhIG1EYXRhOworICAgIFNrUGF0aCBtU2tQYXRoOworICAgIGJvb2wgbVNrUGF0aERpcnR5ID0gdHJ1ZTsKK307CisKK2NsYXNzIEFORFJPSURfQVBJIEZ1bGxQYXRoOiBwdWJsaWMgUGF0aCB7CitwdWJsaWM6CisgICAgRnVsbFBhdGgoY29uc3QgRnVsbFBhdGgmIHBhdGgpOyAvLyBmb3IgY2xvbmluZworICAgIEZ1bGxQYXRoKGNvbnN0IGNoYXIqIHBhdGgsIHNpemVfdCBzdHJMZW5ndGgpIDogUGF0aChwYXRoLCBzdHJMZW5ndGgpIHt9CisgICAgRnVsbFBhdGgoKSA6IFBhdGgoKSB7fQorICAgIEZ1bGxQYXRoKGNvbnN0IERhdGEmIG5vZGVzKSA6IFBhdGgobm9kZXMpIHt9CisKKyAgICB2b2lkIHVwZGF0ZVByb3BlcnRpZXMoZmxvYXQgc3Ryb2tlV2lkdGgsIFNrQ29sb3Igc3Ryb2tlQ29sb3IsCisgICAgICAgICAgICBmbG9hdCBzdHJva2VBbHBoYSwgU2tDb2xvciBmaWxsQ29sb3IsIGZsb2F0IGZpbGxBbHBoYSwKKyAgICAgICAgICAgIGZsb2F0IHRyaW1QYXRoU3RhcnQsIGZsb2F0IHRyaW1QYXRoRW5kLCBmbG9hdCB0cmltUGF0aE9mZnNldCwKKyAgICAgICAgICAgIGZsb2F0IHN0cm9rZU1pdGVyTGltaXQsIGludCBzdHJva2VMaW5lQ2FwLCBpbnQgc3Ryb2tlTGluZUpvaW4pOworICAgIGZsb2F0IGdldFN0cm9rZVdpZHRoKCkgeworICAgICAgICByZXR1cm4gbVN0cm9rZVdpZHRoOworICAgIH0KKyAgICB2b2lkIHNldFN0cm9rZVdpZHRoKGZsb2F0IHN0cm9rZVdpZHRoKSB7CisgICAgICAgIG1TdHJva2VXaWR0aCA9IHN0cm9rZVdpZHRoOworICAgIH0KKyAgICBTa0NvbG9yIGdldFN0cm9rZUNvbG9yKCkgeworICAgICAgICByZXR1cm4gbVN0cm9rZUNvbG9yOworICAgIH0KKyAgICB2b2lkIHNldFN0cm9rZUNvbG9yKFNrQ29sb3Igc3Ryb2tlQ29sb3IpIHsKKyAgICAgICAgbVN0cm9rZUNvbG9yID0gc3Ryb2tlQ29sb3I7CisgICAgfQorICAgIGZsb2F0IGdldFN0cm9rZUFscGhhKCkgeworICAgICAgICByZXR1cm4gbVN0cm9rZUFscGhhOworICAgIH0KKyAgICB2b2lkIHNldFN0cm9rZUFscGhhKGZsb2F0IHN0cm9rZUFscGhhKSB7CisgICAgICAgIG1TdHJva2VBbHBoYSA9IHN0cm9rZUFscGhhOworICAgIH0KKyAgICBTa0NvbG9yIGdldEZpbGxDb2xvcigpIHsKKyAgICAgICAgcmV0dXJuIG1GaWxsQ29sb3I7CisgICAgfQorICAgIHZvaWQgc2V0RmlsbENvbG9yKFNrQ29sb3IgZmlsbENvbG9yKSB7CisgICAgICAgIG1GaWxsQ29sb3IgPSBmaWxsQ29sb3I7CisgICAgfQorICAgIGZsb2F0IGdldEZpbGxBbHBoYSgpIHsKKyAgICAgICAgcmV0dXJuIG1GaWxsQWxwaGE7CisgICAgfQorICAgIHZvaWQgc2V0RmlsbEFscGhhKGZsb2F0IGZpbGxBbHBoYSkgeworICAgICAgICBtRmlsbEFscGhhID0gZmlsbEFscGhhOworICAgIH0KKyAgICBmbG9hdCBnZXRUcmltUGF0aFN0YXJ0KCkgeworICAgICAgICByZXR1cm4gbVRyaW1QYXRoU3RhcnQ7CisgICAgfQorICAgIHZvaWQgc2V0VHJpbVBhdGhTdGFydChmbG9hdCB0cmltUGF0aFN0YXJ0KSB7CisgICAgICAgIFZEX1NFVF9QUk9QX1dJVEhfRkxBRyhtVHJpbVBhdGhTdGFydCwgdHJpbVBhdGhTdGFydCwgbVRyaW1EaXJ0eSk7CisgICAgfQorICAgIGZsb2F0IGdldFRyaW1QYXRoRW5kKCkgeworICAgICAgICByZXR1cm4gbVRyaW1QYXRoRW5kOworICAgIH0KKyAgICB2b2lkIHNldFRyaW1QYXRoRW5kKGZsb2F0IHRyaW1QYXRoRW5kKSB7CisgICAgICAgIFZEX1NFVF9QUk9QX1dJVEhfRkxBRyhtVHJpbVBhdGhFbmQsIHRyaW1QYXRoRW5kLCBtVHJpbURpcnR5KTsKKyAgICB9CisgICAgZmxvYXQgZ2V0VHJpbVBhdGhPZmZzZXQoKSB7CisgICAgICAgIHJldHVybiBtVHJpbVBhdGhPZmZzZXQ7CisgICAgfQorICAgIHZvaWQgc2V0VHJpbVBhdGhPZmZzZXQoZmxvYXQgdHJpbVBhdGhPZmZzZXQpIHsKKyAgICAgICAgVkRfU0VUX1BST1BfV0lUSF9GTEFHKG1UcmltUGF0aE9mZnNldCwgdHJpbVBhdGhPZmZzZXQsIG1UcmltRGlydHkpOworICAgIH0KKyAgICBib29sIGdldFByb3BlcnRpZXMoaW50OF90KiBvdXRQcm9wZXJ0aWVzLCBpbnQgbGVuZ3RoKTsKKworcHJvdGVjdGVkOgorICAgIGNvbnN0IFNrUGF0aCYgZ2V0VXBkYXRlZFBhdGgoKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdQYXRoKENhbnZhcyogb3V0Q2FudmFzLCBjb25zdCBTa1BhdGgmIHJlbmRlclBhdGgsCisgICAgICAgICAgICBmbG9hdCBzdHJva2VTY2FsZSkgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgLy8gQXBwbGllcyB0cmltbWluZyB0byB0aGUgc3BlY2lmaWVkIHBhdGguCisgICAgdm9pZCBhcHBseVRyaW0oKTsKKyAgICBmbG9hdCBtU3Ryb2tlV2lkdGggPSAwOworICAgIFNrQ29sb3IgbVN0cm9rZUNvbG9yID0gU0tfQ29sb3JUUkFOU1BBUkVOVDsKKyAgICBmbG9hdCBtU3Ryb2tlQWxwaGEgPSAxOworICAgIFNrQ29sb3IgbUZpbGxDb2xvciA9IFNLX0NvbG9yVFJBTlNQQVJFTlQ7CisgICAgZmxvYXQgbUZpbGxBbHBoYSA9IDE7CisgICAgZmxvYXQgbVRyaW1QYXRoU3RhcnQgPSAwOworICAgIGZsb2F0IG1UcmltUGF0aEVuZCA9IDE7CisgICAgZmxvYXQgbVRyaW1QYXRoT2Zmc2V0ID0gMDsKKyAgICBib29sIG1UcmltRGlydHkgPSB0cnVlOworICAgIFNrUGFpbnQ6OkNhcCBtU3Ryb2tlTGluZUNhcCA9IFNrUGFpbnQ6OkNhcDo6a0J1dHRfQ2FwOworICAgIFNrUGFpbnQ6OkpvaW4gbVN0cm9rZUxpbmVKb2luID0gU2tQYWludDo6Sm9pbjo6a01pdGVyX0pvaW47CisgICAgZmxvYXQgbVN0cm9rZU1pdGVyTGltaXQgPSA0OworICAgIFNrUGF0aCBtVHJpbW1lZFNrUGF0aDsKKyAgICBTa1BhaW50IG1QYWludDsKK307CisKK2NsYXNzIEFORFJPSURfQVBJIENsaXBQYXRoOiBwdWJsaWMgUGF0aCB7CitwdWJsaWM6CisgICAgQ2xpcFBhdGgoY29uc3QgQ2xpcFBhdGgmIHBhdGgpIDogUGF0aChwYXRoKSB7fQorICAgIENsaXBQYXRoKGNvbnN0IGNoYXIqIHBhdGgsIHNpemVfdCBzdHJMZW5ndGgpIDogUGF0aChwYXRoLCBzdHJMZW5ndGgpIHt9CisgICAgQ2xpcFBhdGgoKSA6IFBhdGgoKSB7fQorICAgIENsaXBQYXRoKGNvbnN0IERhdGEmIG5vZGVzKSA6IFBhdGgobm9kZXMpIHt9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGRyYXdQYXRoKENhbnZhcyogb3V0Q2FudmFzLCBjb25zdCBTa1BhdGgmIHJlbmRlclBhdGgsCisgICAgICAgICAgICBmbG9hdCBzdHJva2VTY2FsZSkgb3ZlcnJpZGU7Cit9OworCitjbGFzcyBBTkRST0lEX0FQSSBHcm91cDogcHVibGljIE5vZGUgeworcHVibGljOgorICAgIEdyb3VwKGNvbnN0IEdyb3VwJiBncm91cCk7CisgICAgR3JvdXAoKSB7fQorICAgIGZsb2F0IGdldFJvdGF0aW9uKCkgeworICAgICAgICByZXR1cm4gbVJvdGF0ZTsKKyAgICB9CisgICAgdm9pZCBzZXRSb3RhdGlvbihmbG9hdCByb3RhdGlvbikgeworICAgICAgICBtUm90YXRlID0gcm90YXRpb247CisgICAgfQorICAgIGZsb2F0IGdldFBpdm90WCgpIHsKKyAgICAgICAgcmV0dXJuIG1QaXZvdFg7CisgICAgfQorICAgIHZvaWQgc2V0UGl2b3RYKGZsb2F0IHBpdm90WCkgeworICAgICAgICBtUGl2b3RYID0gcGl2b3RYOworICAgIH0KKyAgICBmbG9hdCBnZXRQaXZvdFkoKSB7CisgICAgICAgIHJldHVybiBtUGl2b3RZOworICAgIH0KKyAgICB2b2lkIHNldFBpdm90WShmbG9hdCBwaXZvdFkpIHsKKyAgICAgICAgbVBpdm90WSA9IHBpdm90WTsKKyAgICB9CisgICAgZmxvYXQgZ2V0U2NhbGVYKCkgeworICAgICAgICByZXR1cm4gbVNjYWxlWDsKKyAgICB9CisgICAgdm9pZCBzZXRTY2FsZVgoZmxvYXQgc2NhbGVYKSB7CisgICAgICAgIG1TY2FsZVggPSBzY2FsZVg7CisgICAgfQorICAgIGZsb2F0IGdldFNjYWxlWSgpIHsKKyAgICAgICAgcmV0dXJuIG1TY2FsZVk7CisgICAgfQorICAgIHZvaWQgc2V0U2NhbGVZKGZsb2F0IHNjYWxlWSkgeworICAgICAgICBtU2NhbGVZID0gc2NhbGVZOworICAgIH0KKyAgICBmbG9hdCBnZXRUcmFuc2xhdGVYKCkgeworICAgICAgICByZXR1cm4gbVRyYW5zbGF0ZVg7CisgICAgfQorICAgIHZvaWQgc2V0VHJhbnNsYXRlWChmbG9hdCB0cmFuc2xhdGVYKSB7CisgICAgICAgIG1UcmFuc2xhdGVYID0gdHJhbnNsYXRlWDsKKyAgICB9CisgICAgZmxvYXQgZ2V0VHJhbnNsYXRlWSgpIHsKKyAgICAgICAgcmV0dXJuIG1UcmFuc2xhdGVZOworICAgIH0KKyAgICB2b2lkIHNldFRyYW5zbGF0ZVkoZmxvYXQgdHJhbnNsYXRlWSkgeworICAgICAgICBtVHJhbnNsYXRlWSA9IHRyYW5zbGF0ZVk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBkcmF3KENhbnZhcyogb3V0Q2FudmFzLCBjb25zdCBTa01hdHJpeCYgY3VycmVudE1hdHJpeCwKKyAgICAgICAgICAgIGZsb2F0IHNjYWxlWCwgZmxvYXQgc2NhbGVZKSBvdmVycmlkZTsKKyAgICB2b2lkIHVwZGF0ZUxvY2FsTWF0cml4KGZsb2F0IHJvdGF0ZSwgZmxvYXQgcGl2b3RYLCBmbG9hdCBwaXZvdFksCisgICAgICAgICAgICBmbG9hdCBzY2FsZVgsIGZsb2F0IHNjYWxlWSwgZmxvYXQgdHJhbnNsYXRlWCwgZmxvYXQgdHJhbnNsYXRlWSk7CisgICAgdm9pZCBnZXRMb2NhbE1hdHJpeChTa01hdHJpeCogb3V0TWF0cml4KTsKKyAgICB2b2lkIGFkZENoaWxkKE5vZGUqIGNoaWxkKTsKKyAgICB2b2lkIGR1bXAoKSBvdmVycmlkZTsKKyAgICBib29sIGdldFByb3BlcnRpZXMoZmxvYXQqIG91dFByb3BlcnRpZXMsIGludCBsZW5ndGgpOworCitwcml2YXRlOgorICAgIGVudW0gY2xhc3MgUHJvcGVydHkgeworICAgICAgICBSb3RhdGVfUHJvcGVydHkgPSAwLAorICAgICAgICBQaXZvdFhfUHJvcGVydHksCisgICAgICAgIFBpdm90WV9Qcm9wZXJ0eSwKKyAgICAgICAgU2NhbGVYX1Byb3BlcnR5LAorICAgICAgICBTY2FsZVlfUHJvcGVydHksCisgICAgICAgIFRyYW5zbGF0ZVhfUHJvcGVydHksCisgICAgICAgIFRyYW5zbGF0ZVlfUHJvcGVydHksCisgICAgICAgIC8vIENvdW50IG9mIHRoZSBwcm9wZXJ0aWVzLCBtdXN0IGJlIGF0IHRoZSBlbmQuCisgICAgICAgIENvdW50LAorICAgIH07CisgICAgZmxvYXQgbVJvdGF0ZSA9IDA7CisgICAgZmxvYXQgbVBpdm90WCA9IDA7CisgICAgZmxvYXQgbVBpdm90WSA9IDA7CisgICAgZmxvYXQgbVNjYWxlWCA9IDE7CisgICAgZmxvYXQgbVNjYWxlWSA9IDE7CisgICAgZmxvYXQgbVRyYW5zbGF0ZVggPSAwOworICAgIGZsb2F0IG1UcmFuc2xhdGVZID0gMDsKKyAgICBzdGQ6OnZlY3RvcjxOb2RlKj4gbUNoaWxkcmVuOworfTsKKworY2xhc3MgQU5EUk9JRF9BUEkgVHJlZSB7CitwdWJsaWM6CisgICAgVHJlZShHcm91cCogcm9vdE5vZGUpIDogbVJvb3ROb2RlKHJvb3ROb2RlKSB7fQorICAgIHZvaWQgZHJhdyhDYW52YXMqIG91dENhbnZhcywgU2tDb2xvckZpbHRlciogY29sb3JGaWx0ZXIsCisgICAgICAgICAgICBjb25zdCBTa1JlY3QmIGJvdW5kcywgYm9vbCBuZWVkc01pcnJvcmluZywgYm9vbCBjYW5SZXVzZUNhY2hlKTsKKyAgICB2b2lkIGRyYXdDYWNoZWRCaXRtYXBXaXRoUm9vdEFscGhhKENhbnZhcyogb3V0Q2FudmFzLCBTa0NvbG9yRmlsdGVyKiBmaWx0ZXIsCisgICAgICAgICAgICBjb25zdCBTa1JlY3QmIG9yaWdpbmFsQm91bmRzKTsKKworICAgIHZvaWQgdXBkYXRlQ2FjaGVkQml0bWFwKGludCB3aWR0aCwgaW50IGhlaWdodCk7CisgICAgdm9pZCBjcmVhdGVDYWNoZWRCaXRtYXBJZk5lZWRlZChpbnQgd2lkdGgsIGludCBoZWlnaHQpOworICAgIGJvb2wgY2FuUmV1c2VCaXRtYXAoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKKyAgICB2b2lkIHNldEFsbG93Q2FjaGluZyhib29sIGFsbG93Q2FjaGluZykgeworICAgICAgICBtQWxsb3dDYWNoaW5nID0gYWxsb3dDYWNoaW5nOworICAgIH0KKyAgICBib29sIHNldFJvb3RBbHBoYShmbG9hdCByb290QWxwaGEpIHsKKyAgICAgICAgcmV0dXJuIFZEX1NFVF9QUk9QKG1Sb290QWxwaGEsIHJvb3RBbHBoYSk7CisgICAgfQorCisgICAgZmxvYXQgZ2V0Um9vdEFscGhhKCkgeworICAgICAgICByZXR1cm4gbVJvb3RBbHBoYTsKKyAgICB9CisgICAgdm9pZCBzZXRWaWV3cG9ydFNpemUoZmxvYXQgdmlld3BvcnRXaWR0aCwgZmxvYXQgdmlld3BvcnRIZWlnaHQpIHsKKyAgICAgICAgbVZpZXdwb3J0V2lkdGggPSB2aWV3cG9ydFdpZHRoOworICAgICAgICBtVmlld3BvcnRIZWlnaHQgPSB2aWV3cG9ydEhlaWdodDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgLy8gQ2FwIHRoZSBiaXRtYXAgc2l6ZSwgc3VjaCB0aGF0IGl0IHdvbid0IGh1cnQgdGhlIHBlcmZvcm1hbmNlIHRvbyBtdWNoCisgICAgLy8gYW5kIGl0IHdvbid0IGNyYXNoIGR1ZSB0byBhIHZlcnkgbGFyZ2Ugc2NhbGUuCisgICAgLy8gVGhlIGRyYXdhYmxlIHdpbGwgbG9vayBibHVycnkgYWJvdmUgdGhpcyBzaXplLgorICAgIGNvbnN0IHN0YXRpYyBpbnQgTUFYX0NBQ0hFRF9CSVRNQVBfU0laRTsKKworICAgIGJvb2wgbUNhY2hlRGlydHkgPSB0cnVlOworICAgIGJvb2wgbUFsbG93Q2FjaGluZyA9IHRydWU7CisgICAgZmxvYXQgbVZpZXdwb3J0V2lkdGggPSAwOworICAgIGZsb2F0IG1WaWV3cG9ydEhlaWdodCA9IDA7CisgICAgZmxvYXQgbVJvb3RBbHBoYSA9IDEuMGY7CisKKyAgICBHcm91cCogbVJvb3ROb2RlOworICAgIFNrUmVjdCBtQm91bmRzOworICAgIFNrTWF0cml4IG1DYW52YXNNYXRyaXg7CisgICAgU2tQYWludCBtUGFpbnQ7CisgICAgU2tQYXRoTWVhc3VyZSBtUGF0aE1lYXN1cmU7CisgICAgU2tCaXRtYXAgbUNhY2hlZEJpdG1hcDsKKworfTsKKworfSAvLyBuYW1lc3BhY2UgVmVjdG9yRHJhd2FibGUKKwordHlwZWRlZiBWZWN0b3JEcmF3YWJsZTo6UGF0aDo6RGF0YSBQYXRoRGF0YTsKK30gLy8gbmFtZXNwYWNlIHVpcmVuZGVyZXIKK30gLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworI2VuZGlmIC8vIEFORFJPSURfSFdVSV9WUEFUSF9ICmRpZmYgLS1naXQgYS9saWJzL2h3dWkvVmVjdG9yRHJhd2FibGVQYXRoLmNwcCBiL2xpYnMvaHd1aS9WZWN0b3JEcmF3YWJsZVBhdGguY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOWE1NGNhLi4wMDAwMDAwCi0tLSBhL2xpYnMvaHd1aS9WZWN0b3JEcmF3YWJsZVBhdGguY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNpbmNsdWRlICJWZWN0b3JEcmF3YWJsZVBhdGguaCIKLQotI2luY2x1ZGUgIlBhdGhQYXJzZXIuaCIKLSNpbmNsdWRlICJ1dGlscy9WZWN0b3JEcmF3YWJsZVV0aWxzLmgiCi0KLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8dXRpbHMvTG9nLmg+Ci0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLW5hbWVzcGFjZSB1aXJlbmRlcmVyIHsKLQotCi1WZWN0b3JEcmF3YWJsZVBhdGg6OlZlY3RvckRyYXdhYmxlUGF0aChjb25zdCBjaGFyKiBwYXRoU3RyLCBzaXplX3Qgc3RyTGVuZ3RoKSB7Ci0gICAgUGF0aFBhcnNlcjo6UGFyc2VSZXN1bHQgcmVzdWx0OwotICAgIFBhdGhQYXJzZXI6OmdldFBhdGhEYXRhRnJvbVN0cmluZygmbURhdGEsICZyZXN1bHQsIHBhdGhTdHIsIHN0ckxlbmd0aCk7Ci0gICAgaWYgKCFyZXN1bHQuZmFpbHVyZU9jY3VycmVkKSB7Ci0gICAgICAgIFZlY3RvckRyYXdhYmxlVXRpbHM6OnZlcmJzVG9QYXRoKCZtU2tQYXRoLCBtRGF0YSk7Ci0gICAgfQotfQotCi1WZWN0b3JEcmF3YWJsZVBhdGg6OlZlY3RvckRyYXdhYmxlUGF0aChjb25zdCBQYXRoRGF0YSYgZGF0YSkgewotICAgIG1EYXRhID0gZGF0YTsKLSAgICAvLyBOb3cgd2UgbmVlZCB0byBjb25zdHJ1Y3QgYSBwYXRoCi0gICAgVmVjdG9yRHJhd2FibGVVdGlsczo6dmVyYnNUb1BhdGgoJm1Ta1BhdGgsIGRhdGEpOwotfQotCi1WZWN0b3JEcmF3YWJsZVBhdGg6OlZlY3RvckRyYXdhYmxlUGF0aChjb25zdCBWZWN0b3JEcmF3YWJsZVBhdGgmIHBhdGgpIHsKLSAgICBtRGF0YSA9IHBhdGgubURhdGE7Ci0gICAgVmVjdG9yRHJhd2FibGVVdGlsczo6dmVyYnNUb1BhdGgoJm1Ta1BhdGgsIG1EYXRhKTsKLX0KLQotCi1ib29sIFZlY3RvckRyYXdhYmxlUGF0aDo6Y2FuTW9ycGgoY29uc3QgUGF0aERhdGEmIG1vcnBoVG8pIHsKLSAgICByZXR1cm4gVmVjdG9yRHJhd2FibGVVdGlsczo6Y2FuTW9ycGgobURhdGEsIG1vcnBoVG8pOwotfQotCi1ib29sIFZlY3RvckRyYXdhYmxlUGF0aDo6Y2FuTW9ycGgoY29uc3QgVmVjdG9yRHJhd2FibGVQYXRoJiBwYXRoKSB7Ci0gICAgcmV0dXJuIGNhbk1vcnBoKHBhdGgubURhdGEpOwotfQotCi0KLX07IC8vIG5hbWVzcGFjZSB1aXJlbmRlcmVyCi19OyAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvbGlicy9od3VpL1ZlY3RvckRyYXdhYmxlUGF0aC5oIGIvbGlicy9od3VpL1ZlY3RvckRyYXdhYmxlUGF0aC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTU2MzQ5Li4wMDAwMDAwCi0tLSBhL2xpYnMvaHd1aS9WZWN0b3JEcmF3YWJsZVBhdGguaAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jaWZuZGVmIEFORFJPSURfSFdVSV9WUEFUSF9ICi0jZGVmaW5lIEFORFJPSURfSFdVSV9WUEFUSF9ICi0KLSNpbmNsdWRlIDxjdXRpbHMvY29tcGlsZXIuaD4KLSNpbmNsdWRlICJTa1BhdGguaCIKLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLW5hbWVzcGFjZSB1aXJlbmRlcmVyIHsKLQotc3RydWN0IEFORFJPSURfQVBJIFBhdGhEYXRhIHsKLSAgICAvLyBUT0RPOiBUcnkgdXNpbmcgRmF0VmVjdG9yIGluc3RlYWQgb2Ygc3RkOjp2ZWN0b3IgYW5kIGRvIGEgbWljcm8gYmVuY2htYXJrIG9uIHRoZSBwZXJmb3JtYW5jZQotICAgIC8vIGRpZmZlcmVuY2UuCi0gICAgc3RkOjp2ZWN0b3I8Y2hhcj4gdmVyYnM7Ci0gICAgc3RkOjp2ZWN0b3I8c2l6ZV90PiB2ZXJiU2l6ZXM7Ci0gICAgc3RkOjp2ZWN0b3I8ZmxvYXQ+IHBvaW50czsKLSAgICBib29sIG9wZXJhdG9yPT0gKGNvbnN0IFBhdGhEYXRhJiBkYXRhKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiB2ZXJicyA9PSBkYXRhLnZlcmJzICYmIHZlcmJTaXplcyA9PSBkYXRhLnZlcmJTaXplcyAmJiBwb2ludHMgPT0gZGF0YS5wb2ludHM7Ci0gICAgfQotCi19OwotCi1jbGFzcyBWZWN0b3JEcmF3YWJsZVBhdGggewotcHVibGljOgotICAgIFZlY3RvckRyYXdhYmxlUGF0aChjb25zdCBQYXRoRGF0YSYgbm9kZXMpOwotICAgIFZlY3RvckRyYXdhYmxlUGF0aChjb25zdCBWZWN0b3JEcmF3YWJsZVBhdGgmIHBhdGgpOwotICAgIFZlY3RvckRyYXdhYmxlUGF0aChjb25zdCBjaGFyKiBwYXRoLCBzaXplX3Qgc3RyTGVuZ3RoKTsKLSAgICBib29sIGNhbk1vcnBoKGNvbnN0IFBhdGhEYXRhJiBwYXRoKTsKLSAgICBib29sIGNhbk1vcnBoKGNvbnN0IFZlY3RvckRyYXdhYmxlUGF0aCYgcGF0aCk7Ci0KLXByaXZhdGU6Ci0gICAgUGF0aERhdGEgbURhdGE7Ci0gICAgU2tQYXRoIG1Ta1BhdGg7Ci19OwotCi19IC8vIG5hbWVzcGFjZSB1aXJlbmRlcmVyCi19IC8vIG5hbWVzcGFjZSBhbmRyb2lkCi0KLSNlbmRpZiAvLyBBTkRST0lEX0hXVUlfVlBBVEhfSApkaWZmIC0tZ2l0IGEvbGlicy9od3VpL3JlbmRlcnN0YXRlL1NjaXNzb3IuY3BwIGIvbGlicy9od3VpL3JlbmRlcnN0YXRlL1NjaXNzb3IuY3BwCmluZGV4IDk1ZGNkMTguLjYxZGQ4YzMgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9yZW5kZXJzdGF0ZS9TY2lzc29yLmNwcAorKysgYi9saWJzL2h3dWkvcmVuZGVyc3RhdGUvU2Npc3Nvci5jcHAKQEAgLTE1LDYgKzE1LDggQEAKICAqLwogI2luY2x1ZGUgInJlbmRlcnN0YXRlL1NjaXNzb3IuaCIKIAorI2luY2x1ZGUgIlJlY3QuaCIKKwogI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgogCiBuYW1lc3BhY2UgYW5kcm9pZCB7CkBAIC03MSw2ICs3MywyNiBAQAogICAgIHJldHVybiBmYWxzZTsKIH0KIAordm9pZCBTY2lzc29yOjpzZXQoaW50IHZpZXdwb3J0SGVpZ2h0LCBjb25zdCBSZWN0JiBjbGlwKSB7CisgICAgLy8gdHJhbnNmb3JtIHRvIFktZmxpcHBlZCBHTCBzcGFjZSwgYW5kIHByZXZlbnQgbmVnYXRpdmVzCisgICAgR0xpbnQgeCA9IHN0ZDo6bWF4KDAsIChpbnQpY2xpcC5sZWZ0KTsKKyAgICBHTGludCB5ID0gc3RkOjptYXgoMCwgdmlld3BvcnRIZWlnaHQgLSAoaW50KWNsaXAuYm90dG9tKTsKKyAgICBHTGludCB3aWR0aCA9IHN0ZDo6bWF4KDAsICgoaW50KWNsaXAucmlnaHQpIC0geCk7CisgICAgR0xpbnQgaGVpZ2h0ID0gc3RkOjptYXgoMCwgKHZpZXdwb3J0SGVpZ2h0IC0gKGludCljbGlwLnRvcCkgLSB5KTsKKworICAgIGlmICh4ICE9IG1TY2lzc29yWAorICAgICAgICAgICAgfHwgeSAhPSBtU2Npc3NvclkKKyAgICAgICAgICAgIHx8IHdpZHRoICE9IG1TY2lzc29yV2lkdGgKKyAgICAgICAgICAgIHx8IGhlaWdodCAhPSBtU2Npc3NvckhlaWdodCkgeworICAgICAgICBnbFNjaXNzb3IoeCwgeSwgd2lkdGgsIGhlaWdodCk7CisKKyAgICAgICAgbVNjaXNzb3JYID0geDsKKyAgICAgICAgbVNjaXNzb3JZID0geTsKKyAgICAgICAgbVNjaXNzb3JXaWR0aCA9IHdpZHRoOworICAgICAgICBtU2Npc3NvckhlaWdodCA9IGhlaWdodDsKKyAgICB9Cit9CisKIHZvaWQgU2Npc3Nvcjo6cmVzZXQoKSB7CiAgICAgbVNjaXNzb3JYID0gbVNjaXNzb3JZID0gbVNjaXNzb3JXaWR0aCA9IG1TY2lzc29ySGVpZ2h0ID0gMDsKIH0KZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9yZW5kZXJzdGF0ZS9TY2lzc29yLmggYi9saWJzL2h3dWkvcmVuZGVyc3RhdGUvU2Npc3Nvci5oCmluZGV4IGIzN2VjNTguLmYzMDIyNDQgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9yZW5kZXJzdGF0ZS9TY2lzc29yLmgKKysrIGIvbGlicy9od3VpL3JlbmRlcnN0YXRlL1NjaXNzb3IuaApAQCAtMjIsMTEgKzIyLDE0IEBACiBuYW1lc3BhY2UgYW5kcm9pZCB7CiBuYW1lc3BhY2UgdWlyZW5kZXJlciB7CiAKK2NsYXNzIFJlY3Q7CisKIGNsYXNzIFNjaXNzb3IgewogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJTdGF0ZTsKIHB1YmxpYzoKICAgICBib29sIHNldEVuYWJsZWQoYm9vbCBlbmFibGVkKTsKICAgICBib29sIHNldChHTGludCB4LCBHTGludCB5LCBHTGludCB3aWR0aCwgR0xpbnQgaGVpZ2h0KTsKKyAgICB2b2lkIHNldChpbnQgdmlld3BvcnRIZWlnaHQsIGNvbnN0IFJlY3QmIGNsaXApOwogICAgIHZvaWQgcmVzZXQoKTsKICAgICBib29sIGlzRW5hYmxlZCgpIHsgcmV0dXJuIG1FbmFibGVkOyB9CiAgICAgdm9pZCBkdW1wKCk7CmRpZmYgLS1naXQgYS9saWJzL2h3dWkvcmVuZGVydGhyZWFkL0VnbE1hbmFnZXIuY3BwIGIvbGlicy9od3VpL3JlbmRlcnRocmVhZC9FZ2xNYW5hZ2VyLmNwcAppbmRleCA3OGRmMjk3Li40NjZmZWY5ZCAxMDA2NDQKLS0tIGEvbGlicy9od3VpL3JlbmRlcnRocmVhZC9FZ2xNYW5hZ2VyLmNwcAorKysgYi9saWJzL2h3dWkvcmVuZGVydGhyZWFkL0VnbE1hbmFnZXIuY3BwCkBAIC0yOSw4ICsyOSw2IEBACiAKICNkZWZpbmUgR0xFU19WRVJTSU9OIDIKIAotI2RlZmluZSBXQUlUX0ZPUl9HUFVfQ09NUExFVElPTiAwCi0KIC8vIEFuZHJvaWQtc3BlY2lmaWMgYWRkaXRpb24gdGhhdCBpcyB1c2VkIHRvIHNob3cgd2hlbiBmcmFtZXMgYmVnYW4gaW4gc3lzdHJhY2UKIEVHTEFQSSB2b2lkIEVHTEFQSUVOVFJZIGVnbEJlZ2luRnJhbWUoRUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3VyZmFjZSk7CiAKQEAgLTE3OSw3ICsxNzcsMTAgQEAKIH0KIAogdm9pZCBFZ2xNYW5hZ2VyOjpjcmVhdGVDb250ZXh0KCkgewotICAgIEVHTGludCBhdHRyaWJzW10gPSB7IEVHTF9DT05URVhUX0NMSUVOVF9WRVJTSU9OLCBHTEVTX1ZFUlNJT04sIEVHTF9OT05FIH07CisgICAgRUdMaW50IGF0dHJpYnNbXSA9IHsKKyAgICAgICAgICAgIEVHTF9DT05URVhUX0NMSUVOVF9WRVJTSU9OLCBHTEVTX1ZFUlNJT04sCisgICAgICAgICAgICBFR0xfTk9ORQorICAgIH07CiAgICAgbUVnbENvbnRleHQgPSBlZ2xDcmVhdGVDb250ZXh0KG1FZ2xEaXNwbGF5LCBtRWdsQ29uZmlnLCBFR0xfTk9fQ09OVEVYVCwgYXR0cmlicyk7CiAgICAgTE9HX0FMV0FZU19GQVRBTF9JRihtRWdsQ29udGV4dCA9PSBFR0xfTk9fQ09OVEVYVCwKICAgICAgICAgIkZhaWxlZCB0byBjcmVhdGUgY29udGV4dCwgZXJyb3IgPSAlcyIsIGVnbF9lcnJvcl9zdHIoKSk7CkBAIC0zMTgsMTIgKzMxOSwxMCBAQAogCiBib29sIEVnbE1hbmFnZXI6OnN3YXBCdWZmZXJzKGNvbnN0IEZyYW1lJiBmcmFtZSwgY29uc3QgU2tSZWN0JiBzY3JlZW5EaXJ0eSkgewogCi0jaWYgV0FJVF9GT1JfR1BVX0NPTVBMRVRJT04KLSAgICB7CisgICAgaWYgKENDX1VOTElLRUxZKFByb3BlcnRpZXM6OndhaXRGb3JHcHVDb21wbGV0aW9uKSkgewogICAgICAgICBBVFJBQ0VfTkFNRSgiRmluaXNoaW5nIEdQVSB3b3JrIik7CiAgICAgICAgIGZlbmNlKCk7CiAgICAgfQotI2VuZGlmCiAKICAgICBFR0xpbnQgcmVjdHNbNF07CiAgICAgZnJhbWUubWFwKHNjcmVlbkRpcnR5LCByZWN0cyk7CmRpZmYgLS1naXQgYS9saWJzL2h3dWkvdGVzdHMvY29tbW9uL1Rlc3RTY2VuZS5oIGIvbGlicy9od3VpL3Rlc3RzL2NvbW1vbi9UZXN0U2NlbmUuaAppbmRleCBkZjhkMTk0Li43MDZmMmZmIDEwMDY0NAotLS0gYS9saWJzL2h3dWkvdGVzdHMvY29tbW9uL1Rlc3RTY2VuZS5oCisrKyBiL2xpYnMvaHd1aS90ZXN0cy9jb21tb24vVGVzdFNjZW5lLmgKQEAgLTM3LDYgKzM3LDcgQEAKIHB1YmxpYzoKICAgICBzdHJ1Y3QgT3B0aW9ucyB7CiAgICAgICAgIGludCBjb3VudCA9IDA7CisgICAgICAgIGludCByZXBvcnRGcmFtZXRpbWVXZWlnaHQgPSAwOwogICAgIH07CiAKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS90ZXN0cy9jb21tb24vVGVzdFV0aWxzLmggYi9saWJzL2h3dWkvdGVzdHMvY29tbW9uL1Rlc3RVdGlscy5oCmluZGV4IGQzN2ZhZDQuLmFjMTRmYzggMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS90ZXN0cy9jb21tb24vVGVzdFV0aWxzLmgKKysrIGIvbGlicy9od3VpL3Rlc3RzL2NvbW1vbi9UZXN0VXRpbHMuaApAQCAtOTgsNyArOTgsNyBAQAogCiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxTbmFwc2hvdD4gbWFrZVNuYXBzaG90KGNvbnN0IE1hdHJpeDQmIHRyYW5zZm9ybSwgY29uc3QgUmVjdCYgY2xpcCkgewogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U25hcHNob3Q+IHNuYXBzaG90KG5ldyBTbmFwc2hvdCgpKTsKLSAgICAgICAgc25hcHNob3QtPmNsaXAoY2xpcC5sZWZ0LCBjbGlwLnRvcCwgY2xpcC5yaWdodCwgY2xpcC5ib3R0b20sIFNrUmVnaW9uOjprUmVwbGFjZV9PcCk7CisgICAgICAgIHNuYXBzaG90LT5jbGlwKGNsaXAsIFNrUmVnaW9uOjprUmVwbGFjZV9PcCk7IC8vIHN0b3JlIGNsaXAgZmlyc3QsIHNvIGl0IGlzbid0IHRyYW5zZm9ybWVkCiAgICAgICAgICooc25hcHNob3QtPnRyYW5zZm9ybSkgPSB0cmFuc2Zvcm07CiAgICAgICAgIHJldHVybiBzbmFwc2hvdDsKICAgICB9CmRpZmYgLS1naXQgYS9saWJzL2h3dWkvdGVzdHMvY29tbW9uL3NjZW5lcy9DbGlwcGluZ0FuaW1hdGlvbi5jcHAgYi9saWJzL2h3dWkvdGVzdHMvY29tbW9uL3NjZW5lcy9DbGlwcGluZ0FuaW1hdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI2NDAyYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvaHd1aS90ZXN0cy9jb21tb24vc2NlbmVzL0NsaXBwaW5nQW5pbWF0aW9uLmNwcApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgIlRlc3RTY2VuZUJhc2UuaCIKKworY2xhc3MgQ2xpcHBpbmdBbmltYXRpb247CisKK3N0YXRpYyBUZXN0U2NlbmU6OlJlZ2lzdHJhciBfUmVjdEdyaWQoVGVzdFNjZW5lOjpJbmZveworICAgICJjbGlwIiwKKyAgICAiQ29tcGxleCBjbGlwIGNhc2VzIgorICAgICJMb3cgQ1BVL0dQVSBsb2FkLiIsCisgICAgVGVzdFNjZW5lOjpzaW1wbGVDcmVhdGVTY2VuZTxDbGlwcGluZ0FuaW1hdGlvbj4KK30pOworCitjbGFzcyBDbGlwcGluZ0FuaW1hdGlvbiA6IHB1YmxpYyBUZXN0U2NlbmUgeworcHVibGljOgorICAgIHNwPFJlbmRlck5vZGU+IGNhcmQ7CisgICAgdm9pZCBjcmVhdGVDb250ZW50KGludCB3aWR0aCwgaW50IGhlaWdodCwgVGVzdENhbnZhcyYgY2FudmFzKSBvdmVycmlkZSB7CisgICAgICAgIGNhbnZhcy5kcmF3Q29sb3IoQ29sb3I6OldoaXRlLCBTa1hmZXJtb2RlOjprU3JjT3Zlcl9Nb2RlKTsKKyAgICAgICAgY2FyZCA9IFRlc3RVdGlsczo6Y3JlYXRlTm9kZSgwLCAwLCAyMDAsIDQwMCwKKyAgICAgICAgICAgICAgICBbXShSZW5kZXJQcm9wZXJ0aWVzJiBwcm9wcywgVGVzdENhbnZhcyYgY2FudmFzKSB7CisgICAgICAgICAgICBjYW52YXMuc2F2ZShTa0NhbnZhczo6a01hdHJpeENsaXBfU2F2ZUZsYWcpOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhbnZhcy5jbGlwUmVjdCgwLCAwLCAyMDAsIDIwMCwgU2tSZWdpb246OmtJbnRlcnNlY3RfT3ApOworICAgICAgICAgICAgICAgIGNhbnZhcy50cmFuc2xhdGUoMTAwLCAxMDApOworICAgICAgICAgICAgICAgIGNhbnZhcy5yb3RhdGUoNDUpOworICAgICAgICAgICAgICAgIGNhbnZhcy50cmFuc2xhdGUoLTEwMCwgLTEwMCk7CisgICAgICAgICAgICAgICAgY2FudmFzLmNsaXBSZWN0KDAsIDAsIDIwMCwgMjAwLCBTa1JlZ2lvbjo6a0ludGVyc2VjdF9PcCk7CisgICAgICAgICAgICAgICAgY2FudmFzLmRyYXdDb2xvcihDb2xvcjo6Qmx1ZV81MDAsIFNrWGZlcm1vZGU6OmtTcmNPdmVyX01vZGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FudmFzLnJlc3RvcmUoKTsKKworICAgICAgICAgICAgY2FudmFzLnNhdmUoU2tDYW52YXM6OmtNYXRyaXhDbGlwX1NhdmVGbGFnKTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBTa1BhdGggY2xpcENpcmNsZTsKKyAgICAgICAgICAgICAgICBjbGlwQ2lyY2xlLmFkZENpcmNsZSgxMDAsIDMwMCwgMTAwKTsKKyAgICAgICAgICAgICAgICBjYW52YXMuY2xpcFBhdGgoJmNsaXBDaXJjbGUsIFNrUmVnaW9uOjprSW50ZXJzZWN0X09wKTsKKyAgICAgICAgICAgICAgICBjYW52YXMuZHJhd0NvbG9yKENvbG9yOjpSZWRfNTAwLCBTa1hmZXJtb2RlOjprU3JjT3Zlcl9Nb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhbnZhcy5yZXN0b3JlKCk7CisKKyAgICAgICAgICAgIC8vIHB1dCBvbiBhIGxheWVyLCB0byB0ZXN0IHN0ZW5jaWwgYXR0YWNobWVudAorICAgICAgICAgICAgcHJvcHMubXV0YXRlTGF5ZXJQcm9wZXJ0aWVzKCkuc2V0VHlwZShMYXllclR5cGU6OlJlbmRlckxheWVyKTsKKyAgICAgICAgICAgIHByb3BzLnNldEFscGhhKDAuOWYpOworICAgICAgICB9KTsKKyAgICAgICAgY2FudmFzLmRyYXdSZW5kZXJOb2RlKGNhcmQuZ2V0KCkpOworICAgIH0KKyAgICB2b2lkIGRvRnJhbWUoaW50IGZyYW1lTnIpIG92ZXJyaWRlIHsKKyAgICAgICAgaW50IGN1ckZyYW1lID0gZnJhbWVOciAlIDE1MDsKKyAgICAgICAgY2FyZC0+bXV0YXRlU3RhZ2luZ1Byb3BlcnRpZXMoKS5zZXRUcmFuc2xhdGlvblgoY3VyRnJhbWUpOworICAgICAgICBjYXJkLT5tdXRhdGVTdGFnaW5nUHJvcGVydGllcygpLnNldFRyYW5zbGF0aW9uWShjdXJGcmFtZSk7CisgICAgICAgIGNhcmQtPnNldFByb3BlcnR5RmllbGRzRGlydHkoUmVuZGVyTm9kZTo6WCB8IFJlbmRlck5vZGU6OlkpOworICAgIH0KK307CmRpZmYgLS1naXQgYS9saWJzL2h3dWkvdGVzdHMvY29tbW9uL3NjZW5lcy9UZXN0U2NlbmVCYXNlLmggYi9saWJzL2h3dWkvdGVzdHMvY29tbW9uL3NjZW5lcy9UZXN0U2NlbmVCYXNlLmgKaW5kZXggYWM3ODEyNC4uOTM1ZGRjZiAxMDA2NDQKLS0tIGEvbGlicy9od3VpL3Rlc3RzL2NvbW1vbi9zY2VuZXMvVGVzdFNjZW5lQmFzZS5oCisrKyBiL2xpYnMvaHd1aS90ZXN0cy9jb21tb24vc2NlbmVzL1Rlc3RTY2VuZUJhc2UuaApAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgInRlc3RzL2NvbW1vbi9UZXN0Q29udGV4dC5oIgogI2luY2x1ZGUgInRlc3RzL2NvbW1vbi9UZXN0U2NlbmUuaCIKICNpbmNsdWRlICJ0ZXN0cy9jb21tb24vVGVzdFV0aWxzLmgiCisjaW5jbHVkZSAidXRpbHMvQ29sb3IuaCIKIAogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS90ZXN0cy9tYWNyb2JlbmNoL1Rlc3RTY2VuZVJ1bm5lci5jcHAgYi9saWJzL2h3dWkvdGVzdHMvbWFjcm9iZW5jaC9UZXN0U2NlbmVSdW5uZXIuY3BwCmluZGV4IDgyNjEyMjAuLmE4NDNlOTIgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS90ZXN0cy9tYWNyb2JlbmNoL1Rlc3RTY2VuZVJ1bm5lci5jcHAKKysrIGIvbGlicy9od3VpL3Rlc3RzL21hY3JvYmVuY2gvVGVzdFNjZW5lUnVubmVyLmNwcApAQCAtMzgsNiArMzgsMzAgQEAKICAgICB9CiB9OwogCit0ZW1wbGF0ZTxjbGFzcyBUPgorY2xhc3MgTW9kaWZpZWRNb3ZpbmdBdmVyYWdlIHsKK3B1YmxpYzoKKyAgICBNb2RpZmllZE1vdmluZ0F2ZXJhZ2UoaW50IHdlaWdodCkgOiBtV2VpZ2h0KHdlaWdodCkge30KKworICAgIFQgYWRkKFQgdG9kYXkpIHsKKyAgICAgICAgaWYgKCFtSGFzVmFsdWUpIHsKKyAgICAgICAgICAgIG1BdmVyYWdlID0gdG9kYXk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtQXZlcmFnZSA9ICgoKG1XZWlnaHQgLSAxKSAqIG1BdmVyYWdlKSArIHRvZGF5KSAvIG1XZWlnaHQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1BdmVyYWdlOworICAgIH0KKworICAgIFQgYXZlcmFnZSgpIHsKKyAgICAgICAgcmV0dXJuIG1BdmVyYWdlOworICAgIH0KKworcHJpdmF0ZToKKyAgICBib29sIG1IYXNWYWx1ZSA9IGZhbHNlOworICAgIGludCBtV2VpZ2h0OworICAgIFQgbUF2ZXJhZ2U7Cit9OworCiB2b2lkIHJ1bihjb25zdCBUZXN0U2NlbmU6OkluZm8mIGluZm8sIGNvbnN0IFRlc3RTY2VuZTo6T3B0aW9ucyYgb3B0cykgewogICAgIC8vIFN3aXRjaCB0byB0aGUgcmVhbCBkaXNwbGF5CiAgICAgZ0Rpc3BsYXkgPSBnZXRCdWlsdEluRGlzcGxheSgpOwpAQCAtNjcsMjIgKzkxLDM1IEBACiAgICAgcHJveHktPnNldExpZ2h0Q2VudGVyKChWZWN0b3IzKXtsaWdodFgsIGRwKC0yMDAuMGYpLCBkcCg4MDAuMGYpfSk7CiAKICAgICAvLyBEbyBhIGZldyBjb2xkIHJ1bnMgdGhlbiByZXNldCB0aGUgc3RhdHMgc28gdGhhdCB0aGUgY2FjaGVzIGFyZSBhbGwgaG90Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyBpKyspIHsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDU7IGkrKykgewogICAgICAgICB0ZXN0Q29udGV4dC53YWl0Rm9yVnN5bmMoKTsKICAgICAgICAgbnNlY3NfdCB2c3luYyA9IHN5c3RlbVRpbWUoQ0xPQ0tfTU9OT1RPTklDKTsKICAgICAgICAgVWlGcmFtZUluZm9CdWlsZGVyKHByb3h5LT5mcmFtZUluZm8oKSkuc2V0VnN5bmModnN5bmMsIHZzeW5jKTsKICAgICAgICAgcHJveHktPnN5bmNBbmREcmF3RnJhbWUoKTsKICAgICB9CisKICAgICBwcm94eS0+cmVzZXRQcm9maWxlSW5mbygpOworICAgIHByb3h5LT5mZW5jZSgpOworCisgICAgTW9kaWZpZWRNb3ZpbmdBdmVyYWdlPGRvdWJsZT4gYXZnTXMob3B0cy5yZXBvcnRGcmFtZXRpbWVXZWlnaHQpOwogCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvcHRzLmNvdW50OyBpKyspIHsKICAgICAgICAgdGVzdENvbnRleHQud2FpdEZvclZzeW5jKCk7Ci0KLSAgICAgICAgQVRSQUNFX05BTUUoIlVJLURyYXcgRnJhbWUiKTsKICAgICAgICAgbnNlY3NfdCB2c3luYyA9IHN5c3RlbVRpbWUoQ0xPQ0tfTU9OT1RPTklDKTsKLSAgICAgICAgVWlGcmFtZUluZm9CdWlsZGVyKHByb3h5LT5mcmFtZUluZm8oKSkuc2V0VnN5bmModnN5bmMsIHZzeW5jKTsKLSAgICAgICAgc2NlbmUtPmRvRnJhbWUoaSk7Ci0gICAgICAgIHByb3h5LT5zeW5jQW5kRHJhd0ZyYW1lKCk7CisgICAgICAgIHsKKyAgICAgICAgICAgIEFUUkFDRV9OQU1FKCJVSS1EcmF3IEZyYW1lIik7CisgICAgICAgICAgICBVaUZyYW1lSW5mb0J1aWxkZXIocHJveHktPmZyYW1lSW5mbygpKS5zZXRWc3luYyh2c3luYywgdnN5bmMpOworICAgICAgICAgICAgc2NlbmUtPmRvRnJhbWUoaSk7CisgICAgICAgICAgICBwcm94eS0+c3luY0FuZERyYXdGcmFtZSgpOworICAgICAgICB9CisgICAgICAgIHByb3h5LT5mZW5jZSgpOworICAgICAgICBuc2Vjc190IGRvbmUgPSBzeXN0ZW1UaW1lKENMT0NLX01PTk9UT05JQyk7CisgICAgICAgIGlmIChvcHRzLnJlcG9ydEZyYW1ldGltZVdlaWdodCkgeworICAgICAgICAgICAgYXZnTXMuYWRkKChkb25lIC0gdnN5bmMpIC8gMTAwMDAwMC4wKTsKKyAgICAgICAgICAgIGlmIChpICUgMTAgPT0gOSkgeworICAgICAgICAgICAgICAgIHByaW50ZigiQXZlcmFnZSBmcmFtZXRpbWUgJS4zZm1zXG4iLCBhdmdNcy5hdmVyYWdlKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogCiAgICAgcHJveHktPmR1bXBQcm9maWxlSW5mbyhTVERPVVRfRklMRU5PLCAwKTsKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS90ZXN0cy9tYWNyb2JlbmNoL21haW4uY3BwIGIvbGlicy9od3VpL3Rlc3RzL21hY3JvYmVuY2gvbWFpbi5jcHAKaW5kZXggNjE5NzEzYy4uMTYxNmE5NSAxMDA2NDQKLS0tIGEvbGlicy9od3VpL3Rlc3RzL21hY3JvYmVuY2gvbWFpbi5jcHAKKysrIGIvbGlicy9od3VpL3Rlc3RzL21hY3JvYmVuY2gvbWFpbi5jcHAKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlICJ0ZXN0cy9jb21tb24vVGVzdFNjZW5lLmgiCiAKICNpbmNsdWRlICJwcm90b3MvaHd1aS5wYi5oIgorI2luY2x1ZGUgIlByb3BlcnRpZXMuaCIKIAogI2luY2x1ZGUgPGdldG9wdC5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CkBAIC0yNSwyNiArMjYsMzggQEAKICNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgogI2luY2x1ZGUgPHZlY3Rvcj4KIAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCiB1c2luZyBuYW1lc3BhY2UgYW5kcm9pZDsKIHVzaW5nIG5hbWVzcGFjZSBhbmRyb2lkOjp1aXJlbmRlcmVyOwogdXNpbmcgbmFtZXNwYWNlIGFuZHJvaWQ6OnVpcmVuZGVyZXI6OnRlc3Q7CiAKLXN0YXRpYyBpbnQgZ0ZyYW1lQ291bnQgPSAxNTA7CiBzdGF0aWMgaW50IGdSZXBlYXRDb3VudCA9IDE7CiBzdGF0aWMgc3RkOjp2ZWN0b3I8VGVzdFNjZW5lOjpJbmZvPiBnUnVuVGVzdHM7CitzdGF0aWMgVGVzdFNjZW5lOjpPcHRpb25zIGdPcHRzOwogCiB2b2lkIHJ1bihjb25zdCBUZXN0U2NlbmU6OkluZm8mIGluZm8sIGNvbnN0IFRlc3RTY2VuZTo6T3B0aW9ucyYgb3B0cyk7CiAKIHN0YXRpYyB2b2lkIHByaW50SGVscCgpIHsKLSAgICBwcmludGYoIlwKLVVTQUdFOiBod3VpdGVzdCBbT1BUSU9OU10gPFRFU1ROQU1FPlxuXAotXG5cCi1PUFRJT05TOlxuXAotICAtYywgLS1jb3VudD1OVU0gICAgICBOVU0gbG9vcHMgYSB0ZXN0IHNob3VsZCBydW4gKGV4YW1wbGUsIG51bWJlciBvZiBmcmFtZXMpXG5cCi0gIC1yLCAtLXJ1bnM9TlVNICAgICAgIFJlcGVhdCB0aGUgdGVzdChzKSBOVU0gdGltZXNcblwKLSAgLWgsIC0taGVscCAgICAgICAgICAgRGlzcGxheSB0aGlzIGhlbHBcblwKLSAgLS1saXN0ICAgICAgICAgICAgICAgTGlzdCBhbGwgdGVzdHNcblwKLVxuIik7CisgICAgcHJpbnRmKFIiKAorVVNBR0U6IGh3dWl0ZXN0IFtPUFRJT05TXSA8VEVTVE5BTUU+CisKK09QVElPTlM6CisgIC1jLCAtLWNvdW50PU5VTSAgICAgIE5VTSBsb29wcyBhIHRlc3Qgc2hvdWxkIHJ1biAoZXhhbXBsZSwgbnVtYmVyIG9mIGZyYW1lcykKKyAgLXIsIC0tcnVucz1OVU0gICAgICAgUmVwZWF0IHRoZSB0ZXN0KHMpIE5VTSB0aW1lcworICAtaCwgLS1oZWxwICAgICAgICAgICBEaXNwbGF5IHRoaXMgaGVscAorICAtLWxpc3QgICAgICAgICAgICAgICBMaXN0IGFsbCB0ZXN0cworICAtLXdhaXQtZm9yLWdwdSAgICAgICBTZXQgdGhpcyB0byB3YWl0IGZvciB0aGUgR1BVIGJlZm9yZSBwcm9kdWNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgIG5leHQgZnJhbWUuIE5vdGUgdGhhdCB3aXRob3V0IGxvY2tlZCBjbG9ja3MgdGhpcyB3aWxsCisgICAgICAgICAgICAgICAgICAgICAgIHBhdGhvbG9naWNhbGx5IGJhZCBwZXJmb3JtYW5jZSBkdWUgdG8gbGFyZ2UgaWRsZSB0aW1lCisgIC0tcmVwb3J0LWZyYW1ldGltZVs9d2VpZ2h0XSBJZiBzZXQsIHRoZSB0ZXN0IHdpbGwgcHJpbnQgdG8gc3Rkb3V0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICBtb3ZpbmcgYXZlcmFnZSBmcmFtZXRpbWUuIFdlaWdodCBpcyBvcHRpb25hbCwgZGVmYXVsdCBpcyAxMAorICAtLWNwdXNldD1uYW1lICAgICAgICBBZGRzIHRoZSB0ZXN0IHRvIHRoZSBzcGVjaWZpZWQgY3B1c2V0IGJlZm9yZSBydW5uaW5nCisgICAgICAgICAgICAgICAgICAgICAgIE5vdCBzdXBwb3J0ZWQgb24gYWxsIGRldmljZXMgYW5kIG5lZWRzIHJvb3QKKykiKTsKIH0KIAogc3RhdGljIHZvaWQgbGlzdFRlc3RzKCkgewpAQCAtNzcsMTEgKzkwLDU2IEBACiAgICAgfQogfQogCitzdGF0aWMgdm9pZCBtb3ZlVG9DcHVTZXQoY29uc3QgY2hhciogY3B1c2V0TmFtZSkgeworICAgIGlmIChhY2Nlc3MoIi9kZXYvY3B1c2V0L3Rhc2tzIiwgRl9PSykpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJkb24ndCBoYXZlIGFjY2VzcyB0byBjcHVzZXRzLCBza2lwcGluZy4uLlxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgc3RhdGljIGNvbnN0IGludCBCVUZfU0laRSA9IDEwMDsKKyAgICBjaGFyIGJ1ZmZlcltCVUZfU0laRV07CisKKyAgICBpZiAoc25wcmludGYoYnVmZmVyLCBCVUZfU0laRSwgIi9kZXYvY3B1c2V0LyVzL3Rhc2tzIiwgY3B1c2V0TmFtZSkgPj0gQlVGX1NJWkUpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciwgY3B1c2V0TmFtZSB0b28gbGFyZ2UgdG8gZml0IGluIGJ1ZmZlciAnJXMnXG4iLCBjcHVzZXROYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpbnQgZmQgPSBvcGVuKGJ1ZmZlciwgT19XUk9OTFkgfCBPX0NMT0VYRUMpOworICAgIGlmIChmZCA9PSAtMSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yIG9wZW5pbmcgZmlsZSAlZFxuIiwgZXJybm8pOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHBpZF90IHBpZCA9IGdldHBpZCgpOworCisgICAgaW50IHRvd3JpdGUgPSBzbnByaW50ZihidWZmZXIsIEJVRl9TSVpFLCAiJWxkIiwgKGxvbmcpIHBpZCk7CisgICAgaWYgKHRvd3JpdGUgPj0gQlVGX1NJWkUpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJCdWZmZXIgd2Fzbid0IGxhcmdlIGVub3VnaD9cbiIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICh3cml0ZShmZCwgYnVmZmVyLCB0b3dyaXRlKSAhPSB0b3dyaXRlKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byB3cml0ZSwgZXJybm89JWQiLCBlcnJubyk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2xvc2UoZmQpOworfQorCisvLyBGb3Igb3B0aW9ucyB0aGF0IG9ubHkgZXhpc3QgaW4gbG9uZy1mb3JtLiBBbnl0aGluZyBpbiB0aGUKKy8vIDAtMjU1IHJhbmdlIGlzIHJlc2VydmVkIGZvciBzaG9ydCBvcHRpb25zICh3aGljaCBqdXN0IHVzZSB0aGVpciBBU0NJSSB2YWx1ZSkKK25hbWVzcGFjZSBMb25nT3B0cyB7CitlbnVtIHsKKyAgICBSZXNlcnZlZCA9IDI1NSwKKyAgICBMaXN0LAorICAgIFdhaXRGb3JHcHUsCisgICAgUmVwb3J0RnJhbWV0aW1lLAorICAgIENwdVNldCwKK307Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIExPTkdfT1BUSU9OU1tdID0gewogICAgIHsgImZyYW1lcyIsIHJlcXVpcmVkX2FyZ3VtZW50LCBudWxscHRyLCAnZicgfSwKICAgICB7ICJyZXBlYXQiLCByZXF1aXJlZF9hcmd1bWVudCwgbnVsbHB0ciwgJ3InIH0sCiAgICAgeyAiaGVscCIsIG5vX2FyZ3VtZW50LCBudWxscHRyLCAnaCcgfSwKLSAgICB7ICJsaXN0Iiwgbm9fYXJndW1lbnQsIG51bGxwdHIsICdsJyB9LAorICAgIHsgImxpc3QiLCBub19hcmd1bWVudCwgbnVsbHB0ciwgTG9uZ09wdHM6Okxpc3QgfSwKKyAgICB7ICJ3YWl0LWZvci1ncHUiLCBub19hcmd1bWVudCwgbnVsbHB0ciwgTG9uZ09wdHM6OldhaXRGb3JHcHUgfSwKKyAgICB7ICJyZXBvcnQtZnJhbWV0aW1lIiwgb3B0aW9uYWxfYXJndW1lbnQsIG51bGxwdHIsIExvbmdPcHRzOjpSZXBvcnRGcmFtZXRpbWUgfSwKKyAgICB7ICJjcHVzZXQiLCByZXF1aXJlZF9hcmd1bWVudCwgbnVsbHB0ciwgTG9uZ09wdHM6OkNwdVNldCB9LAogICAgIHsgMCwgMCwgMCwgMCB9CiB9OwogCkBAIC04OSw4ICsxNDcsNiBAQAogCiB2b2lkIHBhcnNlT3B0aW9ucyhpbnQgYXJnYywgY2hhciogYXJndltdKSB7CiAgICAgaW50IGM7Ci0gICAgLy8gdGVtcG9yYXJ5IHZhcmlhYmxlCi0gICAgaW50IGNvdW50OwogICAgIGJvb2wgZXJyb3IgPSBmYWxzZTsKICAgICBvcHRlcnIgPSAwOwogCkBAIC0xMTAsMzEgKzE2Niw1MyBAQAogICAgICAgICAgICAgLy8gKGFsdGhvdWdoIG5vbmUgb2YgdGhlIGN1cnJlbnQgTE9OR19PUFRJT05TIGRvIHRoaXMuLi4pCiAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBjYXNlICdsJzoKKyAgICAgICAgY2FzZSBMb25nT3B0czo6TGlzdDoKICAgICAgICAgICAgIGxpc3RUZXN0cygpOwogICAgICAgICAgICAgZXhpdChFWElUX1NVQ0NFU1MpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAnYyc6Ci0gICAgICAgICAgICBjb3VudCA9IGF0b2kob3B0YXJnKTsKLSAgICAgICAgICAgIGlmICghY291bnQpIHsKKyAgICAgICAgICAgIGdPcHRzLmNvdW50ID0gYXRvaShvcHRhcmcpOworICAgICAgICAgICAgaWYgKCFnT3B0cy5jb3VudCkgewogICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBmcmFtZXMgYXJndW1lbnQgJyVzJ1xuIiwgb3B0YXJnKTsKICAgICAgICAgICAgICAgICBlcnJvciA9IHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGdGcmFtZUNvdW50ID0gKGNvdW50ID4gMCA/IGNvdW50IDogSU5UX01BWCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlICdyJzoKLSAgICAgICAgICAgIGNvdW50ID0gYXRvaShvcHRhcmcpOwotICAgICAgICAgICAgaWYgKCFjb3VudCkgeworICAgICAgICAgICAgZ1JlcGVhdENvdW50ID0gYXRvaShvcHRhcmcpOworICAgICAgICAgICAgaWYgKCFnUmVwZWF0Q291bnQpIHsKICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgcmVwZWF0IGFyZ3VtZW50ICclcydcbiIsIG9wdGFyZyk7CiAgICAgICAgICAgICAgICAgZXJyb3IgPSB0cnVlOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBnUmVwZWF0Q291bnQgPSAoY291bnQgPiAwID8gY291bnQgOiBJTlRfTUFYKTsKKyAgICAgICAgICAgICAgICBnUmVwZWF0Q291bnQgPSAoZ1JlcGVhdENvdW50ID4gMCA/IGdSZXBlYXRDb3VudCA6IElOVF9NQVgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAKKyAgICAgICAgY2FzZSBMb25nT3B0czo6UmVwb3J0RnJhbWV0aW1lOgorICAgICAgICAgICAgaWYgKG9wdGFyZykgeworICAgICAgICAgICAgICAgIGdPcHRzLnJlcG9ydEZyYW1ldGltZVdlaWdodCA9IGF0b2kob3B0YXJnKTsKKyAgICAgICAgICAgICAgICBpZiAoIWdPcHRzLnJlcG9ydEZyYW1ldGltZVdlaWdodCkgeworICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgcmVwb3J0IGZyYW1ldGltZSB3ZWlnaHQgJyVzJ1xuIiwgb3B0YXJnKTsKKyAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZ09wdHMucmVwb3J0RnJhbWV0aW1lV2VpZ2h0ID0gMTA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIExvbmdPcHRzOjpXYWl0Rm9yR3B1OgorICAgICAgICAgICAgUHJvcGVydGllczo6d2FpdEZvckdwdUNvbXBsZXRpb24gPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBMb25nT3B0czo6Q3B1U2V0OgorICAgICAgICAgICAgaWYgKCFvcHRhcmcpIHsKKyAgICAgICAgICAgICAgICBlcnJvciA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtb3ZlVG9DcHVTZXQob3B0YXJnKTsKKyAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgIGNhc2UgJ2gnOgogICAgICAgICAgICAgcHJpbnRIZWxwKCk7CiAgICAgICAgICAgICBleGl0KEVYSVRfU1VDQ0VTUyk7CkBAIC0xNzIsMTMgKzI1MCwxNCBAQAogfQogCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKSB7CisgICAgLy8gc2V0IGRlZmF1bHRzCisgICAgZ09wdHMuY291bnQgPSAxNTA7CisKICAgICBwYXJzZU9wdGlvbnMoYXJnYywgYXJndik7CiAKLSAgICBUZXN0U2NlbmU6Ok9wdGlvbnMgb3B0czsKLSAgICBvcHRzLmNvdW50ID0gZ0ZyYW1lQ291bnQ7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBnUmVwZWF0Q291bnQ7IGkrKykgewogICAgICAgICBmb3IgKGF1dG8mJiB0ZXN0IDogZ1J1blRlc3RzKSB7Ci0gICAgICAgICAgICBydW4odGVzdCwgb3B0cyk7CisgICAgICAgICAgICBydW4odGVzdCwgZ09wdHMpOwogICAgICAgICB9CiAgICAgfQogICAgIHByaW50ZigiU3VjY2VzcyFcbiIpOwpkaWZmIC0tZ2l0IGEvbGlicy9od3VpL3Rlc3RzL21pY3JvYmVuY2gvUGF0aFBhcnNlckJlbmNoLmNwcCBiL2xpYnMvaHd1aS90ZXN0cy9taWNyb2JlbmNoL1BhdGhQYXJzZXJCZW5jaC5jcHAKaW5kZXggM2Q5ZmFmYS4uYmQ3NDJjNiAxMDA2NDQKLS0tIGEvbGlicy9od3VpL3Rlc3RzL21pY3JvYmVuY2gvUGF0aFBhcnNlckJlbmNoLmNwcAorKysgYi9saWJzL2h3dWkvdGVzdHMvbWljcm9iZW5jaC9QYXRoUGFyc2VyQmVuY2guY3BwCkBAIC0xNyw3ICsxNyw3IEBACiAjaW5jbHVkZSA8YmVuY2htYXJrL0JlbmNobWFyay5oPgogCiAjaW5jbHVkZSAiUGF0aFBhcnNlci5oIgotI2luY2x1ZGUgIlZlY3RvckRyYXdhYmxlUGF0aC5oIgorI2luY2x1ZGUgIlZlY3RvckRyYXdhYmxlLmgiCiAKICNpbmNsdWRlIDxTa1BhdGguaD4KIApkaWZmIC0tZ2l0IGEvbGlicy9od3VpL3Rlc3RzL3NjcmlwdHMvcHJlcF92b2xhbnRpcy5zaCBiL2xpYnMvaHd1aS90ZXN0cy9zY3JpcHRzL3ByZXBfdm9sYW50aXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDlkNDg2OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvaHd1aS90ZXN0cy9zY3JpcHRzL3ByZXBfdm9sYW50aXMuc2gKQEAgLTAsMCArMSw1NCBAQAorIyEvYmluL2Jhc2gKKworIyBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK2FkYiByb290CithZGIgd2FpdC1mb3ItZGV2aWNlCithZGIgc2hlbGwgc3RvcCBtcGRlY2lzaW9uCithZGIgc2hlbGwgc3RvcCBwZXJmZAorYWRiIHNoZWxsIHN0b3AKK2ZvciBwaWQgaW4gJCggYWRiIHNoZWxsIHBzIHwgYXdrICd7IGlmICggJDkgPT0gInN1cmZhY2VmbGluZ2VyIiApIHsgcHJpbnQgJDIgfSB9JyApOyBkbworICAgIGFkYiBzaGVsbCBraWxsICRwaWQKK2RvbmUKK2FkYiBzaGVsbCBzZXRwcm9wIGRlYnVnLmVnbC50cmFjZUdwdUNvbXBsZXRpb24gMQorYWRiIHNoZWxsIGRhZW1vbml6ZSBzdXJmYWNlZmxpbmdlcgorc2xlZXAgMworYWRiIHNoZWxsIHNldHByb3Agc2VydmljZS5ib290YW5pbS5leGl0IDEKKworIyBjcHUgcG9zc2libGUgZnJlcXVlbmNpZXMKKyMgMjA0MDAwIDIyOTUwMCAyNTUwMDAgMjgwNTAwIDMwNjAwMCAzMzE1MDAgMzU3MDAwIDM4MjUwMCA0MDgwMDAgNDMzNTAwIDQ1OTAwMAorIyA0ODQ1MDAgNTEwMDAwIDUzNTUwMCA1NjEwMDAgNTg2NTAwIDYxMjAwMCA2Mzc1MDAgNjYzMDAwIDY4ODUwMCA3MTQwMDAgNzM5NTAwCisjIDc2NTAwMCA3OTA1MDAgODE2MDAwIDg0MTUwMCA4NjcwMDAgODkyNTAwIDkxODAwMCA5NDM1MDAgOTY5MDAwIDk5NDUwMCAxMDIwMDAwCisjIDExMjIwMDAgMTIyNDAwMCAxMzI2MDAwIDE0MjgwMDAgMTUzMDAwMCAxNjMyMDAwIDE3MzQwMDAgMTgzNjAwMCAxOTM4MDAwCisjIDIwMTQ1MDAgMjA5MTAwMCAyMTkzMDAwIDIyOTUwMDAgMjM5NzAwMCAyNDk5MDAwCisKK1M9MTMyNjAwMAorZWNobyAic2V0IGNwdSAkY3B1IHRvICRTIGh6IjsKK2FkYiBzaGVsbCAiZWNobyB1c2Vyc3BhY2UgPiAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUwL2NwdWZyZXEvc2NhbGluZ19nb3Zlcm5vciIKK2FkYiBzaGVsbCAiZWNobyAkUyA+IC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdTAvY3B1ZnJlcS9zY2FsaW5nX21heF9mcmVxIgorYWRiIHNoZWxsICJlY2hvICRTID4gL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1MC9jcHVmcmVxL3NjYWxpbmdfbWluX2ZyZXEiCithZGIgc2hlbGwgImVjaG8gJFMgPiAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUwL2NwdWZyZXEvc2NhbGluZ19zZXRzcGVlZCIKKworI2Rpc2FibGUgaG90cGx1ZworYWRiIHNoZWxsICJlY2hvIDAgPiAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHVxdWlldC90ZWdyYV9jcHVxdWlldC9lbmFibGUiCisKKyMgZ2J1cyBwb3NzaWJsZSByYXRlcworIyA3MjAwMCAxMDgwMDAgMTgwMDAwIDI1MjAwMCAzMjQwMDAgMzk2MDAwIDQ2ODAwMCA1NDAwMDAgNjEyMDAwIDY0ODAwMAorIyA2ODQwMDAgNzA4MDAwIDc1NjAwMCA4MDQwMDAgODUyMDAwIChrSHopCisKK1M9MzI0MDAwMDAwCitlY2hvICJzZXQgZ3B1IHRvICRzIGh6IgorYWRiIHNoZWxsICJlY2hvIDEgPiAvZC9jbG9jay9vdmVycmlkZS5nYnVzL3N0YXRlIgorYWRiIHNoZWxsICJlY2hvICRTID4gL2QvY2xvY2svb3ZlcnJpZGUuZ2J1cy9yYXRlIgpkaWZmIC0tZ2l0IGEvbGlicy9od3VpL3Rlc3RzL3VuaXQvQmFrZWRPcFN0YXRlVGVzdHMuY3BwIGIvbGlicy9od3VpL3Rlc3RzL3VuaXQvQmFrZWRPcFN0YXRlVGVzdHMuY3BwCmluZGV4IGY5ZjUzMTYuLjNmZDgyMmQgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS90ZXN0cy91bml0L0Jha2VkT3BTdGF0ZVRlc3RzLmNwcAorKysgYi9saWJzL2h3dWkvdGVzdHMvdW5pdC9CYWtlZE9wU3RhdGVUZXN0cy5jcHAKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgogCiAjaW5jbHVkZSA8QmFrZWRPcFN0YXRlLmg+CisjaW5jbHVkZSA8Q2xpcEFyZWEuaD4KICNpbmNsdWRlIDxSZWNvcmRlZE9wLmg+CiAjaW5jbHVkZSA8dGVzdHMvY29tbW9uL1Rlc3RVdGlscy5oPgogCkBAIC0yNCwzMSArMjUsMzMgQEAKIG5hbWVzcGFjZSB1aXJlbmRlcmVyIHsKIAogVEVTVChSZXNvbHZlZFJlbmRlclN0YXRlLCBjb25zdHJ1Y3QpIHsKKyAgICBMaW5lYXJBbGxvY2F0b3IgYWxsb2NhdG9yOwogICAgIE1hdHJpeDQgdHJhbnNsYXRlMTB4MjA7CiAgICAgdHJhbnNsYXRlMTB4MjAubG9hZFRyYW5zbGF0ZSgxMCwgMjAsIDApOwogCiAgICAgU2tQYWludCBwYWludDsKLSAgICBSZWN0T3AgcmVjb3JkZWRPcChSZWN0KDMwLCA0MCwgMTAwLCAyMDApLCB0cmFuc2xhdGUxMHgyMCwgUmVjdCgxMDAsIDIwMCksICZwYWludCk7CisgICAgQ2xpcFJlY3QgY2xpcChSZWN0KDEwMCwgMjAwKSk7CisgICAgUmVjdE9wIHJlY29yZGVkT3AoUmVjdCgzMCwgNDAsIDEwMCwgMjAwKSwgdHJhbnNsYXRlMTB4MjAsICZjbGlwLCAmcGFpbnQpOwogICAgIHsKICAgICAgICAgLy8gcmVjb3JkZWQgd2l0aCB0cmFuc2Zvcm0sIG5vIHBhcmVudCB0cmFuc2Zvcm0KICAgICAgICAgYXV0byBwYXJlbnRTbmFwc2hvdCA9IFRlc3RVdGlsczo6bWFrZVNuYXBzaG90KE1hdHJpeDQ6OmlkZW50aXR5KCksIFJlY3QoMTAwLCAyMDApKTsKLSAgICAgICAgUmVzb2x2ZWRSZW5kZXJTdGF0ZSBzdGF0ZSgqcGFyZW50U25hcHNob3QsIHJlY29yZGVkT3AsIGZhbHNlKTsKKyAgICAgICAgUmVzb2x2ZWRSZW5kZXJTdGF0ZSBzdGF0ZShhbGxvY2F0b3IsICpwYXJlbnRTbmFwc2hvdCwgcmVjb3JkZWRPcCwgZmFsc2UpOwogICAgICAgICBFWFBFQ1RfTUFUUklYX0FQUFJPWF9FUShzdGF0ZS50cmFuc2Zvcm0sIHRyYW5zbGF0ZTEweDIwKTsKLSAgICAgICAgRVhQRUNUX0VRKFJlY3QoMTAwLCAyMDApLCBzdGF0ZS5jbGlwUmVjdCk7CisgICAgICAgIEVYUEVDVF9FUShSZWN0KDEwMCwgMjAwKSwgc3RhdGUuY2xpcFJlY3QoKSk7CiAgICAgICAgIEVYUEVDVF9FUShSZWN0KDQwLCA2MCwgMTAwLCAyMDApLCBzdGF0ZS5jbGlwcGVkQm91bmRzKTsgLy8gdHJhbnNsYXRlZCBhbmQgYWxzbyBjbGlwcGVkCiAgICAgICAgIEVYUEVDVF9FUShPcENsaXBTaWRlRmxhZ3M6OlJpZ2h0IHwgT3BDbGlwU2lkZUZsYWdzOjpCb3R0b20sIHN0YXRlLmNsaXBTaWRlRmxhZ3MpOwogICAgIH0KICAgICB7CiAgICAgICAgIC8vIHJlY29yZGVkIHdpdGggdHJhbnNmb3JtIGFuZCBwYXJlbnQgdHJhbnNmb3JtCiAgICAgICAgIGF1dG8gcGFyZW50U25hcHNob3QgPSBUZXN0VXRpbHM6Om1ha2VTbmFwc2hvdCh0cmFuc2xhdGUxMHgyMCwgUmVjdCgxMDAsIDIwMCkpOwotICAgICAgICBSZXNvbHZlZFJlbmRlclN0YXRlIHN0YXRlKCpwYXJlbnRTbmFwc2hvdCwgcmVjb3JkZWRPcCwgZmFsc2UpOworICAgICAgICBSZXNvbHZlZFJlbmRlclN0YXRlIHN0YXRlKGFsbG9jYXRvciwgKnBhcmVudFNuYXBzaG90LCByZWNvcmRlZE9wLCBmYWxzZSk7CiAKICAgICAgICAgTWF0cml4NCBleHBlY3RlZFRyYW5zbGF0ZTsKICAgICAgICAgZXhwZWN0ZWRUcmFuc2xhdGUubG9hZFRyYW5zbGF0ZSgyMCwgNDAsIDApOwogICAgICAgICBFWFBFQ1RfTUFUUklYX0FQUFJPWF9FUShleHBlY3RlZFRyYW5zbGF0ZSwgc3RhdGUudHJhbnNmb3JtKTsKIAogICAgICAgICAvLyBpbnRlcnNlY3Rpb24gb2YgcGFyZW50ICYgdHJhbnNmb3JtZWQgY2hpbGQgY2xpcAotICAgICAgICBFWFBFQ1RfRVEoUmVjdCgxMCwgMjAsIDEwMCwgMjAwKSwgc3RhdGUuY2xpcFJlY3QpOworICAgICAgICBFWFBFQ1RfRVEoUmVjdCgxMCwgMjAsIDEwMCwgMjAwKSwgc3RhdGUuY2xpcFJlY3QoKSk7CiAKICAgICAgICAgLy8gdHJhbnNsYXRlZCBhbmQgYWxzbyBjbGlwcGVkCiAgICAgICAgIEVYUEVDVF9FUShSZWN0KDUwLCA4MCwgMTAwLCAyMDApLCBzdGF0ZS5jbGlwcGVkQm91bmRzKTsKQEAgLTU3LDIyICs2MCwyNCBAQAogfQogCiBURVNUKFJlc29sdmVkUmVuZGVyU3RhdGUsIGNvbXB1dGVMb2NhbFNwYWNlQ2xpcCkgeworICAgIExpbmVhckFsbG9jYXRvciBhbGxvY2F0b3I7CiAgICAgTWF0cml4NCB0cmFuc2xhdGUxMHgyMDsKICAgICB0cmFuc2xhdGUxMHgyMC5sb2FkVHJhbnNsYXRlKDEwLCAyMCwgMCk7CiAKICAgICBTa1BhaW50IHBhaW50OwotICAgIFJlY3RPcCByZWNvcmRlZE9wKFJlY3QoMTAwMCwgMTAwMCksIHRyYW5zbGF0ZTEweDIwLCBSZWN0KDEwMCwgMjAwKSwgJnBhaW50KTsKKyAgICBDbGlwUmVjdCBjbGlwKFJlY3QoMTAwLCAyMDApKTsKKyAgICBSZWN0T3AgcmVjb3JkZWRPcChSZWN0KDEwMDAsIDEwMDApLCB0cmFuc2xhdGUxMHgyMCwgJmNsaXAsICZwYWludCk7CiAgICAgewogICAgICAgICAvLyByZWNvcmRlZCB3aXRoIHRyYW5zZm9ybSwgbm8gcGFyZW50IHRyYW5zZm9ybQogICAgICAgICBhdXRvIHBhcmVudFNuYXBzaG90ID0gVGVzdFV0aWxzOjptYWtlU25hcHNob3QoTWF0cml4NDo6aWRlbnRpdHkoKSwgUmVjdCgxMDAsIDIwMCkpOwotICAgICAgICBSZXNvbHZlZFJlbmRlclN0YXRlIHN0YXRlKCpwYXJlbnRTbmFwc2hvdCwgcmVjb3JkZWRPcCwgZmFsc2UpOworICAgICAgICBSZXNvbHZlZFJlbmRlclN0YXRlIHN0YXRlKGFsbG9jYXRvciwgKnBhcmVudFNuYXBzaG90LCByZWNvcmRlZE9wLCBmYWxzZSk7CiAgICAgICAgIEVYUEVDVF9FUShSZWN0KC0xMCwgLTIwLCA5MCwgMTgwKSwgc3RhdGUuY29tcHV0ZUxvY2FsU3BhY2VDbGlwKCkpCiAgICAgICAgICAgICA8PCAiTG9jYWwgY2xpcCByZWN0IHNob3VsZCBiZSAxMDB4MjAwLCBvZmZzZXQgYnkgLTEwLC0yMCI7CiAgICAgfQogICAgIHsKICAgICAgICAgLy8gcmVjb3JkZWQgd2l0aCB0cmFuc2Zvcm0gKyBwYXJlbnQgdHJhbnNmb3JtCiAgICAgICAgIGF1dG8gcGFyZW50U25hcHNob3QgPSBUZXN0VXRpbHM6Om1ha2VTbmFwc2hvdCh0cmFuc2xhdGUxMHgyMCwgUmVjdCgxMDAsIDIwMCkpOwotICAgICAgICBSZXNvbHZlZFJlbmRlclN0YXRlIHN0YXRlKCpwYXJlbnRTbmFwc2hvdCwgcmVjb3JkZWRPcCwgZmFsc2UpOworICAgICAgICBSZXNvbHZlZFJlbmRlclN0YXRlIHN0YXRlKGFsbG9jYXRvciwgKnBhcmVudFNuYXBzaG90LCByZWNvcmRlZE9wLCBmYWxzZSk7CiAgICAgICAgIEVYUEVDVF9FUShSZWN0KC0xMCwgLTIwLCA4MCwgMTYwKSwgc3RhdGUuY29tcHV0ZUxvY2FsU3BhY2VDbGlwKCkpCiAgICAgICAgICAgICA8PCAiTG9jYWwgY2xpcCByZWN0IHNob3VsZCBiZSA5MHgxOTAsIG9mZnNldCBieSAtMTAsLTIwIjsKICAgICB9CkBAIC0xNDksNiArMTU0LDcgQEAKIH07CiAKIFRFU1QoUmVzb2x2ZWRSZW5kZXJTdGF0ZSwgY29uc3RydWN0X2V4cGFuZEZvclN0cm9rZSkgeworICAgIExpbmVhckFsbG9jYXRvciBhbGxvY2F0b3I7CiAgICAgLy8gTG9vcCBvdmVyIHRhYmxlIG9mIHRlc3QgY2FzZXMgYW5kIHZlcmlmeSBkaWZmZXJlbnQgY29tYmluYXRpb25zIG9mIHN0cm9rZSB3aWR0aCBhbmQgdHJhbnNmb3JtCiAgICAgZm9yIChhdXRvJiYgdGVzdENhc2UgOiBzU3Ryb2tlVGVzdENhc2VzKSB7CiAgICAgICAgIFNrUGFpbnQgc3Ryb2tlZFBhaW50OwpAQCAtMTU2LDE0ICsxNjIsMTUgQEAKICAgICAgICAgc3Ryb2tlZFBhaW50LnNldFN0eWxlKFNrUGFpbnQ6OmtTdHJva2VfU3R5bGUpOwogICAgICAgICBzdHJva2VkUGFpbnQuc2V0U3Ryb2tlV2lkdGgodGVzdENhc2Uuc3Ryb2tlV2lkdGgpOwogCisgICAgICAgIENsaXBSZWN0IGNsaXAoUmVjdCgyMDAsIDIwMCkpOwogICAgICAgICBSZWN0T3AgcmVjb3JkZWRPcChSZWN0KDUwLCA1MCwgMTUwLCAxNTApLAotICAgICAgICAgICAgICAgIE1hdHJpeDQ6OmlkZW50aXR5KCksIFJlY3QoMjAwLCAyMDApLCAmc3Ryb2tlZFBhaW50KTsKKyAgICAgICAgICAgICAgICBNYXRyaXg0OjppZGVudGl0eSgpLCAmY2xpcCwgJnN0cm9rZWRQYWludCk7CiAKICAgICAgICAgTWF0cml4NCBzbmFwc2hvdE1hdHJpeDsKICAgICAgICAgc25hcHNob3RNYXRyaXgubG9hZFNjYWxlKHRlc3RDYXNlLnNjYWxlLCB0ZXN0Q2FzZS5zY2FsZSwgMSk7CiAgICAgICAgIGF1dG8gcGFyZW50U25hcHNob3QgPSBUZXN0VXRpbHM6Om1ha2VTbmFwc2hvdChzbmFwc2hvdE1hdHJpeCwgUmVjdCgyMDAsIDIwMCkpOwogCi0gICAgICAgIFJlc29sdmVkUmVuZGVyU3RhdGUgc3RhdGUoKnBhcmVudFNuYXBzaG90LCByZWNvcmRlZE9wLCB0cnVlKTsKKyAgICAgICAgUmVzb2x2ZWRSZW5kZXJTdGF0ZSBzdGF0ZShhbGxvY2F0b3IsICpwYXJlbnRTbmFwc2hvdCwgcmVjb3JkZWRPcCwgdHJ1ZSk7CiAgICAgICAgIHRlc3RDYXNlLnZhbGlkYXRvcihzdGF0ZSk7CiAgICAgfQogfQpAQCAtMTc1LDggKzE4Miw5IEBACiAgICAgdHJhbnNsYXRlMTAweDAubG9hZFRyYW5zbGF0ZSgxMDAsIDAsIDApOwogCiAgICAgU2tQYWludCBwYWludDsKKyAgICBDbGlwUmVjdCBjbGlwKFJlY3QoMTAwLCAyMDApKTsKICAgICB7Ci0gICAgICAgIFJlY3RPcCByZWplY3RPcChSZWN0KDMwLCA0MCwgMTAwLCAyMDApLCB0cmFuc2xhdGUxMDB4MCwgUmVjdCgxMDAsIDIwMCksICZwYWludCk7CisgICAgICAgIFJlY3RPcCByZWplY3RPcChSZWN0KDMwLCA0MCwgMTAwLCAyMDApLCB0cmFuc2xhdGUxMDB4MCwgJmNsaXAsICZwYWludCk7CiAgICAgICAgIGF1dG8gc25hcHNob3QgPSBUZXN0VXRpbHM6Om1ha2VTbmFwc2hvdChNYXRyaXg0OjppZGVudGl0eSgpLCBSZWN0KDEwMCwgMjAwKSk7CiAgICAgICAgIEJha2VkT3BTdGF0ZSogYmFrZWRTdGF0ZSA9IEJha2VkT3BTdGF0ZTo6dHJ5Q29uc3RydWN0KGFsbG9jYXRvciwgKnNuYXBzaG90LCByZWplY3RPcCk7CiAKQEAgLTE4NCw3ICsxOTIsNyBAQAogICAgICAgICBFWFBFQ1RfR1QoOHUsIGFsbG9jYXRvci51c2VkU2l6ZSgpKTsgLy8gbm8gc2lnbmlmaWNhbnQgYWxsb2NhdGlvbiBzcGFjZSB1c2VkIGZvciByZWplY3RlZCBvcAogICAgIH0KICAgICB7Ci0gICAgICAgIFJlY3RPcCBzdWNjZXNzT3AoUmVjdCgzMCwgNDAsIDEwMCwgMjAwKSwgTWF0cml4NDo6aWRlbnRpdHkoKSwgUmVjdCgxMDAsIDIwMCksICZwYWludCk7CisgICAgICAgIFJlY3RPcCBzdWNjZXNzT3AoUmVjdCgzMCwgNDAsIDEwMCwgMjAwKSwgTWF0cml4NDo6aWRlbnRpdHkoKSwgJmNsaXAsICZwYWludCk7CiAgICAgICAgIGF1dG8gc25hcHNob3QgPSBUZXN0VXRpbHM6Om1ha2VTbmFwc2hvdChNYXRyaXg0OjppZGVudGl0eSgpLCBSZWN0KDEwMCwgMjAwKSk7CiAgICAgICAgIEJha2VkT3BTdGF0ZSogYmFrZWRTdGF0ZSA9IEJha2VkT3BTdGF0ZTo6dHJ5Q29uc3RydWN0KGFsbG9jYXRvciwgKnNuYXBzaG90LCBzdWNjZXNzT3ApOwogCkBAIC0yMTgsNyArMjI2LDggQEAKICAgICAgICAgU2tQYWludCBwYWludDsKICAgICAgICAgcGFpbnQuc2V0U3R5bGUoU2tQYWludDo6a1N0cm9rZUFuZEZpbGxfU3R5bGUpOwogICAgICAgICBwYWludC5zZXRTdHJva2VXaWR0aCgwLjBmKTsKLSAgICAgICAgUmVjdE9wIHJlamVjdE9wKFJlY3QoMTAwLCAyMDApLCBNYXRyaXg0OjppZGVudGl0eSgpLCBSZWN0KDEwMCwgMjAwKSwgJnBhaW50KTsKKyAgICAgICAgQ2xpcFJlY3QgY2xpcChSZWN0KDEwMCwgMjAwKSk7CisgICAgICAgIFJlY3RPcCByZWplY3RPcChSZWN0KDEwMCwgMjAwKSwgTWF0cml4NDo6aWRlbnRpdHkoKSwgJmNsaXAsICZwYWludCk7CiAgICAgICAgIGF1dG8gc25hcHNob3QgPSBUZXN0VXRpbHM6Om1ha2VTbmFwc2hvdChNYXRyaXg0OjppZGVudGl0eSgpLCBSZWN0KCkpOyAvLyBOb3RlOiBlbXB0eSBjbGlwCiAgICAgICAgIGF1dG8gYmFrZWRTdGF0ZSA9IEJha2VkT3BTdGF0ZTo6dHJ5U3Ryb2tlYWJsZU9wQ29uc3RydWN0KGFsbG9jYXRvciwgKnNuYXBzaG90LCByZWplY3RPcCwKICAgICAgICAgICAgICAgICBCYWtlZE9wU3RhdGU6OlN0cm9rZUJlaGF2aW9yOjpTdHlsZURlZmluZWQpOwpAQCAtMjMxLDcgKzI0MCw4IEBACiAgICAgICAgIFNrUGFpbnQgcGFpbnQ7CiAgICAgICAgIHBhaW50LnNldFN0eWxlKFNrUGFpbnQ6OmtTdHJva2VBbmRGaWxsX1N0eWxlKTsKICAgICAgICAgcGFpbnQuc2V0U3Ryb2tlV2lkdGgoMTAuMGYpOwotICAgICAgICBSZWN0T3AgcmVqZWN0T3AoUmVjdCg1MCwgNTAsIDE1MCwgMTUwKSwgTWF0cml4NDo6aWRlbnRpdHkoKSwgUmVjdCgyMDAsIDIwMCksICZwYWludCk7CisgICAgICAgIENsaXBSZWN0IGNsaXAoUmVjdCgyMDAsIDIwMCkpOworICAgICAgICBSZWN0T3AgcmVqZWN0T3AoUmVjdCg1MCwgNTAsIDE1MCwgMTUwKSwgTWF0cml4NDo6aWRlbnRpdHkoKSwgJmNsaXAsICZwYWludCk7CiAgICAgICAgIGF1dG8gc25hcHNob3QgPSBUZXN0VXRpbHM6Om1ha2VTbmFwc2hvdChNYXRyaXg0OjppZGVudGl0eSgpLCBSZWN0KDIwMCwgMjAwKSk7CiAgICAgICAgIGF1dG8gYmFrZWRTdGF0ZSA9IEJha2VkT3BTdGF0ZTo6dHJ5U3Ryb2tlYWJsZU9wQ29uc3RydWN0KGFsbG9jYXRvciwgKnNuYXBzaG90LCByZWplY3RPcCwKICAgICAgICAgICAgICAgICBCYWtlZE9wU3RhdGU6OlN0cm9rZUJlaGF2aW9yOjpTdHlsZURlZmluZWQpOwpAQCAtMjQ1LDcgKzI1NSw4IEBACiAgICAgICAgIFNrUGFpbnQgcGFpbnQ7CiAgICAgICAgIHBhaW50LnNldFN0eWxlKFNrUGFpbnQ6OmtGaWxsX1N0eWxlKTsKICAgICAgICAgcGFpbnQuc2V0U3Ryb2tlV2lkdGgoMTAuMGYpOwotICAgICAgICBSZWN0T3AgcmVqZWN0T3AoUmVjdCg1MCwgNTAsIDE1MCwgMTUwKSwgTWF0cml4NDo6aWRlbnRpdHkoKSwgUmVjdCgyMDAsIDIwMCksICZwYWludCk7CisgICAgICAgIENsaXBSZWN0IGNsaXAoUmVjdCgyMDAsIDIwMCkpOworICAgICAgICBSZWN0T3AgcmVqZWN0T3AoUmVjdCg1MCwgNTAsIDE1MCwgMTUwKSwgTWF0cml4NDo6aWRlbnRpdHkoKSwgJmNsaXAsICZwYWludCk7CiAgICAgICAgIGF1dG8gc25hcHNob3QgPSBUZXN0VXRpbHM6Om1ha2VTbmFwc2hvdChNYXRyaXg0OjppZGVudGl0eSgpLCBSZWN0KDIwMCwgMjAwKSk7CiAgICAgICAgIGF1dG8gYmFrZWRTdGF0ZSA9IEJha2VkT3BTdGF0ZTo6dHJ5U3Ryb2tlYWJsZU9wQ29uc3RydWN0KGFsbG9jYXRvciwgKnNuYXBzaG90LCByZWplY3RPcCwKICAgICAgICAgICAgICAgICBCYWtlZE9wU3RhdGU6OlN0cm9rZUJlaGF2aW9yOjpGb3JjZWQpOwpkaWZmIC0tZ2l0IGEvbGlicy9od3VpL3Rlc3RzL3VuaXQvQ2xpcEFyZWFUZXN0cy5jcHAgYi9saWJzL2h3dWkvdGVzdHMvdW5pdC9DbGlwQXJlYVRlc3RzLmNwcAppbmRleCBjNGQzMDVlLi40Y2FlNzM3IDEwMDY0NAotLS0gYS9saWJzL2h3dWkvdGVzdHMvdW5pdC9DbGlwQXJlYVRlc3RzLmNwcAorKysgYi9saWJzL2h3dWkvdGVzdHMvdW5pdC9DbGlwQXJlYVRlc3RzLmNwcApAQCAtMTE5LDUgKzExOSwxMjIgQEAKICAgICBFWFBFQ1RfRVEoZXhwZWN0ZWQsIGFyZWEuZ2V0Q2xpcFJlY3QoKSk7CiB9CiAKK1RFU1QoQ2xpcEFyZWEsIHNlcmlhbGl6ZUNsaXApIHsKKyAgICBDbGlwQXJlYSBhcmVhKGNyZWF0ZUNsaXBBcmVhKCkpOworICAgIExpbmVhckFsbG9jYXRvciBhbGxvY2F0b3I7CisKKyAgICAvLyB1bnNldCBjbGlwCisgICAgRVhQRUNUX0VRKG51bGxwdHIsIGFyZWEuc2VyaWFsaXplQ2xpcChhbGxvY2F0b3IpKTsKKworICAgIC8vIHJlY3QgY2xpcAorICAgIGFyZWEuc2V0Q2xpcCgwLCAwLCAyMDAsIDIwMCk7CisgICAgeworICAgICAgICBhdXRvIHNlcmlhbGl6ZWRDbGlwID0gYXJlYS5zZXJpYWxpemVDbGlwKGFsbG9jYXRvcik7CisgICAgICAgIEFTU0VSVF9ORShudWxscHRyLCBzZXJpYWxpemVkQ2xpcCk7CisgICAgICAgIEFTU0VSVF9FUShDbGlwTW9kZTo6UmVjdGFuZ2xlLCBzZXJpYWxpemVkQ2xpcC0+bW9kZSk7CisgICAgICAgIGF1dG8gY2xpcFJlY3QgPSByZWludGVycHJldF9jYXN0PGNvbnN0IENsaXBSZWN0Kj4oc2VyaWFsaXplZENsaXApOworICAgICAgICBBU1NFUlRfRVEoUmVjdCgyMDAsIDIwMCksIGNsaXBSZWN0LT5yZWN0KTsKKyAgICAgICAgRVhQRUNUX0VRKHNlcmlhbGl6ZWRDbGlwLCBhcmVhLnNlcmlhbGl6ZUNsaXAoYWxsb2NhdG9yKSkKKyAgICAgICAgICAgICAgICA8PCAiUmVxdWVyeSBvZiBjbGlwIG9uIHVubW9kaWZpZWQgQ2xpcEFyZWEgbXVzdCByZXR1cm4gc2FtZSBwb2ludGVyLiI7CisgICAgfQorCisgICAgLy8gcmVjdCBsaXN0CisgICAgTWF0cml4NCByb3RhdGU7CisgICAgcm90YXRlLmxvYWRSb3RhdGUoMi4wZik7CisgICAgYXJlYS5jbGlwUmVjdFdpdGhUcmFuc2Zvcm0oUmVjdCgyMDAsIDIwMCksICZyb3RhdGUsIFNrUmVnaW9uOjprSW50ZXJzZWN0X09wKTsKKyAgICB7CisgICAgICAgIGF1dG8gc2VyaWFsaXplZENsaXAgPSBhcmVhLnNlcmlhbGl6ZUNsaXAoYWxsb2NhdG9yKTsKKyAgICAgICAgQVNTRVJUX05FKG51bGxwdHIsIHNlcmlhbGl6ZWRDbGlwKTsKKyAgICAgICAgQVNTRVJUX0VRKENsaXBNb2RlOjpSZWN0YW5nbGVMaXN0LCBzZXJpYWxpemVkQ2xpcC0+bW9kZSk7CisgICAgICAgIGF1dG8gY2xpcFJlY3RMaXN0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBDbGlwUmVjdExpc3QqPihzZXJpYWxpemVkQ2xpcCk7CisgICAgICAgIEFTU0VSVF9FUSgyLCBjbGlwUmVjdExpc3QtPnJlY3RMaXN0LmdldFRyYW5zZm9ybWVkUmVjdGFuZ2xlc0NvdW50KCkpOworICAgICAgICBFWFBFQ1RfRVEoc2VyaWFsaXplZENsaXAsIGFyZWEuc2VyaWFsaXplQ2xpcChhbGxvY2F0b3IpKQorICAgICAgICAgICAgICAgIDw8ICJSZXF1ZXJ5IG9mIGNsaXAgb24gdW5tb2RpZmllZCBDbGlwQXJlYSBtdXN0IHJldHVybiBzYW1lIHBvaW50ZXIuIjsKKyAgICB9CisKKyAgICAvLyByZWdpb24KKyAgICBTa1BhdGggY2lyY2xlUGF0aDsKKyAgICBjaXJjbGVQYXRoLmFkZENpcmNsZSgxMDAsIDEwMCwgMTAwKTsKKyAgICBhcmVhLmNsaXBQYXRoV2l0aFRyYW5zZm9ybShjaXJjbGVQYXRoLCAmTWF0cml4NDo6aWRlbnRpdHkoKSwgU2tSZWdpb246OmtSZXBsYWNlX09wKTsKKyAgICB7CisgICAgICAgIGF1dG8gc2VyaWFsaXplZENsaXAgPSBhcmVhLnNlcmlhbGl6ZUNsaXAoYWxsb2NhdG9yKTsKKyAgICAgICAgQVNTRVJUX05FKG51bGxwdHIsIHNlcmlhbGl6ZWRDbGlwKTsKKyAgICAgICAgQVNTRVJUX0VRKENsaXBNb2RlOjpSZWdpb24sIHNlcmlhbGl6ZWRDbGlwLT5tb2RlKTsKKyAgICAgICAgYXV0byBjbGlwUmVnaW9uID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBDbGlwUmVnaW9uKj4oc2VyaWFsaXplZENsaXApOworICAgICAgICBBU1NFUlRfRVEoU2tJUmVjdDo6TWFrZVdIKDIwMCwgMjAwKSwgY2xpcFJlZ2lvbi0+cmVnaW9uLmdldEJvdW5kcygpKQorICAgICAgICAgICAgICAgIDw8ICJDbGlwIHJlZ2lvbiBzaG91bGQgYmUgMjAweDIwMCI7CisgICAgICAgIEVYUEVDVF9FUShzZXJpYWxpemVkQ2xpcCwgYXJlYS5zZXJpYWxpemVDbGlwKGFsbG9jYXRvcikpCisgICAgICAgICAgICAgICAgPDwgIlJlcXVlcnkgb2YgY2xpcCBvbiB1bm1vZGlmaWVkIENsaXBBcmVhIG11c3QgcmV0dXJuIHNhbWUgcG9pbnRlci4iOworICAgIH0KIH0KKworVEVTVChDbGlwQXJlYSwgc2VyaWFsaXplSW50ZXJzZWN0ZWRDbGlwKSB7CisgICAgQ2xpcEFyZWEgYXJlYShjcmVhdGVDbGlwQXJlYSgpKTsKKyAgICBMaW5lYXJBbGxvY2F0b3IgYWxsb2NhdG9yOworCisgICAgLy8gc2ltcGxlIHN0YXRlOworICAgIEVYUEVDVF9FUShudWxscHRyLCBhcmVhLnNlcmlhbGl6ZUludGVyc2VjdGVkQ2xpcChhbGxvY2F0b3IsIG51bGxwdHIsIE1hdHJpeDQ6OmlkZW50aXR5KCkpKTsKKyAgICBhcmVhLnNldENsaXAoMCwgMCwgMjAwLCAyMDApOworICAgIHsKKyAgICAgICAgYXV0byBvcmlnUmVjdENsaXAgPSBhcmVhLnNlcmlhbGl6ZUNsaXAoYWxsb2NhdG9yKTsKKyAgICAgICAgQVNTRVJUX05FKG51bGxwdHIsIG9yaWdSZWN0Q2xpcCk7CisgICAgICAgIEVYUEVDVF9FUShvcmlnUmVjdENsaXAsIGFyZWEuc2VyaWFsaXplSW50ZXJzZWN0ZWRDbGlwKGFsbG9jYXRvciwgbnVsbHB0ciwgTWF0cml4NDo6aWRlbnRpdHkoKSkpOworICAgIH0KKworICAgIC8vIHJlY3QKKyAgICB7CisgICAgICAgIENsaXBSZWN0IHJlY29yZGVkQ2xpcChSZWN0KDEwMCwgMTAwKSk7CisgICAgICAgIE1hdHJpeDQgdHJhbnNsYXRlU2NhbGU7CisgICAgICAgIHRyYW5zbGF0ZVNjYWxlLmxvYWRUcmFuc2xhdGUoMTAwLCAxMDAsIDApOworICAgICAgICB0cmFuc2xhdGVTY2FsZS5zY2FsZSgyLCAzLCAxKTsKKyAgICAgICAgYXV0byByZXNvbHZlZENsaXAgPSBhcmVhLnNlcmlhbGl6ZUludGVyc2VjdGVkQ2xpcChhbGxvY2F0b3IsICZyZWNvcmRlZENsaXAsIHRyYW5zbGF0ZVNjYWxlKTsKKyAgICAgICAgQVNTRVJUX05FKG51bGxwdHIsIHJlc29sdmVkQ2xpcCk7CisgICAgICAgIEFTU0VSVF9FUShDbGlwTW9kZTo6UmVjdGFuZ2xlLCByZXNvbHZlZENsaXAtPm1vZGUpOworICAgICAgICBFWFBFQ1RfRVEoUmVjdCgxMDAsIDEwMCwgMjAwLCAyMDApLAorICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ2xpcFJlY3QqPihyZXNvbHZlZENsaXApLT5yZWN0KTsKKworICAgICAgICBFWFBFQ1RfRVEocmVzb2x2ZWRDbGlwLCBhcmVhLnNlcmlhbGl6ZUludGVyc2VjdGVkQ2xpcChhbGxvY2F0b3IsICZyZWNvcmRlZENsaXAsIHRyYW5zbGF0ZVNjYWxlKSkKKyAgICAgICAgICAgICAgICA8PCAiTXVzdCByZXR1cm4gcHJldmlvdXMgc2VyaWFsaXphdGlvbiwgc2luY2UgaW5wdXQgaXMgc2FtZSI7CisKKyAgICAgICAgQ2xpcFJlY3QgcmVjb3JkZWRDbGlwMihSZWN0KDEwMCwgMTAwKSk7CisgICAgICAgIEVYUEVDVF9ORShyZXNvbHZlZENsaXAsIGFyZWEuc2VyaWFsaXplSW50ZXJzZWN0ZWRDbGlwKGFsbG9jYXRvciwgJnJlY29yZGVkQ2xpcDIsIHRyYW5zbGF0ZVNjYWxlKSkKKyAgICAgICAgICAgICAgICA8PCAiU2hvdWxkbid0IHJldHVybiBwcmV2aW91cyBzZXJpYWxpemF0aW9uLCBzaW5jZSBtYXRyaXggbG9jYXRpb24gaXMgZGlmZmVyZW50IjsKKyAgICB9CisKKyAgICAvLyByZWN0IGxpc3QKKyAgICBNYXRyaXg0IHJvdGF0ZTsKKyAgICByb3RhdGUubG9hZFJvdGF0ZSgyLjBmKTsKKyAgICBhcmVhLmNsaXBSZWN0V2l0aFRyYW5zZm9ybShSZWN0KDIwMCwgMjAwKSwgJnJvdGF0ZSwgU2tSZWdpb246OmtJbnRlcnNlY3RfT3ApOworICAgIHsKKyAgICAgICAgQ2xpcFJlY3QgcmVjb3JkZWRDbGlwKFJlY3QoMTAwLCAxMDApKTsKKyAgICAgICAgYXV0byByZXNvbHZlZENsaXAgPSBhcmVhLnNlcmlhbGl6ZUludGVyc2VjdGVkQ2xpcChhbGxvY2F0b3IsICZyZWNvcmRlZENsaXAsIE1hdHJpeDQ6OmlkZW50aXR5KCkpOworICAgICAgICBBU1NFUlRfTkUobnVsbHB0ciwgcmVzb2x2ZWRDbGlwKTsKKyAgICAgICAgQVNTRVJUX0VRKENsaXBNb2RlOjpSZWN0YW5nbGVMaXN0LCByZXNvbHZlZENsaXAtPm1vZGUpOworICAgICAgICBhdXRvIGNsaXBSZWN0TGlzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ2xpcFJlY3RMaXN0Kj4ocmVzb2x2ZWRDbGlwKTsKKyAgICAgICAgRVhQRUNUX0VRKDIsIGNsaXBSZWN0TGlzdC0+cmVjdExpc3QuZ2V0VHJhbnNmb3JtZWRSZWN0YW5nbGVzQ291bnQoKSk7CisgICAgfQorCisgICAgLy8gcmVnaW9uCisgICAgU2tQYXRoIGNpcmNsZVBhdGg7CisgICAgY2lyY2xlUGF0aC5hZGRDaXJjbGUoMTAwLCAxMDAsIDEwMCk7CisgICAgYXJlYS5jbGlwUGF0aFdpdGhUcmFuc2Zvcm0oY2lyY2xlUGF0aCwgJk1hdHJpeDQ6OmlkZW50aXR5KCksIFNrUmVnaW9uOjprUmVwbGFjZV9PcCk7CisgICAgeworICAgICAgICBTa1BhdGggb3ZhbFBhdGg7CisgICAgICAgIG92YWxQYXRoLmFkZE92YWwoU2tSZWN0OjpNYWtlTFRSQig1MCwgMCwgMTUwLCAyMDApKTsKKworICAgICAgICBDbGlwUmVnaW9uIHJlY29yZGVkQ2xpcDsKKyAgICAgICAgcmVjb3JkZWRDbGlwLnJlZ2lvbi5zZXRQYXRoKG92YWxQYXRoLCBTa1JlZ2lvbihTa0lSZWN0OjpNYWtlV0goMjAwLCAyMDApKSk7CisKKyAgICAgICAgTWF0cml4NCB0cmFuc2xhdGUxMHgyMDsKKyAgICAgICAgdHJhbnNsYXRlMTB4MjAubG9hZFRyYW5zbGF0ZSgxMCwgMjAsIDApOworICAgICAgICBhdXRvIHJlc29sdmVkQ2xpcCA9IGFyZWEuc2VyaWFsaXplSW50ZXJzZWN0ZWRDbGlwKGFsbG9jYXRvciwgJnJlY29yZGVkQ2xpcCwKKyAgICAgICAgICAgICAgICB0cmFuc2xhdGUxMHgyMCk7IC8vIE5vdGU6IG9ubHkgdHJhbnNsYXRlIGZvciBub3csIG90aGVycyBub3QgaGFuZGxlZCBjb3JyZWN0bHkKKyAgICAgICAgQVNTRVJUX05FKG51bGxwdHIsIHJlc29sdmVkQ2xpcCk7CisgICAgICAgIEFTU0VSVF9FUShDbGlwTW9kZTo6UmVnaW9uLCByZXNvbHZlZENsaXAtPm1vZGUpOworICAgICAgICBhdXRvIGNsaXBSZWdpb24gPSByZWludGVycHJldF9jYXN0PGNvbnN0IENsaXBSZWdpb24qPihyZXNvbHZlZENsaXApOworICAgICAgICBFWFBFQ1RfRVEoU2tJUmVjdDo6TWFrZUxUUkIoNjAsIDIwLCAxNjAsIDIwMCksIGNsaXBSZWdpb24tPnJlZ2lvbi5nZXRCb3VuZHMoKSk7CisgICAgfQogfQorCit9IC8vIG5hbWVzcGFjZSB1aXJlbmRlcmVyCit9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9saWJzL2h3dWkvdGVzdHMvdW5pdC9MaW5lYXJBbGxvY2F0b3JUZXN0cy5jcHAgYi9saWJzL2h3dWkvdGVzdHMvdW5pdC9MaW5lYXJBbGxvY2F0b3JUZXN0cy5jcHAKaW5kZXggNzhkNjVkZC4uNWM0NDI5MDEwIDEwMDY0NAotLS0gYS9saWJzL2h3dWkvdGVzdHMvdW5pdC9MaW5lYXJBbGxvY2F0b3JUZXN0cy5jcHAKKysrIGIvbGlicy9od3VpL3Rlc3RzL3VuaXQvTGluZWFyQWxsb2NhdG9yVGVzdHMuY3BwCkBAIC0yNyw3ICsyNyw3IEBACiAgICAgaW50IHR3byA9IDI7CiB9OwogCi1URVNUKExpbmVhckFsbG9jYXRvciwgYWxsb2MpIHsKK1RFU1QoTGluZWFyQWxsb2NhdG9yLCBjcmVhdGUpIHsKICAgICBMaW5lYXJBbGxvY2F0b3IgbGE7CiAgICAgRVhQRUNUX0VRKDB1LCBsYS51c2VkU2l6ZSgpKTsKICAgICBsYS5hbGxvYyg2NCk7CkBAIC0zNSw3ICszNSw3IEBACiAgICAgLy8gc28gdGhlIHVzZWRTaXplIGlzbid0IHN0cmljdGx5IGRlZmluZWQKICAgICBFWFBFQ1RfTEUoNjR1LCBsYS51c2VkU2l6ZSgpKTsKICAgICBFWFBFQ1RfR1QoODB1LCBsYS51c2VkU2l6ZSgpKTsKLSAgICBhdXRvIHBhaXIgPSBsYS5hbGxvYzxTaW1wbGVQYWlyPigpOworICAgIGF1dG8gcGFpciA9IGxhLmNyZWF0ZTxTaW1wbGVQYWlyPigpOwogICAgIEVYUEVDVF9MRSg2NHUgKyBzaXplb2YoU2ltcGxlUGFpciksIGxhLnVzZWRTaXplKCkpOwogICAgIEVYUEVDVF9HVCg4MHUgKyBzaXplb2YoU2ltcGxlUGFpciksIGxhLnVzZWRTaXplKCkpOwogICAgIEVYUEVDVF9FUSgxLCBwYWlyLT5vbmUpOwpAQCAtNDcsOCArNDcsOCBAQAogICAgIHsKICAgICAgICAgTGluZWFyQWxsb2NhdG9yIGxhOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDU7IGkrKykgewotICAgICAgICAgICAgbGEuYWxsb2M8VGVzdFV0aWxzOjpTaWduYWxpbmdEdG9yPigpLT5zZXRTaWduYWwoZGVzdHJveWVkICsgaSk7Ci0gICAgICAgICAgICBsYS5hbGxvYzxTaW1wbGVQYWlyPigpOworICAgICAgICAgICAgbGEuY3JlYXRlPFRlc3RVdGlsczo6U2lnbmFsaW5nRHRvcj4oKS0+c2V0U2lnbmFsKGRlc3Ryb3llZCArIGkpOworICAgICAgICAgICAgbGEuY3JlYXRlPFNpbXBsZVBhaXI+KCk7CiAgICAgICAgIH0KICAgICAgICAgbGEuYWxsb2MoMTAwKTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA1OyBpKyspIHsKQEAgLTc1LDcgKzc1LDcgQEAKICAgICAgICAgbGEucmV3aW5kSWZMYXN0QWxsb2MoYWRkciwgMTAwKTsKICAgICAgICAgRVhQRUNUX0dUKDE2dSwgbGEudXNlZFNpemUoKSk7CiAgICAgICAgIHNpemVfdCBlbXB0eVNpemUgPSBsYS51c2VkU2l6ZSgpOwotICAgICAgICBhdXRvIHNpZ2R0b3IgPSBsYS5hbGxvYzxUZXN0VXRpbHM6OlNpZ25hbGluZ0R0b3I+KCk7CisgICAgICAgIGF1dG8gc2lnZHRvciA9IGxhLmNyZWF0ZTxUZXN0VXRpbHM6OlNpZ25hbGluZ0R0b3I+KCk7CiAgICAgICAgIHNpZ2R0b3ItPnNldFNpZ25hbCgmZGVzdHJveWVkKTsKICAgICAgICAgRVhQRUNUX0VRKDAsIGRlc3Ryb3llZCk7CiAgICAgICAgIEVYUEVDVF9MRShlbXB0eVNpemUsIGxhLnVzZWRTaXplKCkpOwpkaWZmIC0tZ2l0IGEvbGlicy9od3VpL3Rlc3RzL3VuaXQvT3BSZW9yZGVyZXJUZXN0cy5jcHAgYi9saWJzL2h3dWkvdGVzdHMvdW5pdC9PcFJlb3JkZXJlclRlc3RzLmNwcAppbmRleCAyODhmOGFmLi42NmRjY2I0IDEwMDY0NAotLS0gYS9saWJzL2h3dWkvdGVzdHMvdW5pdC9PcFJlb3JkZXJlclRlc3RzLmNwcAorKysgYi9saWJzL2h3dWkvdGVzdHMvdW5pdC9PcFJlb3JkZXJlclRlc3RzLmNwcApAQCAtNjQsMTQgKzY0LDE0IEBACiAgICAgICAgIEFERF9GQUlMVVJFKCkgPDwgIkxheWVyIHVwZGF0ZXMgbm90IGV4cGVjdGVkIGluIHRoaXMgdGVzdCI7CiAgICAgfQogICAgIHZpcnR1YWwgdm9pZCBzdGFydEZyYW1lKHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQsIGNvbnN0IFJlY3QmIHJlcGFpbnRSZWN0KSB7fQotICAgIHZpcnR1YWwgdm9pZCBlbmRGcmFtZSgpIHt9CisgICAgdmlydHVhbCB2b2lkIGVuZEZyYW1lKGNvbnN0IFJlY3QmIHJlcGFpbnRSZWN0KSB7fQogCiAgICAgLy8gZGVmaW5lIHZpcnR1YWwgZGVmYXVsdHMgZm9yIHNpbmdsZSBkcmF3IG1ldGhvZHMKICNkZWZpbmUgWChUeXBlKSBcCiAgICAgdmlydHVhbCB2b2lkIG9uIyNUeXBlKGNvbnN0IFR5cGUmLCBjb25zdCBCYWtlZE9wU3RhdGUmKSB7IFwKICAgICAgICAgQUREX0ZBSUxVUkUoKSA8PCAjVHlwZSAiIG5vdCBleHBlY3RlZCBpbiB0aGlzIHRlc3QiOyBcCiAgICAgfQotICAgIE1BUF9PUFMoWCkKKyAgICBNQVBfUkVOREVSQUJMRV9PUFMoWCkKICN1bmRlZiBYCiAKICAgICAvLyBkZWZpbmUgdmlydHVhbCBkZWZhdWx0cyBmb3IgbWVyZ2VkIGRyYXcgbWV0aG9kcwpAQCAtNzksNyArNzksNyBAQAogICAgIHZpcnR1YWwgdm9pZCBvbk1lcmdlZCMjVHlwZSMjcyhjb25zdCBNZXJnZWRCYWtlZE9wTGlzdCYgb3BMaXN0KSB7IFwKICAgICAgICAgQUREX0ZBSUxVUkUoKSA8PCAiTWVyZ2VkICIgI1R5cGUgInMgbm90IGV4cGVjdGVkIGluIHRoaXMgdGVzdCI7IFwKICAgICB9Ci0gICAgTUFQX01FUkdFRF9PUFMoWCkKKyAgICBNQVBfTUVSR0VBQkxFX09QUyhYKQogI3VuZGVmIFgKIAogICAgIGludCBnZXRJbmRleCgpIHsgcmV0dXJuIG1JbmRleDsgfQpAQCAtOTksNyArOTksNyBAQAogICAgIHN0YXRpYyB2b2lkIG9uIyNUeXBlKFRlc3RSZW5kZXJlckJhc2UmIHJlbmRlcmVyLCBjb25zdCBUeXBlJiBvcCwgY29uc3QgQmFrZWRPcFN0YXRlJiBzdGF0ZSkgeyBcCiAgICAgICAgIHJlbmRlcmVyLm9uIyNUeXBlKG9wLCBzdGF0ZSk7IFwKICAgICB9Ci0gICAgTUFQX09QUyhYKTsKKyAgICBNQVBfUkVOREVSQUJMRV9PUFMoWCk7CiAjdW5kZWYgWAogCiAgICAgLy8gZGVmaW5lIG1lcmdlZCBvcCBtZXRob2RzLCB3aGljaCByZWRpcmVjdCB0byBUZXN0UmVuZGVyZXJCYXNlCkBAIC0xMDcsNyArMTA3LDcgQEAKICAgICBzdGF0aWMgdm9pZCBvbk1lcmdlZCMjVHlwZSMjcyhUZXN0UmVuZGVyZXJCYXNlJiByZW5kZXJlciwgY29uc3QgTWVyZ2VkQmFrZWRPcExpc3QmIG9wTGlzdCkgeyBcCiAgICAgICAgIHJlbmRlcmVyLm9uTWVyZ2VkIyNUeXBlIyNzKG9wTGlzdCk7IFwKICAgICB9Ci0gICAgTUFQX01FUkdFRF9PUFMoWCk7CisgICAgTUFQX01FUkdFQUJMRV9PUFMoWCk7CiAjdW5kZWYgWAogfTsKIApAQCAtMTI3LDcgKzEyNyw3IEBACiAgICAgICAgIHZvaWQgb25CaXRtYXBPcChjb25zdCBCaXRtYXBPcCYgb3AsIGNvbnN0IEJha2VkT3BTdGF0ZSYgc3RhdGUpIG92ZXJyaWRlIHsKICAgICAgICAgICAgIEVYUEVDVF9FUSgyLCBtSW5kZXgrKyk7CiAgICAgICAgIH0KLSAgICAgICAgdm9pZCBlbmRGcmFtZSgpIG92ZXJyaWRlIHsKKyAgICAgICAgdm9pZCBlbmRGcmFtZShjb25zdCBSZWN0JiByZXBhaW50UmVjdCkgb3ZlcnJpZGUgewogICAgICAgICAgICAgRVhQRUNUX0VRKDMsIG1JbmRleCsrKTsKICAgICAgICAgfQogICAgIH07CkBAIC0yMjIsNiArMjIyLDQ2IEBACiAgICAgICAgICAgICA8PCAiRXhwZWN0IG51bWJlciBvZiBvcHMgPSAyICogbG9vcCBjb3VudCI7CiB9CiAKK1RFU1QoT3BSZW9yZGVyZXIsIGNsaXBwZWRNZXJnaW5nKSB7CisgICAgY2xhc3MgQ2xpcHBlZE1lcmdpbmdUZXN0UmVuZGVyZXIgOiBwdWJsaWMgVGVzdFJlbmRlcmVyQmFzZSB7CisgICAgcHVibGljOgorICAgICAgICB2b2lkIG9uTWVyZ2VkQml0bWFwT3BzKGNvbnN0IE1lcmdlZEJha2VkT3BMaXN0JiBvcExpc3QpIG92ZXJyaWRlIHsKKyAgICAgICAgICAgIEVYUEVDVF9FUSgwLCBtSW5kZXgpOworICAgICAgICAgICAgbUluZGV4ICs9IG9wTGlzdC5jb3VudDsKKyAgICAgICAgICAgIEVYUEVDVF9FUSg0dSwgb3BMaXN0LmNvdW50KTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShSZWN0KDEwLCAxMCwgOTAsIDkwKSwgb3BMaXN0LmNsaXApOworICAgICAgICAgICAgRVhQRUNUX0VRKE9wQ2xpcFNpZGVGbGFnczo6TGVmdCB8IE9wQ2xpcFNpZGVGbGFnczo6VG9wIHwgT3BDbGlwU2lkZUZsYWdzOjpSaWdodCwKKyAgICAgICAgICAgICAgICAgICAgb3BMaXN0LmNsaXBTaWRlRmxhZ3MpOworICAgICAgICB9CisgICAgfTsKKyAgICBhdXRvIG5vZGUgPSBUZXN0VXRpbHM6OmNyZWF0ZU5vZGUoMCwgMCwgMTAwLCAxMDAsCisgICAgICAgICAgICBbXShSZW5kZXJQcm9wZXJ0aWVzJiBwcm9wcywgVGVzdENhbnZhcyYgY2FudmFzKSB7CisgICAgICAgIFNrQml0bWFwIGJpdG1hcCA9IFRlc3RVdGlsczo6Y3JlYXRlU2tCaXRtYXAoMjAsIDIwKTsKKworICAgICAgICAvLyBsZWZ0IHNpZGUgY2xpcHBlZCAodG8gaW5zZXQgbGVmdCBoYWxmKQorICAgICAgICBjYW52YXMuY2xpcFJlY3QoMTAsIDAsIDUwLCAxMDAsIFNrUmVnaW9uOjprUmVwbGFjZV9PcCk7CisgICAgICAgIGNhbnZhcy5kcmF3Qml0bWFwKGJpdG1hcCwgMCwgNDAsIG51bGxwdHIpOworCisgICAgICAgIC8vIHRvcCBzaWRlIGNsaXBwZWQgKHRvIGluc2V0IHRvcCBoYWxmKQorICAgICAgICBjYW52YXMuY2xpcFJlY3QoMCwgMTAsIDEwMCwgNTAsIFNrUmVnaW9uOjprUmVwbGFjZV9PcCk7CisgICAgICAgIGNhbnZhcy5kcmF3Qml0bWFwKGJpdG1hcCwgNDAsIDAsIG51bGxwdHIpOworCisgICAgICAgIC8vIHJpZ2h0IHNpZGUgY2xpcHBlZCAodG8gaW5zZXQgcmlnaHQgaGFsZikKKyAgICAgICAgY2FudmFzLmNsaXBSZWN0KDUwLCAwLCA5MCwgMTAwLCBTa1JlZ2lvbjo6a1JlcGxhY2VfT3ApOworICAgICAgICBjYW52YXMuZHJhd0JpdG1hcChiaXRtYXAsIDgwLCA0MCwgbnVsbHB0cik7CisKKyAgICAgICAgLy8gYm90dG9tIG5vdCBjbGlwcGVkLCBqdXN0IGFidXR0aW5nIChpbnNldCBib3R0b20gaGFsZikKKyAgICAgICAgY2FudmFzLmNsaXBSZWN0KDAsIDUwLCAxMDAsIDkwLCBTa1JlZ2lvbjo6a1JlcGxhY2VfT3ApOworICAgICAgICBjYW52YXMuZHJhd0JpdG1hcChiaXRtYXAsIDQwLCA3MCwgbnVsbHB0cik7CisgICAgfSk7CisKKyAgICBPcFJlb3JkZXJlciByZW9yZGVyZXIoc0VtcHR5TGF5ZXJVcGRhdGVRdWV1ZSwgU2tSZWN0OjpNYWtlV0goMTAwLCAxMDApLCAxMDAsIDEwMCwKKyAgICAgICAgICAgIGNyZWF0ZVN5bmNlZE5vZGVMaXN0KG5vZGUpLCBzTGlnaHRDZW50ZXIpOworICAgIENsaXBwZWRNZXJnaW5nVGVzdFJlbmRlcmVyIHJlbmRlcmVyOworICAgIHJlb3JkZXJlci5yZXBsYXlCYWtlZE9wczxUZXN0RGlzcGF0Y2hlcj4ocmVuZGVyZXIpOworICAgIEVYUEVDVF9FUSg0LCByZW5kZXJlci5nZXRJbmRleCgpKTsKK30KKwogVEVTVChPcFJlb3JkZXJlciwgdGV4dE1lcmdpbmcpIHsKICAgICBjbGFzcyBUZXh0TWVyZ2luZ1Rlc3RSZW5kZXJlciA6IHB1YmxpYyBUZXN0UmVuZGVyZXJCYXNlIHsKICAgICBwdWJsaWM6CkBAIC0yODcsNyArMzI3LDcgQEAKICAgICBwdWJsaWM6CiAgICAgICAgIHZvaWQgb25UZXh0dXJlTGF5ZXJPcChjb25zdCBUZXh0dXJlTGF5ZXJPcCYgb3AsIGNvbnN0IEJha2VkT3BTdGF0ZSYgc3RhdGUpIG92ZXJyaWRlIHsKICAgICAgICAgICAgIEVYUEVDVF9FUSgwLCBtSW5kZXgrKyk7Ci0gICAgICAgICAgICBFWFBFQ1RfRVEoUmVjdCg1MCwgNTAsIDE1MCwgMTUwKSwgc3RhdGUuY29tcHV0ZWRTdGF0ZS5jbGlwUmVjdCk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoUmVjdCg1MCwgNTAsIDE1MCwgMTUwKSwgc3RhdGUuY29tcHV0ZWRTdGF0ZS5jbGlwUmVjdCgpKTsKICAgICAgICAgICAgIEVYUEVDVF9FUShSZWN0KDUwLCA1MCwgMTA1LCAxMDUpLCBzdGF0ZS5jb21wdXRlZFN0YXRlLmNsaXBwZWRCb3VuZHMpOwogCiAgICAgICAgICAgICBNYXRyaXg0IGV4cGVjdGVkOwpAQCAtMzY1LDcgKzQwNSw3IEBACiAgICAgICAgIHZvaWQgb25CaXRtYXBPcChjb25zdCBCaXRtYXBPcCYgb3AsIGNvbnN0IEJha2VkT3BTdGF0ZSYgc3RhdGUpIG92ZXJyaWRlIHsKICAgICAgICAgICAgIEVYUEVDVF9FUSgwLCBtSW5kZXgrKyk7CiAgICAgICAgICAgICBFWFBFQ1RfRVEoUmVjdCgxMCwgMjAsIDMwLCA0MCksIHN0YXRlLmNvbXB1dGVkU3RhdGUuY2xpcHBlZEJvdW5kcyk7Ci0gICAgICAgICAgICBFWFBFQ1RfRVEoUmVjdCgxMCwgMjAsIDMwLCA0MCksIHN0YXRlLmNvbXB1dGVkU3RhdGUuY2xpcFJlY3QpOworICAgICAgICAgICAgRVhQRUNUX0VRKFJlY3QoMTAsIDIwLCAzMCwgNDApLCBzdGF0ZS5jb21wdXRlZFN0YXRlLmNsaXBSZWN0KCkpOwogICAgICAgICAgICAgRVhQRUNUX1RSVUUoc3RhdGUuY29tcHV0ZWRTdGF0ZS50cmFuc2Zvcm0uaXNJZGVudGl0eSgpKTsKICAgICAgICAgfQogICAgIH07CkBAIC0zOTksNyArNDM5LDcgQEAKICAgICAgICAgICAgIEVYUEVDVF9FUSgxLCBtSW5kZXgrKyk7CiAgICAgICAgICAgICBFWFBFQ1RfRVEoUmVjdCgxMCwgMTAsIDE5MCwgMTkwKSwgb3AudW5tYXBwZWRCb3VuZHMpOwogICAgICAgICAgICAgRVhQRUNUX0VRKFJlY3QoMTgwLCAxODApLCBzdGF0ZS5jb21wdXRlZFN0YXRlLmNsaXBwZWRCb3VuZHMpOwotICAgICAgICAgICAgRVhQRUNUX0VRKFJlY3QoMTgwLCAxODApLCBzdGF0ZS5jb21wdXRlZFN0YXRlLmNsaXBSZWN0KTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShSZWN0KDE4MCwgMTgwKSwgc3RhdGUuY29tcHV0ZWRTdGF0ZS5jbGlwUmVjdCgpKTsKIAogICAgICAgICAgICAgTWF0cml4NCBleHBlY3RlZFRyYW5zZm9ybTsKICAgICAgICAgICAgIGV4cGVjdGVkVHJhbnNmb3JtLmxvYWRUcmFuc2xhdGUoLTEwLCAtMTAsIDApOwpAQCAtNDA4LDcgKzQ0OCw3IEBACiAgICAgICAgIHZvaWQgb25MYXllck9wKGNvbnN0IExheWVyT3AmIG9wLCBjb25zdCBCYWtlZE9wU3RhdGUmIHN0YXRlKSBvdmVycmlkZSB7CiAgICAgICAgICAgICBFWFBFQ1RfRVEoMywgbUluZGV4KyspOwogICAgICAgICAgICAgRVhQRUNUX0VRKFJlY3QoMTAsIDEwLCAxOTAsIDE5MCksIHN0YXRlLmNvbXB1dGVkU3RhdGUuY2xpcHBlZEJvdW5kcyk7Ci0gICAgICAgICAgICBFWFBFQ1RfRVEoUmVjdCgyMDAsIDIwMCksIHN0YXRlLmNvbXB1dGVkU3RhdGUuY2xpcFJlY3QpOworICAgICAgICAgICAgRVhQRUNUX0VRKFJlY3QoMjAwLCAyMDApLCBzdGF0ZS5jb21wdXRlZFN0YXRlLmNsaXBSZWN0KCkpOwogICAgICAgICAgICAgRVhQRUNUX1RSVUUoc3RhdGUuY29tcHV0ZWRTdGF0ZS50cmFuc2Zvcm0uaXNJZGVudGl0eSgpKTsKICAgICAgICAgfQogICAgIH07CkBAIC00NTQsNyArNDk0LDcgQEAKICAgICAgICAgdm9pZCBzdGFydEZyYW1lKHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQsIGNvbnN0IFJlY3QmIHJlcGFpbnRSZWN0KSBvdmVycmlkZSB7CiAgICAgICAgICAgICBFWFBFQ1RfRVEoNywgbUluZGV4KyspOwogICAgICAgICB9Ci0gICAgICAgIHZvaWQgZW5kRnJhbWUoKSBvdmVycmlkZSB7CisgICAgICAgIHZvaWQgZW5kRnJhbWUoY29uc3QgUmVjdCYgcmVwYWludFJlY3QpIG92ZXJyaWRlIHsKICAgICAgICAgICAgIEVYUEVDVF9FUSg5LCBtSW5kZXgrKyk7CiAgICAgICAgIH0KICAgICAgICAgdm9pZCBvblJlY3RPcChjb25zdCBSZWN0T3AmIG9wLCBjb25zdCBCYWtlZE9wU3RhdGUmIHN0YXRlKSBvdmVycmlkZSB7CkBAIC01MzQsNyArNTc0LDcgQEAKICAgICAgICAgICAgIEVYUEVDVF9UUlVFKHN0YXRlLmNvbXB1dGVkU3RhdGUudHJhbnNmb3JtLmlzSWRlbnRpdHkoKSkKICAgICAgICAgICAgICAgICAgICAgPDwgIlRyYW5zZm9ybSBzaG91bGQgYmUgcmVzZXQgd2l0aGluIGxheWVyIjsKIAotICAgICAgICAgICAgRVhQRUNUX0VRKHN0YXRlLmNvbXB1dGVkU3RhdGUuY2xpcFJlY3QsIFJlY3QoMjUsIDI1LCA3NSwgNzUpKQorICAgICAgICAgICAgRVhQRUNUX0VRKFJlY3QoMjUsIDI1LCA3NSwgNzUpLCBzdGF0ZS5jb21wdXRlZFN0YXRlLmNsaXBSZWN0KCkpCiAgICAgICAgICAgICAgICAgICAgIDw8ICJEYW1hZ2UgcmVjdCBzaG91bGQgYmUgdXNlZCB0byBjbGlwIGxheWVyIGNvbnRlbnQiOwogICAgICAgICB9CiAgICAgICAgIHZvaWQgZW5kTGF5ZXIoKSBvdmVycmlkZSB7CkBAIC01NDYsNyArNTg2LDcgQEAKICAgICAgICAgdm9pZCBvbkxheWVyT3AoY29uc3QgTGF5ZXJPcCYgb3AsIGNvbnN0IEJha2VkT3BTdGF0ZSYgc3RhdGUpIG92ZXJyaWRlIHsKICAgICAgICAgICAgIEVYUEVDVF9FUSg0LCBtSW5kZXgrKyk7CiAgICAgICAgIH0KLSAgICAgICAgdm9pZCBlbmRGcmFtZSgpIG92ZXJyaWRlIHsKKyAgICAgICAgdm9pZCBlbmRGcmFtZShjb25zdCBSZWN0JiByZXBhaW50UmVjdCkgb3ZlcnJpZGUgewogICAgICAgICAgICAgRVhQRUNUX0VRKDUsIG1JbmRleCsrKTsKICAgICAgICAgfQogICAgIH07CkBAIC02MzUsNyArNjc1LDcgQEAKICAgICAgICAgICAgICAgICBFWFBFQ1RfRVEoMjAwdSwgbGF5ZXItPnZpZXdwb3J0SGVpZ2h0KTsKICAgICAgICAgICAgIH0gZWxzZSB7IEFERF9GQUlMVVJFKCk7IH0KICAgICAgICAgfQotICAgICAgICB2b2lkIGVuZEZyYW1lKCkgb3ZlcnJpZGUgeworICAgICAgICB2b2lkIGVuZEZyYW1lKGNvbnN0IFJlY3QmIHJlcGFpbnRSZWN0KSBvdmVycmlkZSB7CiAgICAgICAgICAgICBFWFBFQ1RfRVEoMTIsIG1JbmRleCsrKTsKICAgICAgICAgfQogICAgIH07CmRpZmYgLS1naXQgYS9saWJzL2h3dWkvdGVzdHMvdW5pdC9SZWNvcmRpbmdDYW52YXNUZXN0cy5jcHAgYi9saWJzL2h3dWkvdGVzdHMvdW5pdC9SZWNvcmRpbmdDYW52YXNUZXN0cy5jcHAKaW5kZXggMDhmOTI3Yy4uYTYzY2IxOCAxMDA2NDQKLS0tIGEvbGlicy9od3VpL3Rlc3RzL3VuaXQvUmVjb3JkaW5nQ2FudmFzVGVzdHMuY3BwCisrKyBiL2xpYnMvaHd1aS90ZXN0cy91bml0L1JlY29yZGluZ0NhbnZhc1Rlc3RzLmNwcApAQCAtMzMsNiArMzMsMTQgQEAKICAgICB9CiB9CiAKKyNkZWZpbmUgRVhQRUNUX0NMSVBfUkVDVChleHBSZWN0LCBjbGlwU3RhdGVQdHIpIFwKKyAgICBFWFBFQ1RfTkUobnVsbHB0ciwgKGNsaXBTdGF0ZVB0cikpIDw8ICJPcCBpcyB1bmNsaXBwZWQiOyBcCisgICAgaWYgKChjbGlwU3RhdGVQdHIpLT5tb2RlID09IENsaXBNb2RlOjpSZWN0YW5nbGUpIHsgXAorICAgICAgICBFWFBFQ1RfRVEoKGV4cFJlY3QpLCByZWludGVycHJldF9jYXN0PGNvbnN0IENsaXBSZWN0Kj4oY2xpcFN0YXRlUHRyKS0+cmVjdCk7IFwKKyAgICB9IGVsc2UgeyBcCisgICAgICAgIEFERF9GQUlMVVJFKCkgPDwgIkNsaXBTdGF0ZSBub3QgYSByZWN0IjsgXAorICAgIH0KKwogVEVTVChSZWNvcmRpbmdDYW52YXMsIGVtcHR5UGxheWJhY2spIHsKICAgICBhdXRvIGRsID0gVGVzdFV0aWxzOjpjcmVhdGVEaXNwbGF5TGlzdDxSZWNvcmRpbmdDYW52YXM+KDEwMCwgMjAwLCBbXShSZWNvcmRpbmdDYW52YXMmIGNhbnZhcykgewogICAgICAgICBjYW52YXMuc2F2ZShTa0NhbnZhczo6a01hdHJpeF9TYXZlRmxhZyB8IFNrQ2FudmFzOjprQ2xpcF9TYXZlRmxhZyk7CkBAIC00MSw2ICs0OSwyMiBAQAogICAgIHBsYXliYWNrT3BzKCpkbCwgW10oY29uc3QgUmVjb3JkZWRPcCYgb3ApIHsgQUREX0ZBSUxVUkUoKTsgfSk7CiB9CiAKK1RFU1QoUmVjb3JkaW5nQ2FudmFzLCBjbGlwUmVjdCkgeworICAgIGF1dG8gZGwgPSBUZXN0VXRpbHM6OmNyZWF0ZURpc3BsYXlMaXN0PFJlY29yZGluZ0NhbnZhcz4oMTAwLCAxMDAsIFtdKFJlY29yZGluZ0NhbnZhcyYgY2FudmFzKSB7CisgICAgICAgIGNhbnZhcy5zYXZlKFNrQ2FudmFzOjprTWF0cml4Q2xpcF9TYXZlRmxhZyk7CisgICAgICAgIGNhbnZhcy5jbGlwUmVjdCgwLCAwLCAxMDAsIDEwMCwgU2tSZWdpb246OmtJbnRlcnNlY3RfT3ApOworICAgICAgICBjYW52YXMuZHJhd1JlY3QoMCwgMCwgNTAsIDUwLCBTa1BhaW50KCkpOworICAgICAgICBjYW52YXMuZHJhd1JlY3QoNTAsIDUwLCAxMDAsIDEwMCwgU2tQYWludCgpKTsKKyAgICAgICAgY2FudmFzLnJlc3RvcmUoKTsKKyAgICB9KTsKKworICAgIEFTU0VSVF9FUSgydSwgZGwtPmdldE9wcygpLnNpemUoKSkgPDwgIk11c3QgYmUgZXhhY3RseSB0d28gb3BzIjsKKyAgICBFWFBFQ1RfQ0xJUF9SRUNUKFJlY3QoMTAwLCAxMDApLCBkbC0+Z2V0T3BzKClbMF0tPmxvY2FsQ2xpcCk7CisgICAgRVhQRUNUX0NMSVBfUkVDVChSZWN0KDEwMCwgMTAwKSwgZGwtPmdldE9wcygpWzFdLT5sb2NhbENsaXApOworICAgIEVYUEVDVF9FUShkbC0+Z2V0T3BzKClbMF0tPmxvY2FsQ2xpcCwgZGwtPmdldE9wcygpWzFdLT5sb2NhbENsaXApCisgICAgICAgICAgICA8PCAiQ2xpcCBzaG91bGQgYmUgc2VyaWFsaXplZCBvbmNlIjsKK30KKwogVEVTVChSZWNvcmRpbmdDYW52YXMsIGRyYXdMaW5lcykgewogICAgIGF1dG8gZGwgPSBUZXN0VXRpbHM6OmNyZWF0ZURpc3BsYXlMaXN0PFJlY29yZGluZ0NhbnZhcz4oMTAwLCAyMDAsIFtdKFJlY29yZGluZ0NhbnZhcyYgY2FudmFzKSB7CiAgICAgICAgIFNrUGFpbnQgcGFpbnQ7CkBAIC02Niw3ICs5MCw3IEBACiAgICAgQVNTRVJUX0VRKDF1LCBkbC0+Z2V0T3BzKCkuc2l6ZSgpKSA8PCAiTXVzdCBiZSBleGFjdGx5IG9uZSBvcCI7CiAgICAgYXV0byBvcCA9ICooZGwtPmdldE9wcygpWzBdKTsKICAgICBBU1NFUlRfRVEoUmVjb3JkZWRPcElkOjpSZWN0T3AsIG9wLm9wSWQpOwotICAgIEVYUEVDVF9FUShSZWN0KDEwMCwgMjAwKSwgb3AubG9jYWxDbGlwUmVjdCk7CisgICAgRVhQRUNUX0VRKG51bGxwdHIsIG9wLmxvY2FsQ2xpcCk7CiAgICAgRVhQRUNUX0VRKFJlY3QoMTAsIDIwLCA5MCwgMTgwKSwgb3AudW5tYXBwZWRCb3VuZHMpOwogfQogCkBAIC04Myw3ICsxMDcsNyBAQAogICAgIHBsYXliYWNrT3BzKCpkbCwgWyZjb3VudF0oY29uc3QgUmVjb3JkZWRPcCYgb3ApIHsKICAgICAgICAgY291bnQrKzsKICAgICAgICAgQVNTRVJUX0VRKFJlY29yZGVkT3BJZDo6VGV4dE9wLCBvcC5vcElkKTsKLSAgICAgICAgRVhQRUNUX0VRKFJlY3QoMjAwLCAyMDApLCBvcC5sb2NhbENsaXBSZWN0KTsKKyAgICAgICAgRVhQRUNUX0VRKG51bGxwdHIsIG9wLmxvY2FsQ2xpcCk7CiAgICAgICAgIEVYUEVDVF9UUlVFKG9wLmxvY2FsTWF0cml4LmlzSWRlbnRpdHkoKSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKG9wLnVubWFwcGVkQm91bmRzLmNvbnRhaW5zKDI1LCAxNSwgNTAsIDI1KSkKICAgICAgICAgICAgICAgICA8PCAiT3AgZXhwZWN0ZWQgdG8gYmUgMjUrIHBpeGVscyB3aWRlLCAxMCsgcGl4ZWxzIHRhbGwiOwpAQCAtMTg1LDcgKzIwOSw3IEBACiAgICAgICAgICAgICBBU1NFUlRfTkUobnVsbHB0ciwgb3AucGFpbnQpOwogICAgICAgICAgICAgRVhQRUNUX0VRKFNLX0NvbG9yQkxVRSwgb3AucGFpbnQtPmdldENvbG9yKCkpOwogICAgICAgICAgICAgRVhQRUNUX0VRKFJlY3QoMTAwLCAyMDApLCBvcC51bm1hcHBlZEJvdW5kcyk7Ci0gICAgICAgICAgICBFWFBFQ1RfRVEoUmVjdCgxMDAsIDIwMCksIG9wLmxvY2FsQ2xpcFJlY3QpOworICAgICAgICAgICAgRVhQRUNUX0VRKG51bGxwdHIsIG9wLmxvY2FsQ2xpcCk7CiAKICAgICAgICAgICAgIE1hdHJpeDQgZXhwZWN0ZWRNYXRyaXg7CiAgICAgICAgICAgICBleHBlY3RlZE1hdHJpeC5sb2FkSWRlbnRpdHkoKTsKQEAgLTE5NCw3ICsyMTgsNyBAQAogICAgICAgICAgICAgQVNTRVJUX0VRKFJlY29yZGVkT3BJZDo6Qml0bWFwT3AsIG9wLm9wSWQpOwogICAgICAgICAgICAgRVhQRUNUX0VRKG51bGxwdHIsIG9wLnBhaW50KTsKICAgICAgICAgICAgIEVYUEVDVF9FUShSZWN0KDI1LCAyNSksIG9wLnVubWFwcGVkQm91bmRzKTsKLSAgICAgICAgICAgIEVYUEVDVF9FUShSZWN0KDEwMCwgMjAwKSwgb3AubG9jYWxDbGlwUmVjdCk7CisgICAgICAgICAgICBFWFBFQ1RfRVEobnVsbHB0ciwgb3AubG9jYWxDbGlwKTsKIAogICAgICAgICAgICAgTWF0cml4NCBleHBlY3RlZE1hdHJpeDsKICAgICAgICAgICAgIGV4cGVjdGVkTWF0cml4LmxvYWRUcmFuc2xhdGUoMjUsIDI1LCAwKTsKQEAgLTIxOSwxMiArMjQzLDEyIEBACiAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgIEVYUEVDVF9FUShSZWNvcmRlZE9wSWQ6OkJlZ2luTGF5ZXJPcCwgb3Aub3BJZCk7CiAgICAgICAgICAgICBFWFBFQ1RfRVEoUmVjdCgxMCwgMjAsIDE5MCwgMTgwKSwgb3AudW5tYXBwZWRCb3VuZHMpOwotICAgICAgICAgICAgRVhQRUNUX0VRKFJlY3QoMjAwLCAyMDApLCBvcC5sb2NhbENsaXBSZWN0KTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShudWxscHRyLCBvcC5sb2NhbENsaXApOwogICAgICAgICAgICAgRVhQRUNUX1RSVUUob3AubG9jYWxNYXRyaXguaXNJZGVudGl0eSgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICBFWFBFQ1RfRVEoUmVjb3JkZWRPcElkOjpSZWN0T3AsIG9wLm9wSWQpOwotICAgICAgICAgICAgRVhQRUNUX0VRKFJlY3QoMTgwLCAxNjApLCBvcC5sb2NhbENsaXBSZWN0KTsKKyAgICAgICAgICAgIEVYUEVDVF9DTElQX1JFQ1QoUmVjdCgxODAsIDE2MCksIG9wLmxvY2FsQ2xpcCk7CiAgICAgICAgICAgICBFWFBFQ1RfRVEoUmVjdCgxMCwgMjAsIDE5MCwgMTgwKSwgb3AudW5tYXBwZWRCb3VuZHMpOwogICAgICAgICAgICAgZXhwZWN0ZWRNYXRyaXgubG9hZFRyYW5zbGF0ZSgtMTAsIC0yMCwgMCk7CiAgICAgICAgICAgICBFWFBFQ1RfTUFUUklYX0FQUFJPWF9FUShleHBlY3RlZE1hdHJpeCwgb3AubG9jYWxNYXRyaXgpOwpAQCAtMjU0LDggKzI3OCw4IEBACiAgICAgICAgIGlmIChjb3VudCsrID09IDEpIHsKICAgICAgICAgICAgIE1hdHJpeDQgZXhwZWN0ZWRNYXRyaXg7CiAgICAgICAgICAgICBFWFBFQ1RfRVEoUmVjb3JkZWRPcElkOjpSZWN0T3AsIG9wLm9wSWQpOwotICAgICAgICAgICAgRVhQRUNUX0VRKFJlY3QoMTAwLCAxMDApLCBvcC5sb2NhbENsaXBSZWN0KSA8PCAiUmVjb3JkZWQgY2xpcCByZWN0IHNob3VsZCBiZSIKLSAgICAgICAgICAgICAgICAgICAgIiBpbnRlcnNlY3Rpb24gb2Ygdmlld3BvcnQgYW5kIHNhdmVMYXllciBib3VuZHMsIGluIGxheWVyIHNwYWNlIjsKKyAgICAgICAgICAgIEVYUEVDVF9DTElQX1JFQ1QoUmVjdCgxMDAsIDEwMCksIG9wLmxvY2FsQ2xpcCkgLy8gUmVjb3JkZWQgY2xpcCByZWN0IHNob3VsZCBiZQorICAgICAgICAgICAgLy8gaW50ZXJzZWN0aW9uIG9mIHZpZXdwb3J0IGFuZCBzYXZlTGF5ZXIgYm91bmRzLCBpbiBsYXllciBzcGFjZTsKICAgICAgICAgICAgIEVYUEVDVF9FUShSZWN0KDQwMCwgNDAwKSwgb3AudW5tYXBwZWRCb3VuZHMpOwogICAgICAgICAgICAgZXhwZWN0ZWRNYXRyaXgubG9hZFRyYW5zbGF0ZSgtMTAwLCAtMTAwLCAwKTsKICAgICAgICAgICAgIEVYUEVDVF9NQVRSSVhfQVBQUk9YX0VRKGV4cGVjdGVkTWF0cml4LCBvcC5sb2NhbE1hdHJpeCk7CkBAIC0yODEsNyArMzA1LDcgQEAKICAgICBwbGF5YmFja09wcygqZGwsIFsmY291bnRdKGNvbnN0IFJlY29yZGVkT3AmIG9wKSB7CiAgICAgICAgIGlmIChjb3VudCsrID09IDEpIHsKICAgICAgICAgICAgIEVYUEVDVF9FUShSZWNvcmRlZE9wSWQ6OlJlY3RPcCwgb3Aub3BJZCk7Ci0gICAgICAgICAgICBFWFBFQ1RfRVEoUmVjdCgxMDAsIDEwMCksIG9wLmxvY2FsQ2xpcFJlY3QpOworICAgICAgICAgICAgRVhQRUNUX0NMSVBfUkVDVChSZWN0KDEwMCwgMTAwKSwgb3AubG9jYWxDbGlwKTsKICAgICAgICAgICAgIEVYUEVDVF9FUShSZWN0KDEwMCwgMTAwKSwgb3AudW5tYXBwZWRCb3VuZHMpOwogICAgICAgICAgICAgRVhQRUNUX01BVFJJWF9BUFBST1hfRVEoTWF0cml4NDo6aWRlbnRpdHkoKSwgb3AubG9jYWxNYXRyaXgpCiAgICAgICAgICAgICAgICAgICAgIDw8ICJSZWNvcmRlZCBvcCBzaG91bGRuJ3Qgc2VlIGFueSBjYW52YXMgdHJhbnNmb3JtIGJlZm9yZSB0aGUgc2F2ZUxheWVyIjsKQEAgLTMxMiw3ICszMzYsMTYgQEAKIAogICAgICAgICAgICAgLy8gLi4uYW5kIGdldCBhYm91dCA1OC42LCA1OC42LCAzNDEuNCAzNDEuNCwgYmVjYXVzZSB0aGUgYm91bmRzIGFyZSBjbGlwcGVkIGJ5CiAgICAgICAgICAgICAvLyB0aGUgcGFyZW50IDIwMHgyMDAgdmlld3BvcnQsIGJ1dCBwcmlvciB0byByb3RhdGlvbgotICAgICAgICAgICAgRVhQRUNUX1JFQ1RfQVBQUk9YX0VRKFJlY3QoNTguNTc4NjQsIDU4LjU3ODY0LCAzNDEuNDIxMzYsIDM0MS40MjEzNiksIG9wLmxvY2FsQ2xpcFJlY3QpOworICAgICAgICAgICAgQVNTRVJUX05FKG51bGxwdHIsIG9wLmxvY2FsQ2xpcCk7CisgICAgICAgICAgICBBU1NFUlRfRVEoQ2xpcE1vZGU6OlJlY3RhbmdsZSwgb3AubG9jYWxDbGlwLT5tb2RlKTsKKyAgICAgICAgICAgIC8vIE5PVEU6IHRoaXMgY2hlY2sgcmVsaWVzIG9uIHNhdmVMYXllciBhbHRlcmluZyB0aGUgY2xpcCBwb3N0LXZpZXdwb3J0IGluaXQuIFRoaXMKKyAgICAgICAgICAgIC8vIGNhdXNlcyB0aGUgY2xpcCB0byBiZSByZWNvcmRlZCBieSBjb250YWluZWQgZHJhdyBjb21tYW5kcywgdGhvdWdoIGl0J3Mgbm90IG5lY2Vzc2FyeQorICAgICAgICAgICAgLy8gc2luY2UgdGhlIHNhbWUgY2xpcCB3aWxsIGJlIGNvbXB1dGVkIGF0IGRyYXcgdGltZS4gSWYgc3VjaCBhIGNoYW5nZSBpcyBtYWRlLCB0aGlzCisgICAgICAgICAgICAvLyBjaGVjayBjb3VsZCBiZSBkb25lIGF0IHJlY29yZCB0aW1lIGJ5IHF1ZXJ5aW5nIHRoZSBjbGlwLCBvciB0aGUgY2xpcCBjb3VsZCBiZSBhbHRlcmVkCisgICAgICAgICAgICAvLyBzbGlnaHRseSBzbyB0aGF0IGl0IGlzIHNlcmlhbGl6ZWQuCisgICAgICAgICAgICBFWFBFQ1RfUkVDVF9BUFBST1hfRVEoUmVjdCg1OC41Nzg2NCwgNTguNTc4NjQsIDM0MS40MjEzNiwgMzQxLjQyMTM2KSwKKyAgICAgICAgICAgICAgICAgICAgKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ2xpcFJlY3QqPihvcC5sb2NhbENsaXApKS0+cmVjdCk7CisKICAgICAgICAgICAgIEVYUEVDVF9FUShSZWN0KDQwMCwgNDAwKSwgb3AudW5tYXBwZWRCb3VuZHMpOwogICAgICAgICAgICAgZXhwZWN0ZWRNYXRyaXgubG9hZElkZW50aXR5KCk7CiAgICAgICAgICAgICBFWFBFQ1RfTUFUUklYX0FQUFJPWF9FUShleHBlY3RlZE1hdHJpeCwgb3AubG9jYWxNYXRyaXgpOwpkaWZmIC0tZ2l0IGEvbGlicy9od3VpL3Rlc3RzL3VuaXQvVmVjdG9yRHJhd2FibGVUZXN0cy5jcHAgYi9saWJzL2h3dWkvdGVzdHMvdW5pdC9WZWN0b3JEcmF3YWJsZVRlc3RzLmNwcAppbmRleCA3N2RkNzNhLi43MjA4NTQ3IDEwMDY0NAotLS0gYS9saWJzL2h3dWkvdGVzdHMvdW5pdC9WZWN0b3JEcmF3YWJsZVRlc3RzLmNwcAorKysgYi9saWJzL2h3dWkvdGVzdHMvdW5pdC9WZWN0b3JEcmF3YWJsZVRlc3RzLmNwcApAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CiAKICNpbmNsdWRlICJQYXRoUGFyc2VyLmgiCisjaW5jbHVkZSAiVmVjdG9yRHJhd2FibGUuaCIKICNpbmNsdWRlICJ1dGlscy9NYXRoVXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy9WZWN0b3JEcmF3YWJsZVV0aWxzLmgiCiAKQEAgLTk4LDYgKzk5LDY1IEBACiAgICAgICAgIH0KICAgICB9LAogCisgICAgLy8gQ2hlY2sgYm94IFZlY3RvckRyYXdhYmxlIHBhdGggZGF0YQorICAgIHsKKyAgICAgICAgLy8gUGF0aAorICAgICAgICAiTSAwLjAsLTEuMCBsIDAuMCwwLjAgYyAwLjU1MjI4NDc0OTgsMC4wIDEuMCwwLjQ0NzcxNTI1MDIgMS4wLDEuMCBsIDAuMCwwLjAgYyAwLjAsMC41NTIyODQ3NDk4IC0wLjQ0NzcxNTI1MDIsMS4wIC0xLjAsMS4wIGwgMC4wLDAuMCBjIC0wLjU1MjI4NDc0OTgsMC4wIC0xLjAsLTAuNDQ3NzE1MjUwMiAtMS4wLC0xLjAgbCAwLjAsMC4wIGMgMC4wLC0wLjU1MjI4NDc0OTggMC40NDc3MTUyNTAyLC0xLjAgMS4wLC0xLjAgWiBNIDcuMCwtOS4wIGMgMC4wLDAuMCAtMTQuMCwwLjAgLTE0LjAsMC4wIGMgLTEuMTA0NDkyMTg3NSwwLjAgLTIuMCwwLjg5NTUwNzgxMjUgLTIuMCwyLjAgYyAwLjAsMC4wIDAuMCwxNC4wIDAuMCwxNC4wIGMgMC4wLDEuMTA0NDkyMTg3NSAwLjg5NTUwNzgxMjUsMi4wIDIuMCwyLjAgYyAwLjAsMC4wIDE0LjAsMC4wIDE0LjAsMC4wIGMgMS4xMDQ0OTIxODc1LDAuMCAyLjAsLTAuODk1NTA3ODEyNSAyLjAsLTIuMCBjIDAuMCwwLjAgMC4wLC0xNC4wIDAuMCwtMTQuMCBjIDAuMCwtMS4xMDQ0OTIxODc1IC0wLjg5NTUwNzgxMjUsLTIuMCAtMi4wLC0yLjAgYyAwLjAsMC4wIDAuMCwwLjAgMC4wLDAuMCBaIiwKKyAgICAgICAgeworICAgICAgICAgICAgeydNJywgJ2wnLCAnYycsICdsJywgJ2MnLCAnbCcsICdjJywgJ2wnLCAnYycsICdaJywgJ00nLCAnYycsICdjJywgJ2MnLCAnYycsICdjJywgJ2MnLCAnYycsICdjJywgJ2MnLCAnWid9LAorICAgICAgICAgICAgezIsIDIsIDYsIDIsIDYsIDIsIDYsIDIsIDYsIDAsIDIsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDB9LAorICAgICAgICAgICAgezAuMCwgLTEuMCwgMC4wLCAwLjAsIDAuNTUyMjg0OCwgMC4wLCAxLjAsIDAuNDQ3NzE1MjUsIDEuMCwgMS4wLCAwLjAsIDAuMCwgMC4wLCAwLjU1MjI4NDgsIC0wLjQ0NzcxNTI1LCAxLjAsIC0xLjAsIDEuMCwgMC4wLCAwLjAsIC0wLjU1MjI4NDgsIDAuMCwgLTEuMCwgLTAuNDQ3NzE1MjUsIC0xLjAsIC0xLjAsIDAuMCwgMC4wLCAwLjAsIC0wLjU1MjI4NDgsIDAuNDQ3NzE1MjUsIC0xLjAsIDEuMCwgLTEuMCwgNy4wLCAtOS4wLCAwLjAsIDAuMCwgLTE0LjAsIDAuMCwgLTE0LjAsIDAuMCwgLTEuMTA0NDkyMiwgMC4wLCAtMi4wLCAwLjg5NTUwNzgsIC0yLjAsIDIuMCwgMC4wLCAwLjAsIDAuMCwgMTQuMCwgMC4wLCAxNC4wLCAwLjAsIDEuMTA0NDkyMiwgMC44OTU1MDc4LCAyLjAsIDIuMCwgMi4wLCAwLjAsIDAuMCwgMTQuMCwgMC4wLCAxNC4wLCAwLjAsIDEuMTA0NDkyMiwgMC4wLCAyLjAsIC0wLjg5NTUwNzgsIDIuMCwgLTIuMCwgMC4wLCAwLjAsIDAuMCwgLTE0LjAsIDAuMCwgLTE0LjAsIDAuMCwgLTEuMTA0NDkyMiwgLTAuODk1NTA3OCwgLTIuMCwgLTIuMCwgLTIuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMH0sCisgICAgICAgIH0sCisgICAgICAgIFtdKFNrUGF0aCogb3V0UGF0aCkgeworICAgICAgICAgICAgb3V0UGF0aC0+bW92ZVRvKDAuMCwgLTEuMCk7CisgICAgICAgICAgICBvdXRQYXRoLT5yTGluZVRvKDAuMCwgMC4wKTsKKyAgICAgICAgICAgIG91dFBhdGgtPnJDdWJpY1RvKDAuNTUyMjg0OCwgMC4wLCAxLjAsIDAuNDQ3NzE1MjUsIDEuMCwgMS4wKTsKKyAgICAgICAgICAgIG91dFBhdGgtPnJMaW5lVG8oMC4wLCAwLjApOworICAgICAgICAgICAgb3V0UGF0aC0+ckN1YmljVG8oMC4wLCAwLjU1MjI4NDgsIC0wLjQ0NzcxNTI1LCAxLjAsIC0xLjAsIDEuMCk7CisgICAgICAgICAgICBvdXRQYXRoLT5yTGluZVRvKDAuMCwgMC4wKTsKKyAgICAgICAgICAgIG91dFBhdGgtPnJDdWJpY1RvKC0wLjU1MjI4NDgsIDAuMCwgLTEuMCwgLTAuNDQ3NzE1MjUsIC0xLjAsIC0xLjApOworICAgICAgICAgICAgb3V0UGF0aC0+ckxpbmVUbygwLjAsIDAuMCk7CisgICAgICAgICAgICBvdXRQYXRoLT5yQ3ViaWNUbygwLjAsIC0wLjU1MjI4NDgsIDAuNDQ3NzE1MjUsIC0xLjAsIDEuMCwgLTEuMCk7CisgICAgICAgICAgICBvdXRQYXRoLT5jbG9zZSgpOworICAgICAgICAgICAgb3V0UGF0aC0+bW92ZVRvKDAuMCwgLTEuMCk7CisgICAgICAgICAgICBvdXRQYXRoLT5tb3ZlVG8oNy4wLCAtOS4wKTsKKyAgICAgICAgICAgIG91dFBhdGgtPnJDdWJpY1RvKDAuMCwgMC4wLCAtMTQuMCwgMC4wLCAtMTQuMCwgMC4wKTsKKyAgICAgICAgICAgIG91dFBhdGgtPnJDdWJpY1RvKC0xLjEwNDQ5MjIsIDAuMCwgLTIuMCwgMC44OTU1MDc4LCAtMi4wLCAyLjApOworICAgICAgICAgICAgb3V0UGF0aC0+ckN1YmljVG8oMC4wLCAwLjAsIDAuMCwgMTQuMCwgMC4wLCAxNC4wKTsKKyAgICAgICAgICAgIG91dFBhdGgtPnJDdWJpY1RvKDAuMCwgMS4xMDQ0OTIyLCAwLjg5NTUwNzgsIDIuMCwgMi4wLCAyLjApOworICAgICAgICAgICAgb3V0UGF0aC0+ckN1YmljVG8oMC4wLCAwLjAsIDE0LjAsIDAuMCwgMTQuMCwgMC4wKTsKKyAgICAgICAgICAgIG91dFBhdGgtPnJDdWJpY1RvKDEuMTA0NDkyMiwgMC4wLCAyLjAsIC0wLjg5NTUwNzgsIDIuMCwgLTIuMCk7CisgICAgICAgICAgICBvdXRQYXRoLT5yQ3ViaWNUbygwLjAsIDAuMCwgMC4wLCAtMTQuMCwgMC4wLCAtMTQuMCk7CisgICAgICAgICAgICBvdXRQYXRoLT5yQ3ViaWNUbygwLjAsIC0xLjEwNDQ5MjIsIC0wLjg5NTUwNzgsIC0yLjAsIC0yLjAsIC0yLjApOworICAgICAgICAgICAgb3V0UGF0aC0+ckN1YmljVG8oMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCk7CisgICAgICAgICAgICBvdXRQYXRoLT5jbG9zZSgpOworICAgICAgICAgICAgb3V0UGF0aC0+bW92ZVRvKDcuMCwgLTkuMCk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgLy8gcGllMSBpbiBwcm9ncmVzcyBiYXIKKyAgICB7CisgICAgICAgICJNMzAwLDcwIGEyMzAsMjMwIDAgMSwwIDEsMCB6IiwKKyAgICAgICAgeworICAgICAgICAgICAgIHsnTScsICdhJywgJ3onLCB9LAorICAgICAgICAgICAgIHsyLCA3LCAwLCB9LAorICAgICAgICAgICAgIHszMDAuMCwgNzAuMCwgMjMwLjAsIDIzMC4wLCAwLjAsIDEuMCwgMC4wLCAxLjAsIDAuMCwgfSwKKyAgICAgICAgfSwKKyAgICAgICAgW10oU2tQYXRoKiBvdXRQYXRoKSB7CisgICAgICAgICAgICBvdXRQYXRoLT5tb3ZlVG8oMzAwLjAsIDcwLjApOworICAgICAgICAgICAgb3V0UGF0aC0+Y3ViaWNUbygyMzkuMDY2OTc3OTQyMDM3MDYsIDcwLjEzMjQ2MzQwNDQzNDk5LCAxODAuNjE2NDM5NjQ0OTI2NywgOTQuNDczODMxMTU5NTM0ODUsIDEzNy42MDA0OTEzNjAyMjExLCAxMzcuNjMwMjc4MTQ5OTU4NSk7CisgICAgICAgICAgICBvdXRQYXRoLT5jdWJpY1RvKDk0LjU4NDU0MzA3NTUxNTUxLCAxODAuNzg2NzI1MTQwMzgyMTUsIDcwLjQzMzkwNDEyODQyMjc1LCAyMzkuMzE2MzI2NjI0MjMwOCwgNzAuNTAwMTM1ODY5NzY1ODcsIDMwMC4yNDk0NTY2Njg3ODE3KTsKKyAgICAgICAgICAgIG91dFBhdGgtPmN1YmljVG8oNzAuNTY2MzY3NjExMTA4OTksIDM2MS4xODI1ODY3MTMzMzI2LCA5NC44NDQxODc3NTU1MDI0OSwgNDE5LjY1OTU0ODUwNTU0MTQ3LCAxMzcuOTUzODUyNzU4NjIwNCwgNDYyLjcyMjM4MDU4ODMwOTM2KTsKKyAgICAgICAgICAgIG91dFBhdGgtPmN1YmljVG8oMTgxLjA2MzUxNzc2MTczODI3LCA1MDUuNzg1MjEyNjcxMDc3MiwgMjM5LjU2NjgzMzk1OTkwNTYsIDUyOS45OTk0NTY1MjEwOTcsIDMwMC40OTk5OTk5OTk5OTk5NCwgNTI5Ljk5OTQ1NjUyMTA5Nyk7CisgICAgICAgICAgICBvdXRQYXRoLT5jdWJpY1RvKDM2MS40MzMxNjYwNDAwOTQzNiwgNTI5Ljk5OTQ1NjUyMTA5NywgNDE5LjkzNjQ4MjIzODI2MTc2LCA1MDUuNzg1MjEyNjcxMDc3MjYsIDQ2My4wNDYxNDcyNDEzNzk3LCA0NjIuNzIyMzgwNTg4MzA5Myk7CisgICAgICAgICAgICBvdXRQYXRoLT5jdWJpY1RvKDUwNi4xNTU4MTIyNDQ0OTc2LCA0MTkuNjU5NTQ4NTA1NTQxMzUsIDUzMC40MzM2MzIzODg4OTEsIDM2MS4xODI1ODY3MTMzMzI0LCA1MzAuNDk5ODY0MTMwMjM0MSwgMzAwLjI0OTQ1NjY2ODc4MTUpOworICAgICAgICAgICAgb3V0UGF0aC0+Y3ViaWNUbyg1MzAuNTY2MDk1ODcxNTc3MSwgMjM5LjMxNjMyNjYyNDIzMDU2LCA1MDYuNDE1NDU2OTI0NDg0NCwgMTgwLjc4NjcyNTE0MDM4MTksIDQ2My4zOTk1MDg2Mzk3Nzg3LCAxMzcuNjMwMjc4MTQ5OTU4Myk7CisgICAgICAgICAgICBvdXRQYXRoLT5jdWJpY1RvKDQyMC4zODM1NjAzNTUwNzMsIDk0LjQ3MzgzMTE1OTUzNDY4LCAzNjEuOTMzMDIyMDU3OTYyNTUsIDcwLjEzMjQ2MzQwNDQzNDkyLCAzMDAuOTk5OTk5OTk5OTk5NiwgNzAuMDAwMDAwMDAwMDAwMDMpOworICAgICAgICAgICAgb3V0UGF0aC0+Y2xvc2UoKTsKKyAgICAgICAgICAgIG91dFBhdGgtPm1vdmVUbygzMDAuMCwgNzAuMCk7CisgICAgICAgIH0KKyAgICB9LAorCiAgICAgLy8gUmFuZG9tIGxvbmcgZGF0YQogICAgIHsKICAgICAgICAgLy8gUGF0aApAQCAtMTc4LDYgKzIzOCw3IEBACiAgICAgeyIxLTJlMzQ1NjciLCBmYWxzZX0KIH07CiAKKwogc3RhdGljIGJvb2wgaGFzU2FtZVZlcmJzKGNvbnN0IFBhdGhEYXRhJiBmcm9tLCBjb25zdCBQYXRoRGF0YSYgdG8pIHsKICAgICByZXR1cm4gZnJvbS52ZXJicyA9PSB0by52ZXJicyAmJiBmcm9tLnZlcmJTaXplcyA9PSB0by52ZXJiU2l6ZXM7CiB9CkBAIC0yODQsNiArMzQ1LDQ5IEBACiAgICAgfQogfQogCitURVNUKFZlY3RvckRyYXdhYmxlLCBtYXRyaXhTY2FsZSkgeworICAgIHN0cnVjdCBNYXRyaXhBbmRTY2FsZSB7CisgICAgICAgIGZsb2F0IGJ1ZmZlcls5XTsKKyAgICAgICAgZmxvYXQgbWF0cml4U2NhbGU7CisgICAgfTsKIAorICAgIGNvbnN0IE1hdHJpeEFuZFNjYWxlIHNNYXRyaXhBbmRTY2FsZXNbXSB7CisgICAgICAgIHsKKyAgICAgICAgICAgIHsxLjBmLCAwLjBmLCAwLjBmLCAwLjBmLCAxLjBmLCAwLjBmLCAwLjBmLCAwLjBmLCAxLjBmfSwKKyAgICAgICAgICAgIDEuMAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICB7MS4wZiwgMC4wZiwgMjQwLjBmLCAwLjBmLCAxLjBmLCAyNDAuMGYsIDAuMGYsIDAuMGYsIDEuMGZ9LAorICAgICAgICAgICAgMS4wZiwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgezEuNWYsIDAuMGYsIDI0LjBmLCAwLjBmLCAxLjVmLCAyNC4wZiwgMC4wZiwgMC4wZiwgMS4wZn0sCisgICAgICAgICAgICAxLjVmLAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICB7MC45OTk5OTk5NGYsIDAuMGYsIDMwMC4wZiwgMC4wZiwgMC45OTk5OTk5NGYsIDE1OC41Nzg2NGYsIDAuMGYsIDAuMGYsIDEuMGZ9LAorICAgICAgICAgICAgMC45OTk5OTk5NGYsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgIHswLjcwNzEwNjdmLCAwLjcwNzEwNjdmLCA0MDIuNTMwNWYsIC0wLjcwNzEwNjdmLCAwLjcwNzEwNjdmLCAxNjkuMTg1MjRmLCAwLjBmLCAwLjBmLCAxLjBmfSwKKyAgICAgICAgICAgIDAuOTk5OTk5OTRmLAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICB7MC4wZiwgMC45OTk5OTk5ZiwgNDgyLjUzMDVmLCAtMC45OTk5OTk5ZiwgMC4wZiwgMTA0LjE4NTI1ZiwgMC4wZiwgMC4wZiwgMS4wZn0sCisgICAgICAgICAgICAwLjk5OTk5OTlmLAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICB7LTAuMzU4MTA2MzdmLCAtMC45MzM2ODA4M2YsIDc2LjU1ODIxZiwgMC45MzM2ODA4M2YsIC0wLjM1ODEwNjM3ZiwgODkuNTM4NTA2ZiwgMC4wZiwgMC4wZiwgMS4wZn0sCisgICAgICAgICAgICAxLjAwMDAwMDFmLAorICAgICAgICB9LAorICAgIH07CisKKyAgICBmb3IgKE1hdHJpeEFuZFNjYWxlIG1hdHJpeEFuZFNjYWxlIDogc01hdHJpeEFuZFNjYWxlcykgeworICAgICAgICBTa01hdHJpeCBtYXRyaXg7CisgICAgICAgIG1hdHJpeC5zZXQ5KG1hdHJpeEFuZFNjYWxlLmJ1ZmZlcik7CisgICAgICAgIGZsb2F0IGFjdHVhbE1hdHJpeFNjYWxlID0gVmVjdG9yRHJhd2FibGU6OlBhdGg6OmdldE1hdHJpeFNjYWxlKG1hdHJpeCk7CisgICAgICAgIEVYUEVDVF9FUShtYXRyaXhBbmRTY2FsZS5tYXRyaXhTY2FsZSwgYWN0dWFsTWF0cml4U2NhbGUpOworICAgIH0KK30KIH07IC8vIG5hbWVzcGFjZSB1aXJlbmRlcmVyCiB9OyAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvbGlicy9od3VpL3V0aWxzL0xpbmVhckFsbG9jYXRvci5oIGIvbGlicy9od3VpL3V0aWxzL0xpbmVhckFsbG9jYXRvci5oCmluZGV4IGUxYzZmNmMuLmRjYmMwZGQgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS91dGlscy9MaW5lYXJBbGxvY2F0b3IuaAorKysgYi9saWJzL2h3dWkvdXRpbHMvTGluZWFyQWxsb2NhdG9yLmgKQEAgLTU2LDEyICs1NiwxMiBAQAogICAgIHZvaWQqIGFsbG9jKHNpemVfdCBzaXplKTsKIAogICAgIC8qKgotICAgICAqIEFsbG9jYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgdGVtcGxhdGUgdHlwZSB3aXRoIHRoZSBkZWZhdWx0IGNvbnN0cnVjdG9yCisgICAgICogQWxsb2NhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSB0ZW1wbGF0ZSB0eXBlIHdpdGggdGhlIGdpdmVuIGNvbnN0cnVjdGlvbiBwYXJhbWV0ZXJzCiAgICAgICogYW5kIGFkZHMgaXQgdG8gdGhlIGF1dG9tYXRpYyBkZXN0cnVjdGlvbiBsaXN0LgogICAgICAqLwotICAgIHRlbXBsYXRlPGNsYXNzIFQ+Ci0gICAgVCogYWxsb2MoKSB7Ci0gICAgICAgIFQqIHJldCA9IG5ldyAoKnRoaXMpIFQ7CisgICAgdGVtcGxhdGU8Y2xhc3MgVCwgdHlwZW5hbWUuLi4gUGFyYW1zPgorICAgIFQqIGNyZWF0ZShQYXJhbXMuLi4gcGFyYW1zKSB7CisgICAgICAgIFQqIHJldCA9IG5ldyAoKnRoaXMpIFQocGFyYW1zLi4uKTsKICAgICAgICAgYXV0b0Rlc3Ryb3kocmV0KTsKICAgICAgICAgcmV0dXJuIHJldDsKICAgICB9CmRpZmYgLS1naXQgYS9saWJzL2h3dWkvdXRpbHMvVmVjdG9yRHJhd2FibGVVdGlscy5oIGIvbGlicy9od3VpL3V0aWxzL1ZlY3RvckRyYXdhYmxlVXRpbHMuaAppbmRleCAyMWMxY2RjLi5iNWVmNTEwIDEwMDY0NAotLS0gYS9saWJzL2h3dWkvdXRpbHMvVmVjdG9yRHJhd2FibGVVdGlscy5oCisrKyBiL2xpYnMvaHd1aS91dGlscy9WZWN0b3JEcmF3YWJsZVV0aWxzLmgKQEAgLTE3LDcgKzE3LDcgQEAKICNpZm5kZWYgQU5EUk9JRF9IV1VJX1ZFQ1RPUkRSQVdBQkxFX1VUSUxTX0gKICNkZWZpbmUgQU5EUk9JRF9IV1VJX1ZFQ1RPUkRSQVdBQkxFX1VUSUxTX0gKIAotI2luY2x1ZGUgIlZlY3RvckRyYXdhYmxlUGF0aC5oIgorI2luY2x1ZGUgIlZlY3RvckRyYXdhYmxlLmgiCiAKICNpbmNsdWRlIDxjdXRpbHMvY29tcGlsZXIuaD4KICNpbmNsdWRlICJTa1BhdGguaCIKZGlmZiAtLWdpdCBhL2xpYnMvaW5wdXQvUG9pbnRlckNvbnRyb2xsZXIuY3BwIGIvbGlicy9pbnB1dC9Qb2ludGVyQ29udHJvbGxlci5jcHAKaW5kZXggNTI5ODQ5ZS4uMjEyYzZhMCAxMDA2NDQKLS0tIGEvbGlicy9pbnB1dC9Qb2ludGVyQ29udHJvbGxlci5jcHAKKysrIGIvbGlicy9pbnB1dC9Qb2ludGVyQ29udHJvbGxlci5jcHAKQEAgLTkwLDYgKzkwLDcgQEAKICAgICBtTG9ja2VkLmxhc3RGcmFtZVVwZGF0ZWRUaW1lID0gMDsKIAogICAgIG1Mb2NrZWQuYnV0dG9uU3RhdGUgPSAwOworICAgIG1Mb2NrZWQuaWNvbkRldGFjaGVkID0gZmFsc2U7CiAKICAgICBtUG9saWN5LT5sb2FkUG9pbnRlckljb24oJm1Mb2NrZWQucG9pbnRlckljb24pOwogCkBAIC0xODQsNiArMTg1LDEwIEBACiB9CiAKIHZvaWQgUG9pbnRlckNvbnRyb2xsZXI6OnNldFBvc2l0aW9uTG9ja2VkKGZsb2F0IHgsIGZsb2F0IHkpIHsKKyAgICBpZiAobUxvY2tlZC5pY29uRGV0YWNoZWQpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGZsb2F0IG1pblgsIG1pblksIG1heFgsIG1heFk7CiAgICAgaWYgKGdldEJvdW5kc0xvY2tlZCgmbWluWCwgJm1pblksICZtYXhYLCAmbWF4WSkpIHsKICAgICAgICAgaWYgKHggPD0gbWluWCkgewpAQCAtMjE3LDYgKzIyMiwxMCBAQAogICAgIC8vIFJlbW92ZSB0aGUgaW5hY3Rpdml0eSB0aW1lb3V0LCBzaW5jZSB3ZSBhcmUgZmFkaW5nIG5vdy4KICAgICByZW1vdmVJbmFjdGl2aXR5VGltZW91dExvY2tlZCgpOwogCisgICAgaWYgKG1Mb2NrZWQuaWNvbkRldGFjaGVkKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICAvLyBTdGFydCBmYWRpbmcuCiAgICAgaWYgKHRyYW5zaXRpb24gPT0gVFJBTlNJVElPTl9JTU1FRElBVEUpIHsKICAgICAgICAgbUxvY2tlZC5wb2ludGVyRmFkZURpcmVjdGlvbiA9IDA7CkBAIC0yMzQsNiArMjQzLDEwIEBACiAgICAgLy8gQWx3YXlzIHJlc2V0IHRoZSBpbmFjdGl2aXR5IHRpbWVyLgogICAgIHJlc2V0SW5hY3Rpdml0eVRpbWVvdXRMb2NrZWQoKTsKIAorICAgIGlmIChtTG9ja2VkLmljb25EZXRhY2hlZCkgeworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgLy8gU3RhcnQgdW5mYWRpbmcuCiAgICAgaWYgKHRyYW5zaXRpb24gPT0gVFJBTlNJVElPTl9JTU1FRElBVEUpIHsKICAgICAgICAgbUxvY2tlZC5wb2ludGVyRmFkZURpcmVjdGlvbiA9IDA7CkBAIC0zNDksNiArMzYyLDIyIEBACiAgICAgdXBkYXRlUG9pbnRlckxvY2tlZCgpOwogfQogCit2b2lkIFBvaW50ZXJDb250cm9sbGVyOjpkZXRhY2hQb2ludGVySWNvbihib29sIGRldGFjaGVkKSB7CisgICAgQXV0b011dGV4IF9sKG1Mb2NrKTsKKworICAgIGlmIChtTG9ja2VkLmljb25EZXRhY2hlZCA9PSBkZXRhY2hlZCkgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbUxvY2tlZC5pY29uRGV0YWNoZWQgPSBkZXRhY2hlZDsKKyAgICBpZiAoZGV0YWNoZWQpIHsKKyAgICAgICAgbUxvY2tlZC5wb2ludGVyRmFkZURpcmVjdGlvbiA9IC0xOworICAgIH0gZWxzZSB7CisgICAgICAgIG1Mb2NrZWQucG9pbnRlckZhZGVEaXJlY3Rpb24gPSAxOworICAgIH0KKyAgICBzdGFydEFuaW1hdGlvbkxvY2tlZCgpOworfQorCiB2b2lkIFBvaW50ZXJDb250cm9sbGVyOjpzZXREaXNwbGF5Vmlld3BvcnQoaW50MzJfdCB3aWR0aCwgaW50MzJfdCBoZWlnaHQsIGludDMyX3Qgb3JpZW50YXRpb24pIHsKICAgICBBdXRvTXV0ZXggX2wobUxvY2spOwogCmRpZmYgLS1naXQgYS9saWJzL2lucHV0L1BvaW50ZXJDb250cm9sbGVyLmggYi9saWJzL2lucHV0L1BvaW50ZXJDb250cm9sbGVyLmgKaW5kZXggOWJhMzdiMy4uYzEzODFmMyAxMDA2NDQKLS0tIGEvbGlicy9pbnB1dC9Qb2ludGVyQ29udHJvbGxlci5oCisrKyBiL2xpYnMvaW5wdXQvUG9pbnRlckNvbnRyb2xsZXIuaApAQCAtMTExLDYgKzExMSwxMCBAQAogICAgIHZvaWQgc2V0SW5hY3Rpdml0eVRpbWVvdXQoSW5hY3Rpdml0eVRpbWVvdXQgaW5hY3Rpdml0eVRpbWVvdXQpOwogICAgIHZvaWQgcmVsb2FkUG9pbnRlclJlc291cmNlcygpOwogCisgICAgLyogRGV0YWNoIG9yIGF0dGFjaCB0aGUgcG9pbnRlciBpY29uIHN0YXR1cy4gV2hlbiBkZXRhY2hlZCwgdGhlIHBvaW50ZXIgaWNvbiBkaXNhcHBlYXJzCisgICAgICogYW5kIHRoZSBpY29uIGxvY2F0aW9uIGRvZXMgbm90IGNoYW5nZSBhdCBhbGwuICovCisgICAgdm9pZCBkZXRhY2hQb2ludGVySWNvbihib29sIGRldGFjaGVkKTsKKwogcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IE1BWF9SRUNZQ0xFRF9TUFJJVEVTID0gMTI7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBNQVhfU1BPVFMgPSAxMjsKQEAgLTE4MCw2ICsxODQsOCBAQAogCiAgICAgICAgIGludDMyX3QgYnV0dG9uU3RhdGU7CiAKKyAgICAgICAgYm9vbCBpY29uRGV0YWNoZWQ7CisKICAgICAgICAgVmVjdG9yPFNwb3QqPiBzcG90czsKICAgICAgICAgVmVjdG9yPHNwPFNwcml0ZT4gPiByZWN5Y2xlZFNwcml0ZXM7CiAgICAgfSBtTG9ja2VkOwpkaWZmIC0tZ2l0IGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL01lZGlhSW5zZXJ0ZXIuamF2YSBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9NZWRpYUluc2VydGVyLmphdmEKaW5kZXggNDFiMzY5ZC4uZGQwNjkyMSAxMDA2NDQKLS0tIGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL01lZGlhSW5zZXJ0ZXIuamF2YQorKysgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvTWVkaWFJbnNlcnRlci5qYXZhCkBAIC0xNiw4ICsxNiw4IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5tZWRpYTsKIAoraW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZW50UHJvdmlkZXJDbGllbnQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRWYWx1ZXM7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LklDb250ZW50UHJvdmlkZXI7CiBpbXBvcnQgYW5kcm9pZC5uZXQuVXJpOwogaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwogCkBAIC0zNywxMyArMzcsMTEgQEAKICAgICBwcml2YXRlIGZpbmFsIEhhc2hNYXA8VXJpLCBMaXN0PENvbnRlbnRWYWx1ZXM+PiBtUHJpb3JpdHlSb3dNYXAgPQogICAgICAgICAgICAgbmV3IEhhc2hNYXA8VXJpLCBMaXN0PENvbnRlbnRWYWx1ZXM+PigpOwogCi0gICAgcHJpdmF0ZSBmaW5hbCBJQ29udGVudFByb3ZpZGVyIG1Qcm92aWRlcjsKLSAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBtUGFja2FnZU5hbWU7CisgICAgcHJpdmF0ZSBmaW5hbCBDb250ZW50UHJvdmlkZXJDbGllbnQgbVByb3ZpZGVyOwogICAgIHByaXZhdGUgZmluYWwgaW50IG1CdWZmZXJTaXplUGVyVXJpOwogCi0gICAgcHVibGljIE1lZGlhSW5zZXJ0ZXIoSUNvbnRlbnRQcm92aWRlciBwcm92aWRlciwgU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgYnVmZmVyU2l6ZVBlclVyaSkgeworICAgIHB1YmxpYyBNZWRpYUluc2VydGVyKENvbnRlbnRQcm92aWRlckNsaWVudCBwcm92aWRlciwgaW50IGJ1ZmZlclNpemVQZXJVcmkpIHsKICAgICAgICAgbVByb3ZpZGVyID0gcHJvdmlkZXI7Ci0gICAgICAgIG1QYWNrYWdlTmFtZSA9IHBhY2thZ2VOYW1lOwogICAgICAgICBtQnVmZmVyU2l6ZVBlclVyaSA9IGJ1ZmZlclNpemVQZXJVcmk7CiAgICAgfQogCkBAIC05MCw3ICs4OCw3IEBACiAgICAgICAgIGlmICghbGlzdC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIENvbnRlbnRWYWx1ZXNbXSB2YWx1ZXNBcnJheSA9IG5ldyBDb250ZW50VmFsdWVzW2xpc3Quc2l6ZSgpXTsKICAgICAgICAgICAgIHZhbHVlc0FycmF5ID0gbGlzdC50b0FycmF5KHZhbHVlc0FycmF5KTsKLSAgICAgICAgICAgIG1Qcm92aWRlci5idWxrSW5zZXJ0KG1QYWNrYWdlTmFtZSwgdGFibGVVcmksIHZhbHVlc0FycmF5KTsKKyAgICAgICAgICAgIG1Qcm92aWRlci5idWxrSW5zZXJ0KHRhYmxlVXJpLCB2YWx1ZXNBcnJheSk7CiAgICAgICAgICAgICBsaXN0LmNsZWFyKCk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvTWVkaWFTY2FubmVyLmphdmEgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvTWVkaWFTY2FubmVyLmphdmEKaW5kZXggOWVhNjcyMi4uOTZjNjE2YiAxMDA2NDQKLS0tIGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL01lZGlhU2Nhbm5lci5qYXZhCisrKyBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9NZWRpYVNjYW5uZXIuamF2YQpAQCAtMTYsMTQgKzE2LDEwIEBACiAKIHBhY2thZ2UgYW5kcm9pZC5tZWRpYTsKIAotaW1wb3J0IG9yZy54bWwuc2F4LkF0dHJpYnV0ZXM7Ci1pbXBvcnQgb3JnLnhtbC5zYXguQ29udGVudEhhbmRsZXI7Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uOwotCitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRQcm92aWRlckNsaWVudDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFVyaXM7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRWYWx1ZXM7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LklDb250ZW50UHJvdmlkZXI7CiBpbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5DdXJzb3I7CiBpbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5TUUxFeGNlcHRpb247CiBpbXBvcnQgYW5kcm9pZC5kcm0uRHJtTWFuYWdlckNsaWVudDsKQEAgLTUwLDYgKzQ2LDEyIEBACiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIGltcG9ydCBhbmRyb2lkLnV0aWwuWG1sOwogCitpbXBvcnQgZGFsdmlrLnN5c3RlbS5DbG9zZUd1YXJkOworCitpbXBvcnQgb3JnLnhtbC5zYXguQXR0cmlidXRlczsKK2ltcG9ydCBvcmcueG1sLnNheC5Db250ZW50SGFuZGxlcjsKK2ltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247CisKIGltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOwogaW1wb3J0IGphdmEuaW8uRmlsZTsKIGltcG9ydCBqYXZhLmlvLkZpbGVEZXNjcmlwdG9yOwpAQCAtNjEsNiArNjMsNyBAQAogaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwogaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKIGltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNCb29sZWFuOwogCiAvKioKICAqIEludGVybmFsIHNlcnZpY2UgaGVscGVyIHRoYXQgbm8tb25lIHNob3VsZCB1c2UgZGlyZWN0bHkuCkBAIC0xMDcsOCArMTEwLDcgQEAKICAqCiAgKiB7QGhpZGV9CiAgKi8KLXB1YmxpYyBjbGFzcyBNZWRpYVNjYW5uZXIKLXsKK3B1YmxpYyBjbGFzcyBNZWRpYVNjYW5uZXIgaW1wbGVtZW50cyBBdXRvQ2xvc2VhYmxlIHsKICAgICBzdGF0aWMgewogICAgICAgICBTeXN0ZW0ubG9hZExpYnJhcnkoIm1lZGlhX2puaSIpOwogICAgICAgICBuYXRpdmVfaW5pdCgpOwpAQCAtMzAyLDIxICszMDQsMjMgQEAKICAgICB9OwogCiAgICAgcHJpdmF0ZSBsb25nIG1OYXRpdmVDb250ZXh0OwotICAgIHByaXZhdGUgQ29udGV4dCBtQ29udGV4dDsKLSAgICBwcml2YXRlIFN0cmluZyBtUGFja2FnZU5hbWU7Ci0gICAgcHJpdmF0ZSBJQ29udGVudFByb3ZpZGVyIG1NZWRpYVByb3ZpZGVyOwotICAgIHByaXZhdGUgVXJpIG1BdWRpb1VyaTsKLSAgICBwcml2YXRlIFVyaSBtVmlkZW9Vcmk7Ci0gICAgcHJpdmF0ZSBVcmkgbUltYWdlc1VyaTsKLSAgICBwcml2YXRlIFVyaSBtVGh1bWJzVXJpOwotICAgIHByaXZhdGUgVXJpIG1QbGF5bGlzdHNVcmk7Ci0gICAgcHJpdmF0ZSBVcmkgbUZpbGVzVXJpOwotICAgIHByaXZhdGUgVXJpIG1GaWxlc1VyaU5vTm90aWZ5OwotICAgIHByaXZhdGUgYm9vbGVhbiBtUHJvY2Vzc1BsYXlsaXN0cywgbVByb2Nlc3NHZW5yZXM7CisgICAgcHJpdmF0ZSBmaW5hbCBDb250ZXh0IG1Db250ZXh0OworICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG1QYWNrYWdlTmFtZTsKKyAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBtVm9sdW1lTmFtZTsKKyAgICBwcml2YXRlIGZpbmFsIENvbnRlbnRQcm92aWRlckNsaWVudCBtTWVkaWFQcm92aWRlcjsKKyAgICBwcml2YXRlIGZpbmFsIFVyaSBtQXVkaW9Vcmk7CisgICAgcHJpdmF0ZSBmaW5hbCBVcmkgbVZpZGVvVXJpOworICAgIHByaXZhdGUgZmluYWwgVXJpIG1JbWFnZXNVcmk7CisgICAgcHJpdmF0ZSBmaW5hbCBVcmkgbVRodW1ic1VyaTsKKyAgICBwcml2YXRlIGZpbmFsIFVyaSBtUGxheWxpc3RzVXJpOworICAgIHByaXZhdGUgZmluYWwgVXJpIG1GaWxlc1VyaTsKKyAgICBwcml2YXRlIGZpbmFsIFVyaSBtRmlsZXNVcmlOb05vdGlmeTsKKyAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gbVByb2Nlc3NQbGF5bGlzdHM7CisgICAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIG1Qcm9jZXNzR2VucmVzOwogICAgIHByaXZhdGUgaW50IG1NdHBPYmplY3RIYW5kbGU7CiAKLSAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBtRXh0ZXJuYWxTdG9yYWdlUGF0aDsKLSAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gbUV4dGVybmFsSXNFbXVsYXRlZDsKKyAgICBwcml2YXRlIGZpbmFsIEF0b21pY0Jvb2xlYW4gbUNsb3NlZCA9IG5ldyBBdG9taWNCb29sZWFuKCk7CisgICAgcHJpdmF0ZSBmaW5hbCBDbG9zZUd1YXJkIG1DbG9zZUd1YXJkID0gQ2xvc2VHdWFyZC5nZXQoKTsKIAogICAgIC8qKiB3aGV0aGVyIHRvIHVzZSBidWxrIGluc2VydHMgb3IgaW5kaXZpZHVhbCBpbnNlcnRzIGZvciBlYWNoIGl0ZW0gKi8KICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIEVOQUJMRV9CVUxLX0lOU0VSVFMgPSB0cnVlOwpAQCAtMzQ1LDEwICszNDksNiBAQAogICAgICAqLwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX1JJTkdUT05FX1BST1BFUlRZX1BSRUZJWCA9ICJyby5jb25maWcuIjsKIAotICAgIC8vIHNldCB0byB0cnVlIGlmIGZpbGUgcGF0aCBjb21wYXJpc29ucyBzaG91bGQgYmUgY2FzZSBpbnNlbnNpdGl2ZS4KLSAgICAvLyB0aGlzIHNob3VsZCBiZSBzZXQgd2hlbiBzY2FubmluZyBmaWxlcyBvbiBhIGNhc2UgaW5zZW5zaXRpdmUgZmlsZSBzeXN0ZW0uCi0gICAgcHJpdmF0ZSBib29sZWFuIG1DYXNlSW5zZW5zaXRpdmVQYXRoczsKLQogICAgIHByaXZhdGUgZmluYWwgQml0bWFwRmFjdG9yeS5PcHRpb25zIG1CaXRtYXBPcHRpb25zID0gbmV3IEJpdG1hcEZhY3RvcnkuT3B0aW9ucygpOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgRmlsZUVudHJ5IHsKQEAgLTM3OCwyNiArMzc4LDU5IEBACiAgICAgICAgIGludCBiZXN0bWF0Y2hsZXZlbDsKICAgICB9CiAKLSAgICBwcml2YXRlIEFycmF5TGlzdDxQbGF5bGlzdEVudHJ5PiBtUGxheWxpc3RFbnRyaWVzID0gbmV3IEFycmF5TGlzdDxQbGF5bGlzdEVudHJ5PigpOworICAgIHByaXZhdGUgZmluYWwgQXJyYXlMaXN0PFBsYXlsaXN0RW50cnk+IG1QbGF5bGlzdEVudHJpZXMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgICBwcml2YXRlIGZpbmFsIEFycmF5TGlzdDxGaWxlRW50cnk+IG1QbGF5TGlzdHMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKIAogICAgIHByaXZhdGUgTWVkaWFJbnNlcnRlciBtTWVkaWFJbnNlcnRlcjsKIAotICAgIHByaXZhdGUgQXJyYXlMaXN0PEZpbGVFbnRyeT4gbVBsYXlMaXN0czsKLQogICAgIHByaXZhdGUgRHJtTWFuYWdlckNsaWVudCBtRHJtTWFuYWdlckNsaWVudCA9IG51bGw7CiAKLSAgICBwdWJsaWMgTWVkaWFTY2FubmVyKENvbnRleHQgYykgeworICAgIHB1YmxpYyBNZWRpYVNjYW5uZXIoQ29udGV4dCBjLCBTdHJpbmcgdm9sdW1lTmFtZSkgewogICAgICAgICBuYXRpdmVfc2V0dXAoKTsKICAgICAgICAgbUNvbnRleHQgPSBjOwogICAgICAgICBtUGFja2FnZU5hbWUgPSBjLmdldFBhY2thZ2VOYW1lKCk7CisgICAgICAgIG1Wb2x1bWVOYW1lID0gdm9sdW1lTmFtZTsKKwogICAgICAgICBtQml0bWFwT3B0aW9ucy5pblNhbXBsZVNpemUgPSAxOwogICAgICAgICBtQml0bWFwT3B0aW9ucy5pbkp1c3REZWNvZGVCb3VuZHMgPSB0cnVlOwogCiAgICAgICAgIHNldERlZmF1bHRSaW5ndG9uZUZpbGVOYW1lcygpOwogCi0gICAgICAgIG1FeHRlcm5hbFN0b3JhZ2VQYXRoID0gRW52aXJvbm1lbnQuZ2V0RXh0ZXJuYWxTdG9yYWdlRGlyZWN0b3J5KCkuZ2V0QWJzb2x1dGVQYXRoKCk7Ci0gICAgICAgIG1FeHRlcm5hbElzRW11bGF0ZWQgPSBFbnZpcm9ubWVudC5pc0V4dGVybmFsU3RvcmFnZUVtdWxhdGVkKCk7Ci0gICAgICAgIC8vbUNsaWVudC50ZXN0R2VucmVOYW1lQ29udmVydGVyKCk7CisgICAgICAgIG1NZWRpYVByb3ZpZGVyID0gbUNvbnRleHQuZ2V0Q29udGVudFJlc29sdmVyKCkKKyAgICAgICAgICAgICAgICAuYWNxdWlyZUNvbnRlbnRQcm92aWRlckNsaWVudChNZWRpYVN0b3JlLkFVVEhPUklUWSk7CisKKyAgICAgICAgbUF1ZGlvVXJpID0gQXVkaW8uTWVkaWEuZ2V0Q29udGVudFVyaSh2b2x1bWVOYW1lKTsKKyAgICAgICAgbVZpZGVvVXJpID0gVmlkZW8uTWVkaWEuZ2V0Q29udGVudFVyaSh2b2x1bWVOYW1lKTsKKyAgICAgICAgbUltYWdlc1VyaSA9IEltYWdlcy5NZWRpYS5nZXRDb250ZW50VXJpKHZvbHVtZU5hbWUpOworICAgICAgICBtVGh1bWJzVXJpID0gSW1hZ2VzLlRodW1ibmFpbHMuZ2V0Q29udGVudFVyaSh2b2x1bWVOYW1lKTsKKyAgICAgICAgbUZpbGVzVXJpID0gRmlsZXMuZ2V0Q29udGVudFVyaSh2b2x1bWVOYW1lKTsKKyAgICAgICAgbUZpbGVzVXJpTm9Ob3RpZnkgPSBtRmlsZXNVcmkuYnVpbGRVcG9uKCkuYXBwZW5kUXVlcnlQYXJhbWV0ZXIoIm5vbm90aWZ5IiwgIjEiKS5idWlsZCgpOworCisgICAgICAgIGlmICghdm9sdW1lTmFtZS5lcXVhbHMoImludGVybmFsIikpIHsKKyAgICAgICAgICAgIC8vIHdlIG9ubHkgc3VwcG9ydCBwbGF5bGlzdHMgb24gZXh0ZXJuYWwgbWVkaWEKKyAgICAgICAgICAgIG1Qcm9jZXNzUGxheWxpc3RzID0gdHJ1ZTsKKyAgICAgICAgICAgIG1Qcm9jZXNzR2VucmVzID0gdHJ1ZTsKKyAgICAgICAgICAgIG1QbGF5bGlzdHNVcmkgPSBQbGF5bGlzdHMuZ2V0Q29udGVudFVyaSh2b2x1bWVOYW1lKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1Qcm9jZXNzUGxheWxpc3RzID0gZmFsc2U7CisgICAgICAgICAgICBtUHJvY2Vzc0dlbnJlcyA9IGZhbHNlOworICAgICAgICAgICAgbVBsYXlsaXN0c1VyaSA9IG51bGw7CisgICAgICAgIH0KKworICAgICAgICBmaW5hbCBMb2NhbGUgbG9jYWxlID0gbUNvbnRleHQuZ2V0UmVzb3VyY2VzKCkuZ2V0Q29uZmlndXJhdGlvbigpLmxvY2FsZTsKKyAgICAgICAgaWYgKGxvY2FsZSAhPSBudWxsKSB7CisgICAgICAgICAgICBTdHJpbmcgbGFuZ3VhZ2UgPSBsb2NhbGUuZ2V0TGFuZ3VhZ2UoKTsKKyAgICAgICAgICAgIFN0cmluZyBjb3VudHJ5ID0gbG9jYWxlLmdldENvdW50cnkoKTsKKyAgICAgICAgICAgIGlmIChsYW5ndWFnZSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgaWYgKGNvdW50cnkgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBzZXRMb2NhbGUobGFuZ3VhZ2UgKyAiXyIgKyBjb3VudHJ5KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzZXRMb2NhbGUobGFuZ3VhZ2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG1DbG9zZUd1YXJkLm9wZW4oImNsb3NlIik7CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHNldERlZmF1bHRSaW5ndG9uZUZpbGVOYW1lcygpIHsKQEAgLTk1Niw3ICs5ODksNyBAQAogICAgICAgICAgICAgICAgICAgICBpZiAoaW5zZXJ0ZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0ZXIuZmx1c2hBbGwoKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBtTWVkaWFQcm92aWRlci5pbnNlcnQobVBhY2thZ2VOYW1lLCB0YWJsZVVyaSwgdmFsdWVzKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbU1lZGlhUHJvdmlkZXIuaW5zZXJ0KHRhYmxlVXJpLCB2YWx1ZXMpOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZW50cnkubUZvcm1hdCA9PSBNdHBDb25zdGFudHMuRk9STUFUX0FTU09DSUFUSU9OKSB7CiAgICAgICAgICAgICAgICAgICAgIGluc2VydGVyLmluc2VydHdpdGhQcmlvcml0eSh0YWJsZVVyaSwgdmFsdWVzKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewpAQCAtOTg4LDcgKzEwMjEsNyBAQAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXQoRmlsZUNvbHVtbnMuTUVESUFfVFlQRSwgbWVkaWFUeXBlKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbU1lZGlhUHJvdmlkZXIudXBkYXRlKG1QYWNrYWdlTmFtZSwgcmVzdWx0LCB2YWx1ZXMsIG51bGwsIG51bGwpOworICAgICAgICAgICAgICAgIG1NZWRpYVByb3ZpZGVyLnVwZGF0ZShyZXN1bHQsIHZhbHVlcywgbnVsbCwgbnVsbCk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmKG5lZWRUb1NldFNldHRpbmdzKSB7CkBAIC0xMDU1LDExICsxMDg4LDcgQEAKICAgICAgICAgU3RyaW5nIHdoZXJlID0gbnVsbDsKICAgICAgICAgU3RyaW5nW10gc2VsZWN0aW9uQXJncyA9IG51bGw7CiAKLSAgICAgICAgaWYgKG1QbGF5TGlzdHMgPT0gbnVsbCkgewotICAgICAgICAgICAgbVBsYXlMaXN0cyA9IG5ldyBBcnJheUxpc3Q8RmlsZUVudHJ5PigpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbVBsYXlMaXN0cy5jbGVhcigpOwotICAgICAgICB9CisgICAgICAgIG1QbGF5TGlzdHMuY2xlYXIoKTsKIAogICAgICAgICBpZiAoZmlsZVBhdGggIT0gbnVsbCkgewogICAgICAgICAgICAgLy8gcXVlcnkgZm9yIG9ubHkgb25lIGZpbGUKQEAgLTEwNzcsOCArMTEwNiw3IEBACiAgICAgICAgIC8vIGZpbGVzeXN0ZW0gaXMgbW91bnRlZCBhbmQgdW5tb3VudGVkIHdoaWxlIHRoZSBzY2FubmVyIGlzIHJ1bm5pbmcpLgogICAgICAgICBVcmkuQnVpbGRlciBidWlsZGVyID0gbUZpbGVzVXJpLmJ1aWxkVXBvbigpOwogICAgICAgICBidWlsZGVyLmFwcGVuZFF1ZXJ5UGFyYW1ldGVyKE1lZGlhU3RvcmUuUEFSQU1fREVMRVRFX0RBVEEsICJmYWxzZSIpOwotICAgICAgICBNZWRpYUJ1bGtEZWxldGVyIGRlbGV0ZXIgPSBuZXcgTWVkaWFCdWxrRGVsZXRlcihtTWVkaWFQcm92aWRlciwgbVBhY2thZ2VOYW1lLAotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYnVpbGQoKSk7CisgICAgICAgIE1lZGlhQnVsa0RlbGV0ZXIgZGVsZXRlciA9IG5ldyBNZWRpYUJ1bGtEZWxldGVyKG1NZWRpYVByb3ZpZGVyLCBidWlsZGVyLmJ1aWxkKCkpOwogCiAgICAgICAgIC8vIEJ1aWxkIHRoZSBsaXN0IG9mIGZpbGVzIGZyb20gdGhlIGNvbnRlbnQgcHJvdmlkZXIKICAgICAgICAgdHJ5IHsKQEAgLTEwOTcsNyArMTEyNSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBjLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBjID0gbU1lZGlhUHJvdmlkZXIucXVlcnkobVBhY2thZ2VOYW1lLCBsaW1pdFVyaSwgRklMRVNfUFJFU0NBTl9QUk9KRUNUSU9OLAorICAgICAgICAgICAgICAgICAgICBjID0gbU1lZGlhUHJvdmlkZXIucXVlcnkobGltaXRVcmksIEZJTEVTX1BSRVNDQU5fUFJPSkVDVElPTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSwgc2VsZWN0aW9uQXJncywgTWVkaWFTdG9yZS5GaWxlcy5GaWxlQ29sdW1ucy5fSUQsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTExMzgsOCArMTE2Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGF0aC50b0xvd2VyQ2FzZShMb2NhbGUuVVMpLmVuZHNXaXRoKCIvLm5vbWVkaWEiKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZXIuZmx1c2goKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcGFyZW50ID0gbmV3IEZpbGUocGF0aCkuZ2V0UGFyZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbU1lZGlhUHJvdmlkZXIuY2FsbChtUGFja2FnZU5hbWUsIE1lZGlhU3RvcmUuVU5ISURFX0NBTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQsIG51bGwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1NZWRpYVByb3ZpZGVyLmNhbGwoTWVkaWFTdG9yZS5VTkhJREVfQ0FMTCwgcGFyZW50LCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTExNTcsNyArMTE4NCw3IEBACiAKICAgICAgICAgLy8gY29tcHV0ZSBvcmlnaW5hbCBzaXplIG9mIGltYWdlcwogICAgICAgICBtT3JpZ2luYWxDb3VudCA9IDA7Ci0gICAgICAgIGMgPSBtTWVkaWFQcm92aWRlci5xdWVyeShtUGFja2FnZU5hbWUsIG1JbWFnZXNVcmksIElEX1BST0pFQ1RJT04sIG51bGwsIG51bGwsIG51bGwsIG51bGwpOworICAgICAgICBjID0gbU1lZGlhUHJvdmlkZXIucXVlcnkobUltYWdlc1VyaSwgSURfUFJPSkVDVElPTiwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCk7CiAgICAgICAgIGlmIChjICE9IG51bGwpIHsKICAgICAgICAgICAgIG1PcmlnaW5hbENvdW50ID0gYy5nZXRDb3VudCgpOwogICAgICAgICAgICAgYy5jbG9zZSgpOwpAQCAtMTE4OSw3ICsxMjE2LDYgQEAKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgYyA9IG1NZWRpYVByb3ZpZGVyLnF1ZXJ5KAotICAgICAgICAgICAgICAgICAgICBtUGFja2FnZU5hbWUsCiAgICAgICAgICAgICAgICAgICAgIG1UaHVtYnNVcmksCiAgICAgICAgICAgICAgICAgICAgIG5ldyBTdHJpbmcgW10geyAiX2RhdGEiIH0sCiAgICAgICAgICAgICAgICAgICAgIG51bGwsCkBAIC0xMjI1LDEzICsxMjUxLDExIEBACiAgICAgc3RhdGljIGNsYXNzIE1lZGlhQnVsa0RlbGV0ZXIgewogICAgICAgICBTdHJpbmdCdWlsZGVyIHdoZXJlQ2xhdXNlID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKICAgICAgICAgQXJyYXlMaXN0PFN0cmluZz4gd2hlcmVBcmdzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KDEwMCk7Ci0gICAgICAgIGZpbmFsIElDb250ZW50UHJvdmlkZXIgbVByb3ZpZGVyOwotICAgICAgICBmaW5hbCBTdHJpbmcgbVBhY2thZ2VOYW1lOworICAgICAgICBmaW5hbCBDb250ZW50UHJvdmlkZXJDbGllbnQgbVByb3ZpZGVyOwogICAgICAgICBmaW5hbCBVcmkgbUJhc2VVcmk7CiAKLSAgICAgICAgcHVibGljIE1lZGlhQnVsa0RlbGV0ZXIoSUNvbnRlbnRQcm92aWRlciBwcm92aWRlciwgU3RyaW5nIHBhY2thZ2VOYW1lLCBVcmkgYmFzZVVyaSkgeworICAgICAgICBwdWJsaWMgTWVkaWFCdWxrRGVsZXRlcihDb250ZW50UHJvdmlkZXJDbGllbnQgcHJvdmlkZXIsIFVyaSBiYXNlVXJpKSB7CiAgICAgICAgICAgICBtUHJvdmlkZXIgPSBwcm92aWRlcjsKLSAgICAgICAgICAgIG1QYWNrYWdlTmFtZSA9IHBhY2thZ2VOYW1lOwogICAgICAgICAgICAgbUJhc2VVcmkgPSBiYXNlVXJpOwogICAgICAgICB9CiAKQEAgLTEyNTAsNyArMTI3NCw3IEBACiAgICAgICAgICAgICBpZiAoc2l6ZSA+IDApIHsKICAgICAgICAgICAgICAgICBTdHJpbmcgW10gZm9vID0gbmV3IFN0cmluZyBbc2l6ZV07CiAgICAgICAgICAgICAgICAgZm9vID0gd2hlcmVBcmdzLnRvQXJyYXkoZm9vKTsKLSAgICAgICAgICAgICAgICBpbnQgbnVtcm93cyA9IG1Qcm92aWRlci5kZWxldGUobVBhY2thZ2VOYW1lLCBtQmFzZVVyaSwKKyAgICAgICAgICAgICAgICBpbnQgbnVtcm93cyA9IG1Qcm92aWRlci5kZWxldGUobUJhc2VVcmksCiAgICAgICAgICAgICAgICAgICAgICAgICBNZWRpYVN0b3JlLk1lZGlhQ29sdW1ucy5fSUQgKyAiIElOICgiICsKICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlQ2xhdXNlLnRvU3RyaW5nKCkgKyAiKSIsIGZvbyk7CiAgICAgICAgICAgICAgICAgLy9Mb2cuaSgiQEBAQEBAQEBAIiwgInJvd3MgZGVsZXRlZDogIiArIG51bXJvd3MpOwpAQCAtMTI3MSw0OCArMTI5NSwyNiBAQAogICAgICAgICAgICAgcHJ1bmVEZWFkVGh1bWJuYWlsRmlsZXMoKTsKIAogICAgICAgICAvLyBhbGxvdyBHQyB0byBjbGVhbiB1cAotICAgICAgICBtUGxheUxpc3RzID0gbnVsbDsKLSAgICAgICAgbU1lZGlhUHJvdmlkZXIgPSBudWxsOworICAgICAgICBtUGxheUxpc3RzLmNsZWFyKCk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHJlbGVhc2VSZXNvdXJjZXMoKSB7CiAgICAgICAgIC8vIHJlbGVhc2UgdGhlIERybU1hbmFnZXJDbGllbnQgcmVzb3VyY2VzCiAgICAgICAgIGlmIChtRHJtTWFuYWdlckNsaWVudCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtRHJtTWFuYWdlckNsaWVudC5yZWxlYXNlKCk7CisgICAgICAgICAgICBtRHJtTWFuYWdlckNsaWVudC5jbG9zZSgpOwogICAgICAgICAgICAgbURybU1hbmFnZXJDbGllbnQgPSBudWxsOwogICAgICAgICB9CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIGluaXRpYWxpemUoU3RyaW5nIHZvbHVtZU5hbWUpIHsKLSAgICAgICAgbU1lZGlhUHJvdmlkZXIgPSBtQ29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKS5hY3F1aXJlUHJvdmlkZXIoIm1lZGlhIik7Ci0KLSAgICAgICAgbUF1ZGlvVXJpID0gQXVkaW8uTWVkaWEuZ2V0Q29udGVudFVyaSh2b2x1bWVOYW1lKTsKLSAgICAgICAgbVZpZGVvVXJpID0gVmlkZW8uTWVkaWEuZ2V0Q29udGVudFVyaSh2b2x1bWVOYW1lKTsKLSAgICAgICAgbUltYWdlc1VyaSA9IEltYWdlcy5NZWRpYS5nZXRDb250ZW50VXJpKHZvbHVtZU5hbWUpOwotICAgICAgICBtVGh1bWJzVXJpID0gSW1hZ2VzLlRodW1ibmFpbHMuZ2V0Q29udGVudFVyaSh2b2x1bWVOYW1lKTsKLSAgICAgICAgbUZpbGVzVXJpID0gRmlsZXMuZ2V0Q29udGVudFVyaSh2b2x1bWVOYW1lKTsKLSAgICAgICAgbUZpbGVzVXJpTm9Ob3RpZnkgPSBtRmlsZXNVcmkuYnVpbGRVcG9uKCkuYXBwZW5kUXVlcnlQYXJhbWV0ZXIoIm5vbm90aWZ5IiwgIjEiKS5idWlsZCgpOwotCi0gICAgICAgIGlmICghdm9sdW1lTmFtZS5lcXVhbHMoImludGVybmFsIikpIHsKLSAgICAgICAgICAgIC8vIHdlIG9ubHkgc3VwcG9ydCBwbGF5bGlzdHMgb24gZXh0ZXJuYWwgbWVkaWEKLSAgICAgICAgICAgIG1Qcm9jZXNzUGxheWxpc3RzID0gdHJ1ZTsKLSAgICAgICAgICAgIG1Qcm9jZXNzR2VucmVzID0gdHJ1ZTsKLSAgICAgICAgICAgIG1QbGF5bGlzdHNVcmkgPSBQbGF5bGlzdHMuZ2V0Q29udGVudFVyaSh2b2x1bWVOYW1lKTsKLQotICAgICAgICAgICAgbUNhc2VJbnNlbnNpdGl2ZVBhdGhzID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNjYW5EaXJlY3RvcmllcyhTdHJpbmdbXSBkaXJlY3RvcmllcywgU3RyaW5nIHZvbHVtZU5hbWUpIHsKKyAgICBwdWJsaWMgdm9pZCBzY2FuRGlyZWN0b3JpZXMoU3RyaW5nW10gZGlyZWN0b3JpZXMpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGxvbmcgc3RhcnQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLSAgICAgICAgICAgIGluaXRpYWxpemUodm9sdW1lTmFtZSk7CiAgICAgICAgICAgICBwcmVzY2FuKG51bGwsIHRydWUpOwogICAgICAgICAgICAgbG9uZyBwcmVzY2FuID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAKICAgICAgICAgICAgIGlmIChFTkFCTEVfQlVMS19JTlNFUlRTKSB7CiAgICAgICAgICAgICAgICAgLy8gY3JlYXRlIE1lZGlhSW5zZXJ0ZXIgZm9yIGJ1bGsgaW5zZXJ0cwotICAgICAgICAgICAgICAgIG1NZWRpYUluc2VydGVyID0gbmV3IE1lZGlhSW5zZXJ0ZXIobU1lZGlhUHJvdmlkZXIsIG1QYWNrYWdlTmFtZSwgNTAwKTsKKyAgICAgICAgICAgICAgICBtTWVkaWFJbnNlcnRlciA9IG5ldyBNZWRpYUluc2VydGVyKG1NZWRpYVByb3ZpZGVyLCA1MDApOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRpcmVjdG9yaWVzLmxlbmd0aDsgaSsrKSB7CkBAIC0xMzQ5LDkgKzEzNTEsOCBAQAogICAgIH0KIAogICAgIC8vIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzY2FuIGEgc2luZ2xlIGZpbGUKLSAgICBwdWJsaWMgVXJpIHNjYW5TaW5nbGVGaWxlKFN0cmluZyBwYXRoLCBTdHJpbmcgdm9sdW1lTmFtZSwgU3RyaW5nIG1pbWVUeXBlKSB7CisgICAgcHVibGljIFVyaSBzY2FuU2luZ2xlRmlsZShTdHJpbmcgcGF0aCwgU3RyaW5nIG1pbWVUeXBlKSB7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBpbml0aWFsaXplKHZvbHVtZU5hbWUpOwogICAgICAgICAgICAgcHJlc2NhbihwYXRoLCB0cnVlKTsKIAogICAgICAgICAgICAgRmlsZSBmaWxlID0gbmV3IEZpbGUocGF0aCk7CkBAIC0xNDY0LDggKzE0NjUsNyBAQAogICAgICAgICByZXR1cm4gaXNOb01lZGlhRmlsZShwYXRoKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBzY2FuTXRwRmlsZShTdHJpbmcgcGF0aCwgU3RyaW5nIHZvbHVtZU5hbWUsIGludCBvYmplY3RIYW5kbGUsIGludCBmb3JtYXQpIHsKLSAgICAgICAgaW5pdGlhbGl6ZSh2b2x1bWVOYW1lKTsKKyAgICBwdWJsaWMgdm9pZCBzY2FuTXRwRmlsZShTdHJpbmcgcGF0aCwgaW50IG9iamVjdEhhbmRsZSwgaW50IGZvcm1hdCkgewogICAgICAgICBNZWRpYUZpbGUuTWVkaWFGaWxlVHlwZSBtZWRpYUZpbGVUeXBlID0gTWVkaWFGaWxlLmdldEZpbGVUeXBlKHBhdGgpOwogICAgICAgICBpbnQgZmlsZVR5cGUgPSAobWVkaWFGaWxlVHlwZSA9PSBudWxsID8gMCA6IG1lZGlhRmlsZVR5cGUuZmlsZVR5cGUpOwogICAgICAgICBGaWxlIGZpbGUgPSBuZXcgRmlsZShwYXRoKTsKQEAgLTE0ODEsNyArMTQ4MSw3IEBACiAgICAgICAgICAgICB2YWx1ZXMucHV0KEZpbGVzLkZpbGVDb2x1bW5zLkRBVEVfTU9ESUZJRUQsIGxhc3RNb2RpZmllZFNlY29uZHMpOwogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBTdHJpbmdbXSB3aGVyZUFyZ3MgPSBuZXcgU3RyaW5nW10geyAgSW50ZWdlci50b1N0cmluZyhvYmplY3RIYW5kbGUpIH07Ci0gICAgICAgICAgICAgICAgbU1lZGlhUHJvdmlkZXIudXBkYXRlKG1QYWNrYWdlTmFtZSwgRmlsZXMuZ2V0TXRwT2JqZWN0c1VyaSh2b2x1bWVOYW1lKSwgdmFsdWVzLAorICAgICAgICAgICAgICAgIG1NZWRpYVByb3ZpZGVyLnVwZGF0ZShGaWxlcy5nZXRNdHBPYmplY3RzVXJpKG1Wb2x1bWVOYW1lKSwgdmFsdWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgIl9pZD0/Iiwgd2hlcmVBcmdzKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiUmVtb3RlRXhjZXB0aW9uIGluIHNjYW5NdHBGaWxlIiwgZSk7CkBAIC0xNDk4LDcgKzE0OTgsNyBAQAogCiAgICAgICAgICAgICAgICAgRmlsZUVudHJ5IGVudHJ5ID0gbWFrZUVudHJ5Rm9yKHBhdGgpOwogICAgICAgICAgICAgICAgIGlmIChlbnRyeSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpbGVMaXN0ID0gbU1lZGlhUHJvdmlkZXIucXVlcnkobVBhY2thZ2VOYW1lLCBtRmlsZXNVcmksCisgICAgICAgICAgICAgICAgICAgIGZpbGVMaXN0ID0gbU1lZGlhUHJvdmlkZXIucXVlcnkobUZpbGVzVXJpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEVTX1BSRVNDQU5fUFJPSkVDVElPTiwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NQbGF5TGlzdChlbnRyeSwgZmlsZUxpc3QpOwogICAgICAgICAgICAgICAgIH0KQEAgLTE1MjksNyArMTUyOSw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICB3aGVyZSA9IEZpbGVzLkZpbGVDb2x1bW5zLkRBVEEgKyAiPT8iOwogICAgICAgICAgICAgc2VsZWN0aW9uQXJncyA9IG5ldyBTdHJpbmdbXSB7IHBhdGggfTsKLSAgICAgICAgICAgIGMgPSBtTWVkaWFQcm92aWRlci5xdWVyeShtUGFja2FnZU5hbWUsIG1GaWxlc1VyaU5vTm90aWZ5LCBGSUxFU19QUkVTQ0FOX1BST0pFQ1RJT04sCisgICAgICAgICAgICBjID0gbU1lZGlhUHJvdmlkZXIucXVlcnkobUZpbGVzVXJpTm9Ob3RpZnksIEZJTEVTX1BSRVNDQU5fUFJPSkVDVElPTiwKICAgICAgICAgICAgICAgICAgICAgd2hlcmUsIHNlbGVjdGlvbkFyZ3MsIG51bGwsIG51bGwpOwogICAgICAgICAgICAgaWYgKGMubW92ZVRvRmlyc3QoKSkgewogICAgICAgICAgICAgICAgIGxvbmcgcm93SWQgPSBjLmdldExvbmcoRklMRVNfUFJFU0NBTl9JRF9DT0xVTU5fSU5ERVgpOwpAQCAtMTY0MSw3ICsxNjQxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgdmFsdWVzLmNsZWFyKCk7CiAgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXQoTWVkaWFTdG9yZS5BdWRpby5QbGF5bGlzdHMuTWVtYmVycy5QTEFZX09SREVSLCBJbnRlZ2VyLnZhbHVlT2YoaW5kZXgpKTsKICAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1dChNZWRpYVN0b3JlLkF1ZGlvLlBsYXlsaXN0cy5NZW1iZXJzLkFVRElPX0lELCBMb25nLnZhbHVlT2YoZW50cnkuYmVzdG1hdGNoaWQpKTsKLSAgICAgICAgICAgICAgICAgICAgbU1lZGlhUHJvdmlkZXIuaW5zZXJ0KG1QYWNrYWdlTmFtZSwgcGxheWxpc3RVcmksIHZhbHVlcyk7CisgICAgICAgICAgICAgICAgICAgIG1NZWRpYVByb3ZpZGVyLmluc2VydChwbGF5bGlzdFVyaSwgdmFsdWVzKTsKICAgICAgICAgICAgICAgICAgICAgaW5kZXgrKzsKICAgICAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJSZW1vdGVFeGNlcHRpb24gaW4gTWVkaWFTY2FubmVyLnByb2Nlc3NDYWNoZWRQbGF5bGlzdCgpIiwgZSk7CkBAIC0xODA2LDE2ICsxODA2LDE2IEBACiAKICAgICAgICAgaWYgKHJvd0lkID09IDApIHsKICAgICAgICAgICAgIHZhbHVlcy5wdXQoTWVkaWFTdG9yZS5BdWRpby5QbGF5bGlzdHMuREFUQSwgcGF0aCk7Ci0gICAgICAgICAgICB1cmkgPSBtTWVkaWFQcm92aWRlci5pbnNlcnQobVBhY2thZ2VOYW1lLCBtUGxheWxpc3RzVXJpLCB2YWx1ZXMpOworICAgICAgICAgICAgdXJpID0gbU1lZGlhUHJvdmlkZXIuaW5zZXJ0KG1QbGF5bGlzdHNVcmksIHZhbHVlcyk7CiAgICAgICAgICAgICByb3dJZCA9IENvbnRlbnRVcmlzLnBhcnNlSWQodXJpKTsKICAgICAgICAgICAgIG1lbWJlcnNVcmkgPSBVcmkud2l0aEFwcGVuZGVkUGF0aCh1cmksIFBsYXlsaXN0cy5NZW1iZXJzLkNPTlRFTlRfRElSRUNUT1JZKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHVyaSA9IENvbnRlbnRVcmlzLndpdGhBcHBlbmRlZElkKG1QbGF5bGlzdHNVcmksIHJvd0lkKTsKLSAgICAgICAgICAgIG1NZWRpYVByb3ZpZGVyLnVwZGF0ZShtUGFja2FnZU5hbWUsIHVyaSwgdmFsdWVzLCBudWxsLCBudWxsKTsKKyAgICAgICAgICAgIG1NZWRpYVByb3ZpZGVyLnVwZGF0ZSh1cmksIHZhbHVlcywgbnVsbCwgbnVsbCk7CiAKICAgICAgICAgICAgIC8vIGRlbGV0ZSBtZW1iZXJzIG9mIGV4aXN0aW5nIHBsYXlsaXN0CiAgICAgICAgICAgICBtZW1iZXJzVXJpID0gVXJpLndpdGhBcHBlbmRlZFBhdGgodXJpLCBQbGF5bGlzdHMuTWVtYmVycy5DT05URU5UX0RJUkVDVE9SWSk7Ci0gICAgICAgICAgICBtTWVkaWFQcm92aWRlci5kZWxldGUobVBhY2thZ2VOYW1lLCBtZW1iZXJzVXJpLCBudWxsLCBudWxsKTsKKyAgICAgICAgICAgIG1NZWRpYVByb3ZpZGVyLmRlbGV0ZShtZW1iZXJzVXJpLCBudWxsLCBudWxsKTsKICAgICAgICAgfQogCiAgICAgICAgIFN0cmluZyBwbGF5TGlzdERpcmVjdG9yeSA9IHBhdGguc3Vic3RyaW5nKDAsIGxhc3RTbGFzaCArIDEpOwpAQCAtMTgzNyw3ICsxODM3LDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIC8vIHVzZSB0aGUgZmlsZXMgdXJpIGFuZCBwcm9qZWN0aW9uIGJlY2F1c2Ugd2UgbmVlZCB0aGUgZm9ybWF0IGNvbHVtbiwKICAgICAgICAgICAgIC8vIGJ1dCByZXN0cmljdCB0aGUgcXVlcnkgdG8ganVzdCBhdWRpbyBmaWxlcwotICAgICAgICAgICAgZmlsZUxpc3QgPSBtTWVkaWFQcm92aWRlci5xdWVyeShtUGFja2FnZU5hbWUsIG1GaWxlc1VyaSwgRklMRVNfUFJFU0NBTl9QUk9KRUNUSU9OLAorICAgICAgICAgICAgZmlsZUxpc3QgPSBtTWVkaWFQcm92aWRlci5xdWVyeShtRmlsZXNVcmksIEZJTEVTX1BSRVNDQU5fUFJPSkVDVElPTiwKICAgICAgICAgICAgICAgICAgICAgIm1lZGlhX3R5cGU9MiIsIG51bGwsIG51bGwsIG51bGwpOwogICAgICAgICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkgewogICAgICAgICAgICAgICAgIEZpbGVFbnRyeSBlbnRyeSA9IGl0ZXJhdG9yLm5leHQoKTsKQEAgLTE4NTYsNyArMTg1Niw3IEBACiAKICAgICBwcml2YXRlIG5hdGl2ZSB2b2lkIHByb2Nlc3NEaXJlY3RvcnkoU3RyaW5nIHBhdGgsIE1lZGlhU2Nhbm5lckNsaWVudCBjbGllbnQpOwogICAgIHByaXZhdGUgbmF0aXZlIHZvaWQgcHJvY2Vzc0ZpbGUoU3RyaW5nIHBhdGgsIFN0cmluZyBtaW1lVHlwZSwgTWVkaWFTY2FubmVyQ2xpZW50IGNsaWVudCk7Ci0gICAgcHVibGljIG5hdGl2ZSB2b2lkIHNldExvY2FsZShTdHJpbmcgbG9jYWxlKTsKKyAgICBwcml2YXRlIG5hdGl2ZSB2b2lkIHNldExvY2FsZShTdHJpbmcgbG9jYWxlKTsKIAogICAgIHB1YmxpYyBuYXRpdmUgYnl0ZVtdIGV4dHJhY3RBbGJ1bUFydChGaWxlRGVzY3JpcHRvciBmZCk7CiAKQEAgLTE4NjQsMTkgKzE4NjQsMjIgQEAKICAgICBwcml2YXRlIG5hdGl2ZSBmaW5hbCB2b2lkIG5hdGl2ZV9zZXR1cCgpOwogICAgIHByaXZhdGUgbmF0aXZlIGZpbmFsIHZvaWQgbmF0aXZlX2ZpbmFsaXplKCk7CiAKLSAgICAvKioKLSAgICAgKiBSZWxlYXNlcyByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgTWVkaWFTY2FubmVyIG9iamVjdC4KLSAgICAgKiBJdCBpcyBjb25zaWRlcmVkIGdvb2QgcHJhY3RpY2UgdG8gY2FsbCB0aGlzIG1ldGhvZCB3aGVuCi0gICAgICogb25lIGlzIGRvbmUgdXNpbmcgdGhlIE1lZGlhU2Nhbm5lciBvYmplY3QuIEFmdGVyIHRoaXMgbWV0aG9kCi0gICAgICogaXMgY2FsbGVkLCB0aGUgTWVkaWFTY2FubmVyIG9iamVjdCBjYW4gbm8gbG9uZ2VyIGJlIHVzZWQuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgcmVsZWFzZSgpIHsKLSAgICAgICAgbmF0aXZlX2ZpbmFsaXplKCk7CisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgY2xvc2UoKSB7CisgICAgICAgIG1DbG9zZUd1YXJkLmNsb3NlKCk7CisgICAgICAgIGlmIChtQ2xvc2VkLmNvbXBhcmVBbmRTZXQoZmFsc2UsIHRydWUpKSB7CisgICAgICAgICAgICBtTWVkaWFQcm92aWRlci5jbG9zZSgpOworICAgICAgICAgICAgbmF0aXZlX2ZpbmFsaXplKCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCBmaW5hbGl6ZSgpIHsKLSAgICAgICAgbUNvbnRleHQuZ2V0Q29udGVudFJlc29sdmVyKCkucmVsZWFzZVByb3ZpZGVyKG1NZWRpYVByb3ZpZGVyKTsKLSAgICAgICAgbmF0aXZlX2ZpbmFsaXplKCk7CisgICAgcHJvdGVjdGVkIHZvaWQgZmluYWxpemUoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIG1DbG9zZUd1YXJkLndhcm5JZk9wZW4oKTsKKyAgICAgICAgICAgIGNsb3NlKCk7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBzdXBlci5maW5hbGl6ZSgpOworICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL2Jyb3dzZS9NZWRpYUJyb3dzZXIuamF2YSBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9icm93c2UvTWVkaWFCcm93c2VyLmphdmEKaW5kZXggYmU5ZmI0Ny4uNGNhODlhOCAxMDA2NDQKLS0tIGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL2Jyb3dzZS9NZWRpYUJyb3dzZXIuamF2YQorKysgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvYnJvd3NlL01lZGlhQnJvd3Nlci5qYXZhCkBAIC01NzQsNiArNTc0LDkgQEAKICAgICAgICAgTG9nLmQoVEFHLCAiICBtTWVkaWFTZXNzaW9uVG9rZW49IiArIG1NZWRpYVNlc3Npb25Ub2tlbik7CiAgICAgfQogCisgICAgLyoqCisgICAgICogQSBjbGFzcyB3aXRoIGluZm9ybWF0aW9uIG9uIGEgc2luZ2xlIG1lZGlhIGl0ZW0gZm9yIHVzZSBpbiBicm93c2luZyBtZWRpYS4KKyAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGNsYXNzIE1lZGlhSXRlbSBpbXBsZW1lbnRzIFBhcmNlbGFibGUgewogICAgICAgICBwcml2YXRlIGZpbmFsIGludCBtRmxhZ3M7CiAgICAgICAgIHByaXZhdGUgZmluYWwgTWVkaWFEZXNjcmlwdGlvbiBtRGVzY3JpcHRpb247CmRpZmYgLS1naXQgYS9tZWRpYS9qYXZhL2FuZHJvaWQvbXRwL010cERhdGFiYXNlLmphdmEgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbXRwL010cERhdGFiYXNlLmphdmEKaW5kZXggMzU0MWZiYS4uYmM5NmUyZSAxMDA3NTUKLS0tIGEvbWVkaWEvamF2YS9hbmRyb2lkL210cC9NdHBEYXRhYmFzZS5qYXZhCisrKyBiL21lZGlhL2phdmEvYW5kcm9pZC9tdHAvTXRwRGF0YWJhc2UuamF2YQpAQCAtMTcsOSArMTcsOSBAQAogcGFja2FnZSBhbmRyb2lkLm10cDsKIAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Ccm9hZGNhc3RSZWNlaXZlcjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFByb3ZpZGVyQ2xpZW50OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZW50VmFsdWVzOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JQ29udGVudFByb3ZpZGVyOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudEZpbHRlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuU2hhcmVkUHJlZmVyZW5jZXM7CkBAIC0zNywyMyArMzcsMzAgQEAKIGltcG9ydCBhbmRyb2lkLnZpZXcuRGlzcGxheTsKIGltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlcjsKIAoraW1wb3J0IGRhbHZpay5zeXN0ZW0uQ2xvc2VHdWFyZDsKKwogaW1wb3J0IGphdmEuaW8uRmlsZTsKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwogaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuYXRvbWljLkF0b21pY0Jvb2xlYW47CiAKIC8qKgogICoge0BoaWRlfQogICovCi1wdWJsaWMgY2xhc3MgTXRwRGF0YWJhc2UgewotCitwdWJsaWMgY2xhc3MgTXRwRGF0YWJhc2UgaW1wbGVtZW50cyBBdXRvQ2xvc2VhYmxlIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIk10cERhdGFiYXNlIjsKIAogICAgIHByaXZhdGUgZmluYWwgQ29udGV4dCBtQ29udGV4dDsKICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBtUGFja2FnZU5hbWU7Ci0gICAgcHJpdmF0ZSBmaW5hbCBJQ29udGVudFByb3ZpZGVyIG1NZWRpYVByb3ZpZGVyOworICAgIHByaXZhdGUgZmluYWwgQ29udGVudFByb3ZpZGVyQ2xpZW50IG1NZWRpYVByb3ZpZGVyOwogICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG1Wb2x1bWVOYW1lOwogICAgIHByaXZhdGUgZmluYWwgVXJpIG1PYmplY3RzVXJpOworICAgIHByaXZhdGUgZmluYWwgTWVkaWFTY2FubmVyIG1NZWRpYVNjYW5uZXI7CisKKyAgICBwcml2YXRlIGZpbmFsIEF0b21pY0Jvb2xlYW4gbUNsb3NlZCA9IG5ldyBBdG9taWNCb29sZWFuKCk7CisgICAgcHJpdmF0ZSBmaW5hbCBDbG9zZUd1YXJkIG1DbG9zZUd1YXJkID0gQ2xvc2VHdWFyZC5nZXQoKTsKKwogICAgIC8vIHBhdGggdG8gcHJpbWFyeSBzdG9yYWdlCiAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbU1lZGlhU3RvcmFnZVBhdGg7CiAgICAgLy8gaWYgbm90IG51bGwsIHJlc3RyaWN0IGFsbCBxdWVyaWVzIHRvIHRoZXNlIHN1YmRpcmVjdG9yaWVzCkBAIC0xMjAsNyArMTI3LDYgQEAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RPUkFHRV9GT1JNQVRfUEFSRU5UX1dIRVJFID0gU1RPUkFHRV9GT1JNQVRfV0hFUkUgKyAiIEFORCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgRmlsZXMuRmlsZUNvbHVtbnMuUEFSRU5UICsgIj0/IjsKIAotICAgIHByaXZhdGUgZmluYWwgTWVkaWFTY2FubmVyIG1NZWRpYVNjYW5uZXI7CiAgICAgcHJpdmF0ZSBNdHBTZXJ2ZXIgbVNlcnZlcjsKIAogICAgIC8vIHJlYWQgZnJvbSBuYXRpdmUgY29kZQpAQCAtMTU2LDExICsxNjIsMTIgQEAKIAogICAgICAgICBtQ29udGV4dCA9IGNvbnRleHQ7CiAgICAgICAgIG1QYWNrYWdlTmFtZSA9IGNvbnRleHQuZ2V0UGFja2FnZU5hbWUoKTsKLSAgICAgICAgbU1lZGlhUHJvdmlkZXIgPSBjb250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpLmFjcXVpcmVQcm92aWRlcigibWVkaWEiKTsKKyAgICAgICAgbU1lZGlhUHJvdmlkZXIgPSBjb250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpCisgICAgICAgICAgICAgICAgLmFjcXVpcmVDb250ZW50UHJvdmlkZXJDbGllbnQoTWVkaWFTdG9yZS5BVVRIT1JJVFkpOwogICAgICAgICBtVm9sdW1lTmFtZSA9IHZvbHVtZU5hbWU7CiAgICAgICAgIG1NZWRpYVN0b3JhZ2VQYXRoID0gc3RvcmFnZVBhdGg7CiAgICAgICAgIG1PYmplY3RzVXJpID0gRmlsZXMuZ2V0TXRwT2JqZWN0c1VyaSh2b2x1bWVOYW1lKTsKLSAgICAgICAgbU1lZGlhU2Nhbm5lciA9IG5ldyBNZWRpYVNjYW5uZXIoY29udGV4dCk7CisgICAgICAgIG1NZWRpYVNjYW5uZXIgPSBuZXcgTWVkaWFTY2FubmVyKGNvbnRleHQsIG1Wb2x1bWVOYW1lKTsKIAogICAgICAgICBtU3ViRGlyZWN0b3JpZXMgPSBzdWJEaXJlY3RvcmllczsKICAgICAgICAgaWYgKHN1YkRpcmVjdG9yaWVzICE9IG51bGwpIHsKQEAgLTE4NywyMCArMTk0LDkgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIC8vIFNldCBsb2NhbGUgdG8gTWVkaWFTY2FubmVyLgotICAgICAgICBMb2NhbGUgbG9jYWxlID0gY29udGV4dC5nZXRSZXNvdXJjZXMoKS5nZXRDb25maWd1cmF0aW9uKCkubG9jYWxlOwotICAgICAgICBpZiAobG9jYWxlICE9IG51bGwpIHsKLSAgICAgICAgICAgIFN0cmluZyBsYW5ndWFnZSA9IGxvY2FsZS5nZXRMYW5ndWFnZSgpOwotICAgICAgICAgICAgU3RyaW5nIGNvdW50cnkgPSBsb2NhbGUuZ2V0Q291bnRyeSgpOwotICAgICAgICAgICAgaWYgKGxhbmd1YWdlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBpZiAoY291bnRyeSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1NZWRpYVNjYW5uZXIuc2V0TG9jYWxlKGxhbmd1YWdlICsgIl8iICsgY291bnRyeSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbU1lZGlhU2Nhbm5lci5zZXRMb2NhbGUobGFuZ3VhZ2UpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQogICAgICAgICBpbml0RGV2aWNlUHJvcGVydGllcyhjb250ZXh0KTsKKworICAgICAgICBtQ2xvc2VHdWFyZC5vcGVuKCJjbG9zZSIpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldFNlcnZlcihNdHBTZXJ2ZXIgc2VydmVyKSB7CkBAIC0yMjEsOSArMjE3LDIwIEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgY2xvc2UoKSB7CisgICAgICAgIG1DbG9zZUd1YXJkLmNsb3NlKCk7CisgICAgICAgIGlmIChtQ2xvc2VkLmNvbXBhcmVBbmRTZXQoZmFsc2UsIHRydWUpKSB7CisgICAgICAgICAgICBtTWVkaWFTY2FubmVyLmNsb3NlKCk7CisgICAgICAgICAgICBtTWVkaWFQcm92aWRlci5jbG9zZSgpOworICAgICAgICAgICAgbmF0aXZlX2ZpbmFsaXplKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKICAgICBwcm90ZWN0ZWQgdm9pZCBmaW5hbGl6ZSgpIHRocm93cyBUaHJvd2FibGUgewogICAgICAgICB0cnkgewotICAgICAgICAgICAgbmF0aXZlX2ZpbmFsaXplKCk7CisgICAgICAgICAgICBtQ2xvc2VHdWFyZC53YXJuSWZPcGVuKCk7CisgICAgICAgICAgICBjbG9zZSgpOwogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgc3VwZXIuZmluYWxpemUoKTsKICAgICAgICAgfQpAQCAtMzM0LDcgKzM0MSw3IEBACiAgICAgICAgIGlmIChwYXRoICE9IG51bGwpIHsKICAgICAgICAgICAgIEN1cnNvciBjID0gbnVsbDsKICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgYyA9IG1NZWRpYVByb3ZpZGVyLnF1ZXJ5KG1QYWNrYWdlTmFtZSwgbU9iamVjdHNVcmksIElEX1BST0pFQ1RJT04sIFBBVEhfV0hFUkUsCisgICAgICAgICAgICAgICAgYyA9IG1NZWRpYVByb3ZpZGVyLnF1ZXJ5KG1PYmplY3RzVXJpLCBJRF9QUk9KRUNUSU9OLCBQQVRIX1dIRVJFLAogICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFN0cmluZ1tdIHsgcGF0aCB9LCBudWxsLCBudWxsKTsKICAgICAgICAgICAgICAgICBpZiAoYyAhPSBudWxsICYmIGMuZ2V0Q291bnQoKSA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiZmlsZSBhbHJlYWR5IGV4aXN0cyBpbiBiZWdpblNlbmRPYmplY3Q6ICIgKyBwYXRoKTsKQEAgLTM1OSw3ICszNjYsNyBAQAogICAgICAgICB2YWx1ZXMucHV0KEZpbGVzLkZpbGVDb2x1bW5zLkRBVEVfTU9ESUZJRUQsIG1vZGlmaWVkKTsKIAogICAgICAgICB0cnkgewotICAgICAgICAgICAgVXJpIHVyaSA9IG1NZWRpYVByb3ZpZGVyLmluc2VydChtUGFja2FnZU5hbWUsIG1PYmplY3RzVXJpLCB2YWx1ZXMpOworICAgICAgICAgICAgVXJpIHVyaSA9IG1NZWRpYVByb3ZpZGVyLmluc2VydChtT2JqZWN0c1VyaSwgdmFsdWVzKTsKICAgICAgICAgICAgIGlmICh1cmkgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIHJldHVybiBJbnRlZ2VyLnBhcnNlSW50KHVyaS5nZXRQYXRoU2VnbWVudHMoKS5nZXQoMikpOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTM5NCwxMyArNDAxLDEzIEBACiAgICAgICAgICAgICAgICAgdmFsdWVzLnB1dChGaWxlcy5GaWxlQ29sdW1ucy5EQVRFX01PRElGSUVELCBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAvIDEwMDApOwogICAgICAgICAgICAgICAgIHZhbHVlcy5wdXQoTWVkaWFDb2x1bW5zLk1FRElBX1NDQU5ORVJfTkVXX09CSkVDVF9JRCwgaGFuZGxlKTsKICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICBVcmkgdXJpID0gbU1lZGlhUHJvdmlkZXIuaW5zZXJ0KG1QYWNrYWdlTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgVXJpIHVyaSA9IG1NZWRpYVByb3ZpZGVyLmluc2VydCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdWRpby5QbGF5bGlzdHMuRVhURVJOQUxfQ09OVEVOVF9VUkksIHZhbHVlcyk7CiAgICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiUmVtb3RlRXhjZXB0aW9uIGluIGVuZFNlbmRPYmplY3QiLCBlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG1NZWRpYVNjYW5uZXIuc2Nhbk10cEZpbGUocGF0aCwgbVZvbHVtZU5hbWUsIGhhbmRsZSwgZm9ybWF0KTsKKyAgICAgICAgICAgICAgICBtTWVkaWFTY2FubmVyLnNjYW5NdHBGaWxlKHBhdGgsIGhhbmRsZSwgZm9ybWF0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGRlbGV0ZUZpbGUoaGFuZGxlKTsKQEAgLTUwMyw3ICs1MTAsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIG1NZWRpYVByb3ZpZGVyLnF1ZXJ5KG1QYWNrYWdlTmFtZSwgbU9iamVjdHNVcmksIElEX1BST0pFQ1RJT04sIHdoZXJlLAorICAgICAgICByZXR1cm4gbU1lZGlhUHJvdmlkZXIucXVlcnkobU9iamVjdHNVcmksIElEX1BST0pFQ1RJT04sIHdoZXJlLAogICAgICAgICAgICAgICAgIHdoZXJlQXJncywgbnVsbCwgbnVsbCk7CiAgICAgfQogCkBAIC03MjEsNyArNzI4LDcgQEAKICAgICAgICAgICAgICBwcm9wZXJ0eUdyb3VwID0gbVByb3BlcnR5R3JvdXBzQnlGb3JtYXQuZ2V0KGZvcm1hdCk7CiAgICAgICAgICAgICAgaWYgKHByb3BlcnR5R3JvdXAgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGludFtdIHByb3BlcnR5TGlzdCA9IGdldFN1cHBvcnRlZE9iamVjdFByb3BlcnRpZXMoZm9ybWF0KTsKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eUdyb3VwID0gbmV3IE10cFByb3BlcnR5R3JvdXAodGhpcywgbU1lZGlhUHJvdmlkZXIsIG1QYWNrYWdlTmFtZSwKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eUdyb3VwID0gbmV3IE10cFByb3BlcnR5R3JvdXAodGhpcywgbU1lZGlhUHJvdmlkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICBtVm9sdW1lTmFtZSwgcHJvcGVydHlMaXN0KTsKICAgICAgICAgICAgICAgICBtUHJvcGVydHlHcm91cHNCeUZvcm1hdC5wdXQobmV3IEludGVnZXIoZm9ybWF0KSwgcHJvcGVydHlHcm91cCk7CiAgICAgICAgICAgICB9CkBAIC03MjksNyArNzM2LDcgQEAKICAgICAgICAgICAgICAgcHJvcGVydHlHcm91cCA9IG1Qcm9wZXJ0eUdyb3Vwc0J5UHJvcGVydHkuZ2V0KHByb3BlcnR5KTsKICAgICAgICAgICAgICBpZiAocHJvcGVydHlHcm91cCA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgaW50W10gcHJvcGVydHlMaXN0ID0gbmV3IGludFtdIHsgKGludClwcm9wZXJ0eSB9OwotICAgICAgICAgICAgICAgIHByb3BlcnR5R3JvdXAgPSBuZXcgTXRwUHJvcGVydHlHcm91cCh0aGlzLCBtTWVkaWFQcm92aWRlciwgbVBhY2thZ2VOYW1lLAorICAgICAgICAgICAgICAgIHByb3BlcnR5R3JvdXAgPSBuZXcgTXRwUHJvcGVydHlHcm91cCh0aGlzLCBtTWVkaWFQcm92aWRlciwKICAgICAgICAgICAgICAgICAgICAgICAgIG1Wb2x1bWVOYW1lLCBwcm9wZXJ0eUxpc3QpOwogICAgICAgICAgICAgICAgIG1Qcm9wZXJ0eUdyb3Vwc0J5UHJvcGVydHkucHV0KG5ldyBJbnRlZ2VyKChpbnQpcHJvcGVydHkpLCBwcm9wZXJ0eUdyb3VwKTsKICAgICAgICAgICAgIH0KQEAgLTc0NSw3ICs3NTIsNyBAQAogICAgICAgICBTdHJpbmcgcGF0aCA9IG51bGw7CiAgICAgICAgIFN0cmluZ1tdIHdoZXJlQXJncyA9IG5ldyBTdHJpbmdbXSB7ICBJbnRlZ2VyLnRvU3RyaW5nKGhhbmRsZSkgfTsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGMgPSBtTWVkaWFQcm92aWRlci5xdWVyeShtUGFja2FnZU5hbWUsIG1PYmplY3RzVXJpLCBQQVRIX1BST0pFQ1RJT04sIElEX1dIRVJFLAorICAgICAgICAgICAgYyA9IG1NZWRpYVByb3ZpZGVyLnF1ZXJ5KG1PYmplY3RzVXJpLCBQQVRIX1BST0pFQ1RJT04sIElEX1dIRVJFLAogICAgICAgICAgICAgICAgICAgICB3aGVyZUFyZ3MsIG51bGwsIG51bGwpOwogICAgICAgICAgICAgaWYgKGMgIT0gbnVsbCAmJiBjLm1vdmVUb05leHQoKSkgewogICAgICAgICAgICAgICAgIHBhdGggPSBjLmdldFN0cmluZygxKTsKQEAgLTc4OCw3ICs3OTUsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgLy8gbm90ZSAtIHdlIGFyZSByZWx5aW5nIG9uIGEgc3BlY2lhbCBjYXNlIGluIE1lZGlhUHJvdmlkZXIudXBkYXRlKCkgdG8gdXBkYXRlCiAgICAgICAgICAgICAvLyB0aGUgcGF0aHMgZm9yIGFsbCBjaGlsZHJlbiBpbiB0aGUgY2FzZSB3aGVyZSB0aGlzIGlzIGEgZGlyZWN0b3J5LgotICAgICAgICAgICAgdXBkYXRlZCA9IG1NZWRpYVByb3ZpZGVyLnVwZGF0ZShtUGFja2FnZU5hbWUsIG1PYmplY3RzVXJpLCB2YWx1ZXMsIElEX1dIRVJFLCB3aGVyZUFyZ3MpOworICAgICAgICAgICAgdXBkYXRlZCA9IG1NZWRpYVByb3ZpZGVyLnVwZGF0ZShtT2JqZWN0c1VyaSwgdmFsdWVzLCBJRF9XSEVSRSwgd2hlcmVBcmdzKTsKICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIExvZy5lKFRBRywgIlJlbW90ZUV4Y2VwdGlvbiBpbiBtTWVkaWFQcm92aWRlci51cGRhdGUiLCBlKTsKICAgICAgICAgfQpAQCAtODA1LDcgKzgxMiw3IEBACiAgICAgICAgICAgICBpZiAob2xkRmlsZS5nZXROYW1lKCkuc3RhcnRzV2l0aCgiLiIpICYmICFuZXdQYXRoLnN0YXJ0c1dpdGgoIi4iKSkgewogICAgICAgICAgICAgICAgIC8vIGRpcmVjdG9yeSB3YXMgdW5oaWRkZW4KICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICBtTWVkaWFQcm92aWRlci5jYWxsKG1QYWNrYWdlTmFtZSwgTWVkaWFTdG9yZS5VTkhJREVfQ0FMTCwgbmV3UGF0aCwgbnVsbCk7CisgICAgICAgICAgICAgICAgICAgIG1NZWRpYVByb3ZpZGVyLmNhbGwoTWVkaWFTdG9yZS5VTkhJREVfQ0FMTCwgbmV3UGF0aCwgbnVsbCk7CiAgICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiZmFpbGVkIHRvIHVuaGlkZS9yZXNjYW4gZm9yICIgKyBuZXdQYXRoKTsKICAgICAgICAgICAgICAgICB9CkBAIC04MTUsNyArODIyLDcgQEAKICAgICAgICAgICAgIGlmIChvbGRGaWxlLmdldE5hbWUoKS50b0xvd2VyQ2FzZShMb2NhbGUuVVMpLmVxdWFscygiLm5vbWVkaWEiKQogICAgICAgICAgICAgICAgICAgICAmJiAhbmV3UGF0aC50b0xvd2VyQ2FzZShMb2NhbGUuVVMpLmVxdWFscygiLm5vbWVkaWEiKSkgewogICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIG1NZWRpYVByb3ZpZGVyLmNhbGwobVBhY2thZ2VOYW1lLCBNZWRpYVN0b3JlLlVOSElERV9DQUxMLCBvbGRGaWxlLmdldFBhcmVudCgpLCBudWxsKTsKKyAgICAgICAgICAgICAgICAgICAgbU1lZGlhUHJvdmlkZXIuY2FsbChNZWRpYVN0b3JlLlVOSElERV9DQUxMLCBvbGRGaWxlLmdldFBhcmVudCgpLCBudWxsKTsKICAgICAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJmYWlsZWQgdG8gdW5oaWRlL3Jlc2NhbiBmb3IgIiArIG5ld1BhdGgpOwogICAgICAgICAgICAgICAgIH0KQEAgLTg4Niw3ICs4OTMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgY2hhcltdIG91dE5hbWUsIGxvbmdbXSBvdXRDcmVhdGVkTW9kaWZpZWQpIHsKICAgICAgICAgQ3Vyc29yIGMgPSBudWxsOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgYyA9IG1NZWRpYVByb3ZpZGVyLnF1ZXJ5KG1QYWNrYWdlTmFtZSwgbU9iamVjdHNVcmksIE9CSkVDVF9JTkZPX1BST0pFQ1RJT04sCisgICAgICAgICAgICBjID0gbU1lZGlhUHJvdmlkZXIucXVlcnkobU9iamVjdHNVcmksIE9CSkVDVF9JTkZPX1BST0pFQ1RJT04sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSURfV0hFUkUsIG5ldyBTdHJpbmdbXSB7ICBJbnRlZ2VyLnRvU3RyaW5nKGhhbmRsZSkgfSwgbnVsbCwgbnVsbCk7CiAgICAgICAgICAgICBpZiAoYyAhPSBudWxsICYmIGMubW92ZVRvTmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgb3V0U3RvcmFnZUZvcm1hdFBhcmVudFswXSA9IGMuZ2V0SW50KDEpOwpAQCAtOTMzLDcgKzk0MCw3IEBACiAgICAgICAgIH0KICAgICAgICAgQ3Vyc29yIGMgPSBudWxsOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgYyA9IG1NZWRpYVByb3ZpZGVyLnF1ZXJ5KG1QYWNrYWdlTmFtZSwgbU9iamVjdHNVcmksIFBBVEhfRk9STUFUX1BST0pFQ1RJT04sCisgICAgICAgICAgICBjID0gbU1lZGlhUHJvdmlkZXIucXVlcnkobU9iamVjdHNVcmksIFBBVEhfRk9STUFUX1BST0pFQ1RJT04sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSURfV0hFUkUsIG5ldyBTdHJpbmdbXSB7ICBJbnRlZ2VyLnRvU3RyaW5nKGhhbmRsZSkgfSwgbnVsbCwgbnVsbCk7CiAgICAgICAgICAgICBpZiAoYyAhPSBudWxsICYmIGMubW92ZVRvTmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgU3RyaW5nIHBhdGggPSBjLmdldFN0cmluZygxKTsKQEAgLTk2MCw3ICs5NjcsNyBAQAogICAgIHByaXZhdGUgaW50IGdldE9iamVjdEZvcm1hdChpbnQgaGFuZGxlKSB7CiAgICAgICAgIEN1cnNvciBjID0gbnVsbDsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGMgPSBtTWVkaWFQcm92aWRlci5xdWVyeShtUGFja2FnZU5hbWUsIG1PYmplY3RzVXJpLCBGT1JNQVRfUFJPSkVDVElPTiwKKyAgICAgICAgICAgIGMgPSBtTWVkaWFQcm92aWRlci5xdWVyeShtT2JqZWN0c1VyaSwgRk9STUFUX1BST0pFQ1RJT04sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSURfV0hFUkUsIG5ldyBTdHJpbmdbXSB7ICBJbnRlZ2VyLnRvU3RyaW5nKGhhbmRsZSkgfSwgbnVsbCwgbnVsbCk7CiAgICAgICAgICAgICBpZiAoYyAhPSBudWxsICYmIGMubW92ZVRvTmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGMuZ2V0SW50KDEpOwpAQCAtOTg0LDcgKzk5MSw3IEBACiAKICAgICAgICAgQ3Vyc29yIGMgPSBudWxsOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgYyA9IG1NZWRpYVByb3ZpZGVyLnF1ZXJ5KG1QYWNrYWdlTmFtZSwgbU9iamVjdHNVcmksIFBBVEhfRk9STUFUX1BST0pFQ1RJT04sCisgICAgICAgICAgICBjID0gbU1lZGlhUHJvdmlkZXIucXVlcnkobU9iamVjdHNVcmksIFBBVEhfRk9STUFUX1BST0pFQ1RJT04sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSURfV0hFUkUsIG5ldyBTdHJpbmdbXSB7ICBJbnRlZ2VyLnRvU3RyaW5nKGhhbmRsZSkgfSwgbnVsbCwgbnVsbCk7CiAgICAgICAgICAgICBpZiAoYyAhPSBudWxsICYmIGMubW92ZVRvTmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgLy8gZG9uJ3QgY29udmVydCB0byBtZWRpYSBwYXRoIGhlcmUsIHNpbmNlIHdlIHdpbGwgYmUgbWF0Y2hpbmcKQEAgLTEwMDcsNyArMTAxNCw3IEBACiAgICAgICAgICAgICBpZiAoZm9ybWF0ID09IE10cENvbnN0YW50cy5GT1JNQVRfQVNTT0NJQVRJT04pIHsKICAgICAgICAgICAgICAgICAvLyByZWN1cnNpdmUgY2FzZSAtIGRlbGV0ZSBhbGwgY2hpbGRyZW4gZmlyc3QKICAgICAgICAgICAgICAgICBVcmkgdXJpID0gRmlsZXMuZ2V0TXRwT2JqZWN0c1VyaShtVm9sdW1lTmFtZSk7Ci0gICAgICAgICAgICAgICAgaW50IGNvdW50ID0gbU1lZGlhUHJvdmlkZXIuZGVsZXRlKG1QYWNrYWdlTmFtZSwgdXJpLAorICAgICAgICAgICAgICAgIGludCBjb3VudCA9IG1NZWRpYVByb3ZpZGVyLmRlbGV0ZSh1cmksCiAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSAnbGlrZScgbWFrZXMgaXQgdXNlIHRoZSBpbmRleCwgdGhlICdsb3dlcigpJyBtYWtlcyBpdCBjb3JyZWN0CiAgICAgICAgICAgICAgICAgICAgIC8vIHdoZW4gdGhlIHBhdGggY29udGFpbnMgc3FsaXRlIHdpbGRjYXJkIGNoYXJhY3RlcnMKICAgICAgICAgICAgICAgICAgICAgIl9kYXRhIExJS0UgPzEgQU5EIGxvd2VyKHN1YnN0cihfZGF0YSwxLD8yKSk9bG93ZXIoPzMpIiwKQEAgLTEwMTUsMTIgKzEwMjIsMTIgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgVXJpIHVyaSA9IEZpbGVzLmdldE10cE9iamVjdHNVcmkobVZvbHVtZU5hbWUsIGhhbmRsZSk7Ci0gICAgICAgICAgICBpZiAobU1lZGlhUHJvdmlkZXIuZGVsZXRlKG1QYWNrYWdlTmFtZSwgdXJpLCBudWxsLCBudWxsKSA+IDApIHsKKyAgICAgICAgICAgIGlmIChtTWVkaWFQcm92aWRlci5kZWxldGUodXJpLCBudWxsLCBudWxsKSA+IDApIHsKICAgICAgICAgICAgICAgICBpZiAoZm9ybWF0ICE9IE10cENvbnN0YW50cy5GT1JNQVRfQVNTT0NJQVRJT04KICAgICAgICAgICAgICAgICAgICAgICAgICYmIHBhdGgudG9Mb3dlckNhc2UoTG9jYWxlLlVTKS5lbmRzV2l0aCgiLy5ub21lZGlhIikpIHsKICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBwYXJlbnRQYXRoID0gcGF0aC5zdWJzdHJpbmcoMCwgcGF0aC5sYXN0SW5kZXhPZigiLyIpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1NZWRpYVByb3ZpZGVyLmNhbGwobVBhY2thZ2VOYW1lLCBNZWRpYVN0b3JlLlVOSElERV9DQUxMLCBwYXJlbnRQYXRoLCBudWxsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1NZWRpYVByb3ZpZGVyLmNhbGwoTWVkaWFTdG9yZS5VTkhJREVfQ0FMTCwgcGFyZW50UGF0aCwgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJmYWlsZWQgdG8gdW5oaWRlL3Jlc2NhbiBmb3IgIiArIHBhdGgpOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0xMDQzLDcgKzEwNTAsNyBAQAogICAgICAgICBVcmkgdXJpID0gRmlsZXMuZ2V0TXRwUmVmZXJlbmNlc1VyaShtVm9sdW1lTmFtZSwgaGFuZGxlKTsKICAgICAgICAgQ3Vyc29yIGMgPSBudWxsOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgYyA9IG1NZWRpYVByb3ZpZGVyLnF1ZXJ5KG1QYWNrYWdlTmFtZSwgdXJpLCBJRF9QUk9KRUNUSU9OLCBudWxsLCBudWxsLCBudWxsLCBudWxsKTsKKyAgICAgICAgICAgIGMgPSBtTWVkaWFQcm92aWRlci5xdWVyeSh1cmksIElEX1BST0pFQ1RJT04sIG51bGwsIG51bGwsIG51bGwsIG51bGwpOwogICAgICAgICAgICAgaWYgKGMgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgfQpAQCAtMTA3Nyw3ICsxMDg0LDcgQEAKICAgICAgICAgICAgIHZhbHVlc0xpc3RbaV0gPSB2YWx1ZXM7CiAgICAgICAgIH0KICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGlmIChtTWVkaWFQcm92aWRlci5idWxrSW5zZXJ0KG1QYWNrYWdlTmFtZSwgdXJpLCB2YWx1ZXNMaXN0KSA+IDApIHsKKyAgICAgICAgICAgIGlmIChtTWVkaWFQcm92aWRlci5idWxrSW5zZXJ0KHVyaSwgdmFsdWVzTGlzdCkgPiAwKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE10cENvbnN0YW50cy5SRVNQT05TRV9PSzsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKZGlmZiAtLWdpdCBhL21lZGlhL2phdmEvYW5kcm9pZC9tdHAvTXRwUHJvcGVydHlHcm91cC5qYXZhIGIvbWVkaWEvamF2YS9hbmRyb2lkL210cC9NdHBQcm9wZXJ0eUdyb3VwLmphdmEKaW5kZXggYzgwYWRmYS4uZGVhMzAwOCAxMDA2NDQKLS0tIGEvbWVkaWEvamF2YS9hbmRyb2lkL210cC9NdHBQcm9wZXJ0eUdyb3VwLmphdmEKKysrIGIvbWVkaWEvamF2YS9hbmRyb2lkL210cC9NdHBQcm9wZXJ0eUdyb3VwLmphdmEKQEAgLTE2LDcgKzE2LDcgQEAKIAogcGFja2FnZSBhbmRyb2lkLm10cDsKIAotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JQ29udGVudFByb3ZpZGVyOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZW50UHJvdmlkZXJDbGllbnQ7CiBpbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5DdXJzb3I7CiBpbXBvcnQgYW5kcm9pZC5uZXQuVXJpOwogaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwpAQCAtNDgsOCArNDgsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgZmluYWwgTXRwRGF0YWJhc2UgbURhdGFiYXNlOwotICAgIHByaXZhdGUgZmluYWwgSUNvbnRlbnRQcm92aWRlciBtUHJvdmlkZXI7Ci0gICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbVBhY2thZ2VOYW1lOworICAgIHByaXZhdGUgZmluYWwgQ29udGVudFByb3ZpZGVyQ2xpZW50IG1Qcm92aWRlcjsKICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBtVm9sdW1lTmFtZTsKICAgICBwcml2YXRlIGZpbmFsIFVyaSBtVXJpOwogCkBAIC02NSwxMyArNjQsMTIgQEAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSRU5UX1dIRVJFID0gRmlsZXMuRmlsZUNvbHVtbnMuUEFSRU5UICsgIj0/IjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSRU5UX0ZPUk1BVF9XSEVSRSA9IFBBUkVOVF9XSEVSRSArICIgQU5EICIgKyBGT1JNQVRfV0hFUkU7CiAgICAgLy8gY29uc3RydWN0cyBhIHByb3BlcnR5IGdyb3VwIGZvciBhIGxpc3Qgb2YgcHJvcGVydGllcwotICAgIHB1YmxpYyBNdHBQcm9wZXJ0eUdyb3VwKE10cERhdGFiYXNlIGRhdGFiYXNlLCBJQ29udGVudFByb3ZpZGVyIHByb3ZpZGVyLCBTdHJpbmcgcGFja2FnZU5hbWUsCi0gICAgICAgICAgICBTdHJpbmcgdm9sdW1lLCBpbnRbXSBwcm9wZXJ0aWVzKSB7CisgICAgcHVibGljIE10cFByb3BlcnR5R3JvdXAoTXRwRGF0YWJhc2UgZGF0YWJhc2UsIENvbnRlbnRQcm92aWRlckNsaWVudCBwcm92aWRlciwgU3RyaW5nIHZvbHVtZU5hbWUsCisgICAgICAgICAgICBpbnRbXSBwcm9wZXJ0aWVzKSB7CiAgICAgICAgIG1EYXRhYmFzZSA9IGRhdGFiYXNlOwogICAgICAgICBtUHJvdmlkZXIgPSBwcm92aWRlcjsKLSAgICAgICAgbVBhY2thZ2VOYW1lID0gcGFja2FnZU5hbWU7Ci0gICAgICAgIG1Wb2x1bWVOYW1lID0gdm9sdW1lOwotICAgICAgICBtVXJpID0gRmlsZXMuZ2V0TXRwT2JqZWN0c1VyaSh2b2x1bWUpOworICAgICAgICBtVm9sdW1lTmFtZSA9IHZvbHVtZU5hbWU7CisgICAgICAgIG1VcmkgPSBGaWxlcy5nZXRNdHBPYmplY3RzVXJpKHZvbHVtZU5hbWUpOwogCiAgICAgICAgIGludCBjb3VudCA9IHByb3BlcnRpZXMubGVuZ3RoOwogICAgICAgICBBcnJheUxpc3Q8U3RyaW5nPiBjb2x1bW5zID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KGNvdW50KTsKQEAgLTIwMSw3ICsxOTksNyBAQAogICAgICAgICBDdXJzb3IgYyA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAvLyBmb3Igbm93IHdlIGFyZSBvbmx5IHJlYWRpbmcgcHJvcGVydGllcyBmcm9tIHRoZSAib2JqZWN0cyIgdGFibGUKLSAgICAgICAgICAgIGMgPSBtUHJvdmlkZXIucXVlcnkobVBhY2thZ2VOYW1lLCBtVXJpLAorICAgICAgICAgICAgYyA9IG1Qcm92aWRlci5xdWVyeShtVXJpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTdHJpbmcgW10geyBGaWxlcy5GaWxlQ29sdW1ucy5fSUQsIGNvbHVtbiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIElEX1dIRVJFLCBuZXcgU3RyaW5nW10geyBJbnRlZ2VyLnRvU3RyaW5nKGlkKSB9LCBudWxsLCBudWxsKTsKICAgICAgICAgICAgIGlmIChjICE9IG51bGwgJiYgYy5tb3ZlVG9OZXh0KCkpIHsKQEAgLTIyMSw3ICsyMTksNyBAQAogICAgIHByaXZhdGUgU3RyaW5nIHF1ZXJ5QXVkaW8oaW50IGlkLCBTdHJpbmcgY29sdW1uKSB7CiAgICAgICAgIEN1cnNvciBjID0gbnVsbDsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGMgPSBtUHJvdmlkZXIucXVlcnkobVBhY2thZ2VOYW1lLCBBdWRpby5NZWRpYS5nZXRDb250ZW50VXJpKG1Wb2x1bWVOYW1lKSwKKyAgICAgICAgICAgIGMgPSBtUHJvdmlkZXIucXVlcnkoQXVkaW8uTWVkaWEuZ2V0Q29udGVudFVyaShtVm9sdW1lTmFtZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFN0cmluZyBbXSB7IEZpbGVzLkZpbGVDb2x1bW5zLl9JRCwgY29sdW1uIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSURfV0hFUkUsIG5ldyBTdHJpbmdbXSB7IEludGVnZXIudG9TdHJpbmcoaWQpIH0sIG51bGwsIG51bGwpOwogICAgICAgICAgICAgaWYgKGMgIT0gbnVsbCAmJiBjLm1vdmVUb05leHQoKSkgewpAQCAtMjQyLDcgKzI0MCw3IEBACiAgICAgICAgIEN1cnNvciBjID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFVyaSB1cmkgPSBBdWRpby5HZW5yZXMuZ2V0Q29udGVudFVyaUZvckF1ZGlvSWQobVZvbHVtZU5hbWUsIGlkKTsKLSAgICAgICAgICAgIGMgPSBtUHJvdmlkZXIucXVlcnkobVBhY2thZ2VOYW1lLCB1cmksCisgICAgICAgICAgICBjID0gbVByb3ZpZGVyLnF1ZXJ5KHVyaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgU3RyaW5nIFtdIHsgRmlsZXMuRmlsZUNvbHVtbnMuX0lELCBBdWRpby5HZW5yZXNDb2x1bW5zLk5BTUUgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLCBudWxsLCBudWxsLCBudWxsKTsKICAgICAgICAgICAgIGlmIChjICE9IG51bGwgJiYgYy5tb3ZlVG9OZXh0KCkpIHsKQEAgLTI2NCw3ICsyNjIsNyBAQAogICAgICAgICBDdXJzb3IgYyA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAvLyBmb3Igbm93IHdlIGFyZSBvbmx5IHJlYWRpbmcgcHJvcGVydGllcyBmcm9tIHRoZSAib2JqZWN0cyIgdGFibGUKLSAgICAgICAgICAgIGMgPSBtUHJvdmlkZXIucXVlcnkobVBhY2thZ2VOYW1lLCBtVXJpLAorICAgICAgICAgICAgYyA9IG1Qcm92aWRlci5xdWVyeShtVXJpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTdHJpbmcgW10geyBGaWxlcy5GaWxlQ29sdW1ucy5fSUQsIGNvbHVtbiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIElEX1dIRVJFLCBuZXcgU3RyaW5nW10geyBJbnRlZ2VyLnRvU3RyaW5nKGlkKSB9LCBudWxsLCBudWxsKTsKICAgICAgICAgICAgIGlmIChjICE9IG51bGwgJiYgYy5tb3ZlVG9OZXh0KCkpIHsKQEAgLTMzNSw3ICszMzMsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgLy8gZG9uJ3QgcXVlcnkgaWYgbm90IG5lY2Vzc2FyeQogICAgICAgICAgICAgaWYgKGRlcHRoID4gMCB8fCBoYW5kbGUgPT0gMHhGRkZGRkZGRiB8fCBtQ29sdW1ucy5sZW5ndGggPiAxKSB7Ci0gICAgICAgICAgICAgICAgYyA9IG1Qcm92aWRlci5xdWVyeShtUGFja2FnZU5hbWUsIG1VcmksIG1Db2x1bW5zLCB3aGVyZSwgd2hlcmVBcmdzLCBudWxsLCBudWxsKTsKKyAgICAgICAgICAgICAgICBjID0gbVByb3ZpZGVyLnF1ZXJ5KG1VcmksIG1Db2x1bW5zLCB3aGVyZSwgd2hlcmVBcmdzLCBudWxsLCBudWxsKTsKICAgICAgICAgICAgICAgICBpZiAoYyA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTXRwUHJvcGVydHlMaXN0KDAsIE10cENvbnN0YW50cy5SRVNQT05TRV9JTlZBTElEX09CSkVDVF9IQU5ETEUpOwogICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL21lZGlhL2phdmEvYW5kcm9pZC9zZXJ2aWNlL21lZGlhL01lZGlhQnJvd3NlclNlcnZpY2UuamF2YSBiL21lZGlhL2phdmEvYW5kcm9pZC9zZXJ2aWNlL21lZGlhL01lZGlhQnJvd3NlclNlcnZpY2UuamF2YQppbmRleCBmMmM2YTZjLi44ZWRjY2FjIDEwMDY0NAotLS0gYS9tZWRpYS9qYXZhL2FuZHJvaWQvc2VydmljZS9tZWRpYS9NZWRpYUJyb3dzZXJTZXJ2aWNlLmphdmEKKysrIGIvbWVkaWEvamF2YS9hbmRyb2lkL3NlcnZpY2UvbWVkaWEvTWVkaWFCcm93c2VyU2VydmljZS5qYXZhCkBAIC01NDYsNyArNTQ2LDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIC8qKgotICAgICAgICAgKiBHZXRzIGFueSBleHRyYXMgYWJvdXQgdGhlIGJyd29zZXIgc2VydmljZS4KKyAgICAgICAgICogR2V0cyBhbnkgZXh0cmFzIGFib3V0IHRoZSBicm93c2VyIHNlcnZpY2UuCiAgICAgICAgICAqLwogICAgICAgICBwdWJsaWMgQnVuZGxlIGdldEV4dHJhcygpIHsKICAgICAgICAgICAgIHJldHVybiBtRXh0cmFzOwpkaWZmIC0tZ2l0IGEvbWVkaWEvdGVzdHMvTWVkaWFGcmFtZXdvcmtUZXN0L3NyYy9jb20vYW5kcm9pZC9tZWRpYWZyYW1ld29ya3Rlc3QvdW5pdC9NZWRpYUluc2VydGVyVGVzdC5qYXZhIGIvbWVkaWEvdGVzdHMvTWVkaWFGcmFtZXdvcmtUZXN0L3NyYy9jb20vYW5kcm9pZC9tZWRpYWZyYW1ld29ya3Rlc3QvdW5pdC9NZWRpYUluc2VydGVyVGVzdC5qYXZhCmluZGV4IDA1ZGYwMTQuLjA2ZWZhOTAgMTAwNjQ0Ci0tLSBhL21lZGlhL3Rlc3RzL01lZGlhRnJhbWV3b3JrVGVzdC9zcmMvY29tL2FuZHJvaWQvbWVkaWFmcmFtZXdvcmt0ZXN0L3VuaXQvTWVkaWFJbnNlcnRlclRlc3QuamF2YQorKysgYi9tZWRpYS90ZXN0cy9NZWRpYUZyYW1ld29ya1Rlc3Qvc3JjL2NvbS9hbmRyb2lkL21lZGlhZnJhbWV3b3JrdGVzdC91bml0L01lZGlhSW5zZXJ0ZXJUZXN0LmphdmEKQEAgLTE2LDYgKzE2LDcgQEAKIAogcGFja2FnZSBjb20uYW5kcm9pZC5tZWRpYWZyYW1ld29ya3Rlc3QudW5pdDsKIAoraW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZW50UHJvdmlkZXJDbGllbnQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRWYWx1ZXM7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LklDb250ZW50UHJvdmlkZXI7CiBpbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYUluc2VydGVyOwpAQCAtODEsOCArODIsOSBAQAogICAgIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLnNldFVwKCk7CiAgICAgICAgIG1Nb2NrUHJvdmlkZXIgPSBFYXN5TW9jay5jcmVhdGVNb2NrKElDb250ZW50UHJvdmlkZXIuY2xhc3MpOwotICAgICAgICBtTWVkaWFJbnNlcnRlciA9IG5ldyBNZWRpYUluc2VydGVyKG1Nb2NrUHJvdmlkZXIsCi0gICAgICAgIG1QYWNrYWdlTmFtZSwgVEVTVF9CVUZGRVJfU0laRSk7CisgICAgICAgIGZpbmFsIENvbnRlbnRQcm92aWRlckNsaWVudCBjbGllbnQgPSBuZXcgQ29udGVudFByb3ZpZGVyQ2xpZW50KAorICAgICAgICAgICAgICAgIGdldEluc3RydW1lbnRhdGlvbigpLmdldENvbnRleHQoKS5nZXRDb250ZW50UmVzb2x2ZXIoKSwgbU1vY2tQcm92aWRlciwgdHJ1ZSk7CisgICAgICAgIG1NZWRpYUluc2VydGVyID0gbmV3IE1lZGlhSW5zZXJ0ZXIoY2xpZW50LCBURVNUX0JVRkZFUl9TSVpFKTsKICAgICAgICAgbVBhY2thZ2VOYW1lID0gZ2V0SW5zdHJ1bWVudGF0aW9uKCkuZ2V0Q29udGV4dCgpLmdldFBhY2thZ2VOYW1lKCk7CiAgICAgICAgIG1GaWxlc0NvdW50ZXIgPSAwOwogICAgICAgICBtQXVkaW9Db3VudGVyID0gMDsKZGlmZiAtLWdpdCBhL29wZW5nbC9qYXZhL2FuZHJvaWQvb3BlbmdsL0dMRVMzMS5qYXZhIGIvb3BlbmdsL2phdmEvYW5kcm9pZC9vcGVuZ2wvR0xFUzMxLmphdmEKaW5kZXggODA1OTMwZS4uNjc5MTA4ZiAxMDA2NDQKLS0tIGEvb3BlbmdsL2phdmEvYW5kcm9pZC9vcGVuZ2wvR0xFUzMxLmphdmEKKysrIGIvb3BlbmdsL2phdmEvYW5kcm9pZC9vcGVuZ2wvR0xFUzMxLmphdmEKQEAgLTIwNCw3ICsyMDQsOCBAQAogICAgICAgICBfbmF0aXZlQ2xhc3NJbml0KCk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSBHTEVTMzEoKSB7fQorICAgIC8qKiBAaGlkZSAqLworICAgIEdMRVMzMSgpIHt9CiAgICAgLy8gQyBmdW5jdGlvbiB2b2lkIGdsRGlzcGF0Y2hDb21wdXRlICggR0x1aW50IG51bV9ncm91cHNfeCwgR0x1aW50IG51bV9ncm91cHNfeSwgR0x1aW50IG51bV9ncm91cHNfeiApCiAKICAgICBwdWJsaWMgc3RhdGljIG5hdGl2ZSB2b2lkIGdsRGlzcGF0Y2hDb21wdXRlKApkaWZmIC0tZ2l0IGEvb3BlbmdsL2phdmEvYW5kcm9pZC9vcGVuZ2wvR0xFUzMyLmphdmEgYi9vcGVuZ2wvamF2YS9hbmRyb2lkL29wZW5nbC9HTEVTMzIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTM5MmI4Ci0tLSAvZGV2L251bGwKKysrIGIvb3BlbmdsL2phdmEvYW5kcm9pZC9vcGVuZ2wvR0xFUzMyLmphdmEKQEAgLTAsMCArMSw3ODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8vIFRoaXMgc291cmNlIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQKKworcGFja2FnZSBhbmRyb2lkLm9wZW5nbDsKKworLyoqIE9wZW5HTCBFUyAzLjIKKyAqLworcHVibGljIGNsYXNzIEdMRVMzMiBleHRlbmRzIEdMRVMzMSB7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT05URVhUX0ZMQUdfREVCVUdfQklUICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMDAwMDI7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT05URVhUX0ZMQUdfUk9CVVNUX0FDQ0VTU19CSVQgICAgICAgICAgICAgICAgICA9IDB4MDAwMDAwMDQ7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9HRU9NRVRSWV9TSEFERVJfQklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMDAwMDQ7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVEVTU19DT05UUk9MX1NIQURFUl9CSVQgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDAwMDA4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFU1NfRVZBTFVBVElPTl9TSEFERVJfQklUICAgICAgICAgICAgICAgICAgICAgID0gMHgwMDAwMDAxMDsKKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1FVQURTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwMDA3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0xJTkVTX0FESkFDRU5DWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwMDBBOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0xJTkVfU1RSSVBfQURKQUNFTkNZICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwMDBCOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RSSUFOR0xFU19BREpBQ0VOQ1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwMDBDOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RSSUFOR0xFX1NUUklQX0FESkFDRU5DWSAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwMDBEOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1BBVENIRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwMDBFOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1NUQUNLX09WRVJGTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwNTAzOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1NUQUNLX1VOREVSRkxPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwNTA0OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTlRFWFRfTE9TVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwNTA3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfQk9SREVSX0NPTE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxMDA0OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1ZFUlRFWF9BUlJBWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MDc0OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NMQU1QX1RPX0JPUkRFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MTJEOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTlRFWFRfRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MjFFOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1BSSU1JVElWRV9SRVNUQVJUX0ZPUl9QQVRDSEVTX1NVUFBPUlRFRCAgICAgICAgID0gMHg4MjIxOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX09VVFBVVF9TWU5DSFJPTk9VUyAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MjQyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX05FWFRfTE9HR0VEX01FU1NBR0VfTEVOR1RIICAgICAgICAgICAgICAgID0gMHg4MjQzOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX0NBTExCQUNLX0ZVTkNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MjQ0OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX0NBTExCQUNLX1VTRVJfUEFSQU0gICAgICAgICAgICAgICAgICAgICAgID0gMHg4MjQ1OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1NPVVJDRV9BUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MjQ2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1NPVVJDRV9XSU5ET1dfU1lTVEVNICAgICAgICAgICAgICAgICAgICAgID0gMHg4MjQ3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1NPVVJDRV9TSEFERVJfQ09NUElMRVIgICAgICAgICAgICAgICAgICAgID0gMHg4MjQ4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1NPVVJDRV9USElSRF9QQVJUWSAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MjQ5OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1NPVVJDRV9BUFBMSUNBVElPTiAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MjRBOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1NPVVJDRV9PVEhFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MjRCOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1RZUEVfRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MjRDOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1RZUEVfREVQUkVDQVRFRF9CRUhBVklPUiAgICAgICAgICAgICAgICAgID0gMHg4MjREOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1RZUEVfVU5ERUZJTkVEX0JFSEFWSU9SICAgICAgICAgICAgICAgICAgID0gMHg4MjRFOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1RZUEVfUE9SVEFCSUxJVFkgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MjRGOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1RZUEVfUEVSRk9STUFOQ0UgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MjUwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1RZUEVfT1RIRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MjUxOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0xPU0VfQ09OVEVYVF9PTl9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MjUyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0dVSUxUWV9DT05URVhUX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MjUzOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0lOTk9DRU5UX0NPTlRFWFRfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MjU0OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1VOS05PV05fQ09OVEVYVF9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MjU1OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1JFU0VUX05PVElGSUNBVElPTl9TVFJBVEVHWSAgICAgICAgICAgICAgICAgICAgID0gMHg4MjU2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0xBWUVSX1BST1ZPS0lOR19WRVJURVggICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MjVFOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1VOREVGSU5FRF9WRVJURVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MjYwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX05PX1JFU0VUX05PVElGSUNBVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MjYxOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1RZUEVfTUFSS0VSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MjY4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1RZUEVfUFVTSF9HUk9VUCAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MjY5OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1RZUEVfUE9QX0dST1VQICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MjZBOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1NFVkVSSVRZX05PVElGSUNBVElPTiAgICAgICAgICAgICAgICAgICAgID0gMHg4MjZCOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9ERUJVR19HUk9VUF9TVEFDS19ERVBUSCAgICAgICAgICAgICAgICAgICAgID0gMHg4MjZDOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX0dST1VQX1NUQUNLX0RFUFRIICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MjZEOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0JVRkZFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MkUwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1NIQURFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MkUxOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1BST0dSQU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MkUyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1FVRVJZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MkUzOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1BST0dSQU1fUElQRUxJTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MkU0OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1NBTVBMRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MkU2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9MQUJFTF9MRU5HVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MkU4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0NPTlRST0xfSU5QVVRfQ09NUE9ORU5UUyAgICAgICAgICAgICAgID0gMHg4ODZDOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0VWQUxVQVRJT05fSU5QVVRfQ09NUE9ORU5UUyAgICAgICAgICAgID0gMHg4ODZEOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0dFT01FVFJZX1NIQURFUl9JTlZPQ0FUSU9OUyAgICAgICAgICAgICAgICAgICAgID0gMHg4ODdGOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0dFT01FVFJZX1ZFUlRJQ0VTX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4OTE2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0dFT01FVFJZX0lOUFVUX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4OTE3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0dFT01FVFJZX09VVFBVVF9UWVBFICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4OTE4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9HRU9NRVRSWV9VTklGT1JNX0JMT0NLUyAgICAgICAgICAgICAgICAgICAgID0gMHg4QTJDOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9DT01CSU5FRF9HRU9NRVRSWV9VTklGT1JNX0NPTVBPTkVOVFMgICAgICAgID0gMHg4QTMyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9HRU9NRVRSWV9URVhUVVJFX0lNQUdFX1VOSVRTICAgICAgICAgICAgICAgID0gMHg4QzI5OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfQlVGRkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QzJBOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfQlVGRkVSX0JJTkRJTkcgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QzJBOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVhUVVJFX0JVRkZFUl9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QzJCOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfQklORElOR19CVUZGRVIgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QzJDOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfQlVGRkVSX0RBVEFfU1RPUkVfQklORElORyAgICAgICAgICAgICAgID0gMHg4QzJEOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1NBTVBMRV9TSEFESU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QzM2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01JTl9TQU1QTEVfU0hBRElOR19WQUxVRSAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QzM3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1BSSU1JVElWRVNfR0VORVJBVEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4Qzg3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfTEFZRVJFRCAgICAgICAgICAgICAgICAgID0gMHg4REE3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTEFZRVJfVEFSR0VUUyAgICAgICAgICAgID0gMHg4REE4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1NBTVBMRVJfQlVGRkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4REMyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0lOVF9TQU1QTEVSX0JVRkZFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4REQwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSX0JVRkZFUiAgICAgICAgICAgICAgICAgICAgID0gMHg4REQ4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0dFT01FVFJZX1NIQURFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4REQ5OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9HRU9NRVRSWV9VTklGT1JNX0NPTVBPTkVOVFMgICAgICAgICAgICAgICAgID0gMHg4RERGOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9HRU9NRVRSWV9PVVRQVVRfVkVSVElDRVMgICAgICAgICAgICAgICAgICAgID0gMHg4REUwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9HRU9NRVRSWV9UT1RBTF9PVVRQVVRfQ09NUE9ORU5UUyAgICAgICAgICAgID0gMHg4REUxOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9DT01CSU5FRF9URVNTX0NPTlRST0xfVU5JRk9STV9DT01QT05FTlRTICAgID0gMHg4RTFFOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9DT01CSU5FRF9URVNTX0VWQUxVQVRJT05fVU5JRk9STV9DT01QT05FTlRTID0gMHg4RTFGOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0ZJUlNUX1ZFUlRFWF9DT05WRU5USU9OICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4RTREOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0xBU1RfVkVSVEVYX0NPTlZFTlRJT04gICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4RTRFOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9HRU9NRVRSWV9TSEFERVJfSU5WT0NBVElPTlMgICAgICAgICAgICAgICAgID0gMHg4RTVBOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01JTl9GUkFHTUVOVF9JTlRFUlBPTEFUSU9OX09GRlNFVCAgICAgICAgICAgICAgID0gMHg4RTVCOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9GUkFHTUVOVF9JTlRFUlBPTEFUSU9OX09GRlNFVCAgICAgICAgICAgICAgID0gMHg4RTVDOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0ZSQUdNRU5UX0lOVEVSUE9MQVRJT05fT0ZGU0VUX0JJVFMgICAgICAgICAgICAgID0gMHg4RTVEOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1BBVENIX1ZFUlRJQ0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4RTcyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFU1NfQ09OVFJPTF9PVVRQVVRfVkVSVElDRVMgICAgICAgICAgICAgICAgICAgID0gMHg4RTc1OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFU1NfR0VOX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4RTc2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFU1NfR0VOX1NQQUNJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4RTc3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFU1NfR0VOX1ZFUlRFWF9PUkRFUiAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4RTc4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFU1NfR0VOX1BPSU5UX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4RTc5OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0lTT0xJTkVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4RTdBOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0ZSQUNUSU9OQUxfT0REICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4RTdCOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0ZSQUNUSU9OQUxfRVZFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4RTdDOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9QQVRDSF9WRVJUSUNFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4RTdEOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0dFTl9MRVZFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4RTdFOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0NPTlRST0xfVU5JRk9STV9DT01QT05FTlRTICAgICAgICAgICAgID0gMHg4RTdGOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0VWQUxVQVRJT05fVU5JRk9STV9DT01QT05FTlRTICAgICAgICAgID0gMHg4RTgwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0NPTlRST0xfVEVYVFVSRV9JTUFHRV9VTklUUyAgICAgICAgICAgID0gMHg4RTgxOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0VWQUxVQVRJT05fVEVYVFVSRV9JTUFHRV9VTklUUyAgICAgICAgID0gMHg4RTgyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0NPTlRST0xfT1VUUFVUX0NPTVBPTkVOVFMgICAgICAgICAgICAgID0gMHg4RTgzOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX1BBVENIX0NPTVBPTkVOVFMgICAgICAgICAgICAgICAgICAgICAgID0gMHg4RTg0OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0NPTlRST0xfVE9UQUxfT1VUUFVUX0NPTVBPTkVOVFMgICAgICAgID0gMHg4RTg1OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0VWQUxVQVRJT05fT1VUUFVUX0NPTVBPTkVOVFMgICAgICAgICAgID0gMHg4RTg2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFU1NfRVZBTFVBVElPTl9TSEFERVIgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4RTg3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFU1NfQ09OVFJPTF9TSEFERVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4RTg4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0NPTlRST0xfVU5JRk9STV9CTE9DS1MgICAgICAgICAgICAgICAgID0gMHg4RTg5OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0VWQUxVQVRJT05fVU5JRk9STV9CTE9DS1MgICAgICAgICAgICAgID0gMHg4RThBOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfQ1VCRV9NQVBfQVJSQVkgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MDA5OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfQklORElOR19DVUJFX01BUF9BUlJBWSAgICAgICAgICAgICAgICAgID0gMHg5MDBBOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1NBTVBMRVJfQ1VCRV9NQVBfQVJSQVkgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MDBDOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1NBTVBMRVJfQ1VCRV9NQVBfQVJSQVlfU0hBRE9XICAgICAgICAgICAgICAgICAgID0gMHg5MDBEOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0lOVF9TQU1QTEVSX0NVQkVfTUFQX0FSUkFZICAgICAgICAgICAgICAgICAgICAgID0gMHg5MDBFOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSX0NVQkVfTUFQX0FSUkFZICAgICAgICAgICAgID0gMHg5MDBGOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0lNQUdFX0JVRkZFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MDUxOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0lNQUdFX0NVQkVfTUFQX0FSUkFZICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MDU0OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0lOVF9JTUFHRV9CVUZGRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MDVDOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0lOVF9JTUFHRV9DVUJFX01BUF9BUlJBWSAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MDVGOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1VOU0lHTkVEX0lOVF9JTUFHRV9CVUZGRVIgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MDY3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1VOU0lHTkVEX0lOVF9JTUFHRV9DVUJFX01BUF9BUlJBWSAgICAgICAgICAgICAgID0gMHg5MDZBOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0NPTlRST0xfSU1BR0VfVU5JRk9STVMgICAgICAgICAgICAgICAgID0gMHg5MENCOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0VWQUxVQVRJT05fSU1BR0VfVU5JRk9STVMgICAgICAgICAgICAgID0gMHg5MENDOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9HRU9NRVRSWV9JTUFHRV9VTklGT1JNUyAgICAgICAgICAgICAgICAgICAgID0gMHg5MENEOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9HRU9NRVRSWV9TSEFERVJfU1RPUkFHRV9CTE9DS1MgICAgICAgICAgICAgID0gMHg5MEQ3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0NPTlRST0xfU0hBREVSX1NUT1JBR0VfQkxPQ0tTICAgICAgICAgID0gMHg5MEQ4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0VWQUxVQVRJT05fU0hBREVSX1NUT1JBR0VfQkxPQ0tTICAgICAgID0gMHg5MEQ5OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfMkRfTVVMVElTQU1QTEVfQVJSQVkgICAgICAgICAgICAgICAgICAgID0gMHg5MTAyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfQklORElOR18yRF9NVUxUSVNBTVBMRV9BUlJBWSAgICAgICAgICAgID0gMHg5MTA1OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1NBTVBMRVJfMkRfTVVMVElTQU1QTEVfQVJSQVkgICAgICAgICAgICAgICAgICAgID0gMHg5MTBCOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0lOVF9TQU1QTEVSXzJEX01VTFRJU0FNUExFX0FSUkFZICAgICAgICAgICAgICAgID0gMHg5MTBDOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEX01VTFRJU0FNUExFX0FSUkFZICAgICAgID0gMHg5MTBEOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9HRU9NRVRSWV9JTlBVVF9DT01QT05FTlRTICAgICAgICAgICAgICAgICAgID0gMHg5MTIzOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9HRU9NRVRSWV9PVVRQVVRfQ09NUE9ORU5UUyAgICAgICAgICAgICAgICAgID0gMHg5MTI0OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9ERUJVR19NRVNTQUdFX0xFTkdUSCAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MTQzOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9ERUJVR19MT0dHRURfTUVTU0FHRVMgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MTQ0OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX0xPR0dFRF9NRVNTQUdFUyAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MTQ1OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1NFVkVSSVRZX0hJR0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MTQ2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1NFVkVSSVRZX01FRElVTSAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MTQ3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1NFVkVSSVRZX0xPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MTQ4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfQlVGRkVSX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MTlEOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfQlVGRkVSX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MTlFOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfQlVGRkVSX09GRlNFVF9BTElHTk1FTlQgICAgICAgICAgICAgICAgID0gMHg5MTlGOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01VTFRJUExZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5Mjk0OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1NDUkVFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5Mjk1OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX09WRVJMQVkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5Mjk2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RBUktFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5Mjk3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0xJR0hURU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5Mjk4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTE9SRE9ER0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5Mjk5OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTE9SQlVSTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MjlBOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0hBUkRMSUdIVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MjlCOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1NPRlRMSUdIVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MjlDOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RJRkZFUkVOQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MjlFOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0VYQ0xVU0lPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MkEwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0hTTF9IVUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MkFEOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0hTTF9TQVRVUkFUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MkFFOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0hTTF9DT0xPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MkFGOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0hTTF9MVU1JTk9TSVRZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MkIwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1BSSU1JVElWRV9CT1VORElOR19CT1ggICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MkJFOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0NPTlRST0xfQVRPTUlDX0NPVU5URVJfQlVGRkVSUyAgICAgICAgID0gMHg5MkNEOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0VWQUxVQVRJT05fQVRPTUlDX0NPVU5URVJfQlVGRkVSUyAgICAgID0gMHg5MkNFOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9HRU9NRVRSWV9BVE9NSUNfQ09VTlRFUl9CVUZGRVJTICAgICAgICAgICAgID0gMHg5MkNGOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0NPTlRST0xfQVRPTUlDX0NPVU5URVJTICAgICAgICAgICAgICAgID0gMHg5MkQzOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0VWQUxVQVRJT05fQVRPTUlDX0NPVU5URVJTICAgICAgICAgICAgID0gMHg5MkQ0OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9HRU9NRVRSWV9BVE9NSUNfQ09VTlRFUlMgICAgICAgICAgICAgICAgICAgID0gMHg5MkQ1OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX09VVFBVVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MkUwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0lTX1BFUl9QQVRDSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MkU3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1JFRkVSRU5DRURfQllfVEVTU19DT05UUk9MX1NIQURFUiAgICAgICAgICAgICAgID0gMHg5MzA3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1JFRkVSRU5DRURfQllfVEVTU19FVkFMVUFUSU9OX1NIQURFUiAgICAgICAgICAgID0gMHg5MzA4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1JFRkVSRU5DRURfQllfR0VPTUVUUllfU0hBREVSICAgICAgICAgICAgICAgICAgID0gMHg5MzA5OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0ZSQU1FQlVGRkVSX0RFRkFVTFRfTEFZRVJTICAgICAgICAgICAgICAgICAgICAgID0gMHg5MzEyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9GUkFNRUJVRkZFUl9MQVlFUlMgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MzE3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01VTFRJU0FNUExFX0xJTkVfV0lEVEhfUkFOR0UgICAgICAgICAgICAgICAgICAgID0gMHg5MzgxOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01VTFRJU0FNUExFX0xJTkVfV0lEVEhfR1JBTlVMQVJJVFkgICAgICAgICAgICAgID0gMHg5MzgyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzR4NCAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5M0IwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzV4NCAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5M0IxOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzV4NSAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5M0IyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzZ4NSAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5M0IzOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzZ4NiAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5M0I0OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzh4NSAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5M0I1OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzh4NiAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5M0I2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzh4OCAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5M0I3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzEweDUgICAgICAgICAgICAgICAgICAgICAgID0gMHg5M0I4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzEweDYgICAgICAgICAgICAgICAgICAgICAgID0gMHg5M0I5OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzEweDggICAgICAgICAgICAgICAgICAgICAgID0gMHg5M0JBOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzEweDEwICAgICAgICAgICAgICAgICAgICAgID0gMHg5M0JCOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEwICAgICAgICAgICAgICAgICAgICAgID0gMHg5M0JDOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEyICAgICAgICAgICAgICAgICAgICAgID0gMHg5M0JEOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNHg0ICAgICAgICAgICAgICAgID0gMHg5M0QwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNXg0ICAgICAgICAgICAgICAgID0gMHg5M0QxOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNXg1ICAgICAgICAgICAgICAgID0gMHg5M0QyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNng1ICAgICAgICAgICAgICAgID0gMHg5M0QzOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNng2ICAgICAgICAgICAgICAgID0gMHg5M0Q0OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg1ICAgICAgICAgICAgICAgID0gMHg5M0Q1OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg2ICAgICAgICAgICAgICAgID0gMHg5M0Q2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg4ICAgICAgICAgICAgICAgID0gMHg5M0Q3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4NSAgICAgICAgICAgICAgID0gMHg5M0Q4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4NiAgICAgICAgICAgICAgID0gMHg5M0Q5OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4OCAgICAgICAgICAgICAgID0gMHg5M0RBOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4MTAgICAgICAgICAgICAgID0gMHg5M0RCOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTAgICAgICAgICAgICAgID0gMHg5M0RDOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTIgICAgICAgICAgICAgID0gMHg5M0REOworCisKKyAgICBuYXRpdmUgcHJpdmF0ZSBzdGF0aWMgdm9pZCBfbmF0aXZlQ2xhc3NJbml0KCk7CisgICAgc3RhdGljIHsKKyAgICAgICAgX25hdGl2ZUNsYXNzSW5pdCgpOworICAgIH0KKworICAgIHByaXZhdGUgR0xFUzMyKCkge30KKyAgICAvLyBDIGZ1bmN0aW9uIHZvaWQgZ2xCbGVuZEJhcnJpZXIgKCB2b2lkICkKKworICAgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIHZvaWQgZ2xCbGVuZEJhcnJpZXIoCisgICAgKTsKKworICAgIC8vIEMgZnVuY3Rpb24gdm9pZCBnbENvcHlJbWFnZVN1YkRhdGEgKCBHTHVpbnQgc3JjTmFtZSwgR0xlbnVtIHNyY1RhcmdldCwgR0xpbnQgc3JjTGV2ZWwsIEdMaW50IHNyY1gsIEdMaW50IHNyY1ksIEdMaW50IHNyY1osIEdMdWludCBkc3ROYW1lLCBHTGVudW0gZHN0VGFyZ2V0LCBHTGludCBkc3RMZXZlbCwgR0xpbnQgZHN0WCwgR0xpbnQgZHN0WSwgR0xpbnQgZHN0WiwgR0xzaXplaSBzcmNXaWR0aCwgR0xzaXplaSBzcmNIZWlnaHQsIEdMc2l6ZWkgc3JjRGVwdGggKQorCisgICAgcHVibGljIHN0YXRpYyBuYXRpdmUgdm9pZCBnbENvcHlJbWFnZVN1YkRhdGEoCisgICAgICAgIGludCBzcmNOYW1lLAorICAgICAgICBpbnQgc3JjVGFyZ2V0LAorICAgICAgICBpbnQgc3JjTGV2ZWwsCisgICAgICAgIGludCBzcmNYLAorICAgICAgICBpbnQgc3JjWSwKKyAgICAgICAgaW50IHNyY1osCisgICAgICAgIGludCBkc3ROYW1lLAorICAgICAgICBpbnQgZHN0VGFyZ2V0LAorICAgICAgICBpbnQgZHN0TGV2ZWwsCisgICAgICAgIGludCBkc3RYLAorICAgICAgICBpbnQgZHN0WSwKKyAgICAgICAgaW50IGRzdFosCisgICAgICAgIGludCBzcmNXaWR0aCwKKyAgICAgICAgaW50IHNyY0hlaWdodCwKKyAgICAgICAgaW50IHNyY0RlcHRoCisgICAgKTsKKworICAgIC8vIEMgZnVuY3Rpb24gdm9pZCBnbERlYnVnTWVzc2FnZUNvbnRyb2wgKCBHTGVudW0gc291cmNlLCBHTGVudW0gdHlwZSwgR0xlbnVtIHNldmVyaXR5LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQgKmlkcywgR0xib29sZWFuIGVuYWJsZWQgKQorCisgICAgcHVibGljIHN0YXRpYyBuYXRpdmUgdm9pZCBnbERlYnVnTWVzc2FnZUNvbnRyb2woCisgICAgICAgIGludCBzb3VyY2UsCisgICAgICAgIGludCB0eXBlLAorICAgICAgICBpbnQgc2V2ZXJpdHksCisgICAgICAgIGludCBjb3VudCwKKyAgICAgICAgaW50W10gaWRzLAorICAgICAgICBpbnQgb2Zmc2V0LAorICAgICAgICBib29sZWFuIGVuYWJsZWQKKyAgICApOworCisgICAgLy8gQyBmdW5jdGlvbiB2b2lkIGdsRGVidWdNZXNzYWdlQ29udHJvbCAoIEdMZW51bSBzb3VyY2UsIEdMZW51bSB0eXBlLCBHTGVudW0gc2V2ZXJpdHksIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMdWludCAqaWRzLCBHTGJvb2xlYW4gZW5hYmxlZCApCisKKyAgICBwdWJsaWMgc3RhdGljIG5hdGl2ZSB2b2lkIGdsRGVidWdNZXNzYWdlQ29udHJvbCgKKyAgICAgICAgaW50IHNvdXJjZSwKKyAgICAgICAgaW50IHR5cGUsCisgICAgICAgIGludCBzZXZlcml0eSwKKyAgICAgICAgaW50IGNvdW50LAorICAgICAgICBqYXZhLm5pby5JbnRCdWZmZXIgaWRzLAorICAgICAgICBib29sZWFuIGVuYWJsZWQKKyAgICApOworCisgICAgLy8gQyBmdW5jdGlvbiB2b2lkIGdsRGVidWdNZXNzYWdlSW5zZXJ0ICggR0xlbnVtIHNvdXJjZSwgR0xlbnVtIHR5cGUsIEdMdWludCBpZCwgR0xlbnVtIHNldmVyaXR5LCBHTHNpemVpIGxlbmd0aCwgY29uc3QgR0xjaGFyICpidWYgKQorCisgICAgcHVibGljIHN0YXRpYyBuYXRpdmUgdm9pZCBnbERlYnVnTWVzc2FnZUluc2VydCgKKyAgICAgICAgaW50IHNvdXJjZSwKKyAgICAgICAgaW50IHR5cGUsCisgICAgICAgIGludCBpZCwKKyAgICAgICAgaW50IHNldmVyaXR5LAorICAgICAgICBpbnQgbGVuZ3RoLAorICAgICAgICBTdHJpbmcgYnVmCisgICAgKTsKKworICAgIC8vIEMgZnVuY3Rpb24gdm9pZCBnbERlYnVnTWVzc2FnZUNhbGxiYWNrICggR0xERUJVR1BST0MgY2FsbGJhY2ssIGNvbnN0IHZvaWQgKnVzZXJQYXJhbSApCisKKyAgICBwdWJsaWMgaW50ZXJmYWNlIERlYnVnUHJvYyB7CisgICAgICAgIHZvaWQgb25NZXNzYWdlKGludCBzb3VyY2UsIGludCB0eXBlLCBpbnQgaWQsIGludCBzZXZlcml0eSwgU3RyaW5nIG1lc3NhZ2UpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIHZvaWQgZ2xEZWJ1Z01lc3NhZ2VDYWxsYmFjayhEZWJ1Z1Byb2MgY2FsbGJhY2spOworCisgICAgLy8gQyBmdW5jdGlvbiBHTHVpbnQgZ2xHZXREZWJ1Z01lc3NhZ2VMb2cgKCBHTHVpbnQgY291bnQsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xlbnVtICpzb3VyY2VzLCBHTGVudW0gKnR5cGVzLCBHTHVpbnQgKmlkcywgR0xlbnVtICpzZXZlcml0aWVzLCBHTHNpemVpICpsZW5ndGhzLCBHTGNoYXIgKm1lc3NhZ2VMb2cgKQorCisgICAgcHVibGljIHN0YXRpYyBuYXRpdmUgaW50IGdsR2V0RGVidWdNZXNzYWdlTG9nKAorICAgICAgICBpbnQgY291bnQsCisgICAgICAgIGludCBidWZTaXplLAorICAgICAgICBpbnRbXSBzb3VyY2VzLAorICAgICAgICBpbnQgc291cmNlc09mZnNldCwKKyAgICAgICAgaW50W10gdHlwZXMsCisgICAgICAgIGludCB0eXBlc09mZnNldCwKKyAgICAgICAgaW50W10gaWRzLAorICAgICAgICBpbnQgaWRzT2Zmc2V0LAorICAgICAgICBpbnRbXSBzZXZlcml0aWVzLAorICAgICAgICBpbnQgc2V2ZXJpdGllc09mZnNldCwKKyAgICAgICAgaW50W10gbGVuZ3RocywKKyAgICAgICAgaW50IGxlbmd0aHNPZmZzZXQsCisgICAgICAgIGJ5dGVbXSBtZXNzYWdlTG9nLAorICAgICAgICBpbnQgbWVzc2FnZUxvZ09mZnNldCk7CisKKyAgICAvLyBDIGZ1bmN0aW9uIEdMdWludCBnbEdldERlYnVnTWVzc2FnZUxvZyAoIEdMdWludCBjb3VudCwgR0xzaXplaSBidWZTaXplLCBHTGVudW0gKnNvdXJjZXMsIEdMZW51bSAqdHlwZXMsIEdMdWludCAqaWRzLCBHTGVudW0gKnNldmVyaXRpZXMsIEdMc2l6ZWkgKmxlbmd0aHMsIEdMY2hhciAqbWVzc2FnZUxvZyApCisKKyAgICBwdWJsaWMgc3RhdGljIG5hdGl2ZSBpbnQgZ2xHZXREZWJ1Z01lc3NhZ2VMb2coCisgICAgICAgIGludCBjb3VudCwKKyAgICAgICAgamF2YS5uaW8uSW50QnVmZmVyIHNvdXJjZXMsCisgICAgICAgIGphdmEubmlvLkludEJ1ZmZlciB0eXBlcywKKyAgICAgICAgamF2YS5uaW8uSW50QnVmZmVyIGlkcywKKyAgICAgICAgamF2YS5uaW8uSW50QnVmZmVyIHNldmVyaXRpZXMsCisgICAgICAgIGphdmEubmlvLkludEJ1ZmZlciBsZW5ndGhzLAorICAgICAgICBqYXZhLm5pby5CeXRlQnVmZmVyIG1lc3NhZ2VMb2cpOworCisgICAgLy8gQyBmdW5jdGlvbiBHTHVpbnQgZ2xHZXREZWJ1Z01lc3NhZ2VMb2cgKCBHTHVpbnQgY291bnQsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xlbnVtICpzb3VyY2VzLCBHTGVudW0gKnR5cGVzLCBHTHVpbnQgKmlkcywgR0xlbnVtICpzZXZlcml0aWVzLCBHTHNpemVpICpsZW5ndGhzLCBHTGNoYXIgKm1lc3NhZ2VMb2cgKQorCisgICAgcHVibGljIHN0YXRpYyBuYXRpdmUgU3RyaW5nW10gZ2xHZXREZWJ1Z01lc3NhZ2VMb2coCisgICAgICAgIGludCBjb3VudCwKKyAgICAgICAgaW50W10gc291cmNlcywKKyAgICAgICAgaW50IHNvdXJjZXNPZmZzZXQsCisgICAgICAgIGludFtdIHR5cGVzLAorICAgICAgICBpbnQgdHlwZXNPZmZzZXQsCisgICAgICAgIGludFtdIGlkcywKKyAgICAgICAgaW50IGlkc09mZnNldCwKKyAgICAgICAgaW50W10gc2V2ZXJpdGllcywKKyAgICAgICAgaW50IHNldmVyaXRpZXNPZmZzZXQpOworCisgICAgLy8gQyBmdW5jdGlvbiBHTHVpbnQgZ2xHZXREZWJ1Z01lc3NhZ2VMb2cgKCBHTHVpbnQgY291bnQsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xlbnVtICpzb3VyY2VzLCBHTGVudW0gKnR5cGVzLCBHTHVpbnQgKmlkcywgR0xlbnVtICpzZXZlcml0aWVzLCBHTHNpemVpICpsZW5ndGhzLCBHTGNoYXIgKm1lc3NhZ2VMb2cgKQorCisgICAgcHVibGljIHN0YXRpYyBuYXRpdmUgU3RyaW5nW10gZ2xHZXREZWJ1Z01lc3NhZ2VMb2coCisgICAgICAgIGludCBjb3VudCwKKyAgICAgICAgamF2YS5uaW8uSW50QnVmZmVyIHNvdXJjZXMsCisgICAgICAgIGphdmEubmlvLkludEJ1ZmZlciB0eXBlcywKKyAgICAgICAgamF2YS5uaW8uSW50QnVmZmVyIGlkcywKKyAgICAgICAgamF2YS5uaW8uSW50QnVmZmVyIHNldmVyaXRpZXMpOworCisgICAgLy8gQyBmdW5jdGlvbiB2b2lkIGdsUHVzaERlYnVnR3JvdXAgKCBHTGVudW0gc291cmNlLCBHTHVpbnQgaWQsIEdMc2l6ZWkgbGVuZ3RoLCBjb25zdCBHTGNoYXIgKm1lc3NhZ2UgKQorCisgICAgcHVibGljIHN0YXRpYyBuYXRpdmUgdm9pZCBnbFB1c2hEZWJ1Z0dyb3VwKAorICAgICAgICBpbnQgc291cmNlLAorICAgICAgICBpbnQgaWQsCisgICAgICAgIGludCBsZW5ndGgsCisgICAgICAgIFN0cmluZyBtZXNzYWdlCisgICAgKTsKKworICAgIC8vIEMgZnVuY3Rpb24gdm9pZCBnbFBvcERlYnVnR3JvdXAgKCB2b2lkICkKKworICAgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIHZvaWQgZ2xQb3BEZWJ1Z0dyb3VwKAorICAgICk7CisKKyAgICAvLyBDIGZ1bmN0aW9uIHZvaWQgZ2xPYmplY3RMYWJlbCAoIEdMZW51bSBpZGVudGlmaWVyLCBHTHVpbnQgbmFtZSwgR0xzaXplaSBsZW5ndGgsIGNvbnN0IEdMY2hhciAqbGFiZWwgKQorCisgICAgcHVibGljIHN0YXRpYyBuYXRpdmUgdm9pZCBnbE9iamVjdExhYmVsKAorICAgICAgICBpbnQgaWRlbnRpZmllciwKKyAgICAgICAgaW50IG5hbWUsCisgICAgICAgIGludCBsZW5ndGgsCisgICAgICAgIFN0cmluZyBsYWJlbAorICAgICk7CisKKyAgICAvLyBDIGZ1bmN0aW9uIHZvaWQgZ2xHZXRPYmplY3RMYWJlbCAoIEdMZW51bSBpZGVudGlmaWVyLCBHTHVpbnQgbmFtZSwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIEdMY2hhciAqbGFiZWwgKQorCisgICAgcHVibGljIHN0YXRpYyBuYXRpdmUgU3RyaW5nIGdsR2V0T2JqZWN0TGFiZWwoaW50IGlkZW50aWZpZXIsIGludCBuYW1lKTsKKworICAgIC8vIEMgZnVuY3Rpb24gdm9pZCBnbE9iamVjdFB0ckxhYmVsICggY29uc3Qgdm9pZCAqcHRyLCBHTHNpemVpIGxlbmd0aCwgY29uc3QgR0xjaGFyICpsYWJlbCApCisKKyAgICBwdWJsaWMgc3RhdGljIG5hdGl2ZSB2b2lkIGdsT2JqZWN0UHRyTGFiZWwobG9uZyBwdHIsIFN0cmluZyBsYWJlbCk7CisKKyAgICAvLyBDIGZ1bmN0aW9uIHZvaWQgZ2xHZXRPYmplY3RQdHJMYWJlbCAoIGNvbnN0IHZvaWQgKnB0ciwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIEdMY2hhciAqbGFiZWwgKQorCisgICAgcHVibGljIHN0YXRpYyBuYXRpdmUgU3RyaW5nIGdsR2V0T2JqZWN0UHRyTGFiZWwobG9uZyBwdHIpOworCisgICAgLy8gQyBmdW5jdGlvbiB2b2lkIGdsR2V0UG9pbnRlcnYgKCBHTGVudW0gcG5hbWUsIHZvaWQgKipwYXJhbXMgKQorCisgICAgcHVibGljIHN0YXRpYyBuYXRpdmUgbG9uZyBnbEdldFBvaW50ZXJ2KAorICAgICAgICBpbnQgcG5hbWUKKyAgICApOworCisgICAgLy8gQyBmdW5jdGlvbiB2b2lkIGdsRW5hYmxlaSAoIEdMZW51bSB0YXJnZXQsIEdMdWludCBpbmRleCApCisKKyAgICBwdWJsaWMgc3RhdGljIG5hdGl2ZSB2b2lkIGdsRW5hYmxlaSgKKyAgICAgICAgaW50IHRhcmdldCwKKyAgICAgICAgaW50IGluZGV4CisgICAgKTsKKworICAgIC8vIEMgZnVuY3Rpb24gdm9pZCBnbERpc2FibGVpICggR0xlbnVtIHRhcmdldCwgR0x1aW50IGluZGV4ICkKKworICAgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIHZvaWQgZ2xEaXNhYmxlaSgKKyAgICAgICAgaW50IHRhcmdldCwKKyAgICAgICAgaW50IGluZGV4CisgICAgKTsKKworICAgIC8vIEMgZnVuY3Rpb24gdm9pZCBnbEJsZW5kRXF1YXRpb25pICggR0x1aW50IGJ1ZiwgR0xlbnVtIG1vZGUgKQorCisgICAgcHVibGljIHN0YXRpYyBuYXRpdmUgdm9pZCBnbEJsZW5kRXF1YXRpb25pKAorICAgICAgICBpbnQgYnVmLAorICAgICAgICBpbnQgbW9kZQorICAgICk7CisKKyAgICAvLyBDIGZ1bmN0aW9uIHZvaWQgZ2xCbGVuZEVxdWF0aW9uU2VwYXJhdGVpICggR0x1aW50IGJ1ZiwgR0xlbnVtIG1vZGVSR0IsIEdMZW51bSBtb2RlQWxwaGEgKQorCisgICAgcHVibGljIHN0YXRpYyBuYXRpdmUgdm9pZCBnbEJsZW5kRXF1YXRpb25TZXBhcmF0ZWkoCisgICAgICAgIGludCBidWYsCisgICAgICAgIGludCBtb2RlUkdCLAorICAgICAgICBpbnQgbW9kZUFscGhhCisgICAgKTsKKworICAgIC8vIEMgZnVuY3Rpb24gdm9pZCBnbEJsZW5kRnVuY2kgKCBHTHVpbnQgYnVmLCBHTGVudW0gc3JjLCBHTGVudW0gZHN0ICkKKworICAgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIHZvaWQgZ2xCbGVuZEZ1bmNpKAorICAgICAgICBpbnQgYnVmLAorICAgICAgICBpbnQgc3JjLAorICAgICAgICBpbnQgZHN0CisgICAgKTsKKworICAgIC8vIEMgZnVuY3Rpb24gdm9pZCBnbEJsZW5kRnVuY1NlcGFyYXRlaSAoIEdMdWludCBidWYsIEdMZW51bSBzcmNSR0IsIEdMZW51bSBkc3RSR0IsIEdMZW51bSBzcmNBbHBoYSwgR0xlbnVtIGRzdEFscGhhICkKKworICAgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIHZvaWQgZ2xCbGVuZEZ1bmNTZXBhcmF0ZWkoCisgICAgICAgIGludCBidWYsCisgICAgICAgIGludCBzcmNSR0IsCisgICAgICAgIGludCBkc3RSR0IsCisgICAgICAgIGludCBzcmNBbHBoYSwKKyAgICAgICAgaW50IGRzdEFscGhhCisgICAgKTsKKworICAgIC8vIEMgZnVuY3Rpb24gdm9pZCBnbENvbG9yTWFza2kgKCBHTHVpbnQgaW5kZXgsIEdMYm9vbGVhbiByLCBHTGJvb2xlYW4gZywgR0xib29sZWFuIGIsIEdMYm9vbGVhbiBhICkKKworICAgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIHZvaWQgZ2xDb2xvck1hc2tpKAorICAgICAgICBpbnQgaW5kZXgsCisgICAgICAgIGJvb2xlYW4gciwKKyAgICAgICAgYm9vbGVhbiBnLAorICAgICAgICBib29sZWFuIGIsCisgICAgICAgIGJvb2xlYW4gYQorICAgICk7CisKKyAgICAvLyBDIGZ1bmN0aW9uIEdMYm9vbGVhbiBnbElzRW5hYmxlZGkgKCBHTGVudW0gdGFyZ2V0LCBHTHVpbnQgaW5kZXggKQorCisgICAgcHVibGljIHN0YXRpYyBuYXRpdmUgYm9vbGVhbiBnbElzRW5hYmxlZGkoCisgICAgICAgIGludCB0YXJnZXQsCisgICAgICAgIGludCBpbmRleAorICAgICk7CisKKyAgICAvLyBDIGZ1bmN0aW9uIHZvaWQgZ2xEcmF3RWxlbWVudHNCYXNlVmVydGV4ICggR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCB2b2lkICppbmRpY2VzLCBHTGludCBiYXNldmVydGV4ICkKKworICAgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIHZvaWQgZ2xEcmF3RWxlbWVudHNCYXNlVmVydGV4KAorICAgICAgICBpbnQgbW9kZSwKKyAgICAgICAgaW50IGNvdW50LAorICAgICAgICBpbnQgdHlwZSwKKyAgICAgICAgamF2YS5uaW8uQnVmZmVyIGluZGljZXMsCisgICAgICAgIGludCBiYXNldmVydGV4CisgICAgKTsKKworICAgIC8vIEMgZnVuY3Rpb24gdm9pZCBnbERyYXdSYW5nZUVsZW1lbnRzQmFzZVZlcnRleCAoIEdMZW51bSBtb2RlLCBHTHVpbnQgc3RhcnQsIEdMdWludCBlbmQsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCB2b2lkICppbmRpY2VzLCBHTGludCBiYXNldmVydGV4ICkKKworICAgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIHZvaWQgZ2xEcmF3UmFuZ2VFbGVtZW50c0Jhc2VWZXJ0ZXgoCisgICAgICAgIGludCBtb2RlLAorICAgICAgICBpbnQgc3RhcnQsCisgICAgICAgIGludCBlbmQsCisgICAgICAgIGludCBjb3VudCwKKyAgICAgICAgaW50IHR5cGUsCisgICAgICAgIGphdmEubmlvLkJ1ZmZlciBpbmRpY2VzLAorICAgICAgICBpbnQgYmFzZXZlcnRleAorICAgICk7CisKKyAgICAvLyBDIGZ1bmN0aW9uIHZvaWQgZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWRCYXNlVmVydGV4ICggR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCB2b2lkICppbmRpY2VzLCBHTHNpemVpIGluc3RhbmNlQ291bnQsIEdMaW50IGJhc2V2ZXJ0ZXggKQorCisgICAgcHVibGljIHN0YXRpYyBuYXRpdmUgdm9pZCBnbERyYXdFbGVtZW50c0luc3RhbmNlZEJhc2VWZXJ0ZXgoCisgICAgICAgIGludCBtb2RlLAorICAgICAgICBpbnQgY291bnQsCisgICAgICAgIGludCB0eXBlLAorICAgICAgICBqYXZhLm5pby5CdWZmZXIgaW5kaWNlcywKKyAgICAgICAgaW50IGluc3RhbmNlQ291bnQsCisgICAgICAgIGludCBiYXNldmVydGV4CisgICAgKTsKKworICAgIC8vIEMgZnVuY3Rpb24gdm9pZCBnbERyYXdFbGVtZW50c0luc3RhbmNlZEJhc2VWZXJ0ZXggKCBHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQgKmluZGljZXMsIEdMc2l6ZWkgaW5zdGFuY2VDb3VudCwgR0xpbnQgYmFzZXZlcnRleCApCisKKyAgICBwdWJsaWMgc3RhdGljIG5hdGl2ZSB2b2lkIGdsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQmFzZVZlcnRleCgKKyAgICAgICAgaW50IG1vZGUsCisgICAgICAgIGludCBjb3VudCwKKyAgICAgICAgaW50IHR5cGUsCisgICAgICAgIGludCBpbmRpY2VzT2Zmc2V0LAorICAgICAgICBpbnQgaW5zdGFuY2VDb3VudCwKKyAgICAgICAgaW50IGJhc2V2ZXJ0ZXgKKyAgICApOworCisgICAgLy8gQyBmdW5jdGlvbiB2b2lkIGdsRnJhbWVidWZmZXJUZXh0dXJlICggR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMdWludCB0ZXh0dXJlLCBHTGludCBsZXZlbCApCisKKyAgICBwdWJsaWMgc3RhdGljIG5hdGl2ZSB2b2lkIGdsRnJhbWVidWZmZXJUZXh0dXJlKAorICAgICAgICBpbnQgdGFyZ2V0LAorICAgICAgICBpbnQgYXR0YWNobWVudCwKKyAgICAgICAgaW50IHRleHR1cmUsCisgICAgICAgIGludCBsZXZlbAorICAgICk7CisKKyAgICAvLyBDIGZ1bmN0aW9uIHZvaWQgZ2xQcmltaXRpdmVCb3VuZGluZ0JveCAoIEdMZmxvYXQgbWluWCwgR0xmbG9hdCBtaW5ZLCBHTGZsb2F0IG1pblosIEdMZmxvYXQgbWluVywgR0xmbG9hdCBtYXhYLCBHTGZsb2F0IG1heFksIEdMZmxvYXQgbWF4WiwgR0xmbG9hdCBtYXhXICkKKworICAgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIHZvaWQgZ2xQcmltaXRpdmVCb3VuZGluZ0JveCgKKyAgICAgICAgZmxvYXQgbWluWCwKKyAgICAgICAgZmxvYXQgbWluWSwKKyAgICAgICAgZmxvYXQgbWluWiwKKyAgICAgICAgZmxvYXQgbWluVywKKyAgICAgICAgZmxvYXQgbWF4WCwKKyAgICAgICAgZmxvYXQgbWF4WSwKKyAgICAgICAgZmxvYXQgbWF4WiwKKyAgICAgICAgZmxvYXQgbWF4VworICAgICk7CisKKyAgICAvLyBDIGZ1bmN0aW9uIEdMZW51bSBnbEdldEdyYXBoaWNzUmVzZXRTdGF0dXMgKCB2b2lkICkKKworICAgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIGludCBnbEdldEdyYXBoaWNzUmVzZXRTdGF0dXMoCisgICAgKTsKKworICAgIC8vIEMgZnVuY3Rpb24gdm9pZCBnbFJlYWRuUGl4ZWxzICggR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTHNpemVpIGJ1ZlNpemUsIHZvaWQgKmRhdGEgKQorCisgICAgcHVibGljIHN0YXRpYyBuYXRpdmUgdm9pZCBnbFJlYWRuUGl4ZWxzKAorICAgICAgICBpbnQgeCwKKyAgICAgICAgaW50IHksCisgICAgICAgIGludCB3aWR0aCwKKyAgICAgICAgaW50IGhlaWdodCwKKyAgICAgICAgaW50IGZvcm1hdCwKKyAgICAgICAgaW50IHR5cGUsCisgICAgICAgIGludCBidWZTaXplLAorICAgICAgICBqYXZhLm5pby5CdWZmZXIgZGF0YQorICAgICk7CisKKyAgICAvLyBDIGZ1bmN0aW9uIHZvaWQgZ2xHZXRuVW5pZm9ybWZ2ICggR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGJ1ZlNpemUsIEdMZmxvYXQgKnBhcmFtcyApCisKKyAgICBwdWJsaWMgc3RhdGljIG5hdGl2ZSB2b2lkIGdsR2V0blVuaWZvcm1mdigKKyAgICAgICAgaW50IHByb2dyYW0sCisgICAgICAgIGludCBsb2NhdGlvbiwKKyAgICAgICAgaW50IGJ1ZlNpemUsCisgICAgICAgIGZsb2F0W10gcGFyYW1zLAorICAgICAgICBpbnQgb2Zmc2V0CisgICAgKTsKKworICAgIC8vIEMgZnVuY3Rpb24gdm9pZCBnbEdldG5Vbmlmb3JtZnYgKCBHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgYnVmU2l6ZSwgR0xmbG9hdCAqcGFyYW1zICkKKworICAgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIHZvaWQgZ2xHZXRuVW5pZm9ybWZ2KAorICAgICAgICBpbnQgcHJvZ3JhbSwKKyAgICAgICAgaW50IGxvY2F0aW9uLAorICAgICAgICBpbnQgYnVmU2l6ZSwKKyAgICAgICAgamF2YS5uaW8uRmxvYXRCdWZmZXIgcGFyYW1zCisgICAgKTsKKworICAgIC8vIEMgZnVuY3Rpb24gdm9pZCBnbEdldG5Vbmlmb3JtaXYgKCBHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgYnVmU2l6ZSwgR0xpbnQgKnBhcmFtcyApCisKKyAgICBwdWJsaWMgc3RhdGljIG5hdGl2ZSB2b2lkIGdsR2V0blVuaWZvcm1pdigKKyAgICAgICAgaW50IHByb2dyYW0sCisgICAgICAgIGludCBsb2NhdGlvbiwKKyAgICAgICAgaW50IGJ1ZlNpemUsCisgICAgICAgIGludFtdIHBhcmFtcywKKyAgICAgICAgaW50IG9mZnNldAorICAgICk7CisKKyAgICAvLyBDIGZ1bmN0aW9uIHZvaWQgZ2xHZXRuVW5pZm9ybWl2ICggR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGJ1ZlNpemUsIEdMaW50ICpwYXJhbXMgKQorCisgICAgcHVibGljIHN0YXRpYyBuYXRpdmUgdm9pZCBnbEdldG5Vbmlmb3JtaXYoCisgICAgICAgIGludCBwcm9ncmFtLAorICAgICAgICBpbnQgbG9jYXRpb24sCisgICAgICAgIGludCBidWZTaXplLAorICAgICAgICBqYXZhLm5pby5JbnRCdWZmZXIgcGFyYW1zCisgICAgKTsKKworICAgIC8vIEMgZnVuY3Rpb24gdm9pZCBnbEdldG5Vbmlmb3JtdWl2ICggR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGJ1ZlNpemUsIEdMdWludCAqcGFyYW1zICkKKworICAgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIHZvaWQgZ2xHZXRuVW5pZm9ybXVpdigKKyAgICAgICAgaW50IHByb2dyYW0sCisgICAgICAgIGludCBsb2NhdGlvbiwKKyAgICAgICAgaW50IGJ1ZlNpemUsCisgICAgICAgIGludFtdIHBhcmFtcywKKyAgICAgICAgaW50IG9mZnNldAorICAgICk7CisKKyAgICAvLyBDIGZ1bmN0aW9uIHZvaWQgZ2xHZXRuVW5pZm9ybXVpdiAoIEdMdWludCBwcm9ncmFtLCBHTGludCBsb2NhdGlvbiwgR0xzaXplaSBidWZTaXplLCBHTHVpbnQgKnBhcmFtcyApCisKKyAgICBwdWJsaWMgc3RhdGljIG5hdGl2ZSB2b2lkIGdsR2V0blVuaWZvcm11aXYoCisgICAgICAgIGludCBwcm9ncmFtLAorICAgICAgICBpbnQgbG9jYXRpb24sCisgICAgICAgIGludCBidWZTaXplLAorICAgICAgICBqYXZhLm5pby5JbnRCdWZmZXIgcGFyYW1zCisgICAgKTsKKworICAgIC8vIEMgZnVuY3Rpb24gdm9pZCBnbE1pblNhbXBsZVNoYWRpbmcgKCBHTGZsb2F0IHZhbHVlICkKKworICAgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIHZvaWQgZ2xNaW5TYW1wbGVTaGFkaW5nKAorICAgICAgICBmbG9hdCB2YWx1ZQorICAgICk7CisKKyAgICAvLyBDIGZ1bmN0aW9uIHZvaWQgZ2xQYXRjaFBhcmFtZXRlcmkgKCBHTGVudW0gcG5hbWUsIEdMaW50IHZhbHVlICkKKworICAgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIHZvaWQgZ2xQYXRjaFBhcmFtZXRlcmkoCisgICAgICAgIGludCBwbmFtZSwKKyAgICAgICAgaW50IHZhbHVlCisgICAgKTsKKworICAgIC8vIEMgZnVuY3Rpb24gdm9pZCBnbFRleFBhcmFtZXRlcklpdiAoIEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgY29uc3QgR0xpbnQgKnBhcmFtcyApCisKKyAgICBwdWJsaWMgc3RhdGljIG5hdGl2ZSB2b2lkIGdsVGV4UGFyYW1ldGVySWl2KAorICAgICAgICBpbnQgdGFyZ2V0LAorICAgICAgICBpbnQgcG5hbWUsCisgICAgICAgIGludFtdIHBhcmFtcywKKyAgICAgICAgaW50IG9mZnNldAorICAgICk7CisKKyAgICAvLyBDIGZ1bmN0aW9uIHZvaWQgZ2xUZXhQYXJhbWV0ZXJJaXYgKCBHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIGNvbnN0IEdMaW50ICpwYXJhbXMgKQorCisgICAgcHVibGljIHN0YXRpYyBuYXRpdmUgdm9pZCBnbFRleFBhcmFtZXRlcklpdigKKyAgICAgICAgaW50IHRhcmdldCwKKyAgICAgICAgaW50IHBuYW1lLAorICAgICAgICBqYXZhLm5pby5JbnRCdWZmZXIgcGFyYW1zCisgICAgKTsKKworICAgIC8vIEMgZnVuY3Rpb24gdm9pZCBnbFRleFBhcmFtZXRlckl1aXYgKCBHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIGNvbnN0IEdMdWludCAqcGFyYW1zICkKKworICAgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIHZvaWQgZ2xUZXhQYXJhbWV0ZXJJdWl2KAorICAgICAgICBpbnQgdGFyZ2V0LAorICAgICAgICBpbnQgcG5hbWUsCisgICAgICAgIGludFtdIHBhcmFtcywKKyAgICAgICAgaW50IG9mZnNldAorICAgICk7CisKKyAgICAvLyBDIGZ1bmN0aW9uIHZvaWQgZ2xUZXhQYXJhbWV0ZXJJdWl2ICggR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBjb25zdCBHTHVpbnQgKnBhcmFtcyApCisKKyAgICBwdWJsaWMgc3RhdGljIG5hdGl2ZSB2b2lkIGdsVGV4UGFyYW1ldGVySXVpdigKKyAgICAgICAgaW50IHRhcmdldCwKKyAgICAgICAgaW50IHBuYW1lLAorICAgICAgICBqYXZhLm5pby5JbnRCdWZmZXIgcGFyYW1zCisgICAgKTsKKworICAgIC8vIEMgZnVuY3Rpb24gdm9pZCBnbEdldFRleFBhcmFtZXRlcklpdiAoIEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcyApCisKKyAgICBwdWJsaWMgc3RhdGljIG5hdGl2ZSB2b2lkIGdsR2V0VGV4UGFyYW1ldGVySWl2KAorICAgICAgICBpbnQgdGFyZ2V0LAorICAgICAgICBpbnQgcG5hbWUsCisgICAgICAgIGludFtdIHBhcmFtcywKKyAgICAgICAgaW50IG9mZnNldAorICAgICk7CisKKyAgICAvLyBDIGZ1bmN0aW9uIHZvaWQgZ2xHZXRUZXhQYXJhbWV0ZXJJaXYgKCBHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMgKQorCisgICAgcHVibGljIHN0YXRpYyBuYXRpdmUgdm9pZCBnbEdldFRleFBhcmFtZXRlcklpdigKKyAgICAgICAgaW50IHRhcmdldCwKKyAgICAgICAgaW50IHBuYW1lLAorICAgICAgICBqYXZhLm5pby5JbnRCdWZmZXIgcGFyYW1zCisgICAgKTsKKworICAgIC8vIEMgZnVuY3Rpb24gdm9pZCBnbEdldFRleFBhcmFtZXRlckl1aXYgKCBHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMdWludCAqcGFyYW1zICkKKworICAgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIHZvaWQgZ2xHZXRUZXhQYXJhbWV0ZXJJdWl2KAorICAgICAgICBpbnQgdGFyZ2V0LAorICAgICAgICBpbnQgcG5hbWUsCisgICAgICAgIGludFtdIHBhcmFtcywKKyAgICAgICAgaW50IG9mZnNldAorICAgICk7CisKKyAgICAvLyBDIGZ1bmN0aW9uIHZvaWQgZ2xHZXRUZXhQYXJhbWV0ZXJJdWl2ICggR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTHVpbnQgKnBhcmFtcyApCisKKyAgICBwdWJsaWMgc3RhdGljIG5hdGl2ZSB2b2lkIGdsR2V0VGV4UGFyYW1ldGVySXVpdigKKyAgICAgICAgaW50IHRhcmdldCwKKyAgICAgICAgaW50IHBuYW1lLAorICAgICAgICBqYXZhLm5pby5JbnRCdWZmZXIgcGFyYW1zCisgICAgKTsKKworICAgIC8vIEMgZnVuY3Rpb24gdm9pZCBnbFNhbXBsZXJQYXJhbWV0ZXJJaXYgKCBHTHVpbnQgc2FtcGxlciwgR0xlbnVtIHBuYW1lLCBjb25zdCBHTGludCAqcGFyYW0gKQorCisgICAgcHVibGljIHN0YXRpYyBuYXRpdmUgdm9pZCBnbFNhbXBsZXJQYXJhbWV0ZXJJaXYoCisgICAgICAgIGludCBzYW1wbGVyLAorICAgICAgICBpbnQgcG5hbWUsCisgICAgICAgIGludFtdIHBhcmFtLAorICAgICAgICBpbnQgb2Zmc2V0CisgICAgKTsKKworICAgIC8vIEMgZnVuY3Rpb24gdm9pZCBnbFNhbXBsZXJQYXJhbWV0ZXJJaXYgKCBHTHVpbnQgc2FtcGxlciwgR0xlbnVtIHBuYW1lLCBjb25zdCBHTGludCAqcGFyYW0gKQorCisgICAgcHVibGljIHN0YXRpYyBuYXRpdmUgdm9pZCBnbFNhbXBsZXJQYXJhbWV0ZXJJaXYoCisgICAgICAgIGludCBzYW1wbGVyLAorICAgICAgICBpbnQgcG5hbWUsCisgICAgICAgIGphdmEubmlvLkludEJ1ZmZlciBwYXJhbQorICAgICk7CisKKyAgICAvLyBDIGZ1bmN0aW9uIHZvaWQgZ2xTYW1wbGVyUGFyYW1ldGVySXVpdiAoIEdMdWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUsIGNvbnN0IEdMdWludCAqcGFyYW0gKQorCisgICAgcHVibGljIHN0YXRpYyBuYXRpdmUgdm9pZCBnbFNhbXBsZXJQYXJhbWV0ZXJJdWl2KAorICAgICAgICBpbnQgc2FtcGxlciwKKyAgICAgICAgaW50IHBuYW1lLAorICAgICAgICBpbnRbXSBwYXJhbSwKKyAgICAgICAgaW50IG9mZnNldAorICAgICk7CisKKyAgICAvLyBDIGZ1bmN0aW9uIHZvaWQgZ2xTYW1wbGVyUGFyYW1ldGVySXVpdiAoIEdMdWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUsIGNvbnN0IEdMdWludCAqcGFyYW0gKQorCisgICAgcHVibGljIHN0YXRpYyBuYXRpdmUgdm9pZCBnbFNhbXBsZXJQYXJhbWV0ZXJJdWl2KAorICAgICAgICBpbnQgc2FtcGxlciwKKyAgICAgICAgaW50IHBuYW1lLAorICAgICAgICBqYXZhLm5pby5JbnRCdWZmZXIgcGFyYW0KKyAgICApOworCisgICAgLy8gQyBmdW5jdGlvbiB2b2lkIGdsR2V0U2FtcGxlclBhcmFtZXRlcklpdiAoIEdMdWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMgKQorCisgICAgcHVibGljIHN0YXRpYyBuYXRpdmUgdm9pZCBnbEdldFNhbXBsZXJQYXJhbWV0ZXJJaXYoCisgICAgICAgIGludCBzYW1wbGVyLAorICAgICAgICBpbnQgcG5hbWUsCisgICAgICAgIGludFtdIHBhcmFtcywKKyAgICAgICAgaW50IG9mZnNldAorICAgICk7CisKKyAgICAvLyBDIGZ1bmN0aW9uIHZvaWQgZ2xHZXRTYW1wbGVyUGFyYW1ldGVySWl2ICggR0x1aW50IHNhbXBsZXIsIEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcyApCisKKyAgICBwdWJsaWMgc3RhdGljIG5hdGl2ZSB2b2lkIGdsR2V0U2FtcGxlclBhcmFtZXRlcklpdigKKyAgICAgICAgaW50IHNhbXBsZXIsCisgICAgICAgIGludCBwbmFtZSwKKyAgICAgICAgamF2YS5uaW8uSW50QnVmZmVyIHBhcmFtcworICAgICk7CisKKyAgICAvLyBDIGZ1bmN0aW9uIHZvaWQgZ2xHZXRTYW1wbGVyUGFyYW1ldGVySXVpdiAoIEdMdWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUsIEdMdWludCAqcGFyYW1zICkKKworICAgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIHZvaWQgZ2xHZXRTYW1wbGVyUGFyYW1ldGVySXVpdigKKyAgICAgICAgaW50IHNhbXBsZXIsCisgICAgICAgIGludCBwbmFtZSwKKyAgICAgICAgaW50W10gcGFyYW1zLAorICAgICAgICBpbnQgb2Zmc2V0CisgICAgKTsKKworICAgIC8vIEMgZnVuY3Rpb24gdm9pZCBnbEdldFNhbXBsZXJQYXJhbWV0ZXJJdWl2ICggR0x1aW50IHNhbXBsZXIsIEdMZW51bSBwbmFtZSwgR0x1aW50ICpwYXJhbXMgKQorCisgICAgcHVibGljIHN0YXRpYyBuYXRpdmUgdm9pZCBnbEdldFNhbXBsZXJQYXJhbWV0ZXJJdWl2KAorICAgICAgICBpbnQgc2FtcGxlciwKKyAgICAgICAgaW50IHBuYW1lLAorICAgICAgICBqYXZhLm5pby5JbnRCdWZmZXIgcGFyYW1zCisgICAgKTsKKworICAgIC8vIEMgZnVuY3Rpb24gdm9pZCBnbFRleEJ1ZmZlciAoIEdMZW51bSB0YXJnZXQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0x1aW50IGJ1ZmZlciApCisKKyAgICBwdWJsaWMgc3RhdGljIG5hdGl2ZSB2b2lkIGdsVGV4QnVmZmVyKAorICAgICAgICBpbnQgdGFyZ2V0LAorICAgICAgICBpbnQgaW50ZXJuYWxmb3JtYXQsCisgICAgICAgIGludCBidWZmZXIKKyAgICApOworCisgICAgLy8gQyBmdW5jdGlvbiB2b2lkIGdsVGV4QnVmZmVyUmFuZ2UgKCBHTGVudW0gdGFyZ2V0LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMdWludCBidWZmZXIsIEdMaW50cHRyIG9mZnNldCwgR0xzaXplaXB0ciBzaXplICkKKworICAgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIHZvaWQgZ2xUZXhCdWZmZXJSYW5nZSgKKyAgICAgICAgaW50IHRhcmdldCwKKyAgICAgICAgaW50IGludGVybmFsZm9ybWF0LAorICAgICAgICBpbnQgYnVmZmVyLAorICAgICAgICBpbnQgb2Zmc2V0LAorICAgICAgICBpbnQgc2l6ZQorICAgICk7CisKKyAgICAvLyBDIGZ1bmN0aW9uIHZvaWQgZ2xUZXhTdG9yYWdlM0RNdWx0aXNhbXBsZSAoIEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkgc2FtcGxlcywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xib29sZWFuIGZpeGVkc2FtcGxlbG9jYXRpb25zICkKKworICAgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIHZvaWQgZ2xUZXhTdG9yYWdlM0RNdWx0aXNhbXBsZSgKKyAgICAgICAgaW50IHRhcmdldCwKKyAgICAgICAgaW50IHNhbXBsZXMsCisgICAgICAgIGludCBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgaW50IHdpZHRoLAorICAgICAgICBpbnQgaGVpZ2h0LAorICAgICAgICBpbnQgZGVwdGgsCisgICAgICAgIGJvb2xlYW4gZml4ZWRzYW1wbGVsb2NhdGlvbnMKKyAgICApOworCit9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9CYWNrdXBSZXN0b3JlQ29uZmlybWF0aW9uL3Jlcy92YWx1ZXMtemgtckNOL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvQmFja3VwUmVzdG9yZUNvbmZpcm1hdGlvbi9yZXMvdmFsdWVzLXpoLXJDTi9zdHJpbmdzLnhtbAppbmRleCBhYzIwYWVkLi4yMzY4OGFlIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9CYWNrdXBSZXN0b3JlQ29uZmlybWF0aW9uL3Jlcy92YWx1ZXMtemgtckNOL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0JhY2t1cFJlc3RvcmVDb25maXJtYXRpb24vcmVzL3ZhbHVlcy16aC1yQ04vc3RyaW5ncy54bWwKQEAgLTE4LDEwICsxOCwxMCBAQAogICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KICAgICA8c3RyaW5nIG5hbWU9ImJhY2t1cF9jb25maXJtX3RpdGxlIiBtc2dpZD0iODI3NTYzNzI0MjA5MzAzMzQ1Ij4i5a6M5YWo5aSH5Lu9Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdG9yZV9jb25maXJtX3RpdGxlIiBtc2dpZD0iNTQ2OTM2NTgwOTU2NzQ4NjYwMiI+IuWujOWFqOi/mOWOnyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImJhY2t1cF9jb25maXJtX3RleHQiIG1zZ2lkPSIxODc4MDIxMjgyNzU4ODk2NTkzIj4i57O757uf6K+35rGC5bCG5omA5pyJ5pWw5o2u5a6M5pW05aSH5Lu96Iez5bey6L+e5o6l55qE5qGM6Z2i6K6h566X5py644CC5YWB6K645q2k5pON5L2c5ZCX77yfXG5cbuWmguaenOaCqOacrOS6uuacquimgeaxguWkh+S7ve+8jOivt+mYu+atouivpeaTjeS9nOOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhY2t1cF9jb25maXJtX3RleHQiIG1zZ2lkPSIxODc4MDIxMjgyNzU4ODk2NTkzIj4i57O757uf6K+35rGC5bCG5omA5pyJ5pWw5o2u5a6M5pW05aSH5Lu96Iez5bey6L+e5o6l55qE5qGM6Z2i6K6+5aSH44CC5YWB6K645q2k5pON5L2c5ZCX77yfXG5cbuWmguaenOaCqOacrOS6uuacquimgeaxguWkh+S7ve+8jOivt+mYu+atouivpeaTjeS9nOOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFsbG93X2JhY2t1cF9idXR0b25fbGFiZWwiIG1zZ2lkPSI0MjE3MjI4NzQ3NzY5NjQ0MDY4Ij4i5aSH5Lu95oiR55qE5pWw5o2uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVueV9iYWNrdXBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNjAwOTExOTExNTU4MTA5NzcwOCI+IuS4jeWkh+S7vSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlc3RvcmVfY29uZmlybV90ZXh0IiBtc2dpZD0iNzQ5OTg2NjcyODAzMDQ2MTc3NiI+Iuezu+e7n+ivt+axguS7jui/nuaOpeeahOahjOmdouiuoeeul+acuuWujOaVtOi/mOWOn+aJgOacieaVsOaNruOAguWFgeiuuOatpOaTjeS9nOWQl++8n1xuXG7lpoLmnpzmgqjmnKzkurrmnKropoHmsYLov5jljp/vvIzor7fpmLvmraLor6Xmk43kvZzjgILor6Xmk43kvZzkvJropobnm5borr7lpIfkuIrlvZPliY3nmoTmiYDmnInmlbDmja7vvIEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0b3JlX2NvbmZpcm1fdGV4dCIgbXNnaWQ9Ijc0OTk4NjY3MjgwMzA0NjE3NzYiPiLns7vnu5/or7fmsYLku47ov57mjqXnmoTmoYzpnaLorr7lpIflrozmlbTov5jljp/miYDmnInmlbDmja7jgILlhYHorrjmraTmk43kvZzlkJfvvJ9cblxu5aaC5p6c5oKo5pys5Lq65pyq6KaB5rGC6L+Y5Y6f77yM6K+36Zi75q2i6K+l5pON5L2c44CC6K+l5pON5L2c5Lya6KaG55uW6K6+5aSH5LiK5b2T5YmN55qE5omA5pyJ5pWw5o2u77yBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWxsb3dfcmVzdG9yZV9idXR0b25fbGFiZWwiIG1zZ2lkPSIzMDgxMjg2NzUyMjc3MTI3ODI3Ij4i5oGi5aSN5oiR55qE5pWw5o2uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVueV9yZXN0b3JlX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjE3MjQzNjczMzQ0NTMxMDQzNzgiPiLkuI3mgaLlpI0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjdXJyZW50X3Bhc3N3b3JkX3RleHQiIG1zZ2lkPSI4MjY4MTg5NTU1NTc4Mjk4MDY3Ij4i6K+35Zyo5LiL5pa56L6T5YWl5oKo55qE5b2T5YmN5aSH5Lu95a+G56CB77yaIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfZG9jX2FsYnVtX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2RvY19hbGJ1bV9hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiMjFjMTIuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfZG9jX2FsYnVtX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2RvY19hcGtfYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfZG9jX2Fwa19hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkM2VlNDUuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfZG9jX2Fwa19hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtaGRwaS9pY19kb2NfYXVkaW9fYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfZG9jX2F1ZGlvX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWEzZWJjNDcuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfZG9jX2F1ZGlvX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2RvY19jZXJ0aWZpY2F0ZV9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtaGRwaS9pY19kb2NfY2VydGlmaWNhdGVfYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDg2YTY5Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2RvY19jZXJ0aWZpY2F0ZV9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtaGRwaS9pY19kb2NfY29kZXNfYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfZG9jX2NvZGVzX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjg2ZjBmNy4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtaGRwaS9pY19kb2NfY29kZXNfYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfZG9jX2NvbXByZXNzZWRfYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfZG9jX2NvbXByZXNzZWRfYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDA5ODhkLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2RvY19jb21wcmVzc2VkX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2RvY19jb250YWN0X2FtX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2RvY19jb250YWN0X2FtX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmMzMTM2MC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtaGRwaS9pY19kb2NfY29udGFjdF9hbV9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtaGRwaS9pY19kb2NfZXZlbnRfYW1fYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfZG9jX2V2ZW50X2FtX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQ1MGZmMC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtaGRwaS9pY19kb2NfZXZlbnRfYW1fYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfZG9jX2V4Y2VsX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2RvY19leGNlbF9hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhZDU0YmIuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfZG9jX2V4Y2VsX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2RvY19mb2xkZXJfYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfZG9jX2ZvbGRlcl9hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmN2M2MzYuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfZG9jX2ZvbGRlcl9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtaGRwaS9pY19kb2NfZm9udF9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtaGRwaS9pY19kb2NfZm9udF9hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4Njc4NDcuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfZG9jX2ZvbnRfYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfZG9jX2dlbmVyaWNfYW1fYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfZG9jX2dlbmVyaWNfYW1fYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDU5NzY3Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2RvY19nZW5lcmljX2FtX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2RvY19pbWFnZV9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtaGRwaS9pY19kb2NfaW1hZ2VfYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwY2JkOTkyLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2RvY19pbWFnZV9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtaGRwaS9pY19kb2NfcGRmX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2RvY19wZGZfYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYjQ2NzAyLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2RvY19wZGZfYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfZG9jX3Bvd2VycG9pbnRfYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfZG9jX3Bvd2VycG9pbnRfYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOWY3YWY1Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2RvY19wb3dlcnBvaW50X2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2RvY19wcmVzZW50YXRpb25fYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfZG9jX3ByZXNlbnRhdGlvbl9hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyMThjMmYuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfZG9jX3ByZXNlbnRhdGlvbl9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtaGRwaS9pY19kb2Nfc3ByZWFkc2hlZXRfYW1fYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfZG9jX3NwcmVhZHNoZWV0X2FtX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDZkNzU1Zi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtaGRwaS9pY19kb2Nfc3ByZWFkc2hlZXRfYW1fYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfZG9jX3RleHRfYW1fYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfZG9jX3RleHRfYW1fYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzM1NzBiLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2RvY190ZXh0X2FtX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2RvY192aWRlb19hbV9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtaGRwaS9pY19kb2NfdmlkZW9fYW1fYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMGNlYTI1Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2RvY192aWRlb19hbV9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtaGRwaS9pY19kb2Nfd29yZF9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtaGRwaS9pY19kb2Nfd29yZF9hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3YjYwZGUuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfZG9jX3dvcmRfYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfcm9vdF9zZGNhcmRfYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfcm9vdF9zZGNhcmRfYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NWU0MmFhLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX3Jvb3Rfc2RjYXJkX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2RvY19hbGJ1bV9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtbWRwaS9pY19kb2NfYWxidW1fYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzI3ZWVhLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2RvY19hbGJ1bV9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtbWRwaS9pY19kb2NfYXBrX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2RvY19hcGtfYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNGFkZDUxLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2RvY19hcGtfYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLW1kcGkvaWNfZG9jX2F1ZGlvX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2RvY19hdWRpb19hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5YTdmMjAuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLW1kcGkvaWNfZG9jX2F1ZGlvX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2RvY19jZXJ0aWZpY2F0ZV9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtbWRwaS9pY19kb2NfY2VydGlmaWNhdGVfYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNmJlYjc5Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2RvY19jZXJ0aWZpY2F0ZV9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtbWRwaS9pY19kb2NfY29kZXNfYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLW1kcGkvaWNfZG9jX2NvZGVzX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ5Y2FiNy4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtbWRwaS9pY19kb2NfY29kZXNfYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLW1kcGkvaWNfZG9jX2NvbXByZXNzZWRfYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLW1kcGkvaWNfZG9jX2NvbXByZXNzZWRfYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTFkMjg3Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2RvY19jb21wcmVzc2VkX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2RvY19jb250YWN0X2FtX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2RvY19jb250YWN0X2FtX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2JjMDJjOS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtbWRwaS9pY19kb2NfY29udGFjdF9hbV9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtbWRwaS9pY19kb2NfZXZlbnRfYW1fYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLW1kcGkvaWNfZG9jX2V2ZW50X2FtX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGUzOWNkNC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtbWRwaS9pY19kb2NfZXZlbnRfYW1fYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLW1kcGkvaWNfZG9jX2V4Y2VsX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2RvY19leGNlbF9hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzZWI4NDUuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLW1kcGkvaWNfZG9jX2V4Y2VsX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2RvY19mb2xkZXJfYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLW1kcGkvaWNfZG9jX2ZvbGRlcl9hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ZjZlNTA3Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2RvY19mb2xkZXJfYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLW1kcGkvaWNfZG9jX2ZvbnRfYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLW1kcGkvaWNfZG9jX2ZvbnRfYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMmYwNDNmLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2RvY19mb250X2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2RvY19nZW5lcmljX2FtX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2RvY19nZW5lcmljX2FtX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDgzZDdmYi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtbWRwaS9pY19kb2NfZ2VuZXJpY19hbV9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtbWRwaS9pY19kb2NfaW1hZ2VfYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLW1kcGkvaWNfZG9jX2ltYWdlX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjk0MWI4YS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtbWRwaS9pY19kb2NfaW1hZ2VfYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLW1kcGkvaWNfZG9jX3BkZl9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtbWRwaS9pY19kb2NfcGRmX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNhYzA3Mi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtbWRwaS9pY19kb2NfcGRmX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2RvY19wb3dlcnBvaW50X2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2RvY19wb3dlcnBvaW50X2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQzZjkwMi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtbWRwaS9pY19kb2NfcG93ZXJwb2ludF9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtbWRwaS9pY19kb2NfcHJlc2VudGF0aW9uX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2RvY19wcmVzZW50YXRpb25fYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTcyY2QxLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2RvY19wcmVzZW50YXRpb25fYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLW1kcGkvaWNfZG9jX3NwcmVhZHNoZWV0X2FtX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2RvY19zcHJlYWRzaGVldF9hbV9hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhZTY3MWIuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLW1kcGkvaWNfZG9jX3NwcmVhZHNoZWV0X2FtX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2RvY190ZXh0X2FtX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2RvY190ZXh0X2FtX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTVlYmQ1MS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtbWRwaS9pY19kb2NfdGV4dF9hbV9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtbWRwaS9pY19kb2NfdmlkZW9fYW1fYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLW1kcGkvaWNfZG9jX3ZpZGVvX2FtX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODlhYzQzNC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtbWRwaS9pY19kb2NfdmlkZW9fYW1fYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLW1kcGkvaWNfZG9jX3dvcmRfYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLW1kcGkvaWNfZG9jX3dvcmRfYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTVjNDRiLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2RvY193b3JkX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX3Jvb3Rfc2RjYXJkX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX3Jvb3Rfc2RjYXJkX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWRlODI5Mi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtbWRwaS9pY19yb290X3NkY2FyZF9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteGhkcGkvaWNfZG9jX2FsYnVtX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19kb2NfYWxidW1fYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjAzZDM1Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19kb2NfYWxidW1fYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2RvY19hcGtfYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2RvY19hcGtfYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTU1OGYyLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19kb2NfYXBrX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19kb2NfYXVkaW9fYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2RvY19hdWRpb19hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxOTBjNGQuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2RvY19hdWRpb19hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteGhkcGkvaWNfZG9jX2NlcnRpZmljYXRlX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19kb2NfY2VydGlmaWNhdGVfYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYWJjOGMzLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19kb2NfY2VydGlmaWNhdGVfYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2RvY19jb2Rlc19hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteGhkcGkvaWNfZG9jX2NvZGVzX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDhiYTZlMC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteGhkcGkvaWNfZG9jX2NvZGVzX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19kb2NfY29tcHJlc3NlZF9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteGhkcGkvaWNfZG9jX2NvbXByZXNzZWRfYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjUxMTFhLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19kb2NfY29tcHJlc3NlZF9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteGhkcGkvaWNfZG9jX2NvbnRhY3RfYW1fYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2RvY19jb250YWN0X2FtX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTdiNzQ2MC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteGhkcGkvaWNfZG9jX2NvbnRhY3RfYW1fYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2RvY19ldmVudF9hbV9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteGhkcGkvaWNfZG9jX2V2ZW50X2FtX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzE4M2JmYy4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteGhkcGkvaWNfZG9jX2V2ZW50X2FtX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19kb2NfZXhjZWxfYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2RvY19leGNlbF9hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhNGU4NDQuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2RvY19leGNlbF9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteGhkcGkvaWNfZG9jX2ZvbGRlcl9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteGhkcGkvaWNfZG9jX2ZvbGRlcl9hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2ZDU3MjEuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2RvY19mb2xkZXJfYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2RvY19mb250X2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19kb2NfZm9udF9hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzYTEzMDIuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2RvY19mb250X2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19kb2NfZ2VuZXJpY19hbV9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteGhkcGkvaWNfZG9jX2dlbmVyaWNfYW1fYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDgxMWYxLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19kb2NfZ2VuZXJpY19hbV9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteGhkcGkvaWNfZG9jX2ltYWdlX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19kb2NfaW1hZ2VfYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjFmNTM3Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19kb2NfaW1hZ2VfYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2RvY19wZGZfYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2RvY19wZGZfYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDgzNTg0Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19kb2NfcGRmX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19kb2NfcG93ZXJwb2ludF9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteGhkcGkvaWNfZG9jX3Bvd2VycG9pbnRfYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OThlMjZhLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19kb2NfcG93ZXJwb2ludF9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteGhkcGkvaWNfZG9jX3ByZXNlbnRhdGlvbl9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteGhkcGkvaWNfZG9jX3ByZXNlbnRhdGlvbl9hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlOWM2NjcuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2RvY19wcmVzZW50YXRpb25fYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2RvY19zcHJlYWRzaGVldF9hbV9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteGhkcGkvaWNfZG9jX3NwcmVhZHNoZWV0X2FtX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY5NTFjMy4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteGhkcGkvaWNfZG9jX3NwcmVhZHNoZWV0X2FtX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19kb2NfdGV4dF9hbV9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteGhkcGkvaWNfZG9jX3RleHRfYW1fYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOGVkOWYwLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19kb2NfdGV4dF9hbV9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteGhkcGkvaWNfZG9jX3ZpZGVvX2FtX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19kb2NfdmlkZW9fYW1fYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDY0ZTU2Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19kb2NfdmlkZW9fYW1fYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2RvY193b3JkX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19kb2Nfd29yZF9hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiYzQwZGUuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2RvY193b3JkX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19yb290X3NkY2FyZF9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteGhkcGkvaWNfcm9vdF9zZGNhcmRfYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMGI4YThiNy4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteGhkcGkvaWNfcm9vdF9zZGNhcmRfYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19kb2NfYWxidW1fYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19kb2NfYWxidW1fYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MGY1OWY1Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfZG9jX2FsYnVtX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfZG9jX2Fwa19hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2RvY19hcGtfYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDA2YjEyLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfZG9jX2Fwa19hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2RvY19hdWRpb19hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2RvY19hdWRpb19hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5MjYxODguLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19kb2NfYXVkaW9fYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19kb2NfY2VydGlmaWNhdGVfYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19kb2NfY2VydGlmaWNhdGVfYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjVkNzRjLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfZG9jX2NlcnRpZmljYXRlX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfZG9jX2NvZGVzX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfZG9jX2NvZGVzX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2QzMjgwMS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2RvY19jb2Rlc19hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2RvY19jb21wcmVzc2VkX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfZG9jX2NvbXByZXNzZWRfYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTI4NzA4Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfZG9jX2NvbXByZXNzZWRfYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19kb2NfY29udGFjdF9hbV9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2RvY19jb250YWN0X2FtX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjc0YzUyNC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2RvY19jb250YWN0X2FtX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfZG9jX2V2ZW50X2FtX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfZG9jX2V2ZW50X2FtX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjA1M2IwYS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2RvY19ldmVudF9hbV9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2RvY19leGNlbF9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2RvY19leGNlbF9hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4ZWUxM2IuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19kb2NfZXhjZWxfYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19kb2NfZm9sZGVyX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfZG9jX2ZvbGRlcl9hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjZjljYzIuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19kb2NfZm9sZGVyX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfZG9jX2ZvbnRfYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19kb2NfZm9udF9hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0ZmJiYmMuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19kb2NfZm9udF9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2RvY19nZW5lcmljX2FtX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfZG9jX2dlbmVyaWNfYW1fYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMWEyMTlhLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfZG9jX2dlbmVyaWNfYW1fYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19kb2NfaW1hZ2VfYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19kb2NfaW1hZ2VfYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTQ2MWM5Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfZG9jX2ltYWdlX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfZG9jX3BkZl9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2RvY19wZGZfYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTY3OTU2Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfZG9jX3BkZl9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2RvY19wb3dlcnBvaW50X2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfZG9jX3Bvd2VycG9pbnRfYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTNhYThjLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfZG9jX3Bvd2VycG9pbnRfYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19kb2NfcHJlc2VudGF0aW9uX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfZG9jX3ByZXNlbnRhdGlvbl9hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0YWU5YWUuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19kb2NfcHJlc2VudGF0aW9uX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfZG9jX3NwcmVhZHNoZWV0X2FtX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfZG9jX3NwcmVhZHNoZWV0X2FtX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTExNDM5ZS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2RvY19zcHJlYWRzaGVldF9hbV9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2RvY190ZXh0X2FtX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfZG9jX3RleHRfYW1fYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODc2Zjg2Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfZG9jX3RleHRfYW1fYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19kb2NfdmlkZW9fYW1fYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19kb2NfdmlkZW9fYW1fYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Y2Y2NTZhLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfZG9jX3ZpZGVvX2FtX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfZG9jX3dvcmRfYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19kb2Nfd29yZF9hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjYzNkN2IuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19kb2Nfd29yZF9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHhoZHBpL2ljX3Jvb3Rfc2RjYXJkX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfcm9vdF9zZGNhcmRfYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjM2Nzc0Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfcm9vdF9zZGNhcmRfYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZG9jX2FsYnVtX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2RvY19hbGJ1bV9hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyZGQ0OTQuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZG9jX2FsYnVtX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2RvY19hcGtfYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZG9jX2Fwa19hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmOTM1YmYuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZG9jX2Fwa19hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19kb2NfYXVkaW9fYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZG9jX2F1ZGlvX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQ5OWNiYy4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19kb2NfYXVkaW9fYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZG9jX2NlcnRpZmljYXRlX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2RvY19jZXJ0aWZpY2F0ZV9hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhMTI5MjguLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZG9jX2NlcnRpZmljYXRlX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2RvY19jb2Rlc19hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19kb2NfY29kZXNfYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNGFmYTM3Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2RvY19jb2Rlc19hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19kb2NfY29tcHJlc3NlZF9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19kb2NfY29tcHJlc3NlZF9hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiMGFhMDQuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZG9jX2NvbXByZXNzZWRfYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZG9jX2NvbnRhY3RfYW1fYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZG9jX2NvbnRhY3RfYW1fYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYmQwNTM1Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2RvY19jb250YWN0X2FtX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2RvY19ldmVudF9hbV9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19kb2NfZXZlbnRfYW1fYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOWNkYmI3Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2RvY19ldmVudF9hbV9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19kb2NfZXhjZWxfYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZG9jX2V4Y2VsX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2EzNDliNi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19kb2NfZXhjZWxfYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZG9jX2ZvbGRlcl9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19kb2NfZm9sZGVyX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDIyNDlkMi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19kb2NfZm9sZGVyX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2RvY19mb250X2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2RvY19mb250X2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDY5YjkxMS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19kb2NfZm9udF9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19kb2NfZ2VuZXJpY19hbV9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19kb2NfZ2VuZXJpY19hbV9hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmNDc5YzMuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZG9jX2dlbmVyaWNfYW1fYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZG9jX2ltYWdlX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2RvY19pbWFnZV9hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxNjhkNmYuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZG9jX2ltYWdlX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2RvY19wZGZfYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZG9jX3BkZl9hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYjRkNjYuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZG9jX3BkZl9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19kb2NfcG93ZXJwb2ludF9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19kb2NfcG93ZXJwb2ludF9hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4YmE5YWQuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZG9jX3Bvd2VycG9pbnRfYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZG9jX3ByZXNlbnRhdGlvbl9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19kb2NfcHJlc2VudGF0aW9uX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWZlMThkYS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19kb2NfcHJlc2VudGF0aW9uX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2RvY19zcHJlYWRzaGVldF9hbV9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19kb2Nfc3ByZWFkc2hlZXRfYW1fYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDA1ZjZmLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2RvY19zcHJlYWRzaGVldF9hbV9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19kb2NfdGV4dF9hbV9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19kb2NfdGV4dF9hbV9hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyMzA4ZmUuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZG9jX3RleHRfYW1fYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZG9jX3ZpZGVvX2FtX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2RvY192aWRlb19hbV9hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhMTczYmUuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZG9jX3ZpZGVvX2FtX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2RvY193b3JkX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2RvY193b3JkX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTU2NGY1YS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19kb2Nfd29yZF9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19yb290X3NkY2FyZF9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19yb290X3NkY2FyZF9hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3ZGFhMmEuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfcm9vdF9zZGNhcmRfYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY19hbGJ1bS54bWwgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX2FsYnVtLnhtbAppbmRleCBlNzk2NWU2Li4xY2UzZjAyIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX2FsYnVtLnhtbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX2FsYnVtLnhtbApAQCAtMSw0ICsxLDI0IEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPGJpdG1hcCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpzcmM9IkBkcmF3YWJsZS9pY19kb2NfYWxidW1fYWxwaGEiCi0gICAgYW5kcm9pZDp0aW50PSI/YW5kcm9pZDphdHRyL2NvbG9yQ29udHJvbE5vcm1hbCIgLz4KKzwhLS0KK0NvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzx2ZWN0b3IgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgICAgICBhbmRyb2lkOndpZHRoPSIyNGRwIgorICAgICAgICBhbmRyb2lkOmhlaWdodD0iMjRkcCIKKyAgICAgICAgYW5kcm9pZDp2aWV3cG9ydFdpZHRoPSIyNC4wIgorICAgICAgICBhbmRyb2lkOnZpZXdwb3J0SGVpZ2h0PSIyNC4wIj4KKyAgICA8cGF0aAorICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iI0ZGNzM3MzczIgorICAgICAgICBhbmRyb2lkOnBhdGhEYXRhPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMCwtNC40OCAxMCwtMTBTMTcuNTIgMiAxMiAyem0wIDE0LjVjLTIuNDkgMCwtNC41LC0yLjAxLC00LjUsLTQuNVM5LjUxIDcuNSAxMiA3LjVzNC41IDIuMDEgNC41IDQuNSwtMi4wMSA0LjUsLTQuNSA0LjV6bTAsLTUuNWMtLjU1IDAsLTEgLjQ1LC0xIDFzLjQ1IDEgMSAxIDEsLS40NSAxLC0xLC0uNDUsLTEsLTEsLTF6Ii8+Cis8L3ZlY3Rvcj4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2NfYXBrLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2NfYXBrLnhtbAppbmRleCA0ZjhmMDZlLi4xOTc0NDVlIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX2Fway54bWwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY19hcGsueG1sCkBAIC0xLDQgKzEsMjQgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08Yml0bWFwIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOnNyYz0iQGRyYXdhYmxlL2ljX2RvY19hcGtfYWxwaGEiCi0gICAgYW5kcm9pZDp0aW50PSI/YW5kcm9pZDphdHRyL2NvbG9yQ29udHJvbE5vcm1hbCIgLz4KKzwhLS0KK0NvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzx2ZWN0b3IgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgICAgICBhbmRyb2lkOndpZHRoPSIyNGRwIgorICAgICAgICBhbmRyb2lkOmhlaWdodD0iMjRkcCIKKyAgICAgICAgYW5kcm9pZDp2aWV3cG9ydFdpZHRoPSIyNC4wIgorICAgICAgICBhbmRyb2lkOnZpZXdwb3J0SGVpZ2h0PSIyNC4wIj4KKyAgICA8cGF0aAorICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iI0ZGNzM3MzczIgorICAgICAgICBhbmRyb2lkOnBhdGhEYXRhPSJNNiAxOGMwIC41NS40NSAxIDEgMWgxdjMuNWMwIC44My42NyAxLjUgMS41IDEuNXMxLjUsLS42NyAxLjUsLTEuNVYxOWgydjMuNWMwIC44My42NyAxLjUgMS41IDEuNXMxLjUsLS42NyAxLjUsLTEuNVYxOWgxYy41NSAwIDEsLS40NSAxLC0xVjhINnYxMHpNMy41IDhDMi42NyA4IDIgOC42NyAyIDkuNXY3YzAgLjgzLjY3IDEuNSAxLjUgMS41UzUgMTcuMzMgNSAxNi41di03QzUgOC42NyA0LjMzIDggMy41IDh6bTE3IDBjLS44MyAwLC0xLjUuNjcsLTEuNSAxLjV2N2MwIC44My42NyAxLjUgMS41IDEuNXMxLjUsLS42NyAxLjUsLTEuNXYtN2MwLC0uODMsLS42NywtMS41LC0xLjUsLTEuNXptLTQuOTcsLTUuODRsMS4zLC0xLjNjLjIsLS4yLjIsLS41MSAwLC0uNzEsLS4yLC0uMiwtLjUxLC0uMiwtLjcxIDBsLTEuNDggMS40OEMxMy44NSAxLjIzIDEyLjk1IDEgMTIgMWMtLjk2IDAsLTEuODYuMjMsLTIuNjYuNjNMNy44NS4xNWMtLjIsLS4yLC0uNTEsLS4yLC0uNzEgMCwtLjIuMiwtLjIuNTEgMCAuNzFsMS4zMSAxLjMxQzYuOTcgMy4yNiA2IDUuMDEgNiA3aDEyYzAsLTEuOTksLS45NywtMy43NSwtMi40NywtNC44NHpNMTAgNUg5VjRoMXYxem01IDBoLTFWNGgxdjF6Ii8+Cis8L3ZlY3Rvcj4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2NfYXVkaW8ueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY19hdWRpby54bWwKaW5kZXggY2YxOGI0Zi4uNDU0ZWVhMyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY19hdWRpby54bWwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY19hdWRpby54bWwKQEAgLTEsNCArMSwyNCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxiaXRtYXAgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6c3JjPSJAZHJhd2FibGUvaWNfZG9jX2F1ZGlvX2FscGhhIgotICAgIGFuZHJvaWQ6dGludD0iP2FuZHJvaWQ6YXR0ci9jb2xvckNvbnRyb2xOb3JtYWwiIC8+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8dmVjdG9yIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICAgICAgYW5kcm9pZDp3aWR0aD0iMjRkcCIKKyAgICAgICAgYW5kcm9pZDpoZWlnaHQ9IjI0ZHAiCisgICAgICAgIGFuZHJvaWQ6dmlld3BvcnRXaWR0aD0iMjQuMCIKKyAgICAgICAgYW5kcm9pZDp2aWV3cG9ydEhlaWdodD0iMjQuMCI+CisgICAgPHBhdGgKKyAgICAgICAgYW5kcm9pZDpmaWxsQ29sb3I9IiNGRkRCNDQzNyIKKyAgICAgICAgYW5kcm9pZDpwYXRoRGF0YT0iTTE5IDNINWMtMS4xIDAsLTIgLjksLTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDIsLS45IDIsLTJWNWMwLC0xLjEsLS45LC0yLC0yLC0yek03LjIgMThjLS42NiAwLC0xLjIsLS41NCwtMS4yLC0xLjJWMTJjMCwtMy4zMSAyLjY5LC02IDYsLTZzNiAyLjY5IDYgNnY0LjhjMCAuNjYsLS41NCAxLjIsLTEuMiAxLjJIMTR2LTRoMnYtMmMwLC0yLjIxLC0xLjc5LC00LC00LC00cy00IDEuNzksLTQgNHYyaDJ2NEg3LjJ6Ii8+Cis8L3ZlY3Rvcj4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2NfY2VydGlmaWNhdGUueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY19jZXJ0aWZpY2F0ZS54bWwKaW5kZXggYzI4ZWQ0Zi4uYjk5YmFmNiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY19jZXJ0aWZpY2F0ZS54bWwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY19jZXJ0aWZpY2F0ZS54bWwKQEAgLTEsNCArMSwyNCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxiaXRtYXAgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6c3JjPSJAZHJhd2FibGUvaWNfZG9jX2NlcnRpZmljYXRlX2FscGhhIgotICAgIGFuZHJvaWQ6dGludD0iP2FuZHJvaWQ6YXR0ci9jb2xvckNvbnRyb2xOb3JtYWwiIC8+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8dmVjdG9yIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICAgICAgYW5kcm9pZDp3aWR0aD0iMjRkcCIKKyAgICAgICAgYW5kcm9pZDpoZWlnaHQ9IjI0ZHAiCisgICAgICAgIGFuZHJvaWQ6dmlld3BvcnRXaWR0aD0iMjQuMCIKKyAgICAgICAgYW5kcm9pZDp2aWV3cG9ydEhlaWdodD0iMjQuMCI+CisgICAgPHBhdGgKKyAgICAgICAgYW5kcm9pZDpmaWxsQ29sb3I9IiNGRjczNzM3MyIKKyAgICAgICAgYW5kcm9pZDpwYXRoRGF0YT0iTTE3LjgxIDQuNDdjLS4wOCAwLC0uMTYsLS4wMiwtLjIzLC0uMDZDMTUuNjYgMy40MiAxNCAzIDEyLjAxIDNjLTEuOTggMCwtMy44Ni40NywtNS41NyAxLjQxLC0uMjQuMTMsLS41NC4wNCwtLjY4LC0uMiwtLjEzLC0uMjQsLS4wNCwtLjU1LjIsLS42OEM3LjgyIDIuNTIgOS44NiAyIDEyLjAxIDJjMi4xMyAwIDMuOTkuNDcgNi4wMyAxLjUyLjI1LjEzLjM0LjQzLjIxLjY3LC0uMDkuMTgsLS4yNi4yOCwtLjQ0LjI4ek0zLjUgOS43MmMtLjEgMCwtLjIsLS4wMywtLjI5LC0uMDksLS4yMywtLjE2LC0uMjgsLS40NywtLjEyLC0uNy45OSwtMS40IDIuMjUsLTIuNSAzLjc1LC0zLjI3QzkuOTggNC4wNCAxNCA0LjAzIDE3LjE1IDUuNjVjMS41Ljc3IDIuNzYgMS44NiAzLjc1IDMuMjUuMTYuMjIuMTEuNTQsLS4xMi43LC0uMjMuMTYsLS41NC4xMSwtLjcsLS4xMiwtLjksLTEuMjYsLTIuMDQsLTIuMjUsLTMuMzksLTIuOTQsLTIuODcsLTEuNDcsLTYuNTQsLTEuNDcsLTkuNC4wMSwtMS4zNi43LC0yLjUgMS43LC0zLjQgMi45NiwtLjA4LjE0LC0uMjMuMjEsLS4zOS4yMXptNi4yNSAxMi4wN2MtLjEzIDAsLS4yNiwtLjA1LC0uMzUsLS4xNSwtLjg3LC0uODcsLTEuMzQsLTEuNDMsLTIuMDEsLTIuNjQsLS42OSwtMS4yMywtMS4wNSwtMi43MywtMS4wNSwtNC4zNCAwLC0yLjk3IDIuNTQsLTUuMzkgNS42NiwtNS4zOXM1LjY2IDIuNDIgNS42NiA1LjM5YzAgLjI4LC0uMjIuNSwtLjUuNXMtLjUsLS4yMiwtLjUsLS41YzAsLTIuNDIsLTIuMDksLTQuMzksLTQuNjYsLTQuMzksLTIuNTcgMCwtNC42NiAxLjk3LC00LjY2IDQuMzkgMCAxLjQ0LjMyIDIuNzcuOTMgMy44NS42NCAxLjE1IDEuMDggMS42NCAxLjg1IDIuNDIuMTkuMi4xOS41MSAwIC43MSwtLjExLjEsLS4yNC4xNSwtLjM3LjE1em03LjE3LC0xLjg1Yy0xLjE5IDAsLTIuMjQsLS4zLC0zLjEsLS44OSwtMS40OSwtMS4wMSwtMi4zOCwtMi42NSwtMi4zOCwtNC4zOSAwLC0uMjguMjIsLS41LjUsLS41cy41LjIyLjUuNWMwIDEuNDEuNzIgMi43NCAxLjk0IDMuNTYuNzEuNDggMS41NC43MSAyLjU0LjcxLjI0IDAgLjY0LC0uMDMgMS4wNCwtLjEuMjcsLS4wNS41My4xMy41OC40MS4wNS4yNywtLjEzLjUzLC0uNDEuNTgsLS41Ny4xMSwtMS4wNy4xMiwtMS4yMS4xMnpNMTQuOTEgMjJjLS4wNCAwLC0uMDksLS4wMSwtLjEzLC0uMDIsLTEuNTksLS40NCwtMi42MywtMS4wMywtMy43MiwtMi4xLC0xLjQsLTEuMzksLTIuMTcsLTMuMjQsLTIuMTcsLTUuMjIgMCwtMS42MiAxLjM4LC0yLjk0IDMuMDgsLTIuOTQgMS43IDAgMy4wOCAxLjMyIDMuMDggMi45NCAwIDEuMDcuOTMgMS45NCAyLjA4IDEuOTRzMi4wOCwtLjg3IDIuMDgsLTEuOTRjMCwtMy43NywtMy4yNSwtNi44MywtNy4yNSwtNi44MywtMi44NCAwLC01LjQ0IDEuNTgsLTYuNjEgNC4wMywtLjM5LjgxLC0uNTkgMS43NiwtLjU5IDIuOCAwIC43OC4wNyAyLjAxLjY3IDMuNjEuMS4yNiwtLjAzLjU1LC0uMjkuNjQsLS4yNi4xLC0uNTUsLS4wNCwtLjY0LC0uMjksLS40OSwtMS4zMSwtLjczLC0yLjYxLC0uNzMsLTMuOTYgMCwtMS4yLjIzLC0yLjI5LjY4LC0zLjI0IDEuMzMsLTIuNzkgNC4yOCwtNC42IDcuNTEsLTQuNiA0LjU1IDAgOC4yNSAzLjUxIDguMjUgNy44MyAwIDEuNjIsLTEuMzggMi45NCwtMy4wOCAyLjk0cy0zLjA4LC0xLjMyLC0zLjA4LC0yLjk0YzAsLTEuMDcsLS45MywtMS45NCwtMi4wOCwtMS45NHMtMi4wOC44NywtMi4wOCAxLjk0YzAgMS43MS42NiAzLjMxIDEuODcgNC41MS45NS45NCAxLjg2IDEuNDYgMy4yNyAxLjg1LjI3LjA3LjQyLjM1LjM1LjYxLC0uMDUuMjMsLS4yNi4zOCwtLjQ3LjM4eiIvPgorPC92ZWN0b3I+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX2NvZGVzLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2NfY29kZXMueG1sCmluZGV4IDBkZTcyMWE5Li5lYTFjNDY0IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX2NvZGVzLnhtbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX2NvZGVzLnhtbApAQCAtMSw0ICsxLDI0IEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPGJpdG1hcCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpzcmM9IkBkcmF3YWJsZS9pY19kb2NfY29kZXNfYWxwaGEiCi0gICAgYW5kcm9pZDp0aW50PSI/YW5kcm9pZDphdHRyL2NvbG9yQ29udHJvbE5vcm1hbCIgLz4KKzwhLS0KK0NvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzx2ZWN0b3IgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgICAgICBhbmRyb2lkOndpZHRoPSIyNGRwIgorICAgICAgICBhbmRyb2lkOmhlaWdodD0iMjRkcCIKKyAgICAgICAgYW5kcm9pZDp2aWV3cG9ydFdpZHRoPSIyNC4wIgorICAgICAgICBhbmRyb2lkOnZpZXdwb3J0SGVpZ2h0PSIyNC4wIj4KKyAgICA8cGF0aAorICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iI0ZGNzM3MzczIgorICAgICAgICBhbmRyb2lkOnBhdGhEYXRhPSJNOS40IDE2LjZMNC44IDEybDQuNiwtNC42TDggNmwtNiA2IDYgNiAxLjQsLTEuNHptNS4yIDBsNC42LC00LjYsLTQuNiwtNC42TDE2IDZsNiA2LC02IDYsLTEuNCwtMS40eiIvPgorPC92ZWN0b3I+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX2NvbXByZXNzZWQueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY19jb21wcmVzc2VkLnhtbAppbmRleCBhNDljZmE0Li5lMGViNjY5IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX2NvbXByZXNzZWQueG1sCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2NfY29tcHJlc3NlZC54bWwKQEAgLTEsNCArMSwyNCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxiaXRtYXAgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6c3JjPSJAZHJhd2FibGUvaWNfZG9jX2NvbXByZXNzZWRfYWxwaGEiCi0gICAgYW5kcm9pZDp0aW50PSI/YW5kcm9pZDphdHRyL2NvbG9yQ29udHJvbE5vcm1hbCIgLz4KKzwhLS0KK0NvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzx2ZWN0b3IgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgICAgICBhbmRyb2lkOndpZHRoPSIyNGRwIgorICAgICAgICBhbmRyb2lkOmhlaWdodD0iMjRkcCIKKyAgICAgICAgYW5kcm9pZDp2aWV3cG9ydFdpZHRoPSIyNC4wIgorICAgICAgICBhbmRyb2lkOnZpZXdwb3J0SGVpZ2h0PSIyNC4wIj4KKyAgICA8cGF0aAorICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iI0ZGNzM3MzczIgorICAgICAgICBhbmRyb2lkOnBhdGhEYXRhPSJNMTkgM0g1Yy0xLjEgMCwtMiAuOSwtMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMiwtLjkgMiwtMlY1YzAsLTEuMSwtLjksLTIsLTIsLTJ6bS01IDZoLTJ2MmgydjJoLTJ2LTJoLTJWOWgyVjdoLTJWNWgydjJoMnYyem0wIDhoLTJ2LTJoLTJ2LTJoMnYyaDJ2MnoiLz4KKzwvdmVjdG9yPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY19jb250YWN0LnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2NfY29udGFjdC54bWwKaW5kZXggYmY1NTBjYi4uYTc3Y2I2YiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY19jb250YWN0LnhtbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX2NvbnRhY3QueG1sCkBAIC0xLDUgKzEsMjQgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08Yml0bWFwIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOnNyYz0iQGRyYXdhYmxlL2ljX2RvY19jb250YWN0X2FtX2FscGhhIgotICAgIGFuZHJvaWQ6dGludD0iP2FuZHJvaWQ6YXR0ci9jb2xvckNvbnRyb2xOb3JtYWwiCi0gICAgYW5kcm9pZDphdXRvTWlycm9yZWQ9InRydWUiIC8+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8dmVjdG9yIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICAgICAgYW5kcm9pZDp3aWR0aD0iMjRkcCIKKyAgICAgICAgYW5kcm9pZDpoZWlnaHQ9IjI0ZHAiCisgICAgICAgIGFuZHJvaWQ6dmlld3BvcnRXaWR0aD0iMjQuMCIKKyAgICAgICAgYW5kcm9pZDp2aWV3cG9ydEhlaWdodD0iMjQuMCI+CisgICAgPHBhdGgKKyAgICAgICAgYW5kcm9pZDpmaWxsQ29sb3I9IiNGRjczNzM3MyIKKyAgICAgICAgYW5kcm9pZDpwYXRoRGF0YT0iTTE5IDNINWMtMS4xMSAwLC0yIC44OSwtMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDIsLS45IDIsLTJWNWMwLC0xLjExLC0uOSwtMiwtMiwtMnptLTcgM2MxLjY1IDAgMyAxLjM1IDMgMyAwIDEuNjYsLTEuMzUgMywtMyAzcy0zLC0xLjM0LC0zLC0zYzAsLTEuNjUgMS4zNSwtMyAzLC0zem02IDEySDZ2LTFjMCwtMiA0LC0zLjEgNiwtMy4xczYgMS4xIDYgMy4xdjF6Ii8+Cis8L3ZlY3Rvcj4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2NfZG9jdW1lbnQueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY19kb2N1bWVudC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkyNTFhZAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2NfZG9jdW1lbnQueG1sCkBAIC0wLDAgKzEsMjQgQEAKKzwhLS0KK0NvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzx2ZWN0b3IgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgICAgICBhbmRyb2lkOndpZHRoPSIyNGRwIgorICAgICAgICBhbmRyb2lkOmhlaWdodD0iMjRkcCIKKyAgICAgICAgYW5kcm9pZDp2aWV3cG9ydFdpZHRoPSIyNC4wIgorICAgICAgICBhbmRyb2lkOnZpZXdwb3J0SGVpZ2h0PSIyNC4wIj4KKyAgICA8cGF0aAorICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iI0ZGNDg4M0YzIgorICAgICAgICBhbmRyb2lkOnBhdGhEYXRhPSJNMTkgM0g1Yy0xLjEgMCwtMiAuOSwtMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMiwtLjkgMiwtMlY1YzAsLTEuMSwtLjksLTIsLTIsLTJ6bS0xLjk5IDZIN1Y3aDEwLjAxdjJ6bTAgNEg3di0yaDEwLjAxdjJ6bS0zIDRIN3YtMmg3LjAxdjJ6Ii8+Cis8L3ZlY3Rvcj4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2NfZXZlbnQueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY19ldmVudC54bWwKaW5kZXggMjVjZjBmMy4uMTEzZjA3OSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY19ldmVudC54bWwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY19ldmVudC54bWwKQEAgLTEsNSArMSwyNCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxiaXRtYXAgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6c3JjPSJAZHJhd2FibGUvaWNfZG9jX2V2ZW50X2FtX2FscGhhIgotICAgIGFuZHJvaWQ6dGludD0iP2FuZHJvaWQ6YXR0ci9jb2xvckNvbnRyb2xOb3JtYWwiCi0gICAgYW5kcm9pZDphdXRvTWlycm9yZWQ9InRydWUiIC8+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8dmVjdG9yIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICAgICAgYW5kcm9pZDp3aWR0aD0iMjRkcCIKKyAgICAgICAgYW5kcm9pZDpoZWlnaHQ9IjI0ZHAiCisgICAgICAgIGFuZHJvaWQ6dmlld3BvcnRXaWR0aD0iMjQuMCIKKyAgICAgICAgYW5kcm9pZDp2aWV3cG9ydEhlaWdodD0iMjQuMCI+CisgICAgPHBhdGgKKyAgICAgICAgYW5kcm9pZDpmaWxsQ29sb3I9IiNGRjczNzM3MyIKKyAgICAgICAgYW5kcm9pZDpwYXRoRGF0YT0iTTE3IDEyaC01djVoNXYtNXpNMTYgMXYySDhWMUg2djJINWMtMS4xMSAwLC0xLjk5LjksLTEuOTkgMkwzIDE5YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDIsLS45IDIsLTJWNWMwLC0xLjEsLS45LC0yLC0yLC0yaC0xVjFoLTJ6bTMgMThINVY4aDE0djExeiIvPgorPC92ZWN0b3I+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX2V4Y2VsLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2NfZXhjZWwueG1sCmluZGV4IDMzNTQ3MjUuLjNlZDI3ZTEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2NfZXhjZWwueG1sCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2NfZXhjZWwueG1sCkBAIC0xLDQgKzEsMjQgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08Yml0bWFwIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOnNyYz0iQGRyYXdhYmxlL2ljX2RvY19leGNlbF9hbHBoYSIKLSAgICBhbmRyb2lkOnRpbnQ9Ij9hbmRyb2lkOmF0dHIvY29sb3JDb250cm9sTm9ybWFsIiAvPgorPCEtLQorQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPHZlY3RvciB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgICAgIGFuZHJvaWQ6d2lkdGg9IjI0ZHAiCisgICAgICAgIGFuZHJvaWQ6aGVpZ2h0PSIyNGRwIgorICAgICAgICBhbmRyb2lkOnZpZXdwb3J0V2lkdGg9IjI0LjAiCisgICAgICAgIGFuZHJvaWQ6dmlld3BvcnRIZWlnaHQ9IjI0LjAiPgorICAgIDxwYXRoCisgICAgICAgIGFuZHJvaWQ6ZmlsbENvbG9yPSIjRkYxNkE3NjUiCisgICAgICAgIGFuZHJvaWQ6cGF0aERhdGE9Ik0xOSAzSDVjLTEuMSAwLC0yIC45LC0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLC0uOSAyLC0yVjVjMCwtMS4xLC0uOSwtMiwtMiwtMnptLTIuOCAxNGgtMkwxMiAxMy4yIDkuOCAxN2gtMmwzLjIsLTUsLTMuMiwtNWgybDIuMiAzLjhMMTQuMiA3aDJMMTMgMTJsMy4yIDV6Ii8+Cis8L3ZlY3Rvcj4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2NfZm9sZGVyLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2NfZm9sZGVyLnhtbAppbmRleCA3M2RlNjBlLi5kY2JjZTAxIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX2ZvbGRlci54bWwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY19mb2xkZXIueG1sCkBAIC0xLDQgKzEsMjQgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08Yml0bWFwIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOnNyYz0iQGRyYXdhYmxlL2ljX2RvY19mb2xkZXJfYWxwaGEiCi0gICAgYW5kcm9pZDp0aW50PSI/YW5kcm9pZDphdHRyL2NvbG9yQ29udHJvbE5vcm1hbCIgLz4KKzwhLS0KK0NvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzx2ZWN0b3IgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgICAgICBhbmRyb2lkOndpZHRoPSIyNGRwIgorICAgICAgICBhbmRyb2lkOmhlaWdodD0iMjRkcCIKKyAgICAgICAgYW5kcm9pZDp2aWV3cG9ydFdpZHRoPSIyNC4wIgorICAgICAgICBhbmRyb2lkOnZpZXdwb3J0SGVpZ2h0PSIyNC4wIj4KKyAgICA8cGF0aAorICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iI0ZGNzM3MzczIgorICAgICAgICBhbmRyb2lkOnBhdGhEYXRhPSJNMTAgNEg0Yy0xLjEgMCwtMS45OS45LC0xLjk5IDJMMiAxOGMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDIsLS45IDIsLTJWOGMwLC0xLjEsLS45LC0yLC0yLC0yaC04bC0yLC0yeiIvPgorPC92ZWN0b3I+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX2ZvbnQueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY19mb250LnhtbAppbmRleCBjNzRjYjljLi40YzEzZDcxIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX2ZvbnQueG1sCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2NfZm9udC54bWwKQEAgLTEsNCArMSwyNCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxiaXRtYXAgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6c3JjPSJAZHJhd2FibGUvaWNfZG9jX2ZvbnRfYWxwaGEiCi0gICAgYW5kcm9pZDp0aW50PSI/YW5kcm9pZDphdHRyL2NvbG9yQ29udHJvbE5vcm1hbCIgLz4KKzwhLS0KK0NvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzx2ZWN0b3IgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgICAgICBhbmRyb2lkOndpZHRoPSIyNGRwIgorICAgICAgICBhbmRyb2lkOmhlaWdodD0iMjRkcCIKKyAgICAgICAgYW5kcm9pZDp2aWV3cG9ydFdpZHRoPSIyNC4wIgorICAgICAgICBhbmRyb2lkOnZpZXdwb3J0SGVpZ2h0PSIyNC4wIj4KKyAgICA8cGF0aAorICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iI0ZGNzM3MzczIgorICAgICAgICBhbmRyb2lkOnBhdGhEYXRhPSJNOS45MyAxMy41aDQuMTRMMTIgNy45OHpNMjAgMkg0Yy0xLjEgMCwtMiAuOSwtMiAydjE2YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMiwtLjkgMiwtMlY0YzAsLTEuMSwtLjksLTIsLTIsLTJ6bS00LjA1IDE2LjVsLTEuMTQsLTNIOS4xN2wtMS4xMiAzSDUuOTZsNS4xMSwtMTNoMS44Nmw1LjExIDEzaC0yLjA5eiIvPgorPC92ZWN0b3I+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX2dlbmVyaWMueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY19nZW5lcmljLnhtbAppbmRleCBhNGVlMjlkLi4wMDZkZmJhIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX2dlbmVyaWMueG1sCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2NfZ2VuZXJpYy54bWwKQEAgLTEsNSArMSwyNCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxiaXRtYXAgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6c3JjPSJAZHJhd2FibGUvaWNfZG9jX2dlbmVyaWNfYW1fYWxwaGEiCi0gICAgYW5kcm9pZDp0aW50PSI/YW5kcm9pZDphdHRyL2NvbG9yQ29udHJvbE5vcm1hbCIKLSAgICBhbmRyb2lkOmF1dG9NaXJyb3JlZD0idHJ1ZSIgLz4KKzwhLS0KK0NvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzx2ZWN0b3IgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgICAgICBhbmRyb2lkOndpZHRoPSIyNGRwIgorICAgICAgICBhbmRyb2lkOmhlaWdodD0iMjRkcCIKKyAgICAgICAgYW5kcm9pZDp2aWV3cG9ydFdpZHRoPSIyNC4wIgorICAgICAgICBhbmRyb2lkOnZpZXdwb3J0SGVpZ2h0PSIyNC4wIj4KKyAgICA8cGF0aAorICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iI0ZGNzM3MzczIgorICAgICAgICBhbmRyb2lkOnBhdGhEYXRhPSJNNiAyYy0xLjEgMCwtMS45OS45LC0xLjk5IDJMNCAyMGMwIDEuMS44OSAyIDEuOTkgMkgxOGMxLjEgMCAyLC0uOSAyLC0yVjhsLTYsLTZINnptNyA3VjMuNUwxOC41IDlIMTN6Ii8+Cis8L3ZlY3Rvcj4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2NfaW1hZ2UueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY19pbWFnZS54bWwKaW5kZXggOWQ0YzM1OS4uMjM5NTNmNyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY19pbWFnZS54bWwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY19pbWFnZS54bWwKQEAgLTEsNCArMSwyNCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxiaXRtYXAgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6c3JjPSJAZHJhd2FibGUvaWNfZG9jX2ltYWdlX2FscGhhIgotICAgIGFuZHJvaWQ6dGludD0iP2FuZHJvaWQ6YXR0ci9jb2xvckNvbnRyb2xOb3JtYWwiIC8+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8dmVjdG9yIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICAgICAgYW5kcm9pZDp3aWR0aD0iMjRkcCIKKyAgICAgICAgYW5kcm9pZDpoZWlnaHQ9IjI0ZHAiCisgICAgICAgIGFuZHJvaWQ6dmlld3BvcnRXaWR0aD0iMjQuMCIKKyAgICAgICAgYW5kcm9pZDp2aWV3cG9ydEhlaWdodD0iMjQuMCI+CisgICAgPHBhdGgKKyAgICAgICAgYW5kcm9pZDpmaWxsQ29sb3I9IiNGRkRCNDQzNyIKKyAgICAgICAgYW5kcm9pZDpwYXRoRGF0YT0iTTIxIDE5VjVjMCwtMS4xLC0uOSwtMiwtMiwtMkg1Yy0xLjEgMCwtMiAuOSwtMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMiwtLjkgMiwtMnpNOC41IDEzLjVsMi41IDMuMDFMMTQuNSAxMmw0LjUgNkg1bDMuNSwtNC41eiIvPgorPC92ZWN0b3I+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX3BkZi54bWwgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX3BkZi54bWwKaW5kZXggNWMzNzQ5OC4uYjJkMDE5MyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY19wZGYueG1sCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2NfcGRmLnhtbApAQCAtMSw0ICsxLDI0IEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPGJpdG1hcCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpzcmM9IkBkcmF3YWJsZS9pY19kb2NfcGRmX2FscGhhIgotICAgIGFuZHJvaWQ6dGludD0iP2FuZHJvaWQ6YXR0ci9jb2xvckNvbnRyb2xOb3JtYWwiIC8+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8dmVjdG9yIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICAgICAgYW5kcm9pZDp3aWR0aD0iMjRkcCIKKyAgICAgICAgYW5kcm9pZDpoZWlnaHQ9IjI0ZHAiCisgICAgICAgIGFuZHJvaWQ6dmlld3BvcnRXaWR0aD0iMjQuMCIKKyAgICAgICAgYW5kcm9pZDp2aWV3cG9ydEhlaWdodD0iMjQuMCI+CisgICAgPHBhdGgKKyAgICAgICAgYW5kcm9pZDpmaWxsQ29sb3I9IiNGRkRCNDQzNyIKKyAgICAgICAgYW5kcm9pZDpwYXRoRGF0YT0iTTcgMTEuNWgxdi0xSDd2MXpNMTkgM0g1Yy0xLjEgMCwtMiAuOSwtMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMiwtLjkgMiwtMlY1YzAsLTEuMSwtLjksLTIsLTIsLTJ6bS05LjUgOC41YzAgLjgzLC0uNjcgMS41LC0xLjUgMS41SDd2Mkg1LjVWOUg4Yy44MyAwIDEuNS42NyAxLjUgMS41djF6bTEwLC0xSDE3djFoMS41VjEzSDE3djJoLTEuNVY5aDR2MS41em0tNSAzYzAgLjgzLC0uNjcgMS41LC0xLjUgMS41aC0yLjVWOUgxM2MuODMgMCAxLjUuNjcgMS41IDEuNXYzem0tMi41IDBoMXYtM2gtMXYzeiIvPgorPC92ZWN0b3I+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX3Bvd2VycG9pbnQueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY19wb3dlcnBvaW50LnhtbAppbmRleCBmMGE2YzM5Li5hYTViZmM4IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX3Bvd2VycG9pbnQueG1sCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2NfcG93ZXJwb2ludC54bWwKQEAgLTEsNCArMSwyNCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxiaXRtYXAgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6c3JjPSJAZHJhd2FibGUvaWNfZG9jX3Bvd2VycG9pbnRfYWxwaGEiCi0gICAgYW5kcm9pZDp0aW50PSI/YW5kcm9pZDphdHRyL2NvbG9yQ29udHJvbE5vcm1hbCIgLz4KKzwhLS0KK0NvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzx2ZWN0b3IgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgICAgICBhbmRyb2lkOndpZHRoPSIyNGRwIgorICAgICAgICBhbmRyb2lkOmhlaWdodD0iMjRkcCIKKyAgICAgICAgYW5kcm9pZDp2aWV3cG9ydFdpZHRoPSIyNC4wIgorICAgICAgICBhbmRyb2lkOnZpZXdwb3J0SGVpZ2h0PSIyNC4wIj4KKyAgICA8cGF0aAorICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iI0ZGRkY3NTM3IgorICAgICAgICBhbmRyb2lkOnBhdGhEYXRhPSJNMTkgM0g1Yy0xLjEgMCwtMiAuOSwtMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMiwtLjkgMiwtMlY1YzAsLTEuMSwtLjksLTIsLTIsLTJ6TTkuOCAxMy40VjE3SDhWN2g0LjNjMS41MyAwIDIuMTUuMyAyLjguODkuNjUuNTkuOSAxLjM3LjkgMi4zNCAwIDEuMDIsLS4yNiAxLjgsLS45IDIuMzVzLTEuMy44MiwtMi44LjgySDkuOHptMCwtMS40VjguNGgyLjNjLjY2IDAgMS4xNy4yNSAxLjUuNi4zMy4zNS41LjcyLjUgMS4yNSAwIC41NSwtLjE4Ljk1LC0uNSAxLjI1LC0uMzIuMzEsLS43LjUsLTEuMzguNUg5Ljh6Ii8+Cis8L3ZlY3Rvcj4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2NfcHJlc2VudGF0aW9uLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2NfcHJlc2VudGF0aW9uLnhtbAppbmRleCBhMTRmODY2Li43OTM3YmMxIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX3ByZXNlbnRhdGlvbi54bWwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY19wcmVzZW50YXRpb24ueG1sCkBAIC0xLDQgKzEsMjQgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08Yml0bWFwIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOnNyYz0iQGRyYXdhYmxlL2ljX2RvY19wcmVzZW50YXRpb25fYWxwaGEiCi0gICAgYW5kcm9pZDp0aW50PSI/YW5kcm9pZDphdHRyL2NvbG9yQ29udHJvbE5vcm1hbCIgLz4KKzwhLS0KK0NvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzx2ZWN0b3IgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgICAgICBhbmRyb2lkOndpZHRoPSIyNGRwIgorICAgICAgICBhbmRyb2lkOmhlaWdodD0iMjRkcCIKKyAgICAgICAgYW5kcm9pZDp2aWV3cG9ydFdpZHRoPSIyNC4wIgorICAgICAgICBhbmRyb2lkOnZpZXdwb3J0SGVpZ2h0PSIyNC4wIj4KKyAgICA8cGF0aAorICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iI0ZGRjRCNDAwIgorICAgICAgICBhbmRyb2lkOnBhdGhEYXRhPSJNMTkgM0g1Yy0xLjEgMCwtMS45OS45LC0xLjk5IDJ2MTRjMCAxLjEuODkgMiAxLjk5IDJoMTRjMS4xIDAgMiwtLjkgMiwtMlY1YzAsLTEuMSwtLjksLTIsLTIsLTJ6bTAgMTNINVY4aDE0djh6Ii8+Cis8L3ZlY3Rvcj4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2Nfc3ByZWFkc2hlZXQueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY19zcHJlYWRzaGVldC54bWwKaW5kZXggNDBmMjUxNS4uMTY2M2MwYSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY19zcHJlYWRzaGVldC54bWwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY19zcHJlYWRzaGVldC54bWwKQEAgLTEsNSArMSwyNCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxiaXRtYXAgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6c3JjPSJAZHJhd2FibGUvaWNfZG9jX3NwcmVhZHNoZWV0X2FtX2FscGhhIgotICAgIGFuZHJvaWQ6dGludD0iP2FuZHJvaWQ6YXR0ci9jb2xvckNvbnRyb2xOb3JtYWwiCi0gICAgYW5kcm9pZDphdXRvTWlycm9yZWQ9InRydWUiIC8+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8dmVjdG9yIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICAgICAgYW5kcm9pZDp3aWR0aD0iMjRkcCIKKyAgICAgICAgYW5kcm9pZDpoZWlnaHQ9IjI0ZHAiCisgICAgICAgIGFuZHJvaWQ6dmlld3BvcnRXaWR0aD0iMjQuMCIKKyAgICAgICAgYW5kcm9pZDp2aWV3cG9ydEhlaWdodD0iMjQuMCI+CisgICAgPHBhdGgKKyAgICAgICAgYW5kcm9pZDpmaWxsQ29sb3I9IiNGRjE2QTc2NSIKKyAgICAgICAgYW5kcm9pZDpwYXRoRGF0YT0iTTE5IDNINWMtMS4xIDAsLTEuOTkuOSwtMS45OSAyTDMgOHYxMWMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDIsLS45IDIsLTJWNWMwLC0xLjEsLS45LC0yLC0yLC0yem0wIDhoLTh2OEg5di04SDVWOWg0VjVoMnY0aDh2MnoiLz4KKzwvdmVjdG9yPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY190ZXh0LnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2NfdGV4dC54bWwKaW5kZXggZmZhOWU3MC4uN2ZjMDRlOCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY190ZXh0LnhtbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX3RleHQueG1sCkBAIC0xLDUgKzEsMjQgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08Yml0bWFwIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOnNyYz0iQGRyYXdhYmxlL2ljX2RvY190ZXh0X2FtX2FscGhhIgotICAgIGFuZHJvaWQ6dGludD0iP2FuZHJvaWQ6YXR0ci9jb2xvckNvbnRyb2xOb3JtYWwiCi0gICAgYW5kcm9pZDphdXRvTWlycm9yZWQ9InRydWUiIC8+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8dmVjdG9yIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICAgICAgYW5kcm9pZDp3aWR0aD0iMjRkcCIKKyAgICAgICAgYW5kcm9pZDpoZWlnaHQ9IjI0ZHAiCisgICAgICAgIGFuZHJvaWQ6dmlld3BvcnRXaWR0aD0iMjQuMCIKKyAgICAgICAgYW5kcm9pZDp2aWV3cG9ydEhlaWdodD0iMjQuMCI+CisgICAgPHBhdGgKKyAgICAgICAgYW5kcm9pZDpmaWxsQ29sb3I9IiNGRjczNzM3MyIKKyAgICAgICAgYW5kcm9pZDpwYXRoRGF0YT0iTTE0IDJINmMtMS4xIDAsLTEuOTkuOSwtMS45OSAyTDQgMjBjMCAxLjEuODkgMiAxLjk5IDJIMThjMS4xIDAgMiwtLjkgMiwtMlY4bC02LC02em0yIDE2SDh2LTJoOHYyem0wLC00SDh2LTJoOHYyem0tMywtNVYzLjVMMTguNSA5SDEzeiIvPgorPC92ZWN0b3I+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX3ZpZGVvLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2NfdmlkZW8ueG1sCmluZGV4IDJkMDQ4YzIuLmFkNGRhZTggMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2NfdmlkZW8ueG1sCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2NfdmlkZW8ueG1sCkBAIC0xLDUgKzEsMjQgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08Yml0bWFwIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOnNyYz0iQGRyYXdhYmxlL2ljX2RvY192aWRlb19hbV9hbHBoYSIKLSAgICBhbmRyb2lkOnRpbnQ9Ij9hbmRyb2lkOmF0dHIvY29sb3JDb250cm9sTm9ybWFsIgotICAgIGFuZHJvaWQ6YXV0b01pcnJvcmVkPSJ0cnVlIiAvPgorPCEtLQorQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPHZlY3RvciB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgICAgIGFuZHJvaWQ6d2lkdGg9IjI0ZHAiCisgICAgICAgIGFuZHJvaWQ6aGVpZ2h0PSIyNGRwIgorICAgICAgICBhbmRyb2lkOnZpZXdwb3J0V2lkdGg9IjI0LjAiCisgICAgICAgIGFuZHJvaWQ6dmlld3BvcnRIZWlnaHQ9IjI0LjAiPgorICAgIDxwYXRoCisgICAgICAgIGFuZHJvaWQ6ZmlsbENvbG9yPSIjRkZEQjQ0MzciCisgICAgICAgIGFuZHJvaWQ6cGF0aERhdGE9Ik0xOCA0bDIgNGgtM2wtMiwtNGgtMmwyIDRoLTNsLTIsLTRIOGwyIDRIN0w1IDRINGMtMS4xIDAsLTEuOTkuOSwtMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLC0uOSAyLC0yVjRoLTR6Ii8+Cis8L3ZlY3Rvcj4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2Nfd29yZC54bWwgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX3dvcmQueG1sCmluZGV4IGFmY2M1MzMuLjdhM2EwZWMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2Nfd29yZC54bWwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY193b3JkLnhtbApAQCAtMSw0ICsxLDI0IEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPGJpdG1hcCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpzcmM9IkBkcmF3YWJsZS9pY19kb2Nfd29yZF9hbHBoYSIKLSAgICBhbmRyb2lkOnRpbnQ9Ij9hbmRyb2lkOmF0dHIvY29sb3JDb250cm9sTm9ybWFsIiAvPgorPCEtLQorQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPHZlY3RvciB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgICAgIGFuZHJvaWQ6d2lkdGg9IjI0ZHAiCisgICAgICAgIGFuZHJvaWQ6aGVpZ2h0PSIyNGRwIgorICAgICAgICBhbmRyb2lkOnZpZXdwb3J0V2lkdGg9IjI0LjAiCisgICAgICAgIGFuZHJvaWQ6dmlld3BvcnRIZWlnaHQ9IjI0LjAiPgorICAgIDxwYXRoCisgICAgICAgIGFuZHJvaWQ6ZmlsbENvbG9yPSIjRkY0ODgzRjMiCisgICAgICAgIGFuZHJvaWQ6cGF0aERhdGE9Ik0xOSAzSDVjLTEuMSAwLC0yIC45LC0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLC0uOSAyLC0yVjVjMCwtMS4xLC0uOSwtMiwtMiwtMnptLTMuNSAxNEgxNGwtMiwtNy41LC0yIDcuNUg4LjVMNi4xIDdoMS43bDEuNTQgNy41MUwxMS4zIDdoMS40bDEuOTcgNy41MUwxNi4yIDdoMS43bC0yLjQgMTB6Ii8+Cis8L3ZlY3Rvcj4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19yb290X3NkY2FyZC54bWwgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfcm9vdF9zZGNhcmQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyN2NmYTgxZC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfcm9vdF9zZGNhcmQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPGJpdG1hcCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpzcmM9IkBkcmF3YWJsZS9pY19yb290X3NkY2FyZF9hbHBoYSIKLSAgICBhbmRyb2lkOnRpbnQ9Ij9hbmRyb2lkOmF0dHIvY29sb3JDb250cm9sTm9ybWFsIiAvPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX3Jvb3Rfc21hcnRwaG9uZS54bWwgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfcm9vdF9zbWFydHBob25lLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDIxYjE2Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX3Jvb3Rfc21hcnRwaG9uZS54bWwKQEAgLTAsMCArMSwyNCBAQAorPCEtLQorQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPHZlY3RvciB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgICAgIGFuZHJvaWQ6d2lkdGg9IjI0ZHAiCisgICAgICAgIGFuZHJvaWQ6aGVpZ2h0PSIyNGRwIgorICAgICAgICBhbmRyb2lkOnZpZXdwb3J0V2lkdGg9IjI0LjAiCisgICAgICAgIGFuZHJvaWQ6dmlld3BvcnRIZWlnaHQ9IjI0LjAiPgorICAgIDxwYXRoCisgICAgICAgIGFuZHJvaWQ6ZmlsbENvbG9yPSIjRkYwMDAwMDAiCisgICAgICAgIGFuZHJvaWQ6cGF0aERhdGE9Ik0xNyAxLjAxTDcgMWMtMS4xIDAsLTIgLjksLTIgMnYxOGMwIDEuMS45IDIgMiAyaDEwYzEuMSAwIDIsLS45IDIsLTJWM2MwLC0xLjEsLS45LC0xLjk5LC0yLC0xLjk5ek0xNyAxOUg3VjVoMTB2MTR6Ii8+Cis8L3ZlY3Rvcj4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9sYXlvdXQvaXRlbV9kaXJfZ3JpZC54bWwgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvbGF5b3V0L2l0ZW1fZGlyX2dyaWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxN2I0YzgKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvbGF5b3V0L2l0ZW1fZGlyX2dyaWQueG1sCkBAIC0wLDAgKzEsNjIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IS0tIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CisKKzxGcmFtZUxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9tYXJnaW49IkBkaW1lbi9ncmlkX2l0ZW1fbWFyZ2luIgorICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGNvbG9yL2l0ZW1fZG9jX2JhY2tncm91bmQiCisgICAgYW5kcm9pZDplbGV2YXRpb249IjVkcCIKKyAgICBhbmRyb2lkOmZvY3VzYWJsZT0idHJ1ZSI+CisKKyAgICA8TGluZWFyTGF5b3V0CisgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCisgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgorICAgICAgYW5kcm9pZDpwYWRkaW5nVG9wPSIxNmRwIgorICAgICAgYW5kcm9pZDpwYWRkaW5nQm90dG9tPSIxNmRwIgorICAgICAgYW5kcm9pZDpwYWRkaW5nTGVmdD0iMTJkcCIKKyAgICAgIGFuZHJvaWQ6cGFkZGluZ1JpZ2h0PSIxMmRwIj4KKworICAgICAgICA8SW1hZ2VWaWV3CisgICAgICAgICAgICBhbmRyb2lkOnNyYz0iQGRyYXdhYmxlL2ljX2RvY19mb2xkZXIiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5FbmQ9IjhkcCIKKyAgICAgICAgICAgIGFuZHJvaWQ6c2NhbGVUeXBlPSJjZW50ZXJJbnNpZGUiCisgICAgICAgICAgICBhbmRyb2lkOmNvbnRlbnREZXNjcmlwdGlvbj0iQG51bGwiLz4KKworICAgICAgICA8VGV4dFZpZXcKKyAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkBhbmRyb2lkOmlkL3RpdGxlIgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDpzaW5nbGVMaW5lPSJ0cnVlIgorICAgICAgICAgICAgYW5kcm9pZDplbGxpcHNpemU9Im1pZGRsZSIKKyAgICAgICAgICAgIGFuZHJvaWQ6dGV4dEFsaWdubWVudD0idmlld1N0YXJ0IgorICAgICAgICAgICAgYW5kcm9pZDp0ZXh0QXBwZWFyYW5jZT0iQGFuZHJvaWQ6c3R5bGUvVGV4dEFwcGVhcmFuY2UuTWF0ZXJpYWwuU3ViaGVhZCIKKyAgICAgICAgICAgIGFuZHJvaWQ6dGV4dENvbG9yPSJAKmFuZHJvaWQ6Y29sb3IvcHJpbWFyeV90ZXh0X2RlZmF1bHRfbWF0ZXJpYWxfbGlnaHQiIC8+CisKKyAgICA8L0xpbmVhckxheW91dD4KKworICAgIDwhLS0gQW4gb3ZlcmxheSB0aGF0IGRyYXdzIHRoZSBpdGVtIGJvcmRlciB3aGVuIGl0IGlzIGZvY3VzZWQuIC0tPgorICAgIDxWaWV3CisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmNvbnRlbnREZXNjcmlwdGlvbj0iQG51bGwiCisgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGRyYXdhYmxlL2l0ZW1fZG9jX2dyaWRfYm9yZGVyIgorICAgICAgICBhbmRyb2lkOmR1cGxpY2F0ZVBhcmVudFN0YXRlPSJ0cnVlIiAvPgorCis8L0ZyYW1lTGF5b3V0PgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2xheW91dC9pdGVtX2RvY19ncmlkLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9sYXlvdXQvaXRlbV9kb2NfZ3JpZC54bWwKaW5kZXggZGNkNWNmZC4uM2M3OTZiZCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2xheW91dC9pdGVtX2RvY19ncmlkLnhtbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvbGF5b3V0L2l0ZW1fZG9jX2dyaWQueG1sCkBAIC0xOSw2ICsxOSw3IEBACiAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luPSJAZGltZW4vZ3JpZF9pdGVtX21hcmdpbiIKICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBjb2xvci9pdGVtX2RvY19iYWNrZ3JvdW5kIgorICAgIGFuZHJvaWQ6ZWxldmF0aW9uPSI1ZHAiCiAgICAgYW5kcm9pZDpmb2N1c2FibGU9InRydWUiPgogCiAgICAgPCEtLSBNYWluIGl0ZW0gdGh1bWJuYWlsLiAgQ29tcHJpc2VkIG9mIHR3byBvdmVybGFwcGluZyBpbWFnZXMsIHRoZQpAQCAtMzksOSArNDAsMTAgQEAKIAogICAgICAgICA8Y29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuR3JpZEl0ZW1UaHVtYm5haWwKICAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvaWNvbl9taW1lIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgYW5kcm9pZDpzY2FsZVR5cGU9ImNlbnRlckluc2lkZSIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJAZGltZW4vaWNvbl9zaXplIgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJAZGltZW4vaWNvbl9zaXplIgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfZ3Jhdml0eT0iY2VudGVyIgorICAgICAgICAgICAgYW5kcm9pZDpzY2FsZVR5cGU9ImZpdENlbnRlciIKICAgICAgICAgICAgIGFuZHJvaWQ6Y29udGVudERlc2NyaXB0aW9uPSJAbnVsbCIgLz4KIAogICAgIDwvRnJhbWVMYXlvdXQ+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLW1rLXJNSy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtbWstck1LL3N0cmluZ3MueG1sCmluZGV4IDJkOGJlMWIuLjUxY2I3NzQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtbWstck1LL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtbWstck1LL3N0cmluZ3MueG1sCkBAIC0yNiw3ICsyNiw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJtZW51X2xpc3QiIG1zZ2lkPSI3Mjc5Mjg1OTM5ODkyNDE3Mjc5Ij4i0J/RgNC40LrQsNC3INC90LAg0YHQv9C40YHQvtC6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zb3J0IiBtc2dpZD0iNzY3Nzc0MDQwNzE1ODQxNDQ1MiI+ItCf0L7QtNGA0LXQtNC4INC/0L4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZW51X3NlYXJjaCIgbXNnaWQ9IjM4MTY3MTIwODQ1MDI4NTY5NzQiPiLQn9GA0LXQsdCw0YDQsNGYIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZXR0aW5ncyIgbXNnaWQ9IjYwMDgwMzMxNDg5NDg0Mjg4MjMiPiLQn9C+0LTQtdGB0YPQstCw0ZrQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2V0dGluZ3MiIG1zZ2lkPSI2MDA4MDMzMTQ4OTQ4NDI4ODIzIj4i0J/QvtGB0YLQsNCy0LrQuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lbnVfb3BlbiIgbXNnaWQ9IjQzMjkyMjk1NzI3NDkyMDkwMyI+ItCe0YLQstC+0YDQuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2F2ZSIgbXNnaWQ9IjIzOTQ3NDMzMzc2ODQ0MjYzMzgiPiLQl9Cw0YfRg9Cy0LDRmCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2hhcmUiIG1zZ2lkPSIzMDc1MTQ5OTgzOTc5NjI4MTQ2Ij4i0KHQv9C+0LTQtdC70LgiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLXN3L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1zdy9zdHJpbmdzLnhtbAppbmRleCBiNTIyZTBhLi5jMzAzZTBjIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLXN3L3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtc3cvc3RyaW5ncy54bWwKQEAgLTk3LDggKzk3LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImNvcHlfZmFpbHVyZV9hbGVydF9jb250ZW50IiBtc2dpZD0iMzcxNTU3NTAwMDI5NzcwOTA4MiI+IkZhaWxpIGhpemkgaGF6aWt1bmFraWxpd2E6IDx4bGlmZjpnIGlkPSJMSVNUIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1vdmVfZmFpbHVyZV9hbGVydF9jb250ZW50IiBtc2dpZD0iNzE1MTE0MDI3OTAyMDQ4MTE4MCI+IkZhaWxpIGhpemkgaGF6aWt1aGFtaXNod2E6IDx4bGlmZjpnIGlkPSJMSVNUIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJjbGlwYm9hcmRfZmlsZXNfY2xpcHBlZCIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9Ijg1NTQ1OTAxNzUzNzA1ODUzOSI+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPkFsaW5ha2lsaSBmYWlsaSA8eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkZDwveGxpZmY6Zz4ga3dlbnllIHViYW9rbGlwdS48L2l0ZW0+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj5BbGluYWtpbGkgZmFpbGkgPHhsaWZmOmcgaWQ9IkNPVU5UXzAiPiUxJGQ8L3hsaWZmOmc+IGt3ZW55ZSB1YmFva2xpcHUuPC9pdGVtPgorICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5BbGluYWtpbGkgZmFpbGkgPHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJGQ8L3hsaWZmOmc+IGt3ZW55ZSB1YmFvIHdhIGt1bmFraWxpLjwvaXRlbT4KKyAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPkFsaW5ha2lsaSBmYWlsaSA8eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkZDwveGxpZmY6Zz4ga3dlbnllIHViYW8gd2Ega3VuYWtpbGkuPC9pdGVtPgogICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImNsaXBib2FyZF9maWxlc19jYW5ub3RfcGFzdGUiIG1zZ2lkPSIyODc4MzI0ODI1NjAyMzI1NzA2Ij4iSGFpd2V6aSBrdWJhbmRpa2EgZmFpbGkgemlsaXpvY2hhZ3VsaXdhIGthdGlrYSBlbmVvIGhpbGkuIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLXN3NzIwZHAvZGltZW5zLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtc3c3MjBkcC9kaW1lbnMueG1sCmluZGV4IDgzY2ViNTUuLjI0ODhmYTIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtc3c3MjBkcC9kaW1lbnMueG1sCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtc3c3MjBkcC9kaW1lbnMueG1sCkBAIC0xOCw1ICsxOCw0IEBACiAgICAgPGRpbWVuIG5hbWU9ImdyaWRfcGFkZGluZ19ob3JpeiI+MTZkcDwvZGltZW4+CiAgICAgPGRpbWVuIG5hbWU9ImdyaWRfcGFkZGluZ192ZXJ0Ij4xNmRwPC9kaW1lbj4KIAotICAgIDxkaW1lbiBuYW1lPSJncmlkX2l0ZW1fbWFyZ2luIj44ZHA8L2RpbWVuPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvQmFzZUFjdGl2aXR5LmphdmEgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvQmFzZUFjdGl2aXR5LmphdmEKaW5kZXggNWNiM2IwZC4uOWMwYTA0YyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL0Jhc2VBY3Rpdml0eS5qYXZhCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9CYXNlQWN0aXZpdHkuamF2YQpAQCAtNzU1LDExICs3NTUsMTkgQEAKICAgICAgICAgICogICAgIHNlYXJjaCBjdXJyZW50bHkuCiAgICAgICAgICAqLwogICAgICAgICBib29sZWFuIGNhbmNlbFNlYXJjaCgpIHsKKyAgICAgICAgICAgIGJvb2xlYW4gY29sbGFwc2VkID0gZmFsc2U7CisgICAgICAgICAgICBib29sZWFuIGNsb3NlZCA9IGZhbHNlOworCiAgICAgICAgICAgICBpZiAobUFjdGlvbkJhci5oYXNFeHBhbmRlZEFjdGlvblZpZXcoKSkgewogICAgICAgICAgICAgICAgIG1BY3Rpb25CYXIuY29sbGFwc2VBY3Rpb25WaWV3KCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgY29sbGFwc2VkID0gdHJ1ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgaWYgKGlzRXhwYW5kZWQoKSB8fCBpc1NlYXJjaGluZygpKSB7CisgICAgICAgICAgICAgICAgb25DbG9zZSgpOworICAgICAgICAgICAgICAgIGNsb3NlZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gY29sbGFwc2VkIHx8IGNsb3NlZDsKICAgICAgICAgfQogCiAgICAgICAgIGJvb2xlYW4gaXNTZWFyY2hpbmcoKSB7CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvRGlyZWN0b3J5TG9hZGVyLmphdmEgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvRGlyZWN0b3J5TG9hZGVyLmphdmEKaW5kZXggNGVhY2VlNS4uNjcxOWIyMyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL0RpcmVjdG9yeUxvYWRlci5qYXZhCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9EaXJlY3RvcnlMb2FkZXIuamF2YQpAQCAtMTE0LDExICsxMTQsNyBAQAogICAgICAgICBpZiAodXNlck1vZGUgIT0gU3RhdGUuTU9ERV9VTktOT1dOKSB7CiAgICAgICAgICAgICByZXN1bHQubW9kZSA9IHVzZXJNb2RlOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKChtRG9jLmZsYWdzICYgRG9jdW1lbnQuRkxBR19ESVJfUFJFRkVSU19HUklEKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0Lm1vZGUgPSBTdGF0ZS5NT0RFX0dSSUQ7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJlc3VsdC5tb2RlID0gU3RhdGUuTU9ERV9MSVNUOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVzdWx0Lm1vZGUgPSBTdGF0ZS5NT0RFX0dSSUQ7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAobVVzZXJTb3J0T3JkZXIgIT0gU3RhdGUuU09SVF9PUkRFUl9VTktOT1dOKSB7CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvRmlsZXNBY3Rpdml0eS5qYXZhIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL0ZpbGVzQWN0aXZpdHkuamF2YQppbmRleCBkZDhjY2Y5Li5lMzA4ZjNmIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvRmlsZXNBY3Rpdml0eS5qYXZhCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9GaWxlc0FjdGl2aXR5LmphdmEKQEAgLTg5LDUzICs4OSw1MSBAQAogCiAgICAgICAgIFJvb3RzRnJhZ21lbnQuc2hvdyhnZXRGcmFnbWVudE1hbmFnZXIoKSwgbnVsbCk7CiAKLSAgICAgICAgaWYgKG1TdGF0ZS5yZXN0b3JlZCkgewotICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJSZXN0b3JlZCBpbnN0YW5jZSBmb3IgdXJpOiAiICsgZ2V0SW50ZW50KCkuZ2V0RGF0YSgpKTsKLSAgICAgICAgICAgIG9uQ3VycmVudERpcmVjdG9yeUNoYW5nZWQoQU5JTV9OT05FKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEludGVudCBpbnRlbnQgPSBnZXRJbnRlbnQoKTsKLSAgICAgICAgICAgIFVyaSB1cmkgPSBpbnRlbnQuZ2V0RGF0YSgpOworICAgICAgICBmaW5hbCBJbnRlbnQgaW50ZW50ID0gZ2V0SW50ZW50KCk7CisgICAgICAgIGZpbmFsIFVyaSB1cmkgPSBpbnRlbnQuZ2V0RGF0YSgpOwogCi0gICAgICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgIkNyZWF0aW5nIG5ldyBpbnN0YW5jZSBmb3IgdXJpOiAiICsgdXJpKTsKKyAgICAgICAgaWYgKG1TdGF0ZS5yZXN0b3JlZCkgeworICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJTdGFjayBhbHJlYWR5IHJlc29sdmVkIGZvciB1cmk6ICIgKyBpbnRlbnQuZ2V0RGF0YSgpKTsKKyAgICAgICAgICAgIG9uQ3VycmVudERpcmVjdG9yeUNoYW5nZWQoQU5JTV9OT05FKTsKKyAgICAgICAgfSBlbHNlIGlmICghbVN0YXRlLnN0YWNrLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgLy8gSWYgYSBub24tZW1wdHkgc3RhY2sgaXMgcHJlc2VudCBpbiBvdXIgc3RhdGUgaXQgd2FzIHJlYWQgKHByZXN1bWFibHkpCiAgICAgICAgICAgICAvLyBmcm9tIEVYVFJBX1NUQUNLIGludGVudCBleHRyYS4gSW4gdGhpcyBjYXNlLCB3ZSdsbCBza2lwIG90aGVyIG1lYW5zIG9mCiAgICAgICAgICAgICAvLyBsb2FkaW5nIG9yIHJlc3RvcmluZyB0aGUgc3RhY2suCi0gICAgICAgICAgICBpZiAoIW1TdGF0ZS5zdGFjay5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgIkxhdW5jaGluZyB3aXRoIG5vbi1lbXB0eSBzdGFjay4iKTsKLSAgICAgICAgICAgICAgICAvLyBXaGVuIHJlc3RvcmluZyBmcm9tIGEgc3RhY2ssIGlmIGEgVVJJIGlzIHByZXNlbnQsIGl0IHNob3VsZCBvbmx5IGV2ZXIKLSAgICAgICAgICAgICAgICAvLyBiZSBhIGxhdW5jaCBVUkkuIExhdW5jaCBVUklzIHN1cHBvcnQgc2Vuc2libGUgYWN0aXZpdHkgbWFuYWdlbWVudCwgYnV0Ci0gICAgICAgICAgICAgICAgLy8gZG9uJ3Qgc3BlY2lmeSBhIHJlYWwgY29udGVudCB0YXJnZXQuCi0gICAgICAgICAgICAgICAgY2hlY2tTdGF0ZSh1cmkgPT0gbnVsbCB8fCBMYXVuY2hlckFjdGl2aXR5LmlzTGF1bmNoVXJpKHVyaSkpOwotICAgICAgICAgICAgICAgIG9uQ3VycmVudERpcmVjdG9yeUNoYW5nZWQoQU5JTV9OT05FKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoRG9jdW1lbnRzQ29udHJhY3QuaXNSb290VXJpKHRoaXMsIHVyaSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgIkxhdW5jaGluZyB3aXRoIHJvb3QgVVJJLiIpOwotICAgICAgICAgICAgICAgIC8vIElmIHdlJ3ZlIGdvdCBhIHNwZWNpZmljIHJvb3QgdG8gZGlzcGxheSwgcmVzdG9yZSB0aGF0IHJvb3QgdXNpbmcgYSBkZWRpY2F0ZWQKLSAgICAgICAgICAgICAgICAvLyBhdXRob3JpdHkuIFRoYXQgd2F5IGEgbWlzYmVoYXZpbmcgcHJvdmlkZXIgd29uJ3QgcmVzdWx0IGluIGFuIEFOUi4KLSAgICAgICAgICAgICAgICBuZXcgUmVzdG9yZVJvb3RUYXNrKHVyaSkuZXhlY3V0ZU9uRXhlY3V0b3IoCi0gICAgICAgICAgICAgICAgICAgICAgICBQcm92aWRlckV4ZWN1dG9yLmZvckF1dGhvcml0eSh1cmkuZ2V0QXV0aG9yaXR5KCkpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJMYXVuY2hpbmcgaW50byBIb21lIGRpcmVjdG9yeS4iKTsKLSAgICAgICAgICAgICAgICAvLyBJZiBhbGwgZWxzZSBmYWlscywgdHJ5IHRvIGxvYWQgIkhvbWUiIGRpcmVjdG9yeS4KLSAgICAgICAgICAgICAgICB1cmkgPSBEb2N1bWVudHNDb250cmFjdC5idWlsZEhvbWVVcmkoKTsKLSAgICAgICAgICAgICAgICBuZXcgUmVzdG9yZVJvb3RUYXNrKHVyaSkuZXhlY3V0ZU9uRXhlY3V0b3IoCi0gICAgICAgICAgICAgICAgICAgICAgICBQcm92aWRlckV4ZWN1dG9yLmZvckF1dGhvcml0eSh1cmkuZ2V0QXV0aG9yaXR5KCkpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBXaGVuIHJlc3RvcmluZyBmcm9tIGEgc3RhY2ssIGlmIGEgVVJJIGlzIHByZXNlbnQsIGl0IHNob3VsZCBvbmx5IGV2ZXIKKyAgICAgICAgICAgIC8vIGJlIGEgbGF1bmNoIFVSSS4gTGF1bmNoIFVSSXMgc3VwcG9ydCBzZW5zaWJsZSBhY3Rpdml0eSBtYW5hZ2VtZW50LCBidXQKKyAgICAgICAgICAgIC8vIGRvbid0IHNwZWNpZnkgYSByZWFsIGNvbnRlbnQgdGFyZ2V0LgorICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJMYXVuY2hpbmcgd2l0aCBub24tZW1wdHkgc3RhY2suIik7CisgICAgICAgICAgICBjaGVja1N0YXRlKHVyaSA9PSBudWxsIHx8IExhdW5jaGVyQWN0aXZpdHkuaXNMYXVuY2hVcmkodXJpKSk7CisgICAgICAgICAgICBvbkN1cnJlbnREaXJlY3RvcnlDaGFuZ2VkKEFOSU1fTk9ORSk7CisgICAgICAgIH0gZWxzZSBpZiAoRG9jdW1lbnRzQ29udHJhY3QuaXNSb290VXJpKHRoaXMsIHVyaSkpIHsKKyAgICAgICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLCAiTGF1bmNoaW5nIHdpdGggcm9vdCBVUkkuIik7CisgICAgICAgICAgICAvLyBJZiB3ZSd2ZSBnb3QgYSBzcGVjaWZpYyByb290IHRvIGRpc3BsYXksIHJlc3RvcmUgdGhhdCByb290IHVzaW5nIGEgZGVkaWNhdGVkCisgICAgICAgICAgICAvLyBhdXRob3JpdHkuIFRoYXQgd2F5IGEgbWlzYmVoYXZpbmcgcHJvdmlkZXIgd29uJ3QgcmVzdWx0IGluIGFuIEFOUi4KKyAgICAgICAgICAgIG5ldyBSZXN0b3JlUm9vdFRhc2sodXJpKS5leGVjdXRlT25FeGVjdXRvcigKKyAgICAgICAgICAgICAgICAgICAgUHJvdmlkZXJFeGVjdXRvci5mb3JBdXRob3JpdHkodXJpLmdldEF1dGhvcml0eSgpKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgIkxhdW5jaGluZyBpbnRvIEhvbWUgZGlyZWN0b3J5LiIpOworICAgICAgICAgICAgLy8gSWYgYWxsIGVsc2UgZmFpbHMsIHRyeSB0byBsb2FkICJIb21lIiBkaXJlY3RvcnkuCisgICAgICAgICAgICBmaW5hbCBVcmkgaG9tZVVyaSA9IERvY3VtZW50c0NvbnRyYWN0LmJ1aWxkSG9tZVVyaSgpOworICAgICAgICAgICAgbmV3IFJlc3RvcmVSb290VGFzayhob21lVXJpKS5leGVjdXRlT25FeGVjdXRvcigKKyAgICAgICAgICAgICAgICAgICAgUHJvdmlkZXJFeGVjdXRvci5mb3JBdXRob3JpdHkoaG9tZVVyaS5nZXRBdXRob3JpdHkoKSkpOworICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIFRPRE86IEVuc3VyZSB3ZSdyZSBoYW5kbGluZyBDb3B5U2VydmljZSBlcnJvcnMgY29ycmVjdGx5IGFjcm9zcyBhbGwgYWN0aXZpdGllcy4KLSAgICAgICAgICAgIC8vIFNob3cgYSBmYWlsdXJlIGRpYWxvZyBpZiB0aGVyZSB3YXMgYSBmYWlsZWQgb3BlcmF0aW9uLgotICAgICAgICAgICAgZmluYWwgaW50IGZhaWx1cmUgPSBpbnRlbnQuZ2V0SW50RXh0cmEoQ29weVNlcnZpY2UuRVhUUkFfRkFJTFVSRSwgMCk7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgdHJhbnNmZXJNb2RlID0gaW50ZW50LmdldEludEV4dHJhKENvcHlTZXJ2aWNlLkVYVFJBX1RSQU5TRkVSX01PREUsCi0gICAgICAgICAgICAgICAgICAgIENvcHlTZXJ2aWNlLlRSQU5TRkVSX01PREVfQ09QWSk7Ci0gICAgICAgICAgICBpZiAoZmFpbHVyZSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgQXJyYXlMaXN0PERvY3VtZW50SW5mbz4gZmFpbGVkU3JjTGlzdCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnRlbnQuZ2V0UGFyY2VsYWJsZUFycmF5TGlzdEV4dHJhKENvcHlTZXJ2aWNlLkVYVFJBX1NSQ19MSVNUKTsKLSAgICAgICAgICAgICAgICBGYWlsdXJlRGlhbG9nRnJhZ21lbnQuc2hvdygKLSAgICAgICAgICAgICAgICAgICAgICAgIGdldEZyYWdtZW50TWFuYWdlcigpLAotICAgICAgICAgICAgICAgICAgICAgICAgZmFpbHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGZhaWxlZFNyY0xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICBtU3RhdGUuc3RhY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zlck1vZGUpOwotICAgICAgICAgICAgfQorICAgICAgICBmaW5hbCBpbnQgZmFpbHVyZSA9IGludGVudC5nZXRJbnRFeHRyYShDb3B5U2VydmljZS5FWFRSQV9GQUlMVVJFLCAwKTsKKyAgICAgICAgZmluYWwgaW50IHRyYW5zZmVyTW9kZSA9IGludGVudC5nZXRJbnRFeHRyYShDb3B5U2VydmljZS5FWFRSQV9UUkFOU0ZFUl9NT0RFLAorICAgICAgICAgICAgICAgIENvcHlTZXJ2aWNlLlRSQU5TRkVSX01PREVfQ09QWSk7CisgICAgICAgIC8vIERpYWxvZ0ZyYWdtZW50IHRha2VzIGNhcmUgb2YgcmVzdG9yaW5nIHRoZSBkaWFsb2cgb24gY29uZmlndXJhdGlvbiBjaGFuZ2UuCisgICAgICAgIC8vIE9ubHkgc2hvdyBpdCBtYW51YWxseSBmb3IgdGhlIGZpcnN0IHRpbWUgKGljaWNsZSBpcyBudWxsKS4KKyAgICAgICAgaWYgKGljaWNsZSA9PSBudWxsICYmIGZhaWx1cmUgIT0gMCkgeworICAgICAgICAgICAgZmluYWwgQXJyYXlMaXN0PERvY3VtZW50SW5mbz4gZmFpbGVkU3JjTGlzdCA9CisgICAgICAgICAgICAgICAgICAgIGludGVudC5nZXRQYXJjZWxhYmxlQXJyYXlMaXN0RXh0cmEoQ29weVNlcnZpY2UuRVhUUkFfU1JDX0xJU1QpOworICAgICAgICAgICAgRmFpbHVyZURpYWxvZ0ZyYWdtZW50LnNob3coCisgICAgICAgICAgICAgICAgICAgIGdldEZyYWdtZW50TWFuYWdlcigpLAorICAgICAgICAgICAgICAgICAgICBmYWlsdXJlLAorICAgICAgICAgICAgICAgICAgICBmYWlsZWRTcmNMaXN0LAorICAgICAgICAgICAgICAgICAgICBtU3RhdGUuc3RhY2ssCisgICAgICAgICAgICAgICAgICAgIHRyYW5zZmVyTW9kZSk7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9JY29uVXRpbHMuamF2YSBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9JY29uVXRpbHMuamF2YQppbmRleCBhMTIxM2QyLi5jMjhmYWU4IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvSWNvblV0aWxzLmphdmEKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL0ljb25VdGlscy5qYXZhCkBAIC0xNTksOCArMTU5LDggQEAKICAgICAgICAgYWRkKCJhcHBsaWNhdGlvbi92bmQuc3VuLnhtbC5jYWxjLnRlbXBsYXRlIiwgaWNvbik7CiAgICAgICAgIGFkZCgiYXBwbGljYXRpb24veC1rc3ByZWFkIiwgaWNvbik7CiAKLSAgICAgICAgLy8gVGV4dAotICAgICAgICBpY29uID0gUi5kcmF3YWJsZS5pY19kb2NfdGV4dDsKKyAgICAgICAgLy8gRG9jdW1lbnQKKyAgICAgICAgaWNvbiA9IFIuZHJhd2FibGUuaWNfZG9jX2RvY3VtZW50OwogICAgICAgICBhZGQoImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQudGV4dCIsIGljb24pOwogICAgICAgICBhZGQoImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQudGV4dC1tYXN0ZXIiLCBpY29uKTsKICAgICAgICAgYWRkKCJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnRleHQtdGVtcGxhdGUiLCBpY29uKTsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9TaGFyZWQuamF2YSBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9TaGFyZWQuamF2YQppbmRleCA1NzBjOWJmLi5jMzM2NmMzIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvU2hhcmVkLmphdmEKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL1NoYXJlZC5qYXZhCkBAIC0xNyw2ICsxNyw4IEBACiBwYWNrYWdlIGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpOwogCiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC50ZXh0LmZvcm1hdC5EYXRlVXRpbHM7CitpbXBvcnQgYW5kcm9pZC50ZXh0LmZvcm1hdC5UaW1lOwogCiAvKiogQGhpZGUgKi8KIHB1YmxpYyBmaW5hbCBjbGFzcyBTaGFyZWQgewpAQCAtNDAsNCArNDIsMjYgQEAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRRdWFudGl0eVN0cmluZyhDb250ZXh0IGNvbnRleHQsIGludCByZXNvdXJjZUlkLCBpbnQgcXVhbnRpdHkpIHsKICAgICAgICAgcmV0dXJuIGNvbnRleHQuZ2V0UmVzb3VyY2VzKCkuZ2V0UXVhbnRpdHlTdHJpbmcocmVzb3VyY2VJZCwgcXVhbnRpdHksIHF1YW50aXR5KTsKICAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBmb3JtYXRUaW1lKENvbnRleHQgY29udGV4dCwgbG9uZyB3aGVuKSB7CisgICAgICAgIC8vIFRPRE86IERhdGVVdGlscyBzaG91bGQgbWFrZSB0aGlzIGVhc2llcgorICAgICAgICBUaW1lIHRoZW4gPSBuZXcgVGltZSgpOworICAgICAgICB0aGVuLnNldCh3aGVuKTsKKyAgICAgICAgVGltZSBub3cgPSBuZXcgVGltZSgpOworICAgICAgICBub3cuc2V0VG9Ob3coKTsKKworICAgICAgICBpbnQgZmxhZ3MgPSBEYXRlVXRpbHMuRk9STUFUX05PX05PT04gfCBEYXRlVXRpbHMuRk9STUFUX05PX01JRE5JR0hUCisgICAgICAgICAgICAgICAgfCBEYXRlVXRpbHMuRk9STUFUX0FCQlJFVl9BTEw7CisKKyAgICAgICAgaWYgKHRoZW4ueWVhciAhPSBub3cueWVhcikgeworICAgICAgICAgICAgZmxhZ3MgfD0gRGF0ZVV0aWxzLkZPUk1BVF9TSE9XX1lFQVIgfCBEYXRlVXRpbHMuRk9STUFUX1NIT1dfREFURTsKKyAgICAgICAgfSBlbHNlIGlmICh0aGVuLnllYXJEYXkgIT0gbm93LnllYXJEYXkpIHsKKyAgICAgICAgICAgIGZsYWdzIHw9IERhdGVVdGlscy5GT1JNQVRfU0hPV19EQVRFOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZmxhZ3MgfD0gRGF0ZVV0aWxzLkZPUk1BVF9TSE9XX1RJTUU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gRGF0ZVV0aWxzLmZvcm1hdERhdGVUaW1lKGNvbnRleHQsIHdoZW4sIGZsYWdzKTsKKyAgICB9CisKIH0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9TdGF0ZS5qYXZhIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL1N0YXRlLmphdmEKaW5kZXggYzgxZDRmYi4uNDYzNzJjMCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL1N0YXRlLmphdmEKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL1N0YXRlLmphdmEKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAvKiogRXhwbGljaXQgdXNlciBjaG9pY2UgKi8KICAgICBwdWJsaWMgaW50IHVzZXJNb2RlID0gTU9ERV9VTktOT1dOOwogICAgIC8qKiBEZXJpdmVkIGFmdGVyIGxvYWRlciAqLwotICAgIHB1YmxpYyBpbnQgZGVyaXZlZE1vZGUgPSBNT0RFX0xJU1Q7CisgICAgcHVibGljIGludCBkZXJpdmVkTW9kZSA9IE1PREVfR1JJRDsKIAogICAgIC8qKiBFeHBsaWNpdCB1c2VyIGNob2ljZSAqLwogICAgIHB1YmxpYyBpbnQgdXNlclNvcnRPcmRlciA9IFNPUlRfT1JERVJfVU5LTk9XTjsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9kaXJsaXN0L0RpcmVjdG9yeUZyYWdtZW50LmphdmEgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9EaXJlY3RvcnlGcmFnbWVudC5qYXZhCmluZGV4IDVlZWY5YjcuLjk2MTc1ODIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9kaXJsaXN0L0RpcmVjdG9yeUZyYWdtZW50LmphdmEKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL2Rpcmxpc3QvRGlyZWN0b3J5RnJhZ21lbnQuamF2YQpAQCAtMjMsNyArMjMsNiBAQAogaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5TdGF0ZS5NT0RFX1VOS05PV047CiBpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlN0YXRlLlNPUlRfT1JERVJfVU5LTk9XTjsKIGltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkubW9kZWwuRG9jdW1lbnRJbmZvLmdldEN1cnNvckludDsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkubW9kZWwuRG9jdW1lbnRJbmZvLmdldEN1cnNvckxvbmc7CiBpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLm1vZGVsLkRvY3VtZW50SW5mby5nZXRDdXJzb3JTdHJpbmc7CiBpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuUHJlY29uZGl0aW9ucy5jaGVja05vdE51bGw7CiBpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuUHJlY29uZGl0aW9ucy5jaGVja1N0YXRlOwpAQCAtMzYsMjggKzM1LDI1IEBACiBpbXBvcnQgYW5kcm9pZC5hcHAuRnJhZ21lbnRUcmFuc2FjdGlvbjsKIGltcG9ydCBhbmRyb2lkLmFwcC5Mb2FkZXJNYW5hZ2VyLkxvYWRlckNhbGxiYWNrczsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ2xpcERhdGE7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRQcm92aWRlckNsaWVudDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFJlc29sdmVyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZW50VmFsdWVzOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkxvYWRlcjsKIGltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLkN1cnNvcjsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcDsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNhbnZhczsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBvaW50OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGU7CiBpbXBvcnQgYW5kcm9pZC5uZXQuVXJpOwogaW1wb3J0IGFuZHJvaWQub3MuQXN5bmNUYXNrOwogaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0IGFuZHJvaWQub3MuQ2FuY2VsbGF0aW9uU2lnbmFsOwotaW1wb3J0IGFuZHJvaWQub3MuT3BlcmF0aW9uQ2FuY2VsZWRFeGNlcHRpb247CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOwogaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuRG9jdW1lbnRzQ29udHJhY3Q7CiBpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5Eb2N1bWVudHNDb250cmFjdC5Eb2N1bWVudDsKIGltcG9ydCBhbmRyb2lkLnN1cHBvcnQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKIGltcG9ydCBhbmRyb2lkLnN1cHBvcnQuZGVzaWduLndpZGdldC5TbmFja2JhcjsKIGltcG9ydCBhbmRyb2lkLnN1cHBvcnQudjcud2lkZ2V0LkdyaWRMYXlvdXRNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC52Ny53aWRnZXQuR3JpZExheW91dE1hbmFnZXIuU3BhblNpemVMb29rdXA7CiBpbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnY3LndpZGdldC5MaW5lYXJMYXlvdXRNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC52Ny53aWRnZXQuUmVjeWNsZXJWaWV3OwogaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC52Ny53aWRnZXQuUmVjeWNsZXJWaWV3LkxheW91dE1hbmFnZXI7CkBAIC02NSwxNiArNjEsMTIgQEAKIGltcG9ydCBhbmRyb2lkLnN1cHBvcnQudjcud2lkZ2V0LlJlY3ljbGVyVmlldy5SZWN5Y2xlckxpc3RlbmVyOwogaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC52Ny53aWRnZXQuUmVjeWNsZXJWaWV3LlZpZXdIb2xkZXI7CiBpbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRVdGlsczsKLWltcG9ydCBhbmRyb2lkLnRleHQuZm9ybWF0LkRhdGVVdGlsczsKLWltcG9ydCBhbmRyb2lkLnRleHQuZm9ybWF0LkZvcm1hdHRlcjsKLWltcG9ydCBhbmRyb2lkLnRleHQuZm9ybWF0LlRpbWU7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU3BhcnNlQXJyYXk7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlR5cGVkVmFsdWU7CiBpbXBvcnQgYW5kcm9pZC52aWV3LkFjdGlvbk1vZGU7CiBpbXBvcnQgYW5kcm9pZC52aWV3LkRyYWdFdmVudDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuR2VzdHVyZURldGVjdG9yOwotaW1wb3J0IGFuZHJvaWQudmlldy5LZXlFdmVudDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuTGF5b3V0SW5mbGF0ZXI7CiBpbXBvcnQgYW5kcm9pZC52aWV3Lk1lbnU7CiBpbXBvcnQgYW5kcm9pZC52aWV3Lk1lbnVJdGVtOwpAQCAtOTMsMzggKzg1LDMyIEBACiBpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuRG9jdW1lbnRzQWN0aXZpdHk7CiBpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuRG9jdW1lbnRzQXBwbGljYXRpb247CiBpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuRXZlbnRzOwotaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLkljb25VdGlsczsKIGltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5NZW51czsKIGltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5NZXNzYWdlQmFyOwogaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLk1pbWVQcmVkaWNhdGU7Ci1pbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuUHJvdmlkZXJFeGVjdXRvcjsKLWltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5Qcm92aWRlckV4ZWN1dG9yLlByZWVtcHRhYmxlOwogaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlI7CiBpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuUmVjZW50TG9hZGVyOwogaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlJlY2VudHNQcm92aWRlcjsKIGltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5SZWNlbnRzUHJvdmlkZXIuU3RhdGVDb2x1bW5zOwotaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlJvb3RDdXJzb3JXcmFwcGVyOwogaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlJvb3RzQ2FjaGU7CiBpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuU2hhcmVkOwogaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlNuYWNrYmFyczsKIGltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5TdGF0ZTsKLWltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5UaHVtYm5haWxDYWNoZTsKIGltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5kaXJsaXN0Lk11bHRpU2VsZWN0TWFuYWdlci5TZWxlY3Rpb247CiBpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkubW9kZWwuRG9jdW1lbnRJbmZvOwogaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLm1vZGVsLkRvY3VtZW50U3RhY2s7CiBpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkubW9kZWwuUm9vdEluZm87CisKIGltcG9ydCBjb20uZ29vZ2xlLmNvbW1vbi5jb2xsZWN0Lkxpc3RzOwotaW1wb3J0IGNvbS5nb29nbGUuY29tbW9uLmNvbGxlY3QuU2V0czsKIAogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5TZXQ7CiAKIC8qKgogICogRGlzcGxheSB0aGUgZG9jdW1lbnRzIGluc2lkZSBhIHNpbmdsZSBkaXJlY3RvcnkuCiAgKi8KLXB1YmxpYyBjbGFzcyBEaXJlY3RvcnlGcmFnbWVudCBleHRlbmRzIEZyYWdtZW50IHsKK3B1YmxpYyBjbGFzcyBEaXJlY3RvcnlGcmFnbWVudCBleHRlbmRzIEZyYWdtZW50IGltcGxlbWVudHMgRG9jdW1lbnRzQWRhcHRlci5FbnZpcm9ubWVudCB7CiAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUWVBFX05PUk1BTCA9IDE7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVFlQRV9TRUFSQ0ggPSAyOwpAQCAtMTQwLDcgKzEyNiw3IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJEaXJlY3RvcnlGcmFnbWVudCI7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTE9BREVSX0lEID0gNDI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVR19FTkFCTEVfRE5EID0gdHJ1ZTsKKyAgICBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVR19FTkFCTEVfRE5EID0gdHJ1ZTsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9UWVBFID0gInR5cGUiOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9ST09UID0gInJvb3QiOwpAQCAtMTUzLDYgKzEzOSw4IEBACiAgICAgcHJpdmF0ZSBNb2RlbC5VcGRhdGVMaXN0ZW5lciBtTW9kZWxVcGRhdGVMaXN0ZW5lciA9IG5ldyBNb2RlbFVwZGF0ZUxpc3RlbmVyKCk7CiAgICAgcHJpdmF0ZSBJdGVtQ2xpY2tMaXN0ZW5lciBtSXRlbUNsaWNrTGlzdGVuZXIgPSBuZXcgSXRlbUNsaWNrTGlzdGVuZXIoKTsKIAorICAgIHByaXZhdGUgSWNvbkhlbHBlciBtSWNvbkhlbHBlcjsKKwogICAgIHByaXZhdGUgVmlldyBtRW1wdHlWaWV3OwogICAgIHByaXZhdGUgUmVjeWNsZXJWaWV3IG1SZWNWaWV3OwogCkBAIC0xNjIsOSArMTUwLDYgQEAKICAgICBwcml2YXRlIGludCBtTGFzdE1vZGUgPSBNT0RFX1VOS05PV047CiAgICAgcHJpdmF0ZSBpbnQgbUxhc3RTb3J0T3JkZXIgPSBTT1JUX09SREVSX1VOS05PV047CiAgICAgcHJpdmF0ZSBib29sZWFuIG1MYXN0U2hvd1NpemU7Ci0gICAgcHJpdmF0ZSBib29sZWFuIG1IaWRlR3JpZFRpdGxlczsKLSAgICBwcml2YXRlIGJvb2xlYW4gbVN2ZWx0ZVJlY2VudHM7Ci0gICAgcHJpdmF0ZSBQb2ludCBtVGh1bWJTaXplOwogICAgIHByaXZhdGUgRG9jdW1lbnRzQWRhcHRlciBtQWRhcHRlcjsKICAgICBwcml2YXRlIExvYWRlckNhbGxiYWNrczxEaXJlY3RvcnlSZXN1bHQ+IG1DYWxsYmFja3M7CiAgICAgcHJpdmF0ZSBGcmFnbWVudFR1bmVyIG1UdW5lcjsKQEAgLTE3Nyw5ICsxNjIsNiBAQAogICAgIHByaXZhdGUgTWVzc2FnZUJhciBtTWVzc2FnZUJhcjsKICAgICBwcml2YXRlIFZpZXcgbVByb2dyZXNzQmFyOwogCi0gICAgcHJpdmF0ZSBpbnQgbVNlbGVjdGVkSXRlbUNvbG9yOwotICAgIHByaXZhdGUgaW50IG1EZWZhdWx0SXRlbUNvbG9yOwotCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIHNob3dOb3JtYWwoRnJhZ21lbnRNYW5hZ2VyIGZtLCBSb290SW5mbyByb290LCBEb2N1bWVudEluZm8gZG9jLCBpbnQgYW5pbSkgewogICAgICAgICBzaG93KGZtLCBUWVBFX05PUk1BTCwgcm9vdCwgZG9jLCBudWxsLCBhbmltKTsKICAgICB9CkBAIC0zMDcsMTEgKzI4OSwxMiBAQAogICAgICAgICBmaW5hbCBSb290SW5mbyByb290ID0gZ2V0QXJndW1lbnRzKCkuZ2V0UGFyY2VsYWJsZShFWFRSQV9ST09UKTsKICAgICAgICAgZmluYWwgRG9jdW1lbnRJbmZvIGRvYyA9IGdldEFyZ3VtZW50cygpLmdldFBhcmNlbGFibGUoRVhUUkFfRE9DKTsKIAotICAgICAgICBtQWRhcHRlciA9IG5ldyBEb2N1bWVudHNBZGFwdGVyKGNvbnRleHQpOwotICAgICAgICBtUmVjVmlldy5zZXRBZGFwdGVyKG1BZGFwdGVyKTsKKyAgICAgICAgbUljb25IZWxwZXIgPSBuZXcgSWNvbkhlbHBlcihjb250ZXh0LCBzdGF0ZS5kZXJpdmVkTW9kZSk7CiAKLSAgICAgICAgbURlZmF1bHRJdGVtQ29sb3IgPSBjb250ZXh0LmdldFJlc291cmNlcygpLmdldENvbG9yKFIuY29sb3IuaXRlbV9kb2NfYmFja2dyb3VuZCk7Ci0gICAgICAgIG1TZWxlY3RlZEl0ZW1Db2xvciA9IGNvbnRleHQuZ2V0UmVzb3VyY2VzKCkuZ2V0Q29sb3IoUi5jb2xvci5pdGVtX2RvY19iYWNrZ3JvdW5kX3NlbGVjdGVkKTsKKyAgICAgICAgbUFkYXB0ZXIgPSBuZXcgU2VjdGlvbkJyZWFrRG9jdW1lbnRzQWRhcHRlcldyYXBwZXIoCisgICAgICAgICAgICAgICAgdGhpcywgbmV3IE1vZGVsQmFja2VkRG9jdW1lbnRzQWRhcHRlcih0aGlzLCBtSWNvbkhlbHBlcikpOworCisgICAgICAgIG1SZWNWaWV3LnNldEFkYXB0ZXIobUFkYXB0ZXIpOwogCiAgICAgICAgIEdlc3R1cmVEZXRlY3Rvci5TaW1wbGVPbkdlc3R1cmVMaXN0ZW5lciBsaXN0ZW5lciA9CiAgICAgICAgICAgICAgICAgbmV3IEdlc3R1cmVEZXRlY3Rvci5TaW1wbGVPbkdlc3R1cmVMaXN0ZW5lcigpIHsKQEAgLTM0OSwxMiArMzMyLDEzIEBACiAgICAgICAgIC8vIGludG8gdGhlIHNlbGVjdGlvbiBtYW5hZ2VyLgogICAgICAgICBtU2VsZWN0aW9uTWFuYWdlciA9IG5ldyBNdWx0aVNlbGVjdE1hbmFnZXIoCiAgICAgICAgICAgICAgICAgbVJlY1ZpZXcsCisgICAgICAgICAgICAgICAgbUFkYXB0ZXIsCiAgICAgICAgICAgICAgICAgc3RhdGUuYWxsb3dNdWx0aXBsZQogICAgICAgICAgICAgICAgICAgICA/IE11bHRpU2VsZWN0TWFuYWdlci5NT0RFX01VTFRJUExFCiAgICAgICAgICAgICAgICAgICAgIDogTXVsdGlTZWxlY3RNYW5hZ2VyLk1PREVfU0lOR0xFKTsKICAgICAgICAgbVNlbGVjdGlvbk1hbmFnZXIuYWRkQ2FsbGJhY2sobmV3IFNlbGVjdGlvbk1vZGVMaXN0ZW5lcigpKTsKIAotICAgICAgICBtTW9kZWwgPSBuZXcgTW9kZWwoY29udGV4dCwgbUFkYXB0ZXIpOworICAgICAgICBtTW9kZWwgPSBuZXcgTW9kZWwoY29udGV4dCk7CiAgICAgICAgIG1Nb2RlbC5hZGRVcGRhdGVMaXN0ZW5lcihtQWRhcHRlcik7CiAgICAgICAgIG1Nb2RlbC5hZGRVcGRhdGVMaXN0ZW5lcihtTW9kZWxVcGRhdGVMaXN0ZW5lcik7CiAKQEAgLTM2NCwxNyArMzQ4LDIwIEBACiAgICAgICAgIG1UdW5lciA9IEZyYWdtZW50VHVuZXIucGljayhzdGF0ZSk7CiAgICAgICAgIG1DbGlwcGVyID0gbmV3IERvY3VtZW50Q2xpcHBlcihjb250ZXh0KTsKIAorICAgICAgICBib29sZWFuIGhpZGVHcmlkVGl0bGVzOwogICAgICAgICBpZiAobVR5cGUgPT0gVFlQRV9SRUNFTlRfT1BFTikgewogICAgICAgICAgICAgLy8gSGlkZSB0aXRsZXMgd2hlbiBzaG93aW5nIHJlY2VudHMgZm9yIHBpY2tpbmcgaW1hZ2VzL3ZpZGVvcwotICAgICAgICAgICAgbUhpZGVHcmlkVGl0bGVzID0gTWltZVByZWRpY2F0ZS5taW1lTWF0Y2hlcygKKyAgICAgICAgICAgIGhpZGVHcmlkVGl0bGVzID0gTWltZVByZWRpY2F0ZS5taW1lTWF0Y2hlcygKICAgICAgICAgICAgICAgICAgICAgTWltZVByZWRpY2F0ZS5WSVNVQUxfTUlNRVMsIHN0YXRlLmFjY2VwdE1pbWVzKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1IaWRlR3JpZFRpdGxlcyA9IChkb2MgIT0gbnVsbCkgJiYgZG9jLmlzR3JpZFRpdGxlc0hpZGRlbigpOworICAgICAgICAgICAgaGlkZUdyaWRUaXRsZXMgPSAoZG9jICE9IG51bGwpICYmIGRvYy5pc0dyaWRUaXRsZXNIaWRkZW4oKTsKICAgICAgICAgfQorICAgICAgICBHcmlkRG9jdW1lbnRIb2xkZXIuc2V0SGlkZVRpdGxlcyhoaWRlR3JpZFRpdGxlcyk7CiAKICAgICAgICAgZmluYWwgQWN0aXZpdHlNYW5hZ2VyIGFtID0gKEFjdGl2aXR5TWFuYWdlcikgY29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKAogICAgICAgICAgICAgICAgIENvbnRleHQuQUNUSVZJVFlfU0VSVklDRSk7Ci0gICAgICAgIG1TdmVsdGVSZWNlbnRzID0gYW0uaXNMb3dSYW1EZXZpY2UoKSAmJiAobVR5cGUgPT0gVFlQRV9SRUNFTlRfT1BFTik7CisgICAgICAgIGJvb2xlYW4gc3ZlbHRlID0gYW0uaXNMb3dSYW1EZXZpY2UoKSAmJiAobVR5cGUgPT0gVFlQRV9SRUNFTlRfT1BFTik7CisgICAgICAgIG1JY29uSGVscGVyLnNldFRodW1ibmFpbHNFbmFibGVkKCFzdmVsdGUpOwogCiAgICAgICAgIG1DYWxsYmFja3MgPSBuZXcgTG9hZGVyQ2FsbGJhY2tzPERpcmVjdG9yeVJlc3VsdD4oKSB7CiAgICAgICAgICAgICBAT3ZlcnJpZGUKQEAgLTU4NSwxOSArNTcyLDE5IEBACiAgICAgICogY2xhc3NlcyBhcyBuZWVkZWQuCiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZUxheW91dChpbnQgbW9kZSkgewotICAgICAgICBmaW5hbCBpbnQgdGh1bWJTaXplOwotCiAgICAgICAgIGZpbmFsIExheW91dE1hbmFnZXIgbGF5b3V0OwogICAgICAgICBzd2l0Y2ggKG1vZGUpIHsKICAgICAgICAgICAgIGNhc2UgTU9ERV9HUklEOgotICAgICAgICAgICAgICAgIHRodW1iU2l6ZSA9IGdldFJlc291cmNlcygpLmdldERpbWVuc2lvblBpeGVsU2l6ZShSLmRpbWVuLmdyaWRfd2lkdGgpOwogICAgICAgICAgICAgICAgIGlmIChtR3JpZExheW91dCA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1HcmlkTGF5b3V0ID0gbmV3IEdyaWRMYXlvdXRNYW5hZ2VyKGdldENvbnRleHQoKSwgbUNvbHVtbkNvdW50ICk7CisgICAgICAgICAgICAgICAgICAgIG1HcmlkTGF5b3V0ID0gbmV3IEdyaWRMYXlvdXRNYW5hZ2VyKGdldENvbnRleHQoKSwgbUNvbHVtbkNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgU3BhblNpemVMb29rdXAgbG9va3VwID0gbUFkYXB0ZXIuY3JlYXRlU3BhblNpemVMb29rdXAoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxvb2t1cCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtR3JpZExheW91dC5zZXRTcGFuU2l6ZUxvb2t1cChsb29rdXApOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGxheW91dCA9IG1HcmlkTGF5b3V0OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBNT0RFX0xJU1Q6Ci0gICAgICAgICAgICAgICAgdGh1bWJTaXplID0gZ2V0UmVzb3VyY2VzKCkuZ2V0RGltZW5zaW9uUGl4ZWxTaXplKFIuZGltZW4uaWNvbl9zaXplKTsKICAgICAgICAgICAgICAgICBpZiAobUxpc3RMYXlvdXQgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICBtTGlzdExheW91dCA9IG5ldyBMaW5lYXJMYXlvdXRNYW5hZ2VyKGdldENvbnRleHQoKSk7CiAgICAgICAgICAgICAgICAgfQpAQCAtNjEzLDcgKzYwMCw3IEBACiAgICAgICAgIC8vIGltcGVyYXRpdmVseSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgIG1TZWxlY3Rpb25NYW5hZ2VyLmhhbmRsZUxheW91dENoYW5nZWQoKTsKICAgICAgICAgLy8gc2V0dGluZyBsYXlvdXQgbWFuYWdlciBhdXRvbWF0aWNhbGx5IGludmFsaWRhdGVzIGV4aXN0aW5nIFZpZXdIb2xkZXJzLgotICAgICAgICBtVGh1bWJTaXplID0gbmV3IFBvaW50KHRodW1iU2l6ZSwgdGh1bWJTaXplKTsKKyAgICAgICAgbUljb25IZWxwZXIuc2V0TW9kZShtb2RlKTsKICAgICB9CiAKICAgICBwcml2YXRlIGludCBjYWxjdWxhdGVDb2x1bW5Db3VudCgpIHsKQEAgLTYyOCw2ICs2MTUsMTEgQEAKICAgICAgICAgcmV0dXJuIGNvbHVtbkNvdW50OwogICAgIH0KIAorICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBpbnQgZ2V0Q29sdW1uQ291bnQoKSB7CisgICAgICAgIHJldHVybiBtQ29sdW1uQ291bnQ7CisgICAgfQorCiAgICAgLyoqCiAgICAgICogTWFuYWdlcyB0aGUgaW50ZWdyYXRpb24gYmV0d2VlbiBvdXIgQWN0aW9uTW9kZSBhbmQgTXVsdGlTZWxlY3RNYW5hZ2VyLCBpbml0aWF0aW5nCiAgICAgICogQWN0aW9uTW9kZSB3aGVuIHRoZXJlIGlzIGEgc2VsZWN0aW9uLCBjYW5jZWxpbmcgaXQgd2hlbiB0aGVyZSBpcyBubyBzZWxlY3Rpb24sCkBAIC03NzQsMTQgKzc2NiwxMCBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBjYW5jZWxUaHVtYm5haWxUYXNrKFZpZXcgdmlldykgeworICAgIHByaXZhdGUgdm9pZCBjYW5jZWxUaHVtYm5haWxUYXNrKFZpZXcgdmlldykgewogICAgICAgICBmaW5hbCBJbWFnZVZpZXcgaWNvblRodW1iID0gKEltYWdlVmlldykgdmlldy5maW5kVmlld0J5SWQoUi5pZC5pY29uX3RodW1iKTsKICAgICAgICAgaWYgKGljb25UaHVtYiAhPSBudWxsKSB7Ci0gICAgICAgICAgICBmaW5hbCBUaHVtYm5haWxBc3luY1Rhc2sgb2xkVGFzayA9IChUaHVtYm5haWxBc3luY1Rhc2spIGljb25UaHVtYi5nZXRUYWcoKTsKLSAgICAgICAgICAgIGlmIChvbGRUYXNrICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBvbGRUYXNrLnByZWVtcHQoKTsKLSAgICAgICAgICAgICAgICBpY29uVGh1bWIuc2V0VGFnKG51bGwpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgbUljb25IZWxwZXIuc3RvcExvYWRpbmcoaWNvblRodW1iKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtOTE2LDYxICs5MDQsMzIgQEAKICAgICAgICAgfS5leGVjdXRlKHNlbGVjdGVkKTsKICAgICB9CiAKLSAgICBwcml2YXRlIFN0YXRlIGdldERpc3BsYXlTdGF0ZSgpIHsKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBpbml0RG9jdW1lbnRIb2xkZXIoRG9jdW1lbnRIb2xkZXIgaG9sZGVyKSB7CisgICAgICAgIGhvbGRlci5hZGRDbGlja0xpc3RlbmVyKG1JdGVtQ2xpY2tMaXN0ZW5lcik7CisgICAgICAgIGhvbGRlci5hZGRPbktleUxpc3RlbmVyKG1TZWxlY3Rpb25NYW5hZ2VyKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvbkJpbmREb2N1bWVudEhvbGRlcihEb2N1bWVudEhvbGRlciBob2xkZXIsIEN1cnNvciBjdXJzb3IpIHsKKyAgICAgICAgaWYgKERFQlVHX0VOQUJMRV9ETkQpIHsKKyAgICAgICAgICAgIHNldHVwRHJhZ0FuZERyb3BPbkRvY3VtZW50Vmlldyhob2xkZXIuaXRlbVZpZXcsIGN1cnNvcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU3RhdGUgZ2V0RGlzcGxheVN0YXRlKCkgewogICAgICAgICByZXR1cm4gKChCYXNlQWN0aXZpdHkpIGdldEFjdGl2aXR5KCkpLmdldERpc3BsYXlTdGF0ZSgpOwogICAgIH0KIAotICAgIC8vIFByb3ZpZGUgYSByZWZlcmVuY2UgdG8gdGhlIHZpZXdzIGZvciBlYWNoIGRhdGEgaXRlbQotICAgIC8vIENvbXBsZXggZGF0YSBpdGVtcyBtYXkgbmVlZCBtb3JlIHRoYW4gb25lIHZpZXcgcGVyIGl0ZW0sIGFuZAotICAgIC8vIHlvdSBwcm92aWRlIGFjY2VzcyB0byBhbGwgdGhlIHZpZXdzIGZvciBhIGRhdGEgaXRlbSBpbiBhIHZpZXcgaG9sZGVyCi0gICAgZmluYWwgY2xhc3MgRG9jdW1lbnRIb2xkZXIKLSAgICAgICAgICAgIGV4dGVuZHMgUmVjeWNsZXJWaWV3LlZpZXdIb2xkZXIKLSAgICAgICAgICAgIGltcGxlbWVudHMgVmlldy5PbktleUxpc3RlbmVyCi0gICAgewotICAgICAgICBwdWJsaWMgU3RyaW5nIG1vZGVsSWQ7Ci0gICAgICAgIHByaXZhdGUgQ2xpY2tMaXN0ZW5lciBtQ2xpY2tMaXN0ZW5lcjsKLSAgICAgICAgcHJpdmF0ZSBWaWV3Lk9uS2V5TGlzdGVuZXIgbUtleUxpc3RlbmVyOwotCi0gICAgICAgIHB1YmxpYyBEb2N1bWVudEhvbGRlcihWaWV3IHZpZXcpIHsKLSAgICAgICAgICAgIHN1cGVyKHZpZXcpOwotICAgICAgICAgICAgdmlldy5zZXRPbktleUxpc3RlbmVyKHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgc2V0U2VsZWN0ZWQoYm9vbGVhbiBzZWxlY3RlZCkgewotICAgICAgICAgICAgaXRlbVZpZXcuc2V0QWN0aXZhdGVkKHNlbGVjdGVkKTsKLSAgICAgICAgICAgIGl0ZW1WaWV3LnNldEJhY2tncm91bmRDb2xvcihzZWxlY3RlZCA/IG1TZWxlY3RlZEl0ZW1Db2xvciA6IG1EZWZhdWx0SXRlbUNvbG9yKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBvbktleShWaWV3IHYsIGludCBrZXlDb2RlLCBLZXlFdmVudCBldmVudCkgewotICAgICAgICAgICAgLy8gSW50ZXJjZXB0IGVudGVyIGtleS11cCBldmVudHMsIGFuZCB0cmVhdCB0aGVtIGFzIGNsaWNrcy4gIEZvcndhcmQgb3RoZXIgZXZlbnRzLgotICAgICAgICAgICAgaWYgKGV2ZW50LmdldEFjdGlvbigpID09IEtleUV2ZW50LkFDVElPTl9VUCAmJgotICAgICAgICAgICAgICAgICAgICBrZXlDb2RlID09IEtleUV2ZW50LktFWUNPREVfRU5URVIpIHsKLSAgICAgICAgICAgICAgICBpZiAobUNsaWNrTGlzdGVuZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBtQ2xpY2tMaXN0ZW5lci5vbkNsaWNrKHRoaXMpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobUtleUxpc3RlbmVyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbUtleUxpc3RlbmVyLm9uS2V5KHYsIGtleUNvZGUsIGV2ZW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIGFkZENsaWNrTGlzdGVuZXIoQ2xpY2tMaXN0ZW5lciBsaXN0ZW5lcikgewotICAgICAgICAgICAgLy8gSnVzdCBoYW5kbGUgb25lIGZvciBub3c7IHN3aXRjaCB0byBhIGxpc3QgaWYgbmVjZXNzYXJ5LgotICAgICAgICAgICAgY2hlY2tTdGF0ZShtQ2xpY2tMaXN0ZW5lciA9PSBudWxsKTsKLSAgICAgICAgICAgIG1DbGlja0xpc3RlbmVyID0gbGlzdGVuZXI7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBhZGRPbktleUxpc3RlbmVyKFZpZXcuT25LZXlMaXN0ZW5lciBsaXN0ZW5lcikgewotICAgICAgICAgICAgLy8gSnVzdCBoYW5kbGUgb25lIGZvciBub3c7IHN3aXRjaCB0byBhIGxpc3QgaWYgbmVjZXNzYXJ5LgotICAgICAgICAgICAgY2hlY2tTdGF0ZShtS2V5TGlzdGVuZXIgPT0gbnVsbCk7Ci0gICAgICAgICAgICBtS2V5TGlzdGVuZXIgPSBsaXN0ZW5lcjsKLSAgICAgICAgfQorICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBNb2RlbCBnZXRNb2RlbCgpIHsKKyAgICAgICAgcmV0dXJuIG1Nb2RlbDsKICAgICB9CiAKLSAgICBpbnRlcmZhY2UgQ2xpY2tMaXN0ZW5lciB7Ci0gICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soRG9jdW1lbnRIb2xkZXIgZG9jKTsKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBpc0RvY3VtZW50RW5hYmxlZChTdHJpbmcgZG9jTWltZVR5cGUsIGludCBkb2NGbGFncykgeworICAgICAgICByZXR1cm4gbVR1bmVyLmlzRG9jdW1lbnRFbmFibGVkKGRvY01pbWVUeXBlLCBkb2NGbGFncyk7CiAgICAgfQogCiAgICAgdm9pZCBzaG93RW1wdHlWaWV3KCkgewpAQCAtOTk2LDMyMiArOTU1LDYgQEAKICAgICAgICAgbVJlY1ZpZXcuc2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpOwogICAgIH0KIAotICAgIGZpbmFsIGNsYXNzIERvY3VtZW50c0FkYXB0ZXIKLSAgICAgICAgICAgIGV4dGVuZHMgUmVjeWNsZXJWaWV3LkFkYXB0ZXI8RG9jdW1lbnRIb2xkZXI+Ci0gICAgICAgICAgICBpbXBsZW1lbnRzIE1vZGVsLlVwZGF0ZUxpc3RlbmVyIHsKLQotICAgICAgICBzdGF0aWMgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgVEFHID0gIkRvY3VtZW50c0FkYXB0ZXIiOwotICAgICAgICBwcml2YXRlIGZpbmFsIENvbnRleHQgbUNvbnRleHQ7Ci0gICAgICAgIC8qKgotICAgICAgICAgKiBBbiBvcmRlcmVkIGxpc3Qgb2YgbW9kZWwgSURzLiBUaGlzIGlzIHRoZSBkYXRhIHN0cnVjdHVyZSB0aGF0IGRldGVybWluZXMgd2hhdCBzaG93cyB1cCBpbgotICAgICAgICAgKiB0aGUgVUksIGFuZCB3aGVyZS4KLSAgICAgICAgICovCi0gICAgICAgIHByaXZhdGUgTGlzdDxTdHJpbmc+IG1Nb2RlbElkcyA9IG5ldyBBcnJheUxpc3Q8PigpOwotCi0gICAgICAgIHB1YmxpYyBEb2N1bWVudHNBZGFwdGVyKENvbnRleHQgY29udGV4dCkgewotICAgICAgICAgICAgbUNvbnRleHQgPSBjb250ZXh0OwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBEb2N1bWVudEhvbGRlciBvbkNyZWF0ZVZpZXdIb2xkZXIoVmlld0dyb3VwIHBhcmVudCwgaW50IHZpZXdUeXBlKSB7Ci0gICAgICAgICAgICBmaW5hbCBTdGF0ZSBzdGF0ZSA9IGdldERpc3BsYXlTdGF0ZSgpOwotICAgICAgICAgICAgZmluYWwgTGF5b3V0SW5mbGF0ZXIgaW5mbGF0ZXIgPSBMYXlvdXRJbmZsYXRlci5mcm9tKGdldENvbnRleHQoKSk7Ci0gICAgICAgICAgICBWaWV3IGl0ZW0gPSBudWxsOwotICAgICAgICAgICAgc3dpdGNoIChzdGF0ZS5kZXJpdmVkTW9kZSkgewotICAgICAgICAgICAgICAgIGNhc2UgTU9ERV9HUklEOgotICAgICAgICAgICAgICAgICAgICBpdGVtID0gaW5mbGF0ZXIuaW5mbGF0ZShSLmxheW91dC5pdGVtX2RvY19ncmlkLCBwYXJlbnQsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBNT0RFX0xJU1Q6Ci0gICAgICAgICAgICAgICAgICAgIGl0ZW0gPSBpbmZsYXRlci5pbmZsYXRlKFIubGF5b3V0Lml0ZW1fZG9jX2xpc3QsIHBhcmVudCwgZmFsc2UpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIE1PREVfVU5LTk9XTjoKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJVbnN1cHBvcnRlZCBsYXlvdXQgbW9kZS4iKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgRG9jdW1lbnRIb2xkZXIgaG9sZGVyID0gbmV3IERvY3VtZW50SG9sZGVyKGl0ZW0pOwotICAgICAgICAgICAgaG9sZGVyLmFkZENsaWNrTGlzdGVuZXIobUl0ZW1DbGlja0xpc3RlbmVyKTsKLSAgICAgICAgICAgIGhvbGRlci5hZGRPbktleUxpc3RlbmVyKG1TZWxlY3Rpb25NYW5hZ2VyKTsKLSAgICAgICAgICAgIHJldHVybiBob2xkZXI7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogRGVhbCB3aXRoIHNlbGVjdGlvbiBjaGFuZ2VkIGV2ZW50cyBieSB1c2luZyBhIGN1c3RvbSBJdGVtQW5pbWF0b3IgdGhhdCBqdXN0IGNoYW5nZXMgdGhlCi0gICAgICAgICAqIGJhY2tncm91bmQgY29sb3IuICBUaGlzIHdvcmtzIGFyb3VuZCBmb2N1cyBpc3N1ZXMgKG90aGVyd2lzZSBpdGVtcyBsb3NlIGZvY3VzIHdoZW4gdGhlaXIKLSAgICAgICAgICogc2VsZWN0aW9uIHN0YXRlIGNoYW5nZXMpIGJ1dCBhbHNvIG9wdGltaXplcyBjaGFuZ2UgYW5pbWF0aW9ucyBmb3Igc2VsZWN0aW9uLgotICAgICAgICAgKi8KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uQmluZFZpZXdIb2xkZXIoRG9jdW1lbnRIb2xkZXIgaG9sZGVyLCBpbnQgcG9zaXRpb24sIExpc3Q8T2JqZWN0PiBwYXlsb2FkKSB7Ci0gICAgICAgICAgICBmaW5hbCBWaWV3IGl0ZW1WaWV3ID0gaG9sZGVyLml0ZW1WaWV3OwotCi0gICAgICAgICAgICBpZiAocGF5bG9hZC5jb250YWlucyhNdWx0aVNlbGVjdE1hbmFnZXIuU0VMRUNUSU9OX0NIQU5HRURfTUFSS0VSKSkgewotICAgICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gc2VsZWN0ZWQgPSBpc1NlbGVjdGVkKG1Nb2RlbElkcy5nZXQocG9zaXRpb24pKTsKLSAgICAgICAgICAgICAgICBpdGVtVmlldy5zZXRBY3RpdmF0ZWQoc2VsZWN0ZWQpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgb25CaW5kVmlld0hvbGRlcihob2xkZXIsIHBvc2l0aW9uKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvbkJpbmRWaWV3SG9sZGVyKERvY3VtZW50SG9sZGVyIGhvbGRlciwgaW50IHBvc2l0aW9uKSB7Ci0gICAgICAgICAgICBmaW5hbCBDb250ZXh0IGNvbnRleHQgPSBnZXRDb250ZXh0KCk7Ci0gICAgICAgICAgICBmaW5hbCBTdGF0ZSBzdGF0ZSA9IGdldERpc3BsYXlTdGF0ZSgpOwotICAgICAgICAgICAgZmluYWwgUm9vdHNDYWNoZSByb290cyA9IERvY3VtZW50c0FwcGxpY2F0aW9uLmdldFJvb3RzQ2FjaGUoY29udGV4dCk7Ci0gICAgICAgICAgICBmaW5hbCBUaHVtYm5haWxDYWNoZSB0aHVtYnMgPSBEb2N1bWVudHNBcHBsaWNhdGlvbi5nZXRUaHVtYm5haWxzQ2FjaGUoCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQsIG1UaHVtYlNpemUpOwotCi0gICAgICAgICAgICBob2xkZXIubW9kZWxJZCA9IG1Nb2RlbElkcy5nZXQocG9zaXRpb24pOwotICAgICAgICAgICAgZmluYWwgQ3Vyc29yIGN1cnNvciA9IG1Nb2RlbC5nZXRJdGVtKGhvbGRlci5tb2RlbElkKTsKLSAgICAgICAgICAgIGNoZWNrTm90TnVsbChjdXJzb3IsICJDdXJzb3IgY2Fubm90IGJlIG51bGwuIik7Ci0KLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBkb2NBdXRob3JpdHkgPSBnZXRDdXJzb3JTdHJpbmcoY3Vyc29yLCBSb290Q3Vyc29yV3JhcHBlci5DT0xVTU5fQVVUSE9SSVRZKTsKLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBkb2NSb290SWQgPSBnZXRDdXJzb3JTdHJpbmcoY3Vyc29yLCBSb290Q3Vyc29yV3JhcHBlci5DT0xVTU5fUk9PVF9JRCk7Ci0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgZG9jSWQgPSBnZXRDdXJzb3JTdHJpbmcoY3Vyc29yLCBEb2N1bWVudC5DT0xVTU5fRE9DVU1FTlRfSUQpOwotICAgICAgICAgICAgZmluYWwgU3RyaW5nIGRvY01pbWVUeXBlID0gZ2V0Q3Vyc29yU3RyaW5nKGN1cnNvciwgRG9jdW1lbnQuQ09MVU1OX01JTUVfVFlQRSk7Ci0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgZG9jRGlzcGxheU5hbWUgPSBnZXRDdXJzb3JTdHJpbmcoY3Vyc29yLCBEb2N1bWVudC5DT0xVTU5fRElTUExBWV9OQU1FKTsKLSAgICAgICAgICAgIGZpbmFsIGxvbmcgZG9jTGFzdE1vZGlmaWVkID0gZ2V0Q3Vyc29yTG9uZyhjdXJzb3IsIERvY3VtZW50LkNPTFVNTl9MQVNUX01PRElGSUVEKTsKLSAgICAgICAgICAgIGZpbmFsIGludCBkb2NJY29uID0gZ2V0Q3Vyc29ySW50KGN1cnNvciwgRG9jdW1lbnQuQ09MVU1OX0lDT04pOwotICAgICAgICAgICAgZmluYWwgaW50IGRvY0ZsYWdzID0gZ2V0Q3Vyc29ySW50KGN1cnNvciwgRG9jdW1lbnQuQ09MVU1OX0ZMQUdTKTsKLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBkb2NTdW1tYXJ5ID0gZ2V0Q3Vyc29yU3RyaW5nKGN1cnNvciwgRG9jdW1lbnQuQ09MVU1OX1NVTU1BUlkpOwotICAgICAgICAgICAgZmluYWwgbG9uZyBkb2NTaXplID0gZ2V0Q3Vyc29yTG9uZyhjdXJzb3IsIERvY3VtZW50LkNPTFVNTl9TSVpFKTsKLQotICAgICAgICAgICAgZmluYWwgVmlldyBpdGVtVmlldyA9IGhvbGRlci5pdGVtVmlldzsKLQotICAgICAgICAgICAgaG9sZGVyLnNldFNlbGVjdGVkKGlzU2VsZWN0ZWQoaG9sZGVyLm1vZGVsSWQpKTsKLQotICAgICAgICAgICAgZmluYWwgSW1hZ2VWaWV3IGljb25NaW1lID0gKEltYWdlVmlldykgaXRlbVZpZXcuZmluZFZpZXdCeUlkKFIuaWQuaWNvbl9taW1lKTsKLSAgICAgICAgICAgIGZpbmFsIEltYWdlVmlldyBpY29uVGh1bWIgPSAoSW1hZ2VWaWV3KSBpdGVtVmlldy5maW5kVmlld0J5SWQoUi5pZC5pY29uX3RodW1iKTsKLSAgICAgICAgICAgIGZpbmFsIFRleHRWaWV3IHRpdGxlID0gKFRleHRWaWV3KSBpdGVtVmlldy5maW5kVmlld0J5SWQoYW5kcm9pZC5SLmlkLnRpdGxlKTsKLSAgICAgICAgICAgIGZpbmFsIEltYWdlVmlldyBpY29uMSA9IChJbWFnZVZpZXcpIGl0ZW1WaWV3LmZpbmRWaWV3QnlJZChhbmRyb2lkLlIuaWQuaWNvbjEpOwotICAgICAgICAgICAgZmluYWwgVGV4dFZpZXcgc3VtbWFyeSA9IChUZXh0VmlldykgaXRlbVZpZXcuZmluZFZpZXdCeUlkKGFuZHJvaWQuUi5pZC5zdW1tYXJ5KTsKLSAgICAgICAgICAgIGZpbmFsIFRleHRWaWV3IGRhdGUgPSAoVGV4dFZpZXcpIGl0ZW1WaWV3LmZpbmRWaWV3QnlJZChSLmlkLmRhdGUpOwotICAgICAgICAgICAgZmluYWwgVGV4dFZpZXcgc2l6ZSA9IChUZXh0VmlldykgaXRlbVZpZXcuZmluZFZpZXdCeUlkKFIuaWQuc2l6ZSk7Ci0KLSAgICAgICAgICAgIGZpbmFsIFRodW1ibmFpbEFzeW5jVGFzayBvbGRUYXNrID0gKFRodW1ibmFpbEFzeW5jVGFzaykgaWNvblRodW1iLmdldFRhZygpOwotICAgICAgICAgICAgaWYgKG9sZFRhc2sgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG9sZFRhc2sucHJlZW1wdCgpOwotICAgICAgICAgICAgICAgIGljb25UaHVtYi5zZXRUYWcobnVsbCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGljb25NaW1lLmFuaW1hdGUoKS5jYW5jZWwoKTsKLSAgICAgICAgICAgIGljb25UaHVtYi5hbmltYXRlKCkuY2FuY2VsKCk7Ci0KLSAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gc3VwcG9ydHNUaHVtYm5haWwgPSAoZG9jRmxhZ3MgJiBEb2N1bWVudC5GTEFHX1NVUFBPUlRTX1RIVU1CTkFJTCkgIT0gMDsKLSAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gYWxsb3dUaHVtYm5haWwgPSAoc3RhdGUuZGVyaXZlZE1vZGUgPT0gTU9ERV9HUklEKQotICAgICAgICAgICAgICAgICAgICB8fCBNaW1lUHJlZGljYXRlLm1pbWVNYXRjaGVzKE1pbWVQcmVkaWNhdGUuVklTVUFMX01JTUVTLCBkb2NNaW1lVHlwZSk7Ci0gICAgICAgICAgICBmaW5hbCBib29sZWFuIHNob3dUaHVtYm5haWwgPSBzdXBwb3J0c1RodW1ibmFpbCAmJiBhbGxvd1RodW1ibmFpbCAmJiAhbVN2ZWx0ZVJlY2VudHM7Ci0KLSAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gZW5hYmxlZCA9IG1UdW5lci5pc0RvY3VtZW50RW5hYmxlZChkb2NNaW1lVHlwZSwgZG9jRmxhZ3MpOwotICAgICAgICAgICAgZmluYWwgZmxvYXQgaWNvbkFscGhhID0gKHN0YXRlLmRlcml2ZWRNb2RlID09IE1PREVfTElTVCAmJiAhZW5hYmxlZCkgPyAwLjVmIDogMWY7Ci0KLSAgICAgICAgICAgIGJvb2xlYW4gY2FjaGVIaXQgPSBmYWxzZTsKLSAgICAgICAgICAgIGlmIChzaG93VGh1bWJuYWlsKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgVXJpIHVyaSA9IERvY3VtZW50c0NvbnRyYWN0LmJ1aWxkRG9jdW1lbnRVcmkoZG9jQXV0aG9yaXR5LCBkb2NJZCk7Ci0gICAgICAgICAgICAgICAgZmluYWwgQml0bWFwIGNhY2hlZFJlc3VsdCA9IHRodW1icy5nZXQodXJpKTsKLSAgICAgICAgICAgICAgICBpZiAoY2FjaGVkUmVzdWx0ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgaWNvblRodW1iLnNldEltYWdlQml0bWFwKGNhY2hlZFJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgICAgIGNhY2hlSGl0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpY29uVGh1bWIuc2V0SW1hZ2VEcmF3YWJsZShudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogSGFuZyB0aGlzIG9mZiBEb2N1bWVudEhvbGRlcj8KLSAgICAgICAgICAgICAgICAgICAgZmluYWwgVGh1bWJuYWlsQXN5bmNUYXNrIHRhc2sgPSBuZXcgVGh1bWJuYWlsQXN5bmNUYXNrKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyaSwgaWNvbk1pbWUsIGljb25UaHVtYiwgbVRodW1iU2l6ZSwgaWNvbkFscGhhKTsKLSAgICAgICAgICAgICAgICAgICAgaWNvblRodW1iLnNldFRhZyh0YXNrKTsKLSAgICAgICAgICAgICAgICAgICAgUHJvdmlkZXJFeGVjdXRvci5mb3JBdXRob3JpdHkoZG9jQXV0aG9yaXR5KS5leGVjdXRlKHRhc2spOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gQWx3YXlzIHRocm93IE1JTUUgaWNvbiBpbnRvIHBsYWNlLCBldmVuIHdoZW4gYSB0aHVtYm5haWwgaXMgYmVpbmcKLSAgICAgICAgICAgIC8vIGxvYWRlZCBpbiBiYWNrZ3JvdW5kLgotICAgICAgICAgICAgaWYgKGNhY2hlSGl0KSB7Ci0gICAgICAgICAgICAgICAgaWNvbk1pbWUuc2V0QWxwaGEoMGYpOwotICAgICAgICAgICAgICAgIGljb25NaW1lLnNldEltYWdlRHJhd2FibGUobnVsbCk7Ci0gICAgICAgICAgICAgICAgaWNvblRodW1iLnNldEFscGhhKDFmKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWNvbk1pbWUuc2V0QWxwaGEoMWYpOwotICAgICAgICAgICAgICAgIGljb25UaHVtYi5zZXRBbHBoYSgwZik7Ci0gICAgICAgICAgICAgICAgaWNvblRodW1iLnNldEltYWdlRHJhd2FibGUobnVsbCk7Ci0gICAgICAgICAgICAgICAgaWNvbk1pbWUuc2V0SW1hZ2VEcmF3YWJsZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGdldERvY3VtZW50SWNvbihtQ29udGV4dCwgZG9jQXV0aG9yaXR5LCBkb2NJZCwgZG9jTWltZVR5cGUsIGRvY0ljb24sIHN0YXRlKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICgoc3RhdGUuZGVyaXZlZE1vZGUgPT0gTU9ERV9HUklEKSAmJiBtSGlkZUdyaWRUaXRsZXMpIHsKLSAgICAgICAgICAgICAgICB0aXRsZS5zZXRWaXNpYmlsaXR5KFZpZXcuR09ORSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHRpdGxlLnNldFRleHQoZG9jRGlzcGxheU5hbWUpOwotICAgICAgICAgICAgICAgIHRpdGxlLnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgRHJhd2FibGUgaWNvbkRyYXdhYmxlID0gbnVsbDsKLSAgICAgICAgICAgIGlmIChtVHlwZSA9PSBUWVBFX1JFQ0VOVF9PUEVOKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBoYWQgdG8gZW51bWVyYXRlIHJvb3RzIGJlZm9yZSBhbnkgcmVzdWx0cyBjYW4KLSAgICAgICAgICAgICAgICAvLyBiZSBzaG93biwgc28gdGhpcyB3aWxsIG5ldmVyIGJsb2NrLgotICAgICAgICAgICAgICAgIGZpbmFsIFJvb3RJbmZvIHJvb3QgPSByb290cy5nZXRSb290QmxvY2tpbmcoZG9jQXV0aG9yaXR5LCBkb2NSb290SWQpOwotICAgICAgICAgICAgICAgIGljb25EcmF3YWJsZSA9IHJvb3QubG9hZEljb24obUNvbnRleHQpOwotCi0gICAgICAgICAgICAgICAgaWYgKHN1bW1hcnkgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBmaW5hbCBib29sZWFuIGFsd2F5c1Nob3dTdW1tYXJ5ID0gZ2V0UmVzb3VyY2VzKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0Qm9vbGVhbihSLmJvb2wuYWx3YXlzX3Nob3dfc3VtbWFyeSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhbHdheXNTaG93U3VtbWFyeSkgewotICAgICAgICAgICAgICAgICAgICAgICAgc3VtbWFyeS5zZXRUZXh0KHJvb3QuZ2V0RGlyZWN0b3J5U3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgc3VtbWFyeS5zZXRWaXNpYmlsaXR5KFZpZXcuVklTSUJMRSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaWNvbkRyYXdhYmxlICE9IG51bGwgJiYgcm9vdHMuaXNJY29uVW5pcXVlQmxvY2tpbmcocm9vdCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBObyBzdW1tYXJ5IG5lZWRlZCBpZiBpY29uIHNwZWFrcyBmb3IgaXRzZWxmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VtbWFyeS5zZXRWaXNpYmlsaXR5KFZpZXcuSU5WSVNJQkxFKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VtbWFyeS5zZXRUZXh0KHJvb3QuZ2V0RGlyZWN0b3J5U3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1bW1hcnkuc2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1bW1hcnkuc2V0VGV4dEFsaWdubWVudChUZXh0Vmlldy5URVhUX0FMSUdOTUVOVF9URVhUX0VORCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIERpcmVjdG9yaWVzIHNob3dpbmcgdGh1bWJuYWlscyBpbiBncmlkIG1vZGUgZ2V0IGEgbGl0dGxlIGljb24KLSAgICAgICAgICAgICAgICAvLyBoaW50IHRvIHJlbWluZCB1c2VyIHRoZXkncmUgYSBkaXJlY3RvcnkuCi0gICAgICAgICAgICAgICAgaWYgKERvY3VtZW50Lk1JTUVfVFlQRV9ESVIuZXF1YWxzKGRvY01pbWVUeXBlKSAmJiBzdGF0ZS5kZXJpdmVkTW9kZSA9PSBNT0RFX0dSSUQKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIHNob3dUaHVtYm5haWwpIHsKLSAgICAgICAgICAgICAgICAgICAgaWNvbkRyYXdhYmxlID0gSWNvblV0aWxzLmFwcGx5VGludEF0dHIobUNvbnRleHQsIFIuZHJhd2FibGUuaWNfZG9jX2ZvbGRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkLlIuYXR0ci50ZXh0Q29sb3JQcmltYXJ5SW52ZXJzZSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHN1bW1hcnkgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoZG9jU3VtbWFyeSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5LnNldFRleHQoZG9jU3VtbWFyeSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5LnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN1bW1hcnkuc2V0VmlzaWJpbGl0eShWaWV3LklOVklTSUJMRSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChpY29uRHJhd2FibGUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGljb24xLnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKLSAgICAgICAgICAgICAgICBpY29uMS5zZXRJbWFnZURyYXdhYmxlKGljb25EcmF3YWJsZSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGljb24xLnNldFZpc2liaWxpdHkoVmlldy5HT05FKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGRvY0xhc3RNb2RpZmllZCA9PSAtMSkgewotICAgICAgICAgICAgICAgIGRhdGUuc2V0VGV4dChudWxsKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZGF0ZS5zZXRUZXh0KGZvcm1hdFRpbWUobUNvbnRleHQsIGRvY0xhc3RNb2RpZmllZCkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXN0YXRlLnNob3dTaXplIHx8IERvY3VtZW50Lk1JTUVfVFlQRV9ESVIuZXF1YWxzKGRvY01pbWVUeXBlKSB8fCBkb2NTaXplID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgc2l6ZS5zZXRWaXNpYmlsaXR5KFZpZXcuR09ORSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHNpemUuc2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpOwotICAgICAgICAgICAgICAgIHNpemUuc2V0VGV4dChGb3JtYXR0ZXIuZm9ybWF0RmlsZVNpemUobUNvbnRleHQsIGRvY1NpemUpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc2V0RW5hYmxlZFJlY3Vyc2l2ZShpdGVtVmlldywgZW5hYmxlZCk7Ci0KLSAgICAgICAgICAgIGljb25NaW1lLnNldEFscGhhKGljb25BbHBoYSk7Ci0gICAgICAgICAgICBpY29uVGh1bWIuc2V0QWxwaGEoaWNvbkFscGhhKTsKLSAgICAgICAgICAgIGljb24xLnNldEFscGhhKGljb25BbHBoYSk7Ci0KLSAgICAgICAgICAgIGlmIChERUJVR19FTkFCTEVfRE5EKSB7Ci0gICAgICAgICAgICAgICAgc2V0dXBEcmFnQW5kRHJvcE9uRG9jdW1lbnRWaWV3KGl0ZW1WaWV3LCBjdXJzb3IpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBpbnQgZ2V0SXRlbUNvdW50KCkgewotICAgICAgICAgICAgcmV0dXJuIG1Nb2RlbElkcy5zaXplKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25Nb2RlbFVwZGF0ZShNb2RlbCBtb2RlbCkgewotICAgICAgICAgICAgbU1vZGVsSWRzID0gTGlzdHMubmV3QXJyYXlMaXN0KG1vZGVsLmdldE1vZGVsSWRzKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uTW9kZWxVcGRhdGVGYWlsZWQoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLCAib25Nb2RlbFVwZGF0ZUZhaWxlZCBjYWxsZWQgIik7Ci0gICAgICAgICAgICBtTW9kZWxJZHMuY2xlYXIoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBAcmV0dXJuIFRoZSBtb2RlbCBJRCBvZiB0aGUgaXRlbSBhdCB0aGUgZ2l2ZW4gYWRhcHRlciBwb3NpdGlvbi4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0TW9kZWxJZChpbnQgYWRhcHRlclBvc2l0aW9uKSB7Ci0gICAgICAgICAgICByZXR1cm4gbU1vZGVsSWRzLmdldChhZGFwdGVyUG9zaXRpb24pOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEhpZGVzIGEgc2V0IG9mIGl0ZW1zIGZyb20gdGhlIGFzc29jaWF0ZWQgUmVjeWNsZXJWaWV3LgotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0gaWRzIFRoZSBNb2RlbCBJRHMgb2YgdGhlIGl0ZW1zIHRvIGhpZGUuCi0gICAgICAgICAqIEByZXR1cm4gQSBTcGFyc2VBcnJheSB0aGF0IG1hcHMgdGhlIGhpZGRlbiBJRHMgdG8gdGhlaXIgb2xkIHBvc2l0aW9ucy4gVGhpcyBjYW4gYmUgdXNlZAotICAgICAgICAgKiAgICAgICAgIHRvIHtAbGluayAjdW5oaWRlfSB0aGUgaXRlbXMgaWYgbmVjZXNzYXJ5LgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIFNwYXJzZUFycmF5PFN0cmluZz4gaGlkZShTdHJpbmcuLi4gaWRzKSB7Ci0gICAgICAgICAgICBTZXQ8U3RyaW5nPiB0b0hpZGUgPSBTZXRzLm5ld0hhc2hTZXQoaWRzKTsKLQotICAgICAgICAgICAgLy8gUHJvY2VlZCBiYWNrd2FyZHMgdGhyb3VnaCB0aGUgbGlzdCBvZiBpdGVtcywgYmVjYXVzZSBlYWNoIHJlbW92YWwgY2F1c2VzIHRoZQotICAgICAgICAgICAgLy8gcG9zaXRpb25zIG9mIGFsbCBzdWJzZXF1ZW50IGl0ZW1zIHRvIGNoYW5nZS4KLSAgICAgICAgICAgIFNwYXJzZUFycmF5PFN0cmluZz4gaGlkZGVuSXRlbXMgPSBuZXcgU3BhcnNlQXJyYXk8PigpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IG1Nb2RlbElkcy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewotICAgICAgICAgICAgICAgIFN0cmluZyBpZCA9IG1Nb2RlbElkcy5nZXQoaSk7Ci0gICAgICAgICAgICAgICAgaWYgKHRvSGlkZS5jb250YWlucyhpZCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaGlkZGVuSXRlbXMucHV0KGksIG1Nb2RlbElkcy5yZW1vdmUoaSkpOwotICAgICAgICAgICAgICAgICAgICBub3RpZnlJdGVtUmVtb3ZlZChpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBoaWRkZW5JdGVtczsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBVbmhpZGVzIGEgc2V0IG9mIHByZXZpb3VzbHkgaGlkZGVuIGl0ZW1zLgotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0gaWRzIEEgc3BhcnNlIGFycmF5IG9mIElEcyBmcm9tIGEgcHJldmlvdXMgY2FsbCB0byB7QGxpbmsgI2hpZGV9LgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIHZvaWQgdW5oaWRlKFNwYXJzZUFycmF5PFN0cmluZz4gaWRzKSB7Ci0gICAgICAgICAgICAvLyBQcm9jZWVkIGJhY2t3YXJkcyB0aHJvdWdoIHRoZSBsaXN0IG9mIGl0ZW1zLCBiZWNhdXNlIGVhY2ggYWRkaXRpb24gY2F1c2VzIHRoZQotICAgICAgICAgICAgLy8gcG9zaXRpb25zIG9mIGFsbCBzdWJzZXF1ZW50IGl0ZW1zIHRvIGNoYW5nZS4KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSBpZHMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgICAgICAgICBpbnQgcG9zID0gaWRzLmtleUF0KGkpOwotICAgICAgICAgICAgICAgIFN0cmluZyBpZCA9IGlkcy5nZXQocG9zKTsKLSAgICAgICAgICAgICAgICBtTW9kZWxJZHMuYWRkKHBvcywgaWQpOwotICAgICAgICAgICAgICAgIG5vdGlmeUl0ZW1JbnNlcnRlZChwb3MpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIFJldHVybnMgYSBsaXN0IG9mIG1vZGVsIElEcyBvZiBpdGVtcyBjdXJyZW50bHkgaW4gdGhlIGFkYXB0ZXIuIEV4Y2x1ZGVzIGl0ZW1zIHRoYXQgYXJlCi0gICAgICAgICAqIGN1cnJlbnRseSBoaWRkZW4gKHNlZSB7QGxpbmsgI2hpZGUoU3RyaW5nLi4uKX0pLgotICAgICAgICAgKgotICAgICAgICAgKiBAcmV0dXJuIEEgbGlzdCBvZiBNb2RlbCBJRHMuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgTGlzdDxTdHJpbmc+IGdldE1vZGVsSWRzKCkgewotICAgICAgICAgICAgcmV0dXJuIG1Nb2RlbElkczsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBmb3JtYXRUaW1lKENvbnRleHQgY29udGV4dCwgbG9uZyB3aGVuKSB7Ci0gICAgICAgIC8vIFRPRE86IERhdGVVdGlscyBzaG91bGQgbWFrZSB0aGlzIGVhc2llcgotICAgICAgICBUaW1lIHRoZW4gPSBuZXcgVGltZSgpOwotICAgICAgICB0aGVuLnNldCh3aGVuKTsKLSAgICAgICAgVGltZSBub3cgPSBuZXcgVGltZSgpOwotICAgICAgICBub3cuc2V0VG9Ob3coKTsKLQotICAgICAgICBpbnQgZmxhZ3MgPSBEYXRlVXRpbHMuRk9STUFUX05PX05PT04gfCBEYXRlVXRpbHMuRk9STUFUX05PX01JRE5JR0hUCi0gICAgICAgICAgICAgICAgfCBEYXRlVXRpbHMuRk9STUFUX0FCQlJFVl9BTEw7Ci0KLSAgICAgICAgaWYgKHRoZW4ueWVhciAhPSBub3cueWVhcikgewotICAgICAgICAgICAgZmxhZ3MgfD0gRGF0ZVV0aWxzLkZPUk1BVF9TSE9XX1lFQVIgfCBEYXRlVXRpbHMuRk9STUFUX1NIT1dfREFURTsKLSAgICAgICAgfSBlbHNlIGlmICh0aGVuLnllYXJEYXkgIT0gbm93LnllYXJEYXkpIHsKLSAgICAgICAgICAgIGZsYWdzIHw9IERhdGVVdGlscy5GT1JNQVRfU0hPV19EQVRFOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZmxhZ3MgfD0gRGF0ZVV0aWxzLkZPUk1BVF9TSE9XX1RJTUU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gRGF0ZVV0aWxzLmZvcm1hdERhdGVUaW1lKGNvbnRleHQsIHdoZW4sIGZsYWdzKTsKLSAgICB9Ci0KICAgICBwcml2YXRlIFN0cmluZyBmaW5kQ29tbW9uTWltZVR5cGUoTGlzdDxTdHJpbmc+IG1pbWVUeXBlcykgewogICAgICAgICBTdHJpbmdbXSBjb21tb25UeXBlID0gbWltZVR5cGVzLmdldCgwKS5zcGxpdCgiLyIpOwogICAgICAgICBpZiAoY29tbW9uVHlwZS5sZW5ndGggIT0gMikgewpAQCAtMTMzNiwxOSArOTc5LDYgQEAKICAgICAgICAgcmV0dXJuIGNvbW1vblR5cGVbMF0gKyAiLyIgKyBjb21tb25UeXBlWzFdOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBzZXRFbmFibGVkUmVjdXJzaXZlKFZpZXcgdiwgYm9vbGVhbiBlbmFibGVkKSB7Ci0gICAgICAgIGlmICh2ID09IG51bGwpIHJldHVybjsKLSAgICAgICAgaWYgKHYuaXNFbmFibGVkKCkgPT0gZW5hYmxlZCkgcmV0dXJuOwotICAgICAgICB2LnNldEVuYWJsZWQoZW5hYmxlZCk7Ci0KLSAgICAgICAgaWYgKHYgaW5zdGFuY2VvZiBWaWV3R3JvdXApIHsKLSAgICAgICAgICAgIGZpbmFsIFZpZXdHcm91cCB2ZyA9IChWaWV3R3JvdXApIHY7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gdmcuZ2V0Q2hpbGRDb3VudCgpIC0gMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgICAgICAgICBzZXRFbmFibGVkUmVjdXJzaXZlKHZnLmdldENoaWxkQXQoaSksIGVuYWJsZWQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCiAgICAgcHJpdmF0ZSB2b2lkIGNvcHlGcm9tQ2xpcGJvYXJkKCkgewogICAgICAgICBuZXcgQXN5bmNUYXNrPFZvaWQsIFZvaWQsIExpc3Q8RG9jdW1lbnRJbmZvPj4oKSB7CiAKQEAgLTE2MjMsODkgKzEyNTMsMTIgQEAKICAgICBwcml2YXRlIERyYXdhYmxlIGdldERyYWdTaGFkb3dJY29uKExpc3Q8RG9jdW1lbnRJbmZvPiBkb2NzKSB7CiAgICAgICAgIGlmIChkb2NzLnNpemUoKSA9PSAxKSB7CiAgICAgICAgICAgICBmaW5hbCBEb2N1bWVudEluZm8gZG9jID0gZG9jcy5nZXQoMCk7Ci0gICAgICAgICAgICByZXR1cm4gZ2V0RG9jdW1lbnRJY29uKGdldEFjdGl2aXR5KCksIGRvYy5hdXRob3JpdHksIGRvYy5kb2N1bWVudElkLAotICAgICAgICAgICAgICAgICAgICBkb2MubWltZVR5cGUsIGRvYy5pY29uLCBnZXREaXNwbGF5U3RhdGUoKSk7CisgICAgICAgICAgICByZXR1cm4gbUljb25IZWxwZXIuZ2V0RG9jdW1lbnRJY29uKGdldEFjdGl2aXR5KCksIGRvYy5hdXRob3JpdHksIGRvYy5kb2N1bWVudElkLAorICAgICAgICAgICAgICAgICAgICBkb2MubWltZVR5cGUsIGRvYy5pY29uKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZ2V0QWN0aXZpdHkoKS5nZXREcmF3YWJsZShSLmRyYXdhYmxlLmljX2RvY19nZW5lcmljKTsKICAgICB9CiAKLSAgICBwdWJsaWMgc3RhdGljIERyYXdhYmxlIGdldERvY3VtZW50SWNvbihDb250ZXh0IGNvbnRleHQsIFN0cmluZyBkb2NBdXRob3JpdHksIFN0cmluZyBkb2NJZCwKLSAgICAgICAgICAgIFN0cmluZyBkb2NNaW1lVHlwZSwgaW50IGRvY0ljb24sIFN0YXRlIHN0YXRlKSB7Ci0gICAgICAgIGlmIChkb2NJY29uICE9IDApIHsKLSAgICAgICAgICAgIHJldHVybiBJY29uVXRpbHMubG9hZFBhY2thZ2VJY29uKGNvbnRleHQsIGRvY0F1dGhvcml0eSwgZG9jSWNvbik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gSWNvblV0aWxzLmxvYWRNaW1lSWNvbihjb250ZXh0LCBkb2NNaW1lVHlwZSwgZG9jQXV0aG9yaXR5LCBkb2NJZCwKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUuZGVyaXZlZE1vZGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgVGh1bWJuYWlsQXN5bmNUYXNrIGV4dGVuZHMgQXN5bmNUYXNrPFVyaSwgVm9pZCwgQml0bWFwPgotICAgICAgICAgICAgaW1wbGVtZW50cyBQcmVlbXB0YWJsZSB7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgVXJpIG1Vcmk7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgSW1hZ2VWaWV3IG1JY29uTWltZTsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBJbWFnZVZpZXcgbUljb25UaHVtYjsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBQb2ludCBtVGh1bWJTaXplOwotICAgICAgICBwcml2YXRlIGZpbmFsIGZsb2F0IG1UYXJnZXRBbHBoYTsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBDYW5jZWxsYXRpb25TaWduYWwgbVNpZ25hbDsKLQotICAgICAgICBwdWJsaWMgVGh1bWJuYWlsQXN5bmNUYXNrKFVyaSB1cmksIEltYWdlVmlldyBpY29uTWltZSwgSW1hZ2VWaWV3IGljb25UaHVtYiwgUG9pbnQgdGh1bWJTaXplLAotICAgICAgICAgICAgICAgIGZsb2F0IHRhcmdldEFscGhhKSB7Ci0gICAgICAgICAgICBtVXJpID0gdXJpOwotICAgICAgICAgICAgbUljb25NaW1lID0gaWNvbk1pbWU7Ci0gICAgICAgICAgICBtSWNvblRodW1iID0gaWNvblRodW1iOwotICAgICAgICAgICAgbVRodW1iU2l6ZSA9IHRodW1iU2l6ZTsKLSAgICAgICAgICAgIG1UYXJnZXRBbHBoYSA9IHRhcmdldEFscGhhOwotICAgICAgICAgICAgbVNpZ25hbCA9IG5ldyBDYW5jZWxsYXRpb25TaWduYWwoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBwcmVlbXB0KCkgewotICAgICAgICAgICAgY2FuY2VsKGZhbHNlKTsKLSAgICAgICAgICAgIG1TaWduYWwuY2FuY2VsKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIEJpdG1hcCBkb0luQmFja2dyb3VuZChVcmkuLi4gcGFyYW1zKSB7Ci0gICAgICAgICAgICBpZiAoaXNDYW5jZWxsZWQoKSkgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgICAgIGZpbmFsIENvbnRleHQgY29udGV4dCA9IG1JY29uVGh1bWIuZ2V0Q29udGV4dCgpOwotICAgICAgICAgICAgZmluYWwgQ29udGVudFJlc29sdmVyIHJlc29sdmVyID0gY29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKTsKLQotICAgICAgICAgICAgQ29udGVudFByb3ZpZGVyQ2xpZW50IGNsaWVudCA9IG51bGw7Ci0gICAgICAgICAgICBCaXRtYXAgcmVzdWx0ID0gbnVsbDsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgY2xpZW50ID0gRG9jdW1lbnRzQXBwbGljYXRpb24uYWNxdWlyZVVuc3RhYmxlUHJvdmlkZXJPclRocm93KAotICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZXIsIG1VcmkuZ2V0QXV0aG9yaXR5KCkpOwotICAgICAgICAgICAgICAgIHJlc3VsdCA9IERvY3VtZW50c0NvbnRyYWN0LmdldERvY3VtZW50VGh1bWJuYWlsKGNsaWVudCwgbVVyaSwgbVRodW1iU2l6ZSwgbVNpZ25hbCk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpbmFsIFRodW1ibmFpbENhY2hlIHRodW1icyA9IERvY3VtZW50c0FwcGxpY2F0aW9uLmdldFRodW1ibmFpbHNDYWNoZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LCBtVGh1bWJTaXplKTsKLSAgICAgICAgICAgICAgICAgICAgdGh1bWJzLnB1dChtVXJpLCByZXN1bHQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCEoZSBpbnN0YW5jZW9mIE9wZXJhdGlvbkNhbmNlbGVkRXhjZXB0aW9uKSkgewotICAgICAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJGYWlsZWQgdG8gbG9hZCB0aHVtYm5haWwgZm9yICIgKyBtVXJpICsgIjogIiArIGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICAgICAgQ29udGVudFByb3ZpZGVyQ2xpZW50LnJlbGVhc2VRdWlldGx5KGNsaWVudCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCB2b2lkIG9uUG9zdEV4ZWN1dGUoQml0bWFwIHJlc3VsdCkgewotICAgICAgICAgICAgaWYgKG1JY29uVGh1bWIuZ2V0VGFnKCkgPT0gdGhpcyAmJiByZXN1bHQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1JY29uVGh1bWIuc2V0VGFnKG51bGwpOwotICAgICAgICAgICAgICAgIG1JY29uVGh1bWIuc2V0SW1hZ2VCaXRtYXAocmVzdWx0KTsKLQotICAgICAgICAgICAgICAgIG1JY29uTWltZS5zZXRBbHBoYShtVGFyZ2V0QWxwaGEpOwotICAgICAgICAgICAgICAgIG1JY29uTWltZS5hbmltYXRlKCkuYWxwaGEoMGYpLnN0YXJ0KCk7Ci0gICAgICAgICAgICAgICAgbUljb25UaHVtYi5zZXRBbHBoYSgwZik7Ci0gICAgICAgICAgICAgICAgbUljb25UaHVtYi5hbmltYXRlKCkuYWxwaGEobVRhcmdldEFscGhhKS5zdGFydCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCiAgICAgcHJpdmF0ZSBjbGFzcyBEcmF3YWJsZVNoYWRvd0J1aWxkZXIgZXh0ZW5kcyBWaWV3LkRyYWdTaGFkb3dCdWlsZGVyIHsKIAogICAgICAgICBwcml2YXRlIGZpbmFsIERyYXdhYmxlIG1TaGFkb3c7CkBAIC0xNzUyLDExICsxMzA1LDEyIEBACiAgICAgICAgIGFic3RyYWN0IHZvaWQgb25Eb2N1bWVudHNSZWFkeShMaXN0PERvY3VtZW50SW5mbz4gZG9jcyk7CiAgICAgfQogCi0gICAgYm9vbGVhbiBpc1NlbGVjdGVkKFN0cmluZyBtb2RlbElkKSB7CisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gaXNTZWxlY3RlZChTdHJpbmcgbW9kZWxJZCkgewogICAgICAgICByZXR1cm4gbVNlbGVjdGlvbk1hbmFnZXIuZ2V0U2VsZWN0aW9uKCkuY29udGFpbnMobW9kZWxJZCk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSBjbGFzcyBJdGVtQ2xpY2tMaXN0ZW5lciBpbXBsZW1lbnRzIENsaWNrTGlzdGVuZXIgeworICAgIHByaXZhdGUgY2xhc3MgSXRlbUNsaWNrTGlzdGVuZXIgaW1wbGVtZW50cyBEb2N1bWVudEhvbGRlci5DbGlja0xpc3RlbmVyIHsKICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soRG9jdW1lbnRIb2xkZXIgZG9jKSB7CiAgICAgICAgICAgICBpZiAobVNlbGVjdGlvbk1hbmFnZXIuaGFzU2VsZWN0aW9uKCkpIHsKQEAgLTE3NjgsNyArMTMyMiw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwcml2YXRlIGNsYXNzIE1vZGVsVXBkYXRlTGlzdGVuZXIgaW1wbGVtZW50cyBNb2RlbC5VcGRhdGVMaXN0ZW5lciB7CisgICAgcHJpdmF0ZSBmaW5hbCBjbGFzcyBNb2RlbFVwZGF0ZUxpc3RlbmVyIGltcGxlbWVudHMgTW9kZWwuVXBkYXRlTGlzdGVuZXIgewogICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHVibGljIHZvaWQgb25Nb2RlbFVwZGF0ZShNb2RlbCBtb2RlbCkgewogICAgICAgICAgICAgaWYgKG1vZGVsLmluZm8gIT0gbnVsbCB8fCBtb2RlbC5lcnJvciAhPSBudWxsKSB7CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9Eb2N1bWVudEhvbGRlci5qYXZhIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL2Rpcmxpc3QvRG9jdW1lbnRIb2xkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWM5MDU3Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL2Rpcmxpc3QvRG9jdW1lbnRIb2xkZXIuamF2YQpAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuZGlybGlzdDsKKworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLlByZWNvbmRpdGlvbnMuY2hlY2tTdGF0ZTsKKworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2UuQ3Vyc29yOworaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC5hbm5vdGF0aW9uLk51bGxhYmxlOworaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC52Ny53aWRnZXQuUmVjeWNsZXJWaWV3OworaW1wb3J0IGFuZHJvaWQudmlldy5LZXlFdmVudDsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuTGF5b3V0SW5mbGF0ZXI7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdHcm91cDsKKworaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlI7CitpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuU3RhdGU7CisKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBEb2N1bWVudEhvbGRlcgorICAgICAgICBleHRlbmRzIFJlY3ljbGVyVmlldy5WaWV3SG9sZGVyCisgICAgICAgIGltcGxlbWVudHMgVmlldy5PbktleUxpc3RlbmVyIHsKKworICAgIHB1YmxpYyBATnVsbGFibGUgU3RyaW5nIG1vZGVsSWQ7CisKKyAgICBmaW5hbCBpbnQgbVNlbGVjdGVkSXRlbUNvbG9yOworICAgIGZpbmFsIGludCBtRGVmYXVsdEl0ZW1Db2xvcjsKKyAgICBmaW5hbCBib29sZWFuIG1BbHdheXNTaG93U3VtbWFyeTsKKyAgICBmaW5hbCBDb250ZXh0IG1Db250ZXh0OworCisgICAgcHJpdmF0ZSBMaXN0RG9jdW1lbnRIb2xkZXIuQ2xpY2tMaXN0ZW5lciBtQ2xpY2tMaXN0ZW5lcjsKKyAgICBwcml2YXRlIFZpZXcuT25LZXlMaXN0ZW5lciBtS2V5TGlzdGVuZXI7CisKKyAgICBwdWJsaWMgRG9jdW1lbnRIb2xkZXIoQ29udGV4dCBjb250ZXh0LCBWaWV3R3JvdXAgcGFyZW50LCBpbnQgbGF5b3V0KSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgaW5mbGF0ZUxheW91dChjb250ZXh0LCBwYXJlbnQsIGxheW91dCkpOworICAgIH0KKworICAgIHB1YmxpYyBEb2N1bWVudEhvbGRlcihDb250ZXh0IGNvbnRleHQsIFZpZXcgaXRlbSkgeworICAgICAgICBzdXBlcihpdGVtKTsKKworICAgICAgICBpdGVtVmlldy5zZXRPbktleUxpc3RlbmVyKHRoaXMpOworCisgICAgICAgIG1Db250ZXh0ID0gY29udGV4dDsKKworICAgICAgICBtRGVmYXVsdEl0ZW1Db2xvciA9IGNvbnRleHQuZ2V0Q29sb3IoUi5jb2xvci5pdGVtX2RvY19iYWNrZ3JvdW5kKTsKKyAgICAgICAgbVNlbGVjdGVkSXRlbUNvbG9yID0gY29udGV4dC5nZXRDb2xvcihSLmNvbG9yLml0ZW1fZG9jX2JhY2tncm91bmRfc2VsZWN0ZWQpOworICAgICAgICBtQWx3YXlzU2hvd1N1bW1hcnkgPSBjb250ZXh0LmdldFJlc291cmNlcygpLmdldEJvb2xlYW4oUi5ib29sLmFsd2F5c19zaG93X3N1bW1hcnkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEJpbmRzIHRoZSB2aWV3IHRvIHRoZSBnaXZlbiBpdGVtIGRhdGEuCisgICAgICogQHBhcmFtIGN1cnNvcgorICAgICAqIEBwYXJhbSBtb2RlbElkCisgICAgICogQHBhcmFtIHN0YXRlCisgICAgICovCisgICAgcHVibGljIGFic3RyYWN0IHZvaWQgYmluZChDdXJzb3IgY3Vyc29yLCBTdHJpbmcgbW9kZWxJZCwgU3RhdGUgc3RhdGUpOworCisgICAgcHVibGljIHZvaWQgc2V0U2VsZWN0ZWQoYm9vbGVhbiBzZWxlY3RlZCkgeworICAgICAgICBpdGVtVmlldy5zZXRBY3RpdmF0ZWQoc2VsZWN0ZWQpOworICAgICAgICBpdGVtVmlldy5zZXRCYWNrZ3JvdW5kQ29sb3Ioc2VsZWN0ZWQgPyBtU2VsZWN0ZWRJdGVtQ29sb3IgOiBtRGVmYXVsdEl0ZW1Db2xvcik7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gb25LZXkoVmlldyB2LCBpbnQga2V5Q29kZSwgS2V5RXZlbnQgZXZlbnQpIHsKKyAgICAgICAgLy8gSW50ZXJjZXB0IGVudGVyIGtleS11cCBldmVudHMsIGFuZCB0cmVhdCB0aGVtIGFzIGNsaWNrcy4gIEZvcndhcmQgb3RoZXIgZXZlbnRzLgorICAgICAgICBpZiAoZXZlbnQuZ2V0QWN0aW9uKCkgPT0gS2V5RXZlbnQuQUNUSU9OX1VQICYmCisgICAgICAgICAgICAgICAga2V5Q29kZSA9PSBLZXlFdmVudC5LRVlDT0RFX0VOVEVSKSB7CisgICAgICAgICAgICBpZiAobUNsaWNrTGlzdGVuZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG1DbGlja0xpc3RlbmVyLm9uQ2xpY2sodGhpcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIGlmIChtS2V5TGlzdGVuZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIG1LZXlMaXN0ZW5lci5vbktleSh2LCBrZXlDb2RlLCBldmVudCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGFkZENsaWNrTGlzdGVuZXIoTGlzdERvY3VtZW50SG9sZGVyLkNsaWNrTGlzdGVuZXIgbGlzdGVuZXIpIHsKKyAgICAgICAgLy8gSnVzdCBoYW5kbGUgb25lIGZvciBub3c7IHN3aXRjaCB0byBhIGxpc3QgaWYgbmVjZXNzYXJ5LgorICAgICAgICBjaGVja1N0YXRlKG1DbGlja0xpc3RlbmVyID09IG51bGwpOworICAgICAgICBtQ2xpY2tMaXN0ZW5lciA9IGxpc3RlbmVyOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGFkZE9uS2V5TGlzdGVuZXIoVmlldy5PbktleUxpc3RlbmVyIGxpc3RlbmVyKSB7CisgICAgICAgIC8vIEp1c3QgaGFuZGxlIG9uZSBmb3Igbm93OyBzd2l0Y2ggdG8gYSBsaXN0IGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgY2hlY2tTdGF0ZShtS2V5TGlzdGVuZXIgPT0gbnVsbCk7CisgICAgICAgIG1LZXlMaXN0ZW5lciA9IGxpc3RlbmVyOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldEVuYWJsZWQoYm9vbGVhbiBlbmFibGVkKSB7CisgICAgICAgIHNldEVuYWJsZWRSZWN1cnNpdmUoaXRlbVZpZXcsIGVuYWJsZWQpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHNldEVuYWJsZWRSZWN1cnNpdmUoVmlldyBpdGVtVmlldywgYm9vbGVhbiBlbmFibGVkKSB7CisgICAgICAgIGlmIChpdGVtVmlldyA9PSBudWxsKSByZXR1cm47CisgICAgICAgIGlmIChpdGVtVmlldy5pc0VuYWJsZWQoKSA9PSBlbmFibGVkKSByZXR1cm47CisgICAgICAgIGl0ZW1WaWV3LnNldEVuYWJsZWQoZW5hYmxlZCk7CisKKyAgICAgICAgaWYgKGl0ZW1WaWV3IGluc3RhbmNlb2YgVmlld0dyb3VwKSB7CisgICAgICAgICAgICBmaW5hbCBWaWV3R3JvdXAgdmcgPSAoVmlld0dyb3VwKSBpdGVtVmlldzsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSB2Zy5nZXRDaGlsZENvdW50KCkgLSAxOyBpID49IDA7IGktLSkgeworICAgICAgICAgICAgICAgIHNldEVuYWJsZWRSZWN1cnNpdmUodmcuZ2V0Q2hpbGRBdChpKSwgZW5hYmxlZCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBWaWV3IGluZmxhdGVMYXlvdXQoQ29udGV4dCBjb250ZXh0LCBWaWV3R3JvdXAgcGFyZW50LCBpbnQgbGF5b3V0KSB7CisgICAgICAgIGZpbmFsIExheW91dEluZmxhdGVyIGluZmxhdGVyID0gTGF5b3V0SW5mbGF0ZXIuZnJvbShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIGluZmxhdGVyLmluZmxhdGUobGF5b3V0LCBwYXJlbnQsIGZhbHNlKTsKKyAgICB9CisKKyAgICBpbnRlcmZhY2UgQ2xpY2tMaXN0ZW5lciB7CisgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soRG9jdW1lbnRIb2xkZXIgZG9jKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9Eb2N1bWVudHNBZGFwdGVyLmphdmEgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9Eb2N1bWVudHNBZGFwdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNjMmY2MwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9kaXJsaXN0L0RvY3VtZW50c0FkYXB0ZXIuamF2YQpAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuZGlybGlzdDsKKworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5tb2RlbC5Eb2N1bWVudEluZm8uZ2V0Q3Vyc29yU3RyaW5nOworCitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5DdXJzb3I7CitpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5Eb2N1bWVudHNDb250cmFjdC5Eb2N1bWVudDsKK2ltcG9ydCBhbmRyb2lkLnN1cHBvcnQudjcud2lkZ2V0LkdyaWRMYXlvdXRNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC52Ny53aWRnZXQuUmVjeWNsZXJWaWV3OworaW1wb3J0IGFuZHJvaWQudXRpbC5TcGFyc2VBcnJheTsKKworaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlN0YXRlOworCitpbXBvcnQgamF2YS5uaW8uY2hhbm5lbHMuVW5zdXBwb3J0ZWRBZGRyZXNzVHlwZUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworLyoqCisgKiBEb2N1bWVudHNBZGFwdGVyIHByb3ZpZGVzIGdsdWUgYmV0d2VlbiBhIGRpcmVjdG9yeSBNb2RlbCwgYW5kIFJlY3lsY2VyVmlldy4gV2UndmUKKyAqIGFic3RyYWN0ZWQgdGhpcyBhIGJpdCBpbiBvcmRlciB0byBkZWNvbXBvc2Ugc29tZSBzcGVjaWFsaXplZCBzdXBwb3J0CisgKiBmb3IgYWRkaW5nIGR1bW15IGxheW91dCBvYmplY3RzIChAc2VlIFNlY3Rpb25CcmVha0RvY3VtZW50c0FkYXB0ZXIpLiBIYW5kbGluZyBvZiB0aGUKKyAqIGR1bW15IGxheW91dCBvYmplY3RzIHdhcyBlcnJvciBwcm9uZSB3aGVuIGludGVyc3BlcnNlZCB3aXRoIHRoZSBjb3JlIG1vZGUgLyBhZGFwdGVyIGNvZGUuCisgKgorICogQHNlZSBNb2RlbEJhY2tlZERvY3VtZW50c0FkYXB0ZXIKKyAqIEBzZWUgU2VjdGlvbkJyZWFrRG9jdW1lbnRzQWRhcHRlcgorICovCithYnN0cmFjdCBjbGFzcyBEb2N1bWVudHNBZGFwdGVyCisgICAgICAgIGV4dGVuZHMgUmVjeWNsZXJWaWV3LkFkYXB0ZXI8RG9jdW1lbnRIb2xkZXI+CisgICAgICAgIGltcGxlbWVudHMgTW9kZWwuVXBkYXRlTGlzdGVuZXIgeworCisgICAgLy8gUGF5bG9hZHMgZm9yIG5vdGlmeUl0ZW1DaGFuZ2UgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBzZWxlY3Rpb24gYW5kIG90aGVyIGV2ZW50cy4KKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIFNFTEVDVElPTl9DSEFOR0VEX01BUktFUiA9ICJTZWxlY3Rpb24tQ2hhbmdlZCI7CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBtb2RlbCBJRHMgb2YgaXRlbXMgY3VycmVudGx5IGluIHRoZSBhZGFwdGVyLiBFeGNsdWRlcyBpdGVtcyB0aGF0IGFyZQorICAgICAqIGN1cnJlbnRseSBoaWRkZW4gKHNlZSB7QGxpbmsgI2hpZGUoU3RyaW5nLi4uKX0pLgorICAgICAqCisgICAgICogQHJldHVybiBBIGxpc3Qgb2YgTW9kZWwgSURzLgorICAgICAqLworICAgIGFic3RyYWN0IExpc3Q8U3RyaW5nPiBnZXRNb2RlbElkcygpOworCisgICAgLyoqCisgICAgICogVHJpZ2dlcnMgaXRlbS1jaGFuZ2Ugbm90aWZpY2F0aW9ucyBieSBzdGFibGUgSUQgKGFzIG9wcG9zZWQgdG8gcG9zaXRpb24pLgorICAgICAqIFBhc3NpbmcgYW4gdW5yZWNvZ25pemVkIElEIHdpbGwgcmVzdWx0IGluIGEgd2FybmluZyBpbiBsb2djYXQsIGJ1dCBubyBvdGhlciBlcnJvci4KKyAgICAgKi8KKyAgICBhYnN0cmFjdCB2b2lkIG9uSXRlbVNlbGVjdGlvbkNoYW5nZWQoU3RyaW5nIGlkKTsKKworICAgIC8qKgorICAgICAqIEByZXR1cm4gVGhlIG1vZGVsIElEIG9mIHRoZSBpdGVtIGF0IHRoZSBnaXZlbiBhZGFwdGVyIHBvc2l0aW9uLgorICAgICAqLworICAgIGFic3RyYWN0IFN0cmluZyBnZXRNb2RlbElkKGludCBwb3NpdGlvbik7CisKKyAgICAvKioKKyAgICAgKiBIaWRlcyBhIHNldCBvZiBpdGVtcyBmcm9tIHRoZSBhc3NvY2lhdGVkIFJlY3ljbGVyVmlldy4KKyAgICAgKgorICAgICAqIEBwYXJhbSBpZHMgVGhlIE1vZGVsIElEcyBvZiB0aGUgaXRlbXMgdG8gaGlkZS4KKyAgICAgKiBAcmV0dXJuIEEgU3BhcnNlQXJyYXkgdGhhdCBtYXBzIHRoZSBoaWRkZW4gSURzIHRvIHRoZWlyIG9sZCBwb3NpdGlvbnMuIFRoaXMgY2FuIGJlIHVzZWQKKyAgICAgKiAgICAgICAgIHRvIHtAbGluayAjdW5oaWRlfSB0aGUgaXRlbXMgaWYgbmVjZXNzYXJ5LgorICAgICAqLworICAgIGFic3RyYWN0IHB1YmxpYyBTcGFyc2VBcnJheTxTdHJpbmc+IGhpZGUoU3RyaW5nLi4uIGlkcyk7CisKKyAgICAvKioKKyAgICAgKiBVbmhpZGVzIGEgc2V0IG9mIHByZXZpb3VzbHkgaGlkZGVuIGl0ZW1zLgorICAgICAqCisgICAgICogQHBhcmFtIGlkcyBBIHNwYXJzZSBhcnJheSBvZiBJRHMgZnJvbSBhIHByZXZpb3VzIGNhbGwgdG8ge0BsaW5rICNoaWRlfS4KKyAgICAgKi8KKyAgICBhYnN0cmFjdCB2b2lkIHVuaGlkZShTcGFyc2VBcnJheTxTdHJpbmc+IGlkcyk7CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgY2xhc3MgdGhhdCB5aWVsZHMgdGhlIHNwYW4gc2l6ZSBmb3IgYSBwYXJ0aWN1bGFyIGVsZW1lbnQuIFRoaXMgaXMKKyAgICAgKiBwcmltYXJpbHkgdXNlZnVsIGluIHtAbGluayBTZWN0aW9uQnJlYWtEb2N1bWVudHNBZGFwdGVyV3JhcHBlcn0gd2hlcmUKKyAgICAgKiB3ZSBhZGp1c3Qgc2l6ZXMuCisgICAgICovCisgICAgR3JpZExheW91dE1hbmFnZXIuU3BhblNpemVMb29rdXAgY3JlYXRlU3BhblNpemVMb29rdXAoKSB7CisgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEFkZHJlc3NUeXBlRXhjZXB0aW9uKCk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2xlYW4gaXNEaXJlY3RvcnkoQ3Vyc29yIGN1cnNvcikgeworICAgICAgICBmaW5hbCBTdHJpbmcgbWltZVR5cGUgPSBnZXRDdXJzb3JTdHJpbmcoY3Vyc29yLCBEb2N1bWVudC5DT0xVTU5fTUlNRV9UWVBFKTsKKyAgICAgICAgcmV0dXJuIERvY3VtZW50Lk1JTUVfVFlQRV9ESVIuZXF1YWxzKG1pbWVUeXBlKTsKKyAgICB9CisKKyAgICBib29sZWFuIGlzRGlyZWN0b3J5KE1vZGVsIG1vZGVsLCBpbnQgcG9zaXRpb24pIHsKKyAgICAgICAgU3RyaW5nIG1vZGVsSWQgPSBnZXRNb2RlbElkcygpLmdldChwb3NpdGlvbik7CisgICAgICAgIEN1cnNvciBjdXJzb3IgPSBtb2RlbC5nZXRJdGVtKG1vZGVsSWQpOworICAgICAgICByZXR1cm4gaXNEaXJlY3RvcnkoY3Vyc29yKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBFbnZpcm9ubWVudGFsIGFjY2VzcyBmb3IgVmlldyBhZGFwdGVyIGltcGxlbWVudGF0aW9ucy4KKyAgICAgKi8KKyAgICBpbnRlcmZhY2UgRW52aXJvbm1lbnQgeworICAgICAgICBDb250ZXh0IGdldENvbnRleHQoKTsKKyAgICAgICAgaW50IGdldENvbHVtbkNvdW50KCk7CisgICAgICAgIFN0YXRlIGdldERpc3BsYXlTdGF0ZSgpOworICAgICAgICBib29sZWFuIGlzU2VsZWN0ZWQoU3RyaW5nIGlkKTsKKyAgICAgICAgTW9kZWwgZ2V0TW9kZWwoKTsKKyAgICAgICAgYm9vbGVhbiBpc0RvY3VtZW50RW5hYmxlZChTdHJpbmcgbWltZVR5cGUsIGludCBmbGFncyk7CisgICAgICAgIHZvaWQgaW5pdERvY3VtZW50SG9sZGVyKERvY3VtZW50SG9sZGVyIGhvbGRlcik7CisgICAgICAgIHZvaWQgb25CaW5kRG9jdW1lbnRIb2xkZXIoRG9jdW1lbnRIb2xkZXIgaG9sZGVyLCBDdXJzb3IgY3Vyc29yKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9FbXB0eURvY3VtZW50SG9sZGVyLmphdmEgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9FbXB0eURvY3VtZW50SG9sZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI2N2E1YgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9kaXJsaXN0L0VtcHR5RG9jdW1lbnRIb2xkZXIuamF2YQpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5kaXJsaXN0OworCitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5DdXJzb3I7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuU3BhY2U7CisKK2ltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5SOworaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlN0YXRlOworCitmaW5hbCBjbGFzcyBFbXB0eURvY3VtZW50SG9sZGVyIGV4dGVuZHMgRG9jdW1lbnRIb2xkZXIgeworICAgIHB1YmxpYyBFbXB0eURvY3VtZW50SG9sZGVyKENvbnRleHQgY29udGV4dCkgeworICAgICAgICBzdXBlcihjb250ZXh0LCBuZXcgU3BhY2UoY29udGV4dCkpOworCisgICAgICAgIC8vIFBlciBVWCBzcGVjLCB0aGlzIHB1dHMgYSBiaWdnZXIgZ2FwIGJldHdlZW4gdGhlIGZvbGRlcnMgYW5kIGRvY3VtZW50cyBpbiB0aGUgZ3JpZC4KKyAgICAgICAgZmluYWwgaW50IGdyaWRNYXJnaW4gPSBjb250ZXh0LmdldFJlc291cmNlcygpLmdldERpbWVuc2lvblBpeGVsU2l6ZShSLmRpbWVuLmdyaWRfaXRlbV9tYXJnaW4pOworICAgICAgICBpdGVtVmlldy5zZXRNaW5pbXVtSGVpZ2h0KGdyaWRNYXJnaW4gKiAyKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBiaW5kKEN1cnNvciBjdXJzb3IsIFN0cmluZyBtb2RlbElkLCBTdGF0ZSBzdGF0ZSkgeworICAgICAgICAvLyBOb3RoaW5nIHRvIGJpbmQuCisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9HcmlkRGlyZWN0b3J5SG9sZGVyLmphdmEgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9HcmlkRGlyZWN0b3J5SG9sZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFmZjI2MwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9kaXJsaXN0L0dyaWREaXJlY3RvcnlIb2xkZXIuamF2YQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5kaXJsaXN0OworCitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLm1vZGVsLkRvY3VtZW50SW5mby5nZXRDdXJzb3JTdHJpbmc7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuUHJlY29uZGl0aW9ucy5jaGVja05vdE51bGw7CisKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKK2ltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLkN1cnNvcjsKK2ltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLkRvY3VtZW50c0NvbnRyYWN0LkRvY3VtZW50OworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuVGV4dFZpZXc7CisKK2ltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5SOworaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlN0YXRlOworCitmaW5hbCBjbGFzcyBHcmlkRGlyZWN0b3J5SG9sZGVyIGV4dGVuZHMgRG9jdW1lbnRIb2xkZXIgeworICAgIGZpbmFsIFRleHRWaWV3IG1UaXRsZTsKKyAgICBwdWJsaWMgR3JpZERpcmVjdG9yeUhvbGRlcihDb250ZXh0IGNvbnRleHQsIFZpZXdHcm91cCBwYXJlbnQpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgcGFyZW50LCBSLmxheW91dC5pdGVtX2Rpcl9ncmlkKTsKKworICAgICAgICBtVGl0bGUgPSAoVGV4dFZpZXcpIGl0ZW1WaWV3LmZpbmRWaWV3QnlJZChhbmRyb2lkLlIuaWQudGl0bGUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEJpbmQgdGhpcyB2aWV3IHRvIHRoZSBnaXZlbiBkb2N1bWVudCBmb3IgZGlzcGxheS4KKyAgICAgKiBAcGFyYW0gY3Vyc29yIFBvaW50aW5nIHRvIHRoZSBpdGVtIHRvIGJlIGJvdW5kLgorICAgICAqIEBwYXJhbSBtb2RlbElkIFRoZSBtb2RlbCBJRCBvZiB0aGUgaXRlbS4KKyAgICAgKiBAcGFyYW0gc3RhdGUgQ3VycmVudCBkaXNwbGF5IHN0YXRlLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGJpbmQoQ3Vyc29yIGN1cnNvciwgU3RyaW5nIG1vZGVsSWQsIFN0YXRlIHN0YXRlKSB7CisgICAgICAgIGNoZWNrTm90TnVsbChjdXJzb3IsICJDdXJzb3IgY2Fubm90IGJlIG51bGwuIik7CisKKyAgICAgICAgdGhpcy5tb2RlbElkID0gbW9kZWxJZDsKKworICAgICAgICBmaW5hbCBTdHJpbmcgZG9jRGlzcGxheU5hbWUgPSBnZXRDdXJzb3JTdHJpbmcoY3Vyc29yLCBEb2N1bWVudC5DT0xVTU5fRElTUExBWV9OQU1FKTsKKyAgICAgICAgbVRpdGxlLnNldFRleHQoZG9jRGlzcGxheU5hbWUpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9kaXJsaXN0L0dyaWREb2N1bWVudEhvbGRlci5qYXZhIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL2Rpcmxpc3QvR3JpZERvY3VtZW50SG9sZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWYzNGFjMwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9kaXJsaXN0L0dyaWREb2N1bWVudEhvbGRlci5qYXZhCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5kaXJsaXN0OworCitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLm1vZGVsLkRvY3VtZW50SW5mby5nZXRDdXJzb3JJbnQ7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLm1vZGVsLkRvY3VtZW50SW5mby5nZXRDdXJzb3JMb25nOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5tb2RlbC5Eb2N1bWVudEluZm8uZ2V0Q3Vyc29yU3RyaW5nOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLlByZWNvbmRpdGlvbnMuY2hlY2tOb3ROdWxsOworCitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5DdXJzb3I7CitpbXBvcnQgYW5kcm9pZC5uZXQuVXJpOworaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuRG9jdW1lbnRzQ29udHJhY3Q7CitpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5Eb2N1bWVudHNDb250cmFjdC5Eb2N1bWVudDsKK2ltcG9ydCBhbmRyb2lkLnRleHQuZm9ybWF0LkZvcm1hdHRlcjsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwOworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkltYWdlVmlldzsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5UZXh0VmlldzsKKworaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLkljb25VdGlsczsKK2ltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5SOworaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlJvb3RDdXJzb3JXcmFwcGVyOworaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlNoYXJlZDsKK2ltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5TdGF0ZTsKKworZmluYWwgY2xhc3MgR3JpZERvY3VtZW50SG9sZGVyIGV4dGVuZHMgRG9jdW1lbnRIb2xkZXIgeworICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gbUhpZGVUaXRsZXM7CisKKyAgICBmaW5hbCBUZXh0VmlldyBtVGl0bGU7CisgICAgZmluYWwgVGV4dFZpZXcgbURhdGU7CisgICAgZmluYWwgVGV4dFZpZXcgbVNpemU7CisgICAgZmluYWwgSW1hZ2VWaWV3IG1JY29uTWltZUxnOworICAgIGZpbmFsIEltYWdlVmlldyBtSWNvbk1pbWVTbTsKKyAgICBmaW5hbCBJbWFnZVZpZXcgbUljb25UaHVtYjsKKyAgICBmaW5hbCBJY29uSGVscGVyIG1JY29uSGVscGVyOworCisKKyAgICBwdWJsaWMgR3JpZERvY3VtZW50SG9sZGVyKENvbnRleHQgY29udGV4dCwgVmlld0dyb3VwIHBhcmVudCwgSWNvbkhlbHBlciBpY29uSGVscGVyKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIHBhcmVudCwgUi5sYXlvdXQuaXRlbV9kb2NfZ3JpZCk7CisKKyAgICAgICAgbVRpdGxlID0gKFRleHRWaWV3KSBpdGVtVmlldy5maW5kVmlld0J5SWQoYW5kcm9pZC5SLmlkLnRpdGxlKTsKKyAgICAgICAgbURhdGUgPSAoVGV4dFZpZXcpIGl0ZW1WaWV3LmZpbmRWaWV3QnlJZChSLmlkLmRhdGUpOworICAgICAgICBtU2l6ZSA9IChUZXh0VmlldykgaXRlbVZpZXcuZmluZFZpZXdCeUlkKFIuaWQuc2l6ZSk7CisgICAgICAgIG1JY29uTWltZUxnID0gKEltYWdlVmlldykgaXRlbVZpZXcuZmluZFZpZXdCeUlkKFIuaWQuaWNvbl9taW1lKTsKKyAgICAgICAgbUljb25UaHVtYiA9IChJbWFnZVZpZXcpIGl0ZW1WaWV3LmZpbmRWaWV3QnlJZChSLmlkLmljb25fdGh1bWIpOworICAgICAgICBtSWNvbk1pbWVTbSA9IChJbWFnZVZpZXcpIGl0ZW1WaWV3LmZpbmRWaWV3QnlJZChhbmRyb2lkLlIuaWQuaWNvbjEpOworICAgICAgICBtSWNvbkhlbHBlciA9IGljb25IZWxwZXI7CisgICAgfQorCisgICAgLyoqCisgICAgICogQmluZCB0aGlzIHZpZXcgdG8gdGhlIGdpdmVuIGRvY3VtZW50IGZvciBkaXNwbGF5LgorICAgICAqIEBwYXJhbSBjdXJzb3IgUG9pbnRpbmcgdG8gdGhlIGl0ZW0gdG8gYmUgYm91bmQuCisgICAgICogQHBhcmFtIG1vZGVsSWQgVGhlIG1vZGVsIElEIG9mIHRoZSBpdGVtLgorICAgICAqIEBwYXJhbSBzdGF0ZSBDdXJyZW50IGRpc3BsYXkgc3RhdGUuCisgICAgICovCisgICAgcHVibGljIHZvaWQgYmluZChDdXJzb3IgY3Vyc29yLCBTdHJpbmcgbW9kZWxJZCwgU3RhdGUgc3RhdGUpIHsKKyAgICAgICAgdGhpcy5tb2RlbElkID0gbW9kZWxJZDsKKworICAgICAgICBjaGVja05vdE51bGwoY3Vyc29yLCAiQ3Vyc29yIGNhbm5vdCBiZSBudWxsLiIpOworCisgICAgICAgIGZpbmFsIFN0cmluZyBkb2NBdXRob3JpdHkgPSBnZXRDdXJzb3JTdHJpbmcoY3Vyc29yLCBSb290Q3Vyc29yV3JhcHBlci5DT0xVTU5fQVVUSE9SSVRZKTsKKyAgICAgICAgZmluYWwgU3RyaW5nIGRvY0lkID0gZ2V0Q3Vyc29yU3RyaW5nKGN1cnNvciwgRG9jdW1lbnQuQ09MVU1OX0RPQ1VNRU5UX0lEKTsKKyAgICAgICAgZmluYWwgU3RyaW5nIGRvY01pbWVUeXBlID0gZ2V0Q3Vyc29yU3RyaW5nKGN1cnNvciwgRG9jdW1lbnQuQ09MVU1OX01JTUVfVFlQRSk7CisgICAgICAgIGZpbmFsIFN0cmluZyBkb2NEaXNwbGF5TmFtZSA9IGdldEN1cnNvclN0cmluZyhjdXJzb3IsIERvY3VtZW50LkNPTFVNTl9ESVNQTEFZX05BTUUpOworICAgICAgICBmaW5hbCBsb25nIGRvY0xhc3RNb2RpZmllZCA9IGdldEN1cnNvckxvbmcoY3Vyc29yLCBEb2N1bWVudC5DT0xVTU5fTEFTVF9NT0RJRklFRCk7CisgICAgICAgIGZpbmFsIGludCBkb2NJY29uID0gZ2V0Q3Vyc29ySW50KGN1cnNvciwgRG9jdW1lbnQuQ09MVU1OX0lDT04pOworICAgICAgICBmaW5hbCBpbnQgZG9jRmxhZ3MgPSBnZXRDdXJzb3JJbnQoY3Vyc29yLCBEb2N1bWVudC5DT0xVTU5fRkxBR1MpOworICAgICAgICBmaW5hbCBsb25nIGRvY1NpemUgPSBnZXRDdXJzb3JMb25nKGN1cnNvciwgRG9jdW1lbnQuQ09MVU1OX1NJWkUpOworCisgICAgICAgIG1JY29uSGVscGVyLnN0b3BMb2FkaW5nKG1JY29uVGh1bWIpOworCisgICAgICAgIG1JY29uTWltZUxnLmFuaW1hdGUoKS5jYW5jZWwoKTsKKyAgICAgICAgbUljb25NaW1lTGcuc2V0QWxwaGEoMWYpOworICAgICAgICBtSWNvblRodW1iLmFuaW1hdGUoKS5jYW5jZWwoKTsKKyAgICAgICAgbUljb25UaHVtYi5zZXRBbHBoYSgwZik7CisKKyAgICAgICAgbUljb25NaW1lU20uc2V0SW1hZ2VEcmF3YWJsZShJY29uVXRpbHMubG9hZE1pbWVJY29uKG1Db250ZXh0LCBkb2NNaW1lVHlwZSkpOworCisgICAgICAgIGZpbmFsIFVyaSB1cmkgPSBEb2N1bWVudHNDb250cmFjdC5idWlsZERvY3VtZW50VXJpKGRvY0F1dGhvcml0eSwgZG9jSWQpOworICAgICAgICBtSWNvbkhlbHBlci5sb2FkVGh1bWJuYWlsKHVyaSwgZG9jTWltZVR5cGUsIGRvY0ZsYWdzLCBkb2NJY29uLCBtSWNvblRodW1iLCBtSWNvbk1pbWVMZyk7CisKKyAgICAgICAgaWYgKG1IaWRlVGl0bGVzKSB7CisgICAgICAgICAgICBtVGl0bGUuc2V0VmlzaWJpbGl0eShWaWV3LkdPTkUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbVRpdGxlLnNldFRleHQoZG9jRGlzcGxheU5hbWUpOworICAgICAgICAgICAgbVRpdGxlLnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChkb2NMYXN0TW9kaWZpZWQgPT0gLTEpIHsKKyAgICAgICAgICAgIG1EYXRlLnNldFRleHQobnVsbCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtRGF0ZS5zZXRUZXh0KFNoYXJlZC5mb3JtYXRUaW1lKG1Db250ZXh0LCBkb2NMYXN0TW9kaWZpZWQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghc3RhdGUuc2hvd1NpemUgfHwgRG9jdW1lbnQuTUlNRV9UWVBFX0RJUi5lcXVhbHMoZG9jTWltZVR5cGUpIHx8IGRvY1NpemUgPT0gLTEpIHsKKyAgICAgICAgICAgIG1TaXplLnNldFZpc2liaWxpdHkoVmlldy5HT05FKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1TaXplLnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKKyAgICAgICAgICAgIG1TaXplLnNldFRleHQoRm9ybWF0dGVyLmZvcm1hdEZpbGVTaXplKG1Db250ZXh0LCBkb2NTaXplKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIHdoZXRoZXIgdG8gaGlkZSB0aXRsZXMgb24gc3Vic2VxdWVudGx5IGNyZWF0ZWQgR3JpZERvY3VtZW50SG9sZGVyIGl0ZW1zLgorICAgICAqIEBwYXJhbSBoaWRlVGl0bGVzCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyB2b2lkIHNldEhpZGVUaXRsZXMoYm9vbGVhbiBoaWRlVGl0bGVzKSB7CisgICAgICAgIG1IaWRlVGl0bGVzID0gaGlkZVRpdGxlczsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9JY29uSGVscGVyLmphdmEgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9JY29uSGVscGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY3MGVhZgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9kaXJsaXN0L0ljb25IZWxwZXIuamF2YQpAQCAtMCwwICsxLDI1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuZGlybGlzdDsKKworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5TaGFyZWQuREVCVUc7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlN0YXRlLk1PREVfR1JJRDsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuU3RhdGUuTU9ERV9MSVNUOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5TdGF0ZS5NT0RFX1VOS05PV047CisKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFByb3ZpZGVyQ2xpZW50OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZW50UmVzb2x2ZXI7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXA7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5Qb2ludDsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlOworaW1wb3J0IGFuZHJvaWQubmV0LlVyaTsKK2ltcG9ydCBhbmRyb2lkLm9zLkFzeW5jVGFzazsKK2ltcG9ydCBhbmRyb2lkLm9zLkNhbmNlbGxhdGlvblNpZ25hbDsKK2ltcG9ydCBhbmRyb2lkLm9zLk9wZXJhdGlvbkNhbmNlbGVkRXhjZXB0aW9uOworaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuRG9jdW1lbnRzQ29udHJhY3Q7CitpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5Eb2N1bWVudHNDb250cmFjdC5Eb2N1bWVudDsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkltYWdlVmlldzsKKworaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLkRvY3VtZW50c0FwcGxpY2F0aW9uOworaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLkljb25VdGlsczsKK2ltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5NaW1lUHJlZGljYXRlOworaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlByb3ZpZGVyRXhlY3V0b3I7CitpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuUHJvdmlkZXJFeGVjdXRvci5QcmVlbXB0YWJsZTsKK2ltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5SOworaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlRodW1ibmFpbENhY2hlOworCisvKioKKyAqIEEgY2xhc3MgdG8gYXNzaXN0IHdpdGggbG9hZGluZyBhbmQgbWFuYWdpbmcgdGhlIEltYWdlcyAoaS5lLiB0aHVtYm5haWxzIGFuZCBpY29ucykgYXNzb2NpYXRlZAorICogd2l0aCBpdGVtcyBpbiB0aGUgZGlyZWN0b3J5IGxpc3RpbmcuCisgKi8KK3B1YmxpYyBjbGFzcyBJY29uSGVscGVyIHsKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgVEFHID0gIkljb25IZWxwZXIiOworCisgICAgcHJpdmF0ZSBDb250ZXh0IG1Db250ZXh0OworICAgIHByaXZhdGUgVGh1bWJuYWlsQ2FjaGUgbUNhY2hlOworICAgIHByaXZhdGUgUG9pbnQgbVRodW1iU2l6ZTsKKyAgICAvLyBUaGUgZGlzcGxheSBtb2RlIChNT0RFX0dSSUQsIE1PREVfTElTVCwgZXRjKS4KKyAgICBwcml2YXRlIGludCBtTW9kZTsKKyAgICBwcml2YXRlIGJvb2xlYW4gbVRodW1ibmFpbHNFbmFibGVkID0gdHJ1ZTsKKworICAgIC8qKgorICAgICAqIEBwYXJhbSBjb250ZXh0CisgICAgICogQHBhcmFtIG1vZGUgTU9ERV9HUklEIG9yIE1PREVfTElTVAorICAgICAqLworICAgIHB1YmxpYyBJY29uSGVscGVyKENvbnRleHQgY29udGV4dCwgaW50IG1vZGUpIHsKKyAgICAgICAgbUNvbnRleHQgPSBjb250ZXh0OworICAgICAgICBzZXRNb2RlKG1vZGUpOworICAgICAgICBtQ2FjaGUgPSBEb2N1bWVudHNBcHBsaWNhdGlvbi5nZXRUaHVtYm5haWxzQ2FjaGUoY29udGV4dCwgbVRodW1iU2l6ZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogRW5hYmxlcyBvciBkaXNhYmxlcyB0aHVtYm5haWxzLiBXaGVuIHRodW1ibmFpbHMgYXJlIGRpc2FibGVkLCBtaW1lIGljb25zIChvciBjdXN0b20gaWNvbnMsIGlmCisgICAgICogc3BlY2lmaWVkIGJ5IHRoZSBkb2N1bWVudCkgYXJlIHVzZWQgaW5zdGVhZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBlbmFibGVkCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0VGh1bWJuYWlsc0VuYWJsZWQoYm9vbGVhbiBlbmFibGVkKSB7CisgICAgICAgIG1UaHVtYm5haWxzRW5hYmxlZCA9IGVuYWJsZWQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0cyB0aGUgY3VycmVudCBkaXNwbGF5IG1vZGUuICBUaGlzIGFmZmVjdHMgdGhlIHRodW1ibmFpbCBzaXplcyB0aGF0IGFyZSBsb2FkZWQuCisgICAgICogQHBhcmFtIG1vZGUgU2VlIHtAbGluayBTdGF0ZS5NT0RFX0xJU1R9IGFuZCB7QGxpbmsgU3RhdGUuTU9ERV9HUklEfS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRNb2RlKGludCBtb2RlKSB7CisgICAgICAgIC8vIFRPRE86IEluc3RlYWQgb2YgZXhwb3Npbmcgc2V0TW9kZSwgbWFrZSB0aGUgbW9kZSBmaW5hbCwgYW5kIG1ha2Ugc2VwYXJhdGUgaW5zdGFuY2VzIGZvcgorICAgICAgICAvLyBncmlkL2xpc3QuCisgICAgICAgIGludCB0aHVtYlNpemU7CisgICAgICAgIHN3aXRjaCAobW9kZSkgeworICAgICAgICAgICAgY2FzZSBNT0RFX0dSSUQ6CisgICAgICAgICAgICAgICAgdGh1bWJTaXplID0gbUNvbnRleHQuZ2V0UmVzb3VyY2VzKCkuZ2V0RGltZW5zaW9uUGl4ZWxTaXplKFIuZGltZW4uZ3JpZF93aWR0aCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIE1PREVfTElTVDoKKyAgICAgICAgICAgICAgICB0aHVtYlNpemUgPSBtQ29udGV4dC5nZXRSZXNvdXJjZXMoKS5nZXREaW1lbnNpb25QaXhlbFNpemUoUi5kaW1lbi5pY29uX3NpemUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBNT0RFX1VOS05PV046CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlVuc3VwcG9ydGVkIGxheW91dCBtb2RlOiAiICsgbW9kZSk7CisgICAgICAgIH0KKyAgICAgICAgbU1vZGUgPSBtb2RlOworICAgICAgICBtVGh1bWJTaXplID0gbmV3IFBvaW50KHRodW1iU2l6ZSwgdGh1bWJTaXplKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDYW5jZWxzIGFueSBvbmdvaW5nIGxvYWQgb3BlcmF0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIEltYWdlVmlldy4KKyAgICAgKiBAcGFyYW0gaWNvbgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHN0b3BMb2FkaW5nKEltYWdlVmlldyBpY29uKSB7CisgICAgICAgIGZpbmFsIExvYWRlclRhc2sgb2xkVGFzayA9IChMb2FkZXJUYXNrKSBpY29uLmdldFRhZygpOworICAgICAgICBpZiAob2xkVGFzayAhPSBudWxsKSB7CisgICAgICAgICAgICBvbGRUYXNrLnByZWVtcHQoKTsKKyAgICAgICAgICAgIGljb24uc2V0VGFnKG51bGwpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqIEludGVybmFsIHRhc2sgZm9yIGxvYWRpbmcgdGh1bWJuYWlscyBhc3luY2hyb25vdXNseS4gKi8KKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBMb2FkZXJUYXNrCisgICAgICAgICAgICBleHRlbmRzIEFzeW5jVGFzazxVcmksIFZvaWQsIEJpdG1hcD4KKyAgICAgICAgICAgIGltcGxlbWVudHMgUHJlZW1wdGFibGUgeworICAgICAgICBwcml2YXRlIGZpbmFsIFVyaSBtVXJpOworICAgICAgICBwcml2YXRlIGZpbmFsIEltYWdlVmlldyBtSWNvbk1pbWU7CisgICAgICAgIHByaXZhdGUgZmluYWwgSW1hZ2VWaWV3IG1JY29uVGh1bWI7CisgICAgICAgIHByaXZhdGUgZmluYWwgUG9pbnQgbVRodW1iU2l6ZTsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBDYW5jZWxsYXRpb25TaWduYWwgbVNpZ25hbDsKKworICAgICAgICBwdWJsaWMgTG9hZGVyVGFzayhVcmkgdXJpLCBJbWFnZVZpZXcgaWNvbk1pbWUsIEltYWdlVmlldyBpY29uVGh1bWIsCisgICAgICAgICAgICAgICAgUG9pbnQgdGh1bWJTaXplKSB7CisgICAgICAgICAgICBtVXJpID0gdXJpOworICAgICAgICAgICAgbUljb25NaW1lID0gaWNvbk1pbWU7CisgICAgICAgICAgICBtSWNvblRodW1iID0gaWNvblRodW1iOworICAgICAgICAgICAgbVRodW1iU2l6ZSA9IHRodW1iU2l6ZTsKKyAgICAgICAgICAgIG1TaWduYWwgPSBuZXcgQ2FuY2VsbGF0aW9uU2lnbmFsKCk7CisgICAgICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgIlN0YXJ0aW5nIGljb24gbG9hZGVyIHRhc2sgZm9yICIgKyBtVXJpKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBwcmVlbXB0KCkgeworICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJJY29uIGxvYWRlciB0YXNrIGZvciAiICsgbVVyaSArICIgd2FzIGNhbmNlbGxlZC4iKTsKKyAgICAgICAgICAgIGNhbmNlbChmYWxzZSk7CisgICAgICAgICAgICBtU2lnbmFsLmNhbmNlbCgpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHByb3RlY3RlZCBCaXRtYXAgZG9JbkJhY2tncm91bmQoVXJpLi4uIHBhcmFtcykgeworICAgICAgICAgICAgaWYgKGlzQ2FuY2VsbGVkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisKKyAgICAgICAgICAgIGZpbmFsIENvbnRleHQgY29udGV4dCA9IG1JY29uVGh1bWIuZ2V0Q29udGV4dCgpOworICAgICAgICAgICAgZmluYWwgQ29udGVudFJlc29sdmVyIHJlc29sdmVyID0gY29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKTsKKworICAgICAgICAgICAgQ29udGVudFByb3ZpZGVyQ2xpZW50IGNsaWVudCA9IG51bGw7CisgICAgICAgICAgICBCaXRtYXAgcmVzdWx0ID0gbnVsbDsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgY2xpZW50ID0gRG9jdW1lbnRzQXBwbGljYXRpb24uYWNxdWlyZVVuc3RhYmxlUHJvdmlkZXJPclRocm93KAorICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZXIsIG1VcmkuZ2V0QXV0aG9yaXR5KCkpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IERvY3VtZW50c0NvbnRyYWN0LmdldERvY3VtZW50VGh1bWJuYWlsKGNsaWVudCwgbVVyaSwgbVRodW1iU2l6ZSwgbVNpZ25hbCk7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGZpbmFsIFRodW1ibmFpbENhY2hlIHRodW1icyA9IERvY3VtZW50c0FwcGxpY2F0aW9uLmdldFRodW1ibmFpbHNDYWNoZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LCBtVGh1bWJTaXplKTsKKyAgICAgICAgICAgICAgICAgICAgdGh1bWJzLnB1dChtVXJpLCByZXN1bHQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgaWYgKCEoZSBpbnN0YW5jZW9mIE9wZXJhdGlvbkNhbmNlbGVkRXhjZXB0aW9uKSkgeworICAgICAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJGYWlsZWQgdG8gbG9hZCB0aHVtYm5haWwgZm9yICIgKyBtVXJpICsgIjogIiArIGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgICAgQ29udGVudFByb3ZpZGVyQ2xpZW50LnJlbGVhc2VRdWlldGx5KGNsaWVudCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHByb3RlY3RlZCB2b2lkIG9uUG9zdEV4ZWN1dGUoQml0bWFwIHJlc3VsdCkgeworICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJMb2FkZXIgdGFzayBmb3IgIiArIG1VcmkgKyAiIGNvbXBsZXRlZCIpOworCisgICAgICAgICAgICBpZiAobUljb25UaHVtYi5nZXRUYWcoKSA9PSB0aGlzICYmIHJlc3VsdCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgbUljb25UaHVtYi5zZXRUYWcobnVsbCk7CisgICAgICAgICAgICAgICAgbUljb25UaHVtYi5zZXRJbWFnZUJpdG1hcChyZXN1bHQpOworCisgICAgICAgICAgICAgICAgZmxvYXQgYWxwaGEgPSBtSWNvbk1pbWUuZ2V0QWxwaGEoKTsKKyAgICAgICAgICAgICAgICBtSWNvbk1pbWUuYW5pbWF0ZSgpLmFscGhhKDBmKS5zdGFydCgpOworICAgICAgICAgICAgICAgIG1JY29uVGh1bWIuc2V0QWxwaGEoMGYpOworICAgICAgICAgICAgICAgIG1JY29uVGh1bWIuYW5pbWF0ZSgpLmFscGhhKGFscGhhKS5zdGFydCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogTG9hZCB0aHVtYm5haWxzIGZvciBhIGRpcmVjdG9yeSBsaXN0IGl0ZW0uCisgICAgICogQHBhcmFtIHVyaSBUaGUgVVJJIGZvciB0aGUgZmlsZSBiZWluZyByZXByZXNlbnRlZC4KKyAgICAgKiBAcGFyYW0gbWltZVR5cGUgVGhlIG1pbWUgdHlwZSBvZiB0aGUgZmlsZSBiZWluZyByZXByZXNlbnRlZC4KKyAgICAgKiBAcGFyYW0gZG9jRmxhZ3MgRmxhZ3MgZm9yIHRoZSBmaWxlIGJlaW5nIHJlcHJlc2VudGVkLgorICAgICAqIEBwYXJhbSBkb2NJY29uIEN1c3RvbSBpY29uIChpZiBhbnkpIGZvciB0aGUgZmlsZSBiZWluZyByZXF1ZXN0ZWQuCisgICAgICogQHBhcmFtIGljb25UaHVtYiBUaGUgaXRlbXZpZXcncyB0aHVtYm5haWwgaWNvbi4KKyAgICAgKiBAcGFyYW0gaWNvbk1pbWUgVGhlIGl0ZW12aWV3J3MgbWltZSBpY29uLgorICAgICAqIEByZXR1cm4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBsb2FkVGh1bWJuYWlsKFVyaSB1cmksIFN0cmluZyBtaW1lVHlwZSwgaW50IGRvY0ZsYWdzLCBpbnQgZG9jSWNvbiwKKyAgICAgICAgICAgIEltYWdlVmlldyBpY29uVGh1bWIsIEltYWdlVmlldyBpY29uTWltZSkgeworICAgICAgICBib29sZWFuIGNhY2hlSGl0ID0gZmFsc2U7CisKKyAgICAgICAgZmluYWwgU3RyaW5nIGRvY0F1dGhvcml0eSA9IHVyaS5nZXRBdXRob3JpdHkoKTsKKworICAgICAgICBmaW5hbCBib29sZWFuIHN1cHBvcnRzVGh1bWJuYWlsID0gKGRvY0ZsYWdzICYgRG9jdW1lbnQuRkxBR19TVVBQT1JUU19USFVNQk5BSUwpICE9IDA7CisgICAgICAgIGZpbmFsIGJvb2xlYW4gYWxsb3dUaHVtYm5haWwgPSAobU1vZGUgPT0gTU9ERV9HUklEKQorICAgICAgICAgICAgICAgIHx8IE1pbWVQcmVkaWNhdGUubWltZU1hdGNoZXMoTWltZVByZWRpY2F0ZS5WSVNVQUxfTUlNRVMsIG1pbWVUeXBlKTsKKyAgICAgICAgZmluYWwgYm9vbGVhbiBzaG93VGh1bWJuYWlsID0gc3VwcG9ydHNUaHVtYm5haWwgJiYgYWxsb3dUaHVtYm5haWwgJiYgbVRodW1ibmFpbHNFbmFibGVkOworICAgICAgICBpZiAoc2hvd1RodW1ibmFpbCkgeworICAgICAgICAgICAgZmluYWwgQml0bWFwIGNhY2hlZFJlc3VsdCA9IG1DYWNoZS5nZXQodXJpKTsKKyAgICAgICAgICAgIGlmIChjYWNoZWRSZXN1bHQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGljb25UaHVtYi5zZXRJbWFnZUJpdG1hcChjYWNoZWRSZXN1bHQpOworICAgICAgICAgICAgICAgIGNhY2hlSGl0ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWNvblRodW1iLnNldEltYWdlRHJhd2FibGUobnVsbCk7CisgICAgICAgICAgICAgICAgZmluYWwgTG9hZGVyVGFzayB0YXNrID0gbmV3IExvYWRlclRhc2sodXJpLCBpY29uTWltZSwgaWNvblRodW1iLCBtVGh1bWJTaXplKTsKKyAgICAgICAgICAgICAgICBpY29uVGh1bWIuc2V0VGFnKHRhc2spOworICAgICAgICAgICAgICAgIFByb3ZpZGVyRXhlY3V0b3IuZm9yQXV0aG9yaXR5KGRvY0F1dGhvcml0eSkuZXhlY3V0ZSh0YXNrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChjYWNoZUhpdCkgeworICAgICAgICAgICAgaWNvbk1pbWUuc2V0SW1hZ2VEcmF3YWJsZShudWxsKTsKKyAgICAgICAgICAgIGljb25NaW1lLnNldEFscGhhKDBmKTsKKyAgICAgICAgICAgIGljb25UaHVtYi5zZXRBbHBoYSgxZik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBBZGQgYSBtaW1lIGljb24gaWYgdGhlIHRodW1ibmFpbCBpcyBiZWluZyBsb2FkZWQgaW4gdGhlIGJhY2tncm91bmQuCisgICAgICAgICAgICBpY29uVGh1bWIuc2V0SW1hZ2VEcmF3YWJsZShudWxsKTsKKyAgICAgICAgICAgIGljb25NaW1lLnNldEltYWdlRHJhd2FibGUoZ2V0RG9jdW1lbnRJY29uKAorICAgICAgICAgICAgICAgICAgICBtQ29udGV4dCwgZG9jQXV0aG9yaXR5LCBEb2N1bWVudHNDb250cmFjdC5nZXREb2N1bWVudElkKHVyaSksIG1pbWVUeXBlLCBkb2NJY29uKSk7CisgICAgICAgICAgICBpY29uTWltZS5zZXRBbHBoYSgxZik7CisgICAgICAgICAgICBpY29uVGh1bWIuc2V0QWxwaGEoMGYpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0cyBhIG1pbWUgaWNvbiBvciBwYWNrYWdlIGljb24gZm9yIGEgZmlsZS4KKyAgICAgKiBAcGFyYW0gY29udGV4dAorICAgICAqIEBwYXJhbSBhdXRob3JpdHkgVGhlIGF1dGhvcml0eSBzdHJpbmcgb2YgdGhlIGZpbGUuCisgICAgICogQHBhcmFtIGlkIFRoZSBkb2N1bWVudCBJRCBvZiB0aGUgZmlsZS4KKyAgICAgKiBAcGFyYW0gbWltZVR5cGUgVGhlIG1pbWUgdHlwZSBvZiB0aGUgZmlsZS4KKyAgICAgKiBAcGFyYW0gaWNvbiBUaGUgY3VzdG9tIGljb24gKGlmIGFueSkgb2YgdGhlIGZpbGUuCisgICAgICogQHJldHVybgorICAgICAqLworICAgIHB1YmxpYyBEcmF3YWJsZSBnZXREb2N1bWVudEljb24oQ29udGV4dCBjb250ZXh0LCBTdHJpbmcgYXV0aG9yaXR5LCBTdHJpbmcgaWQsCisgICAgICAgICAgICBTdHJpbmcgbWltZVR5cGUsIGludCBpY29uKSB7CisgICAgICAgIGlmIChpY29uICE9IDApIHsKKyAgICAgICAgICAgIHJldHVybiBJY29uVXRpbHMubG9hZFBhY2thZ2VJY29uKGNvbnRleHQsIGF1dGhvcml0eSwgaWNvbik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gSWNvblV0aWxzLmxvYWRNaW1lSWNvbihjb250ZXh0LCBtaW1lVHlwZSwgYXV0aG9yaXR5LCBpZCwgbU1vZGUpOworICAgICAgICB9CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9MaXN0RG9jdW1lbnRIb2xkZXIuamF2YSBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9kaXJsaXN0L0xpc3REb2N1bWVudEhvbGRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMmU5MWQKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9MaXN0RG9jdW1lbnRIb2xkZXIuamF2YQpAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuZGlybGlzdDsKKworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5tb2RlbC5Eb2N1bWVudEluZm8uZ2V0Q3Vyc29ySW50OworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5tb2RlbC5Eb2N1bWVudEluZm8uZ2V0Q3Vyc29yTG9uZzsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkubW9kZWwuRG9jdW1lbnRJbmZvLmdldEN1cnNvclN0cmluZzsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5QcmVjb25kaXRpb25zLmNoZWNrTm90TnVsbDsKKworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2UuQ3Vyc29yOworaW1wb3J0IGFuZHJvaWQubmV0LlVyaTsKK2ltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLkRvY3VtZW50c0NvbnRyYWN0OworaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuRG9jdW1lbnRzQ29udHJhY3QuRG9jdW1lbnQ7CitpbXBvcnQgYW5kcm9pZC50ZXh0LmZvcm1hdC5Gb3JtYXR0ZXI7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdHcm91cDsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5JbWFnZVZpZXc7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuVGV4dFZpZXc7CisKK2ltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5SOworaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlJvb3RDdXJzb3JXcmFwcGVyOworaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlNoYXJlZDsKK2ltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5TdGF0ZTsKKworZmluYWwgY2xhc3MgTGlzdERvY3VtZW50SG9sZGVyIGV4dGVuZHMgRG9jdW1lbnRIb2xkZXIgeworICAgIGZpbmFsIFRleHRWaWV3IG1UaXRsZTsKKyAgICBmaW5hbCBUZXh0VmlldyBtU3VtbWFyeTsKKyAgICBmaW5hbCBUZXh0VmlldyBtRGF0ZTsKKyAgICBmaW5hbCBUZXh0VmlldyBtU2l6ZTsKKyAgICBmaW5hbCBJbWFnZVZpZXcgbUljb25NaW1lOworICAgIGZpbmFsIEltYWdlVmlldyBtSWNvblRodW1iOworICAgIGZpbmFsIEltYWdlVmlldyBtSWNvbjE7CisgICAgZmluYWwgSWNvbkhlbHBlciBtSWNvbkhlbHBlcjsKKworICAgIHB1YmxpYyBMaXN0RG9jdW1lbnRIb2xkZXIoQ29udGV4dCBjb250ZXh0LCBWaWV3R3JvdXAgcGFyZW50LCBJY29uSGVscGVyIGljb25IZWxwZXIpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgcGFyZW50LCBSLmxheW91dC5pdGVtX2RvY19saXN0KTsKKworICAgICAgICBtVGl0bGUgPSAoVGV4dFZpZXcpIGl0ZW1WaWV3LmZpbmRWaWV3QnlJZChhbmRyb2lkLlIuaWQudGl0bGUpOworICAgICAgICBtU3VtbWFyeSA9IChUZXh0VmlldykgaXRlbVZpZXcuZmluZFZpZXdCeUlkKGFuZHJvaWQuUi5pZC5zdW1tYXJ5KTsKKyAgICAgICAgbURhdGUgPSAoVGV4dFZpZXcpIGl0ZW1WaWV3LmZpbmRWaWV3QnlJZChSLmlkLmRhdGUpOworICAgICAgICBtU2l6ZSA9IChUZXh0VmlldykgaXRlbVZpZXcuZmluZFZpZXdCeUlkKFIuaWQuc2l6ZSk7CisgICAgICAgIG1JY29uTWltZSA9IChJbWFnZVZpZXcpIGl0ZW1WaWV3LmZpbmRWaWV3QnlJZChSLmlkLmljb25fbWltZSk7CisgICAgICAgIG1JY29uVGh1bWIgPSAoSW1hZ2VWaWV3KSBpdGVtVmlldy5maW5kVmlld0J5SWQoUi5pZC5pY29uX3RodW1iKTsKKyAgICAgICAgbUljb24xID0gKEltYWdlVmlldykgaXRlbVZpZXcuZmluZFZpZXdCeUlkKGFuZHJvaWQuUi5pZC5pY29uMSk7CisKKyAgICAgICAgbUljb25IZWxwZXIgPSBpY29uSGVscGVyOworICAgIH0KKworICAgIC8qKgorICAgICAqIEJpbmQgdGhpcyB2aWV3IHRvIHRoZSBnaXZlbiBkb2N1bWVudCBmb3IgZGlzcGxheS4KKyAgICAgKiBAcGFyYW0gY3Vyc29yIFBvaW50aW5nIHRvIHRoZSBpdGVtIHRvIGJlIGJvdW5kLgorICAgICAqIEBwYXJhbSBtb2RlbElkIFRoZSBtb2RlbCBJRCBvZiB0aGUgaXRlbS4KKyAgICAgKiBAcGFyYW0gc3RhdGUgQ3VycmVudCBkaXNwbGF5IHN0YXRlLgorICAgICAqLworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIGJpbmQoQ3Vyc29yIGN1cnNvciwgU3RyaW5nIG1vZGVsSWQsIFN0YXRlIHN0YXRlKSB7CisgICAgICAgIHRoaXMubW9kZWxJZCA9IG1vZGVsSWQ7CisKKyAgICAgICAgY2hlY2tOb3ROdWxsKGN1cnNvciwgIkN1cnNvciBjYW5ub3QgYmUgbnVsbC4iKTsKKworICAgICAgICBmaW5hbCBTdHJpbmcgZG9jQXV0aG9yaXR5ID0gZ2V0Q3Vyc29yU3RyaW5nKGN1cnNvciwgUm9vdEN1cnNvcldyYXBwZXIuQ09MVU1OX0FVVEhPUklUWSk7CisgICAgICAgIGZpbmFsIFN0cmluZyBkb2NJZCA9IGdldEN1cnNvclN0cmluZyhjdXJzb3IsIERvY3VtZW50LkNPTFVNTl9ET0NVTUVOVF9JRCk7CisgICAgICAgIGZpbmFsIFN0cmluZyBkb2NNaW1lVHlwZSA9IGdldEN1cnNvclN0cmluZyhjdXJzb3IsIERvY3VtZW50LkNPTFVNTl9NSU1FX1RZUEUpOworICAgICAgICBmaW5hbCBTdHJpbmcgZG9jRGlzcGxheU5hbWUgPSBnZXRDdXJzb3JTdHJpbmcoY3Vyc29yLCBEb2N1bWVudC5DT0xVTU5fRElTUExBWV9OQU1FKTsKKyAgICAgICAgZmluYWwgbG9uZyBkb2NMYXN0TW9kaWZpZWQgPSBnZXRDdXJzb3JMb25nKGN1cnNvciwgRG9jdW1lbnQuQ09MVU1OX0xBU1RfTU9ESUZJRUQpOworICAgICAgICBmaW5hbCBpbnQgZG9jSWNvbiA9IGdldEN1cnNvckludChjdXJzb3IsIERvY3VtZW50LkNPTFVNTl9JQ09OKTsKKyAgICAgICAgZmluYWwgaW50IGRvY0ZsYWdzID0gZ2V0Q3Vyc29ySW50KGN1cnNvciwgRG9jdW1lbnQuQ09MVU1OX0ZMQUdTKTsKKyAgICAgICAgZmluYWwgU3RyaW5nIGRvY1N1bW1hcnkgPSBnZXRDdXJzb3JTdHJpbmcoY3Vyc29yLCBEb2N1bWVudC5DT0xVTU5fU1VNTUFSWSk7CisgICAgICAgIGZpbmFsIGxvbmcgZG9jU2l6ZSA9IGdldEN1cnNvckxvbmcoY3Vyc29yLCBEb2N1bWVudC5DT0xVTU5fU0laRSk7CisKKyAgICAgICAgbUljb25IZWxwZXIuc3RvcExvYWRpbmcobUljb25UaHVtYik7CisKKyAgICAgICAgbUljb25NaW1lLmFuaW1hdGUoKS5jYW5jZWwoKTsKKyAgICAgICAgbUljb25UaHVtYi5hbmltYXRlKCkuY2FuY2VsKCk7CisKKyAgICAgICAgZmluYWwgVXJpIHVyaSA9IERvY3VtZW50c0NvbnRyYWN0LmJ1aWxkRG9jdW1lbnRVcmkoZG9jQXV0aG9yaXR5LCBkb2NJZCk7CisgICAgICAgIG1JY29uSGVscGVyLmxvYWRUaHVtYm5haWwodXJpLCBkb2NNaW1lVHlwZSwgZG9jRmxhZ3MsIGRvY0ljb24sIG1JY29uVGh1bWIsIG1JY29uTWltZSk7CisKKyAgICAgICAgbVRpdGxlLnNldFRleHQoZG9jRGlzcGxheU5hbWUpOworICAgICAgICBtVGl0bGUuc2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpOworCisgICAgICAgIGlmIChkb2NTdW1tYXJ5ICE9IG51bGwpIHsKKyAgICAgICAgICAgIG1TdW1tYXJ5LnNldFRleHQoZG9jU3VtbWFyeSk7CisgICAgICAgICAgICBtU3VtbWFyeS5zZXRWaXNpYmlsaXR5KFZpZXcuVklTSUJMRSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtU3VtbWFyeS5zZXRWaXNpYmlsaXR5KFZpZXcuSU5WSVNJQkxFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChkb2NMYXN0TW9kaWZpZWQgPT0gLTEpIHsKKyAgICAgICAgICAgIG1EYXRlLnNldFRleHQobnVsbCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtRGF0ZS5zZXRUZXh0KFNoYXJlZC5mb3JtYXRUaW1lKG1Db250ZXh0LCBkb2NMYXN0TW9kaWZpZWQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghc3RhdGUuc2hvd1NpemUgfHwgRG9jdW1lbnQuTUlNRV9UWVBFX0RJUi5lcXVhbHMoZG9jTWltZVR5cGUpIHx8IGRvY1NpemUgPT0gLTEpIHsKKyAgICAgICAgICAgIG1TaXplLnNldFZpc2liaWxpdHkoVmlldy5HT05FKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1TaXplLnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKKyAgICAgICAgICAgIG1TaXplLnNldFRleHQoRm9ybWF0dGVyLmZvcm1hdEZpbGVTaXplKG1Db250ZXh0LCBkb2NTaXplKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBzZXRFbmFibGVkKGJvb2xlYW4gZW5hYmxlZCkgeworICAgICAgICBzdXBlci5zZXRFbmFibGVkKGVuYWJsZWQpOworICAgICAgICBmaW5hbCBmbG9hdCBpY29uQWxwaGEgPSBlbmFibGVkID8gMWYgOiAwLjVmOworICAgICAgICBtSWNvbk1pbWUuc2V0QWxwaGEoaWNvbkFscGhhKTsKKyAgICAgICAgbUljb25UaHVtYi5zZXRBbHBoYShpY29uQWxwaGEpOworICAgICAgICBtSWNvbjEuc2V0QWxwaGEoaWNvbkFscGhhKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9Nb2RlbC5qYXZhIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL2Rpcmxpc3QvTW9kZWwuamF2YQppbmRleCAwZDRkMzdlLi5mMmJhZGU1IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9Nb2RlbC5qYXZhCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9kaXJsaXN0L01vZGVsLmphdmEKQEAgLTM1LDcgKzM1LDYgQEAKIGltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLkRvY3VtZW50c0NvbnRyYWN0LkRvY3VtZW50OwogaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC5hbm5vdGF0aW9uLk51bGxhYmxlOwogaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC5hbm5vdGF0aW9uLlZpc2libGVGb3JUZXN0aW5nOwotaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC52Ny53aWRnZXQuUmVjeWNsZXJWaWV3OwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKIGltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5CYXNlQWN0aXZpdHkuU2libGluZ1Byb3ZpZGVyOwpAQCAtNzQsNyArNzMsNyBAQAogICAgIEBOdWxsYWJsZSBTdHJpbmcgaW5mbzsKICAgICBATnVsbGFibGUgU3RyaW5nIGVycm9yOwogCi0gICAgTW9kZWwoQ29udGV4dCBjb250ZXh0LCBSZWN5Y2xlclZpZXcuQWRhcHRlcjw/PiB2aWV3QWRhcHRlcikgeworICAgIE1vZGVsKENvbnRleHQgY29udGV4dCkgewogICAgICAgICBtQ29udGV4dCA9IGNvbnRleHQ7CiAgICAgfQogCkBAIC04Nyw4ICs4NiwxOSBAQAogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBjcmVhdGVNb2RlbElkKEN1cnNvciBjKSB7CiAgICAgICAgIC8vIFRPRE86IE1heWJlIG1vcmUgZWZmaWNpZW50IHRvIHVzZSBqdXN0IHRoZSBkb2N1bWVudCBJRCwgaW4gY2FzZXMgd2hlcmUgdGhlcmUgaXMgb25seSBvbmUKICAgICAgICAgLy8gYXV0aG9yaXR5ICh3aGljaCBzaG91bGQgYmUgdGhlIG1ham9yaXR5IG9mIGNhc2VzKS4KLSAgICAgICAgcmV0dXJuIGdldEN1cnNvclN0cmluZyhjLCBSb290Q3Vyc29yV3JhcHBlci5DT0xVTU5fQVVUSE9SSVRZKSArCi0gICAgICAgICAgICAgICAgInwiICsgZ2V0Q3Vyc29yU3RyaW5nKGMsIERvY3VtZW50LkNPTFVNTl9ET0NVTUVOVF9JRCk7CisgICAgICAgIHJldHVybiBjcmVhdGVNb2RlbElkKAorICAgICAgICAgICAgICAgIGdldEN1cnNvclN0cmluZyhjLCBSb290Q3Vyc29yV3JhcHBlci5DT0xVTU5fQVVUSE9SSVRZKSwKKyAgICAgICAgICAgICAgICBnZXRDdXJzb3JTdHJpbmcoYywgRG9jdW1lbnQuQ09MVU1OX0RPQ1VNRU5UX0lEKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2VuZXJhdGVzIGEgTW9kZWwgSUQgZm9yIGEgY3Vyc29yIGVudHJ5IHRoYXQgcmVmZXJzIHRvIGEgZG9jdW1lbnQuIFRoZSBNb2RlbCBJRCBpcyBhIHVuaXF1ZQorICAgICAqIHN0cmluZyB0aGF0IGNhbiBiZSB1c2VkIHRvIGlkZW50aWZ5IHRoZSBkb2N1bWVudCByZWZlcnJlZCB0byBieSB0aGUgY3Vyc29yLgorICAgICAqCisgICAgICogQHBhcmFtIGMgQSBjdXJzb3IgdGhhdCByZWZlcnMgdG8gYSBkb2N1bWVudC4KKyAgICAgKi8KKyAgICBzdGF0aWMgU3RyaW5nIGNyZWF0ZU1vZGVsSWQoU3RyaW5nIGF1dGhvcml0eSwgU3RyaW5nIGRvY0lkKSB7CisgICAgICAgIHJldHVybiBhdXRob3JpdHkgKyAifCIgKyBkb2NJZDsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgbm90aWZ5VXBkYXRlTGlzdGVuZXJzKCkgewpAQCAtMTUyLDE3ICsxNjIsMTEgQEAKICAgICBwcml2YXRlIHZvaWQgdXBkYXRlTW9kZWxEYXRhKCkgewogICAgICAgICBpbnRbXSBwb3NpdGlvbnMgPSBuZXcgaW50W21DdXJzb3JDb3VudF07CiAgICAgICAgIG1JZHMuY2xlYXIoKTsKLSAgICAgICAgU3RyaW5nW10gc3RyaW5ncyA9IG51bGw7Ci0gICAgICAgIGxvbmdbXSBsb25ncyA9IG51bGw7CisgICAgICAgIFN0cmluZ1tdIHN0cmluZ1ZhbHVlcyA9IG5ldyBTdHJpbmdbbUN1cnNvckNvdW50XTsKKyAgICAgICAgbG9uZ1tdIGxvbmdWYWx1ZXMgPSBudWxsOwogCi0gICAgICAgIHN3aXRjaCAobVNvcnRPcmRlcikgewotICAgICAgICAgICAgY2FzZSBTT1JUX09SREVSX0RJU1BMQVlfTkFNRToKLSAgICAgICAgICAgICAgICBzdHJpbmdzID0gbmV3IFN0cmluZ1ttQ3Vyc29yQ291bnRdOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBTT1JUX09SREVSX0xBU1RfTU9ESUZJRUQ6Ci0gICAgICAgICAgICBjYXNlIFNPUlRfT1JERVJfU0laRToKLSAgICAgICAgICAgICAgICBsb25ncyA9IG5ldyBsb25nW21DdXJzb3JDb3VudF07Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmIChtU29ydE9yZGVyID09IFNPUlRfT1JERVJfTEFTVF9NT0RJRklFRCB8fCBtU29ydE9yZGVyID09IFNPUlRfT1JERVJfU0laRSkgeworICAgICAgICAgICAgbG9uZ1ZhbHVlcyA9IG5ldyBsb25nW21DdXJzb3JDb3VudF07CiAgICAgICAgIH0KIAogICAgICAgICBtQ3Vyc29yLm1vdmVUb1Bvc2l0aW9uKC0xKTsKQEAgLTE3NywyNyArMTgxLDI5IEBACiAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBkaXNwbGF5TmFtZSA9IGdldEN1cnNvclN0cmluZygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ3Vyc29yLCBEb2N1bWVudC5DT0xVTU5fRElTUExBWV9OQU1FKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKERvY3VtZW50Lk1JTUVfVFlQRV9ESVIuZXF1YWxzKG1pbWVUeXBlKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nc1twb3NdID0gRG9jdW1lbnRJbmZvLkRJUl9QUkVGSVggKyBkaXNwbGF5TmFtZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ1ZhbHVlc1twb3NdID0gRG9jdW1lbnRJbmZvLkRJUl9QUkVGSVggKyBkaXNwbGF5TmFtZTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ3NbcG9zXSA9IGRpc3BsYXlOYW1lOworICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nVmFsdWVzW3Bvc10gPSBkaXNwbGF5TmFtZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIFNPUlRfT1JERVJfTEFTVF9NT0RJRklFRDoKLSAgICAgICAgICAgICAgICAgICAgbG9uZ3NbcG9zXSA9IGdldEN1cnNvckxvbmcobUN1cnNvciwgRG9jdW1lbnQuQ09MVU1OX0xBU1RfTU9ESUZJRUQpOworICAgICAgICAgICAgICAgICAgICBsb25nVmFsdWVzW3Bvc10gPSBnZXRDdXJzb3JMb25nKG1DdXJzb3IsIERvY3VtZW50LkNPTFVNTl9MQVNUX01PRElGSUVEKTsKKyAgICAgICAgICAgICAgICAgICAgc3RyaW5nVmFsdWVzW3Bvc10gPSBnZXRDdXJzb3JTdHJpbmcobUN1cnNvciwgRG9jdW1lbnQuQ09MVU1OX01JTUVfVFlQRSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgU09SVF9PUkRFUl9TSVpFOgotICAgICAgICAgICAgICAgICAgICBsb25nc1twb3NdID0gZ2V0Q3Vyc29yTG9uZyhtQ3Vyc29yLCBEb2N1bWVudC5DT0xVTU5fU0laRSk7CisgICAgICAgICAgICAgICAgICAgIGxvbmdWYWx1ZXNbcG9zXSA9IGdldEN1cnNvckxvbmcobUN1cnNvciwgRG9jdW1lbnQuQ09MVU1OX1NJWkUpOworICAgICAgICAgICAgICAgICAgICBzdHJpbmdWYWx1ZXNbcG9zXSA9IGdldEN1cnNvclN0cmluZyhtQ3Vyc29yLCBEb2N1bWVudC5DT0xVTU5fTUlNRV9UWVBFKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBzd2l0Y2ggKG1Tb3J0T3JkZXIpIHsKICAgICAgICAgICAgIGNhc2UgU09SVF9PUkRFUl9ESVNQTEFZX05BTUU6Ci0gICAgICAgICAgICAgICAgYmluYXJ5U29ydChwb3NpdGlvbnMsIHN0cmluZ3MsIG1JZHMpOworICAgICAgICAgICAgICAgIGJpbmFyeVNvcnQoc3RyaW5nVmFsdWVzLCBwb3NpdGlvbnMsIG1JZHMpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBTT1JUX09SREVSX0xBU1RfTU9ESUZJRUQ6CiAgICAgICAgICAgICBjYXNlIFNPUlRfT1JERVJfU0laRToKLSAgICAgICAgICAgICAgICBiaW5hcnlTb3J0KHBvc2l0aW9ucywgbG9uZ3MsIG1JZHMpOworICAgICAgICAgICAgICAgIGJpbmFyeVNvcnQobG9uZ1ZhbHVlcywgc3RyaW5nVmFsdWVzLCBwb3NpdGlvbnMsIG1JZHMpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTIwOSwxMyArMjE1LDE5IEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogQm9ycm93ZWQgZnJvbSBUaW1Tb3J0LmJpbmFyeVNvcnQoKSwgYnV0IG1vZGlmaWVkIHRvIHNvcnQgdGhyZWUtY29sdW1uIGRhdGEgc2V0LgorICAgICAqIFNvcnRzIG1vZGVsIGRhdGEuIFRha2VzIHRocmVlIGNvbHVtbnMgb2YgaW5kZXgtY29ycmVzcG9uZGVkIGRhdGEuIFRoZSBmaXJzdCBjb2x1bW4gaXMgdGhlCisgICAgICogc29ydCBrZXkuIFJvd3MgYXJlIHNvcnRlZCBpbiBhc2NlbmRpbmcgYWxwaGFiZXRpY2FsIG9yZGVyIG9uIHRoZSBzb3J0IGtleS4gVGhpcyBjb2RlIGlzIGJhc2VkCisgICAgICogb24gVGltU29ydC5iaW5hcnlTb3J0KCkuCisgICAgICoKKyAgICAgKiBAcGFyYW0gc29ydEtleSBEYXRhIGlzIHNvcnRlZCBpbiBhc2NlbmRpbmcgYWxwaGFiZXRpY2FsIG9yZGVyLgorICAgICAqIEBwYXJhbSBwb3NpdGlvbnMgQ3Vyc29yIHBvc2l0aW9ucyB0byBiZSBzb3J0ZWQuCisgICAgICogQHBhcmFtIGlkcyBNb2RlbCBJRHMgdG8gYmUgc29ydGVkLgogICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIHZvaWQgYmluYXJ5U29ydChpbnRbXSBwb3NpdGlvbnMsIFN0cmluZ1tdIHN0cmluZ3MsIExpc3Q8U3RyaW5nPiBpZHMpIHsKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGJpbmFyeVNvcnQoU3RyaW5nW10gc29ydEtleSwgaW50W10gcG9zaXRpb25zLCBMaXN0PFN0cmluZz4gaWRzKSB7CiAgICAgICAgIGZpbmFsIGludCBjb3VudCA9IHBvc2l0aW9ucy5sZW5ndGg7CiAgICAgICAgIGZvciAoaW50IHN0YXJ0ID0gMTsgc3RhcnQgPCBjb3VudDsgc3RhcnQrKykgewogICAgICAgICAgICAgZmluYWwgaW50IHBpdm90UG9zaXRpb24gPSBwb3NpdGlvbnNbc3RhcnRdOwotICAgICAgICAgICAgZmluYWwgU3RyaW5nIHBpdm90VmFsdWUgPSBzdHJpbmdzW3N0YXJ0XTsKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyBwaXZvdFZhbHVlID0gc29ydEtleVtzdGFydF07CiAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgcGl2b3RJZCA9IGlkcy5nZXQoc3RhcnQpOwogCiAgICAgICAgICAgICBpbnQgbGVmdCA9IDA7CkBAIC0yMjUsNyArMjM3LDcgQEAKICAgICAgICAgICAgICAgICBpbnQgbWlkID0gKGxlZnQgKyByaWdodCkgPj4+IDE7CiAKICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgbGhzID0gcGl2b3RWYWx1ZTsKLSAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgcmhzID0gc3RyaW5nc1ttaWRdOworICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyByaHMgPSBzb3J0S2V5W21pZF07CiAgICAgICAgICAgICAgICAgZmluYWwgaW50IGNvbXBhcmUgPSBEb2N1bWVudEluZm8uY29tcGFyZVRvSWdub3JlQ2FzZU51bGxhYmxlKGxocywgcmhzKTsKIAogICAgICAgICAgICAgICAgIGlmIChjb21wYXJlIDwgMCkgewpAQCAtMjM5LDQ4ICsyNTEsNjggQEAKICAgICAgICAgICAgIHN3aXRjaCAobikgewogICAgICAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25zW2xlZnQgKyAyXSA9IHBvc2l0aW9uc1tsZWZ0ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgIHN0cmluZ3NbbGVmdCArIDJdID0gc3RyaW5nc1tsZWZ0ICsgMV07CisgICAgICAgICAgICAgICAgICAgIHNvcnRLZXlbbGVmdCArIDJdID0gc29ydEtleVtsZWZ0ICsgMV07CiAgICAgICAgICAgICAgICAgICAgIGlkcy5zZXQobGVmdCArIDIsIGlkcy5nZXQobGVmdCArIDEpKTsKICAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uc1tsZWZ0ICsgMV0gPSBwb3NpdGlvbnNbbGVmdF07Ci0gICAgICAgICAgICAgICAgICAgIHN0cmluZ3NbbGVmdCArIDFdID0gc3RyaW5nc1tsZWZ0XTsKKyAgICAgICAgICAgICAgICAgICAgc29ydEtleVtsZWZ0ICsgMV0gPSBzb3J0S2V5W2xlZnRdOwogICAgICAgICAgICAgICAgICAgICBpZHMuc2V0KGxlZnQgKyAxLCBpZHMuZ2V0KGxlZnQpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weShwb3NpdGlvbnMsIGxlZnQsIHBvc2l0aW9ucywgbGVmdCArIDEsIG4pOwotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KHN0cmluZ3MsIGxlZnQsIHN0cmluZ3MsIGxlZnQgKyAxLCBuKTsKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weShzb3J0S2V5LCBsZWZ0LCBzb3J0S2V5LCBsZWZ0ICsgMSwgbik7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSBuOyBpID49IDE7IC0taSkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWRzLnNldChsZWZ0ICsgaSwgaWRzLmdldChsZWZ0ICsgaSAtIDEpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBwb3NpdGlvbnNbbGVmdF0gPSBwaXZvdFBvc2l0aW9uOwotICAgICAgICAgICAgc3RyaW5nc1tsZWZ0XSA9IHBpdm90VmFsdWU7CisgICAgICAgICAgICBzb3J0S2V5W2xlZnRdID0gcGl2b3RWYWx1ZTsKICAgICAgICAgICAgIGlkcy5zZXQobGVmdCwgcGl2b3RJZCk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvKioKLSAgICAgKiBCb3Jyb3dlZCBmcm9tIFRpbVNvcnQuYmluYXJ5U29ydCgpLCBidXQgbW9kaWZpZWQgdG8gc29ydCB0aHJlZS1jb2x1bW4gZGF0YSBzZXQuCisgICAgICogU29ydHMgbW9kZWwgZGF0YS4gVGFrZXMgZm91ciBjb2x1bW5zIG9mIGluZGV4LWNvcnJlc3BvbmRlZCBkYXRhLiBUaGUgZmlyc3QgY29sdW1uIGlzIHRoZSBzb3J0CisgICAgICoga2V5LCBhbmQgdGhlIHNlY29uZCBpcyBhbiBhcnJheSBvZiBtaW1lIHR5cGVzLiBUaGUgcm93cyBhcmUgZmlyc3QgYnVja2V0ZWQgYnkgbWltZSB0eXBlCisgICAgICogKGRpcmVjdG9yaWVzIHZzIGRvY3VtZW50cykgYW5kIHRoZW4gZWFjaCBidWNrZXQgaXMgc29ydGVkIGluZGVwZW5kZW50bHkgaW4gZGVzY2VuZGluZworICAgICAqIG51bWVyaWNhbCBvcmRlciBvbiB0aGUgc29ydCBrZXkuIFRoaXMgY29kZSBpcyBiYXNlZCBvbiBUaW1Tb3J0LmJpbmFyeVNvcnQoKS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBzb3J0S2V5IERhdGEgaXMgc29ydGVkIGluIGRlc2NlbmRpbmcgbnVtZXJpY2FsIG9yZGVyLgorICAgICAqIEBwYXJhbSBtaW1lVHlwZXMgQ29ycmVzcG9uZGluZyBtaW1lIHR5cGVzLiBEaXJlY3RvcmllcyB3aWxsIGJlIHNvcnRlZCBhaGVhZCBvZiBkb2N1bWVudHMuCisgICAgICogQHBhcmFtIHBvc2l0aW9ucyBDdXJzb3IgcG9zaXRpb25zIHRvIGJlIHNvcnRlZC4KKyAgICAgKiBAcGFyYW0gaWRzIE1vZGVsIElEcyB0byBiZSBzb3J0ZWQuCiAgICAgICovCi0gICBwcml2YXRlIHN0YXRpYyB2b2lkIGJpbmFyeVNvcnQoaW50W10gcG9zaXRpb25zLCBsb25nW10gbG9uZ3MsIExpc3Q8U3RyaW5nPiBpZHMpIHsKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGJpbmFyeVNvcnQoCisgICAgICAgICAgICBsb25nW10gc29ydEtleSwgU3RyaW5nW10gbWltZVR5cGVzLCBpbnRbXSBwb3NpdGlvbnMsIExpc3Q8U3RyaW5nPiBpZHMpIHsKICAgICAgICAgZmluYWwgaW50IGNvdW50ID0gcG9zaXRpb25zLmxlbmd0aDsKICAgICAgICAgZm9yIChpbnQgc3RhcnQgPSAxOyBzdGFydCA8IGNvdW50OyBzdGFydCsrKSB7CiAgICAgICAgICAgICBmaW5hbCBpbnQgcGl2b3RQb3NpdGlvbiA9IHBvc2l0aW9uc1tzdGFydF07Ci0gICAgICAgICAgICBmaW5hbCBsb25nIHBpdm90VmFsdWUgPSBsb25nc1tzdGFydF07CisgICAgICAgICAgICBmaW5hbCBsb25nIHBpdm90VmFsdWUgPSBzb3J0S2V5W3N0YXJ0XTsKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyBwaXZvdE1pbWUgPSBtaW1lVHlwZXNbc3RhcnRdOwogICAgICAgICAgICAgZmluYWwgU3RyaW5nIHBpdm90SWQgPSBpZHMuZ2V0KHN0YXJ0KTsKIAogICAgICAgICAgICAgaW50IGxlZnQgPSAwOwogICAgICAgICAgICAgaW50IHJpZ2h0ID0gc3RhcnQ7CiAKICAgICAgICAgICAgIHdoaWxlIChsZWZ0IDwgcmlnaHQpIHsKLSAgICAgICAgICAgICAgICBpbnQgbWlkID0gKGxlZnQgKyByaWdodCkgPj4+IDE7CisgICAgICAgICAgICAgICAgaW50IG1pZCA9ICgobGVmdCArIHJpZ2h0KSA+Pj4gMSk7CiAKLSAgICAgICAgICAgICAgICBmaW5hbCBsb25nIGxocyA9IHBpdm90VmFsdWU7Ci0gICAgICAgICAgICAgICAgZmluYWwgbG9uZyByaHMgPSBsb25nc1ttaWRdOwotICAgICAgICAgICAgICAgIC8vIFNvcnQgaW4gZGVzY2VuZGluZyBudW1lcmljYWwgb3JkZXIuIFRoaXMgbWF0Y2hlcyBsZWdhY3kgYmVoYXZpb3VyLCB3aGljaCB5aWVsZHMKLSAgICAgICAgICAgICAgICAvLyBsYXJnZXN0IG9yIG1vc3QgcmVjZW50IGl0ZW1zIG9uIHRvcC4KLSAgICAgICAgICAgICAgICBmaW5hbCBpbnQgY29tcGFyZSA9IC1Mb25nLmNvbXBhcmUobGhzLCByaHMpOworICAgICAgICAgICAgICAgIC8vIEZpcnN0IGJ1Y2tldCBieSBtaW1lIHR5cGUuICBEaXJlY3RvcmllcyBhbHdheXMgZ28gaW4gZnJvbnQuCisgICAgICAgICAgICAgICAgaW50IGNvbXBhcmUgPSAwOworICAgICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gbGhzSXNEaXIgPSBEb2N1bWVudC5NSU1FX1RZUEVfRElSLmVxdWFscyhwaXZvdE1pbWUpOworICAgICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gcmhzSXNEaXIgPSBEb2N1bWVudC5NSU1FX1RZUEVfRElSLmVxdWFscyhtaW1lVHlwZXNbbWlkXSk7CisgICAgICAgICAgICAgICAgaWYgKGxoc0lzRGlyICYmICFyaHNJc0RpcikgeworICAgICAgICAgICAgICAgICAgICBjb21wYXJlID0gLTE7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghbGhzSXNEaXIgJiYgcmhzSXNEaXIpIHsKKyAgICAgICAgICAgICAgICAgICAgY29tcGFyZSA9IDE7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZmluYWwgbG9uZyBsaHMgPSBwaXZvdFZhbHVlOworICAgICAgICAgICAgICAgICAgICBmaW5hbCBsb25nIHJocyA9IHNvcnRLZXlbbWlkXTsKKyAgICAgICAgICAgICAgICAgICAgLy8gU29ydCBpbiBkZXNjZW5kaW5nIG51bWVyaWNhbCBvcmRlci4gVGhpcyBtYXRjaGVzIGxlZ2FjeSBiZWhhdmlvdXIsIHdoaWNoIHlpZWxkcworICAgICAgICAgICAgICAgICAgICAvLyBsYXJnZXN0IG9yIG1vc3QgcmVjZW50IGl0ZW1zIG9uIHRvcC4KKyAgICAgICAgICAgICAgICAgICAgY29tcGFyZSA9IC1Mb25nLmNvbXBhcmUobGhzLCByaHMpOworICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGlmIChjb21wYXJlIDwgMCkgewogICAgICAgICAgICAgICAgICAgICByaWdodCA9IG1pZDsKQEAgLTI5MywyMyArMzI1LDI3IEBACiAgICAgICAgICAgICBzd2l0Y2ggKG4pIHsKICAgICAgICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uc1tsZWZ0ICsgMl0gPSBwb3NpdGlvbnNbbGVmdCArIDFdOwotICAgICAgICAgICAgICAgICAgICBsb25nc1tsZWZ0ICsgMl0gPSBsb25nc1tsZWZ0ICsgMV07CisgICAgICAgICAgICAgICAgICAgIHNvcnRLZXlbbGVmdCArIDJdID0gc29ydEtleVtsZWZ0ICsgMV07CisgICAgICAgICAgICAgICAgICAgIG1pbWVUeXBlc1tsZWZ0ICsgMl0gPSBtaW1lVHlwZXNbbGVmdCArIDFdOwogICAgICAgICAgICAgICAgICAgICBpZHMuc2V0KGxlZnQgKyAyLCBpZHMuZ2V0KGxlZnQgKyAxKSk7CiAgICAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbnNbbGVmdCArIDFdID0gcG9zaXRpb25zW2xlZnRdOwotICAgICAgICAgICAgICAgICAgICBsb25nc1tsZWZ0ICsgMV0gPSBsb25nc1tsZWZ0XTsKKyAgICAgICAgICAgICAgICAgICAgc29ydEtleVtsZWZ0ICsgMV0gPSBzb3J0S2V5W2xlZnRdOworICAgICAgICAgICAgICAgICAgICBtaW1lVHlwZXNbbGVmdCArIDFdID0gbWltZVR5cGVzW2xlZnRdOwogICAgICAgICAgICAgICAgICAgICBpZHMuc2V0KGxlZnQgKyAxLCBpZHMuZ2V0KGxlZnQpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weShwb3NpdGlvbnMsIGxlZnQsIHBvc2l0aW9ucywgbGVmdCArIDEsIG4pOwotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KGxvbmdzLCBsZWZ0LCBsb25ncywgbGVmdCArIDEsIG4pOworICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KHNvcnRLZXksIGxlZnQsIHNvcnRLZXksIGxlZnQgKyAxLCBuKTsKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weShtaW1lVHlwZXMsIGxlZnQsIG1pbWVUeXBlcywgbGVmdCArIDEsIG4pOwogICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gbjsgaSA+PSAxOyAtLWkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlkcy5zZXQobGVmdCArIGksIGlkcy5nZXQobGVmdCArIGkgLSAxKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgcG9zaXRpb25zW2xlZnRdID0gcGl2b3RQb3NpdGlvbjsKLSAgICAgICAgICAgIGxvbmdzW2xlZnRdID0gcGl2b3RWYWx1ZTsKKyAgICAgICAgICAgIHNvcnRLZXlbbGVmdF0gPSBwaXZvdFZhbHVlOworICAgICAgICAgICAgbWltZVR5cGVzW2xlZnRdID0gcGl2b3RNaW1lOwogICAgICAgICAgICAgaWRzLnNldChsZWZ0LCBwaXZvdElkKTsKICAgICAgICAgfQogICAgIH0KQEAgLTM3OCw4ICs0MTQsMTQgQEAKIAogICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHJvdGVjdGVkIFZvaWQgZG9JbkJhY2tncm91bmQoU2VsZWN0aW9uLi4uIHNlbGVjdGVkKSB7Ci0gICAgICAgICAgICBMaXN0PERvY3VtZW50SW5mbz4gdG9EZWxldGUgPSBnZXREb2N1bWVudHMoc2VsZWN0ZWRbMF0pOwotICAgICAgICAgICAgbUhhZFRyb3VibGUgPSBmYWxzZTsKKyAgICAgICAgICAgIExpc3Q8RG9jdW1lbnRJbmZvPiB0b0RlbGV0ZSA9IG51bGw7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHRvRGVsZXRlID0gZ2V0RG9jdW1lbnRzKHNlbGVjdGVkWzBdKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJGYWlsZWQgdG8gcmV0cmlldmUgZG9jdW1lbnRzIGZvciBkZWxldGUuIik7CisgICAgICAgICAgICAgICAgbUhhZFRyb3VibGUgPSB0cnVlOworICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBmb3IgKERvY3VtZW50SW5mbyBkb2MgOiB0b0RlbGV0ZSkgewogICAgICAgICAgICAgICAgIGlmICghZG9jLmlzRGVsZXRlU3VwcG9ydGVkKCkpIHsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9kaXJsaXN0L01vZGVsQmFja2VkRG9jdW1lbnRzQWRhcHRlci5qYXZhIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL2Rpcmxpc3QvTW9kZWxCYWNrZWREb2N1bWVudHNBZGFwdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg3NTZhMwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9kaXJsaXN0L01vZGVsQmFja2VkRG9jdW1lbnRzQWRhcHRlci5qYXZhCkBAIC0wLDAgKzEsMjMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5kaXJsaXN0OworCitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlNoYXJlZC5ERUJVRzsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuU3RhdGUuTU9ERV9HUklEOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5TdGF0ZS5NT0RFX0xJU1Q7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlN0YXRlLk1PREVfVU5LTk9XTjsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkubW9kZWwuRG9jdW1lbnRJbmZvLmdldEN1cnNvckludDsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkubW9kZWwuRG9jdW1lbnRJbmZvLmdldEN1cnNvclN0cmluZzsKKworaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2UuQ3Vyc29yOworaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuRG9jdW1lbnRzQ29udHJhY3QuRG9jdW1lbnQ7CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuU3BhcnNlQXJyYXk7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdHcm91cDsKKworaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlN0YXRlOworCitpbXBvcnQgY29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5TZXRzOworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworCisvKioKKyAqIEFkYXB0cyBmcm9tIGRpcmxpc3QuTW9kZWwgdG8gc29tZXRoaW5nIFJlY3ljbGVyVmlldyB1bmRlcnN0YW5kcy4KKyAqLworZmluYWwgY2xhc3MgTW9kZWxCYWNrZWREb2N1bWVudHNBZGFwdGVyIGV4dGVuZHMgRG9jdW1lbnRzQWRhcHRlciB7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIk1vZGVsQmFja2VkRG9jdW1lbnRzQWRhcHRlciI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSVRFTV9UWVBFX0RPQ1VNRU5UID0gMTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJVEVNX1RZUEVfRElSRUNUT1JZID0gMjsKKworICAgIC8vIFByb3ZpZGVzIGFjY2VzcyB0byBpbmZvcm1hdGlvbiBuZWVkZWQgd2hlbiBjcmVhdGluZyBhbmQgdmlldyBob2xkZXJzLiBUaGlzCisgICAgLy8gaXNuJ3QgYW4gaWRlYWwgcGF0dGVybiAobW9yZSB0cmFuc2l0aXZlIGRlcGVuZGVuY3kgc3R1ZmYpIGJ1dCBnb29kIGVub3VnaCBmb3Igbm93LgorICAgIHByaXZhdGUgZmluYWwgRW52aXJvbm1lbnQgbUVudjsKKyAgICBwcml2YXRlIGZpbmFsIEljb25IZWxwZXIgbUljb25IZWxwZXI7ICAvLyBhIHRyYW5zaXRpdmUgZGVwZW5kZW5jeSBvZiB0aGUgaG9sZGVycy4KKworICAgIC8qKgorICAgICAqIEFuIG9yZGVyZWQgbGlzdCBvZiBtb2RlbCBJRHMuIFRoaXMgaXMgdGhlIGRhdGEgc3RydWN0dXJlIHRoYXQgZGV0ZXJtaW5lcyB3aGF0IHNob3dzIHVwIGluCisgICAgICogdGhlIFVJLCBhbmQgd2hlcmUuCisgICAgICovCisgICAgcHJpdmF0ZSBMaXN0PFN0cmluZz4gbU1vZGVsSWRzID0gbmV3IEFycmF5TGlzdDw+KCk7CisKKyAgICAvLyBMaXN0IG9mIGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGRlbGV0ZWQuIFNvbWUgdHJhbnNpZW50IGRpcmVjdG9yeSB1cGRhdGVzCisgICAgLy8gbWF5IGhhcHBlbiB3aGlsZSBmaWxlcyBhcmUgYmVpbmcgZGVsZXRlZC4gRHVyaW5nIHRoaXMgdGltZSB3ZSBkb24ndAorICAgIC8vIHdhbnQgb25jZS1oaWRkZW4gZmlsZXMgdG8gYmUgcmUtc2hvd24uIFdlIG9ubHkgcmVtb3ZlCisgICAgLy8gaXRlbXMgZnJvbSB0aGlzIGxpc3Qgd2hlbiB3ZSBnZXQgYSBtb2RlbCB1cGRhdGUgd2hlcmUgdGhlIG1vZGVsCisgICAgLy8gZG9lcyBub3QgY29udGFpbiBhIGNvcnJlc3BvbmRpbmcgaWQuIFRoaXMgZW5zdXJlcyBoaWRkZW4gZW50cmllcworICAgIC8vIGRvbid0IG1vbWVudGFyaWx5IHJlLWFwcGVhciBpZiB3ZSBnZXQgaW50ZXJtZWRpYXRlIHVwZGF0ZXMgZnJvbQorICAgIC8vIHRoZSBmaWxlIHN5c3RlbS4KKyAgICBwcml2YXRlIFNldDxTdHJpbmc+IG1IaWRkZW5JZHMgPSBuZXcgSGFzaFNldDw+KCk7CisKKyAgICBwdWJsaWMgTW9kZWxCYWNrZWREb2N1bWVudHNBZGFwdGVyKEVudmlyb25tZW50IGVudiwgSWNvbkhlbHBlciBpY29uSGVscGVyKSB7CisgICAgICAgIG1FbnYgPSBlbnY7CisgICAgICAgIG1JY29uSGVscGVyID0gaWNvbkhlbHBlcjsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgRG9jdW1lbnRIb2xkZXIgb25DcmVhdGVWaWV3SG9sZGVyKFZpZXdHcm91cCBwYXJlbnQsIGludCB2aWV3VHlwZSkgeworICAgICAgICBEb2N1bWVudEhvbGRlciBob2xkZXIgPSBudWxsOworICAgICAgICBmaW5hbCBTdGF0ZSBzdGF0ZSA9IG1FbnYuZ2V0RGlzcGxheVN0YXRlKCk7CisgICAgICAgIHN3aXRjaCAoc3RhdGUuZGVyaXZlZE1vZGUpIHsKKyAgICAgICAgICAgIGNhc2UgTU9ERV9HUklEOgorICAgICAgICAgICAgICAgIHN3aXRjaCAodmlld1R5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBJVEVNX1RZUEVfRElSRUNUT1JZOgorICAgICAgICAgICAgICAgICAgICAgICAgaG9sZGVyID0gbmV3IEdyaWREaXJlY3RvcnlIb2xkZXIobUVudi5nZXRDb250ZXh0KCksIHBhcmVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBJVEVNX1RZUEVfRE9DVU1FTlQ6CisgICAgICAgICAgICAgICAgICAgICAgICBob2xkZXIgPSBuZXcgR3JpZERvY3VtZW50SG9sZGVyKG1FbnYuZ2V0Q29udGV4dCgpLCBwYXJlbnQsIG1JY29uSGVscGVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiVW5zdXBwb3J0ZWQgbGF5b3V0IHR5cGUuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBNT0RFX0xJU1Q6CisgICAgICAgICAgICAgICAgaG9sZGVyID0gbmV3IExpc3REb2N1bWVudEhvbGRlcihtRW52LmdldENvbnRleHQoKSwgcGFyZW50LCBtSWNvbkhlbHBlcik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIE1PREVfVU5LTk9XTjoKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiVW5zdXBwb3J0ZWQgbGF5b3V0IG1vZGUuIik7CisgICAgICAgIH0KKworICAgICAgICBtRW52LmluaXREb2N1bWVudEhvbGRlcihob2xkZXIpOworICAgICAgICByZXR1cm4gaG9sZGVyOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uQmluZFZpZXdIb2xkZXIoRG9jdW1lbnRIb2xkZXIgaG9sZGVyLCBpbnQgcG9zaXRpb24sIExpc3Q8T2JqZWN0PiBwYXlsb2FkKSB7CisgICAgICAgIGlmIChwYXlsb2FkLmNvbnRhaW5zKFNFTEVDVElPTl9DSEFOR0VEX01BUktFUikpIHsKKyAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gc2VsZWN0ZWQgPSBtRW52LmlzU2VsZWN0ZWQobU1vZGVsSWRzLmdldChwb3NpdGlvbikpOworICAgICAgICAgICAgaG9sZGVyLnNldFNlbGVjdGVkKHNlbGVjdGVkKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG9uQmluZFZpZXdIb2xkZXIoaG9sZGVyLCBwb3NpdGlvbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvbkJpbmRWaWV3SG9sZGVyKERvY3VtZW50SG9sZGVyIGhvbGRlciwgaW50IHBvc2l0aW9uKSB7CisgICAgICAgIFN0cmluZyBtb2RlbElkID0gbU1vZGVsSWRzLmdldChwb3NpdGlvbik7CisgICAgICAgIEN1cnNvciBjdXJzb3IgPSBtRW52LmdldE1vZGVsKCkuZ2V0SXRlbShtb2RlbElkKTsKKyAgICAgICAgaG9sZGVyLmJpbmQoY3Vyc29yLCBtb2RlbElkLCBtRW52LmdldERpc3BsYXlTdGF0ZSgpKTsKKworICAgICAgICBmaW5hbCBTdHJpbmcgZG9jTWltZVR5cGUgPSBnZXRDdXJzb3JTdHJpbmcoY3Vyc29yLCBEb2N1bWVudC5DT0xVTU5fTUlNRV9UWVBFKTsKKyAgICAgICAgZmluYWwgaW50IGRvY0ZsYWdzID0gZ2V0Q3Vyc29ySW50KGN1cnNvciwgRG9jdW1lbnQuQ09MVU1OX0ZMQUdTKTsKKworICAgICAgICBob2xkZXIuc2V0U2VsZWN0ZWQobUVudi5pc1NlbGVjdGVkKG1vZGVsSWQpKTsKKyAgICAgICAgaG9sZGVyLnNldEVuYWJsZWQobUVudi5pc0RvY3VtZW50RW5hYmxlZChkb2NNaW1lVHlwZSwgZG9jRmxhZ3MpKTsKKworICAgICAgICBtRW52Lm9uQmluZERvY3VtZW50SG9sZGVyKGhvbGRlciwgY3Vyc29yKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgaW50IGdldEl0ZW1Db3VudCgpIHsKKyAgICAgICAgcmV0dXJuIG1Nb2RlbElkcy5zaXplKCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25Nb2RlbFVwZGF0ZShNb2RlbCBtb2RlbCkgeworICAgICAgICBpZiAoREVCVUcgJiYgbUhpZGRlbklkcy5zaXplKCkgPiAwKSB7CisgICAgICAgICAgICBMb2cuZChUQUcsICJVcGRhdGluZyBtb2RlbCB3aXRoIGhpZGRlbiBpZHM6ICIgKyBtSGlkZGVuSWRzKTsKKyAgICAgICAgfQorCisgICAgICAgIExpc3Q8U3RyaW5nPiBtb2RlbElkcyA9IG1vZGVsLmdldE1vZGVsSWRzKCk7CisgICAgICAgIG1Nb2RlbElkcyA9IG5ldyBBcnJheUxpc3Q8Pihtb2RlbElkcy5zaXplKCkpOworICAgICAgICBmb3IgKFN0cmluZyBpZCA6IG1vZGVsSWRzKSB7CisgICAgICAgICAgICBpZiAoIW1IaWRkZW5JZHMuY29udGFpbnMoaWQpKSB7CisgICAgICAgICAgICAgICAgbU1vZGVsSWRzLmFkZChpZCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLCAiT21pdHRpbmcgaGlkZGVuIGlkIGZyb20gbW9kZWwgZHVyaW5nIHVwZGF0ZTogIiArIGlkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEZpbmFsbHkgcmVtb3ZlIGFueSBoaWRkZW4gaWRzIHRoYXQgYXJlbid0IHByZXNlbnQgaW4gdGhlIG1vZGVsLgorICAgICAgICAvLyBUaGlzIGFzc3VtZXMgdGhhdCBtb2RlbCB1cGRhdGVzIHJlcHJlc2VudCBhIGNvbXBsZXRlIHNldCBvZiBmaWxlcy4KKyAgICAgICAgbUhpZGRlbklkcy5yZXRhaW5BbGwobU1vZGVsSWRzKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvbk1vZGVsVXBkYXRlRmFpbGVkKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIExvZy53KFRBRywgIk1vZGVsIHVwZGF0ZSBmYWlsZWQuIiwgZSk7CisgICAgICAgIG1Nb2RlbElkcy5jbGVhcigpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0TW9kZWxJZChpbnQgYWRhcHRlclBvc2l0aW9uKSB7CisgICAgICAgIHJldHVybiBtTW9kZWxJZHMuZ2V0KGFkYXB0ZXJQb3NpdGlvbik7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFNwYXJzZUFycmF5PFN0cmluZz4gaGlkZShTdHJpbmcuLi4gaWRzKSB7CisgICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLCAiSGlkaW5nIGlkczogIiArIGlkcyk7CisgICAgICAgIFNldDxTdHJpbmc+IHRvSGlkZSA9IFNldHMubmV3SGFzaFNldChpZHMpOworCisgICAgICAgIC8vIFByb2NlZWQgYmFja3dhcmRzIHRocm91Z2ggdGhlIGxpc3Qgb2YgaXRlbXMsIGJlY2F1c2UgZWFjaCByZW1vdmFsIGNhdXNlcyB0aGUKKyAgICAgICAgLy8gcG9zaXRpb25zIG9mIGFsbCBzdWJzZXF1ZW50IGl0ZW1zIHRvIGNoYW5nZS4KKyAgICAgICAgU3BhcnNlQXJyYXk8U3RyaW5nPiBoaWRkZW5JdGVtcyA9IG5ldyBTcGFyc2VBcnJheTw+KCk7CisgICAgICAgIGZvciAoaW50IGkgPSBtTW9kZWxJZHMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgICAgIFN0cmluZyBpZCA9IG1Nb2RlbElkcy5nZXQoaSk7CisgICAgICAgICAgICBpZiAodG9IaWRlLmNvbnRhaW5zKGlkKSkgeworICAgICAgICAgICAgICAgIG1IaWRkZW5JZHMuYWRkKGlkKTsKKyAgICAgICAgICAgICAgICBoaWRkZW5JdGVtcy5wdXQoaSwgbU1vZGVsSWRzLnJlbW92ZShpKSk7CisgICAgICAgICAgICAgICAgbm90aWZ5SXRlbVJlbW92ZWQoaSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gaGlkZGVuSXRlbXM7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgdW5oaWRlKFNwYXJzZUFycmF5PFN0cmluZz4gaWRzKSB7CisgICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLCAiVW4taWRpbmcgaWRzOiAiICsgaWRzKTsKKworICAgICAgICAvLyBBbiBBcnJheUxpc3QgY2FuIHNocmluayBhdCBydW50aW1lLi4uYW5kIGluIGZhY3QKKyAgICAgICAgLy8gaXQgZG9lcyB3aGVuIHdlIGNsZWFyIGl0IGNvbXBsZXRlbHkuCisgICAgICAgIC8vIFRoaXMgbWVhbnMgd2UgY2FuJ3QgY2FsbCBhZGQocG9zLCBpZCkgd2l0aG91dAorICAgICAgICAvLyBmaXJzdCBjaGVja2luZyB0aGUgbGlzdCBzaXplLgorICAgICAgICBMaXN0PFN0cmluZz4gb2xkSWRzID0gbU1vZGVsSWRzOworICAgICAgICBtTW9kZWxJZHMgPSBuZXcgQXJyYXlMaXN0PD4ob2xkSWRzLnNpemUoKSArIGlkcy5zaXplKCkpOworICAgICAgICBtTW9kZWxJZHMuYWRkQWxsKG9sZElkcyk7CisKKyAgICAgICAgLy8gRmluYWxseSBpbnNlcnQgdGhlIHVuaGlkZGVuIGl0ZW1zLgorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGlkcy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgaW50IHBvcyA9IGlkcy5rZXlBdChpKTsKKyAgICAgICAgICAgIFN0cmluZyBpZCA9IGlkcy5nZXQocG9zKTsKKyAgICAgICAgICAgIG1IaWRkZW5JZHMucmVtb3ZlKGlkKTsKKyAgICAgICAgICAgIG1Nb2RlbElkcy5hZGQocG9zLCBpZCk7CisgICAgICAgICAgICBub3RpZnlJdGVtSW5zZXJ0ZWQocG9zKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBMaXN0PFN0cmluZz4gZ2V0TW9kZWxJZHMoKSB7CisgICAgICAgIHJldHVybiBtTW9kZWxJZHM7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGludCBnZXRJdGVtVmlld1R5cGUoaW50IHBvc2l0aW9uKSB7CisgICAgICAgIHJldHVybiBpc0RpcmVjdG9yeShtRW52LmdldE1vZGVsKCksIHBvc2l0aW9uKQorICAgICAgICAgICAgICAgID8gSVRFTV9UWVBFX0RJUkVDVE9SWQorICAgICAgICAgICAgICAgIDogSVRFTV9UWVBFX0RPQ1VNRU5UOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uSXRlbVNlbGVjdGlvbkNoYW5nZWQoU3RyaW5nIGlkKSB7CisgICAgICAgIGludCBwb3NpdGlvbiA9IG1Nb2RlbElkcy5pbmRleE9mKGlkKTsKKworICAgICAgICBpZiAocG9zaXRpb24gPj0gMCkgeworICAgICAgICAgICAgbm90aWZ5SXRlbUNoYW5nZWQocG9zaXRpb24sIFNFTEVDVElPTl9DSEFOR0VEX01BUktFUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBMb2cudyhUQUcsICJJdGVtIGNoYW5nZSBub3RpZmljYXRpb24gcmVjZWl2ZWQgZm9yIHVua25vd24gaXRlbTogIiArIGlkKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9kaXJsaXN0L011bHRpU2VsZWN0TWFuYWdlci5qYXZhIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL2Rpcmxpc3QvTXVsdGlTZWxlY3RNYW5hZ2VyLmphdmEKaW5kZXggNDMwMjNlMS4uNWYzMTdmZiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL2Rpcmxpc3QvTXVsdGlTZWxlY3RNYW5hZ2VyLmphdmEKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL2Rpcmxpc3QvTXVsdGlTZWxlY3RNYW5hZ2VyLmphdmEKQEAgLTY4LDI0ICs2OCwyMyBAQAogCiAgICAgcHJpdmF0ZSBmaW5hbCBTZWxlY3Rpb24gbVNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb24oKTsKIAotICAgIHByaXZhdGUgUmFuZ2UgbVJhbmdlcjsKLSAgICBwcml2YXRlIFNlbGVjdGlvbkVudmlyb25tZW50IG1FbnZpcm9ubWVudDsKLQorICAgIHByaXZhdGUgZmluYWwgU2VsZWN0aW9uRW52aXJvbm1lbnQgbUVudmlyb25tZW50OworICAgIHByaXZhdGUgZmluYWwgRG9jdW1lbnRzQWRhcHRlciBtQWRhcHRlcjsKICAgICBwcml2YXRlIGZpbmFsIExpc3Q8TXVsdGlTZWxlY3RNYW5hZ2VyLkNhbGxiYWNrPiBtQ2FsbGJhY2tzID0gbmV3IEFycmF5TGlzdDw+KDEpOwogCisgICAgcHJpdmF0ZSBSYW5nZSBtUmFuZ2VyOwogICAgIHByaXZhdGUgYm9vbGVhbiBtU2luZ2xlU2VsZWN0OwogCi0gICAgLy8gUGF5bG9hZHMgZm9yIG5vdGlmeUl0ZW1DaGFuZ2UgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBzZWxlY3Rpb24gYW5kIG90aGVyIGV2ZW50cy4KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTRUxFQ1RJT05fQ0hBTkdFRF9NQVJLRVIgPSAiU2VsZWN0aW9uLUNoYW5nZWQiOwotCiAgICAgQE51bGxhYmxlIHByaXZhdGUgQmFuZENvbnRyb2xsZXIgbUJhbmRNYW5hZ2VyOwogCisKICAgICAvKioKICAgICAgKiBAcGFyYW0gcmVjeWNsZXJWaWV3CiAgICAgICogQHBhcmFtIG1vZGUgU2VsZWN0aW9uIG1vZGUKICAgICAgKi8KLSAgICBwdWJsaWMgTXVsdGlTZWxlY3RNYW5hZ2VyKGZpbmFsIFJlY3ljbGVyVmlldyByZWN5Y2xlclZpZXcsIGludCBtb2RlKSB7Ci0gICAgICAgIHRoaXMobmV3IFJ1bnRpbWVTZWxlY3Rpb25FbnZpcm9ubWVudChyZWN5Y2xlclZpZXcpLCBtb2RlKTsKKyAgICBwdWJsaWMgTXVsdGlTZWxlY3RNYW5hZ2VyKAorICAgICAgICAgICAgZmluYWwgUmVjeWNsZXJWaWV3IHJlY3ljbGVyVmlldywgRG9jdW1lbnRzQWRhcHRlciBhZGFwdGVyLCBpbnQgbW9kZSkgeworICAgICAgICB0aGlzKG5ldyBSdW50aW1lU2VsZWN0aW9uRW52aXJvbm1lbnQocmVjeWNsZXJWaWV3KSwgYWRhcHRlciwgbW9kZSk7CiAKICAgICAgICAgaWYgKG1vZGUgPT0gTU9ERV9NVUxUSVBMRSkgewogICAgICAgICAgICAgbUJhbmRNYW5hZ2VyID0gbmV3IEJhbmRDb250cm9sbGVyKCk7CkBAIC0xMzYsMTEgKzEzNSwxMiBAQAogICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgQFZpc2libGVGb3JUZXN0aW5nCi0gICAgTXVsdGlTZWxlY3RNYW5hZ2VyKFNlbGVjdGlvbkVudmlyb25tZW50IGVudmlyb25tZW50LCBpbnQgbW9kZSkgeworICAgIE11bHRpU2VsZWN0TWFuYWdlcihTZWxlY3Rpb25FbnZpcm9ubWVudCBlbnZpcm9ubWVudCwgRG9jdW1lbnRzQWRhcHRlciBhZGFwdGVyLCBpbnQgbW9kZSkgewogICAgICAgICBtRW52aXJvbm1lbnQgPSBjaGVja05vdE51bGwoZW52aXJvbm1lbnQsICInZW52aXJvbm1lbnQnIGNhbm5vdCBiZSBudWxsLiIpOworICAgICAgICBtQWRhcHRlciA9IGNoZWNrTm90TnVsbChhZGFwdGVyLCAiJ2FkYXB0ZXInIGNhbm5vdCBiZSBudWxsLiIpOwogICAgICAgICBtU2luZ2xlU2VsZWN0ID0gbW9kZSA9PSBNT0RFX1NJTkdMRTsKIAotICAgICAgICBtRW52aXJvbm1lbnQucmVnaXN0ZXJEYXRhT2JzZXJ2ZXIoCisgICAgICAgIG1BZGFwdGVyLnJlZ2lzdGVyQWRhcHRlckRhdGFPYnNlcnZlcigKICAgICAgICAgICAgICAgICBuZXcgUmVjeWNsZXJWaWV3LkFkYXB0ZXJEYXRhT2JzZXJ2ZXIoKSB7CiAKICAgICAgICAgICAgICAgICAgICAgcHJpdmF0ZSBMaXN0PFN0cmluZz4gbU1vZGVsSWRzOwpAQCAtMTQ5LDcgKzE0OSw3IEBACiAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2hhbmdlZCgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IFRoaXMgaXMgY2F1c2luZyBiLzIyNzY1ODEyCiAgICAgICAgICAgICAgICAgICAgICAgICBtU2VsZWN0aW9uLmNsZWFyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtTW9kZWxJZHMgPSBtRW52aXJvbm1lbnQuZ2V0TW9kZWxJZHMoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1Nb2RlbElkcyA9IG1BZGFwdGVyLmdldE1vZGVsSWRzKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKQEAgLTMzOSw3ICszMzksMTAgQEAKICAgICAgICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLCAiSWdub3JpbmcgdG9nZ2xlIGZvciBlbGVtZW50IHdpdGggbm8gcG9zaXRpb24uIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgdG9nZ2xlU2VsZWN0aW9uKG1FbnZpcm9ubWVudC5nZXRNb2RlbElkRnJvbUFkYXB0ZXJQb3NpdGlvbihwb3NpdGlvbikpOworICAgICAgICBTdHJpbmcgaWQgPSBtQWRhcHRlci5nZXRNb2RlbElkKHBvc2l0aW9uKTsKKyAgICAgICAgaWYgKGlkICE9IG51bGwpIHsKKyAgICAgICAgICAgIHRvZ2dsZVNlbGVjdGlvbihpZCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICAvKioKQEAgLTM0OCw2ICszNTEsNyBAQAogICAgICAqIEBwYXJhbSBtb2RlbElkCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgdG9nZ2xlU2VsZWN0aW9uKFN0cmluZyBtb2RlbElkKSB7CisgICAgICAgIGNoZWNrTm90TnVsbChtb2RlbElkKTsKICAgICAgICAgYm9vbGVhbiBjaGFuZ2VkID0gZmFsc2U7CiAgICAgICAgIGlmIChtU2VsZWN0aW9uLmNvbnRhaW5zKG1vZGVsSWQpKSB7CiAgICAgICAgICAgICBjaGFuZ2VkID0gYXR0ZW1wdERlc2VsZWN0KG1vZGVsSWQpOwpAQCAtMzgzLDcgKzM4NywxMSBAQAogICAgICAqIEBwYXJhbSBwb3NpdGlvbgogICAgICAqLwogICAgIHZvaWQgc2V0U2VsZWN0aW9uUmFuZ2VCZWdpbihpbnQgcG9zaXRpb24pIHsKLSAgICAgICAgaWYgKG1TZWxlY3Rpb24uY29udGFpbnMobUVudmlyb25tZW50LmdldE1vZGVsSWRGcm9tQWRhcHRlclBvc2l0aW9uKHBvc2l0aW9uKSkpIHsKKyAgICAgICAgaWYgKHBvc2l0aW9uID09IFJlY3ljbGVyVmlldy5OT19QT1NJVElPTikgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1TZWxlY3Rpb24uY29udGFpbnMobUFkYXB0ZXIuZ2V0TW9kZWxJZChwb3NpdGlvbikpKSB7CiAgICAgICAgICAgICBtUmFuZ2VyID0gbmV3IFJhbmdlKHBvc2l0aW9uKTsKICAgICAgICAgfQogICAgIH0KQEAgLTQwMCw3ICs0MDgsMTEgQEAKICAgICBwcml2YXRlIHZvaWQgdXBkYXRlUmFuZ2UoaW50IGJlZ2luLCBpbnQgZW5kLCBib29sZWFuIHNlbGVjdGVkKSB7CiAgICAgICAgIGNoZWNrU3RhdGUoZW5kID49IGJlZ2luKTsKICAgICAgICAgZm9yIChpbnQgaSA9IGJlZ2luOyBpIDw9IGVuZDsgaSsrKSB7Ci0gICAgICAgICAgICBTdHJpbmcgaWQgPSBtRW52aXJvbm1lbnQuZ2V0TW9kZWxJZEZyb21BZGFwdGVyUG9zaXRpb24oaSk7CisgICAgICAgICAgICBTdHJpbmcgaWQgPSBtQWRhcHRlci5nZXRNb2RlbElkKGkpOworICAgICAgICAgICAgaWYgKGlkID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgaWYgKHNlbGVjdGVkKSB7CiAgICAgICAgICAgICAgICAgYm9vbGVhbiBjYW5TZWxlY3QgPSBub3RpZnlCZWZvcmVJdGVtU3RhdGVDaGFuZ2UoaWQsIHRydWUpOwogICAgICAgICAgICAgICAgIGlmIChjYW5TZWxlY3QpIHsKQEAgLTQzMiw2ICs0NDQsNyBAQAogICAgICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgdXBkYXRlIHdhcyBhcHBsaWVkLgogICAgICAqLwogICAgIHByaXZhdGUgYm9vbGVhbiBhdHRlbXB0RGVzZWxlY3QoU3RyaW5nIGlkKSB7CisgICAgICAgIGNoZWNrQXJndW1lbnQoaWQgIT0gbnVsbCk7CiAgICAgICAgIGlmIChub3RpZnlCZWZvcmVJdGVtU3RhdGVDaGFuZ2UoaWQsIGZhbHNlKSkgewogICAgICAgICAgICAgbVNlbGVjdGlvbi5yZW1vdmUoaWQpOwogICAgICAgICAgICAgbm90aWZ5SXRlbVN0YXRlQ2hhbmdlZChpZCwgZmFsc2UpOwpAQCAtNDU4LDExICs0NzEsMTIgQEAKICAgICAgKiAoaWRlbnRpZmllZCBieSB7QGNvZGUgcG9zaXRpb259KSBjaGFuZ2VzLgogICAgICAqLwogICAgIHByaXZhdGUgdm9pZCBub3RpZnlJdGVtU3RhdGVDaGFuZ2VkKFN0cmluZyBpZCwgYm9vbGVhbiBzZWxlY3RlZCkgeworICAgICAgICBjaGVja0FyZ3VtZW50KGlkICE9IG51bGwpOwogICAgICAgICBpbnQgbGFzdExpc3RlbmVyID0gbUNhbGxiYWNrcy5zaXplKCkgLSAxOwogICAgICAgICBmb3IgKGludCBpID0gbGFzdExpc3RlbmVyOyBpID4gLTE7IGktLSkgewogICAgICAgICAgICAgbUNhbGxiYWNrcy5nZXQoaSkub25JdGVtU3RhdGVDaGFuZ2VkKGlkLCBzZWxlY3RlZCk7CiAgICAgICAgIH0KLSAgICAgICAgbUVudmlyb25tZW50Lm5vdGlmeUl0ZW1DaGFuZ2VkKGlkLCBTRUxFQ1RJT05fQ0hBTkdFRF9NQVJLRVIpOworICAgICAgICBtQWRhcHRlci5vbkl0ZW1TZWxlY3Rpb25DaGFuZ2VkKGlkKTsKICAgICB9CiAKICAgICAvKioKQEAgLTYwOSw3ICs2MjMsNyBAQAogICAgICAgICAgKiBAcGFyYW0gaWQKICAgICAgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBwb3NpdGlvbiBpcyBjdXJyZW50bHkgc2VsZWN0ZWQuCiAgICAgICAgICAqLwotICAgICAgICBwdWJsaWMgYm9vbGVhbiBjb250YWlucyhTdHJpbmcgaWQpIHsKKyAgICAgICAgcHVibGljIGJvb2xlYW4gY29udGFpbnMoQE51bGxhYmxlIFN0cmluZyBpZCkgewogICAgICAgICAgICAgcmV0dXJuIG1Ub3RhbFNlbGVjdGlvbi5jb250YWlucyhpZCk7CiAgICAgICAgIH0KIApAQCAtODAwLDExICs4MTQsNiBAQAogICAgICAgICBpbnQgZ2V0Q2hpbGRDb3VudCgpOwogICAgICAgICBpbnQgZ2V0VmlzaWJsZUNoaWxkQ291bnQoKTsKICAgICAgICAgdm9pZCBmb2N1c0l0ZW0oaW50IHBvc2l0aW9uKTsKLSAgICAgICAgU3RyaW5nIGdldE1vZGVsSWRGcm9tQWRhcHRlclBvc2l0aW9uKGludCBwb3NpdGlvbik7Ci0gICAgICAgIGludCBnZXRJdGVtQ291bnQoKTsKLSAgICAgICAgTGlzdDxTdHJpbmc+IGdldE1vZGVsSWRzKCk7Ci0gICAgICAgIHZvaWQgbm90aWZ5SXRlbUNoYW5nZWQoU3RyaW5nIGlkLCBTdHJpbmcgc2VsZWN0aW9uQ2hhbmdlZE1hcmtlcik7Ci0gICAgICAgIHZvaWQgcmVnaXN0ZXJEYXRhT2JzZXJ2ZXIoUmVjeWNsZXJWaWV3LkFkYXB0ZXJEYXRhT2JzZXJ2ZXIgb2JzZXJ2ZXIpOwogICAgIH0KIAogICAgIC8qKiBSZWN5Y2xlciB2aWV3IGZhY2FkZSBpbXBsZW1lbnRhdGlvbiBiYWNrZWQgYnkgZ29vZCBvbCcgUmVjeWNsZXJWaWV3LiAqLwpAQCAtODE0LDExICs4MjMsOSBAQAogICAgICAgICBwcml2YXRlIGZpbmFsIERyYXdhYmxlIG1CYW5kOwogCiAgICAgICAgIHByaXZhdGUgYm9vbGVhbiBtSXNPdmVybGF5U2hvd24gPSBmYWxzZTsKLSAgICAgICAgcHJpdmF0ZSBEaXJlY3RvcnlGcmFnbWVudC5Eb2N1bWVudHNBZGFwdGVyIG1BZGFwdGVyOwogCi0gICAgICAgIFJ1bnRpbWVTZWxlY3Rpb25FbnZpcm9ubWVudChSZWN5Y2xlclZpZXcgcnYpIHsKLSAgICAgICAgICAgIG1WaWV3ID0gcnY7Ci0gICAgICAgICAgICBtQWRhcHRlciA9IChEaXJlY3RvcnlGcmFnbWVudC5Eb2N1bWVudHNBZGFwdGVyKSBydi5nZXRBZGFwdGVyKCk7CisgICAgICAgIFJ1bnRpbWVTZWxlY3Rpb25FbnZpcm9ubWVudChSZWN5Y2xlclZpZXcgdmlldykgeworICAgICAgICAgICAgbVZpZXcgPSB2aWV3OwogICAgICAgICAgICAgbUJhbmQgPSBtVmlldy5nZXRDb250ZXh0KCkuZ2V0VGhlbWUoKS5nZXREcmF3YWJsZShSLmRyYXdhYmxlLmJhbmRfc2VsZWN0X292ZXJsYXkpOwogICAgICAgICB9CiAKQEAgLTgzNywxMSArODQ0LDYgQEAKICAgICAgICAgfQogCiAgICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgU3RyaW5nIGdldE1vZGVsSWRGcm9tQWRhcHRlclBvc2l0aW9uKGludCBwb3NpdGlvbikgewotICAgICAgICAgICAgcmV0dXJuIG1BZGFwdGVyLmdldE1vZGVsSWQocG9zaXRpb24pOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyB2b2lkIGFkZE9uU2Nyb2xsTGlzdGVuZXIoUmVjeWNsZXJWaWV3Lk9uU2Nyb2xsTGlzdGVuZXIgbGlzdGVuZXIpIHsKICAgICAgICAgICAgIG1WaWV3LmFkZE9uU2Nyb2xsTGlzdGVuZXIobGlzdGVuZXIpOwogICAgICAgICB9CkBAIC05NDMsNTMgKzk0NSwzMSBAQAogICAgICAgICAgICAgaWYgKHZoICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICB2aC5pdGVtVmlldy5yZXF1ZXN0Rm9jdXMoKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gRG9uJ3Qgc21vb3RoIHNjcm9sbDsgdGhhdCB0YXhlcyB0aGUgc3lzdGVtIHVubmVjZXNzYXJpbHkgYW5kIG1ha2VzIHRoZSBzY3JvbGwKLSAgICAgICAgICAgICAgICAvLyBoYW5kbGluZyBsb2dpYyBiZWxvdyBtb3JlIGNvbXBsaWNhdGVkLiAgU2VlIGIvMjQ4NjU2NTguCi0gICAgICAgICAgICAgICAgbVZpZXcuc2Nyb2xsVG9Qb3NpdGlvbihwb3MpOworICAgICAgICAgICAgICAgIG1WaWV3LnNtb290aFNjcm9sbFRvUG9zaXRpb24ocG9zKTsKICAgICAgICAgICAgICAgICAvLyBTZXQgYSBvbmUtdGltZSBsaXN0ZW5lciB0byByZXF1ZXN0IGZvY3VzIHdoZW4gdGhlIHNjcm9sbCBoYXMgY29tcGxldGVkLgogICAgICAgICAgICAgICAgIG1WaWV3LmFkZE9uU2Nyb2xsTGlzdGVuZXIoCiAgICAgICAgICAgICAgICAgICAgIG5ldyBSZWN5Y2xlclZpZXcuT25TY3JvbGxMaXN0ZW5lcigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25TY3JvbGxlZChSZWN5Y2xlclZpZXcgdmlldywgaW50IGR4LCBpbnQgZHkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3LmZpbmRWaWV3SG9sZGVyRm9yQWRhcHRlclBvc2l0aW9uKHBvcykuaXRlbVZpZXcucmVxdWVzdEZvY3VzKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlldy5yZW1vdmVPblNjcm9sbExpc3RlbmVyKHRoaXMpOworICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25TY3JvbGxTdGF0ZUNoYW5nZWQgKFJlY3ljbGVyVmlldyB2aWV3LCBpbnQgbmV3U3RhdGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3U3RhdGUgPT0gUmVjeWNsZXJWaWV3LlNDUk9MTF9TVEFURV9JRExFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdoZW4gc2Nyb2xsaW5nIHN0b3BzLCBmaW5kIHRoZSBpdGVtIGFuZCBmb2N1cyBpdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVjeWNsZXJWaWV3LlZpZXdIb2xkZXIgdmggPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXcuZmluZFZpZXdIb2xkZXJGb3JBZGFwdGVyUG9zaXRpb24ocG9zKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZoICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZoLml0ZW1WaWV3LnJlcXVlc3RGb2N1cygpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBtaWdodCBoYXBwZW4gaW4gd2VpcmQgY29ybmVyIGNhc2VzLCBlLmcuIGlmIHRoZSB1c2VyIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzY3JvbGxpbmcgd2hpbGUgYSBkZWxldGUgb3BlcmF0aW9uIGlzIGluIHByb2dyZXNzLiAgSW4gdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FzZSwganVzdCBkb24ndCBhdHRlbXB0IHRvIGZvY3VzIHRoZSBtaXNzaW5nIGl0ZW0uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cudygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQUcsICJVbmFibGUgdG8gZm9jdXMgcG9zaXRpb24gIiArIHBvcyArICIgYWZ0ZXIgYSBzY3JvbGwiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3LnJlbW92ZU9uU2Nyb2xsTGlzdGVuZXIodGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBub3RpZnlJdGVtQ2hhbmdlZChTdHJpbmcgaWQsIFN0cmluZyBzZWxlY3Rpb25DaGFuZ2VkTWFya2VyKSB7Ci0gICAgICAgICAgICAvLyBUT0RPOiBUaGlzIGNvdWxkIGJlIG9wdGltaXplZCBpZiB3ZSB0dXJuZWQgb24gUmVjeWNsZXJWaWV3IHN0YWJsZSBJRHMuCi0gICAgICAgICAgICBpbnQgY291bnQgPSBtQWRhcHRlci5nZXRJdGVtQ291bnQoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICAgICAgICAgIFJlY3ljbGVyVmlldy5WaWV3SG9sZGVyIHZoID0gbVZpZXcuZmluZFZpZXdIb2xkZXJGb3JBZGFwdGVyUG9zaXRpb24oaSk7Ci0gICAgICAgICAgICAgICAgLy8gSWYgdGhlIHZpZXcgaXNuJ3QgYm91bmQsIHRoaXMgY29kZSBuZXZlciBydW5zIGJlY2F1c2UgdGhlIHZpZXdob2xkZXIgd29uJ3QgYmUKLSAgICAgICAgICAgICAgICAvLyBmb3VuZC4gVGhhdCdzIGZpbmUsIHRob3VnaCwgYmVjYXVzZSB0aGUgb25seSB0aW1lIGEgdmlldyBuZWVkcyB0byBiZSB1cGRhdGVkIGlzCi0gICAgICAgICAgICAgICAgLy8gd2hlbiBpdCdzIGJvdW5kLgotICAgICAgICAgICAgICAgIGlmICh2aCBpbnN0YW5jZW9mIERpcmVjdG9yeUZyYWdtZW50LkRvY3VtZW50SG9sZGVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgoKERpcmVjdG9yeUZyYWdtZW50LkRvY3VtZW50SG9sZGVyKSB2aCkubW9kZWxJZC5lcXVhbHMoaWQpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtQWRhcHRlci5ub3RpZnlJdGVtQ2hhbmdlZChpLCBTRUxFQ1RJT05fQ0hBTkdFRF9NQVJLRVIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGludCBnZXRJdGVtQ291bnQoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbUFkYXB0ZXIuZ2V0SXRlbUNvdW50KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhT2JzZXJ2ZXIoUmVjeWNsZXJWaWV3LkFkYXB0ZXJEYXRhT2JzZXJ2ZXIgb2JzZXJ2ZXIpIHsKLSAgICAgICAgICAgIG1BZGFwdGVyLnJlZ2lzdGVyQWRhcHRlckRhdGFPYnNlcnZlcihvYnNlcnZlcik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIExpc3Q8U3RyaW5nPiBnZXRNb2RlbElkcygpIHsKLSAgICAgICAgICAgIHJldHVybiBtQWRhcHRlci5nZXRNb2RlbElkcygpOwotICAgICAgICB9CiAgICAgfQogCiAgICAgcHVibGljIGludGVyZmFjZSBDYWxsYmFjayB7CkBAIC0xMDQ2LDcgKzEwMjYsNyBAQAogICAgICAgICAgICAgbU1vZGVsQnVpbGRlciA9IG5ldyBSdW5uYWJsZSgpIHsKICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1Nb2RlbCA9IG5ldyBHcmlkTW9kZWwobUVudmlyb25tZW50KTsKKyAgICAgICAgICAgICAgICAgICAgbU1vZGVsID0gbmV3IEdyaWRNb2RlbChtRW52aXJvbm1lbnQsIG1BZGFwdGVyKTsKICAgICAgICAgICAgICAgICAgICAgbU1vZGVsLmFkZE9uU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKEJhbmRDb250cm9sbGVyLnRoaXMpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH07CkBAIC0xMDk3LDcgKzEwNzcsNyBAQAogICAgICAgICAgICAgcmV0dXJuICFpc0FjdGl2ZSgpCiAgICAgICAgICAgICAgICAgICAgICYmIGUuaXNNb3VzZUV2ZW50KCkgIC8vIGEgbW91c2UKICAgICAgICAgICAgICAgICAgICAgJiYgZS5pc0FjdGlvbkRvd24oKSAgLy8gdGhlIGluaXRpYWwgYnV0dG9uIHByZXNzCi0gICAgICAgICAgICAgICAgICAgICYmIG1FbnZpcm9ubWVudC5nZXRJdGVtQ291bnQoKSA+IDAKKyAgICAgICAgICAgICAgICAgICAgJiYgbUFkYXB0ZXIuZ2V0SXRlbUNvdW50KCkgPiAwCiAgICAgICAgICAgICAgICAgICAgICYmIGUuZ2V0SXRlbVBvc2l0aW9uKCkgPT0gUmVjeWNsZXJWaWV3Lk5PX0lEOyAgLy8gaW4gZW1wdHkgc3BhY2UKICAgICAgICAgfQogCkBAIC0xMTczLDEzICsxMTUzLDE1IEBACiAgICAgICAgICAgICBtU2VsZWN0aW9uLmFwcGx5UHJvdmlzaW9uYWxTZWxlY3Rpb24oKTsKICAgICAgICAgICAgIG1Nb2RlbC5lbmRTZWxlY3Rpb24oKTsKICAgICAgICAgICAgIGludCBmaXJzdFNlbGVjdGVkID0gbU1vZGVsLmdldFBvc2l0aW9uTmVhcmVzdE9yaWdpbigpOwotICAgICAgICAgICAgaWYgKCFtU2VsZWN0aW9uLmNvbnRhaW5zKG1FbnZpcm9ubWVudC5nZXRNb2RlbElkRnJvbUFkYXB0ZXJQb3NpdGlvbihmaXJzdFNlbGVjdGVkKSkpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJGaXJzdCBzZWxlY3RlZCBieSBiYW5kIGlzIE5PVCBpbiBzZWxlY3Rpb24hIik7Ci0gICAgICAgICAgICAgICAgLy8gU2FkbHkgdGhpcyBpcyByZWFsbHkgaGFwcGVuaW5nLiBOZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGdvaW5nIG9uLgotICAgICAgICAgICAgfSBlbHNlIGlmIChmaXJzdFNlbGVjdGVkICE9IE5PVF9TRVQpIHsKLSAgICAgICAgICAgICAgICAvLyBUT0RPOiBmaXJzdFNlbGVjdGVkIHNob3VsZCByZWFsbHkgYmUgbGFzdFNlbGVjdGVkLCB3ZSB3YW50IHRvIGFuY2hvciB0aGUgaXRlbQotICAgICAgICAgICAgICAgIC8vIHdoZXJlIHRoZSBtb3VzZS11cCBvY2N1cnJlZC4KLSAgICAgICAgICAgICAgICBzZXRTZWxlY3Rpb25SYW5nZUJlZ2luKGZpcnN0U2VsZWN0ZWQpOworICAgICAgICAgICAgaWYgKGZpcnN0U2VsZWN0ZWQgIT0gTk9UX1NFVCkgeworICAgICAgICAgICAgICAgIGlmIChtU2VsZWN0aW9uLmNvbnRhaW5zKG1BZGFwdGVyLmdldE1vZGVsSWQoZmlyc3RTZWxlY3RlZCkpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IGZpcnN0U2VsZWN0ZWQgc2hvdWxkIHJlYWxseSBiZSBsYXN0U2VsZWN0ZWQsIHdlIHdhbnQgdG8gYW5jaG9yIHRoZSBpdGVtCisgICAgICAgICAgICAgICAgICAgIC8vIHdoZXJlIHRoZSBtb3VzZS11cCBvY2N1cnJlZC4KKyAgICAgICAgICAgICAgICAgICAgc2V0U2VsZWN0aW9uUmFuZ2VCZWdpbihmaXJzdFNlbGVjdGVkKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBDaGVjayBpZiB0aGlzIGlzIHJlYWxseSBoYXBwZW5pbmcuCisgICAgICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkZpcnN0IHNlbGVjdGVkIGJ5IGJhbmQgaXMgTk9UIGluIHNlbGVjdGlvbiEiKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIG1Nb2RlbCA9IG51bGw7CkBAIC0xMzM0LDYgKzEzMTYsOCBAQAogICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTE9XRVJfUklHSFQgPSBMT1dFUiB8IFJJR0hUOwogCiAgICAgICAgIHByaXZhdGUgZmluYWwgU2VsZWN0aW9uRW52aXJvbm1lbnQgbUhlbHBlcjsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBEb2N1bWVudHNBZGFwdGVyIG1BZGFwdGVyOworCiAgICAgICAgIHByaXZhdGUgZmluYWwgTGlzdDxPblNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4gbU9uU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycyA9CiAgICAgICAgICAgICAgICAgbmV3IEFycmF5TGlzdDw+KCk7CiAKQEAgLTEzNzEsOCArMTM1NSw5IEBACiAgICAgICAgIC8vIHNob3VsZCBleHBhbmQgZnJvbSB3aGVuIFNoaWZ0K2NsaWNrIGlzIHVzZWQuCiAgICAgICAgIHByaXZhdGUgaW50IG1Qb3NpdGlvbk5lYXJlc3RPcmlnaW4gPSBOT1RfU0VUOwogCi0gICAgICAgIEdyaWRNb2RlbChTZWxlY3Rpb25FbnZpcm9ubWVudCBoZWxwZXIpIHsKKyAgICAgICAgR3JpZE1vZGVsKFNlbGVjdGlvbkVudmlyb25tZW50IGhlbHBlciwgRG9jdW1lbnRzQWRhcHRlciBhZGFwdGVyKSB7CiAgICAgICAgICAgICBtSGVscGVyID0gaGVscGVyOworICAgICAgICAgICAgbUFkYXB0ZXIgPSBhZGFwdGVyOwogICAgICAgICAgICAgbUhlbHBlci5hZGRPblNjcm9sbExpc3RlbmVyKHRoaXMpOwogICAgICAgICB9CiAKQEAgLTE1NzEsMTggKzE1NTYsMjIgQEAKICAgICAgICAgICAgIGZvciAoaW50IGNvbHVtbiA9IGNvbHVtblN0YXJ0SW5kZXg7IGNvbHVtbiA8PSBjb2x1bW5FbmRJbmRleDsgY29sdW1uKyspIHsKICAgICAgICAgICAgICAgICBTcGFyc2VJbnRBcnJheSBpdGVtcyA9IG1Db2x1bW5zLmdldChtQ29sdW1uQm91bmRzLmdldChjb2x1bW4pLmxvd2VyTGltaXQpOwogICAgICAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IHJvd1N0YXJ0SW5kZXg7IHJvdyA8PSByb3dFbmRJbmRleDsgcm93KyspIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IHBvc2l0aW9uID0gaXRlbXMuZ2V0KGl0ZW1zLmtleUF0KHJvdykpOwotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgaWQgPSBtSGVscGVyLmdldE1vZGVsSWRGcm9tQWRhcHRlclBvc2l0aW9uKHBvc2l0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlkICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBhZGFwdGVyIGluc2VydHMgaXRlbXMgZm9yIFVJIGxheW91dCBwdXJwb3NlcyB0aGF0IGFyZW4ndCBhc3NvY2lhdGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyB3aXRoIGZpbGVzLiAgVGhvc2Ugd2lsbCBoYXZlIGEgbnVsbCBtb2RlbCBJRC4gIERvbid0IHNlbGVjdCB0aGVtLgotICAgICAgICAgICAgICAgICAgICAgICAgbVNlbGVjdGlvbi5hZGQoaWQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc1Bvc3NpYmxlUG9zaXRpb25OZWFyZXN0T3JpZ2luKGNvbHVtbiwgY29sdW1uU3RhcnRJbmRleCwgY29sdW1uRW5kSW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93LCByb3dTdGFydEluZGV4LCByb3dFbmRJbmRleCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgdGhlIHBvc2l0aW9uIG5lYXJlc3QgdGhlIG9yaWdpbiwgcmVjb3JkIGl0IG5vdyBzbyB0aGF0IGl0Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBjYW4gYmUgcmV0dXJuZWQgYnkgZW5kU2VsZWN0aW9uKCkgbGF0ZXIuCi0gICAgICAgICAgICAgICAgICAgICAgICBtUG9zaXRpb25OZWFyZXN0T3JpZ2luID0gcG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBkZWZhdWx0IHJldHVybiB2YWx1ZSBmb3IgU3BhcnNlSW50QXJyYXkuZ2V0IGlzIDAsIHdoaWNoIGlzIGEgdmFsaWQKKyAgICAgICAgICAgICAgICAgICAgLy8gcG9zaXRpb24uIFVzZSBhIHNlbnRyeSB2YWx1ZSB0byBwcmV2ZW50IGVycm9uZW91c2x5IHNlbGVjdGluZyBpdGVtIDAuCisgICAgICAgICAgICAgICAgICAgIGludCBwb3NpdGlvbiA9IGl0ZW1zLmdldChpdGVtcy5rZXlBdChyb3cpLCBOT1RfU0VUKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uICE9IE5PVF9TRVQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBpZCA9IG1BZGFwdGVyLmdldE1vZGVsSWQocG9zaXRpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlkICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgYWRhcHRlciBpbnNlcnRzIGl0ZW1zIGZvciBVSSBsYXlvdXQgcHVycG9zZXMgdGhhdCBhcmVuJ3QgYXNzb2NpYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpdGggZmlsZXMuICBUaG9zZSB3aWxsIGhhdmUgYSBudWxsIG1vZGVsIElELiAgRG9uJ3Qgc2VsZWN0IHRoZW0uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVNlbGVjdGlvbi5hZGQoaWQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzUG9zc2libGVQb3NpdGlvbk5lYXJlc3RPcmlnaW4oY29sdW1uLCBjb2x1bW5TdGFydEluZGV4LCBjb2x1bW5FbmRJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93LCByb3dTdGFydEluZGV4LCByb3dFbmRJbmRleCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIHRoZSBwb3NpdGlvbiBuZWFyZXN0IHRoZSBvcmlnaW4sIHJlY29yZCBpdCBub3cgc28gdGhhdCBpdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbiBiZSByZXR1cm5lZCBieSBlbmRTZWxlY3Rpb24oKSBsYXRlci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUG9zaXRpb25OZWFyZXN0T3JpZ2luID0gcG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0xOTgwLDcgKzE5NjksNyBAQAogICAgICAgICBpZiAoa2V5Q29kZSA9PSBLZXlFdmVudC5LRVlDT0RFX01PVkVfSE9NRSkgewogICAgICAgICAgICAgcG9zaXRpb24gPSAwOwogICAgICAgICB9IGVsc2UgaWYgKGtleUNvZGUgPT0gS2V5RXZlbnQuS0VZQ09ERV9NT1ZFX0VORCkgewotICAgICAgICAgICAgcG9zaXRpb24gPSBtRW52aXJvbm1lbnQuZ2V0SXRlbUNvdW50KCkgLSAxOworICAgICAgICAgICAgcG9zaXRpb24gPSBtQWRhcHRlci5nZXRJdGVtQ291bnQoKSAtIDE7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBGaW5kIGEgbmF2aWdhdGlvbiB0YXJnZXQgYmFzZWQgb24gdGhlIGFycm93IGtleSB0aGF0IHRoZSB1c2VyIHByZXNzZWQuICBJZ25vcmUKICAgICAgICAgICAgIC8vIG5hdmlnYXRpb24gdGFyZ2V0cyB0aGF0IGFyZW4ndCBpdGVtcyBpbiB0aGUgcmVjeWNsZXIgdmlldy4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9kaXJsaXN0L1NlY3Rpb25CcmVha0RvY3VtZW50c0FkYXB0ZXJXcmFwcGVyLmphdmEgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9TZWN0aW9uQnJlYWtEb2N1bWVudHNBZGFwdGVyV3JhcHBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NzgyZjAKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9TZWN0aW9uQnJlYWtEb2N1bWVudHNBZGFwdGVyV3JhcHBlci5qYXZhCkBAIC0wLDAgKzEsMjE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5kaXJsaXN0OworCitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuUHJlY29uZGl0aW9ucy5jaGVja0FyZ3VtZW50OworCitpbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnY3LndpZGdldC5HcmlkTGF5b3V0TWFuYWdlcjsKK2ltcG9ydCBhbmRyb2lkLnN1cHBvcnQudjcud2lkZ2V0LlJlY3ljbGVyVmlldy5BZGFwdGVyRGF0YU9ic2VydmVyOworaW1wb3J0IGFuZHJvaWQudXRpbC5TcGFyc2VBcnJheTsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwOworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKKy8qKgorICogQWRhcHRlciB3cmFwcGVyIHRoYXQgaW5zZXJ0cyBhIHNvcnQgb2YgbGluZSBicmVhayBpdGVtIGJldHdlZW4gZGlyZWN0b3JpZXMgYW5kIHJlZ3VsYXIgZmlsZXMuCisgKiBPbmx5IG5lZWRzIHRvIGJlIHVzZWQgaW4gR1JJRCBtb2RlLi4uYXQgdGhpcyB0aW1lLgorICovCitmaW5hbCBjbGFzcyBTZWN0aW9uQnJlYWtEb2N1bWVudHNBZGFwdGVyV3JhcHBlciBleHRlbmRzIERvY3VtZW50c0FkYXB0ZXIgeworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJTZWN0aW9uQnJlYWtEb2N1bWVudHNBZGFwdGVyV3JhcHBlciI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IElURU1fVFlQRV9TRUNUSU9OX0JSRUFLID0gSW50ZWdlci5NQVhfVkFMVUU7CisKKyAgICBwcml2YXRlIGZpbmFsIEVudmlyb25tZW50IG1FbnY7CisgICAgcHJpdmF0ZSBmaW5hbCBEb2N1bWVudHNBZGFwdGVyIG1EZWxlZ2F0ZTsKKworICAgIHByaXZhdGUgaW50IG1CcmVha1Bvc2l0aW9uID0gLTE7CisKKyAgICBTZWN0aW9uQnJlYWtEb2N1bWVudHNBZGFwdGVyV3JhcHBlcihFbnZpcm9ubWVudCBlbnZpcm9ubWVudCwgRG9jdW1lbnRzQWRhcHRlciBkZWxlZ2F0ZSkgeworICAgICAgICBtRW52ID0gZW52aXJvbm1lbnQ7CisgICAgICAgIG1EZWxlZ2F0ZSA9IGRlbGVnYXRlOworCisgICAgICAgIC8vIFJlbGF5IGV2ZW50cyBwdWJsaXNoZWQgYnkgb3VyIGRlbGVnYXRlIHRvIG91ciBsaXN0ZW5lcnMgKHByZXN1bWFibHkgUmVjeWNsZXJWaWV3KQorICAgICAgICAvLyB3aXRoIGFkanVzdGVkIHBvc2l0aW9ucy4KKyAgICAgICAgbURlbGVnYXRlLnJlZ2lzdGVyQWRhcHRlckRhdGFPYnNlcnZlcihuZXcgRXZlbnRSZWxheSgpKTsKKyAgICB9CisKKyAgICBwdWJsaWMgR3JpZExheW91dE1hbmFnZXIuU3BhblNpemVMb29rdXAgY3JlYXRlU3BhblNpemVMb29rdXAoKSB7CisgICAgICAgIHJldHVybiBuZXcgR3JpZExheW91dE1hbmFnZXIuU3BhblNpemVMb29rdXAoKSB7CisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyBpbnQgZ2V0U3BhblNpemUoaW50IHBvc2l0aW9uKSB7CisgICAgICAgICAgICAgICAgLy8gTWFrZSBsYXlvdXQgd2hpdGVzcGFjZSBzcGFuIHRoZSBncmlkLiBUaGlzIGhhcyB0aGUgZWZmZWN0IG9mIGJyZWFraW5nCisgICAgICAgICAgICAgICAgLy8gZ3JpZCByb3dzIHdoZW5ldmVyIGxheW91dCB3aGl0ZXNwYWNlIGlzIGVuY291bnRlcmVkLgorICAgICAgICAgICAgICAgIGlmIChnZXRJdGVtVmlld1R5cGUocG9zaXRpb24pID09IElURU1fVFlQRV9TRUNUSU9OX0JSRUFLKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtRW52LmdldENvbHVtbkNvdW50KCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBEb2N1bWVudEhvbGRlciBvbkNyZWF0ZVZpZXdIb2xkZXIoVmlld0dyb3VwIHBhcmVudCwgaW50IHZpZXdUeXBlKSB7CisgICAgICAgIGlmICh2aWV3VHlwZSA9PSBJVEVNX1RZUEVfU0VDVElPTl9CUkVBSykgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBFbXB0eURvY3VtZW50SG9sZGVyKG1FbnYuZ2V0Q29udGV4dCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBtRGVsZWdhdGUuY3JlYXRlVmlld0hvbGRlcihwYXJlbnQsIHZpZXdUeXBlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uQmluZFZpZXdIb2xkZXIoRG9jdW1lbnRIb2xkZXIgaG9sZGVyLCBpbnQgcCwgTGlzdDxPYmplY3Q+IHBheWxvYWQpIHsKKyAgICAgICAgaWYgKGhvbGRlci5nZXRJdGVtVmlld1R5cGUoKSAhPSBJVEVNX1RZUEVfU0VDVElPTl9CUkVBSykgeworICAgICAgICAgICAgbURlbGVnYXRlLm9uQmluZFZpZXdIb2xkZXIoaG9sZGVyLCB0b0RlbGVnYXRlUG9zaXRpb24ocCksIHBheWxvYWQpOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25CaW5kVmlld0hvbGRlcihEb2N1bWVudEhvbGRlciBob2xkZXIsIGludCBwKSB7CisgICAgICAgIGlmIChob2xkZXIuZ2V0SXRlbVZpZXdUeXBlKCkgIT0gSVRFTV9UWVBFX1NFQ1RJT05fQlJFQUspIHsKKyAgICAgICAgICAgIG1EZWxlZ2F0ZS5vbkJpbmRWaWV3SG9sZGVyKGhvbGRlciwgdG9EZWxlZ2F0ZVBvc2l0aW9uKHApKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBpbnQgZ2V0SXRlbUNvdW50KCkgeworICAgICAgICByZXR1cm4gbUJyZWFrUG9zaXRpb24gPT0gLTEKKyAgICAgICAgICAgICAgICA/IG1EZWxlZ2F0ZS5nZXRJdGVtQ291bnQoKQorICAgICAgICAgICAgICAgIDogbURlbGVnYXRlLmdldEl0ZW1Db3VudCgpICsgMTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvbk1vZGVsVXBkYXRlKE1vZGVsIG1vZGVsKSB7CisgICAgICAgIG1EZWxlZ2F0ZS5vbk1vZGVsVXBkYXRlKG1vZGVsKTsKKyAgICAgICAgbUJyZWFrUG9zaXRpb24gPSAtMTsKKworICAgICAgICAvLyBXYWxrIGRvd24gdGhlIGxpc3Qgb2YgSURzIHRpbGwgd2UgZW5jb3VudGVyIHNvbWV0aGluZyB0aGF0J3Mgbm90IGEgZGlyZWN0b3J5LCBhbmQKKyAgICAgICAgLy8gaW5zZXJ0IGEgd2hpdGVzcGFjZSBlbGVtZW50IC0gdGhpcyBpbnRyb2R1Y2VzIGEgdmlzdWFsIGJyZWFrIGluIHRoZSBncmlkIGJldHdlZW4KKyAgICAgICAgLy8gZm9sZGVycyBhbmQgZG9jdW1lbnRzLgorICAgICAgICAvLyBUT0RPOiBUaGlzIGNvZGUgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIG1vZGVsLCBuYW1lbHksIHRoYXQgaXQgcGVyZm9ybXMgYQorICAgICAgICAvLyBidWNrZXRlZCBzb3J0IHdoZXJlIGRpcmVjdG9yaWVzIHdpbGwgYWx3YXlzIGJlIG9yZGVyZWQgYmVmb3JlIG90aGVyIGZpbGVzLiBDQkIuCisgICAgICAgIExpc3Q8U3RyaW5nPiBtb2RlbElkcyA9IG1EZWxlZ2F0ZS5nZXRNb2RlbElkcygpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1vZGVsSWRzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBpZiAoIWlzRGlyZWN0b3J5KG1vZGVsLCBpKSkgeworICAgICAgICAgICAgICAgIG1CcmVha1Bvc2l0aW9uID0gaTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uTW9kZWxVcGRhdGVGYWlsZWQoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgbURlbGVnYXRlLm9uTW9kZWxVcGRhdGVGYWlsZWQoZSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGludCBnZXRJdGVtVmlld1R5cGUoaW50IHApIHsKKyAgICAgICAgaWYgKHAgPT0gbUJyZWFrUG9zaXRpb24pIHsKKyAgICAgICAgICAgIHJldHVybiBJVEVNX1RZUEVfU0VDVElPTl9CUkVBSzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBtRGVsZWdhdGUuZ2V0SXRlbVZpZXdUeXBlKHRvRGVsZWdhdGVQb3NpdGlvbihwKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBwb3NpdGlvbiBvZiBhbiBpdGVtIGluIHRoZSBkZWxlZ2F0ZSwgYWRqdXN0aW5nCisgICAgICogdmFsdWVzIHRoYXQgYXJlIGdyZWF0ZXIgdGhhbiB0aGUgYnJlYWsgcG9zaXRpb24uCisgICAgICoKKyAgICAgKiBAcGFyYW0gcCBQb3NpdGlvbiB3aXRoaW4gdGhlIHZpZXcKKyAgICAgKiBAcmV0dXJuIFBvc2l0aW9uIHdpdGhpbiB0aGUgZGVsZWdhdGUKKyAgICAgKi8KKyAgICBwcml2YXRlIGludCB0b0RlbGVnYXRlUG9zaXRpb24oaW50IHApIHsKKyAgICAgICAgcmV0dXJuIChtQnJlYWtQb3NpdGlvbiAhPSAtMSAmJiBwID4gbUJyZWFrUG9zaXRpb24pID8gcCAtIDEgOiBwOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHBvc2l0aW9uIG9mIGFuIGl0ZW0gaW4gdGhlIHZpZXcsIGFkanVzdGluZworICAgICAqIHZhbHVlcyB0aGF0IGFyZSBncmVhdGVyIHRoYW4gdGhlIGJyZWFrIHBvc2l0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtIHAgUG9zaXRpb24gd2l0aGluIHRoZSBkZWxlZ2F0ZQorICAgICAqIEByZXR1cm4gUG9zaXRpb24gd2l0aGluIHRoZSB2aWV3CisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgdG9WaWV3UG9zaXRpb24oaW50IHApIHsKKyAgICAgICAgLy8gSWYgcG9zaXRpb24gaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBicmVhaywgaW5jcmVhc2UgYnkgb25lLgorICAgICAgICByZXR1cm4gKG1CcmVha1Bvc2l0aW9uICE9IC0xICYmIHAgPj0gbUJyZWFrUG9zaXRpb24pID8gcCArIDEgOiBwOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBTcGFyc2VBcnJheTxTdHJpbmc+IGhpZGUoU3RyaW5nLi4uIGlkcykgeworICAgICAgICAvLyBOT1RFOiBXZSBoZWFyIGFib3V0IHRoZXNlIGNoYW5nZXMgYW5kIGFkanVzdCBicmVhayBwb3NpdGlvbgorICAgICAgICAvLyBpbiBvdXIgQWRhcHRlckRhdGFPYnNlcnZlci4KKyAgICAgICAgcmV0dXJuIG1EZWxlZ2F0ZS5oaWRlKGlkcyk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgdm9pZCB1bmhpZGUoU3BhcnNlQXJyYXk8U3RyaW5nPiBpZHMpIHsKKyAgICAgICAgLy8gTk9URTogV2UgaGVhciBhYm91dCB0aGVzZSBjaGFuZ2VzIGFuZCBhZGp1c3QgYnJlYWsgcG9zaXRpb24KKyAgICAgICAgLy8gaW4gb3VyIEFkYXB0ZXJEYXRhT2JzZXJ2ZXIuCisgICAgICAgIG1EZWxlZ2F0ZS51bmhpZGUoaWRzKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBMaXN0PFN0cmluZz4gZ2V0TW9kZWxJZHMoKSB7CisgICAgICAgIHJldHVybiBtRGVsZWdhdGUuZ2V0TW9kZWxJZHMoKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBTdHJpbmcgZ2V0TW9kZWxJZChpbnQgcCkgeworICAgICAgICByZXR1cm4gKHAgPT0gbUJyZWFrUG9zaXRpb24pID8gbnVsbCA6IG1EZWxlZ2F0ZS5nZXRNb2RlbElkKHRvRGVsZWdhdGVQb3NpdGlvbihwKSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25JdGVtU2VsZWN0aW9uQ2hhbmdlZChTdHJpbmcgaWQpIHsKKyAgICAgICAgbURlbGVnYXRlLm9uSXRlbVNlbGVjdGlvbkNoYW5nZWQoaWQpOworICAgIH0KKworICAgIC8vIExpc3RlbmVyIHdlIGFkZCB0byBvdXIgZGVsZWdhdGUuIFRoaXMgYWxsb3dzIHVzIHRvIHJlbGF5IGV2ZW50cyBwdWJsaXNoZWQKKyAgICAvLyBieSB0aGUgZGVsZWdhdGUgdG8gb3VyIGxpc3RlbmVycyAocHJlc3VtYWJseSBSZWN5Y2xlclZpZXcpIHdpdGggYWRqdXN0ZWQgcG9zaXRpb25zLgorICAgIHByaXZhdGUgZmluYWwgY2xhc3MgRXZlbnRSZWxheSBleHRlbmRzIEFkYXB0ZXJEYXRhT2JzZXJ2ZXIgeworICAgICAgICBwdWJsaWMgdm9pZCBvbkNoYW5nZWQoKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIG9uSXRlbVJhbmdlQ2hhbmdlZChpbnQgcG9zaXRpb25TdGFydCwgaW50IGl0ZW1Db3VudCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBvbkl0ZW1SYW5nZUNoYW5nZWQoaW50IHBvc2l0aW9uU3RhcnQsIGludCBpdGVtQ291bnQsIE9iamVjdCBwYXlsb2FkKSB7CisgICAgICAgICAgICBjaGVja0FyZ3VtZW50KGl0ZW1Db3VudCA9PSAxKTsKKyAgICAgICAgICAgIG5vdGlmeUl0ZW1SYW5nZUNoYW5nZWQodG9WaWV3UG9zaXRpb24ocG9zaXRpb25TdGFydCksIGl0ZW1Db3VudCwgcGF5bG9hZCk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBvbkl0ZW1SYW5nZUluc2VydGVkKGludCBwb3NpdGlvblN0YXJ0LCBpbnQgaXRlbUNvdW50KSB7CisgICAgICAgICAgICBjaGVja0FyZ3VtZW50KGl0ZW1Db3VudCA9PSAxKTsKKyAgICAgICAgICAgIGlmIChwb3NpdGlvblN0YXJ0IDwgbUJyZWFrUG9zaXRpb24pIHsKKyAgICAgICAgICAgICAgICBtQnJlYWtQb3NpdGlvbisrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbm90aWZ5SXRlbVJhbmdlSW5zZXJ0ZWQodG9WaWV3UG9zaXRpb24ocG9zaXRpb25TdGFydCksIGl0ZW1Db3VudCk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBvbkl0ZW1SYW5nZVJlbW92ZWQoaW50IHBvc2l0aW9uU3RhcnQsIGludCBpdGVtQ291bnQpIHsKKyAgICAgICAgICAgIGNoZWNrQXJndW1lbnQoaXRlbUNvdW50ID09IDEpOworICAgICAgICAgICAgaWYgKHBvc2l0aW9uU3RhcnQgPCBtQnJlYWtQb3NpdGlvbikgeworICAgICAgICAgICAgICAgIG1CcmVha1Bvc2l0aW9uLS07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBub3RpZnlJdGVtUmFuZ2VSZW1vdmVkKHRvVmlld1Bvc2l0aW9uKHBvc2l0aW9uU3RhcnQpLCBpdGVtQ291bnQpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgb25JdGVtUmFuZ2VNb3ZlZChpbnQgZnJvbVBvc2l0aW9uLCBpbnQgdG9Qb3NpdGlvbiwgaW50IGl0ZW1Db3VudCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvbW9kZWwvUm9vdEluZm8uamF2YSBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9tb2RlbC9Sb290SW5mby5qYXZhCmluZGV4IDRjYWE4OTEuLjEyYzBiOGYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9tb2RlbC9Sb290SW5mby5qYXZhCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9tb2RlbC9Sb290SW5mby5qYXZhCkBAIC0xNzQsNyArMTc0LDcgQEAKICAgICAgICAgICAgIGRlcml2ZWRJY29uID0gUi5kcmF3YWJsZS5pY19yb290X2hvbWU7CiAgICAgICAgICAgICBkZXJpdmVkVHlwZSA9IFRZUEVfTE9DQUw7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNFeHRlcm5hbFN0b3JhZ2UoKSkgewotICAgICAgICAgICAgZGVyaXZlZEljb24gPSBSLmRyYXdhYmxlLmljX3Jvb3Rfc2RjYXJkOworICAgICAgICAgICAgZGVyaXZlZEljb24gPSBSLmRyYXdhYmxlLmljX3Jvb3Rfc21hcnRwaG9uZTsKICAgICAgICAgICAgIGRlcml2ZWRUeXBlID0gVFlQRV9MT0NBTDsKICAgICAgICAgfSBlbHNlIGlmIChpc0Rvd25sb2FkcygpKSB7CiAgICAgICAgICAgICBkZXJpdmVkSWNvbiA9IFIuZHJhd2FibGUuaWNfcm9vdF9kb3dubG9hZDsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9TdHViUHJvdmlkZXIuamF2YSBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9TdHViUHJvdmlkZXIuamF2YQppbmRleCA2M2E1MTlmLi4yYzMxMWE3IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS90ZXN0cy9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvU3R1YlByb3ZpZGVyLmphdmEKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL1N0dWJQcm92aWRlci5qYXZhCkBAIC00OTMsMzAgKzQ5Myw2IEBACiAgICAgfQogCiAgICAgQFZpc2libGVGb3JUZXN0aW5nCi0gICAgcHVibGljIEZpbGUgY3JlYXRlRmlsZShTdHJpbmcgcm9vdElkLCBTdHJpbmcgcGF0aCwgU3RyaW5nIG1pbWVUeXBlLCBieXRlW10gY29udGVudCkKLSAgICAgICAgICAgIHRocm93cyBGaWxlTm90Rm91bmRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLSAgICAgICAgTG9nLmQoVEFHLCAiQ3JlYXRpbmcgdGVzdCBmaWxlICIgKyByb290SWQgKyAiOiIgKyBwYXRoKTsKLSAgICAgICAgU3R1YkRvY3VtZW50IHJvb3QgPSBtUm9vdHMuZ2V0KHJvb3RJZCkuZG9jdW1lbnQ7Ci0gICAgICAgIGlmIChyb290ID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBGaWxlTm90Rm91bmRFeGNlcHRpb24oIk5vIHJvb3RzIHdpdGggdGhlIElEICIgKyByb290SWQgKyAiIHdlcmUgZm91bmQiKTsKLSAgICAgICAgfQotICAgICAgICBmaW5hbCBGaWxlIGZpbGUgPSBuZXcgRmlsZShyb290LmZpbGUsIHBhdGguc3Vic3RyaW5nKDEpKTsKLSAgICAgICAgaWYgKERvY3VtZW50c0NvbnRyYWN0LkRvY3VtZW50Lk1JTUVfVFlQRV9ESVIuZXF1YWxzKG1pbWVUeXBlKSkgewotICAgICAgICAgICAgaWYgKCFmaWxlLm1rZGlycygpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZpbGVOb3RGb3VuZEV4Y2VwdGlvbigiQ291bGRuJ3QgY3JlYXRlIGRpcmVjdG9yeSAiICsgZmlsZS5nZXRQYXRoKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKCFmaWxlLmNyZWF0ZU5ld0ZpbGUoKSkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBGaWxlTm90Rm91bmRFeGNlcHRpb24oIkNvdWxkbid0IGNyZWF0ZSBmaWxlICIgKyBmaWxlLmdldFBhdGgoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0cnkgKGZpbmFsIEZpbGVPdXRwdXRTdHJlYW0gZm91dCA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKGZpbGUpKSB7Ci0gICAgICAgICAgICAgICAgZm91dC53cml0ZShjb250ZW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmlsZTsKLSAgICB9Ci0KLSAgICBAVmlzaWJsZUZvclRlc3RpbmcKICAgICBwdWJsaWMgVXJpIGNyZWF0ZVJlZ3VsYXJGaWxlKFN0cmluZyByb290SWQsIFN0cmluZyBwYXRoLCBTdHJpbmcgbWltZVR5cGUsIGJ5dGVbXSBjb250ZW50KQogICAgICAgICAgICAgdGhyb3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBmaW5hbCBGaWxlIGZpbGUgPSBjcmVhdGVGaWxlKHJvb3RJZCwgcGF0aCwgbWltZVR5cGUsIGNvbnRlbnQpOwpAQCAtNTYwLDYgKzUzNiwyOSBAQAogICAgICAgICByZXR1cm4gZm91bmQuZmlsZTsKICAgICB9CiAKKyAgICBwcml2YXRlIEZpbGUgY3JlYXRlRmlsZShTdHJpbmcgcm9vdElkLCBTdHJpbmcgcGF0aCwgU3RyaW5nIG1pbWVUeXBlLCBieXRlW10gY29udGVudCkKKyAgICAgICAgICAgIHRocm93cyBGaWxlTm90Rm91bmRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKKyAgICAgICAgTG9nLmQoVEFHLCAiQ3JlYXRpbmcgdGVzdCBmaWxlICIgKyByb290SWQgKyAiOiIgKyBwYXRoKTsKKyAgICAgICAgU3R1YkRvY3VtZW50IHJvb3QgPSBtUm9vdHMuZ2V0KHJvb3RJZCkuZG9jdW1lbnQ7CisgICAgICAgIGlmIChyb290ID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBGaWxlTm90Rm91bmRFeGNlcHRpb24oIk5vIHJvb3RzIHdpdGggdGhlIElEICIgKyByb290SWQgKyAiIHdlcmUgZm91bmQiKTsKKyAgICAgICAgfQorICAgICAgICBmaW5hbCBGaWxlIGZpbGUgPSBuZXcgRmlsZShyb290LmZpbGUsIHBhdGguc3Vic3RyaW5nKDEpKTsKKyAgICAgICAgaWYgKERvY3VtZW50c0NvbnRyYWN0LkRvY3VtZW50Lk1JTUVfVFlQRV9ESVIuZXF1YWxzKG1pbWVUeXBlKSkgeworICAgICAgICAgICAgaWYgKCFmaWxlLm1rZGlycygpKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZpbGVOb3RGb3VuZEV4Y2VwdGlvbigiQ291bGRuJ3QgY3JlYXRlIGRpcmVjdG9yeSAiICsgZmlsZS5nZXRQYXRoKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKCFmaWxlLmNyZWF0ZU5ld0ZpbGUoKSkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBGaWxlTm90Rm91bmRFeGNlcHRpb24oIkNvdWxkbid0IGNyZWF0ZSBmaWxlICIgKyBmaWxlLmdldFBhdGgoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0cnkgKGZpbmFsIEZpbGVPdXRwdXRTdHJlYW0gZm91dCA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKGZpbGUpKSB7CisgICAgICAgICAgICAgICAgZm91dC53cml0ZShjb250ZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmlsZTsKKyAgICB9CisKICAgICBmaW5hbCBzdGF0aWMgY2xhc3MgUm9vdEluZm8gewogICAgICAgICBwdWJsaWMgZmluYWwgU3RyaW5nIG5hbWU7CiAgICAgICAgIHB1YmxpYyBmaW5hbCBTdHViRG9jdW1lbnQgZG9jdW1lbnQ7CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS90ZXN0cy9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9Nb2RlbEJhY2tlZERvY3VtZW50c0FkYXB0ZXJUZXN0LmphdmEgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS90ZXN0cy9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9Nb2RlbEJhY2tlZERvY3VtZW50c0FkYXB0ZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNlMTgyMwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9kaXJsaXN0L01vZGVsQmFja2VkRG9jdW1lbnRzQWRhcHRlclRlc3QuamF2YQpAQCAtMCwwICsxLDE1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuZGlybGlzdDsKKworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2UuQ3Vyc29yOworaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC52Ny53aWRnZXQuUmVjeWNsZXJWaWV3OworaW1wb3J0IGFuZHJvaWQudGVzdC5BbmRyb2lkVGVzdENhc2U7CitpbXBvcnQgYW5kcm9pZC50ZXN0LnN1aXRlYnVpbGRlci5hbm5vdGF0aW9uLlNtYWxsVGVzdDsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuU3BhcnNlQXJyYXk7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdHcm91cDsKKworaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlN0YXRlOworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK0BTbWFsbFRlc3QKK3B1YmxpYyBjbGFzcyBNb2RlbEJhY2tlZERvY3VtZW50c0FkYXB0ZXJUZXN0IGV4dGVuZHMgQW5kcm9pZFRlc3RDYXNlIHsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBVVRIT1JJVFkgPSAidGVzdF9hdXRob3JpdHkiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIE5BTUVTID0gbmV3IFN0cmluZ1tdIHsKKyAgICAgICAgICAgICI0IiwKKyAgICAgICAgICAgICJmb28iLAorICAgICAgICAgICAgIjEiLAorICAgICAgICAgICAgImJhciIsCisgICAgICAgICAgICAiKihMamlmbDthIiwKKyAgICAgICAgICAgICIwIiwKKyAgICAgICAgICAgICJiYXoiLAorICAgICAgICAgICAgIjIiLAorICAgICAgICAgICAgIjMiLAorICAgICAgICAgICAgIiUkJVZEIgorICAgIH07CisKKyAgICBwcml2YXRlIFRlc3RNb2RlbCBtTW9kZWw7CisgICAgcHJpdmF0ZSBNb2RlbEJhY2tlZERvY3VtZW50c0FkYXB0ZXIgbUFkYXB0ZXI7CisKKyAgICBwdWJsaWMgdm9pZCBzZXRVcCgpIHsKKworICAgICAgICBmaW5hbCBDb250ZXh0IHRlc3RDb250ZXh0ID0gVGVzdENvbnRleHQuY3JlYXRlU3RvcmFnZVRlc3RDb250ZXh0KGdldENvbnRleHQoKSwgQVVUSE9SSVRZKTsKKyAgICAgICAgbU1vZGVsID0gbmV3IFRlc3RNb2RlbCh0ZXN0Q29udGV4dCwgQVVUSE9SSVRZKTsKKyAgICAgICAgbU1vZGVsLnVwZGF0ZShOQU1FUyk7CisKKyAgICAgICAgRG9jdW1lbnRzQWRhcHRlci5FbnZpcm9ubWVudCBlbnYgPSBuZXcgVGVzdEVudmlyb25tZW50KHRlc3RDb250ZXh0KTsKKworICAgICAgICBtQWRhcHRlciA9IG5ldyBNb2RlbEJhY2tlZERvY3VtZW50c0FkYXB0ZXIoCisgICAgICAgICAgICAgICAgZW52LCBuZXcgSWNvbkhlbHBlcih0ZXN0Q29udGV4dCwgU3RhdGUuTU9ERV9HUklEKSk7CisgICAgICAgIG1BZGFwdGVyLm9uTW9kZWxVcGRhdGUobU1vZGVsKTsKKyAgICB9CisKKyAgICAvLyBUZXN0cyB0aGF0IHRoZSBpdGVtIGNvdW50IGlzIGNvcnJlY3QuCisgICAgcHVibGljIHZvaWQgdGVzdEl0ZW1Db3VudCgpIHsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKG1Nb2RlbC5nZXRJdGVtQ291bnQoKSwgbUFkYXB0ZXIuZ2V0SXRlbUNvdW50KCkpOworICAgIH0KKworICAgIC8vIFRlc3RzIHRoYXQgdGhlIGl0ZW0gY291bnQgaXMgY29ycmVjdC4KKyAgICBwdWJsaWMgdm9pZCB0ZXN0SGlkZV9JdGVtQ291bnQoKSB7CisgICAgICAgIExpc3Q8U3RyaW5nPiBpZHMgPSBtTW9kZWwuZ2V0TW9kZWxJZHMoKTsKKyAgICAgICAgbUFkYXB0ZXIuaGlkZShpZHMuZ2V0KDApLCBpZHMuZ2V0KDEpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKG1Nb2RlbC5nZXRJdGVtQ291bnQoKSAtIDIsIG1BZGFwdGVyLmdldEl0ZW1Db3VudCgpKTsKKyAgICB9CisKKyAgICAvLyBUZXN0cyB0aGF0IHRoZSBpdGVtcyBjYW4gYmUgaGlkZGVuIGFuZCB1bmhpZGRlbi4KKyAgICBwdWJsaWMgdm9pZCB0ZXN0VW5oaWRlX0l0ZW1Db3VudCgpIHsKKyAgICAgICAgTGlzdDxTdHJpbmc+IGlkcyA9IG1Nb2RlbC5nZXRNb2RlbElkcygpOworICAgICAgICBTcGFyc2VBcnJheTxTdHJpbmc+IGhpZGRlbiA9IG1BZGFwdGVyLmhpZGUoaWRzLnRvQXJyYXkobmV3IFN0cmluZ1tpZHMuc2l6ZSgpXSkpOworICAgICAgICBtQWRhcHRlci51bmhpZGUoaGlkZGVuKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKG1Nb2RlbC5nZXRJdGVtQ291bnQoKSwgbUFkYXB0ZXIuZ2V0SXRlbUNvdW50KCkpOworICAgIH0KKworICAgIC8vIFRlc3RzIHRoYXQgdGhlIGl0ZW1zIGNhbiBiZSBoaWRkZW4gYW5kIHVuaGlkZGVuLgorICAgIHB1YmxpYyB2b2lkIHRlc3RVbmhpZGVfUHJlc2VydmVzT3JkZXIoKSB7CisgICAgICAgIExpc3Q8U3RyaW5nPiBpZHMgPSBtTW9kZWwuZ2V0TW9kZWxJZHMoKTsKKyAgICAgICAgU3BhcnNlQXJyYXk8U3RyaW5nPiBoaWRkZW4gPSBtQWRhcHRlci5oaWRlKAorICAgICAgICAgICAgICAgIGlkcy5nZXQoMCksIGlkcy5nZXQoMSksIGlkcy5nZXQoNSksIGlkcy5nZXQoOSkpOworICAgICAgICBtQWRhcHRlci51bmhpZGUoaGlkZGVuKTsKKworICAgICAgICAvLyBGaW5hbGx5IGVuc3VyZSB0aGUgcmVzdG9yZWQgaXRlbXMgYXJlIGluIHRoZSBvcmlnaW5hbCBvcmRlcgorICAgICAgICAvLyBieSBjaGVja2luZyB0aGVtIGFnYWluc3QgdGhlIG1vZGVsLgorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1BZGFwdGVyLmdldEl0ZW1Db3VudCgpOyBpKyspIHsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyhtTW9kZWwuaWRGb3JQb3NpdGlvbihpKSwgbUFkYXB0ZXIuZ2V0TW9kZWxJZChpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGZpbmFsIGNsYXNzIFRlc3RFbnZpcm9ubWVudCBpbXBsZW1lbnRzIERvY3VtZW50c0FkYXB0ZXIuRW52aXJvbm1lbnQgeworICAgICAgICBwcml2YXRlIGZpbmFsIENvbnRleHQgdGVzdENvbnRleHQ7CisKKyAgICAgICAgcHJpdmF0ZSBUZXN0RW52aXJvbm1lbnQoQ29udGV4dCB0ZXN0Q29udGV4dCkgeworICAgICAgICAgICAgdGhpcy50ZXN0Q29udGV4dCA9IHRlc3RDb250ZXh0OworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBib29sZWFuIGlzU2VsZWN0ZWQoU3RyaW5nIGlkKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGJvb2xlYW4gaXNEb2N1bWVudEVuYWJsZWQoU3RyaW5nIG1pbWVUeXBlLCBpbnQgZmxhZ3MpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIGluaXREb2N1bWVudEhvbGRlcihEb2N1bWVudEhvbGRlciBob2xkZXIpIHt9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBNb2RlbCBnZXRNb2RlbCgpIHsKKyAgICAgICAgICAgIHJldHVybiBtTW9kZWw7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIFN0YXRlIGdldERpc3BsYXlTdGF0ZSgpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBDb250ZXh0IGdldENvbnRleHQoKSB7CisgICAgICAgICAgICByZXR1cm4gdGVzdENvbnRleHQ7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGludCBnZXRDb2x1bW5Db3VudCgpIHsKKyAgICAgICAgICAgIHJldHVybiA0OworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uQmluZERvY3VtZW50SG9sZGVyKERvY3VtZW50SG9sZGVyIGhvbGRlciwgQ3Vyc29yIGN1cnNvcikge30KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBEdW1teUxpc3RlbmVyIGltcGxlbWVudHMgTW9kZWwuVXBkYXRlTGlzdGVuZXIgeworICAgICAgICBwdWJsaWMgdm9pZCBvbk1vZGVsVXBkYXRlKE1vZGVsIG1vZGVsKSB7fQorICAgICAgICBwdWJsaWMgdm9pZCBvbk1vZGVsVXBkYXRlRmFpbGVkKEV4Y2VwdGlvbiBlKSB7fQorICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIER1bW15QWRhcHRlciBleHRlbmRzIFJlY3ljbGVyVmlldy5BZGFwdGVyPFJlY3ljbGVyVmlldy5WaWV3SG9sZGVyPiB7CisgICAgICAgIHB1YmxpYyBpbnQgZ2V0SXRlbUNvdW50KCkgeyByZXR1cm4gMDsgfQorICAgICAgICBwdWJsaWMgdm9pZCBvbkJpbmRWaWV3SG9sZGVyKFJlY3ljbGVyVmlldy5WaWV3SG9sZGVyIGhvbGRlciwgaW50IHBvc2l0aW9uKSB7fQorICAgICAgICBwdWJsaWMgUmVjeWNsZXJWaWV3LlZpZXdIb2xkZXIgb25DcmVhdGVWaWV3SG9sZGVyKFZpZXdHcm91cCBwYXJlbnQsIGludCB2aWV3VHlwZSkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS90ZXN0cy9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9Nb2RlbFRlc3QuamF2YSBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9kaXJsaXN0L01vZGVsVGVzdC5qYXZhCmluZGV4IGEyYjZhZDUuLmJlZDdjOWMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9kaXJsaXN0L01vZGVsVGVzdC5qYXZhCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9kaXJsaXN0L01vZGVsVGVzdC5qYXZhCkBAIC0yMSwxNiArMjEsMTAgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dFdyYXBwZXI7CiBpbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5DdXJzb3I7CiBpbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5NYXRyaXhDdXJzb3I7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuVXJpOwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuRG9jdW1lbnRzQ29udHJhY3Q7CiBpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5Eb2N1bWVudHNDb250cmFjdC5Eb2N1bWVudDsKLWltcG9ydCBhbmRyb2lkLnN1cHBvcnQudjcud2lkZ2V0LlJlY3ljbGVyVmlldzsKIGltcG9ydCBhbmRyb2lkLnRlc3QuQW5kcm9pZFRlc3RDYXNlOwotaW1wb3J0IGFuZHJvaWQudGVzdC5tb2NrLk1vY2tDb250ZW50UHJvdmlkZXI7CiBpbXBvcnQgYW5kcm9pZC50ZXN0Lm1vY2suTW9ja0NvbnRlbnRSZXNvbHZlcjsKIGltcG9ydCBhbmRyb2lkLnRlc3Quc3VpdGVidWlsZGVyLmFubm90YXRpb24uU21hbGxUZXN0OwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7CiAKIGltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5EaXJlY3RvcnlSZXN1bHQ7CiBpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuUm9vdEN1cnNvcldyYXBwZXI7CkBAIC00OSwzMCArNDMsMzMgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBJVEVNX0NPVU5UID0gMTA7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFVVEhPUklUWSA9ICJ0ZXN0X2F1dGhvcml0eSI7CisKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBDT0xVTU5TID0gbmV3IFN0cmluZ1tdewogICAgICAgICBSb290Q3Vyc29yV3JhcHBlci5DT0xVTU5fQVVUSE9SSVRZLAogICAgICAgICBEb2N1bWVudC5DT0xVTU5fRE9DVU1FTlRfSUQsCiAgICAgICAgIERvY3VtZW50LkNPTFVNTl9GTEFHUywKICAgICAgICAgRG9jdW1lbnQuQ09MVU1OX0RJU1BMQVlfTkFNRSwKLSAgICAgICAgRG9jdW1lbnQuQ09MVU1OX1NJWkUKKyAgICAgICAgRG9jdW1lbnQuQ09MVU1OX1NJWkUsCisgICAgICAgIERvY3VtZW50LkNPTFVNTl9NSU1FX1RZUEUKICAgICB9OwotICAgIHByaXZhdGUgc3RhdGljIEN1cnNvciBjdXJzb3I7CiAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBOQU1FUyA9IG5ldyBTdHJpbmdbXSB7CisgICAgICAgICAgICAiNCIsCisgICAgICAgICAgICAiZm9vIiwKKyAgICAgICAgICAgICIxIiwKKyAgICAgICAgICAgICJiYXIiLAorICAgICAgICAgICAgIiooTGppZmw7YSIsCisgICAgICAgICAgICAiMCIsCisgICAgICAgICAgICAiYmF6IiwKKyAgICAgICAgICAgICIyIiwKKyAgICAgICAgICAgICIzIiwKKyAgICAgICAgICAgICIlJCVWRCIKKyAgICAgICAgfTsKKworICAgIHByaXZhdGUgQ3Vyc29yIGN1cnNvcjsKICAgICBwcml2YXRlIENvbnRleHQgY29udGV4dDsKICAgICBwcml2YXRlIE1vZGVsIG1vZGVsOwogICAgIHByaXZhdGUgVGVzdENvbnRlbnRQcm92aWRlciBwcm92aWRlcjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBOQU1FUyA9IG5ldyBTdHJpbmdbXSB7Ci0gICAgICAgICI0IiwKLSAgICAgICAgImZvbyIsCi0gICAgICAgICIxIiwKLSAgICAgICAgImJhciIsCi0gICAgICAgICIqKExqaWZsO2EiLAotICAgICAgICAiMCIsCi0gICAgICAgICJiYXoiLAotICAgICAgICAiMiIsCi0gICAgICAgICIzIiwKLSAgICAgICAgIiUkJVZEIgotICAgIH07CiAKICAgICBwdWJsaWMgdm9pZCBzZXRVcCgpIHsKICAgICAgICAgc2V0dXBUZXN0Q29udGV4dCgpOwpAQCAtOTYsNyArOTMsNyBAQAogICAgICAgICByLmN1cnNvciA9IGN1cnNvcjsKIAogICAgICAgICAvLyBJbnN0YW50aWF0ZSB0aGUgbW9kZWwgd2l0aCBhIGR1bW15IHZpZXcgYWRhcHRlciBhbmQgbGlzdGVuZXIgdGhhdCAoZm9yIG5vdykgZG8gbm90aGluZy4KLSAgICAgICAgbW9kZWwgPSBuZXcgTW9kZWwoY29udGV4dCwgbmV3IER1bW15QWRhcHRlcigpKTsKKyAgICAgICAgbW9kZWwgPSBuZXcgTW9kZWwoY29udGV4dCk7CiAgICAgICAgIG1vZGVsLmFkZFVwZGF0ZUxpc3RlbmVyKG5ldyBEdW1teUxpc3RlbmVyKCkpOwogICAgICAgICBtb2RlbC51cGRhdGUocik7CiAgICAgfQpAQCAtMTk3LDI3ICsxOTQsNzQgQEAKIAogICAgIC8vIFRlc3RzIHNvcnRpbmcgYnkgaXRlbSBzaXplLgogICAgIHB1YmxpYyB2b2lkIHRlc3RTb3J0X3NpemVzKCkgewotICAgICAgICBCaXRTZXQgc2VlbiA9IG5ldyBCaXRTZXQoSVRFTV9DT1VOVCk7Ci0gICAgICAgIExpc3Q8SW50ZWdlcj4gc2l6ZXMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLQogICAgICAgICBEaXJlY3RvcnlSZXN1bHQgciA9IG5ldyBEaXJlY3RvcnlSZXN1bHQoKTsKICAgICAgICAgci5jdXJzb3IgPSBjdXJzb3I7CiAgICAgICAgIHIuc29ydE9yZGVyID0gU3RhdGUuU09SVF9PUkRFUl9TSVpFOwogICAgICAgICBtb2RlbC51cGRhdGUocik7CiAKKyAgICAgICAgQml0U2V0IHNlZW4gPSBuZXcgQml0U2V0KElURU1fQ09VTlQpOworICAgICAgICBpbnQgcHJldmlvdXNTaXplID0gSW50ZWdlci5NQVhfVkFMVUU7CiAgICAgICAgIGZvciAoU3RyaW5nIGlkOiBtb2RlbC5nZXRNb2RlbElkcygpKSB7CiAgICAgICAgICAgICBDdXJzb3IgYyA9IG1vZGVsLmdldEl0ZW0oaWQpOwogICAgICAgICAgICAgc2Vlbi5zZXQoYy5nZXRQb3NpdGlvbigpKTsKLSAgICAgICAgICAgIHNpemVzLmFkZChEb2N1bWVudEluZm8uZ2V0Q3Vyc29ySW50KGMsIERvY3VtZW50LkNPTFVNTl9TSVpFKSk7CisgICAgICAgICAgICAvLyBDaGVjayBzb3J0IG9yZGVyIC0gZGVzY2VuZGluZyBudW1lcmljYWwKKyAgICAgICAgICAgIGludCBzaXplID0gRG9jdW1lbnRJbmZvLmdldEN1cnNvckludChjLCBEb2N1bWVudC5DT0xVTU5fU0laRSk7CisgICAgICAgICAgICBhc3NlcnRUcnVlKHByZXZpb3VzU2l6ZSA+PSBzaXplKTsKKyAgICAgICAgICAgIHByZXZpb3VzU2l6ZSA9IHNpemU7CiAgICAgICAgIH0KLQorICAgICAgICAvLyBDaGVjayB0aGF0IGFsbCBpdGVtcyB3ZXJlIGFjY291bnRlZCBmb3IuCiAgICAgICAgIGFzc2VydEVxdWFscyhJVEVNX0NPVU5ULCBzZWVuLmNhcmRpbmFsaXR5KCkpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemVzLnNpemUoKS0xOyArK2kpIHsKLSAgICAgICAgICAgIC8vIE5vdGU6IHNpemVzIGFyZSBzb3J0ZWQgZGVzY2VuZGluZy4KLSAgICAgICAgICAgIGFzc2VydFRydWUoc2l6ZXMuZ2V0KGkpID49IHNpemVzLmdldChpKzEpKTsKLSAgICAgICAgfQogICAgIH0KIAorICAgIC8vIFRlc3RzIHRoYXQgZGlyZWN0b3JpZXMgYW5kIGZpbGVzIGFyZSBwcm9wZXJseSBidWNrZXRlZCB3aGVuIHNvcnRpbmcgYnkgc2l6ZQorICAgIHB1YmxpYyB2b2lkIHRlc3RTb3J0X3NpemVzV2l0aEJ1Y2tldGluZygpIHsKKyAgICAgICAgTWF0cml4Q3Vyc29yIGMgPSBuZXcgTWF0cml4Q3Vyc29yKENPTFVNTlMpOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgSVRFTV9DT1VOVDsgKytpKSB7CisgICAgICAgICAgICBNYXRyaXhDdXJzb3IuUm93QnVpbGRlciByb3cgPSBjLm5ld1JvdygpOworICAgICAgICAgICAgcm93LmFkZChSb290Q3Vyc29yV3JhcHBlci5DT0xVTU5fQVVUSE9SSVRZLCBBVVRIT1JJVFkpOworICAgICAgICAgICAgcm93LmFkZChEb2N1bWVudC5DT0xVTU5fRE9DVU1FTlRfSUQsIEludGVnZXIudG9TdHJpbmcoaSkpOworICAgICAgICAgICAgcm93LmFkZChEb2N1bWVudC5DT0xVTU5fU0laRSwgaSk7CisgICAgICAgICAgICAvLyBJbnRlcmxlYXZlIGRpcmVjdG9yaWVzIGFuZCB0ZXh0IGZpbGVzLgorICAgICAgICAgICAgU3RyaW5nIG1pbWVUeXBlID0oaSAlIDIgPT0gMCkgPyBEb2N1bWVudC5NSU1FX1RZUEVfRElSIDogInRleHQvKiI7CisgICAgICAgICAgICByb3cuYWRkKERvY3VtZW50LkNPTFVNTl9NSU1FX1RZUEUsIG1pbWVUeXBlKTsKKyAgICAgICAgfQorCisgICAgICAgIERpcmVjdG9yeVJlc3VsdCByID0gbmV3IERpcmVjdG9yeVJlc3VsdCgpOworICAgICAgICByLmN1cnNvciA9IGM7CisgICAgICAgIHIuc29ydE9yZGVyID0gU3RhdGUuU09SVF9PUkRFUl9TSVpFOworICAgICAgICBtb2RlbC51cGRhdGUocik7CisKKyAgICAgICAgYm9vbGVhbiBzZWVuQWxsRGlycyA9IGZhbHNlOworICAgICAgICBpbnQgcHJldmlvdXNTaXplID0gSW50ZWdlci5NQVhfVkFMVUU7CisgICAgICAgIEJpdFNldCBzZWVuID0gbmV3IEJpdFNldChJVEVNX0NPVU5UKTsKKyAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIGl0ZW1zIGluIHNvcnQgb3JkZXIuIE9uY2Ugd2UndmUgZW5jb3VudGVyZWQgYSBkb2N1bWVudCAoaS5lLiBub3QgYQorICAgICAgICAvLyBkaXJlY3RvcnkpLCBhbGwgc3Vic2VxdWVudCBpdGVtcyBtdXN0IGFsc28gYmUgZG9jdW1lbnRzLiBUaGF0IGlzLCBhbGwgZGlyZWN0b3JpZXMgYXJlCisgICAgICAgIC8vIGJ1Y2tldGVkIGF0IHRoZSBmcm9udCBvZiB0aGUgbGlzdCwgc29ydGVkIGJ5IHNpemUsIGZvbGxvd2VkIGJ5IGRvY3VtZW50cywgc29ydGVkIGJ5IHNpemUuCisgICAgICAgIGZvciAoU3RyaW5nIGlkOiBtb2RlbC5nZXRNb2RlbElkcygpKSB7CisgICAgICAgICAgICBDdXJzb3IgY091dCA9IG1vZGVsLmdldEl0ZW0oaWQpOworICAgICAgICAgICAgc2Vlbi5zZXQoY091dC5nZXRQb3NpdGlvbigpKTsKKworICAgICAgICAgICAgU3RyaW5nIG1pbWVUeXBlID0gRG9jdW1lbnRJbmZvLmdldEN1cnNvclN0cmluZyhjT3V0LCBEb2N1bWVudC5DT0xVTU5fTUlNRV9UWVBFKTsKKyAgICAgICAgICAgIGlmIChzZWVuQWxsRGlycykgeworICAgICAgICAgICAgICAgIGFzc2VydEZhbHNlKERvY3VtZW50Lk1JTUVfVFlQRV9ESVIuZXF1YWxzKG1pbWVUeXBlKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICghRG9jdW1lbnQuTUlNRV9UWVBFX0RJUi5lcXVhbHMobWltZVR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAgIHNlZW5BbGxEaXJzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgLy8gUmVzZXQgdGhlIHByZXZpb3VzIHNpemUgc2VlbiwgYmVjYXVzZSBkb2N1bWVudHMgYXJlIGJ1Y2tldGVkIHNlcGFyYXRlbHkgYnkKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHNvcnQuCisgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzU2l6ZSA9IEludGVnZXIuTUFYX1ZBTFVFOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIENoZWNrIHNvcnQgb3JkZXIgLSBkZXNjZW5kaW5nIG51bWVyaWNhbAorICAgICAgICAgICAgaW50IHNpemUgPSBEb2N1bWVudEluZm8uZ2V0Q3Vyc29ySW50KGMsIERvY3VtZW50LkNPTFVNTl9TSVpFKTsKKyAgICAgICAgICAgIGFzc2VydFRydWUocHJldmlvdXNTaXplID49IHNpemUpOworICAgICAgICAgICAgcHJldmlvdXNTaXplID0gc2l6ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENoZWNrIHRoYXQgYWxsIGl0ZW1zIHdlcmUgYWNjb3VudGVkIGZvci4KKyAgICAgICAgYXNzZXJ0RXF1YWxzKElURU1fQ09VTlQsIHNlZW4uY2FyZGluYWxpdHkoKSk7CisgICAgfQogCiAgICAgLy8gVGVzdHMgdGhhdCBNb2RlbC5kZWxldGUgd29ya3MgY29ycmVjdGx5LgogICAgIHB1YmxpYyB2b2lkIHRlc3REZWxldGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKQEAgLTI3OCwzMiArMzIyLDQgQEAKICAgICAgICAgcHVibGljIHZvaWQgb25Nb2RlbFVwZGF0ZShNb2RlbCBtb2RlbCkge30KICAgICAgICAgcHVibGljIHZvaWQgb25Nb2RlbFVwZGF0ZUZhaWxlZChFeGNlcHRpb24gZSkge30KICAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBEdW1teUFkYXB0ZXIgZXh0ZW5kcyBSZWN5Y2xlclZpZXcuQWRhcHRlcjxSZWN5Y2xlclZpZXcuVmlld0hvbGRlcj4gewotICAgICAgICBwdWJsaWMgaW50IGdldEl0ZW1Db3VudCgpIHsgcmV0dXJuIDA7IH0KLSAgICAgICAgcHVibGljIHZvaWQgb25CaW5kVmlld0hvbGRlcihSZWN5Y2xlclZpZXcuVmlld0hvbGRlciBob2xkZXIsIGludCBwb3NpdGlvbikge30KLSAgICAgICAgcHVibGljIFJlY3ljbGVyVmlldy5WaWV3SG9sZGVyIG9uQ3JlYXRlVmlld0hvbGRlcihWaWV3R3JvdXAgcGFyZW50LCBpbnQgdmlld1R5cGUpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgVGVzdENvbnRlbnRQcm92aWRlciBleHRlbmRzIE1vY2tDb250ZW50UHJvdmlkZXIgewotICAgICAgICBMaXN0PFVyaT4gbURlbGV0ZWQgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIEJ1bmRsZSBjYWxsKFN0cmluZyBtZXRob2QsIFN0cmluZyBhcmcsIEJ1bmRsZSBleHRyYXMpIHsKLSAgICAgICAgICAgIC8vIEludGVyY2VwdCBhbmQgbG9nIGRlbGV0ZSBtZXRob2QgY2FsbHMuCi0gICAgICAgICAgICBpZiAoRG9jdW1lbnRzQ29udHJhY3QuTUVUSE9EX0RFTEVURV9ET0NVTUVOVC5lcXVhbHMobWV0aG9kKSkgewotICAgICAgICAgICAgICAgIGZpbmFsIFVyaSBkb2N1bWVudFVyaSA9IGV4dHJhcy5nZXRQYXJjZWxhYmxlKERvY3VtZW50c0NvbnRyYWN0LkVYVFJBX1VSSSk7Ci0gICAgICAgICAgICAgICAgbURlbGV0ZWQuYWRkKGRvY3VtZW50VXJpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJ1bmRsZSgpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIuY2FsbChtZXRob2QsIGFyZywgZXh0cmFzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIGFzc2VydFdhc0RlbGV0ZWQoRG9jdW1lbnRJbmZvIGRvYykgewotICAgICAgICAgICAgYXNzZXJ0VHJ1ZShtRGVsZXRlZC5jb250YWlucyhkb2MuZGVyaXZlZFVyaSkpOwotICAgICAgICB9Ci0gICAgfQogfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL2Rpcmxpc3QvTXVsdGlTZWxlY3RNYW5hZ2VyVGVzdC5qYXZhIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL2Rpcmxpc3QvTXVsdGlTZWxlY3RNYW5hZ2VyVGVzdC5qYXZhCmluZGV4IDU5ODkxMzUuLmUwNjE5OWUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9kaXJsaXN0L011bHRpU2VsZWN0TWFuYWdlclRlc3QuamF2YQorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS90ZXN0cy9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9NdWx0aVNlbGVjdE1hbmFnZXJUZXN0LmphdmEKQEAgLTIzLDYgKzIzLDcgQEAKIAogaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlRlc3RJbnB1dEV2ZW50OwogaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLmRpcmxpc3QuTXVsdGlTZWxlY3RNYW5hZ2VyLlNlbGVjdGlvbjsKKwogaW1wb3J0IGNvbS5nb29nbGUuY29tbW9uLmNvbGxlY3QuTGlzdHM7CiAKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwpAQCAtNDQsMTEgKzQ1LDEzIEBACiAgICAgcHJpdmF0ZSBNdWx0aVNlbGVjdE1hbmFnZXIgbU1hbmFnZXI7CiAgICAgcHJpdmF0ZSBUZXN0Q2FsbGJhY2sgbUNhbGxiYWNrOwogICAgIHByaXZhdGUgVGVzdFNlbGVjdGlvbkVudmlyb25tZW50IG1FbnY7CisgICAgcHJpdmF0ZSBUZXN0RG9jdW1lbnRzQWRhcHRlciBtQWRhcHRlcjsKIAogICAgIHB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIG1DYWxsYmFjayA9IG5ldyBUZXN0Q2FsbGJhY2soKTsKICAgICAgICAgbUVudiA9IG5ldyBUZXN0U2VsZWN0aW9uRW52aXJvbm1lbnQoaXRlbXMpOwotICAgICAgICBtTWFuYWdlciA9IG5ldyBNdWx0aVNlbGVjdE1hbmFnZXIobUVudiwgTXVsdGlTZWxlY3RNYW5hZ2VyLk1PREVfTVVMVElQTEUpOworICAgICAgICBtQWRhcHRlciA9IG5ldyBUZXN0RG9jdW1lbnRzQWRhcHRlcihpdGVtcyk7CisgICAgICAgIG1NYW5hZ2VyID0gbmV3IE11bHRpU2VsZWN0TWFuYWdlcihtRW52LCBtQWRhcHRlciwgTXVsdGlTZWxlY3RNYW5hZ2VyLk1PREVfTVVMVElQTEUpOwogICAgICAgICBtTWFuYWdlci5hZGRDYWxsYmFjayhtQ2FsbGJhY2spOwogICAgIH0KIApAQCAtMTY0LDcgKzE2Nyw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgdGVzdFNpbmdsZVNlbGVjdE1vZGUoKSB7Ci0gICAgICAgIG1NYW5hZ2VyID0gbmV3IE11bHRpU2VsZWN0TWFuYWdlcihtRW52LCBNdWx0aVNlbGVjdE1hbmFnZXIuTU9ERV9TSU5HTEUpOworICAgICAgICBtTWFuYWdlciA9IG5ldyBNdWx0aVNlbGVjdE1hbmFnZXIobUVudiwgbUFkYXB0ZXIsIE11bHRpU2VsZWN0TWFuYWdlci5NT0RFX1NJTkdMRSk7CiAgICAgICAgIG1NYW5hZ2VyLmFkZENhbGxiYWNrKG1DYWxsYmFjayk7CiAgICAgICAgIGxvbmdQcmVzcygyMCk7CiAgICAgICAgIHRhcCgxMyk7CkBAIC0xNzIsNyArMTc1LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB0ZXN0U2luZ2xlU2VsZWN0TW9kZV9TaGlmdFRhcCgpIHsKLSAgICAgICAgbU1hbmFnZXIgPSBuZXcgTXVsdGlTZWxlY3RNYW5hZ2VyKG1FbnYsIE11bHRpU2VsZWN0TWFuYWdlci5NT0RFX1NJTkdMRSk7CisgICAgICAgIG1NYW5hZ2VyID0gbmV3IE11bHRpU2VsZWN0TWFuYWdlcihtRW52LCBtQWRhcHRlciwgTXVsdGlTZWxlY3RNYW5hZ2VyLk1PREVfU0lOR0xFKTsKICAgICAgICAgbU1hbmFnZXIuYWRkQ2FsbGJhY2sobUNhbGxiYWNrKTsKICAgICAgICAgbG9uZ1ByZXNzKDEzKTsKICAgICAgICAgc2hpZnRUYXAoMjApOwpAQCAtMTgwLDcgKzE4Myw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgdGVzdFNpbmdsZVNlbGVjdE1vZGVfU2hpZnREb2VzTm90RXh0ZW5kU2VsZWN0aW9uKCkgewotICAgICAgICBtTWFuYWdlciA9IG5ldyBNdWx0aVNlbGVjdE1hbmFnZXIobUVudiwgTXVsdGlTZWxlY3RNYW5hZ2VyLk1PREVfU0lOR0xFKTsKKyAgICAgICAgbU1hbmFnZXIgPSBuZXcgTXVsdGlTZWxlY3RNYW5hZ2VyKG1FbnYsIG1BZGFwdGVyLCBNdWx0aVNlbGVjdE1hbmFnZXIuTU9ERV9TSU5HTEUpOwogICAgICAgICBtTWFuYWdlci5hZGRDYWxsYmFjayhtQ2FsbGJhY2spOwogICAgICAgICBsb25nUHJlc3MoMjApOwogICAgICAgICBrZXlUb1Bvc2l0aW9uKDIyLCB0cnVlKTsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9kaXJsaXN0L011bHRpU2VsZWN0TWFuYWdlcl9HcmlkTW9kZWxUZXN0LmphdmEgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS90ZXN0cy9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9NdWx0aVNlbGVjdE1hbmFnZXJfR3JpZE1vZGVsVGVzdC5qYXZhCmluZGV4IGQ2ZThiNTUuLjVjMDRkYjkgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9kaXJsaXN0L011bHRpU2VsZWN0TWFuYWdlcl9HcmlkTW9kZWxUZXN0LmphdmEKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL2Rpcmxpc3QvTXVsdGlTZWxlY3RNYW5hZ2VyX0dyaWRNb2RlbFRlc3QuamF2YQpAQCAtMjAsNyArMjAsNiBAQAogCiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5Qb2ludDsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3Q7Ci1pbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnY3LndpZGdldC5SZWN5Y2xlclZpZXcuQWRhcHRlckRhdGFPYnNlcnZlcjsKIGltcG9ydCBhbmRyb2lkLnN1cHBvcnQudjcud2lkZ2V0LlJlY3ljbGVyVmlldy5PblNjcm9sbExpc3RlbmVyOwogaW1wb3J0IGFuZHJvaWQudGVzdC5BbmRyb2lkVGVzdENhc2U7CiBpbXBvcnQgYW5kcm9pZC50ZXN0LnN1aXRlYnVpbGRlci5hbm5vdGF0aW9uLlNtYWxsVGVzdDsKQEAgLTI4LDcgKzI3LDcgQEAKIAogaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLmRpcmxpc3QuTXVsdGlTZWxlY3RNYW5hZ2VyLkdyaWRNb2RlbDsKIAotaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLlNldDsKIAogQFNtYWxsVGVzdApAQCAtMzgsMTUgKzM3LDI4IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENISUxEX1ZJRVdfRURHRV9QWCA9IDEwMDsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVklFV1BPUlRfSEVJR0hUID0gNTAwOwogCi0gICAgcHJpdmF0ZSBzdGF0aWMgR3JpZE1vZGVsIG1vZGVsOwotICAgIHByaXZhdGUgc3RhdGljIFRlc3RFbnZpcm9ubWVudCBlbnY7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgU2V0PFN0cmluZz4gbGFzdFNlbGVjdGlvbjsKLSAgICBwcml2YXRlIHN0YXRpYyBpbnQgdmlld1dpZHRoOworICAgIHByaXZhdGUgR3JpZE1vZGVsIG1vZGVsOworICAgIHByaXZhdGUgVGVzdEVudmlyb25tZW50IGVudjsKKyAgICBwcml2YXRlIFRlc3REb2N1bWVudHNBZGFwdGVyIGFkYXB0ZXI7CisgICAgcHJpdmF0ZSBTZXQ8U3RyaW5nPiBsYXN0U2VsZWN0aW9uOworICAgIHByaXZhdGUgaW50IHZpZXdXaWR0aDsKIAotICAgIHByaXZhdGUgc3RhdGljIHZvaWQgc2V0VXAoaW50IG51bUNoaWxkcmVuLCBpbnQgbnVtQ29sdW1ucykgeworICAgIHByaXZhdGUgdm9pZCBpbml0RGF0YShmaW5hbCBpbnQgbnVtQ2hpbGRyZW4sIGludCBudW1Db2x1bW5zKSB7CiAgICAgICAgIGVudiA9IG5ldyBUZXN0RW52aXJvbm1lbnQobnVtQ2hpbGRyZW4sIG51bUNvbHVtbnMpOworICAgICAgICBhZGFwdGVyID0gbmV3IFRlc3REb2N1bWVudHNBZGFwdGVyKG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpKSB7CisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0TW9kZWxJZChpbnQgcG9zaXRpb24pIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gSW50ZWdlci50b1N0cmluZyhwb3NpdGlvbik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIGludCBnZXRJdGVtQ291bnQoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bUNoaWxkcmVuOworICAgICAgICAgICAgfQorICAgICAgICB9OworCiAgICAgICAgIHZpZXdXaWR0aCA9IFZJRVdfUEFERElOR19QWCArIG51bUNvbHVtbnMgKiAoVklFV19QQURESU5HX1BYICsgQ0hJTERfVklFV19FREdFX1BYKTsKLSAgICAgICAgbW9kZWwgPSBuZXcgR3JpZE1vZGVsKGVudik7CisgICAgICAgIG1vZGVsID0gbmV3IEdyaWRNb2RlbChlbnYsIGFkYXB0ZXIpOwogICAgICAgICBtb2RlbC5hZGRPblNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigKICAgICAgICAgICAgICAgICBuZXcgR3JpZE1vZGVsLk9uU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgewogICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKQEAgLTY0LDcgKzc2LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0aW9uTGVmdE9mSXRlbXMoKSB7Ci0gICAgICAgIHNldFVwKDIwLCA1KTsKKyAgICAgICAgaW5pdERhdGEoMjAsIDUpOwogICAgICAgICBtb2RlbC5zdGFydFNlbGVjdGlvbihuZXcgUG9pbnQoMCwgMTApKTsKICAgICAgICAgbW9kZWwucmVzaXplU2VsZWN0aW9uKG5ldyBQb2ludCgxLCAxMSkpOwogICAgICAgICBhc3NlcnRTZWxlY3RlZCgpOwpAQCAtNzIsNyArODQsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHRlc3RTZWxlY3Rpb25SaWdodE9mSXRlbXMoKSB7Ci0gICAgICAgIHNldFVwKDIwLCA0KTsKKyAgICAgICAgaW5pdERhdGEoMjAsIDQpOwogICAgICAgICBtb2RlbC5zdGFydFNlbGVjdGlvbihuZXcgUG9pbnQodmlld1dpZHRoIC0gMSwgMTApKTsKICAgICAgICAgbW9kZWwucmVzaXplU2VsZWN0aW9uKG5ldyBQb2ludCh2aWV3V2lkdGggLSAyLCAxMSkpOwogICAgICAgICBhc3NlcnRTZWxlY3RlZCgpOwpAQCAtODAsNyArOTIsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHRlc3RTZWxlY3Rpb25BYm92ZUl0ZW1zKCkgewotICAgICAgICBzZXRVcCgyMCwgNCk7CisgICAgICAgIGluaXREYXRhKDIwLCA0KTsKICAgICAgICAgbW9kZWwuc3RhcnRTZWxlY3Rpb24obmV3IFBvaW50KDEwLCAwKSk7CiAgICAgICAgIG1vZGVsLnJlc2l6ZVNlbGVjdGlvbihuZXcgUG9pbnQoMTEsIDEpKTsKICAgICAgICAgYXNzZXJ0U2VsZWN0ZWQoKTsKQEAgLTg4LDcgKzEwMCw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgdGVzdFNlbGVjdGlvbkJlbG93SXRlbXMoKSB7Ci0gICAgICAgIHNldFVwKDUsIDQpOworICAgICAgICBpbml0RGF0YSg1LCA0KTsKICAgICAgICAgbW9kZWwuc3RhcnRTZWxlY3Rpb24obmV3IFBvaW50KDEwLCBWSUVXUE9SVF9IRUlHSFQgLSAxKSk7CiAgICAgICAgIG1vZGVsLnJlc2l6ZVNlbGVjdGlvbihuZXcgUG9pbnQoMTEsIFZJRVdQT1JUX0hFSUdIVCAtIDIpKTsKICAgICAgICAgYXNzZXJ0U2VsZWN0ZWQoKTsKQEAgLTk2LDcgKzEwOCw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgdGVzdFZlcnRpY2FsU2VsZWN0aW9uQmV0d2Vlbkl0ZW1zKCkgewotICAgICAgICBzZXRVcCgyMCwgNCk7CisgICAgICAgIGluaXREYXRhKDIwLCA0KTsKICAgICAgICAgbW9kZWwuc3RhcnRTZWxlY3Rpb24obmV3IFBvaW50KDEwNiwgMCkpOwogICAgICAgICBtb2RlbC5yZXNpemVTZWxlY3Rpb24obmV3IFBvaW50KDEwNywgMjAwKSk7CiAgICAgICAgIGFzc2VydFNlbGVjdGVkKCk7CkBAIC0xMDQsNyArMTE2LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB0ZXN0SG9yaXpvbnRhbFNlbGVjdGlvbkJldHdlZW5JdGVtcygpIHsKLSAgICAgICAgc2V0VXAoMjAsIDQpOworICAgICAgICBpbml0RGF0YSgyMCwgNCk7CiAgICAgICAgIG1vZGVsLnN0YXJ0U2VsZWN0aW9uKG5ldyBQb2ludCgwLCAxMDUpKTsKICAgICAgICAgbW9kZWwucmVzaXplU2VsZWN0aW9uKG5ldyBQb2ludCgyMDAsIDEwNikpOwogICAgICAgICBhc3NlcnRTZWxlY3RlZCgpOwpAQCAtMTEyLDcgKzEyNCw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgdGVzdEdyb3dpbmdBbmRTaHJpbmtpbmdTZWxlY3Rpb24oKSB7Ci0gICAgICAgIHNldFVwKDIwLCA0KTsKKyAgICAgICAgaW5pdERhdGEoMjAsIDQpOwogICAgICAgICBtb2RlbC5zdGFydFNlbGVjdGlvbihuZXcgUG9pbnQoMCwgMCkpOwogICAgICAgICBtb2RlbC5yZXNpemVTZWxlY3Rpb24obmV3IFBvaW50KDUsIDUpKTsKICAgICAgICAgYXNzZXJ0U2VsZWN0ZWQoMCk7CkBAIC0xNDIsNyArMTU0LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0aW9uTW92aW5nQXJvdW5kT3JpZ2luKCkgewotICAgICAgICBzZXRVcCgxNiwgNCk7CisgICAgICAgIGluaXREYXRhKDE2LCA0KTsKICAgICAgICAgbW9kZWwuc3RhcnRTZWxlY3Rpb24obmV3IFBvaW50KDIxMCwgMjEwKSk7CiAgICAgICAgIG1vZGVsLnJlc2l6ZVNlbGVjdGlvbihuZXcgUG9pbnQodmlld1dpZHRoIC0gMSwgMCkpOwogICAgICAgICBhc3NlcnRTZWxlY3RlZCgyLCAzLCA2LCA3KTsKQEAgLTE1Niw3ICsxNjgsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHRlc3RTY3JvbGxpbmdCYW5kU2VsZWN0KCkgewotICAgICAgICBzZXRVcCg0MCwgNCk7CisgICAgICAgIGluaXREYXRhKDQwLCA0KTsKICAgICAgICAgbW9kZWwuc3RhcnRTZWxlY3Rpb24obmV3IFBvaW50KDAsIDApKTsKICAgICAgICAgbW9kZWwucmVzaXplU2VsZWN0aW9uKG5ldyBQb2ludCgxMDAsIFZJRVdQT1JUX0hFSUdIVCAtIDEpKTsKICAgICAgICAgYXNzZXJ0U2VsZWN0ZWQoMCwgNCwgOCwgMTIsIDE2KTsKQEAgLTE3MywxNCArMTg1LDE0IEBACiAgICAgICAgIGFzc2VydEVxdWFscygwLCBtb2RlbC5nZXRQb3NpdGlvbk5lYXJlc3RPcmlnaW4oKSk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBhc3NlcnRTZWxlY3RlZChpbnQuLi4gc2VsZWN0ZWRQb3NpdGlvbnMpIHsKKyAgICBwcml2YXRlIHZvaWQgYXNzZXJ0U2VsZWN0ZWQoaW50Li4uIHNlbGVjdGVkUG9zaXRpb25zKSB7CiAgICAgICAgIGFzc2VydEVxdWFscyhzZWxlY3RlZFBvc2l0aW9ucy5sZW5ndGgsIGxhc3RTZWxlY3Rpb24uc2l6ZSgpKTsKICAgICAgICAgZm9yIChpbnQgcG9zaXRpb24gOiBzZWxlY3RlZFBvc2l0aW9ucykgewogICAgICAgICAgICAgYXNzZXJ0VHJ1ZShsYXN0U2VsZWN0aW9uLmNvbnRhaW5zKEludGVnZXIudG9TdHJpbmcocG9zaXRpb24pKSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHNjcm9sbChpbnQgZHkpIHsKKyAgICBwcml2YXRlIHZvaWQgc2Nyb2xsKGludCBkeSkgewogICAgICAgICBhc3NlcnRUcnVlKGVudi52ZXJ0aWNhbE9mZnNldCArIFZJRVdQT1JUX0hFSUdIVCArIGR5IDw9IGVudi5nZXRUb3RhbEhlaWdodCgpKTsKICAgICAgICAgZW52LnZlcnRpY2FsT2Zmc2V0ICs9IGR5OwogICAgICAgICBtb2RlbC5vblNjcm9sbGVkKG51bGwsIDAsIGR5KTsKQEAgLTMyMiwzMCArMzM0LDUgQEAKICAgICAgICAgcHVibGljIHZvaWQgZm9jdXNJdGVtKGludCBpKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKICAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgU3RyaW5nIGdldE1vZGVsSWRGcm9tQWRhcHRlclBvc2l0aW9uKGludCBwb3NpdGlvbikgewotICAgICAgICAgICAgcmV0dXJuIEludGVnZXIudG9TdHJpbmcocG9zaXRpb24pOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBpbnQgZ2V0SXRlbUNvdW50KCkgewotICAgICAgICAgICAgcmV0dXJuIG1OdW1DaGlsZHJlbjsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgTGlzdDxTdHJpbmc+IGdldE1vZGVsSWRzKCkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgbm90aWZ5SXRlbUNoYW5nZWQoU3RyaW5nIGlkLCBTdHJpbmcgc2VsZWN0aW9uQ2hhbmdlZE1hcmtlcikgewotICAgICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgcmVnaXN0ZXJEYXRhT2JzZXJ2ZXIoQWRhcHRlckRhdGFPYnNlcnZlciBvYnNlcnZlcikgewotICAgICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0gICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS90ZXN0cy9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9UZXN0Q29udGVudFByb3ZpZGVyLmphdmEgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS90ZXN0cy9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9UZXN0Q29udGVudFByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhkNDI0ZgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9kaXJsaXN0L1Rlc3RDb250ZW50UHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5kaXJsaXN0OworCitpbXBvcnQgYW5kcm9pZC5uZXQuVXJpOworaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOworaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuRG9jdW1lbnRzQ29udHJhY3Q7CitpbXBvcnQgYW5kcm9pZC50ZXN0Lm1vY2suTW9ja0NvbnRlbnRQcm92aWRlcjsKKworaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLm1vZGVsLkRvY3VtZW50SW5mbzsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKKy8qKgorICogQSB2ZXJ5IHNpbXBsZSB0ZXN0IGRvdWJsZSBmb3IgQ29udGVudFByb3ZpZGVyLiBVc2VmdWwgaW4gdGhpcyBwYWNrYWdlIG9ubHkuCisgKi8KK2NsYXNzIFRlc3RDb250ZW50UHJvdmlkZXIgZXh0ZW5kcyBNb2NrQ29udGVudFByb3ZpZGVyIHsKKyAgICBMaXN0PFVyaT4gbURlbGV0ZWQgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBCdW5kbGUgY2FsbChTdHJpbmcgbWV0aG9kLCBTdHJpbmcgYXJnLCBCdW5kbGUgZXh0cmFzKSB7CisgICAgICAgIC8vIEludGVyY2VwdCBhbmQgbG9nIGRlbGV0ZSBtZXRob2QgY2FsbHMuCisgICAgICAgIGlmIChEb2N1bWVudHNDb250cmFjdC5NRVRIT0RfREVMRVRFX0RPQ1VNRU5ULmVxdWFscyhtZXRob2QpKSB7CisgICAgICAgICAgICBmaW5hbCBVcmkgZG9jdW1lbnRVcmkgPSBleHRyYXMuZ2V0UGFyY2VsYWJsZShEb2N1bWVudHNDb250cmFjdC5FWFRSQV9VUkkpOworICAgICAgICAgICAgbURlbGV0ZWQuYWRkKGRvY3VtZW50VXJpKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgQnVuZGxlKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gc3VwZXIuY2FsbChtZXRob2QsIGFyZywgZXh0cmFzKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGFzc2VydFdhc0RlbGV0ZWQoRG9jdW1lbnRJbmZvIGRvYykgeworICAgICAgICBNb2RlbFRlc3QuYXNzZXJ0VHJ1ZShtRGVsZXRlZC5jb250YWlucyhkb2MuZGVyaXZlZFVyaSkpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS90ZXN0cy9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9UZXN0Q29udGV4dC5qYXZhIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL2Rpcmxpc3QvVGVzdENvbnRleHQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTQwNjJkCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL2Rpcmxpc3QvVGVzdENvbnRleHQuamF2YQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5kaXJsaXN0OworCitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRSZXNvbHZlcjsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dFdyYXBwZXI7CitpbXBvcnQgYW5kcm9pZC50ZXN0Lm1vY2suTW9ja0NvbnRlbnRSZXNvbHZlcjsKKworcHVibGljIGZpbmFsIGNsYXNzIFRlc3RDb250ZXh0IHsKKworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBDb250ZXh0IGNvbmZpZ3VyZWQgd2l0aCB0ZXN0IHByb3ZpZGVyIGZvciBhdXRob3JpdHkuCisgICAgICovCisgICAgc3RhdGljIENvbnRleHQgY3JlYXRlU3RvcmFnZVRlc3RDb250ZXh0KENvbnRleHQgY29udGV4dCwgU3RyaW5nIGF1dGhvcml0eSkgeworICAgICAgICBmaW5hbCBNb2NrQ29udGVudFJlc29sdmVyIHRlc3RSZXNvbHZlciA9IG5ldyBNb2NrQ29udGVudFJlc29sdmVyKCk7CisgICAgICAgIFRlc3RDb250ZW50UHJvdmlkZXIgcHJvdmlkZXIgPSBuZXcgVGVzdENvbnRlbnRQcm92aWRlcigpOworICAgICAgICB0ZXN0UmVzb2x2ZXIuYWRkUHJvdmlkZXIoYXV0aG9yaXR5LCBwcm92aWRlcik7CisKKyAgICAgICAgcmV0dXJuIG5ldyBDb250ZXh0V3JhcHBlcihjb250ZXh0KSB7CisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyBDb250ZW50UmVzb2x2ZXIgZ2V0Q29udGVudFJlc29sdmVyKCkgeworICAgICAgICAgICAgICAgIHJldHVybiB0ZXN0UmVzb2x2ZXI7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL2Rpcmxpc3QvVGVzdERvY3VtZW50c0FkYXB0ZXIuamF2YSBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9kaXJsaXN0L1Rlc3REb2N1bWVudHNBZGFwdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY3ZjQ3ZAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9kaXJsaXN0L1Rlc3REb2N1bWVudHNBZGFwdGVyLmphdmEKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuZGlybGlzdDsKKworaW1wb3J0IGFuZHJvaWQudXRpbC5TcGFyc2VBcnJheTsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwOworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworLyoqCisgKiBBIHNrZWxldGFsIHtAbGluayBEb2N1bWVudHNBZGFwdGVyfSB0ZXN0IGRvdWJsZS4KKyAqLworcHVibGljIGNsYXNzIFRlc3REb2N1bWVudHNBZGFwdGVyIGV4dGVuZHMgRG9jdW1lbnRzQWRhcHRlciB7CisKKyAgICBMaXN0PFN0cmluZz4gbU1vZGVsSWRzID0gbmV3IEFycmF5TGlzdDw+KCk7CisKKyAgICBwdWJsaWMgVGVzdERvY3VtZW50c0FkYXB0ZXIoTGlzdDxTdHJpbmc+IG1vZGVsSWRzKSB7CisgICAgICAgIG1Nb2RlbElkcyA9IG1vZGVsSWRzOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uTW9kZWxVcGRhdGUoTW9kZWwgbW9kZWwpIHsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvbk1vZGVsVXBkYXRlRmFpbGVkKEV4Y2VwdGlvbiBlKSB7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgTGlzdDxTdHJpbmc+IGdldE1vZGVsSWRzKCkgeworICAgICAgICByZXR1cm4gbU1vZGVsSWRzOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHZvaWQgb25JdGVtU2VsZWN0aW9uQ2hhbmdlZChTdHJpbmcgaWQpIHsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBTdHJpbmcgZ2V0TW9kZWxJZChpbnQgcG9zaXRpb24pIHsKKyAgICAgICAgcmV0dXJuIG1Nb2RlbElkcy5nZXQocG9zaXRpb24pOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBTcGFyc2VBcnJheTxTdHJpbmc+IGhpZGUoU3RyaW5nLi4uIGlkcykgeworICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICB2b2lkIHVuaGlkZShTcGFyc2VBcnJheTxTdHJpbmc+IGlkcykgeworICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgRG9jdW1lbnRIb2xkZXIgb25DcmVhdGVWaWV3SG9sZGVyKFZpZXdHcm91cCBwYXJlbnQsIGludCB2aWV3VHlwZSkgeworICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvbkJpbmRWaWV3SG9sZGVyKERvY3VtZW50SG9sZGVyIGhvbGRlciwgaW50IHBvc2l0aW9uKSB7CisgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBpbnQgZ2V0SXRlbUNvdW50KCkgeworICAgICAgICByZXR1cm4gbU1vZGVsSWRzLnNpemUoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS90ZXN0cy9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9UZXN0TW9kZWwuamF2YSBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9kaXJsaXN0L1Rlc3RNb2RlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhNTM3YTYKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS90ZXN0cy9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9UZXN0TW9kZWwuamF2YQpAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5kaXJsaXN0OworCitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5NYXRyaXhDdXJzb3I7CitpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5Eb2N1bWVudHNDb250cmFjdC5Eb2N1bWVudDsKKworaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLkRpcmVjdG9yeVJlc3VsdDsKK2ltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5Sb290Q3Vyc29yV3JhcHBlcjsKK2ltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5kaXJsaXN0Lk11bHRpU2VsZWN0TWFuYWdlci5TZWxlY3Rpb247CisKK2ltcG9ydCBqYXZhLnV0aWwuUmFuZG9tOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKK3B1YmxpYyBjbGFzcyBUZXN0TW9kZWwgZXh0ZW5kcyBNb2RlbCB7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBDT0xVTU5TID0gbmV3IFN0cmluZ1tdeworICAgICAgICBSb290Q3Vyc29yV3JhcHBlci5DT0xVTU5fQVVUSE9SSVRZLAorICAgICAgICBEb2N1bWVudC5DT0xVTU5fRE9DVU1FTlRfSUQsCisgICAgICAgIERvY3VtZW50LkNPTFVNTl9GTEFHUywKKyAgICAgICAgRG9jdW1lbnQuQ09MVU1OX0RJU1BMQVlfTkFNRSwKKyAgICAgICAgRG9jdW1lbnQuQ09MVU1OX1NJWkUsCisgICAgICAgIERvY3VtZW50LkNPTFVNTl9NSU1FX1RZUEUKKyAgICB9OworCisgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbUF1dGhvcml0eTsKKyAgICBwcml2YXRlIFNldDxTdHJpbmc+IG1EZWxldGVkOworCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBjb250ZXh0LiBjb250ZXh0IG11c3QgYmUgY29uZmlndXJlZCB3aXRoIHByb3ZpZGVyIGZvciBhdXRob3JpdHkuCisgICAgICogQHNlZSBUZXN0Q29udGV4dCNjcmVhdGVTdG9yYWdlVGVzdENvbnRleHQoQ29udGV4dCwgU3RyaW5nKS4KKyAgICAgKi8KKyAgICBwdWJsaWMgVGVzdE1vZGVsKENvbnRleHQgY29udGV4dCwgU3RyaW5nIGF1dGhvcml0eSkgeworICAgICAgICBzdXBlcihjb250ZXh0KTsKKyAgICAgICAgbUF1dGhvcml0eSA9IGF1dGhvcml0eTsKKyAgICB9CisKKyAgICB2b2lkIHVwZGF0ZShTdHJpbmcuLi4gbmFtZXMpIHsKKyAgICAgICAgUmFuZG9tIHJhbmQgPSBuZXcgUmFuZG9tKCk7CisKKyAgICAgICAgTWF0cml4Q3Vyc29yIGMgPSBuZXcgTWF0cml4Q3Vyc29yKENPTFVNTlMpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBNYXRyaXhDdXJzb3IuUm93QnVpbGRlciByb3cgPSBjLm5ld1JvdygpOworICAgICAgICAgICAgcm93LmFkZChSb290Q3Vyc29yV3JhcHBlci5DT0xVTU5fQVVUSE9SSVRZLCBtQXV0aG9yaXR5KTsKKyAgICAgICAgICAgIHJvdy5hZGQoRG9jdW1lbnQuQ09MVU1OX0RPQ1VNRU5UX0lELCBJbnRlZ2VyLnRvU3RyaW5nKGkpKTsKKyAgICAgICAgICAgIHJvdy5hZGQoRG9jdW1lbnQuQ09MVU1OX0ZMQUdTLCBEb2N1bWVudC5GTEFHX1NVUFBPUlRTX0RFTEVURSk7CisgICAgICAgICAgICAvLyBHZW5lcmF0ZSByYW5kb20gZG9jdW1lbnQgbmFtZXMgYW5kIHNpemVzLiBUaGlzIGZvcmNlcyB0aGUgbW9kZWwncyBpbnRlcm5hbCBzb3J0IGNvZGUKKyAgICAgICAgICAgIC8vIHRvIGFjdHVhbGx5IGRvIHNvbWV0aGluZy4KKyAgICAgICAgICAgIHJvdy5hZGQoRG9jdW1lbnQuQ09MVU1OX0RJU1BMQVlfTkFNRSwgbmFtZXNbaV0pOworICAgICAgICAgICAgcm93LmFkZChEb2N1bWVudC5DT0xVTU5fU0laRSwgcmFuZC5uZXh0SW50KCkpOworICAgICAgICB9CisKKyAgICAgICAgRGlyZWN0b3J5UmVzdWx0IHIgPSBuZXcgRGlyZWN0b3J5UmVzdWx0KCk7CisgICAgICAgIHIuY3Vyc29yID0gYzsKKyAgICAgICAgdXBkYXRlKHIpOworICAgIH0KKworICAgIC8vIE5vdGUgdGhhdCBtb2RlbCBpZCBpbmNsdWRlcyBhdXRob3JpdHkgcXVhbGlmaWVyIGFuZCBpcyBkaXN0aW5jdAorICAgIC8vIFdSVCBkb2N1bWVudElkIGJlY2F1c2Ugb2YgdGhpcy4KKyAgICBTdHJpbmcgaWRGb3JQb3NpdGlvbihpbnQgcCkgeworICAgICAgICByZXR1cm4gY3JlYXRlTW9kZWxJZChtQXV0aG9yaXR5LCBJbnRlZ2VyLnRvU3RyaW5nKHApKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBkZWxldGUoU2VsZWN0aW9uIHNlbGVjdGVkLCBEZWxldGlvbkxpc3RlbmVyIGxpc3RlbmVyKSB7CisgICAgICAgIGZvciAoU3RyaW5nIGlkIDogc2VsZWN0ZWQuZ2V0QWxsKCkpIHsKKyAgICAgICAgICAgIG1EZWxldGVkLmFkZChpZCk7CisgICAgICAgIH0KKyAgICAgICAgbGlzdGVuZXIub25Db21wbGV0aW9uKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL2Rpcmxpc3QvVGVzdFNlbGVjdGlvbkVudmlyb25tZW50LmphdmEgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS90ZXN0cy9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9UZXN0U2VsZWN0aW9uRW52aXJvbm1lbnQuamF2YQppbmRleCA2ODA1NjQ0Mi4uYzRjZmQzYSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL2Rpcmxpc3QvVGVzdFNlbGVjdGlvbkVudmlyb25tZW50LmphdmEKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL2Rpcmxpc3QvVGVzdFNlbGVjdGlvbkVudmlyb25tZW50LmphdmEKQEAgLTE4LDIxICsxOCwxNiBAQAogCiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5Qb2ludDsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3Q7Ci1pbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnY3LndpZGdldC5SZWN5Y2xlclZpZXcuQWRhcHRlckRhdGFPYnNlcnZlcjsKIGltcG9ydCBhbmRyb2lkLnN1cHBvcnQudjcud2lkZ2V0LlJlY3ljbGVyVmlldy5PblNjcm9sbExpc3RlbmVyOwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwogCiBpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuZGlybGlzdC5NdWx0aVNlbGVjdE1hbmFnZXIuU2VsZWN0aW9uRW52aXJvbm1lbnQ7CiAKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwogCiBwdWJsaWMgY2xhc3MgVGVzdFNlbGVjdGlvbkVudmlyb25tZW50IGltcGxlbWVudHMgU2VsZWN0aW9uRW52aXJvbm1lbnQgewogCi0gICAgcHJpdmF0ZSBMaXN0PFN0cmluZz4gbUl0ZW1zOwotCiAgICAgcHVibGljIFRlc3RTZWxlY3Rpb25FbnZpcm9ubWVudChMaXN0PFN0cmluZz4gaXRlbXMpIHsKLSAgICAgICAgbUl0ZW1zID0gaXRlbXM7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCkBAIC0xMTUsMjcgKzExMCw0IEBACiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgZm9jdXNJdGVtKGludCBwb3NpdGlvbikgewogICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0TW9kZWxJZEZyb21BZGFwdGVyUG9zaXRpb24oaW50IHBvc2l0aW9uKSB7Ci0gICAgICAgIHJldHVybiBtSXRlbXMuZ2V0KHBvc2l0aW9uKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldEl0ZW1Db3VudCgpIHsKLSAgICAgICAgcmV0dXJuIG1JdGVtcy5zaXplKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIExpc3Q8U3RyaW5nPiBnZXRNb2RlbElkcygpIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgbm90aWZ5SXRlbUNoYW5nZWQoU3RyaW5nIGlkLCBTdHJpbmcgc2VsZWN0aW9uQ2hhbmdlZE1hcmtlcikgewotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YU9ic2VydmVyKEFkYXB0ZXJEYXRhT2JzZXJ2ZXIgb2JzZXJ2ZXIpIHsKLSAgICB9CiB9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9BbmRyb2lkLm1rIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvQW5kcm9pZC5tawppbmRleCBkYjgyNWZmNC4uZWM2YWYyZiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvQW5kcm9pZC5taworKysgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9BbmRyb2lkLm1rCkBAIC01LDYgKzUsNyBAQAogCiBMT0NBTF9TUkNfRklMRVMgOj0gJChjYWxsIGFsbC1zdWJkaXItamF2YS1maWxlcykKIAorTE9DQUxfU1RBVElDX0pBVkFfTElCUkFSSUVTIDo9IGFuZHJvaWQtc3VwcG9ydC1kb2N1bWVudHMtYXJjaGl2ZQogTE9DQUxfUEFDS0FHRV9OQU1FIDo9IEV4dGVybmFsU3RvcmFnZVByb3ZpZGVyCiBMT0NBTF9DRVJUSUZJQ0FURSA6PSBwbGF0Zm9ybQogTE9DQUxfUFJJVklMRUdFRF9NT0RVTEUgOj0gdHJ1ZQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvc3JjL2NvbS9hbmRyb2lkL2V4dGVybmFsc3RvcmFnZS9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci5qYXZhIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvc3JjL2NvbS9hbmRyb2lkL2V4dGVybmFsc3RvcmFnZS9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci5qYXZhCmluZGV4IDJjZWRjNzIuLmM2ZTU1MzEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3NyYy9jb20vYW5kcm9pZC9leHRlcm5hbHN0b3JhZ2UvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIuamF2YQorKysgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9zcmMvY29tL2FuZHJvaWQvZXh0ZXJuYWxzdG9yYWdlL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyLmphdmEKQEAgLTM5LDYgKzM5LDcgQEAKIGltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLkRvY3VtZW50c0NvbnRyYWN0LlJvb3Q7CiBpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5Eb2N1bWVudHNQcm92aWRlcjsKIGltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLk1lZGlhU3RvcmU7CitpbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnByb3ZpZGVyLkRvY3VtZW50QXJjaGl2ZUhlbHBlcjsKIGltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFV0aWxzOwogaW1wb3J0IGFuZHJvaWQudXRpbC5BcnJheU1hcDsKIGltcG9ydCBhbmRyb2lkLnV0aWwuRGVidWdVdGlsczsKQEAgLTkzLDYgKzk0LDcgQEAKIAogICAgIHByaXZhdGUgU3RvcmFnZU1hbmFnZXIgbVN0b3JhZ2VNYW5hZ2VyOwogICAgIHByaXZhdGUgSGFuZGxlciBtSGFuZGxlcjsKKyAgICBwcml2YXRlIERvY3VtZW50QXJjaGl2ZUhlbHBlciBtQXJjaGl2ZUhlbHBlcjsKIAogICAgIHByaXZhdGUgZmluYWwgT2JqZWN0IG1Sb290c0xvY2sgPSBuZXcgT2JqZWN0KCk7CiAKQEAgLTEwNiw2ICsxMDgsNyBAQAogICAgIHB1YmxpYyBib29sZWFuIG9uQ3JlYXRlKCkgewogICAgICAgICBtU3RvcmFnZU1hbmFnZXIgPSAoU3RvcmFnZU1hbmFnZXIpIGdldENvbnRleHQoKS5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuU1RPUkFHRV9TRVJWSUNFKTsKICAgICAgICAgbUhhbmRsZXIgPSBuZXcgSGFuZGxlcigpOworICAgICAgICBtQXJjaGl2ZUhlbHBlciA9IG5ldyBEb2N1bWVudEFyY2hpdmVIZWxwZXIodGhpcywgKGNoYXIpIDApOwogCiAgICAgICAgIHVwZGF0ZVZvbHVtZXMoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0zMjEsOCArMzI0LDEyIEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBmaW5hbCBTdHJpbmcgZGlzcGxheU5hbWUgPSBmaWxlLmdldE5hbWUoKTsKICAgICAgICAgZmluYWwgU3RyaW5nIG1pbWVUeXBlID0gZ2V0VHlwZUZvckZpbGUoZmlsZSk7CisgICAgICAgIGlmIChtQXJjaGl2ZUhlbHBlci5pc1N1cHBvcnRlZEFyY2hpdmVUeXBlKG1pbWVUeXBlKSkgeworICAgICAgICAgICAgZmxhZ3MgfD0gRG9jdW1lbnQuRkxBR19BUkNISVZFOworICAgICAgICB9CisKKyAgICAgICAgZmluYWwgU3RyaW5nIGRpc3BsYXlOYW1lID0gZmlsZS5nZXROYW1lKCk7CiAgICAgICAgIGlmIChtaW1lVHlwZS5zdGFydHNXaXRoKCJpbWFnZS8iKSkgewogICAgICAgICAgICAgZmxhZ3MgfD0gRG9jdW1lbnQuRkxBR19TVVBQT1JUU19USFVNQk5BSUw7CiAgICAgICAgIH0KQEAgLTMzMyw2ICszNDAsNyBAQAogICAgICAgICByb3cuYWRkKERvY3VtZW50LkNPTFVNTl9TSVpFLCBmaWxlLmxlbmd0aCgpKTsKICAgICAgICAgcm93LmFkZChEb2N1bWVudC5DT0xVTU5fTUlNRV9UWVBFLCBtaW1lVHlwZSk7CiAgICAgICAgIHJvdy5hZGQoRG9jdW1lbnQuQ09MVU1OX0ZMQUdTLCBmbGFncyk7CisgICAgICAgIHJvdy5hZGQoRG9jdW1lbnRBcmNoaXZlSGVscGVyLkNPTFVNTl9MT0NBTF9GSUxFX1BBVEgsIGZpbGUuZ2V0UGF0aCgpKTsKIAogICAgICAgICAvLyBPbmx5IHB1Ymxpc2ggZGF0ZXMgcmVhc29uYWJseSBhZnRlciBlcG9jaAogICAgICAgICBsb25nIGxhc3RNb2RpZmllZCA9IGZpbGUubGFzdE1vZGlmaWVkKCk7CkBAIC0zNjEsNiArMzY5LDEwIEBACiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGJvb2xlYW4gaXNDaGlsZERvY3VtZW50KFN0cmluZyBwYXJlbnREb2NJZCwgU3RyaW5nIGRvY0lkKSB7CiAgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpZiAobUFyY2hpdmVIZWxwZXIuaXNBcmNoaXZlZERvY3VtZW50KGRvY0lkKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBtQXJjaGl2ZUhlbHBlci5pc0NoaWxkRG9jdW1lbnQocGFyZW50RG9jSWQsIGRvY0lkKTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgZmluYWwgRmlsZSBwYXJlbnQgPSBnZXRGaWxlRm9yRG9jSWQocGFyZW50RG9jSWQpLmdldENhbm9uaWNhbEZpbGUoKTsKICAgICAgICAgICAgIGZpbmFsIEZpbGUgZG9jID0gZ2V0RmlsZUZvckRvY0lkKGRvY0lkKS5nZXRDYW5vbmljYWxGaWxlKCk7CiAgICAgICAgICAgICByZXR1cm4gRmlsZVV0aWxzLmNvbnRhaW5zKHBhcmVudCwgZG9jKTsKQEAgLTQ2OCw2ICs0ODAsMTAgQEAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgQ3Vyc29yIHF1ZXJ5RG9jdW1lbnQoU3RyaW5nIGRvY3VtZW50SWQsIFN0cmluZ1tdIHByb2plY3Rpb24pCiAgICAgICAgICAgICB0aHJvd3MgRmlsZU5vdEZvdW5kRXhjZXB0aW9uIHsKKyAgICAgICAgaWYgKG1BcmNoaXZlSGVscGVyLmlzQXJjaGl2ZWREb2N1bWVudChkb2N1bWVudElkKSkgeworICAgICAgICAgICAgcmV0dXJuIG1BcmNoaXZlSGVscGVyLnF1ZXJ5RG9jdW1lbnQoZG9jdW1lbnRJZCwgcHJvamVjdGlvbik7CisgICAgICAgIH0KKwogICAgICAgICBmaW5hbCBNYXRyaXhDdXJzb3IgcmVzdWx0ID0gbmV3IE1hdHJpeEN1cnNvcihyZXNvbHZlRG9jdW1lbnRQcm9qZWN0aW9uKHByb2plY3Rpb24pKTsKICAgICAgICAgaW5jbHVkZUZpbGUocmVzdWx0LCBkb2N1bWVudElkLCBudWxsKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTQ3Nyw2ICs0OTMsMTEgQEAKICAgICBwdWJsaWMgQ3Vyc29yIHF1ZXJ5Q2hpbGREb2N1bWVudHMoCiAgICAgICAgICAgICBTdHJpbmcgcGFyZW50RG9jdW1lbnRJZCwgU3RyaW5nW10gcHJvamVjdGlvbiwgU3RyaW5nIHNvcnRPcmRlcikKICAgICAgICAgICAgIHRocm93cyBGaWxlTm90Rm91bmRFeGNlcHRpb24geworICAgICAgICBpZiAobUFyY2hpdmVIZWxwZXIuaXNBcmNoaXZlZERvY3VtZW50KHBhcmVudERvY3VtZW50SWQpIHx8CisgICAgICAgICAgICAgICAgbUFyY2hpdmVIZWxwZXIuaXNTdXBwb3J0ZWRBcmNoaXZlVHlwZShnZXREb2N1bWVudFR5cGUocGFyZW50RG9jdW1lbnRJZCkpKSB7CisgICAgICAgICAgICByZXR1cm4gbUFyY2hpdmVIZWxwZXIucXVlcnlDaGlsZERvY3VtZW50cyhwYXJlbnREb2N1bWVudElkLCBwcm9qZWN0aW9uLCBzb3J0T3JkZXIpOworICAgICAgICB9CisKICAgICAgICAgZmluYWwgRmlsZSBwYXJlbnQgPSBnZXRGaWxlRm9yRG9jSWQocGFyZW50RG9jdW1lbnRJZCk7CiAgICAgICAgIGZpbmFsIE1hdHJpeEN1cnNvciByZXN1bHQgPSBuZXcgRGlyZWN0b3J5Q3Vyc29yKAogICAgICAgICAgICAgICAgIHJlc29sdmVEb2N1bWVudFByb2plY3Rpb24ocHJvamVjdGlvbiksIHBhcmVudERvY3VtZW50SWQsIHBhcmVudCk7CkBAIC01MTQsNiArNTM1LDEwIEBACiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgU3RyaW5nIGdldERvY3VtZW50VHlwZShTdHJpbmcgZG9jdW1lbnRJZCkgdGhyb3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiB7CisgICAgICAgIGlmIChtQXJjaGl2ZUhlbHBlci5pc0FyY2hpdmVkRG9jdW1lbnQoZG9jdW1lbnRJZCkpIHsKKyAgICAgICAgICAgIHJldHVybiBtQXJjaGl2ZUhlbHBlci5nZXREb2N1bWVudFR5cGUoZG9jdW1lbnRJZCk7CisgICAgICAgIH0KKwogICAgICAgICBmaW5hbCBGaWxlIGZpbGUgPSBnZXRGaWxlRm9yRG9jSWQoZG9jdW1lbnRJZCk7CiAgICAgICAgIHJldHVybiBnZXRUeXBlRm9yRmlsZShmaWxlKTsKICAgICB9CkBAIC01MjIsNiArNTQ3LDEwIEBACiAgICAgcHVibGljIFBhcmNlbEZpbGVEZXNjcmlwdG9yIG9wZW5Eb2N1bWVudCgKICAgICAgICAgICAgIFN0cmluZyBkb2N1bWVudElkLCBTdHJpbmcgbW9kZSwgQ2FuY2VsbGF0aW9uU2lnbmFsIHNpZ25hbCkKICAgICAgICAgICAgIHRocm93cyBGaWxlTm90Rm91bmRFeGNlcHRpb24geworICAgICAgICBpZiAobUFyY2hpdmVIZWxwZXIuaXNBcmNoaXZlZERvY3VtZW50KGRvY3VtZW50SWQpKSB7CisgICAgICAgICAgICByZXR1cm4gbUFyY2hpdmVIZWxwZXIub3BlbkRvY3VtZW50KGRvY3VtZW50SWQsIG1vZGUsIHNpZ25hbCk7CisgICAgICAgIH0KKwogICAgICAgICBmaW5hbCBGaWxlIGZpbGUgPSBnZXRGaWxlRm9yRG9jSWQoZG9jdW1lbnRJZCk7CiAgICAgICAgIGZpbmFsIEZpbGUgdmlzaWJsZUZpbGUgPSBnZXRGaWxlRm9yRG9jSWQoZG9jdW1lbnRJZCwgdHJ1ZSk7CiAKQEAgLTU1MCw2ICs1NzksMTAgQEAKICAgICBwdWJsaWMgQXNzZXRGaWxlRGVzY3JpcHRvciBvcGVuRG9jdW1lbnRUaHVtYm5haWwoCiAgICAgICAgICAgICBTdHJpbmcgZG9jdW1lbnRJZCwgUG9pbnQgc2l6ZUhpbnQsIENhbmNlbGxhdGlvblNpZ25hbCBzaWduYWwpCiAgICAgICAgICAgICB0aHJvd3MgRmlsZU5vdEZvdW5kRXhjZXB0aW9uIHsKKyAgICAgICAgaWYgKG1BcmNoaXZlSGVscGVyLmlzQXJjaGl2ZWREb2N1bWVudChkb2N1bWVudElkKSkgeworICAgICAgICAgICAgcmV0dXJuIG1BcmNoaXZlSGVscGVyLm9wZW5Eb2N1bWVudFRodW1ibmFpbChkb2N1bWVudElkLCBzaXplSGludCwgc2lnbmFsKTsKKyAgICAgICAgfQorCiAgICAgICAgIGZpbmFsIEZpbGUgZmlsZSA9IGdldEZpbGVGb3JEb2NJZChkb2N1bWVudElkKTsKICAgICAgICAgcmV0dXJuIERvY3VtZW50c0NvbnRyYWN0Lm9wZW5JbWFnZVRodW1ibmFpbChmaWxlKTsKICAgICB9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWIrc3IrTGF0bi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtYitzcitMYXRuL3N0cmluZ3MueG1sCmluZGV4IGE5YTZiOTAuLjhiNmJhNWQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtYitzcitMYXRuL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtYitzcitMYXRuL3N0cmluZ3MueG1sCkBAIC03NywyMyArNzcsMjMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IlBvbm92byB1bmVzaXRlIGlzcHJhdm5pIFBVSyBrw7RkLiBQb25vdmxqZW5pIHBva3XFoWFqaSDEh2UgdHJham5vIG9uZW1vZ3XEh2l0aSBTSU0uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9jb25maXJtX3Bpbl9oaW50IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzAwMzQ2OTI2MTQ2NDU5MzUxNiI+IlBJTiBrb2Rvdmkgc2UgbmUgcG9kdWRhcmFqdSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+IlByZXZpxaFlIHBva3XFoWFqYSB1bm9zYSDFoWFibG9uYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4iVW5lbGkgc3RlIG5ldGHEjW5pIFBJTiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBwdXRhLiBcblxuUG9rdcWhYWp0ZSBwb25vdm8gemEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2VrdW5kZShpKS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4iVW5lbGkgc3RlIG5ldGHEjW51IGxvemlua3UgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gcHV0YS4gXG5cblBva3XFoWFqdGUgcG9ub3ZvIHphIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNla3VuZGUoaSkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+Ik5hY3J0YWxpIHN0ZSDFoWFibG9uIHphIG90a2xqdcSNYXZhbmplIG5ldGHEjW5vIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHB1dGEuIFxuXG5Qb2t1xaFhanRlIHBvbm92byB6YSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzZWt1bmRlKGkpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+IlBvZ3JlxaFubyBzdGUgcG9rdcWhYWxpIGRhIG90a2xqdcSNYXRlIHRhYmxldCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBwdXQoYSkuIEltYXRlIGpvxaEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gcG9rdcWhYWooYSksIG5ha29uIMSNZWdhIHNlIHRhYmxldCByZXNldHVqZSBpIHN2aSBwb2RhY2kgc2EgbmplZ2EgYnJpxaF1LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NDMzMzE3NTEzMzQxMjg0MjgiPiJQb2dyZcWhbm8gc3RlIHBva3XFoWFsaSBkYSBvdGtsanXEjWF0ZSB0ZWxlZm9uIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHB1dChhKS4gSW1hdGUgam/FoSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBwb2t1xaFhaihhKSwgbmFrb24gxI1lZ2Egc2UgdGVsZWZvbiByZXNldHVqZSBpIHN2aSBwb2RhY2kgc2EgbmplZ2EgYnJpxaF1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4iVW5lbGkgc3RlIG5ldGHEjW5pIFBJTiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHB1dGEuIFxuXG5Qb2t1xaFhanRlIHBvbm92byB6YSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHNla3VuZGUoaSkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IlVuZWxpIHN0ZSBuZXRhxI1udSBsb3ppbmt1IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gcHV0YS4gXG5cblBva3XFoWFqdGUgcG9ub3ZvIHphIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gc2VrdW5kZShpKS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4iTmFjcnRhbGkgc3RlIMWhYWJsb24gemEgb3RrbGp1xI1hdmFuamUgbmV0YcSNbm8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBwdXRhLiBcblxuUG9rdcWhYWp0ZSBwb25vdm8gemEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBzZWt1bmRlKGkpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+IlBvZ3JlxaFubyBzdGUgcG9rdcWhYWxpIGRhIG90a2xqdcSNYXRlIHRhYmxldCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHB1dChhKS4gSW1hdGUgam/FoSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHBva3XFoWFqKGEpLCBuYWtvbiDEjWVnYSBzZSB0YWJsZXQgcmVzZXR1amUgaSBzdmkgcG9kYWNpIHNhIG5qZWdhIGJyacWhdS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4iUG9ncmXFoW5vIHN0ZSBwb2t1xaFhbGkgZGEgb3RrbGp1xI1hdGUgdGVsZWZvbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHB1dChhKS4gSW1hdGUgam/FoSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHBva3XFoWFqKGEpLCBuYWtvbiDEjWVnYSBzZSB0ZWxlZm9uIHJlc2V0dWplIGkgc3ZpIHBvZGFjaSBzYSBuamVnYSBicmnFoXUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI1ODkyNTUwMTk5OTY5ODAzMiI+IlBvZ3JlxaFubyBzdGUgcG9rdcWhYWxpIGRhIG90a2xqdcSNYXRlIHRhYmxldCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcHV0KGEpLiBUYWJsZXQgxIdlIGJpdGkgcmVzZXRvdmFuIGkgc3ZpIHBvZGFjaSBzYSBuamVnYSDEh2UgYml0aSBpemJyaXNhbmkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MTU0MDI4OTA4NDU5ODE3MDY2Ij4iUG9ncmXFoW5vIHN0ZSBwb2t1xaFhbGkgZGEgb3RrbGp1xI1hdGUgdGVsZWZvbiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcHV0KGEpLiBUZWxlZm9uIMSHZSBiaXRpIHJlc2V0b3ZhbiBpIHN2aSBwb2RhY2kgc2EgbmplZ2EgxIdlIGJpdGkgaXpicmlzYW5pLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjE1OTk1NTA5OTM3MjExMjY4OCI+IlBvZ3JlxaFubyBzdGUgcG9rdcWhYWxpIGRhIG90a2xqdcSNYXRlIHRhYmxldCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBwdXQoYSkuIEltYXRlIGpvxaEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gcG9rdcWhYWooYSksIG5ha29uIMSNZWdhIHNlIG92YWoga29yaXNuaWsgdWtsYW5qYSBpIHN2aSBwb2RhY2kga29yaXNuaWthIGJyacWhdS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4iUG9ncmXFoW5vIHN0ZSBwb2t1xaFhbGkgZGEgb3RrbGp1xI1hdGUgdGVsZWZvbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBwdXQoYSkuIEltYXRlIGpvxaEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gcG9rdcWhYWooYSksIG5ha29uIMSNZWdhIHNlIG92YWoga29yaXNuaWsgdWtsYW5qYSBpIHN2aSBwb2RhY2kga29yaXNuaWthIGJyacWhdS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiJQb2dyZcWhbm8gc3RlIHBva3XFoWFsaSBkYSBvdGtsanXEjWF0ZSB0YWJsZXQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBwdXQoYSkuIEltYXRlIGpvxaEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBwb2t1xaFhaihhKSwgbmFrb24gxI1lZ2Egc2Ugb3ZhaiBrb3Jpc25payB1a2xhbmphIGkgc3ZpIHBvZGFjaSBrb3Jpc25pa2EgYnJpxaF1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NDU4MjMxODY2MjkzNjk4ODAiPiJQb2dyZcWhbm8gc3RlIHBva3XFoWFsaSBkYSBvdGtsanXEjWF0ZSB0ZWxlZm9uIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gcHV0KGEpLiBJbWF0ZSBqb8WhIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gcG9rdcWhYWooYSksIG5ha29uIMSNZWdhIHNlIG92YWoga29yaXNuaWsgdWtsYW5qYSBpIHN2aSBwb2RhY2kga29yaXNuaWthIGJyacWhdS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzk2MzQ4NjkwNTM1NTc3ODczNCI+IlBvZ3JlxaFubyBzdGUgcG9rdcWhYWxpIGRhIG90a2xqdcSNYXRlIHRhYmxldCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcHV0KGEpLiBPdmFqIGtvcmlzbmlrIMSHZSBiaXRpIHVrbG9uamVuIGkgc3ZpIHBvZGFjaSBrb3Jpc25pa2EgxIdlIGJpdGkgaXpicmlzYW5pLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ191c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzcyOTAwOTc1MjI1MjExMTY3MyI+IlBvZ3JlxaFubyBzdGUgcG9rdcWhYWxpIGRhIG90a2xqdcSNYXRlIHRlbGVmb24gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHB1dChhKS4gT3ZhaiBrb3Jpc25payDEh2UgYml0aSB1a2xvbmplbiBpIHN2aSBwb2RhY2kga29yaXNuaWthIMSHZSBiaXRpIGl6YnJpc2FuaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiJQb2dyZcWhbm8gc3RlIHBva3XFoWFsaSBkYSBvdGtsanXEjWF0ZSB0YWJsZXQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gcHV0KGEpLiBJbWF0ZSBqb8WhIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHBva3XFoWFqKGEpLCBuYWtvbiDEjWVnYSBzZSBwb3Nsb3ZuaSBwcm9maWwgdWtsYW5qYSBpIHN2aSBwb2RhY2kgc2EgcHJvZmlsYSBicmnFoXUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+IlBvZ3JlxaFubyBzdGUgcG9rdcWhYWxpIGRhIG90a2xqdcSNYXRlIHRlbGVmb24gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gcHV0KGEpLiBJbWF0ZSBqb8WhIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHBva3XFoWFqKGEpLCBuYWtvbiDEjWVnYSBzZSBwb3Nsb3ZuaSBwcm9maWwgdWtsYW5qYSBpIHN2aSBwb2RhY2kgc2EgcHJvZmlsYSBicmnFoXUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4iUG9ncmXFoW5vIHN0ZSBwb2t1xaFhbGkgZGEgb3RrbGp1xI1hdGUgdGFibGV0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gcHV0KGEpLiBJbWF0ZSBqb8WhIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gcG9rdcWhYWooYSksIG5ha29uIMSNZWdhIHNlIHBvc2xvdm5pIHByb2ZpbCB1a2xhbmphIGkgc3ZpIHBvZGFjaSBzYSBwcm9maWxhIGJyacWhdS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4iUG9ncmXFoW5vIHN0ZSBwb2t1xaFhbGkgZGEgb3RrbGp1xI1hdGUgdGVsZWZvbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHB1dChhKS4gSW1hdGUgam/FoSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHBva3XFoWFqKGEpLCBuYWtvbiDEjWVnYSBzZSBwb3Nsb3ZuaSBwcm9maWwgdWtsYW5qYSBpIHN2aSBwb2RhY2kgc2EgcHJvZmlsYSBicmnFoXUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2ODYzODY0OTc0NDk5MTIxNDYiPiJQb2dyZcWhbm8gc3RlIHBva3XFoWFsaSBkYSBvdGtsanXEjWF0ZSB0YWJsZXQgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHB1dChhKS4gUG9zbG92bmkgcHJvZmlsIMSHZSBiaXRpIHVrbG9uamVuIGkgc3ZpIHBvZGFjaSBzYSBuamVnYSDEh2UgYml0aSBpemJyaXNhbmkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0OTUxNTA3MzUyODY5ODMxMjY1Ij4iUG9ncmXFoW5vIHN0ZSBwb2t1xaFhbGkgZGEgb3RrbGp1xI1hdGUgdGVsZWZvbiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcHV0KGEpLiBQb3Nsb3ZuaSBwcm9maWwgxIdlIGJpdGkgdWtsb25qZW4gaSBzdmkgcG9kYWNpIHNhIG5qZWdhIMSHZSBiaXRpIGl6YnJpc2FuaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4iTmFjcnRhbGkgc3RlIMWhYWJsb24gemEgb3RrbGp1xI1hdmFuamUgbmV0YcSNbm8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gcHV0YS4gUG9zbGUgam/FoSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBuZXVzcGXFoW5hKGloKSBwb2t1xaFhamEsIG9kIHZhcyDEh2UgYml0aSB6YXRyYcW+ZW5vIGRhIG90a2xqdcSNYXRlIHRhYmxldCBwb21vxId1IG5hbG9nYSBlLXBvxaF0ZS5cblxuUG9rdcWhYWp0ZSBwb25vdm8gemEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gc2VrdW5kZShpKS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+Ik5hY3J0YWxpIHN0ZSDFoWFibG9uIHphIG90a2xqdcSNYXZhbmplIG5ldGHEjW5vIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHB1dGEuIFBvc2xlIGpvxaEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbmV1c3BlxaFuYShpaCkgcG9rdcWhYWphLCBvZCB2YXMgxIdlIGJpdGkgemF0cmHFvmVubyBkYSBvdGtsanXEjWF0ZSB0ZWxlZm9uIHBvbW/Eh3UgbmFsb2dhIGUtcG/FoXRlLlxuXG5Qb2t1xaFhanRlIHBvbm92byB6YSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzZWt1bmRlKGkpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiJOYWNydGFsaSBzdGUgxaFhYmxvbiB6YSBvdGtsanXEjWF2YW5qZSBuZXRhxI1ubyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHB1dGEuIFBvc2xlIGpvxaEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBuZXVzcGXFoW5hKGloKSBwb2t1xaFhamEsIG9kIHZhcyDEh2UgYml0aSB6YXRyYcW+ZW5vIGRhIG90a2xqdcSNYXRlIHRhYmxldCBwb21vxId1IG5hbG9nYSBlLXBvxaF0ZS5cblxuUG9rdcWhYWp0ZSBwb25vdm8gemEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lMyRkPC94bGlmZjpnPiBzZWt1bmRlKGkpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iTmFjcnRhbGkgc3RlIMWhYWJsb24gemEgb3RrbGp1xI1hdmFuamUgbmV0YcSNbm8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBwdXRhLiBQb3NsZSBqb8WhIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gbmV1c3BlxaFuYShpaCkgcG9rdcWhYWphLCBvZCB2YXMgxIdlIGJpdGkgemF0cmHFvmVubyBkYSBvdGtsanXEjWF0ZSB0ZWxlZm9uIHBvbW/Eh3UgbmFsb2dhIGUtcG/FoXRlLlxuXG5Qb2t1xaFhanRlIHBvbm92byB6YSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IHNla3VuZGUoaSkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiJOZXRhxI1hbiBTSU0gUElOIGvDtGQuIFNhZGEgbW9yYXRlIGRhIGtvbnRha3RpcmF0ZSBtb2JpbG5vZyBvcGVyYXRlcmEgZGEgYmlzdGUgb3RrbGp1xI1hbGkgdXJlxJFhai4iPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI2NzIxNTc1MDE3NTM4MTYyMjQ5Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPk5ldGHEjWFuIFNJTSBQSU4ga8O0ZC4gSW1hdGUgam/FoSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBwb2t1xaFhai48L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NdHBEb2N1bWVudHNQcm92aWRlci9BbmRyb2lkLm1rIGIvcGFja2FnZXMvTXRwRG9jdW1lbnRzUHJvdmlkZXIvQW5kcm9pZC5tawppbmRleCAzYzJmYTM2Li42N2JiZjc4IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9NdHBEb2N1bWVudHNQcm92aWRlci9BbmRyb2lkLm1rCisrKyBiL3BhY2thZ2VzL010cERvY3VtZW50c1Byb3ZpZGVyL0FuZHJvaWQubWsKQEAgLTYsNiArNiw3IEBACiBMT0NBTF9QQUNLQUdFX05BTUUgOj0gTXRwRG9jdW1lbnRzUHJvdmlkZXIKIExPQ0FMX0NFUlRJRklDQVRFIDo9IG1lZGlhCiBMT0NBTF9QUklWSUxFR0VEX01PRFVMRSA6PSB0cnVlCitMT0NBTF9KTklfU0hBUkVEX0xJQlJBUklFUyA6PSBsaWJhcHBmdXNlX2puaQogCiBpbmNsdWRlICQoQlVJTERfUEFDS0FHRSkKLWluY2x1ZGUgJChMT0NBTF9QQVRIKS90ZXN0cy9BbmRyb2lkLm1rCitpbmNsdWRlICQoY2FsbCBhbGwtbWFrZWZpbGVzLXVuZGVyLCAkKExPQ0FMX1BBVEgpKQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTXRwRG9jdW1lbnRzUHJvdmlkZXIvam5pL0FuZHJvaWQubWsgYi9wYWNrYWdlcy9NdHBEb2N1bWVudHNQcm92aWRlci9qbmkvQW5kcm9pZC5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTQ1YjE0Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvTXRwRG9jdW1lbnRzUHJvdmlkZXIvam5pL0FuZHJvaWQubWsKQEAgLTAsMCArMSwxNSBAQAorTE9DQUxfUEFUSDo9ICQoY2FsbCBteS1kaXIpCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKKworTE9DQUxfU1JDX0ZJTEVTIDo9IFwKKyAgICBjb21fYW5kcm9pZF9tdHBfQXBwRnVzZS5jcHAKKworTE9DQUxfU0hBUkVEX0xJQlJBUklFUyA6PSBcCisgICAgbGliYW5kcm9pZF9ydW50aW1lIFwKKyAgICBsaWJuYXRpdmVoZWxwZXIgXAorICAgIGxpYmxvZworCitMT0NBTF9DRkxBR1MgKz0gLVdhbGwgLVdlcnJvciAtV3VudXNlZCAtV3VucmVhY2hhYmxlLWNvZGUKK0xPQ0FMX01PRFVMRSA6PSBsaWJhcHBmdXNlX2puaQorCitpbmNsdWRlICQoQlVJTERfU0hBUkVEX0xJQlJBUlkpCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NdHBEb2N1bWVudHNQcm92aWRlci9qbmkvY29tX2FuZHJvaWRfbXRwX0FwcEZ1c2UuY3BwIGIvcGFja2FnZXMvTXRwRG9jdW1lbnRzUHJvdmlkZXIvam5pL2NvbV9hbmRyb2lkX210cF9BcHBGdXNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTkyYTFmCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvTXRwRG9jdW1lbnRzUHJvdmlkZXIvam5pL2NvbV9hbmRyb2lkX210cF9BcHBGdXNlLmNwcApAQCAtMCwwICsxLDI4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjZGVmaW5lIExPR19OREVCVUcgMAorI2RlZmluZSBMT0dfVEFHICJBcHBGdXNlSk5JIgorI2luY2x1ZGUgInV0aWxzL0xvZy5oIgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8ZGlyZW50Lmg+CisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKworI2luY2x1ZGUgPGxpbnV4L2Z1c2UuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCisjaW5jbHVkZSA8bWFwPgorCisjaW5jbHVkZSAiam5pLmgiCisjaW5jbHVkZSAiSk5JSGVscC5oIgorI2luY2x1ZGUgImFuZHJvaWRfcnVudGltZS9BbmRyb2lkUnVudGltZS5oIgorCituYW1lc3BhY2UgeworCitjb25zdGV4cHIgaW50IG1pbihpbnQgYSwgaW50IGIpIHsKKyAgICByZXR1cm4gYSA8IGIgPyBhIDogYjsKK30KKworLy8gTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUgaW4gb25lIHJlcXVlc3QuCitjb25zdGV4cHIgc2l6ZV90IE1BWF9XUklURSA9IDI1NiAqIDEwMjQ7CisKKy8vIExhcmdlc3QgcG9zc2libGUgcmVxdWVzdC4KKy8vIFRoZSByZXF1ZXN0IHNpemUgaXMgYm91bmRlZCBieSB0aGUgbWF4aW11bSBzaXplIG9mIGEgRlVTRV9XUklURSByZXF1ZXN0CisvLyBiZWNhdXNlIGl0IGhhcyB0aGUgbGFyZ2VzdCBwb3NzaWJsZSBkYXRhIHBheWxvYWQuCitjb25zdGV4cHIgc2l6ZV90IE1BWF9SRVFVRVNUX1NJWkUgPSBzaXplb2Yoc3RydWN0IGZ1c2VfaW5faGVhZGVyKSArCisgICAgICAgIHNpemVvZihzdHJ1Y3QgZnVzZV93cml0ZV9pbikgKyBNQVhfV1JJVEU7CisKK3N0YXRpYyBqY2xhc3MgYXBwX2Z1c2VfY2xhc3M7CisKK3N0cnVjdCBGdXNlUmVxdWVzdCB7CisgICAgY2hhciBidWZmZXJbTUFYX1JFUVVFU1RfU0laRV07CisgICAgRnVzZVJlcXVlc3QoKSB7fQorICAgIGNvbnN0IHN0cnVjdCBmdXNlX2luX2hlYWRlciYgaGVhZGVyKCkgY29uc3QgeworICAgICAgICByZXR1cm4gKihjb25zdCBzdHJ1Y3QgZnVzZV9pbl9oZWFkZXIqKSBidWZmZXI7CisgICAgfQorICAgIGNvbnN0IHZvaWQqIGRhdGEoKSBjb25zdCB7CisgICAgICAgIHJldHVybiAoYnVmZmVyICsgc2l6ZW9mKHN0cnVjdCBmdXNlX2luX2hlYWRlcikpOworICAgIH0KKyAgICBzaXplX3QgZGF0YV9sZW5ndGgoKSBjb25zdCB7CisgICAgICAgIHJldHVybiBoZWFkZXIoKS5sZW4gLSBzaXplb2Yoc3RydWN0IGZ1c2VfaW5faGVhZGVyKTsKKyAgICB9Cit9OworCitjbGFzcyBTY29wZWRGZCB7CisgICAgaW50IG1GZDsKKworcHVibGljOgorICAgIGV4cGxpY2l0IFNjb3BlZEZkKGludCBmZCkgOiBtRmQoZmQpIHt9CisgICAgflNjb3BlZEZkKCkgeworICAgICAgICBjbG9zZShtRmQpOworICAgIH0KKyAgICBvcGVyYXRvciBpbnQoKSB7CisgICAgICAgIHJldHVybiBtRmQ7CisgICAgfQorfTsKKworLyoqCisgKiBUaGUgY2xhc3MgaXMgdXNlZCB0byBhY2Nlc3MgQXBwRnVzZSBjbGFzcyBpbiBKYXZhIGZyb20gZnVzZSBoYW5kbGVycy4KKyAqLworY2xhc3MgQXBwRnVzZSB7CitwdWJsaWM6CisgICAgQXBwRnVzZShKTklFbnYqIC8qZW52Ki8sIGpvYmplY3QgLypzZWxmKi8pIHsKKyAgICB9CisKKyAgICBib29sIGhhbmRsZV9mdXNlX3JlcXVlc3QoaW50IGZkLCBjb25zdCBGdXNlUmVxdWVzdCYgcmVxKSB7CisgICAgICAgIEFMT0dWKCJSZXF1ZXN0IG9wPSVkIiwgcmVxLmhlYWRlcigpLm9wY29kZSk7CisgICAgICAgIHN3aXRjaCAocmVxLmhlYWRlcigpLm9wY29kZSkgeworICAgICAgICAgICAgLy8gVE9ETzogSGFuZGxlIG1vcmUgb3BlcmF0aW9ucyB0aGF0IGFyZSBlbm91Z2ggdG8gcHJvdmlkZSBzZWVrYWJsZQorICAgICAgICAgICAgLy8gRkQuCisgICAgICAgICAgICBjYXNlIEZVU0VfSU5JVDoKKyAgICAgICAgICAgICAgICBpbnZva2VfaGFuZGxlcihmZCwgcmVxLCAmQXBwRnVzZTo6aGFuZGxlX2Z1c2VfaW5pdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBjYXNlIEZVU0VfR0VUQVRUUjoKKyAgICAgICAgICAgICAgICBpbnZva2VfaGFuZGxlcihmZCwgcmVxLCAmQXBwRnVzZTo6aGFuZGxlX2Z1c2VfZ2V0YXR0cik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBjYXNlIEZVU0VfRk9SR0VUOgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgICAgICBBTE9HVigiTk9USU1QTCBvcD0lZCB1bmlxPSUiIFBSSXg2NCAiIG5pZD0lIiBQUkl4NjQgIlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICByZXEuaGVhZGVyKCkub3Bjb2RlLAorICAgICAgICAgICAgICAgICAgICAgIHJlcS5oZWFkZXIoKS51bmlxdWUsCisgICAgICAgICAgICAgICAgICAgICAgcmVxLmhlYWRlcigpLm5vZGVpZCk7CisgICAgICAgICAgICAgICAgZnVzZV9yZXBseShmZCwgcmVxLmhlYWRlcigpLnVuaXF1ZSwgLUVOT1NZUywgTlVMTCwgMCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKK3ByaXZhdGU6CisgICAgaW50IGhhbmRsZV9mdXNlX2luaXQoY29uc3QgZnVzZV9pbl9oZWFkZXImLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZ1c2VfaW5pdF9pbiogaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgZnVzZV9pbml0X291dCogb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCogcmVwbHlfc2l6ZSkgeworICAgICAgICAvLyBLZXJuZWwgMi42LjE2IGlzIHRoZSBmaXJzdCBzdGFibGUga2VybmVsIHdpdGggc3RydWN0IGZ1c2VfaW5pdF9vdXQKKyAgICAgICAgLy8gZGVmaW5lZCAoZnVzZSB2ZXJzaW9uIDcuNikuIFRoZSBzdHJ1Y3R1cmUgaXMgdGhlIHNhbWUgZnJvbSA3LjYgdGhyb3VnaAorICAgICAgICAvLyA3LjIyLiBCZWdpbm5pbmcgd2l0aCA3LjIzLCB0aGUgc3RydWN0dXJlIGluY3JlYXNlZCBpbiBzaXplIGFuZCBhZGRlZAorICAgICAgICAvLyBuZXcgcGFyYW1ldGVycy4KKyAgICAgICAgaWYgKGluLT5tYWpvciAhPSBGVVNFX0tFUk5FTF9WRVJTSU9OIHx8IGluLT5taW5vciA8IDYpIHsKKyAgICAgICAgICAgIEFMT0dFKCJGdXNlIGtlcm5lbCB2ZXJzaW9uIG1pc21hdGNoOiBLZXJuZWwgdmVyc2lvbiAlZC4lZCwgIgorICAgICAgICAgICAgICAgICAgIkV4cGVjdGVkIGF0IGxlYXN0ICVkLjYiLAorICAgICAgICAgICAgICAgICAgaW4tPm1ham9yLCBpbi0+bWlub3IsIEZVU0VfS0VSTkVMX1ZFUlNJT04pOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgLy8gV2UgbGltaXQgb3Vyc2VsdmVzIHRvIDE1IGJlY2F1c2Ugd2UgZG9uJ3QgaGFuZGxlIEJBVENIX0ZPUkdFVCB5ZXQKKyAgICAgICAgb3V0LT5taW5vciA9IG1pbihpbi0+bWlub3IsIDE1KTsKKyNpZiBkZWZpbmVkKEZVU0VfQ09NUEFUXzIyX0lOSVRfT1VUX1NJWkUpCisgICAgICAgIC8vIEZVU0VfS0VSTkVMX1ZFUlNJT04gPj0gMjMuCisKKyAgICAgICAgLy8gSWYgdGhlIGtlcm5lbCBvbmx5IHdvcmtzIG9uIG1pbm9yIHJldnMgb2xkZXIgdGhhbiBvciBlcXVhbCB0byAyMiwKKyAgICAgICAgLy8gdGhlbiB1c2UgdGhlIG9sZGVyIHN0cnVjdHVyZSBzaXplIHNpbmNlIHRoaXMgY29kZSBvbmx5IHVzZXMgdGhlIDcuMjIKKyAgICAgICAgLy8gdmVyc2lvbiBvZiB0aGUgc3RydWN0dXJlLgorICAgICAgICBpZiAoaW4tPm1pbm9yIDw9IDIyKSB7CisgICAgICAgICAgICAqcmVwbHlfc2l6ZSA9IEZVU0VfQ09NUEFUXzIyX0lOSVRfT1VUX1NJWkU7CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIC8vIERvbid0IGRyb3AgdGhpcyBsaW5lIHRvIHByZXZlbnQgYW4gJ3VudXNlZCcgY29tcGlsZSBlcnJvci4KKyAgICAgICAgKnJlcGx5X3NpemUgPSBzaXplb2YoZnVzZV9pbml0X291dCk7CisjZW5kaWYKKworICAgICAgICBvdXQtPm1ham9yID0gRlVTRV9LRVJORUxfVkVSU0lPTjsKKyAgICAgICAgb3V0LT5tYXhfcmVhZGFoZWFkID0gaW4tPm1heF9yZWFkYWhlYWQ7CisgICAgICAgIG91dC0+ZmxhZ3MgPSBGVVNFX0FUT01JQ19PX1RSVU5DIHwgRlVTRV9CSUdfV1JJVEVTOworICAgICAgICBvdXQtPm1heF9iYWNrZ3JvdW5kID0gMzI7CisgICAgICAgIG91dC0+Y29uZ2VzdGlvbl90aHJlc2hvbGQgPSAzMjsKKyAgICAgICAgb3V0LT5tYXhfd3JpdGUgPSBNQVhfV1JJVEU7CisKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaW50IGhhbmRsZV9mdXNlX2dldGF0dHIoY29uc3QgZnVzZV9pbl9oZWFkZXImIGhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmdXNlX2dldGF0dHJfaW4qIC8qIGluICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1c2VfYXR0cl9vdXQqIG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QqIC8qdW51c2VkKi8pIHsKKyAgICAgICAgaWYgKGhlYWRlci5ub2RlaWQgIT0gMSkgeworICAgICAgICAgICAgcmV0dXJuIC1FTk9FTlQ7CisgICAgICAgIH0KKyAgICAgICAgb3V0LT5hdHRyX3ZhbGlkID0gMTAwMCAqIDYwICogMTA7CisgICAgICAgIG91dC0+YXR0ci5pbm8gPSBoZWFkZXIubm9kZWlkOworICAgICAgICBvdXQtPmF0dHIubW9kZSA9IFNfSUZESVIgfCAwNzc3OworICAgICAgICBvdXQtPmF0dHIuc2l6ZSA9IDA7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBTPgorICAgIHZvaWQgaW52b2tlX2hhbmRsZXIoaW50IGZkLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRnVzZVJlcXVlc3QmIHJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKEFwcEZ1c2U6OipoYW5kbGVyKShjb25zdCBmdXNlX2luX2hlYWRlciYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90KiksCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcmVwbHlfc2l6ZSA9IHNpemVvZihTKSkgeworICAgICAgICBjaGFyIHJlcGx5X2RhdGFbcmVwbHlfc2l6ZV07CisgICAgICAgIG1lbXNldChyZXBseV9kYXRhLCAwLCByZXBseV9zaXplKTsKKyAgICAgICAgY29uc3QgaW50IHJlcGx5X2NvZGUgPSAodGhpcy0+KmhhbmRsZXIpKAorICAgICAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVyKCksCisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgVCo+KHJlcXVlc3QuZGF0YSgpKSwKKyAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PFMqPihyZXBseV9kYXRhKSwKKyAgICAgICAgICAgICAgICAmcmVwbHlfc2l6ZSk7CisgICAgICAgIGZ1c2VfcmVwbHkoCisgICAgICAgICAgICAgICAgZmQsCisgICAgICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXIoKS51bmlxdWUsCisgICAgICAgICAgICAgICAgcmVwbHlfY29kZSwKKyAgICAgICAgICAgICAgICByZXBseV9kYXRhLAorICAgICAgICAgICAgICAgIHJlcGx5X3NpemUpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGZ1c2VfcmVwbHkoaW50IGZkLCBpbnQgdW5pcXVlLCBpbnQgcmVwbHlfY29kZSwgdm9pZCogcmVwbHlfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCByZXBseV9zaXplKSB7CisgICAgICAgIC8vIERvbid0IHNlbmQgYW55IGRhdGEgZm9yIGVycm9yIGNhc2UuCisgICAgICAgIGlmIChyZXBseV9jb2RlICE9IDApIHsKKyAgICAgICAgICAgIHJlcGx5X3NpemUgPSAwOworICAgICAgICB9CisKKyAgICAgICAgc3RydWN0IGZ1c2Vfb3V0X2hlYWRlciBoZHI7CisgICAgICAgIGhkci5sZW4gPSByZXBseV9zaXplICsgc2l6ZW9mKGhkcik7CisgICAgICAgIGhkci5lcnJvciA9IHJlcGx5X2NvZGU7CisgICAgICAgIGhkci51bmlxdWUgPSB1bmlxdWU7CisKKyAgICAgICAgc3RydWN0IGlvdmVjIHZlY1syXTsKKyAgICAgICAgdmVjWzBdLmlvdl9iYXNlID0gJmhkcjsKKyAgICAgICAgdmVjWzBdLmlvdl9sZW4gPSBzaXplb2YoaGRyKTsKKyAgICAgICAgdmVjWzFdLmlvdl9iYXNlID0gcmVwbHlfZGF0YTsKKyAgICAgICAgdmVjWzFdLmlvdl9sZW4gPSByZXBseV9zaXplOworCisgICAgICAgIGNvbnN0IGludCByZXMgPSB3cml0ZXYoZmQsIHZlYywgcmVwbHlfc2l6ZSAhPSAwID8gMiA6IDEpOworICAgICAgICBpZiAocmVzIDwgMCkgeworICAgICAgICAgICAgQUxPR0UoIioqKiBSRVBMWSBGQUlMRUQgKioqICVkXG4iLCBlcnJubyk7CisgICAgICAgIH0KKyAgICB9Cit9OworCitqYm9vbGVhbiBjb21fYW5kcm9pZF9tdHBfQXBwRnVzZV9zdGFydF9hcHBfZnVzZV9sb29wKAorICAgICAgICBKTklFbnYqIGVudiwgam9iamVjdCBzZWxmLCBqaW50IGpmZCkgeworICAgIFNjb3BlZEZkIGZkKGR1cChzdGF0aWNfY2FzdDxpbnQ+KGpmZCkpKTsKKyAgICBBcHBGdXNlIGFwcGZ1c2UoZW52LCBzZWxmKTsKKworICAgIEFMT0dEKCJTdGFydCBmdXNlIGxvb3AuIik7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgRnVzZVJlcXVlc3QgcmVxdWVzdDsKKyAgICAgICAgY29uc3Qgc3NpemVfdCByZXN1bHQgPSBURU1QX0ZBSUxVUkVfUkVUUlkoCisgICAgICAgICAgICAgICAgcmVhZChmZCwgcmVxdWVzdC5idWZmZXIsIHNpemVvZihyZXF1ZXN0LmJ1ZmZlcikpKTsKKyAgICAgICAgaWYgKHJlc3VsdCA8IDApIHsKKyAgICAgICAgICAgIGlmIChlcnJubyA9PSBFTk9ERVYpIHsKKyAgICAgICAgICAgICAgICBBTE9HRSgiU29tZW9uZSBzdG9sZSBvdXIgbWFyYmxlcyFcbiIpOworICAgICAgICAgICAgICAgIHJldHVybiBKTklfRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBTE9HRSgiRmFpbGVkIHRvIHJlYWQgYnl0ZXMgZnJvbSBGRDogZXJybm89JWRcbiIsIGVycm5vKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgY29uc3Qgc2l6ZV90IGxlbmd0aCA9IHN0YXRpY19jYXN0PHNpemVfdD4ocmVzdWx0KTsKKyAgICAgICAgaWYgKGxlbmd0aCA8IHNpemVvZihzdHJ1Y3QgZnVzZV9pbl9oZWFkZXIpKSB7CisgICAgICAgICAgICBBTE9HRSgicmVxdWVzdCB0b28gc2hvcnQ6IGxlbj0lenVcbiIsIGxlbmd0aCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyZXF1ZXN0LmhlYWRlcigpLmxlbiAhPSBsZW5ndGgpIHsKKyAgICAgICAgICAgIEFMT0dFKCJtYWxmb3JtZWQgaGVhZGVyOiBsZW49JXp1LCBoZHItPmxlbj0ldVxuIiwKKyAgICAgICAgICAgICAgICAgIGxlbmd0aCwgcmVxdWVzdC5oZWFkZXIoKS5sZW4pOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWFwcGZ1c2UuaGFuZGxlX2Z1c2VfcmVxdWVzdChmZCwgcmVxdWVzdCkpIHsKKyAgICAgICAgICAgIHJldHVybiBKTklfVFJVRTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIGNvbnN0IEpOSU5hdGl2ZU1ldGhvZCBnTWV0aG9kc1tdID0geworICAgIHsKKyAgICAgICAgIm5hdGl2ZV9zdGFydF9hcHBfZnVzZV9sb29wIiwKKyAgICAgICAgIihJKVoiLAorICAgICAgICAodm9pZCAqKSBjb21fYW5kcm9pZF9tdHBfQXBwRnVzZV9zdGFydF9hcHBfZnVzZV9sb29wCisgICAgfQorfTsKKworfQorCitqaW50IEpOSV9PbkxvYWQoSmF2YVZNKiB2bSwgdm9pZCogLyogcmVzZXJ2ZWQgKi8pIHsKKyAgICBKTklFbnYqIGVudiA9IG51bGxwdHI7CisgICAgaWYgKHZtLT5HZXRFbnYoKHZvaWQqKikgJmVudiwgSk5JX1ZFUlNJT05fMV80KSAhPSBKTklfT0spIHsKKyAgICAgICAgQUxPR0UoIkVSUk9SOiBHZXRFbnYgZmFpbGVkXG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgfQorICAgIGFzc2VydChlbnYgIT0gbnVsbHB0cik7CisKKyAgICBqY2xhc3MgY2xhenogPSBlbnYtPkZpbmRDbGFzcygiY29tL2FuZHJvaWQvbXRwL0FwcEZ1c2UiKTsKKyAgICBpZiAoY2xhenogPT0gbnVsbHB0cikgeworICAgICAgICBBTE9HRSgiQ2FuJ3QgZmluZCBjb20vYW5kcm9pZC9tdHAvQXBwRnVzZSIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGFwcF9mdXNlX2NsYXNzID0gc3RhdGljX2Nhc3Q8amNsYXNzPihlbnYtPk5ld0dsb2JhbFJlZihjbGF6eikpOworICAgIGlmIChhcHBfZnVzZV9jbGFzcyA9PSBudWxscHRyKSB7CisgICAgICAgIEFMT0dFKCJDYW4ndCBvYnRhaW4gZ2xvYmFsIHJlZmVyZW5jZSBmb3IgY29tL2FuZHJvaWQvbXRwL0FwcEZ1c2UiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGNvbnN0IGludCByZXN1bHQgPSBhbmRyb2lkOjpBbmRyb2lkUnVudGltZTo6cmVnaXN0ZXJOYXRpdmVNZXRob2RzKAorICAgICAgICAgICAgZW52LCAiY29tL2FuZHJvaWQvbXRwL0FwcEZ1c2UiLCBnTWV0aG9kcywgTkVMRU0oZ01ldGhvZHMpKTsKKyAgICBpZiAocmVzdWx0IDwgMCkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcmV0dXJuIEpOSV9WRVJTSU9OXzFfNDsKK30KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL010cERvY3VtZW50c1Byb3ZpZGVyL3NyYy9jb20vYW5kcm9pZC9tdHAvQXBwRnVzZS5qYXZhIGIvcGFja2FnZXMvTXRwRG9jdW1lbnRzUHJvdmlkZXIvc3JjL2NvbS9hbmRyb2lkL210cC9BcHBGdXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMwOWFkMQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL010cERvY3VtZW50c1Byb3ZpZGVyL3NyYy9jb20vYW5kcm9pZC9tdHAvQXBwRnVzZS5qYXZhCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLm10cDsKKworaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsRmlsZURlc2NyaXB0b3I7CitpbXBvcnQgYW5kcm9pZC5vcy5zdG9yYWdlLlN0b3JhZ2VNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CisKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5hbm5vdGF0aW9ucy5WaXNpYmxlRm9yVGVzdGluZzsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworCitpbXBvcnQgYW5kcm9pZC5vcy5Qcm9jZXNzOworCisvKioKKyAqIFRPRE86IFJlbW92ZSBWaXNpYmxlRm9yVGVzdGluZyBjbGFzcy4KKyAqLworQFZpc2libGVGb3JUZXN0aW5nCitwdWJsaWMgY2xhc3MgQXBwRnVzZSB7CisgICAgc3RhdGljIHsKKyAgICAgICAgU3lzdGVtLmxvYWRMaWJyYXJ5KCJhcHBmdXNlX2puaSIpOworICAgIH0KKworICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG1OYW1lOworICAgIHByaXZhdGUgZmluYWwgVGhyZWFkIG1NZXNzYWdlVGhyZWFkOworICAgIHByaXZhdGUgUGFyY2VsRmlsZURlc2NyaXB0b3IgbURldmljZUZkOworCisgICAgQFZpc2libGVGb3JUZXN0aW5nCisgICAgQXBwRnVzZShTdHJpbmcgbmFtZSkgeworICAgICAgICBtTmFtZSA9IG5hbWU7CisgICAgICAgIG1NZXNzYWdlVGhyZWFkID0gbmV3IFRocmVhZChuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICBuYXRpdmVfc3RhcnRfYXBwX2Z1c2VfbG9vcChtRGV2aWNlRmQuZ2V0RmQoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0KKworICAgIEBWaXNpYmxlRm9yVGVzdGluZworICAgIHZvaWQgbW91bnQoU3RvcmFnZU1hbmFnZXIgc3RvcmFnZU1hbmFnZXIpIHsKKyAgICAgICAgbURldmljZUZkID0gc3RvcmFnZU1hbmFnZXIubW91bnRBcHBGdXNlKG1OYW1lKTsKKyAgICAgICAgbU1lc3NhZ2VUaHJlYWQuc3RhcnQoKTsKKyAgICB9CisKKyAgICBAVmlzaWJsZUZvclRlc3RpbmcKKyAgICB2b2lkIGNsb3NlKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgLy8gUmVtb3RlIHNpZGUgb2YgUGFyY2VsRmlsZURlc2NyaXB0b3IgaXMgdHJhY2tpbmcgdGhlIGNsb3NlIG9mIG1EZXZpY2VGZCwgYW5kIHVubW91bnQKKyAgICAgICAgICAgIC8vIHRoZSBjb3JyZXNwb25kaW5nIGZ1c2UgZmlsZSBzeXN0ZW0uIFRoZSBtTWVzc2FnZVRocmVhZCB3aWxsIHJlY2VpdmUgRlVTRV9GT1JHRVQsIGFuZAorICAgICAgICAgICAgLy8gdGhlbiB0ZXJtaW5hdGUgaXRzZWxmLgorICAgICAgICAgICAgbURldmljZUZkLmNsb3NlKCk7CisgICAgICAgICAgICBtTWVzc2FnZVRocmVhZC5qb2luKCk7CisgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGV4cCkgeworICAgICAgICAgICAgTG9nLmUoTXRwRG9jdW1lbnRzUHJvdmlkZXIuVEFHLCAiRmFpbGVkIHRvIGNsb3NlIGRldmljZSBGRC4iLCBleHApOworICAgICAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBleHApIHsKKyAgICAgICAgICAgIExvZy5lKE10cERvY3VtZW50c1Byb3ZpZGVyLlRBRywgIkZhaWxlZCB0byB0ZXJtaW5hdGUgbWVzc2FnZSB0aHJlYWQuIiwgZXhwKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBWaXNpYmxlRm9yVGVzdGluZworICAgIEZpbGUgZ2V0TW91bnRQb2ludCgpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBGaWxlKCIvbW50L2FwcGZ1c2UvIiArIFByb2Nlc3MubXlVaWQoKSArICJfIiArIG1OYW1lKTsKKyAgICB9CisKKyAgICBwcml2YXRlIG5hdGl2ZSBib29sZWFuIG5hdGl2ZV9zdGFydF9hcHBfZnVzZV9sb29wKGludCBmZCk7Cit9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NdHBEb2N1bWVudHNQcm92aWRlci9zcmMvY29tL2FuZHJvaWQvbXRwL01hcHBlci5qYXZhIGIvcGFja2FnZXMvTXRwRG9jdW1lbnRzUHJvdmlkZXIvc3JjL2NvbS9hbmRyb2lkL210cC9NYXBwZXIuamF2YQppbmRleCBjYjQ5NTM1ZS4uYWM0NzA2NyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvTXRwRG9jdW1lbnRzUHJvdmlkZXIvc3JjL2NvbS9hbmRyb2lkL210cC9NYXBwZXIuamF2YQorKysgYi9wYWNrYWdlcy9NdHBEb2N1bWVudHNQcm92aWRlci9zcmMvY29tL2FuZHJvaWQvbXRwL01hcHBlci5qYXZhCkBAIC02NiwxMCArNjYsMTMgQEAKICAgICAgICAgZGF0YWJhc2UuYmVnaW5UcmFuc2FjdGlvbigpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgZmluYWwgQ29udGVudFZhbHVlc1tdIHZhbHVlc0xpc3QgPSBuZXcgQ29udGVudFZhbHVlc1sxXTsKKyAgICAgICAgICAgIGZpbmFsIENvbnRlbnRWYWx1ZXNbXSBleHRyYVZhbHVlc0xpc3QgPSBuZXcgQ29udGVudFZhbHVlc1sxXTsKICAgICAgICAgICAgIHZhbHVlc0xpc3RbMF0gPSBuZXcgQ29udGVudFZhbHVlcygpOwotICAgICAgICAgICAgTXRwRGF0YWJhc2UuZ2V0RGV2aWNlRG9jdW1lbnRWYWx1ZXModmFsdWVzTGlzdFswXSwgZGV2aWNlKTsKKyAgICAgICAgICAgIGV4dHJhVmFsdWVzTGlzdFswXSA9IG5ldyBDb250ZW50VmFsdWVzKCk7CisgICAgICAgICAgICBNdHBEYXRhYmFzZS5nZXREZXZpY2VEb2N1bWVudFZhbHVlcyh2YWx1ZXNMaXN0WzBdLCBleHRyYVZhbHVlc0xpc3RbMF0sIGRldmljZSk7CiAgICAgICAgICAgICBmaW5hbCBib29sZWFuIGNoYW5nZWQgPSBwdXREb2N1bWVudHMoCiAgICAgICAgICAgICAgICAgICAgIHZhbHVlc0xpc3QsCisgICAgICAgICAgICAgICAgICAgIGV4dHJhVmFsdWVzTGlzdCwKICAgICAgICAgICAgICAgICAgICAgQ09MVU1OX1BBUkVOVF9ET0NVTUVOVF9JRCArICIgSVMgTlVMTCIsCiAgICAgICAgICAgICAgICAgICAgIEVNUFRZX0FSR1MsCiAgICAgICAgICAgICAgICAgICAgIC8qIGhldXJpc3RpYyAqLyBmYWxzZSwKQEAgLTg4LDcgKzkxLDcgQEAKICAgICAgKiBAcGFyYW0gcm9vdHMgTGlzdCBvZiByb290IGluZm9ybWF0aW9uLgogICAgICAqIEByZXR1cm4gSWYgcm9vdHMgYXJlIGFkZGVkIG9yIHJlbW92ZWQgZnJvbSB0aGUgZGF0YWJhc2UuCiAgICAgICovCi0gICAgc3luY2hyb25pemVkIGJvb2xlYW4gcHV0Um9vdERvY3VtZW50cygKKyAgICBzeW5jaHJvbml6ZWQgYm9vbGVhbiBwdXRTdG9yYWdlRG9jdW1lbnRzKAogICAgICAgICAgICAgU3RyaW5nIHBhcmVudERvY3VtZW50SWQsIFJlc291cmNlcyByZXNvdXJjZXMsIE10cFJvb3RbXSByb290cykgewogICAgICAgICBmaW5hbCBTUUxpdGVEYXRhYmFzZSBkYXRhYmFzZSA9IG1EYXRhYmFzZS5nZXRTUUxpdGVEYXRhYmFzZSgpOwogICAgICAgICBkYXRhYmFzZS5iZWdpblRyYW5zYWN0aW9uKCk7CkBAIC0xMDksMzYgKzExMiwyMSBAQAogICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgbWFwIG1vZGUuIik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmaW5hbCBDb250ZW50VmFsdWVzW10gdmFsdWVzTGlzdCA9IG5ldyBDb250ZW50VmFsdWVzW3Jvb3RzLmxlbmd0aF07CisgICAgICAgICAgICBmaW5hbCBDb250ZW50VmFsdWVzW10gZXh0cmFWYWx1ZXNMaXN0ID0gbmV3IENvbnRlbnRWYWx1ZXNbcm9vdHMubGVuZ3RoXTsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcm9vdHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICB2YWx1ZXNMaXN0W2ldID0gbmV3IENvbnRlbnRWYWx1ZXMoKTsKKyAgICAgICAgICAgICAgICBleHRyYVZhbHVlc0xpc3RbaV0gPSBuZXcgQ29udGVudFZhbHVlcygpOwogICAgICAgICAgICAgICAgIE10cERhdGFiYXNlLmdldFN0b3JhZ2VEb2N1bWVudFZhbHVlcygKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc0xpc3RbaV0sIHJlc291cmNlcywgcGFyZW50RG9jdW1lbnRJZCwgcm9vdHNbaV0pOworICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzTGlzdFtpXSwgZXh0cmFWYWx1ZXNMaXN0W2ldLCByZXNvdXJjZXMsIHBhcmVudERvY3VtZW50SWQsIHJvb3RzW2ldKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gY2hhbmdlZCA9IHB1dERvY3VtZW50cygKICAgICAgICAgICAgICAgICAgICAgdmFsdWVzTGlzdCwKKyAgICAgICAgICAgICAgICAgICAgZXh0cmFWYWx1ZXNMaXN0LAogICAgICAgICAgICAgICAgICAgICBDT0xVTU5fUEFSRU5UX0RPQ1VNRU5UX0lEICsgIj0/IiwKICAgICAgICAgICAgICAgICAgICAgc3RyaW5ncyhwYXJlbnREb2N1bWVudElkKSwKICAgICAgICAgICAgICAgICAgICAgaGV1cmlzdGljLAogICAgICAgICAgICAgICAgICAgICBtYXBDb2x1bW4pOwotICAgICAgICAgICAgZmluYWwgQ29udGVudFZhbHVlcyB2YWx1ZXMgPSBuZXcgQ29udGVudFZhbHVlcygpOwotICAgICAgICAgICAgaW50IGkgPSAwOwotICAgICAgICAgICAgZm9yIChmaW5hbCBNdHBSb290IHJvb3QgOiByb290cykgewotICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgc2FtZSB2YWx1ZSBmb3IgdGhlIHJvb3QgSUQgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGRvY3VtZW50IElELgotICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBkb2N1bWVudElkID0gdmFsdWVzTGlzdFtpKytdLmdldEFzU3RyaW5nKERvY3VtZW50LkNPTFVNTl9ET0NVTUVOVF9JRCk7Ci0gICAgICAgICAgICAgICAgLy8gSWYgaXQgZmFpbHMgdG8gaW5zZXJ0L3VwZGF0ZSBkb2N1bWVudHMsIHRoZSBkb2N1bWVudCBJRCB3aWxsIGJlIHNldCB3aXRoIC0xLgotICAgICAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBkb24ndCBpbnNlcnQvdXBkYXRlIHJvb3QgZXh0cmEgaW5mb3JtYXRpb24gbmVpdGhlci4KLSAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnRJZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB2YWx1ZXMucHV0KFJvb3QuQ09MVU1OX1JPT1RfSUQsIGRvY3VtZW50SWQpOwotICAgICAgICAgICAgICAgIHZhbHVlcy5wdXQoCi0gICAgICAgICAgICAgICAgICAgICAgICBSb290LkNPTFVNTl9GTEFHUywKLSAgICAgICAgICAgICAgICAgICAgICAgIFJvb3QuRkxBR19TVVBQT1JUU19JU19DSElMRCB8IFJvb3QuRkxBR19TVVBQT1JUU19DUkVBVEUpOwotICAgICAgICAgICAgICAgIHZhbHVlcy5wdXQoUm9vdC5DT0xVTU5fQVZBSUxBQkxFX0JZVEVTLCByb290Lm1GcmVlU3BhY2UpOwotICAgICAgICAgICAgICAgIHZhbHVlcy5wdXQoUm9vdC5DT0xVTU5fQ0FQQUNJVFlfQllURVMsIHJvb3QubU1heENhcGFjaXR5KTsKLSAgICAgICAgICAgICAgICB2YWx1ZXMucHV0KFJvb3QuQ09MVU1OX01JTUVfVFlQRVMsICIiKTsKLSAgICAgICAgICAgICAgICBkYXRhYmFzZS5yZXBsYWNlKFRBQkxFX1JPT1RfRVhUUkEsIG51bGwsIHZhbHVlcyk7Ci0gICAgICAgICAgICB9CisKICAgICAgICAgICAgIGRhdGFiYXNlLnNldFRyYW5zYWN0aW9uU3VjY2Vzc2Z1bCgpOwogICAgICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CiAgICAgICAgIH0gZmluYWxseSB7CkBAIC0xNzYsNiArMTY0LDcgQEAKICAgICAgICAgfQogICAgICAgICBwdXREb2N1bWVudHMoCiAgICAgICAgICAgICAgICAgdmFsdWVzTGlzdCwKKyAgICAgICAgICAgICAgICBudWxsLAogICAgICAgICAgICAgICAgIENPTFVNTl9QQVJFTlRfRE9DVU1FTlRfSUQgKyAiPT8iLAogICAgICAgICAgICAgICAgIHN0cmluZ3MocGFyZW50SWQpLAogICAgICAgICAgICAgICAgIGhldXJpc3RpYywKQEAgLTI1Nyw2ICsyNDYsNyBAQAogICAgICAqIHJvd3MuIElmIHRoZSBtZXRob2RzIGFkZHMgcm93cyB0byBkYXRhYmFzZSwgaXQgdXBkYXRlcyB2YWx1ZUxpc3Qgd2l0aCBjb3JyZWN0IGRvY3VtZW50IElELgogICAgICAqCiAgICAgICogQHBhcmFtIHZhbHVlc0xpc3QgVmFsdWVzIGZvciBkb2N1bWVudHMgdG8gYmUgc3RvcmVkIGluIHRoZSBkYXRhYmFzZS4KKyAgICAgKiBAcGFyYW0gcm9vdEV4dHJhVmFsdWVzTGlzdCBWYWx1ZXMgZm9yIHJvb3QgZXh0cmEgdG8gYmUgc3RvcmVkIGluIHRoZSBkYXRhYmFzZS4KICAgICAgKiBAcGFyYW0gc2VsZWN0aW9uIFNRTCB3aGVyZSBjbG9zdXJlIHRvIHNlbGVjdCByb3dzIHRoYXQgc2hhcmVzIHRoZSBzYW1lIHBhcmVudC4KICAgICAgKiBAcGFyYW0gYXJncyBBcmd1bWVudCBmb3Igc2VsZWN0aW9uIFNRTC4KICAgICAgKiBAcGFyYW0gaGV1cmlzdGljIFdoZXRoZXIgdGhlIG1hcHBpbmcgbW9kZSBpcyBoZXVyaXN0aWMuCkBAIC0yNjQsNiArMjU0LDcgQEAKICAgICAgKi8KICAgICBwcml2YXRlIGJvb2xlYW4gcHV0RG9jdW1lbnRzKAogICAgICAgICAgICAgQ29udGVudFZhbHVlc1tdIHZhbHVlc0xpc3QsCisgICAgICAgICAgICBATnVsbGFibGUgQ29udGVudFZhbHVlc1tdIHJvb3RFeHRyYVZhbHVlc0xpc3QsCiAgICAgICAgICAgICBTdHJpbmcgc2VsZWN0aW9uLAogICAgICAgICAgICAgU3RyaW5nW10gYXJncywKICAgICAgICAgICAgIGJvb2xlYW4gaGV1cmlzdGljLApAQCAtMjcyLDcgKzI2MywxNCBAQAogICAgICAgICBib29sZWFuIGFkZGVkID0gZmFsc2U7CiAgICAgICAgIGRhdGFiYXNlLmJlZ2luVHJhbnNhY3Rpb24oKTsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGZvciAoZmluYWwgQ29udGVudFZhbHVlcyB2YWx1ZXMgOiB2YWx1ZXNMaXN0KSB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhbHVlc0xpc3QubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBDb250ZW50VmFsdWVzIHZhbHVlcyA9IHZhbHVlc0xpc3RbaV07CisgICAgICAgICAgICAgICAgZmluYWwgQ29udGVudFZhbHVlcyByb290RXh0cmFWYWx1ZXM7CisgICAgICAgICAgICAgICAgaWYgKHJvb3RFeHRyYVZhbHVlc0xpc3QgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICByb290RXh0cmFWYWx1ZXMgPSByb290RXh0cmFWYWx1ZXNMaXN0W2ldOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJvb3RFeHRyYVZhbHVlcyA9IG51bGw7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGZpbmFsIEN1cnNvciBjYW5kaWRhdGVDdXJzb3IgPSBkYXRhYmFzZS5xdWVyeSgKICAgICAgICAgICAgICAgICAgICAgICAgIFRBQkxFX0RPQ1VNRU5UUywKICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ3MoRG9jdW1lbnQuQ09MVU1OX0RPQ1VNRU5UX0lEKSwKQEAgLTI5MCwyNSArMjg4LDI2IEBACiAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGxvbmcgcm93SWQ7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGVDdXJzb3IuZ2V0Q291bnQoKSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICByb3dJZCA9IGRhdGFiYXNlLmluc2VydChUQUJMRV9ET0NVTUVOVFMsIG51bGwsIHZhbHVlcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocm93SWQgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU1FMaXRlRXhjZXB0aW9uKCJGYWlsZWQgdG8gcHV0IGEgZG9jdW1lbnQgaW50byBkYXRhYmFzZS4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghaGV1cmlzdGljKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGVDdXJzb3IubW92ZVRvTmV4dCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGRvY3VtZW50SWQgPSBjYW5kaWRhdGVDdXJzb3IuZ2V0U3RyaW5nKDApOwotICAgICAgICAgICAgICAgICAgICAgICAgcm93SWQgPSBkYXRhYmFzZS51cGRhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICByb3dJZCA9IGNhbmRpZGF0ZUN1cnNvci5nZXRMb25nKDApOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YWJhc2UudXBkYXRlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQUJMRV9ET0NVTUVOVFMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VMRUNUSU9OX0RPQ1VNRU5UX0lELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdzKGRvY3VtZW50SWQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5ncyhyb3dJZCkpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1dChDT0xVTU5fUk9XX1NUQVRFLCBST1dfU1RBVEVfUEVORElORyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByb3dJZCA9IGRhdGFiYXNlLmluc2VydChUQUJMRV9ET0NVTUVOVFMsIG51bGwsIHZhbHVlcyk7CisgICAgICAgICAgICAgICAgICAgICAgICByb3dJZCA9IGRhdGFiYXNlLmluc2VydE9yVGhyb3coVEFCTEVfRE9DVU1FTlRTLCBudWxsLCB2YWx1ZXMpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIC8vIERvY3VtZW50IElEIGlzIGEgcHJpbWFyeSBpbnRlZ2VyIGtleSBvZiB0aGUgdGFibGUuIFNvIHRoZSByZXR1cm5lZCByb3cKICAgICAgICAgICAgICAgICAgICAgLy8gSURzIHNob3VsZCBiZSBzYW1lIHdpdGggdGhlIGRvY3VtZW50IElELgogICAgICAgICAgICAgICAgICAgICB2YWx1ZXMucHV0KERvY3VtZW50LkNPTFVNTl9ET0NVTUVOVF9JRCwgcm93SWQpOworICAgICAgICAgICAgICAgICAgICBpZiAocm9vdEV4dHJhVmFsdWVzICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RFeHRyYVZhbHVlcy5wdXQoUm9vdC5DT0xVTU5fUk9PVF9JRCwgcm93SWQpOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YWJhc2UucmVwbGFjZShUQUJMRV9ST09UX0VYVFJBLCBudWxsLCByb290RXh0cmFWYWx1ZXMpOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlQ3Vyc29yLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTXRwRG9jdW1lbnRzUHJvdmlkZXIvc3JjL2NvbS9hbmRyb2lkL210cC9NdHBEYXRhYmFzZS5qYXZhIGIvcGFja2FnZXMvTXRwRG9jdW1lbnRzUHJvdmlkZXIvc3JjL2NvbS9hbmRyb2lkL210cC9NdHBEYXRhYmFzZS5qYXZhCmluZGV4IDEwOTQxZWIuLjExMjkxNGUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL010cERvY3VtZW50c1Byb3ZpZGVyL3NyYy9jb20vYW5kcm9pZC9tdHAvTXRwRGF0YWJhc2UuamF2YQorKysgYi9wYWNrYWdlcy9NdHBEb2N1bWVudHNQcm92aWRlci9zcmMvY29tL2FuZHJvaWQvbXRwL010cERhdGFiYXNlLmphdmEKQEAgLTIzLDYgKzIzLDkgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKIGltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLkN1cnNvcjsKK2ltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLkRhdGFiYXNlVXRpbHM7CitpbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5NYXRyaXhDdXJzb3I7CitpbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5NYXRyaXhDdXJzb3IuUm93QnVpbGRlcjsKIGltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLnNxbGl0ZS5TUUxpdGVEYXRhYmFzZTsKIGltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLnNxbGl0ZS5TUUxpdGVPcGVuSGVscGVyOwogaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2Uuc3FsaXRlLlNRTGl0ZVF1ZXJ5QnVpbGRlcjsKQEAgLTEwNiwxNyArMTA5LDkzIEBACiAgICAgICogQHJldHVybiBEYXRhYmFzZSBjdXJzb3IuCiAgICAgICovCiAgICAgQ3Vyc29yIHF1ZXJ5Um9vdHMoU3RyaW5nW10gY29sdW1uTmFtZXMpIHsKLSAgICAgICAgZmluYWwgU1FMaXRlUXVlcnlCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgU1FMaXRlUXVlcnlCdWlsZGVyKCk7Ci0gICAgICAgIGJ1aWxkZXIuc2V0VGFibGVzKEpPSU5fUk9PVFMpOwotICAgICAgICBidWlsZGVyLnNldFByb2plY3Rpb25NYXAoQ09MVU1OX01BUF9ST09UUyk7Ci0gICAgICAgIHJldHVybiBidWlsZGVyLnF1ZXJ5KAotICAgICAgICAgICAgICAgIG1EYXRhYmFzZSwKLSAgICAgICAgICAgICAgICBjb2x1bW5OYW1lcywKLSAgICAgICAgICAgICAgICBDT0xVTU5fUk9XX1NUQVRFICsgIiBJTiAoPywgPykgQU5EICIgKyBDT0xVTU5fRE9DVU1FTlRfVFlQRSArICIgPSA/IiwKLSAgICAgICAgICAgICAgICBzdHJpbmdzKFJPV19TVEFURV9WQUxJRCwgUk9XX1NUQVRFX0lOVkFMSURBVEVELCBET0NVTUVOVF9UWVBFX1NUT1JBR0UpLAorICAgICAgICBmaW5hbCBTdHJpbmcgc2VsZWN0aW9uID0KKyAgICAgICAgICAgICAgICBDT0xVTU5fUk9XX1NUQVRFICsgIiBJTiAoPywgPykgQU5EICIgKyBDT0xVTU5fRE9DVU1FTlRfVFlQRSArICIgPSA/IjsKKyAgICAgICAgZmluYWwgQ3Vyc29yIGRldmljZUN1cnNvciA9IG1EYXRhYmFzZS5xdWVyeSgKKyAgICAgICAgICAgICAgICBUQUJMRV9ET0NVTUVOVFMsCisgICAgICAgICAgICAgICAgc3RyaW5ncyhDT0xVTU5fREVWSUNFX0lEKSwKKyAgICAgICAgICAgICAgICBzZWxlY3Rpb24sCisgICAgICAgICAgICAgICAgc3RyaW5ncyhST1dfU1RBVEVfVkFMSUQsIFJPV19TVEFURV9JTlZBTElEQVRFRCwgRE9DVU1FTlRfVFlQRV9ERVZJQ0UpLAorICAgICAgICAgICAgICAgIENPTFVNTl9ERVZJQ0VfSUQsCiAgICAgICAgICAgICAgICAgbnVsbCwKICAgICAgICAgICAgICAgICBudWxsLAogICAgICAgICAgICAgICAgIG51bGwpOworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBmaW5hbCBTUUxpdGVRdWVyeUJ1aWxkZXIgYnVpbGRlciA9IG5ldyBTUUxpdGVRdWVyeUJ1aWxkZXIoKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuc2V0VGFibGVzKEpPSU5fUk9PVFMpOworICAgICAgICAgICAgYnVpbGRlci5zZXRQcm9qZWN0aW9uTWFwKENPTFVNTl9NQVBfUk9PVFMpOworICAgICAgICAgICAgZmluYWwgTWF0cml4Q3Vyc29yIHJlc3VsdCA9IG5ldyBNYXRyaXhDdXJzb3IoY29sdW1uTmFtZXMpOworICAgICAgICAgICAgZmluYWwgQ29udGVudFZhbHVlcyB2YWx1ZXMgPSBuZXcgQ29udGVudFZhbHVlcygpOworCisgICAgICAgICAgICB3aGlsZSAoZGV2aWNlQ3Vyc29yLm1vdmVUb05leHQoKSkgeworICAgICAgICAgICAgICAgIGZpbmFsIGludCBkZXZpY2VJZCA9IGRldmljZUN1cnNvci5nZXRJbnQoMCk7CisgICAgICAgICAgICAgICAgZmluYWwgQ3Vyc29yIHN0b3JhZ2VDdXJzb3IgPSBidWlsZGVyLnF1ZXJ5KAorICAgICAgICAgICAgICAgICAgICAgICAgbURhdGFiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uTmFtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24gKyAiIEFORCAiICsgQ09MVU1OX0RFVklDRV9JRCArICIgPSA/IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ3MoUk9XX1NUQVRFX1ZBTElELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfU1RBVEVfSU5WQUxJREFURUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERPQ1VNRU5UX1RZUEVfU1RPUkFHRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlSWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICBudWxsKTsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICB2YWx1ZXMuY2xlYXIoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0b3JhZ2VDdXJzb3IuZ2V0Q291bnQoKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlQ3Vyc29yLm1vdmVUb05leHQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIERhdGFiYXNlVXRpbHMuY3Vyc29yUm93VG9Db250ZW50VmFsdWVzKHN0b3JhZ2VDdXJzb3IsIHZhbHVlcyk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBDdXJzb3IgY3Vyc29yID0gYnVpbGRlci5xdWVyeSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbURhdGFiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5OYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uICsgIiBBTkQgIiArIENPTFVNTl9ERVZJQ0VfSUQgKyAiID0gPyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ3MoUk9XX1NUQVRFX1ZBTElELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19TVEFURV9JTlZBTElEQVRFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBET0NVTUVOVF9UWVBFX0RFVklDRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2VJZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwpOworICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3IubW92ZVRvTmV4dCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFiYXNlVXRpbHMuY3Vyc29yUm93VG9Db250ZW50VmFsdWVzKGN1cnNvciwgdmFsdWVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yLmNsb3NlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgY2FwYWNpdHlCeXRlcyA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGF2YWlsYWJsZUJ5dGVzID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBjYXBhY2l0eUluZGV4ID0gY3Vyc29yLmdldENvbHVtbkluZGV4KFJvb3QuQ09MVU1OX0NBUEFDSVRZX0JZVEVTKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBhdmFpbGFibGVJbmRleCA9IGN1cnNvci5nZXRDb2x1bW5JbmRleChSb290LkNPTFVNTl9BVkFJTEFCTEVfQllURVMpOworICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHN0b3JhZ2VDdXJzb3IubW92ZVRvTmV4dCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgcmVxdWVzdGVkIGNvbHVtbk5hbWVzIGRvZXMgbm90IGluY2x1ZGUgQ09MVU1OX1hYWF9CWVRFUywgd2UgZG9uJ3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYWxjdWxhdGUgY29ycmVzcG9uZGluZyB2YWx1ZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhcGFjaXR5SW5kZXggIT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwYWNpdHlCeXRlcyArPSBjdXJzb3IuZ2V0TG9uZyhjYXBhY2l0eUluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJsZUluZGV4ICE9IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZUJ5dGVzICs9IGN1cnNvci5nZXRMb25nKGF2YWlsYWJsZUluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMucHV0KFJvb3QuQ09MVU1OX0NBUEFDSVRZX0JZVEVTLCBjYXBhY2l0eUJ5dGVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXQoUm9vdC5DT0xVTU5fQVZBSUxBQkxFX0JZVEVTLCBhdmFpbGFibGVCeXRlcyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgICAgICAgICBzdG9yYWdlQ3Vyc29yLmNsb3NlKCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZmluYWwgUm93QnVpbGRlciByb3cgPSByZXN1bHQubmV3Um93KCk7CisgICAgICAgICAgICAgICAgZm9yIChmaW5hbCBTdHJpbmcga2V5IDogdmFsdWVzLmtleVNldCgpKSB7CisgICAgICAgICAgICAgICAgICAgIHJvdy5hZGQoa2V5LCB2YWx1ZXMuZ2V0KGtleSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIGRldmljZUN1cnNvci5jbG9zZSgpOworICAgICAgICB9CiAgICAgfQogCiAgICAgLyoqCkBAIC0zODAsNyArNDU5LDEwIEBACiAgICAgICAgIGNvbnRleHQuZGVsZXRlRGF0YWJhc2UoREFUQUJBU0VfTkFNRSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgZ2V0RGV2aWNlRG9jdW1lbnRWYWx1ZXMoQ29udGVudFZhbHVlcyB2YWx1ZXMsIE10cERldmljZVJlY29yZCBkZXZpY2UpIHsKKyAgICBzdGF0aWMgdm9pZCBnZXREZXZpY2VEb2N1bWVudFZhbHVlcygKKyAgICAgICAgICAgIENvbnRlbnRWYWx1ZXMgdmFsdWVzLAorICAgICAgICAgICAgQ29udGVudFZhbHVlcyBleHRyYVZhbHVlcywKKyAgICAgICAgICAgIE10cERldmljZVJlY29yZCBkZXZpY2UpIHsKICAgICAgICAgdmFsdWVzLmNsZWFyKCk7CiAgICAgICAgIHZhbHVlcy5wdXQoQ09MVU1OX0RFVklDRV9JRCwgZGV2aWNlLmRldmljZUlkKTsKICAgICAgICAgdmFsdWVzLnB1dE51bGwoQ09MVU1OX1NUT1JBR0VfSUQpOwpAQCAtMzk0LDExICs0NzYsMTUgQEAKICAgICAgICAgdmFsdWVzLnB1dE51bGwoRG9jdW1lbnQuQ09MVU1OX0xBU1RfTU9ESUZJRUQpOwogICAgICAgICB2YWx1ZXMucHV0KERvY3VtZW50LkNPTFVNTl9JQ09OLCBSLmRyYXdhYmxlLmljX3Jvb3RfbXRwKTsKICAgICAgICAgdmFsdWVzLnB1dChEb2N1bWVudC5DT0xVTU5fRkxBR1MsIDApOwotICAgICAgICBsb25nIHNpemUgPSAwOwotICAgICAgICBmb3IgKGZpbmFsIE10cFJvb3Qgcm9vdCA6IGRldmljZS5yb290cykgewotICAgICAgICAgICAgc2l6ZSArPSByb290Lm1NYXhDYXBhY2l0eSAtIHJvb3QubUZyZWVTcGFjZTsKLSAgICAgICAgfQotICAgICAgICB2YWx1ZXMucHV0KERvY3VtZW50LkNPTFVNTl9TSVpFLCBzaXplKTsKKyAgICAgICAgdmFsdWVzLnB1dE51bGwoRG9jdW1lbnQuQ09MVU1OX1NJWkUpOworCisgICAgICAgIGV4dHJhVmFsdWVzLmNsZWFyKCk7CisgICAgICAgIGV4dHJhVmFsdWVzLnB1dCgKKyAgICAgICAgICAgICAgICBSb290LkNPTFVNTl9GTEFHUywKKyAgICAgICAgICAgICAgICBSb290LkZMQUdfU1VQUE9SVFNfSVNfQ0hJTEQgfCBSb290LkZMQUdfU1VQUE9SVFNfQ1JFQVRFKTsKKyAgICAgICAgZXh0cmFWYWx1ZXMucHV0TnVsbChSb290LkNPTFVNTl9BVkFJTEFCTEVfQllURVMpOworICAgICAgICBleHRyYVZhbHVlcy5wdXROdWxsKFJvb3QuQ09MVU1OX0NBUEFDSVRZX0JZVEVTKTsKKyAgICAgICAgZXh0cmFWYWx1ZXMucHV0KFJvb3QuQ09MVU1OX01JTUVfVFlQRVMsICIiKTsKICAgICB9CiAKICAgICAvKioKQEAgLTQwOCw3ICs0OTQsMTEgQEAKICAgICAgKiBAcGFyYW0gcm9vdCBSb290IHRvIGJlIGNvbnZlcnRlZCB7QGxpbmsgQ29udGVudFZhbHVlc30uCiAgICAgICovCiAgICAgc3RhdGljIHZvaWQgZ2V0U3RvcmFnZURvY3VtZW50VmFsdWVzKAotICAgICAgICAgICAgQ29udGVudFZhbHVlcyB2YWx1ZXMsIFJlc291cmNlcyByZXNvdXJjZXMsIFN0cmluZyBwYXJlbnREb2N1bWVudElkLCBNdHBSb290IHJvb3QpIHsKKyAgICAgICAgICAgIENvbnRlbnRWYWx1ZXMgdmFsdWVzLAorICAgICAgICAgICAgQ29udGVudFZhbHVlcyBleHRyYVZhbHVlcywKKyAgICAgICAgICAgIFJlc291cmNlcyByZXNvdXJjZXMsCisgICAgICAgICAgICBTdHJpbmcgcGFyZW50RG9jdW1lbnRJZCwKKyAgICAgICAgICAgIE10cFJvb3Qgcm9vdCkgewogICAgICAgICB2YWx1ZXMuY2xlYXIoKTsKICAgICAgICAgdmFsdWVzLnB1dChDT0xVTU5fREVWSUNFX0lELCByb290Lm1EZXZpY2VJZCk7CiAgICAgICAgIHZhbHVlcy5wdXQoQ09MVU1OX1NUT1JBR0VfSUQsIHJvb3QubVN0b3JhZ2VJZCk7CkBAIC00MjQsNiArNTE0LDEzIEBACiAgICAgICAgIHZhbHVlcy5wdXQoRG9jdW1lbnQuQ09MVU1OX0ZMQUdTLCAwKTsKICAgICAgICAgdmFsdWVzLnB1dChEb2N1bWVudC5DT0xVTU5fU0laRSwKICAgICAgICAgICAgICAgICAoaW50KSBNYXRoLm1pbihyb290Lm1NYXhDYXBhY2l0eSAtIHJvb3QubUZyZWVTcGFjZSwgSW50ZWdlci5NQVhfVkFMVUUpKTsKKworICAgICAgICBleHRyYVZhbHVlcy5wdXQoCisgICAgICAgICAgICAgICAgUm9vdC5DT0xVTU5fRkxBR1MsCisgICAgICAgICAgICAgICAgUm9vdC5GTEFHX1NVUFBPUlRTX0lTX0NISUxEIHwgUm9vdC5GTEFHX1NVUFBPUlRTX0NSRUFURSk7CisgICAgICAgIGV4dHJhVmFsdWVzLnB1dChSb290LkNPTFVNTl9BVkFJTEFCTEVfQllURVMsIHJvb3QubUZyZWVTcGFjZSk7CisgICAgICAgIGV4dHJhVmFsdWVzLnB1dChSb290LkNPTFVNTl9DQVBBQ0lUWV9CWVRFUywgcm9vdC5tTWF4Q2FwYWNpdHkpOworICAgICAgICBleHRyYVZhbHVlcy5wdXQoUm9vdC5DT0xVTU5fTUlNRV9UWVBFUywgIiIpOwogICAgIH0KIAogICAgIC8qKgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTXRwRG9jdW1lbnRzUHJvdmlkZXIvc3JjL2NvbS9hbmRyb2lkL210cC9NdHBEYXRhYmFzZUNvbnN0YW50cy5qYXZhIGIvcGFja2FnZXMvTXRwRG9jdW1lbnRzUHJvdmlkZXIvc3JjL2NvbS9hbmRyb2lkL210cC9NdHBEYXRhYmFzZUNvbnN0YW50cy5qYXZhCmluZGV4IGEyMzM1ODkuLmYyNTJlMGYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL010cERvY3VtZW50c1Byb3ZpZGVyL3NyYy9jb20vYW5kcm9pZC9tdHAvTXRwRGF0YWJhc2VDb25zdGFudHMuamF2YQorKysgYi9wYWNrYWdlcy9NdHBEb2N1bWVudHNQcm92aWRlci9zcmMvY29tL2FuZHJvaWQvbXRwL010cERhdGFiYXNlQ29uc3RhbnRzLmphdmEKQEAgLTEyNiwxNCArMTI2LDE0IEBACiAgICAgICAgICAgICBEb2N1bWVudC5DT0xVTU5fTEFTVF9NT0RJRklFRCArICIgSU5URUdFUiwiICsKICAgICAgICAgICAgIERvY3VtZW50LkNPTFVNTl9JQ09OICsgIiBJTlRFR0VSLCIgKwogICAgICAgICAgICAgRG9jdW1lbnQuQ09MVU1OX0ZMQUdTICsgIiBJTlRFR0VSIE5PVCBOVUxMLCIgKwotICAgICAgICAgICAgRG9jdW1lbnQuQ09MVU1OX1NJWkUgKyAiIElOVEVHRVIgTk9UIE5VTEwpOyI7CisgICAgICAgICAgICBEb2N1bWVudC5DT0xVTU5fU0laRSArICIgSU5URUdFUik7IjsKIAogICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVFUllfQ1JFQVRFX1JPT1RfRVhUUkEgPQogICAgICAgICAgICAgIkNSRUFURSBUQUJMRSAiICsgVEFCTEVfUk9PVF9FWFRSQSArICIgKCIgKwogICAgICAgICAgICAgUm9vdC5DT0xVTU5fUk9PVF9JRCArICIgSU5URUdFUiBQUklNQVJZIEtFWSwiICsKICAgICAgICAgICAgIFJvb3QuQ09MVU1OX0ZMQUdTICsgIiBJTlRFR0VSIE5PVCBOVUxMLCIgKwotICAgICAgICAgICAgUm9vdC5DT0xVTU5fQVZBSUxBQkxFX0JZVEVTICsgIiBJTlRFR0VSIE5PVCBOVUxMLCIgKwotICAgICAgICAgICAgUm9vdC5DT0xVTU5fQ0FQQUNJVFlfQllURVMgKyAiIElOVEVHRVIgTk9UIE5VTEwsIiArCisgICAgICAgICAgICBSb290LkNPTFVNTl9BVkFJTEFCTEVfQllURVMgKyAiIElOVEVHRVIsIiArCisgICAgICAgICAgICBSb290LkNPTFVNTl9DQVBBQ0lUWV9CWVRFUyArICIgSU5URUdFUiwiICsKICAgICAgICAgICAgIFJvb3QuQ09MVU1OX01JTUVfVFlQRVMgKyAiIFRFWFQgTk9UIE5VTEwpOyI7CiAKICAgICAvKioKQEAgLTE0NSwxOCArMTQ1LDI2IEBACiAgICAgICAgIENPTFVNTl9NQVBfUk9PVFMgPSBuZXcgSGFzaE1hcDw+KCk7CiAgICAgICAgIENPTFVNTl9NQVBfUk9PVFMucHV0KFJvb3QuQ09MVU1OX1JPT1RfSUQsIFRBQkxFX1JPT1RfRVhUUkEgKyAiLiIgKyBSb290LkNPTFVNTl9ST09UX0lEKTsKICAgICAgICAgQ09MVU1OX01BUF9ST09UUy5wdXQoUm9vdC5DT0xVTU5fRkxBR1MsIFRBQkxFX1JPT1RfRVhUUkEgKyAiLiIgKyBSb290LkNPTFVNTl9GTEFHUyk7Ci0gICAgICAgIENPTFVNTl9NQVBfUk9PVFMucHV0KFJvb3QuQ09MVU1OX0lDT04sIFRBQkxFX0RPQ1VNRU5UUyArICIuIiArIERvY3VtZW50LkNPTFVNTl9JQ09OKTsKICAgICAgICAgQ09MVU1OX01BUF9ST09UUy5wdXQoCi0gICAgICAgICAgICAgICAgUm9vdC5DT0xVTU5fVElUTEUsIFRBQkxFX0RPQ1VNRU5UUyArICIuIiArIERvY3VtZW50LkNPTFVNTl9ESVNQTEFZX05BTUUpOwotICAgICAgICBDT0xVTU5fTUFQX1JPT1RTLnB1dChSb290LkNPTFVNTl9TVU1NQVJZLCBUQUJMRV9ET0NVTUVOVFMgKyAiLiIgKyBEb2N1bWVudC5DT0xVTU5fU1VNTUFSWSk7CisgICAgICAgICAgICAgICAgUm9vdC5DT0xVTU5fSUNPTiwKKyAgICAgICAgICAgICAgICBUQUJMRV9ET0NVTUVOVFMgKyAiLiIgKyBEb2N1bWVudC5DT0xVTU5fSUNPTiArICIgQVMgIiArIFJvb3QuQ09MVU1OX0lDT04pOwogICAgICAgICBDT0xVTU5fTUFQX1JPT1RTLnB1dCgKLSAgICAgICAgICAgICAgICBSb290LkNPTFVNTl9ET0NVTUVOVF9JRCwgVEFCTEVfRE9DVU1FTlRTICsgIi4iICsgRG9jdW1lbnQuQ09MVU1OX0RPQ1VNRU5UX0lEKTsKKyAgICAgICAgICAgICAgICBSb290LkNPTFVNTl9USVRMRSwKKyAgICAgICAgICAgICAgICBUQUJMRV9ET0NVTUVOVFMgKyAiLiIgKyBEb2N1bWVudC5DT0xVTU5fRElTUExBWV9OQU1FICsgIiBBUyAiICsgUm9vdC5DT0xVTU5fVElUTEUpOworICAgICAgICBDT0xVTU5fTUFQX1JPT1RTLnB1dCgKKyAgICAgICAgICAgICAgICBSb290LkNPTFVNTl9TVU1NQVJZLAorICAgICAgICAgICAgICAgIFRBQkxFX0RPQ1VNRU5UUyArICIuIiArIERvY3VtZW50LkNPTFVNTl9TVU1NQVJZICsgIiBBUyAiICsgUm9vdC5DT0xVTU5fU1VNTUFSWSk7CisgICAgICAgIENPTFVNTl9NQVBfUk9PVFMucHV0KAorICAgICAgICAgICAgICAgIFJvb3QuQ09MVU1OX0RPQ1VNRU5UX0lELAorICAgICAgICAgICAgICAgIFRBQkxFX0RPQ1VNRU5UUyArICIuIiArIERvY3VtZW50LkNPTFVNTl9ET0NVTUVOVF9JRCArCisgICAgICAgICAgICAgICAgIiBBUyAiICsgUm9vdC5DT0xVTU5fRE9DVU1FTlRfSUQpOwogICAgICAgICBDT0xVTU5fTUFQX1JPT1RTLnB1dCgKICAgICAgICAgICAgICAgICBSb290LkNPTFVNTl9BVkFJTEFCTEVfQllURVMsIFRBQkxFX1JPT1RfRVhUUkEgKyAiLiIgKyBSb290LkNPTFVNTl9BVkFJTEFCTEVfQllURVMpOwogICAgICAgICBDT0xVTU5fTUFQX1JPT1RTLnB1dCgKICAgICAgICAgICAgICAgICBSb290LkNPTFVNTl9DQVBBQ0lUWV9CWVRFUywgVEFCTEVfUk9PVF9FWFRSQSArICIuIiArIFJvb3QuQ09MVU1OX0NBUEFDSVRZX0JZVEVTKTsKICAgICAgICAgQ09MVU1OX01BUF9ST09UUy5wdXQoCiAgICAgICAgICAgICAgICAgUm9vdC5DT0xVTU5fTUlNRV9UWVBFUywgVEFCTEVfUk9PVF9FWFRSQSArICIuIiArIFJvb3QuQ09MVU1OX01JTUVfVFlQRVMpOworICAgICAgICBDT0xVTU5fTUFQX1JPT1RTLnB1dChDT0xVTU5fREVWSUNFX0lELCBDT0xVTU5fREVWSUNFX0lEKTsKICAgICB9CiAKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgY3JlYXRlSm9pbkZyb21DbG9zdXJlKApkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTXRwRG9jdW1lbnRzUHJvdmlkZXIvc3JjL2NvbS9hbmRyb2lkL210cC9NdHBEb2N1bWVudHNQcm92aWRlci5qYXZhIGIvcGFja2FnZXMvTXRwRG9jdW1lbnRzUHJvdmlkZXIvc3JjL2NvbS9hbmRyb2lkL210cC9NdHBEb2N1bWVudHNQcm92aWRlci5qYXZhCmluZGV4IDU3YTY4YmEuLjM1NzM1MzYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL010cERvY3VtZW50c1Byb3ZpZGVyL3NyYy9jb20vYW5kcm9pZC9tdHAvTXRwRG9jdW1lbnRzUHJvdmlkZXIuamF2YQorKysgYi9wYWNrYWdlcy9NdHBEb2N1bWVudHNQcm92aWRlci9zcmMvY29tL2FuZHJvaWQvbXRwL010cERvY3VtZW50c1Byb3ZpZGVyLmphdmEKQEAgLTI0NSw3ICsyNDUsNiBAQAogICAgIHZvaWQgY2xvc2VEZXZpY2UoaW50IGRldmljZUlkKSB0aHJvd3MgSU9FeGNlcHRpb24sIEludGVycnVwdGVkRXhjZXB0aW9uIHsKICAgICAgICAgc3luY2hyb25pemVkIChtRGV2aWNlTGlzdExvY2spIHsKICAgICAgICAgICAgIGNsb3NlRGV2aWNlSW50ZXJuYWwoZGV2aWNlSWQpOwotICAgICAgICAgICAgbURhdGFiYXNlLnJlbW92ZURldmljZVJvd3MoZGV2aWNlSWQpOwogICAgICAgICB9CiAgICAgICAgIG1Sb290U2Nhbm5lci5yZXN1bWUoKTsKICAgICB9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NdHBEb2N1bWVudHNQcm92aWRlci9zcmMvY29tL2FuZHJvaWQvbXRwL1Jvb3RTY2FubmVyLmphdmEgYi9wYWNrYWdlcy9NdHBEb2N1bWVudHNQcm92aWRlci9zcmMvY29tL2FuZHJvaWQvbXRwL1Jvb3RTY2FubmVyLmphdmEKaW5kZXggZTZjMjcyNi4uYzIxNmM3NyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvTXRwRG9jdW1lbnRzUHJvdmlkZXIvc3JjL2NvbS9hbmRyb2lkL210cC9Sb290U2Nhbm5lci5qYXZhCisrKyBiL3BhY2thZ2VzL010cERvY3VtZW50c1Byb3ZpZGVyL3NyYy9jb20vYW5kcm9pZC9tdHAvUm9vdFNjYW5uZXIuamF2YQpAQCAtMTA1LDcgKzEwNSw3IEBACiAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKICAgICAgICAgICAgIFByb2Nlc3Muc2V0VGhyZWFkUHJpb3JpdHkoUHJvY2Vzcy5USFJFQURfUFJJT1JJVFlfQkFDS0dST1VORCk7CiAgICAgICAgICAgICBpbnQgcG9sbGluZ0NvdW50ID0gMDsKLSAgICAgICAgICAgIHdoaWxlICghVGhyZWFkLmludGVycnVwdGVkKCkpIHsKKyAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgICAgICAgYm9vbGVhbiBjaGFuZ2VkID0gZmFsc2U7CiAKICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgZGV2aWNlcy4KQEAgLTEyNyw3ICsxMjcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0YXJ0QWRkaW5nRG9jdW1lbnRzKGRvY3VtZW50SWQpOwotICAgICAgICAgICAgICAgICAgICBpZiAobURhdGFiYXNlLmdldE1hcHBlcigpLnB1dFJvb3REb2N1bWVudHMoCisgICAgICAgICAgICAgICAgICAgIGlmIChtRGF0YWJhc2UuZ2V0TWFwcGVyKCkucHV0U3RvcmFnZURvY3VtZW50cygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudElkLCBtUmVzb3VyY2VzLCBkZXZpY2Uucm9vdHMpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTQ3LDggKzE0Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgIFRocmVhZC5zbGVlcChwb2xsaW5nQ291bnQgPiBTSE9SVF9QT0xMSU5HX1RJTUVTID8KICAgICAgICAgICAgICAgICAgICAgICAgIExPTkdfUE9MTElOR19JTlRFUlZBTCA6IFNIT1JUX1BPTExJTkdfSU5URVJWQUwpOwogICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGV4cCkgewotICAgICAgICAgICAgICAgICAgICAvLyBUaGUgd2hpbGUgY29uZGl0aW9uIGhhbmRsZXMgdGhlIGludGVycnVwdGVkIGZsYWcuCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL010cERvY3VtZW50c1Byb3ZpZGVyL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9tdHAvQXBwRnVzZVRlc3QuamF2YSBiL3BhY2thZ2VzL010cERvY3VtZW50c1Byb3ZpZGVyL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9tdHAvQXBwRnVzZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjZkOGViCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvTXRwRG9jdW1lbnRzUHJvdmlkZXIvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL210cC9BcHBGdXNlVGVzdC5qYXZhCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLm10cDsKKworaW1wb3J0IGFuZHJvaWQub3Muc3RvcmFnZS5TdG9yYWdlTWFuYWdlcjsKK2ltcG9ydCBhbmRyb2lkLnN5c3RlbS5FcnJub0V4Y2VwdGlvbjsKK2ltcG9ydCBhbmRyb2lkLnN5c3RlbS5PczsKK2ltcG9ydCBhbmRyb2lkLnRlc3QuQW5kcm9pZFRlc3RDYXNlOworaW1wb3J0IGFuZHJvaWQudGVzdC5zdWl0ZWJ1aWxkZXIuYW5ub3RhdGlvbi5TbWFsbFRlc3Q7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CisKK0BTbWFsbFRlc3QKK3B1YmxpYyBjbGFzcyBBcHBGdXNlVGVzdCBleHRlbmRzIEFuZHJvaWRUZXN0Q2FzZSB7CisgICAgLyoqCisgICAgICogVE9ETzogRW5hYmxlIHRoaXMgdGVzdCBhZnRlciBhZGRpbmcgU0VMaW51eCBwb2xpY2llcyBmb3IgYXBwZnVzZS4KKyAgICAgKiBAdGhyb3dzIEVycm5vRXhjZXB0aW9uCisgICAgICogQHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGRpc2FibGVkX3Rlc3RCYXNpYygpIHRocm93cyBFcnJub0V4Y2VwdGlvbiwgSW50ZXJydXB0ZWRFeGNlcHRpb24geworICAgICAgICBmaW5hbCBTdG9yYWdlTWFuYWdlciBzdG9yYWdlTWFuYWdlciA9IGdldENvbnRleHQoKS5nZXRTeXN0ZW1TZXJ2aWNlKFN0b3JhZ2VNYW5hZ2VyLmNsYXNzKTsKKyAgICAgICAgZmluYWwgQXBwRnVzZSBhcHBGdXNlID0gbmV3IEFwcEZ1c2UoInRlc3QiKTsKKyAgICAgICAgYXBwRnVzZS5tb3VudChzdG9yYWdlTWFuYWdlcik7CisgICAgICAgIGZpbmFsIEZpbGUgZmlsZSA9IGFwcEZ1c2UuZ2V0TW91bnRQb2ludCgpOworICAgICAgICBhc3NlcnRUcnVlKGZpbGUuaXNEaXJlY3RvcnkoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygxLCBPcy5zdGF0KGZpbGUuZ2V0UGF0aCgpKS5zdF9pbm8pOworICAgICAgICBhcHBGdXNlLmNsb3NlKCk7CisgICAgICAgIGFzc2VydFRydWUoMSAhPSBPcy5zdGF0KGZpbGUuZ2V0UGF0aCgpKS5zdF9pbm8pOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL010cERvY3VtZW50c1Byb3ZpZGVyL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9tdHAvRG9jdW1lbnRMb2FkZXJUZXN0LmphdmEgYi9wYWNrYWdlcy9NdHBEb2N1bWVudHNQcm92aWRlci90ZXN0cy9zcmMvY29tL2FuZHJvaWQvbXRwL0RvY3VtZW50TG9hZGVyVGVzdC5qYXZhCmluZGV4IDdiZDlhMTcuLmYzN2E1NWMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL010cERvY3VtZW50c1Byb3ZpZGVyL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9tdHAvRG9jdW1lbnRMb2FkZXJUZXN0LmphdmEKKysrIGIvcGFja2FnZXMvTXRwRG9jdW1lbnRzUHJvdmlkZXIvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL210cC9Eb2N1bWVudExvYWRlclRlc3QuamF2YQpAQCAtNDEsNyArNDEsNyBAQAogICAgIHB1YmxpYyB2b2lkIHNldFVwKCkgewogICAgICAgICBtRGF0YWJhc2UgPSBuZXcgTXRwRGF0YWJhc2UoZ2V0Q29udGV4dCgpLCBNdHBEYXRhYmFzZUNvbnN0YW50cy5GTEFHX0RBVEFCQVNFX0lOX01FTU9SWSk7CiAgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdGFydEFkZGluZ0RvY3VtZW50cygiZGV2aWNlRG9jSWQiKTsKLSAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnB1dFJvb3REb2N1bWVudHMoImRldmljZURvY0lkIiwgbmV3IFRlc3RSZXNvdXJjZXMoKSwgbmV3IE10cFJvb3RbXSB7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5wdXRTdG9yYWdlRG9jdW1lbnRzKCJkZXZpY2VEb2NJZCIsIG5ldyBUZXN0UmVzb3VyY2VzKCksIG5ldyBNdHBSb290W10gewogICAgICAgICAgICAgICAgIG5ldyBNdHBSb290KDAsIDAsICJEZXZpY2UiLCAiU3RvcmFnZSIsIDEwMDAsIDEwMDAsICIiKQogICAgICAgICB9KTsKICAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0b3BBZGRpbmdEb2N1bWVudHMoImRldmljZURvY0lkIik7CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NdHBEb2N1bWVudHNQcm92aWRlci90ZXN0cy9zcmMvY29tL2FuZHJvaWQvbXRwL010cERhdGFiYXNlVGVzdC5qYXZhIGIvcGFja2FnZXMvTXRwRG9jdW1lbnRzUHJvdmlkZXIvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL210cC9NdHBEYXRhYmFzZVRlc3QuamF2YQppbmRleCBiNzQ1MTc1Li4xZTFlYTBhIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9NdHBEb2N1bWVudHNQcm92aWRlci90ZXN0cy9zcmMvY29tL2FuZHJvaWQvbXRwL010cERhdGFiYXNlVGVzdC5qYXZhCisrKyBiL3BhY2thZ2VzL010cERvY3VtZW50c1Byb3ZpZGVyL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9tdHAvTXRwRGF0YWJhc2VUZXN0LmphdmEKQEAgLTc0LDkgKzc0LDcyIEBACiAgICAgICAgIHJldHVybiBjdXJzb3IuZ2V0U3RyaW5nKGN1cnNvci5nZXRDb2x1bW5JbmRleChjb2x1bW5OYW1lKSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgdGVzdFB1dFJvb3REb2N1bWVudHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0UHV0U2luZ2xlU3RvcmFnZURvY3VtZW50cygpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RhcnRBZGRpbmdEb2N1bWVudHMobnVsbCk7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5wdXREZXZpY2VEb2N1bWVudCgKKyAgICAgICAgICAgICAgICBuZXcgTXRwRGV2aWNlUmVjb3JkKDAsICJEZXZpY2UiLCB0cnVlLCBuZXcgTXRwUm9vdFswXSkpOworICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RvcEFkZGluZ0RvY3VtZW50cyhudWxsKTsKKworICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RhcnRBZGRpbmdEb2N1bWVudHMoIjEiKTsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnB1dFN0b3JhZ2VEb2N1bWVudHMoIjEiLCByZXNvdXJjZXMsIG5ldyBNdHBSb290W10geworICAgICAgICAgICAgICAgIG5ldyBNdHBSb290KDAsIDEsICJEZXZpY2UiLCAiU3RvcmFnZSIsIDEwMDAsIDIwMDAsICIiKQorICAgICAgICB9KTsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0b3BBZGRpbmdEb2N1bWVudHMoIjEiKTsKKworICAgICAgICB7CisgICAgICAgICAgICBmaW5hbCBDdXJzb3IgY3Vyc29yID0gbURhdGFiYXNlLnF1ZXJ5Um9vdERvY3VtZW50cyhDT0xVTU5fTkFNRVMpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGN1cnNvci5nZXRDb3VudCgpKTsKKworICAgICAgICAgICAgY3Vyc29yLm1vdmVUb05leHQoKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCBnZXRJbnQoY3Vyc29yLCBDT0xVTU5fRE9DVU1FTlRfSUQpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygwLCBnZXRJbnQoY3Vyc29yLCBDT0xVTU5fREVWSUNFX0lEKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZ2V0SW50KGN1cnNvciwgQ09MVU1OX1NUT1JBR0VfSUQpKTsKKyAgICAgICAgICAgIGFzc2VydFRydWUoaXNOdWxsKGN1cnNvciwgQ09MVU1OX09CSkVDVF9IQU5ETEUpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyhEb2N1bWVudHNDb250cmFjdC5Eb2N1bWVudC5NSU1FX1RZUEVfRElSLCBnZXRTdHJpbmcoY3Vyc29yLCBDT0xVTU5fTUlNRV9UWVBFKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIkRldmljZSBTdG9yYWdlIiwgZ2V0U3RyaW5nKGN1cnNvciwgQ09MVU1OX0RJU1BMQVlfTkFNRSkpOworICAgICAgICAgICAgYXNzZXJ0VHJ1ZShpc051bGwoY3Vyc29yLCBDT0xVTU5fU1VNTUFSWSkpOworICAgICAgICAgICAgYXNzZXJ0VHJ1ZShpc051bGwoY3Vyc29yLCBDT0xVTU5fTEFTVF9NT0RJRklFRCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKFIuZHJhd2FibGUuaWNfcm9vdF9tdHAsIGdldEludChjdXJzb3IsIENPTFVNTl9JQ09OKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMCwgZ2V0SW50KGN1cnNvciwgQ09MVU1OX0ZMQUdTKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMTAwMCwgZ2V0SW50KGN1cnNvciwgQ09MVU1OX1NJWkUpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygKKyAgICAgICAgICAgICAgICAgICAgTXRwRGF0YWJhc2VDb25zdGFudHMuRE9DVU1FTlRfVFlQRV9TVE9SQUdFLCBnZXRJbnQoY3Vyc29yLCBDT0xVTU5fRE9DVU1FTlRfVFlQRSkpOworCisgICAgICAgICAgICBjdXJzb3IuY2xvc2UoKTsKKyAgICAgICAgfQorCisgICAgICAgIHsKKyAgICAgICAgICAgIGZpbmFsIEN1cnNvciBjdXJzb3IgPSBtRGF0YWJhc2UucXVlcnlSb290cyhuZXcgU3RyaW5nIFtdIHsKKyAgICAgICAgICAgICAgICAgICAgUm9vdC5DT0xVTU5fUk9PVF9JRCwKKyAgICAgICAgICAgICAgICAgICAgUm9vdC5DT0xVTU5fRkxBR1MsCisgICAgICAgICAgICAgICAgICAgIFJvb3QuQ09MVU1OX0lDT04sCisgICAgICAgICAgICAgICAgICAgIFJvb3QuQ09MVU1OX1RJVExFLAorICAgICAgICAgICAgICAgICAgICBSb290LkNPTFVNTl9TVU1NQVJZLAorICAgICAgICAgICAgICAgICAgICBSb290LkNPTFVNTl9ET0NVTUVOVF9JRCwKKyAgICAgICAgICAgICAgICAgICAgUm9vdC5DT0xVTU5fQVZBSUxBQkxFX0JZVEVTLAorICAgICAgICAgICAgICAgICAgICBSb290LkNPTFVNTl9DQVBBQ0lUWV9CWVRFUworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgY3Vyc29yLmdldENvdW50KCkpOworCisgICAgICAgICAgICBjdXJzb3IubW92ZVRvTmV4dCgpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGdldEludChjdXJzb3IsIFJvb3QuQ09MVU1OX1JPT1RfSUQpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygKKyAgICAgICAgICAgICAgICAgICAgUm9vdC5GTEFHX1NVUFBPUlRTX0lTX0NISUxEIHwgUm9vdC5GTEFHX1NVUFBPUlRTX0NSRUFURSwKKyAgICAgICAgICAgICAgICAgICAgZ2V0SW50KGN1cnNvciwgUm9vdC5DT0xVTU5fRkxBR1MpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyhSLmRyYXdhYmxlLmljX3Jvb3RfbXRwLCBnZXRJbnQoY3Vyc29yLCBSb290LkNPTFVNTl9JQ09OKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIkRldmljZSBTdG9yYWdlIiwgZ2V0U3RyaW5nKGN1cnNvciwgUm9vdC5DT0xVTU5fVElUTEUpKTsKKyAgICAgICAgICAgIGFzc2VydFRydWUoaXNOdWxsKGN1cnNvciwgUm9vdC5DT0xVTU5fU1VNTUFSWSkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGdldEludChjdXJzb3IsIFJvb3QuQ09MVU1OX0RPQ1VNRU5UX0lEKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMTAwMCwgZ2V0SW50KGN1cnNvciwgUm9vdC5DT0xVTU5fQVZBSUxBQkxFX0JZVEVTKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjAwMCwgZ2V0SW50KGN1cnNvciwgUm9vdC5DT0xVTU5fQ0FQQUNJVFlfQllURVMpKTsKKworICAgICAgICAgICAgY3Vyc29yLmNsb3NlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0UHV0U3RvcmFnZURvY3VtZW50cygpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RhcnRBZGRpbmdEb2N1bWVudHMoImRldmljZURvY0lkIik7Ci0gICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5wdXRSb290RG9jdW1lbnRzKCJkZXZpY2VEb2NJZCIsIHJlc291cmNlcywgbmV3IE10cFJvb3RbXSB7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5wdXRTdG9yYWdlRG9jdW1lbnRzKCJkZXZpY2VEb2NJZCIsIHJlc291cmNlcywgbmV3IE10cFJvb3RbXSB7CiAgICAgICAgICAgICAgICAgbmV3IE10cFJvb3QoMCwgMSwgIkRldmljZSIsICJTdG9yYWdlIiwgMTAwMCwgMjAwMCwgIiIpLAogICAgICAgICAgICAgICAgIG5ldyBNdHBSb290KDAsIDIsICJEZXZpY2UiLCAiU3RvcmFnZSIsIDIwMDAsIDQwMDAsICIiKSwKICAgICAgICAgICAgICAgICBuZXcgTXRwUm9vdCgwLCAzLCAiRGV2aWNlIiwgIi9AIyUmPD5TdG9yYWdlIiwgMzAwMCwgNjAwMCwiIikKQEAgLTExMSw1MiArMTc0LDYgQEAKIAogICAgICAgICAgICAgY3Vyc29yLmNsb3NlKCk7CiAgICAgICAgIH0KLQotICAgICAgICB7Ci0gICAgICAgICAgICBmaW5hbCBDdXJzb3IgY3Vyc29yID0gbURhdGFiYXNlLnF1ZXJ5Um9vdHMobmV3IFN0cmluZyBbXSB7Ci0gICAgICAgICAgICAgICAgICAgIFJvb3QuQ09MVU1OX1JPT1RfSUQsCi0gICAgICAgICAgICAgICAgICAgIFJvb3QuQ09MVU1OX0ZMQUdTLAotICAgICAgICAgICAgICAgICAgICBSb290LkNPTFVNTl9JQ09OLAotICAgICAgICAgICAgICAgICAgICBSb290LkNPTFVNTl9USVRMRSwKLSAgICAgICAgICAgICAgICAgICAgUm9vdC5DT0xVTU5fU1VNTUFSWSwKLSAgICAgICAgICAgICAgICAgICAgUm9vdC5DT0xVTU5fRE9DVU1FTlRfSUQsCi0gICAgICAgICAgICAgICAgICAgIFJvb3QuQ09MVU1OX0FWQUlMQUJMRV9CWVRFUywKLSAgICAgICAgICAgICAgICAgICAgUm9vdC5DT0xVTU5fQ0FQQUNJVFlfQllURVMKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIGN1cnNvci5nZXRDb3VudCgpKTsKLQotICAgICAgICAgICAgY3Vyc29yLm1vdmVUb05leHQoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCBjdXJzb3IuZ2V0SW50KDApKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyhSb290LkZMQUdfU1VQUE9SVFNfSVNfQ0hJTEQgfCBSb290LkZMQUdfU1VQUE9SVFNfQ1JFQVRFLCBjdXJzb3IuZ2V0SW50KDEpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyhSLmRyYXdhYmxlLmljX3Jvb3RfbXRwLCBjdXJzb3IuZ2V0SW50KDIpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiRGV2aWNlIFN0b3JhZ2UiLCBjdXJzb3IuZ2V0U3RyaW5nKDMpKTsKLSAgICAgICAgICAgIGFzc2VydFRydWUoY3Vyc29yLmlzTnVsbCg0KSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgY3Vyc29yLmdldEludCg1KSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMTAwMCwgY3Vyc29yLmdldEludCg2KSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjAwMCwgY3Vyc29yLmdldEludCg3KSk7Ci0KLSAgICAgICAgICAgIGN1cnNvci5tb3ZlVG9OZXh0KCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY3Vyc29yLmdldEludCgwKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoUm9vdC5GTEFHX1NVUFBPUlRTX0lTX0NISUxEIHwgUm9vdC5GTEFHX1NVUFBPUlRTX0NSRUFURSwgY3Vyc29yLmdldEludCgxKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoUi5kcmF3YWJsZS5pY19yb290X210cCwgY3Vyc29yLmdldEludCgyKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoIkRldmljZSBTdG9yYWdlIiwgY3Vyc29yLmdldFN0cmluZygzKSk7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKGN1cnNvci5pc051bGwoNCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGN1cnNvci5nZXRJbnQoNSkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMDAsIGN1cnNvci5nZXRJbnQoNikpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDQwMDAsIGN1cnNvci5nZXRJbnQoNykpOwotCi0gICAgICAgICAgICBjdXJzb3IubW92ZVRvTmV4dCgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIGN1cnNvci5nZXRJbnQoMCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKFJvb3QuRkxBR19TVVBQT1JUU19JU19DSElMRCB8IFJvb3QuRkxBR19TVVBQT1JUU19DUkVBVEUsIGN1cnNvci5nZXRJbnQoMSkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKFIuZHJhd2FibGUuaWNfcm9vdF9tdHAsIGN1cnNvci5nZXRJbnQoMikpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJEZXZpY2UgL0AjJSY8PlN0b3JhZ2UiLCBjdXJzb3IuZ2V0U3RyaW5nKDMpKTsKLSAgICAgICAgICAgIGFzc2VydFRydWUoY3Vyc29yLmlzTnVsbCg0KSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMywgY3Vyc29yLmdldEludCg1KSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMzAwMCwgY3Vyc29yLmdldEludCg2KSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoNjAwMCwgY3Vyc29yLmdldEludCg3KSk7Ci0KLSAgICAgICAgICAgIGN1cnNvci5jbG9zZSgpOwotICAgICAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSBNdHBPYmplY3RJbmZvIGNyZWF0ZURvY3VtZW50KGludCBvYmplY3RIYW5kbGUsIFN0cmluZyBuYW1lLCBpbnQgZm9ybWF0LCBpbnQgc2l6ZSkgewpAQCAtMjQ1LDEzICsyNjIsOSBAQAogICAgICAgICAgICAgICAgIE10cERhdGFiYXNlQ29uc3RhbnRzLkNPTFVNTl9TVE9SQUdFX0lELAogICAgICAgICAgICAgICAgIERvY3VtZW50c0NvbnRyYWN0LkRvY3VtZW50LkNPTFVNTl9ESVNQTEFZX05BTUUKICAgICAgICAgfTsKLSAgICAgICAgZmluYWwgU3RyaW5nW10gcm9vdENvbHVtbnMgPSBuZXcgU3RyaW5nW10gewotICAgICAgICAgICAgICAgIFJvb3QuQ09MVU1OX1JPT1RfSUQsCi0gICAgICAgICAgICAgICAgUm9vdC5DT0xVTU5fQVZBSUxBQkxFX0JZVEVTCi0gICAgICAgIH07CiAKICAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0YXJ0QWRkaW5nRG9jdW1lbnRzKCJkZXZpY2VEb2NJZCIpOwotICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkucHV0Um9vdERvY3VtZW50cygiZGV2aWNlRG9jSWQiLCByZXNvdXJjZXMsIG5ldyBNdHBSb290W10geworICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkucHV0U3RvcmFnZURvY3VtZW50cygiZGV2aWNlRG9jSWQiLCByZXNvdXJjZXMsIG5ldyBNdHBSb290W10gewogICAgICAgICAgICAgICAgIG5ldyBNdHBSb290KDAsIDEwMCwgIkRldmljZSIsICJTdG9yYWdlIEEiLCAxMDAwLCAwLCAiIiksCiAgICAgICAgICAgICAgICAgbmV3IE10cFJvb3QoMCwgMTAxLCAiRGV2aWNlIiwgIlN0b3JhZ2UgQiIsIDEwMDEsIDAsICIiKQogICAgICAgICB9KTsKQEAgLTI3MCwxOCArMjgzLDYgQEAKICAgICAgICAgICAgIGN1cnNvci5jbG9zZSgpOwogICAgICAgICB9CiAKLSAgICAgICAgewotICAgICAgICAgICAgZmluYWwgQ3Vyc29yIGN1cnNvciA9IG1EYXRhYmFzZS5xdWVyeVJvb3RzKHJvb3RDb2x1bW5zKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCBjdXJzb3IuZ2V0Q291bnQoKSk7Ci0gICAgICAgICAgICBjdXJzb3IubW92ZVRvTmV4dCgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGdldEludChjdXJzb3IsIFJvb3QuQ09MVU1OX1JPT1RfSUQpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygxMDAwLCBnZXRJbnQoY3Vyc29yLCBSb290LkNPTFVNTl9BVkFJTEFCTEVfQllURVMpKTsKLSAgICAgICAgICAgIGN1cnNvci5tb3ZlVG9OZXh0KCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgZ2V0SW50KGN1cnNvciwgUm9vdC5DT0xVTU5fUk9PVF9JRCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEwMDEsIGdldEludChjdXJzb3IsIFJvb3QuQ09MVU1OX0FWQUlMQUJMRV9CWVRFUykpOwotICAgICAgICAgICAgY3Vyc29yLmNsb3NlKCk7Ci0gICAgICAgIH0KLQogICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuY2xlYXJNYXBwaW5nKCk7CiAKICAgICAgICAgewpAQCAtMjk4LDIwICsyOTksOCBAQAogICAgICAgICAgICAgY3Vyc29yLmNsb3NlKCk7CiAgICAgICAgIH0KIAotICAgICAgICB7Ci0gICAgICAgICAgICBmaW5hbCBDdXJzb3IgY3Vyc29yID0gbURhdGFiYXNlLnF1ZXJ5Um9vdHMocm9vdENvbHVtbnMpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGN1cnNvci5nZXRDb3VudCgpKTsKLSAgICAgICAgICAgIGN1cnNvci5tb3ZlVG9OZXh0KCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZ2V0SW50KGN1cnNvciwgUm9vdC5DT0xVTU5fUk9PVF9JRCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEwMDAsIGdldEludChjdXJzb3IsIFJvb3QuQ09MVU1OX0FWQUlMQUJMRV9CWVRFUykpOwotICAgICAgICAgICAgY3Vyc29yLm1vdmVUb05leHQoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCBnZXRJbnQoY3Vyc29yLCBSb290LkNPTFVNTl9ST09UX0lEKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMTAwMSwgZ2V0SW50KGN1cnNvciwgUm9vdC5DT0xVTU5fQVZBSUxBQkxFX0JZVEVTKSk7Ci0gICAgICAgICAgICBjdXJzb3IuY2xvc2UoKTsKLSAgICAgICAgfQotCiAgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdGFydEFkZGluZ0RvY3VtZW50cygiZGV2aWNlRG9jSWQiKTsKLSAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnB1dFJvb3REb2N1bWVudHMoImRldmljZURvY0lkIiwgcmVzb3VyY2VzLCBuZXcgTXRwUm9vdFtdIHsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnB1dFN0b3JhZ2VEb2N1bWVudHMoImRldmljZURvY0lkIiwgcmVzb3VyY2VzLCBuZXcgTXRwUm9vdFtdIHsKICAgICAgICAgICAgICAgICBuZXcgTXRwUm9vdCgwLCAyMDAsICJEZXZpY2UiLCAiU3RvcmFnZSBBIiwgMjAwMCwgMCwgIiIpLAogICAgICAgICAgICAgICAgIG5ldyBNdHBSb290KDAsIDIwMiwgIkRldmljZSIsICJTdG9yYWdlIEMiLCAyMDAyLCAwLCAiIikKICAgICAgICAgfSk7CkBAIC0zMzQsMjEgKzMyMyw2IEBACiAgICAgICAgICAgICBjdXJzb3IuY2xvc2UoKTsKICAgICAgICAgfQogCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZpbmFsIEN1cnNvciBjdXJzb3IgPSBtRGF0YWJhc2UucXVlcnlSb290cyhyb290Q29sdW1ucyk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMywgY3Vyc29yLmdldENvdW50KCkpOwotICAgICAgICAgICAgY3Vyc29yLm1vdmVUb05leHQoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCBnZXRJbnQoY3Vyc29yLCBSb290LkNPTFVNTl9ST09UX0lEKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMTAwMCwgZ2V0SW50KGN1cnNvciwgUm9vdC5DT0xVTU5fQVZBSUxBQkxFX0JZVEVTKSk7Ci0gICAgICAgICAgICBjdXJzb3IubW92ZVRvTmV4dCgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGdldEludChjdXJzb3IsIFJvb3QuQ09MVU1OX1JPT1RfSUQpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygxMDAxLCBnZXRJbnQoY3Vyc29yLCBSb290LkNPTFVNTl9BVkFJTEFCTEVfQllURVMpKTsKLSAgICAgICAgICAgIGN1cnNvci5tb3ZlVG9OZXh0KCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoNCwgZ2V0SW50KGN1cnNvciwgUm9vdC5DT0xVTU5fUk9PVF9JRCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMDIsIGdldEludChjdXJzb3IsIFJvb3QuQ09MVU1OX0FWQUlMQUJMRV9CWVRFUykpOwotICAgICAgICAgICAgY3Vyc29yLmNsb3NlKCk7Ci0gICAgICAgIH0KLQogICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RvcEFkZGluZ0RvY3VtZW50cygiZGV2aWNlRG9jSWQiKTsKIAogICAgICAgICB7CkBAIC0zNjQsMTggKzMzOCw2IEBACiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIkRldmljZSBTdG9yYWdlIEMiLCBnZXRTdHJpbmcoY3Vyc29yLCBDT0xVTU5fRElTUExBWV9OQU1FKSk7CiAgICAgICAgICAgICBjdXJzb3IuY2xvc2UoKTsKICAgICAgICAgfQotCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZpbmFsIEN1cnNvciBjdXJzb3IgPSBtRGF0YWJhc2UucXVlcnlSb290cyhyb290Q29sdW1ucyk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY3Vyc29yLmdldENvdW50KCkpOwotICAgICAgICAgICAgY3Vyc29yLm1vdmVUb05leHQoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCBnZXRJbnQoY3Vyc29yLCBSb290LkNPTFVNTl9ST09UX0lEKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjAwMCwgZ2V0SW50KGN1cnNvciwgUm9vdC5DT0xVTU5fQVZBSUxBQkxFX0JZVEVTKSk7Ci0gICAgICAgICAgICBjdXJzb3IubW92ZVRvTmV4dCgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDQsIGdldEludChjdXJzb3IsIFJvb3QuQ09MVU1OX1JPT1RfSUQpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygyMDAyLCBnZXRJbnQoY3Vyc29yLCBSb290LkNPTFVNTl9BVkFJTEFCTEVfQllURVMpKTsKLSAgICAgICAgICAgIGN1cnNvci5jbG9zZSgpOwotICAgICAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgdGVzdFJlc3RvcmVJZEZvckNoaWxkRG9jdW1lbnRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CkBAIC00NjEsMjYgKzQyMywzMyBAQAogICAgICAgICAgICAgICAgIFJvb3QuQ09MVU1OX1JPT1RfSUQsCiAgICAgICAgICAgICAgICAgUm9vdC5DT0xVTU5fQVZBSUxBQkxFX0JZVEVTCiAgICAgICAgIH07Ci0gICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdGFydEFkZGluZ0RvY3VtZW50cygiZGV2aWNlRG9jSWRBIik7Ci0gICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdGFydEFkZGluZ0RvY3VtZW50cygiZGV2aWNlRG9jSWRCIik7Ci0gICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5wdXRSb290RG9jdW1lbnRzKCJkZXZpY2VEb2NJZEEiLCByZXNvdXJjZXMsIG5ldyBNdHBSb290W10gewotICAgICAgICAgICAgICAgIG5ldyBNdHBSb290KDAsIDEwMCwgIkRldmljZSIsICJTdG9yYWdlIiwgMCwgMCwgIiIpCisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdGFydEFkZGluZ0RvY3VtZW50cyhudWxsKTsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnB1dERldmljZURvY3VtZW50KAorICAgICAgICAgICAgICAgIG5ldyBNdHBEZXZpY2VSZWNvcmQoMCwgIkRldmljZSBBIiwgdHJ1ZSwgbmV3IE10cFJvb3RbMF0pKTsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnB1dERldmljZURvY3VtZW50KAorICAgICAgICAgICAgICAgIG5ldyBNdHBEZXZpY2VSZWNvcmQoMSwgIkRldmljZSBCIiwgdHJ1ZSwgbmV3IE10cFJvb3RbMF0pKTsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0b3BBZGRpbmdEb2N1bWVudHMobnVsbCk7CisKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0YXJ0QWRkaW5nRG9jdW1lbnRzKCIxIik7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdGFydEFkZGluZ0RvY3VtZW50cygiMiIpOworICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkucHV0U3RvcmFnZURvY3VtZW50cygiMSIsIHJlc291cmNlcywgbmV3IE10cFJvb3RbXSB7CisgICAgICAgICAgICAgICAgbmV3IE10cFJvb3QoMCwgMTAwLCAiRGV2aWNlIEEiLCAiU3RvcmFnZSIsIDAsIDAsICIiKQogICAgICAgICB9KTsKLSAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnB1dFJvb3REb2N1bWVudHMoImRldmljZURvY0lkQiIsIHJlc291cmNlcywgbmV3IE10cFJvb3RbXSB7Ci0gICAgICAgICAgICAgICAgbmV3IE10cFJvb3QoMSwgMTAwLCAiRGV2aWNlIiwgIlN0b3JhZ2UiLCAwLCAwLCAiIikKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnB1dFN0b3JhZ2VEb2N1bWVudHMoIjIiLCByZXNvdXJjZXMsIG5ldyBNdHBSb290W10geworICAgICAgICAgICAgICAgIG5ldyBNdHBSb290KDEsIDEwMCwgIkRldmljZSBCIiwgIlN0b3JhZ2UiLCAwLCAwLCAiIikKICAgICAgICAgfSk7CiAKICAgICAgICAgewogICAgICAgICAgICAgZmluYWwgQ3Vyc29yIGN1cnNvciA9IG1EYXRhYmFzZS5xdWVyeVJvb3REb2N1bWVudHMoY29sdW1ucyk7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY3Vyc29yLmdldENvdW50KCkpOwogICAgICAgICAgICAgY3Vyc29yLm1vdmVUb05leHQoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCBnZXRJbnQoY3Vyc29yLCBDT0xVTU5fRE9DVU1FTlRfSUQpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygzLCBnZXRJbnQoY3Vyc29yLCBDT0xVTU5fRE9DVU1FTlRfSUQpKTsKICAgICAgICAgICAgIGFzc2VydEVxdWFscygxMDAsIGdldEludChjdXJzb3IsIENPTFVNTl9TVE9SQUdFX0lEKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoIkRldmljZSBTdG9yYWdlIiwgZ2V0U3RyaW5nKGN1cnNvciwgQ09MVU1OX0RJU1BMQVlfTkFNRSkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJEZXZpY2UgQSBTdG9yYWdlIiwgZ2V0U3RyaW5nKGN1cnNvciwgQ09MVU1OX0RJU1BMQVlfTkFNRSkpOwogICAgICAgICAgICAgY3Vyc29yLm1vdmVUb05leHQoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCBnZXRJbnQoY3Vyc29yLCBDT0xVTU5fRE9DVU1FTlRfSUQpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyg0LCBnZXRJbnQoY3Vyc29yLCBDT0xVTU5fRE9DVU1FTlRfSUQpKTsKICAgICAgICAgICAgIGFzc2VydEVxdWFscygxMDAsIGdldEludChjdXJzb3IsIENPTFVNTl9TVE9SQUdFX0lEKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoIkRldmljZSBTdG9yYWdlIiwgZ2V0U3RyaW5nKGN1cnNvciwgQ09MVU1OX0RJU1BMQVlfTkFNRSkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJEZXZpY2UgQiBTdG9yYWdlIiwgZ2V0U3RyaW5nKGN1cnNvciwgQ09MVU1OX0RJU1BMQVlfTkFNRSkpOwogICAgICAgICAgICAgY3Vyc29yLmNsb3NlKCk7CiAgICAgICAgIH0KIApAQCAtNDg4LDM2ICs0NTcsMzYgQEAKICAgICAgICAgICAgIGZpbmFsIEN1cnNvciBjdXJzb3IgPSBtRGF0YWJhc2UucXVlcnlSb290cyhyb290Q29sdW1ucyk7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY3Vyc29yLmdldENvdW50KCkpOwogICAgICAgICAgICAgY3Vyc29yLm1vdmVUb05leHQoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCBnZXRJbnQoY3Vyc29yLCBSb290LkNPTFVNTl9ST09UX0lEKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMywgZ2V0SW50KGN1cnNvciwgUm9vdC5DT0xVTU5fUk9PVF9JRCkpOwogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIGdldEludChjdXJzb3IsIFJvb3QuQ09MVU1OX0FWQUlMQUJMRV9CWVRFUykpOwogICAgICAgICAgICAgY3Vyc29yLm1vdmVUb05leHQoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCBnZXRJbnQoY3Vyc29yLCBSb290LkNPTFVNTl9ST09UX0lEKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoNCwgZ2V0SW50KGN1cnNvciwgUm9vdC5DT0xVTU5fUk9PVF9JRCkpOwogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIGdldEludChjdXJzb3IsIFJvb3QuQ09MVU1OX0FWQUlMQUJMRV9CWVRFUykpOwogICAgICAgICAgICAgY3Vyc29yLmNsb3NlKCk7CiAgICAgICAgIH0KIAogICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuY2xlYXJNYXBwaW5nKCk7CiAKLSAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0YXJ0QWRkaW5nRG9jdW1lbnRzKCJkZXZpY2VEb2NJZEEiKTsKLSAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0YXJ0QWRkaW5nRG9jdW1lbnRzKCJkZXZpY2VEb2NJZEIiKTsKLSAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnB1dFJvb3REb2N1bWVudHMoImRldmljZURvY0lkQSIsIHJlc291cmNlcywgbmV3IE10cFJvb3RbXSB7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdGFydEFkZGluZ0RvY3VtZW50cygiMSIpOworICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RhcnRBZGRpbmdEb2N1bWVudHMoIjIiKTsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnB1dFN0b3JhZ2VEb2N1bWVudHMoIjEiLCByZXNvdXJjZXMsIG5ldyBNdHBSb290W10gewogICAgICAgICAgICAgICAgIG5ldyBNdHBSb290KDAsIDIwMCwgIkRldmljZSIsICJTdG9yYWdlIiwgMjAwMCwgMCwgIiIpCiAgICAgICAgIH0pOwotICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkucHV0Um9vdERvY3VtZW50cygiZGV2aWNlRG9jSWRCIiwgcmVzb3VyY2VzLCBuZXcgTXRwUm9vdFtdIHsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnB1dFN0b3JhZ2VEb2N1bWVudHMoIjIiLCByZXNvdXJjZXMsIG5ldyBNdHBSb290W10gewogICAgICAgICAgICAgICAgIG5ldyBNdHBSb290KDEsIDMwMCwgIkRldmljZSIsICJTdG9yYWdlIiwgMzAwMCwgMCwgIiIpCiAgICAgICAgIH0pOwotICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RvcEFkZGluZ0RvY3VtZW50cygiZGV2aWNlRG9jSWRBIik7Ci0gICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdG9wQWRkaW5nRG9jdW1lbnRzKCJkZXZpY2VEb2NJZEIiKTsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0b3BBZGRpbmdEb2N1bWVudHMoIjEiKTsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0b3BBZGRpbmdEb2N1bWVudHMoIjIiKTsKIAogICAgICAgICB7CiAgICAgICAgICAgICBmaW5hbCBDdXJzb3IgY3Vyc29yID0gbURhdGFiYXNlLnF1ZXJ5Um9vdERvY3VtZW50cyhjb2x1bW5zKTsKICAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCBjdXJzb3IuZ2V0Q291bnQoKSk7CiAgICAgICAgICAgICBjdXJzb3IubW92ZVRvTmV4dCgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGdldEludChjdXJzb3IsIENPTFVNTl9ET0NVTUVOVF9JRCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDUsIGdldEludChjdXJzb3IsIENPTFVNTl9ET0NVTUVOVF9JRCkpOwogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgZ2V0SW50KGN1cnNvciwgQ09MVU1OX1NUT1JBR0VfSUQpKTsKICAgICAgICAgICAgIGFzc2VydEVxdWFscygiRGV2aWNlIFN0b3JhZ2UiLCBnZXRTdHJpbmcoY3Vyc29yLCBDT0xVTU5fRElTUExBWV9OQU1FKSk7CiAgICAgICAgICAgICBjdXJzb3IubW92ZVRvTmV4dCgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGdldEludChjdXJzb3IsIENPTFVNTl9ET0NVTUVOVF9JRCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDYsIGdldEludChjdXJzb3IsIENPTFVNTl9ET0NVTUVOVF9JRCkpOwogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDMwMCwgZ2V0SW50KGN1cnNvciwgQ09MVU1OX1NUT1JBR0VfSUQpKTsKICAgICAgICAgICAgIGFzc2VydEVxdWFscygiRGV2aWNlIFN0b3JhZ2UiLCBnZXRTdHJpbmcoY3Vyc29yLCBDT0xVTU5fRElTUExBWV9OQU1FKSk7CiAgICAgICAgICAgICBjdXJzb3IuY2xvc2UoKTsKQEAgLTUyNywxMCArNDk2LDEwIEBACiAgICAgICAgICAgICBmaW5hbCBDdXJzb3IgY3Vyc29yID0gbURhdGFiYXNlLnF1ZXJ5Um9vdHMocm9vdENvbHVtbnMpOwogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGN1cnNvci5nZXRDb3VudCgpKTsKICAgICAgICAgICAgIGN1cnNvci5tb3ZlVG9OZXh0KCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZ2V0SW50KGN1cnNvciwgUm9vdC5DT0xVTU5fUk9PVF9JRCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDUsIGdldEludChjdXJzb3IsIFJvb3QuQ09MVU1OX1JPT1RfSUQpKTsKICAgICAgICAgICAgIGFzc2VydEVxdWFscygyMDAwLCBnZXRJbnQoY3Vyc29yLCBSb290LkNPTFVNTl9BVkFJTEFCTEVfQllURVMpKTsKICAgICAgICAgICAgIGN1cnNvci5tb3ZlVG9OZXh0KCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgZ2V0SW50KGN1cnNvciwgUm9vdC5DT0xVTU5fUk9PVF9JRCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDYsIGdldEludChjdXJzb3IsIFJvb3QuQ09MVU1OX1JPT1RfSUQpKTsKICAgICAgICAgICAgIGFzc2VydEVxdWFscygzMDAwLCBnZXRJbnQoY3Vyc29yLCBSb290LkNPTFVNTl9BVkFJTEFCTEVfQllURVMpKTsKICAgICAgICAgICAgIGN1cnNvci5jbG9zZSgpOwogICAgICAgICB9CkBAIC01OTEsMjkgKzU2MCwzNCBAQAogICAgICAgICAgICAgICAgIFJvb3QuQ09MVU1OX0FWQUlMQUJMRV9CWVRFUwogICAgICAgICB9OwogCi0gICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdGFydEFkZGluZ0RvY3VtZW50cygiZGV2aWNlRG9jSWQiKTsKLSAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnB1dFJvb3REb2N1bWVudHMoImRldmljZURvY0lkIiwgcmVzb3VyY2VzLCBuZXcgTXRwUm9vdFtdIHsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0YXJ0QWRkaW5nRG9jdW1lbnRzKG51bGwpOworICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkucHV0RGV2aWNlRG9jdW1lbnQoCisgICAgICAgICAgICAgICAgbmV3IE10cERldmljZVJlY29yZCgwLCAiRGV2aWNlIiwgIGZhbHNlLCAgbmV3IE10cFJvb3RbMF0pKTsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0b3BBZGRpbmdEb2N1bWVudHMobnVsbCk7CisKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0YXJ0QWRkaW5nRG9jdW1lbnRzKCIxIik7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5wdXRTdG9yYWdlRG9jdW1lbnRzKCIxIiwgcmVzb3VyY2VzLCBuZXcgTXRwUm9vdFtdIHsKICAgICAgICAgICAgICAgICBuZXcgTXRwUm9vdCgwLCAxMDAsICJEZXZpY2UiLCAiU3RvcmFnZSIsIDAsIDAsICIiKSwKICAgICAgICAgfSk7CiAgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5jbGVhck1hcHBpbmcoKTsKIAotICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RhcnRBZGRpbmdEb2N1bWVudHMoImRldmljZURvY0lkIik7Ci0gICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5wdXRSb290RG9jdW1lbnRzKCJkZXZpY2VEb2NJZCIsIHJlc291cmNlcywgbmV3IE10cFJvb3RbXSB7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdGFydEFkZGluZ0RvY3VtZW50cygiMSIpOworICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkucHV0U3RvcmFnZURvY3VtZW50cygiMSIsIHJlc291cmNlcywgbmV3IE10cFJvb3RbXSB7CiAgICAgICAgICAgICAgICAgbmV3IE10cFJvb3QoMCwgMjAwLCAiRGV2aWNlIiwgIlN0b3JhZ2UiLCAyMDAwLCAwLCAiIiksCiAgICAgICAgIH0pOwogICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuY2xlYXJNYXBwaW5nKCk7CiAKLSAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0YXJ0QWRkaW5nRG9jdW1lbnRzKCJkZXZpY2VEb2NJZCIpOwotICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkucHV0Um9vdERvY3VtZW50cygiZGV2aWNlRG9jSWQiLCByZXNvdXJjZXMsIG5ldyBNdHBSb290W10geworICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RhcnRBZGRpbmdEb2N1bWVudHMoIjEiKTsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnB1dFN0b3JhZ2VEb2N1bWVudHMoIjEiLCByZXNvdXJjZXMsIG5ldyBNdHBSb290W10gewogICAgICAgICAgICAgICAgIG5ldyBNdHBSb290KDAsIDMwMCwgIkRldmljZSIsICJTdG9yYWdlIiwgMzAwMCwgMCwgIiIpLAogICAgICAgICB9KTsKLSAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0b3BBZGRpbmdEb2N1bWVudHMoImRldmljZURvY0lkIik7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdG9wQWRkaW5nRG9jdW1lbnRzKCIxIik7CiAKICAgICAgICAgewogICAgICAgICAgICAgZmluYWwgQ3Vyc29yIGN1cnNvciA9IG1EYXRhYmFzZS5xdWVyeVJvb3REb2N1bWVudHMoY29sdW1ucyk7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgY3Vyc29yLmdldENvdW50KCkpOwogICAgICAgICAgICAgY3Vyc29yLm1vdmVUb05leHQoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCBnZXRJbnQoY3Vyc29yLCBDT0xVTU5fRE9DVU1FTlRfSUQpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCBnZXRJbnQoY3Vyc29yLCBDT0xVTU5fRE9DVU1FTlRfSUQpKTsKICAgICAgICAgICAgIGFzc2VydEVxdWFscygzMDAsIGdldEludChjdXJzb3IsIENPTFVNTl9TVE9SQUdFX0lEKSk7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIkRldmljZSBTdG9yYWdlIiwgZ2V0U3RyaW5nKGN1cnNvciwgQ09MVU1OX0RJU1BMQVlfTkFNRSkpOwogICAgICAgICAgICAgY3Vyc29yLmNsb3NlKCk7CkBAIC02MjIsNyArNTk2LDcgQEAKICAgICAgICAgICAgIGZpbmFsIEN1cnNvciBjdXJzb3IgPSBtRGF0YWJhc2UucXVlcnlSb290cyhyb290Q29sdW1ucyk7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgY3Vyc29yLmdldENvdW50KCkpOwogICAgICAgICAgICAgY3Vyc29yLm1vdmVUb05leHQoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCBnZXRJbnQoY3Vyc29yLCBSb290LkNPTFVNTl9ST09UX0lEKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgZ2V0SW50KGN1cnNvciwgUm9vdC5DT0xVTU5fUk9PVF9JRCkpOwogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDMwMDAsIGdldEludChjdXJzb3IsIFJvb3QuQ09MVU1OX0FWQUlMQUJMRV9CWVRFUykpOwogICAgICAgICAgICAgY3Vyc29yLmNsb3NlKCk7CiAgICAgICAgIH0KQEAgLTYzNCwxOSArNjA4LDE1IEBACiAgICAgICAgICAgICAgICAgTXRwRGF0YWJhc2VDb25zdGFudHMuQ09MVU1OX1NUT1JBR0VfSUQsCiAgICAgICAgICAgICAgICAgRG9jdW1lbnRzQ29udHJhY3QuRG9jdW1lbnQuQ09MVU1OX0RJU1BMQVlfTkFNRQogICAgICAgICB9OwotICAgICAgICBmaW5hbCBTdHJpbmdbXSByb290Q29sdW1ucyA9IG5ldyBTdHJpbmdbXSB7Ci0gICAgICAgICAgICAgICAgUm9vdC5DT0xVTU5fUk9PVF9JRCwKLSAgICAgICAgICAgICAgICBSb290LkNPTFVNTl9BVkFJTEFCTEVfQllURVMKLSAgICAgICAgfTsKIAogICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RhcnRBZGRpbmdEb2N1bWVudHMoImRldmljZURvY0lkIik7Ci0gICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5wdXRSb290RG9jdW1lbnRzKCJkZXZpY2VEb2NJZCIsIHJlc291cmNlcywgbmV3IE10cFJvb3RbXSB7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5wdXRTdG9yYWdlRG9jdW1lbnRzKCJkZXZpY2VEb2NJZCIsIHJlc291cmNlcywgbmV3IE10cFJvb3RbXSB7CiAgICAgICAgICAgICAgICAgbmV3IE10cFJvb3QoMCwgMTAwLCAiRGV2aWNlIiwgIlN0b3JhZ2UiLCAwLCAwLCAiIiksCiAgICAgICAgIH0pOwogICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuY2xlYXJNYXBwaW5nKCk7CiAKICAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0YXJ0QWRkaW5nRG9jdW1lbnRzKCJkZXZpY2VEb2NJZCIpOwotICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkucHV0Um9vdERvY3VtZW50cygiZGV2aWNlRG9jSWQiLCByZXNvdXJjZXMsIG5ldyBNdHBSb290W10geworICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkucHV0U3RvcmFnZURvY3VtZW50cygiZGV2aWNlRG9jSWQiLCByZXNvdXJjZXMsIG5ldyBNdHBSb290W10gewogICAgICAgICAgICAgICAgIG5ldyBNdHBSb290KDAsIDIwMCwgIkRldmljZSIsICJTdG9yYWdlIiwgMjAwMCwgMCwgIiIpLAogICAgICAgICAgICAgICAgIG5ldyBNdHBSb290KDAsIDIwMSwgIkRldmljZSIsICJTdG9yYWdlIiwgMjAwMSwgMCwgIiIpLAogICAgICAgICB9KTsKQEAgLTY2NSwzMyArNjM1LDI3IEBACiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIkRldmljZSBTdG9yYWdlIiwgZ2V0U3RyaW5nKGN1cnNvciwgQ09MVU1OX0RJU1BMQVlfTkFNRSkpOwogICAgICAgICAgICAgY3Vyc29yLmNsb3NlKCk7CiAgICAgICAgIH0KLSAgICAgICAgewotICAgICAgICAgICAgZmluYWwgQ3Vyc29yIGN1cnNvciA9IG1EYXRhYmFzZS5xdWVyeVJvb3RzKHJvb3RDb2x1bW5zKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCBjdXJzb3IuZ2V0Q291bnQoKSk7Ci0gICAgICAgICAgICBjdXJzb3IubW92ZVRvTmV4dCgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGdldEludChjdXJzb3IsIFJvb3QuQ09MVU1OX1JPT1RfSUQpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygyMDAwLCBnZXRJbnQoY3Vyc29yLCBSb290LkNPTFVNTl9BVkFJTEFCTEVfQllURVMpKTsKLSAgICAgICAgICAgIGN1cnNvci5tb3ZlVG9OZXh0KCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMywgZ2V0SW50KGN1cnNvciwgUm9vdC5DT0xVTU5fUk9PVF9JRCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMDEsIGdldEludChjdXJzb3IsIFJvb3QuQ09MVU1OX0FWQUlMQUJMRV9CWVRFUykpOwotICAgICAgICAgICAgY3Vyc29yLmNsb3NlKCk7Ci0gICAgICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB0ZXN0UmVwbGFjZUV4aXN0aW5nUm9vdHMoKSB7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdGFydEFkZGluZ0RvY3VtZW50cyhudWxsKTsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnB1dERldmljZURvY3VtZW50KAorICAgICAgICAgICAgICAgIG5ldyBNdHBEZXZpY2VSZWNvcmQoMCwgIkRldmljZSIsIHRydWUsIG5ldyBNdHBSb290WzBdKSk7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdG9wQWRkaW5nRG9jdW1lbnRzKG51bGwpOworCiAgICAgICAgIC8vIFRoZSBjbGllbnQgY29kZSBzaG91bGQgYmUgYWJsZSB0byByZXBsYWNlIGV4aXN0aW5nIHJvd3Mgd2l0aCBuZXcgaW5mb3JtYXRpb24uCiAgICAgICAgIC8vIEFkZCBvbmUuCi0gICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdGFydEFkZGluZ0RvY3VtZW50cygiZGV2aWNlRG9jSWQiKTsKLSAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnB1dFJvb3REb2N1bWVudHMoImRldmljZURvY0lkIiwgcmVzb3VyY2VzLCBuZXcgTXRwUm9vdFtdIHsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0YXJ0QWRkaW5nRG9jdW1lbnRzKCIxIik7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5wdXRTdG9yYWdlRG9jdW1lbnRzKCIxIiwgcmVzb3VyY2VzLCBuZXcgTXRwUm9vdFtdIHsKICAgICAgICAgICAgICAgICBuZXcgTXRwUm9vdCgwLCAxMDAsICJEZXZpY2UiLCAiU3RvcmFnZSBBIiwgMCwgMCwgIiIpLAogICAgICAgICB9KTsKLSAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0b3BBZGRpbmdEb2N1bWVudHMoImRldmljZURvY0lkIik7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdG9wQWRkaW5nRG9jdW1lbnRzKCIxIik7CiAgICAgICAgIC8vIFJlcGxhY2UgaXQuCi0gICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdGFydEFkZGluZ0RvY3VtZW50cygiZGV2aWNlRG9jSWQiKTsKLSAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnB1dFJvb3REb2N1bWVudHMoImRldmljZURvY0lkIiwgcmVzb3VyY2VzLCBuZXcgTXRwUm9vdFtdIHsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0YXJ0QWRkaW5nRG9jdW1lbnRzKCIxIik7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5wdXRTdG9yYWdlRG9jdW1lbnRzKCIxIiwgcmVzb3VyY2VzLCBuZXcgTXRwUm9vdFtdIHsKICAgICAgICAgICAgICAgICBuZXcgTXRwUm9vdCgwLCAxMDAsICJEZXZpY2UiLCAiU3RvcmFnZSBCIiwgMTAwMCwgMTAwMCwgIiIpLAogICAgICAgICB9KTsKLSAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0b3BBZGRpbmdEb2N1bWVudHMoImRldmljZURvY0lkIik7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdG9wQWRkaW5nRG9jdW1lbnRzKCIxIik7CiAgICAgICAgIHsKICAgICAgICAgICAgIGZpbmFsIFN0cmluZ1tdIGNvbHVtbnMgPSBuZXcgU3RyaW5nW10gewogICAgICAgICAgICAgICAgICAgICBEb2N1bWVudHNDb250cmFjdC5Eb2N1bWVudC5DT0xVTU5fRE9DVU1FTlRfSUQsCkBAIC03MDEsNyArNjY1LDcgQEAKICAgICAgICAgICAgIGZpbmFsIEN1cnNvciBjdXJzb3IgPSBtRGF0YWJhc2UucXVlcnlSb290RG9jdW1lbnRzKGNvbHVtbnMpOwogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGN1cnNvci5nZXRDb3VudCgpKTsKICAgICAgICAgICAgIGN1cnNvci5tb3ZlVG9OZXh0KCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZ2V0SW50KGN1cnNvciwgQ09MVU1OX0RPQ1VNRU5UX0lEKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgZ2V0SW50KGN1cnNvciwgQ09MVU1OX0RPQ1VNRU5UX0lEKSk7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMTAwLCBnZXRJbnQoY3Vyc29yLCBDT0xVTU5fU1RPUkFHRV9JRCkpOwogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJEZXZpY2UgU3RvcmFnZSBCIiwgZ2V0U3RyaW5nKGN1cnNvciwgQ09MVU1OX0RJU1BMQVlfTkFNRSkpOwogICAgICAgICAgICAgY3Vyc29yLmNsb3NlKCk7CkBAIC03MDksMTIgKzY3MywxNCBAQAogICAgICAgICB7CiAgICAgICAgICAgICBmaW5hbCBTdHJpbmdbXSBjb2x1bW5zID0gbmV3IFN0cmluZ1tdIHsKICAgICAgICAgICAgICAgICAgICAgUm9vdC5DT0xVTU5fUk9PVF9JRCwKKyAgICAgICAgICAgICAgICAgICAgUm9vdC5DT0xVTU5fVElUTEUsCiAgICAgICAgICAgICAgICAgICAgIFJvb3QuQ09MVU1OX0FWQUlMQUJMRV9CWVRFUwogICAgICAgICAgICAgfTsKICAgICAgICAgICAgIGZpbmFsIEN1cnNvciBjdXJzb3IgPSBtRGF0YWJhc2UucXVlcnlSb290cyhjb2x1bW5zKTsKICAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCBjdXJzb3IuZ2V0Q291bnQoKSk7CiAgICAgICAgICAgICBjdXJzb3IubW92ZVRvTmV4dCgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGdldEludChjdXJzb3IsIFJvb3QuQ09MVU1OX1JPT1RfSUQpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCBnZXRJbnQoY3Vyc29yLCBSb290LkNPTFVNTl9ST09UX0lEKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIkRldmljZSBTdG9yYWdlIEIiLCBnZXRTdHJpbmcoY3Vyc29yLCBSb290LkNPTFVNTl9USVRMRSkpOwogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEwMDAsIGdldEludChjdXJzb3IsIFJvb3QuQ09MVU1OX0FWQUlMQUJMRV9CWVRFUykpOwogICAgICAgICAgICAgY3Vyc29yLmNsb3NlKCk7CiAgICAgICAgIH0KQEAgLTcyMyw4ICs2ODksMTMgQEAKICAgICBwdWJsaWMgdm9pZCB0ZXN0RmFpbFRvUmVwbGFjZUV4aXNpdGluZ1VubWFwcGVkUm9vdHMoKSB7CiAgICAgICAgIC8vIFRoZSBjbGllbnQgY29kZSBzaG91bGQgbm90IGJlIGFibGUgdG8gcmVwbGFjZSByb3dzIGJlZm9yZSByZXNvbHZpbmcgJ3VubWFwcGVkJyByb3dzLgogICAgICAgICAvLyBBZGQgb25lLgotICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RhcnRBZGRpbmdEb2N1bWVudHMoImRldmljZURvY0lkIik7Ci0gICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5wdXRSb290RG9jdW1lbnRzKCJkZXZpY2VEb2NJZCIsIHJlc291cmNlcywgbmV3IE10cFJvb3RbXSB7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdGFydEFkZGluZ0RvY3VtZW50cyhudWxsKTsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnB1dERldmljZURvY3VtZW50KAorICAgICAgICAgICAgICAgIG5ldyBNdHBEZXZpY2VSZWNvcmQoMCwgIkRldmljZSIsIHRydWUsIG5ldyBNdHBSb290WzBdKSk7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdG9wQWRkaW5nRG9jdW1lbnRzKG51bGwpOworCisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdGFydEFkZGluZ0RvY3VtZW50cygiMSIpOworICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkucHV0U3RvcmFnZURvY3VtZW50cygiMSIsIHJlc291cmNlcywgbmV3IE10cFJvb3RbXSB7CiAgICAgICAgICAgICAgICAgbmV3IE10cFJvb3QoMCwgMTAwLCAiRGV2aWNlIiwgIlN0b3JhZ2UgQSIsIDAsIDAsICIiKSwKICAgICAgICAgfSk7CiAgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5jbGVhck1hcHBpbmcoKTsKQEAgLTczMiwxOCArNzAzLDE5IEBACiAgICAgICAgIGFzc2VydEVxdWFscygxLCBvbGRDdXJzb3IuZ2V0Q291bnQoKSk7CiAKICAgICAgICAgLy8gQWRkIG9uZS4KLSAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0YXJ0QWRkaW5nRG9jdW1lbnRzKCJkZXZpY2VEb2NJZCIpOwotICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkucHV0Um9vdERvY3VtZW50cygiZGV2aWNlRG9jSWQiLCByZXNvdXJjZXMsIG5ldyBNdHBSb290W10geworICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RhcnRBZGRpbmdEb2N1bWVudHMoIjEiKTsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnB1dFN0b3JhZ2VEb2N1bWVudHMoIjEiLCByZXNvdXJjZXMsIG5ldyBNdHBSb290W10gewogICAgICAgICAgICAgICAgIG5ldyBNdHBSb290KDAsIDEwMSwgIkRldmljZSIsICJTdG9yYWdlIEIiLCAxMDAwLCAxMDAwLCAiIiksCiAgICAgICAgIH0pOwogICAgICAgICAvLyBBZGQgb25lIG1vcmUgYmVmb3JlIHJlc29sdmluZyB1bm1hcHBlZCBkb2N1bWVudHMuCi0gICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5wdXRSb290RG9jdW1lbnRzKCJkZXZpY2VEb2NJZCIsIHJlc291cmNlcywgbmV3IE10cFJvb3RbXSB7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5wdXRTdG9yYWdlRG9jdW1lbnRzKCIxIiwgcmVzb3VyY2VzLCBuZXcgTXRwUm9vdFtdIHsKICAgICAgICAgICAgICAgICBuZXcgTXRwUm9vdCgwLCAxMDIsICJEZXZpY2UiLCAiU3RvcmFnZSBCIiwgMTAwMCwgMTAwMCwgIiIpLAogICAgICAgICB9KTsKLSAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0b3BBZGRpbmdEb2N1bWVudHMoImRldmljZURvY0lkIik7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdG9wQWRkaW5nRG9jdW1lbnRzKCIxIik7CiAKICAgICAgICAgLy8gQmVjYXVzZSB0aGUgcm9vdHMgc2hhcmVzIHRoZSBzYW1lIG5hbWUsIHRoZSByb290cyBzaG91bGQgaGF2ZSBuZXcgSURzLgotICAgICAgICBmaW5hbCBDdXJzb3IgbmV3Q3Vyc29yID0gbURhdGFiYXNlLnF1ZXJ5Um9vdHMoc3RyaW5ncyhSb290LkNPTFVNTl9ST09UX0lEKSk7CisgICAgICAgIGZpbmFsIEN1cnNvciBuZXdDdXJzb3IgPSBtRGF0YWJhc2UucXVlcnlDaGlsZERvY3VtZW50cygKKyAgICAgICAgICAgICAgICBzdHJpbmdzKERvY3VtZW50LkNPTFVNTl9ET0NVTUVOVF9JRCksICIxIik7CiAgICAgICAgIGFzc2VydEVxdWFscygyLCBuZXdDdXJzb3IuZ2V0Q291bnQoKSk7CiAgICAgICAgIG9sZEN1cnNvci5tb3ZlVG9OZXh0KCk7CiAgICAgICAgIG5ld0N1cnNvci5tb3ZlVG9OZXh0KCk7CkBAIC03NTUsOSArNzI3LDkgQEAKICAgICAgICAgbmV3Q3Vyc29yLmNsb3NlKCk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgdGVzdFF1ZXJ5RG9jdW1lbnQoKSB7CisgICAgcHVibGljIHZvaWQgdGVzdFF1ZXJ5RG9jdW1lbnRzKCkgewogICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RhcnRBZGRpbmdEb2N1bWVudHMoImRldmljZURvY0lkIik7Ci0gICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5wdXRSb290RG9jdW1lbnRzKCJkZXZpY2VEb2NJZCIsIHJlc291cmNlcywgbmV3IE10cFJvb3RbXSB7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5wdXRTdG9yYWdlRG9jdW1lbnRzKCJkZXZpY2VEb2NJZCIsIHJlc291cmNlcywgbmV3IE10cFJvb3RbXSB7CiAgICAgICAgICAgICAgICAgbmV3IE10cFJvb3QoMCwgMTAwLCAiRGV2aWNlIiwgIlN0b3JhZ2UgQSIsIDAsIDAsICIiKSwKICAgICAgICAgfSk7CiAgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdG9wQWRkaW5nRG9jdW1lbnRzKCJkZXZpY2VEb2NJZCIpOwpAQCAtNzY1LDEzICs3MzcsNjEgQEAKICAgICAgICAgZmluYWwgQ3Vyc29yIGN1cnNvciA9IG1EYXRhYmFzZS5xdWVyeURvY3VtZW50KCIxIiwgc3RyaW5ncyhEb2N1bWVudC5DT0xVTU5fRElTUExBWV9OQU1FKSk7CiAgICAgICAgIGFzc2VydEVxdWFscygxLCBjdXJzb3IuZ2V0Q291bnQoKSk7CiAgICAgICAgIGN1cnNvci5tb3ZlVG9OZXh0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiRGV2aWNlIFN0b3JhZ2UgQSIsIGN1cnNvci5nZXRTdHJpbmcoMCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoIkRldmljZSBTdG9yYWdlIEEiLCBnZXRTdHJpbmcoY3Vyc29yLCBEb2N1bWVudC5DT0xVTU5fRElTUExBWV9OQU1FKSk7CiAgICAgICAgIGN1cnNvci5jbG9zZSgpOwogICAgIH0KIAorICAgIHB1YmxpYyB2b2lkIHRlc3RRdWVyeVJvb3RzKCkgeworICAgICAgICAvLyBBZGQgZGV2aWNlIGRvY3VtZW50LgorICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RhcnRBZGRpbmdEb2N1bWVudHMobnVsbCk7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5wdXREZXZpY2VEb2N1bWVudCgKKyAgICAgICAgICAgICAgICBuZXcgTXRwRGV2aWNlUmVjb3JkKDAsICJEZXZpY2UiLCBmYWxzZSwgbmV3IE10cFJvb3RbMF0pKTsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0b3BBZGRpbmdEb2N1bWVudHMobnVsbCk7CisKKyAgICAgICAgLy8gSXQgdGhlIGRldmljZSBkb2VzIG5vdCBoYXZlIHN0b3JhZ2VzLCBpdCBzaG93cyBhIGRldmljZSByb290LgorICAgICAgICB7CisgICAgICAgICAgICBmaW5hbCBDdXJzb3IgY3Vyc29yID0gbURhdGFiYXNlLnF1ZXJ5Um9vdHMoc3RyaW5ncyhSb290LkNPTFVNTl9USVRMRSkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGN1cnNvci5nZXRDb3VudCgpKTsKKyAgICAgICAgICAgIGN1cnNvci5tb3ZlVG9OZXh0KCk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIkRldmljZSIsIGN1cnNvci5nZXRTdHJpbmcoMCkpOworICAgICAgICAgICAgY3Vyc29yLmNsb3NlKCk7CisgICAgICAgIH0KKworICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RhcnRBZGRpbmdEb2N1bWVudHMoIjEiKTsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnB1dFN0b3JhZ2VEb2N1bWVudHMoIjEiLCByZXNvdXJjZXMsIG5ldyBNdHBSb290W10geworICAgICAgICAgICAgICAgIG5ldyBNdHBSb290KDAsIDEwMCwgIkRldmljZSIsICJTdG9yYWdlIEEiLCAwLCAwLCAiIikKKyAgICAgICAgfSk7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdG9wQWRkaW5nRG9jdW1lbnRzKCIxIik7CisKKyAgICAgICAgLy8gSXQgdGhlIGRldmljZSBoYXMgc2luZ2xlIHN0b3JhZ2UsIGl0IHNob3dzIGEgc3RvcmFnZSByb290LgorICAgICAgICB7CisgICAgICAgICAgICBmaW5hbCBDdXJzb3IgY3Vyc29yID0gbURhdGFiYXNlLnF1ZXJ5Um9vdHMoc3RyaW5ncyhSb290LkNPTFVNTl9USVRMRSkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGN1cnNvci5nZXRDb3VudCgpKTsKKyAgICAgICAgICAgIGN1cnNvci5tb3ZlVG9OZXh0KCk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIkRldmljZSBTdG9yYWdlIEEiLCBjdXJzb3IuZ2V0U3RyaW5nKDApKTsKKyAgICAgICAgICAgIGN1cnNvci5jbG9zZSgpOworICAgICAgICB9CisKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0YXJ0QWRkaW5nRG9jdW1lbnRzKCIxIik7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5wdXRTdG9yYWdlRG9jdW1lbnRzKCIxIiwgcmVzb3VyY2VzLCBuZXcgTXRwUm9vdFtdIHsKKyAgICAgICAgICAgICAgICBuZXcgTXRwUm9vdCgwLCAxMDAsICJEZXZpY2UiLCAiU3RvcmFnZSBBIiwgMCwgMCwgIiIpLAorICAgICAgICAgICAgICAgIG5ldyBNdHBSb290KDAsIDEwMSwgIkRldmljZSIsICJTdG9yYWdlIEIiLCAwLCAwLCAiIikKKyAgICAgICAgfSk7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdG9wQWRkaW5nRG9jdW1lbnRzKCIxIik7CisKKyAgICAgICAgLy8gSXQgdGhlIGRldmljZSBoYXMgbXVsdGlwbGUgc3RvcmFnZXMsIGl0IHNob3dzIGEgZGV2aWNlIHJvb3QuCisgICAgICAgIHsKKyAgICAgICAgICAgIGZpbmFsIEN1cnNvciBjdXJzb3IgPSBtRGF0YWJhc2UucXVlcnlSb290cyhzdHJpbmdzKFJvb3QuQ09MVU1OX1RJVExFKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgY3Vyc29yLmdldENvdW50KCkpOworICAgICAgICAgICAgY3Vyc29yLm1vdmVUb05leHQoKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygiRGV2aWNlIiwgY3Vyc29yLmdldFN0cmluZygwKSk7CisgICAgICAgICAgICBjdXJzb3IuY2xvc2UoKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHB1YmxpYyB2b2lkIHRlc3RHZXRQYXJlbnRJZCgpIHRocm93cyBGaWxlTm90Rm91bmRFeGNlcHRpb24gewogICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RhcnRBZGRpbmdEb2N1bWVudHMoImRldmljZURvY0lkIik7Ci0gICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5wdXRSb290RG9jdW1lbnRzKCJkZXZpY2VEb2NJZCIsIHJlc291cmNlcywgbmV3IE10cFJvb3RbXSB7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5wdXRTdG9yYWdlRG9jdW1lbnRzKCJkZXZpY2VEb2NJZCIsIHJlc291cmNlcywgbmV3IE10cFJvb3RbXSB7CiAgICAgICAgICAgICAgICAgbmV3IE10cFJvb3QoMCwgMTAwLCAiRGV2aWNlIiwgIlN0b3JhZ2UgQSIsIDAsIDAsICIiKSwKICAgICAgICAgfSk7CiAgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdG9wQWRkaW5nRG9jdW1lbnRzKCJkZXZpY2VEb2NJZCIpOwpAQCAtNzkwLDcgKzgxMCw3IEBACiAKICAgICBwdWJsaWMgdm9pZCB0ZXN0RGVsZXRlRG9jdW1lbnQoKSB7CiAgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdGFydEFkZGluZ0RvY3VtZW50cygiZGV2aWNlRG9jSWQiKTsKLSAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnB1dFJvb3REb2N1bWVudHMoImRldmljZURvY0lkIiwgcmVzb3VyY2VzLCBuZXcgTXRwUm9vdFtdIHsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnB1dFN0b3JhZ2VEb2N1bWVudHMoImRldmljZURvY0lkIiwgcmVzb3VyY2VzLCBuZXcgTXRwUm9vdFtdIHsKICAgICAgICAgICAgICAgICBuZXcgTXRwUm9vdCgwLCAxMDAsICJEZXZpY2UiLCAiU3RvcmFnZSBBIiwgMCwgMCwgIiIpLAogICAgICAgICB9KTsKICAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0b3BBZGRpbmdEb2N1bWVudHMoImRldmljZURvY0lkIik7CkBAIC04MzQsNyArODU0LDcgQEAKIAogICAgIHB1YmxpYyB2b2lkIHRlc3RQdXROZXdEb2N1bWVudCgpIHsKICAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0YXJ0QWRkaW5nRG9jdW1lbnRzKCJkZXZpY2VEb2NJZCIpOwotICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkucHV0Um9vdERvY3VtZW50cygiZGV2aWNlRG9jSWQiLCByZXNvdXJjZXMsIG5ldyBNdHBSb290W10geworICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkucHV0U3RvcmFnZURvY3VtZW50cygiZGV2aWNlRG9jSWQiLCByZXNvdXJjZXMsIG5ldyBNdHBSb290W10gewogICAgICAgICAgICAgICAgIG5ldyBNdHBSb290KDAsIDEwMCwgIkRldmljZSIsICJTdG9yYWdlIEEiLCAwLCAwLCAiIiksCiAgICAgICAgIH0pOwogICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RvcEFkZGluZ0RvY3VtZW50cygiZGV2aWNlRG9jSWQiKTsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL010cERvY3VtZW50c1Byb3ZpZGVyL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9tdHAvTXRwRG9jdW1lbnRzUHJvdmlkZXJUZXN0LmphdmEgYi9wYWNrYWdlcy9NdHBEb2N1bWVudHNQcm92aWRlci90ZXN0cy9zcmMvY29tL2FuZHJvaWQvbXRwL010cERvY3VtZW50c1Byb3ZpZGVyVGVzdC5qYXZhCmluZGV4IDg4NGIxZTIuLjcxYzQ4OTcgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL010cERvY3VtZW50c1Byb3ZpZGVyL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9tdHAvTXRwRG9jdW1lbnRzUHJvdmlkZXJUZXN0LmphdmEKKysrIGIvcGFja2FnZXMvTXRwRG9jdW1lbnRzUHJvdmlkZXIvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL210cC9NdHBEb2N1bWVudHNQcm92aWRlclRlc3QuamF2YQpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAgICAgICAgICAgICBtUHJvdmlkZXIub3BlbkRldmljZSgwKTsKICAgICAgICAgICAgIG1SZXNvbHZlci53YWl0Rm9yTm90aWZpY2F0aW9uKFJPT1RTX1VSSSwgMSk7CiAgICAgICAgICAgICBmaW5hbCBDdXJzb3IgY3Vyc29yID0gbVByb3ZpZGVyLnF1ZXJ5Um9vdHMobnVsbCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgY3Vyc29yLmdldENvdW50KCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGN1cnNvci5nZXRDb3VudCgpKTsKICAgICAgICAgICAgIGN1cnNvci5tb3ZlVG9OZXh0KCk7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIjMiLCBjdXJzb3IuZ2V0U3RyaW5nKDApKTsKICAgICAgICAgICAgIGFzc2VydEVxdWFscyhSb290LkZMQUdfU1VQUE9SVFNfSVNfQ0hJTEQgfCBSb290LkZMQUdfU1VQUE9SVFNfQ1JFQVRFLCBjdXJzb3IuZ2V0SW50KDEpKTsKQEAgLTE3Niw3ICsxNzYsNyBAQAogICAgIHB1YmxpYyB2b2lkIHRlc3RRdWVyeVJvb3RzX2Vycm9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIHNldHVwUHJvdmlkZXIoTXRwRGF0YWJhc2VDb25zdGFudHMuRkxBR19EQVRBQkFTRV9JTl9NRU1PUlkpOwogICAgICAgICBtTXRwTWFuYWdlci5hZGRWYWxpZERldmljZSgKLSAgICAgICAgICAgICAgICBuZXcgTXRwRGV2aWNlUmVjb3JkKDAsICJEZXZpY2UiLCBmYWxzZSAvKiB1bm9wZW5lZCAqLywgbmV3IE10cFJvb3RbMF0pKTsKKyAgICAgICAgICAgICAgICBuZXcgTXRwRGV2aWNlUmVjb3JkKDAsICJEZXZpY2UgQSIsIGZhbHNlIC8qIHVub3BlbmVkICovLCBuZXcgTXRwUm9vdFswXSkpOwogICAgICAgICBtTXRwTWFuYWdlci5hZGRWYWxpZERldmljZShuZXcgTXRwRGV2aWNlUmVjb3JkKAogICAgICAgICAgICAgICAgIDEsCiAgICAgICAgICAgICAgICAgIkRldmljZSIsCkBAIC0xOTcsNyArMTk3LDE2IEBACiAgICAgICAgICAgICBtUmVzb2x2ZXIud2FpdEZvck5vdGlmaWNhdGlvbihST09UU19VUkksIDEpOwogCiAgICAgICAgICAgICBmaW5hbCBDdXJzb3IgY3Vyc29yID0gbVByb3ZpZGVyLnF1ZXJ5Um9vdHMobnVsbCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgY3Vyc29yLmdldENvdW50KCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGN1cnNvci5nZXRDb3VudCgpKTsKKworICAgICAgICAgICAgY3Vyc29yLm1vdmVUb05leHQoKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygiMSIsIGN1cnNvci5nZXRTdHJpbmcoMCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKFJvb3QuRkxBR19TVVBQT1JUU19JU19DSElMRCB8IFJvb3QuRkxBR19TVVBQT1JUU19DUkVBVEUsIGN1cnNvci5nZXRJbnQoMSkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKFIuZHJhd2FibGUuaWNfcm9vdF9tdHAsIGN1cnNvci5nZXRJbnQoMikpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJEZXZpY2UgQSIsIGN1cnNvci5nZXRTdHJpbmcoMykpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCIxIiwgY3Vyc29yLmdldFN0cmluZyg0KSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMCwgY3Vyc29yLmdldEludCg1KSk7CisKICAgICAgICAgICAgIGN1cnNvci5tb3ZlVG9OZXh0KCk7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIjMiLCBjdXJzb3IuZ2V0U3RyaW5nKDApKTsKICAgICAgICAgICAgIGFzc2VydEVxdWFscyhSb290LkZMQUdfU1VQUE9SVFNfSVNfQ0hJTEQgfCBSb290LkZMQUdfU1VQUE9SVFNfQ1JFQVRFLCBjdXJzb3IuZ2V0SW50KDEpKTsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL010cERvY3VtZW50c1Byb3ZpZGVyL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9tdHAvTXRwTWFuYWdlclRlc3QuamF2YSBiL3BhY2thZ2VzL010cERvY3VtZW50c1Byb3ZpZGVyL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9tdHAvTXRwTWFuYWdlclRlc3QuamF2YQppbmRleCBlZDYxN2U3Li41ZTk1ZTRmIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9NdHBEb2N1bWVudHNQcm92aWRlci90ZXN0cy9zcmMvY29tL2FuZHJvaWQvbXRwL010cE1hbmFnZXJUZXN0LmphdmEKKysrIGIvcGFja2FnZXMvTXRwRG9jdW1lbnRzUHJvdmlkZXIvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL210cC9NdHBNYW5hZ2VyVGVzdC5qYXZhCkBAIC02MSw4ICs2MSw5IEBACiAgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICAgICAgICAgICBwdWJsaWMgQm9vbGVhbiBjYWxsKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbU1hbmFnZXIucmVhZEV2ZW50KG1Vc2JEZXZpY2UuZ2V0RGV2aWNlSWQoKSwgc2lnbmFsKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbU1hbmFnZXIucmVhZEV2ZW50KG1Vc2JEZXZpY2UuZ2V0RGV2aWNlSWQoKSwgc2lnbmFsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChPcGVyYXRpb25DYW5jZWxlZEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9BbmRyb2lkTWFuaWZlc3QueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL0FuZHJvaWRNYW5pZmVzdC54bWwKaW5kZXggNWE2ZjFkMS4uYWY5ZDI1MSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL0FuZHJvaWRNYW5pZmVzdC54bWwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL0FuZHJvaWRNYW5pZmVzdC54bWwKQEAgLTE3LDkgKzE3LDcgQEAKICAqLwogLS0+CiA8bWFuaWZlc3QgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIHBhY2thZ2U9ImNvbS5hbmRyb2lkLnByaW50c3Bvb2xlciIKLSAgICBhbmRyb2lkOnZlcnNpb25OYW1lPSIxIgotICAgIGFuZHJvaWQ6dmVyc2lvbkNvZGU9IjEiPgorICAgIHBhY2thZ2U9ImNvbS5hbmRyb2lkLnByaW50c3Bvb2xlciI+CiAKICAgICA8IS0tIEFsbG93cyBhbiBhcHBsaWNhdGlvbiB0byBjYWxsIEFQSXMgdGhhdCBnaXZlIGl0IGFjY2VzcyB0byBhbGwgcHJpbnQgam9icwogICAgICAgICAgb24gdGhlIGRldmljZS4gVXN1YWxseSBhbiBhcHAgY2FuIGFjY2VzcyBvbmx5IHRoZSBwcmludCBqb2JzIGl0IGNyZWF0ZWQuIC0tPgpAQCAtNDAsNiArMzgsOCBAQAogICAgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJjb20uYW5kcm9pZC5wcmludHNwb29sZXIucGVybWlzc2lvbi5BQ0NFU1NfQUxMX1BSSU5UX0pPQlMiLz4KICAgICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLldBS0VfTE9DSyIvPgogICAgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uU1RBUlRfUFJJTlRfU0VSVklDRV9DT05GSUdfQUNUSVZJVFkiLz4KKyAgICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLkFDQ0VTU19DT0FSU0VfTE9DQVRJT04iLz4KKyAgICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLkFDQ0VTU19GSU5FX0xPQ0FUSU9OIi8+CiAKICAgICA8YXBwbGljYXRpb24KICAgICAgICAgYW5kcm9pZDphbGxvd0NsZWFyVXNlckRhdGE9InRydWUiCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL2RyYXdhYmxlL2ljX2luZm8ueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy9kcmF3YWJsZS9pY19pbmZvLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWNkMWM3Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy9kcmF3YWJsZS9pY19pbmZvLnhtbApAQCAtMCwwICsxLDI0IEBACis8IS0tCisgICAgQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzx2ZWN0b3IgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgICAgICBhbmRyb2lkOndpZHRoPSIyNGRwIgorICAgICAgICBhbmRyb2lkOmhlaWdodD0iMjRkcCIKKyAgICAgICAgYW5kcm9pZDp2aWV3cG9ydFdpZHRoPSIyNC4wIgorICAgICAgICBhbmRyb2lkOnZpZXdwb3J0SGVpZ2h0PSIyNC4wIj4KKyAgICA8cGF0aAorICAgICAgICBhbmRyb2lkOnBhdGhEYXRhPSJNMTIsMkM2LjQ4LDIgMiw2LjQ4IDIsMTJzNC40OCwxMCAxMCwxMCAxMCwtNC40OCAxMCwtMTBTMTcuNTIsMiAxMiwyek0xMywxN2gtMnYtNmgydjZ6TTEzLDloLTJMMTEsN2gydjJ6IgorICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iIzc1NzU3NSIvPgorPC92ZWN0b3I+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy9sYXlvdXQvcHJpbnRlcl9kcm9wZG93bl9pdGVtLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvbGF5b3V0L3ByaW50ZXJfZHJvcGRvd25faXRlbS54bWwKaW5kZXggNDM4MWE3YS4uZTBlZmJjNCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy9sYXlvdXQvcHJpbnRlcl9kcm9wZG93bl9pdGVtLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL2xheW91dC9wcmludGVyX2Ryb3Bkb3duX2l0ZW0ueG1sCkBAIC02Miw3ICs2Miw3IEBACiAgICAgICAgICAgICBhbmRyb2lkOmVsbGlwc2l6ZT0iZW5kIgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0SXNTZWxlY3RhYmxlPSJmYWxzZSIKICAgICAgICAgICAgIGFuZHJvaWQ6dmlzaWJpbGl0eT0iZ29uZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6dGV4dENvbG9yPSI/YW5kcm9pZDphdHRyL3RleHRDb2xvclByaW1hcnkiCisgICAgICAgICAgICBhbmRyb2lkOnRleHRDb2xvcj0iP2FuZHJvaWQ6YXR0ci90ZXh0Q29sb3JTZWNvbmRhcnkiCiAgICAgICAgICAgICBhbmRyb2lkOmR1cGxpY2F0ZVBhcmVudFN0YXRlPSJ0cnVlIj4KICAgICAgICAgPC9UZXh0Vmlldz4KIApkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy9sYXlvdXQvcHJpbnRlcl9saXN0X2l0ZW0ueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy9sYXlvdXQvcHJpbnRlcl9saXN0X2l0ZW0ueG1sCmluZGV4IDdiYzE0NGEuLjUwZjQ0YzIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvbGF5b3V0L3ByaW50ZXJfbGlzdF9pdGVtLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL2xheW91dC9wcmludGVyX2xpc3RfaXRlbS54bWwKQEAgLTM4LDYgKzM4LDcgQEAKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgorICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiCiAgICAgICAgIGFuZHJvaWQ6ZHVwbGljYXRlUGFyZW50U3RhdGU9InRydWUiPgogCiAgICAgICAgIDxUZXh0VmlldwpAQCAtNjIsMTAgKzYzLDIwIEBACiAgICAgICAgICAgICBhbmRyb2lkOmVsbGlwc2l6ZT0iZW5kIgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0SXNTZWxlY3RhYmxlPSJmYWxzZSIKICAgICAgICAgICAgIGFuZHJvaWQ6dmlzaWJpbGl0eT0iZ29uZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6dGV4dENvbG9yPSI/YW5kcm9pZDphdHRyL3RleHRDb2xvclByaW1hcnkiCisgICAgICAgICAgICBhbmRyb2lkOnRleHRDb2xvcj0iP2FuZHJvaWQ6YXR0ci90ZXh0Q29sb3JTZWNvbmRhcnkiCiAgICAgICAgICAgICBhbmRyb2lkOmR1cGxpY2F0ZVBhcmVudFN0YXRlPSJ0cnVlIj4KICAgICAgICAgPC9UZXh0Vmlldz4KIAogICAgIDwvTGluZWFyTGF5b3V0PgogCisgICAgPEltYWdlVmlldworICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL21vcmVfaW5mbyIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjI0ZGlwIgorICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjI0ZGlwIgorICAgICAgICBhbmRyb2lkOmxheW91dF9ncmF2aXR5PSJjZW50ZXJfdmVydGljYWwiCisgICAgICAgIGFuZHJvaWQ6Y29udGVudERlc2NyaXB0aW9uPSJAc3RyaW5nL3ByaW50ZXJfaW5mb19kZXNjIgorICAgICAgICBhbmRyb2lkOnNyYz0iQGRyYXdhYmxlL2ljX2luZm8iCisgICAgICAgIGFuZHJvaWQ6dmlzaWJpbGl0eT0iZ29uZSI+CisgICAgPC9JbWFnZVZpZXc+CisKIDwvTGluZWFyTGF5b3V0PgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtYWYvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1hZi9zdHJpbmdzLnhtbAppbmRleCBmMjYzYWY3Li4wZjM0ZTllIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1hZi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1hZi9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOCBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4gZHJ1a2tlcnMgZ2V2aW5kPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IkNPVU5UXzAiPiUxJHM8L3hsaWZmOmc+IGRydWtrZXIgZ2V2aW5kPC9pdGVtPgogICAgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfZXh0ZW5kZWRfZGVzY3JpcHRpb25fdGVtcGxhdGUiIG1zZ2lkPSIxMzY2Njk5MjI3NzAzMzgxODc0Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX1NFUlZJQ0VfTEFCRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiJNZWVyIGlubGlndGluZyBvb3IgaGllcmRpZSBkcnVra2VyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iS2llcyBkcnVrZGllbnMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IlNvZWsgdGFucyB2aXIgZHJ1a2tlcnMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiJHZWVuIGRydWtkaWVuc3RlIGlzIGdlYWt0aXZlZXIgbmllIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtYW0vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1hbS9zdHJpbmdzLnhtbAppbmRleCBhOTNlMGE5Li5hNmUxYWJmIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1hbS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1hbS9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOCBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+IOGKoOGJs+GImuGLjuGJvSDhibDhjIjhip3hibDhi4vhiI08L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiDhiqDhibPhiJrhi47hib0g4Ymw4YyI4Yqd4Ymw4YuL4YiNPC9pdGVtPgogICAgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfZXh0ZW5kZWRfZGVzY3JpcHRpb25fdGVtcGxhdGUiIG1zZ2lkPSIxMzY2Njk5MjI3NzAzMzgxODc0Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX1NFUlZJQ0VfTEFCRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlBSSU5URVJfREVTQ1JJUFRJT04iPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9pbmZvX2Rlc2MiIG1zZ2lkPSI3MTgxOTg4Nzg4OTkxNTgxNjU0Ij4i4Ymw4Yyo4Yib4YiqIOGLqOGLmuGIhSDhiqDhibPhiJog4YiY4Yio4YyDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4i4Yuo4YiF4Ym14YiY4Ym1IOGKoOGMiOGIjeGMjeGIjuGJtSDhi63hiJ3hiKjhjKEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IuGKoOGJs+GImuGLjuGJveGKlSDhiaDhiJjhjYjhiIjhjI0g4YiL4YutIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRfc2VydmljZXMiIG1zZ2lkPSI4NTYxMjQ3NzA2NDIzMzI3OTY2Ij4i4Yid4YqV4YidIOGLqOGIheGJteGImOGJtSDhiqDhjIjhiI3hjI3hiI7hibbhib0g4Yqg4YiN4YqQ4YmB4YidIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtYXIvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1hci9zdHJpbmdzLnhtbAppbmRleCBjOWE2YTM5NS4uMDI5MWI3ZCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtYXIvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtYXIvc3RyaW5ncy54bWwKQEAgLTYzLDYgKzYzLDggQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+2KrZhSDYp9mE2LnYq9mI2LEg2LnZhNmJIDx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiDZhdmGINin2YTYt9in2KjYudin2Ko8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj7YqtmFINin2YTYudir2YjYsSDYudmE2Ykg2LfYp9io2LnYqSDZiNin2K3Yr9ipICg8eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkczwveGxpZmY6Zz4pPC9pdGVtPgogICAgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfZXh0ZW5kZWRfZGVzY3JpcHRpb25fdGVtcGxhdGUiIG1zZ2lkPSIxMzY2Njk5MjI3NzAzMzgxODc0Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX1NFUlZJQ0VfTEFCRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlBSSU5URVJfREVTQ1JJUFRJT04iPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9pbmZvX2Rlc2MiIG1zZ2lkPSI3MTgxOTg4Nzg4OTkxNTgxNjU0Ij4i2YXYstmK2K8g2YXZhiDYp9mE2YXYudmE2YjZhdin2Kog2K3ZiNmEINmH2LDZhyDYp9mE2LfYp9io2LnYqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+Itin2K7YqtixINiu2K/ZhdipINi32KjYp9i52KkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+Itin2YTYqNit2Ksg2LnZhiDYt9in2KjYudin2KoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiLZhNmFINmK2KrZhSDYqtmF2YPZitmGINij2Yog2K7Yr9mF2KfYqiDYt9io2KfYudipIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtYXotckFaL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtYXotckFaL3N0cmluZ3MueG1sCmluZGV4IDVhZWI3YmIuLmUxNjI3OTMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWF6LXJBWi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1hei1yQVovc3RyaW5ncy54bWwKQEAgLTU5LDYgKzU5LDggQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+IHByaW50ZXIgdGFwxLFsZMSxPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IkNPVU5UXzAiPiUxJHM8L3hsaWZmOmc+IHByaW50ZXIgdGFwxLFsZMSxPC9pdGVtPgogICAgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfZXh0ZW5kZWRfZGVzY3JpcHRpb25fdGVtcGxhdGUiIG1zZ2lkPSIxMzY2Njk5MjI3NzAzMzgxODc0Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX1NFUlZJQ0VfTEFCRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlBSSU5URVJfREVTQ1JJUFRJT04iPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9pbmZvX2Rlc2MiIG1zZ2lkPSI3MTgxOTg4Nzg4OTkxNTgxNjU0Ij4iQnUgcHJpbnRlciBoYXFxxLFuZGEgZGFoYSDJmXRyYWZsxLEgbcmZbHVtYXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiLDh2FwIHhpZG3JmXRpbmkgc2XDp2luIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiJQcmludGVyIGF4dGFyxLFsxLFyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRfc2VydmljZXMiIG1zZ2lkPSI4NTYxMjQ3NzA2NDIzMzI3OTY2Ij4iSGXDpyBiaXIgw6dhcCB4aWRtyZl0aSBha3RpdiBlZGlsbcmZeWliIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtYitzcitMYXRuL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtYitzcitMYXRuL3N0cmluZ3MueG1sCmluZGV4IDc0ODQ3MTguLmQ2ZTQzOWMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWIrc3IrTGF0bi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1iK3NyK0xhdG4vc3RyaW5ncy54bWwKQEAgLTYwLDYgKzYwLDggQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJmZXciPlByb25hxJFlbmEgc3UgPHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+IMWhdGFtcGHEjWE8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPlByb25hxJFlbm8gamUgPHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+IMWhdGFtcGHEjWE8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4g4oCTIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+IkpvxaEgaW5mb3JtYWNpamEgbyBvdm9tIMWhdGFtcGHEjXUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiJJemFiZXJpdGUgdXNsdWd1IMWhdGFtcGFuamEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IlByZXRyYWdhIMWhdGFtcGHEjWEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiJOaWplZG5hIHVzbHVnYSDFoXRhbXBhbmphIG5pamUgb21vZ3XEh2VuYSI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWJnL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtYmcvc3RyaW5ncy54bWwKaW5kZXggOTNmZWVhNS4uYzIzOTM1NDMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWJnL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWJnL3N0cmluZ3MueG1sCkBAIC01OSw2ICs1OSw4IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPtCd0LDQvNC10YDQtdC90Lgg0YHQsCA8eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4g0L/RgNC40L3RgtC10YDQsDwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPtCd0LDQvNC10YDQtdC9INC1IDx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRzPC94bGlmZjpnPiDQv9GA0LjQvdGC0LXRgDwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiDigJMgPHhsaWZmOmcgaWQ9IlBSSU5URVJfREVTQ1JJUFRJT04iPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9pbmZvX2Rlc2MiIG1zZ2lkPSI3MTgxOTg4Nzg4OTkxNTgxNjU0Ij4i0J7RidC1INC40L3RhNC+0YDQvNCw0YbQuNGPINC30LAg0YLQvtC30Lgg0L/RgNC40L3RgtC10YAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiLQmNC30LHQuNGA0LDQvdC1INC90LAg0YPRgdC70YPQs9CwINC30LAg0L7RgtC/0LXRh9Cw0YLQstCw0L3QtSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4i0KLRitGA0YHQtdC90LUg0L3QsCDQv9GA0LjQvdGC0LXRgNC4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRfc2VydmljZXMiIG1zZ2lkPSI4NTYxMjQ3NzA2NDIzMzI3OTY2Ij4i0J3Rj9C80LAg0LDQutGC0LjQstC40YDQsNC90Lgg0YPRgdC70YPQs9C4INC30LAg0L7RgtC/0LXRh9Cw0YLQstCw0L3QtSI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWJuLXJCRC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWJuLXJCRC9zdHJpbmdzLnhtbAppbmRleCAwZWVkOWFhLi4xN2ExYTM1IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1ibi1yQkQvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtYm4tckJEL3N0cmluZ3MueG1sCkBAIC01OSw2ICs1OSw4IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz7gpp/gpr8g4Kau4KeB4Kam4KeN4Kaw4KaVIOCmluCngeCmgeCmnOCnhyDgpqrgpr7gppPgpq/gprzgpr4g4KaX4KeH4Kab4KeHPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz7gpp/gpr8g4Kau4KeB4Kam4KeN4Kaw4KaVIOCmluCngeCmgeCmnOCnhyDgpqrgpr7gppPgpq/gprzgpr4g4KaX4KeH4Kab4KeHPC9pdGVtPgogICAgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfZXh0ZW5kZWRfZGVzY3JpcHRpb25fdGVtcGxhdGUiIG1zZ2lkPSIxMzY2Njk5MjI3NzAzMzgxODc0Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX1NFUlZJQ0VfTEFCRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlBSSU5URVJfREVTQ1JJUFRJT04iPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9pbmZvX2Rlc2MiIG1zZ2lkPSI3MTgxOTg4Nzg4OTkxNTgxNjU0Ij4i4KaP4KaHIOCmruCngeCmpuCnjeCmsOCmleCmn+Cmv+CmsCDgpqzgpr/gprfgpq/gprzgp4cg4KaG4Kaw4KeLIOCmpOCmpeCnjeCmryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IuCmruCngeCmpuCnjeCmsOCmoyDgpqrgprDgpr/gprfgp4fgpqzgpr4g4Kaa4Kav4Ka84KaoIOCmleCmsOCngeCmqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4i4Kau4KeB4Kam4KeN4Kaw4KaV4KaX4KeB4Kay4Ka/IOCmheCmqOCngeCmuOCmqOCnjeCmp+CmvuCmqCDgppXgprDgpr4g4Ka54Kaa4KeN4Kab4KeHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRfc2VydmljZXMiIG1zZ2lkPSI4NTYxMjQ3NzA2NDIzMzI3OTY2Ij4i4Kau4KeB4Kam4KeN4Kaw4KajIOCmquCmsOCmv+Cmt+Cnh+CmrOCmviDgprjgppXgp43gprfgpq4g4Kao4KeH4KaHIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtY2Evc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1jYS9zdHJpbmdzLnhtbAppbmRleCAwM2QzMDYwLi4yNTUxMjA2IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1jYS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1jYS9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOCBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5TXCdoYW4gdHJvYmF0IDx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiBpbXByZXNzb3JlczwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPlNcJ2hhIHRyb2JhdCA8eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkczwveGxpZmY6Zz4gaW1wcmVzc29yYTwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+Ik3DqXMgaW5mb3JtYWNpw7Mgc29icmUgYXF1ZXN0YSBpbXByZXNzb3JhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iU2VsZWNjacOzIGRlbCBzZXJ2ZWkgZFwnaW1wcmVzc2nDsyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iQ2VyY2EgZFwnaW1wcmVzc29yZXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiJObyBoaSBoYSBjYXAgc2VydmVpIGRcJ2ltcHJlc3Npw7MgYWN0aXZhdCI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWNzL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtY3Mvc3RyaW5ncy54bWwKaW5kZXggNDE0YWJmOS4uMGJiNDhmOCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtY3Mvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtY3Mvc3RyaW5ncy54bWwKQEAgLTYxLDYgKzYxLDggQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+TmFsZXplbsOpIHRpc2vDoXJueTogPHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+PC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+TmFsZXplbsOpIHRpc2vDoXJueTogPHhsaWZmOmcgaWQ9IkNPVU5UXzAiPiUxJHM8L3hsaWZmOmc+PC9pdGVtPgogICAgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfZXh0ZW5kZWRfZGVzY3JpcHRpb25fdGVtcGxhdGUiIG1zZ2lkPSIxMzY2Njk5MjI3NzAzMzgxODc0Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX1NFUlZJQ0VfTEFCRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiJEYWzFocOtIGluZm9ybWFjZSBvwqB0w6l0byB0aXNrw6FybsSbIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iWnZvbHRlIHNsdcW+YnUgdGlza3UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IlZ5aGxlZMOhdsOhbsOtIHRpc2vDoXJlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50X3NlcnZpY2VzIiBtc2dpZD0iODU2MTI0NzcwNjQyMzMyNzk2NiI+Ik5lanNvdSBha3Rpdm92w6FueSDFvsOhZG7DqSB0aXNrb3bDqSBzbHXFvmJ5Ijwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZGEvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1kYS9zdHJpbmdzLnhtbAppbmRleCA4OTNjOTkxLi5hOWQwNDJiIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1kYS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1kYS9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOCBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+RGVyIGJsZXYgZnVuZGV0IDx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiBwcmludGVyZTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+RGVyIGJsZXYgZnVuZGV0IDx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiBwcmludGVyZTwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiDigJMgPHhsaWZmOmcgaWQ9IlBSSU5URVJfREVTQ1JJUFRJT04iPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9pbmZvX2Rlc2MiIG1zZ2lkPSI3MTgxOTg4Nzg4OTkxNTgxNjU0Ij4iRmxlcmUgb3BseXNuaW5nZXIgb20gZGVubmUgcHJpbnRlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IlbDpmxnIHVkc2tyaWZ0c3RqZW5lc3RlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiJTw7hnZXIgZWZ0ZXIgcHJpbnRlcmUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiJJbmdlbiB1ZHNrcml2bmluZ3N0amVuZXN0ZXIgZXIgYWt0aXZlcmV0Ijwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZGUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1kZS9zdHJpbmdzLnhtbAppbmRleCBmNmY1M2VhLi40ZWI1ZDZhOSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZGUvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZGUvc3RyaW5ncy54bWwKQEAgLTU5LDYgKzU5LDggQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+IERydWNrZXIgZ2VmdW5kZW48L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkczwveGxpZmY6Zz4gRHJ1Y2tlciBnZWZ1bmRlbjwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiDigJMgPHhsaWZmOmcgaWQ9IlBSSU5URVJfREVTQ1JJUFRJT04iPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9pbmZvX2Rlc2MiIG1zZ2lkPSI3MTgxOTg4Nzg4OTkxNTgxNjU0Ij4iV2VpdGVyZSBJbmZvcm1hdGlvbmVuIMO8YmVyIGRpZXNlbiBEcnVja2VyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iRHJ1Y2tkaWVuc3QgYXVzd8OkaGxlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iU3VjaGUgbmFjaCBEcnVja2VybiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50X3NlcnZpY2VzIiBtc2dpZD0iODU2MTI0NzcwNjQyMzMyNzk2NiI+IktlaW5lIERydWNrZGllbnN0ZSBha3RpdmllcnQiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1lbC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWVsL3N0cmluZ3MueG1sCmluZGV4IDEwZGRmNjIuLmNkMzU3ODUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWVsL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWVsL3N0cmluZ3MueG1sCkBAIC01OSw2ICs1OSw4IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPs6Sz4HOrc64zrfOus6xzr0gPHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+IM61zrrPhM+Fz4DPic+Ezq3PgjwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPs6Sz4HOrc64zrfOus61IDx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRzPC94bGlmZjpnPiDOtc66z4TPhc+Az4nPhM6uz4I8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiLOoM61z4HOuc+Dz4PPjM+EzrXPgc61z4Igz4DOu863z4HOv8+Gzr/Pgc6vzrXPgiDPg8+HzrXPhM65zrrOrCDOvM61IM6xz4XPhM+Mzr0gz4TOv869IM61zrrPhM+Fz4DPic+Ezq4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiLOlc+AzrnOu86tzr7PhM61IM+Fz4DOt8+BzrXPg86vzrEgzrXOus+Ez43PgM+Jz4POt8+CIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiLOkc69zrHOts6uz4TOt8+DzrcgzrPOuc6xIM61zrrPhM+Fz4DPic+Ezq3PgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50X3NlcnZpY2VzIiBtc2dpZD0iODU2MTI0NzcwNjQyMzMyNzk2NiI+Is6UzrXOvSDOrc+Hzr/Phc69IM61zr3Otc+BzrPOv8+Azr/Ouc63zrjOtc6vIM+Fz4DOt8+BzrXPg86vzrXPgiDOtc66z4TPjc+Az4nPg863z4IiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1lbi1yQVUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1lbi1yQVUvc3RyaW5ncy54bWwKaW5kZXggYTU0MGFjNS4uNzUzZDlkZiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZW4tckFVL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWVuLXJBVS9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOCBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4gcHJpbnRlcnMgZm91bmQ8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkczwveGxpZmY6Zz4gcHJpbnRlciBmb3VuZDwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+Ik1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBwcmludGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iQ2hvb3NlIHByaW50IHNlcnZpY2UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IlNlYXJjaGluZyBmb3IgcHJpbnRlcnMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiJObyBwcmludCBzZXJ2aWNlcyBlbmFibGVkIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZW4tckdCL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZW4tckdCL3N0cmluZ3MueG1sCmluZGV4IGE1NDBhYzUuLjc1M2Q5ZGYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWVuLXJHQi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1lbi1yR0Ivc3RyaW5ncy54bWwKQEAgLTU5LDYgKzU5LDggQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+IHByaW50ZXJzIGZvdW5kPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IkNPVU5UXzAiPiUxJHM8L3hsaWZmOmc+IHByaW50ZXIgZm91bmQ8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiJNb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgcHJpbnRlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IkNob29zZSBwcmludCBzZXJ2aWNlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiJTZWFyY2hpbmcgZm9yIHByaW50ZXJzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRfc2VydmljZXMiIG1zZ2lkPSI4NTYxMjQ3NzA2NDIzMzI3OTY2Ij4iTm8gcHJpbnQgc2VydmljZXMgZW5hYmxlZCI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWVuLXJJTi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWVuLXJJTi9zdHJpbmdzLnhtbAppbmRleCBhNTQwYWM1Li43NTNkOWRmIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1lbi1ySU4vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZW4tcklOL3N0cmluZ3MueG1sCkBAIC01OSw2ICs1OSw4IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiBwcmludGVycyBmb3VuZDwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRzPC94bGlmZjpnPiBwcmludGVyIGZvdW5kPC9pdGVtPgogICAgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfZXh0ZW5kZWRfZGVzY3JpcHRpb25fdGVtcGxhdGUiIG1zZ2lkPSIxMzY2Njk5MjI3NzAzMzgxODc0Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX1NFUlZJQ0VfTEFCRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlBSSU5URVJfREVTQ1JJUFRJT04iPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9pbmZvX2Rlc2MiIG1zZ2lkPSI3MTgxOTg4Nzg4OTkxNTgxNjU0Ij4iTW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIHByaW50ZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiJDaG9vc2UgcHJpbnQgc2VydmljZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iU2VhcmNoaW5nIGZvciBwcmludGVycyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50X3NlcnZpY2VzIiBtc2dpZD0iODU2MTI0NzcwNjQyMzMyNzk2NiI+Ik5vIHByaW50IHNlcnZpY2VzIGVuYWJsZWQiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1lcy1yVVMvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1lcy1yVVMvc3RyaW5ncy54bWwKaW5kZXggODkyOWFhOC4uMWEwZDVkOCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZXMtclVTL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWVzLXJVUy9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOCBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5TZSBlbmNvbnRyYXJvbiA8eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4gaW1wcmVzb3Jhcy48L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj5TZSBlbmNvbnRyw7MgPHhsaWZmOmcgaWQ9IkNPVU5UXzAiPiUxJHM8L3hsaWZmOmc+IGltcHJlc29yYS48L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiJNw6FzIGluZm9ybWFjacOzbiBzb2JyZSBlc3RhIGltcHJlc29yYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IkVsZWdpciBzZXJ2aWNpbyBkZSBpbXByZXNpw7NuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiJCdXNjYW5kbyBpbXByZXNvcmFzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRfc2VydmljZXMiIG1zZ2lkPSI4NTYxMjQ3NzA2NDIzMzI3OTY2Ij4iTm8gaGF5IHNlcnZpY2lvcyBkZSBpbXByZXNpw7NuIGhhYmlsaXRhZG9zIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZXMvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1lcy9zdHJpbmdzLnhtbAppbmRleCA3Y2ZkOTJhLi5lYWM1NjhkIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1lcy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1lcy9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOCBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5TZSBoYW4gZW5jb250cmFkbyA8eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4gaW1wcmVzb3JhczwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPlNlIGhhIGVuY29udHJhZG8gPHhsaWZmOmcgaWQ9IkNPVU5UXzAiPiUxJHM8L3hsaWZmOmc+IGltcHJlc29yYTwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+Ik3DoXMgaW5mb3JtYWNpw7NuIHNvYnJlIGVzdGEgaW1wcmVzb3JhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iU2VsZWNjaW9uYXIgc2VydmljaW8gZGUgaW1wcmVzacOzbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iQnVzY2FuZG8gaW1wcmVzb3JhcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50X3NlcnZpY2VzIiBtc2dpZD0iODU2MTI0NzcwNjQyMzMyNzk2NiI+Ik5vIGhheSBzZXJ2aWNpb3MgZGUgaW1wcmVzacOzbiBoYWJpbGl0YWRvcyI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWV0LXJFRS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWV0LXJFRS9zdHJpbmdzLnhtbAppbmRleCBlZTkzYmNmLi4yY2RlMjU4IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1ldC1yRUUvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZXQtckVFL3N0cmluZ3MueG1sCkBAIC01OSw2ICs1OSw4IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPkxlaXRpIDx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiBwcmludGVyaXQ8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj5MZWl0aSA8eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkczwveGxpZmY6Zz4gcHJpbnRlcjwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiDigJMgPHhsaWZmOmcgaWQ9IlBSSU5URVJfREVTQ1JJUFRJT04iPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9pbmZvX2Rlc2MiIG1zZ2lkPSI3MTgxOTg4Nzg4OTkxNTgxNjU0Ij4iTGlzYXRlYXZlIHNlbGxlIHByaW50ZXJpIGtvaHRhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iUHJpbmRpdGVlbnVzZSB2YWxpbWluZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iUHJpbnRlcml0ZSBvdHNpbWluZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50X3NlcnZpY2VzIiBtc2dpZD0iODU2MTI0NzcwNjQyMzMyNzk2NiI+IsOcaHRlZ2kgcHJpbnRpbWlzdGVlbnVzdCBwb2xlIGx1YmF0dWQiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1ldS1yRVMvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1ldS1yRVMvc3RyaW5ncy54bWwKaW5kZXggODgyZTg4OC4uOTZhMzI3MyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZXUtckVTL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWV1LXJFUy9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOCBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4gaW5wcmltYWdhaWx1IGF1cmtpdHUgZGlyYTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRzPC94bGlmZjpnPiBpbnByaW1hZ2FpbHUgYXVya2l0dSBkYTwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+IkluZm9ybWF6aW8gZ2VoaWFnbyBpbnByaW1hZ2FpbHVhcmkgYnVydXoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiJBdWtlcmF0dSBpbnByaW1hdHplLXplcmJpdHp1YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iSW5wcmltYWdhaWx1YWsgYmlsYXR6ZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiJFeiBkYWdvIGdhaXR1dGEgaW5wcmltYXR6ZWtvIHplcmJpdHp1cmlrIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZmEvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1mYS9zdHJpbmdzLnhtbAppbmRleCAxMDc0M2U3Li5mZGMzOTg5IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1mYS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1mYS9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOCBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+INqG2KfZvtqv2LEg24zYp9mB2Kog2LTYrzwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+INqG2KfZvtqv2LEg24zYp9mB2Kog2LTYrzwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+Itin2LfZhNin2LnYp9iqINio24zYtNiq2LEg2K/Ysdio2KfYsdmHINqG2KfZvtqv2LEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiLYp9mG2KrYrtin2Kgg2LPYsdmI24zYsyDahtin2b4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+Itiv2LHYrdin2YQg2KzYs9iq2KzZiNuMINqG2KfZvtqv2LHZh9inIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRfc2VydmljZXMiIG1zZ2lkPSI4NTYxMjQ3NzA2NDIzMzI3OTY2Ij4i2YfbjNqGINiu2K/Zhdin2Kog2obYp9m+24wg2YHYudin2YQg2YbbjNiz2KoiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1maS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWZpL3N0cmluZ3MueG1sCmluZGV4IGVlMzVjNDEuLjkyNjczOTMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWZpL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWZpL3N0cmluZ3MueG1sCkBAIC01OSw2ICs1OSw4IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiB0dWxvc3RpbnRhIGzDtnlkZXR0eTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRzPC94bGlmZjpnPiB0dWxvc3RpbiBsw7Z5ZGV0dHk8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4g4oCTIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+Ikxpc8OkdGlldG9qYSB0w6RzdMOkIHR1bG9zdGltZXN0YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IlZhbGl0c2UgdHVsb3N0dXNwYWx2ZWx1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiJFdHNpdMOkw6RuIHR1bG9zdGltaWEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiJFaSBrw6R5dMO2c3PDpCBvbGV2aWEgdHVsb3N0dXNwYWx2ZWx1aXRhIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZnItckNBL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZnItckNBL3N0cmluZ3MueG1sCmluZGV4IGViOTk0NDEuLmJmYjQ4NjIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWZyLXJDQS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1mci1yQ0Evc3RyaW5ncy54bWwKQEAgLTU5LDYgKzU5LDggQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiBpbXByaW1hbnRlIHRyb3V2w6llPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4gaW1wcmltYW50ZSB0cm91dsOpZXM8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiJQbHVzIGRcJ2luZm9ybWF0aW9uIHN1ciBjZXR0ZSBpbXByaW1hbnRlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iU8OpbGVjdGlvbm5lciBsZSBzZXJ2aWNlIGRcJ2ltcHJlc3Npb24iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IlJlY2hlcmNoZSBkXCdpbXByaW1hbnRlcyBlbiBjb3Vycy4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50X3NlcnZpY2VzIiBtc2dpZD0iODU2MTI0NzcwNjQyMzMyNzk2NiI+IkF1Y3VuIHNlcnZpY2UgZFwnaW1wcmVzc2lvbiBhY3RpdsOpIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZnIvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1mci9zdHJpbmdzLnhtbAppbmRleCBjMGVlY2ZiLi5kZTU1ZTI5IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1mci9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1mci9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOCBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+wqBpbXByaW1hbnRlIHRyb3V2w6llPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz7CoGltcHJpbWFudGVzIHRyb3V2w6llczwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiDigJMgPHhsaWZmOmcgaWQ9IlBSSU5URVJfREVTQ1JJUFRJT04iPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9pbmZvX2Rlc2MiIG1zZ2lkPSI3MTgxOTg4Nzg4OTkxNTgxNjU0Ij4iUGx1cyBkXCdpbmZvcm1hdGlvbnMgc3VyIGNldHRlIGltcHJpbWFudGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiJTw6lsZWN0aW9ubmVyIGxlIHNlcnZpY2UgZFwnaW1wcmVzc2lvbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iUmVjaGVyY2hlIGRcJ2ltcHJpbWFudGVzIGVuIGNvdXJzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRfc2VydmljZXMiIG1zZ2lkPSI4NTYxMjQ3NzA2NDIzMzI3OTY2Ij4iQXVjdW4gc2VydmljZSBkXCdpbXByZXNzaW9uIGFjdGl2w6kiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1nbC1yRVMvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1nbC1yRVMvc3RyaW5ncy54bWwKaW5kZXggYjRhMWVjNi4uZGM2NjA4NCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZ2wtckVTL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWdsLXJFUy9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOCBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5FbmNvbnRyw6Fyb25zZSA8eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4gaW1wcmVzb3JhczwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPkVuY29udHJvdXNlIDx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRzPC94bGlmZjpnPiBpbXByZXNvcmE8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiJNw6FpcyBpbmZvcm1hY2nDs24gc29icmUgZXN0YSBpbXByZXNvcmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiJFc2NvbGxlciBzZXJ2aXpvIGRlIGltcHJlc2nDs24iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IkJ1c2NhIGRlIGltcHJlc29yYXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiJOb24gaGFpIHNlcnZpem9zIGRlIGltcHJlc2nDs24gYWN0aXZhZG9zIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZ3UtcklOL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZ3UtcklOL3N0cmluZ3MueG1sCmluZGV4IDhmNzc5NTMuLmQwNWEzOTIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWd1LXJJTi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1ndS1ySU4vc3RyaW5ncy54bWwKQEAgLTU5LDYgKzU5LDggQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiDgqqrgq43gqrDgqr/gqqjgq43gqp/gqrDgq43gqrgg4Kqu4Kqz4KuN4Kqv4Kq+4KqCPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4g4Kqq4KuN4Kqw4Kq/4Kqo4KuN4Kqf4Kqw4KuN4Kq4IOCqruCqs+CrjeCqr+CqvuCqgjwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+IuCqhiDgqqrgq43gqrDgqr/gqqjgq43gqp/gqrAg4Kq14Kq/4Kq24KuHIOCqteCqp+CrgSDgqq7gqr7gqrngqr/gqqTgq4AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiLgqqrgq43gqrDgqr/gqqjgq43gqp8g4Kq44KuH4Kq14Kq+IOCqquCquOCqguCqpiDgqpXgqrDgq4siPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IuCqquCrjeCqsOCqv+CqqOCrjeCqn+CqsOCrjeCquCDgqq7gqr7gqp/gq4cg4Kq24KuL4Kqn4KuAIOCqsOCqueCrjeCqr+CrgeCqgiDgqpvgq4ciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiLgqpXgq4vgqogg4Kqb4Kq+4KqqIOCquOCrh+CqteCqvuCqkyDgqrjgqpXgq43gqrfgqq4g4KqV4Kqw4KuH4KqyIOCqqOCqpeCrgCI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWhpL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtaGkvc3RyaW5ncy54bWwKaW5kZXggNGMxMTMyMy4uODA1MTkwMCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtaGkvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtaGkvc3RyaW5ncy54bWwKQEAgLTU5LDYgKzU5LDggQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiDgpKrgpY3gpLDgpL/gpILgpJ/gpLAg4KSu4KS/4KSy4KWHPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4g4KSq4KWN4KSw4KS/4KSC4KSf4KSwIOCkruCkv+CksuClhzwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+IuCkh+CkuCDgpKrgpY3gpLDgpL/gpILgpJ/gpLAg4KSV4KWHIOCkrOCkvuCksOClhyDgpK7gpYfgpIIg4KSF4KSn4KS/4KSVIOCknOCkvuCkqOCkleCkvuCksOClgCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IuCkquCljeCksOCkv+CkguCknyDgpLjgpYfgpLXgpL4g4KSa4KWB4KSo4KWH4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiLgpKrgpY3gpLDgpL/gpILgpJ/gpLAg4KSW4KWL4KScIOCksOCkueCkviDgpLngpYgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiLgpJXgpYvgpIgg4KSt4KWAIOCkquCljeCksOCkv+CkguCknyDgpLjgpYfgpLXgpL4g4KS44KSV4KWN4KS34KSuIOCkqOCkueClgOCkgiDgpLngpYgiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1oci9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWhyL3N0cmluZ3MueG1sCmluZGV4IDRjZWMzYmEuLjRkYWI0Y2M5IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1oci9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1oci9zdHJpbmdzLnhtbApAQCAtNjAsNiArNjAsOCBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9ImZldyI+UHJvbmHEkWVuYSBzdSA8eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4gcGlzYcSNYTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+UHJvbmHEkWVubyBqZSA8eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4gcGlzYcSNYTwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiDigJMgPHhsaWZmOmcgaWQ9IlBSSU5URVJfREVTQ1JJUFRJT04iPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9pbmZvX2Rlc2MiIG1zZ2lkPSI3MTgxOTg4Nzg4OTkxNTgxNjU0Ij4iVmnFoWUgaW5mb3JtYWNpamEgbyBvdm9tIHBpc2HEjXUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiJPZGFiZXJpdGUgdXNsdWd1IGlzcGlzYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iVHJhxb5lbmplIHBpc2HEjWEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiJOaWplIG9tb2d1xIdlbmEgbmlqZWRuYSB1c2x1Z2EgaXNwaXNhIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtaHUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1odS9zdHJpbmdzLnhtbAppbmRleCBhYzFiYTZlLi4xYTU2ZWU3IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1odS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1odS9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOCBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4gbnlvbXRhdMOzIMOpc3psZWx2ZTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRzPC94bGlmZjpnPiBueW9tdGF0w7Mgw6lzemxlbHZlPC9pdGVtPgogICAgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfZXh0ZW5kZWRfZGVzY3JpcHRpb25fdGVtcGxhdGUiIG1zZ2lkPSIxMzY2Njk5MjI3NzAzMzgxODc0Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX1NFUlZJQ0VfTEFCRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiJUb3bDoWJiaSBpbmZvcm3DoWNpw7MgZXJyxZFsIGEgbnlvbXRhdMOzcsOzbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+Ik55b210YXTDoXNpIHN6b2xnw6FsdGF0w6FzIGtpdsOhbGFzenTDoXNhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiJOeW9tdGF0w7NrIGtlcmVzw6lzZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50X3NlcnZpY2VzIiBtc2dpZD0iODU2MTI0NzcwNjQyMzMyNzk2NiI+Ik5pbmNzIGVuZ2Vkw6lseWV6ZXR0IG55b210YXTDoXNpIHN6b2xnw6FsdGF0w6FzIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtaHktckFNL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtaHktckFNL3N0cmluZ3MueG1sCmluZGV4IGRkYTY3NDUuLjdiOTlkY2YgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWh5LXJBTS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1oeS1yQU0vc3RyaW5ncy54bWwKQEAgLTU5LDYgKzU5LDggQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPtSz1b/VttW+1aXVrCDVpyA8eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4g1b/VutWr1bk8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPtSz1b/VttW+1aXVrCDVpyA8eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4g1b/VutWr1bk8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiLVgNWh1b7VpdWs1bXVodWsINW/1aXVstWl1a/VuNaC1anVtdW41oLVttW21aXWgCDVodW11b0g1b/VutWr1bnVqyDVtNWh1b3Vq9W2Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4i1LjVttW/1oDVpdaEINW/1brVpdWs1bjWgiDVrtWh1bzVodW11bjWgtWp1bXVuNaC1bbVqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4i1Y/VutWr1bnVttWl1oDVqyDVuNaA1bjVttW41oLVtCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50X3NlcnZpY2VzIiBtc2dpZD0iODU2MTI0NzcwNjQyMzMyNzk2NiI+ItSx1a/Vv9Wr1b7VodaB1b7VodWuINW/1brVtNWh1bYg1a7VodW81aHVtdW41oLVqdW11bjWgtW21bbVpdaAINW51a/VodW2Ijwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtaW4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1pbi9zdHJpbmdzLnhtbAppbmRleCBiMjAzZTJiLi5hOTkxMjcyIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1pbi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1pbi9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOCBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4gcHJpbnRlciBkaXRlbXVrYW48L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkczwveGxpZmY6Zz4gcHJpbnRlciBkaXRlbXVrYW48L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiJJbmZvcm1hc2kgc2VsZW5na2FwbnlhIHRlbnRhbmcgcHJpbnRlciBpbmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiJQaWxpaCBsYXlhbmFuIGNldGFrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiJNZW5jYXJpIHByaW50ZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiJUaWRhayBhZGEgbGF5YW5hbiBjZXRhayB5YW5nIGFrdGlmIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtaXMtcklTL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtaXMtcklTL3N0cmluZ3MueG1sCmluZGV4IDZkZmRhYmMuLmU5M2Y3MDIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWlzLXJJUy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1pcy1ySVMvc3RyaW5ncy54bWwKQEAgLTU5LDYgKzU5LDggQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiBwcmVudGFyaSBmYW5uc3Q8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiBwcmVudGFyYXIgZnVuZHVzdDwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiDigJMgPHhsaWZmOmcgaWQ9IlBSSU5URVJfREVTQ1JJUFRJT04iPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9pbmZvX2Rlc2MiIG1zZ2lkPSI3MTgxOTg4Nzg4OTkxNTgxNjU0Ij4iRnJla2FyaSB1cHBsw71zaW5nYXIgdW0gw75lbm5hbiBwcmVudGFyYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IlZlbGR1IHByZW50w75qw7NudXN0dSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iTGVpdGFyIGHDsCBwcmVudGFyYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50X3NlcnZpY2VzIiBtc2dpZD0iODU2MTI0NzcwNjQyMzMyNzk2NiI+IkVuZ2luIHByZW50w75qw7NudXN0YSBlciB2aXJrIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtaXQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1pdC9zdHJpbmdzLnhtbAppbmRleCBmZDU0NzNhLi5mZmJhMzUzIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1pdC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1pdC9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOCBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4gc3RhbXBhbnRpIHRyb3ZhdGU8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkczwveGxpZmY6Zz4gc3RhbXBhbnRlIHRyb3ZhdGE8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiJVbHRlcmlvcmkgaW5mb3JtYXppb25pIHN1IHF1ZXN0YSBzdGFtcGFudGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiJTY2VnbGkgc2Vydml6aW8gZGkgc3RhbXBhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiJSaWNlcmNhIGRpIHN0YW1wYW50aSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50X3NlcnZpY2VzIiBtc2dpZD0iODU2MTI0NzcwNjQyMzMyNzk2NiI+Ik5vbiDDqCBzdGF0byBhdHRpdmF0byBhbGN1biBzZXJ2aXppbyBkaSBzdGFtcGEiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1pdy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWl3L3N0cmluZ3MueG1sCmluZGV4IGRkMDYyYTMuLjJhYzEwOTMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWl3L3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWl3L3N0cmluZ3MueG1sCkBAIC02MSw2ICs2MSw4IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPteg157XpteQ15UgPHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+INee15PXpNeh15XXqjwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPteg157XpteQ15Qg157Xk9ek16HXqiA8eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkczwveGxpZmY6Zz48L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiLXnteZ15PXoiDXoNeV16HXoyDXotecINee15PXpNeh16og15bXlSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IteR15fXqCDXqdeZ16jXldeqINeU15PXpNeh15QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+Itee15fXpNepINee15PXpNeh15XXqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50X3NlcnZpY2VzIiBtc2dpZD0iODU2MTI0NzcwNjQyMzMyNzk2NiI+Itec15Ag15TXldek16LXnNeVINep15nXqNeV16rXmSDXlNeT16TXodeUIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtamEvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1qYS9zdHJpbmdzLnhtbAppbmRleCAyM2U0ODA5Li4yYzNjMjRkIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1qYS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1qYS9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOCBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz7lj7Djga7jg5fjg6rjg7Pjgr/jgYzopovjgaTjgYvjgorjgb7jgZfjgZ88L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkczwveGxpZmY6Zz7lj7Djga7jg5fjg6rjg7Pjgr/jgYzopovjgaTjgYvjgorjgb7jgZfjgZ88L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiLjgZPjga7jg5fjg6rjg7Pjgr/jga7oqbPntLAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiLljbDliLfjgrXjg7zjg5Pjgrnjga7pgbjmip4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IuODl+ODquODs+OCv+OBruaknOe0ouS4rSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50X3NlcnZpY2VzIiBtc2dpZD0iODU2MTI0NzcwNjQyMzMyNzk2NiI+IuS9v+eUqOOBp+OBjeOCi+WNsOWIt+OCteODvOODk+OCueOBjOOBguOCiuOBvuOBm+OCkyI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWthLXJHRS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWthLXJHRS9zdHJpbmdzLnhtbAppbmRleCA5Zjg2ZjA1Li4yYjAyODVkIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1rYS1yR0Uvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMta2EtckdFL3N0cmluZ3MueG1sCkBAIC01OSw2ICs1OSw4IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiDhg57hg6Dhg5jhg5zhg6Lhg5Thg6Dhg5gg4YOc4YOQ4YOe4YOd4YOV4YOc4YOY4YOQPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IkNPVU5UXzAiPiUxJHM8L3hsaWZmOmc+IOGDnuGDoOGDmOGDnOGDouGDlOGDoOGDmCDhg5zhg5Dhg57hg53hg5Xhg5zhg5jhg5A8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4g4oCUIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+IuGDk+GDkOGDm+GDkOGDouGDlOGDkeGDmOGDl+GDmCDhg5jhg5zhg6Thg53hg6Dhg5vhg5Dhg6rhg5jhg5Ag4YOQ4YObIOGDnuGDoOGDmOGDnOGDouGDlOGDoOGDmOGDoSDhg6jhg5Thg6Hhg5Dhg67hg5Thg5EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiLhg5Dhg5jhg6Dhg6nhg5jhg5Thg5cg4YOR4YOU4YOt4YOT4YOV4YOY4YOhIOGDoeGDlOGDoOGDleGDmOGDoeGDmCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4i4YOb4YOY4YOb4YOT4YOY4YOc4YOQ4YOg4YOU4YOd4YOR4YOhIOGDnuGDoOGDmOGDnOGDouGDlOGDoOGDlOGDkeGDmOGDoSDhg6vhg5jhg5Thg5Hhg5AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiLhg5Hhg5Thg63hg5Phg5Xhg5jhg6Eg4YOh4YOU4YOg4YOV4YOY4YOh4YOU4YOR4YOYIOGDkuGDkOGDkOGDpeGDouGDmOGDo+GDoOGDlOGDkeGDo+GDmuGDmCDhg5Dhg6Ag4YOQ4YOg4YOY4YOhIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMta2stcktaL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMta2stcktaL3N0cmluZ3MueG1sCmluZGV4IDA1YzMwMGUuLmZjMDk5YzkgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWtrLXJLWi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1ray1yS1ovc3RyaW5ncy54bWwKQEAgLTU5LDYgKzU5LDggQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+INC/0YDQuNC90YLQtdGAINGC0LDQsdGL0LvQtNGLPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IkNPVU5UXzAiPiUxJHM8L3hsaWZmOmc+INC/0YDQuNC90YLQtdGAINGC0LDQsdGL0LvQtNGLPC9pdGVtPgogICAgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfZXh0ZW5kZWRfZGVzY3JpcHRpb25fdGVtcGxhdGUiIG1zZ2lkPSIxMzY2Njk5MjI3NzAzMzgxODc0Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX1NFUlZJQ0VfTEFCRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlBSSU5URVJfREVTQ1JJUFRJT04iPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9pbmZvX2Rlc2MiIG1zZ2lkPSI3MTgxOTg4Nzg4OTkxNTgxNjU0Ij4i0J7RgdGLINC/0YDQuNC90YLQtdGAINGC0YPRgNCw0LvRiyDSm9C+0YHRi9C80YjQsCDQsNKb0L/QsNGA0LDRgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+ItCf0YDQuNC90YLQtdGAINKb0YvQt9C80LXRgtGW0L0g0YLQsNKj0LTQsNGDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiLQn9GA0LjQvdGC0LXRgNC70LXRgNC00ZYg0ZbQt9C00LXRgyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50X3NlcnZpY2VzIiBtc2dpZD0iODU2MTI0NzcwNjQyMzMyNzk2NiI+ItCR0LDRgdGL0L8g0YjRi9KT0LDRgNGDINKb0YvQt9C80LXRgtGC0LXRgNGWINKb0L7RgdGL0LvQvNCw0pPQsNC9Ijwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMta20tcktIL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMta20tcktIL3N0cmluZ3MueG1sCmluZGV4IDA4NjFlNTkuLmI1MTA5MWUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWttLXJLSC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1rbS1yS0gvc3RyaW5ncy54bWwKQEAgLTU5LDYgKzU5LDggQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+4Z6a4Z6A4Z6D4Z6+4Z6J4Z6Y4Z+J4Z624Z6f4Z+K4Z644Z6T4Z6U4Z+E4Z+H4Z6W4Z674Z6Y4Z+S4Z6WIDx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPjwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPuGemuGegOGeg+GevuGeieGemOGfieGetuGen+GfiuGeuOGek+GelOGfhOGfh+GeluGeu+GemOGfkuGeliA8eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkczwveGxpZmY6Zz48L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiLhnpbhn5Dhno/hn4zhnpjhnrbhnpPhnpThnpPhn5LhnpDhn4LhnpjhnqLhn4bhnpbhnrjhnpjhn4nhnrbhnp/hn4rhnrjhnpThn4Thn4fhnpbhnrvhnpjhn5LhnpbhnpPhn4Hhn4ciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiLhnofhn5Lhnprhnr7hnp/igIvhnp/hn4HhnpzhnrbigIvhnpThn4Thn4fhnpbhnrvhnpjhn5LhnpYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IuGen+GfkuGenOGfguGehOGemuGegOKAi+GemOGfieGetuGen+GfiuGeuOGek+KAi+GelOGfhOGfh+GeluGeu+GemOGfkuGeliI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50X3NlcnZpY2VzIiBtc2dpZD0iODU2MTI0NzcwNjQyMzMyNzk2NiI+IuGeguGfkuGemOGetuGek+GegOGetuGemuGelOGevuGegOGeiuGfhuGejuGevuGemuGegOGetuGemuGen+GfgeGenOGetuGelOGfhOGfh+GeluGeu+GemOGfkuGeluGekeGfgSI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWtuLXJJTi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWtuLXJJTi9zdHJpbmdzLnhtbAppbmRleCA3MWIwOThkLi41ZDVkZWU4IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1rbi1ySU4vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMta24tcklOL3N0cmluZ3MueG1sCkBAIC01OSw2ICs1OSw4IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4g4LKq4LON4LKw4LK/4LKC4LKf4LKw4LON4oCM4LKX4LKz4LOBIOCyquCypOCzjeCypOCzhuCyr+CyvuCyl+Cyv+CyteCzhjwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+IOCyquCzjeCysOCyv+CyguCyn+CysOCzjeKAjOCyl+Cys+CzgSDgsqrgsqTgs43gsqTgs4bgsq/gsr7gspfgsr/gsrXgs4Y8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiLgsogg4LKq4LON4LKw4LK/4LKC4LKf4LKw4LONIOCyrOCyl+CzjeCyl+CzhiDgsofgsqjgs43gsqjgsrfgs43gsp/gs4Eg4LKu4LK+4LK54LK/4LKk4LK/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4i4LKu4LOB4LKm4LON4LKw4LKjIOCyuOCzh+CyteCzhuCyr+CyqOCzjeCyqOCzgSDgsobgsq/gs43gspXgs4bgsq7gsr7gsqHgsr8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IuCyquCzjeCysOCyv+CyguCyn+CysOCzjeKAjOKAjOCyl+Cys+Cyv+Cyl+CyvuCyl+CyvyDgsrngs4HgsqHgs4HgspXgsrLgsr7gspfgs4HgsqTgs43gsqTgsr/gsqbgs4YiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiLgsq/gsr7gsrXgs4Hgsqbgs4cg4LKu4LOB4LKm4LON4LKw4LKjIOCyuOCzh+CyteCzhuCyl+Cys+CyqOCzjeCyqOCzgSDgsrjgspXgs43gsrDgsr/gsq/gspfgs4rgsrPgsr/gsrjgsr/gsrLgs43gsrIiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1rby9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWtvL3N0cmluZ3MueG1sCmluZGV4IDQ1MWFiNTguLjk4NjE3ZTcgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWtvL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWtvL3N0cmluZ3MueG1sCkBAIC01OSw2ICs1OSw4IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPu2UhOumsO2EsCA8eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz7rjIAg6rKA7IOJ65CoPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+7ZSE66aw7YSwIDx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRzPC94bGlmZjpnPuuMgCDqsoDsg4nrkKg8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiLsnbQg7ZSE66aw7YSw7JeQIOuMgO2VnCDsoJXrs7Qg642U67O06riwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4i7J247IeEIOyEnOu5hOyKpCDshKDtg50iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+Iu2UhOumsO2EsCDqsoDsg4kg7KSRIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRfc2VydmljZXMiIG1zZ2lkPSI4NTYxMjQ3NzA2NDIzMzI3OTY2Ij4i7IKs7JqpIOqwgOuKpe2VnCDtlITrprDtirgg7ISc67mE7IqkIOyXhuydjCI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWt5LXJLRy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWt5LXJLRy9zdHJpbmdzLnhtbAppbmRleCA5OGRhMDhjLi4yYTExZmY4IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1reS1yS0cvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMta3ktcktHL3N0cmluZ3MueG1sCkBAIC01OSw2ICs1OSw4IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiDQv9GA0LjQvdGC0LXRgCDRgtCw0LHRi9C70LTRizwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRzPC94bGlmZjpnPiDQv9GA0LjQvdGC0LXRgCDRgtCw0LHRi9C70LTRizwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+ItCR0YPQuyDQv9GA0LjQvdGC0LXRgCDQttOp0L3Sr9C90LTTqSDQutOp0LHSr9GA06nTqdC6INC80LDQsNC70YvQvNCw0YIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiLQn9GA0LjQvdGC0LXRgCDQutGL0LfQvNCw0YLRi9C9INGC0LDQvdC00L7QviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4i0J/RgNC40L3RgtC10YDQu9C10YAg0LjQt9C00LXQu9Kv0q/QtNOpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRfc2VydmljZXMiIG1zZ2lkPSI4NTYxMjQ3NzA2NDIzMzI3OTY2Ij4i0J/RgNC40L3RgtC10YAt0LrRi9C30LzQsNGC0YLQsNGA0Ysg0LjRiNGC0LXRgtC40LvQs9C10L0g0Y3QvNC10YEiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1sby1yTEEvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1sby1yTEEvc3RyaW5ncy54bWwKaW5kZXggMjAyOWZkZi4uNzg4ZTVhYSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtbG8tckxBL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWxvLXJMQS9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOCBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4g4LuA4LqE4Lq34LuI4Lqt4LqH4oCL4Lqe4Lq04Lqh4oCL4LqW4Lq34LqB4oCL4Lqe4Lq74Lqa4oCL4LuB4Lql4LuJ4LqnPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IkNPVU5UXzAiPiUxJHM8L3hsaWZmOmc+IOC7gOC6hOC6t+C7iOC6reC6h+KAi+C6nuC6tOC6oeKAi+C6luC6t+C6geKAi+C6nuC6u+C6muKAi+C7geC6peC7ieC6pzwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+IuC6guC7jeC7ieC6oeC6ueC6meC7gOC6nuC6teC7iOC6oeC7gOC6leC6teC6oeC6geC7iOC6veC6p+C6geC6seC6muC7gOC6hOC6t+C7iOC6reC6h+C6nuC6tOC6oeC6meC6teC7iSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IuC7gOC6peC6t+C6reC6geC6muC7jeC6peC6tOC6geC6suC6meC6geC6suC6meC6nuC6tOC6oSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4i4LqB4Lqz4Lql4Lqx4LqH4LqK4Lqt4LqB4Lqr4Lqy4LuA4LqE4Lq34LuI4Lqt4LqH4Lqe4Lq04LqhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRfc2VydmljZXMiIG1zZ2lkPSI4NTYxMjQ3NzA2NDIzMzI3OTY2Ij4i4Lqa4LuN4LuI4oCL4Lqh4Lq14oCL4LqB4Lqy4LqZ4oCL4Lqa4LuN4oCL4Lql4Lq04oCL4LqB4Lqy4LqZ4oCL4Lqe4Lq04Lqh4oCL4LuA4Lqb4Lq14LqU4oCL4LuD4LqK4LuJ4oCL4LqH4Lqy4LqZ4oCL4LuE4Lqn4LuJIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtbHQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1sdC9zdHJpbmdzLnhtbAppbmRleCA5NzJhYmI1Li4xODI2ZThlIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1sdC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1sdC9zdHJpbmdzLnhtbApAQCAtNjEsNiArNjEsOCBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im1hbnkiPlJhc3RhIDx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiBzcGF1c2RpbnR1dm88L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPlJhc3RhIDx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiBzcGF1c2RpbnR1dsWzPC9pdGVtPgogICAgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfZXh0ZW5kZWRfZGVzY3JpcHRpb25fdGVtcGxhdGUiIG1zZ2lkPSIxMzY2Njk5MjI3NzAzMzgxODc0Ij4i4oCePHhsaWZmOmcgaWQ9IlBSSU5UX1NFUlZJQ0VfTEFCRUwiPiUxJHM8L3hsaWZmOmc+4oCcIOKAkyA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiJEYXVnaWF1IGluZm9ybWFjaWpvcyBhcGllIMWhxK8gc3BhdXNkaW50dXbEhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IlBhc2lyaW5raXRlIHNwYXVzZGluaW1vIHBhc2xhdWfEhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iSWXFoWtvbWEgc3BhdXNkaW50dXbFsyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50X3NlcnZpY2VzIiBtc2dpZD0iODU2MTI0NzcwNjQyMzMyNzk2NiI+Ik5lxK9nYWxpbnRhIGpva2nFsyBzcGF1c2RpbmltbyBwYXNsYXVnxbMiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1sdi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWx2L3N0cmluZ3MueG1sCmluZGV4IGY1NjViMjMuLjVjMTdlZmUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWx2L3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWx2L3N0cmluZ3MueG1sCkBAIC02MCw2ICs2MCw4IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj5BdHJhc3RzIDx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPsKgcHJpbnRlcnM8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPkF0cmFzdGkgPHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+wqBwcmludGVyaTwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPsKg4oCUIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+IlBsYcWhxIFrYSBpbmZvcm3EgWNpamEgcGFyIMWhbyBwcmludGVyaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+Ikl6dsSTbGlldGllcyBkcnVrxIHFoWFuYXMgcGFrYWxwb2p1bXUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IlByaW50ZXJ1IG1la2zEk8WhYW5hIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRfc2VydmljZXMiIG1zZ2lkPSI4NTYxMjQ3NzA2NDIzMzI3OTY2Ij4iTmF2IGllc3DEk2pvdHMgbmV2aWVucyBkcnVrYXMgcGFrYWxwb2p1bXMiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1tay1yTUsvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1tay1yTUsvc3RyaW5ncy54bWwKaW5kZXggZjVjMDZkMS4uZWJjMTE4MSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtbWstck1LL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLW1rLXJNSy9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOCBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+0J/RgNC+0L3QsNGY0LTQtdC90Lgg0YHQtSA8eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4g0L/QtdGH0LDRgtCw0Yc8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPtCf0YDQvtC90LDRmNC00LXQvdC4INGB0LUgPHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+INC/0LXRh9Cw0YLQsNGH0Lg8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiLQn9C+0LLQtdGc0LUg0LjQvdGE0L7RgNC80LDRhtC40Lgg0LfQsCDQvtCy0L7RmCDQv9C10YfQsNGC0LDRhyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+ItCY0LfQsdC10YDQuCDRg9GB0LvRg9Cz0LAg0L/QtdGH0LDRgtC10ZrQtSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4i0J/RgNC10LHQsNGA0YPQstCw0ZrQtSDQv9C10YfQsNGC0LDRh9C4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRfc2VydmljZXMiIG1zZ2lkPSI4NTYxMjQ3NzA2NDIzMzI3OTY2Ij4i0J3QtdC80LAg0L7QstC+0LfQvNC+0LbQtdC90Lgg0YPRgdC70YPQs9C4INC30LAg0L/QtdGH0LDRgtC10ZrQtSI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLW1sLXJJTi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLW1sLXJJTi9zdHJpbmdzLnhtbAppbmRleCAyZDQ1Y2U1Li5jMDhhM2Q0IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1tbC1ySU4vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtbWwtcklOL3N0cmluZ3MueG1sCkBAIC01OSw2ICs1OSw4IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiDgtKrgtY3gtLDgtL/gtKjgtY3gtLHgtLHgtYHgtJXgtb4g4LSV4LSj4LWN4LSf4LWG4LSk4LWN4LSk4LS/PC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IkNPVU5UXzAiPiUxJHM8L3hsaWZmOmc+IOC0quC1jeC0sOC0v+C0qOC1jeC0seC1vCDgtJXgtKPgtY3gtJ/gtYbgtKTgtY3gtKTgtL88L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiLgtIgg4LSq4LWN4LSw4LS/4LSo4LWN4LSx4LSx4LS/4LSo4LWGIOC0leC1geC0seC0v+C0muC1jeC0muC1geC0s+C1jeC0syDgtJXgtYLgtJ/gtYHgtKTgtb0g4LS14LS/4LS14LSw4LSZ4LWN4LSZ4LW+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4i4LSq4LWN4LSw4LS/4LSo4LWN4LSx4LWNIOC0uOC1h+C0teC0qOC0giDgtKTgtL/gtLDgtJ7gtY3gtJ7gtYbgtJ/gtYHgtJXgtY3gtJXgtYHgtJUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IuC0quC1jeC0sOC0v+C0qOC1jeC0seC0seC1geC0leC1vuC0leC1jeC0leC0vuC0r+C0vyDgtKTgtL/gtLDgtK/gtYHgtKjgtY3gtKjgtYEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiLgtKrgtY3gtLDgtL/gtKjgtY3gtLHgtY0g4LS44LWH4LS14LSo4LSZ4LWN4LSZ4LSz4LWK4LSo4LWN4LSo4LWB4LSCIOC0quC1jeC0sOC0teC1vOC0pOC1jeC0pOC0qOC0leC1jeC0t+C0ruC0vuC0leC1jeC0leC0v+C0r+C0v+C0n+C1jeC0n+C0v+C0suC1jeC0siI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLW1uLXJNTi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLW1uLXJNTi9zdHJpbmdzLnhtbAppbmRleCBmMmM3YjczLi5kY2VmMjhmIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1tbi1yTU4vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtbW4tck1OL3N0cmluZ3MueG1sCkBAIC01OSw2ICs1OSw4IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiDRhdGN0LLQu9GN0LPRhyDQvtC70LTRgdC+0L0g0LHQsNC50L3QsDwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRzPC94bGlmZjpnPiDRhdGN0LLQu9GN0LPRhyDQvtC70LTRgdC+0L0g0LHQsNC50L3QsDwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+ItCt0L3RjSDRhdGN0LLQu9GN0LPRh9C40LnQvSDRgtCw0LvQsNCw0YDRhSDQtNGN0LvQs9GN0YDRjdC90LPSr9C5INC80Y3QtNGN0Y3Qu9GN0LsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiLQpdGN0LLQu9GN0YUg0q/QudC70YfQuNC70LPRjdGN0LMg0YHQvtC90LPQvtGFIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiLQn9GA0LjQvdGC0LXRgCDRhdCw0LnQtiDQsdCw0LnQvdCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRfc2VydmljZXMiIG1zZ2lkPSI4NTYxMjQ3NzA2NDIzMzI3OTY2Ij4i0KXRjdCy0LvRjdGFINKv0LnQu9GH0LjQu9Cz0Y3RjdCzINC40LTRjdCy0YXQttKv0q/Qu9GN0Y3Qs9Kv0LkiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1tci1ySU4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1tci1ySU4vc3RyaW5ncy54bWwKaW5kZXggMWMwNzlkYy4uMzg0ZjBkZSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtbXItcklOL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLW1yLXJJTi9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOCBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+IOCkquCljeCksOCkv+CkguCkn+CksCDgpIbgpKLgpLPgpLLgpL48L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiDgpKrgpY3gpLDgpL/gpILgpJ/gpLAg4KSG4KSi4KSz4KSy4KWHPC9pdGVtPgogICAgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfZXh0ZW5kZWRfZGVzY3JpcHRpb25fdGVtcGxhdGUiIG1zZ2lkPSIxMzY2Njk5MjI3NzAzMzgxODc0Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX1NFUlZJQ0VfTEFCRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlBSSU5URVJfREVTQ1JJUFRJT04iPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9pbmZvX2Rlc2MiIG1zZ2lkPSI3MTgxOTg4Nzg4OTkxNTgxNjU0Ij4i4KSv4KS+IOCkquCljeCksOCkv+CkguCkn+CksCDgpLXgpL/gpLfgpK/gpYAg4KSF4KSn4KS/4KSVIOCkruCkvuCkueCkv+CkpOClgCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IuCkruClgeCkpuCljeCksOCkoyDgpLjgpYfgpLXgpL4g4KSo4KS/4KS14KSh4KS+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiLgpKrgpY3gpLDgpL/gpILgpJ/gpLAg4KS24KWL4KSn4KSkIOCkhuCkueClhyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50X3NlcnZpY2VzIiBtc2dpZD0iODU2MTI0NzcwNjQyMzMyNzk2NiI+IuCkleCli+Cko+CkpOCljeCkr+CkvuCkueClgCDgpK7gpYHgpKbgpY3gpLDgpKMg4KS44KWH4KS14KS+IOCkuOCkleCljeCkt+CkriDgpJXgpYfgpLLgpYfgpLLgpY3gpK/gpL4g4KSo4KS+4KS54KWA4KSkIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtbXMtck1ZL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtbXMtck1ZL3N0cmluZ3MueG1sCmluZGV4IGQ2YjVlYTcuLjE5YTZlNzYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLW1zLXJNWS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1tcy1yTVkvc3RyaW5ncy54bWwKQEAgLTU5LDYgKzU5LDggQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+IHBlbmNldGFrIGRpdGVtdWk8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkczwveGxpZmY6Zz4gcGVuY2V0YWsgZGl0ZW11aTwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+Ik1ha2x1bWF0IGxhbmp1dCB0ZW50YW5nIHBlbmNldGFrIGluaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IlBpbGloIHBlcmtoaWRtYXRhbiBjZXRhayI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iTWVuY2FyaSBwZW5jZXRhayI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50X3NlcnZpY2VzIiBtc2dpZD0iODU2MTI0NzcwNjQyMzMyNzk2NiI+IlBlcmtoaWRtYXRhbiBjZXRhayB0aWRhayBkaWRheWFrYW4iPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1teS1yTU0vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1teS1yTU0vc3RyaW5ncy54bWwKaW5kZXggYzNkYzQ5MC4uZDNjMDY3MiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtbXktck1NL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLW15LXJNTS9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOCBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4g4YCF4YCs4YCR4YCv4YCQ4YC64YCF4YCA4YC64YCZ4YC74YCs4YC4IOGAkOGAveGAseGAt+GAm+GAvuGAreGAleGAq+GAnuGAiuGAujwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRzPC94bGlmZjpnPuGAheGArOGAkeGAr+GAkOGAuuGAheGAgOGAuiDhgJDhgL3hgLHhgLfhgJvhgL7hgK3hgJXhgKvhgJ7hgIrhgLo8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiLhgKThgJXhgJvhgIThgLrhgJDhgKwg4YCh4YCA4YC84YCx4YCs4YCE4YC64YC4IOGAleGAreGAr+GAmeGAreGAr+GAnOGAseGAt+GAnOGArOGAleGAqyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IuGAheGArOGAkeGAr+GAkOGAuuGAm+GAlOGAuiDhgJ3hgJThgLrhgIbhgLHhgKzhgIThgLrhgJnhgL7hgK/hgIDhgK3hgK8g4YCb4YC94YCx4YC44YCB4YC74YCa4YC64YCV4YCrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiLhgIXhgKzhgJHhgK/hgJDhgLrhgIXhgIDhgLrhgJnhgLvhgKzhgLjhgIDhgK3hgK8g4YCb4YC+4YCs4YCU4YCx4YCV4YCr4YCe4YCK4YC6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRfc2VydmljZXMiIG1zZ2lkPSI4NTYxMjQ3NzA2NDIzMzI3OTY2Ij4i4YCV4YCv4YC24YCU4YC+4YCt4YCV4YC64YCR4YCv4YCQ4YC64YCa4YCw4YCb4YCx4YC4IOGAneGAlOGAuuGAhuGAseGArOGAhOGAuuGAmeGAvuGAr+GAmeGAu+GArOGAuCDhgJbhgL3hgIThgLfhgLrhgJnhgJHhgKzhgLjhgJXhgKsiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1uYi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLW5iL3N0cmluZ3MueG1sCmluZGV4IDk0NWJiZWEuLmMzNGU3YmMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLW5iL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLW5iL3N0cmluZ3MueG1sCkBAIC01OSw2ICs1OSw4IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiBza3JpdmVyZSBibGUgZnVubmV0PC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IkNPVU5UXzAiPiUxJHM8L3hsaWZmOmc+IHNrcml2ZXIgYmxlIGZ1bm5ldDwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiDigJMgPHhsaWZmOmcgaWQ9IlBSSU5URVJfREVTQ1JJUFRJT04iPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9pbmZvX2Rlc2MiIG1zZ2lkPSI3MTgxOTg4Nzg4OTkxNTgxNjU0Ij4iTWVyIGluZm9ybWFzam9uIG9tIGRlbm5lIHByaW50ZXJlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IlZlbGcgdXRza3JpZnRzdGplbmVzdGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IlPDuGtlciBldHRlciBza3JpdmVyZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50X3NlcnZpY2VzIiBtc2dpZD0iODU2MTI0NzcwNjQyMzMyNzk2NiI+IkluZ2VuIHV0c2tyaWZ0c3RqZW5lc3RlciBlciBzbMOldHQgcMOlIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtbmUtck5QL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtbmUtck5QL3N0cmluZ3MueG1sCmluZGV4IDQ1YmNjOTUuLmQxOTU5ZDkgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLW5lLXJOUC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1uZS1yTlAvc3RyaW5ncy54bWwKQEAgLTU5LDYgKzU5LDggQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+IOCkquCljeCksOCkv+CkqOCljeCkn+CksOCkueCksOClgiDgpK3gpYfgpJ/gpL/gpI88L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkczwveGxpZmY6Zz4g4KSq4KWN4KSw4KS/4KSo4KWN4KSf4KSwIOCkreClh+Ckn+Ckv+Ckr+ClizwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+IuCkr+CkuCDgpKrgpY3gpLDgpL/gpKjgpY3gpJ/gpLDgpJXgpYsg4KSs4KS+4KSw4KWH4KSu4KS+IOCkpeCkqiDgpJzgpL7gpKjgpJXgpL7gpLDgpYAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiLgpKrgpY3gpLDgpL/gpKjgpY3gpJ8g4KS44KWH4KS14KS+IOCkm+CkqOCljOCknyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IuCkquCljeCksOCkv+CkqOCljeCkn+CksOCkueCksOClgiDgpJbgpYvgpJzgpY3gpKbgpYgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiLgpJXgpYHgpKjgpYgg4KSq4KSo4KS/IOCkruClgeCkpuCljeCksOCkoyDgpLjgpYfgpLXgpL7gpLngpLDgpYIg4KS44KSV4KWN4KSw4KS/4KSvIOCkm+CliOCkqOCkqOCljSI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLW5sL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtbmwvc3RyaW5ncy54bWwKaW5kZXggNzZjODY1Ni4uNWRmMzI5OCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtbmwvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtbmwvc3RyaW5ncy54bWwKQEAgLTU5LDYgKzU5LDggQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+IHByaW50ZXJzIGdldm9uZGVuPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IkNPVU5UXzAiPiUxJHM8L3hsaWZmOmc+IHByaW50ZXIgZ2V2b25kZW48L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiJNZWVyIGluZm9ybWF0aWUgb3ZlciBkZXplIHByaW50ZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiJBZmRydWtzZXJ2aWNlIGtpZXplbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iUHJpbnRlcnMgem9la2VuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRfc2VydmljZXMiIG1zZ2lkPSI4NTYxMjQ3NzA2NDIzMzI3OTY2Ij4iR2VlbiBhZmRydWtzZXJ2aWNlcyBpbmdlc2NoYWtlbGQiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1wYS1ySU4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1wYS1ySU4vc3RyaW5ncy54bWwKaW5kZXggNDVmYTQ2MC4uNTdlOTk2OSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtcGEtcklOL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXBhLXJJTi9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOCBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+IOCoquCpjeCosOCov+CpsOCon+CosCDgqK7gqL/gqLLgqYc8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiDgqKrgqY3gqLDgqL/gqbDgqJ/gqLAg4Kiu4Ki/4Kiy4KmHPC9pdGVtPgogICAgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfZXh0ZW5kZWRfZGVzY3JpcHRpb25fdGVtcGxhdGUiIG1zZ2lkPSIxMzY2Njk5MjI3NzAzMzgxODc0Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX1NFUlZJQ0VfTEFCRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlBSSU5URVJfREVTQ1JJUFRJT04iPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9pbmZvX2Rlc2MiIG1zZ2lkPSI3MTgxOTg4Nzg4OTkxNTgxNjU0Ij4i4KiH4Ki4IOCoquCpjeCosOCov+CpsOCon+CosCDgqKzgqL7gqLDgqYcg4Ki54KmL4KiwIOConOCovuCoo+ColeCovuCosOCpgCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IuCoquCpjeCosOCov+CpsOConyDgqLjgqYfgqLXgqL4g4Kia4KmB4Kij4KmLIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiLgqKrgqY3gqLDgqL/gqbDgqJ/gqLAg4KiW4KmL4KicIOCosOCov+CoueCoviDgqLngqYgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiLgqKrgqY3gqLDgqL/gqbDgqJ8g4Ki44KmH4Ki14Ki+4Ki14Ki+4KiCIOCor+Cpi+ColyDgqKjgqLngqYDgqIIg4Kis4Kij4Ki+4KiI4KiG4KiCIOCol+CoiOCohuCogiI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXBsL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtcGwvc3RyaW5ncy54bWwKaW5kZXggZGYzZWU5MjQuLjQ0MzlhY2IgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXBsL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXBsL3N0cmluZ3MueG1sCkBAIC02MSw2ICs2MSw4IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPlpuYWxlemlvbm8gPHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+IGRydWthcmtpPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+Wm5hbGV6aW9ubyA8eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkczwveGxpZmY6Zz4gZHJ1a2Fya8SZPC9pdGVtPgogICAgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfZXh0ZW5kZWRfZGVzY3JpcHRpb25fdGVtcGxhdGUiIG1zZ2lkPSIxMzY2Njk5MjI3NzAzMzgxODc0Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX1NFUlZJQ0VfTEFCRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiJXacSZY2VqIGluZm9ybWFjamkgbyB0ZWogZHJ1a2FyY2UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiJXeWJpZXJ6IHVzxYJ1Z8SZIGRydWtvd2FuaWEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IlN6dWthbmllIGRydWthcmVrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRfc2VydmljZXMiIG1zZ2lkPSI4NTYxMjQ3NzA2NDIzMzI3OTY2Ij4iQnJhayB3xYLEhWN6b255Y2ggdXPFgnVnIGRydWtvd2FuaWEiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1wdC1yQlIvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1wdC1yQlIvc3RyaW5ncy54bWwKaW5kZXggOTBkYTcyYi4uNjNiYjg2OCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtcHQtckJSL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXB0LXJCUi9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOCBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+IGltcHJlc3NvcmFzIGVuY29udHJhZGFzPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4gaW1wcmVzc29yYXMgZW5jb250cmFkYXM8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiJNYWlzIGluZm9ybWHDp8O1ZXMgc29icmUgZXNzYSBpbXByZXNzb3JhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iU2VsZWNpb25lIG8gc2VydmnDp28gZGUgaW1wcmVzc8OjbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iUHJvY3VyYW5kbyBpbXByZXNzb3JhcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50X3NlcnZpY2VzIiBtc2dpZD0iODU2MTI0NzcwNjQyMzMyNzk2NiI+Ik5lbmh1bSBzZXJ2acOnbyBkZSBpbXByZXNzw6NvIGF0aXZhZG8iPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1wdC1yUFQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1wdC1yUFQvc3RyaW5ncy54bWwKaW5kZXggOTliYmQ4MS4uZDM2NGVmNCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtcHQtclBUL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXB0LXJQVC9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOCBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4gaW1wcmVzc29yYXMgZW5jb250cmFkYXM8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkczwveGxpZmY6Zz4gaW1wcmVzc29yYSBlbmNvbnRyYWRhPC9pdGVtPgogICAgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfZXh0ZW5kZWRfZGVzY3JpcHRpb25fdGVtcGxhdGUiIG1zZ2lkPSIxMzY2Njk5MjI3NzAzMzgxODc0Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX1NFUlZJQ0VfTEFCRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiJNYWlzIGluZm9ybWHDp8O1ZXMgYWNlcmNhIGRlc3RhIGltcHJlc3NvcmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiJFc2NvbGhlciBvIHNlcnZpw6dvIGRlIGltcHJlc3PDo28iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IkEgcHJvY3VyYXIgaW1wcmVzc29yYXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiJOZW5odW0gc2VydmnDp28gZGUgaW1wcmVzc8OjbyBhdGl2YWRvIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtcHQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1wdC9zdHJpbmdzLnhtbAppbmRleCA5MGRhNzJiLi42M2JiODY4IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1wdC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1wdC9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOCBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+IGltcHJlc3NvcmFzIGVuY29udHJhZGFzPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4gaW1wcmVzc29yYXMgZW5jb250cmFkYXM8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiJNYWlzIGluZm9ybWHDp8O1ZXMgc29icmUgZXNzYSBpbXByZXNzb3JhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iU2VsZWNpb25lIG8gc2VydmnDp28gZGUgaW1wcmVzc8OjbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iUHJvY3VyYW5kbyBpbXByZXNzb3JhcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50X3NlcnZpY2VzIiBtc2dpZD0iODU2MTI0NzcwNjQyMzMyNzk2NiI+Ik5lbmh1bSBzZXJ2acOnbyBkZSBpbXByZXNzw6NvIGF0aXZhZG8iPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1yby9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXJvL3N0cmluZ3MueG1sCmluZGV4IDRjZmI4YWIuLjUxZGZlN2EgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXJvL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXJvL3N0cmluZ3MueG1sCkBAIC02MCw2ICs2MCw4IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiBkZSBpbXByaW1hbnRlIGfEg3NpdGU8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkczwveGxpZmY6Zz4gaW1wcmltYW50xIMgZ8SDc2l0xIM8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4g4oCTIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+Ik1haSBtdWx0ZSBpbmZvcm1hyJtpaSBkZXNwcmUgYWNlYXN0xIMgaW1wcmltYW50xIMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiJBbGVnZcibaSBzZXJ2aWNpdWwgZGUgcHJpbnRhcmUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IlNlIGNhdXTEgyBpbXByaW1hbnRlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRfc2VydmljZXMiIG1zZ2lkPSI4NTYxMjQ3NzA2NDIzMzI3OTY2Ij4iTmljaXVuIHNlcnZpY2l1IGRlIHByaW50YXJlIGFjdGl2YXQiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1ydS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXJ1L3N0cmluZ3MueG1sCmluZGV4IGZiNDkzMzAuLjZiYTEwNDYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXJ1L3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXJ1L3N0cmluZ3MueG1sCkBAIC02MSw2ICs2MSw4IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ibWFueSI+0J3QsNC50LTQtdC90L4gPHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+wqDQv9GA0LjQvdGC0LXRgNC+0LI8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPtCd0LDQudC00LXQvdGLIDx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPsKg0L/RgNC40L3RgtC10YDQsDwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPsKg4oCTIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+ItCf0L7QtNGA0L7QsdC90YvQtSDRgdCy0LXQtNC10L3QuNGPINC+INC/0YDQuNC90YLQtdGA0LUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiLQktGL0LHQtdGA0LjRgtC1INGB0LvRg9C20LHRgyDQv9C10YfQsNGC0LgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+ItCf0L7QuNGB0Log0L/RgNC40L3RgtC10YDQvtCy4oCmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRfc2VydmljZXMiIG1zZ2lkPSI4NTYxMjQ3NzA2NDIzMzI3OTY2Ij4i0KHQu9GD0LbQsdGLINC/0LXRh9Cw0YLQuCDQvdC10LTQvtGB0YLRg9C/0L3RiyI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXNpLXJMSy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXNpLXJMSy9zdHJpbmdzLnhtbAppbmRleCBmYjZmMTQ1Li40OTA4ZWE1IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1zaS1yTEsvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtc2ktckxLL3N0cmluZ3MueG1sCkBAIC01OSw2ICs1OSw4IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj7gtrjgt5Tgtq/gt4rigI3gtrvgtqsg4La64Lax4LeK4Lat4LeK4oCN4La7IDx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiDgtprgt4og4LeD4Lec4La64LePIOC2nOC2seC3iuC2seC3jyDgtr3gtq/gt5I8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPuC2uOC3lOC2r+C3iuKAjeC2u+C2qyDgtrrgtrHgt4rgtq3gt4rigI3gtrsgPHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+IOC2muC3iiDgt4Pgt5zgtrrgt48g4Lac4Lax4LeK4Lax4LePIOC2veC2r+C3kjwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+IuC2uOC3meC2uCDgtrjgt5Tgtq/gt4rigI3gtrvgtqsg4La64Lax4LeK4Lat4LeK4oCN4La74La6IOC2nOC3kOC2sSDgtq3gt4Dgtq3gt4og4Lat4Lec4La74Lat4LeU4La74LeUIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4i4La44LeU4Lav4LeK4oCN4La74LarIOC3g+C3muC3gOC3j+C3gCDgtq3gt53gtrvgtrHgt4rgtrEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IuC2uOC3lOC2r+C3iuKAjeC2u+C2qyDgtrrgtrHgt4rgtq3gt4rigI3gtrsg4LeD4Lec4La64La44LeS4Lax4LeKIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRfc2VydmljZXMiIG1zZ2lkPSI4NTYxMjQ3NzA2NDIzMzI3OTY2Ij4i4La44LeU4Lav4LeK4oCN4La74LarIOC3g+C3muC3gOC3jyDgt4Pgtrbgtr0g4Lax4LeQ4LatIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtc2svc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1zay9zdHJpbmdzLnhtbAppbmRleCA2MDUyMzdiLi40MTgzNjNkIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1zay9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1zay9zdHJpbmdzLnhtbApAQCAtNjEsNiArNjEsOCBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5OYcWhbG8gc2EgPHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+IHRsYcSNaWFybsOtPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+TmHFoWxhIHNhIDx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRzPC94bGlmZjpnPiB0bGHEjWlhcmXFiDwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiDigJMgPHhsaWZmOmcgaWQ9IlBSSU5URVJfREVTQ1JJUFRJT04iPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9pbmZvX2Rlc2MiIG1zZ2lkPSI3MTgxOTg4Nzg4OTkxNTgxNjU0Ij4ixI5hbMWhaWUgaW5mb3Jtw6FjaWUgb8KgdGVqdG8gdGxhxI1pYXJuaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IlbDvWJlciB0bGHEjW92ZWogc2x1xb5ieSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iVnloxL5hZMOhdmFuaWUgdGxhxI1pYXJuw60iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiLFvWlhZG5lIHRsYcSNb3bDqSBzbHXFvmJ5IG5pZSBzw7ogYWt0aXZvdmFuw6kiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1zbC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXNsL3N0cmluZ3MueG1sCmluZGV4IDQ4ZDJlMWQuLmUyYmUxNjEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXNsL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXNsL3N0cmluZ3MueG1sCkBAIC02MSw2ICs2MSw4IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0iZmV3Ij48eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4gbmFqZGVuaSB0aXNrYWxuaWtpPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4gbmFqZGVuaWggdGlza2Fsbmlrb3Y8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4g4oCTIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+IlZlxI0gaW5mb3JtYWNpaiBvIHRlbSB0aXNrYWxuaWt1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iSXpiZXJpdGUgdGlza2Fsbm8gc3Rvcml0ZXYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+Iklza2FuamUgdGlza2Fsbmlrb3YiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiJOaSBvbW9nb8SNZW5paCB0aXNrYWxuaWggc3Rvcml0ZXYiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1zcS1yQUwvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1zcS1yQUwvc3RyaW5ncy54bWwKaW5kZXggNWJhNzJmZi4uZDVlYmYzMiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtc3EtckFML3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXNxLXJBTC9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOCBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5VIGdqZXTDq24gPHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+IHByaW50ZXLDqzwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPlUgZ2pldCA8eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkczwveGxpZmY6Zz4gcHJpbnRlcjwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+Ik3DqyBzaHVtw6sgaW5mb3JtYWNpb25lIG1iaSBrw6t0w6sgcHJpbnRlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IlpnamlkaCBzaMOrcmJpbWluIGUgcHJpbnRpbWl0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiJQbyBrw6tya29uIHDDq3IgcHJpbnRlcsOrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRfc2VydmljZXMiIG1zZ2lkPSI4NTYxMjQ3NzA2NDIzMzI3OTY2Ij4iTnVrIGthIHNow6tyYmltZSBwcmludGltaSB0w6sgYWt0aXZpenVhcmEiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1zci9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXNyL3N0cmluZ3MueG1sCmluZGV4IDdhMDRiOGQuLjE2NmU1ZGQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXNyL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXNyL3N0cmluZ3MueG1sCkBAIC02MCw2ICs2MCw4IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0iZmV3Ij7Qn9GA0L7QvdCw0ZLQtdC90LAg0YHRgyA8eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4g0YjRgtCw0LzQv9Cw0YfQsDwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+0J/RgNC+0L3QsNGS0LXQvdC+INGY0LUgPHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+INGI0YLQsNC80L/QsNGH0LA8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4g4oCTIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+ItCI0L7RiCDQuNC90YTQvtGA0LzQsNGG0LjRmNCwINC+INC+0LLQvtC8INGI0YLQsNC80L/QsNGH0YMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiLQmNC30LDQsdC10YDQuNGC0LUg0YPRgdC70YPQs9GDINGI0YLQsNC80L/QsNGa0LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+ItCf0YDQtdGC0YDQsNCz0LAg0YjRgtCw0LzQv9Cw0YfQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50X3NlcnZpY2VzIiBtc2dpZD0iODU2MTI0NzcwNjQyMzMyNzk2NiI+ItCd0LjRmNC10LTQvdCwINGD0YHQu9GD0LPQsCDRiNGC0LDQvNC/0LDRmtCwINC90LjRmNC1INC+0LzQvtCz0YPRm9C10L3QsCI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXN2L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtc3Yvc3RyaW5ncy54bWwKaW5kZXggZWM0YWQzMC4uMDMzZDU4MyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtc3Yvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtc3Yvc3RyaW5ncy54bWwKQEAgLTU5LDYgKzU5LDggQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+IHNrcml2YXJlIGhpdHRhZGVzPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IkNPVU5UXzAiPiUxJHM8L3hsaWZmOmc+IHNrcml2YXJlIGhpdHRhZGVzPC9pdGVtPgogICAgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfZXh0ZW5kZWRfZGVzY3JpcHRpb25fdGVtcGxhdGUiIG1zZ2lkPSIxMzY2Njk5MjI3NzAzMzgxODc0Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX1NFUlZJQ0VfTEFCRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiJNZXIgaW5mb3JtYXRpb24gb20gZGVuIGjDpHIgc2tyaXZhcmVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iVsOkbGogdXRza3JpZnRzdGrDpG5zdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iU8O2a2VyIGVmdGVyIHNrcml2YXJlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRfc2VydmljZXMiIG1zZ2lkPSI4NTYxMjQ3NzA2NDIzMzI3OTY2Ij4iSW5nYSB1dHNrcmlmdHN0asOkbnN0ZXIgaGFyIGFrdGl2ZXJhdHMiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1zdy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXN3L3N0cmluZ3MueG1sCmluZGV4IGVlZDMzNTYuLjBlMmRjZGQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXN3L3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXN3L3N0cmluZ3MueG1sCkBAIC01OSw2ICs1OSw4IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPlByaW50YSA8eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4gemltZXBhdGlrYW5hPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+UHJpbnRhIDx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRzPC94bGlmZjpnPiBpbWVwYXRpa2FuYTwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+Ik1hZWxlem8gemFpZGkga3VodXN1IHByaW50YSBoaWkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiJDaGFndWEgaHVkdW1hIHlhIHByaW50YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iSW5hdGFmdXRhIHByaW50YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50X3NlcnZpY2VzIiBtc2dpZD0iODU2MTI0NzcwNjQyMzMyNzk2NiI+Ikh1ZHVtYSB6YSBrdWNoYXBpc2hhIGhhemlqYXdhc2h3YSI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXRhLXJJTi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXRhLXJJTi9zdHJpbmdzLnhtbAppbmRleCBhOTg3OWMzLi4yZTkwZDM4IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy10YS1ySU4vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtdGEtcklOL3N0cmluZ3MueG1sCkBAIC01OSw2ICs1OSw4IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiDgrqrgrr/grrDgrr/grqPgr43grp/grrDgr43grpXgrrPgr40g4K6J4K6z4K+N4K6z4K6pPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IkNPVU5UXzAiPiUxJHM8L3hsaWZmOmc+IOCuquCuv+CusOCuv+Cuo+CvjeCun+CusOCvjSDgrongrrPgr43grrPgrqTgr4E8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiLgrofgrqjgr43grqTgrqrgr40g4K6q4K6/4K6w4K6/4K6j4K+N4K6f4K6w4K+NIOCuquCuseCvjeCuseCuv+CuryDgrpXgr4Lgrp/gr4HgrqTgrrLgr40g4K6k4K6V4K614K6y4K+NIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4i4K6F4K6a4K+N4K6a4K+B4K6q4K+NIOCuquCviuCuseCuv+Cur+CviOCupOCvjSDgrqTgr4fgrrDgr43grrXgr4Hgrprgr4bgrq/gr43grq/grrXgr4Hgrq7gr40iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IuCuheCumuCvjeCumuCvgeCuquCvjeCuquCviuCuseCuv+CuleCus+CviOCupOCvjSDgrqTgr4fgrp/gr4HgrpXgrr/grrHgrqTgr4EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiLgroXgrprgr43grprgr4Hgrqrgr40g4K6q4K+K4K6x4K6/4K6V4K6z4K+NIOCuh+CusuCvjeCusuCviCI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXRlLXJJTi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXRlLXJJTi9zdHJpbmdzLnhtbAppbmRleCA5MDljYjkwLi42YmRiZDVjIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy10ZS1ySU4vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtdGUtcklOL3N0cmluZ3MueG1sCkBAIC01OSw2ICs1OSw4IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiDgsKrgsY3gsLDgsL/gsILgsJ/gsLDgsY3igIzgsLLgsYEg4LCV4LCo4LGB4LCX4LGK4LCo4LCs4LCh4LGN4LCh4LC+4LCv4LC/PC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IkNPVU5UXzAiPiUxJHM8L3hsaWZmOmc+IOCwquCxjeCwsOCwv+CwguCwn+CwsOCxjSDgsJXgsKjgsYHgsJfgsYrgsKjgsKzgsKHgsL/gsILgsKbgsL88L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiLgsIgg4LCq4LGN4LCw4LC/4LCC4LCf4LCw4LGNIOCwl+CxgeCwsOCwv+CwguCwmuCwvyDgsK7gsLDgsL/gsILgsKQg4LC44LCu4LC+4LCa4LC+4LCw4LCCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4i4LCu4LGB4LCm4LGN4LCw4LCjIOCwuOCxh+CwteCwqOCxgSDgsI7gsILgsJrgsYHgsJXgsYvgsILgsKHgsL8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IuCwquCxjeCwsOCwv+CwguCwn+CwsOCxjeKAjOCwsiDgsJXgsYvgsLjgsIIg4LC24LGL4LCn4LC/4LC44LGN4LCk4LGL4LCC4LCm4LC/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRfc2VydmljZXMiIG1zZ2lkPSI4NTYxMjQ3NzA2NDIzMzI3OTY2Ij4i4LCu4LGB4LCm4LGN4LCw4LCjIOCwuOCxh+CwteCwsuCxgSDgsI/gsLXgsYAg4LCq4LGN4LCw4LC+4LCw4LCC4LCt4LC/4LCC4LCa4LCy4LGH4LCm4LGBIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtdGgvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy10aC9zdHJpbmdzLnhtbAppbmRleCBjMzNhNzU5Li5hNTgxMzU3IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy10aC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy10aC9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOCBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj7guJ7guJrguYDguITguKPguLfguYjguK3guIfguJ7guLTguKHguJ7guYwgPHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+IOC5gOC4hOC4o+C4t+C5iOC4reC4hzwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPuC4nuC4muC5gOC4hOC4o+C4t+C5iOC4reC4h+C4nuC4tOC4oeC4nuC5jCA8eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkczwveGxpZmY6Zz4g4LmA4LiE4Lij4Li34LmI4Lit4LiHPC9pdGVtPgogICAgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfZXh0ZW5kZWRfZGVzY3JpcHRpb25fdGVtcGxhdGUiIG1zZ2lkPSIxMzY2Njk5MjI3NzAzMzgxODc0Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX1NFUlZJQ0VfTEFCRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlBSSU5URVJfREVTQ1JJUFRJT04iPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9pbmZvX2Rlc2MiIG1zZ2lkPSI3MTgxOTg4Nzg4OTkxNTgxNjU0Ij4i4LiC4LmJ4Lit4Lih4Li54Lil4LmA4Lie4Li04LmI4Lih4LmA4LiV4Li04Lih4LmA4LiB4Li14LmI4Lii4Lin4LiB4Lix4Lia4LmA4LiE4Lij4Li34LmI4Lit4LiH4Lie4Li04Lih4Lie4LmM4LiZ4Li14LmJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4i4LmA4Lil4Li34Lit4LiB4Lia4Lij4Li04LiB4Liy4Lij4Lie4Li04Lih4Lie4LmMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiLguIHguLPguKXguLHguIfguITguYnguJnguKvguLLguYDguITguKPguLfguYjguK3guIfguJ7guLTguKHguJ7guYwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiLguYTguKHguYjguYTguJTguYnguYDguJvguLTguJTguYPguIrguYnguJrguKPguLTguIHguLLguKPguJ7guLTguKHguJ7guYwiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy10bC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXRsL3N0cmluZ3MueG1sCmluZGV4IDU0NWJkYTQuLjMyNWNlOGMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXRsL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXRsL3N0cmluZ3MueG1sCkBAIC01OSw2ICs1OSw4IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4gbmFraXRhbmcgcHJpbnRlcjwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+IG5hIG5ha2l0YW5nIHByaW50ZXI8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiJIaWdpdCBwYW5nIGltcG9ybWFzeW9uIHR1bmdrb2wgc2EgcHJpbnRlciBuYSBpdG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiJQdW1pbGkgbmcgc2VyYmlzeW8gbmcgcGFnLXByaW50Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiJOYWdoYWhhbmFwIG5nIG1nYSBwcmludGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRfc2VydmljZXMiIG1zZ2lkPSI4NTYxMjQ3NzA2NDIzMzI3OTY2Ij4iV2FsYW5nIG1nYSBuYWthLWVuYWJsZSBuYSBzZXJiaXN5byBzYSBwYWctcHJpbnQiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy10ci9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXRyL3N0cmluZ3MueG1sCmluZGV4IGExM2YyZGYuLmQ5NDU5NzkgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXRyL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXRyL3N0cmluZ3MueG1sCkBAIC01OSw2ICs1OSw4IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiB5YXrEsWPEsSBidWx1bmR1PC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IkNPVU5UXzAiPiUxJHM8L3hsaWZmOmc+IHlhesSxY8SxIGJ1bHVuZHU8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiJCdSB5YXrEsWPEsXlsYSBpbGdpbGkgZGFoYSBmYXpsYSBiaWxnaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IllhemTEsXJtYSBoaXptZXRpbmkgc2XDp2luIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiJZYXrEsWPEsWxhciBhcmFuxLF5b3IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiJFdGtpbiB5YXrEsWPEsSBoaXptZXRpIHlvayI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXVrL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtdWsvc3RyaW5ncy54bWwKaW5kZXggZGVmMjFhYi4uZmZkZmRlMCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtdWsvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtdWsvc3RyaW5ncy54bWwKQEAgLTYxLDYgKzYxLDggQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJtYW55Ij7Ql9C90LDQudC00LXQvdC+IDx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiDQv9GA0LjQvdGC0LXRgNGW0LI8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPtCX0L3QsNC50LTQtdC90L4gPHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+INC/0YDQuNC90YLQtdGA0ZbQsjwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiDigJMgPHhsaWZmOmcgaWQ9IlBSSU5URVJfREVTQ1JJUFRJT04iPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9pbmZvX2Rlc2MiIG1zZ2lkPSI3MTgxOTg4Nzg4OTkxNTgxNjU0Ij4i0JTQvtC60LvQsNC00L3RltGI0LUg0L/RgNC+INGG0LXQuSDQv9GA0LjQvdGC0LXRgCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+ItCS0LjQsdGA0LDRgtC4INGB0LvRg9C20LHRgyDQtNGA0YPQutGDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiLQn9C+0YjRg9C6INC/0YDQuNC90YLQtdGA0ZbQsiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50X3NlcnZpY2VzIiBtc2dpZD0iODU2MTI0NzcwNjQyMzMyNzk2NiI+ItCd0LXQvNCw0ZQg0YHQu9GD0LbQsSDQtNGA0YPQutGDIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtdXItclBLL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtdXItclBLL3N0cmluZ3MueG1sCmluZGV4IGMwMzFhYmEuLjcyYTZhYjlmIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy11ci1yUEsvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtdXItclBLL3N0cmluZ3MueG1sCkBAIC01OSw2ICs1OSw4IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiDZvtix2YbZudix2LIg2YXZhNuSPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IkNPVU5UXzAiPiUxJHM8L3hsaWZmOmc+INm+2LHZhtm52LEg2YXZhNinPC9pdGVtPgogICAgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfZXh0ZW5kZWRfZGVzY3JpcHRpb25fdGVtcGxhdGUiIG1zZ2lkPSIxMzY2Njk5MjI3NzAzMzgxODc0Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX1NFUlZJQ0VfTEFCRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlBSSU5URVJfREVTQ1JJUFRJT04iPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9pbmZvX2Rlc2MiIG1zZ2lkPSI3MTgxOTg4Nzg4OTkxNTgxNjU0Ij4i2KfYsyDZvtix2YbZudixINqp25Ig2KjYp9ix25Ig2YXbjNq6INmF2LLbjNivINmF2LnZhNmI2YXYp9iqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4i2b7YsdmG2bkg2LPYsdmI2LMg2YXZhtiq2K7YqCDaqdix24zauiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4i2b7YsdmG2bnYsdiyINiq2YTYp9i0INqp2LEg2LHbgdinINuB25IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiLaqdmI2KbbjCDZvtix2YbZuSDYs9ix2YjYsyDZgdi52KfZhCDZhtuB24zauiI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXV6LXJVWi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXV6LXJVWi9zdHJpbmdzLnhtbAppbmRleCA1OWRjY2E5Li5jN2I0MjYzIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy11ei1yVVovc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtdXotclVaL3N0cmluZ3MueG1sCkBAIC01OSw2ICs1OSw4IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiB0YSBwcmludGVyIHRvcGlsZGk8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkczwveGxpZmY6Zz4gdGEgcHJpbnRlciB0b3BpbGRpPC9pdGVtPgogICAgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfZXh0ZW5kZWRfZGVzY3JpcHRpb25fdGVtcGxhdGUiIG1zZ2lkPSIxMzY2Njk5MjI3NzAzMzgxODc0Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX1NFUlZJQ0VfTEFCRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiJQcmludGVyIGhhcWlkYSBiYXRhZnNpbCBtYeKAmWx1bW90Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iQ2hvcCBldGlzaCB4aXptYXRpbmkgdGFubGFuZyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iUHJpbnRlcmxhciBxaWRpcmlsbW9xZGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiJIZWNoIHFheXNpIGNob3AgZXRpc2ggeGl6bWF0aSB5b3FpbG1hZ2FuIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtdmkvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy12aS9zdHJpbmdzLnhtbAppbmRleCAwMTY3ODIzLi43NzFkNTdjIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy12aS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy12aS9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOCBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj7EkMOjIHTDrG0gdGjhuqV5IDx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiBtw6F5IGluPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+xJDDoyB0w6xtIHRo4bqleSA8eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkczwveGxpZmY6Zz4gbcOheSBpbjwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+IlRow7RuZyB0aW4ga2jDoWMgduG7gSBtw6F5IGluIG7DoHkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiJDaOG7jW4gZOG7i2NoIHbhu6UgaW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IsSQYW5nIHTDrG0ga2nhur9tIG3DoXkgaW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiJDaMawYSBrw61jaCBob+G6oXQgZOG7i2NoIHbhu6UgaW4gbsOgbyI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXpoLXJDTi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXpoLXJDTi9zdHJpbmdzLnhtbAppbmRleCBhNzRlOTk0Li5iZWE5MWQ3IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy16aC1yQ04vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtemgtckNOL3N0cmluZ3MueG1sCkBAIC01OSw2ICs1OSw4IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPuaJvuWIsCA8eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4g5Y+w5omT5Y2w5py6PC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+5om+5YiwIDx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRzPC94bGlmZjpnPiDlj7DmiZPljbDmnLo8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiLlhbPkuo7mraTmiZPljbDmnLrnmoTmm7TlpJrkv6Hmga8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiLpgInmi6nmiZPljbDmnI3liqEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+Iuato+WcqOaQnOe0ouaJk+WNsOacuiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50X3NlcnZpY2VzIiBtc2dpZD0iODU2MTI0NzcwNjQyMzMyNzk2NiI+IuacquWQr+eUqOS7u+S9leaJk+WNsOacjeWKoSI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXpoLXJISy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXpoLXJISy9zdHJpbmdzLnhtbAppbmRleCAzNTY0M2YzLi40ZmJlZjBkIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy16aC1ySEsvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtemgtckhLL3N0cmluZ3MueG1sCkBAIC01OSw2ICs1OSw4IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPuW3suaJvuWIsCA8eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4g6YOo5omT5Y2w5qmfPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+5bey5om+5YiwIDx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRzPC94bGlmZjpnPiDpg6jmiZPljbDmqZ88L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiLmraTmiZPljbDmqZ/oqbPmg4UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiLpgbjmk4fliJfljbDmnI3li5kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+Iuato+WcqOaQnOWwi+aJk+WNsOapnyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50X3NlcnZpY2VzIiBtc2dpZD0iODU2MTI0NzcwNjQyMzMyNzk2NiI+IuaykuacieW3suWVn+eUqOeahOWIl+WNsOacjeWLmSI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXpoLXJUVy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXpoLXJUVy9zdHJpbmdzLnhtbAppbmRleCA0MGM0NGZmLi4yZmRjYWFjIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy16aC1yVFcvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtemgtclRXL3N0cmluZ3MueG1sCkBAIC01OSw2ICs1OSw4IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPuaJvuWIsCA8eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4g5Y+w5Y2w6KGo5qmfPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+5om+5YiwIDx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRzPC94bGlmZjpnPiDlj7DljbDooajmqZ88L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiLmn6XnnIvpgJnlj7DljbDooajmqZ/nmoToqbPntLDos4foqIoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiLpgbjmk4fliJfljbDmnI3li5kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+Iuato+WcqOaQnOWwi+WNsOihqOapnyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50X3NlcnZpY2VzIiBtc2dpZD0iODU2MTI0NzcwNjQyMzMyNzk2NiI+IuacquWVn+eUqOS7u+S9leWIl+WNsOacjeWLmSI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXp1L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtenUvc3RyaW5ncy54bWwKaW5kZXggZTBmNmYzNC4uOTI1OTVhYSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtenUvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtenUvc3RyaW5ncy54bWwKQEAgLTU5LDYgKzU5LDggQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiBhbWFwaHJpbnRhIGF0aG9sYWtlbGU8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiBhbWFwaHJpbnRhIGF0aG9sYWtlbGU8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiJPbHVueWUgdWx3YXppIG1heWVsYW5hIG5hbGUgcGhyaW50YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IktoZXRoYSBpc2V2aXNpIHllcGhyaW50YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iSXNlc2hhIGFtYXBocmludGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiJBbWFzZXZpc2kgZXBocmludGEgYWthdnVsaXdlLiI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwKaW5kZXggNmQ4MTc4OC4uOTdhN2JmZiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwKQEAgLTE0NCw2ICsxNDQsMTIgQEAKICAgICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iY291bnQiIGV4YW1wbGU9IjIiPiUxJHM8L3hsaWZmOmc+IHByaW50ZXJzIGZvdW5kPC9pdGVtPgogICAgIDwvcGx1cmFscz4KIAorICAgIDwhLS0gVGVtcGxhdGUgZm9yIGFuIGV4dGVuZGVkIGRlc2NyaXB0aW9uIG9mIGEgcHJpbnRlci4gW0NIQVIgTElNSVQ9NTBdIC0tPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSI+PHhsaWZmOmcgaWQ9InByaW50X3NlcnZpY2VfbGFiZWwiIGV4YW1wbGU9IkNhbm9uIFByaW50IFNlcnZpY2UiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9InByaW50ZXJfZGVzY3JpcHRpb24iIGV4YW1wbGU9IlByaW50ZXIgdW5kZXIgdGhlIHN0YWlycyI+JTIkczwveGxpZmY6Zz48L3N0cmluZz4KKworICAgIDwhLS0gRGVzY3JpcHRpb24gb2YgcHJpbnRlciBpbmZvIGljb24uIFtDSEFSIExJTUlUPTUwXSAtLT4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIj5Nb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgcHJpbnRlcjwvc3RyaW5nPgorCiAgICAgPCEtLSBBZGQgcHJpbnRlciBkaWFsb2cgIC0tPgogCiAgICAgPCEtLSBUaXRsZSBmb3IgdGhlIGFsZXJ0IGRpYWxvZyBmb3Igc2VsZWN0aW5nIGEgcHJpbnQgc2VydmljZS4gW0NIQVIgTElNSVQ9NTBdIC0tPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3NyYy9jb20vYW5kcm9pZC9wcmludHNwb29sZXIvbW9kZWwvQ3VzdG9tUHJpbnRlckljb25DYWNoZS5qYXZhIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3NyYy9jb20vYW5kcm9pZC9wcmludHNwb29sZXIvbW9kZWwvQ3VzdG9tUHJpbnRlckljb25DYWNoZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyNzQyNjgKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvc3JjL2NvbS9hbmRyb2lkL3ByaW50c3Bvb2xlci9tb2RlbC9DdXN0b21QcmludGVySWNvbkNhY2hlLmphdmEKQEAgLTAsMCArMSwxNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLnByaW50c3Bvb2xlci5tb2RlbDsKKworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5Ob25OdWxsOworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkljb247CitpbXBvcnQgYW5kcm9pZC5wcmludC5QcmludGVySWQ7CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247CitpbXBvcnQgamF2YS5zZWN1cml0eS5NZXNzYWdlRGlnZXN0OworaW1wb3J0IGphdmEuc2VjdXJpdHkuTm9TdWNoQWxnb3JpdGhtRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5Tb3J0ZWRNYXA7CitpbXBvcnQgamF2YS51dGlsLlRyZWVNYXA7CisKKy8qKgorICogQSBmaXhlZCBzaXplIGNhY2hlIGZvciBjdXN0b20gcHJpbnRlciBpY29ucy4gT2xkIGljb25zIGdldCByZW1vdmVkIHdpdGggYSBsYXN0IHJlY2VudGx5IHVzZWQKKyAqIHBvbGljeS4KKyAqLworcHVibGljIGNsYXNzIEN1c3RvbVByaW50ZXJJY29uQ2FjaGUgeworCisgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIExPR19UQUcgPSAiQ3VzdG9tUHJpbnRlckljb25DYWNoZSI7CisKKyAgICAvKiogTWF4aW11bSBudW1iZXIgb2YgaWNvbnMgaW4gdGhlIGNhY2hlICovCisgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IE1BWF9TSVpFID0gMTAyNDsKKworICAgIC8qKiBEaXJlY3RvcnkgdXNlZCB0byBwZXJzaXN0IHN0YXRlIGFuZCBpY29ucyAqLworICAgIHByaXZhdGUgZmluYWwgRmlsZSBtQ2FjaGVEaXJlY3Rvcnk7CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYSBuZXcgaWNvbiBjYWNoZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgQ3VzdG9tUHJpbnRlckljb25DYWNoZShATm9uTnVsbCBGaWxlIGNhY2hlRGlyZWN0b3J5KSB7CisgICAgICAgIG1DYWNoZURpcmVjdG9yeSA9IG5ldyBGaWxlKGNhY2hlRGlyZWN0b3J5LCAiaWNvbnMiKTsKKyAgICAgICAgaWYgKCFtQ2FjaGVEaXJlY3RvcnkuZXhpc3RzKCkpIHsKKyAgICAgICAgICAgIG1DYWNoZURpcmVjdG9yeS5ta2RpcigpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBmaWxlIG5hbWUgdG8gYmUgdXNlZCBmb3IgdGhlIGljb24gb2YgYSBwcmludGVyCisgICAgICoKKyAgICAgKiBAcGFyYW0gcHJpbnRlcklkIHRoZSBpZCBvZiB0aGUgcHJpbnRlcgorICAgICAqCisgICAgICogQHJldHVybiBUaGUgZmlsZSB0byBiZSB1c2VkIGZvciB0aGUgaWNvbiBvZiB0aGUgcHJpbnRlcgorICAgICAqLworICAgIHByaXZhdGUgQE51bGxhYmxlIEZpbGUgZ2V0SWNvbkZpbGVOYW1lKEBOb25OdWxsIFByaW50ZXJJZCBwcmludGVySWQpIHsKKyAgICAgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcihwcmludGVySWQuZ2V0U2VydmljZU5hbWUoKS5nZXRQYWNrYWdlTmFtZSgpKTsKKyAgICAgICAgc2IuYXBwZW5kKCItIik7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIE1lc3NhZ2VEaWdlc3QgbWQgPSBNZXNzYWdlRGlnZXN0LmdldEluc3RhbmNlKCJTSEEtMSIpOworICAgICAgICAgICAgbWQudXBkYXRlKAorICAgICAgICAgICAgICAgICAgICAocHJpbnRlcklkLmdldFNlcnZpY2VOYW1lKCkuZ2V0Q2xhc3NOYW1lKCkgKyAiOiIgKyBwcmludGVySWQuZ2V0TG9jYWxJZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRCeXRlcygiVVRGLTE2IikpOworICAgICAgICAgICAgc2IuYXBwZW5kKFN0cmluZy5mb3JtYXQoIiUjMDQweCIsIG5ldyBqYXZhLm1hdGguQmlnSW50ZWdlcigxLCBtZC5kaWdlc3QoKSkpKTsKKyAgICAgICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbnxOb1N1Y2hBbGdvcml0aG1FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgTG9nLmUoTE9HX1RBRywgIkNvdWxkIG5vdCBjb21wdXRlIGN1c3RvbSBwcmludGVyIGljb24gZmlsZSBuYW1lIiwgZSk7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBuZXcgRmlsZShtQ2FjaGVEaXJlY3RvcnksIHNiLnRvU3RyaW5nKCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldCB0aGUge0BsaW5rIEljb259IHRvIGJlIHVzZWQgYXMgYSBjdXN0b20gaWNvbiBmb3IgdGhlIHByaW50ZXIuIElmIG5vdCBhdmFpbGFibGUgcmVxdWVzdAorICAgICAqIHRoZSBpY29uIHRvIGJlIGxvYWRlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBwcmludGVySWQgdGhlIHByaW50ZXIgdGhlIGljb24gYmVsb25ncyB0bworICAgICAqIEByZXR1cm4gdGhlIHtAbGluayBJY29ufSBpZiBhbHJlYWR5IGF2YWlsYWJsZSBvciBudWxsIGlmIGljb24gaXMgbm90IGxvYWRlZCB5ZXQKKyAgICAgKi8KKyAgICBwdWJsaWMgc3luY2hyb25pemVkIEBOdWxsYWJsZSBJY29uIGdldEljb24oQE5vbk51bGwgUHJpbnRlcklkIHByaW50ZXJJZCkgeworICAgICAgICBJY29uIGljb247CisKKyAgICAgICAgRmlsZSBpY29uRmlsZSA9IGdldEljb25GaWxlTmFtZShwcmludGVySWQpOworICAgICAgICBpZiAoaWNvbkZpbGUgIT0gbnVsbCAmJiBpY29uRmlsZS5leGlzdHMoKSkgeworICAgICAgICAgICAgdHJ5IChGaWxlSW5wdXRTdHJlYW0gaXMgPSBuZXcgRmlsZUlucHV0U3RyZWFtKGljb25GaWxlKSkgeworICAgICAgICAgICAgICAgIGljb24gPSBJY29uLmNyZWF0ZUZyb21TdHJlYW0oaXMpOworICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIGljb24gPSBudWxsOworICAgICAgICAgICAgICAgIExvZy5lKExPR19UQUcsICJDb3VsZCBub3QgcmVhZCBpY29uIGZyb20gIiArIGljb25GaWxlLCBlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVG91Y2ggZmlsZSBzbyB0aGF0IGl0IGlzIHRoZSBub3QgbGlrZWx5IHRvIGJlIHJlbW92ZWQKKyAgICAgICAgICAgIGljb25GaWxlLnNldExhc3RNb2RpZmllZChTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpY29uID0gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBpY29uOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlbW92ZSBvbGQgaWNvbnMgc28gdGhhdCBvbmx5IGJldHdlZW4gbnVtRmlsZXNUb0tlZXAgYW5kIHR3aWNlIGFzIG1hbnkgaWNvbnMgYXJlIGxlZnQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbnVtRmlsZXNUb0tlZXAgdGhlIG51bWJlciBvZiBpY29ucyB0byBrZWVwCisgICAgICovCisgICAgcHVibGljIHZvaWQgcmVtb3ZlT2xkRmlsZXMoaW50IG51bUZpbGVzVG9LZWVwKSB7CisgICAgICAgIEZpbGUgZmlsZXNbXSA9IG1DYWNoZURpcmVjdG9yeS5saXN0RmlsZXMoKTsKKworICAgICAgICAvLyBUbyByZWR1Y2UgdGhlIG51bWJlciBvZiBzaHJpbmsgb3BlcmF0aW9ucywgbGV0IHRoZSBjYWNoZSBncm93IHRvIHR3aWNlIHRoZSBtYXggc2l6ZQorICAgICAgICBpZiAoZmlsZXMubGVuZ3RoID4gbnVtRmlsZXNUb0tlZXAgKiAyKSB7CisgICAgICAgICAgICBTb3J0ZWRNYXA8TG9uZywgRmlsZT4gc29ydGVkRmlsZXMgPSBuZXcgVHJlZU1hcDw+KCk7CisKKyAgICAgICAgICAgIGZvciAoRmlsZSBmIDogZmlsZXMpIHsKKyAgICAgICAgICAgICAgICBzb3J0ZWRGaWxlcy5wdXQoZi5sYXN0TW9kaWZpZWQoKSwgZik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHdoaWxlIChzb3J0ZWRGaWxlcy5zaXplKCkgPiBudW1GaWxlc1RvS2VlcCkgeworICAgICAgICAgICAgICAgIHNvcnRlZEZpbGVzLnJlbW92ZShzb3J0ZWRGaWxlcy5maXJzdEtleSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEhhbmRsZSB0aGF0IGEgY3VzdG9tIGljb24gZm9yIGEgcHJpbnRlciB3YXMgbG9hZGVkCisgICAgICoKKyAgICAgKiBAcGFyYW0gcHJpbnRlcklkIHRoZSBpZCBvZiB0aGUgcHJpbnRlciB0aGUgaWNvbiBiZWxvbmdzIHRvCisgICAgICogQHBhcmFtIGljb24gdGhlIGljb24gdGhhdCB3YXMgbG9hZGVkCisgICAgICovCisgICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIG9uQ3VzdG9tUHJpbnRlckljb25Mb2FkZWQoQE5vbk51bGwgUHJpbnRlcklkIHByaW50ZXJJZCwKKyAgICAgICAgICAgIEBOdWxsYWJsZSBJY29uIGljb24pIHsKKyAgICAgICAgRmlsZSBpY29uRmlsZSA9IGdldEljb25GaWxlTmFtZShwcmludGVySWQpOworCisgICAgICAgIGlmIChpY29uRmlsZSA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB0cnkgKEZpbGVPdXRwdXRTdHJlYW0gb3MgPSBuZXcgRmlsZU91dHB1dFN0cmVhbShpY29uRmlsZSkpIHsKKyAgICAgICAgICAgIGljb24ud3JpdGVUb1N0cmVhbShvcyk7CisgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIExvZy5lKExPR19UQUcsICJDb3VsZCBub3Qgd3JpdGUgaWNvbiBmb3IgIiArIHByaW50ZXJJZCArICIgdG8gc3RvcmFnZSIsIGUpOworICAgICAgICB9CisKKyAgICAgICAgcmVtb3ZlT2xkRmlsZXMoTUFYX1NJWkUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENsZWFyIGFsbCBwZXJzaXN0ZWQgYW5kIG5vbi1wZXJzaXN0ZWQgc3RhdGUgZnJvbSB0aGlzIGNhY2hlLgorICAgICAqLworICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBjbGVhcigpIHsKKyAgICAgICAgZm9yIChGaWxlIGYgOiBtQ2FjaGVEaXJlY3RvcnkubGlzdEZpbGVzKCkpIHsKKyAgICAgICAgICAgIGYuZGVsZXRlKCk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvc3JjL2NvbS9hbmRyb2lkL3ByaW50c3Bvb2xlci9tb2RlbC9Ob3RpZmljYXRpb25Db250cm9sbGVyLmphdmEgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvc3JjL2NvbS9hbmRyb2lkL3ByaW50c3Bvb2xlci9tb2RlbC9Ob3RpZmljYXRpb25Db250cm9sbGVyLmphdmEKaW5kZXggODJmZDUxMi4uM2RjNWQ3ZSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3NyYy9jb20vYW5kcm9pZC9wcmludHNwb29sZXIvbW9kZWwvTm90aWZpY2F0aW9uQ29udHJvbGxlci5qYXZhCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9zcmMvY29tL2FuZHJvaWQvcHJpbnRzcG9vbGVyL21vZGVsL05vdGlmaWNhdGlvbkNvbnRyb2xsZXIuamF2YQpAQCAtMTU4LDExICsxNTgsMTQgQEAKICAgICAgICAgICAgIGJ1aWxkZXIuYWRkQWN0aW9uKHNlY29uZEFjdGlvbik7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAocHJpbnRKb2IuZ2V0U3RhdGUoKSA9PSBQcmludEpvYkluZm8uU1RBVEVfU1RBUlRFRCkgeworICAgICAgICBpZiAocHJpbnRKb2IuZ2V0U3RhdGUoKSA9PSBQcmludEpvYkluZm8uU1RBVEVfU1RBUlRFRAorICAgICAgICAgICAgICAgIHx8IHByaW50Sm9iLmdldFN0YXRlKCkgPT0gUHJpbnRKb2JJbmZvLlNUQVRFX1FVRVVFRCkgewogICAgICAgICAgICAgZmxvYXQgcHJvZ3Jlc3MgPSBwcmludEpvYi5nZXRQcm9ncmVzcygpOwogICAgICAgICAgICAgaWYgKHByb2dyZXNzID49IDApIHsKLSAgICAgICAgICAgICAgICBidWlsZGVyLnNldFByb2dyZXNzKEludGVnZXIuTUFYX1ZBTFVFLCAoaW50KShJbnRlZ2VyLk1BWF9WQUxVRSAqIHByb2dyZXNzKSwKKyAgICAgICAgICAgICAgICBidWlsZGVyLnNldFByb2dyZXNzKEludGVnZXIuTUFYX1ZBTFVFLCAoaW50KSAoSW50ZWdlci5NQVhfVkFMVUUgKiBwcm9ncmVzcyksCiAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJ1aWxkZXIuc2V0UHJvZ3Jlc3MoSW50ZWdlci5NQVhfVkFMVUUsIDAsIHRydWUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9zcmMvY29tL2FuZHJvaWQvcHJpbnRzcG9vbGVyL21vZGVsL1BhZ2VDb250ZW50UmVwb3NpdG9yeS5qYXZhIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3NyYy9jb20vYW5kcm9pZC9wcmludHNwb29sZXIvbW9kZWwvUGFnZUNvbnRlbnRSZXBvc2l0b3J5LmphdmEKaW5kZXggZWE2MjgxZC4uYWM5N2FkMCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3NyYy9jb20vYW5kcm9pZC9wcmludHNwb29sZXIvbW9kZWwvUGFnZUNvbnRlbnRSZXBvc2l0b3J5LmphdmEKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3NyYy9jb20vYW5kcm9pZC9wcmludHNwb29sZXIvbW9kZWwvUGFnZUNvbnRlbnRSZXBvc2l0b3J5LmphdmEKQEAgLTExNiw2ICsxMTYsNyBAQAogICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKyAgICAgICAgbUNsb3NlR3VhcmQuY2xvc2UoKTsKIAogICAgICAgICBtU3RhdGUgPSBTVEFURV9ERVNUUk9ZRUQ7CiAgICAgICAgIGlmIChERUJVRykgewpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3NyYy9jb20vYW5kcm9pZC9wcmludHNwb29sZXIvbW9kZWwvUHJpbnRTcG9vbGVyU2VydmljZS5qYXZhIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3NyYy9jb20vYW5kcm9pZC9wcmludHNwb29sZXIvbW9kZWwvUHJpbnRTcG9vbGVyU2VydmljZS5qYXZhCmluZGV4IDkwZWVmODMuLjQ5NmEwYjAgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9zcmMvY29tL2FuZHJvaWQvcHJpbnRzcG9vbGVyL21vZGVsL1ByaW50U3Bvb2xlclNlcnZpY2UuamF2YQorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvc3JjL2NvbS9hbmRyb2lkL3ByaW50c3Bvb2xlci9tb2RlbC9QcmludFNwb29sZXJTZXJ2aWNlLmphdmEKQEAgLTIzLDYgKzIzLDcgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuSWNvbjsKIGltcG9ydCBhbmRyb2lkLm9zLkFzeW5jVGFzazsKIGltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKIGltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CkBAIC0xMDksNiArMTEwLDkgQEAKIAogICAgIHByaXZhdGUgTm90aWZpY2F0aW9uQ29udHJvbGxlciBtTm90aWZpY2F0aW9uQ29udHJvbGxlcjsKIAorICAgIC8qKiBDYWNoZSBmb3IgY3VzdG9tIHByaW50ZXIgaWNvbnMgbG9hZGVkIGZyb20gdGhlIHByaW50IHNlcnZpY2UgKi8KKyAgICBwcml2YXRlIEN1c3RvbVByaW50ZXJJY29uQ2FjaGUgbUN1c3RvbUljb25DYWNoZTsKKwogICAgIHB1YmxpYyBzdGF0aWMgUHJpbnRTcG9vbGVyU2VydmljZSBwZWVrSW5zdGFuY2UoKSB7CiAgICAgICAgIHN5bmNocm9uaXplZCAoc0xvY2spIHsKICAgICAgICAgICAgIHJldHVybiBzSW5zdGFuY2U7CkBAIC0xMjMsNiArMTI3LDcgQEAKIAogICAgICAgICBtUGVyc2lzdGFuY2VNYW5hZ2VyID0gbmV3IFBlcnNpc3RlbmNlTWFuYWdlcigpOwogICAgICAgICBtTm90aWZpY2F0aW9uQ29udHJvbGxlciA9IG5ldyBOb3RpZmljYXRpb25Db250cm9sbGVyKFByaW50U3Bvb2xlclNlcnZpY2UudGhpcyk7CisgICAgICAgIG1DdXN0b21JY29uQ2FjaGUgPSBuZXcgQ3VzdG9tUHJpbnRlckljb25DYWNoZShnZXRDYWNoZURpcigpKTsKIAogICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CiAgICAgICAgICAgICBtUGVyc2lzdGFuY2VNYW5hZ2VyLnJlYWRTdGF0ZUxvY2tlZCgpOwpAQCAtMTM1LDYgKzE0MCwxMSBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uRGVzdHJveSgpIHsKKyAgICAgICAgc3VwZXIub25EZXN0cm95KCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIElCaW5kZXIgb25CaW5kKEludGVudCBpbnRlbnQpIHsKICAgICAgICAgcmV0dXJuIG5ldyBQcmludFNwb29sZXIoKTsKICAgICB9CkBAIC03MDMsNiArNzEzLDM3IEBACiAgICAgICAgIH0uZXhlY3V0ZU9uRXhlY3V0b3IoQXN5bmNUYXNrLlNFUklBTF9FWEVDVVRPUiwgKFZvaWRbXSkgbnVsbCk7CiAgICAgfQogCisgICAgLyoqCisgICAgICogSGFuZGxlIHRoYXQgYSBjdXN0b20gaWNvbiBmb3IgYSBwcmludGVyIHdhcyBsb2FkZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcHJpbnRlcklkIHRoZSBpZCBvZiB0aGUgcHJpbnRlciB0aGUgaWNvbiBiZWxvbmdzIHRvCisgICAgICogQHBhcmFtIGljb24gdGhlIGljb24gdGhhdCB3YXMgbG9hZGVkCisgICAgICogQHNlZSBhbmRyb2lkLnByaW50LlByaW50ZXJJbmZvLkJ1aWxkZXIjc2V0SGFzQ3VzdG9tUHJpbnRlckljb24oKQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIG9uQ3VzdG9tUHJpbnRlckljb25Mb2FkZWQoUHJpbnRlcklkIHByaW50ZXJJZCwgSWNvbiBpY29uKSB7CisgICAgICAgIG1DdXN0b21JY29uQ2FjaGUub25DdXN0b21QcmludGVySWNvbkxvYWRlZChwcmludGVySWQsIGljb24pOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldCB0aGUgY3VzdG9tIGljb24gZm9yIGEgcHJpbnRlci4gSWYgdGhlIGljb24gaXMgbm90IGNhY2hlZCwgdGhlIGljb24gaXMKKyAgICAgKiByZXF1ZXN0ZWQgYXN5bmNocm9ub3VzbHkuIE9uY2UgaXQgaXMgYXZhaWxhYmxlIHRoZSBwcmludGVyIGlzIHVwZGF0ZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcHJpbnRlcklkIHRoZSBpZCBvZiB0aGUgcHJpbnRlciB0aGUgaWNvbiBzaG91bGQgYmUgbG9hZGVkIGZvcgorICAgICAqIEByZXR1cm4gdGhlIGN1c3RvbSBpY29uIHRvIGJlIHVzZWQgZm9yIHRoZSBwcmludGVyIG9yIG51bGwgaWYgdGhlIGljb24gaXMKKyAgICAgKiAgICAgICAgIG5vdCB5ZXQgYXZhaWxhYmxlCisgICAgICogQHNlZSBhbmRyb2lkLnByaW50LlByaW50ZXJJbmZvLkJ1aWxkZXIjc2V0SGFzQ3VzdG9tUHJpbnRlckljb24oKQorICAgICAqLworICAgIHB1YmxpYyBJY29uIGdldEN1c3RvbVByaW50ZXJJY29uKFByaW50ZXJJZCBwcmludGVySWQpIHsKKyAgICAgICAgcmV0dXJuIG1DdXN0b21JY29uQ2FjaGUuZ2V0SWNvbihwcmludGVySWQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENsZWFyIHRoZSBjdXN0b20gcHJpbnRlciBpY29uIGNhY2hlLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGNsZWFyQ3VzdG9tUHJpbnRlckljb25DYWNoZSgpIHsKKyAgICAgICAgbUN1c3RvbUljb25DYWNoZS5jbGVhcigpOworICAgIH0KKwogICAgIHByaXZhdGUgZmluYWwgY2xhc3MgUGVyc2lzdGVuY2VNYW5hZ2VyIHsKICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBFUlNJU1RfRklMRV9OQU1FID0gInByaW50X3Nwb29sZXJfc3RhdGUueG1sIjsKIApAQCAtMTI2Miw3ICsxMzAzLDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIHByaXZhdGUgdm9pZCBleHBlY3QoWG1sUHVsbFBhcnNlciBwYXJzZXIsIGludCB0eXBlLCBTdHJpbmcgdGFnKQotICAgICAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgWG1sUHVsbFBhcnNlckV4Y2VwdGlvbiB7CisgICAgICAgICAgICAgICAgdGhyb3dzIFhtbFB1bGxQYXJzZXJFeGNlcHRpb24gewogICAgICAgICAgICAgaWYgKCFhY2NlcHQocGFyc2VyLCB0eXBlLCB0YWcpKSB7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFhtbFB1bGxQYXJzZXJFeGNlcHRpb24oIkV4ZXBlY3RlZCBldmVudDogIiArIHR5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBhbmQgdGFnOiAiICsgdGFnICsgIiBidXQgZ290IGV2ZW50OiAiICsgcGFyc2VyLmdldEV2ZW50VHlwZSgpCkBAIC0xMjc5LDcgKzEzMjAsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgcHJpdmF0ZSBib29sZWFuIGFjY2VwdChYbWxQdWxsUGFyc2VyIHBhcnNlciwgaW50IHR5cGUsIFN0cmluZyB0YWcpCi0gICAgICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uIHsKKyAgICAgICAgICAgICAgICB0aHJvd3MgWG1sUHVsbFBhcnNlckV4Y2VwdGlvbiB7CiAgICAgICAgICAgICBpZiAocGFyc2VyLmdldEV2ZW50VHlwZSgpICE9IHR5cGUpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CkBAIC0xMzk1LDUgKzE0MzYsMzggQEAKICAgICAgICAgcHVibGljIFByaW50U3Bvb2xlclNlcnZpY2UgZ2V0U2VydmljZSgpIHsKICAgICAgICAgICAgIHJldHVybiBQcmludFNwb29sZXJTZXJ2aWNlLnRoaXM7CiAgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25DdXN0b21QcmludGVySWNvbkxvYWRlZChQcmludGVySWQgcHJpbnRlcklkLCBJY29uIGljb24sCisgICAgICAgICAgICAgICAgSVByaW50U3Bvb2xlckNhbGxiYWNrcyBjYWxsYmFja3MsIGludCBzZXF1ZW5jZSkKKyAgICAgICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgUHJpbnRTcG9vbGVyU2VydmljZS50aGlzLm9uQ3VzdG9tUHJpbnRlckljb25Mb2FkZWQocHJpbnRlcklkLCBpY29uKTsKKyAgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2tzLm9uQ3VzdG9tUHJpbnRlckljb25DYWNoZWQoc2VxdWVuY2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIGdldEN1c3RvbVByaW50ZXJJY29uKFByaW50ZXJJZCBwcmludGVySWQsIElQcmludFNwb29sZXJDYWxsYmFja3MgY2FsbGJhY2tzLAorICAgICAgICAgICAgICAgIGludCBzZXF1ZW5jZSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CisgICAgICAgICAgICBJY29uIGljb24gPSBudWxsOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBpY29uID0gUHJpbnRTcG9vbGVyU2VydmljZS50aGlzLmdldEN1c3RvbVByaW50ZXJJY29uKHByaW50ZXJJZCk7CisgICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgICAgIGNhbGxiYWNrcy5vbkdldEN1c3RvbVByaW50ZXJJY29uUmVzdWx0KGljb24sIHNlcXVlbmNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBjbGVhckN1c3RvbVByaW50ZXJJY29uQ2FjaGUoSVByaW50U3Bvb2xlckNhbGxiYWNrcyBjYWxsYmFja3MsCisgICAgICAgICAgICAgICAgaW50IHNlcXVlbmNlKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgUHJpbnRTcG9vbGVyU2VydmljZS50aGlzLmNsZWFyQ3VzdG9tUHJpbnRlckljb25DYWNoZSgpOworICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICBjYWxsYmFja3MuY3VzdG9tUHJpbnRlckljb25DYWNoZUNsZWFyZWQoc2VxdWVuY2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKICAgICB9CiB9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvc3JjL2NvbS9hbmRyb2lkL3ByaW50c3Bvb2xlci9tb2RlbC9SZW1vdGVQcmludERvY3VtZW50LmphdmEgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvc3JjL2NvbS9hbmRyb2lkL3ByaW50c3Bvb2xlci9tb2RlbC9SZW1vdGVQcmludERvY3VtZW50LmphdmEKaW5kZXggMWI2ZTljZS4uZWExMWFlNCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3NyYy9jb20vYW5kcm9pZC9wcmludHNwb29sZXIvbW9kZWwvUmVtb3RlUHJpbnREb2N1bWVudC5qYXZhCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9zcmMvY29tL2FuZHJvaWQvcHJpbnRzcG9vbGVyL21vZGVsL1JlbW90ZVByaW50RG9jdW1lbnQuamF2YQpAQCAtODcwLDcgKzg3MCw3IEBACiAgICAgICAgIHByaXZhdGUgZmluYWwgTXV0ZXhGaWxlUHJvdmlkZXIgbUZpbGVQcm92aWRlcjsKIAogICAgICAgICBwcml2YXRlIGZpbmFsIElXcml0ZVJlc3VsdENhbGxiYWNrIG1SZW1vdGVSZXN1bHRDYWxsYmFjazsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBDb21tYW5kRG9uZUNhbGxiYWNrIG1Eb25lQ2FsbGJhY2s7CisgICAgICAgIHByaXZhdGUgZmluYWwgQ29tbWFuZERvbmVDYWxsYmFjayBtV3JpdGVEb25lQ2FsbGJhY2s7CiAKICAgICAgICAgcHJpdmF0ZSBmaW5hbCBDb250ZXh0IG1Db250ZXh0OwogICAgICAgICBwcml2YXRlIGZpbmFsIEhhbmRsZXIgbUhhbmRsZXI7CkBAIC04ODUsNyArODg1LDcgQEAKICAgICAgICAgICAgIG1QYWdlQ291bnQgPSBwYWdlQ291bnQ7CiAgICAgICAgICAgICBtUGFnZXMgPSBBcnJheXMuY29weU9mKHBhZ2VzLCBwYWdlcy5sZW5ndGgpOwogICAgICAgICAgICAgbUZpbGVQcm92aWRlciA9IGZpbGVQcm92aWRlcjsKLSAgICAgICAgICAgIG1Eb25lQ2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgICAgICAgICAgIG1Xcml0ZURvbmVDYWxsYmFjayA9IGNhbGxiYWNrOwogICAgICAgICB9CiAKICAgICAgICAgQE92ZXJyaWRlCkBAIC05OTcsNyArOTk3LDcgQEAKICAgICAgICAgICAgIG1DYW5jZWxsYXRpb24gPSBudWxsOwogCiAgICAgICAgICAgICAvLyBEb25lLgotICAgICAgICAgICAgbURvbmVDYWxsYmFjay5vbkRvbmUoKTsKKyAgICAgICAgICAgIG1Xcml0ZURvbmVDYWxsYmFjay5vbkRvbmUoKTsKICAgICAgICAgfQogCiAgICAgICAgIHByaXZhdGUgdm9pZCBoYW5kbGVPbldyaXRlRmFpbGVkKENoYXJTZXF1ZW5jZSBlcnJvciwgaW50IHNlcXVlbmNlKSB7CkBAIC0xMDE1LDcgKzEwMTUsNyBAQAogICAgICAgICAgICAgbUNhbmNlbGxhdGlvbiA9IG51bGw7CiAKICAgICAgICAgICAgIC8vIERvbmUuCi0gICAgICAgICAgICBtRG9uZUNhbGxiYWNrLm9uRG9uZSgpOworICAgICAgICAgICAgbVdyaXRlRG9uZUNhbGxiYWNrLm9uRG9uZSgpOwogICAgICAgICB9CiAKICAgICAgICAgcHJpdmF0ZSB2b2lkIGhhbmRsZU9uV3JpdGVDYW5jZWxlZChpbnQgc2VxdWVuY2UpIHsKQEAgLTEwMzMsNyArMTAzMyw3IEBACiAgICAgICAgICAgICBtQ2FuY2VsbGF0aW9uID0gbnVsbDsKIAogICAgICAgICAgICAgLy8gRG9uZS4KLSAgICAgICAgICAgIG1Eb25lQ2FsbGJhY2sub25Eb25lKCk7CisgICAgICAgICAgICBtV3JpdGVEb25lQ2FsbGJhY2sub25Eb25lKCk7CiAgICAgICAgIH0KIAogICAgICAgICBwcml2YXRlIGZpbmFsIGNsYXNzIFdyaXRlSGFuZGxlciBleHRlbmRzIEhhbmRsZXIgewpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3NyYy9jb20vYW5kcm9pZC9wcmludHNwb29sZXIvdWkvRnVzZWRQcmludGVyc1Byb3ZpZGVyLmphdmEgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvc3JjL2NvbS9hbmRyb2lkL3ByaW50c3Bvb2xlci91aS9GdXNlZFByaW50ZXJzUHJvdmlkZXIuamF2YQppbmRleCA4MGMyOGUwLi41NTI1Nzc0IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvc3JjL2NvbS9hbmRyb2lkL3ByaW50c3Bvb2xlci91aS9GdXNlZFByaW50ZXJzUHJvdmlkZXIuamF2YQorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvc3JjL2NvbS9hbmRyb2lkL3ByaW50c3Bvb2xlci91aS9GdXNlZFByaW50ZXJzUHJvdmlkZXIuamF2YQpAQCAtMjAsMjMgKzIwLDMzIEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkxvYWRlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uU2VydmljZUluZm87CitpbXBvcnQgYW5kcm9pZC5sb2NhdGlvbi5Dcml0ZXJpYTsKK2ltcG9ydCBhbmRyb2lkLmxvY2F0aW9uLkxvY2F0aW9uOworaW1wb3J0IGFuZHJvaWQubG9jYXRpb24uTG9jYXRpb25MaXN0ZW5lcjsKK2ltcG9ydCBhbmRyb2lkLmxvY2F0aW9uLkxvY2F0aW9uTWFuYWdlcjsKK2ltcG9ydCBhbmRyb2lkLmxvY2F0aW9uLkxvY2F0aW9uUmVxdWVzdDsKIGltcG9ydCBhbmRyb2lkLm9zLkFzeW5jVGFzazsKK2ltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKK2ltcG9ydCBhbmRyb2lkLm9zLkxvb3BlcjsKK2ltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbUNsb2NrOwogaW1wb3J0IGFuZHJvaWQucHJpbnQuUHJpbnRNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQucHJpbnQuUHJpbnRlckRpc2NvdmVyeVNlc3Npb247CiBpbXBvcnQgYW5kcm9pZC5wcmludC5QcmludGVyRGlzY292ZXJ5U2Vzc2lvbi5PblByaW50ZXJzQ2hhbmdlTGlzdGVuZXI7CiBpbXBvcnQgYW5kcm9pZC5wcmludC5QcmludGVySWQ7CiBpbXBvcnQgYW5kcm9pZC5wcmludC5QcmludGVySW5mbzsKIGltcG9ydCBhbmRyb2lkLnByaW50c2VydmljZS5QcmludFNlcnZpY2VJbmZvOwotaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkFycmF5TWFwOwogaW1wb3J0IGFuZHJvaWQudXRpbC5BcnJheVNldDsKIGltcG9ydCBhbmRyb2lkLnV0aWwuQXRvbWljRmlsZTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOworaW1wb3J0IGFuZHJvaWQudXRpbC5QYWlyOwogaW1wb3J0IGFuZHJvaWQudXRpbC5TbG9nOwogaW1wb3J0IGFuZHJvaWQudXRpbC5YbWw7CiAKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLkZhc3RYbWxTZXJpYWxpemVyOwogCitpbXBvcnQgbGliY29yZS5pby5Jb1V0aWxzOworCiBpbXBvcnQgb3JnLnhtbHB1bGwudjEuWG1sUHVsbFBhcnNlcjsKIGltcG9ydCBvcmcueG1scHVsbC52MS5YbWxQdWxsUGFyc2VyRXhjZXB0aW9uOwogaW1wb3J0IG9yZy54bWxwdWxsLnYxLlhtbFNlcmlhbGl6ZXI7CkBAIC00OSwxOCArNTksMTkgQEAKIGltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CiBpbXBvcnQgamF2YS51dGlsLkxpbmtlZEhhc2hNYXA7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuT2JqZWN0czsKIGltcG9ydCBqYXZhLnV0aWwuU2V0OwogCi1pbXBvcnQgbGliY29yZS5pby5Jb1V0aWxzOwotCiAvKioKICAqIFRoaXMgY2xhc3MgaXMgcmVzcG9uc2libGUgZm9yIGxvYWRpbmcgcHJpbnRlcnMgYnkgZG9pbmcgZGlzY292ZXJ5CiAgKiBhbmQgbWVyZ2luZyB0aGUgZGlzY292ZXJlZCBwcmludGVycyB3aXRoIHRoZSBwcmV2aW91c2x5IHVzZWQgb25lcy4KICAqLwotcHVibGljIGZpbmFsIGNsYXNzIEZ1c2VkUHJpbnRlcnNQcm92aWRlciBleHRlbmRzIExvYWRlcjxMaXN0PFByaW50ZXJJbmZvPj4geworcHVibGljIGZpbmFsIGNsYXNzIEZ1c2VkUHJpbnRlcnNQcm92aWRlciBleHRlbmRzIExvYWRlcjxMaXN0PFByaW50ZXJJbmZvPj4KKyAgICAgICAgaW1wbGVtZW50cyBMb2NhdGlvbkxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9HX1RBRyA9ICJGdXNlZFByaW50ZXJzUHJvdmlkZXIiOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwpAQCAtNzAsMTAgKzgxLDIyIEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX0ZBVk9SSVRFX1BSSU5URVJfQ09VTlQgPSA0OwogCisgICAgLyoqIEludGVydmFsIG9mIGxvY2F0aW9uIHVwZGF0ZWQgaW4gbXMgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTE9DQVRJT05fVVBEQVRFX01TID0gMzAgKiAxMDAwOworCisgICAgLyoqIE1heGltdW0gYWNjZXB0YWJsZSBhZ2Ugb2YgdGhlIGxvY2F0aW9uIGluIG1zICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BWF9MT0NBVElPTl9BR0VfTVMgPSAxMCAqIDYwICogMTAwMDsKKworICAgIC8qKiBUaGUgd29yc3QgYWNjdXJhY3kgdGhhdCBpcyBjb25zaWRlcmVkIHVzYWJsZSBpbiBtICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1JTl9MT0NBVElPTl9BQ0NVUkFDWSA9IDUwOworCisgICAgLyoqIE1heGltdW0gZGlzdGFuY2Ugd2hlcmUgYSBwcmludGVyIGlzIHN0aWxsIGNvbnNpZGVyZWQgIm5lYXIiICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BWF9QUklOVEVSX0RJU1RBTkNFID0gTUlOX0xPQ0FUSU9OX0FDQ1VSQUNZICogMjsKKwogICAgIHByaXZhdGUgZmluYWwgTGlzdDxQcmludGVySW5mbz4gbVByaW50ZXJzID0KICAgICAgICAgICAgIG5ldyBBcnJheUxpc3Q8PigpOwogCi0gICAgcHJpdmF0ZSBmaW5hbCBMaXN0PFByaW50ZXJJbmZvPiBtRmF2b3JpdGVQcmludGVycyA9CisgICAgcHJpdmF0ZSBmaW5hbCBMaXN0PFBhaXI8UHJpbnRlckluZm8sIExvY2F0aW9uPj4gbUZhdm9yaXRlUHJpbnRlcnMgPQogICAgICAgICAgICAgbmV3IEFycmF5TGlzdDw+KCk7CiAKICAgICBwcml2YXRlIGZpbmFsIFBlcnNpc3RlbmNlTWFuYWdlciBtUGVyc2lzdGVuY2VNYW5hZ2VyOwpAQCAtODQsMzMgKzEwNywxMTEgQEAKIAogICAgIHByaXZhdGUgYm9vbGVhbiBtUHJpbnRlcnNVcGRhdGVkQmVmb3JlOwogCisgICAgLyoqIExhc3Qga25vd24gbG9jYXRpb24sIGNhbiBiZSBudWxsIG9yIG91dCBvZiBkYXRlICovCisgICAgcHJpdmF0ZSBmaW5hbCBPYmplY3QgbUxvY2F0aW9uTG9jazsKKyAgICBwcml2YXRlIExvY2F0aW9uIG1Mb2NhdGlvbjsKKworICAgIC8qKiBMb2NhdGlvbiB1c2VkIHdoZW4gdGhlIHByaW50ZXJzIHdlcmUgdXBkYXRlZCB0aGUgbGFzdCB0aW1lICovCisgICAgcHJpdmF0ZSBMb2NhdGlvbiBtTG9jYXRpb25PZkxhc3RQcmludGVyVXBkYXRlOworCisgICAgLyoqIFJlZmVyZW5jZSB0byB0aGUgc3lzdGVtJ3MgbG9jYXRpb24gbWFuYWdlciAqLworICAgIHByaXZhdGUgZmluYWwgTG9jYXRpb25NYW5hZ2VyIG1Mb2NhdGlvbk1hbmFnZXI7CisKKyAgICAvKioKKyAgICAgKiBHZXQgYSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgbG9jYXRpb24uCisgICAgICovCisgICAgcHJpdmF0ZSBMb2NhdGlvbiBnZXRDdXJyZW50TG9jYXRpb24oKSB7CisgICAgICAgIHN5bmNocm9uaXplZCAobUxvY2F0aW9uTG9jaykgeworICAgICAgICAgICAgcmV0dXJuIG1Mb2NhdGlvbjsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHB1YmxpYyBGdXNlZFByaW50ZXJzUHJvdmlkZXIoQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIHN1cGVyKGNvbnRleHQpOworICAgICAgICBtTG9jYXRpb25Mb2NrID0gbmV3IE9iamVjdCgpOwogICAgICAgICBtUGVyc2lzdGVuY2VNYW5hZ2VyID0gbmV3IFBlcnNpc3RlbmNlTWFuYWdlcihjb250ZXh0KTsKKyAgICAgICAgbUxvY2F0aW9uTWFuYWdlciA9IChMb2NhdGlvbk1hbmFnZXIpIGNvbnRleHQuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LkxPQ0FUSU9OX1NFUlZJQ0UpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGFkZEhpc3RvcmljYWxQcmludGVyKFByaW50ZXJJbmZvIHByaW50ZXIpIHsKICAgICAgICAgbVBlcnNpc3RlbmNlTWFuYWdlci5hZGRQcmludGVyQW5kV3JpdGVQcmludGVySGlzdG9yeShwcmludGVyKTsKICAgICB9CiAKKyAgICAvKioKKyAgICAgKiBBZGQgcHJpbnRlciB0byBkZXN0LCBvciBpZiB1cGRhdGVkUHJpbnRlcnMgYWRkIHRoZSB1cGRhdGVkIHByaW50ZXIuIElmIHRoZSB1cGRhdGVkIHByaW50ZXIKKyAgICAgKiB3YXMgYWRkZWQsIHJlbW92ZSBpdCBmcm9tIHVwZGF0ZWRQcmludGVycy4KKyAgICAgKgorICAgICAqIEBwYXJhbSBkZXN0IFRoZSBsaXN0IHRoZSBwcmludGVycyBzaG91bGQgYmUgYWRkZWQgdG8KKyAgICAgKiBAcGFyYW0gcHJpbnRlciBUaGUgcHJpbnRlciB0byBhZGQKKyAgICAgKiBAcGFyYW0gdXBkYXRlZFByaW50ZXJzIFRoZSBwcmludGVyIHRvIGFkZAorICAgICAqLworICAgIHByaXZhdGUgdm9pZCB1cGRhdGVBbmRBZGRQcmludGVyKExpc3Q8UHJpbnRlckluZm8+IGRlc3QsIFByaW50ZXJJbmZvIHByaW50ZXIsCisgICAgICAgICAgICBNYXA8UHJpbnRlcklkLCBQcmludGVySW5mbz4gdXBkYXRlZFByaW50ZXJzKSB7CisgICAgICAgIFByaW50ZXJJbmZvIHVwZGF0ZWRQcmludGVyID0gdXBkYXRlZFByaW50ZXJzLnJlbW92ZShwcmludGVyLmdldElkKCkpOworICAgICAgICBpZiAodXBkYXRlZFByaW50ZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgZGVzdC5hZGQodXBkYXRlZFByaW50ZXIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGVzdC5hZGQocHJpbnRlcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb21wdXRlIHRoZSBwcmludGVycywgb3JkZXIgdGhlbSBhcHByb3ByaWF0ZWx5IGFuZCBkZWxpdmVyIHRoZSBwcmludGVycyB0byB0aGUgY2xpZW50cy4gV2UKKyAgICAgKiBwcmVmZXIgcHJpbnRlcnMgdGhhdCBoYXZlIGJlZW4gcHJldmlvdXNseSB1c2VkIChmYXZvcml0ZXMpIGFuZCBwcmludGVycyB0aGF0IGhhdmUgYmVlbiB1c2VkCisgICAgICogcHJldmlvdXNseSBjbG9zZSB0byB0aGUgY3VycmVudCBsb2NhdGlvbiAobmVhciBwcmludGVycykuCisgICAgICoKKyAgICAgKiBAcGFyYW0gZGlzY292ZXJlZFByaW50ZXJzIEFsbCBwcmludGVycyBjdXJyZW50bHkgZGlzY292ZXJlZCBieSB0aGUgcHJpbnQgZGlzY292ZXJ5IHNlc3Npb24uCisgICAgICogQHBhcmFtIGZhdm9yaXRlUHJpbnRlcnMgVGhlIG9yZGVyZWQgbGlzdCBvZiBwcmludGVycy4gVGhlIGVhcmxpZXIgaW4gdGhlIGxpc3QsIHRoZSBtb3JlCisgICAgICogICAgICAgICAgICBwcmVmZXJyZWQuCisgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIGNvbXB1dGVBbmREZWxpdmVyUmVzdWx0KE1hcDxQcmludGVySWQsIFByaW50ZXJJbmZvPiBkaXNjb3ZlcmVkUHJpbnRlcnMsCi0gICAgICAgICAgICBMaXN0PFByaW50ZXJJbmZvPiBmYXZvcml0ZVByaW50ZXJzKSB7CisgICAgICAgICAgICBMaXN0PFBhaXI8UHJpbnRlckluZm8sIExvY2F0aW9uPj4gZmF2b3JpdGVQcmludGVycykgewogICAgICAgICBMaXN0PFByaW50ZXJJbmZvPiBwcmludGVycyA9IG5ldyBBcnJheUxpc3Q8PigpOwogCi0gICAgICAgIC8vIEFkZCB0aGUgdXBkYXRlZCBmYXZvcml0ZSBwcmludGVycy4KKyAgICAgICAgLy8gU3RvcmUgdGhlIHByaW50ZXJJZHMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBhZGRlZC4gV2UgY2Fubm90IGNvbXBhcmUgdGhlIHByaW50ZXJJbmZvcyBpbgorICAgICAgICAvLyAicHJpbnRlcnMiIGFzIHRoZXkgbWlnaHQgaGF2ZSBiZWVuIHRha2VuIGZyb20gZGlzY292ZXJlZFByaW50ZXJzIGFuZCB0aGUgcHJpbnRlckluZm8gZG9lcworICAgICAgICAvLyBub3QgZXF1YWxzKCkgYW55bW9yZQorICAgICAgICBIYXNoU2V0PFByaW50ZXJJZD4gYWxyZWFkeUFkZGVkUHJpbnRlciA9IG5ldyBIYXNoU2V0PD4oTUFYX0ZBVk9SSVRFX1BSSU5URVJfQ09VTlQpOworCisgICAgICAgIExvY2F0aW9uIGxvY2F0aW9uID0gZ2V0Q3VycmVudExvY2F0aW9uKCk7CisKKyAgICAgICAgLy8gQWRkIHRoZSBmYXZvcml0ZSBwcmludGVycyB0aGF0IGhhdmUgbGFzdCBiZWVuIHVzZWQgY2xvc2UgdG8gdGhlIGN1cnJlbnQgbG9jYXRpb24KICAgICAgICAgZmluYWwgaW50IGZhdm9yaXRlUHJpbnRlckNvdW50ID0gZmF2b3JpdGVQcmludGVycy5zaXplKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmF2b3JpdGVQcmludGVyQ291bnQ7IGkrKykgewotICAgICAgICAgICAgUHJpbnRlckluZm8gZmF2b3JpdGVQcmludGVyID0gZmF2b3JpdGVQcmludGVycy5nZXQoaSk7Ci0gICAgICAgICAgICBQcmludGVySW5mbyB1cGRhdGVkUHJpbnRlciA9IGRpc2NvdmVyZWRQcmludGVycy5yZW1vdmUoCi0gICAgICAgICAgICAgICAgICAgIGZhdm9yaXRlUHJpbnRlci5nZXRJZCgpKTsKLSAgICAgICAgICAgIGlmICh1cGRhdGVkUHJpbnRlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRlcnMuYWRkKHVwZGF0ZWRQcmludGVyKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRlcnMuYWRkKGZhdm9yaXRlUHJpbnRlcik7CisgICAgICAgIGlmIChsb2NhdGlvbiAhPSBudWxsKSB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZhdm9yaXRlUHJpbnRlckNvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICAvLyBPbmx5IGFkZCBhIGNlcnRhaW4gYW1vdW50IG9mIGZhdm9yaXRlIHByaW50ZXJzCisgICAgICAgICAgICAgICAgaWYgKHByaW50ZXJzLnNpemUoKSA9PSBNQVhfRkFWT1JJVEVfUFJJTlRFUl9DT1VOVCkgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBQcmludGVySW5mbyBmYXZvcml0ZVByaW50ZXIgPSBmYXZvcml0ZVByaW50ZXJzLmdldChpKS5maXJzdDsKKyAgICAgICAgICAgICAgICBMb2NhdGlvbiBwcmludGVyTG9jYXRpb24gPSBmYXZvcml0ZVByaW50ZXJzLmdldChpKS5zZWNvbmQ7CisKKyAgICAgICAgICAgICAgICBpZiAocHJpbnRlckxvY2F0aW9uICE9IG51bGwKKyAgICAgICAgICAgICAgICAgICAgICAgICYmICFhbHJlYWR5QWRkZWRQcmludGVyLmNvbnRhaW5zKGZhdm9yaXRlUHJpbnRlci5nZXRJZCgpKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAocHJpbnRlckxvY2F0aW9uLmRpc3RhbmNlVG8obG9jYXRpb24pIDw9IE1BWF9QUklOVEVSX0RJU1RBTkNFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVBbmRBZGRQcmludGVyKHByaW50ZXJzLCBmYXZvcml0ZVByaW50ZXIsIGRpc2NvdmVyZWRQcmludGVycyk7CisgICAgICAgICAgICAgICAgICAgICAgICBhbHJlYWR5QWRkZWRQcmludGVyLmFkZChmYXZvcml0ZVByaW50ZXIuZ2V0SWQoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICAvLyBBZGQgb3RoZXIgdXBkYXRlZCBwcmludGVycy4KKyAgICAgICAgLy8gQWRkIHRoZSBvdGhlciBmYXZvcml0ZSBwcmludGVycworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZhdm9yaXRlUHJpbnRlckNvdW50OyBpKyspIHsKKyAgICAgICAgICAgIC8vIE9ubHkgYWRkIGEgY2VydGFpbiBhbW91bnQgb2YgZmF2b3JpdGUgcHJpbnRlcnMKKyAgICAgICAgICAgIGlmIChwcmludGVycy5zaXplKCkgPT0gTUFYX0ZBVk9SSVRFX1BSSU5URVJfQ09VTlQpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgUHJpbnRlckluZm8gZmF2b3JpdGVQcmludGVyID0gZmF2b3JpdGVQcmludGVycy5nZXQoaSkuZmlyc3Q7CisgICAgICAgICAgICBpZiAoIWFscmVhZHlBZGRlZFByaW50ZXIuY29udGFpbnMoZmF2b3JpdGVQcmludGVyLmdldElkKCkpKSB7CisgICAgICAgICAgICAgICAgdXBkYXRlQW5kQWRkUHJpbnRlcihwcmludGVycywgZmF2b3JpdGVQcmludGVyLCBkaXNjb3ZlcmVkUHJpbnRlcnMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gQWRkIG90aGVyIHVwZGF0ZWQgcHJpbnRlcnMuIFByaW50ZXJzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gYWRkZWQgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbQorICAgICAgICAvLyBkaXNjb3ZlcmVkUHJpbnRlcnMgaW4gdGhlIGNhbGxzIHRvIHVwZGF0ZUFuZEFkZFByaW50ZXIKICAgICAgICAgZmluYWwgaW50IHByaW50ZXJDb3VudCA9IG1QcmludGVycy5zaXplKCk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJpbnRlckNvdW50OyBpKyspIHsKICAgICAgICAgICAgIFByaW50ZXJJbmZvIHByaW50ZXIgPSBtUHJpbnRlcnMuZ2V0KGkpOwpAQCAtMTQyLDYgKzI0MywyMSBAQAogICAgICAgICBpZiAoREVCVUcpIHsKICAgICAgICAgICAgIExvZy5pKExPR19UQUcsICJvblN0YXJ0TG9hZGluZygpICIgKyBGdXNlZFByaW50ZXJzUHJvdmlkZXIudGhpcy5oYXNoQ29kZSgpKTsKICAgICAgICAgfQorCisgICAgICAgIG1Mb2NhdGlvbk1hbmFnZXIucmVxdWVzdExvY2F0aW9uVXBkYXRlcyhMb2NhdGlvblJlcXVlc3QuY3JlYXRlKCkKKyAgICAgICAgICAgICAgICAuc2V0UXVhbGl0eShMb2NhdGlvblJlcXVlc3QuUE9XRVJfTE9XKS5zZXRJbnRlcnZhbChMT0NBVElPTl9VUERBVEVfTVMpLCB0aGlzLAorICAgICAgICAgICAgICAgIExvb3Blci5nZXRNYWluTG9vcGVyKCkpOworCisgICAgICAgIExvY2F0aW9uIGxhc3RMb2NhdGlvbiA9IG1Mb2NhdGlvbk1hbmFnZXIuZ2V0TGFzdExvY2F0aW9uKCk7CisgICAgICAgIGlmIChsYXN0TG9jYXRpb24gIT0gbnVsbCkgeworICAgICAgICAgICAgb25Mb2NhdGlvbkNoYW5nZWQobGFzdExvY2F0aW9uKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEp1bXBzdGFydCBsb2NhdGlvbiB3aXRoIGEgc2luZ2xlIGZvcmNlZCB1cGRhdGUKKyAgICAgICAgQ3JpdGVyaWEgb25lVGltZUNyaXRlcmlhID0gbmV3IENyaXRlcmlhKCk7CisgICAgICAgIG9uZVRpbWVDcml0ZXJpYS5zZXRBY2N1cmFjeShDcml0ZXJpYS5BQ0NVUkFDWV9GSU5FKTsKKyAgICAgICAgbUxvY2F0aW9uTWFuYWdlci5yZXF1ZXN0U2luZ2xlVXBkYXRlKG9uZVRpbWVDcml0ZXJpYSwgdGhpcywgTG9vcGVyLmdldE1haW5Mb29wZXIoKSk7CisKICAgICAgICAgLy8gVGhlIGNvbnRyYWN0IGlzIHRoYXQgaWYgd2UgYWxyZWFkeSBoYXZlIGEgdmFsaWQsCiAgICAgICAgIC8vIHJlc3VsdCB0aGUgd2UgaGF2ZSB0byBkZWxpdmVyIGl0IGltbWVkaWF0ZWx5LgogICAgICAgICBpZiAoIW1QcmludGVycy5pc0VtcHR5KCkpIHsKQEAgLTE1OCw2ICsyNzQsOCBAQAogICAgICAgICAgICAgTG9nLmkoTE9HX1RBRywgIm9uU3RvcExvYWRpbmcoKSAiICsgRnVzZWRQcmludGVyc1Byb3ZpZGVyLnRoaXMuaGFzaENvZGUoKSk7CiAgICAgICAgIH0KICAgICAgICAgb25DYW5jZWxMb2FkKCk7CisKKyAgICAgICAgbUxvY2F0aW9uTWFuYWdlci5yZW1vdmVVcGRhdGVzKHRoaXMpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpAQCAtMTg4LDM0ICszMDYsMzggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiICIgKyBGdXNlZFByaW50ZXJzUHJvdmlkZXIudGhpcy5oYXNoQ29kZSgpKTsKICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVByaW50ZXJzKG1EaXNjb3ZlcnlTZXNzaW9uLmdldFByaW50ZXJzKCksIG1GYXZvcml0ZVByaW50ZXJzKTsKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlUHJpbnRlcnMobURpc2NvdmVyeVNlc3Npb24uZ2V0UHJpbnRlcnMoKSwgbUZhdm9yaXRlUHJpbnRlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q3VycmVudExvY2F0aW9uKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgZmluYWwgaW50IGZhdm9yaXRlQ291bnQgPSBtRmF2b3JpdGVQcmludGVycy5zaXplKCk7CiAgICAgICAgICAgICBMaXN0PFByaW50ZXJJZD4gcHJpbnRlcklkcyA9IG5ldyBBcnJheUxpc3Q8PihmYXZvcml0ZUNvdW50KTsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmF2b3JpdGVDb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRlcklkcy5hZGQobUZhdm9yaXRlUHJpbnRlcnMuZ2V0KGkpLmdldElkKCkpOworICAgICAgICAgICAgICAgIHByaW50ZXJJZHMuYWRkKG1GYXZvcml0ZVByaW50ZXJzLmdldChpKS5maXJzdC5nZXRJZCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1EaXNjb3ZlcnlTZXNzaW9uLnN0YXJ0UHJpbnRlckRpc2NvdmVyeShwcmludGVySWRzKTsKICAgICAgICAgICAgIExpc3Q8UHJpbnRlckluZm8+IHByaW50ZXJzID0gbURpc2NvdmVyeVNlc3Npb24uZ2V0UHJpbnRlcnMoKTsKLSAgICAgICAgICAgIGlmICghcHJpbnRlcnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgdXBkYXRlUHJpbnRlcnMocHJpbnRlcnMsIG1GYXZvcml0ZVByaW50ZXJzKTsKLSAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdXBkYXRlUHJpbnRlcnMocHJpbnRlcnMsIG1GYXZvcml0ZVByaW50ZXJzLCBnZXRDdXJyZW50TG9jYXRpb24oKSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgdXBkYXRlUHJpbnRlcnMoTGlzdDxQcmludGVySW5mbz4gcHJpbnRlcnMsIExpc3Q8UHJpbnRlckluZm8+IGZhdm9yaXRlUHJpbnRlcnMpIHsKKyAgICBwcml2YXRlIHZvaWQgdXBkYXRlUHJpbnRlcnMoTGlzdDxQcmludGVySW5mbz4gcHJpbnRlcnMsCisgICAgICAgICAgICBMaXN0PFBhaXI8UHJpbnRlckluZm8sIExvY2F0aW9uPj4gZmF2b3JpdGVQcmludGVycywKKyAgICAgICAgICAgIExvY2F0aW9uIGxvY2F0aW9uKSB7CiAgICAgICAgIGlmIChtUHJpbnRlcnNVcGRhdGVkQmVmb3JlICYmIG1QcmludGVycy5lcXVhbHMocHJpbnRlcnMpCi0gICAgICAgICAgICAgICAgJiYgbUZhdm9yaXRlUHJpbnRlcnMuZXF1YWxzKGZhdm9yaXRlUHJpbnRlcnMpKSB7CisgICAgICAgICAgICAgICAgJiYgbUZhdm9yaXRlUHJpbnRlcnMuZXF1YWxzKGZhdm9yaXRlUHJpbnRlcnMpCisgICAgICAgICAgICAgICAgJiYgT2JqZWN0cy5lcXVhbHMobUxvY2F0aW9uT2ZMYXN0UHJpbnRlclVwZGF0ZSwgbG9jYXRpb24pKSB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAorICAgICAgICBtTG9jYXRpb25PZkxhc3RQcmludGVyVXBkYXRlID0gbG9jYXRpb247CiAgICAgICAgIG1QcmludGVyc1VwZGF0ZWRCZWZvcmUgPSB0cnVlOwogCiAgICAgICAgIC8vIFNvbWUgb2YgdGhlIGZvdW5kIHByaW50ZXJzIG1heSBoYXZlIGJlIGEgcHJpbnRlciB0aGF0IGlzIGluIHRoZQotICAgICAgICAvLyBoaXN0b3J5IGJ1dCB3aXRoIGl0cyBuYW1lIGNoYW5nZWQuIEhlbmNlLCB3ZSB0cnkgdG8gdXBkYXRlIHRoZQotICAgICAgICAvLyBwcmludGVyIHRvIHVzZSBpdHMgY3VycmVudCBuYW1lIGluc3RlYWQgb2YgdGhlIGhpc3RvcmljYWwgb25lLgotICAgICAgICBtUGVyc2lzdGVuY2VNYW5hZ2VyLnVwZGF0ZVByaW50ZXJzSGlzdG9yaWNhbE5hbWVzSWZOZWVkZWQocHJpbnRlcnMpOworICAgICAgICAvLyBoaXN0b3J5IGJ1dCB3aXRoIGl0cyBwcm9wZXJ0aWVzIGNoYW5nZWQuIEhlbmNlLCB3ZSB0cnkgdG8gdXBkYXRlIHRoZQorICAgICAgICAvLyBwcmludGVyIHRvIHVzZSBpdHMgY3VycmVudCBwcm9wZXJ0aWVzIGluc3RlYWQgb2YgdGhlIGhpc3RvcmljYWwgb25lLgorICAgICAgICBtUGVyc2lzdGVuY2VNYW5hZ2VyLnVwZGF0ZUhpc3RvcmljYWxQcmludGVyc0lmTmVlZGVkKHByaW50ZXJzKTsKIAogICAgICAgICBNYXA8UHJpbnRlcklkLCBQcmludGVySW5mbz4gcHJpbnRlcnNNYXAgPSBuZXcgTGlua2VkSGFzaE1hcDw+KCk7CiAgICAgICAgIGZpbmFsIGludCBwcmludGVyQ291bnQgPSBwcmludGVycy5zaXplKCk7CkBAIC0yNzEsNiArMzkzLDYwIEBACiAgICAgICAgIG9uU3RvcExvYWRpbmcoKTsKICAgICB9CiAKKyAgICAvKioKKyAgICAgKiBDaGVjayBpZiB0aGUgbG9jYXRpb24gaXMgYWNjZXB0YWJsZS4gVGhpcyBpcyB0byBmaWx0ZXIgb3V0IGV4Y2Vzc2l2ZWx5IG9sZCBvciBpbmFjY3VyYXRlCisgICAgICogbG9jYXRpb24gdXBkYXRlcy4KKyAgICAgKgorICAgICAqIEBwYXJhbSBsb2NhdGlvbiB0aGUgbG9jYXRpb24gdG8gY2hlY2sKKyAgICAgKiBAcmV0dXJuIHRydWUgaWZmIHRoZSBsb2NhdGlvbiBpcyB1c2FibGUuCisgICAgICovCisgICAgcHJpdmF0ZSBib29sZWFuIGlzTG9jYXRpb25BY2NlcHRhYmxlKExvY2F0aW9uIGxvY2F0aW9uKSB7CisgICAgICAgIHJldHVybiBsb2NhdGlvbiAhPSBudWxsCisgICAgICAgICAgICAgICAgJiYgbG9jYXRpb24uZ2V0RWxhcHNlZFJlYWx0aW1lTmFub3MoKSA+IFN5c3RlbUNsb2NrLmVsYXBzZWRSZWFsdGltZU5hbm9zKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC0gTUFYX0xPQ0FUSU9OX0FHRV9NUyAqIDEwMDBfMDAwTAorICAgICAgICAgICAgICAgICYmIGxvY2F0aW9uLmhhc0FjY3VyYWN5KCkKKyAgICAgICAgICAgICAgICAmJiBsb2NhdGlvbi5nZXRBY2N1cmFjeSgpIDwgTUlOX0xPQ0FUSU9OX0FDQ1VSQUNZOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uTG9jYXRpb25DaGFuZ2VkKExvY2F0aW9uIGxvY2F0aW9uKSB7CisgICAgICAgIHN5bmNocm9uaXplZChtTG9jYXRpb25Mb2NrKSB7CisgICAgICAgICAgICAvLyBXZSBleHBlY3QgdGhlIHVzZXIgdG8gbm90IG1vdmUgdG9vIGZhc3Qgd2hpbGUgcHJpbnRpbmcuIEhlbmNlIHByZWZlciBtb3JlIGFjY3VyYXRlCisgICAgICAgICAgICAvLyB1cGRhdGVzIG92ZXIgbW9yZSByZWNlbnQgb25lcyBmb3IgTE9DQVRJT05fVVBEQVRFX01TLiBXZSBhZGQgYSAxMCUgZnVkZ2UgZmFjdG9yIGhlcmUKKyAgICAgICAgICAgIC8vIGFzIHRoZSBsb2NhdGlvbiBwcm92aWRlciBtaWdodCBzZW5kIGFuIHVwZGF0ZSBzbGlnaHRseSB0b28gZWFybHkuCisgICAgICAgICAgICBpZiAoaXNMb2NhdGlvbkFjY2VwdGFibGUobG9jYXRpb24pCisgICAgICAgICAgICAgICAgICAgICYmICFsb2NhdGlvbi5lcXVhbHMobUxvY2F0aW9uKQorICAgICAgICAgICAgICAgICAgICAmJiAobUxvY2F0aW9uID09IG51bGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBsb2NhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldEVsYXBzZWRSZWFsdGltZU5hbm9zKCkgPiBtTG9jYXRpb24uZ2V0RWxhcHNlZFJlYWx0aW1lTmFub3MoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIExPQ0FUSU9OX1VQREFURV9NUyAqIDAuOSAqIDEwMDBfMDAwTAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICghbUxvY2F0aW9uLmhhc0FjY3VyYWN5KCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGxvY2F0aW9uLmdldEFjY3VyYWN5KCkgPCBtTG9jYXRpb24uZ2V0QWNjdXJhY3koKSkpKSB7CisgICAgICAgICAgICAgICAgLy8gT3RoZXIgY2FsbGVycyBvZiB1cGRhdGVQcmludGVycyBtaWdodCB3YW50IHRvIGtub3cgdGhlIGxvY2F0aW9uLCBoZW5jZSBjYWNoZSBpdAorICAgICAgICAgICAgICAgIG1Mb2NhdGlvbiA9IGxvY2F0aW9uOworCisgICAgICAgICAgICAgICAgaWYgKGFyZUhpc3RvcmljYWxQcmludGVyc0xvYWRlZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVByaW50ZXJzKG1EaXNjb3ZlcnlTZXNzaW9uLmdldFByaW50ZXJzKCksIG1GYXZvcml0ZVByaW50ZXJzLCBtTG9jYXRpb24pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uU3RhdHVzQ2hhbmdlZChTdHJpbmcgcHJvdmlkZXIsIGludCBzdGF0dXMsIEJ1bmRsZSBleHRyYXMpIHsKKyAgICAgICAgLy8gbm90aGluZyB0byBkbworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uUHJvdmlkZXJFbmFibGVkKFN0cmluZyBwcm92aWRlcikgeworICAgICAgICAvLyBub3RoaW5nIHRvIGRvCisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25Qcm92aWRlckRpc2FibGVkKFN0cmluZyBwcm92aWRlcikgeworICAgICAgICAvLyBub3RoaW5nIHRvIGRvCisgICAgfQorCiAgICAgcHVibGljIGJvb2xlYW4gYXJlSGlzdG9yaWNhbFByaW50ZXJzTG9hZGVkKCkgewogICAgICAgICByZXR1cm4gbVBlcnNpc3RlbmNlTWFuYWdlci5tUmVhZEhpc3RvcnlDb21wbGV0ZWQ7CiAgICAgfQpAQCAtMjk0LDcgKzQ3MCw3IEBACiAgICAgcHVibGljIGJvb2xlYW4gaXNGYXZvcml0ZVByaW50ZXIoUHJpbnRlcklkIHByaW50ZXJJZCkgewogICAgICAgICBmaW5hbCBpbnQgcHJpbnRlckNvdW50ID0gbUZhdm9yaXRlUHJpbnRlcnMuc2l6ZSgpOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHByaW50ZXJDb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICBQcmludGVySW5mbyBmYXZvcml0ZVByaXRuZXIgPSBtRmF2b3JpdGVQcmludGVycy5nZXQoaSk7CisgICAgICAgICAgICBQcmludGVySW5mbyBmYXZvcml0ZVByaXRuZXIgPSBtRmF2b3JpdGVQcmludGVycy5nZXQoaSkuZmlyc3Q7CiAgICAgICAgICAgICBpZiAoZmF2b3JpdGVQcml0bmVyLmdldElkKCkuZXF1YWxzKHByaW50ZXJJZCkpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KQEAgLTMwMywyOCArNDc5LDIyIEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZm9yZ2V0RmF2b3JpdGVQcmludGVyKFByaW50ZXJJZCBwcmludGVySWQpIHsKLSAgICAgICAgTGlzdDxQcmludGVySW5mbz4gbmV3RmF2b3JpdGVQcmludGVycyA9IG51bGw7CisgICAgICAgIGZpbmFsIGludCBmYXZvcml0ZVByaW50ZXJDb3VudCA9IG1GYXZvcml0ZVByaW50ZXJzLnNpemUoKTsKKyAgICAgICAgTGlzdDxQYWlyPFByaW50ZXJJbmZvLCBMb2NhdGlvbj4+IG5ld0Zhdm9yaXRlUHJpbnRlcnMgPSBuZXcgQXJyYXlMaXN0PD4oCisgICAgICAgICAgICAgICAgZmF2b3JpdGVQcmludGVyQ291bnQgLSAxKTsKIAogICAgICAgICAvLyBSZW1vdmUgdGhlIHByaW50ZXIgZnJvbSB0aGUgZmF2b3JpdGVzLgotICAgICAgICBmaW5hbCBpbnQgZmF2b3JpdGVQcmludGVyQ291bnQgPSBtRmF2b3JpdGVQcmludGVycy5zaXplKCk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmF2b3JpdGVQcmludGVyQ291bnQ7IGkrKykgewotICAgICAgICAgICAgUHJpbnRlckluZm8gZmF2b3JpdGVQcmludGVyID0gbUZhdm9yaXRlUHJpbnRlcnMuZ2V0KGkpOwotICAgICAgICAgICAgaWYgKGZhdm9yaXRlUHJpbnRlci5nZXRJZCgpLmVxdWFscyhwcmludGVySWQpKSB7Ci0gICAgICAgICAgICAgICAgbmV3RmF2b3JpdGVQcmludGVycyA9IG5ldyBBcnJheUxpc3Q8PigpOwotICAgICAgICAgICAgICAgIG5ld0Zhdm9yaXRlUHJpbnRlcnMuYWRkQWxsKG1QcmludGVycyk7Ci0gICAgICAgICAgICAgICAgbmV3RmF2b3JpdGVQcmludGVycy5yZW1vdmUoaSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoIW1GYXZvcml0ZVByaW50ZXJzLmdldChpKS5maXJzdC5nZXRJZCgpLmVxdWFscyhwcmludGVySWQpKSB7CisgICAgICAgICAgICAgICAgbmV3RmF2b3JpdGVQcmludGVycy5hZGQobUZhdm9yaXRlUHJpbnRlcnMuZ2V0KGkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIC8vIElmIHdlIHJlbW92ZWQgYSBmYXZvcml0ZSBwcmludGVyLCB3ZSBoYXZlIHdvcmsgdG8gZG8uCi0gICAgICAgIGlmIChuZXdGYXZvcml0ZVByaW50ZXJzICE9IG51bGwpIHsKLSAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgcHJpbnRlciBmcm9tIGhpc3RvcnkgYW5kIHBlcnNpc3QgdGhlIGxhdHRlci4KLSAgICAgICAgICAgIG1QZXJzaXN0ZW5jZU1hbmFnZXIucmVtb3ZlSGlzdG9yaWNhbFByaW50ZXJBbmRXcml0ZVByaW50ZXJIaXN0b3J5KHByaW50ZXJJZCk7CisgICAgICAgIC8vIFJlbW92ZSB0aGUgcHJpbnRlciBmcm9tIGhpc3RvcnkgYW5kIHBlcnNpc3QgdGhlIGxhdHRlci4KKyAgICAgICAgbVBlcnNpc3RlbmNlTWFuYWdlci5yZW1vdmVIaXN0b3JpY2FsUHJpbnRlckFuZFdyaXRlUHJpbnRlckhpc3RvcnkocHJpbnRlcklkKTsKIAotICAgICAgICAgICAgLy8gUmVjb21wdXRlIGFuZCBkZWxpdmVyIHRoZSBwcmludGVycy4KLSAgICAgICAgICAgIHVwZGF0ZVByaW50ZXJzKG1EaXNjb3ZlcnlTZXNzaW9uLmdldFByaW50ZXJzKCksIG5ld0Zhdm9yaXRlUHJpbnRlcnMpOwotICAgICAgICB9CisgICAgICAgIC8vIFJlY29tcHV0ZSBhbmQgZGVsaXZlciB0aGUgcHJpbnRlcnMuCisgICAgICAgIHVwZGF0ZVByaW50ZXJzKG1EaXNjb3ZlcnlTZXNzaW9uLmdldFByaW50ZXJzKCksIG5ld0Zhdm9yaXRlUHJpbnRlcnMsIGdldEN1cnJlbnRMb2NhdGlvbigpKTsKICAgICB9CiAKICAgICBwcml2YXRlIGZpbmFsIGNsYXNzIFBlcnNpc3RlbmNlTWFuYWdlciB7CkBAIC0zMzMsMTggKzUwMywyMiBAQAogICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHX1BSSU5URVJTID0gInByaW50ZXJzIjsKIAogICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHX1BSSU5URVIgPSAicHJpbnRlciI7CisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdfTE9DQVRJT04gPSAibG9jYXRpb24iOwogICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHX1BSSU5URVJfSUQgPSAicHJpbnRlcklkIjsKIAogICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9MT0NBTF9JRCA9ICJsb2NhbElkIjsKICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfU0VSVklDRV9OQU1FID0gInNlcnZpY2VOYW1lIjsKIAorICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9MT05HSVRVREUgPSAibG9uZ2l0dWRlIjsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfTEFUSVRVREUgPSAibGF0aXR1ZGUiOworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9BQ0NVUkFDWSA9ICJhY2N1cmFjeSI7CisKICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfTkFNRSA9ICJuYW1lIjsKICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfREVTQ1JJUFRJT04gPSAiZGVzY3JpcHRpb24iOwotICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9TVEFUVVMgPSAic3RhdHVzIjsKIAogICAgICAgICBwcml2YXRlIGZpbmFsIEF0b21pY0ZpbGUgbVN0YXRlUGVyc2lzdEZpbGU7CiAKLSAgICAgICAgcHJpdmF0ZSBMaXN0PFByaW50ZXJJbmZvPiBtSGlzdG9yaWNhbFByaW50ZXJzID0gbmV3IEFycmF5TGlzdDw+KCk7CisgICAgICAgIHByaXZhdGUgTGlzdDxQYWlyPFByaW50ZXJJbmZvLCBMb2NhdGlvbj4+IG1IaXN0b3JpY2FsUHJpbnRlcnMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKIAogICAgICAgICBwcml2YXRlIGJvb2xlYW4gbVJlYWRIaXN0b3J5Q29tcGxldGVkOwogCkBAIC0zNzgsMTMgKzU1MiwxMyBAQAogICAgICAgICAgICAgbVJlYWRUYXNrLmV4ZWN1dGVPbkV4ZWN1dG9yKEFzeW5jVGFzay5TRVJJQUxfRVhFQ1VUT1IsIChWb2lkW10pIG51bGwpOwogICAgICAgICB9CiAKLSAgICAgICAgcHVibGljIHZvaWQgdXBkYXRlUHJpbnRlcnNIaXN0b3JpY2FsTmFtZXNJZk5lZWRlZChMaXN0PFByaW50ZXJJbmZvPiBwcmludGVycykgeworICAgICAgICBwdWJsaWMgdm9pZCB1cGRhdGVIaXN0b3JpY2FsUHJpbnRlcnNJZk5lZWRlZChMaXN0PFByaW50ZXJJbmZvPiBwcmludGVycykgewogICAgICAgICAgICAgYm9vbGVhbiB3cml0ZUhpc3RvcnkgPSBmYWxzZTsKIAogICAgICAgICAgICAgZmluYWwgaW50IHByaW50ZXJDb3VudCA9IHByaW50ZXJzLnNpemUoKTsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJpbnRlckNvdW50OyBpKyspIHsKICAgICAgICAgICAgICAgICBQcmludGVySW5mbyBwcmludGVyID0gcHJpbnRlcnMuZ2V0KGkpOwotICAgICAgICAgICAgICAgIHdyaXRlSGlzdG9yeSB8PSByZW5hbWVQcmludGVySWZOZWVkZWQocHJpbnRlcik7CisgICAgICAgICAgICAgICAgd3JpdGVIaXN0b3J5IHw9IHVwZGF0ZUhpc3RvcmljYWxQcmludGVySWZOZWVkZWQocHJpbnRlcik7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICh3cml0ZUhpc3RvcnkpIHsKQEAgLTM5MiwyNSArNTY2LDU3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBwdWJsaWMgYm9vbGVhbiByZW5hbWVQcmludGVySWZOZWVkZWQoUHJpbnRlckluZm8gcHJpbnRlcikgewotICAgICAgICAgICAgYm9vbGVhbiByZW5hbWVkID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBVcGRhdGVzIHRoZSBoaXN0b3JpY2FsIHByaW50ZXIgc3RhdGUgd2l0aCB0aGUgZ2l2ZW4gcHJpbnRlci4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIHByaW50ZXIgdGhlIHByaW50ZXIgdG8gdXBkYXRlCisgICAgICAgICAqCisgICAgICAgICAqIEByZXR1cm4gdHJ1ZSBpZmYgdGhlIGhpc3RvcmljYWwgcHJpbnRlciBsaXN0IG5lZWRzIHRvIGJlIHVwZGF0ZWQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBib29sZWFuIHVwZGF0ZUhpc3RvcmljYWxQcmludGVySWZOZWVkZWQoUHJpbnRlckluZm8gcHJpbnRlcikgeworICAgICAgICAgICAgYm9vbGVhbiB3cml0ZUhpc3RvcnkgPSBmYWxzZTsKICAgICAgICAgICAgIGZpbmFsIGludCBwcmludGVyQ291bnQgPSBtSGlzdG9yaWNhbFByaW50ZXJzLnNpemUoKTsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJpbnRlckNvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICBQcmludGVySW5mbyBoaXN0b3JpY2FsUHJpbnRlciA9IG1IaXN0b3JpY2FsUHJpbnRlcnMuZ2V0KGkpOwotICAgICAgICAgICAgICAgIGlmIChoaXN0b3JpY2FsUHJpbnRlci5nZXRJZCgpLmVxdWFscyhwcmludGVyLmdldElkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiAhVGV4dFV0aWxzLmVxdWFscyhoaXN0b3JpY2FsUHJpbnRlci5nZXROYW1lKCksIHByaW50ZXIuZ2V0TmFtZSgpKSkgewotICAgICAgICAgICAgICAgICAgICBtSGlzdG9yaWNhbFByaW50ZXJzLnNldChpLCBwcmludGVyKTsKLSAgICAgICAgICAgICAgICAgICAgcmVuYW1lZCA9IHRydWU7CisgICAgICAgICAgICAgICAgUHJpbnRlckluZm8gaGlzdG9yaWNhbFByaW50ZXIgPSBtSGlzdG9yaWNhbFByaW50ZXJzLmdldChpKS5maXJzdDsKKworICAgICAgICAgICAgICAgIGlmICghaGlzdG9yaWNhbFByaW50ZXIuZ2V0SWQoKS5lcXVhbHMocHJpbnRlci5nZXRJZCgpKSkgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBPdmVyd3JpdGUgdGhlIGhpc3RvcmljYWwgcHJpbnRlciB3aXRoIHRoZSB1cGRhdGVkIHByaW50ZXIgYXMgc29tZSBwcm9wZXJ0aWVzCisgICAgICAgICAgICAgICAgLy8gY2hhbmdlZC4gV2UgaWdub3JlIHRoZSBzdGF0dXMgYXMgdGhpcyBpcyBhIHZvbGF0aWxlIHN0YXRlLgorICAgICAgICAgICAgICAgIGlmIChoaXN0b3JpY2FsUHJpbnRlci5lcXVhbHNJZ25vcmluZ1N0YXR1cyhwcmludGVyKSkgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBtSGlzdG9yaWNhbFByaW50ZXJzLnNldChpLCBuZXcgUGFpcjxQcmludGVySW5mbywgTG9jYXRpb24+KHByaW50ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1IaXN0b3JpY2FsUHJpbnRlcnMuZ2V0KGkpLnNlY29uZCkpOworCisgICAgICAgICAgICAgICAgLy8gV2Ugb25seSBwZXJzaXN0IGxpbWl0ZWQgaW5mb3JtYXRpb24gaW4gdGhlIHByaW50ZXIgaGlzdG9yeSwgaGVuY2UgY2hlY2sgaWYKKyAgICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIHBlcnNpc3QgdGhlIHVwZGF0ZS4KKyAgICAgICAgICAgICAgICAvLyBAc2VlIFBlcnNpc3RlbmNlTWFuYWdlci5Xcml0ZVRhc2sjZG9Xcml0ZVByaW50ZXJIaXN0b3J5CisgICAgICAgICAgICAgICAgaWYgKCFoaXN0b3JpY2FsUHJpbnRlci5nZXROYW1lKCkuZXF1YWxzKHByaW50ZXIuZ2V0TmFtZSgpKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0cy5lcXVhbHMoaGlzdG9yaWNhbFByaW50ZXIuZ2V0RGVzY3JpcHRpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGVyLmdldERlc2NyaXB0aW9uKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUhpc3RvcnkgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHJlbmFtZWQ7CisgICAgICAgICAgICByZXR1cm4gd3JpdGVIaXN0b3J5OwogICAgICAgICB9CiAKICAgICAgICAgcHVibGljIHZvaWQgYWRkUHJpbnRlckFuZFdyaXRlUHJpbnRlckhpc3RvcnkoUHJpbnRlckluZm8gcHJpbnRlcikgewogICAgICAgICAgICAgaWYgKG1IaXN0b3JpY2FsUHJpbnRlcnMuc2l6ZSgpID49IE1BWF9ISVNUT1JZX0xFTkdUSCkgewogICAgICAgICAgICAgICAgIG1IaXN0b3JpY2FsUHJpbnRlcnMucmVtb3ZlKDApOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbUhpc3RvcmljYWxQcmludGVycy5hZGQocHJpbnRlcik7CisKKyAgICAgICAgICAgIExvY2F0aW9uIGxvY2F0aW9uID0gZ2V0Q3VycmVudExvY2F0aW9uKCk7CisgICAgICAgICAgICBpZiAoIWlzTG9jYXRpb25BY2NlcHRhYmxlKGxvY2F0aW9uKSkgeworICAgICAgICAgICAgICAgIGxvY2F0aW9uID0gbnVsbDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbUhpc3RvcmljYWxQcmludGVycy5hZGQobmV3IFBhaXI8UHJpbnRlckluZm8sIExvY2F0aW9uPihwcmludGVyLCBsb2NhdGlvbikpOworCiAgICAgICAgICAgICB3cml0ZVByaW50ZXJIaXN0b3J5KCk7CiAgICAgICAgIH0KIApAQCAtNDE4LDcgKzYyNCw3IEBACiAgICAgICAgICAgICBib29sZWFuIHdyaXRlSGlzdG9yeSA9IGZhbHNlOwogICAgICAgICAgICAgZmluYWwgaW50IHByaW50ZXJDb3VudCA9IG1IaXN0b3JpY2FsUHJpbnRlcnMuc2l6ZSgpOwogICAgICAgICAgICAgZm9yIChpbnQgaSA9IHByaW50ZXJDb3VudCAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0gICAgICAgICAgICAgICAgUHJpbnRlckluZm8gaGlzdG9yaWNhbFByaW50ZXIgPSBtSGlzdG9yaWNhbFByaW50ZXJzLmdldChpKTsKKyAgICAgICAgICAgICAgICBQcmludGVySW5mbyBoaXN0b3JpY2FsUHJpbnRlciA9IG1IaXN0b3JpY2FsUHJpbnRlcnMuZ2V0KGkpLmZpcnN0OwogICAgICAgICAgICAgICAgIGlmIChoaXN0b3JpY2FsUHJpbnRlci5nZXRJZCgpLmVxdWFscyhwcmludGVySWQpKSB7CiAgICAgICAgICAgICAgICAgICAgIG1IaXN0b3JpY2FsUHJpbnRlcnMucmVtb3ZlKGkpOwogICAgICAgICAgICAgICAgICAgICB3cml0ZUhpc3RvcnkgPSB0cnVlOwpAQCAtNDM5LDYzICs2NDUsOTEgQEAKICAgICAgICAgICAgIHJldHVybiBtTGFzdFJlYWRIaXN0b3J5VGltZXN0YW1wICE9IG1TdGF0ZVBlcnNpc3RGaWxlLmdldEJhc2VGaWxlKCkubGFzdE1vZGlmaWVkKCk7CiAgICAgICAgIH0KIAotICAgICAgICBwcml2YXRlIExpc3Q8UHJpbnRlckluZm8+IGNvbXB1dGVGYXZvcml0ZVByaW50ZXJzKExpc3Q8UHJpbnRlckluZm8+IHByaW50ZXJzKSB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBTb3J0IHRoZSBmYXZvcml0ZSBwcmludGVycyBieSB3ZWlnaHQuIElmIGEgcHJpbnRlciBpcyBpbiB0aGUgbGlzdCBtdWx0aXBsZSB0aW1lcyBmb3IKKyAgICAgICAgICogZGlmZmVyZW50IGxvY2F0aW9ucywgYWxsIGluc3RhbmNlcyBhcmUgY29uc2lkZXJlZCB0byBoYXZlIHRoZSBhY2N1bXVsYXRpdmUgd2VpZ2h0LiBUaGUKKyAgICAgICAgICogYWN0dWFsIGZhdm9yaXRlIHByaW50ZXJzIHRvIGRpc3BsYXkgYXJlIGNvbXB1dGVkIGluIHtAbGluayAjY29tcHV0ZUFuZERlbGl2ZXJSZXN1bHR9IGFzCisgICAgICAgICAqIG9ubHkgYXQgdGhpcyB0aW1lIHdlIGtub3cgdGhlIGxvY2F0aW9uIHRvIHVzZSB0byBkZXRlcm1pbmUgaWYgYSBwcmludGVyIGlzIGNsb3NlIGVub3VnaAorICAgICAgICAgKiB0byBiZSBwcmVmZXJyZWQuCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSBwcmludGVycyBUaGUgcHJpbnRlcnMgdG8gc29ydC4KKyAgICAgICAgICogQHJldHVybiBUaGUgc29ydGVkIHByaW50ZXJzLgorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSBMaXN0PFBhaXI8UHJpbnRlckluZm8sIExvY2F0aW9uPj4gc29ydEZhdm9yaXRlUHJpbnRlcnMoCisgICAgICAgICAgICAgICAgTGlzdDxQYWlyPFByaW50ZXJJbmZvLCBMb2NhdGlvbj4+IHByaW50ZXJzKSB7CiAgICAgICAgICAgICBNYXA8UHJpbnRlcklkLCBQcmludGVyUmVjb3JkPiByZWNvcmRNYXAgPSBuZXcgQXJyYXlNYXA8PigpOwogCi0gICAgICAgICAgICAvLyBSZWNvbXB1dGUgdGhlIHdlaWdodHMuCisgICAgICAgICAgICAvLyBDb21wdXRlIHRoZSB3ZWlnaHRzLgogICAgICAgICAgICAgZmxvYXQgY3VycmVudFdlaWdodCA9IDEuMGY7CiAgICAgICAgICAgICBmaW5hbCBpbnQgcHJpbnRlckNvdW50ID0gcHJpbnRlcnMuc2l6ZSgpOwogICAgICAgICAgICAgZm9yIChpbnQgaSA9IHByaW50ZXJDb3VudCAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0gICAgICAgICAgICAgICAgUHJpbnRlckluZm8gcHJpbnRlciA9IHByaW50ZXJzLmdldChpKTsKLSAgICAgICAgICAgICAgICAvLyBBZ2dyZWdhdGUgd2VpZ2h0IGZvciB0aGUgc2FtZSBwcmludGVyCi0gICAgICAgICAgICAgICAgUHJpbnRlclJlY29yZCByZWNvcmQgPSByZWNvcmRNYXAuZ2V0KHByaW50ZXIuZ2V0SWQoKSk7CisgICAgICAgICAgICAgICAgUHJpbnRlcklkIHByaW50ZXJJZCA9IHByaW50ZXJzLmdldChpKS5maXJzdC5nZXRJZCgpOworICAgICAgICAgICAgICAgIFByaW50ZXJSZWNvcmQgcmVjb3JkID0gcmVjb3JkTWFwLmdldChwcmludGVySWQpOwogICAgICAgICAgICAgICAgIGlmIChyZWNvcmQgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICByZWNvcmQgPSBuZXcgUHJpbnRlclJlY29yZChwcmludGVyKTsKLSAgICAgICAgICAgICAgICAgICAgcmVjb3JkTWFwLnB1dChwcmludGVyLmdldElkKCksIHJlY29yZCk7CisgICAgICAgICAgICAgICAgICAgIHJlY29yZCA9IG5ldyBQcmludGVyUmVjb3JkKCk7CisgICAgICAgICAgICAgICAgICAgIHJlY29yZE1hcC5wdXQocHJpbnRlcklkLCByZWNvcmQpOwogICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJlY29yZC5wcmludGVycy5hZGQocHJpbnRlcnMuZ2V0KGkpKTsKKworICAgICAgICAgICAgICAgIC8vIEFnZ3JlZ2F0ZSB3ZWlnaHQgZm9yIHRoZSBzYW1lIHByaW50ZXIKICAgICAgICAgICAgICAgICByZWNvcmQud2VpZ2h0ICs9IGN1cnJlbnRXZWlnaHQ7CiAgICAgICAgICAgICAgICAgY3VycmVudFdlaWdodCAqPSBXRUlHSFRfREVDQVlfQ09FRkZJQ0lFTlQ7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIFNvZnQgdGhlIGZhdm9yaXRlIHByaW50ZXJzLgorICAgICAgICAgICAgLy8gU29ydCB0aGUgZmF2b3JpdGUgcHJpbnRlcnMuCiAgICAgICAgICAgICBMaXN0PFByaW50ZXJSZWNvcmQ+IGZhdm9yaXRlUmVjb3JkcyA9IG5ldyBBcnJheUxpc3Q8PigKICAgICAgICAgICAgICAgICAgICAgcmVjb3JkTWFwLnZhbHVlcygpKTsKICAgICAgICAgICAgIENvbGxlY3Rpb25zLnNvcnQoZmF2b3JpdGVSZWNvcmRzKTsKIAogICAgICAgICAgICAgLy8gV3JpdGUgdGhlIGZhdm9yaXRlcyB0byB0aGUgb3V0cHV0LgotICAgICAgICAgICAgZmluYWwgaW50IGZhdm9yaXRlQ291bnQgPSBNYXRoLm1pbihmYXZvcml0ZVJlY29yZHMuc2l6ZSgpLAotICAgICAgICAgICAgICAgICAgICBNQVhfRkFWT1JJVEVfUFJJTlRFUl9DT1VOVCk7Ci0gICAgICAgICAgICBMaXN0PFByaW50ZXJJbmZvPiBmYXZvcml0ZVByaW50ZXJzID0gbmV3IEFycmF5TGlzdDw+KGZhdm9yaXRlQ291bnQpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmYXZvcml0ZUNvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICBQcmludGVySW5mbyBwcmludGVyID0gZmF2b3JpdGVSZWNvcmRzLmdldChpKS5wcmludGVyOwotICAgICAgICAgICAgICAgIGZhdm9yaXRlUHJpbnRlcnMuYWRkKHByaW50ZXIpOworICAgICAgICAgICAgZmluYWwgaW50IHJlY29yZENvdW50ID0gZmF2b3JpdGVSZWNvcmRzLnNpemUoKTsKKyAgICAgICAgICAgIExpc3Q8UGFpcjxQcmludGVySW5mbywgTG9jYXRpb24+PiBmYXZvcml0ZVByaW50ZXJzID0gbmV3IEFycmF5TGlzdDw+KHByaW50ZXJDb3VudCk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlY29yZENvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICBmYXZvcml0ZVByaW50ZXJzLmFkZEFsbChmYXZvcml0ZVJlY29yZHMuZ2V0KGkpLnByaW50ZXJzKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgcmV0dXJuIGZhdm9yaXRlUHJpbnRlcnM7CiAgICAgICAgIH0KIAorICAgICAgICAvKioKKyAgICAgICAgICogQSBzZXQgb2YgcHJpbnRlcnMgd2l0aCB0aGUgc2FtZSBJRCBhbmQgdGhlIHdlaWdodCBhc3NvY2lhdGVkIHdpdGggdGhlbSBkdXJpbmcKKyAgICAgICAgICoge0BsaW5rICNzb3J0RmF2b3JpdGVQcmludGVyc30uCisgICAgICAgICAqLwogICAgICAgICBwcml2YXRlIGZpbmFsIGNsYXNzIFByaW50ZXJSZWNvcmQgaW1wbGVtZW50cyBDb21wYXJhYmxlPFByaW50ZXJSZWNvcmQ+IHsKLSAgICAgICAgICAgIHB1YmxpYyBmaW5hbCBQcmludGVySW5mbyBwcmludGVyOworICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBUaGUgcHJpbnRlcnMsIGFsbCB3aXRoIHRoZSBzYW1lIElELCBidXQgcG90ZW50aWFsbHkgZGlmZmVyZW50IHByb3BlcnRpZXMgb3IgbG9jYXRpb25zCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHB1YmxpYyBmaW5hbCBMaXN0PFBhaXI8UHJpbnRlckluZm8sIExvY2F0aW9uPj4gcHJpbnRlcnM7CisKKyAgICAgICAgICAgIC8qKiBUaGUgd2VpZ2h0IGFzc29jaWF0ZWQgd2l0aCB0aGUgcHJpbnRlcnMgKi8KICAgICAgICAgICAgIHB1YmxpYyBmbG9hdCB3ZWlnaHQ7CiAKLSAgICAgICAgICAgIHB1YmxpYyBQcmludGVyUmVjb3JkKFByaW50ZXJJbmZvIHByaW50ZXIpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnByaW50ZXIgPSBwcmludGVyOworICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBDcmVhdGUgYSBuZXcgcmVjb3JkLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBwdWJsaWMgUHJpbnRlclJlY29yZCgpIHsKKyAgICAgICAgICAgICAgICBwcmludGVycyA9IG5ldyBBcnJheUxpc3Q8PigpOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIENvbXBhcmUgdHdvIHJlY29yZHMgYnkgd2VpZ2h0LgorICAgICAgICAgICAgICovCiAgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgIHB1YmxpYyBpbnQgY29tcGFyZVRvKFByaW50ZXJSZWNvcmQgYW5vdGhlcikgewogICAgICAgICAgICAgICAgIHJldHVybiBGbG9hdC5mbG9hdFRvSW50Qml0cyhhbm90aGVyLndlaWdodCkgLSBGbG9hdC5mbG9hdFRvSW50Qml0cyh3ZWlnaHQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBjbGFzcyBSZWFkVGFzayBleHRlbmRzIEFzeW5jVGFzazxWb2lkLCBWb2lkLCBMaXN0PFByaW50ZXJJbmZvPj4geworICAgICAgICBwcml2YXRlIGZpbmFsIGNsYXNzIFJlYWRUYXNrCisgICAgICAgICAgICAgICAgZXh0ZW5kcyBBc3luY1Rhc2s8Vm9pZCwgVm9pZCwgTGlzdDxQYWlyPFByaW50ZXJJbmZvLCBMb2NhdGlvbj4+PiB7CiAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHByb3RlY3RlZCBMaXN0PFByaW50ZXJJbmZvPiBkb0luQmFja2dyb3VuZChWb2lkLi4uIGFyZ3MpIHsKKyAgICAgICAgICAgIHByb3RlY3RlZCBMaXN0PFBhaXI8UHJpbnRlckluZm8sIExvY2F0aW9uPj4gZG9JbkJhY2tncm91bmQoVm9pZC4uLiBhcmdzKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZG9SZWFkUHJpbnRlckhpc3RvcnkoKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwcm90ZWN0ZWQgdm9pZCBvblBvc3RFeGVjdXRlKExpc3Q8UHJpbnRlckluZm8+IHByaW50ZXJzKSB7CisgICAgICAgICAgICBwcm90ZWN0ZWQgdm9pZCBvblBvc3RFeGVjdXRlKExpc3Q8UGFpcjxQcmludGVySW5mbywgTG9jYXRpb24+PiBwcmludGVycykgewogICAgICAgICAgICAgICAgIGlmIChERUJVRykgewogICAgICAgICAgICAgICAgICAgICBMb2cuaShMT0dfVEFHLCAicmVhZCBoaXN0b3J5IGNvbXBsZXRlZCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBGdXNlZFByaW50ZXJzUHJvdmlkZXIudGhpcy5oYXNoQ29kZSgpKTsKQEAgLTUxOCw3ICs3NTIsOCBAQAogCiAgICAgICAgICAgICAgICAgZmluYWwgaW50IHByaW50ZXJDb3VudCA9IHByaW50ZXJzLnNpemUoKTsKICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gcHJpbnRlckNvdW50IC0gMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgICAgICAgICAgICAgQ29tcG9uZW50TmFtZSBwcmludGVyU2VydmljZU5hbWUgPSBwcmludGVycy5nZXQoaSkuZ2V0SWQoKS5nZXRTZXJ2aWNlTmFtZSgpOworICAgICAgICAgICAgICAgICAgICBDb21wb25lbnROYW1lIHByaW50ZXJTZXJ2aWNlTmFtZSA9IHByaW50ZXJzLmdldChpKS5maXJzdC5nZXRJZCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldFNlcnZpY2VOYW1lKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghZW5hYmxlZENvbXBvbmVudHMuY29udGFpbnMocHJpbnRlclNlcnZpY2VOYW1lKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRlcnMucmVtb3ZlKGkpOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC01MjksMTIgKzc2NCwxMyBAQAogCiAgICAgICAgICAgICAgICAgLy8gQ29tcHV0ZSB0aGUgZmF2b3JpdGUgcHJpbnRlcnMuCiAgICAgICAgICAgICAgICAgbUZhdm9yaXRlUHJpbnRlcnMuY2xlYXIoKTsKLSAgICAgICAgICAgICAgICBtRmF2b3JpdGVQcmludGVycy5hZGRBbGwoY29tcHV0ZUZhdm9yaXRlUHJpbnRlcnMobUhpc3RvcmljYWxQcmludGVycykpOworICAgICAgICAgICAgICAgIG1GYXZvcml0ZVByaW50ZXJzLmFkZEFsbChzb3J0RmF2b3JpdGVQcmludGVycyhtSGlzdG9yaWNhbFByaW50ZXJzKSk7CiAKICAgICAgICAgICAgICAgICBtUmVhZEhpc3RvcnlDb21wbGV0ZWQgPSB0cnVlOwogCiAgICAgICAgICAgICAgICAgLy8gRGVsaXZlciB0aGUgcHJpbnRlcnMuCi0gICAgICAgICAgICAgICAgdXBkYXRlUHJpbnRlcnMobURpc2NvdmVyeVNlc3Npb24uZ2V0UHJpbnRlcnMoKSwgbUZhdm9yaXRlUHJpbnRlcnMpOworICAgICAgICAgICAgICAgIHVwZGF0ZVByaW50ZXJzKG1EaXNjb3ZlcnlTZXNzaW9uLmdldFByaW50ZXJzKCksIG1GYXZvcml0ZVByaW50ZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q3VycmVudExvY2F0aW9uKCkpOwogCiAgICAgICAgICAgICAgICAgLy8gV2UgYXJlIGRvbmUuCiAgICAgICAgICAgICAgICAgbVJlYWRUYXNrID0gbnVsbDsKQEAgLTU0NCwxMiArNzgwLDEyIEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHJvdGVjdGVkIHZvaWQgb25DYW5jZWxsZWQoTGlzdDxQcmludGVySW5mbz4gcHJpbnRlckluZm9zKSB7CisgICAgICAgICAgICBwcm90ZWN0ZWQgdm9pZCBvbkNhbmNlbGxlZChMaXN0PFBhaXI8UHJpbnRlckluZm8sIExvY2F0aW9uPj4gcHJpbnRlckluZm9zKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgYXJlIGRvbmUuCiAgICAgICAgICAgICAgICAgbVJlYWRUYXNrID0gbnVsbDsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcHJpdmF0ZSBMaXN0PFByaW50ZXJJbmZvPiBkb1JlYWRQcmludGVySGlzdG9yeSgpIHsKKyAgICAgICAgICAgIHByaXZhdGUgTGlzdDxQYWlyPFByaW50ZXJJbmZvLCBMb2NhdGlvbj4+IGRvUmVhZFByaW50ZXJIaXN0b3J5KCkgewogICAgICAgICAgICAgICAgIGZpbmFsIEZpbGVJbnB1dFN0cmVhbSBpbjsKICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICBpbiA9IG1TdGF0ZVBlcnNpc3RGaWxlLm9wZW5SZWFkKCk7CkBAIC01NjEsNyArNzk3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBcnJheUxpc3Q8PigpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICBMaXN0PFByaW50ZXJJbmZvPiBwcmludGVycyA9IG5ldyBBcnJheUxpc3Q8PigpOworICAgICAgICAgICAgICAgICAgICBMaXN0PFBhaXI8UHJpbnRlckluZm8sIExvY2F0aW9uPj4gcHJpbnRlcnMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKICAgICAgICAgICAgICAgICAgICAgWG1sUHVsbFBhcnNlciBwYXJzZXIgPSBYbWwubmV3UHVsbFBhcnNlcigpOwogICAgICAgICAgICAgICAgICAgICBwYXJzZXIuc2V0SW5wdXQoaW4sIFN0YW5kYXJkQ2hhcnNldHMuVVRGXzgubmFtZSgpKTsKICAgICAgICAgICAgICAgICAgICAgcGFyc2VTdGF0ZShwYXJzZXIsIHByaW50ZXJzKTsKQEAgLTU4Miw4ICs4MTgsOSBAQAogICAgICAgICAgICAgICAgIHJldHVybiBDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcHJpdmF0ZSB2b2lkIHBhcnNlU3RhdGUoWG1sUHVsbFBhcnNlciBwYXJzZXIsIExpc3Q8UHJpbnRlckluZm8+IG91dFByaW50ZXJzKQotICAgICAgICAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24sIFhtbFB1bGxQYXJzZXJFeGNlcHRpb24geworICAgICAgICAgICAgcHJpdmF0ZSB2b2lkIHBhcnNlU3RhdGUoWG1sUHVsbFBhcnNlciBwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgIExpc3Q8UGFpcjxQcmludGVySW5mbywgTG9jYXRpb24+PiBvdXRQcmludGVycykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24sIFhtbFB1bGxQYXJzZXJFeGNlcHRpb24gewogICAgICAgICAgICAgICAgIHBhcnNlci5uZXh0KCk7CiAgICAgICAgICAgICAgICAgc2tpcEVtcHR5VGV4dFRhZ3MocGFyc2VyKTsKICAgICAgICAgICAgICAgICBleHBlY3QocGFyc2VyLCBYbWxQdWxsUGFyc2VyLlNUQVJUX1RBRywgVEFHX1BSSU5URVJTKTsKQEAgLTYwMSw4ICs4MzgsOSBAQAogICAgICAgICAgICAgICAgIGV4cGVjdChwYXJzZXIsIFhtbFB1bGxQYXJzZXIuRU5EX1RBRywgVEFHX1BSSU5URVJTKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcHJpdmF0ZSBib29sZWFuIHBhcnNlUHJpbnRlcihYbWxQdWxsUGFyc2VyIHBhcnNlciwgTGlzdDxQcmludGVySW5mbz4gb3V0UHJpbnRlcnMpCi0gICAgICAgICAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgWG1sUHVsbFBhcnNlckV4Y2VwdGlvbiB7CisgICAgICAgICAgICBwcml2YXRlIGJvb2xlYW4gcGFyc2VQcmludGVyKFhtbFB1bGxQYXJzZXIgcGFyc2VyLAorICAgICAgICAgICAgICAgICAgICBMaXN0PFBhaXI8UHJpbnRlckluZm8sIExvY2F0aW9uPj4gb3V0UHJpbnRlcnMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uIHsKICAgICAgICAgICAgICAgICBza2lwRW1wdHlUZXh0VGFncyhwYXJzZXIpOwogICAgICAgICAgICAgICAgIGlmICghYWNjZXB0KHBhcnNlciwgWG1sUHVsbFBhcnNlci5TVEFSVF9UQUcsIFRBR19QUklOVEVSKSkgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC02MTAsNyArODQ4LDYgQEAKIAogICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gcGFyc2VyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsIEFUVFJfTkFNRSk7CiAgICAgICAgICAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gcGFyc2VyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsIEFUVFJfREVTQ1JJUFRJT04pOwotICAgICAgICAgICAgICAgIGZpbmFsIGludCBzdGF0dXMgPSBJbnRlZ2VyLnBhcnNlSW50KHBhcnNlci5nZXRBdHRyaWJ1dGVWYWx1ZShudWxsLCBBVFRSX1NUQVRVUykpOwogCiAgICAgICAgICAgICAgICAgcGFyc2VyLm5leHQoKTsKIApAQCAtNjI1LDExICs4NjIsMzQgQEAKICAgICAgICAgICAgICAgICBleHBlY3QocGFyc2VyLCBYbWxQdWxsUGFyc2VyLkVORF9UQUcsIFRBR19QUklOVEVSX0lEKTsKICAgICAgICAgICAgICAgICBwYXJzZXIubmV4dCgpOwogCi0gICAgICAgICAgICAgICAgUHJpbnRlckluZm8uQnVpbGRlciBidWlsZGVyID0gbmV3IFByaW50ZXJJbmZvLkJ1aWxkZXIocHJpbnRlcklkLCBuYW1lLCBzdGF0dXMpOworICAgICAgICAgICAgICAgIHNraXBFbXB0eVRleHRUYWdzKHBhcnNlcik7CisgICAgICAgICAgICAgICAgTG9jYXRpb24gbG9jYXRpb247CisgICAgICAgICAgICAgICAgaWYgKGFjY2VwdChwYXJzZXIsIFhtbFB1bGxQYXJzZXIuU1RBUlRfVEFHLCBUQUdfTE9DQVRJT04pKSB7CisgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uID0gbmV3IExvY2F0aW9uKCIiKTsKKyAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24uc2V0TG9uZ2l0dWRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvdWJsZS5wYXJzZURvdWJsZShwYXJzZXIuZ2V0QXR0cmlidXRlVmFsdWUobnVsbCwgQVRUUl9MT05HSVRVREUpKSk7CisgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLnNldExhdGl0dWRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvdWJsZS5wYXJzZURvdWJsZShwYXJzZXIuZ2V0QXR0cmlidXRlVmFsdWUobnVsbCwgQVRUUl9MQVRJVFVERSkpKTsKKyAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24uc2V0QWNjdXJhY3koCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXQucGFyc2VGbG9hdChwYXJzZXIuZ2V0QXR0cmlidXRlVmFsdWUobnVsbCwgQVRUUl9BQ0NVUkFDWSkpKTsKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VyLm5leHQoKTsKKworICAgICAgICAgICAgICAgICAgICBza2lwRW1wdHlUZXh0VGFncyhwYXJzZXIpOworICAgICAgICAgICAgICAgICAgICBleHBlY3QocGFyc2VyLCBYbWxQdWxsUGFyc2VyLkVORF9UQUcsIFRBR19MT0NBVElPTik7CisgICAgICAgICAgICAgICAgICAgIHBhcnNlci5uZXh0KCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24gPSBudWxsOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIElmIHRoZSBwcmludGVyIGlzIGF2YWlsYWJsZSB0aGUgcHJpbnRlciB3aWxsIGJlIHJlcGxhY2VkIGJ5IHRoZSBvbmUgcmVhZCBmcm9tIHRoZQorICAgICAgICAgICAgICAgIC8vIGRpc2NvdmVyeSBzZXNzaW9uLCBoZW5jZSB0aGUgb25seSB0aW1lIHdoZW4gdGhpcyBvYmplY3QgaXMgdXNlZCBpcyB3aGVuIHRoZQorICAgICAgICAgICAgICAgIC8vIHByaW50ZXIgaXMgdW5hdmFpbGFibGUuCisgICAgICAgICAgICAgICAgUHJpbnRlckluZm8uQnVpbGRlciBidWlsZGVyID0gbmV3IFByaW50ZXJJbmZvLkJ1aWxkZXIocHJpbnRlcklkLCBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgUHJpbnRlckluZm8uU1RBVFVTX1VOQVZBSUxBQkxFKTsKICAgICAgICAgICAgICAgICBidWlsZGVyLnNldERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKTsKICAgICAgICAgICAgICAgICBQcmludGVySW5mbyBwcmludGVyID0gYnVpbGRlci5idWlsZCgpOwogCi0gICAgICAgICAgICAgICAgb3V0UHJpbnRlcnMuYWRkKHByaW50ZXIpOworICAgICAgICAgICAgICAgIG91dFByaW50ZXJzLmFkZChuZXcgUGFpcjxQcmludGVySW5mbywgTG9jYXRpb24+KHByaW50ZXIsIGxvY2F0aW9uKSk7CiAKICAgICAgICAgICAgICAgICBpZiAoREVCVUcpIHsKICAgICAgICAgICAgICAgICAgICAgTG9nLmkoTE9HX1RBRywgIltSRVNUT1JFRF0gIiArIHByaW50ZXIpOwpAQCAtNjQyLDcgKzkwMiw3IEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHByaXZhdGUgdm9pZCBleHBlY3QoWG1sUHVsbFBhcnNlciBwYXJzZXIsIGludCB0eXBlLCBTdHJpbmcgdGFnKQotICAgICAgICAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24sIFhtbFB1bGxQYXJzZXJFeGNlcHRpb24geworICAgICAgICAgICAgICAgICAgICB0aHJvd3MgWG1sUHVsbFBhcnNlckV4Y2VwdGlvbiB7CiAgICAgICAgICAgICAgICAgaWYgKCFhY2NlcHQocGFyc2VyLCB0eXBlLCB0YWcpKSB7CiAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uKCJFeGVwZWN0ZWQgZXZlbnQ6ICIgKyB0eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGFuZCB0YWc6ICIgKyB0YWcgKyAiIGJ1dCBnb3QgZXZlbnQ6ICIgKyBwYXJzZXIuZ2V0RXZlbnRUeXBlKCkKQEAgLTY1OSw3ICs5MTksNyBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBwcml2YXRlIGJvb2xlYW4gYWNjZXB0KFhtbFB1bGxQYXJzZXIgcGFyc2VyLCBpbnQgdHlwZSwgU3RyaW5nIHRhZykKLSAgICAgICAgICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dzIFhtbFB1bGxQYXJzZXJFeGNlcHRpb24gewogICAgICAgICAgICAgICAgIGlmIChwYXJzZXIuZ2V0RXZlbnRUeXBlKCkgIT0gdHlwZSkgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQpAQCAtNjc0LDE0ICs5MzQsMTYgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIHByaXZhdGUgZmluYWwgY2xhc3MgV3JpdGVUYXNrIGV4dGVuZHMgQXN5bmNUYXNrPExpc3Q8UHJpbnRlckluZm8+LCBWb2lkLCBWb2lkPiB7CisgICAgICAgIHByaXZhdGUgZmluYWwgY2xhc3MgV3JpdGVUYXNrCisgICAgICAgICAgICAgICAgZXh0ZW5kcyBBc3luY1Rhc2s8TGlzdDxQYWlyPFByaW50ZXJJbmZvLCBMb2NhdGlvbj4+LCBWb2lkLCBWb2lkPiB7CiAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHByb3RlY3RlZCBWb2lkIGRvSW5CYWNrZ3JvdW5kKExpc3Q8UHJpbnRlckluZm8+Li4uIHByaW50ZXJzKSB7CisgICAgICAgICAgICBwcm90ZWN0ZWQgVm9pZCBkb0luQmFja2dyb3VuZCgKKyAgICAgICAgICAgICAgICAgICAgQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpIExpc3Q8UGFpcjxQcmludGVySW5mbywgTG9jYXRpb24+Pi4uLiBwcmludGVycykgewogICAgICAgICAgICAgICAgIGRvV3JpdGVQcmludGVySGlzdG9yeShwcmludGVyc1swXSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHByaXZhdGUgdm9pZCBkb1dyaXRlUHJpbnRlckhpc3RvcnkoTGlzdDxQcmludGVySW5mbz4gcHJpbnRlcnMpIHsKKyAgICAgICAgICAgIHByaXZhdGUgdm9pZCBkb1dyaXRlUHJpbnRlckhpc3RvcnkoTGlzdDxQYWlyPFByaW50ZXJJbmZvLCBMb2NhdGlvbj4+IHByaW50ZXJzKSB7CiAgICAgICAgICAgICAgICAgRmlsZU91dHB1dFN0cmVhbSBvdXQgPSBudWxsOwogICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgIG91dCA9IG1TdGF0ZVBlcnNpc3RGaWxlLnN0YXJ0V3JpdGUoKTsKQEAgLTY5MywxNCArOTU1LDExIEBACiAKICAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50IHByaW50ZXJDb3VudCA9IHByaW50ZXJzLnNpemUoKTsKICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcmludGVyQ291bnQ7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgUHJpbnRlckluZm8gcHJpbnRlciA9IHByaW50ZXJzLmdldChpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFByaW50ZXJJbmZvIHByaW50ZXIgPSBwcmludGVycy5nZXQoaSkuZmlyc3Q7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZXIuc3RhcnRUYWcobnVsbCwgVEFHX1BSSU5URVIpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemVyLmF0dHJpYnV0ZShudWxsLCBBVFRSX05BTUUsIHByaW50ZXIuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhpc3RvcmljYWwgcHJpbnRlcnMgYXJlIGFsd2F5cyBzdG9yZWQgYXMgdW5hdmFpbGFibGUuCi0gICAgICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemVyLmF0dHJpYnV0ZShudWxsLCBBVFRSX1NUQVRVUywgU3RyaW5nLnZhbHVlT2YoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByaW50ZXJJbmZvLlNUQVRVU19VTkFWQUlMQUJMRSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gcHJpbnRlci5nZXREZXNjcmlwdGlvbigpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0aW9uICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemVyLmF0dHJpYnV0ZShudWxsLCBBVFRSX0RFU0NSSVBUSU9OLCBkZXNjcmlwdGlvbik7CkBAIC03MTMsNiArOTcyLDE4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mbGF0dGVuVG9TdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemVyLmVuZFRhZyhudWxsLCBUQUdfUFJJTlRFUl9JRCk7CiAKKyAgICAgICAgICAgICAgICAgICAgICAgIExvY2F0aW9uIGxvY2F0aW9uID0gcHJpbnRlcnMuZ2V0KGkpLnNlY29uZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2NhdGlvbiAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXplci5zdGFydFRhZyhudWxsLCBUQUdfTE9DQVRJT04pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZXIuYXR0cmlidXRlKG51bGwsIEFUVFJfTE9OR0lUVURFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nLnZhbHVlT2YobG9jYXRpb24uZ2V0TG9uZ2l0dWRlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemVyLmF0dHJpYnV0ZShudWxsLCBBVFRSX0xBVElUVURFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nLnZhbHVlT2YobG9jYXRpb24uZ2V0TGF0aXR1ZGUoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZXIuYXR0cmlidXRlKG51bGwsIEFUVFJfQUNDVVJBQ1ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcudmFsdWVPZihsb2NhdGlvbi5nZXRBY2N1cmFjeSgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXplci5lbmRUYWcobnVsbCwgVEFHX0xPQ0FUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXplci5lbmRUYWcobnVsbCwgVEFHX1BSSU5URVIpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUcpIHsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9zcmMvY29tL2FuZHJvaWQvcHJpbnRzcG9vbGVyL3VpL1BhZ2VBZGFwdGVyLmphdmEgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvc3JjL2NvbS9hbmRyb2lkL3ByaW50c3Bvb2xlci91aS9QYWdlQWRhcHRlci5qYXZhCmluZGV4IDI3NTdiODEuLjYwNmY0ZWI3IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvc3JjL2NvbS9hbmRyb2lkL3ByaW50c3Bvb2xlci91aS9QYWdlQWRhcHRlci5qYXZhCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9zcmMvY29tL2FuZHJvaWQvcHJpbnRzcG9vbGVyL3VpL1BhZ2VBZGFwdGVyLmphdmEKQEAgLTUyLDcgKzUyLDcgQEAKIC8qKgogICogVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBhZGFwdGVyIGZvciB0aGUgcGFnZXMgaW4gdGhlIHByaW50IHByZXZpZXcgbGlzdC4KICAqLwotcHVibGljIGZpbmFsIGNsYXNzIFBhZ2VBZGFwdGVyIGV4dGVuZHMgQWRhcHRlciB7CitwdWJsaWMgZmluYWwgY2xhc3MgUGFnZUFkYXB0ZXIgZXh0ZW5kcyBBZGFwdGVyPFZpZXdIb2xkZXI+IHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9HX1RBRyA9ICJQYWdlQWRhcHRlciI7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX1BSRVZJRVdfUEFHRVNfQkFUQ0ggPSA1MDsKQEAgLTQwOSw3ICs0MDksNyBAQAogICAgICAgICAgICAgICAgIC0gaG9yaXpvbnRhbFBhZGRpbmdBbmRNYXJnaW5zKSAvIGNvbHVtbkNvdW50KSArIDAuNWYpOwogCiAgICAgICAgIC8vIENvbXB1dGUgbWF4IHBhZ2UgaGVpZ2h0LgotICAgICAgICBmaW5hbCBpbnQgcGFnZUNvbnRlbnREZXNpcmVkSGVpZ2h0ID0gKGludCkgKCgoZmxvYXQpIHBhZ2VDb250ZW50RGVzaXJlZFdpZHRoCisgICAgICAgIGZpbmFsIGludCBwYWdlQ29udGVudERlc2lyZWRIZWlnaHQgPSAoaW50KSAoKHBhZ2VDb250ZW50RGVzaXJlZFdpZHRoCiAgICAgICAgICAgICAgICAgLyBwYWdlQXNwZWN0UmF0aW8pICsgMC41Zik7CiAKICAgICAgICAgLy8gSWYgdGhlIHBhZ2UgZG9lcyBub3QgZml0IGVudGlyZWx5IGluIGEgdmVydGljYWwgZGlyZWN0aW9uLApkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3NyYy9jb20vYW5kcm9pZC9wcmludHNwb29sZXIvdWkvUHJpbnRBY3Rpdml0eS5qYXZhIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3NyYy9jb20vYW5kcm9pZC9wcmludHNwb29sZXIvdWkvUHJpbnRBY3Rpdml0eS5qYXZhCmluZGV4IDY1MjE1NjUuLjljMWNmNjQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9zcmMvY29tL2FuZHJvaWQvcHJpbnRzcG9vbGVyL3VpL1ByaW50QWN0aXZpdHkuamF2YQorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvc3JjL2NvbS9hbmRyb2lkL3ByaW50c3Bvb2xlci91aS9QcmludEFjdGl2aXR5LmphdmEKQEAgLTMwLDcgKzMwLDYgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuU2VydmljZUNvbm5lY3Rpb247CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LlNoYXJlZFByZWZlcmVuY2VzOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5TaGFyZWRQcmVmZXJlbmNlcy5PblNoYXJlZFByZWZlcmVuY2VDaGFuZ2VMaXN0ZW5lcjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZUluZm87CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5OYW1lTm90Rm91bmRFeGNlcHRpb247CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlJlc29sdmVJbmZvOwpAQCAtNDYyLDYgKzQ2MSw3IEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBvblVwZGF0ZUNhbmNlbGVkKCkgewogICAgICAgICBpZiAoREVCVUcpIHsKICAgICAgICAgICAgIExvZy5pKExPR19UQUcsICJvblVwZGF0ZUNhbmNlbGVkKCkiKTsKQEAgLTE3MzgsOCArMTczOCw5IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVBhZ2VSYW5nZU9wdGlvbnMoaW50IHBhZ2VDb3VudCkgeworICAgICAgICBAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKICAgICAgICAgQXJyYXlBZGFwdGVyPFNwaW5uZXJJdGVtPEludGVnZXI+PiByYW5nZU9wdGlvbnNTcGlubmVyQWRhcHRlciA9Ci0gICAgICAgICAgICAgICAgKEFycmF5QWRhcHRlcikgbVJhbmdlT3B0aW9uc1NwaW5uZXIuZ2V0QWRhcHRlcigpOworICAgICAgICAgICAgICAgIChBcnJheUFkYXB0ZXI8U3Bpbm5lckl0ZW08SW50ZWdlcj4+KSBtUmFuZ2VPcHRpb25zU3Bpbm5lci5nZXRBZGFwdGVyKCk7CiAgICAgICAgIHJhbmdlT3B0aW9uc1NwaW5uZXJBZGFwdGVyLmNsZWFyKCk7CiAKICAgICAgICAgZmluYWwgaW50W10gcmFuZ2VPcHRpb25zVmFsdWVzID0gZ2V0UmVzb3VyY2VzKCkuZ2V0SW50QXJyYXkoCkBAIC0xOTI4LDYgKzE5MjksNyBAQAogICAgICAgICAgICAgdGhpcy5sYWJlbCA9IGxhYmVsOwogICAgICAgICB9CiAKKyAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICAgICAgICAgICByZXR1cm4gbGFiZWwudG9TdHJpbmcoKTsKICAgICAgICAgfQpAQCAtMjE4Nyw3ICsyMTg5LDcgQEAKICAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24gPT0gMCAmJiBnZXRQZGZQcmludGVyKCkgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICBQcmludGVySG9sZGVyIHByaW50ZXJIb2xkZXIgPSAoUHJpbnRlckhvbGRlcikgZ2V0SXRlbShwb3NpdGlvbik7CiAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gcHJpbnRlckhvbGRlci5wcmludGVyLmdldE5hbWUoKTsKLSAgICAgICAgICAgICAgICAgICAgaWNvbiA9IGdldFJlc291cmNlcygpLmdldERyYXdhYmxlKFIuZHJhd2FibGUuaWNfbWVudV9zYXZldG9wZGYpOworICAgICAgICAgICAgICAgICAgICBpY29uID0gZ2V0UmVzb3VyY2VzKCkuZ2V0RHJhd2FibGUoUi5kcmF3YWJsZS5pY19tZW51X3NhdmV0b3BkZiwgbnVsbCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwb3NpdGlvbiA9PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gZ2V0U3RyaW5nKFIuc3RyaW5nLmFsbF9wcmludGVycyk7CiAgICAgICAgICAgICAgICAgfQpAQCAtMjE5NSwyMCArMjE5NywxNiBAQAogICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbiA9PSAxICYmIGdldFBkZlByaW50ZXIoKSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIFByaW50ZXJIb2xkZXIgcHJpbnRlckhvbGRlciA9IChQcmludGVySG9sZGVyKSBnZXRJdGVtKHBvc2l0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSBwcmludGVySG9sZGVyLnByaW50ZXIuZ2V0TmFtZSgpOwotICAgICAgICAgICAgICAgICAgICBpY29uID0gZ2V0UmVzb3VyY2VzKCkuZ2V0RHJhd2FibGUoUi5kcmF3YWJsZS5pY19tZW51X3NhdmV0b3BkZik7CisgICAgICAgICAgICAgICAgICAgIGljb24gPSBnZXRSZXNvdXJjZXMoKS5nZXREcmF3YWJsZShSLmRyYXdhYmxlLmljX21lbnVfc2F2ZXRvcGRmLCBudWxsKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBvc2l0aW9uID09IGdldENvdW50KCkgLSAxKSB7CiAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gZ2V0U3RyaW5nKFIuc3RyaW5nLmFsbF9wcmludGVycyk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgUHJpbnRlckhvbGRlciBwcmludGVySG9sZGVyID0gKFByaW50ZXJIb2xkZXIpIGdldEl0ZW0ocG9zaXRpb24pOwotICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IHByaW50ZXJIb2xkZXIucHJpbnRlci5nZXROYW1lKCk7Ci0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlSW5mbyBwYWNrYWdlSW5mbyA9IGdldFBhY2thZ2VNYW5hZ2VyKCkuZ2V0UGFja2FnZUluZm8oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZXJIb2xkZXIucHJpbnRlci5nZXRJZCgpLmdldFNlcnZpY2VOYW1lKCkuZ2V0UGFja2FnZU5hbWUoKSwgMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdWJ0aXRsZSA9IHBhY2thZ2VJbmZvLmFwcGxpY2F0aW9uSW5mby5sb2FkTGFiZWwoZ2V0UGFja2FnZU1hbmFnZXIoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpY29uID0gcGFja2FnZUluZm8uYXBwbGljYXRpb25JbmZvLmxvYWRJY29uKGdldFBhY2thZ2VNYW5hZ2VyKCkpOwotICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChOYW1lTm90Rm91bmRFeGNlcHRpb24gbm5mZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLyogaWdub3JlICovCi0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgUHJpbnRlckluZm8gcHJpbnRJbmZvID0gcHJpbnRlckhvbGRlci5wcmludGVyOworCisgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gcHJpbnRJbmZvLmdldE5hbWUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWNvbiA9IHByaW50SW5mby5sb2FkSWNvbihQcmludEFjdGl2aXR5LnRoaXMpOworICAgICAgICAgICAgICAgICAgICBzdWJ0aXRsZSA9IHByaW50SW5mby5nZXREZXNjcmlwdGlvbigpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3NyYy9jb20vYW5kcm9pZC9wcmludHNwb29sZXIvdWkvUHJpbnRQcmV2aWV3Q29udHJvbGxlci5qYXZhIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3NyYy9jb20vYW5kcm9pZC9wcmludHNwb29sZXIvdWkvUHJpbnRQcmV2aWV3Q29udHJvbGxlci5qYXZhCmluZGV4IDg3MTZmZDIuLmNlNTQyMDQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9zcmMvY29tL2FuZHJvaWQvcHJpbnRzcG9vbGVyL3VpL1ByaW50UHJldmlld0NvbnRyb2xsZXIuamF2YQorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvc3JjL2NvbS9hbmRyb2lkL3ByaW50c3Bvb2xlci91aS9QcmludFByZXZpZXdDb250cm9sbGVyLmphdmEKQEAgLTc4LDggKzc4LDggQEAKICAgICAgICAgbVJlY3ljbGVyVmlldy5zZXRMYXlvdXRNYW5hZ2VyKG1MYXlvdXRNYW5nZXIpOwogICAgICAgICBtUmVjeWNsZXJWaWV3LnNldEFkYXB0ZXIobVBhZ2VBZGFwdGVyKTsKICAgICAgICAgbVJlY3ljbGVyVmlldy5zZXRJdGVtVmlld0NhY2hlU2l6ZSgwKTsKLSAgICAgICAgbVByZWxvYWRDb250cm9sbGVyID0gbmV3IFByZWxvYWRDb250cm9sbGVyKG1SZWN5Y2xlclZpZXcpOwotICAgICAgICBtUmVjeWNsZXJWaWV3LnNldE9uU2Nyb2xsTGlzdGVuZXIobVByZWxvYWRDb250cm9sbGVyKTsKKyAgICAgICAgbVByZWxvYWRDb250cm9sbGVyID0gbmV3IFByZWxvYWRDb250cm9sbGVyKCk7CisgICAgICAgIG1SZWN5Y2xlclZpZXcuYWRkT25TY3JvbGxMaXN0ZW5lcihtUHJlbG9hZENvbnRyb2xsZXIpOwogCiAgICAgICAgIG1Db250ZW50VmlldyA9IChQcmludENvbnRlbnRWaWV3KSBhY3Rpdml0eS5maW5kVmlld0J5SWQoUi5pZC5vcHRpb25zX2NvbnRlbnQpOwogICAgICAgICBtRW1iZWRkZWRDb250ZW50Q29udGFpbmVyID0gKEVtYmVkZGVkQ29udGVudENvbnRhaW5lcikgYWN0aXZpdHkuZmluZFZpZXdCeUlkKApAQCAtMzE0LDEyICszMTQsOSBAQAogICAgIH0KIAogICAgIHByaXZhdGUgZmluYWwgY2xhc3MgUHJlbG9hZENvbnRyb2xsZXIgZXh0ZW5kcyBSZWN5Y2xlclZpZXcuT25TY3JvbGxMaXN0ZW5lciB7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgUmVjeWNsZXJWaWV3IG1SZWN5Y2xlclZpZXc7Ci0KICAgICAgICAgcHJpdmF0ZSBpbnQgbU9sZFNjcm9sbFN0YXRlOwogCi0gICAgICAgIHB1YmxpYyBQcmVsb2FkQ29udHJvbGxlcihSZWN5Y2xlclZpZXcgcmVjeWNsZXJWaWV3KSB7Ci0gICAgICAgICAgICBtUmVjeWNsZXJWaWV3ID0gcmVjeWNsZXJWaWV3OworICAgICAgICBwdWJsaWMgUHJlbG9hZENvbnRyb2xsZXIoKSB7CiAgICAgICAgICAgICBtT2xkU2Nyb2xsU3RhdGUgPSBtUmVjeWNsZXJWaWV3LmdldFNjcm9sbFN0YXRlKCk7CiAgICAgICAgIH0KIApAQCAtMzcxLDcgKzM2OCw4IEBACiAgICAgICAgICAgICAgICAgVmlldyBsYXN0Q2hpbGQgPSBsYXlvdXRNYW5hZ2VyLmdldENoaWxkQXQobGF5b3V0TWFuYWdlci5nZXRDaGlsZENvdW50KCkgLSAxKTsKICAgICAgICAgICAgICAgICBWaWV3SG9sZGVyIGxhc3RIb2xkZXIgPSBtUmVjeWNsZXJWaWV3LmdldENoaWxkVmlld0hvbGRlcihsYXN0Q2hpbGQpOwogCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQYWdlUmFuZ2UoZmlyc3RIb2xkZXIuZ2V0UG9zaXRpb24oKSwgbGFzdEhvbGRlci5nZXRQb3NpdGlvbigpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFBhZ2VSYW5nZShmaXJzdEhvbGRlci5nZXRMYXlvdXRQb3NpdGlvbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEhvbGRlci5nZXRMYXlvdXRQb3NpdGlvbigpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvc3JjL2NvbS9hbmRyb2lkL3ByaW50c3Bvb2xlci91aS9TZWxlY3RQcmludGVyQWN0aXZpdHkuamF2YSBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9zcmMvY29tL2FuZHJvaWQvcHJpbnRzcG9vbGVyL3VpL1NlbGVjdFByaW50ZXJBY3Rpdml0eS5qYXZhCmluZGV4IGFiMGIyZjEuLmNkZmM3ZWUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9zcmMvY29tL2FuZHJvaWQvcHJpbnRzcG9vbGVyL3VpL1NlbGVjdFByaW50ZXJBY3Rpdml0eS5qYXZhCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9zcmMvY29tL2FuZHJvaWQvcHJpbnRzcG9vbGVyL3VpL1NlbGVjdFByaW50ZXJBY3Rpdml0eS5qYXZhCkBAIC0yNyw2ICsyNyw3IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkRpYWxvZ0ludGVyZmFjZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnRTZW5kZXIuU2VuZEludGVudEV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uQWN0aXZpdHlJbmZvOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlSW5mbzsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXI7CkBAIC01MSw2ICs1Miw3IEBACiBpbXBvcnQgYW5kcm9pZC52aWV3Lk1lbnU7CiBpbXBvcnQgYW5kcm9pZC52aWV3Lk1lbnVJdGVtOwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3Lk9uQ2xpY2tMaXN0ZW5lcjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwOwogaW1wb3J0IGFuZHJvaWQudmlldy5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkFkYXB0ZXJWaWV3OwpAQCAtNTg3LDIwICs1ODksMzEgQEAKIAogICAgICAgICAgICAgY29udmVydFZpZXcuc2V0RW5hYmxlZChpc0FjdGlvbmFibGUocG9zaXRpb24pKTsKIAotICAgICAgICAgICAgUHJpbnRlckluZm8gcHJpbnRlciA9IChQcmludGVySW5mbykgZ2V0SXRlbShwb3NpdGlvbik7CisgICAgICAgICAgICBmaW5hbCBQcmludGVySW5mbyBwcmludGVyID0gKFByaW50ZXJJbmZvKSBnZXRJdGVtKHBvc2l0aW9uKTsKIAogICAgICAgICAgICAgQ2hhclNlcXVlbmNlIHRpdGxlID0gcHJpbnRlci5nZXROYW1lKCk7Ci0gICAgICAgICAgICBDaGFyU2VxdWVuY2Ugc3VidGl0bGUgPSBudWxsOwotICAgICAgICAgICAgRHJhd2FibGUgaWNvbiA9IG51bGw7CisgICAgICAgICAgICBEcmF3YWJsZSBpY29uID0gcHJpbnRlci5sb2FkSWNvbihTZWxlY3RQcmludGVyQWN0aXZpdHkudGhpcyk7CiAKKyAgICAgICAgICAgIENoYXJTZXF1ZW5jZSBwcmludFNlcnZpY2VMYWJlbDsKICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgUGFja2FnZU1hbmFnZXIgcG0gPSBnZXRQYWNrYWdlTWFuYWdlcigpOwotICAgICAgICAgICAgICAgIFBhY2thZ2VJbmZvIHBhY2thZ2VJbmZvID0gcG0uZ2V0UGFja2FnZUluZm8ocHJpbnRlci5nZXRJZCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAuZ2V0U2VydmljZU5hbWUoKS5nZXRQYWNrYWdlTmFtZSgpLCAwKTsKLSAgICAgICAgICAgICAgICBzdWJ0aXRsZSA9IHBhY2thZ2VJbmZvLmFwcGxpY2F0aW9uSW5mby5sb2FkTGFiZWwocG0pOwotICAgICAgICAgICAgICAgIGljb24gPSBwYWNrYWdlSW5mby5hcHBsaWNhdGlvbkluZm8ubG9hZEljb24ocG0pOwotICAgICAgICAgICAgfSBjYXRjaCAoTmFtZU5vdEZvdW5kRXhjZXB0aW9uIG5uZmUpIHsKLSAgICAgICAgICAgICAgICAvKiBpZ25vcmUgKi8KKyAgICAgICAgICAgICAgICBQYWNrYWdlSW5mbyBwYWNrYWdlSW5mbyA9IGdldFBhY2thZ2VNYW5hZ2VyKCkuZ2V0UGFja2FnZUluZm8oCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGVyLmdldElkKCkuZ2V0U2VydmljZU5hbWUoKS5nZXRQYWNrYWdlTmFtZSgpLCAwKTsKKworICAgICAgICAgICAgICAgIHByaW50U2VydmljZUxhYmVsID0gcGFja2FnZUluZm8uYXBwbGljYXRpb25JbmZvLmxvYWRMYWJlbChnZXRQYWNrYWdlTWFuYWdlcigpKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKE5hbWVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgcHJpbnRTZXJ2aWNlTGFiZWwgPSBudWxsOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBDaGFyU2VxdWVuY2UgZGVzY3JpcHRpb24gPSBwcmludGVyLmdldERlc2NyaXB0aW9uKCk7CisKKyAgICAgICAgICAgIENoYXJTZXF1ZW5jZSBzdWJ0aXRsZTsKKyAgICAgICAgICAgIGlmIChwcmludFNlcnZpY2VMYWJlbCA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgc3VidGl0bGUgPSBkZXNjcmlwdGlvbjsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZGVzY3JpcHRpb24gPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHN1YnRpdGxlID0gcHJpbnRTZXJ2aWNlTGFiZWw7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHN1YnRpdGxlID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByaW50ZXJfZXh0ZW5kZWRfZGVzY3JpcHRpb25fdGVtcGxhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludFNlcnZpY2VMYWJlbCwgZGVzY3JpcHRpb24pOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBUZXh0VmlldyB0aXRsZVZpZXcgPSAoVGV4dFZpZXcpIGNvbnZlcnRWaWV3LmZpbmRWaWV3QnlJZChSLmlkLnRpdGxlKTsKQEAgLTYxNSw2ICs2MjgsMjAgQEAKICAgICAgICAgICAgICAgICBzdWJ0aXRsZVZpZXcuc2V0VmlzaWJpbGl0eShWaWV3LkdPTkUpOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBJbWFnZVZpZXcgbW9yZUluZm9WaWV3ID0gKEltYWdlVmlldykgY29udmVydFZpZXcuZmluZFZpZXdCeUlkKFIuaWQubW9yZV9pbmZvKTsKKyAgICAgICAgICAgIGlmIChwcmludGVyLmdldEluZm9JbnRlbnQoKSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgbW9yZUluZm9WaWV3LnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKKyAgICAgICAgICAgICAgICBtb3JlSW5mb1ZpZXcuc2V0T25DbGlja0xpc3RlbmVyKG5ldyBPbkNsaWNrTGlzdGVuZXIoKSB7CisgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikgeworICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydEludGVudFNlbmRlcihwcmludGVyLmdldEluZm9JbnRlbnQoKS5nZXRJbnRlbnRTZW5kZXIoKSwgbnVsbCwgMCwgMCwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChTZW5kSW50ZW50RXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZShMT0dfVEFHLCAiQ291bGQgbm90IGV4ZWN1dGUgcGVuZGluZyBpbmZvIGludGVudDogJXMiLCBlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBJbWFnZVZpZXcgaWNvblZpZXcgPSAoSW1hZ2VWaWV3KSBjb252ZXJ0Vmlldy5maW5kVmlld0J5SWQoUi5pZC5pY29uKTsKICAgICAgICAgICAgIGlmIChpY29uICE9IG51bGwpIHsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9zcmMvY29tL2FuZHJvaWQvcHJpbnRzcG9vbGVyL3dpZGdldC9QcmludENvbnRlbnRWaWV3LmphdmEgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvc3JjL2NvbS9hbmRyb2lkL3ByaW50c3Bvb2xlci93aWRnZXQvUHJpbnRDb250ZW50Vmlldy5qYXZhCmluZGV4IGU2NjEzZmEuLjBiYjRiZmEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9zcmMvY29tL2FuZHJvaWQvcHJpbnRzcG9vbGVyL3dpZGdldC9QcmludENvbnRlbnRWaWV3LmphdmEKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3NyYy9jb20vYW5kcm9pZC9wcmludHNwb29sZXIvd2lkZ2V0L1ByaW50Q29udGVudFZpZXcuamF2YQpAQCAtNDE1LDYgKzQxNSw3IEBACiAgICAgICAgICAgICBvbkRyYWdQcm9ncmVzcyhwcm9ncmVzcyk7CiAgICAgICAgIH0KIAorICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHVibGljIHZvaWQgb25WaWV3UmVsZWFzZWQoVmlldyBjaGlsZCwgZmxvYXQgdmVsb2NpdHlYLCBmbG9hdCB2ZWxvY2l0eVkpIHsKICAgICAgICAgICAgIGZpbmFsIGludCBjaGlsZFRvcCA9IGNoaWxkLmdldFRvcCgpOwogCkBAIC00MzUsMTQgKzQzNiwxNyBAQAogICAgICAgICAgICAgaW52YWxpZGF0ZSgpOwogICAgICAgICB9CiAKKyAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyBpbnQgZ2V0T3JkZXJlZENoaWxkSW5kZXgoaW50IGluZGV4KSB7CiAgICAgICAgICAgICByZXR1cm4gZ2V0Q2hpbGRDb3VudCgpIC0gaW5kZXggLSAxOwogICAgICAgICB9CiAKKyAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyBpbnQgZ2V0Vmlld1ZlcnRpY2FsRHJhZ1JhbmdlKFZpZXcgY2hpbGQpIHsKICAgICAgICAgICAgIHJldHVybiBtRHJhZ2dhYmxlQ29udGVudC5nZXRIZWlnaHQoKTsKICAgICAgICAgfQogCisgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwdWJsaWMgaW50IGNsYW1wVmlld1Bvc2l0aW9uVmVydGljYWwoVmlldyBjaGlsZCwgaW50IHRvcCwgaW50IGR5KSB7CiAgICAgICAgICAgICBmaW5hbCBpbnQgc3RhdGljT3B0aW9uQm90dG9tID0gbVN0YXRpY0NvbnRlbnQuZ2V0Qm90dG9tKCk7CiAgICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4odG9wLCBnZXRPcGVuZWRPcHRpb25zWSgpKSwgZ2V0Q2xvc2VkT3B0aW9uc1koKSk7CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWFmL2FycmF5cy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWFmL2FycmF5cy54bWwKaW5kZXggYzg4NjQ3Ni4uODcyMGViMiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1hZi9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtYWYvYXJyYXlzLnhtbApAQCAtNTksMjMgKzU5LDI2IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjQ1MDc1NjMxMjMxMjEyNzMyIj4iR2VicnVpayBhbHR5ZCBIRENQLWtvbnRyb2xlcmluZyI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iMzEwMDUzNDg3NDUyOTI0MDI5MSI+IjY0IEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTYgSyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjYzNjEyODY5MjQyNjg3MTYzOTciPiIxIE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2NDA1MjAzMjM5NTYwNjk1MjY2Ij4iNCBNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2IE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4NjY1MjA2MTk5MjA5Njk4NTAxIj4iQWYiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4iNjQgSyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IjI1NiBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjEgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjQgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI4MDMxOTkxMDI1ODkxMjY5MzgiPiIxNiBNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjQgSyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiIyNTYgSyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjgwODU4NjcyMDkyMDIxNTM0MDMiPiIxIE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4iQWYiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0NjIyNDYwMzMzMDM4NTg2NzkxIj4iNjQgSyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIyMTIxMjU2MjUxNjk1ODIzMzAiPiIyNTYgSyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxIE0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiI2NCBLIHBlciBsb2didWZmZXIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyODIyMzA5NzQ3Njc1NzU4NjI4Ij4iMjU2IEsgcGVyIGxvZ2J1ZmZlciI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiIxIE0gcGVyIGxvZ2J1ZmZlciI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjU3NDg1Mjg2NDM5Mzc1MDAzNDkiPiI0IE0gcGVyIGxvZ2J1ZmZlciI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiIxNiBNIHBlciBsb2didWZmZXIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4iQWYiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4iNjQgSyBwZXIgbG9nYnVmZmVyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+IjI1NiBLIHBlciBsb2didWZmZXIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4iMSBNIHBlciBsb2didWZmZXIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4iNCBNIHBlciBsb2didWZmZXIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4iMTYgTSBwZXIgbG9nYnVmZmVyIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+IkFuaW1hc2llIGFmIjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtYWYvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWFmL3N0cmluZ3MueG1sCmluZGV4IDBkOWQ3OWMuLmViZTg3NTIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtYWYvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1hZi9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0Nyw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+IkxhYXQgZW5pZ2UgcHJvZ3JhbSBuYSBla3N0ZXJuIGdlc2tyeWYgd29yZCwgb25nZWFnIG1hbmlmZXN3YWFyZGVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4iVmVycGxpZyB2ZXJzdGVsYmFyZSBncm9vdHRlcyB2aXIgYWt0aXdpdGVpdGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllc19zdW1tYXJ5IiBtc2dpZD0iNDUwODIxNzQ3Njk5NzE4MjIxNiI+Ik1hYWsgZ3Jvb3R0ZSB2YW4gYWxsZSBha3Rpd2l0ZWl0ZSB2ZXJzdGVsYmFhciB2aXIgdmVlbHZ1bGRpZ2UgdmVuc3RlcnMsIG9uZ2VhZyBtYW5pZmVzd2FhcmRlcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydCIgbXNnaWQ9IjE0NjE4OTMzNTEyNzg5NDA0MTYiPiJBa3RpdmVlciB2b3JtdnJ5ZSB2ZW5zdGVycyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkiIG1zZ2lkPSIyMjUyNTYzNDk3NDg1NDM2NTM0Ij4iQWt0aXZlZXIgc3RldW4gdmlyIGVrc3BlcmltZW50ZWxlIHZvcm12cnllIHZlbnN0ZXJzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF90aXRsZSIgbXNnaWQ9IjM4NjA0NzE2NTQ0Mzk0MTg4MjIiPiJXZXJrc2tlcm0tcnVnc3RldW53YWd3b29yZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4iVm9sbGUgcmVrZW5hYXJydWdzdGV1bmUgd29yZCBuaWUgdGFucyBiZXNrZXJtIG5pZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiJSYWFrIG9tIGRpZSB3YWd3b29yZCB2aXIgdm9sbGVkaWdlIHJla2VuYWFycnVnc3RldW5lIHRlIHZlcmFuZGVyIG9mIHRlIHZlcnd5ZGVyIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1hbS9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1hbS9hcnJheXMueG1sCmluZGV4IDMyNGVlODMuLjYyZTM3MmIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtYW0vYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWFtL2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+IuGIgeGIjeGMiuGLnCDhi6hIRENQIOGIneGIjeGKqOGJsyDhibDhjKDhiYDhiJ0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMxMDA1MzQ4NzQ1MjkyNDAyOTEiPiI2NCDhiqrhiaMiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTYg4Yqq4YmjIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+IjEg4Yic4YmjIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjQwNTIwMzIzOTU2MDY5NTI2NiI+IjQg4Yic4YmjIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2IOGInOGJoyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiLhjKDhjY3hibfhiI0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4iNjQg4Yqq4YmjIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU2IOGKquGJoyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI0MjM1Mjg2NzUyOTQzMzM4MzEiPiIxIOGInOGJoyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjQg4Yic4YmjIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2IOGInOGJoyI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfbG93cmFtX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUyNDc5OTM5NTc3MDYxMDE1NCI+IjY0IOGKquGJoyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiIyNTYg4Yqq4YmjIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODA4NTg2NzIwOTIwMjE1MzQwMyI+IjEg4Yic4YmjIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjA4OTQ3MDcyMDQ1MTA2ODM2NCI+IuGMoOGNjeGJt+GIjSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NCDhiqrhiaMiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2IOGKquGJoyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxIOGInOGJoyI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+IjY0IOGKquGJoyDhiaDhiJ3hi53hjI3hiaUg4Yib4Yi14Ymz4YuI4Yi7IOGJi+GMpSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiIyNTYg4Yqq4YmjIOGJoOGIneGLneGMjeGJpSDhiJvhiLXhibPhi4jhiLsg4YmL4YylIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjY5OTMwNjE5ODM1NzQ5NjczMSI+IjEg4YicIOGJoOGIneGLneGMjeGJpSDhiJvhiLXhibPhi4jhiLsg4YmL4YylIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+IjQg4YicIOGJoOGIneGLneGMjeGJpSDhiJvhiLXhibPhi4jhiLsg4YmL4YylIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+IjE2IOGInCDhiaDhiJ3hi53hjI3hiaUg4Yib4Yi14Ymz4YuI4Yi7IOGJi+GMpSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY5MjEwNDg4Mjk3OTExNzkzMzEiPiLhjKDhjY3hibfhiI0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4iNjQg4Yqq4YmjIOGJoOGIneGLneGMjeGJpSDhiJvhiLXhibPhi4jhiLsg4YmL4YylIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+IjI1NiDhiqrhiaMg4Ymg4Yid4Yud4YyN4YmlIOGIm+GIteGJs+GLiOGIuyDhiYvhjKUiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4iMSDhiJwg4Ymg4Yid4Yud4YyN4YmlIOGIm+GIteGJs+GLiOGIuyDhiYvhjKUiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4iNCDhiJwg4Ymg4Yid4Yud4YyN4YmlIOGIm+GIteGJs+GLiOGIuyDhiYvhjKUiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4iMTYg4YicIOGJoOGIneGLneGMjeGJpSDhiJvhiLXhibPhi4jhiLsg4YmL4YylIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+IuGKpeGKkOGImyDhjKDhjY3hibfhiI0iPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1hbS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtYW0vc3RyaW5ncy54bWwKaW5kZXggMWM5YjBhOS4uZTMzZDBmYSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1hbS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWFtL3N0cmluZ3MueG1sCkBAIC0yNDcsNiArMjQ3LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX2FsbG93X29uX2V4dGVybmFsX3N1bW1hcnkiIG1zZ2lkPSIzMTkxOTUyNTA1ODYwMzQzMjMzIj4i4Yqg4YqV4Yy44Ymj4Yir4YmCIOGKpeGItOGJtuGJvSDhjI3hiJ3hibUg4YuN4Yi14YylIOGIs+GLreGMiOGJoSDhiJvhipXhipvhi43hiJ0g4YiY4Ymw4YyN4Ymg4Yiq4YurIOGLiOGLsCDhi43hjKvhi4og4Yib4Yqo4Yib4Ym7IOGIiOGImOGMu+GNjSDhiaXhiYEg4Yur4Yuw4Yit4YyL4YiN4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4i4Yql4YqV4YmF4Yi14YmD4Yi04YuO4Ym9IOGLs+GMjeGImOGKmyDhiqXhipXhi7LhiJjhjKPhjKDhipEg4Yqg4Yi14YyI4Yu14Yu1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXNfc3VtbWFyeSIgbXNnaWQ9IjQ1MDgyMTc0NzY5OTcxODIyMTYiPiLhi6jhi53hiK3hi53hiK0g4Yiw4YqQ4Yu1IOGKpeGItOGJtuGJvSDhiJ3hipXhiJ0g4Yut4YiB4YqRIOGIneGKlSDhiIjhiaDhiK3hiqvhibMg4YiY4Yi14Yqu4Ym24Ym9IOGIgeGIieGKleGInSDhiqXhipXhiYXhiLXhiYPhiLThi47hib0g4Yuz4YyN4YidIOGLqOGImuGImOGMo+GMoOGKkSDhiqXhipXhi7LhiIbhipEg4Yur4Yuw4Yit4YyL4Ym44YuL4YiN4Y2iIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnQiIG1zZ2lkPSIxNDYxODkzMzUxMjc4OTQwNDE2Ij4i4Yuo4YqQ4Yy7IOGJheGIreGMvSDhiJjhiLXhiq7hibbhib3hipUg4Yur4YqV4YmBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnRfc3VtbWFyeSIgbXNnaWQ9IjIyNTI1NjM0OTc0ODU0MzY1MzQiPiLhi6jhiJnhiqjhiKsg4YqQ4Yy7IOGJheGIreGMvSDhiJjhiLXhiq7hibbhib0g4Yu14YyL4Y2N4YqVIOGLq+GKkOGJg+GIjeGNoiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF90aXRsZSIgbXNnaWQ9IjM4NjA0NzE2NTQ0Mzk0MTg4MjIiPiLhi6jhi7ThiLXhiq3hibbhjZUg4YiY4Yyg4Ymj4Ymg4YmC4YurIOGLreGIiOGNjSDhiYPhiI0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9ub25lIiBtc2dpZD0iNjk1MTA5NTQ4NTUzNzc2Nzk1NiI+IuGLtOGIteGKreGJtuGNlSDhiJnhiIkg4Yid4Ym14Yqs4YuO4Ym9IOGJoOGKoOGIgeGKkSDhiLDhi5PhibUg4Yqg4YiN4Ymw4Yyg4Ymg4YmB4YidIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfY2hhbmdlIiBtc2dpZD0iMjczMTE2MzQyNTA4MTE3MjYzOCI+IuGIiOGLtOGIteGKreGJtuGNlSDhiJnhiIkg4Yid4Ym14Yqs4YuO4Ym9IOGLqOGLreGIiOGNjSDhiYPhiI0g4YiI4YiY4YiI4YuI4YylIOGLiOGLreGInSDhiIjhiJvhiLXhi4jhjIjhi7Ug4YqV4YqrIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1hci9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1hci9hcnJheXMueG1sCmluZGV4IDY1NDc1OWYuLjYwZWViZWIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtYXIvYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWFyL2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+IuKAj9in2LPYqtiu2K/Yp9mFINin2YTYqtit2YLZgiDZhdmGIEhEQ1Ag2K/ZiNmF2YvYpyI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iMzEwMDUzNDg3NDUyOTI0MDI5MSI+IjY0INmD2YrZhNmI2KjYp9mK2KoiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTYg2YPZitmE2YjYqNin2YrYqiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjYzNjEyODY5MjQyNjg3MTYzOTciPiIxINmF2YrYutin2KjYp9mK2KoiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2NDA1MjAzMjM5NTYwNjk1MjY2Ij4iNCDZhdmK2LrYp9io2KfZitiqIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2INmF2YrYutin2KjYp9mK2KoiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4NjY1MjA2MTk5MjA5Njk4NTAxIj4i2KXZitmC2KfZgSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NCDZg9mK2YTZiNio2KfZitiqIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU2INmD2YrZhNmI2KjYp9mK2KoiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4iMSDZhdmK2LrYp9io2KfZitiqIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNCDZhdmK2LrYp9io2KfZitiqIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2INmF2YrYutin2KjYp9mK2KoiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI1MjQ3OTkzOTU3NzA2MTAxNTQiPiI2NCDZg9mK2YTZiNio2KfZitiqIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1NiDZg9mK2YTZiNio2KfZitiqIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODA4NTg2NzIwOTIwMjE1MzQwMyI+IjEg2YXZiti62KfYqNin2YrYqiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwODk0NzA3MjA0NTEwNjgzNjQiPiLYpdmK2YLYp9mBIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDYyMjQ2MDMzMzAzODU4Njc5MSI+IjY0INmD2YrZhNmI2KjYp9mK2KoiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2INmD2YrZhNmI2KjYp9mK2KoiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNzA0OTQ2NzY2Njk5MjQyNjUzIj4iMSDZhdmK2LrYp9io2KfZitiqIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9zdW1tYXJpZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI3MzQ2NTk1NDczNTg4NzY1MDE5Ij4iNjQg2YPZitmE2YjYqNin2YrYqiDZhNmD2YQg2LDYp9mD2LHYqSDYqtiu2LLZitmGINmF2KTZgtiqINmE2YTYqtiz2KzZitmEIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMjgyMjMwOTc0NzY3NTc1ODYyOCI+IjI1NiDZg9mK2YTZiNio2KfZitiqINmE2YPZhCDYsNin2YPYsdipINiq2K7YstmK2YYg2YXYpNmC2Kog2YTZhNiq2LPYrNmK2YQiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4iMSDZhdmK2LrYp9io2KfZitiqINmE2YPZhCDYsNin2YPYsdipINiq2K7YstmK2YYg2YXYpNmC2Kog2YTZhNiq2LPYrNmK2YQiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1NzQ4NTI4NjQzOTM3NTAwMzQ5Ij4iNCDZhdmK2LrYp9io2KfZitiqINmE2YPZhCDYsNin2YPYsdipINiq2K7YstmK2YYg2YXYpNmC2Kog2YTZhNiq2LPYrNmK2YQiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxOTc4NjI5MDUxMDg1MTExNTkyIj4iMTYg2YXZiti62KfYqNin2YrYqiDZhNmD2YQg2LDYp9mD2LHYqSDYqtiu2LLZitmGINmF2KTZgtiqINmE2YTYqtiz2KzZitmEIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+Itil2YrZgtin2YEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4iNjQg2YPZitmE2YjYqNin2YrYqiDZhNmD2YQg2LDYp9mD2LHYqSDYqtiu2LLZitmGINmF2KTZgtiqINmE2YTYqtiz2KzZitmEIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+IjI1NiDZg9mK2YTZiNio2KfZitiqINmE2YPZhCDYsNin2YPYsdipINiq2K7YstmK2YYg2YXYpNmC2Kog2YTZhNiq2LPYrNmK2YQiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4iMSDZhdmK2LrYp9io2KfZitiqINmE2YPZhCDYsNin2YPYsdipINiq2K7YstmK2YYg2YXYpNmC2Kog2YTZhNiq2LPYrNmK2YQiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4iNCDZhdmK2LrYp9io2KfZitiqINmE2YPZhCDYsNin2YPYsdipINiq2K7YstmK2YYg2YXYpNmC2Kog2YTZhNiq2LPYrNmK2YQiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4iMTYg2YXZiti62KfYqNin2YrYqiDZhNmD2YQg2LDYp9mD2LHYqSDYqtiu2LLZitmGINmF2KTZgtiqINmE2YTYqtiz2KzZitmEIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+Itil2YrZgtin2YEg2KfZhNix2LPZiNmFINin2YTZhdiq2K3YsdmD2KkiPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1hci9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtYXIvc3RyaW5ncy54bWwKaW5kZXggZmMxMWE2Yi4uNzE3NjFiOSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1hci9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWFyL3N0cmluZ3MueG1sCkBAIC0yNDcsNiArMjQ3LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX2FsbG93X29uX2V4dGVybmFsX3N1bW1hcnkiIG1zZ2lkPSIzMTkxOTUyNTA1ODYwMzQzMjMzIj4i2KrYo9mH2YrZhCDYo9mKINiq2LfYqNmK2YIg2KjYrdmK2Ksg2KrYqtmFINmD2KrYp9io2KrZhyDYudmE2Ykg2LPYudipINiq2K7YstmK2YYg2K7Yp9ix2KzZitip2Iwg2KjYuti2INin2YTZhti42LEg2LnZhiDZgtmK2YUg2KfZhNio2YrYp9mGIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4i2YHYsdi2INil2YXZg9in2YbZitipINiq2LrZitmK2LEg2LnZhNmJINin2YTYo9mG2LTYt9ipIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXNfc3VtbWFyeSIgbXNnaWQ9IjQ1MDgyMTc0NzY5OTcxODIyMTYiPiLZhNiq2YXZg9mK2YYg2KrYutmK2YrYsSDYrdis2YUg2KzZhdmK2Lkg2KfZhNij2YbYtNi32Kkg2YTYqtmG2KfYs9ioINiq2LnYr9ivINin2YTZhtmI2KfZgdiw2Iwg2KjYuti2INin2YTZhti42LEg2LnZhiDZgtmK2YUg2KfZhNio2YrYp9mGLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0IiBtc2dpZD0iMTQ2MTg5MzM1MTI3ODk0MDQxNiI+Itiq2YXZg9mK2YYg2KfZhNmG2YjYp9mB2LAg2KfZhNit2LHYqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkiIG1zZ2lkPSIyMjUyNTYzNDk3NDg1NDM2NTM0Ij4i2YTYqtmF2YPZitmGINil2KrYp9it2Kkg2KfYs9iq2K7Yr9in2YUg2KfZhNmG2YjYp9mB2LAg2KfZhNit2LHYqSDYp9mE2KrYrNix2YrYqNmK2KkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+ItmD2YTZhdipINmF2LHZiNixINin2K3YqtmK2KfYt9mK2Kkg2YTZhNmD2YXYqNmK2YjYqtixIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiLYp9mE2YbYs9iuINin2YTYp9it2KrZitin2LfZitipINin2YTZg9in2YXZhNipINmE2LPYt9itINin2YTZhdmD2KrYqCDYutmK2LEg2YXYrdmF2YrYqSDZgdmKINin2YTZiNmC2Kog2KfZhNit2KfZhNmKIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfY2hhbmdlIiBtc2dpZD0iMjczMTE2MzQyNTA4MTE3MjYzOCI+Itin2YTZhdizINmE2KrYutmK2YrYsSDZg9mE2YXYqSDZhdix2YjYsSDYp9mE2YbYs9iuINin2YTYp9it2KrZitin2LfZitipINin2YTZg9in2YXZhNipINmE2LPYt9itINin2YTZhdmD2KrYqCDYo9mIINil2LLYp9mE2KrZh9inIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1hei1yQVovYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtYXotckFaL2FycmF5cy54bWwKaW5kZXggYzU4YjFjNi4uNjgyYjEzOSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1hei1yQVovYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWF6LXJBWi9hcnJheXMueG1sCkBAIC01OSwyMyArNTksMjYgQEAKICAgICA8aXRlbSBtc2dpZD0iNDUwNzU2MzEyMzEyMTI3MzIiPiJIyZltacWfyZkgSERDUCB5b3hsYW1hIGlzdGlmYWTJmSBlZGluIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjRLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTA1NjExNzU0NTA4OTg4NDc2Ij4iMjU2SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjYzNjEyODY5MjQyNjg3MTYzOTciPiIxTSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0TSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMwMjU0MzEyMTEwMTM0MjQwOTciPiIxNk0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4NjY1MjA2MTk5MjA5Njk4NTAxIj4iRGVha3RpdiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0ODc1NDUzNDAyMzYxNDUzMjQiPiIyNTZLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjFNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyODAzMTk5MTAyNTg5MTI2OTM4Ij4iMTZNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjRLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMU0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4iRGVha3RpdiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxTSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+ImjJmXIganVybmFsIGJ1ZmVyaW7JmSA2NEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyODIyMzA5NzQ3Njc1NzU4NjI4Ij4iaMmZciBqdXJuYWwgYnVmZXJpbsmZIDI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4iaMmZciBqdXJuYWwgYnVmZXJpbsmZIDFNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+ImjJmXIganVybmFsIGJ1ZmVyaW7JmSA0TSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiJoyZlyIGp1cm5hbCBidWZlcmluyZkgMTZNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+IkRlYWt0aXYiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4iaMmZciBqdXJuYWwgYnVmZXJpbsmZIDY0SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzNDIyODUxMTU2NjU2OTgxNjgiPiJoyZlyIGp1cm5hbCBidWZlcmluyZkgMjU2SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiJoyZlyIGp1cm5hbCBidWZlcmluyZkgMU0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4iaMmZciBqdXJuYWwgYnVmZXJpbsmZIDRNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTQzMTM1NDk1Njg1NjY1NTEyMCI+ImjJmXIganVybmFsIGJ1ZmVyaW7JmSAxNk0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4iQW5pbWFzaXlhIGRlYWt0aXYiPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1hei1yQVovc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWF6LXJBWi9zdHJpbmdzLnhtbAppbmRleCA0YTVlYTM3Li5iNWE3MTgxIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWF6LXJBWi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWF6LXJBWi9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0Nyw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+IlNlw6dpbG1pxZ8gaMmZciBoYW5zxLEgdMmZdGJpcWkgYsmZeWFubmFtyZkgZMmZecmZcmzJmXJpbmTJmW4gYXNsxLEgb2xtYXlhcmFxIHhhcmljaSB5YWRkYcWfYSB5YXrEsWxhYmlsyZluIGVkaXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4iw5Zsw6fDvCBkyZl5acWfZGlybcmZayDDvMOnw7xuIG3JmWNidXJpIGbJmWFsaXl5yZl0bMmZciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4iQsmZeWFubmFtyZkgZMmZecmZcmzJmXJpbmTJmW4gYXNsxLEgb2xtYXlhcmFxIGLDvHTDvG4gZsmZYWxpeXnJmXRsyZlyaSDDp294c2F5bMSxIHDJmW5jyZlyyZkgw7zDp8O8biBkyZl5acWfa8mZbiDDtmzDp8O8bMO8IGVkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnQiIG1zZ2lkPSIxNDYxODkzMzUxMjc4OTQwNDE2Ij4iRnJlZWZvcm0gd2luZG93cyBha3RpdiBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnRfc3VtbWFyeSIgbXNnaWQ9IjIyNTI1NjM0OTc0ODU0MzY1MzQiPiJTxLFuYXEgw7zDp8O8biBmcmVlZm9ybSB3aW5kb3dzIGFrdGl2IGVkaXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4iTWFzYcO8c3TDvCByZXplcnYgcGFyb2x1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiJNYXNhw7xzdMO8IHRhbSByZXplcnZsyZlyIGhhesSxcmRhIHFvcnVubWF5xLFibGFyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiJNYXNhw7xzdMO8bsO8biB0YW0gcmV6ZXZyIGtvcHlhbGFubWFzxLEgw7zDp8O8biBwYXJvbHUgZMmZeWnFn23JmWsgdsmZIHlhIHNpbG3JmWsgw7zDp8O8biB0b3h1bnVuIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1iK3NyK0xhdG4vYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtYitzcitMYXRuL2FycmF5cy54bWwKaW5kZXggOGJkZWMzMi4uNDcxNWNiZiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1iK3NyK0xhdG4vYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWIrc3IrTGF0bi9hcnJheXMueG1sCkBAIC01OSwyMyArNTksMjYgQEAKICAgICA8aXRlbSBtc2dpZD0iNDUwNzU2MzEyMzEyMTI3MzIiPiJVdmVrIGtvcmlzdGkgSERDUCBwcm92ZXJ1IjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjQga0IiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTYga0IiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMSBNQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0IE1CIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2IE1CIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+Iklza2xqdcSNZW5vIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTU5MzI4OTM3NjUwMjMxMjkyMyI+IjY0IGtCIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU2IGtCIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjEgTUIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxODA4ODM3NzQ1MDk0NzY1NDEiPiI0IE1CIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2IE1CIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjQga0IiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzNTM0NzgyNzExMDQ1MjYyMzQ0Ij4iMjU2IGtCIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODA4NTg2NzIwOTIwMjE1MzQwMyI+IjEgTUIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4iSXNrbGp1xI1lbm8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0NjIyNDYwMzMzMDM4NTg2NzkxIj4iNjQga0IiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2IGtCIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTcwNDk0Njc2NjY5OTI0MjY1MyI+IjEgTUIiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiI2NCBrQiBwbyBiYWZlcnUgZXZpZGVuY2lqZSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiIyNTYga0IgcG8gYmFmZXJ1IGV2aWRlbmNpamUiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4iMSBNQiBwbyBiYWZlcnUgZXZpZGVuY2lqZSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjU3NDg1Mjg2NDM5Mzc1MDAzNDkiPiI0IE1CIHBvIGJhZmVydSBldmlkZW5jaWplIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+IjE2IE1CIHBvIGJhZmVydSBldmlkZW5jaWplIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+Iklza2xqdcSNZW5vIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjk2OTQ1ODAyOTM0NDc1MDI2MiI+IjY0IGtCIHBvIG1lxJF1bWVtb3JpamkgZXZpZGVuY2lqZSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzNDIyODUxMTU2NjU2OTgxNjgiPiIyNTYga0IgcG8gbWXEkXVtZW1vcmlqaSBldmlkZW5jaWplIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTMxNDIzNDI5OTU1MjI1NDYyMSI+IjEgTUIgcG8gbWXEkXVtZW1vcmlqaSBldmlkZW5jaWplIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+IjQgTUIgcG8gbWXEkXVtZW1vcmlqaSBldmlkZW5jaWplIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTQzMTM1NDk1Njg1NjY1NTEyMCI+IjE2IE1CIHBvIG1lxJF1bWVtb3JpamkgZXZpZGVuY2lqZSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9IndpbmRvd19hbmltYXRpb25fc2NhbGVfZW50cmllcyI+CiAgICAgPGl0ZW0gbXNnaWQ9IjgxMzQxNTY1OTkzNzA4MjQwODEiPiJBbmltYWNpamEgamUgaXNrbGp1xI1lbmEiPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1iK3NyK0xhdG4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWIrc3IrTGF0bi9zdHJpbmdzLnhtbAppbmRleCA2NzZjNjE4Li41NGQyZGZhIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWIrc3IrTGF0bi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWIrc3IrTGF0bi9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0NywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiJPbW9ndcSHYXZhIHVwaXNpdmFuamUgc3ZpaCBhcGxpa2FjaWphIHUgc3BvbGpudSBtZW1vcmlqdSwgYmV6IG9iemlyYSBuYSB2cmVkbm9zdGkgbWFuaWZlc3RhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4iUHJpbnVkbm8gb21vZ3XEh2kgcHJvbWVudSB2ZWxpxI1pbmUgYWt0aXZub3N0aSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4iT21vZ3XEh2F2YSBwcm9tZW51IHZlbGnEjWluZSBzdmloIGFrdGl2bm9zdGkgemEgcmXFvmltIHNhIHZpxaFlIHByb3pvcmEsIGJleiBvYnppcmEgbmEgdnJlZG5vc3RpIG1hbmlmZXN0YS4iPC9zdHJpbmc+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnQgKDE0NjE4OTMzNTEyNzg5NDA0MTYpIC0tPgorICAgIDxza2lwIC8+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnRfc3VtbWFyeSAoMjI1MjU2MzQ5NzQ4NTQzNjUzNCkgLS0+CisgICAgPHNraXAgLz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF90aXRsZSIgbXNnaWQ9IjM4NjA0NzE2NTQ0Mzk0MTg4MjIiPiJMb3ppbmthIHJlemVydm5lIGtvcGlqZSB6YSByYcSNdW5hciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4iUmV6ZXJ2bmUga29waWplIMSNaXRhdm9nIHNpc3RlbWEgdHJlbnV0bm8gbmlzdSB6YcWhdGnEh2VuZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiJEb2Rpcm5pdGUgZGEgYmlzdGUgcHJvbWVuaWxpIGlsaSB1a2xvbmlsaSBsb3ppbmt1IHphIHByYXZsamVuamUgcmV6ZXJ2bmloIGtvcGlqYSDEjWl0YXZvZyBzaXN0ZW1hIG5hIHJhxI11bmFydSI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtYmcvYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtYmcvYXJyYXlzLnhtbAppbmRleCAyNzc4MDBkLi40MjMzOWVmIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWJnL2FycmF5cy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1iZy9hcnJheXMueG1sCkBAIC01OSwyMyArNTksMjYgQEAKICAgICA8aXRlbSBtc2dpZD0iNDUwNzU2MzEyMzEyMTI3MzIiPiLQktC40L3QsNCz0Lgg0LTQsCDRgdC1INC40LfQv9C+0LvQt9Cy0LAg0L/RgNC+0LLQtdGA0LrQsCDRgSBIRENQIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjQg0JrQkSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NiDQmtCRIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+IjEg0JzQkSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0INCc0JEiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTYg0JzQkSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiLQmNC30LrQu9GO0YfQtdC90L4iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4iNjQg0JrQkSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IjI1NiDQmtCRIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjEg0JzQkSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjQg0JzQkSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI4MDMxOTkxMDI1ODkxMjY5MzgiPiIxNiDQnNCRIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjQg0JrQkSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiIyNTYg0JrQkSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjgwODU4NjcyMDkyMDIxNTM0MDMiPiIxINCc0JEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4i0JjQt9C60LvRjtGH0LXQvdC+IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDYyMjQ2MDMzMzAzODU4Njc5MSI+IjY0INCa0JEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2INCa0JEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNzA0OTQ2NzY2Njk5MjQyNjUzIj4iMSDQnNCRIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9zdW1tYXJpZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI3MzQ2NTk1NDczNTg4NzY1MDE5Ij4i0KDQtdCzLiDQsdGD0YTQtdGAIOKAkyA2NCDQmtCRIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMjgyMjMwOTc0NzY3NTc1ODYyOCI+ItCg0LXQsy4g0LHRg9GE0LXRgCDigJMgMjU2INCa0JEiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4i0KDQtdCzLiDQsdGD0YTQtdGAIOKAkyAxINCc0JEiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1NzQ4NTI4NjQzOTM3NTAwMzQ5Ij4i0KDQtdCzLiDQsdGD0YTQtdGAIOKAkyA0INCc0JEiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxOTc4NjI5MDUxMDg1MTExNTkyIj4i0KDQtdCzLiDQsdGD0YTQtdGAIOKAkyAxNiDQnNCRIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+ItCY0LfQutC70Y7Rh9C10L3QviI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI5Njk0NTgwMjkzNDQ3NTAyNjIiPiLQoNC10LMuINCx0YPRhNC10YAg4oCTIDY0INCa0JEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzQyMjg1MTE1NjY1Njk4MTY4Ij4i0KDQtdCzLiDQsdGD0YTQtdGAIOKAkyAyNTYg0JrQkSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiLQoNC10LMuINCx0YPRhNC10YAg4oCTIDEg0JzQkSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM2MDYwNDc3ODA3OTI4OTQxNTEiPiLQoNC10LMuINCx0YPRhNC10YAg4oCTIDQg0JzQkSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU0MzEzNTQ5NTY4NTY2NTUxMjAiPiLQoNC10LMuINCx0YPRhNC10YAg4oCTIDE2INCc0JEiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4i0JDQvdC40LzQsNGG0LjRj9GC0LAg0LUg0LjQt9C60LvRjtGH0LXQvdCwIjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtYmcvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWJnL3N0cmluZ3MueG1sCmluZGV4IDgxODAyNjEuLjk1YmFkYzUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtYmcvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1iZy9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0NywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiLQn9C+0LfQstC+0LvRj9Cy0LAg0L/RgNC40LvQvtC2LiDQtNCwINGB0LUg0LfQsNC/0LjRgdCy0LDRgiDQstGK0LIg0LLRitC90YguINGF0YDQsNC90LjQuy4g0L3QtdC30LDQstC40YHQuNC80L4g0L7RgiDRgdGC0L7QudC90L7RgdGC0LjRgtC1INCyINC80LDQvdC40YTQtdGB0YLQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzIiBtc2dpZD0iODYxNTc2NDM3ODE0NzgyNDk4NSI+ItCS0YrQt9C80L7QttC90L7RgdGCINC30LAg0L/RgNC10L7RgNCw0LfQvNC10YDRj9Cy0LDQvdC1INC90LAg0LDQutGC0LjQstC90L7RgdGC0LjRgtC1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXNfc3VtbWFyeSIgbXNnaWQ9IjQ1MDgyMTc0NzY5OTcxODIyMTYiPiLQlNCw0LLQsCDQstGK0LfQvNC+0LbQvdC+0YHRgiDQt9CwINC/0YDQtdC+0YDQsNC30LzQtdGA0Y/QstCw0L3QtSDQvdCwINCy0YHQuNGH0LrQuCDQsNC60YLQuNCy0L3QvtGB0YLQuCDQsiDRgNC10LbQuNC80LAg0LfQsCDQvdGP0LrQvtC70LrQviDQv9GA0L7Qt9C+0YDQtdGG0LAg0L3QtdC30LDQstC40YHQuNC80L4g0L7RgiDRgdGC0L7QudC90L7RgdGC0LjRgtC1INCyINC80LDQvdC40YTQtdGB0YLQsC4iPC9zdHJpbmc+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnQgKDE0NjE4OTMzNTEyNzg5NDA0MTYpIC0tPgorICAgIDxza2lwIC8+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnRfc3VtbWFyeSAoMjI1MjU2MzQ5NzQ4NTQzNjUzNCkgLS0+CisgICAgPHNraXAgLz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF90aXRsZSIgbXNnaWQ9IjM4NjA0NzE2NTQ0Mzk0MTg4MjIiPiLQndCw0YHRgi4g0LrQvtC80L8uOiDQn9Cw0YDQvtC70LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9ub25lIiBtc2dpZD0iNjk1MTA5NTQ4NTUzNzc2Nzk1NiI+ItCf0L7QvdCw0YHRgtC+0Y/RidC10Lwg0L/RitC70L3QuNGC0LUg0YDQtdC30LXRgNCy0L3QuCDQutC+0L/QuNGPINC30LAg0L3QsNGB0YLQvtC70LXQvSDQutC+0LzQv9GO0YLRitGAINC90LUg0YHQsCDQt9Cw0YnQuNGC0LXQvdC4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfY2hhbmdlIiBtc2dpZD0iMjczMTE2MzQyNTA4MTE3MjYzOCI+ItCU0L7QutC+0YHQvdC10YLQtSwg0LfQsCDQtNCwINC/0YDQvtC80LXQvdC40YLQtSDQuNC70Lgg0L/RgNC10LzQsNGF0L3QtdGC0LUg0L/QsNGA0L7Qu9Cw0YLQsCDQt9CwINC/0YrQu9C90Lgg0YDQtdC30LXRgNCy0L3QuCDQutC+0L/QuNGPINC90LAg0L3QsNGB0YLQvtC70L3QuNGPINC60L7QvNC/0Y7RgtGK0YAiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWJuLXJCRC9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1ibi1yQkQvYXJyYXlzLnhtbAppbmRleCA3NzI5YTRkLi5iODYzOTM0IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWJuLXJCRC9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtYm4tckJEL2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+IuCmuOCmsOCnjeCmrOCmpuCmviBIRENQIOCmquCmsOCngOCmleCnjeCmt+CmoyDgpqzgp43gpq/gpqzgprngpr7gprAg4KaV4Kaw4KeB4KaoIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4i4Kes4Keq4Kem4Kem4KemIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTA1NjExNzU0NTA4OTg4NDc2Ij4i4Keo4Ker4Kes4Kem4Kem4KemIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+IuCnp+CnpuCnpuCnpuCnpuCnpuCnpiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiLgp6rgp6bgp6bgp6bgp6bgp6bgp6YiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4i4Ken4Kes4Kem4Kem4Kem4Kem4Kem4KemIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+IuCmrOCmqOCnjeCmpyDgpobgppvgp4ciPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4i4Kes4KeqSyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IuCnqOCnq+CnrEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4i4KenTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IuCnqk0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyODAzMTk5MTAyNTg5MTI2OTM4Ij4i4Ken4KesTSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfbG93cmFtX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUyNDc5OTM5NTc3MDYxMDE1NCI+IuCnrOCnquCnpuCnpuCnpiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiLgp6jgp6vgp6zgp6bgp6bgp6YiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4i4Ken4Kem4Kem4Kem4Kem4Kem4KemIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjA4OTQ3MDcyMDQ1MTA2ODM2NCI+IuCmrOCmqOCnjeCmpyDgpobgppvgp4ciPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0NjIyNDYwMzMzMDM4NTg2NzkxIj4i4Kes4KeqSyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIyMTIxMjU2MjUxNjk1ODIzMzAiPiLgp6jgp6vgp6xLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTcwNDk0Njc2NjY5OTI0MjY1MyI+IuCnp00iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiLgprLgppcg4Kas4Ka+4Kar4Ka+4KawIOCmquCnjeCmsOCmpOCmvyA2NEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyODIyMzA5NzQ3Njc1NzU4NjI4Ij4i4Kay4KaXIOCmrOCmvuCmq+CmvuCmsCDgpqrgp43gprDgpqTgpr8gMjU2SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiLgprLgppcg4Kas4Ka+4Kar4Ka+4KawIOCmquCnjeCmsOCmpOCmvyAxTSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjU3NDg1Mjg2NDM5Mzc1MDAzNDkiPiLgprLgppcg4Kas4Ka+4Kar4Ka+4KawIOCmquCnjeCmsOCmpOCmvyA0TSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiLgprLgppcg4Kas4Ka+4Kar4Ka+4KawIOCmquCnjeCmsOCmpOCmvyAxNk0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4i4Kas4Kao4KeN4KanIOCmhuCmm+CnhyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI5Njk0NTgwMjkzNDQ3NTAyNjIiPiLgprLgppcg4Kas4Ka+4Kar4Ka+4KawIOCmquCnjeCmsOCmpOCmvyDgp6zgp6pLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+IuCmsuCmlyDgpqzgpr7gpqvgpr7gprAg4Kaq4KeN4Kaw4Kak4Ka/IOCnqOCnq+CnrEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4i4Kay4KaXIOCmrOCmvuCmq+CmvuCmsCDgpqrgp43gprDgpqTgpr8g4KenTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM2MDYwNDc3ODA3OTI4OTQxNTEiPiLgprLgppcg4Kas4Ka+4Kar4Ka+4KawIOCmquCnjeCmsOCmpOCmvyDgp6pNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTQzMTM1NDk1Njg1NjY1NTEyMCI+IuCmsuCmlyDgpqzgpr7gpqvgpr7gprAg4Kaq4KeN4Kaw4Kak4Ka/IOCnp+CnrE0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4i4KaF4KeN4Kav4Ka+4Kao4Ka/4Kau4KeH4Ka24KaoIOCmrOCmqOCnjeCmpyDgppXgprDgp4HgpqgiPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1ibi1yQkQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWJuLXJCRC9zdHJpbmdzLnhtbAppbmRleCAwZTc3ODcxLi5lNGQ5N2Q3IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWJuLXJCRC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWJuLXJCRC9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0NywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiLgpq7gp43gpq/gpr7gpqjgpr/gpqvgp4fgprjgp43gpp8g4Kau4Ka+4Kao4KaX4KeB4Kay4Ka/IOCmqOCmv+CmsOCnjeCmrOCmv+CmtuCnh+Cmt+CnhyDgpq/gp4fgppXgp4vgpqjgp4sg4KaF4KeN4Kav4Ka+4Kaq4KeN4Kay4Ka/4KaV4KeH4Ka24Ka+4Kao4KaV4KeHIOCmrOCmvuCmueCnjeCmr+Cmv+CmlSDgprjgpp7gp43gpprgpq/gprzgprjgp43gpqXgpr7gpqjgp4cg4Kay4KeH4KaW4Ka+4KawIOCmieCmquCmr+CngeCmleCnjeCmpCDgpqzgpr7gpqjgpr7gpq/gprwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiLgpobgppXgpr7gprAg4Kaq4Kaw4Ka/4Kas4Kaw4KeN4Kak4Kao4Kav4KeL4KaX4KeN4KavIOCmleCmsOCmvuCmsCDgppzgpqjgp43gpq8g4KaV4KeN4Kaw4Ka/4Kav4Ka84Ka+4KaV4Kay4Ka+4Kaq4KaX4KeB4Kay4Ka/4KaV4KeHIOCmnOCni+CmsCDgppXgprDgp4HgpqgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllc19zdW1tYXJ5IiBtc2dpZD0iNDUwODIxNzQ3Njk5NzE4MjIxNiI+IuCmruCnjeCmr+CmvuCmqOCmv+Cmq+Cnh+CmuOCnjeCmnyDgpq7gpr7gpqjgppfgp4HgprLgpr/gprAg4Kao4Ka/4Kaw4KeN4Kas4Ka/4Ka24KeH4Ka34KeHIOCmruCmvuCmsuCnjeCmn+Cmvy3gpongpofgpqjgp43gpqHgp4vgprAg4Kac4Kao4KeN4KavIOCmuOCmruCmuOCnjeCmpCDgppXgp43gprDgpr/gpq/gprzgpr7gppXgprLgpr7gpqrgppfgp4HgprLgpr/gppXgp4cg4KaG4KaV4Ka+4KawIOCmquCmsOCmv+CmrOCmsOCnjeCmpOCmqOCmr+Cni+Cml+CnjeCmryDgppXgprDgp4cg4Kak4KeL4Kay4KeH4Ke3Ijwvc3RyaW5nPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0ICgxNDYxODkzMzUxMjc4OTQwNDE2KSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkgKDIyNTI1NjM0OTc0ODU0MzY1MzQpIC0tPgorICAgIDxza2lwIC8+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4i4Kah4KeH4Ka44KeN4KaV4Kaf4KaqIOCmrOCnjeCmr+CmvuCmleCmhuCmqiDgpqrgpr7gprjgppPgpq/gprzgpr7gprDgp43gpqEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9ub25lIiBtc2dpZD0iNjk1MTA5NTQ4NTUzNzc2Nzk1NiI+IuCmoeCnh+CmuOCnjeCmleCmn+CmqiDgpqrgp4LgprDgp43gpqMg4Kas4KeN4Kav4Ka+4KaV4KaG4KaqIOCmrOCmsOCnjeCmpOCmruCmvuCmqOCnhyDgprjgp4HgprDgppXgp43gprfgpr/gpqQg4Kao4Kav4Ka8Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfY2hhbmdlIiBtc2dpZD0iMjczMTE2MzQyNTA4MTE3MjYzOCI+IuCmoeCnh+CmuOCnjeCmleCmn+CmqiDgpqrgp4HgprDgp4sg4Kas4KeN4Kav4Ka+4KaV4KaG4Kaq4KeH4KawIOCmnOCmqOCnjeCmryDgpqrgpr7gprjgppPgpq/gprzgpr7gprDgp43gpqEg4Kaq4Kaw4Ka/4Kas4Kaw4KeN4Kak4KaoIOCmrOCmviDgpq7gp4Hgppvgp4cg4Kar4KeH4Kay4Ka+4KawIOCmnOCmqOCnjeCmryDgprjgp43gpqrgprDgp43gprYg4KaV4Kaw4KeB4KaoIjwvc3RyaW5nPgpAQCAtMjczLDggKzI3Nyw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX25vIiBtc2dpZD0iOTE3MTc3MjI0NDc3NTgzODkwMSI+IuCmheCmleCnjeCmt+CmriDgppXgprDgpr4g4Kaw4Kav4Ka84KeH4Kab4KeHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV95ZXMiIG1zZ2lkPSIyMjE4MTU3MjY1OTk3NjMzNDMyIj4i4Ka44Kas4Ka44Kau4Kav4Ka8IOCmmuCmvuCmsuCngSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfYXV0byIgbXNnaWQ9Ijc1MDgzNDgxNzU4MDQzMDQzMjciPiLgprjgp43gpqzgpq/gprzgpoLgppXgp43gprDgpr/gpq/gprwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl90aXRsZSIgbXNnaWQ9IjQ2Mjg1OTI5Nzk3NTE5MTg5MDciPiLgppPgpq/gprzgp4fgpqzgpqbgprDgp43gprbgpqjgp4fgprAg4Kas4Ka+4Ka44KeN4Kak4Kas4Ka+4Kav4Ka84KaoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfZGlhbG9nX3RpdGxlIiBtc2dpZD0iNDM3MDU1MTM3ODcyMDAwNDg3MiI+IuCmk+Cmr+CmvOCnh+CmrOCmpuCmsOCnjeCmtuCmqOCnh+CmsCDgpqzgpr7gprjgp43gpqTgpqzgpr7gpq/gprzgpqgg4Ka44KeH4KafIOCmleCmsOCngeCmqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX3RpdGxlIiBtc2dpZD0iNDYyODU5Mjk3OTc1MTkxODkwNyI+IuCmk+Cmr+CmvOCnh+CmrOCmreCmv+CmiSDgpqrgp43gprDgpq/gprzgp4vgppciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl9kaWFsb2dfdGl0bGUiIG1zZ2lkPSI0MzcwNTUxMzc4NzIwMDA0ODcyIj4i4KaT4Kav4Ka84KeH4Kas4Kat4Ka/4KaJIOCmquCnjeCmsOCmr+CmvOCni+CmlyDgprjgp4fgpp8g4KaV4Kaw4KeB4KaoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb24iIG1zZ2lkPSIzMDYwMTU2NzMwNjUxMDYxMjIzIj4i4Kar4Ka+4KaH4KayIOCmj+CmqOCmleCnjeCmsOCmv+CmquCmtuCmvuCmqCDgprDgp4Lgpqrgpr7gpqjgp43gpqTgprAg4KaV4Kaw4KeB4KaoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZW5hYmxlZCIgbXNnaWQ9IjI4NjEyNTg2NzExNTE0MjgzNDYiPiLgprDgp4Lgpqrgpr7gpqjgp43gpqTgprAg4KaV4Kaw4KeB4KaoLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZG9uZSIgbXNnaWQ9Ijc4NTk3NjYzNTgwMDA1MjM5NTMiPiLgpqvgpr7gpofgprIg4KaH4Kak4Ka/4Kau4Kan4KeN4Kav4KeH4KaHIOCmj+CmqOCmleCnjeCmsOCmv+CmquCnjeCmnyDgppXgprDgpr4g4Kaw4Kav4Ka84KeH4Kab4KeHIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1jYS9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1jYS9hcnJheXMueG1sCmluZGV4IGFiODBjY2MuLjk5YzhhMjcgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtY2EvYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWNhL2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+IlV0aWxpdHphIHNlbXByZSBsYSBjb21wcm92YWNpw7MgSERDUCI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iMzEwMDUzNDg3NDUyOTI0MDI5MSI+IjY0IEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTYgSyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjYzNjEyODY5MjQyNjg3MTYzOTciPiIxIE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2NDA1MjAzMjM5NTYwNjk1MjY2Ij4iNCBNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2IE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4NjY1MjA2MTk5MjA5Njk4NTAxIj4iTm8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4iNjQgSyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IjI1NiBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjEgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjQgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI4MDMxOTkxMDI1ODkxMjY5MzgiPiIxNiBNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjQuMDAwIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1Ni4wMDAiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMS4wMDAuMDAwIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjA4OTQ3MDcyMDQ1MTA2ODM2NCI+Ik5vIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDYyMjQ2MDMzMzAzODU4Njc5MSI+IjY0IEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2IEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNzA0OTQ2NzY2Njk5MjQyNjUzIj4iMSBNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9zdW1tYXJpZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI3MzQ2NTk1NDczNTg4NzY1MDE5Ij4iNjQgSy9tZW3DsnJpYSBpbnRlcm3DqGRpYSByZWcuIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMjgyMjMwOTc0NzY3NTc1ODYyOCI+IjI1NiBLL21lbcOycmlhIGludGVybcOoZGlhIHJlZy4iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4iMSBNL21lbcOycmlhIGludGVybcOoZGlhIHJlZy4iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1NzQ4NTI4NjQzOTM3NTAwMzQ5Ij4iNCBNL21lbcOycmlhIGludGVybcOoZGlhIHJlZy4iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxOTc4NjI5MDUxMDg1MTExNTkyIj4iMTYgTS9tZW3DsnJpYSBpbnRlcm3DqGRpYSByZWcuIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+Ik5vIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjk2OTQ1ODAyOTM0NDc1MDI2MiI+IjY0IEsgLyBtZW3DsnJpYSBpbnRlcm3DqGRpYSByZWcuIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+IjI1NiBLIC8gbWVtw7JyaWEgaW50ZXJtw6hkaWEgcmVnLiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiIxIE0gLyBtZW3DsnJpYSBpbnRlcm3DqGRpYSByZWcuIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+IjQgTSAvIG1lbcOycmlhIGludGVybcOoZGlhIHJlZy4iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4iMTYgTSAvIG1lbcOycmlhIGludGVybcOoZGlhIHJlZy4iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4iQW5pbWFjacOzIGRlc2FjdGl2YWRhIjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtY2Evc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWNhL3N0cmluZ3MueG1sCmluZGV4IDg1NTNlZDkuLjkzYjY0MzggMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtY2Evc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1jYS9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0NywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiJQZXJtZXQgcXVlIGxlcyBhcGxpY2FjaW9ucyBlcyBwdWd1aW4gZXNjcml1cmUgZW4gdW4gZGlzcG9zaXRpdSBk4oCZZW1tYWdhdHplbWF0Z2UgZXh0ZXJuLCBpbmRlcGVuZGVudG1lbnQgZGVscyB2YWxvcnMgZGVmaW5pdHMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiJGb3LDp2EgbFwnYWp1c3QgZGUgbGEgbWlkYSBkZSBsZXMgYWN0aXZpdGF0cyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4iUGVybWV0IGFqdXN0YXIgbGEgbWlkYSBkZSB0b3RlcyBsZXMgYWN0aXZpdGF0cyBwZXIgYWwgbW9kZSBtdWx0aWZpbmVzdHJhLCBpbmRlcGVuZGVudG1lbnQgZGVscyB2YWxvcnMgZGVmaW5pdHMuIjwvc3RyaW5nPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0ICgxNDYxODkzMzUxMjc4OTQwNDE2KSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkgKDIyNTI1NjM0OTc0ODU0MzY1MzQpIC0tPgorICAgIDxza2lwIC8+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4iQ29udHJhc2VueWEgcGVyIGEgY8OycGllcyBkXCdvcmRpbmFkb3IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9ub25lIiBtc2dpZD0iNjk1MTA5NTQ4NTUzNzc2Nzk1NiI+IkxlcyBjw7JwaWVzIGRlIHNlZ3VyZXRhdCBkXCdvcmRpbmFkb3IgY29tcGxldGVzIG5vIGVzdGFuIHByb3RlZ2lkZXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4iVG9jYSBwZXIgY2FudmlhciBvIGVsaW1pbmFyIGxhIGNvbnRyYXNlbnlhIHBlciBhIGPDsnBpZXMgZGUgc2VndXJldGF0IGRcJ29yZGluYWRvciBjb21wbGV0ZXMiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWNzL2FycmF5cy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWNzL2FycmF5cy54bWwKaW5kZXggZDQ2NzgxYS4uODk1MzQ4NSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1jcy9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtY3MvYXJyYXlzLnhtbApAQCAtNTksMjMgKzU5LDI2IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjQ1MDc1NjMxMjMxMjEyNzMyIj4iVsW+ZHkgcG91xb7DrXZhdCBrb250cm9sdSBIRENQIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjTCoGtCIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTA1NjExNzU0NTA4OTg4NDc2Ij4iMjU2wqBrQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjYzNjEyODY5MjQyNjg3MTYzOTciPiIxwqBNQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0wqBNQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMwMjU0MzEyMTEwMTM0MjQwOTciPiIxNsKgTUIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4NjY1MjA2MTk5MjA5Njk4NTAxIj4iVnlwbnV0byI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NMKga0IiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0ODc1NDUzNDAyMzYxNDUzMjQiPiIyNTbCoGtCIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjHCoE1CIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNMKgTUIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyODAzMTk5MTAyNTg5MTI2OTM4Ij4iMTbCoE1CIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjTCoGtCIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1NsKga0IiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMcKgTUIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4iVnlwbnV0byI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NMKga0IiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2wqBrQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxwqBNQiI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+IjY0wqBrQiBuYSB2eXJvdm7DoXZhY8OtIHBhbcSbxaUgcHJvdG9rb2zFryI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiIyNTbCoGtCIG5hIHZ5cm92bsOhdmFjw60gcGFtxJvFpSBwcm90b2tvbMWvIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjY5OTMwNjE5ODM1NzQ5NjczMSI+IjHCoE1CIG5hIHZ5cm92bsOhdmFjw60gcGFtxJvFpSBwcm90b2tvbMWvIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+IjTCoE1CIG5hIHZ5cm92bsOhdmFjw60gcGFtxJvFpSBwcm90b2tvbMWvIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+IjE2wqBNQiBuYSB2eXJvdm7DoXZhY8OtIHBhbcSbxaUgcHJvdG9rb2zFryI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY5MjEwNDg4Mjk3OTExNzkzMzEiPiJWeXBudXRvIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjk2OTQ1ODAyOTM0NDc1MDI2MiI+IjY0wqBrQiBuYSB2eXJvdm7DoXZhY8OtIHBhbcSbxaUgcHJvdG9rb2zFryI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzNDIyODUxMTU2NjU2OTgxNjgiPiIyNTbCoGtCIG5hIHZ5cm92bsOhdmFjw60gcGFtxJvFpSBwcm90b2tvbMWvIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTMxNDIzNDI5OTU1MjI1NDYyMSI+IjHCoE1CIG5hIHZ5cm92bsOhdmFjw60gcGFtxJvFpSBwcm90b2tvbMWvIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+IjTCoE1CIG5hIHZ5cm92bsOhdmFjw60gcGFtxJvFpSBwcm90b2tvbMWvIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTQzMTM1NDk1Njg1NjY1NTEyMCI+IjE2wqBNQiBuYSB2eXJvdm7DoXZhY8OtIHBhbcSbxaUgcHJvdG9rb2zFryI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9IndpbmRvd19hbmltYXRpb25fc2NhbGVfZW50cmllcyI+CiAgICAgPGl0ZW0gbXNnaWQ9IjgxMzQxNTY1OTkzNzA4MjQwODEiPiJBbmltYWNlIGplIHZ5cG51dGEiPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1jcy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtY3Mvc3RyaW5ncy54bWwKaW5kZXggNDk1ZjEwZi4uYmViOGY5NCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1jcy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWNzL3N0cmluZ3MueG1sCkBAIC0yNDcsNiArMjQ3LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX2FsbG93X29uX2V4dGVybmFsX3N1bW1hcnkiIG1zZ2lkPSIzMTkxOTUyNTA1ODYwMzQzMjMzIj4iS2HFvmRvdSBhcGxpa2FjaSBidWRlIG1vxb5uw6kgemFwc2F0IGRvIGV4dGVybsOtaG8gw7psb8W+acWhdMSbLCBiZXogb2hsZWR1IG5hIGhvZG5vdHkgbWFuaWZlc3R1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4iVnludXRpdCBtb8W+bm9zdCB6bcSbbnkgdmVsaWtvc3RpIGFrdGl2aXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllc19zdW1tYXJ5IiBtc2dpZD0iNDUwODIxNzQ3Njk5NzE4MjIxNiI+IlZlbGlrb3N0IHbFoWVjaCBha3Rpdml0IGJ1ZGUgbW/Fvm7DqSB6bcSbbml0IG5hIG7Em2tvbGlrIG9rZW4gKGJleiBvaGxlZHUgbmEgaG9kbm90eSBtYW5pZmVzdHUpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0IiBtc2dpZD0iMTQ2MTg5MzM1MTI3ODk0MDQxNiI+IkFrdGl2b3ZhdCBva25hIHPCoHZvbG7DvW0gdHZhcmVtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnRfc3VtbWFyeSIgbXNnaWQ9IjIyNTI1NjM0OTc0ODU0MzY1MzQiPiJBa3RpdnVqZSBwb2Rwb3J1IGV4cGVyaW1lbnTDoWxuw61jaCBva2VuIHPCoHZvbG7DvW0gdHZhcmVtLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF90aXRsZSIgbXNnaWQ9IjM4NjA0NzE2NTQ0Mzk0MTg4MjIiPiJIZXNsbyBwcm8gesOhbG9oeSB2IHBvxI3DrXRhxI1pIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiLDmnBsbsOpIHrDoWxvaHkgdiBwb8SNw610YcSNaSBuZWpzb3UgdiBzb3XEjWFzbsOpIGRvYsSbIGNocsOhbsSbbnkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4iVHV0byBtb8W+bm9zdCB2eWJlcnRlLCBjaGNldGUtbGkgem3Em25pdCBuZWJvIG9kZWJyYXQgaGVzbG8gcHJvIMO6cGxuw6kgesOhbG9oeSB2IHBvxI3DrXRhxI1pIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1kYS9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1kYS9hcnJheXMueG1sCmluZGV4IDI5MzU0ODkuLmQ3MDBjMDUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZGEvYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWRhL2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+IkJydWcgYWx0aWQgSERDUC1rb250cm9sIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjQgS0IiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTYgS0IiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMSBNQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0IE1CIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2IE1CIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+IkZyYSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NCBrQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IjI1NiBrQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI0MjM1Mjg2NzUyOTQzMzM4MzEiPiIxIE1CIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNCBNQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI4MDMxOTkxMDI1ODkxMjY5MzgiPiIxNiBNQiI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfbG93cmFtX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUyNDc5OTM5NTc3MDYxMDE1NCI+IjY0IGtCIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1NiBrQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjgwODU4NjcyMDkyMDIxNTM0MDMiPiIxIE1CIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjA4OTQ3MDcyMDQ1MTA2ODM2NCI+IkZyYSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NCBrQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIyMTIxMjU2MjUxNjk1ODIzMzAiPiIyNTYga0IiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNzA0OTQ2NzY2Njk5MjQyNjUzIj4iMSBNQiI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+IjY0IEtCIHByLiBsb2didWZmZXIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyODIyMzA5NzQ3Njc1NzU4NjI4Ij4iMjU2IEtCIHByLiBsb2didWZmZXIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4iMSBNQiBwci4gbG9nYnVmZmVyIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+IjQgTUIgcHIuIGxvZ2J1ZmZlciI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiIxNiBNQiBwci4gbG9nYnVmZmVyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+IkZyYSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI5Njk0NTgwMjkzNDQ3NTAyNjIiPiI2NCBrQiBwci4gbG9nYnVmZmVyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+IjI1NiBrQiBwci4gbG9nYnVmZmVyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTMxNDIzNDI5OTU1MjI1NDYyMSI+IjEgTUIgcHIuIGxvZ2J1ZmZlciI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM2MDYwNDc3ODA3OTI4OTQxNTEiPiI0IE1CIHByLiBsb2didWZmZXIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4iMTYgTUIgcHIuIGxvZ2J1ZmZlciI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9IndpbmRvd19hbmltYXRpb25fc2NhbGVfZW50cmllcyI+CiAgICAgPGl0ZW0gbXNnaWQ9IjgxMzQxNTY1OTkzNzA4MjQwODEiPiJBbmltYXRpb24gZnJhIjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZGEvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWRhL3N0cmluZ3MueG1sCmluZGV4IDgyNjU0YmMuLjM5MjNkYmQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZGEvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1kYS9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0Nyw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+IkfDuHIgZGV0IG11bGlndCBhdCBvdmVyZsO4cmUgZW5odmVyIGFwcCB0aWwgZXQgZWtzdGVybnQgbGFnZXIgdWFmaMOmbmdpZ3QgYWYgbWFuaWZlc3R2w6ZyZGllciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzIiBtc2dpZD0iODYxNTc2NDM3ODE0NzgyNDk4NSI+IlR2aW5nIGFrdGl2aXRldGVyIHRpbCBhdCBrdW5uZSB0aWxwYXNzZXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllc19zdW1tYXJ5IiBtc2dpZD0iNDUwODIxNzQ3Njk5NzE4MjIxNiI+IlPDuHJnZXIgZm9yLCBhdCBhbGxlIGFrdGl2aXRldGVyIGthbiB0aWxwYXNzZXMgZmxlcmUgdmluZHVlciB1YWZow6ZuZ2lndCBhZiBtYW5pZmVzdHbDpnJkaWVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0IiBtc2dpZD0iMTQ2MTg5MzM1MTI3ODk0MDQxNiI+IkFrdGl2w6lyIHZpbmR1ZXIgaSBmcml0IGZvcm1hdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkiIG1zZ2lkPSIyMjUyNTYzNDk3NDg1NDM2NTM0Ij4iQWt0aXZlcmVyIHVuZGVyc3TDuHR0ZWxzZSBhZiBla3NwZXJpbWVudGVsbGUgdmluZHVlciBpIGZyaXQgZm9ybWF0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF90aXRsZSIgbXNnaWQ9IjM4NjA0NzE2NTQ0Mzk0MTg4MjIiPiJLb2RlIHRpbCBsb2thbCBzaWtrZXJoZWRza29waSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4iTG9rYWxlIGZ1bGRzdMOmbmRpZ2Ugc2lra2VyaGVkc2tvcGllcmluZ2VyIGVyIGkgw7hqZWJsaWtrZXQgaWtrZSBiZXNreXR0ZXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4iVHJ5ayBmb3IgYXQgc2tpZnRlIGVsbGVyIGZqZXJuZSBhZGdhbmdza29kZW4gdGlsIGZ1bGQgbG9rYWwgc2lra2VyaGVkc2tvcGllcmluZyI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZGUvYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZGUvYXJyYXlzLnhtbAppbmRleCBkMmE3ZjBkLi5hOWM4MDJkIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWRlL2FycmF5cy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1kZS9hcnJheXMueG1sCkBAIC01OSwyMyArNTksMjYgQEAKICAgICA8aXRlbSBtc2dpZD0iNDUwNzU2MzEyMzEyMTI3MzIiPiJIRENQLVByw7xmdW5nIGltbWVyIHZlcndlbmRlbiI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iMzEwMDUzNDg3NDUyOTI0MDI5MSI+IjY0LjAwMCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1Ni4wMDAiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMcKgTWlvLiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0IE1pby4iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTbCoE1pby4iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4NjY1MjA2MTk5MjA5Njk4NTAxIj4iQXVzIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTU5MzI4OTM3NjUwMjMxMjkyMyI+IjY0LjAwMCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IjI1Ni4wMDAiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4iMcKgTWlvLiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjTCoE1pby4iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyODAzMTk5MTAyNTg5MTI2OTM4Ij4iMTYgTWlvLiI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfbG93cmFtX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUyNDc5OTM5NTc3MDYxMDE1NCI+IjY0LjAwMCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiIyNTYuMDAwIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODA4NTg2NzIwOTIwMjE1MzQwMyI+IjHCoE1pby4iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4iQXVzIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDYyMjQ2MDMzMzAzODU4Njc5MSI+IjY0LjAwMCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIyMTIxMjU2MjUxNjk1ODIzMzAiPiIyNTYuMDAwIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTcwNDk0Njc2NjY5OTI0MjY1MyI+IjHCoE1pby4iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiI2NC4wMDAgcHJvIFB1ZmZlciI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiIyNTYuMDAwIHBybyBQdWZmZXIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4iMcKgTWlvLiBwcm8gUHVmZmVyIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+IjTCoE1pby4gcHJvIFB1ZmZlciI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiIxNsKgTWlvLiBwcm8gUHVmZmVyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+IkF1cyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI5Njk0NTgwMjkzNDQ3NTAyNjIiPiI2NC4wMDAgcHJvIFB1ZmZlciI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzNDIyODUxMTU2NjU2OTgxNjgiPiIyNTYuMDAwIHBybyBQdWZmZXIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4iMcKgTWlvLiBwcm8gUHVmZmVyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+IjTCoE1pby4gcHJvIFB1ZmZlciI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU0MzEzNTQ5NTY4NTY2NTUxMjAiPiIxNsKgTWlvLiBwcm8gUHVmZmVyIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+IkFuaW1hdGlvbiBhdXMiPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1kZS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZGUvc3RyaW5ncy54bWwKaW5kZXggYTJmNzUwYi4uMGIxMjM4YiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1kZS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWRlL3N0cmluZ3MueG1sCkBAIC0yNDcsNiArMjQ3LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+IkVybcO2Z2xpY2h0IGVzIGplZGVyIHF1YWxpZml6aWVydGVuIEFwcCwgRGF0ZW4gYXVmIGV4dGVybmVuIFNwZWljaGVyIHp1IHNjaHJlaWJlbiwgdW5hYmjDpG5naWcgdm9uIGRlbiBNYW5pZmVzdHdlcnRlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzIiBtc2dpZD0iODYxNTc2NDM3ODE0NzgyNDk4NSI+IkFucGFzc2VuIGRlciBHcsO2w59lIHZvbiBBa3Rpdml0w6R0ZW4gZXJ6d2luZ2VuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXNfc3VtbWFyeSIgbXNnaWQ9IjQ1MDgyMTc0NzY5OTcxODIyMTYiPiJFcm3DtmdsaWNodCBlcywgZGllIEdyw7bDn2UgYWxsZXIgQWt0aXZpdMOkdGVuIGFuIGRlbiBNZWhyZmVuc3Rlcm1vZHVzIGFuenVwYXNzZW4sIHVuYWJow6RuZ2lnIHZvbiBkZW4gTWFuaWZlc3R3ZXJ0ZW4uIjwvc3RyaW5nPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0ICgxNDYxODkzMzUxMjc4OTQwNDE2KSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkgKDIyNTI1NjM0OTc0ODU0MzY1MzQpIC0tPgorICAgIDxza2lwIC8+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4iRGVza3RvcC1TaWNoZXJ1bmdzcGFzc3dvcnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9ub25lIiBtc2dpZD0iNjk1MTA5NTQ4NTUzNzc2Nzk1NiI+IlZvbGxzdMOkbmRpZ2UgRGVza3RvcC1TaWNoZXJ1bmdlbiBzaW5kIG1vbWVudGFuIG5pY2h0IHBhc3N3b3J0Z2VzY2jDvHR6dC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4iWnVtIMOEbmRlcm4gb2RlciBFbnRmZXJuZW4gZGVzIFBhc3N3b3J0cyBmw7xyIHZvbGxzdMOkbmRpZ2UgRGVza3RvcC1TaWNoZXJ1bmdlbiBiZXLDvGhyZW4iPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWVsL2FycmF5cy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWVsL2FycmF5cy54bWwKaW5kZXggMjY3MmVlYy4uOTFmOWQ2YSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1lbC9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZWwvYXJyYXlzLnhtbApAQCAtNTksMjMgKzU5LDI2IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjQ1MDc1NjMxMjMxMjEyNzMyIj4izp3OsSDPh8+BzrfPg865zrzOv8+Azr/Ouc61zq/PhM6xzrkgz4DOrM69z4TOsSDOrc67zrXOs8+Hzr/PgiBIRENQIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjQgSyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NiBLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+IjEgTSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0IE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTYgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiLOkc69zrXOvc61z4HOs8+MIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTU5MzI4OTM3NjUwMjMxMjkyMyI+IjY0IEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0ODc1NDUzNDAyMzYxNDUzMjQiPiIyNTYgSyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI0MjM1Mjg2NzUyOTQzMzM4MzEiPiIxIE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxODA4ODM3NzQ1MDk0NzY1NDEiPiI0IE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyODAzMTk5MTAyNTg5MTI2OTM4Ij4iMTYgTSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfbG93cmFtX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUyNDc5OTM5NTc3MDYxMDE1NCI+IjY0IEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzNTM0NzgyNzExMDQ1MjYyMzQ0Ij4iMjU2IEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMSBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjA4OTQ3MDcyMDQ1MTA2ODM2NCI+Is6Rzr3Otc69zrXPgc6zz4wiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0NjIyNDYwMzMzMDM4NTg2NzkxIj4iNjQgSyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIyMTIxMjU2MjUxNjk1ODIzMzAiPiIyNTYgSyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxIE0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiI2NCBLIM6xzr3OrCDOvM61zrMuz4DPgS7OvM69Ls66zrHPhM6xzrPPgS4iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyODIyMzA5NzQ3Njc1NzU4NjI4Ij4iMjU2IEsgzrHOvc6sIM68zrXOsy7PgM+BLs68zr0uzrrOsc+EzrHOs8+BLiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiIxIM6cIM6xzr3OrCDOvM61zrMuz4DPgS7OvM69Ls66zrHPhM6xzrPPgS4iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1NzQ4NTI4NjQzOTM3NTAwMzQ5Ij4iNCBNIM6xzr3OrCDOvM61zrMuz4DPgS7OvM69Ls66zrHPhM6xzrPPgS4iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxOTc4NjI5MDUxMDg1MTExNTkyIj4iMTYgTSDOsc69zqwgzrzOtc6zLs+Az4EuzrzOvS7Ous6xz4TOsc6zz4EuIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+Is6Rzr3Otc69zrXPgc6zz4wiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4iNjQgSyDOsc69zqwgz4DPgS4gzrzOvS4gzrHPgc+HLiDOus6xz4TOsc6zz4EuIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+IjI1NiBLIM6xzr3OrCDPgM+BLiDOvM69LiDOsc+Bz4cuIM66zrHPhM6xzrPPgS4iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4iMSDOnCDOsc69zqwgz4DPgc6/z4MuIM68zr0uIM6xz4HPhy4gzrrOsc+EzrHOs8+BLiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM2MDYwNDc3ODA3OTI4OTQxNTEiPiI0IE0gzrHOvc6sIM+Az4HOv8+DLiDOvM69LiDOsc+Bz4cuIM66zrHPhM6xzrPPgS4iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4iMTYgTSDOsc69zqwgz4DPgS4gzrzOvS4gzrHPgc+HLiDOus6xz4TOsc6zz4EuIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+Is6azrnOvc6/z43OvC7Otc65zrrPjM69zrXPgiDOsc+AzrXOvc61z4HOs86/z4DOv865zrfOvM6tzr3Otc+CIjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZWwvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWVsL3N0cmluZ3MueG1sCmluZGV4IGQ0MjY2MTYuLmMzYWNjYTcgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZWwvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1lbC9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0Nyw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+Is6azqzOvc61zrkgzrrOrM64zrUgzrXPhs6xz4HOvM6/zrPOriDOus6xz4TOrM67zrvOt867zrcgzrPOuc6xIM61zrPOs8+BzrHPhs6uIM+DzrUgzrXOvs+Jz4TOtc+BzrnOus+MIM+Hz47Pgc6/IM6xz4DOv864zq7Ous61z4XPg863z4IsIM6xzr3Otc6+zqzPgc+EzrfPhM6xIM6xz4DPjCDPhM65z4Igz4TOuc68zq3PgiDPhM6/z4UgzrzOsc69zrnPhs6tz4PPhM6/z4UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiLOkc69zrHOs866zrHPg8+EzrnOus6uIM60z4XOvc6xz4TPjM+EzrfPhM6xIM6xzrvOu86xzrPOrs+CIM68zrXOs86tzrjOv8+Fz4IgzrTPgc6xz4PPhM63z4HOuc6/z4TOrs+Ez4nOvSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4izp3OsSDOrc+Hzr/Phc69IM+MzrvOtc+CIM6/zrkgzrTPgc6xz4PPhM63z4HOuc+Mz4TOt8+EzrXPgiDOtM+Fzr3Osc+Ez4zPhM63z4TOsSDOsc67zrvOsc6zzq7PgiDOvM61zrPOrc64zr/Phc+CIM6zzrnOsSDPhM63zr0gz4DPgc6/zrLOv867zq4gz4DOv867zrvOsc+AzrvPjs69IM+AzrHPgc6xzrjPjc+Bz4nOvSwgzrHOvc61zr7OrM+Bz4TOt8+EzrEgzrHPgM+MIM+EzrnPgiDPhM65zrzOrc+CIM+Ezr/PhSDOvM6xzr3Ouc+Gzq3Pg8+Ezr/PhS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydCIgbXNnaWQ9IjE0NjE4OTMzNTEyNzg5NDA0MTYiPiLOlc69zrXPgc6zzr/PgM6/zq/Ot8+Dzrcgz4DOsc+BzrHOuM+Nz4HPic69IM61zrvOtc+NzrjOtc+BzrfPgiDOvM6/z4HPhs6uz4IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5IiBtc2dpZD0iMjI1MjU2MzQ5NzQ4NTQzNjUzNCI+Is6Vzr3Otc+BzrPOv8+Azr/Ouc61zq8gz4TOt869IM+Fz4DOv8+Dz4TOrs+BzrnOvs63IM6zzrnOsSDPgM61zrnPgc6xzrzOsc+EzrnOus6sIM+AzrHPgc6szrjPhc+BzrEgzrXOu861z43OuM61z4HOt8+CIM68zr/Pgc+Gzq7Pgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4izpXPhi/Ous+Mz4IgzrrPic60zrnOus+Mz4IgZGVza3RvcCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4izqTOsSDPgM67zq7Pgc63IM6xzr3PhM6vzrPPgc6xz4bOsSDOsc+Dz4bOsc67zrXOr86xz4IgzrXPgM65z4bOrM69zrXOuc6xz4IgzrXPgc6zzrHPg86vzrHPgiDOtM61zr0gz4DPgc6/z4PPhM6xz4TOtc+Nzr/Ovc+EzrHOuSDOsc+Fz4TOrs69IM+Ezrcgz4PPhM65zrPOvM6uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfY2hhbmdlIiBtc2dpZD0iMjczMTE2MzQyNTA4MTE3MjYzOCI+Is6RzrPOs86vzr7PhM61IM6zzrnOsSDOsc67zrvOsc6zzq4gzq4gzrrOsc+EzqzPgc6zzrfPg863IM+Ezr/PhSDOus+JzrTOuc66zr/PjSDPgM+Bz4zPg86yzrHPg863z4IgzrPOuc6xIM+EzrEgz4DOu86uz4HOtyDOsc69z4TOr86zz4HOsc+GzrEgzrHPg8+GzrHOu861zq/Osc+CIM61z4DOuc+GzqzOvc61zrnOsc+CIM61z4HOs86xz4POr86xz4IiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWVuLXJBVS9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1lbi1yQVUvYXJyYXlzLnhtbAppbmRleCAyMTM0MGQ4Li4wNTUxODkwMCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1lbi1yQVUvYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWVuLXJBVS9hcnJheXMueG1sCkBAIC01OSwyMyArNTksMjYgQEAKICAgICA8aXRlbSBtc2dpZD0iNDUwNzU2MzEyMzEyMTI3MzIiPiJBbHdheXMgdXNlIEhEQ1AgY2hlY2tpbmciPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMxMDA1MzQ4NzQ1MjkyNDAyOTEiPiI2NCBLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTA1NjExNzU0NTA4OTg4NDc2Ij4iMjU2IEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMSBNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjQwNTIwMzIzOTU2MDY5NTI2NiI+IjQgTSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMwMjU0MzEyMTEwMTM0MjQwOTciPiIxNiBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+Ik9mZiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NCBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU2IEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4iMSBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNCBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2IE0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI1MjQ3OTkzOTU3NzA2MTAxNTQiPiI2NCBLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1NiBLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODA4NTg2NzIwOTIwMjE1MzQwMyI+IjEgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwODk0NzA3MjA0NTEwNjgzNjQiPiJPZmYiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0NjIyNDYwMzMzMDM4NTg2NzkxIj4iNjQgSyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIyMTIxMjU2MjUxNjk1ODIzMzAiPiIyNTYgSyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxIE0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiI2NCBLIHBlciBsb2cgYnVmZmVyIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMjgyMjMwOTc0NzY3NTc1ODYyOCI+IjI1NiBLIHBlciBsb2cgYnVmZmVyIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjY5OTMwNjE5ODM1NzQ5NjczMSI+IjEgTSBwZXIgbG9nIGJ1ZmZlciI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjU3NDg1Mjg2NDM5Mzc1MDAzNDkiPiI0IE0gcGVyIGxvZyBidWZmZXIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxOTc4NjI5MDUxMDg1MTExNTkyIj4iMTYgTSBwZXIgbG9nIGJ1ZmZlciI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY5MjEwNDg4Mjk3OTExNzkzMzEiPiJPZmYiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4iNjQgSyBwZXIgbG9nIGJ1ZmZlciI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzNDIyODUxMTU2NjU2OTgxNjgiPiIyNTYgSyBwZXIgbG9nIGJ1ZmZlciI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiIxIE0gcGVyIGxvZyBidWZmZXIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4iNCBNIHBlciBsb2cgYnVmZmVyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTQzMTM1NDk1Njg1NjY1NTEyMCI+IjE2IE0gcGVyIGxvZyBidWZmZXIiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4iQW5pbWF0aW9uIG9mZiI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWVuLXJBVS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZW4tckFVL3N0cmluZ3MueG1sCmluZGV4IGI4Yzg1MjEuLmRhZTQwZDkgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZW4tckFVL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZW4tckFVL3N0cmluZ3MueG1sCkBAIC0yNDcsNiArMjQ3LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+Ik1ha2VzIGFueSBhcHAgZWxpZ2libGUgdG8gYmUgd3JpdHRlbiB0byBleHRlcm5hbCBzdG9yYWdlLCByZWdhcmRsZXNzIG9mIG1hbmlmZXN0IHZhbHVlcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzIiBtc2dpZD0iODYxNTc2NDM3ODE0NzgyNDk4NSI+IkZvcmNlIGFjdGl2aXRpZXMgdG8gYmUgcmUtc2l6YWJsZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4iTWFrZXMgYWxsIGFjdGl2aXRpZXMgcmUtc2l6YWJsZSBmb3IgbXVsdGktd2luZG93LCByZWdhcmRsZXNzIG9mIG1hbmlmZXN0IHZhbHVlcy4iPC9zdHJpbmc+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnQgKDE0NjE4OTMzNTEyNzg5NDA0MTYpIC0tPgorICAgIDxza2lwIC8+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnRfc3VtbWFyeSAoMjI1MjU2MzQ5NzQ4NTQzNjUzNCkgLS0+CisgICAgPHNraXAgLz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF90aXRsZSIgbXNnaWQ9IjM4NjA0NzE2NTQ0Mzk0MTg4MjIiPiJEZXNrdG9wIGJhY2t1cCBwYXNzd29yZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4iRGVza3RvcCBmdWxsIGJhY2t1cHMgYXJlblwndCBjdXJyZW50bHkgcHJvdGVjdGVkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfY2hhbmdlIiBtc2dpZD0iMjczMTE2MzQyNTA4MTE3MjYzOCI+IlRvdWNoIHRvIGNoYW5nZSBvciByZW1vdmUgdGhlIHBhc3N3b3JkIGZvciBkZXNrdG9wIGZ1bGwgYmFja3VwcyI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZW4tckdCL2FycmF5cy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWVuLXJHQi9hcnJheXMueG1sCmluZGV4IDIxMzQwZDguLjA1NTE4OTAwIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWVuLXJHQi9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZW4tckdCL2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+IkFsd2F5cyB1c2UgSERDUCBjaGVja2luZyI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iMzEwMDUzNDg3NDUyOTI0MDI5MSI+IjY0IEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTYgSyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjYzNjEyODY5MjQyNjg3MTYzOTciPiIxIE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2NDA1MjAzMjM5NTYwNjk1MjY2Ij4iNCBNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2IE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4NjY1MjA2MTk5MjA5Njk4NTAxIj4iT2ZmIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTU5MzI4OTM3NjUwMjMxMjkyMyI+IjY0IEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0ODc1NDUzNDAyMzYxNDUzMjQiPiIyNTYgSyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI0MjM1Mjg2NzUyOTQzMzM4MzEiPiIxIE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxODA4ODM3NzQ1MDk0NzY1NDEiPiI0IE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyODAzMTk5MTAyNTg5MTI2OTM4Ij4iMTYgTSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfbG93cmFtX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUyNDc5OTM5NTc3MDYxMDE1NCI+IjY0IEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzNTM0NzgyNzExMDQ1MjYyMzQ0Ij4iMjU2IEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMSBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjA4OTQ3MDcyMDQ1MTA2ODM2NCI+Ik9mZiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NCBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+IjI1NiBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTcwNDk0Njc2NjY5OTI0MjY1MyI+IjEgTSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+IjY0IEsgcGVyIGxvZyBidWZmZXIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyODIyMzA5NzQ3Njc1NzU4NjI4Ij4iMjU2IEsgcGVyIGxvZyBidWZmZXIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4iMSBNIHBlciBsb2cgYnVmZmVyIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+IjQgTSBwZXIgbG9nIGJ1ZmZlciI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiIxNiBNIHBlciBsb2cgYnVmZmVyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+Ik9mZiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI5Njk0NTgwMjkzNDQ3NTAyNjIiPiI2NCBLIHBlciBsb2cgYnVmZmVyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+IjI1NiBLIHBlciBsb2cgYnVmZmVyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTMxNDIzNDI5OTU1MjI1NDYyMSI+IjEgTSBwZXIgbG9nIGJ1ZmZlciI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM2MDYwNDc3ODA3OTI4OTQxNTEiPiI0IE0gcGVyIGxvZyBidWZmZXIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4iMTYgTSBwZXIgbG9nIGJ1ZmZlciI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9IndpbmRvd19hbmltYXRpb25fc2NhbGVfZW50cmllcyI+CiAgICAgPGl0ZW0gbXNnaWQ9IjgxMzQxNTY1OTkzNzA4MjQwODEiPiJBbmltYXRpb24gb2ZmIjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZW4tckdCL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1lbi1yR0Ivc3RyaW5ncy54bWwKaW5kZXggYjhjODUyMS4uZGFlNDBkOSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1lbi1yR0Ivc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1lbi1yR0Ivc3RyaW5ncy54bWwKQEAgLTI0Nyw2ICsyNDcsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX2FsbG93X29uX2V4dGVybmFsX3N1bW1hcnkiIG1zZ2lkPSIzMTkxOTUyNTA1ODYwMzQzMjMzIj4iTWFrZXMgYW55IGFwcCBlbGlnaWJsZSB0byBiZSB3cml0dGVuIHRvIGV4dGVybmFsIHN0b3JhZ2UsIHJlZ2FyZGxlc3Mgb2YgbWFuaWZlc3QgdmFsdWVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4iRm9yY2UgYWN0aXZpdGllcyB0byBiZSByZS1zaXphYmxlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXNfc3VtbWFyeSIgbXNnaWQ9IjQ1MDgyMTc0NzY5OTcxODIyMTYiPiJNYWtlcyBhbGwgYWN0aXZpdGllcyByZS1zaXphYmxlIGZvciBtdWx0aS13aW5kb3csIHJlZ2FyZGxlc3Mgb2YgbWFuaWZlc3QgdmFsdWVzLiI8L3N0cmluZz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBlbmFibGVfZnJlZWZvcm1fc3VwcG9ydCAoMTQ2MTg5MzM1MTI3ODk0MDQxNikgLS0+CisgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5ICgyMjUyNTYzNDk3NDg1NDM2NTM0KSAtLT4KKyAgICA8c2tpcCAvPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+IkRlc2t0b3AgYmFja3VwIHBhc3N3b3JkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiJEZXNrdG9wIGZ1bGwgYmFja3VwcyBhcmVuXCd0IGN1cnJlbnRseSBwcm90ZWN0ZWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4iVG91Y2ggdG8gY2hhbmdlIG9yIHJlbW92ZSB0aGUgcGFzc3dvcmQgZm9yIGRlc2t0b3AgZnVsbCBiYWNrdXBzIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1lbi1ySU4vYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZW4tcklOL2FycmF5cy54bWwKaW5kZXggMjEzNDBkOC4uMDU1MTg5MDAgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZW4tcklOL2FycmF5cy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1lbi1ySU4vYXJyYXlzLnhtbApAQCAtNTksMjMgKzU5LDI2IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjQ1MDc1NjMxMjMxMjEyNzMyIj4iQWx3YXlzIHVzZSBIRENQIGNoZWNraW5nIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjQgSyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NiBLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+IjEgTSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0IE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTYgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiJPZmYiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4iNjQgSyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IjI1NiBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjEgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjQgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI4MDMxOTkxMDI1ODkxMjY5MzgiPiIxNiBNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjQgSyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiIyNTYgSyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjgwODU4NjcyMDkyMDIxNTM0MDMiPiIxIE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4iT2ZmIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDYyMjQ2MDMzMzAzODU4Njc5MSI+IjY0IEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2IEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNzA0OTQ2NzY2Njk5MjQyNjUzIj4iMSBNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9zdW1tYXJpZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI3MzQ2NTk1NDczNTg4NzY1MDE5Ij4iNjQgSyBwZXIgbG9nIGJ1ZmZlciI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiIyNTYgSyBwZXIgbG9nIGJ1ZmZlciI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiIxIE0gcGVyIGxvZyBidWZmZXIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1NzQ4NTI4NjQzOTM3NTAwMzQ5Ij4iNCBNIHBlciBsb2cgYnVmZmVyIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+IjE2IE0gcGVyIGxvZyBidWZmZXIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4iT2ZmIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjk2OTQ1ODAyOTM0NDc1MDI2MiI+IjY0IEsgcGVyIGxvZyBidWZmZXIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzQyMjg1MTE1NjY1Njk4MTY4Ij4iMjU2IEsgcGVyIGxvZyBidWZmZXIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4iMSBNIHBlciBsb2cgYnVmZmVyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+IjQgTSBwZXIgbG9nIGJ1ZmZlciI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU0MzEzNTQ5NTY4NTY2NTUxMjAiPiIxNiBNIHBlciBsb2cgYnVmZmVyIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+IkFuaW1hdGlvbiBvZmYiPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1lbi1ySU4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWVuLXJJTi9zdHJpbmdzLnhtbAppbmRleCBiOGM4NTIxLi5kYWU0MGQ5IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWVuLXJJTi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWVuLXJJTi9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0NywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiJNYWtlcyBhbnkgYXBwIGVsaWdpYmxlIHRvIGJlIHdyaXR0ZW4gdG8gZXh0ZXJuYWwgc3RvcmFnZSwgcmVnYXJkbGVzcyBvZiBtYW5pZmVzdCB2YWx1ZXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiJGb3JjZSBhY3Rpdml0aWVzIHRvIGJlIHJlLXNpemFibGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllc19zdW1tYXJ5IiBtc2dpZD0iNDUwODIxNzQ3Njk5NzE4MjIxNiI+Ik1ha2VzIGFsbCBhY3Rpdml0aWVzIHJlLXNpemFibGUgZm9yIG11bHRpLXdpbmRvdywgcmVnYXJkbGVzcyBvZiBtYW5pZmVzdCB2YWx1ZXMuIjwvc3RyaW5nPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0ICgxNDYxODkzMzUxMjc4OTQwNDE2KSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkgKDIyNTI1NjM0OTc0ODU0MzY1MzQpIC0tPgorICAgIDxza2lwIC8+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4iRGVza3RvcCBiYWNrdXAgcGFzc3dvcmQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9ub25lIiBtc2dpZD0iNjk1MTA5NTQ4NTUzNzc2Nzk1NiI+IkRlc2t0b3AgZnVsbCBiYWNrdXBzIGFyZW5cJ3QgY3VycmVudGx5IHByb3RlY3RlZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiJUb3VjaCB0byBjaGFuZ2Ugb3IgcmVtb3ZlIHRoZSBwYXNzd29yZCBmb3IgZGVza3RvcCBmdWxsIGJhY2t1cHMiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWVzLXJVUy9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1lcy1yVVMvYXJyYXlzLnhtbAppbmRleCA1Mjk5MmQ1Li4xYjdhOWYwIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWVzLXJVUy9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZXMtclVTL2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+IlNpZW1wcmUgdXRpbGl6YXIgY29tcHJvYmFjacOzbiBIRENQIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjTCoEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTbCoEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMcKgTSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0wqBNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2wqBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+IkRlc2FjdGl2YWRvIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTU5MzI4OTM3NjUwMjMxMjkyMyI+IjY0wqBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU2wqBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjHCoE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxODA4ODM3NzQ1MDk0NzY1NDEiPiI0wqBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2wqBNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjTCoEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzNTM0NzgyNzExMDQ1MjYyMzQ0Ij4iMjU2wqBLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODA4NTg2NzIwOTIwMjE1MzQwMyI+IjHCoE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4iRGVzYWN0aXZhZG8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0NjIyNDYwMzMzMDM4NTg2NzkxIj4iNjTCoEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2wqBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTcwNDk0Njc2NjY5OTI0MjY1MyI+IjHCoE0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiI2NMKgSy9iw7pmZXIgcmVnaXN0cm8iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyODIyMzA5NzQ3Njc1NzU4NjI4Ij4iMjU2wqBLL2LDumZlciByZWdpc3RybyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiIxwqBNL2LDumZlciByZWdpc3RybyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjU3NDg1Mjg2NDM5Mzc1MDAzNDkiPiI0wqBNL2LDumZlciByZWdpc3RybyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiIxNsKgTS9iw7pmZXIgcmVnaXN0cm8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4iRGVzYWN0aXZhZG8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4iNjTCoEsvYsO6ZmVyIHJlZ2lzdHJvIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+IjI1NsKgSy9iw7pmZXIgcmVnaXN0cm8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4iMcKgTS9iw7pmZXIgcmVnaXN0cm8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4iNMKgTS9iw7pmZXIgcmVnaXN0cm8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4iMTbCoE0vYsO6ZmVyIHJlZ2lzdHJvIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+IkFuaW1hY2nDs24gZGVzYWN0aXZhZGEiPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1lcy1yVVMvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWVzLXJVUy9zdHJpbmdzLnhtbAppbmRleCAzNGViZWY0Li44NTViNzJjIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWVzLXJVUy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWVzLXJVUy9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0NywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiJDdWFscXVpZXIgYXBsaWNhY2nDs24gcHVlZGUgZXNjcmliaXJzZSBlbiB1bmEgbWVtb3JpYSBleHRlcm5hLCBpbmRlcGVuZGllbnRlbWVudGUgZGUgbG9zIHZhbG9yZXMgZGVsIG1hbmlmaWVzdG8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4iRm9yemFyIGFjdGl2aWRhZGVzIHBhcmEgcXVlIGNhbWJpZW4gZGUgdGFtYcOxbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4iUGVybWl0ZSBxdWUgdG9kYXMgbGFzIGFjdGl2aWRhZGVzIHB1ZWRhbiBjYW1iaWFyIGRlIHRhbWHDsW8gcGFyYSBlbCBtb2RvIG11bHRpdmVudGFuYSwgc2luIGltcG9ydGFyIGxvcyB2YWxvcmVzIGRlbCBtYW5pZmllc3RvLiI8L3N0cmluZz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBlbmFibGVfZnJlZWZvcm1fc3VwcG9ydCAoMTQ2MTg5MzM1MTI3ODk0MDQxNikgLS0+CisgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5ICgyMjUyNTYzNDk3NDg1NDM2NTM0KSAtLT4KKyAgICA8c2tpcCAvPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+IkNvbnRyYXNlw7FhcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4iVHVzIGNvcGlhcyBkZSBzZWd1cmlkYWQgZGUgZXNjcml0b3JpbyBubyBlc3TDoW4gcHJvdGVnaWRhcyBwb3IgY29udHJhc2XDsWEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfY2hhbmdlIiBtc2dpZD0iMjczMTE2MzQyNTA4MTE3MjYzOCI+IlRvY2EgcGFyYSBjYW1iaWFyIG8gZWxpbWluYXIgbGEgY29udHJhc2XDsWEgZGUgbGFzIGNvcGlhcyBkZSBzZWd1cmlkYWQgY29tcGxldGFzIGRlIHR1IGVzY3JpdG9yaW8uIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1lcy9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1lcy9hcnJheXMueG1sCmluZGV4IDA0OTMyMTcuLmU0YjY2MWUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZXMvYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWVzL2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+IlV0aWxpemFyIHNpZW1wcmUgY29tcHJvYmFjacOzbiBkZSBIRENQIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjQgSyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NiBLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+IjEgTSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0IE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTYgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiJObyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NCBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU2IEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4iMSBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNCBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2IE0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI1MjQ3OTkzOTU3NzA2MTAxNTQiPiI2NCBLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1NiBLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODA4NTg2NzIwOTIwMjE1MzQwMyI+IjEgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwODk0NzA3MjA0NTEwNjgzNjQiPiJObyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NCBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+IjI1NiBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTcwNDk0Njc2NjY5OTI0MjY1MyI+IjEgTSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+IjY0IEsvYsO6ZmVyIHJlZ2lzdHJvIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMjgyMjMwOTc0NzY3NTc1ODYyOCI+IjI1NiBLL2LDumZlciByZWdpc3RybyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiIxIE0vYsO6ZmVyIHJlZ2lzdHJvIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+IjQgTS9iw7pmZXIgcmVnaXN0cm8iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxOTc4NjI5MDUxMDg1MTExNTkyIj4iMTYgTS9iw7pmZXIgcmVnaXN0cm8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4iTm8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4iNjQgSy9iw7pmZXIgcmVnaXN0cm8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzQyMjg1MTE1NjY1Njk4MTY4Ij4iMjU2IEsvYsO6ZmVyIHJlZ2lzdHJvIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTMxNDIzNDI5OTU1MjI1NDYyMSI+IjEgTS9iw7pmZXIgcmVnaXN0cm8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4iNCBNL2LDumZlciByZWdpc3RybyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU0MzEzNTQ5NTY4NTY2NTUxMjAiPiIxNiBNL2LDumZlciByZWdpc3RybyI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9IndpbmRvd19hbmltYXRpb25fc2NhbGVfZW50cmllcyI+CiAgICAgPGl0ZW0gbXNnaWQ9IjgxMzQxNTY1OTkzNzA4MjQwODEiPiJBbmltYWNpw7NuIGRlc2FjdGl2YWRhIjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZXMvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWVzL3N0cmluZ3MueG1sCmluZGV4IGNlZGQ1ODIuLjg1OGMxYjYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZXMvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1lcy9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0Nyw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+IkhhY2UgcXVlIGN1YWxxdWllciBhcGxpY2FjacOzbiBzZSBwdWVkYSBlc2NyaWJpciBlbiB1biBkaXNwb3NpdGl2byBkZSBhbG1hY2VuYW1pZW50byBleHRlcm5vLCBpbmRlcGVuZGllbnRlbWVudGUgZGUgbG9zIHZhbG9yZXMgZGVmaW5pZG9zIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4iRm9yemFyIGVsIGFqdXN0ZSBkZSB0YW1hw7FvIGRlIGxhcyBhY3RpdmlkYWRlcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4iUGVybWl0ZSBxdWUgc2UgcHVlZGEgYWp1c3RhciBlbCB0YW1hw7FvIGRlIHRvZGFzIGxhcyBhY3RpdmlkYWRlcyBwYXJhIGVsIG1vZG8gbXVsdGl2ZW50YW5hLCBpbmRlcGVuZGllbnRlbWVudGUgZGUgbG9zIHZhbG9yZXMgZXN0YWJsZWNpZG9zLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0IiBtc2dpZD0iMTQ2MTg5MzM1MTI3ODk0MDQxNiI+IkhhYmlsaXRhciB2ZW50YW5hcyBkZSBmb3JtYSBsaWJyZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkiIG1zZ2lkPSIyMjUyNTYzNDk3NDg1NDM2NTM0Ij4iUGVybWl0ZSB1dGlsaXphciB2ZW50YW5hcyBkZSBmb3JtYSBsaWJyZSBleHBlcmltZW50YWxlcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4iQ29udHJhc2XDsWEgcGFyYSBjb3BpYXMgZGUgb3JkZW5hZG9yIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiJMYXMgY29waWFzIGRlIHNlZ3VyaWRhZCBjb21wbGV0YXMgZGUgb3JkZW5hZG9yIG5vIGVzdMOhbiBwcm90ZWdpZGFzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfY2hhbmdlIiBtc2dpZD0iMjczMTE2MzQyNTA4MTE3MjYzOCI+IlRvY2FyIHBhcmEgY2FtYmlhciBvIHF1aXRhciBsYSBjb250cmFzZcOxYSBwYXJhIGxhcyBjb3BpYXMgZGUgc2VndXJpZGFkIGNvbXBsZXRhcyBkZSBvcmRlbmFkb3IiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWV0LXJFRS9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1ldC1yRUUvYXJyYXlzLnhtbAppbmRleCA1YmYxM2JiLi45NzMxOTgzIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWV0LXJFRS9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZXQtckVFL2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+Ikthc3V0YSBhbGF0aSBIRENQLWtvbnRyb2xsaW1pc3QiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMxMDA1MzQ4NzQ1MjkyNDAyOTEiPiI2NCAwMDAiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTYgMDAwIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+IjEgMDAwIDAwMCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0IDAwMCAwMDAiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTYgMDAwIDAwMCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiJWw6RsamFzIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTU5MzI4OTM3NjUwMjMxMjkyMyI+IjY0IDAwMCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IjI1NiAwMDAiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4iMSAwMDAgMDAwIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNCAwMDAgMDAwIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2IDAwMCAwMDAiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI1MjQ3OTkzOTU3NzA2MTAxNTQiPiI2NCAwMDAiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzNTM0NzgyNzExMDQ1MjYyMzQ0Ij4iMjU2IDAwMCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjgwODU4NjcyMDkyMDIxNTM0MDMiPiIxIDAwMCAwMDAiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4iVsOkbGphcyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NCAwMDAiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2IDAwMCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxIDAwMCAwMDAiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiI2NCBrIC8gbG9naXB1aHZlciI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiIyNTYgayAvIGxvZ2lwdWh2ZXIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4iMSBtbG4gLyBsb2dpcHVodmVyIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+IjQgbWxuIC8gbG9naXB1aHZlciI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiIxNiBtbG4gLyBsb2dpcHVodmVyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+IlbDpGxqYXMiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4iNjQgMDAwIC8gbG9naXB1aHZlciI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzNDIyODUxMTU2NjU2OTgxNjgiPiIyNTYgMDAwIC8gbG9naXB1aHZlciI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiIxIDAwMCAwMDAgLyBsb2dpcHVodmVyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+IjQgMDAwIDAwMCAvIGxvZ2lwdWh2ZXIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4iMTYgMDAwIDAwMCAvIGxvZ2lwdWh2ZXIiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4iQW5pbWF0c2lvb24gdsOkbGphcyI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWV0LXJFRS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZXQtckVFL3N0cmluZ3MueG1sCmluZGV4IDcxNDAwNGUuLjdmMTA1NmMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZXQtckVFL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZXQtckVFL3N0cmluZ3MueG1sCkBAIC0yNDcsNiArMjQ3LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX2FsbG93X29uX2V4dGVybmFsX3N1bW1hcnkiIG1zZ2lkPSIzMTkxOTUyNTA1ODYwMzQzMjMzIj4iTHViYWIgcmFrZW5kdXNpIGtpcmp1dGFkYSB2w6RsaXNlc3NlIHNhbHZlc3R1c3J1dW1pIG9sZW5lbWF0YSBtYW5pZmVzdGkgdsOkw6RydHVzdGVzdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzIiBtc2dpZD0iODYxNTc2NDM3ODE0NzgyNDk4NSI+Ik11dWRhIHRlZ2V2dXN0ZSBzdXVydXNlZCBtdXVkZXRhdmFrcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4iTXV1ZGFiIGvDtWlnaSB0ZWdldnVzdGUgc3V1cnVzZWQgbWl0bWUgYWtuYWdhIHZhYXRlcyBvbGVuZW1hdGEgbWFuaWZlc3RpIHbDpMOkcnR1c3Rlc3QgbXV1ZGV0YXZha3MuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnQiIG1zZ2lkPSIxNDYxODkzMzUxMjc4OTQwNDE2Ij4iTHViYSB2YWJhcyB2b3JtaXMgYWtuYWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5IiBtc2dpZD0iMjI1MjU2MzQ5NzQ4NTQzNjUzNCI+Ikx1YmF0YWtzZSBrYXRzZWxpc3RlIHZhYmFzIHZvcm1pcyBha2VuZGUgdHVnaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4iQXJ2dXRpdmFydW5kdXNlIHBhcm9vbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4iVMOkaWVsaWt1ZCBhcnZ1dGl2YXJ1bmR1c2VkIHBvbGUgcHJhZWd1IGthaXRzdHVkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfY2hhbmdlIiBtc2dpZD0iMjczMTE2MzQyNTA4MTE3MjYzOCI+IlB1dWR1dGFnZSwgZXQgbXV1dGEgdsO1aSBlZW1hbGRhZGEgdMOkaWVsaWtlIGFydnV0aXZhcnVuZHVzdGUgcGFyb29sIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1ldS1yRVMvYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZXUtckVTL2FycmF5cy54bWwKaW5kZXggNzA3YWNlNS4uYjcyYjUzNyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1ldS1yRVMvYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWV1LXJFUy9hcnJheXMueG1sCkBAIC01OSwyMyArNTksMjYgQEAKICAgICA8aXRlbSBtc2dpZD0iNDUwNzU2MzEyMzEyMTI3MzIiPiJFcmFiaWxpIGJldGkgSERDUCBlZ2lhenRhcGVuYSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iMzEwMDUzNDg3NDUyOTI0MDI5MSI+IjY0IEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTYgSyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjYzNjEyODY5MjQyNjg3MTYzOTciPiIxIE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2NDA1MjAzMjM5NTYwNjk1MjY2Ij4iNCBNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2IE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4NjY1MjA2MTk5MjA5Njk4NTAxIj4iRGVzYWt0aWJhdHV0YSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NCBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU2IEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4iMSBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNCBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2IE0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI1MjQ3OTkzOTU3NzA2MTAxNTQiPiI2NCBLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1NiBLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODA4NTg2NzIwOTIwMjE1MzQwMyI+IjEgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwODk0NzA3MjA0NTEwNjgzNjQiPiJEZXNha3RpYmF0dXRhIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDYyMjQ2MDMzMzAzODU4Njc5MSI+IjY0IEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2IEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNzA0OTQ2NzY2Njk5MjQyNjUzIj4iMSBNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9zdW1tYXJpZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI3MzQ2NTk1NDczNTg4NzY1MDE5Ij4iNjQgSyBlcnJlZ2lzdHJvZW4gYnVmZmVycmVrbyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiIyNTYgSyBlcnJlZ2lzdHJvZW4gYnVmZmVycmVrbyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiIxIE0gZXJyZWdpc3Ryb2VuIGJ1ZmZlcnJla28iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1NzQ4NTI4NjQzOTM3NTAwMzQ5Ij4iNCBNIGVycmVnaXN0cm9lbiBidWZmZXJyZWtvIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+IjE2IE0gZXJyZWdpc3Ryb2VuIGJ1ZmZlcnJla28iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4iRGVzYWt0aWJhdHV0YSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI5Njk0NTgwMjkzNDQ3NTAyNjIiPiI2NCBLIGVycmVnaXN0cm9lbiBidWZmZXJyZWtvIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+IjI1NiBLIGVycmVnaXN0cm9lbiBidWZmZXJyZWtvIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTMxNDIzNDI5OTU1MjI1NDYyMSI+IjEgTSBlcnJlZ2lzdHJvZW4gYnVmZmVycmVrbyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM2MDYwNDc3ODA3OTI4OTQxNTEiPiI0IE0gZXJyZWdpc3Ryb2VuIGJ1ZmZlcnJla28iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4iMTYgTSBlcnJlZ2lzdHJvZW4gYnVmZmVycmVrbyI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9IndpbmRvd19hbmltYXRpb25fc2NhbGVfZW50cmllcyI+CiAgICAgPGl0ZW0gbXNnaWQ9IjgxMzQxNTY1OTkzNzA4MjQwODEiPiJBbmltYXppb2EgZGVzYWt0aWJhdHV0YSI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWV1LXJFUy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZXUtckVTL3N0cmluZ3MueG1sCmluZGV4IDdmNDdiZjMuLmZlNWZjMjkgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZXUtckVTL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZXUtckVTL3N0cmluZ3MueG1sCkBAIC0yNDcsNiArMjQ3LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+IkFwbGlrYXppb2VrIGthbnBva28gbWVtb3JpYW4gaWRhdHogZGV6YWtldGUsIG1hbmlmZXN0dWFyZW4gYmFsaW9hayBrb250dWFuIGl6YW4gZ2FiZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzIiBtc2dpZD0iODYxNTc2NDM3ODE0NzgyNDk4NSI+IkJlaGFydHUgamFyZHVlcmVuIHRhbWFpbmEgZG9pdHUgYWhhbCBpemF0ZWEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllc19zdW1tYXJ5IiBtc2dpZD0iNDUwODIxNzQ3Njk5NzE4MjIxNiI+Ik1hbmlmZXN0dWFuIGphcnR6ZW4gZHVlbmEgamFydHplbiBkdWVsYSBlcmUsIGphcmR1ZXJhIGd1enRpZW4gdGFtYWluYSBkb2l0emVrbyBhdWtlcmEgZW1hdGVuIGR1LCBoYWluYmF0IGxlaWhvdGFuIGVyYWJpbGkgYWhhbCBpemFuIGRhaXRlemVuLiI8L3N0cmluZz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBlbmFibGVfZnJlZWZvcm1fc3VwcG9ydCAoMTQ2MTg5MzM1MTI3ODk0MDQxNikgLS0+CisgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5ICgyMjUyNTYzNDk3NDg1NDM2NTM0KSAtLT4KKyAgICA8c2tpcCAvPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+IlRva2lrbyBiYWJlc2tvcC4gcGFzYWhpdHphIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiJVbmUgaG9uZXRhbiwgb3JkZW5hZ2FpbHVrbyBiYWJlc2tvcGlhIG9zb2FrIGV6IGRhdWRlIGJhYmVzdHV0YS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4iVWtpdHUgb3JkZW5hZ2FpbHVrbyBiYWJlc2tvcGlhIG9zb2FrIGVnaXRla28gcGFzYWhpdHphIGFsZGF0emVrbyBlZG8ga2VudHpla28iPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWZhL2FycmF5cy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWZhL2FycmF5cy54bWwKaW5kZXggZDc1MjgwYi4uMWI0ZTMzNSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1mYS9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZmEvYXJyYXlzLnhtbApAQCAtNTksMjMgKzU5LDI2IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjQ1MDc1NjMxMjMxMjEyNzMyIj4i4oCP2YfZhduM2LTZhyDYp9iyINio2LHYsdiz24wgSERDUCDYp9iz2KrZgdin2K/ZhyDYtNmI2K8iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMxMDA1MzQ4NzQ1MjkyNDAyOTEiPiLbttu0INqp24zZhNmI2KjYp9uM2KoiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiLbstu127Yg2qnbjNmE2YjYqNin24zYqiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjYzNjEyODY5MjQyNjg3MTYzOTciPiLbsSDZhdqv2KfYqNin24zYqiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiLbtCDZhdqv2KfYqNin24zYqiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMwMjU0MzEyMTEwMTM0MjQwOTciPiLbsdu2INmF2q/Yp9io2KfbjNiqIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+Itiu2KfZhdmI2LQiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4i27bbtCDZh9iy2KfYsSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+Ituy27XbtiDZh9iy2KfYsSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI0MjM1Mjg2NzUyOTQzMzM4MzEiPiLbsSDZhduM2YTbjNmI2YYiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxODA4ODM3NzQ1MDk0NzY1NDEiPiLbtCDZhduM2YTbjNmI2YYiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyODAzMTk5MTAyNTg5MTI2OTM4Ij4i27HbtiDZhduM2YTbjNmI2YYiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI1MjQ3OTkzOTU3NzA2MTAxNTQiPiLbttu0INqp24zZhNmI2KjYp9uM2KoiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzNTM0NzgyNzExMDQ1MjYyMzQ0Ij4i27Lbtdu2INqp24zZhNmI2KjYp9uM2KoiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4i27Eg2YXar9in2KjYp9uM2KoiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4i2K7Yp9mF2YjYtCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiLbttu0INmH2LLYp9ixIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+Ituy27XbtiDZh9iy2KfYsSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiLbsSDZhduM2YTbjNmI2YYiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiLigI/bttu0SyDYr9ixINit2KfZgdi42Ycg2YXZiNmC2Kog2KvYqNiqIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMjgyMjMwOTc0NzY3NTc1ODYyOCI+IuKAj9uy27XbtkvYr9ixINit2KfZgdi42Ycg2YXZiNmC2Kog2KvYqNiqIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjY5OTMwNjE5ODM1NzQ5NjczMSI+IuKAj9uxTdiv2LEg2K3Yp9mB2LjZhyDZhdmI2YLYqiDYq9io2KoiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1NzQ4NTI4NjQzOTM3NTAwMzQ5Ij4i4oCP27RNINiv2LEg2K3Yp9mB2LjZhyDZhdmI2YLYqiDYq9io2KoiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxOTc4NjI5MDUxMDg1MTExNTkyIj4i4oCP27Hbtk0g2K/YsSDYrdin2YHYuNmHINmF2YjZgtiqINir2KjYqiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY5MjEwNDg4Mjk3OTExNzkzMzEiPiLYrtin2YXZiNi0IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjk2OTQ1ODAyOTM0NDc1MDI2MiI+Itu227Qg2YfYstin2LEg2K/YsSDZh9ixINio2KfZgdixINqv2LLYp9ix2LQiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzQyMjg1MTE1NjY1Njk4MTY4Ij4i27Lbtdu2INmH2LLYp9ixINiv2LEg2YfYsSDYqNin2YHYsSDar9iy2KfYsdi0IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTMxNDIzNDI5OTU1MjI1NDYyMSI+ItuxINmF24zZhNuM2YjZhiDYr9ixINmH2LEg2KjYp9mB2LEg2q/Ystin2LHYtCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM2MDYwNDc3ODA3OTI4OTQxNTEiPiLbtCDZhduM2YTbjNmI2YYg2K/YsSDZh9ixINio2KfZgdixINqv2LLYp9ix2LQiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4i27HbtiDZhduM2YTbjNmI2YYg2K/YsSDZh9ixINio2KfZgdixINqv2LLYp9ix2LQiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4i2b7ZiNuM2KfZhtmF2KfbjNuMINiu2KfZhdmI2LQiPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1mYS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZmEvc3RyaW5ncy54bWwKaW5kZXggMWY4YjU3NS4uZTFhMzVmNyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1mYS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWZhL3N0cmluZ3MueG1sCkBAIC0yNDcsNiArMjQ3LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+Itio2K/ZiNmGINiq2YjYrNmHINio2Ycg2YXZgtin2K/bjNixINmF2KfZhtuM2YHYs9iq2Iwg2YfYsSDYqNix2YbYp9mF2YfigIzYp9uMINix2Kcg2KjYsdin24wg2YbZiNi02KrZhiDYr9ixINit2KfZgdi42Ycg2K7Yp9ix2KzbjCDZiNin2KzYryDYtNix2KfbjNi3INmF24zigIzaqdmG2K8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiLYp9is2KjYp9ixINmB2LnYp9mE24zYquKAjNmH2Kcg2KjZhyDZgtin2KjZhCDYqti624zbjNixINin2YbYr9in2LLZhyDYqNmI2K/ZhiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4i2KjYr9mI2YYg2K/YsdmG2LjYsSDar9ix2YHYqtmGINmF2YLYp9iv24zYsSDZhdin2YbbjNmB2LPYqtiMINmH2YXZhyDZgdi52KfZhNuM2KrigIzZh9inINix2Kcg2KjYsdin24wg2obZhtiv2b7Zhtis2LHZhyDZgtin2KjZhCDYqti624zbjNixINin2YbYr9in2LLZhyDZhduM4oCM2qnZhtivLiI8L3N0cmluZz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBlbmFibGVfZnJlZWZvcm1fc3VwcG9ydCAoMTQ2MTg5MzM1MTI3ODk0MDQxNikgLS0+CisgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5ICgyMjUyNTYzNDk3NDg1NDM2NTM0KSAtLT4KKyAgICA8c2tpcCAvPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+Itqv2LDYsdmI2KfamNmHINm+2LTYqtuM2KjYp9mG4oCM2q/bjNix24wg2YXYrdmE24wiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9ub25lIiBtc2dpZD0iNjk1MTA5NTQ4NTUzNzc2Nzk1NiI+Itm+2LTYqtuM2KjYp9mG4oCM2q/bjNix24wg2qnYp9mF2YQg2LHYp9uM2KfZhtmHINiv2LHYrdin2YQg2K3Yp9i22LEg2YXYrdin2YHYuNiqINmG2YXbjOKAjNi02YjYryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiLYqNix2KfbjCDYqti624zbjNixINuM2Kcg2K3YsNmBINqv2LDYsdmI2KfamNmHINio2LHYp9uMINmG2LPYrtmH4oCM2YfYp9uMINm+2LTYqtuM2KjYp9mGINqp2KfZhdmEINiv2LPaqeKAjNiq2KfZviDZhNmF2LMg2qnZhtuM2K8iPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWZpL2FycmF5cy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWZpL2FycmF5cy54bWwKaW5kZXggNDBkMDc4Ny4uMTVlNmU0MCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1maS9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZmkvYXJyYXlzLnhtbApAQCAtNTksMjMgKzU5LDI2IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjQ1MDc1NjMxMjMxMjEyNzMyIj4iS8OkeXTDpCBhaW5hIEhEQ1AtdGFya2lzdHVzdGEiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMxMDA1MzQ4NzQ1MjkyNDAyOTEiPiI2NCBrdCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NiBrdCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjYzNjEyODY5MjQyNjg3MTYzOTciPiIxIE10IjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjQwNTIwMzIzOTU2MDY5NTI2NiI+IjQgTXQiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTYgTXQiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4NjY1MjA2MTk5MjA5Njk4NTAxIj4iRWkga8OkeXTDtnNzw6QiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4iNjQga3QiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0ODc1NDUzNDAyMzYxNDUzMjQiPiIyNTYga3QiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4iMSBNdCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjQgTXQiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyODAzMTk5MTAyNTg5MTI2OTM4Ij4iMTYgTXQiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI1MjQ3OTkzOTU3NzA2MTAxNTQiPiI2NCBrdCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiIyNTYga3QiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMSBNdCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwODk0NzA3MjA0NTEwNjgzNjQiPiJFaSBrw6R5dMO2c3PDpCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NCBrdCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIyMTIxMjU2MjUxNjk1ODIzMzAiPiIyNTYga3QiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNzA0OTQ2NzY2Njk5MjQyNjUzIj4iMSBNdCI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+IjY0IGt0IC8gbG9raXB1c2t1cmkiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyODIyMzA5NzQ3Njc1NzU4NjI4Ij4iMjU2IGt0IC8gbG9raXB1c2t1cmkiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4iMSBNdCAvIGxva2lwdXNrdXJpIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+IjQgTXQgLyBsb2tpcHVza3VyaSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiIxNiBNdCAvIGxva2lwdXNrdXJpIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+IkVpIGvDpHl0w7Zzc8OkIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjk2OTQ1ODAyOTM0NDc1MDI2MiI+IjY0IGt0IC8gbG9raXB1c2t1cmkiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzQyMjg1MTE1NjY1Njk4MTY4Ij4iMjU2IGt0IC8gbG9raXB1c2t1cmkiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4iMSBNdCAvIGxva2lwdXNrdXJpIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+IjQgTXQgLyBsb2tpcHVza3VyaSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU0MzEzNTQ5NTY4NTY2NTUxMjAiPiIxNiBNdCAvIGxva2lwdXNrdXJpIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+IkFuaW1hYXRpbyBwb2lzIGvDpHl0w7ZzdMOkIjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZmkvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWZpL3N0cmluZ3MueG1sCmluZGV4IGU0YjRiOTMuLjQ5OGYyMDQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZmkvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1maS9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0NywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiJNYWhkb2xsaXN0YWEgc292ZWxsdXN0ZW4gdGFsbGVudGFtaXNlbiB1bGtvaXNlZW4gdGFsbC50aWxhYW4gbHVldHRlbG9zdGEgcmlpcHB1bWF0dGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiJQYWtvdGEga2Fpa2tpIHRvaW1pbm5vdCBoeXbDpGtzeW3DpMOkbiBrb29uIG11dXRvcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4iUGFrb3R0YWEga2Fpa2tpIHRvaW1pbm5vdCBoeXbDpGtzeW3DpMOkbiBrb29uIG11dXR0YW1pc2VuIHJpbm5ha2thaXNuw6RreW3DpMOkbiBsdWV0dGVsb24gYXJ2b2lzdGEgcmlpcHB1bWF0dGEuIjwvc3RyaW5nPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0ICgxNDYxODkzMzUxMjc4OTQwNDE2KSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkgKDIyNTI1NjM0OTc0ODU0MzY1MzQpIC0tPgorICAgIDxza2lwIC8+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4iVmFybXV1c2tvcC4gc2FsYXNhbmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9ub25lIiBtc2dpZD0iNjk1MTA5NTQ4NTUzNzc2Nzk1NiI+IlRpZXRva29uZWVuIGthaWtraWVuIHRpZXRvamVuIHZhcm11dXNrb3Bpb2ludGlhIGVpIG9sZSB0w6RsbMOkIGhldGtlbGzDpCBzdW9qYXR0dSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiJNdXV0YSB0YWkgdmFpaGRhIHRpZXRva29uZWVuIGthaWtraWVuIHRpZXRvamVuIHZhcm11dXNrb3Bpb2lubmluIHNhbGFzYW5hIGtvc2tldHRhbWFsbGEiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWZyLXJDQS9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1mci1yQ0EvYXJyYXlzLnhtbAppbmRleCA3MTRkYmU0Li5hYjQ4MTAzIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWZyLXJDQS9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZnItckNBL2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+IlRvdWpvdXJzIHV0aWxpc2VyIGxhIHbDqXJpZmljYXRpb24gSERDUCI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iMzEwMDUzNDg3NDUyOTI0MDI5MSI+IjY0wqBrbyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NsKga28iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMSBNbyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0IE1vIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2IE1vIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+IkTDqXNhY3RpdsOpIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTU5MzI4OTM3NjUwMjMxMjkyMyI+IjY0IGtvIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU2IGtvIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjEgTW8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxODA4ODM3NzQ1MDk0NzY1NDEiPiI0IE1vIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2IE1vIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjTCoGtvIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1NsKga28iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMSBNbyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwODk0NzA3MjA0NTEwNjgzNjQiPiJEw6lzYWN0aXbDqSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NCBrbyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIyMTIxMjU2MjUxNjk1ODIzMzAiPiIyNTYga28iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNzA0OTQ2NzY2Njk5MjQyNjUzIj4iMSBNbyI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+IjHCoGtvL3RhbXBvbiBqb3VybmFsIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMjgyMjMwOTc0NzY3NTc1ODYyOCI+IjI1NsKgS28vdGFtcG9uIGpvdXJuYWwiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4iMcKgTW8vdGFtcG9uIGpvdXJuYWwiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1NzQ4NTI4NjQzOTM3NTAwMzQ5Ij4iNMKgTW8vdGFtcG9uIGpvdXJuYWwiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxOTc4NjI5MDUxMDg1MTExNTkyIj4iMTbCoE1vL3RhbXBvbiBqb3VybmFsIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+IkTDqXNhY3RpdsOpIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjk2OTQ1ODAyOTM0NDc1MDI2MiI+IjY0IGtvL3RhbXBvbiBqb3VybmFsIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+IjI1NiBLby90YW1wb24gam91cm5hbCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiIxIE1vL3RhbXBvbiBqb3VybmFsIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+IjQgTW8vdGFtcG9uIGpvdXJuYWwiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4iMTYgTW8vdGFtcG9uIGpvdXJuYWwiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4iQW5pbWF0aW9uIGTDqXNhY3RpdsOpZSI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWZyLXJDQS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZnItckNBL3N0cmluZ3MueG1sCmluZGV4IDY2YzU0YTEuLmIzMmJmYjcgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZnItckNBL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZnItckNBL3N0cmluZ3MueG1sCkBAIC0yNDcsNiArMjQ3LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+IlBlcm1ldCBlbnJlZy4gZFwnYXBwbGlzIHN1ciBlc3BhY2Ugc3RvY2thZ2UgZXh0ZXJuZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzIiBtc2dpZD0iODYxNTc2NDM3ODE0NzgyNDk4NSI+IkZvcmNlciBsZXMgYWN0aXZpdMOpcyDDoCDDqnRyZSByZWRpbWVuc2lvbm5hYmxlcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4iUGVybWV0IGRlIHJlZGltZW5zaW9ubmVyIHRvdXRlcyBsZXMgYWN0aXZpdMOpcyBwb3VyIGxlIG1vZGUgbXVsdGlmZW7DqnRyZSwgaW5kw6lwZW5kYW1tZW50IGRlcyB2YWxldXJzIGR1IGZpY2hpZXIgbWFuaWZlc3RlLiI8L3N0cmluZz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBlbmFibGVfZnJlZWZvcm1fc3VwcG9ydCAoMTQ2MTg5MzM1MTI3ODk0MDQxNikgLS0+CisgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5ICgyMjUyNTYzNDk3NDg1NDM2NTM0KSAtLT4KKyAgICA8c2tpcCAvPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+Ik1vdCBkZSBwYXNzZSBzYXV2ZWdhcmRlIFBDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiJMZXMgc2F1dmVnYXJkZXMgY29tcGzDqHRlcyBzdXIgUEMgbmUgc29udCBwYXMgcHJvdMOpZ8OpZXMgYWN0dWVsbGVtZW50LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiJBcHB1eWV6IHBvdXIgbW9kaWZpZXIgb3Ugc3VwcHJpbWVyIGxlIG1vdCBkZSBwYXNzZSB1dGlsaXPDqSBwb3VyIGxlcyBzYXV2ZWdhcmRlcyBjb21wbMOodGVzIHN1ciBQQy4iPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWZyL2FycmF5cy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWZyL2FycmF5cy54bWwKaW5kZXggYThiZWQ2OS4uMWNmZDNkNCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1mci9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZnIvYXJyYXlzLnhtbApAQCAtNTksMjMgKzU5LDI2IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjQ1MDc1NjMxMjMxMjEyNzMyIj4iVG91am91cnMgdXRpbGlzZXIgbGEgdsOpcmlmaWNhdGlvbiBIRENQIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjTCoEtvIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTA1NjExNzU0NTA4OTg4NDc2Ij4iMjU2wqBLbyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjYzNjEyODY5MjQyNjg3MTYzOTciPiIxwqBNbyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0wqBNbyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMwMjU0MzEyMTEwMTM0MjQwOTciPiIxNsKgTW8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4NjY1MjA2MTk5MjA5Njk4NTAxIj4iRMOpc2FjdGl2w6kiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4iNjTCoEtvIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU2wqBLbyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI0MjM1Mjg2NzUyOTQzMzM4MzEiPiIxwqBNbyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjTCoE1vIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2wqBNbyI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfbG93cmFtX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUyNDc5OTM5NTc3MDYxMDE1NCI+IjY0wqBLbyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiIyNTbCoEtvIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODA4NTg2NzIwOTIwMjE1MzQwMyI+IjHCoE1vIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjA4OTQ3MDcyMDQ1MTA2ODM2NCI+IkTDqXNhY3RpdsOpIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDYyMjQ2MDMzMzAzODU4Njc5MSI+IjY0wqBLbyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIyMTIxMjU2MjUxNjk1ODIzMzAiPiIyNTbCoEtvIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTcwNDk0Njc2NjY5OTI0MjY1MyI+IjHCoE1vIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9zdW1tYXJpZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI3MzQ2NTk1NDczNTg4NzY1MDE5Ij4iNjTCoEtvL3RhbXBvbiBqb3VybmFsIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMjgyMjMwOTc0NzY3NTc1ODYyOCI+IjI1NsKgS28vdGFtcG9uIGpvdXJuYWwiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4iMcKgTW8vdGFtcG9uIGpvdXJuYWwiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1NzQ4NTI4NjQzOTM3NTAwMzQ5Ij4iNMKgTW8vdGFtcG9uIGpvdXJuYWwiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxOTc4NjI5MDUxMDg1MTExNTkyIj4iMTbCoE1vL3RhbXBvbiBqb3VybmFsIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+IkTDqXNhY3RpdsOpIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjk2OTQ1ODAyOTM0NDc1MDI2MiI+IjY0wqBLbyBwYXIgdGFtcG9uIGpvdXJuYWwiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzQyMjg1MTE1NjY1Njk4MTY4Ij4iMjU2wqBLbyBwYXIgdGFtcG9uIGpvdXJuYWwiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4iMcKgTW8gcGFyIHRhbXBvbiBqb3VybmFsIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+IjTCoE1vIHBhciB0YW1wb24gam91cm5hbCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU0MzEzNTQ5NTY4NTY2NTUxMjAiPiIxNsKgTW8gcGFyIHRhbXBvbiBqb3VybmFsIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+IkFuaW1hdGlvbiBkw6lzYWN0aXbDqWUiPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1mci9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZnIvc3RyaW5ncy54bWwKaW5kZXggZTU2OTQwYS4uMDE5MDQ1NCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1mci9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWZyL3N0cmluZ3MueG1sCkBAIC0yNDcsNiArMjQ3LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+IlJlbmQgcG9zc2libGUgZW5yZWdpc3RyZW1lbnQgZGUgdG91dGUgYXBwbGkgc3VyIGVzcGFjZSBzdG9ja2FnZSBleHRlcm5lLCBpbmTDqXBlbmRhbW1lbnQgdmFsZXVycyBmaWNoaWVyIG1hbmlmZXN0ZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiJGb3JjZXIgcG9zc2liaWxpdMOpIGRlIHJlZGltZW5zaW9ubmVyIGxlcyBhY3Rpdml0w6lzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXNfc3VtbWFyeSIgbXNnaWQ9IjQ1MDgyMTc0NzY5OTcxODIyMTYiPiJQZXJtZXQgZGUgcmVkaW1lbnNpb25uZXIgdG91dGVzIGxlcyBhY3Rpdml0w6lzIHBvdXIgbGUgbW9kZSBtdWx0aWZlbsOqdHJlLCBpbmTDqXBlbmRhbW1lbnQgZGVzIHZhbGV1cnMgZHUgZmljaGllciBtYW5pZmVzdGUuIjwvc3RyaW5nPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0ICgxNDYxODkzMzUxMjc4OTQwNDE2KSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkgKDIyNTI1NjM0OTc0ODU0MzY1MzQpIC0tPgorICAgIDxza2lwIC8+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4iTW90IGRlIHBhc3NlIHNhdXZlZ2FyZGUgUEMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9ub25lIiBtc2dpZD0iNjk1MTA5NTQ4NTUzNzc2Nzk1NiI+IkxlcyBzYXV2ZWdhcmRlcyBjb21wbMOodGVzIHN1ciBQQyBuZSBzb250IHBhcyBwcm90w6lnw6llcyBhY3R1ZWxsZW1lbnQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfY2hhbmdlIiBtc2dpZD0iMjczMTE2MzQyNTA4MTE3MjYzOCI+IkFwcHV5ZXogcG91ciBtb2RpZmllciBvdSBzdXBwcmltZXIgbGUgbW90IGRlIHBhc3NlIHV0aWxpc8OpIHBvdXIgbGVzIHNhdXZlZ2FyZGVzIGNvbXBsw6h0ZXMgc3VyIFBDLiI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZ2wtckVTL2FycmF5cy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWdsLXJFUy9hcnJheXMueG1sCmluZGV4IDYwNmU2ZjYuLjAxYjhmZGYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZ2wtckVTL2FycmF5cy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1nbC1yRVMvYXJyYXlzLnhtbApAQCAtNTksMjMgKzU5LDI2IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjQ1MDc1NjMxMjMxMjEyNzMyIj4iVXRpbGl6YXIgc2VtcHJlIGEgY29tcHJvYmFjacOzbiBIRENQIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjQgSyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NiBLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+IjEgTSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0IE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTYgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiJEZXNhY3RpdmFkbyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NCBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU2IEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4iMSBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNCBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2IE0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI1MjQ3OTkzOTU3NzA2MTAxNTQiPiI2NCBLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1NiBLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODA4NTg2NzIwOTIwMjE1MzQwMyI+IjEgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwODk0NzA3MjA0NTEwNjgzNjQiPiJEZXNhY3RpdmFkbyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NCBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+IjI1NiBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTcwNDk0Njc2NjY5OTI0MjY1MyI+IjEgTSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+IkLDumZlciA2NCBLIHJleGlzdHJvIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMjgyMjMwOTc0NzY3NTc1ODYyOCI+IkLDumZlciAyNTYgSyByZXhpc3QuIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjY5OTMwNjE5ODM1NzQ5NjczMSI+IkLDumZlciAxIE0gcmV4aXN0cm8iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1NzQ4NTI4NjQzOTM3NTAwMzQ5Ij4iQsO6ZmVyIDQgTSByZXhpc3RybyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiJCw7pmZXIgMTYgTSByZXhpc3RybyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY5MjEwNDg4Mjk3OTExNzkzMzEiPiJEZXNhY3RpdmFkbyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI5Njk0NTgwMjkzNDQ3NTAyNjIiPiI2NCBLIHBvciBiw7pmZXIgZGUgcmV4aXN0cm8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzQyMjg1MTE1NjY1Njk4MTY4Ij4iMjU2IEsgcG9yIGLDumZlciBkZSByZXhpc3RybyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiIxIE0gcG9yIGLDumZlciBkZSByZXhpc3RybyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM2MDYwNDc3ODA3OTI4OTQxNTEiPiI0IE0gcG9yIGLDumZlciBkZSByZXhpc3RybyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU0MzEzNTQ5NTY4NTY2NTUxMjAiPiIxNiBNIHBvciBiw7pmZXIgZGUgcmV4aXN0cm8iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4iQW5pbWFjacOzbiBkZXNhY3RpdmFkYSI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWdsLXJFUy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZ2wtckVTL3N0cmluZ3MueG1sCmluZGV4IDliY2Y3NzAuLjBlZmU4MDUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZ2wtckVTL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZ2wtckVTL3N0cmluZ3MueG1sCkBAIC0yNDcsNiArMjQ3LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX2FsbG93X29uX2V4dGVybmFsX3N1bW1hcnkiIG1zZ2lkPSIzMTkxOTUyNTA1ODYwMzQzMjMzIj4iRmFpIHF1ZSBjYWxxdWVyYSBhcGxpY2FjacOzbiBzZSBwb2lkYSBlc2NyaWJpciBudW4gYWxtYWNlbmFtZW50byBleHRlcm5vLCBpbmRlcGVuZGVudGVtZW50ZSBkb3MgdmFsb3JlcyBleHByZXNhZG9zIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4iRm9yemFyIG8gYXh1c3RlIGRvIHRhbWHDsW8gZGFzIGFjdGl2aWRhZGVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXNfc3VtbWFyeSIgbXNnaWQ9IjQ1MDgyMTc0NzY5OTcxODIyMTYiPiJQZXJtaXRlIGF4dXN0YXIgbyB0YW1hw7FvIGRlIHRvZGFzIGFzIGFjdGl2aWRhZGVzIHBhcmEgbyBtb2RvIGRlIHZhcmlhcyB2ZW50w6FzLCBpbmRlcGVuZGVudGVtZW50ZSBkb3MgdmFsb3JlcyBkZWZpbmlkb3MuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnQiIG1zZ2lkPSIxNDYxODkzMzUxMjc4OTQwNDE2Ij4iQWN0aXZhciB2ZW50w6FzIGRlIGZvcm1hIGxpYnJlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnRfc3VtbWFyeSIgbXNnaWQ9IjIyNTI1NjM0OTc0ODU0MzY1MzQiPiJBY3RpdmEgYSBjb21wYXRpYmlsaWRhZGUgY29uIHZlbnTDoXMgZGUgZm9ybWEgbGlicmUgZXhwZXJpbWVudGFpcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4iQ29udHJhc2luYWwgcGFyYSBjb3BpYXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9ub25lIiBtc2dpZD0iNjk1MTA5NTQ4NTUzNzc2Nzk1NiI+IkFzIGNvcGlhcyBkZSBzZWd1cmlkYWRlIGRlIG9yZGVuYWRvciBjb21wbGV0YXMgbm9uIGVzdMOhbiBwcm90ZXhpZGFzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfY2hhbmdlIiBtc2dpZD0iMjczMTE2MzQyNTA4MTE3MjYzOCI+IlRvY2EgcGFyYSBjYW1iaWFyIG91IGVsaW1pbmFyIG8gY29udHJhc2luYWwgcGFyYSBhcyBjb3BpYXMgZGUgc2VndXJhbnphIGNvbXBsZXRhcyBkbyBlc2NyaXRvcmlvIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1ndS1ySU4vYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZ3UtcklOL2FycmF5cy54bWwKaW5kZXggYzdkNjJjNS4uOTJjYmIyZCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1ndS1ySU4vYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWd1LXJJTi9hcnJheXMueG1sCkBAIC01OSwyMyArNTksMjYgQEAKICAgICA8aXRlbSBtc2dpZD0iNDUwNzU2MzEyMzEyMTI3MzIiPiLgqrngqoLgqq7gq4fgqrbgqr4gSERDUCDgqqTgqqrgqr7gqrjgqqjgq4sg4KqJ4Kqq4Kqv4KuL4KqXIOCqleCqsOCriyI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iMzEwMDUzNDg3NDUyOTI0MDI5MSI+IjY0SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMU0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2NDA1MjAzMjM5NTYwNjk1MjY2Ij4iNE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTZNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+IuCqrOCqguCqpyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0ODc1NDUzNDAyMzYxNDUzMjQiPiIyNTZLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjFNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyODAzMTk5MTAyNTg5MTI2OTM4Ij4iMTZNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjRLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMU0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4i4Kqs4KqC4KqnIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDYyMjQ2MDMzMzAzODU4Njc5MSI+IjY0SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIyMTIxMjU2MjUxNjk1ODIzMzAiPiIyNTZLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTcwNDk0Njc2NjY5OTI0MjY1MyI+IjFNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9zdW1tYXJpZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI3MzQ2NTk1NDczNTg4NzY1MDE5Ij4i4Kqy4KuJ4KqXIOCqrOCqq+CqsCDgqqbgq4DgqqAgNjRLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMjgyMjMwOTc0NzY3NTc1ODYyOCI+IuCqsuCrieCqlyDgqqbgq4DgqqAgMjU2SyDgqqzgqqvgqrAiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4i4Kqy4KuJ4KqXIOCqrOCqq+CqsCDgqqbgq4DgqqAgMU0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1NzQ4NTI4NjQzOTM3NTAwMzQ5Ij4i4Kqy4KuJ4KqXIOCqrOCqq+CqsCDgqqbgq4DgqqAgNE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxOTc4NjI5MDUxMDg1MTExNTkyIj4i4Kqq4KuN4Kqw4Kqk4Kq/IOCqsuCrieCqlyDgqqzgqqvgqrAgMTZNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+IuCqrOCqguCqpyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI5Njk0NTgwMjkzNDQ3NTAyNjIiPiLgqrLgq4ngqpcg4Kqs4Kqr4KqwIOCqpuCrgOCqoCA2NEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzQyMjg1MTE1NjY1Njk4MTY4Ij4i4Kqy4KuJ4KqXIOCqrOCqq+CqsCDgqqbgq4DgqqAgMjU2SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiLgqrLgq4ngqpcg4Kqs4Kqr4KqwIOCqpuCrgOCqoCAxTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM2MDYwNDc3ODA3OTI4OTQxNTEiPiLgqrLgq4ngqpcg4Kqs4Kqr4KqwIOCqpuCrgOCqoCA0TSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU0MzEzNTQ5NTY4NTY2NTUxMjAiPiLgqrLgq4ngqpcg4Kqs4Kqr4KqwIOCqpuCrgOCqoCAxNk0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4i4KqP4Kqo4Kq/4Kqu4KuH4Kq24KqoIOCqrOCqguCqpyI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWd1LXJJTi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZ3UtcklOL3N0cmluZ3MueG1sCmluZGV4IDZkZmY4ZmEuLjRiNzI2NDggMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZ3UtcklOL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZ3UtcklOL3N0cmluZ3MueG1sCkBAIC0yNDcsNiArMjQ3LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX2FsbG93X29uX2V4dGVybmFsX3N1bW1hcnkiIG1zZ2lkPSIzMTkxOTUyNTA1ODYwMzQzMjMzIj4i4Kqu4KuH4Kqo4Kq/4Kqr4KuH4Kq44KuN4KqfIOCqruCrguCqsuCrjeCqr+Cri+CqqOCrhyDgqqfgq43gqq/gqr7gqqjgqq7gqr7gqoIg4Kqy4KuA4Kqn4Kq+IOCquOCqv+CqteCqvuCqrywg4KqV4KuL4KqI4Kqq4KqjIOCqj+CqquCrjeCqsuCqv+CqleCrh+CqtuCqqOCqqOCrhyDgqqzgqr7gqrngq43gqq8g4Kq44KuN4Kqf4KuL4Kqw4KuH4KqcIOCqquCqsCDgqrLgqpbgqr7gqrXgqr4g4Kqu4Kq+4Kqf4KuHIOCqsuCqvuCqr+CqlSDgqqzgqqjgqr7gqrXgq4cg4Kqb4KuHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4i4Kqq4KuN4Kqw4Kq14KuD4Kqk4KuN4Kqk4Kq/4KqT4Kqo4KuHIOCqq+CqsOCrgOCqpeCrgCDgqpXgqqYg4Kqv4KuL4KqX4KuN4KqvIOCqpeCqteCqviDgqq7gqr7gqp/gq4cg4Kqr4Kqw4KqcIOCqquCqvuCqoeCriyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4i4Kqk4Kqu4Kq+4KquIOCqquCrjeCqsOCqteCrg+CqpOCrjeCqpOCqv+Cqk+CqqOCrhyDgqq7gqrLgq43gqp/gq4At4Kq14Kq/4KqC4Kqh4KuLIOCqruCqvuCqn+CrhyDgqqvgqrDgq4DgqqXgq4Ag4KqV4KqmIOCqrOCqpuCqsuCrgCDgqrbgqpXgq4cg4Kqk4KuH4Kq14KuAIOCqrOCqqOCqvuCqteCrhyDgqpvgq4csIOCqruCrh+CqqOCrgOCqq+Crh+CquOCrjeCqnyDgqq7gq4HgqrLgq43gqq/gq4vgqqjgq4cg4Kqn4KuN4Kqv4Kq+4Kqo4Kqu4Kq+4KqCIOCqsuCrgOCqp+CqviDgqrjgqr/gqrXgqr7gqq8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnQiIG1zZ2lkPSIxNDYxODkzMzUxMjc4OTQwNDE2Ij4i4Kqu4KuB4KqV4KuN4Kqk4Kq+4KqV4Kq+4KqwIOCqteCqv+CqguCqoeCri+CqnSDgqrjgqpXgq43gqrfgqq4g4KqV4Kqw4KuLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnRfc3VtbWFyeSIgbXNnaWQ9IjIyNTI1NjM0OTc0ODU0MzY1MzQiPiLgqqrgq43gqrDgqr7gqq/gq4vgqpfgqr/gqpUg4Kqu4KuB4KqV4KuN4Kqk4Kq+4KqV4Kq+4KqwIOCqteCqv+CqguCqoeCri+CqnSDgqq7gqr7gqp/gq4cg4Kq44Kqu4Kqw4KuN4Kql4Kqo4Kqo4KuHIOCquOCqleCrjeCqt+CqriDgqpXgqrDgq4cg4Kqb4KuHLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF90aXRsZSIgbXNnaWQ9IjM4NjA0NzE2NTQ0Mzk0MTg4MjIiPiLgqqHgq4fgqrjgq43gqpXgqp/gq4ngqqog4Kqs4KuH4KqV4KqF4KqqIOCqquCqvuCquOCqteCqsOCrjeCqoSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4i4Kqh4KuH4Kq44KuN4KqV4Kqf4KuJ4KqqIOCquOCqguCqquCrguCqsOCrjeCqoyDgqqzgq4fgqpXgqoXgqqog4Kq54Kq+4Kqy4Kqu4Kq+4KqCIOCquOCrgeCqsOCqleCrjeCqt+Cqv+CqpCDgqqjgqqXgq4AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4i4Kqh4KuH4Kq44KuN4KqV4Kqf4KuJ4KqqIOCquOCqguCqquCrguCqsOCrjeCqoyDgqqzgq4fgqpXgqoXgqqrgq43gqrgg4Kqu4Kq+4Kqf4KuH4Kqo4KuLIOCqquCqvuCquOCqteCqsOCrjeCqoSDgqqzgqqbgqrLgqrXgqr4g4KqF4Kql4Kq14Kq+IOCqpuCrguCqsCDgqpXgqrDgqrXgqr4g4Kqu4Kq+4Kqf4KuHIOCqn+CqmiDgqpXgqrDgq4siPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWhpL2FycmF5cy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWhpL2FycmF5cy54bWwKaW5kZXggODgzZTk5Ny4uOGFhOThhMWYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtaGkvYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWhpL2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+IuCkueCkruClh+CktuCkviBIRENQIOCknOCkvuCkguCkmiDgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCksOClh+CkgiI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iMzEwMDUzNDg3NDUyOTI0MDI5MSI+IjY0SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMU0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2NDA1MjAzMjM5NTYwNjk1MjY2Ij4iNE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTZNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+IuCkrOCkguCkpiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0ODc1NDUzNDAyMzYxNDUzMjQiPiIyNTZLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjFNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyODAzMTk5MTAyNTg5MTI2OTM4Ij4iMTZNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjRLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMU0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4i4KSs4KSC4KSmIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDYyMjQ2MDMzMzAzODU4Njc5MSI+IjY0SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIyMTIxMjU2MjUxNjk1ODIzMzAiPiIyNTZLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTcwNDk0Njc2NjY5OTI0MjY1MyI+IjFNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9zdW1tYXJpZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI3MzQ2NTk1NDczNTg4NzY1MDE5Ij4iNjRLIOCkquCljeCksOCkpOCkvyDgpLLgpYngpJcg4KSs4KSr4KS84KSwIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMjgyMjMwOTc0NzY3NTc1ODYyOCI+IjI1Nksg4KSq4KWN4KSw4KSk4KS/IOCksuClieCklyDgpKzgpKvgpLzgpLAiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4iMU0g4KSq4KWN4KSw4KSk4KS/IOCksuClieCklyDgpKzgpKvgpLzgpLAiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1NzQ4NTI4NjQzOTM3NTAwMzQ5Ij4iNE0g4KSq4KWN4KSw4KSk4KS/IOCksuClieCklyDgpKzgpKvgpLzgpLAiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxOTc4NjI5MDUxMDg1MTExNTkyIj4iMTZNIOCkquCljeCksOCkpOCkvyDgpLLgpYngpJcg4KSs4KSr4KS84KSwIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+IuCkrOCkguCkpiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI5Njk0NTgwMjkzNDQ3NTAyNjIiPiI2NEsg4KSq4KWN4KSw4KSk4KS/IOCksuClieCklyDgpKzgpKvgpLzgpLAiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzQyMjg1MTE1NjY1Njk4MTY4Ij4iMjU2SyDgpKrgpY3gpLDgpKTgpL8g4KSy4KWJ4KSXIOCkrOCkq+CkvOCksCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiIxTSDgpKrgpY3gpLDgpKTgpL8g4KSy4KWJ4KSXIOCkrOCkq+CkvOCksCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM2MDYwNDc3ODA3OTI4OTQxNTEiPiI0TSDgpKrgpY3gpLDgpKTgpL8g4KSy4KWJ4KSXIOCkrOCkq+CkvOCksCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU0MzEzNTQ5NTY4NTY2NTUxMjAiPiIxNk0g4KSq4KWN4KSw4KSk4KS/IOCksuClieCklyDgpKzgpKvgpLzgpLAiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4i4KSP4KSo4KS/4KSu4KWH4KS24KSoIOCkrOCkguCkpiI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWhpL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1oaS9zdHJpbmdzLnhtbAppbmRleCA5Y2U4M2ZhLi41MjI0YzM4IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWhpL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtaGkvc3RyaW5ncy54bWwKQEAgLTI0Nyw2ICsyNDcsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiLgpIfgpLjgpLjgpYcg4KSV4KWL4KSIIOCkreClgCDgpJDgpKog4KSu4KWH4KSo4KS/4KSr4KWH4KS44KWN4oCN4KSfIOCkruCkvuCkqCDgpIXgpKjgpKbgpYfgpJbgpL4g4KSV4KSw4KSV4KWHLCDgpKzgpL7gpLngpLDgpYAg4KSu4KWH4KSu4KWL4KSw4KWAIOCkquCksCDgpLLgpL/gpJbgpKjgpYcg4KSv4KWL4KSX4KWN4oCN4KSvIOCkrOCkqCDgpJzgpL7gpKTgpL4g4KS54KWIIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4i4KSG4KSV4KS+4KSwIOCkrOCkpuCksuClhyDgpJzgpL7gpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpJfgpKTgpL/gpLXgpL/gpKfgpL/gpK/gpYvgpIIg4KSV4KWLIOCkrOCkvuCkp+CljeCkryDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllc19zdW1tYXJ5IiBtc2dpZD0iNDUwODIxNzQ3Njk5NzE4MjIxNiI+IuCkj+CkleCkvuCkp+Ckv+CklS3gpLXgpL/gpILgpKHgpYsg4KSV4KWHIOCksuCkv+CkjyDgpLjgpK3gpYAg4KSX4KSk4KS/4KS14KS/4KSn4KS/4KSv4KWL4KSCIOCkleClhyDgpIbgpJXgpL7gpLAg4KSV4KWLIOCkrOCkpuCksuClhyDgpJzgpL7gpKjgpYcg4KSv4KWL4KSX4KWN4KSvIOCkrOCkqOCkvuCkpOCkviDgpLngpYgsIOCkmuCkvuCkueClhyDgpK7gpYfgpKjgpL/gpKvgpYfgpLjgpY3gpJ8g4KSu4KS+4KSoIOCkleClgeCkmyDgpK3gpYAg4KS54KWL4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0IiBtc2dpZD0iMTQ2MTg5MzM1MTI3ODk0MDQxNiI+IuCkq+CkvOCljeCksOClgOCkq+CkvOClieCksOCljeCkriDgpLXgpL/gpILgpKHgpYsg4KS44KSV4KWN4KS34KSuIOCkleCksOClh+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkiIG1zZ2lkPSIyMjUyNTYzNDk3NDg1NDM2NTM0Ij4i4KSq4KWN4KSw4KSv4KWL4KSX4KS+4KSk4KWN4KSu4KSVIOCkq+CkvOCljeCksOClgOCkq+CkvOClieCksOCljeCkriDgpLXgpL/gpILgpKHgpYsg4KSV4KS+IOCkuOCkruCksOCljeCkpeCkqCDgpLjgpJXgpY3gpLfgpK4g4KSV4KSw4KSk4KWAIOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4i4KSh4KWH4KS44KWN4oCN4KSV4KSf4KWJ4KSqIOCkrOCliOCkleCkheCkqiDgpKrgpL7gpLjgpLXgpLDgpY3gpKEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9ub25lIiBtc2dpZD0iNjk1MTA5NTQ4NTUzNzc2Nzk1NiI+IuCkoeClh+CkuOCljeKAjeCkleCkn+ClieCkqiDgpKrgpYLgpLDgpY3gpKMg4KSs4KWI4KSV4KSF4KSqIOCkteCksOCljeCkpOCkruCkvuCkqCDgpK7gpYfgpIIg4KS44KWB4KSw4KSV4KWN4KS34KS/4KSkIOCkqOCkueClgOCkgiDgpLngpYjgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4i4KSh4KWH4KS44KWN4KSV4KSf4KWJ4KSqIOCkleClhyDgpKrgpYLgpLDgpY3gpKMg4KSs4KWI4KSV4KSF4KSqIOCkleClhyDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSV4KWLIOCkrOCkpuCksuCkqOClhyDgpK/gpL4g4KSo4KS/4KSV4KS+4KSy4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KS44KWN4oCN4KSq4KSw4KWN4KS2IOCkleCksOClh+Ckgi4iPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWhyL2FycmF5cy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWhyL2FycmF5cy54bWwKaW5kZXggZDUxZjgyZC4uZGI0NjBjNyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1oci9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtaHIvYXJyYXlzLnhtbApAQCAtNTksMjMgKzU5LDI2IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjQ1MDc1NjMxMjMxMjEyNzMyIj4iVXZpamVrIHVwb3RyZWJsamF2YWogSERDUCBwcm92amVydSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iMzEwMDUzNDg3NDUyOTI0MDI5MSI+IjY0IEtCIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTA1NjExNzU0NTA4OTg4NDc2Ij4iMjU2IEtCIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+IjEgTUIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2NDA1MjAzMjM5NTYwNjk1MjY2Ij4iNCBNQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMwMjU0MzEyMTEwMTM0MjQwOTciPiIxNiBNQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiJJc2tsanXEjWVubyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NCBLQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IjI1NiBLQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI0MjM1Mjg2NzUyOTQzMzM4MzEiPiIxIE1CIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNCBNQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI4MDMxOTkxMDI1ODkxMjY5MzgiPiIxNiBNQiI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfbG93cmFtX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUyNDc5OTM5NTc3MDYxMDE1NCI+IjY0IEtCIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1NiBLQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjgwODU4NjcyMDkyMDIxNTM0MDMiPiIxIE1CIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjA4OTQ3MDcyMDQ1MTA2ODM2NCI+Iklza2xqdcSNZW5vIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDYyMjQ2MDMzMzAzODU4Njc5MSI+IjY0IEtCIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+IjI1NiBLQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxIE1CIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9zdW1tYXJpZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI3MzQ2NTk1NDczNTg4NzY1MDE5Ij4iNjQgS0IgcG8gbWXEkXVzcHJlbS4iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyODIyMzA5NzQ3Njc1NzU4NjI4Ij4iMjU2IEtCIHBvIG1lxJF1c3ByLiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiIxIE1CIHBvIG1lxJF1c3ByZW0uIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+IjQgTUIgcG8gbWXEkXVzcHJlbS4iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxOTc4NjI5MDUxMDg1MTExNTkyIj4iMTYgTUIgcG8gbWXEkXVzcHJlbS4iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4iSXNrbGp1xI1lbm8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4iNjQgS0IgcG8gbWXEkXVzcHJlbS4gemFwaXNuaWthIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+IjI1NiBLQiBwbyBtZcSRdXNwcmVtLiB6YXBpc25pa2EiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4iMSBNQiBwbyBtZcSRdXNwcmVtLiB6YXBpc25pa2EiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4iNCBNQiBwbyBtZcSRdXNwcmVtLiB6YXBpc25pa2EiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4iMTYgTUIgcG8gbWXEkXVzcHJlbS4gemFwaXNuaWthIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+IkFuaW1hY2lqYSBpc2tsanXEjWVuYSI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWhyL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1oci9zdHJpbmdzLnhtbAppbmRleCBkZDAyMTcxLi41Y2RlMjMzIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWhyL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtaHIvc3RyaW5ncy54bWwKQEAgLTI0Nyw2ICsyNDcsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX2FsbG93X29uX2V4dGVybmFsX3N1bW1hcnkiIG1zZ2lkPSIzMTkxOTUyNTA1ODYwMzQzMjMzIj4iQXBsaWthY2lqZSBzZSBtb2d1IHphcGlzaXZhdGkgdSB2YW5qc2t1IHBvaHJhbnUgbmVvdmlzbm8gbyBtYW5pZmVzdHUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiJOYW1ldG5pIG1vZ3XEh25vc3QgcHJvbWplbmUgdmVsacSNaW5lIHphIGFrdGl2bm9zdGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllc19zdW1tYXJ5IiBtc2dpZD0iNDUwODIxNzQ3Njk5NzE4MjIxNiI+IlZlbGnEjWluYSBzdmloIGFrdGl2bm9zdGkgbW/FvmUgc2UgbWlqZW5qYXRpIHphIHZpxaFlIHByb3pvcmEsIG5lb3Zpc25vIG8gdnJpamVkbm9zdGltYSBtYW5pZmVzdGEuIjwvc3RyaW5nPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0ICgxNDYxODkzMzUxMjc4OTQwNDE2KSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkgKDIyNTI1NjM0OTc0ODU0MzY1MzQpIC0tPgorICAgIDxza2lwIC8+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4iWmFwb3JrYSBzaWd1cm5vc25lIGtvcGlqZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4iUG90cHVuZSBzaWd1cm5vc25lIGtvcGlqZSBuYSBzdG9sbm9tIHJhxI11bmFsdSB0cmVudXRhxI1ubyBuaXN1IHphxaF0acSHZW5lIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfY2hhbmdlIiBtc2dpZD0iMjczMTE2MzQyNTA4MTE3MjYzOCI+Ik9kYWJlcml0ZSB6YSBwcm9tamVudSBpbGkgdWtsYW5qYW5qZSB6YXBvcmtlIHUgcG90cHVuaW0gc2lndXJub3NuaW0ga29waWphbWEgbmEgc3RvbG5vbSByYcSNdW5hbHUiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWh1L2FycmF5cy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWh1L2FycmF5cy54bWwKaW5kZXggMDNjOWVkNy4uMGQyMDFiNSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1odS9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtaHUvYXJyYXlzLnhtbApAQCAtNTksMjMgKzU5LDI2IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjQ1MDc1NjMxMjMxMjEyNzMyIj4iTWluZGlnIGhhc3puw6Fsam9uIEhEQ1AgZWxsZW7FkXJ6w6lzdCI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iMzEwMDUzNDg3NDUyOTI0MDI5MSI+IjY0IEtCIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTA1NjExNzU0NTA4OTg4NDc2Ij4iMjU2IEtCIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+IjEgTUIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2NDA1MjAzMjM5NTYwNjk1MjY2Ij4iNCBNQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMwMjU0MzEyMTEwMTM0MjQwOTciPiIxNiBNQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiJLaSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NCBLQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IjI1NiBLQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI0MjM1Mjg2NzUyOTQzMzM4MzEiPiIxIE1CIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNCBNQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI4MDMxOTkxMDI1ODkxMjY5MzgiPiIxNiBNQiI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfbG93cmFtX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUyNDc5OTM5NTc3MDYxMDE1NCI+IjY0IEtCIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1NiBLQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjgwODU4NjcyMDkyMDIxNTM0MDMiPiIxIE1CIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjA4OTQ3MDcyMDQ1MTA2ODM2NCI+IktpIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDYyMjQ2MDMzMzAzODU4Njc5MSI+IjY0IEtCIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+IjI1NiBLQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxIE1CIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9zdW1tYXJpZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI3MzQ2NTk1NDczNTg4NzY1MDE5Ij4iNjQgS0IvbmFwbMOzcHVmZmVyIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMjgyMjMwOTc0NzY3NTc1ODYyOCI+IjI1NiBLQi9uYXBsw7NwdWZmZXIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4iMSBNQi9uYXBsw7NwdWZmZXIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1NzQ4NTI4NjQzOTM3NTAwMzQ5Ij4iNCBNQi9uYXBsw7NwdWZmZXIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxOTc4NjI5MDUxMDg1MTExNTkyIj4iMTYgTUIvbmFwbMOzcHVmZmVyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+IktpIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjk2OTQ1ODAyOTM0NDc1MDI2MiI+IjY0IEtCL25hcGzDs3B1ZmZlciI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzNDIyODUxMTU2NjU2OTgxNjgiPiIyNTYgS0IvbmFwbMOzcHVmZmVyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTMxNDIzNDI5OTU1MjI1NDYyMSI+IjEgTUIvbmFwbMOzcHVmZmVyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+IjQgTUIvbmFwbMOzcHVmZmVyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTQzMTM1NDk1Njg1NjY1NTEyMCI+IjE2IE1CL25hcGzDs3B1ZmZlciI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9IndpbmRvd19hbmltYXRpb25fc2NhbGVfZW50cmllcyI+CiAgICAgPGl0ZW0gbXNnaWQ9IjgxMzQxNTY1OTkzNzA4MjQwODEiPiJBbmltw6FjacOzIGtpIjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtaHUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWh1L3N0cmluZ3MueG1sCmluZGV4IDliM2EzODYuLjM1NTlmMWUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtaHUvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1odS9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0Nyw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+IkxlaGV0xZF2w6kgdGVzemksIGhvZ3kga8O8bHPFkSB0w6FyaGVseXJlIGxlaGVzc2VuIMOtcm5pIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4iVGV2w6lrZW55c8OpZ2VrIMOhdG3DqXJldGV6w6lzw6luZWsga8OpbnlzemVyw610w6lzZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4iTGVoZXTFkXbDqSB0ZXN6aSwgaG9neSBheiDDtnNzemVzIHRldsOpa2VueXPDqWcgw6F0bcOpcmV0ZXpoZXTFkSBsZWd5ZW4gYSB0w7ZiYmFibGFrb3MgbWVnamVsZW7DrXTDqXMgw6lyZGVrw6liZW4gYSBqZWd5esOpa8OpcnTDqWtla3TFkWwgZsO8Z2dldGxlbsO8bC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydCIgbXNnaWQ9IjE0NjE4OTMzNTEyNzg5NDA0MTYiPiJTemFiYWQgZm9ybcOhasO6IGFibGFrb2sgZW5nZWTDqWx5ZXrDqXNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnRfc3VtbWFyeSIgbXNnaWQ9IjIyNTI1NjM0OTc0ODU0MzY1MzQiPiJFbmdlZMOpbHllemkgYSBrw61zw6lybGV0aSBqZWxsZWfFsSwgc3phYmFkIGZvcm3DoWrDuiBhYmxha29rIHTDoW1vZ2F0w6Fzw6F0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF90aXRsZSIgbXNnaWQ9IjM4NjA0NzE2NTQ0Mzk0MTg4MjIiPiJBc3p0YWxpIG1lbnTDqXMgamVsc3phdmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9ub25lIiBtc2dpZD0iNjk1MTA5NTQ4NTUzNzc2Nzk1NiI+IkF6IGFzenRhbGkgdGVsamVzIGJpenRvbnPDoWdpIG1lbnTDqXNlayBqZWxlbmxlZyBuZW0gdsOpZGV0dGVrLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiLDiXJpbnRzZSBtZWcsIGhhIG3Ds2Rvc8OtdGFuw6EgdmFneSBlbHTDoXZvbMOtdGFuw6EgYSBqZWxzesOzdCBheiBhc3p0YWxpIHRlbGplcyBtZW50w6lzZWtoZXoiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWh5LXJBTS9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1oeS1yQU0vYXJyYXlzLnhtbAppbmRleCA0MTE0M2RlLi4wNzU1YThhIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWh5LXJBTS9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtaHktckFNL2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+ItWE1avVt9W/INaF1aPVv9Wh1aPVuNaA1a7VpdWsIEhEQ1Ag1b3Vv9W41oLVo9W41oLVtNWoIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjTUv9SyIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTA1NjExNzU0NTA4OTg4NDc2Ij4iMjU21L/UsiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjYzNjEyODY5MjQyNjg3MTYzOTciPiIx1YTUsiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI01YTUsiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMwMjU0MzEyMTEwMTM0MjQwOTciPiIxNtWE1LIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4NjY1MjA2MTk5MjA5Njk4NTAxIj4i1LHVttW71aHVv9W+1aHVriDVpyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NNS/1LIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0ODc1NDUzNDAyMzYxNDUzMjQiPiIyNTbUv9SyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjHVhNSyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNNWE1LIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyODAzMTk5MTAyNTg5MTI2OTM4Ij4iMTbVhNSyIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjTUv9SyIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1NtS/1LIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMdWE1LIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4i1LHVttW71aHVv9W+1aHVriDVpyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NNS/1LIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU21L/UsiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIx1YTUsiI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+ItWK1aHVsNW21aHVr9WdINWh1bzVodW+LiA2NNS/1LIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyODIyMzA5NzQ3Njc1NzU4NjI4Ij4i1YrVodWw1bbVodWv1Z0g1aHVvNWh1b4uIDI1NtS/1LIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4i1YrVodWw1bbVodWv1Z0g1aHVvNWh1b4uIDHVhNSyIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+ItWK1aHVsNW21aHVr9WdINWh1bzVodW+LiA01YTUsiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiLVitWh1bDVttWh1a/VnSDVodW81aHVvi4gMTbVhNSyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+ItSx1bbVu9Wh1b/VvtWh1a4g1aciPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4i1YrVodWw1bbVodWv1Z0g1aHVvNWh1b4uIDY01L/UsiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzNDIyODUxMTU2NjU2OTgxNjgiPiLVitWh1bDVttWh1a/VnSDVodW81aHVvi4gMjU21L/UsiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiLVitWh1bDVttWh1a/VnSDVodW81aHVvi4gMdWE1LIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4i1YrVodWw1bbVodWv1Z0g1aHVvNWh1b4uIDTVhNSyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTQzMTM1NDk1Njg1NjY1NTEyMCI+ItWK1aHVsNW21aHVr9WdINWh1bzVodW+LiAxNtWE1LIiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4i1LHVttW71aHVv9Wl1awg1bfVodaA1arVodW61aHVv9Wv1aXWgNWoIjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtaHktckFNL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1oeS1yQU0vc3RyaW5ncy54bWwKaW5kZXggMjdkYjlmZS4uNDJjOWEwNSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1oeS1yQU0vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1oeS1yQU0vc3RyaW5ncy54bWwKQEAgLTI0Nyw2ICsyNDcsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX2FsbG93X29uX2V4dGVybmFsX3N1bW1hcnkiIG1zZ2lkPSIzMTkxOTUyNTA1ODYwMzQzMjMzIj4i1LnVuNaC1bXVrCDVpyDVv9Wh1azVq9W9INW61aHVsNWl1awg1bDVodW+1aXVrNW+1aHVrtWoINWh1oDVv9Wh1oTVq9W2INW91aHWgNaE1bjWgtW01Z0g1bTVodW21avWhtWl1b3Vv9WrINWh1oDVqtWl1oTVttWl1oDVq9aBINWh1bbVr9Wh1a0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiLVjdW/1avVutWl1awsINW41oAg1aHVr9W/1avVvtW41oLVqdW11bjWgtW21bbVpdaA1asg1bnVodaD1aXWgNWoINWs1avVttWl1bYg1oPVuNaD1bjVrdWl1azVqyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4i1LLVuNWs1bjWgCDVodWv1b/Vq9W+1bjWgtWp1bXVuNaC1bbVttWl1oDVqyDVudWh1oPVpdaA1agg1aLVodWm1bTVodW61aHVv9W41oLVsNWh1bYg1bzVpdWq1avVtNWrINWw1aHVtNWh1oAg1aTVodaA1bHVttWl1awg1oPVuNaD1bjVrdWl1azVq9WdINW01aHVttWr1obVpdW91b/VqyDVodaA1arVpdaE1bbVpdaA1avWgSDVodW21a/VodWtOiI8L3N0cmluZz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBlbmFibGVfZnJlZWZvcm1fc3VwcG9ydCAoMTQ2MTg5MzM1MTI3ODk0MDQxNikgLS0+CisgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5ICgyMjUyNTYzNDk3NDg1NDM2NTM0KSAtLT4KKyAgICA8c2tpcCAvPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+ItSx1bfVrdWh1b/VodW91aXVstWh1bbVqyDVutWh1bDVuNaC1b3Vv9Wh1b7VuNaA1bTVodW2INWj1aHVstW/1bbVodWi1aHVvCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4i1LHVt9Wt1aHVv9Wh1b3VpdWy1aHVttWrINWh1bTVotW41bLVu9Wh1a/VodW2INW61aHVsNW41oLVvdW/1aHVvtW41oDVuNaC1bTVttWl1oDVqCDVodW11arVtCDVutWh1bfVv9W61aHVttW+1aHVriDVudWl1bYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4i1LHVt9Wt1aHVv9Wh1b3VpdWy1aHVttWrINWh1bTVotW41bLVu9Wh1a/VodW2INW61aHVsNW41oLVvdW/1aHVvtW41oDVtNWh1bYg1bDVodW01aHWgCDVqNW21b/WgNWl1awg1oPVuNWt1aXVrCDVr9Wh1bQg1bDVpdW81aHWgdW21aXVrCDVo9Wh1bLVv9W21aHVotWh1bzVqCI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtaW4vYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtaW4vYXJyYXlzLnhtbAppbmRleCA1YWFkYzEzLi4xNjZlZmQ1IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWluL2FycmF5cy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1pbi9hcnJheXMueG1sCkBAIC01OSwyMyArNTksMjYgQEAKICAgICA8aXRlbSBtc2dpZD0iNDUwNzU2MzEyMzEyMTI3MzIiPiJTZWxhbHUgZ3VuYWthbiBwZW1lcmlrc2FhbiBIRENQIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjQgSyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NiBLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+IjEgTSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0IE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTYgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiJOb25ha3RpZiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NCBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU2IEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4iMSBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNCBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2IE0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI1MjQ3OTkzOTU3NzA2MTAxNTQiPiI2NCBLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1NiBLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODA4NTg2NzIwOTIwMjE1MzQwMyI+IjEgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwODk0NzA3MjA0NTEwNjgzNjQiPiJOb25ha3RpZiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NCBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+IjI1NiBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTcwNDk0Njc2NjY5OTI0MjY1MyI+IjEgTSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+IjY0IEsvcGVueWFuZ2dhIGxvZyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiIyNTYgSy9wZW55YW5nZ2EgbG9nIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjY5OTMwNjE5ODM1NzQ5NjczMSI+IjEgTS9wZW55YW5nZ2EgbG9nIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+IjQgTS9wZW55YW5nZ2EgbG9nIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+IjE2IE0vcGVueWFuZ2dhIGxvZyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY5MjEwNDg4Mjk3OTExNzkzMzEiPiJOb25ha3RpZiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI5Njk0NTgwMjkzNDQ3NTAyNjIiPiI2NCBLL3BlbnlhbmdnYSBsb2ciPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzQyMjg1MTE1NjY1Njk4MTY4Ij4iMjU2IEsvcGVueWFuZ2dhIGxvZyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiIxIE0vcGVueWFuZ2dhIGxvZyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM2MDYwNDc3ODA3OTI4OTQxNTEiPiI0IE0vcGVueWFuZ2dhIGxvZyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU0MzEzNTQ5NTY4NTY2NTUxMjAiPiIxNiBNL3BlbnlhbmdnYSBsb2ciPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4iQW5pbWFzaSBtYXRpIjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtaW4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWluL3N0cmluZ3MueG1sCmluZGV4IDBjZWEyMDYuLjY5ODhhNzMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtaW4vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1pbi9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0NywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiJNZW1idWF0IHNlbXVhIGFwbGlrYXNpIGRhcGF0IGRpdHVsaXMga2UgcGVueWltcGFuYW4gZWtzdGVybmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiJQYWtzYSBha3Rpdml0YXMgYWdhciB1a3VyYW5ueWEgZGFwYXQgZGl1YmFoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXNfc3VtbWFyeSIgbXNnaWQ9IjQ1MDgyMTc0NzY5OTcxODIyMTYiPiJNZW1idWF0IHNlbXVhIGFrdGl2aXRhcyBkYXBhdCBkaXViYWggdWt1cmFubnlhIHVudHVrIGJhbnlhayBqZW5kZWxhLCB0ZXJsZXBhcyBkYXJpIG5pbGFpIG1hbmlmZXMuIjwvc3RyaW5nPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0ICgxNDYxODkzMzUxMjc4OTQwNDE2KSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkgKDIyNTI1NjM0OTc0ODU0MzY1MzQpIC0tPgorICAgIDxza2lwIC8+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4iU2FuZGkgY2FkYW5nYW4gZGVza3RvcCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4iU2FhdCBpbmkgY2FkYW5nYW4gZGVza3RvcCBwZW51aCB0aWRhayBkaWxpbmR1bmdpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfY2hhbmdlIiBtc2dpZD0iMjczMTE2MzQyNTA4MTE3MjYzOCI+IlNlbnR1aCBndW5hIG1lbmd1YmFoIGF0YXUgbWVuZ2hhcHVzIHNhbmRpIHVudHVrIGNhZGFuZ2FuIGxlbmdrYXAgZGVza3RvcCI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtaXMtcklTL2FycmF5cy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWlzLXJJUy9hcnJheXMueG1sCmluZGV4IGJiYzdhZWM2Li42MDI0ZTMwIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWlzLXJJUy9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtaXMtcklTL2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+Ik5vdGEgYWxsdGFmIEhEQ1AtZWZ0aXJsaXQiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMxMDA1MzQ4NzQ1MjkyNDAyOTEiPiI2NCBrIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTA1NjExNzU0NTA4OTg4NDc2Ij4iMjU2IGsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMSBNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjQwNTIwMzIzOTU2MDY5NTI2NiI+IjQgTSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMwMjU0MzEyMTEwMTM0MjQwOTciPiIxNiBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+IlNsw7Zra3QiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4iNjQgayI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IjI1NiBrIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjEgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjQgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI4MDMxOTkxMDI1ODkxMjY5MzgiPiIxNiBNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjQgayI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiIyNTYgayI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjgwODU4NjcyMDkyMDIxNTM0MDMiPiIxIE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4iU2zDtmtrdCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NCBrIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+IjI1NiBrIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTcwNDk0Njc2NjY5OTI0MjY1MyI+IjEgTSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+IjY0IGsvYmnDsG1pbm5pIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMjgyMjMwOTc0NzY3NTc1ODYyOCI+IjI1NiBrL2Jpw7BtaW5uaSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiIxIE0vYmnDsG1pbm5pIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+IjQgTS9iacOwbWlubmkiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxOTc4NjI5MDUxMDg1MTExNTkyIj4iMTYgTS9iacOwbWlubmkiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4iU2zDtmtrdCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI5Njk0NTgwMjkzNDQ3NTAyNjIiPiI2NCBrL2Jpw7BtaW5uaSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzNDIyODUxMTU2NjU2OTgxNjgiPiIyNTYgay9iacOwbWlubmkiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4iMSBNL2Jpw7BtaW5uaSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM2MDYwNDc3ODA3OTI4OTQxNTEiPiI0IE0vYmnDsG1pbm5pIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTQzMTM1NDk1Njg1NjY1NTEyMCI+IjE2IE0vYmnDsG1pbm5pIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+IlNsw7Zra3Qgw6EgaHJleWZpw6FocmlmdW0iPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1pcy1ySVMvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWlzLXJJUy9zdHJpbmdzLnhtbAppbmRleCBiMzUwOWNhLi44ZDkxMmU5IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWlzLXJJUy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWlzLXJJUy9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0NywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiJHZXJpciBodmHDsGEgZm9ycml0aSBzZW0gZXIga2xlaWZ0IGHDsCBza3JpZmEgw60geXRyaSBnZXltc2x1LCBidXJ0c8Opw7AgZnLDoSBnaWxkdW0gw60gdXBwbMO9c2luZ2Fza3LDoSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzIiBtc2dpZD0iODYxNTc2NDM3ODE0NzgyNDk4NSI+IsOedmluZ2EgYnJleXRhbmxlZ2Egc3TDpnLDsCB2aXJrbmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllc19zdW1tYXJ5IiBtc2dpZD0iNDUwODIxNzQ3Njk5NzE4MjIxNiI+IkdlcmlyIHN0w6Zyw7AgYWxscmFyIHZpcmtuaSBicmV5dGFubGVnYSBzdm8gYcOwIGjDum4gaGVudGkgZnlyaXIgbWFyZ2EgZ2x1Z2dhLCDDs2jDocOwIGdpbGR1bSDDrSB1cHBsw71zaW5nYXNrcsOhLiI8L3N0cmluZz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBlbmFibGVfZnJlZWZvcm1fc3VwcG9ydCAoMTQ2MTg5MzM1MTI3ODk0MDQxNikgLS0+CisgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5ICgyMjUyNTYzNDk3NDg1NDM2NTM0KSAtLT4KKyAgICA8c2tpcCAvPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+IkHDsGdhbmdzb3LDsCB0w7ZsdnVhZnJpdHVuYXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9ub25lIiBtc2dpZD0iNjk1MTA5NTQ4NTUzNzc2Nzk1NiI+IkhlaWxkYXJhZnJpdHVuIMOhIHTDtmx2dSBlciBla2tpIHZhcmluIHNlbSBzdGVuZHVyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiJTbmVydHUgdGlsIGHDsCBicmV5dGEgZcOwYSBmamFybMOmZ2phIGHDsGdhbmdzb3LDsGnDsCBmeXJpciBoZWlsZGFyYWZyaXR1biDDoSB0w7ZsdnUiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWl0L2FycmF5cy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWl0L2FycmF5cy54bWwKaW5kZXggNjg2ZDYxZC4uZDY0ZWMwNiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1pdC9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtaXQvYXJyYXlzLnhtbApAQCAtNTksMjMgKzU5LDI2IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjQ1MDc1NjMxMjMxMjEyNzMyIj4iVXNhIHNlbXByZSBsYSB2ZXJpZmljYSBIRENQIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjQga0IiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTYga0IiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMSBNQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0IE1CIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2IE1CIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+Ik5vbiBhdHRpdmEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4iNjQga0IiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0ODc1NDUzNDAyMzYxNDUzMjQiPiIyNTYga0IiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4iMSBNQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjQgTUIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyODAzMTk5MTAyNTg5MTI2OTM4Ij4iMTYgTUIiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI1MjQ3OTkzOTU3NzA2MTAxNTQiPiI2NCBrQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiIyNTYga0IiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMSBNQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwODk0NzA3MjA0NTEwNjgzNjQiPiJOb24gYXR0aXZhIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDYyMjQ2MDMzMzAzODU4Njc5MSI+IjY0IGtCIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+IjI1NiBrQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxIE1CIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9zdW1tYXJpZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI3MzQ2NTk1NDczNTg4NzY1MDE5Ij4iNjQga0IvYnVmZmVyIGxvZyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiIyNTYga0IvYnVmZmVyIGxvZyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiIxIE1CL2J1ZmZlciBsb2ciPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1NzQ4NTI4NjQzOTM3NTAwMzQ5Ij4iNCBNQi9idWZmZXIgbG9nIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+IjE2IE1CL2J1ZmZlciBsb2ciPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4iTm9uIGF0dGl2YSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI5Njk0NTgwMjkzNDQ3NTAyNjIiPiI2NCBrQi9idWZmZXIgbG9nIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+IjI1NiBrQi9idWZmZXIgbG9nIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTMxNDIzNDI5OTU1MjI1NDYyMSI+IjEgTUIvYnVmZmVyIGxvZyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM2MDYwNDc3ODA3OTI4OTQxNTEiPiI0IE1CL2J1ZmZlciBsb2ciPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4iMTYgTUIvYnVmZmVyIGxvZyI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9IndpbmRvd19hbmltYXRpb25fc2NhbGVfZW50cmllcyI+CiAgICAgPGl0ZW0gbXNnaWQ9IjgxMzQxNTY1OTkzNzA4MjQwODEiPiJBbmltYXppb25lIGRpc2F0dGl2YXRhIjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtaXQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWl0L3N0cmluZ3MueG1sCmluZGV4IDlmODk3ZjcuLjJkOThhNzQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtaXQvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1pdC9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0Nyw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+IlJlbmRlIGxcJ2FwcCBpZG9uZWEgYWxsXCdpbnN0YWxsYXouIHN1IG1lbS4gZXN0ZXJuYSwgc2VuemEgY29uc2lkZXJhcmUgaSB2YWxvcmkgbWFuaWZlc3QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiJJbXBvbmkgZm9ybWF0byBtb2RpZmljYWJpbGUgYWxsZSBhdHRpdml0w6AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllc19zdW1tYXJ5IiBtc2dpZD0iNDUwODIxNzQ3Njk5NzE4MjIxNiI+IlJlbmRlIGlsIGZvcm1hdG8gZGkgdHV0dGUgbGUgYXR0aXZpdMOgIG1vZGlmaWNhYmlsZSBwZXIgbGEgbW9kYWxpdMOgIG11bHRpLWZpbmVzdHJhLCBpbmRpcGVuZGVudGVtZW50ZSBkYWkgdmFsb3JpIG1hbmlmZXN0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0IiBtc2dpZD0iMTQ2MTg5MzM1MTI3ODk0MDQxNiI+IkF0dGl2YSBmaW5lc3RyZSBhIGZvcm1hIGxpYmVyYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkiIG1zZ2lkPSIyMjUyNTYzNDk3NDg1NDM2NTM0Ij4iQXR0aXZhIGlsIHN1cHBvcnRvIHBlciBsZSBmaW5lc3RyZSBhIGZvcm1hIGxpYmVyYSBzcGVyaW1lbnRhbGkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+IlBhc3N3b3JkIGRpIGJhY2t1cCBkZXNrdG9wIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiJJIGJhY2t1cCBkZXNrdG9wIGNvbXBsZXRpIG5vbiBzb25vIGF0dHVhbG1lbnRlIHByb3RldHRpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiJUb2NjYSBwZXIgbW9kaWZpY2FyZSBvIHJpbXVvdmVyZSBsYSBwYXNzd29yZCBwZXIgaSBiYWNrdXAgZGVza3RvcCBjb21wbGV0aSI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtaXcvYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtaXcvYXJyYXlzLnhtbAppbmRleCAyNGE0MGI5Li4wMTEyN2M2IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWl3L2FycmF5cy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1pdy9hcnJheXMueG1sCkBAIC01OSwyMyArNTksMjYgQEAKICAgICA8aXRlbSBtc2dpZD0iNDUwNzU2MzEyMzEyMTI3MzIiPiLigI/Xqtee15nXkyDXlNep16rXntepINeR15HXk9eZ16fXqiBIRENQIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjRLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTA1NjExNzU0NTA4OTg4NDc2Ij4i4oCOMjU2SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjYzNjEyODY5MjQyNjg3MTYzOTciPiIxTSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0TSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMwMjU0MzEyMTEwMTM0MjQwOTciPiIxNk0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4NjY1MjA2MTk5MjA5Njk4NTAxIj4i15vXkdeV15kiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4iNjRLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4i4oCOMjU2SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI0MjM1Mjg2NzUyOTQzMzM4MzEiPiIxTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjRNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2TSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfbG93cmFtX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUyNDc5OTM5NTc3MDYxMDE1NCI+IjY0SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiLigI4yNTZLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODA4NTg2NzIwOTIwMjE1MzQwMyI+IjFNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjA4OTQ3MDcyMDQ1MTA2ODM2NCI+Iteb15HXldeZIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDYyMjQ2MDMzMzAzODU4Njc5MSI+IjY0SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIyMTIxMjU2MjUxNjk1ODIzMzAiPiLigI4yNTZLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTcwNDk0Njc2NjY5OTI0MjY1MyI+IjFNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9zdW1tYXJpZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI3MzQ2NTk1NDczNTg4NzY1MDE5Ij4i4oCPNjRLINec15vXnCDXnteQ15LXqCDXmdeV157XnyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiLigI8yNTZLINec15vXnCDXnteQ15LXqCDXmdeV157XnyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiLigI8xTSDXnNeb15wg157XkNeS16gg15nXldee158iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1NzQ4NTI4NjQzOTM3NTAwMzQ5Ij4i4oCPNE0g15zXm9ecINee15DXkteoINeZ15XXntefIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+IuKAjzE2TSDXnNeb15wg157XkNeS16gg15nXldee158iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4i15vXkdeV15kiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4i4oCPNjRLINec15vXnCDXnteQ15LXqCDXmdeV157XnyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzNDIyODUxMTU2NjU2OTgxNjgiPiLigI8yNTZLINec15vXnCDXnteQ15LXqCDXmdeV157XnyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiLigI8xTSDXnNeb15wg157XkNeS16gg15nXldee158iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4i4oCPNE0g15zXm9ecINee15DXkteoINeZ15XXntefIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTQzMTM1NDk1Njg1NjY1NTEyMCI+IuKAjzE2TSDXnNeb15wg157XkNeS16gg15nXldee158iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4i15DXoNeZ157XpteZ15Qg15vXkdeV15nXlCI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWl3L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1pdy9zdHJpbmdzLnhtbAppbmRleCAyZDQ0NjEyLi5lMTc1MjA4IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWl3L3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtaXcvc3RyaW5ncy54bWwKQEAgLTI0Nyw2ICsyNDcsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX2FsbG93X29uX2V4dGVybmFsX3N1bW1hcnkiIG1zZ2lkPSIzMTkxOTUyNTA1ODYwMzQzMjMzIj4i157XkNek16nXqCDXm9eq15nXkdeUINep15wg15vXnCDXkNek15zXmden16bXmdeUINeR15DXl9eh15XXnyDXl9eZ16bXldeg15ksINec15zXkCDXlNeq15fXqdeR15XXqiDXkdei16jXm9eZINeU157XoNeZ16TXodeYIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4i15DXnNelINeZ15vXldec16og16fXkdeZ16LXqiDXkteV15PXnCDXqdecINeU16TXoteZ15zXldeZ15XXqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4i157XkNek16nXqCDXmdeb15XXnNeqINen15HXmdei16og15LXldeT15wg16nXnCDXm9ecINeU16TXoteZ15zXldeZ15XXqiDXnNeo15nXkdeV15kg15fXnNeV16DXldeqLCDXnNec15Ag16fXqdeoINec16LXqNeaINeU157XoNeZ16TXodeYLiI8L3N0cmluZz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBlbmFibGVfZnJlZWZvcm1fc3VwcG9ydCAoMTQ2MTg5MzM1MTI3ODk0MDQxNikgLS0+CisgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5ICgyMjUyNTYzNDk3NDg1NDM2NTM0KSAtLT4KKyAgICA8c2tpcCAvPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+Iteh15nXodee16og15LXmdeR15XXmSDXnten15XXnteZIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiLXkteZ15HXldeZ15nXnSDXntec15DXmdedINeR16nXldec15fXnyDXlNei15HXldeT15Qg15DXmdeg150g157XldeS16DXmdedINeb16LXqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiLXkteiINeb15PXmSDXnNep16DXldeqINeQ15Ug15zXlNeh15nXqCDXkNeqINeU16HXmdeh157XlCDXoteR15XXqCDXkteZ15HXldeZ15nXnSDXntec15DXmdedINeR16nXldec15fXnyDXlNei15HXldeT15QiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWphL2FycmF5cy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWphL2FycmF5cy54bWwKaW5kZXggNjMwN2ExMC4uMzQyNmI1YyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1qYS9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtamEvYXJyYXlzLnhtbApAQCAtNTksMjMgKzU5LDI2IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjQ1MDc1NjMxMjMxMjEyNzMyIj4iSERDUOODgeOCp+ODg+OCr+OCkuW4uOOBq+S9v+eUqOOBmeOCiyI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iMzEwMDUzNDg3NDUyOTI0MDI5MSI+IjY0SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMU0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2NDA1MjAzMjM5NTYwNjk1MjY2Ij4iNE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTZNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+Ik9GRiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NCBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU2IEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4iMSBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNCBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2IE0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI1MjQ3OTkzOTU3NzA2MTAxNTQiPiI2NEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzNTM0NzgyNzExMDQ1MjYyMzQ0Ij4iMjU2SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjgwODU4NjcyMDkyMDIxNTM0MDMiPiIxTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwODk0NzA3MjA0NTEwNjgzNjQiPiJPRkYiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0NjIyNDYwMzMzMDM4NTg2NzkxIj4iNjQgSyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIyMTIxMjU2MjUxNjk1ODIzMzAiPiIyNTYgSyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxIE0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiI2NEsv44Ot44Kw44OQ44OD44OV44KhIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMjgyMjMwOTc0NzY3NTc1ODYyOCI+IjI1Nksv44Ot44Kw44OQ44OD44OV44KhIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjY5OTMwNjE5ODM1NzQ5NjczMSI+IjFNL+ODreOCsOODkOODg+ODleOCoSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjU3NDg1Mjg2NDM5Mzc1MDAzNDkiPiI0TS/jg63jgrDjg5Djg4Pjg5XjgqEiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxOTc4NjI5MDUxMDg1MTExNTkyIj4iMTZNL+ODreOCsOODkOODg+ODleOCoSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY5MjEwNDg4Mjk3OTExNzkzMzEiPiJPRkYiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4iNjQgSyAvIOODreOCsOODkOODg+ODleOCoSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzNDIyODUxMTU2NjU2OTgxNjgiPiIyNTYgSyAvIOODreOCsOODkOODg+ODleOCoSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiIxIE0gLyDjg63jgrDjg5Djg4Pjg5XjgqEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4iNCBNIC8g44Ot44Kw44OQ44OD44OV44KhIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTQzMTM1NDk1Njg1NjY1NTEyMCI+IjE2IE0gLyDjg63jgrDjg5Djg4Pjg5XjgqEiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4i44Ki44OL44Oh44O844K344On44Oz44Kq44OVIjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtamEvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWphL3N0cmluZ3MueG1sCmluZGV4IDgxYTVlYWYuLmJmOWJmOGEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtamEvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1qYS9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0NywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiLjg57jg4vjg5Xjgqfjgrnjg4jjga7lgKTjgavplqLkv4LjgarjgY/jgIHjgZnjgbnjgabjga7jgqLjg5fjg6rjgpLlpJbpg6jjgrnjg4jjg6zjg7zjgrjjgavmm7jjgY3ovrzjgoHjgovjgojjgYbjgavjgarjgorjgb7jgZkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiLjgqLjgq/jg4bjgqPjg5Pjg4bjgqPjgpLjgrXjgqTjgrrlpInmm7Tlj6/og73jgavjgZnjgosiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllc19zdW1tYXJ5IiBtc2dpZD0iNDUwODIxNzQ3Njk5NzE4MjIxNiI+IuODnuODi+ODleOCp+OCueODiOOBruWApOOBq+mWouS/guOBquOBj+OAgeODnuODq+ODgeOCpuOCo+ODs+ODieOCpuOBp+OBmeOBueOBpuOBruOCouOCr+ODhuOCo+ODk+ODhuOCo+OBruOCteOCpOOCuuOCkuWkieabtOOBp+OBjeOCi+OCiOOBhuOBq+OBquOCiuOBvuOBmeOAgiI8L3N0cmluZz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBlbmFibGVfZnJlZWZvcm1fc3VwcG9ydCAoMTQ2MTg5MzM1MTI3ODk0MDQxNikgLS0+CisgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5ICgyMjUyNTYzNDk3NDg1NDM2NTM0KSAtLT4KKyAgICA8c2tpcCAvPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+IlBD44OQ44OD44Kv44Ki44OD44OX44OR44K544Ov44O844OJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiLjg4fjgrnjgq/jg4jjg4Pjg5fjga7jg5Xjg6vjg5Djg4Pjgq/jgqLjg4Pjg5fjga/nj77lnKjkv53orbfjgZXjgozjgabjgYTjgb7jgZvjgpMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4i44OH44K544Kv44OI44OD44OX44Gu44OV44Or44OQ44OD44Kv44Ki44OD44OX55So44Gu44OR44K544Ov44O844OJ44KS5aSJ5pu044G+44Gf44Gv5YmK6Zmk44GZ44KL5aC05ZCI44Gr44K/44OD44OX44GX44G+44GZIjwvc3RyaW5nPgpAQCAtMjYzLDkgKzI2Nyw5IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjgyODA3NTQ0MzU5NzkzNzA3MjgiPiLnm67jgavoh6rnhLbjgaroibIiPC9pdGVtPgogICAgIDxpdGVtIG1zZ2lkPSI1MzYzOTYwNjU0MDA5MDEwMzcxIj4i44OH44K444K/44Or44Kz44Oz44OG44Oz44OE44Gr5pyA6YGp44Gq6ImyIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+Ci0gICAgPHN0cmluZyBuYW1lPSJpbmFjdGl2ZV9hcHBzX3RpdGxlIiBtc2dpZD0iMTMxNzgxNzg2MzUwODI3NDUzMyI+IueEoeWKueOBquOCouODl+ODqiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImluYWN0aXZlX2FwcF9pbmFjdGl2ZV9zdW1tYXJ5IiBtc2dpZD0iNjc2ODc1Njk2NzU5NDIwMjQxMSI+IueEoeWKueOAguOCv+ODg+ODl+OBmeOCi+OBqOWIh+OCiuabv+OCj+OCiuOBvuOBmeOAgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImluYWN0aXZlX2FwcF9hY3RpdmVfc3VtbWFyeSIgbXNnaWQ9IjQ1MTI5MTE1NzE5NTQzNzU5NjgiPiLmnInlirnjgILjgr/jg4Pjg5fjgZnjgovjgajliIfjgormm7/jgo/jgorjgb7jgZnjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbmFjdGl2ZV9hcHBzX3RpdGxlIiBtc2dpZD0iMTMxNzgxNzg2MzUwODI3NDUzMyI+IuS8keatouS4reOBruOCouODl+ODqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImluYWN0aXZlX2FwcF9pbmFjdGl2ZV9zdW1tYXJ5IiBtc2dpZD0iNjc2ODc1Njk2NzU5NDIwMjQxMSI+IuS8keatouS4reOAguOCv+ODg+ODl+OBmeOCi+OBqOWIh+OCiuabv+OCj+OCiuOBvuOBmeOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImluYWN0aXZlX2FwcF9hY3RpdmVfc3VtbWFyeSIgbXNnaWQ9IjQ1MTI5MTE1NzE5NTQzNzU5NjgiPiLlrp/ooYzkuK3jgILjgr/jg4Pjg5fjgZnjgovjgajliIfjgormm7/jgo/jgorjgb7jgZnjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJydW5uaW5nc2VydmljZXNfc2V0dGluZ3NfdGl0bGUiIG1zZ2lkPSI4MDk3Mjg3OTM5ODY1MTY1MjEzIj4i5a6f6KGM5Lit44Gu44K144O844OT44K5Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icnVubmluZ3NlcnZpY2VzX3NldHRpbmdzX3N1bW1hcnkiIG1zZ2lkPSI4NTQ2MDg5OTU4MjEwMzI3NDgiPiLnj77lnKjlrp/ooYzkuK3jga7jgrXjg7zjg5PjgrnjgpLooajnpLrjgZfjgabliLblvqHjgZnjgosiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX3RpdGxlIiBtc2dpZD0iMjU5NDEzMzE0ODUzMTI1NjUxMyI+IuWknOmWk+ODouODvOODiSI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMta2EtckdFL2FycmF5cy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWthLXJHRS9hcnJheXMueG1sCmluZGV4IGFjNjI3YTIuLjRiNmY3OGIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMta2EtckdFL2FycmF5cy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1rYS1yR0UvYXJyYXlzLnhtbApAQCAtNTksMjMgKzU5LDI2IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjQ1MDc1NjMxMjMxMjEyNzMyIj4i4YOn4YOd4YOV4YOU4YOa4YOX4YOV4YOY4YOhIOGDkuGDkOGDm+GDneGDmOGDp+GDlOGDnOGDlCBIRENQIOGDqOGDlOGDm+GDneGDrOGDm+GDlOGDkeGDkCI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iMzEwMDUzNDg3NDUyOTI0MDI5MSI+IjY0SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMU0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2NDA1MjAzMjM5NTYwNjk1MjY2Ij4iNE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTZNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+IuGDkuGDkOGDm+GDneGDoOGDl+GDo+GDmuGDmCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NCDhg5nhg5Hhg5Dhg5jhg6Lhg5giPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0ODc1NDUzNDAyMzYxNDUzMjQiPiIyNTYg4YOZ4YOR4YOQ4YOY4YOi4YOYIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjEg4YOb4YOR4YOQ4YOY4YOi4YOYIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNCDhg5vhg5Hhg5Dhg5jhg6Lhg5giPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyODAzMTk5MTAyNTg5MTI2OTM4Ij4iMTYg4YOb4YOR4YOQ4YOY4YOi4YOYIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjRLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMU0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4i4YOS4YOQ4YOb4YOd4YOg4YOX4YOj4YOa4YOYIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDYyMjQ2MDMzMzAzODU4Njc5MSI+IjY0IOGDmeGDkeGDkOGDmOGDouGDmCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIyMTIxMjU2MjUxNjk1ODIzMzAiPiIyNTYg4YOZ4YOR4YOQ4YOY4YOi4YOYIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTcwNDk0Njc2NjY5OTI0MjY1MyI+IjEg4YOb4YOR4YOQ4YOY4YOi4YOYIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9zdW1tYXJpZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI3MzQ2NTk1NDczNTg4NzY1MDE5Ij4iNjRLIC8g4YOf4YOj4YOg4YOcLiDhg5Hhg6Phg6Thg5Thg6Dhg5bhg5QiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyODIyMzA5NzQ3Njc1NzU4NjI4Ij4iMjU2Sy/hg5/hg6Phg6Dhg5wuIOGDkeGDo+GDpOGDlOGDoOGDluGDlCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiIxTSAvIOGDn+GDo+GDoOGDnC4g4YOR4YOj4YOk4YOU4YOg4YOW4YOUIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+IjRNIC8g4YOf4YOj4YOg4YOcLiDhg5Hhg6Phg6Thg5Thg6Dhg5bhg5QiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxOTc4NjI5MDUxMDg1MTExNTkyIj4iMTZNIC8g4YOf4YOj4YOg4YOcLiDhg5Hhg6Phg6Thg5Thg6Dhg5bhg5QiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4i4YOS4YOQ4YOb4YOd4YOg4YOX4YOj4YOa4YOYIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjk2OTQ1ODAyOTM0NDc1MDI2MiI+IjY0IOGDmeGDkeGDkOGDmOGDouGDmCAvIOGDn+GDo+GDoOGDnOGDkOGDmuGDmOGDoSDhg5Hhg6Phg6Thg5Thg6Dhg5giPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzQyMjg1MTE1NjY1Njk4MTY4Ij4iMjU2IOGDmeGDkeGDkOGDmOGDouGDmCAvIOGDn+GDo+GDoOGDnOGDkOGDmuGDmOGDoSDhg5Hhg6Phg6Thg5Thg6Dhg5giPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4iMSDhg5vhg5Hhg5Dhg5jhg6Lhg5ggLyDhg5/hg6Phg6Dhg5zhg5Dhg5rhg5jhg6Eg4YOR4YOj4YOk4YOU4YOg4YOYIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+IjQg4YOb4YOR4YOQ4YOY4YOi4YOYIC8g4YOf4YOj4YOg4YOc4YOQ4YOa4YOY4YOhIOGDkeGDo+GDpOGDlOGDoOGDmCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU0MzEzNTQ5NTY4NTY2NTUxMjAiPiIxNiDhg5vhg5Hhg5Dhg5jhg6Lhg5ggLyDhg5/hg6Phg6Dhg5zhg5Dhg5rhg5jhg6Eg4YOR4YOj4YOk4YOU4YOg4YOYIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+IuGDkOGDnOGDmOGDm+GDkOGDquGDmOGDmOGDoSDhg5Lhg5Dhg5vhg53hg6Dhg5fhg5Xhg5AiPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1rYS1yR0Uvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWthLXJHRS9zdHJpbmdzLnhtbAppbmRleCBlMmRmZDdlLi5kYTlkMjA0IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWthLXJHRS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWthLXJHRS9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0NywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiLhg5Dhg57hg5Thg5Hhg5gg4YOp4YOQ4YOY4YOs4YOU4YOgLiDhg5Lhg5Dhg6Dhg5Qg4YOb4YOU4YOu4YOhLi3hg5bhg5Qg4YOQ4YOm4YOsLiDhg6Thg5Dhg5jhg5rhg5jhg6Eg4YOb4YOc4YOY4YOo4YOV4YOcLiDhg5vhg5jhg6Phg67hg5Thg5MuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4i4YOW4YOd4YOb4YOQ4YOq4YOV4YOa4YOQ4YOT4YOYIOGDkOGDpeGDouGDmOGDleGDneGDkeGDlOGDkeGDmOGDoSDhg5jhg6vhg6Phg5rhg5Thg5Hhg5AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllc19zdW1tYXJ5IiBtc2dpZD0iNDUwODIxNzQ3Njk5NzE4MjIxNiI+IuGDm+GDkOGDnOGDmOGDpOGDlOGDoeGDouGDmOGDoSDhg5vhg5zhg5jhg6jhg5Xhg5zhg5Thg5rhg53hg5Hhg5Thg5Hhg5jhg6Eg4YOb4YOY4YOj4YOu4YOU4YOT4YOQ4YOV4YOQ4YOTLCDhg6fhg5Xhg5Thg5rhg5Ag4YOQ4YOl4YOi4YOY4YOV4YOd4YOR4YOQ4YOhIOGDm+GDoOGDkOGDleGDkOGDmuGDmCDhg6Thg5Dhg5zhg6/hg6Dhg5jhg6Eg4YOg4YOU4YOf4YOY4YOb4YOY4YOh4YOX4YOV4YOY4YOhIOGDluGDneGDm+GDkOGDquGDleGDmuGDkOGDk+GDkOGDkyDhg5Dhg6Xhg6rhg5Thg5Xhg6EuIjwvc3RyaW5nPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0ICgxNDYxODkzMzUxMjc4OTQwNDE2KSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkgKDIyNTI1NjM0OTc0ODU0MzY1MzQpIC0tPgorICAgIDxza2lwIC8+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4i4YOT4YOU4YOh4YOZ4YOi4YOd4YOe4YOY4YOhIOGDoeGDkOGDoOGDlOGDluGDlOGDoOGDleGDnSDhg5Dhg6Hhg5rhg5jhg6Eg4YOe4YOQ4YOg4YOd4YOa4YOYIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiLhg5Phg5Thg6Hhg5nhg6Lhg53hg57hg5jhg6Eg4YOh4YOg4YOj4YOa4YOYIOGDoeGDkOGDoOGDlOGDluGDlOGDoOGDleGDnSDhg5Dhg6Hhg5rhg5Thg5Hhg5gg4YOQ4YOb4YOf4YOQ4YOb4YOQ4YOTIOGDk+GDkOGDquGDo+GDmuGDmCDhg5Dhg6Ag4YOQ4YOg4YOY4YOhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfY2hhbmdlIiBtc2dpZD0iMjczMTE2MzQyNTA4MTE3MjYzOCI+IuGDqOGDlOGDlOGDruGDlOGDlyDhg5Phg5Thg6Hhg5nhg6Lhg53hg57hg5jhg6Eg4YOh4YOg4YOj4YOa4YOYIOGDoeGDkOGDoOGDlOGDluGDlOGDoOGDleGDnSDhg5Dhg6Hhg5rhg5Thg5Hhg5jhg6Eg4YOe4YOQ4YOg4YOd4YOa4YOY4YOhIOGDqOGDlOGDoeGDkOGDquGDleGDmuGDlOGDmuGDkOGDkyDhg5Dhg5wg4YOs4YOQ4YOh4YOQ4YOo4YOa4YOU4YOa4YOQ4YOTIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1ray1yS1ovYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMta2stcktaL2FycmF5cy54bWwKaW5kZXggYjk5NGViNy4uNDNhZmIyZiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1ray1yS1ovYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWtrLXJLWi9hcnJheXMueG1sCkBAIC01OSwyMyArNTksMjYgQEAKICAgICA8aXRlbSBtc2dpZD0iNDUwNzU2MzEyMzEyMTI3MzIiPiLTmNGA0pvQsNGI0LDQvSBIRENQICjQttC+0pPQsNGA0Ysg0LrQtdKjINC20L7Qu9Cw0pvRgtGLINGB0LDQvdC00YvSmyDQvNCw0LfQvNKx0L0g0pvQvtGA0pPQsNGD0YjRiykg0YLQtdC60YHQtdGA0YPQu9C10YDRltC9INKb0L7Qu9C00LDQvdGL0qPRi9C3IjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjQg0JrQkSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NiDQmtCRIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+IjEg0JzQkSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0INCc0JEiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTYg0JzQkSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiLTqNGI0ZbRgNGD0LvRliI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NCDQmtCRIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU2INCa0JEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4iMSDQnNCRIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNCDQnNCRIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2INCc0JEiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI1MjQ3OTkzOTU3NzA2MTAxNTQiPiI2NCDQmtCRIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1NiDQmtCRIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODA4NTg2NzIwOTIwMjE1MzQwMyI+IjEg0JzQkSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwODk0NzA3MjA0NTEwNjgzNjQiPiLTqNGI0ZbRgNGD0LvRliI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NCDQmtCRIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+IjI1NiDQmtCRIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTcwNDk0Njc2NjY5OTI0MjY1MyI+IjEg0JzQkSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+ItOY0YAg0LbRg9GA0L3QsNC7INCx0YPRhNC10YDRltC90LUgNjQg0JrQkSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiLTmNGAINC20YPRgNC90LDQuyDQsdGD0YTQtdGA0ZbQvdC1IDI1NiDQmtCRIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjY5OTMwNjE5ODM1NzQ5NjczMSI+ItOY0YAg0LbRg9GA0L3QsNC7INCx0YPRhNC10YDRltC90LUgMSDQnNCRIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+ItOY0YAg0LbRg9GA0L3QsNC7INCx0YPRhNC10YDRltC90LUgNCDQnNCRIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+ItOY0YAg0LbRg9GA0L3QsNC7INCx0YPRhNC10YDRltC90LUgMTYg0JzQkSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY5MjEwNDg4Mjk3OTExNzkzMzEiPiLTqNGI0ZbRgNGD0LvRliI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI5Njk0NTgwMjkzNDQ3NTAyNjIiPiLTmNGAINC20YPRgNC90LDQuyDQsdGD0YTQtdGA0ZbQvdC1IDY0INCa0JEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzQyMjg1MTE1NjY1Njk4MTY4Ij4i05jRgCDQttGD0YDQvdCw0Lsg0LHRg9GE0LXRgNGW0L3QtSAyNTYg0JrQkSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiLTmNGAINC20YPRgNC90LDQuyDQsdGD0YTQtdGA0ZbQvdC1IDEg0JzQkSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM2MDYwNDc3ODA3OTI4OTQxNTEiPiLTmNGAINC20YPRgNC90LDQuyDQsdGD0YTQtdGA0ZbQvdC1IDQg0JzQkSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU0MzEzNTQ5NTY4NTY2NTUxMjAiPiLTmNGAINC20YPRgNC90LDQuyDQsdGD0YTQtdGA0ZbQvdC1IDE2INCc0JEiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4iQdC90LjQvNCw0YbQuNGPINOp0YjRltGA0ZbQu9Cz0LXQvSI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWtrLXJLWi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMta2stcktaL3N0cmluZ3MueG1sCmluZGV4IDJkYmMzNzUuLjU0OTcxMWMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMta2stcktaL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMta2stcktaL3N0cmluZ3MueG1sCkBAIC0yNDcsNiArMjQ3LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+ItCc0LDQvdC40YTQtdGB0YIg0LzTmdC90LTQtdGA0ZbQvdC1INKb0LDRgNCw0LzQsNGB0YLQsNC9INC60LXQtyDQutC10LvQs9C10L0g0pvQvtC70LTQsNC90LHQsNC90Ysg0YHRi9GA0YLSm9GLINC20LDQtNKb0LAg0LbQsNC30YPSk9CwINC20LDRgNCw0LzQtNGLINC10YLQtdC00ZYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiLTmNGA0LXQutC10YLRgtC10YDQtNGWINOp0LvRiNC10LzRltC9INOp0LfQs9C10YDRgtGD0LPQtSDQsdC+0LvQsNGC0YvQvSDQtdGC0YPQs9C1INC805nQttCx0q/RgNC70LXRgyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4i0JzQsNC90LjRhNC10YHRgiDQvNOZ0L3QtNC10YDRltC90LUg0pvQsNGA0LDQvNCw0YHRgtCw0L0g0LHQsNGA0LvRi9KbINOZ0YDQtdC60LXRgtGC0LXRgNC00ZYg0LHRltGA0L3QtdGI0LUg0YLQtdGA0LXQt9C1INKv0YjRltC9INOp0LvRiNC10LzRltC9INOp0LfQs9C10YDRgtGD0LPQtSDQsdC+0LvQsNGC0YvQvSDQtdGC0LXQtNGWLiI8L3N0cmluZz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBlbmFibGVfZnJlZWZvcm1fc3VwcG9ydCAoMTQ2MTg5MzM1MTI3ODk0MDQxNikgLS0+CisgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5ICgyMjUyNTYzNDk3NDg1NDM2NTM0KSAtLT4KKyAgICA8c2tpcCAvPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+ItCa0L7QvNC/0YzRjtGC0LXRgCDSr9GB0YLQtdC70ZbQvdGW0qMg0YHQsNKb0YLRi9KbINC606nRiNGW0YDQvNC10YHRliI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4i0JbSsdC80YvRgSDSr9GB0YLQtdC70ZbQvdGW0qMg0YHQsNKb0YLRi9KbINC606nRiNGW0YDQvNC10LvQtdGA0ZYg0pvQsNC30ZbRgCDSm9C+0YDSk9Cw0LvQvNCw0pPQsNC9Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfY2hhbmdlIiBtc2dpZD0iMjczMTE2MzQyNTA4MTE3MjYzOCI+ItCW0rHQvNGL0YEg0q/RgdGC0LXQu9GW0L3RltKjINGC0L7Qu9GL0psg0YHQsNKb0YLRi9KbINC606nRiNGW0YDQvNC10YHRltC90ZbSoyDQutGW0LvRgtGB06nQt9GW0L0g06nQt9Cz0LXRgNGC0YMg0L3QtdC80LXRgdC1INC20L7RjiDSr9GI0ZbQvSDRgtKv0YDRgtGW0qPRltC3Ijwvc3RyaW5nPgpAQCAtMjczLDEwICsyNzcsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9ubyIgbXNnaWQ9IjkxNzE3NzIyNDQ3NzU4Mzg5MDEiPiLTqNGI0ZbRgNGW0LvQs9C10L0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX3llcyIgbXNnaWQ9IjIyMTgxNTcyNjU5OTc2MzM0MzIiPiLTmNGA0pvQsNGI0LDQvSDSm9C+0YHRg9C70YsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX2F1dG8iIG1zZ2lkPSI3NTA4MzQ4MTc1ODA0MzA0MzI3Ij4iQdCy0YLQvtC80LDRgtGC0YsiPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Igc2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfdGl0bGUgKDQ2Mjg1OTI5Nzk3NTE5MTg5MDcpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Igc2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfZGlhbG9nX3RpdGxlICg0MzcwNTUxMzc4NzIwMDA0ODcyKSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfdGl0bGUiIG1zZ2lkPSI0NjI4NTkyOTc5NzUxOTE4OTA3Ij4iV2ViVmlldyDQtdC90LTRltGA0YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl9kaWFsb2dfdGl0bGUiIG1zZ2lkPSI0MzcwNTUxMzc4NzIwMDA0ODcyIj4iV2ViVmlldyDQtdC90LTRltGA0YPRltC9INC+0YDQvdCw0YLRgyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uIiBtc2dpZD0iMzA2MDE1NjczMDY1MTA2MTIyMyI+ItCk0LDQudC70LTRiyDRiNC40YTRgNC70LDRg9KT0LAg0YLSr9GA0LvQtdC90LTRltGA0YMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbl9lbmFibGVkIiBtc2dpZD0iMjg2MTI1ODY3MTE1MTQyODM0NiI+ItCi0q/RgNC70LXQvdC00ZbRgNGDLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZG9uZSIgbXNnaWQ9Ijc4NTk3NjYzNTgwMDA1MjM5NTMiPiLQpNCw0LnQuyDRiNC40YTRgNC70LDQvdGL0L8g0pvQvtC50YvQu9KT0LDQvSI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMta20tcktIL2FycmF5cy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWttLXJLSC9hcnJheXMueG1sCmluZGV4IDUwYzEyOTkuLjYzOTIxYmMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMta20tcktIL2FycmF5cy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1rbS1yS0gvYXJyYXlzLnhtbApAQCAtNTksMjMgKzU5LDI2IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjQ1MDc1NjMxMjMxMjEyNzMyIj4i4Z6U4Z+S4Z6a4Z6+4oCL4Z6A4Z624Z6a4oCL4Z6W4Z634Z6T4Z634Z6P4Z+S4Z6ZIEhEQ1Ag4Z6H4Z624oCL4Z6T4Z634Z6F4Z+S4Z6FIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjRLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTA1NjExNzU0NTA4OTg4NDc2Ij4iMjU2SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjYzNjEyODY5MjQyNjg3MTYzOTciPiIxTSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0TSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMwMjU0MzEyMTEwMTM0MjQwOTciPiIxNk0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4NjY1MjA2MTk5MjA5Njk4NTAxIj4i4Z6U4Z634Z6RIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTU5MzI4OTM3NjUwMjMxMjkyMyI+IjY0SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IjI1NksiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4iMU0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxODA4ODM3NzQ1MDk0NzY1NDEiPiI0TSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI4MDMxOTkxMDI1ODkxMjY5MzgiPiIxNk0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI1MjQ3OTkzOTU3NzA2MTAxNTQiPiI2NEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzNTM0NzgyNzExMDQ1MjYyMzQ0Ij4iMjU2SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjgwODU4NjcyMDkyMDIxNTM0MDMiPiIxTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwODk0NzA3MjA0NTEwNjgzNjQiPiLhnpThnrfhnpEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0NjIyNDYwMzMzMDM4NTg2NzkxIj4iNjRLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+IjI1NksiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNzA0OTQ2NzY2Njk5MjQyNjUzIj4iMU0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiI2NEsgcGVyIGxvZyBidWZmZXIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyODIyMzA5NzQ3Njc1NzU4NjI4Ij4iMjU2SyBwZXIgbG9nIGJ1ZmZlciI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiIxTSBwZXIgbG9nIGJ1ZmZlciI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjU3NDg1Mjg2NDM5Mzc1MDAzNDkiPiI0TSBwZXIgbG9nIGJ1ZmZlciI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiIxNk0gcGVyIGxvZyBidWZmZXIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4i4Z6U4Z634Z6RIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjk2OTQ1ODAyOTM0NDc1MDI2MiI+IjY0SyBwZXIgbG9nIGJ1ZmZlciI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzNDIyODUxMTU2NjU2OTgxNjgiPiIyNTZLIHBlciBsb2cgYnVmZmVyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTMxNDIzNDI5OTU1MjI1NDYyMSI+IjFNIHBlciBsb2cgYnVmZmVyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+IjRNIHBlciBsb2cgYnVmZmVyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTQzMTM1NDk1Njg1NjY1NTEyMCI+IjE2TSBwZXIgbG9nIGJ1ZmZlciI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9IndpbmRvd19hbmltYXRpb25fc2NhbGVfZW50cmllcyI+CiAgICAgPGl0ZW0gbXNnaWQ9IjgxMzQxNTY1OTkzNzA4MjQwODEiPiLhnpThnrfhnpHigIvhnoXhnpvhnpPhnrYiPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1rbS1yS0gvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWttLXJLSC9zdHJpbmdzLnhtbAppbmRleCAwMTg2YTY4Li5hZWQ0MzY1IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWttLXJLSC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWttLXJLSC9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0NywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiLhnpLhn5Lhnpzhnr7hnrLhn5LhnpnhnoDhnpjhn5LhnpjhnpzhnrfhnpLhnrjhnpHhnrbhn4bhnoThnqHhnrbhnpnhnpjhnrbhnpPhnp/hnrfhnpHhn5LhnpLhnrfhnp/hnprhnp/hn4HhnprhnpHhn4XhnoDhnrbhnpPhn4vhnqfhnpThnoDhnprhno7hn43hnpXhn5LhnpHhnrvhnoDhnoHhnrbhnoThnoDhn5Lhnprhn4Ug4Z6K4Z+E4Z6Z4Z6Y4Z634Z6T4Z6C4Z634Z6P4Z6W4Z644Z6P4Z6Y4Z+S4Z6b4Z+D4Z6H4Z624Z6A4Z+L4Z6b4Z624Z6A4Z+LIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4i4Z6U4Z6E4Z+S4Z6B4Z+G4Z6y4Z+S4Z6Z4Z6f4Z6A4Z6Y4Z+S4Z6Y4Z6X4Z624Z6W4Z6i4Z624Z6F4Z6U4Z+S4Z6P4Z684Z6a4Z6R4Z+G4Z6g4Z+G4Z6U4Z624Z6TIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXNfc3VtbWFyeSIgbXNnaWQ9IjQ1MDgyMTc0NzY5OTcxODIyMTYiPiLhnoDhn4bhno7hno/hn4vhnrLhn5Lhnpnhnp/hnoDhnpjhn5LhnpjhnpfhnrbhnpbhnpHhnrbhn4bhnoThnqLhnp/hn4vhnqLhnrbhnoXhnpThn5Lhno/hnrzhnprhnpHhn4bhnqDhn4bhnpThnrbhnpPhnp/hnpjhn5LhnprhnrbhnpThn4vhnpbhnqDhnrvhnpXhn5LhnpHhnrbhn4bhnoThnpzhnrfhnpPhnorhnrwg4Z6K4Z+E4Z6Z4Z6Y4Z634Z6T4Z6C4Z634Z6P4Z6W4Z644Z6P4Z6Y4Z+S4Z6b4Z+D4Z6Y4Z+B4Z6T4Z644Z6g4Z+S4Z6c4Z+B4Z6f4Z6h4Z6+4Z6Z4Z+UIjwvc3RyaW5nPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0ICgxNDYxODkzMzUxMjc4OTQwNDE2KSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkgKDIyNTI1NjM0OTc0ODU0MzY1MzQpIC0tPgorICAgIDxza2lwIC8+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4i4Z6W4Z624Z6A4Z+S4Z6Z4oCL4Z6f4Z6Y4Z+S4Z6E4Z624Z6P4Z+L4oCL4Z6U4Z6Y4Z+S4Z6a4Z674Z6E4oCL4Z6R4Z674Z6A4oCL4Z6b4Z6+4oCL4Z6V4Z+S4Z6R4Z+D4Z6P4Z67Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiLhnoDhnrbhnprigIvhnpThnpjhn5LhnprhnrvhnoTigIvhnpHhnrvhnoDigIvhnpbhn4Hhnonhnpvhn4HhnonigIvhnpvhnr7igIvhnpXhn5LhnpHhn4Phno/hnrvigIvhnpThnoXhn5LhnoXhnrvhnpThn5LhnpThnpPhn5LhnpPigIvhnpjhnrfhnpPigIvhno/hn5LhnprhnrzhnpzigIvhnpThnrbhnpPigIvhnoDhnrbhnprhnpbhnrbhnprigIvhnpHhn4Hhn5QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4i4Z6U4Z+J4Z+HIOGeiuGevuGemOGfkuGelOGeuOKAi+GelOGfkuGeiuGevOGemiDhnqzigIvhnpvhnrvhnpTigIvhnpbhnrbhnoDhn5LhnpnigIvhnp/hnpjhn5LhnoThnrbhno/hn4vigIvhnp/hnpjhn5LhnprhnrbhnpThn4vigIvhnoDhnrbhnprigIvhnpThnpjhn5LhnprhnrvhnoThnpHhnrvhnoDigIvhnpbhn4Hhnonhnpvhn4HhnonigIvhnpvhnr7igIvhnpXhn5LhnpHhn4Phno/hnrsiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWtuLXJJTi9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1rbi1ySU4vYXJyYXlzLnhtbAppbmRleCBmZTA0ZDI4Li5lMWU2OWY3IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWtuLXJJTi9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMta24tcklOL2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+IkhEQ1Ag4LKq4LKw4LK/4LK24LOA4LKy4LKo4LOG4LKv4LKo4LON4LKo4LOBIOCyr+CyvuCyteCyvuCyl+CysuCzgiDgsqzgsrPgsrjgs4EiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMxMDA1MzQ4NzQ1MjkyNDAyOTEiPiI2NEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTZLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+IjFNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjQwNTIwMzIzOTU2MDY5NTI2NiI+IjRNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2TSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiLgsobgsqvgs40iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4iNjRLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU2SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI0MjM1Mjg2NzUyOTQzMzM4MzEiPiIxTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjRNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2TSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfbG93cmFtX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUyNDc5OTM5NTc3MDYxMDE1NCI+IjY0SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiIyNTZLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODA4NTg2NzIwOTIwMjE1MzQwMyI+IjFNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjA4OTQ3MDcyMDQ1MTA2ODM2NCI+IuCyhuCyq+CzjSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxTSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+IuCyquCzjeCysOCypOCyvyDgsrLgsr7gspfgs40g4LKs4LKr4LKw4LON4oCM4LKX4LOGIDY0SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiLgsqrgs43gsrDgsqTgsr8g4LKy4LK+4LKX4LONIOCyrOCyq+CysOCzjeKAjOCyl+CzhiAyNTZLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjY5OTMwNjE5ODM1NzQ5NjczMSI+IuCyquCzjeCysOCypOCyvyDgsrLgsr7gspfgs40g4LKs4LKr4LKw4LON4oCM4LKX4LOGIDFNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+IuCyquCzjeCysOCypOCyvyDgsrLgsr7gspfgs40g4LKs4LKr4LKw4LON4oCM4LKX4LOGIDRNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+IuCyquCzjeCysOCypOCyvyDgsrLgsr7gspfgs40g4LKs4LKr4LKw4LON4oCM4LKX4LOGIDE2TSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY5MjEwNDg4Mjk3OTExNzkzMzEiPiLgsobgsqvgs40iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4i4LKq4LON4LKw4LKk4LK/IOCysuCyvuCyl+CzjSDgsqzgsqvgsrDgs43igIzgspfgs4YgNjRLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+IuCyquCzjeCysOCypOCyvyDgsrLgsr7gspfgs40g4LKs4LKr4LKw4LON4oCM4LKX4LOGIDI1NksiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4i4LKq4LON4LKw4LKk4LK/IOCysuCyvuCyl+CzjSDgsqzgsqvgsrDgs43igIzgspfgs4YgMU0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4i4LKq4LON4LKw4LKk4LK/IOCysuCyvuCyl+CzjSDgsqzgsqvgsrDgs43igIzgspfgs4YgNE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4i4LKq4LON4LKw4LKk4LK/IOCysuCyvuCyl+CzjSDgsqzgsqvgsrDgs43igIzgspfgs4YgMTZNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+IuCyhuCyqOCyv+CyruCzh+CytuCyqOCzjSDgsobgsqvgs40iPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1rbi1ySU4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWtuLXJJTi9zdHJpbmdzLnhtbAppbmRleCA1NmY0MDA2Li41MGU1OTU1IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWtuLXJJTi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWtuLXJJTi9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0Nyw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+IuCyruCzjeCyr+CyvuCyqOCyv+Cyq+CzhuCyuOCzjeCyn+CzjSDgsq7gs4zgsrLgs43gsq/gspfgsrPgsqjgs43gsqjgs4Eg4LKq4LKw4LK/4LKX4LKj4LK/4LK44LKm4LOHLCDgsq/gsr7gsrXgs4Hgsqbgs4cg4LKF4LKq4LON4LKy4LK/4LKV4LOH4LK24LKo4LON4oCM4LKX4LOGIOCyrOCyvuCyueCzjeCyryDgsrjgsoLgspfgs43gsrDgsrngsqPgs4bgspfgs4Yg4LKs4LKw4LOG4LKv4LKy4LOBIOCyheCysOCzjeCyueCyl+CziuCys+Cyv+CyuOCzgeCypOCzjeCypOCypuCzhiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzIiBtc2dpZD0iODYxNTc2NDM3ODE0NzgyNDk4NSI+IuCymuCyn+CzgeCyteCyn+Cyv+CyleCzhuCyl+Cys+CyqOCzjeCyqOCzgSDgsq7gsrDgs4Hgspfgsr7gsqTgs43gsrDgspfgs4rgsrPgsr/gsrjgs4HgsrXgsoLgsqTgs4Yg4LKS4LKk4LON4LKk4LK+4LKvIOCyruCyvuCyoeCyvyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4i4LKu4LON4LKv4LK+4LKo4LK/4LKr4LOG4LK44LON4LKf4LONIOCyruCzjOCysuCzjeCyr+Cyl+Cys+CyqOCzjeCyqOCzgSDgsqrgsrDgsr/gspfgsqPgsr/gsrjgsqbgs4csIOCyrOCyueCzgS3gsrXgsr/gsoLgsqHgs4rgspfgs4Yg4LKO4LKy4LON4LKy4LK+IOCymuCyn+CzgeCyteCyn+Cyv+CyleCzhuCyl+Cys+CyqOCzjeCyqOCzgSDgsq7gsrDgs4Hgspfgsr7gsqTgs43gsrDgspfgs4rgsrPgsr/gsrjgs4HgsrXgsoLgsqTgs4Yg4LKu4LK+4LKh4LOB4LKk4LON4LKk4LKm4LOGLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0IiBtc2dpZD0iMTQ2MTg5MzM1MTI3ODk0MDQxNiI+IuCyruCzgeCyleCzjeCypOCyuOCzjeCyteCysOCzguCyquCypiDgsrXgsr/gsoLgsqHgs4rgspfgsrPgsqjgs43gsqjgs4Eg4LK44LKV4LON4LKw4LK/4LKv4LKX4LOK4LKz4LK/4LK44LK/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnRfc3VtbWFyeSIgbXNnaWQ9IjIyNTI1NjM0OTc0ODU0MzY1MzQiPiLgsqrgs43gsrDgsr7gsq/gs4vgspfgsr/gspUg4LKu4LOB4LKV4LON4LKk4LK44LON4LK14LKw4LOC4LKq4LKmIOCyteCyv+CyguCyoeCziuCyl+Cys+Cyv+Cyl+CzhiDgsqzgs4bgsoLgsqzgsrLgsrXgsqjgs43gsqjgs4Eg4LK44LKV4LON4LKw4LK/4LKv4LKX4LOK4LKz4LK/4LK44LOB4LKk4LON4LKk4LKm4LOGLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF90aXRsZSIgbXNnaWQ9IjM4NjA0NzE2NTQ0Mzk0MTg4MjIiPiLgsqHgs4bgsrjgs43gspXgs43igIzgsp/gsr7gsqrgs40g4LKs4LON4LKv4LK+4LKV4LKq4LONIOCyquCyvuCyuOCzjeKAjOCyteCysOCzjeCyoeCzjSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4i4LKh4LOG4LK44LON4LKV4LON4oCM4LKf4LK+4LKq4LON4oCM4oCM4LKoIOCyquCzguCysOCzjeCyoyDgsqzgs43gsq/gsr7gspXgsqrgs43igIzigIzgspfgsrPgsqjgs43gsqjgs4Eg4LKq4LON4LKw4LK44LON4LKk4LOB4LKkIOCysOCyleCzjeCyt+Cyv+CyuOCysuCyvuCyl+Cyv+CysuCzjeCysiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiLgsqHgs4bgsrjgs43gspXgs43igIzgsp/gsr7gsqrgs43igIzgsqgg4LKq4LOC4LKw4LON4LKjIOCyrOCzjeCyr+CyvuCyleCyquCzjeKAjOCyl+Cys+Cyv+Cyl+CzhiDgsqrgsr7gsrjgs43igIzgsrXgsrDgs43gsqHgs43igIwg4LKF4LKo4LON4LKo4LOBIOCyrOCypuCysuCyvuCyr+Cyv+CyuOCysuCzgSDgsoXgsqXgsrXgsr4g4LKk4LOG4LKX4LOG4LKm4LOB4LK54LK+4LKV4LKy4LOBIOCyuOCzjeCyquCysOCzjeCytuCyv+CyuOCyvyI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMta28vYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMta28vYXJyYXlzLnhtbAppbmRleCBhOGQ1NDhmZi4uM2U4ODY3ZSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1rby9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMta28vYXJyYXlzLnhtbApAQCAtNTksMjMgKzU5LDI2IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjQ1MDc1NjMxMjMxMjEyNzMyIj4i7ZWt7IOBIEhEQ1Ag7ZmV7J24IOyCrOyaqSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iMzEwMDUzNDg3NDUyOTI0MDI5MSI+IjY0SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMU0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2NDA1MjAzMjM5NTYwNjk1MjY2Ij4iNE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTZNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+IuyCrOyaqSDslYjtlagiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4iNjRLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU2SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI0MjM1Mjg2NzUyOTQzMzM4MzEiPiIxTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjRNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2TSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfbG93cmFtX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUyNDc5OTM5NTc3MDYxMDE1NCI+IjY0SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiIyNTZLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODA4NTg2NzIwOTIwMjE1MzQwMyI+IjFNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjA4OTQ3MDcyMDQ1MTA2ODM2NCI+IuyCrOyaqSDslYjtlagiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0NjIyNDYwMzMzMDM4NTg2NzkxIj4iNjRLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+IjI1NksiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNzA0OTQ2NzY2Njk5MjQyNjUzIj4iMU0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiLroZzqt7gg67KE7Y2864u5IDY0SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiLroZzqt7gg67KE7Y2864u5IDI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4i66Gc6re4IOuyhO2NvOuLuSAxTSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjU3NDg1Mjg2NDM5Mzc1MDAzNDkiPiLroZzqt7gg67KE7Y2864u5IDRNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+IuuhnOq3uCDrsoTtjbzri7kgMTZNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+IuyCrOyaqSDslYjtlagiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4i66Gc6re4IOuyhO2NvOuLuSA2NEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzQyMjg1MTE1NjY1Njk4MTY4Ij4i66Gc6re4IOuyhO2NvOuLuSAyNTZLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTMxNDIzNDI5OTU1MjI1NDYyMSI+IuuhnOq3uCDrsoTtjbzri7kgMU0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4i66Gc6re4IOuyhO2NvOuLuSA0TSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU0MzEzNTQ5NTY4NTY2NTUxMjAiPiLroZzqt7gg67KE7Y2864u5IDE2TSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9IndpbmRvd19hbmltYXRpb25fc2NhbGVfZW50cmllcyI+CiAgICAgPGl0ZW0gbXNnaWQ9IjgxMzQxNTY1OTkzNzA4MjQwODEiPiLslaDri4jrqZTsnbTshZgg7IKs7JqpIOyViO2VqCI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWtvL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1rby9zdHJpbmdzLnhtbAppbmRleCA2YWQzZWZkLi5lYTVkYzAwIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWtvL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMta28vc3RyaW5ncy54bWwKQEAgLTI0Nyw2ICsyNDcsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX2FsbG93X29uX2V4dGVybmFsX3N1bW1hcnkiIG1zZ2lkPSIzMTkxOTUyNTA1ODYwMzQzMjMzIj4i66ek64uI7Y6Y7Iqk7Yq4IOqwkuyXkCDqtIDqs4Tsl4bsnbQg7JWx7J2EIOyZuOu2gCDsoIDsnqXshozsl5Ag7J6R7ISxIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4i7Zmc64+Z7J2YIO2BrOq4sOqwgCDsobDsoJUg6rCA64ql7ZWY64+E66GdIOyEpOyglSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4i66qo65OgIO2ZnOuPmeydhCDrp6Tri4jtjpjsiqTtirgg6rCS7JeQIOq0gOqzhOyXhuydtCDrqYDti7Ag7JyI64+E7Jqw7Jqp7Jy866GcIO2BrOq4sCDsobDsoJUg6rCA64ql7ZWY64+E66GdIOyEpOyglSI8L3N0cmluZz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBlbmFibGVfZnJlZWZvcm1fc3VwcG9ydCAoMTQ2MTg5MzM1MTI3ODk0MDQxNikgLS0+CisgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5ICgyMjUyNTYzNDk3NDg1NDM2NTM0KSAtLT4KKyAgICA8c2tpcCAvPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+IuuNsOyKpO2BrO2GsSDrsLHsl4Ug67mE67CA67KI7Zi4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiLrjbDsiqTtgazthrEg7KCE7LK0IOuwseyXheyXkCDruYTrsIDrsojtmLjqsIAg7ISk7KCV65CY7Ja0IOyeiOyngCDslYrsnYwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4i642w7Iqk7YGs7YaxIOyghOyytCDrsLHsl4Xsl5Ag64yA7ZWcIOu5hOuwgOuyiO2YuOulvCDrs4Dqsr3tlZjqsbDrgpgg7IKt7KCc7ZWY66Ck66m0IO2EsOy5mO2VmOyEuOyalC4iPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWt5LXJLRy9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1reS1yS0cvYXJyYXlzLnhtbAppbmRleCA3ZWM1NjllLi4zNGM3MTNlIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWt5LXJLRy9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMta3ktcktHL2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+ItCQ0YAg0LTQsNC50YvQvCBIRENQINGC0LXQutGI0LXRgNKv0q8g0LrQvtC70LTQvtC90YPQu9GB0YPQvSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iMzEwMDUzNDg3NDUyOTI0MDI5MSI+IjY0IEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTZLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+IjEgTSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0IE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTYgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiLTqNGH0q/QuiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0ODc1NDUzNDAyMzYxNDUzMjQiPiIyNTZLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjFNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyODAzMTk5MTAyNTg5MTI2OTM4Ij4iMTZNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjRLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMU0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4i06jRh9Kv0LoiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0NjIyNDYwMzMzMDM4NTg2NzkxIj4iNjRLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+IjI1NksiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNzA0OTQ2NzY2Njk5MjQyNjUzIj4iMU0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiI2NCBLINC60LDRgtGC0L7QviDQsdGD0YTQtdGA0Lgg0q/Rh9Kv0L0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyODIyMzA5NzQ3Njc1NzU4NjI4Ij4iMjU2IEsg0LrQsNGC0YLQvtC+INCx0YPRhNC10YDQuCDSr9GH0q/QvSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiIxIE0g0LrQsNGC0YLQvtC+INCx0YPRhNC10YDQuCDSr9GH0q/QvSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjU3NDg1Mjg2NDM5Mzc1MDAzNDkiPiI0IE0g0LrQsNGC0YLQvtC+INCx0YPRhNC10YDQuCDSr9GH0q/QvSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiIxNiBNINC60LDRgtGC0L7QviDQsdGD0YTQtdGA0Lgg0q/Rh9Kv0L0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4i06jRh9Kv0LoiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4i0JHRg9GE0LXRgDogNjTQmtCRINCw0YjQv9Cw0YjRiyDQutC10YDQtdC6IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+ItCR0YPRhNC10YA6IDI1NtCa0JEg0LDRiNC/0LDRiNGLINC60LXRgNC10LoiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4i0JHRg9GE0LXRgDogMdCcINCw0YjQv9Cw0YjRiyDQutC10YDQtdC6IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+ItCR0YPRhNC10YA6IDTQnCDQsNGI0L/QsNGI0Ysg0LrQtdGA0LXQuiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU0MzEzNTQ5NTY4NTY2NTUxMjAiPiLQkdGD0YTQtdGAOiAxNtCcINCw0YjQv9Cw0YjRiyDQutC10YDQtdC6IjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+ItCQ0L3QuNC80LDRhtC40Y/QvdGLINOp0YfSr9GA0q/SryI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWt5LXJLRy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMta3ktcktHL3N0cmluZ3MueG1sCmluZGV4IGJmMzdhYzQuLjZhNDc0MDYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMta3ktcktHL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMta3ktcktHL3N0cmluZ3MueG1sCkBAIC0yNDcsNiArMjQ3LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+ItCc0LDQvdC40YTQtdGB0YIg0LzQsNCw0L3QuNC70LXRgNC40L3QtSDQutCw0YDQsNCx0LDRgdGC0LDQvSDQsdCw0YDQtNGL0Log0LrQvtC70LTQvtC90LzQvtC70L7RgNC00YMg0YLRi9GI0LrRiyDRgdCw0LrRgtCw0LPRi9GH0LrQsCDRgdCw0LrRgtC+0L7Qs9C+INGD0YDRg9C60YHQsNGCINCx0LXRgNC10YIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiLQkNGA0LDQutC10YLRgtC10YDQtNC40L0g06nQu9GH06nQvNKv0L0g06nQt9Cz06nRgNGC0q/Sr9C90q8g0LzQsNC20LHRg9GA0LvQvtC+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXNfc3VtbWFyeSIgbXNnaWQ9IjQ1MDgyMTc0NzY5OTcxODIyMTYiPiLQnNCw0L3QuNGE0LXRgdGCINC80LDQsNC90LjQu9C10YDQuNC90LUg0LrQsNGA0LDQsdCw0YHRgtCw0L0g0LHQsNGA0LTRi9C6INCw0YDQsNC60LXRgtGC0LXRgNC00Lgg0LzRg9C70YzRgtC4LdGC0LXRgNC10LfQtdCz0LUg06nQu9GH06nQvNKvINOp0LfQs9Op0YDRgtKv0LvQs9Kv0LTTqdC5INC60YvQu9Cw0YIuIjwvc3RyaW5nPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0ICgxNDYxODkzMzUxMjc4OTQwNDE2KSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkgKDIyNTI1NjM0OTc0ODU0MzY1MzQpIC0tPgorICAgIDxza2lwIC8+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4i0JrQvtC80L/Sr9GC0LXRgNC00LXQs9C4INCx0Y3QutCw0L/RgtGL0L0g0YHRi9GA0YHTqdC30q8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9ub25lIiBtc2dpZD0iNjk1MTA5NTQ4NTUzNzc2Nzk1NiI+ItCa0L7QvNC/0q/RgtC10YDQtNC10LPQuCDRgtC+0LvRg9C6INCx0Y3QutCw0L8g0YPRh9GD0YDQtNCwINC60L7RgNCz0L7Qu9Cz0L7QvSDRjdC80LXRgSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiLQotC40LnQuNC/LCDQutC+0LzQv9Kv0YLQtdGA0LTQtdCz0Lgg0YLQvtC70YPQuiDQsdGN0LrQsNC/0YLRi9C9INGB0YvRgNGB06nQt9Kv0L0g06nQt9Cz06nRgNGC0q/So9Kv0Lcg0LbQtSDQttC+0Log0LrRi9C70YvSo9GL0LciPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWxvLXJMQS9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1sby1yTEEvYXJyYXlzLnhtbAppbmRleCA2NDIyMTc0Li4zMTJlY2MwIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWxvLXJMQS9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbG8tckxBL2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+IuC7g+C6iuC7ieC6geC6suC6meC6geC6p+C6lOC6quC6reC6miBIRENQIOC6quC6sOC7gOC7neC6tSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iMzEwMDUzNDg3NDUyOTI0MDI5MSI+IjY0SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMU0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2NDA1MjAzMjM5NTYwNjk1MjY2Ij4iNE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTZNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+IuC6m+C6tOC6lCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0ODc1NDUzNDAyMzYxNDUzMjQiPiIyNTZLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjFNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyODAzMTk5MTAyNTg5MTI2OTM4Ij4iMTZNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjRLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMU0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4i4Lqb4Lq04LqUIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDYyMjQ2MDMzMzAzODU4Njc5MSI+IjY0SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIyMTIxMjU2MjUxNjk1ODIzMzAiPiIyNTZLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTcwNDk0Njc2NjY5OTI0MjY1MyI+IjFNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9zdW1tYXJpZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI3MzQ2NTk1NDczNTg4NzY1MDE5Ij4i4Lqa4Lqx4Lqa4oCL4LuA4Lqf4Lq1IDY0SyDigIvgupXgu43gu4jigIvguqXgurHguq3guoEiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyODIyMzA5NzQ3Njc1NzU4NjI4Ij4i4Lqa4Lqx4Lqa4oCL4LuA4Lqf4Lq1IDI1Nksg4oCL4LqV4LuN4LuI4oCL4Lql4Lqx4Lqt4LqBIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjY5OTMwNjE5ODM1NzQ5NjczMSI+IuC6muC6seC6muKAi+C7gOC6n+C6tSAxTSDigIvgupXgu43gu4jigIvguqXgurHguq3guoEiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1NzQ4NTI4NjQzOTM3NTAwMzQ5Ij4i4Lqa4Lqx4Lqa4oCL4LuA4Lqf4Lq1IDRNIOKAi+C6leC7jeC7iOKAi+C6peC6seC6reC6gSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiLguprgurHguprigIvgu4Dgup/gurUgMTZNIOKAi+C6leC7jeC7iOKAi+C6peC6seC6reC6gSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY5MjEwNDg4Mjk3OTExNzkzMzEiPiLgupvgurTgupQiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4i4Lqa4Lqx4Lqa4oCL4LuA4Lqf4Lq1IDY0SyDgupXgu43gu4jigIvguprgurHgupngupfgurbguoEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzQyMjg1MTE1NjY1Njk4MTY4Ij4i4Lqa4Lqx4Lqa4oCL4LuA4Lqf4Lq1IDI1Nksg4oCL4LqV4LuN4LuI4oCL4Lqa4Lqx4LqZ4LqX4Lq24LqBIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTMxNDIzNDI5OTU1MjI1NDYyMSI+IuC6muC6seC6muKAi+C7gOC6n+C6tSAxTSDigIvgupXgu43gu4jigIvguprgurHgupngupfgurbguoEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4i4Lqa4Lqx4Lqa4oCL4LuA4Lqf4Lq1IDRNIOKAi+C6leC7jeC7iOKAi+C6muC6seC6meC6l+C6tuC6gSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU0MzEzNTQ5NTY4NTY2NTUxMjAiPiLguprgurHguprigIvgu4Dgup/gurUgMTZNIOKAi+C6leC7jeC7iOKAi+C6muC6seC6meC6l+C6tuC6gSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9IndpbmRvd19hbmltYXRpb25fc2NhbGVfZW50cmllcyI+CiAgICAgPGl0ZW0gbXNnaWQ9IjgxMzQxNTY1OTkzNzA4MjQwODEiPiLgupvgurTgupTguq3gurDgupngurTgu4DguqHguorgurHgupkiPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1sby1yTEEvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWxvLXJMQS9zdHJpbmdzLnhtbAppbmRleCA5ZTZhNGI3Li41MzhhMzhjIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWxvLXJMQS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWxvLXJMQS9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0NywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiLgu4Dguq7gurHgupTigIvgu4Pguqvgu4ngupfgurjguoHgu4Hguq3gurHguprigIvguqHgurXigIvguqrgurTgupTigIvgu4TgupTgu4nguq7gurHguprguoHgurLgupnguoLgur3gupnigIvgu4Pguqrgu4jigIvguprgu4jguq3gupnigIvguojgurHgupTigIvgu4DguoHgurHguprigIvgup7gurLguo3gupnguq3guoEsIOC7guC6lOC6jeKAi+C6muC7jeC7iOKAi+C6hOC6s+KAi+C6meC6tuC6h+KAi+C7gOC6luC6tOC6h+KAi+C6hOC7iOC6suKAi+C6l+C6teC7iOKAi+C6iOC6sOKAi+C7geC6iOC7ieC6hyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzIiBtc2dpZD0iODYxNTc2NDM3ODE0NzgyNDk4NSI+IuC6muC6seC6h+KAi+C6hOC6seC6h+KAi+C7g+C6q+C7ieKAi+C6geC6tOC6lOKAi+C6iOC6sOKAi+C6geC6s+KAi+C6m+C7iOC6veC6meKAi+C6guC6sOKAi+C7nOC6suC6lOKAi+C7hOC6lOC7iSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4i4LuA4Lqu4Lqx4LqU4oCL4LuD4Lqr4LuJ4oCL4LqX4Lq44LqB4oCL4LqB4Lq04LqU4oCL4LqI4Lqw4oCL4LqB4Lqz4oCL4Lqb4LuI4Lq94LqZ4oCL4LqC4Lqw4oCL4Luc4Lqy4LqU4oCL4LuE4LqU4LuJ4oCL4Lqq4Lqz4oCL4Lql4Lqx4Lqa4oCL4Lqr4Lq84Lqy4LqN4oCL4Luc4LuJ4Lqy4oCL4LqV4LuI4Lqy4LqHLCDgu4LgupTguo3igIvguprgu43gu4jigIvguoTgurPigIvgupngurbguofigIvgu4DgupbgurTguofigIvguoTgu4jgurLigIvgupfgurXgu4jigIvguojgurDigIvgu4Hguojgu4nguocuIjwvc3RyaW5nPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0ICgxNDYxODkzMzUxMjc4OTQwNDE2KSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkgKDIyNTI1NjM0OTc0ODU0MzY1MzQpIC0tPgorICAgIDxza2lwIC8+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4i4Lql4Lqw4Lqr4Lqx4LqU4Lqc4LuI4Lqy4LqZ4LqB4Lqy4LqZ4Lqq4Lqz4Lqu4Lqt4LqH4LqC4LuN4LuJ4Lqh4Lq54LqZ4LuA4LqU4Lqx4LqB4Lqq4Lqw4LqX4Lqx4Lqt4LqaIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiLguoHgurLgupnigIvguqrgurPguq7guq3guofigIvguoLgu43gu4nguqHgurngupnigIvgu4DgupXgurHguqHguq7gurnguprgu4HguprguprigIvgu4PgupnigIvgu4DgupTgurHguoHguqrgurDgupfgurHguq3guprigIvguo3gurHguofigIvguprgu43gu4jigIvgu4TgupTgu4nigIvguq7gurHguprigIvguoHgurLgupnigIvgupvgu4nguq3guofguoHgurHgupnigIvgu4PgupnigIvgu4DguqfguqXgurLigIvgupngurXgu4kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4i4LuB4LqV4Lqw4LuA4Lqe4Lq34LuI4Lqt4Lqb4LuI4Lq94LqZIOC6q+C6vOC6t+C6peC6tuC6muC6peC6sOC6q+C6seC6lOC6guC6reC6h+C6geC6suC6meC6quC6s+C6ruC6reC6h+C6guC7jeC7ieC6oeC6ueC6meC7gOC6leC6seC6oeC6ruC6ueC6muC7geC6muC6muC7g+C6meC7gOC6lOC6seC6geC6quC6sOC6l+C6seC6reC6miI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbHQvYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbHQvYXJyYXlzLnhtbAppbmRleCAwZDIwYThhLi43NmFlM2ZiIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWx0L2FycmF5cy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1sdC9hcnJheXMueG1sCkBAIC01OSwyMyArNTksMjYgQEAKICAgICA8aXRlbSBtc2dpZD0iNDUwNzU2MzEyMzEyMTI3MzIiPiJWaXNhZGEgbmF1ZG90aSBIRENQIHRpa3JpbmltxIUiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMxMDA1MzQ4NzQ1MjkyNDAyOTEiPiI2NCBLQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NiBLQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjYzNjEyODY5MjQyNjg3MTYzOTciPiIxIE1CIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjQwNTIwMzIzOTU2MDY5NTI2NiI+IjQgTUIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTYgTUIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4NjY1MjA2MTk5MjA5Njk4NTAxIj4iScWhanVuZ3RhIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTU5MzI4OTM3NjUwMjMxMjkyMyI+IjY0IEtCIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU2IEtCIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjEgTUIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxODA4ODM3NzQ1MDk0NzY1NDEiPiI0IE1CIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2IE1CIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjQgS0IiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzNTM0NzgyNzExMDQ1MjYyMzQ0Ij4iMjU2IEtCIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODA4NTg2NzIwOTIwMjE1MzQwMyI+IjEgTUIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4iScWhanVuZ3RhIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDYyMjQ2MDMzMzAzODU4Njc5MSI+IjY0IEtCIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+IjI1NiBLQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxIE1CIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9zdW1tYXJpZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI3MzQ2NTk1NDczNTg4NzY1MDE5Ij4iNjQgS0Igxb51cm4uIGJ1ZmVyLiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiIyNTYgS0Igxb51cm4uIGJ1ZmVyLiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiIxIE1CIMW+dXJuLiBidWZlci4iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1NzQ4NTI4NjQzOTM3NTAwMzQ5Ij4iNCBNQiDFvnVybi4gYnVmZXIuIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+IjE2IE1CIMW+dXJuLiBidWZlci4iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4iScWhanVuZ3RhIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjk2OTQ1ODAyOTM0NDc1MDI2MiI+IjY0IEtCIMW+dXJuYWxvIGJ1ZmVyaXMiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzQyMjg1MTE1NjY1Njk4MTY4Ij4iMjU2IEtCIMW+dXJuYWxvIGJ1ZmVyaXMiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4iMSBNQiDFvnVybmFsbyBidWZlcmlzIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+IjQgTUIgxb51cm5hbG8gYnVmZXJpcyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU0MzEzNTQ5NTY4NTY2NTUxMjAiPiIxNiBNQiDFvnVybmFsbyBidWZlcmlzIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+IkFuaW1hY2lqYSBpxaFqdW5ndGEiPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1sdC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbHQvc3RyaW5ncy54bWwKaW5kZXggMjAxOTY0Ni4uMDE0YTZmYiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1sdC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWx0L3N0cmluZ3MueG1sCkBAIC0yNDcsNiArMjQ3LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+IlZpcy4gcHIuIGdhbC4gxK9yLiDEryB2aWQuIHNhdWcuIG5lcGFpcy4gYXByLiB2ZXJ0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzIiBtc2dpZD0iODYxNTc2NDM3ODE0NzgyNDk4NSI+IlByaXYuIG51c3QuLCBrYWQgdmVpa3NtLiBiLiBnLiBhdGwuIGtlbGnFsyBkLiBsYW5nLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4iTnVzdGF0b21hLCBrYWQgdmlzdXMgdmVpa3NtdXMgYsWrdMWzIGdhbGltYSBhdGxpa3RpIGtlbGnFsyBkeWTFvmnFsyBsYW5ndW9zZSwgbmVwYWlzYW50IGFwcmHFoW8gdmVyxI1pxbMuIjwvc3RyaW5nPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0ICgxNDYxODkzMzUxMjc4OTQwNDE2KSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkgKDIyNTI1NjM0OTc0ODU0MzY1MzQpIC0tPgorICAgIDxza2lwIC8+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4iVmlldC4gYXRzcmcuIGtvcC4gc2xhcHQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiLFoGl1byBtZXR1IHZpc29zIHZpZXRpbsSXcyBhdHNhcmdpbsSXcyBrb3Bpam9zIG5lYXBzYXVnb3RvcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiJKZWkgbm9yaXRlIHBha2Vpc3RpIGFyIHBhxaFhbGludGkgdmlzxbMgdmlldGluacWzIGF0c2FyZ2luacWzIGtvcGlqxbMgc2xhcHRhxb5vZMSvLCBwYWxpZXNraXRlIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1sdi9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1sdi9hcnJheXMueG1sCmluZGV4IGEwMzNkMWIuLjAzYWZmOGMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbHYvYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWx2L2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+IlZpZW5txJNyIGl6bWFudG90IEhEQ1AgcMSBcmJhdWRpIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjTCoEtCIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTA1NjExNzU0NTA4OTg4NDc2Ij4iMjU2wqBLQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjYzNjEyODY5MjQyNjg3MTYzOTciPiIxwqBNQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0wqBNQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMwMjU0MzEyMTEwMTM0MjQwOTciPiIxNsKgTUIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4NjY1MjA2MTk5MjA5Njk4NTAxIj4iSXpzbMSTZ3RzIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTU5MzI4OTM3NjUwMjMxMjkyMyI+IjY0wqBLQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IjI1NsKgS0IiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4iMcKgTUIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxODA4ODM3NzQ1MDk0NzY1NDEiPiI0wqBNQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI4MDMxOTkxMDI1ODkxMjY5MzgiPiIxNsKgTUIiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI1MjQ3OTkzOTU3NzA2MTAxNTQiPiI2NMKgS0IiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzNTM0NzgyNzExMDQ1MjYyMzQ0Ij4iMjU2wqBLQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjgwODU4NjcyMDkyMDIxNTM0MDMiPiIxwqBNQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwODk0NzA3MjA0NTEwNjgzNjQiPiJJenNsxJNndHMiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0NjIyNDYwMzMzMDM4NTg2NzkxIj4iNjTCoEtCIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+IjI1NsKgS0IiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNzA0OTQ2NzY2Njk5MjQyNjUzIj4iMcKgTUIiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiI2NMKgS0Igxb51cm4uIGJ1ZmVyaXMiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyODIyMzA5NzQ3Njc1NzU4NjI4Ij4iMjU2wqBLQiDFvnVybi4gYnVmLiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiIxwqBNQiDFvnVybi4gYnVmZXJpcyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjU3NDg1Mjg2NDM5Mzc1MDAzNDkiPiI0wqBNQiDFvnVybi4gYnVmZXJpcyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiIxNsKgTUIgxb51cm4uIGJ1ZmVyaXMiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4iSXpzbMSTZ3RzIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjk2OTQ1ODAyOTM0NDc1MDI2MiI+IjY0wqBLQiB2aWVuYW0gxb51cm7EgWxhIGJ1ZmVyaW0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzQyMjg1MTE1NjY1Njk4MTY4Ij4iMjU2wqBLQiB2aWVuYW0gxb51cm7EgWxhIGJ1ZmVyaW0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4iMcKgTUIgdmllbmFtIMW+dXJuxIFsYSBidWZlcmltIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+IjTCoE1CIHZpZW5hbSDFvnVybsSBbGEgYnVmZXJpbSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU0MzEzNTQ5NTY4NTY2NTUxMjAiPiIxNsKgTUIgdmllbmFtIMW+dXJuxIFsYSBidWZlcmltIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+IkFuaW3EgWNpamEgaXIgaXpzbMSTZ3RhIjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbHYvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWx2L3N0cmluZ3MueG1sCmluZGV4IDJmOWE4M2IuLjg3ZGExMDUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbHYvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1sdi9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0NywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiLEu2F1aiBqZWJrdXJ1IGxpZXRvdG5pIGllcmFrc3TEq3QgxIFyxJNqxIEga3LEgXR1dsSTIG5lYXRrYXLEq2dpIG5vIG1hbmlmZXN0YSB2xJNydMSrYmFzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzIiBtc2dpZD0iODYxNTc2NDM3ODE0NzgyNDk4NSI+IlBpZWzEgWdvdCBkYXJixKtiYXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllc19zdW1tYXJ5IiBtc2dpZD0iNDUwODIxNzQ3Njk5NzE4MjIxNiI+IlBpZWzEgWdvIHZpc2FzIGRhcmLEq2JhcyB2YWlyxIFrdSBsb2d1IHJlxb7Eq21hbSBuZWF0a2FyxKtnaSBubyB2xJNydMSrYsSBbSBtYW5pZmVzdMSBLiI8L3N0cmluZz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBlbmFibGVfZnJlZWZvcm1fc3VwcG9ydCAoMTQ2MTg5MzM1MTI3ODk0MDQxNikgLS0+CisgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5ICgyMjUyNTYzNDk3NDg1NDM2NTM0KSAtLT4KKyAgICA8c2tpcCAvPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+IkRhdG9yYSBkdWJsxJNqdW1hIHBhcm9sZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4iRGFyYnZpcnNtYXMgcGlsbmllIGR1YmzEk2p1bWkgcGHFoWxhaWsgbmF2IGFpenNhcmfEgXRpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiJQaWVza2FyaWV0aWVzLCBsYWkgbWFpbsSrdHUgdmFpIG5vxYZlbXR1IHBhcm9saSBwaWxuaWVtIGRhcmJ2aXJzbWFzIGR1YmzEk2p1bWllbS4iPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLW1rLXJNSy9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1tay1yTUsvYXJyYXlzLnhtbAppbmRleCBjOTdiNTc3Li41ODhjMjFhIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLW1rLXJNSy9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbWstck1LL2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+ItCh0LXQutC+0LPQsNGIINC60L7RgNC40YHRgtC4INCl0JTQptCfINC/0YDQvtCy0LXRgNC60LAiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMxMDA1MzQ4NzQ1MjkyNDAyOTEiPiI2NCBLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTA1NjExNzU0NTA4OTg4NDc2Ij4iMjU2IEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMSBNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjQwNTIwMzIzOTU2MDY5NTI2NiI+IjQgTSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMwMjU0MzEyMTEwMTM0MjQwOTciPiIxNiBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+ItCY0YHQutC70YPRh9C10L3QviI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NC4wMDAiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0ODc1NDUzNDAyMzYxNDUzMjQiPiIyNTYuMDAwIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjEgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjQgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI4MDMxOTkxMDI1ODkxMjY5MzgiPiIxNiBNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjQuMDAwIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1Ni4wMDAiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMSBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjA4OTQ3MDcyMDQ1MTA2ODM2NCI+ItCY0YHQutC70YPRh9C10L3QviI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NC4wMDAiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2LjAwMCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxIE0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiI2NCBLL9C80LXRk9GD0LzQtdC80L7RgNC40ZjQsCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiIyNTYgSy/QvNC10ZPRg9C80LXQvNC+0YDQuNGY0LAiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4iMSBNL9C80LXRk9GD0LzQtdC80L7RgNC40ZjQsCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjU3NDg1Mjg2NDM5Mzc1MDAzNDkiPiI0IE0v0LzQtdGT0YPQvNC10LzQvtGA0LjRmNCwIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+IjE2IE0v0LzQtdGT0YPQvNC10LzQvtGA0LjRmNCwIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+ItCY0YHQutC70YPRh9C10L3QviI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI5Njk0NTgwMjkzNDQ3NTAyNjIiPiI2NCBLL9C80LXRk9GD0LzQtdC80L7RgNC40ZjQsCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzNDIyODUxMTU2NjU2OTgxNjgiPiIyNTYgSy/QvNC10ZPRg9C80LXQvNC+0YDQuNGY0LAiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4iMSBNL9C80LXRk9GD0LzQtdC80L7RgNC40ZjQsCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM2MDYwNDc3ODA3OTI4OTQxNTEiPiI0IE0v0LzQtdGT0YPQvNC10LzQvtGA0LjRmNCwIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTQzMTM1NDk1Njg1NjY1NTEyMCI+IjE2IE0v0LzQtdGT0YPQvNC10LzQvtGA0LjRmNCwIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+ItCR0LXQtyDQsNC90LjQvNCw0YbQuNGY0LAiPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1tay1yTUsvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLW1rLXJNSy9zdHJpbmdzLnhtbAppbmRleCBlMDFkMDBjLi5iNTg4YzJjIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLW1rLXJNSy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLW1rLXJNSy9zdHJpbmdzLnhtbApAQCAtOTcsNyArOTcsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0icnVubmluZ19wcm9jZXNzX2l0ZW1fdXNlcl9sYWJlbCIgbXNnaWQ9IjMxMjk4ODc4NjU1NTIwMjU5NDMiPiLQmtC+0YDQuNGB0L3QuNC6OiA8eGxpZmY6ZyBpZD0iVVNFUl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxhdW5jaF9kZWZhdWx0c19zb21lIiBtc2dpZD0iMzEzMTU5NDY5ODU2MzcyNjIxIj4i0J/QvtGB0YLQsNCy0LXQvdC4INGB0LUg0L3QtdC60L7QuCDRgdGC0LDQvdC00LDRgNC00L3QuCDQstGA0LXQtNC90L7RgdGC0LgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsYXVuY2hfZGVmYXVsdHNfbm9uZSIgbXNnaWQ9IjQyNDExMjkxMDgxNDAwMzQ4NzYiPiLQndC10LzQsCDQv9C+0YHRgtCw0LLQtdC90L4g0YHRgtCw0L3QtNCw0YDQtNC90Lgg0LLRgNC10LTQvdC+0YHRgtC4Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idHRzX3NldHRpbmdzIiBtc2dpZD0iODE4Njk3MTg5NDgwMTM0ODMyNyI+ItCf0L7QtNC10YHRg9Cy0LDRmtCwINC90LAg0YLQtdC60YHRgi3QstC+LdCz0L7QstC+0YAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0dHNfc2V0dGluZ3MiIG1zZ2lkPSI4MTg2OTcxODk0ODAxMzQ4MzI3Ij4i0J/QvtGB0YLQsNCy0LrQuCDQvdCwINGC0LXQutGB0YIt0LLQvi3Qs9C+0LLQvtGAIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idHRzX3NldHRpbmdzX3RpdGxlIiBtc2dpZD0iMTIzNzgyMDY4MTAxNjYzOTY4MyI+ItCY0LfQu9C10Lcg0YLQtdC60YHRgi3QstC+LdCz0L7QstC+0YAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0dHNfZGVmYXVsdF9yYXRlX3RpdGxlIiBtc2dpZD0iNjAzMDU1MDk5ODM3OTMxMDA4OCI+ItCR0YDQt9C40L3QsCDQvdCwINCz0L7QstC+0YAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0dHNfZGVmYXVsdF9yYXRlX3N1bW1hcnkiIG1zZ2lkPSI0MDYxODE1MjkyMjg3MTgyODAxIj4i0JHRgNC30LjQvdCwINGB0L4g0LrQvtGY0LAg0YHQtSDQutCw0LbRg9Cy0LAg0YLQtdC60YHRgtC+0YIiPC9zdHJpbmc+CkBAIC0xMTcsNyArMTE3LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InR0c19zdGF0dXNfcmVxdWlyZXNfbmV0d29yayIgbXNnaWQ9IjYwNDI1MDA4MjE1MDMyMjY4OTIiPiI8eGxpZmY6ZyBpZD0iTE9DQUxFIj4lMSRzPC94bGlmZjpnPiDQsdCw0YDQsCDQvNGA0LXQttC90L4g0L/QvtCy0YDQt9GD0LLQsNGa0LUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0dHNfc3RhdHVzX25vdF9zdXBwb3J0ZWQiIG1zZ2lkPSI0NDkxMTU0MjEyNzYyNDcyNDk1Ij4iPHhsaWZmOmcgaWQ9IkxPQ0FMRSI+JTEkczwveGxpZmY6Zz4g0L3QtSDQtSDQv9C+0LTQtNGA0LbQsNC90L4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0dHNfc3RhdHVzX2NoZWNraW5nIiBtc2dpZD0iNTMzOTE1MDc5Nzk0MDQ4MzU5MiI+ItCh0LUg0L/RgNC+0LLQtdGA0YPQstCwLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idHRzX2VuZ2luZV9zZXR0aW5nc190aXRsZSIgbXNnaWQ9IjM0OTkxMTIxNDI0MjU2ODAzMzQiPiLQn9C+0LTQtdGB0YPQstCw0ZrQsCDQvdCwIDx4bGlmZjpnIGlkPSJUVFNfRU5HSU5FX05BTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InR0c19lbmdpbmVfc2V0dGluZ3NfdGl0bGUiIG1zZ2lkPSIzNDk5MTEyMTQyNDI1NjgwMzM0Ij4i0J/QvtGB0YLQsNCy0LrQuCDQvdCwIDx4bGlmZjpnIGlkPSJUVFNfRU5HSU5FX05BTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InR0c19lbmdpbmVfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iMTAzMDUxMjA0MjA0MDcyMjI4NSI+ItCh0YLQsNGA0YLRg9Cy0LDRmCDQv9C+0LTQtdGB0YPQstCw0ZrQsCDQvdCwINGB0L7RhNGC0LLQtdGAIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idHRzX2VuZ2luZV9wcmVmZXJlbmNlX3NlY3Rpb25fdGl0bGUiIG1zZ2lkPSI0NDgyOTQ1MDA5OTA5NzE0MTMiPiLQn9GA0LXRgtC/0L7Rh9C40YLQsNC9INGB0L7RhNGC0LLQtdGAIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idHRzX2dlbmVyYWxfc2VjdGlvbl90aXRsZSIgbXNnaWQ9IjQ0MDI1NzIwMTQ2MDQ0OTA1MDIiPiLQntC/0YjRgtC+Ijwvc3RyaW5nPgpAQCAtMjQ3LDYgKzI0Nyw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+ItCX0LDQv9C40YjRg9Cy0LAg0LDQv9C7LiDQstC+INC90LDQtNCyLtC80LXQvNC+0YDQuNGY0LAsINC90LXQt9Cw0LIuINC+0LQg0LzQsNC90LjRhNC10YHRgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzIiBtc2dpZD0iODYxNTc2NDM3ODE0NzgyNDk4NSI+ItCf0YDQuNC90YPQtNC4INCz0Lgg0LDQutGC0LjQstC90L7RgdGC0LjRgtC1INC00LAg0ZjQsCDQvNC10L3Rg9Cy0LDQsNGCINCz0L7Qu9C10LzQuNC90LDRgtCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXNfc3VtbWFyeSIgbXNnaWQ9IjQ1MDgyMTc0NzY5OTcxODIyMTYiPiLQk9C4INC/0YDQsNCy0Lgg0YHQuNGC0LUg0LDQutGC0LjQstC90L7RgdGC0Lgg0LTQsCDQsdC40LTQsNGCINGB0L4g0L/RgNC+0LzQtdC90LvQuNCy0LAg0LPQvtC70LXQvNC40L3QsCDQt9CwINC80YPQu9GC0LjQv9GA0L7Qt9C+0YDQtdGGLCDQsdC10Lcg0YDQsNC30LvQuNC60LAg0L3QsCDQstGA0LXQtNC90L7RgdGC0LjRgtC1INC90LAg0LzQsNC90LjRhNC10YHRgtC+0YIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnQiIG1zZ2lkPSIxNDYxODkzMzUxMjc4OTQwNDE2Ij4i0J7QstC+0LfQvNC+0LbQuCDQv9GA0L7Qt9C+0YDRhtC4INGB0L4g0YHQu9C+0LHQvtC00L3QsCDRhNC+0YDQvNCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnRfc3VtbWFyeSIgbXNnaWQ9IjIyNTI1NjM0OTc0ODU0MzY1MzQiPiLQntCy0L7Qt9C80L7QttGD0LLQsCDQv9C+0LTQtNGA0YjQutCwINC30LAg0LXQutGB0L/QtdGA0LjQvNC10L3RgtCw0LvQvdC4INC/0YDQvtC30L7RgNGG0Lgg0YHQviDRgdC70L7QsdC+0LTQvdCwINGE0L7RgNC80LAuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+ItCg0LXQt9C10YDQstC90LAg0LvQvtC30LjQvdC60LAg0LfQsCDRgNCw0LHQvtGC0L3QsCDQv9C+0LLRgNGI0LjQvdCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiLQptC10LvQvtGB0L3QuCDRgNC10LfQtdGA0LLQvdC4INC60L7Qv9C40Lgg0L3QsCDRgNCw0LHQvtGC0L3QsNGC0LAg0L/QvtCy0YDRiNC40L3QsCDQutC+0Lgg0LLQviDQvNC+0LzQtdC90YLQvtCyINC90LUg0YHQtSDQt9Cw0YjRgtC40YLQtdC90LgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4i0JTQvtC/0YDQtdGC0LUg0LfQsCDQtNCwINGB0LUg0L/RgNC+0LzQtdC90Lgg0LjQu9C4INC+0YLRgdGC0YDQsNC90Lgg0LvQvtC30LjQvdC60LDRgtCwINC30LAg0YbQtdC70L7RgdC90LAg0YDQtdC30LXRgNCy0L3QsCDQutC+0L/QuNGY0LAg0L3QsCDRgNCw0LHQvtGC0L3QsNGC0LAg0L/QvtCy0YDRiNC40L3QsCI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbWwtcklOL2FycmF5cy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLW1sLXJJTi9hcnJheXMueG1sCmluZGV4IDQwNGIyMGEuLmYwNGNjNjUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbWwtcklOL2FycmF5cy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1tbC1ySU4vYXJyYXlzLnhtbApAQCAtNTksMjMgKzU5LDI2IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjQ1MDc1NjMxMjMxMjEyNzMyIj4i4LSO4LSy4LWN4LSy4LS+4LSv4LWN4oCM4LSq4LWN4LSq4LWL4LS04LWB4LSCIEhEQ1Ag4LSq4LSw4LS/4LS24LWL4LSn4LSoIOC0ieC0quC0r+C1i+C0l+C0v+C0leC1jeC0leC1geC0lSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iMzEwMDUzNDg3NDUyOTI0MDI5MSI+IjY0SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMU0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2NDA1MjAzMjM5NTYwNjk1MjY2Ij4iNE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTZNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+IuC0k+C0q+C1jSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0ODc1NDUzNDAyMzYxNDUzMjQiPiIyNTZLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjFNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyODAzMTk5MTAyNTg5MTI2OTM4Ij4iMTZNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjRLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMU0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4i4LST4LSr4LWNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDYyMjQ2MDMzMzAzODU4Njc5MSI+IjY0SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIyMTIxMjU2MjUxNjk1ODIzMzAiPiIyNTZLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTcwNDk0Njc2NjY5OTI0MjY1MyI+IjFNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9zdW1tYXJpZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI3MzQ2NTk1NDczNTg4NzY1MDE5Ij4i4LST4LSw4LWLIOC0suC1i+C0l+C1jSDgtKzgtKvgtLHgtL/gtKjgtYHgtIIgNjRLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMjgyMjMwOTc0NzY3NTc1ODYyOCI+IuC0k+C0sOC1iyDgtLLgtYvgtJfgtY0g4LSs4LSr4LSx4LS/4LSo4LWB4LSCIDI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4i4LST4LSw4LWLIOC0suC1i+C0l+C1jSDgtKzgtKvgtLHgtL/gtKjgtYHgtIIgMU0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1NzQ4NTI4NjQzOTM3NTAwMzQ5Ij4i4LST4LSw4LWLIOC0suC1i+C0l+C1jSDgtKzgtKvgtLHgtL/gtKjgtYHgtIIgNE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxOTc4NjI5MDUxMDg1MTExNTkyIj4i4LST4LSw4LWLIOC0suC1i+C0l+C1jSDgtKzgtKvgtLHgtL/gtKjgtYHgtIIgMTZNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+IuC0k+C0q+C1jSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI5Njk0NTgwMjkzNDQ3NTAyNjIiPiLgtJPgtLDgtYsg4LSy4LWL4LSX4LWNIOC0rOC0q+C0seC0v+C0qOC1geC0giA2NEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzQyMjg1MTE1NjY1Njk4MTY4Ij4i4LST4LSw4LWLIOC0suC1i+C0l+C1jSDgtKzgtKvgtLHgtL/gtKjgtYHgtIIgMjU2SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiLgtJPgtLDgtYsg4LSy4LWL4LSX4LWNIOC0rOC0q+C0seC0v+C0qOC1geC0giAxTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM2MDYwNDc3ODA3OTI4OTQxNTEiPiLgtJPgtLDgtYsg4LSy4LWL4LSX4LWNIOC0rOC0q+C0seC0v+C0qOC1geC0giA0TSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU0MzEzNTQ5NTY4NTY2NTUxMjAiPiLgtJPgtLDgtYsg4LSy4LWL4LSX4LWNIOC0rOC0q+C0seC0v+C0qOC1geC0giAxNk0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4i4LSG4LSo4LS/4LSu4LWH4LS34LW7IOC0k+C0q+C1geC0muC1huC0r+C1jeC0r+C1geC0lSI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLW1sLXJJTi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbWwtcklOL3N0cmluZ3MueG1sCmluZGV4IGYwMDEwM2YuLmQ3NmU4N2YgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbWwtcklOL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbWwtcklOL3N0cmluZ3MueG1sCkBAIC0yNDcsNiArMjQ3LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+IuC0ruC0vuC0qOC0v+C0q+C1huC0uOC1jeC0seC1jeC0seC1jSDgtK7gtYLgtLLgtY3gtK/gtJngtY3gtJngtb4g4LSq4LSw4LS/4LSX4LSj4LS/4LSV4LWN4LSV4LS+4LSk4LWGLCDgtKzgtL7gtLngtY3gtK8g4LS44LWN4LSx4LWN4LSx4LWL4LSx4LWH4LSc4LS/4LSy4LWH4LSV4LWN4LSV4LWNIOC0juC0tOC1geC0pOC0quC1jeC0quC1huC0n+C1geC0qOC1jeC0qOC0pOC0v+C0qOC1jSDgtI/gtKTgtYrgtLDgtYEg4LSG4LSq4LWN4LSq4LS/4LSo4LWG4LSv4LWB4LSCIOC0r+C1i+C0l+C1jeC0r+C0ruC0vuC0leC1jeC0leC1geC0qOC1jeC0qOC1gSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzIiBtc2dpZD0iODYxNTc2NDM3ODE0NzgyNDk4NSI+IuC0teC0suC0v+C0quC1jeC0quC0giDgtK7gtL7gtLHgtY3gtLHgtL7gtbsg4LSq4LWN4LSw4LS14LW84LSk4LWN4LSk4LSo4LSZ4LWN4LSZ4LSz4LWGIOC0qOC0v+C1vOC0rOC0qOC1jeC0p+C0v+C0leC1jeC0leC1geC0lSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4i4LSu4LS+4LSo4LS/4LSr4LWG4LS44LWN4LSx4LWN4LSx4LWNIOC0ruC1guC0suC1jeC0r+C0meC1jeC0meC1viDgtKrgtLDgtL/gtJfgtKPgtL/gtJXgtY3gtJXgtL7gtKTgtYYsIOC0juC0suC1jeC0suC0viDgtKrgtY3gtLDgtLXgtbzgtKTgtY3gtKTgtKjgtJngtY3gtJngtLPgtYbgtK/gtYHgtIIg4LSu4LW+4LSf4LWN4LSf4LS/LeC0teC0v+C1u+C0oeC1i+C0r+C1jeC0leC1jeC0leC0vuC0r+C0vyDgtLXgtLLgtL/gtKrgtY3gtKrgtIIg4LSu4LS+4LSx4LWN4LSx4LWB4LSo4LWN4LSo4LWBLiI8L3N0cmluZz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBlbmFibGVfZnJlZWZvcm1fc3VwcG9ydCAoMTQ2MTg5MzM1MTI3ODk0MDQxNikgLS0+CisgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5ICgyMjUyNTYzNDk3NDg1NDM2NTM0KSAtLT4KKyAgICA8c2tpcCAvPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+IuC0oeC1huKAjOC0uOC1jeKAjOC0leC1jeC0n+C1i+C0quC1jeC0quC1jSDgtKzgtL7gtJXgtY3gtJXgtKrgtY3gtKrgtY0g4LSq4LS+4LS44LWN4oCM4LS14LWH4LSh4LWNIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiLgtKHgtYbgtLjgtY3igIzgtJXgtY3igIzgtJ/gtYvgtKrgtY3gtKrgtY0g4LSq4LWC4LW84LSj4LWN4LSjIOC0rOC0vuC0leC1jeC0leC0quC1jeC0quC1geC0leC1viDgtKjgtL/gtLLgtLXgtL/gtb0g4LSq4LSw4LS/4LSw4LSV4LWN4LS34LS/4LSa4LWN4LSa4LS/4LSf4LWN4LSf4LS/4LSy4LWN4LSyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfY2hhbmdlIiBtc2dpZD0iMjczMTE2MzQyNTA4MTE3MjYzOCI+IuC0oeC1huC0uOC1jeKAjOC0leC1jeKAjOC0n+C1i+C0quC1jeC0quC1jSDgtKrgtYLgtbzgtKPgtY3gtKMg4LSs4LS+4LSV4LWN4LSV4LSq4LWN4LSq4LWB4LSV4LW+4LSV4LWN4LSV4LS+4LSv4LS/IOC0quC0vuC0uOC1jeKAjOC0teC1h+C0oeC1geC0leC1viDgtK7gtL7gtLHgtY3gtLHgtL7gtKjgtYsg4LSo4LWA4LSV4LWN4LSV4LSC4LSa4LWG4LSv4LWN4LSv4LS+4LSo4LWLIOC0uOC1jeKAjOC0quC1vOC0tuC0v+C0leC1jeC0leC1geC0lSI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbW4tck1OL2FycmF5cy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLW1uLXJNTi9hcnJheXMueG1sCmluZGV4IGM0YzZkMjguLmM0YmJiY2IgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbW4tck1OL2FycmF5cy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1tbi1yTU4vYXJyYXlzLnhtbApAQCAtNTksMjMgKzU5LDI2IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjQ1MDc1NjMxMjMxMjEyNzMyIj4i0JHQsNC50L3Qs9CwIEhEQ1Ag0YjQsNC70LPQsNGF0YvQsyDQsNGI0LjQs9C70LDRhSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iMzEwMDUzNDg3NDUyOTI0MDI5MSI+IjY0SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMdCcIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjQwNTIwMzIzOTU2MDY5NTI2NiI+IjRNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2TSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiLQmNC00Y3QstGF0LPSr9C5IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTU5MzI4OTM3NjUwMjMxMjkyMyI+IjY0MDAwIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU2MDAwIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjEg0YHQsNGPIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNCDRgdCw0Y8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyODAzMTk5MTAyNTg5MTI2OTM4Ij4iMTYg0YHQsNGPIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjRLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMdCcIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjA4OTQ3MDcyMDQ1MTA2ODM2NCI+ItCY0LTRjdCy0YXQs9Kv0LkiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0NjIyNDYwMzMzMDM4NTg2NzkxIj4iNjQwMDAiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2MDAwIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTcwNDk0Njc2NjY5OTI0MjY1MyI+IjEg0YHQsNGPIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9zdW1tYXJpZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI3MzQ2NTk1NDczNTg4NzY1MDE5Ij4i0LvQvtCzINCx0YPRhNC10YAg0LHSr9GA0YIgNjRLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMjgyMjMwOTc0NzY3NTc1ODYyOCI+ItC70L7QsyDQsdGD0YTQtdGAINCx0q/RgNGCIDI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4i0LvQvtCzINCx0YPRhNC10YAg0LHSr9GA0YIgMU0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1NzQ4NTI4NjQzOTM3NTAwMzQ5Ij4i0LvQvtCzINCx0YPRhNC10YAg0LHSr9GA0YIgNE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxOTc4NjI5MDUxMDg1MTExNTkyIj4i0LvQvtCzINCx0YPRhNC10YAg0LHSr9GA0YIgMTZNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+ItCY0LTRjdCy0YXQs9Kv0LkiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4i0LvQvtCzINCx0YPRhNC10YAg0LHSr9GA0YIgNjRLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+ItC70L7QsyDQsdGD0YTQtdGAINCx0q/RgNGCIDI1NksiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4i0LvQvtCzINCx0YPRhNC10YAg0LHSr9GA0YIgMU0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4i0LvQvtCzINCx0YPRhNC10YAg0LHSr9GA0YIgNE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4i0LvQvtCzINCx0YPRhNC10YAg0LHSr9GA0YIgMTZNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+ItCU0q/RgNGBINCw0LzQuNC70YPRg9C70LDQu9GCINC40LTRjdCy0YXQs9Kv0LkiPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1tbi1yTU4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLW1uLXJNTi9zdHJpbmdzLnhtbAppbmRleCBjYzBlN2NiLi40YWVhNjMxIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLW1uLXJNTi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLW1uLXJNTi9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0NywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiLQnNCw0L3QuNGE0LXRgdGCINGD0YLQs9GL0LMg0L3RjCDSr9C7INGF0LDQvNCw0LDRgNCw0L0g0LTRg9GA0YvQvSDQsNC/0L8t0YvQsyDQs9Cw0LTQsNCw0LQg0YHQsNC90LDRhSDQvtC50LQg0LHQuNGH0LjRhSDQsdC+0LvQvtC80LbRgtC+0Lkg0LHQvtC70LPQvtC00L7QsyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzIiBtc2dpZD0iODYxNTc2NDM3ODE0NzgyNDk4NSI+ItKu0LnQuyDQsNC20LjQu9C70LDQs9Cw0LDQvdGLINGF0Y3QvNC20Y3RjdCzINOp06nRgNGH0LjQu9C2INCx0L7Qu9C+0YXRg9C50YYg0LHQvtC70LPQvtGFIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXNfc3VtbWFyeSIgbXNnaWQ9IjQ1MDgyMTc0NzY5OTcxODIyMTYiPiLQotC+0LTQvtGA0YXQvtC50LvQvtCz0Ycg0YTQsNC50LvRi9C9INGD0YLQs9GL0LMg0q/QuyDRhdCw0LzQsNCw0YDQsNC9LCDQsdKv0YUg0q/QudC7INCw0LbQuNC70LvQsNCz0LDQsNCzINC+0LvQvtC9INGG0L7QvdGF0L7QvdC0INGF0Y3QvNC20Y3RjdCzINC90Ywg06nTqdGA0YfQuNC70LYg0LHQvtC70L7RhdGD0LnRhiDQsdC+0LvQs9C+0YUuIjwvc3RyaW5nPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0ICgxNDYxODkzMzUxMjc4OTQwNDE2KSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkgKDIyNTI1NjM0OTc0ODU0MzY1MzQpIC0tPgorICAgIDxza2lwIC8+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4i0JTQtdGB0LrRgtC+0L8g0L3TqdOp0YjQu9Op0LvRgtC40LnQvSDQvdGD0YPRhiDSr9CzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiLQlNC10YHQutGC0L7QvyDQsdKv0YDRjdC9INC906nTqdGG0LvTqdC70YIg0L7QtNC+0L7Qs9C+0L7RgCDRhdCw0LzQs9Cw0LDQu9Cw0LvRgtCz0q/QuSDQsdCw0LnQvdCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfY2hhbmdlIiBtc2dpZD0iMjczMTE2MzQyNTA4MTE3MjYzOCI+ItCU0LXRgdC60YLQvtC/INC00Y3RjdGA0YUg0LHSr9GA0Y3QvSDQvdOp06nRiNC706nQu9GC0LjQudC9INC90YPRg9GGINKv0LPQuNC50LMg06nTqdGA0YfQu9Op0YUg0LHRg9GO0YMg0LDRgNC40LvQs9Cw0YXRi9C9INGC0YPQu9C0INGF0q/RgNC90Y0g0q/SryI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbXItcklOL2FycmF5cy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLW1yLXJJTi9hcnJheXMueG1sCmluZGV4IDcwYzExNTcuLjJmMDczODkgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbXItcklOL2FycmF5cy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1tci1ySU4vYXJyYXlzLnhtbApAQCAtNTksMjMgKzU5LDI2IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjQ1MDc1NjMxMjMxMjEyNzMyIj4i4KSo4KWH4KS54KSu4KWAIEhEQ1Ag4KSk4KSq4KS+4KS44KSj4KWAIOCkteCkvuCkquCksOCkviI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iMzEwMDUzNDg3NDUyOTI0MDI5MSI+IjY0SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMU0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2NDA1MjAzMjM5NTYwNjk1MjY2Ij4iNE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTZNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+IuCkrOCkguCkpiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0ODc1NDUzNDAyMzYxNDUzMjQiPiIyNTZLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjFNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyODAzMTk5MTAyNTg5MTI2OTM4Ij4iMTZNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjRLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMU0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4i4KSs4KSC4KSmIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDYyMjQ2MDMzMzAzODU4Njc5MSI+IjY0SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIyMTIxMjU2MjUxNjk1ODIzMzAiPiIyNTZLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTcwNDk0Njc2NjY5OTI0MjY1MyI+IjFNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9zdW1tYXJpZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI3MzQ2NTk1NDczNTg4NzY1MDE5Ij4i4KSq4KWN4KSw4KSk4KS/IOCksuClieCklyDgpKzgpKvgpLAgNjRLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMjgyMjMwOTc0NzY3NTc1ODYyOCI+IuCkquCljeCksOCkpOCkvyDgpLLgpYngpJcg4KSs4KSr4KSwIDI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4i4KSq4KWN4KSw4KSk4KS/IOCksuClieCklyDgpKzgpKvgpLAgMU0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1NzQ4NTI4NjQzOTM3NTAwMzQ5Ij4i4KSq4KWN4KSw4KSk4KS/IOCksuClieCklyDgpKzgpKvgpLAgNE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxOTc4NjI5MDUxMDg1MTExNTkyIj4i4KSq4KWN4KSw4KSk4KS/IOCksuClieCklyDgpKzgpKvgpLAgMTZNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+IuCkrOCkguCkpiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI5Njk0NTgwMjkzNDQ3NTAyNjIiPiLgpKrgpY3gpLDgpKTgpL8g4KSy4KWJ4KSXIOCkrOCkq+CksCA2NEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzQyMjg1MTE1NjY1Njk4MTY4Ij4i4KSq4KWN4KSw4KSk4KS/IOCksuClieCklyDgpKzgpKvgpLAgMjU2SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiLgpKrgpY3gpLDgpKTgpL8g4KSy4KWJ4KSXIOCkrOCkq+CksCAxTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM2MDYwNDc3ODA3OTI4OTQxNTEiPiLgpKrgpY3gpLDgpKTgpL8g4KSy4KWJ4KSXIOCkrOCkq+CksCA0TSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU0MzEzNTQ5NTY4NTY2NTUxMjAiPiLgpKrgpY3gpLDgpKTgpL8g4KSy4KWJ4KSXIOCkrOCkq+CksCAxNk0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4i4KSF4KWF4KSo4KS/4KSu4KWH4KS24KSoIOCkrOCkguCkpiI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLW1yLXJJTi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbXItcklOL3N0cmluZ3MueG1sCmluZGV4IGI5MzljYTAuLmVkNTdmYjcgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbXItcklOL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbXItcklOL3N0cmluZ3MueG1sCkBAIC0yNDcsNiArMjQ3LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX2FsbG93X29uX2V4dGVybmFsX3N1bW1hcnkiIG1zZ2lkPSIzMTkxOTUyNTA1ODYwMzQzMjMzIj4i4KSu4KWF4KSo4KS/4KSr4KWH4KS44KWN4KSfIOCkruClguCksuCljeCkr+CkvuCkguCkleCkoeClhyDgpKbgpYHgpLDgpY3gpLLgpJXgpY3gpLcg4KSV4KSw4KWC4KSoLCDgpJXgpYvgpKPgpKTgpY3gpK/gpL7gpLngpYAg4KSF4KWF4KSq4KSy4KS+IOCkrOCkvuCkueCljeCkryDgpLjgpILgpJrgpK/gpKjgpL7gpLXgpLAg4KSy4KWH4KSW4KSoIOCkleClh+CksuClhyDgpJzgpL7gpKPgpY3igI3gpK/gpL7gpLjgpL7gpKDgpYAg4KSq4KS+4KSk4KWN4KSwIOCkrOCkqOCkteCkv+CkpOClhyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzIiBtc2dpZD0iODYxNTc2NDM3ODE0NzgyNDk4NSI+IuCkleCljeCksOKAjeCkv+Ckr+CkvuCkleCksuCkvuCkquCkvuCkmuCkviDgpIbgpJXgpL7gpLAg4KSs4KSm4KSy4KSj4KWN4KSv4KS+4KSv4KWL4KSX4KWN4KSvIOCkueCli+Cko+CljeCkr+CkvuCkmuClgCDgpLjgpJXgpY3gpKTgpYAg4KSV4KSw4KS+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXNfc3VtbWFyeSIgbXNnaWQ9IjQ1MDgyMTc0NzY5OTcxODIyMTYiPiLgpK7gpYXgpKjgpL/gpKvgpYfgpLjgpY3gpJ8g4KSu4KWC4KSy4KWN4KSv4KS+4KSC4KSV4KSh4KWHIOCkpuClgeCksOCljeCksuCkleCljeCktyDgpJXgpLDgpYLgpKgsIOCkj+CkleCkvuCkp+Ckv+CklS3gpLXgpL/gpILgpKHgpYvgpLjgpL7gpKDgpYAg4KS44KSw4KWN4KS1IOCkleCljeCksOCkv+Ckr+CkvuCkleCksuCkvuCkquCkvuCkguCkmuCkviDgpIbgpJXgpL7gpLAg4KSs4KSm4KSy4KSj4KWN4KSv4KS+4KSv4KWL4KSX4KWN4KSvIOCkleCksOCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0IiBtc2dpZD0iMTQ2MTg5MzM1MTI3ODk0MDQxNiI+ImZyZWVmb3JtIOCkteCkv+CkguCkoeCliyDgpLjgpJXgpY3gpLfgpK4g4KSV4KSw4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnRfc3VtbWFyeSIgbXNnaWQ9IjIyNTI1NjM0OTc0ODU0MzY1MzQiPiLgpKrgpY3gpLDgpL7gpK/gpYvgpJfgpL/gpJUg4KSu4KWB4KSV4KWN4KSk4KS44KWN4KS14KSw4KWC4KSq4KS+4KSa4KWN4KSv4KS+IOCkteCkv+CkguCkoeCli+CkuOCkvuCkoOClgCDgpLjgpK7gpLDgpY3gpKXgpKgg4KS44KSV4KWN4KS34KSuIOCkleCksOCkpOClhy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4i4KSh4KWH4KS44KWN4KSV4KSf4KWJ4KSqIOCkrOClheCkleCkheCkqiDgpLjgpILgpJXgpYfgpKTgpLbgpKzgpY3gpKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9ub25lIiBtc2dpZD0iNjk1MTA5NTQ4NTUzNzc2Nzk1NiI+IuCkoeClh+CkuOCljeCkleCkn+ClieCkqiDgpKrgpYLgpLDgpY3gpKMg4KSs4KWF4KSVIOCkheCkqiDgpLjgpKfgpY3gpK/gpL4g4KS44KSC4KSw4KSV4KWN4KS34KS/4KSkIOCkqOCkvuCkueClgOCkpCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiLgpKHgpYfgpLjgpY3gpJXgpJ/gpYngpKrgpJrgpY3gpK/gpL4g4KSq4KWC4KSw4KWN4KSjIOCkrOClheCkleCkheCkquCkuOCkvuCkoOClgCDgpIXgpLjgpLLgpYfgpLLgpL4g4KS44KSC4KSV4KWH4KSk4KS24KSs4KWN4KSmIOCkrOCkpuCksuCko+CljeCkr+CkvuCkuOCkvuCkoOClgCDgpJXgpL/gpILgpLXgpL4g4KSV4KS+4KSi4KWC4KSoIOCkn+CkvuCkleCko+CljeCkr+CkvuCkuOCkvuCkoOClgCDgpLjgpY3gpKrgpLDgpY3gpLYg4KSV4KSw4KS+Ijwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1tcy1yTVkvYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbXMtck1ZL2FycmF5cy54bWwKaW5kZXggMzIwZmE5Yi4uNDlmMGYyOCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1tcy1yTVkvYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLW1zLXJNWS9hcnJheXMueG1sCkBAIC01OSwyMyArNTksMjYgQEAKICAgICA8aXRlbSBtc2dpZD0iNDUwNzU2MzEyMzEyMTI3MzIiPiJTZW50aWFzYSBndW5ha2FuIHBlbnllbWFrYW4gSERDUCI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iMzEwMDUzNDg3NDUyOTI0MDI5MSI+IjY0SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMU0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2NDA1MjAzMjM5NTYwNjk1MjY2Ij4iNE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTZNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+Ik1hdGkiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4iNjRLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU2SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI0MjM1Mjg2NzUyOTQzMzM4MzEiPiIxTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjRNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2TSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfbG93cmFtX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUyNDc5OTM5NTc3MDYxMDE1NCI+IjY0SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiIyNTZLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODA4NTg2NzIwOTIwMjE1MzQwMyI+IjFNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjA4OTQ3MDcyMDQ1MTA2ODM2NCI+Ik1hdGkiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0NjIyNDYwMzMzMDM4NTg2NzkxIj4iNjRLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+IjI1NksiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNzA0OTQ2NzY2Njk5MjQyNjUzIj4iMU0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiI2NEsgcGVyIHBlbmltYmFsIGxvZyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiIyNTZLIHBlciBwZW5pbWJhbCBsb2ciPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4iMU0gcGVyIHBlbmltYmFsIGxvZyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjU3NDg1Mjg2NDM5Mzc1MDAzNDkiPiI0TSBwZXIgcGVuaW1iYWwgbG9nIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+IjE2TSBwZXIgcGVuaW1iYWwgbG9nIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+Ik1hdGkiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4iNjRLIHBlciBwZW5pbWJhbCBsb2ciPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzQyMjg1MTE1NjY1Njk4MTY4Ij4iMjU2SyBwZXIgcGVuaW1iYWwgbG9nIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTMxNDIzNDI5OTU1MjI1NDYyMSI+IjFNIHBlciBwZW5pbWJhbCBsb2ciPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4iNE0gcGVyIHBlbmltYmFsIGxvZyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU0MzEzNTQ5NTY4NTY2NTUxMjAiPiIxNk0gcGVyIHBlbmltYmFsIGxvZyI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9IndpbmRvd19hbmltYXRpb25fc2NhbGVfZW50cmllcyI+CiAgICAgPGl0ZW0gbXNnaWQ9IjgxMzQxNTY1OTkzNzA4MjQwODEiPiJBbmltYXNpIGRpbWF0aWthbiI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLW1zLXJNWS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbXMtck1ZL3N0cmluZ3MueG1sCmluZGV4IDJlNjc3NTIuLjFmNzJkMDQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbXMtck1ZL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbXMtck1ZL3N0cmluZ3MueG1sCkBAIC0yNDcsNiArMjQ3LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+Ik1lbmphZGlrYW4gc2ViYXJhbmcgYXBsIGxheWFrIGRpdHVsaXMga2Ugc3RvcmFuIGx1YXJhbiwgd2FsYXUgYXBhIGp1Z2EgbmlsYWkgbWFuaWZlc255YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzIiBtc2dpZD0iODYxNTc2NDM3ODE0NzgyNDk4NSI+IlBha3NhIGFrdGl2aXRpIHN1cGF5YSBib2xlaCBkaXViYWggc2FpeiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4iTWVuamFkaWthbiBzZW11YSBha3Rpdml0aSBib2xlaCBkaXViYWggc2FpeiB1bnR1ayBiZXJiaWxhbmcgdGV0aW5na2FwLCB0YW5wYSBtZW5nYW1iaWwga2lyYSBuaWxhaSBtYW5pZmVzLiI8L3N0cmluZz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBlbmFibGVfZnJlZWZvcm1fc3VwcG9ydCAoMTQ2MTg5MzM1MTI3ODk0MDQxNikgLS0+CisgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5ICgyMjUyNTYzNDk3NDg1NDM2NTM0KSAtLT4KKyAgICA8c2tpcCAvPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+IkthdGEgbGFsdWFuIHNhbmRhcmFuIGtvbXB1dGVyIG1lamEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9ub25lIiBtc2dpZD0iNjk1MTA5NTQ4NTUzNzc2Nzk1NiI+IlNhbmRhcmFuIHBlbnVoIGtvbXB1dGVyIG1lamEgdGlkYWsgZGlsaW5kdW5naSBwYWRhIG1hc2EgaW5pIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfY2hhbmdlIiBtc2dpZD0iMjczMTE2MzQyNTA4MTE3MjYzOCI+IlNlbnR1aCB1bnR1ayBtZW51a2FyIGF0YXUgbWVuZ2FsaWgga2VsdWFyIGthdGEgbGFsdWFuIHVudHVrIHNhbmRhcmFuIHBlbnVoIGtvbXB1dGVyIG1lamEiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLW15LXJNTS9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1teS1yTU0vYXJyYXlzLnhtbAppbmRleCA3MWIzNWFkLi5hZDNhNTlmIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLW15LXJNTS9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbXktck1NL2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+IkhEQ1AgY2hlY2tpbmfhgKHhgKzhgLjhgKHhgJnhgLzhgLLhgJ7hgK/hgLbhgLjhgJXhgKsiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMxMDA1MzQ4NzQ1MjkyNDAyOTEiPiI2NEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTZLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+IjFNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjQwNTIwMzIzOTU2MDY5NTI2NiI+IjRNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2TSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiLhgJXhgK3hgJDhgLrhgJXhgKsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4iNjRLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU2SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI0MjM1Mjg2NzUyOTQzMzM4MzEiPiIxTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjRNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2TSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfbG93cmFtX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUyNDc5OTM5NTc3MDYxMDE1NCI+IuGBhuGBhEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzNTM0NzgyNzExMDQ1MjYyMzQ0Ij4i4YGC4YGF4YGGSyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjgwODU4NjcyMDkyMDIxNTM0MDMiPiLhgYFNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjA4OTQ3MDcyMDQ1MTA2ODM2NCI+IuGAleGAreGAkOGAuuGAleGAqyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxTSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+IjY0SyDhgJzhgLHhgKzhgLcg4YCY4YCs4YCW4YCs4YC44YCQ4YC94YCA4YC6IjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMjgyMjMwOTc0NzY3NTc1ODYyOCI+IjI1Nksg4YCc4YCx4YCs4YC3IOGAmOGArOGAluGArOGAuOGAkOGAveGAgOGAuiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiIxTSDhgJzhgLHhgKzhgLcg4YCY4YCs4YCW4YCs4YC44YCQ4YC94YCA4YC6IjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+IjRNIOGAnOGAseGArOGAtyDhgJjhgKzhgJbhgKzhgLjhgJDhgL3hgIDhgLoiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxOTc4NjI5MDUxMDg1MTExNTkyIj4iMTZNIOGAnOGAseGArOGAtyDhgJjhgKzhgJbhgKzhgLjhgJDhgL3hgIDhgLoiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4i4YCV4YCt4YCQ4YC64YCV4YCrIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjk2OTQ1ODAyOTM0NDc1MDI2MiI+IuGAmeGAvuGAkOGAuuGAkOGAmeGAuuGAuOGAmuGArOGAmuGAruGAgOGAvOGArOGAuOGAgeGAtuGAlOGAmuGAuuGAkOGAheGAuuGAgeGAr+GAnOGAu+GAvuGAhOGAuiA2NEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzQyMjg1MTE1NjY1Njk4MTY4Ij4i4YCZ4YC+4YCQ4YC64YCQ4YCZ4YC64YC44YCa4YCs4YCa4YCu4YCA4YC84YCs4YC44YCB4YC24YCU4YCa4YC64YCQ4YCF4YC64YCB4YCv4YCc4YC74YC+4YCE4YC6IDI1NksiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4i4YCZ4YC+4YCQ4YC64YCQ4YCZ4YC64YC44YCa4YCs4YCa4YCu4YCA4YC84YCs4YC44YCB4YC24YCU4YCa4YC64YCQ4YCF4YC64YCB4YCv4YCc4YC74YC+4YCE4YC6IDFNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+IuGAmeGAvuGAkOGAuuGAkOGAmeGAuuGAuOGAmuGArOGAmuGAruGAgOGAvOGArOGAuOGAgeGAtuGAlOGAmuGAuuGAkOGAheGAuuGAgeGAr+GAnOGAu+GAvuGAhOGAuiA0TSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU0MzEzNTQ5NTY4NTY2NTUxMjAiPiLhgJnhgL7hgJDhgLrhgJDhgJnhgLrhgLjhgJrhgKzhgJrhgK7hgIDhgLzhgKzhgLjhgIHhgLbhgJThgJrhgLrhgJDhgIXhgLrhgIHhgK/hgJzhgLvhgL7hgIThgLogMTZNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+IuGAnOGAvuGAr+GAleGAuuGAm+GAvuGArOGAuOGAnuGAgOGAuuGAneGAhOGAuuGAmeGAvuGAr+GAleGAr+GAtuGAmeGAu+GArOGAuOGAgOGAreGAr+GAleGAreGAkOGAuuGAleGAqyI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLW15LXJNTS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbXktck1NL3N0cmluZ3MueG1sCmluZGV4IDAwMmFlZDEuLmNkNDgxMmYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbXktck1NL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbXktck1NL3N0cmluZ3MueG1sCkBAIC0yNDcsNiArMjQ3LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+IuGAleGAvOGAlOGAseGAkOGAsuGAtyDhgJDhgJThgLrhgJbhgK3hgK/hgLgg4YCY4YCa4YC64YCc4YCt4YCv4YCV4YCy4YCb4YC+4YCt4YCU4YCx4YCU4YCx4YGKIOGAmOGAmuGAuiBhcHDhgIDhgK3hgK8g4YCZ4YCG4YCt4YCvIOGAoeGAleGAvOGAhOGAuiDhgJ7hgK3hgK/hgJzhgL7hgLHhgKzhgIThgLrhgIHhgJThgLrhgLjhgJ7hgK3hgK/hgLcg4YCb4YCx4YC44YCe4YCs4YC44YCB4YC94YCE4YC34YC6IOGAleGAseGAuOGAkOGAmuGAuiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzIiBtc2dpZD0iODYxNTc2NDM3ODE0NzgyNDk4NSI+IuGAnOGAr+GAleGAuuGAhuGAseGArOGAhOGAuuGAgeGAu+GAgOGAuuGAmeGAu+GArOGAuCDhgIbhgK3hgK/hgIDhgLrhgIrhgL7hgK3hgJvhgJThgK3hgK/hgIThgLrhgJvhgJThgLog4YCc4YCv4YCV4YC64YCB4YCt4YCv4YCE4YC64YC44YCV4YCrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXNfc3VtbWFyeSIgbXNnaWQ9IjQ1MDgyMTc0NzY5OTcxODIyMTYiPiLhgJnhgJThgLrhgJThgK7hgLjhgJbhgIDhgLrhgIXhgLog4YCQ4YCU4YC64YCW4YCt4YCv4YC44YCZ4YCb4YC94YCx4YC44YGKIOGAnOGAr+GAleGAuuGAhuGAseGArOGAhOGAuuGAgeGAu+GAgOGAuiDhgKHhgKzhgLjhgJzhgK/hgLbhgLgg4YCG4YCt4YCv4YCA4YC64YCK4YC+4YCt4YCb4YCU4YCt4YCv4YCE4YC64YCh4YCx4YCs4YCE4YC6IOGAnOGAr+GAleGAuuGAleGAseGAuOGAleGAq+GBiyI8L3N0cmluZz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBlbmFibGVfZnJlZWZvcm1fc3VwcG9ydCAoMTQ2MTg5MzM1MTI3ODk0MDQxNikgLS0+CisgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5ICgyMjUyNTYzNDk3NDg1NDM2NTM0KSAtLT4KKyAgICA8c2tpcCAvPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+IkRlc2t0b3Ag4YCh4YCb4YCU4YC64YCF4YCA4YCs4YC44YCd4YC+4YCA4YC6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiLhgKHhgJzhgK/hgJXhgLrhgIHhgK/hgLbhgJDhgL3hgIThgLog4YCh4YCb4YCU4YC64YCe4YCt4YCZ4YC64YC44YCG4YCK4YC64YC44YCB4YC84YCE4YC64YC44YCZ4YC74YCs4YC44YCA4YCt4YCvIOGAnOGAseGArOGAnOGAseGArOGAhuGAmuGAuiDhgJnhgIDhgKzhgIDhgL3hgJrhgLrhgJThgK3hgK/hgIThgLrhgJXhgKvhgYsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4i4YCh4YCc4YCv4YCV4YC64YCB4YCv4YC2IOGAkOGAveGAhOGAuiDhgKHhgJvhgJThgLrhgJ7hgK3hgJnhgLrhgLjhgIbhgIrhgLrhgLjhgIHhgLzhgIThgLrhgLjhgKHhgJXhgLzhgIrhgLfhgLrhgJzhgK/hgJXhgLrhgJvhgJThgLog4YCh4YCQ4YC94YCA4YC6IOGAheGAgOGArOGAuOGAneGAvuGAgOGAuuGAluGAmuGAuuGAm+GAlOGAuiDhgJ7hgK3hgK/hgLcg4YCV4YC84YCx4YCs4YCE4YC64YC44YCb4YCU4YC6IOGAkOGAreGAr+GAt+GAkeGAreGAleGAq+GBiyI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbmIvYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbmIvYXJyYXlzLnhtbAppbmRleCAwODc3ZjVjLi44MzExZGIzIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLW5iL2FycmF5cy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1uYi9hcnJheXMueG1sCkBAIC01OSwyMyArNTksMjYgQEAKICAgICA8aXRlbSBtc2dpZD0iNDUwNzU2MzEyMzEyMTI3MzIiPiJCcnVrIGFsbHRpZCBIRENQLWtvbnRyb2xsIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjQga0IiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTYga0IiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMSBNQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0IE1CIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2IE1CIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+IkF2IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTU5MzI4OTM3NjUwMjMxMjkyMyI+IjY0SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IjI1NksiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4iMU0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxODA4ODM3NzQ1MDk0NzY1NDEiPiI0TSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI4MDMxOTkxMDI1ODkxMjY5MzgiPiIxNk0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI1MjQ3OTkzOTU3NzA2MTAxNTQiPiI2NCAwMDAiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzNTM0NzgyNzExMDQ1MjYyMzQ0Ij4iMjU2IDAwMCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjgwODU4NjcyMDkyMDIxNTM0MDMiPiIxIG1pbGxpb24iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4iQXYiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0NjIyNDYwMzMzMDM4NTg2NzkxIj4iNjRLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+IjI1NksiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNzA0OTQ2NzY2Njk5MjQyNjUzIj4iMU0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiI2NCBrQiBwciBsb2dnYnVmZmVyIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMjgyMjMwOTc0NzY3NTc1ODYyOCI+IjI1NiBrQiBwciBidWZmZXIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4iMSBNQiBwciBsb2dnYnVmZmVyIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+IjQgTUIgcHIgbG9nZ2J1ZmZlciI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiIxNiBNQiBwciBsb2dnYnVmZmVyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+IkF2IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjk2OTQ1ODAyOTM0NDc1MDI2MiI+IjY0SyBwZXIgbG9nZ2J1ZmZlciI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzNDIyODUxMTU2NjU2OTgxNjgiPiIyNTZLIHBlciBsb2dnYnVmZmVyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTMxNDIzNDI5OTU1MjI1NDYyMSI+IjFNIHBlciBsb2dnYnVmZmVyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+IjRNIHBlciBsb2dnYnVmZmVyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTQzMTM1NDk1Njg1NjY1NTEyMCI+IjE2TSBwZXIgbG9nZ2J1ZmZlciI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9IndpbmRvd19hbmltYXRpb25fc2NhbGVfZW50cmllcyI+CiAgICAgPGl0ZW0gbXNnaWQ9IjgxMzQxNTY1OTkzNzA4MjQwODEiPiJBbmltYXNqb24gYXYiPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1uYi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbmIvc3RyaW5ncy54bWwKaW5kZXggYTQ5NmEyMS4uYWUwYjE1ZCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1uYi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLW5iL3N0cmluZ3MueG1sCkBAIC0yNDcsNiArMjQ3LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+Ikdqw7hyIGF0IGFwcGVyIGthbiBza3JpdmVzIHRpbCBla3N0ZXJuIGxhZ3JpbmcsIHVhdmhlbmdpZyBhdiBtYW5pZmVzdHZlcmRpZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiJUdmluZyBha3Rpdml0ZXRlciB0aWwgw6Uga3VubmUgZW5kcmUgc3TDuHJyZWxzZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4iRGV0dGUgZ2rDuHIgYXQgYWxsZSBha3Rpdml0ZW5lIGthbiBlbmRyZSBzdMO4cnJlbHNlIGZvciBmbGVydmluZHVzbW9kdXMsIHVhdmhlbmdpZyBhdiBtYW5pZmVzdHZlcmRpZXIuIjwvc3RyaW5nPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0ICgxNDYxODkzMzUxMjc4OTQwNDE2KSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkgKDIyNTI1NjM0OTc0ODU0MzY1MzQpIC0tPgorICAgIDxza2lwIC8+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4iUGFzc29yZCBmb3Igc2lra2VyaGV0c2tvcGllcmluZyBww6UgZGF0YW1hc2tpbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4iRnVsbHN0ZW5kaWcgc2lra2VyaGV0c2tvcGllcmluZyBww6UgZGF0YW1hc2tpbiBiZXNreXR0ZXMgaWtrZSBmb3Igw7h5ZWJsaWtrZXQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfY2hhbmdlIiBtc2dpZD0iMjczMTE2MzQyNTA4MTE3MjYzOCI+IlRyeWtrIGZvciDDpSBlbmRyZSBlbGxlciBmamVybmUgcGFzc29yZGV0IGZvciBmdWxsc3RlbmRpZ2Ugc2lra2VyaGV0c2tvcGllciBww6UgZGF0YW1hc2tpbmVuIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1uZS1yTlAvYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbmUtck5QL2FycmF5cy54bWwKaW5kZXggOTllYzg4MS4uNzQ2ODk4MiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1uZS1yTlAvYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLW5lLXJOUC9hcnJheXMueG1sCkBAIC01OSwyMyArNTksMjYgQEAKICAgICA8aXRlbSBtc2dpZD0iNDUwNzU2MzEyMzEyMTI3MzIiPiLgpLjgpKfgpYjgpIEgSERDUCDgpJzgpL7gpIHgpJog4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iMzEwMDUzNDg3NDUyOTI0MDI5MSI+IjY0SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMU0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2NDA1MjAzMjM5NTYwNjk1MjY2Ij4iNE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTZNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+IuCkqOCkv+Ckt+CljeCkleCljeCksOCkv+CkryDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4i4KWs4KWq4KSV4KWHIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4i4KWo4KWr4KWs4KSV4KWHIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IuClp+Ckj+CkriI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IuClquCkj+CkriI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI4MDMxOTkxMDI1ODkxMjY5MzgiPiLgpafgpazgpI/gpK4iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI1MjQ3OTkzOTU3NzA2MTAxNTQiPiLgpazgpapLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IuClqOClq+ClrEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4i4KWnIOCkruClh+Ckl+CkviDgpKrgpL/gpJXgpY3gpLjgpYfgpLIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4i4KSo4KS/4KS34KWN4KSV4KWN4KSw4KS/4KSvIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiLgpazgpargpJXgpYciPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4i4KWo4KWr4KWs4KSV4KWHIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTcwNDk0Njc2NjY5OTI0MjY1MyI+IuClp+Ckj+CkriI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+IjY0SyDgpKrgpY3gpLDgpKTgpL8g4KSy4KSXIOCkrOCkq+CksCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiIyNTZLIOCkquCljeCksOCkpOCkvyDgpLLgpJcg4KSs4KSr4KSwIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjY5OTMwNjE5ODM1NzQ5NjczMSI+IjFNIOCkquCljeCksOCkpOCkvyDgpLLgpJcg4KSs4KSr4KSwIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+IjRNIOCkquCljeCksOCkpOCkvyDgpLLgpJcg4KSs4KSr4KSwIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+IjE2TSDgpKrgpY3gpLDgpKTgpL8g4KSy4KSXIOCkrOCkq+CksCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY5MjEwNDg4Mjk3OTExNzkzMzEiPiLgpKjgpL/gpLfgpY3gpJXgpY3gpLDgpL/gpK8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjk2OTQ1ODAyOTM0NDc1MDI2MiI+IuClrOClquCkleClhyDgpKrgpY3gpLDgpKTgpL8g4KSy4KSXIOCkrOCkq+CksCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzNDIyODUxMTU2NjU2OTgxNjgiPiLgpajgpavgpazgpJXgpYcg4KSq4KWN4KSw4KSk4KS/IOCksuCklyDgpKzgpKvgpLAiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4i4KWn4KSP4KSuIOCkquCljeCksOCkpOCkvyDgpLLgpJcg4KSs4KSr4KSwIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+IuClquCkj+CkriDgpKrgpY3gpLDgpKTgpL8g4KSy4KSXIOCkrOCkq+CksCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU0MzEzNTQ5NTY4NTY2NTUxMjAiPiLgpafgpazgpI/gpK4g4KSq4KWN4KSw4KSk4KS/IOCksuCklyDgpKzgpKvgpLAiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4i4KS44KSc4KWA4KS14KS/4KSV4KSw4KSjIOCkrOCkqOCljeCkpiI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLW5lLXJOUC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbmUtck5QL3N0cmluZ3MueG1sCmluZGV4IDVjODVjMjUuLjU4ODU1MTMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbmUtck5QL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbmUtck5QL3N0cmluZ3MueG1sCkBAIC0yNDcsNiArMjQ3LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX2FsbG93X29uX2V4dGVybmFsX3N1bW1hcnkiIG1zZ2lkPSIzMTkxOTUyNTA1ODYwMzQzMjMzIj4i4KSu4KWN4KSv4KS+4KSo4KS/4KSr4KWH4KWH4KS44KWN4KSf4KSV4KWLIOCkieCkquClh+CkleCljeCkt+CkviDgpJfgpLDgpYAsIOCkleClgeCkqOCliCDgpKrgpKjgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkrOCkvuCkueCljeCkryDgpK3gpKPgpY3gpKHgpL7gpLDgpKPgpK7gpL4g4KSy4KWH4KSW4KWN4KSoIOCkr+Cli+Ckl+CljeCkryDgpKzgpKjgpL7gpIngpIHgpJsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiLgpJfgpKTgpL/gpLXgpL/gpKfgpL/gpLngpLDgpYIg4KSw4KS/4KS44KS+4KSH4KScIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSs4KS+4KSn4KWN4KSvIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4i4KSu4KWN4KSv4KS+4KSo4KS/4KSr4KWH4KWH4KS44KWN4KSfIOCkruCkvuCkqOCkueCksOClguCkleCliyDgpJbgpY3gpK/gpL7gpLIg4KSo4KSX4KSw4KWALCDgpKzgpLngpYEt4KS14KS/4KSo4KWN4KSh4KWL4KSV4KWLIOCksuCkvuCkl+CkvyDgpLjgpKzgpYgg4KSw4KS/4KS44KS+4KSH4KScIOCkl+CksOCljeCkqCDgpLjgpJXgpL/gpKjgpYcg4KSX4KSk4KS/4KS14KS/4KSn4KS/4KS54KSw4KWCIOCkrOCkqOCkvuCkieCkgeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0IiBtc2dpZD0iMTQ2MTg5MzM1MTI3ODk0MDQxNiI+IuCkq+CljeCksOClgOCkq+CksOCljeCkriDgpLXgpL/gpKjgpY3gpKHgpYvgpLngpLDgpYIg4KS44KSV4KWN4KSw4KS/4KSvIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkiIG1zZ2lkPSIyMjUyNTYzNDk3NDg1NDM2NTM0Ij4i4KSq4KWN4KSw4KSv4KWL4KSX4KS+4KSk4KWN4KSu4KSVIOCkq+CljeCksOClgOCkq+CksOCljeCkriDgpLXgpL/gpKjgpY3gpKHgpYvgpLngpLDgpYLgpJXgpL4g4KSy4KS+4KSX4KS/IOCkuOCkruCksOCljeCkpeCkqOCksuCkvuCkiCDgpLjgpJXgpY3gpLDgpL/gpK8g4KSX4KSw4KWN4KSb4KWkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+IuCkoeClh+CkuOCljeCkleCkn+CkqiDgpKzgpY3gpK/gpL7gpJXgpIXgpKog4KSq4KS+4KS44KS14KSw4KWN4KShIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiLgpKHgpYfgpLjgpY3gpJXgpJ/gpKog4KSq4KWC4KSw4KWN4KSjIOCknOCkl+Clh+CkoeCkvuCkueCksOClgiDgpLngpL7gpLLgpLLgpL7gpIgg4KS44KWB4KSw4KSV4KWN4KS34KS/4KSkIOCkm+CliOCkqOCkqOCljSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiLgpKHgpYfgpLjgpY3gpJXgpJ/gpKog4KSq4KWC4KSw4KWN4KSjIOCkrOCljeCkr+CkvuCkleCkheCkquCkleCliyDgpLLgpL7gpJfgpL8g4KSq4KS+4KS44KS14KSw4KWN4KShIOCkrOCkpuCksuCljeCkqCDgpLXgpL4g4KS54KSf4KS+4KSJ4KSoIOCkm+ClgeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbmwvYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbmwvYXJyYXlzLnhtbAppbmRleCA3Zjc2YmJhLi40OGIxMzVkIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLW5sL2FycmF5cy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1ubC9hcnJheXMueG1sCkBAIC01OSwyMyArNTksMjYgQEAKICAgICA8aXRlbSBtc2dpZD0iNDUwNzU2MzEyMzEyMTI3MzIiPiJIRENQLWNvbnRyb2xlIGFsdGlqZCBnZWJydWlrZW4iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMxMDA1MzQ4NzQ1MjkyNDAyOTEiPiI2NEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTZLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+IjFNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjQwNTIwMzIzOTU2MDY5NTI2NiI+IjRNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2TSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiJVaXQiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4iNjQgSyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IjI1NiBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjEgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjQgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI4MDMxOTkxMDI1ODkxMjY5MzgiPiIxNiBNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjRLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMU0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4iVWl0IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDYyMjQ2MDMzMzAzODU4Njc5MSI+IjY0IEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2IEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNzA0OTQ2NzY2Njk5MjQyNjUzIj4iMSBNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9zdW1tYXJpZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI3MzQ2NTk1NDczNTg4NzY1MDE5Ij4iNjRLIHBlciBsb2didWZmZXIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyODIyMzA5NzQ3Njc1NzU4NjI4Ij4iMjU2SyBwZXIgbG9nYnVmZmVyIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjY5OTMwNjE5ODM1NzQ5NjczMSI+IjFNIHBlciBsb2didWZmZXIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1NzQ4NTI4NjQzOTM3NTAwMzQ5Ij4iNE0gcGVyIGxvZ2J1ZmZlciI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiIxNk0gcGVyIGxvZ2J1ZmZlciI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY5MjEwNDg4Mjk3OTExNzkzMzEiPiJVaXQiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4iNjQgSyBwZXIgbG9nYnVmZmVyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+IjI1NiBLIHBlciBsb2didWZmZXIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4iMSBNIHBlciBsb2didWZmZXIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4iNCBNIHBlciBsb2didWZmZXIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4iMTYgTSBwZXIgbG9nYnVmZmVyIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+IkFuaW1hdGllIHVpdCI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLW5sL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1ubC9zdHJpbmdzLnhtbAppbmRleCAxYWZhNDQ0Li4xZGQ0NzdkIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLW5sL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbmwvc3RyaW5ncy54bWwKQEAgLTI0Nyw2ICsyNDcsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiJIaWVyZG9vciBrb210IGVlbiBhcHAgaW4gYWFubWVya2luZyBvbSB0ZSB3b3JkZW4gZ2VzY2hyZXZlbiBuYWFyIGV4dGVybmUgb3BzbGFnLCBvbmdlYWNodCBkZSBtYW5pZmVzdHdhYXJkZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiJGb3JtYWF0IGFjdGl2aXRlaXRlbiBnZWZvcmNlZXJkIGFhbnBhc2JhYXIgbWFrZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllc19zdW1tYXJ5IiBtc2dpZD0iNDUwODIxNzQ3Njk5NzE4MjIxNiI+IkhpZXJtZWUgd29yZHQgaGV0IGZvcm1hYXQgdmFuIGFsbGUgYWN0aXZpdGVpdGVuIGFhbnBhc2JhYXIgZ2VtYWFrdCwgb25nZWFjaHQgZGUgbWFuaWZlc3R3YWFyZGVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0IiBtc2dpZD0iMTQ2MTg5MzM1MTI3ODk0MDQxNiI+IlZlbnN0ZXJzIG1ldCB2cmlqZSB2b3JtIGluc2NoYWtlbGVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnRfc3VtbWFyeSIgbXNnaWQ9IjIyNTI1NjM0OTc0ODU0MzY1MzQiPiJTY2hha2VsdCBvbmRlcnN0ZXVuaW5nIGluIHZvb3IgdmVuc3RlcnMgbWV0IGV4cGVyaW1lbnRlbGUgdnJpamUgdm9ybS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4iV2FjaHR3b29yZCBkZXNrdG9wYmFjay11cCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4iVm9sbGVkaWdlIGJhY2stdXBzIG5hYXIgZGVza3RvcHMgemlqbiBtb21lbnRlZWwgbmlldCBiZXZlaWxpZ2QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4iUmFhayBkaXQgYWFuIG9tIGhldCB3YWNodHdvb3JkIHZvb3Igdm9sbGVkaWdlIGJhY2stdXBzIG5hYXIgZGVza3RvcHMgdGUgd2lqemlnZW4gb2YgdGUgdmVyd2lqZGVyZW4iPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXBhLXJJTi9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1wYS1ySU4vYXJyYXlzLnhtbAppbmRleCBmYTYyNGEwLi5kNjQ0ZGE2IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXBhLXJJTi9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtcGEtcklOL2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+IuCoueCoruCph+CouOCovuCogiBIRENQIOConOCovuCoguComiDgqLXgqLDgqKTgqYsiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMxMDA1MzQ4NzQ1MjkyNDAyOTEiPiI2NEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTZLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+IjFNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjQwNTIwMzIzOTU2MDY5NTI2NiI+IjRNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2TSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiLgqKzgqbDgqKYiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4iNjRLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU2SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI0MjM1Mjg2NzUyOTQzMzM4MzEiPiIxTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjRNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2TSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfbG93cmFtX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUyNDc5OTM5NTc3MDYxMDE1NCI+IjY0SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiIyNTZLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODA4NTg2NzIwOTIwMjE1MzQwMyI+IjFNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjA4OTQ3MDcyMDQ1MTA2ODM2NCI+IuCorOCpsOCopiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxTSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+IjY0SyDgqKrgqY3gqLDgqKTgqYAg4Kiy4KmM4KiXIOCorOCoq+CosCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiIyNTZLIOCoquCpjeCosOCopOCpgCDgqLLgqYzgqJcg4Kis4Kir4KiwIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjY5OTMwNjE5ODM1NzQ5NjczMSI+IjFNIOCoquCpjeCosOCopOCpgCDgqLLgqYzgqJcg4Kis4Kir4KiwIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+IjRNIOCoquCpjeCosOCopOCpgCDgqLLgqYzgqJcg4Kis4Kir4KiwIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+IjE2TSDgqKrgqY3gqLDgqKTgqYAg4Kiy4KmM4KiXIOCorOCoq+CosCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY5MjEwNDg4Mjk3OTExNzkzMzEiPiLgqKzgqbDgqKYiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4iNjRLIOCoquCpjeCosOCopOCpgCDgqLLgqYzgqJcg4Kis4Kir4KiwIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+IjI1Nksg4Kiq4KmN4Kiw4Kik4KmAIOCosuCpjOColyDgqKzgqKvgqLAiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4iMU0g4Kiq4KmN4Kiw4Kik4KmAIOCosuCpjOColyDgqKzgqKvgqLAiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4iNE0g4Kiq4KmN4Kiw4Kik4KmAIOCosuCpjOColyDgqKzgqKvgqLAiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4iMTZNIOCoquCpjeCosOCopOCpgCDgqLLgqYzgqJcg4Kis4Kir4KiwIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+IuCokOCoqOCpgOCoruCph+CouOCovOCoqCDgqKzgqbDgqKYiPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1wYS1ySU4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXBhLXJJTi9zdHJpbmdzLnhtbAppbmRleCBhZDNkM2VkLi44NWY5ZmZiIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXBhLXJJTi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXBhLXJJTi9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0Nyw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+IuCoh+CpseColSDgqJDgqKog4Kio4KmC4KmwIOCorOCovuCoueCosOCosuCpgCDgqLjgqJ/gqYvgqLDgqYfgqJwg4Kik4KmHIOCosuCov+ColuCooyDgqKbgqYcg4Kiv4KmL4KiXIOCorOCoo+CovuCoieCoguCopuCoviDgqLngqYgsIOCoruCpiOCoqOCpgOCoq+CpiOCouOConyDgqLXgqYjgqLLgqK/gqYLgqJwg4Kik4KmHIOCoteCov+ComuCovuCosCDgqJXgqYDgqKTgqYcg4Kis4Ki/4Kio4Ki+4KiCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4i4Kiu4KmB4KmcLeCohuColeCovuCosCDgqKzgqKbgqLLgqKMg4Kiy4KiIIOCouOCosOCol+CosOCoruCpgOCohuCogiBcJ+CopOCphyDgqJzgqLzgqYvgqLAg4Kim4Ki/4KiTIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXNfc3VtbWFyeSIgbXNnaWQ9IjQ1MDgyMTc0NzY5OTcxODIyMTYiPiLgqK7gqLLgqJ/gqYAt4Ki14Ki/4Kmw4Kih4KmLIOCosuCoiCDgqLjgqL7gqLDgqYDgqIbgqIIg4Ki44Kiw4KiX4Kiw4Kiu4KmA4KiG4KiCIOCoqOCpguCpsCDgqK7gqYHgqZwt4KiG4KiV4Ki+4KiwIOCoteCov+CpseComiDgqLLgqL/gqIbgqIngqILgqKbgqYAg4Ki54KmILCDgqJrgqL7gqLngqYcg4Kiu4KmI4Kio4KmA4Kir4KmI4Ki44KifIOCoteCpiOCosuCor+CpguConOCovCDgqJXgqYHgqJ0g4Ki14KmAIOCoueCpi+Coo+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0IiBtc2dpZD0iMTQ2MTg5MzM1MTI3ODk0MDQxNiI+ImZyZWVmb3JtIHdpbmRvd3Mg4Kio4KmC4KmwIOCor+Cpi+ColyDgqKzgqKPgqL7gqJMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5IiBtc2dpZD0iMjI1MjU2MzQ5NzQ4NTQzNjUzNCI+IuCoquCpjeCosOCor+Cpi+Col+CovuCopOCoruColSBmcmVlZm9ybSB3aW5kb3dzIOCosuCoiCDgqLjgqK7gqLDgqKXgqKgg4Kio4KmC4KmwIOCor+Cpi+ColyDgqKzgqKPgqL7gqIngqILgqKbgqYAg4Ki54KmI4KWkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+IuCooeCpiOCouOColeCon+CpjOCoqiDgqKzgqYjgqJXgqIXgqKog4Kiq4Ki+4Ki44Ki14Kiw4KihIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiLgqKHgqYjgqLjgqJXgqJ/gqYzgqKog4Kiq4KmC4Kiw4KmHIOCorOCpiOColeCoheCoquCouCDgqIfgqLgg4Ki14KmH4Kiy4KmHIOCouOCpgeCosOCpseColuCov+CoheCopCDgqKjgqLngqYDgqIIg4Ki54KioIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfY2hhbmdlIiBtc2dpZD0iMjczMTE2MzQyNTA4MTE3MjYzOCI+IuCooeCpiOCouOColeCon+CpjOCoqiDgqKrgqYLgqLDgqYcg4Kis4KmI4KiV4KiF4Kiq4Ki4IOCosuCoiCDgqKrgqL7gqLjgqLXgqLDgqKEg4Kis4Kim4Kiy4KijIOConOCovuCogiDgqLngqJ/gqL7gqIngqKMg4Kiy4KiIIOCom+Cpi+CoueCoteCpiyI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtcGwvYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtcGwvYXJyYXlzLnhtbAppbmRleCA4ZGYyNmNkLi4zYjNlOTVkIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXBsL2FycmF5cy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1wbC9hcnJheXMueG1sCkBAIC01OSwyMyArNTksMjYgQEAKICAgICA8aXRlbSBtc2dpZD0iNDUwNzU2MzEyMzEyMTI3MzIiPiJaYXdzemUgdcW8eXdhaiBzcHJhd2R6YW5pYSBIRENQIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjQgS0IiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTYgS0IiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMSBNQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0IE1CIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2IE1CIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+Ild5xYIuIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTU5MzI4OTM3NjUwMjMxMjkyMyI+IjY0wqBLQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IjI1NsKgS0IiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4iMcKgTUIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxODA4ODM3NzQ1MDk0NzY1NDEiPiI0wqBNQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI4MDMxOTkxMDI1ODkxMjY5MzgiPiIxNsKgTUIiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI1MjQ3OTkzOTU3NzA2MTAxNTQiPiI2NCBLQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiIyNTYgS0IiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMSBNQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwODk0NzA3MjA0NTEwNjgzNjQiPiJXecWCLiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NMKgS0IiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2wqBLQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxwqBNQiI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+IjY0IEtCL2J1Zm9yIGR6aWVubmlrYSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiIyNTYgS0IvYnVmb3IgZHppZW5uaWthIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjY5OTMwNjE5ODM1NzQ5NjczMSI+IjEgTUIvYnVmb3IgZHppZW5uaWthIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+IjQgTUIvYnVmb3IgZHppZW5uaWthIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+IjE2IE1CL2J1Zm9yIGR6aWVubmlrYSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY5MjEwNDg4Mjk3OTExNzkzMzEiPiJXecWCLiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI5Njk0NTgwMjkzNDQ3NTAyNjIiPiI2NMKgS0IvYnVmb3IgZHppZW5uaWthIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+IjI1NsKgS0IvYnVmb3IgZHppZW5uaWthIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTMxNDIzNDI5OTU1MjI1NDYyMSI+IjHCoE1CL2J1Zm9yIGR6aWVubmlrYSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM2MDYwNDc3ODA3OTI4OTQxNTEiPiI0wqBNQi9idWZvciBkemllbm5pa2EiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4iMTbCoE1CL2J1Zm9yIGR6aWVubmlrYSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9IndpbmRvd19hbmltYXRpb25fc2NhbGVfZW50cmllcyI+CiAgICAgPGl0ZW0gbXNnaWQ9IjgxMzQxNTY1OTkzNzA4MjQwODEiPiJBbmltYWNqYSB3ecWCxIVjem9uYSI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXBsL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1wbC9zdHJpbmdzLnhtbAppbmRleCBkNTgwNzBlLi45ZjdjMDIyIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXBsL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtcGwvc3RyaW5ncy54bWwKQEAgLTI0Nyw2ICsyNDcsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiJQb3p3YWxhIG5hIHphcGlzIGFwbGlrYWNqaSB3IHBhbWnEmWNpIHpld24uIG5pZXphbGXFvG5pZSBvZCB3YXJ0b8WbY2kgdyBwbGlrdSBtYW5pZmVzdHUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiJXeW11xZsgem1pYW7EmSByb3ptaWFydSBva2llbiBha3R5d25vxZtjaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4iVW1vxbxsaXdpYSB6bWlhbsSZIHJvem1pYXJ1IHdzenlzdGtpY2ggb2tpZW4gYWt0eXdub8WbY2kgdyB0cnliaWUgd2llbHUgb2tpZW4gbmllemFsZcW8bmllIG9kIHVzdGF3aWXFhCB3IHBsaWt1IG1hbmlmZXN0dS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydCIgbXNnaWQ9IjE0NjE4OTMzNTEyNzg5NDA0MTYiPiJXxYLEhWN6IGRvd29sbnkgcm96bWlhciBva2llbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkiIG1zZ2lkPSIyMjUyNTYzNDk3NDg1NDM2NTM0Ij4iV8WCxIVjemEgb2JzxYJ1Z8SZIGVrc3BlcnltZW50YWxuZWogZnVua2NqaSBkb3dvbG5lZ28gcm96bWlhcnUgb2tpZW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+Ikhhc8WCbyBrb3BpaSB6YXBhc293ZWoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9ub25lIiBtc2dpZD0iNjk1MTA5NTQ4NTUzNzc2Nzk1NiI+IlBlxYJuZSBrb3BpZSB6YXBhc293ZSBuYSBrb21wdXRlcnplIG5pZSBzxIUgb2JlY25pZSBjaHJvbmlvbmUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4iV3liaWVyeiwgYWJ5IHptaWVuacSHIGx1YiB1c3VuxIXEhyBoYXPFgm8gcGXFgm55Y2gga29waWkgemFwYXNvd3ljaCBuYSBrb21wdXRlcnplIHN0YWNqb25hcm55bS4iPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXB0LXJCUi9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1wdC1yQlIvYXJyYXlzLnhtbAppbmRleCBkOGJlMjUxLi4wZDk0YTZkIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXB0LXJCUi9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtcHQtckJSL2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+IlNlbXByZSB1c2FyIGEgdmVyaWZpY2HDp8OjbyBIRENQIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjQgSyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NiBLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+IjEgTSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0IE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTYgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiJEZXNhdGl2YWRvIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTU5MzI4OTM3NjUwMjMxMjkyMyI+IjY0IEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0ODc1NDUzNDAyMzYxNDUzMjQiPiIyNTYgSyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI0MjM1Mjg2NzUyOTQzMzM4MzEiPiIxIE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxODA4ODM3NzQ1MDk0NzY1NDEiPiI0IE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyODAzMTk5MTAyNTg5MTI2OTM4Ij4iMTYgTSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfbG93cmFtX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUyNDc5OTM5NTc3MDYxMDE1NCI+IjY0IEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzNTM0NzgyNzExMDQ1MjYyMzQ0Ij4iMjU2IEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMSBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjA4OTQ3MDcyMDQ1MTA2ODM2NCI+IkRlc2F0aXZhZG8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0NjIyNDYwMzMzMDM4NTg2NzkxIj4iNjQgSyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIyMTIxMjU2MjUxNjk1ODIzMzAiPiIyNTYgSyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxIE0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiI2NEsvYnVmZmVyIGRlIGxvZyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiIyNTZLL2J1ZmZlciBkZSBsb2ciPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4iMU0vYnVmZmVyIGRlIGxvZyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjU3NDg1Mjg2NDM5Mzc1MDAzNDkiPiI0TS9idWZmZXIgZGUgbG9nIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+IjE2TS9idWZmZXIgZGUgbG9nIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+IkRlc2F0aXZhZG8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4iNjQgSy9idWZmZXIgZGUgbG9nIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+IjI1NiBLL2J1ZmZlciBkZSBsb2ciPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4iMSBNL2J1ZmZlciBkZSBsb2ciPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4iNCBNL2J1ZmZlciBkZSBsb2ciPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4iMTYgTS9idWZmZXIgZGUgbG9nIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+IkFuaW1hw6fDo28gZGVzbGlnYWRhIjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtcHQtckJSL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1wdC1yQlIvc3RyaW5ncy54bWwKaW5kZXggM2IyODA0My4uZGQ0YjU4ZCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1wdC1yQlIvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1wdC1yQlIvc3RyaW5ncy54bWwKQEAgLTI0Nyw2ICsyNDcsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX2FsbG93X29uX2V4dGVybmFsX3N1bW1hcnkiIG1zZ2lkPSIzMTkxOTUyNTA1ODYwMzQzMjMzIj4iUXVhbGlmaWNhIGFwcHMgcC8gZ3JhdmHDp8OjbyBlbSBhcm1hemVuYW1lbnRvIGV4dGVybm8sIGluZGVwZW5kZW50ZW1lbnRlIGRlIHZhbG9yZXMgZGUgbWFuaWZlc3RvcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzIiBtc2dpZD0iODYxNTc2NDM3ODE0NzgyNDk4NSI+IkZvcsOnYXIgYXRpdmlkYWRlcyBhIHNlcmVtIHJlZGltZW5zaW9uw6F2ZWlzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXNfc3VtbWFyeSIgbXNnaWQ9IjQ1MDgyMTc0NzY5OTcxODIyMTYiPiJUb3JuYSB0b2RhcyBhcyBhdGl2aWRhZGVzIHJlZGltZW5zaW9uw6F2ZWlzIHBhcmEgdsOhcmlhcyBqYW5lbGFzLCBpbmRlcGVuZGVudGVtZW50ZSBkb3MgdmFsb3JlcyBkbyBtYW5pZmVzdG8uIjwvc3RyaW5nPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0ICgxNDYxODkzMzUxMjc4OTQwNDE2KSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkgKDIyNTI1NjM0OTc0ODU0MzY1MzQpIC0tPgorICAgIDxza2lwIC8+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4iU2VuaGEgZG8gYmFja3VwIGxvY2FsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiJPcyBiYWNrdXBzIGNvbXBsZXRvcyBkbyBjb21wdXRhZG9yIG7Do28gZXN0w6NvIHByb3RlZ2lkb3Mgbm8gbW9tZW50byI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiJUb3F1ZSBwYXJhIGFsdGVyYXIgb3UgcmVtb3ZlciBhIHNlbmhhIGRlIGJhY2t1cHMgY29tcGxldG9zIGRvIGRlc2t0b3AiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXB0LXJQVC9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1wdC1yUFQvYXJyYXlzLnhtbAppbmRleCA2OTM0MzBjLi42ZTg0ZmNlIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXB0LXJQVC9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtcHQtclBUL2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+IlV0aWxpemFyIHNlbXByZSBhIHZlcmlmaWNhw6fDo28gSERDUCI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iMzEwMDUzNDg3NDUyOTI0MDI5MSI+IjY0IEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTYgSyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjYzNjEyODY5MjQyNjg3MTYzOTciPiIxIE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2NDA1MjAzMjM5NTYwNjk1MjY2Ij4iNCBNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2IE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4NjY1MjA2MTk5MjA5Njk4NTAxIj4iRGVzYXRpdmFkbyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NCBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU2IEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4iMSBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNCBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2IE0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI1MjQ3OTkzOTU3NzA2MTAxNTQiPiI2NCBLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1NiBLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODA4NTg2NzIwOTIwMjE1MzQwMyI+IjEgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwODk0NzA3MjA0NTEwNjgzNjQiPiJEZXNhdGl2YWRvIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDYyMjQ2MDMzMzAzODU4Njc5MSI+IjY0IEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2IEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNzA0OTQ2NzY2Njk5MjQyNjUzIj4iMSBNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9zdW1tYXJpZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI3MzQ2NTk1NDczNTg4NzY1MDE5Ij4iTWVtLiBpbnQuIDY0SyBwIHJnLiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiJNZW0uIGludC4gMjU2SyBwIHJnIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjY5OTMwNjE5ODM1NzQ5NjczMSI+Ik1lbS4gaW50LiAxTSBwIHJlZy4iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1NzQ4NTI4NjQzOTM3NTAwMzQ5Ij4iTWVtLiBpbnQuIDRNIHAgcmVnLiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiJNZW0uIGludC4gMTZNIHAuIHJnIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+IkRlc2F0aXZhZG8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4iNjQgSyBwb3IgYnVmZmVyIGRlIHJlZ2lzdG8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzQyMjg1MTE1NjY1Njk4MTY4Ij4iMjU2IEsgcG9yIGJ1ZmZlciBkZSByZWdpc3RvIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTMxNDIzNDI5OTU1MjI1NDYyMSI+IjEgTSBwb3IgYnVmZmVyIGRlIHJlZ2lzdG8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4iNCBNIHBvciBidWZmZXIgZGUgcmVnaXN0byI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU0MzEzNTQ5NTY4NTY2NTUxMjAiPiIxNiBNIHBvciBidWZmZXIgZGUgcmVnaXN0byI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9IndpbmRvd19hbmltYXRpb25fc2NhbGVfZW50cmllcyI+CiAgICAgPGl0ZW0gbXNnaWQ9IjgxMzQxNTY1OTkzNzA4MjQwODEiPiJBbmltYcOnw6NvIGRlc2F0aXZhZGEiPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1wdC1yUFQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXB0LXJQVC9zdHJpbmdzLnhtbAppbmRleCBjNWY5NGNiLi4wY2JlNWU0IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXB0LXJQVC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXB0LXJQVC9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0Nyw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+IlF1YWxxdWVyIGFwbGljLiBwb2RlIHNlciBncmF2YWRhIG5vIGFybS4gZXh0LiwgaW5kZXBlbmQuIGRvcyB2YWxvcmVzIGRvIG1hbmlmLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzIiBtc2dpZD0iODYxNTc2NDM3ODE0NzgyNDk4NSI+IkZvcsOnYXIgYXMgYXRpdmlkYWRlcyBhIHNlcmVtIHJlZGltZW5zaW9uw6F2ZWlzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXNfc3VtbWFyeSIgbXNnaWQ9IjQ1MDgyMTc0NzY5OTcxODIyMTYiPiJUb3JuYSB0b2RhcyBhcyBhdGl2aWRhZGVzIHJlZGltZW5zaW9uw6F2ZWlzIHBhcmEgdsOhcmlhcyBqYW5lbGFzLCBpbmRlcGVuZGVudGVtZW50ZSBkb3MgdmFsb3JlcyBkbyBtYW5pZmVzdG8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnQiIG1zZ2lkPSIxNDYxODkzMzUxMjc4OTQwNDE2Ij4iQXRpdmFyIGphbmVsYXMgZGUgZm9ybWEgbGl2cmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5IiBtc2dpZD0iMjI1MjU2MzQ5NzQ4NTQzNjUzNCI+IkF0aXZhIGEgY29tcGF0aWJpbGlkYWRlIGNvbSBqYW5lbGFzIGRlIGZvcm1hIGxpdnJlIGV4cGVyaW1lbnRhaXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+IlBhbGF2cmEtcGFzc2UgY8OzcGlhIGRvIGNvbXAuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiJBcyBjw7NwaWFzIGRlIHNlZ3VyYW7Dp2EgY29tcGxldGFzIG5vIGFtYmllbnRlIGRlIHRyYWJhbGhvIG7Do28gZXN0w6NvIGF0dWFsbWVudGUgcHJvdGVnaWRhcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiJUb3F1ZSBwYXJhIGFsdGVyYXIgb3UgcmVtb3ZlciBhIHBhbGF2cmEtcGFzc2UgcGFyYSBjw7NwaWFzIGRlIHNlZ3VyYW7Dp2EgY29tcGxldGFzIG5vIGFtYmllbnRlIGRlIHRyYWJhbGhvIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1wdC9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1wdC9hcnJheXMueG1sCmluZGV4IGQ4YmUyNTEuLjBkOTRhNmQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtcHQvYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXB0L2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+IlNlbXByZSB1c2FyIGEgdmVyaWZpY2HDp8OjbyBIRENQIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjQgSyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NiBLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+IjEgTSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0IE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTYgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiJEZXNhdGl2YWRvIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTU5MzI4OTM3NjUwMjMxMjkyMyI+IjY0IEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0ODc1NDUzNDAyMzYxNDUzMjQiPiIyNTYgSyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI0MjM1Mjg2NzUyOTQzMzM4MzEiPiIxIE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxODA4ODM3NzQ1MDk0NzY1NDEiPiI0IE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyODAzMTk5MTAyNTg5MTI2OTM4Ij4iMTYgTSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfbG93cmFtX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUyNDc5OTM5NTc3MDYxMDE1NCI+IjY0IEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzNTM0NzgyNzExMDQ1MjYyMzQ0Ij4iMjU2IEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMSBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjA4OTQ3MDcyMDQ1MTA2ODM2NCI+IkRlc2F0aXZhZG8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0NjIyNDYwMzMzMDM4NTg2NzkxIj4iNjQgSyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIyMTIxMjU2MjUxNjk1ODIzMzAiPiIyNTYgSyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxIE0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiI2NEsvYnVmZmVyIGRlIGxvZyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiIyNTZLL2J1ZmZlciBkZSBsb2ciPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4iMU0vYnVmZmVyIGRlIGxvZyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjU3NDg1Mjg2NDM5Mzc1MDAzNDkiPiI0TS9idWZmZXIgZGUgbG9nIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+IjE2TS9idWZmZXIgZGUgbG9nIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+IkRlc2F0aXZhZG8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4iNjQgSy9idWZmZXIgZGUgbG9nIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+IjI1NiBLL2J1ZmZlciBkZSBsb2ciPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4iMSBNL2J1ZmZlciBkZSBsb2ciPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4iNCBNL2J1ZmZlciBkZSBsb2ciPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4iMTYgTS9idWZmZXIgZGUgbG9nIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+IkFuaW1hw6fDo28gZGVzbGlnYWRhIjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtcHQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXB0L3N0cmluZ3MueG1sCmluZGV4IDNiMjgwNDMuLmRkNGI1OGQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtcHQvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1wdC9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0NywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiJRdWFsaWZpY2EgYXBwcyBwLyBncmF2YcOnw6NvIGVtIGFybWF6ZW5hbWVudG8gZXh0ZXJubywgaW5kZXBlbmRlbnRlbWVudGUgZGUgdmFsb3JlcyBkZSBtYW5pZmVzdG9zIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4iRm9yw6dhciBhdGl2aWRhZGVzIGEgc2VyZW0gcmVkaW1lbnNpb27DoXZlaXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllc19zdW1tYXJ5IiBtc2dpZD0iNDUwODIxNzQ3Njk5NzE4MjIxNiI+IlRvcm5hIHRvZGFzIGFzIGF0aXZpZGFkZXMgcmVkaW1lbnNpb27DoXZlaXMgcGFyYSB2w6FyaWFzIGphbmVsYXMsIGluZGVwZW5kZW50ZW1lbnRlIGRvcyB2YWxvcmVzIGRvIG1hbmlmZXN0by4iPC9zdHJpbmc+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnQgKDE0NjE4OTMzNTEyNzg5NDA0MTYpIC0tPgorICAgIDxza2lwIC8+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnRfc3VtbWFyeSAoMjI1MjU2MzQ5NzQ4NTQzNjUzNCkgLS0+CisgICAgPHNraXAgLz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF90aXRsZSIgbXNnaWQ9IjM4NjA0NzE2NTQ0Mzk0MTg4MjIiPiJTZW5oYSBkbyBiYWNrdXAgbG9jYWwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9ub25lIiBtc2dpZD0iNjk1MTA5NTQ4NTUzNzc2Nzk1NiI+Ik9zIGJhY2t1cHMgY29tcGxldG9zIGRvIGNvbXB1dGFkb3IgbsOjbyBlc3TDo28gcHJvdGVnaWRvcyBubyBtb21lbnRvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfY2hhbmdlIiBtc2dpZD0iMjczMTE2MzQyNTA4MTE3MjYzOCI+IlRvcXVlIHBhcmEgYWx0ZXJhciBvdSByZW1vdmVyIGEgc2VuaGEgZGUgYmFja3VwcyBjb21wbGV0b3MgZG8gZGVza3RvcCI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtcm8vYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtcm8vYXJyYXlzLnhtbAppbmRleCBmNzUxNTRmLi4xNDFmODc3IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXJvL2FycmF5cy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1yby9hcnJheXMueG1sCkBAIC01OSwyMyArNTksMjYgQEAKICAgICA8aXRlbSBtc2dpZD0iNDUwNzU2MzEyMzEyMTI3MzIiPiJVdGlsaXplYXrEgyDDrm50b3RkZWF1bmEgdmVyaWZpY2FyZWEgSERDUCI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iMzEwMDUzNDg3NDUyOTI0MDI5MSI+IjY0SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMU0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2NDA1MjAzMjM5NTYwNjk1MjY2Ij4iNE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTZNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+IkRlemFjdGl2YXTEgyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NCBLQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IjI1NiBLQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI0MjM1Mjg2NzUyOTQzMzM4MzEiPiIxIE1CIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNCBNQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI4MDMxOTkxMDI1ODkxMjY5MzgiPiIxNiBNQiI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfbG93cmFtX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUyNDc5OTM5NTc3MDYxMDE1NCI+IjY0IEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzNTM0NzgyNzExMDQ1MjYyMzQ0Ij4iMjU2IEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMSBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjA4OTQ3MDcyMDQ1MTA2ODM2NCI+IkRlemFjdGl2YXTEgyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NCBLQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIyMTIxMjU2MjUxNjk1ODIzMzAiPiIyNTYgS0IiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNzA0OTQ2NzY2Njk5MjQyNjUzIj4iMSBNQiI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+IjY0Sy90YW1wb24ganVybmFsIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMjgyMjMwOTc0NzY3NTc1ODYyOCI+IjI1NksvdGFtcG9uIGp1cm5hbCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiIxTS90YW1wb24ganVybmFsIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+IjRNL3RhbXBvbiBqdXJuYWwiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxOTc4NjI5MDUxMDg1MTExNTkyIj4iMTZNL3RhbXBvbiBqdXJuYWwiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4iRGV6YWN0aXZhdMSDIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjk2OTQ1ODAyOTM0NDc1MDI2MiI+IjY0IEtCL3pvbsSDLXRhbXBvbiBkZSDDrm5yZWdpc3RyxINyaSDDrm4ganVybmFsIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+IjI1NiBLQi96b27Egy10YW1wb24gZGUgw65ucmVnaXN0csSDcmkgw65uIGp1cm5hbCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiIxIE1CL3pvbsSDLXRhbXBvbiBkZSDDrm5yZWdpc3RyxINyaSDDrm4ganVybmFsIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+IjQgTUIvem9uxIMtdGFtcG9uIGRlIMOubnJlZ2lzdHLEg3JpIMOubiBqdXJuYWwiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4iMTYgTUIvem9uxIMtdGFtcG9uIGRlIMOubnJlZ2lzdHLEg3JpIMOubiBqdXJuYWwiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4iQW5pbWHIm2llIGRlemFjdGl2YXTEgyI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXJvL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1yby9zdHJpbmdzLnhtbAppbmRleCBjNzZmYWYwLi5hNjY2ZGEwIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXJvL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtcm8vc3RyaW5ncy54bWwKQEAgLTI0Nyw2ICsyNDcsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX2FsbG93X29uX2V4dGVybmFsX3N1bW1hcnkiIG1zZ2lkPSIzMTkxOTUyNTA1ODYwMzQzMjMzIj4iRmFjZSBvcmljZSBhcGxpY2HIm2llIGVsaWdpYmlsxIMgc8SDIGZpZSBzY3Jpc8SDIMOubiBzdG9jYXJlYSBleHRlcm7EgywgaW5kaWZlcmVudCBkZSB2YWxvcmlsZSBtYW5pZmVzdHVsdWkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiJGb3LIm2HIm2kgcmVkaW1lbnNpb25hcmVhIGFjdGl2aXTEg8ibaWxvciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4iUGVybWl0ZSByZWRpbWVuc2lvbmFyZWEgdHV0dXJvciBhY3Rpdml0xIPIm2lsb3IgcGVudHJ1IG1vZHVsIGN1IGZlcmVzdHJlIG11bHRpcGxlLCBpbmRpZmVyZW50IGRlIHZhbG9yaWxlIG1hbmlmZXN0dWx1aS4iPC9zdHJpbmc+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnQgKDE0NjE4OTMzNTEyNzg5NDA0MTYpIC0tPgorICAgIDxza2lwIC8+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnRfc3VtbWFyeSAoMjI1MjU2MzQ5NzQ4NTQzNjUzNCkgLS0+CisgICAgPHNraXAgLz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF90aXRsZSIgbXNnaWQ9IjM4NjA0NzE2NTQ0Mzk0MTg4MjIiPiJQYXJvbMSDIGNvcGllIHJlei4gZGVza3RvcCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4iw45uIHByZXplbnQsIGNvcGlpbGUgZGUgcmV6ZXJ2xIMgY29tcGxldGUgcGUgZGVza3RvcCBudSBzdW50IHByb3RlamF0ZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiJBdGluZ2XFo2kgcGVudHJ1IGEgbW9kaWZpY2Egc2F1IHBlbnRydSBhIGVsaW1pbmEgcGFyb2xhIHBlbnRydSBjb3BpaWxlIGRlIHJlemVydsSDIGNvbXBsZXRlIHBlIGRlc2t0b3AiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXJ1L2FycmF5cy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXJ1L2FycmF5cy54bWwKaW5kZXggYzhjNzg5ZS4uNzg5NjVhYyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1ydS9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtcnUvYXJyYXlzLnhtbApAQCAtNTksMjMgKzU5LDI2IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjQ1MDc1NjMxMjMxMjEyNzMyIj4i0JLRgdC10LPQtNCwINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQv9GA0L7QstC10YDQutGDIEhEQ1AiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMxMDA1MzQ4NzQ1MjkyNDAyOTEiPiI2NMKg0JrQkSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NsKg0JrQkSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjYzNjEyODY5MjQyNjg3MTYzOTciPiIxwqDQnNCRIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjQwNTIwMzIzOTU2MDY5NTI2NiI+IjTCoNCc0JEiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTbCoNCc0JEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4NjY1MjA2MTk5MjA5Njk4NTAxIj4i0JLRi9C60LsuIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTU5MzI4OTM3NjUwMjMxMjkyMyI+IjY0wqDQmtCRIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU2wqDQmtCRIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjHCoNCc0JEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxODA4ODM3NzQ1MDk0NzY1NDEiPiI0wqDQnNCRIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2wqDQnNCRIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjTCoNCa0JEiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzNTM0NzgyNzExMDQ1MjYyMzQ0Ij4iMjU2wqDQmtCRIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODA4NTg2NzIwOTIwMjE1MzQwMyI+IjHCoNCc0JEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4i0JLRi9C60LsuIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDYyMjQ2MDMzMzAzODU4Njc5MSI+IjY0wqDQmtCRIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+IjI1NsKg0JrQkSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxwqDQnNCRIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9zdW1tYXJpZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI3MzQ2NTk1NDczNTg4NzY1MDE5Ij4i0JHRg9GE0LXRgDog0LzQsNC60YEuIDY0wqDQmtCRIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMjgyMjMwOTc0NzY3NTc1ODYyOCI+ItCR0YPRhNC10YA6INC80LDQutGBLiAyNTbCoNCa0JEiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4i0JHRg9GE0LXRgDog0LzQsNC60YEuIDHCoNCc0JEiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1NzQ4NTI4NjQzOTM3NTAwMzQ5Ij4i0JHRg9GE0LXRgDog0LzQsNC60YEuIDTCoNCc0JEiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxOTc4NjI5MDUxMDg1MTExNTkyIj4i0JHRg9GE0LXRgDog0LzQsNC60YEuIDE2wqDQnNCRIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+ItCS0YvQutC7LiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI5Njk0NTgwMjkzNDQ3NTAyNjIiPiLQkdGD0YTQtdGAOiDQvNCw0LrRgS4gNjTCoNCa0JEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzQyMjg1MTE1NjY1Njk4MTY4Ij4i0JHRg9GE0LXRgDog0LzQsNC60YEuIDI1NsKg0JrQkSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiLQkdGD0YTQtdGAOiDQvNCw0LrRgS4gMcKg0JzQkSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM2MDYwNDc3ODA3OTI4OTQxNTEiPiLQkdGD0YTQtdGAOiDQvNCw0LrRgS4gNMKg0JzQkSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU0MzEzNTQ5NTY4NTY2NTUxMjAiPiLQkdGD0YTQtdGAOiDQvNCw0LrRgS4gMTbCoNCc0JEiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4i0JHQtdC3INCw0L3QuNC80LDRhtC40LgiPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1ydS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtcnUvc3RyaW5ncy54bWwKaW5kZXggZjFjZDE4Mi4uZTkzYmFlMSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1ydS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXJ1L3N0cmluZ3MueG1sCkBAIC0yNDcsNiArMjQ3LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+ItCg0LDQt9GA0LXRiNCw0LXRgiDRgdC+0YXRgNCw0L3QtdC90LjQtSDQv9GA0LjQu9C+0LbQtdC90LjQuSDQvdCwINCy0L3QtdGI0L3QuNC1INC90LDQutC+0L/QuNGC0LXQu9C4INC90LXQt9Cw0LLQuNGB0LjQvNC+INC+0YIg0LfQvdCw0YfQtdC90LjRjyDQvNCw0L3QuNGE0LXRgdGC0LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiLQmNC30LzQtdC90LXQvdC40LUg0YDQsNC30LzQtdGA0LAg0LIg0LzQvdC+0LPQvtC+0LrQvtC90L3QvtC8INGA0LXQttC40LzQtSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4i0J/QvtC30LLQvtC70Y/QtdGCINC80LXQvdGP0YLRjCDRgNCw0LfQvNC10YAg0LIg0LzQvdC+0LPQvtC+0LrQvtC90L3QvtC8INGA0LXQttC40LzQtSAo0L3QtdC30LDQstC40YHQuNC80L4g0L7RgiDQt9C90LDRh9C10L3QuNC5INC80LDQvdC40YTQtdGB0YLQsCkiPC9zdHJpbmc+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnQgKDE0NjE4OTMzNTEyNzg5NDA0MTYpIC0tPgorICAgIDxza2lwIC8+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnRfc3VtbWFyeSAoMjI1MjU2MzQ5NzQ4NTQzNjUzNCkgLS0+CisgICAgPHNraXAgLz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF90aXRsZSIgbXNnaWQ9IjM4NjA0NzE2NTQ0Mzk0MTg4MjIiPiLQn9Cw0YDQvtC70Ywg0LTQu9GPINGA0LXQt9C10YDQstC90L7Qs9C+INC60L7Qv9C40YDQvtCy0LDQvdC40Y8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9ub25lIiBtc2dpZD0iNjk1MTA5NTQ4NTUzNzc2Nzk1NiI+ItCf0L7Qu9C90YvQtSDRgNC10LfQtdGA0LLQvdGL0LUg0LrQvtC/0LjQuCDQsiDQvdCw0YHRgtC+0Y/RidC10LUg0LLRgNC10LzRjyDQvdC1INC30LDRidC40YnQtdC90YsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4i0JjQt9C80LXQvdC40YLRjCDQuNC70Lgg0YPQtNCw0LvQuNGC0Ywg0L/QsNGA0L7Qu9GMINC00LvRjyDRgNC10LfQtdGA0LLQvdC+0LPQviDQutC+0L/QuNGA0L7QstCw0L3QuNGPIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1zaS1yTEsvYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtc2ktckxLL2FycmF5cy54bWwKaW5kZXggNTY0ZWNlZS4uYWIzMGU0NSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1zaS1yTEsvYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXNpLXJMSy9hcnJheXMueG1sCkBAIC01OSwyMyArNTksMjYgQEAKICAgICA8aXRlbSBtc2dpZD0iNDUwNzU2MzEyMzEyMTI3MzIiPiLgt4Pgt5Dgtrjgt4Dgt5LgtqfgtrggSERDUCDgtrTgt5Lgtrvgt5Lgtprgt4rgt4Pgt5Tgtrgg4La34LeP4LeA4LeS4Lat4LePIOC2muC2u+C2seC3iuC2sSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iMzEwMDUzNDg3NDUyOTI0MDI5MSI+IjY0SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMU0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2NDA1MjAzMjM5NTYwNjk1MjY2Ij4iNE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTZNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+IuC2muC3iuKAjeC2u+C3kuC2uuC3j+C3gOC3kuC2u+C3hOC3kuC2reC2uiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0ODc1NDUzNDAyMzYxNDUzMjQiPiIyNTZLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjFNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyODAzMTk5MTAyNTg5MTI2OTM4Ij4iMTZNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjRLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMU0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4i4Laa4LeK4oCN4La74LeS4La64LeP4LeA4LeS4La74LeE4LeS4Lat4La6IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDYyMjQ2MDMzMzAzODU4Njc5MSI+IjY0SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIyMTIxMjU2MjUxNjk1ODIzMzAiPiIyNTZLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTcwNDk0Njc2NjY5OTI0MjY1MyI+IjFNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9zdW1tYXJpZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI3MzQ2NTk1NDczNTg4NzY1MDE5Ij4i4La94Lec4LacIOC2heC2seC3iuC2reC2u+C3j+C3gOC2muC2pyA2NEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyODIyMzA5NzQ3Njc1NzU4NjI4Ij4i4La94Lec4LacIOC2heC2seC3iuC2reC2u+C3j+C3gOC2muC2pyAyNTZLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjY5OTMwNjE5ODM1NzQ5NjczMSI+IuC2veC3nOC2nCDgtoXgtrHgt4rgtq3gtrvgt4/gt4DgtprgtqcgMU0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1NzQ4NTI4NjQzOTM3NTAwMzQ5Ij4i4La94Lec4LacIOC2heC2seC3iuC2reC2u+C3j+C3gOC2muC2pyA0TSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiLgtr3gt5zgtpwg4LaF4Lax4LeK4Lat4La74LeP4LeA4Laa4LanIDE2TSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY5MjEwNDg4Mjk3OTExNzkzMzEiPiLgtprgt4rigI3gtrvgt5Lgtrrgt4/gt4Dgt5Lgtrvgt4Tgt5Lgtq3gtroiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4i4La94Lec4LacIOC2heC2seC3iuC2reC2u+C3j+C3gOC2muC2pyA2NEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzQyMjg1MTE1NjY1Njk4MTY4Ij4i4La94Lec4LacIOC2heC2seC3iuC2reC2u+C3j+C3gOC2muC2pyAyNTZLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTMxNDIzNDI5OTU1MjI1NDYyMSI+IuC2veC3nOC2nCDgtoXgtrHgt4rgtq3gtrvgt4/gt4DgtprgtqcgMU0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4i4La94Lec4LacIOC2heC2seC3iuC2reC2u+C3j+C3gOC2muC2pyA0TSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU0MzEzNTQ5NTY4NTY2NTUxMjAiPiLgtr3gt5zgtpwg4LaF4Lax4LeK4Lat4La74LeP4LeA4Laa4LanIDE2TSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9IndpbmRvd19hbmltYXRpb25fc2NhbGVfZW50cmllcyI+CiAgICAgPGl0ZW0gbXNnaWQ9IjgxMzQxNTY1OTkzNzA4MjQwODEiPiLgt4PgtqLgt5Lgt4Dgt5Lgtprgtrvgtqvgtrog4LaF4Laa4LeK4oCN4La74LeS4La6IOC2muC3kuC2u+C3k+C2uCI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXNpLXJMSy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtc2ktckxLL3N0cmluZ3MueG1sCmluZGV4IGViMTNjZTQuLjY3NTM2MjQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtc2ktckxLL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtc2ktckxLL3N0cmluZ3MueG1sCkBAIC0yNDcsNiArMjQ3LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+IuC2uOC3kOC2seC3kuC3huC3meC3g+C3iuC2p+C3iiDgtoXgtpzgtrrgtrHgt4og4Lax4Lec4LeD4La94Laa4LePLCDgtpXgtrHgt5Hgtrgg4La64LeZ4Lav4LeU4La44Laa4LeKIOC2heC2t+C3iuKAjeC2uuC2seC3iuC2reC2uyDgtpzgtrbgtqngt4/gt4Dgtqcg4La94LeS4LeA4LeT4La44LanIOC3g+C3lOC2r+C3lOC3g+C3lOC2muC2uOC3iiDgtr3gtrbgt48g4Lav4LeZ4La64LeSIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4i4Laa4LeK4oCN4La74LeS4La64LeP4Laa4LeP4La74Laa4La44LeKIOC2tOC3iuKAjeC2u+C2reC3kuC2tOC3iuKAjeC2u+C2uOC3j+C2qyDgtprgt4Ug4LeE4LeQ4Laa4LeSIOC2tuC3gOC2pyDgtrbgtr0g4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXNfc3VtbWFyeSIgbXNnaWQ9IjQ1MDgyMTc0NzY5OTcxODIyMTYiPiLgtrjgt5DgtrHgt5Lgt4bgt5ngt4Pgt4rgtqfgt4og4LaF4Lac4La64Lax4LeKIOC2seC3nOC3g+C2veC2muC3jywg4LeD4LeS4La64La94LeUIOC2muC3iuKAjeC2u+C3kuC2uuC3j+C2muC3j+C2u+C2muC2uOC3iiDgtrbgt4Tgt5Qt4Laa4LeA4LeU4LeF4LeUIOC3g+C2s+C3hOC3jyDgtrTgt4rigI3gtrvgtq3gt5LgtrTgt4rigI3gtrvgtrjgt4/gtqsg4Laa4LeFIOC3hOC3kOC2muC3kiDgtrbgt4Dgtqcg4La04Lat4LeKIOC2muC2u+C2uuC3ki4iPC9zdHJpbmc+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnQgKDE0NjE4OTMzNTEyNzg5NDA0MTYpIC0tPgorICAgIDxza2lwIC8+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnRfc3VtbWFyeSAoMjI1MjU2MzQ5NzQ4NTQzNjUzNCkgLS0+CisgICAgPHNraXAgLz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF90aXRsZSIgbXNnaWQ9IjM4NjA0NzE2NTQ0Mzk0MTg4MjIiPiLgtqngt5ngt4Pgt4rgtprgt4rgtqfgt5zgtrTgt4og4LaL4La04LeD4LeK4LauIOC2uOC3lOC2u+C2tOC2r+C2uiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4i4Lap4LeZ4LeD4LeK4Laa4LeK4Lan4Lec4La04LeKIOC3g+C2uOC3iuC2tOC3luC2u+C3iuC2qyDgtovgtrTgt4Pgt4rgtq4g4Lav4LeQ4Lax4LanIOC2huC2u+C2muC3iuC3guC3jyDgtprgtrsg4Lax4Lec4La44LeQ4LatIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfY2hhbmdlIiBtc2dpZD0iMjczMTE2MzQyNTA4MTE3MjYzOCI+IuC2qeC3meC3g+C3iuC2muC3iuC2p+C3nOC2tOC3iiDgt4Pgtrjgt4rgtrTgt5bgtrvgt4rgtqsg4LaL4La04LeD4LeK4LauIOC3g+C2s+C3hOC3jyDgtrjgt5TgtrvgtrTgtq/gtrog4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgt4Tgt50g4LaJ4LeA4Lat4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgt4Pgt4rgtrTgtrvgt4rgt4Eg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1zay9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1zay9hcnJheXMueG1sCmluZGV4IGVjMzNlNjMuLjlhNTZlNzggMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtc2svYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXNrL2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+IlbFvmR5IHBvdcW+w612YcWlIGtvbnRyb2x1IEhEQ1AiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMxMDA1MzQ4NzQ1MjkyNDAyOTEiPiI2NCBrQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NiBrQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjYzNjEyODY5MjQyNjg3MTYzOTciPiIxIE1CIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjQwNTIwMzIzOTU2MDY5NTI2NiI+IjQgTUIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTYgTUIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4NjY1MjA2MTk5MjA5Njk4NTAxIj4iVnlwbnV0w6kiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4iNjQga0IiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0ODc1NDUzNDAyMzYxNDUzMjQiPiIyNTYga0IiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4iMSBNQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjQgTUIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyODAzMTk5MTAyNTg5MTI2OTM4Ij4iMTYgTUIiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI1MjQ3OTkzOTU3NzA2MTAxNTQiPiI2NCBrQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiIyNTYga0IiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMSBNQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwODk0NzA3MjA0NTEwNjgzNjQiPiJWeXBudXTDqSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NCBrQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIyMTIxMjU2MjUxNjk1ODIzMzAiPiIyNTYga0IiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNzA0OTQ2NzY2Njk5MjQyNjUzIj4iMSBNQiI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+IjY0IGtCIG5hIHZ5cm92bi4gcGFtw6TFpSBkZW5uw61rYSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiIyNTYga0IgbmEgdnlyb3ZuLiBwYW3DpMWlIGRlbm7DrWthIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjY5OTMwNjE5ODM1NzQ5NjczMSI+IjEgTUIgbmEgdnlyb3ZuLiBwYW3DpMWlIGRlbm7DrWthIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+IjQgTUIgbmEgdnlyb3ZuLiBwYW3DpMWlIGRlbm7DrWthIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+IjE2IE1CIG5hIHZ5cm92bi4gcGFtw6TFpSBkZW5uw61rYSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY5MjEwNDg4Mjk3OTExNzkzMzEiPiJWeXBudXTDqSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI5Njk0NTgwMjkzNDQ3NTAyNjIiPiI2NCBrQiBuYSB2eXJvdi4gcGFtw6TFpSBkZW5uw61rYSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzNDIyODUxMTU2NjU2OTgxNjgiPiIyNTYga0IgbmEgdnlyb3YuIHBhbcOkxaUgZGVubsOta2EiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4iMSBNQiBuYSB2eXJvdi4gcGFtLiBkZW5uw61rYSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM2MDYwNDc3ODA3OTI4OTQxNTEiPiI0IE1CIG5hIHZ5cm92LiBwYW3DpMWlIGRlbm7DrWthIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTQzMTM1NDk1Njg1NjY1NTEyMCI+IjE2IE1CIG5hIHZ5cm92LiBwYW3DpMWlIGRlbm7DrWthIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+IkFuaW3DoWNpYSBqZSB2eXBudXTDoSI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXNrL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1zay9zdHJpbmdzLnhtbAppbmRleCBiNWI2ZDJhLi43ZGI3ODM1IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXNrL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtc2svc3RyaW5ncy54bWwKQEAgLTI0Nyw2ICsyNDcsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX2FsbG93X29uX2V4dGVybmFsX3N1bW1hcnkiIG1zZ2lkPSIzMTkxOTUyNTA1ODYwMzQzMjMzIj4iVW1vxb7FiHVqZSB6YXDDrXNhxaUgYWvDumtvxL52ZWsgYXBsaWvDoWNpdSBkbyBleHRlcm7DqWhvIMO6bG/Fvmlza2EgYmV6IG9oxL5hZHUgbmEgaG9kbm90eSB2IG1hbmlmZXN0ZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzIiBtc2dpZD0iODYxNTc2NDM3ODE0NzgyNDk4NSI+IlZ5bsO6dGnFpSBtb8W+bm9zxaUgem1lbnkgdmXEvmtvc3RpIGFrdGl2w610Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXNfc3VtbWFyeSIgbXNnaWQ9IjQ1MDgyMTc0NzY5OTcxODIyMTYiPiJWZcS+a29zdGkgdsWhZXRrw71jaCBha3RpdsOtdCBidWRlIG1vxb5uw6kgem1lbmnFpSBuYSBuaWVrb8S+a28gb2tpZW4gKGJleiBvaMS+YWR1IG5hIGhvZG5vdHkgbWFuaWZlc3R1KS4iPC9zdHJpbmc+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnQgKDE0NjE4OTMzNTEyNzg5NDA0MTYpIC0tPgorICAgIDxza2lwIC8+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnRfc3VtbWFyeSAoMjI1MjU2MzQ5NzQ4NTQzNjUzNCkgLS0+CisgICAgPHNraXAgLz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF90aXRsZSIgbXNnaWQ9IjM4NjA0NzE2NTQ0Mzk0MTg4MjIiPiJIZXNsbyBwcmUgesOhbG9oeSB2wqBwb8SNw610YcSNaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4iw5pwbG7DqSB6w6Fsb2h5IG5hIHBvxI3DrXRhxI1pIG5pZSBzw7ogbW9tZW50w6FsbmUgY2hyw6FuZW7DqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiJEb3R5a29tIHptZW7DrXRlIGFsZWJvIG9kc3Ryw6FuaXRlIGhlc2xvIHByZSDDunBsbsOpIHrDoWxvaHkgZG8gcG/EjcOtdGHEjWEiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXNsL2FycmF5cy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXNsL2FycmF5cy54bWwKaW5kZXggMjUzZjExMy4uMTFiMmJhYiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1zbC9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtc2wvYXJyYXlzLnhtbApAQCAtNTksMjMgKzU5LDI2IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjQ1MDc1NjMxMjMxMjEyNzMyIj4iVmVkbm8gdXBvcmFiaSBwcmV2ZXJqYW5qZSBIRENQIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjQgSyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NiBLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+IjEgTSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0IE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTYgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiJJemtsb3BsamVubyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NCBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU2IEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4iMSBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNCBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2IE0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI1MjQ3OTkzOTU3NzA2MTAxNTQiPiI2NCBLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1NiBLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODA4NTg2NzIwOTIwMjE1MzQwMyI+IjEgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwODk0NzA3MjA0NTEwNjgzNjQiPiJJemtsb3BsamVubyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NCBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+IjI1NiBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTcwNDk0Njc2NjY5OTI0MjY1MyI+IjEgTSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+IjY0IEsvbWVkcG9tLiBkbmV2bi4iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyODIyMzA5NzQ3Njc1NzU4NjI4Ij4iMjU2IEsvbWVkcG9tLiBkbmV2LiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiIxIE0vbWVkcG9tLiBkbmV2bi4iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1NzQ4NTI4NjQzOTM3NTAwMzQ5Ij4iNCBNL21lZHBvbS4gZG5ldm4uIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+IjE2IE0vbWVkcG9tLiBkbmV2bi4iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4iSXprbG9wbGplbm8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4iNjQgSy9tZWRwb21uaWxuaWsgZG5ldm5pa2EiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzQyMjg1MTE1NjY1Njk4MTY4Ij4iMjU2IEsvbWVkcG9tbmlsbmlrIGRuZXZuaWthIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTMxNDIzNDI5OTU1MjI1NDYyMSI+IjEgTS9tZWRwb21uaWxuaWsgZG5ldm5pa2EiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4iNCBNL21lZHBvbW5pbG5payBkbmV2bmlrYSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU0MzEzNTQ5NTY4NTY2NTUxMjAiPiIxNiBNL21lZHBvbW5pbG5payBkbmV2bmlrYSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9IndpbmRvd19hbmltYXRpb25fc2NhbGVfZW50cmllcyI+CiAgICAgPGl0ZW0gbXNnaWQ9IjgxMzQxNTY1OTkzNzA4MjQwODEiPiJBbmltYWNpamEgamUgaXprbGp1xI1lbmEiPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1zbC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtc2wvc3RyaW5ncy54bWwKaW5kZXggY2IxMDdkNy4uZWQzNzkzMyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1zbC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXNsL3N0cmluZ3MueG1sCkBAIC0yNDcsNiArMjQ3LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+IlBvc2tyYmksIGRhIGplIG5lIGdsZWRlIG5hIHZyZWRub3N0aSB2IG1hbmlmZXN0dSBtb2dvxI1lIHZzYWtvIGFwbGlrYWNpam8gemFwaXNhdGkgdiB6dW5hbmpvIHNocmFtYm8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiJWc2lsaSBwb3ZlxI1hbmplIHZlbGlrb3N0aSB6YSBha3Rpdm5vc3RpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXNfc3VtbWFyeSIgbXNnaWQ9IjQ1MDgyMTc0NzY5OTcxODIyMTYiPiJQb3NrcmJpLCBkYSBqZSBuZSBnbGVkZSBuYSB2cmVkbm9zdGkgdiBtYW5pZmVzdHUgbW9nb8SNZSB2c2VtIGFrdGl2bm9zdGltIHBvdmXEjWF0aSB2ZWxpa29zdCB6YSBuYcSNaW4geiB2ZcSNIG9rbmkuIjwvc3RyaW5nPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0ICgxNDYxODkzMzUxMjc4OTQwNDE2KSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkgKDIyNTI1NjM0OTc0ODU0MzY1MzQpIC0tPgorICAgIDxza2lwIC8+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4iR2VzbG8gemEgdmFybi4ga29wLiByYcSNLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4iUG9wb2xuZSB2YXJub3N0bmUga29waWplIG5hbWl6amEgdHJlbnV0bm8gbmlzbyB6YcWhxI1pdGVuZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiJEb3Rha25pdGUgc2UsIMSNZSDFvmVsaXRlIHNwcmVtZW5pdGkgYWxpIG9kc3RyYW5pdGkgZ2VzbG8gemEgcG9wb2xubyB2YXJub3N0bm8ga29waXJhbmplIG5hbWl6amEuIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1zcS1yQUwvYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtc3EtckFML2FycmF5cy54bWwKaW5kZXggNzQ3M2YxNi4uMGYwZWZiOCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1zcS1yQUwvYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXNxLXJBTC9hcnJheXMueG1sCkBAIC01OSwyMyArNTksMjYgQEAKICAgICA8aXRlbSBtc2dpZD0iNDUwNzU2MzEyMzEyMTI3MzIiPiJQw6tyZG9yIGdqaXRobW9uw6sga29udHJvbGxpbiBlIEhEQ1Atc8OrIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjRLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTA1NjExNzU0NTA4OTg4NDc2Ij4iMjU2SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjYzNjEyODY5MjQyNjg3MTYzOTciPiIxIE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2NDA1MjAzMjM5NTYwNjk1MjY2Ij4iNCBNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2IE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4NjY1MjA2MTk5MjA5Njk4NTAxIj4iSm9ha3RpdiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NCBtaWrDqyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IjI1NiBtaWrDqyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI0MjM1Mjg2NzUyOTQzMzM4MzEiPiIxIG1pbGlvbiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjQgbWlsaW9uw6siPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyODAzMTk5MTAyNTg5MTI2OTM4Ij4iMTYgbWlsaW9uw6siPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI1MjQ3OTkzOTU3NzA2MTAxNTQiPiI2NEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzNTM0NzgyNzExMDQ1MjYyMzQ0Ij4iMjU2SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjgwODU4NjcyMDkyMDIxNTM0MDMiPiIxIE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4iSm9ha3RpdiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NCBtaWrDqyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIyMTIxMjU2MjUxNjk1ODIzMzAiPiIyNTYgbWlqw6siPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNzA0OTQ2NzY2Njk5MjQyNjUzIj4iMSBtaWxpb24iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiI2NCBtaWrDqyAvIG1lbW9yaWUgcmVnamlzdHJpbWkiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyODIyMzA5NzQ3Njc1NzU4NjI4Ij4iMjU2SyBww6tyIMOnZG8gbWVtb3JpZSB0w6sgcMOrcmtvaHNobWUiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4iMSBNIHDDq3IgbWVtb3JpZW4gZSByZWdqaXN0cml0IjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+IjQgTSBww6tyIG1lbW9yaWVuIGUgcmVnamlzdHJpdCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiIxNiBNIHDDq3IgbWVtb3JpZW4gZSByZWdqaXN0cml0IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+IkpvYWt0aXYiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4iNjQgbWlqw6svbWVtb3JpZSByZWdqaXN0cmltaSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzNDIyODUxMTU2NjU2OTgxNjgiPiIyNTYgbWlqw6svbWVtb3JpZSByZWdqaXN0cmltaSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiIxIG1pbGlvbi9tZW1vcmllIHJlZ2ppc3RyaW1pIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+IjQgbWlsaW9uw6svbWVtb3JpZSByZWdqaXN0cmltaSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU0MzEzNTQ5NTY4NTY2NTUxMjAiPiIxNiBtaWxpb27Dqy9tZW1vcmllIHJlZ2ppc3RyaW1pIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+IkFuaW1hY2lvbmkgw6tzaHTDqyBpIMOnYWt0aXZpenVhciI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXNxLXJBTC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtc3EtckFML3N0cmluZ3MueG1sCmluZGV4IGMxNzZmMTguLjdmNGQ2YTggMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtc3EtckFML3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtc3EtckFML3N0cmluZ3MueG1sCkBAIC0yNDcsNiArMjQ3LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX2FsbG93X29uX2V4dGVybmFsX3N1bW1hcnkiIG1zZ2lkPSIzMTkxOTUyNTA1ODYwMzQzMjMzIj4iQsOrbiBxw6sgw6dkbyBhcGxpa2FjaW9uIHTDqyBqZXTDqyBpIHDDq3JzaHRhdHNow6ttIHDDq3IgdFwndSBzaGtydWFyIG7DqyBoYXDDq3NpcsOrbiBydWFqdMOrc2UgdMOrIGphc2h0bWUsIHBhdmFyw6tzaXNodCBuZ2EgdmxlcmF0IGUgbWFuaWZlc3RpdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzIiBtc2dpZD0iODYxNTc2NDM3ODE0NzgyNDk4NSI+IkRldHlybyBtYWRow6tzaW7DqyBlIG5kcnlzaHVlc2htZSBww6tyIGFrdGl2aXRldGV0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXNfc3VtbWFyeSIgbXNnaWQ9IjQ1MDgyMTc0NzY5OTcxODIyMTYiPiJCw6tuIHHDqyB0w6sgZ2ppdGhhIGFrdGl2aXRldGV0IHTDqyBrZW7DqyBtYWRow6tzaSB0w6sgbmRyeXNodWVzaG1lIHDDq3IgcMOrcmRvcmltaW4gbWUgc2h1bcOrIGRyaXRhcmUsIHBhdmFyw6tzaXNodCB2bGVyYXZlIHTDqyBtYW5pZmVzdGl0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0IiBtc2dpZD0iMTQ2MTg5MzM1MTI3ODk0MDQxNiI+IkFrdGl2aXpvIGRyaXRhcmV0IG1lIGZvcm3DqyB0w6sgbGlyw6siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5IiBtc2dpZD0iMjI1MjU2MzQ5NzQ4NTQzNjUzNCI+IkFrdGl2aXpvbiBtYsOrc2h0ZXRqZW4gcMOrciBkcml0YXJldCBla3NwZXJpbWVudGFsZSBtZSBmb3Jtw6sgdMOrIGxpcsOrLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF90aXRsZSIgbXNnaWQ9IjM4NjA0NzE2NTQ0Mzk0MTg4MjIiPiJGamFsw6trYWxpbWkgcmV6ZXJ2w6sgaSBrb21wanV0ZXJpdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4iUmV6ZXJ2aW1ldCBlIHBsb3RhIG7DqyBrb21wanV0ZXIgbnVrIGphbsOrIHTDqyBtYnJvanR1cmEgYWt0dWFsaXNodCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiJQcmVrIHDDq3IgdMOrIG5kcnlzaHVhciBvc2UgaGVxdXIgZmphbMOra2FsaW1pbiBww6tyIHJlemVydmltZSB0w6sgcGxvdGEgdMOrIGRlc2t0b3BpdCI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtc3IvYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtc3IvYXJyYXlzLnhtbAppbmRleCBjZDQ0ZTE1Li4yMzg5MzM5IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXNyL2FycmF5cy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1zci9hcnJheXMueG1sCkBAIC01OSwyMyArNTksMjYgQEAKICAgICA8aXRlbSBtc2dpZD0iNDUwNzU2MzEyMzEyMTI3MzIiPiLQo9Cy0LXQuiDQutC+0YDQuNGB0YLQuCBIRENQINC/0YDQvtCy0LXRgNGDIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjQga0IiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTYga0IiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMSBNQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0IE1CIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2IE1CIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+ItCY0YHQutGZ0YPRh9C10L3QviI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NCBrQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IjI1NiBrQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI0MjM1Mjg2NzUyOTQzMzM4MzEiPiIxIE1CIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNCBNQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI4MDMxOTkxMDI1ODkxMjY5MzgiPiIxNiBNQiI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfbG93cmFtX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUyNDc5OTM5NTc3MDYxMDE1NCI+IjY0IGtCIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1NiBrQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjgwODU4NjcyMDkyMDIxNTM0MDMiPiIxIE1CIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjA4OTQ3MDcyMDQ1MTA2ODM2NCI+ItCY0YHQutGZ0YPRh9C10L3QviI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NCBrQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIyMTIxMjU2MjUxNjk1ODIzMzAiPiIyNTYga0IiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNzA0OTQ2NzY2Njk5MjQyNjUzIj4iMSBNQiI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+IjY0IGtCINC/0L4g0LHQsNGE0LXRgNGDINC10LLQuNC00LXQvdGG0LjRmNC1IjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMjgyMjMwOTc0NzY3NTc1ODYyOCI+IjI1NiBrQiDQv9C+INCx0LDRhNC10YDRgyDQtdCy0LjQtNC10L3RhtC40ZjQtSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiIxIE1CINC/0L4g0LHQsNGE0LXRgNGDINC10LLQuNC00LXQvdGG0LjRmNC1IjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+IjQgTUIg0L/QviDQsdCw0YTQtdGA0YMg0LXQstC40LTQtdC90YbQuNGY0LUiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxOTc4NjI5MDUxMDg1MTExNTkyIj4iMTYgTUIg0L/QviDQsdCw0YTQtdGA0YMg0LXQstC40LTQtdC90YbQuNGY0LUiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4i0JjRgdC60ZnRg9GH0LXQvdC+IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjk2OTQ1ODAyOTM0NDc1MDI2MiI+IjY0IGtCINC/0L4g0LzQtdGS0YPQvNC10LzQvtGA0LjRmNC4INC10LLQuNC00LXQvdGG0LjRmNC1IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+IjI1NiBrQiDQv9C+INC80LXRktGD0LzQtdC80L7RgNC40ZjQuCDQtdCy0LjQtNC10L3RhtC40ZjQtSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiIxIE1CINC/0L4g0LzQtdGS0YPQvNC10LzQvtGA0LjRmNC4INC10LLQuNC00LXQvdGG0LjRmNC1IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+IjQgTUIg0L/QviDQvNC10ZLRg9C80LXQvNC+0YDQuNGY0Lgg0LXQstC40LTQtdC90YbQuNGY0LUiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4iMTYgTUIg0L/QviDQvNC10ZLRg9C80LXQvNC+0YDQuNGY0Lgg0LXQstC40LTQtdC90YbQuNGY0LUiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4i0JDQvdC40LzQsNGG0LjRmNCwINGY0LUg0LjRgdC60ZnRg9GH0LXQvdCwIjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtc3Ivc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXNyL3N0cmluZ3MueG1sCmluZGV4IDZiNjYwOTQuLjk1OTZjZTUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtc3Ivc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1zci9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0NywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiLQntC80L7Qs9GD0ZvQsNCy0LAg0YPQv9C40YHQuNCy0LDRmtC1INGB0LLQuNGFINCw0L/Qu9C40LrQsNGG0LjRmNCwINGDINGB0L/QvtGZ0L3RgyDQvNC10LzQvtGA0LjRmNGDLCDQsdC10Lcg0L7QsdC30LjRgNCwINC90LAg0LLRgNC10LTQvdC+0YHRgtC4INC80LDQvdC40YTQtdGB0YLQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzIiBtc2dpZD0iODYxNTc2NDM3ODE0NzgyNDk4NSI+ItCf0YDQuNC90YPQtNC90L4g0L7QvNC+0LPRg9Gb0Lgg0L/RgNC+0LzQtdC90YMg0LLQtdC70LjRh9C40L3QtSDQsNC60YLQuNCy0L3QvtGB0YLQuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4i0J7QvNC+0LPRg9Gb0LDQstCwINC/0YDQvtC80LXQvdGDINCy0LXQu9C40YfQuNC90LUg0YHQstC40YUg0LDQutGC0LjQstC90L7RgdGC0Lgg0LfQsCDRgNC10LbQuNC8INGB0LAg0LLQuNGI0LUg0L/RgNC+0LfQvtGA0LAsINCx0LXQtyDQvtCx0LfQuNGA0LAg0L3QsCDQstGA0LXQtNC90L7RgdGC0Lgg0LzQsNC90LjRhNC10YHRgtCwLiI8L3N0cmluZz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBlbmFibGVfZnJlZWZvcm1fc3VwcG9ydCAoMTQ2MTg5MzM1MTI3ODk0MDQxNikgLS0+CisgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5ICgyMjUyNTYzNDk3NDg1NDM2NTM0KSAtLT4KKyAgICA8c2tpcCAvPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+ItCb0L7Qt9C40L3QutCwINGA0LXQt9C10YDQstC90LUg0LrQvtC/0LjRmNC1INC30LAg0YDQsNGH0YPQvdCw0YAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9ub25lIiBtc2dpZD0iNjk1MTA5NTQ4NTUzNzc2Nzk1NiI+ItCg0LXQt9C10YDQstC90LUg0LrQvtC/0LjRmNC1INGH0LjRgtCw0LLQvtCzINGB0LjRgdGC0LXQvNCwINGC0YDQtdC90YPRgtC90L4g0L3QuNGB0YMg0LfQsNGI0YLQuNGb0LXQvdC1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfY2hhbmdlIiBtc2dpZD0iMjczMTE2MzQyNTA4MTE3MjYzOCI+ItCU0L7QtNC40YDQvdC40YLQtSDQtNCwINCx0LjRgdGC0LUg0L/RgNC+0LzQtdC90LjQu9C4INC40LvQuCDRg9C60LvQvtC90LjQu9C4INC70L7Qt9C40L3QutGDINC30LAg0L/RgNCw0LLRmdC10ZrQtSDRgNC10LfQtdGA0LLQvdC40YUg0LrQvtC/0LjRmNCwINGH0LjRgtCw0LLQvtCzINGB0LjRgdGC0LXQvNCwINC90LAg0YDQsNGH0YPQvdCw0YDRgyI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtc3YvYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtc3YvYXJyYXlzLnhtbAppbmRleCA1NDUzN2Y0Li5jYmM3ZGRlIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXN2L2FycmF5cy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1zdi9hcnJheXMueG1sCkBAIC01OSwyMyArNTksMjYgQEAKICAgICA8aXRlbSBtc2dpZD0iNDUwNzU2MzEyMzEyMTI3MzIiPiJBbnbDpG5kIGFsbHRpZCBIRENQLWtvbnRyb2xsIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjQga0IiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTYga0IiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMSBNQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0IE1CIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2IE1CIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+IkF2IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTU5MzI4OTM3NjUwMjMxMjkyMyI+IjY0IGtCIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU2IGtCIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjEgTUIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxODA4ODM3NzQ1MDk0NzY1NDEiPiI0IE1CIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2IE1CIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjQga0IiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzNTM0NzgyNzExMDQ1MjYyMzQ0Ij4iMjU2IGtCIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODA4NTg2NzIwOTIwMjE1MzQwMyI+IjEgTUIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4iQXYiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0NjIyNDYwMzMzMDM4NTg2NzkxIj4iNjQga0IiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2IGtCIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTcwNDk0Njc2NjY5OTI0MjY1MyI+IjEgTUIiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiI2NCBrQi9sb2dnYnVmZmVydCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiIyNTYga0IvbG9nZ2J1ZmZlcnQiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4iMSBNQi9sb2dnYnVmZmVydCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjU3NDg1Mjg2NDM5Mzc1MDAzNDkiPiI0IE1CL2xvZ2didWZmZXJ0IjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+IjE2IE1CL2xvZ2didWZmZXJ0IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+IkF2IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjk2OTQ1ODAyOTM0NDc1MDI2MiI+IjY0IGtCL2xvZ2didWZmZXJ0IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+IjI1NiBrQi9sb2dnYnVmZmVydCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiIxIE1CL2xvZ2didWZmZXJ0IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+IjQgTUIvbG9nZ2J1ZmZlcnQiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4iMTYgTUIvbG9nZ2J1ZmZlcnQiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4iQW5pbWVyaW5nIGF2c3TDpG5nZCI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXN2L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1zdi9zdHJpbmdzLnhtbAppbmRleCA0MGUxNTkzLi43ZDBkMGEwIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXN2L3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtc3Yvc3RyaW5ncy54bWwKQEAgLTI0Nyw2ICsyNDcsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX2FsbG93X29uX2V4dGVybmFsX3N1bW1hcnkiIG1zZ2lkPSIzMTkxOTUyNTA1ODYwMzQzMjMzIj4iQXBwZW4ga2FuIHNrcml2YXMgdGlsbCBleHRlcm4gbGFncmluZywgb2F2c2V0dCBtYW5pZmVzdHbDpHJkZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiJGcmFtdHZpbmdhIHN0b3JsZWtzYW5wYXNzbmluZyBmw7ZyIGFrdGl2aXRldGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXNfc3VtbWFyeSIgbXNnaWQ9IjQ1MDgyMTc0NzY5OTcxODIyMTYiPiJEZXR0YSBnw7ZyIGRldCBtw7ZqbGlndCBhdHQgw6RuZHJhIHN0b3JsZWtlbiBww6UgYWxsYSBha3Rpdml0ZXRlciBpIGZsZXJmw7Zuc3RlcmzDpGdlLCBvYXZzZXR0IG1hbmlmZXN0dsOkcmRlbi4iPC9zdHJpbmc+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnQgKDE0NjE4OTMzNTEyNzg5NDA0MTYpIC0tPgorICAgIDxza2lwIC8+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnRfc3VtbWFyeSAoMjI1MjU2MzQ5NzQ4NTQzNjUzNCkgLS0+CisgICAgPHNraXAgLz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF90aXRsZSIgbXNnaWQ9IjM4NjA0NzE2NTQ0Mzk0MTg4MjIiPiJMw7ZzZW5vcmQgZsO2ciBzw6RrZXJoZXRza29waWEgYXYgZGF0b3JuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiJEZSBmdWxsc3TDpG5kaWdhIHPDpGtlcmhldHNrb3Bpb3JuYSBhdiBkYXRvcm4gw6RyIGbDtnIgbsOkcnZhcmFuZGUgaW50ZSBza3lkZGFkZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiJUcnljayBvbSBkdSB2aWxsIMOkbmRyYSBlbGxlciB0YSBib3J0IGzDtnNlbm9yZGV0IGbDtnIgZnVsbHN0w6RuZGlnIHPDpGtlcmhldHNrb3BpZXJpbmcgYXYgZGF0b3JuIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1zdy9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1zdy9hcnJheXMueG1sCmluZGV4IDQ1MGUzODUuLjg1OTNmZDUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtc3cvYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXN3L2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+IktpbGEgd2FrYXRpIHR1bWlhIHVrYWt1YWppIHdhIEhEQ1AiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMxMDA1MzQ4NzQ1MjkyNDAyOTEiPiJLNjQiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiJLMjU2IjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+Ik0xIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjQwNTIwMzIzOTU2MDY5NTI2NiI+Ik00IjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+Ik0xNiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiJJbWV6aW13YSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiJLNjQiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0ODc1NDUzNDAyMzYxNDUzMjQiPiJLMjU2IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+Ik0xIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iTTQiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyODAzMTk5MTAyNTg5MTI2OTM4Ij4iTTE2IjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iSzY0IjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IksyNTYiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iTTEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4iSW1lemltd2EiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0NjIyNDYwMzMzMDM4NTg2NzkxIj4iSzY0IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+IksyNTYiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNzA0OTQ2NzY2Njk5MjQyNjUzIj4iTTEiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiJLNjQga3dhIGt1bWJ1a3VtYnUiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyODIyMzA5NzQ3Njc1NzU4NjI4Ij4iSzI1NiBrd2Ega3VtYnVrdW1idSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiJNMSBrd2Ega3VtYnVrdW1idSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjU3NDg1Mjg2NDM5Mzc1MDAzNDkiPiJNNCBrd2Ega3VtYnVrdW1idSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiJNMTYga3dhIGt1bWJ1a3VtYnUiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4iSW1lemltd2EiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4iSzY0IGt3YSBraWxhIGFraWJhIHlhIGt1bWJ1a3VtYnUiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzQyMjg1MTE1NjY1Njk4MTY4Ij4iSzI1NiBrd2Ega2lsYSBha2liYSB5YSBrdW1idWt1bWJ1IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTMxNDIzNDI5OTU1MjI1NDYyMSI+Ik0xIGt3YSBraWxhIGFraWJhIHlhIGt1bWJ1a3VtYnUiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4iTTQga3dhIGtpbGEgYWtpYmEgeWEga3VtYnVrdW1idSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU0MzEzNTQ5NTY4NTY2NTUxMjAiPiJNMTYga3dhIGtpbGEgYWtpYmEgeWEga3VtYnVrdW1idSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9IndpbmRvd19hbmltYXRpb25fc2NhbGVfZW50cmllcyI+CiAgICAgPGl0ZW0gbXNnaWQ9IjgxMzQxNTY1OTkzNzA4MjQwODEiPiJIYWl3YW5pIGltZXppbXdhIjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtc3cvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXN3L3N0cmluZ3MueG1sCmluZGV4IGEwMTRlMWQuLmQxMDQxZGEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtc3cvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1zdy9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0NywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiJIdXdla2EgcHJvZ3JhbXUga3dlbnllIGhpZmFkaGkgeWEgbmplLCBiaWxhIGt1amFsaSBtYWVsZXpvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4iTGF6aW1pc2hhIHNodWdodWxpIHppd2V6ZSBrdWJhZGlsaXNod2EgdWt1YndhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXNfc3VtbWFyeSIgbXNnaWQ9IjQ1MDgyMTc0NzY5OTcxODIyMTYiPiJGYW55YSBzaHVnaHVsaSB6b3RlIHppd2V6ZSBrdWJhZGlsaXNod2EgdWt1YndhIGt3YSBhamlsaSB5YSBkaXJpc2hhIG55aW5naSwgYmlsYSBrdWphbGkgdGhhbWFuaSB6YSBmYWlsaSB5YSBtYWVsZXpvLiI8L3N0cmluZz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBlbmFibGVfZnJlZWZvcm1fc3VwcG9ydCAoMTQ2MTg5MzM1MTI3ODk0MDQxNikgLS0+CisgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5ICgyMjUyNTYzNDk3NDg1NDM2NTM0KSAtLT4KKyAgICA8c2tpcCAvPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+Ik5lbm9zaXJpIGxhIGhpZmFkaGkgcnVkdWZ1IHlhIGVuZW8ga2F6aSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4iSGlmYWRoaSBydWR1ZnUga2FtaWxpIHphIGVuZW8ga2F6aSBoYXppamFsaW5kd2Ega3dhIHNhc2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4iR3VzYSBpbGkgdWJhZGlsaXNoZSBhdSB1b25kb2UgbmVub3NpcmkgbGEgaGlmYWRoaSBydWR1ZnUga2FtaWxpIHphIGVuZW8ga2F6aSI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtdGEtcklOL2FycmF5cy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXRhLXJJTi9hcnJheXMueG1sCmluZGV4IGFkNDIxNTkuLjE4ZGVmZjMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtdGEtcklOL2FycmF5cy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy10YS1ySU4vYXJyYXlzLnhtbApAQCAtNTksMjMgKzU5LDI2IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjQ1MDc1NjMxMjMxMjEyNzMyIj4iSERDUCDgrprgrrDgrr/grqrgrr7grrDgr43grqrgr43grqrgr4gg4K6O4K6q4K+N4K6q4K+L4K6k4K+B4K6u4K+NIOCuquCur+CuqeCvjeCuquCun+CvgeCupOCvjeCupOCvgSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iMzEwMDUzNDg3NDUyOTI0MDI5MSI+IjY0SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMU0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2NDA1MjAzMjM5NTYwNjk1MjY2Ij4iNE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTZNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+IuCuruCvgeCun+CuleCvjeCuleCvgSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0ODc1NDUzNDAyMzYxNDUzMjQiPiIyNTZLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjFNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyODAzMTk5MTAyNTg5MTI2OTM4Ij4iMTZNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjRLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMU0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4i4K6u4K+B4K6f4K6V4K+N4K6V4K+BIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDYyMjQ2MDMzMzAzODU4Njc5MSI+IjY0SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIyMTIxMjU2MjUxNjk1ODIzMzAiPiIyNTZLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTcwNDk0Njc2NjY5OTI0MjY1MyI+IjFNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9zdW1tYXJpZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI3MzQ2NTk1NDczNTg4NzY1MDE5Ij4iNjRLIC8g4K6y4K6+4K6V4K+NIOCuquCug+CuquCusOCvjSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiIyNTZLIC8g4K6y4K6+4K6V4K+NIOCuquCug+CuquCusOCvjSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiIxTSAvIOCusuCuvuCuleCvjSDgrqrgroPgrqrgrrDgr40iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1NzQ4NTI4NjQzOTM3NTAwMzQ5Ij4iNE0gLyDgrrLgrr7grpXgr40g4K6q4K6D4K6q4K6w4K+NIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+IjE2TSAvIOCusuCuvuCuleCvjSDgrqrgroPgrqrgrrDgr40iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4i4K6u4K+B4K6f4K6V4K+N4K6V4K6k4K+N4K6k4K6/4K6y4K+NIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjk2OTQ1ODAyOTM0NDc1MDI2MiI+IjY0SyAvIOCusuCuvuCuleCvjSDgrqrgroPgrqrgrrDgr40iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzQyMjg1MTE1NjY1Njk4MTY4Ij4iMjU2SyAvIOCusuCuvuCuleCvjSDgrqrgroPgrqrgrrDgr40iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4iMU0gLyDgrrLgrr7grpXgr40g4K6q4K6D4K6q4K6w4K+NIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+IjRNIC8g4K6y4K6+4K6V4K+NIOCuquCug+CuquCusOCvjSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU0MzEzNTQ5NTY4NTY2NTUxMjAiPiIxNk0gLyDgrrLgrr7grpXgr40g4K6q4K6D4K6q4K6w4K+NIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+IuCuheCuqeCuv+CuruCvh+Cut+CuqeCviCDgrq7gr4Hgrp/grpXgr43grpXgr4EiPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy10YS1ySU4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXRhLXJJTi9zdHJpbmdzLnhtbAppbmRleCA0ZjZlYTU3Li5lNjZmMDczIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXRhLXJJTi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXRhLXJJTi9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0NywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiLgrq7gr4fgrqngrr/groPgrqrgr4bgrrjgr43grp/gr40g4K6u4K6k4K6/4K6q4K+N4K6q4K+B4K6V4K6z4K+IIOCuquCviuCusOCvgeCun+CvjeCuquCun+CvgeCupOCvjeCupOCuvuCuruCusuCvjSwg4K6O4K6o4K+N4K6k4K6q4K+NIOCuquCur+CuqeCvjeCuquCuvuCun+CvjeCun+CviOCur+CvgeCuruCvjSDgrrXgr4bgrrPgrr/grqrgr43grqrgr4HgrrEg4K6a4K+H4K6u4K6/4K6q4K+N4K6q4K6/4K6f4K6k4K+N4K6k4K6/4K6y4K+NIOCujuCutOCvgeCupCDgroXgrqngr4Hgrq7grqTgrr/grpXgr43grpXgr4Hgrq7gr40iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiLgrprgr4bgrq/grrLgr43grqrgrr7grp/gr4HgrpXgrrPgr4gg4K6F4K6z4K614K+B4K6u4K6+4K6x4K6V4K+N4K6V4K+C4K6f4K6/4K6v4K6k4K6+4K6VIOCuheCuruCviCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4i4K6u4K+H4K6p4K6/4K6D4K6q4K+G4K644K+N4K6f4K+NIOCuruCupOCuv+CuquCvjeCuquCvgeCuleCus+CviOCuquCvjSDgrqrgr4rgrrDgr4Hgrp/gr43grqrgrp/gr4HgrqTgr43grqTgrr7grq7grrLgr40sIOCuquCusiDgrprgrr7grrPgrrDgrqTgr43grqTgrr/grrHgr43grpXgr4Eg4K6O4K6y4K+N4K6y4K6+IOCumuCvhuCur+CusuCvjeCuquCuvuCun+CvgeCuleCus+CviOCur+CvgeCuruCvjSDgroXgrrPgrrXgr4Hgrq7grr7grrHgrpXgr43grpXgr4Lgrp/grr/grq/grqTgrr7grpUg4K6F4K6u4K+I4K6V4K+N4K6V4K+B4K6u4K+NLiI8L3N0cmluZz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBlbmFibGVfZnJlZWZvcm1fc3VwcG9ydCAoMTQ2MTg5MzM1MTI3ODk0MDQxNikgLS0+CisgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5ICgyMjUyNTYzNDk3NDg1NDM2NTM0KSAtLT4KKyAgICA8c2tpcCAvPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+IuCun+CvhuCuuOCvjeCuleCvjeCun+CuvuCuquCvjSDgrpXgrr7grqrgr43grqrgr4Hgrqrgr43grqrgrr/grrDgrqTgrr8g4K6V4K6f4K614K+B4K6a4K+N4K6a4K+K4K6y4K+NIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiLgrp/gr4bgrrjgr43grpXgr43grp/grr7grqrgr43grqrgrr/grqngr40g4K6u4K+B4K604K+BIOCuleCuvuCuquCvjeCuquCvgeCuquCvjeCuquCuv+CusOCupOCuv+CuleCus+CvjSDgrqTgrrHgr43grqrgr4vgrqTgr4Eg4K6q4K6+4K6k4K+B4K6V4K6+4K6V4K+N4K6V4K6q4K+N4K6q4K6f4K614K6/4K6y4K+N4K6y4K+IIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfY2hhbmdlIiBtc2dpZD0iMjczMTE2MzQyNTA4MTE3MjYzOCI+IuCun+CvhuCuuOCvjeCuleCvjeCun+CuvuCuquCvjeCuquCuv+CuqeCvjSDgrq7gr4HgrrTgr4Hgrq7gr4jgrq/grr7grqkg4K6V4K6+4K6q4K+N4K6q4K+B4K6q4K+N4K6q4K6/4K6w4K6k4K6/4K6V4K6z4K+B4K6V4K+N4K6V4K6+4K6pIOCuleCun+CuteCvgeCumuCvjeCumuCviuCusuCvjeCusuCviCDgrq7grr7grrHgr43grrHgr4HgrrXgrqTgrrHgr43grpXgr4Eg4K6F4K6y4K+N4K6y4K6k4K+BIOCuheCuleCuseCvjeCuseCvgeCuteCupOCuseCvjeCuleCvgeCupOCvjSDgrqTgr4rgrp/grrXgr4Hgrq7gr40iPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXRlLXJJTi9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy10ZS1ySU4vYXJyYXlzLnhtbAppbmRleCA5Mjg3YWJhLi4zYmEwZGM3IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXRlLXJJTi9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtdGUtcklOL2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+IuCwjuCwquCxjeCwquCwn+Cwv+CwleCxgCBIRENQIOCwpOCwqOCwv+CwluCxgOCwqOCwvyDgsIngsKrgsK/gsYvgsJfgsL/gsILgsJrgsYEiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMxMDA1MzQ4NzQ1MjkyNDAyOTEiPiI2NEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTZLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+IjFNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjQwNTIwMzIzOTU2MDY5NTI2NiI+IjRNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2TSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiLgsIbgsKvgsY0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4iNjRLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU2SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI0MjM1Mjg2NzUyOTQzMzM4MzEiPiIxTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjRNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2TSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfbG93cmFtX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUyNDc5OTM5NTc3MDYxMDE1NCI+IjY0SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiIyNTZLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODA4NTg2NzIwOTIwMjE1MzQwMyI+IjFNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjA4OTQ3MDcyMDQ1MTA2ODM2NCI+IuCwhuCwq+CxjSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxTSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+IuCwsuCwvuCwl+CxjSDgsKzgsKvgsLDgsY3igIzgsJXgsL8gNjRLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMjgyMjMwOTc0NzY3NTc1ODYyOCI+IuCwsuCwvuCwl+CxjSDgsKzgsKvgsLDgsY3igIzgsJXgsL8gMjU2SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiLgsLLgsL7gsJfgsY0g4LCs4LCr4LCw4LGN4oCM4LCV4LC/IDFNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+IuCwsuCwvuCwl+CxjSDgsKzgsKvgsLDgsY3igIzgsJXgsL8gNE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxOTc4NjI5MDUxMDg1MTExNTkyIj4i4LCy4LC+4LCX4LGNIOCwrOCwq+CwsOCxjeKAjOCwleCwvyAxNk0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4i4LCG4LCr4LGNIOCwmuCxh+Cwr+CwrOCwoeCwv+CwguCwpuCwvyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI5Njk0NTgwMjkzNDQ3NTAyNjIiPiLgsLLgsL7gsJfgsY0g4LCs4LCr4LCw4LGN4oCM4LCV4LC/IDY0SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzNDIyODUxMTU2NjU2OTgxNjgiPiLgsLLgsL7gsJfgsY0g4LCs4LCr4LCw4LGN4oCM4LCV4LC/IDI1NksiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4i4LCy4LC+4LCX4LGNIOCwrOCwq+CwsOCxjeKAjOCwleCwvyAxTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM2MDYwNDc3ODA3OTI4OTQxNTEiPiLgsLLgsL7gsJfgsY0g4LCs4LCr4LCw4LGN4oCM4LCV4LC/IDRNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTQzMTM1NDk1Njg1NjY1NTEyMCI+IuCwsuCwvuCwl+CxjSDgsKzgsKvgsLDgsY3igIzgsJXgsL8gMTZNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+IuCwr+CwvuCwqOCwv+CwruCxh+Cwt+CwqOCxjSDgsIbgsKvgsY3igIzgsLLgsYsg4LCJ4LCC4LCm4LC/IjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtdGUtcklOL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy10ZS1ySU4vc3RyaW5ncy54bWwKaW5kZXggYTZkMjE0MC4uODBiODRmMCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy10ZS1ySU4vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy10ZS1ySU4vc3RyaW5ncy54bWwKQEAgLTI0Nyw2ICsyNDcsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiLgsI8g4LCF4LCo4LGB4LC14LCw4LGN4LCk4LCo4LC+4LCo4LGN4LCo4LC/IOCwheCwr+Cwv+CwqOCwviDgsK7gsL7gsKjgsL/gsKvgsYbgsLjgsY3gsJ/gsY0g4LC14LC/4LCy4LGB4LC14LCy4LCk4LGLIOCwuOCwguCwrOCwguCwp+CwgiDgsLLgsYfgsJXgsYHgsILgsKHgsL4g4LCs4LC+4LC54LGN4LCvIOCwqOCwv+CwsuCxjeCwteCwsuCxiyDgsLXgsY3gsLDgsL7gsK/gsJfgsLLgsL/gsJfgsYfgsLLgsL4g4LCF4LCo4LGB4LCu4LCk4LC/4LC44LGN4LCk4LGB4LCC4LCm4LC/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4i4LCV4LC+4LCw4LGN4LCv4LC+4LCa4LCw4LCj4LCy4LCo4LGBIOCwquCwsOCwv+CwruCwvuCwo+CwgiDgsK7gsL7gsLDgsY3gsJrgsJfgsLLgsL/gsJfgsYfgsLLgsL4g4LCo4LC/4LCw4LGN4LCs4LCC4LCn4LC/4LCC4LCa4LGBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXNfc3VtbWFyeSIgbXNnaWQ9IjQ1MDgyMTc0NzY5OTcxODIyMTYiPiLgsK7gsL7gsKjgsL/gsKvgsYbgsLjgsY3gsJ/gsY0g4LC14LC/4LCy4LGB4LC14LCy4LCk4LGLIOCwuOCwguCwrOCwguCwp+CwgiDgsLLgsYfgsJXgsYHgsILgsKHgsL4g4LCF4LCo4LGN4LCo4LC/IOCwleCwvuCwsOCxjeCwr+CwvuCwmuCwsOCwo+CwsuCwqOCxgSDgsKzgsLngsYHgsLMg4LC14LC/4LCC4LCh4LGL4LCy4LGN4LCy4LGLIOCwuOCwsOCwv+CwquCxi+Cwr+Cxh+Cwn+Cwn+CxjeCwsuCxgSDgsKrgsLDgsL/gsK7gsL7gsKPgsIIg4LCu4LC+4LCw4LGN4LCa4LCX4LCy4LC/4LCX4LGH4LCy4LC+IOCwmuCxh+CwuOCxjeCwpOCxgeCwguCwpuCwvy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydCIgbXNnaWQ9IjE0NjE4OTMzNTEyNzg5NDA0MTYiPiLgsLjgsY3gsLXgsKTgsILgsKTgsY3gsLAg4LCw4LGC4LCqIOCwteCwv+CwguCwoeCxi+CwsuCwqOCxgSDgsKrgsY3gsLDgsL7gsLDgsILgsK3gsL/gsILgsJrgsILgsKHgsL8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5IiBtc2dpZD0iMjI1MjU2MzQ5NzQ4NTQzNjUzNCI+IuCwquCxjeCwsOCwr+Cxi+Cwl+CwvuCwpOCxjeCwruCwlSDgsLjgsY3gsLXgsKTgsILgsKTgsY3gsLAg4LCw4LGC4LCqIOCwteCwv+CwguCwoeCxi+CwsuCwleCxgSDgsK7gsKbgsY3gsKbgsKTgsYHgsKjgsYEg4LCq4LGN4LCw4LC+4LCw4LCC4LCt4LC/4LC44LGN4LCk4LGB4LCC4LCm4LC/LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF90aXRsZSIgbXNnaWQ9IjM4NjA0NzE2NTQ0Mzk0MTg4MjIiPiLgsKHgsYbgsLjgsY3gsJXgsY3igIzgsJ/gsL7gsKrgsY0g4LCs4LGN4LCv4LC+4LCV4LCq4LGNIOCwquCwvuCwuOCxjeKAjOCwteCwsOCxjeCwoeCxjSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4i4LCh4LGG4LC44LGN4LCV4LGN4oCM4LCf4LC+4LCq4LGNIOCwquCxguCwsOCxjeCwpOCwvyDgsKzgsY3gsK/gsL7gsJXgsKrgsY3igIzgsLLgsYEg4LCq4LGN4LCw4LC44LGN4LCk4LGB4LCk4LCCIOCwsOCwleCxjeCwt+Cwv+CwguCwmuCwrOCwoeCwsuCxh+CwpuCxgSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiLgsKHgsYbgsLjgsY3gsJXgsY3igIzgsJ/gsL7gsKrgsY0g4LCq4LGC4LCw4LGN4LCk4LC/IOCwrOCxjeCwr+CwvuCwleCwquCxjeKAjOCwsiDgsJXgsYvgsLjgsIIg4LCq4LC+4LC44LGN4oCM4LC14LCw4LGN4LCh4LGN4oCM4LCo4LGBIOCwruCwvuCwsOCxjeCwmuCwoeCwvuCwqOCwv+CwleCwvyDgsLLgsYfgsKbgsL4g4LCk4LGA4LC44LC/4LC14LGH4LCv4LCh4LC+4LCo4LC/4LCV4LC/IOCwpOCwvuCwleCwguCwoeCwvyI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtdGgvYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtdGgvYXJyYXlzLnhtbAppbmRleCA0M2QyNzM5Li40MjgyOTc1IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXRoL2FycmF5cy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy10aC9hcnJheXMueG1sCkBAIC01OSwyMyArNTksMjYgQEAKICAgICA8aXRlbSBtc2dpZD0iNDUwNzU2MzEyMzEyMTI3MzIiPiLguYPguIrguYnguIHguLLguKPguJXguKPguKfguIjguKrguK3guJogSERDUCDguYDguKrguKHguK0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMxMDA1MzQ4NzQ1MjkyNDAyOTEiPiI2NCBLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTA1NjExNzU0NTA4OTg4NDc2Ij4iMjU2IEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMSBNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjQwNTIwMzIzOTU2MDY5NTI2NiI+IjQgTSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMwMjU0MzEyMTEwMTM0MjQwOTciPiIxNiBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+IuC4m+C4tOC4lCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NCBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU2IEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4iMSBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNCBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2IE0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI1MjQ3OTkzOTU3NzA2MTAxNTQiPiI2NCBLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1NiBLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODA4NTg2NzIwOTIwMjE1MzQwMyI+IjEgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwODk0NzA3MjA0NTEwNjgzNjQiPiLguJvguLTguJQiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0NjIyNDYwMzMzMDM4NTg2NzkxIj4iNjQgSyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIyMTIxMjU2MjUxNjk1ODIzMzAiPiIyNTYgSyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxIE0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiI2NCBLIOC4leC5iOC4reC4muC4seC4n+C5gOC4n+C4reC4o+C5jOC5hOC4n+C4peC5jOC4muC4seC4meC4l+C4tuC4gSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiIyNTYgSyDguJXguYjguK3guJrguLHguJ/guYDguJ/guK3guKPguYzguYTguJ/guKXguYzguJrguLHguJnguJfguLbguIEiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4iMSBNIOC4leC5iOC4reC4muC4seC4n+C5gOC4n+C4reC4o+C5jOC5hOC4n+C4peC5jOC4muC4seC4meC4l+C4tuC4gSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjU3NDg1Mjg2NDM5Mzc1MDAzNDkiPiI0IE0g4LiV4LmI4Lit4Lia4Lix4Lif4LmA4Lif4Lit4Lij4LmM4LmE4Lif4Lil4LmM4Lia4Lix4LiZ4LiX4Li24LiBIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+IjE2IE0g4LiV4LmI4Lit4Lia4Lix4Lif4LmA4Lif4Lit4Lij4LmM4LmE4Lif4Lil4LmM4Lia4Lix4LiZ4LiX4Li24LiBIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+IuC4m+C4tOC4lCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI5Njk0NTgwMjkzNDQ3NTAyNjIiPiI2NCBLIOC4leC5iOC4reC4muC4seC4n+C5gOC4n+C4reC4o+C5jOC5hOC4n+C4peC5jOC4muC4seC4meC4l+C4tuC4gSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzNDIyODUxMTU2NjU2OTgxNjgiPiIyNTYgSyDguJXguYjguK3guJrguLHguJ/guYDguJ/guK3guKPguYzguYTguJ/guKXguYzguJrguLHguJnguJfguLbguIEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4iMSBNIOC4leC5iOC4reC4muC4seC4n+C5gOC4n+C4reC4o+C5jOC5hOC4n+C4peC5jOC4muC4seC4meC4l+C4tuC4gSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM2MDYwNDc3ODA3OTI4OTQxNTEiPiI0IE0g4LiV4LmI4Lit4Lia4Lix4Lif4LmA4Lif4Lit4Lij4LmM4LmE4Lif4Lil4LmM4Lia4Lix4LiZ4LiX4Li24LiBIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTQzMTM1NDk1Njg1NjY1NTEyMCI+IjE2IE0g4LiV4LmI4Lit4Lia4Lix4Lif4LmA4Lif4Lit4Lij4LmM4LmE4Lif4Lil4LmM4Lia4Lix4LiZ4LiX4Li24LiBIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+IuC4m+C4tOC4lOC4oOC4suC4nuC5gOC4hOC4peC4t+C5iOC4reC4meC5hOC4q+C4pyI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXRoL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy10aC9zdHJpbmdzLnhtbAppbmRleCBkZTJmMzNkLi42ODI2NDE5IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXRoL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtdGgvc3RyaW5ncy54bWwKQEAgLTI0Nyw2ICsyNDcsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX2FsbG93X29uX2V4dGVybmFsX3N1bW1hcnkiIG1zZ2lkPSIzMTkxOTUyNTA1ODYwMzQzMjMzIj4i4LmD4Lir4LmJ4Liq4Liy4Lih4Liy4Lij4LiW4LmA4LiC4Li14Lii4LiZ4LmB4Lit4Lib4LiV4LmI4Liy4LiH4LmGIOC5hOC4m+C4ouC4seC4h+C4l+C4teC5iOC5gOC4geC5h+C4muC4oOC4suC4ouC4meC4reC4geC5hOC4lOC5iSDguYLguJTguKLguYTguKHguYjguITguLPguJnguLbguIfguJbguLbguIfguITguYjguLLguYPguJnguYTguJ/guKXguYwgTWFuaWZlc3QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiLguJrguLHguIfguITguLHguJrguYPguKvguYnguIHguLTguIjguIHguKPguKPguKHguJvguKPguLHguJrguILguJnguLLguJTguYTguJTguYkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllc19zdW1tYXJ5IiBtc2dpZD0iNDUwODIxNzQ3Njk5NzE4MjIxNiI+IuC4l+C4s+C5g+C4q+C5ieC4geC4tOC4iOC4geC4o+C4o+C4oeC4l+C4seC5ieC4h+C4q+C4oeC4lOC4m+C4o+C4seC4muC4guC4meC4suC4lOC5hOC4lOC5ieC4quC4s+C4q+C4o+C4seC4muC4q+C4meC5ieC4suC4leC5iOC4suC4h+C4q+C4peC4suC4ouC4muC4suC4mSDguYLguJTguKLguYTguKHguYjguITguLPguJnguLbguIfguJbguLbguIfguITguYjguLLguYPguJnguYTguJ/guKXguYwgTWFuaWZlc3QiPC9zdHJpbmc+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnQgKDE0NjE4OTMzNTEyNzg5NDA0MTYpIC0tPgorICAgIDxza2lwIC8+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnRfc3VtbWFyeSAoMjI1MjU2MzQ5NzQ4NTQzNjUzNCkgLS0+CisgICAgPHNraXAgLz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF90aXRsZSIgbXNnaWQ9IjM4NjA0NzE2NTQ0Mzk0MTg4MjIiPiLguKPguKvguLHguKrguJzguYjguLLguJnguIHguLLguKPguKrguLPguKPguK3guIfguILguYnguK3guKHguLnguKXguYPguJnguYDguJTguKrguIHguYzguJfguYfguK3guJsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9ub25lIiBtc2dpZD0iNjk1MTA5NTQ4NTUzNzc2Nzk1NiI+IuC4geC4suC4o+C4quC4s+C4o+C4reC4h+C4guC5ieC4reC4oeC4ueC4peC5gOC4leC5h+C4oeC4o+C4ueC4m+C5geC4muC4muC5g+C4meC5gOC4lOC4quC4geC5jOC4l+C5h+C4reC4myDguYTguKHguYjguYTguJTguYnguKPguLHguJrguIHguLLguKPguJvguYnguK3guIfguIHguLHguJnguYPguJnguILguJPguLDguJnguLXguYkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4i4LmB4LiV4Liw4LmA4Lie4Li34LmI4Lit4LmA4Lib4Lil4Li14LmI4Lii4LiZ4Lir4Lij4Li34Lit4Lil4Lia4Lij4Lir4Lix4Liq4Lic4LmI4Liy4LiZ4Liq4Liz4Lir4Lij4Lix4Lia4LiB4Liy4Lij4Liq4Liz4Lij4Lit4LiH4LiC4LmJ4Lit4Lih4Li54Lil4LmA4LiV4LmH4Lih4Lij4Li54Lib4LmB4Lia4Lia4LmD4LiZ4LmA4LiU4Liq4LiB4LmM4LiX4LmH4Lit4LibIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy10bC9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy10bC9hcnJheXMueG1sCmluZGV4IGM3Y2Y2ZDIuLmE3ZmI2OGMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtdGwvYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXRsL2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+IlBhbGFnaW5nIGd1bWFtaXQgbmcgcGFnc3VzdXJpbmcgSERDUCI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iMzEwMDUzNDg3NDUyOTI0MDI5MSI+IjY0SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMU0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2NDA1MjAzMjM5NTYwNjk1MjY2Ij4iNE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTZNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+Ikktb2ZmIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTU5MzI4OTM3NjUwMjMxMjkyMyI+IjY0SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IjI1NksiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4iMU0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxODA4ODM3NzQ1MDk0NzY1NDEiPiI0TSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI4MDMxOTkxMDI1ODkxMjY5MzgiPiIxNk0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI1MjQ3OTkzOTU3NzA2MTAxNTQiPiI2NEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzNTM0NzgyNzExMDQ1MjYyMzQ0Ij4iMjU2SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjgwODU4NjcyMDkyMDIxNTM0MDMiPiIxTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwODk0NzA3MjA0NTEwNjgzNjQiPiJJLW9mZiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxTSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+IjY0SyBrYWRhIGxvZyBidWZmZXIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyODIyMzA5NzQ3Njc1NzU4NjI4Ij4iMjU2SyBrYWRhIGxvZyBidWZmZXIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4iMU0ga2FkYSBsb2cgYnVmZmVyIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+IjRNIGthZGEgbG9nIGJ1ZmZlciI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiIxNk0ga2FkYSBsb2cgYnVmZmVyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+Ikktb2ZmIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjk2OTQ1ODAyOTM0NDc1MDI2MiI+IjY0SyBrYWRhIGxvZyBidWZmZXIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzQyMjg1MTE1NjY1Njk4MTY4Ij4iMjU2SyBrYWRhIGxvZyBidWZmZXIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4iMU0ga2FkYSBsb2cgYnVmZmVyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+IjRNIGthZGEgbG9nIGJ1ZmZlciI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU0MzEzNTQ5NTY4NTY2NTUxMjAiPiIxNk0ga2FkYSBsb2cgYnVmZmVyIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+Ik5ha2Etb2ZmIGFuZyBhbmltYXRpb24iPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy10bC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtdGwvc3RyaW5ncy54bWwKaW5kZXggMjMxMDc5Yi4uOGY2MjMyNiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy10bC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXRsL3N0cmluZ3MueG1sCkBAIC0yNDcsNiArMjQ3LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+Ik1hcmEtd3JpdGUgbmEgc2EgZXh0ZXJuYWwgc3RvcmFnZSBhbmcgYW51bWFuZyBhcHAsIGFudW1hbiBhbmcgbWFuaWZlc3QgdmFsdWUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiJTYXBpbGl0YW5nIGdhd2luZyByZXNpemFibGUgYW5nIG1nYSBha3RpYmlkYWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllc19zdW1tYXJ5IiBtc2dpZD0iNDUwODIxNzQ3Njk5NzE4MjIxNiI+Ikdhd2luZyByZXNpemFibGUgcGFyYSBzYSBtdWx0aS13aW5kb3cgYW5nIGxhaGF0IG5nIGFrdGliaWRhZCwgYW51bWFuIGFuZyBtZ2EgbWFuaWZlc3QgdmFsdWUuIjwvc3RyaW5nPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0ICgxNDYxODkzMzUxMjc4OTQwNDE2KSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkgKDIyNTI1NjM0OTc0ODU0MzY1MzQpIC0tPgorICAgIDxza2lwIC8+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4iUGFzc3dvcmQgbmcgcGFnLWJhY2t1cCBuZyBkZXNrdG9wIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiJLYXNhbHVrdXlhbmcgaGluZGkgcGlub3Byb3Rla3RhaGFuIGFuZyBtZ2EgYnVvbmcgcGFnLWJhY2t1cCBuZyBkZXNrdG9wIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfY2hhbmdlIiBtc2dpZD0iMjczMTE2MzQyNTA4MTE3MjYzOCI+IlBpbmR1dGluIHVwYW5nIGJhZ3VoaW4gbyBhbGlzaW4gYW5nIHBhc3N3b3JkIHBhcmEgc2EgbWdhIGJ1b25nIHBhZy1iYWNrdXAgbmcgZGVza3RvcCI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtdHIvYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtdHIvYXJyYXlzLnhtbAppbmRleCA5MzI2OTAzZS4uMGJhZTQzNyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy10ci9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtdHIvYXJyYXlzLnhtbApAQCAtNTksMjMgKzU5LDI2IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjQ1MDc1NjMxMjMxMjEyNzMyIj4iSERDUCBkZW5ldGltaW5pIGhlciB6YW1hbiBrdWxsYW4iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMxMDA1MzQ4NzQ1MjkyNDAyOTEiPiI2NCBLQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NiBLQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjYzNjEyODY5MjQyNjg3MTYzOTciPiIxIE1CIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjQwNTIwMzIzOTU2MDY5NTI2NiI+IjQgTUIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTYgTUIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4NjY1MjA2MTk5MjA5Njk4NTAxIj4iS2FwYWzEsSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NCBLQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IjI1NiBLQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI0MjM1Mjg2NzUyOTQzMzM4MzEiPiIxIE1CIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNCBNQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI4MDMxOTkxMDI1ODkxMjY5MzgiPiIxNiBNQiI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfbG93cmFtX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUyNDc5OTM5NTc3MDYxMDE1NCI+IjY0IEtCIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1NiBLQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjgwODU4NjcyMDkyMDIxNTM0MDMiPiIxIE1CIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjA4OTQ3MDcyMDQ1MTA2ODM2NCI+IkthcGFsxLEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0NjIyNDYwMzMzMDM4NTg2NzkxIj4iNjQgS0IiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2IEtCIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTcwNDk0Njc2NjY5OTI0MjY1MyI+IjEgTUIiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiJHw7xubMO8ayBhcmFiZWxsZcSfaSBiYcWfxLFuYSA2NCBLQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiJHw7xubMO8ayBhcmFiZWxsZcSfaSBiYcWfxLFuYSAyNTYgS0IiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4iR8O8bmzDvGsgYXJhYmVsbGXEn2kgYmHFn8SxbmEgMSBNQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjU3NDg1Mjg2NDM5Mzc1MDAzNDkiPiJHw7xubMO8ayBhcmFiZWxsZcSfaSBiYcWfxLFuYSA0IE1CIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+IkfDvG5sw7xrIGFyYWJlbGxlxJ9pIGJhxZ/EsW5hIDE2IE1CIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+IkthcGFsxLEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4iR8O8bmzDvGsgYXJhYmVsbGXEn2kgYmHFn8SxbmEgNjQgS0IiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzQyMjg1MTE1NjY1Njk4MTY4Ij4iR8O8bmzDvGsgYXJhYmVsbGXEn2kgYmHFn8SxbmEgMjU2IEtCIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTMxNDIzNDI5OTU1MjI1NDYyMSI+IkfDvG5sw7xrIGFyYWJlbGxlxJ9pIGJhxZ/EsW5hIDEgTUIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4iR8O8bmzDvGsgYXJhYmVsbGXEn2kgYmHFn8SxbmEgNCBNQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU0MzEzNTQ5NTY4NTY2NTUxMjAiPiJHw7xubMO8ayBhcmFiZWxsZcSfaSBiYcWfxLFuYSAxNiBNQiI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9IndpbmRvd19hbmltYXRpb25fc2NhbGVfZW50cmllcyI+CiAgICAgPGl0ZW0gbXNnaWQ9IjgxMzQxNTY1OTkzNzA4MjQwODEiPiJBbmltYXN5b24ga2FwYWzEsSI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXRyL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy10ci9zdHJpbmdzLnhtbAppbmRleCBjNDRkN2Y4Li41ZTA4MzlhIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXRyL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtdHIvc3RyaW5ncy54bWwKQEAgLTI0Nyw2ICsyNDcsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX2FsbG93X29uX2V4dGVybmFsX3N1bW1hcnkiIG1zZ2lkPSIzMTkxOTUyNTA1ODYwMzQzMjMzIj4iQmlsZGlyaWxlbiBkZcSfZXJsZXJkZW4gYmHEn8SxbXPEsXogb2xhcmFrIHV5Z3VsYW1hbGFyxLEgaGFyaWNpIGRlcG9sYW1heWEgeWF6bWFrIGnDp2luIHV5Z3VuIGhhbGUgZ2V0aXJpciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzIiBtc2dpZD0iODYxNTc2NDM3ODE0NzgyNDk4NSI+IkV0a2lubGlrbGVyaSB5ZW5pZGVuIGJveXV0bGFuZMSxcsSxbGFiaWxtZXllIHpvcmxhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXNfc3VtbWFyeSIgbXNnaWQ9IjQ1MDgyMTc0NzY5OTcxODIyMTYiPiJNYW5pZmVzdCBkZcSfZXJsZXJpbmRlbiBiYcSfxLFtc8SxeiBvbGFyYWssIHTDvG0gZXRraW5saWtsZXJpIGJpcmRlbiBmYXpsYSBwZW5jZXJlZGUgeWVuaWRlbiBib3l1dGxhbmTEsXLEsWxhYmlsaXIgaGFsZSBnZXRpcmlyLiI8L3N0cmluZz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBlbmFibGVfZnJlZWZvcm1fc3VwcG9ydCAoMTQ2MTg5MzM1MTI3ODk0MDQxNikgLS0+CisgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5ICgyMjUyNTYzNDk3NDg1NDM2NTM0KSAtLT4KKyAgICA8c2tpcCAvPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+Ik1hc2HDvHN0w7wgeWVkZWtsZW1lIMWfaWZyZXNpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiJNYXNhw7xzdMO8IHRhbSB5ZWRla2xlbWVsZXJpIMWfdSBhbiBrb3J1bm11eW9yIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfY2hhbmdlIiBtc2dpZD0iMjczMTE2MzQyNTA4MTE3MjYzOCI+Ik1hc2HDvHN0w7wgdGFtIHllZGVrbGVtZWxlcmluaW4gxZ9pZnJlc2luaSBkZcSfacWfdGlybWVrIHZleWEga2FsZMSxcm1hayBpw6dpbiBkb2t1bnVuIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy11ay9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy11ay9hcnJheXMueG1sCmluZGV4IDZjY2NjOGMuLjA3ODZhYzMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtdWsvYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXVrL2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+ItCX0LDQstC20LTQuCDQstC40LrQvtGA0LjRgdGC0L7QstGD0LLQsNGC0Lgg0L/QtdGA0LXQstGW0YDQutGDIEhEQ1AiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMxMDA1MzQ4NzQ1MjkyNDAyOTEiPiI2NCDQmtCxIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTA1NjExNzU0NTA4OTg4NDc2Ij4iMjU2INCa0LEiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMSDQnNCxIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjQwNTIwMzIzOTU2MDY5NTI2NiI+IjQg0JzQsSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMwMjU0MzEyMTEwMTM0MjQwOTciPiIxNiDQnNCxIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+ItCS0LjQvNC60L3QtdC90L4iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4iNjQg0JrQsSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IjI1NiDQmtCxIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjEg0JzQsSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjQg0JzQsSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI4MDMxOTkxMDI1ODkxMjY5MzgiPiIxNiDQnNCxIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjQg0JrQsSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiIyNTYg0JrQsSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjgwODU4NjcyMDkyMDIxNTM0MDMiPiIxINCc0LEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4i0JLQuNC80LrQvdC10L3QviI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NCDQmtCxIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+IjI1NiDQmtCxIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTcwNDk0Njc2NjY5OTI0MjY1MyI+IjEg0JzQsSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+ItCR0YPRhNC10YA6INC80LDQutGBLiA2NCDQmtCxIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMjgyMjMwOTc0NzY3NTc1ODYyOCI+ItCR0YPRhNC10YA6INC80LDQutGBLiAyNTYg0JrQsSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiLQkdGD0YTQtdGAOiDQvNCw0LrRgS4gMSDQnNCxIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+ItCR0YPRhNC10YA6INC80LDQutGBLiA0INCc0LEiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxOTc4NjI5MDUxMDg1MTExNTkyIj4i0JHRg9GE0LXRgDog0LzQsNC60YEuIDE2INCc0LEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4i0JLQuNC80LrQvdC10L3QviI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI5Njk0NTgwMjkzNDQ3NTAyNjIiPiLQkdGD0YTQtdGAINC20YPRgNC90LDQu9GDOiA2NCDQmtCxIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+ItCR0YPRhNC10YAg0LbRg9GA0L3QsNC70YM6IDI1NiDQmtCxIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTMxNDIzNDI5OTU1MjI1NDYyMSI+ItCR0YPRhNC10YAg0LbRg9GA0L3QsNC70YM6IDEg0JzQsSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM2MDYwNDc3ODA3OTI4OTQxNTEiPiLQkdGD0YTQtdGAINC20YPRgNC90LDQu9GDOiA0INCc0LEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4i0JHRg9GE0LXRgCDQttGD0YDQvdCw0LvRgzogMTYg0JzQsSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9IndpbmRvd19hbmltYXRpb25fc2NhbGVfZW50cmllcyI+CiAgICAgPGl0ZW0gbXNnaWQ9IjgxMzQxNTY1OTkzNzA4MjQwODEiPiLQkNC90ZbQvNCw0YbRltGOINCy0LjQvNC60L3QtdC90L4iPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy11ay9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtdWsvc3RyaW5ncy54bWwKaW5kZXggZDVkYmU5MC4uMjQ0OGIyMyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy11ay9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXVrL3N0cmluZ3MueG1sCkBAIC0yNDcsNiArMjQ3LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX2FsbG93X29uX2V4dGVybmFsX3N1bW1hcnkiIG1zZ2lkPSIzMTkxOTUyNTA1ODYwMzQzMjMzIj4i0JTQvtC00LDRgtC60Lgg0LzQvtC20L3QsCDQt9Cw0L/QuNGB0YPQstCw0YLQuCDQvdCwINC30L7QstC90ZbRiNC90Y4g0L/QsNC84oCZ0Y/RgtGMINC90LXQt9Cw0LvQtdC20L3QviDQstGW0LQg0LfQvdCw0YfQtdC90Ywg0LzQsNC90ZbRhNC10YHRgtGDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4i0J/RgNC40LzRg9GB0L7QstC+INC80LDRgdGI0YLQsNCx0YPQstCw0YLQuCDQsNC60YLQuNCy0L3RltGB0YLRjCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4i0JDQutGC0LjQstC90ZbRgdGC0Ywg0LzQsNGB0YjRgtCw0LHRg9Cy0LDRgtC40LzQtdGC0YzRgdGPINC90LAg0LrRltC70YzQutCwINCy0ZbQutC+0L0sINC90LXQt9Cw0LvQtdC20L3QviDQstGW0LQg0LfQvdCw0YfQtdC90Ywg0YMg0YTQsNC50LvRliDQvNCw0L3RltGE0LXRgdGC0YMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnQiIG1zZ2lkPSIxNDYxODkzMzUxMjc4OTQwNDE2Ij4i0KPQstGW0LzQutC90YPRgtC4INCy0ZbQutC90LAg0LTQvtCy0ZbQu9GM0L3QvtCz0L4g0YTQvtGA0LzQsNGC0YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5IiBtc2dpZD0iMjI1MjU2MzQ5NzQ4NTQzNjUzNCI+ItCj0LLRltC80LrQvdGD0YLRjNGB0Y8g0LXQutGB0L/QtdGA0LjQvNC10L3RgtCw0LvRjNC90ZYg0LLRltC60L3QsCDQtNC+0LLRltC70YzQvdC+0LPQviDRhNC+0YDQvNCw0YLRgy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4i0J/QsNGA0L7Qu9GMINGA0LXQt9C10YDQsi7QutC+0L/RltGXINC90LAg0J/QmiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4i0J/QvtCy0L3RliDRgNC10LfQtdGA0LLQvdGWINC60L7Qv9GW0Zcg0L3QsCDQutC+0LzQv+KAmdGO0YLQtdGA0ZYg0L3QsNGA0LDQt9GWINC90LUg0LfQsNGF0LjRidC10L3RliI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiLQotC+0YDQutC90ZbRgtGM0YHRjywg0YnQvtCxINC30LzRltC90LjRgtC4INGH0Lgg0LLQuNC00LDQu9C40YLQuCDQv9Cw0YDQvtC70Ywg0LTQu9GPINC/0L7QstC90L7Qs9C+INGA0LXQt9C10YDQstC90L7Qs9C+INC60L7Qv9GW0Y7QstCw0L3QvdGPINC90LAg0LrQvtC80L/igJnRjtGC0LXRgCI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtdXItclBLL2FycmF5cy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXVyLXJQSy9hcnJheXMueG1sCmluZGV4IDgwZmI3NTAuLmUxZmUyNjkgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtdXItclBLL2FycmF5cy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy11ci1yUEsvYXJyYXlzLnhtbApAQCAtNTksMjMgKzU5LDI2IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjQ1MDc1NjMxMjMxMjEyNzMyIj4i4oCP24HZhduM2LTbgSBIRENQINqG24zaqdmG2q8g2KfYs9iq2LnZhdin2YQg2qnYsduM2roiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMxMDA1MzQ4NzQ1MjkyNDAyOTEiPiI2NEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTZLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+IjFNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjQwNTIwMzIzOTU2MDY5NTI2NiI+IjRNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2TSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiLYotmBIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTU5MzI4OTM3NjUwMjMxMjkyMyI+IjY0SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IjI1NksiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4iMU0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxODA4ODM3NzQ1MDk0NzY1NDEiPiI0TSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI4MDMxOTkxMDI1ODkxMjY5MzgiPiIxNk0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI1MjQ3OTkzOTU3NzA2MTAxNTQiPiI2NEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzNTM0NzgyNzExMDQ1MjYyMzQ0Ij4iMjU2SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjgwODU4NjcyMDkyMDIxNTM0MDMiPiIxTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwODk0NzA3MjA0NTEwNjgzNjQiPiLYotmBIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDYyMjQ2MDMzMzAzODU4Njc5MSI+IjY0SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIyMTIxMjU2MjUxNjk1ODIzMzAiPiIyNTZLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTcwNDk0Njc2NjY5OTI0MjY1MyI+IjFNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9zdW1tYXJpZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI3MzQ2NTk1NDczNTg4NzY1MDE5Ij4i4oCPNjRLINmB24wg2YTYp9qvINio2YHYsSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiLigI8yNTZLINmB24wg2YTYp9qvINio2YHYsSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiLigI8xTSDZgduMINmE2KfaryDYqNmB2LEiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1NzQ4NTI4NjQzOTM3NTAwMzQ5Ij4i4oCPNE0g2YHbjCDZhNin2q8g2KjZgdixIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+IuKAjzE2TSDZgduMINmE2KfaryDYqNmB2LEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4i2KLZgSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI5Njk0NTgwMjkzNDQ3NTAyNjIiPiLigI82NEsg2YHbjCDZhNin2q8g2KjZgdixIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+IuKAjzI1Nksg2YHbjCDZhNin2q8g2KjZgdixIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTMxNDIzNDI5OTU1MjI1NDYyMSI+IuKAjzFNINmB24wg2YTYp9qvINio2YHYsSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM2MDYwNDc3ODA3OTI4OTQxNTEiPiLigI80TSDZgduMINmE2KfaryDYqNmB2LEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4i4oCPMTZNINmB24wg2YTYp9qvINio2YHYsSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9IndpbmRvd19hbmltYXRpb25fc2NhbGVfZW50cmllcyI+CiAgICAgPGl0ZW0gbXNnaWQ9IjgxMzQxNTY1OTkzNzA4MjQwODEiPiLYp9uM2YbbjNmF24zYtNmGINii2YEg24HbkiI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXVyLXJQSy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtdXItclBLL3N0cmluZ3MueG1sCmluZGV4IDRjOWMxNzguLjA4MzQzMDMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtdXItclBLL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtdXItclBLL3N0cmluZ3MueG1sCkBAIC0yNDcsNiArMjQ3LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+IuKAj21hbmlmZXN0INin2YLYr9in2LEg2LPbkiDZgti32Lkg2YbYuNix2Iwg2qnYs9uMINio2r7bjCDYp9uM2b4g2qnZiCDYqNuM2LHZiNmG24wg2KfYs9m52YjYsduM2Kwg2b7YsSDZhNqp2r7bkiDYrNin2YbbkiDaqdinINin24HZhCDYqNmG2KfYqtinINuB25IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiLYs9ix2q/YsdmF24zZiNq6INqp2Ygg2LHbjCDYs9in2KbYsiDYp9uM2KjZhCDYqNmG2KfYptuM2roiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllc19zdW1tYXJ5IiBtc2dpZD0iNDUwODIxNzQ3Njk5NzE4MjIxNiI+IuKAj21hbmlmZXN0INin2YLYr9in2LEg2LPbkiDZgti32Lkg2YbYuNix2Iwg2YXZhNm524wg2YjZhtqI2Ygg2qnbjNmE2KbbkiDYqtmF2KfZhSDYs9ix2q/YsdmF24zZiNq6INqp2Ygg2LHbjCDYs9in2KbYsiDYp9uM2KjZhCDYqNmG2KfYqtinINuB25LblCI8L3N0cmluZz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBlbmFibGVfZnJlZWZvcm1fc3VwcG9ydCAoMTQ2MTg5MzM1MTI3ODk0MDQxNikgLS0+CisgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5ICgyMjUyNTYzNDk3NDg1NDM2NTM0KSAtLT4KKyAgICA8c2tpcCAvPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+ItqI24zYs9qpINm52KfZviDaqdinINio24zaqSDYp9m+INm+2KfYsyDZiNix2ogiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9ub25lIiBtc2dpZD0iNjk1MTA5NTQ4NTUzNzc2Nzk1NiI+ItqI24zYs9qpINm52KfZviDaqduSINmF2qnZhdmEINio24zaqSDYp9m+2LMg2YHbjCDYp9mE2K3Yp9mEINmF2K3ZgdmI2Lgg2qnbjNuSINuB2YjYptuSINmG24HbjNq6INuB24zauiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiLaiNuM2LPaqSDZudin2b4g2qnbkiDZhdqp2YXZhCDYqNuM2qkg2KfZvtizINqp24zZhNim25Ig2b7Yp9izINmI2LHaiCDaqdmIINiq2KjYr9uM2YQg2qnYsdmG25Ig24zYpyDbgdm52KfZhtuSINqp24zZhNim25Ig2bnahiDaqdix24zauiI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtdXotclVaL2FycmF5cy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXV6LXJVWi9hcnJheXMueG1sCmluZGV4IGE4NGM1ZDUuLjUzZDRkYjcgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtdXotclVaL2FycmF5cy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy11ei1yVVovYXJyYXlzLnhtbApAQCAtNTksMjMgKzU5LDI2IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjQ1MDc1NjMxMjMxMjEyNzMyIj4iSGFyIGRvaW0gSERDUCB0ZWtzaGlydXZpZGFuIGZveWRhbGFuaWxzaW4iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMxMDA1MzQ4NzQ1MjkyNDAyOTEiPiI2NCBLQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NiBLQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjYzNjEyODY5MjQyNjg3MTYzOTciPiIxIE1CIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjQwNTIwMzIzOTU2MDY5NTI2NiI+IjQgTUIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTYgTUIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4NjY1MjA2MTk5MjA5Njk4NTAxIj4iT+KAmGNoaXEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4iNjQgS0IiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0ODc1NDUzNDAyMzYxNDUzMjQiPiIyNTYgS0IiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4iMSBNQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjQgTUIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyODAzMTk5MTAyNTg5MTI2OTM4Ij4iMTYgTUIiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI1MjQ3OTkzOTU3NzA2MTAxNTQiPiI2NCBLQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiIyNTYgS0IiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMSBNQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwODk0NzA3MjA0NTEwNjgzNjQiPiJP4oCYY2hpcSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NCBLQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIyMTIxMjU2MjUxNjk1ODIzMzAiPiIyNTYgS0IiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNzA0OTQ2NzY2Njk5MjQyNjUzIj4iMSBNQiI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+IkJ1ZmVyOiBtYWtzLiA2NCBLQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiJCdWZlcjogbWFrcy4gMjU2IEtCIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjY5OTMwNjE5ODM1NzQ5NjczMSI+IkJ1ZmVyOiBtYWtzLiAxIE1CIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+IkJ1ZmVyOiBtYWtzLiA0IE1CIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+IkJ1ZmVyOiBtYWtzLiAxNiBNQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY5MjEwNDg4Mjk3OTExNzkzMzEiPiJP4oCYY2hpcSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI5Njk0NTgwMjkzNDQ3NTAyNjIiPiJCdWZlcjogbWFrcy4gNjQgS0IiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzQyMjg1MTE1NjY1Njk4MTY4Ij4iQnVmZXI6IG1ha3MuIDI1NiBLQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiJCdWZlcjogbWFrcy4gMSBNQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM2MDYwNDc3ODA3OTI4OTQxNTEiPiJCdWZlcjogbWFrcy4gNCBNQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU0MzEzNTQ5NTY4NTY2NTUxMjAiPiJCdWZlcjogbWFrcy4gMTYgTUIiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4iQW5pbWF0c2l5YSBv4oCYY2hpcSI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXV6LXJVWi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtdXotclVaL3N0cmluZ3MueG1sCmluZGV4IGQxMzhhMjguLmQyZDhiNzYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtdXotclVaL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtdXotclVaL3N0cmluZ3MueG1sCkBAIC0yNDcsNiArMjQ3LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+Ik1hbmlmZXN0IHFpeW1hdGlkYW4gcWF04oCZaSBuYXphciBpc3RhbGdhbiBpbG92YW5pIHRhc2hxaSB4b3RpcmFnYSBzYXFsYXNoIGlta29uaW5pIGJlcmFkaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzIiBtc2dpZD0iODYxNTc2NDM3ODE0NzgyNDk4NSI+IkhhcmFrYXRsYXJuaSBtb3NsYXNodXZjaGFuIG/igJhsY2hhbWdhIGtlbHRpcmlzaCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4iTWFuaWZlc3QgcWl5bWF0aWRhbiBxYXTigJlpIG5hemFyIGJhcmNoYSBoYXJha2F0bGFybmkga2/igJhwIG95bmFsaSByZWppbWdhIG1vc2xhc2h0aXJhZGkuIjwvc3RyaW5nPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0ICgxNDYxODkzMzUxMjc4OTQwNDE2KSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkgKDIyNTI1NjM0OTc0ODU0MzY1MzQpIC0tPgorICAgIDxza2lwIC8+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4iWmF4aXJhIG51c3hhIHVjaHVuIHBhcm9sIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiJLb21weXV0ZXJkYWdpIHpheGlyYSBudXN4YWxhciBob3ppcmdpIHZhcXRkYSBoaW1veWFsYW5tYWdhbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiJJc2ggc3RvbGkgdG9cJ2xpcSB6YXhpcmEgbnVzeGFsYXJpIHBhcm9saW5pIG/igJh6Z2FydGlyaXNoIHlva2kgb+KAmGNoaXJpc2ggdWNodW4gYnUgeWVybmkgYm9zaW5nLiI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtdmkvYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtdmkvYXJyYXlzLnhtbAppbmRleCA3YzMxODFmLi5iMDNkODQ3IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXZpL2FycmF5cy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy12aS9hcnJheXMueG1sCkBAIC01OSwyMyArNTksMjYgQEAKICAgICA8aXRlbSBtc2dpZD0iNDUwNzU2MzEyMzEyMTI3MzIiPiJMdcO0biBz4butIGThu6VuZyBraeG7g20gdHJhIEhEQ1AiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMxMDA1MzQ4NzQ1MjkyNDAyOTEiPiI2NEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTZLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+IjFNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjQwNTIwMzIzOTU2MDY5NTI2NiI+IjRNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2TSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiJU4bqvdCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0ODc1NDUzNDAyMzYxNDUzMjQiPiIyNTZLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjFNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyODAzMTk5MTAyNTg5MTI2OTM4Ij4iMTZNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjRLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMU0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4iVOG6r3QiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0NjIyNDYwMzMzMDM4NTg2NzkxIj4iNjRLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+IjI1NksiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNzA0OTQ2NzY2Njk5MjQyNjUzIj4iMU0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiI2NEsvbOG6p24gdOG6o2kgbmjhuq10IGvDvSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiIyNTZLL2zhuqduIHThuqNpIG5o4bqtdCBrw70iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4iMU0vbOG6p24gdOG6o2kgbmjhuq10IGvDvSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjU3NDg1Mjg2NDM5Mzc1MDAzNDkiPiI0TS9s4bqnbiB04bqjaSBuaOG6rXQga8O9IjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+IjE2TS9s4bqnbiB04bqjaSBuaOG6rXQga8O9IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+IlThuq90IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjk2OTQ1ODAyOTM0NDc1MDI2MiI+IjY0Sy9s4bqnbiB04bqjaSBuaOG6rXQga8O9IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+IjI1NksvbOG6p24gdOG6o2kgbmjhuq10IGvDvSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiIxTS9s4bqnbiB04bqjaSBuaOG6rXQga8O9IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+IjRNL2zhuqduIHThuqNpIG5o4bqtdCBrw70iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4iMTZNL2zhuqduIHThuqNpIG5o4bqtdCBrw70iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4iVOG6r3QgaMOsbmggxJHhu5luZyI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXZpL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy12aS9zdHJpbmdzLnhtbAppbmRleCA3YWI4YjAyLi4xNzhlMzAxIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXZpL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtdmkvc3RyaW5ncy54bWwKQEAgLTI0Nyw2ICsyNDcsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX2FsbG93X29uX2V4dGVybmFsX3N1bW1hcnkiIG1zZ2lkPSIzMTkxOTUyNTA1ODYwMzQzMjMzIj4iR2nDunAg4bupbmcgZOG7pW5nIGLhuqV0IGvhu7MgxJHhu6cgxJFp4buBdSBraeG7h24gxJHGsOG7o2MgZ2hpIHbDoG8gYuG7mSBuaOG7myBuZ2/DoGkgYuG6pXQga+G7gyBnacOhIHRy4buLIHThu4dwIGvDqiBraGFpIGzDoCBnw6wiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiJCdeG7mWMgY8OhYyBob+G6oXQgxJHhu5luZyBjw7MgdGjhu4MgdGhheSDEkeG7lWkga8OtY2ggdGjGsOG7m2MiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllc19zdW1tYXJ5IiBtc2dpZD0iNDUwODIxNzQ3Njk5NzE4MjIxNiI+Ikdpw7pwIHThuqV0IGPhuqMgaG/huqF0IMSR4buZbmcgY8OzIHRo4buDIHRoYXkgxJHhu5VpIGvDrWNoIHRoxrDhu5tjIGNobyBuaGnhu4F1IGPhu61hIHPhu5UgYuG6pXQga+G7gyBnacOhIHRy4buLIHThu4dwIGvDqiBraGFpIGzDoCBnw6wuIjwvc3RyaW5nPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0ICgxNDYxODkzMzUxMjc4OTQwNDE2KSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkgKDIyNTI1NjM0OTc0ODU0MzY1MzQpIC0tPgorICAgIDxza2lwIC8+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4iTeG6rXQga2jhuql1IHNhbyBsxrB1IGPhu6dhIG3DoXkgdMOtbmgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9ub25lIiBtc2dpZD0iNjk1MTA5NTQ4NTUzNzc2Nzk1NiI+IlNhbyBsxrB1IHRvw6BuIGLhu5kgbcOheSB0w61uaCBoaeG7h24ga2jDtG5nIMSRxrDhu6NjIGLhuqNvIHbhu4ciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4iQ2jhuqFtIMSR4buDIHRoYXkgxJHhu5VpIGhv4bq3YyB4w7NhIG3huq10IGto4bqpdSBkw6BuaCBjaG8gYuG7mSBzYW8gbMawdSB0b8OgbiBi4buZIHThu5tpIG3DoXkgdMOtbmgiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXpoLXJDTi9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy16aC1yQ04vYXJyYXlzLnhtbAppbmRleCAxMzc4YWFhLi5kMWQ4OTM3IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXpoLXJDTi9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtemgtckNOL2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+IuWni+e7iOS9v+eUqCBIRENQIOajgOafpSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iMzEwMDUzNDg3NDUyOTI0MDI5MSI+IjY0SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMU0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2NDA1MjAzMjM5NTYwNjk1MjY2Ij4iNE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTZNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+IuWFs+mXrSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0ODc1NDUzNDAyMzYxNDUzMjQiPiIyNTZLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjFNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyODAzMTk5MTAyNTg5MTI2OTM4Ij4iMTZNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjRLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMU0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4i5YWz6ZetIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDYyMjQ2MDMzMzAzODU4Njc5MSI+IjY0SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIyMTIxMjU2MjUxNjk1ODIzMzAiPiIyNTZLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTcwNDk0Njc2NjY5OTI0MjY1MyI+IjFNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9zdW1tYXJpZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI3MzQ2NTk1NDczNTg4NzY1MDE5Ij4i5q+P5Liq5pel5b+X57yT5Yay5Yy6NjRLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMjgyMjMwOTc0NzY3NTc1ODYyOCI+Iuavj+S4quaXpeW/l+e8k+WGsuWMujI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4i5q+P5Liq5pel5b+X57yT5Yay5Yy6MU0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1NzQ4NTI4NjQzOTM3NTAwMzQ5Ij4i5q+P5Liq5pel5b+X57yT5Yay5Yy6NE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxOTc4NjI5MDUxMDg1MTExNTkyIj4i5q+P5Liq5pel5b+X57yT5Yay5Yy6MTZNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+IuWFs+mXrSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI5Njk0NTgwMjkzNDQ3NTAyNjIiPiLmr4/kuKrml6Xlv5fnvJPlhrLljLogNjRLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+Iuavj+S4quaXpeW/l+e8k+WGsuWMuiAyNTZLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTMxNDIzNDI5OTU1MjI1NDYyMSI+Iuavj+S4quaXpeW/l+e8k+WGsuWMuiAxTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM2MDYwNDc3ODA3OTI4OTQxNTEiPiLmr4/kuKrml6Xlv5fnvJPlhrLljLogNE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4i5q+P5Liq5pel5b+X57yT5Yay5Yy6IDE2TSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9IndpbmRvd19hbmltYXRpb25fc2NhbGVfZW50cmllcyI+CiAgICAgPGl0ZW0gbXNnaWQ9IjgxMzQxNTY1OTkzNzA4MjQwODEiPiLlhbPpl63liqjnlLsiPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy16aC1yQ04vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXpoLXJDTi9zdHJpbmdzLnhtbAppbmRleCA1MDlmZjg4Li41Yjk2MzgzIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXpoLXJDTi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXpoLXJDTi9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0NywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiLlhYHorrjlsIbku7vkvZXlupTnlKjlhpnlhaXlpJbpg6jlrZjlgqjorr7lpIfvvIjml6DorrrmuIXljZXlgLzmmK/ku4DkuYjvvIkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiLlvLrliLblsIbmtLvliqjorr7kuLrlj6/osIPmlbTlpKflsI8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllc19zdW1tYXJ5IiBtc2dpZD0iNDUwODIxNzQ3Njk5NzE4MjIxNiI+IuWwhuaJgOaciea0u+WKqOiuvuS4uuWPr+mFjeWQiOWkmueql+WPo+eOr+Wig+iwg+aVtOWkp+Wwj++8iOaXoOiuuua4heWNleWAvOaYr+S7gOS5iO+8ieOAgiI8L3N0cmluZz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBlbmFibGVfZnJlZWZvcm1fc3VwcG9ydCAoMTQ2MTg5MzM1MTI3ODk0MDQxNikgLS0+CisgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5ICgyMjUyNTYzNDk3NDg1NDM2NTM0KSAtLT4KKyAgICA8c2tpcCAvPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+IuahjOmdouWkh+S7veWvhueggSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4i5qGM6Z2i5a6M5pW05aSH5Lu95b2T5YmN5pyq6K6+572u5a+G56CB5L+d5oqkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfY2hhbmdlIiBtc2dpZD0iMjczMTE2MzQyNTA4MTE3MjYzOCI+IuinpuaRuOWPr+abtOaUueaIluWIoOmZpOeUqOS6juahjOmdouWujOaVtOWkh+S7veeahOWvhueggSI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtemgtckhLL2FycmF5cy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXpoLXJISy9hcnJheXMueG1sCmluZGV4IGYxNWNhZmYuLmE3YjAwMzEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtemgtckhLL2FycmF5cy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy16aC1ySEsvYXJyYXlzLnhtbApAQCAtNTksMjMgKzU5LDI2IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjQ1MDc1NjMxMjMxMjEyNzMyIj4i5rC46YGg5L2/55SoIEhEQ1Ag5qqi5p+lIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjRLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTA1NjExNzU0NTA4OTg4NDc2Ij4iMjU2SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjYzNjEyODY5MjQyNjg3MTYzOTciPiIxTSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0TSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMwMjU0MzEyMTEwMTM0MjQwOTciPiIxNk0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4NjY1MjA2MTk5MjA5Njk4NTAxIj4i6Zec6ZaJIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTU5MzI4OTM3NjUwMjMxMjkyMyI+IjY0SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IjI1NksiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4iMU0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxODA4ODM3NzQ1MDk0NzY1NDEiPiI0TSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI4MDMxOTkxMDI1ODkxMjY5MzgiPiIxNk0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI1MjQ3OTkzOTU3NzA2MTAxNTQiPiI2NEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzNTM0NzgyNzExMDQ1MjYyMzQ0Ij4iMjU2SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjgwODU4NjcyMDkyMDIxNTM0MDMiPiIxTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwODk0NzA3MjA0NTEwNjgzNjQiPiLpl5zplokiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0NjIyNDYwMzMzMDM4NTg2NzkxIj4iNjRLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+IjI1NksiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNzA0OTQ2NzY2Njk5MjQyNjUzIj4iMU0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiLmr4/lgIvoqJjpjITnt6nooZ3ljYAgNjRLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMjgyMjMwOTc0NzY3NTc1ODYyOCI+Iuavj+WAi+iomOmMhOe3qeihneWNgCAyNTZLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjY5OTMwNjE5ODM1NzQ5NjczMSI+Iuavj+WAi+iomOmMhOe3qeihneWNgCAxTSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjU3NDg1Mjg2NDM5Mzc1MDAzNDkiPiLmr4/lgIvoqJjpjITnt6nooZ3ljYAgNE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxOTc4NjI5MDUxMDg1MTExNTkyIj4i5q+P5YCL6KiY6YyE57ep6KGd5Y2AIDE2TSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY5MjEwNDg4Mjk3OTExNzkzMzEiPiLpl5zplokiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4i5q+P5YCL6KiY6YyE57ep6KGd5Y2AIDY0SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzNDIyODUxMTU2NjU2OTgxNjgiPiLmr4/lgIvoqJjpjITnt6nooZ3ljYAgMjU2SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiLmr4/lgIvoqJjpjITnt6nooZ3ljYAgMU0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4i5q+P5YCL6KiY6YyE57ep6KGd5Y2AIDRNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTQzMTM1NDk1Njg1NjY1NTEyMCI+Iuavj+WAi+iomOmMhOe3qeihneWNgCAxNk0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4i6Zec6ZaJ5YuV55WrIjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtemgtckhLL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy16aC1ySEsvc3RyaW5ncy54bWwKaW5kZXggZjMyMzY2Ny4uZGI1ZjA5YiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy16aC1ySEsvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy16aC1ySEsvc3RyaW5ncy54bWwKQEAgLTI0Nyw2ICsyNDcsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX2FsbG93X29uX2V4dGVybmFsX3N1bW1hcnkiIG1zZ2lkPSIzMTkxOTUyNTA1ODYwMzQzMjMzIj4i5YWB6Kix5bCH5omA5pyJ5oeJ55So56iL5byP5a+r5YWl5Yiw5aSW6YOo5YSy5a2Y5a6M6ZaTICjmiYDmnInos4foqIrmuIXllq7lgLwpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4i5by35Yi25Y+v6K6K5pu05rS75YuV5bC65a+4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXNfc3VtbWFyeSIgbXNnaWQ9IjQ1MDgyMTc0NzY5OTcxODIyMTYiPiLlnKjku7vkvZXos4foqIrmuIXllq7lgLzkuIvvvIzlhYHoqLHngrrlpJrlgIvoppbnqpforormm7TmiYDmnInmtLvli5XnmoTlsLrlr7jjgIIiPC9zdHJpbmc+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnQgKDE0NjE4OTMzNTEyNzg5NDA0MTYpIC0tPgorICAgIDxza2lwIC8+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnRfc3VtbWFyeSAoMjI1MjU2MzQ5NzQ4NTQzNjUzNCkgLS0+CisgICAgPHNraXAgLz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF90aXRsZSIgbXNnaWQ9IjM4NjA0NzE2NTQ0Mzk0MTg4MjIiPiLmoYzpnaLpm7vohablgpnku73lr4bnorwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9ub25lIiBtc2dpZD0iNjk1MTA5NTQ4NTUzNzc2Nzk1NiI+IuahjOS4iumbu+iFpueahOWujOaVtOWCmeS7veebruWJjeacquWPl+S/neittyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiLovJXop7jljbPlj6/mm7TmlLnmiJbnp7vpmaTmoYzkuIrpm7vohablrozmlbTlgpnku73nmoTlr4bnorwiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXpoLXJUVy9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy16aC1yVFcvYXJyYXlzLnhtbAppbmRleCA1MGJkZTgwLi4zMmEyMDY1IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXpoLXJUVy9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtemgtclRXL2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+IuS4gOW+i+S9v+eUqCBIRENQIOaqouafpSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iMzEwMDUzNDg3NDUyOTI0MDI5MSI+IjY0SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMU0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2NDA1MjAzMjM5NTYwNjk1MjY2Ij4iNE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTZNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+IumXnOmWiSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0ODc1NDUzNDAyMzYxNDUzMjQiPiIyNTZLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjFNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyODAzMTk5MTAyNTg5MTI2OTM4Ij4iMTZNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjRLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMU0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4i6Zec6ZaJIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDYyMjQ2MDMzMzAzODU4Njc5MSI+IjY0SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIyMTIxMjU2MjUxNjk1ODIzMzAiPiIyNTZLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTcwNDk0Njc2NjY5OTI0MjY1MyI+IjFNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9zdW1tYXJpZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI3MzQ2NTk1NDczNTg4NzY1MDE5Ij4i5q+P5YCL57SA6YyE57ep6KGd5Y2AIDY0SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiLmr4/lgIvntIDpjITnt6nooZ3ljYAgMjU2SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiLmr4/lgIvntIDpjITnt6nooZ3ljYAgMU0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1NzQ4NTI4NjQzOTM3NTAwMzQ5Ij4i5q+P5YCL57SA6YyE57ep6KGd5Y2AIDRNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+Iuavj+WAi+e0gOmMhOe3qeihneWNgCAxNk0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4i6Zec6ZaJIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjk2OTQ1ODAyOTM0NDc1MDI2MiI+Iuavj+WAi+e0gOmMhOe3qeihneWNgCA2NEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzQyMjg1MTE1NjY1Njk4MTY4Ij4i5q+P5YCL57SA6YyE57ep6KGd5Y2AIDI1NksiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4i5q+P5YCL57SA6YyE57ep6KGd5Y2AIDFNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+Iuavj+WAi+e0gOmMhOe3qeihneWNgCA0TSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU0MzEzNTQ5NTY4NTY2NTUxMjAiPiLmr4/lgIvntIDpjITnt6nooZ3ljYAgMTZNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+IumXnOmWieWLleeVqyI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXpoLXJUVy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtemgtclRXL3N0cmluZ3MueG1sCmluZGV4IGM2YWQ4MzIuLjc4N2E0NDIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtemgtclRXL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtemgtclRXL3N0cmluZ3MueG1sCkBAIC0yNDcsNiArMjQ3LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+IuWFgeioseWwh+S7u+S9leaHieeUqOeoi+W8j+Wvq+WFpeWklumDqOWEsuWtmOepuumWkyAo54Sh6KuW6LOH6KiK5riF5Zau5YC854K65L2VKSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzIiBtc2dpZD0iODYxNTc2NDM3ODE0NzgyNDk4NSI+IuWwh+a0u+WLleW8t+WItuioreeCuuWPr+iqv+aVtOWkp+WwjyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4i5bCH5omA5pyJ5rS75YuV6Kit54K65Y+v6YWN5ZCI5aSa6YeN6KaW56qX55Kw5aKD6Kq/5pW05aSn5bCPICjnhKHoq5bos4foqIrmuIXllq7lgLzngrrkvZUp44CCIjwvc3RyaW5nPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0ICgxNDYxODkzMzUxMjc4OTQwNDE2KSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkgKDIyNTI1NjM0OTc0ODU0MzY1MzQpIC0tPgorICAgIDxza2lwIC8+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4i6Zu76IWm5YKZ5Lu95a+G56K8Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiLpm7vohablrozmlbTlgpnku73nm67liY3mnKrlj5fkv53orbciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4i6LyV6Ke45Y2z5Y+v6K6K5pu05oiW56e76Zmk6Zu76IWm5a6M5pW05YKZ5Lu955qE5a+G56K8Ijwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy16dS9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy16dS9hcnJheXMueG1sCmluZGV4IGVhYWRjZTYuLjJiYjg0OWYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtenUvYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXp1L2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+IlNlYmVuemlzYSBuamFsbyB1a3VobG9sYSBrd2UtSERQQyI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iMzEwMDUzNDg3NDUyOTI0MDI5MSI+IjY0SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMU0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2NDA1MjAzMjM5NTYwNjk1MjY2Ij4iNE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTZNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+IlZhbGl3ZSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0ODc1NDUzNDAyMzYxNDUzMjQiPiIyNTZLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjFNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyODAzMTk5MTAyNTg5MTI2OTM4Ij4iMTZNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjRLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMU0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4iVmFsaXdlIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDYyMjQ2MDMzMzAzODU4Njc5MSI+IjY0SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIyMTIxMjU2MjUxNjk1ODIzMzAiPiIyNTZLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTcwNDk0Njc2NjY5OTI0MjY1MyI+IjFNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9zdW1tYXJpZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI3MzQ2NTk1NDczNTg4NzY1MDE5Ij4iNjRLIG5nZWJoYWZhIHllbG9ndSBuZ2F5aW55ZSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiIyNTZLIG5nZWJoYWZhIHllbG9ndSBuZ2F5aW55ZSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiIxTSBuZ2ViaGFmYSB5ZWxvZ3UgbmdheWlueWUiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1NzQ4NTI4NjQzOTM3NTAwMzQ5Ij4iNE0gbmdlYmhhZmEgeWVsb2d1IG5nYXlpbnllIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+IjE2TSBuZ2ViaGFmYSB5ZWxvZ3UgbmdheWlueWUiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4iVmFsaXdlIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjk2OTQ1ODAyOTM0NDc1MDI2MiI+IjY0SyBuZ2ViaGFmYSB5ZWxvZ3UgbmdheWlueWUiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzQyMjg1MTE1NjY1Njk4MTY4Ij4iMjU2SyBuZ2ViaGFmYSB5ZWxvZ3UgbmdheWlueWUiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4iMU0gbmdlYmhhZmEgeWVsb2d1IG5nYXlpIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+IjRNIG5nZWJoYWZhIHllbG9ndSBuZ2F5aW55ZSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU0MzEzNTQ5NTY4NTY2NTUxMjAiPiIxNk0gbmdlYmhhZmEgeWVsb2d1IG5nYXlpbnllIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+IklzaXRob21iZSBlc2lueWFrYXpheW8gc2l2bGl3ZSI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXp1L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy16dS9zdHJpbmdzLnhtbAppbmRleCBjYjM2NzBmLi5iZjNhZGRmIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXp1L3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtenUvc3RyaW5ncy54bWwKQEAgLTI0Nyw2ICsyNDcsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiJZZW56YSBub21hIHVsdXBoaSB1aGxlbG8gbG9rdXNlYmVuemEgbGlmYW5lbGVrZSB1a3V0aGkgbGliaGFsd2Uga3VzaXRvcmVqaSBzYW5nYXBoYW5kbGUsIG5nYXBoYW5kbGUga3dhbWF2ZWx1IHdlLW1hbmlmZXN0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4iSW1pc2ViZW56aSB5YW1hbmRsYSBpem9uaWtlendhIHVzYXlpemkgb211c2hhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXNfc3VtbWFyeSIgbXNnaWQ9IjQ1MDgyMTc0NzY5OTcxODIyMTYiPiJZZW56YSB5b25rZSBpbWlzZWJlbnppIGliZSBub3NheWl6aSBhYmFzaGEga3V3aW5kaSBsb2t1bmluZ2ksIG5nb2t1bmdhbmFraSBhbWFuYW5pIHdlLW1hbmlmZXN0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0IiBtc2dpZD0iMTQ2MTg5MzM1MTI3ODk0MDQxNiI+Ik5pa2EgYW1hbmRsYSBhbWF3aW5kaSBlLWZyZWVmb3JtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnRfc3VtbWFyeSIgbXNnaWQ9IjIyNTI1NjM0OTc0ODU0MzY1MzQiPiJJbmlrYSBhbWFuZGxhIHVzZWtlbG8gbHdhbWF3aW5kaSBva3VobG9sYSBlLWZyZWVmb3JtLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF90aXRsZSIgbXNnaWQ9IjM4NjA0NzE2NTQ0Mzk0MTg4MjIiPiJJcGhhc2l3ZWRpIHlva3VzZWtlbGEgbmdva3Vsb25kb2xvemEgeWUtRGVza3RvcCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4iVWt1c2VrZWxhIG5nb2t1bG9uZG9sb3phIG9rdWdjd2VsZSBrd2UtRGVza3RvcCBha3V2aWtlbGVraWxlIG9rd2FtYW5qZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4iS2hldGhhIHVrdXNoaW50c2hhIG5vbWEgdWt1c3VzYSBpcGhhc2l3ZWRpIHlva3dlbnppd2Ega3dlemlwZWxlIG5nb2t1Z2N3ZWxlIGt3aWRlc2tpdGhvcGh1Ijwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy9hcnJheXMueG1sCmluZGV4IDRlODhjMWMuLjFiY2U3ZjkgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMvYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzL2FycmF5cy54bWwKQEAgLTEwMiw2ICsxMDIsNyBAQAogCiAgICAgPCEtLSBUaXRsZXMgZm9yIGxvZ2QgbGltaXQgc2l6ZSBzZWxlY3Rpb24gcHJlZmVyZW5jZS4gW0NIQVIgTElNSVQ9MTRdIC0tPgogICAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgorICAgICAgICA8aXRlbT5PZmY8L2l0ZW0+CiAgICAgICAgIDxpdGVtPjY0SzwvaXRlbT4KICAgICAgICAgPGl0ZW0+MjU2SzwvaXRlbT4KICAgICAgICAgPGl0ZW0+MU08L2l0ZW0+CkBAIC0xMTEsNiArMTEyLDcgQEAKIAogICAgIDwhLS0gVGl0bGVzIGZvciBsb2dkIGxpbWl0IHNpemUgbG93cmFtIHNlbGVjdGlvbiBwcmVmZXJlbmNlLiBbQ0hBUiBMSU1JVD0xNF0gLS0+CiAgICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgorICAgICAgICA8aXRlbT5PZmY8L2l0ZW0+CiAgICAgICAgIDxpdGVtPjY0SzwvaXRlbT4KICAgICAgICAgPGl0ZW0+MjU2SzwvaXRlbT4KICAgICAgICAgPGl0ZW0+MU08L2l0ZW0+CkBAIC0xMTgsNiArMTIwLDcgQEAKIAogICAgIDwhLS0gVmFsdWVzIGZvciBsb2dkIGxpbWl0IHNpemUgc2VsZWN0aW9uIHByZWZlcmVuY2UuIC0tPgogICAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV92YWx1ZXMiIHRyYW5zbGF0YWJsZT0iZmFsc2UiID4KKyAgICAgICAgPGl0ZW0+MzI3Njg8L2l0ZW0+CiAgICAgICAgIDxpdGVtPjY1NTM2PC9pdGVtPgogICAgICAgICA8aXRlbT4yNjIxNDQ8L2l0ZW0+CiAgICAgICAgIDxpdGVtPjEwNDg1NzY8L2l0ZW0+CkBAIC0xMjUsOCArMTI4LDkgQEAKICAgICAgICAgPGl0ZW0+MTY3NzcyMTY8L2l0ZW0+CiAgICAgPC9zdHJpbmctYXJyYXk+CiAKLSAgICA8IS0tIFN1bW1hcmllcyBmb3IgbG9nZCBsaW1pdCBzaXplIHNlbGVjdGlvbiBwcmVmZXJlbmNlLiBbQ0hBUiBMSU1JVD0zMF0tLT4KKyAgICA8IS0tIFN1bW1hcmllcyBmb3IgbG9nZCBsaW1pdCBzaXplIHNlbGVjdGlvbiBwcmVmZXJlbmNlLiBbQ0hBUiBMSU1JVD01MF0tLT4KICAgICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIiA+CisgICAgICAgIDxpdGVtPk9mZjwvaXRlbT4KICAgICAgICAgPGl0ZW0+NjRLIHBlciBsb2cgYnVmZmVyPC9pdGVtPgogICAgICAgICA8aXRlbT4yNTZLIHBlciBsb2cgYnVmZmVyPC9pdGVtPgogICAgICAgICA8aXRlbT4xTSBwZXIgbG9nIGJ1ZmZlcjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCmluZGV4IDdlMjI4ODEuLmY3ZTI1ZGIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbApAQCAtNjI0LDYgKzYyNCwxMSBAQAogICAgIDwhLS0gVUkgZGVidWcgc2V0dGluZzogZm9yY2UgYWxsb3cgb24gZXh0ZXJuYWwgc3VtbWFyeSBbQ0hBUiBMSU1JVD0xNTBdIC0tPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXNfc3VtbWFyeSI+TWFrZXMgYWxsIGFjdGl2aXRpZXMgcmVzaXphYmxlIGZvciBtdWx0aS13aW5kb3csIHJlZ2FyZGxlc3Mgb2YgbWFuaWZlc3QgdmFsdWVzLjwvc3RyaW5nPgogCisgICAgPCEtLSBVSSBkZWJ1ZyBzZXR0aW5nOiBlbmFibGUgZnJlZWZvcm0gd2luZG93IHN1cHBvcnQgW0NIQVIgTElNSVQ9NTBdIC0tPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnQiPkVuYWJsZSBmcmVlZm9ybSB3aW5kb3dzPC9zdHJpbmc+CisgICAgPCEtLSBVSSBkZWJ1ZyBzZXR0aW5nOiBlbmFibGUgZnJlZWZvcm0gd2luZG93IHN1cHBvcnQgc3VtbWFyeSBbQ0hBUiBMSU1JVD0xNTBdIC0tPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnRfc3VtbWFyeSI+RW5hYmxlcyBzdXBwb3J0IGZvciBleHBlcmltZW50YWwgZnJlZWZvcm0gd2luZG93cy48L3N0cmluZz4KKwogICAgIDwhLS0gTG9jYWwgKGRlc2t0b3ApIGJhY2t1cCBwYXNzd29yZCBtZW51IHRpdGxlIFtDSEFSIExJTUlUPTI1XSAtLT4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF90aXRsZSI+RGVza3RvcCBiYWNrdXAgcGFzc3dvcmQ8L3N0cmluZz4KICAgICA8IS0tIFN1bW1hcnkgdGV4dCBvZiB0aGUgImxvY2FsIGJhY2t1cCBwYXNzd29yZCIgc2V0dGluZyB3aGVuIHRoZSB1c2VyIGhhcyBub3Qgc3VwcGxpZWQgYSBwYXNzd29yZCAtLT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3NyYy9jb20vYW5kcm9pZC9zZXR0aW5nc2xpYi9hcHBsaWNhdGlvbnMvQXBwVXRpbHMuamF2YSBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3NyYy9jb20vYW5kcm9pZC9zZXR0aW5nc2xpYi9hcHBsaWNhdGlvbnMvQXBwVXRpbHMuamF2YQppbmRleCAzNDRiZjYyMi4uZjZkOTEzNCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvc3JjL2NvbS9hbmRyb2lkL3NldHRpbmdzbGliL2FwcGxpY2F0aW9ucy9BcHBVdGlscy5qYXZhCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3NyYy9jb20vYW5kcm9pZC9zZXR0aW5nc2xpYi9hcHBsaWNhdGlvbnMvQXBwVXRpbHMuamF2YQpAQCAtMzgsNyArMzgsNyBAQAogICAgICAgICBTdHJpbmcgcGFja2FnZU5hbWUgPSBhcHBFbnRyeS5pbmZvLnBhY2thZ2VOYW1lOwogICAgICAgICBib29sZWFuIGhhc1ByZWZlcnJlZCA9IGhhc1ByZWZlcnJlZEFjdGl2aXRpZXMocG0sIHBhY2thZ2VOYW1lKQogICAgICAgICAgICAgICAgIHx8IGhhc1VzYkRlZmF1bHRzKHVzYk1hbmFnZXIsIHBhY2thZ2VOYW1lKTsKLSAgICAgICAgaW50IHN0YXR1cyA9IHBtLmdldEludGVudFZlcmlmaWNhdGlvblN0YXR1cyhwYWNrYWdlTmFtZSwgVXNlckhhbmRsZS5teVVzZXJJZCgpKTsKKyAgICAgICAgaW50IHN0YXR1cyA9IHBtLmdldEludGVudFZlcmlmaWNhdGlvblN0YXR1c0FzVXNlcihwYWNrYWdlTmFtZSwgVXNlckhhbmRsZS5teVVzZXJJZCgpKTsKICAgICAgICAgLy8gY29uc2lkZXIgYSB2aXNpYmxlIGN1cnJlbnQgbGluay1oYW5kbGluZyBzdGF0ZSB0byBiZSBhbnkgZXhwbGljaXRseSBkZXNpZ25hdGVkIGJlaGF2aW9yCiAgICAgICAgIGJvb2xlYW4gaGFzRG9tYWluVVJMc1ByZWZlcmVuY2UgPQogICAgICAgICAgICAgICAgIHN0YXR1cyAhPSBQYWNrYWdlTWFuYWdlci5JTlRFTlRfRklMVEVSX0RPTUFJTl9WRVJJRklDQVRJT05fU1RBVFVTX1VOREVGSU5FRDsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3NyYy9jb20vYW5kcm9pZC9zZXR0aW5nc2xpYi9hcHBsaWNhdGlvbnMvQXBwbGljYXRpb25zU3RhdGUuamF2YSBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3NyYy9jb20vYW5kcm9pZC9zZXR0aW5nc2xpYi9hcHBsaWNhdGlvbnMvQXBwbGljYXRpb25zU3RhdGUuamF2YQppbmRleCBlNmZlNDQ3Li5kMzUzZjMxIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9zcmMvY29tL2FuZHJvaWQvc2V0dGluZ3NsaWIvYXBwbGljYXRpb25zL0FwcGxpY2F0aW9uc1N0YXRlLmphdmEKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvc3JjL2NvbS9hbmRyb2lkL3NldHRpbmdzbGliL2FwcGxpY2F0aW9ucy9BcHBsaWNhdGlvbnNTdGF0ZS5qYXZhCkBAIC0zMTYsNyArMzE2LDcgQEAKICAgICAgICAgc3luY2hyb25pemVkIChtRW50cmllc01hcCkgewogICAgICAgICAgICAgQXBwRW50cnkgZW50cnkgPSBtRW50cmllc01hcC5nZXQodXNlcklkKS5nZXQocGFja2FnZU5hbWUpOwogICAgICAgICAgICAgaWYgKGVudHJ5ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtUG0uZ2V0UGFja2FnZVNpemVJbmZvKHBhY2thZ2VOYW1lLCB1c2VySWQsIG1CYWNrZ3JvdW5kSGFuZGxlci5tU3RhdHNPYnNlcnZlcik7CisgICAgICAgICAgICAgICAgbVBtLmdldFBhY2thZ2VTaXplSW5mb0FzVXNlcihwYWNrYWdlTmFtZSwgdXNlcklkLCBtQmFja2dyb3VuZEhhbmRsZXIubVN0YXRzT2JzZXJ2ZXIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKERFQlVHX0xPQ0tJTkcpIExvZy52KFRBRywgIi4uLnJlcXVlc3RTaXplIHJlbGVhc2luZyBsb2NrIik7CiAgICAgICAgIH0KQEAgLTkwNiw3ICs5MDYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkuc2l6ZUxvYWRTdGFydCA9IG5vdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1DdXJDb21wdXRpbmdTaXplUGtnID0gZW50cnkuaW5mby5wYWNrYWdlTmFtZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1DdXJDb21wdXRpbmdTaXplVXNlcklkID0gVXNlckhhbmRsZS5nZXRVc2VySWQoZW50cnkuaW5mby51aWQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVBtLmdldFBhY2thZ2VTaXplSW5mbyhtQ3VyQ29tcHV0aW5nU2l6ZVBrZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1QbS5nZXRQYWNrYWdlU2l6ZUluZm9Bc1VzZXIobUN1ckNvbXB1dGluZ1NpemVQa2csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1DdXJDb21wdXRpbmdTaXplVXNlcklkLCBtU3RhdHNPYnNlcnZlcik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHX0xPQ0tJTkcpIExvZy52KFRBRywgIk1TR19MT0FEX1NJWkVTIHJlbGVhc2luZzogbm93IGNvbXB1dGluZyIpOwpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvc3JjL2NvbS9hbmRyb2lkL3NldHRpbmdzbGliL2RldmljZWluZm8vU3RvcmFnZU1lYXN1cmVtZW50LmphdmEgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9zcmMvY29tL2FuZHJvaWQvc2V0dGluZ3NsaWIvZGV2aWNlaW5mby9TdG9yYWdlTWVhc3VyZW1lbnQuamF2YQppbmRleCA5NzkwZTY0Li4zYjgxOGM4IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9zcmMvY29tL2FuZHJvaWQvc2V0dGluZ3NsaWIvZGV2aWNlaW5mby9TdG9yYWdlTWVhc3VyZW1lbnQuamF2YQorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9zcmMvY29tL2FuZHJvaWQvc2V0dGluZ3NsaWIvZGV2aWNlaW5mby9TdG9yYWdlTWVhc3VyZW1lbnQuamF2YQpAQCAtNDIyLDcgKzQyMiw3IEBACiAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5TWFuYWdlci5nZXRDdXJyZW50VXNlcigpLCBjdXJyZW50UHJvZmlsZXMsIGZpbmlzaGVkLCBjb3VudCk7CiAgICAgICAgICAgICBmb3IgKFVzZXJJbmZvIHVzZXIgOiB1c2VycykgewogICAgICAgICAgICAgICAgIGZvciAoQXBwbGljYXRpb25JbmZvIGFwcCA6IHZvbHVtZUFwcHMpIHsKLSAgICAgICAgICAgICAgICAgICAgcGFja2FnZU1hbmFnZXIuZ2V0UGFja2FnZVNpemVJbmZvKGFwcC5wYWNrYWdlTmFtZSwgdXNlci5pZCwgb2JzZXJ2ZXIpOworICAgICAgICAgICAgICAgICAgICBwYWNrYWdlTWFuYWdlci5nZXRQYWNrYWdlU2l6ZUluZm9Bc1VzZXIoYXBwLnBhY2thZ2VOYW1lLCB1c2VyLmlkLCBvYnNlcnZlcik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc1Byb3ZpZGVyL3Jlcy92YWx1ZXMvZGVmYXVsdHMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9yZXMvdmFsdWVzL2RlZmF1bHRzLnhtbAppbmRleCA2NjgwZDg4Li41MWQ4Y2EwIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc1Byb3ZpZGVyL3Jlcy92YWx1ZXMvZGVmYXVsdHMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvcmVzL3ZhbHVlcy9kZWZhdWx0cy54bWwKQEAgLTI1LDYgKzI1LDcgQEAKICAgICA8IS0tIENvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGJsdWV0b290aCwgd2lmaSwgYW5kIGNlbGwuIC0tPgogICAgIDxzdHJpbmcgbmFtZT0iZGVmX2FpcnBsYW5lX21vZGVfcmFkaW9zIiB0cmFuc2xhdGFibGU9ImZhbHNlIj5jZWxsLGJsdWV0b290aCx3aWZpLG5mYyx3aW1heDwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWlycGxhbmVfbW9kZV90b2dnbGVhYmxlX3JhZGlvcyIgdHJhbnNsYXRhYmxlPSJmYWxzZSI+Ymx1ZXRvb3RoLHdpZmksbmZjPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZfYmx1ZXRvb3RoX2Rpc2FibGVkX3Byb2ZpbGVzIiB0cmFuc2xhdGFibGU9ImZhbHNlIj4wPC9zdHJpbmc+CiAgICAgPGJvb2wgbmFtZT0iZGVmX2F1dG9fdGltZSI+dHJ1ZTwvYm9vbD4KICAgICA8Ym9vbCBuYW1lPSJkZWZfYXV0b190aW1lX3pvbmUiPnRydWU8L2Jvb2w+CiAgICAgPGJvb2wgbmFtZT0iZGVmX2FjY2VsZXJvbWV0ZXJfcm90YXRpb24iPnRydWU8L2Jvb2w+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc1Byb3ZpZGVyL3NyYy9jb20vYW5kcm9pZC9wcm92aWRlcnMvc2V0dGluZ3MvRGF0YWJhc2VIZWxwZXIuamF2YSBiL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvc3JjL2NvbS9hbmRyb2lkL3Byb3ZpZGVycy9zZXR0aW5ncy9EYXRhYmFzZUhlbHBlci5qYXZhCmluZGV4IGQ0ZTQyOGUuLjczMzhhOWMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvc3JjL2NvbS9hbmRyb2lkL3Byb3ZpZGVycy9zZXR0aW5ncy9EYXRhYmFzZUhlbHBlci5qYXZhCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvc3JjL2NvbS9hbmRyb2lkL3Byb3ZpZGVycy9zZXR0aW5ncy9EYXRhYmFzZUhlbHBlci5qYXZhCkBAIC0xMTYsNiArMTE2LDEyIEBACiAgICAgICAgICAgICAvLyBjbGVhbmVkIHVwIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgdXNlciBpcyBkZWxldGVkLgogICAgICAgICAgICAgRmlsZSBkYXRhYmFzZUZpbGUgPSBuZXcgRmlsZSgKICAgICAgICAgICAgICAgICAgICAgRW52aXJvbm1lbnQuZ2V0VXNlclN5c3RlbURpcmVjdG9yeSh1c2VySGFuZGxlKSwgREFUQUJBU0VfTkFNRSk7CisgICAgICAgICAgICAvLyBJZiBkYXRhYmFzZUZpbGUgZG9lc24ndCBleGlzdCwgZGF0YWJhc2UgY2FuIGJlIGtlcHQgaW4gbWVtb3J5LiBJdCdzIHNhZmUgYmVjYXVzZSB0aGUKKyAgICAgICAgICAgIC8vIGRhdGFiYXNlIHdpbGwgYmUgbWlncmF0ZWQgYW5kIGRpc3Bvc2VkIG9mIGltbWVkaWF0ZWx5IGFmdGVyIG9uQ3JlYXRlIGZpbmlzaGVzCisgICAgICAgICAgICBpZiAoIWRhdGFiYXNlRmlsZS5leGlzdHMoKSkgeworICAgICAgICAgICAgICAgIExvZy5pKFRBRywgIk5vIHByZXZpb3VzIGRhdGFiYXNlIGZpbGUgZXhpc3RzIC0gcnVubmluZyBpbiBpbi1tZW1vcnkgbW9kZSIpOworICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGRhdGFiYXNlRmlsZS5nZXRQYXRoKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMzAsOCArMTM2LDE2IEBACiAgICAgICAgIHJldHVybiBtVmFsaWRUYWJsZXMuY29udGFpbnMobmFtZSk7CiAgICAgfQogCisgICAgcHJpdmF0ZSBib29sZWFuIGlzSW5NZW1vcnkoKSB7CisgICAgICAgIHJldHVybiBnZXREYXRhYmFzZU5hbWUoKSA9PSBudWxsOworICAgIH0KKwogICAgIHB1YmxpYyB2b2lkIGRyb3BEYXRhYmFzZSgpIHsKICAgICAgICAgY2xvc2UoKTsKKyAgICAgICAgLy8gTm8gbmVlZCB0byByZW1vdmUgZmlsZXMgaWYgZGIgaXMgaW4gbWVtb3J5CisgICAgICAgIGlmIChpc0luTWVtb3J5KCkpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgICAgICBGaWxlIGRhdGFiYXNlRmlsZSA9IG1Db250ZXh0LmdldERhdGFiYXNlUGF0aChnZXREYXRhYmFzZU5hbWUoKSk7CiAgICAgICAgIGlmIChkYXRhYmFzZUZpbGUuZXhpc3RzKCkpIHsKICAgICAgICAgICAgIGRhdGFiYXNlRmlsZS5kZWxldGUoKTsKQEAgLTE0NSw2ICsxNTksMTAgQEAKIAogICAgIHB1YmxpYyB2b2lkIGJhY2t1cERhdGFiYXNlKCkgewogICAgICAgICBjbG9zZSgpOworICAgICAgICAvLyBObyBuZWVkIHRvIGJhY2t1cCBmaWxlcyBpZiBkYiBpcyBpbiBtZW1vcnkKKyAgICAgICAgaWYgKGlzSW5NZW1vcnkoKSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgICAgIEZpbGUgZGF0YWJhc2VGaWxlID0gbUNvbnRleHQuZ2V0RGF0YWJhc2VQYXRoKGdldERhdGFiYXNlTmFtZSgpKTsKICAgICAgICAgaWYgKCFkYXRhYmFzZUZpbGUuZXhpc3RzKCkpIHsKICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvc3JjL2NvbS9hbmRyb2lkL3Byb3ZpZGVycy9zZXR0aW5ncy9TZXR0aW5nc1Byb3ZpZGVyLmphdmEgYi9wYWNrYWdlcy9TZXR0aW5nc1Byb3ZpZGVyL3NyYy9jb20vYW5kcm9pZC9wcm92aWRlcnMvc2V0dGluZ3MvU2V0dGluZ3NQcm92aWRlci5qYXZhCmluZGV4IDczNjVlNjYuLmJjYjQ1OWEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvc3JjL2NvbS9hbmRyb2lkL3Byb3ZpZGVycy9zZXR0aW5ncy9TZXR0aW5nc1Byb3ZpZGVyLmphdmEKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9zcmMvY29tL2FuZHJvaWQvcHJvdmlkZXJzL3NldHRpbmdzL1NldHRpbmdzUHJvdmlkZXIuamF2YQpAQCAtMTg5MCw3ICsxODkwLDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIHByaXZhdGUgZmluYWwgY2xhc3MgVXBncmFkZUNvbnRyb2xsZXIgewotICAgICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNFVFRJTkdTX1ZFUlNJT04gPSAxMjM7CisgICAgICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU0VUVElOR1NfVkVSU0lPTiA9IDEyNDsKIAogICAgICAgICAgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbVVzZXJJZDsKIApAQCAtMjA2MCw2ICsyMDYwLDE2IEBACiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgY3VycmVudFZlcnNpb24gPSAxMjM7CiAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRWZXJzaW9uID09IDEyMykgeworICAgICAgICAgICAgICAgICAgICBmaW5hbCBTZXR0aW5nc1N0YXRlIGdsb2JhbFNldHRpbmdzID0gZ2V0R2xvYmFsU2V0dGluZ3NMb2NrZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGRlZmF1bHREaXNhYmxlZFByb2ZpbGVzID0gKGdldENvbnRleHQoKS5nZXRSZXNvdXJjZXMoKS5nZXRTdHJpbmcoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5zdHJpbmcuZGVmX2JsdWV0b290aF9kaXNhYmxlZF9wcm9maWxlcykpOworICAgICAgICAgICAgICAgICAgICBnbG9iYWxTZXR0aW5ncy5pbnNlcnRTZXR0aW5nTG9ja2VkKFNldHRpbmdzLkdsb2JhbC5CTFVFVE9PVEhfRElTQUJMRURfUFJPRklMRVMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdERpc2FibGVkUHJvZmlsZXMsIFNldHRpbmdzU3RhdGUuU1lTVEVNX1BBQ0tBR0VfTkFNRSk7CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRWZXJzaW9uID0gMTI0OworICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgIC8vIHZYWFg6IEFkZCBuZXcgc2V0dGluZ3MgYWJvdmUgdGhpcyBwb2ludC4KIAogICAgICAgICAgICAgICAgIC8vIFJldHVybiB0aGUgY3VycmVudCB2ZXJzaW9uLgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvQW5kcm9pZE1hbmlmZXN0LnhtbCBiL3BhY2thZ2VzL1NoZWxsL0FuZHJvaWRNYW5pZmVzdC54bWwKaW5kZXggMjUzNDZhYy4uYzZkOWU5OCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvQW5kcm9pZE1hbmlmZXN0LnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9BbmRyb2lkTWFuaWZlc3QueG1sCkBAIC0xMDcsNiArMTA3LDggQEAKICAgICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLlJFR0lTVEVSX0NPTk5FQ1RJT05fTUFOQUdFUiIgLz4KICAgICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLlJFR0lTVEVSX1NJTV9TVUJTQ1JJUFRJT04iIC8+CiAgICAgPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5HRVRfQVBQX09QU19TVEFUUyIgLz4KKyAgICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLlZJQlJBVEUiIC8+CisgICAgPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5NQU5BR0VfQUNUSVZJVFlfU1RBQ0tTIiAvPgogCiAgICAgPGFwcGxpY2F0aW9uIGFuZHJvaWQ6bGFiZWw9IkBzdHJpbmcvYXBwX2xhYmVsIgogICAgICAgICAgICAgICAgICBhbmRyb2lkOmZvcmNlRGV2aWNlRW5jcnlwdGVkPSJ0cnVlIgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1hZi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtYWYvc3RyaW5ncy54bWwKaW5kZXggOGM0ZGU0ZS4uMjQ3Y2NmYyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1hZi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWFmL3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4iRm91dHZlcnNsYWUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5yZWFkYWJsZV90ZXh0IiBtc2dpZD0iNTg2NTE3ODUxMDQ0NTM1NDg2Ij4iRm91dHZlcnNsYWdsw6plciBrb24gbmllIGdlbGVlcyB3b3JkIG5pZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+Im5hYW1sb29zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+IkJlc29uZGVyaGVkZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2FjdGlvbiIgbXNnaWQ9Ijg2Nzc3ODE3MjE5NDA2MTQ5OTUiPiJTa2VybWtpZWtpZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+IlNrZXJta2lla2llIHN1a3Nlc3ZvbCBnZW5lZW0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+IktvbiBuaWUgc2tlcm1raWVraWUgbmVlbSBuaWUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+IkZvdXR2ZXJzbGFnYmVzb25kZXJoZWRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiJLb3J0IG5hYW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb190aXRsZSIgbXNnaWQ9IjEyNzE2Nzg1MzM3MDU1NzE3NSI+IjEtcmXDq2xvcHNvbW1pbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiJHZWRldGFpbGxlZXJkZSBiZXNrcnl3aW5nIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWFtL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1hbS9zdHJpbmdzLnhtbAppbmRleCA0MTVmM2VjLi45ZjM2MTVhIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWFtL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtYW0vc3RyaW5ncy54bWwKQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiLhi6jhiLPhipXhiqsg4Yiq4Y2W4Yit4Ym24Ym9Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+IuGLqOGIs+GKleGKqyDhiKrhjZbhiK3hibUg4Y2L4Yut4YiNIOGIiuGKkOGJoOGJpSDhiqDhiI3hibDhibvhiIjhiJ0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5uYW1lZCIgbXNnaWQ9IjI4MDA1ODI0MDY4NDIwOTI3MDkiPiLhi6vhiI3hibDhiLDhi6jhiJgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19hY3Rpb24iIG1zZ2lkPSIyMTU4MjA0MjI4NTEwNTc2MjI3Ij4i4Yud4Yit4Yud4Yiu4Ym9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+IuGJheGMveGJoOGJs+GLiiDhjIjhjL0g4Yql4Yut4YmzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW4iIG1zZ2lkPSI3MTc1MzQzMTgxNzY3NDI5MDg4Ij4i4YmF4Yy94Ymg4Ymz4YuKIOGMiOGMvSDhiqXhi63hibMg4Ymg4Yi14Yqs4Ym1IOGJsOGKkOGIteGJt+GIjeGNoiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZCIgbXNnaWQ9IjU4NTMwNDkxNDA4MDY4MzQ2MDEiPiLhiYXhjL3hiaDhibPhi4og4YyI4Yy9IOGKpeGLreGJsyDhiIrhipDhiLMg4Yqg4Yut4Ym94YiN4YidIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+IuGLqOGIs+GKleGKqyDhiKrhjZbhiK3hibUg4Yud4Yit4Yud4Yiu4Ym9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiLhiqDhjK3hiK0g4Yi14YidIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiLhi6gxIOGImOGIteGImOGIrSDhiJvhjKDhiYPhiIjhi6siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiLhi53hiK3hi53hiK0g4YiY4YyN4YiI4YyrIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWFyL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1hci9zdHJpbmdzLnhtbAppbmRleCA3OWQ2MTVlLi5iNjcwZTM3IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWFyL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtYXIvc3RyaW5ncy54bWwKQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiLYqtmC2KfYsdmK2LEg2KfZhNij2K7Yt9in2KEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5yZWFkYWJsZV90ZXh0IiBtc2dpZD0iNTg2NTE3ODUxMDQ0NTM1NDg2Ij4i2KrYudiw2LHYqiDZgtix2KfYodipINmF2YTZgSDYqtmC2LHZitixINin2YTYrti32KMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VubmFtZWQiIG1zZ2lkPSIyODAwNTgyNDA2ODQyMDkyNzA5Ij4i2KjYr9mI2YYg2KfYs9mFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+Itin2YTYqtmB2KfYtdmK2YQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4i2YTZgti32Kkg2LTYp9i02KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF90YWtlbiIgbXNnaWQ9IjcxNzUzNDMxODE3Njc0MjkwODgiPiLYqtmFINin2YTYqtmC2KfYtyDZhNmC2LfYqSDYp9mE2LTYp9i02Kkg2KjZhtis2KfYrS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4i2KrYudiw2LEg2KfZhNiq2YLYp9i3INmE2YLYt9ipINin2YTYtNin2LTYqS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4i2KrZgdin2LXZitmEINiq2YLYsdmK2LEg2KfZhNiu2LfYoyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX25hbWUiIG1zZ2lkPSI1MDg5MTkxODMyMjcxODUyODI2Ij4i2KfYs9mFINmF2K7Yqti12LEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb190aXRsZSIgbXNnaWQ9IjEyNzE2Nzg1MzM3MDU1NzE3NSI+Itiz2LfYsSDYp9mE2YXZhNiu2LUg2KfZhNij2YjZhCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDExNzA4ODk5ODczMzU0Njc4NCI+ItmI2LXZgSDYqtmB2LXZitmE2YoiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtYXotckFaL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1hei1yQVovc3RyaW5ncy54bWwKaW5kZXggMTc2YjAwOS4uNjM0ZDEyMyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1hei1yQVovc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1hei1yQVovc3RyaW5ncy54bWwKQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiJCYXEgaGVzYWJhdGxhcsSxIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+IkJhcSBoZXNhYmF0IGZheWzEsSBveHVubXVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VubmFtZWQiIG1zZ2lkPSIyODAwNTgyNDA2ODQyMDkyNzA5Ij4iYWRzxLF6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+IkRldGFsbGFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+ImRpc3BsZXkgZ8O2csO8bnTDvHPDvCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+IkRpc3BsZXkgZ8O2csO8bnTDvHPDvCB1xJ91cmxhIMOnyZlraWxkaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4iRGlzcGxleSBnw7Zyw7xudMO8c8O8IMmZbMOnYXRhbiBkZXlpbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4iQmFxIGhlc2FiYXQgZGV0YWxsYXLEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX25hbWUiIG1zZ2lkPSI1MDg5MTkxODMyMjcxODUyODI2Ij4iUcSxc2EgYWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb190aXRsZSIgbXNnaWQ9IjEyNzE2Nzg1MzM3MDU1NzE3NSI+IjEtc8mZdHJsaWsgeMO8bGFzyZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiLGj3RyYWZsxLEgdMmZc3ZpciI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1iK3NyK0xhdG4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWIrc3IrTGF0bi9zdHJpbmdzLnhtbAppbmRleCBkYjFlYmZmLi40MWFjYjg5IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWIrc3IrTGF0bi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWIrc3IrTGF0bi9zdHJpbmdzLnhtbApAQCAtMjYsNCArMjYsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTMzMjQ4ODE0NDc0MDUyNzEwOSI+Ikl6dmXFoXRhamkgbyBncmXFoWthbWEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5yZWFkYWJsZV90ZXh0IiBtc2dpZD0iNTg2NTE3ODUxMDQ0NTM1NDg2Ij4iRGF0b3Rla2EgaXp2ZcWhdGFqYSBvIGdyZcWhY2kgbmUgbW/FvmUgZGEgc2UgcHJvxI1pdGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5uYW1lZCIgbXNnaWQ9IjI4MDA1ODI0MDY4NDIwOTI3MDkiPiJuZWltZW5vdmFubyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiIgbXNnaWQ9IjIxNTgyMDQyMjg1MTA1NzYyMjciPiJEZXRhbGppIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+IlNuaW1jaSBla3JhbmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF90YWtlbiIgbXNnaWQ9IjcxNzUzNDMxODE3Njc0MjkwODgiPiJTbmltYW5qZSBla3JhbmEgamUgdXNwZWxvLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZCIgbXNnaWQ9IjU4NTMwNDkxNDA4MDY4MzQ2MDEiPiJTbmltYW5qZSBla3JhbmEgbmlqZSB1c3BlbG8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+IkRldGFsamkgaXp2ZcWhdGFqYSBvIGdyZcWhY2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19uYW1lIiBtc2dpZD0iNTA4OTE5MTgzMjI3MTg1MjgyNiI+IktyYXRraSBuYXppdiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX3RpdGxlIiBtc2dpZD0iMTI3MTY3ODUzMzcwNTU3MTc1Ij4iUmV6aW1lIHUgamVkbm9tIHJlZHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiJEZXRhbGpuaSBvcGlzIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWJnL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1iZy9zdHJpbmdzLnhtbAppbmRleCBhNDcwOTk4Li42NjFhMGI2NSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1iZy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWJnL3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4i0J7RgtGH0LXRgtC4INC30LAg0L/RgNC+0LPRgC4g0LPRgNC10YjQutC4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+ItCk0LDQudC70YrRgiDRgdGK0YEg0YHQuNCz0L3QsNC7INC30LAg0L/RgNC+0LPRgNCw0LzQvdCwINCz0YDQtdGI0LrQsCDQvdC1INC80L7QttCwINC00LAg0LHRitC00LUg0L/RgNC+0YfQtdGC0LXQvSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+ItCx0LXQtyDQuNC80LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19hY3Rpb24iIG1zZ2lkPSIyMTU4MjA0MjI4NTEwNTc2MjI3Ij4i0J/QvtC00YDQvtCx0L3QvtGB0YLQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2FjdGlvbiIgbXNnaWQ9Ijg2Nzc3ODE3MjE5NDA2MTQ5OTUiPiLQldC60YDQsNC90L3QsCDRgdC90LjQvNC60LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF90YWtlbiIgbXNnaWQ9IjcxNzUzNDMxODE3Njc0MjkwODgiPiLQldC60YDQsNC90L3QsNGC0LAg0YHQvdC40LzQutCwINCx0LUg0L3QsNC/0YDQsNCy0LXQvdCwINGD0YHQv9C10YjQvdC+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZCIgbXNnaWQ9IjU4NTMwNDkxNDA4MDY4MzQ2MDEiPiLQldC60YDQsNC90L3QsNGC0LAg0YHQvdC40LzQutCwINC90LUg0LzQvtC20LAg0LTQsCDQsdGK0LTQtSDQvdCw0L/RgNCw0LLQtdC90LAuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+ItCf0L7QtNGA0L7QsdC90L7RgdGC0Lgg0LfQsCDRgdC40LPQvdCw0LvQsCDQt9CwINC/0YDQvtCz0YDQsNC80L3QsCDQs9GA0LXRiNC60LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19uYW1lIiBtc2dpZD0iNTA4OTE5MTgzMjI3MTg1MjgyNiI+ItCa0YDQsNGC0LrQviDQuNC80LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb190aXRsZSIgbXNnaWQ9IjEyNzE2Nzg1MzM3MDU1NzE3NSI+ItCV0LTQvdC+0YDQtdC00L7QstC+INC+0LHQvtCx0YnQtdC90LjQtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDExNzA4ODk5ODczMzU0Njc4NCI+ItCf0L7QtNGA0L7QsdC90L4g0L7Qv9C40YHQsNC90LjQtSI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1ibi1yQkQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWJuLXJCRC9zdHJpbmdzLnhtbAppbmRleCBhZmEzYTQ2Li5lNzI1NmNhIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWJuLXJCRC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWJuLXJCRC9zdHJpbmdzLnhtbApAQCAtMjYsNCArMjYsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTMzMjQ4ODE0NDc0MDUyNzEwOSI+IuCmpOCnjeCmsOCngeCmn+Cmv+CmsCDgpqrgp43gprDgpqTgpr/gpqzgp4fgpqbgpqjgppfgp4HgprLgpr8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5yZWFkYWJsZV90ZXh0IiBtc2dpZD0iNTg2NTE3ODUxMDQ0NTM1NDg2Ij4i4Kak4KeN4Kaw4KeB4Kaf4Ka/4KawIOCmquCnjeCmsOCmpOCmv+CmrOCnh+CmpuCmqOCnh+CmsCDgpqvgpr7gpofgprLgpp/gpr8g4Kaq4Kah4Ka84Ka+IOCmr+CmvuCmr+CmvOCmqOCmvyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+IuCmqOCmvuCmruCmrOCmv+CmueCngOCmqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiIgbXNnaWQ9IjIxNTgyMDQyMjg1MTA1NzYyMjciPiLgpqzgpr/gprbgpqYg4Kas4Ka/4Kas4Kaw4KajIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+IuCmuOCnjeCmleCnjeCmsOCngOCmqOCmtuCmnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+IuCmuOCnjeCmleCnjeCmsOCngOCmqOCmtuCmnyDgprjgpqvgprLgpq3gpr7gpqzgp4cg4Kao4KeH4KaT4Kav4Ka84Ka+IOCmueCmr+CmvOCnh+Cmm+Cnh+CntyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZCIgbXNnaWQ9IjU4NTMwNDkxNDA4MDY4MzQ2MDEiPiLgprjgp43gppXgp43gprDgp4Dgpqjgprbgpp8g4Kao4KeH4KaT4Kav4Ka84Ka+IOCmr+CmvuCmr+CmvOCmqOCmv+CntyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjMxMTM1NDk4Mzk3OTg1NjQ2NDUiPiLgpqTgp43gprDgp4Hgpp/gpr8g4Kaq4KeN4Kaw4Kak4Ka/4Kas4KeH4Kam4Kao4KeH4KawIOCmrOCmv+CmrOCmsOCmoyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX25hbWUiIG1zZ2lkPSI1MDg5MTkxODMyMjcxODUyODI2Ij4i4Kab4KeL4KafIOCmqOCmvuCmriI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX3RpdGxlIiBtc2dpZD0iMTI3MTY3ODUzMzcwNTU3MTc1Ij4i4KenLeCmsuCmvuCmh+CmqOCnh+CmsCDgprjgpr7gprDgprjgpoLgppXgp43gprfgp4fgpqoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiLgpqzgpr/gprjgp43gpqTgpr7gprDgpr/gpqQg4Kas4Ka/4Kas4Kaw4KajIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWNhL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1jYS9zdHJpbmdzLnhtbAppbmRleCAxODhkYTY3Li5hOGM5NTUzIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWNhL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtY2Evc3RyaW5ncy54bWwKQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiJJbmZvcm1lcyBkXCdlcnJvciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bnJlYWRhYmxlX3RleHQiIG1zZ2lkPSI1ODY1MTc4NTEwNDQ1MzU0ODYiPiJObyBzXCdoYSBwb2d1dCBsbGVnaXIgZWwgZml0eGVyIGRlIGxcJ2luZm9ybWUgZFwnZXJyb3JzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VubmFtZWQiIG1zZ2lkPSIyODAwNTgyNDA2ODQyMDkyNzA5Ij4ic2Vuc2Ugbm9tIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+IkRldGFsbHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4iQ2FwdHVyYSBkZSBwYW50YWxsYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+IkxhIGNhcHR1cmEgZGUgcGFudGFsbGEgc1wnaGEgZmV0IGNvcnJlY3RhbWVudC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4iTm8gc1wnaGEgcG9ndXQgZmVyIGxhIGNhcHR1cmEgZGUgcGFudGFsbGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+IkRldGFsbHMgZGUgbFwnaW5mb3JtZSBkXCdlcnJvcnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19uYW1lIiBtc2dpZD0iNTA4OTE5MTgzMjI3MTg1MjgyNiI+Ik5vbSBjdXJ0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiJSZXN1bSBkXCd1bmEgbMOtbmlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGVzY3JpcHRpb24iIG1zZ2lkPSI0MTE3MDg4OTk4NzMzNTQ2Nzg0Ij4iRGVzY3JpcGNpw7MgZGV0YWxsYWRhIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWNzL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1jcy9zdHJpbmdzLnhtbAppbmRleCBmZGM4MDIzLi4xOTM1MDFlMiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1jcy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWNzL3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4iWnByw6F2eSBvIGNoeWLDoWNoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+IlNvdWJvciBjaHlib3bDqSB6cHLDoXZ5IG5lbHplIG5hxI3DrXN0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VubmFtZWQiIG1zZ2lkPSIyODAwNTgyNDA2ODQyMDkyNzA5Ij4iYmV6IG7DoXp2dSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiIgbXNnaWQ9IjIxNTgyMDQyMjg1MTA1NzYyMjciPiJQb2Ryb2Jub3N0aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2FjdGlvbiIgbXNnaWQ9Ijg2Nzc3ODE3MjE5NDA2MTQ5OTUiPiJTbsOtbWVrIG9icmF6b3ZreSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+IlNuw61tZWsgb2JyYXpvdmt5IGJ5bCDDunNwxJvFoW7EmyBwb8WZw616ZW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+IlNuw61tZWsgb2JyYXpvdmt5IHNlIG5lcG9kYcWZaWxvIHBvxZnDrWRpdC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4iUG9kcm9ibm9zdGkgenByw6F2eSBvwqBjaHlixJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19uYW1lIiBtc2dpZD0iNTA4OTE5MTgzMjI3MTg1MjgyNiI+Iktyw6F0a8O9IG7DoXpldiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX3RpdGxlIiBtc2dpZD0iMTI3MTY3ODUzMzcwNTU3MTc1Ij4iU2hybnV0w60gbmEgamVkZW4gxZnDoWRlayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDExNzA4ODk5ODczMzU0Njc4NCI+IlBvZHJvYm7DvSBwb3BpcyI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1kYS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZGEvc3RyaW5ncy54bWwKaW5kZXggMDUwMjY1NS4uMzk3NTgwMCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1kYS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWRhL3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4iRmVqbHJhcHBvcnRlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bnJlYWRhYmxlX3RleHQiIG1zZ2lkPSI1ODY1MTc4NTEwNDQ1MzU0ODYiPiJGZWpscmFwcG9ydGZpbGVuIGt1bm5lIGlra2UgbMOmc2VzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VubmFtZWQiIG1zZ2lkPSIyODAwNTgyNDA2ODQyMDkyNzA5Ij4iaWtrZSBuYXZuZ2l2ZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19hY3Rpb24iIG1zZ2lkPSIyMTU4MjA0MjI4NTEwNTc2MjI3Ij4iT3BseXNuaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4iU2vDpnJtYmlsbGVkZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+IkRlciBibGV2IHRhZ2V0IGV0IHNrw6ZybWJpbGxlZGUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+IkRlciBrdW5uZSBpa2tlIHRhZ2VzIGV0IHNrw6ZybWJpbGxlZGUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+IkZlamxyYXBwb3J0b3BseXNuaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19uYW1lIiBtc2dpZD0iNTA4OTE5MTgzMjI3MTg1MjgyNiI+IktvcnQgbmF2biI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX3RpdGxlIiBtc2dpZD0iMTI3MTY3ODUzMzcwNTU3MTc1Ij4iU2FtbWVuZmF0bmluZyBww6Ugw6luIGxpbmplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGVzY3JpcHRpb24iIG1zZ2lkPSI0MTE3MDg4OTk4NzMzNTQ2Nzg0Ij4iRGV0YWxqZXJldCBiZXNrcml2ZWxzZSI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1kZS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZGUvc3RyaW5ncy54bWwKaW5kZXggMTNjMWM5Ni4uYjA0NTBkZCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1kZS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWRlL3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4iRmVobGVyYmVyaWNodGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5yZWFkYWJsZV90ZXh0IiBtc2dpZD0iNTg2NTE3ODUxMDQ0NTM1NDg2Ij4iRmVobGVyYmVyaWNodGRhdGVpIGtvbm50ZSBuaWNodCBnZWxlc2VuIHdlcmRlbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5uYW1lZCIgbXNnaWQ9IjI4MDA1ODI0MDY4NDIwOTI3MDkiPiJVbmJlbmFubnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19hY3Rpb24iIG1zZ2lkPSIyMTU4MjA0MjI4NTEwNTc2MjI3Ij4iRGV0YWlscyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2FjdGlvbiIgbXNnaWQ9Ijg2Nzc3ODE3MjE5NDA2MTQ5OTUiPiJTY3JlZW5zaG90Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW4iIG1zZ2lkPSI3MTc1MzQzMTgxNzY3NDI5MDg4Ij4iU2NyZWVuc2hvdCB3dXJkZSBhdWZnZW5vbW1lbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4iU2NyZWVuc2hvdCBrb25udGUgbmljaHQgYXVmZ2Vub21tZW4gd2VyZGVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjMxMTM1NDk4Mzk3OTg1NjQ2NDUiPiJEZXRhaWxzIGRlcyBGZWhsZXJiZXJpY2h0cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX25hbWUiIG1zZ2lkPSI1MDg5MTkxODMyMjcxODUyODI2Ij4iS3Vyem5hbWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb190aXRsZSIgbXNnaWQ9IjEyNzE2Nzg1MzM3MDU1NzE3NSI+Ilp1c2FtbWVuZmFzc3VuZyBpbiBlaW5lciBaZWlsZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDExNzA4ODk5ODczMzU0Njc4NCI+IkRldGFpbGxpZXJ0ZSBCZXNjaHJlaWJ1bmciPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZWwvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWVsL3N0cmluZ3MueG1sCmluZGV4IGFhMDNiZWMuLmVjNWYzYWMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZWwvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1lbC9zdHJpbmdzLnhtbApAQCAtMjYsNCArMjYsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTMzMjQ4ODE0NDc0MDUyNzEwOSI+Is6Rzr3Osc+Gzr/Pgc6tz4Igz4PPhs6xzrvOvM6sz4TPic69Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+Is6UzrXOvSDOrs+EzrHOvSDOtM+Fzr3Osc+Ezq4gzrcgzrHOvc6szrPOvc+Jz4POtyDPhM6/z4UgzrHPgc+HzrXOr86/z4Ugz4TOt8+CIM6xzr3Osc+Gzr/Pgc6sz4Igz4PPhs6xzrvOvM6sz4TPic69Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VubmFtZWQiIG1zZ2lkPSIyODAwNTgyNDA2ODQyMDkyNzA5Ij4izrHOvc+Ozr3Phc68zrciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19hY3Rpb24iIG1zZ2lkPSIyMTU4MjA0MjI4NTEwNTc2MjI3Ij4izpvOtc+Az4TOv868zq3Pgc61zrnOtc+CIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+Is6jz4TOuc6zzrzOuc+Mz4TPhc+Azr8gzr/OuM+Mzr3Ot8+CIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW4iIG1zZ2lkPSI3MTc1MzQzMTgxNzY3NDI5MDg4Ij4izpcgzrvOrs+Izrcgz4TOv8+FIM+Dz4TOuc6zzrzOuc+Mz4TPhc+Azr/PhSDOv864z4zOvc63z4Igzr/Ou86/zrrOu863z4HPjs64zrfOus61IM68zrUgzrXPgM65z4TPhc+Hzq/OsS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4izpTOtc69IM6uz4TOsc69IM60z4XOvc6xz4TOriDOtyDOu86uz4jOtyDPhM6/z4Ugz4PPhM65zrPOvM65z4zPhM+Fz4DOv8+FIM6/zrjPjM69zrfPgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4izpvOtc+Az4TOv868zq3Pgc61zrnOtc+CIM6xzr3Osc+Gzr/Pgc6sz4Igz4PPhs6xzrvOvM6sz4TPic69Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiLOpc+Azr/Ous6/z4HOuc+Dz4TOuc66z4wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb190aXRsZSIgbXNnaWQ9IjEyNzE2Nzg1MzM3MDU1NzE3NSI+Is6jz43Ovc6/z4jOtyDOvM6vzrHPgiDPg861zrnPgc6sz4IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiLOkc69zrHOu8+Fz4TOuc66zq4gz4DOtc+BzrnOs8+BzrHPhs6uIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWVuLXJBVS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZW4tckFVL3N0cmluZ3MueG1sCmluZGV4IGE5MjQ3ZDIuLjI2YTNkMzggMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZW4tckFVL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZW4tckFVL3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4iQnVnIHJlcG9ydHMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5yZWFkYWJsZV90ZXh0IiBtc2dpZD0iNTg2NTE3ODUxMDQ0NTM1NDg2Ij4iQnVnIHJlcG9ydCBmaWxlIGNvdWxkIG5vdCBiZSByZWFkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VubmFtZWQiIG1zZ2lkPSIyODAwNTgyNDA2ODQyMDkyNzA5Ij4idW5uYW1lZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiIgbXNnaWQ9IjIxNTgyMDQyMjg1MTA1NzYyMjciPiJEZXRhaWxzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+IlNjcmVlbnNob3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF90YWtlbiIgbXNnaWQ9IjcxNzUzNDMxODE3Njc0MjkwODgiPiJTY3JlZW5zaG90IHRha2VuIHN1Y2Nlc3NmdWxseS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4iU2NyZWVuc2hvdCBjb3VsZCBub3QgYmUgdGFrZW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+IkJ1ZyByZXBvcnQgZGV0YWlscyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX25hbWUiIG1zZ2lkPSI1MDg5MTkxODMyMjcxODUyODI2Ij4iU2hvcnQgbmFtZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX3RpdGxlIiBtc2dpZD0iMTI3MTY3ODUzMzcwNTU3MTc1Ij4iMS1saW5lIHN1bW1hcnkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiJEZXRhaWxlZCBkZXNjcmlwdGlvbiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1lbi1yR0Ivc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWVuLXJHQi9zdHJpbmdzLnhtbAppbmRleCBhOTI0N2QyLi4yNmEzZDM4IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWVuLXJHQi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWVuLXJHQi9zdHJpbmdzLnhtbApAQCAtMjYsNCArMjYsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTMzMjQ4ODE0NDc0MDUyNzEwOSI+IkJ1ZyByZXBvcnRzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+IkJ1ZyByZXBvcnQgZmlsZSBjb3VsZCBub3QgYmUgcmVhZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+InVubmFtZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19hY3Rpb24iIG1zZ2lkPSIyMTU4MjA0MjI4NTEwNTc2MjI3Ij4iRGV0YWlscyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2FjdGlvbiIgbXNnaWQ9Ijg2Nzc3ODE3MjE5NDA2MTQ5OTUiPiJTY3JlZW5zaG90Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW4iIG1zZ2lkPSI3MTc1MzQzMTgxNzY3NDI5MDg4Ij4iU2NyZWVuc2hvdCB0YWtlbiBzdWNjZXNzZnVsbHkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+IlNjcmVlbnNob3QgY291bGQgbm90IGJlIHRha2VuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjMxMTM1NDk4Mzk3OTg1NjQ2NDUiPiJCdWcgcmVwb3J0IGRldGFpbHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19uYW1lIiBtc2dpZD0iNTA4OTE5MTgzMjI3MTg1MjgyNiI+IlNob3J0IG5hbWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb190aXRsZSIgbXNnaWQ9IjEyNzE2Nzg1MzM3MDU1NzE3NSI+IjEtbGluZSBzdW1tYXJ5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGVzY3JpcHRpb24iIG1zZ2lkPSI0MTE3MDg4OTk4NzMzNTQ2Nzg0Ij4iRGV0YWlsZWQgZGVzY3JpcHRpb24iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZW4tcklOL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1lbi1ySU4vc3RyaW5ncy54bWwKaW5kZXggYTkyNDdkMi4uMjZhM2QzOCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1lbi1ySU4vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1lbi1ySU4vc3RyaW5ncy54bWwKQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiJCdWcgcmVwb3J0cyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bnJlYWRhYmxlX3RleHQiIG1zZ2lkPSI1ODY1MTc4NTEwNDQ1MzU0ODYiPiJCdWcgcmVwb3J0IGZpbGUgY291bGQgbm90IGJlIHJlYWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5uYW1lZCIgbXNnaWQ9IjI4MDA1ODI0MDY4NDIwOTI3MDkiPiJ1bm5hbWVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+IkRldGFpbHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4iU2NyZWVuc2hvdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+IlNjcmVlbnNob3QgdGFrZW4gc3VjY2Vzc2Z1bGx5LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZCIgbXNnaWQ9IjU4NTMwNDkxNDA4MDY4MzQ2MDEiPiJTY3JlZW5zaG90IGNvdWxkIG5vdCBiZSB0YWtlbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4iQnVnIHJlcG9ydCBkZXRhaWxzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiJTaG9ydCBuYW1lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiIxLWxpbmUgc3VtbWFyeSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDExNzA4ODk5ODczMzU0Njc4NCI+IkRldGFpbGVkIGRlc2NyaXB0aW9uIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWVzLXJVUy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZXMtclVTL3N0cmluZ3MueG1sCmluZGV4IGFiMmRkNjNiLi43ZjcwZmViIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWVzLXJVUy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWVzLXJVUy9zdHJpbmdzLnhtbApAQCAtMjYsNCArMjYsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTMzMjQ4ODE0NDc0MDUyNzEwOSI+IkluZm9ybWVzIGRlIGVycm9yZXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5yZWFkYWJsZV90ZXh0IiBtc2dpZD0iNTg2NTE3ODUxMDQ0NTM1NDg2Ij4iTm8gc2UgcHVkbyBsZWVyIGVsIGFyY2hpdm8gZGUgaW5mb3JtZSBkZSBlcnJvcmVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VubmFtZWQiIG1zZ2lkPSIyODAwNTgyNDA2ODQyMDkyNzA5Ij4ic2luIG5vbWJyZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiIgbXNnaWQ9IjIxNTgyMDQyMjg1MTA1NzYyMjciPiJEZXRhbGxlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2FjdGlvbiIgbXNnaWQ9Ijg2Nzc3ODE3MjE5NDA2MTQ5OTUiPiJDYXB0dXJhIGRlIHBhbnRhbGxhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW4iIG1zZ2lkPSI3MTc1MzQzMTgxNzY3NDI5MDg4Ij4iU2UgdG9tw7MgbGEgY2FwdHVyYSBkZSBwYW50YWxsYSBjb3JyZWN0YW1lbnRlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZCIgbXNnaWQ9IjU4NTMwNDkxNDA4MDY4MzQ2MDEiPiJObyBzZSBwdWRvIHRvbWFyIGxhIGNhcHR1cmEgZGUgcGFudGFsbGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+IkRldGFsbGVzIGRlbCBpbmZvcm1lIGRlIGVycm9yZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19uYW1lIiBtc2dpZD0iNTA4OTE5MTgzMjI3MTg1MjgyNiI+Ik5vbWJyZSBjb3J0byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX3RpdGxlIiBtc2dpZD0iMTI3MTY3ODUzMzcwNTU3MTc1Ij4iUmVzdW1lbiBkZSB1bmEgbMOtbmVhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGVzY3JpcHRpb24iIG1zZ2lkPSI0MTE3MDg4OTk4NzMzNTQ2Nzg0Ij4iRGVzY3JpcGNpw7NuIGNvbXBsZXRhIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWVzL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1lcy9zdHJpbmdzLnhtbAppbmRleCBkMzJmMDEyLi5kZjA4MGQyIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWVzL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZXMvc3RyaW5ncy54bWwKQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiJJbmZvcm1lcyBkZSBlcnJvciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bnJlYWRhYmxlX3RleHQiIG1zZ2lkPSI1ODY1MTc4NTEwNDQ1MzU0ODYiPiJObyBzZSBoYSBwb2RpZG8gbGVlciBlbCBhcmNoaXZvIGRlbCBpbmZvcm1lIGRlIGVycm9yZXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5uYW1lZCIgbXNnaWQ9IjI4MDA1ODI0MDY4NDIwOTI3MDkiPiJzaW4gbm9tYnJlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+IkRldGFsbGVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+IkNhcHR1cmEgZGUgcGFudGFsbGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF90YWtlbiIgbXNnaWQ9IjcxNzUzNDMxODE3Njc0MjkwODgiPiJMYSBjYXB0dXJhIGRlIHBhbnRhbGxhIHNlIGhhIHJlYWxpemFkbyBjb3JyZWN0YW1lbnRlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZCIgbXNnaWQ9IjU4NTMwNDkxNDA4MDY4MzQ2MDEiPiJObyBzZSBwdWVkZSByZWFsaXphciBsYSBjYXB0dXJhIGRlIHBhbnRhbGxhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjMxMTM1NDk4Mzk3OTg1NjQ2NDUiPiJEZXRhbGxlcyBkZWwgaW5mb3JtZSBkZSBlcnJvcmVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiJOb21icmUgY29ydG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb190aXRsZSIgbXNnaWQ9IjEyNzE2Nzg1MzM3MDU1NzE3NSI+IlJlc3VtZW4gZGUgMSBsw61uZWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiJEZXNjcmlwY2nDs24gY29tcGxldGEiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZXQtckVFL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1ldC1yRUUvc3RyaW5ncy54bWwKaW5kZXggM2VkZWZhNC4uOTRiNGI4OSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1ldC1yRUUvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1ldC1yRUUvc3RyaW5ncy54bWwKQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiJWZWFhcnVhbmRlZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bnJlYWRhYmxlX3RleHQiIG1zZ2lkPSI1ODY1MTc4NTEwNDQ1MzU0ODYiPiJWZWFhcnVhbmRlIGZhaWxpIGVpIMO1bm5lc3R1bnVkIGx1Z2VkYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+Im5pbWV0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiIgbXNnaWQ9IjIxNTgyMDQyMjg1MTA1NzYyMjciPiLDnGtzaWthc2phZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2FjdGlvbiIgbXNnaWQ9Ijg2Nzc3ODE3MjE5NDA2MTQ5OTUiPiJFa3JhYW5pcGlsdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+IkVrcmFhbmlwaWxkaSB0ZWdlbWluZSDDtW5uZXN0dXMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+IkVrcmFhbmlwaWx0aSBlaSBzYWFudWQgdGVoYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4iVmVhYXJ1YW5kZSDDvGtzaWthc2phZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX25hbWUiIG1zZ2lkPSI1MDg5MTkxODMyMjcxODUyODI2Ij4iTMO8aGlrZSBuaW1pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiIxLXJlYWxpbmUga29ra3V2w7V0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDExNzA4ODk5ODczMzU0Njc4NCI+IsOca3Npa2FzamFsaWsga2lyamVsZHVzIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWV1LXJFUy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZXUtckVTL3N0cmluZ3MueG1sCmluZGV4IGM1OTJmNTAuLmNhZDU1ZmMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZXUtckVTL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZXUtckVTL3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4iQWthdHNlbiB0eG9zdGVuYWsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5yZWFkYWJsZV90ZXh0IiBtc2dpZD0iNTg2NTE3ODUxMDQ0NTM1NDg2Ij4iRXppbiBpemFuIGRhIGlyYWt1cnJpIGFrYXRzZW4gdHhvc3RlbmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5uYW1lZCIgbXNnaWQ9IjI4MDA1ODI0MDY4NDIwOTI3MDkiPiJpemVuZ2FiZWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19hY3Rpb24iIG1zZ2lkPSIyMTU4MjA0MjI4NTEwNTc2MjI3Ij4iWGVoZXRhc3VuYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4iUGFudGFpbGEtYXJnYXpraWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF90YWtlbiIgbXNnaWQ9IjcxNzUzNDMxODE3Njc0MjkwODgiPiJBdGVyYSBkYSBwYW50YWlsYS1hcmdhemtpYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4iRXppbiBpemFuIGRhIGF0ZXJhIHBhbnRhaWxhLWFyZ2F6a2lhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjMxMTM1NDk4Mzk3OTg1NjQ2NDUiPiJBa2F0c2VuIHR4b3N0ZW5hcmVuIHhlaGV0YXN1bmFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiJJemVuIGxhYnVycmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb190aXRsZSIgbXNnaWQ9IjEyNzE2Nzg1MzM3MDU1NzE3NSI+IkxlcnJvIGJha2FycmVrbyBsYWJ1cnBlbmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiJBemFscGVuIHhlaGF0dWEiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZmEvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWZhL3N0cmluZ3MueG1sCmluZGV4IDQwOWZkNTMuLmI2MTlmMTAgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZmEvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1mYS9zdHJpbmdzLnhtbApAQCAtMjYsNCArMjYsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTMzMjQ4ODE0NDc0MDUyNzEwOSI+Itqv2LLYp9ix2LQg2KfYtNqp2KfZhCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bnJlYWRhYmxlX3RleHQiIG1zZ2lkPSI1ODY1MTc4NTEwNDQ1MzU0ODYiPiLZgdin24zZhCDar9iy2KfYsdi0INin2LTaqdin2YQg2K7ZiNin2YbYr9mHINmG2LTYryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+Itio24zigIzZhtin2YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19hY3Rpb24iIG1zZ2lkPSIyMTU4MjA0MjI4NTEwNTc2MjI3Ij4i2KzYstim24zYp9iqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+Iti52qnYsyDYtdmB2K3Zh+KAjNmG2YXYp9uM2LQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF90YWtlbiIgbXNnaWQ9IjcxNzUzNDMxODE3Njc0MjkwODgiPiLYudqp2LMg2LXZgdit2YfigIzZhtmF2KfbjNi0INio2Kcg2YXZiNmB2YLbjNiqINqv2LHZgdiq2Ycg2LTYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4i2YbZhduM4oCM2KrZiNin2YYg2LnaqdizINi12YHYrdmH4oCM2YbZhdin24zYtCDar9ix2YHYqi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4i2KzYstim24zYp9iqINqv2LLYp9ix2LQg2KfYtNqp2KfZhCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX25hbWUiIG1zZ2lkPSI1MDg5MTkxODMyMjcxODUyODI2Ij4i2YbYp9mFINmF2K7ZgdmBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiLYrtmE2KfYtdmHINuM2qkg2K7Yt9uMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGVzY3JpcHRpb24iIG1zZ2lkPSI0MTE3MDg4OTk4NzMzNTQ2Nzg0Ij4i2KzYstim24zYp9iqINiv2YLbjNmCIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWZpL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1maS9zdHJpbmdzLnhtbAppbmRleCBiZmE5MjBhLi5hOTBmZmI1IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWZpL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZmkvc3RyaW5ncy54bWwKQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiJWaXJoZXJhcG9ydGl0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+IlZpcmhlcmFwb3J0dGl0aWVkb3N0b2EgZWkgdm9pIGx1a2VhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+Im5pbWV0w7ZuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+IlRpZXRvamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4iS3V2YWthYXBwYXVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW4iIG1zZ2lkPSI3MTc1MzQzMTgxNzY3NDI5MDg4Ij4iS3V2YWthYXBwYXVzIHRhbGxlbm5ldHR1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZCIgbXNnaWQ9IjU4NTMwNDkxNDA4MDY4MzQ2MDEiPiJLdXZha2FhcHBhdWtzZW4gdGFsbGVudGFtaW5lbiBlcMOkb25uaXN0dWkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+IlZpcmhlcmFwb3J0aW4gdGllZG90Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiJMeWh5dCBuaW1pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiJMeWh5dCB0aWl2aXN0ZWxtw6QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiJZa3NpdHlpc2tvaHRhaW5lbiBrdXZhdXMiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZnItckNBL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1mci1yQ0Evc3RyaW5ncy54bWwKaW5kZXggNGRjNDQ4Mi4uNTJiZTk5ZCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1mci1yQ0Evc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1mci1yQ0Evc3RyaW5ncy54bWwKQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiJSYXBwb3J0cyBkZSBib2d1ZXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5yZWFkYWJsZV90ZXh0IiBtc2dpZD0iNTg2NTE3ODUxMDQ0NTM1NDg2Ij4iSW1wb3NzaWJsZSBkZSBsaXJlIGxlIGZpY2hpZXIgZHUgcmFwcG9ydCBkZSBib2d1ZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+InNhbnMgbm9tIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+IkTDqXRhaWxzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+IlNhaXNpZSBkXCfDqWNyYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF90YWtlbiIgbXNnaWQ9IjcxNzUzNDMxODE3Njc0MjkwODgiPiJMYSBzYWlzaWUgZFwnw6ljcmFuIGEgcsOpdXNzaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4iVW5lIGVycmV1ciBzXCdlc3QgcHJvZHVpdGUgbG9ycyBkZSBsYSBzYWlzaWUgZFwnw6ljcmFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjMxMTM1NDk4Mzk3OTg1NjQ2NDUiPiJEw6l0YWlscyBkdSByYXBwb3J0IGRlIGJvZ3VlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiJOb20gYWJyw6lnw6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb190aXRsZSIgbXNnaWQ9IjEyNzE2Nzg1MzM3MDU1NzE3NSI+IlLDqXN1bcOpIGRcJ3VuZSBsaWduZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDExNzA4ODk5ODczMzU0Njc4NCI+IkRlc2NyaXB0aW9uIGTDqXRhaWxsw6llIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWZyL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1mci9zdHJpbmdzLnhtbAppbmRleCBhM2U0ZjdkLi5lMTBlMjhlIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWZyL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZnIvc3RyaW5ncy54bWwKQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiJSYXBwb3J0cyBkXCdlcnJldXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5yZWFkYWJsZV90ZXh0IiBtc2dpZD0iNTg2NTE3ODUxMDQ0NTM1NDg2Ij4iSW1wb3NzaWJsZSBkZSBsaXJlIGxlIGZpY2hpZXIgZGUgcmFwcG9ydCBkZSBidWcuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VubmFtZWQiIG1zZ2lkPSIyODAwNTgyNDA2ODQyMDkyNzA5Ij4ic2FucyBub20iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19hY3Rpb24iIG1zZ2lkPSIyMTU4MjA0MjI4NTEwNTc2MjI3Ij4iRMOpdGFpbHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4iQ2FwdHVyZXMgZFwnw6ljcmFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW4iIG1zZ2lkPSI3MTc1MzQzMTgxNzY3NDI5MDg4Ij4iTGEgY2FwdHVyZSBkXCfDqWNyYW4gYSBiaWVuIMOpdMOpIGVmZmVjdHXDqWUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+IkltcG9zc2libGUgZFwnZWZmZWN0dWVyIHVuZSBjYXB0dXJlIGRcJ8OpY3Jhbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4iRMOpdGFpbHMgZHUgcmFwcG9ydCBkZSBidWciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19uYW1lIiBtc2dpZD0iNTA4OTE5MTgzMjI3MTg1MjgyNiI+Ik5vbSBjb3VydCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX3RpdGxlIiBtc2dpZD0iMTI3MTY3ODUzMzcwNTU3MTc1Ij4iUsOpc3Vtw6kgZFwndW5lIGxpZ25lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGVzY3JpcHRpb24iIG1zZ2lkPSI0MTE3MDg4OTk4NzMzNTQ2Nzg0Ij4iRGVzY3JpcHRpb24gZMOpdGFpbGzDqWUiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZ2wtckVTL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1nbC1yRVMvc3RyaW5ncy54bWwKaW5kZXggOGIyOGNhYS4uMjBmOGNkYSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1nbC1yRVMvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1nbC1yRVMvc3RyaW5ncy54bWwKQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiJJbmZvcm1lcyBkZSBlcnJvcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bnJlYWRhYmxlX3RleHQiIG1zZ2lkPSI1ODY1MTc4NTEwNDQ1MzU0ODYiPiJOb24gc2UgcHVpZG8gbGVyIG8gZmljaGVpcm8gZGUgaW5mb3JtZSBkZSBlcnJvcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+InNlbiBub21lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+IkRldGFsbGVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+IkNhcHR1cmEgZGUgcGFudGFsbGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF90YWtlbiIgbXNnaWQ9IjcxNzUzNDMxODE3Njc0MjkwODgiPiJBIGNhcHR1cmEgZGUgcGFudGFsbGEgcmVhbGl6b3VzZSBjb3JyZWN0YW1lbnRlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZCIgbXNnaWQ9IjU4NTMwNDkxNDA4MDY4MzQ2MDEiPiJOb24gc2UgcHVpZG8gcmVhbGl6YXIgYSBjYXB0dXJhIGRlIHBhbnRhbGxhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjMxMTM1NDk4Mzk3OTg1NjQ2NDUiPiJEZXRhbGxlcyBkbyBpbmZvcm1lIGRlIGVycm9zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiJOb21lIGFicmV2aWFkbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX3RpdGxlIiBtc2dpZD0iMTI3MTY3ODUzMzcwNTU3MTc1Ij4iUmVzdW1vIGRlIDEgbGnDsWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiJEZXNjcmljacOzbiBkZXRhbGxhZGEiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZ3UtcklOL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1ndS1ySU4vc3RyaW5ncy54bWwKaW5kZXggOTFiMTM2Mi4uOTY3ZDI1NSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1ndS1ySU4vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1ndS1ySU4vc3RyaW5ncy54bWwKQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiLgqqzgqpcg4Kqw4Kq/4Kqq4KuL4Kqw4KuN4Kqf4KuN4Kq4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+IuCqrOCqlyDgqrDgq4Dgqqrgq4vgqrDgq43gqp8g4Kqr4Kq+4KqH4KqyIOCqteCqvuCqguCqmuCrgCDgqrbgqpXgqr7gqocg4Kqo4Kql4KuAIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VubmFtZWQiIG1zZ2lkPSIyODAwNTgyNDA2ODQyMDkyNzA5Ij4i4KqF4Kqo4Kq+4Kqu4Kq+4KqC4KqV4Kq/4KqkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+IuCqteCqv+Cql+CqpOCriyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2FjdGlvbiIgbXNnaWQ9Ijg2Nzc3ODE3MjE5NDA2MTQ5OTUiPiLgqrjgq43gqpXgq43gqrDgq4Dgqqjgqrbgq4vgqp8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF90YWtlbiIgbXNnaWQ9IjcxNzUzNDMxODE3Njc0MjkwODgiPiLgqrjgq43gqpXgq43gqrDgq4Dgqqjgqrbgq4vgqp8g4Kq44Kqr4Kqz4Kqk4Kq+4Kqq4KuC4Kqw4KuN4Kq14KqVIOCqsuCrh+CqteCqvuCqr+Criy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4i4Kq44KuN4KqV4KuN4Kqw4KuA4Kqo4Kq24KuL4KqfIOCqsuCqhyDgqrbgqpXgqr7gqq/gq4sg4Kqo4Kql4KuALiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjMxMTM1NDk4Mzk3OTg1NjQ2NDUiPiLgqqzgqpcg4Kqw4Kq/4Kqq4KuL4Kqw4KuN4Kqf4Kqo4KuAIOCqteCqv+Cql+CqpOCriyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX25hbWUiIG1zZ2lkPSI1MDg5MTkxODMyMjcxODUyODI2Ij4i4Kqo4Kq+4Kqo4KuB4KqCIOCqqOCqvuCqriI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX3RpdGxlIiBtc2dpZD0iMTI3MTY3ODUzMzcwNTU3MTc1Ij4iMS3gqrDgq4fgqpbgqr7gqqjgq4sg4Kq44Kq+4Kqw4Kq+4KqC4Kq2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGVzY3JpcHRpb24iIG1zZ2lkPSI0MTE3MDg4OTk4NzMzNTQ2Nzg0Ij4i4Kq14Kq/4KqX4Kqk4Kq14Kq+4KqwIOCqteCqsOCrjeCqo+CqqCI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1oaS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtaGkvc3RyaW5ncy54bWwKaW5kZXggNTk1ZWM3Zi4uNzBlNGYzOCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1oaS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWhpL3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4i4KSs4KSXIOCksOCkv+CkquCli+CksOCljeCknyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bnJlYWRhYmxlX3RleHQiIG1zZ2lkPSI1ODY1MTc4NTEwNDQ1MzU0ODYiPiLgpKzgpJcg4KSw4KS/4KSq4KWL4KSw4KWN4KSfIOCkq+CkvOCkvuCkh+CksiDgpKjgpLngpYDgpIIg4KSq4KSi4KS84KWAIOCknOCkviDgpLjgpJXgpYAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5uYW1lZCIgbXNnaWQ9IjI4MDA1ODI0MDY4NDIwOTI3MDkiPiLgpIXgpKjgpL7gpK7gpL7gpILgpJXgpL/gpKQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19hY3Rpb24iIG1zZ2lkPSIyMTU4MjA0MjI4NTEwNTc2MjI3Ij4i4KS14KS/4KS14KSw4KSjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+IuCkuOCljeCkleCljeCksOClgOCkqOCktuClieCknyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+IuCkuOCljeCkleCljeCksOClgOCkqOCktuClieCknyDgpLjgpKvgpLLgpKTgpL7gpKrgpYLgpLDgpY3gpLXgpJUg4KSy4KS/4KSv4KS+IOCkl+Ckr+Ckvi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4i4KS44KWN4KSV4KWN4KSw4KWA4KSo4KS24KWJ4KSfIOCkqOCkueClgOCkgiDgpLLgpL/gpK/gpL4g4KSc4KS+IOCkuOCkleCkvi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4i4KSs4KSXIOCksOCkv+CkquCli+CksOCljeCknyDgpJXgpYcg4KS14KS/4KS14KSw4KSjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiLgpLjgpILgpJXgpY3gpLfgpL/gpKrgpY3gpKQg4KSo4KS+4KSuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiIxLeCkquCkguCkleCljeCkpOCkvyDgpK7gpYfgpIIg4KS44KS+4KSw4KS+4KSC4KS2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGVzY3JpcHRpb24iIG1zZ2lkPSI0MTE3MDg4OTk4NzMzNTQ2Nzg0Ij4i4KS14KS/4KS44KWN4KSk4KWD4KSkIOCkteCksOCljeCko+CkqCI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1oci9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtaHIvc3RyaW5ncy54bWwKaW5kZXggMTk1N2JkYi4uZjM4YTI4MSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1oci9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWhyL3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4iSXp2ai4gbyBwcm9nLiBwb2dyZcWhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bnJlYWRhYmxlX3RleHQiIG1zZ2lkPSI1ODY1MTc4NTEwNDQ1MzU0ODYiPiJJenZqZcWhxIdlIG8gcHJvZ3JhbXNrb2ogcG9ncmXFoWNpIG5pamUgcHJvxI1pdGFubyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+ImJleiBuYXppdmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19hY3Rpb24iIG1zZ2lkPSIyMTU4MjA0MjI4NTEwNTc2MjI3Ij4iUG9qZWRpbm9zdGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4iU25pbWthIHphc2xvbmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF90YWtlbiIgbXNnaWQ9IjcxNzUzNDMxODE3Njc0MjkwODgiPiJaYXNsb24gamUgc25pbWxqZW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+IlNuaW1hbmplIHphc2xvbmEgbmlqZSB1c3BqZWxvLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjMxMTM1NDk4Mzk3OTg1NjQ2NDUiPiJQb2plZGlub3N0aSBpenZqZcWhxIdhIG8gcHJvZ3JhbXNrb2ogcG9ncmXFoWNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiJLcmF0a28gaW1lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiJTYcW+ZXRhayB1IGplZG5vbSByZXRrdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDExNzA4ODk5ODczMzU0Njc4NCI+IkRldGFsamFuIG9waXMiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtaHUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWh1L3N0cmluZ3MueG1sCmluZGV4IDc0YjRhYmEuLjU0NGMxMTcgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtaHUvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1odS9zdHJpbmdzLnhtbApAQCAtMjYsNCArMjYsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTMzMjQ4ODE0NDc0MDUyNzEwOSI+IkhpYmFqZWxlbnTDqXNlayI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bnJlYWRhYmxlX3RleHQiIG1zZ2lkPSI1ODY1MTc4NTEwNDQ1MzU0ODYiPiJBIGhpYmFqZWxlbnTDqXNpIGbDoWpsdCBuZW0gc2lrZXLDvGx0IGJlb2x2YXNuaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+Im7DqXZ0ZWxlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiIgbXNnaWQ9IjIxNTgyMDQyMjg1MTA1NzYyMjciPiJSw6lzemxldGVrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+IkvDqXBlcm55xZFrw6lwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW4iIG1zZ2lkPSI3MTc1MzQzMTgxNzY3NDI5MDg4Ij4iU2lrZXLDvGx0IGVsa8Opc3rDrXRlbmkgYSBrw6lwZXJuecWRa8OpcGV0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZCIgbXNnaWQ9IjU4NTMwNDkxNDA4MDY4MzQ2MDEiPiJOZW0gc2lrZXLDvGx0IGVsa8Opc3rDrXRlbmkgYSBrw6lwZXJuecWRa8OpcGV0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjMxMTM1NDk4Mzk3OTg1NjQ2NDUiPiJIaWJhamVsZW50w6lzIHLDqXN6bGV0ZWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19uYW1lIiBtc2dpZD0iNTA4OTE5MTgzMjI3MTg1MjgyNiI+IlLDtnZpZCBuw6l2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiJFZ3lzb3JvcyDDtnNzemVmb2dsYWzDoXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiJSw6lzemxldGVzIGxlw61yw6FzIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWh5LXJBTS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtaHktckFNL3N0cmluZ3MueG1sCmluZGV4IDMxN2NiMGIuLjYyNTk5NGQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtaHktckFNL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtaHktckFNL3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4i1Y7WgNWr1brVodWv1bbVpdaA1asg1bDVodW31b7VpdW/1b7VuNaC1anVtdW41oLVttW21aXWgCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bnJlYWRhYmxlX3RleHQiIG1zZ2lkPSI1ODY1MTc4NTEwNDQ1MzU0ODYiPiLVgNW21aHWgNWh1b7VuNaAINW51acg1a/VodaA1aTVodWsINW+1oDVq9W61aHVr9W21aXWgNWrINWm1aXVr9W41oLVtdaB1asg1obVodW11azVqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+ItWh1bbVodW21bjWgtW2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+ItWE1aHVttaA1aHVtNWh1b3VttWl1oAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4i1LfVr9aA1aHVttWrINW61aHVv9Wv1aXWgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+ItS31a/WgNWh1bbVqyDVutWh1b/Vr9Wl1oDVqCDVsNWh1bvVuNWy1bjWgtWp1bXVodW01aIg1b3Vv9Wh1oHVvtWl1oE6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+ItWJ1bDVodW71bjVstW+1aXWgSDVvdW/1aHVttWh1awg1afVr9aA1aHVttWrINW61aHVv9Wv1aXWgNWoOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjMxMTM1NDk4Mzk3OTg1NjQ2NDUiPiLVjtaA1avVutWh1a/VqyDVptWl1a/VuNaC1bXWgdWrINW01aHVttaA1aHVtNWh1b3VttWl1oDVqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX25hbWUiIG1zZ2lkPSI1MDg5MTkxODMyMjcxODUyODI2Ij4i1L/WgNWz1aHVvyDVodW21bjWgtW2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiLUsdW01oPVuNaD1aHVo9Wr1oAg1bTVpdWvINW/1bjVstW41b4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiLVhNWh1bbWgNWh1bTVodW91bYg1bbVr9Wh1oDVodWj1oDVuNaC1anVtdW41oLVtiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1pbi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtaW4vc3RyaW5ncy54bWwKaW5kZXggNTdkNGM3My4uNzQ3ZmVjZCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1pbi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWluL3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4iTGFwb3JhbiBidWciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5yZWFkYWJsZV90ZXh0IiBtc2dpZD0iNTg2NTE3ODUxMDQ0NTM1NDg2Ij4iRmlsZSBsYXBvcmFuIGJ1ZyB0aWRhayBkYXBhdCBkaWJhY2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5uYW1lZCIgbXNnaWQ9IjI4MDA1ODI0MDY4NDIwOTI3MDkiPiJ0YW5wYSBuYW1hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+IkRldGFpbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2FjdGlvbiIgbXNnaWQ9Ijg2Nzc3ODE3MjE5NDA2MTQ5OTUiPiJUYW5na2FwYW4gbGF5YXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF90YWtlbiIgbXNnaWQ9IjcxNzUzNDMxODE3Njc0MjkwODgiPiJUYW5na2FwYW4gbGF5YXIgYmVyaGFzaWwgZGlhbWJpbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4iVGFuZ2thcGFuIGxheWFyIHRpZGFrIGRhcGF0IGRpYW1iaWwuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+IkRldGFpbCBsYXBvcmFuIGJ1ZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX25hbWUiIG1zZ2lkPSI1MDg5MTkxODMyMjcxODUyODI2Ij4iTmFtYSBwZW5kZWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb190aXRsZSIgbXNnaWQ9IjEyNzE2Nzg1MzM3MDU1NzE3NSI+IlJpbmdrYXNhbiAxIGJhcmlzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGVzY3JpcHRpb24iIG1zZ2lkPSI0MTE3MDg4OTk4NzMzNTQ2Nzg0Ij4iRGVza3JpcHNpIGRldGFpbCI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1pcy1ySVMvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWlzLXJJUy9zdHJpbmdzLnhtbAppbmRleCAzOTYwNWRiLi5kMGQzZTYwIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWlzLXJJUy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWlzLXJJUy9zdHJpbmdzLnhtbApAQCAtMjYsNCArMjYsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTMzMjQ4ODE0NDc0MDUyNzEwOSI+IlZpbGx1dGlsa3lubmluZ2FyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+IkVra2kgdmFyIGjDpmd0IGHDsCBsZXNhIMO6ciB2aWxsdXNrw71yc2x1bm5pIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VubmFtZWQiIG1zZ2lkPSIyODAwNTgyNDA2ODQyMDkyNzA5Ij4iw6FuIGhlaXRpcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiIgbXNnaWQ9IjIxNTgyMDQyMjg1MTA1NzYyMjciPiJOw6FuYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4iU2tqw6FteW5kIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW4iIG1zZ2lkPSI3MTc1MzQzMTgxNzY3NDI5MDg4Ij4iVMOza3N0IGHDsCB0YWthIHNrasOhbXluZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4iRWtraSB0w7Nrc3QgYcOwIHRha2Egc2tqw6FteW5kLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjMxMTM1NDk4Mzk3OTg1NjQ2NDUiPiJVcHBsw71zaW5nYXIgdW0gdmlsbHV0aWxreW5uaW5ndSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX25hbWUiIG1zZ2lkPSI1MDg5MTkxODMyMjcxODUyODI2Ij4iU3R1dHQgaGVpdGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb190aXRsZSIgbXNnaWQ9IjEyNzE2Nzg1MzM3MDU1NzE3NSI+IkVpbm5hciBsw61udSBzYW1hbnRla3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiLDjXRhcmxlZyBsw71zaW5nIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWl0L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1pdC9zdHJpbmdzLnhtbAppbmRleCAxMGJhN2RkLi4wNTExYzU4IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWl0L3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtaXQvc3RyaW5ncy54bWwKQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiJSYXBwb3J0aSBzdWkgYnVnIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+IkltcG9zc2liaWxlIGxlZ2dlcmUgaWwgZmlsZSByZWxhdGl2byBhbGxhIHNlZ25hbGF6aW9uZSBkaSBidWciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5uYW1lZCIgbXNnaWQ9IjI4MDA1ODI0MDY4NDIwOTI3MDkiPiJzZW56YSBub21lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+IkRldHRhZ2xpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+IlNjcmVlbnNob3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF90YWtlbiIgbXNnaWQ9IjcxNzUzNDMxODE3Njc0MjkwODgiPiJTY3JlZW5zaG90IGFjcXVpc2l0by4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4iSW1wb3NzaWJpbGUgYWNxdWlzaXJlIGxvIHNjcmVlbnNob3QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+IkRldHRhZ2xpIGRlbGxhIHNlZ25hbGF6aW9uZSBkaSBidWciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19uYW1lIiBtc2dpZD0iNTA4OTE5MTgzMjI3MTg1MjgyNiI+Ik5vbWUgYnJldmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb190aXRsZSIgbXNnaWQ9IjEyNzE2Nzg1MzM3MDU1NzE3NSI+IlNpbnRlc2kgc3UgdW5hIHJpZ2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiJEZXNjcml6aW9uZSBkZXR0YWdsaWF0YSI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1pdy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtaXcvc3RyaW5ncy54bWwKaW5kZXggNWIwY2IyNi4uYjliY2FmOSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1pdy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWl3L3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4i15PXldeX15XXqiDXkdeQ15LXmdedIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+Itec15Ag16DXmdeq158g15TXmdeUINec16fXqNeV15Ag15DXqiDXp9eV15HXpSDXlNeT15XXlyDXotecINeU15HXkNeSIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VubmFtZWQiIG1zZ2lkPSIyODAwNTgyNDA2ODQyMDkyNzA5Ij4i15zXnNeQINep150iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19hY3Rpb24iIG1zZ2lkPSIyMTU4MjA0MjI4NTEwNTc2MjI3Ij4i16TXqNeY15nXnSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2FjdGlvbiIgbXNnaWQ9Ijg2Nzc3ODE3MjE5NDA2MTQ5OTUiPiLXpteZ15zXldedINee16HXmiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+Item15nXnNeV150g15TXnteh15og15HXldem16Ig15HXlNem15zXl9eULiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZCIgbXNnaWQ9IjU4NTMwNDkxNDA4MDY4MzQ2MDEiPiLXnNeQINeg15nXqtefINeU15nXlCDXnNem15zXnSDXnteh15ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+Itek16jXmNeZINeT15XXlyDXotecINeR15DXkiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX25hbWUiIG1zZ2lkPSI1MDg5MTkxODMyMjcxODUyODI2Ij4i15vXmdeg15XXmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX3RpdGxlIiBtc2dpZD0iMTI3MTY3ODUzMzcwNTU3MTc1Ij4i16HXmdeb15XXnSDXkdep15XXqNeUINeQ15fXqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDExNzA4ODk5ODczMzU0Njc4NCI+Iteq15nXkNeV16gg157XpNeV16jXmCI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1qYS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtamEvc3RyaW5ncy54bWwKaW5kZXggZmQ0YTE1MC4uMDViOTVlYiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1qYS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWphL3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4i44OQ44Kw44Os44Od44O844OIIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+IuODkOOCsOODrOODneODvOODiCDjg5XjgqHjgqTjg6vjgpLoqq3jgb/lj5bjgovjgZPjgajjgYzjgafjgY3jgb7jgZvjgpPjgafjgZfjgZ8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5uYW1lZCIgbXNnaWQ9IjI4MDA1ODI0MDY4NDIwOTI3MDkiPiLlkI3liY3jgarjgZciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19hY3Rpb24iIG1zZ2lkPSIyMTU4MjA0MjI4NTEwNTc2MjI3Ij4i6Kmz57SwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+IuOCueOCr+ODquODvOODs+OCt+ODp+ODg+ODiCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+IuOCueOCr+ODquODvOODs+OCt+ODp+ODg+ODiOOCkuaSruW9seOBl+OBvuOBl+OBn+OAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZCIgbXNnaWQ9IjU4NTMwNDkxNDA4MDY4MzQ2MDEiPiLjgrnjgq/jg6rjg7zjg7Pjgrfjg6fjg4Pjg4jjgpLmkq7lvbHjgafjgY3jgb7jgZvjgpPjgafjgZfjgZ/jgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4i44OQ44Kw44Os44Od44O844OI44Gu6Kmz57SwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiLnnIHnlaXlkI0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb190aXRsZSIgbXNnaWQ9IjEyNzE2Nzg1MzM3MDU1NzE3NSI+IjEg6KGM44Gu5qaC6KaBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGVzY3JpcHRpb24iIG1zZ2lkPSI0MTE3MDg4OTk4NzMzNTQ2Nzg0Ij4i6Kmz57Sw6Kqs5piOIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWthLXJHRS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMta2EtckdFL3N0cmluZ3MueG1sCmluZGV4IDgwMmY5NDQuLjJjZmQ4MGEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMta2EtckdFL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMta2EtckdFL3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4i4YOo4YOU4YOq4YOT4YOd4YOb4YOU4YOR4YOY4YOhIOGDkOGDnOGDkuGDkOGDoOGDmOGDqOGDlOGDkeGDmCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bnJlYWRhYmxlX3RleHQiIG1zZ2lkPSI1ODY1MTc4NTEwNDQ1MzU0ODYiPiLhg67hg5Dhg6Dhg5Xhg5Thg5bhg5Thg5Hhg5jhg6Eg4YOo4YOU4YOh4YOQ4YOu4YOU4YORIOGDkOGDnOGDkuGDkOGDoOGDmOGDqOGDmOGDoSDhg6zhg5Dhg5nhg5jhg5fhg67hg5Xhg5Ag4YOV4YOU4YOgIOGDm+GDneGDruGDlOGDoOGDruGDk+GDkCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+IuGDo+GDoeGDkOGDruGDlOGDmuGDnSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiIgbXNnaWQ9IjIxNTgyMDQyMjg1MTA1NzYyMjciPiLhg5Phg5Thg6Lhg5Dhg5rhg5Thg5Hhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4i4YOU4YOZ4YOg4YOQ4YOc4YOY4YOhIOGDkOGDnOGDkOGDkeGDlOGDreGDk+GDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+IuGDlOGDmeGDoOGDkOGDnOGDmOGDoSDhg5Dhg5zhg5Dhg5Hhg5Thg63hg5Phg5gg4YOS4YOQ4YOT4YOQ4YOm4YOU4YOR4YOj4YOa4YOY4YOQIOGDrOGDkOGDoOGDm+GDkOGDouGDlOGDkeGDmOGDly4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4i4YOU4YOZ4YOg4YOQ4YOc4YOY4YOhIOGDkOGDnOGDkOGDkeGDlOGDreGDk+GDmOGDoSDhg5Lhg5Dhg5Phg5Dhg6bhg5Thg5Hhg5Ag4YOV4YOU4YOgIOGDm+GDneGDruGDlOGDoOGDruGDk+GDkC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4i4YOu4YOQ4YOg4YOV4YOU4YOW4YOY4YOhIOGDqOGDlOGDoeGDkOGDruGDlOGDkSDhg5Dhg5zhg5Lhg5Dhg6Dhg5jhg6jhg5jhg6Eg4YOT4YOU4YOi4YOQ4YOa4YOU4YOR4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiLhg5vhg53hg5nhg5rhg5Qg4YOh4YOQ4YOu4YOU4YOa4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiIxLeGDruGDkOGDluGDmOGDkOGDnOGDmCDhg6Dhg5Thg5bhg5jhg6Phg5vhg5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiLhg5Phg5Thg6Lhg5Dhg5rhg6Phg6Dhg5gg4YOQ4YOm4YOs4YOU4YOg4YOQIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWtrLXJLWi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMta2stcktaL3N0cmluZ3MueG1sCmluZGV4IDI4MjUzNDIuLjI4MjliOWIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMta2stcktaL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMta2stcktaL3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4i0prQsNGC0LUg0YLRg9GA0LDQu9GLINCx0LDRj9C90LTQsNC80LDQu9Cw0YAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5yZWFkYWJsZV90ZXh0IiBtc2dpZD0iNTg2NTE3ODUxMDQ0NTM1NDg2Ij4i0prQsNGC0LUg0YLRg9GA0LDQu9GLINC10YHQtdC/INGE0LDQudC70YvQvSDQvtKb0YMg0LzSr9C80LrRltC9INCx0L7Qu9C80LDQtNGLIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VubmFtZWQiIG1zZ2lkPSIyODAwNTgyNDA2ODQyMDkyNzA5Ij4i0LDRgtCw0YPRgdGL0LciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19hY3Rpb24iIG1zZ2lkPSIyMTU4MjA0MjI4NTEwNTc2MjI3Ij4i0JzTmdC70ZbQvNC10YLRgtC10YAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4i0KHQutGA0LjQvdGI0L7RgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+ItCh0LrRgNC40L3RiNC+0YIg0YHTmdGC0YLRliDRgtKv0YHRltGA0ZbQu9C00ZYuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+ItCh0LrRgNC40L3RiNC+0YIg0YLSr9GB0ZbRgNGDINC80q/QvNC60ZbQvSDQsdC+0LvQvNCw0LTRiy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4i0prQsNGC0LUg0YLRg9GA0LDQu9GLINC10YHQtdC/0YLRltKjINC805nQu9GW0LzQtdGC0YLQtdGA0ZYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19uYW1lIiBtc2dpZD0iNTA4OTE5MTgzMjI3MTg1MjgyNiI+ItKa0YvRgdKb0LAg0LDRgtGLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiIxINC20L7Qu9C00YvSmyDQttC40YvQvdGC0YvSmyDQvNOZ0LvRltC80LXRgtGC0LXRgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDExNzA4ODk5ODczMzU0Njc4NCI+ItCV0LPQttC10Lkt0YLQtdCz0LbQtdC50LvRliDRgdC40L/QsNGC0YLQsNC80LAiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMta20tcktIL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1rbS1yS0gvc3RyaW5ncy54bWwKaW5kZXggOTY2Y2VjMC4uMzU3MzU4OCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1rbS1yS0gvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1rbS1yS0gvc3RyaW5ncy54bWwKQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiLhnprhnrbhnpnhnoDhnrbhnprhno7hn43hnpbhnrjhnoDhn4bhnqDhnrvhnp8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5yZWFkYWJsZV90ZXh0IiBtc2dpZD0iNTg2NTE3ODUxMDQ0NTM1NDg2Ij4i4Z6Y4Z634Z6T4Z6i4Z624Z6F4Z6i4Z624Z6T4Z6v4Z6A4Z6f4Z624Z6a4Z6a4Z6U4Z624Z6Z4Z6A4Z624Z6O4Z+N4Z6A4Z+G4Z6g4Z674Z6f4Z6U4Z624Z6T4Z6R4Z+BIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VubmFtZWQiIG1zZ2lkPSIyODAwNTgyNDA2ODQyMDkyNzA5Ij4i4Z6C4Z+S4Z6Y4Z624Z6T4Z6I4Z+S4Z6Y4Z+E4Z+HIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+IuGeluGfkOGej+GfjOGemOGetuGek+Gem+GemOGfkuGeouGet+GejyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2FjdGlvbiIgbXNnaWQ9Ijg2Nzc3ODE3MjE5NDA2MTQ5OTUiPiLhnprhnrzhnpThnpDhno/hnqLhn4HhnoDhn5LhnprhnoThn4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF90YWtlbiIgbXNnaWQ9IjcxNzUzNDMxODE3Njc0MjkwODgiPiLhnpThnrbhnpPhnpDhno/hnprhnrzhnpThnpDhno/hnqLhn4HhnoDhn5LhnprhnoThn4vhnorhn4Thnpnhnofhn4ThnoLhnofhn5DhnpkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4i4Z6Y4Z634Z6T4Z6i4Z624Z6F4Z6Q4Z6P4Z6a4Z684Z6U4Z6Q4Z6P4Z6i4Z+B4Z6A4Z+S4Z6a4Z6E4Z+L4Z6U4Z624Z6T4Z6R4Z+BIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+IuGeluGfkOGej+GfjOGemOGetuGek+Gem+GemOGfkuGeouGet+Gej+GeluGeuOGemuGelOGetuGemeGegOGetuGemuGejuGfjeGegOGfhuGeoOGeu+GenyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX25hbWUiIG1zZ2lkPSI1MDg5MTkxODMyMjcxODUyODI2Ij4i4Z6I4Z+S4Z6Y4Z+E4Z+H4oCL4Z6B4Z+S4Z6b4Z64Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiLhnoDhnrbhnprhnp/hnoThn5LhnoHhn4HhnpThnpjhnr3hnpnhnofhnr3hnpoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiLhnoDhnrbhnprhnpbhnrfhnpbhno7hn4zhnpPhnrbhnpvhnpjhn5LhnqLhnrfhno8iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMta24tcklOL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1rbi1ySU4vc3RyaW5ncy54bWwKaW5kZXggNmRhNTMxOS4uNzA3MTI2NCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1rbi1ySU4vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1rbi1ySU4vc3RyaW5ncy54bWwKQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiLgsqbgs4vgsrcg4LK14LKw4LKm4LK/4LKX4LKz4LOBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+IuCyrOCyl+CzjeKAjCDgsrXgsrDgsqbgsr8g4LKr4LOI4LKy4LON4oCM4oCMIOCyheCyqOCzjeCyqOCzgSDgspPgsqbgsrLgs4Eg4LK44LK+4LKn4LON4LKv4LK14LK+4LKX4LOB4LKk4LON4LKk4LK/4LKy4LON4LKyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VubmFtZWQiIG1zZ2lkPSIyODAwNTgyNDA2ODQyMDkyNzA5Ij4i4LK54LOG4LK44LKw4LK/4LK44LKm4LK/4LKw4LOB4LK14LOB4LKm4LOBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+IuCyteCyv+CyteCysOCyl+Cys+CzgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2FjdGlvbiIgbXNnaWQ9Ijg2Nzc3ODE3MjE5NDA2MTQ5OTUiPiLgsrjgs43gspXgs43gsrDgs4Dgsqjgs43igIzgsrbgsr7gsp/gs40iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF90YWtlbiIgbXNnaWQ9IjcxNzUzNDMxODE3Njc0MjkwODgiPiLgsrjgs43gspXgs43gsrDgs4Dgsqjgs43igIzgsrbgsr7gsp/gs43igIwg4LKv4LK24LK44LON4LK14LK/4LKv4LK+4LKX4LK/IOCypOCzhuCyl+CzhuCypuCzgeCyleCziuCys+CzjeCys+CysuCyvuCyl+Cyv+CypuCzhi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4i4LK44LON4LKV4LON4LKw4LOA4LKo4LON4oCM4LK24LK+4LKf4LON4oCMIOCypOCzhuCyl+CzhuCypuCzgeCyleCziuCys+CzjeCys+CysuCzgSDgsrjgsr7gsqfgs43gsq/gsrXgsr7gspfgs4HgsrXgs4Hgsqbgsr/gsrLgs43gsrIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+IuCyrOCyl+CzjSDgsrXgsrDgsqbgsr8g4LK14LK/4LK14LKw4LKX4LKz4LOBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiLgsprgsr/gspXgs43gspUg4LK54LOG4LK44LKw4LOBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiIxLeCyuOCyvuCysuCyv+CyqCDgsrjgsr7gsrDgsr7gsoLgsrYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiLgsrXgsr/gsrXgsrDgsrXgsr7gsqYg4LK14LK/4LK14LKw4LKj4LOGIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWtvL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1rby9zdHJpbmdzLnhtbAppbmRleCA1ZTk2ZTZkLi40ZTNjM2Y0IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWtvL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMta28vc3RyaW5ncy54bWwKQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiLrsoTqt7gg7Iug6rOgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+IuuyhOq3uCDsi6Dqs6Ag7YyM7J287J2EIOydveydhCDsiJgg7JeG7Iq164uI64ukLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+IuydtOumhCDsl4bsnYwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19hY3Rpb24iIG1zZ2lkPSIyMTU4MjA0MjI4NTEwNTc2MjI3Ij4i7IS467aA7KCV67O0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+IuyKpO2BrOumsOyDtyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+IuyKpO2BrOumsOyDt+ydhCDssI3sl4jsirXri4jri6QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+IuyKpO2BrOumsOyDt+ydhCDssI3snYQg7IiYIOyXhuyKteuLiOuLpC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4i67KE6re4IOyLoOqzoCDshLjrtoDsoJXrs7QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19uYW1lIiBtc2dpZD0iNTA4OTE5MTgzMjI3MTg1MjgyNiI+Iuynp+ydgCDsnbTrpoQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb190aXRsZSIgbXNnaWQ9IjEyNzE2Nzg1MzM3MDU1NzE3NSI+Iu2VnCDspIQg7JqU7JW9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGVzY3JpcHRpb24iIG1zZ2lkPSI0MTE3MDg4OTk4NzMzNTQ2Nzg0Ij4i7J6Q7IS47ZWcIOyEpOuqhSI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1reS1yS0cvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWt5LXJLRy9zdHJpbmdzLnhtbAppbmRleCBjNWI0MTQ0Li4wNTFiZTM4IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWt5LXJLRy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWt5LXJLRy9zdHJpbmdzLnhtbApAQCAtMjYsNCArMjYsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTMzMjQ4ODE0NDc0MDUyNzEwOSI+ItCc0q/Rh9Kv0LvSr9GI0YLSr9C60YLTqdGA0LTSryDQutCw0LHQsNGA0LvQvtC+0LvQvtGAIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+ItCc0q/Rh9Kv0LvSr9GI0YLSr9C6INGC0YPRg9GA0LDQu9GD0YMg0LrQsNCx0LDRgNC70LDQs9Cw0L0g0YTQsNC50Lsg0L7QutGD0LvQsdCw0Lkg0LrQvtC50LTRgyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+ItCw0YLQsNC70YvRiNGLINC20L7QuiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiIgbXNnaWQ9IjIxNTgyMDQyMjg1MTA1NzYyMjciPiLQp9C+0L4t0LbQsNC50YsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4i0KHQutGA0LjQvdGI0L7RgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+ItCh0LrRgNC40L3RiNC+0YIg0LjQudCz0LjQu9C40LrRgtKv0q8g0YLQsNGA0YLRi9C70LTRiy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4i0KHQutGA0LjQvdGI0L7RgiDRgtCw0YDRgtGL0LvQsdCw0Lkg0LrQvtC50LTRgy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4i0JzSr9GH0q/Qu9Kv0YjRgtKv0LrRgtOp0YAg0LbTqdC90q/QvdC006kg0LrQsNCx0LDRgNC00YvQvSDRh9C+0L4t0LbQsNC50YsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19uYW1lIiBtc2dpZD0iNTA4OTE5MTgzMjI3MTg1MjgyNiI+ItCa0YvRgdC60LAg0LDRgtCw0LvRi9GI0YsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb190aXRsZSIgbXNnaWQ9IjEyNzE2Nzg1MzM3MDU1NzE3NSI+IjEg0YHQsNC/0YLRi9C6INC60L7RgNGD0YLRg9C90LTRgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDExNzA4ODk5ODczMzU0Njc4NCI+ItCa0LXQvdC10L3QuNGA0Y3RjdC6INC80LDQsNC70YvQvNCw0YIiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtbG8tckxBL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1sby1yTEEvc3RyaW5ncy54bWwKaW5kZXggMDM0NjY4OC4uYTA0YTM1NTYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtbG8tckxBL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtbG8tckxBL3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4i4Lql4Lqy4LqN4oCL4LqH4Lqy4LqZ4oCL4Lqa4Lqx4LqZ4oCL4Lqr4LqyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+IuC6muC7jeC7iOC6quC6suC6oeC6suC6lOC6reC7iOC6suC6meC7hOC6n+C6peC7jOC6peC6suC6jeC6h+C6suC6meC6guC7jeC7ieC6nOC6tOC6lOC6nuC6suC6lOC7hOC6lOC7iSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+IuC6muC7jeC7iOC6oeC6teC6iuC6t+C7iCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiIgbXNnaWQ9IjIxNTgyMDQyMjg1MTA1NzYyMjciPiLguqXgurLguo3guqXgurDguq3gur3gupQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4i4Lqe4Lqy4Lqa4Luc4LuJ4Lqy4LqI4LuNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW4iIG1zZ2lkPSI3MTc1MzQzMTgxNzY3NDI5MDg4Ij4i4LqW4LuI4Lqy4LqN4Lqe4Lqy4Lqa4Luc4LuJ4Lqy4LqI4LuN4Lqq4Lqz4LuA4Lql4Lqx4LqU4LuB4Lql4LuJ4LqnLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZCIgbXNnaWQ9IjU4NTMwNDkxNDA4MDY4MzQ2MDEiPiLguprgu43gu4jguqrgurLguqHgurLgupTgupbgu4jgurLguo3gup7gurLguprgu5zgu4ngurLguojgu43gu4TgupTgu4kuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+IuC6peC6suC6jeKAi+C6peC6sOKAi+C6reC6veC6lOKAi+C6geC6suC6meC6peC6suC6jeC6h+C6suC6meC6muC6seC6meC6q+C6siI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX25hbWUiIG1zZ2lkPSI1MDg5MTkxODMyMjcxODUyODI2Ij4i4LqK4Lq34LuI4Lqq4Lqx4LuJ4LqZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiLguqrgurDguqvgurzgurjgupogMSDgu4HgupbguqciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiLguoTgurPguq3gurDgupfgurTguprgurLguo3gu4HguprguprguqXgurDguq3gur3gupQiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtbHQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWx0L3N0cmluZ3MueG1sCmluZGV4IDg0MDY2YzAuLjhkOGQzMWUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtbHQvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1sdC9zdHJpbmdzLnhtbApAQCAtMjYsNCArMjYsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTMzMjQ4ODE0NDc0MDUyNzEwOSI+IlJpa3TFsyBhdGFza2FpdG9zIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+Ik5lcGF2eWtvIHN1a3VydGkgcHJhbmXFoWltbyBhcGllIHJpa3TEhSBmYWlsbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+ImJlIHBhdmFkaW5pbW8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19hY3Rpb24iIG1zZ2lkPSIyMTU4MjA0MjI4NTEwNTc2MjI3Ij4iSW5mb3JtYWNpamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4iRWtyYW5vIGtvcGlqYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+IkVrcmFubyBrb3BpamEgc8SXa21pbmdhaSBwYWRhcnl0YS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4iTmVwYXZ5a28gcGFkYXJ5dGkgZWtyYW5vIGtvcGlqb3MuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+IknFoXNhbWkgcHJhbmXFoWltbyBhcGllIHJpa3TEhSBpbmZvcm1hY2lqYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX25hbWUiIG1zZ2lkPSI1MDg5MTkxODMyMjcxODUyODI2Ij4iVHJ1bXBhc2lzIHBhdmFkaW5pbWFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiIxIGVpbHV0xJdzIHN1dmVzdGluxJciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiJJxaFzYW11cyBhcHJhxaFhcyI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1sdi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtbHYvc3RyaW5ncy54bWwKaW5kZXggOTVkMTY4Yy4uZGJhMWFkMyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1sdi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWx2L3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4iS8S8xatkdSB6acWGb2p1bWkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5yZWFkYWJsZV90ZXh0IiBtc2dpZD0iNTg2NTE3ODUxMDQ0NTM1NDg2Ij4iTmV2YXLEk2phIG5vbGFzxKt0IGvEvMWrZGFzIHDEgXJza2F0YSBmYWlsdS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5uYW1lZCIgbXNnaWQ9IjI4MDA1ODI0MDY4NDIwOTI3MDkiPiJiZXogbm9zYXVrdW1hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+IkRldGFsaXrEk3RhIGluZm9ybcSBY2lqYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2FjdGlvbiIgbXNnaWQ9Ijg2Nzc3ODE3MjE5NDA2MTQ5OTUiPiJFa3LEgW51esWGxJNtdW1zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW4iIG1zZ2lkPSI3MTc1MzQzMTgxNzY3NDI5MDg4Ij4iRWtyxIFudXrFhsSTbXVtcyBpciB2ZWlrdHMgc2VrbcSrZ2kuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+Ik5ldmFyxJNqYSB2ZWlrdCBla3LEgW51esWGxJNtdW11LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjMxMTM1NDk4Mzk3OTg1NjQ2NDUiPiJLxLzFq2RhcyBwxIFyc2thdGEgaW5mb3JtxIFjaWphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiJTYcSrc2luxIF0cyBub3NhdWt1bXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb190aXRsZSIgbXNnaWQ9IjEyNzE2Nzg1MzM3MDU1NzE3NSI+IktvcHNhdmlsa3VtcyAxwqByaW5kacWGxIEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiJEZXRhbGl6xJN0cyBhcHJha3N0cyI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1tay1yTUsvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLW1rLXJNSy9zdHJpbmdzLnhtbAppbmRleCAwZjNlZDVhLi42ZTIzYWQ4IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLW1rLXJNSy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLW1rLXJNSy9zdHJpbmdzLnhtbApAQCAtMjYsNCArMjYsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTMzMjQ4ODE0NDc0MDUyNzEwOSI+ItCY0LfQstC10YjRgtCw0Lgg0LfQsCDQs9GA0LXRiNC60LgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5yZWFkYWJsZV90ZXh0IiBtc2dpZD0iNTg2NTE3ODUxMDQ0NTM1NDg2Ij4i0JTQsNGC0L7RgtC10LrQsNGC0LAg0YHQviDQuNC30LLQtdGI0YLQsNGYINC30LAg0LPRgNC10YjQutCwINC90LUg0LzQvtC20LXRiNC1INC00LAg0YHQtSDQv9GA0L7Rh9C40YLQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+ItC90LXQuNC80LXQvdGD0LLQsNC90LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19hY3Rpb24iIG1zZ2lkPSIyMTU4MjA0MjI4NTEwNTc2MjI3Ij4i0JTQtdGC0LDQu9C4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+ItCh0LvQuNC60LAg0L7QtCDQtdC60YDQsNC90L7RgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+ItCj0YHQv9C10YjQvdC+INC1INC90LDQv9GA0LDQstC10L3QsCDRgdC70LjQutCwINC+0LQg0LXQutGA0LDQvdC+0YIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+ItCd0LUg0LzQvtC20LUg0LTQsCDRgdC1INC90LDQv9GA0LDQstC4INGB0LvQuNC60LAg0L7QtCDQtdC60YDQsNC90L7Rgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4i0JTQtdGC0LDQu9C4INC90LAg0LjQt9Cy0LXRiNGC0LDRmNC+0YIg0LfQsCDQs9GA0LXRiNC60LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19uYW1lIiBtc2dpZD0iNTA4OTE5MTgzMjI3MTg1MjgyNiI+ItCa0YDQsNGC0LrQviDQuNC80LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb190aXRsZSIgbXNnaWQ9IjEyNzE2Nzg1MzM3MDU1NzE3NSI+ItCg0LXQt9C40LzQtSDQstC+IDEg0YDQtdC0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGVzY3JpcHRpb24iIG1zZ2lkPSI0MTE3MDg4OTk4NzMzNTQ2Nzg0Ij4i0JTQtdGC0LDQu9C10L0g0L7Qv9C40YEiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtbWwtcklOL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1tbC1ySU4vc3RyaW5ncy54bWwKaW5kZXggMjkwYzEwYi4uNzNhNGZmZiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1tbC1ySU4vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1tbC1ySU4vc3RyaW5ncy54bWwKQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiLgtKzgtJfgtY0g4LSx4LS/4LSq4LWN4LSq4LWL4LW84LSf4LWN4LSf4LWB4LSV4LW+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+IuC0rOC0l+C1jSDgtLHgtL/gtKrgtY3gtKrgtYvgtbzgtJ/gtY3gtJ/gtY0g4LSr4LSv4LW9IOC0teC0vuC0r+C0v+C0leC1jeC0leC0vuC0qOC0vuC0r+C0v+C0suC1jeC0siI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+IuC0quC1h+C0sOC0v+C0suC1jeC0suC0vuC0pOC1jeC0pOC0teC1vCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiIgbXNnaWQ9IjIxNTgyMDQyMjg1MTA1NzYyMjciPiLgtLXgtL/gtLbgtKbgtL7gtILgtLbgtJngtY3gtJngtb4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4i4LS44LWN4oCM4LSV4LWN4LSw4LWA4LW74LS34LWL4LSf4LWN4LSf4LWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW4iIG1zZ2lkPSI3MTc1MzQzMTgxNzY3NDI5MDg4Ij4i4LS44LWN4LSV4LWN4LSw4LWA4LW74LS34LWL4LSf4LWN4LSf4LWNIOC0juC0n+C1geC0pOC1jeC0pOC1gS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4i4LS44LWN4LSV4LWN4LSw4LWA4LW74LS34LWL4LSf4LWN4LSf4LWNIOC0juC0n+C1geC0leC1jeC0leC0vuC1uyDgtJXgtLTgtL/gtJ7gtY3gtJ7gtL/gtLLgtY3gtLIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+IuC0rOC0l+C1jSDgtLHgtL/gtKrgtY3gtKrgtYvgtbzgtJ/gtY3gtJ/gtY0g4LS14LS/4LS24LSm4LS+4LSC4LS24LSZ4LWN4LSZ4LW+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiLgtLngtY3gtLDgtLjgtY3gtLUg4LSo4LS+4LSu4LSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiLgtJLgtLDgtYEg4LS14LSw4LS/IOC0uOC0guC0l+C1jeC0sOC0ueC0giI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDExNzA4ODk5ODczMzU0Njc4NCI+IuC0teC0v+C0tuC0puC0ruC0vuC0ryDgtLXgtL/gtLXgtLDgtKPgtIIiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtbW4tck1OL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1tbi1yTU4vc3RyaW5ncy54bWwKaW5kZXggOGY2YTJiMC4uMWY0YmU0YSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1tbi1yTU4vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1tbi1yTU4vc3RyaW5ncy54bWwKQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiLQk9GN0LzRgtC70LjQudC9INGC0YPRhdCw0Lkg0YLQsNC50LvQsNC9Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+ItCQ0LvQtNCw0LDQvdGLINGC0LDQudC70LDQvdCz0LjQudC9INGE0LDQudC70YvQsyDRg9C90YjQuNC2INGH0LDQtNCw0YXQs9Kv0Lkg0LHQsNC50L3QsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+ItC90Y3RgCDQsdCw0LnRhdCz0q/QuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiIgbXNnaWQ9IjIxNTgyMDQyMjg1MTA1NzYyMjciPiLQlNGN0LvQs9GN0YDRjdC90LPSr9C5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+ItCU0Y3Qu9Cz0Y3RhtC40LnQvSDQt9GD0YDQsNCzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW4iIG1zZ2lkPSI3MTc1MzQzMTgxNzY3NDI5MDg4Ij4i0JTRjdC70LPRjdGG0LjQudC9INC30YPRgNCz0LjQudCzINCw0LzQttC40LvRgtGC0LDQuSDQsNCy0LvQsNCwLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZCIgbXNnaWQ9IjU4NTMwNDkxNDA4MDY4MzQ2MDEiPiLQlNGN0LvQs9GN0YbQuNC50L0g0LfRg9GA0LDQsyDQsNCy0LDRhSDQsdC+0LvQvtC80LbQs9Kv0LkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+ItCQ0LvQtNCw0LDQvdGLINC00Y3Qu9Cz0Y3RgNGN0L3Qs9Kv0Lkg0YLQsNC50LvQsNC9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiLQkdC+0LPQuNC90L4g0L3RjdGAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiIxLdGAINGI0YPQs9Cw0LzRi9C9INGF0YPRgNCw0LDQvdCz0YPQuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDExNzA4ODk5ODczMzU0Njc4NCI+ItCU0Y3Qu9Cz0Y3RgNGN0L3Qs9Kv0Lkg0YLQsNC50LvQsdCw0YAiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtbXItcklOL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1tci1ySU4vc3RyaW5ncy54bWwKaW5kZXggNDBkN2E5Yy4uNmIwNmNmNSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1tci1ySU4vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1tci1ySU4vc3RyaW5ncy54bWwKQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiLgpKbgpYvgpLcg4KSF4KS54KS14KS+4KSyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+IuCkpuCli+CktyDgpIXgpLngpLXgpL7gpLIg4KSr4KS+4KSI4KSyIOCkteCkvuCkmuCko+ClhyDgpLbgpJXgpY3gpK8g4KSd4KS+4KSy4KWHIOCkqOCkvuCkueClgCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+IuCkheCkqOCkvuCkruCkv+CkpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiIgbXNnaWQ9IjIxNTgyMDQyMjg1MTA1NzYyMjciPiLgpKTgpKrgpLbgpYDgpLIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4i4KS44KWN4KSV4KWN4KSw4KWA4KSo4KS24KWJ4KSfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW4iIG1zZ2lkPSI3MTc1MzQzMTgxNzY3NDI5MDg4Ij4i4KS44KWN4KSV4KWN4KSw4KWA4KSo4KS24KWJ4KSfIOCkr+CktuCkuOCljeCkteClgOCkquCko+ClhyDgpJjgpYfgpKTgpLLgpL4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+IuCkuOCljeCkleCljeCksOClgOCkqOCktuClieCknyDgpJjgpYfgpKPgpYcg4KS24KSV4KWN4KSvIOCkneCkvuCksuClhyDgpKjgpL7gpLngpYAuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+IuCkpuCli+CktyDgpIXgpLngpLXgpL7gpLIg4KSk4KSq4KS24KWA4KSyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiLgpLLgpJjgpYEg4KSo4KS+4KS1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiIxLeCkk+Cks+ClgOCkmuCkviDgpLjgpL7gpLDgpL7gpILgpLYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiLgpKTgpKrgpLbgpYDgpLLgpLXgpL7gpLAg4KS14KSw4KWN4KSj4KSoIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLW1zLXJNWS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtbXMtck1ZL3N0cmluZ3MueG1sCmluZGV4IGRiOGI1ZGMuLmUyMmY4ODAgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtbXMtck1ZL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtbXMtck1ZL3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4iTGFwb3JhbiBwZXBpamF0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+IkZhaWwgbGFwb3JhbiBwZXBpamF0IHRpZGFrIGRhcGF0IGRpYmFjYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+InRpZGFrIGJlcm5hbWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19hY3Rpb24iIG1zZ2lkPSIyMTU4MjA0MjI4NTEwNTc2MjI3Ij4iQnV0aXJhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2FjdGlvbiIgbXNnaWQ9Ijg2Nzc3ODE3MjE5NDA2MTQ5OTUiPiJUYW5na2FwYW4gc2tyaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF90YWtlbiIgbXNnaWQ9IjcxNzUzNDMxODE3Njc0MjkwODgiPiJUYW5na2FwYW4gc2tyaW4gYmVyamF5YSBkaWFtYmlsLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZCIgbXNnaWQ9IjU4NTMwNDkxNDA4MDY4MzQ2MDEiPiJUYW5na2FwYW4gc2tyaW4gdGlkYWsgZGFwYXQgZGlhbWJpbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4iQnV0aXJhbiBsYXBvcmFuIHBlcGlqYXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19uYW1lIiBtc2dpZD0iNTA4OTE5MTgzMjI3MTg1MjgyNiI+Ik5hbWEgcGVuZGVrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiJSaW5na2FzYW4gMSBiYXJpcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDExNzA4ODk5ODczMzU0Njc4NCI+IlBlcmloYWxhbiB0ZXJwZXJpbmNpIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLW15LXJNTS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtbXktck1NL3N0cmluZ3MueG1sCmluZGV4IDc3Y2E1YmYuLjcyN2NkYzkgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtbXktck1NL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtbXktck1NL3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4i4YCB4YC74YCt4YCv4YC34YCa4YC94YCE4YC64YC44YCZ4YC+4YCvIOGAoeGAheGAruGAm+GAhOGAuuGAgeGAtuGAheGArOGAmeGAu+GArOGAuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bnJlYWRhYmxlX3RleHQiIG1zZ2lkPSI1ODY1MTc4NTEwNDQ1MzU0ODYiPiLhgIHhgLvhgL3hgJDhgLrhgJrhgL3hgIThgLrhgLjhgIHhgLvhgIDhgLog4YCh4YCF4YCu4YCb4YCE4YC64YCB4YC24YCF4YCs4YCA4YCt4YCvIOGAluGAkOGAuuGBjeGAmeGAm+GAleGAqyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+IuGAoeGAmeGAiuGAuuGAmeGAsuGAtyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiIgbXNnaWQ9IjIxNTgyMDQyMjg1MTA1NzYyMjciPiLhgKHhgJ7hgLHhgLjhgIXhgK3hgJDhgLrhgJnhgLvhgKzhgLgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4i4YCZ4YC74YCA4YC64YCU4YC+4YCs4YCV4YC84YCE4YC6IOGAnOGAu+GAvuGAleGAuuGAkOGAheGAuuGAleGAvOGAgOGAuuGAleGAr+GAtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+IuGAmeGAu+GAgOGAuuGAlOGAvuGArOGAleGAvOGAhOGAuiDhgJzhgLvhgL7hgJXhgLrhgJDhgIXhgLrhgJXhgLzhgIDhgLrhgJXhgK/hgLbhgIDhgK3hgK8g4YCh4YCx4YCs4YCE4YC64YCZ4YC84YCE4YC64YCF4YC94YCsIOGAm+GAreGAr+GAgOGAuuGAleGAvOGAruGAuOGAleGAvOGAruGBiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZCIgbXNnaWQ9IjU4NTMwNDkxNDA4MDY4MzQ2MDEiPiLhgJnhgLvhgIDhgLrhgJThgL7hgKzhgJXhgLzhgIThgLog4YCc4YC74YC+4YCV4YC64YCQ4YCF4YC64YCV4YC84YCA4YC64YCV4YCv4YC2IOGAmeGAm+GAreGAr+GAgOGAuuGAlOGAreGAr+GAhOGAuuGAleGAqyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjMxMTM1NDk4Mzk3OTg1NjQ2NDUiPiLhgIHhgLvhgL3hgJDhgLrhgJrhgL3hgIThgLrhgLjhgIHhgLvhgIDhgLrhgKHhgIXhgK7hgJvhgIThgLrhgIHhgLbhgIXhgKwg4YCh4YCe4YCx4YC44YCF4YCt4YCQ4YC64YCZ4YC74YCs4YC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiLhgKHhgJnhgIrhgLrhgKHhgJDhgK3hgK/hgIDhgLHhgKzhgIDhgLoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb190aXRsZSIgbXNnaWQ9IjEyNzE2Nzg1MzM3MDU1NzE3NSI+IuGAnOGAreGAr+GAhOGAuuGAuCDhgYEg4YCc4YCt4YCv4YCE4YC64YC44YCh4YCA4YC74YCJ4YC64YC44YCB4YC74YCv4YCV4YC6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGVzY3JpcHRpb24iIG1zZ2lkPSI0MTE3MDg4OTk4NzMzNTQ2Nzg0Ij4i4YCh4YCe4YCx4YC44YCF4YCt4YCQ4YC6IOGAluGAseGArOGAuuGAleGAvOGAgeGAu+GAgOGAuiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1uYi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtbmIvc3RyaW5ncy54bWwKaW5kZXggMTRhODczYy4uYzc3MDJlZiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1uYi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLW5iL3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4iRmVpbHJhcHBvcnRlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bnJlYWRhYmxlX3RleHQiIG1zZ2lkPSI1ODY1MTc4NTEwNDQ1MzU0ODYiPiJGZWlscmFwcG9ydGZpbGVuIGt1bm5lIGlra2UgbGVzZXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5uYW1lZCIgbXNnaWQ9IjI4MDA1ODI0MDY4NDIwOTI3MDkiPiJ1dGVuIG5hdm4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19hY3Rpb24iIG1zZ2lkPSIyMTU4MjA0MjI4NTEwNTc2MjI3Ij4iRGV0YWxqZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4iU2tqZXJtZHVtcCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+IlNramVybWR1bXBlbiBlciB0YXR0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZCIgbXNnaWQ9IjU4NTMwNDkxNDA4MDY4MzQ2MDEiPiJTa2plcm1kdW1wZW4ga3VubmUgaWtrZSB0YXMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+IkRldGFsamVyIG9tIGZlaWxyYXBwb3J0ZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19uYW1lIiBtc2dpZD0iNTA4OTE5MTgzMjI3MTg1MjgyNiI+IkthbGxlbmF2biI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX3RpdGxlIiBtc2dpZD0iMTI3MTY3ODUzMzcwNTU3MTc1Ij4iU2FtbWVuZHJhZyBww6Ugw6luIGxpbmplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGVzY3JpcHRpb24iIG1zZ2lkPSI0MTE3MDg4OTk4NzMzNTQ2Nzg0Ij4iRGV0YWxqZXJ0IGJlc2tyaXZlbHNlIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLW5lLXJOUC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtbmUtck5QL3N0cmluZ3MueG1sCmluZGV4IDAzYWVmM2MuLjczMmYzOTggMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtbmUtck5QL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtbmUtck5QL3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4i4KSs4KSXIOCksOCkv+CkquCli+CksOCljeCkn+CkueCksOClgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bnJlYWRhYmxlX3RleHQiIG1zZ2lkPSI1ODY1MTc4NTEwNDQ1MzU0ODYiPiLgpKzgpJcg4KSw4KS/4KSq4KWL4KSw4KWN4KSfIOCkq+CkvuCkh+CksiDgpKrgpKLgpY3gpKgg4KS44KSV4KS/4KSP4KSoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VubmFtZWQiIG1zZ2lkPSIyODAwNTgyNDA2ODQyMDkyNzA5Ij4iKOCkqOCkvuCkruCkteCkv+CkueClgOCkqCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19hY3Rpb24iIG1zZ2lkPSIyMTU4MjA0MjI4NTEwNTc2MjI3Ij4i4KS14KS/4KS14KSw4KSjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+IuCkuOCljeCkleCljeCksOCkv+CkqOCktuCknyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+IuCkuOCljeCkleCljeCksOCkv+CkqOCktuCknyDgpLjgpKvgpLLgpKTgpL7gpKrgpYLgpLDgpY3gpLXgpJUg4KSy4KS/4KSH4KSv4KWL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+IuCkuOCljeCkleCljeCksOCkv+CkqOCktuCknyDgpLLgpL/gpKgg4KS44KSV4KS/4KSP4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+IuCkrOCklyDgpLDgpL/gpKrgpYvgpLDgpY3gpJ/gpJXgpYsg4KS14KS/4KS14KSw4KSjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiLgpJvgpYvgpJ/gpYsg4KSo4KS+4KSuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiLgpacg4KSy4KS+4KSH4KSo4KSV4KWLIOCkuOCkvuCksOCkvuCkguCktiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDExNzA4ODk5ODczMzU0Njc4NCI+IuCkteCkv+CkuOCljeCkpOClg+CkpCDgpLXgpL/gpLXgpLDgpKMiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtbmwvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLW5sL3N0cmluZ3MueG1sCmluZGV4IDliZmNlOTQuLjAzNzhjYTRhIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLW5sL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtbmwvc3RyaW5ncy54bWwKQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiJGb3V0ZW5yYXBwb3J0ZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5yZWFkYWJsZV90ZXh0IiBtc2dpZD0iNTg2NTE3ODUxMDQ0NTM1NDg2Ij4iQmVzdGFuZCBtZXQgYnVncmFwcG9ydCBrYW4gbmlldCB3b3JkZW4gZ2VsZXplbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+Im5hYW1sb29zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+IkRldGFpbHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4iU2NyZWVuc2hvdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+IlNjcmVlbnNob3QgaXMgZ2VtYWFrdC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4iU2NyZWVuc2hvdCBrYW4gbmlldCB3b3JkZW4gZ2VtYWFrdC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4iRGV0YWlscyB2YW4gYnVncmFwcG9ydCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX25hbWUiIG1zZ2lkPSI1MDg5MTkxODMyMjcxODUyODI2Ij4iS29ydGUgbmFhbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX3RpdGxlIiBtc2dpZD0iMTI3MTY3ODUzMzcwNTU3MTc1Ij4iU2FtZW52YXR0aW5nIHZhbiDDqcOpbiByZWdlbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDExNzA4ODk5ODczMzU0Njc4NCI+IkdlZGV0YWlsbGVlcmRlIGJlc2NocmlqdmluZyI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1wYS1ySU4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXBhLXJJTi9zdHJpbmdzLnhtbAppbmRleCBjZjZkZjE3Li43MjBiZGUwIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXBhLXJJTi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXBhLXJJTi9zdHJpbmdzLnhtbApAQCAtMjYsNCArMjYsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTMzMjQ4ODE0NDc0MDUyNzEwOSI+IuCorOColyDgqLDgqL/gqKrgqYvgqLDgqJ/gqL7gqIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5yZWFkYWJsZV90ZXh0IiBtc2dpZD0iNTg2NTE3ODUxMDQ0NTM1NDg2Ij4i4Kis4KiXIOCosOCov+CoquCpi+CosOConyDgqKvgqLzgqL7gqIjgqLIg4Kiq4Kmc4KmN4Ki54KmAIOCoqOCoueCpgOCogiDgqJzgqL4g4Ki44KiV4KmAIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VubmFtZWQiIG1zZ2lkPSIyODAwNTgyNDA2ODQyMDkyNzA5Ij4i4Kis4Ki/4Kio4Ki+4KiCLeCoqOCovuCoriI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiIgbXNnaWQ9IjIxNTgyMDQyMjg1MTA1NzYyMjciPiLgqLXgqYfgqLDgqLXgqYciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4i4Ki44KiV4KmN4Kiw4KmA4Kio4Ki44Ki84Ki+4KifIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW4iIG1zZ2lkPSI3MTc1MzQzMTgxNzY3NDI5MDg4Ij4i4Ki44KiV4KmN4Kiw4KmA4Kio4Ki44Ki84Ki+4KifIOCouOCoq+CosuCopOCovuCoquCpguCosOCoteColSDgqLLgqL/gqIYg4KiX4Ki/4KiG4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+IuCouOColeCpjeCosOCpgOCoqOCouOCovOCovuConyDgqKjgqLngqYDgqIIg4Kiy4Ki/4KiGIOConOCoviDgqLjgqJXgqL/gqIbgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4i4Kis4Kmx4KiXIOCosOCov+CoquCpi+CosOConyDgqLXgqYfgqLDgqLXgqYciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19uYW1lIiBtc2dpZD0iNTA4OTE5MTgzMjI3MTg1MjgyNiI+IuCom+Cpi+Con+CoviDgqKjgqL7gqK4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb190aXRsZSIgbXNnaWQ9IjEyNzE2Nzg1MzM3MDU1NzE3NSI+IjEt4Kiy4Ki+4KiI4KioIOCouOCovuCosOCovuCoguCouOCovCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDExNzA4ODk5ODczMzU0Njc4NCI+IuCoteCov+CouOCopeCovuCosCDgqLjgqLngqL/gqKQg4Ki14Kiw4Kij4KioIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXBsL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1wbC9zdHJpbmdzLnhtbAppbmRleCAwYzhhNmI0Li5kNjcxNWE1IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXBsL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtcGwvc3RyaW5ncy54bWwKQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiJSYXBvcnR5IG8gYsWCxJlkYWNoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+Ik5pZSBtb8W8bmEgb2Rjenl0YcSHIHJhcG9ydHUgbyBixYLEmWR6aWUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5uYW1lZCIgbXNnaWQ9IjI4MDA1ODI0MDY4NDIwOTI3MDkiPiJiZXogbmF6d3kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19hY3Rpb24iIG1zZ2lkPSIyMTU4MjA0MjI4NTEwNTc2MjI3Ij4iU3pjemVnw7PFgnkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4iWnJ6dXQgZWtyYW51Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW4iIG1zZ2lkPSI3MTc1MzQzMTgxNzY3NDI5MDg4Ij4iWnJvYmlvbm8genJ6dXQgZWtyYW51LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZCIgbXNnaWQ9IjU4NTMwNDkxNDA4MDY4MzQ2MDEiPiJOaWUgdWRhxYJvIHNpxJkgenJvYmnEhyB6cnp1dHUgZWtyYW51LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjMxMTM1NDk4Mzk3OTg1NjQ2NDUiPiJTemN6ZWfDs8WCeSB6Z8WCb3N6ZW5pYSBixYLEmWR1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiJLcsOzdGthIG5hendhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiJKZWRub3dpZXJzem93ZSBwb2RzdW1vd2FuaWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiJTemN6ZWfDs8WCb3d5IG9waXMiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtcHQtckJSL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1wdC1yQlIvc3RyaW5ncy54bWwKaW5kZXggYjE5NGVjYy4uZmIxNmRkOCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1wdC1yQlIvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1wdC1yQlIvc3RyaW5ncy54bWwKQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiJSZWxhdMOzcmlvcyBkZSBidWdzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+Ik7Do28gZm9pIHBvc3PDrXZlbCBsZXIgbyBhcnF1aXZvIGRlIHJlbGF0w7NyaW8gZGUgYnVnIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VubmFtZWQiIG1zZ2lkPSIyODAwNTgyNDA2ODQyMDkyNzA5Ij4ic2VtIG5vbWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19hY3Rpb24iIG1zZ2lkPSIyMTU4MjA0MjI4NTEwNTc2MjI3Ij4iRGV0YWxoZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4iQ2FwdHVyYXMgZGUgdGVsYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+IkNhcHR1cmEgZGUgdGVsYSBjb25jbHXDrWRhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZCIgbXNnaWQ9IjU4NTMwNDkxNDA4MDY4MzQ2MDEiPiJOw6NvIGZvaSBwb3Nzw612ZWwgZmF6ZXIgYSBjYXB0dXJhIGRlIHRlbGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+IkRldGFsaGVzIGRvIHJlbGF0w7NyaW8gZG8gYnVnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiJBcGVsaWRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiJSZXN1bW8gZGUgdW1hIGxpbmhhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGVzY3JpcHRpb24iIG1zZ2lkPSI0MTE3MDg4OTk4NzMzNTQ2Nzg0Ij4iRGVzY3Jpw6fDo28gZGV0YWxoYWRhIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXB0LXJQVC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtcHQtclBUL3N0cmluZ3MueG1sCmluZGV4IDc1NzUzOGMuLjA3ZDMxOWUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtcHQtclBUL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtcHQtclBUL3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4iUmVsYXTDs3Jpb3MgZGUgZXJyb3MiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5yZWFkYWJsZV90ZXh0IiBtc2dpZD0iNTg2NTE3ODUxMDQ0NTM1NDg2Ij4iTsOjbyBmb2kgcG9zc8OtdmVsIGxlciBvIGZpY2hlaXJvIGRlIHJlbGF0w7NyaW8gZGUgZXJybyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+InNlbSBub21lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+IkRldGFsaGVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+IkNhcHR1cmEgZGUgZWNyw6MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF90YWtlbiIgbXNnaWQ9IjcxNzUzNDMxODE3Njc0MjkwODgiPiJDYXB0dXJhIGRlIGVjcsOjIHRpcmFkYSBjb20gw6p4aXRvLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZCIgbXNnaWQ9IjU4NTMwNDkxNDA4MDY4MzQ2MDEiPiJOw6NvIGZvaSBwb3Nzw612ZWwgdGlyYXIgYSBjYXB0dXJhIGRlIGVjcsOjLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjMxMTM1NDk4Mzk3OTg1NjQ2NDUiPiJEZXRhbGhlcyBkbyByZWxhdMOzcmlvIGRlIGVycm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19uYW1lIiBtc2dpZD0iNTA4OTE5MTgzMjI3MTg1MjgyNiI+Ik5vbWUgYWJyZXZpYWRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiJSZXN1bW8gZGUgMSBsaW5oYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDExNzA4ODk5ODczMzU0Njc4NCI+IkRlc2NyacOnw6NvIGRldGFsaGFkYSI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1wdC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtcHQvc3RyaW5ncy54bWwKaW5kZXggYjE5NGVjYy4uZmIxNmRkOCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1wdC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXB0L3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4iUmVsYXTDs3Jpb3MgZGUgYnVncyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bnJlYWRhYmxlX3RleHQiIG1zZ2lkPSI1ODY1MTc4NTEwNDQ1MzU0ODYiPiJOw6NvIGZvaSBwb3Nzw612ZWwgbGVyIG8gYXJxdWl2byBkZSByZWxhdMOzcmlvIGRlIGJ1ZyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+InNlbSBub21lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+IkRldGFsaGVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+IkNhcHR1cmFzIGRlIHRlbGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF90YWtlbiIgbXNnaWQ9IjcxNzUzNDMxODE3Njc0MjkwODgiPiJDYXB0dXJhIGRlIHRlbGEgY29uY2x1w61kYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4iTsOjbyBmb2kgcG9zc8OtdmVsIGZhemVyIGEgY2FwdHVyYSBkZSB0ZWxhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjMxMTM1NDk4Mzk3OTg1NjQ2NDUiPiJEZXRhbGhlcyBkbyByZWxhdMOzcmlvIGRvIGJ1ZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX25hbWUiIG1zZ2lkPSI1MDg5MTkxODMyMjcxODUyODI2Ij4iQXBlbGlkbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX3RpdGxlIiBtc2dpZD0iMTI3MTY3ODUzMzcwNTU3MTc1Ij4iUmVzdW1vIGRlIHVtYSBsaW5oYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDExNzA4ODk5ODczMzU0Njc4NCI+IkRlc2NyacOnw6NvIGRldGFsaGFkYSI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1yby9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtcm8vc3RyaW5ncy54bWwKaW5kZXggMTMyZjIxZi4uMDY0ZGZhZjcgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtcm8vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1yby9zdHJpbmdzLnhtbApAQCAtMjYsNCArMjYsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTMzMjQ4ODE0NDc0MDUyNzEwOSI+IlJhcG9hcnRlIGRlIGVyb3JpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+IkZpyJlpZXJ1bCBjdSByYXBvcnR1bCBkZSBlcm9hcmUgbnUgYSBwdXR1dCBmaSBjaXRpdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+ImbEg3LEgyBudW1lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+IkRldGFsaWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4iQ2FwdHVyxIMgZGUgZWNyYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF90YWtlbiIgbXNnaWQ9IjcxNzUzNDMxODE3Njc0MjkwODgiPiJDYXB0dXJhIGRlIGVjcmFuIGEgZm9zdCBmxINjdXTEgy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4iQ2FwdHVyYSBkZSBlY3JhbiBudSBhIHB1dHV0IGZpIGbEg2N1dMSDLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjMxMTM1NDk4Mzk3OTg1NjQ2NDUiPiJEZXRhbGlpIHByaXZpbmQgcmFwb3J0dWwgZGUgZXJvYXJlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiJOdW1lIHNjdXJ0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiJSZXp1bWF0IGRlIHVuIHLDom5kIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGVzY3JpcHRpb24iIG1zZ2lkPSI0MTE3MDg4OTk4NzMzNTQ2Nzg0Ij4iRGVzY3JpZXJlIGRldGFsaWF0xIMiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtcnUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXJ1L3N0cmluZ3MueG1sCmluZGV4IDVkYzU5NTMuLjMzNTA3NDAgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtcnUvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1ydS9zdHJpbmdzLnhtbApAQCAtMjYsNCArMjYsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTMzMjQ4ODE0NDc0MDUyNzEwOSI+ItCe0YLRh9C10YLRiyDQvtCxINC+0YjQuNCx0LrQsNGFIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+ItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L7RgtC60YDRi9GC0Ywg0L7RgtGH0LXRgiDQvtCxINC+0YjQuNCx0LrQtSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+ItCx0LXQtyDQvdCw0LfQstCw0L3QuNGPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+ItCU0LXRgtCw0LvQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2FjdGlvbiIgbXNnaWQ9Ijg2Nzc3ODE3MjE5NDA2MTQ5OTUiPiLQodC60YDQuNC90YjQvtGC0YsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF90YWtlbiIgbXNnaWQ9IjcxNzUzNDMxODE3Njc0MjkwODgiPiLQodC60YDQuNC90YjQvtGCINCz0L7RgtC+0LIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4i0J3QtSDRg9C00LDQu9C+0YHRjCDRgdC00LXQu9Cw0YLRjCDRgdC60YDQuNC90YjQvtGCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+ItCU0LXRgtCw0LvQuCDQvtGC0YfQtdGC0LAg0L7QsSDQvtGI0LjQsdC60LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19uYW1lIiBtc2dpZD0iNTA4OTE5MTgzMjI3MTg1MjgyNiI+ItCa0YDQsNGC0LrQvtC1INC90LDQt9Cy0LDQvdC40LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb190aXRsZSIgbXNnaWQ9IjEyNzE2Nzg1MzM3MDU1NzE3NSI+ItCa0YDQsNGC0LrQvtC1INC+0L/QuNGB0LDQvdC40LUg0L7RiNC40LHQutC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGVzY3JpcHRpb24iIG1zZ2lkPSI0MTE3MDg4OTk4NzMzNTQ2Nzg0Ij4i0J/QvtC00YDQvtCx0L3QvtC1INC+0L/QuNGB0LDQvdC40LUiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtc2ktckxLL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1zaS1yTEsvc3RyaW5ncy54bWwKaW5kZXggYzg0NmY4Ny4uZDkxNTEwOSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1zaS1yTEsvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1zaS1yTEsvc3RyaW5ncy54bWwKQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiLgtq/gt53gt4Ig4LeA4LeP4La74LeK4Lat4LePIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+IuC2r+C3neC3giDgt4Dgt4/gtrvgt4rgtq3gt48g4Lac4Lec4Lax4LeU4LeAIOC2muC3kuC2uuC3gOC3k+C2uOC2pyDgtrHgt5zgt4Tgt5Dgtprgt5Ig4LeA4LeS4La6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VubmFtZWQiIG1zZ2lkPSIyODAwNTgyNDA2ODQyMDkyNzA5Ij4i4Lax4La44LeKIOC2seC3nOC2muC3hSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiIgbXNnaWQ9IjIxNTgyMDQyMjg1MTA1NzYyMjciPiLgt4Dgt5Lgt4Pgt4rgtq3gtrsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4i4Lat4LeS4La7IOC2u+C3lOC3gCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+IuC3g+C3j+C2u+C3iuC2ruC2muC3gCDgtq3gt5Lgtrsg4La74LeU4LeA4Laa4LeKIOC2nOC2seC3iuC2seC3jyDgtr3gtq/gt5MuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+IuC2reC3kuC2uyDgtrvgt5Tgt4Dgtprgt4og4Lac4LatIOC2seC3nOC3hOC3kOC2muC3kiDgt4Dgt5LgtrouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+IuC2r+C3neC3giDgt4Dgt4/gtrvgt4rgtq3gt48g4LeA4LeS4LeD4LeK4Lat4La7Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiLgtprgt5ngtqfgt5Ig4Lax4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiLgtrTgt5rgt4Xgt5ItMSDgt4Pgt4/gtrvgt4/gtoLgt4HgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiLgt4Pgt4Dgt5Lgt4Pgt4rgtq3gtrsg4LeA4LeS4LeD4LeK4Lat4La74La6Ijwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXNrL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1zay9zdHJpbmdzLnhtbAppbmRleCBiMzk1ZDFhLi5lYzkwMDNkIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXNrL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtc2svc3RyaW5ncy54bWwKQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiJIbMOhc2VuaWEgY2jDvWIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5yZWFkYWJsZV90ZXh0IiBtc2dpZD0iNTg2NTE3ODUxMDQ0NTM1NDg2Ij4iU8O6Ym9yIHPCoGhsw6FzZW7DrW0gY2h5Ynkgc2EgbmVwb2RhcmlsbyBwcmXEjcOtdGHFpSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+ImJleiBuw6F6dnUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19hY3Rpb24iIG1zZ2lkPSIyMTU4MjA0MjI4NTEwNTc2MjI3Ij4iUG9kcm9ibm9zdGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4iU27DrW1rYSBvYnJhem92a3kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF90YWtlbiIgbXNnaWQ9IjcxNzUzNDMxODE3Njc0MjkwODgiPiJTbsOtbWthIG9icmF6b3ZreSBib2xhIHphem5hbWVuYW7DoS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4iU27DrW1rdSBvYnJhem92a3kgc2EgbmVwb2RhcmlsbyB6YXpuYW1lbmHFpS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4iUG9kcm9ibm9zdGkgaGzDoXNlbmlhIGNoeWJ5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiJTa3LDoXRlbsO9IG7DoXpvdiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX3RpdGxlIiBtc2dpZD0iMTI3MTY3ODUzMzcwNTU3MTc1Ij4iSmVkbm9yaWFka292w6kgemhybnV0aWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiJQb2Ryb2Juw70gcG9waXMiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtc2wvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXNsL3N0cmluZ3MueG1sCmluZGV4IDkxMDQxZTEuLmFhNjZjZTkgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtc2wvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1zbC9zdHJpbmdzLnhtbApAQCAtMjYsNCArMjYsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTMzMjQ4ODE0NDc0MDUyNzEwOSI+IlBvcm/EjWlsYSBvIG5hcGFrYWgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5yZWFkYWJsZV90ZXh0IiBtc2dpZD0iNTg2NTE3ODUxMDQ0NTM1NDg2Ij4iRGF0b3Rla2UgcyBwb3JvxI1pbG9tIG8gbmFwYWthaCBuaSBiaWxvIG1vZ2/EjWUgcHJlYnJhdGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5uYW1lZCIgbXNnaWQ9IjI4MDA1ODI0MDY4NDIwOTI3MDkiPiJuZWltZW5vdmFubyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiIgbXNnaWQ9IjIxNTgyMDQyMjg1MTA1NzYyMjciPiJQb2Ryb2Jub3N0aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2FjdGlvbiIgbXNnaWQ9Ijg2Nzc3ODE3MjE5NDA2MTQ5OTUiPiJQb3NuZXRlayB6YXNsb25hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW4iIG1zZ2lkPSI3MTc1MzQzMTgxNzY3NDI5MDg4Ij4iUG9zbmV0ZWsgemFzbG9uIGplIGJpbCB1c3BlxaFubyB1c3R2YXJqZW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+IlBvc25ldGthIHphc2xvbiBuaSBiaWxvIG1vZ2/EjWUgdXN0dmFyaXRpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjMxMTM1NDk4Mzk3OTg1NjQ2NDUiPiJQb2Ryb2Jub3N0aSBvIHBvcm/EjWlsdSBvIG5hcGFrYWgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19uYW1lIiBtc2dpZD0iNTA4OTE5MTgzMjI3MTg1MjgyNiI+IkltZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX3RpdGxlIiBtc2dpZD0iMTI3MTY3ODUzMzcwNTU3MTc1Ij4iRW5vdnJzdGnEjW5pIHBvdnpldGVrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGVzY3JpcHRpb24iIG1zZ2lkPSI0MTE3MDg4OTk4NzMzNTQ2Nzg0Ij4iUG9kcm9iZW4gb3BpcyI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1zcS1yQUwvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXNxLXJBTC9zdHJpbmdzLnhtbAppbmRleCBlOTFhYTA5Li5kZDEzZjM0IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXNxLXJBTC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXNxLXJBTC9zdHJpbmdzLnhtbApAQCAtMjYsNCArMjYsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTMzMjQ4ODE0NDc0MDUyNzEwOSI+IlJhcG9ydGV0IGUgZ2FiaW1ldmUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5yZWFkYWJsZV90ZXh0IiBtc2dpZD0iNTg2NTE3ODUxMDQ0NTM1NDg2Ij4iU2tlZGFyaSBpIHJhcG9ydGltaXQgdMOrIGRlZmVrdGl0IG7DqyBrb2QgbnVrIG11bmQgdMOrIGxleG9oZWouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VubmFtZWQiIG1zZ2lkPSIyODAwNTgyNDA2ODQyMDkyNzA5Ij4iZSBwYWVtw6tydHVhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiIgbXNnaWQ9IjIxNTgyMDQyMjg1MTA1NzYyMjciPiJEZXRhamV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+IlBhbWphIGUgZWtyYW5pdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+IlBhbWphIGUgZWtyYW5pdCB1IHJlYWxpenVhIG1lIHN1a3Nlcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4iUGFtamEgZSBla3Jhbml0IG51ayBtdW5kIHTDqyByZWFsaXpvaGVqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjMxMTM1NDk4Mzk3OTg1NjQ2NDUiPiJEZXRhamV0IGUgcmFwb3J0aW1pdCB0w6sgZ2FiaW1ldmUgbsOrIGtvZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX25hbWUiIG1zZ2lkPSI1MDg5MTkxODMyMjcxODUyODI2Ij4iRW1yaSBzaGt1cnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb190aXRsZSIgbXNnaWQ9IjEyNzE2Nzg1MzM3MDU1NzE3NSI+IlDDq3JtYmxlZGhqZSBtZSAxIHJyZXNodCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDExNzA4ODk5ODczMzU0Njc4NCI+IlDDq3JzaGtyaW1pIGkgZGV0YWp1YXIiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtc3Ivc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXNyL3N0cmluZ3MueG1sCmluZGV4IDFiZTQ3ZGEuLjFkYTdlY2IgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtc3Ivc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1zci9zdHJpbmdzLnhtbApAQCAtMjYsNCArMjYsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTMzMjQ4ODE0NDc0MDUyNzEwOSI+ItCY0LfQstC10YjRgtCw0ZjQuCDQviDQs9GA0LXRiNC60LDQvNCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+ItCU0LDRgtC+0YLQtdC60LAg0LjQt9Cy0LXRiNGC0LDRmNCwINC+INCz0YDQtdGI0YbQuCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQv9GA0L7Rh9C40YLQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+ItC90LXQuNC80LXQvdC+0LLQsNC90L4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19hY3Rpb24iIG1zZ2lkPSIyMTU4MjA0MjI4NTEwNTc2MjI3Ij4i0JTQtdGC0LDRmdC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+ItCh0L3QuNC80YbQuCDQtdC60YDQsNC90LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF90YWtlbiIgbXNnaWQ9IjcxNzUzNDMxODE3Njc0MjkwODgiPiLQodC90LjQvNCw0ZrQtSDQtdC60YDQsNC90LAg0ZjQtSDRg9GB0L/QtdC70L4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+ItCh0L3QuNC80LDRmtC1INC10LrRgNCw0L3QsCDQvdC40ZjQtSDRg9GB0L/QtdC70L4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+ItCU0LXRgtCw0ZnQuCDQuNC30LLQtdGI0YLQsNGY0LAg0L4g0LPRgNC10YjRhtC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiLQmtGA0LDRgtC60Lgg0L3QsNC30LjQsiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX3RpdGxlIiBtc2dpZD0iMTI3MTY3ODUzMzcwNTU3MTc1Ij4i0KDQtdC30LjQvNC1INGDINGY0LXQtNC90L7QvCDRgNC10LTRgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDExNzA4ODk5ODczMzU0Njc4NCI+ItCU0LXRgtCw0ZnQvdC4INC+0L/QuNGBIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXN2L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1zdi9zdHJpbmdzLnhtbAppbmRleCA5ZjViNWYwLi44YWZhMGE1IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXN2L3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtc3Yvc3RyaW5ncy54bWwKQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiJGZWxyYXBwb3J0ZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5yZWFkYWJsZV90ZXh0IiBtc2dpZD0iNTg2NTE3ODUxMDQ0NTM1NDg2Ij4iRGV0IGdpY2sgaW50ZSBhdHQgbMOkc2EgZmVscmFwcG9ydGVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VubmFtZWQiIG1zZ2lkPSIyODAwNTgyNDA2ODQyMDkyNzA5Ij4ibmFtbmzDtnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19hY3Rpb24iIG1zZ2lkPSIyMTU4MjA0MjI4NTEwNTc2MjI3Ij4iSW5mb3JtYXRpb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4iU2vDpHJtZHVtcCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+IkVuIHNrw6RybWR1bXAgaGFyIHRhZ2l0cy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4iRGV0IGdpY2sgaW50ZSBhdHQgdGEgc2tyw6RtZHVtcC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4iSW5mb3JtYXRpb24gZsO2ciBmZWxyYXBwb3J0ZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19uYW1lIiBtc2dpZD0iNTA4OTE5MTgzMjI3MTg1MjgyNiI+IktvcnRuYW1uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiJTYW1tYW5mYXR0bmluZyBww6UgZW4gcmFkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGVzY3JpcHRpb24iIG1zZ2lkPSI0MTE3MDg4OTk4NzMzNTQ2Nzg0Ij4iRGV0YWxqZXJhZCBiZXNrcml2bmluZyI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1zdy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtc3cvc3RyaW5ncy54bWwKaW5kZXggNDIyY2E4MS4uNWI3MDI2MiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1zdy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXN3L3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4iUmlwb3RpIHphIGhpdGlsYWZ1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+IkZhaWxpIHlhIHJpcG90aSB5YSBoaXRpbGFmdSBoYWlrdXNvbXdhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VubmFtZWQiIG1zZ2lkPSIyODAwNTgyNDA2ODQyMDkyNzA5Ij4iSXNpeW8gbmEgamluYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiIgbXNnaWQ9IjIxNTgyMDQyMjg1MTA1NzYyMjciPiJNYWVsZXpvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+IlBpY2hhIHlhIHNrcmluaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+IkltZXBpZ2EgcGljaGEgeWEgc2tyaW5pLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZCIgbXNnaWQ9IjU4NTMwNDkxNDA4MDY4MzQ2MDEiPiJIYWlrdXBpZ2EgcGljaGEgeWEgc2tyaW5pLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjMxMTM1NDk4Mzk3OTg1NjQ2NDUiPiJNYWVsZXpvIGt1aHVzdSByaXBvdGkgeWEgaGl0aWxhZnUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19uYW1lIiBtc2dpZD0iNTA4OTE5MTgzMjI3MTg1MjgyNiI+IkppbmEgZnVwaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX3RpdGxlIiBtc2dpZD0iMTI3MTY3ODUzMzcwNTU3MTc1Ij4iTXVodGFzYXJpIHdhIG1zdGFyaSBtbW9qYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDExNzA4ODk5ODczMzU0Njc4NCI+Ik1hZWxlem8geWEga2luYSI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy10YS1ySU4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXRhLXJJTi9zdHJpbmdzLnhtbAppbmRleCAzMWRhZjU0Li45MWViNzE4IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXRhLXJJTi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXRhLXJJTi9zdHJpbmdzLnhtbApAQCAtMjYsNCArMjYsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTMzMjQ4ODE0NDc0MDUyNzEwOSI+IuCuquCuv+CutOCviCDgroXgrrHgrr/grpXgr43grpXgr4jgrpXgrrPgr40iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5yZWFkYWJsZV90ZXh0IiBtc2dpZD0iNTg2NTE3ODUxMDQ0NTM1NDg2Ij4i4K6q4K6/4K604K+IIOCuheCuseCuv+CuleCvjeCuleCviOCur+CviOCuquCvjSDgrqrgrp/grr/grpXgr43grpUg4K6u4K+B4K6f4K6/4K6v4K614K6/4K6y4K+N4K6y4K+IIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VubmFtZWQiIG1zZ2lkPSIyODAwNTgyNDA2ODQyMDkyNzA5Ij4i4K6q4K+G4K6v4K6w4K6/4K6f4K6q4K+N4K6q4K6f4K6+4K6k4K6k4K+BIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+IuCuteCuv+CuteCusOCumeCvjeCuleCus+CvjSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2FjdGlvbiIgbXNnaWQ9Ijg2Nzc3ODE3MjE5NDA2MTQ5OTUiPiLgrrjgr43grpXgrr/grrDgr4Dgrqngr40g4K634K6+4K6f4K+NIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW4iIG1zZ2lkPSI3MTc1MzQzMTgxNzY3NDI5MDg4Ij4i4K644K+N4K6V4K6/4K6w4K+A4K6p4K+NIOCut+CuvuCun+CvjSDgro7grp/gr4HgrpXgr43grpXgrqrgr43grqrgrp/gr43grp/grqTgr4EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+IuCuuOCvjeCuleCuv+CusOCvgOCuqeCvjSDgrrfgrr7grp/gr43grp/gr4gg4K6O4K6f4K+B4K6V4K+N4K6VIOCuruCvgeCun+Cuv+Cur+CuteCuv+CusuCvjeCusuCviC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4i4K6q4K6/4K604K+IIOCuheCuseCuv+CuleCvjeCuleCviCDgrrXgrr/grrXgrrDgrpngr43grpXgrrPgr40iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19uYW1lIiBtc2dpZD0iNTA4OTE5MTgzMjI3MTg1MjgyNiI+IuCumuCvgeCusOCvgeCuleCvjeCuleCuquCvjSDgrqrgr4bgrq/grrDgr40iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb190aXRsZSIgbXNnaWQ9IjEyNzE2Nzg1MzM3MDU1NzE3NSI+IuCumuCvgeCusOCvgeCuleCvjeCuleCuteCuv+CuteCusOCuruCvjSAo4K6S4K6w4K+BIOCuteCusOCuv+Cur+Cuv+CusuCvjSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiLgrrXgrr/grrDgrr/grrXgrr7grqkg4K614K6/4K6z4K6V4K+N4K6V4K6u4K+NIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXRlLXJJTi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtdGUtcklOL3N0cmluZ3MueG1sCmluZGV4IDM0YWI2ZjIuLjUxN2RkNWUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtdGUtcklOL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtdGUtcklOL3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4i4LCs4LCX4LGNIOCwqOCwv+CwteCxh+CwpuCwv+CwleCwsuCxgSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bnJlYWRhYmxlX3RleHQiIG1zZ2lkPSI1ODY1MTc4NTEwNDQ1MzU0ODYiPiLgsKzgsJfgsY0g4LCo4LC/4LC14LGH4LCm4LC/4LCVIOCwq+CxiOCwsuCxjeKAjOCwqOCxgSDgsJrgsKbgsLXgsKHgsIIg4LC44LC+4LCn4LGN4LCv4LCq4LCh4LCy4LGH4LCm4LGBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VubmFtZWQiIG1zZ2lkPSIyODAwNTgyNDA2ODQyMDkyNzA5Ij4i4LCq4LGH4LCw4LGBIOCwsuCxh+CwqOCwv+CwteCwvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiIgbXNnaWQ9IjIxNTgyMDQyMjg1MTA1NzYyMjciPiLgsLXgsL/gsLXgsLDgsL7gsLLgsYEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4i4LC44LGN4LCV4LGN4LCw4LGA4LCo4LGN4oCM4LC34LC+4LCf4LGNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW4iIG1zZ2lkPSI3MTc1MzQzMTgxNzY3NDI5MDg4Ij4i4LC44LGN4LCV4LGN4LCw4LGA4LCo4LGN4oCM4LC34LC+4LCf4LGNIOCwteCwv+CwnOCwr+CwteCwguCwpOCwguCwl+CwviDgsKTgsYDgsK/gsKzgsKHgsL/gsILgsKbgsL8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+IuCwuOCxjeCwleCxjeCwsOCxgOCwqOCxjeKAjOCwt+CwvuCwn+CxjeKAjOCwqOCxgSDgsKTgsYDgsK/gsKHgsIIg4LC44LC+4LCn4LGN4LCv4LCq4LCh4LCy4LGH4LCm4LGBLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjMxMTM1NDk4Mzk3OTg1NjQ2NDUiPiLgsKzgsJfgsY0g4LCo4LC/4LC14LGH4LCm4LC/4LCVIOCwteCwv+CwteCwsOCwvuCwsuCxgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX25hbWUiIG1zZ2lkPSI1MDg5MTkxODMyMjcxODUyODI2Ij4i4LCa4LC/4LCo4LGN4LCoIOCwquCxh+CwsOCxgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX3RpdGxlIiBtc2dpZD0iMTI3MTY3ODUzMzcwNTU3MTc1Ij4iMS3gsKrgsILgsJXgsY3gsKTgsL8g4LC44LC+4LCw4LC+4LCC4LC24LCCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGVzY3JpcHRpb24iIG1zZ2lkPSI0MTE3MDg4OTk4NzMzNTQ2Nzg0Ij4i4LC44LCu4LCX4LGN4LCwIOCwteCwv+CwteCwsOCwoyI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy10aC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtdGgvc3RyaW5ncy54bWwKaW5kZXggMmQ5YTY1ZS4uYjczNDA5NSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy10aC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXRoL3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4i4Lij4Liy4Lii4LiH4Liy4LiZ4LiC4LmJ4Lit4Lia4LiB4Lie4Lij4LmI4Lit4LiHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+IuC5hOC4oeC5iOC4quC4suC4oeC4suC4o+C4luC4reC5iOC4suC4meC5hOC4n+C4peC5jOC4o+C4suC4ouC4h+C4suC4meC4guC5ieC4reC4muC4geC4nuC4o+C5iOC4reC4hyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+IuC5hOC4oeC5iOC4oeC4teC4iuC4t+C5iOC4rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiIgbXNnaWQ9IjIxNTgyMDQyMjg1MTA1NzYyMjciPiLguKPguLLguKLguKXguLDguYDguK3guLXguKLguJQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4i4Lig4Liy4Lie4Lir4LiZ4LmJ4Liy4LiI4LitIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW4iIG1zZ2lkPSI3MTc1MzQzMTgxNzY3NDI5MDg4Ij4i4LiI4Lix4Lia4Lig4Liy4Lie4Lir4LiZ4LmJ4Liy4LiI4Lit4Liq4Liz4LmA4Lij4LmH4LiI4LmB4Lil4LmJ4LinIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+IuC5hOC4oeC5iOC4quC4suC4oeC4suC4o+C4luC4iOC4seC4muC4oOC4suC4nuC4q+C4meC5ieC4suC4iOC4reC5hOC4lOC5iSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjMxMTM1NDk4Mzk3OTg1NjQ2NDUiPiLguKPguLLguKLguKXguLDguYDguK3guLXguKLguJTguKPguLLguKLguIfguLLguJnguILguYnguK3guJrguIHguJ7guKPguYjguK3guIciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19uYW1lIiBtc2dpZD0iNTA4OTE5MTgzMjI3MTg1MjgyNiI+IuC4iuC4t+C5iOC4reC4ouC5iOC4rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX3RpdGxlIiBtc2dpZD0iMTI3MTY3ODUzMzcwNTU3MTc1Ij4i4Liq4Lij4Li44LibIDEg4Lia4Lij4Lij4LiX4Lix4LiUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGVzY3JpcHRpb24iIG1zZ2lkPSI0MTE3MDg4OTk4NzMzNTQ2Nzg0Ij4i4LiE4Liz4Lit4LiY4Li04Lia4Liy4Lii4LmC4LiU4Lii4Lil4Liw4LmA4Lit4Li14Lii4LiUIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXRsL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy10bC9zdHJpbmdzLnhtbAppbmRleCA4ZmVhZDhmLi5iY2NlMWRiIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXRsL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtdGwvc3RyaW5ncy54bWwKQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiJNZ2EgdWxhdCBzYSBidWciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5yZWFkYWJsZV90ZXh0IiBtc2dpZD0iNTg2NTE3ODUxMDQ0NTM1NDg2Ij4iSGluZGkgbWFiYXNhIGFuZyBmaWxlIG5nIHBhZy11dWxhdCBuZyBidWciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5uYW1lZCIgbXNnaWQ9IjI4MDA1ODI0MDY4NDIwOTI3MDkiPiJ3YWxhbmcgcGFuZ2FsYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19hY3Rpb24iIG1zZ2lkPSIyMTU4MjA0MjI4NTEwNTc2MjI3Ij4iTWdhIERldGFseWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4iU2NyZWVuc2hvdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+Ik5ha3VuYW4gbmcgc2NyZWVuc2hvdC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4iSGluZGkgbWFrdW5hbiBuZyBzY3JlZW5zaG90LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjMxMTM1NDk4Mzk3OTg1NjQ2NDUiPiJNZ2EgZGV0YWx5ZSBuZyB1bGF0IG5nIGJ1ZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX25hbWUiIG1zZ2lkPSI1MDg5MTkxODMyMjcxODUyODI2Ij4iTWFpa2xpbmcgcGFuZ2FsYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb190aXRsZSIgbXNnaWQ9IjEyNzE2Nzg1MzM3MDU1NzE3NSI+IkJ1b2QgbmEgbWF5IDEgbGlueWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiJEZXRhbHlhZG9uZyBwYWdsYWxhcmF3YW4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtdHIvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXRyL3N0cmluZ3MueG1sCmluZGV4IGUxZDMwY2MuLmUxZmRmMTAgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtdHIvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy10ci9zdHJpbmdzLnhtbApAQCAtMjYsNCArMjYsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTMzMjQ4ODE0NDc0MDUyNzEwOSI+IkhhdGEgcmFwb3JsYXLEsSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bnJlYWRhYmxlX3RleHQiIG1zZ2lkPSI1ODY1MTc4NTEwNDQ1MzU0ODYiPiJIYXRhIHJhcG9ydSBkb3N5YXPEsSBva3VuYW1hZMSxIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VubmFtZWQiIG1zZ2lkPSIyODAwNTgyNDA2ODQyMDkyNzA5Ij4iYWRzxLF6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+IkF5csSxbnTEsWxhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2FjdGlvbiIgbXNnaWQ9Ijg2Nzc3ODE3MjE5NDA2MTQ5OTUiPiJFa3JhbiBnw7Zyw7xudMO8c8O8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW4iIG1zZ2lkPSI3MTc1MzQzMTgxNzY3NDI5MDg4Ij4iRWtyYW4gZ8O2csO8bnTDvHPDvCBiYcWfYXLEsXlsYSBhbMSxbmTEsS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4iRWtyYW4gZ8O2csO8bnTDvHPDvCBhbMSxbmFtYWTEsS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4iSGF0YSByYXBvcnUgYXlyxLFudMSxbGFyxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19uYW1lIiBtc2dpZD0iNTA4OTE5MTgzMjI3MTg1MjgyNiI+IkvEsXNhIGFkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiIxIHNhdMSxcmzEsWsgw7Z6ZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiJBeXLEsW50xLFsxLEgYcOnxLFrbGFtYSI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy11ay9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtdWsvc3RyaW5ncy54bWwKaW5kZXggZjEzOTZjYi4uZGQ0M2M0YyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy11ay9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXVrL3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4i0JfQstGW0YLQuCDQv9GA0L4g0L/QvtC80LjQu9C60LgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5yZWFkYWJsZV90ZXh0IiBtc2dpZD0iNTg2NTE3ODUxMDQ0NTM1NDg2Ij4i0J3QtSDQstC00LDQu9C+0YHRjyDQv9GA0L7Rh9C40YLQsNGC0Lgg0LfQstGW0YIg0L/RgNC+INC/0L7QvNC40LvQutC4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VubmFtZWQiIG1zZ2lkPSIyODAwNTgyNDA2ODQyMDkyNzA5Ij4i0LHQtdC3INC90LDQt9Cy0LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19hY3Rpb24iIG1zZ2lkPSIyMTU4MjA0MjI4NTEwNTc2MjI3Ij4i0JTQtdGC0LDQu9GWIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+ItCX0L3RltC80L7QuiDQtdC60YDQsNC90LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF90YWtlbiIgbXNnaWQ9IjcxNzUzNDMxODE3Njc0MjkwODgiPiLQl9C90ZbQvNC+0Log0LXQutGA0LDQvdCwINC30YDQvtCx0LvQtdC90L4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+ItCd0LUg0LLQtNCw0LvQvtGB0Y8g0LfRgNC+0LHQuNGC0Lgg0LfQvdGW0LzQvtC6INC10LrRgNCw0L3QsC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4i0JTQtdGC0LDQu9GWINC/0L7QstGW0LTQvtC80LvQtdC90L3RjyDQv9GA0L4g0L/QvtC80LjQu9C60YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19uYW1lIiBtc2dpZD0iNTA4OTE5MTgzMjI3MTg1MjgyNiI+ItCa0L7RgNC+0YLQutCwINC90LDQt9Cy0LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb190aXRsZSIgbXNnaWQ9IjEyNzE2Nzg1MzM3MDU1NzE3NSI+ItCf0ZbQtNGB0YPQvNC+0Log0L7QtNC90LjQvCDRgNGP0LTQutC+0LwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiLQlNC10YLQsNC70YzQvdC40Lkg0L7Qv9C40YEiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtdXItclBLL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy11ci1yUEsvc3RyaW5ncy54bWwKaW5kZXggNDEyZDIzMC4uYjk3YzhiNSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy11ci1yUEsvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy11ci1yUEsvc3RyaW5ncy54bWwKQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiLYqNqvINix2b7ZiNix2bnYsyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bnJlYWRhYmxlX3RleHQiIG1zZ2lkPSI1ODY1MTc4NTEwNDQ1MzU0ODYiPiLYqNqvINix2b7ZiNix2bkg2YHYp9im2YQg2b7akdq+24wg2YbbgduM2rog2KzYpyDYs9qp24wiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5uYW1lZCIgbXNnaWQ9IjI4MDA1ODI0MDY4NDIwOTI3MDkiPiLYqNi624zYsSDZhtin2YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19hY3Rpb24iIG1zZ2lkPSIyMTU4MjA0MjI4NTEwNTc2MjI3Ij4i2KrZgdi124zZhNin2KoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4i2KfYs9qp2LHbjNmGINi02KfZuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+Itin2LPaqdix24zZhiDYtNin2bkg2qnYp9mF24zYp9io24wg2LPbkiDZhNuSINmE24zYpyDar9uM2KfblCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZCIgbXNnaWQ9IjU4NTMwNDkxNDA4MDY4MzQ2MDEiPiLYs9qp2LHbjNmGINi02KfZuSDZhtuB24zauiDZhNuM2Kcg2KzYpyDYs9qp2KfblCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjMxMTM1NDk4Mzk3OTg1NjQ2NDUiPiLYqNqvINix2b7ZiNix2bkg2qnbjCDYqtmB2LXbjNmE2KfYqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX25hbWUiIG1zZ2lkPSI1MDg5MTkxODMyMjcxODUyODI2Ij4i2YXYrtiq2LXYsSDZhtin2YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb190aXRsZSIgbXNnaWQ9IjEyNzE2Nzg1MzM3MDU1NzE3NSI+IjEg2YTYp9im2YYg2qnYpyDYrtmE2KfYtduBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGVzY3JpcHRpb24iIG1zZ2lkPSI0MTE3MDg4OTk4NzMzNTQ2Nzg0Ij4i2KrZgdi124zZhNuMINmI2LbYp9it2KoiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtdXotclVaL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy11ei1yVVovc3RyaW5ncy54bWwKaW5kZXggY2E0NmQyYS4uMjc5Yzg3NiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy11ei1yVVovc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy11ei1yVVovc3RyaW5ncy54bWwKQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiJYYXRvbGlrbGFyIGhpc29ib3RpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+IlhhdG9saWtsYXIgaGlzb2JvdGkgZmF5bGluaSBv4oCYcWliIGJv4oCYbG1hZGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5uYW1lZCIgbXNnaWQ9IjI4MDA1ODI0MDY4NDIwOTI3MDkiPiJub21zaXoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19hY3Rpb24iIG1zZ2lkPSIyMTU4MjA0MjI4NTEwNTc2MjI3Ij4iVGFmc2lsb3RsYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4iU2tyaW5zaG90Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW4iIG1zZ2lkPSI3MTc1MzQzMTgxNzY3NDI5MDg4Ij4iU2tyaW5zaG90IHRheXlvci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4iU2tyaW5zaG90IG9saWIgYm/igJhsbWFkaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4iWGF0b2xpa2xhciBoaXNvYm90aSB0YWZzaWxvdGxhcmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19uYW1lIiBtc2dpZD0iNTA4OTE5MTgzMjI3MTg1MjgyNiI+IlFpc3FhIG5vbWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb190aXRsZSIgbXNnaWQ9IjEyNzE2Nzg1MzM3MDU1NzE3NSI+IlhhdG9saWtuaW5nIHFpc3FhY2hhIHRh4oCZcmlmaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDExNzA4ODk5ODczMzU0Njc4NCI+IkJhdGFmc2lsIHRh4oCZcmlmIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXZpL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy12aS9zdHJpbmdzLnhtbAppbmRleCBlYzQzNjRlLi40ZTFlYmM3IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXZpL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtdmkvc3RyaW5ncy54bWwKQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiJCw6FvIGPDoW8gbOG7l2kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5yZWFkYWJsZV90ZXh0IiBtc2dpZD0iNTg2NTE3ODUxMDQ0NTM1NDg2Ij4iS2jDtG5nIHRo4buDIMSR4buNYyB04buHcCBiw6FvIGPDoW8gbOG7l2kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5uYW1lZCIgbXNnaWQ9IjI4MDA1ODI0MDY4NDIwOTI3MDkiPiJjaMawYSDEkcaw4bujYyDEkeG6t3QgdMOqbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiIgbXNnaWQ9IjIxNTgyMDQyMjg1MTA1NzYyMjciPiJDaGkgdGnhur90Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+IuG6om5oIGNo4bulcCBtw6BuIGjDrG5oIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW4iIG1zZ2lkPSI3MTc1MzQzMTgxNzY3NDI5MDg4Ij4ixJDDoyBjaOG7pXAg4bqjbmggbcOgbiBow6xuaCB0aMOgbmggY8O0bmcuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+Iktow7RuZyB0aOG7gyBjaOG7pXAg4bqjbmggbcOgbiBow6xuaC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4iQ2hpIHRp4bq/dCBiw6FvIGPDoW8gbOG7l2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19uYW1lIiBtc2dpZD0iNTA4OTE5MTgzMjI3MTg1MjgyNiI+IlTDqm4gbmfhuq9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiJUw7NtIHThuq90IDEgZMOybmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiJNw7QgdOG6oyBjaGkgdGnhur90Ijwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXpoLXJDTi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtemgtckNOL3N0cmluZ3MueG1sCmluZGV4IDVhOGU1ZjcuLmI1YmE3YTkgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtemgtckNOL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtemgtckNOL3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4i6ZSZ6K+v5oql5ZGKIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+IuaXoOazleivu+WPlumUmeivr+aKpeWRiuaWh+S7tiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+IuacquWRveWQjSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiIgbXNnaWQ9IjIxNTgyMDQyMjg1MTA1NzYyMjciPiLor6bnu4bkv6Hmga8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4i5bGP5bmV5oiq5Zu+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW4iIG1zZ2lkPSI3MTc1MzQzMTgxNzY3NDI5MDg4Ij4i5bey5oiQ5Yqf5oiq5Zu+44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+IuaXoOazleaIquWbvuOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjMxMTM1NDk4Mzk3OTg1NjQ2NDUiPiLplJnor6/miqXlkYror6bnu4bkv6Hmga8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19uYW1lIiBtc2dpZD0iNTA4OTE5MTgzMjI3MTg1MjgyNiI+IueugOensCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX3RpdGxlIiBtc2dpZD0iMTI3MTY3ODUzMzcwNTU3MTc1Ij4i566A55+t5pGY6KaB77yIMSDooYzvvIkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiLor6bnu4bor7TmmI4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtemgtckhLL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy16aC1ySEsvc3RyaW5ncy54bWwKaW5kZXggN2U1N2NjNC4uODk2YTkyMCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy16aC1ySEsvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy16aC1ySEsvc3RyaW5ncy54bWwKQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiLpjK/oqqTloLHlkYoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5yZWFkYWJsZV90ZXh0IiBtc2dpZD0iNTg2NTE3ODUxMDQ0NTM1NDg2Ij4i54Sh5rOV6K6A5Y+W6Yyv6Kqk5aCx5ZGK5qqU5qGIIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VubmFtZWQiIG1zZ2lkPSIyODAwNTgyNDA2ODQyMDkyNzA5Ij4i5pyq5ZG95ZCNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+Iuips+e0sOizh+ioiiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2FjdGlvbiIgbXNnaWQ9Ijg2Nzc3ODE3MjE5NDA2MTQ5OTUiPiLonqLluZXmk7flj5bnlavpnaIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF90YWtlbiIgbXNnaWQ9IjcxNzUzNDMxODE3Njc0MjkwODgiPiLmiJDlip/mi43mlJ3onqLluZXmk7flj5bnlavpnaLjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4i54Sh5rOV5pO35Y+W6J6i5bmV55Wr6Z2i44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+IumMr+iqpOWgseWRiuips+aDhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX25hbWUiIG1zZ2lkPSI1MDg5MTkxODMyMjcxODUyODI2Ij4i57Ch56ixIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiLnsKHnn63mkZjopoEgKDEg6KGMKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDExNzA4ODk5ODczMzU0Njc4NCI+Iuips+e0sOiqquaYjiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy16aC1yVFcvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXpoLXJUVy9zdHJpbmdzLnhtbAppbmRleCBlNDk1ZDRhLi4yYmRmNTYxIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXpoLXJUVy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXpoLXJUVy9zdHJpbmdzLnhtbApAQCAtMjYsNCArMjYsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTMzMjQ4ODE0NDc0MDUyNzEwOSI+IumMr+iqpOWgseWRiiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bnJlYWRhYmxlX3RleHQiIG1zZ2lkPSI1ODY1MTc4NTEwNDQ1MzU0ODYiPiLnhKHms5XoroDlj5bpjK/oqqTloLHlkYrmqpTmoYgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5uYW1lZCIgbXNnaWQ9IjI4MDA1ODI0MDY4NDIwOTI3MDkiPiLmnKrlkb3lkI0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19hY3Rpb24iIG1zZ2lkPSIyMTU4MjA0MjI4NTEwNTc2MjI3Ij4i6Kmz57Sw6LOH5paZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+IuieouW5leaTt+WPlueVq+mdoiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+IuW3suaIkOWKn+aLjeaUneieouW5leaTt+WPlueVq+mdouOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZCIgbXNnaWQ9IjU4NTMwNDkxNDA4MDY4MzQ2MDEiPiLnhKHms5Xmi43mlJ3onqLluZXmk7flj5bnlavpnaLjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4i6Yyv6Kqk5aCx5ZGK6Kmz57Sw6LOH5paZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiLnsKHnqLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb190aXRsZSIgbXNnaWQ9IjEyNzE2Nzg1MzM3MDU1NzE3NSI+IuewoeefreaRmOimgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDExNzA4ODk5ODczMzU0Njc4NCI+Iuips+e0sOiqquaYjiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy16dS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtenUvc3RyaW5ncy54bWwKaW5kZXggOTFmMjk1MS4uNjUyMTA1YSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy16dS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXp1L3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4iSW1pYmlrbyB5ZXppcGhhemFtaXNvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+IklmYXllbGEgbG9tYmlrbyB3ZXNpcGhhemFtc28gYWxpa3dhemFuZ2EgdWt1ZnVuZHdhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VubmFtZWQiIG1zZ2lkPSIyODAwNTgyNDA2ODQyMDkyNzA5Ij4iYXd1bmlraXdlIGlnYW1hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+IkltaW5pbmluZ3dhbmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4iSXNpdGhvbWJlLXNrcmluaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+IklzaXRob21iZS1za3Jpbmkgc2l0aGF0aHdlIG5nZW1wdW1lbGVsby4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4iSXNpdGhvbWJlLXNrcmluaSBhc2lrd2F6YW5nYSB1a3V0aGF0aHdhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjMxMTM1NDk4Mzk3OTg1NjQ2NDUiPiJJbWluaW5pbmd3YW5lIHlvbWJpa28gd2VzaXBoYXphbWlzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX25hbWUiIG1zZ2lkPSI1MDg5MTkxODMyMjcxODUyODI2Ij4iSWdhbWEgZWxpZmlzaGFuZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX3RpdGxlIiBtc2dpZD0iMTI3MTY3ODUzMzcwNTU3MTc1Ij4iSXNpZmlueWV6byBzb211Z3FhIG9uZ3UtMSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDExNzA4ODk5ODczMzU0Njc4NCI+IkluY2F6ZWxvIGVuZW1pbmluaW5nd2FuZSI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwKaW5kZXggYTdmMmRmNS4uZGNkNWYwNCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCkBAIC00NSw2ICs0NSwxNCBAQAogICAgIDwhLS0gVGl0bGUgb2YgdGhlIG5vdGlmaWNhdGlvbiBhY3Rpb24gdGhhdCBvcGVucyB0aGUgZGlhbG9nIGZvciB0aGUgdXNlci1kZWZpbmVkIGJ1ZyByZXBvcnQgZGV0YWlscy4gLS0+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19hY3Rpb24iPkRldGFpbHM8L3N0cmluZz4KIAorICAgIDwhLS0gVGl0bGUgb2YgdGhlIG5vdGlmaWNhdGlvbiBhY3Rpb24gdGhhdCB0YWtlcyBhZGl0aW9uYWwgc2NyZWVuc2hvdHMuIC0tPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIj5TY3JlZW5zaG90PC9zdHJpbmc+CisKKyAgICA8IS0tIFRvYXN0IG1lc3NhZ2Ugc2VudCB3aGVuIHRoZSBhIHNjcmVlbnNob3QgZm9yIHRoZSBidWcgcmVwb3J0IHdhcyB0YWtlbiBzdWNjZXNzZnVsbHkuIC0tPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW4iPlNjcmVlbnNob3QgdGFrZW4gc3VjY2VzZnVsbHkuPC9zdHJpbmc+CisgICAgPCEtLSBUb2FzdCBtZXNzYWdlIHNlbnQgd2hlbiB0aGUgYSBzY3JlZW5zaG90IGZvciB0aGUgYnVnIHJlcG9ydCB3YXMgbm90IHRha2VuIGR1ZSB0byBhbiBlcnJvci4gLS0+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiPlNjcmVlbnNob3QgY291bGQgbm90IGJlIHRha2VuLjwvc3RyaW5nPgorCiAgICAgPCEtLSAgVGl0bGUgb2YgdGhlIGRpYWxvZyBhc2tpbmcgZm9yIHVzZXItZGVmaW5lZCBidWcgcmVwb3J0IGRldGFpbHMgbGlrZSBuYW1lLCB0aXRsZSwgYW5kIGRlc2NyaXB0aW9uLiAtLT4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2RpYWxvZ190aXRsZSI+QnVnIHJlcG9ydCBkZXRhaWxzPC9zdHJpbmc+CiAKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3NyYy9jb20vYW5kcm9pZC9zaGVsbC9CdWdyZXBvcnRQcm9ncmVzc1NlcnZpY2UuamF2YSBiL3BhY2thZ2VzL1NoZWxsL3NyYy9jb20vYW5kcm9pZC9zaGVsbC9CdWdyZXBvcnRQcm9ncmVzc1NlcnZpY2UuamF2YQppbmRleCA4MmVlNzEwLi5mN2EyZDc1IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TaGVsbC9zcmMvY29tL2FuZHJvaWQvc2hlbGwvQnVncmVwb3J0UHJvZ3Jlc3NTZXJ2aWNlLmphdmEKKysrIGIvcGFja2FnZXMvU2hlbGwvc3JjL2NvbS9hbmRyb2lkL3NoZWxsL0J1Z3JlcG9ydFByb2dyZXNzU2VydmljZS5qYXZhCkBAIC0xNiw2ICsxNiw3IEBACiAKIHBhY2thZ2UgY29tLmFuZHJvaWQuc2hlbGw7CiAKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5vcy5Qcm9jZXNzLlRIUkVBRF9QUklPUklUWV9CQUNLR1JPVU5EOwogaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zaGVsbC5CdWdyZXBvcnRQcmVmcy5TVEFURV9TSE9XOwogaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zaGVsbC5CdWdyZXBvcnRQcmVmcy5nZXRXYXJuaW5nU3RhdGU7CiAKQEAgLTI5LDYgKzMwLDcgQEAKIGltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwogaW1wb3J0IGphdmEudGV4dC5OdW1iZXJGb3JtYXQ7CiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuemlwLlppcEVudHJ5OwogaW1wb3J0IGphdmEudXRpbC56aXAuWmlwT3V0cHV0U3RyZWFtOwogCkBAIC00OCw2ICs1MCw3IEBACiBpbXBvcnQgYW5kcm9pZC5hcHAuU2VydmljZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ2xpcERhdGE7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHRXcmFwcGVyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5EaWFsb2dJbnRlcmZhY2U7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLkNvbmZpZ3VyYXRpb247CkBAIC01OSw4ICs2Miw4IEBACiBpbXBvcnQgYW5kcm9pZC5vcy5Mb29wZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5NZXNzYWdlOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsYWJsZTsKLWltcG9ydCBhbmRyb2lkLm9zLlByb2Nlc3M7CiBpbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1Qcm9wZXJ0aWVzOworaW1wb3J0IGFuZHJvaWQub3MuVmlicmF0b3I7CiBpbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnY0LmNvbnRlbnQuRmlsZVByb3ZpZGVyOwogaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7CiBpbXBvcnQgYW5kcm9pZC50ZXh0LmZvcm1hdC5EYXRlVXRpbHM7CkBAIC0xMTUsNiArMTE4LDggQEAKICAgICBzdGF0aWMgZmluYWwgU3RyaW5nIElOVEVOVF9CVUdSRVBPUlRfU0hBUkUgPSAiYW5kcm9pZC5pbnRlbnQuYWN0aW9uLkJVR1JFUE9SVF9TSEFSRSI7CiAgICAgc3RhdGljIGZpbmFsIFN0cmluZyBJTlRFTlRfQlVHUkVQT1JUX0lORk9fTEFVTkNIID0KICAgICAgICAgICAgICJhbmRyb2lkLmludGVudC5hY3Rpb24uQlVHUkVQT1JUX0lORk9fTEFVTkNIIjsKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIElOVEVOVF9CVUdSRVBPUlRfU0NSRUVOU0hPVCA9CisgICAgICAgICAgICAiYW5kcm9pZC5pbnRlbnQuYWN0aW9uLkJVR1JFUE9SVF9TQ1JFRU5TSE9UIjsKIAogICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfQlVHUkVQT1JUID0gImFuZHJvaWQuaW50ZW50LmV4dHJhLkJVR1JFUE9SVCI7CiAgICAgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9TQ1JFRU5TSE9UID0gImFuZHJvaWQuaW50ZW50LmV4dHJhLlNDUkVFTlNIT1QiOwpAQCAtMTI3LDYgKzEzMiwxNiBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1TR19TRVJWSUNFX0NPTU1BTkQgPSAxOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNU0dfUE9MTCA9IDI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1TR19ERUxBWUVEX1NDUkVFTlNIT1QgPSAzOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNU0dfU0NSRUVOU0hPVF9SRVFVRVNUID0gNDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTVNHX1NDUkVFTlNIT1RfUkVTUE9OU0UgPSA1OworCisgICAgLyoqCisgICAgICogRGVsYXkgYmVmb3JlIGEgc2NyZWVuc2hvdCBpcyB0YWtlbi4KKyAgICAgKiA8cD4KKyAgICAgKiBTaG91bGQgYmUgYXQgbGVhc3QgMyBzZWNvbmRzLCBvdGhlcndpc2UgaXRzIHRvYXN0IG1pZ2h0IHNob3cgdXAgaW4gdGhlIHNjcmVlbnNob3QuCisgICAgICovCisgICAgc3RhdGljIGZpbmFsIGludCBTQ1JFRU5TSE9UX0RFTEFZX1NFQ09ORFMgPSAzOwogCiAgICAgLyoqIFBvbGxpbmcgZnJlcXVlbmN5LCBpbiBtaWxsaXNlY29uZHMuICovCiAgICAgc3RhdGljIGZpbmFsIGxvbmcgUE9MTElOR19GUkVRVUVOQ1kgPSAyICogRGF0ZVV0aWxzLlNFQ09ORF9JTl9NSUxMSVM7CkBAIC0xNDEsMzUgKzE1Niw1OSBAQAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FX1NVRkZJWCA9ICIubmFtZSI7CiAKICAgICAvKiogU3lzdGVtIHByb3BlcnR5IChhbmQgdmFsdWUpIHVzZWQgdG8gc3RvcCBkdW1wc3RhdGUuICovCisgICAgLy8gVE9ETzogc2hvdWxkIGNhbGwgQWN0aXZlTWFuYWdlciBBUEkgaW5zdGVhZAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDVExfU1RPUCA9ICJjdGwuc3RvcCI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVR1JFUE9SVF9TRVJWSUNFID0gImJ1Z3JlcG9ydHBsdXMiOwogCisgICAgLyoqCisgICAgICogRGlyZWN0b3J5IG9uIFNoZWxsJ3MgZGF0YSBzdG9yYWdlIHdoZXJlIHNjcmVlbnNob3RzIHdpbGwgYmUgc3RvcmVkLgorICAgICAqIDxwPgorICAgICAqIE11c3QgYmUgYSBwYXRoIHN1cHBvcnRlZCBieSBpdHMgRmlsZVByb3ZpZGVyLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTQ1JFRU5TSE9UX0RJUiA9ICJidWdyZXBvcnRzIjsKKwogICAgIC8qKiBNYW5hZ2VkIGR1bXBzdGF0ZSBwcm9jZXNzZXMgKGtleWVkIGJ5IHBpZCkgKi8KICAgICBwcml2YXRlIGZpbmFsIFNwYXJzZUFycmF5PEJ1Z3JlcG9ydEluZm8+IG1Qcm9jZXNzZXMgPSBuZXcgU3BhcnNlQXJyYXk8PigpOwogCi0gICAgcHJpdmF0ZSBMb29wZXIgbVNlcnZpY2VMb29wZXI7Ci0gICAgcHJpdmF0ZSBTZXJ2aWNlSGFuZGxlciBtU2VydmljZUhhbmRsZXI7CisgICAgcHJpdmF0ZSBDb250ZXh0IG1Db250ZXh0OworICAgIHByaXZhdGUgU2VydmljZUhhbmRsZXIgbU1haW5IYW5kbGVyOworICAgIHByaXZhdGUgU2NyZWVuc2hvdEhhbmRsZXIgbVNjcmVlbnNob3RIYW5kbGVyOwogCiAgICAgcHJpdmF0ZSBmaW5hbCBCdWdyZXBvcnRJbmZvRGlhbG9nIG1JbmZvRGlhbG9nID0gbmV3IEJ1Z3JlcG9ydEluZm9EaWFsb2coKTsKIAorICAgIHByaXZhdGUgRmlsZSBtU2NyZWVuc2hvdHNEaXI7CisKKyAgICAvKioKKyAgICAgKiBGbGFnIGluZGljYXRpbmcgd2hldGhlciBhIHNjcmVlbnNob3QgaXMgYmVpbmcgdGFrZW4uCisgICAgICogPHA+CisgICAgICogVGhpcyBpcyB0aGUgb25seSBzdGF0ZSB0aGF0IGlzIHNoYXJlZCBiZXR3ZWVuIHRoZSAyIGhhbmRsZXJzIGFuZCBoZW5jZSBtdXN0IGhhdmUgc3luY2hyb25pemVkCisgICAgICogYWNjZXNzLgorICAgICAqLworICAgIHByaXZhdGUgYm9vbGVhbiBtVGFraW5nU2NyZWVuc2hvdDsKKwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIG9uQ3JlYXRlKCkgewotICAgICAgICBIYW5kbGVyVGhyZWFkIHRocmVhZCA9IG5ldyBIYW5kbGVyVGhyZWFkKCJCdWdyZXBvcnRQcm9ncmVzc1NlcnZpY2VUaHJlYWQiLAotICAgICAgICAgICAgICAgIFByb2Nlc3MuVEhSRUFEX1BSSU9SSVRZX0JBQ0tHUk9VTkQpOwotICAgICAgICB0aHJlYWQuc3RhcnQoKTsKKyAgICAgICAgbUNvbnRleHQgPSBnZXRBcHBsaWNhdGlvbkNvbnRleHQoKTsKKyAgICAgICAgbU1haW5IYW5kbGVyID0gbmV3IFNlcnZpY2VIYW5kbGVyKCJCdWdyZXBvcnRQcm9ncmVzc1NlcnZpY2VNYWluVGhyZWFkIik7CisgICAgICAgIG1TY3JlZW5zaG90SGFuZGxlciA9IG5ldyBTY3JlZW5zaG90SGFuZGxlcigiQnVncmVwb3J0UHJvZ3Jlc3NTZXJ2aWNlU2NyZWVuc2hvdFRocmVhZCIpOwogCi0gICAgICAgIG1TZXJ2aWNlTG9vcGVyID0gdGhyZWFkLmdldExvb3BlcigpOwotICAgICAgICBtU2VydmljZUhhbmRsZXIgPSBuZXcgU2VydmljZUhhbmRsZXIobVNlcnZpY2VMb29wZXIpOworICAgICAgICBtU2NyZWVuc2hvdHNEaXIgPSBuZXcgRmlsZShuZXcgQ29udGV4dFdyYXBwZXIobUNvbnRleHQpLmdldEZpbGVzRGlyKCksIFNDUkVFTlNIT1RfRElSKTsKKyAgICAgICAgaWYgKCFtU2NyZWVuc2hvdHNEaXIuZXhpc3RzKCkpIHsKKyAgICAgICAgICAgIExvZy5pKFRBRywgIkNyZWF0aW5nIGRpcmVjdG9yeSAiICsgbVNjcmVlbnNob3RzRGlyICsgIiB0byBzdG9yZSB0ZW1wb3Jhcnkgc2NyZWVuc2hvdHMiKTsKKyAgICAgICAgICAgIGlmICghbVNjcmVlbnNob3RzRGlyLm1rZGlyKCkpIHsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJDb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSAiICsgbVNjcmVlbnNob3RzRGlyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBpbnQgb25TdGFydENvbW1hbmQoSW50ZW50IGludGVudCwgaW50IGZsYWdzLCBpbnQgc3RhcnRJZCkgewogICAgICAgICBpZiAoaW50ZW50ICE9IG51bGwpIHsKICAgICAgICAgICAgIC8vIEhhbmRsZSBpdCBpbiBhIHNlcGFyYXRlIHRocmVhZC4KLSAgICAgICAgICAgIE1lc3NhZ2UgbXNnID0gbVNlcnZpY2VIYW5kbGVyLm9idGFpbk1lc3NhZ2UoKTsKKyAgICAgICAgICAgIGZpbmFsIE1lc3NhZ2UgbXNnID0gbU1haW5IYW5kbGVyLm9idGFpbk1lc3NhZ2UoKTsKICAgICAgICAgICAgIG1zZy53aGF0ID0gTVNHX1NFUlZJQ0VfQ09NTUFORDsKICAgICAgICAgICAgIG1zZy5vYmogPSBpbnRlbnQ7Ci0gICAgICAgICAgICBtU2VydmljZUhhbmRsZXIuc2VuZE1lc3NhZ2UobXNnKTsKKyAgICAgICAgICAgIG1NYWluSGFuZGxlci5zZW5kTWVzc2FnZShtc2cpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gSWYgc2VydmljZSBpcyBraWxsZWQgaXQgY2Fubm90IGJlIHJlY3JlYXRlZCBiZWNhdXNlIGl0IHdvdWxkIG5vdCBrbm93IHdoaWNoCkBAIC0xODQsMjkgKzIyMywzMSBAQAogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgb25EZXN0cm95KCkgewotICAgICAgICBtU2VydmljZUxvb3Blci5xdWl0KCk7CisgICAgICAgIG1NYWluSGFuZGxlci5nZXRMb29wZXIoKS5xdWl0KCk7CisgICAgICAgIG1TY3JlZW5zaG90SGFuZGxlci5nZXRMb29wZXIoKS5xdWl0KCk7CiAgICAgICAgIHN1cGVyLm9uRGVzdHJveSgpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQogICAgIHByb3RlY3RlZCB2b2lkIGR1bXAoRmlsZURlc2NyaXB0b3IgZmQsIFByaW50V3JpdGVyIHdyaXRlciwgU3RyaW5nW10gYXJncykgewotICAgICAgICBzeW5jaHJvbml6ZWQgKG1Qcm9jZXNzZXMpIHsKLSAgICAgICAgICAgIGZpbmFsIGludCBzaXplID0gbVByb2Nlc3Nlcy5zaXplKCk7Ci0gICAgICAgICAgICBpZiAoc2l6ZSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgd3JpdGVyLnByaW50ZigiTm8gbW9uaXRvcmVkIHByb2Nlc3NlcyIpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHdyaXRlci5wcmludGYoIk1vbml0b3JlZCBkdW1wc3RhdGUgcHJvY2Vzc2VzXG4iKTsKLSAgICAgICAgICAgIHdyaXRlci5wcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICAgIHdyaXRlci5wcmludGYoIiVzXG4iLCBtUHJvY2Vzc2VzLnZhbHVlQXQoaSkpOwotICAgICAgICAgICAgfQorICAgICAgICBmaW5hbCBpbnQgc2l6ZSA9IG1Qcm9jZXNzZXMuc2l6ZSgpOworICAgICAgICBpZiAoc2l6ZSA9PSAwKSB7CisgICAgICAgICAgICB3cml0ZXIucHJpbnRmKCJObyBtb25pdG9yZWQgcHJvY2Vzc2VzIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgd3JpdGVyLnByaW50ZigiTW9uaXRvcmVkIGR1bXBzdGF0ZSBwcm9jZXNzZXNcbiIpOworICAgICAgICB3cml0ZXIucHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgICAgICB3cml0ZXIucHJpbnRmKCIlc1xuIiwgbVByb2Nlc3Nlcy52YWx1ZUF0KGkpKTsKICAgICAgICAgfQogICAgIH0KIAorICAgIC8qKgorICAgICAqIE1haW4gdGhyZWFkIHVzZWQgdG8gaGFuZGxlIGFsbCByZXF1ZXN0cyBidXQgdGFraW5nIHNjcmVlbnNob3RzLgorICAgICAqLwogICAgIHByaXZhdGUgZmluYWwgY2xhc3MgU2VydmljZUhhbmRsZXIgZXh0ZW5kcyBIYW5kbGVyIHsKLSAgICAgICAgcHVibGljIFNlcnZpY2VIYW5kbGVyKExvb3BlciBsb29wZXIpIHsKLSAgICAgICAgICAgIHN1cGVyKGxvb3Blcik7CisgICAgICAgIHB1YmxpYyBTZXJ2aWNlSGFuZGxlcihTdHJpbmcgbmFtZSkgeworICAgICAgICAgICAgc3VwZXIobmV3TG9vcGVyKG5hbWUpKTsKICAgICAgICAgfQogCiAgICAgICAgIEBPdmVycmlkZQpAQCAtMjE2LDYgKzI1NywxNiBAQAogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgaWYgKG1zZy53aGF0ID09IE1TR19ERUxBWUVEX1NDUkVFTlNIT1QpIHsKKyAgICAgICAgICAgICAgICB0YWtlU2NyZWVuc2hvdChtc2cuYXJnMSwgbXNnLmFyZzIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG1zZy53aGF0ID09IE1TR19TQ1JFRU5TSE9UX1JFU1BPTlNFKSB7CisgICAgICAgICAgICAgICAgaGFuZGxlU2NyZWVuc2hvdFJlc3BvbnNlKG1zZyk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBpZiAobXNnLndoYXQgIT0gTVNHX1NFUlZJQ0VfQ09NTUFORCkgewogICAgICAgICAgICAgICAgIC8vIFNhbml0eSBjaGVjay4KICAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJJbnZhbGlkIG1lc3NhZ2UgdHlwZTogIiArIG1zZy53aGF0KTsKQEAgLTI2Miw2ICszMTMsOSBAQAogICAgICAgICAgICAgICAgIGNhc2UgSU5URU5UX0JVR1JFUE9SVF9JTkZPX0xBVU5DSDoKICAgICAgICAgICAgICAgICAgICAgbGF1bmNoQnVncmVwb3J0SW5mb0RpYWxvZyhwaWQpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIElOVEVOVF9CVUdSRVBPUlRfU0NSRUVOU0hPVDoKKyAgICAgICAgICAgICAgICAgICAgdGFrZVNjcmVlbnNob3QocGlkLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBJTlRFTlRfQlVHUkVQT1JUX1NIQVJFOgogICAgICAgICAgICAgICAgICAgICBzaGFyZUJ1Z3JlcG9ydChwaWQpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTI4Niw2ICszNDAsMzIgQEAKICAgICB9CiAKICAgICAvKioKKyAgICAgKiBTZXBhcmF0ZSB0aHJlYWQgdXNlZCBvbmx5IHRvIHRha2Ugc2NyZWVuc2hvdHMgc28gaXQgZG9lc24ndCBibG9jayB0aGUgbWFpbiB0aHJlYWQuCisgICAgICovCisgICAgcHJpdmF0ZSBmaW5hbCBjbGFzcyBTY3JlZW5zaG90SGFuZGxlciBleHRlbmRzIEhhbmRsZXIgeworICAgICAgICBwdWJsaWMgU2NyZWVuc2hvdEhhbmRsZXIoU3RyaW5nIG5hbWUpIHsKKyAgICAgICAgICAgIHN1cGVyKG5ld0xvb3BlcihuYW1lKSk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgaGFuZGxlTWVzc2FnZShNZXNzYWdlIG1zZykgeworICAgICAgICAgICAgaWYgKG1zZy53aGF0ICE9IE1TR19TQ1JFRU5TSE9UX1JFUVVFU1QpIHsKKyAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJJbnZhbGlkIG1lc3NhZ2UgdHlwZTogIiArIG1zZy53aGF0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBoYW5kbGVTY3JlZW5zaG90UmVxdWVzdChtc2cpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBCdWdyZXBvcnRJbmZvIGdldEluZm8oaW50IHBpZCkgeworICAgICAgICBmaW5hbCBCdWdyZXBvcnRJbmZvIGluZm8gPSBtUHJvY2Vzc2VzLmdldChwaWQpOworICAgICAgICBpZiAoaW5mbyA9PSBudWxsKSB7CisgICAgICAgICAgICBMb2cudyhUQUcsICJOb3QgbW9uaXRvcmluZyBwcm9jZXNzIHdpdGggUElEICIgKyBwaWQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBpbmZvOworICAgIH0KKworICAgIC8qKgogICAgICAqIENyZWF0ZXMgdGhlIHtAbGluayBCdWdyZXBvcnRJbmZvfSBmb3IgYSBwcm9jZXNzIGFuZCBpc3N1ZSBhIHN5c3RlbSBub3RpZmljYXRpb24gdG8KICAgICAgKiBpbmRpY2F0ZSBpdHMgcHJvZ3Jlc3MuCiAgICAgICoKQEAgLTMwNCwxNCArMzg0LDE0IEBACiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBmaW5hbCBCdWdyZXBvcnRJbmZvIGluZm8gPSBuZXcgQnVncmVwb3J0SW5mbyhnZXRBcHBsaWNhdGlvbkNvbnRleHQoKSwgcGlkLCBuYW1lLCBtYXgpOwotICAgICAgICBzeW5jaHJvbml6ZWQgKG1Qcm9jZXNzZXMpIHsKLSAgICAgICAgICAgIGlmIChtUHJvY2Vzc2VzLmluZGV4T2ZLZXkocGlkKSA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiUElEICIgKyBwaWQgKyAiIGFscmVhZHkgd2F0Y2hlZCIpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtUHJvY2Vzc2VzLnB1dChpbmZvLnBpZCwgaW5mbyk7Ci0gICAgICAgICAgICB9CisgICAgICAgIGZpbmFsIEJ1Z3JlcG9ydEluZm8gaW5mbyA9IG5ldyBCdWdyZXBvcnRJbmZvKG1Db250ZXh0LCBwaWQsIG5hbWUsIG1heCk7CisgICAgICAgIGlmIChtUHJvY2Vzc2VzLmluZGV4T2ZLZXkocGlkKSA+PSAwKSB7CisgICAgICAgICAgICBMb2cudyhUQUcsICJQSUQgIiArIHBpZCArICIgYWxyZWFkeSB3YXRjaGVkIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtUHJvY2Vzc2VzLnB1dChpbmZvLnBpZCwgaW5mbyk7CiAgICAgICAgIH0KKyAgICAgICAgLy8gVGFrZSBpbml0aWFsIHNjcmVlbnNob3QuCisgICAgICAgIHRha2VTY3JlZW5zaG90KHBpZCwgZmFsc2UpOwogICAgICAgICB1cGRhdGVQcm9ncmVzcyhpbmZvKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMzI1LDI2ICs0MDUsMzUgQEAKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGZpbmFsIENvbnRleHQgY29udGV4dCA9IGdldEFwcGxpY2F0aW9uQ29udGV4dCgpOwogICAgICAgICBmaW5hbCBOdW1iZXJGb3JtYXQgbmYgPSBOdW1iZXJGb3JtYXQuZ2V0UGVyY2VudEluc3RhbmNlKCk7CiAgICAgICAgIG5mLnNldE1pbmltdW1GcmFjdGlvbkRpZ2l0cygyKTsKICAgICAgICAgbmYuc2V0TWF4aW11bUZyYWN0aW9uRGlnaXRzKDIpOwogICAgICAgICBmaW5hbCBTdHJpbmcgcGVyY2VudFRleHQgPSBuZi5mb3JtYXQoKGRvdWJsZSkgaW5mby5wcm9ncmVzcyAvIGluZm8ubWF4KTsKLSAgICAgICAgZmluYWwgQWN0aW9uIGNhbmNlbEFjdGlvbiA9IG5ldyBBY3Rpb24uQnVpbGRlcihudWxsLCBjb250ZXh0LmdldFN0cmluZygKLSAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0cmluZy5jYW5jZWwpLCBuZXdDYW5jZWxJbnRlbnQoY29udGV4dCwgaW5mbykpLmJ1aWxkKCk7Ci0gICAgICAgIGZpbmFsIEludGVudCBpbmZvSW50ZW50ID0gbmV3IEludGVudChjb250ZXh0LCBCdWdyZXBvcnRQcm9ncmVzc1NlcnZpY2UuY2xhc3MpOworICAgICAgICBmaW5hbCBBY3Rpb24gY2FuY2VsQWN0aW9uID0gbmV3IEFjdGlvbi5CdWlsZGVyKG51bGwsIG1Db250ZXh0LmdldFN0cmluZygKKyAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0cmluZy5jYW5jZWwpLCBuZXdDYW5jZWxJbnRlbnQobUNvbnRleHQsIGluZm8pKS5idWlsZCgpOworICAgICAgICBmaW5hbCBJbnRlbnQgaW5mb0ludGVudCA9IG5ldyBJbnRlbnQobUNvbnRleHQsIEJ1Z3JlcG9ydFByb2dyZXNzU2VydmljZS5jbGFzcyk7CiAgICAgICAgIGluZm9JbnRlbnQuc2V0QWN0aW9uKElOVEVOVF9CVUdSRVBPUlRfSU5GT19MQVVOQ0gpOwogICAgICAgICBpbmZvSW50ZW50LnB1dEV4dHJhKEVYVFJBX1BJRCwgaW5mby5waWQpOwogICAgICAgICBmaW5hbCBBY3Rpb24gaW5mb0FjdGlvbiA9IG5ldyBBY3Rpb24uQnVpbGRlcihudWxsLAotICAgICAgICAgICAgICAgIGNvbnRleHQuZ2V0U3RyaW5nKFIuc3RyaW5nLmJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiksCi0gICAgICAgICAgICAgICAgUGVuZGluZ0ludGVudC5nZXRTZXJ2aWNlKGNvbnRleHQsIGluZm8ucGlkLCBpbmZvSW50ZW50LAorICAgICAgICAgICAgICAgIG1Db250ZXh0LmdldFN0cmluZyhSLnN0cmluZy5idWdyZXBvcnRfaW5mb19hY3Rpb24pLAorICAgICAgICAgICAgICAgIFBlbmRpbmdJbnRlbnQuZ2V0U2VydmljZShtQ29udGV4dCwgaW5mby5waWQsIGluZm9JbnRlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICBQZW5kaW5nSW50ZW50LkZMQUdfVVBEQVRFX0NVUlJFTlQpKS5idWlsZCgpOworICAgICAgICBmaW5hbCBJbnRlbnQgc2NyZWVuc2hvdEludGVudCA9IG5ldyBJbnRlbnQobUNvbnRleHQsIEJ1Z3JlcG9ydFByb2dyZXNzU2VydmljZS5jbGFzcyk7CisgICAgICAgIHNjcmVlbnNob3RJbnRlbnQuc2V0QWN0aW9uKElOVEVOVF9CVUdSRVBPUlRfU0NSRUVOU0hPVCk7CisgICAgICAgIHNjcmVlbnNob3RJbnRlbnQucHV0RXh0cmEoRVhUUkFfUElELCBpbmZvLnBpZCk7CisgICAgICAgIFBlbmRpbmdJbnRlbnQgc2NyZWVuc2hvdFBlbmRpbmdJbnRlbnQgPSBtVGFraW5nU2NyZWVuc2hvdCA/IG51bGwgOiBQZW5kaW5nSW50ZW50CisgICAgICAgICAgICAgICAgLmdldFNlcnZpY2UobUNvbnRleHQsIGluZm8ucGlkLCBzY3JlZW5zaG90SW50ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgUGVuZGluZ0ludGVudC5GTEFHX1VQREFURV9DVVJSRU5UKTsKKyAgICAgICAgZmluYWwgQWN0aW9uIHNjcmVlbnNob3RBY3Rpb24gPSBuZXcgQWN0aW9uLkJ1aWxkZXIobnVsbCwKKyAgICAgICAgICAgICAgICBtQ29udGV4dC5nZXRTdHJpbmcoUi5zdHJpbmcuYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uKSwKKyAgICAgICAgICAgICAgICBzY3JlZW5zaG90UGVuZGluZ0ludGVudCkuYnVpbGQoKTsKIAotICAgICAgICBmaW5hbCBTdHJpbmcgdGl0bGUgPSBjb250ZXh0LmdldFN0cmluZyhSLnN0cmluZy5idWdyZXBvcnRfaW5fcHJvZ3Jlc3NfdGl0bGUpOworICAgICAgICBmaW5hbCBTdHJpbmcgdGl0bGUgPSBtQ29udGV4dC5nZXRTdHJpbmcoUi5zdHJpbmcuYnVncmVwb3J0X2luX3Byb2dyZXNzX3RpdGxlKTsKKwogICAgICAgICBmaW5hbCBTdHJpbmcgbmFtZSA9Ci0gICAgICAgICAgICAgICAgaW5mby5uYW1lICE9IG51bGwgPyBpbmZvLm5hbWUgOiBjb250ZXh0LmdldFN0cmluZyhSLnN0cmluZy5idWdyZXBvcnRfdW5uYW1lZCk7CisgICAgICAgICAgICAgICAgaW5mby5uYW1lICE9IG51bGwgPyBpbmZvLm5hbWUgOiBtQ29udGV4dC5nZXRTdHJpbmcoUi5zdHJpbmcuYnVncmVwb3J0X3VubmFtZWQpOwogCi0gICAgICAgIGZpbmFsIE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24gPSBuZXcgTm90aWZpY2F0aW9uLkJ1aWxkZXIoY29udGV4dCkKKyAgICAgICAgZmluYWwgTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbiA9IG5ldyBOb3RpZmljYXRpb24uQnVpbGRlcihtQ29udGV4dCkKICAgICAgICAgICAgICAgICAuc2V0U21hbGxJY29uKGNvbS5hbmRyb2lkLmludGVybmFsLlIuZHJhd2FibGUuc3RhdF9zeXNfYWRiKQogICAgICAgICAgICAgICAgIC5zZXRDb250ZW50VGl0bGUodGl0bGUpCiAgICAgICAgICAgICAgICAgLnNldFRpY2tlcih0aXRsZSkKQEAgLTM1MywxMyArNDQyLDE5IEBACiAgICAgICAgICAgICAgICAgLnNldFByb2dyZXNzKGluZm8ubWF4LCBpbmZvLnByb2dyZXNzLCBmYWxzZSkKICAgICAgICAgICAgICAgICAuc2V0T25nb2luZyh0cnVlKQogICAgICAgICAgICAgICAgIC5zZXRMb2NhbE9ubHkodHJ1ZSkKLSAgICAgICAgICAgICAgICAuc2V0Q29sb3IoY29udGV4dC5nZXRDb2xvcigKKyAgICAgICAgICAgICAgICAuc2V0Q29sb3IobUNvbnRleHQuZ2V0Q29sb3IoCiAgICAgICAgICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmNvbG9yLnN5c3RlbV9ub3RpZmljYXRpb25fYWNjZW50X2NvbG9yKSkKICAgICAgICAgICAgICAgICAuYWRkQWN0aW9uKGluZm9BY3Rpb24pCisgICAgICAgICAgICAgICAgLmFkZEFjdGlvbihzY3JlZW5zaG90QWN0aW9uKQogICAgICAgICAgICAgICAgIC5hZGRBY3Rpb24oY2FuY2VsQWN0aW9uKQogICAgICAgICAgICAgICAgIC5idWlsZCgpOwogCi0gICAgICAgIE5vdGlmaWNhdGlvbk1hbmFnZXIuZnJvbShjb250ZXh0KS5ub3RpZnkoVEFHLCBpbmZvLnBpZCwgbm90aWZpY2F0aW9uKTsKKyAgICAgICAgaWYgKGluZm8uZmluaXNoZWQpIHsKKyAgICAgICAgICAgIExvZy53KFRBRywgIk5vdCBzZW5kaW5nIHByb2dyZXNzIG5vdGlmaWNhdGlvbiBiZWNhdXNlIGJ1Z3JlcG9ydCBoYXMgZmluaXNoZWQgYWxyZWFkeSAoIgorICAgICAgICAgICAgICAgICAgICArIGluZm8gKyAiKSIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIE5vdGlmaWNhdGlvbk1hbmFnZXIuZnJvbShtQ29udGV4dCkubm90aWZ5KFRBRywgaW5mby5waWQsIG5vdGlmaWNhdGlvbik7CiAgICAgfQogCiAgICAgLyoqCkBAIC0zNzcsMTYgKzQ3MiwxNCBAQAogICAgICAqIEZpbmFsaXplcyB0aGUgcHJvZ3Jlc3Mgb24gYSBnaXZlbiBidWdyZXBvcnQgYW5kIGNhbmNlbCBpdHMgbm90aWZpY2F0aW9uLgogICAgICAqLwogICAgIHByaXZhdGUgdm9pZCBzdG9wUHJvZ3Jlc3MoaW50IHBpZCkgewotICAgICAgICBzeW5jaHJvbml6ZWQgKG1Qcm9jZXNzZXMpIHsKLSAgICAgICAgICAgIGlmIChtUHJvY2Vzc2VzLmluZGV4T2ZLZXkocGlkKSA8IDApIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJQSUQgbm90IHdhdGNoZWQ6ICIgKyBwaWQpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtUHJvY2Vzc2VzLnJlbW92ZShwaWQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc3RvcFNlbGZXaGVuRG9uZSgpOworICAgICAgICBpZiAobVByb2Nlc3Nlcy5pbmRleE9mS2V5KHBpZCkgPCAwKSB7CisgICAgICAgICAgICBMb2cudyhUQUcsICJQSUQgbm90IHdhdGNoZWQ6ICIgKyBwaWQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbVByb2Nlc3Nlcy5yZW1vdmUocGlkKTsKICAgICAgICAgfQorICAgICAgICBzdG9wU2VsZldoZW5Eb25lKCk7CiAgICAgICAgIExvZy52KFRBRywgInN0b3BQcm9ncmVzcygiICsgcGlkICsgIik6IGNhbmNlbCBub3RpZmljYXRpb24iKTsKLSAgICAgICAgTm90aWZpY2F0aW9uTWFuYWdlci5mcm9tKGdldEFwcGxpY2F0aW9uQ29udGV4dCgpKS5jYW5jZWwoVEFHLCBwaWQpOworICAgICAgICBOb3RpZmljYXRpb25NYW5hZ2VyLmZyb20obUNvbnRleHQpLmNhbmNlbChUQUcsIHBpZCk7CiAgICAgfQogCiAgICAgLyoqCkBAIC0zOTQsMTIgKzQ4NywxMSBAQAogICAgICAqLwogICAgIHByaXZhdGUgdm9pZCBjYW5jZWwoaW50IHBpZCkgewogICAgICAgICBMb2cudihUQUcsICJjYW5jZWw6IHBpZD0iICsgcGlkKTsKLSAgICAgICAgc3luY2hyb25pemVkIChtUHJvY2Vzc2VzKSB7Ci0gICAgICAgICAgICBCdWdyZXBvcnRJbmZvIGluZm8gPSBtUHJvY2Vzc2VzLmdldChwaWQpOwotICAgICAgICAgICAgaWYgKGluZm8gIT0gbnVsbCAmJiAhaW5mby5maW5pc2hlZCkgewotICAgICAgICAgICAgICAgIExvZy5pKFRBRywgIkNhbmNlbGxpbmcgYnVncmVwb3J0IHNlcnZpY2UgKHBpZD0iICsgcGlkICsgIikgb24gdXNlcidzIHJlcXVlc3QiKTsKLSAgICAgICAgICAgICAgICBzZXRTeXN0ZW1Qcm9wZXJ0eShDVExfU1RPUCwgQlVHUkVQT1JUX1NFUlZJQ0UpOwotICAgICAgICAgICAgfQorICAgICAgICBmaW5hbCBCdWdyZXBvcnRJbmZvIGluZm8gPSBnZXRJbmZvKHBpZCk7CisgICAgICAgIGlmIChpbmZvICE9IG51bGwgJiYgIWluZm8uZmluaXNoZWQpIHsKKyAgICAgICAgICAgIExvZy5pKFRBRywgIkNhbmNlbGxpbmcgYnVncmVwb3J0IHNlcnZpY2UgKHBpZD0iICsgcGlkICsgIikgb24gdXNlcidzIHJlcXVlc3QiKTsKKyAgICAgICAgICAgIHNldFN5c3RlbVByb3BlcnR5KENUTF9TVE9QLCBCVUdSRVBPUlRfU0VSVklDRSk7CisgICAgICAgICAgICBkZWxldGVTY3JlZW5zaG90cyhpbmZvKTsKICAgICAgICAgfQogICAgICAgICBzdG9wUHJvZ3Jlc3MocGlkKTsKICAgICB9CkBAIC00MTAsNTQgKzUwMiw1MiBAQAogICAgICAqIEByZXR1cm4gd2hldGhlciBpdCBzaG91bGQga2VlcCBwb2xsaW5nLgogICAgICAqLwogICAgIHByaXZhdGUgYm9vbGVhbiBwb2xsUHJvZ3Jlc3MoKSB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAobVByb2Nlc3NlcykgewotICAgICAgICAgICAgZmluYWwgaW50IHRvdGFsID0gbVByb2Nlc3Nlcy5zaXplKCk7Ci0gICAgICAgICAgICBpZiAodG90YWwgPT0gMCkgewotICAgICAgICAgICAgICAgIExvZy5kKFRBRywgIk5vIHByb2Nlc3MgdG8gcG9sbCBwcm9ncmVzcy4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGludCBhY3RpdmVQcm9jZXNzZXMgPSAwOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgaW50IHBpZCA9IG1Qcm9jZXNzZXMua2V5QXQoaSk7Ci0gICAgICAgICAgICAgICAgZmluYWwgQnVncmVwb3J0SW5mbyBpbmZvID0gbVByb2Nlc3Nlcy52YWx1ZUF0KGkpOwotICAgICAgICAgICAgICAgIGlmIChpbmZvLmZpbmlzaGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERUJVRykgTG9nLnYoVEFHLCAiU2tpcHBpbmcgZmluaXNoZWQgcHJvY2VzcyAiICsgcGlkKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGFjdGl2ZVByb2Nlc3NlcysrOwotICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBwcm9ncmVzc0tleSA9IERVTVBTVEFURV9QUkVGSVggKyBwaWQgKyBQUk9HUkVTU19TVUZGSVg7Ci0gICAgICAgICAgICAgICAgZmluYWwgaW50IHByb2dyZXNzID0gU3lzdGVtUHJvcGVydGllcy5nZXRJbnQocHJvZ3Jlc3NLZXksIDApOwotICAgICAgICAgICAgICAgIGlmIChwcm9ncmVzcyA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIExvZy52KFRBRywgIlN5c3RlbSBwcm9wZXJ0eSAiICsgcHJvZ3Jlc3NLZXkgKyAiIGlzIG5vdCBzZXQgeWV0Iik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGZpbmFsIGludCBtYXggPSBTeXN0ZW1Qcm9wZXJ0aWVzLmdldEludChEVU1QU1RBVEVfUFJFRklYICsgcGlkICsgTUFYX1NVRkZJWCwgMCk7Ci0gICAgICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBtYXhDaGFuZ2VkID0gbWF4ID4gMCAmJiBtYXggIT0gaW5mby5tYXg7Ci0gICAgICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBwcm9ncmVzc0NoYW5nZWQgPSBwcm9ncmVzcyA+IDAgJiYgcHJvZ3Jlc3MgIT0gaW5mby5wcm9ncmVzczsKLQotICAgICAgICAgICAgICAgIGlmIChwcm9ncmVzc0NoYW5nZWQgfHwgbWF4Q2hhbmdlZCkgewotICAgICAgICAgICAgICAgICAgICBpZiAocHJvZ3Jlc3NDaGFuZ2VkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUcpIExvZy52KFRBRywgIlVwZGF0aW5nIHByb2dyZXNzIGZvciBQSUQgIiArIHBpZCArICIgZnJvbSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgaW5mby5wcm9ncmVzcyArICIgdG8gIiArIHByb2dyZXNzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZm8ucHJvZ3Jlc3MgPSBwcm9ncmVzczsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAobWF4Q2hhbmdlZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmkoVEFHLCAiVXBkYXRpbmcgbWF4IHByb2dyZXNzIGZvciBQSUQgIiArIHBpZCArICIgZnJvbSAiICsgaW5mby5tYXgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHRvICIgKyBtYXgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5tYXggPSBtYXg7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaW5mby5sYXN0VXBkYXRlID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVByb2dyZXNzKGluZm8pOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGxvbmcgaW5hY3RpdmVUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBpbmZvLmxhc3RVcGRhdGU7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbmFjdGl2ZVRpbWUgPj0gSU5BQ1RJVklUWV9USU1FT1VUKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJObyBwcm9ncmVzcyB1cGRhdGUgZm9yIHByb2Nlc3MgIiArIHBpZCArICIgc2luY2UgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGluZm8uZ2V0Rm9ybWF0dGVkTGFzdFVwZGF0ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0b3BQcm9ncmVzcyhpbmZvLnBpZCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoREVCVUcpIExvZy52KFRBRywgInBvbGxQcm9ncmVzcygpIHRvdGFsPSIgKyB0b3RhbCArICIsIGFjdGl2ZXM9IiArIGFjdGl2ZVByb2Nlc3Nlcyk7Ci0gICAgICAgICAgICByZXR1cm4gYWN0aXZlUHJvY2Vzc2VzID4gMDsKKyAgICAgICAgZmluYWwgaW50IHRvdGFsID0gbVByb2Nlc3Nlcy5zaXplKCk7CisgICAgICAgIGlmICh0b3RhbCA9PSAwKSB7CisgICAgICAgICAgICBMb2cuZChUQUcsICJObyBwcm9jZXNzIHRvIHBvbGwgcHJvZ3Jlc3MuIik7CiAgICAgICAgIH0KKyAgICAgICAgaW50IGFjdGl2ZVByb2Nlc3NlcyA9IDA7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdG90YWw7IGkrKykgeworICAgICAgICAgICAgZmluYWwgaW50IHBpZCA9IG1Qcm9jZXNzZXMua2V5QXQoaSk7CisgICAgICAgICAgICBmaW5hbCBCdWdyZXBvcnRJbmZvIGluZm8gPSBtUHJvY2Vzc2VzLnZhbHVlQXQoaSk7CisgICAgICAgICAgICBpZiAoaW5mby5maW5pc2hlZCkgeworICAgICAgICAgICAgICAgIGlmIChERUJVRykgTG9nLnYoVEFHLCAiU2tpcHBpbmcgZmluaXNoZWQgcHJvY2VzcyAiICsgcGlkKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFjdGl2ZVByb2Nlc3NlcysrOworICAgICAgICAgICAgZmluYWwgU3RyaW5nIHByb2dyZXNzS2V5ID0gRFVNUFNUQVRFX1BSRUZJWCArIHBpZCArIFBST0dSRVNTX1NVRkZJWDsKKyAgICAgICAgICAgIGZpbmFsIGludCBwcm9ncmVzcyA9IFN5c3RlbVByb3BlcnRpZXMuZ2V0SW50KHByb2dyZXNzS2V5LCAwKTsKKyAgICAgICAgICAgIGlmIChwcm9ncmVzcyA9PSAwKSB7CisgICAgICAgICAgICAgICAgTG9nLnYoVEFHLCAiU3lzdGVtIHByb3BlcnR5ICIgKyBwcm9ncmVzc0tleSArICIgaXMgbm90IHNldCB5ZXQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpbmFsIGludCBtYXggPSBTeXN0ZW1Qcm9wZXJ0aWVzLmdldEludChEVU1QU1RBVEVfUFJFRklYICsgcGlkICsgTUFYX1NVRkZJWCwgMCk7CisgICAgICAgICAgICBmaW5hbCBib29sZWFuIG1heENoYW5nZWQgPSBtYXggPiAwICYmIG1heCAhPSBpbmZvLm1heDsKKyAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gcHJvZ3Jlc3NDaGFuZ2VkID0gcHJvZ3Jlc3MgPiAwICYmIHByb2dyZXNzICE9IGluZm8ucHJvZ3Jlc3M7CisKKyAgICAgICAgICAgIGlmIChwcm9ncmVzc0NoYW5nZWQgfHwgbWF4Q2hhbmdlZCkgeworICAgICAgICAgICAgICAgIGlmIChwcm9ncmVzc0NoYW5nZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cudihUQUcsICJVcGRhdGluZyBwcm9ncmVzcyBmb3IgUElEICIgKyBwaWQgKyAiIGZyb20gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgaW5mby5wcm9ncmVzcyArICIgdG8gIiArIHByb2dyZXNzKTsKKyAgICAgICAgICAgICAgICAgICAgaW5mby5wcm9ncmVzcyA9IHByb2dyZXNzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobWF4Q2hhbmdlZCkgeworICAgICAgICAgICAgICAgICAgICBMb2cuaShUQUcsICJVcGRhdGluZyBtYXggcHJvZ3Jlc3MgZm9yIFBJRCAiICsgcGlkICsgIiBmcm9tICIgKyBpbmZvLm1heAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiB0byAiICsgbWF4KTsKKyAgICAgICAgICAgICAgICAgICAgaW5mby5tYXggPSBtYXg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGluZm8ubGFzdFVwZGF0ZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgICAgICAgICAgICAgIHVwZGF0ZVByb2dyZXNzKGluZm8pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBsb25nIGluYWN0aXZlVGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gaW5mby5sYXN0VXBkYXRlOworICAgICAgICAgICAgICAgIGlmIChpbmFjdGl2ZVRpbWUgPj0gSU5BQ1RJVklUWV9USU1FT1VUKSB7CisgICAgICAgICAgICAgICAgICAgIExvZy53KFRBRywgIk5vIHByb2dyZXNzIHVwZGF0ZSBmb3IgcHJvY2VzcyAiICsgcGlkICsgIiBzaW5jZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBpbmZvLmdldEZvcm1hdHRlZExhc3RVcGRhdGUoKSk7CisgICAgICAgICAgICAgICAgICAgIHN0b3BQcm9ncmVzcyhpbmZvLnBpZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChERUJVRykgTG9nLnYoVEFHLCAicG9sbFByb2dyZXNzKCkgdG90YWw9IiArIHRvdGFsICsgIiwgYWN0aXZlcz0iICsgYWN0aXZlUHJvY2Vzc2VzKTsKKyAgICAgICAgcmV0dXJuIGFjdGl2ZVByb2Nlc3NlcyA+IDA7CiAgICAgfQogCiAgICAgLyoqCkBAIC00NjcsMzUgKzU1NywxNDYgQEAKICAgICBwcml2YXRlIHZvaWQgbGF1bmNoQnVncmVwb3J0SW5mb0RpYWxvZyhpbnQgcGlkKSB7CiAgICAgICAgIC8vIENvcHkgdmFsdWVzIHNvIGl0IGRvZXNuJ3QgbG9jayBtUHJvY2Vzc2VzIHdoaWxlIFVJIGlzIGJlaW5nIHVwZGF0ZWQKICAgICAgICAgZmluYWwgU3RyaW5nIG5hbWUsIHRpdGxlLCBkZXNjcmlwdGlvbjsKLSAgICAgICAgc3luY2hyb25pemVkIChtUHJvY2Vzc2VzKSB7Ci0gICAgICAgICAgICBmaW5hbCBCdWdyZXBvcnRJbmZvIGluZm8gPSBtUHJvY2Vzc2VzLmdldChwaWQpOwotICAgICAgICAgICAgaWYgKGluZm8gPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIk5vIGJ1Z3JlcG9ydCBpbmZvIGZvciBQSUQgIiArIHBpZCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbmFtZSA9IGluZm8ubmFtZTsKLSAgICAgICAgICAgIHRpdGxlID0gaW5mby50aXRsZTsKLSAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gaW5mby5kZXNjcmlwdGlvbjsKKyAgICAgICAgZmluYWwgQnVncmVwb3J0SW5mbyBpbmZvID0gZ2V0SW5mbyhwaWQpOworICAgICAgICBpZiAoaW5mbyA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbmFtZSA9IGluZm8ubmFtZTsKKyAgICAgICAgdGl0bGUgPSBpbmZvLnRpdGxlOworICAgICAgICBkZXNjcmlwdGlvbiA9IGluZm8uZGVzY3JpcHRpb247CisKKyAgICAgICAgY29sbGFwc2VOb3RpZmljYXRpb25CYXIoKTsKKyAgICAgICAgbUluZm9EaWFsb2cuaW5pdGlhbGl6ZShtQ29udGV4dCwgcGlkLCBuYW1lLCB0aXRsZSwgZGVzY3JpcHRpb24pOworICAgIH0KKworICAgIC8qKgorICAgICAqIFN0YXJ0aW5nIHBvaW50IGZvciB0YWtpbmcgYSBzY3JlZW5zaG90LgorICAgICAqIDxwPgorICAgICAqIElmIHtAY29kZSBkZWxheWVkfSBpcyBzZXQsIGl0IGZpcnN0IGRpc3BsYXkgYSB0b2FzdCBtZXNzYWdlIGFuZCB3YWl0cworICAgICAqIHtAbGluayAjU0NSRUVOU0hPVF9ERUxBWV9TRUNPTkRTfSBzZWNvbmRzIGJlZm9yZSB0YWtpbmcgaXQsIG90aGVyd2lzZSBpdCB0YWtlcyB0aGUgc2NyZWVuc2hvdAorICAgICAqIHJpZ2h0IGF3YXkuCisgICAgICogPHA+CisgICAgICogVHlwaWNhbCB1c2FnZSBpcyBkZWxheWluZyB3aGVuIHRha2VuIGZyb20gdGhlIG5vdGlmaWNhdGlvbiBhY3Rpb24sIGFuZCB0YWtpbmcgaXQgcmlnaHQgYXdheQorICAgICAqIHVwb24gcmVjZWl2aW5nIGEge0BsaW5rICNJTlRFTlRfQlVHUkVQT1JUX1NUQVJURUR9LgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCB0YWtlU2NyZWVuc2hvdChpbnQgcGlkLCBib29sZWFuIGRlbGF5ZWQpIHsKKyAgICAgICAgc2V0VGFraW5nU2NyZWVuc2hvdCh0cnVlKTsKKyAgICAgICAgaWYgKGRlbGF5ZWQpIHsKKyAgICAgICAgICAgIGNvbGxhcHNlTm90aWZpY2F0aW9uQmFyKCk7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgbXNnID0gbUNvbnRleHQuZ2V0UmVzb3VyY2VzKCkKKyAgICAgICAgICAgICAgICAgICAgLmdldFF1YW50aXR5U3RyaW5nKGNvbS5hbmRyb2lkLmludGVybmFsLlIucGx1cmFscy5idWdyZXBvcnRfY291bnRkb3duLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUkVFTlNIT1RfREVMQVlfU0VDT05EUywgU0NSRUVOU0hPVF9ERUxBWV9TRUNPTkRTKTsKKyAgICAgICAgICAgIExvZy5pKFRBRywgbXNnKTsKKyAgICAgICAgICAgIC8vIFNob3cgYSB0b2FzdCBqdXN0IG9uY2UsIG90aGVyd2lzZSBpdCBtaWdodCBiZSBjYXB0dXJlZCBpbiB0aGUgc2NyZWVuc2hvdC4KKyAgICAgICAgICAgIFRvYXN0Lm1ha2VUZXh0KG1Db250ZXh0LCBtc2csIFRvYXN0LkxFTkdUSF9TSE9SVCkuc2hvdygpOworCisgICAgICAgICAgICB0YWtlU2NyZWVuc2hvdChwaWQsIFNDUkVFTlNIT1RfREVMQVlfU0VDT05EUyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0YWtlU2NyZWVuc2hvdChwaWQsIDApOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogVGFrZXMgYSBzY3JlZW5zaG90IGFmdGVyIHtAY29kZSBkZWxheX0gc2Vjb25kcy4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgdGFrZVNjcmVlbnNob3QoaW50IHBpZCwgaW50IGRlbGF5KSB7CisgICAgICAgIGlmIChkZWxheSA+IDApIHsKKyAgICAgICAgICAgIExvZy5kKFRBRywgIlRha2luZyBzY3JlZW5zaG90IGZvciAiICsgcGlkICsgIiBpbiAiICsgZGVsYXkgKyAiIHNlY29uZHMiKTsKKyAgICAgICAgICAgIGZpbmFsIE1lc3NhZ2UgbXNnID0gbU1haW5IYW5kbGVyLm9idGFpbk1lc3NhZ2UoKTsKKyAgICAgICAgICAgIG1zZy53aGF0ID0gTVNHX0RFTEFZRURfU0NSRUVOU0hPVDsKKyAgICAgICAgICAgIG1zZy5hcmcxID0gcGlkOworICAgICAgICAgICAgbXNnLmFyZzIgPSBkZWxheSAtIDE7CisgICAgICAgICAgICBtTWFpbkhhbmRsZXIuc2VuZE1lc3NhZ2VEZWxheWVkKG1zZywgRGF0ZVV0aWxzLlNFQ09ORF9JTl9NSUxMSVMpOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gQ2xvc2VzIHRoZSBub3RpZmljYXRpb24gYmFyIGZpcnN0LgotICAgICAgICBzZW5kQnJvYWRjYXN0KG5ldyBJbnRlbnQoSW50ZW50LkFDVElPTl9DTE9TRV9TWVNURU1fRElBTE9HUykpOworICAgICAgICAvLyBJdCdzIHRpbWUgdG8gdGFrZSB0aGUgc2NyZWVuc2hvdDogbGV0IHRoZSBwcm9wZXIgdGhyZWFkIGhhbmRsZSBpdAorICAgICAgICBmaW5hbCBCdWdyZXBvcnRJbmZvIGluZm8gPSBnZXRJbmZvKHBpZCk7CisgICAgICAgIGlmIChpbmZvID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBmaW5hbCBTdHJpbmcgc2NyZWVuc2hvdFBhdGggPQorICAgICAgICAgICAgICAgIG5ldyBGaWxlKG1TY3JlZW5zaG90c0RpciwgaW5mby5nZXRQYXRoTmV4dFNjcmVlbnNob3QoKSkuZ2V0QWJzb2x1dGVQYXRoKCk7CiAKLSAgICAgICAgbUluZm9EaWFsb2cuaW5pdGlhbGl6ZShnZXRBcHBsaWNhdGlvbkNvbnRleHQoKSwgcGlkLCBuYW1lLCB0aXRsZSwgZGVzY3JpcHRpb24pOworICAgICAgICBmaW5hbCBNZXNzYWdlIHJlcXVlc3RNc2cgPSBuZXcgTWVzc2FnZSgpOworICAgICAgICByZXF1ZXN0TXNnLndoYXQgPSBNU0dfU0NSRUVOU0hPVF9SRVFVRVNUOworICAgICAgICByZXF1ZXN0TXNnLmFyZzEgPSBwaWQ7CisgICAgICAgIHJlcXVlc3RNc2cub2JqID0gc2NyZWVuc2hvdFBhdGg7CisgICAgICAgIG1TY3JlZW5zaG90SGFuZGxlci5zZW5kTWVzc2FnZShyZXF1ZXN0TXNnKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBpbnRlcm5hbCB7QGNvZGUgbVRha2luZ1NjcmVlbnNob3R9IHN0YXRlIGFuZCB1cGRhdGVzIGFsbCBub3RpZmljYXRpb25zIHNvIHRoZWlyCisgICAgICogU0NSRUVOU0hPVCBidXR0b24gaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBhY2NvcmRpbmdseS4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgc2V0VGFraW5nU2NyZWVuc2hvdChib29sZWFuIGZsYWcpIHsKKyAgICAgICAgc3luY2hyb25pemVkIChCdWdyZXBvcnRQcm9ncmVzc1NlcnZpY2UudGhpcykgeworICAgICAgICAgICAgbVRha2luZ1NjcmVlbnNob3QgPSBmbGFnOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtUHJvY2Vzc2VzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgZmluYWwgQnVncmVwb3J0SW5mbyBpbmZvID0gbVByb2Nlc3Nlcy52YWx1ZUF0KGkpOworICAgICAgICAgICAgICAgIGlmIChpbmZvLmZpbmlzaGVkKSB7CisgICAgICAgICAgICAgICAgICAgIExvZy5kKFRBRywgIk5vdCB1cGRhdGluZyBwcm9ncmVzcyBiZWNhdXNlIHNoYXJlIG5vdGlmaWNhdGlvbiB3YXMgYWxyZWFkeSBzZW50Iik7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB1cGRhdGVQcm9ncmVzcyhpbmZvKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBoYW5kbGVTY3JlZW5zaG90UmVxdWVzdChNZXNzYWdlIHJlcXVlc3RNc2cpIHsKKyAgICAgICAgU3RyaW5nIHNjcmVlbnNob3RGaWxlID0gKFN0cmluZykgcmVxdWVzdE1zZy5vYmo7CisgICAgICAgIGJvb2xlYW4gdGFrZW4gPSB0YWtlU2NyZWVuc2hvdChtQ29udGV4dCwgc2NyZWVuc2hvdEZpbGUpOworICAgICAgICBzZXRUYWtpbmdTY3JlZW5zaG90KGZhbHNlKTsKKworICAgICAgICBmaW5hbCBNZXNzYWdlIHJlc3VsdE1zZyA9IG5ldyBNZXNzYWdlKCk7CisgICAgICAgIHJlc3VsdE1zZy53aGF0ID0gTVNHX1NDUkVFTlNIT1RfUkVTUE9OU0U7CisgICAgICAgIHJlc3VsdE1zZy5hcmcxID0gcmVxdWVzdE1zZy5hcmcxOworICAgICAgICByZXN1bHRNc2cuYXJnMiA9IHRha2VuID8gMSA6IDA7CisgICAgICAgIHJlc3VsdE1zZy5vYmogPSBzY3JlZW5zaG90RmlsZTsKKyAgICAgICAgbU1haW5IYW5kbGVyLnNlbmRNZXNzYWdlKHJlc3VsdE1zZyk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGhhbmRsZVNjcmVlbnNob3RSZXNwb25zZShNZXNzYWdlIHJlc3VsdE1zZykgeworICAgICAgICBmaW5hbCBib29sZWFuIHRha2VuID0gcmVzdWx0TXNnLmFyZzIgIT0gMDsKKyAgICAgICAgZmluYWwgQnVncmVwb3J0SW5mbyBpbmZvID0gZ2V0SW5mbyhyZXN1bHRNc2cuYXJnMSk7CisgICAgICAgIGlmIChpbmZvID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBmaW5hbCBGaWxlIHNjcmVlbnNob3RGaWxlID0gbmV3IEZpbGUoKFN0cmluZykgcmVzdWx0TXNnLm9iaik7CisKKyAgICAgICAgZmluYWwgaW50IG1zZ0lkOworICAgICAgICBpZiAodGFrZW4pIHsKKyAgICAgICAgICAgIGluZm8uYWRkU2NyZWVuc2hvdChzY3JlZW5zaG90RmlsZSk7CisgICAgICAgICAgICBtc2dJZCA9IFIuc3RyaW5nLmJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gVE9ETzogdHJ5IGFnYWluIHVzaW5nIEZyYW1ld29yayBBUElzIGluc3RlYWQgb2YgcmVseWluZyBvbiBzY3JlZW5jYXAuCisgICAgICAgICAgICBtc2dJZCA9IFIuc3RyaW5nLmJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZDsKKyAgICAgICAgfQorICAgICAgICBmaW5hbCBTdHJpbmcgbXNnID0gbUNvbnRleHQuZ2V0U3RyaW5nKG1zZ0lkKTsKKyAgICAgICAgTG9nLmQoVEFHLCBtc2cpOworICAgICAgICBUb2FzdC5tYWtlVGV4dChtQ29udGV4dCwgbXNnLCBUb2FzdC5MRU5HVEhfU0hPUlQpLnNob3coKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBEZWxldGVzIGFsbCBzY3JlZW5zaG90cyB0YWtlbiBmb3IgYSBnaXZlbiBidWdyZXBvcnQuCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIGRlbGV0ZVNjcmVlbnNob3RzKEJ1Z3JlcG9ydEluZm8gaW5mbykgeworICAgICAgICBmb3IgKEZpbGUgZmlsZSA6IGluZm8uc2NyZWVuc2hvdEZpbGVzKSB7CisgICAgICAgICAgICBMb2cuaShUQUcsICJEZWxldGluZyBzY3JlZW5zaG90IGZpbGUgIiArIGZpbGUpOworICAgICAgICAgICAgZmlsZS5kZWxldGUoKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIC8qKgogICAgICAqIEZpbmlzaGVzIHRoZSBzZXJ2aWNlIHdoZW4gaXQncyBub3QgbW9uaXRvcmluZyBhbnkgbW9yZSBwcm9jZXNzZXMuCiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIHN0b3BTZWxmV2hlbkRvbmUoKSB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAobVByb2Nlc3NlcykgewotICAgICAgICAgICAgaWYgKG1Qcm9jZXNzZXMuc2l6ZSgpID4gMCkgewotICAgICAgICAgICAgICAgIGlmIChERUJVRykgTG9nLnYoVEFHLCAiU3RheWluZyBhbGl2ZSwgd2FpdGluZyBmb3IgcGlkcyAiICsgbVByb2Nlc3Nlcyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgTG9nLnYoVEFHLCAiTm8gbW9yZSBwaWRzIHRvIGhhbmRsZSwgc2h1dHRpbmcgZG93biIpOwotICAgICAgICAgICAgc3RvcFNlbGYoKTsKKyAgICAgICAgaWYgKG1Qcm9jZXNzZXMuc2l6ZSgpID4gMCkgeworICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cudihUQUcsICJTdGF5aW5nIGFsaXZlLCB3YWl0aW5nIGZvciBwaWRzICIgKyBtUHJvY2Vzc2VzKTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorICAgICAgICBMb2cudihUQUcsICJObyBtb3JlIHBpZHMgdG8gaGFuZGxlLCBzaHV0dGluZyBkb3duIik7CisgICAgICAgIHN0b3BTZWxmKCk7CiAgICAgfQogCiAgICAgLyoqCkBAIC01MDMsMjQgKzcwNCwyNCBAQAogICAgICAqLwogICAgIHByaXZhdGUgdm9pZCBvbkJ1Z3JlcG9ydEZpbmlzaGVkKGludCBwaWQsIEludGVudCBpbnRlbnQpIHsKICAgICAgICAgbUluZm9EaWFsb2cub25CdWdyZXBvcnRGaW5pc2hlZChwaWQpOwotICAgICAgICBmaW5hbCBDb250ZXh0IGNvbnRleHQgPSBnZXRBcHBsaWNhdGlvbkNvbnRleHQoKTsKLSAgICAgICAgQnVncmVwb3J0SW5mbyBpbmZvOwotICAgICAgICBzeW5jaHJvbml6ZWQgKG1Qcm9jZXNzZXMpIHsKLSAgICAgICAgICAgIGluZm8gPSBtUHJvY2Vzc2VzLmdldChwaWQpOwotICAgICAgICAgICAgaWYgKGluZm8gPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIC8vIEhhcHBlbnMgd2hlbiBCVUdSRVBPUlRfRklOSVNIRUQgd2FzIHJlY2VpdmVkIHdpdGhvdXQgYSBCVUdSRVBPUlRfU1RBUlRFRAotICAgICAgICAgICAgICAgIExvZy52KFRBRywgIkNyZWF0aW5nIGluZm8gZm9yIHVudHJhY2tlZCBwaWQgIiArIHBpZCk7Ci0gICAgICAgICAgICAgICAgaW5mbyA9IG5ldyBCdWdyZXBvcnRJbmZvKGNvbnRleHQsIHBpZCk7Ci0gICAgICAgICAgICAgICAgbVByb2Nlc3Nlcy5wdXQocGlkLCBpbmZvKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGluZm8uYnVncmVwb3J0RmlsZSA9IGdldEZpbGVFeHRyYShpbnRlbnQsIEVYVFJBX0JVR1JFUE9SVCk7Ci0gICAgICAgICAgICBpbmZvLnNjcmVlbnNob3RGaWxlID0gZ2V0RmlsZUV4dHJhKGludGVudCwgRVhUUkFfU0NSRUVOU0hPVCk7Ci0gICAgICAgICAgICBpbmZvLmZpbmlzaGVkID0gdHJ1ZTsKKyAgICAgICAgQnVncmVwb3J0SW5mbyBpbmZvID0gZ2V0SW5mbyhwaWQpOworICAgICAgICBpZiAoaW5mbyA9PSBudWxsKSB7CisgICAgICAgICAgICAvLyBIYXBwZW5zIHdoZW4gQlVHUkVQT1JUX0ZJTklTSEVEIHdhcyByZWNlaXZlZCB3aXRob3V0IGEgQlVHUkVQT1JUX1NUQVJURUQgZmlyc3QuCisgICAgICAgICAgICBMb2cudihUQUcsICJDcmVhdGluZyBpbmZvIGZvciB1bnRyYWNrZWQgcGlkICIgKyBwaWQpOworICAgICAgICAgICAgaW5mbyA9IG5ldyBCdWdyZXBvcnRJbmZvKG1Db250ZXh0LCBwaWQpOworICAgICAgICAgICAgbVByb2Nlc3Nlcy5wdXQocGlkLCBpbmZvKTsKICAgICAgICAgfQorICAgICAgICBpbmZvLnJlbmFtZVNjcmVlbnNob3RzKG1TY3JlZW5zaG90c0Rpcik7CisgICAgICAgIGluZm8uYnVncmVwb3J0RmlsZSA9IGdldEZpbGVFeHRyYShpbnRlbnQsIEVYVFJBX0JVR1JFUE9SVCk7CisgICAgICAgIGZpbmFsIEZpbGUgc2NyZWVuc2hvdCA9IGdldEZpbGVFeHRyYShpbnRlbnQsIEVYVFJBX1NDUkVFTlNIT1QpOworICAgICAgICBpZiAoc2NyZWVuc2hvdCAhPSBudWxsKSB7CisgICAgICAgICAgICBpbmZvLmFkZFNjcmVlbnNob3Qoc2NyZWVuc2hvdCk7CisgICAgICAgIH0KKyAgICAgICAgaW5mby5maW5pc2hlZCA9IHRydWU7CiAKLSAgICAgICAgZmluYWwgQ29uZmlndXJhdGlvbiBjb25mID0gY29udGV4dC5nZXRSZXNvdXJjZXMoKS5nZXRDb25maWd1cmF0aW9uKCk7CisgICAgICAgIGZpbmFsIENvbmZpZ3VyYXRpb24gY29uZiA9IG1Db250ZXh0LmdldFJlc291cmNlcygpLmdldENvbmZpZ3VyYXRpb24oKTsKICAgICAgICAgaWYgKChjb25mLnVpTW9kZSAmIENvbmZpZ3VyYXRpb24uVUlfTU9ERV9UWVBFX01BU0spICE9IENvbmZpZ3VyYXRpb24uVUlfTU9ERV9UWVBFX1dBVENIKSB7Ci0gICAgICAgICAgICB0cmlnZ2VyTG9jYWxOb3RpZmljYXRpb24oY29udGV4dCwgaW5mbyk7CisgICAgICAgICAgICB0cmlnZ2VyTG9jYWxOb3RpZmljYXRpb24obUNvbnRleHQsIGluZm8pOwogICAgICAgICB9CiAgICAgfQogCkBAIC01MzAsMTEgKzczMSwxMSBAQAogICAgICAqICh1c3VhbGx5IGJ5IHRyaWdnZXJpbmcgaXQgb24gYW5vdGhlciBjb25uZWN0ZWQgZGV2aWNlKTsgd2UgZG9uJ3QgbmVlZCB0byBkaXNwbGF5IHRoZQogICAgICAqIG5vdGlmaWNhdGlvbiBpbiB0aGlzIGNhc2UuCiAgICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCB0cmlnZ2VyTG9jYWxOb3RpZmljYXRpb24oZmluYWwgQ29udGV4dCBjb250ZXh0LCBmaW5hbCBCdWdyZXBvcnRJbmZvIGluZm8pIHsKKyAgICBwcml2YXRlIHZvaWQgdHJpZ2dlckxvY2FsTm90aWZpY2F0aW9uKGZpbmFsIENvbnRleHQgY29udGV4dCwgZmluYWwgQnVncmVwb3J0SW5mbyBpbmZvKSB7CiAgICAgICAgIGlmICghaW5mby5idWdyZXBvcnRGaWxlLmV4aXN0cygpIHx8ICFpbmZvLmJ1Z3JlcG9ydEZpbGUuY2FuUmVhZCgpKSB7CiAgICAgICAgICAgICBMb2cuZShUQUcsICJDb3VsZCBub3QgcmVhZCBidWdyZXBvcnQgZmlsZSAiICsgaW5mby5idWdyZXBvcnRGaWxlKTsKLSAgICAgICAgICAgIFRvYXN0Lm1ha2VUZXh0KGNvbnRleHQsIGNvbnRleHQuZ2V0U3RyaW5nKFIuc3RyaW5nLmJ1Z3JlcG9ydF91bnJlYWRhYmxlX3RleHQpLAotICAgICAgICAgICAgICAgICAgICBUb2FzdC5MRU5HVEhfTE9ORykuc2hvdygpOworICAgICAgICAgICAgVG9hc3QubWFrZVRleHQoY29udGV4dCwgUi5zdHJpbmcuYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCwgVG9hc3QuTEVOR1RIX0xPTkcpLnNob3coKTsKKyAgICAgICAgICAgIHN0b3BQcm9ncmVzcyhpbmZvLnBpZCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtNTYxLDcgKzc2Miw2IEBACiAgICAgICAgIC8vIEZpbGVzIGFyZSBrZXB0IG9uIHByaXZhdGUgc3RvcmFnZSwgc28gdHVybiBpbnRvIFVyaXMgdGhhdCB3ZSBjYW4KICAgICAgICAgLy8gZ3JhbnQgdGVtcG9yYXJ5IHBlcm1pc3Npb25zIGZvci4KICAgICAgICAgZmluYWwgVXJpIGJ1Z3JlcG9ydFVyaSA9IGdldFVyaShjb250ZXh0LCBpbmZvLmJ1Z3JlcG9ydEZpbGUpOwotICAgICAgICBmaW5hbCBVcmkgc2NyZWVuc2hvdFVyaSA9IGdldFVyaShjb250ZXh0LCBpbmZvLnNjcmVlbnNob3RGaWxlKTsKIAogICAgICAgICBmaW5hbCBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudChJbnRlbnQuQUNUSU9OX1NFTkRfTVVMVElQTEUpOwogICAgICAgICBmaW5hbCBTdHJpbmcgbWltZVR5cGUgPSAiYXBwbGljYXRpb24vdm5kLmFuZHJvaWQuYnVncmVwb3J0IjsKQEAgLTU3NSw3ICs3NzUsNyBAQAogICAgICAgICAvLyBFWFRSQV9URVhUIHNob3VsZCBiZSBhbiBBcnJheUxpc3QsIGJ1dCBzb21lIGNsaWVudHMgYXJlIGV4cGVjdGluZyBhIHNpbmdsZSBTdHJpbmcuCiAgICAgICAgIC8vIFNvLCB0byBhdm9pZCBhbiBleGNlcHRpb24gb24gSW50ZW50Lm1pZ3JhdGVFeHRyYVN0cmVhbVRvQ2xpcERhdGEoKSwgd2UgbmVlZCB0byBtYW51YWxseQogICAgICAgICAvLyBjcmVhdGUgdGhlIENsaXBEYXRhIG9iamVjdCB3aXRoIHRoZSBhdHRhY2htZW50cyBVUklzLgotICAgICAgICBTdHJpbmdCdWlsZGVyIG1lc3NhZ2VCb2R5ID0gbmV3IFN0cmluZ0J1aWxkZXIoIkJ1aWxkIGluZm86ICIpCisgICAgICAgIGZpbmFsIFN0cmluZ0J1aWxkZXIgbWVzc2FnZUJvZHkgPSBuZXcgU3RyaW5nQnVpbGRlcigiQnVpbGQgaW5mbzogIikKICAgICAgICAgICAgIC5hcHBlbmQoU3lzdGVtUHJvcGVydGllcy5nZXQoInJvLmJ1aWxkLmRlc2NyaXB0aW9uIikpCiAgICAgICAgICAgICAuYXBwZW5kKCJcblNlcmlhbCBudW1iZXI6ICIpCiAgICAgICAgICAgICAuYXBwZW5kKFN5c3RlbVByb3BlcnRpZXMuZ2V0KCJyby5zZXJpYWxubyIpKTsKQEAgLTU4Niw3ICs3ODYsOCBAQAogICAgICAgICBmaW5hbCBDbGlwRGF0YSBjbGlwRGF0YSA9IG5ldyBDbGlwRGF0YShudWxsLCBuZXcgU3RyaW5nW10geyBtaW1lVHlwZSB9LAogICAgICAgICAgICAgICAgIG5ldyBDbGlwRGF0YS5JdGVtKG51bGwsIG51bGwsIG51bGwsIGJ1Z3JlcG9ydFVyaSkpOwogICAgICAgICBmaW5hbCBBcnJheUxpc3Q8VXJpPiBhdHRhY2htZW50cyA9IExpc3RzLm5ld0FycmF5TGlzdChidWdyZXBvcnRVcmkpOwotICAgICAgICBpZiAoc2NyZWVuc2hvdFVyaSAhPSBudWxsKSB7CisgICAgICAgIGZvciAoRmlsZSBzY3JlZW5zaG90IDogaW5mby5zY3JlZW5zaG90RmlsZXMpIHsKKyAgICAgICAgICAgIGZpbmFsIFVyaSBzY3JlZW5zaG90VXJpID0gZ2V0VXJpKGNvbnRleHQsIHNjcmVlbnNob3QpOwogICAgICAgICAgICAgY2xpcERhdGEuYWRkSXRlbShuZXcgQ2xpcERhdGEuSXRlbShudWxsLCBudWxsLCBudWxsLCBzY3JlZW5zaG90VXJpKSk7CiAgICAgICAgICAgICBhdHRhY2htZW50cy5hZGQoc2NyZWVuc2hvdFVyaSk7CiAgICAgICAgIH0KQEAgLTYwNiwyOSArODA3LDI1IEBACiAgICAgICogaW50ZW50LCBidXQgaXNzdWluZyBhIHdhcm5pbmcgZGlhbG9nIHRoZSBmaXJzdCB0aW1lLgogICAgICAqLwogICAgIHByaXZhdGUgdm9pZCBzaGFyZUJ1Z3JlcG9ydChpbnQgcGlkKSB7Ci0gICAgICAgIGZpbmFsIENvbnRleHQgY29udGV4dCA9IGdldEFwcGxpY2F0aW9uQ29udGV4dCgpOwotICAgICAgICBmaW5hbCBCdWdyZXBvcnRJbmZvIGluZm87Ci0gICAgICAgIHN5bmNocm9uaXplZCAobVByb2Nlc3NlcykgewotICAgICAgICAgICAgaW5mbyA9IG1Qcm9jZXNzZXMuZ2V0KHBpZCk7Ci0gICAgICAgICAgICBpZiAoaW5mbyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgLy8gU2hvdWxkIG5vdCBoYXBwZW4sIHNvIGxvZyBpZiBpdCBkb2VzLi4uCi0gICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiSU5URVJOQUwgRVJST1I6IG5vIGluZm8gZm9yIFBJRCAiICsgcGlkICsgIjogIiArIG1Qcm9jZXNzZXMpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KKyAgICAgICAgZmluYWwgQnVncmVwb3J0SW5mbyBpbmZvID0gZ2V0SW5mbyhwaWQpOworICAgICAgICBpZiAoaW5mbyA9PSBudWxsKSB7CisgICAgICAgICAgICAvLyBTaG91bGQgbm90IGhhcHBlbiwgc28gbG9nIGlmIGl0IGRvZXMuLi4KKyAgICAgICAgICAgIExvZy5lKFRBRywgIklOVEVSTkFMIEVSUk9SOiBubyBpbmZvIGZvciBQSUQgIiArIHBpZCArICI6ICIgKyBtUHJvY2Vzc2VzKTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBmaW5hbCBJbnRlbnQgc2VuZEludGVudCA9IGJ1aWxkU2VuZEludGVudChjb250ZXh0LCBpbmZvKTsKKyAgICAgICAgZmluYWwgSW50ZW50IHNlbmRJbnRlbnQgPSBidWlsZFNlbmRJbnRlbnQobUNvbnRleHQsIGluZm8pOwogICAgICAgICBmaW5hbCBJbnRlbnQgbm90aWZJbnRlbnQ7CiAKICAgICAgICAgLy8gU2VuZCB0aHJvdWdoIHdhcm5pbmcgZGlhbG9nIGJ5IGRlZmF1bHQKLSAgICAgICAgaWYgKGdldFdhcm5pbmdTdGF0ZShjb250ZXh0LCBTVEFURV9TSE9XKSA9PSBTVEFURV9TSE9XKSB7Ci0gICAgICAgICAgICBub3RpZkludGVudCA9IGJ1aWxkV2FybmluZ0ludGVudChjb250ZXh0LCBzZW5kSW50ZW50KTsKKyAgICAgICAgaWYgKGdldFdhcm5pbmdTdGF0ZShtQ29udGV4dCwgU1RBVEVfU0hPVykgPT0gU1RBVEVfU0hPVykgeworICAgICAgICAgICAgbm90aWZJbnRlbnQgPSBidWlsZFdhcm5pbmdJbnRlbnQobUNvbnRleHQsIHNlbmRJbnRlbnQpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbm90aWZJbnRlbnQgPSBzZW5kSW50ZW50OwogICAgICAgICB9CiAgICAgICAgIG5vdGlmSW50ZW50LmFkZEZsYWdzKEludGVudC5GTEFHX0FDVElWSVRZX05FV19UQVNLKTsKIAogICAgICAgICAvLyBTZW5kIHRoZSBzaGFyZSBpbnRlbnQuLi4KLSAgICAgICAgY29udGV4dC5zdGFydEFjdGl2aXR5KG5vdGlmSW50ZW50KTsKKyAgICAgICAgbUNvbnRleHQuc3RhcnRBY3Rpdml0eShub3RpZkludGVudCk7CiAKICAgICAgICAgLy8gLi4uIGFuZCBzdG9wIHdhdGNoaW5nIHRoaXMgcHJvY2Vzcy4KICAgICAgICAgc3RvcFByb2dyZXNzKHBpZCk7CkBAIC03ODEsMTkgKzk3OCw1MCBAQAogICAgICAqIFVwZGF0ZXMgdGhlIHVzZXItcHJvdmlkZWQgZGV0YWlscyBvZiBhIGJ1Z3JlcG9ydC4KICAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgdXBkYXRlQnVncmVwb3J0SW5mbyhpbnQgcGlkLCBTdHJpbmcgbmFtZSwgU3RyaW5nIHRpdGxlLCBTdHJpbmcgZGVzY3JpcHRpb24pIHsKLSAgICAgICAgc3luY2hyb25pemVkIChtUHJvY2Vzc2VzKSB7Ci0gICAgICAgICAgICBmaW5hbCBCdWdyZXBvcnRJbmZvIGluZm8gPSBtUHJvY2Vzc2VzLmdldChwaWQpOwotICAgICAgICAgICAgaWYgKGluZm8gPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIk5vIGJ1Z3JlcG9ydCBpbmZvIGZvciBQSUQgIiArIHBpZCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaW5mby50aXRsZSA9IHRpdGxlOwotICAgICAgICAgICAgaW5mby5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOwotICAgICAgICAgICAgaWYgKG5hbWUgIT0gbnVsbCAmJiAhaW5mby5uYW1lLmVxdWFscyhuYW1lKSkgewotICAgICAgICAgICAgICAgIGluZm8ubmFtZSA9IG5hbWU7Ci0gICAgICAgICAgICAgICAgdXBkYXRlUHJvZ3Jlc3MoaW5mbyk7Ci0gICAgICAgICAgICB9CisgICAgICAgIGZpbmFsIEJ1Z3JlcG9ydEluZm8gaW5mbyA9IGdldEluZm8ocGlkKTsKKyAgICAgICAgaWYgKGluZm8gPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisgICAgICAgIGluZm8udGl0bGUgPSB0aXRsZTsKKyAgICAgICAgaW5mby5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOworICAgICAgICBpZiAobmFtZSAhPSBudWxsICYmICFpbmZvLm5hbWUuZXF1YWxzKG5hbWUpKSB7CisgICAgICAgICAgICBpbmZvLm5hbWUgPSBuYW1lOworICAgICAgICAgICAgdXBkYXRlUHJvZ3Jlc3MoaW5mbyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgY29sbGFwc2VOb3RpZmljYXRpb25CYXIoKSB7CisgICAgICAgIHNlbmRCcm9hZGNhc3QobmV3IEludGVudChJbnRlbnQuQUNUSU9OX0NMT1NFX1NZU1RFTV9ESUFMT0dTKSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgTG9vcGVyIG5ld0xvb3BlcihTdHJpbmcgbmFtZSkgeworICAgICAgICBmaW5hbCBIYW5kbGVyVGhyZWFkIHRocmVhZCA9IG5ldyBIYW5kbGVyVGhyZWFkKG5hbWUsIFRIUkVBRF9QUklPUklUWV9CQUNLR1JPVU5EKTsKKyAgICAgICAgdGhyZWFkLnN0YXJ0KCk7CisgICAgICAgIHJldHVybiB0aHJlYWQuZ2V0TG9vcGVyKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGFrZXMgYSBzY3JlZW5zaG90IGFuZCBzYXZlIGl0IHRvIHRoZSBnaXZlbiBsb2NhdGlvbi4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIHRha2VTY3JlZW5zaG90KENvbnRleHQgY29udGV4dCwgU3RyaW5nIHNjcmVlbnNob3RGaWxlKSB7CisgICAgICAgICgoVmlicmF0b3IpIGNvbnRleHQuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LlZJQlJBVE9SX1NFUlZJQ0UpKQorICAgICAgICAgICAgICAgIC52aWJyYXRlKDE1MCk7CisgICAgICAgIGZpbmFsIFByb2Nlc3NCdWlsZGVyIHNjcmVlbmNhcCA9IG5ldyBQcm9jZXNzQnVpbGRlcigpCisgICAgICAgICAgICAgICAgLmNvbW1hbmQoIi9zeXN0ZW0vYmluL3NjcmVlbmNhcCIsICItcCIsIHNjcmVlbnNob3RGaWxlKTsKKyAgICAgICAgTG9nLmQoVEFHLCAiVGFraW5nIHNjcmVlbnNob3QgdXNpbmcgIiArIHNjcmVlbmNhcC5jb21tYW5kKCkpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgZmluYWwgaW50IGV4aXRWYWx1ZSA9IHNjcmVlbmNhcC5zdGFydCgpLndhaXRGb3IoKTsKKyAgICAgICAgICAgIGlmIChleGl0VmFsdWUgPT0gMCkgeworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgTG9nLmUoVEFHLCAic2NyZWVuY2FwICgiICsgc2NyZWVuY2FwLmNvbW1hbmQoKSArICIpIGZhaWxlZDogIiArIGV4aXRWYWx1ZSk7CisgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIExvZy5lKFRBRywgInNjcmVlbmNhcCAoIiArIHNjcmVlbmNhcC5jb21tYW5kKCkgKyAiKSBmYWlsZWQiLCBlKTsKKyAgICAgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgTG9nLncoVEFHLCAiVGhyZWFkIGludGVycnVwdGVkIHdoaWxlIHNjcmVlbmNhcCBzdGlsbCBydW5uaW5nIik7CisgICAgICAgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLmludGVycnVwdCgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICAvKioKQEAgLTg0Myw3ICsxMDcxLDcgQEAKICAgICAgICAgLyoqCiAgICAgICAgICAqIFNldHMgaXRzIGludGVybmFsIHN0YXRlIGFuZCBkaXNwbGF5cyB0aGUgZGlhbG9nLgogICAgICAgICAgKi8KLSAgICAgICAgcHJpdmF0ZSBzeW5jaHJvbml6ZWQgdm9pZCBpbml0aWFsaXplKENvbnRleHQgY29udGV4dCwgaW50IHBpZCwgU3RyaW5nIG5hbWUsIFN0cmluZyB0aXRsZSwKKyAgICAgICAgcHJpdmF0ZSB2b2lkIGluaXRpYWxpemUoQ29udGV4dCBjb250ZXh0LCBpbnQgcGlkLCBTdHJpbmcgbmFtZSwgU3RyaW5nIHRpdGxlLAogICAgICAgICAgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbikgewogICAgICAgICAgICAgLy8gRmlyc3QgaW5pdGlhbGl6ZXMgc2luZ2xldG9uLgogICAgICAgICAgICAgaWYgKG1EaWFsb2cgPT0gbnVsbCkgewpAQCAtOTM3LDcgKzExNjUsNyBAQAogICAgICAgICAgKiBTYW5pdGl6ZXMgdGhlIHVzZXItcHJvdmlkZWQgdmFsdWUgZm9yIHRoZSB7QGNvZGUgbmFtZX0gZmllbGQsIGF1dG9tYXRpY2FsbHkgcmVwbGFjaW5nCiAgICAgICAgICAqIGludmFsaWQgY2hhcmFjdGVycyBpZiBuZWNlc3NhcnkuCiAgICAgICAgICAqLwotICAgICAgICBwcml2YXRlIHN5bmNocm9uaXplZCB2b2lkIHNhbml0aXplTmFtZSgpIHsKKyAgICAgICAgcHJpdmF0ZSB2b2lkIHNhbml0aXplTmFtZSgpIHsKICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gbUluZm9OYW1lLmdldFRleHQoKS50b1N0cmluZygpOwogICAgICAgICAgICAgaWYgKG5hbWUuZXF1YWxzKG1UZW1wTmFtZSkpIHsKICAgICAgICAgICAgICAgICBpZiAoREVCVUcpIExvZy52KFRBRywgIm5hbWUgZGlkbid0IGNoYW5nZSwgbm8gbmVlZCB0byBzYW5pdGl6ZTogIiArIG5hbWUpOwpAQCAtOTczLDcgKzEyMDEsNyBAQAogICAgICAgICAgKiA8cD5PbmNlIHRoZSBidWdyZXBvcnQgaXMgZmluaXNoZWQgZHVtcHN0YXRlIGhhcyBhbHJlYWR5IGdlbmVyYXRlZCB0aGUgZmluYWwgZmlsZXMsIHNvCiAgICAgICAgICAqIGNoYW5naW5nIHRoZSBuYW1lIHdvdWxkIGhhdmUgbm8gZWZmZWN0LgogICAgICAgICAgKi8KLSAgICAgICAgcHJpdmF0ZSBzeW5jaHJvbml6ZWQgdm9pZCBvbkJ1Z3JlcG9ydEZpbmlzaGVkKGludCBwaWQpIHsKKyAgICAgICAgcHJpdmF0ZSB2b2lkIG9uQnVncmVwb3J0RmluaXNoZWQoaW50IHBpZCkgewogICAgICAgICAgICAgaWYgKG1JbmZvTmFtZSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgbUluZm9OYW1lLnNldEVuYWJsZWQoZmFsc2UpOwogICAgICAgICAgICAgICAgIG1JbmZvTmFtZS5zZXRUZXh0KG1TYXZlZE5hbWUpOwpAQCAtMTAzNCw5ICsxMjYyLDkgQEAKICAgICAgICAgRmlsZSBidWdyZXBvcnRGaWxlOwogCiAgICAgICAgIC8qKgotICAgICAgICAgKiBQYXRoIG9mIHRoZSBzY3JlZW5zaG90IGZpbGUuCisgICAgICAgICAqIFBhdGggb2YgdGhlIHNjcmVlbnNob3QgZmlsZXMuCiAgICAgICAgICAqLwotICAgICAgICBGaWxlIHNjcmVlbnNob3RGaWxlOworICAgICAgICBMaXN0PEZpbGU+IHNjcmVlbnNob3RGaWxlcyA9IG5ldyBBcnJheUxpc3Q8PigxKTsKIAogICAgICAgICAvKioKICAgICAgICAgICogV2hldGhlciBkdW1wc3RhdGUgc2VudCBhbiBpbnRlbnQgaW5mb3JtaW5nIGl0IGhhcyBmaW5pc2hlZC4KQEAgLTEwNDQsNiArMTI3MiwxMSBAQAogICAgICAgICBib29sZWFuIGZpbmlzaGVkOwogCiAgICAgICAgIC8qKgorICAgICAgICAgKiBJbnRlcm5hbCBjb3VudGVyIHVzZWQgdG8gbmFtZSBzY3JlZW5zaG90IGZpbGVzLgorICAgICAgICAgKi8KKyAgICAgICAgaW50IHNjcmVlbnNob3RDb3VudGVyOworCisgICAgICAgIC8qKgogICAgICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgdHJhY2tlZCBidWdyZXBvcnRzIC0gdHlwaWNhbGx5IGNhbGxlZCB1cG9uIHJlY2VpdmluZyBCVUdSRVBPUlRfU1RBUlRFRC4KICAgICAgICAgICovCiAgICAgICAgIEJ1Z3JlcG9ydEluZm8oQ29udGV4dCBjb250ZXh0LCBpbnQgcGlkLCBTdHJpbmcgbmFtZSwgaW50IG1heCkgewpAQCAtMTA2Miw2ICsxMjk1LDQ1IEBACiAgICAgICAgICAgICB0aGlzLmZpbmlzaGVkID0gdHJ1ZTsKICAgICAgICAgfQogCisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBuYW1lIGZvciBuZXh0IHNjcmVlbnNob3QgZmlsZS4KKyAgICAgICAgICovCisgICAgICAgIFN0cmluZyBnZXRQYXRoTmV4dFNjcmVlbnNob3QoKSB7CisgICAgICAgICAgICBzY3JlZW5zaG90Q291bnRlciArKzsKKyAgICAgICAgICAgIHJldHVybiAic2NyZWVuc2hvdC0iICsgcGlkICsgIi0iICsgc2NyZWVuc2hvdENvdW50ZXIgKyAiLnBuZyI7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogU2F2ZXMgdGhlIGxvY2F0aW9uIG9mIGEgdGFrZW4gc2NyZWVuc2hvdCBzbyBpdCBjYW4gYmUgc2VudCBvdXQgYXQgdGhlIGVuZC4KKyAgICAgICAgICovCisgICAgICAgIHZvaWQgYWRkU2NyZWVuc2hvdChGaWxlIHNjcmVlbnNob3QpIHsKKyAgICAgICAgICAgIHNjcmVlbnNob3RGaWxlcy5hZGQoc2NyZWVuc2hvdCk7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogUmVuYW1lIGFsbCBzY3JlZW5zaG90cyBmaWxlcyBzbyB0aGF0IHRoZXkgY29udGFpbiB0aGUgdXNlci1nZW5lcmF0ZWQgbmFtZSBpbnN0ZWFkIG9mIHBpZC4KKyAgICAgICAgICovCisgICAgICAgIHZvaWQgcmVuYW1lU2NyZWVuc2hvdHMoRmlsZSBzY3JlZW5zaG90RGlyKSB7CisgICAgICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkobmFtZSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaW5hbCBMaXN0PEZpbGU+IHJlbmFtZWRGaWxlcyA9IG5ldyBBcnJheUxpc3Q8PihzY3JlZW5zaG90RmlsZXMuc2l6ZSgpKTsKKyAgICAgICAgICAgIGZvciAoRmlsZSBvbGRGaWxlIDogc2NyZWVuc2hvdEZpbGVzKSB7CisgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIG9sZE5hbWUgPSBvbGRGaWxlLmdldE5hbWUoKTsKKyAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgbmV3TmFtZSA9IG9sZE5hbWUucmVwbGFjZShJbnRlZ2VyLnRvU3RyaW5nKHBpZCksIG5hbWUpOworICAgICAgICAgICAgICAgIGZpbmFsIEZpbGUgbmV3RmlsZTsKKyAgICAgICAgICAgICAgICBpZiAoIW5ld05hbWUuZXF1YWxzKG9sZE5hbWUpKSB7CisgICAgICAgICAgICAgICAgICAgIGZpbmFsIEZpbGUgcmVuYW1lZEZpbGUgPSBuZXcgRmlsZShzY3JlZW5zaG90RGlyLCBuZXdOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgbmV3RmlsZSA9IG9sZEZpbGUucmVuYW1lVG8ocmVuYW1lZEZpbGUpID8gcmVuYW1lZEZpbGUgOiBvbGRGaWxlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIExvZy53KFRBRywgIk5hbWUgZGlkbid0IGNoYW5nZTogIiArIG9sZE5hbWUpOyAvLyBTaG91bGRuJ3QgaGFwcGVuLgorICAgICAgICAgICAgICAgICAgICBuZXdGaWxlID0gb2xkRmlsZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmVuYW1lZEZpbGVzLmFkZChuZXdGaWxlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNjcmVlbnNob3RGaWxlcyA9IHJlbmFtZWRGaWxlczsKKyAgICAgICAgfQorCiAgICAgICAgIFN0cmluZyBnZXRGb3JtYXR0ZWRMYXN0VXBkYXRlKCkgewogICAgICAgICAgICAgcmV0dXJuIERhdGVVdGlscy5mb3JtYXREYXRlVGltZShjb250ZXh0LCBsYXN0VXBkYXRlLAogICAgICAgICAgICAgICAgICAgICBEYXRlVXRpbHMuRk9STUFUX1NIT1dfREFURSB8IERhdGVVdGlscy5GT1JNQVRfU0hPV19USU1FKTsKQEAgLTEwNzIsNyArMTM0NCw3IEBACiAgICAgICAgICAgICBmaW5hbCBmbG9hdCBwZXJjZW50ID0gKChmbG9hdCkgcHJvZ3Jlc3MgKiAxMDAgLyBtYXgpOwogICAgICAgICAgICAgcmV0dXJuICJwaWQ6ICIgKyBwaWQgKyAiLCBuYW1lOiAiICsgbmFtZSArICIsIGZpbmlzaGVkOiAiICsgZmluaXNoZWQKICAgICAgICAgICAgICAgICAgICAgKyAiXG5cdHRpdGxlOiAiICsgdGl0bGUgKyAiXG5cdGRlc2NyaXB0aW9uOiAiICsgZGVzY3JpcHRpb24KLSAgICAgICAgICAgICAgICAgICAgKyAiXG5cdGZpbGU6ICIgKyBidWdyZXBvcnRGaWxlICsgIlxuXHRzY3JlZW5zaG90OiAiICsgc2NyZWVuc2hvdEZpbGUKKyAgICAgICAgICAgICAgICAgICAgKyAiXG5cdGZpbGU6ICIgKyBidWdyZXBvcnRGaWxlICsgIlxuXHRzY3JlZW5zaG90czogIiArIHNjcmVlbnNob3RGaWxlcwogICAgICAgICAgICAgICAgICAgICArICJcblx0cHJvZ3Jlc3M6ICIgKyBwcm9ncmVzcyArICIvIiArIG1heCArICIoIiArIHBlcmNlbnQgKyAiKSIKICAgICAgICAgICAgICAgICAgICAgKyAiXG5cdGxhc3RfdXBkYXRlOiAiICsgZ2V0Rm9ybWF0dGVkTGFzdFVwZGF0ZSgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC90ZXN0cy9zcmMvY29tL2FuZHJvaWQvc2hlbGwvQnVncmVwb3J0UmVjZWl2ZXJUZXN0LmphdmEgYi9wYWNrYWdlcy9TaGVsbC90ZXN0cy9zcmMvY29tL2FuZHJvaWQvc2hlbGwvQnVncmVwb3J0UmVjZWl2ZXJUZXN0LmphdmEKaW5kZXggN2Y2MDlmYS4uOGU4OTI0YSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL3NoZWxsL0J1Z3JlcG9ydFJlY2VpdmVyVGVzdC5qYXZhCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9zaGVsbC9CdWdyZXBvcnRSZWNlaXZlclRlc3QuamF2YQpAQCAtMjUsNiArMjUsNyBAQAogaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zaGVsbC5CdWdyZXBvcnRQcm9ncmVzc1NlcnZpY2UuRVhUUkFfU0NSRUVOU0hPVDsKIGltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2hlbGwuQnVncmVwb3J0UHJvZ3Jlc3NTZXJ2aWNlLklOVEVOVF9CVUdSRVBPUlRfRklOSVNIRUQ7CiBpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNoZWxsLkJ1Z3JlcG9ydFByb2dyZXNzU2VydmljZS5JTlRFTlRfQlVHUkVQT1JUX1NUQVJURUQ7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNoZWxsLkJ1Z3JlcG9ydFByb2dyZXNzU2VydmljZS5TQ1JFRU5TSE9UX0RFTEFZX1NFQ09ORFM7CiAKIGltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkT3V0cHV0U3RyZWFtOwogaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRXcml0ZXI7CkBAIC0zNSw3ICszNiwxMCBAQAogaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CiBpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW1Xcml0ZXI7CiBpbXBvcnQgamF2YS5pby5Xcml0ZXI7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuU29ydGVkU2V0OworaW1wb3J0IGphdmEudXRpbC5UcmVlU2V0OwogaW1wb3J0IGphdmEudXRpbC56aXAuWmlwRW50cnk7CiBpbXBvcnQgamF2YS51dGlsLnppcC5aaXBJbnB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLnV0aWwuemlwLlppcE91dHB1dFN0cmVhbTsKQEAgLTU2LDYgKzYwLDcgQEAKIGltcG9ydCBhbmRyb2lkLnN1cHBvcnQudGVzdC51aWF1dG9tYXRvci5VaU9iamVjdDsKIGltcG9ydCBhbmRyb2lkLnRlc3QuSW5zdHJ1bWVudGF0aW9uVGVzdENhc2U7CiBpbXBvcnQgYW5kcm9pZC50ZXN0LnN1aXRlYnVpbGRlci5hbm5vdGF0aW9uLkxhcmdlVGVzdDsKK2ltcG9ydCBhbmRyb2lkLnRleHQuZm9ybWF0LkRhdGVVdGlsczsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCiBpbXBvcnQgY29tLmFuZHJvaWQuc2hlbGwuQWN0aW9uU2VuZE11bHRpcGxlQ29uc3VtZXJBY3Rpdml0eS5DdXN0b21BY3Rpb25TZW5kTXVsdGlwbGVMaXN0ZW5lcjsKQEAgLTEzNyw2ICsxNDIsNyBAQAogICAgIHB1YmxpYyB2b2lkIHRlc3RQcm9ncmVzcygpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICByZXNldFByb3BlcnRpZXMoKTsKICAgICAgICAgc2VuZEJ1Z3JlcG9ydFN0YXJ0ZWQoMTAwMCk7CisgICAgICAgIHdhaXRGb3JTY3JlZW5zaG90QnV0dG9uRW5hYmxlZCh0cnVlKTsKIAogICAgICAgICBhc3NlcnRQcm9ncmVzc05vdGlmaWNhdGlvbihOQU1FLCAiMC4wMCUiKTsKIApAQCAtMTUxLDcgKzE1NywyNSBAQAogCiAgICAgICAgIEJ1bmRsZSBleHRyYXMgPQogICAgICAgICAgICAgICAgIHNlbmRCdWdyZXBvcnRGaW5pc2hlZEFuZEdldFNoYXJlZEludGVudChQSUQsIG1QbGFpblRleHRQYXRoLCBtU2NyZWVuc2hvdFBhdGgpOwotICAgICAgICBhc3NlcnRBY3Rpb25TZW5kTXVsdGlwbGUoZXh0cmFzLCBCVUdSRVBPUlRfQ09OVEVOVCwgU0NSRUVOU0hPVF9DT05URU5UKTsKKyAgICAgICAgYXNzZXJ0QWN0aW9uU2VuZE11bHRpcGxlKGV4dHJhcywgQlVHUkVQT1JUX0ZJTEUsIEJVR1JFUE9SVF9DT05URU5ULCBQSUQsIE5BTUUsIFpJUF9GSUxFLAorICAgICAgICAgICAgICAgIG51bGwsIDEsIHRydWUpOworCisgICAgICAgIGFzc2VydFNlcnZpY2VOb3RSdW5uaW5nKCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdFByb2dyZXNzX3Rha2VFeHRyYVNjcmVlbnNob3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgcmVzZXRQcm9wZXJ0aWVzKCk7CisgICAgICAgIHNlbmRCdWdyZXBvcnRTdGFydGVkKDEwMDApOworCisgICAgICAgIHdhaXRGb3JTY3JlZW5zaG90QnV0dG9uRW5hYmxlZCh0cnVlKTsKKyAgICAgICAgdGFrZVNjcmVlbnNob3QoKTsKKyAgICAgICAgYXNzZXJ0U2NyZWVuc2hvdEJ1dHRvbkVuYWJsZWQoZmFsc2UpOworICAgICAgICB3YWl0Rm9yU2NyZWVuc2hvdEJ1dHRvbkVuYWJsZWQodHJ1ZSk7CisKKyAgICAgICAgQnVuZGxlIGV4dHJhcyA9CisgICAgICAgICAgICAgICAgc2VuZEJ1Z3JlcG9ydEZpbmlzaGVkQW5kR2V0U2hhcmVkSW50ZW50KFBJRCwgbVBsYWluVGV4dFBhdGgsIG1TY3JlZW5zaG90UGF0aCk7CisgICAgICAgIGFzc2VydEFjdGlvblNlbmRNdWx0aXBsZShleHRyYXMsIEJVR1JFUE9SVF9GSUxFLCBCVUdSRVBPUlRfQ09OVEVOVCwgUElELCBOQU1FLCBaSVBfRklMRSwKKyAgICAgICAgICAgICAgICBudWxsLCAyLCB0cnVlKTsKIAogICAgICAgICBhc3NlcnRTZXJ2aWNlTm90UnVubmluZygpOwogICAgIH0KQEAgLTE1OSw2ICsxODMsNyBAQAogICAgIHB1YmxpYyB2b2lkIHRlc3RQcm9ncmVzc19jaGFuZ2VEZXRhaWxzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIHJlc2V0UHJvcGVydGllcygpOwogICAgICAgICBzZW5kQnVncmVwb3J0U3RhcnRlZCgxMDAwKTsKKyAgICAgICAgd2FpdEZvclNjcmVlbnNob3RCdXR0b25FbmFibGVkKHRydWUpOwogCiAgICAgICAgIERldGFpbHNVaSBkZXRhaWxzVWkgPSBuZXcgRGV0YWlsc1VpKG1VaUJvdCk7CiAKQEAgLTE5NCwxNCArMjE5LDM0IEBACiAKICAgICAgICAgQnVuZGxlIGV4dHJhcyA9IHNlbmRCdWdyZXBvcnRGaW5pc2hlZEFuZEdldFNoYXJlZEludGVudChQSUQsIG1QbGFpblRleHRQYXRoLAogICAgICAgICAgICAgICAgIG1TY3JlZW5zaG90UGF0aCk7Ci0gICAgICAgIGFzc2VydEFjdGlvblNlbmRNdWx0aXBsZShleHRyYXMsIFRJVExFLCBtRGVzY3JpcHRpb24sIEJVR1JFUE9SVF9DT05URU5ULCBTQ1JFRU5TSE9UX0NPTlRFTlQpOworICAgICAgICBhc3NlcnRBY3Rpb25TZW5kTXVsdGlwbGUoZXh0cmFzLCBCVUdSRVBPUlRfRklMRSwgQlVHUkVQT1JUX0NPTlRFTlQsIFBJRCwgTkVXX05BTUUsIFRJVExFLAorICAgICAgICAgICAgICAgIG1EZXNjcmlwdGlvbiwgMSwgdHJ1ZSk7CiAKICAgICAgICAgYXNzZXJ0U2VydmljZU5vdFJ1bm5pbmcoKTsKICAgICB9CiAKKyAgICAvKioKKyAgICAgKiBUZXN0cyB0aGUgc2NlbmFyaW8gd2hlcmUgdGhlIGluaXRpYWwgc2NyZWVuc2hvdCBhbmQgZHVtcHN0YXRlIGFyZSBmaW5pc2hlZCB3aGlsZSB0aGUgdXNlcgorICAgICAqIGlzIGNoYW5naW5nIHRoZSBpbmZvIGluIHRoZSBkZXRhaWxzIHNjcmVlbi4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCB0ZXN0UHJvZ3Jlc3NfYnVncmVwb3J0QW5kU2NyZWVuc2hvdEZpbmlzaGVkV2hpbGVDaGFuZ2luZ0RldGFpbHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgYnVncmVwb3J0RmluaXNoZWRXaGlsZUNoYW5naW5nRGV0YWlsc1Rlc3QoZmFsc2UpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRlc3RzIHRoZSBzY2VuYXJpbyB3aGVyZSBkdW1wc3RhdGUgaXMgZmluaXNoZWQgd2hpbGUgdGhlIHVzZXIgaXMgY2hhbmdpbmcgdGhlIGluZm8gaW4gdGhlCisgICAgICogZGV0YWlscyBzY3JlZW4sIGJ1dCB0aGUgaW5pdGlhbCBzY3JlZW5zaG90IGZpbmlzaGVzIGFmdGVyd2FyZHMuCisgICAgICovCiAgICAgcHVibGljIHZvaWQgdGVzdFByb2dyZXNzX2J1Z3JlcG9ydEZpbmlzaGVkV2hpbGVDaGFuZ2luZ0RldGFpbHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgYnVncmVwb3J0RmluaXNoZWRXaGlsZUNoYW5naW5nRGV0YWlsc1Rlc3QodHJ1ZSk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGJ1Z3JlcG9ydEZpbmlzaGVkV2hpbGVDaGFuZ2luZ0RldGFpbHNUZXN0KGJvb2xlYW4gd2FpdFNjcmVlbnNob3QpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICByZXNldFByb3BlcnRpZXMoKTsKICAgICAgICAgc2VuZEJ1Z3JlcG9ydFN0YXJ0ZWQoMTAwMCk7CisgICAgICAgIGlmICh3YWl0U2NyZWVuc2hvdCkgeworICAgICAgICAgICAgd2FpdEZvclNjcmVlbnNob3RCdXR0b25FbmFibGVkKHRydWUpOworICAgICAgICB9CiAKICAgICAgICAgRGV0YWlsc1VpIGRldGFpbHNVaSA9IG5ldyBEZXRhaWxzVWkobVVpQm90KTsKIApAQCAtMjA5LDcgKzI1NCw3IEBACiAgICAgICAgIGRldGFpbHNVaS5uYW1lRmllbGQuc2V0VGV4dChORVdfTkFNRSk7CiAgICAgICAgIHNlbmRCdWdyZXBvcnRGaW5pc2hlZChQSUQsIG1QbGFpblRleHRQYXRoLCBtU2NyZWVuc2hvdFBhdGgpOwogCi0gICAgICAgIC8vIFdhaXQgdW50aWwgdGhlIHNoYXJlIG5vdGlmY2F0aW9uIGlzIHJlY2VpdmVkLi4uCisgICAgICAgIC8vIFdhaXQgdW50aWwgdGhlIHNoYXJlIG5vdGlmaWNhdGlvbiBpcyByZWNlaXZlZC4uLgogICAgICAgICBtVWlCb3QuZ2V0Tm90aWZpY2F0aW9uKG1Db250ZXh0LmdldFN0cmluZyhSLnN0cmluZy5idWdyZXBvcnRfZmluaXNoZWRfdGl0bGUpKTsKICAgICAgICAgLy8gLi4udGhlbiBjbG9zZSBub3RpZmljYXRpb24gYmFyLgogICAgICAgICBtQ29udGV4dC5zZW5kQnJvYWRjYXN0KG5ldyBJbnRlbnQoSW50ZW50LkFDVElPTl9DTE9TRV9TWVNURU1fRElBTE9HUykpOwpAQCAtMjI1LDggKzI3MCw4IEBACiAKICAgICAgICAgLy8gRmluYWxseSwgc2hhcmUgYnVncmVwb3J0LgogICAgICAgICBCdW5kbGUgZXh0cmFzID0gYWNjZXB0QnVncmVwb3J0QW5kR2V0U2hhcmVkSW50ZW50KCk7Ci0gICAgICAgIGFzc2VydEFjdGlvblNlbmRNdWx0aXBsZShleHRyYXMsIFRJVExFLCBtRGVzY3JpcHRpb24sIEJVR1JFUE9SVF9DT05URU5ULAotICAgICAgICAgICAgICAgIFNDUkVFTlNIT1RfQ09OVEVOVCk7CisgICAgICAgIGFzc2VydEFjdGlvblNlbmRNdWx0aXBsZShleHRyYXMsIEJVR1JFUE9SVF9GSUxFLCBCVUdSRVBPUlRfQ09OVEVOVCwgUElELCBOQU1FLCBUSVRMRSwKKyAgICAgICAgICAgICAgICBtRGVzY3JpcHRpb24sIDEsIHdhaXRTY3JlZW5zaG90KTsKIAogICAgICAgICBhc3NlcnRTZXJ2aWNlTm90UnVubmluZygpOwogICAgIH0KQEAgLTI4OCw3ICszMzMsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBhc3NlcnRQcm9ncmVzc05vdGlmaWNhdGlvbihTdHJpbmcgbmFtZSwgU3RyaW5nIHBlcmNlbnQpIHsKLSAgICAgICAgLy8gVE9ETzogaXQgY3VycmVudCBsb29rcyBmb3IgMyBkaXN0aW5jdCBvYmplY3RzLCB3aXRob3V0IHRha2luZyBhZHZhbnRhZ2Ugb2YgdGhlaXIKKyAgICAgICAgLy8gVE9ETzogaXQgY3VycmVudGx5IGxvb2tzIGZvciAzIGRpc3RpbmN0IG9iamVjdHMsIHdpdGhvdXQgdGFraW5nIGFkdmFudGFnZSBvZiB0aGVpcgogICAgICAgICAvLyByZWxhdGlvbnNoaXAuCiAgICAgICAgIG9wZW5Qcm9ncmVzc05vdGlmaWNhdGlvbigpOwogICAgICAgICBMb2cudihUQUcsICJMb29raW5nIGZvciBwcm9ncmVzcyBub3RpZmljYXRpb24gZGV0YWlsczogJyIgKyBuYW1lICsgIi0iICsgcGVyY2VudCArICInIik7CkBAIC0zMTEsNyArMzU2LDcgQEAKICAgICAvKioKICAgICAgKiBTZW5kcyBhICJidWdyZXBvcnQgc3RhcnRlZCIgaW50ZW50IHdpdGggdGhlIGRlZmF1bHQgdmFsdWVzLgogICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBzZW5kQnVncmVwb3J0U3RhcnRlZChpbnQgbWF4KSB7CisgICAgcHJpdmF0ZSB2b2lkIHNlbmRCdWdyZXBvcnRTdGFydGVkKGludCBtYXgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudChJTlRFTlRfQlVHUkVQT1JUX1NUQVJURUQpOwogICAgICAgICBpbnRlbnQucHV0RXh0cmEoRVhUUkFfUElELCBQSUQpOwogICAgICAgICBpbnRlbnQucHV0RXh0cmEoRVhUUkFfTkFNRSwgTkFNRSk7CkBAIC0zNzcsMTUgKzQyMiwzMCBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIEFzc2VydHMgdGhlIHByb3BlciBBQ1RJT05fU0VORF9NVUxUSVBMRSBpbnRlbnQgd2FzIHNlbnQuCisgICAgICogQXNzZXJ0cyB0aGUgcHJvcGVyIHtAbGluayBJbnRlbnQjQUNUSU9OX1NFTkRfTVVMVElQTEV9IGludGVudCB3YXMgc2VudC4KICAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgYXNzZXJ0QWN0aW9uU2VuZE11bHRpcGxlKEJ1bmRsZSBleHRyYXMsIFN0cmluZyBidWdyZXBvcnRDb250ZW50LAogICAgICAgICAgICAgU3RyaW5nIHNjcmVlbnNob3RDb250ZW50KSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICBhc3NlcnRBY3Rpb25TZW5kTXVsdGlwbGUoZXh0cmFzLCBaSVBfRklMRSwgbnVsbCwgYnVncmVwb3J0Q29udGVudCwgc2NyZWVuc2hvdENvbnRlbnQpOworICAgICAgICBhc3NlcnRBY3Rpb25TZW5kTXVsdGlwbGUoZXh0cmFzLCBidWdyZXBvcnRDb250ZW50LCBzY3JlZW5zaG90Q29udGVudCwgUElELCBudWxsLCBaSVBfRklMRSwKKyAgICAgICAgICAgICAgICBudWxsLCAwLCBmYWxzZSk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIGFzc2VydEFjdGlvblNlbmRNdWx0aXBsZShCdW5kbGUgZXh0cmFzLCBTdHJpbmcgc3ViamVjdCwgU3RyaW5nIGRlc2NyaXB0aW9uLAotICAgICAgICAgICAgU3RyaW5nIGJ1Z3JlcG9ydENvbnRlbnQsIFN0cmluZyBzY3JlZW5zaG90Q29udGVudCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAvKioKKyAgICAgKiBBc3NlcnRzIHRoZSBwcm9wZXIge0BsaW5rIEludGVudCNBQ1RJT05fU0VORF9NVUxUSVBMRX0gaW50ZW50IHdhcyBzZW50LgorICAgICAqCisgICAgICogQHBhcmFtIGV4dHJhcyBleHRyYXMgcmVjZWl2ZWQgaW4gdGhlIGludGVudAorICAgICAqIEBwYXJhbSBidWdyZXBvcnRDb250ZW50IGV4cGVjdGVkIGNvbnRlbnQgaW4gdGhlIGJ1Z3JlcG9ydCBmaWxlCisgICAgICogQHBhcmFtIHNjcmVlbnNob3RDb250ZW50IGV4cGVjdGVkIGNvbnRlbnQgaW4gdGhlIHNjcmVlbnNob3QgZmlsZSAoc2VudCBieSBkdW1wc3RhdGUpLCBpZiBhbnkKKyAgICAgKiBAcGFyYW0gcGlkIGVtdWxhdGVkIGR1bXBzdGF0ZSBwaWQKKyAgICAgKiBAcGFyYW0gbmFtZSBidWdyZXBvcnQgbmFtZSBhcyBwcm92aWRlZCBieSB0aGUgdXNlcgorICAgICAqIEBwYXJhbSB0aXRsZSBidWdyZXBvcnQgbmFtZSBhcyBwcm92aWRlZCBieSB0aGUgdXNlciAob3IgcmVjZWl2ZWQgYnkgZHVtcHN0YXRlKQorICAgICAqIEBwYXJhbSBkZXNjcmlwdGlvbiBidWdyZXBvcnQgZGVzY3JpcHRpb24gYXMgcHJvdmlkZWQgYnkgdGhlIHVzZXIKKyAgICAgKiBAcGFyYW0gbnVtYmVyU2NyZWVuc2hvdHMgZXhwZWN0ZWQgbnVtYmVyIG9mIHNjcmVlbnNob3RzIHRha2VuIGJ5IFNoZWxsLgorICAgICAqIEBwYXJhbSByZW5hbWVkU2NyZWVuc2hvdHMgd2hldGhlciB0aGUgc2NyZWVuc2hvdHMgYXJlIGV4cGVjdGVkIHRvIGJlIHJlbmFtZWQKKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgYXNzZXJ0QWN0aW9uU2VuZE11bHRpcGxlKEJ1bmRsZSBleHRyYXMsIFN0cmluZyBidWdyZXBvcnRDb250ZW50LAorICAgICAgICAgICAgU3RyaW5nIHNjcmVlbnNob3RDb250ZW50LCBpbnQgcGlkLCBTdHJpbmcgbmFtZSwgU3RyaW5nIHRpdGxlLCBTdHJpbmcgZGVzY3JpcHRpb24sCisgICAgICAgICAgICBpbnQgbnVtYmVyU2NyZWVuc2hvdHMsIGJvb2xlYW4gcmVuYW1lZFNjcmVlbnNob3RzKSB0aHJvd3MgSU9FeGNlcHRpb24gewogICAgICAgICBTdHJpbmcgYm9keSA9IGV4dHJhcy5nZXRTdHJpbmcoSW50ZW50LkVYVFJBX1RFWFQpOwogICAgICAgICBhc3NlcnRDb250YWluc1JlZ2V4KCJtaXNzaW5nIGJ1aWxkIGluZm8iLAogICAgICAgICAgICAgICAgIFN5c3RlbVByb3BlcnRpZXMuZ2V0KCJyby5idWlsZC5kZXNjcmlwdGlvbiIpLCBib2R5KTsKQEAgLTM5NSwzMSArNDU1LDYxIEBACiAgICAgICAgICAgICBhc3NlcnRDb250YWluc1JlZ2V4KCJtaXNzaW5nIGRlc2NyaXB0aW9uIiwgZGVzY3JpcHRpb24sIGJvZHkpOwogICAgICAgICB9CiAKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJ3cm9uZyBzdWJqZWN0Iiwgc3ViamVjdCwgZXh0cmFzLmdldFN0cmluZyhJbnRlbnQuRVhUUkFfU1VCSkVDVCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoIndyb25nIHN1YmplY3QiLCB0aXRsZSwgZXh0cmFzLmdldFN0cmluZyhJbnRlbnQuRVhUUkFfU1VCSkVDVCkpOwogCiAgICAgICAgIExpc3Q8VXJpPiBhdHRhY2htZW50cyA9IGV4dHJhcy5nZXRQYXJjZWxhYmxlQXJyYXlMaXN0KEludGVudC5FWFRSQV9TVFJFQU0pOwotICAgICAgICBpbnQgZXhwZWN0ZWRTaXplID0gc2NyZWVuc2hvdENvbnRlbnQgIT0gbnVsbCA/IDIgOiAxOworICAgICAgICBpbnQgZXhwZWN0ZWROdW1iZXJTY3JlZW5zaG90cyA9IG51bWJlclNjcmVlbnNob3RzOworICAgICAgICBpZiAoc2NyZWVuc2hvdENvbnRlbnQgIT0gbnVsbCkgeworICAgICAgICAgICAgZXhwZWN0ZWROdW1iZXJTY3JlZW5zaG90cyArKzsgLy8gQWRkIHNjcmVlbnNob3QgcmVjZWl2ZWQgYnkgZHVtcHN0YXRlCisgICAgICAgIH0KKyAgICAgICAgaW50IGV4cGVjdGVkU2l6ZSA9IGV4cGVjdGVkTnVtYmVyU2NyZWVuc2hvdHMgKyAxOyAvLyBBbGwgc2NyZWVuc2hvdHMgcGx1cyB0aGUgYnVncmVwb3J0IGZpbGUKICAgICAgICAgYXNzZXJ0RXF1YWxzKCJ3cm9uZyBudW1iZXIgb2YgYXR0YWNobWVudHMiLCBleHBlY3RlZFNpemUsIGF0dGFjaG1lbnRzLnNpemUoKSk7CiAKICAgICAgICAgLy8gTmVlZCB0byBpbnRlcmFjdCB0aHJvdWdoIGFsbCBhdHRhY2htZW50cywgc2luY2Ugb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQuCi0gICAgICAgIFVyaSB6aXBVcmkgPSBudWxsLCBzY3JlZW5zaG90VXJpID0gbnVsbDsKKyAgICAgICAgVXJpIHppcFVyaSA9IG51bGw7CisgICAgICAgIExpc3Q8VXJpPiBzY3JlZW5zaG90VXJpcyA9IG5ldyBBcnJheUxpc3Q8PihleHBlY3RlZE51bWJlclNjcmVlbnNob3RzKTsKICAgICAgICAgZm9yIChVcmkgYXR0YWNobWVudCA6IGF0dGFjaG1lbnRzKSB7CiAgICAgICAgICAgICBpZiAoYXR0YWNobWVudC5nZXRQYXRoKCkuZW5kc1dpdGgoIi56aXAiKSkgewogICAgICAgICAgICAgICAgIHppcFVyaSA9IGF0dGFjaG1lbnQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoYXR0YWNobWVudC5nZXRQYXRoKCkuZW5kc1dpdGgoIi5wbmciKSkgewotICAgICAgICAgICAgICAgIHNjcmVlbnNob3RVcmkgPSBhdHRhY2htZW50OworICAgICAgICAgICAgICAgIHNjcmVlbnNob3RVcmlzLmFkZChhdHRhY2htZW50KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBhc3NlcnROb3ROdWxsKCJkaWQgbm90IGdldCAuemlwIGF0dGFjaG1lbnQiLCB6aXBVcmkpOwogICAgICAgICBhc3NlcnRaaXBDb250ZW50KHppcFVyaSwgQlVHUkVQT1JUX0ZJTEUsIEJVR1JFUE9SVF9DT05URU5UKTsKIAotICAgICAgICBpZiAoc2NyZWVuc2hvdENvbnRlbnQgIT0gbnVsbCkgewotICAgICAgICAgICAgYXNzZXJ0Tm90TnVsbCgiZGlkIG5vdCBnZXQgLnBuZyBhdHRhY2htZW50Iiwgc2NyZWVuc2hvdFVyaSk7Ci0gICAgICAgICAgICBhc3NlcnRDb250ZW50KHNjcmVlbnNob3RVcmksIFNDUkVFTlNIT1RfQ09OVEVOVCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBhc3NlcnROdWxsKCJzaG91bGQgbm90IGhhdmUgLnBuZyBhdHRhY2htZW50Iiwgc2NyZWVuc2hvdFVyaSk7CisgICAgICAgIC8vIFVSSSBvZiB0aGUgc2NyZWVuc2hvdCB0YWtlbiBieSBkdW1wc3RhdGUuCisgICAgICAgIFVyaSBleHRlcm5hbFNjcmVlbnNob3RVcmkgPSBudWxsOworICAgICAgICBTb3J0ZWRTZXQ8U3RyaW5nPiBpbnRlcm5hbFNjcmVlbnNob3ROYW1lcyA9IG5ldyBUcmVlU2V0PD4oKTsKKyAgICAgICAgZm9yIChVcmkgc2NyZWVuc2hvdFVyaSA6IHNjcmVlbnNob3RVcmlzKSB7CisgICAgICAgICAgICBTdHJpbmcgc2NyZWVuc2hvdE5hbWUgPSBzY3JlZW5zaG90VXJpLmdldExhc3RQYXRoU2VnbWVudCgpOworICAgICAgICAgICAgaWYgKHNjcmVlbnNob3ROYW1lLmVuZHNXaXRoKFNDUkVFTlNIT1RfRklMRSkpIHsKKyAgICAgICAgICAgICAgICBleHRlcm5hbFNjcmVlbnNob3RVcmkgPSBzY3JlZW5zaG90VXJpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbnRlcm5hbFNjcmVlbnNob3ROYW1lcy5hZGQoc2NyZWVuc2hvdE5hbWUpOworICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIC8vIENoZWNrIGV4dGVybmFsIHNjcmVlbnNob3QKKyAgICAgICAgaWYgKHNjcmVlbnNob3RDb250ZW50ICE9IG51bGwpIHsKKyAgICAgICAgICAgIGFzc2VydE5vdE51bGwoImRpZCBub3QgZ2V0IC5wbmcgYXR0YWNobWVudCBmb3IgZXh0ZXJuYWwgc2NyZWVuc2hvdCIsCisgICAgICAgICAgICAgICAgICAgIGV4dGVybmFsU2NyZWVuc2hvdFVyaSk7CisgICAgICAgICAgICBhc3NlcnRDb250ZW50KGV4dGVybmFsU2NyZWVuc2hvdFVyaSwgU0NSRUVOU0hPVF9DT05URU5UKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFzc2VydE51bGwoInNob3VsZCBub3QgaGF2ZSAucG5nIGF0dGFjaG1lbnQgZm9yIGV4dGVybmFsIHNjcmVlbnNob3QiLAorICAgICAgICAgICAgICAgICAgICBleHRlcm5hbFNjcmVlbnNob3RVcmkpOworICAgICAgICB9CisgICAgICAgIC8vIENoZWNrIGludGVybmFsIHNjcmVlbnNob3RzLgorICAgICAgICBTb3J0ZWRTZXQ8U3RyaW5nPiBleHBlY3RlZE5hbWVzID0gbmV3IFRyZWVTZXQ8PigpOworICAgICAgICBmb3IgKGludCBpID0gMSA7IGkgPD0gbnVtYmVyU2NyZWVuc2hvdHM7IGkrKykgeworICAgICAgICAgICAgU3RyaW5nIHByZWZpeCA9IHJlbmFtZWRTY3JlZW5zaG90cyAgPyBuYW1lIDogSW50ZWdlci50b1N0cmluZyhwaWQpOworICAgICAgICAgICAgU3RyaW5nIGV4cGVjdGVkTmFtZSA9ICJzY3JlZW5zaG90LSIgKyBwcmVmaXggKyAiLSIgKyBpICsgIi5wbmciOworICAgICAgICAgICAgZXhwZWN0ZWROYW1lcy5hZGQoZXhwZWN0ZWROYW1lKTsKKyAgICAgICAgfQorICAgICAgICAvLyBJZGVhbGx5IHdlIHNob3VsZCB1c2UgTW9yZUFzc2VydHMsIGJ1dCB0aGUgZXJyb3IgbWVzc2FnZSBpbiBjYXNlIG9mIGZhaWx1cmUgaXMgbm90CisgICAgICAgIC8vIHJlYWxseSB1c2VmdWwuCisgICAgICAgIGFzc2VydEVxdWFscygid3JvbmcgbmFtZXMgZm9yIGludGVybmFsIHNjcmVlbnNob3RzIiwKKyAgICAgICAgICAgICAgICBleHBlY3RlZE5hbWVzLCBpbnRlcm5hbFNjcmVlbnNob3ROYW1lcyk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGFzc2VydENvbnRlbnQoVXJpIHVyaSwgU3RyaW5nIGV4cGVjdGVkQ29udGVudCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKQEAgLTUwNiw2ICs1OTYsNDcgQEAKICAgICB9CiAKICAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBub3RpZmljYXRpb24gYnV0dG9uIHVzZWQgdG8gdGFrZSBhIHNjcmVlbnNob3QuCisgICAgICovCisgICAgcHJpdmF0ZSBVaU9iamVjdCBnZXRTY3JlZW5zaG90QnV0dG9uKCkgeworICAgICAgICBvcGVuUHJvZ3Jlc3NOb3RpZmljYXRpb24oKTsKKyAgICAgICAgcmV0dXJuIG1VaUJvdC5nZXRWaXNpYmxlT2JqZWN0KAorICAgICAgICAgICAgICAgIG1Db250ZXh0LmdldFN0cmluZyhSLnN0cmluZy5idWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24pLnRvVXBwZXJDYXNlKCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRha2VzIGEgc2NyZWVuc2hvdCB1c2luZyB0aGUgc3lzdGVtIG5vdGlmaWNhdGlvbi4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgdGFrZVNjcmVlbnNob3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgVWlPYmplY3Qgc2NyZWVuc2hvdEJ1dHRvbiA9IGdldFNjcmVlbnNob3RCdXR0b24oKTsKKyAgICAgICAgbVVpQm90LmNsaWNrKHNjcmVlbnNob3RCdXR0b24sICJzY3JlZW5zaG90X2J1dHRvbiIpOworICAgIH0KKworICAgIHByaXZhdGUgVWlPYmplY3Qgd2FpdEZvclNjcmVlbnNob3RCdXR0b25FbmFibGVkKGJvb2xlYW4gZXhwZWN0ZWRFbmFibGVkKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgVWlPYmplY3Qgc2NyZWVuc2hvdEJ1dHRvbiA9IGdldFNjcmVlbnNob3RCdXR0b24oKTsKKyAgICAgICAgaW50IG1heEF0dGVtcHRzID0gU0NSRUVOU0hPVF9ERUxBWV9TRUNPTkRTICsgNTsKKyAgICAgICAgaW50IGkgPSAwOworICAgICAgICBkbyB7CisgICAgICAgICAgICBib29sZWFuIGVuYWJsZWQgPSBzY3JlZW5zaG90QnV0dG9uLmlzRW5hYmxlZCgpOworICAgICAgICAgICAgaWYgKGVuYWJsZWQgPT0gZXhwZWN0ZWRFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHNjcmVlbnNob3RCdXR0b247CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpKys7CisgICAgICAgICAgICBMb2cudihUQUcsICJTbGVlcGluZyBmb3IgMSBzZWNvbmQgd2hpbGUgd2FpdGluZyBmb3Igc2NyZWVuc2hvdC5lbmFibGUgdG8gYmUgIgorICAgICAgICAgICAgICAgICAgICArIGV4cGVjdGVkRW5hYmxlZCArICIgKGF0dGVtcHQgIiArIGkgKyAiKSIpOworICAgICAgICAgICAgVGhyZWFkLnNsZWVwKERhdGVVdGlscy5TRUNPTkRfSU5fTUlMTElTKTsKKyAgICAgICAgfSB3aGlsZSAoaSA8PSBtYXhBdHRlbXB0cyk7CisgICAgICAgIGZhaWwoInNjcmVlbnNob3QuZW5hYmxlIGRpZG4ndCBjaGFuZ2UgdG8gIiArIGV4cGVjdGVkRW5hYmxlZCArICIgaW4gIiArIG1heEF0dGVtcHRzICsgInMiKTsKKyAgICAgICAgcmV0dXJuIHNjcmVlbnNob3RCdXR0b247CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGFzc2VydFNjcmVlbnNob3RCdXR0b25FbmFibGVkKGJvb2xlYW4gZXhwZWN0ZWRFbmFibGVkKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgVWlPYmplY3Qgc2NyZWVuc2hvdEJ1dHRvbiA9IGdldFNjcmVlbnNob3RCdXR0b24oKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJ3cm9uZyBzdGF0ZSBmb3Igc2NyZWVuc2hvdCBidXR0b24gIiwgZXhwZWN0ZWRFbmFibGVkLAorICAgICAgICAgICAgICAgIHNjcmVlbnNob3RCdXR0b24uaXNFbmFibGVkKCkpOworICAgIH0KKworICAgIC8qKgogICAgICAqIEhlbHBlciBjbGFzcyBjb250YWluaW5nIHRoZSBVaU9iamVjdHMgcHJlc2VudCBpbiB0aGUgYnVncmVwb3J0IGluZm8gZGlhbG9nLgogICAgICAqLwogICAgIHByaXZhdGUgZmluYWwgY2xhc3MgRGV0YWlsc1VpIHsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL0FuZHJvaWRNYW5pZmVzdC54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9BbmRyb2lkTWFuaWZlc3QueG1sCmluZGV4IDAyZGRhZTYuLjk1NDZjOGQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL0FuZHJvaWRNYW5pZmVzdC54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvQW5kcm9pZE1hbmlmZXN0LnhtbApAQCAtMTM5LDYgKzEzOSw5IEBACiAgICAgPCEtLSBBZGRpbmcgUXVpY2sgU2V0dGluZ3MgdGlsZXMgLS0+CiAgICAgPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5CSU5EX1FVSUNLX1NFVFRJTkdTX1RJTEUiIC8+CiAKKyAgICA8IS0tIEJsb2NrIG5vdGlmaWNhdGlvbnMgaW5saW5lIG5vdGlmaWNhdGlvbnMgLS0+CisgICAgPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5VUERBVEVfQVBQX09QU19TVEFUUyIgLz4KKwogICAgIDxhcHBsaWNhdGlvbgogICAgICAgICBhbmRyb2lkOm5hbWU9Ii5TeXN0ZW1VSUFwcGxpY2F0aW9uIgogICAgICAgICBhbmRyb2lkOnBlcnNpc3RlbnQ9InRydWUiCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19zeXNiYXJfZG9ja2VkLnBuZyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX3N5c2Jhcl9kb2NrZWQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzYmUyZWUKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19zeXNiYXJfZG9ja2VkLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUvZG9ja2VkX2RpdmlkZXJfaGFuZGxlLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS9kb2NrZWRfZGl2aWRlcl9oYW5kbGUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NGMwMzQzLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS9kb2NrZWRfZGl2aWRlcl9oYW5kbGUueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPCEtLQotQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIgKHRoZSAiTGljZW5zZSIpOwotICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0tLT4KLTxzaGFwZSB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgICAgIGFuZHJvaWQ6c2hhcGU9InJlY3RhbmdsZSI+Ci0gICAgPHNpemUgYW5kcm9pZDpoZWlnaHQ9IkBkaW1lbi9kb2NrZWRfZGl2aWRlcl9oYW5kbGVfaGVpZ2h0IgotICAgICAgICBhbmRyb2lkOndpZHRoPSJAZGltZW4vZG9ja2VkX2RpdmlkZXJfaGFuZGxlX3dpZHRoIiAvPgotICAgIDxjb3JuZXJzIGFuZHJvaWQ6cmFkaXVzPSIxZHAiIC8+Ci0gICAgPHNvbGlkIGFuZHJvaWQ6Y29sb3I9IkBjb2xvci9kb2NrZWRfZGl2aWRlcl9oYW5kbGUiIC8+Ci08L3NoYXBlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS9pY19jb2xvcml6ZS54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUvaWNfY29sb3JpemUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5ZmQ2ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUvaWNfY29sb3JpemUueG1sCkBAIC0wLDAgKzEsMjQgQEAKKzwhLS0KKyAgICBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPHZlY3RvciB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgICAgIGFuZHJvaWQ6d2lkdGg9IjI0LjBkcCIKKyAgICAgICAgYW5kcm9pZDpoZWlnaHQ9IjI0LjBkcCIKKyAgICAgICAgYW5kcm9pZDp2aWV3cG9ydFdpZHRoPSIyNC4wIgorICAgICAgICBhbmRyb2lkOnZpZXdwb3J0SGVpZ2h0PSIyNC4wIj4KKyAgICA8cGF0aAorICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iI0ZGRkZGRkZGIgorICAgICAgICBhbmRyb2lkOnBhdGhEYXRhPSJNMjAuNzEsNS42M2wtMi4zNCwtMi4zNGMtMC4zOSwtMC4zOSAtMS4wMiwtMC4zOSAtMS40MSwwLjBsLTMuMTIsMy4xMiAtMS45MywtMS45MSAtMS40MSwxLjQxIDEuNDIsMS40MkwzLjAsMTYuMjVMMy4wLDIxLjBsNC43NSwwLjBsOC45MiwtOC45MiAxLjQyLDEuNDIgMS40MSwtMS40MSAtMS45MiwtMS45MiAzLjEyLC0zLjEyYzAuNCwwLjAgMC40LC0xLjAgMC4wMSwtMS40MnpNNi45MiwxOS4wTDUuMCwxNy4wOGw4LjA2LC04LjA2IDEuOTIsMS45Mkw2LjkyLDE5LjB6Ii8+Cis8L3ZlY3Rvcj4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQvYXNzaXN0X29yYi54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L2Fzc2lzdF9vcmIueG1sCmluZGV4IGFiMGEwYTViLi4wMDM2ZWQ2IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L2Fzc2lzdF9vcmIueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQvYXNzaXN0X29yYi54bWwKQEAgLTEsNiArMSw1IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgogPCEtLQotLyogYXBwcy9jb21tb24vYXNzZXRzL2RlZmF1bHQvZGVmYXVsdC9za2lucy9TdGF0dXNCYXIueG1sCiAqKgogKiogQ29weXJpZ2h0IDIwMTIsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKICoqCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L2RvY2tlZF9zdGFja19kaXZpZGVyLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQvZG9ja2VkX3N0YWNrX2RpdmlkZXIueG1sCmluZGV4IDIyZWQyMTYuLjdlYTUwMjcgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQvZG9ja2VkX3N0YWNrX2RpdmlkZXIueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQvZG9ja2VkX3N0YWNrX2RpdmlkZXIueG1sCkBAIC0yNCwxMCArMjQsOSBAQAogICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2RvY2tlZF9kaXZpZGVyX2JhY2tncm91bmQiCiAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGNvbG9yL2RvY2tlZF9kaXZpZGVyX2JhY2tncm91bmQiLz4KIAotICAgIDxJbWFnZUJ1dHRvbgorICAgIDxjb20uYW5kcm9pZC5zeXN0ZW11aS5zdGFja2RpdmlkZXIuRGl2aWRlckhhbmRsZVZpZXcKICAgICAgICAgc3R5bGU9IkBzdHlsZS9Eb2NrZWREaXZpZGVySGFuZGxlIgogICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2RvY2tlZF9kaXZpZGVyX2hhbmRsZSIKLSAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAbnVsbCIKLSAgICAgICAgYW5kcm9pZDpzcmM9IkBkcmF3YWJsZS9kb2NrZWRfZGl2aWRlcl9oYW5kbGUiLz4KKyAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAbnVsbCIvPgogCiA8L2NvbS5hbmRyb2lkLnN5c3RlbXVpLnN0YWNrZGl2aWRlci5EaXZpZGVyVmlldz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQvbW9iaWxlX3NpZ25hbF9ncm91cC54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L21vYmlsZV9zaWduYWxfZ3JvdXAueG1sCmluZGV4IDZhZTVjZjMuLmEyMGVjOGUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQvbW9iaWxlX3NpZ25hbF9ncm91cC54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC9tb2JpbGVfc2lnbmFsX2dyb3VwLnhtbApAQCAtMSw2ICsxLDUgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+CiA8IS0tCi0vKiBhcHBzL2NvbW1vbi9hc3NldHMvZGVmYXVsdC9kZWZhdWx0L3NraW5zL1N0YXR1c0Jhci54bWwKICoqCiAqKiBDb3B5cmlnaHQgMjAxMSwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAogKioKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQvbmF2aWdhdGlvbl9iYXIueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC9uYXZpZ2F0aW9uX2Jhci54bWwKaW5kZXggZDU4NjY0Zi4uODQ5OGE0ZiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC9uYXZpZ2F0aW9uX2Jhci54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC9uYXZpZ2F0aW9uX2Jhci54bWwKQEAgLTEsNiArMSw1IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgogPCEtLQotLyogYXBwcy9jb21tb24vYXNzZXRzL2RlZmF1bHQvZGVmYXVsdC9za2lucy9TdGF0dXNCYXIueG1sCiAqKgogKiogQ29weXJpZ2h0IDIwMTEsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKICoqCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L25vdGlmaWNhdGlvbl9ndXRzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQvbm90aWZpY2F0aW9uX2d1dHMueG1sCmluZGV4IGM5ZGJjNzkuLjA3MWI3YzggMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQvbm90aWZpY2F0aW9uX2d1dHMueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQvbm90aWZpY2F0aW9uX2d1dHMueG1sCkBAIC0yNCw0MiArMjQsMjcgQEAKICAgICAgICAgYW5kcm9pZDpjbGlja2FibGU9InRydWUiCiAgICAgICAgIGFuZHJvaWQ6Z3Jhdml0eT0idG9wfHN0YXJ0IgogICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICAgICAgYW5kcm9pZDpwYWRkaW5nRW5kPSI4ZHAiCisgICAgICAgIGFuZHJvaWQ6cGFkZGluZ1N0YXJ0PSJAKmFuZHJvaWQ6ZGltZW4vbm90aWZpY2F0aW9uX2NvbnRlbnRfbWFyZ2luX3N0YXJ0IgorICAgICAgICBhbmRyb2lkOnBhZGRpbmdFbmQ9IkAqYW5kcm9pZDpkaW1lbi9ub3RpZmljYXRpb25fY29udGVudF9tYXJnaW5fZW5kIgogICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBjb2xvci9ub3RpZmljYXRpb25fZ3V0c190ZXh0X2NvbG9yIiA+CiAKICAgICA8IS0tIGhlYWRlciAtLT4KLSAgICA8RnJhbWVMYXlvdXQKKyAgICA8TGluZWFyTGF5b3V0CiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICBhbmRyb2lkOnBhZGRpbmdTdGFydD0iQCphbmRyb2lkOmRpbWVuL25vdGlmaWNhdGlvbl9jb250ZW50X21hcmdpbl9zdGFydCIKKyAgICAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ0JvdHRvbT0iOGRwIgogICAgICAgICAgICAgYW5kcm9pZDpwYWRkaW5nVG9wPSI4ZHAiCi0gICAgICAgICAgICBhbmRyb2lkOnBhZGRpbmdCb3R0b209IjE2ZHAiID4KKyAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvbm90aWZpY2F0aW9uX2d1dHNfaGVhZGVyIgorICAgICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2dyYXZpdHk9ImNlbnRlcl92ZXJ0aWNhbHxzdGFydCI+CiAKLSAgICAgICAgPExpbmVhckxheW91dAotICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9ub3RpZmljYXRpb25fZ3V0c19oZWFkZXIiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfZ3Jhdml0eT0iY2VudGVyX3ZlcnRpY2FsfHN0YXJ0IgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbkVuZD0iNTJkcCI+Ci0KLSAgICAgICAgICAgICAgICA8TGluZWFyTGF5b3V0Ci0gICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL25vdGlmaWNhdGlvbl9ndXRzX2FwcF9kZXRhaWxzIgotICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKLSAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCi0gICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6Y2xpcENoaWxkcmVuPSJmYWxzZSIKLSAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2dyYXZpdHk9InN0YXJ0fHRvcCIKLSAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyX3ZlcnRpY2FsIgotICAgICAgICAgICAgICAgICAgICAgICAgPgotCi0gICAgICAgICAgICAgICAgICAgIDxJbWFnZVZpZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmlkPSJAYW5kcm9pZDppZC9pY29uIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSIxOGRwIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iMThkcCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5FbmQ9IjNkcCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOnNyYz0iQGFuZHJvaWQ6ZHJhd2FibGUvYXJyb3dfZG93bl9mbG9hdCIgLz4KLSAgICAgICAgICAgICAgICAgICAgPFRleHRWaWV3CisgICAgICAgIDxJbWFnZVZpZXcKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmlkPSJAYW5kcm9pZDppZC9pY29uIgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSIxOGRwIgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iMThkcCIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5FbmQ9IjNkcCIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOnNyYz0iQGFuZHJvaWQ6ZHJhd2FibGUvYXJyb3dfZG93bl9mbG9hdCIgLz4KKyAgICAgICAgPFRleHRWaWV3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9wa2duYW1lIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCkBAIC02Nyw3ICs1Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luU3RhcnQ9IjNkcCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5FbmQ9IjRkcCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOnRleHRDb2xvcj0iQGNvbG9yL25vdGlmaWNhdGlvbl9ndXRzX3RpdGxlX2NvbG9yIiAvPgotICAgICAgICAgICAgICAgICAgICA8VGV4dFZpZXcKKyAgICAgICAgPFRleHRWaWV3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2RlYnVnX2luZm8iCkBAIC03NiwzNCArNjEsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9ncmF2aXR5PSJib3R0b218c3RhcnQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDp2aXNpYmlsaXR5PSJnb25lIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dENvbG9yPSIjZmZmZmZmIiAvPgotICAgICAgICAgICAgICAgIDwvTGluZWFyTGF5b3V0PgotCi0gICAgICAgICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3RvcGljX2RldGFpbHMiCi0gICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgotICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOnRleHRBcHBlYXJhbmNlPSJAYW5kcm9pZDpzdHlsZS9UZXh0QXBwZWFyYW5jZS5NYXRlcmlhbC5Ob3RpZmljYXRpb24uVGl0bGUiCi0gICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOnRleHRDb2xvcj0iQGNvbG9yL25vdGlmaWNhdGlvbl9ndXRzX3RleHRfY29sb3IiCi0gICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9hbGlnblBhcmVudEJvdHRvbT0idHJ1ZSIKLSAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2FsaWduUGFyZW50U3RhcnQ9InRydWUiIC8+Ci0gICAgICAgICAgICA8L0xpbmVhckxheW91dD4KLQotICAgICAgICA8SW1hZ2VCdXR0b24gc3R5bGU9IkBhbmRyb2lkOnN0eWxlL1dpZGdldC5NYXRlcmlhbC5MaWdodC5CdXR0b24uQm9yZGVybGVzcy5TbWFsbCIKLSAgICAgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW0iCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjUyZHAiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIwIgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyIgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2dyYXZpdHk9ImNlbnRlcl92ZXJ0aWNhbHxlbmQiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpjb250ZW50RGVzY3JpcHRpb249IkBzdHJpbmcvc3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5zcGVjdF9pdGVtX3RpdGxlIgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6c3JjPSJAZHJhd2FibGUvaWNfc2V0dGluZ3MiIC8+Ci0gICAgPC9GcmFtZUxheW91dD4KKyAgICA8L0xpbmVhckxheW91dD4KICAgICA8IS0tIEltcG9ydGFuY2Ugc2xpZGVyIC0tPgogICAgIDxMaW5lYXJMYXlvdXQKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyX3ZlcnRpY2FsIgotICAgICAgICAgICAgYW5kcm9pZDpwYWRkaW5nU3RhcnQ9IkAqYW5kcm9pZDpkaW1lbi9ub3RpZmljYXRpb25fY29udGVudF9tYXJnaW5fc3RhcnQiCiAgICAgICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKICAgICAgICAgICAgIGFuZHJvaWQ6Y2xpY2thYmxlPSJmYWxzZSIKICAgICAgICAgICAgIGFuZHJvaWQ6Zm9jdXNhYmxlPSJmYWxzZSIKQEAgLTExNiw4ICs3OSw3IEBACiAgICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0QXBwZWFyYW5jZT0iQGFuZHJvaWQ6c3R5bGUvVGV4dEFwcGVhcmFuY2UuTWF0ZXJpYWwuU3ViaGVhZCIKICAgICAgICAgICAgICAgICBhbmRyb2lkOnRleHRDb2xvcj0iQGNvbG9yL25vdGlmaWNhdGlvbl9ndXRzX3RleHRfY29sb3IiCiAgICAgICAgICAgICAgICAgYW5kcm9pZDplbGxpcHNpemU9Im1hcnF1ZWUiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpmYWRpbmdFZGdlPSJob3Jpem9udGFsIgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQCphbmRyb2lkOnN0cmluZy9ub3RpZmljYXRpb25faW1wb3J0YW5jZV90aXRsZSIvPgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6ZmFkaW5nRWRnZT0iaG9yaXpvbnRhbCIvPgogCiAgICAgICAgIDxUZXh0VmlldwogICAgICAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvc3VtbWFyeSIKQEAgLTEzMyw3ICs5NSw3IEBACiAgICAgICAgIDxGcmFtZUxheW91dAogICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpwYWRkaW5nVG9wPSI2ZHAiID4KKyAgICAgICAgICAgICAgICBhbmRyb2lkOnBhZGRpbmdUb3A9IjhkcCIgPgogCiAgICAgICAgICAgICA8SW1hZ2VWaWV3CiAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvbG93X2ltcG9ydGFuY2UiCkBAIC0xNjIsNSArMTI0LDUzIEBACiAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iMjRkcCIvPgogCiAgICAgICAgIDwvRnJhbWVMYXlvdXQ+CisKKyAgICAgICAgPFJhZGlvR3JvdXAKKyAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9hcHBseV90byIKKyAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ1RvcD0iOGRwIj4KKyAgICAgICAgICAgIDxSYWRpb0J1dHRvbiBhbmRyb2lkOmlkPSJAK2lkL2FwcGx5X3RvX3RvcGljIgorICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0Q29sb3I9IkBjb2xvci9ub3RpZmljYXRpb25fZ3V0c190ZXh0X2NvbG9yIgorICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6dmlzaWJpbGl0eT0iZ29uZSIvPgorICAgICAgICAgICAgPFJhZGlvQnV0dG9uIGFuZHJvaWQ6aWQ9IkAraWQvYXBwbHlfdG9fYXBwIgorICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2FwcGx5X3RvX2FwcCIKKyAgICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOnRleHRDb2xvcj0iQGNvbG9yL25vdGlmaWNhdGlvbl9ndXRzX3RleHRfY29sb3IiCisgICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDp2aXNpYmlsaXR5PSJnb25lIi8+CisgICAgICAgIDwvUmFkaW9Hcm91cD4KKyAgICA8L0xpbmVhckxheW91dD4KKyAgICA8IS0tIGJ1dHRvbnMgLS0+CisgICAgPExpbmVhckxheW91dAorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDpncmF2aXR5PSJlbmQiCisgICAgICAgICAgICBhbmRyb2lkOnBhZGRpbmdUb3A9IjhkcCIKKyAgICAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ0JvdHRvbT0iMTZkcCIgPgorCisgICAgICAgIDxUZXh0VmlldworICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9tb3JlX3NldHRpbmdzIgorICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL25vdGlmaWNhdGlvbl9tb3JlX3NldHRpbmdzIgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDp0ZXh0QXBwZWFyYW5jZT0iQHN0eWxlL1RleHRBcHBlYXJhbmNlLk5vdGlmaWNhdGlvbkd1dHMiCisgICAgICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS9idG5fYm9yZGVybGVzc19yZWN0IgorICAgICAgICAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXIiCisgICAgICAgICAgICBhbmRyb2lkOnBhZGRpbmdFbmQ9IjI0ZHAiCisgICAgICAgICAgICBhbmRyb2lkOnBhZGRpbmdTdGFydD0iMTJkcCIKKyAgICAgICAgICAgIGFuZHJvaWQ6Zm9jdXNhYmxlPSJ0cnVlIiAvPgorCisgICAgICAgIDxUZXh0VmlldworICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9kb25lIgorICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL25vdGlmaWNhdGlvbl9kb25lIgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDp0ZXh0QXBwZWFyYW5jZT0iQHN0eWxlL1RleHRBcHBlYXJhbmNlLk5vdGlmaWNhdGlvbkd1dHMiCisgICAgICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS9idG5fYm9yZGVybGVzc19yZWN0IgorICAgICAgICAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXIiCisgICAgICAgICAgICBhbmRyb2lkOmZvY3VzYWJsZT0idHJ1ZSIvPgogICAgIDwvTGluZWFyTGF5b3V0PgogPC9jb20uYW5kcm9pZC5zeXN0ZW11aS5zdGF0dXNiYXIuTm90aWZpY2F0aW9uR3V0cz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQvcHJlZmVyZW5jZV9tYXRyaXgueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC9wcmVmZXJlbmNlX21hdHJpeC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJmNDg2ZgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQvcHJlZmVyZW5jZV9tYXRyaXgueG1sCkBAIC0wLDAgKzEsMTAwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCEtLQorICAgICBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorCis8TGluZWFyTGF5b3V0CisgICAgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCI+CisgICAgPFNwYWNlCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSIwZHAiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiIC8+CisgICAgPEdyaWRMYXlvdXQKKyAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9lZGl0X2dyb3VwIgorICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpyb3dDb3VudD0iNSIKKyAgICAgICAgYW5kcm9pZDpjb2x1bW5Db3VudD0iNSI+CisKKyAgICAgICAgPFNwYWNlIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSI0MGRwIiAvPgorCisgICAgICAgIDxUZXh0VmlldworICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjQwZHAiCisgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvY29sb3JfbW9kaWZpY2F0aW9uX3IiCisgICAgICAgICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlciIKKyAgICAgICAgICAgIGFuZHJvaWQ6dGV4dEFwcGVhcmFuY2U9Ij9hbmRyb2lkOmF0dHIvdGV4dEFwcGVhcmFuY2VNZWRpdW0iIC8+CisKKyAgICAgICAgPFRleHRWaWV3CisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iNDBkcCIKKyAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9jb2xvcl9tb2RpZmljYXRpb25fZyIKKyAgICAgICAgICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyIgorICAgICAgICAgICAgYW5kcm9pZDp0ZXh0QXBwZWFyYW5jZT0iP2FuZHJvaWQ6YXR0ci90ZXh0QXBwZWFyYW5jZU1lZGl1bSIgLz4KKworICAgICAgICA8VGV4dFZpZXcKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSI0MGRwIgorICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2NvbG9yX21vZGlmaWNhdGlvbl9iIgorICAgICAgICAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXIiCisgICAgICAgICAgICBhbmRyb2lkOnRleHRBcHBlYXJhbmNlPSI/YW5kcm9pZDphdHRyL3RleHRBcHBlYXJhbmNlTWVkaXVtIiAvPgorCisgICAgICAgIDxTcGFjZSBhbmRyb2lkOmxheW91dF93aWR0aD0iNDBkcCIgLz4KKworICAgICAgICA8VGV4dFZpZXcKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSI0MGRwIgorICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2NvbG9yX21vZGlmaWNhdGlvbl9yIgorICAgICAgICAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXIiCisgICAgICAgICAgICBhbmRyb2lkOnRleHRBcHBlYXJhbmNlPSI/YW5kcm9pZDphdHRyL3RleHRBcHBlYXJhbmNlTWVkaXVtIiAvPgorICAgICAgICA8RWRpdFRleHQgYW5kcm9pZDppbnB1dFR5cGU9Im51bWJlckRlY2ltYWwiIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSI0MGRwIiAvPgorICAgICAgICA8RWRpdFRleHQgYW5kcm9pZDppbnB1dFR5cGU9Im51bWJlckRlY2ltYWwiIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSI0MGRwIiAvPgorICAgICAgICA8RWRpdFRleHQgYW5kcm9pZDppbnB1dFR5cGU9Im51bWJlckRlY2ltYWwiIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSI0MGRwIiAvPgorICAgICAgICA8RWRpdFRleHQgYW5kcm9pZDppbnB1dFR5cGU9Im51bWJlckRlY2ltYWwiIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSI0MGRwIiAvPgorCisgICAgICAgIDxUZXh0VmlldworICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjQwZHAiCisgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvY29sb3JfbW9kaWZpY2F0aW9uX2ciCisgICAgICAgICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlciIKKyAgICAgICAgICAgIGFuZHJvaWQ6dGV4dEFwcGVhcmFuY2U9Ij9hbmRyb2lkOmF0dHIvdGV4dEFwcGVhcmFuY2VNZWRpdW0iIC8+CisgICAgICAgIDxFZGl0VGV4dCBhbmRyb2lkOmlucHV0VHlwZT0ibnVtYmVyRGVjaW1hbCIgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjQwZHAiIC8+CisgICAgICAgIDxFZGl0VGV4dCBhbmRyb2lkOmlucHV0VHlwZT0ibnVtYmVyRGVjaW1hbCIgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjQwZHAiIC8+CisgICAgICAgIDxFZGl0VGV4dCBhbmRyb2lkOmlucHV0VHlwZT0ibnVtYmVyRGVjaW1hbCIgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjQwZHAiIC8+CisgICAgICAgIDxFZGl0VGV4dCBhbmRyb2lkOmlucHV0VHlwZT0ibnVtYmVyRGVjaW1hbCIgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjQwZHAiIC8+CisKKyAgICAgICAgPFRleHRWaWV3CisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iNDBkcCIKKyAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9jb2xvcl9tb2RpZmljYXRpb25fYiIKKyAgICAgICAgICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyIgorICAgICAgICAgICAgYW5kcm9pZDp0ZXh0QXBwZWFyYW5jZT0iP2FuZHJvaWQ6YXR0ci90ZXh0QXBwZWFyYW5jZU1lZGl1bSIgLz4KKyAgICAgICAgPEVkaXRUZXh0IGFuZHJvaWQ6aW5wdXRUeXBlPSJudW1iZXJEZWNpbWFsIiBhbmRyb2lkOmxheW91dF93aWR0aD0iNDBkcCIgLz4KKyAgICAgICAgPEVkaXRUZXh0IGFuZHJvaWQ6aW5wdXRUeXBlPSJudW1iZXJEZWNpbWFsIiBhbmRyb2lkOmxheW91dF93aWR0aD0iNDBkcCIgLz4KKyAgICAgICAgPEVkaXRUZXh0IGFuZHJvaWQ6aW5wdXRUeXBlPSJudW1iZXJEZWNpbWFsIiBhbmRyb2lkOmxheW91dF93aWR0aD0iNDBkcCIgLz4KKyAgICAgICAgPEVkaXRUZXh0IGFuZHJvaWQ6aW5wdXRUeXBlPSJudW1iZXJEZWNpbWFsIiBhbmRyb2lkOmxheW91dF93aWR0aD0iNDBkcCIgLz4KKworICAgICAgICA8U3BhY2UgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjQwZHAiIC8+CisgICAgICAgIDxFZGl0VGV4dCBhbmRyb2lkOmlucHV0VHlwZT0ibnVtYmVyRGVjaW1hbCIgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjQwZHAiIC8+CisgICAgICAgIDxFZGl0VGV4dCBhbmRyb2lkOmlucHV0VHlwZT0ibnVtYmVyRGVjaW1hbCIgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjQwZHAiIC8+CisgICAgICAgIDxFZGl0VGV4dCBhbmRyb2lkOmlucHV0VHlwZT0ibnVtYmVyRGVjaW1hbCIgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjQwZHAiIC8+CisgICAgICAgIDxFZGl0VGV4dCBhbmRyb2lkOmlucHV0VHlwZT0ibnVtYmVyRGVjaW1hbCIgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjQwZHAiIC8+CisKKyAgICA8L0dyaWRMYXlvdXQ+CisgICAgPEJ1dHRvbgorICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2FwcGx5IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iMGRwIgorICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIgorICAgICAgICBhbmRyb2lkOmxheW91dF9ncmF2aXR5PSJib3R0b20iCisgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9jb2xvcl9hcHBseSIgLz4KKzwvTGluZWFyTGF5b3V0PgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC9wcmVmZXJlbmNlX3dpZGdldF9zZXR0aW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L3ByZWZlcmVuY2Vfd2lkZ2V0X3NldHRpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODJhMjk1Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC9wcmVmZXJlbmNlX3dpZGdldF9zZXR0aW5ncy54bWwKQEAgLTAsMCArMSw0NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhLS0KKyAgICAgQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKworPExpbmVhckxheW91dAorICAgIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50Ij4KKworICAgIDxSYWRpb0J1dHRvbgorICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3JhZGlvX2J1dHRvbiIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbkVuZD0iNGRwIgorICAgICAgICBhbmRyb2lkOmNsaWNrYWJsZT0iZmFsc2UiCisgICAgICAgIGFuZHJvaWQ6Zm9jdXNhYmxlPSJmYWxzZSIgLz4KKworICAgIDxWaWV3CisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSIxZHAiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9Ij9hbmRyb2lkOmF0dHIvbGlzdERpdmlkZXIiIC8+CisKKyAgICA8SW1hZ2VWaWV3CisgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvd2lkZ2V0X2ljb24iCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSI1MGRwIgorICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjI0ZHAiCisgICAgICAgIGFuZHJvaWQ6dGludD0iQGFuZHJvaWQ6Y29sb3IvYmxhY2siCisgICAgICAgIGFuZHJvaWQ6c3JjPSJAZHJhd2FibGUvaWNfc2V0dGluZ3MiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2dyYXZpdHk9ImNlbnRlcl92ZXJ0aWNhbCIgLz4KKworPC9MaW5lYXJMYXlvdXQ+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L3ByZWZlcmVuY2Vfd2lkZ2V0X3N3aXRjaC54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L3ByZWZlcmVuY2Vfd2lkZ2V0X3N3aXRjaC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk2MTBkZQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQvcHJlZmVyZW5jZV93aWRnZXRfc3dpdGNoLnhtbApAQCAtMCwwICsxLDQ0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCEtLQorICAgICBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorCis8TGluZWFyTGF5b3V0CisgICAgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiPgorCisgICAgPFJhZGlvQnV0dG9uCisgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvcmFkaW9fYnV0dG9uIgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpjbGlja2FibGU9ImZhbHNlIgorICAgICAgICBhbmRyb2lkOmZvY3VzYWJsZT0iZmFsc2UiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbkVuZD0iNGRwIiAvPgorCisgICAgPFZpZXcKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjFkcCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iP2FuZHJvaWQ6YXR0ci9saXN0RGl2aWRlciIgLz4KKworICAgIDxTd2l0Y2gKKyAgICAgICAgYW5kcm9pZDppZD0iQCphbmRyb2lkOmlkL3N3aXRjaF93aWRnZXQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSI1MGRwIgorICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpmb2N1c2FibGU9ImZhbHNlIgorICAgICAgICBhbmRyb2lkOmNsaWNrYWJsZT0iZmFsc2UiCisgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQG51bGwiIC8+CisKKzwvTGluZWFyTGF5b3V0PgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC9xdWlja19zdGF0dXNfYmFyX2V4cGFuZGVkX2hlYWRlci54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L3F1aWNrX3N0YXR1c19iYXJfZXhwYW5kZWRfaGVhZGVyLnhtbAppbmRleCBhOTk1ZWM3Li4yMzc3Njg0IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L3F1aWNrX3N0YXR1c19iYXJfZXhwYW5kZWRfaGVhZGVyLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L3F1aWNrX3N0YXR1c19iYXJfZXhwYW5kZWRfaGVhZGVyLnhtbApAQCAtOTYsMTQgKzk2LDE0IEBACiAgICAgPExpbmVhckxheW91dAogICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2RhdGVfdGltZV9ncm91cCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iMjhkcCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfYWxpZ25QYXJlbnRTdGFydD0idHJ1ZSIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfYWxpZ25QYXJlbnRUb3A9InRydWUiCiAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiPgogCiAgICAgICAgIDxpbmNsdWRlIGxheW91dD0iQGxheW91dC9zcGxpdF9jbG9ja192aWV3IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5TdGFydD0iMTZkcCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpblRvcD0iMmRwIgogICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9jbG9jayIgLz4KQEAgLTExMSwyOCArMTExLDI4IEBACiAgICAgICAgIDxjb20uYW5kcm9pZC5zeXN0ZW11aS5zdGF0dXNiYXIucG9saWN5LkRhdGVWaWV3CiAgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2RhdGUiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpblN0YXJ0PSI2ZHAiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5Ub3A9IjhkcCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2FsaWduUGFyZW50VG9wPSJ0cnVlIgogICAgICAgICAgICAgYW5kcm9pZDpkcmF3YWJsZVN0YXJ0PSJAZHJhd2FibGUvaGVhZGVyX2RvdCIKICAgICAgICAgICAgIGFuZHJvaWQ6ZHJhd2FibGVQYWRkaW5nPSI2ZHAiCiAgICAgICAgICAgICBhbmRyb2lkOnNpbmdsZUxpbmU9InRydWUiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHRBcHBlYXJhbmNlPSJAc3R5bGUvVGV4dEFwcGVhcmFuY2UuU3RhdHVzQmFyLkV4cGFuZGVkLkNsb2NrIgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0U2l6ZT0iQGRpbWVuL3FzX3RpbWVfY29sbGFwc2VkX3NpemUiCisgICAgICAgICAgICBhbmRyb2lkOmdyYXZpdHk9InRvcCIKICAgICAgICAgICAgIHN5c3RlbXVpOmRhdGVQYXR0ZXJuPSJAc3RyaW5nL2FiYnJldl93ZGF5X21vbnRoX2RheV9ub195ZWFyX2FsYXJtIiAvPgogCiAgICAgICAgIDxjb20uYW5kcm9pZC5zeXN0ZW11aS5zdGF0dXNiYXIuQWxwaGFPcHRpbWl6ZWRCdXR0b24KICAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvYWxhcm1fc3RhdHVzIgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfYWxpZ25QYXJlbnRUb3A9InRydWUiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpblRvcD0iOGRwIgogICAgICAgICAgICAgYW5kcm9pZDpkcmF3YWJsZVBhZGRpbmc9IjZkcCIKICAgICAgICAgICAgIGFuZHJvaWQ6ZHJhd2FibGVTdGFydD0iQGRyYXdhYmxlL2ljX2FjY2Vzc19hbGFybXNfc21hbGwiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHRDb2xvcj0iIzY0ZmZmZmZmIgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0QXBwZWFyYW5jZT0iQHN0eWxlL1RleHRBcHBlYXJhbmNlLlN0YXR1c0Jhci5FeHBhbmRlZC5EYXRlIgotICAgICAgICAgICAgYW5kcm9pZDptaW5IZWlnaHQ9IjM2ZHAiCiAgICAgICAgICAgICBhbmRyb2lkOnBhZGRpbmdTdGFydD0iNmRwIgorICAgICAgICAgICAgYW5kcm9pZDpncmF2aXR5PSJ0b3AiCiAgICAgICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9Ij9hbmRyb2lkOmF0dHIvc2VsZWN0YWJsZUl0ZW1CYWNrZ3JvdW5kIgogICAgICAgICAgICAgYW5kcm9pZDp2aXNpYmlsaXR5PSJnb25lIiAvPgogICAgIDwvTGluZWFyTGF5b3V0PgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC9yZWNlbnRzX3Rhc2tfdmlldy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L3JlY2VudHNfdGFza192aWV3LnhtbAppbmRleCAyYjgyYjA1Li41YjQ0YzE3IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L3JlY2VudHNfdGFza192aWV3LnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L3JlY2VudHNfdGFza192aWV3LnhtbApAQCAtMzQsOSArMzQsMTAgQEAKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2dyYXZpdHk9ImJvdHRvbXxyaWdodCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpblJpZ2h0PSIxNWRwIgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luQm90dG9tPSIxNWRwIgotICAgICAgICAgICAgYW5kcm9pZDp0cmFuc2xhdGlvblo9IjJkcCIKKyAgICAgICAgICAgIGFuZHJvaWQ6dHJhbnNsYXRpb25aPSI0ZHAiCiAgICAgICAgICAgICBhbmRyb2lkOmNvbnRlbnREZXNjcmlwdGlvbj0iQHN0cmluZy9yZWNlbnRzX2xvY2tfdG9fYXBwX2J1dHRvbl9sYWJlbCIKLSAgICAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGRyYXdhYmxlL3JlY2VudHNfbG9ja190b190YXNrX2J1dHRvbl9iZyI+CisgICAgICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS9yZWNlbnRzX2xvY2tfdG9fdGFza19idXR0b25fYmciCisgICAgICAgICAgICBhbmRyb2lkOnZpc2liaWxpdHk9ImludmlzaWJsZSI+CiAgICAgICAgICAgICA8SW1hZ2VWaWV3CiAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IkBkaW1lbi9yZWNlbnRzX2xvY2tfdG9fYXBwX2ljb25fc2l6ZSIKICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IkBkaW1lbi9yZWNlbnRzX2xvY2tfdG9fYXBwX2ljb25fc2l6ZSIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQvcmVjZW50c190YXNrX3ZpZXdfaGVhZGVyLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQvcmVjZW50c190YXNrX3ZpZXdfaGVhZGVyLnhtbAppbmRleCBiOGNhZjIzLi4wNGYxOGM1IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L3JlY2VudHNfdGFza192aWV3X2hlYWRlci54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC9yZWNlbnRzX3Rhc2tfdmlld19oZWFkZXIueG1sCkBAIC0yMCw3ICsyMCw3IEBACiAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJAZGltZW4vcmVjZW50c190YXNrX2Jhcl9oZWlnaHQiCiAgICAgYW5kcm9pZDpsYXlvdXRfZ3Jhdml0eT0idG9wfGNlbnRlcl9ob3Jpem9udGFsIj4KICAgICA8Y29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy52aWV3cy5GaXhlZFNpemVJbWFnZVZpZXcKLSAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9hcHBsaWNhdGlvbl9pY29uIgorICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2ljb24iCiAgICAgICAgIGFuZHJvaWQ6Y29udGVudERlc2NyaXB0aW9uPSJAc3RyaW5nL3JlY2VudHNfYXBwX2luZm9fYnV0dG9uX2xhYmVsIgogICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iQGRpbWVuL3JlY2VudHNfdGFza192aWV3X2FwcGxpY2F0aW9uX2ljb25fc2l6ZSIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJAZGltZW4vcmVjZW50c190YXNrX3ZpZXdfYXBwbGljYXRpb25faWNvbl9zaXplIgpAQCAtMjksNyArMjksNyBAQAogICAgICAgICBhbmRyb2lkOnBhZGRpbmc9IjhkcCIKICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvcmVjZW50c19idXR0b25fYmciIC8+CiAgICAgPFRleHRWaWV3Ci0gICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvYWN0aXZpdHlfZGVzY3JpcHRpb24iCisgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvdGl0bGUiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9ncmF2aXR5PSJjZW50ZXJfdmVydGljYWx8c3RhcnQiCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L3NpZ25hbF9jbHVzdGVyX3ZpZXcueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC9zaWduYWxfY2x1c3Rlcl92aWV3LnhtbAppbmRleCBmOGJkNmZkLi4xOThlNjU4IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L3NpZ25hbF9jbHVzdGVyX3ZpZXcueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQvc2lnbmFsX2NsdXN0ZXJfdmlldy54bWwKQEAgLTEsNiArMSw1IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgogPCEtLQotLyogYXBwcy9jb21tb24vYXNzZXRzL2RlZmF1bHQvZGVmYXVsdC9za2lucy9TdGF0dXNCYXIueG1sCiAqKgogKiogQ29weXJpZ2h0IDIwMTEsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKICoqCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L3N0YXR1c19iYXIueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC9zdGF0dXNfYmFyLnhtbAppbmRleCBhNWIzYTgzLi5hYWE1YTA5IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L3N0YXR1c19iYXIueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQvc3RhdHVzX2Jhci54bWwKQEAgLTEsNiArMSw1IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgogPCEtLQotLyogYXBwcy9jb21tb24vYXNzZXRzL2RlZmF1bHQvZGVmYXVsdC9za2lucy9TdGF0dXNCYXIueG1sCiAqKgogKiogQ29weXJpZ2h0IDIwMDYsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKICoqCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L3N0YXR1c19iYXJfZXhwYW5kZWQueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC9zdGF0dXNfYmFyX2V4cGFuZGVkLnhtbAppbmRleCBiZmExM2UyLi4xMmNmMTM3IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L3N0YXR1c19iYXJfZXhwYW5kZWQueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQvc3RhdHVzX2Jhcl9leHBhbmRlZC54bWwKQEAgLTEsNiArMSw1IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgogPCEtLQotLyogYXBwcy9jb21tb24vYXNzZXRzL2RlZmF1bHQvZGVmYXVsdC9za2lucy9TdGF0dXNCYXIueG1sCiAqKgogKiogQ29weXJpZ2h0IDIwMDYsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKICoqCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L3N0YXR1c19iYXJfbm9fcmVjZW50X2FwcHMueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC9zdGF0dXNfYmFyX25vX3JlY2VudF9hcHBzLnhtbAppbmRleCAxNjc1NzczLi5hZGZhZWQxMyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC9zdGF0dXNfYmFyX25vX3JlY2VudF9hcHBzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L3N0YXR1c19iYXJfbm9fcmVjZW50X2FwcHMueG1sCkBAIC0xLDYgKzEsNSBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KIDwhLS0KLS8qIGFwcHMvY29tbW9uL2Fzc2V0cy9kZWZhdWx0L2RlZmF1bHQvc2tpbnMvU3RhdHVzQmFyLnhtbAogKioKICoqIENvcHlyaWdodCAyMDExLCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CiAqKgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC9zdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9yb3cueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC9zdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9yb3cueG1sCmluZGV4IDBjZWE3YWUuLjYyZmRkNDIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQvc3RhdHVzX2Jhcl9ub3RpZmljYXRpb25fcm93LnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L3N0YXR1c19iYXJfbm90aWZpY2F0aW9uX3Jvdy54bWwKQEAgLTY1LDcgKzY1LDcgQEAKICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9ub3RpZmljYXRpb25fZ3V0c19zdHViIgogICAgICAgICBhbmRyb2lkOmluZmxhdGVkSWQ9IkAraWQvbm90aWZpY2F0aW9uX2d1dHMiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgLz4KIAogPC9jb20uYW5kcm9pZC5zeXN0ZW11aS5zdGF0dXNiYXIuRXhwYW5kYWJsZU5vdGlmaWNhdGlvblJvdz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtYWYvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWFmL3N0cmluZ3MueG1sCmluZGV4IDBjYzA5ZTcuLjAxODc5OTMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtYWYvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1hZi9zdHJpbmdzLnhtbApAQCAtMzY0LDcgKzM2NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+IkJhdHRlcnlzcGFhcmRlciBpcyBhYW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iODIwMzE4Nzg4MTI2NjcyNjkyIj4iVmVybWluZGVyIHdlcmt2ZXJyaWd0aW5nIGVuIGFndGVyZ3JvbmRkYXRhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiJTa2FrZWwgYmF0dGVyeWJlc3BhYXJkZXIgYWYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4iSW5ob3VkIHZlcnN0ZWVrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiI8eGxpZmY6ZyBpZD0iQVBQX1NFRUtJTkdfUEVSTUlTU0lPTiI+JXM8L3hsaWZmOmc+IHNhbCBhbGxlcyBiZWdpbiB2YXN2YW5nIHdhdCBvcCBqb3Ugc2tlcm0gZ2V3eXMgd29yZC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX3JlbWVtYmVyX3RleHQiIG1zZ2lkPSIzMTAzNTEwODgyMTcyNzQ2NzUyIj4iTW9lbmllIHdlZXIgd3lzIG5pZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNsZWFyX2FsbF9ub3RpZmljYXRpb25zX3RleHQiIG1zZ2lkPSI4MTQxOTI4ODk3NzE0NjI4MjgiPiJWZWUgYWxsZXMgdWl0Ijwvc3RyaW5nPgpAQCAtNDQ5LDQgKzQ0OCwyOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiJTa2FrZWwgQmx1ZXRvb3RoIGFhbj8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX21lc3NhZ2UiIG1zZ2lkPSI5MTA2NTk1OTkwNzA4OTg1Mzg1Ij4iSnkgbW9ldCBCbHVldG9vdGggYWFuc2tha2VsIG9tIGpvdSBzbGV1dGVsYm9yZCBhYW4gam91IHRhYmxldCB0ZSBrb3BwZWwuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9jb25maXJtYXRpb25fb2siIG1zZ2lkPSI2MjU4MDc0MjUwOTQ4MzA5NzE1Ij4iU2tha2VsIGFhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX3RvcGljIiBtc2dpZD0iMzY0MTQwMzQ4OTMxODY1OTY2NiI+IlBhcyB0b2Ugb3AgPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+LWtlbm5pc2dld2luZ3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b19hcHAiIG1zZ2lkPSIzNjMwMTY3ODM5Mzk4MTU5NjAiPiJQYXMgdG9lIG9wIGFsbGUga2VubmlzZ2V3aW5ncyB2YW4gaGllcmRpZSBwcm9ncmFtIGFmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IkdlYmxva2tlZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW1wb3J0YW5jZSIgbXNnaWQ9IjQxMDk5Mjk5ODYxMDcxNDc5MzAiPiJNaW4gYmVsYW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9pbXBvcnRhbmNlIiBtc2dpZD0iODE5MjEwNzY4OTk5NTc0MjY1MyI+Ik5vcm1hbGUgYmVsYW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+Ikdyb290IGJlbGFuZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1heF9pbXBvcnRhbmNlIiBtc2dpZD0iNTA4OTAwNTg3MjcxOTU2Mzg5NCI+IkRyaW5nZW5kZSBiZWxhbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iMjM5NzE5MjY0MjY1Nzg3Mjg3MiI+Ik1vZXQgbm9vaXQgaGllcmRpZSBrZW5uaXNnZXdpbmdzIHd5cyBuaWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4iV3lzIG9uZGVyYWFuIGRpZSBrZW5uaXNnZXdpbmdseXMgc29uZGVyIFwnbiBnZWx1aWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+Ild5cyBoaWVyZGllIGtlbm5pc2dld2luZ3Mgc29uZGVyIGdlbHVpZGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+Ild5cyBib2FhbiBkaWUga2VubmlzZ2V3aW5nbHlzIGVuIG1hYWsgXCduIGdlbHVpZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjUyMzY5ODcxNzE5MDQ3NTYxMzQiPiJWZXJza3luIHZsdWd0aWcgb3AgZGllIHNrZXJtIGVuIG1hYWsgXCduIGdlbHVpZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9tb3JlX3NldHRpbmdzIiBtc2dpZD0iODE2MzA2MjgzMzk2NTUzNTcxIj4iTWVlciBpbnN0ZWxsaW5ncyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9kb25lIiBtc2dpZD0iNTI3OTQyNjA0NzI3MzkzMDE3NSI+IktsYWFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25vbmUiIG1zZ2lkPSIyMTIxOTU3OTI2MDQwNTQzMTQ4Ij4iTm9ybWFsZSBrbGV1cmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4iQWFuZGtsZXVyZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4iR2VwYXNtYWFrdGUga2xldXJlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4iT25iZWtlbmRlIGtsZXVyZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3RyYW5zZm9ybSIgbXNnaWQ9IjY5ODU0NjA0MDgwNzkwODYwOTAiPiJLbGV1cnZlcmFuZGVyaW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Nob3dfcXMiIG1zZ2lkPSIxNzYzMjQ0MzU0Mzk5Mjc2Njc5Ij4iV3lzIGtpdHNpbnN0ZWxsaW5ncy10ZcOrbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4iQWt0aXZlZXIgZ2VwYXNtYWFrdGUgb21za2VwcGluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+IlBhcyB0b2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfdGl0bGUiIG1zZ2lkPSI0NzQ2NjY2NTQ1NDgwNTM0NjYzIj4iQmV2ZXN0aWcgaW5zdGVsbGluZ3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfbWVzc2FnZSIgbXNnaWQ9IjkxMTYwMDEwNjkzOTc5OTY2OTEiPiJTb21taWdlIGtsZXVyaW5zdGVsbGluZ3Mga2FuIGhpZXJkaWUgdG9lc3RlbCBvbmJydWlrYmFhciBtYWFrLiBLbGlrIE9LIG9tIGhpZXJkaWUga2xldXJpbnN0ZWxsaW5ncyB0ZSBiZXZlc3RpZzsgYW5kZXJzaW5zIHNhbCBoaWVyZGllIGluc3RlbGxpbmdzIG7DoSAxMCBzZWtvbmRlcyB0ZXJ1Z2dlc3RlbCB3b3JkLiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1hbS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtYW0vc3RyaW5ncy54bWwKaW5kZXggYTZjMTM3Ni4uNTAzYTc2NyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1hbS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWFtL3N0cmluZ3MueG1sCkBAIC0zMDEsOCArMzAxLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2VhcmNoX2Jhcl9sYWJlbCIgbXNnaWQ9IjgwNzQ5OTc0MDAxODc4MzY2NzciPiLhjYjhiI3hjI0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xhdW5jaF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMjk2OTI4NzgzODEyMDU1MDUwNiI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPuGKlSDhiJjhjIDhiJjhiK0g4Yqg4YiN4Ymw4Ym74YiI4Yid4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zaG93X2hpc3RvcnlfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNzA2MjA4ODE5NjQ0OTc0NzI0NSI+IuGJsOGMqOGIm+GIqiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciByZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0ICg2MzM3MTU1NjA4MDU1MDYyNDI5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCIgbXNnaWQ9IjYzMzcxNTU2MDgwNTUwNjI0MjkiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4Ymw4Yyo4Yib4YiqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiLhiqDhjI3hi7XhiJ0g4Yqt4Y2I4YiNIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfdmVydGljYWwiIG1zZ2lkPSI5MDc1MjkyMjMzNjk2MTgwODEzIj4i4YmB4YiN4YmB4YiNIOGKreGNiOGIjSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2N1c3RvbSIgbXNnaWQ9IjQxNzc4Mzc1OTc1MTM3MDE5NDMiPiLhiaDhiaXhjIEg4Yqt4Y2I4YiNIjwvc3RyaW5nPgpAQCAtMzY1LDcgKzM2NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+IuGLqOGJo+GJteGIqiDhioPhi63hiI0g4YmG4Yyj4YmiIOGJoOGIreGJt+GIjSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiLhiqDhjYjhjLvhjLjhiJ3hipUg4Yql4YqTIOGLqOGMgOGIreGJoyDhi43hiILhiaUg4Yut4YmA4YqV4Yiz4YiNIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiLhiaPhibXhiKog4YmG4Yyj4Ymi4YqVIOGKoOGMpeGNiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLhi63hi5jhibbhib0g4Ymw4Yuw4Yml4YmA4YuL4YiNIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiI8eGxpZmY6ZyBpZD0iQVBQX1NFRUtJTkdfUEVSTUlTU0lPTiI+JXM8L3hsaWZmOmc+IOGJoOGIm+GLqyDhjIjhjL3hi44g4YiL4YutIOGLqOGJs+GLqOGLjeGKlSDhipDhjIjhiK0g4Ymg4YiZ4YiJIOGIm+GKleGIs+GJtSDhi63hjIDhiJ3hiKvhiI3hjaIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX3JlbWVtYmVyX3RleHQiIG1zZ2lkPSIzMTAzNTEwODgyMTcyNzQ2NzUyIj4i4Yuz4YyN4YiY4YqbIOGKoOGJs+GIs+GLrSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNsZWFyX2FsbF9ub3RpZmljYXRpb25zX3RleHQiIG1zZ2lkPSI4MTQxOTI4ODk3NzE0NjI4MjgiPiLhiIHhiInhipXhiJ0g4Yqg4Yy94YuzIjwvc3RyaW5nPgpAQCAtNDUwLDQgKzQ0OCwyOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiLhiaXhiInhibHhi50g4Yut4Yml4YirPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiLhi6jhiYHhiI3hjY0g4Yiw4YiM4Yuz4YuO4YqVIOGKqOGKpeGIreGIteGLjiDhjKHhiaPhi4og4YyL4YitIOGIiOGIm+GMiOGKk+GKmOGJtSDhiaDhiJjhjIDhiJjhiKrhi6sg4Yml4YiJ4Ymx4Yud4YqVIOGIm+GJpeGIq+GJtSDhiqDhiIjhiaXhi47hibXhjaIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiLhiqDhiaXhiKsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiLhiaA8eGxpZmY6ZyBpZD0iVE9QSUNfTkFNRSI+JTEkczwveGxpZmY6Zz4g4Yib4Yiz4YuI4YmC4Yur4YuO4Ym9IOGIi+GLrSDhibDhjI3hiaXhiK0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b19hcHAiIG1zZ2lkPSIzNjMwMTY3ODM5Mzk4MTU5NjAiPiLhiqjhi5rhiIUg4YiY4Ymw4YyN4Ymg4Yiq4YurIOGJoOGImuGImOGMoSDhiIHhiInhiJ0g4Yib4Yiz4YuI4YmC4Yur4YuO4Ym9IOGIi+GLrSDhibDhjI3hiaXhiK0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX2ltcG9ydGFuY2UiIG1zZ2lkPSI1MTk4NTc4OTg4OTc4MjM0MTYxIj4i4Yuo4Ymz4YyI4YuxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4i4Yud4YmF4Ymw4YqbIOGKoOGIteGNiOGIi+GMiuGKkOGJtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiLhiJjhi7DhiaDhipsg4Yqg4Yi14Y2I4YiL4YyK4YqQ4Ym1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+IuGKqOGNjeGJsOGKmyDhiqDhiLXhjYjhiIvhjIrhipDhibUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfaW1wb3J0YW5jZSIgbXNnaWQ9IjUwODkwMDU4NzI3MTk1NjM4OTQiPiLhiqDhiLXhibjhirPhi60g4Yqg4Yi14Y2I4YiL4YyK4YqQ4Ym1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjIzOTcxOTI2NDI2NTc4NzI4NzIiPiLhiqXhipDhi5rhiIXhipUg4Yib4Yiz4YuI4YmC4Yur4YuO4Ym9IOGJoOGMreGIq+GIvSDhiqDhibPhiLPhi60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4i4Ymg4Yib4Yiz4YuI4YmC4YurIOGLneGIreGLneGIqSDhibPhib3hipvhi43hipUg4Yqt4Y2N4YiNIOGIi+GLrSDhiaDhjLjhjKXhibMg4Yqg4Yiz4YutIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9IjQ5MjY1Mjk2MTU5MjA2MTA4MTciPiLhiqXhipDhi5rhiIXhipUg4Yib4Yiz4YuI4YmC4Yur4YuO4Ym9IOGJoOGMuOGMpeGJsyDhiqDhiLPhi60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+IuGJoOGIm+GIs+GLiOGJguGLq+GLjuGJvSDhi53hiK3hi53hiK0g4YiL4Yut4Yqb4YuNIOGKreGNjeGIjSDhiIvhi60g4Yqg4Yiz4Yut4YqTIOGLteGIneGNhSDhiqDhiLDhiJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4i4YuI4YuwIOGMiOGMuCDhiJvhi6vhi40g4Yut4YiY4YiN4Yqo4Ymx4YqTIOGLteGIneGNhSDhi63hiYXhiKjhjLkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+IuGJsOGMqOGIm+GIqiDhiYXhipXhiaXhiK7hib0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiLhibDhiqjhipPhi43hipfhiI0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiLhiJjhi7DhiaDhipsg4YmA4YiI4Yie4Ym9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+IuGLqOGIiOGIiuGJtSDhiYDhiIjhiJ7hib0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+IuGJpeGMgSDhiYDhiIjhiJ7hib0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiLhi6jhiJvhi63hibPhi4jhiYEg4YmA4YiI4Yie4Ym9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+IuGLqOGJgOGIiOGInSDhiJvhiLvhiLvhi6siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfc2hvd19xcyIgbXNnaWQ9IjE3NjMyNDQzNTQzOTkyNzY2NzkiPiLhi6jhjYjhjKPhipUg4YmF4YqV4Yml4Yiu4Ym9IOGIsOGJheGKlSDhiqDhiLPhi60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9lbmFibGVfY3VzdG9tIiBtc2dpZD0iNjcyOTAwMTMwODIxNzM0NzUwMSI+IuGJpeGMgSDhiYXhi6jhiKvhipUg4Yqg4YqV4YmDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4i4Ymw4YyN4Yml4YitIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+IuGJheGKleGJpeGIruGJveGKlSDhi6vhiKjhjIvhjI3hjKEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfbWVzc2FnZSIgbXNnaWQ9IjkxMTYwMDEwNjkzOTc5OTY2OTEiPiLhiqDhipXhi7PhipXhi7Ug4Yuo4YmA4YiI4YidIOGJheGKleGJpeGIruGJvSDhi63hiIXhipUg4YiY4Yij4Yiq4YurIOGLqOGIm+GLreGMoOGJheGInSDhiIrhi6vhi7DhiK3hjInhibUg4Yut4Ym94YiL4YiJ4Y2iIOGKpeGKkOGLmuGIheGKlSDhi6jhiYDhiIjhiJ0g4YmF4YqV4Yml4Yiu4Ym9IOGIiOGIm+GIqOGMi+GMiOGMpSDhiqXhiLog4Yuo4Yia4YiI4YuN4YqVIOGMoOGJhSDhi6vhi7XhiK3hjInhjaMg4Yqg4YiI4Ymg4YiI4Yua4YurIOGKpeGKkOGLmuGIhSDhiYXhipXhiaXhiK7hib0g4YqoMTAg4Yiw4Yqo4YqV4Yu24Ym9IOGJoOGKi+GIiyDhi7PhjI3hiJ0g4Yut4YyA4Yid4Yir4YiJ4Y2iIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWFyL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1hci9zdHJpbmdzLnhtbAppbmRleCBiYjg2MDJiLi5kODlkMDM2IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWFyL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtYXIvc3RyaW5ncy54bWwKQEAgLTMwNSw4ICszMDUsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+Itio2K3YqyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4i2KrYudiw2LEg2KjYr9ihIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4i2KfZhNmF2LLZitivIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQgKDYzMzcxNTU2MDgwNTUwNjI0MjkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDYo9iu2LHZiSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2hvcml6b250YWwiIG1zZ2lkPSI4ODQ4NTE0NDc0NTQzNDI3MzMyIj4i2KrZgtiz2YrZhSDYo9mB2YLZiiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X3ZlcnRpY2FsIiBtc2dpZD0iOTA3NTI5MjIzMzY5NjE4MDgxMyI+Itiq2YLYs9mK2YUg2LHYo9iz2YoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4i2KrZgtiz2YrZhSDZhdiu2LXYtSI8L3N0cmluZz4KQEAgLTM2OSw3ICszNjgsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzc5MTg3MjY3NTA5NTU4NTkiPiLZiNi22Lkg2KrZiNmB2YrYsSDYp9mE2LfYp9mC2Kkg2YLZitivINin2YTYqti02LrZitmEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+ItmE2K7Zgdi2INmF2LPYqtmI2Ykg2KfZhNij2K/Yp9ihINmI2KjZitin2YbYp9iqINin2YTYrtmE2YHZitipIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiLYpdmK2YLYp9mBINiq2YjZgdmK2LEg2LTYrdmGINin2YTYqNi32KfYsdmK2KkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4i2KfZhNmF2K3YqtmI2YrYp9iqINmF2K7ZgdmK2KkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+Ijx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4g2LPZitio2K/YoyDYp9mE2KrZgtin2Lcg2YPZhCDYtNmK2KEg2YrYqtmFINi52LHYttmHINi52YTZiSDYp9mE2LTYp9i02KkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+Iti52K/ZhSDYp9mE2KXYuNmH2KfYsSDZhdix2Kkg2KPYrtix2YkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4i2YXYrdmIINin2YTZg9mEIjwvc3RyaW5nPgpAQCAtNDU0LDQgKzQ1MiwyOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiLYqti02LrZitmEINin2YTYqNmE2YjYqtmI2KvYnyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiLZhNiq2YjYtdmK2YQg2YTZiNit2Kkg2KfZhNmF2YHYp9iq2YrYrSDYqNin2YTYrNmH2KfYsiDYp9mE2YTZiNit2YrYjCDZitmE2LLZhdmDINiq2LTYutmK2YQg2KjZhNmI2KrZiNirINij2YjZhNin2YsuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9jb25maXJtYXRpb25fb2siIG1zZ2lkPSI2MjU4MDc0MjUwOTQ4MzA5NzE1Ij4i2KrYtNi62YrZhCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX3RvcGljIiBtc2dpZD0iMzY0MTQwMzQ4OTMxODY1OTY2NiI+Itin2YTYqti32KjZitmCINi52YTZiSDYpdi02LnYp9ix2KfYqiA8eGxpZmY6ZyBpZD0iVE9QSUNfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b19hcHAiIG1zZ2lkPSIzNjMwMTY3ODM5Mzk4MTU5NjAiPiLYp9mE2KrYt9io2YrZgiDZgdmKINis2YXZiti5INin2YTYpdi02LnYp9ix2KfYqiDZhdmGINmH2LDYpyDYp9mE2KrYt9io2YrZgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfaW1wb3J0YW5jZSIgbXNnaWQ9IjUxOTg1Nzg5ODg5NzgyMzQxNjEiPiLYqtmFINin2YTYrdi42LEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW1wb3J0YW5jZSIgbXNnaWQ9IjQxMDk5Mjk5ODYxMDcxNDc5MzAiPiLYo9mH2YXZitipINmF2YbYrtmB2LbYqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiLYo9mH2YXZitipINi52KfYr9mK2KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoaWdoX2ltcG9ydGFuY2UiIG1zZ2lkPSIxNTI3MDY2MTk1NjE0MDUwMjYzIj4i2KPZh9mF2YrYqSDYudin2YTZitipIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4i2KPZh9mF2YrYqSDZhdmE2K3ZjtmR2KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iMjM5NzE5MjY0MjY1Nzg3Mjg3MiI+Iti52K/ZhSDYudix2LYg2YfYsNmHINin2YTYpdi02LnYp9ix2KfYqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjQzODM1NjMyNjczNzA4NTk3MjUiPiLYp9mE2LnYsdi2INij2LPZgdmEINmC2KfYptmF2Kkg2KfZhNil2LTYudin2LHYp9iqINio2K/ZiNmGINiq2YbYqNmK2Ycg2LXZiNiq2YoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+Iti52LHYtiDZh9iw2Ycg2KfZhNil2LTYudin2LHYp9iqINio2K/ZiNmGINiq2YbYqNmK2Ycg2LXZiNiq2YoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+Itin2YTYudix2LYg2KPYudmE2Ykg2YLYp9im2YXYqSDYp9mE2KXYtNi52KfYsdin2Kog2YXYuSDYqtmG2KjZitmHINi12YjYqtmKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iNTIzNjk4NzE3MTkwNDc1NjEzNCI+Itin2YTYuNmH2YjYsSDYs9ix2YrYudmL2Kcg2LnZhNmJINin2YTYtNin2LTYqSDZhdi5INiq2YbYqNmK2Ycg2LXZiNiq2YoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+Itin2YTZhdiy2YrYryDZhdmGINin2YTYpdi52K/Yp9iv2KfYqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9kb25lIiBtc2dpZD0iNTI3OTQyNjA0NzI3MzkzMDE3NSI+Itiq2YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiLYo9mE2YjYp9mGINi52KfYr9mK2KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4i2KPZhNmI2KfZhiDZhNmK2YTZitipIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X2N1c3RvbSIgbXNnaWQ9IjM2NTU1NzY0OTIzMjIyOTg3MTMiPiLYo9mE2YjYp9mGINmF2K7Ytdi12KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiLYo9mE2YjYp9mGINi62YrYsSDZhdi52LHZiNmB2KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4i2KXYtNi52KfYsSDYp9mE2KPZhNmI2KfZhiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+Itil2LjZh9in2LEg2YLYs9mFINin2YTYpdi52K/Yp9iv2KfYqiDYp9mE2LPYsdmK2LnYqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4i2KrZhdmD2YrZhiDYp9mE2KrYrdmI2YrZhCDYp9mE2YXYrti12LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9hcHBseSIgbXNnaWQ9IjkyMTI2MDIwMTI2NDEwMzQyODMiPiLYqti32KjZitmCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+Itiq2KPZg9mK2K8g2KfZhNil2LnYr9in2K/Yp9iqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X21lc3NhZ2UiIG1zZ2lkPSI5MTE2MDAxMDY5Mzk3OTk2NjkxIj4i2YrZhdmD2YYg2KPZhiDYqtiq2LPYqNioINio2LnYtiDYpdi52K/Yp9iv2KfYqiDYp9mE2KPZhNmI2KfZhiDZgdmKINiq2LnYt9mK2YQg2KXZhdmD2KfZhtmK2Kkg2KfYs9iq2K7Yr9in2YUg2KfZhNis2YfYp9iyLiDZitmF2YPZhtmDINin2YTZhtmC2LEg2LnZhNmJIFwi2YXZiNin2YHZglwiINmE2KrYo9mD2YrYryDYpdi52K/Yp9iv2KfYqiDYp9mE2KPZhNmI2KfZhiDZh9iw2YfYjCDZiNil2YTYpyDZgdiz2KrYqtmFINil2LnYp9iv2Kkg2KrYudmK2YrZhiDZh9iw2Ycg2KfZhNil2LnYr9in2K/Yp9iqINio2LnYryAxMCDYq9mI2KfZhtmNLiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1hei1yQVovc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWF6LXJBWi9zdHJpbmdzLnhtbAppbmRleCBmNmE1ZjBmLi41NWYwODQxIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWF6LXJBWi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWF6LXJBWi9zdHJpbmdzLnhtbApAQCAtMzAxLDggKzMwMSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4iYXh0YXLEscWfIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sYXVuY2hfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjI5NjkyODc4MzgxMjA1NTA1MDYiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4gYmHFn2xhbmEgYmlsbWlyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2hvd19oaXN0b3J5X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjcwNjIwODgxOTY0NDk3NDcyNDUiPiJEYWhhIMOnb3giPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCAoNjMzNzE1NTYwODA1NTA2MjQyOSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQiIG1zZ2lkPSI2MzM3MTU1NjA4MDU1MDYyNDI5Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IERhaGEgw6dveCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2hvcml6b250YWwiIG1zZ2lkPSI4ODQ4NTE0NDc0NTQzNDI3MzMyIj4iw5xmw7xxaSBCw7ZsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfdmVydGljYWwiIG1zZ2lkPSI5MDc1MjkyMjMzNjk2MTgwODEzIj4ixZ5hcXVsaSBCw7ZsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfY3VzdG9tIiBtc2dpZD0iNDE3NzgzNzU5NzUxMzcwMTk0MyI+IkbJmXJkaSBCw7ZsIjwvc3RyaW5nPgpAQCAtMzY1LDcgKzM2NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+IkVuZXJqaSBxyZluYcmZdGkgYWt0aXZkaXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iODIwMzE4Nzg4MTI2NjcyNjkyIj4iUGVyZm9ybWFuc8SxIGF6YWxkxLFyIHbJmSBhcnhhIGZvbiBkYXRhc8SxbsSxIG3JmWhkdWRsYcWfZMSxcsSxciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4iRW5lcmppecmZIHHJmW5hyZl0IHJlamltaW5pIGRlYWt0aXYgZWRpbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJNyZl6bXVuIGdpemxpZGlyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiI8eGxpZmY6ZyBpZD0iQVBQX1NFRUtJTkdfUEVSTUlTU0lPTiI+JXM8L3hsaWZmOmc+IGVrcmFuxLFuxLF6ZGEgb2xhbiBoyZlyIMWfZXlpbiDFn8mZa2xpbmkgw6fJmWvJmWPJmWsuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+IkRhaGEgZ8O2c3TJmXJtyZkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4iSGFtxLFzxLFuxLEgc2lsaW4iPC9zdHJpbmc+CkBAIC00NTAsNCArNDQ4LDI4IEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+IkJsdWV0b290aCBha3RpdmzJmcWfc2luPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiJUYWJsZXRpbml6bMmZIGtsYXZpYXR1cmF5YSBiYcSfbGFubWFxIMO8w6fDvG4gaWxrIG9sYXJhcSBCbHVldG9vdGhcJ3UgYWt0aXZsyZnFn2Rpcm3JmWxpc2luaXouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9jb25maXJtYXRpb25fb2siIG1zZ2lkPSI2MjU4MDc0MjUwOTQ4MzA5NzE1Ij4iQWt0aXZsyZnFn2RpcmluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4iPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+IGJpbGRpcmnFn2zJmXJpbsmZIG3DvHJhY2nJmXQgZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+IkJ1IHTJmXRiaXFkyZluIG9sYW4gYsO8dMO8biBiaWxkaXJpxZ9syZlyyZkgbcO8cmFjacmZdCBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IkJsb2tsYW5txLHFnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbXBvcnRhbmNlIiBtc2dpZD0iNDEwOTkyOTk4NjEwNzE0NzkzMCI+IkF6IMmZaMmZbWl5ecmZdGxpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9pbXBvcnRhbmNlIiBtc2dpZD0iODE5MjEwNzY4OTk5NTc0MjY1MyI+Ik5vcm1hbCDJmWjJmW1peXnJmXRsaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiLDh294IMmZaMmZbWl5ecmZdGxpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4iVMmZY2lsaSDJmWjJmW1peXnJmXRsaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4iQnUgYmlsZGlyacWfbMmZcmkgaGXDpyB2YXh0IGfDtnN0yZlybcmZeWluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+IkJpbGRpcmnFn2zJmXIgc2l5YWjEsXPEsW7EsW4gYcWfYcSfxLFzxLFuZGEgc8mZc3NpeiBnw7ZzdMmZcmluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9IjQ5MjY1Mjk2MTU5MjA2MTA4MTciPiJCdSBiaWxkacWfbMmZcmkgc8mZc3NpeiBnw7ZzdMmZcmluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMyMjI2ODAxMzY2MTI0MDgyMjMiPiJCaWxkaXJpxZ9syZlyIHNpeWFoxLFzxLFuZGEgeXV4YXLEsWRhIGfDtnN0yZlyaW4gdsmZIHPJmXNsaSBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iNTIzNjk4NzE3MTkwNDc1NjEzNCI+IkVrcmFuZGEgbsmZesmZciBzYWzEsW4gdsmZIHPJmXNsaSBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX21vcmVfc2V0dGluZ3MiIG1zZ2lkPSI4MTYzMDYyODMzOTY1NTM1NzEiPiJEYWhhIMOnb3ggYXlhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9kb25lIiBtc2dpZD0iNTI3OTQyNjA0NzI3MzkzMDE3NSI+IkhhesSxcmTEsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiJOb3JtYWwgcsmZbmdsyZlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+IkdlY8mZIHLJmW5nbMmZcmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+IljDvHN1c2kgcsmZbmdsyZlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4iTmFtyZlsdW0gcsmZbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4iUsmZbmcgbW9kaWZpa2FzaXlhc8SxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Nob3dfcXMiIG1zZ2lkPSIxNzYzMjQ0MzU0Mzk5Mjc2Njc5Ij4iQ8mZbGQgYXlhcmxhciDDtnJ0w7x5w7xuw7wgZ8O2c3TJmXJpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4iWMO8c3VzaSBkyZl5acWfaWtsaXlpIGFrdGl2IGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9hcHBseSIgbXNnaWQ9IjkyMTI2MDIwMTI2NDEwMzQyODMiPiJUyZl0YmlxIGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfdGl0bGUiIG1zZ2lkPSI0NzQ2NjY2NTQ1NDgwNTM0NjYzIj4iQXlhcmxhcsSxIHTJmXNkaXEgZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+IkLJmXppIHJlbmsgYXlhcmxhcsSxIGJ1IGNpaGF6xLEgeWFyYXJzxLF6IGVkyZkgYmlsyZlyLiBCdSByyZluayBheWFybGFyxLFuxLEgdMmZc2RpcSBldG3JmWsgw7zDp8O8biBPSyBiYXPEsW4sIMmZa3MgaGFsZGEgYnUgYXlhcmxhciAxMCBzYW5pecmZIHNvbnJhIHPEsWbEsXJsYW5hY2FxLiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1iK3NyK0xhdG4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWIrc3IrTGF0bi9zdHJpbmdzLnhtbAppbmRleCBmMTRiNjQ0Li40MDU2OTYzIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWIrc3IrTGF0bi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWIrc3IrTGF0bi9zdHJpbmdzLnhtbApAQCAtMzAyLDggKzMwMiw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4icHJldHJhxb5pIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sYXVuY2hfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjI5NjkyODc4MzgxMjA1NTA1MDYiPiJQb2tyZXRhbmplIGFwbGlrYWNpamUgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IG5pamUgdXNwZWxvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2hvd19oaXN0b3J5X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjcwNjIwODgxOTY0NDk3NDcyNDUiPiJKb8WhIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQgKDYzMzcxNTU2MDgwNTUwNjI0MjkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+IkpvxaEgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiJQb2RlbGkgaG9yaXpvbnRhbG5vIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfdmVydGljYWwiIG1zZ2lkPSI5MDc1MjkyMjMzNjk2MTgwODEzIj4iUG9kZWxpIHZlcnRpa2Fsbm8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4iUHJpbGFnb8SRZW5vIGRlbGplbmplIjwvc3RyaW5nPgpAQCAtMzY2LDcgKzM2NSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+IsWgdGVkbmphIGJhdGVyaWplIGplIHVrbGp1xI1lbmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iODIwMzE4Nzg4MTI2NjcyNjkyIj4iU21hbmp1amUgcGVyZm9ybWFuc2UgaSBwb3phZGluc2tlIHBvZGF0a2UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl9hY3Rpb25fdGV4dCIgbXNnaWQ9IjEwOTE1ODY1ODIzODExMDM4MiI+Iklza2xqdcSNaSDFoXRlZG5qdSBiYXRlcmlqZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJTYWRyxb5haiBqZSBzYWtyaXZlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fZGlhbG9nX3RleHQiIG1zZ2lkPSIzMDcxNDMxMDI1NDQ4MjE4OTI4Ij4iPHhsaWZmOmcgaWQ9IkFQUF9TRUVLSU5HX1BFUk1JU1NJT04iPiVzPC94bGlmZjpnPiDEh2UgcG/EjWV0aSBkYSBzbmltYSBzdmUgxaF0byBzZSBwcmlrYXp1amUgbmEgZWtyYW51LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fcmVtZW1iZXJfdGV4dCIgbXNnaWQ9IjMxMDM1MTA4ODIxNzI3NDY3NTIiPiJOZSBwcmlrYXp1aiBwb25vdm8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4iT2JyacWhaSBzdmUiPC9zdHJpbmc+CkBAIC00NTEsNCArNDQ5LDI4IEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+IsW9ZWxpdGUgbGkgZGEgdWtsanXEjWl0ZSBCbHVldG9vdGg/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9tZXNzYWdlIiBtc2dpZD0iOTEwNjU5NTk5MDcwODk4NTM4NSI+IkRhIGJpc3RlIHBvdmV6YWxpIHRhc3RhdHVydSBzYSB0YWJsZXRvbSwgcHJ2byBtb3JhdGUgZGEgdWtsanXEjWl0ZSBCbHVldG9vdGguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9jb25maXJtYXRpb25fb2siIG1zZ2lkPSI2MjU4MDc0MjUwOTQ4MzA5NzE1Ij4iVWtsanXEjWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiJQcmltZW5pIG5hIG9iYXZlxaF0ZW5qYSBvIHRlbWkgPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4iUHJpbWVuaSBuYSBzdmEgb2JhdmXFoXRlbmphIGl6IG92ZSBhcGxpa2FjaWplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IkJsb2tpcmFuYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbXBvcnRhbmNlIiBtc2dpZD0iNDEwOTkyOTk4NjEwNzE0NzkzMCI+Ik1hbGEgdmHFvm5vc3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4iVW9iacSNYWplbmEgdmHFvm5vc3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoaWdoX2ltcG9ydGFuY2UiIG1zZ2lkPSIxNTI3MDY2MTk1NjE0MDUwMjYzIj4iVmVsaWthIHZhxb5ub3N0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4iVmHFvm5vc3Q6IGhpdG5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjIzOTcxOTI2NDI2NTc4NzI4NzIiPiJPdmEgb2JhdmXFoXRlbmphIHNlIG5pa2FkYSBuZSBwcmlrYXp1anUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4iUHJpa2F6dWp1IHNlIHUgZG51IGxpc3RlIG9iYXZlxaF0ZW5qYSBiZXogenZ1a2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+Ik92YSBvYmF2ZcWhdGVuamEgc2UgcHJpa2F6dWp1IGJleiB6dnVrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4iUHJpa2F6dWp1IHNlIHUgdnJodSBsaXN0ZSBvYmF2ZcWhdGVuamEgaSBlbWl0dWplIHNlIHp2dWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4iTmFrcmF0a28gc2UgcHJpa2F6dWp1IG5hIGVrcmFudSBpIGVtaXR1amUgc2UgenZ1ayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9tb3JlX3NldHRpbmdzIiBtc2dpZD0iODE2MzA2MjgzMzk2NTUzNTcxIj4iSm/FoSBwb2RlxaFhdmFuamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiJHb3Rvdm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiJOb3JtYWxuZSBib2plIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+Ik5vxIduZSBib2plIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X2N1c3RvbSIgbXNnaWQ9IjM2NTU1NzY0OTIzMjIyOTg3MTMiPiJQcmlsYWdvxJFlbmUgYm9qZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF91bmtub3duIiBtc2dpZD0iMjcwOTIwMjEwNDI1NjI2NTEwNyI+Ik5lcG96bmF0ZSBib2plIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+Ikl6bWVuYSBib2phIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Nob3dfcXMiIG1zZ2lkPSIxNzYzMjQ0MzU0Mzk5Mjc2Njc5Ij4iUHJpa2HFvmkgcGxvxI1pY3UgQnJ6YSBwb2RlxaFhdmFuamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9lbmFibGVfY3VzdG9tIiBtc2dpZD0iNjcyOTAwMTMwODIxNzM0NzUwMSI+Ik9tb2d1xIdpIHByaWxhZ2/EkWVudSB0cmFuc2Zvcm1hY2lqdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+IlByaW1lbmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfdGl0bGUiIG1zZ2lkPSI0NzQ2NjY2NTQ1NDgwNTM0NjYzIj4iUG90dnJkaXRlIHBvZGXFoWF2YW5qYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+Ik5la2EgcG9kZcWhYXZhbmphIGJvamEgbW9ndSBkYSB1xI1pbmUgdXJlxJFhaiBuZXVwb3RyZWJsaml2aW0uIEtsaWtuaXRlIG5hIFBvdHZyZGkgZGEgYmlzdGUgcG90dnJkaWxpIG92YSBwb2RlxaFhdmFuamEgYm9qYSwgcG/FoXRvIMSHZSBzZSB1IHN1cHJvdG5vbSBvdmEgcG9kZcWhYXZhbmphIHJlc2V0b3ZhdGkgbmFrb24gMTAgc2VrdW5kaS4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtYmcvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWJnL3N0cmluZ3MueG1sCmluZGV4IGZjYmJlZWYuLjkzYzI2YTQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtYmcvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1iZy9zdHJpbmdzLnhtbApAQCAtMzAxLDggKzMwMSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4i0YLRitGA0YHQtdC90LUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xhdW5jaF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMjk2OTI4NzgzODEyMDU1MDUwNiI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDQvdC1INC80L7QttCwINC00LAg0YHRgtCw0YDRgtC40YDQsC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4i0J7RidC1Ijwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQgKDYzMzcxNTU2MDgwNTUwNjI0MjkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+ItCe0YnQtSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9ob3Jpem9udGFsIiBtc2dpZD0iODg0ODUxNDQ3NDU0MzQyNzMzMiI+ItCl0L7RgNC40LfQvtC90YLQsNC70L3QviDRgNCw0LfQtNC10LvRj9C90LUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF92ZXJ0aWNhbCIgbXNnaWQ9IjkwNzUyOTIyMzM2OTYxODA4MTMiPiLQktC10YDRgtC40LrQsNC70L3QviDRgNCw0LfQtNC10LvRj9C90LUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4i0J/QtdGA0YHQvtC90LDQu9C40LfQuNGA0LDQvdC+INGA0LDQt9C00LXQu9GP0L3QtSI8L3N0cmluZz4KQEAgLTM2NSw3ICszNjQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzc5MTg3MjY3NTA5NTU4NTkiPiLQoNC10LbQuNC80YrRgiDQt9CwINC30LDQv9Cw0LfQstCw0L3QtSDQvdCwINCx0LDRgtC10YDQuNGP0YLQsCDQtSDQstC60LvRjtGH0LXQvSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiLQndCw0LzQsNC70Y/QstCwINC10YTQtdC60YLQuNCy0L3QvtGB0YLRgtCwINC4INC00LDQvdC90LjRgtC1INC90LAg0LfQsNC00LXQvSDQv9C70LDQvSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4i0JjQt9C60LvRjtGH0LLQsNC90LUg0L3QsCDRgNC10LbQuNC80LAg0LfQsCDQt9Cw0L/QsNC30LLQsNC90LUg0L3QsCDQsdCw0YLQtdGA0LjRj9GC0LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4i0KHQutGA0LjRgtC+INGB0YrQtNGK0YDQttCw0L3QuNC1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiI8eGxpZmY6ZyBpZD0iQVBQX1NFRUtJTkdfUEVSTUlTU0lPTiI+JXM8L3hsaWZmOmc+INGJ0LUg0LfQsNC/0L7Rh9C90LUg0LTQsCDQt9Cw0YHQvdC10LzQsCDQstGB0LjRh9C60L4sINC60L7QtdGC0L4g0YHQtSDQv9C+0LrQsNC30LLQsCDQvdCwINC10LrRgNCw0L3QsCDQstC4LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fcmVtZW1iZXJfdGV4dCIgbXNnaWQ9IjMxMDM1MTA4ODIxNzI3NDY3NTIiPiLQlNCwINC90LUg0YHQtSDQv9C+0LrQsNC30LLQsCDQvtGC0L3QvtCy0L4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4i0JjQt9GH0LjRgdGC0LLQsNC90LUg0L3QsCDQstGB0LjRh9C60LgiPC9zdHJpbmc+CkBAIC00NTAsNCArNDQ4LDI4IEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+ItCU0LAg0YHQtSDQstC60LvRjtGH0Lgg0LvQuCBCbHVldG9vdGg/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9tZXNzYWdlIiBtc2dpZD0iOTEwNjU5NTk5MDcwODk4NTM4NSI+ItCX0LAg0LTQsCDRgdCy0YrRgNC20LXRgtC1INC60LvQsNCy0LjQsNGC0YPRgNCw0YLQsCDRgSDRgtCw0LHQu9C10YLQsCDRgdC4LCDQv9GK0YDQstC+INGC0YDRj9Cx0LLQsCDQtNCwINCy0LrQu9GO0YfQuNGC0LUgQmx1ZXRvb3RoLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+ItCS0LrQu9GO0YfQstCw0L3QtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX3RvcGljIiBtc2dpZD0iMzY0MTQwMzQ4OTMxODY1OTY2NiI+ItCf0YDQuNC70LDQs9Cw0L3QtSDQt9CwINC40LfQstC10YHRgtC40Y/RgtCwINC90LAg0YLQtdC80LAg4oCePHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+4oCcIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4i0J/RgNC40LvQsNCz0LDQvdC1INC30LAg0LLRgdC40YfQutC4INC40LfQstC10YHRgtC40Y8g0L7RgiDRgtC+0LLQsCDQv9GA0LjQu9C+0LbQtdC90LjQtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfaW1wb3J0YW5jZSIgbXNnaWQ9IjUxOTg1Nzg5ODg5NzgyMzQxNjEiPiLQkdC70L7QutC40YDQsNC90L4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW1wb3J0YW5jZSIgbXNnaWQ9IjQxMDk5Mjk5ODYxMDcxNDc5MzAiPiLQnNCw0LvQutCwINCy0LDQttC90L7RgdGCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9pbXBvcnRhbmNlIiBtc2dpZD0iODE5MjEwNzY4OTk5NTc0MjY1MyI+ItCd0L7RgNC80LDQu9C90LAg0LLQsNC20L3QvtGB0YIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoaWdoX2ltcG9ydGFuY2UiIG1zZ2lkPSIxNTI3MDY2MTk1NjE0MDUwMjYzIj4i0JPQvtC70Y/QvNCwINCy0LDQttC90L7RgdGCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4i0J3QtdC+0YLQu9C+0LbQvdCwINCy0LDQttC90L7RgdGCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjIzOTcxOTI2NDI2NTc4NzI4NzIiPiLQotC10LfQuCDQuNC30LLQtdGB0YLQuNGPINC90LUg0YHQtSDQv9C+0LrQsNC30LLQsNGCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+ItCR0LXQt9C30LLRg9GH0L3QviDQv9C+0LrQsNC30LLQsNC90LUg0L3QsNC5LdC00L7Qu9GDINCyINGB0L/QuNGB0YrQutCwINGBINC40LfQstC10YHRgtC40Y8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+ItCi0LXQt9C4INC40LfQstC10YHRgtC40Y8g0YHQtSDQv9C+0LrQsNC30LLQsNGCINCx0LXQtyDQt9Cy0YPQuiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4i0J/QvtC60LDQt9Cy0LDQvdC1INC90LDQuS3Qs9C+0YDQtSDQsiDRgdC/0LjRgdGK0LrQsCDRgSDQuNC30LLQtdGB0YLQuNGPINC4INC40LfQtNCw0LLQsNC90LUg0L3QsCDQt9Cy0YPQutC+0LIg0YHQuNCz0L3QsNC7Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iNTIzNjk4NzE3MTkwNDc1NjEzNCI+ItCf0L7QutCw0LfQstCw0L3QtSDQvdCwINC10LrRgNCw0L3QsCDQuCDQuNC30LTQsNCy0LDQvdC1INC90LAg0LfQstGD0LrQvtCyINGB0LjQs9C90LDQuyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9tb3JlX3NldHRpbmdzIiBtc2dpZD0iODE2MzA2MjgzMzk2NTUzNTcxIj4i0J7RidC1INC90LDRgdGC0YDQvtC50LrQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9kb25lIiBtc2dpZD0iNTI3OTQyNjA0NzI3MzkzMDE3NSI+ItCT0L7RgtC+0LLQviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9ub25lIiBtc2dpZD0iMjEyMTk1NzkyNjA0MDU0MzE0OCI+ItCd0L7RgNC80LDQu9C90Lgg0YbQstC10YLQvtCy0LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4i0J3QvtGJ0L3QuCDRhtCy0LXRgtC+0LLQtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4i0J/QtdGA0YHQvtC90LDQu9C40LfQuNGA0LDQvdC4INGG0LLQtdGC0L7QstC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4i0J3QtdC40LfQstC10YHRgtC90Lgg0YbQstC10YLQvtCy0LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4i0J/RgNC+0LzRj9C90LAg0L3QsCDRhtCy0LXRgtC+0LLQtdGC0LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfc2hvd19xcyIgbXNnaWQ9IjE3NjMyNDQzNTQzOTkyNzY2NzkiPiLQn9C+0LrQsNC30LLQsNC90LUg0L3QsCDQv9C70L7Rh9C60LDRgtCwINC30LAg0LHRitGA0LfQuCDQvdCw0YHRgtGA0L7QudC60LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9lbmFibGVfY3VzdG9tIiBtc2dpZD0iNjcyOTAwMTMwODIxNzM0NzUwMSI+ItCQ0LrRgtC40LLQuNGA0LDQvdC1INC90LAg0L/QtdGA0YHQvtC90LDQu9C40LfQuNGA0LDQvdC+0YLQviDRgtGA0LDQvdGB0YTQvtGA0LzQuNGA0LDQvdC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4i0J/RgNC40LvQsNCz0LDQvdC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+ItCf0L7RgtCy0YrRgNC20LTQsNCy0LDQvdC1INC90LAg0L3QsNGB0YLRgNC+0LnQutC40YLQtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+ItCd0Y/QutC+0Lgg0L3QsNGB0YLRgNC+0LnQutC4INC30LAg0YbQstC10YLQvtCy0LXRgtC1INC80L7Qs9Cw0YIg0LTQsCDQvdCw0L/RgNCw0LLRj9GCINGC0L7QstCwINGD0YHRgtGA0L7QudGB0YLQstC+INC90LXQuNC30L/QvtC70LfQstCw0LXQvNC+LiDQl9CwINC00LAg0LPQuCDQv9C+0YLQstGK0YDQtNC40YLQtSwg0LrQu9C40LrQvdC10YLQtSDQstGK0YDRhdGDIOKAnk9L4oCcLiDQkiDQv9GA0L7RgtC40LLQtdC9INGB0LvRg9GH0LDQuSDRgtC1INGJ0LUg0LHRitC00LDRgiDQvdGD0LvQuNGA0LDQvdC4INGB0LvQtdC0IDEwINGB0LXQutGD0L3QtNC4LiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1ibi1yQkQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWJuLXJCRC9zdHJpbmdzLnhtbAppbmRleCA0OGQzZjQ2Li45Mzk0NjViNiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1ibi1yQkQvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1ibi1yQkQvc3RyaW5ncy54bWwKQEAgLTMwMSw4ICszMDEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+IuCmheCmqOCngeCmuOCmqOCnjeCmp+CmvuCmqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IOCmtuCngeCmsOCngSDgppXgprDgpr4g4Kav4Ka+4Kav4Ka84Kao4Ka/4Ke3Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zaG93X2hpc3RvcnlfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNzA2MjA4ODE5NjQ0OTc0NzI0NSI+IuCmhuCmsOCniyI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciByZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0ICg2MzM3MTU1NjA4MDU1MDYyNDI5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCIgbXNnaWQ9IjYzMzcxNTU2MDgwNTUwNjI0MjkiPiLgpobgprDgp4sgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+4Kaf4Ka/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiLgpoXgpqjgp4Hgpq3gp4Lgpq7gpr/gppUg4Ka44KeN4Kaq4KeN4Kay4Ka/4KafIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfdmVydGljYWwiIG1zZ2lkPSI5MDc1MjkyMjMzNjk2MTgwODEzIj4i4KaJ4Kay4KeN4Kay4Kau4KeN4KasIOCmuOCnjeCmquCnjeCmsuCmv+CmnyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2N1c3RvbSIgbXNnaWQ9IjQxNzc4Mzc1OTc1MTM3MDE5NDMiPiLgppXgpr7gprjgp43gpp/gpq4g4Ka44KeN4Kaq4KeN4Kay4Ka/4KafIOCmleCmsOCngeCmqCI8L3N0cmluZz4KQEAgLTM2NSw3ICszNjQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzc5MTg3MjY3NTA5NTU4NTkiPiLgpqzgp43gpq/gpr7gpp/gpr7gprDgpr8g4Ka44KeH4Kat4Ka+4KawIOCmmuCmvuCmsuCngSDgprDgpq/gprzgp4fgppvgp4ciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iODIwMzE4Nzg4MTI2NjcyNjkyIj4i4KaV4Ka+4Kaw4KeN4KavLeCmuOCmruCnjeCmquCmvuCmpuCmqOCmviDgppMg4Kaq4Ka24KeN4Kaa4Ka+4Kam4Kaq4KafIOCmoeCnh+Cmn+CmvuCmleCnhyDgppXgpq7gpr/gpq/gprzgp4cg4Kam4KeH4Kav4Ka8Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiLgpqzgp43gpq/gpr7gpp/gpr7gprDgpr8g4Ka44Kae4KeN4Kaa4Kav4Ka84KaV4Ka+4Kaw4KeAIOCmrOCmqOCnjeCmpyDgppXgprDgp4HgpqgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4i4Kay4KeB4KaV4Ka+4Kao4KeLIOCmrOCmv+Cmt+Cmr+CmvOCmrOCmuOCnjeCmpOCngSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fZGlhbG9nX3RleHQiIG1zZ2lkPSIzMDcxNDMxMDI1NDQ4MjE4OTI4Ij4iPHhsaWZmOmcgaWQ9IkFQUF9TRUVLSU5HX1BFUk1JU1NJT04iPiVzPC94bGlmZjpnPiDgpobgpqrgpqjgpr7gprAg4Ka44KeN4KaV4KeN4Kaw4KeA4Kao4KeHIOCmpuCnh+CmluCmvuCmqOCniyDgprjgpqwg4KaV4Ka/4Kab4KeBIOCmleCnjeCmr+CmvuCmquCmmuCmvuCmsCDgppXgprDgpr4g4Ka24KeB4Kaw4KeBIOCmleCmsOCmrOCnh+ClpCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fcmVtZW1iZXJfdGV4dCIgbXNnaWQ9IjMxMDM1MTA4ODIxNzI3NDY3NTIiPiLgpobgprAg4Kam4KeH4KaW4Ka+4Kas4KeH4KaoIOCmqOCmviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNsZWFyX2FsbF9ub3RpZmljYXRpb25zX3RleHQiIG1zZ2lkPSI4MTQxOTI4ODk3NzE0NjI4MjgiPiLgprjgpqzgppXgpr/gppvgp4Eg4Ka44Ka+4KarIOCmleCmsOCngeCmqCI8L3N0cmluZz4KQEAgLTQ1MCw0ICs0NDgsMjggQEAKICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfdGl0bGUiIG1zZ2lkPSI1MDI3MDM3NzA2NTAwNjM1MjY5Ij4iQmx1ZXRvb3RoIOCmmuCmvuCmsuCngSDgppXgprDgpqzgp4fgpqg/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9tZXNzYWdlIiBtc2dpZD0iOTEwNjU5NTk5MDcwODk4NTM4NSI+IuCmhuCmquCmqOCmvuCmsCDgpp/gp43gpq/gpr7gpqzgprLgp4fgpp/gp4fgprAg4Ka44Ka+4Kal4KeHIOCmhuCmquCmqOCmvuCmsCDgppXgp4Dgpqzgp4vgprDgp43gpqEg4Ka44KaC4Kav4KeB4KaV4KeN4KakIOCmleCmsOCmpOCnhywg4KaG4Kaq4Kao4Ka+4KaV4KeHIOCmquCnjeCmsOCmpeCmruCnhyBCbHVldG9vdGgg4Kaa4Ka+4Kay4KeBIOCmleCmsOCmpOCnhyDgprngpqzgp4fgpaQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiLgpprgpr7gprLgp4Eg4KaV4Kaw4KeB4KaoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4iPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+IOCmrOCmv+CmnOCnjeCmnuCmquCnjeCmpOCmv+Cml+CngeCmsuCmv+CmpOCnhyDgpqrgp43gprDgpq/gprzgp4vgppcg4KaV4Kaw4KeB4KaoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4i4KaP4KaHIOCmheCnjeCmr+CmvuCmquCnjeCmsuCmv+CmleCnh+CmtuCmqOCnh+CmsCDgpqXgp4fgppXgp4cg4Ka44KasIOCmrOCmv+CmnOCnjeCmnuCmquCnjeCmpOCmv+CmpOCnhyDgpqrgp43gprDgpq/gprzgp4vgppcg4KaV4Kaw4KeB4KaoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IuCmheCmrOCmsOCngeCmpuCnjeCmpyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbXBvcnRhbmNlIiBtc2dpZD0iNDEwOTkyOTk4NjEwNzE0NzkzMCI+IuCmleCmriDgppfgp4HgprDgp4HgpqTgp43gpqwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4i4Ka44Ka+4Kan4Ka+4Kaw4KajIOCml+CngeCmsOCngeCmpOCnjeCmrCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiLgpqzgp4fgprbgpr8g4KaX4KeB4Kaw4KeB4Kak4KeN4KasIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4i4Kac4Kaw4KeB4Kaw4Ka/IOCml+CngeCmsOCngeCmpOCnjeCmrCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4i4KaP4KaHIOCmrOCmv+CmnOCnjeCmnuCmquCnjeCmpOCmv+Cml+CngeCmsuCmvyDgppXgppbgpqjgp4vgpocg4Kam4KeH4KaW4Ka+4Kao4KeLIOCmueCmrOCnhyDgpqjgpr4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4i4Kas4Ka/4Kac4KeN4Kae4Kaq4KeN4Kak4Ka/IOCmpOCmvuCmsuCmv+CmleCmvuCmsCDgpqjgp4Dgpprgp4fgprAg4KaF4KaC4Ka24KeHIOCmqOCmv+Cmg+CmtuCmrOCnjeCmpuCnhyDgpqbgp4fgppbgpr7gpqjgp4sg4Ka54Kav4Ka8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9IjQ5MjY1Mjk2MTU5MjA2MTA4MTciPiLgpqjgpr/gpoPgprbgpqzgp43gpqbgp4cg4KaP4KaHIOCmrOCmv+CmnOCnjeCmnuCmquCnjeCmpOCmv+Cml+CngeCmsuCmvyDgpqbgp4fgppbgpr7gpqjgp4sg4Ka54Kav4Ka8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMyMjI2ODAxMzY2MTI0MDgyMjMiPiLgpqzgpr/gppzgp43gpp7gpqrgp43gpqTgpr8g4Kak4Ka+4Kay4Ka/4KaV4Ka+4KawIOCmtuCngOCmsOCnjeCmt+CnhyDgpqbgp4fgppbgpr7gpqjgp4sg4Ka54Kav4Ka8IOCmj+CmrOCmgiDgprbgpqzgp43gpqYg4KaV4Kaw4KeHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iNTIzNjk4NzE3MTkwNDc1NjEzNCI+IuCmuOCnjeCmleCnjeCmsOCngOCmqOCnh+CmsCDgpongpqrgprDgp4cg4Kam4KeH4KaW4Ka+4Kao4KeLIOCmueCmr+CmvCDgpo/gpqzgpoIg4Ka24Kas4KeN4KamIOCmleCmsOCnhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9tb3JlX3NldHRpbmdzIiBtc2dpZD0iODE2MzA2MjgzMzk2NTUzNTcxIj4i4KaG4Kaw4KeLIOCmuOCnh+Cmn+Cmv+CmguCmuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9kb25lIiBtc2dpZD0iNTI3OTQyNjA0NzI3MzkzMDE3NSI+IuCmuOCmruCnjeCmquCmqOCnjeCmqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9ub25lIiBtc2dpZD0iMjEyMTk1NzkyNjA0MDU0MzE0OCI+IuCmuOCnjeCmrOCmvuCmreCmvuCmrOCmv+CmlSDgprDgppkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4i4Kaw4Ka+4Kak4KeH4KawIOCmsOCmmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4i4KaV4Ka+4Ka44KeN4Kaf4KauIOCmsOCmmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF91bmtub3duIiBtc2dpZD0iMjcwOTIwMjEwNDI1NjI2NTEwNyI+IuCmheCmnOCmvuCmqOCmviDgprDgppkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4i4Kaw4KaZIOCmuOCmguCmtuCni+Cmp+CmqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+IuCmpuCnjeCmsOCngeCmpCDgprjgp4fgpp/gpr/gpoLgprgg4Kaf4Ka+4KaH4KayIOCmpuCnh+CmluCmvuCmqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4i4KaV4Ka+4Ka44KeN4Kaf4KauIOCmsOCnguCmquCmvuCmqOCnjeCmpOCmsCDgprjgppXgp43gprfgpq4g4KaV4Kaw4KeB4KaoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4i4Kaq4KeN4Kaw4Kav4Ka84KeL4KaXIOCmleCmsOCngeCmqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiLgprjgp4fgpp/gpr/gpoLgprgg4Kao4Ka/4Ka24KeN4Kaa4Ka/4KakIOCmleCmsOCngeCmqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+IuCmleCmv+Cmm+CngSDgprDgppngp4fgprAg4Ka44KeH4Kaf4Ka/4KaC4Ka4IOCmj+CmhyDgpqHgpr/gpq3gpr7gpofgprjgppXgp4cg4Kas4KeN4Kav4Kas4Ka54Ka+4Kaw4KeH4KawIOCmheCmr+Cni+Cml+CnjeCmryDgppXgprDgp4cg4Kam4Ka/4Kak4KeHIOCmquCmvuCmsOCnh+CntyDgpo/gpocg4Kaw4KaZ4KeH4KawIOCmuOCnh+Cmn+Cmv+CmguCmuCDgpqjgpr/gprbgp43gpprgpr/gpqQg4KaV4Kaw4Kak4KeHIOCmk+CmleCnhyDgpo8g4KaV4KeN4Kay4Ka/4KaVIOCmleCmsOCngeCmqCwg4KaF4Kao4KeN4Kav4Kal4Ka+4Kav4Ka8IOCnp+CnpiDgprjgp4fgppXgp4fgpqjgp43gpqEg4Kaq4Kaw4KeHIOCmj+CmhyDgprjgp4fgpp/gpr/gpoLgprgg4Kaq4KeB4Kao4Kaw4Ka+4Kav4Ka8IOCmuOCnh+CmnyDgprngpqzgp4fgp7ciPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtY2Evc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWNhL3N0cmluZ3MueG1sCmluZGV4IGE4MzQwNGMuLmUxOWFhMGUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtY2Evc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1jYS9zdHJpbmdzLnhtbApAQCAtMzY0LDcgKzM2NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+IkVzdGFsdmkgZGUgYmF0ZXJpYSBhY3RpdmF0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+IlJlZHVlaXggZWwgcmVuZGltZW50IGkgbFwnw7pzIGRlIGxlcyBkYWRlcyBlbiBzZWdvbiBwbGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiJEZXNhY3RpdmEgbFwnZXN0YWx2aSBkZSBiYXRlcmlhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IkNvbnRpbmd1dCBhbWFnYXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+Ijx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4gY29tZW7Dp2Fyw6AgYSBlbnJlZ2lzdHJhciB0b3QgZWwgcXVlIGVzIG1vc3RyaSBhIGxhIHBhbnRhbGxhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fcmVtZW1iZXJfdGV4dCIgbXNnaWQ9IjMxMDM1MTA4ODIxNzI3NDY3NTIiPiJObyBobyB0b3JuaXMgYSBtb3N0cmFyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+IkVzYm9ycmEtaG8gdG90Ijwvc3RyaW5nPgpAQCAtNDQ5LDQgKzQ0OCwyOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiJWb2xzIGFjdGl2YXIgZWwgQmx1ZXRvb3RoPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiJQZXIgY29ubmVjdGFyIGVsIHRlY2xhdCBhbWIgbGEgdGF1bGV0YSwgcHJpbWVyIGhhcyBkXCdhY3RpdmFyIGVsIEJsdWV0b290aC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiJBY3RpdmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiJBcGxpY2EgYSBsZXMgbm90aWZpY2FjaW9ucyBzb2JyZSA8eGxpZmY6ZyBpZD0iVE9QSUNfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b19hcHAiIG1zZ2lkPSIzNjMwMTY3ODM5Mzk4MTU5NjAiPiJBcGxpY2EgYSB0b3RlcyBsZXMgbm90aWZpY2FjaW9ucyBkXCdhcXVlc3RhIGFwbGljYWNpw7MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX2ltcG9ydGFuY2UiIG1zZ2lkPSI1MTk4NTc4OTg4OTc4MjM0MTYxIj4iQmxvcXVlamFkZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW1wb3J0YW5jZSIgbXNnaWQ9IjQxMDk5Mjk5ODYxMDcxNDc5MzAiPiJJbXBvcnTDoG5jaWEgYmFpeGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4iSW1wb3J0w6BuY2lhIG5vcm1hbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiJJbXBvcnTDoG5jaWEgYWx0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1heF9pbXBvcnRhbmNlIiBtc2dpZD0iNTA4OTAwNTg3MjcxOTU2Mzg5NCI+IkltcG9ydMOgbmNpYSB1cmdlbnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iMjM5NzE5MjY0MjY1Nzg3Mjg3MiI+Ik5vIG1vc3RyaXMgbWFpIGFxdWVzdGVzIG5vdGlmaWNhY2lvbnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4iTW9zdHJhIGRlIG1hbmVyYSBzaWxlbmNpb3NhIGEgbGEgcGFydCBpbmZlcmlvciBkZSBsYSBsbGlzdGEgZGUgbm90aWZpY2FjaW9ucyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI0OTI2NTI5NjE1OTIwNjEwODE3Ij4iTW9zdHJhIGFxdWVzdGVzIG5vdGlmaWNhY2lvbnMgZGUgbWFuZXJhIHNpbGVuY2lvc2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+Ik1vc3RyYSBhIGxhIHBhcnQgc3VwZXJpb3IgZGUgbGEgbGxpc3RhIGRlIG5vdGlmaWNhY2lvbnMgaSBlbWV0IHVuIHNvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iNTIzNjk4NzE3MTkwNDc1NjEzNCI+Ik1vc3RyYSBhIGxhIHBhbnRhbGxhIGkgZW1ldCB1biBzbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9tb3JlX3NldHRpbmdzIiBtc2dpZD0iODE2MzA2MjgzMzk2NTUzNTcxIj4iTcOpcyBvcGNpb25zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4iRmV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25vbmUiIG1zZ2lkPSIyMTIxOTU3OTI2MDQwNTQzMTQ4Ij4iQ29sb3JzIG5vcm1hbHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4iQ29sb3JzIG5vY3R1cm5zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X2N1c3RvbSIgbXNnaWQ9IjM2NTU1NzY0OTIzMjIyOTg3MTMiPiJDb2xvcnMgcGVyc29uYWxpdHphdHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiJDb2xvcnMgZGVzY29uZWd1dHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4iTW9kaWZpY2FjacOzIGRlbCBjb2xvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+Ik1vc3RyYSBlbCBtb3NhaWMgZGUgQ29uZmlndXJhY2nDsyByw6BwaWRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiJBY3RpdmEgbGEgdHJhbnNmb3JtYWNpw7MgcGVyc29uYWxpdHphZGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9hcHBseSIgbXNnaWQ9IjkyMTI2MDIwMTI2NDEwMzQyODMiPiJBcGxpY2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfdGl0bGUiIG1zZ2lkPSI0NzQ2NjY2NTQ1NDgwNTM0NjYzIj4iQ29uZmlybWEgbGEgY29uZmlndXJhY2nDsyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+IkFsZ3VuZXMgb3BjaW9ucyBkZSBjb25maWd1cmFjacOzIGRlIGNvbG9yIHBvZGVuIGRlaXhhciBlbCBkaXNwb3NpdGl1IGluc2VydmlibGUuIEZlcyBjbGljIGEgRFwnYWNvcmQgcGVyIGNvbmZpcm1hciBsYSBjb25maWd1cmFjacOzIGRlIGNvbG9yOyBlbiBjYXMgY29udHJhcmksIGxhIGNvbmZpZ3VyYWNpw7MgZXMgcmVzdGFibGlyw6AgYWwgY2FwIGRlIDEwIHNlZ29ucy4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtY3Mvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWNzL3N0cmluZ3MueG1sCmluZGV4IDc4OTU5NTEuLmIxY2Q1NjEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtY3Mvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1jcy9zdHJpbmdzLnhtbApAQCAtMzAzLDggKzMwMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4idnlobGVkYXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xhdW5jaF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMjk2OTI4NzgzODEyMDU1MDUwNiI+IkFwbGlrYWNpIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiBuZWx6ZSBzcHVzdGl0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2hvd19oaXN0b3J5X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjcwNjIwODgxOTY0NDk3NDcyNDUiPiJEYWzFocOtIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQgKDYzMzcxNTU2MDgwNTUwNjI0MjkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+ImplxaF0xJsgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiJWb2Rvcm92bsOpIHJvemTEm2xlbsOtIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfdmVydGljYWwiIG1zZ2lkPSI5MDc1MjkyMjMzNjk2MTgwODEzIj4iVmVydGlrw6FsbsOtIHJvemTEm2xlbsOtIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfY3VzdG9tIiBtc2dpZD0iNDE3NzgzNzU5NzUxMzcwMTk0MyI+IlZsYXN0bsOtIHJvemTEm2xlbsOtIjwvc3RyaW5nPgpAQCAtMzY3LDcgKzM2Niw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+IlJlxb5pbSDDmnNwb3JhIGJhdGVyaWUgamUgemFwbnV0w70uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+Ik9tZXp1amUgdsO9a29uIGEgZGF0YSBuYSBwb3phZMOtIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiJWeXBub3V0IMO6c3BvcnUgYmF0ZXJpZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJTa3J5dMO9IG9ic2FoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiJBcGxpa2FjZSA8eGxpZmY6ZyBpZD0iQVBQX1NFRUtJTkdfUEVSTUlTU0lPTiI+JXM8L3hsaWZmOmc+IHphxI1uZSB6YXpuYW1lbsOhdmF0IHbFoWUsIGNvIGplIHpvYnJhemVubyBuYSBvYnJhem92Y2UuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+IlR1dG8genByw6F2dSBwxZnDrcWhdMSbIG5lem9icmF6b3ZhdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNsZWFyX2FsbF9ub3RpZmljYXRpb25zX3RleHQiIG1zZ2lkPSI4MTQxOTI4ODk3NzE0NjI4MjgiPiJTbWF6YXQgdsWhZSI8L3N0cmluZz4KQEAgLTQ1Miw0ICs0NTAsMjggQEAKICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfdGl0bGUiIG1zZ2lkPSI1MDI3MDM3NzA2NTAwNjM1MjY5Ij4iWmFwbm91dCBCbHVldG9vdGg/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9tZXNzYWdlIiBtc2dpZD0iOTEwNjU5NTk5MDcwODk4NTM4NSI+IkNoY2V0ZS1saSBrbMOhdmVzbmljaSBwxZlpcG9qaXQga8KgdGFibGV0dSwgbmVqZMWZw612ZSBtdXPDrXRlIHphcG5vdXQgQmx1ZXRvb3RoLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+IlphcG5vdXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiJQb3XFvsOtdCB1wqBvem7DoW1lbsOtIHrCoGFwbGlrYWNlIDx4bGlmZjpnIGlkPSJUT1BJQ19OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+IlBvdcW+w610IHXCoHbFoWVjaCBvem7DoW1lbsOtIHrCoHTDqXRvIGFwbGlrYWNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IkJsb2tvdsOhbm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW1wb3J0YW5jZSIgbXNnaWQ9IjQxMDk5Mjk5ODYxMDcxNDc5MzAiPiJOw616a8OhIGTFr2xlxb5pdG9zdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiJOb3Jtw6FsbsOtIGTFr2xlxb5pdG9zdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiJWeXNva8OhIGTFr2xlxb5pdG9zdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1heF9pbXBvcnRhbmNlIiBtc2dpZD0iNTA4OTAwNTg3MjcxOTU2Mzg5NCI+IlVyZ2VudG7DrSBkxa9sZcW+aXRvc3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iMjM5NzE5MjY0MjY1Nzg3Mjg3MiI+IlRhdG8gb3puw6FtZW7DrSBuaWtkeSBuZXpvYnJhem92YXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4iVGF0byBvem7DoW1lbsOtIHpvYnJhem92YXQgbmEga29uY2kgc2V6bmFtdSBiZXogenZ1a292w6lobyB1cG96b3JuxJtuw60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+IlRhdG8gb3puw6FtZW7DrSB6b2JyYXpvdmF0IGJleiB6dnVrb3bDqWhvIHVwb3pvcm7Em27DrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4iVGF0byBvem7DoW1lbsOtIHpvYnJhem92YXQgbmEgemHEjcOhdGt1IHNlem5hbXUgYcKgdXBvem9ybml0IG5hIG7EmyB6dnVrZW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4iVGF0byBvem7DoW1lbsOtIHpvYnJhem92YXQgcMWZw61tbyBuYSBvYnJhem92Y2UgYcKgdXBvem9ybml0IG5hIG7EmyB6dnVrZW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+IkRhbMWhw60gbmFzdGF2ZW7DrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9kb25lIiBtc2dpZD0iNTI3OTQyNjA0NzI3MzkzMDE3NSI+IkhvdG92byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9ub25lIiBtc2dpZD0iMjEyMTk1NzkyNjA0MDU0MzE0OCI+Ik5vcm3DoWxuw60gYmFydnkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4iTm/EjW7DrSBiYXJ2eSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4iVmxhc3Ruw60gYmFydnkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiJOZXpuw6Ftw6kgYmFydnkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4iWm3Em25hIGJhcmV2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Nob3dfcXMiIG1zZ2lkPSIxNzYzMjQ0MzU0Mzk5Mjc2Njc5Ij4iWm9icmF6aXQgZGxhxb5kaWNpIFJ5Y2hsw6kgbmFzdGF2ZW7DrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4iVW1vxb5uaXQgcMWZZXZvZCBuYSB2bGFzdG7DrSBiYXJ2eSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+IlBvdcW+w610Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+Ik92xJvFmWVuw60gbmFzdGF2ZW7DrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+Ik7Em2t0ZXLDoSBuYXN0YXZlbsOtIGJhcmV2IG1vaG91IHpwxa9zb2JpdCwgxb5lIHphxZnDrXplbsOtIG5lYnVkZSBwb3XFvml0ZWxuw6kuIEtsaWtudXTDrW0gbmEgT0sgdG90byBuYXN0YXZlbsOtIGJhcmV2IHBvdHZyZMOtdGUsIHbCoG9wYcSNbsOpbSBwxZnDrXBhZMSbIHNlIG5hc3RhdmVuw60gcG8gMTAgc2VrdW5kw6FjaCByZXNldHVqZS4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZGEvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWRhL3N0cmluZ3MueG1sCmluZGV4IGU2OWQwNjkuLjIxMDBjNTcgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZGEvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1kYS9zdHJpbmdzLnhtbApAQCAtMzAxLDggKzMwMSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4ic8O4ZyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IGt1bm5lIGlra2Ugc3RhcnRlcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4iTWVyZSI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciByZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0ICg2MzM3MTU1NjA4MDU1MDYyNDI5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCIgbXNnaWQ9IjYzMzcxNTU2MDgwNTUwNjI0MjkiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gbWVyZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2hvcml6b250YWwiIG1zZ2lkPSI4ODQ4NTE0NDc0NTQzNDI3MzMyIj4iT3BkZWwgdmFuZHJldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X3ZlcnRpY2FsIiBtc2dpZD0iOTA3NTI5MjIzMzY5NjE4MDgxMyI+Ik9wZGVsIGxvZHJldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2N1c3RvbSIgbXNnaWQ9IjQxNzc4Mzc1OTc1MTM3MDE5NDMiPiJPcGRlbCBicnVnZXJkZWZpbmVyZXQiPC9zdHJpbmc+CkBAIC0zNjUsNyArMzY0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjM3OTE4NzI2NzUwOTU1ODU5Ij4iQmF0dGVyaXNwYXJlZnVua3Rpb24gZXIgc2zDpWV0IHRpbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiJSZWR1Y2VyZXIgeWRlZXZuZSBvZyBiYWdncnVuZHNkYXRhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiJEZWFrdGl2ZXIgYmF0dGVyaXNwYXJlZnVua3Rpb24iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4iSW5kaG9sZGV0IGVyIHNranVsdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fZGlhbG9nX3RleHQiIG1zZ2lkPSIzMDcxNDMxMDI1NDQ4MjE4OTI4Ij4iPHhsaWZmOmcgaWQ9IkFQUF9TRUVLSU5HX1BFUk1JU1NJT04iPiVzPC94bGlmZjpnPiB2aWwgYmVneW5kZSBhdCBvcHRhZ2UgYWx0LCBodmFkIGRlciB2aXNlcyBww6UgZGluIHNrw6ZybS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX3JlbWVtYmVyX3RleHQiIG1zZ2lkPSIzMTAzNTEwODgyMTcyNzQ2NzUyIj4iVmlzIGlra2UgaWdlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNsZWFyX2FsbF9ub3RpZmljYXRpb25zX3RleHQiIG1zZ2lkPSI4MTQxOTI4ODk3NzE0NjI4MjgiPiJSeWQgYWx0Ijwvc3RyaW5nPgpAQCAtNDUwLDQgKzQ0OCwyOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiJWaWwgZHUgc2zDpSBCbHVldG9vdGggdGlsPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiJCbHVldG9vdGggc2thbCB2w6ZyZSBzbMOlZXQgdGlsLCBmw7hyIGR1IGthbiBrbnl0dGUgZGl0IHRhc3RhdHVyIHRpbCBkaW4gdGFibGV0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+IlNsw6UgdGlsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4iQW52ZW5kIGZvciB1bmRlcnJldG5pbmdlciB2ZWRyw7hyZW5kZSA8eGxpZmY6ZyBpZD0iVE9QSUNfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b19hcHAiIG1zZ2lkPSIzNjMwMTY3ODM5Mzk4MTU5NjAiPiJBbnZlbmQgZm9yIGFsbGUgdW5kZXJyZXRuaW5nZXIgZnJhIGRlbm5lIGFwcCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfaW1wb3J0YW5jZSIgbXNnaWQ9IjUxOTg1Nzg5ODg5NzgyMzQxNjEiPiJCbG9rZXJldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbXBvcnRhbmNlIiBtc2dpZD0iNDEwOTkyOTk4NjEwNzE0NzkzMCI+IkxpbGxlIHZpZ3RpZ2hlZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiJOb3JtYWwgdmlndGlnaGVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+IlN0b3IgdmlndGlnaGVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4iUHJlc3NlcmVuZGUgdmlndGlnaGVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjIzOTcxOTI2NDI2NTc4NzI4NzIiPiJWaXMgYWxkcmlnIGRpc3NlIHVuZGVycmV0bmluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+IlZpcyBseWRsw7hzdCBuZWRlcnN0IHDDpSBsaXN0ZW4gb3ZlciB1bmRlcnJldG5pbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI0OTI2NTI5NjE1OTIwNjEwODE3Ij4iVmlzIGRpc3NlIHVuZGVycmV0bmluZ2VyIGx5ZGzDuHN0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMyMjI2ODAxMzY2MTI0MDgyMjMiPiJWaXMgw7h2ZXJzdCBww6UgbGlzdGVuIG92ZXIgdW5kZXJyZXRuaW5nZXIsIG9nIGdpdiBseWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4iVmlzIHDDpSBza8Omcm1lbiwgb2cgZ2l2IGx5ZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9tb3JlX3NldHRpbmdzIiBtc2dpZD0iODE2MzA2MjgzMzk2NTUzNTcxIj4iRmxlcmUgaW5kc3RpbGxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9kb25lIiBtc2dpZD0iNTI3OTQyNjA0NzI3MzkzMDE3NSI+IkbDpnJkaWciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiJBbG1pbmRlbGlnZSBmYXJ2ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4iTmF0dGVmYXJ2ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+IlRpbHBhc3NlZGUgZmFydmVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4iVWtlbmR0ZSBmYXJ2ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4iRmFydmXDpm5kcmluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+IlZpcyBmZWx0ZXQgSHVydGlnZSBpbmRzdGlsbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiJBa3RpdsOpciB0aWxwYXNzZXQgZmFydmXDpm5kcmluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+IkFudmVuZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiJCZWtyw6ZmdCBpbmRzdGlsbGluZ2VybmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfbWVzc2FnZSIgbXNnaWQ9IjkxMTYwMDEwNjkzOTc5OTY2OTEiPiJOb2dsZSBmYXJ2ZWluZHN0aWxsaW5nZXIga2FuIG1lZGbDuHJlLCBhdCBkdSBpa2tlIGthbiBicnVnZSBlbmhlZGVuLiBLbGlrIHDDpSBPSyBmb3IgYXQgYmVrcsOmZnRlIGRpc3NlIGZhcnZlaW5kc3RpbGxpbmdlci4gRWxsZXJzIG51bHN0aWxsZXMgZGlzc2UgaW5kc3RpbGxpbmdlciBlZnRlciB0aSBzZWt1bmRlci4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZGUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWRlL3N0cmluZ3MueG1sCmluZGV4IGRjNjJlNjUuLjFhZDViMjYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZGUvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1kZS9zdHJpbmdzLnhtbApAQCAtMzAxLDggKzMwMSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4iU3VjaGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xhdW5jaF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMjk2OTI4NzgzODEyMDU1MDUwNiI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiBrb25udGUgbmljaHQgZ2VzdGFydGV0IHdlcmRlbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4iTWVociI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciByZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0ICg2MzM3MTU1NjA4MDU1MDYyNDI5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCIgbXNnaWQ9IjYzMzcxNTU2MDgwNTUwNjI0MjkiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gd2VpdGVyZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2hvcml6b250YWwiIG1zZ2lkPSI4ODQ4NTE0NDc0NTQzNDI3MzMyIj4iR2V0ZWlsdGUgU2NoYWx0ZmzDpGNoZSDigJMgaG9yaXpvbnRhbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X3ZlcnRpY2FsIiBtc2dpZD0iOTA3NTI5MjIzMzY5NjE4MDgxMyI+IkdldGVpbHRlIFNjaGFsdGZsw6RjaGUg4oCTIHZlcnRpa2FsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfY3VzdG9tIiBtc2dpZD0iNDE3NzgzNzU5NzUxMzcwMTk0MyI+IkdldGVpbHRlIFNjaGFsdGZsw6RjaGUg4oCTIGJlbnV0emVyZGVmaW5pZXJ0Ijwvc3RyaW5nPgpAQCAtMzY1LDcgKzM2NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+IkVuZXJnaWVzcGFybW9kdXMgaXN0IGFrdGl2aWVydCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiJSZWR1emllcnVuZyBkZXIgTGVpc3R1bmcgdW5kIEhpbnRlcmdydW5kZGF0ZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl9hY3Rpb25fdGV4dCIgbXNnaWQ9IjEwOTE1ODY1ODIzODExMDM4MiI+IkVuZXJnaWVzcGFybW9kdXMgZGVha3RpdmllcmVuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IkluaGFsdGUgYXVzZ2VibGVuZGV0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiI8eGxpZmY6ZyBpZD0iQVBQX1NFRUtJTkdfUEVSTUlTU0lPTiI+JXM8L3hsaWZmOmc+IG5pbW10IGFsbGUgYXVmIElocmVtIEJpbGRzY2hpcm0gYW5nZXplaWd0ZW4gQWt0aXZpdMOkdGVuIGF1Zi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX3JlbWVtYmVyX3RleHQiIG1zZ2lkPSIzMTAzNTEwODgyMTcyNzQ2NzUyIj4iTmljaHQgZXJuZXV0IGFuemVpZ2VuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+IkFsbGUgbMO2c2NoZW4iPC9zdHJpbmc+CkBAIC00NTAsNCArNDQ4LDI4IEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+IkJsdWV0b290aCBha3RpdmllcmVuPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiJadW0gVmVyYmluZGVuIHZvbiBUYXN0YXR1ciB1bmQgVGFibGV0IG11c3MgQmx1ZXRvb3RoIGFrdGl2aWVydCBzZWluLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+IkFrdGl2aWVyZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiJGw7xyIEJlbmFjaHJpY2h0aWd1bmdlbiDDvGJlciA8eGxpZmY6ZyBpZD0iVE9QSUNfTkFNRSI+JTEkczwveGxpZmY6Zz4gYW53ZW5kZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b19hcHAiIG1zZ2lkPSIzNjMwMTY3ODM5Mzk4MTU5NjAiPiJBdWYgYWxsZSBCZW5hY2hyaWNodGlndW5nZW4gZGllc2VyIEFwcCBhbndlbmRlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfaW1wb3J0YW5jZSIgbXNnaWQ9IjUxOTg1Nzg5ODg5NzgyMzQxNjEiPiJCbG9ja2llcnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW1wb3J0YW5jZSIgbXNnaWQ9IjQxMDk5Mjk5ODYxMDcxNDc5MzAiPiJHZXJpbmdlIFdpY2h0aWdrZWl0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9pbXBvcnRhbmNlIiBtc2dpZD0iODE5MjEwNzY4OTk5NTc0MjY1MyI+IlJlZ3Vsw6RyZSBXaWNodGlna2VpdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiJIb2hlIFdpY2h0aWdrZWl0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4iU2VociBob2hlIFdpY2h0aWdrZWl0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjIzOTcxOTI2NDI2NTc4NzI4NzIiPiJEaWVzZSBCZW5hY2hyaWNodGlndW5nZW4gbmllbWFscyBhbnplaWdlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjQzODM1NjMyNjczNzA4NTk3MjUiPiJPaG5lIFRvbiBhbSBFbmRlIGRlciBCZW5hY2hyaWNodGlndW5nc2xpc3RlIGFuemVpZ2VuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9IjQ5MjY1Mjk2MTU5MjA2MTA4MTciPiJEaWVzZSBCZW5hY2hyaWNodGlndW5nZW4gb2huZSBUb24gYW56ZWlnZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+Ik1pdCBUb24gZ2FueiBvYmVuIGluIGRlciBCZW5hY2hyaWNodGlndW5nc2xpc3RlIGFuemVpZ2VuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iNTIzNjk4NzE3MTkwNDc1NjEzNCI+Ik1pdCBUb24gYXVmIGRlbSBEaXNwbGF5IGVpbmJsZW5kZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+IldlaXRlcmUgRWluc3RlbGx1bmdlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9kb25lIiBtc2dpZD0iNTI3OTQyNjA0NzI3MzkzMDE3NSI+IkZlcnRpZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9ub25lIiBtc2dpZD0iMjEyMTk1NzkyNjA0MDU0MzE0OCI+IlN0YW5kYXJkZmFyYmVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+Ik5hY2h0ZmFyYmVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X2N1c3RvbSIgbXNnaWQ9IjM2NTU1NzY0OTIzMjIyOTg3MTMiPiJCZW51dHplcmRlZmluaWVydGUgRmFyYmVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4iVW5iZWthbm50ZSBGYXJiZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4iRmFyYmVuIMOkbmRlcm4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfc2hvd19xcyIgbXNnaWQ9IjE3NjMyNDQzNTQzOTkyNzY2NzkiPiJLYWNoZWwgXCJTY2huZWxsZWluc3RlbGx1bmdlblwiIGFuemVpZ2VuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiJCZW51dHplcmRlZmluaWVydGUgQW5wYXNzdW5nIGFrdGl2aWVyZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9hcHBseSIgbXNnaWQ9IjkyMTI2MDIwMTI2NDEwMzQyODMiPiLDnGJlcm5laG1lbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiJFaW5zdGVsbHVuZ2VuIGJlc3TDpHRpZ2VuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X21lc3NhZ2UiIG1zZ2lkPSI5MTE2MDAxMDY5Mzk3OTk2NjkxIj4iRWluaWdlIEZhcmJlaW5zdGVsbHVuZ2VuIGvDtm5uZW4gZGF6dSBmw7xocmVuLCBkYXNzIGRhcyBHZXLDpHQgbmljaHQgbWVociBnZW51dHp0IHdlcmRlbiBrYW5uLiBLbGlja2UgYXVmIFwiT0tcIiwgdW0gZGllc2UgRmFyYmVpbnN0ZWxsdW5nZW4genUgYmVzdMOkdGlnZW4uIEFuZGVyZW5mYWxscyB3ZXJkZW4gZGllc2UgRWluc3RlbGx1bmdlbiBpbiAxMMKgU2VrdW5kZW4genVyw7xja2dlc2V0enQuIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWVsL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1lbC9zdHJpbmdzLnhtbAppbmRleCA5Y2ZhZDg1Li5mNTZkNjMwIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWVsL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZWwvc3RyaW5ncy54bWwKQEAgLTMwMSw4ICszMDEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+Is6xzr3Osc62zq7PhM63z4POtyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4izpTOtc69IM6uz4TOsc69IM60z4XOvc6xz4TOriDOtyDOtc66zrrOr869zrfPg863IM+EzrfPgiDOtc+GzrHPgc68zr/Os86uz4IgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2hvd19oaXN0b3J5X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjcwNjIwODgxOTY0NDk3NDcyNDUiPiLOoM61z4HOuc+Dz4PPjM+EzrXPgc6xIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQgKDYzMzcxNTU2MDgwNTUwNjI0MjkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDOsc66z4zOvM6xIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiLOn8+BzrnOts+Mzr3PhM65zr/PgiDOtM65zrHPh8+Jz4HOuc+DzrzPjM+CIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfdmVydGljYWwiIG1zZ2lkPSI5MDc1MjkyMjMzNjk2MTgwODEzIj4izprOrM64zrXPhM6/z4IgzrTOuc6xz4fPic+BzrnPg868z4zPgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2N1c3RvbSIgbXNnaWQ9IjQxNzc4Mzc1OTc1MTM3MDE5NDMiPiLOoM+Bzr/Pg86xz4HOvM6/z4POvM6tzr3Ov8+CIM60zrnOsc+Hz4nPgc65z4POvM+Mz4IiPC9zdHJpbmc+CkBAIC0zNjUsNyArMzY0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjM3OTE4NzI2NzUwOTU1ODU5Ij4izpcgzpXOvs6/zrnOus6/zr3PjM68zrfPg863IM68z4DOsc+EzrHPgc6vzrHPgiDOtc6vzr3Osc65IM61zr3Otc+BzrPOriI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiLOnM61zrnPjs69zrXOuSDPhM63zr0gzrHPgM+MzrTOv8+DzrcgzrrOsc65IM+EzrEgzrTOtc60zr/OvM6tzr3OsSDPgM6xz4HOsc+DzrrOt869zq/Ov8+FIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiLOkc+AzrXOvc61z4EuIM61zr7Ov865zrovz4POt8+CIM68z4DOsc+EzrHPgc6vzrHPgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLOms+Bz4XPhs+MIM+AzrXPgc65zrXPh8+MzrzOtc69zr8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+Is6YzrEgzr7Otc66zrnOvc6uz4POtc65IM63IM66zrHPhM6xzrPPgc6xz4bOriDPhM6/z4Ugz4DOtc+BzrnOtc+Hzr/OvM6tzr3Ov8+FIM+Azr/PhSDOtc68z4bOsc69zq/Ots61z4TOsc65IM+Dz4TOt869IM6/zrjPjM69zrcgz4POsc+CIM6xz4DPjCDPhM63zr0gzrXPhs6xz4HOvM6/zrPOriA8eGxpZmY6ZyBpZD0iQVBQX1NFRUtJTkdfUEVSTUlTU0lPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fcmVtZW1iZXJfdGV4dCIgbXNnaWQ9IjMxMDM1MTA4ODIxNzI3NDY3NTIiPiLOnc6xIM68zrfOvSDOtc68z4bOsc69zrnPg8+EzrXOryDOvs6xzr3OrCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNsZWFyX2FsbF9ub3RpZmljYXRpb25zX3RleHQiIG1zZ2lkPSI4MTQxOTI4ODk3NzE0NjI4MjgiPiLOlM65zrHOs8+BzrHPhs6uIM+MzrvPic69Ijwvc3RyaW5nPgpAQCAtNDUwLDQgKzQ0OCwyOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiLOlc69zrXPgc6zzr/PgM6/zq/Ot8+DzrcgQmx1ZXRvb3RoOyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiLOk865zrEgzr3OsSDPg8+Fzr3OtM6tz4POtc+EzrUgz4TOvyDPgM67zrfOus+Ez4HOv867z4zOs865zr8gzrzOtSDPhM6/IHRhYmxldCDPg86xz4IsIM64zrEgz4DPgc6tz4DOtc65IM+Az4HPjs+EzrEgzr3OsSDOtc69zrXPgc6zzr/PgM6/zrnOrs+DzrXPhM61IM+Ezr8gQmx1ZXRvb3RoLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+Is6Vzr3Otc+BzrPOv8+Azr/Or863z4POtyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX3RvcGljIiBtc2dpZD0iMzY0MTQwMzQ4OTMxODY1OTY2NiI+Is6dzrEgzrXPhs6xz4HOvM6/z4PPhM61zq8gz4PPhM65z4IgzrXOuc60zr/PgM6/zrnOrs+DzrXOuc+CIDx4bGlmZjpnIGlkPSJUT1BJQ19OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+Is6dzrEgzrXPhs6xz4HOvM6/z4PPhM61zq8gz4POtSDPjM67zrXPgiDPhM65z4IgzrXOuc60zr/PgM6/zrnOrs+DzrXOuc+CIM6xz4DPjCDOsc+Fz4TOrs69IM+EzrfOvSDOtc+GzrHPgc68zr/Os86uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+Is6Rz4DOv866zrvOtc65z4POvM6tzr3Otc+CIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4izpzOuc66z4HOrs+CIM6yzrHPgc+Nz4TOt8+EzrHPgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiLOms6xzr3Ov869zrnOus6uz4IgzrLOsc+Bz43PhM63z4TOsc+CIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+Is6czrXOs86szrvOt8+CIM6yzrHPgc+Nz4TOt8+EzrHPgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1heF9pbXBvcnRhbmNlIiBtc2dpZD0iNTA4OTAwNTg3MjcxOTU2Mzg5NCI+Is6Vz4DOtc6vzrPOv8+Fz4POtc+CIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjIzOTcxOTI2NDI2NTc4NzI4NzIiPiLOnc6xIM68zrfOvSDOtc68z4bOsc69zq/Ots6/zr3PhM6xzrkgz4DOv8+Ezq0gzrHPhc+Ezq3PgiDOv865IM61zrnOtM6/z4DOv865zq7Pg861zrnPgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjQzODM1NjMyNjczNzA4NTk3MjUiPiLOnc6xIM61zrzPhs6xzr3Or862zr/Ovc+EzrHOuSDPg8+Ezr8gzrrOrM+Ez4kgz4TOvM6uzrzOsSDPhM63z4IgzrvOr8+Dz4TOsc+CIM61zrnOtM6/z4DOv865zq7Pg861z4nOvSDPh8+Jz4HOr8+CIM+Ezq/PhM67zr8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+Is6dzrEgzrXOvM+GzrHOvc6vzrbOv869z4TOsc65IM6xz4XPhM6tz4Igzr/OuSDOtc65zrTOv8+Azr/Ouc6uz4POtc65z4Igz4fPic+Bzq/PgiDOrs+Hzr8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+Is6dzrEgzrXOvM+GzrHOvc6vzrbOv869z4TOsc65IM+Dz4TOt869IM66zr/Pgc+Fz4bOriDPhM63z4IgzrvOr8+Dz4TOsc+CIM61zrnOtM6/z4DOv865zq7Pg861z4nOvSDOvM61IM6uz4fOvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjUyMzY5ODcxNzE5MDQ3NTYxMzQiPiLOnc6xIM+Az4HOv86yzqzOu867zr/Ovc+EzrHOuSDPg8+EzrfOvSDOv864z4zOvc63IM66zrHOuSDOvc6xIM+Dz4XOvc6/zrTOtc+Nzr/Ovc+EzrHOuSDOsc+Az4wgzrrOrM+Azr/Ouc6/zr0gzq7Ph86/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX21vcmVfc2V0dGluZ3MiIG1zZ2lkPSI4MTYzMDYyODMzOTY1NTM1NzEiPiLOoM61z4HOuc+Dz4PPjM+EzrXPgc61z4Igz4HPhc64zrzOr8+DzrXOuc+CIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4izqTOrc67zr/PgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9ub25lIiBtc2dpZD0iMjEyMTk1NzkyNjA0MDU0MzE0OCI+Is6azrHOvc6/zr3Ouc66zqwgz4fPgc+OzrzOsc+EzrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4izp3Phc+Hz4TOtc+BzrnOvc6sIM+Hz4HPjs68zrHPhM6xIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X2N1c3RvbSIgbXNnaWQ9IjM2NTU1NzY0OTIzMjIyOTg3MTMiPiLOoM+Bzr/Pg86xz4HOvM6/z4POvM6tzr3OsSDPh8+Bz47OvM6xz4TOsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF91bmtub3duIiBtc2dpZD0iMjcwOTIwMjEwNDI1NjI2NTEwNyI+Is6GzrPOvc+Jz4PPhM6xIM+Hz4HPjs68zrHPhM6xIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+Is6kz4HOv8+Azr/PgM6/zq/Ot8+Dzrcgz4fPgc+JzrzOrM+Ez4nOvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+Is6VzrzPhs6szr3Ouc+Dzrcgz4DOu86xzrrOuc60zq/Ov8+FIM6Tz4HOrs6zzr/Pgc+Jzr0gz4HPhc64zrzOr8+DzrXPic69Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiLOlc69zrXPgc6zzr/PgM6/zq/Ot8+Dzrcgz4DPgc6/z4POsc+BzrzOv8+DzrzOrc69zr/PhSDOvM61z4TOsc+Dz4fOt868zrHPhM65z4POvM6/z40iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9hcHBseSIgbXNnaWQ9IjkyMTI2MDIwMTI2NDEwMzQyODMiPiLOlc+GzrHPgc68zr/Os86uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+Is6Vz4DOuc6yzrXOss6xzq/Pic+Dzrcgz4HPhc64zrzOr8+DzrXPic69Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X21lc3NhZ2UiIG1zZ2lkPSI5MTE2MDAxMDY5Mzk3OTk2NjkxIj4izp/Pgc65z4POvM6tzr3Otc+CIM+Bz4XOuM68zq/Pg861zrnPgiDPh8+Bz4nOvM6sz4TPic69IM68z4DOv8+BzrXOryDOvc6xIM68zrfOvSDOtc+AzrnPhM+Bzq3PgM6/z4XOvSDPhM63IM+Hz4HOrs+DzrcgzrHPhc+Ezq7PgiDPhM63z4Igz4PPhc+DzrrOtc+Fzq7Pgi4gzprOrM69z4TOtSDOus67zrnOuiDPg8+EzrfOvSDOtc+AzrnOu86/zrPOriBPSyDOs865zrEgzr3OsSDOtc+AzrnOss61zrLOsc65z47Pg861z4TOtSDOsc+Fz4TOrc+CIM+EzrnPgiDPgc+FzrjOvM6vz4POtc65z4Igz4fPgc+JzrzOrM+Ez4nOvSwgzrTOuc6xz4bOv8+BzrXPhM65zrrOrCDOuM6xIM6zzq/Ovc61zrkgzrXPgM6xzr3Osc+Gzr/Pgc6sIM6xz4XPhM+Ozr0gz4TPic69IM+Bz4XOuM68zq/Pg861z4nOvSDOvM61z4TOrCDOsc+Az4wgMTAgzrTOtc+Fz4TOtc+Bz4zOu861z4DPhM6xLiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1lbi1yQVUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWVuLXJBVS9zdHJpbmdzLnhtbAppbmRleCAzMGEzMzNhLi5mNmZjOTk3IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWVuLXJBVS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWVuLXJBVS9zdHJpbmdzLnhtbApAQCAtMzY0LDcgKzM2NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+IkJhdHRlcnkgc2F2ZXIgaXMgb24iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iODIwMzE4Nzg4MTI2NjcyNjkyIj4iUmVkdWNlcyBwZXJmb3JtYW5jZSBhbmQgYmFja2dyb3VuZCBkYXRhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiJUdXJuIG9mZiBiYXR0ZXJ5IHNhdmVyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IkNvbnRlbnRzIGhpZGRlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fZGlhbG9nX3RleHQiIG1zZ2lkPSIzMDcxNDMxMDI1NDQ4MjE4OTI4Ij4iPHhsaWZmOmcgaWQ9IkFQUF9TRUVLSU5HX1BFUk1JU1NJT04iPiVzPC94bGlmZjpnPiB3aWxsIHN0YXJ0IGNhcHR1cmluZyBldmVyeXRoaW5nIHRoYXRcJ3MgZGlzcGxheWVkIG9uIHlvdXIgc2NyZWVuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fcmVtZW1iZXJfdGV4dCIgbXNnaWQ9IjMxMDM1MTA4ODIxNzI3NDY3NTIiPiJEb25cJ3Qgc2hvdyBhZ2FpbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNsZWFyX2FsbF9ub3RpZmljYXRpb25zX3RleHQiIG1zZ2lkPSI4MTQxOTI4ODk3NzE0NjI4MjgiPiJDbGVhciBhbGwiPC9zdHJpbmc+CkBAIC00NDksNCArNDQ4LDI4IEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+IlR1cm4gb24gQmx1ZXRvb3RoPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiJUbyBjb25uZWN0IHlvdXIga2V5Ym9hcmQgd2l0aCB5b3VyIHRhYmxldCwgeW91IGZpcnN0IGhhdmUgdG8gdHVybiBvbiBCbHVldG9vdGguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9jb25maXJtYXRpb25fb2siIG1zZ2lkPSI2MjU4MDc0MjUwOTQ4MzA5NzE1Ij4iVHVybiBvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX3RvcGljIiBtc2dpZD0iMzY0MTQwMzQ4OTMxODY1OTY2NiI+IkFwcGx5IHRvIDx4bGlmZjpnIGlkPSJUT1BJQ19OQU1FIj4lMSRzPC94bGlmZjpnPiBub3RpZmljYXRpb25zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4iQXBwbHkgdG8gYWxsIG5vdGlmaWNhdGlvbnMgZnJvbSB0aGlzIGFwcCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfaW1wb3J0YW5jZSIgbXNnaWQ9IjUxOTg1Nzg5ODg5NzgyMzQxNjEiPiJCbG9ja2VkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4iTG93IGltcG9ydGFuY2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4iTm9ybWFsIGltcG9ydGFuY2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoaWdoX2ltcG9ydGFuY2UiIG1zZ2lkPSIxNTI3MDY2MTk1NjE0MDUwMjYzIj4iSGlnaCBpbXBvcnRhbmNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4iVXJnZW50IGltcG9ydGFuY2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iMjM5NzE5MjY0MjY1Nzg3Mjg3MiI+Ik5ldmVyIHNob3cgdGhlc2Ugbm90aWZpY2F0aW9ucyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjQzODM1NjMyNjczNzA4NTk3MjUiPiJTaWxlbnRseSBzaG93IGF0IHRoZSBib3R0b20gb2YgdGhlIG5vdGlmaWNhdGlvbiBsaXN0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9IjQ5MjY1Mjk2MTU5MjA2MTA4MTciPiJTaWxlbnRseSBzaG93IHRoZXNlIG5vdGlmaWNhdGlvbnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+IlNob3cgYXQgdGhlIHRvcCBvZiB0aGUgbm90aWZpY2F0aW9ucyBsaXN0IGFuZCBtYWtlIHNvdW5kIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iNTIzNjk4NzE3MTkwNDc1NjEzNCI+IlBlZWsgb250byB0aGUgc2NyZWVuIGFuZCBtYWtlIHNvdW5kIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX21vcmVfc2V0dGluZ3MiIG1zZ2lkPSI4MTYzMDYyODMzOTY1NTM1NzEiPiJNb3JlIHNldHRpbmdzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4iRmluaXNoZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiJOb3JtYWwgY29sb3VycyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9uaWdodCIgbXNnaWQ9IjU5NDM4MTc2MjIxMDUzMDcwNzIiPiJOaWdodCBjb2xvdXJzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X2N1c3RvbSIgbXNnaWQ9IjM2NTU1NzY0OTIzMjIyOTg3MTMiPiJDdXN0b21pc2VkIGNvbG91cnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiJVbmtub3duIGNvbG91cnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4iQ29sb3VyIG1vZGlmaWNhdGlvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+IlNob3cgUXVpY2sgU2V0dGluZ3MgdGlsZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4iRW5hYmxlIGN1c3RvbWlzZWQgdHJhbnNmb3JtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4iQXBwbHkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfdGl0bGUiIG1zZ2lkPSI0NzQ2NjY2NTQ1NDgwNTM0NjYzIj4iQ29uZmlybSBTZXR0aW5ncyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+IlNvbWUgY29sb3VyIHNldHRpbmdzIGNhbiBtYWtlIHRoaXMgZGV2aWNlIHVudXNhYmxlLiBDbGljayBPSyB0byBjb25maXJtIHRoZXNlIGNvbG91ciBzZXR0aW5ncywgb3RoZXJ3aXNlIHRoZXNlIHNldHRpbmdzIHdpbGwgcmVzZXQgYWZ0ZXIgMTAgc2Vjb25kcy4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZW4tckdCL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1lbi1yR0Ivc3RyaW5ncy54bWwKaW5kZXggMzBhMzMzYS4uZjZmYzk5NyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1lbi1yR0Ivc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1lbi1yR0Ivc3RyaW5ncy54bWwKQEAgLTM2NCw3ICszNjQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzc5MTg3MjY3NTA5NTU4NTkiPiJCYXR0ZXJ5IHNhdmVyIGlzIG9uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+IlJlZHVjZXMgcGVyZm9ybWFuY2UgYW5kIGJhY2tncm91bmQgZGF0YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4iVHVybiBvZmYgYmF0dGVyeSBzYXZlciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJDb250ZW50cyBoaWRkZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+Ijx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4gd2lsbCBzdGFydCBjYXB0dXJpbmcgZXZlcnl0aGluZyB0aGF0XCdzIGRpc3BsYXllZCBvbiB5b3VyIHNjcmVlbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX3JlbWVtYmVyX3RleHQiIG1zZ2lkPSIzMTAzNTEwODgyMTcyNzQ2NzUyIj4iRG9uXCd0IHNob3cgYWdhaW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4iQ2xlYXIgYWxsIjwvc3RyaW5nPgpAQCAtNDQ5LDQgKzQ0OCwyOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiJUdXJuIG9uIEJsdWV0b290aD8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX21lc3NhZ2UiIG1zZ2lkPSI5MTA2NTk1OTkwNzA4OTg1Mzg1Ij4iVG8gY29ubmVjdCB5b3VyIGtleWJvYXJkIHdpdGggeW91ciB0YWJsZXQsIHlvdSBmaXJzdCBoYXZlIHRvIHR1cm4gb24gQmx1ZXRvb3RoLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+IlR1cm4gb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiJBcHBseSB0byA8eGxpZmY6ZyBpZD0iVE9QSUNfTkFNRSI+JTEkczwveGxpZmY6Zz4gbm90aWZpY2F0aW9ucyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+IkFwcGx5IHRvIGFsbCBub3RpZmljYXRpb25zIGZyb20gdGhpcyBhcHAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX2ltcG9ydGFuY2UiIG1zZ2lkPSI1MTk4NTc4OTg4OTc4MjM0MTYxIj4iQmxvY2tlZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbXBvcnRhbmNlIiBtc2dpZD0iNDEwOTkyOTk4NjEwNzE0NzkzMCI+IkxvdyBpbXBvcnRhbmNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9pbXBvcnRhbmNlIiBtc2dpZD0iODE5MjEwNzY4OTk5NTc0MjY1MyI+Ik5vcm1hbCBpbXBvcnRhbmNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+IkhpZ2ggaW1wb3J0YW5jZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1heF9pbXBvcnRhbmNlIiBtc2dpZD0iNTA4OTAwNTg3MjcxOTU2Mzg5NCI+IlVyZ2VudCBpbXBvcnRhbmNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjIzOTcxOTI2NDI2NTc4NzI4NzIiPiJOZXZlciBzaG93IHRoZXNlIG5vdGlmaWNhdGlvbnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4iU2lsZW50bHkgc2hvdyBhdCB0aGUgYm90dG9tIG9mIHRoZSBub3RpZmljYXRpb24gbGlzdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI0OTI2NTI5NjE1OTIwNjEwODE3Ij4iU2lsZW50bHkgc2hvdyB0aGVzZSBub3RpZmljYXRpb25zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMyMjI2ODAxMzY2MTI0MDgyMjMiPiJTaG93IGF0IHRoZSB0b3Agb2YgdGhlIG5vdGlmaWNhdGlvbnMgbGlzdCBhbmQgbWFrZSBzb3VuZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjUyMzY5ODcxNzE5MDQ3NTYxMzQiPiJQZWVrIG9udG8gdGhlIHNjcmVlbiBhbmQgbWFrZSBzb3VuZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9tb3JlX3NldHRpbmdzIiBtc2dpZD0iODE2MzA2MjgzMzk2NTUzNTcxIj4iTW9yZSBzZXR0aW5ncyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9kb25lIiBtc2dpZD0iNTI3OTQyNjA0NzI3MzkzMDE3NSI+IkZpbmlzaGVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25vbmUiIG1zZ2lkPSIyMTIxOTU3OTI2MDQwNTQzMTQ4Ij4iTm9ybWFsIGNvbG91cnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4iTmlnaHQgY29sb3VycyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4iQ3VzdG9taXNlZCBjb2xvdXJzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4iVW5rbm93biBjb2xvdXJzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+IkNvbG91ciBtb2RpZmljYXRpb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfc2hvd19xcyIgbXNnaWQ9IjE3NjMyNDQzNTQzOTkyNzY2NzkiPiJTaG93IFF1aWNrIFNldHRpbmdzIHRpbGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9lbmFibGVfY3VzdG9tIiBtc2dpZD0iNjcyOTAwMTMwODIxNzM0NzUwMSI+IkVuYWJsZSBjdXN0b21pc2VkIHRyYW5zZm9ybSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+IkFwcGx5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+IkNvbmZpcm0gU2V0dGluZ3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfbWVzc2FnZSIgbXNnaWQ9IjkxMTYwMDEwNjkzOTc5OTY2OTEiPiJTb21lIGNvbG91ciBzZXR0aW5ncyBjYW4gbWFrZSB0aGlzIGRldmljZSB1bnVzYWJsZS4gQ2xpY2sgT0sgdG8gY29uZmlybSB0aGVzZSBjb2xvdXIgc2V0dGluZ3MsIG90aGVyd2lzZSB0aGVzZSBzZXR0aW5ncyB3aWxsIHJlc2V0IGFmdGVyIDEwIHNlY29uZHMuIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWVuLXJJTi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZW4tcklOL3N0cmluZ3MueG1sCmluZGV4IDMwYTMzM2EuLmY2ZmM5OTcgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZW4tcklOL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZW4tcklOL3N0cmluZ3MueG1sCkBAIC0zNjQsNyArMzY0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjM3OTE4NzI2NzUwOTU1ODU5Ij4iQmF0dGVyeSBzYXZlciBpcyBvbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiJSZWR1Y2VzIHBlcmZvcm1hbmNlIGFuZCBiYWNrZ3JvdW5kIGRhdGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl9hY3Rpb25fdGV4dCIgbXNnaWQ9IjEwOTE1ODY1ODIzODExMDM4MiI+IlR1cm4gb2ZmIGJhdHRlcnkgc2F2ZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4iQ29udGVudHMgaGlkZGVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiI8eGxpZmY6ZyBpZD0iQVBQX1NFRUtJTkdfUEVSTUlTU0lPTiI+JXM8L3hsaWZmOmc+IHdpbGwgc3RhcnQgY2FwdHVyaW5nIGV2ZXJ5dGhpbmcgdGhhdFwncyBkaXNwbGF5ZWQgb24geW91ciBzY3JlZW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+IkRvblwndCBzaG93IGFnYWluIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+IkNsZWFyIGFsbCI8L3N0cmluZz4KQEAgLTQ0OSw0ICs0NDgsMjggQEAKICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfdGl0bGUiIG1zZ2lkPSI1MDI3MDM3NzA2NTAwNjM1MjY5Ij4iVHVybiBvbiBCbHVldG9vdGg/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9tZXNzYWdlIiBtc2dpZD0iOTEwNjU5NTk5MDcwODk4NTM4NSI+IlRvIGNvbm5lY3QgeW91ciBrZXlib2FyZCB3aXRoIHlvdXIgdGFibGV0LCB5b3UgZmlyc3QgaGF2ZSB0byB0dXJuIG9uIEJsdWV0b290aC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiJUdXJuIG9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4iQXBwbHkgdG8gPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+IG5vdGlmaWNhdGlvbnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b19hcHAiIG1zZ2lkPSIzNjMwMTY3ODM5Mzk4MTU5NjAiPiJBcHBseSB0byBhbGwgbm90aWZpY2F0aW9ucyBmcm9tIHRoaXMgYXBwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IkJsb2NrZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW1wb3J0YW5jZSIgbXNnaWQ9IjQxMDk5Mjk5ODYxMDcxNDc5MzAiPiJMb3cgaW1wb3J0YW5jZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiJOb3JtYWwgaW1wb3J0YW5jZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiJIaWdoIGltcG9ydGFuY2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfaW1wb3J0YW5jZSIgbXNnaWQ9IjUwODkwMDU4NzI3MTk1NjM4OTQiPiJVcmdlbnQgaW1wb3J0YW5jZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4iTmV2ZXIgc2hvdyB0aGVzZSBub3RpZmljYXRpb25zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+IlNpbGVudGx5IHNob3cgYXQgdGhlIGJvdHRvbSBvZiB0aGUgbm90aWZpY2F0aW9uIGxpc3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+IlNpbGVudGx5IHNob3cgdGhlc2Ugbm90aWZpY2F0aW9ucyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4iU2hvdyBhdCB0aGUgdG9wIG9mIHRoZSBub3RpZmljYXRpb25zIGxpc3QgYW5kIG1ha2Ugc291bmQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4iUGVlayBvbnRvIHRoZSBzY3JlZW4gYW5kIG1ha2Ugc291bmQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+Ik1vcmUgc2V0dGluZ3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiJGaW5pc2hlZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9ub25lIiBtc2dpZD0iMjEyMTk1NzkyNjA0MDU0MzE0OCI+Ik5vcm1hbCBjb2xvdXJzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+Ik5pZ2h0IGNvbG91cnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+IkN1c3RvbWlzZWQgY29sb3VycyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF91bmtub3duIiBtc2dpZD0iMjcwOTIwMjEwNDI1NjI2NTEwNyI+IlVua25vd24gY29sb3VycyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3RyYW5zZm9ybSIgbXNnaWQ9IjY5ODU0NjA0MDgwNzkwODYwOTAiPiJDb2xvdXIgbW9kaWZpY2F0aW9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Nob3dfcXMiIG1zZ2lkPSIxNzYzMjQ0MzU0Mzk5Mjc2Njc5Ij4iU2hvdyBRdWljayBTZXR0aW5ncyB0aWxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiJFbmFibGUgY3VzdG9taXNlZCB0cmFuc2Zvcm0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9hcHBseSIgbXNnaWQ9IjkyMTI2MDIwMTI2NDEwMzQyODMiPiJBcHBseSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiJDb25maXJtIFNldHRpbmdzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X21lc3NhZ2UiIG1zZ2lkPSI5MTE2MDAxMDY5Mzk3OTk2NjkxIj4iU29tZSBjb2xvdXIgc2V0dGluZ3MgY2FuIG1ha2UgdGhpcyBkZXZpY2UgdW51c2FibGUuIENsaWNrIE9LIHRvIGNvbmZpcm0gdGhlc2UgY29sb3VyIHNldHRpbmdzLCBvdGhlcndpc2UgdGhlc2Ugc2V0dGluZ3Mgd2lsbCByZXNldCBhZnRlciAxMCBzZWNvbmRzLiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1lcy1yVVMvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWVzLXJVUy9zdHJpbmdzLnhtbAppbmRleCAzZmYyNDkyLi5mZDU5NDE4IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWVzLXJVUy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWVzLXJVUy9zdHJpbmdzLnhtbApAQCAtMzAxLDggKzMwMSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4iYnVzY2FyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sYXVuY2hfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjI5NjkyODc4MzgxMjA1NTA1MDYiPiJObyBzZSBwdWRvIGluaWNpYXIgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2hvd19oaXN0b3J5X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjcwNjIwODgxOTY0NDk3NDcyNDUiPiJNw6FzIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQgKDYzMzcxNTU2MDgwNTUwNjI0MjkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBtw6FzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiJEaXZpc2nDs24gaG9yaXpvbnRhbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X3ZlcnRpY2FsIiBtc2dpZD0iOTA3NTI5MjIzMzY5NjE4MDgxMyI+IkRpdmlzacOzbiB2ZXJ0aWNhbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2N1c3RvbSIgbXNnaWQ9IjQxNzc4Mzc1OTc1MTM3MDE5NDMiPiJEaXZpc2nDs24gcGVyc29uYWxpemFkYSI8L3N0cmluZz4KQEAgLTM2NSw3ICszNjQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzc5MTg3MjY3NTA5NTU4NTkiPiJBaG9ycm8gZGUgYmF0ZXLDrWEgYWN0aXZhZG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iODIwMzE4Nzg4MTI2NjcyNjkyIj4iUmVkdWNlIGVsIHJlbmRpbWllbnRvIHkgZWwgdXNvIGRlIGRhdG9zIGVuIHNlZ3VuZG8gcGxhbm8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiJEZXNhY3RpdmFyIGVsIGFob3JybyBkZSBiYXRlcsOtYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJDb250ZW5pZG9zIG9jdWx0b3MiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+Ijx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4gY29tZW56YXLDoSBsYSBjYXB0dXJhIGRlIHRvZG8gbG8gcXVlIHNlIG11ZXN0cmUgZW4gbGEgcGFudGFsbGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+Ik5vIHZvbHZlciBhIG1vc3RyYXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4iQm9ycmFyIHRvZG8iPC9zdHJpbmc+CkBAIC00NTAsNCArNDQ4LDI4IEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+IsK/QWN0aXZhciBCbHVldG9vdGg/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9tZXNzYWdlIiBtc2dpZD0iOTEwNjU5NTk5MDcwODk4NTM4NSI+IlBhcmEgY29uZWN0YXIgZWwgdGVjbGFkbyBjb24gbGEgdGFibGV0LCBwcmltZXJvIGRlYmVzIGFjdGl2YXIgQmx1ZXRvb3RoLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+IkFjdGl2YXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiJBcGxpY2FyIGEgbGFzIG5vdGlmaWNhY2lvbmVzIGRlIDx4bGlmZjpnIGlkPSJUT1BJQ19OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+IkFwbGljYXIgYSB0b2RhcyBsYXMgbm90aWZpY2FjaW9uZXMgZGUgZXN0YSBhcHAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX2ltcG9ydGFuY2UiIG1zZ2lkPSI1MTk4NTc4OTg4OTc4MjM0MTYxIj4iQmxvcXVlYWRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4iUG9jYSBpbXBvcnRhbmNpYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiJJbXBvcnRhbmNpYSBub3JtYWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoaWdoX2ltcG9ydGFuY2UiIG1zZ2lkPSIxNTI3MDY2MTk1NjE0MDUwMjYzIj4iSW1wb3J0YW5jaWEgYWx0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1heF9pbXBvcnRhbmNlIiBtc2dpZD0iNTA4OTAwNTg3MjcxOTU2Mzg5NCI+IlVyZ2VudGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iMjM5NzE5MjY0MjY1Nzg3Mjg3MiI+Ik5vIG1vc3RyYXIgbnVuY2EgZXN0YXMgbm90aWZpY2FjaW9uZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4iTW9zdHJhciBlbiBsYSBwYXJ0ZSBpbmZlcmlvciBkZSBsYSBsaXN0YSBkZSBub3RpZmljYWNpb25lcyBzaW4gZW1pdGlyIHNvbmlkbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI0OTI2NTI5NjE1OTIwNjEwODE3Ij4iTW9zdHJhciBlc3RhcyBub3RpZmljYWNpb25lcyBkZSBtYW5lcmEgc2lsZW5jaW9zYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4iTW9zdHJhciBlbiBsYSBwYXJ0ZSBzdXBlcmlvciBkZSBsYSBsaXN0YSBkZSBub3RpZmljYWNpb25lcyB5IGVtaXRpciBzb25pZG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4iTW9zdHJhciBlbiBsYSBwYW50YWxsYSB5IGVtaXRpciBzb25pZG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+Ik3DoXMgb3BjaW9uZXMgZGUgY29uZmlndXJhY2nDs24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiJMaXN0byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9ub25lIiBtc2dpZD0iMjEyMTk1NzkyNjA0MDU0MzE0OCI+IkNvbG9yZXMgbm9ybWFsZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4iQ29sb3JlcyBub2N0dXJub3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+IkNvbG9yZXMgcGVyc29uYWxpemFkb3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiJDb2xvcmVzIGRlc2Nvbm9jaWRvcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3RyYW5zZm9ybSIgbXNnaWQ9IjY5ODU0NjA0MDgwNzkwODYwOTAiPiJNb2RpZmljYWNpw7NuIGRlbCBjb2xvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+Ik1vc3RyYXIgZWwgbW9zYWljbyBkZSBDb25maWd1cmFjacOzbiByw6FwaWRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiJIYWJpbGl0YXIgbGEgdHJhbnNmb3JtYWNpw7NuIHBlcnNvbmFsaXphZGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9hcHBseSIgbXNnaWQ9IjkyMTI2MDIwMTI2NDEwMzQyODMiPiJBcGxpY2FyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+IkNvbmZpcm1hciBsYSBjb25maWd1cmFjacOzbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+IkFsZ3VuYXMgb3BjaW9uZXMgZGUgY29uZmlndXJhY2nDs24gZGUgY29sb3IgcHVlZGVuIHByb3ZvY2FyIHF1ZSBlbCBkaXNwb3NpdGl2byBxdWVkZSBpbnV0aWxpemFibGUuIEhheiBjbGljIGVuIEFjZXB0YXIgcGFyYSBjb25maXJtYXIgZXN0b3MgcGFyw6FtZXRyb3MgZGUgY29sb3IuIERlIGxvIGNvbnRyYXJpbywgbGEgY29uZmlndXJhY2nDs24gc2UgcmVzdGFibGVjZXLDoSBlbiBkaWV6IHNlZ3VuZG9zLiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1lcy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZXMvc3RyaW5ncy54bWwKaW5kZXggNjYyNDIyYi4uMjIzZTY4NCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1lcy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWVzL3N0cmluZ3MueG1sCkBAIC0zMDEsOCArMzAxLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2VhcmNoX2Jhcl9sYWJlbCIgbXNnaWQ9IjgwNzQ5OTc0MDAxODc4MzY2NzciPiJidXNjYXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xhdW5jaF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMjk2OTI4NzgzODEyMDU1MDUwNiI+Ik5vIHNlIGhhIHBvZGlkbyBpbmljaWFyIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4iTcOhcyI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciByZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0ICg2MzM3MTU1NjA4MDU1MDYyNDI5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCIgbXNnaWQ9IjYzMzcxNTU2MDgwNTUwNjI0MjkiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gbcOhcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2hvcml6b250YWwiIG1zZ2lkPSI4ODQ4NTE0NDc0NTQzNDI3MzMyIj4iRGl2aXNpw7NuIGhvcml6b250YWwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF92ZXJ0aWNhbCIgbXNnaWQ9IjkwNzUyOTIyMzM2OTYxODA4MTMiPiJEaXZpc2nDs24gdmVydGljYWwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4iRGl2aXNpw7NuIHBlcnNvbmFsaXphZGEiPC9zdHJpbmc+CkBAIC0zNjUsNyArMzY0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjM3OTE4NzI2NzUwOTU1ODU5Ij4iQWhvcnJvIGRlIGJhdGVyw61hIGFjdGl2YWRvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+IlJlZHVjZSBlbCByZW5kaW1pZW50byB5IGVsIGVudsOtbyBkZSBkYXRvcyBlbiBzZWd1bmRvIHBsYW5vIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiJEZXNhY3RpdmFyIGFob3JybyBkZSBiYXRlcsOtYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJDb250ZW5pZG9zIG9jdWx0b3MiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+Ijx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4gZW1wZXphcsOhIGEgY2FwdHVyYXIgdG9kbyBsbyBxdWUgYXBhcmV6Y2EgZW4gbGEgcGFudGFsbGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+Ik5vIHZvbHZlciBhIG1vc3RyYXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4iQm9ycmFyIHRvZG8iPC9zdHJpbmc+CkBAIC00NTAsNCArNDQ4LDI4IEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+IsK/QWN0aXZhciBCbHVldG9vdGg/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9tZXNzYWdlIiBtc2dpZD0iOTEwNjU5NTk5MDcwODk4NTM4NSI+IlBhcmEgcG9kZXIgY29uZWN0YXIgdHUgdGVjbGFkbyBhIHR1IHRhYmxldCwgZGViZXMgYWN0aXZhciBlbCBCbHVldG9vdGguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9jb25maXJtYXRpb25fb2siIG1zZ2lkPSI2MjU4MDc0MjUwOTQ4MzA5NzE1Ij4iQWN0aXZhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX3RvcGljIiBtc2dpZD0iMzY0MTQwMzQ4OTMxODY1OTY2NiI+IkFwbGljYXIgYSBsYXMgbm90aWZpY2FjaW9uZXMgZGUgPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4iQXBsaWNhciBhIHRvZGFzIGxhcyBub3RpZmljYWNpb25lcyBkZSBlc3RhIGFwbGljYWNpw7NuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IkJsb3F1ZWFkbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbXBvcnRhbmNlIiBtc2dpZD0iNDEwOTkyOTk4NjEwNzE0NzkzMCI+IlBvY28gaW1wb3J0YW50ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiJJbXBvcnRhbmNpYSBub3JtYWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoaWdoX2ltcG9ydGFuY2UiIG1zZ2lkPSIxNTI3MDY2MTk1NjE0MDUwMjYzIj4iTXV5IGltcG9ydGFudGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfaW1wb3J0YW5jZSIgbXNnaWQ9IjUwODkwMDU4NzI3MTk1NjM4OTQiPiJVcmdlbnRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjIzOTcxOTI2NDI2NTc4NzI4NzIiPiJObyBtb3N0cmFyIGVzdGFzIG5vdGlmaWNhY2lvbmVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+Ik1vc3RyYXIgZW4gbGEgcGFydGUgaW5mZXJpb3IgZGUgbGEgbGlzdGEgZGUgbm90aWZpY2FjaW9uZXMgZGUgZm9ybWEgc2lsZW5jaW9zYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI0OTI2NTI5NjE1OTIwNjEwODE3Ij4iTW9zdHJhciBlc3RhcyBub3RpZmljYWNpb25lcyBkZSBmb3JtYSBzaWxlbmNpb3NhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMyMjI2ODAxMzY2MTI0MDgyMjMiPiJNb3N0cmFyIGVuIGxhIHBhcnRlIHN1cGVyaW9yIGRlIGxhIGxpc3RhIGRlIG5vdGlmaWNhY2lvbmVzIHkgZW1pdGlyIHNvbmlkbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjUyMzY5ODcxNzE5MDQ3NTYxMzQiPiJNb3N0cmFyIGVuIGxhIHBhbnRhbGxhIHkgZW1pdGlyIHNvbmlkbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9tb3JlX3NldHRpbmdzIiBtc2dpZD0iODE2MzA2MjgzMzk2NTUzNTcxIj4iTcOhcyBhanVzdGVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4iTGlzdG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiJDb2xvcmVzIG5vcm1hbGVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+IkNvbG9yZXMgbm9jdHVybm9zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X2N1c3RvbSIgbXNnaWQ9IjM2NTU1NzY0OTIzMjIyOTg3MTMiPiJDb2xvcmVzIHBlcnNvbmFsaXphZG9zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4iQ29sb3JlcyBkZXNjb25vY2lkb3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4iTW9kaWZpY2FjacOzbiBkZSBjb2xvcmVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Nob3dfcXMiIG1zZ2lkPSIxNzYzMjQ0MzU0Mzk5Mjc2Njc5Ij4iTW9zdHJhciBtb3NhaWNvIGRlIEFqdXN0ZXMgcsOhcGlkb3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9lbmFibGVfY3VzdG9tIiBtc2dpZD0iNjcyOTAwMTMwODIxNzM0NzUwMSI+IkhhYmlsaXRhciB0cmFuc2Zvcm1hY2nDs24gcGVyc29uYWxpemFkYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+IkFwbGljYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfdGl0bGUiIG1zZ2lkPSI0NzQ2NjY2NTQ1NDgwNTM0NjYzIj4iQ29uZmlybWFyIGNvbmZpZ3VyYWNpw7NuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X21lc3NhZ2UiIG1zZ2lkPSI5MTE2MDAxMDY5Mzk3OTk2NjkxIj4iQWxndW5hcyBvcGNpb25lcyBkZSBjb25maWd1cmFjacOzbiBkZSBjb2xvciBwdWVkZW4gaGFjZXIgcXVlIGVsIGRpc3Bvc2l0aXZvIG5vIHNlIHB1ZWRhIHV0aWxpemFyLiBIYXogY2xpYyBlbiBBY2VwdGFyIHBhcmEgY29uZmlybWFyIGVzdGEgY29uZmlndXJhY2nDs24uIFNpIG5vIGxvIGhhY2VzLCBzZSByZXN0YWJsZWNlcsOhIGVzdGEgY29uZmlndXJhY2nDs24gY3VhbmRvIHRyYW5zY3VycmFuIDEwIHNlZ3VuZG9zLiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1ldC1yRUUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWV0LXJFRS9zdHJpbmdzLnhtbAppbmRleCAwZmM4OGM0Li5mNTBlNzhjIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWV0LXJFRS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWV0LXJFRS9zdHJpbmdzLnhtbApAQCAtMzAxLDggKzMwMSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4ib3RzaW5nIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sYXVuY2hfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjI5NjkyODc4MzgxMjA1NTA1MDYiPiJSYWtlbmR1c3QgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IGVpIHNhYW51ZCBrw6Rpdml0YWRhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2hvd19oaXN0b3J5X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjcwNjIwODgxOTY0NDk3NDcyNDUiPiJSb2hrZW0iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCAoNjMzNzE1NTYwODA1NTA2MjQyOSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQiIG1zZ2lkPSI2MzM3MTU1NjA4MDU1MDYyNDI5Ij4iVmVlbCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9ob3Jpem9udGFsIiBtc2dpZD0iODg0ODUxNDQ3NDU0MzQyNzMzMiI+Ikhvcmlzb250YWFsbmUgcG9vbGl0YW1pbmUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF92ZXJ0aWNhbCIgbXNnaWQ9IjkwNzUyOTIyMzM2OTYxODA4MTMiPiJWZXJ0aWthYWxuZSBwb29saXRhbWluZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2N1c3RvbSIgbXNnaWQ9IjQxNzc4Mzc1OTc1MTM3MDE5NDMiPiJLb2hhbmRhdHVkIHBvb2xpdGFtaW5lIjwvc3RyaW5nPgpAQCAtMzY1LDcgKzM2NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+IkFrdXPDpMOkc3RqYSBvbiBzaXNzZSBsw7xsaXRhdHVkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+IlbDpGhlbmRhYiBqw7V1ZGx1c3QgamEgdGF1c3RhYW5kbWVpZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4iQWt1c8Okw6RzdGphIHbDpGxqYWzDvGxpdGFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IlNpc3Ugb24gcGVpZGV0dWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+Ijx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4gaGFra2FiIGrDpMOkZHZ1c3RhbWEga8O1aWtlLCBtaWRhIGVrcmFhbmlsIGt1dmF0YWtzZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX3JlbWVtYmVyX3RleHQiIG1zZ2lkPSIzMTAzNTEwODgyMTcyNzQ2NzUyIj4iw4RyYSBrdXZhIHV1ZXN0aSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNsZWFyX2FsbF9ub3RpZmljYXRpb25zX3RleHQiIG1zZ2lkPSI4MTQxOTI4ODk3NzE0NjI4MjgiPiJUw7xoamVuZGEga8O1aWsiPC9zdHJpbmc+CkBAIC00NTAsNCArNDQ4LDI4IEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+IkthcyBsw7xsaXRhZGEgQmx1ZXRvb3RoIHNpc3NlPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiJLbGF2aWF0dXVyaSDDvGhlbmRhbWlzZWtzIHRhaHZlbGFydnV0aWdhIHBlYXRlIGVzbWFsdCBCbHVldG9vdGhpIHNpc3NlIGzDvGxpdGFtYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiJMw7xsaXRhIHNpc3NlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4iUmFrZW5kYSB0ZWVtYSA8eGxpZmY6ZyBpZD0iVE9QSUNfTkFNRSI+JTEkczwveGxpZmY6Zz4gbcOkcmd1YW5uZXRlIHB1aHVsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4iUmFrZW5kYSBzZWxsZSByYWtlbmR1c2Uga8O1aWdpIG3DpHJndWFubmV0ZSBwdWh1bCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfaW1wb3J0YW5jZSIgbXNnaWQ9IjUxOTg1Nzg5ODg5NzgyMzQxNjEiPiJCbG9rZWVyaXR1ZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbXBvcnRhbmNlIiBtc2dpZD0iNDEwOTkyOTk4NjEwNzE0NzkzMCI+Ik1hZGFsIHTDpGh0c3VzZSB0YXNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9pbXBvcnRhbmNlIiBtc2dpZD0iODE5MjEwNzY4OTk5NTc0MjY1MyI+IlRhdmFsaW5lIHTDpGh0c3VzZSB0YXNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+IkvDtXJnZSB0w6RodHN1c2UgdGFzZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1heF9pbXBvcnRhbmNlIiBtc2dpZD0iNTA4OTAwNTg3MjcxOTU2Mzg5NCI+IktpaXJlbG9vbXVsaW5lIHTDpGh0c3VzZSB0YXNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjIzOTcxOTI2NDI2NTc4NzI4NzIiPiLDhHJhIGt1bmFnaSBuw6RpdGEgbmVpZCBtw6RyZ3VhbmRlaWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4iS3V2YSBtw6RyZ3Vhbm5ldGUgbG9lbmRpIGFsbG9zYXMgdmFpa3NlbHQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+Ikt1dmEgbmVlZCBtw6RyZ3VhbmRlZCB2YWlrc2VsdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4iS3V2YSBtw6RyZ3Vhbm5ldGUgbG9lbmRpIMO8bGFvc2FzIGtvb3MgaGVsaWdhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iNTIzNjk4NzE3MTkwNDc1NjEzNCI+Ikt1dmEgZWtyYWFuaSBzZXJ2YXMga29vcyBoZWxpZ2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+IlJvaGtlbSBzZWFkZWlkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4iVmFsbWlzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25vbmUiIG1zZ2lkPSIyMTIxOTU3OTI2MDQwNTQzMTQ4Ij4iVGF2YWxpc2VkIHbDpHJ2aWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4iw5Zpc2VkIHbDpHJ2aWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+IktvaGFuZGF0dWQgdsOkcnZpZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF91bmtub3duIiBtc2dpZD0iMjcwOTIwMjEwNDI1NjI2NTEwNyI+IlbDpHJ2aWQgb24gdGVhZG1hdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4iVsOkcnZpIG11dXRtaW5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Nob3dfcXMiIG1zZ2lkPSIxNzYzMjQ0MzU0Mzk5Mjc2Njc5Ij4iS3V2YSBwYWFuIEtpaXJzZWFkZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9lbmFibGVfY3VzdG9tIiBtc2dpZD0iNjcyOTAwMTMwODIxNzM0NzUwMSI+Ikx1YmEga29oYW5kYXR1ZCB0ZWlzZW5kYW1pbmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9hcHBseSIgbXNnaWQ9IjkyMTI2MDIwMTI2NDEwMzQyODMiPiJSYWtlbmRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+IlNlYWRldGUga2lubml0YW1pbmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfbWVzc2FnZSIgbXNnaWQ9IjkxMTYwMDEwNjkzOTc5OTY2OTEiPiJNw7VuaSB2w6RydmlzZWFkZSBlaSBzYWEgc2VhZGV0IHbDtWliLW9sbGEga2FzdXRhZGEuIE5lbmRlIHbDpHJ2aXNlYWRldGUga2lubml0YW1pc2VrcyBrbMO1cHNha2UgT0ssIG11aWR1IGzDpGh0ZXN0YXRha3NlIG5lZWQgc2VhZGVkIDEwIHNla3VuZGkgcMOkcmFzdC4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZXUtckVTL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1ldS1yRVMvc3RyaW5ncy54bWwKaW5kZXggM2IwNjEzNy4uYzQ4MWY1MiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1ldS1yRVMvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1ldS1yRVMvc3RyaW5ncy54bWwKQEAgLTMwMSw4ICszMDEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+ImJpbGF0dSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4iRXppbiBpemFuIGRhIGhhc2kgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2hvd19oaXN0b3J5X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjcwNjIwODgxOTY0NDk3NDcyNDUiPiJHZWhpYWdvIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQgKDYzMzcxNTU2MDgwNTUwNjI0MjkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+IkJlc3RlIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2hvcml6b250YWwiIG1zZ2lkPSI4ODQ4NTE0NDc0NTQzNDI3MzMyIj4iQmFuYWtldGEgaG9yaXpvbnRhbGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF92ZXJ0aWNhbCIgbXNnaWQ9IjkwNzUyOTIyMzM2OTYxODA4MTMiPiJCYW5ha2V0YSBiZXJ0aWthbGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4iQmFuYWtldGEgcGVydHNvbmFsaXphdHVhIjwvc3RyaW5nPgpAQCAtMzY1LDcgKzM2NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+IkJhdGVyaWEgYXVycmV6bGVhIGFrdGliYXR1dGEgZGFnbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiJFcnJlbmRpbWVuZHVhIGV0YSBhdHpla28gcGxhbm9rbyBkYXR1YWsgbXVycml6dGVuIGRpdHUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl9hY3Rpb25fdGV4dCIgbXNnaWQ9IjEwOTE1ODY1ODIzODExMDM4MiI+IkRlc2FrdGliYXR1IGJhdGVyaWEgYXVycmV6dGVrbyBhdWtlcmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4iRWR1a2lhayBlemt1dGF0dXRhIGRhdWRlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiI8eGxpZmY6ZyBpZD0iQVBQX1NFRUtJTkdfUEVSTUlTU0lPTiI+JXM8L3hsaWZmOmc+IGFwbGlrYXppb2FrIHBhbnRhaWxhbiBiaXN0YXJhdHplbiBkZW4gZ3V6dGlhIGdyYWJhdHVrbyBkdS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX3JlbWVtYmVyX3RleHQiIG1zZ2lkPSIzMTAzNTEwODgyMTcyNzQ2NzUyIj4iRXogZXJha3V0c2kgYmVycmlybyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNsZWFyX2FsbF9ub3RpZmljYXRpb25zX3RleHQiIG1zZ2lkPSI4MTQxOTI4ODk3NzE0NjI4MjgiPiJHYXJiaXR1IGd1enRpYWsiPC9zdHJpbmc+CkBAIC00NTAsNCArNDQ4LDI4IEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+IkJsdWV0b290aCBlZ2luYmlkZWEgYWt0aWJhdHUgbmFoaSBkdXp1PyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiJUZWtsYXR1YSB0YWJsZXRhcmEga29uZWt0YXR6ZWtvLCBCbHVldG9vdGggZWdpbmJpZGVhIGFrdGliYXR1IGJlaGFyIGR1enUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9jb25maXJtYXRpb25fb2siIG1zZ2lkPSI2MjU4MDc0MjUwOTQ4MzA5NzE1Ij4iQWt0aWJhdHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiJBcGxpa2F0dSBcIjx4bGlmZjpnIGlkPSJUT1BJQ19OQU1FIj4lMSRzPC94bGlmZjpnPlwiIGdhaWFyaSBidXJ1emtvIGpha2luYXJhenBlbmVpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4iQXBsaWthdHUgYXBsaWthemlvIGhvbmV0YWtvIGpha2luYXJhenBlbiBndXp0aWVpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IkJsb2tlYXR1dGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW1wb3J0YW5jZSIgbXNnaWQ9IjQxMDk5Mjk5ODYxMDcxNDc5MzAiPiJHYXJyYW50emkgdHhpa2lhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9pbXBvcnRhbmNlIiBtc2dpZD0iODE5MjEwNzY4OTk5NTc0MjY1MyI+IkdhcnJhbnR6aSBub3JtYWxhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+IkdhcnJhbnR6aSBoYW5kaWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfaW1wb3J0YW5jZSIgbXNnaWQ9IjUwODkwMDU4NzI3MTk1NjM4OTQiPiJQcmVtaWF6a29hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjIzOTcxOTI2NDI2NTc4NzI4NzIiPiJFeiBlcmFrdXRzaSBqYWtpbmFyYXpwZW4gaGF1ZWsgaW5vaXoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4iRXJha3V0c2kgamFraW5hcmF6cGVuIGhhdWVrIHplcnJlbmRhcmVuIGJlaGVhbGRlYW4sIGJhaW5hIHNvaW51cmlrIGVnaW4gZ2FiZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI0OTI2NTI5NjE1OTIwNjEwODE3Ij4iRXJha3V0c2kgamFraW5hcmF6cGVuIGhhdWVrLCBiYWluYSBzb2ludXJpayBlZ2luIGdhYmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+IkVyYWt1dHNpIGpha2luYXJhenBlbiBoYXVlayB6ZXJyZW5kYXJlbiBnb2lhbGRlYW4gZXRhIGVnaW4gc29pbnVhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iNTIzNjk4NzE3MTkwNDc1NjEzNCI+IkFnZXJyYXJhemkgamFraW5hcmF6cGVuIGhhdWVrIHBhbnRhaWxhbiBldGEgZWdpbiBzb2ludWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+IkV6YXJwZW4gZ2VoaWFnbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9kb25lIiBtc2dpZD0iNTI3OTQyNjA0NzI3MzkzMDE3NSI+IkVnaW5kYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9ub25lIiBtc2dpZD0iMjEyMTk1NzkyNjA0MDU0MzE0OCI+IktvbG9yZSBub3JtYWxhayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9uaWdodCIgbXNnaWQ9IjU5NDM4MTc2MjIxMDUzMDcwNzIiPiJHYXVla28ga29sb3JlYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+IktvbG9yZSBwZXJ0c29uYWxpemF0dWFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4iS29sb3JlIGV6ZXphZ3VuYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4iS29sb3JlLWFsZGFrZXRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Nob3dfcXMiIG1zZ2lkPSIxNzYzMjQ0MzU0Mzk5Mjc2Njc5Ij4iRXJha3V0c2kgZXphcnBlbiBiaXprb3JyZW4gbGF1emEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9lbmFibGVfY3VzdG9tIiBtc2dpZD0iNjcyOTAwMTMwODIxNzM0NzUwMSI+IkdhaXR1IGl0eHVyYWxkYWtldGEgcGVydHNvbmFsaXphdHVhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4iQXBsaWthdHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfdGl0bGUiIG1zZ2lkPSI0NzQ2NjY2NTQ1NDgwNTM0NjYzIj4iQmVycmV0c2kgZXphcnBlbmFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X21lc3NhZ2UiIG1zZ2lkPSI5MTE2MDAxMDY5Mzk3OTk2NjkxIj4iQmFsaXRla2UgZ2FpbHVhIGtvbG9yZS1lemFycGVuIGJhdHp1ZWtpbiBlemluIGVyYWJpbGkgaXphdGVhLiBLb2xvcmUtZXphcnBlbmFrIGJlcnJlc3Rla28sIHNha2F0dSBBZG9zLiBCZXN0ZWxhLCBoYW1hciBzZWd1bmRvcmVuIGJ1cnVhbiBiZXJyZXphcnJpa28gZGlyYSBlemFycGVuYWsuIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWZhL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1mYS9zdHJpbmdzLnhtbAppbmRleCBiOGM0MjU2Li4zZGVlN2M5IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWZhL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZmEvc3RyaW5ncy54bWwKQEAgLTMwMSw4ICszMDEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+Itis2LPYqtis2YgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xhdW5jaF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMjk2OTI4NzgzODEyMDU1MDUwNiI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDYtNix2YjYuSDZhti02K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zaG93X2hpc3RvcnlfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNzA2MjA4ODE5NjQ0OTc0NzI0NSI+Itio24zYtNiq2LEiPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCAoNjMzNzE1NTYwODA1NTA2MjQyOSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQiIG1zZ2lkPSI2MzM3MTU1NjA4MDU1MDYyNDI5Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INmF2YjYsdivINiv24zar9ixIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiLYqtmC2LPbjNmFINin2YHZgtuMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfdmVydGljYWwiIG1zZ2lkPSI5MDc1MjkyMjMzNjk2MTgwODEzIj4i2KrZgtiz24zZhSDYudmF2YjYr9uMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfY3VzdG9tIiBtc2dpZD0iNDE3NzgzNzU5NzUxMzcwMTk0MyI+Itiz2YHYp9ix2LTbjCDaqdix2K/ZhiDYqtmC2LPbjNmFIjwvc3RyaW5nPgpAQCAtMzY1LDcgKzM2NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+Itio2YfbjNmG2YfigIzYs9in2LLbjCDYqNin2KrYsduMINix2YjYtNmGINin2LPYqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iODIwMzE4Nzg4MTI2NjcyNjkyIj4i2LnZhdmE2qnYsdivINmIINin2LfZhNin2LnYp9iqINm+2LPigIzYstmF24zZhtmHINix2Kcg2qnYp9mH2LQg2YXbjOKAjNiv2YfYryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4i2KjZh9uM2YbZh+KAjNiz2KfYstuMINio2KfYqtix24wg2LHYpyDYrtin2YXZiNi0INqp2YbbjNivIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+ItmF2K3YqtmI2KfZh9inINm+2YbZh9in2YYg2YfYs9iq2YbYryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fZGlhbG9nX3RleHQiIG1zZ2lkPSIzMDcxNDMxMDI1NDQ4MjE4OTI4Ij4iPHhsaWZmOmcgaWQ9IkFQUF9TRUVLSU5HX1BFUk1JU1NJT04iPiVzPC94bGlmZjpnPiDYtNix2YjYuSDYqNmHINi22KjYtyDZh9ixINqG24zYstuMINmF24zigIzaqdmG2K8g2qnZhyDYr9ixINi12YHYrdmH4oCM2YbZhdin24zYtCDYtNmF2Kcg2YbZhdin24zYtCDYr9in2K/ZhyDZhduM4oCM2LTZiNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fcmVtZW1iZXJfdGV4dCIgbXNnaWQ9IjMxMDM1MTA4ODIxNzI3NDY3NTIiPiLYr9mI2KjYp9ix2Ycg2YbYtNin2YYg2K/Yp9iv2Ycg2YbYtNmI2K8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4i2b7Yp9qpINqp2LHYr9mGINmH2YXZhyDZhdmI2KfYsdivIjwvc3RyaW5nPgpAQCAtNDUwLDQgKzQ0OCwyOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiLYqNmE2YjYqtmI2Ksg2LHZiNi02YYg2LTZiNiv2J8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX21lc3NhZ2UiIG1zZ2lkPSI5MTA2NTk1OTkwNzA4OTg1Mzg1Ij4i2KjYsdin24wg2YXYsdiq2KjYtyDaqdix2K/ZhiDYtdmB2K3Zh+KAjNqp2YTbjNivINio2Kcg2LHYp9uM2KfZhtmHINmE2YjYrduM2Iwg2KfYqNiq2K/YpyDYqNin24zYryDYqNmE2YjYqtmI2Ksg2LHYpyDYsdmI2LTZhiDaqdmG24zYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiLYsdmI2LTZhiDaqdix2K/ZhiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX3RvcGljIiBtc2dpZD0iMzY0MTQwMzQ4OTMxODY1OTY2NiI+Itin2LnZhdin2YQg2KjYsSDYsdmI24wg2KfYudmE2KfZhuKAjNmH2KfbjCA8eGxpZmY6ZyBpZD0iVE9QSUNfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b19hcHAiIG1zZ2lkPSIzNjMwMTY3ODM5Mzk4MTU5NjAiPiLYp9i52YXYp9mEINio2LEg2LHZiNuMINiq2YXYp9mFINin2LnZhNin2YbigIzZh9in24wg2KfbjNmGINio2LHZhtin2YXZhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfaW1wb3J0YW5jZSIgbXNnaWQ9IjUxOTg1Nzg5ODg5NzgyMzQxNjEiPiLZhdiz2K/ZiNivINi02K/ZhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbXBvcnRhbmNlIiBtc2dpZD0iNDEwOTkyOTk4NjEwNzE0NzkzMCI+Itin2YfZhduM2Kog2qnZhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiLYp9mH2YXbjNiqINmF2LnZhdmI2YTbjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiLYp9mH2YXbjNiqINiy24zYp9ivIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4i2KfZh9mF24zYqiDZgdmI2LHbjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4i2YfYsdqv2LIg2KfbjNmGINin2LnZhNin2YbigIzZh9inINmG2LTYp9mGINiv2KfYr9mHINmG2LTZiNmG2K8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4i2KjYr9mI2YYg2LXYr9inINiv2LEg2b7Yp9uM24zZhiDZgdmH2LHYs9iqINin2LnZhNin2YYg2YbYtNin2YYg2K/Yp9iv2Ycg2LTZiNivIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9IjQ5MjY1Mjk2MTU5MjA2MTA4MTciPiLYp9uM2YYg2KfYudmE2KfZhuKAjNmH2Kcg2KjbjOKAjNi12K/YpyDZhti02KfZhiDYr9in2K/ZhyDYtNmI2YbYryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4i2K/YsSDYqNin2YTYp9uMINmB2YfYsdiz2Kog2KfYudmE2KfZhuKAjNmH2Kcg2Ygg2KjZhyDZh9mF2LHYp9mHINi12K/YpyDZhti02KfZhiDYr9in2K/ZhyDYtNmI2K8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4i2K/YsSDYrNmE2YjbjCDYtdmB2K3ZhyDYqNmHINmH2YXYsdin2Ycg2LXYr9inINmG2LTYp9mGINiv2KfYr9mHINi02YjYryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9tb3JlX3NldHRpbmdzIiBtc2dpZD0iODE2MzA2MjgzMzk2NTUzNTcxIj4i2KrZhti424zZhdin2Kog2KjbjNi02KrYsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9kb25lIiBtc2dpZD0iNTI3OTQyNjA0NzI3MzkzMDE3NSI+Itiq2YXYp9mFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25vbmUiIG1zZ2lkPSIyMTIxOTU3OTI2MDQwNTQzMTQ4Ij4i2LHZhtqv4oCM2YfYp9uMINi52KfYr9uMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+Itix2Ybar+KAjNmH2KfbjCDYtNioIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X2N1c3RvbSIgbXNnaWQ9IjM2NTU1NzY0OTIzMjIyOTg3MTMiPiLYsdmG2q/igIzZh9in24wg2LPZgdin2LHYtNuMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4i2LHZhtqv4oCM2YfYp9uMINmG2KfZhdi02K7YtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3RyYW5zZm9ybSIgbXNnaWQ9IjY5ODU0NjA0MDgwNzkwODYwOTAiPiLYp9i12YTYp9itINix2YbaryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+ItmG2YXYp9uM2LQg2qnYp9i024wg2KrZhti424zZhdin2Kog2LPYsduM2LkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9lbmFibGVfY3VzdG9tIiBtc2dpZD0iNjcyOTAwMTMwODIxNzM0NzUwMSI+ItmB2LnYp9mEINqp2LHYr9mGINiq2KjYr9uM2YQg2LPZgdin2LHYtNuMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4i2KfYudmF2KfZhOKAjCDaqdix2K/ZhiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiLYqtij24zbjNivINiq2YbYuNuM2YXYp9iqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X21lc3NhZ2UiIG1zZ2lkPSI5MTE2MDAxMDY5Mzk3OTk2NjkxIj4i2KjYudi224wg2KfYsiDYqtmG2LjbjNmF2KfYqiDYsdmG2q8g2YXbjOKAjNiq2YjYp9mG2YbYryDYp9uM2YYg2K/Ys9iq2q/Yp9mHINix2Kcg2LrbjNix2YLYp9io2YQg2KfYs9iq2YHYp9iv2Ycg2qnZhtmG2K8uINio2LHYp9uMINiq2KPbjNuM2K8g2KfbjNmGINiq2YbYuNuM2YXYp9iqINix2YbaryDYsdmI24wgwqvYqtij24zbjNivwrsg2qnZhNuM2qkg2qnZhtuM2K/YjCDYr9ixINi624zYsSDYp9uM2YYg2LXZiNix2Kog2KfbjNmGINiq2LrbjNuM2LHYp9iqINio2LnYryDYp9iyINux27Ag2KvYp9mG24zZhyDYqNin2LLZhti02KfZhtuMINmF24zigIzYtNmI2YbYry4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZmkvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWZpL3N0cmluZ3MueG1sCmluZGV4IGEzMjIzMmYuLjRhNWMzMDIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZmkvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1maS9zdHJpbmdzLnhtbApAQCAtMzAxLDggKzMwMSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4iaGFrdSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4iU292ZWxsdWtzZW4gPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IGvDpHlubmlzdMOkbWluZW4gZXDDpG9ubmlzdHVpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2hvd19oaXN0b3J5X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjcwNjIwODgxOTY0NDk3NDcyNDUiPiJMaXPDpMOkIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQgKDYzMzcxNTU2MDgwNTUwNjI0MjkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+Iis8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gbGlzw6TDpCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2hvcml6b250YWwiIG1zZ2lkPSI4ODQ4NTE0NDc0NTQzNDI3MzMyIj4iVmFha2FzdXVudGFpbmVuIGpha28iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF92ZXJ0aWNhbCIgbXNnaWQ9IjkwNzUyOTIyMzM2OTYxODA4MTMiPiJQeXN0eXN1dW50YWluZW4gamFrbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2N1c3RvbSIgbXNnaWQ9IjQxNzc4Mzc1OTc1MTM3MDE5NDMiPiJNdW9rYXR0dSBqYWtvIjwvc3RyaW5nPgpAQCAtMzY1LDcgKzM2NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+IlZpcnJhbnPDpMOkc3TDtiBvbiBrw6R5dMO2c3PDpCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiJSYWpvaXR0YWEgc3Vvcml0dXNreWt5w6QgamEgdGF1c3RhdGllZG9uc2lpcnRvYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4iUG9pc3RhIHZpcnJhbnPDpMOkc3TDtiBrw6R5dMO2c3TDpCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJTaXPDpGx0w7YgcGlpbG90ZXR0dSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fZGlhbG9nX3RleHQiIG1zZ2lkPSIzMDcxNDMxMDI1NDQ4MjE4OTI4Ij4iPHhsaWZmOmcgaWQ9IkFQUF9TRUVLSU5HX1BFUk1JU1NJT04iPiVzPC94bGlmZjpnPiBhbGthYSB0YWxsZW50YWEga2Fpa2VuIG7DpHl0w7ZsbMOkc2kgbsOka3l2w6RuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fcmVtZW1iZXJfdGV4dCIgbXNnaWQ9IjMxMDM1MTA4ODIxNzI3NDY3NTIiPiLDhGzDpCBuw6R5dMOkIHV1ZGVsbGVlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNsZWFyX2FsbF9ub3RpZmljYXRpb25zX3RleHQiIG1zZ2lkPSI4MTQxOTI4ODk3NzE0NjI4MjgiPiJQb2lzdGEga2Fpa2tpIjwvc3RyaW5nPgpAQCAtNDUwLDQgKzQ0OCwyOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiJPdGV0YWFua28gQmx1ZXRvb3RoIGvDpHl0dMO2w7ZuPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiJKb3R0YSB2b2l0IHloZGlzdMOkw6QgbsOkcHDDpGltaXN0w7ZuIHRhYmxldHRpaXNpLCBzaW51biBvbiBlbnNpbiBvdGV0dGF2YSBCbHVldG9vdGgga8OkeXR0w7bDtm4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9jb25maXJtYXRpb25fb2siIG1zZ2lkPSI2MjU4MDc0MjUwOTQ4MzA5NzE1Ij4iT3RhIGvDpHl0dMO2w7ZuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4iU292ZWxsYSBhaWhlZW4gPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+IGlsbW9pdHVrc2lpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+IlNvdmVsbGEga2Fpa2tpaW4gdMOkbcOkbiBzb3ZlbGx1a3NlbiBpbG1vaXR1a3NpaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX2ltcG9ydGFuY2UiIG1zZ2lkPSI1MTk4NTc4OTg4OTc4MjM0MTYxIj4iRXN0ZXR5dCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbXBvcnRhbmNlIiBtc2dpZD0iNDEwOTkyOTk4NjEwNzE0NzkzMCI+IkVpIGtvdmluIHTDpHJrZcOkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9pbXBvcnRhbmNlIiBtc2dpZD0iODE5MjEwNzY4OTk5NTc0MjY1MyI+IlTDpHJrZcOkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+Ikh5dmluIHTDpHJrZcOkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4iS2lpcmVlbGxpbmVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjIzOTcxOTI2NDI2NTc4NzI4NzIiPiLDhGzDpCBrb3NrYWFuIG7DpHl0w6QgbsOkaXTDpCBpbG1vaXR1a3NpYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjQzODM1NjMyNjczNzA4NTk3MjUiPiJOw6R5dMOkIGh1b21hYW1hdHRvbWFzdGkgaWxtb2l0dXNsdWV0dGVsb24gYWxhb3Nhc3NhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9IjQ5MjY1Mjk2MTU5MjA2MTA4MTciPiJOw6R5dMOkIG7DpG3DpCBpbG1vaXR1a3NldCBodW9tYWFtYXR0b21hc3RpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMyMjI2ODAxMzY2MTI0MDgyMjMiPiJOw6R5dMOkIGlsbW9pdHVrc2V0IGx1ZXR0ZWxvbiBrw6RyamVzc8OkIGphIHRvaXN0YSBtZXJra2nDpMOkbmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4iTsOkeXTDpCBpbG1vaXR1cyBuw6R5dMO2bGzDpCBqYSB0b2lzdGEgw6TDpG5pbWVya2tpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX21vcmVfc2V0dGluZ3MiIG1zZ2lkPSI4MTYzMDYyODMzOTY1NTM1NzEiPiJMaXPDpGFzZXR1a3NldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9kb25lIiBtc2dpZD0iNTI3OTQyNjA0NzI3MzkzMDE3NSI+IlZhbG1pcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9ub25lIiBtc2dpZD0iMjEyMTk1NzkyNjA0MDU0MzE0OCI+IlRhdmFsbGlzZXQgdsOkcml0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+IlnDtnbDpHJpdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4iTXVva2F0dXQgdsOkcml0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4iVHVudGVtYXR0b21hdCB2w6RyaXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4iTXVva2F0dXQgdsOkcml0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Nob3dfcXMiIG1zZ2lkPSIxNzYzMjQ0MzU0Mzk5Mjc2Njc5Ij4iTsOkeXTDpCBwaWthLWFzZXR1c3J1dXR1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiJPdGEgbXVva2F0dXQgdsOkcml0IGvDpHl0dMO2w7ZuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4iS8OkeXTDpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiJWYWh2aXN0YSBhc2V0dWtzZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfbWVzc2FnZSIgbXNnaWQ9IjkxMTYwMDEwNjkzOTc5OTY2OTEiPiJKb3RraW4gdsOkcmlhc2V0dWtzZXQgdm9pdmF0IGjDpGlyaXTDpCBsYWl0dGVlbiBrw6R5dHTDtsOkLiBWYWh2aXN0YSB1dWRldCB2w6RyaWFzZXR1a3NldCB2YWxpdHNlbWFsbGEgT0suIE11dXNzYSB0YXBhdWtzZXNzYSBhaWVtbWF0IGFzZXR1a3NldCBwYWxhdXRldGFhbiAxMCBzZWt1bm5pbiBrdWx1dHR1YS4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZnItckNBL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1mci1yQ0Evc3RyaW5ncy54bWwKaW5kZXggNWI1NTE4OC4uMmE0ZjRkOSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1mci1yQ0Evc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1mci1yQ0Evc3RyaW5ncy54bWwKQEAgLTMwMSw4ICszMDEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+InJlY2hlcmNoZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xhdW5jaF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMjk2OTI4NzgzODEyMDU1MDUwNiI+IkltcG9zc2libGUgZGUgbGFuY2VyIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4iUGx1cyI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciByZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0ICg2MzM3MTU1NjA4MDU1MDYyNDI5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCIgbXNnaWQ9IjYzMzcxNTU2MDgwNTUwNjI0MjkiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gYXV0cmVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiJTw6lwYXJhdGlvbiBob3Jpem9udGFsZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X3ZlcnRpY2FsIiBtc2dpZD0iOTA3NTI5MjIzMzY5NjE4MDgxMyI+IlPDqXBhcmF0aW9uIHZlcnRpY2FsZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2N1c3RvbSIgbXNnaWQ9IjQxNzc4Mzc1OTc1MTM3MDE5NDMiPiJTw6lwYXJhdGlvbiBwZXJzb25uYWxpc8OpZSI8L3N0cmluZz4KQEAgLTM2NSw3ICszNjQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzc5MTg3MjY3NTA5NTU4NTkiPiJMYSBmb25jdGlvbiDDiWNvbm9taWUgZFwnw6luZXJnaWUgZXN0IGFjdGl2w6llIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+IlLDqWR1aXJlIGxlcyBwZXJmb3JtYW5jZXMgZXQgZGUgZm9uZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4iRMOpc2FjdGl2ZXIgbFwnw6ljb25vbWlzZXVyIGRcJ8OpbmVyZ2llIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IkNvbnRlbnVzIG1hc3F1w6lzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiI8eGxpZmY6ZyBpZD0iQVBQX1NFRUtJTkdfUEVSTUlTU0lPTiI+JXM8L3hsaWZmOmc+IGNvbW1lbmNlciDDoCBlbnJlZ2lzdHJlciB0b3V0IGNlIHF1aSBzXCdhZmZpY2hlIHN1ciB2b3RyZSDDqWNyYW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+Ik5lIHBsdXMgYWZmaWNoZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4iVG91dCBlZmZhY2VyIjwvc3RyaW5nPgpAQCAtNDUwLDQgKzQ0OCwyOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiJBY3RpdmVyIEJsdWV0b290aD8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX21lc3NhZ2UiIG1zZ2lkPSI5MTA2NTk1OTkwNzA4OTg1Mzg1Ij4iUG91ciBjb25uZWN0ZXIgdm90cmUgY2xhdmllciDDoCB2b3RyZSB0YWJsZXR0ZSwgdm91cyBkZXZleiBkXCdhYm9yZCBhY3RpdmVyIGxhIGNvbm5lY3Rpdml0w6kgQmx1ZXRvb3RoLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+IkFjdGl2ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiJBcHBsaXF1ZXIgw6AgPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+IG5vdGlmaWNhdGlvbnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b19hcHAiIG1zZ2lkPSIzNjMwMTY3ODM5Mzk4MTU5NjAiPiJBcHBsaXF1ZXIgw6AgdG91dGVzIGxlcyBub3RpZmljYXRpb25zIGRlIGNldHRlIGFwcGxpY2F0aW9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IkJsb3F1w6llIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4iSW1wb3J0YW5jZSBmYWlibGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4iSW1wb3J0YW5jZSBub3JtYWxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+IkltcG9ydGFuY2Ugw6lsZXbDqWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfaW1wb3J0YW5jZSIgbXNnaWQ9IjUwODkwMDU4NzI3MTk1NjM4OTQiPiJJbXBvcnRhbmNlIHVyZ2VudGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iMjM5NzE5MjY0MjY1Nzg3Mjg3MiI+Ik5lIGphbWFpcyBhZmZpY2hlciBjZXMgbm90aWZpY2F0aW9ucyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjQzODM1NjMyNjczNzA4NTk3MjUiPiJBZmZpY2hlciBlbiBtb2RlIHNpbGVuY2lldXggYXUgYmFzIGRlIGxhIGxpc3RlIGRlIG5vdGlmaWNhdGlvbnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+IkFmZmljaGVyIGNlcyBub3RpZmljYXRpb25zIGVuIG1vZGUgc2lsZW5jaWV1eCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4iQWZmaWNoZXIgZW4gaGF1dCBkZSBsYSBsaXN0ZSBkZXMgbm90aWZpY2F0aW9ucyBldCDDqW1ldHRyZSB1biBzb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4iQWZmaWNoZXIgc3VyIGxcJ8OpY3JhbiBldCDDqW1ldHRyZSB1biBzb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+IlBsdXMgZGUgcGFyYW3DqHRyZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiJUZXJtaW7DqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9ub25lIiBtc2dpZD0iMjEyMTk1NzkyNjA0MDU0MzE0OCI+IkNvdWxldXJzIG5vcm1hbGVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+IkNvdWxldXJzIG5vY3R1cm5lcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4iQ291bGV1cnMgcGVyc29ubmFsaXPDqWVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4iQ291bGV1cnMgaW5jb25udWVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+Ik1vZGlmaWVyIGxhIGNvdWxldXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfc2hvd19xcyIgbXNnaWQ9IjE3NjMyNDQzNTQzOTkyNzY2NzkiPiJBZmZpY2hlciBsYSB0dWlsZSBkZSBjb25maWd1cmF0aW9uIHJhcGlkZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4iQWN0aXZlciBsYSB0cmFuc2Zvcm1hdGlvbiBwZXJzb25uYWxpc8OpZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+IkFwcGxpcXVlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiJDb25maXJtZXIgbGVzIHBhcmFtw6h0cmVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X21lc3NhZ2UiIG1zZ2lkPSI5MTE2MDAxMDY5Mzk3OTk2NjkxIj4iQ2VydGFpbnMgcGFyYW3DqHRyZXMgZGUgY291bGV1cnMgcGV1dmVudCByZW5kcmUgY2V0IGFwcGFyZWlsIGludXRpbGlzYWJsZS4gQ2xpcXVleiBzdXIgwqsgT0sgwrsgcG91ciB2YWxpZGVyIGNlcyBwYXJhbcOodHJlcywgc2lub24gaWxzIHNlcm9udCByw6lpbml0aWFsaXPDqXMgYXByw6hzIDEwIHNlY29uZGVzLiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1mci9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZnIvc3RyaW5ncy54bWwKaW5kZXggZGQyZDVmNC4uOTI4YThiMyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1mci9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWZyL3N0cmluZ3MueG1sCkBAIC0zMDEsOCArMzAxLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2VhcmNoX2Jhcl9sYWJlbCIgbXNnaWQ9IjgwNzQ5OTc0MDAxODc4MzY2NzciPiJyZWNoZXJjaGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sYXVuY2hfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjI5NjkyODc4MzgxMjA1NTA1MDYiPiJJbXBvc3NpYmxlIGRlIGxhbmNlciA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zaG93X2hpc3RvcnlfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNzA2MjA4ODE5NjQ0OTc0NzI0NSI+IlBsdXMiPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCAoNjMzNzE1NTYwODA1NTA2MjQyOSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQiIG1zZ2lkPSI2MzM3MTU1NjA4MDU1MDYyNDI5Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+wqBhdXRyZXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9ob3Jpem9udGFsIiBtc2dpZD0iODg0ODUxNDQ3NDU0MzQyNzMzMiI+IlPDqXBhcmF0aW9uIGhvcml6b250YWxlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfdmVydGljYWwiIG1zZ2lkPSI5MDc1MjkyMjMzNjk2MTgwODEzIj4iU8OpcGFyYXRpb24gdmVydGljYWxlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfY3VzdG9tIiBtc2dpZD0iNDE3NzgzNzU5NzUxMzcwMTk0MyI+IlPDqXBhcmF0aW9uIHBlcnNvbm5hbGlzw6llIjwvc3RyaW5nPgpAQCAtMzY1LDcgKzM2NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+IkxcJ8OpY29ub21pc2V1ciBkZSBiYXR0ZXJpZSBlc3QgYWN0aXbDqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiJMaW1pdGUgbGVzIHBlcmZvcm1hbmNlcyBldCBsZXMgZG9ubsOpZXMgZW4gYXJyacOocmUtcGxhbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl9hY3Rpb25fdGV4dCIgbXNnaWQ9IjEwOTE1ODY1ODIzODExMDM4MiI+IkTDqXNhY3RpdmVyIGxcJ8OpY29ub21pc2V1ciBkZSBiYXR0ZXJpZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJDb250ZW51cyBtYXNxdcOpcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fZGlhbG9nX3RleHQiIG1zZ2lkPSIzMDcxNDMxMDI1NDQ4MjE4OTI4Ij4iPHhsaWZmOmcgaWQ9IkFQUF9TRUVLSU5HX1BFUk1JU1NJT04iPiVzPC94bGlmZjpnPiB2YSBjb21tZW5jZXIgw6AgY2FwdHVyZXIgdG91cyBsZXMgY29udGVudXMgYWZmaWNow6lzIMOgIGxcJ8OpY3Jhbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX3JlbWVtYmVyX3RleHQiIG1zZ2lkPSIzMTAzNTEwODgyMTcyNzQ2NzUyIj4iTmUgcGx1cyBhZmZpY2hlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNsZWFyX2FsbF9ub3RpZmljYXRpb25zX3RleHQiIG1zZ2lkPSI4MTQxOTI4ODk3NzE0NjI4MjgiPiJUb3V0IGVmZmFjZXIiPC9zdHJpbmc+CkBAIC00NTAsNCArNDQ4LDI4IEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+IkFjdGl2ZXIgbGUgQmx1ZXRvb3RowqA/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9tZXNzYWdlIiBtc2dpZD0iOTEwNjU5NTk5MDcwODk4NTM4NSI+IlBvdXIgY29ubmVjdGVyIHVuIGNsYXZpZXIgw6Agdm90cmUgdGFibGV0dGUsIHZvdXMgZGV2ZXogYXZvaXIgYWN0aXbDqSBsZSBCbHVldG9vdGguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9jb25maXJtYXRpb25fb2siIG1zZ2lkPSI2MjU4MDc0MjUwOTQ4MzA5NzE1Ij4iQWN0aXZlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX3RvcGljIiBtc2dpZD0iMzY0MTQwMzQ4OTMxODY1OTY2NiI+IkFwcGxpcXVlciBhdXggbm90aWZpY2F0aW9ucyByZWxhdGl2ZXMgYXUgc3VqZXQgXCI8eGxpZmY6ZyBpZD0iVE9QSUNfTkFNRSI+JTEkczwveGxpZmY6Zz5cIiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+IkFwcGxpcXVlciDDoCB0b3V0ZXMgbGVzIG5vdGlmaWNhdGlvbnMgZGUgY2V0dGUgYXBwbGljYXRpb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX2ltcG9ydGFuY2UiIG1zZ2lkPSI1MTk4NTc4OTg4OTc4MjM0MTYxIj4iQmxvcXXDqWVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4iSW1wb3J0YW5jZSBmYWlibGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4iSW1wb3J0YW5jZSBub3JtYWxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+IkltcG9ydGFuY2Ugw6lsZXbDqWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfaW1wb3J0YW5jZSIgbXNnaWQ9IjUwODkwMDU4NzI3MTk1NjM4OTQiPiJVcmdlbnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iMjM5NzE5MjY0MjY1Nzg3Mjg3MiI+Ik5lIGphbWFpcyBhZmZpY2hlciBjZXMgbm90aWZpY2F0aW9ucyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjQzODM1NjMyNjczNzA4NTk3MjUiPiJBZmZpY2hlciBhdSBiYXMgZGUgbGEgbGlzdGUgZGVzIG5vdGlmaWNhdGlvbnMgZW4gbW9kZSBzaWxlbmNpZXV4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9IjQ5MjY1Mjk2MTU5MjA2MTA4MTciPiJBZmZpY2hlciBjZXMgbm90aWZpY2F0aW9ucyBlbiBtb2RlIHNpbGVuY2lldXgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+IkFmZmljaGVyIGVuIGhhdXQgZGUgbGEgbGlzdGUgZGVzIG5vdGlmaWNhdGlvbnMgZXQgw6ltZXR0cmUgdW4gc29uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iNTIzNjk4NzE3MTkwNDc1NjEzNCI+IkFmZmljaGVyIHN1ciBsXCfDqWNyYW4gZXQgw6ltZXR0cmUgdW4gc29uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX21vcmVfc2V0dGluZ3MiIG1zZ2lkPSI4MTYzMDYyODMzOTY1NTM1NzEiPiJQbHVzIGRlIHBhcmFtw6h0cmVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4iVGVybWluw6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiJDb3VsZXVycyBub3JtYWxlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9uaWdodCIgbXNnaWQ9IjU5NDM4MTc2MjIxMDUzMDcwNzIiPiJDb3VsZXVycyBub2N0dXJuZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+IkNvdWxldXJzIHBlcnNvbm5hbGlzw6llcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF91bmtub3duIiBtc2dpZD0iMjcwOTIwMjEwNDI1NjI2NTEwNyI+IkNvdWxldXJzIGluY29ubnVlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3RyYW5zZm9ybSIgbXNnaWQ9IjY5ODU0NjA0MDgwNzkwODYwOTAiPiJNb2RpZmljYXRpb24gZGVzIGNvdWxldXJzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Nob3dfcXMiIG1zZ2lkPSIxNzYzMjQ0MzU0Mzk5Mjc2Njc5Ij4iQWZmaWNoZXIgbGEgdHVpbGUgZGUgY29uZmlndXJhdGlvbiByYXBpZGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9lbmFibGVfY3VzdG9tIiBtc2dpZD0iNjcyOTAwMTMwODIxNzM0NzUwMSI+IkFjdGl2ZXIgbGEgdHJhbnNmb3JtYXRpb24gcGVyc29ubmFsaXPDqWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9hcHBseSIgbXNnaWQ9IjkyMTI2MDIwMTI2NDEwMzQyODMiPiJBcHBsaXF1ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfdGl0bGUiIG1zZ2lkPSI0NzQ2NjY2NTQ1NDgwNTM0NjYzIj4iVsOpcmlmaWVyIGxlcyBwYXJhbcOodHJlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+IkNlcnRhaW5zIHBhcmFtw6h0cmVzIGRlIGNvdWxldXJzIHBldXZlbnQgcmVuZHJlIGNldCBhcHBhcmVpbCBpbnV0aWxpc2FibGUuIENsaXF1ZXogc3VyIFwiT0tcIiBwb3VyIHZhbGlkZXIgY2VzIHBhcmFtw6h0cmVzLCBzYW5zIHF1b2kgaWxzIHNlcm9udCByw6lpbml0aWFsaXPDqXMgYXByw6hzIDEwwqBzZWNvbmRlcy4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZ2wtckVTL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1nbC1yRVMvc3RyaW5ncy54bWwKaW5kZXggMjJhYzcyZS4uMmE5NTFmNyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1nbC1yRVMvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1nbC1yRVMvc3RyaW5ncy54bWwKQEAgLTMwMSw4ICszMDEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+ImJ1c2NhciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4iTm9uIGZvaSBwb3NpYmxlIGluaWNpYXIgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2hvd19oaXN0b3J5X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjcwNjIwODgxOTY0NDk3NDcyNDUiPiJNw6FpcyI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciByZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0ICg2MzM3MTU1NjA4MDU1MDYyNDI5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCIgbXNnaWQ9IjYzMzcxNTU2MDgwNTUwNjI0MjkiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gbcOhaXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9ob3Jpem9udGFsIiBtc2dpZD0iODg0ODUxNDQ3NDU0MzQyNzMzMiI+IkRpdmlkaXIgZW4gaG9yaXpvbnRhbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X3ZlcnRpY2FsIiBtc2dpZD0iOTA3NTI5MjIzMzY5NjE4MDgxMyI+IkRpdmlkaXIgZW4gdmVydGljYWwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4iRGl2aWRpciBkZSB4ZWl0byBwZXJzb25hbGl6YWRvIjwvc3RyaW5nPgpAQCAtMzY1LDcgKzM2NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+Ik8gYWZvcnJvIGRlIGJhdGVyw61hIGVzdMOhIGFjdGl2YWRvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+IlJlZHVjZSBvIHJlbmRlbWVudG8gZSBvcyBkYXRvcyBlbiBzZWd1bmRvIHBsYW5vIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiJEZXNhY3RpdmFyIG8gYWZvcnJvIGRlIGJhdGVyw61hIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IkNvbnRpZG8gb2N1bHRvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiI8eGxpZmY6ZyBpZD0iQVBQX1NFRUtJTkdfUEVSTUlTU0lPTiI+JXM8L3hsaWZmOmc+IGNvbWV6YXLDoSBhIGNhcHR1cmFyIHRvZG8gbyBxdWUgYXBhcmV6YSBuYSB0w7phIHBhbnRhbGxhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fcmVtZW1iZXJfdGV4dCIgbXNnaWQ9IjMxMDM1MTA4ODIxNzI3NDY3NTIiPiJOb24gbW9zdHJhciBvdXRyYSB2ZXoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4iRWxpbWluYXIgdG9kYXMiPC9zdHJpbmc+CkBAIC00NTAsNCArNDQ4LDI4IEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+IlF1ZXJlcyBhY3RpdmFyIG8gQmx1ZXRvb3RoPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiJQYXJhIGNvbmVjdGFyIG8gdGV1IHRlY2xhZG8gY28gdGFibGV0LCBwcmltZWlybyB0ZXMgcXVlIGFjdGl2YXIgbyBCbHVldG9vdGguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9jb25maXJtYXRpb25fb2siIG1zZ2lkPSI2MjU4MDc0MjUwOTQ4MzA5NzE1Ij4iQWN0aXZhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX3RvcGljIiBtc2dpZD0iMzY0MTQwMzQ4OTMxODY1OTY2NiI+IkFwbGljYXIgw6FzIG5vdGlmaWNhY2nDs25zIGRlIDx4bGlmZjpnIGlkPSJUT1BJQ19OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+IkFwbGljYXIgYSB0b2RhcyBhcyBub3RpZmljYWNpw7NucyBwcm9jZWRlbnRlcyBkZXN0YSBhcGxpY2FjacOzbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfaW1wb3J0YW5jZSIgbXNnaWQ9IjUxOTg1Nzg5ODg5NzgyMzQxNjEiPiJCbG9xdWVhZGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW1wb3J0YW5jZSIgbXNnaWQ9IjQxMDk5Mjk5ODYxMDcxNDc5MzAiPiJJbXBvcnRhbmNpYSBiYWl4YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiJJbXBvcnRhbmNpYSBub3JtYWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoaWdoX2ltcG9ydGFuY2UiIG1zZ2lkPSIxNTI3MDY2MTk1NjE0MDUwMjYzIj4iSW1wb3J0YW5jaWEgYWx0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1heF9pbXBvcnRhbmNlIiBtc2dpZD0iNTA4OTAwNTg3MjcxOTU2Mzg5NCI+IkltcG9ydGFuY2lhIHVyeGVudGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iMjM5NzE5MjY0MjY1Nzg3Mjg3MiI+Ik5vbiBtb3N0cmFyIG51bmNhIGVzdGFzIG5vdGlmaWNhY2nDs25zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+Ik1vc3RyYXIgZGUgZm9ybWEgc2lsZW5jaW9zYSBuYSBwYXJ0ZSBpbmZlcmlvciBkYSBsaXN0YSBkZSBub3RpZmljYWNpw7NucyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI0OTI2NTI5NjE1OTIwNjEwODE3Ij4iTW9zdHJhciBlc3RhcyBub3RpZmljYWNpw7NucyBkZSBmb3JtYSBzaWxlbmNpb3NhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMyMjI2ODAxMzY2MTI0MDgyMjMiPiJNb3N0cmFyIG5hIHBhcnRlIHN1cGVyaW9yIGRhIGxpc3RhIGRlIG5vdGlmaWNhY2nDs25zIGUgZW1pdGlyIHNvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjUyMzY5ODcxNzE5MDQ3NTYxMzQiPiJNb3N0cmFyIG5hIHBhbnRhbGxhIGUgZW1pdGlyIHNvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9tb3JlX3NldHRpbmdzIiBtc2dpZD0iODE2MzA2MjgzMzk2NTUzNTcxIj4iTcOhaXMgb3BjacOzbnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiJGZWl0byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9ub25lIiBtc2dpZD0iMjEyMTk1NzkyNjA0MDU0MzE0OCI+IkNvcmVzIG5vcm1haXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4iQ29yZXMgbm9jdHVybmFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X2N1c3RvbSIgbXNnaWQ9IjM2NTU1NzY0OTIzMjIyOTg3MTMiPiJDb3JlcyBwZXJzb25hbGl6YWRhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF91bmtub3duIiBtc2dpZD0iMjcwOTIwMjEwNDI1NjI2NTEwNyI+IkNvcmVzIGRlc2Nvw7FlY2lkYXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4iTW9kaWZpY2FjacOzbiBkZSBjb3IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfc2hvd19xcyIgbXNnaWQ9IjE3NjMyNDQzNTQzOTkyNzY2NzkiPiJNb3N0cmFyIG1vc2FpY28gZGUgY29uZmlndXJhY2nDs24gcsOhcGlkYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4iQWN0aXZhciB0cmFuc2Zvcm1hY2nDs24gcGVyc29uYWxpemFkYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+IkFwbGljYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfdGl0bGUiIG1zZ2lkPSI0NzQ2NjY2NTQ1NDgwNTM0NjYzIj4iQ29uZmlybWFyIGNvbmZpZ3VyYWNpw7NuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X21lc3NhZ2UiIG1zZ2lkPSI5MTE2MDAxMDY5Mzk3OTk2NjkxIj4iQWxndW5oYXMgb3BjacOzbnMgZGUgY29uZmlndXJhY2nDs24gZGUgY29yIHBvZGVuIGZhY2VyIHF1ZSBlc3RlIGRpc3Bvc2l0aXZvIHNleGEgaW51dGlsaXphYmxlLiBGYWkgY2xpYyBlbiBBY2VwdGFyIHBhcmEgY29uZmlybWFyIGVzdGEgY29uZmlndXJhY2nDs24gZGUgY29yOyBlbiBjYXNvIGNvbnRyYXJpbywgYSBjb25maWd1cmFjacOzbiByZXN0YWJsZWNlcmFzZSB0cmFzIDEwIHNlZ3VuZG9zLiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1ndS1ySU4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWd1LXJJTi9zdHJpbmdzLnhtbAppbmRleCBkNzI1MjllLi5mMzMxZWY5IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWd1LXJJTi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWd1LXJJTi9zdHJpbmdzLnhtbApAQCAtMzY0LDcgKzM2NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+IuCqrOCrh+Cqn+CqsOCrgCDgqrjgq4fgqrXgqrAg4Kqa4Kq+4Kqy4KuBIOCqm+CrhyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiLgqqrgq43gqrDgqqbgqrDgq43gqrbgqqgg4KqF4Kqo4KuHIOCqquCrg+Cqt+CrjeCqoOCqreCrguCqruCqvyDgqqHgq4fgqp/gqr4g4KqY4Kqf4Kq+4Kqh4KuHIOCqm+CrhyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4i4Kqs4KuF4Kqf4Kqw4KuAIOCquOCrh+CqteCqsCDgqqzgqoLgqqcg4KqV4Kqw4KuLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IuCquOCqvuCqruCql+CrjeCqsOCrgOCqkyDgqpvgq4Hgqqrgqr7gqrXgq4fgqrIg4Kqb4KuHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiI8eGxpZmY6ZyBpZD0iQVBQX1NFRUtJTkdfUEVSTUlTU0lPTiI+JXM8L3hsaWZmOmc+IOCqpOCqruCqvuCqsOCrgCDgqrjgq43gqpXgq43gqrDgq4Dgqqgg4Kqq4KqwIOCqnOCrhyDgqqrgq43gqrDgqqbgqrDgq43gqrbgqr/gqqQg4Kql4Kq+4KqvIOCqm+CrhyDgqqTgq4cg4Kqm4Kqw4KuH4KqVIOCqteCquOCrjeCqpOCrgeCqqOCrhyDgqpXgq4fgqqrgq43gqprgqrAg4KqV4Kqw4Kq14Kq+4Kqo4KuB4KqCIOCqquCrjeCqsOCqvuCqsOCqguCqrSDgqpXgqrDgqrbgq4cuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+IuCqq+CqsOCrgOCqpeCrgCDgqqzgqqTgqr7gqrXgqrbgq4sg4Kqo4Kq54KuA4KqCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+IuCqrOCqp+CrgSDgqrjgqr7gqqsg4KqV4Kqw4KuLIjwvc3RyaW5nPgpAQCAtNDQ5LDQgKzQ0OCwyOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiJCbHVldG9vdGgg4Kqa4Kq+4Kqy4KuBIOCqleCqsOCqteCrgSDgqpvgq4c/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9tZXNzYWdlIiBtc2dpZD0iOTEwNjU5NTk5MDcwODk4NTM4NSI+IuCqpOCqruCqvuCqsOCqviDgqp/gq4fgqqzgq43gqrLgq4fgqp8g4Kq44Kq+4Kql4KuHIOCqleCrgOCqrOCri+CqsOCrjeCqoSDgqpXgqqjgq4fgqpXgq43gqp8g4KqV4Kqw4Kq14Kq+IOCqruCqvuCqn+Crhywg4Kqk4Kqu4Kq+4Kqw4KuHIOCqquCqueCrh+CqsuCqvuCqgiBCbHVldG9vdGgg4Kqa4Kq+4Kqy4KuBIOCqleCqsOCqteCqvuCqqOCrgCDgqpzgqrDgq4LgqrAg4Kqq4Kqh4Kq24KuHLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+IuCqmuCqvuCqsuCrgSDgqpXgqrDgq4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiI8eGxpZmY6ZyBpZD0iVE9QSUNfTkFNRSI+JTEkczwveGxpZmY6Zz4g4Kq44KuC4Kqa4Kqo4Kq+4KqTIOCqquCqsCDgqrLgqr7gqpfgq4Eg4KqV4Kqw4KuLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4i4KqGIOCqjeCqquCrjeCqsuCqv+CqleCrh+CqtuCqqOCqqOCrgCDgqqTgqq7gqr7gqq4g4Kq44KuC4Kqa4Kqo4Kq+4KqTIOCqquCqsCDgqrLgqr7gqpfgq4Eg4KqV4Kqw4KuLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IuCqheCqteCqsOCri+Cqp+Cqv+CqpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbXBvcnRhbmNlIiBtc2dpZD0iNDEwOTkyOTk4NjEwNzE0NzkzMCI+IuCqqOCqv+CqruCrjeCqqCDgqq7gqrngqqTgq43gqrXgqqjgq4AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4i4Kq44Kq+4Kqu4Kq+4Kqo4KuN4KqvIOCqruCqueCqpOCrjeCqteCqqOCrgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiLgqongqprgq43gqpog4Kqu4Kq54Kqk4KuN4Kq14Kqo4KuAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4i4Kqk4Kq+4Kqk4KuN4KqV4Kq+4Kqy4Kq/4KqVIOCqruCqueCqpOCrjeCqteCqqOCrgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4i4KqGIOCquOCrguCqmuCqqOCqvuCqkyDgqpXgq43gqq/gqr7gqrDgq4fgqq8g4Kqs4Kqk4Kq+4Kq14Kq24KuLIOCqqOCqueCrgOCqgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjQzODM1NjMyNjczNzA4NTk3MjUiPiLgqrjgq4Lgqprgqqjgqr7gqqjgq4Ag4Kq44KuC4Kqa4Kq/4Kqo4KuAIOCqqOCrgOCqmuCrhyDgqprgq4Hgqqrgqprgqr7gqqog4Kqs4Kqk4Kq+4Kq14KuLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9IjQ5MjY1Mjk2MTU5MjA2MTA4MTciPiLgqoYg4Kq44KuC4Kqa4Kqo4Kq+4KqTIOCqmuCrgeCqquCqmuCqvuCqqiDgqqzgqqTgqr7gqrXgq4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+IuCquOCrguCqmuCqqOCqvuCqk+CqqOCrgCDgqrjgq4Lgqprgqr/gqqjgq4Ag4Kqf4KuL4KqaIOCqquCqsCDgqqzgqqTgqr7gqrXgq4sg4KqF4Kqo4KuHIOCqheCqteCqvuCqnCDgqpXgqrDgq4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4i4Kq44KuN4KqV4KuN4Kqw4KuA4KqoIOCqquCqsCDgqqTgq43gqrXgqrDgqr/gqqQg4Kqm4KuN4Kqw4Kq34KuN4Kqf4Kq/IOCqleCqsOCriyDgqoXgqqjgq4cg4KqF4Kq14Kq+4KqcIOCqleCqsOCriyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9tb3JlX3NldHRpbmdzIiBtc2dpZD0iODE2MzA2MjgzMzk2NTUzNTcxIj4i4Kq14Kqn4KuBIOCquOCrh+Cqn+Cqv+CqguCql+CrjeCquCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9kb25lIiBtc2dpZD0iNTI3OTQyNjA0NzI3MzkzMDE3NSI+IuCqpeCqiCDgqpfgqq/gq4HgqoIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiLgqrjgqr7gqq7gqr7gqqjgq43gqq8g4Kqw4KqC4KqX4KuLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+IuCqsOCqvuCqpOCrjeCqsOCqvyDgqrDgqoLgqpfgq4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+IuCqleCquOCrjeCqn+CqriDgqrDgqoLgqpfgq4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiLgqoXgqpzgqr7gqqPgq43gqq/gqr4g4Kqw4KqC4KqX4KuLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+IuCqsOCqguCqlyDgqrjgqoLgqrbgq4vgqqfgqqgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfc2hvd19xcyIgbXNnaWQ9IjE3NjMyNDQzNTQzOTkyNzY2NzkiPiLgqp3gqqHgqqrgq4Ag4Kq44KuH4Kqf4Kq/4KqC4KqX4KuN4Kq4IOCqn+CqvuCqh+CqsiDgqqzgqqTgqr7gqrXgq4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9lbmFibGVfY3VzdG9tIiBtc2dpZD0iNjcyOTAwMTMwODIxNzM0NzUwMSI+IuCqleCquOCrjeCqn+CqriDgqrDgq4Lgqqrgqr7gqoLgqqTgqrDgqqPgqqjgq4cg4Kq44KqV4KuN4Kq34KquIOCqleCqsOCriyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+IuCqsuCqvuCql+CrgSDgqpXgqrDgq4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfdGl0bGUiIG1zZ2lkPSI0NzQ2NjY2NTQ1NDgwNTM0NjYzIj4i4Kq44KuH4Kqf4Kq/4KqC4KqX4KuN4Kq44Kqo4KuAIOCqquCrgeCqt+CrjeCqn+CqvyDgqpXgqrDgq4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfbWVzc2FnZSIgbXNnaWQ9IjkxMTYwMDEwNjkzOTc5OTY2OTEiPiLgqpXgq4fgqp/gqrLgq4DgqpUg4Kqw4KqC4KqXIOCquOCrh+Cqn+Cqv+CqguCql+CrjeCquCDgqoYg4KqJ4Kqq4KqV4Kqw4Kqj4Kqo4KuHIOCqrOCqv+CqqOCqieCqquCqr+Cri+Cql+CrgCDgqqzgqqjgqr7gqrXgq4Ag4Kq24KqV4KuHIOCqm+Crhy4g4KqGIOCqsOCqguCqlyDgqrjgq4fgqp/gqr/gqoLgqpfgq43gqrjgqqjgq4Ag4Kqq4KuB4Kq34KuN4Kqf4Kq/IOCqleCqsOCqteCqviDgqq7gqr7gqp/gq4cg4KqR4KqV4KuHIOCqleCrjeCqsuCqv+CqlSDgqpXgqrDgq4ssIOCqheCqqOCrjeCqr+CqpeCqviAxMCDgqrjgq4fgqpXgqoLgqqEg4Kqq4Kqb4KuAIOCqhiDgqrjgq4fgqp/gqr/gqoLgqpfgq43gqrgg4Kqr4Kqw4KuA4Kql4KuAIOCquOCrh+CqnyDgqqXgqrbgq4cuIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWhpL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1oaS9zdHJpbmdzLnhtbAppbmRleCA5YTNhYjJiLi5iMzFjMWUwIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWhpL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtaGkvc3RyaW5ncy54bWwKQEAgLTM2NCw3ICszNjQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzc5MTg3MjY3NTA5NTU4NTkiPiLgpKzgpYjgpJ/gpLDgpYAg4KS44KWH4KS14KSwIOCkmuCkvuCksuClgiDgpLngpYgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iODIwMzE4Nzg4MTI2NjcyNjkyIj4i4KSo4KS/4KS34KWN4oCN4KSq4KS+4KSm4KSoIOCklOCksCDgpKrgpYPgpLfgpY3gpKDgpK3gpYLgpK7gpL8g4KSh4KWH4KSf4KS+IOCkleCliyDgpJXgpK4g4KSV4KSw4KSk4KS+IOCkueCliCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4i4KSs4KWI4KSf4KSw4KWAIOCkrOCkmuCkpOCkleCksOCljeCkpOCkviDgpJXgpYsg4KSs4KSC4KSmIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLgpJvgpL/gpKrgpYAg4KS54KWB4KSIIOCkuOCkvuCkruCkl+CljeCksOClgCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fZGlhbG9nX3RleHQiIG1zZ2lkPSIzMDcxNDMxMDI1NDQ4MjE4OTI4Ij4iPHhsaWZmOmcgaWQ9IkFQUF9TRUVLSU5HX1BFUk1JU1NJT04iPiVzPC94bGlmZjpnPiDgpIbgpKrgpJXgpYcg4KS44KWN4KSV4KWN4KSw4KWA4KSoIOCkquCksCDgpKrgpY3gpLDgpKbgpLDgpY3gpLbgpL/gpKQg4KSq4KWN4KSw4KSk4KWN4KSv4KWH4KSVIOCkuOCkvuCkruCkl+CljeCksOClgCDgpJXgpYsg4KSV4KWI4KSq4KWN4KSa4KSwIOCkleCksOCkqOCkviDgpKrgpY3gpLDgpL7gpLDgpILgpK0g4KSV4KSwIOCkpuClh+Ckl+ClgC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX3JlbWVtYmVyX3RleHQiIG1zZ2lkPSIzMTAzNTEwODgyMTcyNzQ2NzUyIj4i4KSr4KS/4KSwIOCkuOClhyDgpKgg4KSm4KS/4KSW4KS+4KSP4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+IuCkuOCkreClgCDgpLjgpL7gpKsg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgpAQCAtNDQ5LDQgKzQ0OCwyOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiLgpKzgpY3gpLLgpYLgpJ/gpYLgpKUg4KSa4KS+4KSy4KWCIOCkleCksOClh+Ckgj8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX21lc3NhZ2UiIG1zZ2lkPSI5MTA2NTk1OTkwNzA4OTg1Mzg1Ij4i4KSF4KSq4KSo4KWHIOCkleClgOCkrOCli+CksOCljeCkoSDgpJXgpYsg4KSF4KSq4KSo4KWHIOCkn+CliOCkrOCksuClh+CknyDgpLjgpYcg4KSV4KSo4KWH4KSV4KWN4KSfIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPLCDgpIbgpKrgpJXgpYsg4KSq4KS54KSy4KWHIOCkrOCljeCksuClguCkn+ClguCkpSDgpJrgpL7gpLLgpYIg4KSV4KSw4KSo4KS+IOCkueCli+Ckl+Ckvi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiLgpJrgpL7gpLLgpYIg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4iPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+IOCkqOCli+Ckn+Ckv+Ckq+Ckv+CkleClh+CktuCkqCDgpKrgpLAg4KSy4KS+4KSX4KWCIOCkleCksOClh+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+IuCkh+CkuCDgpJDgpKog4KSV4KWHIOCkuOCkreClgCDgpKjgpYvgpJ/gpL/gpKvgpL/gpJXgpYfgpLbgpKgg4KSq4KSwIOCksuCkvuCkl+ClgiDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX2ltcG9ydGFuY2UiIG1zZ2lkPSI1MTk4NTc4OTg4OTc4MjM0MTYxIj4i4KSF4KS14KSw4KWL4KSn4KS/4KSkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4i4KSo4KS/4KSu4KWN4KSoIOCkruCkueCkpOCljeCktSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiLgpLjgpL7gpK7gpL7gpKjgpY3gpK8g4KSu4KS54KSk4KWN4KS1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+IuCkieCkmuCljeCkmiDgpK7gpLngpKTgpY3gpLUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfaW1wb3J0YW5jZSIgbXNnaWQ9IjUwODkwMDU4NzI3MTk1NjM4OTQiPiLgpKTgpKTgpY3gpJXgpL7gpLIg4KSu4KS54KSk4KWN4KS1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjIzOTcxOTI2NDI2NTc4NzI4NzIiPiLgpK/gpYcg4KSo4KWL4KSf4KS/4KSr4KS/4KSV4KWH4KS24KSoIOCkleCkreClgCDgpKjgpL4g4KSm4KS/4KSW4KS+4KSP4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+IuCkqOCli+Ckn+Ckv+Ckq+Ckv+CkleClh+CktuCkqCDgpLjgpYLgpJrgpYAg4KSu4KWH4KSCIOCkuOCkrOCkuOClhyDgpKjgpYDgpJrgpYcg4KSu4KWM4KSoIOCksOClguCkqiDgpLjgpYcg4KSm4KS/4KSW4KS+4KSP4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9IjQ5MjY1Mjk2MTU5MjA2MTA4MTciPiLgpK/gpYcg4KSo4KWL4KSf4KS/4KSr4KS/4KSV4KWH4KS24KSoIOCkruCljOCkqCDgpLDgpYLgpKog4KS44KWHIOCkpuCkv+CkluCkvuCkj+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4i4KSo4KWL4KSf4KS/4KSr4KS/4KSV4KWH4KS24KSoIOCkuOClguCkmuClgCDgpK7gpYfgpIIg4KS44KSs4KS44KWHIOCkiuCkquCksCDgpKbgpL/gpJbgpL7gpI/gpIIg4KSU4KSwIOCkp+CljeCkteCkqOCkvyDgpJrgpLLgpL7gpI/gpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4i4KS44KWN4oCN4KSV4KWN4KSw4KWA4KSoIOCkquCksCDgpI/gpJUg4KSd4KSy4KSVIOCkpuCkv+CkluCkvuCkj+CkgiDgpJTgpLAg4KSn4KWN4oCN4KS14KSo4KS/IOCkmuCksuCkvuCkj+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9tb3JlX3NldHRpbmdzIiBtc2dpZD0iODE2MzA2MjgzMzk2NTUzNTcxIj4i4KSU4KSwIOCkuOClh+Ckn+Ckv+CkguCklyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9kb25lIiBtc2dpZD0iNTI3OTQyNjA0NzI3MzkzMDE3NSI+IuCkueCliyDgpJfgpK/gpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiLgpLjgpL7gpK7gpL7gpKjgpY3gpK8g4KSw4KSC4KSXIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+IuCksOCkvuCkpOCljeCksOCkvyDgpJXgpYcg4KSw4KSC4KSXIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X2N1c3RvbSIgbXNnaWQ9IjM2NTU1NzY0OTIzMjIyOTg3MTMiPiLgpJXgpLjgpY3gpJ/gpK4g4KSw4KSC4KSXIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4i4KSF4KSc4KWN4KSe4KS+4KSkIOCksOCkguCklyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3RyYW5zZm9ybSIgbXNnaWQ9IjY5ODU0NjA0MDgwNzkwODYwOTAiPiLgpLDgpILgpJcg4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Nob3dfcXMiIG1zZ2lkPSIxNzYzMjQ0MzU0Mzk5Mjc2Njc5Ij4i4KSk4KWN4oCN4KS14KSw4KS/4KSkLeCkuOClh+Ckn+Ckv+CkguCklyDgpJ/gpL7gpIfgpLIg4KSm4KS/4KSW4KS+4KSP4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiLgpJXgpLjgpY3gpJ/gpK4g4KSw4KWC4KSq4KS+4KSC4KSk4KSw4KSjIOCkuOCkleCljeCkt+CkriDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9hcHBseSIgbXNnaWQ9IjkyMTI2MDIwMTI2NDEwMzQyODMiPiLgpLLgpL7gpJfgpYIg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+IuCkuOClh+KAjeClh+Ckn+Ckv+CkguCklyDgpJXgpYAg4KSq4KWB4KS34KWN4KSf4KS/IOCkleCksOClh+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+IuCkleClgeCkmyDgpLDgpILgpJcg4KS44KWH4KSf4KS/4KSC4KSXIOCkh+CkuCDgpKHgpL/gpLXgpL7gpIfgpLgg4KSV4KWLIOCkheCkqOClgeCkquCkr+Cli+Ckl+ClgCDgpKzgpKjgpL4g4KS44KSV4KSk4KWAIOCkueCliOCkgi4g4KSH4KSoIOCksOCkguCklyDgpLjgpYfgpJ/gpL/gpILgpJcg4KSV4KWAIOCkquClgeCkt+CljeCkn+CkvyDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpKDgpYDgpJUg4KSV4KWN4KSy4KS/4KSVIOCkleCksOClh+Ckgiwg4KSF4KSo4KWN4KSv4KSl4KS+IDEwIOCkuOClh+CkleCkguCkoSDgpJXgpYcg4KSs4KS+4KSmIOCkr+ClhyDgpLjgpYfgpJ/gpL/gpILgpJcg4KSw4KWA4KS44KWH4KSfIOCkueCliyDgpJzgpL7gpI/gpILgpJfgpYAuIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWhyL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1oci9zdHJpbmdzLnhtbAppbmRleCAxZWQ4OTBjLi4zYmVmNmU5IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWhyL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtaHIvc3RyaW5ncy54bWwKQEAgLTMwMiw4ICszMDIsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+InByZXRyYcW+aSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4iQXBsaWthY2lqYSA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4gbmlqZSBwb2tyZW51dGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zaG93X2hpc3RvcnlfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNzA2MjA4ODE5NjQ0OTc0NzI0NSI+IlZpxaFlIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQgKDYzMzcxNTU2MDgwNTUwNjI0MjkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+IkpvxaEgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiJQb2RpamVsaSB2b2RvcmF2bm8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF92ZXJ0aWNhbCIgbXNnaWQ9IjkwNzUyOTIyMzM2OTYxODA4MTMiPiJQb2RpamVsaSBva29taXRvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfY3VzdG9tIiBtc2dpZD0iNDE3NzgzNzU5NzUxMzcwMTk0MyI+IlBvZGlqZWxpIHByaWxhZ2/EkWVubyI8L3N0cmluZz4KQEAgLTM2Niw3ICszNjUsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzc5MTg3MjY3NTA5NTU4NTkiPiLFoHRlZG5qYSBiYXRlcmlqZSBqZSB1a2xqdcSNZW5hIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+IlNtYW5qdWplIGtvbGnEjWludSByYWRhIGkgcG96YWRpbnNrZSBwb2RhdGtlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiJJc2tsanXEjWkgdcWhdGVkdSBiYXRlcmlqZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJTYWRyxb5haiBqZSBza3JpdmVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiJBcGxpa2FjaWphIDx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4gcG/EjWV0IMSHZSBzbmltYXRpIHN2ZSDFoXRvIHNlIHByaWthenVqZSBuYSB6YXNsb251LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fcmVtZW1iZXJfdGV4dCIgbXNnaWQ9IjMxMDM1MTA4ODIxNzI3NDY3NTIiPiJOZSBwcmlrYXp1aiBwb25vdm8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4iSXpicmnFoWkgc3ZlIjwvc3RyaW5nPgpAQCAtNDUxLDQgKzQ0OSwyOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiLFvWVsaXRlIGxpIHVrbGp1xI1pdGkgQmx1ZXRvb3RoPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiJEYSBiaXN0ZSBwb3ZlemFsaSB0aXBrb3ZuaWN1IHMgdGFibGV0b20sIG1vcmF0ZSB1a2xqdcSNaXRpIEJsdWV0b290aC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiJVa2xqdcSNaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX3RvcGljIiBtc2dpZD0iMzY0MTQwMzQ4OTMxODY1OTY2NiI+IlByaW1pamVuaSBuYSBvYmF2aWplc3RpIHphIHRlbXUgPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4iUHJpbWlqZW5pIG5hIHN2ZSBvYmF2aWplc3RpIG92ZSBhcGxpa2FjaWplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IkJsb2tpcmFubyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbXBvcnRhbmNlIiBtc2dpZD0iNDEwOTkyOTk4NjEwNzE0NzkzMCI+Ik1hbGEgdmHFvm5vc3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4iVW9iacSNYWplbmEgdmHFvm5vc3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoaWdoX2ltcG9ydGFuY2UiIG1zZ2lkPSIxNTI3MDY2MTk1NjE0MDUwMjYzIj4iVmVsaWthIHZhxb5ub3N0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4iSGl0bm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iMjM5NzE5MjY0MjY1Nzg3Mjg3MiI+Ik5pa2FkIG5lIHByaWthenVqIHRlIG9iYXZpamVzdGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4iUHJpa2HFvmkgdGlobyBwcmkgZG51IHBvcGlzYSBvYmF2aWplc3RpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9IjQ5MjY1Mjk2MTU5MjA2MTA4MTciPiJQcmlrYcW+aSB0ZSBvYmF2aWplc3RpIHRpaG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+IlByaWthxb5pIG5hIHZyaHUgcG9waXNhIG9iYXZpamVzdGkgaSBlbWl0aXJhaiB6dnXEjW5pIHNpZ25hbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjUyMzY5ODcxNzE5MDQ3NTYxMzQiPiJQcmlrYcW+aSBuYSB6YXNsb251IGkgZW1pdGlyYWogenZ1xI1uaSBzaWduYWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+IlZpxaFlIHBvc3RhdmtpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4iR290b3ZvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25vbmUiIG1zZ2lkPSIyMTIxOTU3OTI2MDQwNTQzMTQ4Ij4iVW9iacSNYWplbmUgYm9qZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9uaWdodCIgbXNnaWQ9IjU5NDM4MTc2MjIxMDUzMDcwNzIiPiJOb8SHbmUgYm9qZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4iUHJpbGFnb8SRZW5lIGJvamUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiJOZXBvem5hdGUgYm9qZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3RyYW5zZm9ybSIgbXNnaWQ9IjY5ODU0NjA0MDgwNzkwODYwOTAiPiJJem1qZW5hIGJvamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfc2hvd19xcyIgbXNnaWQ9IjE3NjMyNDQzNTQzOTkyNzY2NzkiPiJQcmlrYcW+aSBwbG/EjWljdSBzIGJyemltIHBvc3RhdmthbWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9lbmFibGVfY3VzdG9tIiBtc2dpZD0iNjcyOTAwMTMwODIxNzM0NzUwMSI+Ik9tb2d1xIdpIHByaWxhZ2/EkWVudSBwcmVvYnJhemJ1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4iUHJpbWlqZW5pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+IlBvdHZyZGl0ZSBwb3N0YXZrZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+Ik5la2UgcG9zdGF2a2UgYm9qYSBtb2d1IHXEjWluaXRpIHVyZcSRYWogbmV1cG90cmVibGppdmltLiBLbGlrbml0ZSBVIHJlZHUgZGEgYmlzdGUgcG90dnJkaWxpIHBvc3RhdmtlIGJvamEgamVyIMSHZSBzZSB1IHN1cHJvdG5vbSBwb25pxaF0aXRpIHphIDEwIHNla3VuZGkuIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWh1L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1odS9zdHJpbmdzLnhtbAppbmRleCA4OTc4MTUyLi44ZGM5YTE5IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWh1L3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtaHUvc3RyaW5ncy54bWwKQEAgLTMwMSw4ICszMDEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+ImtlcmVzw6lzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sYXVuY2hfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjI5NjkyODc4MzgxMjA1NTA1MDYiPiJOZW0gbGVoZXQgZWxpbmTDrXRhbmkgYSBrw7Z2ZXRrZXrFkXQ6IDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4iVG92w6FiYmlhayI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciByZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0ICg2MzM3MTU1NjA4MDU1MDYyNDI5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCIgbXNnaWQ9IjYzMzcxNTU2MDgwNTUwNjI0MjkiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gdG92w6FiYmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9ob3Jpem9udGFsIiBtc2dpZD0iODg0ODUxNDQ3NDU0MzQyNzMzMiI+Ik9zenRvdHQgdsOtenN6aW50ZXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF92ZXJ0aWNhbCIgbXNnaWQ9IjkwNzUyOTIyMzM2OTYxODA4MTMiPiJPc3p0b3R0IGbDvGdnxZFsZWdlcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2N1c3RvbSIgbXNnaWQ9IjQxNzc4Mzc1OTc1MTM3MDE5NDMiPiJPc3p0b3R0IGVnecOpbmkiPC9zdHJpbmc+CkBAIC0zNjUsNyArMzY0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjM3OTE4NzI2NzUwOTU1ODU5Ij4iQWtrdW11bMOhdG9ya8OtbcOpbMWRIG3Ds2QgYmVrYXBjc29sdmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iODIwMzE4Nzg4MTI2NjcyNjkyIj4iQ3PDtmtrZW50aSBhIHRlbGplc8OtdG3DqW55dCDDqXMgYSBow6F0dMOpcmFkYXRvayBoYXN6bsOhbGF0w6F0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiJBa2t1bXVsw6F0b3Jrw61tw6lsxZEgbcOzZCBraWthcGNzb2zDoXNhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IlRhcnRhbG9tIGVscmVqdHZlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiJBKHopIDx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4gYWxrYWxtYXrDoXMgcsO2Z3rDrXRlbmkgZm9nIG1pbmRlbnQsIGFtaSBtZWdqZWxlbmlrIGEga8OpcGVybnnFkW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+Ik5lIGplbGVuamVuIG1lZyB0w7ZiYsOpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+IkF6IMO2c3N6ZXMgdMO2cmzDqXNlIjwvc3RyaW5nPgpAQCAtNDUwLDQgKzQ0OCwyOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiJFbmdlZMOpbHllemkgYSBCbHVldG9vdGgta2FwY3NvbGF0b3Q/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9tZXNzYWdlIiBtc2dpZD0iOTEwNjU5NTk5MDcwODk4NTM4NSI+IkhhIGEgYmlsbGVudHnFsXpldGV0IGNzYXRsYWtvenRhdG5pIHN6ZXJldG7DqSB0w6FibGFnw6lww6loZXosIGVsxZFzesO2ciBlbmdlZMOpbHllem5pZSBrZWxsIGEgQmx1ZXRvb3RoLWthcGNzb2xhdG90LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+IkJla2FwY3NvbMOhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX3RvcGljIiBtc2dpZD0iMzY0MTQwMzQ4OTMxODY1OTY2NiI+IkEga8O2dmV0a2V6xZEgw6lydGVzw610w6lzZWsgZXNldMOpbjogPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4iQXogYWxrYWxtYXrDoXMgbWluZGVuIMOpcnRlc8OtdMOpc2UgZXNldMOpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfaW1wb3J0YW5jZSIgbXNnaWQ9IjUxOTg1Nzg5ODg5NzgyMzQxNjEiPiJMZXRpbHR2YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbXBvcnRhbmNlIiBtc2dpZD0iNDEwOTkyOTk4NjEwNzE0NzkzMCI+IktldsOpc2LDqSBmb250b3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4iTm9ybcOhbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiJGb250b3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfaW1wb3J0YW5jZSIgbXNnaWQ9IjUwODkwMDU4NzI3MTk1NjM4OTQiPiJTw7xyZ8WRcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4iU29oYSBuZW0gamVsZW5uZWsgbWVnIGV6ZWsgYXogw6lydGVzw610w6lzZWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4iSGFuZ2plbHrDqXMgbsOpbGvDvGwgamVsZW5uZWsgbWVnIGF6IMOpcnRlc8OtdMOpc2kgbGlzdGEgYWxqw6FuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9IjQ5MjY1Mjk2MTU5MjA2MTA4MTciPiJIYW5nIG7DqWxrw7xsIGplbGVubmVrIG1lZyBlemVrIGF6IMOpcnRlc8OtdMOpc2VrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMyMjI2ODAxMzY2MTI0MDgyMjMiPiJBeiDDqXJ0ZXPDrXTDqXNpIGxpc3RhIHRldGVqw6luIGplbGVubmVrIG1lZyBoYW5namVsesOpc3NlbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjUyMzY5ODcxNzE5MDQ3NTYxMzQiPiJBeiDDqXJ0ZXPDrXTDqXNlayBmZWx1Z3JhbmFrIGEga8OpcGVybnnFkW4gaGFuZ2plbHrDqXNzZWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+IlRvdsOhYmJpIGJlw6FsbMOtdMOhc29rIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4iS8Opc3oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiJIYWd5b23DoW55b3Mgc3rDrW5layI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9uaWdodCIgbXNnaWQ9IjU5NDM4MTc2MjIxMDUzMDcwNzIiPiJFc3RpIHN6w61uZWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+IkVnecOpbmkgc3rDrW5layI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF91bmtub3duIiBtc2dpZD0iMjcwOTIwMjEwNDI1NjI2NTEwNyI+IklzbWVyZXRsZW4gc3rDrW5layI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3RyYW5zZm9ybSIgbXNnaWQ9IjY5ODU0NjA0MDgwNzkwODYwOTAiPiJTesOtbm3Ds2Rvc8OtdMOhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+Ikd5b3JzYmXDoWxsw610w6Fzb2sgbW96YWlrasOhbmFrIG1lZ2plbGVuw610w6lzZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4iRWd5w6luaSDDoXRhbGFrw610w6FzIGVuZ2Vkw6lseWV6w6lzZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+IkFsa2FsbWF6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+IkJlw6FsbMOtdMOhc29rIG1lZ2VyxZFzw610w6lzZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+IkJpem9ueW9zIHN6w61uYmXDoWxsw610w6Fzb2sgaGFzem7DoWxoYXRhdGxhbm7DoSB0ZWhldGlrIGV6dCBheiBlc3prw7Z6dC4gQSBzesOtbmJlw6FsbMOtdMOhcyBtZWdlcsWRc8OtdMOpc8OpaGV6IGthdHRpbnRzb24gYXogT0sgbGVoZXTFkXPDqWdyZSwgbcOhc2vDvGzDtm5iZW4gYSByZW5kc3plciAxMCBtw6Fzb2RwZXJjZW4gYmVsw7xsIHZpc3N6YcOhbGwgYSBrb3LDoWJiaXJhLiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1oeS1yQU0vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWh5LXJBTS9zdHJpbmdzLnhtbAppbmRleCBjMjAxYjA5Li45OWQ2OTgwIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWh5LXJBTS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWh5LXJBTS9zdHJpbmdzLnhtbApAQCAtMzAxLDggKzMwMSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4i1bjWgNW41bbVpdWsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sYXVuY2hfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjI5NjkyODc4MzgxMjA1NTA1MDYiPiLVgNW21aHWgNWh1b7VuNaAINW51acg1aPVuNaA1a7VodaA1a/VpdWsIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPi3VqDoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4i1LHVvtWl1azVq9W2Ijwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQgKDYzMzcxNTU2MDgwNTUwNjI0MjkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+ItaH1b0gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiLVgNW41oDVq9Wm1bjVttWh1a/VodW2INW/1oDVuNWw1bjWgtW0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfdmVydGljYWwiIG1zZ2lkPSI5MDc1MjkyMjMzNjk2MTgwODEzIj4i1YjWgtWy1bLVodWw1aHVtdWh1oEg1b/WgNW41bDVuNaC1bQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4i1YDVodW/1bjWgtWvINW/1oDVuNWw1bjWgtW0Ijwvc3RyaW5nPgpAQCAtMzY1LDcgKzM2NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+ItWE1aHWgNW/1a/VuNaB1asg1b/VttW/1aXVvdW41oLVtNWoINW01avVodaB1b7VodWuINWnIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+ItWG1b7VodWm1aXWgdW21bjWgtW0INWnINWu1aHVttaA1aHVotWl1bzVttW+1aHVrtW41oLVqdW11bjWgtW21agg1ocg1obVuNW21aHVtdWr1bYg1b/VvtW11aHVrNW21aXWgNWoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiLUsdW21bvVodW/1aXVrCDVtNWh1oDVv9Wv1bjWgdWrINW/1bbVv9Wl1b3VuNaC1bTVqCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLUstW41b7VodW21aTVodWv1bjWgtWp1bXVuNaC1bbVqCDVqdWh1oTWgdW+1aHVriDVpyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fZGlhbG9nX3RleHQiIG1zZ2lkPSIzMDcxNDMxMDI1NDQ4MjE4OTI4Ij4iPHhsaWZmOmcgaWQ9IkFQUF9TRUVLSU5HX1BFUk1JU1NJT04iPiVzPC94bGlmZjpnPiDVrtaA1aHVo9Wr1oDVqCDVr9W91a/VvdWrINWw1aHVvtWh1oTVodWj1oDVpdWsINWh1bXVtiDVodW01aXVttW2INWr1bbVuSDWgdW41oLWgdWh1aTWgNW+1bjWgtW0INWnINWx1aXWgCDVp9Wv1oDVodW21avVtjoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX3JlbWVtYmVyX3RleHQiIG1zZ2lkPSIzMTAzNTEwODgyMTcyNzQ2NzUyIj4i1LHVtdWs1ofVvSDWgdW41oLVtdaBINW51b/VodWsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+ItWE1aHWhNaA1aXVrCDVotW41azVuNaA1agiPC9zdHJpbmc+CkBAIC00NTAsNCArNDQ4LDI4IEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+ItWE1avVodaB1bbVpdWe1awgQmx1ZXRvb3RoLdWoOiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiLVjdW/1aXVstW21aHVt9Wh1oDVqCDVsdWl1oAg1brVrNWh1bbVt9Wl1b/Vq9W2INW01avVodaB1bbVpdWs1bjWgiDVsNWh1bTVodaAINW21aHVrSDVodW21bDWgNWh1arVpdW31b8g1acg1bTVq9Wh1oHVttWl1awgQmx1ZXRvb3RoLdWoOiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+ItWE1avVodaB1bbVpdWsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4i1L/Vq9aA1aHVvNWl1awgPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+LdWrINWu1aHVttW41oLWgdW41oLVtNW21aXWgNWrINW21a/VodW/1bTVodW01aIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b19hcHAiIG1zZ2lkPSIzNjMwMTY3ODM5Mzk4MTU5NjAiPiLUv9Wr1oDVodW81aXVrCDVodW11b0g1bDVodW+1aXVrNW+1aHVrtWrINWi1bjVrNW41oAg1a7VodW21bjWgtaB1bjWgtW01bbVpdaA1asg1bbVr9Wh1b/VtNWh1bTVoiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfaW1wb3J0YW5jZSIgbXNnaWQ9IjUxOTg1Nzg5ODg5NzgyMzQxNjEiPiLUsdaA1aPVpdWs1aHWg9Wh1a/VvtWh1a4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW1wb3J0YW5jZSIgbXNnaWQ9IjQxMDk5Mjk5ODYxMDcxNDc5MzAiPiLVkdWh1a7WgCDVr9Wh1oDWh9W41oDVuNaC1anVtdW41oLVtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiLVjdW41b7VuNaA1aHVr9Wh1bYg1a/VodaA1ofVuNaA1bjWgtWp1bXVuNaC1bYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoaWdoX2ltcG9ydGFuY2UiIG1zZ2lkPSIxNTI3MDY2MTk1NjE0MDUwMjYzIj4i1LLVodaA1bHWgCDVr9Wh1oDWh9W41oDVuNaC1anVtdW41oLVtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1heF9pbXBvcnRhbmNlIiBtc2dpZD0iNTA4OTAwNTg3MjcxOTU2Mzg5NCI+ItWA1oDVodW/1aHVuiDVr9Wh1oDWh9W41oDVuNaC1anVtdW41oLVtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4i1LXWgNWi1aXWhCDVudaB1bjWgtaB1aHVpNaA1aXVrCDVodW11b0g1a7VodW21bjWgtaB1bjWgtW01bbVpdaA1agiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4i1ZHVuNaC1oHVodWk1oDVpdWsINWu1aHVttW41oLWgdW41oLVtNW21aXWgNWrINaB1aHVttWv1asg1bbVpdaA1oTWh9W41oLVtCDVodW81aHVttaBINWx1aHVtdW21aHVtdWr1bYg1aHVptWk1aHVttW31aHVttWrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9IjQ5MjY1Mjk2MTU5MjA2MTA4MTciPiLVkdW41oLWgdWh1aTWgNWl1awg1aHVtdW9INWu1aHVttW41oLWgdW41oLVtNW21aXWgNW2INWh1bzVodW21oEg1bHVodW11bbVodW11avVtiDVodWm1aTVodW21bfVodW21asiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+ItWR1bjWgtaB1aHVpNaA1aXVrCDVrtWh1bbVuNaC1oHVuNaC1bTVttWl1oDVqyDWgdWh1bbVr9WrINW+1aXWgNaH1bjWgtW0INaHINWw1bbVudWl1oHVttWl1awg1bHVodW11bbVodW11avVtiDVodWm1aTVodW21bfVodW2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iNTIzNjk4NzE3MTkwNDc1NjEzNCI+ItWR1bjWgtaB1aHVpNaA1aXVrCDVp9Wv1oDVodW21avVtiDWhyDVsNW21bnVpdaB1bbVpdWsINWx1aHVtdW21aHVtdWr1bYg1aHVptWk1aHVttW31aHVtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9tb3JlX3NldHRpbmdzIiBtc2dpZD0iODE2MzA2MjgzMzk2NTUzNTcxIj4i1LHVtdWsINWv1aHWgNWj1aHVvtW41oDVuNaC1bTVttWl1oAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiLVitWh1b/WgNWh1b3VvyDVpyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9ub25lIiBtc2dpZD0iMjEyMTk1NzkyNjA0MDU0MzE0OCI+ItWN1bjVvtW41oDVodWv1aHVtiDVo9W41oLVtdW21aXWgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9uaWdodCIgbXNnaWQ9IjU5NDM4MTc2MjIxMDUzMDcwNzIiPiLUs9Wr1bfVpdaA1aHVtdWr1bYg1aPVuNaC1bXVttWl1oAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+ItWA1aHVv9W41oLVryDVo9W41oLVtdW21aXWgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF91bmtub3duIiBtc2dpZD0iMjcwOTIwMjEwNDI1NjI2NTEwNyI+ItSx1bbVsNWh1bXVvyDVo9W41oLVtdW21aXWgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3RyYW5zZm9ybSIgbXNnaWQ9IjY5ODU0NjA0MDgwNzkwODYwOTAiPiLUs9W41oLVtdW21asg1oPVuNaD1bjVrdW41oLVtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+ItWR1bjWgtW11oEg1b/VodWsINSx1oDVodWjINWv1aHWgNWj1aHVvtW41oDVuNaC1bTVttWl1oDVqyDVvdWh1azVq9Wv1agiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9lbmFibGVfY3VzdG9tIiBtc2dpZD0iNjcyOTAwMTMwODIxNzM0NzUwMSI+ItWE1avVodaB1bbVpdWsINWw1aHVv9W41oLVryDVo9W41oLVttWh1bXVq9W2INWh1bbWgdW41oLVtNWoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4i1L/Vq9aA1aHVvNWl1awiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfdGl0bGUiIG1zZ2lkPSI0NzQ2NjY2NTQ1NDgwNTM0NjYzIj4i1YDVodW91b/VodW/1aXVrCDVr9Wh1oDVo9Wh1b7VuNaA1bjWgtW01bbVpdaA1agiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfbWVzc2FnZSIgbXNnaWQ9IjkxMTYwMDEwNjkzOTc5OTY2OTEiPiLUs9W41oLVttWh1bXVq9W2INW41oDVuNW3INWv1aHWgNWj1aHVvtW41oDVuNaC1bTVttWl1oDVqCDVr9Wh1oDVuNWyINWl1bYg1aHVtdW9INW91aHWgNaE1agg1oXVo9W/1aHVo9W41oDVrtW01aHVtiDVsNWh1bTVodaAINW41bkg1brVq9W/1aHVttWrINWk1aHWgNWx1bbVpdWsOiDVjdWl1bLVtNWl1oQg1LzVodW+INWv1bjVs9Wh1a/VqNWdINWj1bjWgtW21aHVtdWr1bYg1aHVtdW9INWv1aHWgNWj1aHVvtW41oDVuNaC1bTVttWl1oDVqCDVsNWh1b3Vv9Wh1b/VpdWs1bjWgiDVsNWh1bTVodaAOiDVgNWh1a/VodW81aHVryDVpNWl1brWhNW41oLVtCDVodW11b0g1a/VodaA1aPVodW+1bjWgNW41oLVtNW21aXWgNWoINWv1b7VpdaA1aHVr9Wh1bXVvtWl1bYgMTAg1b7VodW11oDVr9W11aHVtiDVsNWl1b/VuDoiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtaW4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWluL3N0cmluZ3MueG1sCmluZGV4IGNlNDQyMjcuLmY2MTI0ZGIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtaW4vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1pbi9zdHJpbmdzLnhtbApAQCAtMzY0LDcgKzM2NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+IlBlbmdoZW1hdCBiYXRlcmFpIGFrdGlmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+Ik1lbmd1cmFuZ2kga2luZXJqYSBkYW4gZGF0YSBsYXRhciBiZWxha2FuZyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4iTm9uYWt0aWZrYW4gcGVuZ2hlbWF0IGJhdGVyYWkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4iS29udGVuIHRlcnNlbWJ1bnlpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiI8eGxpZmY6ZyBpZD0iQVBQX1NFRUtJTkdfUEVSTUlTU0lPTiI+JXM8L3hsaWZmOmc+IGFrYW4gbXVsYWkgbWVuYW5na2FwIGFwYSBzYWphIHlhbmcgZGl0YW1waWxrYW4gcGFkYSBsYXlhciBBbmRhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fcmVtZW1iZXJfdGV4dCIgbXNnaWQ9IjMxMDM1MTA4ODIxNzI3NDY3NTIiPiJKYW5nYW4gdGFtcGlsa2FuIGxhZ2kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4iSGFwdXMgc2VtdWEiPC9zdHJpbmc+CkBAIC00NDksNCArNDQ4LDI4IEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+IkFrdGlma2FuIEJsdWV0b290aD8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX21lc3NhZ2UiIG1zZ2lkPSI5MTA2NTk1OTkwNzA4OTg1Mzg1Ij4iVW50dWsgbWVuZ2h1YnVuZ2thbiBrZXlib2FyZCBkZW5nYW4gdGFibGV0LCB0ZXJsZWJpaCBkYWh1bHUgYWt0aWZrYW4gQmx1ZXRvb3RoLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+IkFrdGlma2FuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4iVGVyYXBrYW4ga2Ugbm90aWZpa2FzaSA8eGxpZmY6ZyBpZD0iVE9QSUNfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b19hcHAiIG1zZ2lkPSIzNjMwMTY3ODM5Mzk4MTU5NjAiPiJUZXJhcGthbiB1bnR1ayBzZW11YSBub3RpZmlrYXNpIGRhcmkgYXBsaWthc2kgaW5pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IkRpYmxva2lyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4iVGluZ2thdCBrZXBlbnRpbmdhbjogcmVuZGFoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9pbXBvcnRhbmNlIiBtc2dpZD0iODE5MjEwNzY4OTk5NTc0MjY1MyI+IlRpbmdrYXQga2VwZW50aW5nYW46IG5vcm1hbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiJUaW5na2F0IGtlcGVudGluZ2FuOiB0aW5nZ2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfaW1wb3J0YW5jZSIgbXNnaWQ9IjUwODkwMDU4NzI3MTk1NjM4OTQiPiJUaW5na2F0IGtlcGVudGluZ2FuOiBkYXJ1cmF0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjIzOTcxOTI2NDI2NTc4NzI4NzIiPiJKYW5nYW4gcGVybmFoIHR1bmp1a2thbiBub3RpZmlrYXNpIGluaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjQzODM1NjMyNjczNzA4NTk3MjUiPiJUdW5qdWtrYW4gZGkgYmF3YWggZGFmdGFyIG5vdGlmaWthc2kgdGFucGEgc3VhcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+IlR1bmp1a2thbiBub3RpZmlrYXNpIGluaSB0YW5wYSBzdWFyYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4iVHVuanVra2FuIGRpIGJhZ2lhbiBhdGFzIGRhZnRhciBub3RpZmlrYXNpIGRhbiBidW55aWthbiBzdWFyYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjUyMzY5ODcxNzE5MDQ3NTYxMzQiPiJNdW5jdWwgZGkgbGF5YXIgZGFuIGJ1bnlpa2FuIHN1YXJhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX21vcmVfc2V0dGluZ3MiIG1zZ2lkPSI4MTYzMDYyODMzOTY1NTM1NzEiPiJTZXRlbGFuIGxhaW5ueWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiJTZWxlc2FpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25vbmUiIG1zZ2lkPSIyMTIxOTU3OTI2MDQwNTQzMTQ4Ij4iV2FybmEgbm9ybWFsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+Ildhcm5hIG1hbGFtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X2N1c3RvbSIgbXNnaWQ9IjM2NTU1NzY0OTIzMjIyOTg3MTMiPiJXYXJuYSBraHVzdXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiJXYXJuYSB0aWRhayBkaWtldGFodWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4iUGVydWJhaGFuIHdhcm5hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Nob3dfcXMiIG1zZ2lkPSIxNzYzMjQ0MzU0Mzk5Mjc2Njc5Ij4iVGFtcGlsa2FuIHViaW4gU2V0ZWxhbiBDZXBhdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4iQWt0aWZrYW4gdHJhbnNmb3JtYXNpIGtodXN1cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+IlRlcmFwa2FuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+IktvbmZpcm1hc2kgc2V0ZWxhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+IkJlYmVyYXBhIHNldGVsYW4gd2FybmEgZGFwYXQgbWVtYnVhdCBwZXJhbmdrYXQgaW5pIHRpZGFrIGRhcGF0IGRpZ3VuYWthbi4gS2xpayBPS0UgdW50dWsgbWVuZ29uZmlybWFzaSBzZXRlbGFuIHdhcm5hIGluaS4gSmlrYSB0aWRhaywgc2V0ZWxhbiBpbmkgYWthbiBkaXNldGVsIHVsYW5nIHNldGVsYWggMTAgZGV0aWsuIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWlzLXJJUy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtaXMtcklTL3N0cmluZ3MueG1sCmluZGV4IGNiMzVlODMuLjdlYTE3NDYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtaXMtcklTL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtaXMtcklTL3N0cmluZ3MueG1sCkBAIC0zMDEsOCArMzAxLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2VhcmNoX2Jhcl9sYWJlbCIgbXNnaWQ9IjgwNzQ5OTc0MDAxODc4MzY2NzciPiJsZWl0YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4iRWtraSB2YXIgaMOmZ3QgYcOwIHLDpnNhIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4iTWVpcmEiPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCAoNjMzNzE1NTYwODA1NTA2MjQyOSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQiIG1zZ2lkPSI2MzM3MTU1NjA4MDU1MDYyNDI5Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IMOtIHZpw7Biw7N0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiJMw6Fyw6l0dCBza2lwdGluZyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X3ZlcnRpY2FsIiBtc2dpZD0iOTA3NTI5MjIzMzY5NjE4MDgxMyI+IkzDs8OwcsOpdHQgc2tpcHRpbmciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4iU8OpcnNuacOwaW4gc2tpcHRpbmciPC9zdHJpbmc+CkBAIC0zNjUsNyArMzY0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjM3OTE4NzI2NzUwOTU1ODU5Ij4iS3ZlaWt0IGVyIMOhIHJhZmhsw7bDsHVzcGFybmHDsGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iODIwMzE4Nzg4MTI2NjcyNjkyIj4iRHJlZ3VyIMO6ciBhZmvDtnN0dW0gb2cgYmFrZ3J1bm5zZ8O2Z251bSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4iU2zDtmtrdmEgw6EgcmFmaGzDtsOwdXNwYXJuYcOwaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJJbm5paGFsZCBmYWxpw7AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+Ijx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4gbXVuIGZhbmdhIGFsbHQgc2VtIGJpcnRpc3Qgw6Egc2tqw6FudW0uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+IkVra2kgc8O9bmEgw75ldHRhIGFmdHVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+IkhyZWluc2EgYWxsdCI8L3N0cmluZz4KQEAgLTQ1MCw0ICs0NDgsMjggQEAKICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfdGl0bGUiIG1zZ2lkPSI1MDI3MDM3NzA2NTAwNjM1MjY5Ij4iS3ZlaWtqYSDDoSBCbHVldG9vdGg/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9tZXNzYWdlIiBtc2dpZD0iOTEwNjU5NTk5MDcwODk4NTM4NSI+IlRpbCBhw7AgZ2V0YSB0ZW5ndCBseWtsYWJvcsOwacOwIHZpw7Agc3BqYWxkdMO2bHZ1bmEgw75hcmZ0dSBmeXJzdCBhw7Aga3ZlaWtqYSDDoSBCbHVldG9vdGguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9jb25maXJtYXRpb25fb2siIG1zZ2lkPSI2MjU4MDc0MjUwOTQ4MzA5NzE1Ij4iS3ZlaWtqYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX3RvcGljIiBtc2dpZD0iMzY0MTQwMzQ4OTMxODY1OTY2NiI+IkzDoXRhIGdpbGRhIHVtIHRpbGt5bm5pbmdhciB2YXLDsGFuZGkgPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4iTMOhdGEgZ2lsZGEgdW0gYWxsYXIgdGlsa3lubmluZ2FyIGZyw6Egw75lc3N1IGZvcnJpdGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX2ltcG9ydGFuY2UiIG1zZ2lkPSI1MTk4NTc4OTg4OTc4MjM0MTYxIj4iw5p0aWxva3XDsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbXBvcnRhbmNlIiBtc2dpZD0iNDEwOTkyOTk4NjEwNzE0NzkzMCI+IkVra2kgc3ZvIG1pa2lsdsOmZ3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4iVmVuanVsZWd0IG1pa2lsdsOmZ2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoaWdoX2ltcG9ydGFuY2UiIG1zZ2lkPSIxNTI3MDY2MTk1NjE0MDUwMjYzIj4iTWrDtmcgbWlraWx2w6ZndCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1heF9pbXBvcnRhbmNlIiBtc2dpZD0iNTA4OTAwNTg3MjcxOTU2Mzg5NCI+IkFmYXIgw6Fyw63DsGFuZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iMjM5NzE5MjY0MjY1Nzg3Mjg3MiI+IkFsZHJlaSBzw71uYSDDvmVzc2FyIHRpbGt5bm5pbmdhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjQzODM1NjMyNjczNzA4NTk3MjUiPiJTw71uYSBuZcOwc3Qgw6EgdGlsa3lubmluZ2FsaXN0YW51bSDDoW4gaGxqw7PDsHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+IlPDvW5hIMO+ZXNzYXIgdGlsa3lubmluZ2FyIMOhbiBobGrDs8OwcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4iU8O9bmEgZWZzdCDDoSB0aWxreW5uaW5nYWxpc3RhbnVtIG9nIHNwaWxhIGhsasOzw7AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4iQmlydGEgw6Egc2tqw6FudW0gb2cgc3BpbGEgaGxqw7PDsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9tb3JlX3NldHRpbmdzIiBtc2dpZD0iODE2MzA2MjgzMzk2NTUzNTcxIj4iRmxlaXJpIHN0aWxsaW5nYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiJMb2tpw7AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiJWZW5qdWxlZ2lyIGxpdGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+Ik7DpnR1cmxpdGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X2N1c3RvbSIgbXNnaWQ9IjM2NTU1NzY0OTIzMjIyOTg3MTMiPiJTw6lyc25pw7BuaXIgbGl0aXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiLDk8O+ZWtrdGlyIGxpdGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+IkxpdGFicmV5dGluZ2FyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Nob3dfcXMiIG1zZ2lkPSIxNzYzMjQ0MzU0Mzk5Mjc2Njc5Ij4iU8O9bmEgZmzDrXNhciDDrSBmbMO9dGlzdGlsbGluZ3VtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiJLdmVpa2phIMOhIHPDqXJzbmnDsGlubmkgdW1icmV5dGluZ3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9hcHBseSIgbXNnaWQ9IjkyMTI2MDIwMTI2NDEwMzQyODMiPiJOb3RhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+IlN0YcOwZmVzdGEgc3RpbGxpbmdhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+IlN1bWFyIGxpdGFzdGlsbGluZ2FyIGt1bm5hIGHDsCBiaXRuYSDDoSBub3RhZ2lsZGkgdMOma2lzaW5zLiBWZWxkdSDigJ7DjSBsYWdp4oCcIHRpbCBhw7Agc3Rhw7BmZXN0YSDDvmVzc2FyIGxpdGFzdGlsbGluZ2FyLCBhw7Agw7bDsHJ1bSBrb3N0aSB2ZXLDsGEgbGl0aXJuaXIgZW5kdXJzdGlsbHRpciBlZnRpciB0w611IHNla8O6bmR1ci4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtaXQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWl0L3N0cmluZ3MueG1sCmluZGV4IDE0Nzc1MmQuLmIzOTVmOGIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtaXQvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1pdC9zdHJpbmdzLnhtbApAQCAtMzAxLDggKzMwMSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4iY2VyY2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xhdW5jaF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMjk2OTI4NzgzODEyMDU1MDUwNiI+IkltcG9zc2liaWxlIGF2dmlhcmUgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2hvd19oaXN0b3J5X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjcwNjIwODgxOTY0NDk3NDcyNDUiPiJBbHRybyI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciByZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0ICg2MzM3MTU1NjA4MDU1MDYyNDI5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCIgbXNnaWQ9IjYzMzcxNTU2MDgwNTUwNjI0MjkiPiJBbHRyZSBhdHRpdml0w6A6IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2hvcml6b250YWwiIG1zZ2lkPSI4ODQ4NTE0NDc0NTQzNDI3MzMyIj4iRGl2aXNpb25lIGluIG9yaXp6b250YWxlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfdmVydGljYWwiIG1zZ2lkPSI5MDc1MjkyMjMzNjk2MTgwODEzIj4iRGl2aXNpb25lIGluIHZlcnRpY2FsZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2N1c3RvbSIgbXNnaWQ9IjQxNzc4Mzc1OTc1MTM3MDE5NDMiPiJEaXZpc2lvbmUgcGVyc29uYWxpenphdGEiPC9zdHJpbmc+CkBAIC0zNjUsNyArMzY0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjM3OTE4NzI2NzUwOTU1ODU5Ij4iUmlzcGFybWlvIGVuZXJnZXRpY28gYXR0aXZvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+IlJpZHVjZSBsZSBwcmVzdGF6aW9uaSBlIGkgZGF0aSBpbiBiYWNrZ3JvdW5kIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiJEaXNhdHRpdmEgcmlzcGFybWlvIGVuZXJnZXRpY28iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4iQ29udGVudXRpIG5hc2Nvc3RpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiI8eGxpZmY6ZyBpZD0iQVBQX1NFRUtJTkdfUEVSTUlTU0lPTiI+JXM8L3hsaWZmOmc+IGluaXppZXLDoCBhZCBhY3F1aXNpcmUgdHV0dG8gY2nDsiBjaGUgw6ggdmlzdWFsaXp6YXRvIHN1bCB0dW8gc2NoZXJtby4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX3JlbWVtYmVyX3RleHQiIG1zZ2lkPSIzMTAzNTEwODgyMTcyNzQ2NzUyIj4iTm9uIG1vc3RyYXJlIHBpw7kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4iQ2FuY2VsbGEgdHV0dG8iPC9zdHJpbmc+CkBAIC00NTAsNCArNDQ4LDI4IEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+IkF0dGl2YXJlIGlsIEJsdWV0b290aD8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX21lc3NhZ2UiIG1zZ2lkPSI5MTA2NTk1OTkwNzA4OTg1Mzg1Ij4iUGVyIGNvbm5ldHRlcmUgbGEgdGFzdGllcmEgYWwgdGFibGV0LCBkZXZpIHByaW1hIGF0dGl2YXJlIGlsIEJsdWV0b290aC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiJBdHRpdmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiJBcHBsaWNhIGEgbm90aWZpY2hlIDx4bGlmZjpnIGlkPSJUT1BJQ19OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+IkFwcGxpY2EgYSB0dXR0ZSBsZSBub3RpZmljaGUgZGkgcXVlc3RcJ2FwcCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfaW1wb3J0YW5jZSIgbXNnaWQ9IjUxOTg1Nzg5ODg5NzgyMzQxNjEiPiJCbG9jY2F0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbXBvcnRhbmNlIiBtc2dpZD0iNDEwOTkyOTk4NjEwNzE0NzkzMCI+IkltcG9ydGFuemEgc2NhcnNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9pbXBvcnRhbmNlIiBtc2dpZD0iODE5MjEwNzY4OTk5NTc0MjY1MyI+IkltcG9ydGFuemEgbm9ybWFsZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiJJbXBvcnRhbnphIGVsZXZhdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfaW1wb3J0YW5jZSIgbXNnaWQ9IjUwODkwMDU4NzI3MTk1NjM4OTQiPiJJbXBvcnRhbnphIHVyZ2VudGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iMjM5NzE5MjY0MjY1Nzg3Mjg3MiI+Ik5vbiBtb3N0cmFyZSBtYWkgcXVlc3RlIG5vdGlmaWNoZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjQzODM1NjMyNjczNzA4NTk3MjUiPiJNb3N0cmEgc2lsZW56aW9zYW1lbnRlIG5lbGxhIHBhcnRlIGluZmVyaW9yZSBkZWxsXCdlbGVuY28gZGVsbGUgbm90aWZpY2hlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9IjQ5MjY1Mjk2MTU5MjA2MTA4MTciPiJNb3N0cmEgc2lsZW56aW9zYW1lbnRlIHF1ZXN0ZSBub3RpZmljaGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+Ik1vc3RyYSBuZWxsYSBwYXJ0ZSBzdXBlcmlvcmUgZGVsbFwnZWxlbmNvIGRlbGxlIG5vdGlmaWNoZSBlIHJpcHJvZHVjaSBzdW9ubyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjUyMzY5ODcxNzE5MDQ3NTYxMzQiPiJBcHJpIHN1bGxvIHNjaGVybW8gZSByaXByb2R1Y2kgc3Vvbm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+IkFsdHJlIGltcG9zdGF6aW9uaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9kb25lIiBtc2dpZD0iNTI3OTQyNjA0NzI3MzkzMDE3NSI+IkZpbmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiJDb2xvcmkgbm9ybWFsaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9uaWdodCIgbXNnaWQ9IjU5NDM4MTc2MjIxMDUzMDcwNzIiPiJDb2xvcmkgcGVyIGxhIG5vdHRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X2N1c3RvbSIgbXNnaWQ9IjM2NTU1NzY0OTIzMjIyOTg3MTMiPiJDb2xvcmkgcGVyc29uYWxpenphdGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiJDb2xvcmkgc2Nvbm9zY2l1dGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4iTW9kaWZpY2EgZGVsIGNvbG9yZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+Ik1vc3RyYSBpbCByaXF1YWRybyBJbXBvc3RhemlvbmkgcmFwaWRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiJBdHRpdmEgbGEgdHJhc2Zvcm1hemlvbmUgcGVyc29uYWxpenphdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9hcHBseSIgbXNnaWQ9IjkyMTI2MDIwMTI2NDEwMzQyODMiPiJBcHBsaWNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+IkNvbmZlcm1hIGxlIGltcG9zdGF6aW9uaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+IkFsY3VuZSBpbXBvc3RhemlvbmkgcmVsYXRpdmUgYWkgY29sb3JpIHBvdHJlYmJlcm8gcmVuZGVyZSBpbnV0aWxpenphYmlsZSBpbCBkaXNwb3NpdGl2by4gRmFpIGNsaWMgc3UgT0sgcGVyIGNvbmZlcm1hcmUgcXVlc3RlIGltcG9zdGF6aW9uaTsgaW4gY2FzbyBjb250cmFyaW8sIGxlIGltcG9zdGF6aW9uaSB2ZXJyYW5ubyByZWltcG9zdGF0ZSBkb3BvIDEwIHNlY29uZGkuIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWl3L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1pdy9zdHJpbmdzLnhtbAppbmRleCA3MGJlYTU1Li4yYzg5NGY1IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWl3L3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtaXcvc3RyaW5ncy54bWwKQEAgLTMwMyw4ICszMDMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+IteX16TXqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4i15zXkCDXoNeZ16rXnyDXlNeZ15Qg15zXlNek16LXmdecINeQ16ogPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2hvd19oaXN0b3J5X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjcwNjIwODgxOTY0NDk3NDcyNDUiPiLXoteV15MiPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCAoNjMzNzE1NTYwODA1NTA2MjQyOSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQiIG1zZ2lkPSI2MzM3MTU1NjA4MDU1MDYyNDI5Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INeg15XXodek15XXqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2hvcml6b250YWwiIG1zZ2lkPSI4ODQ4NTE0NDc0NTQzNDI3MzMyIj4i16TXmdem15XXnCDXkNeV16TXp9eZIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfdmVydGljYWwiIG1zZ2lkPSI5MDc1MjkyMjMzNjk2MTgwODEzIj4i16TXmdem15XXnCDXkNeg15vXmSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2N1c3RvbSIgbXNnaWQ9IjQxNzc4Mzc1OTc1MTM3MDE5NDMiPiLXpNeZ16bXldecINee15XXqteQ150g15DXmdep15nXqiI8L3N0cmluZz4KQEAgLTM2Nyw3ICszNjYsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzc5MTg3MjY3NTA5NTU4NTkiPiLXqteb15XXoNeqIFwn15fXmdeh15vXldefINeR16HXldec15zXlFwnINek15XXotec16oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iODIwMzE4Nzg4MTI2NjcyNjkyIj4i157XpNeX15nXqiDXkNeqINeU15HXmdem15XXoteZ150g15XXoNeq15XXoNeZ150g15HXqNen16IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl9hY3Rpb25fdGV4dCIgbXNnaWQ9IjEwOTE1ODY1ODIzODExMDM4MiI+Iteb15HXlCDXkNeqINeU15fXmdeh15vXldefINeR16HXldec15zXlCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLXlNeq15XXm9efINee15XXodeq16giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+Ijx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4g15nXqteX15nXnCDXnNeU16fXnNeZ15gg15DXqiDXm9ecINeU16rXldeb158g15TXnteV16bXkiDXkdee16HXmiDXqdec15ouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+IteQ15wg16rXpteZ15Ig16nXldeRIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+Iteg16fXlCDXlNeb15wiPC9zdHJpbmc+CkBAIC00NTIsNCArNDUwLDI4IEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+IuKAj9eU15DXnSDXnNeU16TXoteZ15wg15DXqiDXlC1CbHVldG9vdGg/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9tZXNzYWdlIiBtc2dpZD0iOTEwNjU5NTk5MDcwODk4NTM4NSI+IuKAj9eb15PXmSDXnNeX15HXqCDXkNeqINeU157Xp9ec15PXqiDXnNeY15DXkdec15gsINeq15fXmdec15Qg16LXnNeZ15og15zXlNek16LXmdecINeQ16og15QtQmx1ZXRvb3RoLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+IteU16TXotecIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4i15TXl9ecINei15wg15TXldeT16LXldeqINep15wgPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4i15TXl9ecINei15wg15vXnCDXlNeU15XXk9ei15XXqiDXnteQ16TXnNeZ16fXpteZ15Qg15bXlSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfaW1wb3J0YW5jZSIgbXNnaWQ9IjUxOTg1Nzg5ODg5NzgyMzQxNjEiPiLXl9eh15XXnSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbXBvcnRhbmNlIiBtc2dpZD0iNDEwOTkyOTk4NjEwNzE0NzkzMCI+IteX16nXmdeR15XXqiDXoNee15XXm9eUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9pbXBvcnRhbmNlIiBtc2dpZD0iODE5MjEwNzY4OTk5NTc0MjY1MyI+IteX16nXmdeR15XXqiDXqNeS15nXnNeUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+IteX16nXmdeR15XXqiDXkteR15XXlNeUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4i15fXqdeZ15HXldeqINeT15fXldek15QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iMjM5NzE5MjY0MjY1Nzg3Mjg3MiI+Itec16LXldec150g15DXnCDXqtem15nXkiDXkNeqINeU15TXldeT16LXldeqINeU15DXnNeUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+IteU16bXkiDXkdeX15zXpyDXlNeq15fXqteV158g16nXnCDXqNep15nXnteqINeU15TXldeT16LXldeqINeR15zXmSDXnNeU16nXnteZ16Ig16bXnNeZ15wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+IteU16bXkiDXkNeqINeU15TXldeT16LXldeqINeU15DXnNeUINeR15zXmSDXnNeU16nXnteZ16Ig16bXnNeZ15wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+IteU16bXkiDXkdeX15zXpyDXlNei15zXmdeV158g16nXnCDXqNep15nXnteqINeU15TXldeT16LXldeqINeV15TXqdee16Ig16bXnNeZ15wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4i15TXpteSINec16jXkteiINei15wg15TXnteh15og15XXlNep157XoiDXptec15nXnCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9tb3JlX3NldHRpbmdzIiBtc2dpZD0iODE2MzA2MjgzMzk2NTUzNTcxIj4i15TXkteT16jXldeqINeg15XXodek15XXqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9kb25lIiBtc2dpZD0iNTI3OTQyNjA0NzI3MzkzMDE3NSI+Iteh15nXldedIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25vbmUiIG1zZ2lkPSIyMTIxOTU3OTI2MDQwNTQzMTQ4Ij4i16bXkdei15nXnSDXqNeS15nXnNeZ150iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4i16bXkdei15kg15zXmdec15QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+Item15HXoteZ150g157Xldeq15DXnteZ150g15DXmdep15nXqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF91bmtub3duIiBtc2dpZD0iMjcwOTIwMjEwNDI1NjI2NTEwNyI+Item15HXoteZ150g15zXkCDXmdeT15XXoteZ150iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4i16nXmdeg15XXmSDXpteR16IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfc2hvd19xcyIgbXNnaWQ9IjE3NjMyNDQzNTQzOTkyNzY2NzkiPiLXlNem15LXqiDXkNeo15nXlyDXqdecINeU15LXk9eo15XXqiDXnteU15nXqNeV16oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9lbmFibGVfY3VzdG9tIiBtc2dpZD0iNjcyOTAwMTMwODIxNzM0NzUwMSI+IteU16TXotecINeY16jXoNeh16TXldeo157XpteZ15Qg157Xldeq15DXnteqINeQ15nXqdeZ16oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9hcHBseSIgbXNnaWQ9IjkyMTI2MDIwMTI2NDEwMzQyODMiPiLXlNeX15wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfdGl0bGUiIG1zZ2lkPSI0NzQ2NjY2NTQ1NDgwNTM0NjYzIj4i15DXmdep15XXqCDXlNeS15PXqNeV16oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfbWVzc2FnZSIgbXNnaWQ9IjkxMTYwMDEwNjkzOTc5OTY2OTEiPiLXlNeS15PXqNeV16og16bXkdeiINee16HXldeZ157XldeqINei15zXldec15XXqiDXnNeU16TXldeaINeQ16og15TXnteb16nXmdeoINeU15bXlCDXnNeR15zXqteZINep157XmdepLiDXnNeX16Ug16LXnCDXkNeZ16nXldeoINeb15PXmSDXnNeQ16nXqCDXkNeqINeU15LXk9eo15XXqiDXlNem15HXoiDXlNeQ15zXlCwg15DXl9eo16og15TXkteT16jXldeqINeQ15zXlCDXmdeq15DXpNeh15Ug15zXkNeX16ggMTAg16nXoNeZ15XXqi4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtamEvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWphL3N0cmluZ3MueG1sCmluZGV4IGQ5MWMzYjUuLjU4MGQ5OTUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtamEvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1qYS9zdHJpbmdzLnhtbApAQCAtMzAxLDggKzMwMSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4i5qSc57SiIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sYXVuY2hfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjI5NjkyODc4MzgxMjA1NTA1MDYiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz7jgpLplovlp4vjgafjgY3jgb7jgZvjgpPjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4i44KC44Gj44Go6KaL44KLIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQgKDYzMzcxNTU2MDgwNTUwNjI0MjkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+IuS7liA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g5Lu2Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiLmqKrjgavliIblibIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF92ZXJ0aWNhbCIgbXNnaWQ9IjkwNzUyOTIyMzM2OTYxODA4MTMiPiLnuKbjgavliIblibIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4i5YiG5Ymy77yI44Kr44K544K/44Og77yJIjwvc3RyaW5nPgpAQCAtMzY1LDcgKzM2NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+IuODkOODg+ODhuODquODvOOCu+ODvOODkOODvOOBjE9OIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+IuODkeODleOCqeODvOODnuODs+OCueOBqOODkOODg+OCr+OCsOODqeOCpuODs+ODieODh+ODvOOCv+OCkuWItumZkOOBl+OBvuOBmSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4i44OQ44OD44OG44Oq44O844K744O844OQ44O844KST0ZG44Gr44GX44G+44GZIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IuOCs+ODs+ODhuODs+ODhOOBjOmdnuihqOekuiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fZGlhbG9nX3RleHQiIG1zZ2lkPSIzMDcxNDMxMDI1NDQ4MjE4OTI4Ij4iPHhsaWZmOmcgaWQ9IkFQUF9TRUVLSU5HX1BFUk1JU1NJT04iPiVzPC94bGlmZjpnPuOBp+OAgeeUu+mdouOBq+ihqOekuuOBleOCjOOBpuOBhOOCi+OCs+ODs+ODhuODs+ODhOOBruOCreODo+ODl+ODgeODo+OCkumWi+Wni+OBl+OBvuOBmeOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fcmVtZW1iZXJfdGV4dCIgbXNnaWQ9IjMxMDM1MTA4ODIxNzI3NDY3NTIiPiLmrKHlm57jgYvjgonooajnpLrjgZfjgarjgYQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4i44GZ44G544Gm5raI5Y67Ijwvc3RyaW5nPgpAQCAtNDUwLDQgKzQ0OCwyOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiJCbHVldG9vdGjjgpJPTuOBq+OBl+OBvuOBmeOBi++8nyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiLjgr/jg5bjg6zjg4Pjg4jjgafjgq3jg7zjg5zjg7zjg4njgavmjqXntprjgZnjgovjgavjga/jgIHmnIDliJ3jgatCbHVldG9vdGjjgpJPTuOBq+OBmeOCi+W/heimgeOBjOOBguOCiuOBvuOBmeOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+Ik9O44Gr44GZ44KLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4i44CMPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+44CN44Gu6YCa55+l44Gr6YGp55SoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4i44GT44Gu44Ki44OX44Oq44GL44KJ44Gu44GZ44G544Gm44Gu6YCa55+l44Gr6YGp55SoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IuODluODreODg+OCr+S4rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbXBvcnRhbmNlIiBtc2dpZD0iNDEwOTkyOTk4NjEwNzE0NzkzMCI+IumHjeimgeW6pjog5L2OIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9pbXBvcnRhbmNlIiBtc2dpZD0iODE5MjEwNzY4OTk5NTc0MjY1MyI+IumHjeimgeW6pjog5LitIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+IumHjeimgeW6pjog6auYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4i6YeN6KaB5bqmOiDnt4rmgKUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iMjM5NzE5MjY0MjY1Nzg3Mjg3MiI+IuS7iuW+jOOBr+OBk+OBrumAmuefpeOCkuihqOekuuOBl+OBquOBhCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjQzODM1NjMyNjczNzA4NTk3MjUiPiLpgJrnn6Xjg6rjgrnjg4jjga7mnKvlsL7jgavjg57jg4rjg7zjg6Ljg7zjg4njgafooajnpLrjgZnjgosiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+IuOBk+OBrumAmuefpeOCkuODnuODiuODvOODouODvOODieOBp+ihqOekuuOBmeOCiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4i6YCa55+l44Oq44K544OI44Gu5YWI6aCt44Gr6KGo56S644GX44CB6Z+z5aOw44Gn44KC55+l44KJ44Gb44KLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iNTIzNjk4NzE3MTkwNDc1NjEzNCI+IueUu+mdouOBq+aVsOenkumWk+ihqOekuuOBl+OAgemfs+WjsOOBp+OCguefpeOCieOBm+OCiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9tb3JlX3NldHRpbmdzIiBtc2dpZD0iODE2MzA2MjgzMzk2NTUzNTcxIj4i6Kmz57Sw6Kit5a6aIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4i5a6M5LqGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25vbmUiIG1zZ2lkPSIyMTIxOTU3OTI2MDQwNTQzMTQ4Ij4i5qiZ5rqW44Gu6ImyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+IuWknOmWk+OBruiJsiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4i44Kr44K544K/44Og44Gu6ImyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4i5LiN5piO44Gq6ImyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+IuiJsuOBruWkieabtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+Ilvjgq/jgqTjg4Pjgq/oqK3lrppdIOOCv+OCpOODq+OBruihqOekuiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4i44Kr44K544K/44Og5aSJ5o+b44Gu5pyJ5Yq55YyWIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4i6YGp55SoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+IuioreWumuOBrueiuuiqjSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+IuS4gOmDqOOBruiJsuioreWumuOCkumBqeeUqOOBmeOCi+OBqOOAgeOBk+OBruerr+acq+OCkuS9v+eUqOOBp+OBjeOBquOBj+OBquOCi+OBk+OBqOOBjOOBguOCiuOBvuOBmeOAguOBk+OBruiJsuioreWumuOCkueiuuiqjeOBmeOCi+OBq+OBr+OAgVtPS10g44KS44Kv44Oq44OD44Kv44GX44Gm44GP44Gg44GV44GE44CC56K66KqN44GX44Gq44GE5aC05ZCI44CBMTAg56eS5b6M44Gr6Kit5a6a44Gv44Oq44K744OD44OI44GV44KM44G+44GZ44CCIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWthLXJHRS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMta2EtckdFL3N0cmluZ3MueG1sCmluZGV4IDUxNDA1Y2IuLjdhNTE2NjggMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMta2EtckdFL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMta2EtckdFL3N0cmluZ3MueG1sCkBAIC0zMDEsOCArMzAxLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2VhcmNoX2Jhcl9sYWJlbCIgbXNnaWQ9IjgwNzQ5OTc0MDAxODc4MzY2NzciPiLhg6vhg5jhg5Thg5Hhg5AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xhdW5jaF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMjk2OTI4NzgzODEyMDU1MDUwNiI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPi3hg5jhg6Eg4YOS4YOQ4YOb4YOd4YOr4YOQ4YOu4YOU4YOR4YOQIOGDleGDlOGDoCDhg5vhg53hg67hg5Thg6Dhg67hg5Phg5AuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zaG93X2hpc3RvcnlfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNzA2MjA4ODE5NjQ0OTc0NzI0NSI+IuGDm+GDlOGDouGDmCI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciByZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0ICg2MzM3MTU1NjA4MDU1MDYyNDI5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCIgbXNnaWQ9IjYzMzcxNTU2MDgwNTUwNjI0MjkiPiLhg5nhg5jhg5Phg5Thg5UgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiLhg7Dhg53hg6Dhg5jhg5bhg53hg5zhg6Lhg5Dhg5rhg6Phg6Dhg5gg4YOS4YOQ4YOn4YOd4YOk4YOQIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfdmVydGljYWwiIG1zZ2lkPSI5MDc1MjkyMjMzNjk2MTgwODEzIj4i4YOV4YOU4YOg4YOi4YOY4YOZ4YOQ4YOa4YOj4YOg4YOYIOGDkuGDkOGDp+GDneGDpOGDkCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2N1c3RvbSIgbXNnaWQ9IjQxNzc4Mzc1OTc1MTM3MDE5NDMiPiLhg5jhg5zhg5Phg5jhg5Xhg5jhg5Phg6Phg5Dhg5rhg6Phg6Dhg5gg4YOS4YOQ4YOn4YOd4YOR4YOQIjwvc3RyaW5nPgpAQCAtMzY1LDcgKzM2NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+IuGDkeGDkOGDouGDkOGDoOGDlOGDmOGDoSDhg5Phg5Dhg5vhg5bhg53hg5Lhg5gg4YOp4YOQ4YOg4YOX4YOj4YOa4YOY4YOQIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+IuGDkOGDm+GDquGDmOGDoOGDlOGDkeGDoSDhg6zhg5Dhg6Dhg5vhg5Dhg5Phg53hg5Hhg5Dhg6Eg4YOT4YOQIOGDo+GDmeGDkOGDnOGDkCDhg6Thg53hg5zhg5jhg6Eg4YOb4YOd4YOc4YOQ4YOq4YOU4YOb4YOU4YOR4YOhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiLhg5Hhg5Dhg6Lhg5Dhg6Dhg5Thg5jhg6Eg4YOT4YOQ4YOW4YOd4YOS4YOV4YOY4YOhIOGDkuGDkOGDm+GDneGDoOGDl+GDleGDkCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLhg6jhg5jhg5Lhg5fhg5Dhg5Xhg6Hhg5gg4YOT4YOQ4YOb4YOQ4YOa4YOj4YOa4YOY4YOQIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiI8eGxpZmY6ZyBpZD0iQVBQX1NFRUtJTkdfUEVSTUlTU0lPTiI+JXM8L3hsaWZmOmc+IOGDk+GDkOGDmOGDrOGDp+GDlOGDkeGDoSDhg5jhg5sg4YOn4YOV4YOU4YOa4YOQ4YOk4YOg4YOY4YOhIOGDkOGDpuGDkeGDlOGDreGDk+GDleGDkOGDoSwg4YOg4YOQ4YOqIOGDl+GDpeGDleGDlOGDnOGDoSDhg5Thg5nhg6Dhg5Dhg5zhg5bhg5Qg4YOp4YOQ4YOc4YOhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fcmVtZW1iZXJfdGV4dCIgbXNnaWQ9IjMxMDM1MTA4ODIxNzI3NDY3NTIiPiLhg5Dhg6bhg5Dhg6Ag4YOb4YOQ4YOp4YOV4YOU4YOc4YOdIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+IuGDp+GDleGDlOGDmuGDkOGDoSDhg5Lhg5Dhg6Hhg6Phg6Thg5fhg5Dhg5Xhg5Thg5Hhg5AiPC9zdHJpbmc+CkBAIC00NTAsNCArNDQ4LDI4IEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+IuGDkuGDoeGDo+GDoOGDlyBCbHVldG9vdGgt4YOY4YOhIOGDqeGDkOGDoOGDl+GDleGDkD8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX21lc3NhZ2UiIG1zZ2lkPSI5MTA2NTk1OTkwNzA4OTg1Mzg1Ij4i4YOZ4YOa4YOQ4YOV4YOY4YOQ4YOi4YOj4YOg4YOY4YOhIOGDouGDkOGDkeGDmuGDlOGDouGDl+GDkOGDnCDhg5Phg5Dhg6Hhg5Dhg5nhg5Dhg5Xhg6jhg5jhg6Dhg5Thg5Hhg5rhg5Dhg5MsIOGDr+GDlOGDoCDhg6Phg5zhg5Phg5Ag4YOp4YOQ4YOg4YOX4YOd4YOXIEJsdWV0b290aC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiLhg6nhg5Dhg6Dhg5fhg5Xhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiLigJ48eGxpZmY6ZyBpZD0iVE9QSUNfTkFNRSI+JTEkczwveGxpZmY6Zz7igJwg4YOi4YOY4YOe4YOY4YOhIOGDqOGDlOGDouGDp+GDneGDkeGDmOGDnOGDlOGDkeGDlOGDkeGDmOGDoeGDl+GDleGDmOGDoSDhg5vhg5jhg6Hhg5Dhg5Phg5Dhg5Lhg5Thg5Hhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b19hcHAiIG1zZ2lkPSIzNjMwMTY3ODM5Mzk4MTU5NjAiPiLhg5Dhg5sg4YOQ4YOe4YOY4YOhIOGDp+GDleGDlOGDmuGDkCDhg6jhg5Thg6Lhg6fhg53hg5Hhg5jhg5zhg5Thg5Hhg5jhg6Hhg5fhg5Xhg5jhg6Eg4YOb4YOY4YOh4YOQ4YOT4YOQ4YOS4YOU4YOR4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IuGDk+GDkOGDkeGDmuGDneGDmeGDmOGDmuGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbXBvcnRhbmNlIiBtc2dpZD0iNDEwOTkyOTk4NjEwNzE0NzkzMCI+IuGDk+GDkOGDkeGDkOGDmuGDmCDhg57hg6Dhg5jhg53hg6Dhg5jhg6Lhg5Thg6Lhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4i4YOp4YOV4YOU4YOj4YOa4YOU4YOR4YOg4YOY4YOV4YOYIOGDnuGDoOGDmOGDneGDoOGDmOGDouGDlOGDouGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiLhg5vhg5Dhg6bhg5Dhg5rhg5gg4YOe4YOg4YOY4YOd4YOg4YOY4YOi4YOU4YOi4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4i4YOS4YOQ4YOT4YOQ4YOj4YOT4YOU4YOR4YOU4YOa4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjIzOTcxOTI2NDI2NTc4NzI4NzIiPiLhg5Dhg5sg4YOo4YOU4YOi4YOn4YOd4YOR4YOY4YOc4YOU4YOR4YOU4YOR4YOY4YOhIOGDqeGDleGDlOGDnOGDlOGDkeGDmOGDoSDhg6jhg5Thg6zhg6fhg5Xhg5Thg6Lhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4i4YOQ4YObIOGDqOGDlOGDouGDp+GDneGDkeGDmOGDnOGDlOGDkeGDlOGDkeGDmOGDoSDhg6Hhg5jhg5jhg6Eg4YOR4YOd4YOa4YOd4YOo4YOYLCDhg6Phg67hg5vhg53hg5Mg4YOp4YOV4YOU4YOc4YOU4YOR4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9IjQ5MjY1Mjk2MTU5MjA2MTA4MTciPiLhg5Dhg5sg4YOo4YOU4YOi4YOn4YOd4YOR4YOY4YOc4YOU4YOR4YOU4YOR4YOY4YOhIOGDo+GDruGDm+GDneGDkyDhg6nhg5Xhg5Thg5zhg5Thg5Hhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+IuGDkOGDmyDhg6jhg5Thg6Lhg6fhg53hg5Hhg5jhg5zhg5Thg5Hhg5Thg5Hhg5jhg6Eg4YOh4YOY4YOY4YOhIOGDl+GDkOGDleGDqOGDmCwg4YOu4YOb4YOd4YOV4YOQ4YOcIOGDoeGDmOGDkuGDnOGDkOGDmuGDl+GDkOGDnCDhg5Thg6Dhg5fhg5Dhg5Mg4YOp4YOV4YOU4YOc4YOU4YOR4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iNTIzNjk4NzE3MTkwNDc1NjEzNCI+IuGDkOGDmyDhg6jhg5Thg6Lhg6fhg53hg5Hhg5jhg5zhg5Thg5Hhg5Thg5Hhg5jhg6Eg4YOe4YOY4YOg4YOT4YOQ4YOe4YOY4YOgIOGDlOGDmeGDoOGDkOGDnOGDluGDlCwg4YOu4YOb4YOd4YOV4YOQ4YOcIOGDoeGDmOGDkuGDnOGDkOGDmuGDl+GDkOGDnCDhg5Thg6Dhg5fhg5Dhg5Mg4YOp4YOV4YOU4YOc4YOU4YOR4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX21vcmVfc2V0dGluZ3MiIG1zZ2lkPSI4MTYzMDYyODMzOTY1NTM1NzEiPiLhg5Phg5Dhg5vhg5Dhg6Lhg5Thg5Hhg5jhg5fhg5gg4YOe4YOQ4YOg4YOQ4YOb4YOU4YOi4YOg4YOU4YOR4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4i4YOb4YOW4YOQ4YOT4YOQ4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25vbmUiIG1zZ2lkPSIyMTIxOTU3OTI2MDQwNTQzMTQ4Ij4i4YOp4YOV4YOU4YOj4YOa4YOU4YOR4YOg4YOY4YOV4YOYIOGDpOGDlOGDoOGDlOGDkeGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9uaWdodCIgbXNnaWQ9IjU5NDM4MTc2MjIxMDUzMDcwNzIiPiLhg6bhg5Dhg5vhg5jhg6Eg4YOk4YOU4YOg4YOU4YOR4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X2N1c3RvbSIgbXNnaWQ9IjM2NTU1NzY0OTIzMjIyOTg3MTMiPiLhg5vhg53hg6Dhg5Lhg5Thg5Hhg6Phg5rhg5gg4YOk4YOU4YOg4YOU4YOR4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4i4YOj4YOq4YOc4YOd4YOR4YOYIOGDpOGDlOGDoOGDlOGDkeGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3RyYW5zZm9ybSIgbXNnaWQ9IjY5ODU0NjA0MDgwNzkwODYwOTAiPiLhg6Thg5Thg6Dhg5Thg5Hhg5jhg6Eg4YOo4YOU4YOq4YOV4YOa4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Nob3dfcXMiIG1zZ2lkPSIxNzYzMjQ0MzU0Mzk5Mjc2Njc5Ij4i4YOh4YOs4YOg4YOQ4YOk4YOYIOGDnuGDkOGDoOGDkOGDm+GDlOGDouGDoOGDlOGDkeGDmOGDoSDhg5vhg53hg5bhg5Dhg5jhg5nhg5jhg6Eg4YOp4YOV4YOU4YOc4YOU4YOR4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiLhg5vhg53hg6Dhg5Lhg5Thg5Hhg6Phg5rhg5gg4YOS4YOQ4YOg4YOT4YOQ4YOl4YOb4YOc4YOY4YOhIOGDqeGDkOGDoOGDl+GDleGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+IuGDkuGDkOGDm+GDneGDp+GDlOGDnOGDlOGDkeGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiLhg57hg5Dhg6Dhg5Dhg5vhg5Thg6Lhg6Dhg5Thg5Hhg5jhg6Eg4YOT4YOQ4YOT4YOQ4YOh4YOi4YOj4YOg4YOU4YOR4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X21lc3NhZ2UiIG1zZ2lkPSI5MTE2MDAxMDY5Mzk3OTk2NjkxIj4i4YOk4YOU4YOg4YOX4YOQIOGDluGDneGDkuGDmOGDlOGDoOGDlyDhg57hg5Dhg6Dhg5Dhg5vhg5Thg6Lhg6Dhg6Eg4YOQ4YObIOGDm+GDneGDrOGDp+GDneGDkeGDmOGDmuGDneGDkeGDkOGDoeGDl+GDkOGDnCDhg5vhg6Phg6jhg5Dhg53hg5Hhg5jhg6Eg4YOS4YOQ4YOg4YOX4YOj4YOa4YOU4YOR4YOQIOGDqOGDlOGDo+GDq+GDmuGDmOGDkC4g4YOk4YOU4YOg4YOX4YOQIOGDkOGDm+GDn+GDkOGDm+GDmOGDnOGDk+GDlOGDmuGDmCDhg57hg5Dhg6Dhg5Dhg5vhg5Thg6Lhg6Dhg5Thg5Hhg5jhg6Eg4YOT4YOQ4YOh4YOQ4YOT4YOQ4YOh4YOi4YOj4YOg4YOU4YOR4YOa4YOQ4YOTLCDhg5Phg5Dhg5Dhg6zhg5nhg5Dhg57hg6Phg5zhg5Thg5cg4oCe4YOZ4YOQ4YOg4YOS4YOY4oCcLeGDluGDlC4g4YOs4YOY4YOc4YOQ4YOQ4YOm4YOb4YOT4YOU4YOSIOGDqOGDlOGDm+GDl+GDruGDleGDlOGDleGDkOGDqOGDmCwg4YOe4YOQ4YOg4YOQ4YOb4YOU4YOi4YOg4YOU4YOR4YOYIDEwIOGDrOGDkOGDm+GDmOGDoSDhg6jhg5Thg5vhg5Phg5Thg5Ig4YOp4YOQ4YOb4YOd4YOY4YOn4YOg4YOU4YOR4YOQLiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1ray1yS1ovc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWtrLXJLWi9zdHJpbmdzLnhtbAppbmRleCBjZGU0ZGQ4Li5lYjg5OTVlIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWtrLXJLWi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWtrLXJLWi9zdHJpbmdzLnhtbApAQCAtMzAxLDggKzMwMSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4i0ZbQt9C00LXRgyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+INGW0YHQutC1INKb0L7RgdGDINC80q/QvNC60ZbQvSDQsdC+0LvQvNCw0LTRiy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4i0prQvtGB0YvQvNGI0LAiPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCAoNjMzNzE1NTYwODA1NTA2MjQyOSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQiIG1zZ2lkPSI2MzM3MTU1NjA4MDU1MDYyNDI5Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INKa0L7RgdGL0LzRiNCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiLQkdOp0LvRltC90LPQtdC9INC606nQu9C00LXQvdC10qMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF92ZXJ0aWNhbCIgbXNnaWQ9IjkwNzUyOTIyMzM2OTYxODA4MTMiPiLQkdOp0LvRltC90LPQtdC9INGC0ZbQuiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2N1c3RvbSIgbXNnaWQ9IjQxNzc4Mzc1OTc1MTM3MDE5NDMiPiLQkdOp0LvRltC90LPQtdC9INGC0LXSo9GI0LXQu9C10YLRltC9Ijwvc3RyaW5nPgpAQCAtMzY1LDcgKzM2NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+ItCR0LDRgtCw0YDQtdGPINKv0L3QtdC80LTQtdCz0ZbRiCDSm9C+0YHRg9C70YsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iODIwMzE4Nzg4MTI2NjcyNjkyIj4i06jQvdGW0LzQtNGW0LvRltC60YLRliDQttOZ0L3QtSDRhNC+0L3QtNGL0psg0LTQtdGA0LXQutGC0LXRgNC00ZYg0LDQt9Cw0LnRgtCw0LTRiyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4i0JHQsNGC0LDRgNC10Y8g0q/QvdC10LzQtNC10LPRltGI0YLRliDTqdGI0ZbRgNGDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+ItCc0LDQt9C80rHQvSDQttCw0YHRi9GA0YvQu9KT0LDQvSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fZGlhbG9nX3RleHQiIG1zZ2lkPSIzMDcxNDMxMDI1NDQ4MjE4OTI4Ij4iPHhsaWZmOmcgaWQ9IkFQUF9TRUVLSU5HX1BFUk1JU1NJT04iPiVzPC94bGlmZjpnPiDRjdC60YDQsNC90LTQsCDQutOp0YDRgdC10YLRltC70LPQtdC90L3RltKjINCx0LDRgNC70YvSk9GL0L0g0YLSr9GB0ZbRgNC1INCx0LDRgdGC0LDQudC00YsuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+ItKa0LDQudGC0LAg0LrTqdGA0YHQtdGC0L/QtdGDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+ItCR0LDRgNC70YvSk9GL0L0g0YLQsNC30LDQu9Cw0YMiPC9zdHJpbmc+CkBAIC00NTAsNCArNDQ4LDI4IEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+IkJsdWV0b290aCDRhNGD0L3QutGG0LjRj9GB0YvQvSDSm9C+0YHRgyDQutC10YDQtdC6INC/0LU/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9tZXNzYWdlIiBtc2dpZD0iOTEwNjU5NTk5MDcwODk4NTM4NSI+ItCf0LXRgNC90LXRgtCw0pvRgtCw0L3RiyDQv9C70LDQvdGI0LXRgtC60LUg0pvQvtGB0YMg0q/RiNGW0L0g0LDQu9C00YvQvNC10L0gQmx1ZXRvb3RoINGE0YPQvdC60YbQuNGP0YHRi9C9INKb0L7RgdGDINC60LXRgNC10LouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9jb25maXJtYXRpb25fb2siIG1zZ2lkPSI2MjU4MDc0MjUwOTQ4MzA5NzE1Ij4i0prQvtGB0YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiI8eGxpZmY6ZyBpZD0iVE9QSUNfTkFNRSI+JTEkczwveGxpZmY6Zz4g0YXQsNCx0LDRgNC70LDQvdC00YvRgNGD0pPQsCDSm9C+0LvQtNCw0L3RgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+ItCe0YHRiyDSm9C+0LvQtNCw0L3QsdCw0L3Ri9KjINCx0LDRgNC70YvSmyDRhdCw0LHQsNGA0LvQsNC90LTRi9GA0YPQu9Cw0YDRi9C90LAg0pvQvtC70LTQsNC90YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX2ltcG9ydGFuY2UiIG1zZ2lkPSI1MTk4NTc4OTg4OTc4MjM0MTYxIj4i0JHTqdCz0LXQu9Cz0LXQvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbXBvcnRhbmNlIiBtc2dpZD0iNDEwOTkyOTk4NjEwNzE0NzkzMCI+ItCi06nQvNC10L0g0LzQsNKj0YvQt9C00YvQu9GL0psiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4i0prQsNC70YvQv9GC0Ysg0LzQsNKj0YvQt9C00YvQu9GL0psiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoaWdoX2ltcG9ydGFuY2UiIG1zZ2lkPSIxNTI3MDY2MTk1NjE0MDUwMjYzIj4i0JbQvtKT0LDRgNGLINC80LDSo9GL0LfQtNGL0LvRi9KbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4i0KjSsdKT0YvQuyDQvNCw0qPRi9C30LTRi9C70YvSmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4i0J7RgdGLINGF0LDQsdCw0YDQu9Cw0L3QtNGL0YDRg9C70LDRgNC00Ysg0LXRiNKb0LDRiNCw0L0g0LrTqdGA0YHQtdGC0L/QtdGDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+ItCl0LDQsdCw0YDQu9Cw0L3QtNGL0YDRg9C70LDRgCDRgtGW0LfRltC80L3RltKjINGC06nQvNC10L3Qs9GWINC20LDSk9GL0L3QtNCwINKv0L3RgdGW0Lcg0LrTqdGA0YHQtdGC0YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+ItCe0YHRiyDRhdCw0LHQsNGA0LvQsNC90LTRi9GA0YPQu9Cw0YDQtNGLINKv0L3RgdGW0Lcg0LrTqdGA0YHQtdGC0YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+ItCl0LDQsdCw0YDQu9Cw0L3QtNGL0YDRg9C70LDRgNC00Ysg0YLRltC30ZbQvNGW0L3RltKjINC20L7Sk9Cw0YDSk9GLINC20LDSk9GL0L3QtNCwINC606nRgNGB0LXRgtGDINC205nQvdC1INC00YvQsdGL0YEg0YjRi9KT0LDRgNGDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iNTIzNjk4NzE3MTkwNDc1NjEzNCI+ItCt0LrRgNCw0L3Sk9CwINCx0LXQutGW0YLRgyDQttOZ0L3QtSDQtNGL0LHRi9GBINGI0YvSk9Cw0YDRgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9tb3JlX3NldHRpbmdzIiBtc2dpZD0iODE2MzA2MjgzMzk2NTUzNTcxIj4i0prQvtGB0YvQvNGI0LAg0L/QsNGA0LDQvNC10YLRgNC70LXRgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9kb25lIiBtc2dpZD0iNTI3OTQyNjA0NzI3MzkzMDE3NSI+ItCU0LDQudGL0L0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiLSmtCw0LvRi9C/0YLRiyDRgtKv0YHRgtC10YAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4i0KLSr9C90LPRliDRgtKv0YHRgtC10YAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+ItCQ0YDQvdCw0YPQu9GLINGC0q/RgdGC0LXRgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF91bmtub3duIiBtc2dpZD0iMjcwOTIwMjEwNDI1NjI2NTEwNyI+ItCR0LXQu9Cz0ZbRgdGW0Lcg0YLSr9GB0YLQtdGAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+ItCi0q/RgdGC0ZYg06nQt9Cz0LXRgNGC0YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfc2hvd19xcyIgbXNnaWQ9IjE3NjMyNDQzNTQzOTkyNzY2NzkiPiLQltGL0LvQtNCw0Lwg0L/QsNGA0LDQvNC10YLRgNC70LXRgCDRgtC+0YDRi9C9INC606nRgNGB0LXRgtGDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiLQkNGA0L3QsNGD0LvRiyDRgtKv0YDQu9C10L3QtNGW0YDRg9C00ZYg0pvQvtGB0YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9hcHBseSIgbXNnaWQ9IjkyMTI2MDIwMTI2NDEwMzQyODMiPiLSmtC+0LvQtNCw0L3RgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiLQn9Cw0YDQsNC80LXRgtGA0LvQtdGA0LTRliDRgNCw0YHRgtCw0YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfbWVzc2FnZSIgbXNnaWQ9IjkxMTYwMDEwNjkzOTc5OTY2OTEiPiLQmtC10LnQsdGW0YAg0YLSr9GBINC/0LDRgNCw0LzQtdGC0YDQu9C10YDRliDQsdKx0Lsg0pvSsdGA0YvQu9KT0YvQvdGLINC/0LDQudC00LDQu9Cw0L3RgyDQvNKv0LzQutGW0L0g0LXQvNC10YEg0LXRgtGD0ZYg0LzSr9C80LrRltC9LiDQkdKx0Lsg0YLSr9GBINC/0LDRgNCw0LzQtdGC0YDQu9C10YDRltC9INGA0LDRgdGC0LDRgyDSr9GI0ZbQvSBPSyDRgtKv0LnQvNC10YHRltC9INCx0LDRgdGL0qPRi9C3LCDTmdC50YLQv9C10YHQtSDQv9Cw0YDQsNC80LXRgtGA0LvQtdGAIDEwINGB0LXQutGD0L3QtNGC0LDQvSDQutC10LnRltC9INGL0YHRi9GA0YvQu9Cw0LTRiy4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMta20tcktIL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1rbS1yS0gvc3RyaW5ncy54bWwKaW5kZXggYzVlMGY4NS4uNWMxMDIxMyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1rbS1yS0gvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1rbS1yS0gvc3RyaW5ncy54bWwKQEAgLTMwMSw4ICszMDEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+IuGen+GfkuGenOGfguGehOGemuGegCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4i4Z6Y4Z634Z6T4oCL4Z6i4Z624Z6F4oCL4Z6F4Z624Z6U4Z+L4Z6V4Z+S4Z6K4Z6+4Z6YIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDhnpHhn4Hhn5QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4i4Z6F4Z+S4Z6a4Z6+4Z6T4Z6R4Z+A4Z6PIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQgKDYzMzcxNTU2MDgwNTUwNjI0MjkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDhnpHhn4Dhno8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9ob3Jpem9udGFsIiBtc2dpZD0iODg0ODUxNDQ3NDU0MzQyNzMzMiI+IuGelOGfhuGelOGfguGegOGeleGfkuGej+GfgeGegCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X3ZlcnRpY2FsIiBtc2dpZD0iOTA3NTI5MjIzMzY5NjE4MDgxMyI+IuGelOGfhuGelOGfguGegOGelOGeieGfkuGeiOGemiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2N1c3RvbSIgbXNnaWQ9IjQxNzc4Mzc1OTc1MTM3MDE5NDMiPiLhnpThn4bhnpThn4LhnoDhnpXhn5LhnpHhnrbhnpvhn4vhnoHhn5Lhnpvhnr3hnpMiPC9zdHJpbmc+CkBAIC0zNjUsNyArMzY0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjM3OTE4NzI2NzUwOTU1ODU5Ij4i4Z6A4Z6Y4Z+S4Z6Y4Z6c4Z634Z6S4Z644oCL4Z6f4Z6T4Z+S4Z6f4Z+G4oCL4Z6Q4Z+S4Z6Y4oCL4Z6C4Z664oCL4Z6U4Z6+4Z6AIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+IuGegOGetuGemuKAi+GelOGek+GfkuGekOGemeKAi+GegOGetuGemuKAi+GelOGfkuGemuGej+Get+GelOGej+GfkuGej+GetyDhnpPhnrfhnoTigIvhnpHhnrfhnpPhn5LhnpPhnpPhn5DhnpnigIvhnpXhn5LhnpHhn4PigIvhnoHhnrbhnoThnoDhn5Lhnprhn4ThnpkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl9hY3Rpb25fdGV4dCIgbXNnaWQ9IjEwOTE1ODY1ODIzODExMDM4MiI+IuGelOGet+GekeKAi+GekuGetuGej+Geu+KAi+GemuGegOGfkuGen+GetuKAi+GekOGetuGemOGeluGem+KAi+GekOGfkuGemCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLhnpThnrbhnpPigIvhnpvhnrbhnoDhn4vigIvhnpjhnrbhno/hnrfhnoDhnrYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+Ijx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4g4Z6T4Z654Z6E4oCL4Z6F4Z624Z6U4Z+L4Z6V4Z+S4Z6K4Z6+4Z6Y4oCL4Z6F4Z624Z6U4Z+L4oCL4Z6Z4Z6A4oCL4Z6i4Z+S4Z6c4Z644Z+X4oCL4Z6C4Z+S4Z6a4Z6U4Z+L4Z6Z4Z+J4Z624Z6E4oCL4Z6K4Z+C4Z6b4oCL4Z6U4Z6E4Z+S4Z6g4Z624Z6J4oCL4Z6b4Z6+4oCL4Z6i4Z+B4Z6A4Z+S4Z6a4Z6E4Z+L4oCL4Z6a4Z6U4Z6f4Z+L4oCL4Z6i4Z+S4Z6T4Z6A4Z+UIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+IuGegOGeu+GfhuKAi+GelOGehOGfkuGeoOGetuGeieKAi+GemOGfkuGeiuGehOGekeGfgOGejyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNsZWFyX2FsbF9ub3RpZmljYXRpb25zX3RleHQiIG1zZ2lkPSI4MTQxOTI4ODk3NzE0NjI4MjgiPiLhnp/hnpjhn5LhnqLhnrbhno/igIvhnpHhnrbhn4bhnoThnqLhnp/hn4siPC9zdHJpbmc+CkBAIC00NTAsNCArNDQ4LDI4IEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+IuGelOGevuGegOGelOGfiuGfkuGem+GevOGekuGevOGen+GerD8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX21lc3NhZ2UiIG1zZ2lkPSI5MTA2NTk1OTkwNzA4OTg1Mzg1Ij4i4Z6K4Z6+4Z6Y4Z+S4Z6U4Z644Z6X4Z+S4Z6H4Z624Z6U4Z+L4Z6A4Z+S4Z6P4Z624Z6a4Z6F4Z674Z6F4Z6a4Z6U4Z6f4Z+L4Z6i4Z+S4Z6T4Z6A4Z6H4Z624Z6Y4Z694Z6Z4Z6T4Z654Z6E4Z6Q4Z+B4Z6U4Z+S4Z6b4Z+B4Z6P4Z6a4Z6U4Z6f4Z+L4Z6i4Z+S4Z6T4Z6AIOGeouGfkuGek+GegOGej+GfkuGemuGevOGenOGej+GfguGelOGevuGegOGelOGfiuGfkuGem+GevOGekuGevOGen+Geh+GetuGemOGeu+Gek+Gen+Get+Gek+GflCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+IuGelOGevuGegCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX3RvcGljIiBtc2dpZD0iMzY0MTQwMzQ4OTMxODY1OTY2NiI+IuGeouGek+Geu+GenOGej+GfkuGej+GeheGfhuGeluGfhOGfh+GegOGetuGemuGeh+GevOGek+GeiuGfhuGejuGeueGehCA8eGxpZmY6ZyBpZD0iVE9QSUNfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b19hcHAiIG1zZ2lkPSIzNjMwMTY3ODM5Mzk4MTU5NjAiPiLhnqLhnpPhnrvhnpzhno/hn5Lhno/hnoXhn4bhnpbhn4Thn4fhnoDhnrbhnprhnofhnrzhnpPhnorhn4bhno7hnrnhnoThnpHhnrbhn4bhnoThnqLhnp/hn4vhnpbhnrjhnoDhnpjhn5LhnpjhnpzhnrfhnpLhnrjhnpPhn4Hhn4ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX2ltcG9ydGFuY2UiIG1zZ2lkPSI1MTk4NTc4OTg4OTc4MjM0MTYxIj4i4Z6U4Z624Z6T4Z6a4Z624Z6a4Z624Z+G4Z6EIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4i4Z6Y4Z634Z6T4Z6f4Z684Z6c4Z6f4Z+G4Z6B4Z624Z6T4Z+LIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9pbXBvcnRhbmNlIiBtc2dpZD0iODE5MjEwNzY4OTk5NTc0MjY1MyI+IuGen+GfhuGegeGetuGek+Gfi+GemOGekuGfkuGemeGemCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiLhnp/hn4bhnoHhnrbhnpPhn4vhnoHhn5Lhnpvhnrbhn4bhnoQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfaW1wb3J0YW5jZSIgbXNnaWQ9IjUwODkwMDU4NzI3MTk1NjM4OTQiPiLhnp/hn4bhnoHhnrbhnpPhn4vhnofhnrbhnpThnpPhn5LhnpHhnrbhnpPhn4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iMjM5NzE5MjY0MjY1Nzg3Mjg3MiI+IuGegOGeu+GfhuGelOGehOGfkuGeoOGetuGeieGegOGetuGemuGeh+GevOGek+GeiuGfhuGejuGeueGehOGekeGetuGfhuGehOGek+GfgeGfhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjQzODM1NjMyNjczNzA4NTk3MjUiPiLhnpThnoThn5LhnqDhnrbhnonhnp/hn5LhnoThnrbhno/hn4vhn5fhnpPhn4XhnpXhn5LhnpPhn4LhnoDhnoHhnrbhnoThnoDhn5Lhnprhn4ThnpjhnpThnonhn5LhnofhnrjhnpPhn4PhnoDhnrbhnprhnofhnrzhnpPhnorhn4bhno7hnrnhnoQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+IuGelOGehOGfkuGeoOGetuGeieGegOGetuGemuGeh+GevOGek+GeiuGfhuGejuGeueGehOGekeGetuGfhuGehOGek+GfgeGfh+Gen+GfkuGehOGetuGej+Gfi+GflyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4i4Z6U4Z6E4Z+S4Z6g4Z624Z6J4Z6T4Z+F4Z6V4Z+S4Z6T4Z+C4Z6A4Z6B4Z624Z6E4Z6b4Z6+4Z6U4Z6J4Z+S4Z6H4Z644Z6T4Z+D4Z6A4Z624Z6a4Z6H4Z684Z6T4Z6K4Z+G4Z6O4Z654Z6EIOGek+Get+GehOGelOGek+GfkuGem+GeuuGen+GfhuGeoeGfgeGehCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjUyMzY5ODcxNzE5MDQ3NTYxMzQiPiLhnpvhn4Thno/hnpThnoThn5LhnqDhnrbhnonhnpPhn4Xhnpvhnr7hnqLhn4HhnoDhn5LhnprhnoThn4sg4Z6T4Z634Z6E4Z6U4Z6T4Z+S4Z6b4Z664Z6f4Z+G4Z6h4Z+B4Z6EIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX21vcmVfc2V0dGluZ3MiIG1zZ2lkPSI4MTYzMDYyODMzOTY1NTM1NzEiPiLhnoDhnrbhnprhnoDhn4bhno7hno/hn4vhnoXhn5Lhnprhnr7hnpPhnpHhn4Dhno8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiLhnprhnr3hnoXhnprhnrbhnpvhn4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiLhnpbhno7hn4zhnpLhnpjhn5Lhnpjhno/hnrYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4i4Z6W4Z6O4Z+M4Z6W4Z+B4Z6b4Z6Z4Z6U4Z+LIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X2N1c3RvbSIgbXNnaWQ9IjM2NTU1NzY0OTIzMjIyOTg3MTMiPiLhnpbhno7hn4zhnpXhn5LhnpHhnrbhnpvhn4vhnoHhn5Lhnpvhnr3hnpMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiLhnpbhno7hn4zhnpjhnrfhnpPhnp/hn5LhnoLhnrbhnpvhn4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4i4Z6A4Z624Z6a4Z6A4Z+C4Z6f4Z6Y4Z+S4Z6a4Z694Z6b4Z6W4Z6O4Z+MIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Nob3dfcXMiIG1zZ2lkPSIxNzYzMjQ0MzU0Mzk5Mjc2Njc5Ij4i4Z6U4Z6E4Z+S4Z6g4Z624Z6J4Z6V4Z+S4Z6R4Z624Z+G4Z6E4Z6U4Z+S4Z6a4Z6i4Z6U4Z+L4Z6A4Z624Z6a4Z6A4Z+G4Z6O4Z6P4Z+L4Z6a4Z6g4Z+Q4Z6fIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiLhnpThnr7hnoDhnorhn4bhno7hnr7hnprhnoDhnrbhnprhnpXhn5Lhnpvhnrbhnp/hn4vhnpThn5Lhno/hnrzhnprhnpXhn5LhnpHhnrbhnpvhn4vhnoHhn5Lhnpvhnr3hnpMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9hcHBseSIgbXNnaWQ9IjkyMTI2MDIwMTI2NDEwMzQyODMiPiLhnqLhnpPhnrvhnpzhno/hn5Lhno8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfdGl0bGUiIG1zZ2lkPSI0NzQ2NjY2NTQ1NDgwNTM0NjYzIj4i4Z6U4Z6J4Z+S4Z6H4Z624Z6A4Z+L4Z6A4Z624Z6a4Z6A4Z+G4Z6O4Z6P4Z+LIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X21lc3NhZ2UiIG1zZ2lkPSI5MTE2MDAxMDY5Mzk3OTk2NjkxIj4i4Z6A4Z624Z6a4Z6A4Z+G4Z6O4Z6P4Z+L4Z6W4Z6O4Z+M4Z6Y4Z694Z6Z4Z6F4Z+G4Z6T4Z694Z6T4Z6i4Z624Z6F4Z6S4Z+S4Z6c4Z6+4Z6y4Z+S4Z6Z4Z6n4Z6U4Z6A4Z6a4Z6O4Z+N4Z6T4Z+B4Z+H4Z6Y4Z634Z6T4Z6i4Z624Z6F4Z6U4Z+S4Z6a4Z6+4Z6U4Z624Z6T4Z+UIOGen+GevOGemOGeheGeu+GehSDhnpnhnpvhn4vhnpbhn5Lhnprhnpgg4Z6K4Z6+4Z6Y4Z+S4Z6U4Z644Z6U4Z6J4Z+S4Z6H4Z624Z6A4Z+L4Z6A4Z624Z6a4Z6A4Z+G4Z6O4Z6P4Z+L4Z6W4Z6O4Z+M4Z6R4Z624Z+G4Z6E4Z6T4Z+B4Z+HIOGelOGevuGemOGet+Gek+GeiuGevOGeheGfkuGek+GfgeGfh+GekeGfgeGegOGetuGemuGegOGfhuGejuGej+Gfi+GekeGetuGfhuGehOGek+GfgeGfh+Gek+GeueGehOGegOGfhuGejuGej+Gfi+GeoeGevuGehOGenOGet+GeieGegOGfkuGek+Geu+GehOGemuGemeGfiOGeluGfgeGemyAxMCDhnpzhnrfhnpPhnrbhnpHhnrjhnpThnpPhn5LhnpHhnrbhnpThn4vhn5QiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMta24tcklOL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1rbi1ySU4vc3RyaW5ncy54bWwKaW5kZXggNmU3NmI2MS4uMjhiMmRlNSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1rbi1ySU4vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1rbi1ySU4vc3RyaW5ncy54bWwKQEAgLTMwMSw4ICszMDEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+IuCyueCzgeCyoeCzgeCyleCyvuCynyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IOCyquCzjeCysOCyvuCysOCyguCyreCyv+CyuOCysuCzgSDgsrjgsr7gsqbgs43gsq/gsrXgsr/gsrLgs43gsrIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zaG93X2hpc3RvcnlfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNzA2MjA4ODE5NjQ0OTc0NzI0NSI+IuCyh+CyqOCzjeCyqOCyt+CzjeCyn+CzgSI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciByZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0ICg2MzM3MTU1NjA4MDU1MDYyNDI5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCIgbXNnaWQ9IjYzMzcxNTU2MDgwNTUwNjI0MjkiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4LKH4LKo4LON4LKo4LK34LON4LKf4LOBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiLgsoXgsqHgs43gsqHgsrLgsr7gspfgsr8g4LK14LK/4LKt4LKc4LK/4LK44LK/4LKmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfdmVydGljYWwiIG1zZ2lkPSI5MDc1MjkyMjMzNjk2MTgwODEzIj4i4LKy4LKC4LKs4LK14LK+4LKX4LK/IOCyteCyv+CyreCynOCyv+CyuOCyv+CypiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2N1c3RvbSIgbXNnaWQ9IjQxNzc4Mzc1OTc1MTM3MDE5NDMiPiLgspXgsrjgs43gsp/gsq7gs40g4LK14LK/4LKt4LKc4LK/4LK44LK/4LKmIjwvc3RyaW5nPgpAQCAtMzY1LDcgKzM2NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+IuCyrOCzjeCyr+CyvuCyn+CysOCyvyDgsrDgspXgs43gsrfgspUg4LKG4LKo4LONIOCyhuCyl+Cyv+CypuCzhiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiLgspXgsr7gsrDgs43gsq/gspXgs43gsrfgsq7gsqTgs4Yg4LKu4LKk4LON4LKk4LOBIOCyueCyv+CyqOCzjeCyqOCzhuCysuCzhiDgsqHgs4fgsp/gsr7gsrXgsqjgs43gsqjgs4Eg4LKV4LKh4LK/4LKu4LOGIOCyruCyvuCyoeCzgeCypOCzjeCypOCypuCzhiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4i4LKs4LON4LKv4LK+4LKf4LKw4LK/IOCyieCys+Cyv+CypOCyvuCyr+CyteCyqOCzjeCyqOCzgSDgsobgsqvgs40g4LKu4LK+4LKh4LK/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IuCyteCyv+Cyt+Cyr+Cyl+Cys+CyqOCzjeCyqOCzgSDgsq7gsrDgs4bgsq7gsr7gsqHgsrLgsr7gspfgsr/gsqbgs4YiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+IuCyqOCyv+CyruCzjeCyriDgsqrgsrDgsqbgs4bgsq8g4LKu4LOH4LKy4LOGIOCyquCzjeCysOCypuCysOCzjeCytuCyv+CyuOCysuCyvuCyl+CzgeCytSDgso7gsrLgs43gsrLgsrXgsqjgs43gsqjgs4IgPHhsaWZmOmcgaWQ9IkFQUF9TRUVLSU5HX1BFUk1JU1NJT04iPiVzPC94bGlmZjpnPiDgsq/gs4Eg4LK44LOG4LKw4LOG4LK54LK/4LKh4LK/4LKv4LKy4LOBIOCyquCzjeCysOCyvuCysOCyguCyreCyv+CyuOCzgeCypOCzjeCypOCypuCzhi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX3JlbWVtYmVyX3RleHQiIG1zZ2lkPSIzMTAzNTEwODgyMTcyNzQ2NzUyIj4i4LKu4LKk4LON4LKk4LOK4LKu4LON4LKu4LOGIOCypOCzi+CysOCyv+CyuOCypuCyv+CysOCzgSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNsZWFyX2FsbF9ub3RpZmljYXRpb25zX3RleHQiIG1zZ2lkPSI4MTQxOTI4ODk3NzE0NjI4MjgiPiLgso7gsrLgs43gsrLgsrXgsqjgs43gsqjgs4Ig4LKk4LOG4LKw4LK14LOB4LKX4LOK4LKz4LK/4LK44LOBIjwvc3RyaW5nPgpAQCAtNDUwLDQgKzQ0OCwyOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiLgsqzgs43gsrLgs4Lgsp/gs4LgsqTgs40g4LKG4LKo4LONIOCyruCyvuCyoeCzgeCyteCzgeCypuCzhz8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX21lc3NhZ2UiIG1zZ2lkPSI5MTA2NTk1OTkwNzA4OTg1Mzg1Ij4i4LKo4LK/4LKu4LON4LKuIOCyleCzgOCyrOCzi+CysOCzjeCyoeCzjSDgsoXgsqjgs43gsqjgs4Eg4LKf4LON4LKv4LK+4LKs4LON4LKy4LOG4LKf4LON4oCM4LKX4LOGIOCyuOCyguCyquCysOCzjeCyleCyv+CyuOCysuCzgSwg4LKo4LOA4LK14LOBIOCyruCziuCypuCysuCzgSDgsqzgs43gsrLgs4Lgsp/gs4LgsqTgs40g4LKG4LKo4LONIOCyruCyvuCyoeCyrOCzh+CyleCyvuCyl+CzgeCypOCzjeCypOCypuCzhi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiLgsobgsqjgs40g4LKu4LK+4LKh4LOBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4iPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+IOCyheCyp+Cyv+CyuOCzguCymuCyqOCzhuCyl+Cys+Cyv+Cyl+CzhiDgsoXgsqjgs43gsrXgsq/gsr/gsrjgsr8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b19hcHAiIG1zZ2lkPSIzNjMwMTY3ODM5Mzk4MTU5NjAiPiLgsogg4LKF4LKq4LON4LKy4LK/4LKV4LOH4LK24LKo4LON4oCM4LKo4LK/4LKC4LKmIOCyjuCysuCzjeCysuCyviDgsoXgsqfgsr/gsrjgs4Lgsprgsqjgs4bgspfgsrPgsr/gspfgs4Yg4LKF4LKo4LON4LK14LKv4LK/4LK44LK/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IuCyqOCyv+CysOCzjeCyrOCyguCyp+Cyv+CyuOCysuCyvuCyl+Cyv+CypuCzhiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbXBvcnRhbmNlIiBtc2dpZD0iNDEwOTkyOTk4NjEwNzE0NzkzMCI+IuCyleCyoeCyv+CyruCzhiDgsqrgs43gsrDgsr7gsq7gs4Hgspbgs43gsq/gsqTgs4YiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4i4LK44LK+4LKu4LK+4LKo4LON4LKvIOCyquCzjeCysOCyvuCyruCzgeCyluCzjeCyr+CypOCzhiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiLgsongsqjgs43gsqjgsqQg4LKq4LON4LKw4LK+4LKu4LOB4LKW4LON4LKv4LKk4LOGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4i4LKk4LOB4LKw4LON4LKk4LOBIOCyquCzjeCysOCyvuCyruCzgeCyluCzjeCyr+CypOCzhiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4i4LKIIOCyheCyp+Cyv+CyuOCzguCymuCyqOCzhuCyl+Cys+CyqOCzjeCyqOCzgSDgso7gsoLgsqbgsr/gspfgs4Ig4LKk4LOL4LKw4LK/4LK44LKs4LOH4LKhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+IuCyheCyp+Cyv+CyuOCzguCymuCyqOCzhiDgsqrgsp/gs43gsp/gsr/gsq8g4LKV4LOG4LKz4LKt4LK+4LKX4LKm4LKy4LON4LKy4LK/IOCyuOCzjeCypeCyrOCzjeCyp+CyteCyvuCyl+CyvyDgsqTgs4vgsrDgsr/gsrjgs4EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+IuCyiCDgsoXgsqfgsr/gsrjgs4Lgsprgsqjgs4bgspfgsrPgsqjgs43gsqjgs4Eg4LK44LON4LKl4LKs4LON4LKn4LK14LK+4LKX4LK/IOCypOCzi+CysOCyv+CyuOCzgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4i4LKF4LKn4LK/4LK44LOC4LKa4LKo4LOG4LKX4LKzIOCyquCyn+CzjeCyn+Cyv+CyryDgsq7gs4fgsrLgs43gsq3gsr7gspfgsqbgsrLgs43gsrLgsr8g4LKk4LOL4LKw4LK/4LK44LOBIOCyruCypOCzjeCypOCzgSDgsqfgs43gsrXgsqjgsr8g4LKu4LK+4LKh4LOBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iNTIzNjk4NzE3MTkwNDc1NjEzNCI+IuCyquCysOCypuCzhuCyr+CyqOCzjeCyqOCzgSDgsrXgs4DgspXgs43gsrfgsr/gsrjgsr8g4LKu4LKk4LON4LKk4LOBIOCyp+CzjeCyteCyqOCyvyDgsq7gsr7gsqHgs4EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+IuCyueCzhuCymuCzjeCymuCyv+CyqCDgsrjgs4bgsp/gs43gsp/gsr/gsoLgspfgs43igIzgspfgsrPgs4EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiLgsq7gs4Hgspfgsr/gsqbgsr/gsqbgs4YiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiLgsrjgsr7gsq7gsr7gsqjgs43gsq8g4LKs4LKj4LON4LKj4LKX4LKz4LOBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+IuCysOCyvuCypOCzjeCysOCyvyDgsqzgsqPgs43gsqPgspfgsrPgs4EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+IuCyleCyuOCzjeCyn+CyruCzjSDgsqzgsqPgs43gsqPgspfgsrPgs4EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiLgsoXgsqrgsrDgsr/gsprgsr/gsqQg4LKs4LKj4LON4LKj4LKX4LKz4LOBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+IuCyrOCyo+CzjeCyoyDgsqzgsqbgsrLgsr7gsrXgsqPgs4YiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfc2hvd19xcyIgbXNnaWQ9IjE3NjMyNDQzNTQzOTkyNzY2NzkiPiLgsqTgs43gsrXgsrDgsr/gsqQg4LK44LOG4LKf4LON4LKf4LK/4LKC4LKX4LON4oCM4LKX4LKzIOCyn+CziOCysuCzjSDgsqTgs4vgsrDgsr/gsrjgs4EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9lbmFibGVfY3VzdG9tIiBtc2dpZD0iNjcyOTAwMTMwODIxNzM0NzUwMSI+IuCyleCyuOCzjeCyn+CyruCzjSDgsqrgsrDgsr/gsrXgsrDgs43gsqTgsqjgs4bgsq/gsqjgs43gsqjgs4Eg4LK44LKV4LON4LKw4LK/4LKv4LKX4LOK4LKz4LK/4LK44LK/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4i4LKF4LKo4LON4LK14LKv4LK/4LK44LOBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+IuCyuOCzhuCyn+CzjeCyn+Cyv+CyguCyl+CzjeKAjOCyl+Cys+CyqOCzjeCyqOCzgSDgspbgsprgsr/gsqTgsqrgsqHgsr/gsrjgsr8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfbWVzc2FnZSIgbXNnaWQ9IjkxMTYwMDEwNjkzOTc5OTY2OTEiPiLgspXgs4bgsrLgsrXgs4Eg4LKs4LKj4LON4LKjIOCyuOCzhuCyn+CzjeCyn+Cyv+CyguCyl+CzjeKAjOCyl+Cys+CzgSDgsogg4LK44LK+4LKn4LKo4LK14LKo4LON4LKo4LOBIOCyheCyqOCzgeCyquCyr+CzgeCyleCzjeCypOCyl+CziuCys+Cyv+CyuOCyrOCyueCzgeCypuCzgS4g4LKIIOCyrOCyo+CzjeCyoyDgsrjgs4bgsp/gs43gsp/gsr/gsoLgspfgs43igIzgspfgsrPgsqjgs43gsqjgs4Eg4LKW4LKa4LK/4LKk4LKq4LKh4LK/4LK44LKy4LOBIOCyuOCysOCyvyDgspXgs43gsrLgsr/gspXgs40g4LKu4LK+4LKh4LK/LCDgsofgsrLgs43gsrLgsrXgsr7gsqbgsrDgs4Yg4LKIIOCyuOCzhuCyn+CzjeCyn+Cyv+CyguCyl+CzjeKAjOCyl+Cys+CyqOCzjeCyqOCzgSAxMCDgsrjgs4bgspXgs4bgsoLgsqHgs4HgspfgsrMg4LKo4LKC4LKk4LKwIOCyruCysOCzgeCyueCziuCyguCypuCyv+CyuOCyvy4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMta28vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWtvL3N0cmluZ3MueG1sCmluZGV4IDA0ZmJhNTIuLjExMDM3NmYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMta28vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1rby9zdHJpbmdzLnhtbApAQCAtMzAxLDggKzMwMSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4i6rKA7IOJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sYXVuY2hfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjI5NjkyODc4MzgxMjA1NTA1MDYiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz7snYQo66W8KSDsi5zsnpHtlaAg7IiYIOyXhuyKteuLiOuLpC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4i642U67O06riwIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQgKDYzMzcxNTU2MDgwNTUwNjI0MjkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPuqwnCDrjZTrs7TquLAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9ob3Jpem9udGFsIiBtc2dpZD0iODg0ODUxNDQ3NDU0MzQyNzMzMiI+IuyImO2PiSDrtoTtlaAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF92ZXJ0aWNhbCIgbXNnaWQ9IjkwNzUyOTIyMzM2OTYxODA4MTMiPiLsiJjsp4Eg67aE7ZWgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfY3VzdG9tIiBtc2dpZD0iNDE3NzgzNzU5NzUxMzcwMTk0MyI+Iuunnuy2pCDrtoTtlaAiPC9zdHJpbmc+CkBAIC0zNjUsNyArMzY0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjM3OTE4NzI2NzUwOTU1ODU5Ij4i67Cw7YSw66asIOyEuOydtOuyhCDsgqzsmqkg7KSRIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+IuyEseuKpSDrsI8g67Cx6re465287Jq065OcIOuNsOydtO2EsOulvCDspITsnoXri4jri6QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiLrsLDthLDrpqwg7KCI7JW9IOq4sOuKpSDsgqzsmqkg7KSR7KeAIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IuyIqOqyqOynhCDsvZjthZDsuKAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+Ijx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz7sl5DshJwg7ZmU66m07JeQIO2RnOyLnOuQnCDrqqjrk6Ag6rKD7J2EIOy6oeyymO2VmOq4sCDsi5zsnpHtlanri4jri6QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+IuuLpOyLnCDtkZzsi5wg7JWI7ZWoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+IuuqqOuRkCDsp4DsmrDquLAiPC9zdHJpbmc+CkBAIC00NTAsNCArNDQ4LDI4IEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+Iuu4lOujqO2IrOyKpOulvCDsvJzsi5zqsqDsirXri4jquYw/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9tZXNzYWdlIiBtc2dpZD0iOTEwNjU5NTk5MDcwODk4NTM4NSI+Iu2CpOuztOuTnOulvCDtg5zruJTrpr/sl5Ag7Jew6rKw7ZWY66Ck66m0IOuovOyggCDruJTro6jtiKzsiqTrpbwg7Lyc7JW8IO2VqeuLiOuLpC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiLsgqzsmqkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiI8eGxpZmY6ZyBpZD0iVE9QSUNfTkFNRSI+JTEkczwveGxpZmY6Zz4g7JWM66a87JeQIOyggeyaqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+IuydtCDslbHsnZgg7KCE7LK0IOyVjOumvOyXkCDsoIHsmqkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX2ltcG9ydGFuY2UiIG1zZ2lkPSI1MTk4NTc4OTg4OTc4MjM0MTYxIj4i7LCo64uo65CoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4i7KSR7JqU64+EIOuCruydjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiLspJHsmpTrj4Qg67O07Ya1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+IuykkeyalOuPhCDrhpLsnYwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfaW1wb3J0YW5jZSIgbXNnaWQ9IjUwODkwMDU4NzI3MTk1NjM4OTQiPiLspJHsmpTrj4Qg6ri06riJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjIzOTcxOTI2NDI2NTc4NzI4NzIiPiLslYzrprwg64uk7IucIO2RnOyLnCDslYjtlagiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4i7JWM66a8IOuqqeuhnSDtlZjri6jsl5Ag66y07J2M7Jy866GcIO2RnOyLnCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI0OTI2NTI5NjE1OTIwNjEwODE3Ij4i66y07J2M7Jy866GcIOyVjOumvCDtkZzsi5wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+IuyVjOumvCDrqqnroZ0g7IOB64uo7JeQIO2RnOyLnO2VmOqzoCDshozrpqzroZwg7JWM66a8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iNTIzNjk4NzE3MTkwNDc1NjEzNCI+Iu2ZlOuptOyXkCDtkZzsi5ztlZjqs6Ag7IaM66as66GcIOyVjOumvCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9tb3JlX3NldHRpbmdzIiBtc2dpZD0iODE2MzA2MjgzMzk2NTUzNTcxIj4i7ISk7KCVIOuNlOuztOq4sCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9kb25lIiBtc2dpZD0iNTI3OTQyNjA0NzI3MzkzMDE3NSI+IuyZhOujjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9ub25lIiBtc2dpZD0iMjEyMTk1NzkyNjA0MDU0MzE0OCI+IuydvOuwmCDsg4nsg4EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4i7JW86rCEIOyDieyDgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4i66ee7LakIOyDieyDgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF91bmtub3duIiBtc2dpZD0iMjcwOTIwMjEwNDI1NjI2NTEwNyI+IuyVjCDsiJgg7JeG64qUIOyDieyDgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3RyYW5zZm9ybSIgbXNnaWQ9IjY5ODU0NjA0MDgwNzkwODYwOTAiPiLsg4nsg4Eg7IiY7KCVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Nob3dfcXMiIG1zZ2lkPSIxNzYzMjQ0MzU0Mzk5Mjc2Njc5Ij4i67mg66W4IOyEpOyglSDtg4Dsnbwg7ZGc7IucIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiLrp57stqQg67OA7ZmYIOyCrOyaqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+IuyggeyaqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiLshKTsoJUg7ZmV7J24Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X21lc3NhZ2UiIG1zZ2lkPSI5MTE2MDAxMDY5Mzk3OTk2NjkxIj4i7J2867aAIOyDieyDgSDshKTsoJXsnLzroZwg7J247ZW0IOydtCDquLDquLDrpbwg7IKs7Jqp7ZWY7KeAIOuqu+2VoCDsiJgg7J6I7Iq164uI64ukLiDtmZXsnbjsnYQg7YG066at7ZWY7JesIOydtOufrO2VnCDsg4nsg4Eg7ISk7KCV7J2EIO2ZleyduO2VmOyngCDslYrsnLzrqbQgMTDstIgg7ZuE7JeQIOyEpOygleydtCDstIjquLDtmZTrkKnri4jri6QuIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWt5LXJLRy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMta3ktcktHL3N0cmluZ3MueG1sCmluZGV4IDI1NDg0M2MuLmVlMmVmNWQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMta3ktcktHL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMta3ktcktHL3N0cmluZ3MueG1sCkBAIC0zMDEsOCArMzAxLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2VhcmNoX2Jhcl9sYWJlbCIgbXNnaWQ9IjgwNzQ5OTc0MDAxODc4MzY2NzciPiLQuNC30LTTqdOpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sYXVuY2hfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjI5NjkyODc4MzgxMjA1NTA1MDYiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g0LHQsNGI0YLQsNC5INCw0LvQs9Cw0L0g0LbQvtC6LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2hvd19oaXN0b3J5X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjcwNjIwODgxOTY0NDk3NDcyNDUiPiLQlNCw0LPRiyI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciByZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0ICg2MzM3MTU1NjA4MDU1MDYyNDI5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCIgbXNnaWQ9IjYzMzcxNTU2MDgwNTUwNjI0MjkiPiLQlNCw0LPRiyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9ob3Jpem9udGFsIiBtc2dpZD0iODg0ODUxNDQ3NDU0MzQyNzMzMiI+ItCi0YPRg9GA0LDRgdGL0L3QsNC9INCx06nQu9Kv0q8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF92ZXJ0aWNhbCIgbXNnaWQ9IjkwNzUyOTIyMzM2OTYxODA4MTMiPiLQotC40LPQuNC90LXQvSDQsdOp0LvSr9KvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfY3VzdG9tIiBtc2dpZD0iNDE3NzgzNzU5NzUxMzcwMTk0MyI+ItCr0qPQs9Cw0LnQu9Cw0YjRgtGL0YDRi9C70LPQsNC9INCx06nQu9Kv0q8iPC9zdHJpbmc+CkBAIC0zNjUsNyArMzY0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjM3OTE4NzI2NzUwOTU1ODU5Ij4i0JHQsNGC0LDRgNC10Y/QvdGLINKv0L3TqdC80LTTqdCz0q/RhyDQutKv0LnQs9Kv0LfSr9C70LTSryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiLQmNGI0YLQuNC9INC80LDQudC90LDQv9GC0YPRg9C70YPQs9GD0L0g0L3QsNGH0LDRgNC70LDRgtGL0L8sINGE0L7QvdC00YPQuiDQtNCw0LnRi9C90LTQsNGA0LTRiyDRh9C10LrRgtC10LnRgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4i0JHQsNGC0LDRgNC10Y/QvdGL0L0g0LrRg9Cx0LDRgtGL0L0g0q/QvdOp0LzQtNOp0LPSr9GH0YLSryDTqdGH0q/RgNKv0L8g0LrQvtGO0YMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4i0JzQsNC30LzRg9C90LTQsNGAINC20LDRiNGL0YDRi9C70LPQsNC9Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiI8eGxpZmY6ZyBpZD0iQVBQX1NFRUtJTkdfUEVSTUlTU0lPTiI+JXM8L3hsaWZmOmc+INGN0LrRgNCw0L3Qs9CwINGH0YvQutC60LDQvSDQvdC10YDRgdC10L3QuNC9INCx0LDQsNGA0YvQvSDRgdKv0YDTqdGC0LrTqSDRgtCw0YDRgtCwINCx0LDRiNGC0LDQudGCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fcmVtZW1iZXJfdGV4dCIgbXNnaWQ9IjMxMDM1MTA4ODIxNzI3NDY3NTIiPiLQrdC60LjQvdGH0Lgg0LrTqdGA0YHTqdGC0q/Qu9Cx06nRgdKv0L0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4i0JHQsNGA0LTRi9Cz0YvQvSDRgtCw0LfQsNC70LDQvyDRgdCw0LvRg9GDIjwvc3RyaW5nPgpAQCAtNDUwLDQgKzQ0OCwyOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiJCbHVldG9vdGgg0LrSr9C50LPSr9C30q/Qu9GB0q/QvdCx0q8/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9tZXNzYWdlIiBtc2dpZD0iOTEwNjU5NTk5MDcwODk4NTM4NSI+ItCR0LDRgdC60YvRh9GC0L7QsdGD0qPRg9C30LTRgyDQv9C70LDQvdGI0LXRgtC40qPQuNC30LPQtSDRgtGD0YLQsNGI0YLRi9GA0YPRgyDSr9GH0q/QvSwg0LDQtNC10LPQtdC90LTQtSBCbHVldG9vdGhcJ9GC0YMg0LrSr9C50LPSr9C30q/RiNKv0qPSr9C3INC60LXRgNC10LouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9jb25maXJtYXRpb25fb2siIG1zZ2lkPSI2MjU4MDc0MjUwOTQ4MzA5NzE1Ij4i0JrSr9C50LPSr9C30q/SryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX3RvcGljIiBtc2dpZD0iMzY0MTQwMzQ4OTMxODY1OTY2NiI+Ijx4bGlmZjpnIGlkPSJUT1BJQ19OQU1FIj4lMSRzPC94bGlmZjpnPiDRjdGB0LrQtdGA0YLQvNC10LvQtdGA0LjQvdC1INC60L7Qu9C00L7QvdGD0LvRgdGD0L0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b19hcHAiIG1zZ2lkPSIzNjMwMTY3ODM5Mzk4MTU5NjAiPiLQo9GI0YPQuyDQutC+0LvQtNC+0L3QvNC+0LTQvtC9INCw0LvRi9C90LPQsNC9INCx0LDRgNC00YvQuiDRjdGB0LrQtdGA0YLQvNC10LvQtdGA0LPQtSDQutC+0LvQtNC+0L3Rg9C70YHRg9C9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+ItCR06nQs9Op0YLRgtOp0LvQs9Op0L0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW1wb3J0YW5jZSIgbXNnaWQ9IjQxMDk5Mjk5ODYxMDcxNDc5MzAiPiLQnNCw0LDQvdC40LvSr9Kv0LvSr9Cz0q8g0YLTqdC806nQvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiLQnNCw0LDQvdC40LvSr9Kv0LvSr9Cz0q8g0L7RgNGC0L7Rh9C+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+ItCc0LDQsNC90LjQu9Kv0q/Qu9Kv0LPSryDQttC+0LPQvtGA0YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfaW1wb3J0YW5jZSIgbXNnaWQ9IjUwODkwMDU4NzI3MTk1NjM4OTQiPiLQnNCw0LDQvdC40LvSr9Kv0LvSr9Cz0q8g0YjQsNGI0YvQu9GL0YgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iMjM5NzE5MjY0MjY1Nzg3Mjg3MiI+ItCR0YPQuyDRjdGB0LrQtdGA0YLQvNC10LvQtdGAINGN0Ycg0LrQsNGH0LDQvSDQutOp0YDRgdOp0YLSr9C70LHTqdGB0q/QvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjQzODM1NjMyNjczNzA4NTk3MjUiPiLQrdGB0LrQtdGA0YLQvNC10LvQtdGAINGC0LjQt9C80LXRgdC40L3QuNC9INGN0qMg0YvQu9C00YvQudGL0L3QtNCwINKv0L3RgdKv0Lcg0LrTqdGA0YHTqdGC0q/Qu9GB0q/QvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI0OTI2NTI5NjE1OTIwNjEwODE3Ij4i0JHRg9C7INGN0YHQutC10YDRgtC80LXQu9C10YAg0q/QvdGB0q/QtyDQutOp0YDRgdOp0YLSr9C70YHSr9C9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMyMjI2ODAxMzY2MTI0MDgyMjMiPiLQrdGB0LrQtdGA0YLQvNC10LvQtdGAINGC0LjQt9C80LXRgdC40L3QuNC9INGN0qMg0LbQvtCz0L7RgNGD0YHRg9C90LTQsCDSr9C9INGH0YvQs9Cw0YDRi9C/INC606nRgNGB06nRgtKv0LvRgdKv0L0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4i0q7QvSDQvNC10L3QtdC9INC60L7RiNGC0L7Qu9GD0L8sINGN0LrRgNCw0L3Qs9CwINGH0YvQs9Cw0YDRi9C70YHRi9C9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX21vcmVfc2V0dGluZ3MiIG1zZ2lkPSI4MTYzMDYyODMzOTY1NTM1NzEiPiLQlNCw0LPRiyDQttOp0L3QtNOp06nQu9Op0YAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiLQkNGC0LrQsNGA0YvQu9C00YsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiLQmtCw0LTQuNC80LrQuCDRgtKv0YHRgtOp0YAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4i0KLSr9C90LrSryDRgtKv0YHRgtOp0YAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+ItCr0qPQs9Cw0LnQu9Cw0YjRgtGL0YDRi9C70LPQsNC9INGC0q/RgdGC06nRgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF91bmtub3duIiBtc2dpZD0iMjcwOTIwMjEwNDI1NjI2NTEwNyI+ItCR0LXQu9Cz0LjRgdC40Lcg0YLSr9GB0YLTqdGAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+ItCi0q/RgdKv0L0g06nQt9Cz06nRgNGC0q/SryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+ItCr0LrRh9Cw0Lwg0LbTqdC90LTTqdOp0LvTqdGAINGC0LDQutGC0LDRgdGL0L0g0LrTqdGA0YHTqdGC0q/SryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4i0KvSo9Cz0LDQudC70LDRiNGC0YvRgNGL0LvQs9Cw0L0g06nQt9Cz06nRgNGC0q/Sr9C90q8g0LjRiNGC0LXRgtKv0q8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9hcHBseSIgbXNnaWQ9IjkyMTI2MDIwMTI2NDEwMzQyODMiPiLQmtC+0LvQtNC+0L3Rg9GDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+ItCW06nQvdC006nTqdC706nRgNC00q8g0YvRgNCw0YHRgtC+0L4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfbWVzc2FnZSIgbXNnaWQ9IjkxMTYwMDEwNjkzOTc5OTY2OTEiPiLQkNC50YDRi9C8INGC0q/RgSDQttOp0L3QtNOp06nQu9Op0YDSryDQsdGD0Lsg0YLSr9C30LzTqdC60YLSryDQutC+0LvQtNC+0L3Rg9C70LPRg9GBINC60YvQu9GL0L8g0LrQvtGO0YjRgyDQvNKv0LzQutKv0L0uINCR0YPQuyDRgtKv0YEg0LbTqdC90LTTqdOp0LvTqdGA0q/QvSDRi9GA0LDRgdGC0L7QviDSr9GH0q/QvSBPSyDQsdCw0YHQutGL0YfRi9C9INGH0YvQutGL0LvQtNCw0YLRi9Kj0YvQtywg0LHQvtC70LHQvtGB0L4g0LHRg9C7INC206nQvdC006nTqdC706nRgCAxMCDRgdC10LrRg9C90LTQtNCw0L0g0LrQuNC50LjQvSDQsdCw0YjRgtCw0L/QutGLINCw0LHQsNC70YvQvdCwINC60LXQu9GC0LjRgNC40LvQtdGCLiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1sYW5kL2RpbWVucy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWxhbmQvZGltZW5zLnhtbAppbmRleCA0NTYzOTFkLi5jNzVhODlmIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWxhbmQvZGltZW5zLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWxhbmQvZGltZW5zLnhtbApAQCAtMjQsNSArMjQsNSBAQAogICAgIDxpbnRlZ2VyIG5hbWU9Im5vdGlmaWNhdGlvbl9wYW5lbF9sYXlvdXRfZ3Jhdml0eSI+QGludGVnZXIvc3RhbmRhcmRfbm90aWZpY2F0aW9uX3BhbmVsX2xheW91dF9ncmF2aXR5PC9pbnRlZ2VyPgogCiAgICAgPGRpbWVuIG5hbWU9ImRvY2tlZF9kaXZpZGVyX2hhbmRsZV93aWR0aCI+MmRwPC9kaW1lbj4KLSAgICA8ZGltZW4gbmFtZT0iZG9ja2VkX2RpdmlkZXJfaGFuZGxlX2hlaWdodCI+MjRkcDwvZGltZW4+CisgICAgPGRpbWVuIG5hbWU9ImRvY2tlZF9kaXZpZGVyX2hhbmRsZV9oZWlnaHQiPjE2ZHA8L2RpbWVuPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWxhbmQvc3R5bGVzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbGFuZC9zdHlsZXMueG1sCmluZGV4IDk2ZDhmYjguLmI3MTFmYWEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbGFuZC9zdHlsZXMueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbGFuZC9zdHlsZXMueG1sCkBAIC0yMCw3ICsyMCw3IEBACiAgICAgPC9zdHlsZT4KIAogICAgIDxzdHlsZSBuYW1lPSJEb2NrZWREaXZpZGVyQmFja2dyb3VuZCI+Ci0gICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6bGF5b3V0X3dpZHRoIj4xMmRwPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmxheW91dF93aWR0aCI+MTBkcDwvaXRlbT4KICAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpsYXlvdXRfaGVpZ2h0Ij5tYXRjaF9wYXJlbnQ8L2l0ZW0+CiAgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6bGF5b3V0X2dyYXZpdHkiPmNlbnRlcl9ob3Jpem9udGFsPC9pdGVtPgogICAgIDwvc3R5bGU+CkBAIC0yOCw3ICsyOCw3IEBACiAgICAgPHN0eWxlIG5hbWU9IkRvY2tlZERpdmlkZXJIYW5kbGUiPgogICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmxheW91dF9ncmF2aXR5Ij5jZW50ZXJfdmVydGljYWw8L2l0ZW0+CiAgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6bGF5b3V0X3dpZHRoIj40OGRwPC9pdGVtPgotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmxheW91dF9oZWlnaHQiPjY0ZHA8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6bGF5b3V0X2hlaWdodCI+OTZkcDwvaXRlbT4KICAgICA8L3N0eWxlPgogCiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbG8tckxBL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1sby1yTEEvc3RyaW5ncy54bWwKaW5kZXggOTFhZWUxYy4uZWQxMDNlYSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1sby1yTEEvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1sby1yTEEvc3RyaW5ncy54bWwKQEAgLTMwMSw4ICszMDEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+IuC6iuC6reC6geC6q+C6siI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4i4Lqa4LuN4LuI4oCL4Lqq4Lqy4oCL4Lqh4Lqy4LqU4oCL4LuA4Lql4Lq14LuI4LqhIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDgu4TgupTgu4kuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zaG93X2hpc3RvcnlfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNzA2MjA4ODE5NjQ0OTc0NzI0NSI+IuC7gOC6nuC6teC7iOC6oeC7gOC6leC6teC6oSI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciByZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0ICg2MzM3MTU1NjA4MDU1MDYyNDI5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCIgbXNnaWQ9IjYzMzcxNTU2MDgwNTUwNjI0MjkiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4LuA4Lqe4Lq14LuI4Lqh4LuA4LqV4Lq14LqhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiLguoHgurLgupnigIvgu4Hguo3guoHigIvguqXguqfguofigIvguoLguqfgurLguociPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF92ZXJ0aWNhbCIgbXNnaWQ9IjkwNzUyOTIyMzM2OTYxODA4MTMiPiLguoHgurLgupnigIvgu4Hguo3guoHigIvguqXguqfguofigIvgupXgurHgu4nguociPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4i4LqB4Lqy4LqZ4oCL4LuB4LqN4LqB4oCL4LqB4Lqz4oCL4LqZ4Lq74LqU4oCL4LuA4Lqt4LqHIjwvc3RyaW5nPgpAQCAtMzY1LDcgKzM2NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+IuC7gOC6m+C6teC6lOKAi+C7g+C6iuC7ieKAi+C7guC6leKAi+C6m+C6sOC6ouC6seC6lOKAi+C7geC6muC6seC6lOC7gOC6leC6teC6o+C6teKAi+C7geC6peC7ieC6pyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiLguqvgurzgurjgupTigIvgupvgurDigIvguqrgurTigIvgupfgurTigIvgup7gurLguprigIvgu4HguqXgurDigIvguoHgurLgupnigIvgupngurPigIvgu4Pguorgu4nigIvguoLgu43gu4nigIvguqHgurngupnigIvgup7gurfgu4ngupnguqvgurzgurHguociPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl9hY3Rpb25fdGV4dCIgbXNnaWQ9IjEwOTE1ODY1ODIzODExMDM4MiI+IuC6m+C6tOC6lOKAi+C7guC6leKAi+C6m+C6sOKAi+C6ouC6seC6lOKAi+C7geC6muC6seC6lOKAi+C7gOC6leC6teKAi+C6o+C6tSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLgu4Dgupngurfgu4nguq3guqvgurLigIvgupbgurfguoHigIvgu4Dguorgurfgu4jguq3guofigIvgu4Tguqfgu4kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+Ijx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4g4oCL4LqI4Lqw4oCL4LuA4Lql4Lq14LuI4Lqh4oCL4Lqa4Lqx4LqZ4oCL4LqX4Lq24LqB4oCL4LqX4Lq44LqB4oCL4Lqi4LuI4Lqy4LqH4oCL4LqX4Lq14LuI4oCL4Lqq4Lqw4oCL4LuB4LqU4LqH4oCL4Lqc4Lq74LqZ4oCL4LuD4LqZ4oCL4Luc4LuJ4Lqy4oCL4LqI4LuN4oCL4LqX4LuI4Lqy4LqZLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fcmVtZW1iZXJfdGV4dCIgbXNnaWQ9IjMxMDM1MTA4ODIxNzI3NDY3NTIiPiLguprgu43gu4jigIvgupXgu4nguq3guofigIvguqrgurDigIvgu4HgupTguofigIvguq3gurXguoEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4i4Lql4Lq24Lqa4Lql4LuJ4Lqy4LqH4LqX4Lqx4LqH4Lud4Lq74LqUIjwvc3RyaW5nPgpAQCAtNDUwLDQgKzQ0OCwyOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiLgu4DgupvgurXgupTigIvgu4Pguorgu4kgQmx1ZXRvb3RoIOC6muC7jeC7iD8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX21lc3NhZ2UiIG1zZ2lkPSI5MTA2NTk1OTkwNzA4OTg1Mzg1Ij4i4LuA4Lqe4Lq34LuI4Lqt4oCL4LuA4LqK4Lq34LuI4Lqt4Lqh4oCL4LqV4LuN4LuI4oCL4LuB4Lqb4LuJ4LqZ4oCL4Lqe4Lq04Lqh4oCL4LqC4Lqt4LqH4oCL4LqX4LuI4Lqy4LqZ4oCL4LqB4Lqx4Lqa4oCL4LuB4LqX4Lqx4Lqa4oCL4LuA4Lql4Lqx4LqU4oCL4LqC4Lqt4LqH4oCL4LqX4LuI4Lqy4LqZLCDguoHgu4jguq3gupnigIvguq3gurfgu4jgupnigIvgu53gurvgupTigIvgupfgu4jgurLgupnigIvgupXgu4nguq3guofigIvgu4DgupvgurXgupQgQmx1ZXRvb3RoLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+IuC7gOC6m+C6teC6lOKAiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX3RvcGljIiBtc2dpZD0iMzY0MTQwMzQ4OTMxODY1OTY2NiI+IuC6meC6s+C7g+C6iuC7ieC6geC6seC6muC6geC6suC6meC7geC6iOC7ieC6h+C7gOC6leC6t+C6reC6mSA8eGxpZmY6ZyBpZD0iVE9QSUNfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b19hcHAiIG1zZ2lkPSIzNjMwMTY3ODM5Mzk4MTU5NjAiPiLgupngurPgu4Pguorgu4nguoHgurHguprgupfgurjguoHguoHgurLgupngu4Hguojgu4nguofgu4DgupXgurfguq3gupnguojgurLguoHgu4Hguq3gurHguprgupngurXgu4kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX2ltcG9ydGFuY2UiIG1zZ2lkPSI1MTk4NTc4OTg4OTc4MjM0MTYxIj4i4Lqa4Lql4Lqx4Lqt4LqB4LuE4Lqn4LuJ4oCL4LuB4Lql4LuJ4LqnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4i4LqE4Lqn4Lqy4Lqh4oCL4Lqq4LuN4Lqy4oCL4LqE4Lqx4LqZ4oCL4LqV4LuN4LuI4LqyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9pbXBvcnRhbmNlIiBtc2dpZD0iODE5MjEwNzY4OTk5NTc0MjY1MyI+IuC6hOC6p+C6suC6oeC6quC6s+C6hOC6seC6meC6m+C6u+C6geC6geC6sOC6leC6tCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiLguoTguqfgurLguqHigIvguqrgu43gurLigIvguoTgurHgupnigIvguqrgurnguociPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfaW1wb3J0YW5jZSIgbXNnaWQ9IjUwODkwMDU4NzI3MTk1NjM4OTQiPiLguoTguqfgurLguqHigIvguqrgu43gurLigIvguoTgurHgupnigIvguq7gurXguprigIvgupTgu4jguqfgupkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iMjM5NzE5MjY0MjY1Nzg3Mjg3MiI+IuC6ouC7iOC6suKAi+C6quC6sOKAi+C7geC6lOC6h+KAi+C6geC6suC6meKAi+C7geC6iOC7ieC6h+KAi+C7gOC6leC6t+C6reC6meKAi+C7gOC6q+C6vOC6u+C7iOC6suKAi+C6meC6teC7iSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjQzODM1NjMyNjczNzA4NTk3MjUiPiLguqrgurDgu4HgupTguofguqLgurngu4jguqrgu4jguqfgupnguqXgurjgu4jguqHguoLguq3guofguqXgurLguo3guoHgurLgupngu4Hguojgu4nguofgu4DgupXgurfguq3gupngu4HguprguprguqHgurXguprgu43gu4jguqrgur3guociPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+IuC6quC6sOC7geC6lOC6h+C6geC6suC6meC7geC6iOC7ieC6h+C7gOC6leC6t+C6reC6meC7gOC6q+C6vOC6u+C7iOC6suC6meC6teC7ieC7geC6muC6muC6muC7jeC7iOC6oeC6teC6quC6veC6hyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4i4Lqq4Lqw4LuB4LqU4LqH4Lqi4Lq54LuI4Lqq4LuI4Lqn4LqZ4LuA4LqX4Lq04LqH4LqC4Lqt4LqH4Lql4Lqy4LqN4LqB4Lqy4LqZ4LuB4LqI4LuJ4LqH4LuA4LqV4Lq34Lqt4LqZIOC7geC6peC6sOC6quC6u+C7iOC6h+C6quC6veC6h+C6lOC6seC6hyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjUyMzY5ODcxNzE5MDQ3NTYxMzQiPiLgu4DgupTgurHgu4nguofguoLgurbgu4ngupngu4DgupfgurTguofguqvgupngu4ngurLguojgu40g4LuB4Lql4Lqw4Lqq4Lq74LuI4LqH4Lqq4Lq94LqH4LqU4Lqx4LqHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX21vcmVfc2V0dGluZ3MiIG1zZ2lkPSI4MTYzMDYyODMzOTY1NTM1NzEiPiLigIvguoHgurLgupnigIvgupXgurHgu4nguofigIvguoTgu4jgurLigIvgu4Dgup7gurXgu4jguqHigIvgu4DgupXgurXguqEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiLguqrgurPgu4DguqXgurHgupTgu4HguqXgu4nguqciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiLguqrgurXigIvgupvgurvguoHigIvguoHgurDigIvgupXgurQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4i4Lqq4Lq14oCL4LqV4Lqt4LqZ4oCL4LqB4Lqy4LqH4oCL4LqE4Lq34LqZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X2N1c3RvbSIgbXNnaWQ9IjM2NTU1NzY0OTIzMjIyOTg3MTMiPiLguqrgurXgu4HguprguprguoHgurPgupngurvgupTgu4Dguq3guociPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiLguqrgurXgupfgurXgu4jguprgu43gu4jguq7gurngu4nguojgurHguoEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4i4LqB4Lqy4LqZ4oCL4LqU4Lqx4LqU4oCL4LuB4Lqb4LqH4Lqq4Lq1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Nob3dfcXMiIG1zZ2lkPSIxNzYzMjQ0MzU0Mzk5Mjc2Njc5Ij4i4Lqq4Lqw4LuB4LqU4LqH4LuE4LqX4Lql4LuM4LqB4Lqy4LqZ4LqV4Lqx4LuJ4LqH4LqE4LuI4Lqy4LqU4LuI4Lqn4LqZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiLgu4DgupvgurXgupTgu4Pguorgu4nguoHgurLgupngupvgu4jgur3gupnguqrgurXgu4HguprguprguoHgurPgupngurvgupTgu4Dguq3guociPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9hcHBseSIgbXNnaWQ9IjkyMTI2MDIwMTI2NDEwMzQyODMiPiLgupngurPgu4Pguorgu4kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfdGl0bGUiIG1zZ2lkPSI0NzQ2NjY2NTQ1NDgwNTM0NjYzIj4i4Lqi4Lq34LqZ4oCL4Lqi4Lqx4LqZ4oCL4LqB4Lqy4LqZ4oCL4LqV4Lqx4LuJ4LqH4oCL4LqE4LuI4LqyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X21lc3NhZ2UiIG1zZ2lkPSI5MTE2MDAxMDY5Mzk3OTk2NjkxIj4i4Lqa4Lqy4LqH4LqB4Lqy4LqZ4LqV4Lqx4LuJ4LqH4LqE4LuI4Lqy4Lqq4Lq14Lqq4Lqy4Lqh4Lqy4LqU4LuA4Lqu4Lqx4LqU4LuD4Lqr4LuJ4Lqt4Lq44Lqb4Lqw4LqB4Lqt4LqZ4LqZ4Lq14LuJ4Lqa4LuN4LuI4Lqq4Lqy4Lqh4Lqy4LqU4LuD4LqK4LuJ4LuE4LqU4LuJLiDguoTguqXgurTguoEg4LqV4Lq74LqB4Lql4Lq74LqHIOC7gOC6nuC6t+C7iOC6reC6ouC6t+C6meC6ouC6seC6meC6geC6suC6meC6leC6seC7ieC6h+C6hOC7iOC6suC6quC6teC7gOC6q+C6vOC6u+C7iOC6suC6meC6teC7iSwg4LqW4LuJ4Lqy4Lqa4LuN4LuI4LqU4Lqx4LuI4LqH4LqZ4Lqx4LuJ4LqZIOC6geC6suC6meC6leC6seC7ieC6h+C6hOC7iOC6suC7gOC6q+C6vOC6u+C7iOC6suC6meC6teC7ieC6iOC6sOC6leC6seC7ieC6h+C6hOC6t+C6meC7g+C7neC7iCDguqvgurzgurHguofguojgurLguoEgMTAg4Lqn4Lq04LqZ4Lqy4LqX4Lq1LiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1sdC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbHQvc3RyaW5ncy54bWwKaW5kZXggNDg4NDA1Zi4uYmE5OGUyYiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1sdC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWx0L3N0cmluZ3MueG1sCkBAIC0zMDMsOCArMzAzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2VhcmNoX2Jhcl9sYWJlbCIgbXNnaWQ9IjgwNzQ5OTc0MDAxODc4MzY2NzciPiJwYWllxaFrYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4iTmVwYXZ5a28gcGFsZWlzdGkgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2hvd19oaXN0b3J5X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjcwNjIwODgxOTY0NDk3NDcyNDUiPiJEYXVnaWF1Ijwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQgKDYzMzcxNTU2MDgwNTUwNjI0MjkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+IkRhciA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9ob3Jpem9udGFsIiBtc2dpZD0iODg0ODUxNDQ3NDU0MzQyNzMzMiI+Ikhvcml6b250YWx1cyBza2FpZHltYXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF92ZXJ0aWNhbCIgbXNnaWQ9IjkwNzUyOTIyMzM2OTYxODA4MTMiPiJWZXJ0aWthbHVzIHNrYWlkeW1hcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2N1c3RvbSIgbXNnaWQ9IjQxNzc4Mzc1OTc1MTM3MDE5NDMiPiJUaW5raW50YXMgc2thaWR5bWFzIjwvc3RyaW5nPgpAQCAtMzY3LDcgKzM2Niw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+IkFrdW11bGlhdG9yaWF1cyB0YXVzb2ppbW8gcHJpZW1vbsSXIMSvanVuZ3RhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+IlN1bWHFvmluYW1hcyBuYcWhdW1hcyBpciBmb25pbmnFsyBkdW9tZW7FsyBuYXVkb2ppbWFzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiJJxaFqdW5ndGkgQWt1bXVsaWF0b3JpYXVzIHRhdXNvamltbyBwcmllbW9uxJkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4iVHVyaW55cyBwYXNsxJdwdGFzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiLigJ48eGxpZmY6ZyBpZD0iQVBQX1NFRUtJTkdfUEVSTUlTU0lPTiI+JXM8L3hsaWZmOmc+4oCcIHByYWTEl3MgZmlrc3VvdGkgdmlza8SFLCBrYXMgcm9kb21hIGrFq3PFsyBla3JhbmUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+IkRhdWdpYXUgbmViZXJvZHl0aSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNsZWFyX2FsbF9ub3RpZmljYXRpb25zX3RleHQiIG1zZ2lkPSI4MTQxOTI4ODk3NzE0NjI4MjgiPiJWaXNrxIUgacWhdmFseXRpIjwvc3RyaW5nPgpAQCAtNDUyLDQgKzQ1MCwyOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiLErmp1bmd0aSDigJ5CbHVldG9vdGjigJw/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9tZXNzYWdlIiBtc2dpZD0iOTEwNjU5NTk5MDcwODk4NTM4NSI+IkthZCBnYWzEl3R1bcSXdGUgcHJpanVuZ3RpIGtsYXZpYXTFq3LEhSBwcmllIHBsYW7FoWV0aW5pbyBrb21waXV0ZXJpbywgcGlybWlhdXNpYSB0dXJpdGUgxK9qdW5ndGkg4oCeQmx1ZXRvb3Ro4oCcLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+IsSuanVuZ3RpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4iVGFpa3l0aSDigJ48eGxpZmY6ZyBpZD0iVE9QSUNfTkFNRSI+JTEkczwveGxpZmY6Zz7igJwgcHJhbmXFoWltYW1zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4iVGFpa3l0aSB2aXNpZW1zIHByYW5lxaFpbWFtcyBpxaEgxaFpb3MgcHJvZ3JhbW9zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IlXFvmJsb2t1b3RhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4iTWHFvmEgc3ZhcmJhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9pbXBvcnRhbmNlIiBtc2dpZD0iODE5MjEwNzY4OTk5NTc0MjY1MyI+IsSucHJhc3RhIHN2YXJiYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiJEaWRlbMSXIHN2YXJiYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1heF9pbXBvcnRhbmNlIiBtc2dpZD0iNTA4OTAwNTg3MjcxOTU2Mzg5NCI+IlNrdWJpIHN2YXJiYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4iTmlla2FkYSBuZXJvZHl0aSDFoWnFsyBwcmFuZcWhaW3FsyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjQzODM1NjMyNjczNzA4NTk3MjUiPiJUeWxpYWkgcm9keXRpIHByYW5lxaFpbcWzIHPEhXJhxaFvIGFwYcSNaW9qZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI0OTI2NTI5NjE1OTIwNjEwODE3Ij4iVHlsaWFpIHJvZHl0aSDFoWl1b3MgcHJhbmXFoWltdXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+IlJvZHl0aSBwcmFuZcWhaW3FsyBzxIVyYcWhbyB2aXLFoXVqZSBpciBza2FtYsSXdGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4iUm9keXRpIGVrcmFuZSBpciBza2FtYsSXdGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+IkRhdWdpYXUgbnVzdGF0eW3FsyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9kb25lIiBtc2dpZD0iNTI3OTQyNjA0NzI3MzkzMDE3NSI+IkF0bGlrdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiLErnByYXN0b3Mgc3BhbHZvcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9uaWdodCIgbXNnaWQ9IjU5NDM4MTc2MjIxMDUzMDcwNzIiPiJOYWt0aWVzIHNwYWx2b3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+IlRpbmtpbnRvcyBzcGFsdm9zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4iTmXFvmlub21vcyBzcGFsdm9zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+IlNwYWx2xbMga2VpdGltYXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfc2hvd19xcyIgbXNnaWQ9IjE3NjMyNDQzNTQzOTkyNzY2NzkiPiJSb2R5dGkgU3BhcsSNacWzasWzIG51c3RhdHltxbMgacWha2xvdGluxJdzIGVsZW1lbnTEhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4ixK5nYWxpbnRpIHRpbmtpbnTEhSB0cmFuc2Zvcm1hdmltxIUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9hcHBseSIgbXNnaWQ9IjkyMTI2MDIwMTI2NDEwMzQyODMiPiJUYWlreXRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+Ik51c3RhdHltxbMgcGF0dmlydGluaW1hcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+IkTEl2wga2FpIGt1cmnFsyBzcGFsdsWzIG51c3RhdHltxbMgxK9yZW5naW55cyBnYWxpIGLFq3RpIG5ldGlua2FtYXMgbmF1ZG90aS4gU3B1c3RlbMSXa2l0ZSDigJ5HZXJhaeKAnCwga2FkIHBhdHZpcnRpbnR1bcSXdGUgxaFpdW9zIHNwYWx2xbMgbnVzdGF0eW11cy4gS2l0YWlwIMWhaWUgbnVzdGF0eW1haSBidXMgbnVzdGF0eXRpIGnFoSBuYXVqbyBwbyAxMCBzZWt1bmTFvmnFsy4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbHYvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWx2L3N0cmluZ3MueG1sCmluZGV4IGRhOTc2ZTguLjAxNDNmZWEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbHYvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1sdi9zdHJpbmdzLnhtbApAQCAtMzAyLDggKzMwMiw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4iTWVrbMSTdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4iTmV2YXLEk2phIHBhbGFpc3QgbGlldG90bmkgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2hvd19oaXN0b3J5X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjcwNjIwODgxOTY0NDk3NDcyNDUiPiJWYWlyxIFrIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQgKDYzMzcxNTU2MDgwNTUwNjI0MjkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+IlbEk2zCoDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2hvcml6b250YWwiIG1zZ2lkPSI4ODQ4NTE0NDc0NTQzNDI3MzMyIj4iSG9yaXpvbnTEgWxzIGRhbMSranVtcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X3ZlcnRpY2FsIiBtc2dpZD0iOTA3NTI5MjIzMzY5NjE4MDgxMyI+IlZlcnRpa8SBbHMgZGFsxKtqdW1zIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfY3VzdG9tIiBtc2dpZD0iNDE3NzgzNzU5NzUxMzcwMTk0MyI+IlBpZWzEgWdvdHMgZGFsxKtqdW1zIjwvc3RyaW5nPgpAQCAtMzY2LDcgKzM2NSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+Ikllc2zEk2d0cyBha3VtdWxhdG9yYSBlbmVyxKNpamFzIHRhdXDEq8WhYW5hcyByZcW+xKttcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiJTYW1hemluYSB2ZWlrdHNwxJNqdSB1biBmb25hIGRhdHVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiJJenNsxJNndCBha3VtdWxhdG9yYSBqYXVkYXMgdGF1cMSrxaFhbnUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4iU2F0dXJzIHBhc2zEk3B0cyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fZGlhbG9nX3RleHQiIG1zZ2lkPSIzMDcxNDMxMDI1NDQ4MjE4OTI4Ij4iPHhsaWZmOmcgaWQ9IkFQUF9TRUVLSU5HX1BFUk1JU1NJT04iPiVzPC94bGlmZjpnPiBzxIFrcyB1esWGZW10IHZpc3UsIGthcyB0aWtzIHLEgWTEq3RzIGrFq3N1IGVrcsSBbsSBLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fcmVtZW1iZXJfdGV4dCIgbXNnaWQ9IjMxMDM1MTA4ODIxNzI3NDY3NTIiPiJWYWlycyBuZXLEgWTEq3QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4iRHrEk3N0IHZpc3UiPC9zdHJpbmc+CkBAIC00NTEsNCArNDQ5LDI4IEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+IlZhaSBpZXNsxJNndCBCbHVldG9vdGggc2F2aWVub2p1bXU/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9tZXNzYWdlIiBtc2dpZD0iOTEwNjU5NTk5MDcwODk4NTM4NSI+IkxhaSBwaWV2aWVub3R1IHRhc3RhdMWrcnUgcGxhbsWhZXRkYXRvcmFtLCB2aXNwaXJtcyBpciBqxIFpZXNsxJNkeiBCbHVldG9vdGggc2F2aWVub2p1bXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9jb25maXJtYXRpb25fb2siIG1zZ2lkPSI2MjU4MDc0MjUwOTQ4MzA5NzE1Ij4iSWVzbMSTZ3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiJMaWV0b3QgcGF6acWGb2p1bWllbSDigJw8eGxpZmY6ZyBpZD0iVE9QSUNfTkFNRSI+JTEkczwveGxpZmY6Zz7igJ0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b19hcHAiIG1zZ2lkPSIzNjMwMTY3ODM5Mzk4MTU5NjAiPiJMaWV0b3QgdmlzaWVtIMWhxKtzIGxpZXRvdG5lcyBwYXppxYZvanVtaWVtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IkJsb8S3xJN0cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbXBvcnRhbmNlIiBtc2dpZD0iNDEwOTkyOTk4NjEwNzE0NzkzMCI+Ik5hdiBzdmFyxKtncyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiJQYXJhc3RzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+IsS7b3RpIHN2YXLEq2dzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4iU3RlaWR6YW1zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjIzOTcxOTI2NDI2NTc4NzI4NzIiPiJOZWthZCBuZXLEgWTEq3QgxaFvcyBwYXppxYZvanVtdXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4iUsSBZMSrdCBwYXppxYZvanVtdSBzYXJha3N0YSBhcGFrxaFkYcS8xIEgYmV6IHNrYcWGYXMgc2lnbsSBbGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+IlLEgWTEq3QgxaFvcyBwYXppxYZvanVtdXMgYmV6IHNrYcWGYXMgc2lnbsSBbGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+IlLEgWTEq3QgcGF6acWGb2p1bXUgc2FyYWtzdGEgYXVnxaFkYcS8xIEgdW4gYXIgc2thxYZhcyBzaWduxIFsdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjUyMzY5ODcxNzE5MDQ3NTYxMzQiPiJSxIFkxKt0IGVrcsSBbsSBIGFyIHNrYcWGYXMgc2lnbsSBbHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+IkNpdGkgaWVzdGF0xKtqdW1pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4iR2F0YXZzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25vbmUiIG1zZ2lkPSIyMTIxOTU3OTI2MDQwNTQzMTQ4Ij4iUGFyYXN0YXMga3LEgXNhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9uaWdodCIgbXNnaWQ9IjU5NDM4MTc2MjIxMDUzMDcwNzIiPiJOYWt0cyBrcsSBc2FzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X2N1c3RvbSIgbXNnaWQ9IjM2NTU1NzY0OTIzMjIyOTg3MTMiPiJQaWVsxIFnb3RhcyBrcsSBc2FzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4iTmV6aW7EgW1hcyBrcsSBc2FzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+IktyxIFzdSBwxIFydmVpZG/FoWFuYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+IsSAdHJvIGllc3RhdMSranVtdSBlbGVtZW50YSByxIFkxKvFoWFuYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4iUGllbMSBZ290xIFzIHDEgXJ2ZWlkb8WhYW5hcyBpZXNwxJNqb8WhYW5hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4iTGlldG90Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+Ikllc3RhdMSranVtdSBhcHN0aXByaW7EgcWhYW5hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X21lc3NhZ2UiIG1zZ2lkPSI5MTE2MDAxMDY5Mzk3OTk2NjkxIj4iTm90ZWlrdHUga3LEgXN1IGllc3RhdMSranVtdSBkxJPEvCDFocSrIGllcsSrY2UgdmFyIGvEvMWrdCBuZWxpZXRvamFtYS4gTGFpIGFwc3RpcHJpbsSBdHUgxaFvcyBrcsSBc3UgaWVzdGF0xKtqdW11cywgbm9rbGlrxaHEt2luaWV0IHV6IExhYmkuIEphIHRvIG5laXpkYXLEq3NpZXQsIHDEk2MgMTDCoHNla3VuZMSTbSDFoWllIGllc3RhdMSranVtaSB0aWtzIGF0aWVzdGF0xKt0aS4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbWstck1LL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1tay1yTUsvc3RyaW5ncy54bWwKaW5kZXggMTkxZGQ3OC4uYzU3MzEzOSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1tay1yTUsvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1tay1yTUsvc3RyaW5ncy54bWwKQEAgLTQyLDcgKzQyLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfY29uZmlybWF0aW9uX3RpdGxlIiBtc2dpZD0iNTI5OTU4NTQzMzA1MDM2MTYzNCI+ItCU0LDQu9C4INC00LAg0YHQtSDQstC60LvRg9GH0Lgg0YjRgtC10LTQsNGH0L7RgiDQvdCwINCx0LDRgtC10YDQuNGY0LA/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9jb25maXJtYXRpb25fb2siIG1zZ2lkPSI3NTA3OTY4NDMwNDQ3OTMwMjU3Ij4i0JLQutC70YPRh9C4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9zdGFydF9hY3Rpb24iIG1zZ2lkPSI1NTc2Njk3NDUxNjc3NDg2MzIwIj4i0JLQutC70YPRh9C10YLQtSDQs9C+INGI0YLQtdC00LDRh9C+0YIg0L3QsCDQsdCw0YLQtdGA0LjRmNCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zZXR0aW5nc19idXR0b24iIG1zZ2lkPSIzMDIzODg5OTE2Njk5MjcwMjI0Ij4i0J/QvtC00LXRgdGD0LLQsNGa0LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjMwMjM4ODk5MTY2OTkyNzAyMjQiPiLQn9C+0YHRgtCw0LLQutC4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc193aWZpX2J1dHRvbiIgbXNnaWQ9IjE3MzM5MjgxNTE2OTgzMTE5MjMiPiJXaS1GaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfYXV0b19yb3RhdGlvbiIgbXNnaWQ9IjM3OTA0ODI1NDEzNTc3OTg0MjEiPiLQkNCy0YLQvtC80LDRgtGB0LrQviDRgNC+0YLQuNGA0LDRmtC1INC90LAg0LXQutGA0LDQvdC+0YIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX211dGVfbGFiZWwiIG1zZ2lkPSI1NTQ2ODI1NDk5MTc0MjkzOTYiPiLQmNCh0JrQmy4iPC9zdHJpbmc+CkBAIC0xNTEsNyArMTUxLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fc2ltcyIgbXNnaWQ9IjM5NTc5OTcwMTgzMjQ5OTU3ODEiPiLQndC10LzQsCDQodCY0Jwt0LrQsNGA0YLQuNGH0LrQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2Fycmllcl9uZXR3b3JrX2NoYW5nZV9tb2RlIiBtc2dpZD0iNDAxNzMwMTU4MDQ0MTMwNDMwNSI+ItCf0YDQvtC80LXQvdGD0LLQsNGa0LUg0L3QsCDQvNGA0LXQttCw0YLQsCDQvdCwINC+0L/QtdGA0LDRgtC+0YDQvtGCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV9sZXZlbCIgbXNnaWQ9Ijc0NTE0NzQxODcxMTMzNzE5NjUiPiLQkdCw0YLQtdGA0LjRmNCwIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDQv9GA0L7RhtC10L3RgtC4LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNzk5NTgzOTExMjMxODkzMzgwIj4i0J/QvtC00LXRgdGD0LLQsNGa0LAg0L3QsCDRgdC40YHRgtC10LwuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI3OTk1ODM5MTEyMzE4OTMzODAiPiLQn9C+0YHRgtCw0LLQutC4INC90LAg0YHQuNGB0YLQtdC8LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm90aWZpY2F0aW9uc19idXR0b24iIG1zZ2lkPSI0NDk4MDAwMzY5Nzc5NDIxODkyIj4i0JjQt9Cy0LXRgdGC0YPQstCw0ZrQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVtb3ZlX25vdGlmaWNhdGlvbiIgbXNnaWQ9IjM2MDMwOTk1MTQ5MDIxODIzNTAiPiLQmNC30LHRgNC40YjQuCDQuNC30LLQtdGB0YLRg9Cy0LDRmtC1LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZ3BzX2VuYWJsZWQiIG1zZ2lkPSIzNTExNDY5NDk5MjQwMTIzMDE5Ij4i0JPQn9ChINC1INC+0LLQvtC30LzQvtC20LXQvS4iPC9zdHJpbmc+CkBAIC0yNjAsNyArMjYwLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX21lZGlhX2RldmljZV9sYWJlbCIgbXNnaWQ9IjEzMDI5MDY4MzYzNzI2MDM3NjIiPiLQnNC10LTQuNGD0LzRgdC60Lgg0YPRgNC10LQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yc3NpX2xhYmVsIiBtc2dpZD0iNzcyNTY3MTMzNTU1MDY5NTU4OSI+IlJTU0kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yc3NpX2VtZXJnZW5jeV9vbmx5IiBtc2dpZD0iMjcxMzc3NDA0MTY3Mjg4Njc1MCI+ItCh0LDQvNC+INC40YLQvdC4INC/0L7QstC40YbQuCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3NldHRpbmdzX2xhYmVsIiBtc2dpZD0iNTMyNjU1NjU5MjU3ODA2NTQwMSI+ItCf0L7QtNC10YHRg9Cy0LDRmtCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfc2V0dGluZ3NfbGFiZWwiIG1zZ2lkPSI1MzI2NTU2NTkyNTc4MDY1NDAxIj4i0J/QvtGB0YLQsNCy0LrQuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3RpbWVfbGFiZWwiIG1zZ2lkPSI0NjM1OTY5MTgyMjM5NzM2NDA4Ij4i0JLRgNC10LzQtSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3VzZXJfbGFiZWwiIG1zZ2lkPSI1MjM4OTk1NjMyMTMwODk3ODQwIj4i0IjQsNGBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfdXNlcl90aXRsZSIgbXNnaWQ9IjQ0Njc2OTA0Mjc2NDIzOTI0MDMiPiLQmtC+0YDQuNGB0L3QuNC6Ijwvc3RyaW5nPgpAQCAtMzAxLDggKzMwMSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4i0L/RgNC10LHQsNGA0LDRmCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+INC90LUg0LzQvtC20LUg0LTQsCDRgdC1INCy0LrQu9GD0YfQuC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4i0J/QvtCy0LXRnNC1Ijwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQgKDYzMzcxNTU2MDgwNTUwNjI0MjkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+ItCj0YjRgtC1IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2hvcml6b250YWwiIG1zZ2lkPSI4ODQ4NTE0NDc0NTQzNDI3MzMyIj4i0KDQsNC30LTQtdC70Lgg0YXQvtGA0LjQt9C+0L3RgtCw0LvQvdC+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfdmVydGljYWwiIG1zZ2lkPSI5MDc1MjkyMjMzNjk2MTgwODEzIj4i0KDQsNC30LTQtdC70Lgg0LLQtdGA0YLQuNC60LDQu9C90L4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4i0KDQsNC30LTQtdC70Lgg0L/RgNC40LvQsNCz0L7QtNC10L3QviI8L3N0cmluZz4KQEAgLTM2NSw3ICszNjQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzc5MTg3MjY3NTA5NTU4NTkiPiLQqNGC0LXQtNCw0YfQvtGCINC90LAg0LHQsNGC0LXRgNC40ZjQsCDQtSDQstC60LvRg9GH0LXQvSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiLQiNCwINC90LDQvNCw0LvRg9Cy0LAg0LjQt9Cy0LXQtNCx0LDRgtCwINC4INC/0L7QtNCw0YLQvtGG0LjRgtC1INCy0L4g0LfQsNC00L3QuNC90LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl9hY3Rpb25fdGV4dCIgbXNnaWQ9IjEwOTE1ODY1ODIzODExMDM4MiI+ItCY0YHQutC70YPRh9C10YLQtSDQs9C+INGI0YLQtdC00LDRh9C+0YIg0L3QsCDQsdCw0YLQtdGA0LjRmNCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+ItCh0L7QtNGA0LbQuNC90LjRgtC1INGB0LUg0YHQutGA0LjQtdC90LgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+Ijx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4g0ZzQtSDQt9Cw0L/QvtGH0L3QtSDQtNCwINC/0YDQtdC30LXQvNCwINGB0ZAg0YjRgtC+INGB0LUg0L/RgNC40LrQsNC20YPQstCwINC90LAg0LLQsNGI0LjQvtGCINC10LrRgNCw0L0uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+ItCd0LUg0L/QvtC60LDQttGD0LLQsNGYINC/0L7QstGC0L7RgNC90L4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4i0JjRgdGH0LjRgdGC0Lgg0YHDqCI8L3N0cmluZz4KQEAgLTQ1MCw0ICs0NDgsMjggQEAKICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfdGl0bGUiIG1zZ2lkPSI1MDI3MDM3NzA2NTAwNjM1MjY5Ij4i0JTQsCDRgdC1INCy0LrQu9GD0YfQuCBCbHVldG9vdGg/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9tZXNzYWdlIiBtc2dpZD0iOTEwNjU5NTk5MDcwODk4NTM4NSI+ItCX0LAg0LTQsCDRmNCwINC/0L7QstGA0LfQtdGC0LUg0YLQsNGB0YLQsNGC0YPRgNCw0YLQsCDRgdC+INGC0LDQsdC70LXRgtC+0YIsINC90LDRmNC/0YDQstC+INGC0YDQtdCx0LAg0LTQsCDQstC60LvRg9GH0LjRgtC1IEJsdWV0b290aC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiLQktC60LvRg9GH0LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiLQktCw0LbQuCDQt9CwINC40LfQstC10YHRgtGD0LLQsNGa0LDRgtCwINC30LAgPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4i0JLQsNC20Lgg0LfQsCDRgdC40YLQtSDQuNC30LLQtdGB0YLRg9Cy0LDRmtCwINC+0LQg0L7QstCw0LAg0LDQv9C70LjQutCw0YbQuNGY0LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX2ltcG9ydGFuY2UiIG1zZ2lkPSI1MTk4NTc4OTg4OTc4MjM0MTYxIj4i0JHQu9C+0LrQuNGA0LDQvdC+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4i0JzQsNC70LAg0LLQsNC20L3QvtGB0YIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4i0J3QvtGA0LzQsNC70L3QsCDQstCw0LbQvdC+0YHRgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiLQk9C+0LvQtdC80LAg0LLQsNC20L3QvtGB0YIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfaW1wb3J0YW5jZSIgbXNnaWQ9IjUwODkwMDU4NzI3MTk1NjM4OTQiPiLQmNGC0L3QsCDQstCw0LbQvdC+0YHRgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4i0J3QuNC60L7Qs9Cw0Ygg0L3QtSDQs9C4INC/0YDQuNC60LDQttGD0LLQsNGYINC40LfQstC10YHRgtGD0LLQsNGa0LDQstCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+ItCi0LjQstC60L4g0L/RgNC40LrQsNC20YPQstCw0Zgg0LPQuCDQvdCwINC00L3QvtGC0L4g0L3QsCDRgdC/0LjRgdC+0LrQvtGCINGB0L4g0LjQt9Cy0LXRgdGC0YPQstCw0ZrQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI0OTI2NTI5NjE1OTIwNjEwODE3Ij4i0KLQuNCy0LrQviDQv9GA0LjQutCw0LbRg9Cy0LDRmCDQs9C4INC40LfQstC10YHRgtGD0LLQsNGa0LDQstCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMyMjI2ODAxMzY2MTI0MDgyMjMiPiLQn9GA0LjQutCw0LbRg9Cy0LDRmCDQs9C4INC90LAg0LLRgNCy0L7RgiDQvdCwINGB0L/QuNGB0L7QutC+0YIg0YHQviDQuNC30LLQtdGB0YLRg9Cy0LDRmtCwINC4INC00LDRmCDQt9Cy0YPRh9C10L0g0YHQuNCz0L3QsNC7Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iNTIzNjk4NzE3MTkwNDc1NjEzNCI+ItCf0L7RmNCw0LLQuCDRgdC1INC90LAg0LXQutGA0LDQvdC+0YIg0Lgg0LTQsNGYINC30LLRg9GH0LXQvSDRgdC40LPQvdCw0LsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+ItCf0L7QstC10ZzQtSDQv9C+0YHRgtCw0LLQutC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4i0JPQvtGC0L7QstC+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25vbmUiIG1zZ2lkPSIyMTIxOTU3OTI2MDQwNTQzMTQ4Ij4i0J3QvtGA0LzQsNC70L3QuCDQsdC+0LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4i0J3QvtGc0L3QuCDQsdC+0LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+ItCf0YDQuNGB0L/QvtGB0L7QsdC10L3QuCDQsdC+0LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiLQndC10L/QvtC30L3QsNGC0Lgg0LHQvtC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+ItCf0YDQvtC80LXQvdCwINC90LAg0LHQvtGY0LDRgtCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Nob3dfcXMiIG1zZ2lkPSIxNzYzMjQ0MzU0Mzk5Mjc2Njc5Ij4i0J/RgNC40LrQsNC20Lgg0L/Qu9C+0YfQutCwINCR0YDQt9C4INC/0L7RgdGC0LDQstC60LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9lbmFibGVfY3VzdG9tIiBtc2dpZD0iNjcyOTAwMTMwODIxNzM0NzUwMSI+ItCe0LLQvtC30LzQvtC20Lgg0L/RgNC40YHQv9C+0YHQvtCx0LXQvdC+INGC0YDQsNC90YHRhNC+0YDQvNC40YDQsNGa0LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9hcHBseSIgbXNnaWQ9IjkyMTI2MDIwMTI2NDEwMzQyODMiPiLQn9GA0LjQvNC10L3QuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiLQn9C+0YLQstGA0LTQtdGC0LUg0LPQuCDQv9C+0YHRgtCw0LLQutC40YLQtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+ItCd0LXQutC+0Lgg0L/QvtGB0YLQsNCy0LrQuCDQvdCwINCx0L7QuNGC0LUg0LzQvtC20LUg0LTQsCDQs9C+INC90LDQv9GA0LDQstCw0YIg0YPRgNC10LTQvtGCINC90LXRg9C/0L7RgtGA0LXQsdC70LjQsi4g0JrQu9C40LrQvdC10YLQtSDQvdCwINCS0L4g0YDQtdC0INC30LAg0LTQsCDQs9C4INC/0L7RgtCy0YDQtNC40YLQtSDQvtCy0LjQtSDQv9C+0YHRgtCw0LLQutC4INC90LAg0LHQvtC40YLQtSwg0LjQvdCw0LrRgyDRgtC40LUg0L/QvtGB0YLQsNCy0LrQuCDRnNC1INGB0LUg0YDQtdGB0LXRgtC40YDQsNCw0YIg0L/QviAxMCDRgdC10LrRg9C90LTQuC4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbWwtcklOL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1tbC1ySU4vc3RyaW5ncy54bWwKaW5kZXggYzU3YjlmZjcuLmM2YTA4ZTYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbWwtcklOL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbWwtcklOL3N0cmluZ3MueG1sCkBAIC0zMDEsOCArMzAxLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2VhcmNoX2Jhcl9sYWJlbCIgbXNnaWQ9IjgwNzQ5OTc0MDAxODc4MzY2NzciPiLgtKTgtL/gtLDgtK/gtYHgtJUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xhdW5jaF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMjk2OTI4NzgzODEyMDU1MDUwNiI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDgtIbgtLDgtILgtK3gtL/gtJXgtY3gtJXgtL7gtKjgtL7gtK/gtL/gtLLgtY3gtLIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zaG93X2hpc3RvcnlfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNzA2MjA4ODE5NjQ0OTc0NzI0NSI+IuC0leC1guC0n+C1geC0pOC1vSI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciByZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0ICg2MzM3MTU1NjA4MDU1MDYyNDI5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCIgbXNnaWQ9IjYzMzcxNTU2MDgwNTUwNjI0MjkiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4LSO4LSj4LWN4LSj4LSCIOC0leC1guC0n+C0vyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2hvcml6b250YWwiIG1zZ2lkPSI4ODQ4NTE0NDc0NTQzNDI3MzMyIj4i4LSk4LS/4LSw4LS24LWN4LSa4LWA4LSo4LSu4LS+4LSv4LS/IOC0teC1h+C1vOC0pOC0v+C0sOC0v+C0leC1jeC0leC1geC0lSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X3ZlcnRpY2FsIiBtc2dpZD0iOTA3NTI5MjIzMzY5NjE4MDgxMyI+IuC0suC0guC0rOC0ruC0vuC0r+C0vyDgtLXgtYfgtbzgtKTgtL/gtLDgtL/gtJXgtY3gtJXgtYHgtJUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4i4LSH4LS34LWN4oCM4LSf4LS+4LSo4LWB4LS44LWD4LSk4LSu4LS+4LSv4LS/IOC0teC1h+C1vOC0pOC0v+C0sOC0v+C0leC1jeC0leC1geC0lSI8L3N0cmluZz4KQEAgLTM2NSw3ICszNjQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzc5MTg3MjY3NTA5NTU4NTkiPiLgtKzgtL7gtLHgtY3gtLHgtLHgtL8g4LS44LWH4LS14LW8IOC0k+C0o+C0vuC0o+C1jSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiLgtKrgtY3gtLDgtLXgtbzgtKTgtY3gtKTgtKjgtLXgtYHgtIIg4LSq4LS24LWN4LSa4LS+4LSk4LWN4LSk4LSyIOC0oeC0vuC0seC1jeC0seC0r+C1geC0giDgtJXgtYHgtLHgtK/gtY3igIzgtJXgtY3gtJXgtYHgtKjgtY3gtKjgtYEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl9hY3Rpb25fdGV4dCIgbXNnaWQ9IjEwOTE1ODY1ODIzODExMDM4MiI+IuC0rOC0vuC0seC1jeC0seC0seC0vyDgtLjgtYfgtLXgtbwg4LST4LSr4LS+4LSV4LWN4LSV4LWB4LSVIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IuC0leC1i+C1uuC0n+C0vuC0leC1jeKAjOC0seC1jeC0seC1geC0leC1viDgtK7gtLHgtJrgtY3gtJrgtYEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+IuC0qOC0v+C0meC1jeC0meC0s+C1geC0n+C1hiDgtLjgtY3gtJXgtY3gtLDgtYDgtKjgtL/gtb0g4LSq4LWN4LSw4LSm4LW84LS24LS/4LSq4LWN4LSq4LS/4LSa4LWN4LSa4LS/4LSw4LS/4LSV4LWN4LSV4LWB4LSo4LWN4LSoIOC0juC0suC1jeC0suC0viDgtJXgtL7gtLDgtY3gtK/gtJngtY3gtJngtLPgtYHgtIIgPHhsaWZmOmcgaWQ9IkFQUF9TRUVLSU5HX1BFUk1JU1NJT04iPiVzPC94bGlmZjpnPiDgtJXgtY3gtK/gtL7gtKrgtY3igIzgtJrgtbwg4LSa4LWG4LSv4LWN4LSv4LWB4LSo4LWN4LSo4LSk4LWNIOC0huC0sOC0guC0reC0v+C0leC1jeC0leC1geC0gi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX3JlbWVtYmVyX3RleHQiIG1zZ2lkPSIzMTAzNTEwODgyMTcyNzQ2NzUyIj4i4LS14LWA4LSj4LWN4LSf4LWB4LSCIOC0leC0vuC0o+C0v+C0leC1jeC0leC0sOC1geC0pOC1jSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNsZWFyX2FsbF9ub3RpZmljYXRpb25zX3RleHQiIG1zZ2lkPSI4MTQxOTI4ODk3NzE0NjI4MjgiPiLgtI7gtLLgtY3gtLLgtL7gtIIg4LSu4LS+4LSv4LWN4oCM4LSV4LWN4LSV4LWB4LSVIjwvc3RyaW5nPgpAQCAtNDUwLDQgKzQ0OCwyOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiJCbHVldG9vdGgg4LST4LSj4LS+4LSV4LWN4LSV4LSj4LWLPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiLgtKjgtL/gtJngtY3gtJngtLPgtYHgtJ/gtYYg4LSf4LS+4LSs4LWN4oCM4LSy4LWG4LSx4LWN4LSx4LWB4LSu4LS+4LSv4LS/IOC0leC1gOC0rOC1i+C1vOC0oeC1jSDgtJXgtKPgtJXgtY3gtLHgtY3gtLHgtYHgtJrgtYbgtK/gtY3gtK/gtYHgtKjgtY3gtKjgtKTgtL/gtKjgtY0sIOC0huC0puC1jeC0r+C0giBCbHVldG9vdGgg4LST4LSj4LS+4LSV4LWN4LSV4LWH4LSj4LWN4LSf4LSk4LWB4LSj4LWN4LSf4LWNLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+IuC0k+C0o+C0vuC0leC1jeC0leC1geC0lSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX3RvcGljIiBtc2dpZD0iMzY0MTQwMzQ4OTMxODY1OTY2NiI+Ijx4bGlmZjpnIGlkPSJUT1BJQ19OQU1FIj4lMSRzPC94bGlmZjpnPiDgtIXgtLHgtL/gtK/gtL/gtKrgtY3gtKrgtYHgtJXgtLPgtL/gtLLgtYfgtJXgtY3gtJXgtY0g4LSq4LWN4LSw4LSv4LWL4LSX4LS/4LSV4LWN4LSV4LWB4LSVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4i4LSIIOC0huC0quC1jeC0quC0v+C1vSDgtKjgtL/gtKjgtY3gtKjgtYHgtLPgtY3gtLMg4LSO4LSy4LWN4LSy4LS+IOC0heC0seC0v+C0r+C0v+C0quC1jeC0quC1geC0leC0s+C0v+C0suC1h+C0leC1jeC0leC1geC0giDgtKrgtY3gtLDgtK/gtYvgtJfgtL/gtJXgtY3gtJXgtYHgtJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX2ltcG9ydGFuY2UiIG1zZ2lkPSI1MTk4NTc4OTg4OTc4MjM0MTYxIj4i4LSs4LWN4LSy4LWL4LSV4LWN4LSV4LWB4LSa4LWG4LSv4LWN4LSk4LWBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4i4LSk4LS+4LS04LWN4LSo4LWN4LSoIOC0quC1jeC0sOC0vuC0p+C0vuC0qOC1jeC0r+C0giI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiLgtLjgtL7gtKfgtL7gtLDgtKMg4LSq4LWN4LSw4LS+4LSn4LS+4LSo4LWN4LSv4LSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+IuC0ieC0r+C1vOC0qOC1jeC0qCDgtKrgtY3gtLDgtL7gtKfgtL7gtKjgtY3gtK/gtIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfaW1wb3J0YW5jZSIgbXNnaWQ9IjUwODkwMDU4NzI3MTk1NjM4OTQiPiLgtIXgtJ/gtL/gtK/gtKjgtY3gtKTgtLAg4LSq4LWN4LSw4LS+4LSn4LS+4LSo4LWN4LSv4LSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjIzOTcxOTI2NDI2NTc4NzI4NzIiPiLgtIgg4LSF4LSx4LS/4LSv4LS/4LSq4LWN4LSq4LWB4LSV4LW+IOC0kuC0sOC0v+C0leC1jeC0leC0suC1geC0giDgtJXgtL7gtKPgtL/gtJXgtY3gtJXgtLDgtYHgtKTgtY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4i4LSF4LSx4LS/4LSv4LS/4LSq4LWN4LSq4LWNIOC0suC0v+C0uOC1jeC0seC1jeC0seC0v+C0qOC1jeC0seC1hiDgtKTgtL7gtLTgtYYg4LS24LSs4LWN4LSm4LSu4LWB4LSj4LWN4LSf4LS+4LSV4LWN4LSV4LS+4LSk4LWGIOC0leC0vuC0o+C0v+C0leC1jeC0leC1geC0lSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI0OTI2NTI5NjE1OTIwNjEwODE3Ij4i4LSIIOC0heC0seC0v+C0r+C0v+C0quC1jeC0quC1geC0leC1viDgtKjgtL/gtLbgtKzgtY3gtKbgtK7gtL7gtK/gtL8g4LSV4LS+4LSj4LS/4LSV4LWN4LSV4LWB4LSVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMyMjI2ODAxMzY2MTI0MDgyMjMiPiLgtIXgtLHgtL/gtK/gtL/gtKrgtY3gtKrgtY0g4LSy4LS/4LS44LWN4LSx4LWN4LSx4LS/4LSo4LWN4LSx4LWGIOC0j+C0seC1jeC0seC0teC1geC0giDgtK7gtYHgtJXgtLPgtL/gtb0g4LSV4LS+4LSj4LS/4LSV4LWN4LSV4LWB4LSVLCDgtLbgtKzgtY3gtKbgtK7gtYHgtKPgtY3gtJ/gtL7gtJXgtY3gtJXgtYHgtJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4i4LS44LWN4LSV4LWN4LSw4LWA4LSo4LS/4LW9IOC0puC1g+C0tuC1jeC0r+C0ruC0vuC0leC1jeC0leC1geC0lSwg4LS24LSs4LWN4LSm4LSu4LWB4LSj4LWN4LSf4LS+4LSV4LWN4LSV4LWB4LSVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX21vcmVfc2V0dGluZ3MiIG1zZ2lkPSI4MTYzMDYyODMzOTY1NTM1NzEiPiLgtJXgtYLgtJ/gtYHgtKTgtb0g4LSV4LWN4LSw4LSu4LWA4LSV4LSw4LSj4LSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4i4LSq4LWC4LW84LSk4LWN4LSk4LS/4LSv4LS+4LSv4LS/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25vbmUiIG1zZ2lkPSIyMTIxOTU3OTI2MDQwNTQzMTQ4Ij4i4LS44LS+4LSn4LS+4LSw4LSjIOC0teC0sOC1jeKAjeC0o+C1jeC0o+C0meC1jeC0meC1viI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9uaWdodCIgbXNnaWQ9IjU5NDM4MTc2MjIxMDUzMDcwNzIiPiLgtLDgtL7gtKTgtY3gtLDgtL8g4LS14LSw4LWN4oCN4LSj4LWN4LSj4LSZ4LWN4LSZ4LW+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X2N1c3RvbSIgbXNnaWQ9IjM2NTU1NzY0OTIzMjIyOTg3MTMiPiLgtIfgtLfgtY3gtJ/gtL7gtKjgtYHgtLjgtYPgtKQg4LS14LSw4LWN4oCN4LSj4LWN4LSj4LSZ4LWN4LSZ4LW+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4i4LSk4LS/4LSw4LS/4LSa4LWN4LSa4LSx4LS/4LSv4LS+4LSo4LS+4LSV4LS+4LSk4LWN4LSkIOC0teC1vOC0o+C1jeC0o+C0meC1jeC0meC1viI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3RyYW5zZm9ybSIgbXNnaWQ9IjY5ODU0NjA0MDgwNzkwODYwOTAiPiLgtLXgtbzgtKPgtY3gtKMg4LSq4LSw4LS/4LS34LWN4LSV4LSw4LSj4LSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Nob3dfcXMiIG1zZ2lkPSIxNzYzMjQ0MzU0Mzk5Mjc2Njc5Ij4i4LSm4LWN4LSw4LWB4LSkIOC0leC1jeC0sOC0ruC1gOC0leC0sOC0oyDgtJ/gtYjgtb0g4LSV4LS+4LSj4LS/4LSV4LWN4LSV4LWB4LSVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiLgtIfgtLfgtY3gtJ/gtL7gtKjgtYHgtLjgtYPgtKQg4LSq4LSw4LS/4LS14LW84LSk4LWN4LSk4LSo4LSCIOC0quC1jeC0sOC0teC1vOC0pOC1jeC0pOC0qOC0leC1jeC0t+C0ruC0ruC0vuC0leC1jeC0leC1geC0lSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+IuC0rOC0vuC0p+C0leC0ruC0vuC0leC1jeC0leC1geC0lSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiLgtJXgtY3gtLDgtK7gtYDgtJXgtLDgtKPgtIIg4LS44LWN4LSl4LS/4LSw4LWA4LSV4LSw4LS/4LSV4LWN4LSV4LWB4LSVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X21lc3NhZ2UiIG1zZ2lkPSI5MTE2MDAxMDY5Mzk3OTk2NjkxIj4i4LSa4LS/4LSyIOC0teC1vOC0o+C1jeC0oyDgtJXgtY3gtLDgtK7gtYDgtJXgtLDgtKPgtKTgtY3gtKTgtL/gtKjgtY0g4LSIIOC0ieC0quC0leC0sOC0o+C0pOC1jeC0pOC1hiDgtIngtKrgtK/gtYvgtJfgtLDgtLngtL/gtKTgtK7gtL7gtJXgtY3gtJXgtL7gtKjgtL7gtJXgtYHgtIIuIOC0iCDgtLXgtbzgtKPgtY3gtKMg4LSV4LWN4LSw4LSu4LWA4LSV4LSw4LSj4LSCIOC0uOC1jeC0peC0v+C0sOC1gOC0leC0sOC0v+C0leC1jeC0leC1geC0qOC1jeC0qOC0pOC0v+C0qOC1jSDgtLbgtLDgtL8g4LSO4LSo4LWN4LSo4LSk4LS/4LW9IOC0leC1jeC0suC0v+C0leC1jeC0leC1geC0muC1huC0r+C1jeC0r+C1geC0lSwg4LSF4LSy4LWN4LSy4LWG4LSZ4LWN4LSV4LS/4LW9IDEwIOC0uOC1huC0leC1jeC0leC1u+C0oeC0v+C0qOC1jSDgtLbgtYfgtLfgtIIg4LSIIOC0leC1jeC0sOC0ruC1gOC0leC0sOC0o+C0giDgtKrgtYHgtKjgtIPgtJXgtY3gtLDgtK7gtYDgtJXgtLDgtL/gtJXgtY3gtJXgtKrgtY3gtKrgtYbgtJ/gtYHgtIIuIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLW1uLXJNTi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbW4tck1OL3N0cmluZ3MueG1sCmluZGV4IDU3OTdkYzcuLjkxYzgxN2EgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbW4tck1OL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbW4tck1OL3N0cmluZ3MueG1sCkBAIC0yOTksOCArMjk5LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2VhcmNoX2Jhcl9sYWJlbCIgbXNnaWQ9IjgwNzQ5OTc0MDAxODc4MzY2NzciPiLRhdCw0LnRhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+LdCzINGN0YXQu9Kv0q/Qu9C2INGH0LDQtNGB0LDQvdCz0q/QuS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4i0JjQu9Kv0q8iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCAoNjMzNzE1NTYwODA1NTA2MjQyOSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQiIG1zZ2lkPSI2MzM3MTU1NjA4MDU1MDYyNDI5Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INCY0LvSr9KvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiLQpdGN0LLRgtGN0Y3CoNGH0LjQs9C70Y3Qu9C0INGF0YPQstCw0LDRhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X3ZlcnRpY2FsIiBtc2dpZD0iOTA3NTI5MjIzMzY5NjE4MDgxMyI+ItCR0L7RgdC+0L4g0YfQuNCz0LvRjdC70LQg0YXRg9Cy0LDQsNGFIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfY3VzdG9tIiBtc2dpZD0iNDE3NzgzNzU5NzUxMzcwMTk0MyI+ItCl0q/RgdGB0Y3QvSDRhdGN0LvQsdGN0YDRjdGN0YAg0YXRg9Cy0LDQsNGFIjwvc3RyaW5nPgpAQCAtMzYzLDcgKzM2Miw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+ItCR0LDRgtC10YDQtdC5INGF0Y3QvNC90Y3Qs9GHINCw0YHQsNCw0LvRgtGC0LDQuSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiLQkNC20LjQu9C70LDQs9Cw0LAg0LHQvtC70L7QvSDQtNCw0LvQtCDQtNCw0YLQsNCzINCx0YPRg9GA0YPRg9C70L3QsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4i0JHQsNGC0LXRgNC10Lkg0YXRjdC80L3RjdCz0YfQuNC50LMg0YPQvdGC0YDQsNCw0YUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4i0JrQvtC90YLQtdC90YLRi9CzINC90YPRg9GB0LDQvSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fZGlhbG9nX3RleHQiIG1zZ2lkPSIzMDcxNDMxMDI1NDQ4MjE4OTI4Ij4iPHhsaWZmOmcgaWQ9IkFQUF9TRUVLSU5HX1BFUk1JU1NJT04iPiVzPC94bGlmZjpnPiDRgtCw0L3RiyDQtNGN0LvQs9GN0YYg0LTRjdGN0YAg0LPQsNGA0LPQsNGB0LDQvSDQsdKv0YUg0LfSr9C50LvQuNC50L0g0LfRg9GA0LPQuNC50LMg0LDQstGHINGN0YXRjdC70L3RjS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX3JlbWVtYmVyX3RleHQiIG1zZ2lkPSIzMTAzNTEwODgyMTcyNzQ2NzUyIj4i0JTQsNGF0LjQtiDSr9C7INGF0LDRgNGD0YPQu9Cw0YUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4i0JHSr9Cz0LTQuNC50LMg0LDRgNC40LvQs9Cw0YUiPC9zdHJpbmc+CkBAIC00NDgsNCArNDQ2LDI4IEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+IkJsdWV0b290aC3QsyDQsNGB0LDQsNGFINGD0YM/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9tZXNzYWdlIiBtc2dpZD0iOTEwNjU5NTk5MDcwODk4NTM4NSI+ItCa0L7QvNC/0YzRjtGC0LXRgNC40LnQvSDQs9Cw0YDQsNCwINGC0LDQsdC70LXRgtCw0LQg0YXQvtC70LHQvtGF0YvQvSDRgtGD0LvQtCDRjdGF0LvRjdGN0LQgQmx1ZXRvb3RoLdCzINCw0YHQsNCw0L3QsCDRg9GDLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+ItCQ0YHQsNCw0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiI8eGxpZmY6ZyBpZD0iVE9QSUNfTkFNRSI+JTEkczwveGxpZmY6Zz4g0LzRjdC00Y3Qs9C00Y3Qu9C0INGF0Y3RgNGN0LPQttKv0q/Qu9GN0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b19hcHAiIG1zZ2lkPSIzNjMwMTY3ODM5Mzk4MTU5NjAiPiLQrdC90Y0g0LDQv9C/LdC9INCx0q/RhSDQvNGN0LTRjdCz0LTRjdC70LQg0YXRjdGA0Y3Qs9C20q/Sr9C70Y3RhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfaW1wb3J0YW5jZSIgbXNnaWQ9IjUxOTg1Nzg5ODg5NzgyMzQxNjEiPiLQkdC70L7QutC70L7RgdC+0L0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW1wb3J0YW5jZSIgbXNnaWQ9IjQxMDk5Mjk5ODYxMDcxNDc5MzAiPiLQkdCw0LPQsCDQsNGHINGF0L7Qu9Cx0L7Qs9C00L7Qu9GC0L7QuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiLQrdC90LPQuNC50L0g0LDRhyDRhdC+0LvQsdC+0LPQtNC+0LvRgtC+0LkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoaWdoX2ltcG9ydGFuY2UiIG1zZ2lkPSIxNTI3MDY2MTk1NjE0MDUwMjYzIj4i06jQvdC006nRgCDQsNGHINGF0L7Qu9Cx0L7Qs9C00L7Qu9GC0L7QuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1heF9pbXBvcnRhbmNlIiBtc2dpZD0iNTA4OTAwNTg3MjcxOTU2Mzg5NCI+ItCv0LDRgNCw0LvRgtCw0Lkg0LDRhyDRhdC+0LvQsdC+0LPQtNC+0LvRgtC+0LkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iMjM5NzE5MjY0MjY1Nzg3Mjg3MiI+ItCt0LTQs9GN0Y3RgCDQvNGN0LTRjdCz0LTQu9C40LnQsyDRhdGN0LfRjdGNINGHINGF0LDRgNGD0YPQu9Cw0YXQs9Kv0LkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4i0JzRjdC00Y3Qs9C00LvQuNC50LMg0LbQsNCz0YHQsNCw0LvRgtGL0L0g0LTQvtC+0LQg0YXRjdGB0Y3Qs9GCINC00YPRg9Cz0q/QuSDRhdCw0YDRg9GD0LvQsNGFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9IjQ5MjY1Mjk2MTU5MjA2MTA4MTciPiLQrdC00LPRjdGN0YAg0LzRjdC00Y3Qs9C00LvQuNC50LMg0LTRg9GD0LPSr9C5INGF0LDRgNGD0YPQu9Cw0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+ItCc0Y3QtNGN0LPQtNC70LjQudCzINC20LDQs9GB0LDQsNC70YLRi9C9INGN0YXRjdC90LQg0LTRg9GD0YLQsNC5INGF0LDRgNGD0YPQu9Cw0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4i0JTRjdC70LPRjdGG0Y3QvdC0INGP0LDRgNCw0LvRgtCw0LnQs9Cw0LDRgCDQtNGD0YPRgtCw0Lkg0LPQsNGA0LPQsNGFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX21vcmVfc2V0dGluZ3MiIG1zZ2lkPSI4MTYzMDYyODMzOTY1NTM1NzEiPiLQkdGD0YHQsNC0INGC0L7RhdC40YDQs9C+0L4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiLQlNGD0YPRgdGB0LDQvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9ub25lIiBtc2dpZD0iMjEyMTk1NzkyNjA0MDU0MzE0OCI+ItCl0Y3QstC40LnQvSDTqdC90LPTqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9uaWdodCIgbXNnaWQ9IjU5NDM4MTc2MjIxMDUzMDcwNzIiPiLQqNOp0L3QuNC50L0g06nQvdCz06kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+ItOo0LPTqdCz0LTQvNOp0Lsg06nQvdCz06kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiLSrtC7INC80Y3QtNGN0LPQtNGN0YUg06nQvdCz06kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4i06jQvdCz06nQvdC40Lkg06nTqdGA0YfQu9Op0LvRgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+ItCi0q/RgNCz0Y3QvSDRgtC+0YXQuNGA0LPQvtC+0L3RiyDRhdGN0YHQs9C40LnQsyDRhdCw0YDRg9GD0LvQsNGFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiLTqNCz06nQs9C00LzTqdC7INOp06nRgNGH0LvTqdC70YLQuNC50LMg0LjQtNGN0LLRhdC20q/Sr9C70Y3RhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+ItCl0Y3RgNGN0LPQttKv0q/Qu9GN0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfdGl0bGUiIG1zZ2lkPSI0NzQ2NjY2NTQ1NDgwNTM0NjYzIj4i0KLQvtGF0LjRgNCz0L7QvtCzINCx0LDRgtCw0LvQs9Cw0LDQttGD0YPQu9Cw0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfbWVzc2FnZSIgbXNnaWQ9IjkxMTYwMDEwNjkzOTc5OTY2OTEiPiLQl9Cw0YDQuNC8INOp0L3Qs9Op0L3QuNC5INGC0L7RhdC40YDQs9C+0L4g0Y3QvdGNINGC06nRhdOp06nRgNOp0LzQttC40LnQsyDQsNGI0LjQs9C70LDRhSDQsdC+0LvQvtC80LbQs9Kv0Lkg0LHQvtC70LPQvtC2INCx0L7Qu9C30L7RiNCz0q/QuS4gT0sg0YLQvtCy0YfQu9GD0YPRgNGL0LMg0LTQsNGA0LYg0Y3QtNCz0Y3RjdGAINOp0L3Qs9Op0L3QuNC5INGC0L7RhdC40YDQs9C+0L7QsyDQt9Op0LLRiNOp06nRgNOp0YXQs9Kv0Lkg0LHQvtC7INGN0L3RjSDRgtC+0YXQuNGA0LPQvtC+INC90YwgMTAg0YHQtdC60YPQvdC00YvQvSDQtNCw0YDQsNCwINGI0LjQvdGN0YfQu9GN0LPQtNGN0YUg0LHQvtC70L3Qvi4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbXItcklOL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1tci1ySU4vc3RyaW5ncy54bWwKaW5kZXggMmQ0NjBkOS4uNWQzYTk2ZiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1tci1ySU4vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1tci1ySU4vc3RyaW5ncy54bWwKQEAgLTMwMSw4ICszMDEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+IuCktuCli+Ckp+CkviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IOCkquCljeCksOCkvuCksOCkguCkrSDgpJXgpLDgpKPgpYcg4KS24KSV4KWN4KSvIOCkneCkvuCksuClhyDgpKjgpL7gpLngpYAuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zaG93X2hpc3RvcnlfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNzA2MjA4ODE5NjQ0OTc0NzI0NSI+IuCkheCkp+Ckv+CklSI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciByZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0ICg2MzM3MTU1NjA4MDU1MDYyNDI5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCIgbXNnaWQ9IjYzMzcxNTU2MDgwNTUwNjI0MjkiPiLgpIbgpKPgpJbgpYAgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiLgpJXgpY3gpLfgpYjgpKTgpL/gpJwg4KS14KS/4KSt4KS+4KSc4KS/4KSkIOCkleCksOCkviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X3ZlcnRpY2FsIiBtc2dpZD0iOTA3NTI5MjIzMzY5NjE4MDgxMyI+IuCkheCkqOClgeCksuCkguCkrCDgpLXgpL/gpK3gpL7gpJzgpL/gpKQg4KSV4KSw4KS+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfY3VzdG9tIiBtc2dpZD0iNDE3NzgzNzU5NzUxMzcwMTk0MyI+IuCkuOCkvuCkqOClgeCkleClguCksiDgpLXgpL/gpK3gpL7gpJzgpL/gpKQg4KSV4KSw4KS+Ijwvc3RyaW5nPgpAQCAtMzY1LDcgKzM2NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+IuCkrOClheCkn+CksOClgCDgpKzgpJrgpKTgpJXgpLDgpY3gpKTgpL4g4KSa4KS+4KSy4KWCIOCkhuCkueClhyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiLgpJXgpL7gpLDgpY3gpK/gpKrgpY3gpLDgpKbgpLDgpY3gpLbgpKgg4KSG4KSj4KS/IOCkquCkvuCksOCljeCktuCljeCkteCkreClguCkruClgCDgpKHgpYfgpJ/gpL4g4KSV4KSu4KWAIOCkleCksOCkpOClhyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4i4KSs4KWF4KSf4KSw4KWAIOCkrOCkmuCkpOCkleCksOCljeCkpOCkviDgpKzgpILgpKYg4KSV4KSw4KS+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IuCksuCkquCkteCkv+CksuClh+CksuClgCDgpLjgpL7gpK7gpJfgpY3gpLDgpYAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+Ijx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4g4KSG4KSq4KSy4KWN4oCN4KSv4KS+IOCkuOCljeKAjeCkleCljeCksOClgOCkqOCkteCksCDgpKrgpY3gpLDgpKbgpLDgpY3gpLbgpL/gpKQg4KS54KWL4KSj4KS+4KSw4KWAIOCkquCljeCksOCkpOCljeKAjeCkr+Clh+CklSDgpJfgpYvgpLfgpY3igI3gpJ8g4KSV4KWF4KSq4KWN4oCN4KSa4KSwIOCkleCksOCko+ClhyDgpKrgpY3gpLDgpL7gpLDgpILgpK0g4KSV4KSw4KWH4KSyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fcmVtZW1iZXJfdGV4dCIgbXNnaWQ9IjMxMDM1MTA4ODIxNzI3NDY3NTIiPiLgpKrgpYHgpKjgpY3gpLngpL4g4KSm4KSw4KWN4KS24KS14KWCIOCkqOCkleCkviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNsZWFyX2FsbF9ub3RpZmljYXRpb25zX3RleHQiIG1zZ2lkPSI4MTQxOTI4ODk3NzE0NjI4MjgiPiLgpLjgpLDgpY3gpLUg4KS44KS+4KSrIOCkleCksOCkviI8L3N0cmluZz4KQEAgLTQ1MCw0ICs0NDgsMjggQEAKICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfdGl0bGUiIG1zZ2lkPSI1MDI3MDM3NzA2NTAwNjM1MjY5Ij4i4KSs4KWN4KSy4KWC4KSf4KWB4KSlIOCkuOClgeCksOClgiDgpJXgpLDgpL7gpK/gpJrgpYc/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9tZXNzYWdlIiBtc2dpZD0iOTEwNjU5NTk5MDcwODk4NTM4NSI+IuCkhuCkquCksuCkviDgpJXgpYDgpKzgpYvgpLDgpY3gpKEg4KSG4KSq4KSy4KWN4KSv4KS+IOCkn+ClheCkrOCljeCksuClh+Ckn+CkuOCkuSDgpJXgpKjgpYfgpJXgpY3gpJ8g4KSV4KSw4KSj4KWN4KSv4KS+4KS44KS+4KSg4KWALCDgpIbgpKrgpLLgpY3gpK/gpL7gpLLgpL4g4KSq4KWN4KSw4KSl4KSuIOCkrOCljeCksuClguCkn+ClgeCkpSDgpJrgpL7gpLLgpYIg4KSV4KSw4KSj4KWHIOCkhuCkteCktuCljeCkr+CklSDgpIbgpLngpYcuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9jb25maXJtYXRpb25fb2siIG1zZ2lkPSI2MjU4MDc0MjUwOTQ4MzA5NzE1Ij4i4KSa4KS+4KSy4KWCIOCkleCksOCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX3RvcGljIiBtc2dpZD0iMzY0MTQwMzQ4OTMxODY1OTY2NiI+Ijx4bGlmZjpnIGlkPSJUT1BJQ19OQU1FIj4lMSRzPC94bGlmZjpnPiDgpLjgpYLgpJrgpKjgpL7gpILgpLXgpLAg4KSy4KS+4KSX4KWCIOCkleCksOCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+IuCkr+CkviDgpIXgpYXgpKrgpK7gpKfgpYDgpLIg4KS44KSw4KWN4KS1IOCkuOClguCkmuCkqOCkvuCkguCkteCksCDgpLLgpL7gpJfgpYIg4KSV4KSw4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IuCkheCkteCksOCli+Ckp+Ckv+CkpCDgpJXgpYfgpLLgpYciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW1wb3J0YW5jZSIgbXNnaWQ9IjQxMDk5Mjk5ODYxMDcxNDc5MzAiPiLgpJXgpK7gpYAg4KSu4KS54KSk4KWN4KSk4KWN4KS1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9pbXBvcnRhbmNlIiBtc2dpZD0iODE5MjEwNzY4OTk5NTc0MjY1MyI+IuCkuOCkvuCkruCkvuCkqOCljeCkryDgpK7gpLngpKTgpY3gpKTgpY3gpLUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoaWdoX2ltcG9ydGFuY2UiIG1zZ2lkPSIxNTI3MDY2MTk1NjE0MDUwMjYzIj4i4KS44KSw4KWN4KS14KS+4KSn4KS/4KSVIOCkruCkueCkpOCljeCktSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1heF9pbXBvcnRhbmNlIiBtc2dpZD0iNTA4OTAwNTg3MjcxOTU2Mzg5NCI+IuCkpOCljeCkteCksOCkv+CkpCDgpK7gpLngpKTgpY3gpKTgpY3gpLUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iMjM5NzE5MjY0MjY1Nzg3Mjg3MiI+IuCkr+CkviDgpLjgpYLgpJrgpKjgpL4g4KSV4KSn4KWA4KS54KWAIOCkpuCksOCljeCktuCkteClgiDgpKjgpJXgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4i4KS44KWC4KSa4KSo4KS+IOCkuOClguCkmuClgOCkmuCljeCkr+CkviDgpKTgpLPgpL7gpLbgpYAg4KS24KS+4KSC4KSk4KSq4KSj4KWHIOCkpuCksOCljeCktuCkteCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI0OTI2NTI5NjE1OTIwNjEwODE3Ij4i4KSv4KS+IOCkuOClguCkmuCkqOCkviDgpLbgpL7gpILgpKTgpKrgpKPgpYcg4KSm4KSw4KWN4KS24KS14KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMyMjI2ODAxMzY2MTI0MDgyMjMiPiLgpLjgpYLgpJrgpKjgpL4g4KS44KWC4KSa4KWA4KSa4KWN4KSv4KS+IOCktuClgOCksOCljeCkt+CkuOCljeCkpeCkvuCkqOClgCDgpKbgpLDgpY3gpLbgpLXgpL4g4KSG4KSj4KS/IOCkp+CljeCkteCkqOClgCDgpJrgpL7gpLLgpYIg4KSV4KSw4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iNTIzNjk4NzE3MTkwNDc1NjEzNCI+IuCkuOCljeCkleCljeCksOClgOCkqOCkteCksCDgpKHgpYvgpJXgpL7gpLXgpYLgpKgg4KSq4KS54KS+IOCkhuCko+CkvyDgpKfgpY3gpLXgpKjgpYAg4KSa4KS+4KSy4KWCIOCkleCksOCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9tb3JlX3NldHRpbmdzIiBtc2dpZD0iODE2MzA2MjgzMzk2NTUzNTcxIj4i4KSF4KSn4KS/4KSVIOCkuOClh+Ckn+Ckv+CkguCkl+CljeCknCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9kb25lIiBtc2dpZD0iNTI3OTQyNjA0NzI3MzkzMDE3NSI+IuCkquClguCksOCljeCkoyDgpJ3gpL7gpLLgpYciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiLgpLjgpL7gpK7gpL7gpKjgpY3gpK8g4KSw4KSC4KSXIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+IuCksOCkvuCkpOCljeCksOClgOCkmuClhyDgpLDgpILgpJciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+IuCkuOCkvuCkqOClgeCkleClguCksiDgpLDgpILgpJciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiLgpIXgpJzgpY3gpJ7gpL7gpKQg4KSw4KSC4KSXIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+IuCksOCkguCklyDgpLjgpYHgpKfgpL7gpLDgpKPgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfc2hvd19xcyIgbXNnaWQ9IjE3NjMyNDQzNTQzOTkyNzY2NzkiPiLgpKbgpY3gpLDgpYHgpKQg4KS44KWH4KSf4KS/4KSC4KSX4KWN4KScIOCkn+CkvuCkh+CksiDgpKbgpLDgpY3gpLbgpLXgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9lbmFibGVfY3VzdG9tIiBtc2dpZD0iNjcyOTAwMTMwODIxNzM0NzUwMSI+IuCkuOCkvuCkqOClgeCkleClguCksiDgpLDgpYLgpKrgpL7gpILgpKTgpLDgpKMg4KS44KSV4KWN4KS34KSuIOCkleCksOCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+IuCksuCkvuCkl+ClgiDgpJXgpLDgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfdGl0bGUiIG1zZ2lkPSI0NzQ2NjY2NTQ1NDgwNTM0NjYzIj4i4KS44KWH4KSf4KS/4KSC4KSX4KWN4KSc4KSa4KWAIOCkquClgeCkt+CljeCkn+ClgCDgpJXgpLDgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfbWVzc2FnZSIgbXNnaWQ9IjkxMTYwMDEwNjkzOTc5OTY2OTEiPiLgpJXgpL7gpLngpYAg4KSw4KSC4KSXIOCkuOClh+Ckn+Ckv+CkguCkl+CljeCknCDgpK/gpL4g4KSh4KS/4KS14KWN4KS54KS+4KSH4KS44KSy4KS+IOCkqOCkv+CksOClgeCkquCkr+Cli+Ckl+ClgCDgpJXgpLDgpYIg4KS24KSV4KSk4KS+4KSkLiDgpK/gpL4g4KSw4KSC4KSXIOCkuOClh+Ckn+Ckv+CkguCkl+CljeCknOCkmuClgCDgpKrgpYHgpLfgpY3gpJ/gpYAg4KSV4KSw4KSj4KWN4oCN4KSv4KS+4KS44KS+4KSg4KWAIOCkoOClgOCklSDgpIbgpLngpYcg4KSm4KS+4KSs4KS+IOCkheCkqOCljeCkr+CkpeCkviDgpK/gpL4g4KS44KWH4KSf4KS/4KSC4KSX4KWN4KScIDEwIOCkuOClh+CkleCkguCkpuCkvuCkguCkqOCkguCkpOCksCDgpLDgpYDgpLjgpYfgpJ8g4KS54KWL4KSk4KWA4KSyLiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1tcy1yTVkvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLW1zLXJNWS9zdHJpbmdzLnhtbAppbmRleCAzZmMxZDA1Li5mMGEwMTNjIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLW1zLXJNWS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLW1zLXJNWS9zdHJpbmdzLnhtbApAQCAtMzAxLDggKzMwMSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4iY2FyaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4iVGlkYWsgZGFwYXQgbWVtdWxha2FuIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4iTGFnaSI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciByZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0ICg2MzM3MTU1NjA4MDU1MDYyNDI5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCIgbXNnaWQ9IjYzMzcxNTU2MDgwNTUwNjI0MjkiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gTGFnaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2hvcml6b250YWwiIG1zZ2lkPSI4ODQ4NTE0NDc0NTQzNDI3MzMyIj4iTWVuZGF0YXIgVGVycGlzYWgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF92ZXJ0aWNhbCIgbXNnaWQ9IjkwNzUyOTIyMzM2OTYxODA4MTMiPiJNZW5lZ2FrIFRlcnBpc2FoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfY3VzdG9tIiBtc2dpZD0iNDE3NzgzNzU5NzUxMzcwMTk0MyI+IlRlcnN1YWkgVGVycGlzYWgiPC9zdHJpbmc+CkBAIC0zNjUsNyArMzY0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjM3OTE4NzI2NzUwOTU1ODU5Ij4iUGVuamltYXQgYmF0ZXJpIGRpaGlkdXBrYW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iODIwMzE4Nzg4MTI2NjcyNjkyIj4iTWVuZ3VyYW5na2FuIHByZXN0YXNpIGRhbiBkYXRhIGxhdGFyIGJlbGFrYW5nIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiJNYXRpa2FuIHBlbmppbWF0IGJhdGVyaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJLYW5kdW5nYW4gdGVyc2VtYnVueWkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+Ijx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4gYWthbiBtdWxhIG1lbmdhYmFkaWthbiBzZW11YSB5YW5nIGRpcGFwYXJrYW4gcGFkYSBza3JpbiBhbmRhLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX3JlbWVtYmVyX3RleHQiIG1zZ2lkPSIzMTAzNTEwODgyMTcyNzQ2NzUyIj4iSmFuZ2FuIHR1bmp1a2thbiBsYWdpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+Iktvc29uZ2thbiBzZW11YSI8L3N0cmluZz4KQEAgLTQ1MCw0ICs0NDgsMjggQEAKICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfdGl0bGUiIG1zZ2lkPSI1MDI3MDM3NzA2NTAwNjM1MjY5Ij4iSGlkdXBrYW4gQmx1ZXRvb3RoPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiJVbnR1ayBtZW55YW1idW5na2FuIHBhcGFuIGtla3VuY2kgYW5kYSBkZW5nYW4gdGFibGV0LCBhbmRhIHBlcmx1IG1lbmdoaWR1cGthbiBCbHVldG9vdGggdGVybGViaWggZGFodWx1LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+IkhpZHVwa2FuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4iR3VuYWthbiB1bnR1ayBwZW1iZXJpdGFodWFuIDx4bGlmZjpnIGlkPSJUT1BJQ19OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+Ikd1bmFrYW4gdW50dWsgc2VtdWEgcGVtYmVyaXRhaHVhbiBkYXJpcGFkYSBhcGwgaW5pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IkRpc2VrYXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW1wb3J0YW5jZSIgbXNnaWQ9IjQxMDk5Mjk5ODYxMDcxNDc5MzAiPiJLZXBlbnRpbmdhbiByZW5kYWgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4iS2VwZW50aW5nYW4gYmlhc2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoaWdoX2ltcG9ydGFuY2UiIG1zZ2lkPSIxNTI3MDY2MTk1NjE0MDUwMjYzIj4iS2VwZW50aW5nYW4gdGluZ2dpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4iS2VwZW50aW5nYW4gc2VnZXJhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjIzOTcxOTI2NDI2NTc4NzI4NzIiPiJKYW5nYW4gc2VrYWxpLWthbGkgdHVuanVra2FuIHBlbWJlcml0YWh1YW4gaW5pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+IlR1bmp1a2thbiBwYWRhIGJhaGFnaWFuIGJhd2FoIHNlbmFyYWkgcGVtYmVyaXRhaHVhbiBzZWNhcmEgc2VueWFwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9IjQ5MjY1Mjk2MTU5MjA2MTA4MTciPiJUdW5qdWtrYW4gcGVtYmVyaXRhaHVhbiBpbmkgc2VjYXJhIHNlbnlhcCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4iVHVuanVra2FuIHBhZGEgYmFoYWdpYW4gYXRhcyBzZW5hcmFpIHBlbWJlcml0YWh1YW4gZGFuIGJ1bnlpa2FuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iNTIzNjk4NzE3MTkwNDc1NjEzNCI+IkludGFpIHBhZGEgc2tyaW4gZGFuIGJ1bnlpa2FuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX21vcmVfc2V0dGluZ3MiIG1zZ2lkPSI4MTYzMDYyODMzOTY1NTM1NzEiPiJMYWdpIHRldGFwYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiJTZWxlc2FpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25vbmUiIG1zZ2lkPSIyMTIxOTU3OTI2MDQwNTQzMTQ4Ij4iV2FybmEgYmlhc2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4iV2FybmEgbWFsYW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+Ildhcm5hIHRlcnN1YWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiJXYXJuYSB0aWRhayBkaWtldGFodWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4iUGVuZ3ViYWhzdWFpYW4gd2FybmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfc2hvd19xcyIgbXNnaWQ9IjE3NjMyNDQzNTQzOTkyNzY2NzkiPiJUdW5qdWtrYW4ganViaW4gVGV0YXBhbiBQYW50YXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9lbmFibGVfY3VzdG9tIiBtc2dpZD0iNjcyOTAwMTMwODIxNzM0NzUwMSI+IkRheWFrYW4gamVsbWFhbiB0ZXJzdWFpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4iR3VuYWthbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiJTYWhrYW4gdGV0YXBhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+IlNlc2V0ZW5nYWggdGV0YXBhbiB3YXJuYSBib2xlaCBtZW5qYWRpa2FuIHBlcmFudGkgaW5pIHRpZGFrIGRhcGF0IGRpZ3VuYWthbi4gS2xpayBPSyB1bnR1ayBtZW5nZXNhaGthbiB0ZXRhcGFuIHdhcm5hIGluaSwgamlrYSB0aWRhaywgdGV0YXBhbiBpbmkgYWthbiBkaXRldGFwa2FuIHNlbXVsYSBzZWxlcGFzIDEwIHNhYXQuIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLW15LXJNTS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbXktck1NL3N0cmluZ3MueG1sCmluZGV4IDY5ZGNjNzcuLjc1MDA4Y2IgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbXktck1NL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbXktck1NL3N0cmluZ3MueG1sCkBAIC0zMDEsOCArMzAxLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2VhcmNoX2Jhcl9sYWJlbCIgbXNnaWQ9IjgwNzQ5OTc0MDAxODc4MzY2NzciPiLhgJvhgL7hgKzhgJbhgL3hgLHhgJvhgJThgLoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xhdW5jaF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMjk2OTI4NzgzODEyMDU1MDUwNiI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDhgIDhgK3hgK8g4YCZ4YCF4YCU4YCt4YCv4YCE4YC64YCV4YCr4YGLIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zaG93X2hpc3RvcnlfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNzA2MjA4ODE5NjQ0OTc0NzI0NSI+IuGAlOGAseGArOGAgOGAuuGAkeGAleGAuiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciByZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0ICg2MzM3MTU1NjA4MDU1MDYyNDI5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCIgbXNnaWQ9IjYzMzcxNTU2MDgwNTUwNjI0MjkiPiLhgJThgLHhgKzhgIDhgLrhgJHhgJXhgLogPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOGAgeGAryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2hvcml6b250YWwiIG1zZ2lkPSI4ODQ4NTE0NDc0NTQzNDI3MzMyIj4i4YCb4YCx4YCV4YC84YCE4YC64YCK4YCuIOGAleGAreGAr+GAhOGAuuGAuOGAmeGAiuGAuiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X3ZlcnRpY2FsIiBtc2dpZD0iOTA3NTI5MjIzMzY5NjE4MDgxMyI+IuGAkuGAseGAq+GAhOGAuuGAnOGAreGAr+GAgOGAuuGAleGAreGAr+GAhOGAuuGAuOGAmeGAiuGAuiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2N1c3RvbSIgbXNnaWQ9IjQxNzc4Mzc1OTc1MTM3MDE5NDMiPiLhgIXhgK3hgJDhgLrhgIDhgLzhgK3hgK/hgIDhgLog4YCV4YCt4YCv4YCE4YC64YC44YCZ4YCK4YC6Ijwvc3RyaW5nPgpAQCAtMzY1LDcgKzM2NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+IuGAmOGAgOGAuuGAkeGAm+GAriDhgIHhgLvhgL3hgLHhgJDhgKzhgJ7hgLAg4YCW4YC94YCE4YC34YC64YCR4YCs4YC4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+IuGAnOGAr+GAleGAuuGAgOGAreGAr+GAhOGAuuGAmeGAvuGAr+GAgOGAreGAryDhgJzhgLvhgL7hgLHhgKzhgLfhgIHhgLvhgJzhgLvhgIDhgLog4YCU4YCx4YCs4YCA4YC64YCB4YC2IOGAkuGAseGAkOGArOGAgOGAreGAryDhgIDhgJThgLfhgLrhgJ7hgJDhgLrhgJ7hgIrhgLoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl9hY3Rpb25fdGV4dCIgbXNnaWQ9IjEwOTE1ODY1ODIzODExMDM4MiI+IuGAmOGAgOGAuuGAkeGAm+GAriDhgIHhgLvhgL3hgLHhgJDhgKzhgJnhgL7hgK/hgIDhgK3hgK8g4YCV4YCt4YCQ4YC64YCR4YCs4YC44YCb4YCU4YC6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IuGAoeGAgOGAvOGAseGArOGAhOGAuuGAuOGAoeGAm+GArOGAmeGAu+GArOGAuCDhgJ3hgL7hgIDhgLrhgJHhgKzhgLgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+Ijx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4g4YCAIOGAnuGAhOGAuuGBjyDhgJnhgLvhgIDhgLrhgJThgL7hgKzhgJXhgLzhgIThgLog4YCV4YCx4YCr4YC64YCZ4YC+4YCsIOGAleGAvOGAnuGAkeGArOGAuOGAnuGAiuGAt+GAuiDhgKHhgJvhgKzhgJDhgK3hgK/hgIThgLrhgLjhgIDhgK3hgK8g4YCF4YCQ4YCE4YC6IOGAluGAmeGAuuGAuOGAmuGAsOGAmeGAiuGAuuGBiyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fcmVtZW1iZXJfdGV4dCIgbXNnaWQ9IjMxMDM1MTA4ODIxNzI3NDY3NTIiPiLhgJThgLHhgKzhgIDhgLrhgJHhgJXhgLog4YCZ4YCV4YC84YCV4YCr4YCU4YC+4YCE4YC34YC6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+IuGAoeGArOGAuOGAnOGAr+GAtuGAuCDhgJvhgL7hgIThgLrhgLjhgJzhgIThgLrhgLjhgJvhgJThgLoiPC9zdHJpbmc+CkBAIC00NTAsNCArNDQ4LDI4IEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+IuGAmOGAnOGAsOGAuOGAkOGAr+GAnuGAuiDhgJbhgL3hgIThgLfhgLrhgJvhgJnhgJzhgKzhgLjhgYsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX21lc3NhZ2UiIG1zZ2lkPSI5MTA2NTk1OTkwNzA4OTg1Mzg1Ij4i4YCA4YCu4YC44YCY4YCv4YCQ4YC64YCA4YCt4YCvIOGAkOGAleGAuuGAmOGAnOGAgOGAuuGAlOGAvuGAhOGAt+GAuiDhgIHhgLvhgK3hgJDhgLrhgIbhgIDhgLrhgJvhgJThgLrhgYog4YCV4YCZ4YCR4YCm4YC44YCF4YC94YCsIOGAmOGAnOGAsOGAuOGAkOGAr+GAnuGAuuGAgOGAreGAryDhgJbhgL3hgIThgLfhgLrhgJXhgKvhgYsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiLhgJbhgL3hgIThgLfhgLrhgJXhgKsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiLhgJ7hgJDhgK3hgJXhgLHhgLjhgIHhgLvhgIDhgLogPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+IOGAgeGAr+GAnuGAreGAr+GAt+GAnuGAgOGAuuGAm+GAseGArOGAgOGAuuGAheGAseGAleGAqyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+IuGApOGAoeGAgOGAuuGAleGAuuGAmeGAviDhgJ7hgJDhgK3hgJXhgLHhgLjhgIHhgLvhgIDhgLrhgJnhgLvhgKzhgLjhgKHhgKzhgLjhgJzhgK/hgLbhgLjhgJ7hgK3hgK/hgLcg4YCe4YCA4YC64YCb4YCx4YCs4YCA4YC64YCF4YCx4YCV4YCrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IuGAleGAreGAkOGAuuGAhuGAreGAr+GAt+GAkeGArOGAuOGAnuGAiuGAuiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbXBvcnRhbmNlIiBtc2dpZD0iNDEwOTkyOTk4NjEwNzE0NzkzMCI+IuGAoeGAlOGAiuGAuuGAuOGAhOGAmuGAuuGAnuGArCDhgKHhgJvhgLHhgLjhgJXhgKvhgJ7hgIrhgLoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4i4YCe4YCs4YCZ4YCU4YC64YCe4YCsIOGAoeGAm+GAseGAuOGAleGAq+GAnuGAiuGAuiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiLhgKHhgJzhgL3hgJThgLrhgKHhgJvhgLHhgLjhgJXhgKvhgJ7hgIrhgLoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfaW1wb3J0YW5jZSIgbXNnaWQ9IjUwODkwMDU4NzI3MTk1NjM4OTQiPiLhgKHhgJvhgLHhgLjhgJDhgIDhgLzhgK7hgLgg4YCh4YCb4YCx4YC44YCV4YCr4YCe4YCK4YC6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjIzOTcxOTI2NDI2NTc4NzI4NzIiPiLhgKThgJ7hgJDhgK3hgJXhgLHhgLjhgIHhgLvhgIDhgLrhgJnhgLvhgKzhgLjhgIDhgK3hgK8g4YCY4YCa4YC64YCQ4YCx4YCs4YC34YCZ4YC+4YCZ4YCV4YC84YCV4YCr4YCU4YC+4YCE4YC34YC6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+IuGAnuGAkOGAreGAleGAseGAuOGAgeGAu+GAgOGAuuGAheGArOGAm+GAhOGAuuGAuOGBjyDhgKHhgLHhgKzhgIDhgLrhgIbhgK/hgLbhgLjhgJDhgL3hgIThgLog4YCQ4YCt4YCQ4YC64YCQ4YCG4YCt4YCQ4YC64YCV4YC84YCV4YCrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9IjQ5MjY1Mjk2MTU5MjA2MTA4MTciPiLhgKThgJ7hgJDhgK3hgJXhgLHhgLjhgIHhgLvhgIDhgLrhgJnhgLvhgKzhgLjhgIDhgK3hgK8g4YCQ4YCt4YCQ4YC64YCQ4YCG4YCt4YCQ4YC64YCV4YC84YCV4YCrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMyMjI2ODAxMzY2MTI0MDgyMjMiPiLhgJ7hgJDhgK3hgJXhgLHhgLjhgIHhgLvhgIDhgLrhgIXhgKzhgJvhgIThgLrhgLjhgJnhgLvhgKzhgLjhgY8g4YCR4YCt4YCV4YC64YCQ4YC94YCE4YC64YCV4YC84YCA4YCsIOGAoeGAnuGAtuGAluGAveGAhOGAt+GAuuGAleGAqyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjUyMzY5ODcxNzE5MDQ3NTYxMzQiPiLhgJnhgLvhgIDhgLrhgJThgL7hgKzhgJXhgLzhgIThgLrhgJXhgLHhgKvhgLrhgJ7hgK3hgK/hgLcg4YCW4YCx4YCs4YC64YCV4YC84YCA4YCsIOGAoeGAnuGAtuGAluGAveGAhOGAt+GAuuGAleGAqyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9tb3JlX3NldHRpbmdzIiBtc2dpZD0iODE2MzA2MjgzMzk2NTUzNTcxIj4i4YCU4YCx4YCs4YCA4YC64YCR4YCV4YC6IOGAhuGAgOGAuuGAkOGAhOGAuuGAmeGAu+GArOGAuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9kb25lIiBtc2dpZD0iNTI3OTQyNjA0NzI3MzkzMDE3NSI+IuGAleGAvOGAruGAuOGAleGAq+GAleGAvOGAriI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9ub25lIiBtc2dpZD0iMjEyMTk1NzkyNjA0MDU0MzE0OCI+IuGAleGAr+GAtuGAmeGAvuGAlOGAuiDhgKHhgJvhgLHhgKzhgIThgLrhgJnhgLvhgKzhgLgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4i4YCKIOGAoeGAm+GAseGArOGAhOGAuuGAmeGAu+GArOGAuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4i4YCF4YCt4YCQ4YC64YCA4YC84YCt4YCv4YCA4YC6IOGAoeGAm+GAseGArOGAhOGAuuGAmeGAu+GArOGAuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF91bmtub3duIiBtc2dpZD0iMjcwOTIwMjEwNDI1NjI2NTEwNyI+IuGAmeGAnuGAreGAnuGAiuGAt+GAuiDhgKHhgJvhgLHhgKzhgIThgLrhgJnhgLvhgKzhgLgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4i4YCh4YCb4YCx4YCs4YCE4YC6IOGAmeGAveGAmeGAuuGAuOGAmeGAtuGAmeGAvuGAryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+IuGAoeGAmeGAvOGAlOGAuiDhgIbhgIDhgLrhgJDhgIThgLog4YCc4YCx4YC44YCR4YCx4YCs4YCE4YC34YC64YCA4YC94YCA4YC64YCA4YCt4YCvIOGAleGAvOGAleGAqyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4i4YCF4YCt4YCQ4YC64YCA4YC84YCt4YCv4YCA4YC6IOGAleGAvOGAseGArOGAhOGAuuGAuOGAnOGAsuGAmeGAvuGAr+GAgOGAreGAryDhgJbhgL3hgIThgLfhgLrhgJXhgKsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9hcHBseSIgbXNnaWQ9IjkyMTI2MDIwMTI2NDEwMzQyODMiPiLhgKHhgJ7hgK/hgLbhgLjhgJXhgLzhgK/hgJXhgKsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfdGl0bGUiIG1zZ2lkPSI0NzQ2NjY2NTQ1NDgwNTM0NjYzIj4i4YCG4YCA4YC64YCQ4YCE4YC64YCZ4YC74YCs4YC44YCA4YCt4YCvIOGAoeGAkOGAiuGAuuGAleGAvOGAr+GAleGAqyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+IuGAoeGAgeGAu+GAreGAr+GAt+GAnuGAseGArCDhgKHhgJvhgLHhgKzhgIThgLrhgIbhgIDhgLrhgJDhgIDhgLrhgJnhgLvhgKzhgLjhgIAg4YCk4YCA4YCt4YCb4YCt4YCa4YCs4YCA4YCt4YCvIOGAnuGAr+GAtuGAuOGAmeGAm+GAoeGAseGArOGAhOGAuiDhgJzhgK/hgJXhgLrhgJXhgIXhgLrhgJThgK3hgK/hgIThgLrhgJXhgKvhgJ7hgIrhgLrhgYsg4YCk4YCh4YCb4YCx4YCs4YCE4YC6IOGAhuGAgOGAuuGAkOGAhOGAuuGAmeGAu+GArOGAuOGAgOGAreGAryDhgKHhgJDhgIrhgLrhgJXhgLzhgK/hgJvhgJThgLog4YCh4YCt4YCv4YCA4YCx4YCA4YCt4YCvIOGAlOGAvuGAreGAleGAuuGAleGAq+GBiiDhgJ7hgK3hgK/hgLfhgJnhgJ/hgK/hgJDhgLog4YCk4YCG4YCA4YC64YCQ4YCE4YC64YCZ4YC74YCs4YC44YCA4YCt4YCvIOGBgeGBgCDhgIXhgIDhgLnhgIDhgJThgLfhgLog4YCh4YCA4YC84YCs4YCQ4YC94YCE4YC6IOGAleGAvOGAlOGAuuGAiuGAvuGAreGAnOGAreGAr+GAgOGAuuGAleGAq+GAmeGAiuGAuuGBiyI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1uYi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbmIvc3RyaW5ncy54bWwKaW5kZXggOTQ2NTNjZi4uMjk1YTQ5YSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1uYi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLW5iL3N0cmluZ3MueG1sCkBAIC0zMDEsOCArMzAxLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2VhcmNoX2Jhcl9sYWJlbCIgbXNnaWQ9IjgwNzQ5OTc0MDAxODc4MzY2NzciPiJTw7hrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sYXVuY2hfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjI5NjkyODc4MzgxMjA1NTA1MDYiPiJLdW5uZSBpa2tlIHN0YXJ0ZSA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zaG93X2hpc3RvcnlfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNzA2MjA4ODE5NjQ0OTc0NzI0NSI+Ik1lciI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciByZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0ICg2MzM3MTU1NjA4MDU1MDYyNDI5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCIgbXNnaWQ9IjYzMzcxNTU2MDgwNTUwNjI0MjkiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gdGlsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiJEZWwgaG9yaXNvbnRhbHQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF92ZXJ0aWNhbCIgbXNnaWQ9IjkwNzUyOTIyMzM2OTYxODA4MTMiPiJEZWwgdmVydGlrYWx0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfY3VzdG9tIiBtc2dpZD0iNDE3NzgzNzU5NzUxMzcwMTk0MyI+IkRlbCB0aWxwYXNzZXQiPC9zdHJpbmc+CkBAIC0zNjUsNyArMzY0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjM3OTE4NzI2NzUwOTU1ODU5Ij4iQmF0dGVyaXNwYXJpbmcgZXIgcMOlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+IlJlZHVzZXJlciB5dGVsc2VuIG9nIGJlZ3JlbnNlciBiYWtncnVubnNkYXRhZW5lIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiJTbMOlIGF2IGJhdHRlcmlzcGFyaW5nIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IklubmhvbGRldCBlciBza2p1bHQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+Ijx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4gdGFyIG9wcCBhbHQgc29tIHZpZXMgcMOlIHNramVybWVuIGRpbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX3JlbWVtYmVyX3RleHQiIG1zZ2lkPSIzMTAzNTEwODgyMTcyNzQ2NzUyIj4iSWtrZSB2aXMgaWdqZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4iRmplcm4gYWx0Ijwvc3RyaW5nPgpAQCAtNDUwLDQgKzQ0OCwyOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiJWaWwgZHUgc2zDpSBww6UgQmx1ZXRvb3RoPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiJGb3Igw6Uga29ibGUgdGFzdGF0dXJldCB0aWwgbmV0dGJyZXR0ZXQgZGl0dCBtw6UgZHUgZsO4cnN0IHNsw6UgcMOlIEJsdWV0b290aC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiJTbMOlIHDDpSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX3RvcGljIiBtc2dpZD0iMzY0MTQwMzQ4OTMxODY1OTY2NiI+IkJydWsgZm9yIHZhcnNsZXIgZm9yIDx4bGlmZjpnIGlkPSJUT1BJQ19OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+IkJydWsgZm9yIGFsbGUgdmFyc2xlbmUgZnJhIGRlbm5lIGFwcGVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IkJsb2trZXJ0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4iTGF2IHZpa3RpZ2hldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiJWYW5saWcgdmlrdGlnaGV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+IkjDuHkgdmlrdGlnaGV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4iU3bDpnJ0IGjDuHkgdmlrdGlnaGV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjIzOTcxOTI2NDI2NTc4NzI4NzIiPiJBbGRyaSB2aXMgZGlzc2UgdmFyc2xlbmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4iVmlzIG5lZGVyc3QgcMOlIHZhcnNlbGxpc3RlbiB1dGVuIGx5ZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI0OTI2NTI5NjE1OTIwNjEwODE3Ij4iVmlzIGRpc3NlIHZhcnNsZW5lIHV0ZW4gbHlkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMyMjI2ODAxMzY2MTI0MDgyMjMiPiJWaXMgw7h2ZXJzdCBww6UgdmFyc2VsbGlzdGVuIG1lZCBseWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4iVmlzIGZvcnQgcMOlIHNramVybWVuIG1lZCBseWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+IkZsZXJlIGlubnN0aWxsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiJGZXJkaWciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiJOb3JtYWxlIGZhcmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9uaWdodCIgbXNnaWQ9IjU5NDM4MTc2MjIxMDUzMDcwNzIiPiJOYXR0ZmFyZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X2N1c3RvbSIgbXNnaWQ9IjM2NTU1NzY0OTIzMjIyOTg3MTMiPiJTcGVzaWFsdGlscGFzc2VkZSBmYXJnZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiJVa2plbnRlIGZhcmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3RyYW5zZm9ybSIgbXNnaWQ9IjY5ODU0NjA0MDgwNzkwODYwOTAiPiJGYXJnZW1vZGlmaXNlcmluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+IlZpcyBydXRlbiBmb3IgaHVydGlnaW5uc3RpbGxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4iU2zDpSBww6Ugc3Blc2lhbHRpbHBhc3NldCBmb3J2YW5kbGluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+IkJydWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfdGl0bGUiIG1zZ2lkPSI0NzQ2NjY2NTQ1NDgwNTM0NjYzIj4iQmVrcmVmdCBpbm5zdGlsbGluZ2VuZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+Ik5vZW4gZmFyZ2Vpbm5zdGlsbGluZ2VyIGthbiBnasO4cmUgZGVubmUgZW5oZXRlbiB1YnJ1a2VsaWcuIEtsaWtrIHDDpSBPSyBmb3Igw6UgYmVrcmVmdGUgZGlzc2UgZmFyZ2Vpbm5zdGlsbGluZ2VuZSwgZWxsZXJzIGJsaXIgZGUgdGlsYmFrZXN0aWx0IGV0dGVyIHRpIHNla3VuZGVyLiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1uZS1yTlAvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLW5lLXJOUC9zdHJpbmdzLnhtbAppbmRleCBiYzRmMWE5Li5kMGFhNTEwIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLW5lLXJOUC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLW5lLXJOUC9zdHJpbmdzLnhtbApAQCAtMzY0LDcgKzM2NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+IuCkrOCljeCkr+CkvuCkn+CljeCksOCkvyDgpLjgpYfgpK3gpLAg4KSa4KS+4KSy4KWBIOCkmyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiLgpKrgpY3gpLDgpKbgpLDgpY3gpLbgpKgg4KSwIOCkquClg+Ckt+CljeCkoOCkreClguCkruCkvyDgpKHgpYfgpJ/gpL4g4KSY4KSf4KS+4KSJ4KSB4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiLgpKzgpY3gpK/gpL7gpJ/gpY3gpLDgpYAg4KSs4KSa4KSkIOCkrOCkqOCljeCkpiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4i4KSy4KWB4KSV4KWH4KSV4KS+IOCkuOCkvuCkruCkvuCkl+CljeCksOClgOCkueCksOClgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fZGlhbG9nX3RleHQiIG1zZ2lkPSIzMDcxNDMxMDI1NDQ4MjE4OTI4Ij4iPHhsaWZmOmcgaWQ9IkFQUF9TRUVLSU5HX1BFUk1JU1NJT04iPiVzPC94bGlmZjpnPiDgpLLgpYcg4KSG4KSr4KWN4KSo4KWLIOCkuOCljeCkleCljeCksOClgOCkqOCkruCkviDgpKrgpY3gpLDgpKbgpLDgpY3gpLbgpL/gpKQg4KS54KWB4KSo4KWHIOCkuOCkrOCliCDgpJbgpL/gpJrgpY3gpKgg4KS24KWB4KSw4KWCIOCkl+CksOCljeCkqOClh+Ckm+ClpCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fcmVtZW1iZXJfdGV4dCIgbXNnaWQ9IjMxMDM1MTA4ODIxNzI3NDY3NTIiPiLgpKvgpYfgpLDgpL8g4KSo4KSm4KWH4KSW4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+IuCkuOCkrOCliCDgpLngpJ/gpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CkBAIC00NDksNCArNDQ4LDI4IEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+IuCkrOCljeCksuClgeCkn+ClgeCkpSDgpLjgpJXgpY3gpLDgpL/gpK8g4KSq4KS+4KSw4KWN4KSo4KWHIOCkueCliz8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX21lc3NhZ2UiIG1zZ2lkPSI5MTA2NTk1OTkwNzA4OTg1Mzg1Ij4i4KSG4KSr4KWN4KSo4KWLIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+Ckn+CkuOCkgeCklyDgpJXgpL/gpKzgpYvgpLDgpY3gpKEg4KSc4KWL4KSh4KWN4KSoLCDgpKrgpLngpL/gpLLgpYcg4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkrOCljeCksuClgeCkn+ClgeCkpSDgpLjgpJXgpY3gpLDgpL/gpK8g4KSX4KSw4KWN4KSo4KWB4KSq4KSw4KWN4KSb4KWkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9jb25maXJtYXRpb25fb2siIG1zZ2lkPSI2MjU4MDc0MjUwOTQ4MzA5NzE1Ij4i4KS44KSV4KWN4KSw4KS/4KSvIOCkquCkvuCksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX3RvcGljIiBtc2dpZD0iMzY0MTQwMzQ4OTMxODY1OTY2NiI+Ijx4bGlmZjpnIGlkPSJUT1BJQ19OQU1FIj4lMSRzPC94bGlmZjpnPiDgpLjgpYLgpJrgpKjgpL7gpLngpLDgpYLgpK7gpL4g4KSy4KS+4KSX4KWCIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+IuCkr+CliyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpL4g4KS44KSs4KWIIOCkuOClguCkmuCkqOCkvuCkueCksOClguCkruCkviDgpLLgpL7gpJfgpYIg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IuCksOCli+CkleCkv+Ckr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbXBvcnRhbmNlIiBtc2dpZD0iNDEwOTkyOTk4NjEwNzE0NzkzMCI+IuCkqOCljeCkr+ClguCkqCDgpK7gpLngpKTgpY3gpKTgpY3gpLUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4i4KS44KS+4KSu4KS+4KSo4KWN4KSvIOCkruCkueCkpOCljeCkpOCljeCktSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiLgpIngpJrgpY3gpJog4KSu4KS54KSk4KWN4KSk4KWN4KS1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4i4KSc4KSw4KWC4KSw4KWAIOCkruCkueCkpOCljeCkpOCljeCktSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4i4KSv4KWAIOCkuOClguCkmuCkqOCkvuCkueCksOClgiDgpJXgpLngpL/gpLLgpY3gpK/gpYgg4KSo4KSm4KWH4KSW4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+IuCkuOClguCkmuClgOCkleCliyDgpKvgpYfgpKbgpK7gpL4g4KSs4KS/4KSo4KS+IOCkhuCkteCkvuCknCDgpKbgpYfgpJbgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+IuCkr+ClgCDgpLjgpYLgpJrgpKjgpL7gpLngpLDgpYIg4KSs4KS/4KSo4KS+IOCkhuCkteCkvuCknCDgpKbgpYfgpJbgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+IuCkuOClguCkmuCkqOCkviDgpLjgpYLgpJrgpYDgpJXgpYsg4KS24KWA4KSw4KWN4KS34KSu4KS+IOCkpuClh+CkluCkvuCkieCkqOClgeCkueCli+CkuOCljSDgpLAg4KSG4KS14KS+4KScIOCkqOCkv+CkleCkvuCksuCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjUyMzY5ODcxNzE5MDQ3NTYxMzQiPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKjgpK7gpL4g4KS54KWH4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIOCksCDgpIbgpLXgpL7gpJwg4KSo4KS/4KSV4KS+4KSy4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX21vcmVfc2V0dGluZ3MiIG1zZ2lkPSI4MTYzMDYyODMzOTY1NTM1NzEiPiLgpKXgpKog4KS44KWH4KSf4KS/4KSZ4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4i4KS44KSu4KWN4KSq4KSo4KWN4oCN4KSoIOCkreCkr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9ub25lIiBtc2dpZD0iMjEyMTk1NzkyNjA0MDU0MzE0OCI+IuCkuOCkvuCkruCkvuCkqOCljeCkryDgpLDgpJngpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4i4KSw4KS+4KSk4KWN4KSw4KWAIOCksOCkmeCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4i4KSF4KSo4KWB4KSV4KWC4KSy4KSoIOCksOCkmeCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF91bmtub3duIiBtc2dpZD0iMjcwOTIwMjEwNDI1NjI2NTEwNyI+IuCkheCknOCljeCknuCkvuCkpCDgpLDgpJngpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4i4KSw4KSZIOCkquCksOCkv+CkruCkvuCksOCljeCknOCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+IuCkpuCljeCksOClgeCkpCDgpLjgpYfgpJ/gpL/gpJkg4KSf4KS+4KSH4KSyIOCkpuClh+CkluCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4i4KSF4KSo4KWB4KSV4KWC4KSy4KSoIOCksOClguCkquCkvuCkqOCljeCkpOCksOCkoyDgpLjgpJXgpY3gpLDgpL/gpK8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4i4KSy4KS+4KSX4KWCIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiLgpLjgpYfgpJ/gpL/gpJngpLngpLDgpYLgpJXgpYsg4KSq4KWB4KS34KWN4KSf4KS/IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+IuCkleClh+CkueClgCDgpLDgpJkg4KS44KWH4KSf4KS/4KSZ4KS54KSw4KWC4KSy4KWHIOCkr+CkuCDgpK/gpKjgpY3gpKTgpY3gpLDgpLLgpL7gpIgg4KSF4KSo4KWB4KSq4KSv4KWL4KSX4KWAIOCkrOCkqOCkvuCkieCkqCDgpLjgpJXgpY3gpJvgpKjgpY3gpaQg4KSv4KWAIOCksOCkmSDgpLjgpYfgpJ/gpL/gpJngpLngpLDgpYIg4KSq4KWB4KS34KWN4KSf4KS/IOCkl+CksOCljeCkqCDgpKDgpYDgpJUg4KSbIOCkruCkviDgpJXgpY3gpLLgpL/gpJUg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNLCDgpIXgpKjgpY3gpK/gpKXgpL4g4KSv4KWAIOCkuOClh+Ckn+Ckv+CkmeCkueCksOClgiDgpafgpaYg4KS44KWH4KSV4KWH4KSj4KWN4KSh4KSq4KSb4KS/IOCksOCkv+CkuOClh+CknyDgpLngpYHgpKjgpYfgpJvgpKjgpY3gpaQiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbmwvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLW5sL3N0cmluZ3MueG1sCmluZGV4IDYyY2VmMGYuLjc1ODEyYWQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbmwvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1ubC9zdHJpbmdzLnhtbApAQCAtMzAxLDggKzMwMSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4iem9la2VuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sYXVuY2hfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjI5NjkyODc4MzgxMjA1NTA1MDYiPiJLYW4gPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IG5pZXQgc3RhcnRlbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4iTWVlciI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciByZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0ICg2MzM3MTU1NjA4MDU1MDYyNDI5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCIgbXNnaWQ9IjYzMzcxNTU2MDgwNTUwNjI0MjkiPiJOb2cgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGFuZGVyZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2hvcml6b250YWwiIG1zZ2lkPSI4ODQ4NTE0NDc0NTQzNDI3MzMyIj4iSG9yaXpvbnRhYWwgc3BsaXRzZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF92ZXJ0aWNhbCIgbXNnaWQ9IjkwNzUyOTIyMzM2OTYxODA4MTMiPiJWZXJ0aWNhYWwgc3BsaXRzZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4iQWFuZ2VwYXN0IHNwbGl0c2VuIjwvc3RyaW5nPgpAQCAtMzY1LDcgKzM2NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+IkFjY3ViZXNwYXJpbmcgaXMgaW5nZXNjaGFrZWxkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+IlZlcm1pbmRlcnQgZGUgcHJlc3RhdGllcyBlbiBhY2h0ZXJncm9uZGdlZ2V2ZW5zIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiJBY2N1YmVzcGFyaW5nIHVpdHNjaGFrZWxlbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJJbmhvdWQgdmVyYm9yZ2VuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiI8eGxpZmY6ZyBpZD0iQVBQX1NFRUtJTkdfUEVSTUlTU0lPTiI+JXM8L3hsaWZmOmc+IGdhYXQgYWxsZXMgdmFzdGxlZ2dlbiBkYXQgd29yZHQgd2VlcmdlZ2V2ZW4gb3AgamUgc2NoZXJtLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fcmVtZW1iZXJfdGV4dCIgbXNnaWQ9IjMxMDM1MTA4ODIxNzI3NDY3NTIiPiJOaWV0IG9wbmlldXcgd2VlcmdldmVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+IkFsbGVzIHdpc3NlbiI8L3N0cmluZz4KQEAgLTQwNyw3ICs0MDUsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcmVzZXRfY29uZmlybWF0aW9uX2J1dHRvbiIgbXNnaWQ9IjI2NjAzMzkxMDE4NjgzNjc1MTUiPiJWZXJiZXJnZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9wcm9tcHRfbWVzc2FnZSIgbXNnaWQ9IjkxODY4MDk0NzQzMzM4OTExMCI+Ijx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4gd2lsIGhldCB2b2x1bWVkaWFsb29ndmVuc3RlciB6aWpuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX3Byb21wdF9hbGxvdyIgbXNnaWQ9Ijc5NTQzOTY5MDI0ODIyMjg3ODYiPiJUb2VzdGFhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX3Byb21wdF9kZW55IiBtc2dpZD0iNTcyMDY2MzY0MzQxMTY5NjczMSI+IkFmd2lqemVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfcHJvbXB0X2RlbnkiIG1zZ2lkPSI1NzIwNjYzNjQzNDExNjk2NzMxIj4iV2VpZ2VyZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI0OTA2NzcwMTI2MzQ1OTEwOTU1Ij4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiBpcyBoZXQgdm9sdW1lZGlhbG9vZ3ZlbnN0ZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjE4MjY4ODk3MDUwOTU3Njg2NTYiPiJUaWsgaGllcm9wIG9tIGhldCBvcmlnaW5lZWwgdGUgaGVyc3RlbGxlbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24iIG1zZ2lkPSI2ODQ2NDAyMzc4MTAwMTQ4Nzg5Ij4iLCAiPC9zdHJpbmc+CkBAIC00NTAsNCArNDQ4LDI4IEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+IkJsdWV0b290aCBpbnNjaGFrZWxlbj8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX21lc3NhZ2UiIG1zZ2lkPSI5MTA2NTk1OTkwNzA4OTg1Mzg1Ij4iQWxzIGplIGplIHRvZXRzZW5ib3JkIHdpbHQgdmVyYmluZGVuIG1ldCBqZSB0YWJsZXQsIG1vZXQgamUgZWVyc3QgQmx1ZXRvb3RoIGluc2NoYWtlbGVuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+Ikluc2NoYWtlbGVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4iVG9lcGFzc2VuIG9wIG1lbGRpbmdlbiB2b29yIDx4bGlmZjpnIGlkPSJUT1BJQ19OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+IlRvZXBhc3NlbiBvcCBhbGxlIG1lbGRpbmdlbiB2YW4gZGV6ZSBhcHAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX2ltcG9ydGFuY2UiIG1zZ2lkPSI1MTk4NTc4OTg4OTc4MjM0MTYxIj4iR2VibG9ra2VlcmQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW1wb3J0YW5jZSIgbXNnaWQ9IjQxMDk5Mjk5ODYxMDcxNDc5MzAiPiJLbGVpbiBiZWxhbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4iTm9ybWFhbCBiZWxhbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoaWdoX2ltcG9ydGFuY2UiIG1zZ2lkPSIxNTI3MDY2MTk1NjE0MDUwMjYzIj4iR3Jvb3QgYmVsYW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4iVXJnZW50IGJlbGFuZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4iRGV6ZSBtZWxkaW5nZW4gbm9vaXQgd2VlcmdldmVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+Ik9uZGVyIGFhbiBkZSBsaWpzdCBtZXQgbWVsZGluZ2VuIHdlZXJnZXZlbiB6b25kZXIgZ2VsdWlkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9IjQ5MjY1Mjk2MTU5MjA2MTA4MTciPiJEZXplIG1lbGRpbmdlbiB6b25kZXIgZ2VsdWlkIHdlZXJnZXZlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4iQm92ZW4gYWFuIGRlIGxpanN0IG1ldCBtZWxkaW5nZW4gd2VlcmdldmVuIGVuIGdlbHVpZCBsYXRlbiBob3JlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjUyMzY5ODcxNzE5MDQ3NTYxMzQiPiJPcCBoZXQgc2NoZXJtIHdlZXJnZXZlbiBlbiBnZWx1aWQgbGF0ZW4gaG9yZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+Ik1lZXIgaW5zdGVsbGluZ2VuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4iR2VyZWVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25vbmUiIG1zZ2lkPSIyMTIxOTU3OTI2MDQwNTQzMTQ4Ij4iTm9ybWFsZSBrbGV1cmVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+Ik5hY2h0a2xldXJlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4iQWFuZ2VwYXN0ZSBrbGV1cmVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4iT25iZWtlbmRlIGtsZXVyZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4iS2xldXJhYW5wYXNzaW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Nob3dfcXMiIG1zZ2lkPSIxNzYzMjQ0MzU0Mzk5Mjc2Njc5Ij4iVGVnZWwgdm9vciBcJ1NuZWxsZSBpbnN0ZWxsaW5nZW5cJyB3ZWVyZ2V2ZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9lbmFibGVfY3VzdG9tIiBtc2dpZD0iNjcyOTAwMTMwODIxNzM0NzUwMSI+IkFhbmdlcGFzdCB0cmFuc2Zvcm1lcmVuIGluc2NoYWtlbGVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4iVG9lcGFzc2VuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+Ikluc3RlbGxpbmdlbiBiZXZlc3RpZ2VuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X21lc3NhZ2UiIG1zZ2lkPSI5MTE2MDAxMDY5Mzk3OTk2NjkxIj4iQmlqIHNvbW1pZ2Uga2xldXJpbnN0ZWxsaW5nZW4ga2FuIGhldCBhcHBhcmFhdCBvbmJydWlrYmFhciB3b3JkZW4uIEtsaWsgb3AgT0sgb20gZGV6ZSBrbGV1cmluc3RlbGxpbmdlbiB0ZSBiZXZlc3RpZ2VuLCBhbmRlcnMgd29yZGVuIGRlemUgaW5zdGVsbGluZ2VuIG5hIHRpZW4gc2Vjb25kZW4gZ2VyZXNldC4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtcGEtcklOL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1wYS1ySU4vc3RyaW5ncy54bWwKaW5kZXggZDdmZTBhMS4uZmM1YTNlYSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1wYS1ySU4vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1wYS1ySU4vc3RyaW5ncy54bWwKQEAgLTMwMSw4ICszMDEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+IuColuCpi+ConOCpiyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IOCoqOCpguCpsCDgqJrgqL7gqLLgqYIg4Kio4Ki54KmA4KiCIOColeCosCDgqLjgqJXgqL/gqIbgpaQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4i4Ki54KmL4KiwIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQgKDYzMzcxNTU2MDgwNTUwNjI0MjkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgqLngqYvgqLAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9ob3Jpem9udGFsIiBtc2dpZD0iODg0ODUxNDQ3NDU0MzQyNzMzMiI+IuCoueCpjOCosOCpgOConOCovOCpjOCoguCon+CosiDgqLjgqKrgqLLgqL/gqJ8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF92ZXJ0aWNhbCIgbXNnaWQ9IjkwNzUyOTIyMzM2OTYxODA4MTMiPiLgqLXgqLDgqJ/gqYDgqJXgqLIg4Ki44Kiq4Kiy4Ki/4KifIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfY3VzdG9tIiBtc2dpZD0iNDE3NzgzNzU5NzUxMzcwMTk0MyI+IuColeCouOCon+CoriDgqLjgqKrgqLLgqL/gqJ8iPC9zdHJpbmc+CkBAIC0zNjUsNyArMzY0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjM3OTE4NzI2NzUwOTU1ODU5Ij4i4Kis4KmI4Kif4Kiw4KmAIOCouOCph+CoteCosCDgqJrgqL7gqLLgqYIg4Ki54KmIIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+IuCoquCpjeCosOCopuCosOCouOCovOCoqCDgqIXgqKTgqYcg4Kiq4Ki/4Kib4KmL4KiV4KmcIOCooeCovuCon+CoviDgqJjgqbHgqJ8g4KiV4Kiw4Kim4Ki+IOCoueCpiCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4i4Kis4KmI4Kif4Kiw4KmAIOCouOCph+CoteCosCDgqKzgqbDgqKYg4KiV4Kiw4KmLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IuCouOCoruCpseCol+CosOCpgOCohuCogiDgqLLgqYHgqJXgqL7gqIjgqIbgqIIg4KiX4KiI4KiG4KiCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiI8eGxpZmY6ZyBpZD0iQVBQX1NFRUtJTkdfUEVSTUlTU0lPTiI+JXM8L3hsaWZmOmc+IOCoieCouSDgqLjgqK0g4KiV4KmB4KidIOColeCpiOCoquComuCosCDgqJXgqLDgqKjgqL4g4Ki44Ki84KmB4Kiw4KmCIOColeCosCDgqKbgqYfgqLXgqYfgqJfgqL4sIOConOCpiyDgqKTgqYHgqLngqL7gqKHgqYAg4Ki44KiV4KmN4Kiw4KmA4KioIOCopOCphyDgqKHgqL/gqLjgqKrgqLLgqYcg4KiV4KmA4Kik4Ki+IOConOCovuCoguCopuCoviDgqLngqYjgpaQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX3JlbWVtYmVyX3RleHQiIG1zZ2lkPSIzMTAzNTEwODgyMTcyNzQ2NzUyIj4i4Kim4KmB4Kis4Ki+4Kiw4Ki+IOCoqOCoviDgqKbgqL/gqJbgqL7gqJMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4i4Ki44Ki+4Kiw4KmHIOCoueCon+CovuCokyI8L3N0cmluZz4KQEAgLTQ1MCw0ICs0NDgsMjggQEAKICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfdGl0bGUiIG1zZ2lkPSI1MDI3MDM3NzA2NTAwNjM1MjY5Ij4iQmx1ZXRvb3RoIOComuCovuCosuCpgiDgqJXgqLDgqYs/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9tZXNzYWdlIiBtc2dpZD0iOTEwNjU5NTk5MDcwODk4NTM4NSI+IuCohuCoquCoo+CphyDgqJ/gqYjgqKzgqLLgqYfgqJ8g4Kio4Ki+4KiyIOCohuCoquCoo+CoviDgqJXgqYAt4Kis4KmL4Kiw4KihIOColeCoqOCpiOColeConyDgqJXgqLDgqKgg4Kiy4KiILCDgqKTgqYHgqLngqL7gqKjgqYLgqbAg4Kiq4Ki54Ki/4Kiy4Ki+4KiCIEJsdWV0b290aCDgqJrgqL7gqLLgqYIg4KiV4Kiw4KioIOCopuCpgCDgqJzgqLzgqLDgqYLgqLDgqKQg4Ki54KmI4KWkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9jb25maXJtYXRpb25fb2siIG1zZ2lkPSI2MjU4MDc0MjUwOTQ4MzA5NzE1Ij4i4Kia4Ki+4Kiy4KmCIOColeCosOCpiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX3RvcGljIiBtc2dpZD0iMzY0MTQwMzQ4OTMxODY1OTY2NiI+Ijx4bGlmZjpnIGlkPSJUT1BJQ19OQU1FIj4lMSRzPC94bGlmZjpnPiDgqLjgqYLgqJrgqKjgqL7gqLXgqL7gqIIgXCfgqKTgqYcg4Kiy4Ki+4KiX4KmCIOColeCosOCpiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+IuCoh+CouCDgqJDgqKog4Kim4KmA4KiG4KiCIOCouOCovuCosOCpgOCohuCogiDgqLjgqYLgqJrgqKjgqL7gqLXgqL7gqIIgXCfgqKTgqYcg4Kiy4Ki+4KiX4KmCIOColeCosOCpiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfaW1wb3J0YW5jZSIgbXNnaWQ9IjUxOTg1Nzg5ODg5NzgyMzQxNjEiPiLgqKzgqLLgqYzgqJUg4KiV4KmA4Kik4Ki+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4i4KiY4Kmx4KifIOCoruCoueCpseCopOCopOCoviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiLgqLjgqKfgqL7gqLDgqKgg4Kiu4Ki54Kmx4Kik4Kik4Ki+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+IuCoteCpseCopyDgqK7gqLngqbHgqKTgqKTgqL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfaW1wb3J0YW5jZSIgbXNnaWQ9IjUwODkwMDU4NzI3MTk1NjM4OTQiPiLgqJzgqLzgqLDgqYLgqLDgqYAg4Kiu4Ki54Kmx4Kik4Kik4Ki+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjIzOTcxOTI2NDI2NTc4NzI4NzIiPiLgqIfgqLngqKjgqL7gqIIg4Ki44KmC4Kia4Kio4Ki+4Ki14Ki+4KiCIOCoqOCpguCpsCDgqJXgqKbgqYcg4Kio4Ki+IOCoteCov+ColuCovuCokyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjQzODM1NjMyNjczNzA4NTk3MjUiPiLgqLjgqYLgqJrgqKjgqL4g4Ki44KmC4Kia4KmAIOCopuCphyDgqLngqYfgqKDgqL7gqIIg4Kia4KmB4Kmx4Kiq4Kia4Ki+4KiqIOCoouCpsOColyDgqKjgqL7gqLIg4Ki14Ki/4KiW4Ki+4KiTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9IjQ5MjY1Mjk2MTU5MjA2MTA4MTciPiLgqIfgqLngqKjgqL7gqIIg4Ki44KmC4Kia4Kio4Ki+4Ki14Ki+4KiCIOCoqOCpguCpsCDgqJrgqYHgqbHgqKrgqJrgqL7gqKog4Kii4Kmw4KiXIOCoqOCovuCosiDgqLXgqL/gqJbgqL7gqJMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+IuCouOCpguComuCoqOCovuCoteCovuCogiDgqLjgqYLgqJrgqYAg4Kim4KmHIOCouOCov+ColuCosCBcJ+CopOCphyDgqLXgqL/gqJbgqL7gqJMg4KiF4Kik4KmHIOCohuCoteCovuConOCovCDgqJXgqLDgqYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4i4Ki44KiV4Kiw4KmA4KioIFwn4Kik4KmHIOConeCovuCopOCpgCDgqK7gqL7gqLDgqYsg4KiF4Kik4KmHIOCohuCoteCovuConOCovCDgqJXgqLDgqYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+IuCoueCpi+CosCDgqLjgqYjgqJ/gqL/gqbDgqJfgqL7gqIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiLgqLngqYsg4KiX4Ki/4KiGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25vbmUiIG1zZ2lkPSIyMTIxOTU3OTI2MDQwNTQzMTQ4Ij4i4Ki44Kin4Ki+4Kiw4KioIOCosOCpsOColyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9uaWdodCIgbXNnaWQ9IjU5NDM4MTc2MjIxMDUzMDcwNzIiPiLgqLDgqL7gqKQg4Kim4KmHIOCosOCpsOColyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4i4KiV4Ki44Kif4KiuIOCosOCpsOColyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF91bmtub3duIiBtc2dpZD0iMjcwOTIwMjEwNDI1NjI2NTEwNyI+IuCoheCol+Cov+CohuCopCDgqLDgqbDgqJciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4i4Kiw4Kmw4KiXIOCouOCpi+CopyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+IuCopOCopOColeCovuCosiDgqLjgqYjgqJ/gqL/gqbDgqJfgqL7gqIIg4Kif4Ki+4KiH4KiyIOCoteCov+ColuCovuCokyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4i4KiV4Ki44Kif4KiuIOCopOCorOCopuCpgOCosuCpgCDgqK/gqYvgqJcg4Kis4Kij4Ki+4KiTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4i4Kiy4Ki+4KiX4KmCIOColeCosOCpiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiLgqLjgqYjgqJ/gqL/gqbDgqJfgqL7gqIIg4Kim4KmAIOCoquCpgeCouOCovOCon+CpgCDgqJXgqLDgqYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfbWVzc2FnZSIgbXNnaWQ9IjkxMTYwMDEwNjkzOTc5OTY2OTEiPiLgqJXgqYHgqJ0g4Kiw4Kmw4KiXIOCouOCpiOCon+Cov+CpsOCol+CovuCogiDgqIfgqLgg4Kih4KmA4Ki14Ki+4KiI4Ki4IOCoqOCpguCpsCDgqKzgqYfgqJXgqL7gqLAg4KiV4KiwIOCouOColeCopuCpgOCohuCogiDgqLngqKjgpaQg4KiH4Ki54Kio4Ki+4KiCIOCosOCpsOColyDgqLjgqYjgqJ/gqL/gqbDgqJfgqL7gqIIg4Kim4KmAIOCoquCpgeCouOCovOCon+CpgCDgqJXgqLDgqKgg4Kiy4KiIIOCooOCpgOColSBcJ+CopOCphyDgqJXgqLLgqL/gqbHgqJUg4KiV4Kiw4KmLLCDgqKjgqLngqYDgqIIg4Kik4Ki+4KiCIOCoh+CouSDgqLjgqYjgqJ/gqL/gqbDgqJfgqL7gqIIgMTAg4Ki44KiV4Ki/4Kmw4KifIOCorOCovuCoheCopiDgqK7gqYHgqZwt4Ki44KmI4Kmx4KifIOCoueCpiyDgqJzgqL7gqKPgqJfgqYDgqIbgqILgpaQiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtcGwvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXBsL3N0cmluZ3MueG1sCmluZGV4IDM2MGUxNWQuLjhlZjUwYzkgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtcGwvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1wbC9zdHJpbmdzLnhtbApAQCAtMzAzLDggKzMwMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4ic3p1a2FqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sYXVuY2hfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjI5NjkyODc4MzgxMjA1NTA1MDYiPiJOaWUgdWRhxYJvIHNpxJkgdXJ1Y2hvbWnEhyBhcGxpa2FjamkgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2hvd19oaXN0b3J5X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjcwNjIwODgxOTY0NDk3NDcyNDUiPiJXacSZY2VqIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQgKDYzMzcxNTU2MDgwNTUwNjI0MjkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+ImkgamVzemN6ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9ob3Jpem9udGFsIiBtc2dpZD0iODg0ODUxNDQ3NDU0MzQyNzMzMiI+IlBvZHppZWwgcG96aW9tbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X3ZlcnRpY2FsIiBtc2dpZD0iOTA3NTI5MjIzMzY5NjE4MDgxMyI+IlBvZHppZWwgcGlvbm93byI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2N1c3RvbSIgbXNnaWQ9IjQxNzc4Mzc1OTc1MTM3MDE5NDMiPiJQb2R6aWVsIG5pZXN0YW5kYXJkb3dvIjwvc3RyaW5nPgpAQCAtMzY3LDcgKzM2Niw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+Ik9zemN6xJlkemFuaWUgYmF0ZXJpaSBqZXN0IHfFgsSFY3pvbmUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iODIwMzE4Nzg4MTI2NjcyNjkyIj4iWm1uaWVqc3phIHd5ZGFqbm/Fm8SHIGkgb2dyYW5pY3phIGRhbmUgdyB0bGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl9hY3Rpb25fdGV4dCIgbXNnaWQ9IjEwOTE1ODY1ODIzODExMDM4MiI+Ild5xYLEhWN6IG9zemN6xJlkemFuaWUgYmF0ZXJpaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJUcmXFm2NpIHVrcnl0ZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fZGlhbG9nX3RleHQiIG1zZ2lkPSIzMDcxNDMxMDI1NDQ4MjE4OTI4Ij4iPHhsaWZmOmcgaWQ9IkFQUF9TRUVLSU5HX1BFUk1JU1NJT04iPiVzPC94bGlmZjpnPiBixJlkemllIHphcGlzeXdhxIcgd3N6eXN0a28sIGNvIHd5xZt3aWV0bGkgc2nEmSBuYSBla3JhbmllLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fcmVtZW1iZXJfdGV4dCIgbXNnaWQ9IjMxMDM1MTA4ODIxNzI3NDY3NTIiPiJOaWUgcG9rYXp1aiBwb25vd25pZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNsZWFyX2FsbF9ub3RpZmljYXRpb25zX3RleHQiIG1zZ2lkPSI4MTQxOTI4ODk3NzE0NjI4MjgiPiJVc3XFhCB3c3p5c3RraWUiPC9zdHJpbmc+CkBAIC00NTIsNCArNDUwLDI4IEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+IlfFgsSFY3p5xIcgQmx1ZXRvb3RoPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiJBYnkgcG/FgsSFY3p5xIcga2xhd2lhdHVyxJkgeiB0YWJsZXRlbSwgbXVzaXN6IG5hanBpZXJ3IHfFgsSFY3p5xIcgQmx1ZXRvb3RoLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+IlfFgsSFY3oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiJaYXN0b3N1aiBkbyBwb3dpYWRvbWllxYQgdHlwdSA8eGxpZmY6ZyBpZD0iVE9QSUNfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b19hcHAiIG1zZ2lkPSIzNjMwMTY3ODM5Mzk4MTU5NjAiPiJaYXN0b3N1aiBkbyB3c3p5c3RraWNoIHBvd2lhZG9taWXFhCB6IHRlaiBhcGxpa2FjamkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX2ltcG9ydGFuY2UiIG1zZ2lkPSI1MTk4NTc4OTg4OTc4MjM0MTYxIj4iWmFibG9rb3dhbmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW1wb3J0YW5jZSIgbXNnaWQ9IjQxMDk5Mjk5ODYxMDcxNDc5MzAiPiJNYcWCbyB3YcW8bmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4iV2HFvG5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+IkJhcmR6byB3YcW8bmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfaW1wb3J0YW5jZSIgbXNnaWQ9IjUwODkwMDU4NzI3MTk1NjM4OTQiPiJQaWxuZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4iTmlnZHkgbmllIHBva2F6dWogdHljaCBwb3dpYWRvbWllxYQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4iUG9rYXp1aiBuYSBkb2xlIGxpc3R5IHBvd2lhZG9taWXFhCBiZXogc3lnbmHFgnUgZMW6d2nEmWtvd2VnbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI0OTI2NTI5NjE1OTIwNjEwODE3Ij4iUG9rYXp1aiB0ZSBwb3dpYWRvbWllbmlhIGJleiBzeWduYcWCdSBkxbp3acSZa293ZWdvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMyMjI2ODAxMzY2MTI0MDgyMjMiPiJQb2thenVqIG5hIGfDs3J6ZSBsaXN0eSBwb3dpYWRvbWllxYQgaSBzeWduYWxpenVqIGTFundpxJlraWVtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iNTIzNjk4NzE3MTkwNDc1NjEzNCI+Ild5xZt3aWV0bGFqIG5hIGVrcmFuaWUgaSBvZHR3YXJ6YWogZMW6d2nEmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+IldpxJljZWogdXN0YXdpZcWEIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4iR290b3dlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25vbmUiIG1zZ2lkPSIyMTIxOTU3OTI2MDQwNTQzMTQ4Ij4iS29sb3J5IHN0YW5kYXJkb3dlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+IktvbG9yeSBub2NuZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4iS29sb3J5IG5pZXN0YW5kYXJkb3dlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4iTmllem5hbmUga29sb3J5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+IlptaWFuYSBrb2xvcnUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfc2hvd19xcyIgbXNnaWQ9IjE3NjMyNDQzNTQzOTkyNzY2NzkiPiJQb2thenVqIGthZmVsZWsgc3p5YmtpY2ggdXN0YXdpZcWEIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiJXxYLEhWN6IHByemVrc3p0YcWCY2VuaWUgbmllc3RhbmRhcmRvd2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9hcHBseSIgbXNnaWQ9IjkyMTI2MDIwMTI2NDEwMzQyODMiPiJaYXN0b3N1aiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiJQb3R3aWVyZMW6IHVzdGF3aWVuaWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfbWVzc2FnZSIgbXNnaWQ9IjkxMTYwMDEwNjkzOTc5OTY2OTEiPiJOaWVrdMOzcmUgdXN0YXdpZW5pYSBrb2xvcsOzdyBtb2fEhSB1dHJ1ZG5pYcSHIGtvcnp5c3RhbmllIHogdXJ6xIVkemVuaWEuIEtsaWtuaWogT0ssIGJ5IHBvdHdpZXJkemnEhyB0ZSB1c3Rhd2llbmlhIGtvbG9yw7N3LiBKZcWbbGkgdGVnbyBuaWUgenJvYmlzeiwgem9zdGFuxIUgb25lIHpyZXNldG93YW5lIHBvIDEwwqBzZWt1bmRhY2guIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXB0LXJCUi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtcHQtckJSL3N0cmluZ3MueG1sCmluZGV4IDFhMzIxMmUuLjhmNjE0NzggMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtcHQtckJSL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtcHQtckJSL3N0cmluZ3MueG1sCkBAIC0zMDEsOCArMzAxLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2VhcmNoX2Jhcl9sYWJlbCIgbXNnaWQ9IjgwNzQ5OTc0MDAxODc4MzY2NzciPiJwZXNxdWlzYXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xhdW5jaF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMjk2OTI4NzgzODEyMDU1MDUwNiI+Ik7Do28gZm9pIHBvc3PDrXZlbCBpbmljaWFyIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4iTWFpcyI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciByZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0ICg2MzM3MTU1NjA4MDU1MDYyNDI5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCIgbXNnaWQ9IjYzMzcxNTU2MDgwNTUwNjI0MjkiPiJNYWlzIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2hvcml6b250YWwiIG1zZ2lkPSI4ODQ4NTE0NDc0NTQzNDI3MzMyIj4iRGl2aXPDo28gaG9yaXpvbnRhbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X3ZlcnRpY2FsIiBtc2dpZD0iOTA3NTI5MjIzMzY5NjE4MDgxMyI+IkRpdmlzw6NvIHZlcnRpY2FsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfY3VzdG9tIiBtc2dpZD0iNDE3NzgzNzU5NzUxMzcwMTk0MyI+IkRpdmlzw6NvIHBlcnNvbmFsaXphZGEiPC9zdHJpbmc+CkBAIC0zNjUsNyArMzY0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjM3OTE4NzI2NzUwOTU1ODU5Ij4iQSBFY29ub21pYSBkZSBiYXRlcmlhIGVzdMOhIGF0aXZhZGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iODIwMzE4Nzg4MTI2NjcyNjkyIj4iUmVkdXogbyBkZXNlbXBlbmhvIGUgb3MgZGFkb3MgZW0gc2VndW5kbyBwbGFubyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4iRGVzYXRpdmFyIGEgZWNvbm9taWEgZGUgYmF0ZXJpYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJDb250ZcO6ZG8gb2N1bHRvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiI8eGxpZmY6ZyBpZD0iQVBQX1NFRUtJTkdfUEVSTUlTU0lPTiI+JXM8L3hsaWZmOmc+IGNvbWXDp2Fyw6EgYSBjYXB0dXJhciB0dWRvIG8gcXVlIGZvciBleGliaWRvIG5hIHRlbGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+Ik7Do28gbW9zdHJhciBub3ZhbWVudGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4iTGltcGFyIHR1ZG8iPC9zdHJpbmc+CkBAIC00NTAsNCArNDQ4LDI4IEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+IkF0aXZhciBvIEJsdWV0b290aD8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX21lc3NhZ2UiIG1zZ2lkPSI5MTA2NTk1OTkwNzA4OTg1Mzg1Ij4iUGFyYSBjb25lY3RhciBvIHRlY2xhZG8gYW8gdGFibGV0LCDDqSBwcmVjaXNvIHByaW1laXJvIGF0aXZhciBvIEJsdWV0b290aC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiJBdGl2YXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiJBcGxpY2FyIGEgbm90aWZpY2HDp8O1ZXMgZGUgPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4iQXBsaWNhciBhIHRvZGFzIGFzIG5vdGlmaWNhw6fDtWVzIGRlc3RlIGFwcCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfaW1wb3J0YW5jZSIgbXNnaWQ9IjUxOTg1Nzg5ODg5NzgyMzQxNjEiPiJCbG9xdWVhZGFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4iSW1wb3J0w6JuY2lhIGJhaXhhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9pbXBvcnRhbmNlIiBtc2dpZD0iODE5MjEwNzY4OTk5NTc0MjY1MyI+IkltcG9ydMOibmNpYSBub3JtYWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoaWdoX2ltcG9ydGFuY2UiIG1zZ2lkPSIxNTI3MDY2MTk1NjE0MDUwMjYzIj4iSW1wb3J0w6JuY2lhIGVsZXZhZGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfaW1wb3J0YW5jZSIgbXNnaWQ9IjUwODkwMDU4NzI3MTk1NjM4OTQiPiJJbXBvcnTDom5jaWEgdXJnZW50ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4iTnVuY2EgbW9zdHJhciBlc3NhcyBub3RpZmljYcOnw7VlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjQzODM1NjMyNjczNzA4NTk3MjUiPiJNb3N0cmFyIG5hIHBhcnRlIGluZmVyaW9yIGRhIGxpc3RhIGRlIG5vdGlmaWNhw6fDtWVzIGRlIGZvcm1hIHNpbGVuY2lvc2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+Ik1vc3RyYXIgZXNzYXMgbm90aWZpY2HDp8O1ZXMgZGUgZm9ybWEgc2lsZW5jaW9zYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4iTW9zdHJhciBuYSBwYXJ0ZSBzdXBlcmlvciBkYSBsaXN0YSBkZSBub3RpZmljYcOnw7VlcyBlIGVtaXRpciBzb20iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4iTW9zdHJhciBwYXJjaWFsbWVudGUgbmEgdGVsYSBlIGVtaXRpciBzb20iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+Ik1haXMgY29uZmlndXJhw6fDtWVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4iQ29uY2x1w61kbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9ub25lIiBtc2dpZD0iMjEyMTk1NzkyNjA0MDU0MzE0OCI+IkNvcmVzIG5vcm1haXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4iQ29yZXMgbm90dXJuYXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+IkNvcmVzIHBlcnNvbmFsaXphZGFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4iQ29yZXMgZGVzY29uaGVjaWRhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3RyYW5zZm9ybSIgbXNnaWQ9IjY5ODU0NjA0MDgwNzkwODYwOTAiPiJNb2RpZmljYcOnw6NvIGRlIGNvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+Ik1vc3RyYXIgYmxvY28gZGUgY29uZmlndXJhw6fDtWVzIHLDoXBpZGFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiJBdGl2YXIgdHJhbnNmb3JtYcOnw6NvIHBlcnNvbmFsaXphZGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9hcHBseSIgbXNnaWQ9IjkyMTI2MDIwMTI2NDEwMzQyODMiPiJBcGxpY2FyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+IkNvbmZpcm1hciBjb25maWd1cmHDp8O1ZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfbWVzc2FnZSIgbXNnaWQ9IjkxMTYwMDEwNjkzOTc5OTY2OTEiPiJBbGd1bWFzIGNvbmZpZ3VyYcOnw7VlcyBkZSBjb3IgcG9kZW0gdG9ybmFyIG8gZGlzcG9zaXRpdm8gaW51dGlsaXrDoXZlbC4gQ2xpcXVlIGVtIFwiT0tcIiBwYXJhIGNvbmZpcm1hciBlc3NhcyBjb25maWd1cmHDp8O1ZXMgZGUgY29yOyBjYXNvIGNvbnRyw6FyaW8sIGVzc2FzIGNvbmZpZ3VyYcOnw7VlcyBzZXLDo28gcmVkZWZpbmlkYXMgYXDDs3MgMTAgc2VndW5kb3MuIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXB0LXJQVC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtcHQtclBUL3N0cmluZ3MueG1sCmluZGV4IGM5NTI0MmYuLjhhNzI3YTEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtcHQtclBUL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtcHQtclBUL3N0cmluZ3MueG1sCkBAIC0zMDEsOCArMzAxLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2VhcmNoX2Jhcl9sYWJlbCIgbXNnaWQ9IjgwNzQ5OTc0MDAxODc4MzY2NzciPiJwZXNxdWlzYXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xhdW5jaF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMjk2OTI4NzgzODEyMDU1MDUwNiI+Ik7Do28gZm9pIHBvc3PDrXZlbCBpbmljaWFyIG8gPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2hvd19oaXN0b3J5X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjcwNjIwODgxOTY0NDk3NDcyNDUiPiJNYWlzIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQgKDYzMzcxNTU2MDgwNTUwNjI0MjkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+Ik1haXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiJEaXZpc8OjbyBob3Jpem9udGFsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfdmVydGljYWwiIG1zZ2lkPSI5MDc1MjkyMjMzNjk2MTgwODEzIj4iRGl2aXPDo28gdmVydGljYWwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4iRGl2aXPDo28gcGVyc29uYWxpemFkYSI8L3N0cmluZz4KQEAgLTM2NSw3ICszNjQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzc5MTg3MjY3NTA5NTU4NTkiPiJBIHBvdXBhbsOnYSBkZSBiYXRlcmlhIGVzdMOhIGxpZ2FkYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiJSZWR1eiBvIGRlc2VtcGVuaG8gZSBvcyBkYWRvcyBkZSBzZWd1bmRvIHBsYW5vIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiJEZXNhdGl2YXIgYSBwb3VwYW7Dp2EgZGUgYmF0ZXJpYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJDb250ZcO6ZG8gb2N1bHRvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiJPKGEpIDx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4gdmFpIGNvbWXDp2FyIGEgY2FwdGFyIHR1ZG8gbyBxdWUgw6kgYXByZXNlbnRhZG8gbm8gZWNyw6MuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+Ik7Do28gbW9zdHJhciBkZSBub3ZvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+IkxpbXBhciB0dWRvIjwvc3RyaW5nPgpAQCAtNDI3LDcgKzQyNSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2FpcnBsYW5lIiBtc2dpZD0iNzA1NzU3NTUwMTQ3MjI0OTAwMiI+Ik1vZG8gZGUgYXZpw6NvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWRkX3RpbGUiIG1zZ2lkPSIyOTk1Mzg5NTEwMjQwNzg2MjIxIj4iQWRpY2lvbmFyIG1vc2FpY28iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJicm9hZGNhc3RfdGlsZSIgbXNnaWQ9IjM4OTQwMzY1MTE3NjMyODkzODMiPiJNb3NhaWNvIGRlIHRyYW5zbWlzc8OjbyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Inplbl9hbGFybV93YXJuaW5nX2luZGVmIiBtc2dpZD0iMzQ4Mjk2NjM0NTU3ODMxOTYwNSI+IlPDsyB2YWkgb3V2aXIgbyBwcsOzeGltbyBhbGFybWUgw6BzIDx4bGlmZjpnIGlkPSJXSEVOIj4lMSRzPC94bGlmZjpnPiBzZSBkZXNhdGl2YXIgZXN0YSBmdW5jaW9uYWxpZGFkZSBhbnRlcyBkZXNzYSBob3JhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iemVuX2FsYXJtX3dhcm5pbmdfaW5kZWYiIG1zZ2lkPSIzNDgyOTY2MzQ1NTc4MzE5NjA1Ij4iU8OzIHZhaSBvdXZpciBvIHByw7N4aW1vIGFsYXJtZSAoPHhsaWZmOmcgaWQ9IldIRU4iPiUxJHM8L3hsaWZmOmc+KSBzZSBkZXNhdGl2YXIgZXN0YSBmdW5jaW9uYWxpZGFkZSBhbnRlcyBkZXNzYSBob3JhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iemVuX2FsYXJtX3dhcm5pbmciIG1zZ2lkPSI0NDQ1MzMxMTk1ODIyNDQyOTMiPiJOw6NvIHZhaSBvdXZpciBvIHByw7N4aW1vIGFsYXJtZSDDoHMgPHhsaWZmOmcgaWQ9IldIRU4iPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWxhcm1fdGVtcGxhdGUiIG1zZ2lkPSIzOTgwMDYzNDA5MzUwNTIyNzM1Ij4iw6BzIDx4bGlmZjpnIGlkPSJXSEVOIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFsYXJtX3RlbXBsYXRlX2ZhciIgbXNnaWQ9IjQyNDIxNzk5ODI1ODY3MTQ4MTAiPiJlbSA8eGxpZmY6ZyBpZD0iV0hFTiI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CkBAIC00NTAsNCArNDQ4LDI4IEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+IlByZXRlbmRlIGF0aXZhciBvIEJsdWV0b290aD8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX21lc3NhZ2UiIG1zZ2lkPSI5MTA2NTk1OTkwNzA4OTg1Mzg1Ij4iUGFyYSBsaWdhciBvIHRlY2xhZG8gYW8gdGFibGV0LCB0ZW0gZGUgYXRpdmFyIHByaW1laXJvIG8gQmx1ZXRvb3RoLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+IkF0aXZhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX3RvcGljIiBtc2dpZD0iMzY0MTQwMzQ4OTMxODY1OTY2NiI+IkFwbGljYXIgYSBub3RpZmljYcOnw7VlcyBkZSA8eGxpZmY6ZyBpZD0iVE9QSUNfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b19hcHAiIG1zZ2lkPSIzNjMwMTY3ODM5Mzk4MTU5NjAiPiJBcGxpY2FyIGEgdG9kYXMgYXMgbm90aWZpY2HDp8O1ZXMgZGVzdGEgYXBsaWNhw6fDo28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX2ltcG9ydGFuY2UiIG1zZ2lkPSI1MTk4NTc4OTg4OTc4MjM0MTYxIj4iQmxvcXVlYWRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4iSW1wb3J0w6JuY2lhIGJhaXhhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9pbXBvcnRhbmNlIiBtc2dpZD0iODE5MjEwNzY4OTk5NTc0MjY1MyI+IkltcG9ydMOibmNpYSBub3JtYWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoaWdoX2ltcG9ydGFuY2UiIG1zZ2lkPSIxNTI3MDY2MTk1NjE0MDUwMjYzIj4iSW1wb3J0w6JuY2lhIGFsdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfaW1wb3J0YW5jZSIgbXNnaWQ9IjUwODkwMDU4NzI3MTk1NjM4OTQiPiJVcmdlbnRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjIzOTcxOTI2NDI2NTc4NzI4NzIiPiJOdW5jYSBtb3N0cmFyIGVzdGFzIG5vdGlmaWNhw6fDtWVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+Ik1vc3RyYXIgbmEgcGFydGUgaW5mZXJpb3IgZGEgbGlzdGEgZGUgbm90aWZpY2HDp8O1ZXMgc2VtIHNvbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI0OTI2NTI5NjE1OTIwNjEwODE3Ij4iTW9zdHJhciBlc3RhcyBub3RpZmljYcOnw7VlcyBzZW0gc29tIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMyMjI2ODAxMzY2MTI0MDgyMjMiPiJNb3N0cmFyIG5hIHBhcnRlIHN1cGVyaW9yIGRhIGxpc3RhIGRlIG5vdGlmaWNhw6fDtWVzIGUgZW1pdGlyIHNvbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjUyMzY5ODcxNzE5MDQ3NTYxMzQiPiJNb3N0cmFyIG5vIGVjcsOjIGUgZW1pdGlyIHNvbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9tb3JlX3NldHRpbmdzIiBtc2dpZD0iODE2MzA2MjgzMzk2NTUzNTcxIj4iTWFpcyBkZWZpbmnDp8O1ZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiJDb25jbHXDrWRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25vbmUiIG1zZ2lkPSIyMTIxOTU3OTI2MDQwNTQzMTQ4Ij4iQ29yZXMgbm9ybWFpcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9uaWdodCIgbXNnaWQ9IjU5NDM4MTc2MjIxMDUzMDcwNzIiPiJDb3JlcyBub3R1cm5hcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4iQ29yZXMgcGVyc29uYWxpemFkYXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiJDb3JlcyBkZXNjb25oZWNpZGFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+Ik1vZGlmaWNhw6fDo28gZGUgY29yIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Nob3dfcXMiIG1zZ2lkPSIxNzYzMjQ0MzU0Mzk5Mjc2Njc5Ij4iTW9zdHJhciBvIG1vc2FpY28gZGUgRGVmaW5pw6fDtWVzIHLDoXBpZGFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiJBdGl2YXIgdHJhbnNmb3JtYcOnw6NvIHBlcnNvbmFsaXphZGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9hcHBseSIgbXNnaWQ9IjkyMTI2MDIwMTI2NDEwMzQyODMiPiJBcGxpY2FyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+IkNvbmZpcm1hciBhcyBkZWZpbmnDp8O1ZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfbWVzc2FnZSIgbXNnaWQ9IjkxMTYwMDEwNjkzOTc5OTY2OTEiPiJBbGd1bWFzIGRlZmluacOnw7VlcyBkZSBjb3IgcG9kZW0gdG9ybmFyIGVzdGUgZGlzcG9zaXRpdm8gaW5zdMOhdmVsLiBDbGlxdWUgZW0gT0sgcGFyYSBjb25maXJtYXIgZXN0YXMgZGVmaW5pw6fDtWVzIGRlIGNvci4gQ2FzbyBjb250csOhcmlvLCBlc3RhcyBkZWZpbmnDp8O1ZXMgc2Vyw6NvIHJlcG9zdGFzIGFww7NzIDEwIHNlZ3VuZG9zLiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1wdC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtcHQvc3RyaW5ncy54bWwKaW5kZXggMWEzMjEyZS4uOGY2MTQ3OCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1wdC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXB0L3N0cmluZ3MueG1sCkBAIC0zMDEsOCArMzAxLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2VhcmNoX2Jhcl9sYWJlbCIgbXNnaWQ9IjgwNzQ5OTc0MDAxODc4MzY2NzciPiJwZXNxdWlzYXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xhdW5jaF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMjk2OTI4NzgzODEyMDU1MDUwNiI+Ik7Do28gZm9pIHBvc3PDrXZlbCBpbmljaWFyIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4iTWFpcyI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciByZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0ICg2MzM3MTU1NjA4MDU1MDYyNDI5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCIgbXNnaWQ9IjYzMzcxNTU2MDgwNTUwNjI0MjkiPiJNYWlzIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2hvcml6b250YWwiIG1zZ2lkPSI4ODQ4NTE0NDc0NTQzNDI3MzMyIj4iRGl2aXPDo28gaG9yaXpvbnRhbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X3ZlcnRpY2FsIiBtc2dpZD0iOTA3NTI5MjIzMzY5NjE4MDgxMyI+IkRpdmlzw6NvIHZlcnRpY2FsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfY3VzdG9tIiBtc2dpZD0iNDE3NzgzNzU5NzUxMzcwMTk0MyI+IkRpdmlzw6NvIHBlcnNvbmFsaXphZGEiPC9zdHJpbmc+CkBAIC0zNjUsNyArMzY0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjM3OTE4NzI2NzUwOTU1ODU5Ij4iQSBFY29ub21pYSBkZSBiYXRlcmlhIGVzdMOhIGF0aXZhZGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iODIwMzE4Nzg4MTI2NjcyNjkyIj4iUmVkdXogbyBkZXNlbXBlbmhvIGUgb3MgZGFkb3MgZW0gc2VndW5kbyBwbGFubyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4iRGVzYXRpdmFyIGEgZWNvbm9taWEgZGUgYmF0ZXJpYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJDb250ZcO6ZG8gb2N1bHRvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiI8eGxpZmY6ZyBpZD0iQVBQX1NFRUtJTkdfUEVSTUlTU0lPTiI+JXM8L3hsaWZmOmc+IGNvbWXDp2Fyw6EgYSBjYXB0dXJhciB0dWRvIG8gcXVlIGZvciBleGliaWRvIG5hIHRlbGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+Ik7Do28gbW9zdHJhciBub3ZhbWVudGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4iTGltcGFyIHR1ZG8iPC9zdHJpbmc+CkBAIC00NTAsNCArNDQ4LDI4IEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+IkF0aXZhciBvIEJsdWV0b290aD8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX21lc3NhZ2UiIG1zZ2lkPSI5MTA2NTk1OTkwNzA4OTg1Mzg1Ij4iUGFyYSBjb25lY3RhciBvIHRlY2xhZG8gYW8gdGFibGV0LCDDqSBwcmVjaXNvIHByaW1laXJvIGF0aXZhciBvIEJsdWV0b290aC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiJBdGl2YXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiJBcGxpY2FyIGEgbm90aWZpY2HDp8O1ZXMgZGUgPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4iQXBsaWNhciBhIHRvZGFzIGFzIG5vdGlmaWNhw6fDtWVzIGRlc3RlIGFwcCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfaW1wb3J0YW5jZSIgbXNnaWQ9IjUxOTg1Nzg5ODg5NzgyMzQxNjEiPiJCbG9xdWVhZGFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4iSW1wb3J0w6JuY2lhIGJhaXhhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9pbXBvcnRhbmNlIiBtc2dpZD0iODE5MjEwNzY4OTk5NTc0MjY1MyI+IkltcG9ydMOibmNpYSBub3JtYWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoaWdoX2ltcG9ydGFuY2UiIG1zZ2lkPSIxNTI3MDY2MTk1NjE0MDUwMjYzIj4iSW1wb3J0w6JuY2lhIGVsZXZhZGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfaW1wb3J0YW5jZSIgbXNnaWQ9IjUwODkwMDU4NzI3MTk1NjM4OTQiPiJJbXBvcnTDom5jaWEgdXJnZW50ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4iTnVuY2EgbW9zdHJhciBlc3NhcyBub3RpZmljYcOnw7VlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjQzODM1NjMyNjczNzA4NTk3MjUiPiJNb3N0cmFyIG5hIHBhcnRlIGluZmVyaW9yIGRhIGxpc3RhIGRlIG5vdGlmaWNhw6fDtWVzIGRlIGZvcm1hIHNpbGVuY2lvc2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+Ik1vc3RyYXIgZXNzYXMgbm90aWZpY2HDp8O1ZXMgZGUgZm9ybWEgc2lsZW5jaW9zYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4iTW9zdHJhciBuYSBwYXJ0ZSBzdXBlcmlvciBkYSBsaXN0YSBkZSBub3RpZmljYcOnw7VlcyBlIGVtaXRpciBzb20iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4iTW9zdHJhciBwYXJjaWFsbWVudGUgbmEgdGVsYSBlIGVtaXRpciBzb20iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+Ik1haXMgY29uZmlndXJhw6fDtWVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4iQ29uY2x1w61kbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9ub25lIiBtc2dpZD0iMjEyMTk1NzkyNjA0MDU0MzE0OCI+IkNvcmVzIG5vcm1haXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4iQ29yZXMgbm90dXJuYXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+IkNvcmVzIHBlcnNvbmFsaXphZGFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4iQ29yZXMgZGVzY29uaGVjaWRhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3RyYW5zZm9ybSIgbXNnaWQ9IjY5ODU0NjA0MDgwNzkwODYwOTAiPiJNb2RpZmljYcOnw6NvIGRlIGNvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+Ik1vc3RyYXIgYmxvY28gZGUgY29uZmlndXJhw6fDtWVzIHLDoXBpZGFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiJBdGl2YXIgdHJhbnNmb3JtYcOnw6NvIHBlcnNvbmFsaXphZGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9hcHBseSIgbXNnaWQ9IjkyMTI2MDIwMTI2NDEwMzQyODMiPiJBcGxpY2FyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+IkNvbmZpcm1hciBjb25maWd1cmHDp8O1ZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfbWVzc2FnZSIgbXNnaWQ9IjkxMTYwMDEwNjkzOTc5OTY2OTEiPiJBbGd1bWFzIGNvbmZpZ3VyYcOnw7VlcyBkZSBjb3IgcG9kZW0gdG9ybmFyIG8gZGlzcG9zaXRpdm8gaW51dGlsaXrDoXZlbC4gQ2xpcXVlIGVtIFwiT0tcIiBwYXJhIGNvbmZpcm1hciBlc3NhcyBjb25maWd1cmHDp8O1ZXMgZGUgY29yOyBjYXNvIGNvbnRyw6FyaW8sIGVzc2FzIGNvbmZpZ3VyYcOnw7VlcyBzZXLDo28gcmVkZWZpbmlkYXMgYXDDs3MgMTAgc2VndW5kb3MuIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXJvL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1yby9zdHJpbmdzLnhtbAppbmRleCAzZjBiMmE0Li4zYWI4YmYyIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXJvL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtcm8vc3RyaW5ncy54bWwKQEAgLTMwMiw4ICszMDIsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+ImPEg3V0YXJlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sYXVuY2hfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjI5NjkyODc4MzgxMjA1NTA1MDYiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4gbnUgYSBwdXR1dCBwb3JuaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4iTWFpIG11bHQiPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCAoNjMzNzE1NTYwODA1NTA2MjQyOSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQiIG1zZ2lkPSI2MzM3MTU1NjA4MDU1MDYyNDI5Ij4iw45uY8SDIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2hvcml6b250YWwiIG1zZ2lkPSI4ODQ4NTE0NDc0NTQzNDI3MzMyIj4iRGl2aXphcmUgcGUgb3Jpem9udGFsxIMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF92ZXJ0aWNhbCIgbXNnaWQ9IjkwNzUyOTIyMzM2OTYxODA4MTMiPiJEaXZpemFyZSBwZSB2ZXJ0aWNhbMSDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfY3VzdG9tIiBtc2dpZD0iNDE3NzgzNzU5NzUxMzcwMTk0MyI+IkRpdml6YXJlIHBlcnNvbmFsaXphdMSDIjwvc3RyaW5nPgpAQCAtMzY2LDcgKzM2NSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+IkVjb25vbWlzaXJlYSBiYXRlcmllaSBlc3RlIGFjdGl2YXTEgyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiJSZWR1Y2UgcGVyZm9ybWFuyJthIMiZaSBkYXRlbGUgZGUgZnVuZGFsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiJEZXphY3RpdmHIm2kgZWNvbm9taXNpcmVhIGJhdGVyaWVpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IkNvbsibaW51dHVsIGVzdGUgYXNjdW5zIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiI8eGxpZmY6ZyBpZD0iQVBQX1NFRUtJTkdfUEVSTUlTU0lPTiI+JXM8L3hsaWZmOmc+IHZhIMOubmNlcGUgc8SDIGNhcHR1cmV6ZSB0b3QgY2VlYSBjZSBzZSBhZmnImWVhesSDIHBlIGVjcmFuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fcmVtZW1iZXJfdGV4dCIgbXNnaWQ9IjMxMDM1MTA4ODIxNzI3NDY3NTIiPiJOdSBzZSBtYWkgYWZpyJllYXrEgyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNsZWFyX2FsbF9ub3RpZmljYXRpb25zX3RleHQiIG1zZ2lkPSI4MTQxOTI4ODk3NzE0NjI4MjgiPiLImHRlcmdlyJtpIHRvYXRlIG5vdGlmaWPEg3JpbGUiPC9zdHJpbmc+CkBAIC00NTEsNCArNDQ5LDI4IEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+IkFjdGl2YcibaSBCbHVldG9vdGg/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9tZXNzYWdlIiBtc2dpZD0iOTEwNjU5NTk5MDcwODk4NTM4NSI+IlBlbnRydSBhIGNvbmVjdGEgdGFzdGF0dXJhIGxhIHRhYmxldMSDLCBtYWkgw65udMOiaSB0cmVidWllIHPEgyBhY3RpdmHIm2kgQmx1ZXRvb3RoLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+IkFjdGl2YcibaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX3RvcGljIiBtc2dpZD0iMzY0MTQwMzQ4OTMxODY1OTY2NiI+IkFwbGljYcibaSBub3RpZmljxINyaWxvciBkZSB0aXAgPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4iQXBsaWNhyJtpIHR1dHVyb3Igbm90aWZpY8SDcmlsb3IgZGUgbGEgYWNlYXN0xIMgYXBsaWNhyJtpZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfaW1wb3J0YW5jZSIgbXNnaWQ9IjUxOTg1Nzg5ODg5NzgyMzQxNjEiPiJCbG9jYXRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4iSW1wb3J0YW7Im8SDIHJlZHVzxIMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4iSW1wb3J0YW7Im8SDIG5vcm1hbMSDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+IkltcG9ydGFuyJvEgyByaWRpY2F0xIMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfaW1wb3J0YW5jZSIgbXNnaWQ9IjUwODkwMDU4NzI3MTk1NjM4OTQiPiJJbXBvcnRhbsibxIM6IHVyZ2VudGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iMjM5NzE5MjY0MjY1Nzg3Mjg3MiI+IkFjZXN0ZSBub3RpZmljxINyaSBudSBzZSBhZmnImWVhesSDIG5pY2lvZGF0xIMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4iU2UgYWZpyJllYXrEgyDDrm4gcGFydGVhIGRlIGpvcyBhIGxpc3RlaSBjdSBub3RpZmljxINyaSBmxINyxIMgYSBzZSBlbWl0ZSB1biBzdW5ldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI0OTI2NTI5NjE1OTIwNjEwODE3Ij4iQWNlc3RlIG5vdGlmaWPEg3JpIHNlIGFmaciZZWF6xIMgZsSDcsSDIGEgc2UgZW1pdGUgdW4gc3VuZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+IlNlIGFmaciZZWF6xIMgw65uIHBhcnRlYSBkZSBzdXMgYSBsaXN0ZWkgY3Ugbm90aWZpY8SDcmkgyJlpIHNlIGVtaXRlIHVuIHN1bmV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iNTIzNjk4NzE3MTkwNDc1NjEzNCI+IlNlIGFmaciZZWF6xIMgcGVudHJ1IG8gc2N1cnTEgyBkdXJhdMSDIHBlIGVjcmFuIMiZaSBzZSBlbWl0ZSB1biBzdW5ldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9tb3JlX3NldHRpbmdzIiBtc2dpZD0iODE2MzA2MjgzMzk2NTUzNTcxIj4iTWFpIG11bHRlIHNldMSDcmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiJUZXJtaW5hdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9ub25lIiBtc2dpZD0iMjEyMTk1NzkyNjA0MDU0MzE0OCI+IkN1bG9yaSBub3JtYWxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+IkN1bG9yaSBkZSBub2FwdGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+IkN1bG9yaSBwZXJzb25hbGl6YXRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4iQ3Vsb3JpIG5lY3Vub3NjdXRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+Ik1vZGlmaWNhcmVhIGN1bG9yaWxvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+IkFmaciZYcibaSBjYXNldGEgY3UgU2V0xINyaWxlIHJhcGlkZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4iQWN0aXZhyJtpIHRyYW5zZm9ybWFyZWEgcGVyc29uYWxpemF0xIMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9hcHBseSIgbXNnaWQ9IjkyMTI2MDIwMTI2NDEwMzQyODMiPiJBcGxpY2HIm2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfdGl0bGUiIG1zZ2lkPSI0NzQ2NjY2NTQ1NDgwNTM0NjYzIj4iQ29uZmlybWHIm2kgc2V0xINyaWxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X21lc3NhZ2UiIG1zZ2lkPSI5MTE2MDAxMDY5Mzk3OTk2NjkxIj4iVW5lbGUgc2V0xINyaSBwZW50cnUgY3Vsb3JpIHBvdCBmYWNlIGRpc3Bveml0aXZ1bCBzxIMgbnUgbWFpIGZ1bmPIm2lvbmV6ZS4gRGHIm2kgY2xpYyBwZSBPSyBwZW50cnUgYSBjb25maXJtYSBhY2VzdGUgc2V0xINyaSBwZW50cnUgY3Vsb3JpLiDDjm4gY2F6IGNvbnRyYXIsIGFjZXN0ZWEgc2Ugdm9yIHJlc2V0YSBkdXDEgyAxMCBzZWN1bmRlLiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1ydS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtcnUvc3RyaW5ncy54bWwKaW5kZXggYjkyZGFkYy4uNmZmZDMzMyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1ydS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXJ1L3N0cmluZ3MueG1sCkBAIC0zMDMsOCArMzAzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2VhcmNoX2Jhcl9sYWJlbCIgbXNnaWQ9IjgwNzQ5OTc0MDAxODc4MzY2NzciPiLQv9C+0LjRgdC6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sYXVuY2hfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjI5NjkyODc4MzgxMjA1NTA1MDYiPiLQndC1INGD0LTQsNC70L7RgdGMINC30LDQv9GD0YHRgtC40YLRjCDQv9GA0LjQu9C+0LbQtdC90LjQtSBcIjx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPlwiIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zaG93X2hpc3RvcnlfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNzA2MjA4ODE5NjQ0OTc0NzI0NSI+ItCV0YnRkSI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciByZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0ICg2MzM3MTU1NjA4MDU1MDYyNDI5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCIgbXNnaWQ9IjYzMzcxNTU2MDgwNTUwNjI0MjkiPiLQldGJ0ZHCoDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2hvcml6b250YWwiIG1zZ2lkPSI4ODQ4NTE0NDc0NTQzNDI3MzMyIj4i0KDQsNC30LTQtdC70LjRgtGMINC/0L4g0LPQvtGA0LjQt9C+0L3RgtCw0LvQuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X3ZlcnRpY2FsIiBtc2dpZD0iOTA3NTI5MjIzMzY5NjE4MDgxMyI+ItCg0LDQt9C00LXQu9C40YLRjCDQv9C+INCy0LXRgNGC0LjQutCw0LvQuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2N1c3RvbSIgbXNnaWQ9IjQxNzc4Mzc1OTc1MTM3MDE5NDMiPiLQoNCw0LfQtNC10LvQuNGC0Ywg0L/Qvi3QtNGA0YPQs9C+0LzRgyI8L3N0cmluZz4KQEAgLTM2Nyw3ICszNjYsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzc5MTg3MjY3NTA5NTU4NTkiPiLQktC60LvRjtGH0LXQvSDRgNC10LbQuNC8INGN0L3QtdGA0LPQvtGB0LHQtdGA0LXQttC10L3QuNGPIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+ItCe0YLQutC7LiDRhNC+0L3QvtCy0L7QuSDQv9C10YDQtdC00LDRh9C4INC00LDQvdC90YvRhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4i0J7RgtC60LvRjtGH0LjRgtGMINGA0LXQttC40Lwg0Y3QvdC10YDQs9C+0YHQsdC10YDQtdC20LXQvdC40Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4i0KHQvtC00LXRgNC20LjQvNC+0LUg0YHQutGA0YvRgtC+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiLQn9GA0LjQu9C+0LbQtdC90LjQtSA8eGxpZmY6ZyBpZD0iQVBQX1NFRUtJTkdfUEVSTUlTU0lPTiI+JXM8L3hsaWZmOmc+INC/0L7Qu9GD0YfQuNGCINC00L7RgdGC0YPQvyDQuiDQuNC30L7QsdGA0LDQttC10L3QuNGOINC90LAg0Y3QutGA0LDQvdC1INGD0YHRgtGA0L7QudGB0YLQstCwLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fcmVtZW1iZXJfdGV4dCIgbXNnaWQ9IjMxMDM1MTA4ODIxNzI3NDY3NTIiPiLQkdC+0LvRjNGI0LUg0L3QtSDQv9C+0LrQsNC30YvQstCw0YLRjCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNsZWFyX2FsbF9ub3RpZmljYXRpb25zX3RleHQiIG1zZ2lkPSI4MTQxOTI4ODk3NzE0NjI4MjgiPiLQntGH0LjRgdGC0LjRgtGMINCy0YHQtSI8L3N0cmluZz4KQEAgLTQ1Miw0ICs0NTAsMjggQEAKICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfdGl0bGUiIG1zZ2lkPSI1MDI3MDM3NzA2NTAwNjM1MjY5Ij4i0J/QvtC00LrQu9GO0YfQtdC90LjQtSDQv9C+IEJsdWV0b290aCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiLQp9GC0L7QsdGLINC/0L7QtNC60LvRjtGH0LjRgtGMINC60LvQsNCy0LjQsNGC0YPRgNGDINC6INC/0LvQsNC90YjQtdGC0YMsINCy0LrQu9GO0YfQuNGC0LUgQmx1ZXRvb3RoLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+ItCS0LrQu9GO0YfQuNGC0YwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiLQn9GA0LjQvNC10L3QuNGC0Ywg0Log0YPQstC10LTQvtC80LvQtdC90LjRj9C8INC90LAg0YLQtdC80YMgXCI8eGxpZmY6ZyBpZD0iVE9QSUNfTkFNRSI+JTEkczwveGxpZmY6Zz5cIiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+ItCf0YDQuNC80LXQvdC40YLRjCDQutC+INCy0YHQtdC8INGD0LLQtdC00L7QvNC70LXQvdC40Y/QvCDRjdGC0L7Qs9C+INC/0YDQuNC70L7QttC10L3QuNGPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+ItCR0LvQvtC60LjRgNC+0LLQutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4i0J3QuNC30LrQsNGPINCy0LDQttC90L7RgdGC0YwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4i0KHRgNC10LTQvdGP0Y8g0LLQsNC20L3QvtGB0YLRjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiLQktGL0YHQvtC60LDRjyDQstCw0LbQvdC+0YHRgtGMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4i0JrRgNCw0LnQvdGP0Y8g0LLQsNC20L3QvtGB0YLRjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4i0J3QtSDQv9C+0LrQsNC30YvQstCw0YLRjCDRjdGC0Lgg0YPQstC10LTQvtC80LvQtdC90LjRjy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4i0J/QvtC60LDQt9GL0LLQsNGC0Ywg0LHQtdC3INC30LLRg9C60LAg0LIg0LrQvtC90YbQtSDRgdC/0LjRgdC60LAg0YPQstC10LTQvtC80LvQtdC90LjQuS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+ItCf0L7QutCw0LfRi9Cy0LDRgtGMINGD0LLQtdC00L7QvNC70LXQvdC40Y8g0LHQtdC3INC30LLRg9C60LAuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMyMjI2ODAxMzY2MTI0MDgyMjMiPiLQn9C+0LrQsNC30YvQstCw0YLRjCDRgdC+INC30LLRg9C60L7QvCDQsiDQvdCw0YfQsNC70LUg0YHQv9C40YHQutCwINGD0LLQtdC00L7QvNC70LXQvdC40LkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iNTIzNjk4NzE3MTkwNDc1NjEzNCI+ItCf0L7QutCw0LfRi9Cy0LDRgtGMINGB0L4g0LfQstGD0LrQvtC8INC/0L7QstC10YDRhSDQstGB0LXRhSDQvtC60L7QvS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+ItCU0YDRg9Cz0LjQtSDQvdCw0YHRgtGA0L7QudC60LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiLQk9C+0YLQvtCy0L4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiLQntCx0YvRh9C90YvQtSDRhtCy0LXRgtCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+ItCd0L7Rh9C90YvQtSDRhtCy0LXRgtCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X2N1c3RvbSIgbXNnaWQ9IjM2NTU1NzY0OTIzMjIyOTg3MTMiPiLQodC+0LHRgdGC0LLQtdC90L3Ri9C1INGG0LLQtdGC0LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiLQndC10LjQt9Cy0LXRgdGC0L3Ri9C1INGG0LLQtdGC0LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4i0KbQstC10YLQvtCy0YvQtSDQvdCw0YHRgtGA0L7QudC60LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfc2hvd19xcyIgbXNnaWQ9IjE3NjMyNDQzNTQzOTkyNzY2NzkiPiLQn9C+0LrQsNC30YvQstCw0YLRjCDQv9Cw0L3QtdC70Ywg0LHRi9GB0YLRgNGL0YUg0L3QsNGB0YLRgNC+0LXQuiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4i0JLQutC70Y7Rh9C40YLRjCDRgdC+0LHRgdGC0LLQtdC90L3Ri9C1INC90LDRgdGC0YDQvtC50LrQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+ItCf0YDQuNC80LXQvdC40YLRjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiLQn9C+0LTRgtCy0LXRgNC00LjRgtC1INC90LDRgdGC0YDQvtC50LrQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+ItCd0LXQutC+0YLQvtGA0YvQtSDRhtCy0LXRgtC+0LLRi9C1INC90LDRgdGC0YDQvtC50LrQuCDQvNC+0LPRg9GCINC30LDRgtGA0YPQtNC90LjRgtGMINGA0LDQsdC+0YLRgyDRgSDRg9GB0YLRgNC+0LnRgdGC0LLQvtC8LiDQp9GC0L7QsdGLINC/0YDQuNC80LXQvdC40YLRjCDQstGL0LHRgNCw0L3QvdGL0LUg0L/QsNGA0LDQvNC10YLRgNGLLCDQvdCw0LbQvNC40YLQtSBcItCe0JpcIi4g0JIg0L/RgNC+0YLQuNCy0L3QvtC8INGB0LvRg9GH0LDQtSDQvtC90Lgg0LHRg9C00YPRgiDRgdCx0YDQvtGI0LXQvdGLINGH0LXRgNC10LcgMTDCoNGB0LXQutGD0L3QtC4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtc2ktckxLL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1zaS1yTEsvc3RyaW5ncy54bWwKaW5kZXggNGExOGY2ZS4uZWZiYzA0MiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1zaS1yTEsvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1zaS1yTEsvc3RyaW5ncy54bWwKQEAgLTMwMSw4ICszMDEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+IuC3g+C3meC3gOC3k+C2uCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IOC2huC2u+C2uOC3iuC2tyDgtprgt4Ug4Lax4Lec4LeE4LeQ4LaaLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2hvd19oaXN0b3J5X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjcwNjIwODgxOTY0NDk3NDcyNDUiPiLgtq3gt4Dgtq3gt4oiPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCAoNjMzNzE1NTYwODA1NTA2MjQyOSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQiIG1zZ2lkPSI2MzM3MTU1NjA4MDU1MDYyNDI5Ij4i4Lat4LeAIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2hvcml6b250YWwiIG1zZ2lkPSI4ODQ4NTE0NDc0NTQzNDI3MzMyIj4i4Lat4LeS4La74LeD4LeK4LeAIOC3gOC3meC2seC3iiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF92ZXJ0aWNhbCIgbXNnaWQ9IjkwNzUyOTIyMzM2OTYxODA4MTMiPiLgt4Pgt5Lgtrvgt4Pgt4rgt4Ag4LeA4LeZ4Lax4LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2N1c3RvbSIgbXNnaWQ9IjQxNzc4Mzc1OTc1MTM3MDE5NDMiPiLgtoXgtrfgt5Lgtrjgtq0g4La94LeZ4LeDIOC3gOC3meC2seC3iiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CkBAIC0zNjUsNyArMzY0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjM3OTE4NzI2NzUwOTU1ODU5Ij4i4La24LeQ4Lan4La74LeS4La6IOC3g+C3lOC2u+C2muC3kuC2seC3iuC2seC3jyDgt4Pgtprgt4rigI3gtrvgt5Pgtrrgtrrgt5IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iODIwMzE4Nzg4MTI2NjcyNjkyIj4i4Laa4LeK4oCN4La74LeS4La64LeP4Laa4LeP4La74LeS4Lat4LeK4LeA4La6IOC3g+C3hCDgtrTgt4Pgt5Tgtrbgt5Lgtrjgt4og4Lav4Lat4LeK4LatIOC2heC2qeC3lCDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl9hY3Rpb25fdGV4dCIgbXNnaWQ9IjEwOTE1ODY1ODIzODExMDM4MiI+IuC2tuC3kOC2p+C2u+C3kiDgt4Pgt5Tgtrvgt5Dgtprgt5Pgtrgg4LaF4Laa4LeK4oCN4La74LeS4La6IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLgt4Pgt5Dgtp/gt4Dgt5Tgtqvgt5Qg4LeD4La44LeK4La24Lax4LeK4Law4Lat4LePIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiLgtpTgtrbgtpzgt5og4Lat4LeT4La74La64LeaIOC2r+C2u+C3iuC3geC2seC2uiDgt4DgtrEg4LeD4LeR4La4IOC2r+C3meC2uuC2uCA8eGxpZmY6ZyBpZD0iQVBQX1NFRUtJTkdfUEVSTUlTU0lPTiI+JXM8L3hsaWZmOmc+IOC2veC2tuC3j+C2nOC3kOC2seC3k+C2uCDgtobgtrvgtrjgt4rgtrcg4Laa4La74LaxIOC2veC2r+C3ki4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX3JlbWVtYmVyX3RleHQiIG1zZ2lkPSIzMTAzNTEwODgyMTcyNzQ2NzUyIj4i4Lax4LeQ4LeA4LatIOC2seC3nOC2tOC3meC2seC3iuC3gOC2seC3iuC2sSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNsZWFyX2FsbF9ub3RpZmljYXRpb25zX3RleHQiIG1zZ2lkPSI4MTQxOTI4ODk3NzE0NjI4MjgiPiLgt4Pgt5Lgtrrgtr3gt4rgtr0g4LeE4LeS4LeD4LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KQEAgLTQ1MCw0ICs0NDgsMjggQEAKICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfdGl0bGUiIG1zZ2lkPSI1MDI3MDM3NzA2NTAwNjM1MjY5Ij4i4La24LeK4La94LeW4Lan4LeW4Lat4LeKIOC2muC3iuKAjeC2u+C3kuC2uuC3j+C2reC3iuC2uOC2miDgtprgtrvgtrHgt4rgtrHgtq8/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9tZXNzYWdlIiBtc2dpZD0iOTEwNjU5NTk5MDcwODk4NTM4NSI+IuC2lOC2tuC3miDgtrrgtq3gt5Tgtrvgt5Qg4La04LeU4LeA4La74LeU4LeAIOC2lOC2tuC3miDgtqfgt5Dgtrbgt4rgtr3gtqfgt4og4La04La74LeS4Lac4Lar4Laa4La64LanIOC3g+C2uOC3iuC2tuC2seC3iuC2sCDgtprgt5Lgtrvgt5PgtrjgtqcsIOC2lOC2tiDgtrTgt4Xgtrjgt5Tgt4Ag4La24LeK4La94LeW4Lan4LeW4Lat4LeKIOC2muC3iuKAjeC2u+C3kuC2uuC3j+C2reC3iuC2uOC2miDgtprgt4Ug4La64LeU4Lat4LeU4La6LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+IuC2muC3iuKAjeC2u+C3kuC2uuC3j+C2reC3iuC2uOC2miDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiI8eGxpZmY6ZyBpZD0iVE9QSUNfTkFNRSI+JTEkczwveGxpZmY6Zz4g4Lav4LeQ4Lax4LeU4La44LeK4Lav4LeT4La44LeKIOC3gOC3meC2rSDgtrrgt5zgtq/gtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b19hcHAiIG1zZ2lkPSIzNjMwMTY3ODM5Mzk4MTU5NjAiPiLgtrjgt5ngtrgg4La64LeZ4Lav4LeU4La4IOC3gOC3meC2reC3kuC2seC3iiDgt4DgtrEg4LeD4LeS4La64La94LeUIOC2r+C3kOC2seC3lOC2uOC3iuC2r+C3k+C2uOC3iiDgt4PgtrPgt4Tgt48g4La64Lec4Lav4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IuC2heC3gOC3hOC3kuC2uyDgtprgtrvgtrEg4La94Lav4LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4i4LaF4Lap4LeUIOC3gOC3kOC2r+C2nOC2reC3iuC2muC2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiLgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrog4LeA4LeQ4Lav4Lac4Lat4LeK4Laa4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+IuC3gOC3kOC2qeC3kiDgt4Dgt5Dgtq/gtpzgtq3gt4rgtprgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfaW1wb3J0YW5jZSIgbXNnaWQ9IjUwODkwMDU4NzI3MTk1NjM4OTQiPiLgt4Tgtq/gt5Lgt4Pgt5Ig4LeA4LeQ4Lav4Lac4Lat4LeK4Laa4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjIzOTcxOTI2NDI2NTc4NzI4NzIiPiLgtrjgt5ngtrgg4Lav4LeQ4Lax4LeU4La44LeK4Lav4LeT4La44LeKIOC2muC3kuC3g+C3kuC2r+C3jyDgtrHgt5zgtrTgt5ngtrHgt4rgt4DgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4i4Lav4LeQ4Lax4LeU4La44LeK4Lav4LeT4La44LeKIOC2veC3kOC2uuC3kuC3g+C3iuC2reC3lOC3gOC3meC3hOC3kiDgtrTgt4Tgt4Xgt5LgtrHgt4rgtrgg4Lax4LeS4LeB4LeK4LeB4La24LeK4Lav4LeAIOC2tOC3meC2seC3iuC3gOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI0OTI2NTI5NjE1OTIwNjEwODE3Ij4i4Lax4LeS4LeB4LeK4LeB4La24LeK4Lav4LeAIOC2uOC3meC2uCDgtq/gt5DgtrHgt5Tgtrjgt4rgtq/gt5Pgtrjgt4og4La04LeZ4Lax4LeK4LeA4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMyMjI2ODAxMzY2MTI0MDgyMjMiPiLgtq/gt5DgtrHgt5Tgtrjgt4rgtq/gt5Pgtrjgt4og4La94LeQ4La64LeS4LeD4LeK4Lat4LeU4LeA4LeZ4LeE4LeSIOC2ieC3hOC3heC3kuC2seC3iuC2uCDgtrTgt5ngtrHgt4rgt4DgtrHgt4rgtrEg4LeD4LeEIOC3geC2tuC3iuC2ryDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4i4Lat4LeS4La74La64LanIOC2tOC3kOC2uOC3kuC2qyDgt4Hgtrbgt4rgtq8g4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX21vcmVfc2V0dGluZ3MiIG1zZ2lkPSI4MTYzMDYyODMzOTY1NTM1NzEiPiLgtq3gt4Ag4LeD4LeQ4Laa4LeD4LeT4La44LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4i4Lax4LeS4La44La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25vbmUiIG1zZ2lkPSIyMTIxOTU3OTI2MDQwNTQzMTQ4Ij4i4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC3gOC2u+C3iuC2qyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9uaWdodCIgbXNnaWQ9IjU5NDM4MTc2MjIxMDUzMDcwNzIiPiLgtrvgt4/gtq3gt4rigI3gtrvgt5Mg4LeA4La74LeK4LarIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X2N1c3RvbSIgbXNnaWQ9IjM2NTU1NzY0OTIzMjIyOTg3MTMiPiLgtoXgtrfgt5Lgtrvgt5TgtqDgt5Ig4LeA4La74LeK4LarIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4i4Lax4Lec4Lav4Lax4LeK4Lax4LePIOC3gOC2u+C3iuC2qyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3RyYW5zZm9ybSIgbXNnaWQ9IjY5ODU0NjA0MDgwNzkwODYwOTAiPiLgt4Dgtrvgt4rgtqsg4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+IuC2ieC2muC3iuC2uOC2seC3iiDgt4Pgt5Dgtprgt4Pgt5Pgtrjgt4og4Lan4La64LeS4La94La6IOC2tOC3meC2seC3iuC3gOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4i4LaF4La34LeS4La74LeU4Lag4LeSIOC2tOC2u+C3kuC3gOC2u+C3iuC2reC2seC2uiDgt4Pgtrbgtr0g4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4i4La64Lec4Lav4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+IuC3g+C3kOC2muC3g+C3k+C2uOC3iiDgtq3gt4Tgt4Dgt5Tgtrvgt5Qg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X21lc3NhZ2UiIG1zZ2lkPSI5MTE2MDAxMDY5Mzk3OTk2NjkxIj4i4LeD4La44LeE4La7IOC3gOC2u+C3iuC2qyDgt4Pgt5Dgtprgt4Pgt5Pgtrjgt4og4La44LeZ4La4IOC2i+C2tOC3j+C2guC2nOC2uiDgtrfgt4/gt4Dgt5Lgtq0g4Laa4LeFIOC2seC3nOC3hOC3kOC2muC3kiDgtq3gtq3gt4rgtq3gt4rgt4Dgtrrgtqcg4La04Lat4LeKIOC2muC3hSDgt4Tgt5Dgtprgt5LgtrouIOC2uOC3meC2uCDgt4Dgtrvgt4rgtqsg4LeD4LeQ4Laa4LeD4LeT4La44LeKIOC2reC3hOC3gOC3lOC2u+C3lCDgtprgt5Lgtrvgt5Pgtrjgtqcg4LeE4La74LeSIOC2muC3iuC2veC3kuC2muC3iiDgtprgtrvgtrHgt4rgtrEsIOC2seC3kOC2reC3hOC3nOC2reC3iiDgtrjgt5ngtrgg4LeD4LeQ4Laa4LeD4LeT4La44LeKIOC2reC2reC3iuC2tOC2uyAxMOC2muC2pyDgtrTgt4Pgt5Tgt4Ag4La64LeF4LeSIOC3g+C2muC3g+C2seC3lCDgtofgtq0uIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXNrL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1zay9zdHJpbmdzLnhtbAppbmRleCA1MWE2MWZlLi4zMTk4NWI0IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXNrL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtc2svc3RyaW5ncy54bWwKQEAgLTMwMyw4ICszMDMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+ImjEvmFkYcWlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sYXVuY2hfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjI5NjkyODc4MzgxMjA1NTA1MDYiPiJBcGxpa8OhY2l1IDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiBzYSBuZXBvZGFyaWxvIHNwdXN0acWlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zaG93X2hpc3RvcnlfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNzA2MjA4ODE5NjQ0OTc0NzI0NSI+IlZpYWMiPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCAoNjMzNzE1NTYwODA1NTA2MjQyOSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQiIG1zZ2lkPSI2MzM3MTU1NjA4MDU1MDYyNDI5Ij4ixI5hbMWhaWUgKDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPikiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9ob3Jpem9udGFsIiBtc2dpZD0iODg0ODUxNDQ3NDU0MzQyNzMzMiI+IlJvemRlbGnFpSB2b2Rvcm92bsOpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfdmVydGljYWwiIG1zZ2lkPSI5MDc1MjkyMjMzNjk2MTgwODEzIj4iUm96ZGVsacWlIHp2aXNsw6kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4iUm96ZGVsacWlIHZsYXN0bsOpIjwvc3RyaW5nPgpAQCAtMzY3LDcgKzM2Niw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+IsWgZXRyacSNIGJhdMOpcmllIGplIHphcG51dMO9Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+Ik9ibWVkesOtIHbDvWtvbm5vc8WlIGEgcHJlbm9zIMO6ZGFqb3YgbmEgcG96YWTDrSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4iVnlwbsO6xaUgxaFldHJpxI0gYmF0w6lyaWUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4iU2tyeXTDvSBvYnNhaCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fZGlhbG9nX3RleHQiIG1zZ2lkPSIzMDcxNDMxMDI1NDQ4MjE4OTI4Ij4iQXBsaWvDoWNpYSA8eGxpZmY6ZyBpZD0iQVBQX1NFRUtJTkdfUEVSTUlTU0lPTiI+JXM8L3hsaWZmOmc+IHphxI1uZSB6YXpuYW1lbsOhdmHFpSB2xaFldG9rIG9ic2FoIHpvYnJhemVuw70gbmEgdmHFoWVqIG9icmF6b3ZrZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX3JlbWVtYmVyX3RleHQiIG1zZ2lkPSIzMTAzNTEwODgyMTcyNzQ2NzUyIj4iTmFidWTDumNlIG5lem9icmF6b3ZhxaUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4iVnltYXphxaUgdsWhZXRrbyI8L3N0cmluZz4KQEAgLTQ1Miw0ICs0NTAsMjggQEAKICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfdGl0bGUiIG1zZ2lkPSI1MDI3MDM3NzA2NTAwNjM1MjY5Ij4iWmFwbsO6xaUgQmx1ZXRvb3RoPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiJBayBjaGNldGUga2zDoXZlc25pY3UgcHJpcG9qacWlIGvCoHRhYmxldHUsIG5hanBydiBtdXPDrXRlIHphcG7DusWlIEJsdWV0b290aC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiJaYXBuw7rFpSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX3RvcGljIiBtc2dpZD0iMzY0MTQwMzQ4OTMxODY1OTY2NiI+IlBvdcW+acWlIG5hIHVwb3pvcm5lbmlhIHTDvWthasO6Y2Ugc2EgdMOpbXkgPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4iUG91xb5pxaUgbmEgdsWhZXRreSB1cG96b3JuZW5pYSB6wqB0ZWp0byBhcGxpa8OhY2llIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IlphYmxva292YW7DqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbXBvcnRhbmNlIiBtc2dpZD0iNDEwOTkyOTk4NjEwNzE0NzkzMCI+Ik7DrXprYSBkw7RsZcW+aXRvc8WlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9pbXBvcnRhbmNlIiBtc2dpZD0iODE5MjEwNzY4OTk5NTc0MjY1MyI+Ik5vcm3DoWxuYSBkw7RsZcW+aXRvc8WlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+IlZ5c29rw6EgZMO0bGXFvml0b3PFpSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1heF9pbXBvcnRhbmNlIiBtc2dpZD0iNTA4OTAwNTg3MjcxOTU2Mzg5NCI+Ik5lb2RrbGFkbsOhIGTDtGxlxb5pdG9zxaUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iMjM5NzE5MjY0MjY1Nzg3Mjg3MiI+IlRpZXRvIHVwb3pvcm5lbmlhIG5pa2R5IG5lem9icmF6b3ZhxaUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4iWm9icmF6b3ZhxaUgdsKgZG9sbmVqIMSNYXN0aSB6b3puYW11IHVwb3pvcm5lbsOtIGJleiB6dnVrb3bDqWhvIHNpZ27DoWx1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9IjQ5MjY1Mjk2MTU5MjA2MTA4MTciPiJUaWV0byB1cG96b3JuZW5pYSB6b2JyYXpvdmHFpSBiZXogenZ1a292w6lobyBzaWduw6FsdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4iWm9icmF6b3ZhxaUgdsKgaG9ybmVqIMSNYXN0aSB6b3puYW11IHVwb3pvcm5lbsOtIHNvIHp2dWtvdsO9bSBzaWduw6Fsb20iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4iWm9icmF6b3ZhxaUgY2V6IG9icmF6b3ZrdSBzbyB6dnVrb3bDvW0gc2lnbsOhbG9tIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX21vcmVfc2V0dGluZ3MiIG1zZ2lkPSI4MTYzMDYyODMzOTY1NTM1NzEiPiLEjmFsxaFpZSBuYXN0YXZlbmlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4iSG90b3ZvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25vbmUiIG1zZ2lkPSIyMTIxOTU3OTI2MDQwNTQzMTQ4Ij4iTm9ybcOhbG5lIGZhcmJ5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+Ik5vxI1uw6kgZmFyYnkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+IlZsYXN0bsOpIGZhcmJ5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4iTmV6bsOhbWUgZmFyYnkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4iw5pwcmF2YSBmYXJpZWIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfc2hvd19xcyIgbXNnaWQ9IjE3NjMyNDQzNTQzOTkyNzY2NzkiPiJab2JyYXppxaUgZGxhxb5kaWN1IFLDvWNobGUgbmFzdGF2ZW5pYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4iUG92b2xpxaUgdmxhc3Ruw7ogdHJhbnNmb3Jtw6FjaXUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9hcHBseSIgbXNnaWQ9IjkyMTI2MDIwMTI2NDEwMzQyODMiPiJQb3XFvmnFpSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiJQb3R2cmRlbmllIG5hc3RhdmVuw60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfbWVzc2FnZSIgbXNnaWQ9IjkxMTYwMDEwNjkzOTc5OTY2OTEiPiJOaWVrdG9yw6kgbmFzdGF2ZW5pYSBmYXJpZWIgbcO0xb51IHRvdG8gemFyaWFkZW5pZSB6bmVmdW5rxI1uacWlLiBUaWV0byBuYXN0YXZlbmlhIGZhcmllYiBwb3R2cmTDrXRlIGtsaWtudXTDrW0gbmEgdGxhxI1pZGxvIE9LLCBpbsOhxI0gc2EgdGlldG8gbmFzdGF2ZW5pYSBvwqAxMCBzZWvDum5kIG9ibm92aWEuIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXNsL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1zbC9zdHJpbmdzLnhtbAppbmRleCBjZGZhMmU5Li43YzhkNDQzIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXNsL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtc2wvc3RyaW5ncy54bWwKQEAgLTMwMyw4ICszMDMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+Imlza2FuamUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xhdW5jaF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMjk2OTI4NzgzODEyMDU1MDUwNiI+IkFwbGlrYWNpamUgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IG5pIGJpbG8gbW9nb8SNZSB6YWduYXRpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2hvd19oaXN0b3J5X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjcwNjIwODgxOTY0NDk3NDcyNDUiPiJWZcSNIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQgKDYzMzcxNTU2MDgwNTUwNjI0MjkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+IkluIMWhZSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9ob3Jpem9udGFsIiBtc2dpZD0iODg0ODUxNDQ3NDU0MzQyNzMzMiI+IlJhemRlbGkgdm9kb3Jhdm5vIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfdmVydGljYWwiIG1zZ2lkPSI5MDc1MjkyMjMzNjk2MTgwODEzIj4iUmF6ZGVsaSBuYXZwacSNbm8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4iUmF6ZGVsaSBwbyBtZXJpIjwvc3RyaW5nPgpAQCAtMzY3LDcgKzM2Niw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+IlZhcsSNZXZhbmplIHogZW5lcmdpam8gYWt1bXVsYXRvcmphIGplIHZrbG9wbGplbm8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iODIwMzE4Nzg4MTI2NjcyNjkyIj4iT21lamkgem1vZ2xqaXZvc3QgZGVsb3ZhbmphIGluIHByZW5vcyBwb2RhdGtvdiB2IG96YWRqdSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4iSXprbG9wIHZhcsSNZXZhbmphIHogZW5lcmdpam8gYWt1bXVsYXRvcmphIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IlZzZWJpbmEgamUgc2tyaXRhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiJBcGxpa2FjaWphIDx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4gYm8gemHEjWVsYSB6YWplbWF0aSB2c2UsIGthciBqZSBwcmlrYXphbm8gbmEgemFzbG9udS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX3JlbWVtYmVyX3RleHQiIG1zZ2lkPSIzMTAzNTEwODgyMTcyNzQ2NzUyIj4iVGVnYSBuZSBwcmlrYcW+aSB2ZcSNIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+Ikl6YnJpxaFpIHZzZSI8L3N0cmluZz4KQEAgLTQ1Miw0ICs0NTAsMjggQEAKICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfdGl0bGUiIG1zZ2lkPSI1MDI3MDM3NzA2NTAwNjM1MjY5Ij4ixb1lbGl0ZSB2a2xvcGl0aSBCbHVldG9vdGg/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9tZXNzYWdlIiBtc2dpZD0iOTEwNjU5NTk5MDcwODk4NTM4NSI+IsSMZSDFvmVsaXRlIHBvdmV6YXRpIHRpcGtvdm5pY28gaW4gdGFibGnEjW5pIHJhxI11bmFsbmlrLCB2a2xvcGl0ZSBCbHVldG9vdGguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9jb25maXJtYXRpb25fb2siIG1zZ2lkPSI2MjU4MDc0MjUwOTQ4MzA5NzE1Ij4iVmtsb3AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiJVcG9yYWJpIHphIG9idmVzdGlsYSB6YSB0ZW1vIDx4bGlmZjpnIGlkPSJUT1BJQ19OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+IlVwb3JhYmkgemEgdnNhIG9idmVzdGlsYSB6YSB0byBhcGxpa2FjaWpvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IkJsb2tpcmFubyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbXBvcnRhbmNlIiBtc2dpZD0iNDEwOTkyOTk4NjEwNzE0NzkzMCI+Ik5pemthIHBvbWVtYm5vc3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4iT2JpxI1ham5hIHBvbWVtYm5vc3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoaWdoX2ltcG9ydGFuY2UiIG1zZ2lkPSIxNTI3MDY2MTk1NjE0MDUwMjYzIj4iVmlzb2thIHBvbWVtYm5vc3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfaW1wb3J0YW5jZSIgbXNnaWQ9IjUwODkwMDU4NzI3MTk1NjM4OTQiPiJOdWpuYSBwb21lbWJub3N0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjIzOTcxOTI2NDI2NTc4NzI4NzIiPiJOaWtvbGkgbmUgcHJpa2HFvmkgdGVoIG9idmVzdGlsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+IlByaWthxb5pIG5hIGRudSBzZXpuYW1hIG9idmVzdGlsIGJyZXogenZva2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+IlByaWthxb5pIHRhIG9idmVzdGlsYSBicmV6IHp2b2thIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMyMjI2ODAxMzY2MTI0MDgyMjMiPiJQcmlrYcW+aSBuYSB2cmh1IHNlem5hbWEgb2J2ZXN0aWwgaW4gcHJlZHZhamFqIHp2b2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4iWmEgaGlwIHBva2HFvmkgcHJlZG9nbGVkIG5hIHphc2xvbnUgaW4gcHJlZHZhamFqIHp2b2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+IlZlxI0gbmFzdGF2aXRldiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9kb25lIiBtc2dpZD0iNTI3OTQyNjA0NzI3MzkzMDE3NSI+IkRva29uxI1hbm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiJPYmnEjWFqbmUgYmFydmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4iTm/EjW5lIGJhcnZlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X2N1c3RvbSIgbXNnaWQ9IjM2NTU1NzY0OTIzMjIyOTg3MTMiPiJCYXJ2ZSBwbyBtZXJpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4iTmV6bmFuZSBiYXJ2ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3RyYW5zZm9ybSIgbXNnaWQ9IjY5ODU0NjA0MDgwNzkwODYwOTAiPiJTcHJlbWluamFuamUgYmFydiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+IlByaWtheiBwbG/FocSNaWNlIHMgaGl0cmltaSBuYXN0YXZpdHZhbWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9lbmFibGVfY3VzdG9tIiBtc2dpZD0iNjcyOTAwMTMwODIxNzM0NzUwMSI+Ik9tb2dvxI1hbmplIHNwcmVtZW1iZSBwbyBtZXJpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4iVXBvcmFiaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiJQb3RyZGl0ZXYgbmFzdGF2aXRldiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+IlphcmFkaSBuZWthdGVyaWggYmFydm5paCBuYXN0YXZpdGV2IGxhaGtvIHBvc3RhbmUgdGEgbmFwcmF2YSBuZXVwb3JhYm5hLiBLbGlrbml0ZSDCu1YgcmVkdcKrLCDEjWUgxb5lbGl0ZSBwb3RyZGl0aSB0ZSBiYXJ2bmUgbmFzdGF2aXR2ZS4gViBuYXNwcm90bmVtIHByaW1lcnUgc2UgYm9kbyDEjWV6IDEwIHNla3VuZCBwb25hc3RhdmlsZSBuYSBwcnZvdG5vIHZyZWRub3N0LiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1zcS1yQUwvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXNxLXJBTC9zdHJpbmdzLnhtbAppbmRleCBlZDBhZDFlLi5jOGFkZDk0IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXNxLXJBTC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXNxLXJBTC9zdHJpbmdzLnhtbApAQCAtMzAxLDggKzMwMSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4ia8OrcmtvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sYXVuY2hfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjI5NjkyODc4MzgxMjA1NTA1MDYiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4gbnVrIG11bmRpIHTDqyBuaXNlai4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4iTcOrIHNodW3DqyI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciByZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0ICg2MzM3MTU1NjA4MDU1MDYyNDI5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCIgbXNnaWQ9IjYzMzcxNTU2MDgwNTUwNjI0MjkiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gdMOrIHRqZXJhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiJOZGFqZSBob3Jpem9udGFsaXNodCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X3ZlcnRpY2FsIiBtc2dpZD0iOTA3NTI5MjIzMzY5NjE4MDgxMyI+Ik5kYWogdmVydGlrYWxpc2h0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfY3VzdG9tIiBtc2dpZD0iNDE3NzgzNzU5NzUxMzcwMTk0MyI+Ik5kYWogdMOrIHBlcnNvbmFsaXp1YXLDq24iPC9zdHJpbmc+CkBAIC0zNjUsNyArMzY0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjM3OTE4NzI2NzUwOTU1ODU5Ij4iS3Vyc2ltaSBpIGJhdGVyaXPDqyDDq3NodMOrIGkgYWt0aXZpenVhciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiJQYWvDq3NvbiB2ZXByaW10YXJpbsOrIGRoZSB0w6sgZGjDq25hdCBuw6sgc2ZvbmQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl9hY3Rpb25fdGV4dCIgbXNnaWQ9IjEwOTE1ODY1ODIzODExMDM4MiI+IsOHYWt0aXZpem8ga3Vyc2ltaW4gZSBiYXRlcmlzw6siPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4iUMOrcm1iYWp0amV0IGphbsOrIHTDqyBmc2hlaHVyYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fZGlhbG9nX3RleHQiIG1zZ2lkPSIzMDcxNDMxMDI1NDQ4MjE4OTI4Ij4iPHhsaWZmOmcgaWQ9IkFQUF9TRUVLSU5HX1BFUk1JU1NJT04iPiVzPC94bGlmZjpnPiBkbyB0w6sgZmlsbG9qw6sgdMOrIHJlZ2ppc3Ryb2rDqyDDp2RvIGdqw6sgccOrIHNoZmFxZXQgbsOrIGVrcmFuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fcmVtZW1iZXJfdGV4dCIgbXNnaWQ9IjMxMDM1MTA4ODIxNzI3NDY3NTIiPiJNb3MgZSBzaGZhcSBzw6tyaXNoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+IlBhc3Ryb2ppIHTDqyBnaml0aGEiPC9zdHJpbmc+CkBAIC00NTAsNCArNDQ4LDI4IEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+IlTDqyBha3Rpdml6b2hldCBcImJsdWV0b290aC1pXCI/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9tZXNzYWdlIiBtc2dpZD0iOTEwNjU5NTk5MDcwODk4NTM4NSI+IlDDq3IgdMOrIGxpZGh1ciB0YXN0aWVyw6tuIG1lIHRhYmxldGluLCBuw6sgZmlsbGltIGR1aGV0IHTDqyBha3Rpdml6b3NoIFwiYmx1ZXRvb3RoLWluXCIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9jb25maXJtYXRpb25fb2siIG1zZ2lkPSI2MjU4MDc0MjUwOTQ4MzA5NzE1Ij4iQWt0aXZpem8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiJaYmF0b2plIHDDq3IgbmpvZnRpbWV0IG5nYSA8eGxpZmY6ZyBpZD0iVE9QSUNfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b19hcHAiIG1zZ2lkPSIzNjMwMTY3ODM5Mzk4MTU5NjAiPiJaYmF0b2plIHDDq3IgdMOrIGdqaXRoYSBuam9mdGltZXQgbmdhIGt5IGFwbGlrYWNpb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX2ltcG9ydGFuY2UiIG1zZ2lkPSI1MTk4NTc4OTg4OTc4MjM0MTYxIj4iSSBibGxva3VhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbXBvcnRhbmNlIiBtc2dpZD0iNDEwOTkyOTk4NjEwNzE0NzkzMCI+IlLDq25kw6tzaSBlIHVsw6t0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9pbXBvcnRhbmNlIiBtc2dpZD0iODE5MjEwNzY4OTk5NTc0MjY1MyI+IlLDq25kw6tzaSBub3JtYWxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+IlLDq25kw6tzaSBlIGxhcnTDqyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1heF9pbXBvcnRhbmNlIiBtc2dpZD0iNTA4OTAwNTg3MjcxOTU2Mzg5NCI+IlLDq25kw6tzaSB1cmdqZW50ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4iTW9zIGkgc2hmYXEgYXNuasOraGVyw6sga8OrdG8gbmpvZnRpbWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4iU2hmYXFpIG7DqyBoZXNodGplIG7DqyBmdW5kIHTDqyBsaXN0w6tzIHPDqyBuam9mdGltZXZlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9IjQ5MjY1Mjk2MTU5MjA2MTA4MTciPiJTaGZhcWkga8OrdG8gbmpvZnRpbWUgbsOrIGhlc2h0amUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+IlNoZmFxaSBuw6sga3J5ZSB0w6sgbGlzdMOrcyBzw6sgbmpvZnRpbWV2ZSBkaGUgbMOrc2hvIHRpbmd1bGwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4iU2hmYXEgbmrDqyB2w6tzaHRyaW0gdMOrIHNocGVqdMOrIG7DqyBla3JhbiBkaGUgbMOrc2hvIHRpbmd1bGwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+IkNpbMOrc2ltZSB0w6sgdGplcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiJVIGtyeWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiJOZ2p5cmF0IG5vcm1hbGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4iTmdqeXJhdCBlIG5hdMOrcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4iTmdqeXJhdCBlIHBlcnNvbmFsaXp1YXJhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4iTmdqeXJhIHTDqyBwYW5qb2h1cmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4iTW9kaWZpa2ltaSBpIG5nanlyw6tzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Nob3dfcXMiIG1zZ2lkPSIxNzYzMjQ0MzU0Mzk5Mjc2Njc5Ij4iUGxsYWvDq3phIFNoZmFxIGNpbMOrc2ltZXQgZSBzaHBlanRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiJaYmF0byB0cmFuc2Zvcm1pbWluIGUgcGVyc29uYWxpenVhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+IlpiYXRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+IktvbmZpcm1vIGNpbMOrc2ltZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfbWVzc2FnZSIgbXNnaWQ9IjkxMTYwMDEwNjkzOTc5OTY2OTEiPiJEaXNhIGNpbMOrc2ltZSBuZ2p5cmFzaCBtdW5kIHRhIGLDq2puw6sga8OrdMOrIHBhamlzamUgdMOrIHBhcMOrcmRvcnNobWUuIEtsaWtvIE9LIHDDq3IgdMOrIGtvbmZpcm11YXIga8OrdG8gY2lsw6tzaW1lIG5nanlyYXNoLCBww6tybmRyeXNoZSBrw6t0byBjaWzDq3NpbWUgZG8gdMOrIHJpdmVuZG9zZW4gcGFzIDEwIHNla29uZGFzaC4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtc3Ivc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXNyL3N0cmluZ3MueG1sCmluZGV4IDI2Yzk2NmEuLmJlYzFmZDQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtc3Ivc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1zci9zdHJpbmdzLnhtbApAQCAtMzAyLDggKzMwMiw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4i0L/RgNC10YLRgNCw0LbQuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4i0J/QvtC60YDQtdGC0LDRmtC1INCw0L/Qu9C40LrQsNGG0LjRmNC1IDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDQvdC40ZjQtSDRg9GB0L/QtdC70L4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zaG93X2hpc3RvcnlfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNzA2MjA4ODE5NjQ0OTc0NzI0NSI+ItCI0L7RiCI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciByZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0ICg2MzM3MTU1NjA4MDU1MDYyNDI5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCIgbXNnaWQ9IjYzMzcxNTU2MDgwNTUwNjI0MjkiPiLQiNC+0YggPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiLQn9C+0LTQtdC70Lgg0YXQvtGA0LjQt9C+0L3RgtCw0LvQvdC+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfdmVydGljYWwiIG1zZ2lkPSI5MDc1MjkyMjMzNjk2MTgwODEzIj4i0J/QvtC00LXQu9C4INCy0LXRgNGC0LjQutCw0LvQvdC+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfY3VzdG9tIiBtc2dpZD0iNDE3NzgzNzU5NzUxMzcwMTk0MyI+ItCf0YDQuNC70LDQs9C+0ZLQtdC90L4g0LTQtdGZ0LXRmtC1Ijwvc3RyaW5nPgpAQCAtMzY2LDcgKzM2NSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+ItCo0YLQtdC00ZrQsCDQsdCw0YLQtdGA0LjRmNC1INGY0LUg0YPQutGZ0YPRh9C10L3QsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiLQodC80LDRmtGD0ZjQtSDQv9C10YDRhNC+0YDQvNCw0L3RgdC1INC4INC/0L7Qt9Cw0LTQuNC90YHQutC1INC/0L7QtNCw0YLQutC1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiLQmNGB0LrRmdGD0YfQuCDRiNGC0LXQtNGa0YMg0LHQsNGC0LXRgNC40ZjQtSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLQodCw0LTRgNC20LDRmCDRmNC1INGB0LDQutGA0LjQstC10L0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+Ijx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4g0ZvQtSDQv9C+0YfQtdGC0Lgg0LTQsCDRgdC90LjQvNCwINGB0LLQtSDRiNGC0L4g0YHQtSDQv9GA0LjQutCw0LfRg9GY0LUg0L3QsCDQtdC60YDQsNC90YMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+ItCd0LUg0L/RgNC40LrQsNC30YPRmCDQv9C+0L3QvtCy0L4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4i0J7QsdGA0LjRiNC4INGB0LLQtSI8L3N0cmluZz4KQEAgLTQ1MSw0ICs0NDksMjggQEAKICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfdGl0bGUiIG1zZ2lkPSI1MDI3MDM3NzA2NTAwNjM1MjY5Ij4i0JbQtdC70LjRgtC1INC70Lgg0LTQsCDRg9C60ZnRg9GH0LjRgtC1IEJsdWV0b290aD8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX21lc3NhZ2UiIG1zZ2lkPSI5MTA2NTk1OTkwNzA4OTg1Mzg1Ij4i0JTQsCDQsdC40YHRgtC1INC/0L7QstC10LfQsNC70Lgg0YLQsNGB0YLQsNGC0YPRgNGDINGB0LAg0YLQsNCx0LvQtdGC0L7QvCwg0L/RgNCy0L4g0LzQvtGA0LDRgtC1INC00LAg0YPQutGZ0YPRh9C40YLQtSBCbHVldG9vdGguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9jb25maXJtYXRpb25fb2siIG1zZ2lkPSI2MjU4MDc0MjUwOTQ4MzA5NzE1Ij4i0KPQutGZ0YPRh9C4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4i0J/RgNC40LzQtdC90Lgg0L3QsCDQvtCx0LDQstC10YjRgtC10ZrQsCDQviDRgtC10LzQuCA8eGxpZmY6ZyBpZD0iVE9QSUNfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b19hcHAiIG1zZ2lkPSIzNjMwMTY3ODM5Mzk4MTU5NjAiPiLQn9GA0LjQvNC10L3QuCDQvdCwINGB0LLQsCDQvtCx0LDQstC10YjRgtC10ZrQsCDQuNC3INC+0LLQtSDQsNC/0LvQuNC60LDRhtC40ZjQtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfaW1wb3J0YW5jZSIgbXNnaWQ9IjUxOTg1Nzg5ODg5NzgyMzQxNjEiPiLQkdC70L7QutC40YDQsNC90LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW1wb3J0YW5jZSIgbXNnaWQ9IjQxMDk5Mjk5ODYxMDcxNDc5MzAiPiLQnNCw0LvQsCDQstCw0LbQvdC+0YHRgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiLQo9C+0LHQuNGH0LDRmNC10L3QsCDQstCw0LbQvdC+0YHRgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiLQktC10LvQuNC60LAg0LLQsNC20L3QvtGB0YIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfaW1wb3J0YW5jZSIgbXNnaWQ9IjUwODkwMDU4NzI3MTk1NjM4OTQiPiLQktCw0LbQvdC+0YHRgjog0YXQuNGC0L3QviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4i0J7QstCwINC+0LHQsNCy0LXRiNGC0LXRmtCwINGB0LUg0L3QuNC60LDQtNCwINC90LUg0L/RgNC40LrQsNC30YPRmNGDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+ItCf0YDQuNC60LDQt9GD0ZjRgyDRgdC1INGDINC00L3RgyDQu9C40YHRgtC1INC+0LHQsNCy0LXRiNGC0LXRmtCwINCx0LXQtyDQt9Cy0YPQutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9IjQ5MjY1Mjk2MTU5MjA2MTA4MTciPiLQntCy0LAg0L7QsdCw0LLQtdGI0YLQtdGa0LAg0YHQtSDQv9GA0LjQutCw0LfRg9GY0YMg0LHQtdC3INC30LLRg9C60LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+ItCf0YDQuNC60LDQt9GD0ZjRgyDRgdC1INGDINCy0YDRhdGDINC70LjRgdGC0LUg0L7QsdCw0LLQtdGI0YLQtdGa0LAg0Lgg0LXQvNC40YLRg9GY0LUg0YHQtSDQt9Cy0YPQuiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjUyMzY5ODcxNzE5MDQ3NTYxMzQiPiLQndCw0LrRgNCw0YLQutC+INGB0LUg0L/RgNC40LrQsNC30YPRmNGDINC90LAg0LXQutGA0LDQvdGDINC4INC10LzQuNGC0YPRmNC1INGB0LUg0LfQstGD0LoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+ItCI0L7RiCDQv9C+0LTQtdGI0LDQstCw0ZrQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9kb25lIiBtc2dpZD0iNTI3OTQyNjA0NzI3MzkzMDE3NSI+ItCT0L7RgtC+0LLQviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9ub25lIiBtc2dpZD0iMjEyMTk1NzkyNjA0MDU0MzE0OCI+ItCd0L7RgNC80LDQu9C90LUg0LHQvtGY0LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4i0J3QvtGb0L3QtSDQsdC+0ZjQtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4i0J/RgNC40LvQsNCz0L7RktC10L3QtSDQsdC+0ZjQtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF91bmtub3duIiBtc2dpZD0iMjcwOTIwMjEwNDI1NjI2NTEwNyI+ItCd0LXQv9C+0LfQvdCw0YLQtSDQsdC+0ZjQtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3RyYW5zZm9ybSIgbXNnaWQ9IjY5ODU0NjA0MDgwNzkwODYwOTAiPiLQmNC30LzQtdC90LAg0LHQvtGY0LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfc2hvd19xcyIgbXNnaWQ9IjE3NjMyNDQzNTQzOTkyNzY2NzkiPiLQn9GA0LjQutCw0LbQuCDQv9C70L7Rh9C40YbRgyDQkdGA0LfQsCDQv9C+0LTQtdGI0LDQstCw0ZrQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4i0J7QvNC+0LPRg9Gb0Lgg0L/RgNC40LvQsNCz0L7RktC10L3RgyDRgtGA0LDQvdGB0YTQvtGA0LzQsNGG0LjRmNGDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4i0J/RgNC40LzQtdC90LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfdGl0bGUiIG1zZ2lkPSI0NzQ2NjY2NTQ1NDgwNTM0NjYzIj4i0J/QvtGC0LLRgNC00LjRgtC1INC/0L7QtNC10YjQsNCy0LDRmtCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X21lc3NhZ2UiIG1zZ2lkPSI5MTE2MDAxMDY5Mzk3OTk2NjkxIj4i0J3QtdC60LAg0L/QvtC00LXRiNCw0LLQsNGa0LAg0LHQvtGY0LAg0LzQvtCz0YMg0LTQsCDRg9GH0LjQvdC1INGD0YDQtdGS0LDRmCDQvdC10YPQv9C+0YLRgNC10LHRmdC40LLQuNC8LiDQmtC70LjQutC90LjRgtC1INC90LAg0J/QvtGC0LLRgNC00Lgg0LTQsCDQsdC40YHRgtC1INC/0L7RgtCy0YDQtNC40LvQuCDQvtCy0LAg0L/QvtC00LXRiNCw0LLQsNGa0LAg0LHQvtGY0LAsINC/0L7RiNGC0L4g0ZvQtSDRgdC1INGDINGB0YPQv9GA0L7RgtC90L7QvCDQvtCy0LAg0L/QvtC00LXRiNCw0LLQsNGa0LAg0YDQtdGB0LXRgtC+0LLQsNGC0Lgg0L3QsNC60L7QvSAxMCDRgdC10LrRg9C90LTQuC4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtc3Yvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXN2L3N0cmluZ3MueG1sCmluZGV4IGYxZDY5MWUuLmQ0YTljZGMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtc3Yvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1zdi9zdHJpbmdzLnhtbApAQCAtMzAxLDggKzMwMSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4ic8O2ayI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4iRGV0IGdpY2sgaW50ZSBhdHQgc3RhcnRhIGFwcGVuIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4iTWVyIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQgKDYzMzcxNTU2MDgwNTUwNjI0MjkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiB0aWxsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiJEZWxhIGhvcmlzb250ZWxsdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X3ZlcnRpY2FsIiBtc2dpZD0iOTA3NTI5MjIzMzY5NjE4MDgxMyI+IkRlbGEgdmVydGlrYWx0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfY3VzdG9tIiBtc2dpZD0iNDE3NzgzNzU5NzUxMzcwMTk0MyI+IkRlbGEgYW5wYXNzYWQiPC9zdHJpbmc+CkBAIC0zNjUsNyArMzY0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjM3OTE4NzI2NzUwOTU1ODU5Ij4iQmF0dGVyaXNwYXJsw6RnZXQgaGFyIGFrdGl2ZXJhdHMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iODIwMzE4Nzg4MTI2NjcyNjkyIj4iTWluc2thciBwcmVzdGFuZGEgb2NoIGJha2dydW5kc2RhdGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl9hY3Rpb25fdGV4dCIgbXNnaWQ9IjEwOTE1ODY1ODIzODExMDM4MiI+IkluYWt0aXZlcmEgYmF0dGVyaXNwYXJsw6RnZXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4iSW5uZWjDpWxsIGhhciBkb2x0cyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fZGlhbG9nX3RleHQiIG1zZ2lkPSIzMDcxNDMxMDI1NDQ4MjE4OTI4Ij4iPHhsaWZmOmcgaWQ9IkFQUF9TRUVLSU5HX1BFUk1JU1NJT04iPiVzPC94bGlmZjpnPiB0YXIgZW4gYmlsZCBhdiBhbGx0IHNvbSB2aXNhcyBww6Ugc2vDpHJtZW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+IlZpc2EgaW50ZSBpZ2VuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+IlJlbnNhIGFsbGEiPC9zdHJpbmc+CkBAIC00NTAsNCArNDQ4LDI4IEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+IlZpbGwgZHUgYWt0aXZlcmEgQmx1ZXRvb3RoPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiJPbSBkdSB2aWxsIGFuc2x1dGEgdGFuZ2VudGJvcmRldCB0aWxsIHN1cmZwbGF0dGFuIG3DpXN0ZSBkdSBmw7Zyc3QgYWt0aXZlcmEgQmx1ZXRvb3RoLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+IkFrdGl2ZXJhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4iw4RuZHJhIGbDtnIgYWxsYSBhdmlzZXJpbmdhciBmw7ZyIDx4bGlmZjpnIGlkPSJUT1BJQ19OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+IsOEbmRyYSBmw7ZyIGFsbGEgYXZpc2VyaW5nYXIgZnLDpW4gZGVuIGjDpHIgYXBwZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX2ltcG9ydGFuY2UiIG1zZ2lkPSI1MTk4NTc4OTg4OTc4MjM0MTYxIj4iQmxvY2tlcmFkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4iT3Zpa3RpZyBhdmlzZXJpbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4iVmFubGlnIGF2aXNlcmluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiJWaWt0aWcgYXZpc2VyaW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4iQnLDpWRza2FuZGUgYXZpc2VyaW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjIzOTcxOTI2NDI2NTc4NzI4NzIiPiJWaXNhIGFsZHJpZyBkZSBow6RyIGF2aXNlcmluZ2FybmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4iVmlzYSBsw6RuZ3N0IG5lZCBww6UgbGlzdGFuLCB1dGFuIGxqdWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+IlZpc2EgYXZpc2VyaW5nYXJuYSB1dGFuIGxqdWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+IlZpc2EgaMO2Z3N0IHVwcCBww6UgbGlzdGFuLCBtZWQgbGp1ZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjUyMzY5ODcxNzE5MDQ3NTYxMzQiPiJWaXNhIHDDpSBza8Okcm1lbiwgbWVkIGxqdWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+IkZsZXIgaW5zdMOkbGxuaW5nYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiJLbGFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25vbmUiIG1zZ2lkPSIyMTIxOTU3OTI2MDQwNTQzMTQ4Ij4iTm9ybWFsYSBmw6RyZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+Ik5hdHRmw6RyZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X2N1c3RvbSIgbXNnaWQ9IjM2NTU1NzY0OTIzMjIyOTg3MTMiPiJBbnBhc3NhZGUgZsOkcmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF91bmtub3duIiBtc2dpZD0iMjcwOTIwMjEwNDI1NjI2NTEwNyI+Ik9rw6RuZGEgZsOkcmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3RyYW5zZm9ybSIgbXNnaWQ9IjY5ODU0NjA0MDgwNzkwODYwOTAiPiJGw6RyZ8OkbmRyaW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Nob3dfcXMiIG1zZ2lkPSIxNzYzMjQ0MzU0Mzk5Mjc2Njc5Ij4iVmlzYSBydXRhbiBTbmFiYmluc3TDpGxsbmluZ2FyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiJBa3RpdmVyYSBhbnBhc3NhZCBvbXZhbmRsaW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4iVmVya3N0w6RsbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiJCZWtyw6RmdGEgaW5zdMOkbGxuaW5nYXJuYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+IlZpc3NhIGbDpHJnaW5zdMOkbGxuaW5nYXIga2FuIGfDtnJhIGRlbiBow6RyIGVuaGV0ZW4gb2FudsOkbmRiYXIuIEtsaWNrYSBww6UgT0sgb20gZHUgdmlsbCBiZWtyw6RmdGEgZsOkcmdpbnN0w6RsbG5pbmdhcm5hLCBhbm5hcnMgw6V0ZXJzdMOkbGxzIGluc3TDpGxsbmluZ2FybmEgZWZ0ZXIgMTAgc2VrdW5kZXIuIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXN3L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1zdy9zdHJpbmdzLnhtbAppbmRleCA0MTAxYmE3Li4yZmZiZjJiIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXN3L3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtc3cvc3RyaW5ncy54bWwKQEAgLTMwMSw4ICszMDEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+InRhZnV0YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4iSGFpa3V3ZXphIGt1YW56aXNoYSA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zaG93X2hpc3RvcnlfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNzA2MjA4ODE5NjQ0OTc0NzI0NSI+IlphaWRpIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQgKDYzMzcxNTU2MDgwNTUwNjI0MjkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+Ik55aW5naW5lIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2hvcml6b250YWwiIG1zZ2lkPSI4ODQ4NTE0NDc0NTQzNDI3MzMyIj4iR2F3YW55YSBNbGFsbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X3ZlcnRpY2FsIiBtc2dpZD0iOTA3NTI5MjIzMzY5NjE4MDgxMyI+Ikdhd2FueWEgV2ltYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2N1c3RvbSIgbXNnaWQ9IjQxNzc4Mzc1OTc1MTM3MDE5NDMiPiJNYWFsdW0gSWxpeW9nYXdhbnl3YSI8L3N0cmluZz4KQEAgLTM2NSw3ICszNjQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzc5MTg3MjY3NTA5NTU4NTkiPiJLaW9rb2EgYmV0cmkga2ltZXdhc2h3YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiJIdXB1bmd1emEgdXRlbmRhamkgbmEgZGF0YSB5YSBjaGluaSBjaGluaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4iWmltYSBraW9rb2EgYmV0cmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4iTWF1ZGh1aSB5YW1lZmljaHdhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiI8eGxpZmY6ZyBpZD0iQVBQX1NFRUtJTkdfUEVSTUlTU0lPTiI+JXM8L3hsaWZmOmc+wqBpdGFhbnphIGt1cGlnYSBwaWNoYSBraWxhIGtpdHUga2luYWNob29ueWVzaHdhIGt3ZW55ZSBza3JpbmkgeWFrby4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX3JlbWVtYmVyX3RleHQiIG1zZ2lkPSIzMTAzNTEwODgyMTcyNzQ2NzUyIj4iVXNpb255ZXNoZSB0ZW5hIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+IkZ1dGEgem90ZSI8L3N0cmluZz4KQEAgLTQ1MCw0ICs0NDgsMjggQEAKICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfdGl0bGUiIG1zZ2lkPSI1MDI3MDM3NzA2NTAwNjM1MjY5Ij4iSmUsIHVuZ2VwZW5kYSBrdXdhc2hhIEJsdWV0b290aD8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX21lc3NhZ2UiIG1zZ2lkPSI5MTA2NTk1OTkwNzA4OTg1Mzg1Ij4iSWxpIHV1bmdhbmlzaGUgS2lib2RpIHlha28ga3dlbnllIGtvbXB5dXRhIHlha28ga2liYW8sIGxhemltYSBrd2FuemEgdXdhc2hlIEJsdWV0b290aC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiJXYXNoYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX3RvcGljIiBtc2dpZD0iMzY0MTQwMzQ4OTMxODY1OTY2NiI+IlR1bWlhIGthdGlrYSBhcmlmYSB6YSA8eGxpZmY6ZyBpZD0iVE9QSUNfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b19hcHAiIG1zZ2lkPSIzNjMwMTY3ODM5Mzk4MTU5NjAiPiJUdW1pYSBrYXRpa2EgYXJpZmEgem90ZSBrdXRva2EgcHJvZ3JhbXUgaGlpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IkFtZXp1aXdhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4iVW11aGltdSBraXdhbmdvIGNoYSBjaGluaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiJVbXVoaW11IHdhIGtpd2FuZ28gY2hhIGthd2FpZGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoaWdoX2ltcG9ydGFuY2UiIG1zZ2lkPSIxNTI3MDY2MTk1NjE0MDUwMjYzIj4iVW11aGltdSB3YSBraXdhbmdvIGNoYSBqdXUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfaW1wb3J0YW5jZSIgbXNnaWQ9IjUwODkwMDU4NzI3MTk1NjM4OTQiPiJVbXVoaW11IHdhIGhhbGkgeWEgZGhhcnVyYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4iVXNpb255ZXNoZSBhcmlmYSBoaXppIGthbXdlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+Ik9ueWVzaGEga2F0aWthIHNlaGVtdSB5YSBjaGluaSB5YSBvcm9kaGEgeWEgYXJpZmEgYmlsYSBzYXV0aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI0OTI2NTI5NjE1OTIwNjEwODE3Ij4iT255ZXNoYSBhcmlmYSBoaXppIGJpbGEgc2F1dGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+Ik9ueWVzaGEga2F0aWthIHNlaGVtdSB5YSBqdXUgeWEgb3JvZGhhIHlhIGFyaWZhIG5hIGl0b2Ugc2F1dGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4iV2VrYSBvbnllc2hvIGxhIGt1Y2h1bmd1bGlhIGt3ZW55ZSBza3JpbmkgbmEgaXRvZSBzYXV0aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9tb3JlX3NldHRpbmdzIiBtc2dpZD0iODE2MzA2MjgzMzk2NTUzNTcxIj4iTWlwYW5naWxpbyB6YWlkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9kb25lIiBtc2dpZD0iNTI3OTQyNjA0NzI3MzkzMDE3NSI+Ik5pbWVtYWxpemEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiJSYW5naSB6YSBrYXdhaWRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+IlJhbmdpIHphIHVzaWt1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X2N1c3RvbSIgbXNnaWQ9IjM2NTU1NzY0OTIzMjIyOTg3MTMiPiJSYW5naSBtYWFsdW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiJSYW5naSB6aXNpem9qdWxpa2FuYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3RyYW5zZm9ybSIgbXNnaWQ9IjY5ODU0NjA0MDgwNzkwODYwOTAiPiJVYmFkaWxpc2hhamkgd2EgcmFuZ2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfc2hvd19xcyIgbXNnaWQ9IjE3NjMyNDQzNTQzOTkyNzY2NzkiPiJPbnllc2hhIGtpZ2FlIGNoYSBNaXBhbmdpbGlvIHlhIEhhcmFrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4iV2FzaGEgdWJhZGlsaXNoYWppIG1hYWx1bSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+IlR1bWlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+IlRoaWJpdGlzaGEgbWlwYW5naWxpbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+IkJhYWRoaSB5YSBtaXBhbmdpbGlvIHlhIHJhbmdpIGluYXdlemEga3VmYW55YSBraWZhYSBoaWtpIGtpc2l0dW1pa2UuIEJvZnlhIFNhd2EgaWxpIHV0aGliaXRpc2hlIG1pcGFuZ2lsaW8gaGlpIHlhIHJhbmdpLCB2aW5naW5ldnlvLCBtaXBhbmdpbGlvIGhpaSBpdGFqaXdla2EgdXB5YSBiYWFkYSB5YSBzZWt1bmRlIDEwLiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy10YS1ySU4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXRhLXJJTi9zdHJpbmdzLnhtbAppbmRleCBlM2JlZDA4Li4xNjhhMTFiIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXRhLXJJTi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXRhLXJJTi9zdHJpbmdzLnhtbApAQCAtMzAxLDggKzMwMSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4i4K6k4K+H4K6f4K+BIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sYXVuY2hfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjI5NjkyODc4MzgxMjA1NTA1MDYiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz7grpDgrqTgr40g4K6k4K+K4K6f4K6Z4K+N4K6VIOCuruCvgeCun+Cuv+Cur+CuteCuv+CusuCvjeCusuCviC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4i4K6u4K+H4K6y4K+B4K6u4K+NIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQgKDYzMzcxNTU2MDgwNTUwNjI0MjkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+IuCuruCvh+CusuCvgeCuruCvjSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9ob3Jpem9udGFsIiBtc2dpZD0iODg0ODUxNDQ3NDU0MzQyNzMzMiI+IuCuleCuv+Cun+CviOCuruCun+CvjeCun+CuruCuvuCuleCuquCvjSDgrqrgrr/grrDgrr8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF92ZXJ0aWNhbCIgbXNnaWQ9IjkwNzUyOTIyMzM2OTYxODA4MTMiPiLgrprgr4bgrpngr43grpXgr4HgrqTgr43grqTgrr7grpXgrqrgr40g4K6q4K6/4K6w4K6/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfY3VzdG9tIiBtc2dpZD0iNDE3NzgzNzU5NzUxMzcwMTk0MyI+IuCupOCuqeCuv+CuteCuv+CusOCvgeCuquCvjeCuquCupOCvjeCupOCuv+CusuCvjSDgrqrgrr/grrDgrr8iPC9zdHJpbmc+CkBAIC0zNjUsNyArMzY0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjM3OTE4NzI2NzUwOTU1ODU5Ij4i4K6q4K+H4K6f4K+N4K6f4K6w4K6/IOCumuCvh+CuruCuv+CuquCvjeCuquCuvuCuqeCvjSDgrofgrq/grpXgr43grpXgrqTgr43grqTgrr/grrLgr40g4K6J4K6z4K+N4K6z4K6k4K+BIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+IuCumuCvhuCur+CusuCvjeCupOCuv+CuseCuqeCviOCur+CvgeCuruCvjSDgrqrgrr/grqngr43grqrgr4HgrrLgrqTgr40g4K6k4K6w4K614K+I4K6v4K+B4K6u4K+NIOCuleCvgeCuseCviOCuleCvjeCuleCuv+CuseCupOCvgSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4i4K6q4K+H4K6f4K+N4K6f4K6w4K6/IOCumuCvh+CuruCuv+CuquCvjeCuquCuvuCuqeCviCDgrq7gr4Hgrp/grpXgr43grpXgr4EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4i4K6u4K6x4K+I4K6o4K+N4K6k4K+B4K6z4K+N4K6zIOCuieCus+CvjeCus+Cun+CuleCvjeCuleCuruCvjSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fZGlhbG9nX3RleHQiIG1zZ2lkPSIzMDcxNDMxMDI1NDQ4MjE4OTI4Ij4i4K6k4K6/4K6w4K+I4K6v4K6/4K6y4K+NIOCuleCuvuCun+CvjeCun+CuquCvjeCuquCun+CvgeCuruCvjSDgroXgrqngr4jgrqTgr43grqTgr4jgrq/gr4Hgrq7gr40gPHhsaWZmOmcgaWQ9IkFQUF9TRUVLSU5HX1BFUk1JU1NJT04iPiVzPC94bGlmZjpnPiDgrqrgrp/grq7gr4bgrp/gr4HgrpXgr43grpXgr4Hgrq7gr40uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+IuCuruCvgOCuo+CvjeCun+CvgeCuruCvjSDgrpXgrr7grp/gr43grp/grr7grqTgr4ciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4i4K6O4K6y4K+N4K6y4K6+4K614K6x4K+N4K6x4K+I4K6v4K+B4K6u4K+NIOCuheCutOCuvyI8L3N0cmluZz4KQEAgLTQ1MCw0ICs0NDgsMjggQEAKICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfdGl0bGUiIG1zZ2lkPSI1MDI3MDM3NzA2NTAwNjM1MjY5Ij4i4K6q4K+B4K6z4K+C4K6f4K+C4K6k4K+N4K6k4K+IIOCuh+Cur+CuleCvjeCuleCuteCuvj8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX21lc3NhZ2UiIG1zZ2lkPSI5MTA2NTk1OTkwNzA4OTg1Mzg1Ij4i4K6J4K6Z4K+N4K6V4K6z4K+NIOCun+Cvh+CuquCvjeCusuCvhuCun+CvjeCun+CvgeCun+CuqeCvjSDgrrXgrr/grprgr4jgrqrgr43grqrgrrLgrpXgr4jgrq/gr4gg4K6H4K6j4K+I4K6V4K+N4K6VLCDgrq7gr4HgrqTgrrLgrr/grrLgr40g4K6q4K+B4K6z4K+C4K6f4K+C4K6k4K+N4K6k4K+IIOCuh+Cur+CuleCvjeCulSDgrrXgr4fgrqPgr43grp/gr4Hgrq7gr40uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9jb25maXJtYXRpb25fb2siIG1zZ2lkPSI2MjU4MDc0MjUwOTQ4MzA5NzE1Ij4i4K6H4K6v4K6V4K+N4K6V4K+BIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4iPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+IOCuheCuseCuv+CuteCuv+CuquCvjeCuquCvgeCuleCus+CvgeCuleCvjeCuleCvgeCuquCvjSDgrqrgrq/grqngr43grqrgrp/gr4HgrqTgr43grqTgr4EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b19hcHAiIG1zZ2lkPSIzNjMwMTY3ODM5Mzk4MTU5NjAiPiLgrofgrqjgr43grqTgrqrgr40g4K6q4K6v4K6p4K+N4K6q4K6+4K6f4K+N4K6f4K6/4K6y4K6/4K6w4K+B4K6o4K+N4K6k4K+BIOCuteCusOCvgeCuruCvjSDgro7grrLgr43grrLgrr4g4K6F4K6x4K6/4K614K6/4K6q4K+N4K6q4K+B4K6V4K6z4K+B4K6V4K+N4K6V4K+B4K6u4K+NIOCuquCur+CuqeCvjeCuquCun+CvgeCupOCvjeCupOCvgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfaW1wb3J0YW5jZSIgbXNnaWQ9IjUxOTg1Nzg5ODg5NzgyMzQxNjEiPiLgrqTgrp/gr4HgrpXgr43grpXgrqrgr43grqrgrp/gr43grp/grqTgr4EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW1wb3J0YW5jZSIgbXNnaWQ9IjQxMDk5Mjk5ODYxMDcxNDc5MzAiPiLgrq7gr4HgrpXgr43grpXgrr/grq/grqTgr43grqTgr4HgrrXgrq7gr40gKOCuleCvgeCuseCviOCuteCvgSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4i4K6u4K+B4K6V4K+N4K6V4K6/4K6v4K6k4K+N4K6k4K+B4K614K6u4K+NICjgrofgrq/grrLgr43grqrgr4EpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+IuCuruCvgeCuleCvjeCuleCuv+Cur+CupOCvjeCupOCvgeCuteCuruCvjSAo4K6F4K6k4K6/4K6V4K6u4K+NKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1heF9pbXBvcnRhbmNlIiBtc2dpZD0iNTA4OTAwNTg3MjcxOTU2Mzg5NCI+IuCuruCvgeCuleCvjeCuleCuv+Cur+CupOCvjeCupOCvgeCuteCuruCvjSAo4K6F4K614K6a4K6w4K6u4K+NKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4i4K6H4K6o4K+N4K6kIOCuheCuseCuv+CuteCuv+CuquCvjeCuquCvgeCuleCus+CviCDgrpLgrrDgr4Hgrqrgr4vgrqTgr4Hgrq7gr40g4K6V4K6+4K6f4K+N4K6f4K6+4K6k4K+HIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+IuCukuCusuCuv+Cur+Cuv+CuqeCvjeCuseCuvyDgroXgrrHgrr/grrXgrr/grqrgr43grqrgr4Hgrqrgr40g4K6q4K6f4K+N4K6f4K6/4K6v4K6y4K6/4K6p4K+NIOCuleCvgOCutOCvhyDgrpXgrr7grp/gr43grp/gr4EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+IuCukuCusuCuv+Cur+Cuv+CuqeCvjeCuseCuvyDgrofgrqjgr43grqQg4K6F4K6x4K6/4K614K6/4K6q4K+N4K6q4K+B4K6V4K6z4K+I4K6V4K+NIOCuleCuvuCun+CvjeCun+CvgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4i4K6F4K6x4K6/4K614K6/4K6q4K+N4K6q4K+B4K6V4K6z4K+NIOCuquCun+CvjeCun+Cuv+Cur+CusuCuv+CuqeCvjSDgrq7gr4fgrrLgr40g4K6q4K6V4K+B4K6k4K6/4K6v4K6/4K6y4K+NIOCukuCusuCuv+Cur+CvgeCun+CuqeCvjSDgrpXgrr7grp/gr43grp/gr4EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4i4K6S4K6y4K6/4K6v4K+B4K6f4K6p4K+NIOCupOCuv+CusOCviOCur+Cuv+CusuCvjSDgrpXgrr7grp/gr43grp/gr4EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+IuCuruCvh+CusuCvgeCuruCvjSDgroXgrq7gr4jgrqrgr43grqrgr4HgrpXgrrPgr40iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiLgrq7gr4Hgrp/grr/grqjgr43grqTgrqTgr4EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiLgrofgrq/grrLgr43grqrgrr7grqkg4K614K6j4K+N4K6j4K6Z4K+N4K6V4K6z4K+NIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+IuCuh+CusOCuteCvgeCuqOCvh+CusCDgrrXgrqPgr43grqPgrpngr43grpXgrrPgr40iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+IuCupOCuqeCuv+CuquCvjeCuquCur+CuqeCvjSDgrrXgrqPgr43grqPgrpngr43grpXgrrPgr40iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiLgroXgrrHgrr/grq/grqrgr43grqrgrp/grr7grqQg4K614K6j4K+N4K6j4K6Z4K+N4K6V4K6z4K+NIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+IuCuteCuo+CvjeCuoyDgrq7grr7grrHgr43grrHgrq7gr40iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfc2hvd19xcyIgbXNnaWQ9IjE3NjMyNDQzNTQzOTkyNzY2NzkiPiLgrrXgrr/grrDgr4jgrrXgr4Eg4K6F4K6u4K+I4K6q4K+N4K6q4K+B4K6V4K6z4K+NIOCun+CviOCusuCviOCuleCvjSDgrpXgrr7grp/gr43grp/gr4EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9lbmFibGVfY3VzdG9tIiBtc2dpZD0iNjcyOTAwMTMwODIxNzM0NzUwMSI+IuCupOCuqeCuv+CuquCvjeCuquCur+CuqeCvjSDgrrXgrqPgr43grqMg4K6u4K6+4K6x4K+N4K6x4K6k4K+N4K6k4K+IIOCuh+Cur+CuleCvjeCuleCvgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+IuCuquCur+CuqeCvjeCuquCun+CvgeCupOCvjeCupOCvgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiLgroXgrq7gr4jgrqrgr43grqrgr4HgrpXgrrPgr4gg4K6J4K6x4K+B4K6k4K6/4K6q4K+N4K6q4K6f4K+B4K6k4K+N4K6k4K+BIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X21lc3NhZ2UiIG1zZ2lkPSI5MTE2MDAxMDY5Mzk3OTk2NjkxIj4i4K6a4K6/4K6yIOCuteCuo+CvjeCuoyDgroXgrq7gr4jgrqrgr43grqrgr4HgrpXgrrPgr40g4K6H4K6o4K+N4K6k4K6a4K+NIOCumuCuvuCupOCuqeCupOCvjeCupOCviOCuquCvjSDgrqrgrq/grqngr43grqrgrp/gr4HgrqTgr43grqQg4K6u4K+B4K6f4K6/4K6v4K6+4K6k4K6q4K6f4K6/IOCumuCvhuCur+CvjeCur+CusuCuvuCuruCvjS4g4K6H4K6o4K+N4K6kIOCuteCuo+CvjeCuoyDgroXgrq7gr4jgrqrgr43grqrgr4HgrpXgrrPgr4gg4K6J4K6x4K+B4K6k4K6/4K6q4K+N4K6q4K6f4K+B4K6k4K+N4K6kLCDgrprgrrDgrr8g4K6O4K6p4K+N4K6q4K6k4K+I4K6V4K+NIOCuleCuv+Cus+Cuv+CuleCvjSDgrprgr4bgrq/gr43grq/grrXgr4Hgrq7gr40sIOCuh+CusuCvjeCusuCviOCur+CvhuCuqeCuv+CusuCvjSDgrofgrqjgr43grqQg4K6F4K6u4K+I4K6q4K+N4K6q4K+B4K6V4K6z4K+NIDEwIOCuteCuv+CuqeCuvuCun+Cuv+CuleCus+CvgeCuleCvjeCuleCvgeCuquCvjSDgrqrgrr/grqngr40g4K6u4K+A4K6f4K+N4K6f4K6u4K+I4K6V4K+N4K6V4K6q4K+N4K6q4K6f4K+B4K6u4K+NLiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy10ZS1ySU4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXRlLXJJTi9zdHJpbmdzLnhtbAppbmRleCBlNzI1ZDk1Li4wODZkZWRlIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXRlLXJJTi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXRlLXJJTi9zdHJpbmdzLnhtbApAQCAtMzY0LDcgKzM2NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+IuCwrOCxjeCwr+CwvuCwn+CwsOCxjSDgsLjgsYfgsLXgsLDgsY0g4LCG4LCo4LGNIOCwmuCxh+Cwr+CwrOCwoeCwv+CwguCwpuCwvyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiLgsKrgsKjgsL/gsKTgsYDgsLDgsYHgsKjgsL8g4LCu4LCw4LC/4LCv4LGBIOCwqOCxh+CwquCwpeCxjeCwryDgsKHgsYfgsJ/gsL7gsKjgsYEg4LCk4LCX4LGN4LCX4LC/4LC44LGN4LCk4LGB4LCC4LCm4LC/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiLgsKzgsY3gsK/gsL7gsJ/gsLDgsYAg4LC44LGH4LC14LCw4LGN4oCM4LCo4LGBIOCwhuCwq+CxjSDgsJrgsYfgsK/gsL8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4i4LCV4LCC4LCf4LGG4LCC4LCf4LGN4oCM4LCy4LGBIOCwpuCwvuCwmuCwrOCwoeCxjeCwoeCwvuCwr+CwvyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fZGlhbG9nX3RleHQiIG1zZ2lkPSIzMDcxNDMxMDI1NDQ4MjE4OTI4Ij4iPHhsaWZmOmcgaWQ9IkFQUF9TRUVLSU5HX1BFUk1JU1NJT04iPiVzPC94bGlmZjpnPiDgsK7gsYAg4LC44LGN4LCV4LGN4LCw4LGA4LCo4LGN4oCM4LCq4LGIIOCwleCwqOCwv+CwquCwv+CwguCwmuCxhyDgsKrgsY3gsLDgsKTgsL/gsKbgsL7gsKjgsY3gsKjgsL8g4LCV4LGN4LCv4LC+4LCq4LGN4LCa4LCw4LGNIOCwmuCxh+Cwr+CwoeCwgiDgsKrgsY3gsLDgsL7gsLDgsILgsK3gsL/gsLjgsY3gsKTgsYHgsILgsKbgsL8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+IuCwruCws+CxjeCwsuCxgCDgsJrgsYLgsKrgsLXgsKbgsY3gsKbgsYEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4i4LCF4LCo4LGN4LCo4LGAIOCwleCxjeCwsuCwv+Cwr+CwsOCxjSDgsJrgsYfgsK/gsILgsKHgsL8iPC9zdHJpbmc+CkBAIC00NDksNCArNDQ4LDI4IEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+IuCwrOCxjeCwsuCxguCwn+CxguCwpOCxjSDgsIbgsKjgsY0g4LCa4LGH4LCv4LC+4LCy4LC+PyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiLgsK7gsYAg4LCV4LGA4LCs4LGL4LCw4LGN4LCh4LGN4oCM4LCo4LGBIOCwruCxgCDgsJ/gsL7gsKzgsY3gsLLgsYbgsJ/gsY3igIzgsKTgsYsg4LCV4LCo4LGG4LCV4LGN4LCf4LGNIOCwmuCxh+Cwr+CwoeCwvuCwqOCwv+CwleCwvywg4LCu4LGA4LCw4LGBIOCwruCxgeCwguCwpuCxgeCwl+CwviDgsKzgsY3gsLLgsYLgsJ/gsYLgsKTgsY0g4LCG4LCo4LGNIOCwmuCxh+Cwr+CwvuCwsuCwvy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiLgsIbgsKjgsY0g4LCa4LGH4LCv4LC/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4iPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+IOCwqOCxi+Cwn+Cwv+Cwq+Cwv+CwleCxh+Cwt+CwqOCxjeKAjOCwsuCwleCxgSDgsLXgsLDgsY3gsKTgsL/gsILgsKrgsJzgsYfgsK/gsL8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b19hcHAiIG1zZ2lkPSIzNjMwMTY3ODM5Mzk4MTU5NjAiPiLgsIgg4LCF4LCo4LGB4LC14LCw4LGN4LCk4LCo4LCCIOCwqOCxgeCwguCwoeCwvyDgsIXgsILgsKbgsL/gsILgsJrgsKzgsKHgsYcg4LCF4LCo4LGN4LCo4LC/IOCwqOCxi+Cwn+Cwv+Cwq+Cwv+CwleCxh+Cwt+CwqOCxjeKAjOCwsuCwleCxgSDgsLXgsLDgsY3gsKTgsL/gsILgsKrgsJzgsYfgsK/gsL8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX2ltcG9ydGFuY2UiIG1zZ2lkPSI1MTk4NTc4OTg4OTc4MjM0MTYxIj4i4LCs4LGN4LCy4LC+4LCV4LGNIOCwmuCxh+Cwr+CwrOCwoeCwv+CwguCwpuCwvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbXBvcnRhbmNlIiBtc2dpZD0iNDEwOTkyOTk4NjEwNzE0NzkzMCI+IuCwpOCwleCxjeCwleCxgeCwtSDgsKrgsY3gsLDgsL7gsK7gsYHgsJbgsY3gsK/gsKQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4i4LC44LC+4LCn4LC+4LCw4LCjIOCwquCxjeCwsOCwvuCwruCxgeCwluCxjeCwr+CwpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiLgsIXgsKfgsL/gsJUg4LCq4LGN4LCw4LC+4LCu4LGB4LCW4LGN4LCv4LCkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4i4LCF4LCk4LGN4LCv4LC14LC44LCwIOCwquCxjeCwsOCwvuCwruCxgeCwluCxjeCwr+CwpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4i4LCIIOCwqOCxi+Cwn+Cwv+Cwq+Cwv+CwleCxh+Cwt+CwqOCxjeKAjOCwsuCwqOCxgSDgsI7gsKrgsY3gsKrgsYHgsKHgsYIg4LCa4LGC4LCq4LCm4LGBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+IuCwqOCxi+Cwn+Cwv+Cwq+Cwv+CwleCxh+Cwt+CwqOCxjeKAjOCwsiDgsJzgsL7gsKzgsL/gsKTgsL4g4LCm4LC/4LCX4LGB4LC1IOCwreCwvuCwl+CwguCwsuCxiyDgsLbgsKzgsY3gsKbgsIIg4LCy4LGH4LCV4LGB4LCC4LCh4LC+IOCwmuCxguCwquCxgeCwpOCxgeCwguCwpuCwvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI0OTI2NTI5NjE1OTIwNjEwODE3Ij4i4LCIIOCwqOCxi+Cwn+Cwv+Cwq+Cwv+CwleCxh+Cwt+CwqOCxjeKAjOCwsuCwqOCxgSDgsLbgsKzgsY3gsKbgsIIg4LCy4LGH4LCV4LGB4LCC4LCh4LC+IOCwmuCxguCwquCxgeCwpOCxgeCwguCwpuCwvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4i4LCo4LGL4LCf4LC/4LCr4LC/4LCV4LGH4LC34LCo4LGN4oCM4LCyIOCwnOCwvuCwrOCwv+CwpOCwviDgsI7gsJfgsYHgsLUg4LCt4LC+4LCX4LCC4LCy4LGLIOCwtuCwrOCxjeCwpuCwguCwpOCxiyDgsJrgsYLgsKrgsYHgsKTgsYHgsILgsKbgsL8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4i4LC44LGN4LCV4LGN4LCw4LGA4LCo4LGN4oCM4LCq4LGIIOCwtuCxgOCwmOCxjeCwsOCwguCwl+CwviDgsLbgsKzgsY3gsKbgsILgsKTgsYsg4LCa4LGC4LCq4LGB4LCk4LGB4LCC4LCm4LC/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX21vcmVfc2V0dGluZ3MiIG1zZ2lkPSI4MTYzMDYyODMzOTY1NTM1NzEiPiLgsK7gsLDgsL/gsKjgsY3gsKjgsL8g4LC44LGG4LCf4LGN4LCf4LC/4LCC4LCX4LGN4oCM4LCy4LGBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4i4LCq4LGC4LCw4LGN4LCk4LCv4LC/4LCC4LCm4LC/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25vbmUiIG1zZ2lkPSIyMTIxOTU3OTI2MDQwNTQzMTQ4Ij4i4LC44LC+4LCn4LC+4LCw4LCjIOCwsOCwguCwl+CxgeCwsuCxgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9uaWdodCIgbXNnaWQ9IjU5NDM4MTc2MjIxMDUzMDcwNzIiPiLgsLDgsL7gsKTgsY3gsLDgsL8g4LCw4LCC4LCX4LGB4LCy4LGBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X2N1c3RvbSIgbXNnaWQ9IjM2NTU1NzY0OTIzMjIyOTg3MTMiPiLgsIXgsKjgsYHgsJXgsYLgsLIg4LCw4LCC4LCX4LGB4LCy4LGBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4i4LCk4LGG4LCy4LC/4LCv4LCo4LC/IOCwsOCwguCwl+CxgeCwsuCxgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3RyYW5zZm9ybSIgbXNnaWQ9IjY5ODU0NjA0MDgwNzkwODYwOTAiPiLgsLDgsILgsJfgsYEg4LC44LC14LCw4LCjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Nob3dfcXMiIG1zZ2lkPSIxNzYzMjQ0MzU0Mzk5Mjc2Njc5Ij4i4LC24LGA4LCY4LGN4LCwIOCwuOCxhuCwn+CxjeCwn+Cwv+CwguCwl+CxjeKAjOCwsiDgsJ/gsYjgsLLgsY3igIzgsKjgsYEg4LCa4LGC4LCq4LCC4LCh4LC/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiLgsIXgsKjgsYHgsJXgsYLgsLIg4LCq4LCw4LC/4LC14LCw4LGN4LCk4LCo4LCo4LGBIOCwquCxjeCwsOCwvuCwsOCwguCwreCwv+CwguCwmuCwguCwoeCwvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+IuCwteCwsOCxjeCwpOCwv+CwguCwquCwnOCxh+Cwr+CwvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiLgsLjgsYbgsJ/gsY3gsJ/gsL/gsILgsJfgsY3igIzgsLLgsKjgsYEg4LCo4LC/4LCw4LGN4LCn4LC+4LCw4LC/4LCC4LCa4LCC4LCh4LC/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X21lc3NhZ2UiIG1zZ2lkPSI5MTE2MDAxMDY5Mzk3OTk2NjkxIj4i4LCV4LGK4LCo4LGN4LCo4LC/IOCwsOCwguCwl+CxgSDgsLjgsYbgsJ/gsY3gsJ/gsL/gsILgsJfgsY3igIzgsLIg4LC14LCy4LCoIOCwiCDgsKrgsLDgsL/gsJXgsLDgsIIg4LCJ4LCq4LCv4LGL4LCX4LC/4LCC4LCa4LCy4LGH4LCo4LC/IOCwteCwv+Cwp+CwguCwl+CwviDgsIXgsK/gsL/gsKrgsYvgsLXgsJrgsY3gsJrgsYEuIOCwiCDgsLDgsILgsJfgsYEg4LC44LGG4LCf4LGN4LCf4LC/4LCC4LCX4LGN4oCM4LCy4LCo4LGBIOCwqOCwv+CwsOCxjeCwp+CwvuCwsOCwv+CwguCwmuCwoeCwvuCwqOCwv+CwleCwvyDgsLjgsLDgsYcg4LCV4LGN4LCy4LC/4LCV4LGNIOCwmuCxh+Cwr+CwguCwoeCwvyDgsLLgsYfgsKbgsILgsJ/gsYcg4LCIIOCwuOCxhuCwn+CxjeCwn+Cwv+CwguCwl+CxjeKAjOCwsuCxgSAxMCDgsLjgsYbgsJXgsKjgsY3gsLIg4LCk4LCw4LGN4LC14LC+4LCkIOCwsOCxgOCwuOCxhuCwn+CxjSDgsJrgsYfgsK/gsKzgsKHgsKTgsL7gsK/gsL8uIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXRoL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy10aC9zdHJpbmdzLnhtbAppbmRleCBhNjAxNTdmLi44YzFhN2QzIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXRoL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtdGgvc3RyaW5ncy54bWwKQEAgLTMwMSw4ICszMDEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+IuC4hOC5ieC4meC4q+C4siI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4i4LmE4Lih4LmI4Liq4Liy4Lih4Liy4Lij4LiW4LmA4Lij4Li04LmI4Lih4LmD4LiK4LmJIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2hvd19oaXN0b3J5X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjcwNjIwODgxOTY0NDk3NDcyNDUiPiLguYDguJ7guLTguYjguKHguYDguJXguLTguKEiPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCAoNjMzNzE1NTYwODA1NTA2MjQyOSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQiIG1zZ2lkPSI2MzM3MTU1NjA4MDU1MDYyNDI5Ij4i4Lit4Li14LiBIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDguIfguLLguJkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9ob3Jpem9udGFsIiBtc2dpZD0iODg0ODUxNDQ3NDU0MzQyNzMzMiI+IuC5geC4ouC4geC5g+C4meC5geC4meC4p+C4meC4reC4mSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X3ZlcnRpY2FsIiBtc2dpZD0iOTA3NTI5MjIzMzY5NjE4MDgxMyI+IuC5geC4ouC4geC5g+C4meC5geC4meC4p+C4leC4seC5ieC4hyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2N1c3RvbSIgbXNnaWQ9IjQxNzc4Mzc1OTc1MTM3MDE5NDMiPiLguYHguKLguIHguYHguJrguJrguIHguLPguKvguJnguJTguYDguK3guIciPC9zdHJpbmc+CkBAIC0zNjUsNyArMzY0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjM3OTE4NzI2NzUwOTU1ODU5Ij4i4LmA4Lib4Li04LiU4LmC4Lir4Lih4LiU4Lib4Lij4Liw4Lir4Lii4Lix4LiU4LmB4Lia4LiV4LmA4LiV4Lit4Lij4Li14LmI4Lit4Lii4Li54LmIIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+IuC4peC4lOC4geC4suC4o+C5g+C4iuC5ieC5geC4muC4leC5gOC4leC4reC4o+C4teC5iOC5geC4peC4sOC4guC5ieC4reC4oeC4ueC4peC5geC4muC5h+C4geC4geC4o+C4suC4p+C4lOC5jCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4i4Lib4Li04LiU4LmC4Lir4Lih4LiU4Lib4Lij4Liw4Lir4Lii4Lix4LiU4LmB4Lia4LiV4LmA4LiV4Lit4Lij4Li14LmIIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IuC5gOC4meC4t+C5ieC4reC4q+C4suC4luC4ueC4geC4i+C5iOC4reC4meC5hOC4p+C5iSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fZGlhbG9nX3RleHQiIG1zZ2lkPSIzMDcxNDMxMDI1NDQ4MjE4OTI4Ij4iPHhsaWZmOmcgaWQ9IkFQUF9TRUVLSU5HX1BFUk1JU1NJT04iPiVzPC94bGlmZjpnPiDguIjguLDguYDguKPguLTguYjguKHguIjguLHguJrguKDguLLguJ7guJfguLjguIHguK3guKLguYjguLLguIfguJfguLXguYjguYHguKrguJTguIfguJrguJnguKvguJnguYnguLLguIjguK0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX3JlbWVtYmVyX3RleHQiIG1zZ2lkPSIzMTAzNTEwODgyMTcyNzQ2NzUyIj4i4LmE4Lih4LmI4LiV4LmJ4Lit4LiH4LmB4Liq4LiU4LiH4LiC4LmJ4Lit4LiE4Lin4Liy4Lih4LiZ4Li14LmJ4Lit4Li14LiBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+IuC4peC5ieC4suC4h+C4l+C4seC5ieC4h+C4q+C4oeC4lCI8L3N0cmluZz4KQEAgLTQ1MCw0ICs0NDgsMjggQEAKICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfdGl0bGUiIG1zZ2lkPSI1MDI3MDM3NzA2NTAwNjM1MjY5Ij4i4LmA4Lib4Li04LiU4Lia4Lil4Li54LiX4Li54LiY4LmE4Lir4LihIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9tZXNzYWdlIiBtc2dpZD0iOTEwNjU5NTk5MDcwODk4NTM4NSI+IuC4q+C4suC4geC4leC5ieC4reC4h+C4geC4suC4o+C5gOC4iuC4t+C5iOC4reC4oeC4leC5iOC4reC5geC4m+C5ieC4meC4nuC4tOC4oeC4nuC5jOC4geC4seC4muC5geC4l+C5h+C4muC5gOC4peC5h+C4lSDguITguLjguJPguJXguYnguK3guIfguYDguJvguLTguJTguJrguKXguLnguJfguLnguJjguIHguYjguK3guJkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiLguYDguJvguLTguJQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiLguJnguLPguYTguJvguYPguIrguYnguIHguLHguJrguIHguLLguKPguYHguIjguYnguIfguYDguJXguLfguK3guJkgPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4i4LiZ4Liz4LmE4Lib4LmD4LiK4LmJ4LiB4Lix4Lia4LiB4Liy4Lij4LmB4LiI4LmJ4LiH4LmA4LiV4Li34Lit4LiZ4LiX4Lix4LmJ4LiH4Lir4Lih4LiU4LiI4Liy4LiB4LmB4Lit4Lib4LiZ4Li14LmJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IuC4muC4peC5h+C4reC4geC5geC4peC5ieC4pyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbXBvcnRhbmNlIiBtc2dpZD0iNDEwOTkyOTk4NjEwNzE0NzkzMCI+IuC4hOC4p+C4suC4oeC4quC4s+C4hOC4seC4jeC4leC5iOC4syI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiLguITguKfguLLguKHguKrguLPguITguLHguI3guJvguIHguJXguLQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoaWdoX2ltcG9ydGFuY2UiIG1zZ2lkPSIxNTI3MDY2MTk1NjE0MDUwMjYzIj4i4LiE4Lin4Liy4Lih4Liq4Liz4LiE4Lix4LiN4Liq4Li54LiHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4i4LiE4Lin4Liy4Lih4Liq4Liz4LiE4Lix4LiN4LmA4Lij4LmI4LiH4LiU4LmI4Lin4LiZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjIzOTcxOTI2NDI2NTc4NzI4NzIiPiLguYTguKHguYjguJXguYnguK3guIfguYHguKrguJTguIfguIHguLLguKPguYHguIjguYnguIfguYDguJXguLfguK3guJnguYDguKvguKXguYjguLLguJnguLXguYkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4i4LmB4Liq4LiU4LiH4LiX4Li14LmI4LiU4LmJ4Liy4LiZ4Lil4LmI4Liy4LiH4LiC4Lit4LiH4Lij4Liy4Lii4LiB4Liy4Lij4LmB4LiI4LmJ4LiH4LmA4LiV4Li34Lit4LiZ4LmC4LiU4Lii4LmE4Lih4LmI4Liq4LmI4LiH4LmA4Liq4Li14Lii4LiHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9IjQ5MjY1Mjk2MTU5MjA2MTA4MTciPiLguYHguKrguJTguIfguIHguLLguKPguYHguIjguYnguIfguYDguJXguLfguK3guJnguYDguKvguKXguYjguLLguJnguLXguYnguYLguJTguKLguYTguKHguYjguKrguYjguIfguYDguKrguLXguKLguIciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+IuC5geC4quC4lOC4h+C4l+C4teC5iOC4lOC5ieC4suC4meC4muC4meC4guC4reC4h+C4o+C4suC4ouC4geC4suC4o+C5geC4iOC5ieC4h+C5gOC4leC4t+C4reC4meC5geC4peC4sOC4quC5iOC4h+C5gOC4quC4teC4ouC4hyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjUyMzY5ODcxNzE5MDQ3NTYxMzQiPiLguYHguKrguJTguIfguJrguJnguKvguJnguYnguLLguIjguK3guYPguJnguIrguYjguKfguIfguYDguKfguKXguLLguKrguLHguYnguJnguYYg4LmB4Lil4Liw4Liq4LmI4LiH4LmA4Liq4Li14Lii4LiHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX21vcmVfc2V0dGluZ3MiIG1zZ2lkPSI4MTYzMDYyODMzOTY1NTM1NzEiPiLguIHguLLguKPguJXguLHguYnguIfguITguYjguLLguYDguJ7guLTguYjguKHguYDguJXguLTguKEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiLguYDguKrguKPguYfguIjguKrguLTguYnguJkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiLguKrguLXguJvguIHguJXguLQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4i4Liq4Li14Lii4Liy4Lih4LiE4LmI4Liz4LiE4Li34LiZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X2N1c3RvbSIgbXNnaWQ9IjM2NTU1NzY0OTIzMjIyOTg3MTMiPiLguKrguLXguJfguLXguYjguIHguLPguKvguJnguJTguYDguK3guIciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiLguKrguLXguJfguLXguYjguYTguKHguYjguKPguLnguYnguIjguLHguIEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4i4LiB4Liy4Lij4Lib4Lij4Lix4Lia4LmA4Lib4Lil4Li14LmI4Lii4LiZ4Liq4Li1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Nob3dfcXMiIG1zZ2lkPSIxNzYzMjQ0MzU0Mzk5Mjc2Njc5Ij4i4LmB4Liq4LiU4LiH4LmE4LiX4Lil4LmM4LiB4Liy4Lij4LiV4Lix4LmJ4LiH4LiE4LmI4Liy4LiU4LmI4Lin4LiZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiLguYDguJvguLTguJTguYPguIrguYnguIHguLLguKPguYDguJvguKXguLXguYjguKLguJnguJfguLXguYjguIHguLPguKvguJnguJTguYDguK3guIciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9hcHBseSIgbXNnaWQ9IjkyMTI2MDIwMTI2NDEwMzQyODMiPiLguYPguIrguYkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfdGl0bGUiIG1zZ2lkPSI0NzQ2NjY2NTQ1NDgwNTM0NjYzIj4i4Lii4Li34LiZ4Lii4Lix4LiZ4LiB4Liy4Lij4LiV4Lix4LmJ4LiH4LiE4LmI4LiyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X21lc3NhZ2UiIG1zZ2lkPSI5MTE2MDAxMDY5Mzk3OTk2NjkxIj4i4LiB4Liy4Lij4LiV4Lix4LmJ4LiH4LiE4LmI4Liy4Liq4Li14Lia4Liy4LiH4Lit4Lii4LmI4Liy4LiH4Lit4Liy4LiI4LiX4Liz4LmD4Lir4LmJ4Lit4Li44Lib4LiB4Lij4LiT4LmM4LiZ4Li14LmJ4LmD4LiK4LmJ4LiH4Liy4LiZ4LmE4Lih4LmI4LmE4LiU4LmJIOC4hOC4peC4tOC4geC4leC4geC4peC4h+C5gOC4nuC4t+C5iOC4reC4ouC4t+C4meC4ouC4seC4meC4geC4suC4o+C4leC4seC5ieC4h+C4hOC5iOC4suC4quC4teC5gOC4q+C4peC5iOC4suC4meC4teC5iSDguKHguLTguInguLDguJnguLHguYnguJnguKPguLDguJrguJrguIjguLDguKPguLXguYDguIvguYfguJXguIHguLLguKPguJXguLHguYnguIfguITguYjguLLguKvguKXguLHguIfguIjguLLguIEgMTAg4Lin4Li04LiZ4Liy4LiX4Li1Ijwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXRsL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy10bC9zdHJpbmdzLnhtbAppbmRleCBhMTljOTRkLi40YmVlM2VhIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXRsL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtdGwvc3RyaW5ncy54bWwKQEAgLTMwMSw4ICszMDEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+Im1hZ2hhbmFwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sYXVuY2hfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjI5NjkyODc4MzgxMjA1NTA1MDYiPiJIaW5kaSBtYXNpbXVsYW4gPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2hvd19oaXN0b3J5X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjcwNjIwODgxOTY0NDk3NDcyNDUiPiJIaWdpdCBwYSI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciByZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0ICg2MzM3MTU1NjA4MDU1MDYyNDI5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCIgbXNnaWQ9IjYzMzcxNTU2MDgwNTUwNjI0MjkiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gUGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9ob3Jpem9udGFsIiBtc2dpZD0iODg0ODUxNDQ3NDU0MzQyNzMzMiI+IlNwbGl0IEhvcml6b250YWwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF92ZXJ0aWNhbCIgbXNnaWQ9IjkwNzUyOTIyMzM2OTYxODA4MTMiPiJTcGxpdCBWZXJ0aWNhbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2N1c3RvbSIgbXNnaWQ9IjQxNzc4Mzc1OTc1MTM3MDE5NDMiPiJTcGxpdCBDdXN0b20iPC9zdHJpbmc+CkBAIC0zNjUsNyArMzY0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjM3OTE4NzI2NzUwOTU1ODU5Ij4iTmFrYS1vbiBhbmcgdGFnYXRpcGlkIG5nIGJhdGVyeWEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iODIwMzE4Nzg4MTI2NjcyNjkyIj4iQmluYWJhd2FzYW4gYW5nIHBhZ2dhbmFwIGF0IGRhdGEgc2EgYmFja2dyb3VuZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4iSS1vZmYgYW5nIHBhZ3RpdGlwaWQgbmcgYmF0ZXJ5YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJOYWthdGFnbyBhbmcgbWdhIGNvbnRlbnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+IlNpc2ltdWxhbiBuZyBpLWNhcHR1cmUgbmcgPHhsaWZmOmcgaWQ9IkFQUF9TRUVLSU5HX1BFUk1JU1NJT04iPiVzPC94bGlmZjpnPiBhbmcgbGFoYXQgbmcgaXBpbmFwYWtpdGEgc2EgaXlvbmcgc2NyZWVuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fcmVtZW1iZXJfdGV4dCIgbXNnaWQ9IjMxMDM1MTA4ODIxNzI3NDY3NTIiPiJIdXdhZyBpcGFraXRhbmcgbXVsaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNsZWFyX2FsbF9ub3RpZmljYXRpb25zX3RleHQiIG1zZ2lkPSI4MTQxOTI4ODk3NzE0NjI4MjgiPiJJLWNsZWFyIGxhaGF0Ijwvc3RyaW5nPgpAQCAtNDUwLDQgKzQ0OCwyOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiJJLW9uIGFuZyBCbHVldG9vdGg/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9tZXNzYWdlIiBtc2dpZD0iOTEwNjU5NTk5MDcwODk4NTM4NSI+IlVwYW5nIGlrb25la3RhIGFuZyBpeW9uZyBrZXlib2FyZCBzYSBpeW9uZyB0YWJsZXQsIGthaWxhbmdhbiBtbyBtdW5hbmcgaS1vbiBhbmcgQmx1ZXRvb3RoLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+Ikktb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiJOYWFhbmdrb3Agc2EgbWdhIG5vdGlmaWNhdGlvbiB0dW5na29sIHNhIDx4bGlmZjpnIGlkPSJUT1BJQ19OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+Ik5hYWFuZ2tvcCBzYSBsYWhhdCBuZyBub3RpZmljYXRpb24gbXVsYSBzYSBhcHAgbmEgaXRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+Ik5hLWJsb2NrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4iSGluZGkgbWFzeWFkb25nIG1haGFsYWdhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9pbXBvcnRhbmNlIiBtc2dpZD0iODE5MjEwNzY4OTk5NTc0MjY1MyI+Ik1haGFsYWdhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+Ik5hcGFrYWhhbGFnYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1heF9pbXBvcnRhbmNlIiBtc2dpZD0iNTA4OTAwNTg3MjcxOTU2Mzg5NCI+Ik1haGFsYWdhbmctbWFoYWxhZ2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iMjM5NzE5MjY0MjY1Nzg3Mjg3MiI+Ikh1d2FnIGthaWxhbm1hbiBpcGFraXRhIGFuZyBtZ2Egbm90aWZpY2F0aW9uIG5hIGl0byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjQzODM1NjMyNjczNzA4NTk3MjUiPiJUYWhpbWlrIG5hIGlwYWtpdGEgc2EgaWJhYmEgbmcgbGlzdGFoYW4gbmcgbm90aWZpY2F0aW9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9IjQ5MjY1Mjk2MTU5MjA2MTA4MTciPiJUYWhpbWlrIG5hIGlwYWtpdGEgYW5nIG1nYSBub3RpZmljYXRpb24gbmEgaXRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMyMjI2ODAxMzY2MTI0MDgyMjMiPiJJcGFraXRhIHNhIGl0YWFzIG5nIGxpc3RhaGFuIG5nIG1nYSBub3RpZmljYXRpb24gYXQgbWFnLXBsYXkgbmcgdHVub2ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4iSXBhc2lsaXAgc2Egc2NyZWVuIGF0IG1hZy1wbGF5IG5nIHR1bm9nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX21vcmVfc2V0dGluZ3MiIG1zZ2lkPSI4MTYzMDYyODMzOTY1NTM1NzEiPiJIaWdpdCBwYW5nIG1nYSBzZXR0aW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4iVGFwb3MgTmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiJNZ2Ega2FyYW5pd2FuZyBrdWxheSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9uaWdodCIgbXNnaWQ9IjU5NDM4MTc2MjIxMDUzMDcwNzIiPiJNYWRpZGlsaW0gbmEga3VsYXkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+Ik1nYSBjdXN0b20gbmEga3VsYXkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiJNZ2EgaGluZGkga2lsYWxhbmcga3VsYXkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4iUGFnYmFnbyBzYSBrdWxheSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+IklwYWtpdGEgYW5nIHRpbGUgbmcgTWdhIE1hYmlsaXNhbmcgU2V0dGluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4iSS1lbmFibGUgYW5nIGN1c3RvbSBuYSBwYWdwYWxpdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+IklsYXBhdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiJLdW1waXJtYWhpbiBhbmcgbWdhIHNldHRpbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfbWVzc2FnZSIgbXNnaWQ9IjkxMTYwMDEwNjkzOTc5OTY2OTEiPiJNYWFhcmluZyBoaW5kaSBtYWdhbWl0IGFuZyBkZXZpY2UgbmEgaXRvIGRhaGlsIHNhIGlsYW5nIHNldHRpbmcgbmcga3VsYXkuIEktY2xpY2sgYW5nIE9LIHVwYW5nIGt1bXBpcm1haGluIGFuZyBtZ2Egc2V0dGluZyBuZyBrdWxheSBuYSBpdG8sIGt1bmcgaGluZGkgYXkgbWFyZS1yZXNldCBhbmcgbWdhIHNldHRpbmcgbmEgaXRvIHBhZ2thdGFwb3MgbmcgMTAgc2VndW5kby4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtdHIvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXRyL3N0cmluZ3MueG1sCmluZGV4IGYyMTA3ODMuLmMwZWNjNzggMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtdHIvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy10ci9zdHJpbmdzLnhtbApAQCAtMzAxLDggKzMwMSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4iYXJhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sYXVuY2hfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjI5NjkyODc4MzgxMjA1NTA1MDYiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4gYmHFn2xhdMSxbGFtYWTEsS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4iRGnEn2VyIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQgKDYzMzcxNTU2MDgwNTUwNjI0MjkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBUYW5lIERhaGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9ob3Jpem9udGFsIiBtc2dpZD0iODg0ODUxNDQ3NDU0MzQyNzMzMiI+IllhdGF5IEF5xLFybWEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF92ZXJ0aWNhbCIgbXNnaWQ9IjkwNzUyOTIyMzM2OTYxODA4MTMiPiJEaWtleSBBecSxcm1hIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfY3VzdG9tIiBtc2dpZD0iNDE3NzgzNzU5NzUxMzcwMTk0MyI+IsOWemVsIEF5xLFybWEiPC9zdHJpbmc+CkBAIC0zNjUsNyArMzY0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjM3OTE4NzI2NzUwOTU1ODU5Ij4iUGlsIHRhc2FycnVmdSBhw6fEsWsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iODIwMzE4Nzg4MTI2NjcyNjkyIj4iUGVyZm9ybWFuc8SxIHZlIGFya2EgcGxhbiB2ZXJpbGVyaW5pIGF6YWx0xLFyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiJQaWwgdGFzYXJydWZ1bnUga2FwYXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4ixLDDp2VyaWsgZ2l6bGVuZGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+Ijx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4sIGVrcmFuxLFuxLF6ZGEgZ8O2csO8bnTDvGxlbmVuIGhlciDFn2V5aSBrYXlkZXRtZXllIGJhxZ9sYXlhY2FrLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fcmVtZW1iZXJfdGV4dCIgbXNnaWQ9IjMxMDM1MTA4ODIxNzI3NDY3NTIiPiJCaXIgZGFoYSBnw7ZzdGVybWUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4iVMO8bcO8IHRlbWl6bGUiPC9zdHJpbmc+CkBAIC00NTAsNCArNDQ4LDI4IEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+IkJsdWV0b290aCBhw6fEsWxzxLFuIG3EsT8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX21lc3NhZ2UiIG1zZ2lkPSI5MTA2NTk1OTkwNzA4OTg1Mzg1Ij4iS2xhdnllbml6aSB0YWJsZXRpbml6ZSBiYcSfbGFtYWsgacOnaW4gw7ZuY2UgQmx1ZXRvb3RoXCd1IGHDp21hbsSxeiBnZXJla2lyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+IkHDpyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX3RvcGljIiBtc2dpZD0iMzY0MTQwMzQ4OTMxODY1OTY2NiI+Ijx4bGlmZjpnIGlkPSJUT1BJQ19OQU1FIj4lMSRzPC94bGlmZjpnPiBiaWxkaXJpbWxlcmluZSB1eWd1bGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b19hcHAiIG1zZ2lkPSIzNjMwMTY3ODM5Mzk4MTU5NjAiPiJCdSB1eWd1bGFtYWRhbiBnZWxlbiB0w7xtIGJpbGRpcmltbGVyZSB1eWd1bGFuc8SxbiBtxLE/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IkVuZ2VsbGVuZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW1wb3J0YW5jZSIgbXNnaWQ9IjQxMDk5Mjk5ODYxMDcxNDc5MzAiPiLDlm5lbSBkw7x6ZXlpIGTDvMWfw7xrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9pbXBvcnRhbmNlIiBtc2dpZD0iODE5MjEwNzY4OTk5NTc0MjY1MyI+IsOWbmVtIGTDvHpleWkgbm9ybWFsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+IsOWbmVtIGTDvHpleWkgecO8a3NlayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1heF9pbXBvcnRhbmNlIiBtc2dpZD0iNTA4OTAwNTg3MjcxOTU2Mzg5NCI+IsOWbmVtIGTDvHpleWkgYWNpbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4iQnUgYmlsZGlyaW1sZXJpIGhpw6diaXIgemFtYW4gZ8O2c3Rlcm1lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+IkJpbGRpcmltIGxpc3Rlc2luaW4gZW4gYWx0xLFuZGEgc2Vzc2l6Y2UgZ8O2c3RlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI0OTI2NTI5NjE1OTIwNjEwODE3Ij4iQnUgYmlsZGlyaW1sZXJpIHNlc3NpemNlIGfDtnN0ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+IkJpbGRpcmltIGxpc3Rlc2luaW4gZW4gw7xzdMO8bmRlIGfDtnN0ZXIgdmUgc2VzIMOnxLFrYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4iRWtyYW5hIGdldGlyIHZlIHNlcyDDp8Sxa2FyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX21vcmVfc2V0dGluZ3MiIG1zZ2lkPSI4MTYzMDYyODMzOTY1NTM1NzEiPiJEacSfZXIgYXlhcmxhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9kb25lIiBtc2dpZD0iNTI3OTQyNjA0NzI3MzkzMDE3NSI+IkJpdHRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25vbmUiIG1zZ2lkPSIyMTIxOTU3OTI2MDQwNTQzMTQ4Ij4iTm9ybWFsIHJlbmtsZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4iR2VjZSByZW5rbGVyaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4iw5Z6ZWwgcmVua2xlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF91bmtub3duIiBtc2dpZD0iMjcwOTIwMjEwNDI1NjI2NTEwNyI+IkJpbGlubWV5ZW4gcmVua2xlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3RyYW5zZm9ybSIgbXNnaWQ9IjY5ODU0NjA0MDgwNzkwODYwOTAiPiJSZW5rIGRlxJ9pxZ9pa2xpxJ9pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Nob3dfcXMiIG1zZ2lkPSIxNzYzMjQ0MzU0Mzk5Mjc2Njc5Ij4iSMSxemzEsSBBeWFybGFyIGt1dHVzdW51IGfDtnN0ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9lbmFibGVfY3VzdG9tIiBtc2dpZD0iNjcyOTAwMTMwODIxNzM0NzUwMSI+IsOWemVsIGTDtm7DvMWfw7xtw7wgZXRraW5sZcWfdGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4iVXlndWxhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+IkF5YXJsYXLEsSBvbmF5bGF5xLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X21lc3NhZ2UiIG1zZ2lkPSI5MTE2MDAxMDY5Mzk3OTk2NjkxIj4iQmF6xLEgcmVua2xlciBidSBjaWhhesSxIGt1bGxhbsSxbG1heiB5YXBhYmlsaXIuIEJ1IHJlbmtsZXJpIG9uYXlsYW1hayBpw6dpbiBUYW1hbVwnxLEgdMSxa2xhecSxbi4gVMSxa2xhbWF6c2FuxLF6IGJ1IGF5YXJsYXIgMTAgc2FuaXllIHNvbnJhIHPEsWbEsXJsYW5hY2FrdMSxci4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtdWsvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXVrL3N0cmluZ3MueG1sCmluZGV4IDhhMWVjOTcuLjMxMDk0MDMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtdWsvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy11ay9zdHJpbmdzLnhtbApAQCAtMzY2LDcgKzM2Niw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+ItCg0LXQttC40Lwg0LfQsNC+0YnQsNC00LbQtdC90L3RjyDQt9Cw0YDRj9C00YMg0LDQutGD0LzRg9C70Y/RgtC+0YDQsCDQstCy0ZbQvNC60L3QtdC90L4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iODIwMzE4Nzg4MTI2NjcyNjkyIj4i0JfQvdC40LbRg9GU0YLRjNGB0Y8g0L/RgNC+0LTRg9C60YLQuNCy0L3RltGB0YLRjCDRliDQvtCx0LzQtdC20YPRjtGC0YzRgdGPINGE0L7QvdC+0LLRliDQtNCw0L3RliI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4i0JLQuNC80LrQvdGD0YLQuCDRgNC10LbQuNC8INC30LDQvtGJ0LDQtNC20LXQvdC90Y8g0LfQsNGA0Y/QtNGDINCw0LrRg9C80YPQu9GP0YLQvtGA0LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4i0JLQvNGW0YHRgiDRgdGF0L7QstCw0L3QviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fZGlhbG9nX3RleHQiIG1zZ2lkPSIzMDcxNDMxMDI1NDQ4MjE4OTI4Ij4iPHhsaWZmOmcgaWQ9IkFQUF9TRUVLSU5HX1BFUk1JU1NJT04iPiVzPC94bGlmZjpnPiDQvtGC0YDQuNC80LDRlCDQtNC+0YHRgtGD0L8g0LTQviDQstGB0ZbRhSDQtNCw0L3QuNGFLCDRj9C60ZYg0LLRltC00L7QsdGA0LDQttCw0Y7RgtGM0YHRjyDQvdCwINCy0LDRiNC+0LzRgyDQtdC60YDQsNC90ZYuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+ItCR0ZbQu9GM0YjQtSDQvdC1INC/0L7QutCw0LfRg9Cy0LDRgtC4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+ItCe0YfQuNGB0YLQuNGC0Lgg0LLRgdC1Ijwvc3RyaW5nPgpAQCAtNDUxLDQgKzQ1MCwyOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiLQo9Cy0ZbQvNC60L3Rg9GC0LggQmx1ZXRvb3RoPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiLQqdC+0LEg0L/RltC04oCZ0ZTQtNC90LDRgtC4INC60LvQsNCy0ZbQsNGC0YPRgNGDINC00L4g0L/Qu9Cw0L3RiNC10YLQsCwg0YHQv9C10YDRiNGDINC/0L7RgtGA0ZbQsdC90L4g0LLQstGW0LzQutC90YPRgtC4IEJsdWV0b290aC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiLQo9Cy0ZbQvNC60L3Rg9GC0LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiLQl9Cw0YHRgtC+0YHRg9Cy0LDRgtC4INC00L4g0YHQv9C+0LLRltGJ0LXQvdGMINC90LAg0YLQtdC80YMgXCI8eGxpZmY6ZyBpZD0iVE9QSUNfTkFNRSI+JTEkczwveGxpZmY6Zz5cIiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+ItCX0LDRgdGC0L7RgdGD0LLQsNGC0Lgg0LTQviDQstGB0ZbRhSDRgdC/0L7QstGW0YnQtdC90Ywg0ZbQtyDRhtGM0L7Qs9C+INC00L7QtNCw0YLQutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+ItCX0LDQsdC70L7QutC+0LLQsNC90L4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW1wb3J0YW5jZSIgbXNnaWQ9IjQxMDk5Mjk5ODYxMDcxNDc5MzAiPiLQndC40LfRjNC60LjQuSDQv9GA0ZbQvtGA0LjRgtC10YIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4i0KHRgtCw0L3QtNCw0YDRgtC90LjQuSDQv9GA0ZbQvtGA0LjRgtC10YIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoaWdoX2ltcG9ydGFuY2UiIG1zZ2lkPSIxNTI3MDY2MTk1NjE0MDUwMjYzIj4i0JLQuNGB0L7QutC40Lkg0L/RgNGW0L7RgNC40YLQtdGCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4i0KLQtdGA0LzRltC90L7QstC+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjIzOTcxOTI2NDI2NTc4NzI4NzIiPiLQndGW0LrQvtC70Lgg0L3QtSDQv9C+0LrQsNC30YPQstCw0YLQuCDRhtGWINGB0L/QvtCy0ZbRidC10L3QvdGPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+ItCf0L7QutCw0LfRg9Cy0LDRgtC4INGB0L/QvtCy0ZbRidC10L3QvdGPINCy0L3QuNC30YMg0YHQv9C40YHQutGDINCx0LXQtyDQt9Cy0YPQutC+0LLQvtCz0L4g0YHQuNCz0L3QsNC70YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+ItCf0L7QutCw0LfRg9Cy0LDRgtC4INGG0ZYg0YHQv9C+0LLRltGJ0LXQvdC90Y8g0LHQtdC3INC30LLRg9C60L7QstC+0LPQviDRgdC40LPQvdCw0LvRgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4i0J/QvtC60LDQt9GD0LLQsNGC0Lgg0YHQv9C+0LLRltGJ0LXQvdC90Y8g0LLQs9C+0YDRliDRgdC/0LjRgdC60YMg0LfRliDQt9Cy0YPQutC+0LLQuNC8INGB0LjQs9C90LDQu9C+0LwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4i0J/QvtC60LDQt9GD0LLQsNGC0Lgg0YHQv9C+0LLRltGJ0LXQvdC90Y8g0L3QsCDQtdC60YDQsNC90ZYg0LfRliDQt9Cy0YPQutC+0LLQuNC8INGB0LjQs9C90LDQu9C+0LwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+ItCR0ZbQu9GM0YjQtSDQvdCw0LvQsNGI0YLRg9Cy0LDQvdGMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4i0JPQvtGC0L7QstC+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25vbmUiIG1zZ2lkPSIyMTIxOTU3OTI2MDQwNTQzMTQ4Ij4i0KHRgtCw0L3QtNCw0YDRgtC90ZYg0LrQvtC70YzQvtGA0LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4i0J3RltGH0L3RliDQutC+0LvRjNC+0YDQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4i0JrQvtGA0LjRgdGC0YPQstCw0YbRjNC60ZYg0LrQvtC70YzQvtGA0LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiLQndC10LLRltC00L7QvNGWINC60L7Qu9GM0L7RgNC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+ItCX0LzRltC90LXQvdC90Y8g0LrQvtC70YzQvtGA0ZbQsiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+ItCf0L7QutCw0LfQsNGC0Lgg0L7Qv9GG0ZbRjiDRiNCy0LjQtNC60LjRhSDQvdCw0LvQsNGI0YLRg9Cy0LDQvdGMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiLQo9Cy0ZbQvNC60L3Rg9GC0Lgg0LrQvtGA0LjRgdGC0YPQstCw0YbRjNC60LUg0L/QtdGA0LXRgtCy0L7RgNC10L3QvdGPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4i0JfQsNGB0YLQvtGB0YPQstCw0YLQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiLQn9GW0LTRgtCy0LXRgNC00LjRgtC4INC90LDQu9Cw0YjRgtGD0LLQsNC90L3RjyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+ItCU0LXRj9C60ZYg0L3QsNC70LDRiNGC0YPQstCw0L3QvdGPINC60L7Qu9GM0L7RgNGW0LIg0LzQvtC20YPRgtGMINC30YDQvtCx0LjRgtC4INGG0LXQuSDQv9GA0LjRgdGC0YDRltC5INC90LXQv9GA0LjQtNCw0YLQvdC40Lwg0LTQu9GPINCy0LjQutC+0YDQuNGB0YLQsNC90L3Rjy4g0J3QsNGC0LjRgdC90ZbRgtGMIE9LLCDRidC+0LEg0L/RltC00YLQstC10YDQtNC40YLQuCDQvdCw0LvQsNGI0YLRg9Cy0LDQvdC90Y8sINGW0L3QsNC60YjQtSDRl9GFINCx0YPQtNC1INGB0LrQuNC90YPRgtC+INGH0LXRgNC10LcgMTAg0YHQtdC60YPQvdC0LiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy11ci1yUEsvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXVyLXJQSy9zdHJpbmdzLnhtbAppbmRleCBlYTdhNzgwLi41MmFhNTgwIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXVyLXJQSy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXVyLXJQSy9zdHJpbmdzLnhtbApAQCAtMzAxLDggKzMwMSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4i2KrZhNin2LQg2qnYsduM2roiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xhdW5jaF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMjk2OTI4NzgzODEyMDU1MDUwNiI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDaqdmIINi02LHZiNi5INmG24HbjNq6INqp24zYpyDYrNinINiz2qnYp9uUIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zaG93X2hpc3RvcnlfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNzA2MjA4ODE5NjQ0OTc0NzI0NSI+ItmF2LLbjNivIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQgKDYzMzcxNTU2MDgwNTUwNjI0MjkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDZhdiy24zYryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2hvcml6b250YWwiIG1zZ2lkPSI4ODQ4NTE0NDc0NTQzNDI3MzMyIj4i2KjZhNit2KfYuCDYp9mB2YLbjCDYp9mE2q8g2qnYsduM2roiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF92ZXJ0aWNhbCIgbXNnaWQ9IjkwNzUyOTIyMzM2OTYxODA4MTMiPiLYqNmE2K3Yp9i4INi52YXZiNiv24wg2KfZhNqvINqp2LHbjNq6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfY3VzdG9tIiBtc2dpZD0iNDE3NzgzNzU5NzUxMzcwMTk0MyI+Itio2YTYrdin2Lgg2K3Ys9ioINi22LHZiNix2Kog2KfZhNqvINqp2LHbjNq6Ijwvc3RyaW5nPgpAQCAtMzY1LDcgKzM2NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+Itio24zZudix24wg2LPbjNmI2LEg2KLZhiDbgduSIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+Itqp2KfYsdqp2LHYr9qv24wg2KfZiNixINm+2LMg2YXZhti42LEg2qnYpyDaiNuM2bnYpyDaqdmFINqp2LEg2K/bjNiq2Kcg24HbkiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4i2KjbjNm52LHbjCDaqduMINio2obYqiDYotmBINqp2LHbjNq6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+ItmF2YjYp9ivINmF2K7ZgduMINuB24zauiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fZGlhbG9nX3RleHQiIG1zZ2lkPSIzMDcxNDMxMDI1NDQ4MjE4OTI4Ij4iPHhsaWZmOmcgaWQ9IkFQUF9TRUVLSU5HX1BFUk1JU1NJT04iPiVzPC94bGlmZjpnPiDYotm+INqp24wg2KfYs9qp2LHbjNmGINm+2LEg2ojYs9m+2YTbkiDbgdmI2YbbkiDZiNin2YTbjCDbgdixINqG24zYsiDaqdmIINqp24zZvtqG2LEg2qnYsdmG2Kcg2LTYsdmI2Lkg2qnYsSDYr9uM2q/bjNuUIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+Itiv2YjYqNin2LHbgSDZhtuBINiv2qnavtin2KbbjNq6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+Itiz2KjavtuMINqp2Ygg2LXYp9mBINqp2LHbjNq6Ijwvc3RyaW5nPgpAQCAtNDUwLDQgKzQ0OCwyOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiLYqNmE2YjZudmI2KraviDYotmGINqp2LHbjNq62J8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX21lc3NhZ2UiIG1zZ2lkPSI5MTA2NTk1OTkwNzA4OTg1Mzg1Ij4i2KfZvtmG25Ig2qnbjCDYqNmI2LHaiCDaqdmIINin2b7ZhtuSINm524zYqNmE2bkg2qnbkiDYs9in2KraviDZhdmG2LPZhNqpINqp2LHZhtuSINqp24zZhNim25Ig2b7bgdmE25Ig2KLZviDaqdmIINin2b7ZhtinINio2YTZiCDZudmI2KraviDYotmGINqp2LHZhtinINuB2Ygg2q/Yp9uUIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9jb25maXJtYXRpb25fb2siIG1zZ2lkPSI2MjU4MDc0MjUwOTQ4MzA5NzE1Ij4i2KLZhiDaqdix24zauiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX3RvcGljIiBtc2dpZD0iMzY0MTQwMzQ4OTMxODY1OTY2NiI+Ijx4bGlmZjpnIGlkPSJUT1BJQ19OQU1FIj4lMSRzPC94bGlmZjpnPiDYp9i32YTYp9i52KfYqiDZvtixINmE2Kfar9mIINqp2LHbjNq6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4i2KfYsyDYp9uM2b4g2LPbkiDYqtmF2KfZhSDYp9i32YTYp9i52KfYqiDZvtixINmE2Kfar9mIINqp2LHbjNq6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+ItmF2LPYr9mI2K8g2qnYsdiv24EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW1wb3J0YW5jZSIgbXNnaWQ9IjQxMDk5Mjk5ODYxMDcxNDc5MzAiPiLaqdmFINin24HZhduM2KoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4i2LnZhdmI2YXbjCDYp9uB2YXbjNiqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+Itiy24zYp9iv24Eg2KfbgdmF24zYqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1heF9pbXBvcnRhbmNlIiBtc2dpZD0iNTA4OTAwNTg3MjcxOTU2Mzg5NCI+ItmB2YjYsduMINin24HZhduM2KoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iMjM5NzE5MjY0MjY1Nzg3Mjg3MiI+ItuM24Eg2KfYt9mE2KfYudin2Kog2qnYqNq+24wg2YXYqiDYr9qp2r7Yp9im24zauiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjQzODM1NjMyNjczNzA4NTk3MjUiPiLYp9i32YTYp9i52KfYqiDaqduMINmB24HYsdiz2Kog2qnbkiDYs9ioINiz25Ig2YbbjNqG25Ig2K7Yp9mF2YjYtNuMINiz25Ig2K/aqdq+2KfYptuM2roiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+Itiu2KfZhdmI2LTbjCDYs9uSINuM24Eg2KfYt9mE2KfYudin2Kog2K/aqdq+2KfYptuM2roiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+Itin2LfZhNin2LnYp9iqINqp24wg2YHbgdix2LPYqiDZvtixINiz2Kgg2LPbkiDYp9mI2b7YsSDYr9qp2r7Yp9im24zauiDYp9mI2LEg2KLZiNin2LIg2obZhNin2KbbjNq6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iNTIzNjk4NzE3MTkwNDc1NjEzNCI+Itin2LPaqdix24zZhiDZvtixINiv2qnavtin2KbbjNq6INin2YjYsSDYotmI2KfYsiDahtmE2KfYptuM2roiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+ItmF2LLbjNivINiq2LHYqtuM2KjYp9iqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4i24HZiNqv24zYpyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9ub25lIiBtc2dpZD0iMjEyMTk1NzkyNjA0MDU0MzE0OCI+Iti52KfZhSDYsdmG2q8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4i2LHYp9iqINqp25Ig2LHZhtqvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X2N1c3RvbSIgbXNnaWQ9IjM2NTU1NzY0OTIzMjIyOTg3MTMiPiLYrdiz2Kgg2LbYsdmI2LHYqiDYsdmG2q8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiLZhtin2YXYudmE2YjZhSDYsdmG2q8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4i2LHZhtqv2YjauiDaqduMINiq2KjYr9uM2YTbjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+ItmB2YjYsduMINiq2LHYqtuM2KjYp9iqINmI2KfZhNuMINm52KfYptmEINiv2qnavtin2KbbjNq6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiLYrdiz2Kgg2LbYsdmI2LHYqiDZudix2KfZhtiz2YHYp9ix2YUg2YHYudin2YQg2qnYsduM2roiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9hcHBseSIgbXNnaWQ9IjkyMTI2MDIwMTI2NDEwMzQyODMiPiLZhNin2q/ZiCDaqdix24zauiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiLYqtix2KrbjNio2KfYqiDaqduMINiq2YjYq9uM2YIg2qnYsduM2roiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfbWVzc2FnZSIgbXNnaWQ9IjkxMTYwMDEwNjkzOTc5OTY2OTEiPiLYsdmG2q/ZiNq6INqp24wg2qnahtq+INiq2LHYqtuM2KjYp9iqINin2LMg2KLZhNuSINqp2Ygg2YbYp9mC2KfYqNmEINin2LPYqti52YXYp9mEINio2YbYpyDYs9qp2KrbjCDbgduM2rrblCDYsdmG2q/ZiNq6INqp24wg2KfZhiDYqtix2KrbjNio2KfYqiDaqduMINiq2YjYq9uM2YIg2qnYsdmG25Ig2qnbjNmE2KbbkiDZudq+24zaqSDbgduSINm+2LEg2qnZhNqpINqp2LHbjNq62Iwg2KjYtdmI2LHYqiDYr9uM2q/YsSAxMCDYs9uM2qnZhtqIINio2LnYryDbjNuBINiq2LHYqtuM2KjYp9iqINix24wg2LPbjNm5INuB2Ygg2KzYp9im24zauiDar9uM25QiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtdXotclVaL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy11ei1yVVovc3RyaW5ncy54bWwKaW5kZXggMjQ5ZGU5NS4uYTg0OWNmYyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy11ei1yVVovc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy11ei1yVVovc3RyaW5ncy54bWwKQEAgLTMwMSw4ICszMDEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+InFpZGlyaXNoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sYXVuY2hfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjI5NjkyODc4MzgxMjA1NTA1MDYiPiLigJw8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz7igJ0gaWxvdmFzaW5pIGlzaGdhIHR1c2hpcmliIGJv4oCYbG1hZGkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zaG93X2hpc3RvcnlfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNzA2MjA4ODE5NjQ0OTc0NzI0NSI+Iktv4oCYcHJvcSI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciByZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0ICg2MzM3MTU1NjA4MDU1MDYyNDI5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCIgbXNnaWQ9IjYzMzcxNTU2MDgwNTUwNjI0MjkiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gdGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9ob3Jpem9udGFsIiBtc2dpZD0iODg0ODUxNDQ3NDU0MzQyNzMzMiI+Ikdvcml6b250YWwgeW/igJhuYWxpc2hkYSBib+KAmGxpc2giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF92ZXJ0aWNhbCIgbXNnaWQ9IjkwNzUyOTIyMzM2OTYxODA4MTMiPiJWZXJ0aWthbCB5b+KAmG5hbGlzaGRhIGJv4oCYbGlzaCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2N1c3RvbSIgbXNnaWQ9IjQxNzc4Mzc1OTc1MTM3MDE5NDMiPiJCb3NocWEgdXN1bGRhIGJv4oCYbGlzaCI8L3N0cmluZz4KQEAgLTM2NSw3ICszNjQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzc5MTg3MjY3NTA5NTU4NTkiPiJRdXZ2YXQgdGVqYXNoIHJlamltaSB5b3FpbGRpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+IlVudW1kb3JsaWtuaSBwYXNheXRpcmFkaSB2YSBmb25kYSBpbnQtZGFuIGZveWQtbmkgY2hla2xheWRpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiJRdXZ2YXQgdGVqYXNoIGZ1bmtzaXlhc2luaSBv4oCYY2hpcmluZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJLb250ZW50IHlhc2hpcmlsZGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+Ijx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4gaWxvdmFzaSBxdXJpbG1hIGVrcmFuaWRhZ2kgaGFyIHFhbmRheSB0YXN2aXJuaSBrb+KAmHJpc2huaSBib3NobGF5ZGkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+IkJvc2hxYSBrb+KAmHJzYXRpbG1hc2luIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+IkJhcmNoYXNpbmkgdG96YWxhc2giPC9zdHJpbmc+CkBAIC00NTAsNCArNDQ4LDI4IEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+IkJsdWV0b290aCB5b3FpbHNpbm1pPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiJLbGF2aWF0dXJhbmkgcGxhbnNoZXRpbmdpemdhIHVsYXNoIHVjaHVuIEJsdWV0b290aCB4aXptYXRpbmkgeW9xaXNoaW5naXoga2VyYWsuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9jb25maXJtYXRpb25fb2siIG1zZ2lkPSI2MjU4MDc0MjUwOTQ4MzA5NzE1Ij4iWW9xaXNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4i4oCcPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+4oCdIGJpbGRpcmlzaG5vbWFsYXJpZ2EgcW/igJhsbGFzaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+IlVzaGJ1IGlsb3ZhbmluZyBiYXJjaGEgYmlsZGlyaXNobm9tYWxhcmlnYSBxb+KAmGxsYXNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IkJsb2tsYW5nYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW1wb3J0YW5jZSIgbXNnaWQ9IjQxMDk5Mjk5ODYxMDcxNDc5MzAiPiJLYW1yb3EgbXVoaW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4iT+KAmHJ0YWNoYSBtdWhpbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiJKdWRhIG11aGltIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4iRmF2cXVsb2RkYSBtdWhpbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4iQnUgYmlsZGlyaXNobm9tYWxhciBib3NocWEga2/igJhyc2F0aWxtYXNpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjQzODM1NjMyNjczNzA4NTk3MjUiPiJCaWxkaXJpc2hub21hbGFyIHJv4oCYeXhhdGluaW5nIG94aXJpZGEgb3ZvenNpeiBrb+KAmHJzYXRpbHNpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI0OTI2NTI5NjE1OTIwNjEwODE3Ij4iQnUgYmlsZGlyaXNobm9tYWxhciBvdm96c2l6IGtv4oCYcnNhdGlsc2luIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMyMjI2ODAxMzY2MTI0MDgyMjMiPiJCaWxkaXJpc2hub21hbGFyIHJv4oCYeXhhdGluaW5nIGJvc2hpZGEgb3ZveiBiaWxhbiBrb+KAmHJzYXRpbHNpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjUyMzY5ODcxNzE5MDQ3NTYxMzQiPiJCYXJjaGEgb3luYWxhciB1c3RpZGEgc2lnbmFsIG92b3ppIGJpbGFuIGtv4oCYcnNhdGlsc2luIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX21vcmVfc2V0dGluZ3MiIG1zZ2lkPSI4MTYzMDYyODMzOTY1NTM1NzEiPiJCb3NocWEgc296bGFtYWxhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9kb25lIiBtc2dpZD0iNTI3OTQyNjA0NzI3MzkzMDE3NSI+IlRheXlvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9ub25lIiBtc2dpZD0iMjEyMTk1NzkyNjA0MDU0MzE0OCI+Ik9kYXRpeSByYW5nbGFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+IlFvcmFtdGlyIHJhbmdsYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+IkZveWRhbGFudXZjaGkgcmFuZ2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiJOb21h4oCZbHVtIHJhbmdsYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4iUmFuZyBzb3psYW1hbGFyaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+IlRlemtvciBzb3psYW1hbGFyIHBhbmVsaW5pIGtv4oCYcnNhdGlzaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4iRm95ZGFsYW51dmNoaSBzb3psYW1hbGFyaW5pIHlvcWlzaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+IlFv4oCYbGxhc2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfdGl0bGUiIG1zZ2lkPSI0NzQ2NjY2NTQ1NDgwNTM0NjYzIj4iU296bGFtYWxhcm5pIHRhc2RpcWxhbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfbWVzc2FnZSIgbXNnaWQ9IjkxMTYwMDEwNjkzOTc5OTY2OTEiPiJCYeKAmXppIHJhbmcgc296bGFtYWxhcmkgcXVyaWxtYWRhbiBmb3lkYWxhbmlzaG5pIHFpeWlubGFzaHRpcmlzaCBtdW1raW4uIFRhbmxnYW4gcGFyYW1ldHJsYXJuaSB0YXNkaXFsYXNoIHVjaHVuIOKAnE9L4oCdIHR1Z21hc2luaSBib3NpbmcuIEFrcyBob2xkYSwgdWxhciAxMCBzb25peWFkYW4gc2/igJhuZyBxYXl0YSB0aWtsYW5hZGkuIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXZpL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy12aS9zdHJpbmdzLnhtbAppbmRleCA0ZDA4MDAwLi5mYTgzNWJhIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXZpL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtdmkvc3RyaW5ncy54bWwKQEAgLTMwMSw4ICszMDEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+InTDrG0ga2nhur9tIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sYXVuY2hfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjI5NjkyODc4MzgxMjA1NTA1MDYiPiJLaMO0bmcgdGjhu4Mga2jhu59pIMSR4buZbmcgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2hvd19oaXN0b3J5X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjcwNjIwODgxOTY0NDk3NDcyNDUiPiJUaMOqbSI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciByZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0ICg2MzM3MTU1NjA4MDU1MDYyNDI5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCIgbXNnaWQ9IjYzMzcxNTU2MDgwNTUwNjI0MjkiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gdMOhYyB24bulIGtow6FjIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiJQaMOibiB0w6FjaCBuZ2FuZyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X3ZlcnRpY2FsIiBtc2dpZD0iOTA3NTI5MjIzMzY5NjE4MDgxMyI+IlBow6JuIHTDoWNoIGThu41jIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfY3VzdG9tIiBtc2dpZD0iNDE3NzgzNzU5NzUxMzcwMTk0MyI+IlTDuXkgY2jhu4luaCBwaMOibiB0w6FjaCI8L3N0cmluZz4KQEAgLTM2NSw3ICszNjQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzc5MTg3MjY3NTA5NTU4NTkiPiJUcsOsbmggdGnhur90IGtp4buHbSBwaW4gxJFhbmcgYuG6rXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iODIwMzE4Nzg4MTI2NjcyNjkyIj4iR2nhuqNtIGhp4buHdSBzdeG6pXQgdsOgIGThu68gbGnhu4d1IG7hu4FuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiJU4bqvdCB0csOsbmggdGnhur90IGtp4buHbSBwaW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4iTuG7mWkgZHVuZyBi4buLIOG6qW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+Ijx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4gc+G6vSBi4bqvdCDEkeG6p3UgY2jhu6VwIG3hu41pIHRo4bupIGhp4buDbiB0aOG7iyB0csOqbiBtw6BuIGjDrG5oLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fcmVtZW1iZXJfdGV4dCIgbXNnaWQ9IjMxMDM1MTA4ODIxNzI3NDY3NTIiPiJLaMO0bmcgaGnhu4NuIHRo4buLIGzhuqFpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+IljDs2EgdOG6pXQgY+G6oyI8L3N0cmluZz4KQEAgLTQ1MCw0ICs0NDgsMjggQEAKICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfdGl0bGUiIG1zZ2lkPSI1MDI3MDM3NzA2NTAwNjM1MjY5Ij4iQuG6rXQgQmx1ZXRvb3RoPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiLEkOG7gyBr4bq/dCBu4buRaSBiw6BuIHBow61tIHbhu5tpIG3DoXkgdMOtbmggYuG6o25nLCB0csaw4bubYyB0acOqbiwgYuG6oW4gcGjhuqNpIGLhuq10IEJsdWV0b290aC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiJC4bqtdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX3RvcGljIiBtc2dpZD0iMzY0MTQwMzQ4OTMxODY1OTY2NiI+IsOBcCBk4bulbmcgY2hvIHRow7RuZyBiw6FvIDx4bGlmZjpnIGlkPSJUT1BJQ19OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+IsOBcCBk4bulbmcgY2hvIHThuqV0IGPhuqMgdGjDtG5nIGLDoW8gdOG7qyDhu6luZyBk4bulbmcgbsOgeSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfaW1wb3J0YW5jZSIgbXNnaWQ9IjUxOTg1Nzg5ODg5NzgyMzQxNjEiPiJC4buLIGNo4bq3biI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbXBvcnRhbmNlIiBtc2dpZD0iNDEwOTkyOTk4NjEwNzE0NzkzMCI+IlThuqdtIHF1YW4gdHLhu41uZyB0aOG6pXAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4iVOG6p20gcXVhbiB0cuG7jW5nIGLDrG5oIHRoxrDhu51uZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiJU4bqnbSBxdWFuIHRy4buNbmcgY2FvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4iVOG6p20gcXVhbiB0cuG7jW5nIGto4bqpbiBj4bqlcCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4iS2jDtG5nIGJhbyBnaeG7nSBoaeG7g24gdGjhu4sgY8OhYyB0aMO0bmcgYsOhbyBuw6B5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+Ikhp4buDbiB0aOG7iyBpbSBs4bq3bmcg4bufIGN14buRaSBkYW5oIHPDoWNoIHRow7RuZyBiw6FvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9IjQ5MjY1Mjk2MTU5MjA2MTA4MTciPiJIaeG7g24gdGjhu4sgaW0gbOG6t25nIGPDoWMgdGjDtG5nIGLDoW8gbsOgeSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4iSGnhu4NuIHRo4buLIOG7nyDEkeG6p3UgZGFuaCBzw6FjaCB0aMO0bmcgYsOhbyB2w6AgcGjDoXQgcmEgw6JtIHRoYW5oIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iNTIzNjk4NzE3MTkwNDc1NjEzNCI+Ikhp4buDbiB0aOG7iyB0csOqbiBtw6BuIGjDrG5oIHbDoCBwaMOhdCByYSDDom0gdGhhbmgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+IkPDoGkgxJHhurd0IGtow6FjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4iWG9uZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9ub25lIiBtc2dpZD0iMjEyMTk1NzkyNjA0MDU0MzE0OCI+Ik3DoHUgdGjDtG5nIHRoxrDhu51uZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9uaWdodCIgbXNnaWQ9IjU5NDM4MTc2MjIxMDUzMDcwNzIiPiJNw6B1IHThu5FpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X2N1c3RvbSIgbXNnaWQ9IjM2NTU1NzY0OTIzMjIyOTg3MTMiPiJNw6B1IHTDuXkgY2jhu4luaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF91bmtub3duIiBtc2dpZD0iMjcwOTIwMjEwNDI1NjI2NTEwNyI+Ik3DoHUga2jDtG5nIHjDoWMgxJHhu4tuaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3RyYW5zZm9ybSIgbXNnaWQ9IjY5ODU0NjA0MDgwNzkwODYwOTAiPiJT4butYSDEkeG7lWkgbcOgdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+Ikhp4buDbiB0aOG7iyDDtCBDw6BpIMSR4bq3dCBuaGFuaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4iQuG6rXQgY2h1eeG7g24gxJHhu5VpIHTDuXkgY2jhu4luaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+IsOBcCBk4bulbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfdGl0bGUiIG1zZ2lkPSI0NzQ2NjY2NTQ1NDgwNTM0NjYzIj4iWMOhYyBuaOG6rW4gY8OgaSDEkeG6t3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfbWVzc2FnZSIgbXNnaWQ9IjkxMTYwMDEwNjkzOTc5OTY2OTEiPiJN4buZdCBz4buRIGPDoGkgxJHhurd0IG3DoHUgY8OzIHRo4buDIGtoaeG6v24gdGhp4bq/dCBi4buLIG7DoHkga2jDtG5nIHPhu60gZOG7pW5nIMSRxrDhu6NjLiBIw6N5IG5o4bqlcCB2w6BvIE9LIMSR4buDIHjDoWMgbmjhuq1uIGPDoWMgY8OgaSDEkeG6t3QgbcOgdSBuw6B5LCBu4bq/dSBraMO0bmcgbmjhu69uZyBjw6BpIMSR4bq3dCBuw6B5IHPhur0gxJHGsOG7o2MgxJHhurd0IGzhuqFpIHNhdSAxMCBnacOieS4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtemgtckNOL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy16aC1yQ04vc3RyaW5ncy54bWwKaW5kZXggZTMwMzIwZC4uYmI4ZjRhZCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy16aC1yQ04vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy16aC1yQ04vc3RyaW5ncy54bWwKQEAgLTMwMSw4ICszMDEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+IuaQnOe0oiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4i5peg5rOV5ZCv5YqoPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zaG93X2hpc3RvcnlfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNzA2MjA4ODE5NjQ0OTc0NzI0NSI+IuabtOWkmiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciByZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0ICg2MzM3MTU1NjA4MDU1MDYyNDI5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCIgbXNnaWQ9IjYzMzcxNTU2MDgwNTUwNjI0MjkiPiLov5jmnIkgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOmhuSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2hvcml6b250YWwiIG1zZ2lkPSI4ODQ4NTE0NDc0NTQzNDI3MzMyIj4i5rC05bmz5YiG5YmyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfdmVydGljYWwiIG1zZ2lkPSI5MDc1MjkyMjMzNjk2MTgwODEzIj4i5Z6C55u05YiG5YmyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfY3VzdG9tIiBtc2dpZD0iNDE3NzgzNzU5NzUxMzcwMTk0MyI+IuiHquWumuS5ieWIhuWJsiI8L3N0cmluZz4KQEAgLTM2NSw3ICszNjQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzc5MTg3MjY3NTA5NTU4NTkiPiLoioLnlLXliqnmiYvlt7LlvIDlkK8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iODIwMzE4Nzg4MTI2NjcyNjkyIj4i6ZmN5L2O5oCn6IO95bm26ZmQ5Yi25ZCO5Y+w5rWB6YePIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiLlhbPpl63oioLnlLXliqnmiYsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4i5YaF5a655bey6ZqQ6JePIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiI8eGxpZmY6ZyBpZD0iQVBQX1NFRUtJTkdfUEVSTUlTU0lPTiI+JXM8L3hsaWZmOmc+5bCG5byA5aeL5oiq5Y+W5oKo55qE5bGP5bmV5LiK5pi+56S655qE5omA5pyJ5YaF5a6544CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+IuS4jeWGjeaYvuekuiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNsZWFyX2FsbF9ub3RpZmljYXRpb25zX3RleHQiIG1zZ2lkPSI4MTQxOTI4ODk3NzE0NjI4MjgiPiLlhajpg6jmuIXpmaQiPC9zdHJpbmc+CkBAIC00MTUsNyArNDEzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InN5c3RlbV91aV90dW5lciIgbXNnaWQ9IjcwODIyNDEyNzM5MjQ1MjAxOCI+Iuezu+e7n+eVjOmdouiwg+iwkOWZqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNob3dfYmF0dGVyeV9wZXJjZW50YWdlIiBtc2dpZD0iNTQ0NDEzNjYwMDUxMjk2ODc5OCI+IuW1jOWFpeW8j+aYvuekuueUteaxoOeUtemHj+eZvuWIhuavlCDmmL7npLrltYzlhaXnmoTnlLXmsaDnlLXph4/nmb7liIbmr5QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaG93X2JhdHRlcnlfcGVyY2VudGFnZV9zdW1tYXJ5IiBtc2dpZD0iMzIxNTAyNTc3NTU3Njc4NjAzNyI+IuacquWFheeUteaXtuWcqOeKtuaAgeagj+Wbvuagh+WGheaYvuekuueUteaxoOeUtemHj+eZvuWIhuavlCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzIiBtc2dpZD0iMTAwNDI5OTgxOTE3MjU0MjgiPiLlv6vpgJ/orr7nva4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5ncyIgbXNnaWQ9IjEwMDQyOTk4MTkxNzI1NDI4Ij4i5b+r5o236K6+572uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2JhciIgbXNnaWQ9IjQ4Nzc2NDU0NzY5NTkzMjQ3NjAiPiLnirbmgIHmoI8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJvdmVydmlldyIgbXNnaWQ9IjQwMTg2MDIwMTM4OTU5MjY5NTYiPiLmpoLop4giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZW1vX21vZGUiIG1zZ2lkPSIyMzg5MTYzMDE4NTMzNTE0NjE5Ij4i5ryU56S65qih5byPIjwvc3RyaW5nPgpAQCAtNDMxLDcgKzQyOSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJ6ZW5fYWxhcm1fd2FybmluZyIgbXNnaWQ9IjQ0NDUzMzExOTU4MjI0NDI5MyI+IuaCqOWcqDx4bGlmZjpnIGlkPSJXSEVOIj4lMSRzPC94bGlmZjpnPuWwhuS4jeS8muWQrOWIsOS4i+asoemXuemSn+WTjemTgyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFsYXJtX3RlbXBsYXRlIiBtc2dpZD0iMzk4MDA2MzQwOTM1MDUyMjczNSI+Ijx4bGlmZjpnIGlkPSJXSEVOIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFsYXJtX3RlbXBsYXRlX2ZhciIgbXNnaWQ9IjQyNDIxNzk5ODI1ODY3MTQ4MTAiPiI8eGxpZmY6ZyBpZD0iV0hFTiI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2RldGFpbCIgbXNnaWQ9IjI1NzkzNjkwOTE2NzI5MDIxMDEiPiLlv6vpgJ/orr7nva7vvIw8eGxpZmY6ZyBpZD0iVElUTEUiPiVzPC94bGlmZjpnPuOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfZGV0YWlsIiBtc2dpZD0iMjU3OTM2OTA5MTY3MjkwMjEwMSI+IuW/q+aNt+iuvue9ru+8jDx4bGlmZjpnIGlkPSJUSVRMRSI+JXM8L3hsaWZmOmc+44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zdGF0dXNfYmFyX2hvdHNwb3QiIG1zZ2lkPSI0MDk5MzgxMzI5OTU2NDAyODY1Ij4i54Ot54K5Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9tYW5hZ2VkX3Byb2ZpbGUiIG1zZ2lkPSI2NjEzNjQxMzYzMTEyNTg0MTIwIj4i5bel5L2c6LWE5paZIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idHVuZXJfd2FybmluZ190aXRsZSIgbXNnaWQ9IjcwOTQ2ODk5MzA3OTMwMzE2ODIiPiLmmK/lkKbmnInotqPlrozlhajlj5blhrPkuo7kuKrkurrmhJ/op4kiPC9zdHJpbmc+CkBAIC00NDQsMTAgKzQ0MiwzNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHlfbm90X2ZvdW5kIiBtc2dpZD0iMzQ4NDIzMjQ0MzI3Nzk5OTc0Ij4i5oKo55qE6K6+5aSH5Lit5pyq5a6J6KOF5q2k5bqU55SoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xvY2tfc2Vjb25kcyIgbXNnaWQ9Ijc2ODk1NTQxNDc1NzkxNzk1MDciPiLmmL7npLrml7bpkp/nmoTnp5LmlbAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbG9ja19zZWNvbmRzX2Rlc2MiIG1zZ2lkPSI2MjgyNjkzMDY3MTMwNDcwNjc1Ij4i5Zyo54q25oCB5qCP5Lit5pi+56S65pe26ZKf55qE56eS5pWw44CC6L+Z5Y+v6IO95Lya5b2x5ZON55S15rGg55qE57ut6Iiq5pe26Ze044CCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXNfcmVhcnJhbmdlIiBtc2dpZD0iODA2MDkxODY5NzU1MTA2ODc2NSI+IumHjeaWsOaOkuWIl+W/q+mAn+iuvue9riI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNob3dfYnJpZ2h0bmVzcyIgbXNnaWQ9IjY2MTM5MzA4NDI4MDU5NDI1MTkiPiLlnKjlv6vpgJ/orr7nva7kuK3mmL7npLrkuq7luqbmoI8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxc19yZWFycmFuZ2UiIG1zZ2lkPSI4MDYwOTE4Njk3NTUxMDY4NzY1Ij4i6YeN5paw5o6S5YiX5b+r5o236K6+572uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hvd19icmlnaHRuZXNzIiBtc2dpZD0iNjYxMzkzMDg0MjgwNTk0MjUxOSI+IuWcqOW/q+aNt+iuvue9ruS4reaYvuekuuS6ruW6puagjyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImV4cGVyaW1lbnRhbCIgbXNnaWQ9IjYxOTgxODIzMTU1MzY3MjYxNjIiPiLlrp7pqozmgKciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+IuimgeW8gOWQr+iTneeJmeWQl++8nyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiLopoHlsIbmgqjnmoTplK7nm5jov57mjqXliLDlubPmnb/nlLXohJHvvIzmgqjlv4XpobvlhYjlvIDlkK/ok53niZnjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiLlvIDlkK8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiLlupTnlKjkuo48eGxpZmY6ZyBpZD0iVE9QSUNfTkFNRSI+JTEkczwveGxpZmY6Zz7pgJrnn6UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b19hcHAiIG1zZ2lkPSIzNjMwMTY3ODM5Mzk4MTU5NjAiPiLlupTnlKjkuo7mnaXoh6rmraTlupTnlKjnmoTmiYDmnInpgJrnn6UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX2ltcG9ydGFuY2UiIG1zZ2lkPSI1MTk4NTc4OTg4OTc4MjM0MTYxIj4i5bGP6JS9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4i6YeN6KaB5oCn77ya5L2OIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9pbXBvcnRhbmNlIiBtc2dpZD0iODE5MjEwNzY4OTk5NTc0MjY1MyI+IumHjeimgeaAp++8muS4gOiIrCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiLph43opoHmgKfvvJrpq5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfaW1wb3J0YW5jZSIgbXNnaWQ9IjUwODkwMDU4NzI3MTk1NjM4OTQiPiLph43opoHmgKfvvJrntKfmgKUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iMjM5NzE5MjY0MjY1Nzg3Mjg3MiI+IuS4gOW+i+S4jeaYvuekuui/meS6m+mAmuefpSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjQzODM1NjMyNjczNzA4NTk3MjUiPiLlnKjpgJrnn6XliJfooajlupXpg6jmmL7npLrvvIzkvYbkuI3lj5Hlh7rmj5DnpLrpn7MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+IuaYvuekuui/meS6m+mAmuefpe+8jOS9huS4jeWPkeWHuuaPkOekuumfsyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4i5Zyo6YCa55+l5YiX6KGo6aG26YOo5pi+56S677yM5bm25Y+R5Ye65o+Q56S66Z+zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iNTIzNjk4NzE3MTkwNDc1NjEzNCI+IuWcqOWxj+W5leS4iuaMgee7reaYvuekuu+8jOW5tuWPkeWHuuaPkOekuumfsyI8L3N0cmluZz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyAoODE2MzA2MjgzMzk2NTUzNTcxKSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG5vdGlmaWNhdGlvbl9kb25lICg1Mjc5NDI2MDQ3MjczOTMwMTc1KSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25vbmUiIG1zZ2lkPSIyMTIxOTU3OTI2MDQwNTQzMTQ4Ij4i5bi46KeE6aKc6ImyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+IuWknOmXtOminOiJsiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4i6Ieq5a6a5LmJ6aKc6ImyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4i5pyq55+l6aKc6ImyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+IuminOiJsuS/ruaUuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+IuaYvuekuuKAnOW/q+aNt+iuvue9ruKAneWbvuWdlyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4i5ZCv55So6Ieq5a6a5LmJ6L2s5o2iIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4i5bqU55SoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+IuehruiupOiuvue9riI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+IumDqOWIhuminOiJsuiuvue9ruWPr+iDveS8muWvvOiHtOatpOiuvuWkh+aXoOazleS9v+eUqOOAguivt+eCueWHu+KAnOehruWumuKAneehruiupOi/meS6m+minOiJsuiuvue9ru+8jOWQpuWIme+8jOezu+e7n+WwhuWcqCAxMCDnp5LlkI7ph43nva7ov5nkupvorr7nva7jgIIiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtemgtckhLL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy16aC1ySEsvc3RyaW5ncy54bWwKaW5kZXggOTQ1NDhiYS4uMDc4MjM1NCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy16aC1ySEsvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy16aC1ySEsvc3RyaW5ncy54bWwKQEAgLTMwMSw4ICszMDEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+IuaQnOWwiyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4i54Sh5rOV5ZWf5YuV44CMPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+44CN44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zaG93X2hpc3RvcnlfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNzA2MjA4ODE5NjQ0OTc0NzI0NSI+IuabtOWkmiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciByZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0ICg2MzM3MTU1NjA4MDU1MDYyNDI5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCIgbXNnaWQ9IjYzMzcxNTU2MDgwNTUwNjI0MjkiPiLpgoTmnIkgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOmghSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2hvcml6b250YWwiIG1zZ2lkPSI4ODQ4NTE0NDc0NTQzNDI3MzMyIj4i5rC05bmz5YiG5YmyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfdmVydGljYWwiIG1zZ2lkPSI5MDc1MjkyMjMzNjk2MTgwODEzIj4i5Z6C55u05YiG5YmyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfY3VzdG9tIiBtc2dpZD0iNDE3NzgzNzU5NzUxMzcwMTk0MyI+IuiHquioguWIhuWJsiI8L3N0cmluZz4KQEAgLTM2NSw3ICszNjQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzc5MTg3MjY3NTA5NTU4NTkiPiLnnIHpm7vmqKHlvI/lt7LplovllZ8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iODIwMzE4Nzg4MTI2NjcyNjkyIj4i6ZmN5L2O5pWI6IO95Lim6ZmQ5Yi26IOM5pmv5pW45pOa5YKz6Ly4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiLpl5zplonnnIHpm7vmqKHlvI8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4i5YWn5a655bey6Zqx6JePIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiI8eGxpZmY6ZyBpZD0iQVBQX1NFRUtJTkdfUEVSTUlTU0lPTiI+JXM8L3hsaWZmOmc+IOWwh+mWi+Wni+aTt+WPluaCqOeahOieouW5leS4iumhr+ekuueahOWFp+WuueOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fcmVtZW1iZXJfdGV4dCIgbXNnaWQ9IjMxMDM1MTA4ODIxNzI3NDY3NTIiPiLkuI3nlKjlho3poa/npLoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4i5YWo6YOo5riF6ZmkIjwvc3RyaW5nPgpAQCAtNDUwLDQgKzQ0OCwyOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiLopoHplovllZ/ol43niZnll47vvJ8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX21lc3NhZ2UiIG1zZ2lkPSI5MTA2NTk1OTkwNzA4OTg1Mzg1Ij4i5aaC6KaB5bCH6Y2155uk6YCj5o6l6Iez5bmz5p2/6Zu76IWm77yM6KuL5YWI6ZaL5ZWf6JeN54mZ44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9jb25maXJtYXRpb25fb2siIG1zZ2lkPSI2MjU4MDc0MjUwOTQ4MzA5NzE1Ij4i6ZaL5ZWfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4i5aWX55So5Yiw44CMPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+44CN6YCa55+lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4i5aWX55So5Yiw5q2k5oeJ55So56iL5byP55qE5omA5pyJ6YCa55+lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IuW3suWwgemOliI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbXBvcnRhbmNlIiBtc2dpZD0iNDEwOTkyOTk4NjEwNzE0NzkzMCI+IuS9jumHjeimgeaApyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiLkuIDoiKzph43opoHmgKciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoaWdoX2ltcG9ydGFuY2UiIG1zZ2lkPSIxNTI3MDY2MTk1NjE0MDUwMjYzIj4i6auY6YeN6KaB5oCnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4i57eK5oCl6YeN6KaB5oCnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjIzOTcxOTI2NDI2NTc4NzI4NzIiPiLmsLjkuI3poa/npLrpgJnkupvpgJrnn6UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4i6aGv56S65Zyo6YCa55+l5riF5Zau5bqV6YOo5L2G5LiN55m85Ye66Z+z5pWIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9IjQ5MjY1Mjk2MTU5MjA2MTA4MTciPiLpoa/npLrpgJnkupvpgJrnn6XkvYbkuI3nmbzlh7rpn7PmlYgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+Iumhr+ekuuWcqOmAmuefpea4heWWrumggumDqOS4pueZvOWHuumfs+aViCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjUyMzY5ODcxNzE5MDQ3NTYxMzQiPiLkuI3mmYLmlrzonqLluZXlh7rnj77kuKbnmbzlh7rpn7PmlYgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+IuabtOWkmuioreWumiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9kb25lIiBtc2dpZD0iNTI3OTQyNjA0NzI3MzkzMDE3NSI+IuWujOaIkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9ub25lIiBtc2dpZD0iMjEyMTk1NzkyNjA0MDU0MzE0OCI+IuS4gOiIrOiJsuezuyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9uaWdodCIgbXNnaWQ9IjU5NDM4MTc2MjIxMDUzMDcwNzIiPiLmt7HmsonoibLns7siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+IuiHquiogumhj+iJsiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF91bmtub3duIiBtc2dpZD0iMjcwOTIwMjEwNDI1NjI2NTEwNyI+IuS4jeaYjuiJsuezuyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3RyYW5zZm9ybSIgbXNnaWQ9IjY5ODU0NjA0MDgwNzkwODYwOTAiPiLpoY/oibLkv67mlLkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfc2hvd19xcyIgbXNnaWQ9IjE3NjMyNDQzNTQzOTkyNzY2NzkiPiLpoa/npLrjgIzlv6vpgJ/oqK3lrprjgI3lnJbloYoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9lbmFibGVfY3VzdG9tIiBtc2dpZD0iNjcyOTAwMTMwODIxNzM0NzUwMSI+IuWVn+eUqOiHquioguiuiuiJsuWKn+iDvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+IuWll+eUqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiLnorroqo3oqK3lrpoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfbWVzc2FnZSIgbXNnaWQ9IjkxMTYwMDEwNjkzOTc5OTY2OTEiPiLpg6jliIbpoY/oibLoqK3lrprmnIPku6TmraToo53nva7nhKHms5Xkvb/nlKjjgILoq4vmjInkuIDkuIsgW+eiuuWuml0g5Yqg5Lul56K66KqN77yM5ZCm5YmH6YCZ5Lqb6aGP6Imy6Kit5a6a5bCH5pa8IDEwIOenkuW+jOmHjeioreOAgiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy16aC1yVFcvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXpoLXJUVy9zdHJpbmdzLnhtbAppbmRleCBjNDAzNWUxLi4yOTUyMGY2IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXpoLXJUVy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXpoLXJUVy9zdHJpbmdzLnhtbApAQCAtMzAxLDggKzMwMSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4i5pCc5bCLIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sYXVuY2hfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjI5NjkyODc4MzgxMjA1NTA1MDYiPiLnhKHms5XllZ/li5XjgIw8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz7jgI3jgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4i5pu05aSaIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQgKDYzMzcxNTU2MDgwNTUwNjI0MjkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+IumChOaciSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g6aCFIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiLmsLTlubPliIblibIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF92ZXJ0aWNhbCIgbXNnaWQ9IjkwNzUyOTIyMzM2OTYxODA4MTMiPiLlnoLnm7TliIblibIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4i6Ieq6KiC5YiG5YmyIjwvc3RyaW5nPgpAQCAtMzY1LDcgKzM2NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+IuevgOe0hOiAl+mbu+mHj+aooeW8j+W3suWVn+eUqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiLpmY3kvY7mlYjog73kuKbpmZDliLbog4zmma/mlbjmk5rlgrPovLgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl9hY3Rpb25fdGV4dCIgbXNnaWQ9IjEwOTE1ODY1ODIzODExMDM4MiI+IumXnOmWieevgOe0hOiAl+mbu+mHj+aooeW8jyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLlhaflrrnlt7LpmrHol48iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+Ijx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4g5bCH6ZaL5aeL5pO35Y+W5oKo55qE6J6i5bmV5LiK6aGv56S655qE5YWn5a6544CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+IuS4jeimgeWGjemhr+ekuiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNsZWFyX2FsbF9ub3RpZmljYXRpb25zX3RleHQiIG1zZ2lkPSI4MTQxOTI4ODk3NzE0NjI4MjgiPiLlhajpg6jmuIXpmaQiPC9zdHJpbmc+CkBAIC00NTAsNCArNDQ4LDI4IEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+IuimgemWi+WVn+iXjeeJmeWKn+iDveWXju+8nyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiLlpoLopoHlsIfpjbXnm6TpgKPnt5rliLDlubPmnb/pm7vohabvvIzmgqjlv4XpoIjlhYjplovllZ/ol43niZnjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiLplovllZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiLlpZfnlKjliLDjgIw8eGxpZmY6ZyBpZD0iVE9QSUNfTkFNRSI+JTEkczwveGxpZmY6Zz7jgI3pgJrnn6UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b19hcHAiIG1zZ2lkPSIzNjMwMTY3ODM5Mzk4MTU5NjAiPiLlpZfnlKjliLDpgJnlgIvmh4nnlKjnqIvlvI/nmoTmiYDmnInpgJrnn6UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX2ltcG9ydGFuY2UiIG1zZ2lkPSI1MTk4NTc4OTg4OTc4MjM0MTYxIj4i5bCB6Y6WIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4i5L2O6YeN6KaB5oCnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9pbXBvcnRhbmNlIiBtc2dpZD0iODE5MjEwNzY4OTk5NTc0MjY1MyI+IuS4gOiIrOmHjeimgeaApyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiLpq5jph43opoHmgKciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfaW1wb3J0YW5jZSIgbXNnaWQ9IjUwODkwMDU4NzI3MTk1NjM4OTQiPiLnt4rmgKXph43opoHmgKciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iMjM5NzE5MjY0MjY1Nzg3Mjg3MiI+IuS4gOW+i+S4jemhr+ekuumAmeS6m+mAmuefpSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjQzODM1NjMyNjczNzA4NTk3MjUiPiLpoa/npLrlnKjpgJrnn6XmuIXllq7lupXpg6jkuJTkuI3nmbzlh7rku7vkvZXpn7PmlYgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+Iumhr+ekuumAmeS6m+mAmuefpeS4lOS4jeeZvOWHuuS7u+S9lemfs+aViCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4i6aGv56S65Zyo6YCa55+l5riF5Zau6aCC56uv5Lim55m85Ye66Z+z5pWIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iNTIzNjk4NzE3MTkwNDc1NjEzNCI+Iuefreaaq+mhr+ekuuWcqOieouW5leS4iuS4pueZvOWHuumfs+aViCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9tb3JlX3NldHRpbmdzIiBtc2dpZD0iODE2MzA2MjgzMzk2NTUzNTcxIj4i5pu05aSa6Kit5a6aIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4i5a6M5oiQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25vbmUiIG1zZ2lkPSIyMTIxOTU3OTI2MDQwNTQzMTQ4Ij4i5LiA6Iis6aGP6ImyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+IuWknOmWk+mhj+iJsiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4i6Ieq6KiC6aGP6ImyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4i5LiN5piO6aGP6ImyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+Iumhj+iJsuS/ruaUuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+Iumhr+ekuuW/q+mAn+ioreWumuWcluWhiiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4i5ZWf55So6Ieq6KiC6aGP6Imy6K6K5o+bIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4i5aWX55SoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+IueiuuiqjeioreWumiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+IumDqOWIhumhj+iJsuioreWumuWPr+iDveacg+mAoOaIkOmAmemDqOijnee9rueEoeazleS9v+eUqOOAguiri+aMieS4gOS4iyBb56K65a6aXSDkvobnorroqo3mgqjopoHkvb/nlKjpgJnpoZ7poY/oibLoqK3lrprvvIzlkKbliYfns7vntbHlsIflnKggMTAg56eS5b6M6YeN6Kit6YCZ5Lqb6Kit5a6a44CCIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXp1L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy16dS9zdHJpbmdzLnhtbAppbmRleCA4N2I2YWFmLi4zZWU0NmVhIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXp1L3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtenUvc3RyaW5ncy54bWwKQEAgLTMwMSw4ICszMDEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+InNlc2hhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sYXVuY2hfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjI5NjkyODc4MzgxMjA1NTA1MDYiPiJBeWlrd2F6YW5nYSB1a3VxYWxhIGktPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2hvd19oaXN0b3J5X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjcwNjIwODgxOTY0NDk3NDcyNDUiPiJPa3VuaW5naSI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciByZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0ICg2MzM3MTU1NjA4MDU1MDYyNDI5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCIgbXNnaWQ9IjYzMzcxNTU2MDgwNTUwNjI0MjkiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gT2t1bmluZ2kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9ob3Jpem9udGFsIiBtc2dpZD0iODg0ODUxNDQ3NDU0MzQyNzMzMiI+IkhsdWthbmlzYSBva3V2dW5kbGlsZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X3ZlcnRpY2FsIiBtc2dpZD0iOTA3NTI5MjIzMzY5NjE4MDgxMyI+IkhsdWthbmlzYSBva3VtaWxlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfY3VzdG9tIiBtc2dpZD0iNDE3NzgzNzU5NzUxMzcwMTk0MyI+IkhsdWthbmlzYSBrd2V6aWZpc28iPC9zdHJpbmc+CkBAIC0zNjUsNyArMzY0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjM3OTE4NzI2NzUwOTU1ODU5Ij4iSXNpbG9uZG9sb3ppIHNlYmhldGhyaSBzaXZ1bGl3ZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiJTZWhsaXNhIHVrdXNlYmVuemEgbmVkYXRoYSB5YXNlbXV2YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4iVmFsYSBpc2lsb25kb2xvemkgc2ViaGV0aHJpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+Ik9rdXF1a2V0aHdlIGt1ZmlobGl3ZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fZGlhbG9nX3RleHQiIG1zZ2lkPSIzMDcxNDMxMDI1NDQ4MjE4OTI4Ij4iPHhsaWZmOmcgaWQ9IkFQUF9TRUVLSU5HX1BFUk1JU1NJT04iPiVzPC94bGlmZjpnPiBpem9xYWxhIHVrdXRod2VidWxhIHlvbmtlIGludG8gZWJvbmlzd2Ega3VzaWtyaW5pIHNha2hvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fcmVtZW1iZXJfdGV4dCIgbXNnaWQ9IjMxMDM1MTA4ODIxNzI3NDY3NTIiPiJVbmdhYm9uaXNpIGZ1dGhpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+IlN1bGEga29ua2UiPC9zdHJpbmc+CkBAIC00NTAsNCArNDQ4LDI4IEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+IlZ1bGEgaS1CbHVldG9vdGg/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9tZXNzYWdlIiBtc2dpZD0iOTEwNjU5NTk5MDcwODk4NTM4NSI+IlVrdXplIHV4aHVtZSBpa2hpYmhvZGkgeWFraG8gbmV0aGViaHVsZXRoaSB5YWtobywga3VmYW5lbGUgdXFhbGUgbmdva3V2dWxhIGktQmx1ZXRvb3RoLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+IlZ1bGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiJTZWJlbnppc2Ega3V6YXppc28gemUtPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4iU2ViZW56aXNhIGt1em8gem9ua2UgaXphemlzbyBleml2ZWxhIGt1bG9sdSBobGVsbyBsb2t1c2ViZW56YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfaW1wb3J0YW5jZSIgbXNnaWQ9IjUxOTg1Nzg5ODg5NzgyMzQxNjEiPiJLdXZpbmplbHdlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4iVWt1YmFsdWxla2Egb2t1cGhhbnNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9pbXBvcnRhbmNlIiBtc2dpZD0iODE5MjEwNzY4OTk5NTc0MjY1MyI+IlVrdWJhbHVsZWthIG9rdWp3YXllbGVraWxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+IlVrdWJhbHVsZWthIG9rdXBoZXp1bHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfaW1wb3J0YW5jZSIgbXNnaWQ9IjUwODkwMDU4NzI3MTk1NjM4OTQiPiJVa3ViYWx1bGVrYSBva3VzaGVzaGF5byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4iVW5nYWxva290aGkgdWJvbmlzZSBsZXppIHphemlzbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjQzODM1NjMyNjczNzA4NTk3MjUiPiJCb25pc2Egbmdva3V0aHVsaWxlIG5nYXBoYW5zaSBrb2hsdSBsd2VzYXppc28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+IkJvbmlzYSBuZ29rdXRodWxpbGUgbGV6aSB6YXppc28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+IkJvbmlzYSBuZ2FwaGV6dWx1IGtvaGx1IGx3ZXphemlzbyB1cGhpbmRlIHdlbnplIHVtc2luZG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4iQmhla2Ega3VzaWtyaW5pIHVwaGluZGUgd2VuemUgdW1zaW5kbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9tb3JlX3NldHRpbmdzIiBtc2dpZD0iODE2MzA2MjgzMzk2NTUzNTcxIj4iSXppbHVuZ2lzZWxlbG8gZXppbmluZ2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiJLd2Vueml3ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9ub25lIiBtc2dpZD0iMjEyMTk1NzkyNjA0MDU0MzE0OCI+IkltaWJhbGEgZWp3YXllbGVraWxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+IkltaWJhbGEgeWFzZWJ1c3VrdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4iSW1pYmFsYSB5YW5nb2t3ZXppZmlzbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF91bmtub3duIiBtc2dpZD0iMjcwOTIwMjEwNDI1NjI2NTEwNyI+IkltaWJhbGEgZW5nYXppd2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4iVWt1bHVuZ2lzd2Ega29tYmFsYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+IkJvbmlzYSBpdGhheWlsaSBsZXppbHVuZ2lzZWxlbG8gZXppc2hlc2hheW8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9lbmFibGVfY3VzdG9tIiBtc2dpZD0iNjcyOTAwMTMwODIxNzM0NzUwMSI+Ik5pa2EgYW1hbmRsYSB1a3VndXF1bHdhIGt3YW5nb2t3ZXppZmlzbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+IlNlYmVuemlzYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiJRaW5pc2VraXNhIGl6aWx1bmdpc2VsZWxvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X21lc3NhZ2UiIG1zZ2lkPSI5MTE2MDAxMDY5Mzk3OTk2NjkxIj4iRXppbnllIGl6aWx1bmdpc2VsZWxvIHpvbWJhbGEgemluZ2VuemEgbGUgZGl2YXlpc2kgaW5nYXNlYmVuemlzZWtpLiBDaG9mb3phIGt1LUtVTFVOR0lMRSB1a3V6ZSB1cWluaXNla2lzZSBsZXppIHppbHVuZ2lzZWxlbG8gem9tYmFsYSwgdW1hIGt1bmdlbmphbG8gbGV6aSB6aWx1bmdpc2VsZWxvIHppem9zZXRod2Ega2FidXNoYSBuZ2VtdXZhIGt3YW1hc2VraG9uZGkgYW5ndS0xMC4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMvZGltZW5zLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMvZGltZW5zLnhtbAppbmRleCBmNzBmMzhiYS4uMDM1ZjU2NCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy9kaW1lbnMueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMvZGltZW5zLnhtbApAQCAtNDksMTEgKzQ5LDE0IEBACiAgICAgPGRpbWVuIG5hbWU9Im5vdGlmaWNhdGlvbl9tYXhfaGVhZHNfdXBfaGVpZ2h0X2xlZ2FjeSI+MTI4ZHA8L2RpbWVuPgogCiAgICAgPCEtLSBIZWlnaHQgb2YgYSBoZWFkcyB1cCBub3RpZmljYXRpb24gaW4gdGhlIHN0YXR1cyBiYXIgLS0+Ci0gICAgPGRpbWVuIG5hbWU9Im5vdGlmaWNhdGlvbl9tYXhfaGVhZHNfdXBfaGVpZ2h0Ij4xNDBkcDwvZGltZW4+CisgICAgPGRpbWVuIG5hbWU9Im5vdGlmaWNhdGlvbl9tYXhfaGVhZHNfdXBfaGVpZ2h0Ij4xNDFkcDwvZGltZW4+CiAKICAgICA8IS0tIEhlaWdodCBvZiBhIHRoZSBzdW1tYXJ5ICgibW9yZSBjYXJkIikgbm90aWZpY2F0aW9uIG9uIGtleWd1YXJkLiAtLT4KICAgICA8ZGltZW4gbmFtZT0ibm90aWZpY2F0aW9uX3N1bW1hcnlfaGVpZ2h0Ij40NGRwPC9kaW1lbj4KIAorICAgIDwhLS0gTWluaW11bSBsYXlvdXRlZCBoZWlnaHQgb2YgYSBub3RpZmljYXRpb24gaW4gdGhlIHN0YXR1c2Jhci0tPgorICAgIDxkaW1lbiBuYW1lPSJtaW5fbm90aWZpY2F0aW9uX2xheW91dF9oZWlnaHQiPjQ4ZHA8L2RpbWVuPgorCiAgICAgPCEtLSBzaXplIGF0IHdoaWNoIE5vdGlmaWNhdGlvbiBpY29ucyB3aWxsIGJlIGRyYXduIGluIHRoZSBzdGF0dXMgYmFyIC0tPgogICAgIDxkaW1lbiBuYW1lPSJzdGF0dXNfYmFyX2ljb25fZHJhd2luZ19zaXplIj4xN2RpcDwvZGltZW4+CiAKQEAgLTU4MCw5ICs1ODMsOSBAQAogICAgIDxkaW1lbiBuYW1lPSJxc19oZWFkZXJfbmVnX3BhZGRpbmciPi04ZHA8L2RpbWVuPgogCiAgICAgPCEtLSBIb3cgaGlnaCB3ZSBsaWZ0IHRoZSBkaXZpZGVyIHdoZW4gdG91Y2hpbmcgLS0+Ci0gICAgPGRpbWVuIG5hbWU9ImRvY2tlZF9zdGFja19kaXZpZGVyX2xpZnRfZWxldmF0aW9uIj42ZHA8L2RpbWVuPgorICAgIDxkaW1lbiBuYW1lPSJkb2NrZWRfc3RhY2tfZGl2aWRlcl9saWZ0X2VsZXZhdGlvbiI+NGRwPC9kaW1lbj4KIAotICAgIDxkaW1lbiBuYW1lPSJkb2NrZWRfZGl2aWRlcl9oYW5kbGVfd2lkdGgiPjI0ZHA8L2RpbWVuPgorICAgIDxkaW1lbiBuYW1lPSJkb2NrZWRfZGl2aWRlcl9oYW5kbGVfd2lkdGgiPjE2ZHA8L2RpbWVuPgogICAgIDxkaW1lbiBuYW1lPSJkb2NrZWRfZGl2aWRlcl9oYW5kbGVfaGVpZ2h0Ij4yZHA8L2RpbWVuPgogCiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCmluZGV4IGY3MWE3MWEuLjg3NmMyMWUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbApAQCAtOTA2LDkgKzkwNiw2IEBACiAgICAgPCEtLSBCYXR0ZXJ5IHNhdmVyIG5vdGlmaWNhdGlvbiBhY3Rpb24gdGV4dC4gW0NIQVIgTElNSVQ9NjBdIC0tPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiPlR1cm4gb2ZmIGJhdHRlcnkgc2F2ZXI8L3N0cmluZz4KIAotICAgIDwhLS0gVGV4dCBzaG93biBpbiBwbGFjZSBvZiBub3RpZmljYXRpb24gY29udGVudHMgd2hlbiB0aGUgbm90aWZpY2F0aW9uIGlzIGhpZGRlbiBvbiBhIHNlY3VyZSBsb2Nrc2NyZWVuIC0tPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0Ij5Db250ZW50cyBoaWRkZW48L3N0cmluZz4KLQogICAgIDwhLS0gTWVkaWEgcHJvamVjdGlvbiBwZXJtaXNzaW9uIGRpYWxvZyB3YXJuaW5nIHRleHQuIFtDSEFSIExJTUlUPU5PTkVdIC0tPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCI+PHhsaWZmOmcgaWQ9ImFwcF9zZWVraW5nX3Blcm1pc3Npb24iIGV4YW1wbGU9IkhhbmdvdXRzIj4lczwveGxpZmY6Zz4gd2lsbCBzdGFydCBjYXB0dXJpbmcgZXZlcnl0aGluZyB0aGF0XCdzIGRpc3BsYXllZCBvbiB5b3VyIHNjcmVlbi48L3N0cmluZz4KIApAQCAtMTIwMSw0ICsxMTk4LDc1IEBACiAgICAgPCEtLSBCbHVldG9vdGggZW5hYmxlbWVudCBvayB0ZXh0IFtDSEFSIExJTUlUPTQwXSAtLT4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIj5UdXJuIG9uPC9zdHJpbmc+CiAKKyAgICA8IS0tIEFwcGx5IG5vdGlmaWNhdGlvbiBpbXBvcnRhbmNlIHNldHRpbmcgdG8gYSB0b3BpYyBbQ0hBUiBMSU1JVD1OT05FXSAtLT4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX3RvcGljIj5BcHBseSB0byA8eGxpZmY6ZyBpZD0idG9waWNfbmFtZSIgZXhhbXBsZT0iRnJpZW5kIFJlcXVlc3QiPiUxJHM8L3hsaWZmOmc+IG5vdGlmaWNhdGlvbnM8L3N0cmluZz4KKyAgICA8IS0tIEFwcGx5IG5vdGlmaWNhdGlvbiBpbXBvcnRhbmNlIHNldHRpbmcgdG8gYW4gYXBwIFtDSEFSIExJTUlUPU5PTkVdIC0tPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIj5BcHBseSB0byBhbGwgbm90aWZpY2F0aW9ucyBmcm9tIHRoaXMgYXBwPC9zdHJpbmc+CisgICAgPCEtLSBOb3RpZmljYXRpb24gaW1wb3J0YW5jZSB0aXRsZSwgYmxvY2tlZCBzdGF0dXMtLT4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfaW1wb3J0YW5jZSI+QmxvY2tlZDwvc3RyaW5nPgorICAgIDwhLS0gTm90aWZpY2F0aW9uIGltcG9ydGFuY2UgdGl0bGUsIGxvdyBzdGF0dXMtLT4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbXBvcnRhbmNlIj5Mb3cgaW1wb3J0YW5jZTwvc3RyaW5nPgorICAgIDwhLS0gTm90aWZpY2F0aW9uIGltcG9ydGFuY2UgdGl0bGUsIG5vcm1hbCBzdGF0dXMtLT4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSI+Tm9ybWFsIGltcG9ydGFuY2U8L3N0cmluZz4KKyAgICA8IS0tIE5vdGlmaWNhdGlvbiBpbXBvcnRhbmNlIHRpdGxlLCBoaWdoIHN0YXR1cy0tPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIj5IaWdoIGltcG9ydGFuY2U8L3N0cmluZz4KKyAgICA8IS0tIE5vdGlmaWNhdGlvbiBpbXBvcnRhbmNlIHRpdGxlLCBtYXggc3RhdHVzLS0+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfaW1wb3J0YW5jZSI+VXJnZW50IGltcG9ydGFuY2U8L3N0cmluZz4KKworICAgIDwhLS0gW0NIQVIgTElNSVQ9MTAwXSBOb3RpZmljYXRpb24gSW1wb3J0YW5jZSBzbGlkZXI6IGJsb2NrZWQgaW1wb3J0YW5jZSBsZXZlbCBkZXNjcmlwdGlvbiAtLT4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiPk5ldmVyIHNob3cgdGhlc2Ugbm90aWZpY2F0aW9uczwvc3RyaW5nPgorCisgICAgPCEtLSBbQ0hBUiBMSU1JVD0xMDBdIE5vdGlmaWNhdGlvbiBJbXBvcnRhbmNlIHNsaWRlcjogbG93IGltcG9ydGFuY2UgbGV2ZWwgZGVzY3JpcHRpb24gLS0+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciPlNpbGVudGx5IHNob3cgYXQgdGhlIGJvdHRvbSBvZiB0aGUgbm90aWZpY2F0aW9uIGxpc3Q8L3N0cmluZz4KKworICAgIDwhLS0gW0NIQVIgTElNSVQ9MTAwXSBOb3RpZmljYXRpb24gSW1wb3J0YW5jZSBzbGlkZXI6IG5vcm1hbCBpbXBvcnRhbmNlIGxldmVsIGRlc2NyaXB0aW9uIC0tPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCI+U2lsZW50bHkgc2hvdyB0aGVzZSBub3RpZmljYXRpb25zPC9zdHJpbmc+CisKKyAgICA8IS0tIFtDSEFSIExJTUlUPTEwMF0gTm90aWZpY2F0aW9uIEltcG9ydGFuY2Ugc2xpZGVyOiBoaWdoIGltcG9ydGFuY2UgbGV2ZWwgZGVzY3JpcHRpb24gLS0+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIj5TaG93IGF0IHRoZSB0b3Agb2YgdGhlIG5vdGlmaWNhdGlvbnMgbGlzdCBhbmQgbWFrZSBzb3VuZDwvc3RyaW5nPgorCisgICAgPCEtLSBbQ0hBUiBMSU1JVD0xMDBdIE5vdGlmaWNhdGlvbiBJbXBvcnRhbmNlIHNsaWRlcjogbWF4IGltcG9ydGFuY2UgbGV2ZWwgZGVzY3JpcHRpb24gLS0+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiPlBlZWsgb250byB0aGUgc2NyZWVuIGFuZCBtYWtlIHNvdW5kPC9zdHJpbmc+CisKKyAgICA8IS0tIE5vdGlmaWNhdGlvbjogQ29udHJvbCBwYW5lbDogTGFiZWwgZm9yIGJ1dHRvbiB0aGF0IGxhdW5jaGVzIG5vdGlmaWNhdGlvbiBzZXR0aW5ncy4gW0NIQVIgTElNSVQ9Tk9ORV0gLS0+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyI+TW9yZSBzZXR0aW5nczwvc3RyaW5nPgorICAgIDwhLS0gTm90aWZpY2F0aW9uOiBDb250cm9sIHBhbmVsOiBMYWJlbCBmb3IgYnV0dG9uIHRoYXQgZGlzbWlzc2VzIGNvbnRyb2wgcGFuZWwuIFtDSEFSIExJTUlUPU5PTkVdIC0tPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiPkRvbmU8L3N0cmluZz4KKworICAgIDwhLS0gTGFiZWwgZm9yIG5vIGNvbG9yIHRyYW5zZm9ybSBbQ0hBUiBMSU1JVD0zMF0gLS0+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSI+Tm9ybWFsIGNvbG9yczwvc3RyaW5nPgorCisgICAgPCEtLSBMYWJlbCBmb3IgbmlnaHQgY29sb3IgdHJhbnNmb3JtIFtDSEFSIExJTUlUPTMwXSAtLT4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9uaWdodCI+TmlnaHQgY29sb3JzPC9zdHJpbmc+CisKKyAgICA8IS0tIExhYmVsIGZvciBjdXN0b20gY29sb3IgdHJhbnNmb3JtIFtDSEFSIExJTUlUPTMwXSAtLT4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iPkN1c3RvbSBjb2xvcnM8L3N0cmluZz4KKworICAgIDwhLS0gTGFiZWwgZm9yIHVua25vd24gY29sb3IgdHJhbnNmb3JtIFtDSEFSIExJTUlUPTMwXSAtLT4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF91bmtub3duIj5Vbmtub3duIGNvbG9yczwvc3RyaW5nPgorCisgICAgPCEtLSBUaXRsZSBmb3IgY29sb3IgdHJhbnNmb3JtIFtDSEFSIExJTUlUPTMwXSAtLT4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3RyYW5zZm9ybSI+Q29sb3IgbW9kaWZpY2F0aW9uPC9zdHJpbmc+CisKKyAgICA8IS0tIFRpdGxlIGZvciBzZXR0aW5nIHRvIHNob3cgUXVpY2sgU2V0dGluZ3MgdGlsZSBbQ0hBUiBMSU1JVD02MF0gLS0+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfc2hvd19xcyI+U2hvdyBRdWljayBTZXR0aW5ncyB0aWxlPC9zdHJpbmc+CisKKyAgICA8IS0tIFRpdGxlIGZvciBzd2l0Y2ggdG8gZW5hYmxlIGN1c3RvbSBjb2xvciB0cmFuc2Zvcm0gW0NIQVIgTElNSVQ9NjBdIC0tPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSI+RW5hYmxlIGN1c3RvbSB0cmFuc2Zvcm08L3N0cmluZz4KKworICAgIDwhLS0gQnV0dG9uIHRvIGFwcGx5IHNldHRpbmdzIFtDSEFSIExJTUlUPTMwXSAtLT4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5Ij5BcHBseTwvc3RyaW5nPgorCisgICAgPCEtLSBUaXRsZSBvZiB3YXJuaW5nIGRpYWxvZyBhYm91dCBiYWQgY29sb3Igc2V0dGluZ3MuIFtDSEFSIExJTUlUPTMwXSAtLT4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSI+Q29uZmlybSBzZXR0aW5nczwvc3RyaW5nPgorCisgICAgPCEtLSBNZXNzYWdlIHdhcm5pbmcgdXNlciBhYm91dCBjdXN0b20gY29sb3Igc2V0dGluZ3MgW0NIQVIgTElNSVQ9Tk9ORV0gLS0+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfbWVzc2FnZSI+U29tZSBjb2xvciBzZXR0aW5ncyBjYW4gbWFrZSB0aGlzCisgICAgICAgIGRldmljZSB1bnVzYWJsZS4gQ2xpY2sgT0sgdG8gY29uZmlybSB0aGVzZSBjb2xvciBzZXR0aW5ncywKKyAgICAgICAgb3RoZXJ3aXNlIHRoZXNlIHNldHRpbmdzIHdpbGwgcmVzZXQgYWZ0ZXIgMTAgc2Vjb25kcy48L3N0cmluZz4KKworICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbW9kaWZpY2F0aW9uX3IiIHRyYW5zbGF0YWJsZT0iZmFsc2UiPlI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21vZGlmaWNhdGlvbl9nIiB0cmFuc2xhdGFibGU9ImZhbHNlIj5HPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tb2RpZmljYXRpb25fYiIgdHJhbnNsYXRhYmxlPSJmYWxzZSI+Qjwvc3RyaW5nPgorCiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMvc3R5bGVzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMvc3R5bGVzLnhtbAppbmRleCBhYWQ0MjhhLi41MjdiNjM4IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzL3N0eWxlcy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy9zdHlsZXMueG1sCkBAIC0yMzcsMTIgKzIzNyw2IEBACiAgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6Z3Jhdml0eSI+Y2VudGVyPC9pdGVtPgogICAgIDwvc3R5bGU+CiAKLSAgICA8c3R5bGUgbmFtZT0iVGV4dEFwcGVhcmFuY2UuTWF0ZXJpYWwuTm90aWZpY2F0aW9uLlBhcmVudGhldGljYWwiCi0gICAgICAgICAgIHBhcmVudD0iQCphbmRyb2lkOnN0eWxlL1RleHRBcHBlYXJhbmNlLk1hdGVyaWFsLk5vdGlmaWNhdGlvbiI+Ci0gICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dFN0eWxlIj5pdGFsaWM8L2l0ZW0+Ci0gICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dENvbG9yIj4jNjAwMDAwMDA8L2l0ZW0+Ci0gICAgPC9zdHlsZT4KLQogICAgIDxzdHlsZSBuYW1lPSJUZXh0QXBwZWFyYW5jZS5NYXRlcmlhbC5Ob3RpZmljYXRpb24uSGVhZGVyVGl0bGUiCiAgICAgICAgIHBhcmVudD0iQCphbmRyb2lkOnN0eWxlL1RleHRBcHBlYXJhbmNlLk1hdGVyaWFsLk5vdGlmaWNhdGlvbi5JbmZvIj4KICAgICA8L3N0eWxlPgpAQCAtMzA1LDE4ICsyOTksMzAgQEAKIAogICAgIDxzdHlsZSBuYW1lPSJEb2NrZWREaXZpZGVyQmFja2dyb3VuZCI+CiAgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6bGF5b3V0X3dpZHRoIj5tYXRjaF9wYXJlbnQ8L2l0ZW0+Ci0gICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6bGF5b3V0X2hlaWdodCI+MTJkcDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpsYXlvdXRfaGVpZ2h0Ij4xMGRwPC9pdGVtPgogICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmxheW91dF9ncmF2aXR5Ij5jZW50ZXJfdmVydGljYWw8L2l0ZW0+CiAgICAgPC9zdHlsZT4KIAogICAgIDxzdHlsZSBuYW1lPSJEb2NrZWREaXZpZGVySGFuZGxlIj4KICAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpsYXlvdXRfZ3Jhdml0eSI+Y2VudGVyX2hvcml6b250YWw8L2l0ZW0+Ci0gICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6bGF5b3V0X3dpZHRoIj42NGRwPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmxheW91dF93aWR0aCI+OTZkcDwvaXRlbT4KICAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpsYXlvdXRfaGVpZ2h0Ij40OGRwPC9pdGVtPgogICAgIDwvc3R5bGU+CiAKICAgICA8c3R5bGUgbmFtZT0iVHVuZXJTZXR0aW5ncyIgcGFyZW50PSJAYW5kcm9pZDpzdHlsZS9UaGVtZS5NYXRlcmlhbC5TZXR0aW5ncyI+Ci0gICAgICAgIDxpdGVtIG5hbWU9InByZWZlcmVuY2VUaGVtZSI+QGFuZHJvaWQ6c3R5bGUvVGhlbWUuTWF0ZXJpYWwuU2V0dGluZ3M8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9InByZWZlcmVuY2VUaGVtZSI+QHN0eWxlL1R1bmVyUHJlZmVyZW5jZVRoZW1lPC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iVHVuZXJQcmVmZXJlbmNlVGhlbWUiIHBhcmVudD0iQGFuZHJvaWQ6c3R5bGUvVGhlbWUuTWF0ZXJpYWwuU2V0dGluZ3MiPgorICAgICAgICA8aXRlbSBuYW1lPSJAZHJvcGRvd25QcmVmZXJlbmNlU3R5bGUiPkBzdHlsZS9QcmVmZXJlbmNlLkRyb3BEb3duLk1hdGVyaWFsPC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iVGV4dEFwcGVhcmFuY2UuTm90aWZpY2F0aW9uR3V0cyI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dFNpemUiPjE0c3A8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dENvbG9yIj5AY29sb3Ivbm90aWZpY2F0aW9uX2d1dHNfYnRuX2NvbG9yPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRBbGxDYXBzIj50cnVlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmZvbnRGYW1pbHkiPnNhbnMtc2VyaWYtbWVkaXVtPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmdyYXZpdHkiPmNlbnRlcjwvaXRlbT4KICAgICA8L3N0eWxlPgogCiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy94bWwvdHVuZXJfcHJlZnMueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3htbC90dW5lcl9wcmVmcy54bWwKaW5kZXggNjEwMzIxNi4uZjAyZjc2MyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3htbC90dW5lcl9wcmVmcy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3htbC90dW5lcl9wcmVmcy54bWwKQEAgLTEwMiw2ICsxMDIsMTEgQEAKICAgICAgICAgYW5kcm9pZDp0aXRsZT0iQHN0cmluZy9kZW1vX21vZGUiCiAgICAgICAgIGFuZHJvaWQ6ZnJhZ21lbnQ9ImNvbS5hbmRyb2lkLnN5c3RlbXVpLnR1bmVyLkRlbW9Nb2RlRnJhZ21lbnQiIC8+CiAKKyAgICA8UHJlZmVyZW5jZQorICAgICAgICBhbmRyb2lkOmtleT0iY29sb3JfdHJhbnNmb3JtIgorICAgICAgICBhbmRyb2lkOnRpdGxlPSJAc3RyaW5nL2NvbG9yX3RyYW5zZm9ybSIKKyAgICAgICAgYW5kcm9pZDpmcmFnbWVudD0iY29tLmFuZHJvaWQuc3lzdGVtdWkudHVuZXIuQ29sb3JNYXRyaXhGcmFnbWVudCIgLz4KKwogICAgIDwhLS0gV2FybmluZywgdGhpcyBnb2VzIGxhc3QuIC0tPgogICAgIDxQcmVmZXJlbmNlCiAgICAgICAgIGFuZHJvaWQ6c3VtbWFyeT0iQHN0cmluZy90dW5lcl9wZXJzaXN0ZW50X3dhcm5pbmciCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkva2V5Ym9hcmQvS2V5Ym9hcmRVSS5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL2tleWJvYXJkL0tleWJvYXJkVUkuamF2YQppbmRleCBkOTMxODU2Li40ODFiOTE4MCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL2tleWJvYXJkL0tleWJvYXJkVUkuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkva2V5Ym9hcmQvS2V5Ym9hcmRVSS5qYXZhCkBAIC03MCwxNyArNzAsMTkgQEAKICAgICAvLyB0aW1lIGZvciB1cyB0byByZWNlaXZlIHRoZSBzaWduYWwgdGhhdCBpdCdzIHN0YXJ0aW5nLgogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgQkxVRVRPT1RIX1NUQVJUX0RFTEFZX01JTExJUyA9IDEwICogMTAwMDsKIAorICAgIC8vIFdlIHdpbGwgYmUgc2Nhbm5pbmcgdXAgdG8gMzAgc2Vjb25kcywgYWZ0ZXIgd2hpY2ggd2UnbGwgc3RvcC4KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIEJMVUVUT09USF9TQ0FOX1RJTUVPVVRfTUlMTElTID0gMzAgKiAxMDAwOworCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNUQVRFX05PVF9FTkFCTEVEID0gLTE7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNUQVRFX1VOS05PV04gPSAwOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTVEFURV9XQUlUSU5HX0ZPUl9CT09UX0NPTVBMRVRFRCA9IDE7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNUQVRFX1dBSVRJTkdfRk9SX1RBQkxFVF9NT0RFX0VYSVQgPSAyOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTVEFURV9XQUlUSU5HX0ZPUl9ERVZJQ0VfRElTQ09WRVJZID0gMzsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1RBVEVfV0FJVElOR19GT1JfQkxVRVRPT1RIID0gNDsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1RBVEVfV0FJVElOR19GT1JfU1RBVEVfUEFJUkVEID0gNTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1RBVEVfUEFJUklORyA9IDY7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNUQVRFX1BBSVJFRCA9IDc7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNUQVRFX1VTRVJfQ0FOQ0VMTEVEID0gODsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1RBVEVfREVWSUNFX05PVF9GT1VORCA9IDk7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNUQVRFX1BBSVJJTkcgPSA1OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTVEFURV9QQUlSRUQgPSA2OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTVEFURV9VU0VSX0NBTkNFTExFRCA9IDc7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNUQVRFX0RFVklDRV9OT1RfRk9VTkQgPSA4OwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1TR19JTklUID0gMDsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTVNHX09OX0JPT1RfQ09NUExFVEVEID0gMTsKQEAgLTkyLDYgKzk0LDcgQEAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTVNHX09OX0JMRV9TQ0FOX0ZBSUxFRCA9IDc7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1TR19TSE9XX0JMVUVUT09USF9ESUFMT0cgPSA4OwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNU0dfRElTTUlTU19CTFVFVE9PVEhfRElBTE9HID0gOTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTVNHX0JMRV9BQk9SVF9TQ0FOID0gMTA7CiAKICAgICBwcml2YXRlIHZvbGF0aWxlIEtleWJvYXJkSGFuZGxlciBtSGFuZGxlcjsKICAgICBwcml2YXRlIHZvbGF0aWxlIEtleWJvYXJkVUlIYW5kbGVyIG1VSUhhbmRsZXI7CkBAIC0xMDcsNiArMTEwLDcgQEAKICAgICBwcml2YXRlIGxvbmcgbUJvb3RDb21wbGV0ZWRUaW1lOwogCiAgICAgcHJpdmF0ZSBpbnQgbUluVGFibGV0TW9kZSA9IElucHV0TWFuYWdlci5TV0lUQ0hfU1RBVEVfVU5LTk9XTjsKKyAgICBwcml2YXRlIGludCBtU2NhbkF0dGVtcHQgPSAwOwogICAgIHByaXZhdGUgU2NhbkNhbGxiYWNrIG1TY2FuQ2FsbGJhY2s7CiAgICAgcHJpdmF0ZSBCbHVldG9vdGhEaWFsb2cgbURpYWxvZzsKIApAQCAtMzI4LDYgKzMzMiw5IEBACiAgICAgICAgICAgICAuYnVpbGQoKTsKICAgICAgICAgbVNjYW5DYWxsYmFjayA9IG5ldyBLZXlib2FyZFNjYW5DYWxsYmFjaygpOwogICAgICAgICBzY2FubmVyLnN0YXJ0U2NhbihBcnJheXMuYXNMaXN0KGZpbHRlciksIHNldHRpbmdzLCBtU2NhbkNhbGxiYWNrKTsKKworICAgICAgICBNZXNzYWdlIGFib3J0TXNnID0gbUhhbmRsZXIub2J0YWluTWVzc2FnZShNU0dfQkxFX0FCT1JUX1NDQU4sICsrbVNjYW5BdHRlbXB0LCAwKTsKKyAgICAgICAgbUhhbmRsZXIuc2VuZE1lc3NhZ2VEZWxheWVkKGFib3J0TXNnLCBCTFVFVE9PVEhfU0NBTl9USU1FT1VUX01JTExJUyk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHN0b3BTY2FubmluZygpIHsKQEAgLTMzOCw2ICszNDUsMTkgQEAKICAgICB9CiAKICAgICAvLyBTaG91bGQgb25seSBiZSBjYWxsZWQgb24gdGhlIGhhbmRsZXIgdGhyZWFkCisgICAgcHJpdmF0ZSB2b2lkIGJsZUFib3J0U2NhbkludGVybmFsKGludCBzY2FuQXR0ZW1wdCkgeworICAgICAgICBpZiAobVN0YXRlID09IFNUQVRFX1dBSVRJTkdfRk9SX0RFVklDRV9ESVNDT1ZFUlkgJiYgc2NhbkF0dGVtcHQgPT0gbVNjYW5BdHRlbXB0KSB7CisgICAgICAgICAgICBpZiAoREVCVUcpIHsKKyAgICAgICAgICAgICAgICBTbG9nLmQoVEFHLCAiQmx1ZXRvb3RoIHNjYW4gdGltZWQgb3V0Iik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdG9wU2Nhbm5pbmcoKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBzaG91bGQgd2UgYWxzbyB0cnkgc2h1dHRpbmcgb2ZmIGJsdWV0b290aCBpZiB3ZSBlbmFibGVkCisgICAgICAgICAgICAvLyBpdCBpbiB0aGUgZmlyc3QgcGxhY2U/CisgICAgICAgICAgICBtU3RhdGUgPSBTVEFURV9ERVZJQ0VfTk9UX0ZPVU5EOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gU2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIHRoZSBoYW5kbGVyIHRocmVhZAogICAgIHByaXZhdGUgdm9pZCBvbkRldmljZUFkZGVkSW50ZXJuYWwoQ2FjaGVkQmx1ZXRvb3RoRGV2aWNlIGQpIHsKICAgICAgICAgaWYgKG1TdGF0ZSA9PSBTVEFURV9XQUlUSU5HX0ZPUl9ERVZJQ0VfRElTQ09WRVJZICYmIGQuZ2V0TmFtZSgpLmVxdWFscyhtS2V5Ym9hcmROYW1lKSkgewogICAgICAgICAgICAgc3RvcFNjYW5uaW5nKCk7CkBAIC00MjUsNiArNDQ1LDEyIEBACiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBtU3RhdGUgPSBTVEFURV9VU0VSX0NBTkNFTExFRDsKICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2FzZSBNU0dfQkxFX0FCT1JUX1NDQU46IHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHNjYW5BdHRlbXB0ID0gbXNnLmFyZzE7CisgICAgICAgICAgICAgICAgICAgIGJsZUFib3J0U2NhbkludGVybmFsKHNjYW5BdHRlbXB0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNhc2UgTVNHX09OX0JMVUVUT09USF9TVEFURV9DSEFOR0VEOiB7CiAgICAgICAgICAgICAgICAgICAgIGludCBibHVldG9vdGhTdGF0ZSA9IG1zZy5hcmcxOwpAQCAtNTU1LDggKzU4MSw2IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuICJTVEFURV9XQUlUSU5HX0ZPUl9ERVZJQ0VfRElTQ09WRVJZIjsKICAgICAgICAgICAgIGNhc2UgU1RBVEVfV0FJVElOR19GT1JfQkxVRVRPT1RIOgogICAgICAgICAgICAgICAgIHJldHVybiAiU1RBVEVfV0FJVElOR19GT1JfQkxVRVRPT1RIIjsKLSAgICAgICAgICAgIGNhc2UgU1RBVEVfV0FJVElOR19GT1JfU1RBVEVfUEFJUkVEOgotICAgICAgICAgICAgICAgIHJldHVybiAiU1RBVEVfV0FJVElOR19GT1JfU1RBVEVfUEFJUkVEIjsKICAgICAgICAgICAgIGNhc2UgU1RBVEVfUEFJUklORzoKICAgICAgICAgICAgICAgICByZXR1cm4gIlNUQVRFX1BBSVJJTkciOwogICAgICAgICAgICAgY2FzZSBTVEFURV9QQUlSRUQ6CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvUVNJY29uVmlldy5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL1FTSWNvblZpZXcuamF2YQppbmRleCBiNTZhZDc2Li4wMWViNWY5IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvUVNJY29uVmlldy5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy9RU0ljb25WaWV3LmphdmEKQEAgLTc1LDcgKzc1LDggQEAKICAgICAgICAgICAgIGl2LnNldFRhZyhSLmlkLnFzX2ljb25fdGFnLCBzdGF0ZS5pY29uKTsKICAgICAgICAgICAgIGlmIChkIGluc3RhbmNlb2YgQW5pbWF0YWJsZSkgewogICAgICAgICAgICAgICAgIEFuaW1hdGFibGUgYSA9IChBbmltYXRhYmxlKSBkOwotICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5pY29uIGluc3RhbmNlb2YgUVNUaWxlLkFuaW1hdGlvbkljb24gJiYgIWl2LmlzU2hvd24oKSkgeworICAgICAgICAgICAgICAgIGEuc3RhcnQoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWl2LmlzU2hvd24oKSkgewogICAgICAgICAgICAgICAgICAgICBhLnN0b3AoKTsgLy8gc2tpcCBkaXJlY3RseSB0byBlbmQgc3RhdGUKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvUVNUaWxlLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvUVNUaWxlLmphdmEKaW5kZXggMzlmMGM1NS4uMWEzNmFiZCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL1FTVGlsZS5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy9RU1RpbGUuamF2YQpAQCAtMTksOCArMTksNiBAQAogaW1wb3J0IGFuZHJvaWQuYXBwLlBlbmRpbmdJbnRlbnQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkFuaW1hdGFibGU7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5BbmltYXRlZFZlY3RvckRyYXdhYmxlOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGU7CiBpbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwogaW1wb3J0IGFuZHJvaWQub3MuTG9vcGVyOwpAQCAtMjksOSArMjcsMjAgQEAKIGltcG9ydCBhbmRyb2lkLnV0aWwuU3BhcnNlQXJyYXk7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdHcm91cDsKLQogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnFzLlFTVGlsZS5TdGF0ZTsKLWltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5zdGF0dXNiYXIucG9saWN5Lio7CitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLnBvbGljeS5CYXR0ZXJ5Q29udHJvbGxlcjsKK2ltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5zdGF0dXNiYXIucG9saWN5LkJsdWV0b290aENvbnRyb2xsZXI7CitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLnBvbGljeS5DYXN0Q29udHJvbGxlcjsKK2ltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5zdGF0dXNiYXIucG9saWN5LkZsYXNobGlnaHRDb250cm9sbGVyOworaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnN0YXR1c2Jhci5wb2xpY3kuSG90c3BvdENvbnRyb2xsZXI7CitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLnBvbGljeS5LZXlndWFyZE1vbml0b3I7CitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLnBvbGljeS5MaXN0ZW5hYmxlOworaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnN0YXR1c2Jhci5wb2xpY3kuTG9jYXRpb25Db250cm9sbGVyOworaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnN0YXR1c2Jhci5wb2xpY3kuTmV0d29ya0NvbnRyb2xsZXI7CitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLnBvbGljeS5Sb3RhdGlvbkxvY2tDb250cm9sbGVyOworaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnN0YXR1c2Jhci5wb2xpY3kuVXNlckluZm9Db250cm9sbGVyOworaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnN0YXR1c2Jhci5wb2xpY3kuVXNlclN3aXRjaGVyQ29udHJvbGxlcjsKK2ltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5zdGF0dXNiYXIucG9saWN5Llplbk1vZGVDb250cm9sbGVyOwogCiBpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CiBpbXBvcnQgamF2YS51dGlsLk9iamVjdHM7CkBAIC0zODksMTEgKzM5OCw3IEBACiAKICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyBEcmF3YWJsZSBnZXREcmF3YWJsZShDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgICAgIERyYXdhYmxlIGQgPSBjb250ZXh0LmdldERyYXdhYmxlKG1SZXNJZCk7Ci0gICAgICAgICAgICBpZiAoZCBpbnN0YW5jZW9mIEFuaW1hdGFibGUpIHsKLSAgICAgICAgICAgICAgICAoKEFuaW1hdGFibGUpIGQpLnN0YXJ0KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gZDsKKyAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmdldERyYXdhYmxlKG1SZXNJZCk7CiAgICAgICAgIH0KIAogICAgICAgICBAT3ZlcnJpZGUKQEAgLTQwOCw0MSArNDEzLDE0IEBACiAgICAgfQogCiAgICAgcHJvdGVjdGVkIGNsYXNzIEFuaW1hdGlvbkljb24gZXh0ZW5kcyBSZXNvdXJjZUljb24gewotICAgICAgICBwcml2YXRlIGJvb2xlYW4gbUFsbG93QW5pbWF0aW9uOwotCiAgICAgICAgIHB1YmxpYyBBbmltYXRpb25JY29uKGludCByZXNJZCkgewogICAgICAgICAgICAgc3VwZXIocmVzSWQpOwogICAgICAgICB9CiAKLSAgICAgICAgcHVibGljIHZvaWQgc2V0QWxsb3dBbmltYXRpb24oYm9vbGVhbiBhbGxvd0FuaW1hdGlvbikgewotICAgICAgICAgICAgbUFsbG93QW5pbWF0aW9uID0gYWxsb3dBbmltYXRpb247Ci0gICAgICAgIH0KLQogICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHVibGljIERyYXdhYmxlIGdldERyYXdhYmxlKENvbnRleHQgY29udGV4dCkgewogICAgICAgICAgICAgLy8gd29ya2Fyb3VuZDogZ2V0IGEgY2xlYW4gc3RhdGUgZm9yIGV2ZXJ5IG5ldyBBVkQKLSAgICAgICAgICAgIGZpbmFsIEFuaW1hdGVkVmVjdG9yRHJhd2FibGUgZCA9IChBbmltYXRlZFZlY3RvckRyYXdhYmxlKSBjb250ZXh0LmdldERyYXdhYmxlKG1SZXNJZCkKLSAgICAgICAgICAgICAgICAgICAgLmdldENvbnN0YW50U3RhdGUoKS5uZXdEcmF3YWJsZSgpOwotICAgICAgICAgICAgZC5zdGFydCgpOwotICAgICAgICAgICAgaWYgKG1BbGxvd0FuaW1hdGlvbikgewotICAgICAgICAgICAgICAgIG1BbGxvd0FuaW1hdGlvbiA9IGZhbHNlOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBkLnN0b3AoKTsgLy8gc2tpcCBkaXJlY3RseSB0byBlbmQgc3RhdGUKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBkOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIGVudW0gVXNlckJvb2xlYW4gewotICAgICAgICBVU0VSX1RSVUUodHJ1ZSwgdHJ1ZSksCi0gICAgICAgIFVTRVJfRkFMU0UodHJ1ZSwgZmFsc2UpLAotICAgICAgICBCQUNLR1JPVU5EX1RSVUUoZmFsc2UsIHRydWUpLAotICAgICAgICBCQUNLR1JPVU5EX0ZBTFNFKGZhbHNlLCBmYWxzZSk7Ci0gICAgICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIHZhbHVlOwotICAgICAgICBwdWJsaWMgZmluYWwgYm9vbGVhbiB1c2VySW5pdGlhdGVkOwotICAgICAgICBwcml2YXRlIFVzZXJCb29sZWFuKGJvb2xlYW4gdXNlckluaXRpYXRlZCwgYm9vbGVhbiB2YWx1ZSkgewotICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlOwotICAgICAgICAgICAgdGhpcy51c2VySW5pdGlhdGVkID0gdXNlckluaXRpYXRlZDsKKyAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmdldERyYXdhYmxlKG1SZXNJZCkuZ2V0Q29uc3RhbnRTdGF0ZSgpLm5ld0RyYXdhYmxlKCk7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy9RU1RpbGVTZXJ2aWNlV3JhcHBlci5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL1FTVGlsZVNlcnZpY2VXcmFwcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1ZTFmZDUuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL1FTVGlsZVNlcnZpY2VXcmFwcGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi1wYWNrYWdlIGNvbS5hbmRyb2lkLnN5c3RlbXVpLnFzOwotCi1pbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOwotaW1wb3J0IGFuZHJvaWQuc2VydmljZS5xdWlja3NldHRpbmdzLklRU1RpbGVTZXJ2aWNlOwotaW1wb3J0IGFuZHJvaWQuc2VydmljZS5xdWlja3NldHRpbmdzLlRpbGU7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotCi1wdWJsaWMgY2xhc3MgUVNUaWxlU2VydmljZVdyYXBwZXIgaW1wbGVtZW50cyBJUVNUaWxlU2VydmljZSB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJJUVNUaWxlU2VydmljZVdyYXBwZXIiOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBJUVNUaWxlU2VydmljZSBtU2VydmljZTsKLSAgICAKLSAgICBwdWJsaWMgUVNUaWxlU2VydmljZVdyYXBwZXIoSVFTVGlsZVNlcnZpY2Ugc2VydmljZSkgewotICAgICAgICBtU2VydmljZSA9IHNlcnZpY2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIElCaW5kZXIgYXNCaW5kZXIoKSB7Ci0gICAgICAgIHJldHVybiBtU2VydmljZS5hc0JpbmRlcigpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldFFTVGlsZShUaWxlIHRpbGUpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIG1TZXJ2aWNlLnNldFFTVGlsZSh0aWxlKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIExvZy5kKFRBRywgIkNhdWdodCBleGNlcHRpb24gZnJvbSBRU1RpbGVTZXJ2aWNlIiwgZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvblRpbGVBZGRlZCgpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIG1TZXJ2aWNlLm9uVGlsZUFkZGVkKCk7Ci0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBMb2cuZChUQUcsICJDYXVnaHQgZXhjZXB0aW9uIGZyb20gUVNUaWxlU2VydmljZSIsIGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25UaWxlUmVtb3ZlZCgpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIG1TZXJ2aWNlLm9uVGlsZVJlbW92ZWQoKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIExvZy5kKFRBRywgIkNhdWdodCBleGNlcHRpb24gZnJvbSBRU1RpbGVTZXJ2aWNlIiwgZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvblN0YXJ0TGlzdGVuaW5nKCkgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgbVNlcnZpY2Uub25TdGFydExpc3RlbmluZygpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgTG9nLmQoVEFHLCAiQ2F1Z2h0IGV4Y2VwdGlvbiBmcm9tIFFTVGlsZVNlcnZpY2UiLCBlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uU3RvcExpc3RlbmluZygpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIG1TZXJ2aWNlLm9uU3RvcExpc3RlbmluZygpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgTG9nLmQoVEFHLCAiQ2F1Z2h0IGV4Y2VwdGlvbiBmcm9tIFFTVGlsZVNlcnZpY2UiLCBlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soSUJpbmRlciB0b2tlbikgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgbVNlcnZpY2Uub25DbGljayh0b2tlbik7Ci0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBMb2cuZChUQUcsICJDYXVnaHQgZXhjZXB0aW9uIGZyb20gUVNUaWxlU2VydmljZSIsIGUpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL1F1aWNrUVNQYW5lbC5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL1F1aWNrUVNQYW5lbC5qYXZhCmluZGV4IGJkYTQ2NzUuLjVmYTM4YzYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy9RdWlja1FTUGFuZWwuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvUXVpY2tRU1BhbmVsLmphdmEKQEAgLTQ5LDYgKzQ5LDExIEBACiAgICAgICAgIG1Rc0NvbnRhaW5lci5hZGRWaWV3KChWaWV3KSBtVGlsZUxheW91dCwgMSAvKiBCZXR3ZWVuIGJyaWdodG5lc3MgYW5kIGZvb3RlciAqLyk7CiAgICAgfQogCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlQ3VzdG9taXplUGFuZWwoKSB7CisgICAgICAgIC8vIE5vIGN1c3RvbWl6aW5nIGZyb20gdGhlIGhlYWRlci4KKyAgICB9CisKICAgICBwdWJsaWMgdm9pZCBzZXRRU1BhbmVsQW5kSGVhZGVyKFFTUGFuZWwgZnVsbFBhbmVsLCBWaWV3IGhlYWRlcikgewogICAgICAgICBtRnVsbFBhbmVsID0gZnVsbFBhbmVsOwogICAgICAgICBtSGVhZGVyID0gaGVhZGVyOwpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL2N1c3RvbWl6ZS9DdXN0b21RU1BhbmVsLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvY3VzdG9taXplL0N1c3RvbVFTUGFuZWwuamF2YQppbmRleCA4N2MyOTczNS4uNzQ0ODQ5MyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL2N1c3RvbWl6ZS9DdXN0b21RU1BhbmVsLmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL2N1c3RvbWl6ZS9DdXN0b21RU1BhbmVsLmphdmEKQEAgLTE2LDMyICsxNiwyOCBAQAogcGFja2FnZSBjb20uYW5kcm9pZC5zeXN0ZW11aS5xcy5jdXN0b21pemU7CiAKIGltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5hcHAuU2VydmljZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ2xpcERhdGE7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWU7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuU2VydmljZUNvbm5lY3Rpb247Ci1pbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOworaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKIGltcG9ydCBhbmRyb2lkLm9zLlVzZXJIYW5kbGU7CiBpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5TZXR0aW5ncy5TZWN1cmU7Ci1pbXBvcnQgYW5kcm9pZC5zZXJ2aWNlLnF1aWNrc2V0dGluZ3MuSVFTVGlsZVNlcnZpY2U7CiBpbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRVdGlsczsKIGltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiBpbXBvcnQgYW5kcm9pZC52aWV3LkxheW91dEluZmxhdGVyOwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwotCiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuUjsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5xcy5RU1BhbmVsOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnFzLlFTVGlsZTsKLWltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5xcy5RU1RpbGVTZXJ2aWNlV3JhcHBlcjsKLWltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5xcy50aWxlcy5DdXN0b21UaWxlOworaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnFzLmV4dGVybmFsLkN1c3RvbVRpbGU7CitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucXMuZXh0ZXJuYWwuVGlsZUxpZmVjeWNsZU1hbmFnZXI7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLnBob25lLlFTVGlsZUhvc3Q7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkudHVuZXIuVHVuZXJTZXJ2aWNlOwogCiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiAKIC8qKgpAQCAtNTIsOCArNDgsOSBAQAogcHVibGljIGNsYXNzIEN1c3RvbVFTUGFuZWwgZXh0ZW5kcyBRU1BhbmVsIHsKICAgICAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIkN1c3RvbVFTUGFuZWwiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKIAotICAgIHByaXZhdGUgTGlzdDxTdHJpbmc+IG1TYXZlZFRpbGVzOworICAgIHByaXZhdGUgTGlzdDxTdHJpbmc+IG1TYXZlZFRpbGVzID0gQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCk7CiAgICAgcHJpdmF0ZSBBcnJheUxpc3Q8U3RyaW5nPiBtU3Rhc2g7CiAgICAgcHJpdmF0ZSBMaXN0PFN0cmluZz4gbVRpbGVzID0gbmV3IEFycmF5TGlzdDw+KCk7CiAKQEAgLTY3LDE3ICs2NCwyNSBAQAogICAgICAgICAoKE5vblBhZ2VkVGlsZUxheW91dCkgbVRpbGVMYXlvdXQpLnNldEN1c3RvbVFzUGFuZWwodGhpcyk7CiAgICAgICAgIHJlbW92ZVZpZXcobUZvb3Rlci5nZXRWaWV3KCkpOwogCisgICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLCAibmV3IEN1c3RvbVFTUGFuZWwiLCBuZXcgVGhyb3dhYmxlKCkpOwogICAgICAgICBUdW5lclNlcnZpY2UuZ2V0KG1Db250ZXh0KS5hZGRUdW5hYmxlKHRoaXMsIFFTVGlsZUhvc3QuVElMRVNfU0VUVElORyk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgb25EZXRhY2hlZEZyb21XaW5kb3coKSB7CisgICAgICAgIC8vIERvbid0IGFsbG93IHRoZSBzdXBlciB0byB1bnJlZ2lzdGVyIHRoZSB0dW5hYmxlLgorICAgIH0KKworICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIG9uVHVuaW5nQ2hhbmdlZChTdHJpbmcga2V5LCBTdHJpbmcgbmV3VmFsdWUpIHsKICAgICAgICAgaWYgKGtleS5lcXVhbHMoUVNfU0hPV19CUklHSFRORVNTKSkgewogICAgICAgICAgICAgLy8gTm8gQnJpZ2h0bmVzcyBmb3IgeW91LgogICAgICAgICAgICAgc3VwZXIub25UdW5pbmdDaGFuZ2VkKGtleSwgIjAiKTsKICAgICAgICAgfQogICAgICAgICBpZiAoUVNUaWxlSG9zdC5USUxFU19TRVRUSU5HLmVxdWFscyhrZXkpKSB7Ci0gICAgICAgICAgICBtU2F2ZWRUaWxlcyA9IFFTVGlsZUhvc3QubG9hZFRpbGVTcGVjcyhtQ29udGV4dCwgbmV3VmFsdWUpOworICAgICAgICAgICAgbVNhdmVkVGlsZXMgPSBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVMaXN0KAorICAgICAgICAgICAgICAgICAgICBRU1RpbGVIb3N0LmxvYWRUaWxlU3BlY3MobUNvbnRleHQsIG5ld1ZhbHVlKSk7CisgICAgICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgIk5ldyBzYXZlZCB0aWxlcyAiICsgVGV4dFV0aWxzLmpvaW4oIiwiLCBtU2F2ZWRUaWxlcykpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMDYsNiArMTExLDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRTYXZlZFRpbGVzKCkgeworICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgInNldFNhdmVkVGlsZXMgIiArIFRleHRVdGlscy5qb2luKCIsIiwgbVNhdmVkVGlsZXMpKTsKICAgICAgICAgc2V0VGlsZXMobVNhdmVkVGlsZXMpOwogICAgIH0KIApAQCAtMTE0LDQ3ICsxMjAsMjYgQEAKICAgICAgICAgICAgIFN0cmluZyB0aWxlU3BlYyA9IG1TYXZlZFRpbGVzLmdldChpKTsKICAgICAgICAgICAgIGlmICghdGlsZVNwZWMuc3RhcnRzV2l0aChDdXN0b21UaWxlLlBSRUZJWCkpIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKCFtVGlsZXMuY29udGFpbnModGlsZVNwZWMpKSB7Ci0gICAgICAgICAgICAgICAgbUNvbnRleHQuYmluZFNlcnZpY2VBc1VzZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgSW50ZW50KCkuc2V0Q29tcG9uZW50KEN1c3RvbVRpbGUuZ2V0Q29tcG9uZW50RnJvbVNwZWModGlsZVNwZWMpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTZXJ2aWNlQ29ubmVjdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblNlcnZpY2VEaXNjb25uZWN0ZWQoQ29tcG9uZW50TmFtZSBuYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25TZXJ2aWNlQ29ubmVjdGVkKENvbXBvbmVudE5hbWUgbmFtZSwgSUJpbmRlciBzZXJ2aWNlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFTVGlsZVNlcnZpY2VXcmFwcGVyIHdyYXBwZXIgPSBuZXcgUVNUaWxlU2VydmljZVdyYXBwZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVFTVGlsZVNlcnZpY2UuU3R1Yi5hc0ludGVyZmFjZShzZXJ2aWNlKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXIub25TdG9wTGlzdGVuaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXIub25UaWxlUmVtb3ZlZCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ29udGV4dC51bmJpbmRTZXJ2aWNlKHRoaXMpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0sIFNlcnZpY2UuQklORF9BVVRPX0NSRUFURSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBVc2VySGFuZGxlKEFjdGl2aXR5TWFuYWdlci5nZXRDdXJyZW50VXNlcigpKSk7CisgICAgICAgICAgICAgICAgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoKS5zZXRDb21wb25lbnQoQ3VzdG9tVGlsZS5nZXRDb21wb25lbnRGcm9tU3BlYyh0aWxlU3BlYykpOworICAgICAgICAgICAgICAgIFRpbGVMaWZlY3ljbGVNYW5hZ2VyIGxpZmVjeWNsZU1hbmFnZXIgPSBuZXcgVGlsZUxpZmVjeWNsZU1hbmFnZXIobmV3IEhhbmRsZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1Db250ZXh0LCBpbnRlbnQsIG5ldyBVc2VySGFuZGxlKEFjdGl2aXR5TWFuYWdlci5nZXRDdXJyZW50VXNlcigpKSk7CisgICAgICAgICAgICAgICAgbGlmZWN5Y2xlTWFuYWdlci5vblN0b3BMaXN0ZW5pbmcoKTsKKyAgICAgICAgICAgICAgICBsaWZlY3ljbGVNYW5hZ2VyLm9uVGlsZVJlbW92ZWQoKTsKKyAgICAgICAgICAgICAgICBsaWZlY3ljbGVNYW5hZ2VyLmZsdXNoTWVzc2FnZXNBbmRVbmJpbmQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1UaWxlcy5zaXplKCk7IGkrKykgewogICAgICAgICAgICAgU3RyaW5nIHRpbGVTcGVjID0gbVRpbGVzLmdldChpKTsKICAgICAgICAgICAgIGlmICghdGlsZVNwZWMuc3RhcnRzV2l0aChDdXN0b21UaWxlLlBSRUZJWCkpIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKCFtU2F2ZWRUaWxlcy5jb250YWlucyh0aWxlU3BlYykpIHsKLSAgICAgICAgICAgICAgICBtQ29udGV4dC5iaW5kU2VydmljZUFzVXNlcigKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBJbnRlbnQoKS5zZXRDb21wb25lbnQoQ3VzdG9tVGlsZS5nZXRDb21wb25lbnRGcm9tU3BlYyh0aWxlU3BlYykpLAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFNlcnZpY2VDb25uZWN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uU2VydmljZURpc2Nvbm5lY3RlZChDb21wb25lbnROYW1lIG5hbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblNlcnZpY2VDb25uZWN0ZWQoQ29tcG9uZW50TmFtZSBuYW1lLCBJQmluZGVyIHNlcnZpY2UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVNUaWxlU2VydmljZVdyYXBwZXIgd3JhcHBlciA9IG5ldyBRU1RpbGVTZXJ2aWNlV3JhcHBlcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUVNUaWxlU2VydmljZS5TdHViLmFzSW50ZXJmYWNlKHNlcnZpY2UpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlci5vblRpbGVBZGRlZCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ29udGV4dC51bmJpbmRTZXJ2aWNlKHRoaXMpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0sIFNlcnZpY2UuQklORF9BVVRPX0NSRUFURSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBVc2VySGFuZGxlKEFjdGl2aXR5TWFuYWdlci5nZXRDdXJyZW50VXNlcigpKSk7CisgICAgICAgICAgICAgICAgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoKS5zZXRDb21wb25lbnQoQ3VzdG9tVGlsZS5nZXRDb21wb25lbnRGcm9tU3BlYyh0aWxlU3BlYykpOworICAgICAgICAgICAgICAgIFRpbGVMaWZlY3ljbGVNYW5hZ2VyIGxpZmVjeWNsZU1hbmFnZXIgPSBuZXcgVGlsZUxpZmVjeWNsZU1hbmFnZXIobmV3IEhhbmRsZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1Db250ZXh0LCBpbnRlbnQsIG5ldyBVc2VySGFuZGxlKEFjdGl2aXR5TWFuYWdlci5nZXRDdXJyZW50VXNlcigpKSk7CisgICAgICAgICAgICAgICAgbGlmZWN5Y2xlTWFuYWdlci5vblRpbGVBZGRlZCgpOworICAgICAgICAgICAgICAgIGxpZmVjeWNsZU1hbmFnZXIuZmx1c2hNZXNzYWdlc0FuZFVuYmluZCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLCAic2F2ZUN1cnJlbnRUaWxlcyAiICsgbVRpbGVzKTsKICAgICAgICAgU2VjdXJlLnB1dFN0cmluZ0ZvclVzZXIoZ2V0Q29udGV4dCgpLmdldENvbnRlbnRSZXNvbHZlcigpLCBRU1RpbGVIb3N0LlRJTEVTX1NFVFRJTkcsCiAgICAgICAgICAgICAgICAgVGV4dFV0aWxzLmpvaW4oIiwiLCBtVGlsZXMpLCBBY3Rpdml0eU1hbmFnZXIuZ2V0Q3VycmVudFVzZXIoKSk7CiAgICAgfQpAQCAtMTczLDMwICsxNTgsMzcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgc2V0VGlsZXNJbnRlcm5hbCgpIHsKKyAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJTZXQgdGlsZXMgaW50ZXJuYWwiKTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtQ3VycmVudFRpbGVzLnNpemUoKTsgaSsrKSB7CiAgICAgICAgICAgICBtQ3VycmVudFRpbGVzLmdldChpKS5kZXN0cm95KCk7CiAgICAgICAgIH0KICAgICAgICAgbUN1cnJlbnRUaWxlcy5jbGVhcigpOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1UaWxlcy5zaXplKCk7IGkrKykgewogICAgICAgICAgICAgaWYgKG1UaWxlcy5nZXQoaSkuc3RhcnRzV2l0aChDdXN0b21UaWxlLlBSRUZJWCkpIHsKLSAgICAgICAgICAgICAgICBtQ3VycmVudFRpbGVzLmFkZChCbGFua0N1c3RvbVRpbGUuY3JlYXRlKG1Ib3N0LCBtVGlsZXMuZ2V0KGkpKSk7CisgICAgICAgICAgICAgICAgUVNUaWxlPD8+IHRpbGUgPSBCbGFua0N1c3RvbVRpbGUuY3JlYXRlKG1Ib3N0LCBtVGlsZXMuZ2V0KGkpKTsKKyAgICAgICAgICAgICAgICB0aWxlLnNldFRpbGVTcGVjKG1UaWxlcy5nZXQoaSkpOworICAgICAgICAgICAgICAgIG1DdXJyZW50VGlsZXMuYWRkKHRpbGUpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBRU1RpbGU8Pz4gdGlsZSA9IG1Ib3N0LmNyZWF0ZVRpbGUobVRpbGVzLmdldChpKSk7CiAgICAgICAgICAgICAgICAgaWYgKHRpbGUgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICB0aWxlLnNldFRpbGVTcGVjKG1UaWxlcy5nZXQoaSkpOwogICAgICAgICAgICAgICAgICAgICBtQ3VycmVudFRpbGVzLmFkZCh0aWxlKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgIlNraXBwaW5nICIgKyBtVGlsZXMuZ2V0KGkpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtQ3VycmVudFRpbGVzLmdldChtQ3VycmVudFRpbGVzLnNpemUoKSAtIDEpLnNldFRpbGVTcGVjKG1UaWxlcy5nZXQoaSkpOwogICAgICAgICB9CiAgICAgICAgIHN1cGVyLnNldFRpbGVzKG1DdXJyZW50VGlsZXMpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGFkZFRpbGUoU3RyaW5nIHNwZWMpIHsKKyAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJhZGRUaWxlICIgKyBzcGVjKTsKICAgICAgICAgbVRpbGVzLmFkZChzcGVjKTsKICAgICAgICAgc2V0VGlsZXNJbnRlcm5hbCgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIG1vdmVUbyhTdHJpbmcgZnJvbSwgU3RyaW5nIHRvKSB7CisgICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLCAibW92ZVRvICIgKyBmcm9tICsgIiAiICsgdG8pOwogICAgICAgICBpbnQgZnJvbUluZGV4ID0gbVRpbGVzLmluZGV4T2YoZnJvbSk7CiAgICAgICAgIGlmIChmcm9tSW5kZXggPCAwKSB7CiAgICAgICAgICAgICBMb2cuZShUQUcsICJVbmtub3duIGZyb20gdGlsZSAiICsgZnJvbSk7CkBAIC0yMjAsNiArMjEyLDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRUaWxlcyhMaXN0PFN0cmluZz4gdGlsZXMpIHsKKyAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJTZXQgdGlsZXMgIiArIFRleHRVdGlscy5qb2luKCIsIiwgdGlsZXMpKTsKICAgICAgICAgbVRpbGVzID0gbmV3IEFycmF5TGlzdDw+KHRpbGVzKTsKICAgICAgICAgc2V0VGlsZXNJbnRlcm5hbCgpOwogICAgIH0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy9jdXN0b21pemUvVGlsZUFkYXB0ZXIuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy9jdXN0b21pemUvVGlsZUFkYXB0ZXIuamF2YQppbmRleCA2NzA2YzdhLi5hNmE3MTQzIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvY3VzdG9taXplL1RpbGVBZGFwdGVyLmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL2N1c3RvbWl6ZS9UaWxlQWRhcHRlci5qYXZhCkBAIC00MSw3ICs0MSw3IEBACiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuUjsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5xcy5RU1RpbGU7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucXMuUVNUaWxlLkljb247Ci1pbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucXMudGlsZXMuQ3VzdG9tVGlsZTsKK2ltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5xcy5leHRlcm5hbC5DdXN0b21UaWxlOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnN0YXR1c2Jhci5waG9uZS5RU1RpbGVIb3N0OwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnR1bmVyLlFTUGFnaW5nU3dpdGNoOwogCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvdGlsZXMvQ3VzdG9tVGlsZS5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL2V4dGVybmFsL0N1c3RvbVRpbGUuamF2YQpzaW1pbGFyaXR5IGluZGV4IDY3JQpyZW5hbWUgZnJvbSBwYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvdGlsZXMvQ3VzdG9tVGlsZS5qYXZhCnJlbmFtZSB0byBwYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvZXh0ZXJuYWwvQ3VzdG9tVGlsZS5qYXZhCmluZGV4IGJiNzRmMzQuLjJlNWEwYjIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy90aWxlcy9DdXN0b21UaWxlLmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL2V4dGVybmFsL0N1c3RvbVRpbGUuamF2YQpAQCAtMTEsMzIgKzExLDI2IEBACiAgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlCiAgKi8KK3BhY2thZ2UgY29tLmFuZHJvaWQuc3lzdGVtdWkucXMuZXh0ZXJuYWw7CiAKLXBhY2thZ2UgY29tLmFuZHJvaWQuc3lzdGVtdWkucXMudGlsZXM7Ci0KLWltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5hcHAuU2VydmljZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZTsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5TZXJ2aWNlQ29ubmVjdGlvbjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlNlcnZpY2VJbmZvOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGU7CiBpbXBvcnQgYW5kcm9pZC5vcy5CaW5kZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOwogaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwotaW1wb3J0IGFuZHJvaWQub3MuVXNlckhhbmRsZTsKIGltcG9ydCBhbmRyb2lkLnNlcnZpY2UucXVpY2tzZXR0aW5ncy5JUVNUaWxlU2VydmljZTsKIGltcG9ydCBhbmRyb2lkLnNlcnZpY2UucXVpY2tzZXR0aW5ncy5UaWxlOworaW1wb3J0IGFuZHJvaWQuc2VydmljZS5xdWlja3NldHRpbmdzLlRpbGVTZXJ2aWNlOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiBpbXBvcnQgYW5kcm9pZC52aWV3LklXaW5kb3dNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyR2xvYmFsOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLmxvZ2dpbmcuTWV0cmljc0xvZ2dlcjsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5xcy5RU1RpbGU7Ci1pbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucXMuUVNUaWxlU2VydmljZVdyYXBwZXI7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLnBob25lLlFTVGlsZUhvc3Q7CiAKIHB1YmxpYyBjbGFzcyBDdXN0b21UaWxlIGV4dGVuZHMgUVNUaWxlPFFTVGlsZS5TdGF0ZT4gewpAQCAtNTIsOCArNDYsOSBAQAogICAgIHByaXZhdGUgZmluYWwgVGlsZSBtVGlsZTsKICAgICBwcml2YXRlIGZpbmFsIElXaW5kb3dNYW5hZ2VyIG1XaW5kb3dNYW5hZ2VyOwogICAgIHByaXZhdGUgZmluYWwgSUJpbmRlciBtVG9rZW4gPSBuZXcgQmluZGVyKCk7CisgICAgcHJpdmF0ZSBmaW5hbCBJUVNUaWxlU2VydmljZSBtU2VydmljZTsKKyAgICBwcml2YXRlIGZpbmFsIFRpbGVTZXJ2aWNlTWFuYWdlciBtU2VydmljZU1hbmFnZXI7CiAKLSAgICBwcml2YXRlIFFTVGlsZVNlcnZpY2VXcmFwcGVyIG1TZXJ2aWNlOwogICAgIHByaXZhdGUgYm9vbGVhbiBtTGlzdGVuaW5nOwogICAgIHByaXZhdGUgYm9vbGVhbiBtQm91bmQ7CiAgICAgcHJpdmF0ZSBib29sZWFuIG1Jc1Rva2VuR3JhbnRlZDsKQEAgLTYzLDcgKzU4LDkgQEAKICAgICAgICAgc3VwZXIoaG9zdCk7CiAgICAgICAgIG1XaW5kb3dNYW5hZ2VyID0gV2luZG93TWFuYWdlckdsb2JhbC5nZXRXaW5kb3dNYW5hZ2VyU2VydmljZSgpOwogICAgICAgICBtQ29tcG9uZW50ID0gQ29tcG9uZW50TmFtZS51bmZsYXR0ZW5Gcm9tU3RyaW5nKGFjdGlvbik7Ci0gICAgICAgIG1UaWxlID0gbmV3IFRpbGUobUNvbXBvbmVudCwgaG9zdCk7CisgICAgICAgIG1TZXJ2aWNlTWFuYWdlciA9IGhvc3QuZ2V0VGlsZVNlcnZpY2VzKCkuZ2V0VGlsZVdyYXBwZXIodGhpcyk7CisgICAgICAgIG1TZXJ2aWNlID0gbVNlcnZpY2VNYW5hZ2VyLmdldFRpbGVTZXJ2aWNlKCk7CisgICAgICAgIG1UaWxlID0gbmV3IFRpbGUobUNvbXBvbmVudCk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBQYWNrYWdlTWFuYWdlciBwbSA9IG1Db250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCk7CiAgICAgICAgICAgICBTZXJ2aWNlSW5mbyBpbmZvID0gcG0uZ2V0U2VydmljZUluZm8obUNvbXBvbmVudCwgMCk7CkBAIC03Miw2ICs2OSwxMSBAQAogICAgICAgICAgICAgbVRpbGUuc2V0TGFiZWwoaW5mby5sb2FkTGFiZWwocG0pKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgfQorICAgICAgICB0cnkgeworICAgICAgICAgICAgbVNlcnZpY2Uuc2V0UVNUaWxlKG1UaWxlKTsKKyAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIC8vIENhbGxlZCB0aHJvdWdoIHdyYXBwZXIsIHdvbid0IGhhcHBlbiBoZXJlLgorICAgICAgICB9CiAgICAgfQogCiAgICAgcHVibGljIENvbXBvbmVudE5hbWUgZ2V0Q29tcG9uZW50KCkgewpAQCAtOTYsNDIgKzk4LDMzIEBACiAgICAgcHVibGljIHZvaWQgc2V0TGlzdGVuaW5nKGJvb2xlYW4gbGlzdGVuaW5nKSB7CiAgICAgICAgIGlmIChtTGlzdGVuaW5nID09IGxpc3RlbmluZykgcmV0dXJuOwogICAgICAgICBtTGlzdGVuaW5nID0gbGlzdGVuaW5nOwotICAgICAgICBpZiAobGlzdGVuaW5nKSB7Ci0gICAgICAgICAgICBtSGFuZGxlci5yZW1vdmVDYWxsYmFja3MobVVuYmluZCk7Ci0gICAgICAgICAgICBpZiAoIW1Cb3VuZCkgewotICAgICAgICAgICAgICAgIC8vIFRPRE86IEd1YXJhbnRlZSByZS1iaW5kIG9uIHVzZXItc3dpdGNoLgotICAgICAgICAgICAgICAgIG1Db250ZXh0LmJpbmRTZXJ2aWNlQXNVc2VyKG5ldyBJbnRlbnQoKS5zZXRDb21wb25lbnQobUNvbXBvbmVudCksCi0gICAgICAgICAgICAgICAgICAgICAgICBtU2VydmljZUNvbm5lY3Rpb24sIFNlcnZpY2UuQklORF9BVVRPX0NSRUFURSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBVc2VySGFuZGxlKEFjdGl2aXR5TWFuYWdlci5nZXRDdXJyZW50VXNlcigpKSk7Ci0gICAgICAgICAgICAgICAgbUJvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1TZXJ2aWNlICE9IG51bGwpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlmIChsaXN0ZW5pbmcpIHsKKyAgICAgICAgICAgICAgICBpZiAobVNlcnZpY2VNYW5hZ2VyLmdldFR5cGUoKSA9PSBUaWxlU2VydmljZS5USUxFX01PREVfUEFTU0lWRSkgeworICAgICAgICAgICAgICAgICAgICBtU2VydmljZU1hbmFnZXIuc2V0QmluZFJlcXVlc3RlZCh0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgbVNlcnZpY2Uub25TdGFydExpc3RlbmluZygpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIExvZy5kKFRBRywgIkNhbid0IHN0YXJ0IHNlcnZpY2UgbGlzdGVuaW5nIik7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKG1TZXJ2aWNlICE9IG51bGwpIHsKKyAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgbVNlcnZpY2Uub25TdG9wTGlzdGVuaW5nKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobUlzVG9rZW5HcmFudGVkICYmICFtSXNTaG93aW5nRGlhbG9nKSB7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJSZW1vdmluZyB0b2tlbiIpOwotICAgICAgICAgICAgICAgICAgICBtV2luZG93TWFuYWdlci5yZW1vdmVXaW5kb3dUb2tlbihtVG9rZW4pOwotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgaWYgKG1Jc1Rva2VuR3JhbnRlZCAmJiAhbUlzU2hvd2luZ0RpYWxvZykgeworICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJSZW1vdmluZyB0b2tlbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgbVdpbmRvd01hbmFnZXIucmVtb3ZlV2luZG93VG9rZW4obVRva2VuKTsKKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBtSXNUb2tlbkdyYW50ZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbUlzVG9rZW5HcmFudGVkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgbUlzU2hvd2luZ0RpYWxvZyA9IGZhbHNlOworICAgICAgICAgICAgICAgIG1TZXJ2aWNlTWFuYWdlci5zZXRCaW5kUmVxdWVzdGVkKGZhbHNlKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1Jc1Nob3dpbmdEaWFsb2cgPSBmYWxzZTsKLSAgICAgICAgICAgIG1IYW5kbGVyLnBvc3REZWxheWVkKG1VbmJpbmQsIFVOQklORF9ERUxBWSk7CisgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAvLyBDYWxsZWQgdGhyb3VnaCB3cmFwcGVyLCB3b24ndCBoYXBwZW4gaGVyZS4KICAgICAgICAgfQogICAgIH0KIAogICAgIEBPdmVycmlkZQogICAgIHByb3RlY3RlZCB2b2lkIGhhbmRsZURlc3Ryb3koKSB7CiAgICAgICAgIHN1cGVyLmhhbmRsZURlc3Ryb3koKTsKLSAgICAgICAgbUhhbmRsZXIucmVtb3ZlQ2FsbGJhY2tzKG1VbmJpbmQpOwogICAgICAgICBpZiAobUlzVG9rZW5HcmFudGVkKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLCAiUmVtb3ZpbmcgdG9rZW4iKTsKQEAgLTEzOSw3ICsxMzIsNiBAQAogICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBtVW5iaW5kLnJ1bigpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpAQCAtMTU0LDE2ICsxNDYsMjAgQEAKIAogICAgIEBPdmVycmlkZQogICAgIHByb3RlY3RlZCB2b2lkIGhhbmRsZUNsaWNrKCkgewotICAgICAgICBpZiAobVNlcnZpY2UgIT0gbnVsbCkgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgIkFkZGluZyB0b2tlbiIpOwotICAgICAgICAgICAgICAgIG1XaW5kb3dNYW5hZ2VyLmFkZFdpbmRvd1Rva2VuKG1Ub2tlbiwgV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuVFlQRV9RU19ESUFMT0cpOwotICAgICAgICAgICAgICAgIG1Jc1Rva2VuR3JhbnRlZCA9IHRydWU7Ci0gICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJBZGRpbmcgdG9rZW4iKTsKKyAgICAgICAgICAgIG1XaW5kb3dNYW5hZ2VyLmFkZFdpbmRvd1Rva2VuKG1Ub2tlbiwgV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuVFlQRV9RU19ESUFMT0cpOworICAgICAgICAgICAgbUlzVG9rZW5HcmFudGVkID0gdHJ1ZTsKKyAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgfQorICAgICAgICB0cnkgeworICAgICAgICAgICAgaWYgKG1TZXJ2aWNlTWFuYWdlci5nZXRUeXBlKCkgPT0gVGlsZVNlcnZpY2UuVElMRV9NT0RFX0FDVElWRSkgeworICAgICAgICAgICAgICAgIG1TZXJ2aWNlTWFuYWdlci5zZXRCaW5kUmVxdWVzdGVkKHRydWUpOworICAgICAgICAgICAgICAgIG1TZXJ2aWNlLm9uU3RhcnRMaXN0ZW5pbmcoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1TZXJ2aWNlLm9uQ2xpY2sobVRva2VuKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIExvZy5lKFRBRywgIkNsaWNrIHdpdGggbm8gc2VydmljZSAiICsgZ2V0VGlsZVNwZWMoKSk7CisgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAvLyBDYWxsZWQgdGhyb3VnaCB3cmFwcGVyLCB3b24ndCBoYXBwZW4gaGVyZS4KICAgICAgICAgfQogICAgICAgICBNZXRyaWNzTG9nZ2VyLmFjdGlvbihtQ29udGV4dCwgZ2V0TWV0cmljc0NhdGVnb3J5KCksIG1Db21wb25lbnQuZ2V0UGFja2FnZU5hbWUoKSk7CiAgICAgfQpAQCAtMTg3LDM0ICsxODMsOSBAQAogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGludCBnZXRNZXRyaWNzQ2F0ZWdvcnkoKSB7Ci0gICAgICAgIHJldHVybiBNZXRyaWNzTG9nZ2VyLlFTX0lOVEVOVDsKKyAgICAgICAgcmV0dXJuIE1ldHJpY3NMb2dnZXIuUVNfQ1VTVE9NOwogICAgIH0KIAotICAgIHByaXZhdGUgZmluYWwgU2VydmljZUNvbm5lY3Rpb24gbVNlcnZpY2VDb25uZWN0aW9uID0gbmV3IFNlcnZpY2VDb25uZWN0aW9uKCkgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25TZXJ2aWNlQ29ubmVjdGVkKENvbXBvbmVudE5hbWUgbmFtZSwgSUJpbmRlciBzZXJ2aWNlKSB7Ci0gICAgICAgICAgICBtU2VydmljZSA9IG5ldyBRU1RpbGVTZXJ2aWNlV3JhcHBlcihJUVNUaWxlU2VydmljZS5TdHViLmFzSW50ZXJmYWNlKHNlcnZpY2UpKTsKLSAgICAgICAgICAgIGlmIChtTGlzdGVuaW5nKSB7Ci0gICAgICAgICAgICAgICAgbVNlcnZpY2Uuc2V0UVNUaWxlKG1UaWxlKTsKLSAgICAgICAgICAgICAgICBtU2VydmljZS5vblN0YXJ0TGlzdGVuaW5nKCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG1TZXJ2aWNlLm9uU3RvcExpc3RlbmluZygpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uU2VydmljZURpc2Nvbm5lY3RlZChDb21wb25lbnROYW1lIG5hbWUpIHsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBwcml2YXRlIGZpbmFsIFJ1bm5hYmxlIG1VbmJpbmQgPSBuZXcgUnVubmFibGUoKSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAgICBtQ29udGV4dC51bmJpbmRTZXJ2aWNlKG1TZXJ2aWNlQ29ubmVjdGlvbik7Ci0gICAgICAgICAgICBtQm91bmQgPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH07Ci0KICAgICBwdWJsaWMgc3RhdGljIENvbXBvbmVudE5hbWUgZ2V0Q29tcG9uZW50RnJvbVNwZWMoU3RyaW5nIHNwZWMpIHsKICAgICAgICAgZmluYWwgU3RyaW5nIGFjdGlvbiA9IHNwZWMuc3Vic3RyaW5nKFBSRUZJWC5sZW5ndGgoKSwgc3BlYy5sZW5ndGgoKSAtIDEpOwogICAgICAgICBpZiAoYWN0aW9uLmlzRW1wdHkoKSkgewpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL2V4dGVybmFsL1FTVGlsZVNlcnZpY2VXcmFwcGVyLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvZXh0ZXJuYWwvUVNUaWxlU2VydmljZVdyYXBwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDFjZGRlCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL2V4dGVybmFsL1FTVGlsZVNlcnZpY2VXcmFwcGVyLmphdmEKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZQorICovCitwYWNrYWdlIGNvbS5hbmRyb2lkLnN5c3RlbXVpLnFzLmV4dGVybmFsOworCitpbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOworaW1wb3J0IGFuZHJvaWQuc2VydmljZS5xdWlja3NldHRpbmdzLklRU1NlcnZpY2U7CitpbXBvcnQgYW5kcm9pZC5zZXJ2aWNlLnF1aWNrc2V0dGluZ3MuSVFTVGlsZVNlcnZpY2U7CitpbXBvcnQgYW5kcm9pZC5zZXJ2aWNlLnF1aWNrc2V0dGluZ3MuVGlsZTsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOworCisKK3B1YmxpYyBjbGFzcyBRU1RpbGVTZXJ2aWNlV3JhcHBlciB7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJJUVNUaWxlU2VydmljZVdyYXBwZXIiOworCisgICAgcHJpdmF0ZSBmaW5hbCBJUVNUaWxlU2VydmljZSBtU2VydmljZTsKKworICAgIHB1YmxpYyBRU1RpbGVTZXJ2aWNlV3JhcHBlcihJUVNUaWxlU2VydmljZSBzZXJ2aWNlKSB7CisgICAgICAgIG1TZXJ2aWNlID0gc2VydmljZTsKKyAgICB9CisKKyAgICBwdWJsaWMgSUJpbmRlciBhc0JpbmRlcigpIHsKKyAgICAgICAgcmV0dXJuIG1TZXJ2aWNlLmFzQmluZGVyKCk7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gc2V0UVNUaWxlKFRpbGUgdGlsZSkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgbVNlcnZpY2Uuc2V0UVNUaWxlKHRpbGUpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBMb2cuZChUQUcsICJDYXVnaHQgZXhjZXB0aW9uIGZyb20gVGlsZVNlcnZpY2UiLCBlKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIG9uVGlsZUFkZGVkKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgbVNlcnZpY2Uub25UaWxlQWRkZWQoKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgTG9nLmQoVEFHLCAiQ2F1Z2h0IGV4Y2VwdGlvbiBmcm9tIFRpbGVTZXJ2aWNlIiwgZSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBvblRpbGVSZW1vdmVkKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgbVNlcnZpY2Uub25UaWxlUmVtb3ZlZCgpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBMb2cuZChUQUcsICJDYXVnaHQgZXhjZXB0aW9uIGZyb20gVGlsZVNlcnZpY2UiLCBlKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIG9uU3RhcnRMaXN0ZW5pbmcoKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBtU2VydmljZS5vblN0YXJ0TGlzdGVuaW5nKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIExvZy5kKFRBRywgIkNhdWdodCBleGNlcHRpb24gZnJvbSBUaWxlU2VydmljZSIsIGUpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gb25TdG9wTGlzdGVuaW5nKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgbVNlcnZpY2Uub25TdG9wTGlzdGVuaW5nKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIExvZy5kKFRBRywgIkNhdWdodCBleGNlcHRpb24gZnJvbSBUaWxlU2VydmljZSIsIGUpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gb25DbGljayhJQmluZGVyIHRva2VuKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBtU2VydmljZS5vbkNsaWNrKHRva2VuKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgTG9nLmQoVEFHLCAiQ2F1Z2h0IGV4Y2VwdGlvbiBmcm9tIFRpbGVTZXJ2aWNlIiwgZSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBzZXRRU1NlcnZpY2UoSVFTU2VydmljZSBzZXJ2aWNlKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBtU2VydmljZS5zZXRRU1NlcnZpY2Uoc2VydmljZSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIExvZy5kKFRBRywgIkNhdWdodCBleGNlcHRpb24gZnJvbSBUaWxlU2VydmljZSIsIGUpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL2V4dGVybmFsL1RpbGVMaWZlY3ljbGVNYW5hZ2VyLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvZXh0ZXJuYWwvVGlsZUxpZmVjeWNsZU1hbmFnZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzVlODdlCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL2V4dGVybmFsL1RpbGVMaWZlY3ljbGVNYW5hZ2VyLmphdmEKQEAgLTAsMCArMSwzNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZQorICovCitwYWNrYWdlIGNvbS5hbmRyb2lkLnN5c3RlbXVpLnFzLmV4dGVybmFsOworCitpbXBvcnQgYW5kcm9pZC5hcHAuQXBwR2xvYmFsczsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQnJvYWRjYXN0UmVjZWl2ZXI7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWU7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50RmlsdGVyOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5TZXJ2aWNlQ29ubmVjdGlvbjsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlNlcnZpY2VJbmZvOworaW1wb3J0IGFuZHJvaWQubmV0LlVyaTsKK2ltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOworaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOworaW1wb3J0IGFuZHJvaWQub3MuVXNlckhhbmRsZTsKK2ltcG9ydCBhbmRyb2lkLnNlcnZpY2UucXVpY2tzZXR0aW5ncy5JUVNTZXJ2aWNlOworaW1wb3J0IGFuZHJvaWQuc2VydmljZS5xdWlja3NldHRpbmdzLklRU1RpbGVTZXJ2aWNlOworaW1wb3J0IGFuZHJvaWQuc2VydmljZS5xdWlja3NldHRpbmdzLlRpbGU7CitpbXBvcnQgYW5kcm9pZC5zdXBwb3J0LmFubm90YXRpb24uVmlzaWJsZUZvclRlc3Rpbmc7CitpbXBvcnQgYW5kcm9pZC51dGlsLkFycmF5U2V0OworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CitpbXBvcnQgbGliY29yZS51dGlsLk9iamVjdHM7CisKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworCisvKioKKyAqIE1hbmFnZXMgdGhlIGxpZmVjeWNsZSBvZiBhIFRpbGVTZXJ2aWNlLgorICogPHA+CisgKiBXaWxsIGtlZXAgdHJhY2sgb2YgYWxsIGNhbGxzIG9uIHRoZSBJUVNUaWxlU2VydmljZSBpbnRlcmZhY2UgYW5kIHdpbGwgcmVsYXkgdGhvc2UgY2FsbHMgdG8gdGhlCisgKiBUaWxlU2VydmljZSBhcyBzb29uIGFzIGl0IGlzIGJvdW5kLiAgSXQgd2lsbCBvbmx5IGJpbmQgdG8gdGhlIHNlcnZpY2Ugd2hlbiBpdCBpcyBhbGxvd2VkIHRvCisgKiAoe0BsaW5rICNzZXRCaW5kU2VydmljZShib29sZWFuKX0pIGFuZCB3aGVuIHRoZSBzZXJ2aWNlIGlzIGF2YWlsYWJsZS4KKyAqLworcHVibGljIGNsYXNzIFRpbGVMaWZlY3ljbGVNYW5hZ2VyIGV4dGVuZHMgQnJvYWRjYXN0UmVjZWl2ZXIgaW1wbGVtZW50cworICAgICAgICBJUVNUaWxlU2VydmljZSwgU2VydmljZUNvbm5lY3Rpb24sIElCaW5kZXIuRGVhdGhSZWNpcGllbnQgeworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IGZhbHNlOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJUaWxlTGlmZWN5Y2xlTWFuYWdlciI7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTVNHX09OX0FEREVEID0gMDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTVNHX09OX1JFTU9WRUQgPSAxOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNU0dfT05fQ0xJQ0sgPSAyOworCisgICAgLy8gQmluZCByZXRyeSBjb250cm9sLgorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVhfQklORF9SRVRSSUVTID0gNTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQklORF9SRVRSWV9ERUxBWSA9IDEwMDA7CisKKyAgICBwcml2YXRlIGZpbmFsIENvbnRleHQgbUNvbnRleHQ7CisgICAgcHJpdmF0ZSBmaW5hbCBIYW5kbGVyIG1IYW5kbGVyOworICAgIHByaXZhdGUgZmluYWwgSW50ZW50IG1JbnRlbnQ7CisgICAgcHJpdmF0ZSBmaW5hbCBVc2VySGFuZGxlIG1Vc2VyOworCisgICAgcHJpdmF0ZSBTZXQ8SW50ZWdlcj4gbVF1ZXVlZE1lc3NhZ2VzID0gbmV3IEFycmF5U2V0PD4oKTsKKyAgICBwcml2YXRlIFFTVGlsZVNlcnZpY2VXcmFwcGVyIG1XcmFwcGVyOworICAgIHByaXZhdGUgYm9vbGVhbiBtTGlzdGVuaW5nOworICAgIHByaXZhdGUgVGlsZSBtVGlsZTsKKyAgICBwcml2YXRlIElCaW5kZXIgbUNsaWNrQmluZGVyOworCisgICAgcHJpdmF0ZSBpbnQgbUJpbmRUcnlDb3VudDsKKyAgICBwcml2YXRlIGJvb2xlYW4gbUJvdW5kOworICAgIEBWaXNpYmxlRm9yVGVzdGluZworICAgIGJvb2xlYW4gbVJlY2VpdmVyUmVnaXN0ZXJlZDsKKyAgICBwcml2YXRlIElRU1NlcnZpY2UgbVNlcnZpY2U7CisgICAgcHJpdmF0ZSBib29sZWFuIG1VbmJpbmRJbW1lZGlhdGU7CisKKyAgICBwdWJsaWMgVGlsZUxpZmVjeWNsZU1hbmFnZXIoSGFuZGxlciBoYW5kbGVyLCBDb250ZXh0IGNvbnRleHQsIEludGVudCBpbnRlbnQsIFVzZXJIYW5kbGUgdXNlcikgeworICAgICAgICBtQ29udGV4dCA9IGNvbnRleHQ7CisgICAgICAgIG1IYW5kbGVyID0gaGFuZGxlcjsKKyAgICAgICAgbUludGVudCA9IGludGVudDsKKyAgICAgICAgbVVzZXIgPSB1c2VyOworICAgIH0KKworICAgIHB1YmxpYyBDb21wb25lbnROYW1lIGdldENvbXBvbmVudCgpIHsKKyAgICAgICAgcmV0dXJuIG1JbnRlbnQuZ2V0Q29tcG9uZW50KCk7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gaGFzUGVuZGluZ0NsaWNrKCkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKG1RdWV1ZWRNZXNzYWdlcykgeworICAgICAgICAgICAgcmV0dXJuIG1RdWV1ZWRNZXNzYWdlcy5jb250YWlucyhNU0dfT05fQ0xJQ0spOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQmluZHMganVzdCBsb25nIGVub3VnaCB0byBzZW5kIGFueSBxdWV1ZWQgbWVzc2FnZXMsIHRoZW4gdW5iaW5kcy4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBmbHVzaE1lc3NhZ2VzQW5kVW5iaW5kKCkgeworICAgICAgICBtVW5iaW5kSW1tZWRpYXRlID0gdHJ1ZTsKKyAgICAgICAgc2V0QmluZFNlcnZpY2UodHJ1ZSk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0QmluZFNlcnZpY2UoYm9vbGVhbiBiaW5kKSB7CisgICAgICAgIG1Cb3VuZCA9IGJpbmQ7CisgICAgICAgIGlmIChiaW5kKSB7CisgICAgICAgICAgICBpZiAobUJpbmRUcnlDb3VudCA9PSBNQVhfQklORF9SRVRSSUVTKSB7CisgICAgICAgICAgICAgICAgLy8gVG9vIG1hbnkgZmFpbHVyZXMsIGdpdmUgdXAgb24gdGhpcyB0aWxlIHVudGlsIGFuIHVwZGF0ZS4KKyAgICAgICAgICAgICAgICBzdGFydFBhY2thZ2VMaXN0ZW5pbmcoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWNoZWNrQ29tcG9uZW50U3RhdGUoKSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLCAiQmluZGluZyBzZXJ2aWNlICIgKyBtSW50ZW50KTsKKyAgICAgICAgICAgIG1CaW5kVHJ5Q291bnQrKzsKKyAgICAgICAgICAgIG1Db250ZXh0LmJpbmRTZXJ2aWNlQXNVc2VyKG1JbnRlbnQsIHRoaXMsCisgICAgICAgICAgICAgICAgICAgIENvbnRleHQuQklORF9BVVRPX0NSRUFURSB8IENvbnRleHQuQklORF9GT1JFR1JPVU5EX1NFUlZJQ0VfV0hJTEVfQVdBS0UsCisgICAgICAgICAgICAgICAgICAgIG1Vc2VyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLCAiVW5iaW5kaW5nIHNlcnZpY2UgIiArIG1JbnRlbnQpOworICAgICAgICAgICAgLy8gR2l2ZSBpdCBhbm90aGVyIGNoYW5jZSBuZXh0IHRpbWUgaXQgbmVlZHMgdG8gYmUgYm91bmQsIG91dCBvZiBraW5kbmVzcy4KKyAgICAgICAgICAgIG1CaW5kVHJ5Q291bnQgPSAwOworICAgICAgICAgICAgbVdyYXBwZXIgPSBudWxsOworICAgICAgICAgICAgbUNvbnRleHQudW5iaW5kU2VydmljZSh0aGlzKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uU2VydmljZUNvbm5lY3RlZChDb21wb25lbnROYW1lIG5hbWUsIElCaW5kZXIgc2VydmljZSkgeworICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgIm9uU2VydmljZUNvbm5lY3RlZCAiICsgbmFtZSk7CisgICAgICAgIC8vIEdvdCBhIGNvbm5lY3Rpb24sIHNldCB0aGUgYmluZGluZyBjb3VudCB0byAwLgorICAgICAgICBtQmluZFRyeUNvdW50ID0gMDsKKyAgICAgICAgbVdyYXBwZXIgPSBuZXcgUVNUaWxlU2VydmljZVdyYXBwZXIoU3R1Yi5hc0ludGVyZmFjZShzZXJ2aWNlKSk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBzZXJ2aWNlLmxpbmtUb0RlYXRoKHRoaXMsIDApOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICB9CisgICAgICAgIHNldFFTU2VydmljZShtU2VydmljZSk7CisgICAgICAgIHNldFFTVGlsZShtVGlsZSk7CisgICAgICAgIGhhbmRsZVBlbmRpbmdNZXNzYWdlcygpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uU2VydmljZURpc2Nvbm5lY3RlZChDb21wb25lbnROYW1lIG5hbWUpIHsKKyAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJvblNlcnZpY2VEaXNjb25uZWN0ZWQgIiArIG5hbWUpOworICAgICAgICBtV3JhcHBlciA9IG51bGw7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGhhbmRsZVBlbmRpbmdNZXNzYWdlcygpIHsKKyAgICAgICAgLy8gVGhpcyBvcmRlcmluZyBpcyBsYWlkIG91dCBtYW51YWxseSB0byBtYWtlIHN1cmUgd2UgcHJlc2VydmUgdGhlIFRpbGVTZXJ2aWNlCisgICAgICAgIC8vIGxpZmVjeWNsZS4KKyAgICAgICAgQXJyYXlTZXQ8SW50ZWdlcj4gcXVldWU7CisgICAgICAgIHN5bmNocm9uaXplZCAobVF1ZXVlZE1lc3NhZ2VzKSB7CisgICAgICAgICAgICBxdWV1ZSA9IG5ldyBBcnJheVNldDw+KG1RdWV1ZWRNZXNzYWdlcyk7CisgICAgICAgICAgICBtUXVldWVkTWVzc2FnZXMuY2xlYXIoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocXVldWUuY29udGFpbnMoTVNHX09OX0FEREVEKSkgeworICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJIYW5kbGluZyBwZW5kaW5nIG9uQWRkZWQiKTsKKyAgICAgICAgICAgIG9uVGlsZUFkZGVkKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1MaXN0ZW5pbmcpIHsKKyAgICAgICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLCAiSGFuZGxpbmcgcGVuZGluZyBvblN0YXJ0TGlzdGVuaW5nIik7CisgICAgICAgICAgICBvblN0YXJ0TGlzdGVuaW5nKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHF1ZXVlLmNvbnRhaW5zKE1TR19PTl9DTElDSykpIHsKKyAgICAgICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLCAiSGFuZGxpbmcgcGVuZGluZyBvbkNsaWNrIik7CisgICAgICAgICAgICBpZiAoIW1MaXN0ZW5pbmcpIHsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJNYW5hZ2VkIHRvIGdldCBjbGljayBvbiBub24tbGlzdGVuaW5nIHN0YXRlLi4uIik7CisgICAgICAgICAgICAgICAgLy8gU2tpcHBpbmcgY2xpY2sgc2luY2UgbG9zdCBjbGljayBwcml2aWxlZ2VzLgorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBvbkNsaWNrKG1DbGlja0JpbmRlcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHF1ZXVlLmNvbnRhaW5zKE1TR19PTl9SRU1PVkVEKSkgeworICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJIYW5kbGluZyBwZW5kaW5nIG9uUmVtb3ZlZCIpOworICAgICAgICAgICAgaWYgKG1MaXN0ZW5pbmcpIHsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJNYW5hZ2VkIHRvIGdldCByZW1vdmUgaW4gbGlzdGVuaW5nIHN0YXRlLi4uIik7CisgICAgICAgICAgICAgICAgb25TdG9wTGlzdGVuaW5nKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvblRpbGVSZW1vdmVkKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1VbmJpbmRJbW1lZGlhdGUpIHsKKyAgICAgICAgICAgIG1VbmJpbmRJbW1lZGlhdGUgPSBmYWxzZTsKKyAgICAgICAgICAgIHNldEJpbmRTZXJ2aWNlKGZhbHNlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGhhbmRsZURlc3Ryb3koKSB7CisgICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLCAiaGFuZGxlRGVzdHJveSIpOworICAgICAgICBpZiAobVJlY2VpdmVyUmVnaXN0ZXJlZCkgeworICAgICAgICAgICAgc3RvcFBhY2thZ2VMaXN0ZW5pbmcoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBoYW5kbGVEZWF0aCgpIHsKKyAgICAgICAgaWYgKG1XcmFwcGVyID09IG51bGwpIHJldHVybjsKKyAgICAgICAgbVdyYXBwZXIgPSBudWxsOworICAgICAgICBpZiAoIW1Cb3VuZCkgcmV0dXJuOworICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgImhhbmRsZURlYXRoIik7CisgICAgICAgIGlmIChjaGVja0NvbXBvbmVudFN0YXRlKCkpIHsKKyAgICAgICAgICAgIG1IYW5kbGVyLnBvc3REZWxheWVkKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtQm91bmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJldHJ5IGJpbmRpbmcuCisgICAgICAgICAgICAgICAgICAgICAgICBzZXRCaW5kU2VydmljZSh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sIEJJTkRfUkVUUllfREVMQVkpOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgc2V0UVNUaWxlKFRpbGUgdGlsZSkgeworICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgInNldFFTVGlsZSAiICsgdGlsZSk7CisgICAgICAgIG1UaWxlID0gdGlsZTsKKyAgICAgICAgaWYgKG1XcmFwcGVyICE9IG51bGwgJiYgIW1XcmFwcGVyLnNldFFTVGlsZSh0aWxlKSkgeworICAgICAgICAgICAgaGFuZGxlRGVhdGgoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgYm9vbGVhbiBjaGVja0NvbXBvbmVudFN0YXRlKCkgeworICAgICAgICBQYWNrYWdlTWFuYWdlciBwbSA9IG1Db250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCk7CisgICAgICAgIGlmICghaXNQYWNrYWdlQXZhaWxhYmxlKHBtKSB8fCAhaXNDb21wb25lbnRBdmFpbGFibGUocG0pKSB7CisgICAgICAgICAgICBzdGFydFBhY2thZ2VMaXN0ZW5pbmcoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgc3RhcnRQYWNrYWdlTGlzdGVuaW5nKCkgeworICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgInN0YXJ0UGFja2FnZUxpc3RlbmluZyIpOworICAgICAgICBJbnRlbnRGaWx0ZXIgZmlsdGVyID0gbmV3IEludGVudEZpbHRlcihJbnRlbnQuQUNUSU9OX1BBQ0tBR0VfQURERUQpOworICAgICAgICBmaWx0ZXIuYWRkQWN0aW9uKEludGVudC5BQ1RJT05fUEFDS0FHRV9DSEFOR0VEKTsKKyAgICAgICAgZmlsdGVyLmFkZERhdGFTY2hlbWUoInBhY2thZ2UiKTsKKyAgICAgICAgbUNvbnRleHQucmVnaXN0ZXJSZWNlaXZlckFzVXNlcih0aGlzLCBtVXNlciwgZmlsdGVyLCBudWxsLCBtSGFuZGxlcik7CisgICAgICAgIG1SZWNlaXZlclJlZ2lzdGVyZWQgPSB0cnVlOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBzdG9wUGFja2FnZUxpc3RlbmluZygpIHsKKyAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJzdG9wUGFja2FnZUxpc3RlbmluZyIpOworICAgICAgICBtQ29udGV4dC51bnJlZ2lzdGVyUmVjZWl2ZXIodGhpcyk7CisgICAgICAgIG1SZWNlaXZlclJlZ2lzdGVyZWQgPSBmYWxzZTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvblJlY2VpdmUoQ29udGV4dCBjb250ZXh0LCBJbnRlbnQgaW50ZW50KSB7CisgICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLCAib25SZWNlaXZlOiAiICsgaW50ZW50KTsKKyAgICAgICAgVXJpIGRhdGEgPSBpbnRlbnQuZ2V0RGF0YSgpOworICAgICAgICBTdHJpbmcgcGtnTmFtZSA9IGRhdGEuZ2V0RW5jb2RlZFNjaGVtZVNwZWNpZmljUGFydCgpOworICAgICAgICBpZiAoIU9iamVjdHMuZXF1YWwocGtnTmFtZSwgbUludGVudC5nZXRDb21wb25lbnQoKS5nZXRQYWNrYWdlTmFtZSgpKSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHN0b3BQYWNrYWdlTGlzdGVuaW5nKCk7CisgICAgICAgIGlmIChtQm91bmQpIHsKKyAgICAgICAgICAgIC8vIFRyeWluZyB0byBiaW5kIGFnYWluIHdpbGwgY2hlY2sgdGhlIHN0YXRlIG9mIHRoZSBwYWNrYWdlIGJlZm9yZSBib3RoZXJpbmcgdG8gYmluZC4KKyAgICAgICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLCAiVHJ5aW5nIHRvIHJlYmluZCIpOworICAgICAgICAgICAgc2V0QmluZFNlcnZpY2UodHJ1ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGJvb2xlYW4gaXNDb21wb25lbnRBdmFpbGFibGUoUGFja2FnZU1hbmFnZXIgcG0pIHsKKyAgICAgICAgU3RyaW5nIHBhY2thZ2VOYW1lID0gbUludGVudC5nZXRDb21wb25lbnQoKS5nZXRQYWNrYWdlTmFtZSgpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgU2VydmljZUluZm8gc2kgPSBBcHBHbG9iYWxzLmdldFBhY2thZ2VNYW5hZ2VyKCkuZ2V0U2VydmljZUluZm8obUludGVudC5nZXRDb21wb25lbnQoKSwKKyAgICAgICAgICAgICAgICAgICAgMCwgbVVzZXIuZ2V0SWRlbnRpZmllcigpKTsKKyAgICAgICAgICAgIGlmIChERUJVRyAmJiBzaSA9PSBudWxsKSBMb2cuZChUQUcsICJDYW4ndCBmaW5kIGNvbXBvbmVudCAiICsgbUludGVudC5nZXRDb21wb25lbnQoKSk7CisgICAgICAgICAgICByZXR1cm4gc2kgIT0gbnVsbDsKKyAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIC8vIFNob3VsZG4ndCBoYXBwZW4uCisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHByaXZhdGUgYm9vbGVhbiBpc1BhY2thZ2VBdmFpbGFibGUoUGFja2FnZU1hbmFnZXIgcG0pIHsKKyAgICAgICAgU3RyaW5nIHBhY2thZ2VOYW1lID0gbUludGVudC5nZXRDb21wb25lbnQoKS5nZXRQYWNrYWdlTmFtZSgpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgcG0uZ2V0UGFja2FnZUluZm9Bc1VzZXIocGFja2FnZU5hbWUsIDAsIG1Vc2VyLmdldElkZW50aWZpZXIoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSBjYXRjaCAoUGFja2FnZU1hbmFnZXIuTmFtZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLCAiUGFja2FnZSBub3QgYXZhaWxhYmxlOiAiICsgcGFja2FnZU5hbWUsIGUpOworICAgICAgICAgICAgZWxzZSBMb2cuZChUQUcsICJQYWNrYWdlIG5vdCBhdmFpbGFibGU6ICIgKyBwYWNrYWdlTmFtZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBxdWV1ZU1lc3NhZ2UoaW50IG1lc3NhZ2UpIHsKKyAgICAgICAgc3luY2hyb25pemVkIChtUXVldWVkTWVzc2FnZXMpIHsKKyAgICAgICAgICAgIG1RdWV1ZWRNZXNzYWdlcy5hZGQobWVzc2FnZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBzZXRRU1NlcnZpY2UoSVFTU2VydmljZSBzZXJ2aWNlKSB7CisgICAgICAgIG1TZXJ2aWNlID0gc2VydmljZTsKKyAgICAgICAgaWYgKG1XcmFwcGVyID09IG51bGwgfHwgIW1XcmFwcGVyLnNldFFTU2VydmljZShzZXJ2aWNlKSkgeworICAgICAgICAgICAgaGFuZGxlRGVhdGgoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uVGlsZUFkZGVkKCkgeworICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgIm9uVGlsZUFkZGVkIik7CisgICAgICAgIGlmIChtV3JhcHBlciA9PSBudWxsIHx8ICFtV3JhcHBlci5vblRpbGVBZGRlZCgpKSB7CisgICAgICAgICAgICBxdWV1ZU1lc3NhZ2UoTVNHX09OX0FEREVEKTsKKyAgICAgICAgICAgIGhhbmRsZURlYXRoKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvblRpbGVSZW1vdmVkKCkgeworICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgIm9uVGlsZVJlbW92ZWQiKTsKKyAgICAgICAgaWYgKG1XcmFwcGVyID09IG51bGwgfHwgIW1XcmFwcGVyLm9uVGlsZVJlbW92ZWQoKSkgeworICAgICAgICAgICAgcXVldWVNZXNzYWdlKE1TR19PTl9SRU1PVkVEKTsKKyAgICAgICAgICAgIGhhbmRsZURlYXRoKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvblN0YXJ0TGlzdGVuaW5nKCkgeworICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgIm9uU3RhcnRMaXN0ZW5pbmciKTsKKyAgICAgICAgbUxpc3RlbmluZyA9IHRydWU7CisgICAgICAgIGlmIChtV3JhcHBlciAhPSBudWxsICYmICFtV3JhcHBlci5vblN0YXJ0TGlzdGVuaW5nKCkpIHsKKyAgICAgICAgICAgIGhhbmRsZURlYXRoKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvblN0b3BMaXN0ZW5pbmcoKSB7CisgICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLCAib25TdG9wTGlzdGVuaW5nIik7CisgICAgICAgIG1MaXN0ZW5pbmcgPSBmYWxzZTsKKyAgICAgICAgaWYgKG1XcmFwcGVyICE9IG51bGwgJiYgIW1XcmFwcGVyLm9uU3RvcExpc3RlbmluZygpKSB7CisgICAgICAgICAgICBoYW5kbGVEZWF0aCgpOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25DbGljayhJQmluZGVyIGlCaW5kZXIpIHsKKyAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJvbkNsaWNrICIgKyBpQmluZGVyKTsKKyAgICAgICAgaWYgKG1XcmFwcGVyID09IG51bGwgfHwgIW1XcmFwcGVyLm9uQ2xpY2soaUJpbmRlcikpIHsKKyAgICAgICAgICAgIG1DbGlja0JpbmRlciA9IGlCaW5kZXI7CisgICAgICAgICAgICBxdWV1ZU1lc3NhZ2UoTVNHX09OX0NMSUNLKTsKKyAgICAgICAgICAgIGhhbmRsZURlYXRoKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgSUJpbmRlciBhc0JpbmRlcigpIHsKKyAgICAgICAgcmV0dXJuIG1XcmFwcGVyICE9IG51bGwgPyBtV3JhcHBlci5hc0JpbmRlcigpIDogbnVsbDsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBiaW5kZXJEaWVkKCkgeworICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgImJpbmRlckRlYXRoIik7CisgICAgICAgIGhhbmRsZURlYXRoKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL2V4dGVybmFsL1RpbGVTZXJ2aWNlTWFuYWdlci5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL2V4dGVybmFsL1RpbGVTZXJ2aWNlTWFuYWdlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmNzdhMzAKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvZXh0ZXJuYWwvVGlsZVNlcnZpY2VNYW5hZ2VyLmphdmEKQEAgLTAsMCArMSwxOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZQorICovCitwYWNrYWdlIGNvbS5hbmRyb2lkLnN5c3RlbXVpLnFzLmV4dGVybmFsOworCitpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CitpbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOworaW1wb3J0IGFuZHJvaWQub3MuVXNlckhhbmRsZTsKK2ltcG9ydCBhbmRyb2lkLnNlcnZpY2UucXVpY2tzZXR0aW5ncy5JUVNUaWxlU2VydmljZTsKK2ltcG9ydCBhbmRyb2lkLnNlcnZpY2UucXVpY2tzZXR0aW5ncy5UaWxlU2VydmljZTsKK2ltcG9ydCBhbmRyb2lkLnN1cHBvcnQuYW5ub3RhdGlvbi5WaXNpYmxlRm9yVGVzdGluZzsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOworCisvKioKKyAqIE1hbmFnZXMgdGhlIHByaW9yaXR5IHdoaWNoIGxldHMge0BsaW5rIFRpbGVTZXJ2aWNlc30gbWFrZSBkZWNpc2lvbnMgYWJvdXQgd2hpY2ggdGlsZXMKKyAqIHRvIGJpbmQuICBBbHNvIGhvbGRzIG9uIHRvIGFuZCBtYW5hZ2VzIHRoZSB7QGxpbmsgVGlsZUxpZmVjeWNsZU1hbmFnZXJ9LCBpbmZvcm1pbmcgaXQKKyAqIG9mIHdoZW4gaXQgaXMgYWxsb3dlZCB0byBiaW5kIGJhc2VkIG9uIGRlY2lzaW9ucyBmcm9tZSB0aGUge0BsaW5rIFRpbGVTZXJ2aWNlc30uCisgKi8KK3B1YmxpYyBjbGFzcyBUaWxlU2VydmljZU1hbmFnZXIgeworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBNSU5fQklORF9USU1FID0gNTAwMDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIFVOQklORF9ERUxBWSA9IDMwMDAwOworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gdHJ1ZTsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiVGlsZVNlcnZpY2VNYW5hZ2VyIjsKKworICAgIEBWaXNpYmxlRm9yVGVzdGluZworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJFRlNfRklMRSA9ICJDdXN0b21UaWxlTW9kZXMiOworCisgICAgcHJpdmF0ZSBmaW5hbCBUaWxlU2VydmljZXMgbVNlcnZpY2VzOworICAgIHByaXZhdGUgZmluYWwgVGlsZUxpZmVjeWNsZU1hbmFnZXIgbVN0YXRlTWFuYWdlcjsKKyAgICBwcml2YXRlIGZpbmFsIEhhbmRsZXIgbUhhbmRsZXI7CisgICAgcHJpdmF0ZSBib29sZWFuIG1CaW5kUmVxdWVzdGVkOworICAgIHByaXZhdGUgYm9vbGVhbiBtQmluZEFsbG93ZWQ7CisgICAgcHJpdmF0ZSBib29sZWFuIG1Cb3VuZDsKKyAgICBwcml2YXRlIGludCBtUHJpb3JpdHk7CisgICAgcHJpdmF0ZSBib29sZWFuIG1KdXN0Qm91bmQ7CisgICAgcHJpdmF0ZSBsb25nIG1MYXN0VXBkYXRlOworICAgIHByaXZhdGUgaW50IG1UeXBlOworCisgICAgVGlsZVNlcnZpY2VNYW5hZ2VyKFRpbGVTZXJ2aWNlcyB0aWxlU2VydmljZXMsIEhhbmRsZXIgaGFuZGxlciwgQ29tcG9uZW50TmFtZSBjb21wb25lbnQpIHsKKyAgICAgICAgdGhpcyh0aWxlU2VydmljZXMsIGhhbmRsZXIsIG5ldyBUaWxlTGlmZWN5Y2xlTWFuYWdlcihoYW5kbGVyLAorICAgICAgICAgICAgICAgIHRpbGVTZXJ2aWNlcy5nZXRDb250ZXh0KCksIG5ldyBJbnRlbnQoKS5zZXRDb21wb25lbnQoY29tcG9uZW50KSwKKyAgICAgICAgICAgICAgICBuZXcgVXNlckhhbmRsZShBY3Rpdml0eU1hbmFnZXIuZ2V0Q3VycmVudFVzZXIoKSkpKTsKKyAgICB9CisKKyAgICBAVmlzaWJsZUZvclRlc3RpbmcKKyAgICBUaWxlU2VydmljZU1hbmFnZXIoVGlsZVNlcnZpY2VzIHRpbGVTZXJ2aWNlcywgSGFuZGxlciBoYW5kbGVyLAorICAgICAgICAgICAgVGlsZUxpZmVjeWNsZU1hbmFnZXIgdGlsZUxpZmVjeWNsZU1hbmFnZXIpIHsKKyAgICAgICAgbVNlcnZpY2VzID0gdGlsZVNlcnZpY2VzOworICAgICAgICBtSGFuZGxlciA9IGhhbmRsZXI7CisgICAgICAgIG1TdGF0ZU1hbmFnZXIgPSB0aWxlTGlmZWN5Y2xlTWFuYWdlcjsKKyAgICAgICAgbVR5cGUgPSB0aWxlU2VydmljZXMuZ2V0Q29udGV4dCgpLmdldFNoYXJlZFByZWZlcmVuY2VzKFBSRUZTX0ZJTEUsIDApCisgICAgICAgICAgICAgICAgLmdldEludCh0aWxlTGlmZWN5Y2xlTWFuYWdlci5nZXRDb21wb25lbnQoKS5mbGF0dGVuVG9TdHJpbmcoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFRpbGVTZXJ2aWNlLlRJTEVfTU9ERV9VTlNFVCk7CisgICAgICAgIG1TdGF0ZU1hbmFnZXIuc2V0UVNTZXJ2aWNlKHRpbGVTZXJ2aWNlcyk7CisgICAgICAgIGlmIChtVHlwZSA9PSBUaWxlU2VydmljZS5USUxFX01PREVfVU5TRVQpIHsKKyAgICAgICAgICAgIGJpbmRTZXJ2aWNlKCk7CisgICAgICAgICAgICBtU3RhdGVNYW5hZ2VyLm9uVGlsZUFkZGVkKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgaW50IGdldFR5cGUoKSB7CisgICAgICAgIHJldHVybiBtVHlwZTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRUeXBlKGludCB0eXBlKSB7CisgICAgICAgIG1TZXJ2aWNlcy5nZXRDb250ZXh0KCkuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoUFJFRlNfRklMRSwgMCkuZWRpdCgpCisgICAgICAgICAgICAgICAgLnB1dEludChtU3RhdGVNYW5hZ2VyLmdldENvbXBvbmVudCgpLmZsYXR0ZW5Ub1N0cmluZygpLCB0eXBlKS5jb21taXQoKTsKKyAgICAgICAgbVR5cGUgPSB0eXBlOworICAgICAgICBtU2VydmljZXMucmVjYWxjdWxhdGVCaW5kQWxsb3dhbmNlKCk7CisgICAgfQorCisgICAgcHVibGljIElRU1RpbGVTZXJ2aWNlIGdldFRpbGVTZXJ2aWNlKCkgeworICAgICAgICByZXR1cm4gbVN0YXRlTWFuYWdlcjsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRCaW5kUmVxdWVzdGVkKGJvb2xlYW4gYmluZFJlcXVlc3RlZCkgeworICAgICAgICBpZiAobUJpbmRSZXF1ZXN0ZWQgPT0gYmluZFJlcXVlc3RlZCkgcmV0dXJuOworICAgICAgICBtQmluZFJlcXVlc3RlZCA9IGJpbmRSZXF1ZXN0ZWQ7CisgICAgICAgIGlmIChtQmluZEFsbG93ZWQgJiYgbUJpbmRSZXF1ZXN0ZWQgJiYgIW1Cb3VuZCkgeworICAgICAgICAgICAgbUhhbmRsZXIucmVtb3ZlQ2FsbGJhY2tzKG1VbmJpbmQpOworICAgICAgICAgICAgYmluZFNlcnZpY2UoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1TZXJ2aWNlcy5yZWNhbGN1bGF0ZUJpbmRBbGxvd2FuY2UoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobUJvdW5kICYmICFtQmluZFJlcXVlc3RlZCkgeworICAgICAgICAgICAgbUhhbmRsZXIucG9zdERlbGF5ZWQobVVuYmluZCwgVU5CSU5EX0RFTEFZKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldExhc3RVcGRhdGUobG9uZyBsYXN0VXBkYXRlKSB7CisgICAgICAgIG1MYXN0VXBkYXRlID0gbGFzdFVwZGF0ZTsKKyAgICAgICAgaWYgKG1Cb3VuZCAmJiBtVHlwZSA9PSBUaWxlU2VydmljZS5USUxFX01PREVfQUNUSVZFKSB7CisgICAgICAgICAgICBtU3RhdGVNYW5hZ2VyLm9uU3RvcExpc3RlbmluZygpOworICAgICAgICAgICAgc2V0QmluZFJlcXVlc3RlZChmYWxzZSk7CisgICAgICAgIH0KKyAgICAgICAgbVNlcnZpY2VzLnJlY2FsY3VsYXRlQmluZEFsbG93YW5jZSgpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGhhbmRsZURlc3Ryb3koKSB7CisgICAgICAgIG1TdGF0ZU1hbmFnZXIuaGFuZGxlRGVzdHJveSgpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldEJpbmRBbGxvd2VkKGJvb2xlYW4gYWxsb3dlZCkgeworICAgICAgICBpZiAobUJpbmRBbGxvd2VkID09IGFsbG93ZWQpIHJldHVybjsKKyAgICAgICAgbUJpbmRBbGxvd2VkID0gYWxsb3dlZDsKKyAgICAgICAgaWYgKCFtQmluZEFsbG93ZWQgJiYgbUJvdW5kKSB7CisgICAgICAgICAgICB1bmJpbmRTZXJ2aWNlKCk7CisgICAgICAgIH0gZWxzZSBpZiAobUJpbmRBbGxvd2VkICYmIG1CaW5kUmVxdWVzdGVkICYmICFtQm91bmQpIHsKKyAgICAgICAgICAgIGJpbmRTZXJ2aWNlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgYmluZFNlcnZpY2UoKSB7CisgICAgICAgIGlmIChtQm91bmQpIHsKKyAgICAgICAgICAgIExvZy5lKFRBRywgIlNlcnZpY2UgYWxyZWFkeSBib3VuZCIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1Cb3VuZCA9IHRydWU7CisgICAgICAgIG1KdXN0Qm91bmQgPSB0cnVlOworICAgICAgICBtSGFuZGxlci5wb3N0RGVsYXllZChtSnVzdEJvdW5kT3ZlciwgTUlOX0JJTkRfVElNRSk7CisgICAgICAgIG1TdGF0ZU1hbmFnZXIuc2V0QmluZFNlcnZpY2UodHJ1ZSk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHVuYmluZFNlcnZpY2UoKSB7CisgICAgICAgIGlmICghbUJvdW5kKSB7CisgICAgICAgICAgICBMb2cuZShUQUcsICJTZXJ2aWNlIG5vdCBib3VuZCIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1Cb3VuZCA9IGZhbHNlOworICAgICAgICBtSnVzdEJvdW5kID0gZmFsc2U7CisgICAgICAgIG1TdGF0ZU1hbmFnZXIuc2V0QmluZFNlcnZpY2UoZmFsc2UpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGNhbGN1bGF0ZUJpbmRQcmlvcml0eShsb25nIGN1cnJlbnRUaW1lKSB7CisgICAgICAgIGlmIChtU3RhdGVNYW5hZ2VyLmhhc1BlbmRpbmdDbGljaygpKSB7CisgICAgICAgICAgICAvLyBQZW5kaW5nIGNsaWNrIGlzIHRoZSBtb3N0IGltcG9ydGFudCB0aGluZywgbmVlZCB0byBwdXQgdGhpcyBzZXJ2aWNlIGF0IHRoZSB0b3Agb2YKKyAgICAgICAgICAgIC8vIHRoZSBsaXN0IHRvIGJlIGJvdW5kLgorICAgICAgICAgICAgbVByaW9yaXR5ID0gSW50ZWdlci5NQVhfVkFMVUU7CisgICAgICAgIH0gZWxzZSBpZiAobUp1c3RCb3VuZCkgeworICAgICAgICAgICAgLy8gSWYgd2UganVzdCBib3VuZCwgbGV0cyBub3QgdGhyYXNoIG9uIGJpbmRpbmcvdW5iaW5kaW5nIHRvbyBtdWNoLCB0aGlzIGlzIHNlY29uZCBtb3N0CisgICAgICAgICAgICAvLyBpbXBvcnRhbnQuCisgICAgICAgICAgICBtUHJpb3JpdHkgPSBJbnRlZ2VyLk1BWF9WQUxVRSAtIDE7CisgICAgICAgIH0gZWxzZSBpZiAoIW1CaW5kUmVxdWVzdGVkKSB7CisgICAgICAgICAgICAvLyBEb24ndCBjYXJlIGFib3V0IGJpbmRpbmcgcmlnaHQgbm93LCBwdXQgdXMgbGFzdC4KKyAgICAgICAgICAgIG1Qcmlvcml0eSA9IEludGVnZXIuTUlOX1ZBTFVFOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT3JkZXIgYmFzZWQgb24gd2hldGhlciB0aGlzIHdhcyBqdXN0IHVwZGF0ZWQuCisgICAgICAgICAgICBsb25nIHRpbWVTaW5jZVVwZGF0ZSA9IGN1cnJlbnRUaW1lIC0gbUxhc3RVcGRhdGU7CisgICAgICAgICAgICAvLyBGaXQgY29tcGFyZSBpbnRvIGludGVnZXIgc3BhY2UgZm9yIHNpbXBsaWNpdHkuIE1ha2Ugc3VyZSB0byBsZWF2ZSBNQVhfVkFMVUUgYW5kCisgICAgICAgICAgICAvLyBNQVhfVkFMVUUgLSAxIGZvciB0aGUgbW9yZSBpbXBvcnRhbnQgc3RhdGVzIGFib3ZlLgorICAgICAgICAgICAgaWYgKHRpbWVTaW5jZVVwZGF0ZSA+IEludGVnZXIuTUFYX1ZBTFVFIC0gMikgeworICAgICAgICAgICAgICAgIG1Qcmlvcml0eSA9IEludGVnZXIuTUFYX1ZBTFVFIC0gMjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbVByaW9yaXR5ID0gKGludCkgdGltZVNpbmNlVXBkYXRlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIGludCBnZXRCaW5kUHJpb3JpdHkoKSB7CisgICAgICAgIHJldHVybiBtUHJpb3JpdHk7CisgICAgfQorCisgICAgcHJpdmF0ZSBmaW5hbCBSdW5uYWJsZSBtVW5iaW5kID0gbmV3IFJ1bm5hYmxlKCkgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgaWYgKG1Cb3VuZCAmJiAhbUJpbmRSZXF1ZXN0ZWQpIHsKKyAgICAgICAgICAgICAgICB1bmJpbmRTZXJ2aWNlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCisgICAgQFZpc2libGVGb3JUZXN0aW5nCisgICAgZmluYWwgUnVubmFibGUgbUp1c3RCb3VuZE92ZXIgPSBuZXcgUnVubmFibGUoKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICBtSnVzdEJvdW5kID0gZmFsc2U7CisgICAgICAgICAgICBtU2VydmljZXMucmVjYWxjdWxhdGVCaW5kQWxsb3dhbmNlKCk7CisgICAgICAgIH0KKyAgICB9OworfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL2V4dGVybmFsL1RpbGVTZXJ2aWNlcy5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL2V4dGVybmFsL1RpbGVTZXJ2aWNlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0MDNhZTAKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvZXh0ZXJuYWwvVGlsZVNlcnZpY2VzLmphdmEKQEAgLTAsMCArMSwyMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZQorICovCitwYWNrYWdlIGNvbS5hbmRyb2lkLnN5c3RlbXVpLnFzLmV4dGVybmFsOworCitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkJyb2FkY2FzdFJlY2VpdmVyOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudEZpbHRlcjsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5CaW5kZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOworaW1wb3J0IGFuZHJvaWQub3MuTG9vcGVyOworaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOworaW1wb3J0IGFuZHJvaWQuc2VydmljZS5xdWlja3NldHRpbmdzLklRU1NlcnZpY2U7CitpbXBvcnQgYW5kcm9pZC5zZXJ2aWNlLnF1aWNrc2V0dGluZ3MuVGlsZTsKK2ltcG9ydCBhbmRyb2lkLnNlcnZpY2UucXVpY2tzZXR0aW5ncy5UaWxlU2VydmljZTsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuQXJyYXlNYXA7CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKK2ltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5zdGF0dXNiYXIucGhvbmUuUVNUaWxlSG9zdDsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5Db21wYXJhdG9yOworCisvKioKKyAqIFJ1bnMgdGhlIGRheS10by1kYXkgb3BlcmF0aW9ucyBvZiB3aGljaCB0aWxlcyBzaG91bGQgYmUgYm91bmQgYW5kIHdoZW4uCisgKi8KK3B1YmxpYyBjbGFzcyBUaWxlU2VydmljZXMgZXh0ZW5kcyBJUVNTZXJ2aWNlLlN0dWIgeworICAgIHN0YXRpYyBmaW5hbCBpbnQgREVGQVVMVF9NQVhfQk9VTkQgPSAzOworICAgIHN0YXRpYyBmaW5hbCBpbnQgUkVEVUNFRF9NQVhfQk9VTkQgPSAxOworCisgICAgcHJpdmF0ZSBmaW5hbCBBcnJheU1hcDxDdXN0b21UaWxlLCBUaWxlU2VydmljZU1hbmFnZXI+IG1TZXJ2aWNlcyA9IG5ldyBBcnJheU1hcDw+KCk7CisgICAgcHJpdmF0ZSBmaW5hbCBBcnJheU1hcDxDb21wb25lbnROYW1lLCBDdXN0b21UaWxlPiBtVGlsZXMgPSBuZXcgQXJyYXlNYXA8PigpOworICAgIHByaXZhdGUgZmluYWwgQ29udGV4dCBtQ29udGV4dDsKKyAgICBwcml2YXRlIGZpbmFsIEhhbmRsZXIgbUhhbmRsZXI7CisgICAgcHJpdmF0ZSBmaW5hbCBRU1RpbGVIb3N0IG1Ib3N0OworCisgICAgcHJpdmF0ZSBpbnQgbU1heEJvdW5kID0gREVGQVVMVF9NQVhfQk9VTkQ7CisKKyAgICBwdWJsaWMgVGlsZVNlcnZpY2VzKFFTVGlsZUhvc3QgaG9zdCwgTG9vcGVyIGxvb3BlcikgeworICAgICAgICBtSG9zdCA9IGhvc3Q7CisgICAgICAgIG1Db250ZXh0ID0gbUhvc3QuZ2V0Q29udGV4dCgpOworICAgICAgICBtQ29udGV4dC5yZWdpc3RlclJlY2VpdmVyKG1SZXF1ZXN0TGlzdGVuaW5nUmVjZWl2ZXIsCisgICAgICAgICAgICAgICAgbmV3IEludGVudEZpbHRlcihUaWxlU2VydmljZS5BQ1RJT05fUkVRVUVTVF9MSVNURU5JTkcpKTsKKyAgICAgICAgbUhhbmRsZXIgPSBuZXcgSGFuZGxlcihsb29wZXIpOworICAgIH0KKworICAgIHB1YmxpYyBDb250ZXh0IGdldENvbnRleHQoKSB7CisgICAgICAgIHJldHVybiBtQ29udGV4dDsKKyAgICB9CisKKyAgICBwdWJsaWMgVGlsZVNlcnZpY2VNYW5hZ2VyIGdldFRpbGVXcmFwcGVyKEN1c3RvbVRpbGUgdGlsZSkgeworICAgICAgICBDb21wb25lbnROYW1lIGNvbXBvbmVudCA9IHRpbGUuZ2V0Q29tcG9uZW50KCk7CisgICAgICAgIFRpbGVTZXJ2aWNlTWFuYWdlciBzZXJ2aWNlID0gb25DcmVhdGVUaWxlU2VydmljZShjb21wb25lbnQpOworICAgICAgICBzeW5jaHJvbml6ZWQgKG1TZXJ2aWNlcykgeworICAgICAgICAgICAgbVNlcnZpY2VzLnB1dCh0aWxlLCBzZXJ2aWNlKTsKKyAgICAgICAgICAgIG1UaWxlcy5wdXQoY29tcG9uZW50LCB0aWxlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc2VydmljZTsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgVGlsZVNlcnZpY2VNYW5hZ2VyIG9uQ3JlYXRlVGlsZVNlcnZpY2UoQ29tcG9uZW50TmFtZSBjb21wb25lbnQpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBUaWxlU2VydmljZU1hbmFnZXIodGhpcywgbUhhbmRsZXIsIGNvbXBvbmVudCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgZnJlZVNlcnZpY2UoQ3VzdG9tVGlsZSB0aWxlLCBUaWxlU2VydmljZU1hbmFnZXIgc2VydmljZSkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKG1TZXJ2aWNlcykgeworICAgICAgICAgICAgc2VydmljZS5zZXRCaW5kQWxsb3dlZChmYWxzZSk7CisgICAgICAgICAgICBtU2VydmljZXMucmVtb3ZlKHRpbGUpOworICAgICAgICAgICAgbVRpbGVzLnJlbW92ZSh0aWxlLmdldENvbXBvbmVudCgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldE1lbW9yeVByZXNzdXJlKGJvb2xlYW4gbWVtb3J5UHJlc3N1cmUpIHsKKyAgICAgICAgbU1heEJvdW5kID0gbWVtb3J5UHJlc3N1cmUgPyBSRURVQ0VEX01BWF9CT1VORCA6IERFRkFVTFRfTUFYX0JPVU5EOworICAgICAgICByZWNhbGN1bGF0ZUJpbmRBbGxvd2FuY2UoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCByZWNhbGN1bGF0ZUJpbmRBbGxvd2FuY2UoKSB7CisgICAgICAgIGZpbmFsIEFycmF5TGlzdDxUaWxlU2VydmljZU1hbmFnZXI+IHNlcnZpY2VzOworICAgICAgICBzeW5jaHJvbml6ZWQgKG1TZXJ2aWNlcykgeworICAgICAgICAgICAgc2VydmljZXMgPSBuZXcgQXJyYXlMaXN0PD4obVNlcnZpY2VzLnZhbHVlcygpKTsKKyAgICAgICAgfQorICAgICAgICBmaW5hbCBpbnQgTiA9IHNlcnZpY2VzLnNpemUoKTsKKyAgICAgICAgaWYgKE4gPiBtTWF4Qm91bmQpIHsKKyAgICAgICAgICAgIGxvbmcgY3VycmVudFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICAgICAgICAgIC8vIFByZWNhbGN1bGF0ZSB0aGUgcHJpb3JpdHkgb2Ygc2VydmljZXMgZm9yIGJpbmRpbmcuCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgeworICAgICAgICAgICAgICAgIHNlcnZpY2VzLmdldChpKS5jYWxjdWxhdGVCaW5kUHJpb3JpdHkoY3VycmVudFRpbWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gU29ydCB0aGVtIHNvIHdlIGNhbiBiaW5kIHRoZSBtb3N0IGltcG9ydGFudCBmaXJzdC4KKyAgICAgICAgICAgIENvbGxlY3Rpb25zLnNvcnQoc2VydmljZXMsIFNFUlZJQ0VfU09SVCk7CisgICAgICAgIH0KKyAgICAgICAgaW50IGk7CisgICAgICAgIC8vIEFsbG93IG1NYXhCb3VuZCBpdGVtcyB0byBiaW5kLgorICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbU1heEJvdW5kICYmIGkgPCBOOyBpKyspIHsKKyAgICAgICAgICAgIHNlcnZpY2VzLmdldChpKS5zZXRCaW5kQWxsb3dlZCh0cnVlKTsKKyAgICAgICAgfQorICAgICAgICAvLyBUaGUgcmVzdCBhcmVuJ3QgYWxsb3dlZCB0byBiaW5kIGZvciBub3cuCisgICAgICAgIHdoaWxlIChpIDwgTikgeworICAgICAgICAgICAgc2VydmljZXMuZ2V0KGkpLnNldEJpbmRBbGxvd2VkKGZhbHNlKTsKKyAgICAgICAgICAgIGkrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCB2ZXJpZnlDYWxsZXIoU3RyaW5nIHBhY2thZ2VOYW1lKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpbnQgdWlkID0gbUNvbnRleHQuZ2V0UGFja2FnZU1hbmFnZXIoKS5nZXRQYWNrYWdlVWlkQXNVc2VyKHBhY2thZ2VOYW1lLAorICAgICAgICAgICAgICAgICAgICBCaW5kZXIuZ2V0Q2FsbGluZ1VzZXJIYW5kbGUoKS5nZXRJZGVudGlmaWVyKCkpOworICAgICAgICAgICAgaWYgKEJpbmRlci5nZXRDYWxsaW5nVWlkKCkgIT0gdWlkKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXhjZXB0aW9uKCJDb21wb25lbnQgb3V0c2lkZSBjYWxsZXIncyB1aWQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoUGFja2FnZU1hbmFnZXIuTmFtZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBTZWN1cml0eUV4Y2VwdGlvbihlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCByZXF1ZXN0TGlzdGVuaW5nKENvbXBvbmVudE5hbWUgY29tcG9uZW50KSB7CisgICAgICAgIHN5bmNocm9uaXplZCAobVNlcnZpY2VzKSB7CisgICAgICAgICAgICBDdXN0b21UaWxlIGN1c3RvbVRpbGUgPSBnZXRUaWxlRm9yQ29tcG9uZW50KGNvbXBvbmVudCk7CisgICAgICAgICAgICBpZiAoY3VzdG9tVGlsZSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgTG9nLmQoIlRpbGVTZXJ2aWNlcyIsICJDb3VsZG4ndCBmaW5kIHRpbGUgZm9yICIgKyBjb21wb25lbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFRpbGVTZXJ2aWNlTWFuYWdlciBzZXJ2aWNlID0gbVNlcnZpY2VzLmdldChjdXN0b21UaWxlKTsKKyAgICAgICAgICAgIGlmIChzZXJ2aWNlLmdldFR5cGUoKSAhPSBUaWxlU2VydmljZS5USUxFX01PREVfQUNUSVZFKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2VydmljZS5zZXRCaW5kUmVxdWVzdGVkKHRydWUpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBzZXJ2aWNlLmdldFRpbGVTZXJ2aWNlKCkub25TdGFydExpc3RlbmluZygpOworICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHNldFRpbGVNb2RlKENvbXBvbmVudE5hbWUgY29tcG9uZW50LCBpbnQgbW9kZSkgeworICAgICAgICB2ZXJpZnlDYWxsZXIoY29tcG9uZW50LmdldFBhY2thZ2VOYW1lKCkpOworICAgICAgICBDdXN0b21UaWxlIGN1c3RvbVRpbGUgPSBnZXRUaWxlRm9yQ29tcG9uZW50KGNvbXBvbmVudCk7CisgICAgICAgIGlmIChjdXN0b21UaWxlICE9IG51bGwpIHsKKyAgICAgICAgICAgIHN5bmNocm9uaXplZCAobVNlcnZpY2VzKSB7CisgICAgICAgICAgICAgICAgbVNlcnZpY2VzLmdldChjdXN0b21UaWxlKS5zZXRUeXBlKG1vZGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgdXBkYXRlUXNUaWxlKFRpbGUgdGlsZSkgeworICAgICAgICB2ZXJpZnlDYWxsZXIodGlsZS5nZXRDb21wb25lbnROYW1lKCkuZ2V0UGFja2FnZU5hbWUoKSk7CisgICAgICAgIEN1c3RvbVRpbGUgY3VzdG9tVGlsZSA9IGdldFRpbGVGb3JDb21wb25lbnQodGlsZS5nZXRDb21wb25lbnROYW1lKCkpOworICAgICAgICBpZiAoY3VzdG9tVGlsZSAhPSBudWxsKSB7CisgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1TZXJ2aWNlcykgeworICAgICAgICAgICAgICAgIG1TZXJ2aWNlcy5nZXQoY3VzdG9tVGlsZSkuc2V0TGFzdFVwZGF0ZShTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjdXN0b21UaWxlLnVwZGF0ZVN0YXRlKHRpbGUpOworICAgICAgICAgICAgY3VzdG9tVGlsZS5yZWZyZXNoU3RhdGUoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uU2hvd0RpYWxvZyhUaWxlIHRpbGUpIHsKKyAgICAgICAgdmVyaWZ5Q2FsbGVyKHRpbGUuZ2V0Q29tcG9uZW50TmFtZSgpLmdldFBhY2thZ2VOYW1lKCkpOworICAgICAgICBDdXN0b21UaWxlIGN1c3RvbVRpbGUgPSBnZXRUaWxlRm9yQ29tcG9uZW50KHRpbGUuZ2V0Q29tcG9uZW50TmFtZSgpKTsKKyAgICAgICAgaWYgKGN1c3RvbVRpbGUgIT0gbnVsbCkgeworICAgICAgICAgICAgY3VzdG9tVGlsZS5vbkRpYWxvZ1Nob3duKCk7CisgICAgICAgICAgICBtSG9zdC5jb2xsYXBzZVBhbmVscygpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBDdXN0b21UaWxlIGdldFRpbGVGb3JDb21wb25lbnQoQ29tcG9uZW50TmFtZSBjb21wb25lbnQpIHsKKyAgICAgICAgc3luY2hyb25pemVkIChtU2VydmljZXMpIHsKKyAgICAgICAgICAgIHJldHVybiBtVGlsZXMuZ2V0KGNvbXBvbmVudCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGZpbmFsIEJyb2FkY2FzdFJlY2VpdmVyIG1SZXF1ZXN0TGlzdGVuaW5nUmVjZWl2ZXIgPSBuZXcgQnJvYWRjYXN0UmVjZWl2ZXIoKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvblJlY2VpdmUoQ29udGV4dCBjb250ZXh0LCBJbnRlbnQgaW50ZW50KSB7CisgICAgICAgICAgICBpZiAoVGlsZVNlcnZpY2UuQUNUSU9OX1JFUVVFU1RfTElTVEVOSU5HLmVxdWFscyhpbnRlbnQuZ2V0QWN0aW9uKCkpKSB7CisgICAgICAgICAgICAgICAgcmVxdWVzdExpc3RlbmluZygKKyAgICAgICAgICAgICAgICAgICAgICAgIChDb21wb25lbnROYW1lKSBpbnRlbnQuZ2V0UGFyY2VsYWJsZUV4dHJhKFRpbGVTZXJ2aWNlLkVYVFJBX0NPTVBPTkVOVCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIENvbXBhcmF0b3I8VGlsZVNlcnZpY2VNYW5hZ2VyPiBTRVJWSUNFX1NPUlQgPQorICAgICAgICAgICAgbmV3IENvbXBhcmF0b3I8VGlsZVNlcnZpY2VNYW5hZ2VyPigpIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBpbnQgY29tcGFyZShUaWxlU2VydmljZU1hbmFnZXIgbGVmdCwgVGlsZVNlcnZpY2VNYW5hZ2VyIHJpZ2h0KSB7CisgICAgICAgICAgICByZXR1cm4gLUludGVnZXIuY29tcGFyZShsZWZ0LmdldEJpbmRQcmlvcml0eSgpLCByaWdodC5nZXRCaW5kUHJpb3JpdHkoKSk7CisgICAgICAgIH0KKyAgICB9OworfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL3RpbGVzL0FpcnBsYW5lTW9kZVRpbGUuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy90aWxlcy9BaXJwbGFuZU1vZGVUaWxlLmphdmEKaW5kZXggZmM4MDJkZC4uYzY5NmY4OCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL3RpbGVzL0FpcnBsYW5lTW9kZVRpbGUuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvdGlsZXMvQWlycGxhbmVNb2RlVGlsZS5qYXZhCkBAIC01OCw4ICs1OCw2IEBACiAgICAgcHVibGljIHZvaWQgaGFuZGxlQ2xpY2soKSB7CiAgICAgICAgIE1ldHJpY3NMb2dnZXIuYWN0aW9uKG1Db250ZXh0LCBnZXRNZXRyaWNzQ2F0ZWdvcnkoKSwgIW1TdGF0ZS52YWx1ZSk7CiAgICAgICAgIHNldEVuYWJsZWQoIW1TdGF0ZS52YWx1ZSk7Ci0gICAgICAgIG1FbmFibGUuc2V0QWxsb3dBbmltYXRpb24odHJ1ZSk7Ci0gICAgICAgIG1EaXNhYmxlLnNldEFsbG93QW5pbWF0aW9uKHRydWUpOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBzZXRFbmFibGVkKGJvb2xlYW4gZW5hYmxlZCkgewpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL3RpbGVzL0NvbG9ySW52ZXJzaW9uVGlsZS5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL3RpbGVzL0NvbG9ySW52ZXJzaW9uVGlsZS5qYXZhCmluZGV4IGY3M2VlMzUuLjIzYTE1YjkgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy90aWxlcy9Db2xvckludmVyc2lvblRpbGUuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvdGlsZXMvQ29sb3JJbnZlcnNpb25UaWxlLmphdmEKQEAgLTcxLDggKzcxLDYgQEAKICAgICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVDbGljaygpIHsKICAgICAgICAgTWV0cmljc0xvZ2dlci5hY3Rpb24obUNvbnRleHQsIGdldE1ldHJpY3NDYXRlZ29yeSgpLCAhbVN0YXRlLnZhbHVlKTsKICAgICAgICAgbVNldHRpbmcuc2V0VmFsdWUobVN0YXRlLnZhbHVlID8gMCA6IDEpOwotICAgICAgICBtRW5hYmxlLnNldEFsbG93QW5pbWF0aW9uKHRydWUpOwotICAgICAgICBtRGlzYWJsZS5zZXRBbGxvd0FuaW1hdGlvbih0cnVlKTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy90aWxlcy9EbmRUaWxlLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvdGlsZXMvRG5kVGlsZS5qYXZhCmluZGV4IGQ5NmY3MzUuLjRmOWY0NmQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy90aWxlcy9EbmRUaWxlLmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL3RpbGVzL0RuZFRpbGUuamF2YQpAQCAtMTA3LDggKzEwNyw2IEBACiAgICAgICAgICAgICAgICAgICAgIFRvYXN0LkxFTkdUSF9MT05HKS5zaG93KCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgbURpc2FibGUuc2V0QWxsb3dBbmltYXRpb24odHJ1ZSk7Ci0gICAgICAgIG1EaXNhYmxlVG90YWxTaWxlbmNlLnNldEFsbG93QW5pbWF0aW9uKHRydWUpOwogICAgICAgICBNZXRyaWNzTG9nZ2VyLmFjdGlvbihtQ29udGV4dCwgZ2V0TWV0cmljc0NhdGVnb3J5KCksICFtU3RhdGUudmFsdWUpOwogICAgICAgICBpZiAobVN0YXRlLnZhbHVlKSB7CiAgICAgICAgICAgICBtQ29udHJvbGxlci5zZXRaZW4oR2xvYmFsLlpFTl9NT0RFX09GRiwgbnVsbCwgVEFHKTsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy90aWxlcy9GbGFzaGxpZ2h0VGlsZS5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL3RpbGVzL0ZsYXNobGlnaHRUaWxlLmphdmEKaW5kZXggMTJjMTI5OC4uMzlkOWRhMSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL3RpbGVzL0ZsYXNobGlnaHRUaWxlLmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL3RpbGVzL0ZsYXNobGlnaHRUaWxlLmphdmEKQEAgLTY0LDcgKzY0LDcgQEAKICAgICAgICAgfQogICAgICAgICBNZXRyaWNzTG9nZ2VyLmFjdGlvbihtQ29udGV4dCwgZ2V0TWV0cmljc0NhdGVnb3J5KCksICFtU3RhdGUudmFsdWUpOwogICAgICAgICBib29sZWFuIG5ld1N0YXRlID0gIW1TdGF0ZS52YWx1ZTsKLSAgICAgICAgcmVmcmVzaFN0YXRlKG5ld1N0YXRlID8gVXNlckJvb2xlYW4uVVNFUl9UUlVFIDogVXNlckJvb2xlYW4uVVNFUl9GQUxTRSk7CisgICAgICAgIHJlZnJlc2hTdGF0ZShuZXdTdGF0ZSk7CiAgICAgICAgIG1GbGFzaGxpZ2h0Q29udHJvbGxlci5zZXRGbGFzaGxpZ2h0KG5ld1N0YXRlKTsKICAgICB9CiAKQEAgLTczLDggKzczLDggQEAKICAgICAgICAgLy8gVE9ETzogRmxhc2hsaWdodCBhdmFpbGFibGUgaGFuZGxpbmcuLi4KIC8vICAgICAgICBzdGF0ZS52aXNpYmxlID0gbUZsYXNobGlnaHRDb250cm9sbGVyLmlzQXZhaWxhYmxlKCk7CiAgICAgICAgIHN0YXRlLmxhYmVsID0gbUhvc3QuZ2V0Q29udGV4dCgpLmdldFN0cmluZyhSLnN0cmluZy5xdWlja19zZXR0aW5nc19mbGFzaGxpZ2h0X2xhYmVsKTsKLSAgICAgICAgaWYgKGFyZyBpbnN0YW5jZW9mIFVzZXJCb29sZWFuKSB7Ci0gICAgICAgICAgICBib29sZWFuIHZhbHVlID0gKChVc2VyQm9vbGVhbikgYXJnKS52YWx1ZTsKKyAgICAgICAgaWYgKGFyZyBpbnN0YW5jZW9mIEJvb2xlYW4pIHsKKyAgICAgICAgICAgIGJvb2xlYW4gdmFsdWUgPSAoQm9vbGVhbikgYXJnOwogICAgICAgICAgICAgaWYgKHZhbHVlID09IHN0YXRlLnZhbHVlKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQpAQCAtODMsNyArODMsNiBAQAogICAgICAgICAgICAgc3RhdGUudmFsdWUgPSBtRmxhc2hsaWdodENvbnRyb2xsZXIuaXNFbmFibGVkKCk7CiAgICAgICAgIH0KICAgICAgICAgZmluYWwgQW5pbWF0aW9uSWNvbiBpY29uID0gc3RhdGUudmFsdWUgPyBtRW5hYmxlIDogbURpc2FibGU7Ci0gICAgICAgIGljb24uc2V0QWxsb3dBbmltYXRpb24oYXJnIGluc3RhbmNlb2YgVXNlckJvb2xlYW4gJiYgKChVc2VyQm9vbGVhbikgYXJnKS51c2VySW5pdGlhdGVkKTsKICAgICAgICAgc3RhdGUuaWNvbiA9IGljb247CiAgICAgICAgIGludCBvbk9yT2ZmSWQgPSBzdGF0ZS52YWx1ZQogICAgICAgICAgICAgICAgID8gUi5zdHJpbmcuYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19mbGFzaGxpZ2h0X29uCkBAIC0xMDcsMTIgKzEwNiwxMiBAQAogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgb25GbGFzaGxpZ2h0Q2hhbmdlZChib29sZWFuIGVuYWJsZWQpIHsKLSAgICAgICAgcmVmcmVzaFN0YXRlKGVuYWJsZWQgPyBVc2VyQm9vbGVhbi5CQUNLR1JPVU5EX1RSVUUgOiBVc2VyQm9vbGVhbi5CQUNLR1JPVU5EX0ZBTFNFKTsKKyAgICAgICAgcmVmcmVzaFN0YXRlKGVuYWJsZWQpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIG9uRmxhc2hsaWdodEVycm9yKCkgewotICAgICAgICByZWZyZXNoU3RhdGUoVXNlckJvb2xlYW4uQkFDS0dST1VORF9GQUxTRSk7CisgICAgICAgIHJlZnJlc2hTdGF0ZShmYWxzZSk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvdGlsZXMvSG90c3BvdFRpbGUuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy90aWxlcy9Ib3RzcG90VGlsZS5qYXZhCmluZGV4IDI1MGQ1NjcuLjU1YWEzMmIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy90aWxlcy9Ib3RzcG90VGlsZS5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy90aWxlcy9Ib3RzcG90VGlsZS5qYXZhCkBAIC01OSw4ICs1OSw2IEBACiAgICAgICAgIGZpbmFsIGJvb2xlYW4gaXNFbmFibGVkID0gKEJvb2xlYW4pIG1TdGF0ZS52YWx1ZTsKICAgICAgICAgTWV0cmljc0xvZ2dlci5hY3Rpb24obUNvbnRleHQsIGdldE1ldHJpY3NDYXRlZ29yeSgpLCAhaXNFbmFibGVkKTsKICAgICAgICAgbUNvbnRyb2xsZXIuc2V0SG90c3BvdEVuYWJsZWQoIWlzRW5hYmxlZCk7Ci0gICAgICAgIG1FbmFibGUuc2V0QWxsb3dBbmltYXRpb24odHJ1ZSk7Ci0gICAgICAgIG1EaXNhYmxlLnNldEFsbG93QW5pbWF0aW9uKHRydWUpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL3RpbGVzL0xvY2F0aW9uVGlsZS5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL3RpbGVzL0xvY2F0aW9uVGlsZS5qYXZhCmluZGV4IDA4NTQwZjYuLmU3OWFhYmYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy90aWxlcy9Mb2NhdGlvblRpbGUuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvdGlsZXMvTG9jYXRpb25UaWxlLmphdmEKQEAgLTY3LDggKzY3LDYgQEAKICAgICAgICAgICAgICAgICAgICAgbUhvc3Qub3BlblBhbmVscygpOwogICAgICAgICAgICAgICAgICAgICBNZXRyaWNzTG9nZ2VyLmFjdGlvbihtQ29udGV4dCwgZ2V0TWV0cmljc0NhdGVnb3J5KCksICF3YXNFbmFibGVkKTsKICAgICAgICAgICAgICAgICAgICAgbUNvbnRyb2xsZXIuc2V0TG9jYXRpb25FbmFibGVkKCF3YXNFbmFibGVkKTsKLSAgICAgICAgICAgICAgICAgICAgbUVuYWJsZS5zZXRBbGxvd0FuaW1hdGlvbih0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgbURpc2FibGUuc2V0QWxsb3dBbmltYXRpb24odHJ1ZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC03Niw4ICs3NCw2IEBACiAgICAgICAgIGZpbmFsIGJvb2xlYW4gd2FzRW5hYmxlZCA9IChCb29sZWFuKSBtU3RhdGUudmFsdWU7CiAgICAgICAgIE1ldHJpY3NMb2dnZXIuYWN0aW9uKG1Db250ZXh0LCBnZXRNZXRyaWNzQ2F0ZWdvcnkoKSwgIXdhc0VuYWJsZWQpOwogICAgICAgICBtQ29udHJvbGxlci5zZXRMb2NhdGlvbkVuYWJsZWQoIXdhc0VuYWJsZWQpOwotICAgICAgICBtRW5hYmxlLnNldEFsbG93QW5pbWF0aW9uKHRydWUpOwotICAgICAgICBtRGlzYWJsZS5zZXRBbGxvd0FuaW1hdGlvbih0cnVlKTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy90aWxlcy9Sb3RhdGlvbkxvY2tUaWxlLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvdGlsZXMvUm90YXRpb25Mb2NrVGlsZS5qYXZhCmluZGV4IGQ4NWNmNjAuLjdiY2U1NGIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy90aWxlcy9Sb3RhdGlvbkxvY2tUaWxlLmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL3RpbGVzL1JvdGF0aW9uTG9ja1RpbGUuamF2YQpAQCAtNjMsMTUgKzYzLDE0IEBACiAgICAgICAgIE1ldHJpY3NMb2dnZXIuYWN0aW9uKG1Db250ZXh0LCBnZXRNZXRyaWNzQ2F0ZWdvcnkoKSwgIW1TdGF0ZS52YWx1ZSk7CiAgICAgICAgIGZpbmFsIGJvb2xlYW4gbmV3U3RhdGUgPSAhbVN0YXRlLnZhbHVlOwogICAgICAgICBtQ29udHJvbGxlci5zZXRSb3RhdGlvbkxvY2tlZChuZXdTdGF0ZSk7Ci0gICAgICAgIHJlZnJlc2hTdGF0ZShuZXdTdGF0ZSA/IFVzZXJCb29sZWFuLlVTRVJfVFJVRSA6IFVzZXJCb29sZWFuLlVTRVJfRkFMU0UpOworICAgICAgICByZWZyZXNoU3RhdGUobmV3U3RhdGUpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQogICAgIHByb3RlY3RlZCB2b2lkIGhhbmRsZVVwZGF0ZVN0YXRlKEJvb2xlYW5TdGF0ZSBzdGF0ZSwgT2JqZWN0IGFyZykgewogICAgICAgICBpZiAobUNvbnRyb2xsZXIgPT0gbnVsbCkgcmV0dXJuOwotICAgICAgICBmaW5hbCBib29sZWFuIHJvdGF0aW9uTG9ja2VkID0gYXJnICE9IG51bGwgPyAoKFVzZXJCb29sZWFuKSBhcmcpLnZhbHVlCisgICAgICAgIGZpbmFsIGJvb2xlYW4gcm90YXRpb25Mb2NrZWQgPSBhcmcgIT0gbnVsbCA/IChCb29sZWFuKSBhcmcKICAgICAgICAgICAgICAgICA6IG1Db250cm9sbGVyLmlzUm90YXRpb25Mb2NrZWQoKTsKLSAgICAgICAgZmluYWwgYm9vbGVhbiB1c2VySW5pdGlhdGVkID0gYXJnICE9IG51bGwgPyAoKFVzZXJCb29sZWFuKSBhcmcpLnVzZXJJbml0aWF0ZWQgOiBmYWxzZTsKICAgICAgICAgLy8gVE9ETzogSGFuZGxlIGFjY2Vzc2liaWxpdHkgcm90YXRpb24gbG9jayBhbmQgd2hhdG5vdC4KIC8vICAgICAgICBzdGF0ZS52aXNpYmxlID0gbUNvbnRyb2xsZXIuaXNSb3RhdGlvbkxvY2tBZmZvcmRhbmNlVmlzaWJsZSgpOwogICAgICAgICBpZiAoc3RhdGUudmFsdWUgPT0gcm90YXRpb25Mb2NrZWQgJiYgc3RhdGUuY29udGVudERlc2NyaXB0aW9uICE9IG51bGwpIHsKQEAgLTgwLDE4ICs3OSwxNSBAQAogICAgICAgICB9CiAgICAgICAgIHN0YXRlLnZhbHVlID0gcm90YXRpb25Mb2NrZWQ7CiAgICAgICAgIGZpbmFsIGJvb2xlYW4gcG9ydHJhaXQgPSBpc0N1cnJlbnRPcmllbnRhdGlvbkxvY2tQb3J0cmFpdCgpOwotICAgICAgICBmaW5hbCBBbmltYXRpb25JY29uIGljb247CiAgICAgICAgIGlmIChyb3RhdGlvbkxvY2tlZCkgewogICAgICAgICAgICAgZmluYWwgaW50IGxhYmVsID0gcG9ydHJhaXQgPyBSLnN0cmluZy5xdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfcG9ydHJhaXRfbGFiZWwKICAgICAgICAgICAgICAgICAgICAgOiBSLnN0cmluZy5xdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFuZHNjYXBlX2xhYmVsOwogICAgICAgICAgICAgc3RhdGUubGFiZWwgPSBtQ29udGV4dC5nZXRTdHJpbmcobGFiZWwpOwotICAgICAgICAgICAgaWNvbiA9IHBvcnRyYWl0ID8gbUF1dG9Ub1BvcnRyYWl0IDogbUF1dG9Ub0xhbmRzY2FwZTsKKyAgICAgICAgICAgIHN0YXRlLmljb24gPSBwb3J0cmFpdCA/IG1BdXRvVG9Qb3J0cmFpdCA6IG1BdXRvVG9MYW5kc2NhcGU7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzdGF0ZS5sYWJlbCA9IG1Db250ZXh0LmdldFN0cmluZyhSLnN0cmluZy5xdWlja19zZXR0aW5nc19yb3RhdGlvbl91bmxvY2tlZF9sYWJlbCk7Ci0gICAgICAgICAgICBpY29uID0gcG9ydHJhaXQgPyBtUG9ydHJhaXRUb0F1dG8gOiBtTGFuZHNjYXBlVG9BdXRvOworICAgICAgICAgICAgc3RhdGUuaWNvbiA9IHBvcnRyYWl0ID8gbVBvcnRyYWl0VG9BdXRvIDogbUxhbmRzY2FwZVRvQXV0bzsKICAgICAgICAgfQotICAgICAgICBpY29uLnNldEFsbG93QW5pbWF0aW9uKHVzZXJJbml0aWF0ZWQpOwotICAgICAgICBzdGF0ZS5pY29uID0gaWNvbjsKICAgICAgICAgc3RhdGUuY29udGVudERlc2NyaXB0aW9uID0gZ2V0QWNjZXNzaWJpbGl0eVN0cmluZyhyb3RhdGlvbkxvY2tlZCwKICAgICAgICAgICAgICAgICBSLnN0cmluZy5hY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fcG9ydHJhaXQsCiAgICAgICAgICAgICAgICAgUi5zdHJpbmcuYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX2xhbmRzY2FwZSwKQEAgLTE0NSw4ICsxNDEsNyBAQAogICAgIHByaXZhdGUgZmluYWwgUm90YXRpb25Mb2NrQ29udHJvbGxlckNhbGxiYWNrIG1DYWxsYmFjayA9IG5ldyBSb3RhdGlvbkxvY2tDb250cm9sbGVyQ2FsbGJhY2soKSB7CiAgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwdWJsaWMgdm9pZCBvblJvdGF0aW9uTG9ja1N0YXRlQ2hhbmdlZChib29sZWFuIHJvdGF0aW9uTG9ja2VkLCBib29sZWFuIGFmZm9yZGFuY2VWaXNpYmxlKSB7Ci0gICAgICAgICAgICByZWZyZXNoU3RhdGUocm90YXRpb25Mb2NrZWQgPyBVc2VyQm9vbGVhbi5CQUNLR1JPVU5EX1RSVUUKLSAgICAgICAgICAgICAgICAgICAgOiBVc2VyQm9vbGVhbi5CQUNLR1JPVU5EX0ZBTFNFKTsKKyAgICAgICAgICAgIHJlZnJlc2hTdGF0ZShyb3RhdGlvbkxvY2tlZCk7CiAgICAgICAgIH0KICAgICB9OwogfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL3RpbGVzL1dvcmtNb2RlVGlsZS5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL3RpbGVzL1dvcmtNb2RlVGlsZS5qYXZhCmluZGV4IDA3OTE1ZjguLjI1NWYyOWYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy90aWxlcy9Xb3JrTW9kZVRpbGUuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvdGlsZXMvV29ya01vZGVUaWxlLmphdmEKQEAgLTkzLDEyICs5Myw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHJlZnJlc2hRdWlldE1vZGVTdGF0ZShib29sZWFuIGJhY2tncm91bmRSZWZyZXNoKSB7Ci0gICAgICAgIGlmIChiYWNrZ3JvdW5kUmVmcmVzaCkgewotICAgICAgICAgICAgcmVmcmVzaFN0YXRlKGlzV29ya01vZGVFbmFibGVkKCkgPyBVc2VyQm9vbGVhbi5CQUNLR1JPVU5EX1RSVUUKLSAgICAgICAgICAgICAgICAgICAgOiBVc2VyQm9vbGVhbi5CQUNLR1JPVU5EX0ZBTFNFKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJlZnJlc2hTdGF0ZShpc1dvcmtNb2RlRW5hYmxlZCgpID8gVXNlckJvb2xlYW4uVVNFUl9UUlVFIDogVXNlckJvb2xlYW4uVVNFUl9GQUxTRSk7Ci0gICAgICAgIH0KKyAgICAgICAgcmVmcmVzaFN0YXRlKGlzV29ya01vZGVFbmFibGVkKCkpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpAQCAtMTA4LDI4ICsxMDMsMjIgQEAKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGZpbmFsIGJvb2xlYW4gdXNlckluaXRpYWxpemVkOwotICAgICAgICBpZiAoYXJnIGluc3RhbmNlb2YgVXNlckJvb2xlYW4pIHsKLSAgICAgICAgICAgIHN0YXRlLnZhbHVlID0gKChVc2VyQm9vbGVhbikgYXJnKS52YWx1ZTsKLSAgICAgICAgICAgIHVzZXJJbml0aWFsaXplZCA9ICgoVXNlckJvb2xlYW4pIGFyZykudXNlckluaXRpYXRlZDsKKyAgICAgICAgaWYgKGFyZyBpbnN0YW5jZW9mIEJvb2xlYW4pIHsKKyAgICAgICAgICAgIHN0YXRlLnZhbHVlID0gKEJvb2xlYW4pIGFyZzsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHN0YXRlLnZhbHVlID0gaXNXb3JrTW9kZUVuYWJsZWQoKTsKLSAgICAgICAgICAgIHVzZXJJbml0aWFsaXplZCA9IGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgZmluYWwgQW5pbWF0aW9uSWNvbiBpY29uOwogICAgICAgICBzdGF0ZS5sYWJlbCA9IG1Db250ZXh0LmdldFN0cmluZyhSLnN0cmluZy5xdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwpOwogICAgICAgICBpZiAoc3RhdGUudmFsdWUpIHsKLSAgICAgICAgICAgIGljb24gPSBtRW5hYmxlOworICAgICAgICAgICAgc3RhdGUuaWNvbiA9IG1FbmFibGU7CiAgICAgICAgICAgICBzdGF0ZS5jb250ZW50RGVzY3JpcHRpb24gPSAgbUNvbnRleHQuZ2V0U3RyaW5nKAogICAgICAgICAgICAgICAgICAgICBSLnN0cmluZy5hY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vbik7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpY29uID0gbURpc2FibGU7CisgICAgICAgICAgICBzdGF0ZS5pY29uID0gbURpc2FibGU7CiAgICAgICAgICAgICBzdGF0ZS5jb250ZW50RGVzY3JpcHRpb24gPSAgbUNvbnRleHQuZ2V0U3RyaW5nKAogICAgICAgICAgICAgICAgICAgICBSLnN0cmluZy5hY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vZmYpOwogICAgICAgICB9Ci0gICAgICAgIGljb24uc2V0QWxsb3dBbmltYXRpb24odXNlckluaXRpYWxpemVkKTsKLSAgICAgICAgc3RhdGUuaWNvbiA9IGljb247CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9SZWNlbnRzQWN0aXZpdHkuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL1JlY2VudHNBY3Rpdml0eS5qYXZhCmluZGV4IGIzY2U0YTYuLjU3MDc0ZGYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL1JlY2VudHNBY3Rpdml0eS5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL1JlY2VudHNBY3Rpdml0eS5qYXZhCkBAIC03Nyw2ICs3Nyw3IEBACiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy52aWV3cy5SZWNlbnRzVmlldzsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLnZpZXdzLlN5c3RlbUJhclNjcmltVmlld3M7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy52aWV3cy5WaWV3QW5pbWF0aW9uOworaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnN0YXR1c2Jhci5CYXNlU3RhdHVzQmFyOwogCiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIApAQCAtMjQ2LDEwICsyNDcsNyBAQAogICAgIGJvb2xlYW4gZGlzbWlzc0hpc3RvcnkoKSB7CiAgICAgICAgIC8vIFRyeSBhbmQgaGlkZSB0aGUgaGlzdG9yeSB2aWV3IGZpcnN0CiAgICAgICAgIGlmIChtSGlzdG9yeVZpZXcgIT0gbnVsbCAmJiBtSGlzdG9yeVZpZXcuaXNWaXNpYmxlKCkpIHsKLSAgICAgICAgICAgIFJlZmVyZW5jZUNvdW50ZWRUcmlnZ2VyIHQgPSBuZXcgUmVmZXJlbmNlQ291bnRlZFRyaWdnZXIodGhpcyk7Ci0gICAgICAgICAgICB0LmluY3JlbWVudCgpOwotICAgICAgICAgICAgRXZlbnRCdXMuZ2V0RGVmYXVsdCgpLnNlbmQobmV3IEhpZGVIaXN0b3J5RXZlbnQodHJ1ZSAvKiBhbmltYXRlICovLCB0KSk7Ci0gICAgICAgICAgICB0LmRlY3JlbWVudCgpOworICAgICAgICAgICAgRXZlbnRCdXMuZ2V0RGVmYXVsdCgpLnNlbmQobmV3IEhpZGVIaXN0b3J5RXZlbnQodHJ1ZSAvKiBhbmltYXRlICovKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMDEsMTIgKzI5OSwyMyBAQAogICAgICAqLwogICAgIHZvaWQgZGlzbWlzc1JlY2VudHNUb0hvbWUoYm9vbGVhbiBhbmltYXRlZCkgewogICAgICAgICBpZiAoYW5pbWF0ZWQpIHsKLSAgICAgICAgICAgIFJlZmVyZW5jZUNvdW50ZWRUcmlnZ2VyIGV4aXRUcmlnZ2VyID0gbmV3IFJlZmVyZW5jZUNvdW50ZWRUcmlnZ2VyKHRoaXMsCi0gICAgICAgICAgICAgICAgICAgIG51bGwsIG1GaW5pc2hMYXVuY2hIb21lUnVubmFibGUsIG51bGwpOworICAgICAgICAgICAgUmVmZXJlbmNlQ291bnRlZFRyaWdnZXIgZXhpdFRyaWdnZXIgPSBuZXcgUmVmZXJlbmNlQ291bnRlZFRyaWdnZXIoKTsKKyAgICAgICAgICAgIGV4aXRUcmlnZ2VyLmluY3JlbWVudCgpOworICAgICAgICAgICAgZXhpdFRyaWdnZXIuYWRkTGFzdERlY3JlbWVudFJ1bm5hYmxlKG1GaW5pc2hMYXVuY2hIb21lUnVubmFibGUpOworICAgICAgICAgICAgZXhpdFRyaWdnZXIuYWRkTGFzdERlY3JlbWVudFJ1bm5hYmxlKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgICAgIFJlY2VudHMuZ2V0U3lzdGVtU2VydmljZXMoKS5zZW5kQ2xvc2VTeXN0ZW1XaW5kb3dzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhc2VTdGF0dXNCYXIuU1lTVEVNX0RJQUxPR19SRUFTT05fSE9NRV9LRVkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgbVJlY2VudHNWaWV3LnN0YXJ0RXhpdFRvSG9tZUFuaW1hdGlvbigKICAgICAgICAgICAgICAgICAgICAgbmV3IFZpZXdBbmltYXRpb24uVGFza1ZpZXdFeGl0Q29udGV4dChleGl0VHJpZ2dlcikpOworICAgICAgICAgICAgZXhpdFRyaWdnZXIuZGVjcmVtZW50KCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtRmluaXNoTGF1bmNoSG9tZVJ1bm5hYmxlLnJ1bigpOworICAgICAgICAgICAgUmVjZW50cy5nZXRTeXN0ZW1TZXJ2aWNlcygpLnNlbmRDbG9zZVN5c3RlbVdpbmRvd3MoCisgICAgICAgICAgICAgICAgICAgIEJhc2VTdGF0dXNCYXIuU1lTVEVNX0RJQUxPR19SRUFTT05fSE9NRV9LRVkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zNDYsNyArMzU1LDcgQEAKICAgICAgICAgRXZlbnRCdXMuZ2V0RGVmYXVsdCgpLnJlZ2lzdGVyKHRoaXMsIEVWRU5UX0JVU19QUklPUklUWSk7CiAKICAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgd2lkZ2V0IGhvc3QgKHRoZSBob3N0IGlkIGlzIHN0YXRpYyBhbmQgZG9lcyBub3QgY2hhbmdlKQotICAgICAgICBpZiAoIVJlY2VudHNEZWJ1Z0ZsYWdzLlN0YXRpYy5EaXNhYmxlU2VhcmNoQmFyKSB7CisgICAgICAgIGlmIChSZWNlbnRzRGVidWdGbGFncy5TdGF0aWMuRW5hYmxlU2VhcmNoQmFyKSB7CiAgICAgICAgICAgICBtQXBwV2lkZ2V0SG9zdCA9IG5ldyBSZWNlbnRzQXBwV2lkZ2V0SG9zdCh0aGlzLCBSZWNlbnRzQXBwV2lkZ2V0SG9zdC5IT1NUX0lEKTsKICAgICAgICAgfQogICAgICAgICBtUGFja2FnZU1vbml0b3IgPSBuZXcgUmVjZW50c1BhY2thZ2VNb25pdG9yKCk7CkBAIC0zNzEsMTQgKzM4MCwxNCBAQAogICAgICAgICBtRmluaXNoTGF1bmNoSG9tZVJ1bm5hYmxlID0gbmV3IEZpbmlzaFJlY2VudHNSdW5uYWJsZShob21lSW50ZW50KTsKIAogICAgICAgICAvLyBCaW5kIHRoZSBzZWFyY2ggYXBwIHdpZGdldCB3aGVuIHdlIGZpcnN0IHN0YXJ0IHVwCi0gICAgICAgIGlmICghUmVjZW50c0RlYnVnRmxhZ3MuU3RhdGljLkRpc2FibGVTZWFyY2hCYXIpIHsKKyAgICAgICAgaWYgKFJlY2VudHNEZWJ1Z0ZsYWdzLlN0YXRpYy5FbmFibGVTZWFyY2hCYXIpIHsKICAgICAgICAgICAgIG1TZWFyY2hXaWRnZXRJbmZvID0gc3NwLmdldE9yQmluZFNlYXJjaEFwcFdpZGdldCh0aGlzLCBtQXBwV2lkZ2V0SG9zdCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBSZWdpc3RlciB0aGUgYnJvYWRjYXN0IHJlY2VpdmVyIHRvIGhhbmRsZSBtZXNzYWdlcyB3aGVuIHRoZSBzY3JlZW4gaXMgdHVybmVkIG9mZgogICAgICAgICBJbnRlbnRGaWx0ZXIgZmlsdGVyID0gbmV3IEludGVudEZpbHRlcigpOwogICAgICAgICBmaWx0ZXIuYWRkQWN0aW9uKEludGVudC5BQ1RJT05fU0NSRUVOX09GRik7Ci0gICAgICAgIGlmICghUmVjZW50c0RlYnVnRmxhZ3MuU3RhdGljLkRpc2FibGVTZWFyY2hCYXIpIHsKKyAgICAgICAgaWYgKFJlY2VudHNEZWJ1Z0ZsYWdzLlN0YXRpYy5FbmFibGVTZWFyY2hCYXIpIHsKICAgICAgICAgICAgIGZpbHRlci5hZGRBY3Rpb24oU2VhcmNoTWFuYWdlci5JTlRFTlRfR0xPQkFMX1NFQVJDSF9BQ1RJVklUWV9DSEFOR0VEKTsKICAgICAgICAgfQogICAgICAgICByZWdpc3RlclJlY2VpdmVyKG1TeXN0ZW1Ccm9hZGNhc3RSZWNlaXZlciwgZmlsdGVyKTsKQEAgLTQzOSwxMCArNDQ4LDcgQEAKICAgICAgICAgLy8gUmVzZXQgc29tZSBzdGF0ZXMKICAgICAgICAgbUlnbm9yZUFsdFRhYlJlbGVhc2UgPSBmYWxzZTsKICAgICAgICAgaWYgKG1IaXN0b3J5VmlldyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBSZWZlcmVuY2VDb3VudGVkVHJpZ2dlciB0ID0gbmV3IFJlZmVyZW5jZUNvdW50ZWRUcmlnZ2VyKHRoaXMpOwotICAgICAgICAgICAgdC5pbmNyZW1lbnQoKTsKLSAgICAgICAgICAgIEV2ZW50QnVzLmdldERlZmF1bHQoKS5zZW5kKG5ldyBIaWRlSGlzdG9yeUV2ZW50KGZhbHNlIC8qIGFuaW1hdGUgKi8sIHQpKTsKLSAgICAgICAgICAgIHQuZGVjcmVtZW50KCk7CisgICAgICAgICAgICBFdmVudEJ1cy5nZXREZWZhdWx0KCkuc2VuZChuZXcgSGlkZUhpc3RvcnlFdmVudChmYWxzZSAvKiBhbmltYXRlICovKSk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBOb3RpZnkgdGhhdCByZWNlbnRzIGlzIG5vdyBoaWRkZW4KQEAgLTQ4MSw3ICs0ODcsNyBAQAogICAgICAgICBtUGFja2FnZU1vbml0b3IudW5yZWdpc3RlcigpOwogCiAgICAgICAgIC8vIFN0b3AgbGlzdGVuaW5nIGZvciB3aWRnZXQgcGFja2FnZSBjaGFuZ2VzIGlmIHRoZXJlIHdhcyBvbmUgYm91bmQKLSAgICAgICAgaWYgKCFSZWNlbnRzRGVidWdGbGFncy5TdGF0aWMuRGlzYWJsZVNlYXJjaEJhcikgeworICAgICAgICBpZiAoUmVjZW50c0RlYnVnRmxhZ3MuU3RhdGljLkVuYWJsZVNlYXJjaEJhcikgewogICAgICAgICAgICAgbUFwcFdpZGdldEhvc3Quc3RvcExpc3RlbmluZygpOwogICAgICAgICB9CiAKQEAgLTUxMSwxMSArNTE3LDcgQEAKICAgICBwcm90ZWN0ZWQgdm9pZCBvblJlc3RvcmVJbnN0YW5jZVN0YXRlKEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKICAgICAgICAgc3VwZXIub25SZXN0b3JlSW5zdGFuY2VTdGF0ZShzYXZlZEluc3RhbmNlU3RhdGUpOwogICAgICAgICBpZiAoc2F2ZWRJbnN0YW5jZVN0YXRlLmdldEJvb2xlYW4oS0VZX1NBVkVEX1NUQVRFX0hJU1RPUllfVklTSUJMRSwgZmFsc2UpKSB7Ci0gICAgICAgICAgICBSZWZlcmVuY2VDb3VudGVkVHJpZ2dlciBwb3N0SGlkZVN0YWNrQW5pbWF0aW9uVHJpZ2dlciA9Ci0gICAgICAgICAgICAgICAgICAgIG5ldyBSZWZlcmVuY2VDb3VudGVkVHJpZ2dlcih0aGlzKTsKLSAgICAgICAgICAgIHBvc3RIaWRlU3RhY2tBbmltYXRpb25UcmlnZ2VyLmluY3JlbWVudCgpOwotICAgICAgICAgICAgRXZlbnRCdXMuZ2V0RGVmYXVsdCgpLnNlbmQobmV3IFNob3dIaXN0b3J5RXZlbnQocG9zdEhpZGVTdGFja0FuaW1hdGlvblRyaWdnZXIpKTsKLSAgICAgICAgICAgIHBvc3RIaWRlU3RhY2tBbmltYXRpb25UcmlnZ2VyLmRlY3JlbWVudCgpOworICAgICAgICAgICAgRXZlbnRCdXMuZ2V0RGVmYXVsdCgpLnNlbmQobmV3IFNob3dIaXN0b3J5RXZlbnQoKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTY0NCwxNiArNjQ2LDE0IEBACiAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQudHJpZ2dlcmVkRnJvbUhvbWVLZXkpIHsKICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgZGlzbWlzcyBSZWNlbnRzIHRvIEhvbWUKICAgICAgICAgICAgIGlmIChtSGlzdG9yeVZpZXcgIT0gbnVsbCAmJiBtSGlzdG9yeVZpZXcuaXNWaXNpYmxlKCkpIHsKLSAgICAgICAgICAgICAgICBSZWZlcmVuY2VDb3VudGVkVHJpZ2dlciB0ID0gbmV3IFJlZmVyZW5jZUNvdW50ZWRUcmlnZ2VyKHRoaXMpOwotICAgICAgICAgICAgICAgIHQuaW5jcmVtZW50KCk7Ci0gICAgICAgICAgICAgICAgdC5hZGRMYXN0RGVjcmVtZW50UnVubmFibGUobmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgICAgIEhpZGVIaXN0b3J5RXZlbnQgaGlkZUV2ZW50ID0gbmV3IEhpZGVIaXN0b3J5RXZlbnQodHJ1ZSAvKiBhbmltYXRlICovKTsKKyAgICAgICAgICAgICAgICBoaWRlRXZlbnQuYWRkUG9zdEFuaW1hdGlvbkNhbGxiYWNrKG5ldyBSdW5uYWJsZSgpIHsKICAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGRpc21pc3NSZWNlbnRzVG9Ib21lKHRydWUgLyogYW5pbWF0ZWQgKi8pOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgRXZlbnRCdXMuZ2V0RGVmYXVsdCgpLnNlbmQobmV3IEhpZGVIaXN0b3J5RXZlbnQodHJ1ZSwgdCkpOwotICAgICAgICAgICAgICAgIHQuZGVjcmVtZW50KCk7CisgICAgICAgICAgICAgICAgRXZlbnRCdXMuZ2V0RGVmYXVsdCgpLnNlbmQoaGlkZUV2ZW50KTsKIAogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBkaXNtaXNzUmVjZW50c1RvSG9tZSh0cnVlIC8qIGFuaW1hdGVkICovKTsKQEAgLTY2NSwxMSArNjY1LDExIEBACiAKICAgICBwdWJsaWMgZmluYWwgdm9pZCBvbkJ1c0V2ZW50KEVudGVyUmVjZW50c1dpbmRvd0FuaW1hdGlvbkNvbXBsZXRlZEV2ZW50IGV2ZW50KSB7CiAgICAgICAgIC8vIFRyeSBhbmQgc3RhcnQgdGhlIGVudGVyIGFuaW1hdGlvbiAob3IgcmVzdGFydCBpdCBvbiBjb25maWd1cmF0aW9uIGNoYW5nZWQpCi0gICAgICAgIFJlZmVyZW5jZUNvdW50ZWRUcmlnZ2VyIHQgPSBuZXcgUmVmZXJlbmNlQ291bnRlZFRyaWdnZXIodGhpcyk7CisgICAgICAgIFJlZmVyZW5jZUNvdW50ZWRUcmlnZ2VyIHQgPSBuZXcgUmVmZXJlbmNlQ291bnRlZFRyaWdnZXIoKTsKICAgICAgICAgVmlld0FuaW1hdGlvbi5UYXNrVmlld0VudGVyQ29udGV4dCBjdHggPSBuZXcgVmlld0FuaW1hdGlvbi5UYXNrVmlld0VudGVyQ29udGV4dCh0KTsKICAgICAgICAgY3R4LnBvc3RBbmltYXRpb25UcmlnZ2VyLmluY3JlbWVudCgpOwotICAgICAgICBpZiAobVNlYXJjaFdpZGdldEluZm8gIT0gbnVsbCkgewotICAgICAgICAgICAgaWYgKCFSZWNlbnRzRGVidWdGbGFncy5TdGF0aWMuRGlzYWJsZVNlYXJjaEJhcikgeworICAgICAgICBpZiAoUmVjZW50c0RlYnVnRmxhZ3MuU3RhdGljLkVuYWJsZVNlYXJjaEJhcikgeworICAgICAgICAgICAgaWYgKG1TZWFyY2hXaWRnZXRJbmZvICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBjdHgucG9zdEFuaW1hdGlvblRyaWdnZXIuYWRkTGFzdERlY3JlbWVudFJ1bm5hYmxlKG5ldyBSdW5uYWJsZSgpIHsKICAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKQEAgLTc4NCwxMSArNzg0LDExIEBACiAgICAgICAgICAgICAvLyBwcm92aWRlZC4KICAgICAgICAgICAgIG1IaXN0b3J5Vmlldy5zZXRTeXN0ZW1JbnNldHMobVJlY2VudHNWaWV3LmdldFN5c3RlbUluc2V0cygpKTsKICAgICAgICAgfQotICAgICAgICBtSGlzdG9yeVZpZXcuc2hvdyhtUmVjZW50c1ZpZXcuZ2V0VGFza1N0YWNrKCksIGV2ZW50LnBvc3RIaWRlU3RhY2tBbmltYXRpb25UcmlnZ2VyKTsKKyAgICAgICAgbUhpc3RvcnlWaWV3LnNob3cobVJlY2VudHNWaWV3LmdldFRhc2tTdGFjaygpLCBldmVudC5nZXRBbmltYXRpb25UcmlnZ2VyKCkpOwogICAgIH0KIAogICAgIHB1YmxpYyBmaW5hbCB2b2lkIG9uQnVzRXZlbnQoSGlkZUhpc3RvcnlFdmVudCBldmVudCkgewotICAgICAgICBtSGlzdG9yeVZpZXcuaGlkZShldmVudC5hbmltYXRlLCBldmVudC5wb3N0SGlkZUhpc3RvcnlBbmltYXRpb25UcmlnZ2VyKTsKKyAgICAgICAgbUhpc3RvcnlWaWV3LmhpZGUoZXZlbnQuYW5pbWF0ZSwgZXZlbnQuZ2V0QW5pbWF0aW9uVHJpZ2dlcigpKTsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgcmVmcmVzaFNlYXJjaFdpZGdldFZpZXcoKSB7CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9SZWNlbnRzQ29uZmlndXJhdGlvbi5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvUmVjZW50c0NvbmZpZ3VyYXRpb24uamF2YQppbmRleCA3NTQ3NTcwZi4uY2ZiZDFjYiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvUmVjZW50c0NvbmZpZ3VyYXRpb24uamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9SZWNlbnRzQ29uZmlndXJhdGlvbi5qYXZhCkBAIC03NCw5ICs3NCw2IEBACiAgICAgcHVibGljIGludCBzdmVsdGVMZXZlbDsKICAgICBwdWJsaWMgaW50IHNlYXJjaEJhclNwYWNlSGVpZ2h0UHg7CiAKLSAgICAvKiogRGV2IG9wdGlvbnMgYW5kIGdsb2JhbCBzZXR0aW5ncyAqLwotICAgIHB1YmxpYyBib29sZWFuIGxvY2tUb0FwcEVuYWJsZWQ7Ci0KICAgICBwdWJsaWMgUmVjZW50c0NvbmZpZ3VyYXRpb24oQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIC8vIExvYWQgb25seSByZXNvdXJjZXMgdGhhdCBjYW4gbm90IGNoYW5nZSBhZnRlciB0aGUgZmlyc3QgbG9hZCBlaXRoZXIgdGhyb3VnaCBkZXZlbG9wZXIKICAgICAgICAgLy8gc2V0dGluZ3Mgb3IgdmlhIG11bHRpIHdpbmRvdwpAQCAtMTA2LDEyICsxMDMsNyBAQAogICAgIC8qKgogICAgICAqIFVwZGF0ZXMgdGhlIGNvbmZpZ3VyYXRpb24gYmFzZWQgb24gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHN5c3RlbQogICAgICAqLwotICAgIHZvaWQgdXBkYXRlKENvbnRleHQgY29udGV4dCwgU3lzdGVtU2VydmljZXNQcm94eSBzc3AsIFJlY3Qgd2luZG93UmVjdCkgewotICAgICAgICAvLyBPbmx5IHVwZGF0ZSByZXNvdXJjZXMgdGhhdCBjYW4gY2hhbmdlIGFmdGVyIHRoZSBmaXJzdCBsb2FkLCBlaXRoZXIgdGhyb3VnaCBkZXZlbG9wZXIKLSAgICAgICAgLy8gc2V0dGluZ3Mgb3IgdmlhIG11bHRpIHdpbmRvdwotICAgICAgICBsb2NrVG9BcHBFbmFibGVkID0gIXNzcC5oYXNGcmVlZm9ybVdvcmtzcGFjZVN1cHBvcnQoKSAmJgotICAgICAgICAgICAgICAgIHNzcC5nZXRTeXN0ZW1TZXR0aW5nKGNvbnRleHQsIFNldHRpbmdzLlN5c3RlbS5MT0NLX1RPX0FQUF9FTkFCTEVEKSAhPSAwOwotCisgICAgdm9pZCB1cGRhdGUoUmVjdCB3aW5kb3dSZWN0KSB7CiAgICAgICAgIC8vIFJlY29tcHV0ZSBzb21lIHZhbHVlcyBiYXNlZCBvbiB0aGUgZ2l2ZW4gc3RhdGUsIHNpbmNlIHdlIGNhbiBub3QgcmVseSBvbiB0aGUgcmVzb3VyY2UKICAgICAgICAgLy8gc3lzdGVtIHRvIGdldCBjZXJ0YWluIHZhbHVlcy4KICAgICAgICAgYm9vbGVhbiBpc0xhbmRzY2FwZSA9IHdpbmRvd1JlY3Qud2lkdGgoKSA+IHdpbmRvd1JlY3QuaGVpZ2h0KCk7CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9SZWNlbnRzRGVidWdGbGFncy5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvUmVjZW50c0RlYnVnRmxhZ3MuamF2YQppbmRleCA0MGM4NGJhLi5jMzIzNTIyIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9SZWNlbnRzRGVidWdGbGFncy5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL1JlY2VudHNEZWJ1Z0ZsYWdzLmphdmEKQEAgLTMyLDggKzMyLDggQEAKICAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFN0YXRpYyB7CiAgICAgICAgIC8vIEVuYWJsZXMgZGVidWcgZHJhd2luZyBmb3IgdGhlIHRyYW5zaXRpb24gdGh1bWJuYWlsCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBFbmFibGVUcmFuc2l0aW9uVGh1bWJuYWlsRGVidWdNb2RlID0gZmFsc2U7Ci0gICAgICAgIC8vIFRoaXMgZGlzYWJsZXMgdGhlIHNlYXJjaCBiYXIgaW50ZWdyYXRpb24KLSAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIERpc2FibGVTZWFyY2hCYXIgPSB0cnVlOworICAgICAgICAvLyBUaGlzIGVuYWJsZXMgdGhlIHNlYXJjaCBiYXIgaW50ZWdyYXRpb24KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIEVuYWJsZVNlYXJjaEJhciA9IGZhbHNlOwogICAgICAgICAvLyBUaGlzIGRpc2FibGVzIHRoZSBiaXRtYXAgYW5kIGljb24gY2FjaGVzCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBEaXNhYmxlQmFja2dyb3VuZENhY2hlID0gZmFsc2U7CiAgICAgICAgIC8vIEVuYWJsZXMgdGhlIHNpbXVsYXRlZCB0YXNrIGFmZmlsaWF0aW9ucwpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvUmVjZW50c0ltcGwuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL1JlY2VudHNJbXBsLmphdmEKaW5kZXggOGEwYTA0My4uZmQwMDI4OSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvUmVjZW50c0ltcGwuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9SZWNlbnRzSW1wbC5qYXZhCkBAIC0xOSw2ICsxOSw3IEBACiBpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5T3B0aW9uczsKIGltcG9ydCBhbmRyb2lkLmFwcC5JVGFza1N0YWNrTGlzdGVuZXI7CitpbXBvcnQgYW5kcm9pZC5hcHB3aWRnZXQuQXBwV2lkZ2V0UHJvdmlkZXJJbmZvOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5BY3Rpdml0eU5vdEZvdW5kRXhjZXB0aW9uOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CkBAIC02MCw2ICs2MSw3IEBACiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy52aWV3cy5UYXNrU3RhY2tWaWV3OwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMudmlld3MuVGFza1ZpZXdIZWFkZXI7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy52aWV3cy5UYXNrVmlld1RyYW5zZm9ybTsKK2ltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5zdGF0dXNiYXIuQmFzZVN0YXR1c0JhcjsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5zdGF0dXNiYXIucGhvbmUuUGhvbmVTdGF0dXNCYXI7CiAKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwpAQCAtMTA0LDYgKzEwNiwxMCBAQAogICAgICAgICAgICAgbUhhbmRsZXIucG9zdCh0aGlzKTsKICAgICAgICAgfQogCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvbkFjdGl2aXR5UGlubmVkKCkgeworICAgICAgICB9CisKICAgICAgICAgLyoqIFByZWxvYWRzIHRoZSBuZXh0IHRhc2sgKi8KICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewogICAgICAgICAgICAgLy8gVE9ETzogVGVtcG9yYXJpbHkgc2tpcCB0aGlzIGlmIG11bHRpIHN0YWNrIGlzIGVuYWJsZWQKQEAgLTIwNyw3ICsyMTMsNyBAQAogICAgICAgICBSZWNlbnRzVGFza0xvYWRQbGFuIHBsYW4gPSBsb2FkZXIuY3JlYXRlTG9hZFBsYW4obUNvbnRleHQpOwogICAgICAgICBsb2FkZXIucHJlbG9hZFRhc2tzKHBsYW4sIHRydWUgLyogaXNUb3BUYXNrSG9tZSAqLyk7CiAgICAgICAgIFJlY2VudHNUYXNrTG9hZFBsYW4uT3B0aW9ucyBsYXVuY2hPcHRzID0gbmV3IFJlY2VudHNUYXNrTG9hZFBsYW4uT3B0aW9ucygpOwotICAgICAgICBsYXVuY2hPcHRzLm51bVZpc2libGVUYXNrcyA9IGxvYWRlci5nZXRBcHBsaWNhdGlvbkljb25DYWNoZVNpemUoKTsKKyAgICAgICAgbGF1bmNoT3B0cy5udW1WaXNpYmxlVGFza3MgPSBsb2FkZXIuZ2V0SWNvbkNhY2hlU2l6ZSgpOwogICAgICAgICBsYXVuY2hPcHRzLm51bVZpc2libGVUYXNrVGh1bWJuYWlscyA9IGxvYWRlci5nZXRUaHVtYm5haWxDYWNoZVNpemUoKTsKICAgICAgICAgbGF1bmNoT3B0cy5vbmx5TG9hZEZvckNhY2hlID0gdHJ1ZTsKICAgICAgICAgbG9hZGVyLmxvYWRUYXNrcyhtQ29udGV4dCwgcGxhbiwgbGF1bmNoT3B0cyk7CkBAIC0zNjAsNiArMzY2LDkgQEAKIAogICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgc3RhcnQgdGhlIHJlY2VudHMgYWN0aXZpdHkKICAgICAgICAgICAgICAgICBzdGFydFJlY2VudHNBY3Rpdml0eSh0b3BUYXNrLCBpc1RvcFRhc2tIb21lLnZhbHVlLCB0cnVlIC8qIGFuaW1hdGUgKi8pOworCisgICAgICAgICAgICAgICAgLy8gT25seSBjbG9zZSB0aGUgb3RoZXIgc3lzdGVtIHdpbmRvd3MgaWYgd2UgYXJlIGFjdHVhbGx5IHNob3dpbmcgcmVjZW50cworICAgICAgICAgICAgICAgIHNzcC5zZW5kQ2xvc2VTeXN0ZW1XaW5kb3dzKEJhc2VTdGF0dXNCYXIuU1lTVEVNX0RJQUxPR19SRUFTT05fUkVDRU5UX0FQUFMpOwogICAgICAgICAgICAgICAgIG1MYXN0VG9nZ2xlVGltZSA9IFN5c3RlbUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChBY3Rpdml0eU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKQEAgLTQ1Miw3ICs0NjEsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgLy8gTGF1bmNoIHRoZSB0YXNrCi0gICAgICAgIHNzcC5zdGFydEFjdGl2aXR5RnJvbVJlY2VudHMobUNvbnRleHQsIHRvVGFzay5rZXkuaWQsIHRvVGFzay5hY3Rpdml0eUxhYmVsLCBsYXVuY2hPcHRzKTsKKyAgICAgICAgc3NwLnN0YXJ0QWN0aXZpdHlGcm9tUmVjZW50cyhtQ29udGV4dCwgdG9UYXNrLmtleS5pZCwgdG9UYXNrLnRpdGxlLCBsYXVuY2hPcHRzKTsKICAgICB9CiAKICAgICAvKioKQEAgLTUyNCw3ICs1MzMsNyBAQAogICAgICAgICBNZXRyaWNzTG9nZ2VyLmNvdW50KG1Db250ZXh0LCAib3ZlcnZpZXdfYWZmaWxpYXRlZF90YXNrX2xhdW5jaCIsIDEpOwogCiAgICAgICAgIC8vIExhdW5jaCB0aGUgdGFzawotICAgICAgICBzc3Auc3RhcnRBY3Rpdml0eUZyb21SZWNlbnRzKG1Db250ZXh0LCB0b1Rhc2sua2V5LmlkLCB0b1Rhc2suYWN0aXZpdHlMYWJlbCwgbGF1bmNoT3B0cyk7CisgICAgICAgIHNzcC5zdGFydEFjdGl2aXR5RnJvbVJlY2VudHMobUNvbnRleHQsIHRvVGFzay5rZXkuaWQsIHRvVGFzay50aXRsZSwgbGF1bmNoT3B0cyk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2hvd05leHRBZmZpbGlhdGVkVGFzaygpIHsKQEAgLTU3Miw5ICs1ODEsOSBAQAogICAgICAgICBSZWN0IHdpbmRvd1JlY3QgPSBzc3AuZ2V0V2luZG93UmVjdCgpOwogCiAgICAgICAgIC8vIFVwZGF0ZSB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIGN1cnJlbnQgc3RhdGUKLSAgICAgICAgY29uZmlnLnVwZGF0ZShtQ29udGV4dCwgc3NwLCBzc3AuZ2V0V2luZG93UmVjdCgpKTsKKyAgICAgICAgY29uZmlnLnVwZGF0ZSh3aW5kb3dSZWN0KTsKIAotICAgICAgICBpZiAoIVJlY2VudHNEZWJ1Z0ZsYWdzLlN0YXRpYy5EaXNhYmxlU2VhcmNoQmFyICYmIHRyeUFuZEJpbmRTZWFyY2hXaWRnZXQpIHsKKyAgICAgICAgaWYgKFJlY2VudHNEZWJ1Z0ZsYWdzLlN0YXRpYy5FbmFibGVTZWFyY2hCYXIgJiYgdHJ5QW5kQmluZFNlYXJjaFdpZGdldCkgewogICAgICAgICAgICAgLy8gVHJ5IGFuZCBwcmUtZW1wdGl2ZWx5IGJpbmQgdGhlIHNlYXJjaCB3aWRnZXQgb24gc3RhcnR1cCB0byBlbnN1cmUgdGhhdCB3ZQogICAgICAgICAgICAgLy8gaGF2ZSB0aGUgcmlnaHQgdGh1bWJuYWlsIGJvdW5kcyB0byBhbmltYXRlIHRvLgogICAgICAgICAgICAgLy8gTm90ZTogV2UgaGF2ZSB0byByZWxvYWQgdGhlIHdpZGdldCBpZCBiZWZvcmUgd2UgZ2V0IHRoZSB0YXNrIHN0YWNrIGJvdW5kcyBiZWxvdwpAQCAtODUwLDExICs4NTksMTkgQEAKICAgICAgICAgaWYgKCF1c2VUaHVtYm5haWxUcmFuc2l0aW9uKSB7CiAgICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyB0aHVtYm5haWwgdHJhbnNpdGlvbiwgYnV0IGlzIGxhdW5jaGluZyBmcm9tIGhvbWUgaW50byByZWNlbnRzLCB0aGVuCiAgICAgICAgICAgICAvLyB1c2UgYSBxdWljayBob21lIHRyYW5zaXRpb24gYW5kIGRvIHRoZSBhbmltYXRpb24gZnJvbSBob21lCi0gICAgICAgICAgICBpZiAoIVJlY2VudHNEZWJ1Z0ZsYWdzLlN0YXRpYy5EaXNhYmxlU2VhcmNoQmFyICYmIGhhc1JlY2VudFRhc2tzKSB7CisgICAgICAgICAgICBpZiAoaGFzUmVjZW50VGFza3MpIHsKICAgICAgICAgICAgICAgICBTeXN0ZW1TZXJ2aWNlc1Byb3h5IHNzcCA9IFJlY2VudHMuZ2V0U3lzdGVtU2VydmljZXMoKTsKICAgICAgICAgICAgICAgICBTdHJpbmcgaG9tZUFjdGl2aXR5UGFja2FnZSA9IHNzcC5nZXRIb21lQWN0aXZpdHlQYWNrYWdlTmFtZSgpOwotICAgICAgICAgICAgICAgIFN0cmluZyBzZWFyY2hXaWRnZXRQYWNrYWdlID0gUHJlZnMuZ2V0U3RyaW5nKG1Db250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgUHJlZnMuS2V5Lk9WRVJWSUVXX1NFQVJDSF9BUFBfV0lER0VUX1BBQ0tBR0UsIG51bGwpOworICAgICAgICAgICAgICAgIFN0cmluZyBzZWFyY2hXaWRnZXRQYWNrYWdlID0gbnVsbDsKKyAgICAgICAgICAgICAgICBpZiAoUmVjZW50c0RlYnVnRmxhZ3MuU3RhdGljLkVuYWJsZVNlYXJjaEJhcikgeworICAgICAgICAgICAgICAgICAgICBzZWFyY2hXaWRnZXRQYWNrYWdlID0gUHJlZnMuZ2V0U3RyaW5nKG1Db250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByZWZzLktleS5PVkVSVklFV19TRUFSQ0hfQVBQX1dJREdFVF9QQUNLQUdFLCBudWxsKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBBcHBXaWRnZXRQcm92aWRlckluZm8gc2VhcmNoV2lkZ2V0SW5mbyA9IHNzcC5yZXNvbHZlU2VhcmNoQXBwV2lkZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzZWFyY2hXaWRnZXRJbmZvICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFdpZGdldFBhY2thZ2UgPSBzZWFyY2hXaWRnZXRJbmZvLnByb3ZpZGVyLmdldFBhY2thZ2VOYW1lKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAvLyBEZXRlcm1pbmUgd2hldGhlciB3ZSBhcmUgY29taW5nIGZyb20gYSBzZWFyY2ggb3duZWQgaG9tZSBhY3Rpdml0eQogICAgICAgICAgICAgICAgIGJvb2xlYW4gZnJvbVNlYXJjaEhvbWUgPSAoaG9tZUFjdGl2aXR5UGFja2FnZSAhPSBudWxsKSAmJgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvZXZlbnRzL0V2ZW50QnVzLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9ldmVudHMvRXZlbnRCdXMuamF2YQppbmRleCBkNzIyMThmLi41YzQ5YWMzIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9ldmVudHMvRXZlbnRCdXMuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9ldmVudHMvRXZlbnRCdXMuamF2YQpAQCAtMjgsNiArMjgsOCBAQAogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiBpbXBvcnQgYW5kcm9pZC51dGlsLk11dGFibGVCb29sZWFuOwogCitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5taXNjLlJlZmVyZW5jZUNvdW50ZWRUcmlnZ2VyOworCiBpbXBvcnQgamF2YS5sYW5nLnJlZi5XZWFrUmVmZXJlbmNlOwogaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkNvbnN0cnVjdG9yOwogaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25UYXJnZXRFeGNlcHRpb247CkBAIC0yMjAsNiArMjIyLDIwIEBACiAgICAgICAgIC8vIE9ubHkgYWNjZXNzaWJsZSBmcm9tIGRlcml2ZWQgZXZlbnRzCiAgICAgICAgIHByb3RlY3RlZCBFdmVudCgpIHt9CiAKKyAgICAgICAgLyoqCisgICAgICAgICAqIENhbGxlZCBieSB0aGUgRXZlbnRCdXMgcHJpb3IgdG8gZGlzcGF0Y2hpbmcgdGhpcyBldmVudCB0byBhbnkgc3Vic2NyaWJlciBvZiB0aGlzIGV2ZW50LgorICAgICAgICAgKi8KKyAgICAgICAgdm9pZCBvblByZURpc3BhdGNoKCkgeworICAgICAgICAgICAgLy8gRG8gbm90aGluZworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIENhbGxlZCBieSB0aGUgRXZlbnRCdXMgYWZ0ZXIgZGlzcGF0Y2hpbmcgdGhpcyBldmVudCB0byBldmVyeSBzdWJzY3JpYmVyIG9mIHRoaXMgZXZlbnQuCisgICAgICAgICAqLworICAgICAgICB2b2lkIG9uUG9zdERpc3BhdGNoKCkgeworICAgICAgICAgICAgLy8gRG8gbm90aGluZworICAgICAgICB9CisKICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHByb3RlY3RlZCBPYmplY3QgY2xvbmUoKSB0aHJvd3MgQ2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24gewogICAgICAgICAgICAgRXZlbnQgZXZ0ID0gKEV2ZW50KSBzdXBlci5jbG9uZSgpOwpAQCAtMjMwLDYgKzI0Niw1MSBAQAogICAgIH0KIAogICAgIC8qKgorICAgICAqIEFuIGV2ZW50IHRoYXQgcmVwcmVzZW50cyBhbiBhbmltYXRlZCBzdGF0ZSBjaGFuZ2UsIHdoaWNoIGFsbG93cyBzdWJzY3JpYmVycyB0byBjb29yZGluYXRlCisgICAgICogY2FsbGJhY2tzIHdoaWNoIGhhcHBlbiBhZnRlciB0aGUgYW5pbWF0aW9uIGhhcyB0YWtlbiBwbGFjZS4KKyAgICAgKgorICAgICAqIEludGVybmFsbHksIGl0IGlzIGd1YXJhbnRlZWQgdGhhdCBpbmNyZW1lbnQoKSBhbmQgZGVjcmVtZW50KCkgd2lsbCBiZSBjYWxsZWQgYmVmb3JlIGFuZCB0aGUKKyAgICAgKiBhZnRlciB0aGUgZXZlbnQgaXMgZGlzcGF0Y2hlZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEFuaW1hdGVkRXZlbnQgZXh0ZW5kcyBFdmVudCB7CisKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBSZWZlcmVuY2VDb3VudGVkVHJpZ2dlciBtVHJpZ2dlciA9IG5ldyBSZWZlcmVuY2VDb3VudGVkVHJpZ2dlcigpOworCisgICAgICAgIC8vIE9ubHkgYWNjZXNzaWJsZSBmcm9tIGRlcml2ZWQgZXZlbnRzCisgICAgICAgIHByb3RlY3RlZCBBbmltYXRlZEV2ZW50KCkge30KKworICAgICAgICAvKioKKyAgICAgICAgICogUmV0dXJucyB0aGUgcmVmZXJlbmNlIGNvdW50ZWQgdHJpZ2dlciB0aGF0IGNvb3JkaW5hdGVzIHRoZSBhbmltYXRpb25zIGZvciB0aGlzIGV2ZW50LgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIFJlZmVyZW5jZUNvdW50ZWRUcmlnZ2VyIGdldEFuaW1hdGlvblRyaWdnZXIoKSB7CisgICAgICAgICAgICByZXR1cm4gbVRyaWdnZXI7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogQWRkcyBhIGNhbGxiYWNrIHRoYXQgaXMgZ3VhcmFudGVlZCB0byBiZSBjYWxsZWQgYWZ0ZXIgdGhlIHN0YXRlIGhhcyBjaGFuZ2VkIHJlZ2FyZGxlc3Mgb2YKKyAgICAgICAgICogd2hldGhlciBhbiBhY3R1YWwgYW5pbWF0aW9uIHRvb2sgcGxhY2UuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgdm9pZCBhZGRQb3N0QW5pbWF0aW9uQ2FsbGJhY2soUnVubmFibGUgcikgeworICAgICAgICAgICAgbVRyaWdnZXIuYWRkTGFzdERlY3JlbWVudFJ1bm5hYmxlKHIpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHZvaWQgb25QcmVEaXNwYXRjaCgpIHsKKyAgICAgICAgICAgIG1UcmlnZ2VyLmluY3JlbWVudCgpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHZvaWQgb25Qb3N0RGlzcGF0Y2goKSB7CisgICAgICAgICAgICBtVHJpZ2dlci5kZWNyZW1lbnQoKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgT2JqZWN0IGNsb25lKCkgdGhyb3dzIENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBDbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCiAgICAgICogQW4gaW50ZXItcHJvY2VzcyBldmVudCBzdXBlciBjbGFzcyB0aGF0IGFsbG93cyB1cyB0byB0cmFjayB1c2VyIHN0YXRlIGFjcm9zcyBzdWJzY3JpYmVyCiAgICAgICogaW52b2NhdGlvbnMuCiAgICAgICovCkBAIC03MDYsNiArNzY3LDExIEBACiAgICAgICAgIGlmIChldmVudEhhbmRsZXJzID09IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorCisgICAgICAgIC8vIFByZXBhcmUgdGhpcyBldmVudAorICAgICAgICBib29sZWFuIGhhc1Bvc3RlZEV2ZW50ID0gZmFsc2U7CisgICAgICAgIGV2ZW50Lm9uUHJlRGlzcGF0Y2goKTsKKwogICAgICAgICAvLyBXZSBuZWVkIHRvIGNsb25lIHRoZSBsaXN0IGluIGNhc2UgYSBzdWJzY3JpYmVyIHVucmVnaXN0ZXJzIGl0c2VsZiBkdXJpbmcgdHJhdmVyc2FsCiAgICAgICAgIGV2ZW50SGFuZGxlcnMgPSAoQXJyYXlMaXN0PEV2ZW50SGFuZGxlcj4pIGV2ZW50SGFuZGxlcnMuY2xvbmUoKTsKICAgICAgICAgZm9yIChmaW5hbCBFdmVudEhhbmRsZXIgZXZlbnRIYW5kbGVyIDogZXZlbnRIYW5kbGVycykgewpAQCAtNzE3LDExICs3ODMsMjQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzRXZlbnQoZXZlbnRIYW5kbGVyLCBldmVudCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICBoYXNQb3N0ZWRFdmVudCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0V2ZW50KGV2ZW50SGFuZGxlciwgZXZlbnQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQorCisgICAgICAgIC8vIENsZWFuIHVwIGFmdGVyIHRoaXMgZXZlbnQsIGRlZmVycmluZyB1bnRpbCBhbGwgc3Vic2NyaWJlcnMgaGF2ZSBiZWVuIGNhbGxlZAorICAgICAgICBpZiAoaGFzUG9zdGVkRXZlbnQpIHsKKyAgICAgICAgICAgIG1IYW5kbGVyLnBvc3QobmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICAgICAgZXZlbnQub25Qb3N0RGlzcGF0Y2goKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGV2ZW50Lm9uUG9zdERpc3BhdGNoKCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICAvKioKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL2V2ZW50cy9hY3Rpdml0eS9IaWRlSGlzdG9yeUV2ZW50LmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9ldmVudHMvYWN0aXZpdHkvSGlkZUhpc3RvcnlFdmVudC5qYXZhCmluZGV4IDM0MTI4NTIuLmU4NWRlYTMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL2V2ZW50cy9hY3Rpdml0eS9IaWRlSGlzdG9yeUV2ZW50LmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvZXZlbnRzL2FjdGl2aXR5L0hpZGVIaXN0b3J5RXZlbnQuamF2YQpAQCAtMjIsMTcgKzIyLDExIEBACiAvKioKICAqIFRoaXMgaXMgc2VudCB3aGVuIHRoZSBoaXN0b3J5IHZpZXcgd2lsbCBiZSBjbG9zZWQuCiAgKi8KLXB1YmxpYyBjbGFzcyBIaWRlSGlzdG9yeUV2ZW50IGV4dGVuZHMgRXZlbnRCdXMuRXZlbnQgeworcHVibGljIGNsYXNzIEhpZGVIaXN0b3J5RXZlbnQgZXh0ZW5kcyBFdmVudEJ1cy5BbmltYXRlZEV2ZW50IHsKIAogICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIGFuaW1hdGU7Ci0gICAgcHVibGljIGZpbmFsIFJlZmVyZW5jZUNvdW50ZWRUcmlnZ2VyIHBvc3RIaWRlSGlzdG9yeUFuaW1hdGlvblRyaWdnZXI7CiAKLSAgICAvKioKLSAgICAgKiBAcGFyYW0gcG9zdEhpZGVIaXN0b3J5QW5pbWF0aW9uVHJpZ2dlciB0aGUgdHJpZ2dlciB0aGF0IGdldHMgY2FsbGVkIHdoZW4gYWxsIHRoZSBoaXN0b3J5IGFuaW1hdGlvbnMgYXJlIGZpbmlzaGVkCi0gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiB0cmFuc2l0aW9uaW5nIGZyb20gdGhlIGhpc3RvcnkgdmlldwotICAgICAqLwotICAgIHB1YmxpYyBIaWRlSGlzdG9yeUV2ZW50KGJvb2xlYW4gYW5pbWF0ZSwgUmVmZXJlbmNlQ291bnRlZFRyaWdnZXIgcG9zdEhpZGVIaXN0b3J5QW5pbWF0aW9uVHJpZ2dlcikgeworICAgIHB1YmxpYyBIaWRlSGlzdG9yeUV2ZW50KGJvb2xlYW4gYW5pbWF0ZSkgewogICAgICAgICB0aGlzLmFuaW1hdGUgPSBhbmltYXRlOwotICAgICAgICB0aGlzLnBvc3RIaWRlSGlzdG9yeUFuaW1hdGlvblRyaWdnZXIgPSBwb3N0SGlkZUhpc3RvcnlBbmltYXRpb25UcmlnZ2VyOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL2V2ZW50cy9hY3Rpdml0eS9TaG93SGlzdG9yeUV2ZW50LmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9ldmVudHMvYWN0aXZpdHkvU2hvd0hpc3RvcnlFdmVudC5qYXZhCmluZGV4IGM5MTc1MmUuLjk0ZTVhOTcgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL2V2ZW50cy9hY3Rpdml0eS9TaG93SGlzdG9yeUV2ZW50LmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvZXZlbnRzL2FjdGl2aXR5L1Nob3dIaXN0b3J5RXZlbnQuamF2YQpAQCAtMjIsMTUgKzIyLDggQEAKIC8qKgogICogVGhpcyBpcyBzZW50IHdoZW4gdGhlIGhpc3RvcnkgdmlldyBidXR0b24gaXMgY2xpY2tlZC4KICAqLwotcHVibGljIGNsYXNzIFNob3dIaXN0b3J5RXZlbnQgZXh0ZW5kcyBFdmVudEJ1cy5FdmVudCB7CitwdWJsaWMgY2xhc3MgU2hvd0hpc3RvcnlFdmVudCBleHRlbmRzIEV2ZW50QnVzLkFuaW1hdGVkRXZlbnQgewogCi0gICAgcHVibGljIGZpbmFsIFJlZmVyZW5jZUNvdW50ZWRUcmlnZ2VyIHBvc3RIaWRlU3RhY2tBbmltYXRpb25UcmlnZ2VyOworICAgIC8vIFNpbXBsZSBldmVudAogCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHBvc3RIaWRlU3RhY2tBbmltYXRpb25UcmlnZ2VyIHRoZSB0cmlnZ2VyIHRoYXQgZ2V0cyBjYWxsZWQgd2hlbiBhbGwgdGhlIHRhc2sgYW5pbWF0aW9ucyBhcmUgZmluaXNoZWQgd2hlbgotICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uaW5nIHRvIHRoZSBoaXN0b3J5IHZpZXcKLSAgICAgKi8KLSAgICBwdWJsaWMgU2hvd0hpc3RvcnlFdmVudChSZWZlcmVuY2VDb3VudGVkVHJpZ2dlciBwb3N0SGlkZVN0YWNrQW5pbWF0aW9uVHJpZ2dlcikgewotICAgICAgICB0aGlzLnBvc3RIaWRlU3RhY2tBbmltYXRpb25UcmlnZ2VyID0gcG9zdEhpZGVTdGFja0FuaW1hdGlvblRyaWdnZXI7Ci0gICAgfQogfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvZXZlbnRzL3VpL2RyYWduZHJvcC9EcmFnRW5kRXZlbnQuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL2V2ZW50cy91aS9kcmFnbmRyb3AvRHJhZ0VuZEV2ZW50LmphdmEKaW5kZXggM2RlZWI0Ny4uOGFhNDYzMSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvZXZlbnRzL3VpL2RyYWduZHJvcC9EcmFnRW5kRXZlbnQuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9ldmVudHMvdWkvZHJhZ25kcm9wL0RyYWdFbmRFdmVudC5qYXZhCkBAIC0yNSwxOCArMjUsMTUgQEAKIC8qKgogICogVGhpcyBldmVudCBpcyBzZW50IHdoZW5ldmVyIGEgZHJhZyBlbmRzLgogICovCi1wdWJsaWMgY2xhc3MgRHJhZ0VuZEV2ZW50IGV4dGVuZHMgRXZlbnRCdXMuRXZlbnQgeworcHVibGljIGNsYXNzIERyYWdFbmRFdmVudCBleHRlbmRzIEV2ZW50QnVzLkFuaW1hdGVkRXZlbnQgewogCiAgICAgcHVibGljIGZpbmFsIFRhc2sgdGFzazsKICAgICBwdWJsaWMgZmluYWwgVGFza1ZpZXcgdGFza1ZpZXc7CiAgICAgcHVibGljIGZpbmFsIERyb3BUYXJnZXQgZHJvcFRhcmdldDsKLSAgICBwdWJsaWMgZmluYWwgUmVmZXJlbmNlQ291bnRlZFRyaWdnZXIgcG9zdEFuaW1hdGlvblRyaWdnZXI7CiAKLSAgICBwdWJsaWMgRHJhZ0VuZEV2ZW50KFRhc2sgdGFzaywgVGFza1ZpZXcgdGFza1ZpZXcsIERyb3BUYXJnZXQgZHJvcFRhcmdldCwKLSAgICAgICAgICAgIFJlZmVyZW5jZUNvdW50ZWRUcmlnZ2VyIHBvc3RBbmltYXRpb25UcmlnZ2VyKSB7CisgICAgcHVibGljIERyYWdFbmRFdmVudChUYXNrIHRhc2ssIFRhc2tWaWV3IHRhc2tWaWV3LCBEcm9wVGFyZ2V0IGRyb3BUYXJnZXQpIHsKICAgICAgICAgdGhpcy50YXNrID0gdGFzazsKICAgICAgICAgdGhpcy50YXNrVmlldyA9IHRhc2tWaWV3OwogICAgICAgICB0aGlzLmRyb3BUYXJnZXQgPSBkcm9wVGFyZ2V0OwotICAgICAgICB0aGlzLnBvc3RBbmltYXRpb25UcmlnZ2VyID0gcG9zdEFuaW1hdGlvblRyaWdnZXI7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvaGlzdG9yeS9SZWNlbnRzSGlzdG9yeUFkYXB0ZXIuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL2hpc3RvcnkvUmVjZW50c0hpc3RvcnlBZGFwdGVyLmphdmEKaW5kZXggNzY0MzljMC4uNzJlYzdiNyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvaGlzdG9yeS9SZWNlbnRzSGlzdG9yeUFkYXB0ZXIuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9oaXN0b3J5L1JlY2VudHNIaXN0b3J5QWRhcHRlci5qYXZhCkBAIC0zMSw3ICszMSw2IEBACiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5ldmVudHMuRXZlbnRCdXM7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5ldmVudHMuYWN0aXZpdHkuSGlkZUhpc3RvcnlCdXR0b25FdmVudDsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLmV2ZW50cy5hY3Rpdml0eS5IaWRlSGlzdG9yeUV2ZW50OwotaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMubWlzYy5SZWZlcmVuY2VDb3VudGVkVHJpZ2dlcjsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLm1pc2MuU3lzdGVtU2VydmljZXNQcm94eTsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLm1vZGVsLlJlY2VudHNUYXNrTG9hZGVyOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMubW9kZWwuVGFzazsKQEAgLTcyLDcgKzcxLDcgQEAKICAgICAgICAgcHVibGljIHZvaWQgb25UYXNrRGF0YUxvYWRlZChUYXNrIHRhc2spIHsKICAgICAgICAgICAgIC8vIFRoaXMgY2FsbGJhY2sgaXMgb25seSBtYWRlIGZvciBUYXNrUm93IHZpZXcgaG9sZGVycwogICAgICAgICAgICAgSW1hZ2VWaWV3IGl2ID0gKEltYWdlVmlldykgY29udGVudC5maW5kVmlld0J5SWQoUi5pZC5pY29uKTsKLSAgICAgICAgICAgIGl2LnNldEltYWdlRHJhd2FibGUodGFzay5hcHBsaWNhdGlvbkljb24pOworICAgICAgICAgICAgaXYuc2V0SW1hZ2VEcmF3YWJsZSh0YXNrLmljb24pOwogICAgICAgICB9CiAKICAgICAgICAgQE92ZXJyaWRlCkBAIC0xMjgsNyArMTI3LDcgQEAKICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7CiAgICAgICAgICAgICBTeXN0ZW1TZXJ2aWNlc1Byb3h5IHNzcCA9IFJlY2VudHMuZ2V0U3lzdGVtU2VydmljZXMoKTsKLSAgICAgICAgICAgIHNzcC5zdGFydEFjdGl2aXR5RnJvbVJlY2VudHModi5nZXRDb250ZXh0KCksIHRhc2sua2V5LmlkLCB0YXNrLmFjdGl2aXR5TGFiZWwsCisgICAgICAgICAgICBzc3Auc3RhcnRBY3Rpdml0eUZyb21SZWNlbnRzKHYuZ2V0Q29udGV4dCgpLCB0YXNrLmtleS5pZCwgdGFzay50aXRsZSwKICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlPcHRpb25zLm1ha2VCYXNpYygpKTsKICAgICAgICAgfQogCkBAIC0yNDAsNyArMjM5LDcgQEAKICAgICAgICAgICAgICAgICBUYXNrUm93IHRhc2tSb3cgPSAoVGFza1Jvdykgcm93OwogICAgICAgICAgICAgICAgIHRhc2tSb3cudGFzay5hZGRDYWxsYmFjayhob2xkZXIpOwogICAgICAgICAgICAgICAgIFRleHRWaWV3IHR2ID0gKFRleHRWaWV3KSBob2xkZXIuY29udGVudC5maW5kVmlld0J5SWQoUi5pZC5kZXNjcmlwdGlvbik7Ci0gICAgICAgICAgICAgICAgdHYuc2V0VGV4dCh0YXNrUm93LnRhc2suYWN0aXZpdHlMYWJlbCk7CisgICAgICAgICAgICAgICAgdHYuc2V0VGV4dCh0YXNrUm93LnRhc2sudGl0bGUpOwogICAgICAgICAgICAgICAgIGhvbGRlci5jb250ZW50LnNldE9uQ2xpY2tMaXN0ZW5lcih0YXNrUm93KTsKICAgICAgICAgICAgICAgICBsb2FkZXIubG9hZFRhc2tEYXRhKHRhc2tSb3cudGFzayk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0zMTMsMTAgKzMxMiw3IEBACiAgICAgICogRGlzbWlzc2VzIGhpc3RvcnkgYmFjayB0byB0aGUgc3RhY2sgdmlldy4KICAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgZGlzbWlzc0hpc3RvcnkoKSB7Ci0gICAgICAgIFJlZmVyZW5jZUNvdW50ZWRUcmlnZ2VyIHQgPSBuZXcgUmVmZXJlbmNlQ291bnRlZFRyaWdnZXIobUNvbnRleHQpOwotICAgICAgICB0LmluY3JlbWVudCgpOwotICAgICAgICBFdmVudEJ1cy5nZXREZWZhdWx0KCkuc2VuZChuZXcgSGlkZUhpc3RvcnlFdmVudCh0cnVlIC8qIGFuaW1hdGUgKi8sIHQpKTsKLSAgICAgICAgdC5kZWNyZW1lbnQoKTsKKyAgICAgICAgRXZlbnRCdXMuZ2V0RGVmYXVsdCgpLnNlbmQobmV3IEhpZGVIaXN0b3J5RXZlbnQodHJ1ZSAvKiBhbmltYXRlICovKSk7CiAgICAgICAgIEV2ZW50QnVzLmdldERlZmF1bHQoKS5zZW5kKG5ldyBIaWRlSGlzdG9yeUJ1dHRvbkV2ZW50KCkpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL21pc2MvUmVmZXJlbmNlQ291bnRlZFRyaWdnZXIuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL21pc2MvUmVmZXJlbmNlQ291bnRlZFRyaWdnZXIuamF2YQppbmRleCBiMDY1MzlhLi4zNjdmMmUyIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9taXNjL1JlZmVyZW5jZUNvdW50ZWRUcmlnZ2VyLmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvbWlzYy9SZWZlcmVuY2VDb3VudGVkVHJpZ2dlci5qYXZhCkBAIC0yOSw5ICsyOSw2IEBACiAgKi8KIHB1YmxpYyBjbGFzcyBSZWZlcmVuY2VDb3VudGVkVHJpZ2dlciB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIlJlZmVyZW5jZUNvdW50ZWRUcmlnZ2VyIjsKLQotICAgIENvbnRleHQgbUNvbnRleHQ7CiAgICAgaW50IG1Db3VudDsKICAgICBBcnJheUxpc3Q8UnVubmFibGU+IG1GaXJzdEluY1J1bm5hYmxlcyA9IG5ldyBBcnJheUxpc3Q8UnVubmFibGU+KCk7CiAgICAgQXJyYXlMaXN0PFJ1bm5hYmxlPiBtTGFzdERlY1J1bm5hYmxlcyA9IG5ldyBBcnJheUxpc3Q8UnVubmFibGU+KCk7CkBAIC01MSwxMyArNDgsMTIgQEAKICAgICAgICAgfQogICAgIH07CiAKLSAgICBwdWJsaWMgUmVmZXJlbmNlQ291bnRlZFRyaWdnZXIoQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICAgIHRoaXMoY29udGV4dCwgbnVsbCwgbnVsbCwgbnVsbCk7CisgICAgcHVibGljIFJlZmVyZW5jZUNvdW50ZWRUcmlnZ2VyKCkgeworICAgICAgICB0aGlzKG51bGwsIG51bGwsIG51bGwpOwogICAgIH0KIAotICAgIHB1YmxpYyBSZWZlcmVuY2VDb3VudGVkVHJpZ2dlcihDb250ZXh0IGNvbnRleHQsIFJ1bm5hYmxlIGZpcnN0SW5jUnVubmFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bm5hYmxlIGxhc3REZWNSdW5uYWJsZSwgUnVubmFibGUgZXJyb3JSdW5hbmFibGUpIHsKLSAgICAgICAgbUNvbnRleHQgPSBjb250ZXh0OworICAgIHB1YmxpYyBSZWZlcmVuY2VDb3VudGVkVHJpZ2dlcihSdW5uYWJsZSBmaXJzdEluY1J1bm5hYmxlLCBSdW5uYWJsZSBsYXN0RGVjUnVubmFibGUsCisgICAgICAgICAgICBSdW5uYWJsZSBlcnJvclJ1bmFuYWJsZSkgewogICAgICAgICBpZiAoZmlyc3RJbmNSdW5uYWJsZSAhPSBudWxsKSBtRmlyc3RJbmNSdW5uYWJsZXMuYWRkKGZpcnN0SW5jUnVubmFibGUpOwogICAgICAgICBpZiAobGFzdERlY1J1bm5hYmxlICE9IG51bGwpIG1MYXN0RGVjUnVubmFibGVzLmFkZChsYXN0RGVjUnVubmFibGUpOwogICAgICAgICBtRXJyb3JSdW5uYWJsZSA9IGVycm9yUnVuYW5hYmxlOwpAQCAtODEsMjIgKzc3LDE0IEBACiAKICAgICAvKiogQWRkcyBhIHJ1bm5hYmxlIHRvIHRoZSBsYXN0LWRlY3JlbWVudCBydW5uYWJsZXMgbGlzdC4gKi8KICAgICBwdWJsaWMgdm9pZCBhZGRMYXN0RGVjcmVtZW50UnVubmFibGUoUnVubmFibGUgcikgewotICAgICAgICAvLyBUbyBlbnN1cmUgdGhhdCB0aGUgbGFzdCBkZWNyZW1lbnQgYWx3YXlzIGNhbGxzLCB3ZSBpbmNyZW1lbnQgYW5kIGRlY3JlbWVudCBhZnRlciBzZXR0aW5nCi0gICAgICAgIC8vIHRoZSBsYXN0IGRlY3JlbWVudCBydW5uYWJsZQotICAgICAgICBib29sZWFuIGVuc3VyZUxhc3REZWNyZW1lbnQgPSAobUNvdW50ID09IDApOwotICAgICAgICBpZiAoZW5zdXJlTGFzdERlY3JlbWVudCkgaW5jcmVtZW50KCk7CiAgICAgICAgIG1MYXN0RGVjUnVubmFibGVzLmFkZChyKTsKLSAgICAgICAgaWYgKGVuc3VyZUxhc3REZWNyZW1lbnQpIGRlY3JlbWVudCgpOwogICAgIH0KIAogICAgIC8qKiBEZWNyZW1lbnRzIHRoZSByZWYgY291bnQgKi8KICAgICBwdWJsaWMgdm9pZCBkZWNyZW1lbnQoKSB7CiAgICAgICAgIG1Db3VudC0tOwotICAgICAgICBpZiAobUNvdW50ID09IDAgJiYgIW1MYXN0RGVjUnVubmFibGVzLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgaW50IG51bVJ1bm5hYmxlcyA9IG1MYXN0RGVjUnVubmFibGVzLnNpemUoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUnVubmFibGVzOyBpKyspIHsKLSAgICAgICAgICAgICAgICBtTGFzdERlY1J1bm5hYmxlcy5nZXQoaSkucnVuKCk7Ci0gICAgICAgICAgICB9CisgICAgICAgIGlmIChtQ291bnQgPT0gMCkgeworICAgICAgICAgICAgZmx1c2hMYXN0RGVjcmVtZW50UnVubmFibGVzKCk7CiAgICAgICAgIH0gZWxzZSBpZiAobUNvdW50IDwgMCkgewogICAgICAgICAgICAgaWYgKG1FcnJvclJ1bm5hYmxlICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBtRXJyb3JSdW5uYWJsZS5ydW4oKTsKQEAgLTEwNiw2ICs5NCwxOSBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgLyoqCisgICAgICogUnVucyBhbmQgY2xlYXJzIGFsbCB0aGUgbGFzdC1kZWNyZW1lbnQgcnVubmFibGVzIG5vdy4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBmbHVzaExhc3REZWNyZW1lbnRSdW5uYWJsZXMoKSB7CisgICAgICAgIGlmICghbUxhc3REZWNSdW5uYWJsZXMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBpbnQgbnVtUnVubmFibGVzID0gbUxhc3REZWNSdW5uYWJsZXMuc2l6ZSgpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1SdW5uYWJsZXM7IGkrKykgeworICAgICAgICAgICAgICAgIG1MYXN0RGVjUnVubmFibGVzLmdldChpKS5ydW4oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBtTGFzdERlY1J1bm5hYmxlcy5jbGVhcigpOworICAgIH0KKwogICAgIC8qKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gZGVjcmVtZW50IHRoaXMgdHJpZ2dlciBhcyBhIHJ1bm5hYmxlLiAqLwogICAgIHB1YmxpYyBSdW5uYWJsZSBkZWNyZW1lbnRBc1J1bm5hYmxlKCkgewogICAgICAgICByZXR1cm4gbURlY3JlbWVudFJ1bm5hYmxlOwpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvbWlzYy9TeXN0ZW1TZXJ2aWNlc1Byb3h5LmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9taXNjL1N5c3RlbVNlcnZpY2VzUHJveHkuamF2YQppbmRleCA1ODg4YjMwLi4xMDgwMjlkIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9taXNjL1N5c3RlbVNlcnZpY2VzUHJveHkuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9taXNjL1N5c3RlbVNlcnZpY2VzUHJveHkuamF2YQpAQCAtNDMsNiArNDMsNyBAQAogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUG9ydGVyRHVmZjsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBvcnRlckR1ZmZYZmVybW9kZTsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3Q7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5CaXRtYXBEcmF3YWJsZTsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkNvbG9yRHJhd2FibGU7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZTsKIGltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKQEAgLTU3LDcgKzU4LDcgQEAKIGltcG9ydCBhbmRyb2lkLnV0aWwuTXV0YWJsZUJvb2xlYW47CiBpbXBvcnQgYW5kcm9pZC51dGlsLlBhaXI7CiBpbXBvcnQgYW5kcm9pZC52aWV3LkRpc3BsYXk7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LklEb2NrRGl2aWRlclZpc2liaWxpdHlMaXN0ZW5lcjsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuSURvY2tlZFN0YWNrTGlzdGVuZXI7CiBpbXBvcnQgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXJHbG9iYWw7CiBpbXBvcnQgYW5kcm9pZC52aWV3LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eU1hbmFnZXI7CkBAIC02Nyw2ICs2OCw3IEBACiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuUjsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLlJlY2VudHNEZWJ1Z0ZsYWdzOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMuUmVjZW50c0ltcGw7CitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLkJhc2VTdGF0dXNCYXI7CiAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CkBAIC03OCw2ICs4MCw3IEBACiBpbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5TdGFja0lkLkZSRUVGT1JNX1dPUktTUEFDRV9TVEFDS19JRDsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlN0YWNrSWQuSE9NRV9TVEFDS19JRDsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlN0YWNrSWQuSU5WQUxJRF9TVEFDS19JRDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5wcm92aWRlci5TZXR0aW5ncy5HbG9iYWwuREVWRUxPUE1FTlRfRU5BQkxFX0ZSRUVGT1JNX1dJTkRPV1NfU1VQUE9SVDsKIAogLyoqCiAgKiBBY3RzIGFzIGEgc2hpbSBhcm91bmQgdGhlIHJlYWwgc3lzdGVtIHNlcnZpY2VzIHRoYXQgd2UgbmVlZCB0byBhY2Nlc3MgZGF0YSBmcm9tLCBhbmQgcHJvdmlkZXMKQEAgLTEyNyw3ICsxMzAsOSBAQAogICAgICAgICBtRGlzcGxheSA9IG1XbS5nZXREZWZhdWx0RGlzcGxheSgpOwogICAgICAgICBtUmVjZW50c1BhY2thZ2UgPSBjb250ZXh0LmdldFBhY2thZ2VOYW1lKCk7CiAgICAgICAgIG1IYXNGcmVlZm9ybVdvcmtzcGFjZVN1cHBvcnQgPQotICAgICAgICAgICAgICAgIG1QbS5oYXNTeXN0ZW1GZWF0dXJlKFBhY2thZ2VNYW5hZ2VyLkZFQVRVUkVfRlJFRUZPUk1fV0lORE9XX01BTkFHRU1FTlQpOworICAgICAgICAgICAgICAgIG1QbS5oYXNTeXN0ZW1GZWF0dXJlKFBhY2thZ2VNYW5hZ2VyLkZFQVRVUkVfRlJFRUZPUk1fV0lORE9XX01BTkFHRU1FTlQpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICBTZXR0aW5ncy5HbG9iYWwuZ2V0SW50KGNvbnRleHQuZ2V0Q29udGVudFJlc29sdmVyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFVkVMT1BNRU5UX0VOQUJMRV9GUkVFRk9STV9XSU5ET1dTX1NVUFBPUlQsIDApICE9IDA7CiAKICAgICAgICAgLy8gR2V0IHRoZSBkdW1teSB0aHVtYm5haWwgd2lkdGgvaGVpZ2h0cwogICAgICAgICBSZXNvdXJjZXMgcmVzID0gY29udGV4dC5nZXRSZXNvdXJjZXMoKTsKQEAgLTE5Myw2ICsxOTgsOCBAQAogICAgICAgICBpbnQgbnVtVGFza3NUb1F1ZXJ5ID0gTWF0aC5tYXgobWluTnVtVGFza3NUb1F1ZXJ5LCBudW1MYXRlc3RUYXNrcyk7CiAgICAgICAgIExpc3Q8QWN0aXZpdHlNYW5hZ2VyLlJlY2VudFRhc2tJbmZvPiB0YXNrcyA9IG1BbS5nZXRSZWNlbnRUYXNrc0ZvclVzZXIobnVtVGFza3NUb1F1ZXJ5LAogICAgICAgICAgICAgICAgIEFjdGl2aXR5TWFuYWdlci5SRUNFTlRfSUdOT1JFX0hPTUVfU1RBQ0tfVEFTS1MgfAorICAgICAgICAgICAgICAgIEFjdGl2aXR5TWFuYWdlci5SRUNFTlRfSU5HT1JFX0RPQ0tFRF9TVEFDS19UQVNLUyB8CisgICAgICAgICAgICAgICAgQWN0aXZpdHlNYW5hZ2VyLlJFQ0VOVF9JTkdPUkVfUElOTkVEX1NUQUNLX1RBU0tTIHwKICAgICAgICAgICAgICAgICBBY3Rpdml0eU1hbmFnZXIuUkVDRU5UX0lHTk9SRV9VTkFWQUlMQUJMRSB8CiAgICAgICAgICAgICAgICAgQWN0aXZpdHlNYW5hZ2VyLlJFQ0VOVF9JTkNMVURFX1BST0ZJTEVTIHwKICAgICAgICAgICAgICAgICBBY3Rpdml0eU1hbmFnZXIuUkVDRU5UX1dJVEhfRVhDTFVERUQsIHVzZXJJZCk7CkBAIC0zMDcsNyArMzE0LDggQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGZpbmFsIEFjdGl2aXR5T3B0aW9ucyBvcHRpb25zID0gQWN0aXZpdHlPcHRpb25zLm1ha2VCYXNpYygpOwogICAgICAgICAgICAgb3B0aW9ucy5zZXREb2NrQ3JlYXRlTW9kZShjcmVhdGVNb2RlKTsKLSAgICAgICAgICAgIG1JYW0uc3RhcnRBY3Rpdml0eUZyb21SZWNlbnRzKHRhc2tJZCwgRE9DS0VEX1NUQUNLX0lELCBvcHRpb25zLnRvQnVuZGxlKCkpOworICAgICAgICAgICAgb3B0aW9ucy5zZXRMYXVuY2hTdGFja0lkKERPQ0tFRF9TVEFDS19JRCk7CisgICAgICAgICAgICBtSWFtLnN0YXJ0QWN0aXZpdHlGcm9tUmVjZW50cyh0YXNrSWQsIG9wdGlvbnMudG9CdW5kbGUoKSk7CiAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CkBAIC00OTUsNiArNTAzLDE4IEBACiAgICAgfQogCiAgICAgLyoqCisgICAgICogU2VuZHMgYSBtZXNzYWdlIHRvIGNsb3NlIG90aGVyIHN5c3RlbSB3aW5kb3dzLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNlbmRDbG9zZVN5c3RlbVdpbmRvd3MoU3RyaW5nIHJlYXNvbikgeworICAgICAgICBpZiAoQWN0aXZpdHlNYW5hZ2VyTmF0aXZlLmlzU3lzdGVtUmVhZHkoKSkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBBY3Rpdml0eU1hbmFnZXJOYXRpdmUuZ2V0RGVmYXVsdCgpLmNsb3NlU3lzdGVtRGlhbG9ncyhyZWFzb24pOworICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIGFjdGl2aXR5IGluZm8gZm9yIGEgZ2l2ZW4gY29tcG9uZW50IG5hbWUuCiAgICAgICoKICAgICAgKiBAcGFyYW0gY24gVGhlIGNvbXBvbmVudCBuYW1lIG9mIHRoZSBhY3Rpdml0eS4KQEAgLTU3Miw3ICs1OTIsNyBAQAogICAgICAqIFJldHVybnMgdGhlIGFjdGl2aXR5IGljb24gZm9yIHRoZSBBY3Rpdml0eUluZm8gZm9yIGEgdXNlciwgYmFkZ2luZyBpZgogICAgICAqIG5lY2Vzc2FyeS4KICAgICAgKi8KLSAgICBwdWJsaWMgRHJhd2FibGUgZ2V0QWN0aXZpdHlJY29uKEFjdGl2aXR5SW5mbyBpbmZvLCBpbnQgdXNlcklkKSB7CisgICAgcHVibGljIERyYXdhYmxlIGdldEJhZGdlZEFjdGl2aXR5SWNvbihBY3Rpdml0eUluZm8gaW5mbywgaW50IHVzZXJJZCkgewogICAgICAgICBpZiAobVBtID09IG51bGwpIHJldHVybiBudWxsOwogCiAgICAgICAgIC8vIElmIHdlIGFyZSBtb2NraW5nLCB0aGVuIHJldHVybiBhIG1vY2sgbGFiZWwKQEAgLTU4NSw5ICs2MDUsMzEgQEAKICAgICB9CiAKICAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSB0YXNrIGRlc2NyaXB0aW9uIGljb24sIGxvYWRpbmcgYW5kIGJhZGdpbmcgaXQgaWYgaXQgbmVjZXNzYXJ5LgorICAgICAqLworICAgIHB1YmxpYyBEcmF3YWJsZSBnZXRCYWRnZWRUYXNrRGVzY3JpcHRpb25JY29uKEFjdGl2aXR5TWFuYWdlci5UYXNrRGVzY3JpcHRpb24gdGFza0Rlc2NyaXB0aW9uLAorICAgICAgICAgICAgaW50IHVzZXJJZCwgUmVzb3VyY2VzIHJlcykgeworCisgICAgICAgIC8vIElmIHdlIGFyZSBtb2NraW5nLCB0aGVuIHJldHVybiBhIG1vY2sgbGFiZWwKKyAgICAgICAgaWYgKFJlY2VudHNEZWJ1Z0ZsYWdzLlN0YXRpYy5FbmFibGVTeXN0ZW1TZXJ2aWNlc1Byb3h5KSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yRHJhd2FibGUoMHhGRjY2NjY2Nik7CisgICAgICAgIH0KKworICAgICAgICBCaXRtYXAgdGRJY29uID0gdGFza0Rlc2NyaXB0aW9uLmdldEluTWVtb3J5SWNvbigpOworICAgICAgICBpZiAodGRJY29uID09IG51bGwpIHsKKyAgICAgICAgICAgIHRkSWNvbiA9IEFjdGl2aXR5TWFuYWdlci5UYXNrRGVzY3JpcHRpb24ubG9hZFRhc2tEZXNjcmlwdGlvbkljb24oCisgICAgICAgICAgICAgICAgICAgIHRhc2tEZXNjcmlwdGlvbi5nZXRJY29uRmlsZW5hbWUoKSwgdXNlcklkKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGRJY29uICE9IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBnZXRCYWRnZWRJY29uKG5ldyBCaXRtYXBEcmF3YWJsZShyZXMsIHRkSWNvbiksIHVzZXJJZCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgZ2l2ZW4gaWNvbiBmb3IgYSB1c2VyLCBiYWRnaW5nIGlmIG5lY2Vzc2FyeS4KICAgICAgKi8KLSAgICBwdWJsaWMgRHJhd2FibGUgZ2V0QmFkZ2VkSWNvbihEcmF3YWJsZSBpY29uLCBpbnQgdXNlcklkKSB7CisgICAgcHJpdmF0ZSBEcmF3YWJsZSBnZXRCYWRnZWRJY29uKERyYXdhYmxlIGljb24sIGludCB1c2VySWQpIHsKICAgICAgICAgaWYgKHVzZXJJZCAhPSBVc2VySGFuZGxlLm15VXNlcklkKCkpIHsKICAgICAgICAgICAgIGljb24gPSBtUG0uZ2V0VXNlckJhZGdlZEljb24oaWNvbiwgbmV3IFVzZXJIYW5kbGUodXNlcklkKSk7CiAgICAgICAgIH0KQEAgLTU5Nyw3ICs2MzksNyBAQAogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIGdpdmVuIGxhYmVsIGZvciBhIHVzZXIsIGJhZGdpbmcgaWYgbmVjZXNzYXJ5LgogICAgICAqLwotICAgIHB1YmxpYyBTdHJpbmcgZ2V0QmFkZ2VkTGFiZWwoU3RyaW5nIGxhYmVsLCBpbnQgdXNlcklkKSB7CisgICAgcHJpdmF0ZSBTdHJpbmcgZ2V0QmFkZ2VkTGFiZWwoU3RyaW5nIGxhYmVsLCBpbnQgdXNlcklkKSB7CiAgICAgICAgIGlmICh1c2VySWQgIT0gVXNlckhhbmRsZS5teVVzZXJJZCgpKSB7CiAgICAgICAgICAgICBsYWJlbCA9IG1QbS5nZXRVc2VyQmFkZ2VkTGFiZWwobGFiZWwsIG5ldyBVc2VySGFuZGxlKHVzZXJJZCkpLnRvU3RyaW5nKCk7CiAgICAgICAgIH0KQEAgLTYwOSw3ICs2NTEsNyBAQAogICAgICAgICBpZiAobVBtID09IG51bGwpIHJldHVybiBudWxsOwogICAgICAgICBpZiAoUmVjZW50c0RlYnVnRmxhZ3MuU3RhdGljLkVuYWJsZVN5c3RlbVNlcnZpY2VzUHJveHkpIHJldHVybiBudWxsOwogCi0gICAgICAgIEFycmF5TGlzdDxSZXNvbHZlSW5mbz4gaG9tZUFjdGl2aXRpZXMgPSBuZXcgQXJyYXlMaXN0PFJlc29sdmVJbmZvPigpOworICAgICAgICBBcnJheUxpc3Q8UmVzb2x2ZUluZm8+IGhvbWVBY3Rpdml0aWVzID0gbmV3IEFycmF5TGlzdDw+KCk7CiAgICAgICAgIENvbXBvbmVudE5hbWUgZGVmYXVsdEhvbWVBY3Rpdml0eSA9IG1QbS5nZXRIb21lQWN0aXZpdGllcyhob21lQWN0aXZpdGllcyk7CiAgICAgICAgIGlmIChkZWZhdWx0SG9tZUFjdGl2aXR5ICE9IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0SG9tZUFjdGl2aXR5LmdldFBhY2thZ2VOYW1lKCk7CkBAIC02OTcsNyArNzM5LDcgQEAKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSBmaXJzdCBSZWNlbnRzIHdpZGdldCBmcm9tIHRoZSBzYW1lIHBhY2thZ2UgYXMgdGhlIGdsb2JhbCBhc3Npc3QgYWN0aXZpdHkuCiAgICAgICovCi0gICAgcHJpdmF0ZSBBcHBXaWRnZXRQcm92aWRlckluZm8gcmVzb2x2ZVNlYXJjaEFwcFdpZGdldCgpIHsKKyAgICBwdWJsaWMgQXBwV2lkZ2V0UHJvdmlkZXJJbmZvIHJlc29sdmVTZWFyY2hBcHBXaWRnZXQoKSB7CiAgICAgICAgIGlmIChtQXNzaXN0Q29tcG9uZW50ID09IG51bGwpIHJldHVybiBudWxsOwogICAgICAgICBMaXN0PEFwcFdpZGdldFByb3ZpZGVySW5mbz4gd2lkZ2V0cyA9IG1Bd20uZ2V0SW5zdGFsbGVkUHJvdmlkZXJzKAogICAgICAgICAgICAgICAgIEFwcFdpZGdldFByb3ZpZGVySW5mby5XSURHRVRfQ0FURUdPUllfU0VBUkNIQk9YKTsKQEAgLTgxMSw4ICs4NTMsNyBAQAogICAgICAgICAgICAgQWN0aXZpdHlPcHRpb25zIG9wdGlvbnMpIHsKICAgICAgICAgaWYgKG1JYW0gIT0gbnVsbCkgewogICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBtSWFtLnN0YXJ0QWN0aXZpdHlGcm9tUmVjZW50cygKLSAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tJZCwgSU5WQUxJRF9TVEFDS19JRCwgb3B0aW9ucyA9PSBudWxsID8gbnVsbCA6IG9wdGlvbnMudG9CdW5kbGUoKSk7CisgICAgICAgICAgICAgICAgbUlhbS5zdGFydEFjdGl2aXR5RnJvbVJlY2VudHModGFza0lkLCBvcHRpb25zID09IG51bGwgPyBudWxsIDogb3B0aW9ucy50b0J1bmRsZSgpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCBjb250ZXh0LmdldFN0cmluZyhSLnN0cmluZy5yZWNlbnRzX2xhdW5jaF9lcnJvcl9tZXNzYWdlLCB0YXNrTmFtZSksIGUpOwpAQCAtODU0LDEyICs4OTUsMTEgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRG9ja0RpdmlkZXJWaXNpYmlsaXR5TGlzdGVuZXIoSURvY2tEaXZpZGVyVmlzaWJpbGl0eUxpc3RlbmVyIGxpc3RlbmVyKSB7CisgICAgcHVibGljIHZvaWQgcmVnaXN0ZXJEb2NrZWRTdGFja0xpc3RlbmVyKElEb2NrZWRTdGFja0xpc3RlbmVyIGxpc3RlbmVyKSB7CiAgICAgICAgIGlmIChtV20gPT0gbnVsbCkgcmV0dXJuOwogCiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBXaW5kb3dNYW5hZ2VyR2xvYmFsLmdldFdpbmRvd01hbmFnZXJTZXJ2aWNlKCkucmVnaXN0ZXJEb2NrRGl2aWRlclZpc2liaWxpdHlMaXN0ZW5lcigKLSAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIpOworICAgICAgICAgICAgV2luZG93TWFuYWdlckdsb2JhbC5nZXRXaW5kb3dNYW5hZ2VyU2VydmljZSgpLnJlZ2lzdGVyRG9ja2VkU3RhY2tMaXN0ZW5lcihsaXN0ZW5lcik7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9tb2RlbC9SZWNlbnRzVGFza0xvYWRQbGFuLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9tb2RlbC9SZWNlbnRzVGFza0xvYWRQbGFuLmphdmEKaW5kZXggMWQxODA4Ny4uZDYyNjJhYyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvbW9kZWwvUmVjZW50c1Rhc2tMb2FkUGxhbi5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL21vZGVsL1JlY2VudHNUYXNrTG9hZFBsYW4uamF2YQpAQCAtMjksNyArMjksNiBAQAogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLlByZWZzOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMuUmVjZW50czsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLlJlY2VudHNDb25maWd1cmF0aW9uOwotaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMuUmVjZW50c0RlYnVnRmxhZ3M7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5taXNjLlN5c3RlbVNlcnZpY2VzUHJveHk7CiAKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwpAQCAtNDcsOSArNDYsNiBAQAogICovCiBwdWJsaWMgY2xhc3MgUmVjZW50c1Rhc2tMb2FkUGxhbiB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgVEFHID0gIlJlY2VudHNUYXNrTG9hZFBsYW4iOwotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQogICAgIHByaXZhdGUgc3RhdGljIGludCBNSU5fTlVNX1RBU0tTID0gNTsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgU0VTU0lPTl9CRUdJTl9USU1FID0gMTAwMCAvKiBtcy9zICovICogNjAgLyogcy9taW4gKi8gKiA2MCAvKiBtaW4vaHIgKi8gKgogICAgICAgICAgICAgNiAvKiBocnMgKi87CkBAIC0xMDcsMTMgKzEwMyw2IEBACiAKICAgICAgICAgLy8gU2luY2UgdGhlIHJhdyB0YXNrcyBhcmUgZ2l2ZW4gaW4gbW9zdC1yZWNlbnQgdG8gbGVhc3QtcmVjZW50IG9yZGVyLCB3ZSBuZWVkIHRvIHJldmVyc2UgaXQKICAgICAgICAgQ29sbGVjdGlvbnMucmV2ZXJzZShtUmF3VGFza3MpOwotCi0gICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgTG9nLmQoVEFHLCAicHJlbG9hZFJhd1Rhc2tzLCB0YXNrczogIiArIG1SYXdUYXNrcy5zaXplKCkpOwotICAgICAgICAgICAgZm9yIChBY3Rpdml0eU1hbmFnZXIuUmVjZW50VGFza0luZm8gaW5mbyA6IG1SYXdUYXNrcykgewotICAgICAgICAgICAgICAgIExvZy5kKFRBRywgIiAgIiArIGluZm8uYmFzZUludGVudCArICIsICIgKyBpbmZvLmxhc3RBY3RpdmVUaW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQogICAgIH0KIAogICAgIC8qKgpAQCAtMTI2LDggKzExNSw2IEBACiAgICAgICogLSBsZWFzdC1yZWNlbnQgdG8gbW9zdC1yZWNlbnQgZnJlZWZvcm0gdGFza3MKICAgICAgKi8KICAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgcHJlbG9hZFBsYW4oUmVjZW50c1Rhc2tMb2FkZXIgbG9hZGVyLCBib29sZWFuIGlzVG9wVGFza0hvbWUpIHsKLSAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJwcmVsb2FkUGxhbiIpOwotCiAgICAgICAgIFJlY2VudHNDb25maWd1cmF0aW9uIGNvbmZpZyA9IFJlY2VudHMuZ2V0Q29uZmlndXJhdGlvbigpOwogICAgICAgICBTeXN0ZW1TZXJ2aWNlc1Byb3h5IHNzcCA9IFJlY2VudHMuZ2V0U3lzdGVtU2VydmljZXMoKTsKICAgICAgICAgUmVzb3VyY2VzIHJlcyA9IG1Db250ZXh0LmdldFJlc291cmNlcygpOwpAQCAtMTQ5LDM4ICsxMzYsMjYgQEAKIAogICAgICAgICAgICAgLy8gVGhpcyB0YXNrIGlzIG9ubHkgc2hvd24gaW4gdGhlIHN0YWNrIGlmIGl0IHN0YXRpc2ZpZXMgdGhlIGhpc3RvcmljYWwgdGltZSBvciBtaW4KICAgICAgICAgICAgIC8vIG51bWJlciBvZiB0YXNrcyBjb25zdHJhaW50cy4gRnJlZWZvcm0gdGFza3MgYXJlIGFsc28gYWx3YXlzIHNob3duLgotICAgICAgICAgICAgYm9vbGVhbiBpc1N0YWNrVGFzayA9IHRydWU7CiAgICAgICAgICAgICBib29sZWFuIGlzRnJlZWZvcm1UYXNrID0gU3lzdGVtU2VydmljZXNQcm94eS5pc0ZyZWVmb3JtU3RhY2sodC5zdGFja0lkKTsKLSAgICAgICAgICAgIGlzU3RhY2tUYXNrID0gaXNGcmVlZm9ybVRhc2sgfHwgKCFpc0hpc3RvcmljYWxUYXNrKHQpIHx8Ci0gICAgICAgICAgICAgICAgICAgICh0Lmxhc3RBY3RpdmVUaW1lID49IGxhc3RTdGFja0FjdGl2ZVRpbWUgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID49ICh0YXNrQ291bnQgLSBNSU5fTlVNX1RBU0tTKSkpOworICAgICAgICAgICAgYm9vbGVhbiBpc1N0YWNrVGFzayA9IGlzRnJlZWZvcm1UYXNrIHx8ICghaXNIaXN0b3JpY2FsVGFzayh0KSB8fAorICAgICAgICAgICAgICAgICAgICAodC5sYXN0QWN0aXZlVGltZSA+PSBsYXN0U3RhY2tBY3RpdmVUaW1lICYmIGkgPj0gKHRhc2tDb3VudCAtIE1JTl9OVU1fVEFTS1MpKSk7CiAgICAgICAgICAgICBpZiAoaXNTdGFja1Rhc2sgJiYgbmV3TGFzdFN0YWNrQWN0aXZlVGltZSA8IDApIHsKICAgICAgICAgICAgICAgICBuZXdMYXN0U3RhY2tBY3RpdmVUaW1lID0gdC5sYXN0QWN0aXZlVGltZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgLy8gTG9hZCB0aGUgbGFiZWwsIGljb24sIGFuZCBjb2xvcgotICAgICAgICAgICAgU3RyaW5nIGFjdGl2aXR5TGFiZWwgPSBsb2FkZXIuZ2V0QW5kVXBkYXRlQWN0aXZpdHlMYWJlbCh0YXNrS2V5LCB0LnRhc2tEZXNjcmlwdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgc3NwKTsKLSAgICAgICAgICAgIFN0cmluZyBjb250ZW50RGVzY3JpcHRpb24gPSBsb2FkZXIuZ2V0QW5kVXBkYXRlQ29udGVudERlc2NyaXB0aW9uKHRhc2tLZXksCi0gICAgICAgICAgICAgICAgICAgIGFjdGl2aXR5TGFiZWwsIHNzcCwgcmVzKTsKLSAgICAgICAgICAgIERyYXdhYmxlIGFjdGl2aXR5SWNvbiA9IGlzU3RhY2tUYXNrCi0gICAgICAgICAgICAgICAgICAgID8gbG9hZGVyLmdldEFuZFVwZGF0ZUFjdGl2aXR5SWNvbih0YXNrS2V5LCB0LnRhc2tEZXNjcmlwdGlvbiwgc3NwLCByZXMsIGZhbHNlKQorICAgICAgICAgICAgLy8gTG9hZCB0aGUgdGl0bGUsIGljb24sIGFuZCBjb2xvcgorICAgICAgICAgICAgU3RyaW5nIHRpdGxlID0gbG9hZGVyLmdldEFuZFVwZGF0ZUFjdGl2aXR5VGl0bGUodGFza0tleSwgdC50YXNrRGVzY3JpcHRpb24pOworICAgICAgICAgICAgU3RyaW5nIGNvbnRlbnREZXNjcmlwdGlvbiA9IGxvYWRlci5nZXRBbmRVcGRhdGVDb250ZW50RGVzY3JpcHRpb24odGFza0tleSwgdGl0bGUsIHJlcyk7CisgICAgICAgICAgICBEcmF3YWJsZSBpY29uID0gaXNTdGFja1Rhc2sKKyAgICAgICAgICAgICAgICAgICAgPyBsb2FkZXIuZ2V0QW5kVXBkYXRlQWN0aXZpdHlJY29uKHRhc2tLZXksIHQudGFza0Rlc2NyaXB0aW9uLCByZXMsIGZhbHNlKQogICAgICAgICAgICAgICAgICAgICA6IG51bGw7CisgICAgICAgICAgICBCaXRtYXAgdGh1bWJuYWlsID0gbG9hZGVyLmdldEFuZFVwZGF0ZVRodW1ibmFpbCh0YXNrS2V5LCBmYWxzZSk7CiAgICAgICAgICAgICBpbnQgYWN0aXZpdHlDb2xvciA9IGxvYWRlci5nZXRBY3Rpdml0eVByaW1hcnlDb2xvcih0LnRhc2tEZXNjcmlwdGlvbik7CiAKLSAgICAgICAgICAgIEJpdG1hcCBpY29uID0gdC50YXNrRGVzY3JpcHRpb24gIT0gbnVsbAotICAgICAgICAgICAgICAgICAgICA/IHQudGFza0Rlc2NyaXB0aW9uLmdldEluTWVtb3J5SWNvbigpIDogbnVsbDsKLSAgICAgICAgICAgIFN0cmluZyBpY29uRmlsZW5hbWUgPSB0LnRhc2tEZXNjcmlwdGlvbiAhPSBudWxsCi0gICAgICAgICAgICAgICAgICAgID8gdC50YXNrRGVzY3JpcHRpb24uZ2V0SWNvbkZpbGVuYW1lKCkgOiBudWxsOwotCiAgICAgICAgICAgICAvLyBBZGQgdGhlIHRhc2sgdG8gdGhlIHN0YWNrCi0gICAgICAgICAgICBUYXNrIHRhc2sgPSBuZXcgVGFzayh0YXNrS2V5LCB0LmFmZmlsaWF0ZWRUYXNrSWQsIHQuYWZmaWxpYXRlZFRhc2tDb2xvciwgYWN0aXZpdHlMYWJlbCwKLSAgICAgICAgICAgICAgICAgICAgY29udGVudERlc2NyaXB0aW9uLCBhY3Rpdml0eUljb24sIGFjdGl2aXR5Q29sb3IsIChpID09ICh0YXNrQ291bnQgLSAxKSksCi0gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5sb2NrVG9BcHBFbmFibGVkLCAhaXNTdGFja1Rhc2ssIGljb24sIGljb25GaWxlbmFtZSwgdC5ib3VuZHMpOwotICAgICAgICAgICAgdGFzay50aHVtYm5haWwgPSBsb2FkZXIuZ2V0QW5kVXBkYXRlVGh1bWJuYWlsKHRhc2tLZXksIHNzcCwgZmFsc2UpOwotICAgICAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICAgICAgTG9nLmQoVEFHLCBhY3Rpdml0eUxhYmVsICsgIiBib3VuZHM6ICIgKyB0LmJvdW5kcyk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBUYXNrIHRhc2sgPSBuZXcgVGFzayh0YXNrS2V5LCB0LmFmZmlsaWF0ZWRUYXNrSWQsIHQuYWZmaWxpYXRlZFRhc2tDb2xvciwgaWNvbiwKKyAgICAgICAgICAgICAgICAgICAgdGh1bWJuYWlsLCB0aXRsZSwgY29udGVudERlc2NyaXB0aW9uLCBhY3Rpdml0eUNvbG9yLCAhaXNTdGFja1Rhc2ssCisgICAgICAgICAgICAgICAgICAgIHQuYm91bmRzLCB0LnRhc2tEZXNjcmlwdGlvbik7CiAKICAgICAgICAgICAgIGFsbFRhc2tzLmFkZCh0YXNrKTsKICAgICAgICAgfQpAQCAtMjAwLDE5ICsxNzUsMTMgQEAKICAgICAgKi8KICAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgZXhlY3V0ZVBsYW4oT3B0aW9ucyBvcHRzLCBSZWNlbnRzVGFza0xvYWRlciBsb2FkZXIsCiAgICAgICAgICAgICBUYXNrUmVzb3VyY2VMb2FkUXVldWUgbG9hZFF1ZXVlKSB7Ci0gICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLCAiZXhlY3V0ZVBsYW4sICMgdGFza3M6ICIgKyBvcHRzLm51bVZpc2libGVUYXNrcyArCi0gICAgICAgICAgICAgICAgIiwgIyB0aHVtYm5haWxzOiAiICsgb3B0cy5udW1WaXNpYmxlVGFza1RodW1ibmFpbHMgKwotICAgICAgICAgICAgICAgICIsIHJ1bm5pbmcgdGFzayBpZDogIiArIG9wdHMucnVubmluZ1Rhc2tJZCk7Ci0KICAgICAgICAgUmVjZW50c0NvbmZpZ3VyYXRpb24gY29uZmlnID0gUmVjZW50cy5nZXRDb25maWd1cmF0aW9uKCk7Ci0gICAgICAgIFN5c3RlbVNlcnZpY2VzUHJveHkgc3NwID0gUmVjZW50cy5nZXRTeXN0ZW1TZXJ2aWNlcygpOwogICAgICAgICBSZXNvdXJjZXMgcmVzID0gbUNvbnRleHQuZ2V0UmVzb3VyY2VzKCk7CiAKICAgICAgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIGVhY2ggb2YgdGhlIHRhc2tzIGFuZCBsb2FkIHRoZW0gYWNjb3JkaW5nIHRvIHRoZSBsb2FkIGNvbmRpdGlvbnMuCiAgICAgICAgIEFycmF5TGlzdDxUYXNrPiB0YXNrcyA9IG1TdGFjay5nZXRTdGFja1Rhc2tzKCk7CiAgICAgICAgIGludCB0YXNrQ291bnQgPSB0YXNrcy5zaXplKCk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGFza0NvdW50OyBpKyspIHsKLSAgICAgICAgICAgIEFjdGl2aXR5TWFuYWdlci5SZWNlbnRUYXNrSW5mbyB0ID0gbVJhd1Rhc2tzLmdldChpKTsKICAgICAgICAgICAgIFRhc2sgdGFzayA9IHRhc2tzLmdldChpKTsKICAgICAgICAgICAgIFRhc2suVGFza0tleSB0YXNrS2V5ID0gdGFzay5rZXk7CiAKQEAgLTIyNiwxNyArMTk1LDE1IEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChvcHRzLmxvYWRJY29ucyAmJiAoaXNSdW5uaW5nVGFzayB8fCBpc1Zpc2libGVUYXNrKSkgewotICAgICAgICAgICAgICAgIGlmICh0YXNrLmFjdGl2aXR5SWNvbiA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLCAiXHRMb2FkaW5nIGljb246ICIgKyB0YXNrS2V5KTsKLSAgICAgICAgICAgICAgICAgICAgdGFzay5hY3Rpdml0eUljb24gPSBsb2FkZXIuZ2V0QW5kVXBkYXRlQWN0aXZpdHlJY29uKHRhc2tLZXksIHQudGFza0Rlc2NyaXB0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzcCwgcmVzLCB0cnVlKTsKKyAgICAgICAgICAgICAgICBpZiAodGFzay5pY29uID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgdGFzay5pY29uID0gbG9hZGVyLmdldEFuZFVwZGF0ZUFjdGl2aXR5SWNvbih0YXNrS2V5LCB0YXNrLnRhc2tEZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXMsIHRydWUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChvcHRzLmxvYWRUaHVtYm5haWxzICYmIChpc1J1bm5pbmdUYXNrIHx8IGlzVmlzaWJsZVRodW1ibmFpbCkpIHsKICAgICAgICAgICAgICAgICBpZiAodGFzay50aHVtYm5haWwgPT0gbnVsbCB8fCBpc1J1bm5pbmdUYXNrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLCAiXHRMb2FkaW5nIHRodW1ibmFpbDogIiArIHRhc2tLZXkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnLnN2ZWx0ZUxldmVsIDw9IFJlY2VudHNDb25maWd1cmF0aW9uLlNWRUxURV9MSU1JVF9DQUNIRSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGFzay50aHVtYm5haWwgPSBsb2FkZXIuZ2V0QW5kVXBkYXRlVGh1bWJuYWlsKHRhc2tLZXksIHNzcCwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB0YXNrLnRodW1ibmFpbCA9IGxvYWRlci5nZXRBbmRVcGRhdGVUaHVtYm5haWwodGFza0tleSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29uZmlnLnN2ZWx0ZUxldmVsID09IFJlY2VudHNDb25maWd1cmF0aW9uLlNWRUxURV9ESVNBQkxFX0NBQ0hFKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkUXVldWUuYWRkVGFzayh0YXNrKTsKICAgICAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvbW9kZWwvUmVjZW50c1Rhc2tMb2FkZXIuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL21vZGVsL1JlY2VudHNUYXNrTG9hZGVyLmphdmEKaW5kZXggYzcyZDE2Ni4uMjgzMzhkODMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL21vZGVsL1JlY2VudHNUYXNrTG9hZGVyLmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvbW9kZWwvUmVjZW50c1Rhc2tMb2FkZXIuamF2YQpAQCAtOTMsMjMgKzkzLDIzIEBACiAgICAgSGFuZGxlciBtTWFpblRocmVhZEhhbmRsZXI7CiAKICAgICBUYXNrUmVzb3VyY2VMb2FkUXVldWUgbUxvYWRRdWV1ZTsKLSAgICBUYXNrS2V5THJ1Q2FjaGU8RHJhd2FibGU+IG1BcHBsaWNhdGlvbkljb25DYWNoZTsKKyAgICBUYXNrS2V5THJ1Q2FjaGU8RHJhd2FibGU+IG1JY29uQ2FjaGU7CiAgICAgVGFza0tleUxydUNhY2hlPEJpdG1hcD4gbVRodW1ibmFpbENhY2hlOwogICAgIEJpdG1hcCBtRGVmYXVsdFRodW1ibmFpbDsKLSAgICBCaXRtYXBEcmF3YWJsZSBtRGVmYXVsdEFwcGxpY2F0aW9uSWNvbjsKKyAgICBCaXRtYXBEcmF3YWJsZSBtRGVmYXVsdEljb247CiAKICAgICBib29sZWFuIG1DYW5jZWxsZWQ7CiAgICAgYm9vbGVhbiBtV2FpdGluZ09uTG9hZFF1ZXVlOwogCiAgICAgLyoqIENvbnN0cnVjdG9yLCBjcmVhdGVzIGEgbmV3IGxvYWRpbmcgdGhyZWFkIHRoYXQgbG9hZHMgdGFzayByZXNvdXJjZXMgaW4gdGhlIGJhY2tncm91bmQgKi8KICAgICBwdWJsaWMgQmFja2dyb3VuZFRhc2tMb2FkZXIoVGFza1Jlc291cmNlTG9hZFF1ZXVlIGxvYWRRdWV1ZSwKLSAgICAgICAgICAgIFRhc2tLZXlMcnVDYWNoZTxEcmF3YWJsZT4gYXBwbGljYXRpb25JY29uQ2FjaGUsIFRhc2tLZXlMcnVDYWNoZTxCaXRtYXA+IHRodW1ibmFpbENhY2hlLAotICAgICAgICAgICAgQml0bWFwIGRlZmF1bHRUaHVtYm5haWwsIEJpdG1hcERyYXdhYmxlIGRlZmF1bHRBcHBsaWNhdGlvbkljb24pIHsKKyAgICAgICAgICAgIFRhc2tLZXlMcnVDYWNoZTxEcmF3YWJsZT4gaWNvbkNhY2hlLCBUYXNrS2V5THJ1Q2FjaGU8Qml0bWFwPiB0aHVtYm5haWxDYWNoZSwKKyAgICAgICAgICAgIEJpdG1hcCBkZWZhdWx0VGh1bWJuYWlsLCBCaXRtYXBEcmF3YWJsZSBkZWZhdWx0SWNvbikgewogICAgICAgICBtTG9hZFF1ZXVlID0gbG9hZFF1ZXVlOwotICAgICAgICBtQXBwbGljYXRpb25JY29uQ2FjaGUgPSBhcHBsaWNhdGlvbkljb25DYWNoZTsKKyAgICAgICAgbUljb25DYWNoZSA9IGljb25DYWNoZTsKICAgICAgICAgbVRodW1ibmFpbENhY2hlID0gdGh1bWJuYWlsQ2FjaGU7CiAgICAgICAgIG1EZWZhdWx0VGh1bWJuYWlsID0gZGVmYXVsdFRodW1ibmFpbDsKLSAgICAgICAgbURlZmF1bHRBcHBsaWNhdGlvbkljb24gPSBkZWZhdWx0QXBwbGljYXRpb25JY29uOworICAgICAgICBtRGVmYXVsdEljb24gPSBkZWZhdWx0SWNvbjsKICAgICAgICAgbU1haW5UaHJlYWRIYW5kbGVyID0gbmV3IEhhbmRsZXIoKTsKICAgICAgICAgbUxvYWRUaHJlYWQgPSBuZXcgSGFuZGxlclRocmVhZCgiUmVjZW50cy1UYXNrUmVzb3VyY2VMb2FkZXIiLAogICAgICAgICAgICAgICAgIGFuZHJvaWQub3MuUHJvY2Vzcy5USFJFQURfUFJJT1JJVFlfQkFDS0dST1VORCk7CkBAIC0xNjMsMzAgKzE2MywzMCBAQAogICAgICAgICAgICAgICAgICAgICAvLyBMb2FkIHRoZSBuZXh0IGl0ZW0gZnJvbSB0aGUgcXVldWUKICAgICAgICAgICAgICAgICAgICAgZmluYWwgVGFzayB0ID0gbUxvYWRRdWV1ZS5uZXh0VGFzaygpOwogICAgICAgICAgICAgICAgICAgICBpZiAodCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBEcmF3YWJsZSBjYWNoZWRJY29uID0gbUFwcGxpY2F0aW9uSWNvbkNhY2hlLmdldCh0LmtleSk7CisgICAgICAgICAgICAgICAgICAgICAgICBEcmF3YWJsZSBjYWNoZWRJY29uID0gbUljb25DYWNoZS5nZXQodC5rZXkpOwogICAgICAgICAgICAgICAgICAgICAgICAgQml0bWFwIGNhY2hlZFRodW1ibmFpbCA9IG1UaHVtYm5haWxDYWNoZS5nZXQodC5rZXkpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBMb2FkIHRoZSBhcHBsaWNhdGlvbiBpY29uIGlmIGl0IGlzIHN0YWxlIG9yIHdlIGhhdmVuJ3QgY2FjaGVkIG9uZSB5ZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIExvYWQgdGhlIGljb24gaWYgaXQgaXMgc3RhbGUgb3Igd2UgaGF2ZW4ndCBjYWNoZWQgb25lIHlldAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlZEljb24gPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlZEljb24gPSBnZXRUYXNrRGVzY3JpcHRpb25JY29uKHQua2V5LCB0Lmljb24sIHQuaWNvbkZpbGVuYW1lLCBzc3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ29udGV4dC5nZXRSZXNvdXJjZXMoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVkSWNvbiA9IHNzcC5nZXRCYWRnZWRUYXNrRGVzY3JpcHRpb25JY29uKHQudGFza0Rlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5rZXkudXNlcklkLCBtQ29udGV4dC5nZXRSZXNvdXJjZXMoKSk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVkSWNvbiA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5SW5mbyBpbmZvID0gc3NwLmdldEFjdGl2aXR5SW5mbygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LmtleS5nZXRDb21wb25lbnQoKSwgdC5rZXkudXNlcklkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZm8gIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJMb2FkaW5nIGljb246ICIgKyB0LmtleSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZWRJY29uID0gc3NwLmdldEFjdGl2aXR5SWNvbihpbmZvLCB0LmtleS51c2VySWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVkSWNvbiA9IHNzcC5nZXRCYWRnZWRBY3Rpdml0eUljb24oaW5mbywgdC5rZXkudXNlcklkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYWNoZWRJY29uID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVkSWNvbiA9IG1EZWZhdWx0QXBwbGljYXRpb25JY29uOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZWRJY29uID0gbURlZmF1bHRJY29uOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIGV2ZW4gaWYgd2UgY2FuJ3QgbG9hZCB0aGUgaWNvbiwgd2Ugd2lsbCBzZXQgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVmYXVsdCBpY29uLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1BcHBsaWNhdGlvbkljb25DYWNoZS5wdXQodC5rZXksIGNhY2hlZEljb24pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1JY29uQ2FjaGUucHV0KHQua2V5LCBjYWNoZWRJY29uKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExvYWQgdGhlIHRodW1ibmFpbCBpZiBpdCBpcyBzdGFsZSBvciB3ZSBoYXZlbid0IGNhY2hlZCBvbmUgeWV0CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVkVGh1bWJuYWlsID09IG51bGwpIHsKQEAgLTIzNCwyNSArMjM0LDYgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLQotICAgIERyYXdhYmxlIGdldFRhc2tEZXNjcmlwdGlvbkljb24oVGFzay5UYXNrS2V5IHRhc2tLZXksIEJpdG1hcCBpY29uQml0bWFwLCBTdHJpbmcgaWNvbkZpbGVuYW1lLAotICAgICAgICAgICAgU3lzdGVtU2VydmljZXNQcm94eSBzc3AsIFJlc291cmNlcyByZXMpIHsKLSAgICAgICAgQml0bWFwIHRkSWNvbiA9IG51bGw7Ci0gICAgICAgIGlmIChpY29uQml0bWFwICE9IG51bGwpIHsKLSAgICAgICAgICAgIHRkSWNvbiA9IGljb25CaXRtYXA7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIHRkSWNvbiA9IEFjdGl2aXR5TWFuYWdlci5UYXNrRGVzY3JpcHRpb24ubG9hZFRhc2tEZXNjcmlwdGlvbkljb24oaWNvbkZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgdGFza0tleS51c2VySWQpOwotICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAvLyBUT0RPOiBJbnZlc3RpZ2F0ZSBmb3IgYi8yNjIyMTc3OQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICh0ZEljb24gIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIHNzcC5nZXRCYWRnZWRJY29uKG5ldyBCaXRtYXBEcmF3YWJsZShyZXMsIHRkSWNvbiksIHRhc2tLZXkudXNlcklkKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9CiB9CiAKIC8qKgpAQCAtMjY5LDcgKzI1MCw3IEBACiAgICAgLy8gYWN0aXZlIHRpbWUuICBJbnN0ZWFkLCB3ZSByZWx5IG9uIHRoZSBSZWNlbnRzUGFja2FnZU1vbml0b3IgdG8ga2VlcCB1cyBpbmZvcm1lZCB3aGVuZXZlciBhCiAgICAgLy8gcGFja2FnZSBpbiB0aGUgY2FjaGUgaGFzIGJlZW4gdXBkYXRlZCwgc28gdGhhdCB3ZSBtYXkgcmVtb3ZlIGl0LgogICAgIHByaXZhdGUgZmluYWwgTHJ1Q2FjaGU8Q29tcG9uZW50TmFtZSwgQWN0aXZpdHlJbmZvPiBtQWN0aXZpdHlJbmZvQ2FjaGU7Ci0gICAgcHJpdmF0ZSBmaW5hbCBUYXNrS2V5THJ1Q2FjaGU8RHJhd2FibGU+IG1BcHBsaWNhdGlvbkljb25DYWNoZTsKKyAgICBwcml2YXRlIGZpbmFsIFRhc2tLZXlMcnVDYWNoZTxEcmF3YWJsZT4gbUljb25DYWNoZTsKICAgICBwcml2YXRlIGZpbmFsIFRhc2tLZXlMcnVDYWNoZTxCaXRtYXA+IG1UaHVtYm5haWxDYWNoZTsKICAgICBwcml2YXRlIGZpbmFsIFRhc2tLZXlMcnVDYWNoZTxTdHJpbmc+IG1BY3Rpdml0eUxhYmVsQ2FjaGU7CiAgICAgcHJpdmF0ZSBmaW5hbCBUYXNrS2V5THJ1Q2FjaGU8U3RyaW5nPiBtQ29udGVudERlc2NyaXB0aW9uQ2FjaGU7CkBAIC0yODIsNyArMjYzLDcgQEAKICAgICBwcml2YXRlIGludCBtTnVtVmlzaWJsZVRodW1ibmFpbHNMb2FkZWQ7CiAKICAgICBpbnQgbURlZmF1bHRUYXNrQmFyQmFja2dyb3VuZENvbG9yOwotICAgIEJpdG1hcERyYXdhYmxlIG1EZWZhdWx0QXBwbGljYXRpb25JY29uOworICAgIEJpdG1hcERyYXdhYmxlIG1EZWZhdWx0SWNvbjsKICAgICBCaXRtYXAgbURlZmF1bHRUaHVtYm5haWw7CiAKICAgICBwdWJsaWMgUmVjZW50c1Rhc2tMb2FkZXIoQ29udGV4dCBjb250ZXh0KSB7CkBAIC0zMDIsMjIgKzI4MywyMiBAQAogICAgICAgICBtRGVmYXVsdFRodW1ibmFpbCA9IEJpdG1hcC5jcmVhdGVCaXRtYXAoMSwgMSwgQml0bWFwLkNvbmZpZy5BUkdCXzg4ODgpOwogICAgICAgICBtRGVmYXVsdFRodW1ibmFpbC5zZXRIYXNBbHBoYShmYWxzZSk7CiAgICAgICAgIG1EZWZhdWx0VGh1bWJuYWlsLmVyYXNlQ29sb3IoMHhGRmZmZmZmZik7Ci0gICAgICAgIG1EZWZhdWx0QXBwbGljYXRpb25JY29uID0gbmV3IEJpdG1hcERyYXdhYmxlKGNvbnRleHQuZ2V0UmVzb3VyY2VzKCksIGljb24pOworICAgICAgICBtRGVmYXVsdEljb24gPSBuZXcgQml0bWFwRHJhd2FibGUoY29udGV4dC5nZXRSZXNvdXJjZXMoKSwgaWNvbik7CiAKICAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgcHJveHksIGNhY2hlIGFuZCBsb2FkZXJzCiAgICAgICAgIGludCBudW1SZWNlbnRUYXNrcyA9IEFjdGl2aXR5TWFuYWdlci5nZXRNYXhSZWNlbnRUYXNrc1N0YXRpYygpOwogICAgICAgICBtTG9hZFF1ZXVlID0gbmV3IFRhc2tSZXNvdXJjZUxvYWRRdWV1ZSgpOwotICAgICAgICBtQXBwbGljYXRpb25JY29uQ2FjaGUgPSBuZXcgVGFza0tleUxydUNhY2hlPD4oaWNvbkNhY2hlU2l6ZSk7CisgICAgICAgIG1JY29uQ2FjaGUgPSBuZXcgVGFza0tleUxydUNhY2hlPD4oaWNvbkNhY2hlU2l6ZSk7CiAgICAgICAgIG1UaHVtYm5haWxDYWNoZSA9IG5ldyBUYXNrS2V5THJ1Q2FjaGU8Pih0aHVtYm5haWxDYWNoZVNpemUpOwogICAgICAgICBtQWN0aXZpdHlMYWJlbENhY2hlID0gbmV3IFRhc2tLZXlMcnVDYWNoZTw+KG51bVJlY2VudFRhc2tzKTsKICAgICAgICAgbUNvbnRlbnREZXNjcmlwdGlvbkNhY2hlID0gbmV3IFRhc2tLZXlMcnVDYWNoZTw+KG51bVJlY2VudFRhc2tzKTsKICAgICAgICAgbUFjdGl2aXR5SW5mb0NhY2hlID0gbmV3IExydUNhY2hlKG51bVJlY2VudFRhc2tzKTsKLSAgICAgICAgbUxvYWRlciA9IG5ldyBCYWNrZ3JvdW5kVGFza0xvYWRlcihtTG9hZFF1ZXVlLCBtQXBwbGljYXRpb25JY29uQ2FjaGUsIG1UaHVtYm5haWxDYWNoZSwKLSAgICAgICAgICAgICAgICBtRGVmYXVsdFRodW1ibmFpbCwgbURlZmF1bHRBcHBsaWNhdGlvbkljb24pOworICAgICAgICBtTG9hZGVyID0gbmV3IEJhY2tncm91bmRUYXNrTG9hZGVyKG1Mb2FkUXVldWUsIG1JY29uQ2FjaGUsIG1UaHVtYm5haWxDYWNoZSwKKyAgICAgICAgICAgICAgICBtRGVmYXVsdFRodW1ibmFpbCwgbURlZmF1bHRJY29uKTsKICAgICB9CiAKICAgICAvKiogUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgYXBwIGljb24gY2FjaGUuICovCi0gICAgcHVibGljIGludCBnZXRBcHBsaWNhdGlvbkljb25DYWNoZVNpemUoKSB7CisgICAgcHVibGljIGludCBnZXRJY29uQ2FjaGVTaXplKCkgewogICAgICAgICByZXR1cm4gbU1heEljb25DYWNoZVNpemU7CiAgICAgfQogCkBAIC0zNTUsMzMgKzMzNiwzMyBAQAogCiAgICAgLyoqIEFjcXVpcmVzIHRoZSB0YXNrIHJlc291cmNlIGRhdGEgZGlyZWN0bHkgZnJvbSB0aGUgcG9vbC4gKi8KICAgICBwdWJsaWMgdm9pZCBsb2FkVGFza0RhdGEoVGFzayB0KSB7Ci0gICAgICAgIERyYXdhYmxlIGFwcGxpY2F0aW9uSWNvbiA9IG1BcHBsaWNhdGlvbkljb25DYWNoZS5nZXRBbmRJbnZhbGlkYXRlSWZNb2RpZmllZCh0LmtleSk7CisgICAgICAgIERyYXdhYmxlIGljb24gPSBtSWNvbkNhY2hlLmdldEFuZEludmFsaWRhdGVJZk1vZGlmaWVkKHQua2V5KTsKICAgICAgICAgQml0bWFwIHRodW1ibmFpbCA9IG1UaHVtYm5haWxDYWNoZS5nZXRBbmRJbnZhbGlkYXRlSWZNb2RpZmllZCh0LmtleSk7CiAKICAgICAgICAgLy8gR3JhYiB0aGUgdGh1bWJuYWlsL2ljb24gZnJvbSB0aGUgY2FjaGUsIGlmIGVpdGhlciBkb24ndCBleGlzdCwgdGhlbiB0cmlnZ2VyIGEgcmVsb2FkIGFuZAogICAgICAgICAvLyB1c2UgdGhlIGRlZmF1bHQgYXNzZXRzIGluIHRoZWlyIHBsYWNlIHVudGlsIHRoZXkgbG9hZAotICAgICAgICBib29sZWFuIHJlcXVpcmVzTG9hZCA9IChhcHBsaWNhdGlvbkljb24gPT0gbnVsbCkgfHwgKHRodW1ibmFpbCA9PSBudWxsKTsKLSAgICAgICAgYXBwbGljYXRpb25JY29uID0gYXBwbGljYXRpb25JY29uICE9IG51bGwgPyBhcHBsaWNhdGlvbkljb24gOiBtRGVmYXVsdEFwcGxpY2F0aW9uSWNvbjsKKyAgICAgICAgYm9vbGVhbiByZXF1aXJlc0xvYWQgPSAoaWNvbiA9PSBudWxsKSB8fCAodGh1bWJuYWlsID09IG51bGwpOworICAgICAgICBpY29uID0gaWNvbiAhPSBudWxsID8gaWNvbiA6IG1EZWZhdWx0SWNvbjsKICAgICAgICAgaWYgKHJlcXVpcmVzTG9hZCkgewogICAgICAgICAgICAgbUxvYWRRdWV1ZS5hZGRUYXNrKHQpOwogICAgICAgICB9Ci0gICAgICAgIHQubm90aWZ5VGFza0RhdGFMb2FkZWQodGh1bWJuYWlsID09IG1EZWZhdWx0VGh1bWJuYWlsID8gbnVsbCA6IHRodW1ibmFpbCwgYXBwbGljYXRpb25JY29uKTsKKyAgICAgICAgdC5ub3RpZnlUYXNrRGF0YUxvYWRlZCh0aHVtYm5haWwgPT0gbURlZmF1bHRUaHVtYm5haWwgPyBudWxsIDogdGh1bWJuYWlsLCBpY29uKTsKICAgICB9CiAKICAgICAvKiogUmVsZWFzZXMgdGhlIHRhc2sgcmVzb3VyY2UgZGF0YSBiYWNrIGludG8gdGhlIHBvb2wuICovCiAgICAgcHVibGljIHZvaWQgdW5sb2FkVGFza0RhdGEoVGFzayB0KSB7CiAgICAgICAgIG1Mb2FkUXVldWUucmVtb3ZlVGFzayh0KTsKLSAgICAgICAgdC5ub3RpZnlUYXNrRGF0YVVubG9hZGVkKG51bGwsIG1EZWZhdWx0QXBwbGljYXRpb25JY29uKTsKKyAgICAgICAgdC5ub3RpZnlUYXNrRGF0YVVubG9hZGVkKG51bGwsIG1EZWZhdWx0SWNvbik7CiAgICAgfQogCiAgICAgLyoqIENvbXBsZXRlbHkgcmVtb3ZlcyB0aGUgcmVzb3VyY2UgZGF0YSBmcm9tIHRoZSBwb29sLiAqLwogICAgIHB1YmxpYyB2b2lkIGRlbGV0ZVRhc2tEYXRhKFRhc2sgdCwgYm9vbGVhbiBub3RpZnlUYXNrRGF0YVVubG9hZGVkKSB7CiAgICAgICAgIG1Mb2FkUXVldWUucmVtb3ZlVGFzayh0KTsKICAgICAgICAgbVRodW1ibmFpbENhY2hlLnJlbW92ZSh0LmtleSk7Ci0gICAgICAgIG1BcHBsaWNhdGlvbkljb25DYWNoZS5yZW1vdmUodC5rZXkpOworICAgICAgICBtSWNvbkNhY2hlLnJlbW92ZSh0LmtleSk7CiAgICAgICAgIG1BY3Rpdml0eUluZm9DYWNoZS5yZW1vdmUodC5rZXkuZ2V0Q29tcG9uZW50KCkpOwogICAgICAgICBpZiAobm90aWZ5VGFza0RhdGFVbmxvYWRlZCkgewotICAgICAgICAgICAgdC5ub3RpZnlUYXNrRGF0YVVubG9hZGVkKG51bGwsIG1EZWZhdWx0QXBwbGljYXRpb25JY29uKTsKKyAgICAgICAgICAgIHQubm90aWZ5VGFza0RhdGFVbmxvYWRlZChudWxsLCBtRGVmYXVsdEljb24pOwogICAgICAgICB9CiAgICAgfQogCkBAIC00MDMsMTQgKzM4NCwxNCBAQAogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29uZmlnLnN2ZWx0ZUxldmVsID49IFJlY2VudHNDb25maWd1cmF0aW9uLlNWRUxURV9ESVNBQkxFX0NBQ0hFKSB7CiAgICAgICAgICAgICAgICAgICAgIG1UaHVtYm5haWxDYWNoZS5ldmljdEFsbCgpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtQXBwbGljYXRpb25JY29uQ2FjaGUudHJpbVRvU2l6ZShNYXRoLm1heChtTnVtVmlzaWJsZVRhc2tzTG9hZGVkLAorICAgICAgICAgICAgICAgIG1JY29uQ2FjaGUudHJpbVRvU2l6ZShNYXRoLm1heChtTnVtVmlzaWJsZVRhc2tzTG9hZGVkLAogICAgICAgICAgICAgICAgICAgICAgICAgbU1heEljb25DYWNoZVNpemUgLyAyKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENvbXBvbmVudENhbGxiYWNrczIuVFJJTV9NRU1PUllfUlVOTklOR19NT0RFUkFURToKICAgICAgICAgICAgIGNhc2UgQ29tcG9uZW50Q2FsbGJhY2tzMi5UUklNX01FTU9SWV9CQUNLR1JPVU5EOgogICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBsZWF2aW5nIHJlY2VudHMsIHNvIHRyaW0gdGhlIGRhdGEgYSBiaXQKICAgICAgICAgICAgICAgICBtVGh1bWJuYWlsQ2FjaGUudHJpbVRvU2l6ZShNYXRoLm1heCgxLCBtTWF4VGh1bWJuYWlsQ2FjaGVTaXplIC8gMikpOwotICAgICAgICAgICAgICAgIG1BcHBsaWNhdGlvbkljb25DYWNoZS50cmltVG9TaXplKE1hdGgubWF4KDEsIG1NYXhJY29uQ2FjaGVTaXplIC8gMikpOworICAgICAgICAgICAgICAgIG1JY29uQ2FjaGUudHJpbVRvU2l6ZShNYXRoLm1heCgxLCBtTWF4SWNvbkNhY2hlU2l6ZSAvIDIpKTsKICAgICAgICAgICAgICAgICBtQWN0aXZpdHlJbmZvQ2FjaGUudHJpbVRvU2l6ZShNYXRoLm1heCgxLAogICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlNYW5hZ2VyLmdldE1heFJlY2VudFRhc2tzU3RhdGljKCkgLyAyKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC00MTgsNyArMzk5LDcgQEAKICAgICAgICAgICAgIGNhc2UgQ29tcG9uZW50Q2FsbGJhY2tzMi5UUklNX01FTU9SWV9NT0RFUkFURToKICAgICAgICAgICAgICAgICAvLyBXZSBhcmUgZ29pbmcgdG8gYmUgbG93IG9uIG1lbW9yeQogICAgICAgICAgICAgICAgIG1UaHVtYm5haWxDYWNoZS50cmltVG9TaXplKE1hdGgubWF4KDEsIG1NYXhUaHVtYm5haWxDYWNoZVNpemUgLyA0KSk7Ci0gICAgICAgICAgICAgICAgbUFwcGxpY2F0aW9uSWNvbkNhY2hlLnRyaW1Ub1NpemUoTWF0aC5tYXgoMSwgbU1heEljb25DYWNoZVNpemUgLyA0KSk7CisgICAgICAgICAgICAgICAgbUljb25DYWNoZS50cmltVG9TaXplKE1hdGgubWF4KDEsIG1NYXhJY29uQ2FjaGVTaXplIC8gNCkpOwogICAgICAgICAgICAgICAgIG1BY3Rpdml0eUluZm9DYWNoZS50cmltVG9TaXplKE1hdGgubWF4KDEsCiAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eU1hbmFnZXIuZ2V0TWF4UmVjZW50VGFza3NTdGF0aWMoKSAvIDQpKTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTQyNiw3ICs0MDcsNyBAQAogICAgICAgICAgICAgY2FzZSBDb21wb25lbnRDYWxsYmFja3MyLlRSSU1fTUVNT1JZX0NPTVBMRVRFOgogICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBsb3cgb24gbWVtb3J5LCBzbyByZWxlYXNlIGV2ZXJ5dGhpbmcKICAgICAgICAgICAgICAgICBtVGh1bWJuYWlsQ2FjaGUuZXZpY3RBbGwoKTsKLSAgICAgICAgICAgICAgICBtQXBwbGljYXRpb25JY29uQ2FjaGUuZXZpY3RBbGwoKTsKKyAgICAgICAgICAgICAgICBtSWNvbkNhY2hlLmV2aWN0QWxsKCk7CiAgICAgICAgICAgICAgICAgbUFjdGl2aXR5SW5mb0NhY2hlLmV2aWN0QWxsKCk7CiAgICAgICAgICAgICAgICAgLy8gVGhlIGNhY2hlIGlzIHNtYWxsLCBvbmx5IGNsZWFyIHRoZSBsYWJlbCBjYWNoZSB3aGVuIHdlIGFyZSBjcml0aWNhbAogICAgICAgICAgICAgICAgIG1BY3Rpdml0eUxhYmVsQ2FjaGUuZXZpY3RBbGwoKTsKQEAgLTQ0MCw4ICs0MjEsOSBAQAogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIGNhY2hlZCB0YXNrIGxhYmVsIGlmIHRoZSB0YXNrIGtleSBpcyBub3QgZXhwaXJlZCwgdXBkYXRpbmcgdGhlIGNhY2hlIGlmIGl0IGlzLgogICAgICAqLwotICAgIFN0cmluZyBnZXRBbmRVcGRhdGVBY3Rpdml0eUxhYmVsKFRhc2suVGFza0tleSB0YXNrS2V5LCBBY3Rpdml0eU1hbmFnZXIuVGFza0Rlc2NyaXB0aW9uIHRkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbVNlcnZpY2VzUHJveHkgc3NwKSB7CisgICAgU3RyaW5nIGdldEFuZFVwZGF0ZUFjdGl2aXR5VGl0bGUoVGFzay5UYXNrS2V5IHRhc2tLZXksIEFjdGl2aXR5TWFuYWdlci5UYXNrRGVzY3JpcHRpb24gdGQpIHsKKyAgICAgICAgU3lzdGVtU2VydmljZXNQcm94eSBzc3AgPSBSZWNlbnRzLmdldFN5c3RlbVNlcnZpY2VzKCk7CisKICAgICAgICAgLy8gUmV0dXJuIHRoZSB0YXNrIGRlc2NyaXB0aW9uIGxhYmVsIGlmIGl0IGV4aXN0cwogICAgICAgICBpZiAodGQgIT0gbnVsbCAmJiB0ZC5nZXRMYWJlbCgpICE9IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybiB0ZC5nZXRMYWJlbCgpOwpAQCAtNDUyLDcgKzQzNCw3IEBACiAgICAgICAgICAgICByZXR1cm4gbGFiZWw7CiAgICAgICAgIH0KICAgICAgICAgLy8gQWxsIHNob3J0IHBhdGhzIGZhaWxlZCwgbG9hZCB0aGUgbGFiZWwgZnJvbSB0aGUgYWN0aXZpdHkgaW5mbyBhbmQgY2FjaGUgaXQKLSAgICAgICAgQWN0aXZpdHlJbmZvIGFjdGl2aXR5SW5mbyA9IGdldEFuZFVwZGF0ZUFjdGl2aXR5SW5mbyh0YXNrS2V5LCBzc3ApOworICAgICAgICBBY3Rpdml0eUluZm8gYWN0aXZpdHlJbmZvID0gZ2V0QW5kVXBkYXRlQWN0aXZpdHlJbmZvKHRhc2tLZXkpOwogICAgICAgICBpZiAoYWN0aXZpdHlJbmZvICE9IG51bGwpIHsKICAgICAgICAgICAgIGxhYmVsID0gc3NwLmdldEFjdGl2aXR5TGFiZWwoYWN0aXZpdHlJbmZvKTsKICAgICAgICAgICAgIG1BY3Rpdml0eUxhYmVsQ2FjaGUucHV0KHRhc2tLZXksIGxhYmVsKTsKQEAgLTQ2OCw3ICs0NTAsOSBAQAogICAgICAqIGNhY2hlIGlmIGl0IGlzLgogICAgICAqLwogICAgIFN0cmluZyBnZXRBbmRVcGRhdGVDb250ZW50RGVzY3JpcHRpb24oVGFzay5UYXNrS2V5IHRhc2tLZXksIFN0cmluZyBhY3Rpdml0eUxhYmVsLAotICAgICAgICAgICAgU3lzdGVtU2VydmljZXNQcm94eSBzc3AsIFJlc291cmNlcyByZXMpIHsKKyAgICAgICAgICAgIFJlc291cmNlcyByZXMpIHsKKyAgICAgICAgU3lzdGVtU2VydmljZXNQcm94eSBzc3AgPSBSZWNlbnRzLmdldFN5c3RlbVNlcnZpY2VzKCk7CisKICAgICAgICAgLy8gUmV0dXJuIHRoZSBjYWNoZWQgY29udGVudCBkZXNjcmlwdGlvbiBpZiBpdCBleGlzdHMKICAgICAgICAgU3RyaW5nIGxhYmVsID0gbUNvbnRlbnREZXNjcmlwdGlvbkNhY2hlLmdldEFuZEludmFsaWRhdGVJZk1vZGlmaWVkKHRhc2tLZXkpOwogICAgICAgICBpZiAobGFiZWwgIT0gbnVsbCkgewpAQCAtNDkzLDI4ICs0NzcsMjkgQEAKICAgICAgKiBSZXR1cm5zIHRoZSBjYWNoZWQgdGFzayBpY29uIGlmIHRoZSB0YXNrIGtleSBpcyBub3QgZXhwaXJlZCwgdXBkYXRpbmcgdGhlIGNhY2hlIGlmIGl0IGlzLgogICAgICAqLwogICAgIERyYXdhYmxlIGdldEFuZFVwZGF0ZUFjdGl2aXR5SWNvbihUYXNrLlRhc2tLZXkgdGFza0tleSwgQWN0aXZpdHlNYW5hZ2VyLlRhc2tEZXNjcmlwdGlvbiB0ZCwKLSAgICAgICAgICAgIFN5c3RlbVNlcnZpY2VzUHJveHkgc3NwLCBSZXNvdXJjZXMgcmVzLCBib29sZWFuIGxvYWRJZk5vdENhY2hlZCkgeworICAgICAgICAgICAgUmVzb3VyY2VzIHJlcywgYm9vbGVhbiBsb2FkSWZOb3RDYWNoZWQpIHsKKyAgICAgICAgU3lzdGVtU2VydmljZXNQcm94eSBzc3AgPSBSZWNlbnRzLmdldFN5c3RlbVNlcnZpY2VzKCk7CisKICAgICAgICAgLy8gUmV0dXJuIHRoZSBjYWNoZWQgYWN0aXZpdHkgaWNvbiBpZiBpdCBleGlzdHMKLSAgICAgICAgRHJhd2FibGUgaWNvbiA9IG1BcHBsaWNhdGlvbkljb25DYWNoZS5nZXRBbmRJbnZhbGlkYXRlSWZNb2RpZmllZCh0YXNrS2V5KTsKKyAgICAgICAgRHJhd2FibGUgaWNvbiA9IG1JY29uQ2FjaGUuZ2V0QW5kSW52YWxpZGF0ZUlmTW9kaWZpZWQodGFza0tleSk7CiAgICAgICAgIGlmIChpY29uICE9IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybiBpY29uOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGxvYWRJZk5vdENhY2hlZCkgewogICAgICAgICAgICAgLy8gUmV0dXJuIGFuZCBjYWNoZSB0aGUgdGFzayBkZXNjcmlwdGlvbiBpY29uIGlmIGl0IGV4aXN0cwotICAgICAgICAgICAgaWNvbiA9IG1Mb2FkZXIuZ2V0VGFza0Rlc2NyaXB0aW9uSWNvbih0YXNrS2V5LCB0ZC5nZXRJbk1lbW9yeUljb24oKSwKLSAgICAgICAgICAgICAgICAgICAgdGQuZ2V0SWNvbkZpbGVuYW1lKCksIHNzcCwgcmVzKTsKKyAgICAgICAgICAgIGljb24gPSBzc3AuZ2V0QmFkZ2VkVGFza0Rlc2NyaXB0aW9uSWNvbih0ZCwgdGFza0tleS51c2VySWQsIHJlcyk7CiAgICAgICAgICAgICBpZiAoaWNvbiAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbUFwcGxpY2F0aW9uSWNvbkNhY2hlLnB1dCh0YXNrS2V5LCBpY29uKTsKKyAgICAgICAgICAgICAgICBtSWNvbkNhY2hlLnB1dCh0YXNrS2V5LCBpY29uKTsKICAgICAgICAgICAgICAgICByZXR1cm4gaWNvbjsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gTG9hZCB0aGUgaWNvbiBmcm9tIHRoZSBhY3Rpdml0eSBpbmZvIGFuZCBjYWNoZSBpdAotICAgICAgICAgICAgQWN0aXZpdHlJbmZvIGFjdGl2aXR5SW5mbyA9IGdldEFuZFVwZGF0ZUFjdGl2aXR5SW5mbyh0YXNrS2V5LCBzc3ApOworICAgICAgICAgICAgQWN0aXZpdHlJbmZvIGFjdGl2aXR5SW5mbyA9IGdldEFuZFVwZGF0ZUFjdGl2aXR5SW5mbyh0YXNrS2V5KTsKICAgICAgICAgICAgIGlmIChhY3Rpdml0eUluZm8gIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGljb24gPSBzc3AuZ2V0QWN0aXZpdHlJY29uKGFjdGl2aXR5SW5mbywgdGFza0tleS51c2VySWQpOworICAgICAgICAgICAgICAgIGljb24gPSBzc3AuZ2V0QmFkZ2VkQWN0aXZpdHlJY29uKGFjdGl2aXR5SW5mbywgdGFza0tleS51c2VySWQpOwogICAgICAgICAgICAgICAgIGlmIChpY29uICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgbUFwcGxpY2F0aW9uSWNvbkNhY2hlLnB1dCh0YXNrS2V5LCBpY29uKTsKKyAgICAgICAgICAgICAgICAgICAgbUljb25DYWNoZS5wdXQodGFza0tleSwgaWNvbik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpY29uOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTUyNiw4ICs1MTEsOSBAQAogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIGNhY2hlZCB0aHVtYm5haWwgaWYgdGhlIHRhc2sga2V5IGlzIG5vdCBleHBpcmVkLCB1cGRhdGluZyB0aGUgY2FjaGUgaWYgaXQgaXMuCiAgICAgICovCi0gICAgQml0bWFwIGdldEFuZFVwZGF0ZVRodW1ibmFpbChUYXNrLlRhc2tLZXkgdGFza0tleSwgU3lzdGVtU2VydmljZXNQcm94eSBzc3AsCi0gICAgICAgICAgICBib29sZWFuIGxvYWRJZk5vdENhY2hlZCkgeworICAgIEJpdG1hcCBnZXRBbmRVcGRhdGVUaHVtYm5haWwoVGFzay5UYXNrS2V5IHRhc2tLZXksIGJvb2xlYW4gbG9hZElmTm90Q2FjaGVkKSB7CisgICAgICAgIFN5c3RlbVNlcnZpY2VzUHJveHkgc3NwID0gUmVjZW50cy5nZXRTeXN0ZW1TZXJ2aWNlcygpOworCiAgICAgICAgIC8vIFJldHVybiB0aGUgY2FjaGVkIHRodW1ibmFpbCBpZiBpdCBleGlzdHMKICAgICAgICAgQml0bWFwIHRodW1ibmFpbCA9IG1UaHVtYm5haWxDYWNoZS5nZXRBbmRJbnZhbGlkYXRlSWZNb2RpZmllZCh0YXNrS2V5KTsKICAgICAgICAgaWYgKHRodW1ibmFpbCAhPSBudWxsKSB7CkBAIC01NTAsNyArNTM2LDggQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSB0YXNrJ3MgcHJpbWFyeSBjb2xvci4KKyAgICAgKiBSZXR1cm5zIHRoZSB0YXNrJ3MgcHJpbWFyeSBjb2xvciBpZiBwb3NzaWJsZSwgZGVmYXVsdGluZyB0byB0aGUgZGVmYXVsdCBjb2xvciBpZiB0aGVyZSBpcworICAgICAqIG5vIHNwZWNpZmllZCBwcmltYXJ5IGNvbG9yLgogICAgICAqLwogICAgIGludCBnZXRBY3Rpdml0eVByaW1hcnlDb2xvcihBY3Rpdml0eU1hbmFnZXIuVGFza0Rlc2NyaXB0aW9uIHRkKSB7CiAgICAgICAgIGlmICh0ZCAhPSBudWxsICYmIHRkLmdldFByaW1hcnlDb2xvcigpICE9IDApIHsKQEAgLTU2Myw3ICs1NTAsOCBAQAogICAgICAqIFJldHVybnMgdGhlIGFjdGl2aXR5IGluZm8gZm9yIHRoZSBnaXZlbiB0YXNrIGtleSwgcmV0cmlldmluZyBvbmUgZnJvbSB0aGUgc3lzdGVtIGlmIHRoZQogICAgICAqIHRhc2sga2V5IGlzIGV4cGlyZWQuCiAgICAgICovCi0gICAgcHJpdmF0ZSBBY3Rpdml0eUluZm8gZ2V0QW5kVXBkYXRlQWN0aXZpdHlJbmZvKFRhc2suVGFza0tleSB0YXNrS2V5LCBTeXN0ZW1TZXJ2aWNlc1Byb3h5IHNzcCkgeworICAgIHByaXZhdGUgQWN0aXZpdHlJbmZvIGdldEFuZFVwZGF0ZUFjdGl2aXR5SW5mbyhUYXNrLlRhc2tLZXkgdGFza0tleSkgeworICAgICAgICBTeXN0ZW1TZXJ2aWNlc1Byb3h5IHNzcCA9IFJlY2VudHMuZ2V0U3lzdGVtU2VydmljZXMoKTsKICAgICAgICAgQ29tcG9uZW50TmFtZSBjbiA9IHRhc2tLZXkuZ2V0Q29tcG9uZW50KCk7CiAgICAgICAgIEFjdGl2aXR5SW5mbyBhY3Rpdml0eUluZm8gPSBtQWN0aXZpdHlJbmZvQ2FjaGUuZ2V0KGNuKTsKICAgICAgICAgaWYgKGFjdGl2aXR5SW5mbyA9PSBudWxsKSB7CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9tb2RlbC9UYXNrLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9tb2RlbC9UYXNrLmphdmEKaW5kZXggNzNjMGFkYi4uZDAzMGZjMSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvbW9kZWwvVGFzay5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL21vZGVsL1Rhc2suamF2YQpAQCAtMTYsNiArMTYsNyBAQAogCiBwYWNrYWdlIGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMubW9kZWw7CiAKK2ltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWU7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcDsKQEAgLTkyLDcwICs5Myw4NyBAQAogICAgIH0KIAogICAgIHB1YmxpYyBUYXNrS2V5IGtleTsKKworICAgIC8qKgorICAgICAqIFRoZSBncm91cCB3aWxsIGJlIGNvbXB1dGVkIHNlcGFyYXRlbHkgZnJvbSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHRhc2sKKyAgICAgKi8KICAgICBwdWJsaWMgVGFza0dyb3VwaW5nIGdyb3VwOwotICAgIC8vIFRoZSB0YXNrQWZmaWxpYXRpb25JZCBpcyB0aGUgdGFzayBpZCBvZiB0aGUgcGFyZW50IHRhc2sgb3IgaXRzZWxmIGlmIGl0IGlzIG5vdCBhZmZpbGlhdGVkIHdpdGggYW55IHRhc2sKLSAgICBwdWJsaWMgaW50IHRhc2tBZmZpbGlhdGlvbklkOwotICAgIHB1YmxpYyBpbnQgdGFza0FmZmlsaWF0aW9uQ29sb3I7Ci0gICAgcHVibGljIGJvb2xlYW4gaXNMYXVuY2hUYXJnZXQ7Ci0gICAgcHVibGljIERyYXdhYmxlIGFwcGxpY2F0aW9uSWNvbjsKLSAgICBwdWJsaWMgRHJhd2FibGUgYWN0aXZpdHlJY29uOworICAgIC8qKgorICAgICAqIFRoZSBhZmZpbGlhdGlvblRhc2tJZCBpcyB0aGUgdGFzayBpZCBvZiB0aGUgcGFyZW50IHRhc2sgb3IgaXRzZWxmIGlmIGl0IGlzIG5vdCBhZmZpbGlhdGVkCisgICAgICogd2l0aCBhbnkgdGFzay4KKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGFmZmlsaWF0aW9uVGFza0lkOworICAgIHB1YmxpYyBpbnQgYWZmaWxpYXRpb25Db2xvcjsKKworICAgIC8qKgorICAgICAqIFRoZSBpY29uIGlzIHRoZSB0YXNrIGRlc2NyaXB0aW9uIGljb24gKGlmIHByb3ZpZGVkKSwgd2hpY2ggZmFsbHMgYmFjayB0byB0aGUgYWN0aXZpdHkgaWNvbiwKKyAgICAgKiB3aGljaCBjYW4gdGhlbiBmYWxsIGJhY2sgdG8gdGhlIGFwcGxpY2F0aW9uIGljb24uCisgICAgICovCisgICAgcHVibGljIERyYXdhYmxlIGljb247CisgICAgcHVibGljIEJpdG1hcCB0aHVtYm5haWw7CisgICAgcHVibGljIFN0cmluZyB0aXRsZTsKICAgICBwdWJsaWMgU3RyaW5nIGNvbnRlbnREZXNjcmlwdGlvbjsKLSAgICBwdWJsaWMgU3RyaW5nIGFjdGl2aXR5TGFiZWw7CiAgICAgcHVibGljIGludCBjb2xvclByaW1hcnk7CiAgICAgcHVibGljIGJvb2xlYW4gdXNlTGlnaHRPblByaW1hcnlDb2xvcjsKLSAgICBwdWJsaWMgQml0bWFwIHRodW1ibmFpbDsKLSAgICBwdWJsaWMgYm9vbGVhbiBsb2NrVG9UaGlzVGFzazsKLSAgICBwdWJsaWMgYm9vbGVhbiBsb2NrVG9UYXNrRW5hYmxlZDsKLSAgICBwdWJsaWMgYm9vbGVhbiBpc0hpc3RvcmljYWw7Ci0gICAgcHVibGljIEJpdG1hcCBpY29uOwotICAgIHB1YmxpYyBTdHJpbmcgaWNvbkZpbGVuYW1lOworCisgICAgLyoqCisgICAgICogVGhlIGJvdW5kcyBvZiB0aGUgdGFzaywgdXNlZCBvbmx5IGlmIGl0IGlzIGEgZnJlZWZvcm0gdGFzay4KKyAgICAgKi8KICAgICBwdWJsaWMgUmVjdCBib3VuZHM7CiAKKyAgICAvKioKKyAgICAgKiBUaGUgdGFzayBkZXNjcmlwdGlvbiBmb3IgdGhpcyB0YXNrLCBvbmx5IHVzZWQgdG8gcmVsb2FkIHRhc2sgaWNvbnMuCisgICAgICovCisgICAgcHVibGljIEFjdGl2aXR5TWFuYWdlci5UYXNrRGVzY3JpcHRpb24gdGFza0Rlc2NyaXB0aW9uOworCisgICAgLyoqCisgICAgICogVGhlIHN0YXRlIGlzTGF1bmNoVGFyZ2V0IHdpbGwgYmUgc2V0IGZvciB0aGUgY29ycmVjdCB0YXNrIHVwb24gbGF1bmNoaW5nIFJlY2VudHMuCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gaXNMYXVuY2hUYXJnZXQ7CisgICAgcHVibGljIGJvb2xlYW4gaXNIaXN0b3JpY2FsOworCiAgICAgcHJpdmF0ZSBBcnJheUxpc3Q8VGFza0NhbGxiYWNrcz4gbUNhbGxiYWNrcyA9IG5ldyBBcnJheUxpc3Q8PigpOwogCiAgICAgcHVibGljIFRhc2soKSB7CiAgICAgICAgIC8vIERvIG5vdGhpbmcKICAgICB9CiAKLSAgICBwdWJsaWMgVGFzayhUYXNrS2V5IGtleSwgaW50IHRhc2tBZmZpbGlhdGlvbiwgaW50IHRhc2tBZmZpbGlhdGlvbkNvbG9yLAotICAgICAgICAgICAgICAgIFN0cmluZyBhY3Rpdml0eVRpdGxlLCBTdHJpbmcgY29udGVudERlc2NyaXB0aW9uLCBEcmF3YWJsZSBhY3Rpdml0eUljb24sCi0gICAgICAgICAgICAgICAgaW50IGNvbG9yUHJpbWFyeSwgYm9vbGVhbiBsb2NrVG9UaGlzVGFzaywgYm9vbGVhbiBsb2NrVG9UYXNrRW5hYmxlZCwKLSAgICAgICAgICAgICAgICBib29sZWFuIGlzSGlzdG9yaWNhbCwgQml0bWFwIGljb24sIFN0cmluZyBpY29uRmlsZW5hbWUsIFJlY3QgYm91bmRzKSB7Ci0gICAgICAgIGJvb2xlYW4gaXNJbkFmZmlsaWF0aW9uR3JvdXAgPSAodGFza0FmZmlsaWF0aW9uICE9IGtleS5pZCk7Ci0gICAgICAgIGJvb2xlYW4gaGFzQWZmaWxpYXRpb25Hcm91cENvbG9yID0gaXNJbkFmZmlsaWF0aW9uR3JvdXAgJiYgKHRhc2tBZmZpbGlhdGlvbkNvbG9yICE9IDApOworICAgIHB1YmxpYyBUYXNrKFRhc2tLZXkga2V5LCBpbnQgYWZmaWxpYXRpb25UYXNrSWQsIGludCBhZmZpbGlhdGlvbkNvbG9yLCBEcmF3YWJsZSBpY29uLAorICAgICAgICAgICAgICAgIEJpdG1hcCB0aHVtYm5haWwsIFN0cmluZyB0aXRsZSwgU3RyaW5nIGNvbnRlbnREZXNjcmlwdGlvbiwgaW50IGNvbG9yUHJpbWFyeSwKKyAgICAgICAgICAgICAgICBib29sZWFuIGlzSGlzdG9yaWNhbCwgUmVjdCBib3VuZHMsCisgICAgICAgICAgICAgICAgQWN0aXZpdHlNYW5hZ2VyLlRhc2tEZXNjcmlwdGlvbiB0YXNrRGVzY3JpcHRpb24pIHsKKyAgICAgICAgYm9vbGVhbiBpc0luQWZmaWxpYXRpb25Hcm91cCA9IChhZmZpbGlhdGlvblRhc2tJZCAhPSBrZXkuaWQpOworICAgICAgICBib29sZWFuIGhhc0FmZmlsaWF0aW9uR3JvdXBDb2xvciA9IGlzSW5BZmZpbGlhdGlvbkdyb3VwICYmIChhZmZpbGlhdGlvbkNvbG9yICE9IDApOwogICAgICAgICB0aGlzLmtleSA9IGtleTsKLSAgICAgICAgdGhpcy50YXNrQWZmaWxpYXRpb25JZCA9IHRhc2tBZmZpbGlhdGlvbjsKLSAgICAgICAgdGhpcy50YXNrQWZmaWxpYXRpb25Db2xvciA9IHRhc2tBZmZpbGlhdGlvbkNvbG9yOwotICAgICAgICB0aGlzLmFjdGl2aXR5TGFiZWwgPSBhY3Rpdml0eVRpdGxlOworICAgICAgICB0aGlzLmFmZmlsaWF0aW9uVGFza0lkID0gYWZmaWxpYXRpb25UYXNrSWQ7CisgICAgICAgIHRoaXMuYWZmaWxpYXRpb25Db2xvciA9IGFmZmlsaWF0aW9uQ29sb3I7CisgICAgICAgIHRoaXMuaWNvbiA9IGljb247CisgICAgICAgIHRoaXMudGh1bWJuYWlsID0gdGh1bWJuYWlsOworICAgICAgICB0aGlzLnRpdGxlID0gdGl0bGU7CiAgICAgICAgIHRoaXMuY29udGVudERlc2NyaXB0aW9uID0gY29udGVudERlc2NyaXB0aW9uOwotICAgICAgICB0aGlzLmFjdGl2aXR5SWNvbiA9IGFjdGl2aXR5SWNvbjsKLSAgICAgICAgdGhpcy5jb2xvclByaW1hcnkgPSBoYXNBZmZpbGlhdGlvbkdyb3VwQ29sb3IgPyB0YXNrQWZmaWxpYXRpb25Db2xvciA6IGNvbG9yUHJpbWFyeTsKKyAgICAgICAgdGhpcy5jb2xvclByaW1hcnkgPSBoYXNBZmZpbGlhdGlvbkdyb3VwQ29sb3IgPyBhZmZpbGlhdGlvbkNvbG9yIDogY29sb3JQcmltYXJ5OwogICAgICAgICB0aGlzLnVzZUxpZ2h0T25QcmltYXJ5Q29sb3IgPSBVdGlsaXRpZXMuY29tcHV0ZUNvbnRyYXN0QmV0d2VlbkNvbG9ycyh0aGlzLmNvbG9yUHJpbWFyeSwKICAgICAgICAgICAgICAgICBDb2xvci5XSElURSkgPiAzZjsKLSAgICAgICAgdGhpcy5sb2NrVG9UaGlzVGFzayA9IGxvY2tUb1Rhc2tFbmFibGVkICYmIGxvY2tUb1RoaXNUYXNrOwotICAgICAgICB0aGlzLmxvY2tUb1Rhc2tFbmFibGVkID0gbG9ja1RvVGFza0VuYWJsZWQ7Ci0gICAgICAgIHRoaXMuaXNIaXN0b3JpY2FsID0gaXNIaXN0b3JpY2FsOwotICAgICAgICB0aGlzLmljb24gPSBpY29uOwotICAgICAgICB0aGlzLmljb25GaWxlbmFtZSA9IGljb25GaWxlbmFtZTsKICAgICAgICAgdGhpcy5ib3VuZHMgPSBib3VuZHM7CisgICAgICAgIHRoaXMudGFza0Rlc2NyaXB0aW9uID0gdGFza0Rlc2NyaXB0aW9uOworICAgICAgICB0aGlzLmlzSGlzdG9yaWNhbCA9IGlzSGlzdG9yaWNhbDsKICAgICB9CiAKICAgICAvKiogQ29waWVzIHRoZSBvdGhlciB0YXNrLiAqLwogICAgIHB1YmxpYyB2b2lkIGNvcHlGcm9tKFRhc2sgbykgewogICAgICAgICB0aGlzLmtleSA9IG8ua2V5OwotICAgICAgICB0aGlzLnRhc2tBZmZpbGlhdGlvbklkID0gby50YXNrQWZmaWxpYXRpb25JZDsKLSAgICAgICAgdGhpcy50YXNrQWZmaWxpYXRpb25Db2xvciA9IG8udGFza0FmZmlsaWF0aW9uQ29sb3I7Ci0gICAgICAgIHRoaXMuYWN0aXZpdHlMYWJlbCA9IG8uYWN0aXZpdHlMYWJlbDsKKyAgICAgICAgdGhpcy5ncm91cCA9IG8uZ3JvdXA7CisgICAgICAgIHRoaXMuYWZmaWxpYXRpb25UYXNrSWQgPSBvLmFmZmlsaWF0aW9uVGFza0lkOworICAgICAgICB0aGlzLmFmZmlsaWF0aW9uQ29sb3IgPSBvLmFmZmlsaWF0aW9uQ29sb3I7CisgICAgICAgIHRoaXMuaWNvbiA9IG8uaWNvbjsKKyAgICAgICAgdGhpcy50aHVtYm5haWwgPSBvLnRodW1ibmFpbDsKKyAgICAgICAgdGhpcy50aXRsZSA9IG8udGl0bGU7CiAgICAgICAgIHRoaXMuY29udGVudERlc2NyaXB0aW9uID0gby5jb250ZW50RGVzY3JpcHRpb247Ci0gICAgICAgIHRoaXMuYWN0aXZpdHlJY29uID0gby5hY3Rpdml0eUljb247CiAgICAgICAgIHRoaXMuY29sb3JQcmltYXJ5ID0gby5jb2xvclByaW1hcnk7CiAgICAgICAgIHRoaXMudXNlTGlnaHRPblByaW1hcnlDb2xvciA9IG8udXNlTGlnaHRPblByaW1hcnlDb2xvcjsKLSAgICAgICAgdGhpcy5sb2NrVG9UaGlzVGFzayA9IG8ubG9ja1RvVGhpc1Rhc2s7Ci0gICAgICAgIHRoaXMubG9ja1RvVGFza0VuYWJsZWQgPSBvLmxvY2tUb1Rhc2tFbmFibGVkOwotICAgICAgICB0aGlzLmlzSGlzdG9yaWNhbCA9IG8uaXNIaXN0b3JpY2FsOwotICAgICAgICB0aGlzLmljb24gPSBvLmljb247Ci0gICAgICAgIHRoaXMuaWNvbkZpbGVuYW1lID0gby5pY29uRmlsZW5hbWU7CiAgICAgICAgIHRoaXMuYm91bmRzID0gby5ib3VuZHM7CisgICAgICAgIHRoaXMuaXNMYXVuY2hUYXJnZXQgPSBvLmlzTGF1bmNoVGFyZ2V0OworICAgICAgICB0aGlzLmlzSGlzdG9yaWNhbCA9IG8uaXNIaXN0b3JpY2FsOwogICAgIH0KIAogICAgIC8qKgpAQCAtMjAwLDcgKzIxOCw3IEBACiAKICAgICAvKiogTm90aWZpZXMgdGhlIGNhbGxiYWNrIGxpc3RlbmVycyB0aGF0IHRoaXMgdGFzayBoYXMgYmVlbiBsb2FkZWQgKi8KICAgICBwdWJsaWMgdm9pZCBub3RpZnlUYXNrRGF0YUxvYWRlZChCaXRtYXAgdGh1bWJuYWlsLCBEcmF3YWJsZSBhcHBsaWNhdGlvbkljb24pIHsKLSAgICAgICAgdGhpcy5hcHBsaWNhdGlvbkljb24gPSBhcHBsaWNhdGlvbkljb247CisgICAgICAgIHRoaXMuaWNvbiA9IGFwcGxpY2F0aW9uSWNvbjsKICAgICAgICAgdGhpcy50aHVtYm5haWwgPSB0aHVtYm5haWw7CiAgICAgICAgIGludCBjYWxsYmFja0NvdW50ID0gbUNhbGxiYWNrcy5zaXplKCk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2FsbGJhY2tDb3VudDsgaSsrKSB7CkBAIC0yMTAsNyArMjI4LDcgQEAKIAogICAgIC8qKiBOb3RpZmllcyB0aGUgY2FsbGJhY2sgbGlzdGVuZXJzIHRoYXQgdGhpcyB0YXNrIGhhcyBiZWVuIHVubG9hZGVkICovCiAgICAgcHVibGljIHZvaWQgbm90aWZ5VGFza0RhdGFVbmxvYWRlZChCaXRtYXAgZGVmYXVsdFRodW1ibmFpbCwgRHJhd2FibGUgZGVmYXVsdEFwcGxpY2F0aW9uSWNvbikgewotICAgICAgICBhcHBsaWNhdGlvbkljb24gPSBkZWZhdWx0QXBwbGljYXRpb25JY29uOworICAgICAgICBpY29uID0gZGVmYXVsdEFwcGxpY2F0aW9uSWNvbjsKICAgICAgICAgdGh1bWJuYWlsID0gZGVmYXVsdFRodW1ibmFpbDsKICAgICAgICAgaW50IGNhbGxiYWNrQ291bnQgPSBtQ2FsbGJhY2tzLnNpemUoKTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjYWxsYmFja0NvdW50OyBpKyspIHsKQEAgLTIyMiw3ICsyNDAsNyBAQAogICAgICAqIFJldHVybnMgd2hldGhlciB0aGlzIHRhc2sgaXMgYWZmaWxpYXRlZCB3aXRoIGFub3RoZXIgdGFzay4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc0FmZmlsaWF0ZWRUYXNrKCkgewotICAgICAgICByZXR1cm4ga2V5LmlkICE9IHRhc2tBZmZpbGlhdGlvbklkOworICAgICAgICByZXR1cm4ga2V5LmlkICE9IGFmZmlsaWF0aW9uVGFza0lkOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvbW9kZWwvVGFza1N0YWNrLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9tb2RlbC9UYXNrU3RhY2suamF2YQppbmRleCBhZDAzYjRlLi41ZTcyMGNiIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9tb2RlbC9UYXNrU3RhY2suamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9tb2RlbC9UYXNrU3RhY2suamF2YQpAQCAtMzUyLDI4ICszNTIsMjggQEAKICAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gYWNjZXB0VGFzayhTcGFyc2VBcnJheTxUYXNrPiB0YXNrSWRNYXAsIFRhc2sgdCwgaW50IGluZGV4KSB7CiAgICAgICAgICAgICAgICAgaWYgKHQuaXNBZmZpbGlhdGVkVGFzaygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgdGFzayBpcyBhZmZpbGlhdGVkIHdpdGggYW5vdGhlciBwYXJlbnQgaW4gdGhlIHN0YWNrLCB0aGVuIHRoZSBoaXN0b3JpY2FsIHN0YXRlIG9mIHRoaXMKLSAgICAgICAgICAgICAgICAgICAgLy8gdGFzayBkZXBlbmRzIG9uIHRoZSBzdGF0ZSBvZiB0aGUgcGFyZW50IHRhc2sKLSAgICAgICAgICAgICAgICAgICAgVGFzayBwYXJlbnRUYXNrID0gdGFza0lkTWFwLmdldCh0LnRhc2tBZmZpbGlhdGlvbklkKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyB0YXNrIGlzIGFmZmlsaWF0ZWQgd2l0aCBhbm90aGVyIHBhcmVudCBpbiB0aGUgc3RhY2ssIHRoZW4gdGhlCisgICAgICAgICAgICAgICAgICAgIC8vIGhpc3RvcmljYWwgc3RhdGUgb2YgdGhpcyB0YXNrIGRlcGVuZHMgb24gdGhlIHN0YXRlIG9mIHRoZSBwYXJlbnQgdGFzaworICAgICAgICAgICAgICAgICAgICBUYXNrIHBhcmVudFRhc2sgPSB0YXNrSWRNYXAuZ2V0KHQuYWZmaWxpYXRpb25UYXNrSWQpOwogICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50VGFzayAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gcGFyZW50VGFzazsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gIXQuaXNIaXN0b3JpY2FsICYmICFTeXN0ZW1TZXJ2aWNlc1Byb3h5LmlzRG9ja2VkU3RhY2sodC5rZXkuc3RhY2tJZCk7CisgICAgICAgICAgICAgICAgcmV0dXJuICF0LmlzSGlzdG9yaWNhbDsKICAgICAgICAgICAgIH0KICAgICAgICAgfSk7CiAgICAgICAgIG1IaXN0b3J5VGFza0xpc3Quc2V0RmlsdGVyKG5ldyBUYXNrRmlsdGVyKCkgewogICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBhY2NlcHRUYXNrKFNwYXJzZUFycmF5PFRhc2s+IHRhc2tJZE1hcCwgVGFzayB0LCBpbnQgaW5kZXgpIHsKICAgICAgICAgICAgICAgICBpZiAodC5pc0FmZmlsaWF0ZWRUYXNrKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyB0YXNrIGlzIGFmZmlsaWF0ZWQgd2l0aCBhbm90aGVyIHBhcmVudCBpbiB0aGUgc3RhY2ssIHRoZW4gdGhlIGhpc3RvcmljYWwgc3RhdGUgb2YgdGhpcwotICAgICAgICAgICAgICAgICAgICAvLyB0YXNrIGRlcGVuZHMgb24gdGhlIHN0YXRlIG9mIHRoZSBwYXJlbnQgdGFzawotICAgICAgICAgICAgICAgICAgICBUYXNrIHBhcmVudFRhc2sgPSB0YXNrSWRNYXAuZ2V0KHQudGFza0FmZmlsaWF0aW9uSWQpOworICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIHRhc2sgaXMgYWZmaWxpYXRlZCB3aXRoIGFub3RoZXIgcGFyZW50IGluIHRoZSBzdGFjaywgdGhlbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gaGlzdG9yaWNhbCBzdGF0ZSBvZiB0aGlzIHRhc2sgZGVwZW5kcyBvbiB0aGUgc3RhdGUgb2YgdGhlIHBhcmVudCB0YXNrCisgICAgICAgICAgICAgICAgICAgIFRhc2sgcGFyZW50VGFzayA9IHRhc2tJZE1hcC5nZXQodC5hZmZpbGlhdGlvblRhc2tJZCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRUYXNrICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBwYXJlbnRUYXNrOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiB0LmlzSGlzdG9yaWNhbCAmJiAhU3lzdGVtU2VydmljZXNQcm94eS5pc0RvY2tlZFN0YWNrKHQua2V5LnN0YWNrSWQpOworICAgICAgICAgICAgICAgIHJldHVybiB0LmlzSGlzdG9yaWNhbDsKICAgICAgICAgICAgIH0KICAgICAgICAgfSk7CiAgICAgfQpAQCAtNDI3LDggKzQyNyw2IEBACiAgICAgICAgICAgICAgICAgcmVtb3ZlR3JvdXAoZ3JvdXApOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIC8vIFVwZGF0ZSB0aGUgbG9jay10by1hcHAgc3RhdGUKLSAgICAgICAgdC5sb2NrVG9UaGlzVGFzayA9IGZhbHNlOwogICAgIH0KIAogICAgIC8qKiBSZW1vdmVzIGEgdGFzayAqLwpAQCAtNDM3LDkgKzQzNSw2IEBACiAgICAgICAgICAgICBib29sZWFuIHdhc0Zyb250TW9zdFRhc2sgPSAoZ2V0U3RhY2tGcm9udE1vc3RUYXNrKCkgPT0gdCk7CiAgICAgICAgICAgICByZW1vdmVUYXNrSW1wbChtU3RhY2tUYXNrTGlzdCwgdCk7CiAgICAgICAgICAgICBUYXNrIG5ld0Zyb250TW9zdFRhc2sgPSBnZXRTdGFja0Zyb250TW9zdFRhc2soKTsKLSAgICAgICAgICAgIGlmIChuZXdGcm9udE1vc3RUYXNrICE9IG51bGwgJiYgbmV3RnJvbnRNb3N0VGFzay5sb2NrVG9UYXNrRW5hYmxlZCkgewotICAgICAgICAgICAgICAgIG5ld0Zyb250TW9zdFRhc2subG9ja1RvVGhpc1Rhc2sgPSB0cnVlOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG1DYiAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgLy8gTm90aWZ5IHRoYXQgYSB0YXNrIGhhcyBiZWVuIHJlbW92ZWQKICAgICAgICAgICAgICAgICBtQ2Iub25TdGFja1Rhc2tSZW1vdmVkKHRoaXMsIHQsIHdhc0Zyb250TW9zdFRhc2ssIG5ld0Zyb250TW9zdFRhc2spOwpAQCAtNTI0LDEwICs1MTksMjEgQEAKICAgICAgICAgbUFmZmluaXRpZXNHcm91cHMuY2xlYXIoKTsKICAgICB9CiAKLSAgICAvKiogR2V0cyB0aGUgZnJvbnQgdGFzayAqLworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGZyb250LW1vc3QgdGFzayBpbiB0aGUgc3RhY2suCisgICAgICovCiAgICAgcHVibGljIFRhc2sgZ2V0U3RhY2tGcm9udE1vc3RUYXNrKCkgewotICAgICAgICBpZiAobVN0YWNrVGFza0xpc3Quc2l6ZSgpID09IDApIHJldHVybiBudWxsOwotICAgICAgICByZXR1cm4gbVN0YWNrVGFza0xpc3QuZ2V0VGFza3MoKS5nZXQobVN0YWNrVGFza0xpc3Quc2l6ZSgpIC0gMSk7CisgICAgICAgIEFycmF5TGlzdDxUYXNrPiBzdGFja1Rhc2tzID0gbVN0YWNrVGFza0xpc3QuZ2V0VGFza3MoKTsKKyAgICAgICAgaWYgKHN0YWNrVGFza3MuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGludCBpID0gc3RhY2tUYXNrcy5zaXplKCkgLSAxOyBpID49IDA7IGktLSkgeworICAgICAgICAgICAgVGFzayB0YXNrID0gc3RhY2tUYXNrcy5nZXQoaSk7CisgICAgICAgICAgICBpZiAoIXRhc2suaXNGcmVlZm9ybVRhc2soKSkgeworICAgICAgICAgICAgICAgIHJldHVybiB0YXNrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KIAogICAgIC8qKiBHZXRzIHRoZSB0YXNrIGtleXMgKi8KQEAgLTcxNiw3ICs3MjIsNyBAQAogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0YXNrQ291bnQ7IGkrKykgewogICAgICAgICAgICAgICAgIFRhc2sgdCA9IHRhc2tzLmdldChpKTsKICAgICAgICAgICAgICAgICBUYXNrR3JvdXBpbmcgZ3JvdXA7Ci0gICAgICAgICAgICAgICAgaW50IGFmZmlsaWF0aW9uID0gdC50YXNrQWZmaWxpYXRpb25JZCA+IDAgPyB0LnRhc2tBZmZpbGlhdGlvbklkIDoKKyAgICAgICAgICAgICAgICBpbnQgYWZmaWxpYXRpb24gPSB0LmFmZmlsaWF0aW9uVGFza0lkID4gMCA/IHQuYWZmaWxpYXRpb25UYXNrSWQgOgogICAgICAgICAgICAgICAgICAgICAgICAgSW5kaXZpZHVhbFRhc2tJZE9mZnNldCArIHQua2V5LmlkOwogICAgICAgICAgICAgICAgIGlmIChtQWZmaW5pdGllc0dyb3Vwcy5jb250YWluc0tleShhZmZpbGlhdGlvbikpIHsKICAgICAgICAgICAgICAgICAgICAgZ3JvdXAgPSBnZXRHcm91cFdpdGhBZmZpbGlhdGlvbihhZmZpbGlhdGlvbik7CkBAIC03MzcsNyArNzQzLDcgQEAKICAgICAgICAgICAgICAgICAvLyBJZ25vcmUgdGhlIGdyb3VwcyB0aGF0IG9ubHkgaGF2ZSBvbmUgdGFzawogICAgICAgICAgICAgICAgIGlmICh0YXNrQ291bnQgPD0gMSkgY29udGludWU7CiAgICAgICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBncm91cCBjb2xvciBkaXN0cmlidXRpb24KLSAgICAgICAgICAgICAgICBpbnQgYWZmaWxpYXRpb25Db2xvciA9IHRhc2tzTWFwLmdldChncm91cC5tVGFza0tleXMuZ2V0KDApKS50YXNrQWZmaWxpYXRpb25Db2xvcjsKKyAgICAgICAgICAgICAgICBpbnQgYWZmaWxpYXRpb25Db2xvciA9IHRhc2tzTWFwLmdldChncm91cC5tVGFza0tleXMuZ2V0KDApKS5hZmZpbGlhdGlvbkNvbG9yOwogICAgICAgICAgICAgICAgIGZsb2F0IGFscGhhU3RlcCA9ICgxZiAtIG1pbkFscGhhKSAvIHRhc2tDb3VudDsKICAgICAgICAgICAgICAgICBmbG9hdCBhbHBoYSA9IDFmOwogICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgdGFza0NvdW50OyBqKyspIHsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL3ZpZXdzL1JlY2VudHNUcmFuc2l0aW9uSGVscGVyLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy92aWV3cy9SZWNlbnRzVHJhbnNpdGlvbkhlbHBlci5qYXZhCmluZGV4IDEzNWYwZjkuLjBhZjdjMWUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL3ZpZXdzL1JlY2VudHNUcmFuc2l0aW9uSGVscGVyLmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvdmlld3MvUmVjZW50c1RyYW5zaXRpb25IZWxwZXIuamF2YQpAQCAtMTU3LDcgKzE1Nyw3IEBACiAgICAgICAgICAgICBBY3Rpdml0eU9wdGlvbnMgb3B0cywgSUFwcFRyYW5zaXRpb25BbmltYXRpb25TcGVjc0Z1dHVyZSB0cmFuc2l0aW9uRnV0dXJlLAogICAgICAgICAgICAgZmluYWwgQWN0aXZpdHlPcHRpb25zLk9uQW5pbWF0aW9uU3RhcnRlZExpc3RlbmVyIGFuaW1TdGFydGVkTGlzdGVuZXIpIHsKICAgICAgICAgU3lzdGVtU2VydmljZXNQcm94eSBzc3AgPSBSZWNlbnRzLmdldFN5c3RlbVNlcnZpY2VzKCk7Ci0gICAgICAgIGlmIChzc3Auc3RhcnRBY3Rpdml0eUZyb21SZWNlbnRzKG1Db250ZXh0LCB0YXNrLmtleS5pZCwgdGFzay5hY3Rpdml0eUxhYmVsLCBvcHRzKSkgeworICAgICAgICBpZiAoc3NwLnN0YXJ0QWN0aXZpdHlGcm9tUmVjZW50cyhtQ29udGV4dCwgdGFzay5rZXkuaWQsIHRhc2sudGl0bGUsIG9wdHMpKSB7CiAgICAgICAgICAgICAvLyBLZWVwIHRyYWNrIG9mIHRoZSBpbmRleCBvZiB0aGUgdGFzayBsYXVuY2gKICAgICAgICAgICAgIGludCB0YXNrSW5kZXhGcm9tRnJvbnQgPSAwOwogICAgICAgICAgICAgaW50IHRhc2tJbmRleCA9IHN0YWNrLmluZGV4T2ZTdGFja1Rhc2sodGFzayk7CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy92aWV3cy9SZWNlbnRzVmlldy5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvdmlld3MvUmVjZW50c1ZpZXcuamF2YQppbmRleCA1M2MwMmNiLi5jOTVjNzNiIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy92aWV3cy9SZWNlbnRzVmlldy5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL3ZpZXdzL1JlY2VudHNWaWV3LmphdmEKQEAgLTEzMiwxMCArMTMyLDcgQEAKICAgICAgICAgbUhpc3RvcnlCdXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG5ldyBWaWV3Lk9uQ2xpY2tMaXN0ZW5lcigpIHsKICAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKLSAgICAgICAgICAgICAgICBSZWZlcmVuY2VDb3VudGVkVHJpZ2dlciBwb3N0SGlkZVN0YWNrQW5pbWF0aW9uVHJpZ2dlciA9IG5ldyBSZWZlcmVuY2VDb3VudGVkVHJpZ2dlcih2LmdldENvbnRleHQoKSk7Ci0gICAgICAgICAgICAgICAgcG9zdEhpZGVTdGFja0FuaW1hdGlvblRyaWdnZXIuaW5jcmVtZW50KCk7Ci0gICAgICAgICAgICAgICAgRXZlbnRCdXMuZ2V0RGVmYXVsdCgpLnNlbmQobmV3IFNob3dIaXN0b3J5RXZlbnQocG9zdEhpZGVTdGFja0FuaW1hdGlvblRyaWdnZXIpKTsKLSAgICAgICAgICAgICAgICBwb3N0SGlkZVN0YWNrQW5pbWF0aW9uVHJpZ2dlci5kZWNyZW1lbnQoKTsKKyAgICAgICAgICAgICAgICBFdmVudEJ1cy5nZXREZWZhdWx0KCkuc2VuZChuZXcgU2hvd0hpc3RvcnlFdmVudCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSk7CiAgICAgICAgIGFkZFZpZXcobUhpc3RvcnlCdXR0b24pOwpAQCAtMzIwLDcgKzMxNyw3IEBACiAgICAgICogSGlkZXMgdGhlIHRhc2sgc3RhY2sgYW5kIHNob3dzIHRoZSBlbXB0eSB2aWV3LgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNob3dFbXB0eVZpZXcoKSB7Ci0gICAgICAgIGlmICghUmVjZW50c0RlYnVnRmxhZ3MuU3RhdGljLkRpc2FibGVTZWFyY2hCYXIgJiYgKG1TZWFyY2hCYXIgIT0gbnVsbCkpIHsKKyAgICAgICAgaWYgKFJlY2VudHNEZWJ1Z0ZsYWdzLlN0YXRpYy5FbmFibGVTZWFyY2hCYXIgJiYgKG1TZWFyY2hCYXIgIT0gbnVsbCkpIHsKICAgICAgICAgICAgIG1TZWFyY2hCYXIuc2V0VmlzaWJpbGl0eShWaWV3LklOVklTSUJMRSk7CiAgICAgICAgIH0KICAgICAgICAgbVRhc2tTdGFja1ZpZXcuc2V0VmlzaWJpbGl0eShWaWV3LklOVklTSUJMRSk7CkBAIC0zMzUsNyArMzMyLDcgQEAKICAgICBwdWJsaWMgdm9pZCBoaWRlRW1wdHlWaWV3KCkgewogICAgICAgICBtRW1wdHlWaWV3LnNldFZpc2liaWxpdHkoVmlldy5JTlZJU0lCTEUpOwogICAgICAgICBtVGFza1N0YWNrVmlldy5zZXRWaXNpYmlsaXR5KFZpZXcuVklTSUJMRSk7Ci0gICAgICAgIGlmICghUmVjZW50c0RlYnVnRmxhZ3MuU3RhdGljLkRpc2FibGVTZWFyY2hCYXIgJiYgKG1TZWFyY2hCYXIgIT0gbnVsbCkpIHsKKyAgICAgICAgaWYgKFJlY2VudHNEZWJ1Z0ZsYWdzLlN0YXRpYy5FbmFibGVTZWFyY2hCYXIgJiYgKG1TZWFyY2hCYXIgIT0gbnVsbCkpIHsKICAgICAgICAgICAgIG1TZWFyY2hCYXIuc2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpOwogICAgICAgICB9CiAgICAgICAgIG1UYXNrU3RhY2tWaWV3LmJyaW5nVG9Gcm9udCgpOwpAQCAtNTc2LDggKzU3Myw4IEBACiAgICAgcHVibGljIGZpbmFsIHZvaWQgb25CdXNFdmVudChTaG93SGlzdG9yeUV2ZW50IGV2ZW50KSB7CiAgICAgICAgIC8vIEhpZGUgdGhlIGhpc3RvcnkgYnV0dG9uIHdoZW4gdGhlIGhpc3RvcnkgdmlldyBpcyBzaG93bgogICAgICAgICBoaWRlSGlzdG9yeUJ1dHRvbihnZXRSZXNvdXJjZXMoKS5nZXRJbnRlZ2VyKFIuaW50ZWdlci5yZWNlbnRzX2hpc3RvcnlfdHJhbnNpdGlvbl9kdXJhdGlvbiksCi0gICAgICAgICAgICAgICAgZXZlbnQucG9zdEhpZGVTdGFja0FuaW1hdGlvblRyaWdnZXIpOwotICAgICAgICBldmVudC5wb3N0SGlkZVN0YWNrQW5pbWF0aW9uVHJpZ2dlci5hZGRMYXN0RGVjcmVtZW50UnVubmFibGUobmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgICAgIGV2ZW50LmdldEFuaW1hdGlvblRyaWdnZXIoKSk7CisgICAgICAgIGV2ZW50LmFkZFBvc3RBbmltYXRpb25DYWxsYmFjayhuZXcgUnVubmFibGUoKSB7CiAgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKICAgICAgICAgICAgICAgICBzZXRBbHBoYSgwZik7CkBAIC01ODksNyArNTg2LDcgQEAKICAgICAgICAgLy8gU2hvdyB0aGUgaGlzdG9yeSBidXR0b24gd2hlbiB0aGUgaGlzdG9yeSB2aWV3IGlzIGhpZGRlbgogICAgICAgICBzZXRBbHBoYSgxZik7CiAgICAgICAgIHNob3dIaXN0b3J5QnV0dG9uKGdldFJlc291cmNlcygpLmdldEludGVnZXIoUi5pbnRlZ2VyLnJlY2VudHNfaGlzdG9yeV90cmFuc2l0aW9uX2R1cmF0aW9uKSwKLSAgICAgICAgICAgICAgICBldmVudC5wb3N0SGlkZUhpc3RvcnlBbmltYXRpb25UcmlnZ2VyKTsKKyAgICAgICAgICAgICAgICBldmVudC5nZXRBbmltYXRpb25UcmlnZ2VyKCkpOwogICAgIH0KIAogICAgIHB1YmxpYyBmaW5hbCB2b2lkIG9uQnVzRXZlbnQoU2hvd0hpc3RvcnlCdXR0b25FdmVudCBldmVudCkgewpAQCAtNjA5LDEwICs2MDYsOSBAQAogICAgICAqIFNob3dzIHRoZSBoaXN0b3J5IGJ1dHRvbi4KICAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgc2hvd0hpc3RvcnlCdXR0b24oZmluYWwgaW50IGR1cmF0aW9uKSB7Ci0gICAgICAgIFJlZmVyZW5jZUNvdW50ZWRUcmlnZ2VyIHBvc3RBbmltYXRpb25UcmlnZ2VyID0gbmV3IFJlZmVyZW5jZUNvdW50ZWRUcmlnZ2VyKGdldENvbnRleHQoKSk7Ci0gICAgICAgIHBvc3RBbmltYXRpb25UcmlnZ2VyLmluY3JlbWVudCgpOworICAgICAgICBSZWZlcmVuY2VDb3VudGVkVHJpZ2dlciBwb3N0QW5pbWF0aW9uVHJpZ2dlciA9IG5ldyBSZWZlcmVuY2VDb3VudGVkVHJpZ2dlcigpOwogICAgICAgICBzaG93SGlzdG9yeUJ1dHRvbihkdXJhdGlvbiwgcG9zdEFuaW1hdGlvblRyaWdnZXIpOwotICAgICAgICBwb3N0QW5pbWF0aW9uVHJpZ2dlci5kZWNyZW1lbnQoKTsKKyAgICAgICAgcG9zdEFuaW1hdGlvblRyaWdnZXIuZmx1c2hMYXN0RGVjcmVtZW50UnVubmFibGVzKCk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHNob3dIaXN0b3J5QnV0dG9uKGZpbmFsIGludCBkdXJhdGlvbiwKQEAgLTYzOCwxMCArNjM0LDkgQEAKICAgICAgKiBIaWRlcyB0aGUgaGlzdG9yeSBidXR0b24uCiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIGhpZGVIaXN0b3J5QnV0dG9uKGludCBkdXJhdGlvbikgewotICAgICAgICBSZWZlcmVuY2VDb3VudGVkVHJpZ2dlciBwb3N0QW5pbWF0aW9uVHJpZ2dlciA9IG5ldyBSZWZlcmVuY2VDb3VudGVkVHJpZ2dlcihnZXRDb250ZXh0KCkpOwotICAgICAgICBwb3N0QW5pbWF0aW9uVHJpZ2dlci5pbmNyZW1lbnQoKTsKKyAgICAgICAgUmVmZXJlbmNlQ291bnRlZFRyaWdnZXIgcG9zdEFuaW1hdGlvblRyaWdnZXIgPSBuZXcgUmVmZXJlbmNlQ291bnRlZFRyaWdnZXIoKTsKICAgICAgICAgaGlkZUhpc3RvcnlCdXR0b24oZHVyYXRpb24sIHBvc3RBbmltYXRpb25UcmlnZ2VyKTsKLSAgICAgICAgcG9zdEFuaW1hdGlvblRyaWdnZXIuZGVjcmVtZW50KCk7CisgICAgICAgIHBvc3RBbmltYXRpb25UcmlnZ2VyLmZsdXNoTGFzdERlY3JlbWVudFJ1bm5hYmxlcygpOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBoaWRlSGlzdG9yeUJ1dHRvbihpbnQgZHVyYXRpb24sCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy92aWV3cy9SZWNlbnRzVmlld1RvdWNoSGFuZGxlci5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvdmlld3MvUmVjZW50c1ZpZXdUb3VjaEhhbmRsZXIuamF2YQppbmRleCAzN2EwMTk0Li4zMTg4MDFkIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy92aWV3cy9SZWNlbnRzVmlld1RvdWNoSGFuZGxlci5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL3ZpZXdzL1JlY2VudHNWaWV3VG91Y2hIYW5kbGVyLmphdmEKQEAgLTE4OCwxMiArMTg4LDggQEAKICAgICAgICAgICAgIGNhc2UgTW90aW9uRXZlbnQuQUNUSU9OX1VQOgogICAgICAgICAgICAgY2FzZSBNb3Rpb25FdmVudC5BQ1RJT05fQ0FOQ0VMOiB7CiAgICAgICAgICAgICAgICAgaWYgKG1EcmFnZ2luZykgewotICAgICAgICAgICAgICAgICAgICBSZWZlcmVuY2VDb3VudGVkVHJpZ2dlciBwb3N0QW5pbWF0aW9uVHJpZ2dlciA9IG5ldyBSZWZlcmVuY2VDb3VudGVkVHJpZ2dlcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUnYuZ2V0Q29udGV4dCgpKTsKLSAgICAgICAgICAgICAgICAgICAgcG9zdEFuaW1hdGlvblRyaWdnZXIuaW5jcmVtZW50KCk7CiAgICAgICAgICAgICAgICAgICAgIEV2ZW50QnVzLmdldERlZmF1bHQoKS5zZW5kKG5ldyBEcmFnRW5kRXZlbnQobURyYWdUYXNrLCBtVGFza1ZpZXcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbUxhc3REcm9wVGFyZ2V0LCBwb3N0QW5pbWF0aW9uVHJpZ2dlcikpOwotICAgICAgICAgICAgICAgICAgICBwb3N0QW5pbWF0aW9uVHJpZ2dlci5kZWNyZW1lbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtTGFzdERyb3BUYXJnZXQpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvdmlld3MvVGFza1N0YWNrTGF5b3V0QWxnb3JpdGhtLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy92aWV3cy9UYXNrU3RhY2tMYXlvdXRBbGdvcml0aG0uamF2YQppbmRleCAxMGRmMTU2Li45ZDM5MWIwIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy92aWV3cy9UYXNrU3RhY2tMYXlvdXRBbGdvcml0aG0uamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy92aWV3cy9UYXNrU3RhY2tMYXlvdXRBbGdvcml0aG0uamF2YQpAQCAtMzMzLDcgKzMzMyw2IEBACiAgICAgICogaW5jbHVkaW5nIHRoZSBzZWFyY2ggYmFyLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGluaXRpYWxpemUoUmVjdCB0YXNrU3RhY2tCb3VuZHMsIFN0YWNrU3RhdGUgc3RhdGUpIHsKLSAgICAgICAgUmVjZW50c0RlYnVnRmxhZ3MgZGVidWdGbGFncyA9IFJlY2VudHMuZ2V0RGVidWdGbGFncygpOwogICAgICAgICBSZWNlbnRzQ29uZmlndXJhdGlvbiBjb25maWcgPSBSZWNlbnRzLmdldENvbmZpZ3VyYXRpb24oKTsKICAgICAgICAgaW50IHdpZHRoUGFkZGluZyA9IChpbnQpIChjb25maWcudGFza1N0YWNrV2lkdGhQYWRkaW5nUGN0ICogdGFza1N0YWNrQm91bmRzLndpZHRoKCkpOwogICAgICAgICBpbnQgaGVpZ2h0UGFkZGluZyA9IG1Db250ZXh0LmdldFJlc291cmNlcygpLmdldERpbWVuc2lvblBpeGVsU2l6ZSgKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL3ZpZXdzL1Rhc2tTdGFja1ZpZXcuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL3ZpZXdzL1Rhc2tTdGFja1ZpZXcuamF2YQppbmRleCA0MjFlNmEwLi45NGZhZTEzIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy92aWV3cy9UYXNrU3RhY2tWaWV3LmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvdmlld3MvVGFza1N0YWNrVmlldy5qYXZhCkBAIC0yOCw2ICsyOCw3IEBACiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5HcmFkaWVudERyYXdhYmxlOwogaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsYWJsZTsKK2ltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzOwogaW1wb3J0IGFuZHJvaWQudXRpbC5JbnRQcm9wZXJ0eTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Qcm9wZXJ0eTsKQEAgLTQ0LDcgKzQ1LDYgQEAKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLlJlY2VudHNBY3Rpdml0eTsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLlJlY2VudHNBY3Rpdml0eUxhdW5jaFN0YXRlOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMuUmVjZW50c0NvbmZpZ3VyYXRpb247Ci1pbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5SZWNlbnRzRGVidWdGbGFnczsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLmV2ZW50cy5FdmVudEJ1czsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLmV2ZW50cy5hY3Rpdml0eS5DYW5jZWxFbnRlclJlY2VudHNXaW5kb3dBbmltYXRpb25FdmVudDsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLmV2ZW50cy5hY3Rpdml0eS5FbnRlclJlY2VudHNXaW5kb3dBbmltYXRpb25Db21wbGV0ZWRFdmVudDsKQEAgLTE1MCw3ICsxNTAsOSBAQAogICAgIExpc3Q8VGFza1ZpZXc+IG1JbW11dGFibGVUYXNrVmlld3MgPSBuZXcgQXJyYXlMaXN0PD4oKTsKICAgICBMaXN0PFRhc2tWaWV3PiBtVG1wVGFza1ZpZXdzID0gbmV3IEFycmF5TGlzdDw+KCk7CiAgICAgTGF5b3V0SW5mbGF0ZXIgbUluZmxhdGVyOworCiAgICAgYm9vbGVhbiBtVG91Y2hFeHBsb3JhdGlvbkVuYWJsZWQ7CisgICAgYm9vbGVhbiBtU2NyZWVuUGlubmluZ0VuYWJsZWQ7CiAKICAgICBJbnRlcnBvbGF0b3IgbUZhc3RPdXRTbG93SW5JbnRlcnBvbGF0b3I7CiAKQEAgLTIyNSw2ICsyMjcsOCBAQAogICAgIHByb3RlY3RlZCB2b2lkIG9uQXR0YWNoZWRUb1dpbmRvdygpIHsKICAgICAgICAgU3lzdGVtU2VydmljZXNQcm94eSBzc3AgPSBSZWNlbnRzLmdldFN5c3RlbVNlcnZpY2VzKCk7CiAgICAgICAgIG1Ub3VjaEV4cGxvcmF0aW9uRW5hYmxlZCA9IHNzcC5pc1RvdWNoRXhwbG9yYXRpb25FbmFibGVkKCk7CisgICAgICAgIG1TY3JlZW5QaW5uaW5nRW5hYmxlZCA9IHNzcC5nZXRTeXN0ZW1TZXR0aW5nKGdldENvbnRleHQoKSwKKyAgICAgICAgICAgICAgICBTZXR0aW5ncy5TeXN0ZW0uTE9DS19UT19BUFBfRU5BQkxFRCkgIT0gMDsKICAgICAgICAgRXZlbnRCdXMuZ2V0RGVmYXVsdCgpLnJlZ2lzdGVyKHRoaXMsIFJlY2VudHNBY3Rpdml0eS5FVkVOVF9CVVNfUFJJT1JJVFkgKyAxKTsKICAgICAgICAgc3VwZXIub25BdHRhY2hlZFRvV2luZG93KCk7CiAgICAgfQpAQCAtNzk4LDcgKzgwMiw3IEBACiAgICAgICAgICAgICBUYXNrVmlldyBmcm9udE1vc3RUYXNrID0gdGFza1ZpZXdzLmdldCh0YXNrVmlld0NvdW50IC0gMSk7CiAgICAgICAgICAgICBldmVudC5zZXRGcm9tSW5kZXgobVN0YWNrLmluZGV4T2ZTdGFja1Rhc2soYmFja01vc3RUYXNrLmdldFRhc2soKSkpOwogICAgICAgICAgICAgZXZlbnQuc2V0VG9JbmRleChtU3RhY2suaW5kZXhPZlN0YWNrVGFzayhmcm9udE1vc3RUYXNrLmdldFRhc2soKSkpOwotICAgICAgICAgICAgZXZlbnQuc2V0Q29udGVudERlc2NyaXB0aW9uKGZyb250TW9zdFRhc2suZ2V0VGFzaygpLmFjdGl2aXR5TGFiZWwpOworICAgICAgICAgICAgZXZlbnQuc2V0Q29udGVudERlc2NyaXB0aW9uKGZyb250TW9zdFRhc2suZ2V0VGFzaygpLnRpdGxlKTsKICAgICAgICAgfQogICAgICAgICBldmVudC5zZXRJdGVtQ291bnQobVN0YWNrLmdldFN0YWNrVGFza0NvdW50KCkpOwogICAgICAgICBldmVudC5zZXRTY3JvbGxZKG1TdGFja1Njcm9sbGVyLm1TY3JvbGxlci5nZXRDdXJyWSgpKTsKQEAgLTEwMjIsMTEgKzEwMjYsOSBAQAogICAgICAgICAgICAgaWYgKGxhdW5jaFRhcmdldFRhc2sgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIG9jY2x1ZGVzTGF1bmNoVGFyZ2V0ID0gbGF1bmNoVGFyZ2V0VGFzay5ncm91cC5pc1Rhc2tBYm92ZVRhc2sodGFzaywKICAgICAgICAgICAgICAgICAgICAgICAgIGxhdW5jaFRhcmdldFRhc2spOwotICAgICAgICAgICAgICAgIGhpZGVUYXNrID0gU3lzdGVtU2VydmljZXNQcm94eS5pc0ZyZWVmb3JtU3RhY2sobGF1bmNoVGFyZ2V0VGFzay5rZXkuc3RhY2tJZCkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbVNlcnZpY2VzUHJveHkuaXNGcmVlZm9ybVN0YWNrKHRhc2sua2V5LnN0YWNrSWQpOworICAgICAgICAgICAgICAgIGhpZGVUYXNrID0gbGF1bmNoVGFyZ2V0VGFzay5pc0ZyZWVmb3JtVGFzaygpICYmIHRhc2suaXNGcmVlZm9ybVRhc2soKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHR2LnByZXBhcmVFbnRlclJlY2VudHNBbmltYXRpb24odGFzay5pc0xhdW5jaFRhcmdldCwgaGlkZVRhc2ssIG9jY2x1ZGVzTGF1bmNoVGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICBvZmZzY3JlZW5ZKTsKKyAgICAgICAgICAgIHR2LnByZXBhcmVFbnRlclJlY2VudHNBbmltYXRpb24oaGlkZVRhc2ssIG9jY2x1ZGVzTGF1bmNoVGFyZ2V0LCBvZmZzY3JlZW5ZKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIElmIHRoZSBlbnRlciBhbmltYXRpb24gc3RhcnRlZCBhbHJlYWR5IGFuZCB3ZSBoYXZlbid0IGNvbXBsZXRlZCBhIGxheW91dCB5ZXQsIGRvIHRoZQpAQCAtMTA4OSw2ICsxMDkxLDcgQEAKICAgICAgICAgICAgICAgICBjdHguY3VycmVudFRhc2tSZWN0ID0gbUxheW91dEFsZ29yaXRobS5tVGFza1JlY3Q7CiAgICAgICAgICAgICAgICAgY3R4LmN1cnJlbnRUYXNrT2NjbHVkZXNMYXVuY2hUYXJnZXQgPSAobGF1bmNoVGFyZ2V0VGFzayAhPSBudWxsKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgbGF1bmNoVGFyZ2V0VGFzay5ncm91cC5pc1Rhc2tBYm92ZVRhc2sodGFzaywgbGF1bmNoVGFyZ2V0VGFzayk7CisgICAgICAgICAgICAgICAgY3R4LmlzU2NyZWVuUGlubmluZ0VuYWJsZWQgPSBtU2NyZWVuUGlubmluZ0VuYWJsZWQ7CiAgICAgICAgICAgICAgICAgY3R4LnVwZGF0ZUxpc3RlbmVyID0gbVJlcXVlc3RVcGRhdGVDbGlwcGluZ0xpc3RlbmVyOwogICAgICAgICAgICAgICAgIG1MYXlvdXRBbGdvcml0aG0uZ2V0U3RhY2tUcmFuc2Zvcm0odGFzaywgbVN0YWNrU2Nyb2xsZXIuZ2V0U3RhY2tTY3JvbGwoKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5jdXJyZW50VGFza1RyYW5zZm9ybSwgbnVsbCk7CkBAIC0xMjczLDEzICsxMjc2LDExIEBACiAgICAgICAgICAgICByZXF1ZXN0U3luY2hyb25pemVTdGFja1ZpZXdzV2l0aE1vZGVsKERFRkFVTFRfU1lOQ19TVEFDS19EVVJBVElPTik7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBVcGRhdGUgdGhlIG5ldyBmcm9udCBtb3N0IHRhc2sKLSAgICAgICAgaWYgKG5ld0Zyb250TW9zdFRhc2sgIT0gbnVsbCkgeworICAgICAgICAvLyBVcGRhdGUgdGhlIG5ldyBmcm9udCBtb3N0IHRhc2sncyBhY3Rpb24gYnV0dG9uCisgICAgICAgIGlmIChtU2NyZWVuUGlubmluZ0VuYWJsZWQgJiYgbmV3RnJvbnRNb3N0VGFzayAhPSBudWxsKSB7CiAgICAgICAgICAgICBUYXNrVmlldyBmcm9udFR2ID0gZ2V0Q2hpbGRWaWV3Rm9yVGFzayhuZXdGcm9udE1vc3RUYXNrKTsKICAgICAgICAgICAgIGlmIChmcm9udFR2ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBmcm9udFR2Lm9uVGFza0JvdW5kKG5ld0Zyb250TW9zdFRhc2spOwotICAgICAgICAgICAgICAgIGZyb250VHYuZmFkZUluQWN0aW9uQnV0dG9uKGdldFJlc291cmNlcygpLmdldEludGVnZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICBSLmludGVnZXIucmVjZW50c190YXNrX2VudGVyX2Zyb21fYXBwX2R1cmF0aW9uKSk7CisgICAgICAgICAgICAgICAgZnJvbnRUdi5zaG93QWN0aW9uQnV0dG9uKHRydWUgLyogZmFkZUluICovLCBERUZBVUxUX1NZTkNfU1RBQ0tfRFVSQVRJT04pOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTEzMDYsNyArMTMwNyw3IEBACiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBwcmVwYXJlVmlld1RvRW50ZXJQb29sKFRhc2tWaWV3IHR2KSB7Ci0gICAgICAgIFRhc2sgdGFzayA9IHR2LmdldFRhc2soKTsKKyAgICAgICAgZmluYWwgVGFzayB0YXNrID0gdHYuZ2V0VGFzaygpOwogCiAgICAgICAgIC8vIFJlcG9ydCB0aGF0IHRoaXMgdGFza3MncyBkYXRhIGlzIG5vIGxvbmdlciBiZWluZyB1c2VkCiAgICAgICAgIFJlY2VudHMuZ2V0VGFza0xvYWRlcigpLnVubG9hZFRhc2tEYXRhKHRhc2spOwpAQCAtMTMxNiwxNCArMTMxNywxMyBAQAogICAgICAgICAvLyBVcGRhdGUgdGhlIHRhc2sgdmlld3MgbGlzdCBhZnRlciByZW1vdmluZyB0aGUgdGFzayB2aWV3CiAgICAgICAgIHVwZGF0ZVRhc2tWaWV3c0xpc3QoKTsKIAotICAgICAgICAvLyBSZXNldCB0aGUgdmlldyBwcm9wZXJ0aWVzCisgICAgICAgIC8vIFJlc2V0IHRoZSB2aWV3IHByb3BlcnRpZXMgYW5kIHZpZXcgc3RhdGUKICAgICAgICAgdHYucmVzZXRWaWV3UHJvcGVydGllcygpOwotCi0gICAgICAgIC8vIFJlc2V0IHRoZSBmb2N1c2VkIHZpZXcgc3RhdGUKICAgICAgICAgdHYuc2V0Rm9jdXNlZFN0YXRlKGZhbHNlLCBmYWxzZSAvKiBhbmltYXRlZCAqLywgZmFsc2UgLyogcmVxdWVzdFZpZXdGb2N1cyAqLyk7Ci0KLSAgICAgICAgLy8gUmVzZXQgdGhlIGNsaXAgc3RhdGUgb2YgdGhlIHRhc2sgdmlldwogICAgICAgICB0di5zZXRDbGlwVmlld0luU3RhY2soZmFsc2UpOworICAgICAgICBpZiAobVNjcmVlblBpbm5pbmdFbmFibGVkKSB7CisgICAgICAgICAgICB0di5oaWRlQWN0aW9uQnV0dG9uKCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBAT3ZlcnJpZGUKQEAgLTEzNjQsNiArMTM2NCwxMSBAQAogICAgICAgICBpZiAobUZvY3VzZWRUYXNrID09IHRhc2spIHsKICAgICAgICAgICAgIHR2LnNldEZvY3VzZWRTdGF0ZSh0cnVlLCBmYWxzZSAvKiBhbmltYXRlZCAqLywgZmFsc2UgLyogcmVxdWVzdFZpZXdGb2N1cyAqLyk7CiAgICAgICAgIH0KKworICAgICAgICAvLyBSZXN0b3JlIHRoZSBhY3Rpb24gYnV0dG9uIHZpc2liaWxpdHkgaWYgaXQgaXMgdGhlIGZyb250IG1vc3QgdGFzayB2aWV3CisgICAgICAgIGlmIChtU2NyZWVuUGlubmluZ0VuYWJsZWQgJiYgdHYuZ2V0VGFzaygpID09IG1TdGFjay5nZXRTdGFja0Zyb250TW9zdFRhc2soKSkgeworICAgICAgICAgICAgdHYuc2hvd0FjdGlvbkJ1dHRvbihmYWxzZSAvKiBmYWRlSW4gKi8sIDAgLyogZmFkZUluRHVyYXRpb24gKi8pOworICAgICAgICB9CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCkBAIC0xNDk1LDcgKzE1MDAsNiBAQAogICAgICAgICAgICAgICAgICghaXNGcmVlZm9ybVRhc2sgJiYgZXZlbnQuZHJvcFRhcmdldCA9PSBtRnJlZWZvcm1Xb3Jrc3BhY2VEcm9wVGFyZ2V0KSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgKGlzRnJlZWZvcm1UYXNrICYmIGV2ZW50LmRyb3BUYXJnZXQgPT0gbVN0YWNrRHJvcFRhcmdldCk7CiAKLSAgICAgICAgZXZlbnQucG9zdEFuaW1hdGlvblRyaWdnZXIuaW5jcmVtZW50KCk7CiAgICAgICAgIGlmIChoYXNDaGFuZ2VkU3RhY2tzKSB7CiAgICAgICAgICAgICAvLyBNb3ZlIHRoZSB0YXNrIHRvIHRoZSByaWdodCBwb3NpdGlvbiBpbiB0aGUgc3RhY2sgKGllLiB0aGUgZnJvbnQgb2YgdGhlIHN0YWNrIGlmCiAgICAgICAgICAgICAvLyBmcmVlZm9ybSBvciB0aGUgZnJvbnQgb2YgdGhlIHN0YWNrIGlmIGZ1bGxzY3JlZW4pLiAgTm90ZSwgd2UgTVVTVCBtb3ZlIHRoZSB0YXNrcwpAQCAtMTUwOCw3ICsxNTEyLDcgQEAKICAgICAgICAgICAgIHVwZGF0ZUxheW91dCh0cnVlKTsKIAogICAgICAgICAgICAgLy8gTW92ZSB0aGUgdGFzayB0byB0aGUgbmV3IHN0YWNrIGluIHRoZSBzeXN0ZW0gYWZ0ZXIgdGhlIGFuaW1hdGlvbiBjb21wbGV0ZXMKLSAgICAgICAgICAgIGV2ZW50LnBvc3RBbmltYXRpb25UcmlnZ2VyLmFkZExhc3REZWNyZW1lbnRSdW5uYWJsZShuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICBldmVudC5hZGRQb3N0QW5pbWF0aW9uQ2FsbGJhY2sobmV3IFJ1bm5hYmxlKCkgewogICAgICAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtU2VydmljZXNQcm94eSBzc3AgPSBSZWNlbnRzLmdldFN5c3RlbVNlcnZpY2VzKCk7CkBAIC0xNTE2LDggKzE1MjAsOCBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0pOwogICAgICAgICB9Ci0gICAgICAgIGV2ZW50LnRhc2tWaWV3LmFuaW1hdGUoKQotICAgICAgICAgICAgICAgIC53aXRoRW5kQWN0aW9uKGV2ZW50LnBvc3RBbmltYXRpb25UcmlnZ2VyLmRlY3JlbWVudEFzUnVubmFibGUoKSk7CisgICAgICAgIGV2ZW50LmdldEFuaW1hdGlvblRyaWdnZXIoKS5pbmNyZW1lbnQoKTsKKyAgICAgICAgZXZlbnQudGFza1ZpZXcuYW5pbWF0ZSgpLndpdGhFbmRBY3Rpb24oZXZlbnQuZ2V0QW5pbWF0aW9uVHJpZ2dlcigpLmRlY3JlbWVudEFzUnVubmFibGUoKSk7CiAKICAgICAgICAgLy8gV2UgdHJhbnNsYXRlZCB0aGUgdmlldyBidXQgd2UgbmVlZCB0byBhbmltYXRlIGl0IGJhY2sgZnJvbSB0aGUgY3VycmVudCBsYXlvdXQtc3BhY2UgcmVjdAogICAgICAgICAvLyB0byBpdHMgZmluYWwgbGF5b3V0LXNwYWNlIHJlY3QKQEAgLTE1NTcsNyArMTU2MSw3IEBACiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGFza1ZpZXdDb3VudDsgaSsrKSB7CiAgICAgICAgICAgICBUYXNrVmlldyB0diA9IHRhc2tWaWV3cy5nZXQoaSk7CiAgICAgICAgICAgICBUYXNrIHRhc2sgPSB0di5nZXRUYXNrKCk7Ci0gICAgICAgICAgICBpZiAoU3lzdGVtU2VydmljZXNQcm94eS5pc0ZyZWVmb3JtU3RhY2sodGFzay5rZXkuc3RhY2tJZCkpIHsKKyAgICAgICAgICAgIGlmICh0YXNrLmlzRnJlZWZvcm1UYXNrKCkpIHsKICAgICAgICAgICAgICAgICB0di5zZXRWaXNpYmlsaXR5KGV2ZW50LnZpc2libGUgPyBWaWV3LlZJU0lCTEUgOiBWaWV3LklOVklTSUJMRSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE1NzgsOSArMTU4Miw5IEBACiAgICAgICAgICAgICAgICAgICAgIC5zZXRVcGRhdGVMaXN0ZW5lcihudWxsKQogICAgICAgICAgICAgICAgICAgICAuc2V0TGlzdGVuZXIobnVsbCkKICAgICAgICAgICAgICAgICAgICAgLndpdGhMYXllcigpCi0gICAgICAgICAgICAgICAgICAgIC53aXRoRW5kQWN0aW9uKGV2ZW50LnBvc3RIaWRlU3RhY2tBbmltYXRpb25UcmlnZ2VyLmRlY3JlbWVudEFzUnVubmFibGUoKSkKKyAgICAgICAgICAgICAgICAgICAgLndpdGhFbmRBY3Rpb24oZXZlbnQuZ2V0QW5pbWF0aW9uVHJpZ2dlcigpLmRlY3JlbWVudEFzUnVubmFibGUoKSkKICAgICAgICAgICAgICAgICAgICAgLnN0YXJ0KCk7Ci0gICAgICAgICAgICBldmVudC5wb3N0SGlkZVN0YWNrQW5pbWF0aW9uVHJpZ2dlci5pbmNyZW1lbnQoKTsKKyAgICAgICAgICAgIGV2ZW50LmdldEFuaW1hdGlvblRyaWdnZXIoKS5pbmNyZW1lbnQoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTU5Myw3ICsxNTk3LDcgQEAKICAgICAgICAgaW50IHRhc2tWaWV3Q291bnQgPSB0YXNrVmlld3Muc2l6ZSgpOwogICAgICAgICBmb3IgKGludCBpID0gdGFza1ZpZXdDb3VudCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgICAgICBmaW5hbCBUYXNrVmlldyB0diA9IHRhc2tWaWV3cy5nZXQoaSk7Ci0gICAgICAgICAgICBldmVudC5wb3N0SGlkZUhpc3RvcnlBbmltYXRpb25UcmlnZ2VyLmFkZExhc3REZWNyZW1lbnRSdW5uYWJsZShuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICBldmVudC5hZGRQb3N0QW5pbWF0aW9uQ2FsbGJhY2sobmV3IFJ1bm5hYmxlKCkgewogICAgICAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKICAgICAgICAgICAgICAgICAgICAgdHYuYW5pbWF0ZSgpCkBAIC0xNjE3LDcgKzE2MjEsNyBAQAogCiAgICAgICAgIC8vIEFubm91bmNlIGZvciBhY2Nlc3NpYmlsaXR5CiAgICAgICAgIHR2LmFubm91bmNlRm9yQWNjZXNzaWJpbGl0eShnZXRDb250ZXh0KCkuZ2V0U3RyaW5nKAotICAgICAgICAgICAgICAgIFIuc3RyaW5nLmFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX2Rpc21pc3NlZCwgdHYuZ2V0VGFzaygpLmFjdGl2aXR5TGFiZWwpKTsKKyAgICAgICAgICAgICAgICBSLnN0cmluZy5hY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV9kaXNtaXNzZWQsIHR2LmdldFRhc2soKS50aXRsZSkpOwogCiAgICAgICAgIC8vIFJlbW92ZSB0aGUgdGFzayBmcm9tIHRoZSBzdGFjawogICAgICAgICBtU3RhY2sucmVtb3ZlVGFzayh0YXNrKTsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL3ZpZXdzL1Rhc2tWaWV3LmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy92aWV3cy9UYXNrVmlldy5qYXZhCmluZGV4IGRmN2I5YTYuLjE0OTA5YzUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL3ZpZXdzL1Rhc2tWaWV3LmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvdmlld3MvVGFza1ZpZXcuamF2YQpAQCAtMTM4LDYgKzEzOCw3IEBACiAgICAgICAgICAgICBzZXRCYWNrZ3JvdW5kKG5ldyBGYWtlU2hhZG93RHJhd2FibGUocmVzLCBjb25maWcpKTsKICAgICAgICAgfQogICAgICAgICBzZXRPdXRsaW5lUHJvdmlkZXIobVZpZXdCb3VuZHMpOworICAgICAgICBzZXRPbkxvbmdDbGlja0xpc3RlbmVyKHRoaXMpOwogICAgIH0KIAogICAgIC8qKiBTZXQgY2FsbGJhY2sgKi8KQEAgLTE3NSw4ICsxNzYsMTAgQEAKICAgICAgICAgICAgIHB1YmxpYyB2b2lkIGdldE91dGxpbmUoVmlldyB2aWV3LCBPdXRsaW5lIG91dGxpbmUpIHsKICAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIG91dGxpbmUgdG8gbWF0Y2ggdGhlIEZBQiBiYWNrZ3JvdW5kCiAgICAgICAgICAgICAgICAgb3V0bGluZS5zZXRPdmFsKDAsIDAsIG1BY3Rpb25CdXR0b25WaWV3LmdldFdpZHRoKCksIG1BY3Rpb25CdXR0b25WaWV3LmdldEhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICBvdXRsaW5lLnNldEFscGhhKDAuMzVmKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSk7CisgICAgICAgIG1BY3Rpb25CdXR0b25WaWV3LnNldE9uQ2xpY2tMaXN0ZW5lcih0aGlzKTsKICAgICAgICAgbUFjdGlvbkJ1dHRvblRyYW5zbGF0aW9uWiA9IG1BY3Rpb25CdXR0b25WaWV3LmdldFRyYW5zbGF0aW9uWigpOwogICAgIH0KIApAQCAtMjkzLDggKzI5Niw4IEBACiAKICAgICAvKiogUHJlcGFyZXMgdGhpcyB0YXNrIHZpZXcgZm9yIHRoZSBlbnRlci1yZWNlbnRzIGFuaW1hdGlvbnMuICBUaGlzIGlzIGNhbGxlZCBlYXJsaWVyIGluIHRoZQogICAgICAqIGZpcnN0IGxheW91dCBiZWNhdXNlIHRoZSBhY3R1YWwgYW5pbWF0aW9uIGludG8gcmVjZW50cyBtYXkgdGFrZSBhIGxvbmcgdGltZS4gKi8KLSAgICB2b2lkIHByZXBhcmVFbnRlclJlY2VudHNBbmltYXRpb24oYm9vbGVhbiBpc1Rhc2tWaWV3TGF1bmNoVGFyZ2V0VGFzaywgYm9vbGVhbiBoaWRlVGFzaywKLSAgICAgICAgICAgIGJvb2xlYW4gb2NjbHVkZXNMYXVuY2hUYXJnZXQsIGludCBvZmZzY3JlZW5ZKSB7CisgICAgdm9pZCBwcmVwYXJlRW50ZXJSZWNlbnRzQW5pbWF0aW9uKGJvb2xlYW4gaGlkZVRhc2ssIGJvb2xlYW4gb2NjbHVkZXNMYXVuY2hUYXJnZXQsCisgICAgICAgICAgICBpbnQgb2Zmc2NyZWVuWSkgewogICAgICAgICBSZWNlbnRzQ29uZmlndXJhdGlvbiBjb25maWcgPSBSZWNlbnRzLmdldENvbmZpZ3VyYXRpb24oKTsKICAgICAgICAgUmVjZW50c0FjdGl2aXR5TGF1bmNoU3RhdGUgbGF1bmNoU3RhdGUgPSBjb25maWcuZ2V0TGF1bmNoU3RhdGUoKTsKICAgICAgICAgaW50IGluaXRpYWxEaW0gPSBnZXREaW0oKTsKQEAgLTMwMyw3ICszMDYsNyBAQAogICAgICAgICB9IGVsc2UgaWYgKGxhdW5jaFN0YXRlLmxhdW5jaGVkSGFzQ29uZmlndXJhdGlvbkNoYW5nZWQpIHsKICAgICAgICAgICAgIC8vIEp1c3QgbG9hZCB0aGUgdmlld3MgYXMtaXMKICAgICAgICAgfSBlbHNlIGlmIChsYXVuY2hTdGF0ZS5sYXVuY2hlZEZyb21BcHBXaXRoVGh1bWJuYWlsKSB7Ci0gICAgICAgICAgICBpZiAoaXNUYXNrVmlld0xhdW5jaFRhcmdldFRhc2spIHsKKyAgICAgICAgICAgIGlmIChtVGFzay5pc0xhdW5jaFRhcmdldCkgewogICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgZGltIHRvIDAgc28gd2UgY2FuIGFuaW1hdGUgaXQgaW4KICAgICAgICAgICAgICAgICBpbml0aWFsRGltID0gMDsKICAgICAgICAgICAgICAgICAvLyBIaWRlIHRoZSBhY3Rpb24gYnV0dG9uCkBAIC0zNDIsMTEgKzM0NSwxNSBAQAogICAgICAgICBpZiAobGF1bmNoU3RhdGUubGF1bmNoZWRGcm9tQXBwV2l0aFRodW1ibmFpbCkgewogICAgICAgICAgICAgaWYgKG1UYXNrLmlzTGF1bmNoVGFyZ2V0KSB7CiAgICAgICAgICAgICAgICAgY3R4LnBvc3RBbmltYXRpb25UcmlnZ2VyLmluY3JlbWVudCgpOwotICAgICAgICAgICAgICAgIC8vIEltbWVkaWF0ZWx5IHN0YXJ0IHRoZSBkaW0gYW5pbWF0aW9uCisgICAgICAgICAgICAgICAgLy8gU3RhcnQgdGhlIGRpbSBhbmltYXRpb24KICAgICAgICAgICAgICAgICBhbmltYXRlRGltVG9Qcm9ncmVzcyh0YXNrVmlld0VudGVyRnJvbUFwcER1cmF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnBvc3RBbmltYXRpb25UcmlnZ2VyLmRlY3JlbWVudE9uQW5pbWF0aW9uRW5kKCkpOwotICAgICAgICAgICAgICAgIC8vIEFuaW1hdGUgdGhlIGFjdGlvbiBidXR0b24gaW4KLSAgICAgICAgICAgICAgICBmYWRlSW5BY3Rpb25CdXR0b24odGFza1ZpZXdFbnRlckZyb21BcHBEdXJhdGlvbik7CisKKyAgICAgICAgICAgICAgICAvLyBTdGFydCB0aGUgYWN0aW9uIGJ1dHRvbiBhbmltYXRpb24KKyAgICAgICAgICAgICAgICBpZiAoY3R4LmlzU2NyZWVuUGlubmluZ0VuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgc2hvd0FjdGlvbkJ1dHRvbih0cnVlIC8qIGZhZGVJbiAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrVmlld0VudGVyRnJvbUFwcER1cmF0aW9uIC8qIGZhZGVJbkR1cmF0aW9uICovKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIEFuaW1hdGUgdGhlIHRhc2sgdXAgaWYgaXQgd2FzIG9jY2x1ZGluZyB0aGUgbGF1bmNoIHRhcmdldAogICAgICAgICAgICAgICAgIGlmIChjdHguY3VycmVudFRhc2tPY2NsdWRlc0xhdW5jaFRhcmdldCkgewpAQCAtNDEzLDE3ICs0MjAsNiBAQAogICAgICAgICBhbmltYXRlKCkuY2FuY2VsKCk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZmFkZUluQWN0aW9uQnV0dG9uKGludCBkdXJhdGlvbikgewotICAgICAgICAvLyBIaWRlIHRoZSBhY3Rpb24gYnV0dG9uCi0gICAgICAgIG1BY3Rpb25CdXR0b25WaWV3LnNldEFscGhhKDBmKTsKLQotICAgICAgICAvLyBBbmltYXRlIHRoZSBhY3Rpb24gYnV0dG9uIGluCi0gICAgICAgIG1BY3Rpb25CdXR0b25WaWV3LmFuaW1hdGUoKS5hbHBoYSgxZikKLSAgICAgICAgICAgICAgICAuc2V0RHVyYXRpb24oZHVyYXRpb24pCi0gICAgICAgICAgICAgICAgLnNldEludGVycG9sYXRvcihQaG9uZVN0YXR1c0Jhci5BTFBIQV9JTikKLSAgICAgICAgICAgICAgICAuc3RhcnQoKTsKLSAgICB9Ci0KICAgICAvKiogQW5pbWF0ZXMgdGhpcyB0YXNrIHZpZXcgYXMgaXQgbGVhdmVzIHJlY2VudHMgYnkgcHJlc3NpbmcgaG9tZS4gKi8KICAgICB2b2lkIHN0YXJ0RXhpdFRvSG9tZUFuaW1hdGlvbihWaWV3QW5pbWF0aW9uLlRhc2tWaWV3RXhpdENvbnRleHQgY3R4KSB7CiAgICAgICAgIGludCB0YXNrVmlld0V4aXRUb0hvbWVEdXJhdGlvbiA9IGdldFJlc291cmNlcygpLmdldEludGVnZXIoCkBAIC00NjgsOCArNDY0LDkgQEAKICAgICAgICAgICAgICAgICAgICAgLmFscGhhKDBmKQogICAgICAgICAgICAgICAgICAgICAuc2V0U3RhcnREZWxheSgwKQogICAgICAgICAgICAgICAgICAgICAuc2V0RHVyYXRpb24odGFza1ZpZXdFeGl0VG9BcHBEdXJhdGlvbikKLSAgICAgICAgICAgICAgICAgICAgLnNldEludGVycG9sYXRvcihtRmFzdE91dExpbmVhckluSW50ZXJwb2xhdG9yKQorICAgICAgICAgICAgICAgICAgICAuc2V0SW50ZXJwb2xhdG9yKFBob25lU3RhdHVzQmFyLkFMUEhBX09VVCkKICAgICAgICAgICAgICAgICAgICAgLndpdGhFbmRBY3Rpb24ocG9zdEFuaW1SdW5uYWJsZSkKKyAgICAgICAgICAgICAgICAgICAgLndpdGhMYXllcigpCiAgICAgICAgICAgICAgICAgICAgIC5zdGFydCgpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gSGlkZSB0aGUgZGlzbWlzcyBidXR0b24KQEAgLTY0NCwxNCArNjQxLDEyIEBACiAgICAgICAgIHNldERpbShnZXREaW1Gcm9tVGFza1Byb2dyZXNzKCkpOwogICAgIH0KIAotICAgIC8qKioqIFZpZXcgZm9jdXMgc3RhdGUgKioqKi8KLQogICAgIC8qKgogICAgICAqIEV4cGxpY2l0bHkgc2V0cyB0aGUgZm9jdXNlZCBzdGF0ZSBvZiB0aGlzIHRhc2suCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Rm9jdXNlZFN0YXRlKGJvb2xlYW4gaXNGb2N1c2VkLCBib29sZWFuIGFuaW1hdGVkLCBib29sZWFuIHJlcXVlc3RWaWV3Rm9jdXMpIHsKICAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICBMb2cuZChUQUcsICJzZXRGb2N1c2VkU3RhdGU6ICIgKyBtVGFzay5hY3Rpdml0eUxhYmVsICsgIiBmb2N1c2VkOiAiICsgaXNGb2N1c2VkICsKKyAgICAgICAgICAgIExvZy5kKFRBRywgInNldEZvY3VzZWRTdGF0ZTogIiArIG1UYXNrLnRpdGxlICsgIiBmb2N1c2VkOiAiICsgaXNGb2N1c2VkICsKICAgICAgICAgICAgICAgICAgICAgIiBhbmltYXRlZDogIiArIGFuaW1hdGVkICsgIiByZXF1ZXN0Vmlld0ZvY3VzOiAiICsgcmVxdWVzdFZpZXdGb2N1cyArCiAgICAgICAgICAgICAgICAgICAgICIgaXNGb2N1c2VkKCk6ICIgKyBpc0ZvY3VzZWQoKSArCiAgICAgICAgICAgICAgICAgICAgICIgaXNBY2Nlc3NpYmlsaXR5Rm9jdXNlZCgpOiAiICsgaXNBY2Nlc3NpYmlsaXR5Rm9jdXNlZCgpKTsKQEAgLTY3MiwxOSArNjY3LDQyIEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICAvKioKKyAgICAgKiBTaG93cyB0aGUgYWN0aW9uIGJ1dHRvbi4KKyAgICAgKiBAcGFyYW0gZmFkZUluIHdoZXRoZXIgb3Igbm90IHRvIGFuaW1hdGUgdGhlIGFjdGlvbiBidXR0b24gaW4uCisgICAgICogQHBhcmFtIGZhZGVJbkR1cmF0aW9uIHRoZSBkdXJhdGlvbiBvZiB0aGUgYWN0aW9uIGJ1dHRvbiBhbmltYXRpb24sIG9ubHkgdXNlZCBpZgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICB7QHBhcmFtIGZhZGVJbn0gaXMgdHJ1ZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzaG93QWN0aW9uQnV0dG9uKGJvb2xlYW4gZmFkZUluLCBpbnQgZmFkZUluRHVyYXRpb24pIHsKKyAgICAgICAgbUFjdGlvbkJ1dHRvblZpZXcuc2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpOworCisgICAgICAgIGlmIChmYWRlSW4pIHsKKyAgICAgICAgICAgIGlmIChtQWN0aW9uQnV0dG9uVmlldy5nZXRBbHBoYSgpIDwgMWYpIHsKKyAgICAgICAgICAgICAgICBtQWN0aW9uQnV0dG9uVmlldy5zZXRBbHBoYSgwZik7CisgICAgICAgICAgICAgICAgbUFjdGlvbkJ1dHRvblZpZXcuYW5pbWF0ZSgpLmFscGhhKDFmKQorICAgICAgICAgICAgICAgICAgICAgICAgLnNldER1cmF0aW9uKGZhZGVJbkR1cmF0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgLnNldEludGVycG9sYXRvcihQaG9uZVN0YXR1c0Jhci5BTFBIQV9JTikKKyAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoTGF5ZXIoKQorICAgICAgICAgICAgICAgICAgICAgICAgLnN0YXJ0KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtQWN0aW9uQnV0dG9uVmlldy5zZXRBbHBoYSgxZik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBJbW1lZGlhdGVseSBoaWRlcyB0aGUgYWN0aW9uIGJ1dHRvbi4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBoaWRlQWN0aW9uQnV0dG9uKCkgeworICAgICAgICBtQWN0aW9uQnV0dG9uVmlldy5zZXRWaXNpYmlsaXR5KFZpZXcuSU5WSVNJQkxFKTsKKyAgICB9CisKICAgICAvKioqKiBUYXNrQ2FsbGJhY2tzIEltcGxlbWVudGF0aW9uICoqKiovCiAKICAgICAvKiogQmluZHMgdGhpcyB0YXNrIHZpZXcgdG8gdGhlIHRhc2sgKi8KICAgICBwdWJsaWMgdm9pZCBvblRhc2tCb3VuZChUYXNrIHQpIHsKICAgICAgICAgbVRhc2sgPSB0OwogICAgICAgICBtVGFzay5hZGRDYWxsYmFjayh0aGlzKTsKLQotICAgICAgICAvLyBIaWRlIHRoZSBhY3Rpb24gYnV0dG9uIGlmIGxvY2sgdG8gYXBwIGlzIGRpc2FibGVkIGZvciB0aGlzIHZpZXcKLSAgICAgICAgaW50IGxvY2tCdXR0b25WaXNpYmlsaXR5ID0gKCF0LmxvY2tUb1Rhc2tFbmFibGVkIHx8ICF0LmxvY2tUb1RoaXNUYXNrKSA/IEdPTkUgOiBWSVNJQkxFOwotICAgICAgICBpZiAobUFjdGlvbkJ1dHRvblZpZXcuZ2V0VmlzaWJpbGl0eSgpICE9IGxvY2tCdXR0b25WaXNpYmlsaXR5KSB7Ci0gICAgICAgICAgICBtQWN0aW9uQnV0dG9uVmlldy5zZXRWaXNpYmlsaXR5KGxvY2tCdXR0b25WaXNpYmlsaXR5KTsKLSAgICAgICAgICAgIHJlcXVlc3RMYXlvdXQoKTsKLSAgICAgICAgfQogICAgIH0KIAogICAgIEBPdmVycmlkZQpAQCAtNjkzLDEwICs3MTEsNiBAQAogICAgICAgICAgICAgLy8gQmluZCBlYWNoIG9mIHRoZSB2aWV3cyB0byB0aGUgbmV3IHRhc2sgZGF0YQogICAgICAgICAgICAgbVRodW1ibmFpbFZpZXcucmViaW5kVG9UYXNrKG1UYXNrKTsKICAgICAgICAgICAgIG1IZWFkZXJWaWV3LnJlYmluZFRvVGFzayhtVGFzayk7Ci0KLSAgICAgICAgICAgIC8vIFJlYmluZCBhbnkgbGlzdGVuZXJzCi0gICAgICAgICAgICBtQWN0aW9uQnV0dG9uVmlldy5zZXRPbkNsaWNrTGlzdGVuZXIodGhpcyk7Ci0gICAgICAgICAgICBzZXRPbkxvbmdDbGlja0xpc3RlbmVyKHRoaXMpOwogICAgICAgICB9CiAgICAgICAgIG1UYXNrRGF0YUxvYWRlZCA9IHRydWU7CiAgICAgfQpAQCAtNzA4LDggKzcyMiw2IEBACiAgICAgICAgICAgICBtVGFzay5yZW1vdmVDYWxsYmFjayh0aGlzKTsKICAgICAgICAgICAgIG1UaHVtYm5haWxWaWV3LnVuYmluZEZyb21UYXNrKCk7CiAgICAgICAgICAgICBtSGVhZGVyVmlldy51bmJpbmRGcm9tVGFzaygpOwotICAgICAgICAgICAgLy8gVW5iaW5kIGFueSBsaXN0ZW5lcnMKLSAgICAgICAgICAgIG1BY3Rpb25CdXR0b25WaWV3LnNldE9uQ2xpY2tMaXN0ZW5lcihudWxsKTsKICAgICAgICAgfQogICAgICAgICBtVGFza0RhdGFMb2FkZWQgPSBmYWxzZTsKICAgICB9CkBAIC03NzEsNyArNzgzLDcgQEAKIAogICAgIHB1YmxpYyBmaW5hbCB2b2lkIG9uQnVzRXZlbnQoRHJhZ0VuZEV2ZW50IGV2ZW50KSB7CiAgICAgICAgIGlmICghKGV2ZW50LmRyb3BUYXJnZXQgaW5zdGFuY2VvZiBUYXNrU3RhY2suRG9ja1N0YXRlKSkgewotICAgICAgICAgICAgZXZlbnQucG9zdEFuaW1hdGlvblRyaWdnZXIuYWRkTGFzdERlY3JlbWVudFJ1bm5hYmxlKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgIGV2ZW50LmFkZFBvc3RBbmltYXRpb25DYWxsYmFjayhuZXcgUnVubmFibGUoKSB7CiAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewogICAgICAgICAgICAgICAgICAgICAvLyBBbmltYXRlIHRoZSBkcmFnIHZpZXcgYmFjayBmcm9tIHdoZXJlIGl0IGlzLCB0byB0aGUgdmlldyBsb2NhdGlvbiwgdGhlbiBhZnRlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvdmlld3MvVGFza1ZpZXdIZWFkZXIuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL3ZpZXdzL1Rhc2tWaWV3SGVhZGVyLmphdmEKaW5kZXggMDI3MWNjZC4uOWEyZmZlNyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvdmlld3MvVGFza1ZpZXdIZWFkZXIuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy92aWV3cy9UYXNrVmlld0hlYWRlci5qYXZhCkBAIC02MCw4ICs2MCw4IEBACiAgICAgLy8gSGVhZGVyIHZpZXdzCiAgICAgSW1hZ2VWaWV3IG1Nb3ZlVGFza0J1dHRvbjsKICAgICBJbWFnZVZpZXcgbURpc21pc3NCdXR0b247Ci0gICAgSW1hZ2VWaWV3IG1BcHBsaWNhdGlvbkljb247Ci0gICAgVGV4dFZpZXcgbUFjdGl2aXR5RGVzY3JpcHRpb247CisgICAgSW1hZ2VWaWV3IG1JY29uVmlldzsKKyAgICBUZXh0VmlldyBtVGl0bGVWaWV3OwogICAgIGludCBtTW92ZVRhc2tUYXJnZXRTdGFja0lkID0gSU5WQUxJRF9TVEFDS19JRDsKIAogICAgIC8vIEhlYWRlciBkcmF3YWJsZXMKQEAgLTEyOCwxNiArMTI4LDE2IEBACiAgICAgQE92ZXJyaWRlCiAgICAgcHJvdGVjdGVkIHZvaWQgb25GaW5pc2hJbmZsYXRlKCkgewogICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBpY29uIGFuZCBkZXNjcmlwdGlvbiB2aWV3cwotICAgICAgICBtQXBwbGljYXRpb25JY29uID0gKEltYWdlVmlldykgZmluZFZpZXdCeUlkKFIuaWQuYXBwbGljYXRpb25faWNvbik7Ci0gICAgICAgIG1BcHBsaWNhdGlvbkljb24uc2V0T25Mb25nQ2xpY2tMaXN0ZW5lcih0aGlzKTsKLSAgICAgICAgbUFjdGl2aXR5RGVzY3JpcHRpb24gPSAoVGV4dFZpZXcpIGZpbmRWaWV3QnlJZChSLmlkLmFjdGl2aXR5X2Rlc2NyaXB0aW9uKTsKKyAgICAgICAgbUljb25WaWV3ID0gKEltYWdlVmlldykgZmluZFZpZXdCeUlkKFIuaWQuaWNvbik7CisgICAgICAgIG1JY29uVmlldy5zZXRPbkxvbmdDbGlja0xpc3RlbmVyKHRoaXMpOworICAgICAgICBtVGl0bGVWaWV3ID0gKFRleHRWaWV3KSBmaW5kVmlld0J5SWQoUi5pZC50aXRsZSk7CiAgICAgICAgIG1EaXNtaXNzQnV0dG9uID0gKEltYWdlVmlldykgZmluZFZpZXdCeUlkKFIuaWQuZGlzbWlzc190YXNrKTsKICAgICAgICAgbURpc21pc3NCdXR0b24uc2V0T25DbGlja0xpc3RlbmVyKHRoaXMpOwogICAgICAgICBtTW92ZVRhc2tCdXR0b24gPSAoSW1hZ2VWaWV3KSBmaW5kVmlld0J5SWQoUi5pZC5tb3ZlX3Rhc2spOwogCiAgICAgICAgIC8vIEhpZGUgdGhlIGJhY2tncm91bmRzIGlmIHRoZXkgYXJlIHJpcHBsZSBkcmF3YWJsZXMKLSAgICAgICAgaWYgKG1BcHBsaWNhdGlvbkljb24uZ2V0QmFja2dyb3VuZCgpIGluc3RhbmNlb2YgUmlwcGxlRHJhd2FibGUpIHsKLSAgICAgICAgICAgIG1BcHBsaWNhdGlvbkljb24uc2V0QmFja2dyb3VuZChudWxsKTsKKyAgICAgICAgaWYgKG1JY29uVmlldy5nZXRCYWNrZ3JvdW5kKCkgaW5zdGFuY2VvZiBSaXBwbGVEcmF3YWJsZSkgeworICAgICAgICAgICAgbUljb25WaWV3LnNldEJhY2tncm91bmQobnVsbCk7CiAgICAgICAgIH0KIAogICAgICAgICBtQmFja2dyb3VuZENvbG9yRHJhd2FibGUgPSAoR3JhZGllbnREcmF3YWJsZSkgZ2V0Q29udGV4dCgpLmdldERyYXdhYmxlKApAQCAtMTU4LDggKzE1OCw4IEBACiAgICAgcHVibGljIHZvaWQgb25UYXNrVmlld1NpemVDaGFuZ2VkKGludCB3aWR0aCwgaW50IGhlaWdodCkgewogICAgICAgICBtVGFza1ZpZXdSZWN0LnNldCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgICAgYm9vbGVhbiB1cGRhdGVNb3ZlVGFza0J1dHRvbiA9IG1Nb3ZlVGFza0J1dHRvbi5nZXRWaXNpYmlsaXR5KCkgIT0gVmlldy5HT05FOwotICAgICAgICBpbnQgYXBwSWNvbldpZHRoID0gbUFwcGxpY2F0aW9uSWNvbi5nZXRNZWFzdXJlZFdpZHRoKCk7Ci0gICAgICAgIGludCBhY3Rpdml0eURlc2NXaWR0aCA9IG1BY3Rpdml0eURlc2NyaXB0aW9uLmdldE1lYXN1cmVkV2lkdGgoKTsKKyAgICAgICAgaW50IGFwcEljb25XaWR0aCA9IG1JY29uVmlldy5nZXRNZWFzdXJlZFdpZHRoKCk7CisgICAgICAgIGludCBhY3Rpdml0eURlc2NXaWR0aCA9IG1UaXRsZVZpZXcuZ2V0TWVhc3VyZWRXaWR0aCgpOwogICAgICAgICBpbnQgZGlzbWlzc0ljb25XaWR0aCA9IG1EaXNtaXNzQnV0dG9uLmdldE1lYXN1cmVkV2lkdGgoKTsKICAgICAgICAgaW50IG1vdmVUYXNrSWNvbldpZHRoID0gbU1vdmVUYXNrQnV0dG9uLmdldFZpc2liaWxpdHkoKSA9PSBWaWV3LlZJU0lCTEUKICAgICAgICAgICAgICAgICA/IG1Nb3ZlVGFza0J1dHRvbi5nZXRNZWFzdXJlZFdpZHRoKCkKQEAgLTE2OCwyNiArMTY4LDI2IEBACiAgICAgICAgIC8vIFByaW9yaXR5LXdpc2UsIHdlIHNob3cgdGhlIGFjdGl2aXR5IGljb24gZmlyc3QsIHRoZSBkaXNtaXNzIGljb24gaWYgdGhlcmUgaXMgcm9vbSwgdGhlCiAgICAgICAgIC8vIG1vdmUtdGFzayBpY29uIGlmIHRoZXJlIGlzIHJvb20sIGFuZCB0aGVuIGZpbmFsbHksIHRoZSBhY3Rpdml0eSBsYWJlbCBpZiB0aGVyZSBpcyByb29tCiAgICAgICAgIGlmICh3aWR0aCA8IChhcHBJY29uV2lkdGggKyBkaXNtaXNzSWNvbldpZHRoKSkgewotICAgICAgICAgICAgbUFjdGl2aXR5RGVzY3JpcHRpb24uc2V0VmlzaWJpbGl0eShWaWV3LklOVklTSUJMRSk7CisgICAgICAgICAgICBtVGl0bGVWaWV3LnNldFZpc2liaWxpdHkoVmlldy5JTlZJU0lCTEUpOwogICAgICAgICAgICAgaWYgKHVwZGF0ZU1vdmVUYXNrQnV0dG9uKSB7CiAgICAgICAgICAgICAgICAgbU1vdmVUYXNrQnV0dG9uLnNldFZpc2liaWxpdHkoVmlldy5JTlZJU0lCTEUpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbURpc21pc3NCdXR0b24uc2V0VmlzaWJpbGl0eShWaWV3LklOVklTSUJMRSk7CiAgICAgICAgIH0gZWxzZSBpZiAod2lkdGggPCAoYXBwSWNvbldpZHRoICsgZGlzbWlzc0ljb25XaWR0aCArIG1vdmVUYXNrSWNvbldpZHRoKSkgewotICAgICAgICAgICAgbUFjdGl2aXR5RGVzY3JpcHRpb24uc2V0VmlzaWJpbGl0eShWaWV3LklOVklTSUJMRSk7CisgICAgICAgICAgICBtVGl0bGVWaWV3LnNldFZpc2liaWxpdHkoVmlldy5JTlZJU0lCTEUpOwogICAgICAgICAgICAgaWYgKHVwZGF0ZU1vdmVUYXNrQnV0dG9uKSB7CiAgICAgICAgICAgICAgICAgbU1vdmVUYXNrQnV0dG9uLnNldFZpc2liaWxpdHkoVmlldy5JTlZJU0lCTEUpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbURpc21pc3NCdXR0b24uc2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpOwogICAgICAgICB9IGVsc2UgaWYgKHdpZHRoIDwgKGFwcEljb25XaWR0aCArIGRpc21pc3NJY29uV2lkdGggKyBtb3ZlVGFza0ljb25XaWR0aCArCiAgICAgICAgICAgICAgICAgYWN0aXZpdHlEZXNjV2lkdGgpKSB7Ci0gICAgICAgICAgICBtQWN0aXZpdHlEZXNjcmlwdGlvbi5zZXRWaXNpYmlsaXR5KFZpZXcuSU5WSVNJQkxFKTsKKyAgICAgICAgICAgIG1UaXRsZVZpZXcuc2V0VmlzaWJpbGl0eShWaWV3LklOVklTSUJMRSk7CiAgICAgICAgICAgICBpZiAodXBkYXRlTW92ZVRhc2tCdXR0b24pIHsKICAgICAgICAgICAgICAgICBtTW92ZVRhc2tCdXR0b24uc2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbURpc21pc3NCdXR0b24uc2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbUFjdGl2aXR5RGVzY3JpcHRpb24uc2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpOworICAgICAgICAgICAgbVRpdGxlVmlldy5zZXRWaXNpYmlsaXR5KFZpZXcuVklTSUJMRSk7CiAgICAgICAgICAgICBpZiAodXBkYXRlTW92ZVRhc2tCdXR0b24pIHsKICAgICAgICAgICAgICAgICBtTW92ZVRhc2tCdXR0b24uc2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpOwogICAgICAgICAgICAgfQpAQCAtMjMzLDE1ICsyMzMsMTMgQEAKIAogICAgICAgICAvLyBJZiBhbiBhY3Rpdml0eSBpY29uIGlzIGRlZmluZWQsIHRoZW4gd2UgdXNlIHRoYXQgYXMgdGhlIHByaW1hcnkgaWNvbiB0byBzaG93IGluIHRoZSBiYXIsCiAgICAgICAgIC8vIG90aGVyd2lzZSwgd2UgZmFsbCBiYWNrIHRvIHRoZSBhcHBsaWNhdGlvbiBpY29uCi0gICAgICAgIGlmICh0LmFjdGl2aXR5SWNvbiAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtQXBwbGljYXRpb25JY29uLnNldEltYWdlRHJhd2FibGUodC5hY3Rpdml0eUljb24pOwotICAgICAgICB9IGVsc2UgaWYgKHQuYXBwbGljYXRpb25JY29uICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1BcHBsaWNhdGlvbkljb24uc2V0SW1hZ2VEcmF3YWJsZSh0LmFwcGxpY2F0aW9uSWNvbik7CisgICAgICAgIGlmICh0Lmljb24gIT0gbnVsbCkgeworICAgICAgICAgICAgbUljb25WaWV3LnNldEltYWdlRHJhd2FibGUodC5pY29uKTsKICAgICAgICAgfQotICAgICAgICBpZiAoIW1BY3Rpdml0eURlc2NyaXB0aW9uLmdldFRleHQoKS50b1N0cmluZygpLmVxdWFscyh0LmFjdGl2aXR5TGFiZWwpKSB7Ci0gICAgICAgICAgICBtQWN0aXZpdHlEZXNjcmlwdGlvbi5zZXRUZXh0KHQuYWN0aXZpdHlMYWJlbCk7CisgICAgICAgIGlmICghbVRpdGxlVmlldy5nZXRUZXh0KCkudG9TdHJpbmcoKS5lcXVhbHModC50aXRsZSkpIHsKKyAgICAgICAgICAgIG1UaXRsZVZpZXcuc2V0VGV4dCh0LnRpdGxlKTsKICAgICAgICAgfQotICAgICAgICBtQWN0aXZpdHlEZXNjcmlwdGlvbi5zZXRDb250ZW50RGVzY3JpcHRpb24odC5jb250ZW50RGVzY3JpcHRpb24pOworICAgICAgICBtVGl0bGVWaWV3LnNldENvbnRlbnREZXNjcmlwdGlvbih0LmNvbnRlbnREZXNjcmlwdGlvbik7CiAKICAgICAgICAgLy8gVHJ5IGFuZCBhcHBseSB0aGUgc3lzdGVtIHVpIHRpbnQKICAgICAgICAgaW50IGV4aXN0aW5nQmdDb2xvciA9IChnZXRCYWNrZ3JvdW5kKCkgaW5zdGFuY2VvZiBDb2xvckRyYXdhYmxlKSA/CkBAIC0yNTQsNyArMjUyLDcgQEAKICAgICAgICAgICAgICAgICBSLmNvbG9yLnJlY2VudHNfdGFza19iYXJfbGlnaHRfdGV4dF9jb2xvcik7CiAgICAgICAgIGludCB0YXNrQmFyVmlld0RhcmtUZXh0Q29sb3IgPSBnZXRSZXNvdXJjZXMoKS5nZXRDb2xvcigKICAgICAgICAgICAgICAgICBSLmNvbG9yLnJlY2VudHNfdGFza19iYXJfZGFya190ZXh0X2NvbG9yKTsKLSAgICAgICAgbUFjdGl2aXR5RGVzY3JpcHRpb24uc2V0VGV4dENvbG9yKHQudXNlTGlnaHRPblByaW1hcnlDb2xvciA/CisgICAgICAgIG1UaXRsZVZpZXcuc2V0VGV4dENvbG9yKHQudXNlTGlnaHRPblByaW1hcnlDb2xvciA/CiAgICAgICAgICAgICAgICAgdGFza0JhclZpZXdMaWdodFRleHRDb2xvciA6IHRhc2tCYXJWaWV3RGFya1RleHRDb2xvcik7CiAgICAgICAgIG1EaXNtaXNzQnV0dG9uLnNldEltYWdlRHJhd2FibGUodC51c2VMaWdodE9uUHJpbWFyeUNvbG9yID8KICAgICAgICAgICAgICAgICBtTGlnaHREaXNtaXNzRHJhd2FibGUgOiBtRGFya0Rpc21pc3NEcmF3YWJsZSk7CkBAIC0yODEsMTUgKzI3OSwxNSBAQAogCiAgICAgICAgIC8vIEluIGFjY2Vzc2liaWxpdHksIGEgc2luZ2xlIGNsaWNrIG9uIHRoZSBmb2N1c2VkIGFwcCBpbmZvIGJ1dHRvbiB3aWxsIHNob3cgaXQKICAgICAgICAgaWYgKHNzcC5pc1RvdWNoRXhwbG9yYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgICAgIG1BcHBsaWNhdGlvbkljb24uc2V0T25DbGlja0xpc3RlbmVyKHRoaXMpOworICAgICAgICAgICAgbUljb25WaWV3LnNldE9uQ2xpY2tMaXN0ZW5lcih0aGlzKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIC8qKiBVbmJpbmRzIHRoZSBiYXIgdmlldyBmcm9tIHRoZSB0YXNrICovCiAgICAgdm9pZCB1bmJpbmRGcm9tVGFzaygpIHsKICAgICAgICAgbVRhc2sgPSBudWxsOwotICAgICAgICBtQXBwbGljYXRpb25JY29uLnNldEltYWdlRHJhd2FibGUobnVsbCk7Ci0gICAgICAgIG1BcHBsaWNhdGlvbkljb24uc2V0T25DbGlja0xpc3RlbmVyKG51bGwpOworICAgICAgICBtSWNvblZpZXcuc2V0SW1hZ2VEcmF3YWJsZShudWxsKTsKKyAgICAgICAgbUljb25WaWV3LnNldE9uQ2xpY2tMaXN0ZW5lcihudWxsKTsKICAgICAgICAgbU1vdmVUYXNrQnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihudWxsKTsKICAgICB9CiAKQEAgLTM1Nyw3ICszNTUsNyBAQAogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKLSAgICAgICAgaWYgKHYgPT0gbUFwcGxpY2F0aW9uSWNvbikgeworICAgICAgICBpZiAodiA9PSBtSWNvblZpZXcpIHsKICAgICAgICAgICAgIC8vIEluIGFjY2Vzc2liaWxpdHksIGEgc2luZ2xlIGNsaWNrIG9uIHRoZSBmb2N1c2VkIGFwcCBpbmZvIGJ1dHRvbiB3aWxsIHNob3cgaXQKICAgICAgICAgICAgIEV2ZW50QnVzLmdldERlZmF1bHQoKS5zZW5kKG5ldyBTaG93QXBwbGljYXRpb25JbmZvRXZlbnQobVRhc2spKTsKICAgICAgICAgfSBlbHNlIGlmICh2ID09IG1EaXNtaXNzQnV0dG9uKSB7CkBAIC0zNzksNyArMzc3LDcgQEAKIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBib29sZWFuIG9uTG9uZ0NsaWNrKFZpZXcgdikgewotICAgICAgICBpZiAodiA9PSBtQXBwbGljYXRpb25JY29uKSB7CisgICAgICAgIGlmICh2ID09IG1JY29uVmlldykgewogICAgICAgICAgICAgRXZlbnRCdXMuZ2V0RGVmYXVsdCgpLnNlbmQobmV3IFNob3dBcHBsaWNhdGlvbkluZm9FdmVudChtVGFzaykpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL3ZpZXdzL1ZpZXdBbmltYXRpb24uamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL3ZpZXdzL1ZpZXdBbmltYXRpb24uamF2YQppbmRleCBlMWQ4MGZkLi5lYWVmNTFjIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy92aWV3cy9WaWV3QW5pbWF0aW9uLmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvdmlld3MvVmlld0FuaW1hdGlvbi5qYXZhCkBAIC0zMyw2ICszMyw4IEBACiAKICAgICAgICAgLy8gVGhlc2UgZm9sbG93aW5nIHByb3BlcnRpZXMgYXJlIHVwZGF0ZWQgZm9yIGVhY2ggdGFzayB2aWV3IHdlIHN0YXJ0IHRoZSBlbnRlciBhbmltYXRpb24gb24KIAorICAgICAgICAvLyBXaGV0aGVyIG9yIG5vdCBzY3JlZW4gcGlubmluZyBpcyBlbmFibGVkCisgICAgICAgIGJvb2xlYW4gaXNTY3JlZW5QaW5uaW5nRW5hYmxlZDsKICAgICAgICAgLy8gV2hldGhlciBvciBub3QgdGhlIGN1cnJlbnQgdGFzayBvY2NsdWRlcyB0aGUgbGF1bmNoIHRhcmdldAogICAgICAgICBib29sZWFuIGN1cnJlbnRUYXNrT2NjbHVkZXNMYXVuY2hUYXJnZXQ7CiAgICAgICAgIC8vIFRoZSB0YXNrIHJlY3QgZm9yIHRoZSBjdXJyZW50IHN0YWNrCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhY2tkaXZpZGVyL0RpdmlkZXIuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGFja2RpdmlkZXIvRGl2aWRlci5qYXZhCmluZGV4IDZmZjdhM2UuLjE4OWU2NTEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGFja2RpdmlkZXIvRGl2aWRlci5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGFja2RpdmlkZXIvRGl2aWRlci5qYXZhCkBAIC0xNyw3ICsxNyw4IEBACiBwYWNrYWdlIGNvbS5hbmRyb2lkLnN5c3RlbXVpLnN0YWNrZGl2aWRlcjsKIAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuQ29uZmlndXJhdGlvbjsKLWltcG9ydCBhbmRyb2lkLnZpZXcuSURvY2tEaXZpZGVyVmlzaWJpbGl0eUxpc3RlbmVyOworaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOworaW1wb3J0IGFuZHJvaWQudmlldy5JRG9ja2VkU3RhY2tMaXN0ZW5lcjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuTGF5b3V0SW5mbGF0ZXI7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CiAKQEAgLTQ5LDcgKzUwLDcgQEAKICAgICAgICAgcHV0Q29tcG9uZW50KERpdmlkZXIuY2xhc3MsIHRoaXMpOwogICAgICAgICBtRG9ja0RpdmlkZXJWaXNpYmlsaXR5TGlzdGVuZXIgPSBuZXcgRG9ja0RpdmlkZXJWaXNpYmlsaXR5TGlzdGVuZXIoKTsKICAgICAgICAgU3lzdGVtU2VydmljZXNQcm94eSBzc3AgPSBSZWNlbnRzLmdldFN5c3RlbVNlcnZpY2VzKCk7Ci0gICAgICAgIHNzcC5yZWdpc3RlckRvY2tEaXZpZGVyVmlzaWJpbGl0eUxpc3RlbmVyKG1Eb2NrRGl2aWRlclZpc2liaWxpdHlMaXN0ZW5lcik7CisgICAgICAgIHNzcC5yZWdpc3RlckRvY2tlZFN0YWNrTGlzdGVuZXIobURvY2tEaXZpZGVyVmlzaWJpbGl0eUxpc3RlbmVyKTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKQEAgLTk0LDEwICs5NSwxNSBAQAogICAgICAgICB9KTsKICAgICB9CiAKLSAgICBjbGFzcyBEb2NrRGl2aWRlclZpc2liaWxpdHlMaXN0ZW5lciBleHRlbmRzIElEb2NrRGl2aWRlclZpc2liaWxpdHlMaXN0ZW5lci5TdHViIHsKKyAgICBjbGFzcyBEb2NrRGl2aWRlclZpc2liaWxpdHlMaXN0ZW5lciBleHRlbmRzIElEb2NrZWRTdGFja0xpc3RlbmVyLlN0dWIgeworCiAgICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvbkRvY2tEaXZpZGVyVmlzaWJpbGl0eUNoYW5nZWQoYm9vbGVhbiB2aXNpYmxlKSB7CisgICAgICAgIHB1YmxpYyB2b2lkIG9uRGl2aWRlclZpc2liaWxpdHlDaGFuZ2VkKGJvb2xlYW4gdmlzaWJsZSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CiAgICAgICAgICAgICB1cGRhdGVWaXNpYmlsaXR5KHZpc2libGUpOwogICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uRG9ja2VkU3RhY2tFeGlzdHNDaGFuZ2VkKGJvb2xlYW4gZXhpc3RzKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGFja2RpdmlkZXIvRGl2aWRlckhhbmRsZVZpZXcuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGFja2RpdmlkZXIvRGl2aWRlckhhbmRsZVZpZXcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWY1NmYzCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YWNrZGl2aWRlci9EaXZpZGVySGFuZGxlVmlldy5qYXZhCkBAIC0wLDAgKzEsMTQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5zeXN0ZW11aS5zdGFja2RpdmlkZXI7CisKK2ltcG9ydCBhbmRyb2lkLmFuaW1hdGlvbi5BbmltYXRvcjsKK2ltcG9ydCBhbmRyb2lkLmFuaW1hdGlvbi5BbmltYXRvckxpc3RlbmVyQWRhcHRlcjsKK2ltcG9ydCBhbmRyb2lkLmFuaW1hdGlvbi5BbmltYXRvclNldDsKK2ltcG9ydCBhbmRyb2lkLmFuaW1hdGlvbi5PYmplY3RBbmltYXRvcjsKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTnVsbGFibGU7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5DYW52YXM7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5QYWludDsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OworaW1wb3J0IGFuZHJvaWQudXRpbC5Qcm9wZXJ0eTsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuYW5pbWF0aW9uLkFuaW1hdGlvblV0aWxzOworaW1wb3J0IGFuZHJvaWQudmlldy5hbmltYXRpb24uSW50ZXJwb2xhdG9yOworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkltYWdlQnV0dG9uOworCitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuUjsKKworLyoqCisgKiBWaWV3IGZvciB0aGUgaGFuZGxlIGluIHRoZSBkb2NrZWQgc3RhY2sgZGl2aWRlci4KKyAqLworcHVibGljIGNsYXNzIERpdmlkZXJIYW5kbGVWaWV3IGV4dGVuZHMgSW1hZ2VCdXR0b24geworCisgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgUHJvcGVydHk8RGl2aWRlckhhbmRsZVZpZXcsIEludGVnZXI+IFdJRFRIX1BST1BFUlRZCisgICAgICAgICAgICA9IG5ldyBQcm9wZXJ0eTxEaXZpZGVySGFuZGxlVmlldywgSW50ZWdlcj4oSW50ZWdlci5jbGFzcywgIndpZHRoIikgeworCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgSW50ZWdlciBnZXQoRGl2aWRlckhhbmRsZVZpZXcgb2JqZWN0KSB7CisgICAgICAgICAgICByZXR1cm4gb2JqZWN0Lm1DdXJyZW50V2lkdGg7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgc2V0KERpdmlkZXJIYW5kbGVWaWV3IG9iamVjdCwgSW50ZWdlciB2YWx1ZSkgeworICAgICAgICAgICAgb2JqZWN0Lm1DdXJyZW50V2lkdGggPSB2YWx1ZTsKKyAgICAgICAgICAgIG9iamVjdC5pbnZhbGlkYXRlKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgUHJvcGVydHk8RGl2aWRlckhhbmRsZVZpZXcsIEludGVnZXI+IEhFSUdIVF9QUk9QRVJUWQorICAgICAgICAgICAgPSBuZXcgUHJvcGVydHk8RGl2aWRlckhhbmRsZVZpZXcsIEludGVnZXI+KEludGVnZXIuY2xhc3MsICJoZWlnaHQiKSB7CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBJbnRlZ2VyIGdldChEaXZpZGVySGFuZGxlVmlldyBvYmplY3QpIHsKKyAgICAgICAgICAgIHJldHVybiBvYmplY3QubUN1cnJlbnRIZWlnaHQ7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgc2V0KERpdmlkZXJIYW5kbGVWaWV3IG9iamVjdCwgSW50ZWdlciB2YWx1ZSkgeworICAgICAgICAgICAgb2JqZWN0Lm1DdXJyZW50SGVpZ2h0ID0gdmFsdWU7CisgICAgICAgICAgICBvYmplY3QuaW52YWxpZGF0ZSgpOworICAgICAgICB9CisgICAgfTsKKworICAgIHByaXZhdGUgZmluYWwgUGFpbnQgbVBhaW50ID0gbmV3IFBhaW50KCk7CisgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbVdpZHRoOworICAgIHByaXZhdGUgZmluYWwgaW50IG1IZWlnaHQ7CisgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbUNpcmNsZURpYW1ldGVyOworICAgIHByaXZhdGUgZmluYWwgSW50ZXJwb2xhdG9yIG1GYXN0T3V0U2xvd0luSW50ZXJwb2xhdG9yOworICAgIHByaXZhdGUgaW50IG1DdXJyZW50V2lkdGg7CisgICAgcHJpdmF0ZSBpbnQgbUN1cnJlbnRIZWlnaHQ7CisgICAgcHJpdmF0ZSBBbmltYXRvclNldCBtQW5pbWF0b3I7CisKKyAgICBwdWJsaWMgRGl2aWRlckhhbmRsZVZpZXcoQ29udGV4dCBjb250ZXh0LCBATnVsbGFibGUgQXR0cmlidXRlU2V0IGF0dHJzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzKTsKKyAgICAgICAgbVBhaW50LnNldENvbG9yKGdldFJlc291cmNlcygpLmdldENvbG9yKFIuY29sb3IuZG9ja2VkX2RpdmlkZXJfaGFuZGxlLCBudWxsKSk7CisgICAgICAgIG1QYWludC5zZXRBbnRpQWxpYXModHJ1ZSk7CisgICAgICAgIG1XaWR0aCA9IGdldFJlc291cmNlcygpLmdldERpbWVuc2lvblBpeGVsU2l6ZShSLmRpbWVuLmRvY2tlZF9kaXZpZGVyX2hhbmRsZV93aWR0aCk7CisgICAgICAgIG1IZWlnaHQgPSBnZXRSZXNvdXJjZXMoKS5nZXREaW1lbnNpb25QaXhlbFNpemUoUi5kaW1lbi5kb2NrZWRfZGl2aWRlcl9oYW5kbGVfaGVpZ2h0KTsKKyAgICAgICAgbUN1cnJlbnRXaWR0aCA9IG1XaWR0aDsKKyAgICAgICAgbUN1cnJlbnRIZWlnaHQgPSBtSGVpZ2h0OworICAgICAgICBtQ2lyY2xlRGlhbWV0ZXIgPSAobVdpZHRoICsgbUhlaWdodCkgLyAzOworICAgICAgICBtRmFzdE91dFNsb3dJbkludGVycG9sYXRvciA9IEFuaW1hdGlvblV0aWxzLmxvYWRJbnRlcnBvbGF0b3IoZ2V0Q29udGV4dCgpLAorICAgICAgICAgICAgICAgIGFuZHJvaWQuUi5pbnRlcnBvbGF0b3IuZmFzdF9vdXRfc2xvd19pbik7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0VG91Y2hpbmcoYm9vbGVhbiB0b3VjaGluZywgYm9vbGVhbiBhbmltYXRlKSB7CisgICAgICAgIGlmIChtQW5pbWF0b3IgIT0gbnVsbCkgeworICAgICAgICAgICAgbUFuaW1hdG9yLmNhbmNlbCgpOworICAgICAgICAgICAgbUFuaW1hdG9yID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWFuaW1hdGUpIHsKKyAgICAgICAgICAgIGlmICh0b3VjaGluZykgeworICAgICAgICAgICAgICAgIG1DdXJyZW50V2lkdGggPSBtQ2lyY2xlRGlhbWV0ZXI7CisgICAgICAgICAgICAgICAgbUN1cnJlbnRIZWlnaHQgPSBtQ2lyY2xlRGlhbWV0ZXI7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1DdXJyZW50V2lkdGggPSBtV2lkdGg7CisgICAgICAgICAgICAgICAgbUN1cnJlbnRIZWlnaHQgPSBtSGVpZ2h0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW52YWxpZGF0ZSgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYW5pbWF0ZVRvVGFyZ2V0KHRvdWNoaW5nID8gbUNpcmNsZURpYW1ldGVyIDogbVdpZHRoLAorICAgICAgICAgICAgICAgICAgICB0b3VjaGluZyA/IG1DaXJjbGVEaWFtZXRlciA6IG1IZWlnaHQsIHRvdWNoaW5nKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBhbmltYXRlVG9UYXJnZXQoaW50IHRhcmdldFdpZHRoLCBpbnQgdGFyZ2V0SGVpZ2h0LCBib29sZWFuIHRvdWNoaW5nKSB7CisgICAgICAgIE9iamVjdEFuaW1hdG9yIHdpZHRoQW5pbWF0b3IgPSBPYmplY3RBbmltYXRvci5vZkludCh0aGlzLCBXSURUSF9QUk9QRVJUWSwKKyAgICAgICAgICAgICAgICBtQ3VycmVudFdpZHRoLCB0YXJnZXRXaWR0aCk7CisgICAgICAgIE9iamVjdEFuaW1hdG9yIGhlaWdodEFuaW1hdG9yID0gT2JqZWN0QW5pbWF0b3Iub2ZJbnQodGhpcywgSEVJR0hUX1BST1BFUlRZLAorICAgICAgICAgICAgICAgIG1DdXJyZW50SGVpZ2h0LCB0YXJnZXRIZWlnaHQpOworICAgICAgICBtQW5pbWF0b3IgPSBuZXcgQW5pbWF0b3JTZXQoKTsKKyAgICAgICAgbUFuaW1hdG9yLnBsYXlUb2dldGhlcih3aWR0aEFuaW1hdG9yLCBoZWlnaHRBbmltYXRvcik7CisgICAgICAgIG1BbmltYXRvci5zZXREdXJhdGlvbih0b3VjaGluZworICAgICAgICAgICAgICAgID8gRGl2aWRlclZpZXcuVE9VQ0hfQU5JTUFUSU9OX0RVUkFUSU9OCisgICAgICAgICAgICAgICAgOiBEaXZpZGVyVmlldy5UT1VDSF9SRUxFQVNFX0FOSU1BVElPTl9EVVJBVElPTik7CisgICAgICAgIG1BbmltYXRvci5zZXRJbnRlcnBvbGF0b3IodG91Y2hpbmcKKyAgICAgICAgICAgICAgICA/IERpdmlkZXJWaWV3LlRPVUNIX1JFU1BPTlNFX0lOVEVSUE9MQVRPUgorICAgICAgICAgICAgICAgIDogbUZhc3RPdXRTbG93SW5JbnRlcnBvbGF0b3IpOworICAgICAgICBtQW5pbWF0b3IuYWRkTGlzdGVuZXIobmV3IEFuaW1hdG9yTGlzdGVuZXJBZGFwdGVyKCkgeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkFuaW1hdGlvbkVuZChBbmltYXRvciBhbmltYXRpb24pIHsKKyAgICAgICAgICAgICAgICBtQW5pbWF0b3IgPSBudWxsOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgbUFuaW1hdG9yLnN0YXJ0KCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgb25EcmF3KENhbnZhcyBjYW52YXMpIHsKKyAgICAgICAgaW50IGxlZnQgPSBnZXRXaWR0aCgpIC8gMiAtIG1DdXJyZW50V2lkdGggLyAyOworICAgICAgICBpbnQgdG9wID0gZ2V0SGVpZ2h0KCkgLyAyIC0gbUN1cnJlbnRIZWlnaHQgLyAyOworICAgICAgICBpbnQgcmFkaXVzID0gTWF0aC5taW4obUN1cnJlbnRXaWR0aCwgbUN1cnJlbnRIZWlnaHQpIC8gMjsKKyAgICAgICAgY2FudmFzLmRyYXdSb3VuZFJlY3QobGVmdCwgdG9wLCBsZWZ0ICsgbUN1cnJlbnRXaWR0aCwgdG9wICsgbUN1cnJlbnRIZWlnaHQsCisgICAgICAgICAgICAgICAgcmFkaXVzLCByYWRpdXMsIG1QYWludCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YWNrZGl2aWRlci9EaXZpZGVyU25hcEFsZ29yaXRobS5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YWNrZGl2aWRlci9EaXZpZGVyU25hcEFsZ29yaXRobS5qYXZhCmluZGV4IDY5ZTkwY2MuLmU0M2Q1MzEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGFja2RpdmlkZXIvRGl2aWRlclNuYXBBbGdvcml0aG0uamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhY2tkaXZpZGVyL0RpdmlkZXJTbmFwQWxnb3JpdGhtLmphdmEKQEAgLTE3LDI1ICsxNyw0MiBAQAogcGFja2FnZSBjb20uYW5kcm9pZC5zeXN0ZW11aS5zdGFja2RpdmlkZXI7CiAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuRGlzcGxheU1ldHJpY3M7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LkRpc3BsYXlJbmZvOworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdDsKIAogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnN0YXR1c2Jhci5GbGluZ0FuaW1hdGlvblV0aWxzOwogCiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIAotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQucmVzLkNvbmZpZ3VyYXRpb24uT1JJRU5UQVRJT05fTEFORFNDQVBFOwotCiAvKioKICAqIENhbGN1bGF0ZXMgdGhlIHNuYXAgdGFyZ2V0cyBhbmQgdGhlIHNuYXAgcG9zaXRpb24gZ2l2ZW4gYSBwb3NpdGlvbiBhbmQgYSB2ZWxvY2l0eS4gQWxsIHBvc2l0aW9ucwogICogaGVyZSBhcmUgdG8gYmUgaW50ZXJwcmV0ZWQgYXMgdGhlIGxlZnQvdG9wIGVkZ2Ugb2YgdGhlIGRpdmlkZXIgcmVjdGFuZ2xlLgogICovCiBwdWJsaWMgY2xhc3MgRGl2aWRlclNuYXBBbGdvcml0aG0gewogCisgICAgLyoqCisgICAgICogMyBzbmFwIHRhcmdldHM6IGxlZnQvdG9wIGhhcyAxNjo5IHJhdGlvIChmb3IgdmlkZW9zKSwgMToxLCBhbmQgcmlnaHQvYm90dG9tIGhhcyAxNjo5IHJhdGlvCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNOQVBfTU9ERV8xNl85ID0gMDsKKworICAgIC8qKgorICAgICAqIDMgc25hcCB0YXJnZXRzOiBmaXhlZCByYXRpbywgMToxLCAoMSAtIGZpeGVkIHJhdGlvKQorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTTkFQX0ZJWEVEX1JBVElPID0gMTsKKworICAgIC8qKgorICAgICAqIDEgc25hcCB0YXJnZXQ6IDE6MQorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTTkFQX09OTFlfMV8xID0gMjsKKwogICAgIHByaXZhdGUgZmluYWwgQ29udGV4dCBtQ29udGV4dDsKICAgICBwcml2YXRlIGZpbmFsIEZsaW5nQW5pbWF0aW9uVXRpbHMgbUZsaW5nQW5pbWF0aW9uVXRpbHM7CisgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbURpc3BsYXlXaWR0aDsKKyAgICBwcml2YXRlIGZpbmFsIGludCBtRGlzcGxheUhlaWdodDsKICAgICBwcml2YXRlIGZpbmFsIGludCBtRGl2aWRlclNpemU7Ci0gICAgcHJpdmF0ZSBmaW5hbCBBcnJheUxpc3Q8U25hcFRhcmdldD4gbVRhcmdldHM7CisgICAgcHJpdmF0ZSBmaW5hbCBBcnJheUxpc3Q8U25hcFRhcmdldD4gbVRhcmdldHMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgICBwcml2YXRlIGZpbmFsIFJlY3QgbUluc2V0cyA9IG5ldyBSZWN0KCk7CisgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbVNuYXBNb2RlOworICAgIHByaXZhdGUgZmluYWwgZmxvYXQgbUZpeGVkUmF0aW87CiAKICAgICAvKiogVGhlIGZpcnN0IHRhcmdldCB3aGljaCBpcyBzdGlsbCBzcGxpdHRpbmcgdGhlIHNjcmVlbiAqLwogICAgIHByaXZhdGUgZmluYWwgU25hcFRhcmdldCBtRmlyc3RTcGxpdFRhcmdldDsKQEAgLTQ3LDExICs2NCwxOSBAQAogICAgIHByaXZhdGUgZmluYWwgU25hcFRhcmdldCBtRGlzbWlzc0VuZFRhcmdldDsKIAogICAgIHB1YmxpYyBEaXZpZGVyU25hcEFsZ29yaXRobShDb250ZXh0IGN0eCwgRmxpbmdBbmltYXRpb25VdGlscyBmbGluZ0FuaW1hdGlvblV0aWxzLAotICAgICAgICAgICAgaW50IGRpdmlkZXJTaXplLCBib29sZWFuIGlzSG9yaXpvbnRhbERpdmlzaW9uKSB7CisgICAgICAgICAgICBpbnQgZGlzcGxheVdpZHRoLCBpbnQgZGlzcGxheUhlaWdodCwgaW50IGRpdmlkZXJTaXplLCBib29sZWFuIGlzSG9yaXpvbnRhbERpdmlzaW9uLAorICAgICAgICAgICAgUmVjdCBpbnNldHMpIHsKICAgICAgICAgbUNvbnRleHQgPSBjdHg7CiAgICAgICAgIG1GbGluZ0FuaW1hdGlvblV0aWxzID0gZmxpbmdBbmltYXRpb25VdGlsczsKICAgICAgICAgbURpdmlkZXJTaXplID0gZGl2aWRlclNpemU7Ci0gICAgICAgIG1UYXJnZXRzID0gY2FsY3VsYXRlVGFyZ2V0cyhpc0hvcml6b250YWxEaXZpc2lvbik7CisgICAgICAgIG1EaXNwbGF5V2lkdGggPSBkaXNwbGF5V2lkdGg7CisgICAgICAgIG1EaXNwbGF5SGVpZ2h0ID0gZGlzcGxheUhlaWdodDsKKyAgICAgICAgbUluc2V0cy5zZXQoaW5zZXRzKTsKKyAgICAgICAgbVNuYXBNb2RlID0gY3R4LmdldFJlc291cmNlcygpLmdldEludGVnZXIoCisgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5pbnRlZ2VyLmNvbmZpZ19kb2NrZWRTdGFja0RpdmlkZXJTbmFwTW9kZSk7CisgICAgICAgIG1GaXhlZFJhdGlvID0gY3R4LmdldFJlc291cmNlcygpLmdldEZyYWN0aW9uKAorICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuZnJhY3Rpb24uZG9ja2VkX3N0YWNrX2RpdmlkZXJfZml4ZWRfcmF0aW8sIDEsIDEpOworICAgICAgICBjYWxjdWxhdGVUYXJnZXRzKGlzSG9yaXpvbnRhbERpdmlzaW9uKTsKICAgICAgICAgbUZpcnN0U3BsaXRUYXJnZXQgPSBtVGFyZ2V0cy5nZXQoMSk7CiAgICAgICAgIG1MYXN0U3BsaXRUYXJnZXQgPSBtVGFyZ2V0cy5nZXQobVRhcmdldHMuc2l6ZSgpIC0gMik7CiAgICAgICAgIG1EaXNtaXNzU3RhcnRUYXJnZXQgPSBtVGFyZ2V0cy5nZXQoMCk7CkBAIC03NSw2ICsxMDAsNDAgQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIHB1YmxpYyBmbG9hdCBjYWxjdWxhdGVEaXNtaXNzaW5nRnJhY3Rpb24oaW50IHBvc2l0aW9uKSB7CisgICAgICAgIGlmIChwb3NpdGlvbiA8IG1GaXJzdFNwbGl0VGFyZ2V0LnBvc2l0aW9uKSB7CisgICAgICAgICAgICByZXR1cm4gMWYgLSAoZmxvYXQpIHBvc2l0aW9uIC8gbUZpcnN0U3BsaXRUYXJnZXQucG9zaXRpb247CisgICAgICAgIH0gZWxzZSBpZiAocG9zaXRpb24gPiBtTGFzdFNwbGl0VGFyZ2V0LnBvc2l0aW9uKSB7CisgICAgICAgICAgICByZXR1cm4gKGZsb2F0KSAocG9zaXRpb24gLSBtTGFzdFNwbGl0VGFyZ2V0LnBvc2l0aW9uKQorICAgICAgICAgICAgICAgICAgICAvIChtRGlzbWlzc0VuZFRhcmdldC5wb3NpdGlvbiAtIG1MYXN0U3BsaXRUYXJnZXQucG9zaXRpb24pOworICAgICAgICB9CisgICAgICAgIHJldHVybiAwZjsKKyAgICB9CisKKyAgICBwdWJsaWMgU25hcFRhcmdldCBnZXRDbG9zZXN0RGlzbWlzc1RhcmdldChpbnQgcG9zaXRpb24pIHsKKyAgICAgICAgaWYgKHBvc2l0aW9uIC0gbURpc21pc3NTdGFydFRhcmdldC5wb3NpdGlvbiA8IG1EaXNtaXNzRW5kVGFyZ2V0LnBvc2l0aW9uIC0gcG9zaXRpb24pIHsKKyAgICAgICAgICAgIHJldHVybiBtRGlzbWlzc1N0YXJ0VGFyZ2V0OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIG1EaXNtaXNzRW5kVGFyZ2V0OworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIFNuYXBUYXJnZXQgZ2V0Rmlyc3RTcGxpdFRhcmdldCgpIHsKKyAgICAgICAgcmV0dXJuIG1GaXJzdFNwbGl0VGFyZ2V0OworICAgIH0KKworICAgIHB1YmxpYyBTbmFwVGFyZ2V0IGdldExhc3RTcGxpdFRhcmdldCgpIHsKKyAgICAgICAgcmV0dXJuIG1MYXN0U3BsaXRUYXJnZXQ7CisgICAgfQorCisgICAgcHVibGljIFNuYXBUYXJnZXQgZ2V0RGlzbWlzc1N0YXJ0VGFyZ2V0KCkgeworICAgICAgICByZXR1cm4gbURpc21pc3NTdGFydFRhcmdldDsKKyAgICB9CisKKyAgICBwdWJsaWMgU25hcFRhcmdldCBnZXREaXNtaXNzRW5kVGFyZ2V0KCkgeworICAgICAgICByZXR1cm4gbURpc21pc3NFbmRUYXJnZXQ7CisgICAgfQorCiAgICAgcHJpdmF0ZSBTbmFwVGFyZ2V0IHNuYXAoaW50IHBvc2l0aW9uKSB7CiAgICAgICAgIGludCBtaW5JbmRleCA9IC0xOwogICAgICAgICBpbnQgbWluRGlzdGFuY2UgPSBJbnRlZ2VyLk1BWF9WQUxVRTsKQEAgLTg5LDIyICsxNDgsNjEgQEAKICAgICAgICAgcmV0dXJuIG1UYXJnZXRzLmdldChtaW5JbmRleCk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSBBcnJheUxpc3Q8U25hcFRhcmdldD4gY2FsY3VsYXRlVGFyZ2V0cyhib29sZWFuIGlzSG9yaXpvbnRhbERpdmlzaW9uKSB7Ci0gICAgICAgIEFycmF5TGlzdDxTbmFwVGFyZ2V0PiB0YXJnZXRzID0gbmV3IEFycmF5TGlzdDw+KCk7Ci0gICAgICAgIERpc3BsYXlNZXRyaWNzIGluZm8gPSBtQ29udGV4dC5nZXRSZXNvdXJjZXMoKS5nZXREaXNwbGF5TWV0cmljcygpOworICAgIHByaXZhdGUgdm9pZCBjYWxjdWxhdGVUYXJnZXRzKGJvb2xlYW4gaXNIb3Jpem9udGFsRGl2aXNpb24pIHsKKyAgICAgICAgbVRhcmdldHMuY2xlYXIoKTsKICAgICAgICAgaW50IGRpdmlkZXJNYXggPSBpc0hvcml6b250YWxEaXZpc2lvbgotICAgICAgICAgICAgICAgID8gaW5mby5oZWlnaHRQaXhlbHMKLSAgICAgICAgICAgICAgICA6IGluZm8ud2lkdGhQaXhlbHM7CisgICAgICAgICAgICAgICAgPyBtRGlzcGxheUhlaWdodAorICAgICAgICAgICAgICAgIDogbURpc3BsYXlXaWR0aDsKKyAgICAgICAgbVRhcmdldHMuYWRkKG5ldyBTbmFwVGFyZ2V0KC1tRGl2aWRlclNpemUsIFNuYXBUYXJnZXQuRkxBR19ESVNNSVNTX1NUQVJUKSk7CisgICAgICAgIHN3aXRjaCAobVNuYXBNb2RlKSB7CisgICAgICAgICAgICBjYXNlIFNOQVBfTU9ERV8xNl85OgorICAgICAgICAgICAgICAgIGFkZFJhdGlvMTZfOVRhcmdldHMoaXNIb3Jpem9udGFsRGl2aXNpb24pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBTTkFQX0ZJWEVEX1JBVElPOgorICAgICAgICAgICAgICAgIGFkZEZpeGVkRGl2aXNpb25UYXJnZXRzKGlzSG9yaXpvbnRhbERpdmlzaW9uKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgU05BUF9PTkxZXzFfMToKKyAgICAgICAgICAgICAgICBhZGRNaWRkbGVUYXJnZXQoaXNIb3Jpem9udGFsRGl2aXNpb24pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIG1UYXJnZXRzLmFkZChuZXcgU25hcFRhcmdldChkaXZpZGVyTWF4LCBTbmFwVGFyZ2V0LkZMQUdfRElTTUlTU19FTkQpKTsKKyAgICB9CiAKLSAgICAgICAgLy8gVE9ETzogQmV0dGVyIGNhbGN1bGF0aW9uCi0gICAgICAgIHRhcmdldHMuYWRkKG5ldyBTbmFwVGFyZ2V0KC1tRGl2aWRlclNpemUsIFNuYXBUYXJnZXQuRkxBR19ESVNNSVNTX1NUQVJUKSk7Ci0gICAgICAgIHRhcmdldHMuYWRkKG5ldyBTbmFwVGFyZ2V0KChpbnQpICgwLjM4ZiAqIGRpdmlkZXJNYXgpIC0gbURpdmlkZXJTaXplIC8gMiwKKyAgICBwcml2YXRlIHZvaWQgYWRkRml4ZWREaXZpc2lvblRhcmdldHMoYm9vbGVhbiBpc0hvcml6b250YWxEaXZpc2lvbikgeworICAgICAgICBpbnQgc3RhcnQgPSBpc0hvcml6b250YWxEaXZpc2lvbiA/IG1JbnNldHMudG9wIDogbUluc2V0cy5sZWZ0OworICAgICAgICBpbnQgZW5kID0gaXNIb3Jpem9udGFsRGl2aXNpb24KKyAgICAgICAgICAgICAgICA/IG1EaXNwbGF5SGVpZ2h0IC0gbUluc2V0cy5ib3R0b20KKyAgICAgICAgICAgICAgICA6IG1EaXNwbGF5V2lkdGggLSBtSW5zZXRzLnJpZ2h0OworICAgICAgICBtVGFyZ2V0cy5hZGQobmV3IFNuYXBUYXJnZXQoKGludCkgKHN0YXJ0ICsgbUZpeGVkUmF0aW8gKiAoZW5kIC0gc3RhcnQpKSAtIG1EaXZpZGVyU2l6ZSAvIDIsCiAgICAgICAgICAgICAgICAgU25hcFRhcmdldC5GTEFHX05PTkUpKTsKLSAgICAgICAgdGFyZ2V0cy5hZGQobmV3IFNuYXBUYXJnZXQoZGl2aWRlck1heCAvIDIgLSBtRGl2aWRlclNpemUgLyAyLCBTbmFwVGFyZ2V0LkZMQUdfTk9ORSkpOwotICAgICAgICB0YXJnZXRzLmFkZChuZXcgU25hcFRhcmdldCgoaW50KSAoMC42MmYgKiBkaXZpZGVyTWF4KSAtIG1EaXZpZGVyU2l6ZSAvIDIsCisgICAgICAgIGFkZE1pZGRsZVRhcmdldChpc0hvcml6b250YWxEaXZpc2lvbik7CisgICAgICAgIG1UYXJnZXRzLmFkZChuZXcgU25hcFRhcmdldCgoaW50KSAoc3RhcnQgKyAoMSAtIG1GaXhlZFJhdGlvKSAqIChlbmQgLSBzdGFydCkpCisgICAgICAgICAgICAgICAgLSBtRGl2aWRlclNpemUgLyAyLCBTbmFwVGFyZ2V0LkZMQUdfTk9ORSkpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBhZGRSYXRpbzE2XzlUYXJnZXRzKGJvb2xlYW4gaXNIb3Jpem9udGFsRGl2aXNpb24pIHsKKyAgICAgICAgaW50IHN0YXJ0ID0gaXNIb3Jpem9udGFsRGl2aXNpb24gPyBtSW5zZXRzLnRvcCA6IG1JbnNldHMubGVmdDsKKyAgICAgICAgaW50IGVuZCA9IGlzSG9yaXpvbnRhbERpdmlzaW9uCisgICAgICAgICAgICAgICAgPyBtRGlzcGxheUhlaWdodCAtIG1JbnNldHMuYm90dG9tCisgICAgICAgICAgICAgICAgOiBtRGlzcGxheVdpZHRoIC0gbUluc2V0cy5yaWdodDsKKyAgICAgICAgaW50IHN0YXJ0T3RoZXIgPSBpc0hvcml6b250YWxEaXZpc2lvbiA/IG1JbnNldHMubGVmdCA6IG1JbnNldHMudG9wOworICAgICAgICBpbnQgZW5kT3RoZXIgPSBpc0hvcml6b250YWxEaXZpc2lvbgorICAgICAgICAgICAgICAgID8gbURpc3BsYXlXaWR0aCAtIG1JbnNldHMucmlnaHQKKyAgICAgICAgICAgICAgICA6IG1EaXNwbGF5SGVpZ2h0IC0gbUluc2V0cy5ib3R0b207CisgICAgICAgIGZsb2F0IHNpemUgPSA5LjBmIC8gMTYuMGYgKiAoZW5kT3RoZXIgLSBzdGFydE90aGVyKTsKKyAgICAgICAgaW50IHNpemVJbnQgPSAoaW50KSBNYXRoLmZsb29yKHNpemUpOworICAgICAgICBtVGFyZ2V0cy5hZGQobmV3IFNuYXBUYXJnZXQoc3RhcnQgKyBzaXplSW50LCBTbmFwVGFyZ2V0LkZMQUdfTk9ORSkpOworICAgICAgICBhZGRNaWRkbGVUYXJnZXQoaXNIb3Jpem9udGFsRGl2aXNpb24pOworICAgICAgICBtVGFyZ2V0cy5hZGQobmV3IFNuYXBUYXJnZXQoZW5kIC0gc2l6ZUludCAtIG1EaXZpZGVyU2l6ZSwgU25hcFRhcmdldC5GTEFHX05PTkUpKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgYWRkTWlkZGxlVGFyZ2V0KGJvb2xlYW4gaXNIb3Jpem9udGFsRGl2aXNpb24pIHsKKyAgICAgICAgaW50IHN0YXJ0ID0gaXNIb3Jpem9udGFsRGl2aXNpb24gPyBtSW5zZXRzLnRvcCA6IG1JbnNldHMubGVmdDsKKyAgICAgICAgaW50IGVuZCA9IGlzSG9yaXpvbnRhbERpdmlzaW9uCisgICAgICAgICAgICAgICAgPyBtRGlzcGxheUhlaWdodCAtIG1JbnNldHMuYm90dG9tCisgICAgICAgICAgICAgICAgOiBtRGlzcGxheVdpZHRoIC0gbUluc2V0cy5yaWdodDsKKyAgICAgICAgbVRhcmdldHMuYWRkKG5ldyBTbmFwVGFyZ2V0KHN0YXJ0ICsgKGVuZCAtIHN0YXJ0KSAvIDIgLSBtRGl2aWRlclNpemUgLyAyLAogICAgICAgICAgICAgICAgIFNuYXBUYXJnZXQuRkxBR19OT05FKSk7Ci0gICAgICAgIHRhcmdldHMuYWRkKG5ldyBTbmFwVGFyZ2V0KGRpdmlkZXJNYXgsIFNuYXBUYXJnZXQuRkxBR19ESVNNSVNTX0VORCkpOwotICAgICAgICByZXR1cm4gdGFyZ2V0czsKICAgICB9CiAKICAgICAvKioKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGFja2RpdmlkZXIvRGl2aWRlclZpZXcuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGFja2RpdmlkZXIvRGl2aWRlclZpZXcuamF2YQppbmRleCBjMDFmMTcwLi4xMDljZjQ3IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhY2tkaXZpZGVyL0RpdmlkZXJWaWV3LmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YWNrZGl2aWRlci9EaXZpZGVyVmlldy5qYXZhCkBAIC0yMSwxMiArMjEsMTQgQEAKIGltcG9ydCBhbmRyb2lkLmFuaW1hdGlvbi5WYWx1ZUFuaW1hdG9yOwogaW1wb3J0IGFuZHJvaWQuYW5pbWF0aW9uLlZhbHVlQW5pbWF0b3IuQW5pbWF0b3JVcGRhdGVMaXN0ZW5lcjsKIGltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTnVsbGFibGU7CitpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlN0YWNrSWQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5Db25maWd1cmF0aW9uOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdDsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlZ2lvbi5PcDsKIGltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLmRpc3BsYXkuRGlzcGxheU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldDsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuTWF0aFV0aWxzOwogaW1wb3J0IGFuZHJvaWQudmlldy5EaXNwbGF5OwogaW1wb3J0IGFuZHJvaWQudmlldy5EaXNwbGF5SW5mbzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuTW90aW9uRXZlbnQ7CkBAIC0zNCw4ICszNiwxMSBAQAogaW1wb3J0IGFuZHJvaWQudmlldy5WZWxvY2l0eVRyYWNrZXI7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXcuT25Ub3VjaExpc3RlbmVyOworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3Q29uZmlndXJhdGlvbjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlld1RyZWVPYnNlcnZlci5JbnRlcm5hbEluc2V0c0luZm87CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdUcmVlT2JzZXJ2ZXIuT25Db21wdXRlSW50ZXJuYWxJbnNldHNMaXN0ZW5lcjsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93OworaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dJbnNldHM7CiBpbXBvcnQgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC52aWV3LmFuaW1hdGlvbi5BbmltYXRpb25VdGlsczsKIGltcG9ydCBhbmRyb2lkLnZpZXcuYW5pbWF0aW9uLkludGVycG9sYXRvcjsKQEAgLTU2LDE1ICs2MSwyOSBAQAogcHVibGljIGNsYXNzIERpdmlkZXJWaWV3IGV4dGVuZHMgRnJhbWVMYXlvdXQgaW1wbGVtZW50cyBPblRvdWNoTGlzdGVuZXIsCiAgICAgICAgIE9uQ29tcHV0ZUludGVybmFsSW5zZXRzTGlzdGVuZXIgewogCisgICAgc3RhdGljIGZpbmFsIGxvbmcgVE9VQ0hfQU5JTUFUSU9OX0RVUkFUSU9OID0gMTUwOworICAgIHN0YXRpYyBmaW5hbCBsb25nIFRPVUNIX1JFTEVBU0VfQU5JTUFUSU9OX0RVUkFUSU9OID0gMjAwOworICAgIHN0YXRpYyBmaW5hbCBJbnRlcnBvbGF0b3IgVE9VQ0hfUkVTUE9OU0VfSU5URVJQT0xBVE9SID0KKyAgICAgICAgICAgIG5ldyBQYXRoSW50ZXJwb2xhdG9yKDAuM2YsIDBmLCAwLjFmLCAxZik7CisKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIkRpdmlkZXJWaWV3IjsKIAotICAgIHByaXZhdGUgSW1hZ2VCdXR0b24gbUhhbmRsZTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVEFTS19QT1NJVElPTl9TQU1FID0gSW50ZWdlci5NQVhfVkFMVUU7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgZmxvYXQgRElNX1NUQVJUX0ZSQUNUSU9OID0gMC41ZjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBmbG9hdCBESU1fREFNUF9GQUNUT1IgPSAxLjdmOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgUGF0aEludGVycG9sYXRvciBTTE9XRE9XTl9JTlRFUlBPTEFUT1IgPQorICAgICAgICAgICAgbmV3IFBhdGhJbnRlcnBvbGF0b3IoMC41ZiwgMWYsIDAuNWYsIDFmKTsKKworICAgIHByaXZhdGUgRGl2aWRlckhhbmRsZVZpZXcgbUhhbmRsZTsKICAgICBwcml2YXRlIFZpZXcgbUJhY2tncm91bmQ7CiAgICAgcHJpdmF0ZSBpbnQgbVN0YXJ0WDsKICAgICBwcml2YXRlIGludCBtU3RhcnRZOwogICAgIHByaXZhdGUgaW50IG1TdGFydFBvc2l0aW9uOwogICAgIHByaXZhdGUgaW50IG1Eb2NrU2lkZTsKICAgICBwcml2YXRlIGZpbmFsIGludFtdIG1UZW1wSW50MiA9IG5ldyBpbnRbMl07CisgICAgcHJpdmF0ZSBib29sZWFuIG1Nb3Zpbmc7CisgICAgcHJpdmF0ZSBpbnQgbVRvdWNoU2xvcDsKIAogICAgIHByaXZhdGUgaW50IG1EaXZpZGVySW5zZXRzOwogICAgIHByaXZhdGUgaW50IG1EaXNwbGF5V2lkdGg7CkBAIC03MywxNSArOTIsMjAgQEAKICAgICBwcml2YXRlIGludCBtRGl2aWRlclNpemU7CiAgICAgcHJpdmF0ZSBpbnQgbVRvdWNoRWxldmF0aW9uOwogCi0gICAgcHJpdmF0ZSBmaW5hbCBSZWN0IG1UbXBSZWN0ID0gbmV3IFJlY3QoKTsKKyAgICBwcml2YXRlIGZpbmFsIFJlY3QgbURvY2tlZFJlY3QgPSBuZXcgUmVjdCgpOworICAgIHByaXZhdGUgZmluYWwgUmVjdCBtRG9ja2VkVGFza1JlY3QgPSBuZXcgUmVjdCgpOworICAgIHByaXZhdGUgZmluYWwgUmVjdCBtT3RoZXJUYXNrUmVjdCA9IG5ldyBSZWN0KCk7CisgICAgcHJpdmF0ZSBmaW5hbCBSZWN0IG1PdGhlclJlY3QgPSBuZXcgUmVjdCgpOworICAgIHByaXZhdGUgZmluYWwgUmVjdCBtRG9ja2VkSW5zZXRSZWN0ID0gbmV3IFJlY3QoKTsKKyAgICBwcml2YXRlIGZpbmFsIFJlY3QgbU90aGVySW5zZXRSZWN0ID0gbmV3IFJlY3QoKTsKICAgICBwcml2YXRlIGZpbmFsIFJlY3QgbUxhc3RSZXNpemVSZWN0ID0gbmV3IFJlY3QoKTsKICAgICBwcml2YXRlIGZpbmFsIFdpbmRvd01hbmFnZXJQcm94eSBtV2luZG93TWFuYWdlclByb3h5ID0gV2luZG93TWFuYWdlclByb3h5LmdldEluc3RhbmNlKCk7CiAgICAgcHJpdmF0ZSBJbnRlcnBvbGF0b3IgbUZhc3RPdXRTbG93SW5JbnRlcnBvbGF0b3I7Ci0gICAgcHJpdmF0ZSBmaW5hbCBJbnRlcnBvbGF0b3IgbVRvdWNoUmVzcG9uc2VJbnRlcnBvbGF0b3IgPQotICAgICAgICAgICAgbmV3IFBhdGhJbnRlcnBvbGF0b3IoMC4zZiwgMGYsIDAuMWYsIDFmKTsKICAgICBwcml2YXRlIERpdmlkZXJXaW5kb3dNYW5hZ2VyIG1XaW5kb3dNYW5hZ2VyOwogICAgIHByaXZhdGUgVmVsb2NpdHlUcmFja2VyIG1WZWxvY2l0eVRyYWNrZXI7CiAgICAgcHJpdmF0ZSBGbGluZ0FuaW1hdGlvblV0aWxzIG1GbGluZ0FuaW1hdGlvblV0aWxzOworICAgIHByaXZhdGUgRGl2aWRlclNuYXBBbGdvcml0aG0gbVNuYXBBbGdvcml0aG07CisgICAgcHJpdmF0ZSBmaW5hbCBSZWN0IG1TdGFibGVJbnNldHMgPSBuZXcgUmVjdCgpOwogCiAgICAgcHVibGljIERpdmlkZXJWaWV3KENvbnRleHQgY29udGV4dCkgewogICAgICAgICBzdXBlcihjb250ZXh0KTsKQEAgLTEwMyw3ICsxMjcsNyBAQAogICAgIEBPdmVycmlkZQogICAgIHByb3RlY3RlZCB2b2lkIG9uRmluaXNoSW5mbGF0ZSgpIHsKICAgICAgICAgc3VwZXIub25GaW5pc2hJbmZsYXRlKCk7Ci0gICAgICAgIG1IYW5kbGUgPSAoSW1hZ2VCdXR0b24pIGZpbmRWaWV3QnlJZChSLmlkLmRvY2tlZF9kaXZpZGVyX2hhbmRsZSk7CisgICAgICAgIG1IYW5kbGUgPSAoRGl2aWRlckhhbmRsZVZpZXcpIGZpbmRWaWV3QnlJZChSLmlkLmRvY2tlZF9kaXZpZGVyX2hhbmRsZSk7CiAgICAgICAgIG1CYWNrZ3JvdW5kID0gZmluZFZpZXdCeUlkKFIuaWQuZG9ja2VkX2RpdmlkZXJfYmFja2dyb3VuZCk7CiAgICAgICAgIG1IYW5kbGUuc2V0T25Ub3VjaExpc3RlbmVyKHRoaXMpOwogICAgICAgICBtRGl2aWRlcldpbmRvd1dpZHRoID0gZ2V0UmVzb3VyY2VzKCkuZ2V0RGltZW5zaW9uUGl4ZWxTaXplKApAQCAtMTE1LDYgKzEzOSw3IEBACiAgICAgICAgICAgICAgICAgUi5kaW1lbi5kb2NrZWRfc3RhY2tfZGl2aWRlcl9saWZ0X2VsZXZhdGlvbik7CiAgICAgICAgIG1GYXN0T3V0U2xvd0luSW50ZXJwb2xhdG9yID0gQW5pbWF0aW9uVXRpbHMubG9hZEludGVycG9sYXRvcihnZXRDb250ZXh0KCksCiAgICAgICAgICAgICAgICAgYW5kcm9pZC5SLmludGVycG9sYXRvci5mYXN0X291dF9zbG93X2luKTsKKyAgICAgICAgbVRvdWNoU2xvcCA9IFZpZXdDb25maWd1cmF0aW9uLmdldChtQ29udGV4dCkuZ2V0U2NhbGVkVG91Y2hTbG9wKCk7CiAgICAgICAgIG1GbGluZ0FuaW1hdGlvblV0aWxzID0gbmV3IEZsaW5nQW5pbWF0aW9uVXRpbHMoZ2V0Q29udGV4dCgpLCAwLjNmKTsKICAgICAgICAgdXBkYXRlRGlzcGxheUluZm8oKTsKICAgICAgICAgYm9vbGVhbiBsYW5kc2NhcGUgPSBnZXRSZXNvdXJjZXMoKS5nZXRDb25maWd1cmF0aW9uKCkub3JpZW50YXRpb24KQEAgLTEyNCw2ICsxNDksMTMgQEAKICAgICAgICAgZ2V0Vmlld1RyZWVPYnNlcnZlcigpLmFkZE9uQ29tcHV0ZUludGVybmFsSW5zZXRzTGlzdGVuZXIodGhpcyk7CiAgICAgfQogCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFdpbmRvd0luc2V0cyBvbkFwcGx5V2luZG93SW5zZXRzKFdpbmRvd0luc2V0cyBpbnNldHMpIHsKKyAgICAgICAgbVN0YWJsZUluc2V0cy5zZXQoaW5zZXRzLmdldFN0YWJsZUluc2V0TGVmdCgpLCBpbnNldHMuZ2V0U3RhYmxlSW5zZXRUb3AoKSwKKyAgICAgICAgICAgICAgICBpbnNldHMuZ2V0U3RhYmxlSW5zZXRSaWdodCgpLCBpbnNldHMuZ2V0U3RhYmxlSW5zZXRCb3R0b20oKSk7CisgICAgICAgIHJldHVybiBzdXBlci5vbkFwcGx5V2luZG93SW5zZXRzKGluc2V0cyk7CisgICAgfQorCiAgICAgcHVibGljIHZvaWQgc2V0V2luZG93TWFuYWdlcihEaXZpZGVyV2luZG93TWFuYWdlciB3aW5kb3dNYW5hZ2VyKSB7CiAgICAgICAgIG1XaW5kb3dNYW5hZ2VyID0gd2luZG93TWFuYWdlcjsKICAgICB9CkBAIC0xMzIsOCArMTY0LDExIEBACiAgICAgICAgIHJldHVybiBtV2luZG93TWFuYWdlclByb3h5OwogICAgIH0KIAotICAgIHB1YmxpYyBib29sZWFuIHN0YXJ0RHJhZ2dpbmcoKSB7CisgICAgcHVibGljIGJvb2xlYW4gc3RhcnREcmFnZ2luZyhib29sZWFuIGFuaW1hdGUpIHsKKyAgICAgICAgbUhhbmRsZS5zZXRUb3VjaGluZyh0cnVlLCBhbmltYXRlKTsKICAgICAgICAgbURvY2tTaWRlID0gbVdpbmRvd01hbmFnZXJQcm94eS5nZXREb2NrU2lkZSgpOworICAgICAgICBtU25hcEFsZ29yaXRobSA9IG5ldyBEaXZpZGVyU25hcEFsZ29yaXRobShnZXRDb250ZXh0KCksIG1GbGluZ0FuaW1hdGlvblV0aWxzLCBtRGlzcGxheVdpZHRoLAorICAgICAgICAgICAgICAgIG1EaXNwbGF5SGVpZ2h0LCBtRGl2aWRlclNpemUsIGlzSG9yaXpvbnRhbERpdmlzaW9uKCksIG1TdGFibGVJbnNldHMpOwogICAgICAgICBpZiAobURvY2tTaWRlICE9IFdpbmRvd01hbmFnZXIuRE9DS0VEX0lOVkFMSUQpIHsKICAgICAgICAgICAgIG1XaW5kb3dNYW5hZ2VyUHJveHkuc2V0UmVzaXppbmcodHJ1ZSk7CiAgICAgICAgICAgICBtV2luZG93TWFuYWdlci5zZXRTbGlwcGVyeShmYWxzZSk7CkBAIC0xNDUsMTEgKzE4MCwxNiBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHN0b3BEcmFnZ2luZyhpbnQgcG9zaXRpb24sIGZsb2F0IHZlbG9jaXR5KSB7CisgICAgICAgIG1IYW5kbGUuc2V0VG91Y2hpbmcoZmFsc2UsIHRydWUgLyogYW5pbWF0ZSAqLyk7CiAgICAgICAgIGZsaW5nKHBvc2l0aW9uLCB2ZWxvY2l0eSk7CiAgICAgICAgIG1XaW5kb3dNYW5hZ2VyLnNldFNsaXBwZXJ5KHRydWUpOwogICAgICAgICByZWxlYXNlQmFja2dyb3VuZCgpOwogICAgIH0KIAorICAgIHB1YmxpYyBEaXZpZGVyU25hcEFsZ29yaXRobSBnZXRTbmFwQWxnb3JpdGhtKCkgeworICAgICAgICByZXR1cm4gbVNuYXBBbGdvcml0aG07CisgICAgfQorCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGJvb2xlYW4gb25Ub3VjaChWaWV3IHYsIE1vdGlvbkV2ZW50IGV2ZW50KSB7CiAgICAgICAgIGNvbnZlcnRUb1NjcmVlbkNvb3JkaW5hdGVzKGV2ZW50KTsKQEAgLTE2MSwxOSArMjAxLDMxIEBACiAgICAgICAgICAgICAgICAgbVN0YXJ0WCA9IChpbnQpIGV2ZW50LmdldFgoKTsKICAgICAgICAgICAgICAgICBtU3RhcnRZID0gKGludCkgZXZlbnQuZ2V0WSgpOwogICAgICAgICAgICAgICAgIGdldExvY2F0aW9uT25TY3JlZW4obVRlbXBJbnQyKTsKLSAgICAgICAgICAgICAgICBib29sZWFuIHJlc3VsdCA9IHN0YXJ0RHJhZ2dpbmcoKTsKKyAgICAgICAgICAgICAgICBib29sZWFuIHJlc3VsdCA9IHN0YXJ0RHJhZ2dpbmcodHJ1ZSAvKiBhbmltYXRlICovKTsKICAgICAgICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsRGl2aXNpb24oKSkgewogICAgICAgICAgICAgICAgICAgICBtU3RhcnRQb3NpdGlvbiA9IG1UZW1wSW50MlsxXSArIG1EaXZpZGVySW5zZXRzOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIG1TdGFydFBvc2l0aW9uID0gbVRlbXBJbnQyWzBdICsgbURpdmlkZXJJbnNldHM7CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1Nb3ZpbmcgPSBmYWxzZTsKICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgY2FzZSBNb3Rpb25FdmVudC5BQ1RJT05fTU9WRToKICAgICAgICAgICAgICAgICBtVmVsb2NpdHlUcmFja2VyLmFkZE1vdmVtZW50KGV2ZW50KTsKICAgICAgICAgICAgICAgICBpbnQgeCA9IChpbnQpIGV2ZW50LmdldFgoKTsKICAgICAgICAgICAgICAgICBpbnQgeSA9IChpbnQpIGV2ZW50LmdldFkoKTsKLSAgICAgICAgICAgICAgICBpZiAobURvY2tTaWRlICE9IFdpbmRvd01hbmFnZXIuRE9DS0VEX0lOVkFMSUQpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzaXplU3RhY2soY2FsY3VsYXRlUG9zaXRpb24oeCwgeSkpOworICAgICAgICAgICAgICAgIGJvb2xlYW4gZXhjZWVkZWRUb3VjaFNsb3AgPQorICAgICAgICAgICAgICAgICAgICAgICAgaXNIb3Jpem9udGFsRGl2aXNpb24oKSAmJiBNYXRoLmFicyh5IC0gbVN0YXJ0WSkgPiBtVG91Y2hTbG9wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICghaXNIb3Jpem9udGFsRGl2aXNpb24oKSAmJiBNYXRoLmFicyh4IC0gbVN0YXJ0WCkgPiBtVG91Y2hTbG9wKTsKKyAgICAgICAgICAgICAgICBpZiAoIW1Nb3ZpbmcgJiYgZXhjZWVkZWRUb3VjaFNsb3ApIHsKKyAgICAgICAgICAgICAgICAgICAgbVN0YXJ0WCA9IHg7CisgICAgICAgICAgICAgICAgICAgIG1TdGFydFkgPSB5OworICAgICAgICAgICAgICAgICAgICBtTW92aW5nID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG1Nb3ZpbmcgJiYgbURvY2tTaWRlICE9IFdpbmRvd01hbmFnZXIuRE9DS0VEX0lOVkFMSUQpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHBvc2l0aW9uID0gY2FsY3VsYXRlUG9zaXRpb24oeCwgeSk7CisgICAgICAgICAgICAgICAgICAgIFNuYXBUYXJnZXQgc25hcFRhcmdldCA9IG1TbmFwQWxnb3JpdGhtLmNhbGN1bGF0ZVNuYXBUYXJnZXQocG9zaXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAvKiB2ZWxvY2l0eSAqLyk7CisgICAgICAgICAgICAgICAgICAgIHJlc2l6ZVN0YWNrKGNhbGN1bGF0ZVBvc2l0aW9uKHgsIHkpLCBzbmFwVGFyZ2V0LnBvc2l0aW9uLCBzbmFwVGFyZ2V0KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIE1vdGlvbkV2ZW50LkFDVElPTl9VUDoKQEAgLTE4Nyw2ICsyMzksNyBAQAogICAgICAgICAgICAgICAgIGludCBwb3NpdGlvbiA9IGNhbGN1bGF0ZVBvc2l0aW9uKHgsIHkpOwogICAgICAgICAgICAgICAgIHN0b3BEcmFnZ2luZyhwb3NpdGlvbiwgaXNIb3Jpem9udGFsRGl2aXNpb24oKSA/IG1WZWxvY2l0eVRyYWNrZXIuZ2V0WVZlbG9jaXR5KCkKICAgICAgICAgICAgICAgICAgICAgICAgIDogbVZlbG9jaXR5VHJhY2tlci5nZXRYVmVsb2NpdHkoKSk7CisgICAgICAgICAgICAgICAgbU1vdmluZyA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTk3LDE0ICsyNTAsMTYgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgZmxpbmcoaW50IHBvc2l0aW9uLCBmbG9hdCB2ZWxvY2l0eSkgewotICAgICAgICBmaW5hbCBTbmFwVGFyZ2V0IHNuYXBUYXJnZXQgPSBuZXcgRGl2aWRlclNuYXBBbGdvcml0aG0oZ2V0Q29udGV4dCgpLCBtRmxpbmdBbmltYXRpb25VdGlscywKLSAgICAgICAgICAgICAgICBtRGl2aWRlclNpemUsIGlzSG9yaXpvbnRhbERpdmlzaW9uKCkpLmNhbGN1bGF0ZVNuYXBUYXJnZXQocG9zaXRpb24sIHZlbG9jaXR5KTsKKyAgICAgICAgZmluYWwgU25hcFRhcmdldCBzbmFwVGFyZ2V0ID0gbVNuYXBBbGdvcml0aG0uY2FsY3VsYXRlU25hcFRhcmdldChwb3NpdGlvbiwgdmVsb2NpdHkpOwogCiAgICAgICAgIFZhbHVlQW5pbWF0b3IgYW5pbSA9IFZhbHVlQW5pbWF0b3Iub2ZJbnQocG9zaXRpb24sIHNuYXBUYXJnZXQucG9zaXRpb24pOwogICAgICAgICBhbmltLmFkZFVwZGF0ZUxpc3RlbmVyKG5ldyBBbmltYXRvclVwZGF0ZUxpc3RlbmVyKCkgewogICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkFuaW1hdGlvblVwZGF0ZShWYWx1ZUFuaW1hdG9yIGFuaW1hdGlvbikgewotICAgICAgICAgICAgICAgIHJlc2l6ZVN0YWNrKChJbnRlZ2VyKSBhbmltYXRpb24uZ2V0QW5pbWF0ZWRWYWx1ZSgpKTsKKyAgICAgICAgICAgICAgICByZXNpemVTdGFjaygoSW50ZWdlcikgYW5pbWF0aW9uLmdldEFuaW1hdGVkVmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbi5nZXRBbmltYXRlZEZyYWN0aW9uKCkgPT0gMWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBUQVNLX1BPU0lUSU9OX1NBTUUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzbmFwVGFyZ2V0LnBvc2l0aW9uLCBzbmFwVGFyZ2V0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSk7CiAgICAgICAgIGFuaW0uYWRkTGlzdGVuZXIobmV3IEFuaW1hdG9yTGlzdGVuZXJBZGFwdGVyKCkgewpAQCAtMjM2LDM4ICsyOTEsNDMgQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1XaW5kb3dNYW5hZ2VyUHJveHkubWF4aW1pemVEb2NrZWRTdGFjaygpOwogICAgICAgICB9CisgICAgICAgIG1XaW5kb3dNYW5hZ2VyUHJveHkuc2V0UmVzaXplRGltTGF5ZXIoZmFsc2UsIC0xLCAwZik7CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGxpZnRCYWNrZ3JvdW5kKCkgewogICAgICAgICBpZiAoaXNIb3Jpem9udGFsRGl2aXNpb24oKSkgewotICAgICAgICAgICAgbUJhY2tncm91bmQuYW5pbWF0ZSgpLnNjYWxlWSgxLjVmKTsKKyAgICAgICAgICAgIG1CYWNrZ3JvdW5kLmFuaW1hdGUoKS5zY2FsZVkoMS40Zik7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtQmFja2dyb3VuZC5hbmltYXRlKCkuc2NhbGVYKDEuNWYpOworICAgICAgICAgICAgbUJhY2tncm91bmQuYW5pbWF0ZSgpLnNjYWxlWCgxLjRmKTsKICAgICAgICAgfQogICAgICAgICBtQmFja2dyb3VuZC5hbmltYXRlKCkKLSAgICAgICAgICAgICAgICAuc2V0SW50ZXJwb2xhdG9yKG1Ub3VjaFJlc3BvbnNlSW50ZXJwb2xhdG9yKQotICAgICAgICAgICAgICAgIC5zZXREdXJhdGlvbigxNTApCi0gICAgICAgICAgICAgICAgLnRyYW5zbGF0aW9uWihtVG91Y2hFbGV2YXRpb24pOworICAgICAgICAgICAgICAgIC5zZXRJbnRlcnBvbGF0b3IoVE9VQ0hfUkVTUE9OU0VfSU5URVJQT0xBVE9SKQorICAgICAgICAgICAgICAgIC5zZXREdXJhdGlvbihUT1VDSF9BTklNQVRJT05fRFVSQVRJT04pCisgICAgICAgICAgICAgICAgLnRyYW5zbGF0aW9uWihtVG91Y2hFbGV2YXRpb24pCisgICAgICAgICAgICAgICAgLnN0YXJ0KCk7CiAKICAgICAgICAgLy8gTGlmdCBoYW5kbGUgYXMgd2VsbCBzbyBpdCBkb2Vzbid0IGdldCBiZWhpbmQgdGhlIGJhY2tncm91bmQsIGV2ZW4gdGhvdWdoIGl0IGRvZXNuJ3QKICAgICAgICAgLy8gY2FzdCBzaGFkb3cuCiAgICAgICAgIG1IYW5kbGUuYW5pbWF0ZSgpCi0gICAgICAgICAgICAgICAgLnNldEludGVycG9sYXRvcihtVG91Y2hSZXNwb25zZUludGVycG9sYXRvcikKLSAgICAgICAgICAgICAgICAuc2V0RHVyYXRpb24oMTUwKQotICAgICAgICAgICAgICAgIC50cmFuc2xhdGlvbloobVRvdWNoRWxldmF0aW9uKTsKKyAgICAgICAgICAgICAgICAuc2V0SW50ZXJwb2xhdG9yKFRPVUNIX1JFU1BPTlNFX0lOVEVSUE9MQVRPUikKKyAgICAgICAgICAgICAgICAuc2V0RHVyYXRpb24oVE9VQ0hfQU5JTUFUSU9OX0RVUkFUSU9OKQorICAgICAgICAgICAgICAgIC50cmFuc2xhdGlvbloobVRvdWNoRWxldmF0aW9uKQorICAgICAgICAgICAgICAgIC5zdGFydCgpOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCByZWxlYXNlQmFja2dyb3VuZCgpIHsKICAgICAgICAgbUJhY2tncm91bmQuYW5pbWF0ZSgpCiAgICAgICAgICAgICAgICAgLnNldEludGVycG9sYXRvcihtRmFzdE91dFNsb3dJbkludGVycG9sYXRvcikKLSAgICAgICAgICAgICAgICAuc2V0RHVyYXRpb24oMjAwKQorICAgICAgICAgICAgICAgIC5zZXREdXJhdGlvbihUT1VDSF9SRUxFQVNFX0FOSU1BVElPTl9EVVJBVElPTikKICAgICAgICAgICAgICAgICAudHJhbnNsYXRpb25aKDApCiAgICAgICAgICAgICAgICAgLnNjYWxlWCgxZikKLSAgICAgICAgICAgICAgICAuc2NhbGVZKDFmKTsKKyAgICAgICAgICAgICAgICAuc2NhbGVZKDFmKQorICAgICAgICAgICAgICAgIC5zdGFydCgpOwogICAgICAgICBtSGFuZGxlLmFuaW1hdGUoKQogICAgICAgICAgICAgICAgIC5zZXRJbnRlcnBvbGF0b3IobUZhc3RPdXRTbG93SW5JbnRlcnBvbGF0b3IpCi0gICAgICAgICAgICAgICAgLnNldER1cmF0aW9uKDIwMCkKLSAgICAgICAgICAgICAgICAudHJhbnNsYXRpb25aKDApOworICAgICAgICAgICAgICAgIC5zZXREdXJhdGlvbihUT1VDSF9SRUxFQVNFX0FOSU1BVElPTl9EVVJBVElPTikKKyAgICAgICAgICAgICAgICAudHJhbnNsYXRpb25aKDApCisgICAgICAgICAgICAgICAgLnN0YXJ0KCk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCkBAIC0zMzIsMTcgKzM5MiwxODQgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHJlc2l6ZVN0YWNrKGludCBwb3NpdGlvbikgewotICAgICAgICBjYWxjdWxhdGVCb3VuZHNGb3JQb3NpdGlvbihwb3NpdGlvbiwgbURvY2tTaWRlLCBtVG1wUmVjdCk7Ci0gICAgICAgIGlmIChtVG1wUmVjdC5lcXVhbHMobUxhc3RSZXNpemVSZWN0KSkgeworICAgIHByaXZhdGUgaW50IGludmVydERvY2tTaWRlKGludCBkb2NrU2lkZSkgeworICAgICAgICBzd2l0Y2ggKGRvY2tTaWRlKSB7CisgICAgICAgICAgICBjYXNlIFdpbmRvd01hbmFnZXIuRE9DS0VEX0xFRlQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIFdpbmRvd01hbmFnZXIuRE9DS0VEX1JJR0hUOworICAgICAgICAgICAgY2FzZSBXaW5kb3dNYW5hZ2VyLkRPQ0tFRF9UT1A6CisgICAgICAgICAgICAgICAgcmV0dXJuIFdpbmRvd01hbmFnZXIuRE9DS0VEX0JPVFRPTTsKKyAgICAgICAgICAgIGNhc2UgV2luZG93TWFuYWdlci5ET0NLRURfUklHSFQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIFdpbmRvd01hbmFnZXIuRE9DS0VEX0xFRlQ7CisgICAgICAgICAgICBjYXNlIFdpbmRvd01hbmFnZXIuRE9DS0VEX0JPVFRPTToKKyAgICAgICAgICAgICAgICByZXR1cm4gV2luZG93TWFuYWdlci5ET0NLRURfVE9QOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gV2luZG93TWFuYWdlci5ET0NLRURfSU5WQUxJRDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBhbGlnblRvcExlZnQoUmVjdCBjb250YWluaW5nUmVjdCwgUmVjdCByZWN0KSB7CisgICAgICAgIGludCB3aWR0aCA9IHJlY3Qud2lkdGgoKTsKKyAgICAgICAgaW50IGhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7CisgICAgICAgIHJlY3Quc2V0KGNvbnRhaW5pbmdSZWN0LmxlZnQsIGNvbnRhaW5pbmdSZWN0LnRvcCwKKyAgICAgICAgICAgICAgICBjb250YWluaW5nUmVjdC5sZWZ0ICsgd2lkdGgsIGNvbnRhaW5pbmdSZWN0LnRvcCArIGhlaWdodCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGFsaWduQm90dG9tUmlnaHQoUmVjdCBjb250YWluaW5nUmVjdCwgUmVjdCByZWN0KSB7CisgICAgICAgIGludCB3aWR0aCA9IHJlY3Qud2lkdGgoKTsKKyAgICAgICAgaW50IGhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7CisgICAgICAgIHJlY3Quc2V0KGNvbnRhaW5pbmdSZWN0LnJpZ2h0IC0gd2lkdGgsIGNvbnRhaW5pbmdSZWN0LmJvdHRvbSAtIGhlaWdodCwKKyAgICAgICAgICAgICAgICBjb250YWluaW5nUmVjdC5yaWdodCwgY29udGFpbmluZ1JlY3QuYm90dG9tKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCByZXNpemVTdGFjayhpbnQgcG9zaXRpb24sIGludCB0YXNrUG9zaXRpb24sIFNuYXBUYXJnZXQgdGFza1NuYXBUYXJnZXQpIHsKKyAgICAgICAgY2FsY3VsYXRlQm91bmRzRm9yUG9zaXRpb24ocG9zaXRpb24sIG1Eb2NrU2lkZSwgbURvY2tlZFJlY3QpOworCisgICAgICAgIGlmIChtRG9ja2VkUmVjdC5lcXVhbHMobUxhc3RSZXNpemVSZWN0KSkgewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgLy8gTWFrZSBzdXJlIHNoYWRvd3MgYXJlIHVwZGF0ZWQKICAgICAgICAgbUJhY2tncm91bmQuaW52YWxpZGF0ZSgpOwogCi0gICAgICAgIG1MYXN0UmVzaXplUmVjdC5zZXQobVRtcFJlY3QpOwotICAgICAgICBtV2luZG93TWFuYWdlclByb3h5LnJlc2l6ZURvY2tlZFN0YWNrKG1UbXBSZWN0KTsKKyAgICAgICAgbUxhc3RSZXNpemVSZWN0LnNldChtRG9ja2VkUmVjdCk7CisgICAgICAgIGlmICh0YXNrUG9zaXRpb24gIT0gVEFTS19QT1NJVElPTl9TQU1FKSB7CisgICAgICAgICAgICBjYWxjdWxhdGVCb3VuZHNGb3JQb3NpdGlvbihwb3NpdGlvbiwgaW52ZXJ0RG9ja1NpZGUobURvY2tTaWRlKSwgbU90aGVyUmVjdCk7CisgICAgICAgICAgICBpbnQgZG9ja1NpZGVJbnZlcnRlZCA9IGludmVydERvY2tTaWRlKG1Eb2NrU2lkZSk7CisgICAgICAgICAgICBpbnQgdGFza1Bvc2l0aW9uRG9ja2VkID0KKyAgICAgICAgICAgICAgICAgICAgcmVzdHJpY3REaXNtaXNzaW5nVGFza1Bvc2l0aW9uKHRhc2tQb3NpdGlvbiwgbURvY2tTaWRlLCB0YXNrU25hcFRhcmdldCk7CisgICAgICAgICAgICBpbnQgdGFza1Bvc2l0aW9uT3RoZXIgPQorICAgICAgICAgICAgICAgICAgICByZXN0cmljdERpc21pc3NpbmdUYXNrUG9zaXRpb24odGFza1Bvc2l0aW9uLCBkb2NrU2lkZUludmVydGVkLCB0YXNrU25hcFRhcmdldCk7CisgICAgICAgICAgICBjYWxjdWxhdGVCb3VuZHNGb3JQb3NpdGlvbih0YXNrUG9zaXRpb25Eb2NrZWQsIG1Eb2NrU2lkZSwgbURvY2tlZFRhc2tSZWN0KTsKKyAgICAgICAgICAgIGNhbGN1bGF0ZUJvdW5kc0ZvclBvc2l0aW9uKHRhc2tQb3NpdGlvbk90aGVyLCBkb2NrU2lkZUludmVydGVkLCBtT3RoZXJUYXNrUmVjdCk7CisgICAgICAgICAgICBhbGlnblRvcExlZnQobURvY2tlZFJlY3QsIG1Eb2NrZWRUYXNrUmVjdCk7CisgICAgICAgICAgICBhbGlnblRvcExlZnQobU90aGVyUmVjdCwgbU90aGVyVGFza1JlY3QpOworICAgICAgICAgICAgbURvY2tlZEluc2V0UmVjdC5zZXQobURvY2tlZFRhc2tSZWN0KTsKKyAgICAgICAgICAgIG1PdGhlckluc2V0UmVjdC5zZXQobU90aGVyVGFza1JlY3QpOworICAgICAgICAgICAgaWYgKGRvY2tTaWRlVG9wTGVmdChtRG9ja1NpZGUpKSB7CisgICAgICAgICAgICAgICAgYWxpZ25Ub3BMZWZ0KG1Eb2NrZWRSZWN0LCBtRG9ja2VkSW5zZXRSZWN0KTsKKyAgICAgICAgICAgICAgICBhbGlnbkJvdHRvbVJpZ2h0KG1PdGhlclJlY3QsIG1PdGhlckluc2V0UmVjdCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGFsaWduQm90dG9tUmlnaHQobURvY2tlZFJlY3QsIG1Eb2NrZWRJbnNldFJlY3QpOworICAgICAgICAgICAgICAgIGFsaWduVG9wTGVmdChtT3RoZXJSZWN0LCBtT3RoZXJJbnNldFJlY3QpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXBwbHlEaXNtaXNzaW5nUGFyYWxsYXgobURvY2tlZFRhc2tSZWN0LCBtRG9ja1NpZGUsIHRhc2tTbmFwVGFyZ2V0LCBwb3NpdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgdGFza1Bvc2l0aW9uRG9ja2VkKTsKKyAgICAgICAgICAgIGFwcGx5RGlzbWlzc2luZ1BhcmFsbGF4KG1PdGhlclRhc2tSZWN0LCBkb2NrU2lkZUludmVydGVkLCB0YXNrU25hcFRhcmdldCwgcG9zaXRpb24sCisgICAgICAgICAgICAgICAgICAgIHRhc2tQb3NpdGlvbk90aGVyKTsKKyAgICAgICAgICAgIG1XaW5kb3dNYW5hZ2VyUHJveHkucmVzaXplRG9ja2VkU3RhY2sobURvY2tlZFJlY3QsIG1Eb2NrZWRUYXNrUmVjdCwgbURvY2tlZEluc2V0UmVjdCwKKyAgICAgICAgICAgICAgICAgICAgbU90aGVyVGFza1JlY3QsIG1PdGhlckluc2V0UmVjdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtV2luZG93TWFuYWdlclByb3h5LnJlc2l6ZURvY2tlZFN0YWNrKG1Eb2NrZWRSZWN0LCBudWxsLCBudWxsLCBudWxsLCBudWxsKTsKKyAgICAgICAgfQorICAgICAgICBmbG9hdCBmcmFjdGlvbiA9IG1TbmFwQWxnb3JpdGhtLmNhbGN1bGF0ZURpc21pc3NpbmdGcmFjdGlvbihwb3NpdGlvbik7CisgICAgICAgIGZyYWN0aW9uID0gTWF0aC5tYXgoMCwKKyAgICAgICAgICAgICAgICBNYXRoLm1pbigoZnJhY3Rpb24gLyBESU1fU1RBUlRfRlJBQ1RJT04gLSAxZikgLyBESU1fREFNUF9GQUNUT1IsIDFmKSk7CisgICAgICAgIG1XaW5kb3dNYW5hZ2VyUHJveHkuc2V0UmVzaXplRGltTGF5ZXIoZnJhY3Rpb24gIT0gMGYsCisgICAgICAgICAgICAgICAgZ2V0U3RhY2tJZEZvckRpc21pc3NUYXJnZXQobVNuYXBBbGdvcml0aG0uZ2V0Q2xvc2VzdERpc21pc3NUYXJnZXQocG9zaXRpb24pKSwKKyAgICAgICAgICAgICAgICBmcmFjdGlvbik7CisgICAgfQorCisgICAgLyoqCisgICAgICogV2hlbiB0aGUgc25hcCB0YXJnZXQgaXMgZGlzbWlzc2luZyBvbmUgc2lkZSwgbWFrZSBzdXJlIHRoYXQgdGhlIGRpc21pc3Npbmcgc2lkZSBkb2Vzbid0IGdldAorICAgICAqIDAgc2l6ZS4KKyAgICAgKi8KKyAgICBwcml2YXRlIGludCByZXN0cmljdERpc21pc3NpbmdUYXNrUG9zaXRpb24oaW50IHRhc2tQb3NpdGlvbiwgaW50IGRvY2tTaWRlLAorICAgICAgICAgICAgU25hcFRhcmdldCBzbmFwVGFyZ2V0KSB7CisgICAgICAgIGlmIChzbmFwVGFyZ2V0LmZsYWcgPT0gU25hcFRhcmdldC5GTEFHX0RJU01JU1NfU1RBUlQgJiYgZG9ja1NpZGVUb3BMZWZ0KGRvY2tTaWRlKSkgeworICAgICAgICAgICAgcmV0dXJuIG1TbmFwQWxnb3JpdGhtLmdldEZpcnN0U3BsaXRUYXJnZXQoKS5wb3NpdGlvbjsKKyAgICAgICAgfSBlbHNlIGlmIChzbmFwVGFyZ2V0LmZsYWcgPT0gU25hcFRhcmdldC5GTEFHX0RJU01JU1NfRU5ECisgICAgICAgICAgICAgICAgJiYgZG9ja1NpZGVCb3R0b21SaWdodChkb2NrU2lkZSkpIHsKKyAgICAgICAgICAgIHJldHVybiBtU25hcEFsZ29yaXRobS5nZXRMYXN0U3BsaXRUYXJnZXQoKS5wb3NpdGlvbjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiB0YXNrUG9zaXRpb247CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBcHBsaWVzIGEgcGFyYWxsYXggdG8gdGhlIHRhc2sgd2hlbiBkaXNtaXNzaW5nLgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCBhcHBseURpc21pc3NpbmdQYXJhbGxheChSZWN0IHRhc2tSZWN0LCBpbnQgZG9ja1NpZGUsIFNuYXBUYXJnZXQgc25hcFRhcmdldCwKKyAgICAgICAgICAgIGludCBwb3NpdGlvbiwgaW50IHRhc2tQb3NpdGlvbikgeworICAgICAgICBmbG9hdCBmcmFjdGlvbiA9IE1hdGgubWluKDEsIE1hdGgubWF4KDAsCisgICAgICAgICAgICAgICAgbVNuYXBBbGdvcml0aG0uY2FsY3VsYXRlRGlzbWlzc2luZ0ZyYWN0aW9uKHBvc2l0aW9uKSkpOworICAgICAgICBTbmFwVGFyZ2V0IGRpc21pc3NUYXJnZXQgPSBudWxsOworICAgICAgICBTbmFwVGFyZ2V0IHNwbGl0VGFyZ2V0ID0gbnVsbDsKKyAgICAgICAgaWYgKChzbmFwVGFyZ2V0LmZsYWcgPT0gU25hcFRhcmdldC5GTEFHX0RJU01JU1NfU1RBUlQKKyAgICAgICAgICAgICAgICB8fCBzbmFwVGFyZ2V0ID09IG1TbmFwQWxnb3JpdGhtLmdldEZpcnN0U3BsaXRUYXJnZXQoKSkKKyAgICAgICAgICAgICAgICAmJiBkb2NrU2lkZVRvcExlZnQoZG9ja1NpZGUpKSB7CisgICAgICAgICAgICBkaXNtaXNzVGFyZ2V0ID0gbVNuYXBBbGdvcml0aG0uZ2V0RGlzbWlzc1N0YXJ0VGFyZ2V0KCk7CisgICAgICAgICAgICBzcGxpdFRhcmdldCA9IG1TbmFwQWxnb3JpdGhtLmdldEZpcnN0U3BsaXRUYXJnZXQoKTsKKyAgICAgICAgfSBlbHNlIGlmICgoc25hcFRhcmdldC5mbGFnID09IFNuYXBUYXJnZXQuRkxBR19ESVNNSVNTX0VORAorICAgICAgICAgICAgICAgIHx8IHNuYXBUYXJnZXQgPT0gbVNuYXBBbGdvcml0aG0uZ2V0TGFzdFNwbGl0VGFyZ2V0KCkpCisgICAgICAgICAgICAgICAgJiYgZG9ja1NpZGVCb3R0b21SaWdodChkb2NrU2lkZSkpIHsKKyAgICAgICAgICAgIGRpc21pc3NUYXJnZXQgPSBtU25hcEFsZ29yaXRobS5nZXREaXNtaXNzRW5kVGFyZ2V0KCk7CisgICAgICAgICAgICBzcGxpdFRhcmdldCA9IG1TbmFwQWxnb3JpdGhtLmdldExhc3RTcGxpdFRhcmdldCgpOworICAgICAgICB9CisgICAgICAgIGlmIChkaXNtaXNzVGFyZ2V0ICE9IG51bGwgJiYgZnJhY3Rpb24gPiAwZgorICAgICAgICAgICAgICAgICYmIGlzRGlzbWlzc2luZyhzcGxpdFRhcmdldCwgcG9zaXRpb24sIGRvY2tTaWRlKSkgeworICAgICAgICAgICAgZnJhY3Rpb24gPSBjYWxjdWxhdGVQYXJhbGxheERpc21pc3NpbmdGcmFjdGlvbihmcmFjdGlvbik7CisgICAgICAgICAgICBpbnQgb2Zmc2V0UG9zaXRpb24gPSAoaW50KSAodGFza1Bvc2l0aW9uICsKKyAgICAgICAgICAgICAgICAgICAgZnJhY3Rpb24gKiAoZGlzbWlzc1RhcmdldC5wb3NpdGlvbiAtIHNwbGl0VGFyZ2V0LnBvc2l0aW9uKSk7CisgICAgICAgICAgICBpbnQgd2lkdGggPSB0YXNrUmVjdC53aWR0aCgpOworICAgICAgICAgICAgaW50IGhlaWdodCA9IHRhc2tSZWN0LmhlaWdodCgpOworICAgICAgICAgICAgc3dpdGNoIChkb2NrU2lkZSkgeworICAgICAgICAgICAgICAgIGNhc2UgV2luZG93TWFuYWdlci5ET0NLRURfTEVGVDoKKyAgICAgICAgICAgICAgICAgICAgdGFza1JlY3QubGVmdCA9IG9mZnNldFBvc2l0aW9uIC0gd2lkdGg7CisgICAgICAgICAgICAgICAgICAgIHRhc2tSZWN0LnJpZ2h0ID0gb2Zmc2V0UG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgV2luZG93TWFuYWdlci5ET0NLRURfUklHSFQ6CisgICAgICAgICAgICAgICAgICAgIHRhc2tSZWN0LmxlZnQgPSBvZmZzZXRQb3NpdGlvbiArIG1EaXZpZGVyU2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgdGFza1JlY3QucmlnaHQgPSBvZmZzZXRQb3NpdGlvbiArIHdpZHRoICsgbURpdmlkZXJTaXplOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdpbmRvd01hbmFnZXIuRE9DS0VEX1RPUDoKKyAgICAgICAgICAgICAgICAgICAgdGFza1JlY3QudG9wID0gb2Zmc2V0UG9zaXRpb24gLSBoZWlnaHQ7CisgICAgICAgICAgICAgICAgICAgIHRhc2tSZWN0LmJvdHRvbSA9IG9mZnNldFBvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdpbmRvd01hbmFnZXIuRE9DS0VEX0JPVFRPTToKKyAgICAgICAgICAgICAgICAgICAgdGFza1JlY3QudG9wID0gb2Zmc2V0UG9zaXRpb24gKyBtRGl2aWRlclNpemU7CisgICAgICAgICAgICAgICAgICAgIHRhc2tSZWN0LmJvdHRvbSA9IG9mZnNldFBvc2l0aW9uICsgaGVpZ2h0ICsgbURpdmlkZXJTaXplOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEByZXR1cm4gZm9yIGEgc3BlY2lmaWVkIHtAY29kZSBmcmFjdGlvbn0sIHRoaXMgcmV0dXJucyBhbiBhZGp1c3RlZCB2YWx1ZSB0aGF0IHNpbXVsYXRlcyBhCisgICAgICogICAgICAgICBzbG93aW5nIGRvd24gcGFyYWxsYXggZWZmZWN0CisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmxvYXQgY2FsY3VsYXRlUGFyYWxsYXhEaXNtaXNzaW5nRnJhY3Rpb24oZmxvYXQgZnJhY3Rpb24pIHsKKyAgICAgICAgcmV0dXJuIFNMT1dET1dOX0lOVEVSUE9MQVRPUi5nZXRJbnRlcnBvbGF0aW9uKGZyYWN0aW9uKSAvIDMuNWY7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0Rpc21pc3NpbmcoU25hcFRhcmdldCBzbmFwVGFyZ2V0LCBpbnQgcG9zaXRpb24sIGludCBkb2NrU2lkZSkgeworICAgICAgICBpZiAoZG9ja1NpZGUgPT0gV2luZG93TWFuYWdlci5ET0NLRURfVE9QIHx8IGRvY2tTaWRlID09IFdpbmRvd01hbmFnZXIuRE9DS0VEX0xFRlQpIHsKKyAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbiA8IHNuYXBUYXJnZXQucG9zaXRpb247CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gcG9zaXRpb24gPiBzbmFwVGFyZ2V0LnBvc2l0aW9uOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBpbnQgZ2V0U3RhY2tJZEZvckRpc21pc3NUYXJnZXQoU25hcFRhcmdldCBkaXNtaXNzVGFyZ2V0KSB7CisgICAgICAgIGlmIChkaXNtaXNzVGFyZ2V0LmZsYWcgPT0gU25hcFRhcmdldC5GTEFHX0RJU01JU1NfU1RBUlQgJiYKKyAgICAgICAgICAgICAgICAobURvY2tTaWRlID09IFdpbmRvd01hbmFnZXIuRE9DS0VEX0xFRlQgfHwgbURvY2tTaWRlID09IFdpbmRvd01hbmFnZXIuRE9DS0VEX1RPUCkpIHsKKyAgICAgICAgICAgIHJldHVybiBTdGFja0lkLkRPQ0tFRF9TVEFDS19JRDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBTdGFja0lkLkZVTExTQ1JFRU5fV09SS1NQQUNFX1NUQUNLX0lEOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQHJldHVybiB0cnVlIGlmIGFuZCBvbmx5IGlmIHtAY29kZSBkb2NrU2lkZX0gaXMgdG9wIG9yIGxlZnQKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGRvY2tTaWRlVG9wTGVmdChpbnQgZG9ja1NpZGUpIHsKKyAgICAgICAgcmV0dXJuIGRvY2tTaWRlID09IFdpbmRvd01hbmFnZXIuRE9DS0VEX1RPUCB8fCBkb2NrU2lkZSA9PSBXaW5kb3dNYW5hZ2VyLkRPQ0tFRF9MRUZUOworICAgIH0KKworICAgIC8qKgorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiBhbmQgb25seSBpZiB7QGNvZGUgZG9ja1NpZGV9IGlzIGJvdHRvbSBvciByaWdodAorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gZG9ja1NpZGVCb3R0b21SaWdodChpbnQgZG9ja1NpZGUpIHsKKyAgICAgICAgcmV0dXJuIGRvY2tTaWRlID09IFdpbmRvd01hbmFnZXIuRE9DS0VEX0JPVFRPTSB8fCBkb2NrU2lkZSA9PSBXaW5kb3dNYW5hZ2VyLkRPQ0tFRF9SSUdIVDsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGFja2RpdmlkZXIvRGl2aWRlcldpbmRvd01hbmFnZXIuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGFja2RpdmlkZXIvRGl2aWRlcldpbmRvd01hbmFnZXIuamF2YQppbmRleCAyMjUxODc0Li4xNjFmODczIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhY2tkaXZpZGVyL0RpdmlkZXJXaW5kb3dNYW5hZ2VyLmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YWNrZGl2aWRlci9EaXZpZGVyV2luZG93TWFuYWdlci5qYXZhCkBAIC01MCw2ICs1MCw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICB8IEZMQUdfV0FUQ0hfT1VUU0lERV9UT1VDSCB8IEZMQUdfU1BMSVRfVE9VQ0ggfCBGTEFHX1NMSVBQRVJZLAogICAgICAgICAgICAgICAgIFBpeGVsRm9ybWF0LlRSQU5TTFVDRU5UKTsKICAgICAgICAgbUxwLnNldFRpdGxlKFdJTkRPV19USVRMRSk7CisgICAgICAgIHZpZXcuc2V0U3lzdGVtVWlWaXNpYmlsaXR5KFZpZXcuU1lTVEVNX1VJX0ZMQUdfTEFZT1VUX0ZVTExTQ1JFRU4KKyAgICAgICAgICAgICAgICB8IFZpZXcuU1lTVEVNX1VJX0ZMQUdfTEFZT1VUX0hJREVfTkFWSUdBVElPTgorICAgICAgICAgICAgICAgIHwgVmlldy5TWVNURU1fVUlfRkxBR19MQVlPVVRfU1RBQkxFKTsKICAgICAgICAgbVdpbmRvd01hbmFnZXIuYWRkVmlldyh2aWV3LCBtTHApOwogICAgICAgICBtVmlldyA9IHZpZXc7CiAgICAgfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YWNrZGl2aWRlci9XaW5kb3dNYW5hZ2VyUHJveHkuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGFja2RpdmlkZXIvV2luZG93TWFuYWdlclByb3h5LmphdmEKaW5kZXggZWY0N2Q4ZC4uMjc5MWRmYyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YWNrZGl2aWRlci9XaW5kb3dNYW5hZ2VyUHJveHkuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhY2tkaXZpZGVyL1dpbmRvd01hbmFnZXJQcm94eS5qYXZhCkBAIC00MCwxOCArNDAsNDEgQEAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBXaW5kb3dNYW5hZ2VyUHJveHkgc0luc3RhbmNlID0gbmV3IFdpbmRvd01hbmFnZXJQcm94eSgpOwogCiAgICAgQEd1YXJkZWRCeSgibVJlc2l6ZVJlY3QiKQotICAgIHByaXZhdGUgZmluYWwgUmVjdCBtUmVzaXplUmVjdCA9IG5ldyBSZWN0KCk7Ci0gICAgcHJpdmF0ZSBmaW5hbCBSZWN0IG1UbXBSZWN0ID0gbmV3IFJlY3QoKTsKKyAgICBwcml2YXRlIGZpbmFsIFJlY3QgbURvY2tlZFJlY3QgPSBuZXcgUmVjdCgpOworICAgIHByaXZhdGUgZmluYWwgUmVjdCBtVGVtcERvY2tlZFRhc2tSZWN0ID0gbmV3IFJlY3QoKTsKKyAgICBwcml2YXRlIGZpbmFsIFJlY3QgbVRlbXBEb2NrZWRJbnNldFJlY3QgPSBuZXcgUmVjdCgpOworICAgIHByaXZhdGUgZmluYWwgUmVjdCBtVGVtcE90aGVyVGFza1JlY3QgPSBuZXcgUmVjdCgpOworICAgIHByaXZhdGUgZmluYWwgUmVjdCBtVGVtcE90aGVySW5zZXRSZWN0ID0gbmV3IFJlY3QoKTsKKworICAgIHByaXZhdGUgZmluYWwgUmVjdCBtVG1wUmVjdDEgPSBuZXcgUmVjdCgpOworICAgIHByaXZhdGUgZmluYWwgUmVjdCBtVG1wUmVjdDIgPSBuZXcgUmVjdCgpOworICAgIHByaXZhdGUgZmluYWwgUmVjdCBtVG1wUmVjdDMgPSBuZXcgUmVjdCgpOworICAgIHByaXZhdGUgZmluYWwgUmVjdCBtVG1wUmVjdDQgPSBuZXcgUmVjdCgpOworICAgIHByaXZhdGUgZmluYWwgUmVjdCBtVG1wUmVjdDUgPSBuZXcgUmVjdCgpOworCisgICAgcHJpdmF0ZSBib29sZWFuIG1EaW1MYXllclZpc2libGU7CisgICAgcHJpdmF0ZSBpbnQgbURpbUxheWVyVGFyZ2V0U3RhY2s7CisgICAgcHJpdmF0ZSBmbG9hdCBtRGltTGF5ZXJBbHBoYTsKKwogICAgIHByaXZhdGUgZmluYWwgRXhlY3V0b3JTZXJ2aWNlIG1FeGVjdXRvciA9IEV4ZWN1dG9ycy5uZXdTaW5nbGVUaHJlYWRFeGVjdXRvcigpOwogCiAgICAgcHJpdmF0ZSBmaW5hbCBSdW5uYWJsZSBtUmVzaXplUnVubmFibGUgPSBuZXcgUnVubmFibGUoKSB7CiAgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1SZXNpemVSZWN0KSB7Ci0gICAgICAgICAgICAgICAgbVRtcFJlY3Quc2V0KG1SZXNpemVSZWN0KTsKKyAgICAgICAgICAgIHN5bmNocm9uaXplZCAobURvY2tlZFJlY3QpIHsKKyAgICAgICAgICAgICAgICBtVG1wUmVjdDEuc2V0KG1Eb2NrZWRSZWN0KTsKKyAgICAgICAgICAgICAgICBtVG1wUmVjdDIuc2V0KG1UZW1wRG9ja2VkVGFza1JlY3QpOworICAgICAgICAgICAgICAgIG1UbXBSZWN0My5zZXQobVRlbXBEb2NrZWRJbnNldFJlY3QpOworICAgICAgICAgICAgICAgIG1UbXBSZWN0NC5zZXQobVRlbXBPdGhlclRhc2tSZWN0KTsKKyAgICAgICAgICAgICAgICBtVG1wUmVjdDUuc2V0KG1UZW1wT3RoZXJJbnNldFJlY3QpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBBY3Rpdml0eU1hbmFnZXJOYXRpdmUuZ2V0RGVmYXVsdCgpLnJlc2l6ZVN0YWNrKERPQ0tFRF9TVEFDS19JRCwgbVRtcFJlY3QsIHRydWUpOworICAgICAgICAgICAgICAgIEFjdGl2aXR5TWFuYWdlck5hdGl2ZS5nZXREZWZhdWx0KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5yZXNpemVEb2NrZWRTdGFjayhtVG1wUmVjdDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1UbXBSZWN0Mi5pc0VtcHR5KCkgPyBudWxsIDogbVRtcFJlY3QyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVG1wUmVjdDMuaXNFbXB0eSgpID8gbnVsbCA6IG1UbXBSZWN0MywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRtcFJlY3Q0LmlzRW1wdHkoKSA/IG51bGwgOiBtVG1wUmVjdDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1UbXBSZWN0NS5pc0VtcHR5KCkgPyBudWxsIDogbVRtcFJlY3Q1KTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRvIHJlc2l6ZSBzdGFjazogIiArIGUpOwogICAgICAgICAgICAgfQpAQCAtODAsNiArMTAzLDE4IEBACiAgICAgICAgIH0KICAgICB9OwogCisgICAgcHJpdmF0ZSBmaW5hbCBSdW5uYWJsZSBtRGltTGF5ZXJSdW5uYWJsZSA9IG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgV2luZG93TWFuYWdlckdsb2JhbC5nZXRXaW5kb3dNYW5hZ2VyU2VydmljZSgpLnNldFJlc2l6ZURpbUxheWVyKG1EaW1MYXllclZpc2libGUsCisgICAgICAgICAgICAgICAgICAgICAgICBtRGltTGF5ZXJUYXJnZXRTdGFjaywgbURpbUxheWVyQWxwaGEpOworICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJGYWlsZWQgdG8gcmVzaXplIHN0YWNrOiAiICsgZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCiAgICAgcHJpdmF0ZSBXaW5kb3dNYW5hZ2VyUHJveHkoKSB7CiAgICAgfQogCkBAIC04Nyw5ICsxMjIsMzAgQEAKICAgICAgICAgcmV0dXJuIHNJbnN0YW5jZTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCByZXNpemVEb2NrZWRTdGFjayhSZWN0IHJlY3QpIHsKLSAgICAgICAgc3luY2hyb25pemVkIChtUmVzaXplUmVjdCkgewotICAgICAgICAgICAgbVJlc2l6ZVJlY3Quc2V0KHJlY3QpOworICAgIHB1YmxpYyB2b2lkIHJlc2l6ZURvY2tlZFN0YWNrKFJlY3QgZG9ja2VkLCBSZWN0IHRlbXBEb2NrZWRUYXNrUmVjdCwgUmVjdCB0ZW1wRG9ja2VkSW5zZXRSZWN0LAorICAgICAgICAgICAgUmVjdCB0ZW1wT3RoZXJUYXNrUmVjdCwgUmVjdCB0ZW1wT3RoZXJJbnNldFJlY3QpIHsKKyAgICAgICAgc3luY2hyb25pemVkIChtRG9ja2VkUmVjdCkgeworICAgICAgICAgICAgbURvY2tlZFJlY3Quc2V0KGRvY2tlZCk7CisgICAgICAgICAgICBpZiAodGVtcERvY2tlZFRhc2tSZWN0ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBtVGVtcERvY2tlZFRhc2tSZWN0LnNldCh0ZW1wRG9ja2VkVGFza1JlY3QpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtVGVtcERvY2tlZFRhc2tSZWN0LnNldEVtcHR5KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGVtcERvY2tlZEluc2V0UmVjdCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgbVRlbXBEb2NrZWRJbnNldFJlY3Quc2V0KHRlbXBEb2NrZWRJbnNldFJlY3QpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtVGVtcERvY2tlZEluc2V0UmVjdC5zZXRFbXB0eSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRlbXBPdGhlclRhc2tSZWN0ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBtVGVtcE90aGVyVGFza1JlY3Quc2V0KHRlbXBPdGhlclRhc2tSZWN0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbVRlbXBPdGhlclRhc2tSZWN0LnNldEVtcHR5KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGVtcE90aGVySW5zZXRSZWN0ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBtVGVtcE90aGVySW5zZXRSZWN0LnNldCh0ZW1wT3RoZXJJbnNldFJlY3QpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtVGVtcE90aGVySW5zZXRSZWN0LnNldEVtcHR5KCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgbUV4ZWN1dG9yLmV4ZWN1dGUobVJlc2l6ZVJ1bm5hYmxlKTsKICAgICB9CkBAIC0xMjMsNCArMTc5LDExIEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIERPQ0tFRF9JTlZBTElEOwogICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldFJlc2l6ZURpbUxheWVyKGJvb2xlYW4gdmlzaWJsZSwgaW50IHRhcmdldFN0YWNrSWQsIGZsb2F0IGFscGhhKSB7CisgICAgICAgIG1EaW1MYXllclZpc2libGUgPSB2aXNpYmxlOworICAgICAgICBtRGltTGF5ZXJUYXJnZXRTdGFjayA9IHRhcmdldFN0YWNrSWQ7CisgICAgICAgIG1EaW1MYXllckFscGhhID0gYWxwaGE7CisgICAgICAgIG1FeGVjdXRvci5leGVjdXRlKG1EaW1MYXllclJ1bm5hYmxlKTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL0Jhc2VTdGF0dXNCYXIuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvQmFzZVN0YXR1c0Jhci5qYXZhCmluZGV4IDZkNGRjODcyLi41OTA2YmRhIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL0Jhc2VTdGF0dXNCYXIuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL0Jhc2VTdGF0dXNCYXIuamF2YQpAQCAtMTEwLDYgKzExMCw3IEBACiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLnBvbGljeS5QcmV2aWV3SW5mbGF0ZXI7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLnBvbGljeS5SZW1vdGVJbnB1dFZpZXc7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLnN0YWNrLk5vdGlmaWNhdGlvblN0YWNrU2Nyb2xsTGF5b3V0OworaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnN0YXR1c2Jhci5zdGFjay5TdGFja1N0YXRlQW5pbWF0b3I7CiAKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwpAQCAtMTQ3LDggKzE0OCw5IEBACiAgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgSU5URVJSVVBUSU9OX1RIUkVTSE9MRCA9IDEwOwogICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFNFVFRJTkdfSEVBRFNfVVBfVElDS0VSID0gInRpY2tlcl9nZXRzX2hlYWRzX3VwIjsKIAotICAgIC8vIFNob3VsZCBtYXRjaCB0aGUgdmFsdWUgaW4gUGhvbmVXaW5kb3dNYW5hZ2VyCisgICAgLy8gU2hvdWxkIG1hdGNoIHRoZSB2YWx1ZXMgaW4gUGhvbmVXaW5kb3dNYW5hZ2VyCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1lTVEVNX0RJQUxPR19SRUFTT05fUkVDRU5UX0FQUFMgPSAicmVjZW50YXBwcyI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1lTVEVNX0RJQUxPR19SRUFTT05fSE9NRV9LRVkgPSAiaG9tZWtleSI7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFOTkVSX0FDVElPTl9DQU5DRUwgPQogICAgICAgICAgICAgImNvbS5hbmRyb2lkLnN5c3RlbXVpLnN0YXR1c2Jhci5iYW5uZXJfYWN0aW9uX2NhbmNlbCI7CkBAIC05NDcsNyArOTQ5LDcgQEAKICAgICAgICAgZmluYWwgU3RhdHVzQmFyTm90aWZpY2F0aW9uIHNibiA9IHJvdy5nZXRTdGF0dXNCYXJOb3RpZmljYXRpb24oKTsKICAgICAgICAgUGFja2FnZU1hbmFnZXIgcG1Vc2VyID0gZ2V0UGFja2FnZU1hbmFnZXJGb3JVc2VyKG1Db250ZXh0LCBzYm4uZ2V0VXNlcigpLmdldElkZW50aWZpZXIoKSk7CiAgICAgICAgIHJvdy5zZXRUYWcoc2JuLmdldFBhY2thZ2VOYW1lKCkpOwotICAgICAgICBmaW5hbCBWaWV3IGd1dHMgPSByb3cuZ2V0R3V0cygpOworICAgICAgICBmaW5hbCBOb3RpZmljYXRpb25HdXRzIGd1dHMgPSByb3cuZ2V0R3V0cygpOwogICAgICAgICBmaW5hbCBTdHJpbmcgcGtnID0gc2JuLmdldFBhY2thZ2VOYW1lKCk7CiAgICAgICAgIFN0cmluZyBhcHBuYW1lID0gcGtnOwogICAgICAgICBEcmF3YWJsZSBwa2dpY29uID0gbnVsbDsKQEAgLTk2OSw5ICs5NzEsNyBAQAogICAgICAgICAoKEltYWdlVmlldykgcm93LmZpbmRWaWV3QnlJZChhbmRyb2lkLlIuaWQuaWNvbikpLnNldEltYWdlRHJhd2FibGUocGtnaWNvbik7CiAgICAgICAgICgoVGV4dFZpZXcpIHJvdy5maW5kVmlld0J5SWQoUi5pZC5wa2duYW1lKSkuc2V0VGV4dChhcHBuYW1lKTsKIAotICAgICAgICBiaW5kVG9waWNJbXBvcnRhbmNlKHNibiwgcm93KTsKLQotICAgICAgICBmaW5hbCBWaWV3IHNldHRpbmdzQnV0dG9uID0gZ3V0cy5maW5kVmlld0J5SWQoUi5pZC5ub3RpZmljYXRpb25faW5zcGVjdF9pdGVtKTsKKyAgICAgICAgZmluYWwgVmlldyBzZXR0aW5nc0J1dHRvbiA9IGd1dHMuZmluZFZpZXdCeUlkKFIuaWQubW9yZV9zZXR0aW5ncyk7CiAgICAgICAgIGlmIChhcHBVaWQgPj0gMCkgewogICAgICAgICAgICAgZmluYWwgaW50IGFwcFVpZEYgPSBhcHBVaWQ7CiAgICAgICAgICAgICBzZXR0aW5nc0J1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobmV3IFZpZXcuT25DbGlja0xpc3RlbmVyKCkgewpAQCAtOTgzLDc3ICs5ODMsMjEgQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHNldHRpbmdzQnV0dG9uLnNldFZpc2liaWxpdHkoVmlldy5HT05FKTsKICAgICAgICAgfQotICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBiaW5kVG9waWNJbXBvcnRhbmNlKGZpbmFsIFN0YXR1c0Jhck5vdGlmaWNhdGlvbiBzYm4sCi0gICAgICAgICAgICBFeHBhbmRhYmxlTm90aWZpY2F0aW9uUm93IHJvdykgewotICAgICAgICBmaW5hbCBJTm90aWZpY2F0aW9uTWFuYWdlciBzSU5NID0gSU5vdGlmaWNhdGlvbk1hbmFnZXIuU3R1Yi5hc0ludGVyZmFjZSgKLSAgICAgICAgICAgICAgICBTZXJ2aWNlTWFuYWdlci5nZXRTZXJ2aWNlKENvbnRleHQuTk9USUZJQ0FUSU9OX1NFUlZJQ0UpKTsKLSAgICAgICAgZmluYWwgTm90aWZpY2F0aW9uLlRvcGljIHRvcGljID0gc2JuLmdldE5vdGlmaWNhdGlvbigpLmdldFRvcGljKCkgPT0gbnVsbAotICAgICAgICAgICAgICAgID8gbmV3IE5vdGlmaWNhdGlvbi5Ub3BpYyhOb3RpZmljYXRpb24uVE9QSUNfREVGQVVMVCwgbUNvbnRleHQuZ2V0U3RyaW5nKAotICAgICAgICAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHJpbmcuZGVmYXVsdF9ub3RpZmljYXRpb25fdG9waWNfbGFiZWwpKQotICAgICAgICAgICAgICAgIDogc2JuLmdldE5vdGlmaWNhdGlvbigpLmdldFRvcGljKCk7Ci0KLSAgICAgICAgKChUZXh0Vmlldykgcm93LmZpbmRWaWV3QnlJZChSLmlkLnRvcGljX2RldGFpbHMpKS5zZXRUZXh0KHRvcGljLmdldExhYmVsKCkpOwotICAgICAgICBmaW5hbCBUZXh0VmlldyB0b3BpY1N1bW1hcnkgPSAoKFRleHRWaWV3KSByb3cuZmluZFZpZXdCeUlkKFIuaWQuc3VtbWFyeSkpOwotICAgICAgICBpbnQgaW1wb3J0YW5jZSA9IG1Ob3RpZmljYXRpb25EYXRhLmdldEltcG9ydGFuY2Uoc2JuLmdldEtleSgpKTsKLSAgICAgICAgU2Vla0JhciBzZWVrQmFyID0gKFNlZWtCYXIpIHJvdy5maW5kVmlld0J5SWQoUi5pZC5zZWVrYmFyKTsKLSAgICAgICAgc2Vla0Jhci5zZXRNYXgoNCk7Ci0gICAgICAgIHNlZWtCYXIuc2V0T25TZWVrQmFyQ2hhbmdlTGlzdGVuZXIobmV3IFNlZWtCYXIuT25TZWVrQmFyQ2hhbmdlTGlzdGVuZXIoKSB7CisgICAgICAgIHJvdy5maW5kVmlld0J5SWQoUi5pZC5kb25lKS5zZXRPbkNsaWNrTGlzdGVuZXIobmV3IFZpZXcuT25DbGlja0xpc3RlbmVyKCkgewogICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCBvblByb2dyZXNzQ2hhbmdlZChTZWVrQmFyIHNlZWtCYXIsIGludCBwcm9ncmVzcywgYm9vbGVhbiBmcm9tVXNlcikgewotICAgICAgICAgICAgICAgIHRvcGljU3VtbWFyeS5zZXRUZXh0KGdldFByb2dyZXNzU3VtbWFyeShwcm9ncmVzcykpOwotICAgICAgICAgICAgICAgIGlmIChmcm9tVXNlcikgewotICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgc0lOTS5zZXRUb3BpY0ltcG9ydGFuY2Uoc2JuLmdldFBhY2thZ2VOYW1lKCksIHNibi5nZXRVaWQoKSwgdG9waWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyZXNzKTsKLSAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIDooCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgb25TdGFydFRyYWNraW5nVG91Y2goU2Vla0JhciBzZWVrQmFyKSB7Ci0gICAgICAgICAgICAgICAgLy8gbm8tb3AKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCBvblN0b3BUcmFja2luZ1RvdWNoKFNlZWtCYXIgc2Vla0JhcikgewotICAgICAgICAgICAgICAgIC8vIG5vLW9wCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHByaXZhdGUgU3RyaW5nIGdldFByb2dyZXNzU3VtbWFyeShpbnQgcHJvZ3Jlc3MpIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHByb2dyZXNzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgTm90aWZpY2F0aW9uTGlzdGVuZXJTZXJ2aWNlLlJhbmtpbmcuSU1QT1JUQU5DRV9OT05FOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1Db250ZXh0LmdldFN0cmluZygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHJpbmcubm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCk7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgTm90aWZpY2F0aW9uTGlzdGVuZXJTZXJ2aWNlLlJhbmtpbmcuSU1QT1JUQU5DRV9MT1c6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbUNvbnRleHQuZ2V0U3RyaW5nKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0cmluZy5ub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3cpOwotICAgICAgICAgICAgICAgICAgICBjYXNlIE5vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZS5SYW5raW5nLklNUE9SVEFOQ0VfREVGQVVMVDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtQ29udGV4dC5nZXRTdHJpbmcoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3RyaW5nLm5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQpOwotICAgICAgICAgICAgICAgICAgICBjYXNlIE5vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZS5SYW5raW5nLklNUE9SVEFOQ0VfSElHSDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtQ29udGV4dC5nZXRTdHJpbmcoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3RyaW5nLm5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2gpOwotICAgICAgICAgICAgICAgICAgICBjYXNlIE5vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZS5SYW5raW5nLklNUE9SVEFOQ0VfTUFYOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1Db250ZXh0LmdldFN0cmluZygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHJpbmcubm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4KTsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiIjsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikgeworICAgICAgICAgICAgICAgIGRpc21pc3NQb3B1cHMoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSk7Ci0gICAgICAgIHNlZWtCYXIuc2V0UHJvZ3Jlc3MoaW1wb3J0YW5jZSk7CisKKyAgICAgICAgZ3V0cy5iaW5kSW1wb3J0YW5jZShzYm4sIHJvdywgbU5vdGlmaWNhdGlvbkRhdGEuZ2V0SW1wb3J0YW5jZShzYm4uZ2V0S2V5KCkpKTsKICAgICB9CiAKICAgICBwcm90ZWN0ZWQgU3dpcGVIZWxwZXIuTG9uZ1ByZXNzTGlzdGVuZXIgZ2V0Tm90aWZpY2F0aW9uTG9uZ0NsaWNrZXIoKSB7CiAgICAgICAgIHJldHVybiBuZXcgU3dpcGVIZWxwZXIuTG9uZ1ByZXNzTGlzdGVuZXIoKSB7CiAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIG9uTG9uZ1ByZXNzKFZpZXcgdiwgaW50IHgsIGludCB5KSB7Ci0gICAgICAgICAgICAgICAgZGlzbWlzc1BvcHVwcygpOwotCisgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBvbkxvbmdQcmVzcyhWaWV3IHYsIGZpbmFsIGludCB4LCBmaW5hbCBpbnQgeSkgewogICAgICAgICAgICAgICAgIGlmICghKHYgaW5zdGFuY2VvZiBFeHBhbmRhYmxlTm90aWZpY2F0aW9uUm93KSkgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTA3NCw0MSArMTAxOCw1NyBAQAogCiAgICAgICAgICAgICAgICAgLy8gQWxyZWFkeSBzaG93aW5nPwogICAgICAgICAgICAgICAgIGlmIChndXRzLmdldFZpc2liaWxpdHkoKSA9PSBWaWV3LlZJU0lCTEUpIHsKLSAgICAgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiVHJ5aW5nIHRvIHNob3cgbm90aWZpY2F0aW9uIGd1dHMsIGJ1dCBhbHJlYWR5IHZpc2libGUiKTsKKyAgICAgICAgICAgICAgICAgICAgZGlzbWlzc1BvcHVwcyh4LCB5KTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIE1ldHJpY3NMb2dnZXIuYWN0aW9uKG1Db250ZXh0LCBNZXRyaWNzTG9nZ2VyLkFDVElPTl9OT1RFX0NPTlRST0xTKTsKLSAgICAgICAgICAgICAgICBndXRzLnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKIAotICAgICAgICAgICAgICAgIGZpbmFsIGRvdWJsZSBob3J6ID0gTWF0aC5tYXgoZ3V0cy5nZXRXaWR0aCgpIC0geCwgeCk7Ci0gICAgICAgICAgICAgICAgZmluYWwgZG91YmxlIHZlcnQgPSBNYXRoLm1heChndXRzLmdldEFjdHVhbEhlaWdodCgpIC0geSwgeSk7Ci0gICAgICAgICAgICAgICAgZmluYWwgZmxvYXQgciA9IChmbG9hdCkgTWF0aC5oeXBvdChob3J6LCB2ZXJ0KTsKLSAgICAgICAgICAgICAgICBmaW5hbCBBbmltYXRvciBhCi0gICAgICAgICAgICAgICAgICAgICAgICA9IFZpZXdBbmltYXRpb25VdGlscy5jcmVhdGVDaXJjdWxhclJldmVhbChndXRzLCB4LCB5LCAwLCByKTsKLSAgICAgICAgICAgICAgICBhLnNldER1cmF0aW9uKDQwMCk7Ci0gICAgICAgICAgICAgICAgYS5zZXRJbnRlcnBvbGF0b3IobUxpbmVhck91dFNsb3dJbik7Ci0gICAgICAgICAgICAgICAgYS5zdGFydCgpOwotCi0gICAgICAgICAgICAgICAgbU5vdGlmaWNhdGlvbkd1dHNFeHBvc2VkID0gZ3V0czsKLQorICAgICAgICAgICAgICAgIC8vIGVuc3VyZSB0aGF0IGl0J3MgbGF5b3V0ZWQgYnV0IG5vdCB2aXNpYmxlIHVudGlsIGFjdHVhbGx5IGxhaWQgb3V0CisgICAgICAgICAgICAgICAgZ3V0cy5zZXRWaXNpYmlsaXR5KFZpZXcuSU5WSVNJQkxFKTsKKyAgICAgICAgICAgICAgICAvLyBQb3N0IHRvIGVuc3VyZSB0aGUgdGhlIGd1dHMgYXJlIHByb3Blcmx5IGxheWVkIG91dC4KKyAgICAgICAgICAgICAgICBndXRzLnBvc3QobmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkaXNtaXNzUG9wdXBzKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBndXRzLnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGRvdWJsZSBob3J6ID0gTWF0aC5tYXgoZ3V0cy5nZXRXaWR0aCgpIC0geCwgeCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBkb3VibGUgdmVydCA9IE1hdGgubWF4KGd1dHMuZ2V0SGVpZ2h0KCkgLSB5LCB5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGZsb2F0IHIgPSAoZmxvYXQpIE1hdGguaHlwb3QoaG9yeiwgdmVydCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBBbmltYXRvciBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gVmlld0FuaW1hdGlvblV0aWxzLmNyZWF0ZUNpcmN1bGFyUmV2ZWFsKGd1dHMsIHgsIHksIDAsIHIpOworICAgICAgICAgICAgICAgICAgICAgICAgYS5zZXREdXJhdGlvbihTdGFja1N0YXRlQW5pbWF0b3IuQU5JTUFUSU9OX0RVUkFUSU9OX1NUQU5EQVJEKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGEuc2V0SW50ZXJwb2xhdG9yKG1MaW5lYXJPdXRTbG93SW4pOworICAgICAgICAgICAgICAgICAgICAgICAgYS5zdGFydCgpOworICAgICAgICAgICAgICAgICAgICAgICAgZ3V0cy5zZXRFeHBvc2VkKHRydWUpOworICAgICAgICAgICAgICAgICAgICAgICAgbVN0YWNrU2Nyb2xsZXIub25IZWlnaHRDaGFuZ2VkKG51bGwsIHRydWUgLyogbmVlZHNBbmltYXRpb24gKi8pOworICAgICAgICAgICAgICAgICAgICAgICAgbU5vdGlmaWNhdGlvbkd1dHNFeHBvc2VkID0gZ3V0czsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9OwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRpc21pc3NQb3B1cHMoKSB7CisgICAgICAgIGRpc21pc3NQb3B1cHMoLTEsIC0xKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgZGlzbWlzc1BvcHVwcyhpbnQgeCwgaW50IHkpIHsKICAgICAgICAgaWYgKG1Ob3RpZmljYXRpb25HdXRzRXhwb3NlZCAhPSBudWxsKSB7CiAgICAgICAgICAgICBmaW5hbCBOb3RpZmljYXRpb25HdXRzIHYgPSBtTm90aWZpY2F0aW9uR3V0c0V4cG9zZWQ7CiAgICAgICAgICAgICBtTm90aWZpY2F0aW9uR3V0c0V4cG9zZWQgPSBudWxsOwogCiAgICAgICAgICAgICBpZiAodi5nZXRXaW5kb3dUb2tlbigpID09IG51bGwpIHJldHVybjsKLQotICAgICAgICAgICAgZmluYWwgaW50IHggPSAodi5nZXRMZWZ0KCkgKyB2LmdldFJpZ2h0KCkpIC8gMjsKLSAgICAgICAgICAgIGZpbmFsIGludCB5ID0gKHYuZ2V0VG9wKCkgKyB2LmdldEFjdHVhbEhlaWdodCgpIC8gMik7CisgICAgICAgICAgICBpZiAoeCA9PSAtMSB8fCB5ID09IC0xKSB7CisgICAgICAgICAgICAgICAgeCA9ICh2LmdldExlZnQoKSArIHYuZ2V0UmlnaHQoKSkgLyAyOworICAgICAgICAgICAgICAgIHkgPSAodi5nZXRUb3AoKSArIHYuZ2V0SGVpZ2h0KCkgLyAyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpbmFsIGRvdWJsZSBob3J6ID0gTWF0aC5tYXgodi5nZXRXaWR0aCgpIC0geCwgeCk7CisgICAgICAgICAgICBmaW5hbCBkb3VibGUgdmVydCA9IE1hdGgubWF4KHYuZ2V0SGVpZ2h0KCkgLSB5LCB5KTsKKyAgICAgICAgICAgIGZpbmFsIGZsb2F0IHIgPSAoZmxvYXQpIE1hdGguaHlwb3QoaG9yeiwgdmVydCk7CiAgICAgICAgICAgICBmaW5hbCBBbmltYXRvciBhID0gVmlld0FuaW1hdGlvblV0aWxzLmNyZWF0ZUNpcmN1bGFyUmV2ZWFsKHYsCi0gICAgICAgICAgICAgICAgICAgIHgsIHksIHgsIDApOwotICAgICAgICAgICAgYS5zZXREdXJhdGlvbigyMDApOworICAgICAgICAgICAgICAgICAgICB4LCB5LCByLCAwKTsKKyAgICAgICAgICAgIGEuc2V0RHVyYXRpb24oU3RhY2tTdGF0ZUFuaW1hdG9yLkFOSU1BVElPTl9EVVJBVElPTl9TVEFOREFSRCk7CiAgICAgICAgICAgICBhLnNldEludGVycG9sYXRvcihtRmFzdE91dExpbmVhckluKTsKICAgICAgICAgICAgIGEuYWRkTGlzdGVuZXIobmV3IEFuaW1hdG9yTGlzdGVuZXJBZGFwdGVyKCkgewogICAgICAgICAgICAgICAgIEBPdmVycmlkZQpAQCAtMTExOCw2ICsxMDc4LDggQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGEuc3RhcnQoKTsKKyAgICAgICAgICAgIHYuc2V0RXhwb3NlZChmYWxzZSk7CisgICAgICAgICAgICBtU3RhY2tTY3JvbGxlci5vbkhlaWdodENoYW5nZWQobnVsbCwgdHJ1ZSAvKiBuZWVkc0FuaW1hdGlvbiAqLyk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEyMjgsNyArMTE5MCw2IEBACiAKICAgICBwcm90ZWN0ZWQgdm9pZCB0b2dnbGVSZWNlbnRzKCkgewogICAgICAgICBpZiAobVJlY2VudHMgIT0gbnVsbCkgewotICAgICAgICAgICAgc2VuZENsb3NlU3lzdGVtV2luZG93cyhtQ29udGV4dCwgU1lTVEVNX0RJQUxPR19SRUFTT05fUkVDRU5UX0FQUFMpOwogICAgICAgICAgICAgbVJlY2VudHMudG9nZ2xlUmVjZW50cyhtRGlzcGxheSwgbUxheW91dERpcmVjdGlvbiwgZ2V0U3RhdHVzQmFyVmlldygpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTE0NDUsNiArMTQwNiw3IEBACiAgICAgICAgIFZpZXcgY29udGVudFZpZXdMb2NhbCA9IG51bGw7CiAgICAgICAgIFZpZXcgYmlnQ29udGVudFZpZXdMb2NhbCA9IG51bGw7CiAgICAgICAgIFZpZXcgaGVhZHNVcENvbnRlbnRWaWV3TG9jYWwgPSBudWxsOworICAgICAgICBWaWV3IHB1YmxpY1ZpZXdMb2NhbCA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBjb250ZW50Vmlld0xvY2FsID0gY29udGVudFZpZXcuYXBwbHkoCiAgICAgICAgICAgICAgICAgICAgIHNibi5nZXRQYWNrYWdlQ29udGV4dChtQ29udGV4dCksCkBAIC0xNDYyLDYgKzE0MjQsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRDb250YWluZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICBtT25DbGlja0hhbmRsZXIpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHB1YmxpY0NvbnRlbnRWaWV3ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBwdWJsaWNWaWV3TG9jYWwgPSBwdWJsaWNDb250ZW50Vmlldy5hcHBseSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHNibi5nZXRQYWNrYWdlQ29udGV4dChtQ29udGV4dCksCisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50Q29udGFpbmVyUHVibGljLCBtT25DbGlja0hhbmRsZXIpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGNhdGNoIChSdW50aW1lRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBpZGVudCA9IHNibi5nZXRQYWNrYWdlTmFtZSgpICsgIi8weCIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKHNibi5nZXRJZCgpKTsKQEAgLTE0ODEsMjUgKzE0NDgsOSBAQAogICAgICAgICAgICAgaGVhZHNVcENvbnRlbnRWaWV3TG9jYWwuc2V0SXNSb290TmFtZXNwYWNlKHRydWUpOwogICAgICAgICAgICAgY29udGVudENvbnRhaW5lci5zZXRIZWFkc1VwQ2hpbGQoaGVhZHNVcENvbnRlbnRWaWV3TG9jYWwpOwogICAgICAgICB9Ci0KLSAgICAgICAgLy8gbm93IHRoZSBwdWJsaWMgdmVyc2lvbgotICAgICAgICBWaWV3IHB1YmxpY1ZpZXdMb2NhbCA9IG51bGw7Ci0gICAgICAgIGlmIChwdWJsaWNDb250ZW50VmlldyAhPSBudWxsKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIHB1YmxpY1ZpZXdMb2NhbCA9IHB1YmxpY0NvbnRlbnRWaWV3LmFwcGx5KAotICAgICAgICAgICAgICAgICAgICAgICAgc2JuLmdldFBhY2thZ2VDb250ZXh0KG1Db250ZXh0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRDb250YWluZXJQdWJsaWMsIG1PbkNsaWNrSGFuZGxlcik7Ci0KLSAgICAgICAgICAgICAgICBpZiAocHVibGljVmlld0xvY2FsICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgcHVibGljVmlld0xvY2FsLnNldElzUm9vdE5hbWVzcGFjZSh0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGVudENvbnRhaW5lclB1YmxpYy5zZXRDb250cmFjdGVkQ2hpbGQocHVibGljVmlld0xvY2FsKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGlkZW50ID0gc2JuLmdldFBhY2thZ2VOYW1lKCkgKyAiLzB4IiArIEludGVnZXIudG9IZXhTdHJpbmcoc2JuLmdldElkKCkpOwotICAgICAgICAgICAgICAgIExvZy5lKFRBRywgImNvdWxkbid0IGluZmxhdGUgcHVibGljIHZpZXcgZm9yIG5vdGlmaWNhdGlvbiAiICsgaWRlbnQsIGUpOwotICAgICAgICAgICAgICAgIHB1YmxpY1ZpZXdMb2NhbCA9IG51bGw7Ci0gICAgICAgICAgICB9CisgICAgICAgIGlmIChwdWJsaWNWaWV3TG9jYWwgIT0gbnVsbCkgeworICAgICAgICAgICAgcHVibGljVmlld0xvY2FsLnNldElzUm9vdE5hbWVzcGFjZSh0cnVlKTsKKyAgICAgICAgICAgIGNvbnRlbnRDb250YWluZXJQdWJsaWMuc2V0Q29udHJhY3RlZENoaWxkKHB1YmxpY1ZpZXdMb2NhbCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBFeHRyYWN0IHRhcmdldCBTREsgdmVyc2lvbi4KQEAgLTE1MDksNjUgKzE0NjAsNyBAQAogICAgICAgICB9IGNhdGNoIChOYW1lTm90Rm91bmRFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIExvZy5lKFRBRywgIkZhaWxlZCBsb29raW5nIHVwIEFwcGxpY2F0aW9uSW5mbyBmb3IgIiArIHNibi5nZXRQYWNrYWdlTmFtZSgpLCBleCk7CiAgICAgICAgIH0KLQotICAgICAgICBpZiAocHVibGljVmlld0xvY2FsID09IG51bGwpIHsKLSAgICAgICAgICAgIC8vIEFkZCBhIGJhc2ljIG5vdGlmaWNhdGlvbiB0ZW1wbGF0ZQotICAgICAgICAgICAgcHVibGljVmlld0xvY2FsID0gTGF5b3V0SW5mbGF0ZXIuZnJvbShtQ29udGV4dCkuaW5mbGF0ZSgKLSAgICAgICAgICAgICAgICAgICAgUi5sYXlvdXQubm90aWZpY2F0aW9uX3B1YmxpY19kZWZhdWx0LAotICAgICAgICAgICAgICAgICAgICBjb250ZW50Q29udGFpbmVyUHVibGljLCBmYWxzZSk7Ci0gICAgICAgICAgICBwdWJsaWNWaWV3TG9jYWwuc2V0SXNSb290TmFtZXNwYWNlKHRydWUpOwotCi0gICAgICAgICAgICBmaW5hbCBUZXh0VmlldyB0aXRsZSA9IChUZXh0VmlldykgcHVibGljVmlld0xvY2FsLmZpbmRWaWV3QnlJZChSLmlkLnRpdGxlKTsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgdGl0bGUuc2V0VGV4dChwbVVzZXIuZ2V0QXBwbGljYXRpb25MYWJlbCgKLSAgICAgICAgICAgICAgICAgICAgICAgIHBtVXNlci5nZXRBcHBsaWNhdGlvbkluZm8oZW50cnkubm90aWZpY2F0aW9uLmdldFBhY2thZ2VOYW1lKCksIDApKSk7Ci0gICAgICAgICAgICB9IGNhdGNoIChOYW1lTm90Rm91bmRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIHRpdGxlLnNldFRleHQoZW50cnkubm90aWZpY2F0aW9uLmdldFBhY2thZ2VOYW1lKCkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmaW5hbCBJbWFnZVZpZXcgaWNvbiA9IChJbWFnZVZpZXcpIHB1YmxpY1ZpZXdMb2NhbC5maW5kVmlld0J5SWQoUi5pZC5pY29uKTsKLSAgICAgICAgICAgIGZpbmFsIEltYWdlVmlldyBwcm9maWxlQmFkZ2UgPSAoSW1hZ2VWaWV3KSBwdWJsaWNWaWV3TG9jYWwuZmluZFZpZXdCeUlkKAotICAgICAgICAgICAgICAgICAgICBSLmlkLnByb2ZpbGVfYmFkZ2VfbGluZTMpOwotCi0gICAgICAgICAgICBmaW5hbCBTdGF0dXNCYXJJY29uIGljID0gbmV3IFN0YXR1c0Jhckljb24oCi0gICAgICAgICAgICAgICAgICAgIGVudHJ5Lm5vdGlmaWNhdGlvbi5nZXRVc2VyKCksCi0gICAgICAgICAgICAgICAgICAgIGVudHJ5Lm5vdGlmaWNhdGlvbi5nZXRQYWNrYWdlTmFtZSgpLAotICAgICAgICAgICAgICAgICAgICBlbnRyeS5ub3RpZmljYXRpb24uZ2V0Tm90aWZpY2F0aW9uKCkuZ2V0U21hbGxJY29uKCksCi0gICAgICAgICAgICAgICAgICAgIGVudHJ5Lm5vdGlmaWNhdGlvbi5nZXROb3RpZmljYXRpb24oKS5pY29uTGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgIGVudHJ5Lm5vdGlmaWNhdGlvbi5nZXROb3RpZmljYXRpb24oKS5udW1iZXIsCi0gICAgICAgICAgICAgICAgICAgIGVudHJ5Lm5vdGlmaWNhdGlvbi5nZXROb3RpZmljYXRpb24oKS50aWNrZXJUZXh0KTsKLQotICAgICAgICAgICAgRHJhd2FibGUgaWNvbkRyYXdhYmxlID0gU3RhdHVzQmFySWNvblZpZXcuZ2V0SWNvbihtQ29udGV4dCwgaWMpOwotICAgICAgICAgICAgaWNvbi5zZXRJbWFnZURyYXdhYmxlKGljb25EcmF3YWJsZSk7Ci0KLSAgICAgICAgICAgIGlmIChwcm9maWxlQmFkZ2UgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIERyYXdhYmxlIHByb2ZpbGVEcmF3YWJsZSA9IG1Db250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCkuZ2V0VXNlckJhZGdlRm9yRGVuc2l0eSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5Lm5vdGlmaWNhdGlvbi5nZXRVc2VyKCksIDApOwotICAgICAgICAgICAgICAgIGlmIChwcm9maWxlRHJhd2FibGUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBwcm9maWxlQmFkZ2Uuc2V0SW1hZ2VEcmF3YWJsZShwcm9maWxlRHJhd2FibGUpOwotICAgICAgICAgICAgICAgICAgICBwcm9maWxlQmFkZ2Uuc2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHByb2ZpbGVCYWRnZS5zZXRWaXNpYmlsaXR5KFZpZXcuR09ORSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmaW5hbCBWaWV3IHByaXZhdGVUaW1lID0gY29udGVudFZpZXdMb2NhbC5maW5kVmlld0J5SWQoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5pZC50aW1lKTsKLSAgICAgICAgICAgIGZpbmFsIERhdGVUaW1lVmlldyB0aW1lID0gKERhdGVUaW1lVmlldykgcHVibGljVmlld0xvY2FsLmZpbmRWaWV3QnlJZChSLmlkLnRpbWUpOwotICAgICAgICAgICAgaWYgKHByaXZhdGVUaW1lICE9IG51bGwgJiYgcHJpdmF0ZVRpbWUuZ2V0VmlzaWJpbGl0eSgpID09IFZpZXcuVklTSUJMRSkgewotICAgICAgICAgICAgICAgIHRpbWUuc2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpOwotICAgICAgICAgICAgICAgIHRpbWUuc2V0VGltZShlbnRyeS5ub3RpZmljYXRpb24uZ2V0Tm90aWZpY2F0aW9uKCkud2hlbik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZpbmFsIFRleHRWaWV3IHRleHQgPSAoVGV4dFZpZXcpIHB1YmxpY1ZpZXdMb2NhbC5maW5kVmlld0J5SWQoUi5pZC50ZXh0KTsKLSAgICAgICAgICAgIGlmICh0ZXh0ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICB0ZXh0LnNldFRleHQoUi5zdHJpbmcubm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0KTsKLSAgICAgICAgICAgICAgICB0ZXh0LnNldFRleHRBcHBlYXJhbmNlKG1Db250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgUi5zdHlsZS5UZXh0QXBwZWFyYW5jZV9NYXRlcmlhbF9Ob3RpZmljYXRpb25fUGFyZW50aGV0aWNhbCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNvbnRlbnRDb250YWluZXJQdWJsaWMuc2V0Q29udHJhY3RlZENoaWxkKHB1YmxpY1ZpZXdMb2NhbCk7Ci0gICAgICAgICAgICBlbnRyeS5hdXRvUmVkYWN0ZWQgPSB0cnVlOwotICAgICAgICB9CisgICAgICAgIGVudHJ5LmF1dG9SZWRhY3RlZCA9IGVudHJ5Lm5vdGlmaWNhdGlvbi5nZXROb3RpZmljYXRpb24oKS5wdWJsaWNWZXJzaW9uID09IG51bGw7CiAKICAgICAgICAgaWYgKE1VTFRJVVNFUl9ERUJVRykgewogICAgICAgICAgICAgVGV4dFZpZXcgZGVidWcgPSAoVGV4dFZpZXcpIHJvdy5maW5kVmlld0J5SWQoUi5pZC5kZWJ1Z19pbmZvKTsKQEAgLTE2MTIsOCArMTUwNSwxNCBAQAogCiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUFjdGlvbnM7IGkrKykgewogICAgICAgICAgICAgICAgIE5vdGlmaWNhdGlvbi5BY3Rpb24gYWN0aW9uID0gYWN0aW9ucy5nZXQoaSk7CisgICAgICAgICAgICAgICAgaWYgKGFjdGlvbiA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBSZW1vdGVJbnB1dFtdIHJlbW90ZUlucHV0cyA9IGFjdGlvbi5nZXRSZW1vdGVJbnB1dHMoKTsKLSAgICAgICAgICAgICAgICBmb3IgKFJlbW90ZUlucHV0IHJpIDogYWN0aW9uLmdldFJlbW90ZUlucHV0cygpKSB7CisgICAgICAgICAgICAgICAgaWYgKHJlbW90ZUlucHV0cyA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmb3IgKFJlbW90ZUlucHV0IHJpIDogcmVtb3RlSW5wdXRzKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChyaS5nZXRBbGxvd0ZyZWVGb3JtSW5wdXQoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgdmlhYmxlQWN0aW9uID0gYWN0aW9uOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yMDk4LDcgKzE5OTcsOCBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIC8vIEl0IGZhaWxlZCB0byBhcHBseSBjbGVhbmx5LgotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkNvdWxkbid0IHJlYXBwbHkgdmlld3MgZm9yIHBhY2thZ2UgIiArIG4uY29udGVudFZpZXcuZ2V0UGFja2FnZSgpLCBlKTsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJDb3VsZG4ndCByZWFwcGx5IHZpZXdzIGZvciBwYWNrYWdlICIgKworICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpY2F0aW9uLmdldFBhY2thZ2VOYW1lKCksIGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlmICghdXBkYXRlU3VjY2Vzc2Z1bCkgewpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9FeHBhbmRhYmxlTm90aWZpY2F0aW9uUm93LmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL0V4cGFuZGFibGVOb3RpZmljYXRpb25Sb3cuamF2YQppbmRleCA4NzRiNzZhLi44Mzg1M2EyIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL0V4cGFuZGFibGVOb3RpZmljYXRpb25Sb3cuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL0V4cGFuZGFibGVOb3RpZmljYXRpb25Sb3cuamF2YQpAQCAtMjUsMTIgKzI1LDEwIEBACiBpbXBvcnQgYW5kcm9pZC5vcy5CdWlsZDsKIGltcG9ydCBhbmRyb2lkLnNlcnZpY2Uubm90aWZpY2F0aW9uLlN0YXR1c0Jhck5vdGlmaWNhdGlvbjsKIGltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OwotaW1wb3J0IGFuZHJvaWQudmlldy5Nb3Rpb25FdmVudDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuTm90aWZpY2F0aW9uSGVhZGVyVmlldzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlld1N0dWI7CiBpbXBvcnQgYW5kcm9pZC52aWV3LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eUV2ZW50OwotaW1wb3J0IGFuZHJvaWQudmlldy5hbmltYXRpb24uTGluZWFySW50ZXJwb2xhdG9yOwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkNocm9ub21ldGVyOwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkltYWdlVmlldzsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5SZW1vdGVWaWV3czsKQEAgLTQ5LDEzICs0NywxMSBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERFRkFVTFRfRElWSURFUl9BTFBIQSA9IDB4Mjk7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENPTE9SRURfRElWSURFUl9BTFBIQSA9IDB4N0I7Ci0gICAgcHJpdmF0ZSBmaW5hbCBMaW5lYXJJbnRlcnBvbGF0b3IgbUxpbmVhckludGVycG9sYXRvciA9IG5ldyBMaW5lYXJJbnRlcnBvbGF0b3IoKTsKICAgICBwcml2YXRlIGZpbmFsIGludCBtTm90aWZpY2F0aW9uTWluSGVpZ2h0TGVnYWN5OwogICAgIHByaXZhdGUgZmluYWwgaW50IG1NYXhIZWFkc1VwSGVpZ2h0TGVnYWN5OwogICAgIHByaXZhdGUgZmluYWwgaW50IG1NYXhIZWFkc1VwSGVpZ2h0OwogICAgIHByaXZhdGUgZmluYWwgaW50IG1Ob3RpZmljYXRpb25NaW5IZWlnaHQ7CiAgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbU5vdGlmaWNhdGlvbk1heEhlaWdodDsKLSAgICBwcml2YXRlIGludCBtUm93TWluSGVpZ2h0OwogCiAgICAgLyoqIERvZXMgdGhpcyByb3cgY29udGFpbiBsYXlvdXRzIHRoYXQgY2FuIGFkYXB0IHRvIHJvdyBleHBhbnNpb24gKi8KICAgICBwcml2YXRlIGJvb2xlYW4gbUV4cGFuZGFibGU7CkBAIC0xMTcsNyArMTEzLDcgQEAKICAgICBwcml2YXRlIE9uQ2xpY2tMaXN0ZW5lciBtRXhwYW5kQ2xpY2tMaXN0ZW5lciA9IG5ldyBPbkNsaWNrTGlzdGVuZXIoKSB7CiAgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikgewotICAgICAgICAgICAgaWYgKG1Hcm91cE1hbmFnZXIuaXNTdW1tYXJ5T2ZHcm91cChtU3RhdHVzQmFyTm90aWZpY2F0aW9uKSkgeworICAgICAgICAgICAgaWYgKCFtU2hvd2luZ1B1YmxpYyAmJiBtR3JvdXBNYW5hZ2VyLmlzU3VtbWFyeU9mR3JvdXAobVN0YXR1c0Jhck5vdGlmaWNhdGlvbikpIHsKICAgICAgICAgICAgICAgICBtR3JvdXBNYW5hZ2VyLnRvZ2dsZUdyb3VwRXhwYW5zaW9uKG1TdGF0dXNCYXJOb3RpZmljYXRpb24pOwogICAgICAgICAgICAgICAgIG1PbkV4cGFuZENsaWNrTGlzdGVuZXIub25FeHBhbmRDbGlja2VkKEV4cGFuZGFibGVOb3RpZmljYXRpb25Sb3cudGhpcywKICAgICAgICAgICAgICAgICAgICAgICAgIG1Hcm91cE1hbmFnZXIuaXNHcm91cEV4cGFuZGVkKG1TdGF0dXNCYXJOb3RpZmljYXRpb24pKTsKQEAgLTIxMiw2ICsyMDgsOCBAQAogICAgICAgICAgICAgbU5vdGlmaWNhdGlvblBhcmVudC51cGRhdGVDaGlsZHJlbkhlYWRlckFwcGVhcmFuY2UoKTsKICAgICAgICAgfQogICAgICAgICBvbkNoaWxkcmVuQ291bnRDaGFuZ2VkKCk7CisgICAgICAgIC8vIFRoZSBwdWJsaWMgbGF5b3V0cyBleHBhbmQgYnV0dG9uIGlzIGFsd2F5cyB2aXNpYmxlCisgICAgICAgIG1QdWJsaWNMYXlvdXQudXBkYXRlRXhwYW5kQnV0dG9ucyh0cnVlKTsKICAgICAgICAgdXBkYXRlTGltaXRzKCk7CiAgICAgfQogCkBAIC0yMjYsMTAgKzIyNCw5IEBACiAgICAgICAgICAgICAgICAgIT0gY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5pZC5zdGF0dXNfYmFyX2xhdGVzdF9ldmVudF9jb250ZW50OwogICAgICAgICBpbnQgaGVhZHNVcGhlaWdodCA9IGhlYWRzVXBDdXN0b20gJiYgYmVmb3JlTiA/IG1NYXhIZWFkc1VwSGVpZ2h0TGVnYWN5CiAgICAgICAgICAgICAgICAgOiBtTWF4SGVhZHNVcEhlaWdodDsKLSAgICAgICAgbVJvd01pbkhlaWdodCA9IG1pbkhlaWdodDsKICAgICAgICAgbU1heFZpZXdIZWlnaHQgPSBtTm90aWZpY2F0aW9uTWF4SGVpZ2h0OwotICAgICAgICBtUHJpdmF0ZUxheW91dC5zZXRIZWlnaHRzKG1Sb3dNaW5IZWlnaHQsIGhlYWRzVXBoZWlnaHQpOwotICAgICAgICBtUHVibGljTGF5b3V0LnNldEhlaWdodHMobVJvd01pbkhlaWdodCwgaGVhZHNVcGhlaWdodCk7CisgICAgICAgIG1Qcml2YXRlTGF5b3V0LnNldEhlaWdodHMobWluSGVpZ2h0LCBoZWFkc1VwaGVpZ2h0LCBtTm90aWZpY2F0aW9uTWF4SGVpZ2h0KTsKKyAgICAgICAgbVB1YmxpY0xheW91dC5zZXRIZWlnaHRzKG1pbkhlaWdodCwgaGVhZHNVcGhlaWdodCwgbU5vdGlmaWNhdGlvbk1heEhlaWdodCk7CiAgICAgfQogCiAgICAgcHVibGljIFN0YXR1c0Jhck5vdGlmaWNhdGlvbiBnZXRTdGF0dXNCYXJOb3RpZmljYXRpb24oKSB7CkBAIC00ODksNyArNDg2LDYgQEAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCByZXNldCgpIHsKICAgICAgICAgc3VwZXIucmVzZXQoKTsKLSAgICAgICAgbVJvd01pbkhlaWdodCA9IDA7CiAgICAgICAgIGZpbmFsIGJvb2xlYW4gd2FzRXhwYW5kZWQgPSBpc0V4cGFuZGVkKCk7CiAgICAgICAgIG1NYXhWaWV3SGVpZ2h0ID0gMDsKICAgICAgICAgbUV4cGFuZGFibGUgPSBmYWxzZTsKQEAgLTUxOCwxMSArNTE0LDYgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgYm9vbGVhbiBmaWx0ZXJNb3Rpb25FdmVudChNb3Rpb25FdmVudCBldmVudCkgewotICAgICAgICByZXR1cm4gbUlzSGVhZHNVcCB8fCBzdXBlci5maWx0ZXJNb3Rpb25FdmVudChldmVudCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCiAgICAgcHJvdGVjdGVkIHZvaWQgb25GaW5pc2hJbmZsYXRlKCkgewogICAgICAgICBzdXBlci5vbkZpbmlzaEluZmxhdGUoKTsKICAgICAgICAgbVB1YmxpY0xheW91dCA9IChOb3RpZmljYXRpb25Db250ZW50VmlldykgZmluZFZpZXdCeUlkKFIuaWQuZXhwYW5kZWRQdWJsaWMpOwpAQCAtNTU4LDEyICs1NDksMTUgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgdXBkYXRlQ2hpbGRyZW5WaXNpYmlsaXR5KCkgeworICAgICAgICBtUHJpdmF0ZUxheW91dC5zZXRWaXNpYmlsaXR5KCFtU2hvd2luZ1B1YmxpYyAmJiAhbUlzU3VtbWFyeVdpdGhDaGlsZHJlbiA/IFZJU0lCTEUKKyAgICAgICAgICAgICAgICA6IElOVklTSUJMRSk7CiAgICAgICAgIGlmIChtQ2hpbGRyZW5Db250YWluZXIgPT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIG1DaGlsZHJlbkNvbnRhaW5lci5zZXRWaXNpYmlsaXR5KG1Jc1N1bW1hcnlXaXRoQ2hpbGRyZW4gPyBWSVNJQkxFIDogSU5WSVNJQkxFKTsKLSAgICAgICAgbU5vdGlmaWNhdGlvbkhlYWRlci5zZXRWaXNpYmlsaXR5KG1Jc1N1bW1hcnlXaXRoQ2hpbGRyZW4gPyBWSVNJQkxFIDogSU5WSVNJQkxFKTsKLSAgICAgICAgbVByaXZhdGVMYXlvdXQuc2V0VmlzaWJpbGl0eSghbUlzU3VtbWFyeVdpdGhDaGlsZHJlbiA/IFZJU0lCTEUgOiBJTlZJU0lCTEUpOworICAgICAgICBtQ2hpbGRyZW5Db250YWluZXIuc2V0VmlzaWJpbGl0eSghbVNob3dpbmdQdWJsaWMgJiYgbUlzU3VtbWFyeVdpdGhDaGlsZHJlbiA/IFZJU0lCTEUKKyAgICAgICAgICAgICAgICA6IElOVklTSUJMRSk7CisgICAgICAgIG1Ob3RpZmljYXRpb25IZWFkZXIuc2V0VmlzaWJpbGl0eSghbVNob3dpbmdQdWJsaWMgJiYgbUlzU3VtbWFyeVdpdGhDaGlsZHJlbiA/IFZJU0lCTEUKKyAgICAgICAgICAgICAgICA6IElOVklTSUJMRSk7CiAgICAgICAgIC8vIFRoZSBsaW1pdHMgbWlnaHQgaGF2ZSBjaGFuZ2VkIGlmIHRoZSB2aWV3IHN1ZGRlbmx5IGJlY2FtZSBhIGdyb3VwIG9yIHZpY2UgdmVyc2EKICAgICAgICAgdXBkYXRlTGltaXRzKCk7CiAgICAgfQpAQCAtNzE1LDcgKzcwOSw3IEBACiAgICAgICAgIGlmIChleHBhbmQgJiYgbUV4cGFuZGFibGUpIHsKICAgICAgICAgICAgIHNldEFjdHVhbEhlaWdodChtTWF4RXhwYW5kSGVpZ2h0KTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNldEFjdHVhbEhlaWdodChtUm93TWluSGVpZ2h0KTsKKyAgICAgICAgICAgIHNldEFjdHVhbEhlaWdodChnZXRNaW5IZWlnaHQoKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTcyNSwyMCArNzE5LDI0IEBACiAgICAgICAgICAgICByZXR1cm4gZ2V0QWN0dWFsSGVpZ2h0KCk7CiAgICAgICAgIH0KICAgICAgICAgYm9vbGVhbiBpbkV4cGFuc2lvblN0YXRlID0gaXNFeHBhbmRlZCgpOwotICAgICAgICBpZiAobVNlbnNpdGl2ZSAmJiBtSGlkZVNlbnNpdGl2ZUZvckludHJpbnNpY0hlaWdodCkgewotICAgICAgICAgICAgcmV0dXJuIG1Sb3dNaW5IZWlnaHQ7CisgICAgICAgIGlmIChtR3V0cyAhPSBudWxsICYmIG1HdXRzLmFyZUd1dHNFeHBvc2VkKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBtR3V0cy5nZXRIZWlnaHQoKTsKKyAgICAgICAgfSBlbHNlIGlmICgoaXNDaGlsZEluR3JvdXAoKSAmJiAhaXNHcm91cEV4cGFuZGVkKCkpKSB7CisgICAgICAgICAgICByZXR1cm4gbVByaXZhdGVMYXlvdXQuZ2V0TWluSGVpZ2h0KCk7CisgICAgICAgIH0gZWxzZSBpZiAobVNlbnNpdGl2ZSAmJiBtSGlkZVNlbnNpdGl2ZUZvckludHJpbnNpY0hlaWdodCkgeworICAgICAgICAgICAgcmV0dXJuIGdldE1pbkhlaWdodCgpOwogICAgICAgICB9IGVsc2UgaWYgKG1Jc1N1bW1hcnlXaXRoQ2hpbGRyZW4gJiYgIW1PbktleWd1YXJkKSB7CiAgICAgICAgICAgICByZXR1cm4gbUNoaWxkcmVuQ29udGFpbmVyLmdldEludHJpbnNpY0hlaWdodCgpOwogICAgICAgICB9IGVsc2UgaWYgKG1Jc0hlYWRzVXApIHsKICAgICAgICAgICAgIGlmIChpbkV4cGFuc2lvblN0YXRlKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KG1NYXhFeHBhbmRIZWlnaHQsIG1IZWFkc1VwSGVpZ2h0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgoZ2V0TWF4RXhwYW5kSGVpZ2h0KCksIG1IZWFkc1VwSGVpZ2h0KTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KG1Sb3dNaW5IZWlnaHQsIG1IZWFkc1VwSGVpZ2h0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgoZ2V0TWluSGVpZ2h0KCksIG1IZWFkc1VwSGVpZ2h0KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICghaW5FeHBhbnNpb25TdGF0ZSB8fCAoaXNDaGlsZEluR3JvdXAoKSAmJiAhaXNHcm91cEV4cGFuZGVkKCkpKSB7Ci0gICAgICAgICAgICByZXR1cm4gZ2V0TWluSGVpZ2h0KCk7Ci0gICAgICAgIH0gZWxzZSB7CisgICAgICAgIH0gZWxzZSBpZiAoaW5FeHBhbnNpb25TdGF0ZSkgewogICAgICAgICAgICAgcmV0dXJuIGdldE1heEV4cGFuZEhlaWdodCgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIGdldE1pbkhlaWdodCgpOwogICAgICAgICB9CiAgICAgfQogCkBAIC04NDUsOCArODQzLDcgQEAKICAgICAgICAgICAgIG1QdWJsaWNMYXlvdXQuc2V0QWxwaGEoMWYpOwogICAgICAgICAgICAgbVByaXZhdGVMYXlvdXQuc2V0QWxwaGEoMWYpOwogICAgICAgICAgICAgbVB1YmxpY0xheW91dC5zZXRWaXNpYmlsaXR5KG1TaG93aW5nUHVibGljID8gVmlldy5WSVNJQkxFIDogVmlldy5JTlZJU0lCTEUpOwotICAgICAgICAgICAgbVByaXZhdGVMYXlvdXQuc2V0VmlzaWJpbGl0eSghbVNob3dpbmdQdWJsaWMgJiYgIW1Jc1N1bW1hcnlXaXRoQ2hpbGRyZW4gPyBWaWV3LlZJU0lCTEUKLSAgICAgICAgICAgICAgICAgICAgOiBWaWV3LklOVklTSUJMRSk7CisgICAgICAgICAgICB1cGRhdGVDaGlsZHJlblZpc2liaWxpdHkoKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGFuaW1hdGVTaG93aW5nUHVibGljKGRlbGF5LCBkdXJhdGlvbik7CiAgICAgICAgIH0KQEAgLTg1NywyNyArODU0LDM1IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGFuaW1hdGVTaG93aW5nUHVibGljKGxvbmcgZGVsYXksIGxvbmcgZHVyYXRpb24pIHsKLSAgICAgICAgZmluYWwgVmlldyBzb3VyY2UgPSBtU2hvd2luZ1B1YmxpYyA/IG1Qcml2YXRlTGF5b3V0IDogbVB1YmxpY0xheW91dDsKLSAgICAgICAgVmlldyB0YXJnZXQgPSBtU2hvd2luZ1B1YmxpYyA/IG1QdWJsaWNMYXlvdXQgOiBtUHJpdmF0ZUxheW91dDsKLSAgICAgICAgc291cmNlLnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKLSAgICAgICAgdGFyZ2V0LnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKLSAgICAgICAgdGFyZ2V0LnNldEFscGhhKDBmKTsKLSAgICAgICAgc291cmNlLmFuaW1hdGUoKS5jYW5jZWwoKTsKLSAgICAgICAgdGFyZ2V0LmFuaW1hdGUoKS5jYW5jZWwoKTsKLSAgICAgICAgc291cmNlLmFuaW1hdGUoKQotICAgICAgICAgICAgICAgIC5hbHBoYSgwZikKLSAgICAgICAgICAgICAgICAuc2V0U3RhcnREZWxheShkZWxheSkKLSAgICAgICAgICAgICAgICAuc2V0RHVyYXRpb24oZHVyYXRpb24pCi0gICAgICAgICAgICAgICAgLndpdGhFbmRBY3Rpb24obmV3IFJ1bm5hYmxlKCkgewotICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLnNldFZpc2liaWxpdHkoVmlldy5JTlZJU0lCTEUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgIHRhcmdldC5hbmltYXRlKCkKLSAgICAgICAgICAgICAgICAuYWxwaGEoMWYpCi0gICAgICAgICAgICAgICAgLnNldFN0YXJ0RGVsYXkoZGVsYXkpCi0gICAgICAgICAgICAgICAgLnNldER1cmF0aW9uKGR1cmF0aW9uKTsKKyAgICAgICAgVmlld1tdIHByaXZhdGVWaWV3cyA9IG1Jc1N1bW1hcnlXaXRoQ2hpbGRyZW4gPworICAgICAgICAgICAgICAgIG5ldyBWaWV3W10ge21DaGlsZHJlbkNvbnRhaW5lciwgbU5vdGlmaWNhdGlvbkhlYWRlcn0KKyAgICAgICAgICAgICAgICA6IG5ldyBWaWV3W10ge21Qcml2YXRlTGF5b3V0fTsKKyAgICAgICAgVmlld1tdIHB1YmxpY1ZpZXdzID0gbmV3IFZpZXdbXSB7bVB1YmxpY0xheW91dH07CisgICAgICAgIFZpZXdbXSBoaWRkZW5DaGlsZHJlbiA9IG1TaG93aW5nUHVibGljID8gcHJpdmF0ZVZpZXdzIDogcHVibGljVmlld3M7CisgICAgICAgIFZpZXdbXSBzaG93bkNoaWxkcmVuID0gbVNob3dpbmdQdWJsaWMgPyBwdWJsaWNWaWV3cyA6IHByaXZhdGVWaWV3czsKKyAgICAgICAgZm9yIChmaW5hbCBWaWV3IGhpZGRlblZpZXcgOiBoaWRkZW5DaGlsZHJlbikgeworICAgICAgICAgICAgaGlkZGVuVmlldy5zZXRWaXNpYmlsaXR5KFZpZXcuVklTSUJMRSk7CisgICAgICAgICAgICBoaWRkZW5WaWV3LmFuaW1hdGUoKS5jYW5jZWwoKTsKKyAgICAgICAgICAgIGhpZGRlblZpZXcuYW5pbWF0ZSgpCisgICAgICAgICAgICAgICAgICAgIC5hbHBoYSgwZikKKyAgICAgICAgICAgICAgICAgICAgLnNldFN0YXJ0RGVsYXkoZGVsYXkpCisgICAgICAgICAgICAgICAgICAgIC5zZXREdXJhdGlvbihkdXJhdGlvbikKKyAgICAgICAgICAgICAgICAgICAgLndpdGhFbmRBY3Rpb24obmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlkZGVuVmlldy5zZXRWaXNpYmlsaXR5KFZpZXcuSU5WSVNJQkxFKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChWaWV3IHNob3dWaWV3IDogc2hvd25DaGlsZHJlbikgeworICAgICAgICAgICAgc2hvd1ZpZXcuc2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpOworICAgICAgICAgICAgc2hvd1ZpZXcuc2V0QWxwaGEoMGYpOworICAgICAgICAgICAgc2hvd1ZpZXcuYW5pbWF0ZSgpLmNhbmNlbCgpOworICAgICAgICAgICAgc2hvd1ZpZXcuYW5pbWF0ZSgpCisgICAgICAgICAgICAgICAgICAgIC5hbHBoYSgxZikKKyAgICAgICAgICAgICAgICAgICAgLnNldFN0YXJ0RGVsYXkoZGVsYXkpCisgICAgICAgICAgICAgICAgICAgIC5zZXREdXJhdGlvbihkdXJhdGlvbik7CisgICAgICAgIH0KICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgdXBkYXRlVmV0b0J1dHRvbigpIHsKQEAgLTk1Niw2ICs5NjEsOSBAQAogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGludCBnZXRNaW5IZWlnaHQoKSB7CisgICAgICAgIGlmIChtSXNTdW1tYXJ5V2l0aENoaWxkcmVuICYmICFpc0dyb3VwRXhwYW5kZWQoKSAmJiAhbVNob3dpbmdQdWJsaWMpIHsKKyAgICAgICAgICAgIHJldHVybiBtQ2hpbGRyZW5Db250YWluZXIuZ2V0TWluSGVpZ2h0KCk7CisgICAgICAgIH0KICAgICAgICAgTm90aWZpY2F0aW9uQ29udGVudFZpZXcgc2hvd2luZ0xheW91dCA9IGdldFNob3dpbmdMYXlvdXQoKTsKICAgICAgICAgcmV0dXJuIHNob3dpbmdMYXlvdXQuZ2V0TWluSGVpZ2h0KCk7CiAgICAgfQpAQCAtOTYzLDE3ICs5NzEsMTIgQEAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgaW50IGdldE1pbkV4cGFuZEhlaWdodCgpIHsKICAgICAgICAgaWYgKG1Jc1N1bW1hcnlXaXRoQ2hpbGRyZW4gJiYgIW1PbktleWd1YXJkKSB7Ci0gICAgICAgICAgICByZXR1cm4gbUNoaWxkcmVuQ29udGFpbmVyLmdldE1pbkhlaWdodCgpOworICAgICAgICAgICAgcmV0dXJuIG1DaGlsZHJlbkNvbnRhaW5lci5nZXRNaW5FeHBhbmRIZWlnaHQoKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZ2V0TWluSGVpZ2h0KCk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIGJvb2xlYW4gc2hvdWxkTGltaXRWaWV3SGVpZ2h0KCkgewotICAgICAgICByZXR1cm4gIW1Jc1N1bW1hcnlXaXRoQ2hpbGRyZW47Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgc2V0Q2xpcFRvcEFtb3VudChpbnQgY2xpcFRvcEFtb3VudCkgewogICAgICAgICBzdXBlci5zZXRDbGlwVG9wQW1vdW50KGNsaXBUb3BBbW91bnQpOwogICAgICAgICBtUHJpdmF0ZUxheW91dC5zZXRDbGlwVG9wQW1vdW50KGNsaXBUb3BBbW91bnQpOwpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9FeHBhbmRhYmxlVmlldy5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9FeHBhbmRhYmxlVmlldy5qYXZhCmluZGV4IDU5Y2JkNDAuLmQ2ODU1YTUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvRXhwYW5kYWJsZVZpZXcuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL0V4cGFuZGFibGVWaWV3LmphdmEKQEAgLTIwLDEwICsyMCwxMCBAQAogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUGFpbnQ7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0OwogaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7Ci1pbXBvcnQgYW5kcm9pZC52aWV3Lk1vdGlvbkV2ZW50OwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuRnJhbWVMYXlvdXQ7CisKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5SOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnN0YXR1c2Jhci5zdGFjay5Ob3RpZmljYXRpb25TdGFja1Njcm9sbExheW91dDsKIApAQCAtNDUsNyArNDUsNiBAQAogICAgIHByaXZhdGUgc3RhdGljIFJlY3QgbUNsaXBSZWN0ID0gbmV3IFJlY3QoKTsKICAgICBwcml2YXRlIGJvb2xlYW4gbVdpbGxCZUdvbmU7CiAgICAgcHJpdmF0ZSBpbnQgbU1pbkNsaXBUb3BBbW91bnQgPSAwOwotICAgIHByaXZhdGUgYm9vbGVhbiBtTWVhc3VyZWRUb29IaWdoOwogCiAgICAgcHVibGljIEV4cGFuZGFibGVWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzKSB7CiAgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzKTsKQEAgLTU1LDEzICs1NCwxMCBAQAogCiAgICAgQE92ZXJyaWRlCiAgICAgcHJvdGVjdGVkIHZvaWQgb25NZWFzdXJlKGludCB3aWR0aE1lYXN1cmVTcGVjLCBpbnQgaGVpZ2h0TWVhc3VyZVNwZWMpIHsKLSAgICAgICAgYm9vbGVhbiBsaW1pdFZpZXdIZWlnaHQgPSBzaG91bGRMaW1pdFZpZXdIZWlnaHQoKTsKICAgICAgICAgZmluYWwgaW50IGdpdmVuU2l6ZSA9IE1lYXN1cmVTcGVjLmdldFNpemUoaGVpZ2h0TWVhc3VyZVNwZWMpOwotICAgICAgICBpbnQgb3duTWF4SGVpZ2h0ID0gbGltaXRWaWV3SGVpZ2h0ID8gbU1heFZpZXdIZWlnaHQgOiBJbnRlZ2VyLk1BWF9WQUxVRTsKKyAgICAgICAgaW50IG93bk1heEhlaWdodCA9IEludGVnZXIuTUFYX1ZBTFVFOwogICAgICAgICBpbnQgaGVpZ2h0TW9kZSA9IE1lYXN1cmVTcGVjLmdldE1vZGUoaGVpZ2h0TWVhc3VyZVNwZWMpOwotICAgICAgICBib29sZWFuIGhhc0ZpeGVkSGVpZ2h0ID0gaGVpZ2h0TW9kZSA9PSBNZWFzdXJlU3BlYy5FWEFDVExZOwotICAgICAgICBpZiAoaGFzRml4ZWRIZWlnaHQpIHsKLSAgICAgICAgICAgIC8vIFdlIGhhdmUgYSBoZWlnaHQgc2V0IGluIG91ciBsYXlvdXQsIHNvIHdlIHdhbnQgdG8gYmUgYXQgbW9zdCBhcyBiaWcgYXMgZ2l2ZW4KKyAgICAgICAgaWYgKGhlaWdodE1vZGUgIT0gTWVhc3VyZVNwZWMuVU5TUEVDSUZJRUQgJiYgZ2l2ZW5TaXplICE9IDApIHsKICAgICAgICAgICAgIG93bk1heEhlaWdodCA9IE1hdGgubWluKGdpdmVuU2l6ZSwgb3duTWF4SGVpZ2h0KTsKICAgICAgICAgfQogICAgICAgICBpbnQgbmV3SGVpZ2h0U3BlYyA9IE1lYXN1cmVTcGVjLm1ha2VNZWFzdXJlU3BlYyhvd25NYXhIZWlnaHQsIE1lYXN1cmVTcGVjLkFUX01PU1QpOwpAQCAtNzcsNyArNzMsNyBAQAogICAgICAgICAgICAgaWYgKGxheW91dFBhcmFtcy5oZWlnaHQgIT0gVmlld0dyb3VwLkxheW91dFBhcmFtcy5NQVRDSF9QQVJFTlQpIHsKICAgICAgICAgICAgICAgICBpZiAobGF5b3V0UGFyYW1zLmhlaWdodCA+PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEFuIGFjdHVhbCBoZWlnaHQgaXMgc2V0Ci0gICAgICAgICAgICAgICAgICAgIGNoaWxkSGVpZ2h0U3BlYyA9IGxheW91dFBhcmFtcy5oZWlnaHQgPiBvd25NYXhIZWlnaHQgJiYgbGltaXRWaWV3SGVpZ2h0CisgICAgICAgICAgICAgICAgICAgIGNoaWxkSGVpZ2h0U3BlYyA9IGxheW91dFBhcmFtcy5oZWlnaHQgPiBvd25NYXhIZWlnaHQKICAgICAgICAgICAgICAgICAgICAgICAgID8gTWVhc3VyZVNwZWMubWFrZU1lYXN1cmVTcGVjKG93bk1heEhlaWdodCwgTWVhc3VyZVNwZWMuRVhBQ1RMWSkKICAgICAgICAgICAgICAgICAgICAgICAgIDogTWVhc3VyZVNwZWMubWFrZU1lYXN1cmVTcGVjKGxheW91dFBhcmFtcy5oZWlnaHQsIE1lYXN1cmVTcGVjLkVYQUNUTFkpOwogICAgICAgICAgICAgICAgIH0KQEAgLTkwLDcgKzg2LDggQEAKICAgICAgICAgICAgICAgICBtTWF0Y2hQYXJlbnRWaWV3cy5hZGQoY2hpbGQpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGludCBvd25IZWlnaHQgPSBoYXNGaXhlZEhlaWdodCA/IG93bk1heEhlaWdodCA6IE1hdGgubWluKG93bk1heEhlaWdodCwgbWF4Q2hpbGRIZWlnaHQpOworICAgICAgICBpbnQgb3duSGVpZ2h0ID0gaGVpZ2h0TW9kZSA9PSBNZWFzdXJlU3BlYy5FWEFDVExZCisgICAgICAgICAgICAgICAgPyBnaXZlblNpemUgOiBNYXRoLm1pbihvd25NYXhIZWlnaHQsIG1heENoaWxkSGVpZ2h0KTsKICAgICAgICAgbmV3SGVpZ2h0U3BlYyA9IE1lYXN1cmVTcGVjLm1ha2VNZWFzdXJlU3BlYyhvd25IZWlnaHQsIE1lYXN1cmVTcGVjLkVYQUNUTFkpOwogICAgICAgICBmb3IgKFZpZXcgY2hpbGQgOiBtTWF0Y2hQYXJlbnRWaWV3cykgewogICAgICAgICAgICAgY2hpbGQubWVhc3VyZShnZXRDaGlsZE1lYXN1cmVTcGVjKApAQCAtMTAwLDExICs5Nyw2IEBACiAgICAgICAgIG1NYXRjaFBhcmVudFZpZXdzLmNsZWFyKCk7CiAgICAgICAgIGludCB3aWR0aCA9IE1lYXN1cmVTcGVjLmdldFNpemUod2lkdGhNZWFzdXJlU3BlYyk7CiAgICAgICAgIHNldE1lYXN1cmVkRGltZW5zaW9uKHdpZHRoLCBvd25IZWlnaHQpOwotICAgICAgICBtTWVhc3VyZWRUb29IaWdoID0gaGVpZ2h0TW9kZSAhPSBNZWFzdXJlU3BlYy5VTlNQRUNJRklFRCAmJiBvd25IZWlnaHQgPiBnaXZlblNpemU7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIGJvb2xlYW4gc2hvdWxkTGltaXRWaWV3SGVpZ2h0KCkgewotICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKQEAgLTEzMywyNiArMTI1LDExIEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gZGlzcGF0Y2hHZW5lcmljTW90aW9uRXZlbnQoTW90aW9uRXZlbnQgZXYpIHsKLSAgICAgICAgaWYgKGZpbHRlck1vdGlvbkV2ZW50KGV2KSkgewotICAgICAgICAgICAgcmV0dXJuIHN1cGVyLmRpc3BhdGNoR2VuZXJpY01vdGlvbkV2ZW50KGV2KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gZGlzcGF0Y2hUb3VjaEV2ZW50KE1vdGlvbkV2ZW50IGV2KSB7Ci0gICAgICAgIGlmIChmaWx0ZXJNb3Rpb25FdmVudChldikpIHsKLSAgICAgICAgICAgIHJldHVybiBzdXBlci5kaXNwYXRjaFRvdWNoRXZlbnQoZXYpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgYm9vbGVhbiBmaWx0ZXJNb3Rpb25FdmVudChNb3Rpb25FdmVudCBldmVudCkgewotICAgICAgICByZXR1cm4gZXZlbnQuZ2V0QWN0aW9uTWFza2VkKCkgIT0gTW90aW9uRXZlbnQuQUNUSU9OX0RPV04KLSAgICAgICAgICAgICAgICAmJiBldmVudC5nZXRBY3Rpb25NYXNrZWQoKSAhPSBNb3Rpb25FdmVudC5BQ1RJT05fSE9WRVJfRU5URVIKLSAgICAgICAgICAgICAgICAmJiBldmVudC5nZXRBY3Rpb25NYXNrZWQoKSAhPSBNb3Rpb25FdmVudC5BQ1RJT05fSE9WRVJfTU9WRQotICAgICAgICAgICAgICAgIHx8IGV2ZW50LmdldFkoKSA+IG1DbGlwVG9wQW1vdW50ICYmIGV2ZW50LmdldFkoKSA8IG1BY3R1YWxIZWlnaHQ7CisgICAgcHVibGljIGJvb2xlYW4gcG9pbnRJblZpZXcoZmxvYXQgbG9jYWxYLCBmbG9hdCBsb2NhbFksIGZsb2F0IHNsb3ApIHsKKyAgICAgICAgZmxvYXQgdG9wID0gbUNsaXBUb3BBbW91bnQ7CisgICAgICAgIGZsb2F0IGJvdHRvbSA9IG1BY3R1YWxIZWlnaHQ7CisgICAgICAgIHJldHVybiBsb2NhbFggPj0gLXNsb3AgJiYgbG9jYWxZID49IHRvcCAtIHNsb3AgJiYgbG9jYWxYIDwgKChtUmlnaHQgLSBtTGVmdCkgKyBzbG9wKSAmJgorICAgICAgICAgICAgICAgIGxvY2FsWSA8IChib3R0b20gKyBzbG9wKTsKICAgICB9CiAKICAgICAvKioKQEAgLTM5Nyw3ICszNzQsOCBAQAogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGJvb2xlYW4gaGFzT3ZlcmxhcHBpbmdSZW5kZXJpbmcoKSB7Ci0gICAgICAgIHJldHVybiBzdXBlci5oYXNPdmVybGFwcGluZ1JlbmRlcmluZygpICYmICFtTWVhc3VyZWRUb29IaWdoOworICAgICAgICAvLyBPdGhlcndpc2UgaXQgd2lsbCBiZSBjbGlwcGVkCisgICAgICAgIHJldHVybiBzdXBlci5oYXNPdmVybGFwcGluZ1JlbmRlcmluZygpICYmIGdldEFjdHVhbEhlaWdodCgpIDw9IGdldEhlaWdodCgpOwogICAgIH0KIAogICAgIC8qKgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9Ob3RpZmljYXRpb25Db250ZW50Vmlldy5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9Ob3RpZmljYXRpb25Db250ZW50Vmlldy5qYXZhCmluZGV4IDZkOTAzMjkuLjAyYTM5ZTcgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvTm90aWZpY2F0aW9uQ29udGVudFZpZXcuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL05vdGlmaWNhdGlvbkNvbnRlbnRWaWV3LmphdmEKQEAgLTI0LDYgKzI0LDcgQEAKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBvcnRlckR1ZmY7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5Qb3J0ZXJEdWZmWGZlcm1vZGU7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0OworaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7CiBpbXBvcnQgYW5kcm9pZC5zZXJ2aWNlLm5vdGlmaWNhdGlvbi5TdGF0dXNCYXJOb3RpZmljYXRpb247CiBpbXBvcnQgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuTm90aWZpY2F0aW9uSGVhZGVyVmlldzsKQEAgLTU4LDYgKzU5LDggQEAKICAgICBwcml2YXRlIGZpbmFsIGludCBtUm91bmRSZWN0UmFkaXVzOwogICAgIHByaXZhdGUgZmluYWwgSW50ZXJwb2xhdG9yIG1MaW5lYXJJbnRlcnBvbGF0b3IgPSBuZXcgTGluZWFySW50ZXJwb2xhdG9yKCk7CiAgICAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIG1Sb3VuZFJlY3RDbGlwcGluZ0VuYWJsZWQ7CisgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbU1pbkNvbnRyYWN0ZWRIZWlnaHQ7CisKIAogICAgIHByaXZhdGUgVmlldyBtQ29udHJhY3RlZENoaWxkOwogICAgIHByaXZhdGUgVmlldyBtRXhwYW5kZWRDaGlsZDsKQEAgLTgwLDYgKzgzLDcgQEAKICAgICBwcml2YXRlIGJvb2xlYW4gbUlzQ2hpbGRJbkdyb3VwOwogICAgIHByaXZhdGUgaW50IG1TbWFsbEhlaWdodDsKICAgICBwcml2YXRlIGludCBtSGVhZHNVcEhlaWdodDsKKyAgICBwcml2YXRlIGludCBtTm90aWZpY2F0aW9uTWF4SGVpZ2h0OwogICAgIHByaXZhdGUgU3RhdHVzQmFyTm90aWZpY2F0aW9uIG1TdGF0dXNCYXJOb3RpZmljYXRpb247CiAgICAgcHJpdmF0ZSBOb3RpZmljYXRpb25Hcm91cE1hbmFnZXIgbUdyb3VwTWFuYWdlcjsKICAgICBwcml2YXRlIFJlbW90ZUlucHV0Q29udHJvbGxlciBtUmVtb3RlSW5wdXRDb250cm9sbGVyOwpAQCAtMTAyLDYgKzEwNiw4IEBACiAgICAgICAgIH0KICAgICB9OwogICAgIHByaXZhdGUgT25DbGlja0xpc3RlbmVyIG1FeHBhbmRDbGlja0xpc3RlbmVyOworICAgIHByaXZhdGUgYm9vbGVhbiBtQmVmb3JlTjsKKyAgICBwcml2YXRlIGJvb2xlYW4gbUV4cGFuZGFibGU7CiAKICAgICBwdWJsaWMgTm90aWZpY2F0aW9uQ29udGVudFZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKICAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMpOwpAQCAtMTExLDEzICsxMTcsMTYgQEAKICAgICAgICAgICAgICAgICBSLmRpbWVuLm5vdGlmaWNhdGlvbl9tYXRlcmlhbF9yb3VuZGVkX3JlY3RfcmFkaXVzKTsKICAgICAgICAgbVJvdW5kUmVjdENsaXBwaW5nRW5hYmxlZCA9IGdldFJlc291cmNlcygpLmdldEJvb2xlYW4oCiAgICAgICAgICAgICAgICAgUi5ib29sLmNvbmZpZ19ub3RpZmljYXRpb25zX3JvdW5kX3JlY3RfY2xpcHBpbmcpOworICAgICAgICBtTWluQ29udHJhY3RlZEhlaWdodCA9IGdldFJlc291cmNlcygpLmdldERpbWVuc2lvblBpeGVsU2l6ZSgKKyAgICAgICAgICAgICAgICBSLmRpbWVuLm1pbl9ub3RpZmljYXRpb25fbGF5b3V0X2hlaWdodCk7CiAgICAgICAgIHJlc2V0KHRydWUpOwogICAgICAgICBzZXRPdXRsaW5lUHJvdmlkZXIobU91dGxpbmVQcm92aWRlcik7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgc2V0SGVpZ2h0cyhpbnQgc21hbGxIZWlnaHQsIGludCBoZWFkc1VwTWF4SGVpZ2h0KSB7CisgICAgcHVibGljIHZvaWQgc2V0SGVpZ2h0cyhpbnQgc21hbGxIZWlnaHQsIGludCBoZWFkc1VwTWF4SGVpZ2h0LCBpbnQgbWF4SGVpZ2h0KSB7CiAgICAgICAgIG1TbWFsbEhlaWdodCA9IHNtYWxsSGVpZ2h0OwogICAgICAgICBtSGVhZHNVcEhlaWdodCA9IGhlYWRzVXBNYXhIZWlnaHQ7CisgICAgICAgIG1Ob3RpZmljYXRpb25NYXhIZWlnaHQgPSBtYXhIZWlnaHQ7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCkBAIC0xMzEsMTMgKzE0MCwyMyBAQAogICAgICAgICB9CiAgICAgICAgIGludCBtYXhDaGlsZEhlaWdodCA9IDA7CiAgICAgICAgIGlmIChtQ29udHJhY3RlZENoaWxkICE9IG51bGwpIHsKLSAgICAgICAgICAgIGludCBzaXplID0gTWF0aC5taW4obWF4U2l6ZSwgbVNtYWxsSGVpZ2h0KTsKLSAgICAgICAgICAgIG1Db250cmFjdGVkQ2hpbGQubWVhc3VyZSh3aWR0aE1lYXN1cmVTcGVjLAotICAgICAgICAgICAgICAgICAgICBNZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMoc2l6ZSwgTWVhc3VyZVNwZWMuRVhBQ1RMWSkpOwotICAgICAgICAgICAgbWF4Q2hpbGRIZWlnaHQgPSBNYXRoLm1heChtYXhDaGlsZEhlaWdodCwgbUNvbnRyYWN0ZWRDaGlsZC5nZXRNZWFzdXJlZEhlaWdodCgpKTsKKyAgICAgICAgICAgIGludCBoZWlnaHRTcGVjOworICAgICAgICAgICAgaWYgKHNob3VsZENvbnRyYWN0ZWRCZUZpeGVkU2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgaW50IHNpemUgPSBNYXRoLm1pbihtYXhTaXplLCBtU21hbGxIZWlnaHQpOworICAgICAgICAgICAgICAgIGhlaWdodFNwZWMgPSBNZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMoc2l6ZSwgTWVhc3VyZVNwZWMuRVhBQ1RMWSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGhlaWdodFNwZWMgPSBNZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMobWF4U2l6ZSwgTWVhc3VyZVNwZWMuQVRfTU9TVCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtQ29udHJhY3RlZENoaWxkLm1lYXN1cmUod2lkdGhNZWFzdXJlU3BlYywgaGVpZ2h0U3BlYyk7CisgICAgICAgICAgICBpbnQgbWVhc3VyZWRIZWlnaHQgPSBtQ29udHJhY3RlZENoaWxkLmdldE1lYXN1cmVkSGVpZ2h0KCk7CisgICAgICAgICAgICBpZiAobWVhc3VyZWRIZWlnaHQgPCBtTWluQ29udHJhY3RlZEhlaWdodCkgeworICAgICAgICAgICAgICAgIGhlaWdodFNwZWMgPSBNZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMobU1pbkNvbnRyYWN0ZWRIZWlnaHQsIE1lYXN1cmVTcGVjLkVYQUNUTFkpOworICAgICAgICAgICAgICAgIG1Db250cmFjdGVkQ2hpbGQubWVhc3VyZSh3aWR0aE1lYXN1cmVTcGVjLCBoZWlnaHRTcGVjKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1heENoaWxkSGVpZ2h0ID0gTWF0aC5tYXgobWF4Q2hpbGRIZWlnaHQsIG1lYXN1cmVkSGVpZ2h0KTsKICAgICAgICAgfQogICAgICAgICBpZiAobUV4cGFuZGVkQ2hpbGQgIT0gbnVsbCkgewotICAgICAgICAgICAgaW50IHNpemUgPSBtYXhTaXplOworICAgICAgICAgICAgaW50IHNpemUgPSBNYXRoLm1pbihtYXhTaXplLCBtTm90aWZpY2F0aW9uTWF4SGVpZ2h0KTsKICAgICAgICAgICAgIFZpZXdHcm91cC5MYXlvdXRQYXJhbXMgbGF5b3V0UGFyYW1zID0gbUV4cGFuZGVkQ2hpbGQuZ2V0TGF5b3V0UGFyYW1zKCk7CiAgICAgICAgICAgICBpZiAobGF5b3V0UGFyYW1zLmhlaWdodCA+PSAwKSB7CiAgICAgICAgICAgICAgICAgLy8gQW4gYWN0dWFsIGhlaWdodCBpcyBzZXQKQEAgLTE3MCw2ICsxODksMTAgQEAKICAgICAgICAgc2V0TWVhc3VyZWREaW1lbnNpb24od2lkdGgsIG93bkhlaWdodCk7CiAgICAgfQogCisgICAgcHJpdmF0ZSBib29sZWFuIHNob3VsZENvbnRyYWN0ZWRCZUZpeGVkU2l6ZSgpIHsKKyAgICAgICAgcmV0dXJuIG1CZWZvcmVOICYmIG1Db250cmFjdGVkV3JhcHBlciBpbnN0YW5jZW9mIE5vdGlmaWNhdGlvbkN1c3RvbVZpZXdXcmFwcGVyOworICAgIH0KKwogICAgIEBPdmVycmlkZQogICAgIHByb3RlY3RlZCB2b2lkIG9uTGF5b3V0KGJvb2xlYW4gY2hhbmdlZCwgaW50IGxlZnQsIGludCB0b3AsIGludCByaWdodCwgaW50IGJvdHRvbSkgewogICAgICAgICBzdXBlci5vbkxheW91dChjaGFuZ2VkLCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwpAQCAtMjkyLDE0ICszMTUsMTQgQEAKICAgICAgICAgfSBlbHNlIGlmIChtSXNIZWFkc1VwICYmIG1IZWFkc1VwQ2hpbGQgIT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuIG1IZWFkc1VwQ2hpbGQuZ2V0SGVpZ2h0KCk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1TbWFsbEhlaWdodDsKKyAgICAgICAgcmV0dXJuIG1Db250cmFjdGVkQ2hpbGQuZ2V0SGVpZ2h0KCk7CiAgICAgfQogCiAgICAgcHVibGljIGludCBnZXRNaW5IZWlnaHQoKSB7CiAgICAgICAgIGlmIChtSXNDaGlsZEluR3JvdXAgJiYgIWlzR3JvdXBFeHBhbmRlZCgpKSB7CiAgICAgICAgICAgICByZXR1cm4gbVNpbmdsZUxpbmVWaWV3LmdldEhlaWdodCgpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIG1TbWFsbEhlaWdodDsKKyAgICAgICAgICAgIHJldHVybiBtQ29udHJhY3RlZENoaWxkLmdldEhlaWdodCgpOwogICAgICAgICB9CiAgICAgfQogCkBAIC00MzUsNiArNDU4LDkgQEAKICAgICAgICAgaWYgKCFub0V4cGFuZGVkQ2hpbGQgJiYgbUNvbnRlbnRIZWlnaHQgPT0gbUV4cGFuZGVkQ2hpbGQuZ2V0SGVpZ2h0KCkpIHsKICAgICAgICAgICAgIHJldHVybiBWSVNJQkxFX1RZUEVfRVhQQU5ERUQ7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKG1Jc0NoaWxkSW5Hcm91cCAmJiAhaXNHcm91cEV4cGFuZGVkKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBWSVNJQkxFX1RZUEVfU0lOR0xFTElORTsKKyAgICAgICAgfQogCiAgICAgICAgIGlmIChtSXNIZWFkc1VwICYmIG1IZWFkc1VwQ2hpbGQgIT0gbnVsbCkgewogICAgICAgICAgICAgaWYgKG1Db250ZW50SGVpZ2h0IDw9IG1IZWFkc1VwQ2hpbGQuZ2V0SGVpZ2h0KCkgfHwgbm9FeHBhbmRlZENoaWxkKSB7CkBAIC00NDMsOSArNDY5LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gVklTSUJMRV9UWVBFX0VYUEFOREVEOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKG1Jc0NoaWxkSW5Hcm91cCAmJiAhaXNHcm91cEV4cGFuZGVkKCkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gVklTSUJMRV9UWVBFX1NJTkdMRUxJTkU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG1Db250ZW50SGVpZ2h0IDw9IG1TbWFsbEhlaWdodCB8fCBub0V4cGFuZGVkQ2hpbGQpIHsKKyAgICAgICAgICAgIGlmIChtQ29udGVudEhlaWdodCA8PSBtQ29udHJhY3RlZENoaWxkLmdldEhlaWdodCgpIHx8IG5vRXhwYW5kZWRDaGlsZCkgewogICAgICAgICAgICAgICAgIHJldHVybiBWSVNJQkxFX1RZUEVfQ09OVFJBQ1RFRDsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIFZJU0lCTEVfVFlQRV9FWFBBTkRFRDsKQEAgLTQ2OSw2ICs0OTMsNyBAQAogICAgIHB1YmxpYyB2b2lkIHNldEhlYWRzVXAoYm9vbGVhbiBoZWFkc1VwKSB7CiAgICAgICAgIG1Jc0hlYWRzVXAgPSBoZWFkc1VwOwogICAgICAgICBzZWxlY3RMYXlvdXQoZmFsc2UgLyogYW5pbWF0ZSAqLywgdHJ1ZSAvKiBmb3JjZSAqLyk7CisgICAgICAgIHVwZGF0ZUV4cGFuZEJ1dHRvbnMobUV4cGFuZGFibGUpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpAQCAtNDkwLDYgKzUxNSw3IEBACiAKICAgICBwdWJsaWMgdm9pZCBvbk5vdGlmaWNhdGlvblVwZGF0ZWQoTm90aWZpY2F0aW9uRGF0YS5FbnRyeSBlbnRyeSkgewogICAgICAgICBtU3RhdHVzQmFyTm90aWZpY2F0aW9uID0gZW50cnkubm90aWZpY2F0aW9uOworICAgICAgICBtQmVmb3JlTiA9IGVudHJ5LnRhcmdldFNkayA8IEJ1aWxkLlZFUlNJT05fQ09ERVMuTjsKICAgICAgICAgdXBkYXRlU2luZ2xlTGluZVZpZXcoKTsKICAgICAgICAgYXBwbHlSZW1vdGVJbnB1dChlbnRyeSk7CiAgICAgICAgIHNlbGVjdExheW91dChmYWxzZSAvKiBhbmltYXRlICovLCB0cnVlIC8qIGZvcmNlICovKTsKQEAgLTU4Nyw2ICs2MTMsMTMgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB1cGRhdGVFeHBhbmRCdXR0b25zKGJvb2xlYW4gZXhwYW5kYWJsZSkgeworICAgICAgICBtRXhwYW5kYWJsZSA9IGV4cGFuZGFibGU7CisgICAgICAgIC8vIGlmIHRoZSBleHBhbmRlZCBjaGlsZCBoYXMgdGhlIHNhbWUgaGVpZ2h0IGFzIHRoZSBjb2xsYXBzZWQgb25lIHdlIGhpZGUgaXQuCisgICAgICAgIGlmIChtRXhwYW5kZWRDaGlsZCAhPSBudWxsICYmIG1FeHBhbmRlZENoaWxkLmdldEhlaWdodCgpICE9IDAgJiYKKyAgICAgICAgICAgICAgICAoKG1Jc0hlYWRzVXAgJiYgbUV4cGFuZGVkQ2hpbGQuZ2V0SGVpZ2h0KCkgPT0gbUhlYWRzVXBDaGlsZC5nZXRIZWlnaHQoKSkgfHwKKyAgICAgICAgICAgICAgICAoIW1Jc0hlYWRzVXAgJiYgbUV4cGFuZGVkQ2hpbGQuZ2V0SGVpZ2h0KCkgPT0gbUNvbnRyYWN0ZWRDaGlsZC5nZXRIZWlnaHQoKSkpKSB7CisgICAgICAgICAgICBleHBhbmRhYmxlID0gZmFsc2U7CisgICAgICAgIH0KICAgICAgICAgaWYgKG1FeHBhbmRlZENoaWxkICE9IG51bGwpIHsKICAgICAgICAgICAgIG1FeHBhbmRlZFdyYXBwZXIudXBkYXRlRXhwYW5kYWJpbGl0eShleHBhbmRhYmxlLCBtRXhwYW5kQ2xpY2tMaXN0ZW5lcik7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvTm90aWZpY2F0aW9uRGF0YS5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9Ob3RpZmljYXRpb25EYXRhLmphdmEKaW5kZXggYzQ1OGQyMS4uM2NjMWFiOSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9Ob3RpZmljYXRpb25EYXRhLmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9Ob3RpZmljYXRpb25EYXRhLmphdmEKQEAgLTExNSwxNyArMTE1LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVkTm90aWZpY2F0aW9uQnVpbGRlci5tYWtlQmlnQ29udGVudFZpZXcoKTsKICAgICAgICAgICAgICAgICBmaW5hbCBSZW1vdGVWaWV3cyBuZXdIZWFkc1VwQ29udGVudFZpZXcgPQogICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZE5vdGlmaWNhdGlvbkJ1aWxkZXIubWFrZUhlYWRzVXBDb250ZW50VmlldygpOwotICAgICAgICAgICAgICAgIGZpbmFsIE5vdGlmaWNhdGlvbiB1cGRhdGVkUHVibGljTm90aWZpY2F0aW9uID0gdXBkYXRlZE5vdGlmaWNhdGlvbi5wdWJsaWNWZXJzaW9uOwotICAgICAgICAgICAgICAgIGZpbmFsIFJlbW90ZVZpZXdzIG5ld1B1YkNvbnRlbnRWaWV3ID0gKHVwZGF0ZWRQdWJsaWNOb3RpZmljYXRpb24gIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgICAgID8gTm90aWZpY2F0aW9uLkJ1aWxkZXIucmVjb3ZlckJ1aWxkZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eCwgdXBkYXRlZFB1YmxpY05vdGlmaWNhdGlvbikubWFrZUNvbnRlbnRWaWV3KCkKLSAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbDsKKyAgICAgICAgICAgICAgICBmaW5hbCBSZW1vdGVWaWV3cyBuZXdQdWJsaWNOb3RpZmljYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgID0gdXBkYXRlZE5vdGlmaWNhdGlvbkJ1aWxkZXIubWFrZVB1YmxpY0NvbnRlbnRWaWV3KCk7CiAKICAgICAgICAgICAgICAgICBhcHBseUluUGxhY2UgPSBjb21wYXJlUmVtb3RlVmlld3MoY2FjaGVkQ29udGVudFZpZXcsIG5ld0NvbnRlbnRWaWV3KQogICAgICAgICAgICAgICAgICAgICAgICAgJiYgY29tcGFyZVJlbW90ZVZpZXdzKGNhY2hlZEJpZ0NvbnRlbnRWaWV3LCBuZXdCaWdDb250ZW50VmlldykKICAgICAgICAgICAgICAgICAgICAgICAgICYmIGNvbXBhcmVSZW1vdGVWaWV3cyhjYWNoZWRIZWFkc1VwQ29udGVudFZpZXcsIG5ld0hlYWRzVXBDb250ZW50VmlldykKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIGNvbXBhcmVSZW1vdGVWaWV3cyhjYWNoZWRQdWJsaWNDb250ZW50VmlldywgbmV3UHViQ29udGVudFZpZXcpOwotICAgICAgICAgICAgICAgIGNhY2hlZFB1YmxpY0NvbnRlbnRWaWV3ID0gbmV3UHViQ29udGVudFZpZXc7CisgICAgICAgICAgICAgICAgICAgICAgICAmJiBjb21wYXJlUmVtb3RlVmlld3MoY2FjaGVkUHVibGljQ29udGVudFZpZXcsIG5ld1B1YmxpY05vdGlmaWNhdGlvbik7CisgICAgICAgICAgICAgICAgY2FjaGVkUHVibGljQ29udGVudFZpZXcgPSBuZXdQdWJsaWNOb3RpZmljYXRpb247CiAgICAgICAgICAgICAgICAgY2FjaGVkSGVhZHNVcENvbnRlbnRWaWV3ID0gbmV3SGVhZHNVcENvbnRlbnRWaWV3OwogICAgICAgICAgICAgICAgIGNhY2hlZEJpZ0NvbnRlbnRWaWV3ID0gbmV3QmlnQ29udGVudFZpZXc7CiAgICAgICAgICAgICAgICAgY2FjaGVkQ29udGVudFZpZXcgPSBuZXdDb250ZW50VmlldzsKQEAgLTEzNiwxNCArMTMzLDggQEAKICAgICAgICAgICAgICAgICBjYWNoZWRDb250ZW50VmlldyA9IGJ1aWxkZXIubWFrZUNvbnRlbnRWaWV3KCk7CiAgICAgICAgICAgICAgICAgY2FjaGVkQmlnQ29udGVudFZpZXcgPSBidWlsZGVyLm1ha2VCaWdDb250ZW50VmlldygpOwogICAgICAgICAgICAgICAgIGNhY2hlZEhlYWRzVXBDb250ZW50VmlldyA9IGJ1aWxkZXIubWFrZUhlYWRzVXBDb250ZW50VmlldygpOworICAgICAgICAgICAgICAgIGNhY2hlZFB1YmxpY0NvbnRlbnRWaWV3ID0gYnVpbGRlci5tYWtlUHVibGljQ29udGVudFZpZXcoKTsKIAotICAgICAgICAgICAgICAgIGZpbmFsIE5vdGlmaWNhdGlvbiBwdWJsaWNOb3RpZmljYXRpb24gPQotICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpY2F0aW9uLmdldE5vdGlmaWNhdGlvbigpLnB1YmxpY1ZlcnNpb247Ci0gICAgICAgICAgICAgICAgaWYgKHB1YmxpY05vdGlmaWNhdGlvbiAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpbmFsIE5vdGlmaWNhdGlvbi5CdWlsZGVyIHB1YmxpY0J1aWxkZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IE5vdGlmaWNhdGlvbi5CdWlsZGVyLnJlY292ZXJCdWlsZGVyKGN0eCwgcHVibGljTm90aWZpY2F0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgY2FjaGVkUHVibGljQ29udGVudFZpZXcgPSBwdWJsaWNCdWlsZGVyLm1ha2VDb250ZW50VmlldygpOwotICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBhcHBseUluUGxhY2UgPSBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBhcHBseUluUGxhY2U7CkBAIC0zMDEsNiArMjkyLDE1IEBACiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKKyAgICBwdWJsaWMgYm9vbGVhbiBzaG91bGRTdXBwcmVzc1NjcmVlbk9uKFN0cmluZyBrZXkpIHsKKyAgICAgICAgaWYgKG1SYW5raW5nTWFwICE9IG51bGwpIHsKKyAgICAgICAgICAgIG1SYW5raW5nTWFwLmdldFJhbmtpbmcoa2V5LCBtVG1wUmFua2luZyk7CisgICAgICAgICAgICByZXR1cm4gKG1UbXBSYW5raW5nLmdldFN1cHByZXNzZWRWaXN1YWxFZmZlY3RzKCkKKyAgICAgICAgICAgICAgICAgICAgJiBOb3RpZmljYXRpb25MaXN0ZW5lclNlcnZpY2UuU1VQUFJFU1NFRF9FRkZFQ1RfU0NSRUVOX09OKSAhPSAwOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKICAgICBwdWJsaWMgaW50IGdldEltcG9ydGFuY2UoU3RyaW5nIGtleSkgewogICAgICAgICBpZiAobVJhbmtpbmdNYXAgIT0gbnVsbCkgewogICAgICAgICAgICAgbVJhbmtpbmdNYXAuZ2V0UmFua2luZyhrZXksIG1UbXBSYW5raW5nKTsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvTm90aWZpY2F0aW9uR3V0cy5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9Ob3RpZmljYXRpb25HdXRzLmphdmEKaW5kZXggMDA4MTQ5Ni4uNjg1MGY3ZWMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvTm90aWZpY2F0aW9uR3V0cy5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvTm90aWZpY2F0aW9uR3V0cy5qYXZhCkBAIC0xNiwxMiArMTYsMjQgQEAKIAogcGFja2FnZSBjb20uYW5kcm9pZC5zeXN0ZW11aS5zdGF0dXNiYXI7CiAKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uSWRSZXM7CitpbXBvcnQgYW5kcm9pZC5hcHAuSU5vdGlmaWNhdGlvbk1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC5hcHAuTm90aWZpY2F0aW9uOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQ2FudmFzOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGU7CitpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CitpbXBvcnQgYW5kcm9pZC5vcy5TZXJ2aWNlTWFuYWdlcjsKK2ltcG9ydCBhbmRyb2lkLnNlcnZpY2Uubm90aWZpY2F0aW9uLk5vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZTsKK2ltcG9ydCBhbmRyb2lkLnNlcnZpY2Uubm90aWZpY2F0aW9uLlN0YXR1c0Jhck5vdGlmaWNhdGlvbjsKIGltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkZyYW1lTGF5b3V0OwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkxpbmVhckxheW91dDsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5SYWRpb0J1dHRvbjsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5SYWRpb0dyb3VwOworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlNlZWtCYXI7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuVGV4dFZpZXc7CiAKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5SOwogCkBAIC0zMyw2ICs0NSw3IEBACiAgICAgcHJpdmF0ZSBEcmF3YWJsZSBtQmFja2dyb3VuZDsKICAgICBwcml2YXRlIGludCBtQ2xpcFRvcEFtb3VudDsKICAgICBwcml2YXRlIGludCBtQWN0dWFsSGVpZ2h0OworICAgIHByaXZhdGUgYm9vbGVhbiBtRXhwb3NlZDsKIAogICAgIHB1YmxpYyBOb3RpZmljYXRpb25HdXRzKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzKSB7CiAgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzKTsKQEAgLTgzLDYgKzk2LDExNSBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgdm9pZCBiaW5kSW1wb3J0YW5jZShmaW5hbCBTdGF0dXNCYXJOb3RpZmljYXRpb24gc2JuLCBmaW5hbCBFeHBhbmRhYmxlTm90aWZpY2F0aW9uUm93IHJvdywKKyAgICAgICAgICAgIGZpbmFsIGludCBpbXBvcnRhbmNlKSB7CisgICAgICAgIGZpbmFsIElOb3RpZmljYXRpb25NYW5hZ2VyIHNJTk0gPSBJTm90aWZpY2F0aW9uTWFuYWdlci5TdHViLmFzSW50ZXJmYWNlKAorICAgICAgICAgICAgICAgIFNlcnZpY2VNYW5hZ2VyLmdldFNlcnZpY2UoQ29udGV4dC5OT1RJRklDQVRJT05fU0VSVklDRSkpOworICAgICAgICBmaW5hbCBOb3RpZmljYXRpb24uVG9waWMgdG9waWMgPSBzYm4uZ2V0Tm90aWZpY2F0aW9uKCkuZ2V0VG9waWMoKSA9PSBudWxsCisgICAgICAgICAgICAgICAgPyBuZXcgTm90aWZpY2F0aW9uLlRvcGljKE5vdGlmaWNhdGlvbi5UT1BJQ19ERUZBVUxULCBtQ29udGV4dC5nZXRTdHJpbmcoCisgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHJpbmcuZGVmYXVsdF9ub3RpZmljYXRpb25fdG9waWNfbGFiZWwpKQorICAgICAgICAgICAgICAgIDogc2JuLmdldE5vdGlmaWNhdGlvbigpLmdldFRvcGljKCk7CisgICAgICAgIGJvb2xlYW4gZG9lc0FwcFVzZVRvcGljcyA9IGZhbHNlOworICAgICAgICB0cnkgeworICAgICAgICAgICAgZG9lc0FwcFVzZVRvcGljcyA9IHNJTk0uZG9lc0FwcFVzZVRvcGljcyhzYm4uZ2V0UGFja2FnZU5hbWUoKSwgc2JuLmdldFVpZCgpKTsKKyAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHt9CisgICAgICAgIGZpbmFsIGJvb2xlYW4gYXBwVXNlc1RvcGljcyA9IGRvZXNBcHBVc2VUb3BpY3M7CisKKyAgICAgICAgZmluYWwgUmFkaW9CdXR0b24gYXBwbHlUb1RvcGljID0gKFJhZGlvQnV0dG9uKSByb3cuZmluZFZpZXdCeUlkKFIuaWQuYXBwbHlfdG9fdG9waWMpOworICAgICAgICBhcHBseVRvVG9waWMuc2V0Q2hlY2tlZCh0cnVlKTsKKyAgICAgICAgZmluYWwgVmlldyBhcHBseVRvQXBwID0gcm93LmZpbmRWaWV3QnlJZChSLmlkLmFwcGx5X3RvX2FwcCk7CisgICAgICAgIGZpbmFsIFRleHRWaWV3IHRvcGljU3VtbWFyeSA9ICgoVGV4dFZpZXcpIHJvdy5maW5kVmlld0J5SWQoUi5pZC5zdW1tYXJ5KSk7CisgICAgICAgIGZpbmFsIFRleHRWaWV3IHRvcGljVGl0bGUgPSAoKFRleHRWaWV3KSByb3cuZmluZFZpZXdCeUlkKFIuaWQudGl0bGUpKTsKKyAgICAgICAgZmluYWwgU2Vla0JhciBzZWVrQmFyID0gKFNlZWtCYXIpIHJvdy5maW5kVmlld0J5SWQoUi5pZC5zZWVrYmFyKTsKKyAgICAgICAgZmluYWwgUmFkaW9Hcm91cCBhcHBseVRvID0gKFJhZGlvR3JvdXApIHJvdy5maW5kVmlld0J5SWQoUi5pZC5hcHBseV90byk7CisgICAgICAgIGFwcGx5VG8uc2V0T25DaGVja2VkQ2hhbmdlTGlzdGVuZXIobmV3IFJhZGlvR3JvdXAuT25DaGVja2VkQ2hhbmdlTGlzdGVuZXIoKSB7CisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2hlY2tlZENoYW5nZWQoUmFkaW9Hcm91cCBncm91cCwgQElkUmVzIGludCBjaGVja2VkSWQpIHsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNoZWNrZWRJZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBSLmlkLmFwcGx5X3RvX3RvcGljOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNJTk0uc2V0VG9waWNJbXBvcnRhbmNlKHNibi5nZXRQYWNrYWdlTmFtZSgpLCBzYm4uZ2V0VWlkKCksIHRvcGljLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vla0Jhci5nZXRQcm9ncmVzcygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc0lOTS5zZXRBcHBJbXBvcnRhbmNlKHNibi5nZXRQYWNrYWdlTmFtZSgpLCBzYm4uZ2V0VWlkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWVrQmFyLmdldFByb2dyZXNzKCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gOigKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgIHNlZWtCYXIuc2V0TWF4KDQpOworICAgICAgICBzZWVrQmFyLnNldE9uU2Vla0JhckNoYW5nZUxpc3RlbmVyKG5ldyBTZWVrQmFyLk9uU2Vla0JhckNoYW5nZUxpc3RlbmVyKCkgeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblByb2dyZXNzQ2hhbmdlZChTZWVrQmFyIHNlZWtCYXIsIGludCBwcm9ncmVzcywgYm9vbGVhbiBmcm9tVXNlcikgeworICAgICAgICAgICAgICAgIHVwZGF0ZVRpdGxlQW5kU3VtbWFyeShwcm9ncmVzcyk7CisgICAgICAgICAgICAgICAgaWYgKGZyb21Vc2VyKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChhcHBVc2VzVG9waWNzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhcHBseVRvVG9waWMuc2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpOworCisgICAgICAgICAgICAgICAgICAgICAgICBhcHBseVRvVG9waWMuc2V0VGV4dCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUNvbnRleHQuZ2V0U3RyaW5nKFIuc3RyaW5nLmFwcGx5X3RvX3RvcGljLCB0b3BpYy5nZXRMYWJlbCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBhcHBseVRvQXBwLnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFwcGx5VG9Ub3BpYy5pc0NoZWNrZWQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNJTk0uc2V0VG9waWNJbXBvcnRhbmNlKHNibi5nZXRQYWNrYWdlTmFtZSgpLCBzYm4uZ2V0VWlkKCksIHRvcGljLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3MpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzSU5NLnNldEFwcEltcG9ydGFuY2Uoc2JuLmdldFBhY2thZ2VOYW1lKCksIHNibi5nZXRVaWQoKSwgcHJvZ3Jlc3MpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gOigKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblN0YXJ0VHJhY2tpbmdUb3VjaChTZWVrQmFyIHNlZWtCYXIpIHsKKyAgICAgICAgICAgICAgICAvLyBuby1vcAorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uU3RvcFRyYWNraW5nVG91Y2goU2Vla0JhciBzZWVrQmFyKSB7CisgICAgICAgICAgICAgICAgLy8gbm8tb3AKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVRpdGxlQW5kU3VtbWFyeShpbnQgcHJvZ3Jlc3MpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHByb2dyZXNzKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgTm90aWZpY2F0aW9uTGlzdGVuZXJTZXJ2aWNlLlJhbmtpbmcuSU1QT1JUQU5DRV9OT05FOgorICAgICAgICAgICAgICAgICAgICAgICAgdG9waWNTdW1tYXJ5LnNldFRleHQobUNvbnRleHQuZ2V0U3RyaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSLnN0cmluZy5ub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB0b3BpY1RpdGxlLnNldFRleHQobUNvbnRleHQuZ2V0U3RyaW5nKFIuc3RyaW5nLmJsb2NrZWRfaW1wb3J0YW5jZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgTm90aWZpY2F0aW9uTGlzdGVuZXJTZXJ2aWNlLlJhbmtpbmcuSU1QT1JUQU5DRV9MT1c6CisgICAgICAgICAgICAgICAgICAgICAgICB0b3BpY1N1bW1hcnkuc2V0VGV4dChtQ29udGV4dC5nZXRTdHJpbmcoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFIuc3RyaW5nLm5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdykpOworICAgICAgICAgICAgICAgICAgICAgICAgdG9waWNUaXRsZS5zZXRUZXh0KG1Db250ZXh0LmdldFN0cmluZyhSLnN0cmluZy5sb3dfaW1wb3J0YW5jZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgTm90aWZpY2F0aW9uTGlzdGVuZXJTZXJ2aWNlLlJhbmtpbmcuSU1QT1JUQU5DRV9ERUZBVUxUOgorICAgICAgICAgICAgICAgICAgICAgICAgdG9waWNTdW1tYXJ5LnNldFRleHQobUNvbnRleHQuZ2V0U3RyaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSLnN0cmluZy5ub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICB0b3BpY1RpdGxlLnNldFRleHQobUNvbnRleHQuZ2V0U3RyaW5nKFIuc3RyaW5nLmRlZmF1bHRfaW1wb3J0YW5jZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgTm90aWZpY2F0aW9uTGlzdGVuZXJTZXJ2aWNlLlJhbmtpbmcuSU1QT1JUQU5DRV9ISUdIOgorICAgICAgICAgICAgICAgICAgICAgICAgdG9waWNTdW1tYXJ5LnNldFRleHQobUNvbnRleHQuZ2V0U3RyaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSLnN0cmluZy5ub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB0b3BpY1RpdGxlLnNldFRleHQobUNvbnRleHQuZ2V0U3RyaW5nKFIuc3RyaW5nLmhpZ2hfaW1wb3J0YW5jZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgTm90aWZpY2F0aW9uTGlzdGVuZXJTZXJ2aWNlLlJhbmtpbmcuSU1QT1JUQU5DRV9NQVg6CisgICAgICAgICAgICAgICAgICAgICAgICB0b3BpY1N1bW1hcnkuc2V0VGV4dChtQ29udGV4dC5nZXRTdHJpbmcoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFIuc3RyaW5nLm5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCkpOworICAgICAgICAgICAgICAgICAgICAgICAgdG9waWNUaXRsZS5zZXRUZXh0KG1Db250ZXh0LmdldFN0cmluZyhSLnN0cmluZy5tYXhfaW1wb3J0YW5jZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgc2Vla0Jhci5zZXRQcm9ncmVzcyhpbXBvcnRhbmNlKTsKKyAgICB9CisKICAgICBwdWJsaWMgdm9pZCBzZXRBY3R1YWxIZWlnaHQoaW50IGFjdHVhbEhlaWdodCkgewogICAgICAgICBtQWN0dWFsSGVpZ2h0ID0gYWN0dWFsSGVpZ2h0OwogICAgICAgICBpbnZhbGlkYXRlKCk7CkBAIC0xMDMsNCArMjI1LDEyIEBACiAgICAgICAgIC8vIFByZXZlbnRzIHRoaXMgdmlldyBmcm9tIGNyZWF0aW5nIGEgbGF5ZXIgd2hlbiBhbHBoYSBpcyBhbmltYXRpbmcuCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRFeHBvc2VkKGJvb2xlYW4gZXhwb3NlZCkgeworICAgICAgICBtRXhwb3NlZCA9IGV4cG9zZWQ7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gYXJlR3V0c0V4cG9zZWQoKSB7CisgICAgICAgIHJldHVybiBtRXhwb3NlZDsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3Bob25lL05hdmlnYXRpb25CYXJBcHBzLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3Bob25lL05hdmlnYXRpb25CYXJBcHBzLmphdmEKaW5kZXggNThjOTcyMi4uZDBjMTRmMSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9OYXZpZ2F0aW9uQmFyQXBwcy5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcGhvbmUvTmF2aWdhdGlvbkJhckFwcHMuamF2YQpAQCAtNzQ2LDcgKzc0Niw3IEBACiAgICAgICAgIC8vIExhdW5jaCBvciBicmluZyB0aGUgYWN0aXZpdHkgdG8gZnJvbnQuCiAgICAgICAgIGZpbmFsIElBY3Rpdml0eU1hbmFnZXIgaUFtID0gQWN0aXZpdHlNYW5hZ2VyTmF0aXZlLmdldERlZmF1bHQoKTsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGlBbS5zdGFydEFjdGl2aXR5RnJvbVJlY2VudHModGFza1BlcnNpc3RlbnRJZCwgSU5WQUxJRF9TVEFDS19JRCwgbnVsbCAvKiBvcHRpb25zICovKTsKKyAgICAgICAgICAgIGlBbS5zdGFydEFjdGl2aXR5RnJvbVJlY2VudHModGFza1BlcnNpc3RlbnRJZCwgbnVsbCAvKiBvcHRpb25zICovKTsKICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIFNsb2cuZShUQUcsICJFeGNlcHRpb24gd2hlbiBhY3RpdmF0aW5nIGEgcmVjZW50IHRhc2siLCBlKTsKICAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKQEAgLTExMDQsNiArMTEwNCwxMCBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0pOwogICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uQWN0aXZpdHlQaW5uZWQoKSB7CisgICAgICAgIH0KICAgICB9CiAKICAgICBAT3ZlcnJpZGUKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcGhvbmUvTmF2aWdhdGlvbkJhckdlc3R1cmVIZWxwZXIuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcGhvbmUvTmF2aWdhdGlvbkJhckdlc3R1cmVIZWxwZXIuamF2YQppbmRleCA3OWJkNjI2Li5jYzg1ZDBmIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3Bob25lL05hdmlnYXRpb25CYXJHZXN0dXJlSGVscGVyLmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9OYXZpZ2F0aW9uQmFyR2VzdHVyZUhlbHBlci5qYXZhCkBAIC0yOSw2ICsyOSw4IEBACiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuUjsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5SZWNlbnRzQ29tcG9uZW50OwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnN0YWNrZGl2aWRlci5EaXZpZGVyOworaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnN0YWNrZGl2aWRlci5EaXZpZGVyU25hcEFsZ29yaXRobS5TbmFwVGFyZ2V0OworaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnN0YWNrZGl2aWRlci5EaXZpZGVyVmlldzsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS50dW5lci5UdW5lclNlcnZpY2U7CiAKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuKjsKQEAgLTE4OSw3ICsxOTEsNyBAQAogICAgICAgICAgICAgICAgIG1SZWNlbnRzQ29tcG9uZW50LmRvY2tUb3BUYXNrKG1EcmFnTW9kZSA9PSBEUkFHX01PREVfUkVDRU5UUywgY3JlYXRlTW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxCb3VuZHMpOwogICAgICAgICAgICAgICAgIGlmIChtRHJhZ01vZGUgPT0gRFJBR19NT0RFX0RJVklERVIpIHsKLSAgICAgICAgICAgICAgICAgICAgbURpdmlkZXIuZ2V0VmlldygpLnN0YXJ0RHJhZ2dpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgbURpdmlkZXIuZ2V0VmlldygpLnN0YXJ0RHJhZ2dpbmcoZmFsc2UgLyogYW5pbWF0ZSAqLyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG1Eb2NrV2luZG93VG91Y2hTbG9wRXhjZWVkZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIE1ldHJpY3NMb2dnZXIuYWN0aW9uKG1Db250ZXh0LApAQCAtMTk4LDggKzIwMCwxMCBAQAogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKG1EcmFnTW9kZSA9PSBEUkFHX01PREVfRElWSURFUikgewotICAgICAgICAgICAgICAgIG1EaXZpZGVyLmdldFZpZXcoKS5yZXNpemVTdGFjaygKLSAgICAgICAgICAgICAgICAgICAgICAgICFtSXNWZXJ0aWNhbCA/IChpbnQpIGV2ZW50LmdldFJhd1koKSA6IChpbnQpIGV2ZW50LmdldFJhd1goKSk7CisgICAgICAgICAgICAgICAgaW50IHBvc2l0aW9uID0gIW1Jc1ZlcnRpY2FsID8gKGludCkgZXZlbnQuZ2V0UmF3WSgpIDogKGludCkgZXZlbnQuZ2V0UmF3WCgpOworICAgICAgICAgICAgICAgIFNuYXBUYXJnZXQgc25hcFRhcmdldCA9IG1EaXZpZGVyLmdldFZpZXcoKS5nZXRTbmFwQWxnb3JpdGhtKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5jYWxjdWxhdGVTbmFwVGFyZ2V0KHBvc2l0aW9uLCAwZiAvKiB2ZWxvY2l0eSAqLyk7CisgICAgICAgICAgICAgICAgbURpdmlkZXIuZ2V0VmlldygpLnJlc2l6ZVN0YWNrKHBvc2l0aW9uLCBzbmFwVGFyZ2V0LnBvc2l0aW9uLCBzbmFwVGFyZ2V0KTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAobURyYWdNb2RlID09IERSQUdfTU9ERV9SRUNFTlRTKSB7CiAgICAgICAgICAgICAgICAgbVJlY2VudHNDb21wb25lbnQub25EcmFnZ2luZ0luUmVjZW50cyhldmVudC5nZXRSYXdZKCkpOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9OYXZpZ2F0aW9uQmFyVmlldy5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9OYXZpZ2F0aW9uQmFyVmlldy5qYXZhCmluZGV4IGNkZGIxZmMuLmEzZDBjZTYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcGhvbmUvTmF2aWdhdGlvbkJhclZpZXcuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3Bob25lL05hdmlnYXRpb25CYXJWaWV3LmphdmEKQEAgLTM2LDExICszNiwxMyBAQAogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiBpbXBvcnQgYW5kcm9pZC52aWV3LkRpc3BsYXk7CiBpbXBvcnQgYW5kcm9pZC52aWV3LkdyYXZpdHk7CitpbXBvcnQgYW5kcm9pZC52aWV3LklEb2NrZWRTdGFja0xpc3RlbmVyLlN0dWI7CiBpbXBvcnQgYW5kcm9pZC52aWV3Lk1vdGlvbkV2ZW50OwogaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNlOwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7CiBpbXBvcnQgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXJHbG9iYWw7CiBpbXBvcnQgYW5kcm9pZC52aWV3LmlucHV0bWV0aG9kLklucHV0TWV0aG9kTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5GcmFtZUxheW91dDsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5JbWFnZVZpZXc7CkBAIC0yMjcsOCArMjI5LDggQEAKICAgICAgICAgcmV0dXJuIG1DdXJyZW50VmlldzsKICAgICB9CiAKLSAgICBwdWJsaWMgVmlldyBnZXRSZWNlbnRzQnV0dG9uKCkgewotICAgICAgICByZXR1cm4gbUN1cnJlbnRWaWV3LmZpbmRWaWV3QnlJZChSLmlkLnJlY2VudF9hcHBzKTsKKyAgICBwdWJsaWMgS2V5QnV0dG9uVmlldyBnZXRSZWNlbnRzQnV0dG9uKCkgeworICAgICAgICByZXR1cm4gKEtleUJ1dHRvblZpZXcpIG1DdXJyZW50Vmlldy5maW5kVmlld0J5SWQoUi5pZC5yZWNlbnRfYXBwcyk7CiAgICAgfQogCiAgICAgcHVibGljIFZpZXcgZ2V0TWVudUJ1dHRvbigpIHsKQEAgLTQ1NSw2ICs0NTcsMzIgQEAKICAgICAgICAgZ2V0SW1lU3dpdGNoQnV0dG9uKCkuc2V0T25DbGlja0xpc3RlbmVyKG1JbWVTd2l0Y2hlckNsaWNrTGlzdGVuZXIpOwogCiAgICAgICAgIHVwZGF0ZVJUTE9yZGVyKCk7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFdpbmRvd01hbmFnZXJHbG9iYWwuZ2V0V2luZG93TWFuYWdlclNlcnZpY2UoKS5yZWdpc3RlckRvY2tlZFN0YWNrTGlzdGVuZXIobmV3IFN0dWIoKSB7CisgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25EaXZpZGVyVmlzaWJpbGl0eUNoYW5nZWQoYm9vbGVhbiB2aXNpYmxlKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkRvY2tlZFN0YWNrRXhpc3RzQ2hhbmdlZChmaW5hbCBib29sZWFuIGV4aXN0cykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CisgICAgICAgICAgICAgICAgICAgIG1IYW5kbGVyLnBvc3QobmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlUmVjZW50c0ljb24oZXhpc3RzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBMb2cuZShUQUcsICJGYWlsZWQgcmVnaXN0ZXJpbmcgZG9ja2VkIHN0YWNrIGV4aXN0cyBsaXN0ZW5lciIsIGUpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVJlY2VudHNJY29uKGJvb2xlYW4gZG9ja2VkU3RhY2tFeGlzdHMpIHsKKyAgICAgICAgZ2V0UmVjZW50c0J1dHRvbigpLnNldEltYWdlUmVzb3VyY2UoZG9ja2VkU3RhY2tFeGlzdHMKKyAgICAgICAgICAgICAgICA/IFIuZHJhd2FibGUuaWNfc3lzYmFyX2RvY2tlZAorICAgICAgICAgICAgICAgIDogUi5kcmF3YWJsZS5pY19zeXNiYXJfcmVjZW50KTsKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiBpc1ZlcnRpY2FsKCkgewpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9QaG9uZVN0YXR1c0Jhci5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9QaG9uZVN0YXR1c0Jhci5qYXZhCmluZGV4IDgwZmNiYTYwZS4uNzhkMDllMyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9QaG9uZVN0YXR1c0Jhci5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcGhvbmUvUGhvbmVTdGF0dXNCYXIuamF2YQpAQCAtMTI2OSwxOSArMTI2OSwyNiBAQAogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFpc0hlYWRzVXBlZCAmJiBub3RpZmljYXRpb24uZ2V0Tm90aWZpY2F0aW9uKCkuZnVsbFNjcmVlbkludGVudCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAvLyBTdG9wIHNjcmVlbnNhdmVyIGlmIHRoZSBub3RpZmljYXRpb24gaGFzIGEgZnVsbC1zY3JlZW4gaW50ZW50LgotICAgICAgICAgICAgLy8gKGxpa2UgYW4gaW5jb21pbmcgcGhvbmUgY2FsbCkKLSAgICAgICAgICAgIGF3YWtlbkRyZWFtcygpOworICAgICAgICAgICAgaWYgKG1Ob3RpZmljYXRpb25EYXRhLnNob3VsZFN1cHByZXNzU2NyZWVuT24obm90aWZpY2F0aW9uLmdldEtleSgpKSkgeworICAgICAgICAgICAgICAgIGlmIChERUJVRykgeworICAgICAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJObyBGdWxsc2NyZWVuIGludGVudDogc3VwcHJlc3NlZCBieSBETkQ6ICIgKyBub3RpZmljYXRpb24uZ2V0S2V5KCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gU3RvcCBzY3JlZW5zYXZlciBpZiB0aGUgbm90aWZpY2F0aW9uIGhhcyBhIGZ1bGwtc2NyZWVuIGludGVudC4KKyAgICAgICAgICAgICAgICAvLyAobGlrZSBhbiBpbmNvbWluZyBwaG9uZSBjYWxsKQorICAgICAgICAgICAgICAgIGF3YWtlbkRyZWFtcygpOwogCi0gICAgICAgICAgICAvLyBub3QgaW1tZXJzaXZlICYgYSBmdWxsLXNjcmVlbiBhbGVydCBzaG91bGQgYmUgc2hvd24KLSAgICAgICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLCAiTm90aWZpY2F0aW9uIGhhcyBmdWxsU2NyZWVuSW50ZW50OyBzZW5kaW5nIGZ1bGxTY3JlZW5JbnRlbnQiKTsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgRXZlbnRMb2cud3JpdGVFdmVudChFdmVudExvZ1RhZ3MuU1lTVUlfRlVMTFNDUkVFTl9OT1RJRklDQVRJT04sCi0gICAgICAgICAgICAgICAgICAgICAgICBub3RpZmljYXRpb24uZ2V0S2V5KCkpOwotICAgICAgICAgICAgICAgIG5vdGlmaWNhdGlvbi5nZXROb3RpZmljYXRpb24oKS5mdWxsU2NyZWVuSW50ZW50LnNlbmQoKTsKLSAgICAgICAgICAgICAgICBzaGFkZUVudHJ5Lm5vdGlmeUZ1bGxTY3JlZW5JbnRlbnRMYXVuY2hlZCgpOwotICAgICAgICAgICAgICAgIE1ldHJpY3NMb2dnZXIuY291bnQobUNvbnRleHQsICJub3RlX2Z1bGxzY3JlZW4iLCAxKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKFBlbmRpbmdJbnRlbnQuQ2FuY2VsZWRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIC8vIG5vdCBpbW1lcnNpdmUgJiBhIGZ1bGwtc2NyZWVuIGFsZXJ0IHNob3VsZCBiZSBzaG93bgorICAgICAgICAgICAgICAgIGlmIChERUJVRykKKyAgICAgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAiTm90aWZpY2F0aW9uIGhhcyBmdWxsU2NyZWVuSW50ZW50OyBzZW5kaW5nIGZ1bGxTY3JlZW5JbnRlbnQiKTsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBFdmVudExvZy53cml0ZUV2ZW50KEV2ZW50TG9nVGFncy5TWVNVSV9GVUxMU0NSRUVOX05PVElGSUNBVElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZmljYXRpb24uZ2V0S2V5KCkpOworICAgICAgICAgICAgICAgICAgICBub3RpZmljYXRpb24uZ2V0Tm90aWZpY2F0aW9uKCkuZnVsbFNjcmVlbkludGVudC5zZW5kKCk7CisgICAgICAgICAgICAgICAgICAgIHNoYWRlRW50cnkubm90aWZ5RnVsbFNjcmVlbkludGVudExhdW5jaGVkKCk7CisgICAgICAgICAgICAgICAgICAgIE1ldHJpY3NMb2dnZXIuY291bnQobUNvbnRleHQsICJub3RlX2Z1bGxzY3JlZW4iLCAxKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChQZW5kaW5nSW50ZW50LkNhbmNlbGVkRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgYWRkTm90aWZpY2F0aW9uVmlld3Moc2hhZGVFbnRyeSwgcmFua2luZyk7CkBAIC00MTIwLDMyICs0MTI3LDYgQEAKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIC8vIFJlY2VudHMKLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIHNob3dSZWNlbnRzKGJvb2xlYW4gdHJpZ2dlcmVkRnJvbUFsdFRhYikgewotICAgICAgICAvLyBTZXQgdGhlIHJlY2VudHMgdmlzaWJpbGl0eSBmbGFnCi0gICAgICAgIG1TeXN0ZW1VaVZpc2liaWxpdHkgfD0gVmlldy5SRUNFTlRfQVBQU19WSVNJQkxFOwotICAgICAgICBub3RpZnlVaVZpc2liaWxpdHlDaGFuZ2VkKG1TeXN0ZW1VaVZpc2liaWxpdHkpOwotICAgICAgICBzdXBlci5zaG93UmVjZW50cyh0cmlnZ2VyZWRGcm9tQWx0VGFiKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCBoaWRlUmVjZW50cyhib29sZWFuIHRyaWdnZXJlZEZyb21BbHRUYWIsIGJvb2xlYW4gdHJpZ2dlcmVkRnJvbUhvbWVLZXkpIHsKLSAgICAgICAgLy8gVW5zZXQgdGhlIHJlY2VudHMgdmlzaWJpbGl0eSBmbGFnCi0gICAgICAgIG1TeXN0ZW1VaVZpc2liaWxpdHkgJj0gflZpZXcuUkVDRU5UX0FQUFNfVklTSUJMRTsKLSAgICAgICAgbm90aWZ5VWlWaXNpYmlsaXR5Q2hhbmdlZChtU3lzdGVtVWlWaXNpYmlsaXR5KTsKLSAgICAgICAgc3VwZXIuaGlkZVJlY2VudHModHJpZ2dlcmVkRnJvbUFsdFRhYiwgdHJpZ2dlcmVkRnJvbUhvbWVLZXkpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIHRvZ2dsZVJlY2VudHMoKSB7Ci0gICAgICAgIC8vIFRvZ2dsZSB0aGUgcmVjZW50cyB2aXNpYmlsaXR5IGZsYWcKLSAgICAgICAgbVN5c3RlbVVpVmlzaWJpbGl0eSBePSBWaWV3LlJFQ0VOVF9BUFBTX1ZJU0lCTEU7Ci0gICAgICAgIG5vdGlmeVVpVmlzaWJpbGl0eUNoYW5nZWQobVN5c3RlbVVpVmlzaWJpbGl0eSk7Ci0gICAgICAgIHN1cGVyLnRvZ2dsZVJlY2VudHMoKTsKLSAgICB9Ci0KICAgICBwdWJsaWMgdm9pZCB1cGRhdGVSZWNlbnRzVmlzaWJpbGl0eShib29sZWFuIHZpc2libGUpIHsKICAgICAgICAgLy8gVXBkYXRlIHRoZSByZWNlbnRzIHZpc2liaWxpdHkgZmxhZwogICAgICAgICBpZiAodmlzaWJsZSkgewpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9RU1RpbGVIb3N0LmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3Bob25lL1FTVGlsZUhvc3QuamF2YQppbmRleCA3ZjI3YmE3Li41Yzg1NmU4IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3Bob25lL1FTVGlsZUhvc3QuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3Bob25lL1FTVGlsZUhvc3QuamF2YQpAQCAtMTgsMzAgKzE4LDI1IEBACiAKIGltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5hcHAuUGVuZGluZ0ludGVudDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5OYW1lTm90Rm91bmRFeGNlcHRpb247CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CaW5kZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyVGhyZWFkOwogaW1wb3J0IGFuZHJvaWQub3MuTG9vcGVyOwogaW1wb3J0IGFuZHJvaWQub3MuUHJvY2VzczsKLWltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzOwotaW1wb3J0IGFuZHJvaWQuc2VydmljZS5xdWlja3NldHRpbmdzLklRU1NlcnZpY2U7Ci1pbXBvcnQgYW5kcm9pZC5zZXJ2aWNlLnF1aWNrc2V0dGluZ3MuVGlsZTsKIGltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFV0aWxzOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuUjsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5xcy5RU1RpbGU7CitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucXMuZXh0ZXJuYWwuQ3VzdG9tVGlsZTsKK2ltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5xcy5leHRlcm5hbC5UaWxlU2VydmljZXM7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucXMudGlsZXMuQWlycGxhbmVNb2RlVGlsZTsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5xcy50aWxlcy5CYXR0ZXJ5VGlsZTsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5xcy50aWxlcy5CbHVldG9vdGhUaWxlOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnFzLnRpbGVzLkNhc3RUaWxlOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnFzLnRpbGVzLkNlbGx1bGFyVGlsZTsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5xcy50aWxlcy5Db2xvckludmVyc2lvblRpbGU7Ci1pbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucXMudGlsZXMuQ3VzdG9tVGlsZTsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5xcy50aWxlcy5EbmRUaWxlOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnFzLnRpbGVzLkZsYXNobGlnaHRUaWxlOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnFzLnRpbGVzLkhvdHNwb3RUaWxlOwpAQCAtNjQsNiArNTksNyBAQAogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnN0YXR1c2Jhci5wb2xpY3kuVXNlckluZm9Db250cm9sbGVyOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnN0YXR1c2Jhci5wb2xpY3kuVXNlclN3aXRjaGVyQ29udHJvbGxlcjsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5zdGF0dXNiYXIucG9saWN5Llplbk1vZGVDb250cm9sbGVyOworaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnR1bmVyLkNvbG9yTWF0cml4VGlsZTsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS50dW5lci5UdW5lclNlcnZpY2U7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkudHVuZXIuVHVuZXJTZXJ2aWNlLlR1bmFibGU7CiAKQEAgLTc1LDcgKzcxLDcgQEAKIGltcG9ydCBqYXZhLnV0aWwuTWFwOwogCiAvKiogUGxhdGZvcm0gaW1wbGVtZW50YXRpb24gb2YgdGhlIHF1aWNrIHNldHRpbmdzIHRpbGUgaG9zdCAqKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBRU1RpbGVIb3N0IGV4dGVuZHMgSVFTU2VydmljZS5TdHViIGltcGxlbWVudHMgUVNUaWxlLkhvc3QsIFR1bmFibGUgeworcHVibGljIGZpbmFsIGNsYXNzIFFTVGlsZUhvc3QgaW1wbGVtZW50cyBRU1RpbGUuSG9zdCwgVHVuYWJsZSB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJRU1RpbGVIb3N0IjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gTG9nLmlzTG9nZ2FibGUoVEFHLCBMb2cuREVCVUcpOwogCkBAIC05OSw2ICs5NSw3IEBACiAgICAgcHJpdmF0ZSBmaW5hbCBLZXlndWFyZE1vbml0b3IgbUtleWd1YXJkOwogICAgIHByaXZhdGUgZmluYWwgU2VjdXJpdHlDb250cm9sbGVyIG1TZWN1cml0eTsKICAgICBwcml2YXRlIGZpbmFsIEJhdHRlcnlDb250cm9sbGVyIG1CYXR0ZXJ5OworICAgIHByaXZhdGUgZmluYWwgVGlsZVNlcnZpY2VzIG1TZXJ2aWNlczsKIAogICAgIHByaXZhdGUgZmluYWwgTGlzdDxDYWxsYmFjaz4gbUNhbGxiYWNrcyA9IG5ldyBBcnJheUxpc3Q8PigpOwogCkBAIC0xMzAsNiArMTI3LDggQEAKICAgICAgICAgaHQuc3RhcnQoKTsKICAgICAgICAgbUxvb3BlciA9IGh0LmdldExvb3BlcigpOwogCisgICAgICAgIG1TZXJ2aWNlcyA9IG5ldyBUaWxlU2VydmljZXModGhpcywgbUxvb3Blcik7CisKICAgICAgICAgVHVuZXJTZXJ2aWNlLmdldChtQ29udGV4dCkuYWRkVHVuYWJsZSh0aGlzLCBUSUxFU19TRVRUSU5HKTsKICAgICB9CiAKQEAgLTI1NSw2ICsyNTQsMTAgQEAKICAgICAgICAgcmV0dXJuIG1TZWN1cml0eTsKICAgICB9CiAKKyAgICBwdWJsaWMgVGlsZVNlcnZpY2VzIGdldFRpbGVTZXJ2aWNlcygpIHsKKyAgICAgICAgcmV0dXJuIG1TZXJ2aWNlczsKKyAgICB9CisKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBvblR1bmluZ0NoYW5nZWQoU3RyaW5nIGtleSwgU3RyaW5nIG5ld1ZhbHVlKSB7CiAgICAgICAgIGlmICghVElMRVNfU0VUVElORy5lcXVhbHMoa2V5KSkgewpAQCAtMzA1LDUwICszMDgsNiBAQAogICAgICAgICAgICAgICAgIFRleHRVdGlscy5qb2luKCIsIiwgc3BlY3MpLCBBY3Rpdml0eU1hbmFnZXIuZ2V0Q3VycmVudFVzZXIoKSk7CiAgICAgfQogCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdXBkYXRlUXNUaWxlKFRpbGUgdGlsZSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHZlcmlmeUNhbGxlcih0aWxlLmdldENvbXBvbmVudE5hbWUoKS5nZXRQYWNrYWdlTmFtZSgpKTsKLSAgICAgICAgQ3VzdG9tVGlsZSBjdXN0b21UaWxlID0gZ2V0VGlsZUZvckNvbXBvbmVudCh0aWxlLmdldENvbXBvbmVudE5hbWUoKSk7Ci0gICAgICAgIGlmIChjdXN0b21UaWxlICE9IG51bGwpIHsKLSAgICAgICAgICAgIGN1c3RvbVRpbGUudXBkYXRlU3RhdGUodGlsZSk7Ci0gICAgICAgICAgICBjdXN0b21UaWxlLnJlZnJlc2hTdGF0ZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25TaG93RGlhbG9nKFRpbGUgdGlsZSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHZlcmlmeUNhbGxlcih0aWxlLmdldENvbXBvbmVudE5hbWUoKS5nZXRQYWNrYWdlTmFtZSgpKTsKLSAgICAgICAgQ3VzdG9tVGlsZSBjdXN0b21UaWxlID0gZ2V0VGlsZUZvckNvbXBvbmVudCh0aWxlLmdldENvbXBvbmVudE5hbWUoKSk7Ci0gICAgICAgIGlmIChjdXN0b21UaWxlICE9IG51bGwpIHsKLSAgICAgICAgICAgIGN1c3RvbVRpbGUub25EaWFsb2dTaG93bigpOwotICAgICAgICAgICAgY29sbGFwc2VQYW5lbHMoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCB2ZXJpZnlDYWxsZXIoU3RyaW5nIHBhY2thZ2VOYW1lKSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBpbnQgdWlkID0gbUNvbnRleHQuZ2V0UGFja2FnZU1hbmFnZXIoKS5nZXRQYWNrYWdlVWlkKHBhY2thZ2VOYW1lLAotICAgICAgICAgICAgICAgICAgICBCaW5kZXIuZ2V0Q2FsbGluZ1VzZXJIYW5kbGUoKS5nZXRJZGVudGlmaWVyKCkpOwotICAgICAgICAgICAgaWYgKEJpbmRlci5nZXRDYWxsaW5nVWlkKCkgIT0gdWlkKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXhjZXB0aW9uKCJDb21wb25lbnQgb3V0c2lkZSBjYWxsZXIncyB1aWQiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBjYXRjaCAoTmFtZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBTZWN1cml0eUV4Y2VwdGlvbihlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgQ3VzdG9tVGlsZSBnZXRUaWxlRm9yQ29tcG9uZW50KENvbXBvbmVudE5hbWUgY29tcG9uZW50KSB7Ci0gICAgICAgIC8vIFRPRE86IEJ1aWxkIG1hcCBmb3IgZWFzaWVyIGxvb2t1cC4KLSAgICAgICAgZm9yIChRU1RpbGU8Pz4gcXNUaWxlIDogbVRpbGVzLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBpZiAocXNUaWxlIGluc3RhbmNlb2YgQ3VzdG9tVGlsZSkgewotICAgICAgICAgICAgICAgIGlmICgoKEN1c3RvbVRpbGUpIHFzVGlsZSkuZ2V0Q29tcG9uZW50KCkuZXF1YWxzKGNvbXBvbmVudCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChDdXN0b21UaWxlKSBxc1RpbGU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQogICAgIHB1YmxpYyBRU1RpbGU8Pz4gY3JlYXRlVGlsZShTdHJpbmcgdGlsZVNwZWMpIHsKICAgICAgICAgaWYgKHRpbGVTcGVjLmVxdWFscygid2lmaSIpKSByZXR1cm4gV2lmaVRpbGUuaXNTdXBwb3J0ZWQodGhpcykKICAgICAgICAgICAgICAgICA/IG5ldyBXaWZpVGlsZSh0aGlzKSA6IG51bGw7CkBAIC0zNjgsMTAgKzMyNywxNSBAQAogICAgICAgICBlbHNlIGlmICh0aWxlU3BlYy5lcXVhbHMoImhvdHNwb3QiKSkgcmV0dXJuIG5ldyBIb3RzcG90VGlsZSh0aGlzKTsKICAgICAgICAgZWxzZSBpZiAodGlsZVNwZWMuZXF1YWxzKCJ1c2VyIikpIHJldHVybiBuZXcgVXNlclRpbGUodGhpcyk7CiAgICAgICAgIGVsc2UgaWYgKHRpbGVTcGVjLmVxdWFscygiYmF0dGVyeSIpKSByZXR1cm4gbmV3IEJhdHRlcnlUaWxlKHRoaXMpOworICAgICAgICBlbHNlIGlmICh0aWxlU3BlYy5lcXVhbHMoQ29sb3JNYXRyaXhUaWxlLkNPTE9SX01BVFJJWF9TUEVDKSkKKyAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3JNYXRyaXhUaWxlKHRoaXMpOwogICAgICAgICAvLyBJbnRlbnQgdGlsZXMuCiAgICAgICAgIGVsc2UgaWYgKHRpbGVTcGVjLnN0YXJ0c1dpdGgoSW50ZW50VGlsZS5QUkVGSVgpKSByZXR1cm4gSW50ZW50VGlsZS5jcmVhdGUodGhpcyx0aWxlU3BlYyk7CiAgICAgICAgIGVsc2UgaWYgKHRpbGVTcGVjLnN0YXJ0c1dpdGgoQ3VzdG9tVGlsZS5QUkVGSVgpKSByZXR1cm4gQ3VzdG9tVGlsZS5jcmVhdGUodGhpcyx0aWxlU3BlYyk7Ci0gICAgICAgIGVsc2UgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQmFkIHRpbGUgc3BlYzogIiArIHRpbGVTcGVjKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBMb2cudyhUQUcsICJCYWQgdGlsZSBzcGVjOiAiICsgdGlsZVNwZWMpOworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgc3RhdGljIExpc3Q8U3RyaW5nPiBsb2FkVGlsZVNwZWNzKENvbnRleHQgY29udGV4dCwgU3RyaW5nIHRpbGVMaXN0KSB7CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3Bob25lL1F1aWNrU3RhdHVzQmFySGVhZGVyLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3Bob25lL1F1aWNrU3RhdHVzQmFySGVhZGVyLmphdmEKaW5kZXggMTM3MmNjYS4uYTkxZjZhMiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9RdWlja1N0YXR1c0JhckhlYWRlci5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcGhvbmUvUXVpY2tTdGF0dXNCYXJIZWFkZXIuamF2YQpAQCAtMjQsNyArMjQsNiBAQAogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuQW5pbWF0YWJsZTsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLlJpcHBsZURyYXdhYmxlOwogaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwOwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkltYWdlVmlldzsKQEAgLTEzNSw3ICsxMzQsNiBAQAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIG9uTmV4dEFsYXJtQ2hhbmdlZChBbGFybU1hbmFnZXIuQWxhcm1DbG9ja0luZm8gbmV4dEFsYXJtKSB7CiAgICAgICAgIG1OZXh0QWxhcm0gPSBuZXh0QWxhcm07Ci0gICAgICAgIExvZy5kKFRBRywgIkdvdCBhbGFybSB1cGRhdGUgIiArIChuZXh0QWxhcm0gIT0gbnVsbCkpOwogICAgICAgICBpZiAobmV4dEFsYXJtICE9IG51bGwpIHsKICAgICAgICAgICAgIG1BbGFybVN0YXR1cy5zZXRUZXh0KEtleWd1YXJkU3RhdHVzVmlldy5mb3JtYXROZXh0QWxhcm0oZ2V0Q29udGV4dCgpLCBuZXh0QWxhcm0pKTsKICAgICAgICAgfQpAQCAtMTc5LDEwICsxNzcsOCBAQAogCiAgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZUxpc3RlbmVycygpIHsKICAgICAgICAgaWYgKG1MaXN0ZW5pbmcpIHsKLSAgICAgICAgICAgIExvZy5kKFRBRywgIkxpc3RlbmluZyBmb3IgQWxhcm1zIik7CiAgICAgICAgICAgICBtTmV4dEFsYXJtQ29udHJvbGxlci5hZGRTdGF0ZUNoYW5nZWRDYWxsYmFjayh0aGlzKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIExvZy5kKFRBRywgIk5vdCBsaXN0ZW5pbmcgZm9yIEFsYXJtcyIpOwogICAgICAgICAgICAgbU5leHRBbGFybUNvbnRyb2xsZXIucmVtb3ZlU3RhdGVDaGFuZ2VkQ2FsbGJhY2sodGhpcyk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3BvbGljeS9IZWFkc1VwTWFuYWdlci5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9wb2xpY3kvSGVhZHNVcE1hbmFnZXIuamF2YQppbmRleCA1Y2ZkMTc0Li5iMzhjM2ZlIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3BvbGljeS9IZWFkc1VwTWFuYWdlci5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcG9saWN5L0hlYWRzVXBNYW5hZ2VyLmphdmEKQEAgLTM3OCwyMyArMzc4LDIyIEBACiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1IYXNQaW5uZWROb3RpZmljYXRpb24pIHsKLSAgICAgICAgICAgIGludCBtaW5YID0gSW50ZWdlci5NQVhfVkFMVUU7CisgICAgICAgICAgICBpbnQgbWluWCA9IDA7CiAgICAgICAgICAgICBpbnQgbWF4WCA9IDA7Ci0gICAgICAgICAgICBpbnQgbWluWSA9IEludGVnZXIuTUFYX1ZBTFVFOwogICAgICAgICAgICAgaW50IG1heFkgPSAwOwogICAgICAgICAgICAgZm9yIChIZWFkc1VwRW50cnkgZW50cnkgOiBtU29ydGVkRW50cmllcykgewogICAgICAgICAgICAgICAgIEV4cGFuZGFibGVOb3RpZmljYXRpb25Sb3cgcm93ID0gZW50cnkuZW50cnkucm93OwogICAgICAgICAgICAgICAgIGlmIChyb3cuaXNQaW5uZWQoKSkgewogICAgICAgICAgICAgICAgICAgICByb3cuZ2V0TG9jYXRpb25PblNjcmVlbihtVG1wVHdvQXJyYXkpOwotICAgICAgICAgICAgICAgICAgICBtaW5YID0gTWF0aC5taW4obWluWCwgbVRtcFR3b0FycmF5WzBdKTsKLSAgICAgICAgICAgICAgICAgICAgbWluWSA9IE1hdGgubWluKG1pblksIDApOwotICAgICAgICAgICAgICAgICAgICBtYXhYID0gTWF0aC5tYXgobWF4WCwgbVRtcFR3b0FycmF5WzBdICsgcm93LmdldFdpZHRoKCkpOwotICAgICAgICAgICAgICAgICAgICBtYXhZID0gTWF0aC5tYXgobWF4WSwgcm93LmdldEhlYWRzVXBIZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgICAgIG1pblggPSBtVG1wVHdvQXJyYXlbMF07CisgICAgICAgICAgICAgICAgICAgIG1heFggPSBtVG1wVHdvQXJyYXlbMF0gKyByb3cuZ2V0V2lkdGgoKTsKKyAgICAgICAgICAgICAgICAgICAgbWF4WSA9IHJvdy5nZXRIZWFkc1VwSGVpZ2h0KCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaW5mby5zZXRUb3VjaGFibGVJbnNldHMoVmlld1RyZWVPYnNlcnZlci5JbnRlcm5hbEluc2V0c0luZm8uVE9VQ0hBQkxFX0lOU0VUU19SRUdJT04pOwotICAgICAgICAgICAgaW5mby50b3VjaGFibGVSZWdpb24uc2V0KG1pblgsIG1pblksIG1heFgsIG1heFkgKyBtTm90aWZpY2F0aW9uc1RvcFBhZGRpbmcpOworICAgICAgICAgICAgaW5mby50b3VjaGFibGVSZWdpb24uc2V0KG1pblgsIDAsIG1heFgsIG1heFkgKyBtTm90aWZpY2F0aW9uc1RvcFBhZGRpbmcpOwogICAgICAgICB9IGVsc2UgaWYgKG1IZWFkc1VwR29pbmdBd2F5IHx8IG1XYWl0aW5nT25Db2xsYXBzZVdoZW5Hb2luZ0F3YXkpIHsKICAgICAgICAgICAgIGluZm8uc2V0VG91Y2hhYmxlSW5zZXRzKFZpZXdUcmVlT2JzZXJ2ZXIuSW50ZXJuYWxJbnNldHNJbmZvLlRPVUNIQUJMRV9JTlNFVFNfUkVHSU9OKTsKICAgICAgICAgICAgIGluZm8udG91Y2hhYmxlUmVnaW9uLnNldCgwLCAwLCBtU3RhdHVzQmFyV2luZG93Vmlldy5nZXRXaWR0aCgpLCBtU3RhdHVzQmFySGVpZ2h0KTsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvc3RhY2svTm90aWZpY2F0aW9uQ2hpbGRyZW5Db250YWluZXIuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvc3RhY2svTm90aWZpY2F0aW9uQ2hpbGRyZW5Db250YWluZXIuamF2YQppbmRleCBiZWFhM2FkLi5iYWNjZDJjIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3N0YWNrL05vdGlmaWNhdGlvbkNoaWxkcmVuQ29udGFpbmVyLmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9zdGFjay9Ob3RpZmljYXRpb25DaGlsZHJlbkNvbnRhaW5lci5qYXZhCkBAIC01Niw2ICs1Niw3IEBACiAgICAgcHJpdmF0ZSBFeHBhbmRhYmxlTm90aWZpY2F0aW9uUm93IG1Ob3RpZmljYXRpb25QYXJlbnQ7CiAgICAgcHJpdmF0ZSBIeWJyaWROb3RpZmljYXRpb25WaWV3IG1Hcm91cE92ZXJmbG93Q29udGFpbmVyOwogICAgIHByaXZhdGUgVmlld1N0YXRlIG1Hcm91cE92ZXJGbG93U3RhdGU7CisgICAgcHJpdmF0ZSBpbnQgbVJlYWxIZWlnaHQ7CiAKICAgICBwdWJsaWMgTm90aWZpY2F0aW9uQ2hpbGRyZW5Db250YWluZXIoQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIHRoaXMoY29udGV4dCwgbnVsbCk7CkBAIC0xMTEsOCArMTEyLDggQEAKICAgICAgICAgaW50IGhlaWdodE1vZGUgPSBNZWFzdXJlU3BlYy5nZXRNb2RlKGhlaWdodE1lYXN1cmVTcGVjKTsKICAgICAgICAgYm9vbGVhbiBoYXNGaXhlZEhlaWdodCA9IGhlaWdodE1vZGUgPT0gTWVhc3VyZVNwZWMuRVhBQ1RMWTsKICAgICAgICAgYm9vbGVhbiBpc0hlaWdodExpbWl0ZWQgPSBoZWlnaHRNb2RlID09IE1lYXN1cmVTcGVjLkFUX01PU1Q7CisgICAgICAgIGludCBzaXplID0gTWVhc3VyZVNwZWMuZ2V0U2l6ZShoZWlnaHRNZWFzdXJlU3BlYyk7CiAgICAgICAgIGlmIChoYXNGaXhlZEhlaWdodCB8fCBpc0hlaWdodExpbWl0ZWQpIHsKLSAgICAgICAgICAgIGludCBzaXplID0gTWVhc3VyZVNwZWMuZ2V0U2l6ZShoZWlnaHRNZWFzdXJlU3BlYyk7CiAgICAgICAgICAgICBvd25NYXhIZWlnaHQgPSBNYXRoLm1pbihvd25NYXhIZWlnaHQsIHNpemUpOwogICAgICAgICB9CiAgICAgICAgIGludCBuZXdIZWlnaHRTcGVjID0gTWVhc3VyZVNwZWMubWFrZU1lYXN1cmVTcGVjKG93bk1heEhlaWdodCwgTWVhc3VyZVNwZWMuQVRfTU9TVCk7CkBAIC0xMzMsOSArMTM0LDE5IEBACiAgICAgICAgIGlmIChtR3JvdXBPdmVyZmxvd0NvbnRhaW5lciAhPSBudWxsKSB7CiAgICAgICAgICAgICBtR3JvdXBPdmVyZmxvd0NvbnRhaW5lci5tZWFzdXJlKHdpZHRoTWVhc3VyZVNwZWMsIG5ld0hlaWdodFNwZWMpOwogICAgICAgICB9CisgICAgICAgIG1SZWFsSGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICBpZiAoaGVpZ2h0TW9kZSAhPSBNZWFzdXJlU3BlYy5VTlNQRUNJRklFRCkgeworICAgICAgICAgICAgaGVpZ2h0ID0gTWF0aC5taW4oaGVpZ2h0LCBzaXplKTsKKyAgICAgICAgfQogICAgICAgICBzZXRNZWFzdXJlZERpbWVuc2lvbih3aWR0aCwgaGVpZ2h0KTsKICAgICB9CiAKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBwb2ludEluVmlldyhmbG9hdCBsb2NhbFgsIGZsb2F0IGxvY2FsWSwgZmxvYXQgc2xvcCkgeworICAgICAgICByZXR1cm4gbG9jYWxYID49IC1zbG9wICYmIGxvY2FsWSA+PSAtc2xvcCAmJiBsb2NhbFggPCAoKG1SaWdodCAtIG1MZWZ0KSArIHNsb3ApICYmCisgICAgICAgICAgICAgICAgbG9jYWxZIDwgKG1SZWFsSGVpZ2h0ICsgc2xvcCk7CisgICAgfQorCiAgICAgLyoqCiAgICAgICogQWRkIGEgY2hpbGQgbm90aWZpY2F0aW9uIHRvIHRoaXMgdmlldy4KICAgICAgKgpAQCAtNDUyLDYgKzQ2MywxMCBAQAogICAgIH0KIAogICAgIHB1YmxpYyBpbnQgZ2V0TWluSGVpZ2h0KCkgeworICAgICAgICByZXR1cm4gZ2V0SW50cmluc2ljSGVpZ2h0KE5VTUJFUl9PRl9DSElMRFJFTl9XSEVOX0NPTExBUFNFRCk7CisgICAgfQorCisgICAgcHVibGljIGludCBnZXRNaW5FeHBhbmRIZWlnaHQoKSB7CiAgICAgICAgIHJldHVybiBnZXRJbnRyaW5zaWNIZWlnaHQoZ2V0TWF4QWxsb3dlZFZpc2libGVDaGlsZHJlbih0cnVlIC8qIGZvcmNlQ29sbGFwc2VkICovKSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3N0YWNrL05vdGlmaWNhdGlvblN0YWNrU2Nyb2xsTGF5b3V0LmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3N0YWNrL05vdGlmaWNhdGlvblN0YWNrU2Nyb2xsTGF5b3V0LmphdmEKaW5kZXggMmNlMTlhMi4uMGVkMTUyNyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9zdGFjay9Ob3RpZmljYXRpb25TdGFja1Njcm9sbExheW91dC5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvc3RhY2svTm90aWZpY2F0aW9uU3RhY2tTY3JvbGxMYXlvdXQuamF2YQpAQCAtMTE4LDcgKzExOCw3IEBACiAgICAgLyoqCiAgICAgICogVGhlIGFsZ29yaXRobSB3aGljaCBjYWxjdWxhdGVzIHRoZSBwcm9wZXJ0aWVzIGZvciBvdXIgY2hpbGRyZW4KICAgICAgKi8KLSAgICBwcml2YXRlIFN0YWNrU2Nyb2xsQWxnb3JpdGhtIG1TdGFja1Njcm9sbEFsZ29yaXRobTsKKyAgICBwcml2YXRlIGZpbmFsIFN0YWNrU2Nyb2xsQWxnb3JpdGhtIG1TdGFja1Njcm9sbEFsZ29yaXRobTsKIAogICAgIC8qKgogICAgICAqIFRoZSBjdXJyZW50IFN0YXRlIHRoaXMgTGF5b3V0IGlzIGluCkBAIC0yNTgsNiArMjU4LDcgQEAKIAogICAgICAgICBtU3dpcGVIZWxwZXIgPSBuZXcgU3dpcGVIZWxwZXIoU3dpcGVIZWxwZXIuWCwgdGhpcywgZ2V0Q29udGV4dCgpKTsKICAgICAgICAgbVN3aXBlSGVscGVyLnNldExvbmdQcmVzc0xpc3RlbmVyKG1Mb25nUHJlc3NMaXN0ZW5lcik7CisgICAgICAgIG1TdGFja1Njcm9sbEFsZ29yaXRobSA9IG5ldyBTdGFja1Njcm9sbEFsZ29yaXRobShjb250ZXh0KTsKICAgICAgICAgaW5pdFZpZXcoY29udGV4dCk7CiAgICAgICAgIGlmIChERUJVRykgewogICAgICAgICAgICAgc2V0V2lsbE5vdERyYXcoZmFsc2UpOwpAQCAtMzAzLDggKzMwNCw3IEBACiAgICAgICAgICAgICAgICAgLmdldERpbWVuc2lvblBpeGVsU2l6ZShSLmRpbWVuLm5vdGlmaWNhdGlvbl9taW5faGVpZ2h0KTsKICAgICAgICAgbUJvdHRvbVN0YWNrUGVla1NpemUgPSBjb250ZXh0LmdldFJlc291cmNlcygpCiAgICAgICAgICAgICAgICAgLmdldERpbWVuc2lvblBpeGVsU2l6ZShSLmRpbWVuLmJvdHRvbV9zdGFja19wZWVrX2Ftb3VudCk7Ci0gICAgICAgIG1TdGFja1Njcm9sbEFsZ29yaXRobSA9IG5ldyBTdGFja1Njcm9sbEFsZ29yaXRobShjb250ZXh0KTsKLSAgICAgICAgbVN0YWNrU2Nyb2xsQWxnb3JpdGhtLnNldERpbW1lZChtQW1iaWVudFN0YXRlLmlzRGltbWVkKCkpOworICAgICAgICBtU3RhY2tTY3JvbGxBbGdvcml0aG0uaW5pdFZpZXcoY29udGV4dCk7CiAgICAgICAgIG1QYWRkaW5nQmV0d2VlbkVsZW1lbnRzRGltbWVkID0gY29udGV4dC5nZXRSZXNvdXJjZXMoKQogICAgICAgICAgICAgICAgIC5nZXREaW1lbnNpb25QaXhlbFNpemUoUi5kaW1lbi5ub3RpZmljYXRpb25fcGFkZGluZ19kaW1tZWQpOwogICAgICAgICBtUGFkZGluZ0JldHdlZW5FbGVtZW50c05vcm1hbCA9IGNvbnRleHQuZ2V0UmVzb3VyY2VzKCkKQEAgLTEzMzgsNyArMTMzOCw3IEBACiAgICAgLyoqCiAgICAgICogQHJldHVybiB0aGUgZmlyc3QgY2hpbGQgd2hpY2ggaGFzIHZpc2liaWxpdHkgdW5lcXVhbCB0byBHT05FCiAgICAgICovCi0gICAgcHJpdmF0ZSBFeHBhbmRhYmxlVmlldyBnZXRGaXJzdENoaWxkTm90R29uZSgpIHsKKyAgICBwdWJsaWMgRXhwYW5kYWJsZVZpZXcgZ2V0Rmlyc3RDaGlsZE5vdEdvbmUoKSB7CiAgICAgICAgIGludCBjaGlsZENvdW50ID0gZ2V0Q2hpbGRDb3VudCgpOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkQ291bnQ7IGkrKykgewogICAgICAgICAgICAgVmlldyBjaGlsZCA9IGdldENoaWxkQXQoaSk7CkBAIC0yODM2LDcgKzI4MzYsNiBAQAogICAgIHB1YmxpYyB2b2lkIHNldEhlYWRzVXBNYW5hZ2VyKEhlYWRzVXBNYW5hZ2VyIGhlYWRzVXBNYW5hZ2VyKSB7CiAgICAgICAgIG1IZWFkc1VwTWFuYWdlciA9IGhlYWRzVXBNYW5hZ2VyOwogICAgICAgICBtQW1iaWVudFN0YXRlLnNldEhlYWRzVXBNYW5hZ2VyKGhlYWRzVXBNYW5hZ2VyKTsKLSAgICAgICAgbVN0YWNrU2Nyb2xsQWxnb3JpdGhtLnNldEhlYWRzVXBNYW5hZ2VyKGhlYWRzVXBNYW5hZ2VyKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBnZW5lcmF0ZUhlYWRzVXBBbmltYXRpb24oRXhwYW5kYWJsZU5vdGlmaWNhdGlvblJvdyByb3csIGJvb2xlYW4gaXNIZWFkc1VwKSB7CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3N0YWNrL1N0YWNrU2Nyb2xsQWxnb3JpdGhtLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3N0YWNrL1N0YWNrU2Nyb2xsQWxnb3JpdGhtLmphdmEKaW5kZXggNTliNDQ2Yi4uNTQ5Njk2MyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9zdGFjay9TdGFja1Njcm9sbEFsZ29yaXRobS5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvc3RhY2svU3RhY2tTY3JvbGxBbGdvcml0aG0uamF2YQpAQCAtMjUsNyArMjUsNiBAQAogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLlI7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLkV4cGFuZGFibGVOb3RpZmljYXRpb25Sb3c7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLkV4cGFuZGFibGVWaWV3OwotaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnN0YXR1c2Jhci5wb2xpY3kuSGVhZHNVcE1hbmFnZXI7CiAKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwpAQCAtNjgsMTkgKzY3LDIyIEBACiAgICAgcHJpdmF0ZSBpbnQgbUJvdHRvbVN0YWNrU2xvd0Rvd25MZW5ndGg7CiAgICAgcHJpdmF0ZSBpbnQgbVRvcFN0YWNrU2xvd0Rvd25MZW5ndGg7CiAgICAgcHJpdmF0ZSBpbnQgbUNvbGxhcHNlU2Vjb25kQ2FyZFBhZGRpbmc7Ci0gICAgcHJpdmF0ZSBib29sZWFuIG1Jc1NtYWxsU2NyZWVuOwotICAgIHByaXZhdGUgaW50IG1NYXhOb3RpZmljYXRpb25IZWlnaHQ7CiAgICAgcHJpdmF0ZSBib29sZWFuIG1TY2FsZURpbW1lZDsKLSAgICBwcml2YXRlIEhlYWRzVXBNYW5hZ2VyIG1IZWFkc1VwTWFuYWdlcjsKKyAgICBwcml2YXRlIEV4cGFuZGFibGVWaWV3IG1GaXJzdENoaWxkOwogICAgIHByaXZhdGUgaW50IG1GaXJzdENoaWxkTWluSGVpZ2h0OworICAgIHByaXZhdGUgYm9vbGVhbiBtRGltbWVkOwogCiAgICAgcHVibGljIFN0YWNrU2Nyb2xsQWxnb3JpdGhtKENvbnRleHQgY29udGV4dCkgewotICAgICAgICBpbml0Q29uc3RhbnRzKGNvbnRleHQpOwotICAgICAgICB1cGRhdGVQYWRkaW5nKGZhbHNlKTsKKyAgICAgICAgaW5pdFZpZXcoY29udGV4dCk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVBhZGRpbmcoYm9vbGVhbiBkaW1tZWQpIHsKLSAgICAgICAgbVBhZGRpbmdCZXR3ZWVuRWxlbWVudHMgPSBkaW1tZWQgJiYgbVNjYWxlRGltbWVkCisgICAgcHVibGljIHZvaWQgaW5pdFZpZXcoQ29udGV4dCBjb250ZXh0KSB7CisgICAgICAgIGluaXRDb25zdGFudHMoY29udGV4dCk7CisgICAgICAgIHVwZGF0ZVBhZGRpbmcoKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgdXBkYXRlUGFkZGluZygpIHsKKyAgICAgICAgbVBhZGRpbmdCZXR3ZWVuRWxlbWVudHMgPSBtRGltbWVkICYmIG1TY2FsZURpbW1lZAogICAgICAgICAgICAgICAgID8gbVBhZGRpbmdCZXR3ZWVuRWxlbWVudHNEaW1tZWQKICAgICAgICAgICAgICAgICA6IG1QYWRkaW5nQmV0d2VlbkVsZW1lbnRzTm9ybWFsOwogICAgICAgICBtVG9wU3RhY2tUb3RhbFNpemUgPSBtVG9wU3RhY2tTbG93RG93bkxlbmd0aCArIG1QYWRkaW5nQmV0d2VlbkVsZW1lbnRzCkBAIC0xMTAsOCArMTEyLDYgQEAKICAgICAgICAgICAgICAgICAuZ2V0RGltZW5zaW9uUGl4ZWxTaXplKFIuZGltZW4ubm90aWZpY2F0aW9uc190b3BfcGFkZGluZyk7CiAgICAgICAgIG1Db2xsYXBzZWRTaXplID0gY29udGV4dC5nZXRSZXNvdXJjZXMoKQogICAgICAgICAgICAgICAgIC5nZXREaW1lbnNpb25QaXhlbFNpemUoUi5kaW1lbi5ub3RpZmljYXRpb25fbWluX2hlaWdodCk7Ci0gICAgICAgIG1NYXhOb3RpZmljYXRpb25IZWlnaHQgPSBjb250ZXh0LmdldFJlc291cmNlcygpCi0gICAgICAgICAgICAgICAgLmdldERpbWVuc2lvblBpeGVsU2l6ZShSLmRpbWVuLm5vdGlmaWNhdGlvbl9tYXhfaGVpZ2h0KTsKICAgICAgICAgbVRvcFN0YWNrUGVla1NpemUgPSBjb250ZXh0LmdldFJlc291cmNlcygpCiAgICAgICAgICAgICAgICAgLmdldERpbWVuc2lvblBpeGVsU2l6ZShSLmRpbWVuLnRvcF9zdGFja19wZWVrX2Ftb3VudCk7CiAgICAgICAgIG1Cb3R0b21TdGFja1BlZWtTaXplID0gY29udGV4dC5nZXRSZXNvdXJjZXMoKQpAQCAtMTQ5LDYgKzE0OSw3IEBACiAgICAgICAgIGFsZ29yaXRobVN0YXRlLnNjcm9sbGVkUGl4ZWxzVG9wID0gMDsKICAgICAgICAgYWxnb3JpdGhtU3RhdGUuaXRlbXNJbkJvdHRvbVN0YWNrID0gMC4wZjsKICAgICAgICAgYWxnb3JpdGhtU3RhdGUucGFydGlhbEluQm90dG9tID0gMC4wZjsKKyAgICAgICAgbUZpcnN0Q2hpbGRNaW5IZWlnaHQgPSBtRmlyc3RDaGlsZCA9PSBudWxsID8gMCA6IG1GaXJzdENoaWxkLmdldE1pbkhlaWdodCgpOwogICAgICAgICBmbG9hdCBib3R0b21PdmVyU2Nyb2xsID0gYW1iaWVudFN0YXRlLmdldE92ZXJTY3JvbGxBbW91bnQoZmFsc2UgLyogb25Ub3AgKi8pOwogCiAgICAgICAgIGludCBzY3JvbGxZID0gYW1iaWVudFN0YXRlLmdldFNjcm9sbFkoKTsKQEAgLTU0NCw3ICs1NDUsNyBAQAogICAgICAgICAgICAgaWYgKHJvdy5pc1Bpbm5lZCgpKSB7CiAgICAgICAgICAgICAgICAgY2hpbGRTdGF0ZS55VHJhbnNsYXRpb24gPSBNYXRoLm1heChjaGlsZFN0YXRlLnlUcmFuc2xhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgIG1Ob3RpZmljYXRpb25zVG9wUGFkZGluZyk7Ci0gICAgICAgICAgICAgICAgY2hpbGRTdGF0ZS5oZWlnaHQgPSByb3cuZ2V0SGVhZHNVcEhlaWdodCgpOworICAgICAgICAgICAgICAgIGNoaWxkU3RhdGUuaGVpZ2h0ID0gTWF0aC5tYXgocm93LmdldEhlYWRzVXBIZWlnaHQoKSwgY2hpbGRTdGF0ZS5oZWlnaHQpOwogICAgICAgICAgICAgICAgIGlmICghaXNUb3BFbnRyeSkgewogICAgICAgICAgICAgICAgICAgICAvLyBFbnN1cmUgdGhhdCBhIGhlYWRzVXAgZG9lc24ndCB2ZXJ0aWNhbGx5IGV4dGVuZCBmdXJ0aGVyIHRoYW4gdGhlIGhlYWRzLXVwIGF0CiAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSB0b3AgbW9zdCB6LXBvc2l0aW9uCkBAIC05MzMsMTAgKzkzNCw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgbm90aWZ5Q2hpbGRyZW5DaGFuZ2VkKGZpbmFsIE5vdGlmaWNhdGlvblN0YWNrU2Nyb2xsTGF5b3V0IGhvc3RWaWV3KSB7Ci0gICAgICAgIGludCBmaXJzdEl0ZW1NaW5IZWlnaHQgPSBob3N0Vmlldy5nZXRGaXJzdEl0ZW1NaW5IZWlnaHQoKTsKLSAgICAgICAgaWYgKGZpcnN0SXRlbU1pbkhlaWdodCAhPSBtRmlyc3RDaGlsZE1pbkhlaWdodCkgewotICAgICAgICAgICAgbUZpcnN0Q2hpbGRNaW5IZWlnaHQgPSBmaXJzdEl0ZW1NaW5IZWlnaHQ7Ci0gICAgICAgIH0KKyAgICAgICAgbUZpcnN0Q2hpbGQgPSBob3N0Vmlldy5nZXRGaXJzdENoaWxkTm90R29uZSgpOwogICAgICAgICBpZiAobUlzRXhwYW5zaW9uQ2hhbmdpbmcpIHsKICAgICAgICAgICAgIGhvc3RWaWV3LnBvc3QobmV3IFJ1bm5hYmxlKCkgewogICAgICAgICAgICAgICAgIEBPdmVycmlkZQpAQCAtOTQ4LDcgKzk0Niw4IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0RGltbWVkKGJvb2xlYW4gZGltbWVkKSB7Ci0gICAgICAgIHVwZGF0ZVBhZGRpbmcoZGltbWVkKTsKKyAgICAgICAgbURpbW1lZCA9IGRpbW1lZDsKKyAgICAgICAgdXBkYXRlUGFkZGluZygpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIG9uUmVzZXQoRXhwYW5kYWJsZVZpZXcgdmlldykgewpAQCAtOTU3LDEwICs5NTYsNiBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgc2V0SGVhZHNVcE1hbmFnZXIoSGVhZHNVcE1hbmFnZXIgaGVhZHNVcE1hbmFnZXIpIHsKLSAgICAgICAgbUhlYWRzVXBNYW5hZ2VyID0gaGVhZHNVcE1hbmFnZXI7Ci0gICAgfQotCiAgICAgY2xhc3MgU3RhY2tTY3JvbGxBbGdvcml0aG1TdGF0ZSB7CiAKICAgICAgICAgLyoqCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvdHVuZXIvQ29sb3JNYXRyaXhGcmFnbWVudC5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3R1bmVyL0NvbG9yTWF0cml4RnJhZ21lbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWQxYjA2Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3R1bmVyL0NvbG9yTWF0cml4RnJhZ21lbnQuamF2YQpAQCAtMCwwICsxLDM1NSBAQAorLyoqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uYW5kcm9pZC5zeXN0ZW11aS50dW5lcjsKKworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKK2ltcG9ydCBhbmRyb2lkLmFwcC5BbGVydERpYWxvZzsKK2ltcG9ydCBhbmRyb2lkLmFwcC5EaWFsb2c7CitpbXBvcnQgYW5kcm9pZC5hcHAuRGlhbG9nRnJhZ21lbnQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkRpYWxvZ0ludGVyZmFjZTsKK2ltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKK2ltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzOworaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC52MTQucHJlZmVyZW5jZS5QcmVmZXJlbmNlRnJhZ21lbnQ7CitpbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnYxNC5wcmVmZXJlbmNlLlN3aXRjaFByZWZlcmVuY2U7CitpbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnY3LnByZWZlcmVuY2UuRHJvcERvd25QcmVmZXJlbmNlOworaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC52Ny5wcmVmZXJlbmNlLlByZWZlcmVuY2U7CitpbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnY3LnByZWZlcmVuY2UuUHJlZmVyZW5jZVZpZXdIb2xkZXI7CitpbXBvcnQgYW5kcm9pZC50ZXh0LkVkaXRhYmxlOworaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7CitpbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRXYXRjaGVyOworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuQnV0dG9uOworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkVkaXRUZXh0OworaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLlI7CitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLnBob25lLlFTVGlsZUhvc3Q7CisKK2ltcG9ydCBqYXZhLnV0aWwuT2JqZWN0czsKKworcHVibGljIGNsYXNzIENvbG9yTWF0cml4RnJhZ21lbnQgZXh0ZW5kcyBQcmVmZXJlbmNlRnJhZ21lbnQgaW1wbGVtZW50cyBUdW5lclNlcnZpY2UuVHVuYWJsZSB7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIkNvbG9yTWF0cml4RnJhZ21lbnQiOworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ1VTVE9NX0lOREVYID0gMjsKKworICAgIC8vIE5pZ2h0IG1vZGUgfj0gMzQwMCBLCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgZmxvYXRbXSBOSUdIVF9WQUxVRVMgPSBuZXcgZmxvYXRbXSB7CisgICAgICAgIDEsIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAgMCwgLjc1NGYsIDAsICAgICAwLAorICAgICAgICAwLCAwLCAgICAgLjUxNmYsIDAsCisgICAgICAgIDAsIDAsICAgICAwLCAgICAgMSwKKyAgICB9OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgZmxvYXRbXSBJREVOVElUWV9NQVRSSVggPSBuZXcgZmxvYXRbXXsKKyAgICAgICAgICAgIDEsIDAsIDAsIDAsCisgICAgICAgICAgICAwLCAxLCAwLCAwLAorICAgICAgICAgICAgMCwgMCwgMSwgMCwKKyAgICAgICAgICAgIDAsIDAsIDAsIDEsCisgICAgfTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIFJFU0VUX0RFTEFZID0gMTAwMDA7CisKKyAgICBwcml2YXRlIGJvb2xlYW4gbUN1c3RvbUVuYWJsZWQ7CisgICAgcHJpdmF0ZSBEcm9wRG93blByZWZlcmVuY2UgbVNlbGVjdFByZWZlcmVuY2U7CisgICAgcHJpdmF0ZSBTdHJpbmcgbUN1cnJlbnRWYWx1ZTsKKyAgICBwcml2YXRlIFN0cmluZyBtQ3VzdG9tVmFsdWVzOworICAgIHByaXZhdGUgU3dpdGNoUHJlZmVyZW5jZSBtRW5hYmxlQ3VzdG9tUHJlZmVyZW5jZTsKKyAgICBwcml2YXRlIE1hdHJpeFByZWZlcmVuY2UgbUN1c3RvbVByZWZlcmVuY2U7CisgICAgcHJpdmF0ZSBTd2l0Y2hQcmVmZXJlbmNlIG1TaG93UXM7CisgICAgcHJpdmF0ZSBTdHJpbmcgbVRpbGVzOworCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25DcmVhdGUoQE51bGxhYmxlIEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKKyAgICAgICAgc3VwZXIub25DcmVhdGUoc2F2ZWRJbnN0YW5jZVN0YXRlKTsKKworICAgICAgICBDb250ZXh0IGNvbnRleHQgPSBnZXRDb250ZXh0KCk7CisgICAgICAgIFR1bmVyU2VydmljZS5nZXQoY29udGV4dCkuYWRkVHVuYWJsZSh0aGlzLCBDb2xvck1hdHJpeFRpbGUuQ09MT1JfTUFUUklYX0NVU1RPTV9FTkFCTEVELAorICAgICAgICAgICAgICAgIENvbG9yTWF0cml4VGlsZS5DT0xPUl9NQVRSSVhfQ1VTVE9NX1ZBTFVFUywgUVNUaWxlSG9zdC5USUxFU19TRVRUSU5HLAorICAgICAgICAgICAgICAgIFNldHRpbmdzLlNlY3VyZS5BQ0NFU1NJQklMSVRZX0RJU1BMQVlfQ09MT1JfTUFUUklYKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvbkNyZWF0ZVByZWZlcmVuY2VzKEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUsIFN0cmluZyByb290S2V5KSB7CisgICAgICAgIGZpbmFsIENvbnRleHQgY29udGV4dCA9IGdldFByZWZlcmVuY2VNYW5hZ2VyKCkuZ2V0Q29udGV4dCgpOworICAgICAgICBzZXRQcmVmZXJlbmNlU2NyZWVuKGdldFByZWZlcmVuY2VNYW5hZ2VyKCkuY3JlYXRlUHJlZmVyZW5jZVNjcmVlbihjb250ZXh0KSk7CisKKyAgICAgICAgbVNlbGVjdFByZWZlcmVuY2UgPSBuZXcgRHJvcERvd25QcmVmZXJlbmNlKGNvbnRleHQpOworICAgICAgICBtU2VsZWN0UHJlZmVyZW5jZS5zZXRUaXRsZShSLnN0cmluZy5jb2xvcl90cmFuc2Zvcm0pOworICAgICAgICBtU2VsZWN0UHJlZmVyZW5jZS5zZXRTdW1tYXJ5KCIlcyIpOworICAgICAgICBtU2VsZWN0UHJlZmVyZW5jZS5zZXRPblByZWZlcmVuY2VDaGFuZ2VMaXN0ZW5lcihuZXcgUHJlZmVyZW5jZS5PblByZWZlcmVuY2VDaGFuZ2VMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gb25QcmVmZXJlbmNlQ2hhbmdlKFByZWZlcmVuY2UgcHJlZmVyZW5jZSwgT2JqZWN0IG5ld1ZhbHVlKSB7CisgICAgICAgICAgICAgICAgaW50IGluZGV4ID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKSBuZXdWYWx1ZSk7CisgICAgICAgICAgICAgICAgU2V0dGluZ3MuU2VjdXJlLnB1dFN0cmluZyhjb250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgU2V0dGluZ3MuU2VjdXJlLkFDQ0VTU0lCSUxJVFlfRElTUExBWV9DT0xPUl9NQVRSSVgsIGdldFZhbHVlcygpW2luZGV4XSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICBnZXRQcmVmZXJlbmNlU2NyZWVuKCkuYWRkUHJlZmVyZW5jZShtU2VsZWN0UHJlZmVyZW5jZSk7CisKKyAgICAgICAgbVNob3dRcyA9IG5ldyBTd2l0Y2hQcmVmZXJlbmNlKGNvbnRleHQpOworICAgICAgICBtU2hvd1FzLnNldFRpdGxlKFIuc3RyaW5nLmNvbG9yX21hdHJpeF9zaG93X3FzKTsKKyAgICAgICAgbVNob3dRcy5zZXRPblByZWZlcmVuY2VDaGFuZ2VMaXN0ZW5lcihuZXcgUHJlZmVyZW5jZS5PblByZWZlcmVuY2VDaGFuZ2VMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gb25QcmVmZXJlbmNlQ2hhbmdlKFByZWZlcmVuY2UgcHJlZmVyZW5jZSwgT2JqZWN0IG5ld1ZhbHVlKSB7CisgICAgICAgICAgICAgICAgYm9vbGVhbiBzaG93VGlsZSA9IChCb29sZWFuKSBuZXdWYWx1ZTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgbmV3VGlsZXM7CisgICAgICAgICAgICAgICAgaWYgKHNob3dUaWxlKSB7CisgICAgICAgICAgICAgICAgICAgIG5ld1RpbGVzID0gbVRpbGVzICE9IG51bGwgPyBtVGlsZXMgKyAiLCIgKyBDb2xvck1hdHJpeFRpbGUuQ09MT1JfTUFUUklYX1NQRUMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJkZWZhdWx0LCIgKyBDb2xvck1hdHJpeFRpbGUuQ09MT1JfTUFUUklYX1NQRUM7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbmV3VGlsZXMgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1UaWxlcy5yZXBsYWNlKG1UaWxlcy5jb250YWlucyhDb2xvck1hdHJpeFRpbGUuQ09MT1JfTUFUUklYX1NQRUMrICIsIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IENvbG9yTWF0cml4VGlsZS5DT0xPUl9NQVRSSVhfU1BFQyArICIsIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIiwiICsgQ29sb3JNYXRyaXhUaWxlLkNPTE9SX01BVFJJWF9TUEVDLCAiIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFNldHRpbmdzLlNlY3VyZS5wdXRTdHJpbmcoY29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKSwgUVNUaWxlSG9zdC5USUxFU19TRVRUSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgbmV3VGlsZXMpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgZ2V0UHJlZmVyZW5jZVNjcmVlbigpLmFkZFByZWZlcmVuY2UobVNob3dRcyk7CisKKyAgICAgICAgbUVuYWJsZUN1c3RvbVByZWZlcmVuY2UgPSBuZXcgU3dpdGNoUHJlZmVyZW5jZShjb250ZXh0KTsKKyAgICAgICAgbUVuYWJsZUN1c3RvbVByZWZlcmVuY2Uuc2V0VGl0bGUoUi5zdHJpbmcuY29sb3JfZW5hYmxlX2N1c3RvbSk7CisgICAgICAgIG1FbmFibGVDdXN0b21QcmVmZXJlbmNlLnNldE9uUHJlZmVyZW5jZUNoYW5nZUxpc3RlbmVyKAorICAgICAgICAgICAgICAgIG5ldyBQcmVmZXJlbmNlLk9uUHJlZmVyZW5jZUNoYW5nZUxpc3RlbmVyKCkgeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBvblByZWZlcmVuY2VDaGFuZ2UoUHJlZmVyZW5jZSBwcmVmZXJlbmNlLCBPYmplY3QgbmV3VmFsdWUpIHsKKyAgICAgICAgICAgICAgICBib29sZWFuIGVuYWJsZWQgPSAoQm9vbGVhbikgbmV3VmFsdWU7CisgICAgICAgICAgICAgICAgU2V0dGluZ3MuU2VjdXJlLnB1dEludChjb250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3JNYXRyaXhUaWxlLkNPTE9SX01BVFJJWF9DVVNUT01fRU5BQkxFRCwgZW5hYmxlZCA/IDEgOiAwKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIGdldFByZWZlcmVuY2VTY3JlZW4oKS5hZGRQcmVmZXJlbmNlKG1FbmFibGVDdXN0b21QcmVmZXJlbmNlKTsKKworICAgICAgICBtQ3VzdG9tUHJlZmVyZW5jZSA9IG5ldyBNYXRyaXhQcmVmZXJlbmNlKGNvbnRleHQpOworICAgICAgICBnZXRQcmVmZXJlbmNlU2NyZWVuKCkuYWRkUHJlZmVyZW5jZShtQ3VzdG9tUHJlZmVyZW5jZSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25EZXN0cm95KCkgeworICAgICAgICBzdXBlci5vbkRlc3Ryb3koKTsKKyAgICAgICAgVHVuZXJTZXJ2aWNlLmdldChnZXRDb250ZXh0KCkpLnJlbW92ZVR1bmFibGUodGhpcyk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25UdW5pbmdDaGFuZ2VkKFN0cmluZyBrZXksIFN0cmluZyBuZXdWYWx1ZSkgeworICAgICAgICBpZiAoQ29sb3JNYXRyaXhUaWxlLkNPTE9SX01BVFJJWF9DVVNUT01fRU5BQkxFRC5lcXVhbHMoa2V5KSkgeworICAgICAgICAgICAgbUN1c3RvbUVuYWJsZWQgPSBuZXdWYWx1ZSAhPSBudWxsICYmIEludGVnZXIucGFyc2VJbnQobmV3VmFsdWUpICE9IDA7CisgICAgICAgICAgICBtRW5hYmxlQ3VzdG9tUHJlZmVyZW5jZS5zZXRDaGVja2VkKG1DdXN0b21FbmFibGVkKTsKKyAgICAgICAgICAgIG1DdXN0b21QcmVmZXJlbmNlLnNldEVuYWJsZWQobUN1c3RvbUVuYWJsZWQpOworICAgICAgICAgICAgdXBkYXRlU2VsZWN0T3B0aW9ucygpOworICAgICAgICB9IGVsc2UgaWYgKENvbG9yTWF0cml4VGlsZS5DT0xPUl9NQVRSSVhfQ1VTVE9NX1ZBTFVFUy5lcXVhbHMoa2V5KSkgeworICAgICAgICAgICAgbUN1c3RvbVZhbHVlcyA9IG5ld1ZhbHVlOworICAgICAgICAgICAgbUN1c3RvbVByZWZlcmVuY2Uuc2V0VmFsdWVzKG1DdXN0b21WYWx1ZXMpOworICAgICAgICAgICAgdXBkYXRlU2VsZWN0T3B0aW9ucygpOworICAgICAgICB9IGVsc2UgaWYgKFFTVGlsZUhvc3QuVElMRVNfU0VUVElORy5lcXVhbHMoa2V5KSkgeworICAgICAgICAgICAgbVRpbGVzID0gbmV3VmFsdWU7CisgICAgICAgICAgICBib29sZWFuIGhhc1RpbGUgPSBuZXdWYWx1ZSAhPSBudWxsCisgICAgICAgICAgICAgICAgICAgICYmIG5ld1ZhbHVlLmNvbnRhaW5zKENvbG9yTWF0cml4VGlsZS5DT0xPUl9NQVRSSVhfU1BFQyk7CisgICAgICAgICAgICBtU2hvd1FzLnNldENoZWNrZWQoaGFzVGlsZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtQ3VycmVudFZhbHVlID0gbmV3VmFsdWU7CisgICAgICAgICAgICB1cGRhdGVTZWxlY3RPcHRpb25zKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgdXBkYXRlU2VsZWN0T3B0aW9ucygpIHsKKyAgICAgICAgZmluYWwgaW50IE4gPSBDVVNUT01fSU5ERVggKyAobUN1c3RvbUVuYWJsZWQgPyAxIDogMCk7CisgICAgICAgIFN0cmluZ1tdIHZhbHVlcyA9IG5ldyBTdHJpbmdbTl07CisgICAgICAgIENoYXJTZXF1ZW5jZVtdIHRvdGFsTmFtZXMgPSBnZXRDb2xvclRpdGxlcyhnZXRDb250ZXh0KCkpOworICAgICAgICBDaGFyU2VxdWVuY2VbXSBuYW1lcyA9IG5ldyBDaGFyU2VxdWVuY2VbTl07CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CisgICAgICAgICAgICB2YWx1ZXNbaV0gPSBTdHJpbmcudmFsdWVPZihpKTsKKyAgICAgICAgICAgIG5hbWVzW2ldID0gdG90YWxOYW1lc1tpXTsKKyAgICAgICAgfQorICAgICAgICBtU2VsZWN0UHJlZmVyZW5jZS5zZXRFbnRyaWVzKG5hbWVzKTsKKyAgICAgICAgbVNlbGVjdFByZWZlcmVuY2Uuc2V0RW50cnlWYWx1ZXModmFsdWVzKTsKKyAgICAgICAgU3RyaW5nW10gZW50cmllcyA9IGdldFZhbHVlcygpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYgKE9iamVjdHMuZXF1YWxzKGVudHJpZXNbaV0sIG1DdXJyZW50VmFsdWUpKSB7CisgICAgICAgICAgICAgICAgbVNlbGVjdFByZWZlcmVuY2Uuc2V0VmFsdWVJbmRleChpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbVNlbGVjdFByZWZlcmVuY2Uuc2V0U3VtbWFyeShSLnN0cmluZy5jb2xvcl9tYXRyaXhfdW5rbm93bik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBwcml2YXRlIFN0cmluZ1tdIGdldFZhbHVlcygpIHsKKyAgICAgICAgU3RyaW5nW10gcmV0ID0gZ2V0Q29sb3JUcmFuc2Zvcm1zKCk7CisgICAgICAgIC8vIEZpbGwgaW4gY3VzdG9tIGJhc2VkIG9uIHR1bmVyIHNldHRpbmdzLgorICAgICAgICByZXRbQ1VTVE9NX0lOREVYXSA9IG1DdXN0b21WYWx1ZXM7CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHN0YXJ0UmV2ZXJ0VGltZXIoKSB7CisgICAgICAgIGdldFZpZXcoKS5wb3N0RGVsYXllZChtUmVzZXRDb2xvck1hdHJpeCwgUkVTRVRfREVMQVkpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBvbkFwcGx5KCkgeworICAgICAgICBTZXR0aW5ncy5TZWN1cmUucHV0U3RyaW5nKGdldENvbnRleHQoKS5nZXRDb250ZW50UmVzb2x2ZXIoKSwKKyAgICAgICAgICAgICAgICBDb2xvck1hdHJpeFRpbGUuQ09MT1JfTUFUUklYX0NVU1RPTV9WQUxVRVMsIG1DdXJyZW50VmFsdWUpOworICAgICAgICBnZXRWaWV3KCkucmVtb3ZlQ2FsbGJhY2tzKG1SZXNldENvbG9yTWF0cml4KTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgb25SZXZlcnQoKSB7CisgICAgICAgIGdldFZpZXcoKS5yZW1vdmVDYWxsYmFja3MobVJlc2V0Q29sb3JNYXRyaXgpOworICAgICAgICBtUmVzZXRDb2xvck1hdHJpeC5ydW4oKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZ1tdIGdldENvbG9yVHJhbnNmb3JtcygpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbXSB7CisgICAgICAgICAgICAgICAgbnVsbCwKKyAgICAgICAgICAgICAgICB0b1N0cmluZyhOSUdIVF9WQUxVRVMpLAorICAgICAgICAgICAgICAgIG51bGwsIC8vIEJsYW5rIHNwb3QgZm9yIGN1c3RvbSB2YWx1ZXMKKyAgICAgICAgICAgICAgICBudWxsLCAvLyBVbmtub3duCisgICAgICAgIH07CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBDaGFyU2VxdWVuY2VbXSBnZXRDb2xvclRpdGxlcyhDb250ZXh0IGNvbnRleHQpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBDaGFyU2VxdWVuY2VbXSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5nZXRTdHJpbmcoUi5zdHJpbmcuY29sb3JfbWF0cml4X25vbmUpLAorICAgICAgICAgICAgICAgIGNvbnRleHQuZ2V0U3RyaW5nKFIuc3RyaW5nLmNvbG9yX21hdHJpeF9uaWdodCksCisgICAgICAgICAgICAgICAgY29udGV4dC5nZXRTdHJpbmcoUi5zdHJpbmcuY29sb3JfbWF0cml4X2N1c3RvbSksCisgICAgICAgICAgICAgICAgY29udGV4dC5nZXRTdHJpbmcoUi5zdHJpbmcuY29sb3JfbWF0cml4X3Vua25vd24pLAorICAgICAgICB9OworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB0b1N0cmluZyhmbG9hdFtdIHZhbHVlcykgeworICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYgKGJ1aWxkZXIubGVuZ3RoKCkgIT0gMCkgeworICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcsJyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCh2YWx1ZXNbaV0pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBmaW5hbCBSdW5uYWJsZSBtUmVzZXRDb2xvck1hdHJpeCA9IG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICgoRGlhbG9nRnJhZ21lbnQpIGdldEZyYWdtZW50TWFuYWdlcigpLmZpbmRGcmFnbWVudEJ5VGFnKCJSZXZlcnRXYXJuaW5nIikpLmRpc21pc3MoKTsKKyAgICAgICAgICAgIFNldHRpbmdzLlNlY3VyZS5wdXRTdHJpbmcoZ2V0Q29udGV4dCgpLmdldENvbnRlbnRSZXNvbHZlcigpLAorICAgICAgICAgICAgICAgICAgICBTZXR0aW5ncy5TZWN1cmUuQUNDRVNTSUJJTElUWV9ESVNQTEFZX0NPTE9SX01BVFJJWCwgbnVsbCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgcHJpdmF0ZSBjbGFzcyBNYXRyaXhQcmVmZXJlbmNlIGV4dGVuZHMgUHJlZmVyZW5jZSBpbXBsZW1lbnRzIFZpZXcuT25DbGlja0xpc3RlbmVyIHsKKyAgICAgICAgcHJpdmF0ZSBmbG9hdFtdIG1WYWx1ZXM7CisKKyAgICAgICAgcHVibGljIE1hdHJpeFByZWZlcmVuY2UoQ29udGV4dCBjb250ZXh0KSB7CisgICAgICAgICAgICBzdXBlcihjb250ZXh0KTsKKyAgICAgICAgICAgIHNldExheW91dFJlc291cmNlKFIubGF5b3V0LnByZWZlcmVuY2VfbWF0cml4KTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHNldFZhbHVlcyhTdHJpbmcgY3VzdG9tVmFsdWVzKSB7CisgICAgICAgICAgICBpZiAoY3VzdG9tVmFsdWVzID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBtVmFsdWVzID0gSURFTlRJVFlfTUFUUklYOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBTdHJpbmdbXSBzdHJWYWx1ZXMgPSBjdXN0b21WYWx1ZXMuc3BsaXQoIiwiKTsKKyAgICAgICAgICAgICAgICBtVmFsdWVzID0gbmV3IGZsb2F0W3N0clZhbHVlcy5sZW5ndGhdOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbVZhbHVlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBtVmFsdWVzW2ldID0gRmxvYXQucGFyc2VGbG9hdChzdHJWYWx1ZXNbaV0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5vdGlmeUNoYW5nZWQoKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvbkJpbmRWaWV3SG9sZGVyKFByZWZlcmVuY2VWaWV3SG9sZGVyIGhvbGRlcikgeworICAgICAgICAgICAgc3VwZXIub25CaW5kVmlld0hvbGRlcihob2xkZXIpOworICAgICAgICAgICAgVmlld0dyb3VwIHZnID0gKFZpZXdHcm91cCkgaG9sZGVyLml0ZW1WaWV3LmZpbmRWaWV3QnlJZChSLmlkLmVkaXRfZ3JvdXApOworICAgICAgICAgICAgaWYgKG1WYWx1ZXMgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludCBjaGlsZEluZGV4ID0gMDsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbVZhbHVlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGZpbmFsIGludCBpbmRleCA9IGk7CisgICAgICAgICAgICAgICAgd2hpbGUgKCEodmcuZ2V0Q2hpbGRBdChjaGlsZEluZGV4KSBpbnN0YW5jZW9mIEVkaXRUZXh0KSkgeworICAgICAgICAgICAgICAgICAgICBjaGlsZEluZGV4Kys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZpbmFsIEVkaXRUZXh0IGVkaXRUZXh0ID0gKEVkaXRUZXh0KSB2Zy5nZXRDaGlsZEF0KGNoaWxkSW5kZXgrKyk7CisgICAgICAgICAgICAgICAgZWRpdFRleHQuc2V0VGV4dChTdHJpbmcudmFsdWVPZihtVmFsdWVzW2ldKSk7CisgICAgICAgICAgICAgICAgZWRpdFRleHQuYWRkVGV4dENoYW5nZWRMaXN0ZW5lcihuZXcgVGV4dFdhdGNoZXIoKSB7CisgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBhZnRlclRleHRDaGFuZ2VkKEVkaXRhYmxlIHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChUZXh0VXRpbHMuaXNFbXB0eShzLnRvU3RyaW5nKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVmFsdWVzW2luZGV4XSA9IEZsb2F0LnBhcnNlRmxvYXQocy50b1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVZhbHVlc1tpbmRleF0gPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uVGV4dENoYW5nZWQoQ2hhclNlcXVlbmNlIHMsIGludCBzdGFydCwgaW50IGJlZm9yZSwgaW50IGNvdW50KSB7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgYmVmb3JlVGV4dENoYW5nZWQoQ2hhclNlcXVlbmNlIHMsIGludCBzdGFydCwgaW50IGNvdW50LCBpbnQgYWZ0ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKChCdXR0b24pIGhvbGRlci5pdGVtVmlldy5maW5kVmlld0J5SWQoUi5pZC5hcHBseSkpLnNldE9uQ2xpY2tMaXN0ZW5lcih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikgeworICAgICAgICAgICAgU2V0dGluZ3MuU2VjdXJlLnB1dFN0cmluZyhnZXRDb250ZXh0KCkuZ2V0Q29udGVudFJlc29sdmVyKCksCisgICAgICAgICAgICAgICAgICAgIFNldHRpbmdzLlNlY3VyZS5BQ0NFU1NJQklMSVRZX0RJU1BMQVlfQ09MT1JfTUFUUklYLAorICAgICAgICAgICAgICAgICAgICBDb2xvck1hdHJpeEZyYWdtZW50LnRvU3RyaW5nKG1WYWx1ZXMpKTsKKyAgICAgICAgICAgIFJldmVydFdhcm5pbmcuc2hvdyhDb2xvck1hdHJpeEZyYWdtZW50LnRoaXMpOworICAgICAgICB9CisKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFJldmVydFdhcm5pbmcgZXh0ZW5kcyBEaWFsb2dGcmFnbWVudAorICAgICAgICAgICAgaW1wbGVtZW50cyBEaWFsb2dJbnRlcmZhY2UuT25DbGlja0xpc3RlbmVyIHsKKworICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgc2hvdyhDb2xvck1hdHJpeEZyYWdtZW50IGZyYWdtZW50KSB7CisgICAgICAgICAgICBSZXZlcnRXYXJuaW5nIHdhcm5pbmcgPSBuZXcgUmV2ZXJ0V2FybmluZygpOworICAgICAgICAgICAgd2FybmluZy5zZXRUYXJnZXRGcmFnbWVudChmcmFnbWVudCwgMCk7CisgICAgICAgICAgICB3YXJuaW5nLnNob3coZnJhZ21lbnQuZ2V0RnJhZ21lbnRNYW5hZ2VyKCksICJSZXZlcnRXYXJuaW5nIik7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIERpYWxvZyBvbkNyZWF0ZURpYWxvZyhCdW5kbGUgc2F2ZWRJbnN0YW5jZVN0YXRlKSB7CisgICAgICAgICAgICBBbGVydERpYWxvZyBhbGVydERpYWxvZyA9IG5ldyBBbGVydERpYWxvZy5CdWlsZGVyKGdldENvbnRleHQoKSkKKyAgICAgICAgICAgICAgICAgICAgLnNldFRpdGxlKFIuc3RyaW5nLmNvbG9yX3JldmVydF90aXRsZSkKKyAgICAgICAgICAgICAgICAgICAgLnNldE1lc3NhZ2UoUi5zdHJpbmcuY29sb3JfcmV2ZXJ0X21lc3NhZ2UpCisgICAgICAgICAgICAgICAgICAgIC5zZXRQb3NpdGl2ZUJ1dHRvbihSLnN0cmluZy5vaywgdGhpcykKKyAgICAgICAgICAgICAgICAgICAgLmNyZWF0ZSgpOworICAgICAgICAgICAgYWxlcnREaWFsb2cuc2V0Q2FuY2VsZWRPblRvdWNoT3V0c2lkZSh0cnVlKTsKKyAgICAgICAgICAgIHJldHVybiBhbGVydERpYWxvZzsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvbkNhbmNlbChEaWFsb2dJbnRlcmZhY2UgZGlhbG9nKSB7CisgICAgICAgICAgICBzdXBlci5vbkNhbmNlbChkaWFsb2cpOworICAgICAgICAgICAgKChDb2xvck1hdHJpeEZyYWdtZW50KSBnZXRUYXJnZXRGcmFnbWVudCgpKS5vblJldmVydCgpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soRGlhbG9nSW50ZXJmYWNlIGRpYWxvZywgaW50IHdoaWNoKSB7CisgICAgICAgICAgICAoKENvbG9yTWF0cml4RnJhZ21lbnQpIGdldFRhcmdldEZyYWdtZW50KCkpLm9uQXBwbHkoKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS90dW5lci9Db2xvck1hdHJpeFRpbGUuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS90dW5lci9Db2xvck1hdHJpeFRpbGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmQyMzUyCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3R1bmVyL0NvbG9yTWF0cml4VGlsZS5qYXZhCkBAIC0wLDAgKzEsMTA3IEBACisvKioKKyAqIENvcHlyaWdodCAoYykgMjAxNSwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5hbmRyb2lkLnN5c3RlbXVpLnR1bmVyOworCitpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuU2V0dGluZ3M7CitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwubG9nZ2luZy5NZXRyaWNzTG9nZ2VyOworaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLlI7CitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucXMuUVNUaWxlOworaW1wb3J0IGxpYmNvcmUudXRpbC5PYmplY3RzOworCitwdWJsaWMgY2xhc3MgQ29sb3JNYXRyaXhUaWxlIGV4dGVuZHMgUVNUaWxlPFFTVGlsZS5TdGF0ZT4gaW1wbGVtZW50cyBUdW5lclNlcnZpY2UuVHVuYWJsZSB7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDT0xPUl9NQVRSSVhfQ1VTVE9NX0VOQUJMRUQgPSAidHVuZXJfY29sb3JfY3VzdG9tX2VuYWJsZWQiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTE9SX01BVFJJWF9DVVNUT01fVkFMVUVTID0gInR1bmVyX2NvbG9yX2N1c3RvbV92YWx1ZXMiOworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09MT1JfTUFUUklYX1NQRUMgPSAiY29sb3JzIjsKKworICAgIHByaXZhdGUgaW50IG1JbmRleDsKKyAgICBwcml2YXRlIFN0cmluZyBtQ3VycmVudFZhbHVlOworCisgICAgcHJpdmF0ZSBib29sZWFuIG1DdXN0b21FbmFibGVkOworICAgIHByaXZhdGUgU3RyaW5nW10gbVZhbHVlczsKKyAgICBwcml2YXRlIENoYXJTZXF1ZW5jZVtdIG1WYWx1ZVRpdGxlczsKKworICAgIHB1YmxpYyBDb2xvck1hdHJpeFRpbGUoSG9zdCBob3N0KSB7CisgICAgICAgIHN1cGVyKGhvc3QpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHNldExpc3RlbmluZyhib29sZWFuIGxpc3RlbmluZykgeworICAgICAgICBpZiAobGlzdGVuaW5nKSB7CisgICAgICAgICAgICBtVmFsdWVzID0gQ29sb3JNYXRyaXhGcmFnbWVudC5nZXRDb2xvclRyYW5zZm9ybXMoKTsKKyAgICAgICAgICAgIG1WYWx1ZVRpdGxlcyA9IENvbG9yTWF0cml4RnJhZ21lbnQuZ2V0Q29sb3JUaXRsZXMobUNvbnRleHQpOworICAgICAgICAgICAgVHVuZXJTZXJ2aWNlLmdldChtQ29udGV4dCkuYWRkVHVuYWJsZSh0aGlzLCBDT0xPUl9NQVRSSVhfQ1VTVE9NX0VOQUJMRUQsCisgICAgICAgICAgICAgICAgICAgIENPTE9SX01BVFJJWF9DVVNUT01fVkFMVUVTLAorICAgICAgICAgICAgICAgICAgICBTZXR0aW5ncy5TZWN1cmUuQUNDRVNTSUJJTElUWV9ESVNQTEFZX0NPTE9SX01BVFJJWCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBUdW5lclNlcnZpY2UuZ2V0KG1Db250ZXh0KS5yZW1vdmVUdW5hYmxlKHRoaXMpOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIFN0YXRlIG5ld1RpbGVTdGF0ZSgpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBTdGF0ZSgpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIGhhbmRsZUNsaWNrKCkgeworICAgICAgICBtSW5kZXgrKzsKKyAgICAgICAgaWYgKCFtQ3VzdG9tRW5hYmxlZCAmJiAobUluZGV4ID09IENvbG9yTWF0cml4RnJhZ21lbnQuQ1VTVE9NX0lOREVYKSkgeworICAgICAgICAgICAgbUluZGV4Kys7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1JbmRleCA9PSBtVmFsdWVzLmxlbmd0aCAtIDEpIHsKKyAgICAgICAgICAgIG1JbmRleCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgU2V0dGluZ3MuU2VjdXJlLnB1dFN0cmluZ0ZvclVzZXIobUNvbnRleHQuZ2V0Q29udGVudFJlc29sdmVyKCksCisgICAgICAgICAgICAgICAgU2V0dGluZ3MuU2VjdXJlLkFDQ0VTU0lCSUxJVFlfRElTUExBWV9DT0xPUl9NQVRSSVgsIG1WYWx1ZXNbbUluZGV4XSwKKyAgICAgICAgICAgICAgICBBY3Rpdml0eU1hbmFnZXIuZ2V0Q3VycmVudFVzZXIoKSk7CisgICAgICAgIHJlZnJlc2hTdGF0ZSgpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uVHVuaW5nQ2hhbmdlZChTdHJpbmcga2V5LCBTdHJpbmcgbmV3VmFsdWUpIHsKKyAgICAgICAgaWYgKENPTE9SX01BVFJJWF9DVVNUT01fRU5BQkxFRC5lcXVhbHMoa2V5KSkgeworICAgICAgICAgICAgbUN1c3RvbUVuYWJsZWQgPSBuZXdWYWx1ZSAhPSBudWxsICYmIEludGVnZXIucGFyc2VJbnQobmV3VmFsdWUpICE9IDA7CisgICAgICAgIH0gZWxzZSBpZiAoQ09MT1JfTUFUUklYX0NVU1RPTV9WQUxVRVMuZXF1YWxzKGtleSkpIHsKKyAgICAgICAgICAgIG1WYWx1ZXNbQ29sb3JNYXRyaXhGcmFnbWVudC5DVVNUT01fSU5ERVhdID0gbmV3VmFsdWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtQ3VycmVudFZhbHVlID0gbmV3VmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgLy8gTGFzdCB2YWx1ZSBpcyB1bmtub3duLCBkZWZhdWx0IHRvIHRoYXQuCisgICAgICAgIG1JbmRleCA9IG1WYWx1ZXMubGVuZ3RoIC0gMTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtVmFsdWVzLmxlbmd0aCAtIDE7IGkrKykgeworICAgICAgICAgICAgaWYgKE9iamVjdHMuZXF1YWwobUN1cnJlbnRWYWx1ZSwgbVZhbHVlc1tpXSkpIHsKKyAgICAgICAgICAgICAgICBtSW5kZXggPSBpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJlZnJlc2hTdGF0ZSgpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIGhhbmRsZVVwZGF0ZVN0YXRlKFN0YXRlIHN0YXRlLCBPYmplY3QgYXJnKSB7CisgICAgICAgIHN0YXRlLmljb24gPSBSZXNvdXJjZUljb24uZ2V0KFIuZHJhd2FibGUuaWNfY29sb3JpemUpOworICAgICAgICBzdGF0ZS5sYWJlbCA9IG1WYWx1ZVRpdGxlc1ttSW5kZXhdOworICAgICAgICBzdGF0ZS5jb250ZW50RGVzY3JpcHRpb24gPSBtVmFsdWVUaXRsZXNbbUluZGV4XTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgaW50IGdldE1ldHJpY3NDYXRlZ29yeSgpIHsKKyAgICAgICAgcmV0dXJuIE1ldHJpY3NMb2dnZXIuUVNfQ09MT1JfTUFUUklYOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS90dW5lci9UdW5lclNlcnZpY2UuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS90dW5lci9UdW5lclNlcnZpY2UuamF2YQppbmRleCAxZTNiMGYxLi40N2E0NjY3IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvdHVuZXIvVHVuZXJTZXJ2aWNlLmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3R1bmVyL1R1bmVyU2VydmljZS5qYXZhCkBAIC0zMiw3ICszMiw3IEBACiBpbXBvcnQgYW5kcm9pZC5vcy5Vc2VySGFuZGxlOwogaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuU2V0dGluZ3M7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkFycmF5TWFwOwotCitpbXBvcnQgYW5kcm9pZC51dGlsLkFycmF5U2V0OwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLkJhdHRlcnlNZXRlckRyYXdhYmxlOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLkRlbW9Nb2RlOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLlI7CkBAIC00MSw5ICs0MSw4IEBACiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuc2V0dGluZ3MuQ3VycmVudFVzZXJUcmFja2VyOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnN0YXR1c2Jhci5waG9uZS5TeXN0ZW1VSURpYWxvZzsKIAotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLlNldDsKIAogCiBwdWJsaWMgY2xhc3MgVHVuZXJTZXJ2aWNlIGV4dGVuZHMgU3lzdGVtVUkgewpAQCAtNTQsNyArNTMsNyBAQAogICAgIC8vIE1hcCBvZiBVcmlzIHdlIGxpc3RlbiBvbiB0byB0aGVpciBzZXR0aW5ncyBrZXlzLgogICAgIHByaXZhdGUgZmluYWwgQXJyYXlNYXA8VXJpLCBTdHJpbmc+IG1MaXN0ZW5pbmdVcmlzID0gbmV3IEFycmF5TWFwPD4oKTsKICAgICAvLyBNYXAgb2Ygc2V0dGluZ3Mga2V5cyB0byB0aGUgbGlzdGVuZXIuCi0gICAgcHJpdmF0ZSBmaW5hbCBIYXNoTWFwPFN0cmluZywgTGlzdDxUdW5hYmxlPj4gbVR1bmFibGVMb29rdXAgPSBuZXcgSGFzaE1hcDw+KCk7CisgICAgcHJpdmF0ZSBmaW5hbCBIYXNoTWFwPFN0cmluZywgU2V0PFR1bmFibGU+PiBtVHVuYWJsZUxvb2t1cCA9IG5ldyBIYXNoTWFwPD4oKTsKIAogICAgIHByaXZhdGUgQ29udGVudFJlc29sdmVyIG1Db250ZW50UmVzb2x2ZXI7CiAgICAgcHJpdmF0ZSBpbnQgbUN1cnJlbnRVc2VyOwpAQCAtODUsNyArODQsNyBAQAogCiAgICAgcHJpdmF0ZSB2b2lkIGFkZFR1bmFibGUoVHVuYWJsZSB0dW5hYmxlLCBTdHJpbmcga2V5KSB7CiAgICAgICAgIGlmICghbVR1bmFibGVMb29rdXAuY29udGFpbnNLZXkoa2V5KSkgewotICAgICAgICAgICAgbVR1bmFibGVMb29rdXAucHV0KGtleSwgbmV3IEFycmF5TGlzdDxUdW5hYmxlPigpKTsKKyAgICAgICAgICAgIG1UdW5hYmxlTG9va3VwLnB1dChrZXksIG5ldyBBcnJheVNldDxUdW5hYmxlPigpKTsKICAgICAgICAgfQogICAgICAgICBtVHVuYWJsZUxvb2t1cC5nZXQoa2V5KS5hZGQodHVuYWJsZSk7CiAgICAgICAgIFVyaSB1cmkgPSBTZXR0aW5ncy5TZWN1cmUuZ2V0VXJpRm9yKGtleSk7CkBAIC05OSw3ICs5OCw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgcmVtb3ZlVHVuYWJsZShUdW5hYmxlIHR1bmFibGUpIHsKLSAgICAgICAgZm9yIChMaXN0PFR1bmFibGU+IGxpc3QgOiBtVHVuYWJsZUxvb2t1cC52YWx1ZXMoKSkgeworICAgICAgICBmb3IgKFNldDxUdW5hYmxlPiBsaXN0IDogbVR1bmFibGVMb29rdXAudmFsdWVzKCkpIHsKICAgICAgICAgICAgIGxpc3QucmVtb3ZlKHR1bmFibGUpOwogICAgICAgICB9CiAgICAgfQpAQCAtMTE2LDcgKzExNSw3IEBACiAKICAgICBwdWJsaWMgdm9pZCByZWxvYWRTZXR0aW5nKFVyaSB1cmkpIHsKICAgICAgICAgU3RyaW5nIGtleSA9IG1MaXN0ZW5pbmdVcmlzLmdldCh1cmkpOwotICAgICAgICBMaXN0PFR1bmFibGU+IHR1bmFibGVzID0gbVR1bmFibGVMb29rdXAuZ2V0KGtleSk7CisgICAgICAgIFNldDxUdW5hYmxlPiB0dW5hYmxlcyA9IG1UdW5hYmxlTG9va3VwLmdldChrZXkpOwogICAgICAgICBpZiAodHVuYWJsZXMgPT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0xNTMsOCArMTUyLDExIEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgVHVuZXJTZXJ2aWNlIHNJbnN0YW5jZTsKIAogICAgIHB1YmxpYyBzdGF0aWMgVHVuZXJTZXJ2aWNlIGdldChDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgU3lzdGVtVUlBcHBsaWNhdGlvbiBzeXNVaSA9IChTeXN0ZW1VSUFwcGxpY2F0aW9uKSBjb250ZXh0LmdldEFwcGxpY2F0aW9uQ29udGV4dCgpOwotICAgICAgICBUdW5lclNlcnZpY2Ugc2VydmljZSA9IHN5c1VpLmdldENvbXBvbmVudChUdW5lclNlcnZpY2UuY2xhc3MpOworICAgICAgICBUdW5lclNlcnZpY2Ugc2VydmljZSA9IG51bGw7CisgICAgICAgIGlmIChjb250ZXh0LmdldEFwcGxpY2F0aW9uQ29udGV4dCgpIGluc3RhbmNlb2YgU3lzdGVtVUlBcHBsaWNhdGlvbikgeworICAgICAgICAgICAgU3lzdGVtVUlBcHBsaWNhdGlvbiBzeXNVaSA9IChTeXN0ZW1VSUFwcGxpY2F0aW9uKSBjb250ZXh0LmdldEFwcGxpY2F0aW9uQ29udGV4dCgpOworICAgICAgICAgICAgc2VydmljZSA9IHN5c1VpLmdldENvbXBvbmVudChUdW5lclNlcnZpY2UuY2xhc3MpOworICAgICAgICB9CiAgICAgICAgIGlmIChzZXJ2aWNlID09IG51bGwpIHsKICAgICAgICAgICAgIC8vIENhbid0IGdldCBpdCBhcyBhIGNvbXBvbmVudCwgbXVzdCBpbiB0aGUgdHVuZXIsIGxldHMganVzdCBjcmVhdGUgb25lIGZvciBub3cuCiAgICAgICAgICAgICByZXR1cm4gZ2V0U3RhdGljU2VydmljZShjb250ZXh0KTsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS92b2x1bWUvVm9sdW1lRGlhbG9nLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvdm9sdW1lL1ZvbHVtZURpYWxvZy5qYXZhCmluZGV4IDlkNGVjMTAuLjNjNjNhYWUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS92b2x1bWUvVm9sdW1lRGlhbG9nLmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3ZvbHVtZS9Wb2x1bWVEaWFsb2cuamF2YQpAQCAtNjQ4LDcgKzY0OCw3IEBACiAgICAgICAgIGlmIChELkJVRykgTG9nLmQoVEFHLCAidXBkYXRlRm9vdGVySCIpOwogICAgICAgICBmaW5hbCBib29sZWFuIHdhc1Zpc2libGUgPSBtWmVuRm9vdGVyLmdldFZpc2liaWxpdHkoKSA9PSBWaWV3LlZJU0lCTEU7CiAgICAgICAgIGZpbmFsIGJvb2xlYW4gdmlzaWJsZSA9IG1TdGF0ZS56ZW5Nb2RlICE9IEdsb2JhbC5aRU5fTU9ERV9PRkYKLSAgICAgICAgICAgICAgICAmJiBtQXVkaW9NYW5hZ2VyLmlzU3RyZWFtQWZmZWN0ZWRCeVJpbmdlck1vZGUobUFjdGl2ZVN0cmVhbSk7CisgICAgICAgICAgICAgICAgJiYgKG1BdWRpb01hbmFnZXIuaXNTdHJlYW1BZmZlY3RlZEJ5UmluZ2VyTW9kZShtQWN0aXZlU3RyZWFtKSB8fCBtRXhwYW5kZWQpOwogICAgICAgICBpZiAod2FzVmlzaWJsZSAhPSB2aXNpYmxlICYmICF2aXNpYmxlKSB7CiAgICAgICAgICAgICBwcmVwYXJlRm9yQ29sbGFwc2UoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3ZvbHVtZS9aZW5Nb2RlUGFuZWwuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS92b2x1bWUvWmVuTW9kZVBhbmVsLmphdmEKaW5kZXggY2Q0N2FjMS4uMzhkOGRlMCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3ZvbHVtZS9aZW5Nb2RlUGFuZWwuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvdm9sdW1lL1plbk1vZGVQYW5lbC5qYXZhCkBAIC01MTAsNyArNTEwLDcgQEAKICAgICAgICAgR3JlZ29yaWFuQ2FsZW5kYXIgd2Vla1JhbmdlID0gbmV3IEdyZWdvcmlhbkNhbGVuZGFyKCk7CiAgICAgICAgIGZpbmFsIGxvbmcgbm93ID0gd2Vla1JhbmdlLmdldFRpbWVJbk1pbGxpcygpOwogICAgICAgICBzZXRUb01pZG5pZ2h0KHdlZWtSYW5nZSk7Ci0gICAgICAgIHdlZWtSYW5nZS5yb2xsKENhbGVuZGFyLkRBVEUsIDYpOworICAgICAgICB3ZWVrUmFuZ2UuYWRkKENhbGVuZGFyLkRBVEUsIDYpOwogICAgICAgICBmaW5hbCBsb25nIG5leHRBbGFybU1zID0gbUNvbnRyb2xsZXIuZ2V0TmV4dEFsYXJtKCk7CiAgICAgICAgIGlmIChuZXh0QWxhcm1NcyA+IDApIHsKICAgICAgICAgICAgIEdyZWdvcmlhbkNhbGVuZGFyIG5leHRBbGFybSA9IG5ldyBHcmVnb3JpYW5DYWxlbmRhcigpOwpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvdGVzdHMvQW5kcm9pZE1hbmlmZXN0LnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Rlc3RzL0FuZHJvaWRNYW5pZmVzdC54bWwKaW5kZXggYzIxYWYyNC4uMjgyNTYwMSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvdGVzdHMvQW5kcm9pZE1hbmlmZXN0LnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS90ZXN0cy9BbmRyb2lkTWFuaWZlc3QueG1sCkBAIC0xOSwxMCArMTksMTYgQEAKIAogICAgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uSU5KRUNUX0VWRU5UUyIgLz4KICAgICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLlJFQURfUEhPTkVfU1RBVEUiIC8+CisgICAgPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5JTlRFUkFDVF9BQ1JPU1NfVVNFUlMiIC8+CisgICAgPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5NQU5BR0VfVVNFUlMiIC8+CiAKICAgICA8YXBwbGljYXRpb24+CiAgICAgICAgIDx1c2VzLWxpYnJhcnkgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnRlc3QucnVubmVyIiAvPgogICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSJjb20uYW5kcm9pZC5zeXN0ZW11aS5zY3JlZW5zaG90LlNjcmVlbnNob3RTdHViQWN0aXZpdHkiIC8+CisKKyAgICAgICAgPHNlcnZpY2UKKyAgICAgICAgICAgIGFuZHJvaWQ6bmFtZT0iY29tLmFuZHJvaWQuc3lzdGVtdWkucXMuZXh0ZXJuYWwuVGlsZUxpZmVjeWNsZU1hbmFnZXJUZXN0cyRGYWtlVGlsZVNlcnZpY2UiCisgICAgICAgICAgICBhbmRyb2lkOnByb2Nlc3M9IjpraWxsYWJsZSIgLz4KICAgICA8L2FwcGxpY2F0aW9uPgogCiAgICAgPGluc3RydW1lbnRhdGlvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQudGVzdC5JbnN0cnVtZW50YXRpb25UZXN0UnVubmVyIgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL2V4dGVybmFsL1RpbGVMaWZlY3ljbGVNYW5hZ2VyVGVzdHMuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy9leHRlcm5hbC9UaWxlTGlmZWN5Y2xlTWFuYWdlclRlc3RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmViZjQ4OAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy9leHRlcm5hbC9UaWxlTGlmZWN5Y2xlTWFuYWdlclRlc3RzLmphdmEKQEAgLTAsMCArMSwzMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uYW5kcm9pZC5zeXN0ZW11aS5xcy5leHRlcm5hbDsKKworaW1wb3J0IGFuZHJvaWQuYXBwLlNlcnZpY2U7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkJyb2FkY2FzdFJlY2VpdmVyOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudEZpbHRlcjsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOworaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlclRocmVhZDsKK2ltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5Qcm9jZXNzOworaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOworaW1wb3J0IGFuZHJvaWQub3MuVXNlckhhbmRsZTsKK2ltcG9ydCBhbmRyb2lkLnNlcnZpY2UucXVpY2tzZXR0aW5ncy5JUVNTZXJ2aWNlOworaW1wb3J0IGFuZHJvaWQuc2VydmljZS5xdWlja3NldHRpbmdzLklRU1RpbGVTZXJ2aWNlOworaW1wb3J0IGFuZHJvaWQuc2VydmljZS5xdWlja3NldHRpbmdzLlRpbGU7CitpbXBvcnQgYW5kcm9pZC50ZXN0LkFuZHJvaWRUZXN0Q2FzZTsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuQXJyYXlTZXQ7CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKKworcHVibGljIGNsYXNzIFRpbGVMaWZlY3ljbGVNYW5hZ2VyVGVzdHMgZXh0ZW5kcyBBbmRyb2lkVGVzdENhc2UgeworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRJTEVfVVBEQVRFX0JST0FEQ0FTVCA9ICJjb20uYW5kcm9pZC5zeXN0ZW11aS50ZXN0cy5USUxFX1VQREFURSI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfQ0FMTEJBQ0sgPSAiY2FsbGJhY2siOworCisgICAgcHJpdmF0ZSBIYW5kbGVyVGhyZWFkIG1UaHJlYWQ7CisgICAgcHJpdmF0ZSBIYW5kbGVyIG1IYW5kbGVyOworICAgIHByaXZhdGUgVGlsZUxpZmVjeWNsZU1hbmFnZXIgbVN0YXRlTWFuYWdlcjsKKyAgICBwcml2YXRlIGZpbmFsIE9iamVjdCBtQnJvYWRjYXN0TG9jayA9IG5ldyBPYmplY3QoKTsKKyAgICBwcml2YXRlIGZpbmFsIEFycmF5U2V0PFN0cmluZz4gbUNhbGxiYWNrcyA9IG5ldyBBcnJheVNldDw+KCk7CisgICAgcHJpdmF0ZSBib29sZWFuIG1Cb3VuZDsKKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHN1cGVyLnNldFVwKCk7CisgICAgICAgIG1UaHJlYWQgPSBuZXcgSGFuZGxlclRocmVhZCgiVGVzdFRocmVhZCIpOworICAgICAgICBtVGhyZWFkLnN0YXJ0KCk7CisgICAgICAgIG1IYW5kbGVyID0gbmV3IEhhbmRsZXIobVRocmVhZC5nZXRMb29wZXIoKSk7CisgICAgICAgIG1TdGF0ZU1hbmFnZXIgPSBuZXcgVGlsZUxpZmVjeWNsZU1hbmFnZXIobUhhbmRsZXIsIGdldENvbnRleHQoKSwKKyAgICAgICAgICAgICAgICBuZXcgSW50ZW50KG1Db250ZXh0LCBGYWtlVGlsZVNlcnZpY2UuY2xhc3MpLCBuZXcgVXNlckhhbmRsZShVc2VySGFuZGxlLm15VXNlcklkKCkpKTsKKyAgICAgICAgbUNhbGxiYWNrcy5jbGVhcigpOworICAgICAgICBnZXRDb250ZXh0KCkucmVnaXN0ZXJSZWNlaXZlcihtUmVjZWl2ZXIsIG5ldyBJbnRlbnRGaWx0ZXIoVElMRV9VUERBVEVfQlJPQURDQVNUKSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgc3VwZXIudGVhckRvd24oKTsKKyAgICAgICAgaWYgKG1Cb3VuZCkgeworICAgICAgICAgICAgdW5iaW5kU2VydmljZSgpOworICAgICAgICB9CisgICAgICAgIG1UaHJlYWQucXVpdCgpOworICAgICAgICBnZXRDb250ZXh0KCkudW5yZWdpc3RlclJlY2VpdmVyKG1SZWNlaXZlcik7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdFN5bmMoKSB7CisgICAgICAgIHN5bmNXaXRoSGFuZGxlcigpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRlc3RCaW5kKCkgeworICAgICAgICBiaW5kU2VydmljZSgpOworICAgICAgICB3YWl0Rm9yQ2FsbGJhY2soIm9uQ3JlYXRlIik7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdFVuYmluZCgpIHsKKyAgICAgICAgYmluZFNlcnZpY2UoKTsKKyAgICAgICAgd2FpdEZvckNhbGxiYWNrKCJvbkNyZWF0ZSIpOworICAgICAgICB1bmJpbmRTZXJ2aWNlKCk7CisgICAgICAgIHdhaXRGb3JDYWxsYmFjaygib25EZXN0cm95Iik7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdFRpbGVTZXJ2aWNlQ2FsbGJhY2tzKCkgeworICAgICAgICBiaW5kU2VydmljZSgpOworICAgICAgICB3YWl0Rm9yQ2FsbGJhY2soIm9uQ3JlYXRlIik7CisKKyAgICAgICAgbVN0YXRlTWFuYWdlci5vblRpbGVBZGRlZCgpOworICAgICAgICB3YWl0Rm9yQ2FsbGJhY2soIm9uVGlsZUFkZGVkIik7CisgICAgICAgIG1TdGF0ZU1hbmFnZXIub25TdGFydExpc3RlbmluZygpOworICAgICAgICB3YWl0Rm9yQ2FsbGJhY2soIm9uU3RhcnRMaXN0ZW5pbmciKTsKKyAgICAgICAgbVN0YXRlTWFuYWdlci5vbkNsaWNrKG51bGwpOworICAgICAgICB3YWl0Rm9yQ2FsbGJhY2soIm9uQ2xpY2siKTsKKyAgICAgICAgbVN0YXRlTWFuYWdlci5vblN0b3BMaXN0ZW5pbmcoKTsKKyAgICAgICAgd2FpdEZvckNhbGxiYWNrKCJvblN0b3BMaXN0ZW5pbmciKTsKKyAgICAgICAgbVN0YXRlTWFuYWdlci5vblRpbGVSZW1vdmVkKCk7CisgICAgICAgIHdhaXRGb3JDYWxsYmFjaygib25UaWxlUmVtb3ZlZCIpOworCisgICAgICAgIHVuYmluZFNlcnZpY2UoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0QWRkZWRCZWZvcmVCaW5kKCkgeworICAgICAgICBtU3RhdGVNYW5hZ2VyLm9uVGlsZUFkZGVkKCk7CisKKyAgICAgICAgYmluZFNlcnZpY2UoKTsKKyAgICAgICAgd2FpdEZvckNhbGxiYWNrKCJvbkNyZWF0ZSIpOworICAgICAgICB3YWl0Rm9yQ2FsbGJhY2soIm9uVGlsZUFkZGVkIik7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdExpc3RlbmluZ0JlZm9yZUJpbmQoKSB7CisgICAgICAgIG1TdGF0ZU1hbmFnZXIub25UaWxlQWRkZWQoKTsKKyAgICAgICAgbVN0YXRlTWFuYWdlci5vblN0YXJ0TGlzdGVuaW5nKCk7CisKKyAgICAgICAgYmluZFNlcnZpY2UoKTsKKyAgICAgICAgd2FpdEZvckNhbGxiYWNrKCJvbkNyZWF0ZSIpOworICAgICAgICB3YWl0Rm9yQ2FsbGJhY2soIm9uVGlsZUFkZGVkIik7CisgICAgICAgIHdhaXRGb3JDYWxsYmFjaygib25TdGFydExpc3RlbmluZyIpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRlc3RDbGlja0JlZm9yZUJpbmQoKSB7CisgICAgICAgIG1TdGF0ZU1hbmFnZXIub25UaWxlQWRkZWQoKTsKKyAgICAgICAgbVN0YXRlTWFuYWdlci5vblN0YXJ0TGlzdGVuaW5nKCk7CisgICAgICAgIG1TdGF0ZU1hbmFnZXIub25DbGljayhudWxsKTsKKworICAgICAgICBiaW5kU2VydmljZSgpOworICAgICAgICB3YWl0Rm9yQ2FsbGJhY2soIm9uQ3JlYXRlIik7CisgICAgICAgIHdhaXRGb3JDYWxsYmFjaygib25UaWxlQWRkZWQiKTsKKyAgICAgICAgd2FpdEZvckNhbGxiYWNrKCJvblN0YXJ0TGlzdGVuaW5nIik7CisgICAgICAgIHdhaXRGb3JDYWxsYmFjaygib25DbGljayIpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRlc3RMaXN0ZW5pbmdOb3RMaXN0ZW5pbmdCZWZvcmVCaW5kKCkgeworICAgICAgICBtU3RhdGVNYW5hZ2VyLm9uVGlsZUFkZGVkKCk7CisgICAgICAgIG1TdGF0ZU1hbmFnZXIub25TdGFydExpc3RlbmluZygpOworICAgICAgICBtU3RhdGVNYW5hZ2VyLm9uU3RvcExpc3RlbmluZygpOworCisgICAgICAgIGJpbmRTZXJ2aWNlKCk7CisgICAgICAgIHdhaXRGb3JDYWxsYmFjaygib25DcmVhdGUiKTsKKyAgICAgICAgdW5iaW5kU2VydmljZSgpOworICAgICAgICB3YWl0Rm9yQ2FsbGJhY2soIm9uRGVzdHJveSIpOworICAgICAgICBhc3NlcnRGYWxzZShtQ2FsbGJhY2tzLmNvbnRhaW5zKCJvblN0YXJ0TGlzdGVuaW5nIikpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRlc3ROb0NsaWNrT2ZOb3RMaXN0ZW5pbmdBbnltb3JlKCkgeworICAgICAgICBtU3RhdGVNYW5hZ2VyLm9uVGlsZUFkZGVkKCk7CisgICAgICAgIG1TdGF0ZU1hbmFnZXIub25TdGFydExpc3RlbmluZygpOworICAgICAgICBtU3RhdGVNYW5hZ2VyLm9uQ2xpY2sobnVsbCk7CisgICAgICAgIG1TdGF0ZU1hbmFnZXIub25TdG9wTGlzdGVuaW5nKCk7CisKKyAgICAgICAgYmluZFNlcnZpY2UoKTsKKyAgICAgICAgd2FpdEZvckNhbGxiYWNrKCJvbkNyZWF0ZSIpOworICAgICAgICB1bmJpbmRTZXJ2aWNlKCk7CisgICAgICAgIHdhaXRGb3JDYWxsYmFjaygib25EZXN0cm95Iik7CisgICAgICAgIGFzc2VydEZhbHNlKG1DYWxsYmFja3MuY29udGFpbnMoIm9uQ2xpY2siKSk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdENvbXBvbmVudEVuYWJsaW5nKCkgeworICAgICAgICBtU3RhdGVNYW5hZ2VyLm9uVGlsZUFkZGVkKCk7CisgICAgICAgIG1TdGF0ZU1hbmFnZXIub25TdGFydExpc3RlbmluZygpOworCisgICAgICAgIFBhY2thZ2VNYW5hZ2VyIHBtID0gZ2V0Q29udGV4dCgpLmdldFBhY2thZ2VNYW5hZ2VyKCk7CisgICAgICAgIHBtLnNldENvbXBvbmVudEVuYWJsZWRTZXR0aW5nKG5ldyBDb21wb25lbnROYW1lKGdldENvbnRleHQoKSwgRmFrZVRpbGVTZXJ2aWNlLmNsYXNzKSwKKyAgICAgICAgICAgICAgICBQYWNrYWdlTWFuYWdlci5DT01QT05FTlRfRU5BQkxFRF9TVEFURV9ESVNBQkxFRCwgUGFja2FnZU1hbmFnZXIuRE9OVF9LSUxMX0FQUCk7CisKKyAgICAgICAgYmluZFNlcnZpY2UoKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShtU3RhdGVNYW5hZ2VyLm1SZWNlaXZlclJlZ2lzdGVyZWQpOworCisgICAgICAgIHBtLnNldENvbXBvbmVudEVuYWJsZWRTZXR0aW5nKG5ldyBDb21wb25lbnROYW1lKGdldENvbnRleHQoKSwgRmFrZVRpbGVTZXJ2aWNlLmNsYXNzKSwKKyAgICAgICAgICAgICAgICBQYWNrYWdlTWFuYWdlci5DT01QT05FTlRfRU5BQkxFRF9TVEFURV9FTkFCTEVELCBQYWNrYWdlTWFuYWdlci5ET05UX0tJTExfQVBQKTsKKyAgICAgICAgd2FpdEZvckNhbGxiYWNrKCJvbkNyZWF0ZSIpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRlc3RLaWxsUHJvY2VzcygpIHsKKyAgICAgICAgbVN0YXRlTWFuYWdlci5vblN0YXJ0TGlzdGVuaW5nKCk7CisgICAgICAgIGJpbmRTZXJ2aWNlKCk7CisgICAgICAgIHdhaXRGb3JDYWxsYmFjaygib25DcmVhdGUiKTsKKyAgICAgICAgd2FpdEZvckNhbGxiYWNrKCJvblN0YXJ0TGlzdGVuaW5nIik7CisKKyAgICAgICAgZ2V0Q29udGV4dCgpLnNlbmRCcm9hZGNhc3QobmV3IEludGVudChGYWtlVGlsZVNlcnZpY2UuQUNUSU9OX0tJTEwpKTsKKworICAgICAgICB3YWl0Rm9yQ2FsbGJhY2soIm9uQ3JlYXRlIik7CisgICAgICAgIHdhaXRGb3JDYWxsYmFjaygib25TdGFydExpc3RlbmluZyIpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBiaW5kU2VydmljZSgpIHsKKyAgICAgICAgbUJvdW5kID0gdHJ1ZTsKKyAgICAgICAgbVN0YXRlTWFuYWdlci5zZXRCaW5kU2VydmljZSh0cnVlKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgdW5iaW5kU2VydmljZSgpIHsKKyAgICAgICAgbUJvdW5kID0gZmFsc2U7CisgICAgICAgIG1TdGF0ZU1hbmFnZXIuc2V0QmluZFNlcnZpY2UoZmFsc2UpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCB3YWl0Rm9yQ2FsbGJhY2soU3RyaW5nIGNhbGxiYWNrKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjU7IGkrKykgeworICAgICAgICAgICAgaWYgKG1DYWxsYmFja3MuY29udGFpbnMoY2FsbGJhY2spKSB7CisgICAgICAgICAgICAgICAgbUNhbGxiYWNrcy5yZW1vdmUoY2FsbGJhY2spOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN5bmNocm9uaXplZCAobUJyb2FkY2FzdExvY2spIHsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBtQnJvYWRjYXN0TG9jay53YWl0KDUwMCk7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAobUNhbGxiYWNrcy5jb250YWlucyhjYWxsYmFjaykpIHsKKyAgICAgICAgICAgIG1DYWxsYmFja3MucmVtb3ZlKGNhbGxiYWNrKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBmYWlsKCJEaWRuJ3QgcmVjZWl2ZSBjYWxsYmFjazogIiArIGNhbGxiYWNrKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgc3luY1dpdGhIYW5kbGVyKCkgeworICAgICAgICBmaW5hbCBPYmplY3QgbG9jayA9IG5ldyBPYmplY3QoKTsKKyAgICAgICAgc3luY2hyb25pemVkIChsb2NrKSB7CisgICAgICAgICAgICBtSGFuZGxlci5wb3N0KG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAobG9jaykgeworICAgICAgICAgICAgICAgICAgICAgICAgbG9jay5ub3RpZnkoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBsb2NrLndhaXQoNTAwMCk7CisgICAgICAgICAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGZpbmFsIEJyb2FkY2FzdFJlY2VpdmVyIG1SZWNlaXZlciA9IG5ldyBCcm9hZGNhc3RSZWNlaXZlcigpIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uUmVjZWl2ZShDb250ZXh0IGNvbnRleHQsIEludGVudCBpbnRlbnQpIHsKKyAgICAgICAgICAgIG1DYWxsYmFja3MuYWRkKGludGVudC5nZXRTdHJpbmdFeHRyYShFWFRSQV9DQUxMQkFDSykpOworICAgICAgICAgICAgc3luY2hyb25pemVkIChtQnJvYWRjYXN0TG9jaykgeworICAgICAgICAgICAgICAgIG1Ccm9hZGNhc3RMb2NrLm5vdGlmeSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgRmFrZVRpbGVTZXJ2aWNlIGV4dGVuZHMgU2VydmljZSB7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFDVElPTl9LSUxMID0gImNvbS5hbmRyb2lkLnN5c3RlbXVpLnRlc3QuS0lMTCI7CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBJQmluZGVyIG9uQmluZChJbnRlbnQgaW50ZW50KSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IElRU1RpbGVTZXJ2aWNlLlN0dWIoKSB7CisKKyAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBzZXRRU1NlcnZpY2UoSVFTU2VydmljZSBzZXJ2aWNlKSB7CisKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBzZXRRU1RpbGUoVGlsZSB0aWxlKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblRpbGVBZGRlZCgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24geworICAgICAgICAgICAgICAgICAgICBzZW5kQ2FsbGJhY2soIm9uVGlsZUFkZGVkIik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25UaWxlUmVtb3ZlZCgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24geworICAgICAgICAgICAgICAgICAgICBzZW5kQ2FsbGJhY2soIm9uVGlsZVJlbW92ZWQiKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblN0YXJ0TGlzdGVuaW5nKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CisgICAgICAgICAgICAgICAgICAgIHNlbmRDYWxsYmFjaygib25TdGFydExpc3RlbmluZyIpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uU3RvcExpc3RlbmluZygpIHRocm93cyBSZW1vdGVFeGNlcHRpb24geworICAgICAgICAgICAgICAgICAgICBzZW5kQ2FsbGJhY2soIm9uU3RvcExpc3RlbmluZyIpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soSUJpbmRlciBpQmluZGVyKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKKyAgICAgICAgICAgICAgICAgICAgc2VuZENhbGxiYWNrKCJvbkNsaWNrIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvbkNyZWF0ZSgpIHsKKyAgICAgICAgICAgIHN1cGVyLm9uQ3JlYXRlKCk7CisgICAgICAgICAgICByZWdpc3RlclJlY2VpdmVyKG1SZWNlaXZlciwgbmV3IEludGVudEZpbHRlcihBQ1RJT05fS0lMTCkpOworICAgICAgICAgICAgc2VuZENhbGxiYWNrKCJvbkNyZWF0ZSIpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uRGVzdHJveSgpIHsKKyAgICAgICAgICAgIHN1cGVyLm9uRGVzdHJveSgpOworICAgICAgICAgICAgdW5yZWdpc3RlclJlY2VpdmVyKG1SZWNlaXZlcik7CisgICAgICAgICAgICBzZW5kQ2FsbGJhY2soIm9uRGVzdHJveSIpOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSB2b2lkIHNlbmRDYWxsYmFjayhTdHJpbmcgY2FsbGJhY2spIHsKKyAgICAgICAgICAgIExvZy5kKCJUaWxlTGlmZWN5Y2xlTWFuYWdlciIsICJSZWxheWluZzogIiArIGNhbGxiYWNrKTsKKyAgICAgICAgICAgIHNlbmRCcm9hZGNhc3QobmV3IEludGVudChUSUxFX1VQREFURV9CUk9BRENBU1QpCisgICAgICAgICAgICAgICAgICAgIC5wdXRFeHRyYShFWFRSQV9DQUxMQkFDSywgY2FsbGJhY2spKTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgZmluYWwgQnJvYWRjYXN0UmVjZWl2ZXIgbVJlY2VpdmVyID0gbmV3IEJyb2FkY2FzdFJlY2VpdmVyKCkgeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblJlY2VpdmUoQ29udGV4dCBjb250ZXh0LCBJbnRlbnQgaW50ZW50KSB7CisgICAgICAgICAgICAgICAgaWYgKEFDVElPTl9LSUxMLmVxdWFscyhpbnRlbnQuZ2V0QWN0aW9uKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIFByb2Nlc3Mua2lsbFByb2Nlc3MoUHJvY2Vzcy5teVBpZCgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL2V4dGVybmFsL1RpbGVTZXJ2aWNlTWFuYWdlclRlc3RzLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS90ZXN0cy9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvZXh0ZXJuYWwvVGlsZVNlcnZpY2VNYW5hZ2VyVGVzdHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTg2YzI4Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL2V4dGVybmFsL1RpbGVTZXJ2aWNlTWFuYWdlclRlc3RzLmphdmEKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZQorICovCitwYWNrYWdlIGNvbS5hbmRyb2lkLnN5c3RlbXVpLnFzLmV4dGVybmFsOworCitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWU7CitpbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOworaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlclRocmVhZDsKK2ltcG9ydCBhbmRyb2lkLnNlcnZpY2UucXVpY2tzZXR0aW5ncy5UaWxlU2VydmljZTsKK2ltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5TeXN1aVRlc3RDYXNlOworaW1wb3J0IG9yZy5tb2NraXRvLkFyZ3VtZW50Q2FwdG9yOworaW1wb3J0IG9yZy5tb2NraXRvLk1vY2tpdG87CisKK3B1YmxpYyBjbGFzcyBUaWxlU2VydmljZU1hbmFnZXJUZXN0cyBleHRlbmRzIFN5c3VpVGVzdENhc2UgeworCisgICAgcHJpdmF0ZSBUaWxlU2VydmljZXMgbVRpbGVTZXJ2aWNlczsKKyAgICBwcml2YXRlIFRpbGVMaWZlY3ljbGVNYW5hZ2VyIG1UaWxlTGlmZWN5Y2xlOworICAgIHByaXZhdGUgSGFuZGxlclRocmVhZCBtVGhyZWFkOworICAgIHByaXZhdGUgSGFuZGxlciBtSGFuZGxlcjsKKyAgICBwcml2YXRlIFRpbGVTZXJ2aWNlTWFuYWdlciBtVGlsZVNlcnZpY2VNYW5hZ2VyOworCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgc3VwZXIuc2V0VXAoKTsKKyAgICAgICAgbVRocmVhZCA9IG5ldyBIYW5kbGVyVGhyZWFkKCJUZXN0VGhyZWFkIik7CisgICAgICAgIG1UaHJlYWQuc3RhcnQoKTsKKyAgICAgICAgbUhhbmRsZXIgPSBuZXcgSGFuZGxlcihtVGhyZWFkLmdldExvb3BlcigpKTsKKyAgICAgICAgbVRpbGVTZXJ2aWNlcyA9IE1vY2tpdG8ubW9jayhUaWxlU2VydmljZXMuY2xhc3MpOworICAgICAgICBNb2NraXRvLndoZW4obVRpbGVTZXJ2aWNlcy5nZXRDb250ZXh0KCkpLnRoZW5SZXR1cm4obUNvbnRleHQpOworICAgICAgICBtVGlsZUxpZmVjeWNsZSA9IE1vY2tpdG8ubW9jayhUaWxlTGlmZWN5Y2xlTWFuYWdlci5jbGFzcyk7CisgICAgICAgIENvbXBvbmVudE5hbWUgY29tcG9uZW50TmFtZSA9IG5ldyBDb21wb25lbnROYW1lKG1Db250ZXh0LAorICAgICAgICAgICAgICAgIFRpbGVTZXJ2aWNlTWFuYWdlclRlc3RzLmNsYXNzKTsKKyAgICAgICAgTW9ja2l0by53aGVuKG1UaWxlTGlmZWN5Y2xlLmdldENvbXBvbmVudCgpKS50aGVuUmV0dXJuKGNvbXBvbmVudE5hbWUpOworICAgICAgICBtQ29udGV4dC5nZXRTaGFyZWRQcmVmZXJlbmNlcyhUaWxlU2VydmljZU1hbmFnZXIuUFJFRlNfRklMRSwgMCkuZWRpdCgpCisgICAgICAgICAgICAgICAgLnB1dEludChjb21wb25lbnROYW1lLmZsYXR0ZW5Ub1N0cmluZygpLCBUaWxlU2VydmljZS5USUxFX01PREVfUEFTU0lWRSkuY29tbWl0KCk7CisgICAgICAgIG1UaWxlU2VydmljZU1hbmFnZXIgPSBuZXcgVGlsZVNlcnZpY2VNYW5hZ2VyKG1UaWxlU2VydmljZXMsIG1IYW5kbGVyLCBtVGlsZUxpZmVjeWNsZSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgc3VwZXIudGVhckRvd24oKTsKKyAgICAgICAgbVRocmVhZC5xdWl0KCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdFNldEJpbmRSZXF1ZXN0ZWQoKSB7CisgICAgICAgIC8vIFJlcXVlc3QgYmluZGluZy4KKyAgICAgICAgbVRpbGVTZXJ2aWNlTWFuYWdlci5zZXRCaW5kUmVxdWVzdGVkKHRydWUpOworICAgICAgICBtVGlsZVNlcnZpY2VNYW5hZ2VyLnNldExhc3RVcGRhdGUoMCk7CisgICAgICAgIG1UaWxlU2VydmljZU1hbmFnZXIuY2FsY3VsYXRlQmluZFByaW9yaXR5KDUpOworICAgICAgICBNb2NraXRvLnZlcmlmeShtVGlsZVNlcnZpY2VzLCBNb2NraXRvLnRpbWVzKDIpKS5yZWNhbGN1bGF0ZUJpbmRBbGxvd2FuY2UoKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDUsIG1UaWxlU2VydmljZU1hbmFnZXIuZ2V0QmluZFByaW9yaXR5KCkpOworCisgICAgICAgIC8vIFZlcmlmeSBzYW1lIHN0YXRlIGRvZXNuJ3QgdHJpZ2dlciByZWNhbGN1bGF0aW5nIGZvciBubyByZWFzb24uCisgICAgICAgIG1UaWxlU2VydmljZU1hbmFnZXIuc2V0QmluZFJlcXVlc3RlZCh0cnVlKTsKKyAgICAgICAgTW9ja2l0by52ZXJpZnkobVRpbGVTZXJ2aWNlcywgTW9ja2l0by50aW1lcygyKSkucmVjYWxjdWxhdGVCaW5kQWxsb3dhbmNlKCk7CisKKyAgICAgICAgbVRpbGVTZXJ2aWNlTWFuYWdlci5zZXRCaW5kUmVxdWVzdGVkKGZhbHNlKTsKKyAgICAgICAgbVRpbGVTZXJ2aWNlTWFuYWdlci5jYWxjdWxhdGVCaW5kUHJpb3JpdHkoNSk7CisgICAgICAgIE1vY2tpdG8udmVyaWZ5KG1UaWxlU2VydmljZXMsIE1vY2tpdG8udGltZXMoMykpLnJlY2FsY3VsYXRlQmluZEFsbG93YW5jZSgpOworICAgICAgICBhc3NlcnRFcXVhbHMoSW50ZWdlci5NSU5fVkFMVUUsIG1UaWxlU2VydmljZU1hbmFnZXIuZ2V0QmluZFByaW9yaXR5KCkpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRlc3RQZW5kaW5nQ2xpY2tQcmlvcml0eSgpIHsKKyAgICAgICAgTW9ja2l0by53aGVuKG1UaWxlTGlmZWN5Y2xlLmhhc1BlbmRpbmdDbGljaygpKS50aGVuUmV0dXJuKHRydWUpOworICAgICAgICBtVGlsZVNlcnZpY2VNYW5hZ2VyLmNhbGN1bGF0ZUJpbmRQcmlvcml0eSgwKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKEludGVnZXIuTUFYX1ZBTFVFLCBtVGlsZVNlcnZpY2VNYW5hZ2VyLmdldEJpbmRQcmlvcml0eSgpKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0QmluZCgpIHsKKyAgICAgICAgLy8gVHJpZ2dlciBiaW5kaW5nIHJlcXVlc3RlZCBhbmQgYWxsb3dlZC4KKyAgICAgICAgbVRpbGVTZXJ2aWNlTWFuYWdlci5zZXRCaW5kUmVxdWVzdGVkKHRydWUpOworICAgICAgICBtVGlsZVNlcnZpY2VNYW5hZ2VyLnNldEJpbmRBbGxvd2VkKHRydWUpOworCisgICAgICAgIEFyZ3VtZW50Q2FwdG9yPEJvb2xlYW4+IGNhcHRvciA9IEFyZ3VtZW50Q2FwdG9yLmZvckNsYXNzKEJvb2xlYW4uY2xhc3MpOworICAgICAgICBNb2NraXRvLnZlcmlmeShtVGlsZUxpZmVjeWNsZSwgTW9ja2l0by50aW1lcygxKSkuc2V0QmluZFNlcnZpY2UoY2FwdG9yLmNhcHR1cmUoKSk7CisgICAgICAgIGFzc2VydFRydWUoKGJvb2xlYW4pIGNhcHRvci5nZXRWYWx1ZSgpKTsKKworICAgICAgICBtVGlsZVNlcnZpY2VNYW5hZ2VyLnNldEJpbmRSZXF1ZXN0ZWQoZmFsc2UpOworICAgICAgICBtVGlsZVNlcnZpY2VNYW5hZ2VyLmNhbGN1bGF0ZUJpbmRQcmlvcml0eSgwKTsKKyAgICAgICAgLy8gUHJpb3JpdHkgc2hvdWxkbid0IGRpc2FwcGVhciBhZnRlciB0aGUgcmVxdWVzdCBnb2VzIGF3YXkgaWYgd2UganVzdCBib3VuZCwgaW5zdGVhZAorICAgICAgICAvLyBpdCBzdGlja3MgYXJvdW5kIHRvIGF2b2lkIHRocmFzaGluZyBhIGJ1bmNoIG9mIHByb2Nlc3Nlcy4KKyAgICAgICAgYXNzZXJ0RXF1YWxzKEludGVnZXIuTUFYX1ZBTFVFIC0gMSwgbVRpbGVTZXJ2aWNlTWFuYWdlci5nZXRCaW5kUHJpb3JpdHkoKSk7CisKKyAgICAgICAgbVRpbGVTZXJ2aWNlTWFuYWdlci5zZXRCaW5kQWxsb3dlZChmYWxzZSk7CisgICAgICAgIGNhcHRvciA9IEFyZ3VtZW50Q2FwdG9yLmZvckNsYXNzKEJvb2xlYW4uY2xhc3MpOworICAgICAgICBNb2NraXRvLnZlcmlmeShtVGlsZUxpZmVjeWNsZSwgTW9ja2l0by50aW1lcygyKSkuc2V0QmluZFNlcnZpY2UoY2FwdG9yLmNhcHR1cmUoKSk7CisgICAgICAgIGFzc2VydEZhbHNlKChib29sZWFuKSBjYXB0b3IuZ2V0VmFsdWUoKSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL2V4dGVybmFsL1RpbGVTZXJ2aWNlc1Rlc3RzLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS90ZXN0cy9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvZXh0ZXJuYWwvVGlsZVNlcnZpY2VzVGVzdHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTNjZTg3Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL2V4dGVybmFsL1RpbGVTZXJ2aWNlc1Rlc3RzLmphdmEKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZQorICovCitwYWNrYWdlIGNvbS5hbmRyb2lkLnN5c3RlbXVpLnFzLmV4dGVybmFsOworCitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWU7CitpbXBvcnQgYW5kcm9pZC5vcy5Mb29wZXI7CitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuU3lzdWlUZXN0Q2FzZTsKK2ltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5zdGF0dXNiYXIucGhvbmUuUVNUaWxlSG9zdDsKK2ltcG9ydCBvcmcubW9ja2l0by5Bcmd1bWVudENhcHRvcjsKK2ltcG9ydCBvcmcubW9ja2l0by5Nb2NraXRvOworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKKworcHVibGljIGNsYXNzIFRpbGVTZXJ2aWNlc1Rlc3RzIGV4dGVuZHMgU3lzdWlUZXN0Q2FzZSB7CisgICAgcHJpdmF0ZSBzdGF0aWMgaW50IE5VTV9GQUtFUyA9IFRpbGVTZXJ2aWNlcy5ERUZBVUxUX01BWF9CT1VORCAqIDI7CisKKyAgICBwcml2YXRlIFRpbGVTZXJ2aWNlcyBtVGlsZVNlcnZpY2U7CisgICAgcHJpdmF0ZSBBcnJheUxpc3Q8VGlsZVNlcnZpY2VNYW5hZ2VyPiBtTWFuYWdlcnM7CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBzdXBlci5zZXRVcCgpOworICAgICAgICBtTWFuYWdlcnMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgICAgICAgUVNUaWxlSG9zdCBob3N0ID0gbmV3IFFTVGlsZUhvc3QobUNvbnRleHQsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsCisgICAgICAgICAgICAgICAgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCk7CisgICAgICAgIG1UaWxlU2VydmljZSA9IG5ldyBUZXN0VGlsZVNlcnZpY2VzKGhvc3QsIExvb3Blci5teUxvb3BlcigpKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0UmVjYWxjdWxhdGVCaW5kQWxsb3dhbmNlKCkgeworICAgICAgICAvLyBBZGQgc29tZSBmYWtlIHRpbGVzLgorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9GQUtFUzsgaSsrKSB7CisgICAgICAgICAgICBtVGlsZVNlcnZpY2UuZ2V0VGlsZVdyYXBwZXIoTW9ja2l0by5tb2NrKEN1c3RvbVRpbGUuY2xhc3MpKTsKKyAgICAgICAgfQorICAgICAgICBhc3NlcnRFcXVhbHMoTlVNX0ZBS0VTLCBtTWFuYWdlcnMuc2l6ZSgpKTsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9GQUtFUzsgaSsrKSB7CisgICAgICAgICAgICBNb2NraXRvLndoZW4obU1hbmFnZXJzLmdldChpKS5nZXRCaW5kUHJpb3JpdHkoKSkudGhlblJldHVybihpKTsKKyAgICAgICAgfQorICAgICAgICBtVGlsZVNlcnZpY2UucmVjYWxjdWxhdGVCaW5kQWxsb3dhbmNlKCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX0ZBS0VTOyBpKyspIHsKKyAgICAgICAgICAgIE1vY2tpdG8udmVyaWZ5KG1NYW5hZ2Vycy5nZXQoaSksIE1vY2tpdG8udGltZXMoMSkpLmNhbGN1bGF0ZUJpbmRQcmlvcml0eSgKKyAgICAgICAgICAgICAgICAgICAgTW9ja2l0by5hbnlMb25nKCkpOworICAgICAgICAgICAgQXJndW1lbnRDYXB0b3I8Qm9vbGVhbj4gY2FwdG9yID0gQXJndW1lbnRDYXB0b3IuZm9yQ2xhc3MoQm9vbGVhbi5jbGFzcyk7CisgICAgICAgICAgICBNb2NraXRvLnZlcmlmeShtTWFuYWdlcnMuZ2V0KGkpLCBNb2NraXRvLnRpbWVzKDEpKS5zZXRCaW5kQWxsb3dlZChjYXB0b3IuY2FwdHVyZSgpKTsKKworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCIiICsgaSArICJ0aCBzZXJ2aWNlIiwgaSA+PSAoTlVNX0ZBS0VTIC0gVGlsZVNlcnZpY2VzLkRFRkFVTFRfTUFYX0JPVU5EKSwKKyAgICAgICAgICAgICAgICAgICAgKGJvb2xlYW4pIGNhcHRvci5nZXRWYWx1ZSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRlc3RTZXRNZW1vcnlQcmVzc3VyZSgpIHsKKyAgICAgICAgdGVzdFJlY2FsY3VsYXRlQmluZEFsbG93YW5jZSgpOworICAgICAgICBtVGlsZVNlcnZpY2Uuc2V0TWVtb3J5UHJlc3N1cmUodHJ1ZSk7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fRkFLRVM7IGkrKykgeworICAgICAgICAgICAgQXJndW1lbnRDYXB0b3I8Qm9vbGVhbj4gY2FwdG9yID0gQXJndW1lbnRDYXB0b3IuZm9yQ2xhc3MoQm9vbGVhbi5jbGFzcyk7CisgICAgICAgICAgICBNb2NraXRvLnZlcmlmeShtTWFuYWdlcnMuZ2V0KGkpLCBNb2NraXRvLnRpbWVzKDIpKS5zZXRCaW5kQWxsb3dlZChjYXB0b3IuY2FwdHVyZSgpKTsKKworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCIiICsgaSArICJ0aCBzZXJ2aWNlIiwgaSA+PSAoTlVNX0ZBS0VTIC0gVGlsZVNlcnZpY2VzLlJFRFVDRURfTUFYX0JPVU5EKSwKKyAgICAgICAgICAgICAgICAgICAgKGJvb2xlYW4pIGNhcHRvci5nZXRWYWx1ZSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRlc3RDYWxjRmV3KCkgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IFRpbGVTZXJ2aWNlcy5ERUZBVUxUX01BWF9CT1VORCAtIDE7IGkrKykgeworICAgICAgICAgICAgbVRpbGVTZXJ2aWNlLmdldFRpbGVXcmFwcGVyKE1vY2tpdG8ubW9jayhDdXN0b21UaWxlLmNsYXNzKSk7CisgICAgICAgIH0KKyAgICAgICAgbVRpbGVTZXJ2aWNlLnJlY2FsY3VsYXRlQmluZEFsbG93YW5jZSgpOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgVGlsZVNlcnZpY2VzLkRFRkFVTFRfTUFYX0JPVU5EIC0gMTsgaSsrKSB7CisgICAgICAgICAgICAvLyBTaG91bGRuJ3QgZ2V0IGJpbmQgcHJpb2lyaXRpZXMgY2FsY3VsYXRlZCB3aGVuIHRoZXJlIGFyZSBsZXNzIHRoYW4gdGhlIG1heCBzZXJ2aWNlcy4KKyAgICAgICAgICAgIE1vY2tpdG8udmVyaWZ5KG1NYW5hZ2Vycy5nZXQoaSksIE1vY2tpdG8ubmV2ZXIoKSkuY2FsY3VsYXRlQmluZFByaW9yaXR5KAorICAgICAgICAgICAgICAgICAgICBNb2NraXRvLmFueUxvbmcoKSk7CisKKyAgICAgICAgICAgIC8vIEFsbCBzaG91bGQgYmUgYm91bmQgc2luY2UgdGhlcmUgYXJlIGxlc3MgdGhhbiB0aGUgbWF4IHNlcnZpY2VzLgorICAgICAgICAgICAgQXJndW1lbnRDYXB0b3I8Qm9vbGVhbj4gY2FwdG9yID0gQXJndW1lbnRDYXB0b3IuZm9yQ2xhc3MoQm9vbGVhbi5jbGFzcyk7CisgICAgICAgICAgICBNb2NraXRvLnZlcmlmeShtTWFuYWdlcnMuZ2V0KGkpLCBNb2NraXRvLnRpbWVzKDEpKS5zZXRCaW5kQWxsb3dlZChjYXB0b3IuY2FwdHVyZSgpKTsKKworICAgICAgICAgICAgYXNzZXJ0VHJ1ZShjYXB0b3IuZ2V0VmFsdWUoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGNsYXNzIFRlc3RUaWxlU2VydmljZXMgZXh0ZW5kcyBUaWxlU2VydmljZXMgeworICAgICAgICBwdWJsaWMgVGVzdFRpbGVTZXJ2aWNlcyhRU1RpbGVIb3N0IGhvc3QsIExvb3BlciBsb29wZXIpIHsKKyAgICAgICAgICAgIHN1cGVyKGhvc3QsIGxvb3Blcik7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHJvdGVjdGVkIFRpbGVTZXJ2aWNlTWFuYWdlciBvbkNyZWF0ZVRpbGVTZXJ2aWNlKENvbXBvbmVudE5hbWUgY29tcG9uZW50KSB7CisgICAgICAgICAgICBUaWxlU2VydmljZU1hbmFnZXIgbWFuYWdlciA9IE1vY2tpdG8ubW9jayhUaWxlU2VydmljZU1hbmFnZXIuY2xhc3MpOworICAgICAgICAgICAgbU1hbmFnZXJzLmFkZChtYW5hZ2VyKTsKKyAgICAgICAgICAgIHJldHVybiBtYW5hZ2VyOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvYXBwd2lkZ2V0L2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FwcHdpZGdldC9BcHBXaWRnZXRTZXJ2aWNlSW1wbC5qYXZhIGIvc2VydmljZXMvYXBwd2lkZ2V0L2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FwcHdpZGdldC9BcHBXaWRnZXRTZXJ2aWNlSW1wbC5qYXZhCmluZGV4IGRmMThkM2UuLjZmOGY4ZWIgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2FwcHdpZGdldC9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hcHB3aWRnZXQvQXBwV2lkZ2V0U2VydmljZUltcGwuamF2YQorKysgYi9zZXJ2aWNlcy9hcHB3aWRnZXQvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYXBwd2lkZ2V0L0FwcFdpZGdldFNlcnZpY2VJbXBsLmphdmEKQEAgLTE2LDYgKzE2LDcgQEAKIAogcGFja2FnZSBjb20uYW5kcm9pZC5zZXJ2ZXIuYXBwd2lkZ2V0OwogCitpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuYXBwLkFsYXJtTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmFwcC5BcHBHbG9iYWxzOwogaW1wb3J0IGFuZHJvaWQuYXBwLkFwcE9wc01hbmFnZXI7CkBAIC03Niw2ICs3Nyw3IEBACiBpbXBvcnQgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuUmVtb3RlVmlld3M7CiAKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLmFwcHdpZGdldC5JQXBwV2lkZ2V0SG9zdDsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5hcHB3aWRnZXQuSUFwcFdpZGdldFNlcnZpY2U7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwub3MuQmFja2dyb3VuZFRocmVhZDsKQEAgLTgzLDcgKzg1LDYgQEAKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLkZhc3RYbWxTZXJpYWxpemVyOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLndpZGdldC5JUmVtb3RlVmlld3NBZGFwdGVyQ29ubmVjdGlvbjsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC53aWRnZXQuSVJlbW90ZVZpZXdzRmFjdG9yeTsKLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SOwogaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5Mb2NhbFNlcnZpY2VzOwogaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5XaWRnZXRCYWNrdXBQcm92aWRlcjsKIApAQCAtMTM5LDggKzE0MCwxMCBAQAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDVVJSRU5UX1ZFUlNJT04gPSAxOwogCiAgICAgcHJpdmF0ZSBmaW5hbCBCcm9hZGNhc3RSZWNlaXZlciBtQnJvYWRjYXN0UmVjZWl2ZXIgPSBuZXcgQnJvYWRjYXN0UmVjZWl2ZXIoKSB7CisgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwdWJsaWMgdm9pZCBvblJlY2VpdmUoQ29udGV4dCBjb250ZXh0LCBJbnRlbnQgaW50ZW50KSB7Ci0gICAgICAgICAgICBTdHJpbmcgYWN0aW9uID0gaW50ZW50LmdldEFjdGlvbigpOworICAgICAgICAgICAgZmluYWwgU3RyaW5nIGFjdGlvbiA9IGludGVudC5nZXRBY3Rpb24oKTsKKyAgICAgICAgICAgIGZpbmFsIGludCB1c2VySWQgPSBpbnRlbnQuZ2V0SW50RXh0cmEoSW50ZW50LkVYVFJBX1VTRVJfSEFORExFLCBVc2VySGFuZGxlLlVTRVJfTlVMTCk7CiAKICAgICAgICAgICAgIGlmIChERUJVRykgewogICAgICAgICAgICAgICAgIFNsb2cuaShUQUcsICJSZWNlaXZlZCBicm9hZGNhc3Q6ICIgKyBhY3Rpb24pOwpAQCAtMTQ4LDIzICsxNTEsMTYgQEAKIAogICAgICAgICAgICAgaWYgKEludGVudC5BQ1RJT05fQ09ORklHVVJBVElPTl9DSEFOR0VELmVxdWFscyhhY3Rpb24pKSB7CiAgICAgICAgICAgICAgICAgb25Db25maWd1cmF0aW9uQ2hhbmdlZCgpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChJbnRlbnQuQUNUSU9OX1VTRVJfU1RBUlRFRC5lcXVhbHMoYWN0aW9uKSkgewotICAgICAgICAgICAgICAgIG9uVXNlclN0YXJ0ZWQoaW50ZW50LmdldEludEV4dHJhKEludGVudC5FWFRSQV9VU0VSX0hBTkRMRSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJIYW5kbGUuVVNFUl9OVUxMKSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKEludGVudC5BQ1RJT05fVVNFUl9VTkxPQ0tFRC5lcXVhbHMoYWN0aW9uKSkgeworICAgICAgICAgICAgICAgIG9uVXNlclVubG9ja2VkKHVzZXJJZCk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKEludGVudC5BQ1RJT05fVVNFUl9TVE9QUEVELmVxdWFscyhhY3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAgb25Vc2VyU3RvcHBlZChpbnRlbnQuZ2V0SW50RXh0cmEoSW50ZW50LkVYVFJBX1VTRVJfSEFORExFLAotICAgICAgICAgICAgICAgICAgICAgICAgVXNlckhhbmRsZS5VU0VSX05VTEwpKTsKKyAgICAgICAgICAgICAgICBvblVzZXJTdG9wcGVkKHVzZXJJZCk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKEludGVudC5BQ1RJT05fVVNFUl9TV0lUQ0hFRC5lcXVhbHMoYWN0aW9uKSkgewotICAgICAgICAgICAgICAgIHJlZnJlc2hQcm9maWxlV2lkZ2V0c01hc2tlZFN0YXRlKGludGVudC5nZXRJbnRFeHRyYShJbnRlbnQuRVhUUkFfVVNFUl9IQU5ETEUsCi0gICAgICAgICAgICAgICAgICAgICAgICBVc2VySGFuZGxlLlVTRVJfTlVMTCkpOworICAgICAgICAgICAgICAgIHJlZnJlc2hQcm9maWxlV2lkZ2V0c01hc2tlZFN0YXRlKHVzZXJJZCk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKEludGVudC5BQ1RJT05fTUFOQUdFRF9QUk9GSUxFX0FWQUlMQUJJTElUWV9DSEFOR0VELmVxdWFscyhhY3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAgVXNlckhhbmRsZSBwcm9maWxlID0gKFVzZXJIYW5kbGUpaW50ZW50LmdldFBhcmNlbGFibGVFeHRyYShJbnRlbnQuRVhUUkFfVVNFUik7Ci0gICAgICAgICAgICAgICAgaWYgKHByb2ZpbGUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICByZWZyZXNoV2lkZ2V0TWFza2VkU3RhdGUocHJvZmlsZS5nZXRJZGVudGlmaWVyKCkpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZWZyZXNoV2lkZ2V0TWFza2VkU3RhdGUodXNlcklkKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgb25QYWNrYWdlQnJvYWRjYXN0UmVjZWl2ZWQoaW50ZW50LCBpbnRlbnQuZ2V0SW50RXh0cmEoCi0gICAgICAgICAgICAgICAgICAgICAgICBJbnRlbnQuRVhUUkFfVVNFUl9IQU5ETEUsIFVzZXJIYW5kbGUuVVNFUl9OVUxMKSk7CisgICAgICAgICAgICAgICAgb25QYWNrYWdlQnJvYWRjYXN0UmVjZWl2ZWQoaW50ZW50LCB1c2VySWQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfTsKQEAgLTI2Myw3ICsyNTksNyBAQAogICAgICAgICAgICAgICAgIHNkRmlsdGVyLCBudWxsLCBudWxsKTsKIAogICAgICAgICBJbnRlbnRGaWx0ZXIgdXNlckZpbHRlciA9IG5ldyBJbnRlbnRGaWx0ZXIoKTsKLSAgICAgICAgdXNlckZpbHRlci5hZGRBY3Rpb24oSW50ZW50LkFDVElPTl9VU0VSX1NUQVJURUQpOworICAgICAgICB1c2VyRmlsdGVyLmFkZEFjdGlvbihJbnRlbnQuQUNUSU9OX1VTRVJfVU5MT0NLRUQpOwogICAgICAgICB1c2VyRmlsdGVyLmFkZEFjdGlvbihJbnRlbnQuQUNUSU9OX1VTRVJfU1RPUFBFRCk7CiAgICAgICAgIHVzZXJGaWx0ZXIuYWRkQWN0aW9uKEludGVudC5BQ1RJT05fVVNFUl9TV0lUQ0hFRCk7CiAgICAgICAgIG1Db250ZXh0LnJlZ2lzdGVyUmVjZWl2ZXJBc1VzZXIobUJyb2FkY2FzdFJlY2VpdmVyLCBVc2VySGFuZGxlLkFMTCwKQEAgLTM0MCw2ICszMzYsOCBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBvblBhY2thZ2VCcm9hZGNhc3RSZWNlaXZlZChJbnRlbnQgaW50ZW50LCBpbnQgdXNlcklkKSB7CisgICAgICAgIGlmICghbVVzZXJNYW5hZ2VyLmlzVXNlclVubG9ja2VkKHVzZXJJZCkpIHJldHVybjsKKwogICAgICAgICBmaW5hbCBTdHJpbmcgYWN0aW9uID0gaW50ZW50LmdldEFjdGlvbigpOwogICAgICAgICBib29sZWFuIGFkZGVkID0gZmFsc2U7CiAgICAgICAgIGJvb2xlYW4gY2hhbmdlZCA9IGZhbHNlOwpAQCAtNDE5LDkgKzQxNyw3IEBACiAgICAgICogUmVmcmVzaCB0aGUgbWFza2VkIHN0YXRlIGZvciBhbGwgcHJvZmlsZXMgdW5kZXIgdGhlIGdpdmVuIHVzZXIuCiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIHJlZnJlc2hQcm9maWxlV2lkZ2V0c01hc2tlZFN0YXRlKGludCB1c2VySWQpIHsKLSAgICAgICAgaWYgKHVzZXJJZCA9PSBVc2VySGFuZGxlLlVTRVJfTlVMTCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgICAgIGlmICghbVVzZXJNYW5hZ2VyLmlzVXNlclVubG9ja2VkKHVzZXJJZCkpIHJldHVybjsKICAgICAgICAgTGlzdDxVc2VySW5mbz4gcHJvZmlsZXMgPSBtVXNlck1hbmFnZXIuZ2V0RW5hYmxlZFByb2ZpbGVzKHVzZXJJZCk7CiAgICAgICAgIGlmIChwcm9maWxlcyAhPSBudWxsKSB7CiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHByb2ZpbGVzLnNpemUoKTsgaSsrKSB7CkBAIC00MzUsNiArNDMxLDcgQEAKICAgICAgKiBNYXNrL3VubWFzayB3aWRnZXRzIGluIHRoZSBnaXZlbiBwcm9maWxlLCBkZXBlbmRpbmcgb24gdGhlIHF1aWV0IHN0YXRlIG9mIHRoZSBwcm9maWxlLgogICAgICAqLwogICAgIHByaXZhdGUgdm9pZCByZWZyZXNoV2lkZ2V0TWFza2VkU3RhdGUoaW50IHByb2ZpbGVJZCkgeworICAgICAgICBpZiAoIW1Vc2VyTWFuYWdlci5pc1VzZXJVbmxvY2tlZChwcm9maWxlSWQpKSByZXR1cm47CiAgICAgICAgIGZpbmFsIGxvbmcgaWRlbnRpdHkgPSBCaW5kZXIuY2xlYXJDYWxsaW5nSWRlbnRpdHkoKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFVzZXJJbmZvIHVzZXIgID0gbVVzZXJNYW5hZ2VyLmdldFVzZXJJbmZvKHByb2ZpbGVJZCk7CkBAIC00ODQsNiArNDgxLDExIEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGVuc3VyZUdyb3VwU3RhdGVMb2FkZWRMb2NrZWQoaW50IHVzZXJJZCkgeworICAgICAgICBpZiAoIW1Vc2VyTWFuYWdlci5pc1VzZXJVbmxvY2tlZCh1c2VySWQpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAiVXNlciAiICsgdXNlcklkICsgIiBtdXN0IGJlIHVubG9ja2VkIGZvciB3aWRnZXRzIHRvIGJlIGF2YWlsYWJsZSIpOworICAgICAgICB9CisKICAgICAgICAgZmluYWwgaW50W10gcHJvZmlsZUlkcyA9IG1TZWN1cml0eVBvbGljeS5nZXRFbmFibGVkR3JvdXBQcm9maWxlSWRzKHVzZXJJZCk7CiAKICAgICAgICAgLy8gQ2FyZWZ1bCBsYWQsIHdlIG1heSBoYXZlIGFscmVhZHkgbG9hZGVkIHRoZSBzdGF0ZSBmb3Igc29tZQpAQCAtMjMyMSw3ICsyMzIzLDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBvblVzZXJTdGFydGVkKGludCB1c2VySWQpIHsKKyAgICBwcml2YXRlIHZvaWQgb25Vc2VyVW5sb2NrZWQoaW50IHVzZXJJZCkgewogICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CiAgICAgICAgICAgICBlbnN1cmVHcm91cFN0YXRlTG9hZGVkTG9ja2VkKHVzZXJJZCk7CiAKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvQmx1ZXRvb3RoTWFuYWdlclNlcnZpY2UuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvQmx1ZXRvb3RoTWFuYWdlclNlcnZpY2UuamF2YQppbmRleCBmMzI5Y2ZmLi4zYzkxNDIzIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL0JsdWV0b290aE1hbmFnZXJTZXJ2aWNlLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9CbHVldG9vdGhNYW5hZ2VyU2VydmljZS5qYXZhCkBAIC0yNjgsNyArMjY4LDcgQEAKIAogICAgICAgICBpbnQgc3lzVWlVaWQgPSAtMTsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHN5c1VpVWlkID0gbUNvbnRleHQuZ2V0UGFja2FnZU1hbmFnZXIoKS5nZXRQYWNrYWdlVWlkKCJjb20uYW5kcm9pZC5zeXN0ZW11aSIsCisgICAgICAgICAgICBzeXNVaVVpZCA9IG1Db250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCkuZ2V0UGFja2FnZVVpZEFzVXNlcigiY29tLmFuZHJvaWQuc3lzdGVtdWkiLAogICAgICAgICAgICAgICAgICAgICBVc2VySGFuZGxlLlVTRVJfU1lTVEVNKTsKICAgICAgICAgfSBjYXRjaCAoUGFja2FnZU1hbmFnZXIuTmFtZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIC8vIFNvbWUgcGxhdGZvcm1zLCBzdWNoIGFzIHdlYXJhYmxlcyBkbyBub3QgaGF2ZSBhIHN5c3RlbSB1aS4KZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvRGV2aWNlSWRsZUNvbnRyb2xsZXIuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvRGV2aWNlSWRsZUNvbnRyb2xsZXIuamF2YQppbmRleCBmNWVkODNlLi44ZDcwN2Q2IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL0RldmljZUlkbGVDb250cm9sbGVyLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9EZXZpY2VJZGxlQ29udHJvbGxlci5qYXZhCkBAIC0xMzI2LDcgKzEzMjYsNyBAQAogICAgIHZvaWQgYWRkUG93ZXJTYXZlVGVtcFdoaXRlbGlzdEFwcEludGVybmFsKGludCBjYWxsaW5nVWlkLCBTdHJpbmcgcGFja2FnZU5hbWUsCiAgICAgICAgICAgICBsb25nIGR1cmF0aW9uLCBpbnQgdXNlcklkLCBib29sZWFuIHN5bmMsIFN0cmluZyByZWFzb24pIHsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGludCB1aWQgPSBnZXRDb250ZXh0KCkuZ2V0UGFja2FnZU1hbmFnZXIoKS5nZXRQYWNrYWdlVWlkKHBhY2thZ2VOYW1lLCB1c2VySWQpOworICAgICAgICAgICAgaW50IHVpZCA9IGdldENvbnRleHQoKS5nZXRQYWNrYWdlTWFuYWdlcigpLmdldFBhY2thZ2VVaWRBc1VzZXIocGFja2FnZU5hbWUsIHVzZXJJZCk7CiAgICAgICAgICAgICBpbnQgYXBwSWQgPSBVc2VySGFuZGxlLmdldEFwcElkKHVpZCk7CiAgICAgICAgICAgICBhZGRQb3dlclNhdmVUZW1wV2hpdGVsaXN0QXBwRGlyZWN0SW50ZXJuYWwoY2FsbGluZ1VpZCwgYXBwSWQsIGR1cmF0aW9uLCBzeW5jLCByZWFzb24pOwogICAgICAgICB9IGNhdGNoIChOYW1lTm90Rm91bmRFeGNlcHRpb24gZSkgewpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9Nb3VudFNlcnZpY2UuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvTW91bnRTZXJ2aWNlLmphdmEKaW5kZXggMTg0Zjg5MC4uNmNjY2YzOCAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9Nb3VudFNlcnZpY2UuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL01vdW50U2VydmljZS5qYXZhCkBAIC0yNCw2ICsyNCw3IEBACiBpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuWG1sVXRpbHMud3JpdGVJbnRBdHRyaWJ1dGU7CiBpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuWG1sVXRpbHMud3JpdGVMb25nQXR0cmlidXRlOwogaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLlhtbFV0aWxzLndyaXRlU3RyaW5nQXR0cmlidXRlOworCiBpbXBvcnQgc3RhdGljIG9yZy54bWxwdWxsLnYxLlhtbFB1bGxQYXJzZXIuRU5EX0RPQ1VNRU5UOwogaW1wb3J0IHN0YXRpYyBvcmcueG1scHVsbC52MS5YbWxQdWxsUGFyc2VyLlNUQVJUX1RBRzsKIApAQCAtODksOSArOTAsNiBAQAogaW1wb3J0IGFuZHJvaWQudXRpbC5UaW1lVXRpbHM7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlhtbDsKIAotaW1wb3J0IGxpYmNvcmUuaW8uSW9VdGlsczsKLWltcG9ydCBsaWJjb3JlLnV0aWwuRW1wdHlBcnJheTsKLQogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLmFubm90YXRpb25zLkd1YXJkZWRCeTsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5hcHAuSU1lZGlhQ29udGFpbmVyU2VydmljZTsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5vcy5Tb21lQXJnczsKQEAgLTEwNiw2ICsxMDQsOSBAQAogaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5OYXRpdmVEYWVtb25Db25uZWN0b3IuU2Vuc2l0aXZlQXJnOwogaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5wbS5QYWNrYWdlTWFuYWdlclNlcnZpY2U7CiAKK2ltcG9ydCBsaWJjb3JlLmlvLklvVXRpbHM7CitpbXBvcnQgbGliY29yZS51dGlsLkVtcHR5QXJyYXk7CisKIGltcG9ydCBvcmcueG1scHVsbC52MS5YbWxQdWxsUGFyc2VyOwogaW1wb3J0IG9yZy54bWxwdWxsLnYxLlhtbFB1bGxQYXJzZXJFeGNlcHRpb247CiBpbXBvcnQgb3JnLnhtbHB1bGwudjEuWG1sU2VyaWFsaXplcjsKQEAgLTgwNyw4ICs4MDgsOCBAQAogICAgICAgICAgICAgICAgIC8vIFN5c3RlbSB1c2VyIGRvZXMgbm90IGhhdmUgbWVkaWEgcHJvdmlkZXIsIHNvIHNraXAuCiAgICAgICAgICAgICAgICAgaWYgKHVzZXIuaXNTeXN0ZW1Pbmx5KCkpIGNvbnRpbnVlOwogCi0gICAgICAgICAgICAgICAgZmluYWwgUHJvdmlkZXJJbmZvIHByb3ZpZGVyID0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1QbXMucmVzb2x2ZUNvbnRlbnRQcm92aWRlcihNZWRpYVN0b3JlLkFVVEhPUklUWSwgMCwgdXNlci5pZCk7CisgICAgICAgICAgICAgICAgZmluYWwgUHJvdmlkZXJJbmZvIHByb3ZpZGVyID0gbVBtcy5yZXNvbHZlQ29udGVudFByb3ZpZGVyKE1lZGlhU3RvcmUuQVVUSE9SSVRZLAorICAgICAgICAgICAgICAgICAgICAgICAgUGFja2FnZU1hbmFnZXIuTUFUQ0hfRU5DUllQVElPTl9BV0FSRV9BTkRfVU5BV0FSRSwgdXNlci5pZCk7CiAgICAgICAgICAgICAgICAgaWYgKHByb3ZpZGVyICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgZmluYWwgSUFjdGl2aXR5TWFuYWdlciBhbSA9IEFjdGl2aXR5TWFuYWdlck5hdGl2ZS5nZXREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICAgICAgIHRyeSB7CkBAIC0yODEyLDkgKzI4MTMsMzMgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgUGFyY2VsRmlsZURlc2NyaXB0b3IgbW91bnRBcHBGdXNlKFN0cmluZyBuYW1lKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETzogSW52b2tlIHZvbGQgdG8gbW91bnQgYXBwIGZ1c2UuCi0gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOworICAgIHB1YmxpYyBQYXJjZWxGaWxlRGVzY3JpcHRvciBtb3VudEFwcEZ1c2UoZmluYWwgU3RyaW5nIG5hbWUpIHRocm93cyBSZW1vdGVFeGNlcHRpb24geworICAgICAgICB0cnkgeworICAgICAgICAgICAgZmluYWwgaW50IHVpZCA9IEJpbmRlci5nZXRDYWxsaW5nVWlkKCk7CisgICAgICAgICAgICBmaW5hbCBOYXRpdmVEYWVtb25FdmVudCBldmVudCA9CisgICAgICAgICAgICAgICAgICAgIG1Db25uZWN0b3IuZXhlY3V0ZSgiYXBwZnVzZSIsICJtb3VudCIsIHVpZCwgbmFtZSk7CisgICAgICAgICAgICBpZiAoZXZlbnQuZ2V0RmlsZURlc2NyaXB0b3JzKCkgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZW1vdGVFeGNlcHRpb24oIkFwcEZ1c2UgRkQgZnJvbSB2b2xkIGlzIG51bGwuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gUGFyY2VsRmlsZURlc2NyaXB0b3IuZnJvbUZkKAorICAgICAgICAgICAgICAgICAgICBldmVudC5nZXRGaWxlRGVzY3JpcHRvcnMoKVswXSwKKyAgICAgICAgICAgICAgICAgICAgbUhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgIG5ldyBQYXJjZWxGaWxlRGVzY3JpcHRvci5PbkNsb3NlTGlzdGVuZXIoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xvc2UoSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIE5hdGl2ZURhZW1vbkV2ZW50IGV2ZW50ID0gbUNvbm5lY3Rvci5leGVjdXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcHBmdXNlIiwgInVubW91bnQiLCB1aWQsIG5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKE5hdGl2ZURhZW1vbkNvbm5lY3RvckV4Y2VwdGlvbiB1bm1vdW50RXhjZXB0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIkZhaWxlZCB0byB1bm1vdW50IGFwcGZ1c2UuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfSBjYXRjaCAoTmF0aXZlRGFlbW9uQ29ubmVjdG9yRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHRocm93IGUucmV0aHJvd0FzUGFyY2VsYWJsZUV4Y2VwdGlvbigpOworICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVtb3RlRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIEBPdmVycmlkZQpAQCAtMzU5MiwxMiArMzYxNywxOCBAQAogICAgICAgICB9CiAKICAgICAgICAgcHcucHJpbnRsbigpOwotICAgICAgICBwdy5wcmludGxuKCJtQ29ubmVjdGlvbjoiKTsKKyAgICAgICAgcHcucHJpbnRsbigibUNvbm5lY3RvcjoiKTsKICAgICAgICAgcHcuaW5jcmVhc2VJbmRlbnQoKTsKICAgICAgICAgbUNvbm5lY3Rvci5kdW1wKGZkLCBwdywgYXJncyk7CiAgICAgICAgIHB3LmRlY3JlYXNlSW5kZW50KCk7CiAKICAgICAgICAgcHcucHJpbnRsbigpOworICAgICAgICBwdy5wcmludGxuKCJtQ3J5cHRDb25uZWN0b3I6Iik7CisgICAgICAgIHB3LmluY3JlYXNlSW5kZW50KCk7CisgICAgICAgIG1DcnlwdENvbm5lY3Rvci5kdW1wKGZkLCBwdywgYXJncyk7CisgICAgICAgIHB3LmRlY3JlYXNlSW5kZW50KCk7CisKKyAgICAgICAgcHcucHJpbnRsbigpOwogICAgICAgICBwdy5wcmludCgiTGFzdCBtYWludGVuYW5jZTogIik7CiAgICAgICAgIHB3LnByaW50bG4oVGltZVV0aWxzLmZvcm1hdEZvckxvZ2dpbmcobUxhc3RNYWludGVuYW5jZSkpOwogICAgIH0KZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvUGVyc2lzdGVudERhdGFCbG9ja1NlcnZpY2UuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvUGVyc2lzdGVudERhdGFCbG9ja1NlcnZpY2UuamF2YQppbmRleCBlOGI5MGQ4Li4xMjQ5YzhjIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL1BlcnNpc3RlbnREYXRhQmxvY2tTZXJ2aWNlLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9QZXJzaXN0ZW50RGF0YUJsb2NrU2VydmljZS5qYXZhCkBAIC05NCw3ICs5NCw3IEBACiAgICAgICAgIFBhY2thZ2VNYW5hZ2VyIHBtID0gbUNvbnRleHQuZ2V0UGFja2FnZU1hbmFnZXIoKTsKICAgICAgICAgaW50IGFsbG93ZWRVaWQgPSAtMTsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGFsbG93ZWRVaWQgPSBwbS5nZXRQYWNrYWdlVWlkKGFsbG93ZWRQYWNrYWdlLCB1c2VySGFuZGxlKTsKKyAgICAgICAgICAgIGFsbG93ZWRVaWQgPSBwbS5nZXRQYWNrYWdlVWlkQXNVc2VyKGFsbG93ZWRQYWNrYWdlLCB1c2VySGFuZGxlKTsKICAgICAgICAgfSBjYXRjaCAoUGFja2FnZU1hbmFnZXIuTmFtZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIC8vIG5vdCBleHBlY3RlZAogICAgICAgICAgICAgU2xvZy5lKFRBRywgIm5vdCBhYmxlIHRvIGZpbmQgcGFja2FnZSAiICsgYWxsb3dlZFBhY2thZ2UsIGUpOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9TeXN0ZW1Db25maWcuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvU3lzdGVtQ29uZmlnLmphdmEKaW5kZXggODYxODNhZi4uNGRjNDZhYyAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9TeXN0ZW1Db25maWcuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL1N5c3RlbUNvbmZpZy5qYXZhCkBAIC00OCw2ICs0OCwxMyBAQAogCiAgICAgc3RhdGljIFN5c3RlbUNvbmZpZyBzSW5zdGFuY2U7CiAKKyAgICAvLyBwZXJtaXNzaW9uIGZsYWcsIGRldGVybWluZXMgd2hpY2ggdHlwZXMgb2YgY29uZmlndXJhdGlvbiBhcmUgYWxsb3dlZCB0byBiZSByZWFkCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEFMTE9XX0ZFQVRVUkVTID0gMHgwMTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQUxMT1dfTElCUyA9IDB4MDI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEFMTE9XX1BFUk1JU1NJT05TID0gMHgwNDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQUxMT1dfQVBQX0NPTkZJR1MgPSAweDA4OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBBTExPV19BTEwgPSB+MDsKKwogICAgIC8vIEdyb3VwLWlkcyB0aGF0IGFyZSBnaXZlbiB0byBhbGwgcGFja2FnZXMgYXMgcmVhZCBmcm9tIGV0Yy9wZXJtaXNzaW9ucy8qLnhtbC4KICAgICBpbnRbXSBtR2xvYmFsR2lkczsKIApAQCAtMTYxLDIxICsxNjgsMjcgQEAKICAgICBTeXN0ZW1Db25maWcoKSB7CiAgICAgICAgIC8vIFJlYWQgY29uZmlndXJhdGlvbiBmcm9tIHN5c3RlbQogICAgICAgICByZWFkUGVybWlzc2lvbnMoRW52aXJvbm1lbnQuYnVpbGRQYXRoKAotICAgICAgICAgICAgICAgIEVudmlyb25tZW50LmdldFJvb3REaXJlY3RvcnkoKSwgImV0YyIsICJzeXNjb25maWciKSwgZmFsc2UpOworICAgICAgICAgICAgICAgIEVudmlyb25tZW50LmdldFJvb3REaXJlY3RvcnkoKSwgImV0YyIsICJzeXNjb25maWciKSwgQUxMT1dfQUxMKTsKICAgICAgICAgLy8gUmVhZCBjb25maWd1cmF0aW9uIGZyb20gdGhlIG9sZCBwZXJtaXNzaW9ucyBkaXIKICAgICAgICAgcmVhZFBlcm1pc3Npb25zKEVudmlyb25tZW50LmJ1aWxkUGF0aCgKLSAgICAgICAgICAgICAgICBFbnZpcm9ubWVudC5nZXRSb290RGlyZWN0b3J5KCksICJldGMiLCAicGVybWlzc2lvbnMiKSwgZmFsc2UpOwotICAgICAgICAvLyBPbmx5IHJlYWQgZmVhdHVyZXMgZnJvbSBPRU0gY29uZmlnCisgICAgICAgICAgICAgICAgRW52aXJvbm1lbnQuZ2V0Um9vdERpcmVjdG9yeSgpLCAiZXRjIiwgInBlcm1pc3Npb25zIiksIEFMTE9XX0FMTCk7CisgICAgICAgIC8vIEFsbG93IE9ETSB0byBjdXN0b21pemUgc3lzdGVtIGNvbmZpZ3MgYXJvdW5kIGxpYnMsIGZlYXR1cmVzIGFuZCBhcHBzCisgICAgICAgIGludCBvZG1QZXJtaXNzaW9uRmxhZyA9IEFMTE9XX0xJQlMgfCBBTExPV19GRUFUVVJFUyB8IEFMTE9XX0FQUF9DT05GSUdTOwogICAgICAgICByZWFkUGVybWlzc2lvbnMoRW52aXJvbm1lbnQuYnVpbGRQYXRoKAotICAgICAgICAgICAgICAgIEVudmlyb25tZW50LmdldE9lbURpcmVjdG9yeSgpLCAiZXRjIiwgInN5c2NvbmZpZyIpLCB0cnVlKTsKKyAgICAgICAgICAgICAgICBFbnZpcm9ubWVudC5nZXRPZG1EaXJlY3RvcnkoKSwgImV0YyIsICJzeXNjb25maWciKSwgb2RtUGVybWlzc2lvbkZsYWcpOwogICAgICAgICByZWFkUGVybWlzc2lvbnMoRW52aXJvbm1lbnQuYnVpbGRQYXRoKAotICAgICAgICAgICAgICAgIEVudmlyb25tZW50LmdldE9lbURpcmVjdG9yeSgpLCAiZXRjIiwgInBlcm1pc3Npb25zIiksIHRydWUpOworICAgICAgICAgICAgICAgIEVudmlyb25tZW50LmdldE9kbURpcmVjdG9yeSgpLCAiZXRjIiwgInBlcm1pc3Npb25zIiksIG9kbVBlcm1pc3Npb25GbGFnKTsKKyAgICAgICAgLy8gT25seSBhbGxvdyBPRU0gdG8gY3VzdG9taXplIGZlYXR1cmVzCisgICAgICAgIHJlYWRQZXJtaXNzaW9ucyhFbnZpcm9ubWVudC5idWlsZFBhdGgoCisgICAgICAgICAgICAgICAgRW52aXJvbm1lbnQuZ2V0T2VtRGlyZWN0b3J5KCksICJldGMiLCAic3lzY29uZmlnIiksIEFMTE9XX0ZFQVRVUkVTKTsKKyAgICAgICAgcmVhZFBlcm1pc3Npb25zKEVudmlyb25tZW50LmJ1aWxkUGF0aCgKKyAgICAgICAgICAgICAgICBFbnZpcm9ubWVudC5nZXRPZW1EaXJlY3RvcnkoKSwgImV0YyIsICJwZXJtaXNzaW9ucyIpLCBBTExPV19GRUFUVVJFUyk7CiAgICAgfQogCi0gICAgdm9pZCByZWFkUGVybWlzc2lvbnMoRmlsZSBsaWJyYXJ5RGlyLCBib29sZWFuIG9ubHlGZWF0dXJlcykgeworICAgIHZvaWQgcmVhZFBlcm1pc3Npb25zKEZpbGUgbGlicmFyeURpciwgaW50IHBlcm1pc3Npb25GbGFnKSB7CiAgICAgICAgIC8vIFJlYWQgcGVybWlzc2lvbnMgZnJvbSBnaXZlbiBkaXJlY3RvcnkuCiAgICAgICAgIGlmICghbGlicmFyeURpci5leGlzdHMoKSB8fCAhbGlicmFyeURpci5pc0RpcmVjdG9yeSgpKSB7Ci0gICAgICAgICAgICBpZiAoIW9ubHlGZWF0dXJlcykgeworICAgICAgICAgICAgaWYgKHBlcm1pc3Npb25GbGFnID09IEFMTE9XX0FMTCkgewogICAgICAgICAgICAgICAgIFNsb2cudyhUQUcsICJObyBkaXJlY3RvcnkgIiArIGxpYnJhcnlEaXIgKyAiLCBza2lwcGluZyIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjAzLDE2ICsyMTYsMTYgQEAKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmVhZFBlcm1pc3Npb25zRnJvbVhtbChmLCBvbmx5RmVhdHVyZXMpOworICAgICAgICAgICAgcmVhZFBlcm1pc3Npb25zRnJvbVhtbChmLCBwZXJtaXNzaW9uRmxhZyk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBSZWFkIHBsYXRmb3JtIHBlcm1pc3Npb25zIGxhc3Qgc28gaXQgd2lsbCB0YWtlIHByZWNlZGVuY2UKICAgICAgICAgaWYgKHBsYXRmb3JtRmlsZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZWFkUGVybWlzc2lvbnNGcm9tWG1sKHBsYXRmb3JtRmlsZSwgb25seUZlYXR1cmVzKTsKKyAgICAgICAgICAgIHJlYWRQZXJtaXNzaW9uc0Zyb21YbWwocGxhdGZvcm1GaWxlLCBwZXJtaXNzaW9uRmxhZyk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgcmVhZFBlcm1pc3Npb25zRnJvbVhtbChGaWxlIHBlcm1GaWxlLCBib29sZWFuIG9ubHlGZWF0dXJlcykgeworICAgIHByaXZhdGUgdm9pZCByZWFkUGVybWlzc2lvbnNGcm9tWG1sKEZpbGUgcGVybUZpbGUsIGludCBwZXJtaXNzaW9uRmxhZykgewogICAgICAgICBGaWxlUmVhZGVyIHBlcm1SZWFkZXIgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgcGVybVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKHBlcm1GaWxlKTsKQEAgLTI0Miw2ICsyNTUsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICsgIjogZm91bmQgIiArIHBhcnNlci5nZXROYW1lKCkgKyAiLCBleHBlY3RlZCAncGVybWlzc2lvbnMnIG9yICdjb25maWcnIik7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGJvb2xlYW4gYWxsb3dBbGwgPSBwZXJtaXNzaW9uRmxhZyA9PSBBTExPV19BTEw7CisgICAgICAgICAgICBib29sZWFuIGFsbG93TGlicyA9IChwZXJtaXNzaW9uRmxhZyAmIEFMTE9XX0xJQlMpICE9IDA7CisgICAgICAgICAgICBib29sZWFuIGFsbG93RmVhdHVyZXMgPSAocGVybWlzc2lvbkZsYWcgJiBBTExPV19GRUFUVVJFUykgIT0gMDsKKyAgICAgICAgICAgIGJvb2xlYW4gYWxsb3dQZXJtaXNzaW9ucyA9IChwZXJtaXNzaW9uRmxhZyAmIEFMTE9XX1BFUk1JU1NJT05TKSAhPSAwOworICAgICAgICAgICAgYm9vbGVhbiBhbGxvd0FwcENvbmZpZ3MgPSAocGVybWlzc2lvbkZsYWcgJiBBTExPV19BUFBfQ09ORklHUykgIT0gMDsKICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgICAgICAgWG1sVXRpbHMubmV4dEVsZW1lbnQocGFyc2VyKTsKICAgICAgICAgICAgICAgICBpZiAocGFyc2VyLmdldEV2ZW50VHlwZSgpID09IFhtbFB1bGxQYXJzZXIuRU5EX0RPQ1VNRU5UKSB7CkBAIC0yNDksNyArMjY3LDcgQEAKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IHBhcnNlci5nZXROYW1lKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCJncm91cCIuZXF1YWxzKG5hbWUpICYmICFvbmx5RmVhdHVyZXMpIHsKKyAgICAgICAgICAgICAgICBpZiAoImdyb3VwIi5lcXVhbHMobmFtZSkgJiYgYWxsb3dBbGwpIHsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGdpZFN0ciA9IHBhcnNlci5nZXRBdHRyaWJ1dGVWYWx1ZShudWxsLCAiZ2lkIik7CiAgICAgICAgICAgICAgICAgICAgIGlmIChnaWRTdHIgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaW50IGdpZCA9IGFuZHJvaWQub3MuUHJvY2Vzcy5nZXRHaWRGb3JOYW1lKGdpZFN0cik7CkBAIC0yNjEsNyArMjc5LDcgQEAKIAogICAgICAgICAgICAgICAgICAgICBYbWxVdGlscy5za2lwQ3VycmVudFRhZyhwYXJzZXIpOwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCJwZXJtaXNzaW9uIi5lcXVhbHMobmFtZSkgJiYgIW9ubHlGZWF0dXJlcykgeworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoInBlcm1pc3Npb24iLmVxdWFscyhuYW1lKSAmJiBhbGxvd1Blcm1pc3Npb25zKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBwZXJtID0gcGFyc2VyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsICJuYW1lIik7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwZXJtID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFNsb2cudyhUQUcsICI8cGVybWlzc2lvbj4gd2l0aG91dCBuYW1lIGluICIgKyBwZXJtRmlsZSArICIgYXQgIgpAQCAtMjcyLDcgKzI5MCw3IEBACiAgICAgICAgICAgICAgICAgICAgIHBlcm0gPSBwZXJtLmludGVybigpOwogICAgICAgICAgICAgICAgICAgICByZWFkUGVybWlzc2lvbihwYXJzZXIsIHBlcm0pOwogCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgiYXNzaWduLXBlcm1pc3Npb24iLmVxdWFscyhuYW1lKSAmJiAhb25seUZlYXR1cmVzKSB7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgiYXNzaWduLXBlcm1pc3Npb24iLmVxdWFscyhuYW1lKSAmJiBhbGxvd1Blcm1pc3Npb25zKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBwZXJtID0gcGFyc2VyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsICJuYW1lIik7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwZXJtID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFNsb2cudyhUQUcsICI8YXNzaWduLXBlcm1pc3Npb24+IHdpdGhvdXQgbmFtZSBpbiAiICsgcGVybUZpbGUgKyAiIGF0ICIKQEAgLTMwNCw3ICszMjIsNyBAQAogICAgICAgICAgICAgICAgICAgICBwZXJtcy5hZGQocGVybSk7CiAgICAgICAgICAgICAgICAgICAgIFhtbFV0aWxzLnNraXBDdXJyZW50VGFnKHBhcnNlcik7CiAKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCJsaWJyYXJ5Ii5lcXVhbHMobmFtZSkgJiYgIW9ubHlGZWF0dXJlcykgeworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoImxpYnJhcnkiLmVxdWFscyhuYW1lKSAmJiBhbGxvd0xpYnMpIHsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGxuYW1lID0gcGFyc2VyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsICJuYW1lIik7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBsZmlsZSA9IHBhcnNlci5nZXRBdHRyaWJ1dGVWYWx1ZShudWxsLCAiZmlsZSIpOwogICAgICAgICAgICAgICAgICAgICBpZiAobG5hbWUgPT0gbnVsbCkgewpAQCAtMzIwLDcgKzMzOCw3IEBACiAgICAgICAgICAgICAgICAgICAgIFhtbFV0aWxzLnNraXBDdXJyZW50VGFnKHBhcnNlcik7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgiZmVhdHVyZSIuZXF1YWxzKG5hbWUpKSB7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgiZmVhdHVyZSIuZXF1YWxzKG5hbWUpICYmIGFsbG93RmVhdHVyZXMpIHsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGZuYW1lID0gcGFyc2VyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsICJuYW1lIik7CiAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gYWxsb3dlZDsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFsb3dSYW0pIHsKQEAgLTM0MSw3ICszNTksNyBAQAogICAgICAgICAgICAgICAgICAgICBYbWxVdGlscy5za2lwQ3VycmVudFRhZyhwYXJzZXIpOwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoInVuYXZhaWxhYmxlLWZlYXR1cmUiLmVxdWFscyhuYW1lKSkgeworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoInVuYXZhaWxhYmxlLWZlYXR1cmUiLmVxdWFscyhuYW1lKSAmJiBhbGxvd0ZlYXR1cmVzKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBmbmFtZSA9IHBhcnNlci5nZXRBdHRyaWJ1dGVWYWx1ZShudWxsLCAibmFtZSIpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZm5hbWUgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgU2xvZy53KFRBRywgIjx1bmF2YWlsYWJsZS1mZWF0dXJlPiB3aXRob3V0IG5hbWUgaW4gIiArIHBlcm1GaWxlICsgIiBhdCAiCkBAIC0zNTIsNyArMzcwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgWG1sVXRpbHMuc2tpcEN1cnJlbnRUYWcocGFyc2VyKTsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCJhbGxvdy1pbi1wb3dlci1zYXZlLWV4Y2VwdC1pZGxlIi5lcXVhbHMobmFtZSkgJiYgIW9ubHlGZWF0dXJlcykgeworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoImFsbG93LWluLXBvd2VyLXNhdmUtZXhjZXB0LWlkbGUiLmVxdWFscyhuYW1lKSAmJiBhbGxvd0FsbCkgewogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcGtnbmFtZSA9IHBhcnNlci5nZXRBdHRyaWJ1dGVWYWx1ZShudWxsLCAicGFja2FnZSIpOwogICAgICAgICAgICAgICAgICAgICBpZiAocGtnbmFtZSA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBTbG9nLncoVEFHLCAiPGFsbG93LWluLXBvd2VyLXNhdmUtZXhjZXB0LWlkbGU+IHdpdGhvdXQgcGFja2FnZSBpbiAiCkBAIC0zNjMsNyArMzgxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgWG1sVXRpbHMuc2tpcEN1cnJlbnRUYWcocGFyc2VyKTsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCJhbGxvdy1pbi1wb3dlci1zYXZlIi5lcXVhbHMobmFtZSkgJiYgIW9ubHlGZWF0dXJlcykgeworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoImFsbG93LWluLXBvd2VyLXNhdmUiLmVxdWFscyhuYW1lKSAmJiBhbGxvd0FsbCkgewogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcGtnbmFtZSA9IHBhcnNlci5nZXRBdHRyaWJ1dGVWYWx1ZShudWxsLCAicGFja2FnZSIpOwogICAgICAgICAgICAgICAgICAgICBpZiAocGtnbmFtZSA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBTbG9nLncoVEFHLCAiPGFsbG93LWluLXBvd2VyLXNhdmU+IHdpdGhvdXQgcGFja2FnZSBpbiAiICsgcGVybUZpbGUgKyAiIGF0ICIKQEAgLTM3NCw3ICszOTIsNyBAQAogICAgICAgICAgICAgICAgICAgICBYbWxVdGlscy5za2lwQ3VycmVudFRhZyhwYXJzZXIpOwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoImZpeGVkLWltZS1hcHAiLmVxdWFscyhuYW1lKSAmJiAhb25seUZlYXR1cmVzKSB7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgiZml4ZWQtaW1lLWFwcCIuZXF1YWxzKG5hbWUpICYmIGFsbG93QWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBwa2duYW1lID0gcGFyc2VyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsICJwYWNrYWdlIik7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwa2duYW1lID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFNsb2cudyhUQUcsICI8Zml4ZWQtaW1lLWFwcD4gd2l0aG91dCBwYWNrYWdlIGluICIgKyBwZXJtRmlsZSArICIgYXQgIgpAQCAtMzg1LDcgKzQwMyw3IEBACiAgICAgICAgICAgICAgICAgICAgIFhtbFV0aWxzLnNraXBDdXJyZW50VGFnKHBhcnNlcik7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgiYXBwLWxpbmsiLmVxdWFscyhuYW1lKSkgeworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoImFwcC1saW5rIi5lcXVhbHMobmFtZSkgJiYgYWxsb3dBcHBDb25maWdzKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBwa2duYW1lID0gcGFyc2VyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsICJwYWNrYWdlIik7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwa2duYW1lID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFNsb2cudyhUQUcsICI8YXBwLWxpbms+IHdpdGhvdXQgcGFja2FnZSBpbiAiICsgcGVybUZpbGUgKyAiIGF0ICIKQEAgLTM5NCw3ICs0MTIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgbUxpbmtlZEFwcHMuYWRkKHBrZ25hbWUpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIFhtbFV0aWxzLnNraXBDdXJyZW50VGFnKHBhcnNlcik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgic3lzdGVtLXVzZXItd2hpdGVsaXN0ZWQtYXBwIi5lcXVhbHMobmFtZSkpIHsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCJzeXN0ZW0tdXNlci13aGl0ZWxpc3RlZC1hcHAiLmVxdWFscyhuYW1lKSAmJiBhbGxvd0FwcENvbmZpZ3MpIHsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHBrZ25hbWUgPSBwYXJzZXIuZ2V0QXR0cmlidXRlVmFsdWUobnVsbCwgInBhY2thZ2UiKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHBrZ25hbWUgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgU2xvZy53KFRBRywgIjxzeXN0ZW0tdXNlci13aGl0ZWxpc3RlZC1hcHA+IHdpdGhvdXQgcGFja2FnZSBpbiAiICsgcGVybUZpbGUKQEAgLTQwMyw3ICs0MjEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgbVN5c3RlbVVzZXJXaGl0ZWxpc3RlZEFwcHMuYWRkKHBrZ25hbWUpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIFhtbFV0aWxzLnNraXBDdXJyZW50VGFnKHBhcnNlcik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgic3lzdGVtLXVzZXItYmxhY2tsaXN0ZWQtYXBwIi5lcXVhbHMobmFtZSkpIHsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCJzeXN0ZW0tdXNlci1ibGFja2xpc3RlZC1hcHAiLmVxdWFscyhuYW1lKSAmJiBhbGxvd0FwcENvbmZpZ3MpIHsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHBrZ25hbWUgPSBwYXJzZXIuZ2V0QXR0cmlidXRlVmFsdWUobnVsbCwgInBhY2thZ2UiKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHBrZ25hbWUgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgU2xvZy53KFRBRywgIjxzeXN0ZW0tdXNlci1ibGFja2xpc3RlZC1hcHAgd2l0aG91dCBwYWNrYWdlIGluICIgKyBwZXJtRmlsZQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hY2NvdW50cy9BY2NvdW50TWFuYWdlclNlcnZpY2UuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYWNjb3VudHMvQWNjb3VudE1hbmFnZXJTZXJ2aWNlLmphdmEKaW5kZXggY2E1MjEyYS4uYWE5OTQ0MiAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hY2NvdW50cy9BY2NvdW50TWFuYWdlclNlcnZpY2UuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FjY291bnRzL0FjY291bnRNYW5hZ2VyU2VydmljZS5qYXZhCkBAIC0zNyw3ICszNyw5IEBACiBpbXBvcnQgYW5kcm9pZC5hcHAuTm90aWZpY2F0aW9uOwogaW1wb3J0IGFuZHJvaWQuYXBwLk5vdGlmaWNhdGlvbk1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5hcHAuUGVuZGluZ0ludGVudDsKK2ltcG9ydCBhbmRyb2lkLmFwcC5hZG1pbi5EZXZpY2VBZG1pbkluZm87CiBpbXBvcnQgYW5kcm9pZC5hcHAuYWRtaW4uRGV2aWNlUG9saWN5TWFuYWdlcjsKK2ltcG9ydCBhbmRyb2lkLmFwcC5hZG1pbi5EZXZpY2VQb2xpY3lNYW5hZ2VySW50ZXJuYWw7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkJyb2FkY2FzdFJlY2VpdmVyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZW50VmFsdWVzOwpAQCAtODIsNiArODQsNyBAQAogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuQXJyYXlVdGlsczsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLkluZGVudGluZ1ByaW50V3JpdGVyOwogaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5GZ1RocmVhZDsKK2ltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIuTG9jYWxTZXJ2aWNlczsKIGltcG9ydCBjb20uZ29vZ2xlLmFuZHJvaWQuY29sbGVjdC5MaXN0czsKIGltcG9ydCBjb20uZ29vZ2xlLmFuZHJvaWQuY29sbGVjdC5TZXRzOwogCkBAIC04MzAsNyArODMzLDggQEAKICAgICAgICAgICAgIHRocm93IG5ldyBTZWN1cml0eUV4Y2VwdGlvbihtc2cpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFjYW5Vc2VyTW9kaWZ5QWNjb3VudHModXNlcklkKSB8fCAhY2FuVXNlck1vZGlmeUFjY291bnRzRm9yVHlwZSh1c2VySWQsIGFjY291bnQudHlwZSkpIHsKKyAgICAgICAgaWYgKCFjYW5Vc2VyTW9kaWZ5QWNjb3VudHModXNlcklkLCBjYWxsaW5nVWlkKSB8fAorICAgICAgICAgICAgICAgICFjYW5Vc2VyTW9kaWZ5QWNjb3VudHNGb3JUeXBlKHVzZXJJZCwgYWNjb3VudC50eXBlLCBjYWxsaW5nVWlkKSkgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKQEAgLTEyNTksNyArMTI2Myw3IEBACiAgICAgICAgICAgICAgICAgICAgIGFjY291bnQudHlwZSk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFeGNlcHRpb24obXNnKTsKICAgICAgICAgfQotICAgICAgICBpZiAoIWNhblVzZXJNb2RpZnlBY2NvdW50cyh1c2VySWQpKSB7CisgICAgICAgIGlmICghY2FuVXNlck1vZGlmeUFjY291bnRzKHVzZXJJZCwgY2FsbGluZ1VpZCkpIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgcmVzcG9uc2Uub25FcnJvcihBY2NvdW50TWFuYWdlci5FUlJPUl9DT0RFX1VTRVJfUkVTVFJJQ1RFRCwKICAgICAgICAgICAgICAgICAgICAgICAgICJVc2VyIGNhbm5vdCBtb2RpZnkgYWNjb3VudHMiKTsKQEAgLTEyNjcsNyArMTI3MSw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFjYW5Vc2VyTW9kaWZ5QWNjb3VudHNGb3JUeXBlKHVzZXJJZCwgYWNjb3VudC50eXBlKSkgeworICAgICAgICBpZiAoIWNhblVzZXJNb2RpZnlBY2NvdW50c0ZvclR5cGUodXNlcklkLCBhY2NvdW50LnR5cGUsIGNhbGxpbmdVaWQpKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIHJlc3BvbnNlLm9uRXJyb3IoQWNjb3VudE1hbmFnZXIuRVJST1JfQ09ERV9NQU5BR0VNRU5UX0RJU0FCTEVEX0ZPUl9BQ0NPVU5UX1RZUEUsCiAgICAgICAgICAgICAgICAgICAgICAgICAiVXNlciBjYW5ub3QgbW9kaWZ5IGFjY291bnRzIG9mIHRoaXMgdHlwZSAocG9saWN5KS4iKTsKQEAgLTEzMjEsOSArMTMyNSw2IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFeGNlcHRpb24obXNnKTsKICAgICAgICAgfQogICAgICAgICBVc2VyQWNjb3VudHMgYWNjb3VudHMgPSBnZXRVc2VyQWNjb3VudHNGb3JDYWxsZXIoKTsKLSAgICAgICAgaWYgKCFjYW5Vc2VyTW9kaWZ5QWNjb3VudHModXNlcklkKSB8fCAhY2FuVXNlck1vZGlmeUFjY291bnRzRm9yVHlwZSh1c2VySWQsIGFjY291bnQudHlwZSkpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQogICAgICAgICBsb2dSZWNvcmQoYWNjb3VudHMsIERlYnVnRGJIZWxwZXIuQUNUSU9OX0NBTExFRF9BQ0NPVU5UX1JFTU9WRSwgVEFCTEVfQUNDT1VOVFMpOwogICAgICAgICBsb25nIGlkZW50aXR5VG9rZW4gPSBjbGVhckNhbGxpbmdJZGVudGl0eSgpOwogICAgICAgICB0cnkgewpAQCAtMjE0Niw4ICsyMTQ3LDkgQEAKICAgICAgICAgaWYgKGFjY291bnRUeXBlID09IG51bGwpIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImFjY291bnRUeXBlIGlzIG51bGwiKTsKIAogICAgICAgICAvLyBJcyB1c2VyIGRpc2FsbG93ZWQgZnJvbSBtb2RpZnlpbmcgYWNjb3VudHM/Ci0gICAgICAgIGludCB1c2VySWQgPSBCaW5kZXIuZ2V0Q2FsbGluZ1VzZXJIYW5kbGUoKS5nZXRJZGVudGlmaWVyKCk7Ci0gICAgICAgIGlmICghY2FuVXNlck1vZGlmeUFjY291bnRzKHVzZXJJZCkpIHsKKyAgICAgICAgZmluYWwgaW50IHVpZCA9IEJpbmRlci5nZXRDYWxsaW5nVWlkKCk7CisgICAgICAgIGZpbmFsIGludCB1c2VySWQgPSBVc2VySGFuZGxlLmdldFVzZXJJZCh1aWQpOworICAgICAgICBpZiAoIWNhblVzZXJNb2RpZnlBY2NvdW50cyh1c2VySWQsIHVpZCkpIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgcmVzcG9uc2Uub25FcnJvcihBY2NvdW50TWFuYWdlci5FUlJPUl9DT0RFX1VTRVJfUkVTVFJJQ1RFRCwKICAgICAgICAgICAgICAgICAgICAgICAgICJVc2VyIGlzIG5vdCBhbGxvd2VkIHRvIGFkZCBhbiBhY2NvdW50ISIpOwpAQCAtMjE1Niw3ICsyMTU4LDcgQEAKICAgICAgICAgICAgIHNob3dDYW50QWRkQWNjb3VudChBY2NvdW50TWFuYWdlci5FUlJPUl9DT0RFX1VTRVJfUkVTVFJJQ1RFRCwgdXNlcklkKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAoIWNhblVzZXJNb2RpZnlBY2NvdW50c0ZvclR5cGUodXNlcklkLCBhY2NvdW50VHlwZSkpIHsKKyAgICAgICAgaWYgKCFjYW5Vc2VyTW9kaWZ5QWNjb3VudHNGb3JUeXBlKHVzZXJJZCwgYWNjb3VudFR5cGUsIHVpZCkpIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgcmVzcG9uc2Uub25FcnJvcihBY2NvdW50TWFuYWdlci5FUlJPUl9DT0RFX01BTkFHRU1FTlRfRElTQUJMRURfRk9SX0FDQ09VTlRfVFlQRSwKICAgICAgICAgICAgICAgICAgICAgICAgICJVc2VyIGNhbm5vdCBtb2RpZnkgYWNjb3VudHMgb2YgdGhpcyB0eXBlIChwb2xpY3kpLiIpOwpAQCAtMjE2OCw3ICsyMTcwLDYgQEAKICAgICAgICAgfQogCiAgICAgICAgIGZpbmFsIGludCBwaWQgPSBCaW5kZXIuZ2V0Q2FsbGluZ1BpZCgpOwotICAgICAgICBmaW5hbCBpbnQgdWlkID0gQmluZGVyLmdldENhbGxpbmdVaWQoKTsKICAgICAgICAgZmluYWwgQnVuZGxlIG9wdGlvbnMgPSAob3B0aW9uc0luID09IG51bGwpID8gbmV3IEJ1bmRsZSgpIDogb3B0aW9uc0luOwogICAgICAgICBvcHRpb25zLnB1dEludChBY2NvdW50TWFuYWdlci5LRVlfQ0FMTEVSX1VJRCwgdWlkKTsKICAgICAgICAgb3B0aW9ucy5wdXRJbnQoQWNjb3VudE1hbmFnZXIuS0VZX0NBTExFUl9QSUQsIHBpZCk7CkBAIC0yMjMwLDcgKzIyMzEsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgLy8gSXMgdXNlciBkaXNhbGxvd2VkIGZyb20gbW9kaWZ5aW5nIGFjY291bnRzPwotICAgICAgICBpZiAoIWNhblVzZXJNb2RpZnlBY2NvdW50cyh1c2VySWQpKSB7CisgICAgICAgIGlmICghY2FuVXNlck1vZGlmeUFjY291bnRzKHVzZXJJZCwgY2FsbGluZ1VpZCkpIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgcmVzcG9uc2Uub25FcnJvcihBY2NvdW50TWFuYWdlci5FUlJPUl9DT0RFX1VTRVJfUkVTVFJJQ1RFRCwKICAgICAgICAgICAgICAgICAgICAgICAgICJVc2VyIGlzIG5vdCBhbGxvd2VkIHRvIGFkZCBhbiBhY2NvdW50ISIpOwpAQCAtMjIzOSw3ICsyMjQwLDcgQEAKICAgICAgICAgICAgIHNob3dDYW50QWRkQWNjb3VudChBY2NvdW50TWFuYWdlci5FUlJPUl9DT0RFX1VTRVJfUkVTVFJJQ1RFRCwgdXNlcklkKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAoIWNhblVzZXJNb2RpZnlBY2NvdW50c0ZvclR5cGUodXNlcklkLCBhY2NvdW50VHlwZSkpIHsKKyAgICAgICAgaWYgKCFjYW5Vc2VyTW9kaWZ5QWNjb3VudHNGb3JUeXBlKHVzZXJJZCwgYWNjb3VudFR5cGUsIGNhbGxpbmdVaWQpKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIHJlc3BvbnNlLm9uRXJyb3IoQWNjb3VudE1hbmFnZXIuRVJST1JfQ09ERV9NQU5BR0VNRU5UX0RJU0FCTEVEX0ZPUl9BQ0NPVU5UX1RZUEUsCiAgICAgICAgICAgICAgICAgICAgICAgICAiVXNlciBjYW5ub3QgbW9kaWZ5IGFjY291bnRzIG9mIHRoaXMgdHlwZSAocG9saWN5KS4iKTsKQEAgLTIzMTAsOCArMjMxMSw5IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJhY2NvdW50VHlwZSBpcyBudWxsIik7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQgdXNlcklkID0gQmluZGVyLmdldENhbGxpbmdVc2VySGFuZGxlKCkuZ2V0SWRlbnRpZmllcigpOwotICAgICAgICBpZiAoIWNhblVzZXJNb2RpZnlBY2NvdW50cyh1c2VySWQpKSB7CisgICAgICAgIGZpbmFsIGludCB1aWQgPSBCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpOworICAgICAgICBmaW5hbCBpbnQgdXNlcklkID0gVXNlckhhbmRsZS5nZXRVc2VySWQodWlkKTsKKyAgICAgICAgaWYgKCFjYW5Vc2VyTW9kaWZ5QWNjb3VudHModXNlcklkLCB1aWQpKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIHJlc3BvbnNlLm9uRXJyb3IoQWNjb3VudE1hbmFnZXIuRVJST1JfQ09ERV9VU0VSX1JFU1RSSUNURUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAiVXNlciBpcyBub3QgYWxsb3dlZCB0byBhZGQgYW4gYWNjb3VudCEiKTsKQEAgLTIzMjAsNyArMjMyMiw3IEBACiAgICAgICAgICAgICBzaG93Q2FudEFkZEFjY291bnQoQWNjb3VudE1hbmFnZXIuRVJST1JfQ09ERV9VU0VSX1JFU1RSSUNURUQsIHVzZXJJZCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFjYW5Vc2VyTW9kaWZ5QWNjb3VudHNGb3JUeXBlKHVzZXJJZCwgYWNjb3VudFR5cGUpKSB7CisgICAgICAgIGlmICghY2FuVXNlck1vZGlmeUFjY291bnRzRm9yVHlwZSh1c2VySWQsIGFjY291bnRUeXBlLCB1aWQpKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIHJlc3BvbnNlLm9uRXJyb3IoQWNjb3VudE1hbmFnZXIuRVJST1JfQ09ERV9NQU5BR0VNRU5UX0RJU0FCTEVEX0ZPUl9BQ0NPVU5UX1RZUEUsCiAgICAgICAgICAgICAgICAgICAgICAgICAiVXNlciBjYW5ub3QgbW9kaWZ5IGFjY291bnRzIG9mIHRoaXMgdHlwZSAocG9saWN5KS4iKTsKQEAgLTIzMzIsNyArMjMzNCw2IEBACiAgICAgICAgIH0KIAogICAgICAgICBmaW5hbCBpbnQgcGlkID0gQmluZGVyLmdldENhbGxpbmdQaWQoKTsKLSAgICAgICAgZmluYWwgaW50IHVpZCA9IEJpbmRlci5nZXRDYWxsaW5nVWlkKCk7CiAgICAgICAgIGZpbmFsIEJ1bmRsZSBvcHRpb25zID0gKG9wdGlvbnNJbiA9PSBudWxsKSA/IG5ldyBCdW5kbGUoKSA6IG9wdGlvbnNJbjsKICAgICAgICAgb3B0aW9ucy5wdXRJbnQoQWNjb3VudE1hbmFnZXIuS0VZX0NBTExFUl9VSUQsIHVpZCk7CiAgICAgICAgIG9wdGlvbnMucHV0SW50KEFjY291bnRNYW5hZ2VyLktFWV9DQUxMRVJfUElELCBwaWQpOwpAQCAtMjQ5Nyw4ICsyNDk4LDkgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInNlc3Npb25CdW5kbGUgaXMgZW1wdHkiKTsKICAgICAgICAgfQogCi0gICAgICAgIGludCB1c2VySWQgPSBCaW5kZXIuZ2V0Q2FsbGluZ1VzZXJIYW5kbGUoKS5nZXRJZGVudGlmaWVyKCk7Ci0gICAgICAgIGlmICghY2FuVXNlck1vZGlmeUFjY291bnRzKHVzZXJJZCkpIHsKKyAgICAgICAgZmluYWwgaW50IHVpZCA9IEJpbmRlci5nZXRDYWxsaW5nVWlkKCk7CisgICAgICAgIGZpbmFsIGludCB1c2VySWQgPSBVc2VySGFuZGxlLmdldFVzZXJJZCh1aWQpOworICAgICAgICBpZiAoIWNhblVzZXJNb2RpZnlBY2NvdW50cyh1c2VySWQsIHVpZCkpIHsKICAgICAgICAgICAgIHNlbmRFcnJvclJlc3BvbnNlKHJlc3BvbnNlLAogICAgICAgICAgICAgICAgICAgICBBY2NvdW50TWFuYWdlci5FUlJPUl9DT0RFX1VTRVJfUkVTVFJJQ1RFRCwKICAgICAgICAgICAgICAgICAgICAgIlVzZXIgaXMgbm90IGFsbG93ZWQgdG8gYWRkIGFuIGFjY291bnQhIik7CkBAIC0yNTA3LDcgKzI1MDksNiBAQAogICAgICAgICB9CiAKICAgICAgICAgZmluYWwgaW50IHBpZCA9IEJpbmRlci5nZXRDYWxsaW5nUGlkKCk7Ci0gICAgICAgIGZpbmFsIGludCB1aWQgPSBCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpOwogICAgICAgICBmaW5hbCBCdW5kbGUgZGVjcnlwdGVkQnVuZGxlOwogICAgICAgICBmaW5hbCBTdHJpbmcgYWNjb3VudFR5cGU7CiAgICAgICAgIC8vIEZpcnN0IGRlY3J5cHQgc2Vzc2lvbiBidW5kbGUgdG8gZ2V0IGFjY291bnQgdHlwZSBmb3IgY2hlY2tpbmcgcGVybWlzc2lvbi4KQEAgLTI1NTQsNyArMjU1NSw3IEBACiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIWNhblVzZXJNb2RpZnlBY2NvdW50c0ZvclR5cGUodXNlcklkLCBhY2NvdW50VHlwZSkpIHsKKyAgICAgICAgaWYgKCFjYW5Vc2VyTW9kaWZ5QWNjb3VudHNGb3JUeXBlKHVzZXJJZCwgYWNjb3VudFR5cGUsIHVpZCkpIHsKICAgICAgICAgICAgIHNlbmRFcnJvclJlc3BvbnNlKAogICAgICAgICAgICAgICAgICAgICByZXNwb25zZSwKICAgICAgICAgICAgICAgICAgICAgQWNjb3VudE1hbmFnZXIuRVJST1JfQ09ERV9NQU5BR0VNRU5UX0RJU0FCTEVEX0ZPUl9BQ0NPVU5UX1RZUEUsCkBAIC00MzE5LDcgKzQzMjAsMTEgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHByaXZhdGUgYm9vbGVhbiBjYW5Vc2VyTW9kaWZ5QWNjb3VudHMoaW50IHVzZXJJZCkgeworICAgIHByaXZhdGUgYm9vbGVhbiBjYW5Vc2VyTW9kaWZ5QWNjb3VudHMoaW50IHVzZXJJZCwgaW50IGNhbGxpbmdVaWQpIHsKKyAgICAgICAgLy8gdGhlIG1hbmFnaW5nIGFwcCBjYW4gYWx3YXlzIG1vZGlmeSBhY2NvdW50cworICAgICAgICBpZiAoaXNQcm9maWxlT3duZXIoY2FsbGluZ1VpZCkpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CiAgICAgICAgIGlmIChnZXRVc2VyTWFuYWdlcigpLmdldFVzZXJSZXN0cmljdGlvbnMobmV3IFVzZXJIYW5kbGUodXNlcklkKSkKICAgICAgICAgICAgICAgICAuZ2V0Qm9vbGVhbihVc2VyTWFuYWdlci5ESVNBTExPV19NT0RJRllfQUNDT1VOVFMpKSB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00MzI3LDcgKzQzMzIsMTEgQEAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgcHJpdmF0ZSBib29sZWFuIGNhblVzZXJNb2RpZnlBY2NvdW50c0ZvclR5cGUoaW50IHVzZXJJZCwgU3RyaW5nIGFjY291bnRUeXBlKSB7CisgICAgcHJpdmF0ZSBib29sZWFuIGNhblVzZXJNb2RpZnlBY2NvdW50c0ZvclR5cGUoaW50IHVzZXJJZCwgU3RyaW5nIGFjY291bnRUeXBlLCBpbnQgY2FsbGluZ1VpZCkgeworICAgICAgICAvLyB0aGUgbWFuYWdpbmcgYXBwIGNhbiBhbHdheXMgbW9kaWZ5IGFjY291bnRzCisgICAgICAgIGlmIChpc1Byb2ZpbGVPd25lcihjYWxsaW5nVWlkKSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KICAgICAgICAgRGV2aWNlUG9saWN5TWFuYWdlciBkcG0gPSAoRGV2aWNlUG9saWN5TWFuYWdlcikgbUNvbnRleHQKICAgICAgICAgICAgICAgICAuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LkRFVklDRV9QT0xJQ1lfU0VSVklDRSk7CiAgICAgICAgIFN0cmluZ1tdIHR5cGVzQXJyYXkgPSBkcG0uZ2V0QWNjb3VudFR5cGVzV2l0aE1hbmFnZW1lbnREaXNhYmxlZEFzVXNlcih1c2VySWQpOwpAQCAtNDM0Miw2ICs0MzUxLDEzIEBACiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAorICAgIHByaXZhdGUgYm9vbGVhbiBpc1Byb2ZpbGVPd25lcihpbnQgdWlkKSB7CisgICAgICAgIGZpbmFsIERldmljZVBvbGljeU1hbmFnZXJJbnRlcm5hbCBkcG1pID0KKyAgICAgICAgICAgICAgICBMb2NhbFNlcnZpY2VzLmdldFNlcnZpY2UoRGV2aWNlUG9saWN5TWFuYWdlckludGVybmFsLmNsYXNzKTsKKyAgICAgICAgcmV0dXJuIChkcG1pICE9IG51bGwpCisgICAgICAgICAgICAgICAgJiYgZHBtaS5pc0FjdGl2ZUFkbWluV2l0aFBvbGljeSh1aWQsIERldmljZUFkbWluSW5mby5VU0VTX1BPTElDWV9QUk9GSUxFX09XTkVSKTsKKyAgICB9CisKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCB1cGRhdGVBcHBQZXJtaXNzaW9uKEFjY291bnQgYWNjb3VudCwgU3RyaW5nIGF1dGhUb2tlblR5cGUsIGludCB1aWQsIGJvb2xlYW4gdmFsdWUpCiAgICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vQWN0aXZpdHlNYW5hZ2VyU2VydmljZS5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9BY3Rpdml0eU1hbmFnZXJTZXJ2aWNlLmphdmEKaW5kZXggYjgwNWMxMC4uZmI2MmE5NSAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9BY3Rpdml0eU1hbmFnZXJTZXJ2aWNlLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9BY3Rpdml0eU1hbmFnZXJTZXJ2aWNlLmphdmEKQEAgLTUzLDYgKzUzLDcgQEAKIGltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIuZmlyZXdhbGwuSW50ZW50RmlyZXdhbGw7CiBpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLnBtLkluc3RhbGxlcjsKIGltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIuc3RhdHVzYmFyLlN0YXR1c0Jhck1hbmFnZXJJbnRlcm5hbDsKK2ltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIudnIuVnJNYW5hZ2VySW50ZXJuYWw7CiBpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLndtLkFwcFRyYW5zaXRpb247CiBpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJTZXJ2aWNlOwogCkBAIC0yNDMsNiArMjQ0LDcgQEAKIAogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uSU5URVJBQ1RfQUNST1NTX1VTRVJTOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uSU5URVJBQ1RfQUNST1NTX1VTRVJTX0ZVTEw7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuTWFuaWZlc3QucGVybWlzc2lvbi5NQU5BR0VfQUNUSVZJVFlfU1RBQ0tTOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uU1RBUlRfVEFTS1NfRlJPTV9SRUNFTlRTOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuUkVTSVpFX01PREVfUFJFU0VSVkVfV0lORE9XOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuU3RhY2tJZC5ET0NLRURfU1RBQ0tfSUQ7CkBAIC0yNTYsNiArMjU4LDcgQEAKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLlBFUk1JU1NJT05fR1JBTlRFRDsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5wcm92aWRlci5TZXR0aW5ncy5HbG9iYWwuQUxXQVlTX0ZJTklTSF9BQ1RJVklUSUVTOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzLkdsb2JhbC5ERUJVR19BUFA7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQucHJvdmlkZXIuU2V0dGluZ3MuR2xvYmFsLkRFVkVMT1BNRU5UX0VOQUJMRV9GUkVFRk9STV9XSU5ET1dTX1NVUFBPUlQ7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQucHJvdmlkZXIuU2V0dGluZ3MuR2xvYmFsLkRFVkVMT1BNRU5UX0ZPUkNFX1JFU0laQUJMRV9BQ1RJVklUSUVTOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzLkdsb2JhbC5ERVZFTE9QTUVOVF9GT1JDRV9SVEw7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQucHJvdmlkZXIuU2V0dGluZ3MuR2xvYmFsLldBSVRfRk9SX0RFQlVHR0VSOwpAQCAtMzIzLDYgKzMyNiw3IEBACiBpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eU1hbmFnZXJEZWJ1Z0NvbmZpZy5QT1NURklYX1ZJU0lCTEVfQkVISU5EOwogaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlNYW5hZ2VyRGVidWdDb25maWcuVEFHX0FNOwogaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlNYW5hZ2VyRGVidWdDb25maWcuVEFHX1dJVEhfQ0xBU1NfTkFNRTsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5U3RhY2tTdXBlcnZpc29yLkFjdGl2aXR5Q29udGFpbmVyLkZPUkNFX05FV19UQVNLX0ZMQUdTOwogaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlTdGFja1N1cGVydmlzb3IuRk9SQ0VfRk9DVVM7CiBpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eVN0YWNrU3VwZXJ2aXNvci5PTl9UT1A7CiBpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eVN0YWNrU3VwZXJ2aXNvci5QUkVTRVJWRV9XSU5ET1dTOwpAQCAtNTEwLDYgKzUxNCw4IEBACiAgICAgLyoqIFJ1biBhbGwgQWN0aXZpdHlTdGFja3MgdGhyb3VnaCB0aGlzICovCiAgICAgQWN0aXZpdHlTdGFja1N1cGVydmlzb3IgbVN0YWNrU3VwZXJ2aXNvcjsKIAorICAgIEFjdGl2aXR5U3RhcnRlciBtQWN0aXZpdHlTdGFydGVyOworCiAgICAgLyoqIFRhc2sgc3RhY2sgY2hhbmdlIGxpc3RlbmVycy4gKi8KICAgICBwcml2YXRlIFJlbW90ZUNhbGxiYWNrTGlzdDxJVGFza1N0YWNrTGlzdGVuZXI+IG1UYXNrU3RhY2tMaXN0ZW5lcnMgPQogICAgICAgICAgICAgbmV3IFJlbW90ZUNhbGxiYWNrTGlzdDxJVGFza1N0YWNrTGlzdGVuZXI+KCk7CkBAIC0xNDQwLDYgKzE0NDYsOCBAQAogICAgIHN0YXRpYyBmaW5hbCBpbnQgSURMRV9VSURTX01TRyA9IDYwOwogICAgIHN0YXRpYyBmaW5hbCBpbnQgU1lTVEVNX1VTRVJfVU5MT0NLX01TRyA9IDYxOwogICAgIHN0YXRpYyBmaW5hbCBpbnQgTE9HX1NUQUNLX1NUQVRFID0gNjI7CisgICAgc3RhdGljIGZpbmFsIGludCBWUl9NT0RFX0NIQU5HRV9NU0cgPSA2MzsKKyAgICBzdGF0aWMgZmluYWwgaW50IE5PVElGWV9BQ1RJVklUWV9QSU5ORURfTElTVEVORVJTX01TRyA9IDY0OwogCiAgICAgc3RhdGljIGZpbmFsIGludCBGSVJTVF9BQ1RJVklUWV9TVEFDS19NU0cgPSAxMDA7CiAgICAgc3RhdGljIGZpbmFsIGludCBGSVJTVF9CUk9BRENBU1RfUVVFVUVfTVNHID0gMjAwOwpAQCAtMTc4Niw3ICsxNzk0LDcgQEAKICAgICAgICAgICAgIH0gYnJlYWs7CiAgICAgICAgICAgICBjYXNlIERPX1BFTkRJTkdfQUNUSVZJVFlfTEFVTkNIRVNfTVNHOiB7CiAgICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChBY3Rpdml0eU1hbmFnZXJTZXJ2aWNlLnRoaXMpIHsKLSAgICAgICAgICAgICAgICAgICAgbVN0YWNrU3VwZXJ2aXNvci5kb1BlbmRpbmdBY3Rpdml0eUxhdW5jaGVzTG9ja2VkKHRydWUpOworICAgICAgICAgICAgICAgICAgICBtQWN0aXZpdHlTdGFydGVyLmRvUGVuZGluZ0FjdGl2aXR5TGF1bmNoZXNMb2NrZWQodHJ1ZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBicmVhazsKICAgICAgICAgICAgIGNhc2UgS0lMTF9BUFBMSUNBVElPTl9NU0c6IHsKQEAgLTE5OTMsOSArMjAwMSw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIE5PVElGWV9UQVNLX1NUQUNLX0NIQU5HRV9MSVNURU5FUlNfTVNHOiB7CiAgICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChBY3Rpdml0eU1hbmFnZXJTZXJ2aWNlLnRoaXMpIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGkgPSBtVGFza1N0YWNrTGlzdGVuZXJzLmJlZ2luQnJvYWRjYXN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChpID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaS0tOworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gbVRhc2tTdGFja0xpc3RlbmVycy5iZWdpbkJyb2FkY2FzdCgpIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBhIG9uZS13YXkgY2FsbGJhY2sgdG8gdGhlIGxpc3RlbmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRhc2tTdGFja0xpc3RlbmVycy5nZXRCcm9hZGNhc3RJdGVtKGkpLm9uVGFza1N0YWNrQ2hhbmdlZCgpOwpAQCAtMjAwNyw2ICsyMDEzLDIwIEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBOT1RJRllfQUNUSVZJVFlfUElOTkVEX0xJU1RFTkVSU19NU0c6IHsKKyAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKEFjdGl2aXR5TWFuYWdlclNlcnZpY2UudGhpcykgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gbVRhc2tTdGFja0xpc3RlbmVycy5iZWdpbkJyb2FkY2FzdCgpIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBhIG9uZS13YXkgY2FsbGJhY2sgdG8gdGhlIGxpc3RlbmVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRhc2tTdGFja0xpc3RlbmVycy5nZXRCcm9hZGNhc3RJdGVtKGkpLm9uQWN0aXZpdHlQaW5uZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBIYW5kbGVkIGJ5IHRoZSBSZW1vdGVDYWxsYmFja0xpc3QKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBtVGFza1N0YWNrTGlzdGVuZXJzLmZpbmlzaEJyb2FkY2FzdCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgTk9USUZZX0NMRUFSVEVYVF9ORVRXT1JLX01TRzogewogICAgICAgICAgICAgICAgIGZpbmFsIGludCB1aWQgPSBtc2cuYXJnMTsKICAgICAgICAgICAgICAgICBmaW5hbCBieXRlW10gZmlyc3RQYWNrZXQgPSAoYnl0ZVtdKSBtc2cub2JqOwpAQCAtMjE1NCw2ICsyMTc0LDEwIEBACiAgICAgICAgICAgICAgICAgICAgIG1TdGFja1N1cGVydmlzb3IubG9nU3RhY2tTdGF0ZSgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gYnJlYWs7CisgICAgICAgICAgICBjYXNlIFZSX01PREVfQ0hBTkdFX01TRzogeworICAgICAgICAgICAgICAgIFZyTWFuYWdlckludGVybmFsIHZyU2VydmljZSA9IExvY2FsU2VydmljZXMuZ2V0U2VydmljZShWck1hbmFnZXJJbnRlcm5hbC5jbGFzcyk7CisgICAgICAgICAgICAgICAgdnJTZXJ2aWNlLnNldFZyTW9kZShtc2cuYXJnMSAhPSAwKTsKKyAgICAgICAgICAgIH0gYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9OwpAQCAtMjI5MCw2ICsyMzE0LDcgQEAKICAgICBwdWJsaWMgdm9pZCBzZXRXaW5kb3dNYW5hZ2VyKFdpbmRvd01hbmFnZXJTZXJ2aWNlIHdtKSB7CiAgICAgICAgIG1XaW5kb3dNYW5hZ2VyID0gd207CiAgICAgICAgIG1TdGFja1N1cGVydmlzb3Iuc2V0V2luZG93TWFuYWdlcih3bSk7CisgICAgICAgIG1BY3Rpdml0eVN0YXJ0ZXIuc2V0V2luZG93TWFuYWdlcih3bSk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0VXNhZ2VTdGF0c01hbmFnZXIoVXNhZ2VTdGF0c01hbmFnZXJJbnRlcm5hbCB1c2FnZVN0YXRzTWFuYWdlcikgewpAQCAtMjQ3Nyw2ICsyNTAyLDcgQEAKICAgICAgICAgbUludGVudEZpcmV3YWxsID0gbmV3IEludGVudEZpcmV3YWxsKG5ldyBJbnRlbnRGaXJld2FsbEludGVyZmFjZSgpLCBtSGFuZGxlcik7CiAgICAgICAgIG1SZWNlbnRUYXNrcyA9IG5ldyBSZWNlbnRUYXNrcyh0aGlzKTsKICAgICAgICAgbVN0YWNrU3VwZXJ2aXNvciA9IG5ldyBBY3Rpdml0eVN0YWNrU3VwZXJ2aXNvcih0aGlzLCBtUmVjZW50VGFza3MpOworICAgICAgICBtQWN0aXZpdHlTdGFydGVyID0gbmV3IEFjdGl2aXR5U3RhcnRlcih0aGlzLCBtU3RhY2tTdXBlcnZpc29yKTsKICAgICAgICAgbVRhc2tQZXJzaXN0ZXIgPSBuZXcgVGFza1BlcnNpc3RlcihzeXN0ZW1EaXIsIG1TdGFja1N1cGVydmlzb3IsIG1SZWNlbnRUYXNrcyk7CiAKICAgICAgICAgbVByb2Nlc3NDcHVUaHJlYWQgPSBuZXcgVGhyZWFkKCJDcHVUcmFja2VyIikgewpAQCAtMjczMiw5ICsyNzU4LDE1IEBACiAgICAgICAgIHJldHVybiBtQXBwQmluZEFyZ3M7CiAgICAgfQogCi0gICAgZmluYWwgdm9pZCBzZXRGb2N1c2VkQWN0aXZpdHlMb2NrZWQoQWN0aXZpdHlSZWNvcmQgciwgU3RyaW5nIHJlYXNvbikgeworICAgIGJvb2xlYW4gc2V0Rm9jdXNlZEFjdGl2aXR5TG9ja2VkKEFjdGl2aXR5UmVjb3JkIHIsIFN0cmluZyByZWFzb24pIHsKICAgICAgICAgaWYgKHIgPT0gbnVsbCB8fCBtRm9jdXNlZEFjdGl2aXR5ID09IHIpIHsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghci5pc0ZvY3VzYWJsZSgpKSB7CisgICAgICAgICAgICBpZiAoREVCVUdfRk9DVVMpIFNsb2cuZChUQUdfRk9DVVMsCisgICAgICAgICAgICAgICAgICAgICJzZXRGb2N1c2VkQWN0aXZpdHlMb2NrZWQ6IHVuZm9jdXNhYmxlIHI9IiArIHIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKERFQlVHX0ZPQ1VTKSBTbG9nLmQoVEFHX0ZPQ1VTLCAic2V0Rm9jdXNlZEFjdGl2aXR5TG9ja2VkOiByPSIgKyByKTsKQEAgLTI3NzIsMTAgKzI4MDQsMTEgQEAKICAgICAgICAgICAgICAgICBmaW5pc2hWb2ljZVRhc2sobGFzdC50YXNrLnZvaWNlU2Vzc2lvbik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG1TdGFja1N1cGVydmlzb3Iuc2V0Rm9jdXNlZFN0YWNrKHIsIHJlYXNvbiArICIgc2V0Rm9jdXNlZEFjdGl2aXR5IikpIHsKKyAgICAgICAgaWYgKG1TdGFja1N1cGVydmlzb3IubW92ZUFjdGl2aXR5U3RhY2tUb0Zyb250KHIsIHJlYXNvbiArICIgc2V0Rm9jdXNlZEFjdGl2aXR5IikpIHsKICAgICAgICAgICAgIG1XaW5kb3dNYW5hZ2VyLnNldEZvY3VzZWRBcHAoci5hcHBUb2tlbiwgdHJ1ZSk7CiAgICAgICAgIH0KICAgICAgICAgYXBwbHlVcGRhdGVMb2NrU3RhdGVMb2NrZWQocik7CisgICAgICAgIGFwcGx5VXBkYXRlVnJNb2RlTG9ja2VkKHIpOwogICAgICAgICBpZiAobUZvY3VzZWRBY3Rpdml0eS51c2VySWQgIT0gbUxhc3RGb2N1c2VkVXNlcklkKSB7CiAgICAgICAgICAgICBtSGFuZGxlci5yZW1vdmVNZXNzYWdlcyhGT1JFR1JPVU5EX1BST0ZJTEVfQ0hBTkdFRF9NU0cpOwogICAgICAgICAgICAgbUhhbmRsZXIub2J0YWluTWVzc2FnZSgKQEAgLTI3ODcsMjMgKzI4MjAsMzUgQEAKICAgICAgICAgICAgICAgICBtRm9jdXNlZEFjdGl2aXR5ID09IG51bGwgPyAtMSA6IG1Gb2N1c2VkQWN0aXZpdHkudXNlcklkLAogICAgICAgICAgICAgICAgIG1Gb2N1c2VkQWN0aXZpdHkgPT0gbnVsbCA/ICJOVUxMIiA6IG1Gb2N1c2VkQWN0aXZpdHkuc2hvcnRDb21wb25lbnROYW1lLAogICAgICAgICAgICAgICAgIHJlYXNvbik7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGZpbmFsIHZvaWQgY2xlYXJGb2N1c2VkQWN0aXZpdHkoQWN0aXZpdHlSZWNvcmQgcikgewotICAgICAgICBpZiAobUZvY3VzZWRBY3Rpdml0eSA9PSByKSB7Ci0gICAgICAgICAgICBBY3Rpdml0eVN0YWNrIHN0YWNrID0gbVN0YWNrU3VwZXJ2aXNvci5nZXRGb2N1c2VkU3RhY2soKTsKLSAgICAgICAgICAgIGlmIChzdGFjayAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgQWN0aXZpdHlSZWNvcmQgdG9wID0gc3RhY2sudG9wQWN0aXZpdHkoKTsKLSAgICAgICAgICAgICAgICBpZiAodG9wICE9IG51bGwgJiYgdG9wLnVzZXJJZCAhPSBtTGFzdEZvY3VzZWRVc2VySWQpIHsKLSAgICAgICAgICAgICAgICAgICAgbUhhbmRsZXIucmVtb3ZlTWVzc2FnZXMoRk9SRUdST1VORF9QUk9GSUxFX0NIQU5HRURfTVNHKTsKLSAgICAgICAgICAgICAgICAgICAgbUhhbmRsZXIuc2VuZE1lc3NhZ2UobUhhbmRsZXIub2J0YWluTWVzc2FnZShGT1JFR1JPVU5EX1BST0ZJTEVfQ0hBTkdFRF9NU0csCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3AudXNlcklkLCAwKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1MYXN0Rm9jdXNlZFVzZXJJZCA9IHRvcC51c2VySWQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgbUZvY3VzZWRBY3Rpdml0eSA9IG51bGw7Ci0gICAgICAgICAgICBFdmVudExvZ1RhZ3Mud3JpdGVBbUZvY3VzZWRBY3Rpdml0eSgtMSwgIk5VTEwiLCAiY2xlYXJGb2N1c2VkQWN0aXZpdHkiKTsKKyAgICBmaW5hbCB2b2lkIHJlc2V0Rm9jdXNlZEFjdGl2aXR5SWZOZWVkZWRMb2NrZWQoQWN0aXZpdHlSZWNvcmQgZ29pbmdBd2F5KSB7CisgICAgICAgIGlmIChtRm9jdXNlZEFjdGl2aXR5ICE9IGdvaW5nQXdheSkgeworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisKKyAgICAgICAgZmluYWwgQWN0aXZpdHlTdGFjayBmb2N1c2VkU3RhY2sgPSBtU3RhY2tTdXBlcnZpc29yLmdldEZvY3VzZWRTdGFjaygpOworICAgICAgICBpZiAoZm9jdXNlZFN0YWNrICE9IG51bGwpIHsKKyAgICAgICAgICAgIGZpbmFsIEFjdGl2aXR5UmVjb3JkIHRvcCA9IGZvY3VzZWRTdGFjay50b3BBY3Rpdml0eSgpOworICAgICAgICAgICAgaWYgKHRvcCAhPSBudWxsICYmIHRvcC51c2VySWQgIT0gbUxhc3RGb2N1c2VkVXNlcklkKSB7CisgICAgICAgICAgICAgICAgbUhhbmRsZXIucmVtb3ZlTWVzc2FnZXMoRk9SRUdST1VORF9QUk9GSUxFX0NIQU5HRURfTVNHKTsKKyAgICAgICAgICAgICAgICBtSGFuZGxlci5zZW5kTWVzc2FnZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIG1IYW5kbGVyLm9idGFpbk1lc3NhZ2UoRk9SRUdST1VORF9QUk9GSUxFX0NIQU5HRURfTVNHLCB0b3AudXNlcklkLCAwKSk7CisgICAgICAgICAgICAgICAgbUxhc3RGb2N1c2VkVXNlcklkID0gdG9wLnVzZXJJZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIFRyeSB0byBtb3ZlIGZvY3VzIHRvIGFub3RoZXIgYWN0aXZpdHkgaWYgcG9zc2libGUuCisgICAgICAgIGlmIChzZXRGb2N1c2VkQWN0aXZpdHlMb2NrZWQoCisgICAgICAgICAgICAgICAgZm9jdXNlZFN0YWNrLnRvcFJ1bm5pbmdBY3Rpdml0eUxvY2tlZCgpLCAicmVzZXRGb2N1c2VkQWN0aXZpdHlJZk5lZWRlZCIpKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoREVCVUdfRk9DVVMpIFNsb2cuZChUQUdfRk9DVVMsICJyZXNldEZvY3VzZWRBY3Rpdml0eUlmTmVlZGVkOiBTZXR0aW5nIGZvY3VzIHRvIE5VTEwgIgorICAgICAgICAgICAgICAgICsgInByZXYgbUZvY3VzZWRBY3Rpdml0eT0iICsgbUZvY3VzZWRBY3Rpdml0eSArICIgZ29pbmdBd2F5PSIgKyBnb2luZ0F3YXkpOworICAgICAgICBtRm9jdXNlZEFjdGl2aXR5ID0gbnVsbDsKKyAgICAgICAgRXZlbnRMb2dUYWdzLndyaXRlQW1Gb2N1c2VkQWN0aXZpdHkoLTEsICJOVUxMIiwgInJlc2V0Rm9jdXNlZEFjdGl2aXR5SWZOZWVkZWQiKTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKQEAgLTI4MTUsNyArMjg2MCw3IEBACiAgICAgICAgICAgICAgICAgQWN0aXZpdHlSZWNvcmQgciA9IHN0YWNrLnRvcFJ1bm5pbmdBY3Rpdml0eUxvY2tlZCgpOwogICAgICAgICAgICAgICAgIGlmIChyICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgc2V0Rm9jdXNlZEFjdGl2aXR5TG9ja2VkKHIsICJzZXRGb2N1c2VkU3RhY2siKTsKLSAgICAgICAgICAgICAgICAgICAgbVN0YWNrU3VwZXJ2aXNvci5yZXN1bWVUb3BBY3Rpdml0aWVzTG9ja2VkKHN0YWNrLCBudWxsLCBudWxsKTsKKyAgICAgICAgICAgICAgICAgICAgbVN0YWNrU3VwZXJ2aXNvci5yZXN1bWVGb2N1c2VkU3RhY2tUb3BBY3Rpdml0eUxvY2tlZCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjgzMiw3ICsyODc3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlSZWNvcmQgciA9IHRhc2sudG9wUnVubmluZ0FjdGl2aXR5TG9ja2VkKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChyICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHNldEZvY3VzZWRBY3Rpdml0eUxvY2tlZChyLCAic2V0Rm9jdXNlZFRhc2siKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1TdGFja1N1cGVydmlzb3IucmVzdW1lVG9wQWN0aXZpdGllc0xvY2tlZCh0YXNrLnN0YWNrLCBudWxsLCBudWxsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1TdGFja1N1cGVydmlzb3IucmVzdW1lRm9jdXNlZFN0YWNrVG9wQWN0aXZpdHlMb2NrZWQoKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTI4NDQsNyArMjg4OSw4IEBACiAgICAgLyoqIFNldHMgdGhlIHRhc2sgc3RhY2sgbGlzdGVuZXIgdGhhdCBnZXRzIGNhbGxiYWNrcyB3aGVuIGEgdGFzayBzdGFjayBjaGFuZ2VzLiAqLwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIHJlZ2lzdGVyVGFza1N0YWNrTGlzdGVuZXIoSVRhc2tTdGFja0xpc3RlbmVyIGxpc3RlbmVyKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgc3luY2hyb25pemVkIChBY3Rpdml0eU1hbmFnZXJTZXJ2aWNlLnRoaXMpIHsKKyAgICAgICAgZW5mb3JjZUNhbGxpbmdQZXJtaXNzaW9uKE1BTkFHRV9BQ1RJVklUWV9TVEFDS1MsICJyZWdpc3RlclRhc2tTdGFja0xpc3RlbmVyKCkiKTsKKyAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7CiAgICAgICAgICAgICBpZiAobGlzdGVuZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIG1UYXNrU3RhY2tMaXN0ZW5lcnMucmVnaXN0ZXIobGlzdGVuZXIpOwogICAgICAgICAgICAgfQpAQCAtMjg3Miw2ICsyOTE4LDExIEBACiAgICAgICAgICAgICAgICAgbUhhbmRsZXIub2J0YWluTWVzc2FnZShJTU1FUlNJVkVfTU9ERV9MT0NLX01TRywgKG5leHRTdGF0ZSkgPyAxIDogMCwgMCwgcikpOwogICAgIH0KIAorICAgIGZpbmFsIHZvaWQgYXBwbHlVcGRhdGVWck1vZGVMb2NrZWQoQWN0aXZpdHlSZWNvcmQgcikgeworICAgICAgICBtSGFuZGxlci5zZW5kTWVzc2FnZSgKKyAgICAgICAgICAgICAgICBtSGFuZGxlci5vYnRhaW5NZXNzYWdlKFZSX01PREVfQ0hBTkdFX01TRywgKHIuaXNWckFjdGl2aXR5KSA/IDEgOiAwLCAwKSk7CisgICAgfQorCiAgICAgZmluYWwgdm9pZCBzaG93QXNrQ29tcGF0TW9kZURpYWxvZ0xvY2tlZChBY3Rpdml0eVJlY29yZCByKSB7CiAgICAgICAgIE1lc3NhZ2UgbXNnID0gTWVzc2FnZS5vYnRhaW4oKTsKICAgICAgICAgbXNnLndoYXQgPSBTSE9XX0NPTVBBVF9NT0RFX0RJQUxPR19VSV9NU0c7CkBAIC0zNTczLDYgKzM2MjQsNyBAQAogICAgIEludGVudCBnZXRIb21lSW50ZW50KCkgewogICAgICAgICBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudChtVG9wQWN0aW9uLCBtVG9wRGF0YSAhPSBudWxsID8gVXJpLnBhcnNlKG1Ub3BEYXRhKSA6IG51bGwpOwogICAgICAgICBpbnRlbnQuc2V0Q29tcG9uZW50KG1Ub3BDb21wb25lbnQpOworICAgICAgICBpbnRlbnQuYWRkRmxhZ3MoSW50ZW50LkZMQUdfREVCVUdfVFJJQUdFRF9NSVNTSU5HKTsKICAgICAgICAgaWYgKG1GYWN0b3J5VGVzdCAhPSBGYWN0b3J5VGVzdC5GQUNUT1JZX1RFU1RfTE9XX0xFVkVMKSB7CiAgICAgICAgICAgICBpbnRlbnQuYWRkQ2F0ZWdvcnkoSW50ZW50LkNBVEVHT1JZX0hPTUUpOwogICAgICAgICB9CkBAIC0zNjAxLDcgKzM2NTMsNyBAQAogICAgICAgICAgICAgICAgICAgICBhSW5mby5hcHBsaWNhdGlvbkluZm8udWlkLCB0cnVlKTsKICAgICAgICAgICAgIGlmIChhcHAgPT0gbnVsbCB8fCBhcHAuaW5zdHJ1bWVudGF0aW9uQ2xhc3MgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGludGVudC5zZXRGbGFncyhpbnRlbnQuZ2V0RmxhZ3MoKSB8IEludGVudC5GTEFHX0FDVElWSVRZX05FV19UQVNLKTsKLSAgICAgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLnN0YXJ0SG9tZUFjdGl2aXR5KGludGVudCwgYUluZm8sIHJlYXNvbik7CisgICAgICAgICAgICAgICAgbUFjdGl2aXR5U3RhcnRlci5zdGFydEhvbWVBY3Rpdml0eUxvY2tlZChpbnRlbnQsIGFJbmZvLCByZWFzb24pOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTM2NzksNyArMzczMSw3IEBACiAgICAgICAgICAgICAgICAgICAgIGludGVudC5zZXRGbGFncyhJbnRlbnQuRkxBR19BQ1RJVklUWV9ORVdfVEFTSyk7CiAgICAgICAgICAgICAgICAgICAgIGludGVudC5zZXRDb21wb25lbnQobmV3IENvbXBvbmVudE5hbWUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmkuYWN0aXZpdHlJbmZvLnBhY2thZ2VOYW1lLCByaS5hY3Rpdml0eUluZm8ubmFtZSkpOwotICAgICAgICAgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLnN0YXJ0QWN0aXZpdHlMb2NrZWQobnVsbCwgaW50ZW50LCBudWxsIC8qZXBoZW1lcmFsSW50ZW50Ki8sCisgICAgICAgICAgICAgICAgICAgIG1BY3Rpdml0eVN0YXJ0ZXIuc3RhcnRBY3Rpdml0eUxvY2tlZChudWxsLCBpbnRlbnQsIG51bGwgLyplcGhlbWVyYWxJbnRlbnQqLywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLCByaS5hY3Rpdml0eUluZm8sIG51bGwgLypySW5mbyovLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCAwLCAwLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsIDAsIDAsIDAsIG51bGwsIGZhbHNlLCBmYWxzZSwgbnVsbCwgbnVsbCwgbnVsbCk7CiAgICAgICAgICAgICAgICAgfQpAQCAtNDAwNiw2ICs0MDU4LDI1IEBACiAgICAgICAgICAgICAgICAgVXNlckhhbmRsZS5nZXRDYWxsaW5nVXNlcklkKCkpOwogICAgIH0KIAorICAgIGZpbmFsIGludCBzdGFydEFjdGl2aXR5KEludGVudCBpbnRlbnQsIEFjdGl2aXR5U3RhY2tTdXBlcnZpc29yLkFjdGl2aXR5Q29udGFpbmVyIGNvbnRhaW5lcikgeworICAgICAgICBlbmZvcmNlTm90SXNvbGF0ZWRDYWxsZXIoIkFjdGl2aXR5Q29udGFpbmVyLnN0YXJ0QWN0aXZpdHkiKTsKKyAgICAgICAgZmluYWwgaW50IHVzZXJJZCA9IG1Vc2VyQ29udHJvbGxlci5oYW5kbGVJbmNvbWluZ1VzZXIoQmluZGVyLmdldENhbGxpbmdQaWQoKSwKKyAgICAgICAgICAgICAgICBCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpLCBtU3RhY2tTdXBlcnZpc29yLm1DdXJyZW50VXNlciwgZmFsc2UsCisgICAgICAgICAgICAgICAgQWN0aXZpdHlNYW5hZ2VyU2VydmljZS5BTExPV19GVUxMX09OTFksICJBY3Rpdml0eUNvbnRhaW5lciIsIG51bGwpOworCisgICAgICAgIC8vIFRPRE86IFN3aXRjaCB0byB1c2VyIGFwcCBzdGFja3MgaGVyZS4KKyAgICAgICAgU3RyaW5nIG1pbWVUeXBlID0gaW50ZW50LmdldFR5cGUoKTsKKyAgICAgICAgZmluYWwgVXJpIGRhdGEgPSBpbnRlbnQuZ2V0RGF0YSgpOworICAgICAgICBpZiAobWltZVR5cGUgPT0gbnVsbCAmJiBkYXRhICE9IG51bGwgJiYgImNvbnRlbnQiLmVxdWFscyhkYXRhLmdldFNjaGVtZSgpKSkgeworICAgICAgICAgICAgbWltZVR5cGUgPSBnZXRQcm92aWRlck1pbWVUeXBlKGRhdGEsIHVzZXJJZCk7CisgICAgICAgIH0KKyAgICAgICAgY29udGFpbmVyLmNoZWNrRW1iZWRkZWRBbGxvd2VkSW5uZXIodXNlcklkLCBpbnRlbnQsIG1pbWVUeXBlKTsKKworICAgICAgICBpbnRlbnQuYWRkRmxhZ3MoRk9SQ0VfTkVXX1RBU0tfRkxBR1MpOworICAgICAgICByZXR1cm4gbUFjdGl2aXR5U3RhcnRlci5zdGFydEFjdGl2aXR5TWF5V2FpdChudWxsLCAtMSwgbnVsbCwgaW50ZW50LCBtaW1lVHlwZSwgbnVsbCwgbnVsbCwgbnVsbCwKKyAgICAgICAgICAgICAgICBudWxsLCAwLCAwLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBmYWxzZSwgdXNlcklkLCBjb250YWluZXIsIG51bGwpOworICAgIH0KKwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBmaW5hbCBpbnQgc3RhcnRBY3Rpdml0eUFzVXNlcihJQXBwbGljYXRpb25UaHJlYWQgY2FsbGVyLCBTdHJpbmcgY2FsbGluZ1BhY2thZ2UsCiAgICAgICAgICAgICBJbnRlbnQgaW50ZW50LCBTdHJpbmcgcmVzb2x2ZWRUeXBlLCBJQmluZGVyIHJlc3VsdFRvLCBTdHJpbmcgcmVzdWx0V2hvLCBpbnQgcmVxdWVzdENvZGUsCkBAIC00MDE0LDcgKzQwODUsNyBAQAogICAgICAgICB1c2VySWQgPSBtVXNlckNvbnRyb2xsZXIuaGFuZGxlSW5jb21pbmdVc2VyKEJpbmRlci5nZXRDYWxsaW5nUGlkKCksIEJpbmRlci5nZXRDYWxsaW5nVWlkKCksCiAgICAgICAgICAgICAgICAgdXNlcklkLCBmYWxzZSwgQUxMT1dfRlVMTF9PTkxZLCAic3RhcnRBY3Rpdml0eSIsIG51bGwpOwogICAgICAgICAvLyBUT0RPOiBTd2l0Y2ggdG8gdXNlciBhcHAgc3RhY2tzIGhlcmUuCi0gICAgICAgIHJldHVybiBtU3RhY2tTdXBlcnZpc29yLnN0YXJ0QWN0aXZpdHlNYXlXYWl0KGNhbGxlciwgLTEsIGNhbGxpbmdQYWNrYWdlLCBpbnRlbnQsCisgICAgICAgIHJldHVybiBtQWN0aXZpdHlTdGFydGVyLnN0YXJ0QWN0aXZpdHlNYXlXYWl0KGNhbGxlciwgLTEsIGNhbGxpbmdQYWNrYWdlLCBpbnRlbnQsCiAgICAgICAgICAgICAgICAgcmVzb2x2ZWRUeXBlLCBudWxsLCBudWxsLCByZXN1bHRUbywgcmVzdWx0V2hvLCByZXF1ZXN0Q29kZSwgc3RhcnRGbGFncywKICAgICAgICAgICAgICAgICBwcm9maWxlckluZm8sIG51bGwsIG51bGwsIGJPcHRpb25zLCBmYWxzZSwgdXNlcklkLCBudWxsLCBudWxsKTsKICAgICB9CkBAIC00MDc3LDcgKzQxNDgsNyBAQAogCiAgICAgICAgIC8vIFRPRE86IFN3aXRjaCB0byB1c2VyIGFwcCBzdGFja3MgaGVyZS4KICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGludCByZXQgPSBtU3RhY2tTdXBlcnZpc29yLnN0YXJ0QWN0aXZpdHlNYXlXYWl0KG51bGwsIHRhcmdldFVpZCwgdGFyZ2V0UGFja2FnZSwgaW50ZW50LAorICAgICAgICAgICAgaW50IHJldCA9IG1BY3Rpdml0eVN0YXJ0ZXIuc3RhcnRBY3Rpdml0eU1heVdhaXQobnVsbCwgdGFyZ2V0VWlkLCB0YXJnZXRQYWNrYWdlLCBpbnRlbnQsCiAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVkVHlwZSwgbnVsbCwgbnVsbCwgcmVzdWx0VG8sIHJlc3VsdFdobywgcmVxdWVzdENvZGUsIHN0YXJ0RmxhZ3MsIG51bGwsCiAgICAgICAgICAgICAgICAgICAgIG51bGwsIG51bGwsIGJPcHRpb25zLCBpZ25vcmVUYXJnZXRTZWN1cml0eSwgdXNlcklkLCBudWxsLCBudWxsKTsKICAgICAgICAgICAgIHJldHVybiByZXQ7CkBAIC00MTA2LDcgKzQxNzcsNyBAQAogICAgICAgICAgICAgICAgIHVzZXJJZCwgZmFsc2UsIEFMTE9XX0ZVTExfT05MWSwgInN0YXJ0QWN0aXZpdHlBbmRXYWl0IiwgbnVsbCk7CiAgICAgICAgIFdhaXRSZXN1bHQgcmVzID0gbmV3IFdhaXRSZXN1bHQoKTsKICAgICAgICAgLy8gVE9ETzogU3dpdGNoIHRvIHVzZXIgYXBwIHN0YWNrcyBoZXJlLgotICAgICAgICBtU3RhY2tTdXBlcnZpc29yLnN0YXJ0QWN0aXZpdHlNYXlXYWl0KGNhbGxlciwgLTEsIGNhbGxpbmdQYWNrYWdlLCBpbnRlbnQsIHJlc29sdmVkVHlwZSwKKyAgICAgICAgbUFjdGl2aXR5U3RhcnRlci5zdGFydEFjdGl2aXR5TWF5V2FpdChjYWxsZXIsIC0xLCBjYWxsaW5nUGFja2FnZSwgaW50ZW50LCByZXNvbHZlZFR5cGUsCiAgICAgICAgICAgICAgICAgbnVsbCwgbnVsbCwgcmVzdWx0VG8sIHJlc3VsdFdobywgcmVxdWVzdENvZGUsIHN0YXJ0RmxhZ3MsIHByb2ZpbGVySW5mbywgcmVzLCBudWxsLAogICAgICAgICAgICAgICAgIGJPcHRpb25zLCBmYWxzZSwgdXNlcklkLCBudWxsLCBudWxsKTsKICAgICAgICAgcmV0dXJuIHJlczsKQEAgLTQxMjAsNyArNDE5MSw3IEBACiAgICAgICAgIHVzZXJJZCA9IG1Vc2VyQ29udHJvbGxlci5oYW5kbGVJbmNvbWluZ1VzZXIoQmluZGVyLmdldENhbGxpbmdQaWQoKSwgQmluZGVyLmdldENhbGxpbmdVaWQoKSwKICAgICAgICAgICAgICAgICB1c2VySWQsIGZhbHNlLCBBTExPV19GVUxMX09OTFksICJzdGFydEFjdGl2aXR5V2l0aENvbmZpZyIsIG51bGwpOwogICAgICAgICAvLyBUT0RPOiBTd2l0Y2ggdG8gdXNlciBhcHAgc3RhY2tzIGhlcmUuCi0gICAgICAgIGludCByZXQgPSBtU3RhY2tTdXBlcnZpc29yLnN0YXJ0QWN0aXZpdHlNYXlXYWl0KGNhbGxlciwgLTEsIGNhbGxpbmdQYWNrYWdlLCBpbnRlbnQsCisgICAgICAgIGludCByZXQgPSBtQWN0aXZpdHlTdGFydGVyLnN0YXJ0QWN0aXZpdHlNYXlXYWl0KGNhbGxlciwgLTEsIGNhbGxpbmdQYWNrYWdlLCBpbnRlbnQsCiAgICAgICAgICAgICAgICAgcmVzb2x2ZWRUeXBlLCBudWxsLCBudWxsLCByZXN1bHRUbywgcmVzdWx0V2hvLCByZXF1ZXN0Q29kZSwgc3RhcnRGbGFncywKICAgICAgICAgICAgICAgICBudWxsLCBudWxsLCBjb25maWcsIGJPcHRpb25zLCBmYWxzZSwgdXNlcklkLCBudWxsLCBudWxsKTsKICAgICAgICAgcmV0dXJuIHJldDsKQEAgLTQxNzgsNyArNDI0OSw3IEBACiAgICAgICAgIHVzZXJJZCA9IG1Vc2VyQ29udHJvbGxlci5oYW5kbGVJbmNvbWluZ1VzZXIoY2FsbGluZ1BpZCwgY2FsbGluZ1VpZCwgdXNlcklkLCBmYWxzZSwKICAgICAgICAgICAgICAgICBBTExPV19GVUxMX09OTFksICJzdGFydFZvaWNlQWN0aXZpdHkiLCBudWxsKTsKICAgICAgICAgLy8gVE9ETzogU3dpdGNoIHRvIHVzZXIgYXBwIHN0YWNrcyBoZXJlLgotICAgICAgICByZXR1cm4gbVN0YWNrU3VwZXJ2aXNvci5zdGFydEFjdGl2aXR5TWF5V2FpdChudWxsLCBjYWxsaW5nVWlkLCBjYWxsaW5nUGFja2FnZSwgaW50ZW50LAorICAgICAgICByZXR1cm4gbUFjdGl2aXR5U3RhcnRlci5zdGFydEFjdGl2aXR5TWF5V2FpdChudWxsLCBjYWxsaW5nVWlkLCBjYWxsaW5nUGFja2FnZSwgaW50ZW50LAogICAgICAgICAgICAgICAgIHJlc29sdmVkVHlwZSwgc2Vzc2lvbiwgaW50ZXJhY3RvciwgbnVsbCwgbnVsbCwgMCwgc3RhcnRGbGFncywgcHJvZmlsZXJJbmZvLCBudWxsLAogICAgICAgICAgICAgICAgIG51bGwsIGJPcHRpb25zLCBmYWxzZSwgdXNlcklkLCBudWxsLCBudWxsKTsKICAgICB9CkBAIC00Mjg5LDcgKzQzNjAsNyBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBmaW5hbCBsb25nIG9yaWdJZCA9IEJpbmRlci5jbGVhckNhbGxpbmdJZGVudGl0eSgpOwotICAgICAgICAgICAgaW50IHJlcyA9IG1TdGFja1N1cGVydmlzb3Iuc3RhcnRBY3Rpdml0eUxvY2tlZChyLmFwcC50aHJlYWQsIGludGVudCwKKyAgICAgICAgICAgIGludCByZXMgPSBtQWN0aXZpdHlTdGFydGVyLnN0YXJ0QWN0aXZpdHlMb2NrZWQoci5hcHAudGhyZWFkLCBpbnRlbnQsCiAgICAgICAgICAgICAgICAgICAgIG51bGwgLyplcGhlbWVyYWxJbnRlbnQqLywgci5yZXNvbHZlZFR5cGUsIGFJbmZvLCBudWxsIC8qckluZm8qLywgbnVsbCwKICAgICAgICAgICAgICAgICAgICAgbnVsbCwgcmVzdWx0VG8gIT0gbnVsbCA/IHJlc3VsdFRvLmFwcFRva2VuIDogbnVsbCwgcmVzdWx0V2hvLCByZXF1ZXN0Q29kZSwgLTEsCiAgICAgICAgICAgICAgICAgICAgIHIubGF1bmNoZWRGcm9tVWlkLCByLmxhdW5jaGVkRnJvbVBhY2thZ2UsIC0xLCByLmxhdW5jaGVkRnJvbVVpZCwgMCwgb3B0aW9ucywKQEAgLTQzMDUsNyArNDM3Niw3IEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGZpbmFsIGludCBzdGFydEFjdGl2aXR5RnJvbVJlY2VudHMoaW50IHRhc2tJZCwgaW50IGxhdW5jaFN0YWNrSWQsIEJ1bmRsZSBiT3B0aW9ucykgeworICAgIHB1YmxpYyBmaW5hbCBpbnQgc3RhcnRBY3Rpdml0eUZyb21SZWNlbnRzKGludCB0YXNrSWQsIEJ1bmRsZSBiT3B0aW9ucykgewogICAgICAgICBpZiAoY2hlY2tDYWxsaW5nUGVybWlzc2lvbihTVEFSVF9UQVNLU19GUk9NX1JFQ0VOVFMpICE9IFBhY2thZ2VNYW5hZ2VyLlBFUk1JU1NJT05fR1JBTlRFRCkgewogICAgICAgICAgICAgU3RyaW5nIG1zZyA9ICJQZXJtaXNzaW9uIERlbmlhbDogc3RhcnRBY3Rpdml0eUZyb21SZWNlbnRzIGNhbGxlZCB3aXRob3V0ICIgKwogICAgICAgICAgICAgICAgICAgICBTVEFSVF9UQVNLU19GUk9NX1JFQ0VOVFM7CkBAIC00MzE0LDI0ICs0Mzg1LDI4IEBACiAgICAgICAgIH0KICAgICAgICAgZmluYWwgbG9uZyBvcmlnSWQgPSBCaW5kZXIuY2xlYXJDYWxsaW5nSWRlbnRpdHkoKTsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHJldHVybiBzdGFydEFjdGl2aXR5RnJvbVJlY2VudHNJbm5lcih0YXNrSWQsIGxhdW5jaFN0YWNrSWQsIGJPcHRpb25zKTsKKyAgICAgICAgICAgIHJldHVybiBzdGFydEFjdGl2aXR5RnJvbVJlY2VudHNJbm5lcih0YXNrSWQsIGJPcHRpb25zKTsKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIEJpbmRlci5yZXN0b3JlQ2FsbGluZ0lkZW50aXR5KG9yaWdJZCk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBmaW5hbCBpbnQgc3RhcnRBY3Rpdml0eUZyb21SZWNlbnRzSW5uZXIoaW50IHRhc2tJZCwgaW50IGxhdW5jaFN0YWNrSWQsIEJ1bmRsZSBiT3B0aW9ucykgeworICAgIGZpbmFsIGludCBzdGFydEFjdGl2aXR5RnJvbVJlY2VudHNJbm5lcihpbnQgdGFza0lkLCBCdW5kbGUgYk9wdGlvbnMpIHsKICAgICAgICAgZmluYWwgVGFza1JlY29yZCB0YXNrOwogICAgICAgICBmaW5hbCBpbnQgY2FsbGluZ1VpZDsKICAgICAgICAgZmluYWwgU3RyaW5nIGNhbGxpbmdQYWNrYWdlOwogICAgICAgICBmaW5hbCBJbnRlbnQgaW50ZW50OwogICAgICAgICBmaW5hbCBpbnQgdXNlcklkOwogICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKKyAgICAgICAgICAgIGZpbmFsIEFjdGl2aXR5T3B0aW9ucyBhY3Rpdml0eU9wdGlvbnMgPSAoYk9wdGlvbnMgIT0gbnVsbCkKKyAgICAgICAgICAgICAgICAgICAgPyBuZXcgQWN0aXZpdHlPcHRpb25zKGJPcHRpb25zKSA6IG51bGw7CisgICAgICAgICAgICBmaW5hbCBpbnQgbGF1bmNoU3RhY2tJZCA9IChhY3Rpdml0eU9wdGlvbnMgIT0gbnVsbCkKKyAgICAgICAgICAgICAgICAgICAgPyBhY3Rpdml0eU9wdGlvbnMuZ2V0TGF1bmNoU3RhY2tJZCgpIDogSU5WQUxJRF9TVEFDS19JRDsKKwogICAgICAgICAgICAgaWYgKGxhdW5jaFN0YWNrSWQgPT0gSE9NRV9TVEFDS19JRCkgewogICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInN0YXJ0QWN0aXZpdHlGcm9tUmVjZW50c0lubmVyOiBUYXNrICIKICAgICAgICAgICAgICAgICAgICAgICAgICsgdGFza0lkICsgIiBjYW4ndCBiZSBsYXVuY2ggaW4gdGhlIGhvbWUgc3RhY2suIik7CiAgICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIHRhc2sgPSBtU3RhY2tTdXBlcnZpc29yLmFueVRhc2tGb3JJZExvY2tlZCh0YXNrSWQsIFJFU1RPUkVfRlJPTV9SRUNFTlRTLCBsYXVuY2hTdGFja0lkKTsKICAgICAgICAgICAgIGlmICh0YXNrID09IG51bGwpIHsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKApAQCAtNDMzOSwxMCArNDQxNCw5IEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChsYXVuY2hTdGFja0lkICE9IElOVkFMSURfU1RBQ0tfSUQpIHsKLSAgICAgICAgICAgICAgICBpZiAobGF1bmNoU3RhY2tJZCA9PSBET0NLRURfU1RBQ0tfSUQgJiYgYk9wdGlvbnMgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eU9wdGlvbnMgYWN0aXZpdHlPcHRpb25zID0gbmV3IEFjdGl2aXR5T3B0aW9ucyhiT3B0aW9ucyk7Ci0gICAgICAgICAgICAgICAgICAgIG1XaW5kb3dNYW5hZ2VyLnNldERvY2tlZFN0YWNrQ3JlYXRlU3RhdGUoYWN0aXZpdHlPcHRpb25zLmdldERvY2tDcmVhdGVNb2RlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCAvKiBpbml0aWFsQm91bmRzICovKTsKKyAgICAgICAgICAgICAgICBpZiAobGF1bmNoU3RhY2tJZCA9PSBET0NLRURfU1RBQ0tfSUQgJiYgYWN0aXZpdHlPcHRpb25zICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgbVdpbmRvd01hbmFnZXIuc2V0RG9ja2VkU3RhY2tDcmVhdGVTdGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpdml0eU9wdGlvbnMuZ2V0RG9ja0NyZWF0ZU1vZGUoKSwgbnVsbCAvKiBpbml0aWFsQm91bmRzICovKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKHRhc2suc3RhY2subVN0YWNrSWQgIT0gbGF1bmNoU3RhY2tJZCkgewogICAgICAgICAgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLm1vdmVUYXNrVG9TdGFja0xvY2tlZCgKQEAgLTQzNTEsNyArNDQyNSwxMCBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKHRhc2suZ2V0Um9vdEFjdGl2aXR5KCkgIT0gbnVsbCkgeworICAgICAgICAgICAgLy8gSWYgdGhlIHVzZXIgbXVzdCBjb25maXJtIGNyZWRlbnRpYWxzIChlLmcuIHdoZW4gZmlyc3QgbGF1bmNoaW5nIGEgd29yayBhcHAgYW5kIHRoZQorICAgICAgICAgICAgLy8gV29yayBDaGFsbGVuZ2UgaXMgcHJlc2VudCkgbGV0IHN0YXJ0QWN0aXZpdHlJblBhY2thZ2UgaGFuZGxlIHRoZSBpbnRlcmNlcHRpbmcuCisgICAgICAgICAgICBpZiAoIW1Vc2VyQ29udHJvbGxlci5zaG91bGRDb25maXJtQ3JlZGVudGlhbHModGFzay51c2VySWQpCisgICAgICAgICAgICAgICAgICAgICYmIHRhc2suZ2V0Um9vdEFjdGl2aXR5KCkgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIG1vdmVUYXNrVG9Gcm9udExvY2tlZCh0YXNrLnRhc2tJZCwgMCwgYk9wdGlvbnMpOwogICAgICAgICAgICAgICAgIHJldHVybiBBY3Rpdml0eU1hbmFnZXIuU1RBUlRfVEFTS19UT19GUk9OVDsKICAgICAgICAgICAgIH0KQEAgLTQzNzQsNyArNDQ1MSw3IEBACiAgICAgICAgICAgICAgICAgdXNlcklkLCBmYWxzZSwgQUxMT1dfRlVMTF9PTkxZLCAic3RhcnRBY3Rpdml0eUluUGFja2FnZSIsIG51bGwpOwogCiAgICAgICAgIC8vIFRPRE86IFN3aXRjaCB0byB1c2VyIGFwcCBzdGFja3MgaGVyZS4KLSAgICAgICAgaW50IHJldCA9IG1TdGFja1N1cGVydmlzb3Iuc3RhcnRBY3Rpdml0eU1heVdhaXQobnVsbCwgdWlkLCBjYWxsaW5nUGFja2FnZSwgaW50ZW50LAorICAgICAgICBpbnQgcmV0ID0gbUFjdGl2aXR5U3RhcnRlci5zdGFydEFjdGl2aXR5TWF5V2FpdChudWxsLCB1aWQsIGNhbGxpbmdQYWNrYWdlLCBpbnRlbnQsCiAgICAgICAgICAgICAgICAgcmVzb2x2ZWRUeXBlLCBudWxsLCBudWxsLCByZXN1bHRUbywgcmVzdWx0V2hvLCByZXF1ZXN0Q29kZSwgc3RhcnRGbGFncywKICAgICAgICAgICAgICAgICBudWxsLCBudWxsLCBudWxsLCBiT3B0aW9ucywgZmFsc2UsIHVzZXJJZCwgY29udGFpbmVyLCBpblRhc2spOwogICAgICAgICByZXR1cm4gcmV0OwpAQCAtNDM4OCw3ICs0NDY1LDcgQEAKICAgICAgICAgdXNlcklkID0gbVVzZXJDb250cm9sbGVyLmhhbmRsZUluY29taW5nVXNlcihCaW5kZXIuZ2V0Q2FsbGluZ1BpZCgpLCBCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpLAogICAgICAgICAgICAgICAgIHVzZXJJZCwgZmFsc2UsIEFMTE9XX0ZVTExfT05MWSwgInN0YXJ0QWN0aXZpdHkiLCBudWxsKTsKICAgICAgICAgLy8gVE9ETzogU3dpdGNoIHRvIHVzZXIgYXBwIHN0YWNrcyBoZXJlLgotICAgICAgICBpbnQgcmV0ID0gbVN0YWNrU3VwZXJ2aXNvci5zdGFydEFjdGl2aXRpZXMoY2FsbGVyLCAtMSwgY2FsbGluZ1BhY2thZ2UsIGludGVudHMsCisgICAgICAgIGludCByZXQgPSBtQWN0aXZpdHlTdGFydGVyLnN0YXJ0QWN0aXZpdGllcyhjYWxsZXIsIC0xLCBjYWxsaW5nUGFja2FnZSwgaW50ZW50cywKICAgICAgICAgICAgICAgICByZXNvbHZlZFR5cGVzLCByZXN1bHRUbywgYk9wdGlvbnMsIHVzZXJJZCk7CiAgICAgICAgIHJldHVybiByZXQ7CiAgICAgfQpAQCAtNDQwMCw3ICs0NDc3LDcgQEAKICAgICAgICAgdXNlcklkID0gbVVzZXJDb250cm9sbGVyLmhhbmRsZUluY29taW5nVXNlcihCaW5kZXIuZ2V0Q2FsbGluZ1BpZCgpLCBCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpLAogICAgICAgICAgICAgICAgIHVzZXJJZCwgZmFsc2UsIEFMTE9XX0ZVTExfT05MWSwgInN0YXJ0QWN0aXZpdHlJblBhY2thZ2UiLCBudWxsKTsKICAgICAgICAgLy8gVE9ETzogU3dpdGNoIHRvIHVzZXIgYXBwIHN0YWNrcyBoZXJlLgotICAgICAgICBpbnQgcmV0ID0gbVN0YWNrU3VwZXJ2aXNvci5zdGFydEFjdGl2aXRpZXMobnVsbCwgdWlkLCBjYWxsaW5nUGFja2FnZSwgaW50ZW50cywgcmVzb2x2ZWRUeXBlcywKKyAgICAgICAgaW50IHJldCA9IG1BY3Rpdml0eVN0YXJ0ZXIuc3RhcnRBY3Rpdml0aWVzKG51bGwsIHVpZCwgY2FsbGluZ1BhY2thZ2UsIGludGVudHMsIHJlc29sdmVkVHlwZXMsCiAgICAgICAgICAgICAgICAgcmVzdWx0VG8sIGJPcHRpb25zLCB1c2VySWQpOwogICAgICAgICByZXR1cm4gcmV0OwogICAgIH0KQEAgLTQ0MzYsNyArNDUxMyw3IEBACiAgICAgICAgICAgICBpZiAoY29uZmlnICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICByLmZyb3plbkJlZm9yZURlc3Ryb3kgPSB0cnVlOwogICAgICAgICAgICAgICAgIGlmICghdXBkYXRlQ29uZmlndXJhdGlvbkxvY2tlZChjb25maWcsIHIsIGZhbHNlKSkgewotICAgICAgICAgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLnJlc3VtZVRvcEFjdGl2aXRpZXNMb2NrZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgbVN0YWNrU3VwZXJ2aXNvci5yZXN1bWVGb2N1c2VkU3RhY2tUb3BBY3Rpdml0eUxvY2tlZCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEJpbmRlci5yZXN0b3JlQ2FsbGluZ0lkZW50aXR5KG9yaWdJZCk7CkBAIC00Nzc0LDEyICs0ODUxLDExIEBACiAgICAgICAgICAgICBmaW5pc2hJbnN0cnVtZW50YXRpb25Mb2NrZWQoYXBwLCBBY3Rpdml0eS5SRVNVTFRfQ0FOQ0VMRUQsIGluZm8pOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFyZXN0YXJ0aW5nICYmIGhhc1Zpc2libGVBY3Rpdml0aWVzICYmICFtU3RhY2tTdXBlcnZpc29yLnJlc3VtZVRvcEFjdGl2aXRpZXNMb2NrZWQoKSkgewotICAgICAgICAgICAgLy8gSWYgdGhlcmUgd2FzIG5vdGhpbmcgdG8gcmVzdW1lLCBhbmQgd2UgYXJlIG5vdCBhbHJlYWR5Ci0gICAgICAgICAgICAvLyByZXN0YXJ0aW5nIHRoaXMgcHJvY2VzcywgYnV0IHRoZXJlIGlzIGEgdmlzaWJsZSBhY3Rpdml0eSB0aGF0Ci0gICAgICAgICAgICAvLyBpcyBob3N0ZWQgYnkgdGhlIHByb2Nlc3MuLi4gIHRoZW4gbWFrZSBzdXJlIGFsbCB2aXNpYmxlCi0gICAgICAgICAgICAvLyBhY3Rpdml0aWVzIGFyZSBydW5uaW5nLCB0YWtpbmcgY2FyZSBvZiByZXN0YXJ0aW5nIHRoaXMKLSAgICAgICAgICAgIC8vIHByb2Nlc3MuCisgICAgICAgIGlmICghcmVzdGFydGluZyAmJiBoYXNWaXNpYmxlQWN0aXZpdGllcworICAgICAgICAgICAgICAgICYmICFtU3RhY2tTdXBlcnZpc29yLnJlc3VtZUZvY3VzZWRTdGFja1RvcEFjdGl2aXR5TG9ja2VkKCkpIHsKKyAgICAgICAgICAgIC8vIElmIHRoZXJlIHdhcyBub3RoaW5nIHRvIHJlc3VtZSwgYW5kIHdlIGFyZSBub3QgYWxyZWFkeSByZXN0YXJ0aW5nIHRoaXMgcHJvY2VzcywgYnV0CisgICAgICAgICAgICAvLyB0aGVyZSBpcyBhIHZpc2libGUgYWN0aXZpdHkgdGhhdCBpcyBob3N0ZWQgYnkgdGhlIHByb2Nlc3MuLi4gIHRoZW4gbWFrZSBzdXJlIGFsbAorICAgICAgICAgICAgLy8gdmlzaWJsZSBhY3Rpdml0aWVzIGFyZSBydW5uaW5nLCB0YWtpbmcgY2FyZSBvZiByZXN0YXJ0aW5nIHRoaXMgcHJvY2Vzcy4KICAgICAgICAgICAgIG1TdGFja1N1cGVydmlzb3IuZW5zdXJlQWN0aXZpdGllc1Zpc2libGVMb2NrZWQobnVsbCwgMCwgIVBSRVNFUlZFX1dJTkRPV1MpOwogICAgICAgICB9CiAgICAgfQpAQCAtNTgzNiw3ICs1OTEyLDcgQEAKICAgICAgICAgLy8gQ2xlYW4tdXAgZGlzYWJsZWQgYWN0aXZpdGllcy4KICAgICAgICAgaWYgKG1TdGFja1N1cGVydmlzb3IuZmluaXNoRGlzYWJsZWRQYWNrYWdlQWN0aXZpdGllc0xvY2tlZCgKICAgICAgICAgICAgICAgICBwYWNrYWdlTmFtZSwgZGlzYWJsZWRDbGFzc2VzLCB0cnVlLCBmYWxzZSwgdXNlcklkKSAmJiBtQm9vdGVkKSB7Ci0gICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLnJlc3VtZVRvcEFjdGl2aXRpZXNMb2NrZWQoKTsKKyAgICAgICAgICAgIG1TdGFja1N1cGVydmlzb3IucmVzdW1lRm9jdXNlZFN0YWNrVG9wQWN0aXZpdHlMb2NrZWQoKTsKICAgICAgICAgICAgIG1TdGFja1N1cGVydmlzb3Iuc2NoZWR1bGVJZGxlTG9ja2VkKCk7CiAgICAgICAgIH0KIApAQCAtNjAyNCw3ICs2MTAwLDcgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAobUJvb3RlZCkgewotICAgICAgICAgICAgICAgIG1TdGFja1N1cGVydmlzb3IucmVzdW1lVG9wQWN0aXZpdGllc0xvY2tlZCgpOworICAgICAgICAgICAgICAgIG1TdGFja1N1cGVydmlzb3IucmVzdW1lRm9jdXNlZFN0YWNrVG9wQWN0aXZpdHlMb2NrZWQoKTsKICAgICAgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLnNjaGVkdWxlSWRsZUxvY2tlZCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC02Njk5LDYgKzY3NzUsMTUgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgZmluYWwgdm9pZCBhY3Rpdml0eVJlbGF1bmNoZWQoSUJpbmRlciB0b2tlbikgeworICAgICAgICBmaW5hbCBsb25nIG9yaWdJZCA9IEJpbmRlci5jbGVhckNhbGxpbmdJZGVudGl0eSgpOworICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKKyAgICAgICAgICAgIG1TdGFja1N1cGVydmlzb3IuYWN0aXZpdHlSZWxhdW5jaGVkTG9ja2VkKHRva2VuKTsKKyAgICAgICAgfQorICAgICAgICBCaW5kZXIucmVzdG9yZUNhbGxpbmdJZGVudGl0eShvcmlnSWQpOworICAgIH0KKworICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIHJlcG9ydFNpemVDb25maWd1cmF0aW9ucyhJQmluZGVyIHRva2VuLCBpbnRbXSBob3Jpem9udGFsU2l6ZUNvbmZpZ3VyYXRpb24sCiAgICAgICAgICAgICBpbnRbXSB2ZXJ0aWNhbFNpemVDb25maWd1cmF0aW9ucywgaW50W10gc21hbGxlc3RTaXplQ29uZmlndXJhdGlvbnMpIHsKICAgICAgICAgaWYgKERFQlVHX0NPTkZJR1VSQVRJT04pIFNsb2cudihUQUcsICJSZXBvcnQgY29uZmlndXJhdGlvbjogIiArIHRva2VuICsgIiAiCkBAIC03MjIwLDcgKzczMDUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIkNhbid0IGZpbmQgYWN0aXZpdHkgZm9yIHRva2VuPSIgKyB0b2tlbik7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKCFyLmluZm8uc3VwcG9ydHNQaXApIHsKKyAgICAgICAgICAgICAgICBpZiAoIXIuc3VwcG9ydHNQaWN0dXJlSW5QaWN0dXJlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiZW50ZXJQaWN0dXJlSW5QaWN0dXJlTW9kZTogIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIlBpY3R1cmUtSW4tUGljdHVyZSBub3Qgc3VwcG9ydGVkIGZvciByPSIgKyByKTsKICAgICAgICAgICAgICAgICB9CkBAIC04MTkzLDYgKzgyNzgsMTggQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBJQmluZGVyIGdldFVyaVBlcm1pc3Npb25Pd25lckZvckFjdGl2aXR5KElCaW5kZXIgYWN0aXZpdHlUb2tlbikgeworICAgICAgICBlbmZvcmNlTm90SXNvbGF0ZWRDYWxsZXIoImdldFVyaVBlcm1pc3Npb25Pd25lckZvckFjdGl2aXR5Iik7CisgICAgICAgIHN5bmNocm9uaXplZCh0aGlzKSB7CisgICAgICAgICAgICBBY3Rpdml0eVJlY29yZCByID0gQWN0aXZpdHlSZWNvcmQuaXNJblN0YWNrTG9ja2VkKGFjdGl2aXR5VG9rZW4pOworICAgICAgICAgICAgaWYgKHIgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkFjdGl2aXR5IGRvZXMgbm90IGV4aXN0OyB0b2tlbj0iCisgICAgICAgICAgICAgICAgICAgICAgICArIGFjdGl2aXR5VG9rZW4pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHIuZ2V0VXJpUGVybWlzc2lvbnNMb2NrZWQoKS5nZXRFeHRlcm5hbFRva2VuTG9ja2VkKCk7CisgICAgICAgIH0KKyAgICB9CiAgICAgLyoqCiAgICAgICogQHBhcmFtIHVyaSBUaGlzIHVyaSBtdXN0IE5PVCBjb250YWluIGFuIGVtYmVkZGVkIHVzZXJJZC4KICAgICAgKiBAcGFyYW0gc291cmNlVXNlcklkIFRoZSB1c2VySWQgaW4gd2hpY2ggdGhlIHVyaSBpcyB0byBiZSByZXNvbHZlZC4KQEAgLTg3NjgsNiArODg2NSwyMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICgoZmxhZ3MgJiBBY3Rpdml0eU1hbmFnZXIuUkVDRU5UX0lOR09SRV9ET0NLRURfU1RBQ0tfVEFTS1MpICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ci5zdGFjayAhPSBudWxsICYmIHRyLnN0YWNrLmlzRG9ja2VkU3RhY2soKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERUJVR19SRUNFTlRTKSBTbG9nLmQoVEFHX1JFQ0VOVFMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2tpcHBpbmcsIGRvY2tlZCBzdGFjayB0YXNrOiAiICsgdHIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICgoZmxhZ3MgJiBBY3Rpdml0eU1hbmFnZXIuUkVDRU5UX0lOR09SRV9QSU5ORURfU1RBQ0tfVEFTS1MpICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ci5zdGFjayAhPSBudWxsICYmIHRyLnN0YWNrLmlzUGlubmVkU3RhY2soKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERUJVR19SRUNFTlRTKSBTbG9nLmQoVEFHX1JFQ0VOVFMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2tpcHBpbmcsIHBpbm5lZCBzdGFjayB0YXNrOiAiICsgdHIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGlmICh0ci5hdXRvUmVtb3ZlUmVjZW50cyAmJiB0ci5nZXRUb3BBY3Rpdml0eSgpID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IGluY2x1ZGUgYXV0byByZW1vdmUgdGFza3MgdGhhdCBhcmUgZmluaXNoZWQgb3IgZmluaXNoaW5nLgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHX1JFQ0VOVFMpIFNsb2cuZChUQUdfUkVDRU5UUywKQEAgLTg5MzEsMTUgKzkwNDIsMTQgQEAKICAgICAgICAgICAgICAgICB0YXNrLm1SZXNpemVhYmxlID0gcmVzaXplYWJsZTsKICAgICAgICAgICAgICAgICBtV2luZG93TWFuYWdlci5zZXRUYXNrUmVzaXplYWJsZSh0YXNrSWQsIHJlc2l6ZWFibGUpOwogICAgICAgICAgICAgICAgIG1TdGFja1N1cGVydmlzb3IuZW5zdXJlQWN0aXZpdGllc1Zpc2libGVMb2NrZWQobnVsbCwgMCwgIVBSRVNFUlZFX1dJTkRPV1MpOwotICAgICAgICAgICAgICAgIG1TdGFja1N1cGVydmlzb3IucmVzdW1lVG9wQWN0aXZpdGllc0xvY2tlZCgpOworICAgICAgICAgICAgICAgIG1TdGFja1N1cGVydmlzb3IucmVzdW1lRm9jdXNlZFN0YWNrVG9wQWN0aXZpdHlMb2NrZWQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIHJlc2l6ZVRhc2soaW50IHRhc2tJZCwgUmVjdCBib3VuZHMsIGludCByZXNpemVNb2RlKSB7Ci0gICAgICAgIGVuZm9yY2VDYWxsaW5nUGVybWlzc2lvbihhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uTUFOQUdFX0FDVElWSVRZX1NUQUNLUywKLSAgICAgICAgICAgICAgICAicmVzaXplVGFzaygpIik7CisgICAgICAgIGVuZm9yY2VDYWxsaW5nUGVybWlzc2lvbihNQU5BR0VfQUNUSVZJVFlfU1RBQ0tTLCAicmVzaXplVGFzaygpIik7CiAgICAgICAgIGxvbmcgaWRlbnQgPSBCaW5kZXIuY2xlYXJDYWxsaW5nSWRlbnRpdHkoKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgewpAQCAtODk4OSw4ICs5MDk5LDcgQEAKIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBSZWN0IGdldFRhc2tCb3VuZHMoaW50IHRhc2tJZCkgewotICAgICAgICBlbmZvcmNlQ2FsbGluZ1Blcm1pc3Npb24oYW5kcm9pZC5NYW5pZmVzdC5wZXJtaXNzaW9uLk1BTkFHRV9BQ1RJVklUWV9TVEFDS1MsCi0gICAgICAgICAgICAgICAgImdldFRhc2tCb3VuZHMoKSIpOworICAgICAgICBlbmZvcmNlQ2FsbGluZ1Blcm1pc3Npb24oTUFOQUdFX0FDVElWSVRZX1NUQUNLUywgImdldFRhc2tCb3VuZHMoKSIpOwogICAgICAgICBsb25nIGlkZW50ID0gQmluZGVyLmNsZWFyQ2FsbGluZ0lkZW50aXR5KCk7CiAgICAgICAgIFJlY3QgcmVjdCA9IG5ldyBSZWN0KCk7CiAgICAgICAgIHRyeSB7CkBAIC05MjkyLDggKzk0MDEsNyBAQAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBJQWN0aXZpdHlDb250YWluZXIgY3JlYXRlVmlydHVhbEFjdGl2aXR5Q29udGFpbmVyKElCaW5kZXIgcGFyZW50QWN0aXZpdHlUb2tlbiwKICAgICAgICAgICAgIElBY3Rpdml0eUNvbnRhaW5lckNhbGxiYWNrIGNhbGxiYWNrKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgZW5mb3JjZUNhbGxpbmdQZXJtaXNzaW9uKGFuZHJvaWQuTWFuaWZlc3QucGVybWlzc2lvbi5NQU5BR0VfQUNUSVZJVFlfU1RBQ0tTLAotICAgICAgICAgICAgICAgICJjcmVhdGVBY3Rpdml0eUNvbnRhaW5lcigpIik7CisgICAgICAgIGVuZm9yY2VDYWxsaW5nUGVybWlzc2lvbihNQU5BR0VfQUNUSVZJVFlfU1RBQ0tTLCAiY3JlYXRlQWN0aXZpdHlDb250YWluZXIoKSIpOwogICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKICAgICAgICAgICAgIGlmIChwYXJlbnRBY3Rpdml0eVRva2VuID09IG51bGwpIHsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJwYXJlbnQgdG9rZW4gbXVzdCBub3QgYmUgbnVsbCIpOwpAQCAtOTMxMSw4ICs5NDE5LDcgQEAKIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIGRlbGV0ZUFjdGl2aXR5Q29udGFpbmVyKElBY3Rpdml0eUNvbnRhaW5lciBjb250YWluZXIpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICBlbmZvcmNlQ2FsbGluZ1Blcm1pc3Npb24oYW5kcm9pZC5NYW5pZmVzdC5wZXJtaXNzaW9uLk1BTkFHRV9BQ1RJVklUWV9TVEFDS1MsCi0gICAgICAgICAgICAgICAgImRlbGV0ZUFjdGl2aXR5Q29udGFpbmVyKCkiKTsKKyAgICAgICAgZW5mb3JjZUNhbGxpbmdQZXJtaXNzaW9uKE1BTkFHRV9BQ1RJVklUWV9TVEFDS1MsICJkZWxldGVBY3Rpdml0eUNvbnRhaW5lcigpIik7CiAgICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgewogICAgICAgICAgICAgbVN0YWNrU3VwZXJ2aXNvci5kZWxldGVBY3Rpdml0eUNvbnRhaW5lcihjb250YWluZXIpOwogICAgICAgICB9CkBAIC05MzIwLDggKzk0MjcsNyBAQAogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIElBY3Rpdml0eUNvbnRhaW5lciBjcmVhdGVTdGFja09uRGlzcGxheShpbnQgZGlzcGxheUlkKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgZW5mb3JjZUNhbGxpbmdQZXJtaXNzaW9uKGFuZHJvaWQuTWFuaWZlc3QucGVybWlzc2lvbi5NQU5BR0VfQUNUSVZJVFlfU1RBQ0tTLAotICAgICAgICAgICAgICAgICJjcmVhdGVTdGFja09uRGlzcGxheSgpIik7CisgICAgICAgIGVuZm9yY2VDYWxsaW5nUGVybWlzc2lvbihNQU5BR0VfQUNUSVZJVFlfU1RBQ0tTLCAiY3JlYXRlU3RhY2tPbkRpc3BsYXkoKSIpOwogICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKICAgICAgICAgICAgIGZpbmFsIGludCBzdGFja0lkID0gbVN0YWNrU3VwZXJ2aXNvci5nZXROZXh0U3RhY2tJZCgpOwogICAgICAgICAgICAgZmluYWwgQWN0aXZpdHlTdGFjayBzdGFjayA9CkBAIC05MzgxLDggKzk0ODcsNyBAQAogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgbW92ZVRhc2tUb1N0YWNrKGludCB0YXNrSWQsIGludCBzdGFja0lkLCBib29sZWFuIHRvVG9wKSB7Ci0gICAgICAgIGVuZm9yY2VDYWxsaW5nUGVybWlzc2lvbihhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uTUFOQUdFX0FDVElWSVRZX1NUQUNLUywKLSAgICAgICAgICAgICAgICAibW92ZVRhc2tUb1N0YWNrKCkiKTsKKyAgICAgICAgZW5mb3JjZUNhbGxpbmdQZXJtaXNzaW9uKE1BTkFHRV9BQ1RJVklUWV9TVEFDS1MsICJtb3ZlVGFza1RvU3RhY2soKSIpOwogICAgICAgICBpZiAoc3RhY2tJZCA9PSBIT01FX1NUQUNLX0lEKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgICAgICAibW92ZVRhc2tUb1N0YWNrOiBBdHRlbXB0IHRvIG1vdmUgdGFzayAiICsgdGFza0lkICsgIiB0byBob21lIHN0YWNrIik7CkBAIC05NDE3LDggKzk1MjIsNyBAQAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIG1vdmVUYXNrVG9Eb2NrZWRTdGFjayhpbnQgdGFza0lkLCBpbnQgY3JlYXRlTW9kZSwgYm9vbGVhbiB0b1RvcCwgYm9vbGVhbiBhbmltYXRlLAogICAgICAgICAgICAgUmVjdCBpbml0aWFsQm91bmRzKSB7Ci0gICAgICAgIGVuZm9yY2VDYWxsaW5nUGVybWlzc2lvbihhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uTUFOQUdFX0FDVElWSVRZX1NUQUNLUywKLSAgICAgICAgICAgICAgICAibW92ZVRhc2tUb0RvY2tlZFN0YWNrKCkiKTsKKyAgICAgICAgZW5mb3JjZUNhbGxpbmdQZXJtaXNzaW9uKE1BTkFHRV9BQ1RJVklUWV9TVEFDS1MsICJtb3ZlVGFza1RvRG9ja2VkU3RhY2soKSIpOwogICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKICAgICAgICAgICAgIGxvbmcgaWRlbnQgPSBCaW5kZXIuY2xlYXJDYWxsaW5nSWRlbnRpdHkoKTsKICAgICAgICAgICAgIHRyeSB7CkBAIC05NDQ0LDggKzk1NDgsNyBAQAogICAgICAqLwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBib29sZWFuIG1vdmVUb3BBY3Rpdml0eVRvUGlubmVkU3RhY2soaW50IHN0YWNrSWQsIFJlY3QgYm91bmRzKSB7Ci0gICAgICAgIGVuZm9yY2VDYWxsaW5nUGVybWlzc2lvbihhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uTUFOQUdFX0FDVElWSVRZX1NUQUNLUywKLSAgICAgICAgICAgICAgICAibW92ZVRvcEFjdGl2aXR5VG9QaW5uZWRTdGFjaygpIik7CisgICAgICAgIGVuZm9yY2VDYWxsaW5nUGVybWlzc2lvbihNQU5BR0VfQUNUSVZJVFlfU1RBQ0tTLCAibW92ZVRvcEFjdGl2aXR5VG9QaW5uZWRTdGFjaygpIik7CiAgICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgewogICAgICAgICAgICAgaWYgKCFtU3VwcG9ydHNQaWN0dXJlSW5QaWN0dXJlKSB7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigibW92ZVRvcEFjdGl2aXR5VG9QaW5uZWRTdGFjazoiCkBAIC05NDYzLDEzICs5NTY2LDMxIEBACiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCByZXNpemVTdGFjayhpbnQgc3RhY2tJZCwgUmVjdCBib3VuZHMsIGJvb2xlYW4gYWxsb3dSZXNpemVJbkRvY2tlZE1vZGUpIHsKLSAgICAgICAgZW5mb3JjZUNhbGxpbmdQZXJtaXNzaW9uKGFuZHJvaWQuTWFuaWZlc3QucGVybWlzc2lvbi5NQU5BR0VfQUNUSVZJVFlfU1RBQ0tTLAotICAgICAgICAgICAgICAgICJyZXNpemVTdGFjaygpIik7CisgICAgICAgIGVuZm9yY2VDYWxsaW5nUGVybWlzc2lvbihNQU5BR0VfQUNUSVZJVFlfU1RBQ0tTLCAicmVzaXplU3RhY2soKSIpOwogICAgICAgICBsb25nIGlkZW50ID0gQmluZGVyLmNsZWFyQ2FsbGluZ0lkZW50aXR5KCk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKICAgICAgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLnJlc2l6ZVN0YWNrTG9ja2VkKAotICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tJZCwgYm91bmRzLCAhUFJFU0VSVkVfV0lORE9XUywgYWxsb3dSZXNpemVJbkRvY2tlZE1vZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tJZCwgYm91bmRzLCBudWxsIC8qIHRlbXBUYXNrQm91bmRzICovLCBudWxsIC8qIHRlbXBUYXNrSW5zZXRCb3VuZHMgKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAhUFJFU0VSVkVfV0lORE9XUywgYWxsb3dSZXNpemVJbkRvY2tlZE1vZGUpOworICAgICAgICAgICAgfQorICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgQmluZGVyLnJlc3RvcmVDYWxsaW5nSWRlbnRpdHkoaWRlbnQpOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgcmVzaXplRG9ja2VkU3RhY2soUmVjdCBkb2NrZWRCb3VuZHMsIFJlY3QgdGVtcERvY2tlZFRhc2tCb3VuZHMsCisgICAgICAgICAgICBSZWN0IHRlbXBEb2NrZWRUYXNrSW5zZXRCb3VuZHMsCisgICAgICAgICAgICBSZWN0IHRlbXBPdGhlclRhc2tCb3VuZHMsIFJlY3QgdGVtcE90aGVyVGFza0luc2V0Qm91bmRzKSB7CisgICAgICAgIGVuZm9yY2VDYWxsaW5nUGVybWlzc2lvbihhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uTUFOQUdFX0FDVElWSVRZX1NUQUNLUywKKyAgICAgICAgICAgICAgICAicmVzaXplRG9ja2VkU3RhY2soKSIpOworICAgICAgICBsb25nIGlkZW50ID0gQmluZGVyLmNsZWFyQ2FsbGluZ0lkZW50aXR5KCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKKyAgICAgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLnJlc2l6ZURvY2tlZFN0YWNrTG9ja2VkKGRvY2tlZEJvdW5kcywgdGVtcERvY2tlZFRhc2tCb3VuZHMsCisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wRG9ja2VkVGFza0luc2V0Qm91bmRzLCB0ZW1wT3RoZXJUYXNrQm91bmRzLCB0ZW1wT3RoZXJUYXNrSW5zZXRCb3VuZHMsCisgICAgICAgICAgICAgICAgICAgICAgICBQUkVTRVJWRV9XSU5ET1dTKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIEJpbmRlci5yZXN0b3JlQ2FsbGluZ0lkZW50aXR5KGlkZW50KTsKQEAgLTk0NzgsOCArOTU5OSw3IEBACiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBwb3NpdGlvblRhc2tJblN0YWNrKGludCB0YXNrSWQsIGludCBzdGFja0lkLCBpbnQgcG9zaXRpb24pIHsKLSAgICAgICAgZW5mb3JjZUNhbGxpbmdQZXJtaXNzaW9uKGFuZHJvaWQuTWFuaWZlc3QucGVybWlzc2lvbi5NQU5BR0VfQUNUSVZJVFlfU1RBQ0tTLAotICAgICAgICAgICAgICAgICJwb3NpdGlvblRhc2tJblN0YWNrKCkiKTsKKyAgICAgICAgZW5mb3JjZUNhbGxpbmdQZXJtaXNzaW9uKE1BTkFHRV9BQ1RJVklUWV9TVEFDS1MsICJwb3NpdGlvblRhc2tJblN0YWNrKCkiKTsKICAgICAgICAgaWYgKHN0YWNrSWQgPT0gSE9NRV9TVEFDS19JRCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgICAgInBvc2l0aW9uVGFza0luU3RhY2s6IEF0dGVtcHQgdG8gY2hhbmdlIHRoZSBwb3NpdGlvbiBvZiB0YXNrICIKQEAgLTk1MDAsOCArOTYyMCw3IEBACiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgTGlzdDxTdGFja0luZm8+IGdldEFsbFN0YWNrSW5mb3MoKSB7Ci0gICAgICAgIGVuZm9yY2VDYWxsaW5nUGVybWlzc2lvbihhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uTUFOQUdFX0FDVElWSVRZX1NUQUNLUywKLSAgICAgICAgICAgICAgICAiZ2V0QWxsU3RhY2tJbmZvcygpIik7CisgICAgICAgIGVuZm9yY2VDYWxsaW5nUGVybWlzc2lvbihNQU5BR0VfQUNUSVZJVFlfU1RBQ0tTLCAiZ2V0QWxsU3RhY2tJbmZvcygpIik7CiAgICAgICAgIGxvbmcgaWRlbnQgPSBCaW5kZXIuY2xlYXJDYWxsaW5nSWRlbnRpdHkoKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgewpAQCAtOTUxNCw4ICs5NjMzLDcgQEAKIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBTdGFja0luZm8gZ2V0U3RhY2tJbmZvKGludCBzdGFja0lkKSB7Ci0gICAgICAgIGVuZm9yY2VDYWxsaW5nUGVybWlzc2lvbihhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uTUFOQUdFX0FDVElWSVRZX1NUQUNLUywKLSAgICAgICAgICAgICAgICAiZ2V0U3RhY2tJbmZvKCkiKTsKKyAgICAgICAgZW5mb3JjZUNhbGxpbmdQZXJtaXNzaW9uKE1BTkFHRV9BQ1RJVklUWV9TVEFDS1MsICJnZXRTdGFja0luZm8oKSIpOwogICAgICAgICBsb25nIGlkZW50ID0gQmluZGVyLmNsZWFyQ2FsbGluZ0lkZW50aXR5KCk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKQEAgLTk1MjgsOCArOTY0Niw3IEBACiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgYm9vbGVhbiBpc0luSG9tZVN0YWNrKGludCB0YXNrSWQpIHsKLSAgICAgICAgZW5mb3JjZUNhbGxpbmdQZXJtaXNzaW9uKGFuZHJvaWQuTWFuaWZlc3QucGVybWlzc2lvbi5NQU5BR0VfQUNUSVZJVFlfU1RBQ0tTLAotICAgICAgICAgICAgICAgICJnZXRTdGFja0luZm8oKSIpOworICAgICAgICBlbmZvcmNlQ2FsbGluZ1Blcm1pc3Npb24oTUFOQUdFX0FDVElWSVRZX1NUQUNLUywgImdldFN0YWNrSW5mbygpIik7CiAgICAgICAgIGxvbmcgaWRlbnQgPSBCaW5kZXIuY2xlYXJDYWxsaW5nSWRlbnRpdHkoKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgewpAQCAtOTY0Myw4ICs5NzYwLDcgQEAKIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIHN0YXJ0TG9ja1Rhc2tNb2RlT25DdXJyZW50KCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIGVuZm9yY2VDYWxsaW5nUGVybWlzc2lvbihhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uTUFOQUdFX0FDVElWSVRZX1NUQUNLUywKLSAgICAgICAgICAgICAgICAic3RhcnRMb2NrVGFza01vZGVPbkN1cnJlbnQiKTsKKyAgICAgICAgZW5mb3JjZUNhbGxpbmdQZXJtaXNzaW9uKE1BTkFHRV9BQ1RJVklUWV9TVEFDS1MsICJzdGFydExvY2tUYXNrTW9kZU9uQ3VycmVudCIpOwogICAgICAgICBsb25nIGlkZW50ID0gQmluZGVyLmNsZWFyQ2FsbGluZ0lkZW50aXR5KCk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKQEAgLTk2OTYsOCArOTgxMiw3IEBACiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBzdG9wTG9ja1Rhc2tNb2RlT25DdXJyZW50KCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIGVuZm9yY2VDYWxsaW5nUGVybWlzc2lvbihhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uTUFOQUdFX0FDVElWSVRZX1NUQUNLUywKLSAgICAgICAgICAgICAgICAic3RvcExvY2tUYXNrTW9kZU9uQ3VycmVudCIpOworICAgICAgICBlbmZvcmNlQ2FsbGluZ1Blcm1pc3Npb24oTUFOQUdFX0FDVElWSVRZX1NUQUNLUywgInN0b3BMb2NrVGFza01vZGVPbkN1cnJlbnQiKTsKICAgICAgICAgbG9uZyBpZGVudCA9IEJpbmRlci5jbGVhckNhbGxpbmdJZGVudGl0eSgpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgc3RvcExvY2tUYXNrTW9kZSgpOwpAQCAtOTczNiw5ICs5ODUxLDEwIEBACiAgICAgcHJpdmF0ZSBmaW5hbCBMaXN0PFByb3ZpZGVySW5mbz4gZ2VuZXJhdGVBcHBsaWNhdGlvblByb3ZpZGVyc0xvY2tlZChQcm9jZXNzUmVjb3JkIGFwcCkgewogICAgICAgICBMaXN0PFByb3ZpZGVySW5mbz4gcHJvdmlkZXJzID0gbnVsbDsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIFBhcmNlbGVkTGlzdFNsaWNlPFByb3ZpZGVySW5mbz4gc2xpY2UgPSBBcHBHbG9iYWxzLmdldFBhY2thZ2VNYW5hZ2VyKCkuCi0gICAgICAgICAgICAgICAgcXVlcnlDb250ZW50UHJvdmlkZXJzKGFwcC5wcm9jZXNzTmFtZSwgYXBwLnVpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFNUT0NLX1BNX0ZMQUdTIHwgUGFja2FnZU1hbmFnZXIuR0VUX1VSSV9QRVJNSVNTSU9OX1BBVFRFUk5TKTsKKyAgICAgICAgICAgIFBhcmNlbGVkTGlzdFNsaWNlPFByb3ZpZGVySW5mbz4gc2xpY2UgPSBBcHBHbG9iYWxzLmdldFBhY2thZ2VNYW5hZ2VyKCkKKyAgICAgICAgICAgICAgICAgICAgLnF1ZXJ5Q29udGVudFByb3ZpZGVycyhhcHAucHJvY2Vzc05hbWUsIGFwcC51aWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RPQ0tfUE1fRkxBR1MgfCBQYWNrYWdlTWFuYWdlci5HRVRfVVJJX1BFUk1JU1NJT05fUEFUVEVSTlMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUGFja2FnZU1hbmFnZXIuTUFUQ0hfREVCVUdfVFJJQUdFRF9NSVNTSU5HKTsKICAgICAgICAgICAgIHByb3ZpZGVycyA9IHNsaWNlICE9IG51bGwgPyBzbGljZS5nZXRMaXN0KCkgOiBudWxsOwogICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZXgpIHsKICAgICAgICAgfQpAQCAtMTA5NjksNiArMTEwODUsMTIgQEAKICAgICAgICAgbUhhbmRsZXIuc2VuZE1lc3NhZ2VEZWxheWVkKG5tc2csIE5PVElGWV9UQVNLX1NUQUNLX0NIQU5HRV9MSVNURU5FUlNfREVMQVkpOwogICAgIH0KIAorICAgIC8qKiBOb3RpZmllcyBhbGwgbGlzdGVuZXJzIHdoZW4gYW4gQWN0aXZpdHkgaXMgcGlubmVkLiAqLworICAgIHZvaWQgbm90aWZ5QWN0aXZpdHlQaW5uZWRMb2NrZWQoKSB7CisgICAgICAgIG1IYW5kbGVyLnJlbW92ZU1lc3NhZ2VzKE5PVElGWV9BQ1RJVklUWV9QSU5ORURfTElTVEVORVJTX01TRyk7CisgICAgICAgIG1IYW5kbGVyLm9idGFpbk1lc3NhZ2UoTk9USUZZX0FDVElWSVRZX1BJTk5FRF9MSVNURU5FUlNfTVNHKS5zZW5kVG9UYXJnZXQoKTsKKyAgICB9CisKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBub3RpZnlDbGVhcnRleHROZXR3b3JrKGludCB1aWQsIGJ5dGVbXSBmaXJzdFBhY2tldCkgewogICAgICAgICBtSGFuZGxlci5vYnRhaW5NZXNzYWdlKE5PVElGWV9DTEVBUlRFWFRfTkVUV09SS19NU0csIHVpZCwgMCwgZmlyc3RQYWNrZXQpLnNlbmRUb1RhcmdldCgpOwpAQCAtMTE3MTIsNiArMTE4MzQsMjYgQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHNldFZyTW9kZShJQmluZGVyIHRva2VuLCBib29sZWFuIGVuYWJsZWQpIHsKKyAgICAgICAgaWYgKCFtQ29udGV4dC5nZXRQYWNrYWdlTWFuYWdlcigpLmhhc1N5c3RlbUZlYXR1cmUoUGFja2FnZU1hbmFnZXIuRkVBVFVSRV9WUl9NT0RFKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCJWUiBtb2RlIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBkZXZpY2UhIik7CisgICAgICAgIH0KKworICAgICAgICBzeW5jaHJvbml6ZWQodGhpcykgeworICAgICAgICAgICAgZmluYWwgQWN0aXZpdHlSZWNvcmQgciA9IEFjdGl2aXR5UmVjb3JkLmlzSW5TdGFja0xvY2tlZCh0b2tlbik7CisgICAgICAgICAgICBpZiAociA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgci5pc1ZyQWN0aXZpdHkgPSBlbmFibGVkOworCisgICAgICAgICAgICAvLyBVcGRhdGUgYXNzb2NpYXRlZCBzdGF0ZSBpZiB0aGlzIGFjdGl2aXR5IGlzIGN1cnJlbnRseSBmb2N1c2VkCisgICAgICAgICAgICBpZiAociA9PSBtRm9jdXNlZEFjdGl2aXR5KSB7CisgICAgICAgICAgICAgICAgYXBwbHlVcGRhdGVWck1vZGVMb2NrZWQocik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKICAgICBwdWJsaWMgYm9vbGVhbiBpc1RvcEFjdGl2aXR5SW1tZXJzaXZlKCkgewogICAgICAgICBlbmZvcmNlTm90SXNvbGF0ZWRDYWxsZXIoInN0YXJ0QWN0aXZpdHkiKTsKICAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7CkBAIC0xMjA2NSw3ICsxMjIwNyw5IEBACiAgICAgcHJpdmF0ZSB2b2lkIHJldHJpZXZlU2V0dGluZ3MoKSB7CiAgICAgICAgIGZpbmFsIENvbnRlbnRSZXNvbHZlciByZXNvbHZlciA9IG1Db250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpOwogICAgICAgICBmaW5hbCBib29sZWFuIGZyZWVmb3JtV2luZG93TWFuYWdlbWVudCA9Ci0gICAgICAgICAgICAgICAgbUNvbnRleHQuZ2V0UGFja2FnZU1hbmFnZXIoKS5oYXNTeXN0ZW1GZWF0dXJlKEZFQVRVUkVfRlJFRUZPUk1fV0lORE9XX01BTkFHRU1FTlQpOworICAgICAgICAgICAgICAgIG1Db250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCkuaGFzU3lzdGVtRmVhdHVyZShGRUFUVVJFX0ZSRUVGT1JNX1dJTkRPV19NQU5BR0VNRU5UKQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgU2V0dGluZ3MuR2xvYmFsLmdldEludCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZXIsIERFVkVMT1BNRU5UX0VOQUJMRV9GUkVFRk9STV9XSU5ET1dTX1NVUFBPUlQsIDApICE9IDA7CiAgICAgICAgIGZpbmFsIGJvb2xlYW4gc3VwcG9ydHNQaWN0dXJlSW5QaWN0dXJlID0KICAgICAgICAgICAgICAgICBtQ29udGV4dC5nZXRQYWNrYWdlTWFuYWdlcigpLmhhc1N5c3RlbUZlYXR1cmUoRkVBVFVSRV9QSUNUVVJFX0lOX1BJQ1RVUkUpOwogCkBAIC0xMjA3NCw5ICsxMjIxOCw4IEBACiAgICAgICAgIGZpbmFsIGJvb2xlYW4gYWx3YXlzRmluaXNoQWN0aXZpdGllcyA9CiAgICAgICAgICAgICAgICAgU2V0dGluZ3MuR2xvYmFsLmdldEludChyZXNvbHZlciwgQUxXQVlTX0ZJTklTSF9BQ1RJVklUSUVTLCAwKSAhPSAwOwogICAgICAgICBmaW5hbCBib29sZWFuIGZvcmNlUnRsID0gU2V0dGluZ3MuR2xvYmFsLmdldEludChyZXNvbHZlciwgREVWRUxPUE1FTlRfRk9SQ0VfUlRMLCAwKSAhPSAwOwotICAgICAgICBmaW5hbCBpbnQgZGVmYXVsdEZvcmNlUmVzaXphYmxlID0gQnVpbGQuSVNfREVCVUdHQUJMRSA/IDEgOiAwOwogICAgICAgICBmaW5hbCBib29sZWFuIGZvcmNlUmVzaXphYmxlID0gU2V0dGluZ3MuR2xvYmFsLmdldEludCgKLSAgICAgICAgICAgICAgICByZXNvbHZlciwgREVWRUxPUE1FTlRfRk9SQ0VfUkVTSVpBQkxFX0FDVElWSVRJRVMsIGRlZmF1bHRGb3JjZVJlc2l6YWJsZSkgIT0gMDsKKyAgICAgICAgICAgICAgICByZXNvbHZlciwgREVWRUxPUE1FTlRfRk9SQ0VfUkVTSVpBQkxFX0FDVElWSVRJRVMsIDApICE9IDA7CiAgICAgICAgIC8vIFRyYW5zZmVyIGFueSBnbG9iYWwgc2V0dGluZyBmb3IgZm9yY2luZyBSVEwgbGF5b3V0LCBpbnRvIGEgU3lzdGVtIFByb3BlcnR5CiAgICAgICAgIFN5c3RlbVByb3BlcnRpZXMuc2V0KERFVkVMT1BNRU5UX0ZPUkNFX1JUTCwgZm9yY2VSdGwgPyAiMSI6IjAiKTsKIApAQCAtMTI1MTksNyArMTI2NjIsNyBAQAogICAgICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgICAgICBCaW5kZXIucmVzdG9yZUNhbGxpbmdJZGVudGl0eShpZGVudCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLnJlc3VtZVRvcEFjdGl2aXRpZXNMb2NrZWQoKTsKKyAgICAgICAgICAgIG1TdGFja1N1cGVydmlzb3IucmVzdW1lRm9jdXNlZFN0YWNrVG9wQWN0aXZpdHlMb2NrZWQoKTsKICAgICAgICAgICAgIG1Vc2VyQ29udHJvbGxlci5zZW5kVXNlclN3aXRjaEJyb2FkY2FzdHNMb2NrZWQoLTEsIGN1cnJlbnRVc2VySWQpOwogICAgICAgICB9CiAgICAgfQpAQCAtMTI2MzAsMTAgKzEyNzczLDEwIEBACiAgICAgICAgICAgICAgICAgLy8gYW5ub3kgdGhlIHVzZXIgcmVwZWF0ZWRseS4gIFVubGVzcyBpdCBpcyBwZXJzaXN0ZW50LCBzaW5jZSB0aG9zZQogICAgICAgICAgICAgICAgIC8vIHByb2Nlc3NlcyBydW4gY3JpdGljYWwgY29kZS4KICAgICAgICAgICAgICAgICByZW1vdmVQcm9jZXNzTG9ja2VkKGFwcCwgZmFsc2UsIGZhbHNlLCAiY3Jhc2giKTsKLSAgICAgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLnJlc3VtZVRvcEFjdGl2aXRpZXNMb2NrZWQoKTsKKyAgICAgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLnJlc3VtZUZvY3VzZWRTdGFja1RvcEFjdGl2aXR5TG9ja2VkKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbVN0YWNrU3VwZXJ2aXNvci5yZXN1bWVUb3BBY3Rpdml0aWVzTG9ja2VkKCk7CisgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLnJlc3VtZUZvY3VzZWRTdGFja1RvcEFjdGl2aXR5TG9ja2VkKCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLmZpbmlzaFRvcFJ1bm5pbmdBY3Rpdml0eUxvY2tlZChhcHAsIHJlYXNvbik7CiAgICAgICAgIH0KQEAgLTE0NzI3LDcgKzE0ODcwLDcgQEAKICAgICAgICAgICAgIGludCBkdW1wVWlkID0gLTI7CiAgICAgICAgICAgICBpZiAoZHVtcFBhY2thZ2UgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIGR1bXBVaWQgPSBtQ29udGV4dC5nZXRQYWNrYWdlTWFuYWdlcigpLmdldFBhY2thZ2VVaWQoZHVtcFBhY2thZ2UsIDApOworICAgICAgICAgICAgICAgICAgICBkdW1wVWlkID0gbUNvbnRleHQuZ2V0UGFja2FnZU1hbmFnZXIoKS5nZXRQYWNrYWdlVWlkQXNVc2VyKGR1bXBQYWNrYWdlLCAwKTsKICAgICAgICAgICAgICAgICB9IGNhdGNoIChOYW1lTm90Rm91bmRFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgICAgICBkdW1wVWlkID0gLTE7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTY5MjUsNiArMTcwNjgsOSBAQAogCiAgICAgcHJpdmF0ZSBMaXN0PFJlc29sdmVJbmZvPiBjb2xsZWN0UmVjZWl2ZXJDb21wb25lbnRzKEludGVudCBpbnRlbnQsIFN0cmluZyByZXNvbHZlZFR5cGUsCiAgICAgICAgICAgICBpbnQgY2FsbGluZ1VpZCwgaW50W10gdXNlcnMpIHsKKyAgICAgICAgLy8gVE9ETzogY29tZSBiYWNrIGFuZCByZW1vdmUgdGhpcyBhc3N1bXB0aW9uIHRvIHRyaWFnZSBhbGwgYnJvYWRjYXN0cworICAgICAgICBpbnQgcG1GbGFncyA9IFNUT0NLX1BNX0ZMQUdTIHwgUGFja2FnZU1hbmFnZXIuTUFUQ0hfREVCVUdfVFJJQUdFRF9NSVNTSU5HOworCiAgICAgICAgIExpc3Q8UmVzb2x2ZUluZm8+IHJlY2VpdmVycyA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBIYXNoU2V0PENvbXBvbmVudE5hbWU+IHNpbmdsZVVzZXJSZWNlaXZlcnMgPSBudWxsOwpAQCAtMTY5MzcsNyArMTcwODMsNyBAQAogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgTGlzdDxSZXNvbHZlSW5mbz4gbmV3UmVjZWl2ZXJzID0gQXBwR2xvYmFscy5nZXRQYWNrYWdlTWFuYWdlcigpCi0gICAgICAgICAgICAgICAgICAgICAgICAucXVlcnlJbnRlbnRSZWNlaXZlcnMoaW50ZW50LCByZXNvbHZlZFR5cGUsIFNUT0NLX1BNX0ZMQUdTLCB1c2VyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC5xdWVyeUludGVudFJlY2VpdmVycyhpbnRlbnQsIHJlc29sdmVkVHlwZSwgcG1GbGFncywgdXNlcik7CiAgICAgICAgICAgICAgICAgaWYgKHVzZXIgIT0gVXNlckhhbmRsZS5VU0VSX1NZU1RFTSAmJiBuZXdSZWNlaXZlcnMgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIG5vdCB0aGUgc3lzdGVtIHVzZXIsIHdlIG5lZWQgdG8gY2hlY2sgZm9yCiAgICAgICAgICAgICAgICAgICAgIC8vIGFueSByZWNlaXZlcnMgdGhhdCBzaG91bGQgYmUgZmlsdGVyZWQgb3V0LgpAQCAtMTcwNjEsNiArMTcyMDcsOCBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKKyAgICAgICAgLy8gVmVyaWZ5IHRoYXQgcHJvdGVjdGVkIGJyb2FkY2FzdHMgYXJlIG9ubHkgYmVpbmcgc2VudCBieSBzeXN0ZW0gY29kZSwKKyAgICAgICAgLy8gYW5kIHRoYXQgc3lzdGVtIGNvZGUgaXMgb25seSBzZW5kaW5nIHByb3RlY3RlZCBicm9hZGNhc3RzLgogICAgICAgICBmaW5hbCBTdHJpbmcgYWN0aW9uID0gaW50ZW50LmdldEFjdGlvbigpOwogICAgICAgICBmaW5hbCBib29sZWFuIGlzUHJvdGVjdGVkQnJvYWRjYXN0OwogICAgICAgICB0cnkgewpAQCAtMTcwNzAsMzUgKzE3MjE4LDQ3IEBACiAgICAgICAgICAgICByZXR1cm4gQWN0aXZpdHlNYW5hZ2VyLkJST0FEQ0FTVF9TVUNDRVNTOwogICAgICAgICB9CiAKLSAgICAgICAgLyoKLSAgICAgICAgICogUHJldmVudCBub24tc3lzdGVtIGNvZGUgKGRlZmluZWQgaGVyZSB0byBiZSBub24tcGVyc2lzdGVudAotICAgICAgICAgKiBwcm9jZXNzZXMpIGZyb20gc2VuZGluZyBwcm90ZWN0ZWQgYnJvYWRjYXN0cy4KLSAgICAgICAgICovCi0gICAgICAgIGludCBjYWxsaW5nQXBwSWQgPSBVc2VySGFuZGxlLmdldEFwcElkKGNhbGxpbmdVaWQpOwotICAgICAgICBpZiAoY2FsbGluZ0FwcElkID09IFByb2Nlc3MuU1lTVEVNX1VJRCB8fCBjYWxsaW5nQXBwSWQgPT0gUHJvY2Vzcy5QSE9ORV9VSUQKLSAgICAgICAgICAgIHx8IGNhbGxpbmdBcHBJZCA9PSBQcm9jZXNzLlNIRUxMX1VJRCB8fCBjYWxsaW5nQXBwSWQgPT0gUHJvY2Vzcy5CTFVFVE9PVEhfVUlECi0gICAgICAgICAgICB8fCBjYWxsaW5nQXBwSWQgPT0gUHJvY2Vzcy5ORkNfVUlEIHx8IGNhbGxpbmdVaWQgPT0gMCkgewotICAgICAgICAgICAgLy8gQWx3YXlzIG9rYXkuCisgICAgICAgIGZpbmFsIGJvb2xlYW4gaXNDYWxsZXJTeXN0ZW07CisgICAgICAgIHN3aXRjaCAoVXNlckhhbmRsZS5nZXRBcHBJZChjYWxsaW5nVWlkKSkgeworICAgICAgICAgICAgY2FzZSBQcm9jZXNzLlJPT1RfVUlEOgorICAgICAgICAgICAgY2FzZSBQcm9jZXNzLlNZU1RFTV9VSUQ6CisgICAgICAgICAgICBjYXNlIFByb2Nlc3MuUEhPTkVfVUlEOgorICAgICAgICAgICAgY2FzZSBQcm9jZXNzLlNIRUxMX1VJRDoKKyAgICAgICAgICAgIGNhc2UgUHJvY2Vzcy5CTFVFVE9PVEhfVUlEOgorICAgICAgICAgICAgY2FzZSBQcm9jZXNzLk5GQ19VSUQ6CisgICAgICAgICAgICAgICAgaXNDYWxsZXJTeXN0ZW0gPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBpc0NhbGxlclN5c3RlbSA9IChjYWxsZXJBcHAgIT0gbnVsbCkgJiYgY2FsbGVyQXBwLnBlcnNpc3RlbnQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KIAotICAgICAgICAgICAgLy8gWWVsbCBpZiB0aGUgc3lzdGVtIGlzIHRyeWluZyB0byBzZW5kIGEgbm9uLXByb3RlY3RlZCBicm9hZGNhc3QuCi0gICAgICAgICAgICAvLyBUaGUgdmFzdCBtYWpvcml0eSBvZiBicm9hZGNhc3RzIHNlbnQgZnJvbSBzeXN0ZW0gY2FsbGVycyBzaG91bGQKLSAgICAgICAgICAgIC8vIGJlIHByb3RlY3RlZCB0byBhdm9pZCBzZWN1cml0eSBob2xlcywgc28gZXhjZXB0aW9ucyBoZXJlIHNob3VsZAotICAgICAgICAgICAgLy8gYmUgaW5jcmVkaWJseSByYXJlLgotICAgICAgICAgICAgaWYgKCFpc1Byb3RlY3RlZEJyb2FkY2FzdAotICAgICAgICAgICAgICAgICAgICAmJiAhSW50ZW50LkFDVElPTl9DTE9TRV9TWVNURU1fRElBTE9HUy5lcXVhbHMoYWN0aW9uKSkgewotICAgICAgICAgICAgICAgIC8vIFRPRE86IGV2ZW50dWFsbHkgc3dpdGNoIG92ZXIgdG8gaGFyZCB0aHJvdworICAgICAgICBpZiAoaXNDYWxsZXJTeXN0ZW0pIHsKKyAgICAgICAgICAgIGlmIChpc1Byb3RlY3RlZEJyb2FkY2FzdAorICAgICAgICAgICAgICAgICAgICB8fCBJbnRlbnQuQUNUSU9OX0NMT1NFX1NZU1RFTV9ESUFMT0dTLmVxdWFscyhhY3Rpb24pCisgICAgICAgICAgICAgICAgICAgIHx8IEludGVudC5BQ1RJT05fTUVESUFfU0NBTk5FUl9TQ0FOX0ZJTEUuZXF1YWxzKGFjdGlvbikKKyAgICAgICAgICAgICAgICAgICAgfHwgQXBwV2lkZ2V0TWFuYWdlci5BQ1RJT05fQVBQV0lER0VUX0NPTkZJR1VSRS5lcXVhbHMoYWN0aW9uKQorICAgICAgICAgICAgICAgICAgICB8fCBBcHBXaWRnZXRNYW5hZ2VyLkFDVElPTl9BUFBXSURHRVRfVVBEQVRFLmVxdWFscyhhY3Rpb24pKSB7CisgICAgICAgICAgICAgICAgLy8gQnJvYWRjYXN0IGlzIGVpdGhlciBwcm90ZWN0ZWQsIG9yIGl0J3MgYSBwdWJsaWMgYWN0aW9uIHRoYXQKKyAgICAgICAgICAgICAgICAvLyB3ZSd2ZSByZWxheGVkLCBzbyBpdCdzIGZpbmUgZm9yIHN5c3RlbSBpbnRlcm5hbHMgdG8gc2VuZC4KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIHZhc3QgbWFqb3JpdHkgb2YgYnJvYWRjYXN0cyBzZW50IGZyb20gc3lzdGVtIGludGVybmFscworICAgICAgICAgICAgICAgIC8vIHNob3VsZCBiZSBwcm90ZWN0ZWQgdG8gYXZvaWQgc2VjdXJpdHkgaG9sZXMsIHNvIHllbGwgbG91ZGx5CisgICAgICAgICAgICAgICAgLy8gdG8gZW5zdXJlIHdlIGV4YW1pbmUgdGhlc2UgY2FzZXMuCiAgICAgICAgICAgICAgICAgTG9nLnd0ZihUQUcsICJTZW5kaW5nIG5vbi1wcm90ZWN0ZWQgYnJvYWRjYXN0ICIgKyBhY3Rpb24KICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBmcm9tIHN5c3RlbSIsIG5ldyBUaHJvd2FibGUoKSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgfSBlbHNlIGlmIChjYWxsZXJBcHAgPT0gbnVsbCB8fCAhY2FsbGVyQXBwLnBlcnNpc3RlbnQpIHsKKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChpc1Byb3RlY3RlZEJyb2FkY2FzdCkgewogICAgICAgICAgICAgICAgIFN0cmluZyBtc2cgPSAiUGVybWlzc2lvbiBEZW5pYWw6IG5vdCBhbGxvd2VkIHRvIHNlbmQgYnJvYWRjYXN0ICIKICAgICAgICAgICAgICAgICAgICAgICAgICsgYWN0aW9uICsgIiBmcm9tIHBpZD0iCiAgICAgICAgICAgICAgICAgICAgICAgICArIGNhbGxpbmdQaWQgKyAiLCB1aWQ9IiArIGNhbGxpbmdVaWQ7CiAgICAgICAgICAgICAgICAgU2xvZy53KFRBRywgbXNnKTsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFeGNlcHRpb24obXNnKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoQXBwV2lkZ2V0TWFuYWdlci5BQ1RJT05fQVBQV0lER0VUX0NPTkZJR1VSRS5lcXVhbHMoYWN0aW9uKSkgeworCisgICAgICAgICAgICB9IGVsc2UgaWYgKEFwcFdpZGdldE1hbmFnZXIuQUNUSU9OX0FQUFdJREdFVF9DT05GSUdVUkUuZXF1YWxzKGFjdGlvbikKKyAgICAgICAgICAgICAgICAgICAgfHwgQXBwV2lkZ2V0TWFuYWdlci5BQ1RJT05fQVBQV0lER0VUX1VQREFURS5lcXVhbHMoYWN0aW9uKSkgewogICAgICAgICAgICAgICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgY29tcGF0aWJpbGl0eTogd2UgZG9uJ3Qgd2FudCBhcHBzIHRvIHNlbmQgdGhpcywKICAgICAgICAgICAgICAgICAvLyBidXQgaGlzdG9yaWNhbGx5IGl0IGhhcyBub3QgYmVlbiBwcm90ZWN0ZWQgYW5kIGFwcHMgbWF5IGJlIHVzaW5nIGl0CiAgICAgICAgICAgICAgICAgLy8gdG8gcG9rZSB0aGVpciBvd24gYXBwIHdpZGdldC4gIFNvLCBpbnN0ZWFkIG9mIG1ha2luZyBpdCBwcm90ZWN0ZWQsCkBAIC0xNzgzMiw4ICsxNzk5Miw3IEBACiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBzdXBwcmVzc1Jlc2l6ZUNvbmZpZ0NoYW5nZXMoYm9vbGVhbiBzdXBwcmVzcykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIGVuZm9yY2VDYWxsaW5nUGVybWlzc2lvbihhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uTUFOQUdFX0FDVElWSVRZX1NUQUNLUywKLSAgICAgICAgICAgICAgICAic3VwcHJlc3NSZXNpemVDb25maWdDaGFuZ2VzKCkiKTsKKyAgICAgICAgZW5mb3JjZUNhbGxpbmdQZXJtaXNzaW9uKE1BTkFHRV9BQ1RJVklUWV9TVEFDS1MsICJzdXBwcmVzc1Jlc2l6ZUNvbmZpZ0NoYW5nZXMoKSIpOwogICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKICAgICAgICAgICAgIG1TdXBwcmVzc1Jlc2l6ZUNvbmZpZ0NoYW5nZXMgPSBzdXBwcmVzczsKICAgICAgICAgfQpAQCAtMTc4NDEsOCArMTgwMDAsNyBAQAogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgbW92ZVRhc2tzVG9GdWxsc2NyZWVuU3RhY2soaW50IGZyb21TdGFja0lkKSB7Ci0gICAgICAgIGVuZm9yY2VDYWxsaW5nUGVybWlzc2lvbihhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uTUFOQUdFX0FDVElWSVRZX1NUQUNLUywKLSAgICAgICAgICAgICAgICAibW92ZVRhc2tzVG9GdWxsc2NyZWVuU3RhY2soKSIpOworICAgICAgICBlbmZvcmNlQ2FsbGluZ1Blcm1pc3Npb24oTUFOQUdFX0FDVElWSVRZX1NUQUNLUywgIm1vdmVUYXNrc1RvRnVsbHNjcmVlblN0YWNrKCkiKTsKICAgICAgICAgaWYgKGZyb21TdGFja0lkID09IEhPTUVfU1RBQ0tfSUQpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIllvdSBjYW4ndCBtb3ZlIHRhc2tzIGZyb20gdGhlIGhvbWUgc3RhY2suIik7CiAgICAgICAgIH0KQEAgLTE3OTYxLDEwICsxODExOSwxOCBAQAogICAgICAgICAgICAgICAgIEV2ZW50TG9nLndyaXRlRXZlbnQoRXZlbnRMb2dUYWdzLkNPTkZJR1VSQVRJT05fQ0hBTkdFRCwgY2hhbmdlcyk7CiAKICAgICAgICAgICAgICAgICBpZiAoIWluaXRMb2NhbGUgJiYgIXZhbHVlcy5nZXRMb2NhbGVzKCkuaXNFbXB0eSgpICYmIHZhbHVlcy51c2VyU2V0TG9jYWxlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtU3VwcG9ydGVkU3lzdGVtTG9jYWxlcyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtU3VwcG9ydGVkU3lzdGVtTG9jYWxlcyA9IFJlc291cmNlcy5nZXRTeXN0ZW0oKS5nZXRBc3NldHMoKS5nZXRMb2NhbGVzKCk7CisgICAgICAgICAgICAgICAgICAgIGZpbmFsIExvY2FsZSBsb2NhbGU7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZXMuZ2V0TG9jYWxlcygpLnNpemUoKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGFuIG9wdGltaXphdGlvbiB0byBhdm9pZCB0aGUgSk5JIGNhbGwgd2hlbiB0aGUgcmVzdWx0IG9mCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBnZXRGaXJzdE1hdGNoKCkgZG9lcyBub3QgZGVwZW5kIG9uIHRoZSBzdXBwb3J0ZWQgbG9jYWxlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZSA9IHZhbHVlcy5nZXRMb2NhbGVzKCkuZ2V0UHJpbWFyeSgpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1TdXBwb3J0ZWRTeXN0ZW1Mb2NhbGVzID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU3VwcG9ydGVkU3lzdGVtTG9jYWxlcyA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZXMuZ2V0U3lzdGVtKCkuZ2V0QXNzZXRzKCkuZ2V0TG9jYWxlcygpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlID0gdmFsdWVzLmdldExvY2FsZXMoKS5nZXRGaXJzdE1hdGNoKG1TdXBwb3J0ZWRTeXN0ZW1Mb2NhbGVzKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBmaW5hbCBMb2NhbGUgbG9jYWxlID0gdmFsdWVzLmdldExvY2FsZXMoKS5nZXRGaXJzdE1hdGNoKG1TdXBwb3J0ZWRTeXN0ZW1Mb2NhbGVzKTsKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtUHJvcGVydGllcy5zZXQoInBlcnNpc3Quc3lzLmxvY2FsZSIsIGxvY2FsZS50b0xhbmd1YWdlVGFnKCkpOwogICAgICAgICAgICAgICAgICAgICBtSGFuZGxlci5zZW5kTWVzc2FnZShtSGFuZGxlci5vYnRhaW5NZXNzYWdlKFNFTkRfTE9DQUxFX1RPX01PVU5UX0RBRU1PTl9NU0csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlKSk7CkBAIC0yMDc4OCw3ICsyMDk1NCw3IEBACiAgICAgICAgIHB1YmxpYyB2b2lkIG1vdmVUb0Zyb250KCkgewogICAgICAgICAgICAgY2hlY2tDYWxsZXIoKTsKICAgICAgICAgICAgIC8vIFdpbGwgYnJpbmcgdGFzayB0byBmcm9udCBpZiBpdCBhbHJlYWR5IGhhcyBhIHJvb3QgYWN0aXZpdHkuCi0gICAgICAgICAgICBzdGFydEFjdGl2aXR5RnJvbVJlY2VudHNJbm5lcihtVGFza0lkLCBJTlZBTElEX1NUQUNLX0lELCBudWxsKTsKKyAgICAgICAgICAgIHN0YXJ0QWN0aXZpdHlGcm9tUmVjZW50c0lubmVyKG1UYXNrSWQsIG51bGwpOwogICAgICAgICB9CiAKICAgICAgICAgQE92ZXJyaWRlCkBAIC0yMDgwOSw3ICsyMDk3NSw3IEBACiAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkJhZCBhcHAgdGhyZWFkICIgKyBhcHBUaHJlYWQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBtU3RhY2tTdXBlcnZpc29yLnN0YXJ0QWN0aXZpdHlNYXlXYWl0KGFwcFRocmVhZCwgLTEsIGNhbGxpbmdQYWNrYWdlLCBpbnRlbnQsCisgICAgICAgICAgICByZXR1cm4gbUFjdGl2aXR5U3RhcnRlci5zdGFydEFjdGl2aXR5TWF5V2FpdChhcHBUaHJlYWQsIC0xLCBjYWxsaW5nUGFja2FnZSwgaW50ZW50LAogICAgICAgICAgICAgICAgICAgICByZXNvbHZlZFR5cGUsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIDAsIDAsIG51bGwsIG51bGwsCiAgICAgICAgICAgICAgICAgICAgIG51bGwsIGJPcHRpb25zLCBmYWxzZSwgY2FsbGluZ1VzZXIsIG51bGwsIHRyKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9BY3Rpdml0eU1ldHJpY3NMb2dnZXIuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vQWN0aXZpdHlNZXRyaWNzTG9nZ2VyLmphdmEKaW5kZXggOTY4MDM4Mi4uNDEwMWRkZSAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9BY3Rpdml0eU1ldHJpY3NMb2dnZXIuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL0FjdGl2aXR5TWV0cmljc0xvZ2dlci5qYXZhCkBAIC0yNiw3ICsyNiw3IEBACiAgICAgLy8gUHJlYWxsb2NhdGVkIHN0cmluZ3Mgd2UgYXJlIHNlbmRpbmcgdG8gdHJvbiwgc28gd2UgZG9uJ3QgaGF2ZSB0byBhbGxvY2F0ZSBhIG5ldyBvbmUgZXZlcnkKICAgICAvLyB0aW1lIHdlIGxvZy4KICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBUUk9OX1dJTkRPV19TVEFURV9WQVJaX1NUUklOR1MgPSB7Ci0gICAgICAgICAgICAidHJvbl92YXJ6X3dpbmRvd190aW1lXzAiLCAidHJvbl92YXJ6X3dpbmRvd190aW1lXzEiLCAidHJvbl92YXJ6X3dpbmRvd190aW1lXzIifTsKKyAgICAgICAgICAgICJ3aW5kb3dfdGltZV8wIiwgIndpbmRvd190aW1lXzEiLCAid2luZG93X3RpbWVfMiJ9OwogCiAgICAgcHJpdmF0ZSBpbnQgbVdpbmRvd1N0YXRlID0gV0lORE9XX1NUQVRFX1NUQU5EQVJEOwogICAgIHByaXZhdGUgbG9uZyBtTGFzdExvZ1RpbWVTZWNzOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9BY3Rpdml0eVJlY29yZC5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9BY3Rpdml0eVJlY29yZC5qYXZhCmluZGV4IDNkYTBmOGQuLjRmYjg3YzMgMTAwNzU1Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vQWN0aXZpdHlSZWNvcmQuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL0FjdGl2aXR5UmVjb3JkLmphdmEKQEAgLTE2LDcgKzE2LDExIEBACiAKIHBhY2thZ2UgY29tLmFuZHJvaWQuc2VydmVyLmFtOwogCitpbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5TdGFja0lkOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuU3RhY2tJZC5GUkVFRk9STV9XT1JLU1BBQ0VfU1RBQ0tfSUQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5wbS5BY3Rpdml0eUluZm8uRkxBR19BTFdBWVNfRk9DVVNBQkxFOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQucG0uQWN0aXZpdHlJbmZvLkZMQUdfUkVTSVpFQUJMRTsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LnBtLkFjdGl2aXR5SW5mby5GTEFHX1NVUFBPUlRTX1BJQ1RVUkVfSU5fUElDVFVSRTsKIGltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX0NPTkZJR1VSQVRJT047CiBpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eU1hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19TQVZFRF9TVEFURTsKIGltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX1NXSVRDSDsKQEAgLTE4MSw2ICsxODUsNyBAQAogICAgIGJvb2xlYW4gZm9yY2VOZXdDb25maWc7IC8vIGZvcmNlIHJlLWNyZWF0ZSB3aXRoIG5ldyBjb25maWcgbmV4dCB0aW1lCiAgICAgaW50IGxhdW5jaENvdW50OyAgICAgICAgLy8gY291bnQgb2YgbGF1bmNoZXMgc2luY2UgbGFzdCBzdGF0ZQogICAgIGxvbmcgbGFzdExhdW5jaFRpbWU7ICAgIC8vIHRpbWUgb2YgbGFzdCBsYXVjaCBvZiB0aGlzIGFjdGl2aXR5CisgICAgYm9vbGVhbiBpc1ZyQWN0aXZpdHk7ICAgLy8gaXMgdGhlIGFjdGl2aXR5IHJ1bm5pbmcgaW4gVlIgbW9kZT8KICAgICBBcnJheUxpc3Q8QWN0aXZpdHlDb250YWluZXI+IG1DaGlsZENvbnRhaW5lcnMgPSBuZXcgQXJyYXlMaXN0PEFjdGl2aXR5Q29udGFpbmVyPigpOwogCiAgICAgU3RyaW5nIHN0cmluZ05hbWU7ICAgICAgLy8gZm9yIGNhY2hpbmcgb2YgdG9TdHJpbmcoKS4KQEAgLTMxNyw2ICszMjIsNyBAQAogICAgICAgICAgICAgICAgIHB3LnByaW50KCIgZm9yY2VOZXdDb25maWc9Iik7IHB3LnByaW50bG4oZm9yY2VOZXdDb25maWcpOwogICAgICAgICBwdy5wcmludChwcmVmaXgpOyBwdy5wcmludCgibUFjdGl2aXR5VHlwZT0iKTsKICAgICAgICAgICAgICAgICBwdy5wcmludGxuKGFjdGl2aXR5VHlwZVRvU3RyaW5nKG1BY3Rpdml0eVR5cGUpKTsKKyAgICAgICAgcHcucHJpbnQocHJlZml4KTsgcHcucHJpbnQoInZyTW9kZT0iKTsgcHcucHJpbnRsbihpc1ZyQWN0aXZpdHkpOwogICAgICAgICBpZiAoZGlzcGxheVN0YXJ0VGltZSAhPSAwIHx8IHN0YXJ0VGltZSAhPSAwKSB7CiAgICAgICAgICAgICBwdy5wcmludChwcmVmaXgpOyBwdy5wcmludCgiZGlzcGxheVN0YXJ0VGltZT0iKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGRpc3BsYXlTdGFydFRpbWUgPT0gMCkgcHcucHJpbnQoIjAiKTsKQEAgLTY1MCw2ICs2NTYsNyBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpbW1lcnNpdmUgPSAoYUluZm8uZmxhZ3MgJiBBY3Rpdml0eUluZm8uRkxBR19JTU1FUlNJVkUpICE9IDA7CisgICAgICAgICAgICBpc1ZyQWN0aXZpdHkgPSAoYUluZm8uZmxhZ3MgJiBBY3Rpdml0eUluZm8uRkxBR19FTkFCTEVfVlJfTU9ERSkgIT0gMDsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHJlYWxBY3Rpdml0eSA9IG51bGw7CiAgICAgICAgICAgICB0YXNrQWZmaW5pdHkgPSBudWxsOwpAQCAtNjYxLDYgKzY2OCw3IEBACiAgICAgICAgICAgICBub0Rpc3BsYXkgPSBmYWxzZTsKICAgICAgICAgICAgIG1BY3Rpdml0eVR5cGUgPSBBUFBMSUNBVElPTl9BQ1RJVklUWV9UWVBFOwogICAgICAgICAgICAgaW1tZXJzaXZlID0gZmFsc2U7CisgICAgICAgICAgICBpc1ZyQWN0aXZpdHkgPSBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNzM1LDYgKzc0MywyMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgKGludGVudC5nZXRGbGFncygpICYgSW50ZW50LkZMQUdfQUNUSVZJVFlfRVhDTFVERV9GUk9NX1JFQ0VOVFMpID09IDApOwogICAgIH0KIAorICAgIGJvb2xlYW4gaXNGb2N1c2FibGUoKSB7CisgICAgICAgIHJldHVybiBTdGFja0lkLmNhblJlY2VpdmVLZXlzKHRhc2suc3RhY2subVN0YWNrSWQpIHx8IGlzQWx3YXlzRm9jdXNhYmxlKCk7CisgICAgfQorCisgICAgYm9vbGVhbiBpc1Jlc2l6ZWFibGUoKSB7CisgICAgICAgIHJldHVybiAoaW5mby5mbGFncyAmIEZMQUdfUkVTSVpFQUJMRSkgIT0gMDsKKyAgICB9CisKKyAgICBib29sZWFuIHN1cHBvcnRzUGljdHVyZUluUGljdHVyZSgpIHsKKyAgICAgICAgcmV0dXJuIChpbmZvLmZsYWdzICYgRkxBR19TVVBQT1JUU19QSUNUVVJFX0lOX1BJQ1RVUkUpICE9IDA7CisgICAgfQorCisgICAgYm9vbGVhbiBpc0Fsd2F5c0ZvY3VzYWJsZSgpIHsKKyAgICAgICAgcmV0dXJuIChpbmZvLmZsYWdzICYgRkxBR19BTFdBWVNfRk9DVVNBQkxFKSAhPSAwOworICAgIH0KKwogICAgIHZvaWQgbWFrZUZpbmlzaGluZ0xvY2tlZCgpIHsKICAgICAgICAgaWYgKCFmaW5pc2hpbmcpIHsKICAgICAgICAgICAgIGlmICh0YXNrICE9IG51bGwgJiYgdGFzay5zdGFjayAhPSBudWxsCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL0FjdGl2aXR5U3RhY2suamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vQWN0aXZpdHlTdGFjay5qYXZhCmluZGV4IGJmZDE3YjIuLjhkOWNiNTggMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vQWN0aXZpdHlTdGFjay5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vQWN0aXZpdHlTdGFjay5qYXZhCkBAIC0yOCw2ICsyOCw3IEBACiBpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eVJlY29yZC5IT01FX0FDVElWSVRZX1RZUEU7CiBpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eVJlY29yZC5BUFBMSUNBVElPTl9BQ1RJVklUWV9UWVBFOwogCitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eVN0YWNrU3VwZXJ2aXNvci5GaW5kVGFza1Jlc3VsdDsKIGltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5U3RhY2tTdXBlcnZpc29yLk1PVklORzsKIGltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5U3RhY2tTdXBlcnZpc29yLlBSRVNFUlZFX1dJTkRPV1M7CiAKQEAgLTc0LDcgKzc1LDYgQEAKIGltcG9ydCBhbmRyb2lkLm9zLlVzZXJIYW5kbGU7CiBpbXBvcnQgYW5kcm9pZC5zZXJ2aWNlLnZvaWNlLklWb2ljZUludGVyYWN0aW9uU2Vzc2lvbjsKIGltcG9ydCBhbmRyb2lkLnV0aWwuRXZlbnRMb2c7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU2xvZzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuRGlzcGxheTsKIApAQCAtNTE5LDYgKzUxOSwxNCBAQAogICAgICAgICByZXR1cm4gbVN0YWNrSWQgPT0gSE9NRV9TVEFDS19JRDsKICAgICB9CiAKKyAgICBmaW5hbCBib29sZWFuIGlzRG9ja2VkU3RhY2soKSB7CisgICAgICAgIHJldHVybiBtU3RhY2tJZCA9PSBET0NLRURfU1RBQ0tfSUQ7CisgICAgfQorCisgICAgZmluYWwgYm9vbGVhbiBpc1Bpbm5lZFN0YWNrKCkgeworICAgICAgICByZXR1cm4gbVN0YWNrSWQgPT0gUElOTkVEX1NUQUNLX0lEOworICAgIH0KKwogICAgIGZpbmFsIGJvb2xlYW4gaXNPbkhvbWVEaXNwbGF5KCkgewogICAgICAgICByZXR1cm4gaXNBdHRhY2hlZCgpICYmCiAgICAgICAgICAgICAgICAgbUFjdGl2aXR5Q29udGFpbmVyLm1BY3Rpdml0eURpc3BsYXkubURpc3BsYXlJZCA9PSBEaXNwbGF5LkRFRkFVTFRfRElTUExBWTsKQEAgLTU1Miw3ICs1NjAsNyBAQAogCiAgICAgICAgIC8vIFRPRE8obXVsdGktZGlzcGxheSk6IE5lZWRzIHRvIGFsc28gd29yayBpZiBmb2N1cyBpcyBtb3ZpbmcgdG8gdGhlIG5vbi1ob21lIGRpc3BsYXkuCiAgICAgICAgIGlmIChpc09uSG9tZURpc3BsYXkoKSkgewotICAgICAgICAgICAgbVN0YWNrU3VwZXJ2aXNvci5zZXRGb2N1c1N0YWNrKHJlYXNvbiwgdGhpcyk7CisgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLnNldEZvY3VzU3RhY2tVbmNoZWNrZWQocmVhc29uLCB0aGlzKTsKICAgICAgICAgfQogICAgICAgICBpZiAodGFzayAhPSBudWxsKSB7CiAgICAgICAgICAgICBpbnNlcnRUYXNrQXRUb3AodGFzaywgbnVsbCk7CkBAIC01NjQsMTUgKzU3MiwyNSBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgYm9vbGVhbiBpc0ZvY3VzYWJsZSgpIHsKKyAgICAgICAgaWYgKFN0YWNrSWQuY2FuUmVjZWl2ZUtleXMobVN0YWNrSWQpKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAvLyBUaGUgc3RhY2sgaXNuJ3QgZm9jdXNhYmxlLiBTZWUgaWYgaXRzIHRvcCBhY3Rpdml0eSBpcyBmb2N1c2FibGUgdG8gZm9yY2UgZm9jdXMgb24gdGhlCisgICAgICAgIC8vIHN0YWNrLgorICAgICAgICBmaW5hbCBBY3Rpdml0eVJlY29yZCByID0gdG9wUnVubmluZ0FjdGl2aXR5TG9ja2VkKCk7CisgICAgICAgIHJldHVybiByICE9IG51bGwgJiYgci5pc0ZvY3VzYWJsZSgpOworICAgIH0KKwogICAgIGZpbmFsIGJvb2xlYW4gaXNBdHRhY2hlZCgpIHsKICAgICAgICAgcmV0dXJuIG1TdGFja3MgIT0gbnVsbDsKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSB0b3AgYWN0aXZpdHkgaW4gYW55IGV4aXN0aW5nIHRhc2sgbWF0Y2hpbmcgdGhlIGdpdmVuCi0gICAgICogSW50ZW50LiAgUmV0dXJucyBudWxsIGlmIG5vIHN1Y2ggdGFzayBpcyBmb3VuZC4KKyAgICAgKiBSZXR1cm5zIHRoZSB0b3AgYWN0aXZpdHkgaW4gYW55IGV4aXN0aW5nIHRhc2sgbWF0Y2hpbmcgdGhlIGdpdmVuIEludGVudCBpbiB0aGUgaW5wdXQgcmVzdWx0LgorICAgICAqIFJldHVybnMgbnVsbCBpZiBubyBzdWNoIHRhc2sgaXMgZm91bmQuCiAgICAgICovCi0gICAgQWN0aXZpdHlSZWNvcmQgZmluZFRhc2tMb2NrZWQoQWN0aXZpdHlSZWNvcmQgdGFyZ2V0KSB7CisgICAgdm9pZCBmaW5kVGFza0xvY2tlZChBY3Rpdml0eVJlY29yZCB0YXJnZXQsIEZpbmRUYXNrUmVzdWx0IHJlc3VsdCkgewogICAgICAgICBJbnRlbnQgaW50ZW50ID0gdGFyZ2V0LmludGVudDsKICAgICAgICAgQWN0aXZpdHlJbmZvIGluZm8gPSB0YXJnZXQuaW5mbzsKICAgICAgICAgQ29tcG9uZW50TmFtZSBjbHMgPSBpbnRlbnQuZ2V0Q29tcG9uZW50KCk7CkBAIC02MjcsMTAgKzY0NSwxNSBAQAogICAgICAgICAgICAgICAgICAgICArIHRhc2tJbnRlbnQuZ2V0Q29tcG9uZW50KCkuZmxhdHRlblRvU2hvcnRTdHJpbmcoKQogICAgICAgICAgICAgICAgICAgICArICIvYWZmPSIgKyByLnRhc2sucm9vdEFmZmluaXR5ICsgIiB0byBuZXcgY2xzPSIKICAgICAgICAgICAgICAgICAgICAgKyBpbnRlbnQuZ2V0Q29tcG9uZW50KCkuZmxhdHRlblRvU2hvcnRTdHJpbmcoKSArICIvYWZmPSIgKyBpbmZvLnRhc2tBZmZpbml0eSk7Ci0gICAgICAgICAgICBpZiAoIWlzRG9jdW1lbnQgJiYgIXRhc2tJc0RvY3VtZW50ICYmIHRhc2sucm9vdEFmZmluaXR5ICE9IG51bGwpIHsKKyAgICAgICAgICAgIGlmICghaXNEb2N1bWVudCAmJiAhdGFza0lzRG9jdW1lbnQKKyAgICAgICAgICAgICAgICAgICAgJiYgcmVzdWx0LnIgPT0gbnVsbCAmJiB0YXNrLmNhbk1hdGNoUm9vdEFmZmluaXR5KCkpIHsKICAgICAgICAgICAgICAgICBpZiAodGFzay5yb290QWZmaW5pdHkuZXF1YWxzKHRhcmdldC50YXNrQWZmaW5pdHkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERUJVR19UQVNLUykgU2xvZy5kKFRBR19UQVNLUywgIkZvdW5kIG1hdGNoaW5nIGFmZmluaXR5ISIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHX1RBU0tTKSBTbG9nLmQoVEFHX1RBU0tTLCAiRm91bmQgbWF0Y2hpbmcgYWZmaW5pdHkgY2FuZGlkYXRlISIpOworICAgICAgICAgICAgICAgICAgICAvLyBJdCBpcyBwb3NzaWJsZSBmb3IgbXVsdGlwbGUgdGFza3MgdG8gaGF2ZSB0aGUgc2FtZSByb290IGFmZmluaXR5IGVzcGVjaWFsbHkKKyAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhleSBhcmUgaW4gc2VwYXJhdGUgc3RhY2tzLiBXZSBzYXZlIG9mZiB0aGlzIGNhbmRpZGF0ZSwgYnV0IGtlZXAgbG9va2luZworICAgICAgICAgICAgICAgICAgICAvLyB0byBzZWUgaWYgdGhlcmUgaXMgYSBiZXR0ZXIgY2FuZGlkYXRlLgorICAgICAgICAgICAgICAgICAgICByZXN1bHQuciA9IHI7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5tYXRjaGVkQnlSb290QWZmaW5pdHkgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSBpZiAodGFza0ludGVudCAhPSBudWxsICYmIHRhc2tJbnRlbnQuZ2V0Q29tcG9uZW50KCkgIT0gbnVsbCAmJgogICAgICAgICAgICAgICAgICAgICB0YXNrSW50ZW50LmdldENvbXBvbmVudCgpLmNvbXBhcmVUbyhjbHMpID09IDAgJiYKQEAgLTYzOSw3ICs2NjIsOSBAQAogICAgICAgICAgICAgICAgIC8vZHVtcCgpOwogICAgICAgICAgICAgICAgIGlmIChERUJVR19UQVNLUykgU2xvZy5kKFRBR19UQVNLUywKICAgICAgICAgICAgICAgICAgICAgICAgICJGb3IgSW50ZW50ICIgKyBpbnRlbnQgKyAiIGJyaW5naW5nIHRvIHRvcDogIiArIHIuaW50ZW50KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcjsKKyAgICAgICAgICAgICAgICByZXN1bHQuciA9IHI7CisgICAgICAgICAgICAgICAgcmVzdWx0Lm1hdGNoZWRCeVJvb3RBZmZpbml0eSA9IGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfSBlbHNlIGlmIChhZmZpbml0eUludGVudCAhPSBudWxsICYmIGFmZmluaXR5SW50ZW50LmdldENvbXBvbmVudCgpICE9IG51bGwgJiYKICAgICAgICAgICAgICAgICAgICAgYWZmaW5pdHlJbnRlbnQuZ2V0Q29tcG9uZW50KCkuY29tcGFyZVRvKGNscykgPT0gMCAmJgogICAgICAgICAgICAgICAgICAgICBPYmplY3RzLmVxdWFscyhkb2N1bWVudERhdGEsIHRhc2tEb2N1bWVudERhdGEpKSB7CkBAIC02NDcsMTEgKzY3MiwxMSBAQAogICAgICAgICAgICAgICAgIC8vZHVtcCgpOwogICAgICAgICAgICAgICAgIGlmIChERUJVR19UQVNLUykgU2xvZy5kKFRBR19UQVNLUywKICAgICAgICAgICAgICAgICAgICAgICAgICJGb3IgSW50ZW50ICIgKyBpbnRlbnQgKyAiIGJyaW5naW5nIHRvIHRvcDogIiArIHIuaW50ZW50KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcjsKKyAgICAgICAgICAgICAgICByZXN1bHQuciA9IHI7CisgICAgICAgICAgICAgICAgcmVzdWx0Lm1hdGNoZWRCeVJvb3RBZmZpbml0eSA9IGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfSBlbHNlIGlmIChERUJVR19UQVNLUykgU2xvZy5kKFRBR19UQVNLUywgIk5vdCBhIG1hdGNoOiAiICsgdGFzayk7CiAgICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9CiAKICAgICAvKioKQEAgLTgxMywxMCArODM4LDkgQEAKIAogICAgICAgICBpZiAoaGFzVmlzaWJsZUJlaGluZEFjdGl2aXR5KCkpIHsKICAgICAgICAgICAgIC8vIFN0b3AgdmlzaWJsZSBiZWhpbmQgYWN0aXZpdHkgYmVmb3JlIGdvaW5nIHRvIHNsZWVwLgotICAgICAgICAgICAgZmluYWwgQWN0aXZpdHlSZWNvcmQgciA9IG1BY3Rpdml0eUNvbnRhaW5lci5tQWN0aXZpdHlEaXNwbGF5Lm1WaXNpYmxlQmVoaW5kQWN0aXZpdHk7CisgICAgICAgICAgICBmaW5hbCBBY3Rpdml0eVJlY29yZCByID0gZ2V0VmlzaWJsZUJlaGluZEFjdGl2aXR5KCk7CiAgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLm1TdG9wcGluZ0FjdGl2aXRpZXMuYWRkKHIpOwotICAgICAgICAgICAgaWYgKERFQlVHX1NUQVRFUykgU2xvZy52KFRBR19TVEFURVMsCi0gICAgICAgICAgICAgICAgICAgICJTbGVlcCBzdGlsbCB3YWl0aW5nIHRvIHN0b3AgdmlzaWJsZSBiZWhpbmQgIiArIHIpOworICAgICAgICAgICAgaWYgKERFQlVHX1NUQVRFUykgU2xvZy52KFRBR19TVEFURVMsICJTbGVlcCBzdGlsbCB3YWl0aW5nIHRvIHN0b3AgdmlzaWJsZSBiZWhpbmQgIiArIHIpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIApAQCAtOTAzLDcgKzkyNyw3IEBACiAgICAgICAgIGlmIChwcmV2ID09IG51bGwpIHsKICAgICAgICAgICAgIGlmICghcmVzdW1pbmcpIHsKICAgICAgICAgICAgICAgICBTbG9nLnd0ZihUQUcsICJUcnlpbmcgdG8gcGF1c2Ugd2hlbiBub3RoaW5nIGlzIHJlc3VtZWQiKTsKLSAgICAgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLnJlc3VtZVRvcEFjdGl2aXRpZXNMb2NrZWQoKTsKKyAgICAgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLnJlc3VtZUZvY3VzZWRTdGFja1RvcEFjdGl2aXR5TG9ja2VkKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTk5NCw3ICsxMDE4LDcgQEAKICAgICAgICAgICAgIC8vIHBhdXNlLCBzbyBqdXN0IHRyZWF0IGl0IGFzIGJlaW5nIHBhdXNlZCBub3cuCiAgICAgICAgICAgICBpZiAoREVCVUdfUEFVU0UpIFNsb2cudihUQUdfUEFVU0UsICJBY3Rpdml0eSBub3QgcnVubmluZywgcmVzdW1pbmcgbmV4dC4iKTsKICAgICAgICAgICAgIGlmICghcmVzdW1pbmcpIHsKLSAgICAgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLmdldEZvY3VzZWRTdGFjaygpLnJlc3VtZVRvcEFjdGl2aXR5TG9ja2VkKG51bGwpOworICAgICAgICAgICAgICAgIG1TdGFja1N1cGVydmlzb3IucmVzdW1lRm9jdXNlZFN0YWNrVG9wQWN0aXZpdHlMb2NrZWQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtMTA1Myw3ICsxMDc3LDcgQEAKICAgICAgICAgICAgIG1IYW5kbGVyLnJlbW92ZU1lc3NhZ2VzKFNUT1BfVElNRU9VVF9NU0csIHIpOwogICAgICAgICAgICAgci5zdG9wcGVkID0gdHJ1ZTsKICAgICAgICAgICAgIHIuc3RhdGUgPSBBY3Rpdml0eVN0YXRlLlNUT1BQRUQ7Ci0gICAgICAgICAgICBpZiAobUFjdGl2aXR5Q29udGFpbmVyLm1BY3Rpdml0eURpc3BsYXkubVZpc2libGVCZWhpbmRBY3Rpdml0eSA9PSByKSB7CisgICAgICAgICAgICBpZiAoZ2V0VmlzaWJsZUJlaGluZEFjdGl2aXR5KCkgPT0gcikgewogICAgICAgICAgICAgICAgIG1TdGFja1N1cGVydmlzb3IucmVxdWVzdFZpc2libGVCZWhpbmRMb2NrZWQociwgZmFsc2UpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHIuZmluaXNoaW5nKSB7CkBAIC0xMDYxLDcgKzEwODUsNyBAQAogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBpZiAoci5jb25maWdEZXN0cm95KSB7CiAgICAgICAgICAgICAgICAgICAgIGRlc3Ryb3lBY3Rpdml0eUxvY2tlZChyLCB0cnVlLCAic3RvcC1jb25maWciKTsKLSAgICAgICAgICAgICAgICAgICAgbVN0YWNrU3VwZXJ2aXNvci5yZXN1bWVUb3BBY3Rpdml0aWVzTG9ja2VkKCk7CisgICAgICAgICAgICAgICAgICAgIG1TdGFja1N1cGVydmlzb3IucmVzdW1lRm9jdXNlZFN0YWNrVG9wQWN0aXZpdHlMb2NrZWQoKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLnVwZGF0ZVByZXZpb3VzUHJvY2Vzc0xvY2tlZChyKTsKICAgICAgICAgICAgICAgICB9CkBAIC0xMTE3LDE3ICsxMTQxLDE2IEBACiAgICAgICAgIGlmIChyZXN1bWVOZXh0KSB7CiAgICAgICAgICAgICBmaW5hbCBBY3Rpdml0eVN0YWNrIHRvcFN0YWNrID0gbVN0YWNrU3VwZXJ2aXNvci5nZXRGb2N1c2VkU3RhY2soKTsKICAgICAgICAgICAgIGlmICghbVNlcnZpY2UuaXNTbGVlcGluZ09yU2h1dHRpbmdEb3duKCkpIHsKLSAgICAgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLnJlc3VtZVRvcEFjdGl2aXRpZXNMb2NrZWQodG9wU3RhY2ssIHByZXYsIG51bGwpOworICAgICAgICAgICAgICAgIG1TdGFja1N1cGVydmlzb3IucmVzdW1lRm9jdXNlZFN0YWNrVG9wQWN0aXZpdHlMb2NrZWQodG9wU3RhY2ssIHByZXYsIG51bGwpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLmNoZWNrUmVhZHlGb3JTbGVlcExvY2tlZCgpOwogICAgICAgICAgICAgICAgIEFjdGl2aXR5UmVjb3JkIHRvcCA9IHRvcFN0YWNrLnRvcFJ1bm5pbmdBY3Rpdml0eUxvY2tlZCgpOwogICAgICAgICAgICAgICAgIGlmICh0b3AgPT0gbnVsbCB8fCAocHJldiAhPSBudWxsICYmIHRvcCAhPSBwcmV2KSkgewotICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbm8gbW9yZSBhY3Rpdml0aWVzIGF2YWlsYWJsZSB0byBydW4sCi0gICAgICAgICAgICAgICAgICAgIC8vIGRvIHJlc3VtZSBhbnl3YXkgdG8gc3RhcnQgc29tZXRoaW5nLiAgQWxzbyBpZiB0aGUgdG9wCi0gICAgICAgICAgICAgICAgICAgIC8vIGFjdGl2aXR5IG9uIHRoZSBzdGFjayBpcyBub3QgdGhlIGp1c3QgcGF1c2VkIGFjdGl2aXR5LAotICAgICAgICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIGdvIGFoZWFkIGFuZCByZXN1bWUgaXQgdG8gZW5zdXJlIHdlIGNvbXBsZXRlCi0gICAgICAgICAgICAgICAgICAgIC8vIGFuIGluLWZsaWdodCBhcHAgc3dpdGNoLgotICAgICAgICAgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLnJlc3VtZVRvcEFjdGl2aXRpZXNMb2NrZWQodG9wU3RhY2ssIG51bGwsIG51bGwpOworICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbm8gbW9yZSBhY3Rpdml0aWVzIGF2YWlsYWJsZSB0byBydW4sIGRvIHJlc3VtZSBhbnl3YXkgdG8gc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgLy8gc29tZXRoaW5nLiBBbHNvIGlmIHRoZSB0b3AgYWN0aXZpdHkgb24gdGhlIHN0YWNrIGlzIG5vdCB0aGUganVzdCBwYXVzZWQKKyAgICAgICAgICAgICAgICAgICAgLy8gYWN0aXZpdHksIHdlIG5lZWQgdG8gZ28gYWhlYWQgYW5kIHJlc3VtZSBpdCB0byBlbnN1cmUgd2UgY29tcGxldGUgYW4KKyAgICAgICAgICAgICAgICAgICAgLy8gaW4tZmxpZ2h0IGFwcCBzd2l0Y2guCisgICAgICAgICAgICAgICAgICAgIG1TdGFja1N1cGVydmlzb3IucmVzdW1lRm9jdXNlZFN0YWNrVG9wQWN0aXZpdHlMb2NrZWQoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTEyMTQsOSArMTIzNyw5IEBACiAKICAgICAgICAgbmV4dC5yZXR1cm5pbmdPcHRpb25zID0gbnVsbDsKIAotICAgICAgICBpZiAobUFjdGl2aXR5Q29udGFpbmVyLm1BY3Rpdml0eURpc3BsYXkubVZpc2libGVCZWhpbmRBY3Rpdml0eSA9PSBuZXh0KSB7CisgICAgICAgIGlmIChnZXRWaXNpYmxlQmVoaW5kQWN0aXZpdHkoKSA9PSBuZXh0KSB7CiAgICAgICAgICAgICAvLyBXaGVuIHJlc3VtaW5nIGFuIGFjdGl2aXR5LCByZXF1aXJlIGl0IHRvIGNhbGwgcmVxdWVzdFZpc2libGVCZWhpbmQoKSBhZ2Fpbi4KLSAgICAgICAgICAgIG1BY3Rpdml0eUNvbnRhaW5lci5tQWN0aXZpdHlEaXNwbGF5LnNldFZpc2libGVCZWhpbmRBY3Rpdml0eShudWxsKTsKKyAgICAgICAgICAgIHNldFZpc2libGVCZWhpbmRBY3Rpdml0eShudWxsKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTI4Miw3ICsxMzA1LDcgQEAKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQogCi0gICAgcHJpdmF0ZSBBY3Rpdml0eVN0YWNrIGdldE5leHRWaXNpYmxlU3RhY2tMb2NrZWQoKSB7CisgICAgQWN0aXZpdHlTdGFjayBnZXROZXh0Rm9jdXNhYmxlU3RhY2tMb2NrZWQoKSB7CiAgICAgICAgIEFycmF5TGlzdDxBY3Rpdml0eVN0YWNrPiBzdGFja3MgPSBtU3RhY2tzOwogICAgICAgICBmaW5hbCBBY3Rpdml0eVJlY29yZCBwYXJlbnQgPSBtQWN0aXZpdHlDb250YWluZXIubVBhcmVudEFjdGl2aXR5OwogICAgICAgICBpZiAocGFyZW50ICE9IG51bGwpIHsKQEAgLTEyOTEsNyArMTMxNCw3IEBACiAgICAgICAgIGlmIChzdGFja3MgIT0gbnVsbCkgewogICAgICAgICAgICAgZm9yIChpbnQgaSA9IHN0YWNrcy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewogICAgICAgICAgICAgICAgIEFjdGl2aXR5U3RhY2sgc3RhY2sgPSBzdGFja3MuZ2V0KGkpOwotICAgICAgICAgICAgICAgIGlmIChzdGFjayAhPSB0aGlzICYmIHN0YWNrLmlzU3RhY2tWaXNpYmxlTG9ja2VkKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoc3RhY2sgIT0gdGhpcyAmJiBzdGFjay5pc0ZvY3VzYWJsZSgpICYmIHN0YWNrLmlzU3RhY2tWaXNpYmxlTG9ja2VkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YWNrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTE0NjQsNyArMTQ4Nyw3IEBACiAgICAgICAgIGJvb2xlYW4gYWJvdmVUb3AgPSB0b3AgIT0gbnVsbDsKICAgICAgICAgZmluYWwgYm9vbGVhbiBzdGFja0ludmlzaWJsZSA9ICFpc1N0YWNrVmlzaWJsZUxvY2tlZCgpOwogICAgICAgICBib29sZWFuIGJlaGluZEZ1bGxzY3JlZW5BY3Rpdml0eSA9IHN0YWNrSW52aXNpYmxlOwotICAgICAgICBib29sZWFuIG5vU3RhY2tBY3Rpdml0eVJlc3VtZWQgPSAoaXNJblN0YWNrTG9ja2VkKHN0YXJ0aW5nKSA9PSBudWxsKTsKKyAgICAgICAgYm9vbGVhbiByZXN1bWVOZXh0QWN0aXZpdHkgPSBpc0ZvY3VzYWJsZSgpICYmIChpc0luU3RhY2tMb2NrZWQoc3RhcnRpbmcpID09IG51bGwpOwogCiAgICAgICAgIGZvciAoaW50IHRhc2tOZHggPSBtVGFza0hpc3Rvcnkuc2l6ZSgpIC0gMTsgdGFza05keCA+PSAwOyAtLXRhc2tOZHgpIHsKICAgICAgICAgICAgIGZpbmFsIFRhc2tSZWNvcmQgdGFzayA9IG1UYXNrSGlzdG9yeS5nZXQodGFza05keCk7CkBAIC0xNDk1LDE4ICsxNTE4LDE4IEBACiAKICAgICAgICAgICAgICAgICAgICAgaWYgKHIuYXBwID09IG51bGwgfHwgci5hcHAudGhyZWFkID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYWtlVmlzaWJsZUFuZFJlc3RhcnRJZk5lZWRlZChzdGFydGluZywgY29uZmlnQ2hhbmdlcywgaXNUb3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vU3RhY2tBY3Rpdml0eVJlc3VtZWQsIHIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VtZU5leHRBY3Rpdml0eSwgcikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aXZpdHlOZHggPj0gYWN0aXZpdGllcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVjb3JkIG1heSBiZSByZW1vdmVkIGlmIGl0cyBwcm9jZXNzIG5lZWRzIHRvIHJlc3RhcnQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2aXR5TmR4ID0gYWN0aXZpdGllcy5zaXplKCkgLSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vU3RhY2tBY3Rpdml0eVJlc3VtZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdW1lTmV4dEFjdGl2aXR5ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHIudmlzaWJsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBhY3Rpdml0eSBpcyBhbHJlYWR5IHZpc2libGUsIHRoZW4gdGhlcmUgaXMgbm90aGluZyB0byBkbyBoZXJlLgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZUFscmVhZHlWaXNpYmxlKHIpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9TdGFja0FjdGl2aXR5UmVzdW1lZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VtZU5leHRBY3Rpdml0eSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgbWFrZVZpc2libGUoc3RhcnRpbmcsIHIpOwpAQCAtMTU0Nyw3ICsxNTcwLDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIGJvb2xlYW4gbWFrZVZpc2libGVBbmRSZXN0YXJ0SWZOZWVkZWQoQWN0aXZpdHlSZWNvcmQgc3RhcnRpbmcsIGludCBjb25maWdDaGFuZ2VzLAotICAgICAgICAgICAgYm9vbGVhbiBpc1RvcCwgYm9vbGVhbiBub1N0YWNrQWN0aXZpdHlSZXN1bWVkLCBBY3Rpdml0eVJlY29yZCByKSB7CisgICAgICAgICAgICBib29sZWFuIGlzVG9wLCBib29sZWFuIGFuZFJlc3VtZSwgQWN0aXZpdHlSZWNvcmQgcikgewogICAgICAgICAvLyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgYXBwIGlzIHJ1bm5pbmcgaWYgaXQncyB0aGUgdG9wLCBvciBpdCBpcyBqdXN0IG1hZGUgdmlzaWJsZSBmcm9tCiAgICAgICAgIC8vIGludmlzaWJsZS4gSWYgdGhlIGFwcCBpcyBhbHJlYWR5IHZpc2libGUsIGl0IG11c3QgaGF2ZSBkaWVkIHdoaWxlIGl0IHdhcyB2aXNpYmxlLiBJbiB0aGlzCiAgICAgICAgIC8vIGNhc2UsIHdlJ2xsIHNob3cgdGhlIGRlYWQgd2luZG93IGJ1dCB3aWxsIG5vdCByZXN0YXJ0IHRoZSBhcHAuIE90aGVyd2lzZSB3ZSBjb3VsZCBlbmQgdXAKQEAgLTE1NjQsNyArMTU4Nyw3IEBACiAgICAgICAgICAgICAgICAgc2V0VmlzaWJsZShyLCB0cnVlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChyICE9IHN0YXJ0aW5nKSB7Ci0gICAgICAgICAgICAgICAgbVN0YWNrU3VwZXJ2aXNvci5zdGFydFNwZWNpZmljQWN0aXZpdHlMb2NrZWQociwgbm9TdGFja0FjdGl2aXR5UmVzdW1lZCwgZmFsc2UpOworICAgICAgICAgICAgICAgIG1TdGFja1N1cGVydmlzb3Iuc3RhcnRTcGVjaWZpY0FjdGl2aXR5TG9ja2VkKHIsIGFuZFJlc3VtZSwgZmFsc2UpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xNzU4LDE1ICsxNzgxLDE3IEBACiAgICAgICoKICAgICAgKiBAcGFyYW0gcHJldiBUaGUgcHJldmlvdXNseSByZXN1bWVkIGFjdGl2aXR5LCBmb3Igd2hlbiBpbiB0aGUgcHJvY2VzcwogICAgICAqIG9mIHBhdXNpbmc7IGNhbiBiZSBudWxsIHRvIGNhbGwgZnJvbSBlbHNld2hlcmUuCisgICAgICogQHBhcmFtIG9wdGlvbnMgQWN0aXZpdHkgb3B0aW9ucy4KICAgICAgKgogICAgICAqIEByZXR1cm4gUmV0dXJucyB0cnVlIGlmIHNvbWV0aGluZyBpcyBiZWluZyByZXN1bWVkLCBvciBmYWxzZSBpZgogICAgICAqIG5vdGhpbmcgaGFwcGVuZWQuCisgICAgICoKKyAgICAgKiBOT1RFOiBJdCBpcyBub3Qgc2FmZSB0byBjYWxsIHRoaXMgbWV0aG9kIGRpcmVjdGx5IGFzIGl0IGNhbiBjYXVzZSBhbiBhY3Rpdml0eSBpbiBhCisgICAgICogICAgICAgbm9uLWZvY3VzZWQgc3RhY2sgdG8gYmUgcmVzdW1lZC4KKyAgICAgKiAgICAgICBVc2Uge0BsaW5rIEFjdGl2aXR5U3RhY2tTdXBlcnZpc29yI3Jlc3VtZUZvY3VzZWRTdGFja1RvcEFjdGl2aXR5TG9ja2VkfSB0byByZXN1bWUgdGhlCisgICAgICogICAgICAgcmlnaHQgYWN0aXZpdHkgZm9yIHRoZSBjdXJyZW50IHN5c3RlbSBzdGF0ZS4KICAgICAgKi8KLSAgICBmaW5hbCBib29sZWFuIHJlc3VtZVRvcEFjdGl2aXR5TG9ja2VkKEFjdGl2aXR5UmVjb3JkIHByZXYpIHsKLSAgICAgICAgcmV0dXJuIHJlc3VtZVRvcEFjdGl2aXR5TG9ja2VkKHByZXYsIG51bGwpOwotICAgIH0KLQotICAgIGZpbmFsIGJvb2xlYW4gcmVzdW1lVG9wQWN0aXZpdHlMb2NrZWQoQWN0aXZpdHlSZWNvcmQgcHJldiwgQWN0aXZpdHlPcHRpb25zIG9wdGlvbnMpIHsKKyAgICBib29sZWFuIHJlc3VtZVRvcEFjdGl2aXR5VW5jaGVja2VkTG9ja2VkKEFjdGl2aXR5UmVjb3JkIHByZXYsIEFjdGl2aXR5T3B0aW9ucyBvcHRpb25zKSB7CiAgICAgICAgIGlmIChtU3RhY2tTdXBlcnZpc29yLmluUmVzdW1lVG9wQWN0aXZpdHkpIHsKICAgICAgICAgICAgIC8vIERvbid0IGV2ZW4gc3RhcnQgcmVjdXJzaW5nLgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTgxNywxNCArMTg0MiwxMyBAQAogICAgICAgICBpZiAobmV4dCA9PSBudWxsKSB7CiAgICAgICAgICAgICAvLyBUaGVyZSBhcmUgbm8gbW9yZSBhY3Rpdml0aWVzIQogICAgICAgICAgICAgZmluYWwgU3RyaW5nIHJlYXNvbiA9ICJub01vcmVBY3Rpdml0aWVzIjsKLSAgICAgICAgICAgIGlmICghbUZ1bGxzY3JlZW4pIHsKKyAgICAgICAgICAgIGlmICghbUZ1bGxzY3JlZW4gJiYgYWRqdXN0Rm9jdXNUb05leHRGb2N1c2FibGVTdGFja0xvY2tlZChyZWFzb24pKSB7CiAgICAgICAgICAgICAgICAgLy8gVHJ5IHRvIG1vdmUgZm9jdXMgdG8gdGhlIG5leHQgdmlzaWJsZSBzdGFjayB3aXRoIGEgcnVubmluZyBhY3Rpdml0eSBpZiB0aGlzCiAgICAgICAgICAgICAgICAgLy8gc3RhY2sgaXMgbm90IGNvdmVyaW5nIHRoZSBlbnRpcmUgc2NyZWVuLgotICAgICAgICAgICAgICAgIGZpbmFsIEFjdGl2aXR5U3RhY2sgc3RhY2sgPSBnZXROZXh0VmlzaWJsZVN0YWNrTG9ja2VkKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGFkanVzdEZvY3VzVG9OZXh0VmlzaWJsZVN0YWNrTG9ja2VkKHN0YWNrLCByZWFzb24pKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBtU3RhY2tTdXBlcnZpc29yLnJlc3VtZVRvcEFjdGl2aXRpZXNMb2NrZWQoc3RhY2ssIHByZXYsIG51bGwpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gbVN0YWNrU3VwZXJ2aXNvci5yZXN1bWVGb2N1c2VkU3RhY2tUb3BBY3Rpdml0eUxvY2tlZCgKKyAgICAgICAgICAgICAgICAgICAgICAgIG1TdGFja1N1cGVydmlzb3IuZ2V0Rm9jdXNlZFN0YWNrKCksIHByZXYsIG51bGwpOwogICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAvLyBMZXQncyBqdXN0IHN0YXJ0IHVwIHRoZSBMYXVuY2hlci4uLgogICAgICAgICAgICAgQWN0aXZpdHlPcHRpb25zLmFib3J0KG9wdGlvbnMpOwogICAgICAgICAgICAgaWYgKERFQlVHX1NUQVRFUykgU2xvZy5kKFRBR19TVEFURVMsCkBAIC0yODU2LDcgKzI4ODAsNyBAQAogICAgICAgICBmaW5hbCBBY3Rpdml0eVJlY29yZCBuZXh0ID0gdG9wUnVubmluZ0FjdGl2aXR5TG9ja2VkKCk7CiAgICAgICAgIGZpbmFsIFN0cmluZyBteVJlYXNvbiA9IHJlYXNvbiArICIgYWRqdXN0Rm9jdXMiOwogICAgICAgICBpZiAobmV4dCAhPSByKSB7Ci0gICAgICAgICAgICBpZiAobmV4dCAhPSBudWxsICYmIFN0YWNrSWQua2VlcEZvY3VzSW5TdGFja0lmUG9zc2libGUobVN0YWNrSWQpKSB7CisgICAgICAgICAgICBpZiAobmV4dCAhPSBudWxsICYmIFN0YWNrSWQua2VlcEZvY3VzSW5TdGFja0lmUG9zc2libGUobVN0YWNrSWQpICYmIGlzRm9jdXNhYmxlKCkpIHsKICAgICAgICAgICAgICAgICAvLyBGb3IgZnJlZWZvcm0sIGRvY2tlZCwgYW5kIHBpbm5lZCBzdGFja3Mgd2UgYWx3YXlzIGtlZXAgdGhlIGZvY3VzIHdpdGhpbiB0aGUKICAgICAgICAgICAgICAgICAvLyBzdGFjayBhcyBsb25nIGFzIHRoZXJlIGlzIGEgcnVubmluZyBhY3Rpdml0eSBpbiB0aGUgc3RhY2sgdGhhdCB3ZSBjYW4gYWRqdXN0CiAgICAgICAgICAgICAgICAgLy8gZm9jdXMgdG8uCkBAIC0yODY4LDggKzI4OTIsNyBAQAogICAgICAgICAgICAgICAgICAgICAvLyBGb3Igbm9uLWZ1bGxzY3JlZW4gc3RhY2ssIHdlIHdhbnQgdG8gbW92ZSB0aGUgZm9jdXMgdG8gdGhlIG5leHQgdmlzaWJsZQogICAgICAgICAgICAgICAgICAgICAvLyBzdGFjayB0byBwcmV2ZW50IHRoZSBob21lIHNjcmVlbiBmcm9tIG1vdmluZyB0byB0aGUgdG9wIGFuZCBvYnNjdXJpbmcKICAgICAgICAgICAgICAgICAgICAgLy8gb3RoZXIgdmlzaWJsZSBzdGFja3MuCi0gICAgICAgICAgICAgICAgICAgIGlmICghbUZ1bGxzY3JlZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBhZGp1c3RGb2N1c1RvTmV4dFZpc2libGVTdGFja0xvY2tlZChudWxsLCBteVJlYXNvbikpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtRnVsbHNjcmVlbiAmJiBhZGp1c3RGb2N1c1RvTmV4dEZvY3VzYWJsZVN0YWNrTG9ja2VkKG15UmVhc29uKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIC8vIE1vdmUgdGhlIGhvbWUgc3RhY2sgdG8gdGhlIHRvcCBpZiB0aGlzIHN0YWNrIGlzIGZ1bGxzY3JlZW4gb3IgdGhlcmUgaXMgbm8KQEAgLTI4ODMsMjQgKzI5MDYsMTYgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGZpbmFsIEFjdGl2aXR5UmVjb3JkIHRvcCA9IG1TdGFja1N1cGVydmlzb3IudG9wUnVubmluZ0FjdGl2aXR5TG9ja2VkKCk7Ci0gICAgICAgIGlmICh0b3AgIT0gbnVsbCkgewotICAgICAgICAgICAgbVNlcnZpY2Uuc2V0Rm9jdXNlZEFjdGl2aXR5TG9ja2VkKHRvcCwgbXlSZWFzb24pOwotICAgICAgICB9CisgICAgICAgIG1TZXJ2aWNlLnNldEZvY3VzZWRBY3Rpdml0eUxvY2tlZChtU3RhY2tTdXBlcnZpc29yLnRvcFJ1bm5pbmdBY3Rpdml0eUxvY2tlZCgpLCBteVJlYXNvbik7CiAgICAgfQogCi0gICAgcHJpdmF0ZSBib29sZWFuIGFkanVzdEZvY3VzVG9OZXh0VmlzaWJsZVN0YWNrTG9ja2VkKEFjdGl2aXR5U3RhY2sgaW5TdGFjaywgU3RyaW5nIHJlYXNvbikgewotICAgICAgICBmaW5hbCBBY3Rpdml0eVN0YWNrIHN0YWNrID0gKGluU3RhY2sgIT0gbnVsbCkgPyBpblN0YWNrIDogZ2V0TmV4dFZpc2libGVTdGFja0xvY2tlZCgpOwotICAgICAgICBmaW5hbCBTdHJpbmcgbXlSZWFzb24gPSByZWFzb24gKyAiIGFkanVzdEZvY3VzVG9OZXh0VmlzaWJsZVN0YWNrIjsKKyAgICBwcml2YXRlIGJvb2xlYW4gYWRqdXN0Rm9jdXNUb05leHRGb2N1c2FibGVTdGFja0xvY2tlZChTdHJpbmcgcmVhc29uKSB7CisgICAgICAgIGZpbmFsIEFjdGl2aXR5U3RhY2sgc3RhY2sgPSBnZXROZXh0Rm9jdXNhYmxlU3RhY2tMb2NrZWQoKTsKKyAgICAgICAgZmluYWwgU3RyaW5nIG15UmVhc29uID0gcmVhc29uICsgIiBhZGp1c3RGb2N1c1RvTmV4dEZvY3VzYWJsZVN0YWNrIjsKICAgICAgICAgaWYgKHN0YWNrID09IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICBmaW5hbCBBY3Rpdml0eVJlY29yZCB0b3AgPSBzdGFjay50b3BSdW5uaW5nQWN0aXZpdHlMb2NrZWQoKTsKLSAgICAgICAgaWYgKHRvcCA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgbVNlcnZpY2Uuc2V0Rm9jdXNlZEFjdGl2aXR5TG9ja2VkKHRvcCwgbXlSZWFzb24pOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIG1TZXJ2aWNlLnNldEZvY3VzZWRBY3Rpdml0eUxvY2tlZChzdGFjay50b3BSdW5uaW5nQWN0aXZpdHlMb2NrZWQoKSwgbXlSZWFzb24pOwogICAgIH0KIAogICAgIGZpbmFsIHZvaWQgc3RvcEFjdGl2aXR5TG9ja2VkKEFjdGl2aXR5UmVjb3JkIHIpIHsKQEAgLTMyMTAsNyArMzIyNSw3IEBACiAgICAgICAgICAgICByLm1ha2VGaW5pc2hpbmdMb2NrZWQoKTsKICAgICAgICAgICAgIGJvb2xlYW4gYWN0aXZpdHlSZW1vdmVkID0gZGVzdHJveUFjdGl2aXR5TG9ja2VkKHIsIHRydWUsICJmaW5pc2gtaW1tIik7CiAgICAgICAgICAgICBpZiAoYWN0aXZpdHlSZW1vdmVkKSB7Ci0gICAgICAgICAgICAgICAgbVN0YWNrU3VwZXJ2aXNvci5yZXN1bWVUb3BBY3Rpdml0aWVzTG9ja2VkKCk7CisgICAgICAgICAgICAgICAgbVN0YWNrU3VwZXJ2aXNvci5yZXN1bWVGb2N1c2VkU3RhY2tUb3BBY3Rpdml0eUxvY2tlZCgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKERFQlVHX0NPTlRBSU5FUlMpIFNsb2cuZChUQUdfQ09OVEFJTkVSUywKICAgICAgICAgICAgICAgICAgICAgImRlc3Ryb3lBY3Rpdml0eUxvY2tlZDogZmluaXNoQ3VycmVudEFjdGl2aXR5TG9ja2VkIHI9IiArIHIgKwpAQCAtMzIyMyw3ICszMjM4LDcgQEAKICAgICAgICAgaWYgKERFQlVHX0FMTCkgU2xvZy52KFRBRywgIkVucXVldWVpbmcgcGVuZGluZyBmaW5pc2g6ICIgKyByKTsKICAgICAgICAgbVN0YWNrU3VwZXJ2aXNvci5tRmluaXNoaW5nQWN0aXZpdGllcy5hZGQocik7CiAgICAgICAgIHIucmVzdW1lS2V5RGlzcGF0Y2hpbmdMb2NrZWQoKTsKLSAgICAgICAgbVN0YWNrU3VwZXJ2aXNvci5nZXRGb2N1c2VkU3RhY2soKS5yZXN1bWVUb3BBY3Rpdml0eUxvY2tlZChudWxsKTsKKyAgICAgICAgbVN0YWNrU3VwZXJ2aXNvci5yZXN1bWVGb2N1c2VkU3RhY2tUb3BBY3Rpdml0eUxvY2tlZCgpOwogICAgICAgICByZXR1cm4gcjsKICAgICB9CiAKQEAgLTMzNDgsNyArMzM2Myw3IEBACiAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlJbmZvIGFJbmZvID0gQXBwR2xvYmFscy5nZXRQYWNrYWdlTWFuYWdlcigpLmdldEFjdGl2aXR5SW5mbygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0SW50ZW50LmdldENvbXBvbmVudCgpLCAwLCBzcmVjLnVzZXJJZCk7Ci0gICAgICAgICAgICAgICAgICAgIGludCByZXMgPSBtU3RhY2tTdXBlcnZpc29yLnN0YXJ0QWN0aXZpdHlMb2NrZWQoc3JlYy5hcHAudGhyZWFkLCBkZXN0SW50ZW50LAorICAgICAgICAgICAgICAgICAgICBpbnQgcmVzID0gbVNlcnZpY2UubUFjdGl2aXR5U3RhcnRlci5zdGFydEFjdGl2aXR5TG9ja2VkKHNyZWMuYXBwLnRocmVhZCwgZGVzdEludGVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsIC8qZXBoZW1lcmFsSW50ZW50Ki8sIG51bGwsIGFJbmZvLCBudWxsIC8qckluZm8qLywgbnVsbCwgbnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQuYXBwVG9rZW4sIG51bGwsIDAsIC0xLCBwYXJlbnQubGF1bmNoZWRGcm9tVWlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC5sYXVuY2hlZEZyb21QYWNrYWdlLCAtMSwgcGFyZW50LmxhdW5jaGVkRnJvbVVpZCwgMCwgbnVsbCwKQEAgLTMzODEsNyArMzM5Niw3IEBACiAgICAgICAgIGlmIChtUGF1c2luZ0FjdGl2aXR5ID09IHIpIHsKICAgICAgICAgICAgIG1QYXVzaW5nQWN0aXZpdHkgPSBudWxsOwogICAgICAgICB9Ci0gICAgICAgIG1TZXJ2aWNlLmNsZWFyRm9jdXNlZEFjdGl2aXR5KHIpOworICAgICAgICBtU2VydmljZS5yZXNldEZvY3VzZWRBY3Rpdml0eUlmTmVlZGVkTG9ja2VkKHIpOwogCiAgICAgICAgIHIuY29uZmlnRGVzdHJveSA9IGZhbHNlOwogICAgICAgICByLmZyb3plbkJlZm9yZURlc3Ryb3kgPSBmYWxzZTsKQEAgLTM1MTIsNyArMzUyNyw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKGFjdGl2aXR5UmVtb3ZlZCkgewotICAgICAgICAgICAgbVN0YWNrU3VwZXJ2aXNvci5yZXN1bWVUb3BBY3Rpdml0aWVzTG9ja2VkKCk7CisgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLnJlc3VtZUZvY3VzZWRTdGFja1RvcEFjdGl2aXR5TG9ja2VkKCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTM2ODYsNyArMzcwMSw3IEBACiAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUFjdGl2aXR5RnJvbUhpc3RvcnlMb2NrZWQociwgcmVhc29uKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLnJlc3VtZVRvcEFjdGl2aXRpZXNMb2NrZWQoKTsKKyAgICAgICAgICAgIG1TdGFja1N1cGVydmlzb3IucmVzdW1lRm9jdXNlZFN0YWNrVG9wQWN0aXZpdHlMb2NrZWQoKTsKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIEJpbmRlci5yZXN0b3JlQ2FsbGluZ0lkZW50aXR5KG9yaWdJZCk7CiAgICAgICAgIH0KQEAgLTM3MjQsNyArMzczOSw3IEBACiAgICAgICAgICAgICBzZXRWaXNpYmxlQmVoaW5kQWN0aXZpdHkobnVsbCk7CiAgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLnNjaGVkdWxlSWRsZVRpbWVvdXRMb2NrZWQobnVsbCk7CiAgICAgICAgIH0KLSAgICAgICAgbVN0YWNrU3VwZXJ2aXNvci5yZXN1bWVUb3BBY3Rpdml0aWVzTG9ja2VkKCk7CisgICAgICAgIG1TdGFja1N1cGVydmlzb3IucmVzdW1lRm9jdXNlZFN0YWNrVG9wQWN0aXZpdHlMb2NrZWQoKTsKICAgICB9CiAKICAgICBib29sZWFuIGhhc1Zpc2libGVCZWhpbmRBY3Rpdml0eSgpIHsKQEAgLTM5MzksNyArMzk1NCw3IEBACiAgICAgICAgICAgICB1cGRhdGVUcmFuc2l0TG9ja2VkKEFwcFRyYW5zaXRpb24uVFJBTlNJVF9UQVNLX1RPX0ZST05ULCBvcHRpb25zKTsKICAgICAgICAgfQogCi0gICAgICAgIG1TdGFja1N1cGVydmlzb3IucmVzdW1lVG9wQWN0aXZpdGllc0xvY2tlZCgpOworICAgICAgICBtU3RhY2tTdXBlcnZpc29yLnJlc3VtZUZvY3VzZWRTdGFja1RvcEFjdGl2aXR5TG9ja2VkKCk7CiAgICAgICAgIEV2ZW50TG9nLndyaXRlRXZlbnQoRXZlbnRMb2dUYWdzLkFNX1RBU0tfVE9fRlJPTlQsIHRyLnVzZXJJZCwgdHIudGFza0lkKTsKIAogICAgICAgICBpZiAoVkFMSURBVEVfVE9LRU5TKSB7CkBAIC00MDAyLDcgKzQwMTcsNyBAQAogICAgICAgICAgICAgaWYgKGZ1bGxzY3JlZW5TdGFjayAhPSBudWxsICYmIGZ1bGxzY3JlZW5TdGFjay5oYXNWaXNpYmxlQmVoaW5kQWN0aXZpdHkoKSkgewogICAgICAgICAgICAgICAgIGZpbmFsIEFjdGl2aXR5UmVjb3JkIHZpc2libGVCZWhpbmQgPSBmdWxsc2NyZWVuU3RhY2suZ2V0VmlzaWJsZUJlaGluZEFjdGl2aXR5KCk7CiAgICAgICAgICAgICAgICAgbVNlcnZpY2Uuc2V0Rm9jdXNlZEFjdGl2aXR5TG9ja2VkKHZpc2libGVCZWhpbmQsICJtb3ZlVGFza1RvQmFjayIpOwotICAgICAgICAgICAgICAgIG1TdGFja1N1cGVydmlzb3IucmVzdW1lVG9wQWN0aXZpdGllc0xvY2tlZChmdWxsc2NyZWVuU3RhY2ssIG51bGwsIG51bGwpOworICAgICAgICAgICAgICAgIG1TdGFja1N1cGVydmlzb3IucmVzdW1lRm9jdXNlZFN0YWNrVG9wQWN0aXZpdHlMb2NrZWQoKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNDA1Nyw3ICs0MDcyLDcgQEAKICAgICAgICAgICAgIHJldHVybiBtU3RhY2tTdXBlcnZpc29yLnJlc3VtZUhvbWVTdGFja1Rhc2sodGFza1RvUmV0dXJuVG8sIG51bGwsICJtb3ZlVGFza1RvQmFjayIpOwogICAgICAgICB9CiAKLSAgICAgICAgbVN0YWNrU3VwZXJ2aXNvci5yZXN1bWVUb3BBY3Rpdml0aWVzTG9ja2VkKCk7CisgICAgICAgIG1TdGFja1N1cGVydmlzb3IucmVzdW1lRm9jdXNlZFN0YWNrVG9wQWN0aXZpdHlMb2NrZWQoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC00Mjk5LDYgKzQzMTQsNyBAQAogICAgICAgICAgICAgci5hcHAudGhyZWFkLnNjaGVkdWxlUmVsYXVuY2hBY3Rpdml0eShyLmFwcFRva2VuLCByZXN1bHRzLCBuZXdJbnRlbnRzLCBjaGFuZ2VzLAogICAgICAgICAgICAgICAgICAgICAhYW5kUmVzdW1lLCBuZXcgQ29uZmlndXJhdGlvbihtU2VydmljZS5tQ29uZmlndXJhdGlvbiksCiAgICAgICAgICAgICAgICAgICAgIG5ldyBDb25maWd1cmF0aW9uKHIudGFzay5tT3ZlcnJpZGVDb25maWcpLCBwcmVzZXJ2ZVdpbmRvdyk7CisgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLmFjdGl2aXR5UmVsYXVuY2hpbmdMb2NrZWQocik7CiAgICAgICAgICAgICAvLyBOb3RlOiBkb24ndCBuZWVkIHRvIGNhbGwgcGF1c2VJZlNsZWVwaW5nTG9ja2VkKCkgaGVyZSwgYmVjYXVzZQogICAgICAgICAgICAgLy8gdGhlIGNhbGxlciB3aWxsIG9ubHkgcGFzcyBpbiAnYW5kUmVzdW1lJyBpZiB0aGlzIGFjdGl2aXR5IGlzCiAgICAgICAgICAgICAvLyBjdXJyZW50bHkgcmVzdW1lZCwgd2hpY2ggaW1wbGllcyB3ZSBhcmVuJ3Qgc2xlZXBpbmcuCkBAIC00NjQ3LDcgKzQ2NjMsNyBAQAogICAgICAgICAgICAgLy8gV2Ugb25seSBuZWVkIHRvIGFkanVzdCBmb2N1c2VkIHN0YWNrIGlmIHRoaXMgc3RhY2sgaXMgaW4gZm9jdXMuCiAgICAgICAgICAgICBpZiAoaXNPbkhvbWVEaXNwbGF5KCkgJiYgbVN0YWNrU3VwZXJ2aXNvci5pc0ZvY3VzZWRTdGFjayh0aGlzKSkgewogICAgICAgICAgICAgICAgIFN0cmluZyBteVJlYXNvbiA9IHJlYXNvbiArICIgbGVmdFRhc2tIaXN0b3J5RW1wdHkiOwotICAgICAgICAgICAgICAgIGlmIChtRnVsbHNjcmVlbiB8fCAhYWRqdXN0Rm9jdXNUb05leHRWaXNpYmxlU3RhY2tMb2NrZWQobnVsbCwgbXlSZWFzb24pKSB7CisgICAgICAgICAgICAgICAgaWYgKG1GdWxsc2NyZWVuIHx8ICFhZGp1c3RGb2N1c1RvTmV4dEZvY3VzYWJsZVN0YWNrTG9ja2VkKG15UmVhc29uKSkgewogICAgICAgICAgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLm1vdmVIb21lU3RhY2tUb0Zyb250KG15UmVhc29uKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC00NzIwLDEwICs0NzM2LDcgQEAKIAogICAgIHByaXZhdGUgdm9pZCBwb3N0QWRkVGFzayhUYXNrUmVjb3JkIHRhc2ssIEFjdGl2aXR5U3RhY2sgcHJldlN0YWNrKSB7CiAgICAgICAgIGlmIChwcmV2U3RhY2sgIT0gbnVsbCkgewotICAgICAgICAgICAgaWYgKHByZXZTdGFjayAhPSB0aGlzCi0gICAgICAgICAgICAgICAgICAgICYmIChwcmV2U3RhY2subVN0YWNrSWQgPT0gUElOTkVEX1NUQUNLX0lEIHx8IG1TdGFja0lkID09IFBJTk5FRF9TVEFDS19JRCkpIHsKLSAgICAgICAgICAgICAgICB0YXNrLnJlcG9ydFBpY3R1cmVJblBpY3R1cmVNb2RlQ2hhbmdlKCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICB0YXNrLnJlcG9ydFBpY3R1cmVJblBpY3R1cmVNb2RlQ2hhbmdlSWZOZWVkZWQocHJldlN0YWNrKTsKICAgICAgICAgfSBlbHNlIGlmICh0YXNrLnZvaWNlU2Vzc2lvbiAhPSBudWxsKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIHRhc2sudm9pY2VTZXNzaW9uLnRhc2tTdGFydGVkKHRhc2suaW50ZW50LCB0YXNrLnRhc2tJZCk7CkBAIC00NzM3LDMyICs0NzUwLDI4IEBACiAgICAgICAgIHRhc2sudXBkYXRlT3ZlcnJpZGVDb25maWd1cmF0aW9uKGJvdW5kcyk7CiAgICAgICAgIG1XaW5kb3dNYW5hZ2VyLmFkZEFwcFRva2VuKHRhc2subUFjdGl2aXRpZXMuaW5kZXhPZihyKSwgci5hcHBUb2tlbiwKICAgICAgICAgICAgICAgICByLnRhc2sudGFza0lkLCBtU3RhY2tJZCwgci5pbmZvLnNjcmVlbk9yaWVudGF0aW9uLCByLmZ1bGxzY3JlZW4sCi0gICAgICAgICAgICAgICAgKHIuaW5mby5mbGFncyAmIEFjdGl2aXR5SW5mby5GTEFHX1NIT1dfRk9SX0FMTF9VU0VSUykgIT0gMCwgci51c2VySWQsCi0gICAgICAgICAgICAgICAgci5pbmZvLmNvbmZpZ0NoYW5nZXMsIHRhc2sudm9pY2VTZXNzaW9uICE9IG51bGwsIHIubUxhdW5jaFRhc2tCZWhpbmQsCi0gICAgICAgICAgICAgICAgYm91bmRzLCB0YXNrLm1PdmVycmlkZUNvbmZpZywgIXIuaXNIb21lQWN0aXZpdHkoKSk7CisgICAgICAgICAgICAgICAgKHIuaW5mby5mbGFncyAmIEZMQUdfU0hPV19GT1JfQUxMX1VTRVJTKSAhPSAwLCByLnVzZXJJZCwgci5pbmZvLmNvbmZpZ0NoYW5nZXMsCisgICAgICAgICAgICAgICAgdGFzay52b2ljZVNlc3Npb24gIT0gbnVsbCwgci5tTGF1bmNoVGFza0JlaGluZCwgYm91bmRzLCB0YXNrLm1PdmVycmlkZUNvbmZpZywKKyAgICAgICAgICAgICAgICAhci5pc0hvbWVBY3Rpdml0eSgpLCByLmlzQWx3YXlzRm9jdXNhYmxlKCkpOwogICAgICAgICBtV2luZG93TWFuYWdlci5zZXRUYXNrUmVzaXplYWJsZSh0YXNrLnRhc2tJZCwgdGFzay5tUmVzaXplYWJsZSk7CiAgICAgICAgIHIudGFza0NvbmZpZ092ZXJyaWRlID0gdGFzay5tT3ZlcnJpZGVDb25maWc7CiAgICAgfQogCi0gICAgdm9pZCBzZXRGb2N1c0FuZFJlc3VtZVN0YXRlSWZOZWVkZWQoCi0gICAgICAgICAgICBBY3Rpdml0eVJlY29yZCByLCBib29sZWFuIHNldEZvY3VzLCBib29sZWFuIHNldFJlc3VtZSwgU3RyaW5nIHJlYXNvbikgewotICAgICAgICAvLyBJZiB0aGUgYWN0aXZpdHkgaGFkIGZvY3VzIGJlZm9yZSBtb3ZlIGZvY3VzIHRvIHRoaXMgc3RhY2suCi0gICAgICAgIGlmIChzZXRGb2N1cykgewotICAgICAgICAgICAgLy8gSWYgdGhlIGFjdGl2aXR5IG93bnMgdGhlIGxhc3QgcmVzdW1lZCBhY3Rpdml0eSwgdHJhbnNmZXIgdGhhdCB0b2dldGhlciwKLSAgICAgICAgICAgIC8vIHNvIHRoYXQgd2UgZG9uJ3QgcmVzdW1lIHRoZSBzYW1lIGFjdGl2aXR5IGFnYWluIGluIHRoZSBuZXcgc3RhY2suCi0gICAgICAgICAgICAvLyBBcHBzIG1heSBkZXBlbmQgb24gb25SZXN1bWUoKS9vblBhdXNlKCkgYmVpbmcgY2FsbGVkIGluIHBhaXJzLgotICAgICAgICAgICAgaWYgKHNldFJlc3VtZSkgewotICAgICAgICAgICAgICAgIG1SZXN1bWVkQWN0aXZpdHkgPSByOwotICAgICAgICAgICAgICAgIC8vIE1vdmUgdGhlIHN0YWNrIGluIHdoaWNoIHdlIGFyZSBwbGFjaW5nIHRoZSBhY3Rpdml0eSB0byB0aGUgZnJvbnQuIFdlIGRvbid0IHVzZQotICAgICAgICAgICAgICAgIC8vIEFjdGl2aXR5TWFuYWdlclNlcnZpY2Uuc2V0Rm9jdXNlZEFjdGl2aXR5TG9ja2VkLCBiZWNhdXNlIGlmIHRoZSBhY3Rpdml0eSBpcwotICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgZm9jdXNlZCwgdGhlIGNhbGwgd2lsbCBzaG9ydC1jaXJjdWl0IGFuZCBkbyBub3RoaW5nLgotICAgICAgICAgICAgICAgIG1vdmVUb0Zyb250KHJlYXNvbik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gbm90IG9ubHkgbW92ZSB0aGUgc3RhY2sgdG8gdGhlIGZyb250LCBidXQgYWxzbyBoYXZlIHRoZSBhY3Rpdml0eQotICAgICAgICAgICAgICAgIC8vIGZvY3VzZWQuIFRoaXMgd2lsbCBhY2hpZXZlIGJvdGggZ29hbHMuCi0gICAgICAgICAgICAgICAgbVNlcnZpY2Uuc2V0Rm9jdXNlZEFjdGl2aXR5TG9ja2VkKHIsIHJlYXNvbik7Ci0gICAgICAgICAgICB9CisgICAgdm9pZCBtb3ZlVG9Gcm9udEFuZFJlc3VtZVN0YXRlSWZOZWVkZWQoCisgICAgICAgICAgICBBY3Rpdml0eVJlY29yZCByLCBib29sZWFuIG1vdmVUb0Zyb250LCBib29sZWFuIHNldFJlc3VtZSwgU3RyaW5nIHJlYXNvbikgeworICAgICAgICBpZiAoIW1vdmVUb0Zyb250KSB7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKworICAgICAgICAvLyBJZiB0aGUgYWN0aXZpdHkgb3ducyB0aGUgbGFzdCByZXN1bWVkIGFjdGl2aXR5LCB0cmFuc2ZlciB0aGF0IHRvZ2V0aGVyLAorICAgICAgICAvLyBzbyB0aGF0IHdlIGRvbid0IHJlc3VtZSB0aGUgc2FtZSBhY3Rpdml0eSBhZ2FpbiBpbiB0aGUgbmV3IHN0YWNrLgorICAgICAgICAvLyBBcHBzIG1heSBkZXBlbmQgb24gb25SZXN1bWUoKS9vblBhdXNlKCkgYmVpbmcgY2FsbGVkIGluIHBhaXJzLgorICAgICAgICBpZiAoc2V0UmVzdW1lKSB7CisgICAgICAgICAgICBtUmVzdW1lZEFjdGl2aXR5ID0gcjsKKyAgICAgICAgfQorICAgICAgICAvLyBNb3ZlIHRoZSBzdGFjayBpbiB3aGljaCB3ZSBhcmUgcGxhY2luZyB0aGUgYWN0aXZpdHkgdG8gdGhlIGZyb250LiBUaGUgY2FsbCB3aWxsIGFsc28KKyAgICAgICAgLy8gbWFrZSBzdXJlIHRoZSBhY3Rpdml0eSBmb2N1cyBpcyBzZXQuCisgICAgICAgIG1vdmVUb0Zyb250KHJlYXNvbik7CiAgICAgfQogCiAgICAgLyoqCkBAIC00Nzg2LDggKzQ3OTUsMTEgQEAKICAgICAgICAgci5zZXRUYXNrKHRhc2ssIG51bGwpOwogICAgICAgICB0YXNrLmFkZEFjdGl2aXR5VG9Ub3Aocik7CiAgICAgICAgIHNldEFwcFRhc2sociwgdGFzayk7Ci0gICAgICAgIHRhc2sucmVwb3J0UGljdHVyZUluUGljdHVyZU1vZGVDaGFuZ2UoKTsKLSAgICAgICAgc2V0Rm9jdXNBbmRSZXN1bWVTdGF0ZUlmTmVlZGVkKHIsIHdhc0ZvY3VzZWQsIHdhc1Jlc3VtZWQsICJtb3ZlQWN0aXZpdHlUb1N0YWNrIik7CisgICAgICAgIHRhc2sucmVwb3J0UGljdHVyZUluUGljdHVyZU1vZGVDaGFuZ2VJZk5lZWRlZChwcmV2U3RhY2spOworICAgICAgICBtb3ZlVG9Gcm9udEFuZFJlc3VtZVN0YXRlSWZOZWVkZWQociwgd2FzRm9jdXNlZCwgd2FzUmVzdW1lZCwgIm1vdmVBY3Rpdml0eVRvU3RhY2siKTsKKyAgICAgICAgaWYgKHdhc1Jlc3VtZWQpIHsKKyAgICAgICAgICAgIHByZXZTdGFjay5tUmVzdW1lZEFjdGl2aXR5ID0gbnVsbDsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBzZXRBcHBUYXNrKEFjdGl2aXR5UmVjb3JkIHIsIFRhc2tSZWNvcmQgdGFzaykgewpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9BY3Rpdml0eVN0YWNrU3VwZXJ2aXNvci5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9BY3Rpdml0eVN0YWNrU3VwZXJ2aXNvci5qYXZhCmluZGV4IDY4NDViZjAuLjQ2NzIwMjMgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vQWN0aXZpdHlTdGFja1N1cGVydmlzb3IuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL0FjdGl2aXR5U3RhY2tTdXBlcnZpc29yLmphdmEKQEAgLTE2LDg0ICsxNiw2IEBACiAKIHBhY2thZ2UgY29tLmFuZHJvaWQuc2VydmVyLmFtOwogCi1pbXBvcnQgc3RhdGljIGFuZHJvaWQuTWFuaWZlc3QucGVybWlzc2lvbi5TVEFSVF9BTllfQUNUSVZJVFk7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5MT0NLX1RBU0tfTU9ERV9MT0NLRUQ7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5MT0NLX1RBU0tfTU9ERV9OT05FOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuTE9DS19UQVNLX01PREVfUElOTkVEOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuUkVTSVpFX01PREVfRk9SQ0VEOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuUkVTSVpFX01PREVfU1lTVEVNOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuU3RhY2tJZC5ET0NLRURfU1RBQ0tfSUQ7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5TdGFja0lkLkZJUlNUX0RZTkFNSUNfU1RBQ0tfSUQ7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5TdGFja0lkLkZJUlNUX1NUQVRJQ19TVEFDS19JRDsKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlN0YWNrSWQuRlJFRUZPUk1fV09SS1NQQUNFX1NUQUNLX0lEOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuU3RhY2tJZC5GVUxMU0NSRUVOX1dPUktTUEFDRV9TVEFDS19JRDsKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlN0YWNrSWQuSE9NRV9TVEFDS19JRDsKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlN0YWNrSWQuSU5WQUxJRF9TVEFDS19JRDsKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlN0YWNrSWQuTEFTVF9TVEFUSUNfU1RBQ0tfSUQ7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5TdGFja0lkLlBJTk5FRF9TVEFDS19JRDsKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LkludGVudC5GTEFHX0FDVElWSVRZX0NMRUFSX1RBU0s7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5JbnRlbnQuRkxBR19BQ1RJVklUWV9DTEVBUl9UT1A7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5JbnRlbnQuRkxBR19BQ1RJVklUWV9MQVVOQ0hfVE9fU0lERTsKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LkludGVudC5GTEFHX0FDVElWSVRZX01VTFRJUExFX1RBU0s7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5JbnRlbnQuRkxBR19BQ1RJVklUWV9ORVdfVEFTSzsKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LkludGVudC5GTEFHX0FDVElWSVRZX1RBU0tfT05fSE9NRTsKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LnBtLkFjdGl2aXR5SW5mby5GTEFHX1NIT1dfRk9SX0FMTF9VU0VSUzsKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLlBFUk1JU1NJT05fR1JBTlRFRDsKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC5vcy5UcmFjZS5UUkFDRV9UQUdfQUNUSVZJVFlfTUFOQUdFUjsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX0FMTDsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX0NPTkZJR1VSQVRJT047Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eU1hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19DT05UQUlORVJTOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfRk9DVVM7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eU1hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19JRExFOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfTE9DS1NDUkVFTjsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX0xPQ0tUQVNLOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfUEFVU0U7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eU1hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19QRVJNSVNTSU9OU19SRVZJRVc7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eU1hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19SRUNFTlRTOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfUkVMRUFTRTsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX1JFU1VMVFM7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eU1hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19TVEFDSzsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX1NUQVRFUzsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX1NXSVRDSDsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX1RBU0tTOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfVVNFUl9MRUFWSU5HOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfVklTSUJMRV9CRUhJTkQ7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eU1hbmFnZXJEZWJ1Z0NvbmZpZy5QT1NURklYX0NPTkZJR1VSQVRJT047Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eU1hbmFnZXJEZWJ1Z0NvbmZpZy5QT1NURklYX0NPTlRBSU5FUlM7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eU1hbmFnZXJEZWJ1Z0NvbmZpZy5QT1NURklYX0ZPQ1VTOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlNYW5hZ2VyRGVidWdDb25maWcuUE9TVEZJWF9JRExFOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlNYW5hZ2VyRGVidWdDb25maWcuUE9TVEZJWF9MT0NLVEFTSzsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5TWFuYWdlckRlYnVnQ29uZmlnLlBPU1RGSVhfUEFVU0U7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eU1hbmFnZXJEZWJ1Z0NvbmZpZy5QT1NURklYX1JFQ0VOVFM7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eU1hbmFnZXJEZWJ1Z0NvbmZpZy5QT1NURklYX1JFTEVBU0U7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eU1hbmFnZXJEZWJ1Z0NvbmZpZy5QT1NURklYX1JFU1VMVFM7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eU1hbmFnZXJEZWJ1Z0NvbmZpZy5QT1NURklYX1NUQUNLOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlNYW5hZ2VyRGVidWdDb25maWcuUE9TVEZJWF9TVEFURVM7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eU1hbmFnZXJEZWJ1Z0NvbmZpZy5QT1NURklYX1NXSVRDSDsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5TWFuYWdlckRlYnVnQ29uZmlnLlBPU1RGSVhfVEFTS1M7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eU1hbmFnZXJEZWJ1Z0NvbmZpZy5QT1NURklYX1VTRVJfTEVBVklORzsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5TWFuYWdlckRlYnVnQ29uZmlnLlBPU1RGSVhfVklTSUJMRV9CRUhJTkQ7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eU1hbmFnZXJEZWJ1Z0NvbmZpZy5UQUdfQU07Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eU1hbmFnZXJEZWJ1Z0NvbmZpZy5UQUdfV0lUSF9DTEFTU19OQU1FOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlNYW5hZ2VyU2VydmljZS5BTklNQVRFOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlNYW5hZ2VyU2VydmljZS5GSVJTVF9TVVBFUlZJU09SX1NUQUNLX01TRzsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5UmVjb3JkLkFQUExJQ0FUSU9OX0FDVElWSVRZX1RZUEU7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eVJlY29yZC5IT01FX0FDVElWSVRZX1RZUEU7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eVJlY29yZC5SRUNFTlRTX0FDVElWSVRZX1RZUEU7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eVN0YWNrLkFjdGl2aXR5U3RhdGUuREVTVFJPWUVEOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlTdGFjay5BY3Rpdml0eVN0YXRlLkRFU1RST1lJTkc7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eVN0YWNrLkFjdGl2aXR5U3RhdGUuSU5JVElBTElaSU5HOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlTdGFjay5BY3Rpdml0eVN0YXRlLlBBVVNFRDsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5U3RhY2suQWN0aXZpdHlTdGF0ZS5QQVVTSU5HOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlTdGFjay5BY3Rpdml0eVN0YXRlLlJFU1VNRUQ7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eVN0YWNrLkFjdGl2aXR5U3RhdGUuU1RPUFBFRDsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5U3RhY2suQWN0aXZpdHlTdGF0ZS5TVE9QUElORzsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLlRhc2tSZWNvcmQuTE9DS19UQVNLX0FVVEhfRE9OVF9MT0NLOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uVGFza1JlY29yZC5MT0NLX1RBU0tfQVVUSF9MQVVOQ0hBQkxFOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uVGFza1JlY29yZC5MT0NLX1RBU0tfQVVUSF9MQVVOQ0hBQkxFX1BSSVY7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5UYXNrUmVjb3JkLkxPQ0tfVEFTS19BVVRIX1BJTk5BQkxFOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uVGFza1JlY29yZC5MT0NLX1RBU0tfQVVUSF9XSElURUxJU1RFRDsKLQogaW1wb3J0IGFuZHJvaWQuTWFuaWZlc3Q7CiBpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7CiBpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyOwpAQCAtMTA3LDkgKzI5LDYgQEAKIGltcG9ydCBhbmRyb2lkLmFwcC5JQWN0aXZpdHlDb250YWluZXJDYWxsYmFjazsKIGltcG9ydCBhbmRyb2lkLmFwcC5JQWN0aXZpdHlNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuYXBwLklBY3Rpdml0eU1hbmFnZXIuV2FpdFJlc3VsdDsKLWltcG9ydCBhbmRyb2lkLmFwcC5JQXBwbGljYXRpb25UaHJlYWQ7Ci1pbXBvcnQgYW5kcm9pZC5hcHAuS2V5Z3VhcmRNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQuYXBwLlBlbmRpbmdJbnRlbnQ7CiBpbXBvcnQgYW5kcm9pZC5hcHAuUHJvZmlsZXJJbmZvOwogaW1wb3J0IGFuZHJvaWQuYXBwLlJlc3VsdEluZm87CiBpbXBvcnQgYW5kcm9pZC5hcHAuU3RhdHVzQmFyTWFuYWdlcjsKQEAgLTExOCw3ICszNyw2IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LklJbnRlbnRTZW5kZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50U2VuZGVyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5BY3Rpdml0eUluZm87CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLkFwcGxpY2F0aW9uSW5mbzsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZUluZm87CkBAIC0xMzMsMTAgKzUxLDcgQEAKIGltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLmRpc3BsYXkuVmlydHVhbERpc3BsYXk7CiBpbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5pbnB1dC5JbnB1dE1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5pbnB1dC5JbnB1dE1hbmFnZXJJbnRlcm5hbDsKLWltcG9ydCBhbmRyb2lkLm5ldC5Vcmk7CiBpbXBvcnQgYW5kcm9pZC5vcy5CaW5kZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdWlsZDsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKIGltcG9ydCBhbmRyb2lkLm9zLkRlYnVnOwogaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKIGltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CkBAIC0xNjgsOCArODMsNiBAQAogaW1wb3J0IGFuZHJvaWQudmlldy5JbnB1dEV2ZW50OwogaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNlOwogCi1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuYXBwLkhlYXZ5V2VpZ2h0U3dpdGNoZXJBY3Rpdml0eTsKLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5hcHAuSVZvaWNlSW50ZXJhY3RvcjsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5jb250ZW50LlJlZmVycmVySW50ZW50OwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLm9zLlRyYW5zZmVyUGlwZTsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5zdGF0dXNiYXIuSVN0YXR1c0JhclNlcnZpY2U7CkBAIC0xODcsMjMgKzEwMCw4MyBAQAogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogaW1wb3J0IGphdmEudXRpbC5TZXQ7CiAKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5NYW5pZmVzdC5wZXJtaXNzaW9uLlNUQVJUX0FOWV9BQ1RJVklUWTsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLkxPQ0tfVEFTS19NT0RFX0xPQ0tFRDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLkxPQ0tfVEFTS19NT0RFX05PTkU7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5MT0NLX1RBU0tfTU9ERV9QSU5ORUQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5SRVNJWkVfTU9ERV9GT1JDRUQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5SRVNJWkVfTU9ERV9TWVNURU07CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5TdGFja0lkLkRPQ0tFRF9TVEFDS19JRDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlN0YWNrSWQuRklSU1RfRFlOQU1JQ19TVEFDS19JRDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlN0YWNrSWQuRklSU1RfU1RBVElDX1NUQUNLX0lEOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuU3RhY2tJZC5GUkVFRk9STV9XT1JLU1BBQ0VfU1RBQ0tfSUQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5TdGFja0lkLkZVTExTQ1JFRU5fV09SS1NQQUNFX1NUQUNLX0lEOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuU3RhY2tJZC5IT01FX1NUQUNLX0lEOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuU3RhY2tJZC5JTlZBTElEX1NUQUNLX0lEOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuU3RhY2tJZC5MQVNUX1NUQVRJQ19TVEFDS19JRDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlN0YWNrSWQuUElOTkVEX1NUQUNLX0lEOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQuSW50ZW50LkZMQUdfQUNUSVZJVFlfTVVMVElQTEVfVEFTSzsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LkludGVudC5GTEFHX0FDVElWSVRZX05FV19UQVNLOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQucG0uQWN0aXZpdHlJbmZvLkZMQUdfU0hPV19GT1JfQUxMX1VTRVJTOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuUEVSTUlTU0lPTl9HUkFOVEVEOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLm9zLlRyYWNlLlRSQUNFX1RBR19BQ1RJVklUWV9NQU5BR0VSOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfQUxMOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfQ09OVEFJTkVSUzsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX0lETEU7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eU1hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19MT0NLU0NSRUVOOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfTE9DS1RBU0s7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eU1hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19QQVVTRTsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX1JFQ0VOVFM7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eU1hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19SRUxFQVNFOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfU1RBQ0s7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eU1hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19TVEFURVM7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eU1hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19TV0lUQ0g7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eU1hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19UQVNLUzsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX1ZJU0lCTEVfQkVISU5EOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlNYW5hZ2VyRGVidWdDb25maWcuUE9TVEZJWF9DT05UQUlORVJTOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlNYW5hZ2VyRGVidWdDb25maWcuUE9TVEZJWF9JRExFOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlNYW5hZ2VyRGVidWdDb25maWcuUE9TVEZJWF9MT0NLVEFTSzsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5TWFuYWdlckRlYnVnQ29uZmlnLlBPU1RGSVhfUEFVU0U7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eU1hbmFnZXJEZWJ1Z0NvbmZpZy5QT1NURklYX1JFQ0VOVFM7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eU1hbmFnZXJEZWJ1Z0NvbmZpZy5QT1NURklYX1JFTEVBU0U7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eU1hbmFnZXJEZWJ1Z0NvbmZpZy5QT1NURklYX1NUQUNLOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlNYW5hZ2VyRGVidWdDb25maWcuUE9TVEZJWF9TVEFURVM7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eU1hbmFnZXJEZWJ1Z0NvbmZpZy5QT1NURklYX1NXSVRDSDsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5TWFuYWdlckRlYnVnQ29uZmlnLlBPU1RGSVhfVEFTS1M7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eU1hbmFnZXJEZWJ1Z0NvbmZpZy5QT1NURklYX1ZJU0lCTEVfQkVISU5EOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlNYW5hZ2VyRGVidWdDb25maWcuVEFHX0FNOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlNYW5hZ2VyRGVidWdDb25maWcuVEFHX1dJVEhfQ0xBU1NfTkFNRTsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5TWFuYWdlclNlcnZpY2UuRklSU1RfU1VQRVJWSVNPUl9TVEFDS19NU0c7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eVJlY29yZC5BUFBMSUNBVElPTl9BQ1RJVklUWV9UWVBFOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlSZWNvcmQuSE9NRV9BQ1RJVklUWV9UWVBFOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlSZWNvcmQuUkVDRU5UU19BQ1RJVklUWV9UWVBFOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlTdGFjay5BY3Rpdml0eVN0YXRlLkRFU1RST1lFRDsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5U3RhY2suQWN0aXZpdHlTdGF0ZS5ERVNUUk9ZSU5HOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlTdGFjay5BY3Rpdml0eVN0YXRlLklOSVRJQUxJWklORzsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5U3RhY2suQWN0aXZpdHlTdGF0ZS5QQVVTRUQ7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eVN0YWNrLkFjdGl2aXR5U3RhdGUuUEFVU0lORzsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5U3RhY2suQWN0aXZpdHlTdGF0ZS5SRVNVTUVEOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlTdGFjay5BY3Rpdml0eVN0YXRlLlNUT1BQRUQ7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eVN0YWNrLkFjdGl2aXR5U3RhdGUuU1RPUFBJTkc7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5UYXNrUmVjb3JkLkxPQ0tfVEFTS19BVVRIX0RPTlRfTE9DSzsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLlRhc2tSZWNvcmQuTE9DS19UQVNLX0FVVEhfTEFVTkNIQUJMRTsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLlRhc2tSZWNvcmQuTE9DS19UQVNLX0FVVEhfTEFVTkNIQUJMRV9QUklWOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uVGFza1JlY29yZC5MT0NLX1RBU0tfQVVUSF9QSU5OQUJMRTsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLlRhc2tSZWNvcmQuTE9DS19UQVNLX0FVVEhfV0hJVEVMSVNURUQ7CisKIHB1YmxpYyBmaW5hbCBjbGFzcyBBY3Rpdml0eVN0YWNrU3VwZXJ2aXNvciBpbXBsZW1lbnRzIERpc3BsYXlMaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9IFRBR19XSVRIX0NMQVNTX05BTUUgPyAiQWN0aXZpdHlTdGFja1N1cGVydmlzb3IiIDogVEFHX0FNOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdfQ09ORklHVVJBVElPTiA9IFRBRyArIFBPU1RGSVhfQ09ORklHVVJBVElPTjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHX0NPTlRBSU5FUlMgPSBUQUcgKyBQT1NURklYX0NPTlRBSU5FUlM7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBR19GT0NVUyA9IFRBRyArIFBPU1RGSVhfRk9DVVM7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBR19JRExFID0gVEFHICsgUE9TVEZJWF9JRExFOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdfTE9DS1RBU0sgPSBUQUcgKyBQT1NURklYX0xPQ0tUQVNLOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdfUEFVU0UgPSBUQUcgKyBQT1NURklYX1BBVVNFOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdfUkVDRU5UUyA9IFRBRyArIFBPU1RGSVhfUkVDRU5UUzsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHX1JFTEVBU0UgPSBUQUcgKyBQT1NURklYX1JFTEVBU0U7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBR19SRVNVTFRTID0gVEFHICsgUE9TVEZJWF9SRVNVTFRTOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdfU1RBQ0sgPSBUQUcgKyBQT1NURklYX1NUQUNLOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdfU1RBVEVTID0gVEFHICsgUE9TVEZJWF9TVEFURVM7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBR19TV0lUQ0ggPSBUQUcgKyBQT1NURklYX1NXSVRDSDsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHX1RBU0tTID0gVEFHICsgUE9TVEZJWF9UQVNLUzsKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIFRBR19UQVNLUyA9IFRBRyArIFBPU1RGSVhfVEFTS1M7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBR19WSVNJQkxFX0JFSElORCA9IFRBRyArIFBPU1RGSVhfVklTSUJMRV9CRUhJTkQ7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBR19VU0VSX0xFQVZJTkcgPSBUQUcgKyBQT1NURklYX1VTRVJfTEVBVklORzsKIAogICAgIC8qKiBIb3cgbG9uZyB3ZSB3YWl0IHVudGlsIGdpdmluZyB1cCBvbiB0aGUgbGFzdCBhY3Rpdml0eSB0ZWxsaW5nIHVzIGl0IGlzIGlkbGUuICovCiAgICAgc3RhdGljIGZpbmFsIGludCBJRExFX1RJTUVPVVQgPSAxMCAqIDEwMDA7CkBAIC0yMzUsNyArMjA4LDcgQEAKIAogICAgIC8vIFVzZWQgdG8gaW5kaWNhdGUgaWYgYW4gb2JqZWN0IChlLmcuIHN0YWNrKSB0aGF0IHdlIGFyZSB0cnlpbmcgdG8gZ2V0CiAgICAgLy8gc2hvdWxkIGJlIGNyZWF0ZWQgaWYgaXQgZG9lc24ndCBleGlzdCBhbHJlYWR5LgotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gQ1JFQVRFX0lGX05FRURFRCA9IHRydWU7CisgICAgc3RhdGljIGZpbmFsIGJvb2xlYW4gQ1JFQVRFX0lGX05FRURFRCA9IHRydWU7CiAKICAgICAvLyBVc2VkIHRvIGluZGljYXRlIHRoYXQgd2luZG93cyBvZiBhY3Rpdml0aWVzIHNob3VsZCBiZSBwcmVzZXJ2ZWQgZHVyaW5nIHRoZSByZXNpemUuCiAgICAgc3RhdGljIGZpbmFsIGJvb2xlYW4gUFJFU0VSVkVfV0lORE9XUyA9IHRydWU7CkBAIC0zMDgsMTQgKzI4MSwxNCBAQAogICAgIHByaXZhdGUgaW50IG1DdXJUYXNrSWQgPSAwOwogCiAgICAgLyoqIFRoZSBjdXJyZW50IHVzZXIgKi8KLSAgICBwcml2YXRlIGludCBtQ3VycmVudFVzZXI7CisgICAgaW50IG1DdXJyZW50VXNlcjsKIAogICAgIC8qKiBUaGUgc3RhY2sgY29udGFpbmluZyB0aGUgbGF1bmNoZXIgYXBwLiBBc3N1bWVkIHRvIGFsd2F5cyBiZSBhdHRhY2hlZCB0bwogICAgICAqIERpc3BsYXkuREVGQVVMVF9ESVNQTEFZLiAqLwotICAgIHByaXZhdGUgQWN0aXZpdHlTdGFjayBtSG9tZVN0YWNrOworICAgIEFjdGl2aXR5U3RhY2sgbUhvbWVTdGFjazsKIAogICAgIC8qKiBUaGUgc3RhY2sgY3VycmVudGx5IHJlY2VpdmluZyBpbnB1dCBvciBsYXVuY2hpbmcgdGhlIG5leHQgYWN0aXZpdHkuICovCi0gICAgcHJpdmF0ZSBBY3Rpdml0eVN0YWNrIG1Gb2N1c2VkU3RhY2s7CisgICAgQWN0aXZpdHlTdGFjayBtRm9jdXNlZFN0YWNrOwogCiAgICAgLyoqIElmIHRoaXMgaXMgdGhlIHNhbWUgYXMgbUZvY3VzZWRTdGFjayB0aGVuIHRoZSBhY3Rpdml0eSBvbiB0aGUgdG9wIG9mIHRoZSBmb2N1c2VkIHN0YWNrIGhhcwogICAgICAqIGJlZW4gcmVzdW1lZC4gSWYgc3RhY2tzIGFyZSBjaGFuZ2luZyBwb3NpdGlvbiB0aGlzIHdpbGwgaG9sZCB0aGUgb2xkIHN0YWNrIHVudGlsIHRoZSBuZXcKQEAgLTM5Nyw5ICszNzAsNyBAQAogICAgICAqLwogICAgIHByaXZhdGUgTG9ja1Rhc2tOb3RpZnkgbUxvY2tUYXNrTm90aWZ5OwogCi0gICAgZmluYWwgQXJyYXlMaXN0PFBlbmRpbmdBY3Rpdml0eUxhdW5jaD4gbVBlbmRpbmdBY3Rpdml0eUxhdW5jaGVzID0gbmV3IEFycmF5TGlzdDw+KCk7Ci0KLSAgICAvKiogVXNlZCB0byBrZWVwIHJlc3VtZVRvcEFjdGl2aXR5TG9ja2VkKCkgZnJvbSBiZWluZyBlbnRlcmVkIHJlY3Vyc2l2ZWx5ICovCisgICAgLyoqIFVzZWQgdG8ga2VlcCByZXN1bWVUb3BBY3Rpdml0eVVuY2hlY2tlZExvY2tlZCgpIGZyb20gYmVpbmcgZW50ZXJlZCByZWN1cnNpdmVseSAqLwogICAgIGJvb2xlYW4gaW5SZXN1bWVUb3BBY3Rpdml0eTsKIAogICAgIC8vIHRlbXAuIHJlY3RzIHVzZWQgZHVyaW5nIHJlc2l6ZSBjYWxjdWxhdGlvbiBzbyB3ZSBkb24ndCBuZWVkIHRvIGNyZWF0ZSBhIG5ldyBvYmplY3QgZWFjaCB0aW1lLgpAQCAtNDA4LDYgKzM3OSw3IEBACiAKICAgICBwcml2YXRlIGZpbmFsIFNwYXJzZUFycmF5PENvbmZpZ3VyYXRpb24+IG1UbXBDb25maWdzID0gbmV3IFNwYXJzZUFycmF5PD4oKTsKICAgICBwcml2YXRlIGZpbmFsIFNwYXJzZUFycmF5PFJlY3Q+IG1UbXBCb3VuZHMgPSBuZXcgU3BhcnNlQXJyYXk8PigpOworICAgIHByaXZhdGUgZmluYWwgU3BhcnNlQXJyYXk8UmVjdD4gbVRtcEluc2V0Qm91bmRzID0gbmV3IFNwYXJzZUFycmF5PD4oKTsKIAogICAgIC8vIFRoZSBkZWZhdWx0IG1pbmltYWwgc2l6ZSB0aGF0IHdpbGwgYmUgdXNlZCBpZiB0aGUgYWN0aXZpdHkgZG9lc24ndCBzcGVjaWZ5IGl0cyBtaW5pbWFsIHNpemUuCiAgICAgLy8gSXQgd2lsbCBiZSBjYWxjdWxhdGVkIHdoZW4gdGhlIGRlZmF1bHQgZGlzcGxheSBnZXRzIGFkZGVkLgpAQCAtNDE4LDYgKzM5MCwxNCBAQAogCiAgICAgcHJpdmF0ZSBmaW5hbCBBY3Rpdml0eU1ldHJpY3NMb2dnZXIgbUFjdGl2aXR5TWV0cmljc0xvZ2dlcjsKIAorICAgIHByaXZhdGUgZmluYWwgUmVzaXplRG9ja2VkU3RhY2tUaW1lb3V0IG1SZXNpemVEb2NrZWRTdGFja1RpbWVvdXQ7CisKKyAgICBzdGF0aWMgY2xhc3MgRmluZFRhc2tSZXN1bHQgeworICAgICAgICBBY3Rpdml0eVJlY29yZCByOworICAgICAgICBib29sZWFuIG1hdGNoZWRCeVJvb3RBZmZpbml0eTsKKyAgICB9CisgICAgcHJpdmF0ZSBmaW5hbCBGaW5kVGFza1Jlc3VsdCBtVG1wRmluZFRhc2tSZXN1bHQgPSBuZXcgRmluZFRhc2tSZXN1bHQoKTsKKwogICAgIC8qKgogICAgICAqIERlc2NyaXB0aW9uIG9mIGEgcmVxdWVzdCB0byBzdGFydCBhIG5ldyBhY3Rpdml0eSwgd2hpY2ggaGFzIGJlZW4gaGVsZAogICAgICAqIGR1ZSB0byBhcHAgc3dpdGNoZXMgYmVpbmcgZGlzYWJsZWQuCkBAIC00NTUsNiArNDM1LDcgQEAKICAgICAgICAgbVJlY2VudFRhc2tzID0gcmVjZW50VGFza3M7CiAgICAgICAgIG1IYW5kbGVyID0gbmV3IEFjdGl2aXR5U3RhY2tTdXBlcnZpc29ySGFuZGxlcihtU2VydmljZS5tSGFuZGxlci5nZXRMb29wZXIoKSk7CiAgICAgICAgIG1BY3Rpdml0eU1ldHJpY3NMb2dnZXIgPSBuZXcgQWN0aXZpdHlNZXRyaWNzTG9nZ2VyKHRoaXMsIG1TZXJ2aWNlLm1Db250ZXh0KTsKKyAgICAgICAgbVJlc2l6ZURvY2tlZFN0YWNrVGltZW91dCA9IG5ldyBSZXNpemVEb2NrZWRTdGFja1RpbWVvdXQoc2VydmljZSwgdGhpcywgbUhhbmRsZXIpOwogICAgIH0KIAogICAgIC8qKgpAQCAtNTE1LDggKzQ5Niw4IEBACiAgICAgICAgICAgICAgICAgY2FsY3VsYXRlRGVmYXVsdE1pbmltYWxTaXplT2ZSZXNpemVhYmxlVGFza3MoYWN0aXZpdHlEaXNwbGF5KTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgY3JlYXRlU3RhY2tPbkRpc3BsYXkoSE9NRV9TVEFDS19JRCwgRGlzcGxheS5ERUZBVUxUX0RJU1BMQVksIHRydWUpOwotICAgICAgICAgICAgbUhvbWVTdGFjayA9IG1Gb2N1c2VkU3RhY2sgPSBtTGFzdEZvY3VzZWRTdGFjayA9IGdldFN0YWNrKEhPTUVfU1RBQ0tfSUQpOworICAgICAgICAgICAgbUhvbWVTdGFjayA9IG1Gb2N1c2VkU3RhY2sgPSBtTGFzdEZvY3VzZWRTdGFjayA9CisgICAgICAgICAgICAgICAgICAgIGdldFN0YWNrKEhPTUVfU1RBQ0tfSUQsIENSRUFURV9JRl9ORUVERUQsIE9OX1RPUCk7CiAKICAgICAgICAgICAgIG1JbnB1dE1hbmFnZXJJbnRlcm5hbCA9IExvY2FsU2VydmljZXMuZ2V0U2VydmljZShJbnB1dE1hbmFnZXJJbnRlcm5hbC5jbGFzcyk7CiAgICAgICAgIH0KQEAgLTU2MCwxNiArNTQxLDMwIEBACiAgICAgICAgIHJldHVybiBzdGFjayA9PSBtSG9tZVN0YWNrLm1TdGFja3MuZ2V0KChtSG9tZVN0YWNrLm1TdGFja3Muc2l6ZSgpIC0gMSkpOwogICAgIH0KIAotICAgIHZvaWQgc2V0Rm9jdXNTdGFjayhTdHJpbmcgcmVhc29uLCBBY3Rpdml0eVN0YWNrIGZvY3VzZWRTdGFjaykgewotICAgICAgICBtTGFzdEZvY3VzZWRTdGFjayA9IG1Gb2N1c2VkU3RhY2s7Ci0gICAgICAgIG1Gb2N1c2VkU3RhY2sgPSBmb2N1c2VkU3RhY2s7CisgICAgLyoqIE5PVEU6IFNob3VsZCBvbmx5IGJlIGNhbGxlZCBmcm9tIHtAbGluayBBY3Rpdml0eVN0YWNrI21vdmVUb0Zyb250fSAqLworICAgIHZvaWQgc2V0Rm9jdXNTdGFja1VuY2hlY2tlZChTdHJpbmcgcmVhc29uLCBBY3Rpdml0eVN0YWNrIGZvY3VzQ2FuZGlkYXRlKSB7CisgICAgICAgIGlmICghZm9jdXNDYW5kaWRhdGUuaXNGb2N1c2FibGUoKSkgeworICAgICAgICAgICAgLy8gVGhlIGZvY3VzIGNhbmRpZGF0ZSBpc24ndCBmb2N1c2FibGUuIE1vdmUgZm9jdXMgdG8gdGhlIHRvcCBzdGFjayB0aGF0IGlzIGZvY3VzYWJsZS4KKyAgICAgICAgICAgIGZvY3VzQ2FuZGlkYXRlID0gZm9jdXNDYW5kaWRhdGUuZ2V0TmV4dEZvY3VzYWJsZVN0YWNrTG9ja2VkKCk7CisgICAgICAgIH0KIAotICAgICAgICBFdmVudExvZ1RhZ3Mud3JpdGVBbUZvY3VzZWRTdGFjaygKLSAgICAgICAgICAgICAgICBtQ3VycmVudFVzZXIsIG1Gb2N1c2VkU3RhY2sgPT0gbnVsbCA/IC0xIDogbUZvY3VzZWRTdGFjay5nZXRTdGFja0lkKCksCi0gICAgICAgICAgICAgICAgbUxhc3RGb2N1c2VkU3RhY2sgPT0gbnVsbCA/IC0xIDogbUxhc3RGb2N1c2VkU3RhY2suZ2V0U3RhY2tJZCgpLCByZWFzb24pOworICAgICAgICBpZiAoZm9jdXNDYW5kaWRhdGUgIT0gbUZvY3VzZWRTdGFjaykgeworICAgICAgICAgICAgbUxhc3RGb2N1c2VkU3RhY2sgPSBtRm9jdXNlZFN0YWNrOworICAgICAgICAgICAgbUZvY3VzZWRTdGFjayA9IGZvY3VzQ2FuZGlkYXRlOworCisgICAgICAgICAgICBFdmVudExvZ1RhZ3Mud3JpdGVBbUZvY3VzZWRTdGFjaygKKyAgICAgICAgICAgICAgICAgICAgbUN1cnJlbnRVc2VyLCBtRm9jdXNlZFN0YWNrID09IG51bGwgPyAtMSA6IG1Gb2N1c2VkU3RhY2suZ2V0U3RhY2tJZCgpLAorICAgICAgICAgICAgICAgICAgICBtTGFzdEZvY3VzZWRTdGFjayA9PSBudWxsID8gLTEgOiBtTGFzdEZvY3VzZWRTdGFjay5nZXRTdGFja0lkKCksIHJlYXNvbik7CisgICAgICAgIH0KKworICAgICAgICBmaW5hbCBBY3Rpdml0eVJlY29yZCByID0gdG9wUnVubmluZ0FjdGl2aXR5TG9ja2VkKCk7CisgICAgICAgIGlmIChtU2VydmljZS5tRm9jdXNlZEFjdGl2aXR5ICE9IHIpIHsKKyAgICAgICAgICAgIC8vIFRoZSBmb2N1cyBhY3Rpdml0eSBzaG91bGQgYWx3YXlzIGJlIHRoZSB0b3AgYWN0aXZpdHkgaW4gdGhlIGZvY3VzZWQgc3RhY2suCisgICAgICAgICAgICAvLyBUaGVyZSB3aWxsIGJlIGNoYW9zIGFuZCBhbmFyY2h5IGlmIGl0IGlzbid0Li4uCisgICAgICAgICAgICBtU2VydmljZS5zZXRGb2N1c2VkQWN0aXZpdHlMb2NrZWQociwgcmVhc29uICsgIiBzZXRGb2N1c1N0YWNrIik7CisgICAgICAgIH0KIAogICAgICAgICBpZiAobVNlcnZpY2UubUJvb3RpbmcgfHwgIW1TZXJ2aWNlLm1Cb290ZWQpIHsKLSAgICAgICAgICAgIGZpbmFsIEFjdGl2aXR5UmVjb3JkIHIgPSB0b3BSdW5uaW5nQWN0aXZpdHlMb2NrZWQoKTsKICAgICAgICAgICAgIGlmIChyICE9IG51bGwgJiYgci5pZGxlKSB7CiAgICAgICAgICAgICAgICAgY2hlY2tGaW5pc2hCb290aW5nTG9ja2VkKCk7CiAgICAgICAgICAgICB9CkBAIC02MTQsMTIgKzYwOSwxNCBAQAogCiAgICAgICAgIG1Ib21lU3RhY2subW92ZUhvbWVTdGFja1Rhc2tUb1RvcChob21lU3RhY2tUYXNrVHlwZSk7CiAgICAgICAgIEFjdGl2aXR5UmVjb3JkIHIgPSBnZXRIb21lQWN0aXZpdHkoKTsKKyAgICAgICAgZmluYWwgU3RyaW5nIG15UmVhc29uID0gcmVhc29uICsgIiByZXN1bWVIb21lU3RhY2tUYXNrIjsKKwogICAgICAgICAvLyBPbmx5IHJlc3VtZSBob21lIGFjdGl2aXR5IGlmIGlzbid0IGZpbmlzaGluZy4KICAgICAgICAgaWYgKHIgIT0gbnVsbCAmJiAhci5maW5pc2hpbmcpIHsKLSAgICAgICAgICAgIG1TZXJ2aWNlLnNldEZvY3VzZWRBY3Rpdml0eUxvY2tlZChyLCByZWFzb24pOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VtZVRvcEFjdGl2aXRpZXNMb2NrZWQobUhvbWVTdGFjaywgcHJldiwgbnVsbCk7CisgICAgICAgICAgICBtU2VydmljZS5zZXRGb2N1c2VkQWN0aXZpdHlMb2NrZWQociwgbXlSZWFzb24pOworICAgICAgICAgICAgcmV0dXJuIHJlc3VtZUZvY3VzZWRTdGFja1RvcEFjdGl2aXR5TG9ja2VkKG1Ib21lU3RhY2ssIHByZXYsIG51bGwpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtU2VydmljZS5zdGFydEhvbWVBY3Rpdml0eUxvY2tlZChtQ3VycmVudFVzZXIsIHJlYXNvbik7CisgICAgICAgIHJldHVybiBtU2VydmljZS5zdGFydEhvbWVBY3Rpdml0eUxvY2tlZChtQ3VycmVudFVzZXIsIG15UmVhc29uKTsKICAgICB9CiAKICAgICBUYXNrUmVjb3JkIGFueVRhc2tGb3JJZExvY2tlZChpbnQgaWQpIHsKQEAgLTkxNiw3ICs5MTMsNyBAQAogICAgICAgICBmaW5hbCBBcnJheUxpc3Q8QWN0aXZpdHlTdGFjaz4gc3RhY2tzID0gbUhvbWVTdGFjay5tU3RhY2tzOwogICAgICAgICBmb3IgKGludCBzdGFja05keCA9IHN0YWNrcy5zaXplKCkgLSAxOyBzdGFja05keCA+PSAwOyAtLXN0YWNrTmR4KSB7CiAgICAgICAgICAgICBmaW5hbCBBY3Rpdml0eVN0YWNrIHN0YWNrID0gc3RhY2tzLmdldChzdGFja05keCk7Ci0gICAgICAgICAgICBpZiAoc3RhY2sgIT0gZm9jdXNlZFN0YWNrICYmIGlzRnJvbnRTdGFjayhzdGFjaykpIHsKKyAgICAgICAgICAgIGlmIChzdGFjayAhPSBmb2N1c2VkU3RhY2sgJiYgaXNGcm9udFN0YWNrKHN0YWNrKSAmJiBzdGFjay5pc0ZvY3VzYWJsZSgpKSB7CiAgICAgICAgICAgICAgICAgciA9IHN0YWNrLnRvcFJ1bm5pbmdBY3Rpdml0eUxvY2tlZCgpOwogICAgICAgICAgICAgICAgIGlmIChyICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHI7CkBAIC0xMDExLDI3MCArMTAwOCw2IEBACiAgICAgICAgIHJldHVybiByZXNvbHZlQWN0aXZpdHkoaW50ZW50LCBySW5mbywgc3RhcnRGbGFncywgcHJvZmlsZXJJbmZvKTsKICAgICB9CiAKLSAgICB2b2lkIHN0YXJ0SG9tZUFjdGl2aXR5KEludGVudCBpbnRlbnQsIEFjdGl2aXR5SW5mbyBhSW5mbywgU3RyaW5nIHJlYXNvbikgewotICAgICAgICBtb3ZlSG9tZVN0YWNrVGFza1RvVG9wKEhPTUVfQUNUSVZJVFlfVFlQRSwgcmVhc29uKTsKLSAgICAgICAgc3RhcnRBY3Rpdml0eUxvY2tlZChudWxsIC8qY2FsbGVyKi8sIGludGVudCwgbnVsbCAvKmVwaGVtZXJhbEludGVudCovLAotICAgICAgICAgICAgICAgIG51bGwgLypyZXNvbHZlZFR5cGUqLywgYUluZm8sIG51bGwgLypySW5mbyovLCBudWxsIC8qdm9pY2VTZXNzaW9uKi8sCi0gICAgICAgICAgICAgICAgbnVsbCAvKnZvaWNlSW50ZXJhY3RvciovLCBudWxsIC8qcmVzdWx0VG8qLywgbnVsbCAvKnJlc3VsdFdobyovLAotICAgICAgICAgICAgICAgIDAgLypyZXF1ZXN0Q29kZSovLCAwIC8qY2FsbGluZ1BpZCovLCAwIC8qY2FsbGluZ1VpZCovLCBudWxsIC8qY2FsbGluZ1BhY2thZ2UqLywKLSAgICAgICAgICAgICAgICAwIC8qcmVhbENhbGxpbmdQaWQqLywgMCAvKnJlYWxDYWxsaW5nVWlkKi8sIDAgLypzdGFydEZsYWdzKi8sIG51bGwgLypvcHRpb25zKi8sCi0gICAgICAgICAgICAgICAgZmFsc2UgLyppZ25vcmVUYXJnZXRTZWN1cml0eSovLCBmYWxzZSAvKmNvbXBvbmVudFNwZWNpZmllZCovLCAgbnVsbCAvKm91dEFjdGl2aXR5Ki8sCi0gICAgICAgICAgICAgICAgbnVsbCAvKmNvbnRhaW5lciovLCBudWxsIC8qaW5UYXNrKi8pOwotICAgICAgICBpZiAoaW5SZXN1bWVUb3BBY3Rpdml0eSkgewotICAgICAgICAgICAgLy8gSWYgd2UgYXJlIGluIHJlc3VtZSBzZWN0aW9uIGFscmVhZHksIGhvbWUgYWN0aXZpdHkgd2lsbCBiZSBpbml0aWFsaXplZCwgYnV0IG5vdAotICAgICAgICAgICAgLy8gcmVzdW1lZCAodG8gYXZvaWQgcmVjdXJzaXZlIHJlc3VtZSkgYW5kIHdpbGwgc3RheSB0aGF0IHdheSB1bnRpbCBzb21ldGhpbmcgcG9rZXMgaXQKLSAgICAgICAgICAgIC8vIGFnYWluLiBXZSBuZWVkIHRvIHNjaGVkdWxlIGFub3RoZXIgcmVzdW1lLgotICAgICAgICAgICAgc2NoZWR1bGVSZXN1bWVUb3BBY3Rpdml0aWVzKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmaW5hbCBpbnQgc3RhcnRBY3Rpdml0eU1heVdhaXQoSUFwcGxpY2F0aW9uVGhyZWFkIGNhbGxlciwgaW50IGNhbGxpbmdVaWQsCi0gICAgICAgICAgICBTdHJpbmcgY2FsbGluZ1BhY2thZ2UsIEludGVudCBpbnRlbnQsIFN0cmluZyByZXNvbHZlZFR5cGUsCi0gICAgICAgICAgICBJVm9pY2VJbnRlcmFjdGlvblNlc3Npb24gdm9pY2VTZXNzaW9uLCBJVm9pY2VJbnRlcmFjdG9yIHZvaWNlSW50ZXJhY3RvciwKLSAgICAgICAgICAgIElCaW5kZXIgcmVzdWx0VG8sIFN0cmluZyByZXN1bHRXaG8sIGludCByZXF1ZXN0Q29kZSwgaW50IHN0YXJ0RmxhZ3MsCi0gICAgICAgICAgICBQcm9maWxlckluZm8gcHJvZmlsZXJJbmZvLCBXYWl0UmVzdWx0IG91dFJlc3VsdCwgQ29uZmlndXJhdGlvbiBjb25maWcsCi0gICAgICAgICAgICBCdW5kbGUgYk9wdGlvbnMsIGJvb2xlYW4gaWdub3JlVGFyZ2V0U2VjdXJpdHksIGludCB1c2VySWQsCi0gICAgICAgICAgICBJQWN0aXZpdHlDb250YWluZXIgaUNvbnRhaW5lciwgVGFza1JlY29yZCBpblRhc2spIHsKLSAgICAgICAgLy8gUmVmdXNlIHBvc3NpYmxlIGxlYWtlZCBmaWxlIGRlc2NyaXB0b3JzCi0gICAgICAgIGlmIChpbnRlbnQgIT0gbnVsbCAmJiBpbnRlbnQuaGFzRmlsZURlc2NyaXB0b3JzKCkpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkZpbGUgZGVzY3JpcHRvcnMgcGFzc2VkIGluIEludGVudCIpOwotICAgICAgICB9Ci0gICAgICAgIGJvb2xlYW4gY29tcG9uZW50U3BlY2lmaWVkID0gaW50ZW50LmdldENvbXBvbmVudCgpICE9IG51bGw7Ci0KLSAgICAgICAgLy8gU2F2ZSBhIGNvcHkgaW4gY2FzZSBlcGhlbWVyYWwgbmVlZHMgaXQKLSAgICAgICAgZmluYWwgSW50ZW50IGVwaGVtZXJhbEludGVudCA9IG5ldyBJbnRlbnQoaW50ZW50KTsKLSAgICAgICAgLy8gRG9uJ3QgbW9kaWZ5IHRoZSBjbGllbnQncyBvYmplY3QhCi0gICAgICAgIGludGVudCA9IG5ldyBJbnRlbnQoaW50ZW50KTsKLQotICAgICAgICBSZXNvbHZlSW5mbyBySW5mbyA9IHJlc29sdmVJbnRlbnQoaW50ZW50LCByZXNvbHZlZFR5cGUsIHVzZXJJZCk7Ci0gICAgICAgIC8vIENvbGxlY3QgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRhcmdldCBvZiB0aGUgSW50ZW50LgotICAgICAgICBBY3Rpdml0eUluZm8gYUluZm8gPSByZXNvbHZlQWN0aXZpdHkoaW50ZW50LCBySW5mbywgc3RhcnRGbGFncywgcHJvZmlsZXJJbmZvKTsKLQotICAgICAgICBBY3Rpdml0eU9wdGlvbnMgb3B0aW9ucyA9IEFjdGl2aXR5T3B0aW9ucy5mcm9tQnVuZGxlKGJPcHRpb25zKTsKLSAgICAgICAgQWN0aXZpdHlDb250YWluZXIgY29udGFpbmVyID0gKEFjdGl2aXR5Q29udGFpbmVyKWlDb250YWluZXI7Ci0gICAgICAgIHN5bmNocm9uaXplZCAobVNlcnZpY2UpIHsKLSAgICAgICAgICAgIGlmIChjb250YWluZXIgIT0gbnVsbCAmJiBjb250YWluZXIubVBhcmVudEFjdGl2aXR5ICE9IG51bGwgJiYKLSAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLm1QYXJlbnRBY3Rpdml0eS5zdGF0ZSAhPSBSRVNVTUVEKSB7Ci0gICAgICAgICAgICAgICAgLy8gQ2Fubm90IHN0YXJ0IGEgY2hpbGQgYWN0aXZpdHkgaWYgdGhlIHBhcmVudCBpcyBub3QgcmVzdW1lZC4KLSAgICAgICAgICAgICAgICByZXR1cm4gQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX0NBTkNFTEVEOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZmluYWwgaW50IHJlYWxDYWxsaW5nUGlkID0gQmluZGVyLmdldENhbGxpbmdQaWQoKTsKLSAgICAgICAgICAgIGZpbmFsIGludCByZWFsQ2FsbGluZ1VpZCA9IEJpbmRlci5nZXRDYWxsaW5nVWlkKCk7Ci0gICAgICAgICAgICBpbnQgY2FsbGluZ1BpZDsKLSAgICAgICAgICAgIGlmIChjYWxsaW5nVWlkID49IDApIHsKLSAgICAgICAgICAgICAgICBjYWxsaW5nUGlkID0gLTE7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNhbGxlciA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgY2FsbGluZ1BpZCA9IHJlYWxDYWxsaW5nUGlkOwotICAgICAgICAgICAgICAgIGNhbGxpbmdVaWQgPSByZWFsQ2FsbGluZ1VpZDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY2FsbGluZ1BpZCA9IGNhbGxpbmdVaWQgPSAtMTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZmluYWwgQWN0aXZpdHlTdGFjayBzdGFjazsKLSAgICAgICAgICAgIGlmIChjb250YWluZXIgPT0gbnVsbCB8fCBjb250YWluZXIubVN0YWNrLmlzT25Ib21lRGlzcGxheSgpKSB7Ci0gICAgICAgICAgICAgICAgc3RhY2sgPSBtRm9jdXNlZFN0YWNrOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzdGFjayA9IGNvbnRhaW5lci5tU3RhY2s7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdGFjay5tQ29uZmlnV2lsbENoYW5nZSA9IGNvbmZpZyAhPSBudWxsICYmIG1TZXJ2aWNlLm1Db25maWd1cmF0aW9uLmRpZmYoY29uZmlnKSAhPSAwOwotICAgICAgICAgICAgaWYgKERFQlVHX0NPTkZJR1VSQVRJT04pIFNsb2cudihUQUdfQ09ORklHVVJBVElPTiwKLSAgICAgICAgICAgICAgICAgICAgIlN0YXJ0aW5nIGFjdGl2aXR5IHdoZW4gY29uZmlnIHdpbGwgY2hhbmdlID0gIiArIHN0YWNrLm1Db25maWdXaWxsQ2hhbmdlKTsKLQotICAgICAgICAgICAgZmluYWwgbG9uZyBvcmlnSWQgPSBCaW5kZXIuY2xlYXJDYWxsaW5nSWRlbnRpdHkoKTsKLQotICAgICAgICAgICAgaWYgKGFJbmZvICE9IG51bGwgJiYKLSAgICAgICAgICAgICAgICAgICAgKGFJbmZvLmFwcGxpY2F0aW9uSW5mby5wcml2YXRlRmxhZ3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmQXBwbGljYXRpb25JbmZvLlBSSVZBVEVfRkxBR19DQU5UX1NBVkVfU1RBVEUpICE9IDApIHsKLSAgICAgICAgICAgICAgICAvLyBUaGlzIG1heSBiZSBhIGhlYXZ5LXdlaWdodCBwcm9jZXNzISAgQ2hlY2sgdG8gc2VlIGlmIHdlIGFscmVhZHkKLSAgICAgICAgICAgICAgICAvLyBoYXZlIGFub3RoZXIsIGRpZmZlcmVudCBoZWF2eS13ZWlnaHQgcHJvY2VzcyBydW5uaW5nLgotICAgICAgICAgICAgICAgIGlmIChhSW5mby5wcm9jZXNzTmFtZS5lcXVhbHMoYUluZm8uYXBwbGljYXRpb25JbmZvLnBhY2thZ2VOYW1lKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAobVNlcnZpY2UubUhlYXZ5V2VpZ2h0UHJvY2VzcyAhPSBudWxsICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1TZXJ2aWNlLm1IZWF2eVdlaWdodFByb2Nlc3MuaW5mby51aWQgIT0gYUluZm8uYXBwbGljYXRpb25JbmZvLnVpZCB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICFtU2VydmljZS5tSGVhdnlXZWlnaHRQcm9jZXNzLnByb2Nlc3NOYW1lLmVxdWFscyhhSW5mby5wcm9jZXNzTmFtZSkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgYXBwQ2FsbGluZ1VpZCA9IGNhbGxpbmdVaWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jZXNzUmVjb3JkIGNhbGxlckFwcCA9IG1TZXJ2aWNlLmdldFJlY29yZEZvckFwcExvY2tlZChjYWxsZXIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYWxsZXJBcHAgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBDYWxsaW5nVWlkID0gY2FsbGVyQXBwLmluZm8udWlkOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNsb2cudyhUQUcsICJVbmFibGUgdG8gZmluZCBhcHAgZm9yIGNhbGxlciAiICsgY2FsbGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiAocGlkPSIgKyBjYWxsaW5nUGlkICsgIikgd2hlbiBzdGFydGluZzogIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGludGVudC50b1N0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlPcHRpb25zLmFib3J0KG9wdGlvbnMpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX1BFUk1JU1NJT05fREVOSUVEOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgSUludGVudFNlbmRlciB0YXJnZXQgPSBtU2VydmljZS5nZXRJbnRlbnRTZW5kZXJMb2NrZWQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5TWFuYWdlci5JTlRFTlRfU0VOREVSX0FDVElWSVRZLCAiYW5kcm9pZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcENhbGxpbmdVaWQsIHVzZXJJZCwgbnVsbCwgbnVsbCwgMCwgbmV3IEludGVudFtdIHsgaW50ZW50IH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdbXSB7IHJlc29sdmVkVHlwZSB9LCBQZW5kaW5nSW50ZW50LkZMQUdfQ0FOQ0VMX0NVUlJFTlQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQZW5kaW5nSW50ZW50LkZMQUdfT05FX1NIT1QsIG51bGwpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBJbnRlbnQgbmV3SW50ZW50ID0gbmV3IEludGVudCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RDb2RlID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWxsZXIgaXMgcmVxdWVzdGluZyBhIHJlc3VsdC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdJbnRlbnQucHV0RXh0cmEoSGVhdnlXZWlnaHRTd2l0Y2hlckFjdGl2aXR5LktFWV9IQVNfUkVTVUxULCB0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIG5ld0ludGVudC5wdXRFeHRyYShIZWF2eVdlaWdodFN3aXRjaGVyQWN0aXZpdHkuS0VZX0lOVEVOVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEludGVudFNlbmRlcih0YXJnZXQpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtU2VydmljZS5tSGVhdnlXZWlnaHRQcm9jZXNzLmFjdGl2aXRpZXMuc2l6ZSgpID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5UmVjb3JkIGhpc3QgPSBtU2VydmljZS5tSGVhdnlXZWlnaHRQcm9jZXNzLmFjdGl2aXRpZXMuZ2V0KDApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0ludGVudC5wdXRFeHRyYShIZWF2eVdlaWdodFN3aXRjaGVyQWN0aXZpdHkuS0VZX0NVUl9BUFAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaXN0LnBhY2thZ2VOYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdJbnRlbnQucHV0RXh0cmEoSGVhdnlXZWlnaHRTd2l0Y2hlckFjdGl2aXR5LktFWV9DVVJfVEFTSywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpc3QudGFzay50YXNrSWQpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW50ZW50LnB1dEV4dHJhKEhlYXZ5V2VpZ2h0U3dpdGNoZXJBY3Rpdml0eS5LRVlfTkVXX0FQUCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUluZm8ucGFja2FnZU5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW50ZW50LnNldEZsYWdzKGludGVudC5nZXRGbGFncygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ld0ludGVudC5zZXRDbGFzc05hbWUoImFuZHJvaWQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIZWF2eVdlaWdodFN3aXRjaGVyQWN0aXZpdHkuY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludGVudCA9IG5ld0ludGVudDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVkVHlwZSA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYWxsZXIgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGluZ1VpZCA9IEJpbmRlci5nZXRDYWxsaW5nVWlkKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYWxsaW5nUGlkID0gQmluZGVyLmdldENhbGxpbmdQaWQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudFNwZWNpZmllZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBySW5mbyA9IHJlc29sdmVJbnRlbnQoaW50ZW50LCBudWxsIC8qcmVzb2x2ZWRUeXBlKi8sIHVzZXJJZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhSW5mbyA9IHJJbmZvICE9IG51bGwgPyBySW5mby5hY3Rpdml0eUluZm8gOiBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFJbmZvICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhSW5mbyA9IG1TZXJ2aWNlLmdldEFjdGl2aXR5SW5mb0ZvclVzZXIoYUluZm8sIHVzZXJJZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGludCByZXMgPSBzdGFydEFjdGl2aXR5TG9ja2VkKGNhbGxlciwgaW50ZW50LCBlcGhlbWVyYWxJbnRlbnQsIHJlc29sdmVkVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgYUluZm8sIHJJbmZvLCB2b2ljZVNlc3Npb24sIHZvaWNlSW50ZXJhY3RvciwKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0VG8sIHJlc3VsdFdobywgcmVxdWVzdENvZGUsIGNhbGxpbmdQaWQsCi0gICAgICAgICAgICAgICAgICAgIGNhbGxpbmdVaWQsIGNhbGxpbmdQYWNrYWdlLCByZWFsQ2FsbGluZ1BpZCwgcmVhbENhbGxpbmdVaWQsIHN0YXJ0RmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMsIGlnbm9yZVRhcmdldFNlY3VyaXR5LCBjb21wb25lbnRTcGVjaWZpZWQsIG51bGwsIGNvbnRhaW5lciwgaW5UYXNrKTsKLQotICAgICAgICAgICAgQmluZGVyLnJlc3RvcmVDYWxsaW5nSWRlbnRpdHkob3JpZ0lkKTsKLQotICAgICAgICAgICAgaWYgKHN0YWNrLm1Db25maWdXaWxsQ2hhbmdlKSB7Ci0gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGNhbGxlciBhbHNvIHdhbnRzIHRvIHN3aXRjaCB0byBhIG5ldyBjb25maWd1cmF0aW9uLAotICAgICAgICAgICAgICAgIC8vIGRvIHNvIG5vdy4gIFRoaXMgYWxsb3dzIGEgY2xlYW4gc3dpdGNoLCBhcyB3ZSBhcmUgd2FpdGluZwotICAgICAgICAgICAgICAgIC8vIGZvciB0aGUgY3VycmVudCBhY3Rpdml0eSB0byBwYXVzZSAoc28gd2Ugd2lsbCBub3QgZGVzdHJveQotICAgICAgICAgICAgICAgIC8vIGl0KSwgYW5kIGhhdmUgbm90IHlldCBzdGFydGVkIHRoZSBuZXh0IGFjdGl2aXR5LgotICAgICAgICAgICAgICAgIG1TZXJ2aWNlLmVuZm9yY2VDYWxsaW5nUGVybWlzc2lvbihhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uQ0hBTkdFX0NPTkZJR1VSQVRJT04sCi0gICAgICAgICAgICAgICAgICAgICAgICAidXBkYXRlQ29uZmlndXJhdGlvbigpIik7Ci0gICAgICAgICAgICAgICAgc3RhY2subUNvbmZpZ1dpbGxDaGFuZ2UgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBpZiAoREVCVUdfQ09ORklHVVJBVElPTikgU2xvZy52KFRBR19DT05GSUdVUkFUSU9OLAotICAgICAgICAgICAgICAgICAgICAgICAgIlVwZGF0aW5nIHRvIG5ldyBjb25maWd1cmF0aW9uIGFmdGVyIHN0YXJ0aW5nIGFjdGl2aXR5LiIpOwotICAgICAgICAgICAgICAgIG1TZXJ2aWNlLnVwZGF0ZUNvbmZpZ3VyYXRpb25Mb2NrZWQoY29uZmlnLCBudWxsLCBmYWxzZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChvdXRSZXN1bHQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG91dFJlc3VsdC5yZXN1bHQgPSByZXM7Ci0gICAgICAgICAgICAgICAgaWYgKHJlcyA9PSBBY3Rpdml0eU1hbmFnZXIuU1RBUlRfU1VDQ0VTUykgewotICAgICAgICAgICAgICAgICAgICBtV2FpdGluZ0FjdGl2aXR5TGF1bmNoZWQuYWRkKG91dFJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVNlcnZpY2Uud2FpdCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICghb3V0UmVzdWx0LnRpbWVvdXQgJiYgb3V0UmVzdWx0LndobyA9PSBudWxsKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlcyA9PSBBY3Rpdml0eU1hbmFnZXIuU1RBUlRfVEFTS19UT19GUk9OVCkgewotICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eVJlY29yZCByID0gc3RhY2sudG9wUnVubmluZ0FjdGl2aXR5TG9ja2VkKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyLm5vd1Zpc2libGUgJiYgci5zdGF0ZSA9PSBSRVNVTUVEKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXRSZXN1bHQudGltZW91dCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgb3V0UmVzdWx0LndobyA9IG5ldyBDb21wb25lbnROYW1lKHIuaW5mby5wYWNrYWdlTmFtZSwgci5pbmZvLm5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgb3V0UmVzdWx0LnRvdGFsVGltZSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXRSZXN1bHQudGhpc1RpbWUgPSAwOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgb3V0UmVzdWx0LnRoaXNUaW1lID0gU3lzdGVtQ2xvY2sudXB0aW1lTWlsbGlzKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtV2FpdGluZ0FjdGl2aXR5VmlzaWJsZS5hZGQob3V0UmVzdWx0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU2VydmljZS53YWl0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKCFvdXRSZXN1bHQudGltZW91dCAmJiBvdXRSZXN1bHQud2hvID09IG51bGwpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gcmVzOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZmluYWwgaW50IHN0YXJ0QWN0aXZpdGllcyhJQXBwbGljYXRpb25UaHJlYWQgY2FsbGVyLCBpbnQgY2FsbGluZ1VpZCwgU3RyaW5nIGNhbGxpbmdQYWNrYWdlLAotICAgICAgICAgICAgSW50ZW50W10gaW50ZW50cywgU3RyaW5nW10gcmVzb2x2ZWRUeXBlcywgSUJpbmRlciByZXN1bHRUbywKLSAgICAgICAgICAgIEJ1bmRsZSBiT3B0aW9ucywgaW50IHVzZXJJZCkgewotICAgICAgICBpZiAoaW50ZW50cyA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oImludGVudHMgaXMgbnVsbCIpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChyZXNvbHZlZFR5cGVzID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBOdWxsUG9pbnRlckV4Y2VwdGlvbigicmVzb2x2ZWRUeXBlcyBpcyBudWxsIik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGludGVudHMubGVuZ3RoICE9IHJlc29sdmVkVHlwZXMubGVuZ3RoKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJpbnRlbnRzIGFyZSBsZW5ndGggZGlmZmVyZW50IHRoYW4gcmVzb2x2ZWRUeXBlcyIpOwotICAgICAgICB9Ci0KLQotICAgICAgICBpbnQgY2FsbGluZ1BpZDsKLSAgICAgICAgaWYgKGNhbGxpbmdVaWQgPj0gMCkgewotICAgICAgICAgICAgY2FsbGluZ1BpZCA9IC0xOwotICAgICAgICB9IGVsc2UgaWYgKGNhbGxlciA9PSBudWxsKSB7Ci0gICAgICAgICAgICBjYWxsaW5nUGlkID0gQmluZGVyLmdldENhbGxpbmdQaWQoKTsKLSAgICAgICAgICAgIGNhbGxpbmdVaWQgPSBCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY2FsbGluZ1BpZCA9IGNhbGxpbmdVaWQgPSAtMTsKLSAgICAgICAgfQotICAgICAgICBmaW5hbCBsb25nIG9yaWdJZCA9IEJpbmRlci5jbGVhckNhbGxpbmdJZGVudGl0eSgpOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgc3luY2hyb25pemVkIChtU2VydmljZSkgewotICAgICAgICAgICAgICAgIEFjdGl2aXR5UmVjb3JkW10gb3V0QWN0aXZpdHkgPSBuZXcgQWN0aXZpdHlSZWNvcmRbMV07Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPGludGVudHMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgSW50ZW50IGludGVudCA9IGludGVudHNbaV07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbnRlbnQgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyBSZWZ1c2UgcG9zc2libGUgbGVha2VkIGZpbGUgZGVzY3JpcHRvcnMKLSAgICAgICAgICAgICAgICAgICAgaWYgKGludGVudCAhPSBudWxsICYmIGludGVudC5oYXNGaWxlRGVzY3JpcHRvcnMoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiRmlsZSBkZXNjcmlwdG9ycyBwYXNzZWQgaW4gSW50ZW50Iik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBib29sZWFuIGNvbXBvbmVudFNwZWNpZmllZCA9IGludGVudC5nZXRDb21wb25lbnQoKSAhPSBudWxsOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIERvbid0IG1vZGlmeSB0aGUgY2xpZW50J3Mgb2JqZWN0IQotICAgICAgICAgICAgICAgICAgICBpbnRlbnQgPSBuZXcgSW50ZW50KGludGVudCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gQ29sbGVjdCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdGFyZ2V0IG9mIHRoZSBJbnRlbnQuCi0gICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5SW5mbyBhSW5mbyA9IHJlc29sdmVBY3Rpdml0eShpbnRlbnQsIHJlc29sdmVkVHlwZXNbaV0sIDAsIG51bGwsIHVzZXJJZCk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IE5ldywgY2hlY2sgaWYgdGhpcyBpcyBjb3JyZWN0Ci0gICAgICAgICAgICAgICAgICAgIGFJbmZvID0gbVNlcnZpY2UuZ2V0QWN0aXZpdHlJbmZvRm9yVXNlcihhSW5mbywgdXNlcklkKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoYUluZm8gIT0gbnVsbCAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhSW5mby5hcHBsaWNhdGlvbkluZm8ucHJpdmF0ZUZsYWdzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIEFwcGxpY2F0aW9uSW5mby5QUklWQVRFX0ZMQUdfQ0FOVF9TQVZFX1NUQVRFKSAgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZMQUdfQ0FOVF9TQVZFX1NUQVRFIG5vdCBzdXBwb3J0ZWQgaGVyZSIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlPcHRpb25zIG9wdGlvbnMgPSBBY3Rpdml0eU9wdGlvbnMuZnJvbUJ1bmRsZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID09IGludGVudHMubGVuZ3RoIC0gMSA/IGJPcHRpb25zIDogbnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIGludCByZXMgPSBzdGFydEFjdGl2aXR5TG9ja2VkKGNhbGxlciwgaW50ZW50LCBudWxsIC8qZXBoZW1lcmFsSW50ZW50Ki8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRUeXBlc1tpXSwgYUluZm8sIG51bGwgLypySW5mbyovLCBudWxsLCBudWxsLCByZXN1bHRUbywgbnVsbCwgLTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGluZ1BpZCwgY2FsbGluZ1VpZCwgY2FsbGluZ1BhY2thZ2UsIGNhbGxpbmdQaWQsIGNhbGxpbmdVaWQsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucywgZmFsc2UsIGNvbXBvbmVudFNwZWNpZmllZCwgb3V0QWN0aXZpdHksIG51bGwsIG51bGwpOwotICAgICAgICAgICAgICAgICAgICBpZiAocmVzIDwgMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlczsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdFRvID0gb3V0QWN0aXZpdHlbMF0gIT0gbnVsbCA/IG91dEFjdGl2aXR5WzBdLmFwcFRva2VuIDogbnVsbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICBCaW5kZXIucmVzdG9yZUNhbGxpbmdJZGVudGl0eShvcmlnSWQpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIEFjdGl2aXR5TWFuYWdlci5TVEFSVF9TVUNDRVNTOwotICAgIH0KLQogICAgIGZpbmFsIGJvb2xlYW4gcmVhbFN0YXJ0QWN0aXZpdHlMb2NrZWQoQWN0aXZpdHlSZWNvcmQgciwKICAgICAgICAgICAgIFByb2Nlc3NSZWNvcmQgYXBwLCBib29sZWFuIGFuZFJlc3VtZSwgYm9vbGVhbiBjaGVja0NvbmZpZykKICAgICAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewpAQCAtMTQzNSwxNCArMTE2OCwxMiBAQAogICAgICAgICAgICAgLy8gYSByZXN1bWUuCiAgICAgICAgICAgICBzdGFjay5taW5pbWFsUmVzdW1lQWN0aXZpdHlMb2NrZWQocik7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBUaGlzIGFjdGl2aXR5IGlzIG5vdCBzdGFydGluZyBpbiB0aGUgcmVzdW1lZCBzdGF0ZS4uLiB3aGljaAotICAgICAgICAgICAgLy8gc2hvdWxkIGxvb2sgbGlrZSB3ZSBhc2tlZCBpdCB0byBwYXVzZStzdG9wIChidXQgcmVtYWluIHZpc2libGUpLAotICAgICAgICAgICAgLy8gYW5kIGl0IGhhcyBkb25lIHNvIGFuZCByZXBvcnRlZCBiYWNrIHRoZSBjdXJyZW50IGljaWNsZSBhbmQKLSAgICAgICAgICAgIC8vIG90aGVyIHN0YXRlLgorICAgICAgICAgICAgLy8gVGhpcyBhY3Rpdml0eSBpcyBub3Qgc3RhcnRpbmcgaW4gdGhlIHJlc3VtZWQgc3RhdGUuLi4gd2hpY2ggc2hvdWxkIGxvb2sgbGlrZSB3ZSBhc2tlZAorICAgICAgICAgICAgLy8gaXQgdG8gcGF1c2Urc3RvcCAoYnV0IHJlbWFpbiB2aXNpYmxlKSwgYW5kIGl0IGhhcyBkb25lIHNvIGFuZCByZXBvcnRlZCBiYWNrIHRoZQorICAgICAgICAgICAgLy8gY3VycmVudCBpY2ljbGUgYW5kIG90aGVyIHN0YXRlLgogICAgICAgICAgICAgaWYgKERFQlVHX1NUQVRFUykgU2xvZy52KFRBR19TVEFURVMsCi0gICAgICAgICAgICAgICAgICAgICJNb3ZpbmcgdG8gU1RPUFBFRDogIiArIHIgKyAiIChzdGFydGluZyBpbiBzdG9wcGVkIHN0YXRlKSIpOwotICAgICAgICAgICAgci5zdGF0ZSA9IFNUT1BQRUQ7Ci0gICAgICAgICAgICByLnN0b3BwZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAiTW92aW5nIHRvIFBBVVNFRDogIiArIHIgKyAiIChzdGFydGluZyBpbiBwYXVzZWQgc3RhdGUpIik7CisgICAgICAgICAgICByLnN0YXRlID0gUEFVU0VEOwogICAgICAgICB9CiAKICAgICAgICAgLy8gTGF1bmNoIHRoZSBuZXcgdmVyc2lvbiBzZXR1cCBzY3JlZW4gaWYgbmVlZGVkLiAgV2UgZG8gdGhpcyAtYWZ0ZXItCkBAIC0xNDk0LDM0OCArMTIyNSw3IEBACiAgICAgICAgICAgICAgICAgImFjdGl2aXR5Iiwgci5pbnRlbnQuZ2V0Q29tcG9uZW50KCksIGZhbHNlLCBmYWxzZSwgdHJ1ZSk7CiAgICAgfQogCi0gICAgZmluYWwgaW50IHN0YXJ0QWN0aXZpdHlMb2NrZWQoSUFwcGxpY2F0aW9uVGhyZWFkIGNhbGxlciwgSW50ZW50IGludGVudCwgSW50ZW50IGVwaGVtZXJhbEludGVudCwKLSAgICAgICAgICAgIFN0cmluZyByZXNvbHZlZFR5cGUsIEFjdGl2aXR5SW5mbyBhSW5mbywgUmVzb2x2ZUluZm8gckluZm8sCi0gICAgICAgICAgICBJVm9pY2VJbnRlcmFjdGlvblNlc3Npb24gdm9pY2VTZXNzaW9uLCBJVm9pY2VJbnRlcmFjdG9yIHZvaWNlSW50ZXJhY3RvciwKLSAgICAgICAgICAgIElCaW5kZXIgcmVzdWx0VG8sIFN0cmluZyByZXN1bHRXaG8sIGludCByZXF1ZXN0Q29kZSwgaW50IGNhbGxpbmdQaWQsIGludCBjYWxsaW5nVWlkLAotICAgICAgICAgICAgU3RyaW5nIGNhbGxpbmdQYWNrYWdlLCBpbnQgcmVhbENhbGxpbmdQaWQsIGludCByZWFsQ2FsbGluZ1VpZCwgaW50IHN0YXJ0RmxhZ3MsCi0gICAgICAgICAgICBBY3Rpdml0eU9wdGlvbnMgb3B0aW9ucywgYm9vbGVhbiBpZ25vcmVUYXJnZXRTZWN1cml0eSwgYm9vbGVhbiBjb21wb25lbnRTcGVjaWZpZWQsCi0gICAgICAgICAgICBBY3Rpdml0eVJlY29yZFtdIG91dEFjdGl2aXR5LCBBY3Rpdml0eUNvbnRhaW5lciBjb250YWluZXIsIFRhc2tSZWNvcmQgaW5UYXNrKSB7Ci0gICAgICAgIGludCBlcnIgPSBBY3Rpdml0eU1hbmFnZXIuU1RBUlRfU1VDQ0VTUzsKLQotICAgICAgICBQcm9jZXNzUmVjb3JkIGNhbGxlckFwcCA9IG51bGw7Ci0gICAgICAgIGlmIChjYWxsZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgY2FsbGVyQXBwID0gbVNlcnZpY2UuZ2V0UmVjb3JkRm9yQXBwTG9ja2VkKGNhbGxlcik7Ci0gICAgICAgICAgICBpZiAoY2FsbGVyQXBwICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBjYWxsaW5nUGlkID0gY2FsbGVyQXBwLnBpZDsKLSAgICAgICAgICAgICAgICBjYWxsaW5nVWlkID0gY2FsbGVyQXBwLmluZm8udWlkOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTbG9nLncoVEFHLCAiVW5hYmxlIHRvIGZpbmQgYXBwIGZvciBjYWxsZXIgIiArIGNhbGxlcgotICAgICAgICAgICAgICAgICAgICAgICsgIiAocGlkPSIgKyBjYWxsaW5nUGlkICsgIikgd2hlbiBzdGFydGluZzogIgotICAgICAgICAgICAgICAgICAgICAgICsgaW50ZW50LnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIGVyciA9IEFjdGl2aXR5TWFuYWdlci5TVEFSVF9QRVJNSVNTSU9OX0RFTklFRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZpbmFsIGludCB1c2VySWQgPSBhSW5mbyAhPSBudWxsID8gVXNlckhhbmRsZS5nZXRVc2VySWQoYUluZm8uYXBwbGljYXRpb25JbmZvLnVpZCkgOiAwOwotCi0gICAgICAgIGlmIChlcnIgPT0gQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgIFNsb2cuaShUQUcsICJTVEFSVCB1IiArIHVzZXJJZCArICIgeyIgKyBpbnRlbnQudG9TaG9ydFN0cmluZyh0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSkKLSAgICAgICAgICAgICAgICAgICAgKyAifSBmcm9tIHVpZCAiICsgY2FsbGluZ1VpZAotICAgICAgICAgICAgICAgICAgICArICIgb24gZGlzcGxheSAiICsgKGNvbnRhaW5lciA9PSBudWxsID8gKG1Gb2N1c2VkU3RhY2sgPT0gbnVsbCA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlzcGxheS5ERUZBVUxUX0RJU1BMQVkgOiBtRm9jdXNlZFN0YWNrLm1EaXNwbGF5SWQpIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29udGFpbmVyLm1BY3Rpdml0eURpc3BsYXkgPT0gbnVsbCA/IERpc3BsYXkuREVGQVVMVF9ESVNQTEFZIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5tQWN0aXZpdHlEaXNwbGF5Lm1EaXNwbGF5SWQpKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBBY3Rpdml0eVJlY29yZCBzb3VyY2VSZWNvcmQgPSBudWxsOwotICAgICAgICBBY3Rpdml0eVJlY29yZCByZXN1bHRSZWNvcmQgPSBudWxsOwotICAgICAgICBpZiAocmVzdWx0VG8gIT0gbnVsbCkgewotICAgICAgICAgICAgc291cmNlUmVjb3JkID0gaXNJbkFueVN0YWNrTG9ja2VkKHJlc3VsdFRvKTsKLSAgICAgICAgICAgIGlmIChERUJVR19SRVNVTFRTKSBTbG9nLnYoVEFHX1JFU1VMVFMsCi0gICAgICAgICAgICAgICAgICAgICJXaWxsIHNlbmQgcmVzdWx0IHRvICIgKyByZXN1bHRUbyArICIgIiArIHNvdXJjZVJlY29yZCk7Ci0gICAgICAgICAgICBpZiAoc291cmNlUmVjb3JkICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBpZiAocmVxdWVzdENvZGUgPj0gMCAmJiAhc291cmNlUmVjb3JkLmZpbmlzaGluZykgewotICAgICAgICAgICAgICAgICAgICByZXN1bHRSZWNvcmQgPSBzb3VyY2VSZWNvcmQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZmluYWwgaW50IGxhdW5jaEZsYWdzID0gaW50ZW50LmdldEZsYWdzKCk7Ci0KLSAgICAgICAgaWYgKChsYXVuY2hGbGFncyAmIEludGVudC5GTEFHX0FDVElWSVRZX0ZPUldBUkRfUkVTVUxUKSAhPSAwICYmIHNvdXJjZVJlY29yZCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAvLyBUcmFuc2ZlciB0aGUgcmVzdWx0IHRhcmdldCBmcm9tIHRoZSBzb3VyY2UgYWN0aXZpdHkgdG8gdGhlIG5ldwotICAgICAgICAgICAgLy8gb25lIGJlaW5nIHN0YXJ0ZWQsIGluY2x1ZGluZyBhbnkgZmFpbHVyZXMuCi0gICAgICAgICAgICBpZiAocmVxdWVzdENvZGUgPj0gMCkgewotICAgICAgICAgICAgICAgIEFjdGl2aXR5T3B0aW9ucy5hYm9ydChvcHRpb25zKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX0ZPUldBUkRfQU5EX1JFUVVFU1RfQ09ORkxJQ1Q7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXN1bHRSZWNvcmQgPSBzb3VyY2VSZWNvcmQucmVzdWx0VG87Ci0gICAgICAgICAgICBpZiAocmVzdWx0UmVjb3JkICE9IG51bGwgJiYgIXJlc3VsdFJlY29yZC5pc0luU3RhY2tMb2NrZWQoKSkgewotICAgICAgICAgICAgICAgIHJlc3VsdFJlY29yZCA9IG51bGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXN1bHRXaG8gPSBzb3VyY2VSZWNvcmQucmVzdWx0V2hvOwotICAgICAgICAgICAgcmVxdWVzdENvZGUgPSBzb3VyY2VSZWNvcmQucmVxdWVzdENvZGU7Ci0gICAgICAgICAgICBzb3VyY2VSZWNvcmQucmVzdWx0VG8gPSBudWxsOwotICAgICAgICAgICAgaWYgKHJlc3VsdFJlY29yZCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0UmVjb3JkLnJlbW92ZVJlc3VsdHNMb2NrZWQoc291cmNlUmVjb3JkLCByZXN1bHRXaG8sIHJlcXVlc3RDb2RlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzb3VyY2VSZWNvcmQubGF1bmNoZWRGcm9tVWlkID09IGNhbGxpbmdVaWQpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGUgbmV3IGFjdGl2aXR5IGlzIGJlaW5nIGxhdW5jaGVkIGZyb20gdGhlIHNhbWUgdWlkIGFzIHRoZSBwcmV2aW91cwotICAgICAgICAgICAgICAgIC8vIGFjdGl2aXR5IGluIHRoZSBmbG93LCBhbmQgYXNraW5nIHRvIGZvcndhcmQgaXRzIHJlc3VsdCBiYWNrIHRvIHRoZQotICAgICAgICAgICAgICAgIC8vIHByZXZpb3VzLiAgSW4gdGhpcyBjYXNlIHRoZSBhY3Rpdml0eSBpcyBzZXJ2aW5nIGFzIGEgdHJhbXBvbGluZSBiZXR3ZWVuCi0gICAgICAgICAgICAgICAgLy8gdGhlIHR3bywgc28gd2UgYWxzbyB3YW50IHRvIHVwZGF0ZSBpdHMgbGF1bmNoZWRGcm9tUGFja2FnZSB0byBiZSB0aGUKLSAgICAgICAgICAgICAgICAvLyBzYW1lIGFzIHRoZSBwcmV2aW91cyBhY3Rpdml0eS4gIE5vdGUgdGhhdCB0aGlzIGlzIHNhZmUsIHNpbmNlIHdlIGtub3cKLSAgICAgICAgICAgICAgICAvLyB0aGVzZSB0d28gcGFja2FnZXMgY29tZSBmcm9tIHRoZSBzYW1lIHVpZDsgdGhlIGNhbGxlciBjb3VsZCBqdXN0IGFzCi0gICAgICAgICAgICAgICAgLy8gd2VsbCBoYXZlIHN1cHBsaWVkIHRoYXQgc2FtZSBwYWNrYWdlIG5hbWUgaXRzZWxmLiAgVGhpcyBzcGVjaWZpYWxseQotICAgICAgICAgICAgICAgIC8vIGRlYWxzIHdpdGggdGhlIGNhc2Ugb2YgYW4gaW50ZW50IHBpY2tlci9jaG9vc2VyIGJlaW5nIGxhdW5jaGVkIGluIHRoZSBhcHAKLSAgICAgICAgICAgICAgICAvLyBmbG93IHRvIHJlZGlyZWN0IHRvIGFuIGFjdGl2aXR5IHBpY2tlZCBieSB0aGUgdXNlciwgd2hlcmUgd2Ugd2FudCB0aGUgZmluYWwKLSAgICAgICAgICAgICAgICAvLyBhY3Rpdml0eSB0byBjb25zaWRlciBpdCB0byBoYXZlIGJlZW4gbGF1bmNoZWQgYnkgdGhlIHByZXZpb3VzIGFwcCBhY3Rpdml0eS4KLSAgICAgICAgICAgICAgICBjYWxsaW5nUGFja2FnZSA9IHNvdXJjZVJlY29yZC5sYXVuY2hlZEZyb21QYWNrYWdlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGVyciA9PSBBY3Rpdml0eU1hbmFnZXIuU1RBUlRfU1VDQ0VTUyAmJiBpbnRlbnQuZ2V0Q29tcG9uZW50KCkgPT0gbnVsbCkgewotICAgICAgICAgICAgLy8gV2UgY291bGRuJ3QgZmluZCBhIGNsYXNzIHRoYXQgY2FuIGhhbmRsZSB0aGUgZ2l2ZW4gSW50ZW50LgotICAgICAgICAgICAgLy8gVGhhdCdzIHRoZSBlbmQgb2YgdGhhdCEKLSAgICAgICAgICAgIGVyciA9IEFjdGl2aXR5TWFuYWdlci5TVEFSVF9JTlRFTlRfTk9UX1JFU09MVkVEOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGVyciA9PSBBY3Rpdml0eU1hbmFnZXIuU1RBUlRfU1VDQ0VTUyAmJiBhSW5mbyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAvLyBXZSBjb3VsZG4ndCBmaW5kIHRoZSBzcGVjaWZpYyBjbGFzcyBzcGVjaWZpZWQgaW4gdGhlIEludGVudC4KLSAgICAgICAgICAgIC8vIEFsc28gdGhlIGVuZCBvZiB0aGUgbGluZS4KLSAgICAgICAgICAgIGVyciA9IEFjdGl2aXR5TWFuYWdlci5TVEFSVF9DTEFTU19OT1RfRk9VTkQ7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZXJyID09IEFjdGl2aXR5TWFuYWdlci5TVEFSVF9TVUNDRVNTICYmIHNvdXJjZVJlY29yZCAhPSBudWxsCi0gICAgICAgICAgICAgICAgJiYgc291cmNlUmVjb3JkLnRhc2sudm9pY2VTZXNzaW9uICE9IG51bGwpIHsKLSAgICAgICAgICAgIC8vIElmIHRoaXMgYWN0aXZpdHkgaXMgYmVpbmcgbGF1bmNoZWQgYXMgcGFydCBvZiBhIHZvaWNlIHNlc3Npb24sIHdlIG5lZWQKLSAgICAgICAgICAgIC8vIHRvIGVuc3VyZSB0aGF0IGl0IGlzIHNhZmUgdG8gZG8gc28uICBJZiB0aGUgdXBjb21pbmcgYWN0aXZpdHkgd2lsbCBhbHNvCi0gICAgICAgICAgICAvLyBiZSBwYXJ0IG9mIHRoZSB2b2ljZSBzZXNzaW9uLCB3ZSBjYW4gb25seSBsYXVuY2ggaXQgaWYgaXQgaGFzIGV4cGxpY2l0bHkKLSAgICAgICAgICAgIC8vIHNhaWQgaXQgc3VwcG9ydHMgdGhlIFZPSUNFIGNhdGVnb3J5LCBvciBpdCBpcyBhIHBhcnQgb2YgdGhlIGNhbGxpbmcgYXBwLgotICAgICAgICAgICAgaWYgKChsYXVuY2hGbGFncyAmIEZMQUdfQUNUSVZJVFlfTkVXX1RBU0spID09IDAKLSAgICAgICAgICAgICAgICAgICAgJiYgc291cmNlUmVjb3JkLmluZm8uYXBwbGljYXRpb25JbmZvLnVpZCAhPSBhSW5mby5hcHBsaWNhdGlvbkluZm8udWlkKSB7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgaW50ZW50LmFkZENhdGVnb3J5KEludGVudC5DQVRFR09SWV9WT0lDRSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghQXBwR2xvYmFscy5nZXRQYWNrYWdlTWFuYWdlcigpLmFjdGl2aXR5U3VwcG9ydHNJbnRlbnQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50LmdldENvbXBvbmVudCgpLCBpbnRlbnQsIHJlc29sdmVkVHlwZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFNsb2cudyhUQUcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBY3Rpdml0eSBiZWluZyBzdGFydGVkIGluIGN1cnJlbnQgdm9pY2UgdGFzayBkb2VzIG5vdCBzdXBwb3J0IHZvaWNlOiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgaW50ZW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IEFjdGl2aXR5TWFuYWdlci5TVEFSVF9OT1RfVk9JQ0VfQ09NUEFUSUJMRTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIFNsb2cudyhUQUcsICJGYWlsdXJlIGNoZWNraW5nIHZvaWNlIGNhcGFiaWxpdGllcyIsIGUpOwotICAgICAgICAgICAgICAgICAgICBlcnIgPSBBY3Rpdml0eU1hbmFnZXIuU1RBUlRfTk9UX1ZPSUNFX0NPTVBBVElCTEU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGVyciA9PSBBY3Rpdml0eU1hbmFnZXIuU1RBUlRfU1VDQ0VTUyAmJiB2b2ljZVNlc3Npb24gIT0gbnVsbCkgewotICAgICAgICAgICAgLy8gSWYgdGhlIGNhbGxlciBpcyBzdGFydGluZyBhIG5ldyB2b2ljZSBzZXNzaW9uLCBqdXN0IG1ha2Ugc3VyZSB0aGUgdGFyZ2V0Ci0gICAgICAgICAgICAvLyBpcyBhY3R1YWxseSBhbGxvd2luZyBpdCB0byBydW4gdGhpcyB3YXkuCi0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGlmICghQXBwR2xvYmFscy5nZXRQYWNrYWdlTWFuYWdlcigpLmFjdGl2aXR5U3VwcG9ydHNJbnRlbnQoaW50ZW50LmdldENvbXBvbmVudCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50LCByZXNvbHZlZFR5cGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFNsb2cudyhUQUcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFjdGl2aXR5IGJlaW5nIHN0YXJ0ZWQgaW4gbmV3IHZvaWNlIHRhc2sgZG9lcyBub3Qgc3VwcG9ydDogIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgaW50ZW50KTsKLSAgICAgICAgICAgICAgICAgICAgZXJyID0gQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX05PVF9WT0lDRV9DT01QQVRJQkxFOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgU2xvZy53KFRBRywgIkZhaWx1cmUgY2hlY2tpbmcgdm9pY2UgY2FwYWJpbGl0aWVzIiwgZSk7Ci0gICAgICAgICAgICAgICAgZXJyID0gQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX05PVF9WT0lDRV9DT01QQVRJQkxFOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZmluYWwgQWN0aXZpdHlTdGFjayByZXN1bHRTdGFjayA9IHJlc3VsdFJlY29yZCA9PSBudWxsID8gbnVsbCA6IHJlc3VsdFJlY29yZC50YXNrLnN0YWNrOwotCi0gICAgICAgIGlmIChlcnIgIT0gQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgIGlmIChyZXN1bHRSZWNvcmQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJlc3VsdFN0YWNrLnNlbmRBY3Rpdml0eVJlc3VsdExvY2tlZCgtMSwKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0UmVjb3JkLCByZXN1bHRXaG8sIHJlcXVlc3RDb2RlLAotICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eS5SRVNVTFRfQ0FOQ0VMRUQsIG51bGwpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgQWN0aXZpdHlPcHRpb25zLmFib3J0KG9wdGlvbnMpOwotICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2xlYW4gYWJvcnQgPSAhY2hlY2tTdGFydEFueUFjdGl2aXR5UGVybWlzc2lvbihpbnRlbnQsIGFJbmZvLCByZXN1bHRXaG8sIHJlcXVlc3RDb2RlLAotICAgICAgICAgICAgICAgIGNhbGxpbmdQaWQsIGNhbGxpbmdVaWQsIGNhbGxpbmdQYWNrYWdlLCBpZ25vcmVUYXJnZXRTZWN1cml0eSwgY2FsbGVyQXBwLAotICAgICAgICAgICAgICAgIHJlc3VsdFJlY29yZCwgcmVzdWx0U3RhY2spOwotICAgICAgICBhYm9ydCB8PSAhbVNlcnZpY2UubUludGVudEZpcmV3YWxsLmNoZWNrU3RhcnRBY3Rpdml0eShpbnRlbnQsIGNhbGxpbmdVaWQsCi0gICAgICAgICAgICAgICAgY2FsbGluZ1BpZCwgcmVzb2x2ZWRUeXBlLCBhSW5mby5hcHBsaWNhdGlvbkluZm8pOwotCi0gICAgICAgIGlmIChtU2VydmljZS5tQ29udHJvbGxlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIC8vIFRoZSBJbnRlbnQgd2UgZ2l2ZSB0byB0aGUgd2F0Y2hlciBoYXMgdGhlIGV4dHJhIGRhdGEKLSAgICAgICAgICAgICAgICAvLyBzdHJpcHBlZCBvZmYsIHNpbmNlIGl0IGNhbiBjb250YWluIHByaXZhdGUgaW5mb3JtYXRpb24uCi0gICAgICAgICAgICAgICAgSW50ZW50IHdhdGNoSW50ZW50ID0gaW50ZW50LmNsb25lRmlsdGVyKCk7Ci0gICAgICAgICAgICAgICAgYWJvcnQgfD0gIW1TZXJ2aWNlLm1Db250cm9sbGVyLmFjdGl2aXR5U3RhcnRpbmcod2F0Y2hJbnRlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICBhSW5mby5hcHBsaWNhdGlvbkluZm8ucGFja2FnZU5hbWUpOwotICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBtU2VydmljZS5tQ29udHJvbGxlciA9IG51bGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBVc2VySW5mbyB1c2VyID0gZ2V0VXNlckluZm8odXNlcklkKTsKLSAgICAgICAgS2V5Z3VhcmRNYW5hZ2VyIGttID0gKEtleWd1YXJkTWFuYWdlcikgbVNlcnZpY2UubUNvbnRleHQKLSAgICAgICAgICAgICAgICAuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LktFWUdVQVJEX1NFUlZJQ0UpOwotICAgICAgICBpZiAodXNlci5pc01hbmFnZWRQcm9maWxlKCkKLSAgICAgICAgICAgICAgICAmJiBMb2NrUGF0dGVyblV0aWxzLmlzU2VwYXJhdGVXb3JrQ2hhbGxlbmdlRW5hYmxlZCgpCi0gICAgICAgICAgICAgICAgJiYga20uaXNEZXZpY2VMb2NrZWQodXNlcklkKSkgewotICAgICAgICAgICAgSUludGVudFNlbmRlciB0YXJnZXQgPSBtU2VydmljZS5nZXRJbnRlbnRTZW5kZXJMb2NrZWQoCi0gICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5TWFuYWdlci5JTlRFTlRfU0VOREVSX0FDVElWSVRZLCBjYWxsaW5nUGFja2FnZSwKLSAgICAgICAgICAgICAgICAgICAgQmluZGVyLmdldENhbGxpbmdVaWQoKSwgdXNlcklkLCBudWxsLCBudWxsLCAwLCBuZXcgSW50ZW50W117IGludGVudCB9LAotICAgICAgICAgICAgICAgICAgICBuZXcgU3RyaW5nW117IHJlc29sdmVkVHlwZSB9LAotICAgICAgICAgICAgICAgICAgICBQZW5kaW5nSW50ZW50LkZMQUdfQ0FOQ0VMX0NVUlJFTlQgfCBQZW5kaW5nSW50ZW50LkZMQUdfT05FX1NIT1QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBlbmRpbmdJbnRlbnQuRkxBR19JTU1VVEFCTEUsIG51bGwpOwotICAgICAgICAgICAgZmluYWwgaW50IGZsYWdzID0gaW50ZW50LmdldEZsYWdzKCk7Ci0gICAgICAgICAgICBmaW5hbCBJbnRlbnQgbmV3SW50ZW50ID0ga20uY3JlYXRlQ29uZmlybURldmljZUNyZWRlbnRpYWxJbnRlbnQobnVsbCwgbnVsbCwgdXNlci5pZCk7Ci0gICAgICAgICAgICBpZiAobmV3SW50ZW50ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBpbnRlbnQgPSBuZXdJbnRlbnQ7Ci0gICAgICAgICAgICAgICAgaW50ZW50LnNldEZsYWdzKGZsYWdzCi0gICAgICAgICAgICAgICAgICAgICAgICB8IEludGVudC5GTEFHX0FDVElWSVRZX05FV19UQVNLCi0gICAgICAgICAgICAgICAgICAgICAgICB8IEludGVudC5GTEFHX0FDVElWSVRZX0VYQ0xVREVfRlJPTV9SRUNFTlRTKTsKLSAgICAgICAgICAgICAgICBpbnRlbnQucHV0RXh0cmEoSW50ZW50LkVYVFJBX1BBQ0tBR0VfTkFNRSwgYUluZm8ucGFja2FnZU5hbWUpOwotICAgICAgICAgICAgICAgIGludGVudC5wdXRFeHRyYShJbnRlbnQuRVhUUkFfSU5URU5ULCBuZXcgSW50ZW50U2VuZGVyKHRhcmdldCkpOwotCi0gICAgICAgICAgICAgICAgcmVzb2x2ZWRUeXBlID0gbnVsbDsKLSAgICAgICAgICAgICAgICBjYWxsaW5nVWlkID0gcmVhbENhbGxpbmdVaWQ7Ci0gICAgICAgICAgICAgICAgY2FsbGluZ1BpZCA9IHJlYWxDYWxsaW5nUGlkOwotCi0gICAgICAgICAgICAgICAgVXNlckluZm8gcGFyZW50ID0gVXNlck1hbmFnZXIuZ2V0KG1TZXJ2aWNlLm1Db250ZXh0KS5nZXRQcm9maWxlUGFyZW50KHVzZXJJZCk7Ci0gICAgICAgICAgICAgICAgckluZm8gPSByZXNvbHZlSW50ZW50KGludGVudCwgcmVzb2x2ZWRUeXBlLCBwYXJlbnQuaWQpOwotICAgICAgICAgICAgICAgIGFJbmZvID0gcmVzb2x2ZUFjdGl2aXR5KGludGVudCwgckluZm8sIHN0YXJ0RmxhZ3MsIG51bGwgLypwcm9maWxlckluZm8qLyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYWJvcnQpIHsKLSAgICAgICAgICAgIGlmIChyZXN1bHRSZWNvcmQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJlc3VsdFN0YWNrLnNlbmRBY3Rpdml0eVJlc3VsdExvY2tlZCgtMSwgcmVzdWx0UmVjb3JkLCByZXN1bHRXaG8sIHJlcXVlc3RDb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHkuUkVTVUxUX0NBTkNFTEVELCBudWxsKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIFdlIHByZXRlbmQgdG8gdGhlIGNhbGxlciB0aGF0IGl0IHdhcyByZWFsbHkgc3RhcnRlZCwgYnV0Ci0gICAgICAgICAgICAvLyB0aGV5IHdpbGwganVzdCBnZXQgYSBjYW5jZWwgcmVzdWx0LgotICAgICAgICAgICAgQWN0aXZpdHlPcHRpb25zLmFib3J0KG9wdGlvbnMpOwotICAgICAgICAgICAgcmV0dXJuIEFjdGl2aXR5TWFuYWdlci5TVEFSVF9TVUNDRVNTOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgcGVybWlzc2lvbnMgbmVlZCBhIHJldmlldyBiZWZvcmUgYW55IG9mIHRoZSBhcHAgY29tcG9uZW50cyBjYW4gcnVuLCB3ZQotICAgICAgICAvLyBsYXVuY2ggdGhlIHJldmlldyBhY3Rpdml0eSBhbmQgcGFzcyBhIHBlbmRpbmcgaW50ZW50IHRvIHN0YXJ0IHRoZSBhY3Rpdml0eQotICAgICAgICAvLyB3ZSBhcmUgdG8gbGF1bmNoaW5nIG5vdyBhZnRlciB0aGUgcmV2aWV3IGlzIGNvbXBsZXRlZC4KLSAgICAgICAgaWYgKEJ1aWxkLlBFUk1JU1NJT05TX1JFVklFV19SRVFVSVJFRCAmJiBhSW5mbyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBpZiAobVNlcnZpY2UuZ2V0UGFja2FnZU1hbmFnZXJJbnRlcm5hbExvY2tlZCgpLmlzUGVybWlzc2lvbnNSZXZpZXdSZXF1aXJlZCgKLSAgICAgICAgICAgICAgICAgICAgYUluZm8ucGFja2FnZU5hbWUsIHVzZXJJZCkpIHsKLSAgICAgICAgICAgICAgICBJSW50ZW50U2VuZGVyIHRhcmdldCA9IG1TZXJ2aWNlLmdldEludGVudFNlbmRlckxvY2tlZCgKLSAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5TWFuYWdlci5JTlRFTlRfU0VOREVSX0FDVElWSVRZLCBjYWxsaW5nUGFja2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxpbmdVaWQsIHVzZXJJZCwgbnVsbCwgbnVsbCwgMCwgbmV3IEludGVudFtde2ludGVudH0sCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgU3RyaW5nW117cmVzb2x2ZWRUeXBlfSwgUGVuZGluZ0ludGVudC5GTEFHX0NBTkNFTF9DVVJSRU5UCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUGVuZGluZ0ludGVudC5GTEFHX09ORV9TSE9ULCBudWxsKTsKLQotICAgICAgICAgICAgICAgIGZpbmFsIGludCBmbGFncyA9IGludGVudC5nZXRGbGFncygpOwotICAgICAgICAgICAgICAgIEludGVudCBuZXdJbnRlbnQgPSBuZXcgSW50ZW50KEludGVudC5BQ1RJT05fUkVWSUVXX1BFUk1JU1NJT05TKTsKLSAgICAgICAgICAgICAgICBuZXdJbnRlbnQuc2V0RmxhZ3MoZmxhZ3MKLSAgICAgICAgICAgICAgICAgICAgICAgIHwgSW50ZW50LkZMQUdfQUNUSVZJVFlfRVhDTFVERV9GUk9NX1JFQ0VOVFMpOwotICAgICAgICAgICAgICAgIG5ld0ludGVudC5wdXRFeHRyYShJbnRlbnQuRVhUUkFfUEFDS0FHRV9OQU1FLCBhSW5mby5wYWNrYWdlTmFtZSk7Ci0gICAgICAgICAgICAgICAgbmV3SW50ZW50LnB1dEV4dHJhKEludGVudC5FWFRSQV9JTlRFTlQsIG5ldyBJbnRlbnRTZW5kZXIodGFyZ2V0KSk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdFJlY29yZCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5ld0ludGVudC5wdXRFeHRyYShJbnRlbnQuRVhUUkFfUkVTVUxUX05FRURFRCwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGludGVudCA9IG5ld0ludGVudDsKLQotICAgICAgICAgICAgICAgIHJlc29sdmVkVHlwZSA9IG51bGw7Ci0gICAgICAgICAgICAgICAgY2FsbGluZ1VpZCA9IHJlYWxDYWxsaW5nVWlkOwotICAgICAgICAgICAgICAgIGNhbGxpbmdQaWQgPSByZWFsQ2FsbGluZ1BpZDsKLQotICAgICAgICAgICAgICAgIHJJbmZvID0gcmVzb2x2ZUludGVudChpbnRlbnQsIHJlc29sdmVkVHlwZSwgdXNlcklkKTsKLSAgICAgICAgICAgICAgICBhSW5mbyA9IHJlc29sdmVBY3Rpdml0eShpbnRlbnQsIHJJbmZvLCBzdGFydEZsYWdzLCBudWxsIC8qcHJvZmlsZXJJbmZvKi8pOwotCi0gICAgICAgICAgICAgICAgaWYgKERFQlVHX1BFUk1JU1NJT05TX1JFVklFVykgewotICAgICAgICAgICAgICAgICAgICBTbG9nLmkoVEFHLCAiU1RBUlQgdSIgKyB1c2VySWQgKyAiIHsiICsgaW50ZW50LnRvU2hvcnRTdHJpbmcodHJ1ZSwgdHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCBmYWxzZSkgKyAifSBmcm9tIHVpZCAiICsgY2FsbGluZ1VpZCArICIgb24gZGlzcGxheSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAoY29udGFpbmVyID09IG51bGwgPyAobUZvY3VzZWRTdGFjayA9PSBudWxsID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXNwbGF5LkRFRkFVTFRfRElTUExBWSA6IG1Gb2N1c2VkU3RhY2subURpc3BsYXlJZCkgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb250YWluZXIubUFjdGl2aXR5RGlzcGxheSA9PSBudWxsID8gRGlzcGxheS5ERUZBVUxUX0RJU1BMQVkgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLm1BY3Rpdml0eURpc3BsYXkubURpc3BsYXlJZCkpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiB3ZSBoYXZlIGFuIGVwaGVtZXJhbCBhcHAsIGFib3J0IHRoZSBwcm9jZXNzIG9mIGxhdW5jaGluZyB0aGUgcmVzb2x2ZWQgaW50ZW50LgotICAgICAgICAvLyBJbnN0ZWFkLCBsYXVuY2ggdGhlIGVwaGVtZXJhbCBpbnN0YWxsZXIuIE9uY2UgdGhlIGluc3RhbGxlciBpcyBmaW5pc2hlZCwgaXQKLSAgICAgICAgLy8gc3RhcnRzIGVpdGhlciB0aGUgaW50ZW50IHdlIHJlc29sdmVkIGhlcmUgW29uIGluc3RhbGwgZXJyb3JdIG9yIHRoZSBlcGhlbWVyYWwKLSAgICAgICAgLy8gYXBwIFtvbiBpbnN0YWxsIHN1Y2Nlc3NdLgotICAgICAgICBpZiAockluZm8gIT0gbnVsbCAmJiBySW5mby5lcGhlbWVyYWxSZXNvbHZlSW5mbyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAvLyBDcmVhdGUgYSBwZW5kaW5nIGludGVudCB0byBzdGFydCB0aGUgaW50ZW50IHJlc29sdmVkIGhlcmUuCi0gICAgICAgICAgICBmaW5hbCBJSW50ZW50U2VuZGVyIGZhaWx1cmVUYXJnZXQgPSBtU2VydmljZS5nZXRJbnRlbnRTZW5kZXJMb2NrZWQoCi0gICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5TWFuYWdlci5JTlRFTlRfU0VOREVSX0FDVElWSVRZLCBjYWxsaW5nUGFja2FnZSwKLSAgICAgICAgICAgICAgICAgICAgQmluZGVyLmdldENhbGxpbmdVaWQoKSwgdXNlcklkLCBudWxsLCBudWxsLCAwLCBuZXcgSW50ZW50W117IGludGVudCB9LAotICAgICAgICAgICAgICAgICAgICBuZXcgU3RyaW5nW117IHJlc29sdmVkVHlwZSB9LAotICAgICAgICAgICAgICAgICAgICBQZW5kaW5nSW50ZW50LkZMQUdfQ0FOQ0VMX0NVUlJFTlQgfCBQZW5kaW5nSW50ZW50LkZMQUdfT05FX1NIT1QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBlbmRpbmdJbnRlbnQuRkxBR19JTU1VVEFCTEUsIG51bGwpOwotCi0gICAgICAgICAgICAvLyBDcmVhdGUgYSBwZW5kaW5nIGludGVudCB0byBzdGFydCB0aGUgZXBoZW1lcmFsIGFwcGxpY2F0aW9uOyBmb3JjZSBpdCB0byBiZQotICAgICAgICAgICAgLy8gZGlyZWN0ZWQgdG8gdGhlIGVwaGVtZXJhbCBwYWNrYWdlLgotICAgICAgICAgICAgZXBoZW1lcmFsSW50ZW50LnNldFBhY2thZ2UockluZm8uZXBoZW1lcmFsUmVzb2x2ZUluZm8uZ2V0UGFja2FnZU5hbWUoKSk7Ci0gICAgICAgICAgICBmaW5hbCBJSW50ZW50U2VuZGVyIGVwaGVtZXJhbFRhcmdldCA9IG1TZXJ2aWNlLmdldEludGVudFNlbmRlckxvY2tlZCgKLSAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlNYW5hZ2VyLklOVEVOVF9TRU5ERVJfQUNUSVZJVFksIGNhbGxpbmdQYWNrYWdlLAotICAgICAgICAgICAgICAgICAgICBCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpLCB1c2VySWQsIG51bGwsIG51bGwsIDAsIG5ldyBJbnRlbnRbXXsgZXBoZW1lcmFsSW50ZW50IH0sCi0gICAgICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdbXXsgcmVzb2x2ZWRUeXBlIH0sCi0gICAgICAgICAgICAgICAgICAgIFBlbmRpbmdJbnRlbnQuRkxBR19DQU5DRUxfQ1VSUkVOVCB8IFBlbmRpbmdJbnRlbnQuRkxBR19PTkVfU0hPVAotICAgICAgICAgICAgICAgICAgICB8IFBlbmRpbmdJbnRlbnQuRkxBR19JTU1VVEFCTEUsIG51bGwpOwotCi0gICAgICAgICAgICBpbnQgZmxhZ3MgPSBpbnRlbnQuZ2V0RmxhZ3MoKTsKLSAgICAgICAgICAgIGludGVudCA9IG5ldyBJbnRlbnQoKTsKLSAgICAgICAgICAgIGludGVudC5zZXRGbGFncyhmbGFncwotICAgICAgICAgICAgICAgICAgICB8IEludGVudC5GTEFHX0FDVElWSVRZX05FV19UQVNLCi0gICAgICAgICAgICAgICAgICAgIHwgSW50ZW50LkZMQUdfQUNUSVZJVFlfRVhDTFVERV9GUk9NX1JFQ0VOVFMpOwotICAgICAgICAgICAgaW50ZW50LnB1dEV4dHJhKEludGVudC5FWFRSQV9QQUNLQUdFX05BTUUsCi0gICAgICAgICAgICAgICAgICAgIHJJbmZvLmVwaGVtZXJhbFJlc29sdmVJbmZvLmdldFBhY2thZ2VOYW1lKCkpOwotICAgICAgICAgICAgaW50ZW50LnB1dEV4dHJhKEludGVudC5FWFRSQV9FUEhFTUVSQUxfRkFJTFVSRSwgbmV3IEludGVudFNlbmRlcihmYWlsdXJlVGFyZ2V0KSk7Ci0gICAgICAgICAgICBpbnRlbnQucHV0RXh0cmEoSW50ZW50LkVYVFJBX0VQSEVNRVJBTF9TVUNDRVNTLCBuZXcgSW50ZW50U2VuZGVyKGVwaGVtZXJhbFRhcmdldCkpOwotCi0gICAgICAgICAgICByZXNvbHZlZFR5cGUgPSBudWxsOwotICAgICAgICAgICAgY2FsbGluZ1VpZCA9IHJlYWxDYWxsaW5nVWlkOwotICAgICAgICAgICAgY2FsbGluZ1BpZCA9IHJlYWxDYWxsaW5nUGlkOwotCi0gICAgICAgICAgICBySW5mbyA9IHJJbmZvLmVwaGVtZXJhbEluc3RhbGxlcjsKLSAgICAgICAgICAgIGFJbmZvID0gcmVzb2x2ZUFjdGl2aXR5KGludGVudCwgckluZm8sIHN0YXJ0RmxhZ3MsIG51bGwgLypwcm9maWxlckluZm8qLyk7Ci0gICAgICAgIH0KLQotICAgICAgICBBY3Rpdml0eVJlY29yZCByID0gbmV3IEFjdGl2aXR5UmVjb3JkKG1TZXJ2aWNlLCBjYWxsZXJBcHAsIGNhbGxpbmdVaWQsIGNhbGxpbmdQYWNrYWdlLAotICAgICAgICAgICAgICAgIGludGVudCwgcmVzb2x2ZWRUeXBlLCBhSW5mbywgbVNlcnZpY2UubUNvbmZpZ3VyYXRpb24sIHJlc3VsdFJlY29yZCwgcmVzdWx0V2hvLAotICAgICAgICAgICAgICAgIHJlcXVlc3RDb2RlLCBjb21wb25lbnRTcGVjaWZpZWQsIHZvaWNlU2Vzc2lvbiAhPSBudWxsLCB0aGlzLCBjb250YWluZXIsIG9wdGlvbnMpOwotICAgICAgICBpZiAob3V0QWN0aXZpdHkgIT0gbnVsbCkgewotICAgICAgICAgICAgb3V0QWN0aXZpdHlbMF0gPSByOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHIuYXBwVGltZVRyYWNrZXIgPT0gbnVsbCAmJiBzb3VyY2VSZWNvcmQgIT0gbnVsbCkgewotICAgICAgICAgICAgLy8gSWYgdGhlIGNhbGxlciBkaWRuJ3Qgc3BlY2lmeSBhbiBleHBsaWNpdCB0aW1lIHRyYWNrZXIsIHdlIHdhbnQgdG8gY29udGludWUKLSAgICAgICAgICAgIC8vIHRyYWNraW5nIHVuZGVyIGFueSBpdCBoYXMuCi0gICAgICAgICAgICByLmFwcFRpbWVUcmFja2VyID0gc291cmNlUmVjb3JkLmFwcFRpbWVUcmFja2VyOwotICAgICAgICB9Ci0KLSAgICAgICAgZmluYWwgQWN0aXZpdHlTdGFjayBzdGFjayA9IG1Gb2N1c2VkU3RhY2s7Ci0gICAgICAgIGlmICh2b2ljZVNlc3Npb24gPT0gbnVsbCAmJiAoc3RhY2subVJlc3VtZWRBY3Rpdml0eSA9PSBudWxsCi0gICAgICAgICAgICAgICAgfHwgc3RhY2subVJlc3VtZWRBY3Rpdml0eS5pbmZvLmFwcGxpY2F0aW9uSW5mby51aWQgIT0gY2FsbGluZ1VpZCkpIHsKLSAgICAgICAgICAgIGlmICghbVNlcnZpY2UuY2hlY2tBcHBTd2l0Y2hBbGxvd2VkTG9ja2VkKGNhbGxpbmdQaWQsIGNhbGxpbmdVaWQsCi0gICAgICAgICAgICAgICAgICAgIHJlYWxDYWxsaW5nUGlkLCByZWFsQ2FsbGluZ1VpZCwgIkFjdGl2aXR5IHN0YXJ0IikpIHsKLSAgICAgICAgICAgICAgICBQZW5kaW5nQWN0aXZpdHlMYXVuY2ggcGFsID0gIG5ldyBQZW5kaW5nQWN0aXZpdHlMYXVuY2gociwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVJlY29yZCwgc3RhcnRGbGFncywgc3RhY2ssIGNhbGxlckFwcCk7Ci0gICAgICAgICAgICAgICAgbVBlbmRpbmdBY3Rpdml0eUxhdW5jaGVzLmFkZChwYWwpOwotICAgICAgICAgICAgICAgIEFjdGl2aXR5T3B0aW9ucy5hYm9ydChvcHRpb25zKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX1NXSVRDSEVTX0NBTkNFTEVEOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1TZXJ2aWNlLm1EaWRBcHBTd2l0Y2gpIHsKLSAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHNlY29uZCBhbGxvd2VkIHN3aXRjaCBzaW5jZSB3ZSBzdG9wcGVkIHN3aXRjaGVzLAotICAgICAgICAgICAgLy8gc28gbm93IGp1c3QgZ2VuZXJhbGx5IGFsbG93IHN3aXRjaGVzLiAgVXNlIGNhc2U6IHVzZXIgcHJlc3NlcwotICAgICAgICAgICAgLy8gaG9tZSAoc3dpdGNoZXMgZGlzYWJsZWQsIHN3aXRjaCB0byBob21lLCBtRGlkQXBwU3dpdGNoIG5vdyB0cnVlKTsKLSAgICAgICAgICAgIC8vIHVzZXIgdGFwcyBhIGhvbWUgaWNvbiAoY29taW5nIGZyb20gaG9tZSBzbyBhbGxvd2VkLCB3ZSBoaXQgaGVyZQotICAgICAgICAgICAgLy8gYW5kIG5vdyBhbGxvdyBhbnlvbmUgdG8gc3dpdGNoIGFnYWluKS4KLSAgICAgICAgICAgIG1TZXJ2aWNlLm1BcHBTd2l0Y2hlc0FsbG93ZWRUaW1lID0gMDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1TZXJ2aWNlLm1EaWRBcHBTd2l0Y2ggPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgZG9QZW5kaW5nQWN0aXZpdHlMYXVuY2hlc0xvY2tlZChmYWxzZSk7Ci0KLSAgICAgICAgZXJyID0gc3RhcnRBY3Rpdml0eVVuY2hlY2tlZExvY2tlZChyLCBzb3VyY2VSZWNvcmQsIHZvaWNlU2Vzc2lvbiwgdm9pY2VJbnRlcmFjdG9yLAotICAgICAgICAgICAgICAgIHN0YXJ0RmxhZ3MsIHRydWUsIG9wdGlvbnMsIGluVGFzayk7Ci0KLSAgICAgICAgaWYgKGVyciA8IDApIHsKLSAgICAgICAgICAgIC8vIElmIHNvbWVvbmUgYXNrZWQgdG8gaGF2ZSB0aGUga2V5Z3VhcmQgZGlzbWlzc2VkIG9uIHRoZSBuZXh0Ci0gICAgICAgICAgICAvLyBhY3Rpdml0eSBzdGFydCwgYnV0IHdlIGFyZSBub3QgYWN0dWFsbHkgZG9pbmcgYW4gYWN0aXZpdHkKLSAgICAgICAgICAgIC8vIHN3aXRjaC4uLiAganVzdCBkaXNtaXNzIHRoZSBrZXlndWFyZCBub3csIGJlY2F1c2Ugd2UKLSAgICAgICAgICAgIC8vIHByb2JhYmx5IHdhbnQgdG8gc2VlIHdoYXRldmVyIGlzIGJlaGluZCBpdC4KLSAgICAgICAgICAgIG5vdGlmeUFjdGl2aXR5RHJhd25Gb3JLZXlndWFyZCgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBib29sZWFuIGNoZWNrU3RhcnRBbnlBY3Rpdml0eVBlcm1pc3Npb24oSW50ZW50IGludGVudCwgQWN0aXZpdHlJbmZvIGFJbmZvLAorICAgIGJvb2xlYW4gY2hlY2tTdGFydEFueUFjdGl2aXR5UGVybWlzc2lvbihJbnRlbnQgaW50ZW50LCBBY3Rpdml0eUluZm8gYUluZm8sCiAgICAgICAgICAgICBTdHJpbmcgcmVzdWx0V2hvLCBpbnQgcmVxdWVzdENvZGUsIGludCBjYWxsaW5nUGlkLCBpbnQgY2FsbGluZ1VpZCwKICAgICAgICAgICAgIFN0cmluZyBjYWxsaW5nUGFja2FnZSwgYm9vbGVhbiBpZ25vcmVUYXJnZXRTZWN1cml0eSwgUHJvY2Vzc1JlY29yZCBjYWxsZXJBcHAsCiAgICAgICAgICAgICBBY3Rpdml0eVJlY29yZCByZXN1bHRSZWNvcmQsIEFjdGl2aXR5U3RhY2sgcmVzdWx0U3RhY2spIHsKQEAgLTE4OTUsNyArMTI4NSw3IEBACiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHByaXZhdGUgVXNlckluZm8gZ2V0VXNlckluZm8oaW50IHVzZXJJZCkgeworICAgIFVzZXJJbmZvIGdldFVzZXJJbmZvKGludCB1c2VySWQpIHsKICAgICAgICAgZmluYWwgbG9uZyBpZGVudGl0eSA9IEJpbmRlci5jbGVhckNhbGxpbmdJZGVudGl0eSgpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmV0dXJuIFVzZXJNYW5hZ2VyLmdldChtU2VydmljZS5tQ29udGV4dCkuZ2V0VXNlckluZm8odXNlcklkKTsKQEAgLTE5NzMsODQ5ICsxMzYzLDIwIEBACiAgICAgICAgIHJldHVybiBBQ1RJVklUWV9SRVNUUklDVElPTl9OT05FOwogICAgIH0KIAotICAgIHByaXZhdGUgQWN0aXZpdHlTdGFjayBjb21wdXRlU3RhY2tGb2N1cyhBY3Rpdml0eVJlY29yZCByLCBib29sZWFuIG5ld1Rhc2ssIFJlY3QgYm91bmRzLAotICAgICAgICAgICAgaW50IGxhdW5jaEZsYWdzKSB7Ci0gICAgICAgIGZpbmFsIFRhc2tSZWNvcmQgdGFzayA9IHIudGFzazsKLSAgICAgICAgaWYgKCEoci5pc0FwcGxpY2F0aW9uQWN0aXZpdHkoKSB8fCAodGFzayAhPSBudWxsICYmIHRhc2suaXNBcHBsaWNhdGlvblRhc2soKSkpKSB7Ci0gICAgICAgICAgICByZXR1cm4gbUhvbWVTdGFjazsKLSAgICAgICAgfQotCi0gICAgICAgIEFjdGl2aXR5U3RhY2sgc3RhY2sgPSBnZXRMYXVuY2hUb1NpZGVTdGFjayhyLCBsYXVuY2hGbGFncywgdGFzayk7Ci0gICAgICAgIGlmIChzdGFjayAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gc3RhY2s7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodGFzayAhPSBudWxsICYmIHRhc2suc3RhY2sgIT0gbnVsbCkgewotICAgICAgICAgICAgc3RhY2sgPSB0YXNrLnN0YWNrOwotICAgICAgICAgICAgaWYgKHN0YWNrLmlzT25Ib21lRGlzcGxheSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1Gb2N1c2VkU3RhY2sgIT0gc3RhY2spIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHX0ZPQ1VTIHx8IERFQlVHX1NUQUNLKSBTbG9nLmQoVEFHX0ZPQ1VTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21wdXRlU3RhY2tGb2N1czogU2V0dGluZyAiICsgImZvY3VzZWQgc3RhY2sgdG8gcj0iICsgcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHRhc2s9IiArIHRhc2spOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERUJVR19GT0NVUyB8fCBERUJVR19TVEFDSykgU2xvZy5kKFRBR19GT0NVUywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tcHV0ZVN0YWNrRm9jdXM6IEZvY3VzZWQgc3RhY2sgYWxyZWFkeT0iICsgbUZvY3VzZWRTdGFjayk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHN0YWNrOwotICAgICAgICB9Ci0KLSAgICAgICAgZmluYWwgQWN0aXZpdHlDb250YWluZXIgY29udGFpbmVyID0gci5tSW5pdGlhbEFjdGl2aXR5Q29udGFpbmVyOwotICAgICAgICBpZiAoY29udGFpbmVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIC8vIFRoZSBmaXJzdCB0aW1lIHB1dCBpdCBvbiB0aGUgZGVzaXJlZCBzdGFjaywgYWZ0ZXIgdGhpcyBwdXQgb24gdGFzayBzdGFjay4KLSAgICAgICAgICAgIHIubUluaXRpYWxBY3Rpdml0eUNvbnRhaW5lciA9IG51bGw7Ci0gICAgICAgICAgICByZXR1cm4gY29udGFpbmVyLm1TdGFjazsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFRoZSBmdWxsc2NyZWVuIHN0YWNrIGNhbiBjb250YWluIGFueSB0YXNrIHJlZ2FyZGxlc3Mgb2YgaWYgdGhlIHRhc2sgaXMgcmVzaXplYWJsZQotICAgICAgICAvLyBvciBub3QuIFNvLCB3ZSBsZXQgdGhlIHRhc2sgZ28gaW4gdGhlIGZ1bGxzY3JlZW4gdGFzayBpZiBpdCBpcyB0aGUgZm9jdXMgc3RhY2suCi0gICAgICAgIC8vIElmIHRoZSBmcmVlZm9ybSBvciBkb2NrZWQgc3RhY2sgaGFzIGZvY3VzLCBhbmQgdGhlIGFjdGl2aXR5IHRvIGJlIGxhdW5jaGVkIGlzIHJlc2l6ZWFibGUsCi0gICAgICAgIC8vIHdlIGNhbiBhbHNvIHB1dCBpdCBpbiB0aGUgZm9jdXNlZCBzdGFjay4KLSAgICAgICAgZmluYWwgaW50IGZvY3VzZWRTdGFja0lkID0gbUZvY3VzZWRTdGFjay5tU3RhY2tJZDsKLSAgICAgICAgZmluYWwgYm9vbGVhbiBjYW5Vc2VGb2N1c2VkU3RhY2sgPQotICAgICAgICAgICAgICAgIGZvY3VzZWRTdGFja0lkID09IEZVTExTQ1JFRU5fV09SS1NQQUNFX1NUQUNLX0lECi0gICAgICAgICAgICAgICAgfHwgZm9jdXNlZFN0YWNrSWQgPT0gRE9DS0VEX1NUQUNLX0lECi0gICAgICAgICAgICAgICAgfHwgKGZvY3VzZWRTdGFja0lkID09IEZSRUVGT1JNX1dPUktTUEFDRV9TVEFDS19JRCAmJiByLmluZm8ucmVzaXplYWJsZSk7Ci0gICAgICAgIGlmIChjYW5Vc2VGb2N1c2VkU3RhY2sKLSAgICAgICAgICAgICAgICAmJiAoIW5ld1Rhc2sgfHwgbUZvY3VzZWRTdGFjay5tQWN0aXZpdHlDb250YWluZXIuaXNFbGlnaWJsZUZvck5ld1Rhc2tzKCkpKSB7Ci0gICAgICAgICAgICBpZiAoREVCVUdfRk9DVVMgfHwgREVCVUdfU1RBQ0spIFNsb2cuZChUQUdfRk9DVVMsCi0gICAgICAgICAgICAgICAgICAgICJjb21wdXRlU3RhY2tGb2N1czogSGF2ZSBhIGZvY3VzZWQgc3RhY2s9IiArIG1Gb2N1c2VkU3RhY2spOwotICAgICAgICAgICAgcmV0dXJuIG1Gb2N1c2VkU3RhY2s7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBXZSBmaXJzdCB0cnkgdG8gcHV0IHRoZSB0YXNrIGluIHRoZSBmaXJzdCBkeW5hbWljIHN0YWNrLgotICAgICAgICBmaW5hbCBBcnJheUxpc3Q8QWN0aXZpdHlTdGFjaz4gaG9tZURpc3BsYXlTdGFja3MgPSBtSG9tZVN0YWNrLm1TdGFja3M7Ci0gICAgICAgIGZvciAoaW50IHN0YWNrTmR4ID0gaG9tZURpc3BsYXlTdGFja3Muc2l6ZSgpIC0gMTsgc3RhY2tOZHggPj0gMDsgLS1zdGFja05keCkgewotICAgICAgICAgICAgc3RhY2sgPSBob21lRGlzcGxheVN0YWNrcy5nZXQoc3RhY2tOZHgpOwotICAgICAgICAgICAgaWYgKCFTdGFja0lkLmlzU3RhdGljU3RhY2soc3RhY2subVN0YWNrSWQpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKERFQlVHX0ZPQ1VTIHx8IERFQlVHX1NUQUNLKSBTbG9nLmQoVEFHX0ZPQ1VTLAotICAgICAgICAgICAgICAgICAgICAgICAgImNvbXB1dGVTdGFja0ZvY3VzOiBTZXR0aW5nIGZvY3VzZWQgc3RhY2s9IiArIHN0YWNrKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RhY2s7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBzdWl0YWJsZSBkeW5hbWljIHN0YWNrIHRoZW4gd2UgZmlndXJlIG91dCB3aGljaCBzdGF0aWMgc3RhY2sgdG8gdXNlLgotICAgICAgICBmaW5hbCBpbnQgc3RhY2tJZCA9IHRhc2sgIT0gbnVsbCA/IHRhc2suZ2V0TGF1bmNoU3RhY2tJZCgpIDoKLSAgICAgICAgICAgICAgICAgICAgYm91bmRzICE9IG51bGwgPyBGUkVFRk9STV9XT1JLU1BBQ0VfU1RBQ0tfSUQgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZVTExTQ1JFRU5fV09SS1NQQUNFX1NUQUNLX0lEOwotICAgICAgICBzdGFjayA9IGdldFN0YWNrKHN0YWNrSWQsIENSRUFURV9JRl9ORUVERUQsIE9OX1RPUCk7Ci0gICAgICAgIGlmIChERUJVR19GT0NVUyB8fCBERUJVR19TVEFDSykgU2xvZy5kKFRBR19GT0NVUywgImNvbXB1dGVTdGFja0ZvY3VzOiBOZXcgc3RhY2sgcj0iCi0gICAgICAgICAgICAgICAgKyByICsgIiBzdGFja0lkPSIgKyBzdGFjay5tU3RhY2tJZCk7Ci0gICAgICAgIHJldHVybiBzdGFjazsKLSAgICB9Ci0KLSAgICBwcml2YXRlIEFjdGl2aXR5U3RhY2sgZ2V0TGF1bmNoVG9TaWRlU3RhY2soQWN0aXZpdHlSZWNvcmQgciwgaW50IGxhdW5jaEZsYWdzLCBUYXNrUmVjb3JkIHRhc2spIHsKLSAgICAgICAgaWYgKChsYXVuY2hGbGFncyAmIEZMQUdfQUNUSVZJVFlfTEFVTkNIX1RPX1NJREUpID09IDApIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgICAgIC8vIFRoZSBwYXJlbnQgYWN0aXZpdHkgZG9lc24ndCB3YW50IHRvIGxhdW5jaCB0aGUgYWN0aXZpdHkgb24gdG9wIG9mIGl0c2VsZiwgYnV0Ci0gICAgICAgIC8vIGluc3RlYWQgdHJpZXMgdG8gcHV0IGl0IG9udG8gb3RoZXIgc2lkZSBpbiBzaWRlLWJ5LXNpZGUgbW9kZS4KLSAgICAgICAgZmluYWwgQWN0aXZpdHlTdGFjayBwYXJlbnRTdGFjayA9IHRhc2sgIT0gbnVsbCA/IHRhc2suc3RhY2sKLSAgICAgICAgICAgICAgICA6IHIubUluaXRpYWxBY3Rpdml0eUNvbnRhaW5lciAhPSBudWxsID8gci5tSW5pdGlhbEFjdGl2aXR5Q29udGFpbmVyLm1TdGFjawotICAgICAgICAgICAgICAgIDogbUZvY3VzZWRTdGFjazsKLSAgICAgICAgaWYgKHBhcmVudFN0YWNrICE9IG51bGwgJiYgcGFyZW50U3RhY2subVN0YWNrSWQgPT0gRE9DS0VEX1NUQUNLX0lEKSB7Ci0gICAgICAgICAgICAvLyBJZiBwYXJlbnQgd2FzIGluIGRvY2tlZCBzdGFjaywgdGhlIG5hdHVyYWwgcGxhY2UgdG8gbGF1bmNoIGFub3RoZXIgYWN0aXZpdHkKLSAgICAgICAgICAgIC8vIHdpbGwgYmUgZnVsbHNjcmVlbiwgc28gaXQgY2FuIGFwcGVhciBhbG9uZ3NpZGUgdGhlIGRvY2tlZCB3aW5kb3cuCi0gICAgICAgICAgICByZXR1cm4gZ2V0U3RhY2soRlVMTFNDUkVFTl9XT1JLU1BBQ0VfU1RBQ0tfSUQsIENSRUFURV9JRl9ORUVERUQsIE9OX1RPUCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGUgcGFyZW50IGlzIG5vdCBpbiB0aGUgZG9ja2VkIHN0YWNrLCB3ZSBjaGVjayBpZiB0aGVyZSBpcyBkb2NrZWQgd2luZG93Ci0gICAgICAgICAgICAvLyBhbmQgaWYgeWVzLCB3ZSB3aWxsIGxhdW5jaCBpbnRvIHRoYXQgc3RhY2suIElmIG5vdCwgd2UganVzdCBwdXQgdGhlIG5ldwotICAgICAgICAgICAgLy8gYWN0aXZpdHkgaW50byBwYXJlbnQncyBzdGFjaywgYmVjYXVzZSB3ZSBjYW4ndCBmaW5kIGEgYmV0dGVyIHBsYWNlLgotICAgICAgICAgICAgZmluYWwgQWN0aXZpdHlTdGFjayBzdGFjayA9IGdldFN0YWNrKERPQ0tFRF9TVEFDS19JRCk7Ci0gICAgICAgICAgICBpZiAoc3RhY2sgIT0gbnVsbCAmJiAhc3RhY2suaXNTdGFja1Zpc2libGVMb2NrZWQoKSkgewotICAgICAgICAgICAgICAgIC8vIFRoZXJlIGlzIGEgZG9ja2VkIHN0YWNrLCBidXQgaXQgaXNuJ3QgdmlzaWJsZSwgc28gd2UgY2FuJ3QgbGF1bmNoIGludG8gdGhhdC4KLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHN0YWNrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgYm9vbGVhbiBzZXRGb2N1c2VkU3RhY2soQWN0aXZpdHlSZWNvcmQgciwgU3RyaW5nIHJlYXNvbikgeworICAgIGJvb2xlYW4gbW92ZUFjdGl2aXR5U3RhY2tUb0Zyb250KEFjdGl2aXR5UmVjb3JkIHIsIFN0cmluZyByZWFzb24pIHsKICAgICAgICAgaWYgKHIgPT0gbnVsbCkgewogICAgICAgICAgICAgLy8gTm90IHN1cmUgd2hhdCB5b3UgYXJlIHRyeWluZyB0byBkbywgYnV0IGl0IGlzIG5vdCBnb2luZyB0byB3b3JrLi4uCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgZmluYWwgVGFza1JlY29yZCB0YXNrID0gci50YXNrOwogICAgICAgICBpZiAodGFzayA9PSBudWxsIHx8IHRhc2suc3RhY2sgPT0gbnVsbCkgewotICAgICAgICAgICAgU2xvZy53KFRBRywgIkNhbid0IHNldCBmb2N1cyBzdGFjayBmb3Igcj0iICsgciArICIgdGFzaz0iICsgdGFzayk7CisgICAgICAgICAgICBTbG9nLncoVEFHLCAiQ2FuJ3QgbW92ZSBzdGFjayB0byBmcm9udCBmb3Igcj0iICsgciArICIgdGFzaz0iICsgdGFzayk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgdGFzay5zdGFjay5tb3ZlVG9Gcm9udChyZWFzb24sIHRhc2spOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBmaW5hbCBpbnQgc3RhcnRBY3Rpdml0eVVuY2hlY2tlZExvY2tlZChmaW5hbCBBY3Rpdml0eVJlY29yZCByLCBBY3Rpdml0eVJlY29yZCBzb3VyY2VSZWNvcmQsCi0gICAgICAgICAgICBJVm9pY2VJbnRlcmFjdGlvblNlc3Npb24gdm9pY2VTZXNzaW9uLCBJVm9pY2VJbnRlcmFjdG9yIHZvaWNlSW50ZXJhY3RvciwgaW50IHN0YXJ0RmxhZ3MsCi0gICAgICAgICAgICBib29sZWFuIGRvUmVzdW1lLCBBY3Rpdml0eU9wdGlvbnMgb3B0aW9ucywgVGFza1JlY29yZCBpblRhc2spIHsKLSAgICAgICAgZmluYWwgSW50ZW50IGludGVudCA9IHIuaW50ZW50OwotICAgICAgICBmaW5hbCBpbnQgY2FsbGluZ1VpZCA9IHIubGF1bmNoZWRGcm9tVWlkOwotCi0gICAgICAgIGJvb2xlYW4gb3ZlcnJpZGVCb3VuZHMgPSBmYWxzZTsKLSAgICAgICAgUmVjdCBuZXdCb3VuZHMgPSBudWxsOwotICAgICAgICBpZiAob3B0aW9ucyAhPSBudWxsICYmIChyLmluZm8ucmVzaXplYWJsZSB8fCAoaW5UYXNrICE9IG51bGwgJiYgaW5UYXNrLm1SZXNpemVhYmxlKSkpIHsKLSAgICAgICAgICAgIGlmIChjYW5Vc2VBY3Rpdml0eU9wdGlvbnNMYXVuY2hCb3VuZHMob3B0aW9ucykpIHsKLSAgICAgICAgICAgICAgICBvdmVycmlkZUJvdW5kcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgbmV3Qm91bmRzID0gb3B0aW9ucy5nZXRMYXVuY2hCb3VuZHMoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIEluIHNvbWUgZmxvd3MgaW4gdG8gdGhpcyBmdW5jdGlvbiwgd2UgcmV0cmlldmUgdGhlIHRhc2sgcmVjb3JkIGFuZCBob2xkIG9uIHRvIGl0Ci0gICAgICAgIC8vIHdpdGhvdXQgYSBsb2NrIGJlZm9yZSBjYWxsaW5nIGJhY2sgaW4gdG8gaGVyZS4uLiAgc28gdGhlIHRhc2sgYXQgdGhpcyBwb2ludCBtYXkKLSAgICAgICAgLy8gbm90IGFjdHVhbGx5IGJlIGluIHJlY2VudHMuICBDaGVjayBmb3IgdGhhdCwgYW5kIGlmIGl0IGlzbid0IGluIHJlY2VudHMganVzdAotICAgICAgICAvLyBjb25zaWRlciBpdCBpbnZhbGlkLgotICAgICAgICBpZiAoaW5UYXNrICE9IG51bGwgJiYgIWluVGFzay5pblJlY2VudHMpIHsKLSAgICAgICAgICAgIFNsb2cudyhUQUcsICJTdGFydGluZyBhY3Rpdml0eSBpbiB0YXNrIG5vdCBpbiByZWNlbnRzOiAiICsgaW5UYXNrKTsKLSAgICAgICAgICAgIGluVGFzayA9IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBmaW5hbCBib29sZWFuIGxhdW5jaFNpbmdsZVRvcCA9IHIubGF1bmNoTW9kZSA9PSBBY3Rpdml0eUluZm8uTEFVTkNIX1NJTkdMRV9UT1A7Ci0gICAgICAgIGZpbmFsIGJvb2xlYW4gbGF1bmNoU2luZ2xlSW5zdGFuY2UgPSByLmxhdW5jaE1vZGUgPT0gQWN0aXZpdHlJbmZvLkxBVU5DSF9TSU5HTEVfSU5TVEFOQ0U7Ci0gICAgICAgIGZpbmFsIGJvb2xlYW4gbGF1bmNoU2luZ2xlVGFzayA9IHIubGF1bmNoTW9kZSA9PSBBY3Rpdml0eUluZm8uTEFVTkNIX1NJTkdMRV9UQVNLOwotCi0gICAgICAgIGludCBsYXVuY2hGbGFncyA9IGludGVudC5nZXRGbGFncygpOwotICAgICAgICBpZiAoKGxhdW5jaEZsYWdzICYgSW50ZW50LkZMQUdfQUNUSVZJVFlfTkVXX0RPQ1VNRU5UKSAhPSAwICYmCi0gICAgICAgICAgICAgICAgKGxhdW5jaFNpbmdsZUluc3RhbmNlIHx8IGxhdW5jaFNpbmdsZVRhc2spKSB7Ci0gICAgICAgICAgICAvLyBXZSBoYXZlIGEgY29uZmxpY3QgYmV0d2VlbiB0aGUgSW50ZW50IGFuZCB0aGUgQWN0aXZpdHkgbWFuaWZlc3QsIG1hbmlmZXN0IHdpbnMuCi0gICAgICAgICAgICBTbG9nLmkoVEFHLCAiSWdub3JpbmcgRkxBR19BQ1RJVklUWV9ORVdfRE9DVU1FTlQsIGxhdW5jaE1vZGUgaXMgIiArCi0gICAgICAgICAgICAgICAgICAgICJcInNpbmdsZUluc3RhbmNlXCIgb3IgXCJzaW5nbGVUYXNrXCIiKTsKLSAgICAgICAgICAgIGxhdW5jaEZsYWdzICY9Ci0gICAgICAgICAgICAgICAgICAgIH4oSW50ZW50LkZMQUdfQUNUSVZJVFlfTkVXX0RPQ1VNRU5UIHwgRkxBR19BQ1RJVklUWV9NVUxUSVBMRV9UQVNLKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN3aXRjaCAoci5pbmZvLmRvY3VtZW50TGF1bmNoTW9kZSkgewotICAgICAgICAgICAgICAgIGNhc2UgQWN0aXZpdHlJbmZvLkRPQ1VNRU5UX0xBVU5DSF9OT05FOgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIEFjdGl2aXR5SW5mby5ET0NVTUVOVF9MQVVOQ0hfSU5UT19FWElTVElORzoKLSAgICAgICAgICAgICAgICAgICAgbGF1bmNoRmxhZ3MgfD0gSW50ZW50LkZMQUdfQUNUSVZJVFlfTkVXX0RPQ1VNRU5UOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIEFjdGl2aXR5SW5mby5ET0NVTUVOVF9MQVVOQ0hfQUxXQVlTOgotICAgICAgICAgICAgICAgICAgICBsYXVuY2hGbGFncyB8PSBJbnRlbnQuRkxBR19BQ1RJVklUWV9ORVdfRE9DVU1FTlQ7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQWN0aXZpdHlJbmZvLkRPQ1VNRU5UX0xBVU5DSF9ORVZFUjoKLSAgICAgICAgICAgICAgICAgICAgbGF1bmNoRmxhZ3MgJj0gfkZMQUdfQUNUSVZJVFlfTVVMVElQTEVfVEFTSzsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBmaW5hbCBib29sZWFuIGxhdW5jaFRhc2tCZWhpbmQgPSByLm1MYXVuY2hUYXNrQmVoaW5kCi0gICAgICAgICAgICAgICAgJiYgIWxhdW5jaFNpbmdsZVRhc2sgJiYgIWxhdW5jaFNpbmdsZUluc3RhbmNlCi0gICAgICAgICAgICAgICAgJiYgKGxhdW5jaEZsYWdzICYgSW50ZW50LkZMQUdfQUNUSVZJVFlfTkVXX0RPQ1VNRU5UKSAhPSAwOwotCi0gICAgICAgIGlmIChyLnJlc3VsdFRvICE9IG51bGwgJiYgKGxhdW5jaEZsYWdzICYgRkxBR19BQ1RJVklUWV9ORVdfVEFTSykgIT0gMAotICAgICAgICAgICAgICAgICYmIHIucmVzdWx0VG8udGFzay5zdGFjayAhPSBudWxsKSB7Ci0gICAgICAgICAgICAvLyBGb3Igd2hhdGV2ZXIgcmVhc29uIHRoaXMgYWN0aXZpdHkgaXMgYmVpbmcgbGF1bmNoZWQgaW50byBhIG5ldwotICAgICAgICAgICAgLy8gdGFzay4uLiAgeWV0IHRoZSBjYWxsZXIgaGFzIHJlcXVlc3RlZCBhIHJlc3VsdCBiYWNrLiAgV2VsbCwgdGhhdAotICAgICAgICAgICAgLy8gaXMgcHJldHR5IG1lc3NlZCB1cCwgc28gaW5zdGVhZCBpbW1lZGlhdGVseSBzZW5kIGJhY2sgYSBjYW5jZWwKLSAgICAgICAgICAgIC8vIGFuZCBsZXQgdGhlIG5ldyB0YXNrIGNvbnRpbnVlIGxhdW5jaGVkIGFzIG5vcm1hbCB3aXRob3V0IGEKLSAgICAgICAgICAgIC8vIGRlcGVuZGVuY3kgb24gaXRzIG9yaWdpbmF0b3IuCi0gICAgICAgICAgICBTbG9nLncoVEFHLCAiQWN0aXZpdHkgaXMgbGF1bmNoaW5nIGFzIGEgbmV3IHRhc2ssIHNvIGNhbmNlbGxpbmcgYWN0aXZpdHkgcmVzdWx0LiIpOwotICAgICAgICAgICAgci5yZXN1bHRUby50YXNrLnN0YWNrLnNlbmRBY3Rpdml0eVJlc3VsdExvY2tlZCgtMSwKLSAgICAgICAgICAgICAgICAgICAgci5yZXN1bHRUbywgci5yZXN1bHRXaG8sIHIucmVxdWVzdENvZGUsCi0gICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5LlJFU1VMVF9DQU5DRUxFRCwgbnVsbCk7Ci0gICAgICAgICAgICByLnJlc3VsdFRvID0gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgobGF1bmNoRmxhZ3MgJiBJbnRlbnQuRkxBR19BQ1RJVklUWV9ORVdfRE9DVU1FTlQpICE9IDAgJiYgci5yZXN1bHRUbyA9PSBudWxsKSB7Ci0gICAgICAgICAgICBsYXVuY2hGbGFncyB8PSBGTEFHX0FDVElWSVRZX05FV19UQVNLOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgd2UgYXJlIGFjdHVhbGx5IGdvaW5nIHRvIGxhdW5jaCBpbiB0byBhIG5ldyB0YXNrLCB0aGVyZSBhcmUgc29tZSBjYXNlcyB3aGVyZQotICAgICAgICAvLyB3ZSBmdXJ0aGVyIHdhbnQgdG8gZG8gbXVsdGlwbGUgdGFzay4KLSAgICAgICAgaWYgKChsYXVuY2hGbGFncyAmIEZMQUdfQUNUSVZJVFlfTkVXX1RBU0spICE9IDApIHsKLSAgICAgICAgICAgIGlmIChsYXVuY2hUYXNrQmVoaW5kCi0gICAgICAgICAgICAgICAgICAgIHx8IHIuaW5mby5kb2N1bWVudExhdW5jaE1vZGUgPT0gQWN0aXZpdHlJbmZvLkRPQ1VNRU5UX0xBVU5DSF9BTFdBWVMpIHsKLSAgICAgICAgICAgICAgICBsYXVuY2hGbGFncyB8PSBGTEFHX0FDVElWSVRZX01VTFRJUExFX1RBU0s7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBXZSdsbCBpbnZva2Ugb25Vc2VyTGVhdmluZyBiZWZvcmUgb25QYXVzZSBvbmx5IGlmIHRoZSBsYXVuY2hpbmcKLSAgICAgICAgLy8gYWN0aXZpdHkgZGlkIG5vdCBleHBsaWNpdGx5IHN0YXRlIHRoYXQgdGhpcyBpcyBhbiBhdXRvbWF0ZWQgbGF1bmNoLgotICAgICAgICBtVXNlckxlYXZpbmcgPSAobGF1bmNoRmxhZ3MgJiBJbnRlbnQuRkxBR19BQ1RJVklUWV9OT19VU0VSX0FDVElPTikgPT0gMDsKLSAgICAgICAgaWYgKERFQlVHX1VTRVJfTEVBVklORykgU2xvZy52KFRBR19VU0VSX0xFQVZJTkcsCi0gICAgICAgICAgICAgICAgInN0YXJ0QWN0aXZpdHkoKSA9PiBtVXNlckxlYXZpbmc9IiArIG1Vc2VyTGVhdmluZyk7Ci0KLSAgICAgICAgLy8gSWYgdGhlIGNhbGxlciBoYXMgYXNrZWQgbm90IHRvIHJlc3VtZSBhdCB0aGlzIHBvaW50LCB3ZSBtYWtlIG5vdGUKLSAgICAgICAgLy8gb2YgdGhpcyBpbiB0aGUgcmVjb3JkIHNvIHRoYXQgd2UgY2FuIHNraXAgaXQgd2hlbiB0cnlpbmcgdG8gZmluZAotICAgICAgICAvLyB0aGUgdG9wIHJ1bm5pbmcgYWN0aXZpdHkuCi0gICAgICAgIGlmICghZG9SZXN1bWUgfHwgIW9rVG9TaG93TG9ja2VkKHIpKSB7Ci0gICAgICAgICAgICByLmRlbGF5ZWRSZXN1bWUgPSB0cnVlOwotICAgICAgICAgICAgZG9SZXN1bWUgPSBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIEFjdGl2aXR5UmVjb3JkIG5vdFRvcCA9Ci0gICAgICAgICAgICAgICAgKGxhdW5jaEZsYWdzICYgSW50ZW50LkZMQUdfQUNUSVZJVFlfUFJFVklPVVNfSVNfVE9QKSAhPSAwID8gciA6IG51bGw7Ci0KLSAgICAgICAgLy8gSWYgdGhlIG9ubHlJZk5lZWRlZCBmbGFnIGlzIHNldCwgdGhlbiB3ZSBjYW4gZG8gdGhpcyBpZiB0aGUgYWN0aXZpdHkKLSAgICAgICAgLy8gYmVpbmcgbGF1bmNoZWQgaXMgdGhlIHNhbWUgYXMgdGhlIG9uZSBtYWtpbmcgdGhlIGNhbGwuLi4gIG9yLCBhcwotICAgICAgICAvLyBhIHNwZWNpYWwgY2FzZSwgaWYgd2UgZG8gbm90IGtub3cgdGhlIGNhbGxlciB0aGVuIHdlIGNvdW50IHRoZQotICAgICAgICAvLyBjdXJyZW50IHRvcCBhY3Rpdml0eSBhcyB0aGUgY2FsbGVyLgotICAgICAgICBpZiAoKHN0YXJ0RmxhZ3MmQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX0ZMQUdfT05MWV9JRl9ORUVERUQpICE9IDApIHsKLSAgICAgICAgICAgIEFjdGl2aXR5UmVjb3JkIGNoZWNrZWRDYWxsZXIgPSBzb3VyY2VSZWNvcmQ7Ci0gICAgICAgICAgICBpZiAoY2hlY2tlZENhbGxlciA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgY2hlY2tlZENhbGxlciA9IG1Gb2N1c2VkU3RhY2sudG9wUnVubmluZ05vbkRlbGF5ZWRBY3Rpdml0eUxvY2tlZChub3RUb3ApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFjaGVja2VkQ2FsbGVyLnJlYWxBY3Rpdml0eS5lcXVhbHMoci5yZWFsQWN0aXZpdHkpKSB7Ci0gICAgICAgICAgICAgICAgLy8gQ2FsbGVyIGlzIG5vdCB0aGUgc2FtZSBhcyBsYXVuY2hlciwgc28gYWx3YXlzIG5lZWRlZC4KLSAgICAgICAgICAgICAgICBzdGFydEZsYWdzICY9IH5BY3Rpdml0eU1hbmFnZXIuU1RBUlRfRkxBR19PTkxZX0lGX05FRURFRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGJvb2xlYW4gYWRkaW5nVG9UYXNrID0gZmFsc2U7Ci0gICAgICAgIFRhc2tSZWNvcmQgcmV1c2VUYXNrID0gbnVsbDsKLQotICAgICAgICAvLyBJZiB0aGUgY2FsbGVyIGlzIG5vdCBjb21pbmcgZnJvbSBhbm90aGVyIGFjdGl2aXR5LCBidXQgaGFzIGdpdmVuIHVzIGFuCi0gICAgICAgIC8vIGV4cGxpY2l0IHRhc2sgaW50byB3aGljaCB0aGV5IHdvdWxkIGxpa2UgdXMgdG8gbGF1bmNoIHRoZSBuZXcgYWN0aXZpdHksCi0gICAgICAgIC8vIHRoZW4gbGV0J3Mgc2VlIGFib3V0IGRvaW5nIHRoYXQuCi0gICAgICAgIGlmIChzb3VyY2VSZWNvcmQgPT0gbnVsbCAmJiBpblRhc2sgIT0gbnVsbCAmJiBpblRhc2suc3RhY2sgIT0gbnVsbCkgewotICAgICAgICAgICAgZmluYWwgSW50ZW50IGJhc2VJbnRlbnQgPSBpblRhc2suZ2V0QmFzZUludGVudCgpOwotICAgICAgICAgICAgZmluYWwgQWN0aXZpdHlSZWNvcmQgcm9vdCA9IGluVGFzay5nZXRSb290QWN0aXZpdHkoKTsKLSAgICAgICAgICAgIGlmIChiYXNlSW50ZW50ID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBBY3Rpdml0eU9wdGlvbnMuYWJvcnQob3B0aW9ucyk7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiTGF1bmNoaW5nIGludG8gdGFzayB3aXRob3V0IGJhc2UgaW50ZW50OiAiCi0gICAgICAgICAgICAgICAgICAgICAgICArIGluVGFzayk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIElmIHRoaXMgdGFzayBpcyBlbXB0eSwgdGhlbiB3ZSBhcmUgYWRkaW5nIHRoZSBmaXJzdCBhY3Rpdml0eSAtLSBpdAotICAgICAgICAgICAgLy8gZGV0ZXJtaW5lcyB0aGUgcm9vdCwgYW5kIG11c3QgYmUgbGF1bmNoaW5nIGFzIGEgTkVXX1RBU0suCi0gICAgICAgICAgICBpZiAobGF1bmNoU2luZ2xlSW5zdGFuY2UgfHwgbGF1bmNoU2luZ2xlVGFzaykgewotICAgICAgICAgICAgICAgIGlmICghYmFzZUludGVudC5nZXRDb21wb25lbnQoKS5lcXVhbHMoci5pbnRlbnQuZ2V0Q29tcG9uZW50KCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5T3B0aW9ucy5hYm9ydChvcHRpb25zKTsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVHJ5aW5nIHRvIGxhdW5jaCBzaW5nbGVJbnN0YW5jZS9UYXNrICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHIgKyAiIGludG8gZGlmZmVyZW50IHRhc2sgIiArIGluVGFzayk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChyb290ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlPcHRpb25zLmFib3J0KG9wdGlvbnMpOwotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJDYWxsZXIgd2l0aCBpblRhc2sgIiArIGluVGFzawotICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBoYXMgcm9vdCAiICsgcm9vdCArICIgYnV0IHRhcmdldCBpcyBzaW5nbGVJbnN0YW5jZS9UYXNrIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBJZiB0YXNrIGlzIGVtcHR5LCB0aGVuIGFkb3B0IHRoZSBpbnRlcmVzdGluZyBpbnRlbnQgbGF1bmNoIGZsYWdzIGluIHRvIHRoZQotICAgICAgICAgICAgLy8gYWN0aXZpdHkgYmVpbmcgc3RhcnRlZC4KLSAgICAgICAgICAgIGlmIChyb290ID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBmaW5hbCBpbnQgZmxhZ3NPZkludGVyZXN0ID0gRkxBR19BQ1RJVklUWV9ORVdfVEFTSwotICAgICAgICAgICAgICAgICAgICAgICAgfCBGTEFHX0FDVElWSVRZX01VTFRJUExFX1RBU0sgfCBJbnRlbnQuRkxBR19BQ1RJVklUWV9ORVdfRE9DVU1FTlQKLSAgICAgICAgICAgICAgICAgICAgICAgIHwgSW50ZW50LkZMQUdfQUNUSVZJVFlfUkVUQUlOX0lOX1JFQ0VOVFM7Ci0gICAgICAgICAgICAgICAgbGF1bmNoRmxhZ3MgPSAobGF1bmNoRmxhZ3MmfmZsYWdzT2ZJbnRlcmVzdCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHwgKGJhc2VJbnRlbnQuZ2V0RmxhZ3MoKSZmbGFnc09mSW50ZXJlc3QpOwotICAgICAgICAgICAgICAgIGludGVudC5zZXRGbGFncyhsYXVuY2hGbGFncyk7Ci0gICAgICAgICAgICAgICAgaW5UYXNrLnNldEludGVudChyKTsKLSAgICAgICAgICAgICAgICBhZGRpbmdUb1Rhc2sgPSB0cnVlOwotCi0gICAgICAgICAgICAvLyBJZiB0aGUgdGFzayBpcyBub3QgZW1wdHkgYW5kIHRoZSBjYWxsZXIgaXMgYXNraW5nIHRvIHN0YXJ0IGl0IGFzIHRoZSByb290Ci0gICAgICAgICAgICAvLyBvZiBhIG5ldyB0YXNrLCB0aGVuIHdlIGRvbid0IGFjdHVhbGx5IHdhbnQgdG8gc3RhcnQgdGhpcyBvbiB0aGUgdGFzay4gIFdlCi0gICAgICAgICAgICAvLyB3aWxsIGJyaW5nIHRoZSB0YXNrIHRvIHRoZSBmcm9udCwgYW5kIHBvc3NpYmx5IGdpdmUgaXQgYSBuZXcgaW50ZW50LgotICAgICAgICAgICAgfSBlbHNlIGlmICgobGF1bmNoRmxhZ3MgJiBGTEFHX0FDVElWSVRZX05FV19UQVNLKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgYWRkaW5nVG9UYXNrID0gZmFsc2U7Ci0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgYWRkaW5nVG9UYXNrID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV1c2VUYXNrID0gaW5UYXNrOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaW5UYXNrID0gbnVsbDsKLSAgICAgICAgICAgIC8vIExhdW5jaCBSZXNvbHZlckFjdGl2aXR5IGluIHRoZSBzb3VyY2UgdGFzaywgc28gdGhhdCBpdCBzdGF5cyBpbiB0aGUgdGFzawotICAgICAgICAgICAgLy8gYm91bmRzIHdoZW4gaW4gZnJlZWZvcm0gd29ya3NwYWNlLgotICAgICAgICAgICAgLy8gQWxzbyBwdXQgbm9EaXNwbGF5IGFjdGl2aXRpZXMgaW4gdGhlIHNvdXJjZSB0YXNrLiBUaGVzZSBieSBpdHNlbGYgY2FuCi0gICAgICAgICAgICAvLyBiZSBwbGFjZWQgaW4gYW55IHRhc2svc3RhY2ssIGhvd2V2ZXIgaXQgY291bGQgbGF1bmNoIG90aGVyIGFjdGl2aXRpZXMKLSAgICAgICAgICAgIC8vIGxpa2UgUmVzb2x2ZXJBY3Rpdml0eSwgYW5kIHdlIHdhbnQgdGhvc2UgdG8gc3RheSBpbiB0aGUgb3JpZ2luYWwgdGFzay4KLSAgICAgICAgICAgIGlmICgoci5pc1Jlc29sdmVyQWN0aXZpdHkoKSB8fCByLm5vRGlzcGxheSkgJiYgc291cmNlUmVjb3JkICE9IG51bGwKLSAgICAgICAgICAgICAgICAgICAgJiYgc291cmNlUmVjb3JkLmlzRnJlZWZvcm0oKSkgIHsKLSAgICAgICAgICAgICAgICBhZGRpbmdUb1Rhc2sgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGluVGFzayA9PSBudWxsKSB7Ci0gICAgICAgICAgICBpZiAoc291cmNlUmVjb3JkID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGlzIGFjdGl2aXR5IGlzIG5vdCBiZWluZyBzdGFydGVkIGZyb20gYW5vdGhlci4uLiAgaW4gdGhpcwotICAgICAgICAgICAgICAgIC8vIGNhc2Ugd2UgLWFsd2F5cy0gc3RhcnQgYSBuZXcgdGFzay4KLSAgICAgICAgICAgICAgICBpZiAoKGxhdW5jaEZsYWdzICYgRkxBR19BQ1RJVklUWV9ORVdfVEFTSykgPT0gMCAmJiBpblRhc2sgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBTbG9nLncoVEFHLCAic3RhcnRBY3Rpdml0eSBjYWxsZWQgZnJvbSBub24tQWN0aXZpdHkgY29udGV4dDsgZm9yY2luZyAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW50ZW50LkZMQUdfQUNUSVZJVFlfTkVXX1RBU0sgZm9yOiAiICsgaW50ZW50KTsKLSAgICAgICAgICAgICAgICAgICAgbGF1bmNoRmxhZ3MgfD0gRkxBR19BQ1RJVklUWV9ORVdfVEFTSzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHNvdXJjZVJlY29yZC5sYXVuY2hNb2RlID09IEFjdGl2aXR5SW5mby5MQVVOQ0hfU0lOR0xFX0lOU1RBTkNFKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhlIG9yaWdpbmFsIGFjdGl2aXR5IHdobyBpcyBzdGFydGluZyB1cyBpcyBydW5uaW5nIGFzIGEgc2luZ2xlCi0gICAgICAgICAgICAgICAgLy8gaW5zdGFuY2UuLi4gIHRoaXMgbmV3IGFjdGl2aXR5IGl0IGlzIHN0YXJ0aW5nIG11c3QgZ28gb24gaXRzCi0gICAgICAgICAgICAgICAgLy8gb3duIHRhc2suCi0gICAgICAgICAgICAgICAgbGF1bmNoRmxhZ3MgfD0gRkxBR19BQ1RJVklUWV9ORVdfVEFTSzsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobGF1bmNoU2luZ2xlSW5zdGFuY2UgfHwgbGF1bmNoU2luZ2xlVGFzaykgewotICAgICAgICAgICAgICAgIC8vIFRoZSBhY3Rpdml0eSBiZWluZyBzdGFydGVkIGlzIGEgc2luZ2xlIGluc3RhbmNlLi4uICBpdCBhbHdheXMKLSAgICAgICAgICAgICAgICAvLyBnZXRzIGxhdW5jaGVkIGludG8gaXRzIG93biB0YXNrLgotICAgICAgICAgICAgICAgIGxhdW5jaEZsYWdzIHw9IEZMQUdfQUNUSVZJVFlfTkVXX1RBU0s7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBBY3Rpdml0eUluZm8gbmV3VGFza0luZm8gPSBudWxsOwotICAgICAgICBJbnRlbnQgbmV3VGFza0ludGVudCA9IG51bGw7Ci0gICAgICAgIGZpbmFsIEFjdGl2aXR5U3RhY2sgc291cmNlU3RhY2s7Ci0gICAgICAgIGlmIChzb3VyY2VSZWNvcmQgIT0gbnVsbCkgewotICAgICAgICAgICAgaWYgKHNvdXJjZVJlY29yZC5maW5pc2hpbmcpIHsKLSAgICAgICAgICAgICAgICAvLyBJZiB0aGUgc291cmNlIGlzIGZpbmlzaGluZywgd2UgY2FuJ3QgZnVydGhlciBjb3VudCBpdCBhcyBvdXIgc291cmNlLiAgVGhpcwotICAgICAgICAgICAgICAgIC8vIGlzIGJlY2F1c2UgdGhlIHRhc2sgaXQgaXMgYXNzb2NpYXRlZCB3aXRoIG1heSBub3cgYmUgZW1wdHkgYW5kIG9uIGl0cyB3YXkgb3V0LAotICAgICAgICAgICAgICAgIC8vIHNvIHdlIGRvbid0IHdhbnQgdG8gYmxpbmRseSB0aHJvdyBpdCBpbiB0byB0aGF0IHRhc2suICBJbnN0ZWFkIHdlIHdpbGwgdGFrZQotICAgICAgICAgICAgICAgIC8vIHRoZSBORVdfVEFTSyBmbG93IGFuZCB0cnkgdG8gZmluZCBhIHRhc2sgZm9yIGl0LiBCdXQgc2F2ZSB0aGUgdGFzayBpbmZvcm1hdGlvbgotICAgICAgICAgICAgICAgIC8vIHNvIGl0IGNhbiBiZSB1c2VkIHdoZW4gY3JlYXRpbmcgdGhlIG5ldyB0YXNrLgotICAgICAgICAgICAgICAgIGlmICgobGF1bmNoRmxhZ3MgJiBGTEFHX0FDVElWSVRZX05FV19UQVNLKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIFNsb2cudyhUQUcsICJzdGFydEFjdGl2aXR5IGNhbGxlZCBmcm9tIGZpbmlzaGluZyAiICsgc291cmNlUmVjb3JkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiOyBmb3JjaW5nICIgKyAiSW50ZW50LkZMQUdfQUNUSVZJVFlfTkVXX1RBU0sgZm9yOiAiICsgaW50ZW50KTsKLSAgICAgICAgICAgICAgICAgICAgbGF1bmNoRmxhZ3MgfD0gRkxBR19BQ1RJVklUWV9ORVdfVEFTSzsKLSAgICAgICAgICAgICAgICAgICAgbmV3VGFza0luZm8gPSBzb3VyY2VSZWNvcmQuaW5mbzsKLSAgICAgICAgICAgICAgICAgICAgbmV3VGFza0ludGVudCA9IHNvdXJjZVJlY29yZC50YXNrLmludGVudDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc291cmNlUmVjb3JkID0gbnVsbDsKLSAgICAgICAgICAgICAgICBzb3VyY2VTdGFjayA9IG51bGw7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHNvdXJjZVN0YWNrID0gc291cmNlUmVjb3JkLnRhc2suc3RhY2s7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzb3VyY2VTdGFjayA9IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sZWFuIG1vdmVkSG9tZSA9IGZhbHNlOwotICAgICAgICBBY3Rpdml0eVN0YWNrIHRhcmdldFN0YWNrOwotCi0gICAgICAgIGludGVudC5zZXRGbGFncyhsYXVuY2hGbGFncyk7Ci0gICAgICAgIGZpbmFsIGJvb2xlYW4gbm9BbmltYXRpb24gPSAobGF1bmNoRmxhZ3MgJiBJbnRlbnQuRkxBR19BQ1RJVklUWV9OT19BTklNQVRJT04pICE9IDA7Ci0KLSAgICAgICAgQWN0aXZpdHlSZWNvcmQgaW50ZW50QWN0aXZpdHkgPSBnZXRSZXVzYWJsZUludGVudEFjdGl2aXR5KHIsIGluVGFzaywgaW50ZW50LAotICAgICAgICAgICAgICAgIGxhdW5jaFNpbmdsZUluc3RhbmNlLCBsYXVuY2hTaW5nbGVUYXNrLCBsYXVuY2hGbGFncyk7Ci0gICAgICAgIGlmIChpbnRlbnRBY3Rpdml0eSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAvLyBXaGVuIHRoZSBmbGFncyBORVdfVEFTSyBhbmQgQ0xFQVJfVEFTSyBhcmUgc2V0LCB0aGVuIHRoZSB0YXNrIGdldHMgcmV1c2VkCi0gICAgICAgICAgICAvLyBidXQgc3RpbGwgbmVlZHMgdG8gYmUgYSBsb2NrIHRhc2sgbW9kZSB2aW9sYXRpb24gc2luY2UgdGhlIHRhc2sgZ2V0cwotICAgICAgICAgICAgLy8gY2xlYXJlZCBvdXQgYW5kIHRoZSBkZXZpY2Ugd291bGQgb3RoZXJ3aXNlIGxlYXZlIHRoZSBsb2NrZWQgdGFzay4KLSAgICAgICAgICAgIGlmIChpc0xvY2tUYXNrTW9kZVZpb2xhdGlvbihpbnRlbnRBY3Rpdml0eS50YXNrLAotICAgICAgICAgICAgICAgICAgICAobGF1bmNoRmxhZ3MgJiAoRkxBR19BQ1RJVklUWV9ORVdfVEFTSyB8IEZMQUdfQUNUSVZJVFlfQ0xFQVJfVEFTSykpCi0gICAgICAgICAgICAgICAgICAgID09IChGTEFHX0FDVElWSVRZX05FV19UQVNLIHwgRkxBR19BQ1RJVklUWV9DTEVBUl9UQVNLKSkpIHsKLSAgICAgICAgICAgICAgICBzaG93TG9ja1Rhc2tUb2FzdCgpOwotICAgICAgICAgICAgICAgIFNsb2cuZShUQUcsICJzdGFydEFjdGl2aXR5VW5jaGVja2VkOiBBdHRlbXB0IHRvIHZpb2xhdGUgTG9jayBUYXNrIE1vZGUiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX1JFVFVSTl9MT0NLX1RBU0tfTU9ERV9WSU9MQVRJT047Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoci50YXNrID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICByLnRhc2sgPSBpbnRlbnRBY3Rpdml0eS50YXNrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGludGVudEFjdGl2aXR5LnRhc2suaW50ZW50ID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGlzIHRhc2sgd2FzIHN0YXJ0ZWQgYmVjYXVzZSBvZiBtb3ZlbWVudCBvZiB0aGUgYWN0aXZpdHkgYmFzZWQgb24gYWZmaW5pdHkuLi4KLSAgICAgICAgICAgICAgICAvLyBOb3cgdGhhdCB3ZSBhcmUgYWN0dWFsbHkgbGF1bmNoaW5nIGl0LCB3ZSBjYW4gYXNzaWduIHRoZSBiYXNlIGludGVudC4KLSAgICAgICAgICAgICAgICBpbnRlbnRBY3Rpdml0eS50YXNrLnNldEludGVudChyKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdGFyZ2V0U3RhY2sgPSBpbnRlbnRBY3Rpdml0eS50YXNrLnN0YWNrOwotICAgICAgICAgICAgdGFyZ2V0U3RhY2subUxhc3RQYXVzZWRBY3Rpdml0eSA9IG51bGw7Ci0gICAgICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IHRhc2sgaXMgbm90IGluIHRoZSBmcm9udCwgdGhlbiB3ZSBuZWVkCi0gICAgICAgICAgICAvLyB0byBicmluZyBpdCB0byB0aGUgZnJvbnQuLi4gIGV4Y2VwdC4uLiAgd2VsbCwgd2l0aAotICAgICAgICAgICAgLy8gU0lOR0xFX1RBU0tfTEFVTkNIIGl0J3Mgbm90IGVudGlyZWx5IGNsZWFyLiAgV2UnZCBsaWtlCi0gICAgICAgICAgICAvLyB0byBoYXZlIHRoZSBzYW1lIGJlaGF2aW9yIGFzIGlmIGEgbmV3IGluc3RhbmNlIHdhcwotICAgICAgICAgICAgLy8gYmVpbmcgc3RhcnRlZCwgd2hpY2ggbWVhbnMgbm90IGJyaW5naW5nIGl0IHRvIHRoZSBmcm9udAotICAgICAgICAgICAgLy8gaWYgdGhlIGNhbGxlciBpcyBub3QgaXRzZWxmIGluIHRoZSBmcm9udC4KLSAgICAgICAgICAgIGZpbmFsIEFjdGl2aXR5U3RhY2sgZm9jdXNTdGFjayA9IGdldEZvY3VzZWRTdGFjaygpOwotICAgICAgICAgICAgQWN0aXZpdHlSZWNvcmQgY3VyVG9wID0gKGZvY3VzU3RhY2sgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgPyBudWxsIDogZm9jdXNTdGFjay50b3BSdW5uaW5nTm9uRGVsYXllZEFjdGl2aXR5TG9ja2VkKG5vdFRvcCk7Ci0gICAgICAgICAgICBib29sZWFuIG1vdmVkVG9Gcm9udCA9IGZhbHNlOwotICAgICAgICAgICAgaWYgKGN1clRvcCAhPSBudWxsICYmIChjdXJUb3AudGFzayAhPSBpbnRlbnRBY3Rpdml0eS50YXNrIHx8Ci0gICAgICAgICAgICAgICAgICAgIGN1clRvcC50YXNrICE9IGZvY3VzU3RhY2sudG9wVGFzaygpKSkgewotICAgICAgICAgICAgICAgIHIuaW50ZW50LmFkZEZsYWdzKEludGVudC5GTEFHX0FDVElWSVRZX0JST1VHSFRfVE9fRlJPTlQpOwotICAgICAgICAgICAgICAgIGlmIChzb3VyY2VSZWNvcmQgPT0gbnVsbCB8fCAoc291cmNlU3RhY2sudG9wQWN0aXZpdHkoKSAhPSBudWxsICYmCi0gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VTdGFjay50b3BBY3Rpdml0eSgpLnRhc2sgPT0gc291cmNlUmVjb3JkLnRhc2spKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFdlIHJlYWxseSBkbyB3YW50IHRvIHB1c2ggdGhpcyBvbmUgaW50byB0aGUgdXNlcidzIGZhY2UsIHJpZ2h0IG5vdy4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGxhdW5jaFRhc2tCZWhpbmQgJiYgc291cmNlUmVjb3JkICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludGVudEFjdGl2aXR5LnNldFRhc2tUb0FmZmlsaWF0ZVdpdGgoc291cmNlUmVjb3JkLnRhc2spOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIG1vdmVkSG9tZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGZpbmFsIEFjdGl2aXR5U3RhY2sgc2lkZVN0YWNrID0gZ2V0TGF1bmNoVG9TaWRlU3RhY2sociwgbGF1bmNoRmxhZ3MsIHIudGFzayk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzaWRlU3RhY2sgPT0gbnVsbCB8fCBzaWRlU3RhY2sgPT0gdGFyZ2V0U3RhY2spIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkgd2FudCB0byBtb3ZlIHRvIHRoZSBmcm9udCwgaWYgd2UgYXJlbid0IGdvaW5nIHRvIGxhdW5jaCBvbiBhCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBkaWZmZXJlbnQgc3RhY2suIElmIHdlIGxhdW5jaCBvbiBhIGRpZmZlcmVudCBzdGFjaywgd2Ugd2lsbCBwdXQgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyB0YXNrIG9uIHRvcCB0aGVyZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFN0YWNrLm1vdmVUYXNrVG9Gcm9udExvY2tlZChpbnRlbnRBY3Rpdml0eS50YXNrLCBub0FuaW1hdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMsIHIuYXBwVGltZVRyYWNrZXIsICJicmluZ2luZ0ZvdW5kVGFza1RvRnJvbnQiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVkVG9Gcm9udCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKChsYXVuY2hGbGFncyAmIChGTEFHX0FDVElWSVRZX05FV19UQVNLIHwgRkxBR19BQ1RJVklUWV9UQVNLX09OX0hPTUUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IChGTEFHX0FDVElWSVRZX05FV19UQVNLIHwgRkxBR19BQ1RJVklUWV9UQVNLX09OX0hPTUUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWxsZXIgd2FudHMgdG8gYXBwZWFyIG9uIGhvbWUgYWN0aXZpdHkuCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnRlbnRBY3Rpdml0eS50YXNrLnNldFRhc2tUb1JldHVyblRvKEhPTUVfQUNUSVZJVFlfVFlQRSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IG51bGw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFtb3ZlZFRvRnJvbnQgJiYgZG9SZXN1bWUpIHsKLSAgICAgICAgICAgICAgICBpZiAoREVCVUdfVEFTS1MpIFNsb2cuZChUQUdfVEFTS1MsICJCcmluZyB0byBmcm9udCB0YXJnZXQ6ICIgKyB0YXJnZXRTdGFjawotICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGZyb20gIiArIGludGVudEFjdGl2aXR5KTsKLSAgICAgICAgICAgICAgICB0YXJnZXRTdGFjay5tb3ZlVG9Gcm9udCgiaW50ZW50QWN0aXZpdHlGb3VuZCIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBJZiB0aGUgY2FsbGVyIGhhcyByZXF1ZXN0ZWQgdGhhdCB0aGUgdGFyZ2V0IHRhc2sgYmUKLSAgICAgICAgICAgIC8vIHJlc2V0LCB0aGVuIGRvIHNvLgotICAgICAgICAgICAgaWYgKChsYXVuY2hGbGFncyAmIEludGVudC5GTEFHX0FDVElWSVRZX1JFU0VUX1RBU0tfSUZfTkVFREVEKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgaW50ZW50QWN0aXZpdHkgPSB0YXJnZXRTdGFjay5yZXNldFRhc2tJZk5lZWRlZExvY2tlZChpbnRlbnRBY3Rpdml0eSwgcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKHN0YXJ0RmxhZ3MgJiBBY3Rpdml0eU1hbmFnZXIuU1RBUlRfRkxBR19PTkxZX0lGX05FRURFRCkgIT0gMCkgewotICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gc3RhcnQgYSBuZXcgYWN0aXZpdHksIGFuZAotICAgICAgICAgICAgICAgIC8vIHRoZSBjbGllbnQgc2FpZCBub3QgdG8gZG8gYW55dGhpbmcgaWYgdGhhdAotICAgICAgICAgICAgICAgIC8vIGlzIHRoZSBjYXNlLCBzbyB0aGlzIGlzIGl0ISAgQW5kIGZvciBwYXJhbm9pYSwgbWFrZQotICAgICAgICAgICAgICAgIC8vIHN1cmUgd2UgaGF2ZSBjb3JyZWN0bHkgcmVzdW1lZCB0aGUgdG9wIGFjdGl2aXR5LgotICAgICAgICAgICAgICAgIGlmIChkb1Jlc3VtZSkgewotICAgICAgICAgICAgICAgICAgICByZXN1bWVUb3BBY3Rpdml0aWVzTG9ja2VkKHRhcmdldFN0YWNrLCBudWxsLCBvcHRpb25zKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdG8gbm90aWZ5IEtleWd1YXJkIGFzIHdlbGwgaWYgd2UgYXJlIG5vdCBydW5uaW5nIGFuIGFwcAotICAgICAgICAgICAgICAgICAgICAvLyB0cmFuc2l0aW9uIGxhdGVyLgotICAgICAgICAgICAgICAgICAgICBpZiAoIW1vdmVkVG9Gcm9udCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZ5QWN0aXZpdHlEcmF3bkZvcktleWd1YXJkKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eU9wdGlvbnMuYWJvcnQob3B0aW9ucyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHVwZGF0ZVVzZXJTdGFja0xvY2tlZChyLnVzZXJJZCwgdGFyZ2V0U3RhY2spOwotICAgICAgICAgICAgICAgIHJldHVybiBBY3Rpdml0eU1hbmFnZXIuU1RBUlRfUkVUVVJOX0lOVEVOVF9UT19DQUxMRVI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKGxhdW5jaEZsYWdzICYgKEZMQUdfQUNUSVZJVFlfTkVXX1RBU0sgfCBGTEFHX0FDVElWSVRZX0NMRUFSX1RBU0spKQotICAgICAgICAgICAgICAgICAgICA9PSAoRkxBR19BQ1RJVklUWV9ORVdfVEFTSyB8IEZMQUdfQUNUSVZJVFlfQ0xFQVJfVEFTSykpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGUgY2FsbGVyIGhhcyByZXF1ZXN0ZWQgdG8gY29tcGxldGVseSByZXBsYWNlIGFueQotICAgICAgICAgICAgICAgIC8vIGV4aXN0aW5nIHRhc2sgd2l0aCBpdHMgbmV3IGFjdGl2aXR5LiAgV2VsbCB0aGF0IHNob3VsZAotICAgICAgICAgICAgICAgIC8vIG5vdCBiZSB0b28gaGFyZC4uLgotICAgICAgICAgICAgICAgIHJldXNlVGFzayA9IGludGVudEFjdGl2aXR5LnRhc2s7Ci0gICAgICAgICAgICAgICAgcmV1c2VUYXNrLnBlcmZvcm1DbGVhclRhc2tMb2NrZWQoKTsKLSAgICAgICAgICAgICAgICByZXVzZVRhc2suc2V0SW50ZW50KHIpOwotICAgICAgICAgICAgfSBlbHNlIGlmICgobGF1bmNoRmxhZ3MgJiBGTEFHX0FDVElWSVRZX0NMRUFSX1RPUCkgIT0gMAotICAgICAgICAgICAgICAgICAgICB8fCBsYXVuY2hTaW5nbGVJbnN0YW5jZSB8fCBsYXVuY2hTaW5nbGVUYXNrKSB7Ci0gICAgICAgICAgICAgICAgLy8gSW4gdGhpcyBzaXR1YXRpb24gd2Ugd2FudCB0byByZW1vdmUgYWxsIGFjdGl2aXRpZXMKLSAgICAgICAgICAgICAgICAvLyBmcm9tIHRoZSB0YXNrIHVwIHRvIHRoZSBvbmUgYmVpbmcgc3RhcnRlZC4gIEluIG1vc3QKLSAgICAgICAgICAgICAgICAvLyBjYXNlcyB0aGlzIG1lYW5zIHdlIGFyZSByZXNldHRpbmcgdGhlIHRhc2sgdG8gaXRzCi0gICAgICAgICAgICAgICAgLy8gaW5pdGlhbCBzdGF0ZS4KLSAgICAgICAgICAgICAgICBBY3Rpdml0eVJlY29yZCB0b3AgPSBpbnRlbnRBY3Rpdml0eS50YXNrLnBlcmZvcm1DbGVhclRhc2tMb2NrZWQociwgbGF1bmNoRmxhZ3MpOwotICAgICAgICAgICAgICAgIGlmICh0b3AgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBpZiAodG9wLmZyb250T2ZUYXNrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBBY3Rpdml0eSBhbGlhc2VzIG1heSBtZWFuIHdlIHVzZSBkaWZmZXJlbnQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGludGVudHMgZm9yIHRoZSB0b3AgYWN0aXZpdHksIHNvIG1ha2Ugc3VyZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHRhc2sgbm93IGhhcyB0aGUgaWRlbnRpdHkgb2YgdGhlIG5ldwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW50ZW50LgotICAgICAgICAgICAgICAgICAgICAgICAgdG9wLnRhc2suc2V0SW50ZW50KHIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5U3RhY2subG9nU3RhcnRBY3Rpdml0eShFdmVudExvZ1RhZ3MuQU1fTkVXX0lOVEVOVCwgciwgdG9wLnRhc2spOwotICAgICAgICAgICAgICAgICAgICB0b3AuZGVsaXZlck5ld0ludGVudExvY2tlZChjYWxsaW5nVWlkLCByLmludGVudCwgci5sYXVuY2hlZEZyb21QYWNrYWdlKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBBIHNwZWNpYWwgY2FzZTogd2UgbmVlZCB0byBzdGFydCB0aGUgYWN0aXZpdHkgYmVjYXVzZSBpdCBpcyBub3QKLSAgICAgICAgICAgICAgICAgICAgLy8gY3VycmVudGx5IHJ1bm5pbmcsIGFuZCB0aGUgY2FsbGVyIGhhcyBhc2tlZCB0byBjbGVhciB0aGUgY3VycmVudAotICAgICAgICAgICAgICAgICAgICAvLyB0YXNrIHRvIGhhdmUgdGhpcyBhY3Rpdml0eSBhdCB0aGUgdG9wLgotICAgICAgICAgICAgICAgICAgICBhZGRpbmdUb1Rhc2sgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAvLyBOb3cgcHJldGVuZCBsaWtlIHRoaXMgYWN0aXZpdHkgaXMgYmVpbmcgc3RhcnRlZCBieSB0aGUgdG9wIG9mIGl0cwotICAgICAgICAgICAgICAgICAgICAvLyB0YXNrLCBzbyBpdCBpcyBwdXQgaW4gdGhlIHJpZ2h0IHBsYWNlLgotICAgICAgICAgICAgICAgICAgICBzb3VyY2VSZWNvcmQgPSBpbnRlbnRBY3Rpdml0eTsKLSAgICAgICAgICAgICAgICAgICAgVGFza1JlY29yZCB0YXNrID0gc291cmNlUmVjb3JkLnRhc2s7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0YXNrICE9IG51bGwgJiYgdGFzay5zdGFjayA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBUYXJnZXQgc3RhY2sgZ290IGNsZWFyZWQgd2hlbiB3ZSBhbGwgYWN0aXZpdGllcyB3ZXJlIHJlbW92ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFib3ZlLiBHbyBhaGVhZCBhbmQgcmVzZXQgaXQuCi0gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRTdGFjayA9IGNvbXB1dGVTdGFja0ZvY3VzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VSZWNvcmQsIGZhbHNlIC8qIG5ld1Rhc2sgKi8sIG51bGwgLyogYm91bmRzICovLCBsYXVuY2hGbGFncyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRTdGFjay5hZGRUYXNrKHRhc2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFsYXVuY2hUYXNrQmVoaW5kIC8qIHRvVG9wICovLCAic3RhcnRBY3Rpdml0eVVuY2hlY2tlZCIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHIucmVhbEFjdGl2aXR5LmVxdWFscyhpbnRlbnRBY3Rpdml0eS50YXNrLnJlYWxBY3Rpdml0eSkpIHsKLSAgICAgICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UgdGhlIHRvcCBhY3Rpdml0eSBvbiB0aGUgdGFzayBpcyB0aGUKLSAgICAgICAgICAgICAgICAvLyBzYW1lIGFzIHRoZSBvbmUgYmVpbmcgbGF1bmNoZWQsIHNvIHdlIHRha2UgdGhhdAotICAgICAgICAgICAgICAgIC8vIGFzIGEgcmVxdWVzdCB0byBicmluZyB0aGUgdGFzayB0byB0aGUgZm9yZWdyb3VuZC4KLSAgICAgICAgICAgICAgICAvLyBJZiB0aGUgdG9wIGFjdGl2aXR5IGluIHRoZSB0YXNrIGlzIHRoZSByb290Ci0gICAgICAgICAgICAgICAgLy8gYWN0aXZpdHksIGRlbGl2ZXIgdGhpcyBuZXcgaW50ZW50IHRvIGl0IGlmIGl0Ci0gICAgICAgICAgICAgICAgLy8gZGVzaXJlcy4KLSAgICAgICAgICAgICAgICBpZiAoKChsYXVuY2hGbGFncyZJbnRlbnQuRkxBR19BQ1RJVklUWV9TSU5HTEVfVE9QKSAhPSAwIHx8IGxhdW5jaFNpbmdsZVRvcCkKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIGludGVudEFjdGl2aXR5LnJlYWxBY3Rpdml0eS5lcXVhbHMoci5yZWFsQWN0aXZpdHkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5U3RhY2subG9nU3RhcnRBY3Rpdml0eShFdmVudExvZ1RhZ3MuQU1fTkVXX0lOVEVOVCwgciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlbnRBY3Rpdml0eS50YXNrKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGludGVudEFjdGl2aXR5LmZyb250T2ZUYXNrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnRlbnRBY3Rpdml0eS50YXNrLnNldEludGVudChyKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpbnRlbnRBY3Rpdml0eS5kZWxpdmVyTmV3SW50ZW50TG9ja2VkKGNhbGxpbmdVaWQsIHIuaW50ZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIubGF1bmNoZWRGcm9tUGFja2FnZSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghci5pbnRlbnQuZmlsdGVyRXF1YWxzKGludGVudEFjdGl2aXR5LnRhc2suaW50ZW50KSkgewotICAgICAgICAgICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2Ugd2UgYXJlIGxhdW5jaGluZyB0aGUgcm9vdCBhY3Rpdml0eQotICAgICAgICAgICAgICAgICAgICAvLyBvZiB0aGUgdGFzaywgYnV0IHdpdGggYSBkaWZmZXJlbnQgaW50ZW50LiAgV2UKLSAgICAgICAgICAgICAgICAgICAgLy8gc2hvdWxkIHN0YXJ0IGEgbmV3IGluc3RhbmNlIG9uIHRvcC4KLSAgICAgICAgICAgICAgICAgICAgYWRkaW5nVG9UYXNrID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgc291cmNlUmVjb3JkID0gaW50ZW50QWN0aXZpdHk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmICgobGF1bmNoRmxhZ3MmSW50ZW50LkZMQUdfQUNUSVZJVFlfUkVTRVRfVEFTS19JRl9ORUVERUQpID09IDApIHsKLSAgICAgICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UgYW4gYWN0aXZpdHkgaXMgYmVpbmcgbGF1bmNoZWQgaW4gdG8gYW4KLSAgICAgICAgICAgICAgICAvLyBleGlzdGluZyB0YXNrLCB3aXRob3V0IHJlc2V0dGluZyB0aGF0IHRhc2suICBUaGlzCi0gICAgICAgICAgICAgICAgLy8gaXMgdHlwaWNhbGx5IHRoZSBzaXR1YXRpb24gb2YgbGF1bmNoaW5nIGFuIGFjdGl2aXR5Ci0gICAgICAgICAgICAgICAgLy8gZnJvbSBhIG5vdGlmaWNhdGlvbiBvciBzaG9ydGN1dC4gIFdlIHdhbnQgdG8gcGxhY2UKLSAgICAgICAgICAgICAgICAvLyB0aGUgbmV3IGFjdGl2aXR5IG9uIHRvcCBvZiB0aGUgY3VycmVudCB0YXNrLgotICAgICAgICAgICAgICAgIGFkZGluZ1RvVGFzayA9IHRydWU7Ci0gICAgICAgICAgICAgICAgc291cmNlUmVjb3JkID0gaW50ZW50QWN0aXZpdHk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCFpbnRlbnRBY3Rpdml0eS50YXNrLnJvb3RXYXNSZXNldCkgewotICAgICAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBhcmUgbGF1bmNoaW5nIGluIHRvIGFuIGV4aXN0aW5nIHRhc2sKLSAgICAgICAgICAgICAgICAvLyB0aGF0IGhhcyBub3QgeWV0IGJlZW4gc3RhcnRlZCBmcm9tIGl0cyBmcm9udCBkb29yLgotICAgICAgICAgICAgICAgIC8vIFRoZSBjdXJyZW50IHRhc2sgaGFzIGJlZW4gYnJvdWdodCB0byB0aGUgZnJvbnQuCi0gICAgICAgICAgICAgICAgLy8gSWRlYWxseSwgd2UnZCBwcm9iYWJseSBsaWtlIHRvIHBsYWNlIHRoaXMgbmV3IHRhc2sKLSAgICAgICAgICAgICAgICAvLyBhdCB0aGUgYm90dG9tIG9mIGl0cyBzdGFjaywgYnV0IHRoYXQncyBhIGxpdHRsZSBoYXJkCi0gICAgICAgICAgICAgICAgLy8gdG8gZG8gd2l0aCB0aGUgY3VycmVudCBvcmdhbml6YXRpb24gb2YgdGhlIGNvZGUgc28KLSAgICAgICAgICAgICAgICAvLyBmb3Igbm93IHdlJ2xsIGp1c3QgZHJvcCBpdC4KLSAgICAgICAgICAgICAgICBpbnRlbnRBY3Rpdml0eS50YXNrLnNldEludGVudChyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghYWRkaW5nVG9UYXNrICYmIHJldXNlVGFzayA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UgZGlkbid0IGRvIGFueXRoaW5nLi4uICBidXQgaXQgd2FzIG5lZWRlZCAoYS5rLmEuLCBjbGllbnQKLSAgICAgICAgICAgICAgICAvLyBkb24ndCB1c2UgdGhhdCBpbnRlbnQhKSAgQW5kIGZvciBwYXJhbm9pYSwgbWFrZQotICAgICAgICAgICAgICAgIC8vIHN1cmUgd2UgaGF2ZSBjb3JyZWN0bHkgcmVzdW1lZCB0aGUgdG9wIGFjdGl2aXR5LgotICAgICAgICAgICAgICAgIGlmIChkb1Jlc3VtZSkgewotICAgICAgICAgICAgICAgICAgICB0YXJnZXRTdGFjay5yZXN1bWVUb3BBY3Rpdml0eUxvY2tlZChudWxsLCBvcHRpb25zKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtb3ZlZFRvRnJvbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0byBub3RpZnkgS2V5Z3VhcmQgYXMgd2VsbCBpZiB3ZSBhcmUgbm90IHJ1bm5pbmcgYW4gYXBwCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyB0cmFuc2l0aW9uIGxhdGVyLgotICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZ5QWN0aXZpdHlEcmF3bkZvcktleWd1YXJkKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eU9wdGlvbnMuYWJvcnQob3B0aW9ucyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHVwZGF0ZVVzZXJTdGFja0xvY2tlZChyLnVzZXJJZCwgdGFyZ2V0U3RhY2spOwotICAgICAgICAgICAgICAgIHJldHVybiBBY3Rpdml0eU1hbmFnZXIuU1RBUlRfVEFTS19UT19GUk9OVDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vU3RyaW5nIHVyaSA9IHIuaW50ZW50LnRvVVJJKCk7Ci0gICAgICAgIC8vSW50ZW50IGludGVudDIgPSBuZXcgSW50ZW50KHVyaSk7Ci0gICAgICAgIC8vU2xvZy5pKFRBRywgIkdpdmVuIGludGVudDogIiArIHIuaW50ZW50KTsKLSAgICAgICAgLy9TbG9nLmkoVEFHLCAiVVJJIGlzOiAiICsgdXJpKTsKLSAgICAgICAgLy9TbG9nLmkoVEFHLCAiVG8gaW50ZW50OiAiICsgaW50ZW50Mik7Ci0KLSAgICAgICAgaWYgKHIucGFja2FnZU5hbWUgIT0gbnVsbCkgewotICAgICAgICAgICAgLy8gSWYgdGhlIGFjdGl2aXR5IGJlaW5nIGxhdW5jaGVkIGlzIHRoZSBzYW1lIGFzIHRoZSBvbmUgY3VycmVudGx5Ci0gICAgICAgICAgICAvLyBhdCB0aGUgdG9wLCB0aGVuIHdlIG5lZWQgdG8gY2hlY2sgaWYgaXQgc2hvdWxkIG9ubHkgYmUgbGF1bmNoZWQKLSAgICAgICAgICAgIC8vIG9uY2UuCi0gICAgICAgICAgICBBY3Rpdml0eVN0YWNrIHRvcFN0YWNrID0gbUZvY3VzZWRTdGFjazsKLSAgICAgICAgICAgIEFjdGl2aXR5UmVjb3JkIHRvcCA9IHRvcFN0YWNrLnRvcFJ1bm5pbmdOb25EZWxheWVkQWN0aXZpdHlMb2NrZWQobm90VG9wKTsKLSAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gZG9udFN0YXJ0ID0gdG9wICE9IG51bGwgJiYgci5yZXN1bHRUbyA9PSBudWxsCi0gICAgICAgICAgICAgICAgICAgICYmIHRvcC5yZWFsQWN0aXZpdHkuZXF1YWxzKHIucmVhbEFjdGl2aXR5KSAmJiB0b3AudXNlcklkID09IHIudXNlcklkCi0gICAgICAgICAgICAgICAgICAgICYmIHRvcC5hcHAgIT0gbnVsbCAmJiB0b3AuYXBwLnRocmVhZCAhPSBudWxsCi0gICAgICAgICAgICAgICAgICAgICYmICgobGF1bmNoRmxhZ3MgJiBJbnRlbnQuRkxBR19BQ1RJVklUWV9TSU5HTEVfVE9QKSAhPSAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgbGF1bmNoU2luZ2xlVG9wIHx8IGxhdW5jaFNpbmdsZVRhc2spOwotICAgICAgICAgICAgaWYgKGRvbnRTdGFydCkgewotICAgICAgICAgICAgICAgIEFjdGl2aXR5U3RhY2subG9nU3RhcnRBY3Rpdml0eShFdmVudExvZ1RhZ3MuQU1fTkVXX0lOVEVOVCwgdG9wLCB0b3AudGFzayk7Ci0gICAgICAgICAgICAgICAgLy8gRm9yIHBhcmFub2lhLCBtYWtlIHN1cmUgd2UgaGF2ZSBjb3JyZWN0bHkgcmVzdW1lZCB0aGUgdG9wIGFjdGl2aXR5LgotICAgICAgICAgICAgICAgIHRvcFN0YWNrLm1MYXN0UGF1c2VkQWN0aXZpdHkgPSBudWxsOwotICAgICAgICAgICAgICAgIGlmIChkb1Jlc3VtZSkgewotICAgICAgICAgICAgICAgICAgICByZXN1bWVUb3BBY3Rpdml0aWVzTG9ja2VkKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIEFjdGl2aXR5T3B0aW9ucy5hYm9ydChvcHRpb25zKTsKLSAgICAgICAgICAgICAgICBpZiAoKHN0YXJ0RmxhZ3MgJiBBY3Rpdml0eU1hbmFnZXIuU1RBUlRfRkxBR19PTkxZX0lGX05FRURFRCkgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIHN0YXJ0IGEgbmV3IGFjdGl2aXR5LCBhbmQgdGhlIGNsaWVudCBzYWlkIG5vdCB0byBkbwotICAgICAgICAgICAgICAgICAgICAvLyBhbnl0aGluZyBpZiB0aGF0IGlzIHRoZSBjYXNlLCBzbyB0aGlzIGlzIGl0IQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX1JFVFVSTl9JTlRFTlRfVE9fQ0FMTEVSOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0b3AuZGVsaXZlck5ld0ludGVudExvY2tlZChjYWxsaW5nVWlkLCByLmludGVudCwgci5sYXVuY2hlZEZyb21QYWNrYWdlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX0RFTElWRVJFRF9UT19UT1A7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoci5yZXN1bHRUbyAhPSBudWxsICYmIHIucmVzdWx0VG8udGFzay5zdGFjayAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgci5yZXN1bHRUby50YXNrLnN0YWNrLnNlbmRBY3Rpdml0eVJlc3VsdExvY2tlZCgtMSwgci5yZXN1bHRUbywgci5yZXN1bHRXaG8sCi0gICAgICAgICAgICAgICAgICAgICAgICByLnJlcXVlc3RDb2RlLCBBY3Rpdml0eS5SRVNVTFRfQ0FOQ0VMRUQsIG51bGwpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgQWN0aXZpdHlPcHRpb25zLmFib3J0KG9wdGlvbnMpOwotICAgICAgICAgICAgcmV0dXJuIEFjdGl2aXR5TWFuYWdlci5TVEFSVF9DTEFTU19OT1RfRk9VTkQ7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sZWFuIG5ld1Rhc2sgPSBmYWxzZTsKLSAgICAgICAgYm9vbGVhbiBrZWVwQ3VyVHJhbnNpdGlvbiA9IGZhbHNlOwotCi0gICAgICAgIFRhc2tSZWNvcmQgdGFza1RvQWZmaWxpYXRlID0gbGF1bmNoVGFza0JlaGluZCAmJiBzb3VyY2VSZWNvcmQgIT0gbnVsbCA/Ci0gICAgICAgICAgICAgICAgc291cmNlUmVjb3JkLnRhc2sgOiBudWxsOwotCi0gICAgICAgIC8vIFNob3VsZCB0aGlzIGJlIGNvbnNpZGVyZWQgYSBuZXcgdGFzaz8KLSAgICAgICAgaWYgKHIucmVzdWx0VG8gPT0gbnVsbCAmJiBpblRhc2sgPT0gbnVsbCAmJiAhYWRkaW5nVG9UYXNrCi0gICAgICAgICAgICAgICAgJiYgKGxhdW5jaEZsYWdzICYgRkxBR19BQ1RJVklUWV9ORVdfVEFTSykgIT0gMCkgewotICAgICAgICAgICAgbmV3VGFzayA9IHRydWU7Ci0gICAgICAgICAgICB0YXJnZXRTdGFjayA9IGNvbXB1dGVTdGFja0ZvY3VzKHIsIG5ld1Rhc2ssIG5ld0JvdW5kcywgbGF1bmNoRmxhZ3MpOwotICAgICAgICAgICAgaWYgKGRvUmVzdW1lKSB7Ci0gICAgICAgICAgICAgICAgdGFyZ2V0U3RhY2subW92ZVRvRnJvbnQoInN0YXJ0aW5nTmV3VGFzayIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAocmV1c2VUYXNrID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICByLnNldFRhc2sodGFyZ2V0U3RhY2suY3JlYXRlVGFza1JlY29yZChnZXROZXh0VGFza0lkKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXdUYXNrSW5mbyAhPSBudWxsID8gbmV3VGFza0luZm8gOiByLmluZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXdUYXNrSW50ZW50ICE9IG51bGwgPyBuZXdUYXNrSW50ZW50IDogaW50ZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgdm9pY2VTZXNzaW9uLCB2b2ljZUludGVyYWN0b3IsICFsYXVuY2hUYXNrQmVoaW5kIC8qIHRvVG9wICovKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tUb0FmZmlsaWF0ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKG92ZXJyaWRlQm91bmRzKSB7Ci0gICAgICAgICAgICAgICAgICAgIHIudGFzay51cGRhdGVPdmVycmlkZUNvbmZpZ3VyYXRpb24obmV3Qm91bmRzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKERFQlVHX1RBU0tTKSBTbG9nLnYoVEFHX1RBU0tTLAotICAgICAgICAgICAgICAgICAgICAgICAgIlN0YXJ0aW5nIG5ldyBhY3Rpdml0eSAiICsgciArICIgaW4gbmV3IHRhc2sgIiArIHIudGFzayk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHIuc2V0VGFzayhyZXVzZVRhc2ssIHRhc2tUb0FmZmlsaWF0ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaXNMb2NrVGFza01vZGVWaW9sYXRpb24oci50YXNrKSkgewotICAgICAgICAgICAgICAgIFNsb2cuZShUQUcsICJBdHRlbXB0ZWQgTG9jayBUYXNrIE1vZGUgdmlvbGF0aW9uIHI9IiArIHIpOwotICAgICAgICAgICAgICAgIHJldHVybiBBY3Rpdml0eU1hbmFnZXIuU1RBUlRfUkVUVVJOX0xPQ0tfVEFTS19NT0RFX1ZJT0xBVElPTjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghbW92ZWRIb21lKSB7Ci0gICAgICAgICAgICAgICAgaWYgKChsYXVuY2hGbGFncyAmCi0gICAgICAgICAgICAgICAgICAgICAgICAoRkxBR19BQ1RJVklUWV9ORVdfVEFTSyB8IEZMQUdfQUNUSVZJVFlfVEFTS19PTl9IT01FKSkKLSAgICAgICAgICAgICAgICAgICAgICAgID09IChGTEFHX0FDVElWSVRZX05FV19UQVNLIHwgRkxBR19BQ1RJVklUWV9UQVNLX09OX0hPTUUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIENhbGxlciB3YW50cyB0byBhcHBlYXIgb24gaG9tZSBhY3Rpdml0eSwgc28gYmVmb3JlIHN0YXJ0aW5nCi0gICAgICAgICAgICAgICAgICAgIC8vIHRoZWlyIG93biBhY3Rpdml0eSB3ZSB3aWxsIGJyaW5nIGhvbWUgdG8gdGhlIGZyb250LgotICAgICAgICAgICAgICAgICAgICByLnRhc2suc2V0VGFza1RvUmV0dXJuVG8oSE9NRV9BQ1RJVklUWV9UWVBFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoc291cmNlUmVjb3JkICE9IG51bGwpIHsKLSAgICAgICAgICAgIGZpbmFsIFRhc2tSZWNvcmQgc291cmNlVGFzayA9IHNvdXJjZVJlY29yZC50YXNrOwotICAgICAgICAgICAgaWYgKGlzTG9ja1Rhc2tNb2RlVmlvbGF0aW9uKHNvdXJjZVRhc2spKSB7Ci0gICAgICAgICAgICAgICAgU2xvZy5lKFRBRywgIkF0dGVtcHRlZCBMb2NrIFRhc2sgTW9kZSB2aW9sYXRpb24gcj0iICsgcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEFjdGl2aXR5TWFuYWdlci5TVEFSVF9SRVRVUk5fTE9DS19UQVNLX01PREVfVklPTEFUSU9OOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdGFyZ2V0U3RhY2sgPSBudWxsOwotICAgICAgICAgICAgaWYgKHNvdXJjZVRhc2suc3RhY2sudG9wVGFzaygpICE9IHNvdXJjZVRhc2spIHsKLSAgICAgICAgICAgICAgICAvLyBXZSBvbmx5IHdhbnQgdG8gYWxsb3cgY2hhbmdpbmcgc3RhY2sgaWYgdGhlIHRhcmdldCB0YXNrIGlzIG5vdCB0aGUgdG9wIG9uZSwKLSAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2Ugd2Ugd291bGQgbW92ZSB0aGUgbGF1bmNoaW5nIHRhc2sgdG8gdGhlIG90aGVyIHNpZGUsIHJhdGhlciB0aGFuIHNob3cKLSAgICAgICAgICAgICAgICAvLyB0d28gc2lkZSBieSBzaWRlLgotICAgICAgICAgICAgICAgIHRhcmdldFN0YWNrID0gZ2V0TGF1bmNoVG9TaWRlU3RhY2sociwgbGF1bmNoRmxhZ3MsIHIudGFzayk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodGFyZ2V0U3RhY2sgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHRhcmdldFN0YWNrID0gc291cmNlVGFzay5zdGFjazsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0U3RhY2sgIT0gc291cmNlVGFzay5zdGFjaykgewotICAgICAgICAgICAgICAgIG1vdmVUYXNrVG9TdGFja0xvY2tlZChzb3VyY2VUYXNrLnRhc2tJZCwgdGFyZ2V0U3RhY2subVN0YWNrSWQsIE9OX1RPUCwKLSAgICAgICAgICAgICAgICAgICAgICAgIEZPUkNFX0ZPQ1VTLCAibGF1bmNoVG9TaWRlIiwgIUFOSU1BVEUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGRvUmVzdW1lKSB7Ci0gICAgICAgICAgICAgICAgdGFyZ2V0U3RhY2subW92ZVRvRnJvbnQoInNvdXJjZVN0YWNrVG9Gcm9udCIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZmluYWwgVGFza1JlY29yZCB0b3BUYXNrID0gdGFyZ2V0U3RhY2sudG9wVGFzaygpOwotICAgICAgICAgICAgaWYgKHRvcFRhc2sgIT0gc291cmNlVGFzaykgewotICAgICAgICAgICAgICAgIHRhcmdldFN0YWNrLm1vdmVUYXNrVG9Gcm9udExvY2tlZChzb3VyY2VUYXNrLCBub0FuaW1hdGlvbiwgb3B0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgIHIuYXBwVGltZVRyYWNrZXIsICJzb3VyY2VUYXNrVG9Gcm9udCIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFhZGRpbmdUb1Rhc2sgJiYgKGxhdW5jaEZsYWdzJkludGVudC5GTEFHX0FDVElWSVRZX0NMRUFSX1RPUCkgIT0gMCkgewotICAgICAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSwgd2UgYXJlIGFkZGluZyB0aGUgYWN0aXZpdHkgdG8gYW4gZXhpc3RpbmcKLSAgICAgICAgICAgICAgICAvLyB0YXNrLCBidXQgdGhlIGNhbGxlciBoYXMgYXNrZWQgdG8gY2xlYXIgdGhhdCB0YXNrIGlmIHRoZQotICAgICAgICAgICAgICAgIC8vIGFjdGl2aXR5IGlzIGFscmVhZHkgcnVubmluZy4KLSAgICAgICAgICAgICAgICBBY3Rpdml0eVJlY29yZCB0b3AgPSBzb3VyY2VUYXNrLnBlcmZvcm1DbGVhclRhc2tMb2NrZWQociwgbGF1bmNoRmxhZ3MpOwotICAgICAgICAgICAgICAgIGtlZXBDdXJUcmFuc2l0aW9uID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZiAodG9wICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlTdGFjay5sb2dTdGFydEFjdGl2aXR5KEV2ZW50TG9nVGFncy5BTV9ORVdfSU5URU5ULCByLCB0b3AudGFzayk7Ci0gICAgICAgICAgICAgICAgICAgIHRvcC5kZWxpdmVyTmV3SW50ZW50TG9ja2VkKGNhbGxpbmdVaWQsIHIuaW50ZW50LCByLmxhdW5jaGVkRnJvbVBhY2thZ2UpOwotICAgICAgICAgICAgICAgICAgICAvLyBGb3IgcGFyYW5vaWEsIG1ha2Ugc3VyZSB3ZSBoYXZlIGNvcnJlY3RseQotICAgICAgICAgICAgICAgICAgICAvLyByZXN1bWVkIHRoZSB0b3AgYWN0aXZpdHkuCi0gICAgICAgICAgICAgICAgICAgIHRhcmdldFN0YWNrLm1MYXN0UGF1c2VkQWN0aXZpdHkgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICBpZiAoZG9SZXN1bWUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFN0YWNrLnJlc3VtZVRvcEFjdGl2aXR5TG9ja2VkKG51bGwpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5T3B0aW9ucy5hYm9ydChvcHRpb25zKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFjdGl2aXR5TWFuYWdlci5TVEFSVF9ERUxJVkVSRURfVE9fVE9QOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIWFkZGluZ1RvVGFzayAmJgotICAgICAgICAgICAgICAgICAgICAobGF1bmNoRmxhZ3MmSW50ZW50LkZMQUdfQUNUSVZJVFlfUkVPUkRFUl9UT19GUk9OVCkgIT0gMCkgewotICAgICAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSwgd2UgYXJlIGxhdW5jaGluZyBhbiBhY3Rpdml0eSBpbiBvdXIgb3duIHRhc2sKLSAgICAgICAgICAgICAgICAvLyB0aGF0IG1heSBhbHJlYWR5IGJlIHJ1bm5pbmcgc29tZXdoZXJlIGluIHRoZSBoaXN0b3J5LCBhbmQKLSAgICAgICAgICAgICAgICAvLyB3ZSB3YW50IHRvIHNodWZmbGUgaXQgdG8gdGhlIGZyb250IG9mIHRoZSBzdGFjayBpZiBzby4KLSAgICAgICAgICAgICAgICBmaW5hbCBBY3Rpdml0eVJlY29yZCB0b3AgPSBzb3VyY2VUYXNrLmZpbmRBY3Rpdml0eUluSGlzdG9yeUxvY2tlZChyKTsKLSAgICAgICAgICAgICAgICBpZiAodG9wICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgZmluYWwgVGFza1JlY29yZCB0YXNrID0gdG9wLnRhc2s7Ci0gICAgICAgICAgICAgICAgICAgIHRhc2subW92ZUFjdGl2aXR5VG9Gcm9udExvY2tlZCh0b3ApOwotICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eVN0YWNrLmxvZ1N0YXJ0QWN0aXZpdHkoRXZlbnRMb2dUYWdzLkFNX05FV19JTlRFTlQsIHIsIHRhc2spOwotICAgICAgICAgICAgICAgICAgICB0b3AudXBkYXRlT3B0aW9uc0xvY2tlZChvcHRpb25zKTsKLSAgICAgICAgICAgICAgICAgICAgdG9wLmRlbGl2ZXJOZXdJbnRlbnRMb2NrZWQoY2FsbGluZ1VpZCwgci5pbnRlbnQsIHIubGF1bmNoZWRGcm9tUGFja2FnZSk7Ci0gICAgICAgICAgICAgICAgICAgIHRhcmdldFN0YWNrLm1MYXN0UGF1c2VkQWN0aXZpdHkgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICBpZiAoZG9SZXN1bWUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFN0YWNrLnJlc3VtZVRvcEFjdGl2aXR5TG9ja2VkKG51bGwpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBBY3Rpdml0eU1hbmFnZXIuU1RBUlRfREVMSVZFUkVEX1RPX1RPUDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBBbiBleGlzdGluZyBhY3Rpdml0eSBpcyBzdGFydGluZyB0aGlzIG5ldyBhY3Rpdml0eSwgc28gd2Ugd2FudAotICAgICAgICAgICAgLy8gdG8ga2VlcCB0aGUgbmV3IG9uZSBpbiB0aGUgc2FtZSB0YXNrIGFzIHRoZSBvbmUgdGhhdCBpcyBzdGFydGluZwotICAgICAgICAgICAgLy8gaXQuCi0gICAgICAgICAgICByLnNldFRhc2soc291cmNlVGFzaywgbnVsbCk7Ci0gICAgICAgICAgICBpZiAoREVCVUdfVEFTS1MpIFNsb2cudihUQUdfVEFTS1MsICJTdGFydGluZyBuZXcgYWN0aXZpdHkgIiArIHIKLSAgICAgICAgICAgICAgICAgICAgKyAiIGluIGV4aXN0aW5nIHRhc2sgIiArIHIudGFzayArICIgZnJvbSBzb3VyY2UgIiArIHNvdXJjZVJlY29yZCk7Ci0KLSAgICAgICAgfSBlbHNlIGlmIChpblRhc2sgIT0gbnVsbCkgewotICAgICAgICAgICAgLy8gVGhlIGNhbGxlciBpcyBhc2tpbmcgdGhhdCB0aGUgbmV3IGFjdGl2aXR5IGJlIHN0YXJ0ZWQgaW4gYW4gZXhwbGljaXQKLSAgICAgICAgICAgIC8vIHRhc2sgaXQgaGFzIHByb3ZpZGVkIHRvIHVzLgotICAgICAgICAgICAgaWYgKGlzTG9ja1Rhc2tNb2RlVmlvbGF0aW9uKGluVGFzaykpIHsKLSAgICAgICAgICAgICAgICBTbG9nLmUoVEFHLCAiQXR0ZW1wdGVkIExvY2sgVGFzayBNb2RlIHZpb2xhdGlvbiByPSIgKyByKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX1JFVFVSTl9MT0NLX1RBU0tfTU9ERV9WSU9MQVRJT047Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAob3ZlcnJpZGVCb3VuZHMpIHsKLSAgICAgICAgICAgICAgICBpblRhc2sudXBkYXRlT3ZlcnJpZGVDb25maWd1cmF0aW9uKG5ld0JvdW5kcyk7Ci0gICAgICAgICAgICAgICAgaW50IHN0YWNrSWQgPSBpblRhc2suZ2V0TGF1bmNoU3RhY2tJZCgpOwotICAgICAgICAgICAgICAgIGlmIChzdGFja0lkICE9IGluVGFzay5zdGFjay5tU3RhY2tJZCkgewotICAgICAgICAgICAgICAgICAgICBtb3ZlVGFza1RvU3RhY2tVbmNoZWNrZWRMb2NrZWQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5UYXNrLCBzdGFja0lkLCBPTl9UT1AsICFGT1JDRV9GT0NVUywgImluVGFza1RvRnJvbnQiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0YXJnZXRTdGFjayA9IGluVGFzay5zdGFjazsKLSAgICAgICAgICAgIHRhcmdldFN0YWNrLm1vdmVUYXNrVG9Gcm9udExvY2tlZChpblRhc2ssIG5vQW5pbWF0aW9uLCBvcHRpb25zLCByLmFwcFRpbWVUcmFja2VyLAotICAgICAgICAgICAgICAgICAgICAiaW5UYXNrVG9Gcm9udCIpOwotCi0gICAgICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHdlIHNob3VsZCBhY3R1YWxseSBsYXVuY2ggdGhlIG5ldyBhY3Rpdml0eSBpbiB0byB0aGUgdGFzaywKLSAgICAgICAgICAgIC8vIG9yIGp1c3QgcmV1c2UgdGhlIGN1cnJlbnQgYWN0aXZpdHkgb24gdG9wLgotICAgICAgICAgICAgQWN0aXZpdHlSZWNvcmQgdG9wID0gaW5UYXNrLmdldFRvcEFjdGl2aXR5KCk7Ci0gICAgICAgICAgICBpZiAodG9wICE9IG51bGwgJiYgdG9wLnJlYWxBY3Rpdml0eS5lcXVhbHMoci5yZWFsQWN0aXZpdHkpICYmIHRvcC51c2VySWQgPT0gci51c2VySWQpIHsKLSAgICAgICAgICAgICAgICBpZiAoKGxhdW5jaEZsYWdzICYgSW50ZW50LkZMQUdfQUNUSVZJVFlfU0lOR0xFX1RPUCkgIT0gMAotICAgICAgICAgICAgICAgICAgICAgICAgfHwgbGF1bmNoU2luZ2xlVG9wIHx8IGxhdW5jaFNpbmdsZVRhc2spIHsKLSAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlTdGFjay5sb2dTdGFydEFjdGl2aXR5KEV2ZW50TG9nVGFncy5BTV9ORVdfSU5URU5ULCB0b3AsIHRvcC50YXNrKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKChzdGFydEZsYWdzJkFjdGl2aXR5TWFuYWdlci5TVEFSVF9GTEFHX09OTFlfSUZfTkVFREVEKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIHN0YXJ0IGEgbmV3IGFjdGl2aXR5LCBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBjbGllbnQgc2FpZCBub3QgdG8gZG8gYW55dGhpbmcgaWYgdGhhdAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXMgdGhlIGNhc2UsIHNvIHRoaXMgaXMgaXQhCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX1JFVFVSTl9JTlRFTlRfVE9fQ0FMTEVSOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHRvcC5kZWxpdmVyTmV3SW50ZW50TG9ja2VkKGNhbGxpbmdVaWQsIHIuaW50ZW50LCByLmxhdW5jaGVkRnJvbVBhY2thZ2UpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX0RFTElWRVJFRF9UT19UT1A7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIWFkZGluZ1RvVGFzaykgewotICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IGFjdHVhbGx5IHdhbnQgdG8gaGF2ZSB0aGlzIGFjdGl2aXR5IGFkZGVkIHRvIHRoZSB0YXNrLCBzbyBqdXN0Ci0gICAgICAgICAgICAgICAgLy8gc3RvcCBoZXJlIGJ1dCBzdGlsbCB0ZWxsIHRoZSBjYWxsZXIgdGhhdCB3ZSBjb25zdW1lZCB0aGUgaW50ZW50LgotICAgICAgICAgICAgICAgIEFjdGl2aXR5T3B0aW9ucy5hYm9ydChvcHRpb25zKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX1RBU0tfVE9fRlJPTlQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHIuc2V0VGFzayhpblRhc2ssIG51bGwpOwotICAgICAgICAgICAgaWYgKERFQlVHX1RBU0tTKSBTbG9nLnYoVEFHX1RBU0tTLCAiU3RhcnRpbmcgbmV3IGFjdGl2aXR5ICIgKyByCi0gICAgICAgICAgICAgICAgICAgICsgIiBpbiBleHBsaWNpdCB0YXNrICIgKyByLnRhc2spOwotCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBUaGlzIG5vdCBiZWluZyBzdGFydGVkIGZyb20gYW4gZXhpc3RpbmcgYWN0aXZpdHksIGFuZCBub3QgcGFydAotICAgICAgICAgICAgLy8gb2YgYSBuZXcgdGFzay4uLiAganVzdCBwdXQgaXQgaW4gdGhlIHRvcCB0YXNrLCB0aG91Z2ggdGhlc2UgZGF5cwotICAgICAgICAgICAgLy8gdGhpcyBjYXNlIHNob3VsZCBuZXZlciBoYXBwZW4uCi0gICAgICAgICAgICB0YXJnZXRTdGFjayA9IGNvbXB1dGVTdGFja0ZvY3VzKHIsIG5ld1Rhc2ssIG51bGwgLyogYm91bmRzICovLCBsYXVuY2hGbGFncyk7Ci0gICAgICAgICAgICBpZiAoZG9SZXN1bWUpIHsKLSAgICAgICAgICAgICAgICB0YXJnZXRTdGFjay5tb3ZlVG9Gcm9udCgiYWRkaW5nVG9Ub3BUYXNrIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBBY3Rpdml0eVJlY29yZCBwcmV2ID0gdGFyZ2V0U3RhY2sudG9wQWN0aXZpdHkoKTsKLSAgICAgICAgICAgIHIuc2V0VGFzayhwcmV2ICE9IG51bGwgPyBwcmV2LnRhc2sgOiB0YXJnZXRTdGFjay5jcmVhdGVUYXNrUmVjb3JkKGdldE5leHRUYXNrSWQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByLmluZm8sIGludGVudCwgbnVsbCwgbnVsbCwgdHJ1ZSksIG51bGwpOwotICAgICAgICAgICAgbVdpbmRvd01hbmFnZXIubW92ZVRhc2tUb1RvcChyLnRhc2sudGFza0lkKTsKLSAgICAgICAgICAgIGlmIChERUJVR19UQVNLUykgU2xvZy52KFRBR19UQVNLUywgIlN0YXJ0aW5nIG5ldyBhY3Rpdml0eSAiICsgcgotICAgICAgICAgICAgICAgICAgICArICIgaW4gbmV3IGd1ZXNzZWQgIiArIHIudGFzayk7Ci0gICAgICAgIH0KLQotICAgICAgICBtU2VydmljZS5ncmFudFVyaVBlcm1pc3Npb25Gcm9tSW50ZW50TG9ja2VkKGNhbGxpbmdVaWQsIHIucGFja2FnZU5hbWUsCi0gICAgICAgICAgICAgICAgaW50ZW50LCByLmdldFVyaVBlcm1pc3Npb25zTG9ja2VkKCksIHIudXNlcklkKTsKLQotICAgICAgICBpZiAoc291cmNlUmVjb3JkICE9IG51bGwgJiYgc291cmNlUmVjb3JkLmlzUmVjZW50c0FjdGl2aXR5KCkpIHsKLSAgICAgICAgICAgIHIudGFzay5zZXRUYXNrVG9SZXR1cm5UbyhSRUNFTlRTX0FDVElWSVRZX1RZUEUpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChuZXdUYXNrKSB7Ci0gICAgICAgICAgICBFdmVudExvZy53cml0ZUV2ZW50KEV2ZW50TG9nVGFncy5BTV9DUkVBVEVfVEFTSywgci51c2VySWQsIHIudGFzay50YXNrSWQpOwotICAgICAgICB9Ci0gICAgICAgIEFjdGl2aXR5U3RhY2subG9nU3RhcnRBY3Rpdml0eShFdmVudExvZ1RhZ3MuQU1fQ1JFQVRFX0FDVElWSVRZLCByLCByLnRhc2spOwotICAgICAgICB0YXJnZXRTdGFjay5tTGFzdFBhdXNlZEFjdGl2aXR5ID0gbnVsbDsKLSAgICAgICAgdGFyZ2V0U3RhY2suc3RhcnRBY3Rpdml0eUxvY2tlZChyLCBuZXdUYXNrLCBrZWVwQ3VyVHJhbnNpdGlvbiwgb3B0aW9ucyk7Ci0gICAgICAgIGlmIChkb1Jlc3VtZSkgewotICAgICAgICAgICAgaWYgKCFsYXVuY2hUYXNrQmVoaW5kKSB7Ci0gICAgICAgICAgICAgICAgbVNlcnZpY2Uuc2V0Rm9jdXNlZEFjdGl2aXR5TG9ja2VkKHIsICJzdGFydGVkQWN0aXZpdHkiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJlc3VtZVRvcEFjdGl2aXRpZXNMb2NrZWQodGFyZ2V0U3RhY2ssIHIsIG9wdGlvbnMpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdGFyZ2V0U3RhY2suYWRkUmVjZW50QWN0aXZpdHlMb2NrZWQocik7Ci0gICAgICAgIH0KLSAgICAgICAgdXBkYXRlVXNlclN0YWNrTG9ja2VkKHIudXNlcklkLCB0YXJnZXRTdGFjayk7Ci0KLSAgICAgICAgaWYgKCFyLnRhc2subVJlc2l6ZWFibGUgJiYgaXNTdGFja0RvY2tlZEluRWZmZWN0KHRhcmdldFN0YWNrLm1TdGFja0lkKSkgewotICAgICAgICAgICAgc2hvd05vblJlc2l6ZWFibGVEb2NrVG9hc3Qoci50YXNrLnRhc2tJZCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX1NVQ0NFU1M7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRGVjaWRlIHdoZXRoZXIgdGhlIG5ldyBhY3Rpdml0eSBzaG91bGQgYmUgaW5zZXJ0ZWQgaW50byBhbiBleGlzdGluZyB0YXNrLiBSZXR1cm5zIG51bGwgaWYgbm90Ci0gICAgICogb3IgYW4gQWN0aXZpdHlSZWNvcmQgd2l0aCB0aGUgdGFzayBpbnRvIHdoaWNoIHRoZSBuZXcgYWN0aXZpdHkgc2hvdWxkIGJlIGFkZGVkLgotICAgICAqLwotICAgIHByaXZhdGUgQWN0aXZpdHlSZWNvcmQgZ2V0UmV1c2FibGVJbnRlbnRBY3Rpdml0eShBY3Rpdml0eVJlY29yZCByLCBUYXNrUmVjb3JkIGluVGFzaywgSW50ZW50IGludGVudCwKLSAgICAgICAgICAgIGJvb2xlYW4gbGF1bmNoU2luZ2xlSW5zdGFuY2UsIGJvb2xlYW4gbGF1bmNoU2luZ2xlVGFzaywgaW50IGxhdW5jaEZsYWdzKSB7Ci0gICAgICAgIC8vIFdlIG1heSB3YW50IHRvIHRyeSB0byBwbGFjZSB0aGUgbmV3IGFjdGl2aXR5IGluIHRvIGFuIGV4aXN0aW5nIHRhc2suICBXZSBhbHdheXMKLSAgICAgICAgLy8gZG8gdGhpcyBpZiB0aGUgdGFyZ2V0IGFjdGl2aXR5IGlzIHNpbmdsZVRhc2sgb3Igc2luZ2xlSW5zdGFuY2U7IHdlIHdpbGwgYWxzbyBkbwotICAgICAgICAvLyB0aGlzIGlmIE5FV19UQVNLIGhhcyBiZWVuIHJlcXVlc3RlZCwgYW5kIHRoZXJlIGlzIG5vdCBhbiBhZGRpdGlvbmFsIHF1YWxpZmllciB0ZWxsaW5nCi0gICAgICAgIC8vIHVzIHRvIHN0aWxsIHBsYWNlIGl0IGluIGEgbmV3IHRhc2s6IG11bHRpIHRhc2ssIGFsd2F5cyBkb2MgbW9kZSwgb3IgYmVpbmcgYXNrZWQgdG8KLSAgICAgICAgLy8gbGF1bmNoIHRoaXMgYXMgYSBuZXcgdGFzayBiZWhpbmQgdGhlIGN1cnJlbnQgb25lLgotICAgICAgICBib29sZWFuIHB1dEludG9FeGlzdGluZ1Rhc2sgPSAoKGxhdW5jaEZsYWdzICYgRkxBR19BQ1RJVklUWV9ORVdfVEFTSykgIT0gMCAmJgotICAgICAgICAgICAgICAgIChsYXVuY2hGbGFncyAmIEZMQUdfQUNUSVZJVFlfTVVMVElQTEVfVEFTSykgPT0gMCkKLSAgICAgICAgICAgICAgICB8fCBsYXVuY2hTaW5nbGVJbnN0YW5jZSB8fCBsYXVuY2hTaW5nbGVUYXNrOwotICAgICAgICAvLyBJZiBicmluZyB0byBmcm9udCBpcyByZXF1ZXN0ZWQsIGFuZCBubyByZXN1bHQgaXMgcmVxdWVzdGVkIGFuZCB3ZSBoYXZlIG5vdAotICAgICAgICAvLyBiZWVuIGdpdmVuIGFuIGV4cGxpY2l0IHRhc2sgdG8gbGF1bmNoIGluIHRvLCBhbmQKLSAgICAgICAgLy8gd2UgY2FuIGZpbmQgYSB0YXNrIHRoYXQgd2FzIHN0YXJ0ZWQgd2l0aCB0aGlzIHNhbWUKLSAgICAgICAgLy8gY29tcG9uZW50LCB0aGVuIGluc3RlYWQgb2YgbGF1bmNoaW5nIGJyaW5nIHRoYXQgb25lIHRvIHRoZSBmcm9udC4KLSAgICAgICAgcHV0SW50b0V4aXN0aW5nVGFzayAmPSBpblRhc2sgPT0gbnVsbCAmJiByLnJlc3VsdFRvID09IG51bGw7Ci0gICAgICAgIEFjdGl2aXR5UmVjb3JkIGludGVudEFjdGl2aXR5ID0gbnVsbDsKLSAgICAgICAgaWYgKHB1dEludG9FeGlzdGluZ1Rhc2spIHsKLSAgICAgICAgICAgIC8vIFNlZSBpZiB0aGVyZSBpcyBhIHRhc2sgdG8gYnJpbmcgdG8gdGhlIGZyb250LiAgSWYgdGhpcyBpcwotICAgICAgICAgICAgLy8gYSBTSU5HTEVfSU5TVEFOQ0UgYWN0aXZpdHksIHRoZXJlIGNhbiBiZSBvbmUgYW5kIG9ubHkgb25lCi0gICAgICAgICAgICAvLyBpbnN0YW5jZSBvZiBpdCBpbiB0aGUgaGlzdG9yeSwgYW5kIGl0IGlzIGFsd2F5cyBpbiBpdHMgb3duCi0gICAgICAgICAgICAvLyB1bmlxdWUgdGFzaywgc28gd2UgZG8gYSBzcGVjaWFsIHNlYXJjaC4KLSAgICAgICAgICAgIGludGVudEFjdGl2aXR5ID0gbGF1bmNoU2luZ2xlSW5zdGFuY2UgPwotICAgICAgICAgICAgICAgICAgICBmaW5kQWN0aXZpdHlMb2NrZWQoaW50ZW50LCByLmluZm8pIDogZmluZFRhc2tMb2NrZWQocik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGludGVudEFjdGl2aXR5OwotICAgIH0KLQotICAgIGZpbmFsIHZvaWQgZG9QZW5kaW5nQWN0aXZpdHlMYXVuY2hlc0xvY2tlZChib29sZWFuIGRvUmVzdW1lKSB7Ci0gICAgICAgIHdoaWxlICghbVBlbmRpbmdBY3Rpdml0eUxhdW5jaGVzLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgUGVuZGluZ0FjdGl2aXR5TGF1bmNoIHBhbCA9IG1QZW5kaW5nQWN0aXZpdHlMYXVuY2hlcy5yZW1vdmUoMCk7Ci0KLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgc3RhcnRBY3Rpdml0eVVuY2hlY2tlZExvY2tlZChwYWwuciwgcGFsLnNvdXJjZVJlY29yZCwgbnVsbCwgbnVsbCwgcGFsLnN0YXJ0RmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICBkb1Jlc3VtZSAmJiBtUGVuZGluZ0FjdGl2aXR5TGF1bmNoZXMuaXNFbXB0eSgpLCBudWxsLCBudWxsKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgU2xvZy5lKFRBRywgIkV4Y2VwdGlvbiBkdXJpbmcgcGVuZGluZyBhY3Rpdml0eSBsYXVuY2ggcGFsPSIgKyBwYWwsIGUpOwotICAgICAgICAgICAgICAgIHBhbC5zZW5kRXJyb3JSZXN1bHQoZS5nZXRNZXNzYWdlKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCByZW1vdmVQZW5kaW5nQWN0aXZpdHlMYXVuY2hlc0xvY2tlZChBY3Rpdml0eVN0YWNrIHN0YWNrKSB7Ci0gICAgICAgIGZvciAoaW50IHBhbE5keCA9IG1QZW5kaW5nQWN0aXZpdHlMYXVuY2hlcy5zaXplKCkgLSAxOyBwYWxOZHggPj0gMDsgLS1wYWxOZHgpIHsKLSAgICAgICAgICAgIFBlbmRpbmdBY3Rpdml0eUxhdW5jaCBwYWwgPSBtUGVuZGluZ0FjdGl2aXR5TGF1bmNoZXMuZ2V0KHBhbE5keCk7Ci0gICAgICAgICAgICBpZiAocGFsLnN0YWNrID09IHN0YWNrKSB7Ci0gICAgICAgICAgICAgICAgbVBlbmRpbmdBY3Rpdml0eUxhdW5jaGVzLnJlbW92ZShwYWxOZHgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCiAgICAgdm9pZCBzZXRMYXVuY2hTb3VyY2UoaW50IHVpZCkgewogICAgICAgICBtTGF1bmNoaW5nQWN0aXZpdHkuc2V0V29ya1NvdXJjZShuZXcgV29ya1NvdXJjZSh1aWQpKTsKICAgICB9CkBAIC0yOTY1LDcgKzE1MjYsNyBAQAogICAgICAgICAvL21XaW5kb3dNYW5hZ2VyLmR1bXAoKTsKIAogICAgICAgICBpZiAoYWN0aXZpdHlSZW1vdmVkKSB7Ci0gICAgICAgICAgICByZXN1bWVUb3BBY3Rpdml0aWVzTG9ja2VkKCk7CisgICAgICAgICAgICByZXN1bWVGb2N1c2VkU3RhY2tUb3BBY3Rpdml0eUxvY2tlZCgpOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIHI7CkBAIC0zMDU4LDM1ICsxNjE5LDE3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBib29sZWFuIHJlc3VtZVRvcEFjdGl2aXRpZXNMb2NrZWQoKSB7Ci0gICAgICAgIHJldHVybiByZXN1bWVUb3BBY3Rpdml0aWVzTG9ja2VkKG51bGwsIG51bGwsIG51bGwpOworICAgIGJvb2xlYW4gcmVzdW1lRm9jdXNlZFN0YWNrVG9wQWN0aXZpdHlMb2NrZWQoKSB7CisgICAgICAgIHJldHVybiByZXN1bWVGb2N1c2VkU3RhY2tUb3BBY3Rpdml0eUxvY2tlZChudWxsLCBudWxsLCBudWxsKTsKICAgICB9CiAKLSAgICBib29sZWFuIHJlc3VtZVRvcEFjdGl2aXRpZXNMb2NrZWQoCisgICAgYm9vbGVhbiByZXN1bWVGb2N1c2VkU3RhY2tUb3BBY3Rpdml0eUxvY2tlZCgKICAgICAgICAgICAgIEFjdGl2aXR5U3RhY2sgdGFyZ2V0U3RhY2ssIEFjdGl2aXR5UmVjb3JkIHRhcmdldCwgQWN0aXZpdHlPcHRpb25zIHRhcmdldE9wdGlvbnMpIHsKLSAgICAgICAgaWYgKHRhcmdldFN0YWNrID09IG51bGwpIHsKLSAgICAgICAgICAgIHRhcmdldFN0YWNrID0gbUZvY3VzZWRTdGFjazsKKyAgICAgICAgaWYgKHRhcmdldFN0YWNrICE9IG51bGwgJiYgaXNGb2N1c2VkU3RhY2sodGFyZ2V0U3RhY2spKSB7CisgICAgICAgICAgICByZXR1cm4gdGFyZ2V0U3RhY2sucmVzdW1lVG9wQWN0aXZpdHlVbmNoZWNrZWRMb2NrZWQodGFyZ2V0LCB0YXJnZXRPcHRpb25zKTsKICAgICAgICAgfQotICAgICAgICAvLyBEbyB0YXJnZXRTdGFjayBmaXJzdC4KLSAgICAgICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgaWYgKGlzRm9jdXNlZFN0YWNrKHRhcmdldFN0YWNrKSkgewotICAgICAgICAgICAgcmVzdWx0ID0gdGFyZ2V0U3RhY2sucmVzdW1lVG9wQWN0aXZpdHlMb2NrZWQodGFyZ2V0LCB0YXJnZXRPcHRpb25zKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoaW50IGRpc3BsYXlOZHggPSBtQWN0aXZpdHlEaXNwbGF5cy5zaXplKCkgLSAxOyBkaXNwbGF5TmR4ID49IDA7IC0tZGlzcGxheU5keCkgewotICAgICAgICAgICAgZmluYWwgQXJyYXlMaXN0PEFjdGl2aXR5U3RhY2s+IHN0YWNrcyA9IG1BY3Rpdml0eURpc3BsYXlzLnZhbHVlQXQoZGlzcGxheU5keCkubVN0YWNrczsKLSAgICAgICAgICAgIGZvciAoaW50IHN0YWNrTmR4ID0gc3RhY2tzLnNpemUoKSAtIDE7IHN0YWNrTmR4ID49IDA7IC0tc3RhY2tOZHgpIHsKLSAgICAgICAgICAgICAgICBmaW5hbCBBY3Rpdml0eVN0YWNrIHN0YWNrID0gc3RhY2tzLmdldChzdGFja05keCk7Ci0gICAgICAgICAgICAgICAgaWYgKHN0YWNrID09IHRhcmdldFN0YWNrKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEFscmVhZHkgc3RhcnRlZCBhYm92ZS4KLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChpc0ZvY3VzZWRTdGFjayhzdGFjaykpIHsKLSAgICAgICAgICAgICAgICAgICAgc3RhY2sucmVzdW1lVG9wQWN0aXZpdHlMb2NrZWQobnVsbCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIG1Gb2N1c2VkU3RhY2sucmVzdW1lVG9wQWN0aXZpdHlVbmNoZWNrZWRMb2NrZWQobnVsbCwgbnVsbCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICB2b2lkIGZpbmlzaFRvcFJ1bm5pbmdBY3Rpdml0eUxvY2tlZChQcm9jZXNzUmVjb3JkIGFwcCwgU3RyaW5nIHJlYXNvbikgewpAQCAtMzEyOCwxMCArMTY3MSwxMyBAQAogICAgICAgICB9CiAKICAgICAgICAgaWYgKHRhc2subVJlc2l6ZWFibGUgJiYgb3B0aW9ucyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBpZiAoY2FuVXNlQWN0aXZpdHlPcHRpb25zTGF1bmNoQm91bmRzKG9wdGlvbnMpKSB7CisgICAgICAgICAgICBpbnQgc3RhY2tJZCA9IG9wdGlvbnMuZ2V0TGF1bmNoU3RhY2tJZCgpOworICAgICAgICAgICAgaWYgKGNhblVzZUFjdGl2aXR5T3B0aW9uc0xhdW5jaEJvdW5kcyhvcHRpb25zLCBzdGFja0lkKSkgewogICAgICAgICAgICAgICAgIFJlY3QgYm91bmRzID0gb3B0aW9ucy5nZXRMYXVuY2hCb3VuZHMoKTsKICAgICAgICAgICAgICAgICB0YXNrLnVwZGF0ZU92ZXJyaWRlQ29uZmlndXJhdGlvbihib3VuZHMpOwotICAgICAgICAgICAgICAgIGZpbmFsIGludCBzdGFja0lkID0gdGFzay5nZXRMYXVuY2hTdGFja0lkKCk7CisgICAgICAgICAgICAgICAgaWYgKHN0YWNrSWQgPT0gSU5WQUxJRF9TVEFDS19JRCkgeworICAgICAgICAgICAgICAgICAgICBzdGFja0lkID0gdGFzay5nZXRMYXVuY2hTdGFja0lkKCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChzdGFja0lkICE9IHRhc2suc3RhY2subVN0YWNrSWQpIHsKICAgICAgICAgICAgICAgICAgICAgbW92ZVRhc2tUb1N0YWNrVW5jaGVja2VkTG9ja2VkKHRhc2ssIHN0YWNrSWQsIE9OX1RPUCwgIUZPUkNFX0ZPQ1VTLCByZWFzb24pOwogICAgICAgICAgICAgICAgICAgICAvLyBtb3ZlVGFza1RvU3RhY2tVbmNoZWNrZWRMb2NrZWQoKSBzaG91bGQgYWxyZWFkeSBwbGFjZWQgdGhlIHRhc2sgb24gdG9wLApAQCAtMzE1MywxMCArMTY5OSwxNCBAQAogICAgICAgICAgICAgICAgICJmaW5kVGFza1RvTW92ZVRvRnJvbnQ6IG1vdmVkIHRvIGZyb250IG9mIHN0YWNrPSIgKyB0YXNrLnN0YWNrKTsKICAgICB9CiAKLSAgICBwcml2YXRlIGJvb2xlYW4gY2FuVXNlQWN0aXZpdHlPcHRpb25zTGF1bmNoQm91bmRzKEFjdGl2aXR5T3B0aW9ucyBvcHRpb25zKSB7CisgICAgYm9vbGVhbiBjYW5Vc2VBY3Rpdml0eU9wdGlvbnNMYXVuY2hCb3VuZHMoQWN0aXZpdHlPcHRpb25zIG9wdGlvbnMsIGludCBsYXVuY2hTdGFja0lkKSB7CiAgICAgICAgIC8vIFdlIHVzZSB0aGUgbGF1bmNoIGJvdW5kcyBpbiB0aGUgYWN0aXZpdHkgb3B0aW9ucyBpcyB0aGUgZGV2aWNlIHN1cHBvcnRzIGZyZWVmb3JtCi0gICAgICAgIC8vIHdpbmRvdyBtYW5hZ2VtZW50LgotICAgICAgICByZXR1cm4gb3B0aW9ucy5oYXNMYXVuY2hCb3VuZHMoKSAmJiBtU2VydmljZS5tU3VwcG9ydHNGcmVlZm9ybVdpbmRvd01hbmFnZW1lbnQ7CisgICAgICAgIC8vIHdpbmRvdyBtYW5hZ2VtZW50IG9yIGlzIGxhdW5jaGluZyBpbnRvIHRoZSBwaW5uZWQgc3RhY2suCisgICAgICAgIGlmICghb3B0aW9ucy5oYXNMYXVuY2hCb3VuZHMoKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiAobVNlcnZpY2UubVN1cHBvcnRzUGljdHVyZUluUGljdHVyZSAmJiBsYXVuY2hTdGFja0lkID09IFBJTk5FRF9TVEFDS19JRCkKKyAgICAgICAgICAgICAgICB8fCBtU2VydmljZS5tU3VwcG9ydHNGcmVlZm9ybVdpbmRvd01hbmFnZW1lbnQ7CiAgICAgfQogCiAgICAgQWN0aXZpdHlTdGFjayBnZXRTdGFjayhpbnQgc3RhY2tJZCkgewpAQCAtMzI1MywxNiArMTgwMywyMCBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgdm9pZCByZXNpemVTdGFja0xvY2tlZChpbnQgc3RhY2tJZCwgUmVjdCBib3VuZHMsIGJvb2xlYW4gcHJlc2VydmVXaW5kb3dzLAotICAgICAgICAgICAgYm9vbGVhbiBhbGxvd1Jlc2l6ZUluRG9ja2VkTW9kZSkgeworICAgIHZvaWQgcmVzaXplU3RhY2tMb2NrZWQoaW50IHN0YWNrSWQsIFJlY3QgYm91bmRzLCBSZWN0IHRlbXBUYXNrQm91bmRzLCBSZWN0IHRlbXBUYXNrSW5zZXRCb3VuZHMsCisgICAgICAgICAgICBib29sZWFuIHByZXNlcnZlV2luZG93cywgYm9vbGVhbiBhbGxvd1Jlc2l6ZUluRG9ja2VkTW9kZSkgeworICAgICAgICBpZiAoc3RhY2tJZCA9PSBET0NLRURfU1RBQ0tfSUQpIHsKKyAgICAgICAgICAgIHJlc2l6ZURvY2tlZFN0YWNrTG9ja2VkKGJvdW5kcywgdGVtcFRhc2tCb3VuZHMsIHRlbXBUYXNrSW5zZXRCb3VuZHMsIG51bGwsIG51bGwsCisgICAgICAgICAgICAgICAgICAgIHByZXNlcnZlV2luZG93cyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAgZmluYWwgQWN0aXZpdHlTdGFjayBzdGFjayA9IGdldFN0YWNrKHN0YWNrSWQpOwogICAgICAgICBpZiAoc3RhY2sgPT0gbnVsbCkgewogICAgICAgICAgICAgU2xvZy53KFRBRywgInJlc2l6ZVN0YWNrOiBzdGFja0lkICIgKyBzdGFja0lkICsgIiBub3QgZm91bmQuIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIWFsbG93UmVzaXplSW5Eb2NrZWRNb2RlCi0gICAgICAgICAgICAgICAgJiYgc3RhY2tJZCAhPSBET0NLRURfU1RBQ0tfSUQgJiYgZ2V0U3RhY2soRE9DS0VEX1NUQUNLX0lEKSAhPSBudWxsKSB7CisgICAgICAgIGlmICghYWxsb3dSZXNpemVJbkRvY2tlZE1vZGUgJiYgZ2V0U3RhY2soRE9DS0VEX1NUQUNLX0lEKSAhPSBudWxsKSB7CiAgICAgICAgICAgICAvLyBJZiB0aGUgZG9ja2VkIHN0YWNrIGV4aXN0IHdlIGRvbid0IGFsbG93IHJlc2l6ZXMgb2Ygc3RhY2tzIG5vdCBjYXVzZWQgYnkgdGhlIGRvY2tlZAogICAgICAgICAgICAgLy8gc3RhY2sgc2l6ZSBjaGFuZ2luZyBzbyB0aGluZ3MgZG9uJ3QgZ2V0IG91dCBvZiBzeW5jLgogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzI3MSwxMDAgKzE4MjUsMTQzIEBACiAgICAgICAgIFRyYWNlLnRyYWNlQmVnaW4oVFJBQ0VfVEFHX0FDVElWSVRZX01BTkFHRVIsICJhbS5yZXNpemVTdGFja18iICsgc3RhY2tJZCk7CiAgICAgICAgIG1XaW5kb3dNYW5hZ2VyLmRlZmVyU3VyZmFjZUxheW91dCgpOwogICAgICAgICB0cnkgewotCi0gICAgICAgICAgICBpZiAoYm91bmRzICE9IG51bGwgJiYgbVdpbmRvd01hbmFnZXIuaXNGdWxsc2NyZWVuQm91bmRzKHN0YWNrSWQsIGJvdW5kcykpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGUgYm91bmRzIHBhc3NlZCBpbiBjb3JyZXNwb25kcyB0byB0aGUgZnVsbHNjcmVlbiBib3VuZHMgd2hpY2ggd2Ugbm9ybWFsbHkKLSAgICAgICAgICAgICAgICAvLyByZXByZXNlbnQgd2l0aCBudWxsLiBHbyBhaGVhZCBhbmQgc2V0IGl0IHRvIG51bGwgc28gdGhhdCBhbGwgdGFza3MgY29uZmlndXJhdGlvbgotICAgICAgICAgICAgICAgIC8vIGNhbiBoYXZlIHRoZSByaWdodCBmdWxsc2NyZWVuIHN0YXRlLgotICAgICAgICAgICAgICAgIGJvdW5kcyA9IG51bGw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEFjdGl2aXR5UmVjb3JkIHIgPSBzdGFjay50b3BSdW5uaW5nQWN0aXZpdHlMb2NrZWQoKTsKLQotICAgICAgICAgICAgbVRtcEJvdW5kcy5jbGVhcigpOwotICAgICAgICAgICAgbVRtcENvbmZpZ3MuY2xlYXIoKTsKLSAgICAgICAgICAgIEFycmF5TGlzdDxUYXNrUmVjb3JkPiB0YXNrcyA9IHN0YWNrLmdldEFsbFRhc2tzKCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gdGFza3Muc2l6ZSgpIC0gMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgICAgICAgICBUYXNrUmVjb3JkIHRhc2sgPSB0YXNrcy5nZXQoaSk7Ci0gICAgICAgICAgICAgICAgaWYgKHRhc2subVJlc2l6ZWFibGUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLm1TdGFja0lkID09IEZSRUVGT1JNX1dPUktTUEFDRV9TVEFDS19JRCkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm9yIGZyZWVmb3JtIHN0YWNrIHdlIGRvbid0IGFkanVzdCB0aGUgc2l6ZSBvZiB0aGUgdGFza3MgdG8gbWF0Y2ggdGhhdAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2YgdGhlIHN0YWNrLCBidXQgd2UgZG8gdHJ5IHRvIG1ha2Ugc3VyZSB0aGUgdGFza3MgYXJlIHN0aWxsIGNvbnRhaW5lZAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2l0aCB0aGUgYm91bmRzIG9mIHRoZSBzdGFjay4KLSAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBSZWN0Mi5zZXQodGFzay5tQm91bmRzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpdFdpdGhpbkJvdW5kcyh0ZW1wUmVjdDIsIGJvdW5kcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0YXNrLnVwZGF0ZU92ZXJyaWRlQ29uZmlndXJhdGlvbih0ZW1wUmVjdDIpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgdGFzay51cGRhdGVPdmVycmlkZUNvbmZpZ3VyYXRpb24oYm91bmRzKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG1UbXBDb25maWdzLnB1dCh0YXNrLnRhc2tJZCwgdGFzay5tT3ZlcnJpZGVDb25maWcpOwotICAgICAgICAgICAgICAgIG1UbXBCb3VuZHMucHV0KHRhc2sudGFza0lkLCB0YXNrLm1Cb3VuZHMpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc3RhY2subUZ1bGxzY3JlZW4gPSBtV2luZG93TWFuYWdlci5yZXNpemVTdGFjayhzdGFja0lkLCBib3VuZHMsIG1UbXBDb25maWdzLCBtVG1wQm91bmRzKTsKLSAgICAgICAgICAgIGlmIChzdGFjay5tU3RhY2tJZCA9PSBET0NLRURfU1RBQ0tfSUQpIHsKLSAgICAgICAgICAgICAgICAvLyBEb2NrIHN0YWNrIGZ1bm5lc3MuLi5ZYXkhCi0gICAgICAgICAgICAgICAgaWYgKHN0YWNrLm1GdWxsc2NyZWVuKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRoZSBkb2NrIHN0YWNrIHdlbnQgZnVsbHNjcmVlbiB3aGljaCBpcyBraW5kYSBsaWtlIGRpc21pc3NpbmcgaXQuCi0gICAgICAgICAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBtYWtlIGFsbCBvdGhlciBzdGF0aWMgc3RhY2tzIGZ1bGxzY3JlZW4gYW5kIG1vdmUgYWxsCi0gICAgICAgICAgICAgICAgICAgIC8vIGRvY2tlZCBzdGFjayB0YXNrcyB0byB0aGUgZnVsbHNjcmVlbiBzdGFjay4KLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IEZJUlNUX1NUQVRJQ19TVEFDS19JRDsgaSA8PSBMQVNUX1NUQVRJQ19TVEFDS19JRDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoU3RhY2tJZC5pc1Jlc2l6ZWFibGVCeURvY2tlZFN0YWNrKGkpICYmIGdldFN0YWNrKGkpICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNpemVTdGFja0xvY2tlZChpLCBudWxsLCBwcmVzZXJ2ZVdpbmRvd3MsIHRydWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50IGNvdW50ID0gdGFza3Muc2l6ZSgpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVUYXNrVG9TdGFja0xvY2tlZCh0YXNrcy5nZXQoaSkudGFza0lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVUxMU0NSRUVOX1dPUktTUEFDRV9TVEFDS19JRCwgT05fVE9QLCBGT1JDRV9GT0NVUywgInJlc2l6ZVN0YWNrIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UgLyogYW5pbWF0ZSAqLyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyBzdGFjayBzaG91bGRuJ3QgY29udGFpbiBhbnltb3JlIGFjdGl2aXRpZXMsIHNvIG5vdGhpbmcgdG8gcmVzdW1lLgotICAgICAgICAgICAgICAgICAgICByID0gbnVsbDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBEb2NrZWQgc3RhY2tzIG9jY3VweSBhIGRlZGljYXRlZCByZWdpb24gb24gc2NyZWVuIHNvIHRoZSBzaXplIG9mIGFsbCBvdGhlcgotICAgICAgICAgICAgICAgICAgICAvLyBzdGF0aWMgc3RhY2tzIG5lZWQgdG8gYmUgYWRqdXN0ZWQgc28gdGhleSBkb24ndCBvdmVybGFwIHdpdGggdGhlIGRvY2tlZCBzdGFjay4KLSAgICAgICAgICAgICAgICAgICAgLy8gV2UgZ2V0IHRoZSBib3VuZHMgdG8gdXNlIGZyb20gd2luZG93IG1hbmFnZXIgd2hpY2ggaGFzIGJlZW4gYWRqdXN0ZWQgZm9yIGFueQotICAgICAgICAgICAgICAgICAgICAvLyBzY3JlZW4gY29udHJvbHMgYW5kIGlzIGFsc28gdGhlIHNhbWUgZm9yIGFsbCBzdGFja3MuCi0gICAgICAgICAgICAgICAgICAgIG1XaW5kb3dNYW5hZ2VyLmdldFN0YWNrRG9ja2VkTW9kZUJvdW5kcyhIT01FX1NUQUNLX0lELCB0ZW1wUmVjdCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IEZJUlNUX1NUQVRJQ19TVEFDS19JRDsgaSA8PSBMQVNUX1NUQVRJQ19TVEFDS19JRDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoU3RhY2tJZC5pc1Jlc2l6ZWFibGVCeURvY2tlZFN0YWNrKGkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlTdGFjayBvdGhlclN0YWNrID0gZ2V0U3RhY2soaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG90aGVyU3RhY2sgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNpemVTdGFja0xvY2tlZChpLCB0ZW1wUmVjdCwgUFJFU0VSVkVfV0lORE9XUywgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vIFNpbmNlIHdlIGFyZSByZXNpemluZyB0aGUgc3RhY2ssIGFsbCBvdGhlciBvcGVyYXRpb25zIHNob3VsZCBzdHJpdmUgdG8gcHJlc2VydmUKLSAgICAgICAgICAgICAgICAvLyB3aW5kb3dzLgotICAgICAgICAgICAgICAgIHByZXNlcnZlV2luZG93cyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdGFjay5zZXRCb3VuZHMoYm91bmRzKTsKLQotICAgICAgICAgICAgaWYgKHIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gdXBkYXRlZCA9IHN0YWNrLmVuc3VyZUFjdGl2aXR5Q29uZmlndXJhdGlvbkxvY2tlZChyLCAwLCBwcmVzZXJ2ZVdpbmRvd3MpOwotICAgICAgICAgICAgICAgIC8vIEFuZCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSBhdCB0aGlzIHBvaW50IHRoYXQgYWxsIG90aGVyIGFjdGl2aXRpZXMKLSAgICAgICAgICAgICAgICAvLyBhcmUgbWFkZSB2aXNpYmxlIHdpdGggdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbi4KLSAgICAgICAgICAgICAgICBlbnN1cmVBY3Rpdml0aWVzVmlzaWJsZUxvY2tlZChyLCAwLCBwcmVzZXJ2ZVdpbmRvd3MpOwotICAgICAgICAgICAgICAgIGlmICghdXBkYXRlZCkgewotICAgICAgICAgICAgICAgICAgICByZXN1bWVUb3BBY3Rpdml0aWVzTG9ja2VkKHN0YWNrLCBudWxsLCBudWxsKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICByZXNpemVTdGFja1VuY2hlY2tlZExvY2tlZChzdGFjaywgYm91bmRzLCB0ZW1wVGFza0JvdW5kcywgdGVtcFRhc2tJbnNldEJvdW5kcyk7CisgICAgICAgICAgICBlbnN1cmVDb25maWd1cmF0aW9uQW5kUmVzdW1lKHN0YWNrLCBzdGFjay50b3BSdW5uaW5nQWN0aXZpdHlMb2NrZWQoKSwgcHJlc2VydmVXaW5kb3dzKTsKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIG1XaW5kb3dNYW5hZ2VyLmNvbnRpbnVlU3VyZmFjZUxheW91dCgpOwogICAgICAgICAgICAgVHJhY2UudHJhY2VFbmQoVFJBQ0VfVEFHX0FDVElWSVRZX01BTkFHRVIpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgdm9pZCByZXNpemVUYXNrTG9ja2VkKFRhc2tSZWNvcmQgdGFzaywgUmVjdCBib3VuZHMsIGludCByZXNpemVNb2RlLCBib29sZWFuIHByZXNlcnZlV2luZG93KSB7CisgICAgcHJpdmF0ZSB2b2lkIHJlc2l6ZVN0YWNrVW5jaGVja2VkTG9ja2VkKEFjdGl2aXR5U3RhY2sgc3RhY2ssIFJlY3QgYm91bmRzLCBSZWN0IHRlbXBUYXNrQm91bmRzLAorICAgICAgICAgICAgUmVjdCB0ZW1wVGFza0luc2V0Qm91bmRzKSB7CisgICAgICAgIGlmIChib3VuZHMgIT0gbnVsbCAmJiBtV2luZG93TWFuYWdlci5pc0Z1bGxzY3JlZW5Cb3VuZHMoc3RhY2subVN0YWNrSWQsIGJvdW5kcykpIHsKKyAgICAgICAgICAgIC8vIFRoZSBib3VuZHMgcGFzc2VkIGluIGNvcnJlc3BvbmRzIHRvIHRoZSBmdWxsc2NyZWVuIGJvdW5kcyB3aGljaCB3ZSBub3JtYWxseQorICAgICAgICAgICAgLy8gcmVwcmVzZW50IHdpdGggbnVsbC4gR28gYWhlYWQgYW5kIHNldCBpdCB0byBudWxsIHNvIHRoYXQgYWxsIHRhc2tzIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgIC8vIGNhbiBoYXZlIHRoZSByaWdodCBmdWxsc2NyZWVuIHN0YXRlLgorICAgICAgICAgICAgYm91bmRzID0gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIG1UbXBCb3VuZHMuY2xlYXIoKTsKKyAgICAgICAgbVRtcENvbmZpZ3MuY2xlYXIoKTsKKyAgICAgICAgbVRtcEluc2V0Qm91bmRzLmNsZWFyKCk7CisgICAgICAgIEFycmF5TGlzdDxUYXNrUmVjb3JkPiB0YXNrcyA9IHN0YWNrLmdldEFsbFRhc2tzKCk7CisgICAgICAgIGZvciAoaW50IGkgPSB0YXNrcy5zaXplKCkgLSAxOyBpID49IDA7IGktLSkgeworICAgICAgICAgICAgVGFza1JlY29yZCB0YXNrID0gdGFza3MuZ2V0KGkpOworICAgICAgICAgICAgaWYgKHRhc2subVJlc2l6ZWFibGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoc3RhY2subVN0YWNrSWQgPT0gRlJFRUZPUk1fV09SS1NQQUNFX1NUQUNLX0lEKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZvciBmcmVlZm9ybSBzdGFjayB3ZSBkb24ndCBhZGp1c3QgdGhlIHNpemUgb2YgdGhlIHRhc2tzIHRvIG1hdGNoIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgLy8gb2YgdGhlIHN0YWNrLCBidXQgd2UgZG8gdHJ5IHRvIG1ha2Ugc3VyZSB0aGUgdGFza3MgYXJlIHN0aWxsIGNvbnRhaW5lZAorICAgICAgICAgICAgICAgICAgICAvLyB3aXRoIHRoZSBib3VuZHMgb2YgdGhlIHN0YWNrLgorICAgICAgICAgICAgICAgICAgICB0ZW1wUmVjdDIuc2V0KHRhc2subUJvdW5kcyk7CisgICAgICAgICAgICAgICAgICAgIGZpdFdpdGhpbkJvdW5kcyh0ZW1wUmVjdDIsIGJvdW5kcyk7CisgICAgICAgICAgICAgICAgICAgIHRhc2sudXBkYXRlT3ZlcnJpZGVDb25maWd1cmF0aW9uKHRlbXBSZWN0Mik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdGFzay51cGRhdGVPdmVycmlkZUNvbmZpZ3VyYXRpb24odGVtcFRhc2tCb3VuZHMgIT0gbnVsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdGVtcFRhc2tCb3VuZHMgOiBib3VuZHMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbVRtcENvbmZpZ3MucHV0KHRhc2sudGFza0lkLCB0YXNrLm1PdmVycmlkZUNvbmZpZyk7CisgICAgICAgICAgICBtVG1wQm91bmRzLnB1dCh0YXNrLnRhc2tJZCwgdGFzay5tQm91bmRzKTsKKyAgICAgICAgICAgIGlmICh0ZW1wVGFza0luc2V0Qm91bmRzICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBtVG1wSW5zZXRCb3VuZHMucHV0KHRhc2sudGFza0lkLCB0ZW1wVGFza0luc2V0Qm91bmRzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIFdlIG1pZ2h0IHRyaWdnZXIgYSBjb25maWd1cmF0aW9uIGNoYW5nZS4gU2F2ZSB0aGUgY3VycmVudCB0YXNrIGJvdW5kcyBmb3IgZnJlZXppbmcuCisgICAgICAgIG1XaW5kb3dNYW5hZ2VyLnByZXBhcmVGcmVlemluZ1Rhc2tCb3VuZHMoc3RhY2subVN0YWNrSWQpOworICAgICAgICBzdGFjay5tRnVsbHNjcmVlbiA9IG1XaW5kb3dNYW5hZ2VyLnJlc2l6ZVN0YWNrKHN0YWNrLm1TdGFja0lkLCBib3VuZHMsIG1UbXBDb25maWdzLAorICAgICAgICAgICAgICAgIG1UbXBCb3VuZHMsIG1UbXBJbnNldEJvdW5kcyk7CisgICAgICAgIHN0YWNrLnNldEJvdW5kcyhib3VuZHMpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBlbnN1cmVDb25maWd1cmF0aW9uQW5kUmVzdW1lKEFjdGl2aXR5U3RhY2sgc3RhY2ssIEFjdGl2aXR5UmVjb3JkIHIsCisgICAgICAgICAgICBib29sZWFuIHByZXNlcnZlV2luZG93cykgeworICAgICAgICBpZiAociA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZmluYWwgYm9vbGVhbiB1cGRhdGVkID0gc3RhY2suZW5zdXJlQWN0aXZpdHlDb25maWd1cmF0aW9uTG9ja2VkKHIsIDAsCisgICAgICAgICAgICAgICAgcHJlc2VydmVXaW5kb3dzKTsKKyAgICAgICAgLy8gQW5kIHdlIG5lZWQgdG8gbWFrZSBzdXJlIGF0IHRoaXMgcG9pbnQgdGhhdCBhbGwgb3RoZXIgYWN0aXZpdGllcworICAgICAgICAvLyBhcmUgbWFkZSB2aXNpYmxlIHdpdGggdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbi4KKyAgICAgICAgZW5zdXJlQWN0aXZpdGllc1Zpc2libGVMb2NrZWQociwgMCwgcHJlc2VydmVXaW5kb3dzKTsKKyAgICAgICAgaWYgKCF1cGRhdGVkKSB7CisgICAgICAgICAgICByZXN1bWVGb2N1c2VkU3RhY2tUb3BBY3Rpdml0eUxvY2tlZCgpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCByZXNpemVEb2NrZWRTdGFja0xvY2tlZChSZWN0IGRvY2tlZEJvdW5kcywgUmVjdCB0ZW1wRG9ja2VkVGFza0JvdW5kcywKKyAgICAgICAgICAgIFJlY3QgdGVtcERvY2tlZFRhc2tJbnNldEJvdW5kcywKKyAgICAgICAgICAgIFJlY3QgdGVtcE90aGVyVGFza0JvdW5kcywgUmVjdCB0ZW1wT3RoZXJUYXNrSW5zZXRCb3VuZHMsIGJvb2xlYW4gcHJlc2VydmVXaW5kb3dzKSB7CisgICAgICAgIGZpbmFsIEFjdGl2aXR5U3RhY2sgc3RhY2sgPSBnZXRTdGFjayhET0NLRURfU1RBQ0tfSUQpOworICAgICAgICBpZiAoc3RhY2sgPT0gbnVsbCkgeworICAgICAgICAgICAgU2xvZy53KFRBRywgInJlc2l6ZURvY2tlZFN0YWNrTG9ja2VkOiBkb2NrZWQgc3RhY2sgbm90IGZvdW5kIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBUcmFjZS50cmFjZUJlZ2luKFRSQUNFX1RBR19BQ1RJVklUWV9NQU5BR0VSLCAiYW0ucmVzaXplRG9ja2VkU3RhY2siKTsKKyAgICAgICAgbVdpbmRvd01hbmFnZXIuZGVmZXJTdXJmYWNlTGF5b3V0KCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBBY3Rpdml0eVJlY29yZCByID0gc3RhY2sudG9wUnVubmluZ0FjdGl2aXR5TG9ja2VkKCk7CisgICAgICAgICAgICByZXNpemVTdGFja1VuY2hlY2tlZExvY2tlZChzdGFjaywgZG9ja2VkQm91bmRzLCB0ZW1wRG9ja2VkVGFza0JvdW5kcywKKyAgICAgICAgICAgICAgICAgICAgdGVtcERvY2tlZFRhc2tJbnNldEJvdW5kcyk7CisKKyAgICAgICAgICAgIGlmIChzdGFjay5tRnVsbHNjcmVlbikgeworICAgICAgICAgICAgICAgIC8vIFRoZSBkb2NrIHN0YWNrIHdlbnQgZnVsbHNjcmVlbiB3aGljaCBpcyBraW5kYSBsaWtlIGRpc21pc3NpbmcgaXQuCisgICAgICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlIHdlIG1ha2UgYWxsIG90aGVyIHN0YXRpYyBzdGFja3MgZnVsbHNjcmVlbiBhbmQgbW92ZSBhbGwKKyAgICAgICAgICAgICAgICAvLyBkb2NrZWQgc3RhY2sgdGFza3MgdG8gdGhlIGZ1bGxzY3JlZW4gc3RhY2suCisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IEZJUlNUX1NUQVRJQ19TVEFDS19JRDsgaSA8PSBMQVNUX1NUQVRJQ19TVEFDS19JRDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChTdGFja0lkLmlzUmVzaXplYWJsZUJ5RG9ja2VkU3RhY2soaSkgJiYgZ2V0U3RhY2soaSkgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzaXplU3RhY2tMb2NrZWQoaSwgbnVsbCwgbnVsbCwgbnVsbCwgcHJlc2VydmVXaW5kb3dzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlIC8qIGFsbG93UmVzaXplSW5Eb2NrZWRNb2RlICovKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIEFycmF5TGlzdDxUYXNrUmVjb3JkPiB0YXNrcyA9IHN0YWNrLmdldEFsbFRhc2tzKCk7CisgICAgICAgICAgICAgICAgZmluYWwgaW50IGNvdW50ID0gdGFza3Muc2l6ZSgpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBtb3ZlVGFza1RvU3RhY2tMb2NrZWQodGFza3MuZ2V0KGkpLnRhc2tJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVUxMU0NSRUVOX1dPUktTUEFDRV9TVEFDS19JRCwgT05fVE9QLCBGT1JDRV9GT0NVUywgInJlc2l6ZVN0YWNrIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSAvKiBhbmltYXRlICovKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBzdGFjayBzaG91bGRuJ3QgY29udGFpbiBhbnltb3JlIGFjdGl2aXRpZXMsIHNvIG5vdGhpbmcgdG8gcmVzdW1lLgorICAgICAgICAgICAgICAgIHIgPSBudWxsOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBEb2NrZWQgc3RhY2tzIG9jY3VweSBhIGRlZGljYXRlZCByZWdpb24gb24gc2NyZWVuIHNvIHRoZSBzaXplIG9mIGFsbCBvdGhlcgorICAgICAgICAgICAgICAgIC8vIHN0YXRpYyBzdGFja3MgbmVlZCB0byBiZSBhZGp1c3RlZCBzbyB0aGV5IGRvbid0IG92ZXJsYXAgd2l0aCB0aGUgZG9ja2VkIHN0YWNrLgorICAgICAgICAgICAgICAgIC8vIFdlIGdldCB0aGUgYm91bmRzIHRvIHVzZSBmcm9tIHdpbmRvdyBtYW5hZ2VyIHdoaWNoIGhhcyBiZWVuIGFkanVzdGVkIGZvciBhbnkKKyAgICAgICAgICAgICAgICAvLyBzY3JlZW4gY29udHJvbHMgYW5kIGlzIGFsc28gdGhlIHNhbWUgZm9yIGFsbCBzdGFja3MuCisgICAgICAgICAgICAgICAgbVdpbmRvd01hbmFnZXIuZ2V0U3RhY2tEb2NrZWRNb2RlQm91bmRzKEhPTUVfU1RBQ0tfSUQsIHRlbXBSZWN0KTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gRklSU1RfU1RBVElDX1NUQUNLX0lEOyBpIDw9IExBU1RfU1RBVElDX1NUQUNLX0lEOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKFN0YWNrSWQuaXNSZXNpemVhYmxlQnlEb2NrZWRTdGFjayhpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlTdGFjayBvdGhlclN0YWNrID0gZ2V0U3RhY2soaSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3RoZXJTdGFjayAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzaXplU3RhY2tMb2NrZWQoaSwgdGVtcFJlY3QsIHRlbXBPdGhlclRhc2tCb3VuZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wT3RoZXJUYXNrSW5zZXRCb3VuZHMsIHByZXNlcnZlV2luZG93cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUgLyogYWxsb3dSZXNpemVJbkRvY2tlZE1vZGUgKi8pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZW5zdXJlQ29uZmlndXJhdGlvbkFuZFJlc3VtZShzdGFjaywgciwgcHJlc2VydmVXaW5kb3dzKTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIG1XaW5kb3dNYW5hZ2VyLmNvbnRpbnVlU3VyZmFjZUxheW91dCgpOworICAgICAgICAgICAgVHJhY2UudHJhY2VFbmQoVFJBQ0VfVEFHX0FDVElWSVRZX01BTkFHRVIpOworICAgICAgICB9CisKKyAgICAgICAgbVJlc2l6ZURvY2tlZFN0YWNrVGltZW91dC5ub3RpZnlSZXNpemluZyhkb2NrZWRCb3VuZHMsCisgICAgICAgICAgICAgICAgdGVtcERvY2tlZFRhc2tCb3VuZHMgIT0gbnVsbAorICAgICAgICAgICAgICAgIHx8IHRlbXBEb2NrZWRUYXNrSW5zZXRCb3VuZHMgIT0gbnVsbAorICAgICAgICAgICAgICAgIHx8IHRlbXBPdGhlclRhc2tCb3VuZHMgIT0gbnVsbAorICAgICAgICAgICAgICAgIHx8IHRlbXBPdGhlclRhc2tJbnNldEJvdW5kcyAhPSBudWxsKTsKKyAgICB9CisKKyAgICBib29sZWFuIHJlc2l6ZVRhc2tMb2NrZWQoVGFza1JlY29yZCB0YXNrLCBSZWN0IGJvdW5kcywgaW50IHJlc2l6ZU1vZGUsIGJvb2xlYW4gcHJlc2VydmVXaW5kb3cpIHsKICAgICAgICAgaWYgKCF0YXNrLm1SZXNpemVhYmxlKSB7CiAgICAgICAgICAgICBTbG9nLncoVEFHLCAicmVzaXplVGFzazogdGFzayAiICsgdGFzayArICIgbm90IHJlc2l6ZWFibGUuIik7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCiAgICAgICAgIGFkanVzdEZvck1pbmltYWxUYXNrRGltZW5zaW9ucyh0YXNrLCBib3VuZHMpOwpAQCAtMzM3NCw3ICsxOTcxLDcgQEAKICAgICAgICAgZmluYWwgYm9vbGVhbiBmb3JjZWQgPSAocmVzaXplTW9kZSAmIFJFU0laRV9NT0RFX0ZPUkNFRCkgIT0gMDsKICAgICAgICAgaWYgKHRhc2subUJvdW5kcyAhPSBudWxsICYmIHRhc2subUJvdW5kcy5lcXVhbHMoYm91bmRzKSAmJiAhZm9yY2VkKSB7CiAgICAgICAgICAgICAvLyBOb3RoaW5nIHRvIGRvIGhlcmUuLi4KLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFtV2luZG93TWFuYWdlci5pc1ZhbGlkVGFza0lkKHRhc2sudGFza0lkKSkgewpAQCAtMzM4Niw3ICsxOTgzLDcgQEAKICAgICAgICAgICAgICAgICAvLyByZS1yZXN0b3JlIHRoZSB0YXNrIHNvIGl0IGNhbiBoYXZlIHRoZSBwcm9wZXIgc3RhY2sgYXNzb2NpYXRpb24uCiAgICAgICAgICAgICAgICAgcmVzdG9yZVJlY2VudFRhc2tMb2NrZWQodGFzaywgRlJFRUZPUk1fV09SS1NQQUNFX1NUQUNLX0lEKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKICAgICAgICAgLy8gRG8gbm90IG1vdmUgdGhlIHRhc2sgdG8gYW5vdGhlciBzdGFjayBoZXJlLgpAQCAtMzQwOCwxMyArMjAwNSwxNCBAQAogICAgICAgICAgICAgICAgIC8vIEFsbCBvdGhlciBhY3Rpdml0aWVzIG11c3QgYmUgbWFkZSB2aXNpYmxlIHdpdGggdGhlaXIgY29ycmVjdCBjb25maWd1cmF0aW9uLgogICAgICAgICAgICAgICAgIGVuc3VyZUFjdGl2aXRpZXNWaXNpYmxlTG9ja2VkKHIsIDAsICFQUkVTRVJWRV9XSU5ET1dTKTsKICAgICAgICAgICAgICAgICBpZiAoIWtlcHQpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzdW1lVG9wQWN0aXZpdGllc0xvY2tlZChzdGFjaywgbnVsbCwgbnVsbCk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VtZUZvY3VzZWRTdGFja1RvcEFjdGl2aXR5TG9ja2VkKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIG1XaW5kb3dNYW5hZ2VyLnJlc2l6ZVRhc2sodGFzay50YXNrSWQsIGJvdW5kcywgdGFzay5tT3ZlcnJpZGVDb25maWcsIGtlcHQsIGZvcmNlZCk7CiAKICAgICAgICAgVHJhY2UudHJhY2VFbmQoVFJBQ0VfVEFHX0FDVElWSVRZX01BTkFHRVIpOworICAgICAgICByZXR1cm4ga2VwdDsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgYWRqdXN0Rm9yTWluaW1hbFRhc2tEaW1lbnNpb25zKFRhc2tSZWNvcmQgdGFzaywgUmVjdCBib3VuZHMpIHsKQEAgLTM1MzAsOCArMjEyOCwxNCBAQAogICAgIEFjdGl2aXR5U3RhY2sgbW92ZVRhc2tUb1N0YWNrVW5jaGVja2VkTG9ja2VkKAogICAgICAgICAgICAgVGFza1JlY29yZCB0YXNrLCBpbnQgc3RhY2tJZCwgYm9vbGVhbiB0b1RvcCwgYm9vbGVhbiBmb3JjZUZvY3VzLCBTdHJpbmcgcmVhc29uKSB7CiAgICAgICAgIGZpbmFsIEFjdGl2aXR5UmVjb3JkIHIgPSB0YXNrLmdldFRvcEFjdGl2aXR5KCk7Ci0gICAgICAgIGZpbmFsIGJvb2xlYW4gd2FzRm9jdXNlZCA9IGlzRm9jdXNlZFN0YWNrKHRhc2suc3RhY2spICYmICh0b3BSdW5uaW5nQWN0aXZpdHlMb2NrZWQoKSA9PSByKTsKLSAgICAgICAgZmluYWwgYm9vbGVhbiB3YXNSZXN1bWVkID0gd2FzRm9jdXNlZCAmJiAodGFzay5zdGFjay5tUmVzdW1lZEFjdGl2aXR5ID09IHIpOworICAgICAgICBmaW5hbCBBY3Rpdml0eVN0YWNrIHByZXZTdGFjayA9IHRhc2suc3RhY2s7CisgICAgICAgIGZpbmFsIGJvb2xlYW4gd2FzRm9jdXNlZCA9IGlzRm9jdXNlZFN0YWNrKHByZXZTdGFjaykgJiYgKHRvcFJ1bm5pbmdBY3Rpdml0eUxvY2tlZCgpID09IHIpOworICAgICAgICBmaW5hbCBib29sZWFuIHdhc1Jlc3VtZWQgPSB3YXNGb2N1c2VkICYmIChwcmV2U3RhY2subVJlc3VtZWRBY3Rpdml0eSA9PSByKTsKKyAgICAgICAgLy8gSW4gc29tZSBjYXNlcyB0aGUgZm9jdXNlZCBzdGFjayBpc24ndCB0aGUgZnJvbnQgc3RhY2suIEUuZy4gcGlubmVkIHN0YWNrLgorICAgICAgICAvLyBXaGVuZXZlciB3ZSBhcmUgbW92aW5nIHRoZSB0b3AgYWN0aXZpdHkgZnJvbSB0aGUgZnJvbnQgc3RhY2sgd2Ugd2FudCB0byBtYWtlIHN1cmUgdG8gbW92ZQorICAgICAgICAvLyB0aGUgc3RhY2sgdG8gdGhlIGZyb250LgorICAgICAgICBmaW5hbCBib29sZWFuIHdhc0Zyb250ID0gaXNGcm9udFN0YWNrKHByZXZTdGFjaykKKyAgICAgICAgICAgICAgICAmJiAocHJldlN0YWNrLnRvcFJ1bm5pbmdBY3Rpdml0eUxvY2tlZCgpID09IHIpOwogCiAgICAgICAgIGZpbmFsIGJvb2xlYW4gcmVzaXplYWJsZSA9IHRhc2subVJlc2l6ZWFibGU7CiAgICAgICAgIC8vIFRlbXBvcmFyaWx5IGRpc2FibGUgcmVzaXplYWJsaWxpdHkgb2YgdGFzayB3ZSBhcmUgbW92aW5nLiBXZSBkb24ndCB3YW50IGl0IHRvIGJlIHJlc2l6ZWQKQEAgLTM1NDQsOSArMjE0OCw5IEBACiAgICAgICAgIHN0YWNrLmFkZFRhc2sodGFzaywgdG9Ub3AsIHJlYXNvbik7CiAKICAgICAgICAgLy8gSWYgdGhlIHRhc2sgaGFkIGZvY3VzIGJlZm9yZSAob3Igd2UncmUgcmVxdWVzdGVkIHRvIG1vdmUgZm9jdXMpLAotICAgICAgICAvLyBtb3ZlIGZvY3VzIHRvIHRoZSBuZXcgc3RhY2suCi0gICAgICAgIHN0YWNrLnNldEZvY3VzQW5kUmVzdW1lU3RhdGVJZk5lZWRlZCgKLSAgICAgICAgICAgICAgICByLCBmb3JjZUZvY3VzIHx8IHdhc0ZvY3VzZWQsIHdhc1Jlc3VtZWQsIHJlYXNvbik7CisgICAgICAgIC8vIG1vdmUgZm9jdXMgdG8gdGhlIG5ldyBzdGFjayBieSBtb3ZpbmcgdGhlIHN0YWNrIHRvIHRoZSBmcm9udC4KKyAgICAgICAgc3RhY2subW92ZVRvRnJvbnRBbmRSZXN1bWVTdGF0ZUlmTmVlZGVkKAorICAgICAgICAgICAgICAgIHIsIGZvcmNlRm9jdXMgfHwgd2FzRm9jdXNlZCB8fCB3YXNGcm9udCwgd2FzUmVzdW1lZCwgcmVhc29uKTsKIAogICAgICAgICByZXR1cm4gc3RhY2s7CiAgICAgfQpAQCAtMzU2NiwxMyArMjE3MCwxNyBAQAogICAgICAgICB9CiAKICAgICAgICAgZmluYWwgQWN0aXZpdHlSZWNvcmQgdG9wQWN0aXZpdHkgPSB0YXNrLmdldFRvcEFjdGl2aXR5KCk7Ci0gICAgICAgIGlmIChTdGFja0lkLnByZXNlcnZlV2luZG93T25UYXNrTW92ZShzdGFja0lkKSAmJiB0b3BBY3Rpdml0eSAhPSBudWxsKSB7CisgICAgICAgIGZpbmFsIGJvb2xlYW4gbWlnaHRSZXBsYWNlV2luZG93ID0KKyAgICAgICAgICAgICAgICBTdGFja0lkLnByZXNlcnZlV2luZG93T25UYXNrTW92ZShzdGFja0lkKSAmJiB0b3BBY3Rpdml0eSAhPSBudWxsOworICAgICAgICBpZiAobWlnaHRSZXBsYWNlV2luZG93KSB7CiAgICAgICAgICAgICAvLyBXZSBhcmUgYWJvdXQgdG8gcmVsYXVuY2ggdGhlIGFjdGl2aXR5IGJlY2F1c2UgaXRzIGNvbmZpZ3VyYXRpb24gY2hhbmdlZCBkdWUgdG8KICAgICAgICAgICAgIC8vIGJlaW5nIG1heGltaXplZCwgaS5lLiBzaXplIGNoYW5nZS4gVGhlIGFjdGl2aXR5IHdpbGwgZmlyc3QgcmVtb3ZlIHRoZSBvbGQgd2luZG93CiAgICAgICAgICAgICAvLyBhbmQgdGhlbiBhZGQgYSBuZXcgb25lLiBUaGlzIGNhbGwgd2lsbCB0ZWxsIHdpbmRvdyBtYW5hZ2VyIGFib3V0IHRoaXMsIHNvIGl0IGNhbgogICAgICAgICAgICAgLy8gcHJlc2VydmUgdGhlIG9sZCB3aW5kb3cgdW50aWwgdGhlIG5ldyBvbmUgaXMgZHJhd24uIFRoaXMgcHJldmVudHMgaGF2aW5nIGEgZ2FwCiAgICAgICAgICAgICAvLyBiZXR3ZWVuIHRoZSByZW1vdmFsIGFuZCBhZGRpdGlvbiwgaW4gd2hpY2ggbm8gd2luZG93IGlzIHZpc2libGUuIFdlIGFsc28gd2FudCB0aGUKICAgICAgICAgICAgIC8vIGVudHJhbmNlIG9mIHRoZSBuZXcgd2luZG93IHRvIGJlIHByb3Blcmx5IGFuaW1hdGVkLgorICAgICAgICAgICAgLy8gTm90ZSBoZXJlIHdlIGFsd2F5cyBzZXQgdGhlIHJlcGxhY2luZyB3aW5kb3cgZmlyc3QsIGFzIHRoZSBmbGFncyBtaWdodCBiZSBuZWVkZWQKKyAgICAgICAgICAgIC8vIGR1cmluZyB0aGUgcmVsYXVuY2guIElmIHdlIGVuZCB1cCBub3QgZG9pbmcgYW55IHJlbGF1bmNoLCB3ZSBjbGVhciB0aGUgZmxhZ3MgbGF0ZXIuCiAgICAgICAgICAgICBtV2luZG93TWFuYWdlci5zZXRSZXBsYWNpbmdXaW5kb3codG9wQWN0aXZpdHkuYXBwVG9rZW4sIGFuaW1hdGUpOwogICAgICAgICB9CiAgICAgICAgIGZpbmFsIEFjdGl2aXR5U3RhY2sgc3RhY2sgPSBtb3ZlVGFza1RvU3RhY2tVbmNoZWNrZWRMb2NrZWQoCkBAIC0zNTgyLDIxICsyMTkwLDI5IEBACiAgICAgICAgICAgICBzdGFjay5tTm9BbmltQWN0aXZpdGllcy5hZGQodG9wQWN0aXZpdHkpOwogICAgICAgICB9CiAKKyAgICAgICAgYm9vbGVhbiBrZXB0ID0gdHJ1ZTsKICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSB0YXNrIGhhcyB0aGUgYXBwcm9wcmlhdGUgYm91bmRzL3NpemUgZm9yIHRoZSBzdGFjayBpdCBpcyBpbi4KICAgICAgICAgaWYgKHN0YWNrSWQgPT0gRlVMTFNDUkVFTl9XT1JLU1BBQ0VfU1RBQ0tfSUQgJiYgdGFzay5tQm91bmRzICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJlc2l6ZVRhc2tMb2NrZWQodGFzaywgc3RhY2subUJvdW5kcywgUkVTSVpFX01PREVfU1lTVEVNLCAhUFJFU0VSVkVfV0lORE9XUyk7CisgICAgICAgICAgICBrZXB0ID0gcmVzaXplVGFza0xvY2tlZCh0YXNrLCBzdGFjay5tQm91bmRzLCBSRVNJWkVfTU9ERV9TWVNURU0sICFQUkVTRVJWRV9XSU5ET1dTKTsKICAgICAgICAgfSBlbHNlIGlmIChzdGFja0lkID09IEZSRUVGT1JNX1dPUktTUEFDRV9TVEFDS19JRAogICAgICAgICAgICAgICAgICYmIHRhc2subUJvdW5kcyA9PSBudWxsICYmIHRhc2subUxhc3ROb25GdWxsc2NyZWVuQm91bmRzICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJlc2l6ZVRhc2tMb2NrZWQodGFzaywgdGFzay5tTGFzdE5vbkZ1bGxzY3JlZW5Cb3VuZHMsCisgICAgICAgICAgICBrZXB0ID0gcmVzaXplVGFza0xvY2tlZCh0YXNrLCB0YXNrLm1MYXN0Tm9uRnVsbHNjcmVlbkJvdW5kcywKICAgICAgICAgICAgICAgICAgICAgUkVTSVpFX01PREVfU1lTVEVNLCAhUFJFU0VSVkVfV0lORE9XUyk7CiAgICAgICAgIH0gZWxzZSBpZiAoc3RhY2tJZCA9PSBET0NLRURfU1RBQ0tfSUQgfHwgc3RhY2tJZCA9PSBQSU5ORURfU1RBQ0tfSUQpIHsKLSAgICAgICAgICAgIHJlc2l6ZVRhc2tMb2NrZWQodGFzaywgc3RhY2subUJvdW5kcywgUkVTSVpFX01PREVfU1lTVEVNLCAhUFJFU0VSVkVfV0lORE9XUyk7CisgICAgICAgICAgICBrZXB0ID0gcmVzaXplVGFza0xvY2tlZCh0YXNrLCBzdGFjay5tQm91bmRzLCBSRVNJWkVfTU9ERV9TWVNURU0sICFQUkVTRVJWRV9XSU5ET1dTKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtaWdodFJlcGxhY2VXaW5kb3cpIHsKKyAgICAgICAgICAgIC8vIElmIHdlIGRpZG4ndCBhY3R1YWwgZG8gYSByZWxhdW5jaCAoaW5kaWNhdGVkIGJ5IGtlcHQ9PXRydWUgbWVhbmluZyB3ZSBrZXB0IHRoZSBvbGQKKyAgICAgICAgICAgIC8vIHdpbmRvdyksIHdlIG5lZWQgdG8gY2xlYXIgdGhlIHJlcGxhY2Ugd2luZG93IHNldHRpbmdzLiBPdGhlcndpc2UsIHdlIHNjaGVkdWxlIGEKKyAgICAgICAgICAgIC8vIHRpbWVvdXQgdG8gcmVtb3ZlIHRoZSBvbGQgd2luZG93IGlmIHRoZSByZXBsYWNpbmcgd2luZG93IGlzIG5vdCBjb21pbmcgaW4gdGltZS4KKyAgICAgICAgICAgIG1XaW5kb3dNYW5hZ2VyLnNjaGVkdWxlQ2xlYXJSZXBsYWNpbmdXaW5kb3dJZk5lZWRlZCh0b3BBY3Rpdml0eS5hcHBUb2tlbiwgIWtlcHQpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gVGhlIHRhc2sgbWlnaHQgaGF2ZSBhbHJlYWR5IGJlZW4gcnVubmluZyBhbmQgaXRzIHZpc2liaWxpdHkgbmVlZHMgdG8gYmUgc3luY2hyb25pemVkIHdpdGgKICAgICAgICAgLy8gdGhlIHZpc2liaWxpdHkgb2YgdGhlIHN0YWNrIC8gd2luZG93cy4KICAgICAgICAgZW5zdXJlQWN0aXZpdGllc1Zpc2libGVMb2NrZWQobnVsbCwgMCwgIVBSRVNFUlZFX1dJTkRPV1MpOwotICAgICAgICByZXN1bWVUb3BBY3Rpdml0aWVzTG9ja2VkKCk7CisgICAgICAgIHJlc3VtZUZvY3VzZWRTdGFja1RvcEFjdGl2aXR5TG9ja2VkKCk7CiAKICAgICAgICAgaWYgKCF0YXNrLm1SZXNpemVhYmxlICYmIGlzU3RhY2tEb2NrZWRJbkVmZmVjdChzdGFja0lkKSkgewogICAgICAgICAgICAgc2hvd05vblJlc2l6ZWFibGVEb2NrVG9hc3QodGFza0lkKTsKQEAgLTM2MTcsNyArMjIzMyw3IEBACiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIW1TZXJ2aWNlLm1Gb3JjZVJlc2l6YWJsZUFjdGl2aXRpZXMgJiYgIXIuaW5mby5zdXBwb3J0c1BpcCkgeworICAgICAgICBpZiAoIW1TZXJ2aWNlLm1Gb3JjZVJlc2l6YWJsZUFjdGl2aXRpZXMgJiYgIXIuc3VwcG9ydHNQaWN0dXJlSW5QaWN0dXJlKCkpIHsKICAgICAgICAgICAgIFNsb2cudyhUQUcsCiAgICAgICAgICAgICAgICAgICAgICJtb3ZlVG9wU3RhY2tBY3Rpdml0eVRvUGlubmVkU3RhY2tMb2NrZWQ6IFBpY3R1cmUtSW4tUGljdHVyZSBub3Qgc3VwcG9ydGVkIGZvciAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHI9IiArIHIpOwpAQCAtMzY0MSwxMyArMjI1NywxOCBAQAogICAgICAgICB9CiAKICAgICAgICAgaWYgKGJvdW5kcyAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZXNpemVTdGFja0xvY2tlZChQSU5ORURfU1RBQ0tfSUQsIGJvdW5kcywgIVBSRVNFUlZFX1dJTkRPV1MsIHRydWUpOworICAgICAgICAgICAgcmVzaXplU3RhY2tMb2NrZWQoc3RhY2tJZCwgYm91bmRzLCBudWxsIC8qIHRlbXBUYXNrQm91bmRzICovLAorICAgICAgICAgICAgICAgICAgICBudWxsIC8qIHRlbXBUYXNrSW5zZXRCb3VuZHMgKi8sICFQUkVTRVJWRV9XSU5ET1dTLCB0cnVlKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFRoZSB0YXNrIG1pZ2h0IGhhdmUgYWxyZWFkeSBiZWVuIHJ1bm5pbmcgYW5kIGl0cyB2aXNpYmlsaXR5IG5lZWRzIHRvIGJlIHN5bmNocm9uaXplZCB3aXRoCiAgICAgICAgIC8vIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBzdGFjayAvIHdpbmRvd3MuCiAgICAgICAgIGVuc3VyZUFjdGl2aXRpZXNWaXNpYmxlTG9ja2VkKG51bGwsIDAsICFQUkVTRVJWRV9XSU5ET1dTKTsKLSAgICAgICAgcmVzdW1lVG9wQWN0aXZpdGllc0xvY2tlZCgpOworICAgICAgICByZXN1bWVGb2N1c2VkU3RhY2tUb3BBY3Rpdml0eUxvY2tlZCgpOworCisgICAgICAgIGlmIChzdGFja0lkID09IFBJTk5FRF9TVEFDS19JRCkgeworICAgICAgICAgICAgbVNlcnZpY2Uubm90aWZ5QWN0aXZpdHlQaW5uZWRMb2NrZWQoKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHZvaWQgcG9zaXRpb25UYXNrSW5TdGFja0xvY2tlZChpbnQgdGFza0lkLCBpbnQgc3RhY2tJZCwgaW50IHBvc2l0aW9uKSB7CkBAIC0zNjY2LDEwICsyMjg3LDEyIEBACiAgICAgICAgIC8vIFRoZSB0YXNrIG1pZ2h0IGhhdmUgYWxyZWFkeSBiZWVuIHJ1bm5pbmcgYW5kIGl0cyB2aXNpYmlsaXR5IG5lZWRzIHRvIGJlIHN5bmNocm9uaXplZCB3aXRoCiAgICAgICAgIC8vIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBzdGFjayAvIHdpbmRvd3MuCiAgICAgICAgIHN0YWNrLmVuc3VyZUFjdGl2aXRpZXNWaXNpYmxlTG9ja2VkKG51bGwsIDAsICFQUkVTRVJWRV9XSU5ET1dTKTsKLSAgICAgICAgcmVzdW1lVG9wQWN0aXZpdGllc0xvY2tlZCgpOworICAgICAgICByZXN1bWVGb2N1c2VkU3RhY2tUb3BBY3Rpdml0eUxvY2tlZCgpOwogICAgIH0KIAogICAgIEFjdGl2aXR5UmVjb3JkIGZpbmRUYXNrTG9ja2VkKEFjdGl2aXR5UmVjb3JkIHIpIHsKKyAgICAgICAgbVRtcEZpbmRUYXNrUmVzdWx0LnIgPSBudWxsOworICAgICAgICBtVG1wRmluZFRhc2tSZXN1bHQubWF0Y2hlZEJ5Um9vdEFmZmluaXR5ID0gZmFsc2U7CiAgICAgICAgIGlmIChERUJVR19UQVNLUykgU2xvZy5kKFRBR19UQVNLUywgIkxvb2tpbmcgZm9yIHRhc2sgb2YgIiArIHIpOwogICAgICAgICBmb3IgKGludCBkaXNwbGF5TmR4ID0gbUFjdGl2aXR5RGlzcGxheXMuc2l6ZSgpIC0gMTsgZGlzcGxheU5keCA+PSAwOyAtLWRpc3BsYXlOZHgpIHsKICAgICAgICAgICAgIGZpbmFsIEFycmF5TGlzdDxBY3Rpdml0eVN0YWNrPiBzdGFja3MgPSBtQWN0aXZpdHlEaXNwbGF5cy52YWx1ZUF0KGRpc3BsYXlOZHgpLm1TdGFja3M7CkBAIC0zNjg0LDE0ICsyMzA3LDE4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNraXBwaW5nIHN0YWNrOiAobmV3IHRhc2sgbm90IGFsbG93ZWQpICIgKyBzdGFjayk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmaW5hbCBBY3Rpdml0eVJlY29yZCBhciA9IHN0YWNrLmZpbmRUYXNrTG9ja2VkKHIpOwotICAgICAgICAgICAgICAgIGlmIChhciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBhcjsKKyAgICAgICAgICAgICAgICBzdGFjay5maW5kVGFza0xvY2tlZChyLCBtVG1wRmluZFRhc2tSZXN1bHQpOworICAgICAgICAgICAgICAgIC8vIEl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgdGFzayBpbiBtdWx0aXBsZSBzdGFja3Mgd2l0aCB0aGUgc2FtZSByb290IGFmZmluaXR5LgorICAgICAgICAgICAgICAgIC8vIElmIHRoZSBtYXRjaCB3ZSBmb3VuZCB3YXMgYmFzZWQgb24gcm9vdCBhZmZpbml0eSB3ZSBrZWVwIG9uIGxvb2tpbmcgdG8gc2VlIGlmCisgICAgICAgICAgICAgICAgLy8gdGhlcmUgaXMgYSBiZXR0ZXIgbWF0Y2ggaW4gYW5vdGhlciBzdGFjay4gV2UgZXZlbnR1YWxseSByZXR1cm4gdGhlIG1hdGNoIGJhc2VkCisgICAgICAgICAgICAgICAgLy8gb24gcm9vdCBhZmZpbml0eSBpZiB3ZSBkb24ndCBmaW5kIGEgYmV0dGVyIG1hdGNoLgorICAgICAgICAgICAgICAgIGlmIChtVG1wRmluZFRhc2tSZXN1bHQuciAhPSBudWxsICYmICFtVG1wRmluZFRhc2tSZXN1bHQubWF0Y2hlZEJ5Um9vdEFmZmluaXR5KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtVG1wRmluZFRhc2tSZXN1bHQucjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKERFQlVHX1RBU0tTKSBTbG9nLmQoVEFHX1RBU0tTLCAiTm8gdGFzayBmb3VuZCIpOwotICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgaWYgKERFQlVHX1RBU0tTICYmIG1UbXBGaW5kVGFza1Jlc3VsdC5yID09IG51bGwpIFNsb2cuZChUQUdfVEFTS1MsICJObyB0YXNrIGZvdW5kIik7CisgICAgICAgIHJldHVybiBtVG1wRmluZFRhc2tSZXN1bHQucjsKICAgICB9CiAKICAgICBBY3Rpdml0eVJlY29yZCBmaW5kQWN0aXZpdHlMb2NrZWQoSW50ZW50IGludGVudCwgQWN0aXZpdHlJbmZvIGluZm8pIHsKQEAgLTM3NzAsNyArMjM5Nyw3IEBACiAgICAgICAgICAgICAgICAgZmluYWwgQWN0aXZpdHlTdGFjayBzdGFjayA9IHN0YWNrcy5nZXQoc3RhY2tOZHgpOwogICAgICAgICAgICAgICAgIHN0YWNrLmF3YWtlRnJvbVNsZWVwaW5nTG9ja2VkKCk7CiAgICAgICAgICAgICAgICAgaWYgKGlzRm9jdXNlZFN0YWNrKHN0YWNrKSkgewotICAgICAgICAgICAgICAgICAgICByZXN1bWVUb3BBY3Rpdml0aWVzTG9ja2VkKCk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VtZUZvY3VzZWRTdGFja1RvcEFjdGl2aXR5TG9ja2VkKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC00NTM5LDcgKzMxNjYsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIHNob3dOb25SZXNpemVhYmxlRG9ja1RvYXN0KGludCB0YXNrSWQpIHsKKyAgICB2b2lkIHNob3dOb25SZXNpemVhYmxlRG9ja1RvYXN0KGludCB0YXNrSWQpIHsKICAgICAgICAgbVdpbmRvd01hbmFnZXIuc2NoZWR1bGVTaG93Tm9uUmVzaXplYWJsZURvY2tUb2FzdCh0YXNrSWQpOwogICAgIH0KIApAQCAtNDU2NSw3ICszMTkyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHX0xPQ0tUQVNLKSBTbG9nLncoVEFHX0xPQ0tUQVNLLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXRMb2NrVGFza01vZGVMb2NrZWQ6IFRhc2tzIHJlbWFpbmluZywgY2FuJ3QgdW5sb2NrIik7CiAgICAgICAgICAgICAgICAgICAgIGxvY2tlZFRhc2sucGVyZm9ybUNsZWFyVGFza0xvY2tlZCgpOwotICAgICAgICAgICAgICAgICAgICByZXN1bWVUb3BBY3Rpdml0aWVzTG9ja2VkKCk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VtZUZvY3VzZWRTdGFja1RvcEFjdGl2aXR5TG9ja2VkKCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC00NjA2LDcgKzMyMzMsNyBAQAogCiAgICAgICAgIGlmIChhbmRSZXN1bWUpIHsKICAgICAgICAgICAgIGZpbmRUYXNrVG9Nb3ZlVG9Gcm9udExvY2tlZCh0YXNrLCAwLCBudWxsLCByZWFzb24pOwotICAgICAgICAgICAgcmVzdW1lVG9wQWN0aXZpdGllc0xvY2tlZCgpOworICAgICAgICAgICAgcmVzdW1lRm9jdXNlZFN0YWNrVG9wQWN0aXZpdHlMb2NrZWQoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNDY3NCw3ICszMzAxLDcgQEAKICAgICAgICAgICAgIGRpZFNvbWV0aGluZyA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGRpZFNvbWV0aGluZykgewotICAgICAgICAgICAgcmVzdW1lVG9wQWN0aXZpdGllc0xvY2tlZCgpOworICAgICAgICAgICAgcmVzdW1lRm9jdXNlZFN0YWNrVG9wQWN0aXZpdHlMb2NrZWQoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNDY4Miw2ICszMzA5LDE0IEBACiAgICAgICAgIHJldHVybiBtTG9ja1Rhc2tNb2RlU3RhdGU7CiAgICAgfQogCisgICAgdm9pZCBhY3Rpdml0eVJlbGF1bmNoZWRMb2NrZWQoSUJpbmRlciB0b2tlbikgeworICAgICAgICBtV2luZG93TWFuYWdlci5ub3RpZnlBcHBSZWxhdW5jaGluZ0ZpbmlzaGVkKHRva2VuKTsKKyAgICB9CisKKyAgICB2b2lkIGFjdGl2aXR5UmVsYXVuY2hpbmdMb2NrZWQoQWN0aXZpdHlSZWNvcmQgcikgeworICAgICAgICBtV2luZG93TWFuYWdlci5ub3RpZnlBcHBSZWxhdW5jaGluZyhyLmFwcFRva2VuKTsKKyAgICB9CisKICAgICB2b2lkIGxvZ1N0YWNrU3RhdGUoKSB7CiAgICAgICAgIG1BY3Rpdml0eU1ldHJpY3NMb2dnZXIubG9nV2luZG93U3RhdGUoKTsKICAgICB9CkBAIC00NzIxLDcgKzMzNTYsNyBAQAogICAgICAgICAgICAgICAgIH0gYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBSRVNVTUVfVE9QX0FDVElWSVRZX01TRzogewogICAgICAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1TZXJ2aWNlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bWVUb3BBY3Rpdml0aWVzTG9ja2VkKCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bWVGb2N1c2VkU3RhY2tUb3BBY3Rpdml0eUxvY2tlZCgpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIFNMRUVQX1RJTUVPVVRfTVNHOiB7CkBAIC00OTU2LDcgKzM1OTEsNyBAQAogICAgICAgICAgICAgICAgIGxvbmcgb3JpZ0lkID0gQmluZGVyLmNsZWFyQ2FsbGluZ0lkZW50aXR5KCk7CiAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgbVN0YWNrLmZpbmlzaEFsbEFjdGl2aXRpZXNMb2NrZWQoZmFsc2UpOwotICAgICAgICAgICAgICAgICAgICByZW1vdmVQZW5kaW5nQWN0aXZpdHlMYXVuY2hlc0xvY2tlZChtU3RhY2spOworICAgICAgICAgICAgICAgICAgICBtU2VydmljZS5tQWN0aXZpdHlTdGFydGVyLnJlbW92ZVBlbmRpbmdBY3Rpdml0eUxhdW5jaGVzTG9ja2VkKG1TdGFjayk7CiAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgICAgICAgICAgQmluZGVyLnJlc3RvcmVDYWxsaW5nSWRlbnRpdHkob3JpZ0lkKTsKICAgICAgICAgICAgICAgICB9CkBAIC00OTc1LDIyICszNjEwLDcgQEAKIAogICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHVibGljIGZpbmFsIGludCBzdGFydEFjdGl2aXR5KEludGVudCBpbnRlbnQpIHsKLSAgICAgICAgICAgIG1TZXJ2aWNlLmVuZm9yY2VOb3RJc29sYXRlZENhbGxlcigiQWN0aXZpdHlDb250YWluZXIuc3RhcnRBY3Rpdml0eSIpOwotICAgICAgICAgICAgZmluYWwgaW50IHVzZXJJZCA9IG1TZXJ2aWNlLm1Vc2VyQ29udHJvbGxlci5oYW5kbGVJbmNvbWluZ1VzZXIoQmluZGVyLmdldENhbGxpbmdQaWQoKSwKLSAgICAgICAgICAgICAgICAgICAgQmluZGVyLmdldENhbGxpbmdVaWQoKSwgbUN1cnJlbnRVc2VyLCBmYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlNYW5hZ2VyU2VydmljZS5BTExPV19GVUxMX09OTFksICJBY3Rpdml0eUNvbnRhaW5lciIsIG51bGwpOwotCi0gICAgICAgICAgICAvLyBUT0RPOiBTd2l0Y2ggdG8gdXNlciBhcHAgc3RhY2tzIGhlcmUuCi0gICAgICAgICAgICBTdHJpbmcgbWltZVR5cGUgPSBpbnRlbnQuZ2V0VHlwZSgpOwotICAgICAgICAgICAgZmluYWwgVXJpIGRhdGEgPSBpbnRlbnQuZ2V0RGF0YSgpOwotICAgICAgICAgICAgaWYgKG1pbWVUeXBlID09IG51bGwgJiYgZGF0YSAhPSBudWxsICYmICJjb250ZW50Ii5lcXVhbHMoZGF0YS5nZXRTY2hlbWUoKSkpIHsKLSAgICAgICAgICAgICAgICBtaW1lVHlwZSA9IG1TZXJ2aWNlLmdldFByb3ZpZGVyTWltZVR5cGUoZGF0YSwgdXNlcklkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNoZWNrRW1iZWRkZWRBbGxvd2VkSW5uZXIodXNlcklkLCBpbnRlbnQsIG1pbWVUeXBlKTsKLQotICAgICAgICAgICAgaW50ZW50LmFkZEZsYWdzKEZPUkNFX05FV19UQVNLX0ZMQUdTKTsKLSAgICAgICAgICAgIHJldHVybiBzdGFydEFjdGl2aXR5TWF5V2FpdChudWxsLCAtMSwgbnVsbCwgaW50ZW50LCBtaW1lVHlwZSwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwKLSAgICAgICAgICAgICAgICAgICAgMCwgMCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgZmFsc2UsIHVzZXJJZCwgdGhpcywgbnVsbCk7CisgICAgICAgICAgICByZXR1cm4gbVNlcnZpY2Uuc3RhcnRBY3Rpdml0eShpbnRlbnQsIHRoaXMpOwogICAgICAgICB9CiAKICAgICAgICAgQE92ZXJyaWRlCkBAIC01MDE0LDcgKzM2MzQsNyBAQAogICAgICAgICAgICAgICAgICAgICBGT1JDRV9ORVdfVEFTS19GTEFHUywgRk9SQ0VfTkVXX1RBU0tfRkxBR1MsIG51bGwsIHRoaXMpOwogICAgICAgICB9CiAKLSAgICAgICAgcHJpdmF0ZSB2b2lkIGNoZWNrRW1iZWRkZWRBbGxvd2VkSW5uZXIoaW50IHVzZXJJZCwgSW50ZW50IGludGVudCwgU3RyaW5nIHJlc29sdmVkVHlwZSkgeworICAgICAgICB2b2lkIGNoZWNrRW1iZWRkZWRBbGxvd2VkSW5uZXIoaW50IHVzZXJJZCwgSW50ZW50IGludGVudCwgU3RyaW5nIHJlc29sdmVkVHlwZSkgewogICAgICAgICAgICAgQWN0aXZpdHlJbmZvIGFJbmZvID0gcmVzb2x2ZUFjdGl2aXR5KGludGVudCwgcmVzb2x2ZWRUeXBlLCAwLCBudWxsLCB1c2VySWQpOwogICAgICAgICAgICAgaWYgKGFJbmZvICE9IG51bGwgJiYgKGFJbmZvLmZsYWdzICYgQWN0aXZpdHlJbmZvLkZMQUdfQUxMT1dfRU1CRURERUQpID09IDApIHsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFeGNlcHRpb24oCkBAIC01MTE3LDcgKzM3MzcsNyBAQAogCiAgICAgICAgICAgICBtU3VyZmFjZSA9IHN1cmZhY2U7CiAgICAgICAgICAgICBpZiAoc3VyZmFjZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbVN0YWNrLnJlc3VtZVRvcEFjdGl2aXR5TG9ja2VkKG51bGwpOworICAgICAgICAgICAgICAgIHJlc3VtZUZvY3VzZWRTdGFja1RvcEFjdGl2aXR5TG9ja2VkKCk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIG1Db250YWluZXJTdGF0ZSA9IENPTlRBSU5FUl9TVEFURV9OT19TVVJGQUNFOwogICAgICAgICAgICAgICAgICgoVmlydHVhbEFjdGl2aXR5RGlzcGxheSkgbUFjdGl2aXR5RGlzcGxheSkuc2V0U3VyZmFjZShudWxsKTsKQEAgLTUxNzEsNyArMzc5MSw3IEBACiAKICAgICAgICAgLyoqIEFsbCBvZiB0aGUgc3RhY2tzIG9uIHRoaXMgZGlzcGxheS4gT3JkZXIgbWF0dGVycywgdG9wbW9zdCBzdGFjayBpcyBpbiBmcm9udCBvZiBhbGwgb3RoZXIKICAgICAgICAgICogc3RhY2tzLCBib3R0b21tb3N0IGJlaGluZC4gQWNjZXNzZWQgZGlyZWN0bHkgYnkgQWN0aXZpdHlNYW5hZ2VyIHBhY2thZ2UgY2xhc3NlcyAqLwotICAgICAgICBmaW5hbCBBcnJheUxpc3Q8QWN0aXZpdHlTdGFjaz4gbVN0YWNrcyA9IG5ldyBBcnJheUxpc3Q8QWN0aXZpdHlTdGFjaz4oKTsKKyAgICAgICAgZmluYWwgQXJyYXlMaXN0PEFjdGl2aXR5U3RhY2s+IG1TdGFja3MgPSBuZXcgQXJyYXlMaXN0PD4oKTsKIAogICAgICAgICBBY3Rpdml0eVJlY29yZCBtVmlzaWJsZUJlaGluZEFjdGl2aXR5OwogCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL0FjdGl2aXR5U3RhcnRlci5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9BY3Rpdml0eVN0YXJ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzEyNjEzCi0tLSAvZGV2L251bGwKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9BY3Rpdml0eVN0YXJ0ZXIuamF2YQpAQCAtMCwwICsxLDE3MzUgQEAKK3BhY2thZ2UgY29tLmFuZHJvaWQuc2VydmVyLmFtOworCitpbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5LlJFU1VMVF9DQU5DRUxFRDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLklOVEVOVF9TRU5ERVJfQUNUSVZJVFk7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5TVEFSVF9DTEFTU19OT1RfRk9VTkQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5TVEFSVF9ERUxJVkVSRURfVE9fVE9QOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuU1RBUlRfRkxBR19PTkxZX0lGX05FRURFRDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX1JFVFVSTl9JTlRFTlRfVE9fQ0FMTEVSOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuU1RBUlRfUkVUVVJOX0xPQ0tfVEFTS19NT0RFX1ZJT0xBVElPTjsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX1NVQ0NFU1M7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5TVEFSVF9UQVNLX1RPX0ZST05UOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuU3RhY2tJZDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlN0YWNrSWQuRE9DS0VEX1NUQUNLX0lEOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuU3RhY2tJZC5GUkVFRk9STV9XT1JLU1BBQ0VfU1RBQ0tfSUQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5TdGFja0lkLkZVTExTQ1JFRU5fV09SS1NQQUNFX1NUQUNLX0lEOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuU3RhY2tJZC5IT01FX1NUQUNLX0lEOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuU3RhY2tJZC5JTlZBTElEX1NUQUNLX0lEOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuU3RhY2tJZC5QSU5ORURfU1RBQ0tfSUQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLlBlbmRpbmdJbnRlbnQuRkxBR19DQU5DRUxfQ1VSUkVOVDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5hcHAuUGVuZGluZ0ludGVudC5GTEFHX0lNTVVUQUJMRTsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5hcHAuUGVuZGluZ0ludGVudC5GTEFHX09ORV9TSE9UOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dC5LRVlHVUFSRF9TRVJWSUNFOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQuSW50ZW50LkVYVFJBX0lOVEVOVDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LkludGVudC5FWFRSQV9QQUNLQUdFX05BTUU7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5JbnRlbnQuRVhUUkFfVEFTS19JRDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LkludGVudC5GTEFHX0FDVElWSVRZX0NMRUFSX1RBU0s7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5JbnRlbnQuRkxBR19BQ1RJVklUWV9DTEVBUl9UT1A7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5JbnRlbnQuRkxBR19BQ1RJVklUWV9FWENMVURFX0ZST01fUkVDRU5UUzsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LkludGVudC5GTEFHX0FDVElWSVRZX0xBVU5DSF9UT19TSURFOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQuSW50ZW50LkZMQUdfQUNUSVZJVFlfTVVMVElQTEVfVEFTSzsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LkludGVudC5GTEFHX0FDVElWSVRZX05FV19ET0NVTUVOVDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LkludGVudC5GTEFHX0FDVElWSVRZX05FV19UQVNLOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQuSW50ZW50LkZMQUdfQUNUSVZJVFlfTk9fQU5JTUFUSU9OOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQuSW50ZW50LkZMQUdfQUNUSVZJVFlfTk9fVVNFUl9BQ1RJT047CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5JbnRlbnQuRkxBR19BQ1RJVklUWV9UQVNLX09OX0hPTUU7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5JbnRlbnQuRkxBR19BQ1RJVklUWV9QUkVWSU9VU19JU19UT1A7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5JbnRlbnQuRkxBR19BQ1RJVklUWV9SRU9SREVSX1RPX0ZST05UOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQuSW50ZW50LkZMQUdfQUNUSVZJVFlfUkVTRVRfVEFTS19JRl9ORUVERUQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5JbnRlbnQuRkxBR19BQ1RJVklUWV9SRVRBSU5fSU5fUkVDRU5UUzsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LkludGVudC5GTEFHX0FDVElWSVRZX1NJTkdMRV9UT1A7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5wbS5BY3Rpdml0eUluZm8uRE9DVU1FTlRfTEFVTkNIX0FMV0FZUzsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LnBtLkFjdGl2aXR5SW5mby5MQVVOQ0hfU0lOR0xFX0lOU1RBTkNFOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQucG0uQWN0aXZpdHlJbmZvLkxBVU5DSF9TSU5HTEVfVEFTSzsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LnBtLkFjdGl2aXR5SW5mby5MQVVOQ0hfU0lOR0xFX1RPUDsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX0NPTkZJR1VSQVRJT047CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eU1hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19GT0NVUzsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX1BFUk1JU1NJT05TX1JFVklFVzsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX1JFU1VMVFM7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eU1hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19TVEFDSzsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX1RBU0tTOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfVVNFUl9MRUFWSU5HOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlNYW5hZ2VyRGVidWdDb25maWcuUE9TVEZJWF9DT05GSUdVUkFUSU9OOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlNYW5hZ2VyRGVidWdDb25maWcuUE9TVEZJWF9GT0NVUzsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5TWFuYWdlckRlYnVnQ29uZmlnLlBPU1RGSVhfUkVTVUxUUzsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5TWFuYWdlckRlYnVnQ29uZmlnLlBPU1RGSVhfVVNFUl9MRUFWSU5HOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlNYW5hZ2VyRGVidWdDb25maWcuVEFHX0FNOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlNYW5hZ2VyRGVidWdDb25maWcuVEFHX1dJVEhfQ0xBU1NfTkFNRTsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5TWFuYWdlclNlcnZpY2UuQU5JTUFURTsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5UmVjb3JkLkhPTUVfQUNUSVZJVFlfVFlQRTsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5UmVjb3JkLlJFQ0VOVFNfQUNUSVZJVFlfVFlQRTsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5U3RhY2suQWN0aXZpdHlTdGF0ZS5SRVNVTUVEOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlTdGFja1N1cGVydmlzb3IuQ1JFQVRFX0lGX05FRURFRDsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5U3RhY2tTdXBlcnZpc29yLkZPUkNFX0ZPQ1VTOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlTdGFja1N1cGVydmlzb3IuT05fVE9QOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlTdGFja1N1cGVydmlzb3IuVEFHX1RBU0tTOworCitpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7CitpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5T3B0aW9uczsKK2ltcG9ydCBhbmRyb2lkLmFwcC5BcHBHbG9iYWxzOworaW1wb3J0IGFuZHJvaWQuYXBwLklBY3Rpdml0eUNvbnRhaW5lcjsKK2ltcG9ydCBhbmRyb2lkLmFwcC5JQWN0aXZpdHlNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQuYXBwLklBcHBsaWNhdGlvblRocmVhZDsKK2ltcG9ydCBhbmRyb2lkLmFwcC5LZXlndWFyZE1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC5hcHAuUGVuZGluZ0ludGVudDsKK2ltcG9ydCBhbmRyb2lkLmFwcC5Qcm9maWxlckluZm87CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWU7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LklJbnRlbnRTZW5kZXI7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50U2VuZGVyOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5BY3Rpdml0eUluZm87CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLkFwcGxpY2F0aW9uSW5mbzsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUmVzb2x2ZUluZm87CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlVzZXJJbmZvOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuQ29uZmlndXJhdGlvbjsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3Q7CitpbXBvcnQgYW5kcm9pZC5vcy5CaW5kZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5CdWlsZDsKK2ltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKK2ltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CitpbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsKK2ltcG9ydCBhbmRyb2lkLm9zLlVzZXJIYW5kbGU7CitpbXBvcnQgYW5kcm9pZC5vcy5Vc2VyTWFuYWdlcjsKK2ltcG9ydCBhbmRyb2lkLnNlcnZpY2Uudm9pY2UuSVZvaWNlSW50ZXJhY3Rpb25TZXNzaW9uOworaW1wb3J0IGFuZHJvaWQudXRpbC5FdmVudExvZzsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuU2xvZzsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuRGlzcGxheTsKKworaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLmFwcC5IZWF2eVdlaWdodFN3aXRjaGVyQWN0aXZpdHk7CitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuYXBwLklWb2ljZUludGVyYWN0b3I7CitpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5U3RhY2tTdXBlcnZpc29yLlBlbmRpbmdBY3Rpdml0eUxhdW5jaDsKK2ltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlclNlcnZpY2U7CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworCisvKioKKyAqIENvbnRyb2xsZXIgZm9yIGludGVycHJldGluZyBob3cgYW5kIHRoZW4gbGF1bmNoaW5nIGFjdGl2aXRpZXMuCisgKgorICogVGhpcyBjbGFzcyBjb2xsZWN0cyBhbGwgdGhlIGxvZ2ljIGZvciBkZXRlcm1pbmluZyBob3cgYW4gaW50ZW50IGFuZCBmbGFncyBzaG91bGQgYmUgdHVybmVkIGludG8KKyAqIGFuIGFjdGl2aXR5IGFuZCBhc3NvY2lhdGVkIHRhc2sgYW5kIHN0YWNrLgorICovCitjbGFzcyBBY3Rpdml0eVN0YXJ0ZXIgeworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSBUQUdfV0lUSF9DTEFTU19OQU1FID8gIkFjdGl2aXR5U3RhcnRlciIgOiBUQUdfQU07CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBR19SRVNVTFRTID0gVEFHICsgUE9TVEZJWF9SRVNVTFRTOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdfRk9DVVMgPSBUQUcgKyBQT1NURklYX0ZPQ1VTOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdfQ09ORklHVVJBVElPTiA9IFRBRyArIFBPU1RGSVhfQ09ORklHVVJBVElPTjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHX1VTRVJfTEVBVklORyA9IFRBRyArIFBPU1RGSVhfVVNFUl9MRUFWSU5HOworCisgICAgcHJpdmF0ZSBmaW5hbCBBY3Rpdml0eU1hbmFnZXJTZXJ2aWNlIG1TZXJ2aWNlOworICAgIHByaXZhdGUgZmluYWwgQWN0aXZpdHlTdGFja1N1cGVydmlzb3IgbVN1cGVydmlzb3I7CisgICAgcHJpdmF0ZSBXaW5kb3dNYW5hZ2VyU2VydmljZSBtV2luZG93TWFuYWdlcjsKKworICAgIGZpbmFsIEFycmF5TGlzdDxQZW5kaW5nQWN0aXZpdHlMYXVuY2g+IG1QZW5kaW5nQWN0aXZpdHlMYXVuY2hlcyA9IG5ldyBBcnJheUxpc3Q8PigpOworCisgICAgLy8gU2hhcmUgc3RhdGUgdmFyaWFibGUgYW1vbmcgbWV0aG9kcyB3aGVuIHN0YXJ0aW5nIGFuIGFjdGl2aXR5LgorICAgIHByaXZhdGUgQWN0aXZpdHlSZWNvcmQgbVN0YXJ0QWN0aXZpdHk7CisgICAgcHJpdmF0ZSBJbnRlbnQgbUludGVudDsKKyAgICBwcml2YXRlIGludCBtQ2FsbGluZ1VpZDsKKyAgICBwcml2YXRlIEFjdGl2aXR5T3B0aW9ucyBtT3B0aW9uczsKKworICAgIHByaXZhdGUgYm9vbGVhbiBtTGF1bmNoU2luZ2xlVG9wOworICAgIHByaXZhdGUgYm9vbGVhbiBtTGF1bmNoU2luZ2xlSW5zdGFuY2U7CisgICAgcHJpdmF0ZSBib29sZWFuIG1MYXVuY2hTaW5nbGVUYXNrOworICAgIHByaXZhdGUgYm9vbGVhbiBtTGF1bmNoVGFza0JlaGluZDsKKyAgICBwcml2YXRlIGludCBtTGF1bmNoRmxhZ3M7CisKKyAgICBwcml2YXRlIFJlY3QgbUxhdW5jaEJvdW5kczsKKworICAgIHByaXZhdGUgQWN0aXZpdHlSZWNvcmQgbU5vdFRvcDsKKyAgICBwcml2YXRlIGJvb2xlYW4gbURvUmVzdW1lOworICAgIHByaXZhdGUgaW50IG1TdGFydEZsYWdzOworICAgIHByaXZhdGUgQWN0aXZpdHlSZWNvcmQgbVNvdXJjZVJlY29yZDsKKworICAgIHByaXZhdGUgVGFza1JlY29yZCBtSW5UYXNrOworICAgIHByaXZhdGUgYm9vbGVhbiBtQWRkaW5nVG9UYXNrOworICAgIHByaXZhdGUgVGFza1JlY29yZCBtUmV1c2VUYXNrOworCisgICAgcHJpdmF0ZSBBY3Rpdml0eUluZm8gbU5ld1Rhc2tJbmZvOworICAgIHByaXZhdGUgSW50ZW50IG1OZXdUYXNrSW50ZW50OworICAgIHByaXZhdGUgQWN0aXZpdHlTdGFjayBtU291cmNlU3RhY2s7CisgICAgcHJpdmF0ZSBBY3Rpdml0eVN0YWNrIG1UYXJnZXRTdGFjazsKKyAgICAvLyBUT0RPOiBJcyB0aGUgbU1vdmVIb21lIGZsYWcgcmVhbGx5IG5lZWRlZD8KKyAgICBwcml2YXRlIGJvb2xlYW4gbU1vdmVkSG9tZTsKKyAgICBwcml2YXRlIGJvb2xlYW4gbU1vdmVkVG9Gcm9udDsKKyAgICBwcml2YXRlIGJvb2xlYW4gbU5vQW5pbWF0aW9uOworICAgIHByaXZhdGUgYm9vbGVhbiBtS2VlcEN1clRyYW5zaXRpb247CisKKyAgICBwcml2YXRlIElWb2ljZUludGVyYWN0aW9uU2Vzc2lvbiBtVm9pY2VTZXNzaW9uOworICAgIHByaXZhdGUgSVZvaWNlSW50ZXJhY3RvciBtVm9pY2VJbnRlcmFjdG9yOworCisgICAgcHJpdmF0ZSB2b2lkIHJlc2V0KCkgeworICAgICAgICBtU3RhcnRBY3Rpdml0eSA9IG51bGw7CisgICAgICAgIG1JbnRlbnQgPSBudWxsOworICAgICAgICBtQ2FsbGluZ1VpZCA9IC0xOworICAgICAgICBtT3B0aW9ucyA9IG51bGw7CisKKyAgICAgICAgbUxhdW5jaFNpbmdsZVRvcCA9IGZhbHNlOworICAgICAgICBtTGF1bmNoU2luZ2xlSW5zdGFuY2UgPSBmYWxzZTsKKyAgICAgICAgbUxhdW5jaFNpbmdsZVRhc2sgPSBmYWxzZTsKKyAgICAgICAgbUxhdW5jaFRhc2tCZWhpbmQgPSBmYWxzZTsKKyAgICAgICAgbUxhdW5jaEZsYWdzID0gMDsKKworICAgICAgICBtTGF1bmNoQm91bmRzID0gbnVsbDsKKworICAgICAgICBtTm90VG9wID0gbnVsbDsKKyAgICAgICAgbURvUmVzdW1lID0gZmFsc2U7CisgICAgICAgIG1TdGFydEZsYWdzID0gMDsKKyAgICAgICAgbVNvdXJjZVJlY29yZCA9IG51bGw7CisKKyAgICAgICAgbUluVGFzayA9IG51bGw7CisgICAgICAgIG1BZGRpbmdUb1Rhc2sgPSBmYWxzZTsKKyAgICAgICAgbVJldXNlVGFzayA9IG51bGw7CisKKyAgICAgICAgbU5ld1Rhc2tJbmZvID0gbnVsbDsKKyAgICAgICAgbU5ld1Rhc2tJbnRlbnQgPSBudWxsOworICAgICAgICBtU291cmNlU3RhY2sgPSBudWxsOworCisgICAgICAgIG1UYXJnZXRTdGFjayA9IG51bGw7CisgICAgICAgIG1Nb3ZlZEhvbWUgPSBmYWxzZTsKKyAgICAgICAgbU1vdmVkVG9Gcm9udCA9IGZhbHNlOworICAgICAgICBtTm9BbmltYXRpb24gPSBmYWxzZTsKKyAgICAgICAgbUtlZXBDdXJUcmFuc2l0aW9uID0gZmFsc2U7CisKKyAgICAgICAgbVZvaWNlU2Vzc2lvbiA9IG51bGw7CisgICAgICAgIG1Wb2ljZUludGVyYWN0b3IgPSBudWxsOworICAgIH0KKworICAgIEFjdGl2aXR5U3RhcnRlcihBY3Rpdml0eU1hbmFnZXJTZXJ2aWNlIHNlcnZpY2UsIEFjdGl2aXR5U3RhY2tTdXBlcnZpc29yIHN1cGVydmlzb3IpIHsKKyAgICAgICAgbVNlcnZpY2UgPSBzZXJ2aWNlOworICAgICAgICBtU3VwZXJ2aXNvciA9IHN1cGVydmlzb3I7CisgICAgfQorCisgICAgZmluYWwgaW50IHN0YXJ0QWN0aXZpdHlMb2NrZWQoSUFwcGxpY2F0aW9uVGhyZWFkIGNhbGxlciwgSW50ZW50IGludGVudCwgSW50ZW50IGVwaGVtZXJhbEludGVudCwKKyAgICAgICAgICAgIFN0cmluZyByZXNvbHZlZFR5cGUsIEFjdGl2aXR5SW5mbyBhSW5mbywgUmVzb2x2ZUluZm8gckluZm8sCisgICAgICAgICAgICBJVm9pY2VJbnRlcmFjdGlvblNlc3Npb24gdm9pY2VTZXNzaW9uLCBJVm9pY2VJbnRlcmFjdG9yIHZvaWNlSW50ZXJhY3RvciwKKyAgICAgICAgICAgIElCaW5kZXIgcmVzdWx0VG8sIFN0cmluZyByZXN1bHRXaG8sIGludCByZXF1ZXN0Q29kZSwgaW50IGNhbGxpbmdQaWQsIGludCBjYWxsaW5nVWlkLAorICAgICAgICAgICAgU3RyaW5nIGNhbGxpbmdQYWNrYWdlLCBpbnQgcmVhbENhbGxpbmdQaWQsIGludCByZWFsQ2FsbGluZ1VpZCwgaW50IHN0YXJ0RmxhZ3MsCisgICAgICAgICAgICBBY3Rpdml0eU9wdGlvbnMgb3B0aW9ucywgYm9vbGVhbiBpZ25vcmVUYXJnZXRTZWN1cml0eSwgYm9vbGVhbiBjb21wb25lbnRTcGVjaWZpZWQsCisgICAgICAgICAgICBBY3Rpdml0eVJlY29yZFtdIG91dEFjdGl2aXR5LCBBY3Rpdml0eVN0YWNrU3VwZXJ2aXNvci5BY3Rpdml0eUNvbnRhaW5lciBjb250YWluZXIsCisgICAgICAgICAgICBUYXNrUmVjb3JkIGluVGFzaykgeworICAgICAgICBpbnQgZXJyID0gQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX1NVQ0NFU1M7CisKKyAgICAgICAgUHJvY2Vzc1JlY29yZCBjYWxsZXJBcHAgPSBudWxsOworICAgICAgICBpZiAoY2FsbGVyICE9IG51bGwpIHsKKyAgICAgICAgICAgIGNhbGxlckFwcCA9IG1TZXJ2aWNlLmdldFJlY29yZEZvckFwcExvY2tlZChjYWxsZXIpOworICAgICAgICAgICAgaWYgKGNhbGxlckFwcCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgY2FsbGluZ1BpZCA9IGNhbGxlckFwcC5waWQ7CisgICAgICAgICAgICAgICAgY2FsbGluZ1VpZCA9IGNhbGxlckFwcC5pbmZvLnVpZDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgU2xvZy53KFRBRywgIlVuYWJsZSB0byBmaW5kIGFwcCBmb3IgY2FsbGVyICIgKyBjYWxsZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIiAocGlkPSIgKyBjYWxsaW5nUGlkICsgIikgd2hlbiBzdGFydGluZzogIgorICAgICAgICAgICAgICAgICAgICAgICAgKyBpbnRlbnQudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgZXJyID0gQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX1BFUk1JU1NJT05fREVOSUVEOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZmluYWwgaW50IHVzZXJJZCA9IGFJbmZvICE9IG51bGwgPyBVc2VySGFuZGxlLmdldFVzZXJJZChhSW5mby5hcHBsaWNhdGlvbkluZm8udWlkKSA6IDA7CisKKyAgICAgICAgaWYgKGVyciA9PSBBY3Rpdml0eU1hbmFnZXIuU1RBUlRfU1VDQ0VTUykgeworICAgICAgICAgICAgU2xvZy5pKFRBRywgIlNUQVJUIHUiICsgdXNlcklkICsgIiB7IiArIGludGVudC50b1Nob3J0U3RyaW5nKHRydWUsIHRydWUsIHRydWUsIGZhbHNlKQorICAgICAgICAgICAgICAgICAgICArICJ9IGZyb20gdWlkICIgKyBjYWxsaW5nVWlkCisgICAgICAgICAgICAgICAgICAgICsgIiBvbiBkaXNwbGF5ICIgKyAoY29udGFpbmVyID09IG51bGwgPyAobVN1cGVydmlzb3IubUZvY3VzZWRTdGFjayA9PSBudWxsID8KKyAgICAgICAgICAgICAgICAgICAgRGlzcGxheS5ERUZBVUxUX0RJU1BMQVkgOiBtU3VwZXJ2aXNvci5tRm9jdXNlZFN0YWNrLm1EaXNwbGF5SWQpIDoKKyAgICAgICAgICAgICAgICAgICAgKGNvbnRhaW5lci5tQWN0aXZpdHlEaXNwbGF5ID09IG51bGwgPyBEaXNwbGF5LkRFRkFVTFRfRElTUExBWSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLm1BY3Rpdml0eURpc3BsYXkubURpc3BsYXlJZCkpKTsKKyAgICAgICAgfQorCisgICAgICAgIEFjdGl2aXR5UmVjb3JkIHNvdXJjZVJlY29yZCA9IG51bGw7CisgICAgICAgIEFjdGl2aXR5UmVjb3JkIHJlc3VsdFJlY29yZCA9IG51bGw7CisgICAgICAgIGlmIChyZXN1bHRUbyAhPSBudWxsKSB7CisgICAgICAgICAgICBzb3VyY2VSZWNvcmQgPSBtU3VwZXJ2aXNvci5pc0luQW55U3RhY2tMb2NrZWQocmVzdWx0VG8pOworICAgICAgICAgICAgaWYgKERFQlVHX1JFU1VMVFMpIFNsb2cudihUQUdfUkVTVUxUUywKKyAgICAgICAgICAgICAgICAgICAgIldpbGwgc2VuZCByZXN1bHQgdG8gIiArIHJlc3VsdFRvICsgIiAiICsgc291cmNlUmVjb3JkKTsKKyAgICAgICAgICAgIGlmIChzb3VyY2VSZWNvcmQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0Q29kZSA+PSAwICYmICFzb3VyY2VSZWNvcmQuZmluaXNoaW5nKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFJlY29yZCA9IHNvdXJjZVJlY29yZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmaW5hbCBpbnQgbGF1bmNoRmxhZ3MgPSBpbnRlbnQuZ2V0RmxhZ3MoKTsKKworICAgICAgICBpZiAoKGxhdW5jaEZsYWdzICYgSW50ZW50LkZMQUdfQUNUSVZJVFlfRk9SV0FSRF9SRVNVTFQpICE9IDAgJiYgc291cmNlUmVjb3JkICE9IG51bGwpIHsKKyAgICAgICAgICAgIC8vIFRyYW5zZmVyIHRoZSByZXN1bHQgdGFyZ2V0IGZyb20gdGhlIHNvdXJjZSBhY3Rpdml0eSB0byB0aGUgbmV3CisgICAgICAgICAgICAvLyBvbmUgYmVpbmcgc3RhcnRlZCwgaW5jbHVkaW5nIGFueSBmYWlsdXJlcy4KKyAgICAgICAgICAgIGlmIChyZXF1ZXN0Q29kZSA+PSAwKSB7CisgICAgICAgICAgICAgICAgQWN0aXZpdHlPcHRpb25zLmFib3J0KG9wdGlvbnMpOworICAgICAgICAgICAgICAgIHJldHVybiBBY3Rpdml0eU1hbmFnZXIuU1RBUlRfRk9SV0FSRF9BTkRfUkVRVUVTVF9DT05GTElDVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlc3VsdFJlY29yZCA9IHNvdXJjZVJlY29yZC5yZXN1bHRUbzsKKyAgICAgICAgICAgIGlmIChyZXN1bHRSZWNvcmQgIT0gbnVsbCAmJiAhcmVzdWx0UmVjb3JkLmlzSW5TdGFja0xvY2tlZCgpKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0UmVjb3JkID0gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlc3VsdFdobyA9IHNvdXJjZVJlY29yZC5yZXN1bHRXaG87CisgICAgICAgICAgICByZXF1ZXN0Q29kZSA9IHNvdXJjZVJlY29yZC5yZXF1ZXN0Q29kZTsKKyAgICAgICAgICAgIHNvdXJjZVJlY29yZC5yZXN1bHRUbyA9IG51bGw7CisgICAgICAgICAgICBpZiAocmVzdWx0UmVjb3JkICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICByZXN1bHRSZWNvcmQucmVtb3ZlUmVzdWx0c0xvY2tlZChzb3VyY2VSZWNvcmQsIHJlc3VsdFdobywgcmVxdWVzdENvZGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHNvdXJjZVJlY29yZC5sYXVuY2hlZEZyb21VaWQgPT0gY2FsbGluZ1VpZCkgeworICAgICAgICAgICAgICAgIC8vIFRoZSBuZXcgYWN0aXZpdHkgaXMgYmVpbmcgbGF1bmNoZWQgZnJvbSB0aGUgc2FtZSB1aWQgYXMgdGhlIHByZXZpb3VzCisgICAgICAgICAgICAgICAgLy8gYWN0aXZpdHkgaW4gdGhlIGZsb3csIGFuZCBhc2tpbmcgdG8gZm9yd2FyZCBpdHMgcmVzdWx0IGJhY2sgdG8gdGhlCisgICAgICAgICAgICAgICAgLy8gcHJldmlvdXMuICBJbiB0aGlzIGNhc2UgdGhlIGFjdGl2aXR5IGlzIHNlcnZpbmcgYXMgYSB0cmFtcG9saW5lIGJldHdlZW4KKyAgICAgICAgICAgICAgICAvLyB0aGUgdHdvLCBzbyB3ZSBhbHNvIHdhbnQgdG8gdXBkYXRlIGl0cyBsYXVuY2hlZEZyb21QYWNrYWdlIHRvIGJlIHRoZQorICAgICAgICAgICAgICAgIC8vIHNhbWUgYXMgdGhlIHByZXZpb3VzIGFjdGl2aXR5LiAgTm90ZSB0aGF0IHRoaXMgaXMgc2FmZSwgc2luY2Ugd2Uga25vdworICAgICAgICAgICAgICAgIC8vIHRoZXNlIHR3byBwYWNrYWdlcyBjb21lIGZyb20gdGhlIHNhbWUgdWlkOyB0aGUgY2FsbGVyIGNvdWxkIGp1c3QgYXMKKyAgICAgICAgICAgICAgICAvLyB3ZWxsIGhhdmUgc3VwcGxpZWQgdGhhdCBzYW1lIHBhY2thZ2UgbmFtZSBpdHNlbGYuICBUaGlzIHNwZWNpZmlhbGx5CisgICAgICAgICAgICAgICAgLy8gZGVhbHMgd2l0aCB0aGUgY2FzZSBvZiBhbiBpbnRlbnQgcGlja2VyL2Nob29zZXIgYmVpbmcgbGF1bmNoZWQgaW4gdGhlIGFwcAorICAgICAgICAgICAgICAgIC8vIGZsb3cgdG8gcmVkaXJlY3QgdG8gYW4gYWN0aXZpdHkgcGlja2VkIGJ5IHRoZSB1c2VyLCB3aGVyZSB3ZSB3YW50IHRoZSBmaW5hbAorICAgICAgICAgICAgICAgIC8vIGFjdGl2aXR5IHRvIGNvbnNpZGVyIGl0IHRvIGhhdmUgYmVlbiBsYXVuY2hlZCBieSB0aGUgcHJldmlvdXMgYXBwIGFjdGl2aXR5LgorICAgICAgICAgICAgICAgIGNhbGxpbmdQYWNrYWdlID0gc291cmNlUmVjb3JkLmxhdW5jaGVkRnJvbVBhY2thZ2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoZXJyID09IEFjdGl2aXR5TWFuYWdlci5TVEFSVF9TVUNDRVNTICYmIGludGVudC5nZXRDb21wb25lbnQoKSA9PSBudWxsKSB7CisgICAgICAgICAgICAvLyBXZSBjb3VsZG4ndCBmaW5kIGEgY2xhc3MgdGhhdCBjYW4gaGFuZGxlIHRoZSBnaXZlbiBJbnRlbnQuCisgICAgICAgICAgICAvLyBUaGF0J3MgdGhlIGVuZCBvZiB0aGF0IQorICAgICAgICAgICAgZXJyID0gQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX0lOVEVOVF9OT1RfUkVTT0xWRUQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZXJyID09IEFjdGl2aXR5TWFuYWdlci5TVEFSVF9TVUNDRVNTICYmIGFJbmZvID09IG51bGwpIHsKKyAgICAgICAgICAgIC8vIFdlIGNvdWxkbid0IGZpbmQgdGhlIHNwZWNpZmljIGNsYXNzIHNwZWNpZmllZCBpbiB0aGUgSW50ZW50LgorICAgICAgICAgICAgLy8gQWxzbyB0aGUgZW5kIG9mIHRoZSBsaW5lLgorICAgICAgICAgICAgZXJyID0gQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX0NMQVNTX05PVF9GT1VORDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChlcnIgPT0gQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX1NVQ0NFU1MgJiYgc291cmNlUmVjb3JkICE9IG51bGwKKyAgICAgICAgICAgICAgICAmJiBzb3VyY2VSZWNvcmQudGFzay52b2ljZVNlc3Npb24gIT0gbnVsbCkgeworICAgICAgICAgICAgLy8gSWYgdGhpcyBhY3Rpdml0eSBpcyBiZWluZyBsYXVuY2hlZCBhcyBwYXJ0IG9mIGEgdm9pY2Ugc2Vzc2lvbiwgd2UgbmVlZAorICAgICAgICAgICAgLy8gdG8gZW5zdXJlIHRoYXQgaXQgaXMgc2FmZSB0byBkbyBzby4gIElmIHRoZSB1cGNvbWluZyBhY3Rpdml0eSB3aWxsIGFsc28KKyAgICAgICAgICAgIC8vIGJlIHBhcnQgb2YgdGhlIHZvaWNlIHNlc3Npb24sIHdlIGNhbiBvbmx5IGxhdW5jaCBpdCBpZiBpdCBoYXMgZXhwbGljaXRseQorICAgICAgICAgICAgLy8gc2FpZCBpdCBzdXBwb3J0cyB0aGUgVk9JQ0UgY2F0ZWdvcnksIG9yIGl0IGlzIGEgcGFydCBvZiB0aGUgY2FsbGluZyBhcHAuCisgICAgICAgICAgICBpZiAoKGxhdW5jaEZsYWdzICYgRkxBR19BQ1RJVklUWV9ORVdfVEFTSykgPT0gMAorICAgICAgICAgICAgICAgICAgICAmJiBzb3VyY2VSZWNvcmQuaW5mby5hcHBsaWNhdGlvbkluZm8udWlkICE9IGFJbmZvLmFwcGxpY2F0aW9uSW5mby51aWQpIHsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBpbnRlbnQuYWRkQ2F0ZWdvcnkoSW50ZW50LkNBVEVHT1JZX1ZPSUNFKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFBcHBHbG9iYWxzLmdldFBhY2thZ2VNYW5hZ2VyKCkuYWN0aXZpdHlTdXBwb3J0c0ludGVudCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlbnQuZ2V0Q29tcG9uZW50KCksIGludGVudCwgcmVzb2x2ZWRUeXBlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgU2xvZy53KFRBRywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFjdGl2aXR5IGJlaW5nIHN0YXJ0ZWQgaW4gY3VycmVudCB2b2ljZSB0YXNrIGRvZXMgbm90IHN1cHBvcnQgdm9pY2U6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGludGVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSBBY3Rpdml0eU1hbmFnZXIuU1RBUlRfTk9UX1ZPSUNFX0NPTVBBVElCTEU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICBTbG9nLncoVEFHLCAiRmFpbHVyZSBjaGVja2luZyB2b2ljZSBjYXBhYmlsaXRpZXMiLCBlKTsKKyAgICAgICAgICAgICAgICAgICAgZXJyID0gQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX05PVF9WT0lDRV9DT01QQVRJQkxFOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChlcnIgPT0gQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX1NVQ0NFU1MgJiYgdm9pY2VTZXNzaW9uICE9IG51bGwpIHsKKyAgICAgICAgICAgIC8vIElmIHRoZSBjYWxsZXIgaXMgc3RhcnRpbmcgYSBuZXcgdm9pY2Ugc2Vzc2lvbiwganVzdCBtYWtlIHN1cmUgdGhlIHRhcmdldAorICAgICAgICAgICAgLy8gaXMgYWN0dWFsbHkgYWxsb3dpbmcgaXQgdG8gcnVuIHRoaXMgd2F5LgorICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBpZiAoIUFwcEdsb2JhbHMuZ2V0UGFja2FnZU1hbmFnZXIoKS5hY3Rpdml0eVN1cHBvcnRzSW50ZW50KGludGVudC5nZXRDb21wb25lbnQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludGVudCwgcmVzb2x2ZWRUeXBlKSkgeworICAgICAgICAgICAgICAgICAgICBTbG9nLncoVEFHLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBY3Rpdml0eSBiZWluZyBzdGFydGVkIGluIG5ldyB2b2ljZSB0YXNrIGRvZXMgbm90IHN1cHBvcnQ6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgaW50ZW50KTsKKyAgICAgICAgICAgICAgICAgICAgZXJyID0gQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX05PVF9WT0lDRV9DT01QQVRJQkxFOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgU2xvZy53KFRBRywgIkZhaWx1cmUgY2hlY2tpbmcgdm9pY2UgY2FwYWJpbGl0aWVzIiwgZSk7CisgICAgICAgICAgICAgICAgZXJyID0gQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX05PVF9WT0lDRV9DT01QQVRJQkxFOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZmluYWwgQWN0aXZpdHlTdGFjayByZXN1bHRTdGFjayA9IHJlc3VsdFJlY29yZCA9PSBudWxsID8gbnVsbCA6IHJlc3VsdFJlY29yZC50YXNrLnN0YWNrOworCisgICAgICAgIGlmIChlcnIgIT0gU1RBUlRfU1VDQ0VTUykgeworICAgICAgICAgICAgaWYgKHJlc3VsdFJlY29yZCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0U3RhY2suc2VuZEFjdGl2aXR5UmVzdWx0TG9ja2VkKAorICAgICAgICAgICAgICAgICAgICAgICAgLTEsIHJlc3VsdFJlY29yZCwgcmVzdWx0V2hvLCByZXF1ZXN0Q29kZSwgUkVTVUxUX0NBTkNFTEVELCBudWxsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFjdGl2aXR5T3B0aW9ucy5hYm9ydChvcHRpb25zKTsKKyAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgIH0KKworICAgICAgICBib29sZWFuIGFib3J0ID0gIW1TdXBlcnZpc29yLmNoZWNrU3RhcnRBbnlBY3Rpdml0eVBlcm1pc3Npb24oaW50ZW50LCBhSW5mbywgcmVzdWx0V2hvLAorICAgICAgICAgICAgICAgIHJlcXVlc3RDb2RlLCBjYWxsaW5nUGlkLCBjYWxsaW5nVWlkLCBjYWxsaW5nUGFja2FnZSwgaWdub3JlVGFyZ2V0U2VjdXJpdHksIGNhbGxlckFwcCwKKyAgICAgICAgICAgICAgICByZXN1bHRSZWNvcmQsIHJlc3VsdFN0YWNrKTsKKyAgICAgICAgYWJvcnQgfD0gIW1TZXJ2aWNlLm1JbnRlbnRGaXJld2FsbC5jaGVja1N0YXJ0QWN0aXZpdHkoaW50ZW50LCBjYWxsaW5nVWlkLAorICAgICAgICAgICAgICAgIGNhbGxpbmdQaWQsIHJlc29sdmVkVHlwZSwgYUluZm8uYXBwbGljYXRpb25JbmZvKTsKKworICAgICAgICBpZiAobVNlcnZpY2UubUNvbnRyb2xsZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgSW50ZW50IHdlIGdpdmUgdG8gdGhlIHdhdGNoZXIgaGFzIHRoZSBleHRyYSBkYXRhCisgICAgICAgICAgICAgICAgLy8gc3RyaXBwZWQgb2ZmLCBzaW5jZSBpdCBjYW4gY29udGFpbiBwcml2YXRlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIEludGVudCB3YXRjaEludGVudCA9IGludGVudC5jbG9uZUZpbHRlcigpOworICAgICAgICAgICAgICAgIGFib3J0IHw9ICFtU2VydmljZS5tQ29udHJvbGxlci5hY3Rpdml0eVN0YXJ0aW5nKHdhdGNoSW50ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgYUluZm8uYXBwbGljYXRpb25JbmZvLnBhY2thZ2VOYW1lKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgbVNlcnZpY2UubUNvbnRyb2xsZXIgPSBudWxsOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZmluYWwgSW50ZW50IGludGVyY2VwdGluZ0ludGVudCA9IGludGVyY2VwdFdpdGhDb25maXJtQ3JlZGVudGlhbHNJZk5lZWRlZChpbnRlbnQsCisgICAgICAgICAgICAgICAgcmVzb2x2ZWRUeXBlLCBhSW5mbywgY2FsbGluZ1BhY2thZ2UsIHVzZXJJZCk7CisgICAgICAgIGlmIChpbnRlcmNlcHRpbmdJbnRlbnQgIT0gbnVsbCkgeworICAgICAgICAgICAgaW50ZW50ID0gaW50ZXJjZXB0aW5nSW50ZW50OworICAgICAgICAgICAgY2FsbGluZ1BpZCA9IHJlYWxDYWxsaW5nUGlkOworICAgICAgICAgICAgY2FsbGluZ1VpZCA9IHJlYWxDYWxsaW5nVWlkOworICAgICAgICAgICAgcmVzb2x2ZWRUeXBlID0gbnVsbDsKKyAgICAgICAgICAgIC8vIElmIHdlIGFyZSBpbnRlcmNlcHRpbmcgYW5kIHRoZXJlIHdhcyBhIHRhc2ssIGNvbnZlcnQgaXQgaW50byBhbiBleHRyYSBmb3IgdGhlCisgICAgICAgICAgICAvLyBDb25maXJtQ3JlZGVudGlhbHMgaW50ZW50IGFuZCB1bmFzc2lnbiBpdCwgYXMgb3RoZXJ3aXNlIHRoZSB0YXNrIHdpbGwgbW92ZSB0bworICAgICAgICAgICAgLy8gZnJvbnQgZXZlbiBpZiBDb25maXJtQ3JlZGVudGlhbHMgaXMgY2FuY2VsbGVkLgorICAgICAgICAgICAgaWYgKGluVGFzayAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgaW50ZW50LnB1dEV4dHJhKEVYVFJBX1RBU0tfSUQsIGluVGFzay50YXNrSWQpOworICAgICAgICAgICAgICAgIGluVGFzayA9IG51bGw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZpbmFsIFVzZXJJbmZvIHBhcmVudCA9IFVzZXJNYW5hZ2VyLmdldChtU2VydmljZS5tQ29udGV4dCkuZ2V0UHJvZmlsZVBhcmVudCh1c2VySWQpOworICAgICAgICAgICAgckluZm8gPSBtU3VwZXJ2aXNvci5yZXNvbHZlSW50ZW50KGludGVudCwgcmVzb2x2ZWRUeXBlLCBwYXJlbnQuaWQpOworICAgICAgICAgICAgYUluZm8gPSBtU3VwZXJ2aXNvci5yZXNvbHZlQWN0aXZpdHkoaW50ZW50LCBySW5mbywgc3RhcnRGbGFncywKKyAgICAgICAgICAgICAgICAgICAgbnVsbCAvKnByb2ZpbGVySW5mbyovKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhYm9ydCkgeworICAgICAgICAgICAgaWYgKHJlc3VsdFJlY29yZCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0U3RhY2suc2VuZEFjdGl2aXR5UmVzdWx0TG9ja2VkKC0xLCByZXN1bHRSZWNvcmQsIHJlc3VsdFdobywgcmVxdWVzdENvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICBSRVNVTFRfQ0FOQ0VMRUQsIG51bGwpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gV2UgcHJldGVuZCB0byB0aGUgY2FsbGVyIHRoYXQgaXQgd2FzIHJlYWxseSBzdGFydGVkLCBidXQKKyAgICAgICAgICAgIC8vIHRoZXkgd2lsbCBqdXN0IGdldCBhIGNhbmNlbCByZXN1bHQuCisgICAgICAgICAgICBBY3Rpdml0eU9wdGlvbnMuYWJvcnQob3B0aW9ucyk7CisgICAgICAgICAgICByZXR1cm4gU1RBUlRfU1VDQ0VTUzsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHBlcm1pc3Npb25zIG5lZWQgYSByZXZpZXcgYmVmb3JlIGFueSBvZiB0aGUgYXBwIGNvbXBvbmVudHMgY2FuIHJ1biwgd2UKKyAgICAgICAgLy8gbGF1bmNoIHRoZSByZXZpZXcgYWN0aXZpdHkgYW5kIHBhc3MgYSBwZW5kaW5nIGludGVudCB0byBzdGFydCB0aGUgYWN0aXZpdHkKKyAgICAgICAgLy8gd2UgYXJlIHRvIGxhdW5jaGluZyBub3cgYWZ0ZXIgdGhlIHJldmlldyBpcyBjb21wbGV0ZWQuCisgICAgICAgIGlmIChCdWlsZC5QRVJNSVNTSU9OU19SRVZJRVdfUkVRVUlSRUQgJiYgYUluZm8gIT0gbnVsbCkgeworICAgICAgICAgICAgaWYgKG1TZXJ2aWNlLmdldFBhY2thZ2VNYW5hZ2VySW50ZXJuYWxMb2NrZWQoKS5pc1Blcm1pc3Npb25zUmV2aWV3UmVxdWlyZWQoCisgICAgICAgICAgICAgICAgICAgIGFJbmZvLnBhY2thZ2VOYW1lLCB1c2VySWQpKSB7CisgICAgICAgICAgICAgICAgSUludGVudFNlbmRlciB0YXJnZXQgPSBtU2VydmljZS5nZXRJbnRlbnRTZW5kZXJMb2NrZWQoCisgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eU1hbmFnZXIuSU5URU5UX1NFTkRFUl9BQ1RJVklUWSwgY2FsbGluZ1BhY2thZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICBjYWxsaW5nVWlkLCB1c2VySWQsIG51bGwsIG51bGwsIDAsIG5ldyBJbnRlbnRbXXtpbnRlbnR9LAorICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFN0cmluZ1tde3Jlc29sdmVkVHlwZX0sIFBlbmRpbmdJbnRlbnQuRkxBR19DQU5DRUxfQ1VSUkVOVAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBlbmRpbmdJbnRlbnQuRkxBR19PTkVfU0hPVCwgbnVsbCk7CisKKyAgICAgICAgICAgICAgICBmaW5hbCBpbnQgZmxhZ3MgPSBpbnRlbnQuZ2V0RmxhZ3MoKTsKKyAgICAgICAgICAgICAgICBJbnRlbnQgbmV3SW50ZW50ID0gbmV3IEludGVudChJbnRlbnQuQUNUSU9OX1JFVklFV19QRVJNSVNTSU9OUyk7CisgICAgICAgICAgICAgICAgbmV3SW50ZW50LnNldEZsYWdzKGZsYWdzCisgICAgICAgICAgICAgICAgICAgICAgICB8IEludGVudC5GTEFHX0FDVElWSVRZX0VYQ0xVREVfRlJPTV9SRUNFTlRTKTsKKyAgICAgICAgICAgICAgICBuZXdJbnRlbnQucHV0RXh0cmEoSW50ZW50LkVYVFJBX1BBQ0tBR0VfTkFNRSwgYUluZm8ucGFja2FnZU5hbWUpOworICAgICAgICAgICAgICAgIG5ld0ludGVudC5wdXRFeHRyYShJbnRlbnQuRVhUUkFfSU5URU5ULCBuZXcgSW50ZW50U2VuZGVyKHRhcmdldCkpOworICAgICAgICAgICAgICAgIGlmIChyZXN1bHRSZWNvcmQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBuZXdJbnRlbnQucHV0RXh0cmEoSW50ZW50LkVYVFJBX1JFU1VMVF9ORUVERUQsIHRydWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpbnRlbnQgPSBuZXdJbnRlbnQ7CisKKyAgICAgICAgICAgICAgICByZXNvbHZlZFR5cGUgPSBudWxsOworICAgICAgICAgICAgICAgIGNhbGxpbmdVaWQgPSByZWFsQ2FsbGluZ1VpZDsKKyAgICAgICAgICAgICAgICBjYWxsaW5nUGlkID0gcmVhbENhbGxpbmdQaWQ7CisKKyAgICAgICAgICAgICAgICBySW5mbyA9IG1TdXBlcnZpc29yLnJlc29sdmVJbnRlbnQoaW50ZW50LCByZXNvbHZlZFR5cGUsIHVzZXJJZCk7CisgICAgICAgICAgICAgICAgYUluZm8gPSBtU3VwZXJ2aXNvci5yZXNvbHZlQWN0aXZpdHkoaW50ZW50LCBySW5mbywgc3RhcnRGbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgIG51bGwgLypwcm9maWxlckluZm8qLyk7CisKKyAgICAgICAgICAgICAgICBpZiAoREVCVUdfUEVSTUlTU0lPTlNfUkVWSUVXKSB7CisgICAgICAgICAgICAgICAgICAgIFNsb2cuaShUQUcsICJTVEFSVCB1IiArIHVzZXJJZCArICIgeyIgKyBpbnRlbnQudG9TaG9ydFN0cmluZyh0cnVlLCB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsIGZhbHNlKSArICJ9IGZyb20gdWlkICIgKyBjYWxsaW5nVWlkICsgIiBvbiBkaXNwbGF5ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArIChjb250YWluZXIgPT0gbnVsbCA/IChtU3VwZXJ2aXNvci5tRm9jdXNlZFN0YWNrID09IG51bGwgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpc3BsYXkuREVGQVVMVF9ESVNQTEFZIDogbVN1cGVydmlzb3IubUZvY3VzZWRTdGFjay5tRGlzcGxheUlkKSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnRhaW5lci5tQWN0aXZpdHlEaXNwbGF5ID09IG51bGwgPyBEaXNwbGF5LkRFRkFVTFRfRElTUExBWSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIubUFjdGl2aXR5RGlzcGxheS5tRGlzcGxheUlkKSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHdlIGhhdmUgYW4gZXBoZW1lcmFsIGFwcCwgYWJvcnQgdGhlIHByb2Nlc3Mgb2YgbGF1bmNoaW5nIHRoZSByZXNvbHZlZCBpbnRlbnQuCisgICAgICAgIC8vIEluc3RlYWQsIGxhdW5jaCB0aGUgZXBoZW1lcmFsIGluc3RhbGxlci4gT25jZSB0aGUgaW5zdGFsbGVyIGlzIGZpbmlzaGVkLCBpdAorICAgICAgICAvLyBzdGFydHMgZWl0aGVyIHRoZSBpbnRlbnQgd2UgcmVzb2x2ZWQgaGVyZSBbb24gaW5zdGFsbCBlcnJvcl0gb3IgdGhlIGVwaGVtZXJhbAorICAgICAgICAvLyBhcHAgW29uIGluc3RhbGwgc3VjY2Vzc10uCisgICAgICAgIGlmIChySW5mbyAhPSBudWxsICYmIHJJbmZvLmVwaGVtZXJhbFJlc29sdmVJbmZvICE9IG51bGwpIHsKKyAgICAgICAgICAgIC8vIENyZWF0ZSBhIHBlbmRpbmcgaW50ZW50IHRvIHN0YXJ0IHRoZSBpbnRlbnQgcmVzb2x2ZWQgaGVyZS4KKyAgICAgICAgICAgIGZpbmFsIElJbnRlbnRTZW5kZXIgZmFpbHVyZVRhcmdldCA9IG1TZXJ2aWNlLmdldEludGVudFNlbmRlckxvY2tlZCgKKyAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlNYW5hZ2VyLklOVEVOVF9TRU5ERVJfQUNUSVZJVFksIGNhbGxpbmdQYWNrYWdlLAorICAgICAgICAgICAgICAgICAgICBCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpLCB1c2VySWQsIG51bGwsIG51bGwsIDAsIG5ldyBJbnRlbnRbXXsgaW50ZW50IH0sCisgICAgICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdbXXsgcmVzb2x2ZWRUeXBlIH0sCisgICAgICAgICAgICAgICAgICAgIFBlbmRpbmdJbnRlbnQuRkxBR19DQU5DRUxfQ1VSUkVOVCB8IFBlbmRpbmdJbnRlbnQuRkxBR19PTkVfU0hPVAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUGVuZGluZ0ludGVudC5GTEFHX0lNTVVUQUJMRSwgbnVsbCk7CisKKyAgICAgICAgICAgIC8vIENyZWF0ZSBhIHBlbmRpbmcgaW50ZW50IHRvIHN0YXJ0IHRoZSBlcGhlbWVyYWwgYXBwbGljYXRpb247IGZvcmNlIGl0IHRvIGJlCisgICAgICAgICAgICAvLyBkaXJlY3RlZCB0byB0aGUgZXBoZW1lcmFsIHBhY2thZ2UuCisgICAgICAgICAgICBlcGhlbWVyYWxJbnRlbnQuc2V0UGFja2FnZShySW5mby5lcGhlbWVyYWxSZXNvbHZlSW5mby5nZXRQYWNrYWdlTmFtZSgpKTsKKyAgICAgICAgICAgIGZpbmFsIElJbnRlbnRTZW5kZXIgZXBoZW1lcmFsVGFyZ2V0ID0gbVNlcnZpY2UuZ2V0SW50ZW50U2VuZGVyTG9ja2VkKAorICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eU1hbmFnZXIuSU5URU5UX1NFTkRFUl9BQ1RJVklUWSwgY2FsbGluZ1BhY2thZ2UsCisgICAgICAgICAgICAgICAgICAgIEJpbmRlci5nZXRDYWxsaW5nVWlkKCksIHVzZXJJZCwgbnVsbCwgbnVsbCwgMCwgbmV3IEludGVudFtdeyBlcGhlbWVyYWxJbnRlbnQgfSwKKyAgICAgICAgICAgICAgICAgICAgbmV3IFN0cmluZ1tdeyByZXNvbHZlZFR5cGUgfSwKKyAgICAgICAgICAgICAgICAgICAgUGVuZGluZ0ludGVudC5GTEFHX0NBTkNFTF9DVVJSRU5UIHwgUGVuZGluZ0ludGVudC5GTEFHX09ORV9TSE9UCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQZW5kaW5nSW50ZW50LkZMQUdfSU1NVVRBQkxFLCBudWxsKTsKKworICAgICAgICAgICAgaW50IGZsYWdzID0gaW50ZW50LmdldEZsYWdzKCk7CisgICAgICAgICAgICBpbnRlbnQgPSBuZXcgSW50ZW50KCk7CisgICAgICAgICAgICBpbnRlbnQuc2V0RmxhZ3MoZmxhZ3MKKyAgICAgICAgICAgICAgICAgICAgfCBJbnRlbnQuRkxBR19BQ1RJVklUWV9ORVdfVEFTSworICAgICAgICAgICAgICAgICAgICB8IEludGVudC5GTEFHX0FDVElWSVRZX0VYQ0xVREVfRlJPTV9SRUNFTlRTKTsKKyAgICAgICAgICAgIGludGVudC5wdXRFeHRyYShJbnRlbnQuRVhUUkFfUEFDS0FHRV9OQU1FLAorICAgICAgICAgICAgICAgICAgICBySW5mby5lcGhlbWVyYWxSZXNvbHZlSW5mby5nZXRQYWNrYWdlTmFtZSgpKTsKKyAgICAgICAgICAgIGludGVudC5wdXRFeHRyYShJbnRlbnQuRVhUUkFfRVBIRU1FUkFMX0ZBSUxVUkUsIG5ldyBJbnRlbnRTZW5kZXIoZmFpbHVyZVRhcmdldCkpOworICAgICAgICAgICAgaW50ZW50LnB1dEV4dHJhKEludGVudC5FWFRSQV9FUEhFTUVSQUxfU1VDQ0VTUywgbmV3IEludGVudFNlbmRlcihlcGhlbWVyYWxUYXJnZXQpKTsKKworICAgICAgICAgICAgcmVzb2x2ZWRUeXBlID0gbnVsbDsKKyAgICAgICAgICAgIGNhbGxpbmdVaWQgPSByZWFsQ2FsbGluZ1VpZDsKKyAgICAgICAgICAgIGNhbGxpbmdQaWQgPSByZWFsQ2FsbGluZ1BpZDsKKworICAgICAgICAgICAgckluZm8gPSBySW5mby5lcGhlbWVyYWxJbnN0YWxsZXI7CisgICAgICAgICAgICBhSW5mbyA9IG1TdXBlcnZpc29yLnJlc29sdmVBY3Rpdml0eShpbnRlbnQsIHJJbmZvLCBzdGFydEZsYWdzLCBudWxsIC8qcHJvZmlsZXJJbmZvKi8pOworICAgICAgICB9CisKKyAgICAgICAgQWN0aXZpdHlSZWNvcmQgciA9IG5ldyBBY3Rpdml0eVJlY29yZChtU2VydmljZSwgY2FsbGVyQXBwLCBjYWxsaW5nVWlkLCBjYWxsaW5nUGFja2FnZSwKKyAgICAgICAgICAgICAgICBpbnRlbnQsIHJlc29sdmVkVHlwZSwgYUluZm8sIG1TZXJ2aWNlLm1Db25maWd1cmF0aW9uLCByZXN1bHRSZWNvcmQsIHJlc3VsdFdobywKKyAgICAgICAgICAgICAgICByZXF1ZXN0Q29kZSwgY29tcG9uZW50U3BlY2lmaWVkLCB2b2ljZVNlc3Npb24gIT0gbnVsbCwgbVN1cGVydmlzb3IsIGNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICBvcHRpb25zKTsKKyAgICAgICAgaWYgKG91dEFjdGl2aXR5ICE9IG51bGwpIHsKKyAgICAgICAgICAgIG91dEFjdGl2aXR5WzBdID0gcjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyLmFwcFRpbWVUcmFja2VyID09IG51bGwgJiYgc291cmNlUmVjb3JkICE9IG51bGwpIHsKKyAgICAgICAgICAgIC8vIElmIHRoZSBjYWxsZXIgZGlkbid0IHNwZWNpZnkgYW4gZXhwbGljaXQgdGltZSB0cmFja2VyLCB3ZSB3YW50IHRvIGNvbnRpbnVlCisgICAgICAgICAgICAvLyB0cmFja2luZyB1bmRlciBhbnkgaXQgaGFzLgorICAgICAgICAgICAgci5hcHBUaW1lVHJhY2tlciA9IHNvdXJjZVJlY29yZC5hcHBUaW1lVHJhY2tlcjsKKyAgICAgICAgfQorCisgICAgICAgIGZpbmFsIEFjdGl2aXR5U3RhY2sgc3RhY2sgPSBtU3VwZXJ2aXNvci5tRm9jdXNlZFN0YWNrOworICAgICAgICBpZiAodm9pY2VTZXNzaW9uID09IG51bGwgJiYgKHN0YWNrLm1SZXN1bWVkQWN0aXZpdHkgPT0gbnVsbAorICAgICAgICAgICAgICAgIHx8IHN0YWNrLm1SZXN1bWVkQWN0aXZpdHkuaW5mby5hcHBsaWNhdGlvbkluZm8udWlkICE9IGNhbGxpbmdVaWQpKSB7CisgICAgICAgICAgICBpZiAoIW1TZXJ2aWNlLmNoZWNrQXBwU3dpdGNoQWxsb3dlZExvY2tlZChjYWxsaW5nUGlkLCBjYWxsaW5nVWlkLAorICAgICAgICAgICAgICAgICAgICByZWFsQ2FsbGluZ1BpZCwgcmVhbENhbGxpbmdVaWQsICJBY3Rpdml0eSBzdGFydCIpKSB7CisgICAgICAgICAgICAgICAgUGVuZGluZ0FjdGl2aXR5TGF1bmNoIHBhbCA9ICBuZXcgUGVuZGluZ0FjdGl2aXR5TGF1bmNoKHIsCisgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VSZWNvcmQsIHN0YXJ0RmxhZ3MsIHN0YWNrLCBjYWxsZXJBcHApOworICAgICAgICAgICAgICAgIG1QZW5kaW5nQWN0aXZpdHlMYXVuY2hlcy5hZGQocGFsKTsKKyAgICAgICAgICAgICAgICBBY3Rpdml0eU9wdGlvbnMuYWJvcnQob3B0aW9ucyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFjdGl2aXR5TWFuYWdlci5TVEFSVF9TV0lUQ0hFU19DQU5DRUxFRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChtU2VydmljZS5tRGlkQXBwU3dpdGNoKSB7CisgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBzZWNvbmQgYWxsb3dlZCBzd2l0Y2ggc2luY2Ugd2Ugc3RvcHBlZCBzd2l0Y2hlcywKKyAgICAgICAgICAgIC8vIHNvIG5vdyBqdXN0IGdlbmVyYWxseSBhbGxvdyBzd2l0Y2hlcy4gIFVzZSBjYXNlOiB1c2VyIHByZXNzZXMKKyAgICAgICAgICAgIC8vIGhvbWUgKHN3aXRjaGVzIGRpc2FibGVkLCBzd2l0Y2ggdG8gaG9tZSwgbURpZEFwcFN3aXRjaCBub3cgdHJ1ZSk7CisgICAgICAgICAgICAvLyB1c2VyIHRhcHMgYSBob21lIGljb24gKGNvbWluZyBmcm9tIGhvbWUgc28gYWxsb3dlZCwgd2UgaGl0IGhlcmUKKyAgICAgICAgICAgIC8vIGFuZCBub3cgYWxsb3cgYW55b25lIHRvIHN3aXRjaCBhZ2FpbikuCisgICAgICAgICAgICBtU2VydmljZS5tQXBwU3dpdGNoZXNBbGxvd2VkVGltZSA9IDA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtU2VydmljZS5tRGlkQXBwU3dpdGNoID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGRvUGVuZGluZ0FjdGl2aXR5TGF1bmNoZXNMb2NrZWQoZmFsc2UpOworCisgICAgICAgIGVyciA9IHN0YXJ0QWN0aXZpdHlVbmNoZWNrZWQoCisgICAgICAgICAgICAgICAgciwgc291cmNlUmVjb3JkLCB2b2ljZVNlc3Npb24sIHZvaWNlSW50ZXJhY3Rvciwgc3RhcnRGbGFncywgdHJ1ZSwgb3B0aW9ucywgaW5UYXNrKTsKKworICAgICAgICBpZiAoZXJyIDwgMCkgeworICAgICAgICAgICAgLy8gSWYgc29tZW9uZSBhc2tlZCB0byBoYXZlIHRoZSBrZXlndWFyZCBkaXNtaXNzZWQgb24gdGhlIG5leHQKKyAgICAgICAgICAgIC8vIGFjdGl2aXR5IHN0YXJ0LCBidXQgd2UgYXJlIG5vdCBhY3R1YWxseSBkb2luZyBhbiBhY3Rpdml0eQorICAgICAgICAgICAgLy8gc3dpdGNoLi4uICBqdXN0IGRpc21pc3MgdGhlIGtleWd1YXJkIG5vdywgYmVjYXVzZSB3ZQorICAgICAgICAgICAgLy8gcHJvYmFibHkgd2FudCB0byBzZWUgd2hhdGV2ZXIgaXMgYmVoaW5kIGl0LgorICAgICAgICAgICAgbVN1cGVydmlzb3Iubm90aWZ5QWN0aXZpdHlEcmF3bkZvcktleWd1YXJkKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGFuIGludGVudCB0byBpbnRlcmNlcHQgdGhlIGN1cnJlbnQgYWN0aXZpdHkgc3RhcnQgd2l0aCBDb25maXJtIENyZWRlbnRpYWxzIGlmIG5lZWRlZC4KKyAgICAgKgorICAgICAqIEByZXR1cm4gVGhlIGludGVyY2VwdGluZyBpbnRlbnQgaWYgbmVlZGVkLgorICAgICAqLworICAgIHByaXZhdGUgSW50ZW50IGludGVyY2VwdFdpdGhDb25maXJtQ3JlZGVudGlhbHNJZk5lZWRlZChJbnRlbnQgaW50ZW50LCBTdHJpbmcgcmVzb2x2ZWRUeXBlLAorICAgICAgICAgICAgQWN0aXZpdHlJbmZvIGFJbmZvLCBTdHJpbmcgY2FsbGluZ1BhY2thZ2UsIGludCB1c2VySWQpIHsKKyAgICAgICAgaWYgKCFtU2VydmljZS5tVXNlckNvbnRyb2xsZXIuc2hvdWxkQ29uZmlybUNyZWRlbnRpYWxzKHVzZXJJZCkpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIGZpbmFsIElJbnRlbnRTZW5kZXIgdGFyZ2V0ID0gbVNlcnZpY2UuZ2V0SW50ZW50U2VuZGVyTG9ja2VkKAorICAgICAgICAgICAgICAgIElOVEVOVF9TRU5ERVJfQUNUSVZJVFksIGNhbGxpbmdQYWNrYWdlLAorICAgICAgICAgICAgICAgIEJpbmRlci5nZXRDYWxsaW5nVWlkKCksIHVzZXJJZCwgbnVsbCwgbnVsbCwgMCwgbmV3IEludGVudFtdeyBpbnRlbnQgfSwKKyAgICAgICAgICAgICAgICBuZXcgU3RyaW5nW117IHJlc29sdmVkVHlwZSB9LAorICAgICAgICAgICAgICAgIEZMQUdfQ0FOQ0VMX0NVUlJFTlQgfCBGTEFHX09ORV9TSE9UIHwgRkxBR19JTU1VVEFCTEUsIG51bGwpOworICAgICAgICBmaW5hbCBpbnQgZmxhZ3MgPSBpbnRlbnQuZ2V0RmxhZ3MoKTsKKyAgICAgICAgZmluYWwgS2V5Z3VhcmRNYW5hZ2VyIGttID0gKEtleWd1YXJkTWFuYWdlcikgbVNlcnZpY2UubUNvbnRleHQKKyAgICAgICAgICAgICAgICAuZ2V0U3lzdGVtU2VydmljZShLRVlHVUFSRF9TRVJWSUNFKTsKKyAgICAgICAgZmluYWwgSW50ZW50IG5ld0ludGVudCA9IGttLmNyZWF0ZUNvbmZpcm1EZXZpY2VDcmVkZW50aWFsSW50ZW50KG51bGwsIG51bGwsIHVzZXJJZCk7CisgICAgICAgIGlmIChuZXdJbnRlbnQgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgbmV3SW50ZW50LnNldEZsYWdzKGZsYWdzIHwgRkxBR19BQ1RJVklUWV9ORVdfVEFTSyB8IEZMQUdfQUNUSVZJVFlfRVhDTFVERV9GUk9NX1JFQ0VOVFMpOworICAgICAgICBuZXdJbnRlbnQucHV0RXh0cmEoRVhUUkFfUEFDS0FHRV9OQU1FLCBhSW5mby5wYWNrYWdlTmFtZSk7CisgICAgICAgIG5ld0ludGVudC5wdXRFeHRyYShFWFRSQV9JTlRFTlQsIG5ldyBJbnRlbnRTZW5kZXIodGFyZ2V0KSk7CisgICAgICAgIHJldHVybiBuZXdJbnRlbnQ7CisgICAgfQorCisgICAgdm9pZCBzdGFydEhvbWVBY3Rpdml0eUxvY2tlZChJbnRlbnQgaW50ZW50LCBBY3Rpdml0eUluZm8gYUluZm8sIFN0cmluZyByZWFzb24pIHsKKyAgICAgICAgbVN1cGVydmlzb3IubW92ZUhvbWVTdGFja1Rhc2tUb1RvcChIT01FX0FDVElWSVRZX1RZUEUsIHJlYXNvbik7CisgICAgICAgIHN0YXJ0QWN0aXZpdHlMb2NrZWQobnVsbCAvKmNhbGxlciovLCBpbnRlbnQsIG51bGwgLyplcGhlbWVyYWxJbnRlbnQqLywKKyAgICAgICAgICAgICAgICBudWxsIC8qcmVzb2x2ZWRUeXBlKi8sIGFJbmZvLCBudWxsIC8qckluZm8qLywgbnVsbCAvKnZvaWNlU2Vzc2lvbiovLAorICAgICAgICAgICAgICAgIG51bGwgLyp2b2ljZUludGVyYWN0b3IqLywgbnVsbCAvKnJlc3VsdFRvKi8sIG51bGwgLypyZXN1bHRXaG8qLywKKyAgICAgICAgICAgICAgICAwIC8qcmVxdWVzdENvZGUqLywgMCAvKmNhbGxpbmdQaWQqLywgMCAvKmNhbGxpbmdVaWQqLywgbnVsbCAvKmNhbGxpbmdQYWNrYWdlKi8sCisgICAgICAgICAgICAgICAgMCAvKnJlYWxDYWxsaW5nUGlkKi8sIDAgLypyZWFsQ2FsbGluZ1VpZCovLCAwIC8qc3RhcnRGbGFncyovLCBudWxsIC8qb3B0aW9ucyovLAorICAgICAgICAgICAgICAgIGZhbHNlIC8qaWdub3JlVGFyZ2V0U2VjdXJpdHkqLywgZmFsc2UgLypjb21wb25lbnRTcGVjaWZpZWQqLywgIG51bGwgLypvdXRBY3Rpdml0eSovLAorICAgICAgICAgICAgICAgIG51bGwgLypjb250YWluZXIqLywgbnVsbCAvKmluVGFzayovKTsKKyAgICAgICAgaWYgKG1TdXBlcnZpc29yLmluUmVzdW1lVG9wQWN0aXZpdHkpIHsKKyAgICAgICAgICAgIC8vIElmIHdlIGFyZSBpbiByZXN1bWUgc2VjdGlvbiBhbHJlYWR5LCBob21lIGFjdGl2aXR5IHdpbGwgYmUgaW5pdGlhbGl6ZWQsIGJ1dCBub3QKKyAgICAgICAgICAgIC8vIHJlc3VtZWQgKHRvIGF2b2lkIHJlY3Vyc2l2ZSByZXN1bWUpIGFuZCB3aWxsIHN0YXkgdGhhdCB3YXkgdW50aWwgc29tZXRoaW5nIHBva2VzIGl0CisgICAgICAgICAgICAvLyBhZ2Fpbi4gV2UgbmVlZCB0byBzY2hlZHVsZSBhbm90aGVyIHJlc3VtZS4KKyAgICAgICAgICAgIG1TdXBlcnZpc29yLnNjaGVkdWxlUmVzdW1lVG9wQWN0aXZpdGllcygpOworICAgICAgICB9CisgICAgfQorCisgICAgZmluYWwgaW50IHN0YXJ0QWN0aXZpdHlNYXlXYWl0KElBcHBsaWNhdGlvblRocmVhZCBjYWxsZXIsIGludCBjYWxsaW5nVWlkLAorICAgICAgICAgICAgU3RyaW5nIGNhbGxpbmdQYWNrYWdlLCBJbnRlbnQgaW50ZW50LCBTdHJpbmcgcmVzb2x2ZWRUeXBlLAorICAgICAgICAgICAgSVZvaWNlSW50ZXJhY3Rpb25TZXNzaW9uIHZvaWNlU2Vzc2lvbiwgSVZvaWNlSW50ZXJhY3RvciB2b2ljZUludGVyYWN0b3IsCisgICAgICAgICAgICBJQmluZGVyIHJlc3VsdFRvLCBTdHJpbmcgcmVzdWx0V2hvLCBpbnQgcmVxdWVzdENvZGUsIGludCBzdGFydEZsYWdzLAorICAgICAgICAgICAgUHJvZmlsZXJJbmZvIHByb2ZpbGVySW5mbywgSUFjdGl2aXR5TWFuYWdlci5XYWl0UmVzdWx0IG91dFJlc3VsdCwgQ29uZmlndXJhdGlvbiBjb25maWcsCisgICAgICAgICAgICBCdW5kbGUgYk9wdGlvbnMsIGJvb2xlYW4gaWdub3JlVGFyZ2V0U2VjdXJpdHksIGludCB1c2VySWQsCisgICAgICAgICAgICBJQWN0aXZpdHlDb250YWluZXIgaUNvbnRhaW5lciwgVGFza1JlY29yZCBpblRhc2spIHsKKyAgICAgICAgLy8gUmVmdXNlIHBvc3NpYmxlIGxlYWtlZCBmaWxlIGRlc2NyaXB0b3JzCisgICAgICAgIGlmIChpbnRlbnQgIT0gbnVsbCAmJiBpbnRlbnQuaGFzRmlsZURlc2NyaXB0b3JzKCkpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkZpbGUgZGVzY3JpcHRvcnMgcGFzc2VkIGluIEludGVudCIpOworICAgICAgICB9CisgICAgICAgIGJvb2xlYW4gY29tcG9uZW50U3BlY2lmaWVkID0gaW50ZW50LmdldENvbXBvbmVudCgpICE9IG51bGw7CisKKyAgICAgICAgLy8gU2F2ZSBhIGNvcHkgaW4gY2FzZSBlcGhlbWVyYWwgbmVlZHMgaXQKKyAgICAgICAgZmluYWwgSW50ZW50IGVwaGVtZXJhbEludGVudCA9IG5ldyBJbnRlbnQoaW50ZW50KTsKKyAgICAgICAgLy8gRG9uJ3QgbW9kaWZ5IHRoZSBjbGllbnQncyBvYmplY3QhCisgICAgICAgIGludGVudCA9IG5ldyBJbnRlbnQoaW50ZW50KTsKKworICAgICAgICBSZXNvbHZlSW5mbyBySW5mbyA9IG1TdXBlcnZpc29yLnJlc29sdmVJbnRlbnQoaW50ZW50LCByZXNvbHZlZFR5cGUsIHVzZXJJZCk7CisgICAgICAgIC8vIENvbGxlY3QgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRhcmdldCBvZiB0aGUgSW50ZW50LgorICAgICAgICBBY3Rpdml0eUluZm8gYUluZm8gPSBtU3VwZXJ2aXNvci5yZXNvbHZlQWN0aXZpdHkoaW50ZW50LCBySW5mbywgc3RhcnRGbGFncywgcHJvZmlsZXJJbmZvKTsKKworICAgICAgICBBY3Rpdml0eU9wdGlvbnMgb3B0aW9ucyA9IEFjdGl2aXR5T3B0aW9ucy5mcm9tQnVuZGxlKGJPcHRpb25zKTsKKyAgICAgICAgQWN0aXZpdHlTdGFja1N1cGVydmlzb3IuQWN0aXZpdHlDb250YWluZXIgY29udGFpbmVyID0KKyAgICAgICAgICAgICAgICAoQWN0aXZpdHlTdGFja1N1cGVydmlzb3IuQWN0aXZpdHlDb250YWluZXIpaUNvbnRhaW5lcjsKKyAgICAgICAgc3luY2hyb25pemVkIChtU2VydmljZSkgeworICAgICAgICAgICAgaWYgKGNvbnRhaW5lciAhPSBudWxsICYmIGNvbnRhaW5lci5tUGFyZW50QWN0aXZpdHkgIT0gbnVsbCAmJgorICAgICAgICAgICAgICAgICAgICBjb250YWluZXIubVBhcmVudEFjdGl2aXR5LnN0YXRlICE9IFJFU1VNRUQpIHsKKyAgICAgICAgICAgICAgICAvLyBDYW5ub3Qgc3RhcnQgYSBjaGlsZCBhY3Rpdml0eSBpZiB0aGUgcGFyZW50IGlzIG5vdCByZXN1bWVkLgorICAgICAgICAgICAgICAgIHJldHVybiBBY3Rpdml0eU1hbmFnZXIuU1RBUlRfQ0FOQ0VMRUQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaW5hbCBpbnQgcmVhbENhbGxpbmdQaWQgPSBCaW5kZXIuZ2V0Q2FsbGluZ1BpZCgpOworICAgICAgICAgICAgZmluYWwgaW50IHJlYWxDYWxsaW5nVWlkID0gQmluZGVyLmdldENhbGxpbmdVaWQoKTsKKyAgICAgICAgICAgIGludCBjYWxsaW5nUGlkOworICAgICAgICAgICAgaWYgKGNhbGxpbmdVaWQgPj0gMCkgeworICAgICAgICAgICAgICAgIGNhbGxpbmdQaWQgPSAtMTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY2FsbGVyID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBjYWxsaW5nUGlkID0gcmVhbENhbGxpbmdQaWQ7CisgICAgICAgICAgICAgICAgY2FsbGluZ1VpZCA9IHJlYWxDYWxsaW5nVWlkOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjYWxsaW5nUGlkID0gY2FsbGluZ1VpZCA9IC0xOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmaW5hbCBBY3Rpdml0eVN0YWNrIHN0YWNrOworICAgICAgICAgICAgaWYgKGNvbnRhaW5lciA9PSBudWxsIHx8IGNvbnRhaW5lci5tU3RhY2suaXNPbkhvbWVEaXNwbGF5KCkpIHsKKyAgICAgICAgICAgICAgICBzdGFjayA9IG1TdXBlcnZpc29yLm1Gb2N1c2VkU3RhY2s7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHN0YWNrID0gY29udGFpbmVyLm1TdGFjazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0YWNrLm1Db25maWdXaWxsQ2hhbmdlID0gY29uZmlnICE9IG51bGwgJiYgbVNlcnZpY2UubUNvbmZpZ3VyYXRpb24uZGlmZihjb25maWcpICE9IDA7CisgICAgICAgICAgICBpZiAoREVCVUdfQ09ORklHVVJBVElPTikgU2xvZy52KFRBR19DT05GSUdVUkFUSU9OLAorICAgICAgICAgICAgICAgICAgICAiU3RhcnRpbmcgYWN0aXZpdHkgd2hlbiBjb25maWcgd2lsbCBjaGFuZ2UgPSAiICsgc3RhY2subUNvbmZpZ1dpbGxDaGFuZ2UpOworCisgICAgICAgICAgICBmaW5hbCBsb25nIG9yaWdJZCA9IEJpbmRlci5jbGVhckNhbGxpbmdJZGVudGl0eSgpOworCisgICAgICAgICAgICBpZiAoYUluZm8gIT0gbnVsbCAmJgorICAgICAgICAgICAgICAgICAgICAoYUluZm8uYXBwbGljYXRpb25JbmZvLnByaXZhdGVGbGFncworICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgQXBwbGljYXRpb25JbmZvLlBSSVZBVEVfRkxBR19DQU5UX1NBVkVfU1RBVEUpICE9IDApIHsKKyAgICAgICAgICAgICAgICAvLyBUaGlzIG1heSBiZSBhIGhlYXZ5LXdlaWdodCBwcm9jZXNzISAgQ2hlY2sgdG8gc2VlIGlmIHdlIGFscmVhZHkKKyAgICAgICAgICAgICAgICAvLyBoYXZlIGFub3RoZXIsIGRpZmZlcmVudCBoZWF2eS13ZWlnaHQgcHJvY2VzcyBydW5uaW5nLgorICAgICAgICAgICAgICAgIGlmIChhSW5mby5wcm9jZXNzTmFtZS5lcXVhbHMoYUluZm8uYXBwbGljYXRpb25JbmZvLnBhY2thZ2VOYW1lKSkgeworICAgICAgICAgICAgICAgICAgICBmaW5hbCBQcm9jZXNzUmVjb3JkIGhlYXZ5ID0gbVNlcnZpY2UubUhlYXZ5V2VpZ2h0UHJvY2VzczsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGhlYXZ5ICE9IG51bGwgJiYgKGhlYXZ5LmluZm8udWlkICE9IGFJbmZvLmFwcGxpY2F0aW9uSW5mby51aWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAhaGVhdnkucHJvY2Vzc05hbWUuZXF1YWxzKGFJbmZvLnByb2Nlc3NOYW1lKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBhcHBDYWxsaW5nVWlkID0gY2FsbGluZ1VpZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYWxsZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2Nlc3NSZWNvcmQgY2FsbGVyQXBwID0gbVNlcnZpY2UuZ2V0UmVjb3JkRm9yQXBwTG9ja2VkKGNhbGxlcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxlckFwcCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcENhbGxpbmdVaWQgPSBjYWxsZXJBcHAuaW5mby51aWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2xvZy53KFRBRywgIlVuYWJsZSB0byBmaW5kIGFwcCBmb3IgY2FsbGVyICIgKyBjYWxsZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgKHBpZD0iICsgY2FsbGluZ1BpZCArICIpIHdoZW4gc3RhcnRpbmc6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGludGVudC50b1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlPcHRpb25zLmFib3J0KG9wdGlvbnMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX1BFUk1JU1NJT05fREVOSUVEOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgSUludGVudFNlbmRlciB0YXJnZXQgPSBtU2VydmljZS5nZXRJbnRlbnRTZW5kZXJMb2NrZWQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5TWFuYWdlci5JTlRFTlRfU0VOREVSX0FDVElWSVRZLCAiYW5kcm9pZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcENhbGxpbmdVaWQsIHVzZXJJZCwgbnVsbCwgbnVsbCwgMCwgbmV3IEludGVudFtdIHsgaW50ZW50IH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdbXSB7IHJlc29sdmVkVHlwZSB9LCBQZW5kaW5nSW50ZW50LkZMQUdfQ0FOQ0VMX0NVUlJFTlQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBlbmRpbmdJbnRlbnQuRkxBR19PTkVfU0hPVCwgbnVsbCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIEludGVudCBuZXdJbnRlbnQgPSBuZXcgSW50ZW50KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxdWVzdENvZGUgPj0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhbGxlciBpcyByZXF1ZXN0aW5nIGEgcmVzdWx0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0ludGVudC5wdXRFeHRyYShIZWF2eVdlaWdodFN3aXRjaGVyQWN0aXZpdHkuS0VZX0hBU19SRVNVTFQsIHRydWUpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW50ZW50LnB1dEV4dHJhKEhlYXZ5V2VpZ2h0U3dpdGNoZXJBY3Rpdml0eS5LRVlfSU5URU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgSW50ZW50U2VuZGVyKHRhcmdldCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhlYXZ5LmFjdGl2aXRpZXMuc2l6ZSgpID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5UmVjb3JkIGhpc3QgPSBoZWF2eS5hY3Rpdml0aWVzLmdldCgwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdJbnRlbnQucHV0RXh0cmEoSGVhdnlXZWlnaHRTd2l0Y2hlckFjdGl2aXR5LktFWV9DVVJfQVBQLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlzdC5wYWNrYWdlTmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW50ZW50LnB1dEV4dHJhKEhlYXZ5V2VpZ2h0U3dpdGNoZXJBY3Rpdml0eS5LRVlfQ1VSX1RBU0ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaXN0LnRhc2sudGFza0lkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld0ludGVudC5wdXRFeHRyYShIZWF2eVdlaWdodFN3aXRjaGVyQWN0aXZpdHkuS0VZX05FV19BUFAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFJbmZvLnBhY2thZ2VOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld0ludGVudC5zZXRGbGFncyhpbnRlbnQuZ2V0RmxhZ3MoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdJbnRlbnQuc2V0Q2xhc3NOYW1lKCJhbmRyb2lkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGVhdnlXZWlnaHRTd2l0Y2hlckFjdGl2aXR5LmNsYXNzLmdldE5hbWUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnRlbnQgPSBuZXdJbnRlbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlZFR5cGUgPSBudWxsOworICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGVyID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxpbmdVaWQgPSBCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpOworICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGluZ1BpZCA9IEJpbmRlci5nZXRDYWxsaW5nUGlkKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRTcGVjaWZpZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgckluZm8gPSBtU3VwZXJ2aXNvci5yZXNvbHZlSW50ZW50KGludGVudCwgbnVsbCAvKnJlc29sdmVkVHlwZSovLCB1c2VySWQpOworICAgICAgICAgICAgICAgICAgICAgICAgYUluZm8gPSBySW5mbyAhPSBudWxsID8gckluZm8uYWN0aXZpdHlJbmZvIDogbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhSW5mbyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUluZm8gPSBtU2VydmljZS5nZXRBY3Rpdml0eUluZm9Gb3JVc2VyKGFJbmZvLCB1c2VySWQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpbnQgcmVzID0gc3RhcnRBY3Rpdml0eUxvY2tlZChjYWxsZXIsIGludGVudCwgZXBoZW1lcmFsSW50ZW50LCByZXNvbHZlZFR5cGUsCisgICAgICAgICAgICAgICAgICAgIGFJbmZvLCBySW5mbywgdm9pY2VTZXNzaW9uLCB2b2ljZUludGVyYWN0b3IsCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFRvLCByZXN1bHRXaG8sIHJlcXVlc3RDb2RlLCBjYWxsaW5nUGlkLAorICAgICAgICAgICAgICAgICAgICBjYWxsaW5nVWlkLCBjYWxsaW5nUGFja2FnZSwgcmVhbENhbGxpbmdQaWQsIHJlYWxDYWxsaW5nVWlkLCBzdGFydEZsYWdzLAorICAgICAgICAgICAgICAgICAgICBvcHRpb25zLCBpZ25vcmVUYXJnZXRTZWN1cml0eSwgY29tcG9uZW50U3BlY2lmaWVkLCBudWxsLCBjb250YWluZXIsIGluVGFzayk7CisKKyAgICAgICAgICAgIEJpbmRlci5yZXN0b3JlQ2FsbGluZ0lkZW50aXR5KG9yaWdJZCk7CisKKyAgICAgICAgICAgIGlmIChzdGFjay5tQ29uZmlnV2lsbENoYW5nZSkgeworICAgICAgICAgICAgICAgIC8vIElmIHRoZSBjYWxsZXIgYWxzbyB3YW50cyB0byBzd2l0Y2ggdG8gYSBuZXcgY29uZmlndXJhdGlvbiwKKyAgICAgICAgICAgICAgICAvLyBkbyBzbyBub3cuICBUaGlzIGFsbG93cyBhIGNsZWFuIHN3aXRjaCwgYXMgd2UgYXJlIHdhaXRpbmcKKyAgICAgICAgICAgICAgICAvLyBmb3IgdGhlIGN1cnJlbnQgYWN0aXZpdHkgdG8gcGF1c2UgKHNvIHdlIHdpbGwgbm90IGRlc3Ryb3kKKyAgICAgICAgICAgICAgICAvLyBpdCksIGFuZCBoYXZlIG5vdCB5ZXQgc3RhcnRlZCB0aGUgbmV4dCBhY3Rpdml0eS4KKyAgICAgICAgICAgICAgICBtU2VydmljZS5lbmZvcmNlQ2FsbGluZ1Blcm1pc3Npb24oYW5kcm9pZC5NYW5pZmVzdC5wZXJtaXNzaW9uLkNIQU5HRV9DT05GSUdVUkFUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgInVwZGF0ZUNvbmZpZ3VyYXRpb24oKSIpOworICAgICAgICAgICAgICAgIHN0YWNrLm1Db25maWdXaWxsQ2hhbmdlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKERFQlVHX0NPTkZJR1VSQVRJT04pIFNsb2cudihUQUdfQ09ORklHVVJBVElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJVcGRhdGluZyB0byBuZXcgY29uZmlndXJhdGlvbiBhZnRlciBzdGFydGluZyBhY3Rpdml0eS4iKTsKKyAgICAgICAgICAgICAgICBtU2VydmljZS51cGRhdGVDb25maWd1cmF0aW9uTG9ja2VkKGNvbmZpZywgbnVsbCwgZmFsc2UpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAob3V0UmVzdWx0ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBvdXRSZXN1bHQucmVzdWx0ID0gcmVzOworICAgICAgICAgICAgICAgIGlmIChyZXMgPT0gQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICAgICAgbVN1cGVydmlzb3IubVdhaXRpbmdBY3Rpdml0eUxhdW5jaGVkLmFkZChvdXRSZXN1bHQpOworICAgICAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TZXJ2aWNlLndhaXQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoIW91dFJlc3VsdC50aW1lb3V0ICYmIG91dFJlc3VsdC53aG8gPT0gbnVsbCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXMgPT0gU1RBUlRfVEFTS19UT19GUk9OVCkgeworICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eVJlY29yZCByID0gc3RhY2sudG9wUnVubmluZ0FjdGl2aXR5TG9ja2VkKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChyLm5vd1Zpc2libGUgJiYgci5zdGF0ZSA9PSBSRVNVTUVEKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXRSZXN1bHQudGltZW91dCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgb3V0UmVzdWx0LndobyA9IG5ldyBDb21wb25lbnROYW1lKHIuaW5mby5wYWNrYWdlTmFtZSwgci5pbmZvLm5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgb3V0UmVzdWx0LnRvdGFsVGltZSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXRSZXN1bHQudGhpc1RpbWUgPSAwOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgb3V0UmVzdWx0LnRoaXNUaW1lID0gU3lzdGVtQ2xvY2sudXB0aW1lTWlsbGlzKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtU3VwZXJ2aXNvci5tV2FpdGluZ0FjdGl2aXR5VmlzaWJsZS5hZGQob3V0UmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU2VydmljZS53YWl0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKCFvdXRSZXN1bHQudGltZW91dCAmJiBvdXRSZXN1bHQud2hvID09IG51bGwpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gcmVzOworICAgICAgICB9CisgICAgfQorCisgICAgZmluYWwgaW50IHN0YXJ0QWN0aXZpdGllcyhJQXBwbGljYXRpb25UaHJlYWQgY2FsbGVyLCBpbnQgY2FsbGluZ1VpZCwgU3RyaW5nIGNhbGxpbmdQYWNrYWdlLAorICAgICAgICAgICAgSW50ZW50W10gaW50ZW50cywgU3RyaW5nW10gcmVzb2x2ZWRUeXBlcywgSUJpbmRlciByZXN1bHRUbywKKyAgICAgICAgICAgIEJ1bmRsZSBiT3B0aW9ucywgaW50IHVzZXJJZCkgeworICAgICAgICBpZiAoaW50ZW50cyA9PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oImludGVudHMgaXMgbnVsbCIpOworICAgICAgICB9CisgICAgICAgIGlmIChyZXNvbHZlZFR5cGVzID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBOdWxsUG9pbnRlckV4Y2VwdGlvbigicmVzb2x2ZWRUeXBlcyBpcyBudWxsIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGludGVudHMubGVuZ3RoICE9IHJlc29sdmVkVHlwZXMubGVuZ3RoKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJpbnRlbnRzIGFyZSBsZW5ndGggZGlmZmVyZW50IHRoYW4gcmVzb2x2ZWRUeXBlcyIpOworICAgICAgICB9CisKKworICAgICAgICBpbnQgY2FsbGluZ1BpZDsKKyAgICAgICAgaWYgKGNhbGxpbmdVaWQgPj0gMCkgeworICAgICAgICAgICAgY2FsbGluZ1BpZCA9IC0xOworICAgICAgICB9IGVsc2UgaWYgKGNhbGxlciA9PSBudWxsKSB7CisgICAgICAgICAgICBjYWxsaW5nUGlkID0gQmluZGVyLmdldENhbGxpbmdQaWQoKTsKKyAgICAgICAgICAgIGNhbGxpbmdVaWQgPSBCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY2FsbGluZ1BpZCA9IGNhbGxpbmdVaWQgPSAtMTsKKyAgICAgICAgfQorICAgICAgICBmaW5hbCBsb25nIG9yaWdJZCA9IEJpbmRlci5jbGVhckNhbGxpbmdJZGVudGl0eSgpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgc3luY2hyb25pemVkIChtU2VydmljZSkgeworICAgICAgICAgICAgICAgIEFjdGl2aXR5UmVjb3JkW10gb3V0QWN0aXZpdHkgPSBuZXcgQWN0aXZpdHlSZWNvcmRbMV07CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPGludGVudHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgSW50ZW50IGludGVudCA9IGludGVudHNbaV07CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnRlbnQgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyBSZWZ1c2UgcG9zc2libGUgbGVha2VkIGZpbGUgZGVzY3JpcHRvcnMKKyAgICAgICAgICAgICAgICAgICAgaWYgKGludGVudCAhPSBudWxsICYmIGludGVudC5oYXNGaWxlRGVzY3JpcHRvcnMoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiRmlsZSBkZXNjcmlwdG9ycyBwYXNzZWQgaW4gSW50ZW50Iik7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBib29sZWFuIGNvbXBvbmVudFNwZWNpZmllZCA9IGludGVudC5nZXRDb21wb25lbnQoKSAhPSBudWxsOworCisgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IG1vZGlmeSB0aGUgY2xpZW50J3Mgb2JqZWN0IQorICAgICAgICAgICAgICAgICAgICBpbnRlbnQgPSBuZXcgSW50ZW50KGludGVudCk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gQ29sbGVjdCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdGFyZ2V0IG9mIHRoZSBJbnRlbnQuCisgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5SW5mbyBhSW5mbyA9IG1TdXBlcnZpc29yLnJlc29sdmVBY3Rpdml0eShpbnRlbnQsIHJlc29sdmVkVHlwZXNbaV0sIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwgdXNlcklkKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogTmV3LCBjaGVjayBpZiB0aGlzIGlzIGNvcnJlY3QKKyAgICAgICAgICAgICAgICAgICAgYUluZm8gPSBtU2VydmljZS5nZXRBY3Rpdml0eUluZm9Gb3JVc2VyKGFJbmZvLCB1c2VySWQpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChhSW5mbyAhPSBudWxsICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFJbmZvLmFwcGxpY2F0aW9uSW5mby5wcml2YXRlRmxhZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgQXBwbGljYXRpb25JbmZvLlBSSVZBVEVfRkxBR19DQU5UX1NBVkVfU1RBVEUpICAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRkxBR19DQU5UX1NBVkVfU1RBVEUgbm90IHN1cHBvcnRlZCBoZXJlIik7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eU9wdGlvbnMgb3B0aW9ucyA9IEFjdGl2aXR5T3B0aW9ucy5mcm9tQnVuZGxlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPT0gaW50ZW50cy5sZW5ndGggLSAxID8gYk9wdGlvbnMgOiBudWxsKTsKKyAgICAgICAgICAgICAgICAgICAgaW50IHJlcyA9IHN0YXJ0QWN0aXZpdHlMb2NrZWQoY2FsbGVyLCBpbnRlbnQsIG51bGwgLyplcGhlbWVyYWxJbnRlbnQqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlZFR5cGVzW2ldLCBhSW5mbywgbnVsbCAvKnJJbmZvKi8sIG51bGwsIG51bGwsIHJlc3VsdFRvLCBudWxsLCAtMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsaW5nUGlkLCBjYWxsaW5nVWlkLCBjYWxsaW5nUGFja2FnZSwgY2FsbGluZ1BpZCwgY2FsbGluZ1VpZCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLCBmYWxzZSwgY29tcG9uZW50U3BlY2lmaWVkLCBvdXRBY3Rpdml0eSwgbnVsbCwgbnVsbCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZXMgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0VG8gPSBvdXRBY3Rpdml0eVswXSAhPSBudWxsID8gb3V0QWN0aXZpdHlbMF0uYXBwVG9rZW4gOiBudWxsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIEJpbmRlci5yZXN0b3JlQ2FsbGluZ0lkZW50aXR5KG9yaWdJZCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gU1RBUlRfU1VDQ0VTUzsKKyAgICB9CisKKyAgICBwcml2YXRlIGludCBzdGFydEFjdGl2aXR5VW5jaGVja2VkKGZpbmFsIEFjdGl2aXR5UmVjb3JkIHIsIEFjdGl2aXR5UmVjb3JkIHNvdXJjZVJlY29yZCwKKyAgICAgICAgICAgIElWb2ljZUludGVyYWN0aW9uU2Vzc2lvbiB2b2ljZVNlc3Npb24sIElWb2ljZUludGVyYWN0b3Igdm9pY2VJbnRlcmFjdG9yLAorICAgICAgICAgICAgaW50IHN0YXJ0RmxhZ3MsIGJvb2xlYW4gZG9SZXN1bWUsIEFjdGl2aXR5T3B0aW9ucyBvcHRpb25zLCBUYXNrUmVjb3JkIGluVGFzaykgeworCisgICAgICAgIHNldEluaXRpYWxTdGF0ZShyLCBvcHRpb25zLCBpblRhc2ssIGRvUmVzdW1lLCBzdGFydEZsYWdzLCBzb3VyY2VSZWNvcmQsIHZvaWNlU2Vzc2lvbiwKKyAgICAgICAgICAgICAgICB2b2ljZUludGVyYWN0b3IpOworCisgICAgICAgIGNvbXB1dGVMYXVuY2hpbmdUYXNrRmxhZ3MoKTsKKworICAgICAgICBjb21wdXRlU291cmNlU3RhY2soKTsKKworICAgICAgICBtSW50ZW50LnNldEZsYWdzKG1MYXVuY2hGbGFncyk7CisKKyAgICAgICAgQWN0aXZpdHlSZWNvcmQgaW50ZW50QWN0aXZpdHkgPSBnZXRSZXVzYWJsZUludGVudEFjdGl2aXR5KCk7CisKKyAgICAgICAgaWYgKGludGVudEFjdGl2aXR5ICE9IG51bGwpIHsKKyAgICAgICAgICAgIC8vIFdoZW4gdGhlIGZsYWdzIE5FV19UQVNLIGFuZCBDTEVBUl9UQVNLIGFyZSBzZXQsIHRoZW4gdGhlIHRhc2sgZ2V0cyByZXVzZWQgYnV0CisgICAgICAgICAgICAvLyBzdGlsbCBuZWVkcyB0byBiZSBhIGxvY2sgdGFzayBtb2RlIHZpb2xhdGlvbiBzaW5jZSB0aGUgdGFzayBnZXRzIGNsZWFyZWQgb3V0IGFuZAorICAgICAgICAgICAgLy8gdGhlIGRldmljZSB3b3VsZCBvdGhlcndpc2UgbGVhdmUgdGhlIGxvY2tlZCB0YXNrLgorICAgICAgICAgICAgaWYgKG1TdXBlcnZpc29yLmlzTG9ja1Rhc2tNb2RlVmlvbGF0aW9uKGludGVudEFjdGl2aXR5LnRhc2ssCisgICAgICAgICAgICAgICAgICAgIChtTGF1bmNoRmxhZ3MgJiAoRkxBR19BQ1RJVklUWV9ORVdfVEFTSyB8IEZMQUdfQUNUSVZJVFlfQ0xFQVJfVEFTSykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gKEZMQUdfQUNUSVZJVFlfTkVXX1RBU0sgfCBGTEFHX0FDVElWSVRZX0NMRUFSX1RBU0spKSkgeworICAgICAgICAgICAgICAgIG1TdXBlcnZpc29yLnNob3dMb2NrVGFza1RvYXN0KCk7CisgICAgICAgICAgICAgICAgU2xvZy5lKFRBRywgInN0YXJ0QWN0aXZpdHlVbmNoZWNrZWQ6IEF0dGVtcHQgdG8gdmlvbGF0ZSBMb2NrIFRhc2sgTW9kZSIpOworICAgICAgICAgICAgICAgIHJldHVybiBTVEFSVF9SRVRVUk5fTE9DS19UQVNLX01PREVfVklPTEFUSU9OOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobVN0YXJ0QWN0aXZpdHkudGFzayA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgbVN0YXJ0QWN0aXZpdHkudGFzayA9IGludGVudEFjdGl2aXR5LnRhc2s7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaW50ZW50QWN0aXZpdHkudGFzay5pbnRlbnQgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIC8vIFRoaXMgdGFzayB3YXMgc3RhcnRlZCBiZWNhdXNlIG9mIG1vdmVtZW50IG9mIHRoZSBhY3Rpdml0eSBiYXNlZCBvbiBhZmZpbml0eS4uLgorICAgICAgICAgICAgICAgIC8vIE5vdyB0aGF0IHdlIGFyZSBhY3R1YWxseSBsYXVuY2hpbmcgaXQsIHdlIGNhbiBhc3NpZ24gdGhlIGJhc2UgaW50ZW50LgorICAgICAgICAgICAgICAgIGludGVudEFjdGl2aXR5LnRhc2suc2V0SW50ZW50KG1TdGFydEFjdGl2aXR5KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaW50ZW50QWN0aXZpdHkgPSBzZXRUYXJnZXRTdGFja0FuZE1vdmVUb0Zyb250SWZOZWVkZWQoaW50ZW50QWN0aXZpdHkpOworCisgICAgICAgICAgICBpZiAoKG1TdGFydEZsYWdzICYgU1RBUlRfRkxBR19PTkxZX0lGX05FRURFRCkgIT0gMCkgeworICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gc3RhcnQgYSBuZXcgYWN0aXZpdHksIGFuZCB0aGUgY2xpZW50IHNhaWQgbm90IHRvIGRvIGFueXRoaW5nCisgICAgICAgICAgICAgICAgLy8gaWYgdGhhdCBpcyB0aGUgY2FzZSwgc28gdGhpcyBpcyBpdCEgIEFuZCBmb3IgcGFyYW5vaWEsIG1ha2Ugc3VyZSB3ZSBoYXZlCisgICAgICAgICAgICAgICAgLy8gY29ycmVjdGx5IHJlc3VtZWQgdGhlIHRvcCBhY3Rpdml0eS4KKyAgICAgICAgICAgICAgICByZXN1bWVUYXJnZXRTdGFja0lmTmVlZGVkKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFNUQVJUX1JFVFVSTl9JTlRFTlRfVE9fQ0FMTEVSOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzZXRUYXNrRnJvbUludGVudEFjdGl2aXR5KGludGVudEFjdGl2aXR5KTsKKworICAgICAgICAgICAgaWYgKCFtQWRkaW5nVG9UYXNrICYmIG1SZXVzZVRhc2sgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIC8vIFdlIGRpZG4ndCBkbyBhbnl0aGluZy4uLiAgYnV0IGl0IHdhcyBuZWVkZWQgKGEuay5hLiwgY2xpZW50IGRvbid0IHVzZSB0aGF0CisgICAgICAgICAgICAgICAgLy8gaW50ZW50ISkgIEFuZCBmb3IgcGFyYW5vaWEsIG1ha2Ugc3VyZSB3ZSBoYXZlIGNvcnJlY3RseSByZXN1bWVkIHRoZSB0b3AgYWN0aXZpdHkuCisgICAgICAgICAgICAgICAgcmVzdW1lVGFyZ2V0U3RhY2tJZk5lZWRlZCgpOworICAgICAgICAgICAgICAgIHJldHVybiBTVEFSVF9UQVNLX1RPX0ZST05UOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKG1TdGFydEFjdGl2aXR5LnBhY2thZ2VOYW1lID09IG51bGwpIHsKKyAgICAgICAgICAgIGlmIChtU3RhcnRBY3Rpdml0eS5yZXN1bHRUbyAhPSBudWxsICYmIG1TdGFydEFjdGl2aXR5LnJlc3VsdFRvLnRhc2suc3RhY2sgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG1TdGFydEFjdGl2aXR5LnJlc3VsdFRvLnRhc2suc3RhY2suc2VuZEFjdGl2aXR5UmVzdWx0TG9ja2VkKAorICAgICAgICAgICAgICAgICAgICAgICAgLTEsIG1TdGFydEFjdGl2aXR5LnJlc3VsdFRvLCBtU3RhcnRBY3Rpdml0eS5yZXN1bHRXaG8sCisgICAgICAgICAgICAgICAgICAgICAgICBtU3RhcnRBY3Rpdml0eS5yZXF1ZXN0Q29kZSwgUkVTVUxUX0NBTkNFTEVELCBudWxsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFjdGl2aXR5T3B0aW9ucy5hYm9ydChtT3B0aW9ucyk7CisgICAgICAgICAgICByZXR1cm4gU1RBUlRfQ0xBU1NfTk9UX0ZPVU5EOworICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgdGhlIGFjdGl2aXR5IGJlaW5nIGxhdW5jaGVkIGlzIHRoZSBzYW1lIGFzIHRoZSBvbmUgY3VycmVudGx5IGF0IHRoZSB0b3AsIHRoZW4KKyAgICAgICAgLy8gd2UgbmVlZCB0byBjaGVjayBpZiBpdCBzaG91bGQgb25seSBiZSBsYXVuY2hlZCBvbmNlLgorICAgICAgICBmaW5hbCBBY3Rpdml0eVN0YWNrIHRvcFN0YWNrID0gbVN1cGVydmlzb3IubUZvY3VzZWRTdGFjazsKKyAgICAgICAgZmluYWwgQWN0aXZpdHlSZWNvcmQgdG9wID0gdG9wU3RhY2sudG9wUnVubmluZ05vbkRlbGF5ZWRBY3Rpdml0eUxvY2tlZChtTm90VG9wKTsKKyAgICAgICAgZmluYWwgYm9vbGVhbiBkb250U3RhcnQgPSB0b3AgIT0gbnVsbCAmJiBtU3RhcnRBY3Rpdml0eS5yZXN1bHRUbyA9PSBudWxsCisgICAgICAgICAgICAgICAgJiYgdG9wLnJlYWxBY3Rpdml0eS5lcXVhbHMobVN0YXJ0QWN0aXZpdHkucmVhbEFjdGl2aXR5KQorICAgICAgICAgICAgICAgICYmIHRvcC51c2VySWQgPT0gbVN0YXJ0QWN0aXZpdHkudXNlcklkCisgICAgICAgICAgICAgICAgJiYgdG9wLmFwcCAhPSBudWxsICYmIHRvcC5hcHAudGhyZWFkICE9IG51bGwKKyAgICAgICAgICAgICAgICAmJiAoKG1MYXVuY2hGbGFncyAmIEZMQUdfQUNUSVZJVFlfU0lOR0xFX1RPUCkgIT0gMAorICAgICAgICAgICAgICAgIHx8IG1MYXVuY2hTaW5nbGVUb3AgfHwgbUxhdW5jaFNpbmdsZVRhc2spOworICAgICAgICBpZiAoZG9udFN0YXJ0KSB7CisgICAgICAgICAgICBBY3Rpdml0eVN0YWNrLmxvZ1N0YXJ0QWN0aXZpdHkoRXZlbnRMb2dUYWdzLkFNX05FV19JTlRFTlQsIHRvcCwgdG9wLnRhc2spOworICAgICAgICAgICAgLy8gRm9yIHBhcmFub2lhLCBtYWtlIHN1cmUgd2UgaGF2ZSBjb3JyZWN0bHkgcmVzdW1lZCB0aGUgdG9wIGFjdGl2aXR5LgorICAgICAgICAgICAgdG9wU3RhY2subUxhc3RQYXVzZWRBY3Rpdml0eSA9IG51bGw7CisgICAgICAgICAgICBpZiAobURvUmVzdW1lKSB7CisgICAgICAgICAgICAgICAgbVN1cGVydmlzb3IucmVzdW1lRm9jdXNlZFN0YWNrVG9wQWN0aXZpdHlMb2NrZWQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFjdGl2aXR5T3B0aW9ucy5hYm9ydChtT3B0aW9ucyk7CisgICAgICAgICAgICBpZiAoKG1TdGFydEZsYWdzICYgU1RBUlRfRkxBR19PTkxZX0lGX05FRURFRCkgIT0gMCkgeworICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gc3RhcnQgYSBuZXcgYWN0aXZpdHksIGFuZCB0aGUgY2xpZW50IHNhaWQgbm90IHRvIGRvCisgICAgICAgICAgICAgICAgLy8gYW55dGhpbmcgaWYgdGhhdCBpcyB0aGUgY2FzZSwgc28gdGhpcyBpcyBpdCEKKyAgICAgICAgICAgICAgICByZXR1cm4gU1RBUlRfUkVUVVJOX0lOVEVOVF9UT19DQUxMRVI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0b3AuZGVsaXZlck5ld0ludGVudExvY2tlZCgKKyAgICAgICAgICAgICAgICAgICAgbUNhbGxpbmdVaWQsIG1TdGFydEFjdGl2aXR5LmludGVudCwgbVN0YXJ0QWN0aXZpdHkubGF1bmNoZWRGcm9tUGFja2FnZSk7CisgICAgICAgICAgICByZXR1cm4gU1RBUlRfREVMSVZFUkVEX1RPX1RPUDsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2xlYW4gbmV3VGFzayA9IGZhbHNlOworICAgICAgICBmaW5hbCBUYXNrUmVjb3JkIHRhc2tUb0FmZmlsaWF0ZSA9IChtTGF1bmNoVGFza0JlaGluZCAmJiBtU291cmNlUmVjb3JkICE9IG51bGwpCisgICAgICAgICAgICAgICAgPyBtU291cmNlUmVjb3JkLnRhc2sgOiBudWxsOworCisgICAgICAgIC8vIFNob3VsZCB0aGlzIGJlIGNvbnNpZGVyZWQgYSBuZXcgdGFzaz8KKyAgICAgICAgaWYgKG1TdGFydEFjdGl2aXR5LnJlc3VsdFRvID09IG51bGwgJiYgbUluVGFzayA9PSBudWxsICYmICFtQWRkaW5nVG9UYXNrCisgICAgICAgICAgICAgICAgJiYgKG1MYXVuY2hGbGFncyAmIEZMQUdfQUNUSVZJVFlfTkVXX1RBU0spICE9IDApIHsKKyAgICAgICAgICAgIG5ld1Rhc2sgPSB0cnVlOworICAgICAgICAgICAgc2V0VGFza0Zyb21SZXVzZU9yQ3JlYXRlTmV3VGFzayh0YXNrVG9BZmZpbGlhdGUpOworCisgICAgICAgICAgICBpZiAobVN1cGVydmlzb3IuaXNMb2NrVGFza01vZGVWaW9sYXRpb24obVN0YXJ0QWN0aXZpdHkudGFzaykpIHsKKyAgICAgICAgICAgICAgICBTbG9nLmUoVEFHLCAiQXR0ZW1wdGVkIExvY2sgVGFzayBNb2RlIHZpb2xhdGlvbiBtU3RhcnRBY3Rpdml0eT0iICsgbVN0YXJ0QWN0aXZpdHkpOworICAgICAgICAgICAgICAgIHJldHVybiBTVEFSVF9SRVRVUk5fTE9DS19UQVNLX01PREVfVklPTEFUSU9OOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFtTW92ZWRIb21lCisgICAgICAgICAgICAgICAgICAgICYmIChtTGF1bmNoRmxhZ3MgJiAoRkxBR19BQ1RJVklUWV9ORVdfVEFTSyB8IEZMQUdfQUNUSVZJVFlfVEFTS19PTl9IT01FKSkKKyAgICAgICAgICAgICAgICAgICAgPT0gKEZMQUdfQUNUSVZJVFlfTkVXX1RBU0sgfCBGTEFHX0FDVElWSVRZX1RBU0tfT05fSE9NRSkpIHsKKyAgICAgICAgICAgICAgICAvLyBDYWxsZXIgd2FudHMgdG8gYXBwZWFyIG9uIGhvbWUgYWN0aXZpdHksIHNvIGJlZm9yZSBzdGFydGluZworICAgICAgICAgICAgICAgIC8vIHRoZWlyIG93biBhY3Rpdml0eSB3ZSB3aWxsIGJyaW5nIGhvbWUgdG8gdGhlIGZyb250LgorICAgICAgICAgICAgICAgIG1TdGFydEFjdGl2aXR5LnRhc2suc2V0VGFza1RvUmV0dXJuVG8oSE9NRV9BQ1RJVklUWV9UWVBFKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChtU291cmNlUmVjb3JkICE9IG51bGwpIHsKKyAgICAgICAgICAgIGlmIChtU3VwZXJ2aXNvci5pc0xvY2tUYXNrTW9kZVZpb2xhdGlvbihtU291cmNlUmVjb3JkLnRhc2spKSB7CisgICAgICAgICAgICAgICAgU2xvZy5lKFRBRywgIkF0dGVtcHRlZCBMb2NrIFRhc2sgTW9kZSB2aW9sYXRpb24gbVN0YXJ0QWN0aXZpdHk9IiArIG1TdGFydEFjdGl2aXR5KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gU1RBUlRfUkVUVVJOX0xPQ0tfVEFTS19NT0RFX1ZJT0xBVElPTjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZmluYWwgaW50IHJlc3VsdCA9IHNldFRhc2tGcm9tU291cmNlUmVjb3JkKCk7CisgICAgICAgICAgICBpZiAocmVzdWx0ICE9IFNUQVJUX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKG1JblRhc2sgIT0gbnVsbCkgeworICAgICAgICAgICAgLy8gVGhlIGNhbGxlciBpcyBhc2tpbmcgdGhhdCB0aGUgbmV3IGFjdGl2aXR5IGJlIHN0YXJ0ZWQgaW4gYW4gZXhwbGljaXQKKyAgICAgICAgICAgIC8vIHRhc2sgaXQgaGFzIHByb3ZpZGVkIHRvIHVzLgorICAgICAgICAgICAgaWYgKG1TdXBlcnZpc29yLmlzTG9ja1Rhc2tNb2RlVmlvbGF0aW9uKG1JblRhc2spKSB7CisgICAgICAgICAgICAgICAgU2xvZy5lKFRBRywgIkF0dGVtcHRlZCBMb2NrIFRhc2sgTW9kZSB2aW9sYXRpb24gbVN0YXJ0QWN0aXZpdHk9IiArIG1TdGFydEFjdGl2aXR5KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gU1RBUlRfUkVUVVJOX0xPQ0tfVEFTS19NT0RFX1ZJT0xBVElPTjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZmluYWwgaW50IHJlc3VsdCA9IHNldFRhc2tGcm9tSW5UYXNrKCk7CisgICAgICAgICAgICBpZiAocmVzdWx0ICE9IFNUQVJUX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gVGhpcyBub3QgYmVpbmcgc3RhcnRlZCBmcm9tIGFuIGV4aXN0aW5nIGFjdGl2aXR5LCBhbmQgbm90IHBhcnQgb2YgYSBuZXcgdGFzay4uLgorICAgICAgICAgICAgLy8ganVzdCBwdXQgaXQgaW4gdGhlIHRvcCB0YXNrLCB0aG91Z2ggdGhlc2UgZGF5cyB0aGlzIGNhc2Ugc2hvdWxkIG5ldmVyIGhhcHBlbi4KKyAgICAgICAgICAgIHNldFRhc2tUb0N1cnJlbnRUb3BPckNyZWF0ZU5ld1Rhc2soKTsKKyAgICAgICAgfQorCisgICAgICAgIG1TZXJ2aWNlLmdyYW50VXJpUGVybWlzc2lvbkZyb21JbnRlbnRMb2NrZWQobUNhbGxpbmdVaWQsIG1TdGFydEFjdGl2aXR5LnBhY2thZ2VOYW1lLAorICAgICAgICAgICAgICAgIG1JbnRlbnQsIG1TdGFydEFjdGl2aXR5LmdldFVyaVBlcm1pc3Npb25zTG9ja2VkKCksIG1TdGFydEFjdGl2aXR5LnVzZXJJZCk7CisKKyAgICAgICAgaWYgKG1Tb3VyY2VSZWNvcmQgIT0gbnVsbCAmJiBtU291cmNlUmVjb3JkLmlzUmVjZW50c0FjdGl2aXR5KCkpIHsKKyAgICAgICAgICAgIG1TdGFydEFjdGl2aXR5LnRhc2suc2V0VGFza1RvUmV0dXJuVG8oUkVDRU5UU19BQ1RJVklUWV9UWVBFKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobmV3VGFzaykgeworICAgICAgICAgICAgRXZlbnRMb2cud3JpdGVFdmVudCgKKyAgICAgICAgICAgICAgICAgICAgRXZlbnRMb2dUYWdzLkFNX0NSRUFURV9UQVNLLCBtU3RhcnRBY3Rpdml0eS51c2VySWQsIG1TdGFydEFjdGl2aXR5LnRhc2sudGFza0lkKTsKKyAgICAgICAgfQorICAgICAgICBBY3Rpdml0eVN0YWNrLmxvZ1N0YXJ0QWN0aXZpdHkoCisgICAgICAgICAgICAgICAgRXZlbnRMb2dUYWdzLkFNX0NSRUFURV9BQ1RJVklUWSwgbVN0YXJ0QWN0aXZpdHksIG1TdGFydEFjdGl2aXR5LnRhc2spOworICAgICAgICBtVGFyZ2V0U3RhY2subUxhc3RQYXVzZWRBY3Rpdml0eSA9IG51bGw7CisgICAgICAgIG1UYXJnZXRTdGFjay5zdGFydEFjdGl2aXR5TG9ja2VkKG1TdGFydEFjdGl2aXR5LCBuZXdUYXNrLCBtS2VlcEN1clRyYW5zaXRpb24sIG1PcHRpb25zKTsKKyAgICAgICAgaWYgKG1Eb1Jlc3VtZSkgeworICAgICAgICAgICAgaWYgKCFtTGF1bmNoVGFza0JlaGluZCkgeworICAgICAgICAgICAgICAgIC8vIFRPRE8oYi8yNjM4MTc1MCk6IFJlbW92ZSB0aGlzIGNvZGUgYWZ0ZXIgdmVyaWZpY2F0aW9uIHRoYXQgYWxsIHRoZSBkZWNpc2lvbgorICAgICAgICAgICAgICAgIC8vIHBvaW50cyBhYm92ZSBtb3ZlZCB0YXJnZXRTdGFjayB0byB0aGUgZnJvbnQgd2hpY2ggd2lsbCBhbHNvIHNldCB0aGUgZm9jdXMKKyAgICAgICAgICAgICAgICAvLyBhY3Rpdml0eS4KKyAgICAgICAgICAgICAgICBtU2VydmljZS5zZXRGb2N1c2VkQWN0aXZpdHlMb2NrZWQobVN0YXJ0QWN0aXZpdHksICJzdGFydGVkQWN0aXZpdHkiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1TdXBlcnZpc29yLnJlc3VtZUZvY3VzZWRTdGFja1RvcEFjdGl2aXR5TG9ja2VkKG1UYXJnZXRTdGFjaywgbVN0YXJ0QWN0aXZpdHksCisgICAgICAgICAgICAgICAgICAgIG1PcHRpb25zKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1UYXJnZXRTdGFjay5hZGRSZWNlbnRBY3Rpdml0eUxvY2tlZChtU3RhcnRBY3Rpdml0eSk7CisgICAgICAgIH0KKyAgICAgICAgbVN1cGVydmlzb3IudXBkYXRlVXNlclN0YWNrTG9ja2VkKG1TdGFydEFjdGl2aXR5LnVzZXJJZCwgbVRhcmdldFN0YWNrKTsKKworICAgICAgICBpZiAoIW1TdGFydEFjdGl2aXR5LnRhc2subVJlc2l6ZWFibGUKKyAgICAgICAgICAgICAgICAmJiBtU3VwZXJ2aXNvci5pc1N0YWNrRG9ja2VkSW5FZmZlY3QobVRhcmdldFN0YWNrLm1TdGFja0lkKSkgeworICAgICAgICAgICAgbVN1cGVydmlzb3Iuc2hvd05vblJlc2l6ZWFibGVEb2NrVG9hc3QobVN0YXJ0QWN0aXZpdHkudGFzay50YXNrSWQpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIFNUQVJUX1NVQ0NFU1M7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHNldEluaXRpYWxTdGF0ZShBY3Rpdml0eVJlY29yZCByLCBBY3Rpdml0eU9wdGlvbnMgb3B0aW9ucywgVGFza1JlY29yZCBpblRhc2ssCisgICAgICAgICAgICBib29sZWFuIGRvUmVzdW1lLCBpbnQgc3RhcnRGbGFncywgQWN0aXZpdHlSZWNvcmQgc291cmNlUmVjb3JkLAorICAgICAgICAgICAgSVZvaWNlSW50ZXJhY3Rpb25TZXNzaW9uIHZvaWNlU2Vzc2lvbiwgSVZvaWNlSW50ZXJhY3RvciB2b2ljZUludGVyYWN0b3IpIHsKKyAgICAgICAgcmVzZXQoKTsKKworICAgICAgICBtU3RhcnRBY3Rpdml0eSA9IHI7CisgICAgICAgIG1JbnRlbnQgPSByLmludGVudDsKKyAgICAgICAgbU9wdGlvbnMgPSBvcHRpb25zOworICAgICAgICBtQ2FsbGluZ1VpZCA9IHIubGF1bmNoZWRGcm9tVWlkOworICAgICAgICBtU291cmNlUmVjb3JkID0gc291cmNlUmVjb3JkOworICAgICAgICBtVm9pY2VTZXNzaW9uID0gdm9pY2VTZXNzaW9uOworICAgICAgICBtVm9pY2VJbnRlcmFjdG9yID0gdm9pY2VJbnRlcmFjdG9yOworCisgICAgICAgIG1MYXVuY2hCb3VuZHMgPSBnZXRPdmVycmlkZUJvdW5kcyhyLCBvcHRpb25zLCBpblRhc2spOworCisgICAgICAgIG1MYXVuY2hTaW5nbGVUb3AgPSByLmxhdW5jaE1vZGUgPT0gTEFVTkNIX1NJTkdMRV9UT1A7CisgICAgICAgIG1MYXVuY2hTaW5nbGVJbnN0YW5jZSA9IHIubGF1bmNoTW9kZSA9PSBMQVVOQ0hfU0lOR0xFX0lOU1RBTkNFOworICAgICAgICBtTGF1bmNoU2luZ2xlVGFzayA9IHIubGF1bmNoTW9kZSA9PSBMQVVOQ0hfU0lOR0xFX1RBU0s7CisgICAgICAgIG1MYXVuY2hGbGFncyA9IGFkanVzdExhdW5jaEZsYWdzVG9Eb2N1bWVudE1vZGUoCisgICAgICAgICAgICAgICAgciwgbUxhdW5jaFNpbmdsZUluc3RhbmNlLCBtTGF1bmNoU2luZ2xlVGFzaywgbUludGVudC5nZXRGbGFncygpKTsKKyAgICAgICAgbUxhdW5jaFRhc2tCZWhpbmQgPSByLm1MYXVuY2hUYXNrQmVoaW5kCisgICAgICAgICAgICAgICAgJiYgIW1MYXVuY2hTaW5nbGVUYXNrICYmICFtTGF1bmNoU2luZ2xlSW5zdGFuY2UKKyAgICAgICAgICAgICAgICAmJiAobUxhdW5jaEZsYWdzICYgRkxBR19BQ1RJVklUWV9ORVdfRE9DVU1FTlQpICE9IDA7CisKKyAgICAgICAgc2VuZE5ld1Rhc2tSZXN1bHRSZXF1ZXN0SWZOZWVkZWQoKTsKKworICAgICAgICBpZiAoKG1MYXVuY2hGbGFncyAmIEZMQUdfQUNUSVZJVFlfTkVXX0RPQ1VNRU5UKSAhPSAwICYmIHIucmVzdWx0VG8gPT0gbnVsbCkgeworICAgICAgICAgICAgbUxhdW5jaEZsYWdzIHw9IEZMQUdfQUNUSVZJVFlfTkVXX1RBU0s7CisgICAgICAgIH0KKworICAgICAgICAvLyBJZiB3ZSBhcmUgYWN0dWFsbHkgZ29pbmcgdG8gbGF1bmNoIGluIHRvIGEgbmV3IHRhc2ssIHRoZXJlIGFyZSBzb21lIGNhc2VzIHdoZXJlCisgICAgICAgIC8vIHdlIGZ1cnRoZXIgd2FudCB0byBkbyBtdWx0aXBsZSB0YXNrLgorICAgICAgICBpZiAoKG1MYXVuY2hGbGFncyAmIEZMQUdfQUNUSVZJVFlfTkVXX1RBU0spICE9IDApIHsKKyAgICAgICAgICAgIGlmIChtTGF1bmNoVGFza0JlaGluZAorICAgICAgICAgICAgICAgICAgICB8fCByLmluZm8uZG9jdW1lbnRMYXVuY2hNb2RlID09IERPQ1VNRU5UX0xBVU5DSF9BTFdBWVMpIHsKKyAgICAgICAgICAgICAgICBtTGF1bmNoRmxhZ3MgfD0gRkxBR19BQ1RJVklUWV9NVUxUSVBMRV9UQVNLOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gV2UnbGwgaW52b2tlIG9uVXNlckxlYXZpbmcgYmVmb3JlIG9uUGF1c2Ugb25seSBpZiB0aGUgbGF1bmNoaW5nCisgICAgICAgIC8vIGFjdGl2aXR5IGRpZCBub3QgZXhwbGljaXRseSBzdGF0ZSB0aGF0IHRoaXMgaXMgYW4gYXV0b21hdGVkIGxhdW5jaC4KKyAgICAgICAgbVN1cGVydmlzb3IubVVzZXJMZWF2aW5nID0gKG1MYXVuY2hGbGFncyAmIEZMQUdfQUNUSVZJVFlfTk9fVVNFUl9BQ1RJT04pID09IDA7CisgICAgICAgIGlmIChERUJVR19VU0VSX0xFQVZJTkcpIFNsb2cudihUQUdfVVNFUl9MRUFWSU5HLAorICAgICAgICAgICAgICAgICJzdGFydEFjdGl2aXR5KCkgPT4gbVVzZXJMZWF2aW5nPSIgKyBtU3VwZXJ2aXNvci5tVXNlckxlYXZpbmcpOworCisgICAgICAgIC8vIElmIHRoZSBjYWxsZXIgaGFzIGFza2VkIG5vdCB0byByZXN1bWUgYXQgdGhpcyBwb2ludCwgd2UgbWFrZSBub3RlCisgICAgICAgIC8vIG9mIHRoaXMgaW4gdGhlIHJlY29yZCBzbyB0aGF0IHdlIGNhbiBza2lwIGl0IHdoZW4gdHJ5aW5nIHRvIGZpbmQKKyAgICAgICAgLy8gdGhlIHRvcCBydW5uaW5nIGFjdGl2aXR5LgorICAgICAgICBtRG9SZXN1bWUgPSBkb1Jlc3VtZTsKKyAgICAgICAgaWYgKCFkb1Jlc3VtZSB8fCAhbVN1cGVydmlzb3Iub2tUb1Nob3dMb2NrZWQocikpIHsKKyAgICAgICAgICAgIHIuZGVsYXllZFJlc3VtZSA9IHRydWU7CisgICAgICAgICAgICBtRG9SZXN1bWUgPSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIG1Ob3RUb3AgPSAobUxhdW5jaEZsYWdzICYgRkxBR19BQ1RJVklUWV9QUkVWSU9VU19JU19UT1ApICE9IDAgPyByIDogbnVsbDsKKworICAgICAgICBtSW5UYXNrID0gaW5UYXNrOworICAgICAgICAvLyBJbiBzb21lIGZsb3dzIGluIHRvIHRoaXMgZnVuY3Rpb24sIHdlIHJldHJpZXZlIHRoZSB0YXNrIHJlY29yZCBhbmQgaG9sZCBvbiB0byBpdAorICAgICAgICAvLyB3aXRob3V0IGEgbG9jayBiZWZvcmUgY2FsbGluZyBiYWNrIGluIHRvIGhlcmUuLi4gIHNvIHRoZSB0YXNrIGF0IHRoaXMgcG9pbnQgbWF5CisgICAgICAgIC8vIG5vdCBhY3R1YWxseSBiZSBpbiByZWNlbnRzLiAgQ2hlY2sgZm9yIHRoYXQsIGFuZCBpZiBpdCBpc24ndCBpbiByZWNlbnRzIGp1c3QKKyAgICAgICAgLy8gY29uc2lkZXIgaXQgaW52YWxpZC4KKyAgICAgICAgaWYgKGluVGFzayAhPSBudWxsICYmICFpblRhc2suaW5SZWNlbnRzKSB7CisgICAgICAgICAgICBTbG9nLncoVEFHLCAiU3RhcnRpbmcgYWN0aXZpdHkgaW4gdGFzayBub3QgaW4gcmVjZW50czogIiArIGluVGFzayk7CisgICAgICAgICAgICBtSW5UYXNrID0gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIG1TdGFydEZsYWdzID0gc3RhcnRGbGFnczsKKyAgICAgICAgLy8gSWYgdGhlIG9ubHlJZk5lZWRlZCBmbGFnIGlzIHNldCwgdGhlbiB3ZSBjYW4gZG8gdGhpcyBpZiB0aGUgYWN0aXZpdHkgYmVpbmcgbGF1bmNoZWQKKyAgICAgICAgLy8gaXMgdGhlIHNhbWUgYXMgdGhlIG9uZSBtYWtpbmcgdGhlIGNhbGwuLi4gIG9yLCBhcyBhIHNwZWNpYWwgY2FzZSwgaWYgd2UgZG8gbm90IGtub3cKKyAgICAgICAgLy8gdGhlIGNhbGxlciB0aGVuIHdlIGNvdW50IHRoZSBjdXJyZW50IHRvcCBhY3Rpdml0eSBhcyB0aGUgY2FsbGVyLgorICAgICAgICBpZiAoKHN0YXJ0RmxhZ3MgJiBTVEFSVF9GTEFHX09OTFlfSUZfTkVFREVEKSAhPSAwKSB7CisgICAgICAgICAgICBBY3Rpdml0eVJlY29yZCBjaGVja2VkQ2FsbGVyID0gc291cmNlUmVjb3JkOworICAgICAgICAgICAgaWYgKGNoZWNrZWRDYWxsZXIgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGNoZWNrZWRDYWxsZXIgPSBtU3VwZXJ2aXNvci5tRm9jdXNlZFN0YWNrLnRvcFJ1bm5pbmdOb25EZWxheWVkQWN0aXZpdHlMb2NrZWQoCisgICAgICAgICAgICAgICAgICAgICAgICBtTm90VG9wKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghY2hlY2tlZENhbGxlci5yZWFsQWN0aXZpdHkuZXF1YWxzKHIucmVhbEFjdGl2aXR5KSkgeworICAgICAgICAgICAgICAgIC8vIENhbGxlciBpcyBub3QgdGhlIHNhbWUgYXMgbGF1bmNoZXIsIHNvIGFsd2F5cyBuZWVkZWQuCisgICAgICAgICAgICAgICAgbVN0YXJ0RmxhZ3MgJj0gflNUQVJUX0ZMQUdfT05MWV9JRl9ORUVERUQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBtTm9BbmltYXRpb24gPSAobUxhdW5jaEZsYWdzICYgRkxBR19BQ1RJVklUWV9OT19BTklNQVRJT04pICE9IDA7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHNlbmROZXdUYXNrUmVzdWx0UmVxdWVzdElmTmVlZGVkKCkgeworICAgICAgICBpZiAobVN0YXJ0QWN0aXZpdHkucmVzdWx0VG8gIT0gbnVsbCAmJiAobUxhdW5jaEZsYWdzICYgRkxBR19BQ1RJVklUWV9ORVdfVEFTSykgIT0gMAorICAgICAgICAgICAgICAgICYmIG1TdGFydEFjdGl2aXR5LnJlc3VsdFRvLnRhc2suc3RhY2sgIT0gbnVsbCkgeworICAgICAgICAgICAgLy8gRm9yIHdoYXRldmVyIHJlYXNvbiB0aGlzIGFjdGl2aXR5IGlzIGJlaW5nIGxhdW5jaGVkIGludG8gYSBuZXcgdGFzay4uLgorICAgICAgICAgICAgLy8geWV0IHRoZSBjYWxsZXIgaGFzIHJlcXVlc3RlZCBhIHJlc3VsdCBiYWNrLiAgV2VsbCwgdGhhdCBpcyBwcmV0dHkgbWVzc2VkIHVwLAorICAgICAgICAgICAgLy8gc28gaW5zdGVhZCBpbW1lZGlhdGVseSBzZW5kIGJhY2sgYSBjYW5jZWwgYW5kIGxldCB0aGUgbmV3IHRhc2sgY29udGludWUgbGF1bmNoZWQKKyAgICAgICAgICAgIC8vIGFzIG5vcm1hbCB3aXRob3V0IGEgZGVwZW5kZW5jeSBvbiBpdHMgb3JpZ2luYXRvci4KKyAgICAgICAgICAgIFNsb2cudyhUQUcsICJBY3Rpdml0eSBpcyBsYXVuY2hpbmcgYXMgYSBuZXcgdGFzaywgc28gY2FuY2VsbGluZyBhY3Rpdml0eSByZXN1bHQuIik7CisgICAgICAgICAgICBtU3RhcnRBY3Rpdml0eS5yZXN1bHRUby50YXNrLnN0YWNrLnNlbmRBY3Rpdml0eVJlc3VsdExvY2tlZCgtMSwgbVN0YXJ0QWN0aXZpdHkucmVzdWx0VG8sCisgICAgICAgICAgICAgICAgICAgIG1TdGFydEFjdGl2aXR5LnJlc3VsdFdobywgbVN0YXJ0QWN0aXZpdHkucmVxdWVzdENvZGUsIFJFU1VMVF9DQU5DRUxFRCwgbnVsbCk7CisgICAgICAgICAgICBtU3RhcnRBY3Rpdml0eS5yZXN1bHRUbyA9IG51bGw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgY29tcHV0ZUxhdW5jaGluZ1Rhc2tGbGFncygpIHsKKyAgICAgICAgLy8gSWYgdGhlIGNhbGxlciBpcyBub3QgY29taW5nIGZyb20gYW5vdGhlciBhY3Rpdml0eSwgYnV0IGhhcyBnaXZlbiB1cyBhbiBleHBsaWNpdCB0YXNrIGludG8KKyAgICAgICAgLy8gd2hpY2ggdGhleSB3b3VsZCBsaWtlIHVzIHRvIGxhdW5jaCB0aGUgbmV3IGFjdGl2aXR5LCB0aGVuIGxldCdzIHNlZSBhYm91dCBkb2luZyB0aGF0LgorICAgICAgICBpZiAobVNvdXJjZVJlY29yZCA9PSBudWxsICYmIG1JblRhc2sgIT0gbnVsbCAmJiBtSW5UYXNrLnN0YWNrICE9IG51bGwpIHsKKyAgICAgICAgICAgIGZpbmFsIEludGVudCBiYXNlSW50ZW50ID0gbUluVGFzay5nZXRCYXNlSW50ZW50KCk7CisgICAgICAgICAgICBmaW5hbCBBY3Rpdml0eVJlY29yZCByb290ID0gbUluVGFzay5nZXRSb290QWN0aXZpdHkoKTsKKyAgICAgICAgICAgIGlmIChiYXNlSW50ZW50ID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBBY3Rpdml0eU9wdGlvbnMuYWJvcnQobU9wdGlvbnMpOworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkxhdW5jaGluZyBpbnRvIHRhc2sgd2l0aG91dCBiYXNlIGludGVudDogIgorICAgICAgICAgICAgICAgICAgICAgICAgKyBtSW5UYXNrKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gSWYgdGhpcyB0YXNrIGlzIGVtcHR5LCB0aGVuIHdlIGFyZSBhZGRpbmcgdGhlIGZpcnN0IGFjdGl2aXR5IC0tIGl0CisgICAgICAgICAgICAvLyBkZXRlcm1pbmVzIHRoZSByb290LCBhbmQgbXVzdCBiZSBsYXVuY2hpbmcgYXMgYSBORVdfVEFTSy4KKyAgICAgICAgICAgIGlmIChtTGF1bmNoU2luZ2xlSW5zdGFuY2UgfHwgbUxhdW5jaFNpbmdsZVRhc2spIHsKKyAgICAgICAgICAgICAgICBpZiAoIWJhc2VJbnRlbnQuZ2V0Q29tcG9uZW50KCkuZXF1YWxzKG1TdGFydEFjdGl2aXR5LmludGVudC5nZXRDb21wb25lbnQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlPcHRpb25zLmFib3J0KG1PcHRpb25zKTsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVHJ5aW5nIHRvIGxhdW5jaCBzaW5nbGVJbnN0YW5jZS9UYXNrICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArIG1TdGFydEFjdGl2aXR5ICsgIiBpbnRvIGRpZmZlcmVudCB0YXNrICIgKyBtSW5UYXNrKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHJvb3QgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eU9wdGlvbnMuYWJvcnQobU9wdGlvbnMpOworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJDYWxsZXIgd2l0aCBtSW5UYXNrICIgKyBtSW5UYXNrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGhhcyByb290ICIgKyByb290ICsgIiBidXQgdGFyZ2V0IGlzIHNpbmdsZUluc3RhbmNlL1Rhc2siKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIElmIHRhc2sgaXMgZW1wdHksIHRoZW4gYWRvcHQgdGhlIGludGVyZXN0aW5nIGludGVudCBsYXVuY2ggZmxhZ3MgaW4gdG8gdGhlCisgICAgICAgICAgICAvLyBhY3Rpdml0eSBiZWluZyBzdGFydGVkLgorICAgICAgICAgICAgaWYgKHJvb3QgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGZpbmFsIGludCBmbGFnc09mSW50ZXJlc3QgPSBGTEFHX0FDVElWSVRZX05FV19UQVNLIHwgRkxBR19BQ1RJVklUWV9NVUxUSVBMRV9UQVNLCisgICAgICAgICAgICAgICAgICAgICAgICB8IEZMQUdfQUNUSVZJVFlfTkVXX0RPQ1VNRU5UIHwgRkxBR19BQ1RJVklUWV9SRVRBSU5fSU5fUkVDRU5UUzsKKyAgICAgICAgICAgICAgICBtTGF1bmNoRmxhZ3MgPSAobUxhdW5jaEZsYWdzICYgfmZsYWdzT2ZJbnRlcmVzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgKGJhc2VJbnRlbnQuZ2V0RmxhZ3MoKSAmIGZsYWdzT2ZJbnRlcmVzdCk7CisgICAgICAgICAgICAgICAgbUludGVudC5zZXRGbGFncyhtTGF1bmNoRmxhZ3MpOworICAgICAgICAgICAgICAgIG1JblRhc2suc2V0SW50ZW50KG1TdGFydEFjdGl2aXR5KTsKKyAgICAgICAgICAgICAgICBtQWRkaW5nVG9UYXNrID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgIC8vIElmIHRoZSB0YXNrIGlzIG5vdCBlbXB0eSBhbmQgdGhlIGNhbGxlciBpcyBhc2tpbmcgdG8gc3RhcnQgaXQgYXMgdGhlIHJvb3Qgb2YKKyAgICAgICAgICAgICAgICAvLyBhIG5ldyB0YXNrLCB0aGVuIHdlIGRvbid0IGFjdHVhbGx5IHdhbnQgdG8gc3RhcnQgdGhpcyBvbiB0aGUgdGFzay4gV2Ugd2lsbAorICAgICAgICAgICAgICAgIC8vIGJyaW5nIHRoZSB0YXNrIHRvIHRoZSBmcm9udCwgYW5kIHBvc3NpYmx5IGdpdmUgaXQgYSBuZXcgaW50ZW50LgorICAgICAgICAgICAgfSBlbHNlIGlmICgobUxhdW5jaEZsYWdzICYgRkxBR19BQ1RJVklUWV9ORVdfVEFTSykgIT0gMCkgeworICAgICAgICAgICAgICAgIG1BZGRpbmdUb1Rhc2sgPSBmYWxzZTsKKworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtQWRkaW5nVG9UYXNrID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbVJldXNlVGFzayA9IG1JblRhc2s7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtSW5UYXNrID0gbnVsbDsKKyAgICAgICAgICAgIC8vIExhdW5jaCBSZXNvbHZlckFjdGl2aXR5IGluIHRoZSBzb3VyY2UgdGFzaywgc28gdGhhdCBpdCBzdGF5cyBpbiB0aGUgdGFzayBib3VuZHMKKyAgICAgICAgICAgIC8vIHdoZW4gaW4gZnJlZWZvcm0gd29ya3NwYWNlLgorICAgICAgICAgICAgLy8gQWxzbyBwdXQgbm9EaXNwbGF5IGFjdGl2aXRpZXMgaW4gdGhlIHNvdXJjZSB0YXNrLiBUaGVzZSBieSBpdHNlbGYgY2FuIGJlIHBsYWNlZAorICAgICAgICAgICAgLy8gaW4gYW55IHRhc2svc3RhY2ssIGhvd2V2ZXIgaXQgY291bGQgbGF1bmNoIG90aGVyIGFjdGl2aXRpZXMgbGlrZSBSZXNvbHZlckFjdGl2aXR5LAorICAgICAgICAgICAgLy8gYW5kIHdlIHdhbnQgdGhvc2UgdG8gc3RheSBpbiB0aGUgb3JpZ2luYWwgdGFzay4KKyAgICAgICAgICAgIGlmICgobVN0YXJ0QWN0aXZpdHkuaXNSZXNvbHZlckFjdGl2aXR5KCkgfHwgbVN0YXJ0QWN0aXZpdHkubm9EaXNwbGF5KSAmJiBtU291cmNlUmVjb3JkICE9IG51bGwKKyAgICAgICAgICAgICAgICAgICAgJiYgbVNvdXJjZVJlY29yZC5pc0ZyZWVmb3JtKCkpICB7CisgICAgICAgICAgICAgICAgbUFkZGluZ1RvVGFzayA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAobUluVGFzayA9PSBudWxsKSB7CisgICAgICAgICAgICBpZiAobVNvdXJjZVJlY29yZCA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgLy8gVGhpcyBhY3Rpdml0eSBpcyBub3QgYmVpbmcgc3RhcnRlZCBmcm9tIGFub3RoZXIuLi4gIGluIHRoaXMKKyAgICAgICAgICAgICAgICAvLyBjYXNlIHdlIC1hbHdheXMtIHN0YXJ0IGEgbmV3IHRhc2suCisgICAgICAgICAgICAgICAgaWYgKChtTGF1bmNoRmxhZ3MgJiBGTEFHX0FDVElWSVRZX05FV19UQVNLKSA9PSAwICYmIG1JblRhc2sgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBTbG9nLncoVEFHLCAic3RhcnRBY3Rpdml0eSBjYWxsZWQgZnJvbSBub24tQWN0aXZpdHkgY29udGV4dDsgZm9yY2luZyAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW50ZW50LkZMQUdfQUNUSVZJVFlfTkVXX1RBU0sgZm9yOiAiICsgbUludGVudCk7CisgICAgICAgICAgICAgICAgICAgIG1MYXVuY2hGbGFncyB8PSBGTEFHX0FDVElWSVRZX05FV19UQVNLOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAobVNvdXJjZVJlY29yZC5sYXVuY2hNb2RlID09IExBVU5DSF9TSU5HTEVfSU5TVEFOQ0UpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgb3JpZ2luYWwgYWN0aXZpdHkgd2hvIGlzIHN0YXJ0aW5nIHVzIGlzIHJ1bm5pbmcgYXMgYSBzaW5nbGUKKyAgICAgICAgICAgICAgICAvLyBpbnN0YW5jZS4uLiAgdGhpcyBuZXcgYWN0aXZpdHkgaXQgaXMgc3RhcnRpbmcgbXVzdCBnbyBvbiBpdHMKKyAgICAgICAgICAgICAgICAvLyBvd24gdGFzay4KKyAgICAgICAgICAgICAgICBtTGF1bmNoRmxhZ3MgfD0gRkxBR19BQ1RJVklUWV9ORVdfVEFTSzsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobUxhdW5jaFNpbmdsZUluc3RhbmNlIHx8IG1MYXVuY2hTaW5nbGVUYXNrKSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIGFjdGl2aXR5IGJlaW5nIHN0YXJ0ZWQgaXMgYSBzaW5nbGUgaW5zdGFuY2UuLi4gIGl0IGFsd2F5cworICAgICAgICAgICAgICAgIC8vIGdldHMgbGF1bmNoZWQgaW50byBpdHMgb3duIHRhc2suCisgICAgICAgICAgICAgICAgbUxhdW5jaEZsYWdzIHw9IEZMQUdfQUNUSVZJVFlfTkVXX1RBU0s7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgY29tcHV0ZVNvdXJjZVN0YWNrKCkgeworICAgICAgICBpZiAobVNvdXJjZVJlY29yZCA9PSBudWxsKSB7CisgICAgICAgICAgICBtU291cmNlU3RhY2sgPSBudWxsOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICghbVNvdXJjZVJlY29yZC5maW5pc2hpbmcpIHsKKyAgICAgICAgICAgIG1Tb3VyY2VTdGFjayA9IG1Tb3VyY2VSZWNvcmQudGFzay5zdGFjazsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHRoZSBzb3VyY2UgaXMgZmluaXNoaW5nLCB3ZSBjYW4ndCBmdXJ0aGVyIGNvdW50IGl0IGFzIG91ciBzb3VyY2UuIFRoaXMgaXMgYmVjYXVzZSB0aGUKKyAgICAgICAgLy8gdGFzayBpdCBpcyBhc3NvY2lhdGVkIHdpdGggbWF5IG5vdyBiZSBlbXB0eSBhbmQgb24gaXRzIHdheSBvdXQsIHNvIHdlIGRvbid0IHdhbnQgdG8KKyAgICAgICAgLy8gYmxpbmRseSB0aHJvdyBpdCBpbiB0byB0aGF0IHRhc2suICBJbnN0ZWFkIHdlIHdpbGwgdGFrZSB0aGUgTkVXX1RBU0sgZmxvdyBhbmQgdHJ5IHRvIGZpbmQKKyAgICAgICAgLy8gYSB0YXNrIGZvciBpdC4gQnV0IHNhdmUgdGhlIHRhc2sgaW5mb3JtYXRpb24gc28gaXQgY2FuIGJlIHVzZWQgd2hlbiBjcmVhdGluZyB0aGUgbmV3IHRhc2suCisgICAgICAgIGlmICgobUxhdW5jaEZsYWdzICYgRkxBR19BQ1RJVklUWV9ORVdfVEFTSykgPT0gMCkgeworICAgICAgICAgICAgU2xvZy53KFRBRywgInN0YXJ0QWN0aXZpdHkgY2FsbGVkIGZyb20gZmluaXNoaW5nICIgKyBtU291cmNlUmVjb3JkCisgICAgICAgICAgICAgICAgICAgICsgIjsgZm9yY2luZyAiICsgIkludGVudC5GTEFHX0FDVElWSVRZX05FV19UQVNLIGZvcjogIiArIG1JbnRlbnQpOworICAgICAgICAgICAgbUxhdW5jaEZsYWdzIHw9IEZMQUdfQUNUSVZJVFlfTkVXX1RBU0s7CisgICAgICAgICAgICBtTmV3VGFza0luZm8gPSBtU291cmNlUmVjb3JkLmluZm87CisgICAgICAgICAgICBtTmV3VGFza0ludGVudCA9IG1Tb3VyY2VSZWNvcmQudGFzay5pbnRlbnQ7CisgICAgICAgIH0KKyAgICAgICAgbVNvdXJjZVJlY29yZCA9IG51bGw7CisgICAgICAgIG1Tb3VyY2VTdGFjayA9IG51bGw7CisgICAgfQorCisgICAgLyoqCisgICAgICogRGVjaWRlIHdoZXRoZXIgdGhlIG5ldyBhY3Rpdml0eSBzaG91bGQgYmUgaW5zZXJ0ZWQgaW50byBhbiBleGlzdGluZyB0YXNrLiBSZXR1cm5zIG51bGwKKyAgICAgKiBpZiBub3Qgb3IgYW4gQWN0aXZpdHlSZWNvcmQgd2l0aCB0aGUgdGFzayBpbnRvIHdoaWNoIHRoZSBuZXcgYWN0aXZpdHkgc2hvdWxkIGJlIGFkZGVkLgorICAgICAqLworICAgIHByaXZhdGUgQWN0aXZpdHlSZWNvcmQgZ2V0UmV1c2FibGVJbnRlbnRBY3Rpdml0eSgpIHsKKyAgICAgICAgLy8gV2UgbWF5IHdhbnQgdG8gdHJ5IHRvIHBsYWNlIHRoZSBuZXcgYWN0aXZpdHkgaW4gdG8gYW4gZXhpc3RpbmcgdGFzay4gIFdlIGFsd2F5cworICAgICAgICAvLyBkbyB0aGlzIGlmIHRoZSB0YXJnZXQgYWN0aXZpdHkgaXMgc2luZ2xlVGFzayBvciBzaW5nbGVJbnN0YW5jZTsgd2Ugd2lsbCBhbHNvIGRvCisgICAgICAgIC8vIHRoaXMgaWYgTkVXX1RBU0sgaGFzIGJlZW4gcmVxdWVzdGVkLCBhbmQgdGhlcmUgaXMgbm90IGFuIGFkZGl0aW9uYWwgcXVhbGlmaWVyIHRlbGxpbmcKKyAgICAgICAgLy8gdXMgdG8gc3RpbGwgcGxhY2UgaXQgaW4gYSBuZXcgdGFzazogbXVsdGkgdGFzaywgYWx3YXlzIGRvYyBtb2RlLCBvciBiZWluZyBhc2tlZCB0bworICAgICAgICAvLyBsYXVuY2ggdGhpcyBhcyBhIG5ldyB0YXNrIGJlaGluZCB0aGUgY3VycmVudCBvbmUuCisgICAgICAgIGJvb2xlYW4gcHV0SW50b0V4aXN0aW5nVGFzayA9ICgobUxhdW5jaEZsYWdzICYgRkxBR19BQ1RJVklUWV9ORVdfVEFTSykgIT0gMCAmJgorICAgICAgICAgICAgICAgIChtTGF1bmNoRmxhZ3MgJiBGTEFHX0FDVElWSVRZX01VTFRJUExFX1RBU0spID09IDApCisgICAgICAgICAgICAgICAgfHwgbUxhdW5jaFNpbmdsZUluc3RhbmNlIHx8IG1MYXVuY2hTaW5nbGVUYXNrOworICAgICAgICAvLyBJZiBicmluZyB0byBmcm9udCBpcyByZXF1ZXN0ZWQsIGFuZCBubyByZXN1bHQgaXMgcmVxdWVzdGVkIGFuZCB3ZSBoYXZlIG5vdCBiZWVuIGdpdmVuCisgICAgICAgIC8vIGFuIGV4cGxpY2l0IHRhc2sgdG8gbGF1bmNoIGluIHRvLCBhbmQgd2UgY2FuIGZpbmQgYSB0YXNrIHRoYXQgd2FzIHN0YXJ0ZWQgd2l0aCB0aGlzCisgICAgICAgIC8vIHNhbWUgY29tcG9uZW50LCB0aGVuIGluc3RlYWQgb2YgbGF1bmNoaW5nIGJyaW5nIHRoYXQgb25lIHRvIHRoZSBmcm9udC4KKyAgICAgICAgcHV0SW50b0V4aXN0aW5nVGFzayAmPSBtSW5UYXNrID09IG51bGwgJiYgbVN0YXJ0QWN0aXZpdHkucmVzdWx0VG8gPT0gbnVsbDsKKyAgICAgICAgQWN0aXZpdHlSZWNvcmQgaW50ZW50QWN0aXZpdHkgPSBudWxsOworICAgICAgICBpZiAocHV0SW50b0V4aXN0aW5nVGFzaykgeworICAgICAgICAgICAgLy8gU2VlIGlmIHRoZXJlIGlzIGEgdGFzayB0byBicmluZyB0byB0aGUgZnJvbnQuICBJZiB0aGlzIGlzIGEgU0lOR0xFX0lOU1RBTkNFCisgICAgICAgICAgICAvLyBhY3Rpdml0eSwgdGhlcmUgY2FuIGJlIG9uZSBhbmQgb25seSBvbmUgaW5zdGFuY2Ugb2YgaXQgaW4gdGhlIGhpc3RvcnksIGFuZCBpdCBpcworICAgICAgICAgICAgLy8gYWx3YXlzIGluIGl0cyBvd24gdW5pcXVlIHRhc2ssIHNvIHdlIGRvIGEgc3BlY2lhbCBzZWFyY2guCisgICAgICAgICAgICBpbnRlbnRBY3Rpdml0eSA9IG1MYXVuY2hTaW5nbGVJbnN0YW5jZSA/IG1TdXBlcnZpc29yLmZpbmRBY3Rpdml0eUxvY2tlZChtSW50ZW50LCBtU3RhcnRBY3Rpdml0eS5pbmZvKQorICAgICAgICAgICAgICAgICAgICA6IG1TdXBlcnZpc29yLmZpbmRUYXNrTG9ja2VkKG1TdGFydEFjdGl2aXR5KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW50ZW50QWN0aXZpdHk7CisgICAgfQorCisgICAgcHJpdmF0ZSBBY3Rpdml0eVJlY29yZCBzZXRUYXJnZXRTdGFja0FuZE1vdmVUb0Zyb250SWZOZWVkZWQoQWN0aXZpdHlSZWNvcmQgaW50ZW50QWN0aXZpdHkpIHsKKyAgICAgICAgbVRhcmdldFN0YWNrID0gaW50ZW50QWN0aXZpdHkudGFzay5zdGFjazsKKyAgICAgICAgbVRhcmdldFN0YWNrLm1MYXN0UGF1c2VkQWN0aXZpdHkgPSBudWxsOworICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IHRhc2sgaXMgbm90IGluIHRoZSBmcm9udCwgdGhlbiB3ZSBuZWVkIHRvIGJyaW5nIGl0IHRvIHRoZSBmcm9udC4uLgorICAgICAgICAvLyBleGNlcHQuLi4gIHdlbGwsIHdpdGggU0lOR0xFX1RBU0tfTEFVTkNIIGl0J3Mgbm90IGVudGlyZWx5IGNsZWFyLiBXZSdkIGxpa2UgdG8gaGF2ZQorICAgICAgICAvLyB0aGUgc2FtZSBiZWhhdmlvciBhcyBpZiBhIG5ldyBpbnN0YW5jZSB3YXMgYmVpbmcgc3RhcnRlZCwgd2hpY2ggbWVhbnMgbm90IGJyaW5naW5nIGl0CisgICAgICAgIC8vIHRvIHRoZSBmcm9udCBpZiB0aGUgY2FsbGVyIGlzIG5vdCBpdHNlbGYgaW4gdGhlIGZyb250LgorICAgICAgICBmaW5hbCBBY3Rpdml0eVN0YWNrIGZvY3VzU3RhY2sgPSBtU3VwZXJ2aXNvci5nZXRGb2N1c2VkU3RhY2soKTsKKyAgICAgICAgQWN0aXZpdHlSZWNvcmQgY3VyVG9wID0gKGZvY3VzU3RhY2sgPT0gbnVsbCkKKyAgICAgICAgICAgICAgICA/IG51bGwgOiBmb2N1c1N0YWNrLnRvcFJ1bm5pbmdOb25EZWxheWVkQWN0aXZpdHlMb2NrZWQobU5vdFRvcCk7CisKKyAgICAgICAgaWYgKGN1clRvcCAhPSBudWxsICYmIChjdXJUb3AudGFzayAhPSBpbnRlbnRBY3Rpdml0eS50YXNrIHx8CisgICAgICAgICAgICAgICAgY3VyVG9wLnRhc2sgIT0gZm9jdXNTdGFjay50b3BUYXNrKCkpKSB7CisgICAgICAgICAgICBtU3RhcnRBY3Rpdml0eS5pbnRlbnQuYWRkRmxhZ3MoSW50ZW50LkZMQUdfQUNUSVZJVFlfQlJPVUdIVF9UT19GUk9OVCk7CisgICAgICAgICAgICBpZiAobVNvdXJjZVJlY29yZCA9PSBudWxsIHx8IChtU291cmNlU3RhY2sudG9wQWN0aXZpdHkoKSAhPSBudWxsICYmCisgICAgICAgICAgICAgICAgICAgIG1Tb3VyY2VTdGFjay50b3BBY3Rpdml0eSgpLnRhc2sgPT0gbVNvdXJjZVJlY29yZC50YXNrKSkgeworICAgICAgICAgICAgICAgIC8vIFdlIHJlYWxseSBkbyB3YW50IHRvIHB1c2ggdGhpcyBvbmUgaW50byB0aGUgdXNlcidzIGZhY2UsIHJpZ2h0IG5vdy4KKyAgICAgICAgICAgICAgICBpZiAobUxhdW5jaFRhc2tCZWhpbmQgJiYgbVNvdXJjZVJlY29yZCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGludGVudEFjdGl2aXR5LnNldFRhc2tUb0FmZmlsaWF0ZVdpdGgobVNvdXJjZVJlY29yZC50YXNrKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbU1vdmVkSG9tZSA9IHRydWU7CisgICAgICAgICAgICAgICAgZmluYWwgQWN0aXZpdHlTdGFjayBsYXVuY2hTdGFjayA9CisgICAgICAgICAgICAgICAgICAgICAgICBnZXRMYXVuY2hTdGFjayhtU3RhcnRBY3Rpdml0eSwgbUxhdW5jaEZsYWdzLCBtU3RhcnRBY3Rpdml0eS50YXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtT3B0aW9ucywgdHJ1ZSk7CisgICAgICAgICAgICAgICAgaWYgKGxhdW5jaFN0YWNrID09IG51bGwgfHwgbGF1bmNoU3RhY2sgPT0gbVRhcmdldFN0YWNrKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkgd2FudCB0byBtb3ZlIHRvIHRoZSBmcm9udCwgaWYgd2UgYXJlbid0IGdvaW5nIHRvIGxhdW5jaCBvbiBhCisgICAgICAgICAgICAgICAgICAgIC8vIGRpZmZlcmVudCBzdGFjay4gSWYgd2UgbGF1bmNoIG9uIGEgZGlmZmVyZW50IHN0YWNrLCB3ZSB3aWxsIHB1dCB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gdGFzayBvbiB0b3AgdGhlcmUuCisgICAgICAgICAgICAgICAgICAgIG1UYXJnZXRTdGFjay5tb3ZlVGFza1RvRnJvbnRMb2NrZWQoaW50ZW50QWN0aXZpdHkudGFzaywgbU5vQW5pbWF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1PcHRpb25zLCBtU3RhcnRBY3Rpdml0eS5hcHBUaW1lVHJhY2tlciwgImJyaW5naW5nRm91bmRUYXNrVG9Gcm9udCIpOworICAgICAgICAgICAgICAgICAgICBtTW92ZWRUb0Zyb250ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKChtTGF1bmNoRmxhZ3MgJiAoRkxBR19BQ1RJVklUWV9ORVdfVEFTSyB8IEZMQUdfQUNUSVZJVFlfVEFTS19PTl9IT01FKSkKKyAgICAgICAgICAgICAgICAgICAgICAgID09IChGTEFHX0FDVElWSVRZX05FV19UQVNLIHwgRkxBR19BQ1RJVklUWV9UQVNLX09OX0hPTUUpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIENhbGxlciB3YW50cyB0byBhcHBlYXIgb24gaG9tZSBhY3Rpdml0eS4KKyAgICAgICAgICAgICAgICAgICAgaW50ZW50QWN0aXZpdHkudGFzay5zZXRUYXNrVG9SZXR1cm5UbyhIT01FX0FDVElWSVRZX1RZUEUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtT3B0aW9ucyA9IG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFtTW92ZWRUb0Zyb250ICYmIG1Eb1Jlc3VtZSkgeworICAgICAgICAgICAgaWYgKERFQlVHX1RBU0tTKSBTbG9nLmQoVEFHX1RBU0tTLCAiQnJpbmcgdG8gZnJvbnQgdGFyZ2V0OiAiICsgbVRhcmdldFN0YWNrCisgICAgICAgICAgICAgICAgICAgICsgIiBmcm9tICIgKyBpbnRlbnRBY3Rpdml0eSk7CisgICAgICAgICAgICBtVGFyZ2V0U3RhY2subW92ZVRvRnJvbnQoImludGVudEFjdGl2aXR5Rm91bmQiKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHRoZSBjYWxsZXIgaGFzIHJlcXVlc3RlZCB0aGF0IHRoZSB0YXJnZXQgdGFzayBiZSByZXNldCwgdGhlbiBkbyBzby4KKyAgICAgICAgaWYgKChtTGF1bmNoRmxhZ3MgJiBGTEFHX0FDVElWSVRZX1JFU0VUX1RBU0tfSUZfTkVFREVEKSAhPSAwKSB7CisgICAgICAgICAgICByZXR1cm4gbVRhcmdldFN0YWNrLnJlc2V0VGFza0lmTmVlZGVkTG9ja2VkKGludGVudEFjdGl2aXR5LCBtU3RhcnRBY3Rpdml0eSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGludGVudEFjdGl2aXR5OworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBzZXRUYXNrRnJvbUludGVudEFjdGl2aXR5KEFjdGl2aXR5UmVjb3JkIGludGVudEFjdGl2aXR5KSB7CisgICAgICAgIGlmICgobUxhdW5jaEZsYWdzICYgKEZMQUdfQUNUSVZJVFlfTkVXX1RBU0sgfCBGTEFHX0FDVElWSVRZX0NMRUFSX1RBU0spKQorICAgICAgICAgICAgICAgID09IChGTEFHX0FDVElWSVRZX05FV19UQVNLIHwgRkxBR19BQ1RJVklUWV9DTEVBUl9UQVNLKSkgeworICAgICAgICAgICAgLy8gVGhlIGNhbGxlciBoYXMgcmVxdWVzdGVkIHRvIGNvbXBsZXRlbHkgcmVwbGFjZSBhbnkgZXhpc3RpbmcgdGFzayB3aXRoIGl0cyBuZXcKKyAgICAgICAgICAgIC8vIGFjdGl2aXR5LiBXZWxsIHRoYXQgc2hvdWxkIG5vdCBiZSB0b28gaGFyZC4uLgorICAgICAgICAgICAgbVJldXNlVGFzayA9IGludGVudEFjdGl2aXR5LnRhc2s7CisgICAgICAgICAgICBtUmV1c2VUYXNrLnBlcmZvcm1DbGVhclRhc2tMb2NrZWQoKTsKKyAgICAgICAgICAgIG1SZXVzZVRhc2suc2V0SW50ZW50KG1TdGFydEFjdGl2aXR5KTsKKyAgICAgICAgfSBlbHNlIGlmICgobUxhdW5jaEZsYWdzICYgRkxBR19BQ1RJVklUWV9DTEVBUl9UT1ApICE9IDAKKyAgICAgICAgICAgICAgICB8fCBtTGF1bmNoU2luZ2xlSW5zdGFuY2UgfHwgbUxhdW5jaFNpbmdsZVRhc2spIHsKKyAgICAgICAgICAgIC8vIEluIHRoaXMgc2l0dWF0aW9uIHdlIHdhbnQgdG8gcmVtb3ZlIGFsbCBhY3Rpdml0aWVzIGZyb20gdGhlIHRhc2sgdXAgdG8gdGhlIG9uZQorICAgICAgICAgICAgLy8gYmVpbmcgc3RhcnRlZC4gSW4gbW9zdCBjYXNlcyB0aGlzIG1lYW5zIHdlIGFyZSByZXNldHRpbmcgdGhlIHRhc2sgdG8gaXRzIGluaXRpYWwKKyAgICAgICAgICAgIC8vIHN0YXRlLgorICAgICAgICAgICAgQWN0aXZpdHlSZWNvcmQgdG9wID0gaW50ZW50QWN0aXZpdHkudGFzay5wZXJmb3JtQ2xlYXJUYXNrTG9ja2VkKG1TdGFydEFjdGl2aXR5LAorICAgICAgICAgICAgICAgICAgICBtTGF1bmNoRmxhZ3MpOworICAgICAgICAgICAgaWYgKHRvcCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgaWYgKHRvcC5mcm9udE9mVGFzaykgeworICAgICAgICAgICAgICAgICAgICAvLyBBY3Rpdml0eSBhbGlhc2VzIG1heSBtZWFuIHdlIHVzZSBkaWZmZXJlbnQgaW50ZW50cyBmb3IgdGhlIHRvcCBhY3Rpdml0eSwKKyAgICAgICAgICAgICAgICAgICAgLy8gc28gbWFrZSBzdXJlIHRoZSB0YXNrIG5vdyBoYXMgdGhlIGlkZW50aXR5IG9mIHRoZSBuZXcgaW50ZW50LgorICAgICAgICAgICAgICAgICAgICB0b3AudGFzay5zZXRJbnRlbnQobVN0YXJ0QWN0aXZpdHkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBBY3Rpdml0eVN0YWNrLmxvZ1N0YXJ0QWN0aXZpdHkoRXZlbnRMb2dUYWdzLkFNX05FV19JTlRFTlQsIG1TdGFydEFjdGl2aXR5LCB0b3AudGFzayk7CisgICAgICAgICAgICAgICAgdG9wLmRlbGl2ZXJOZXdJbnRlbnRMb2NrZWQobUNhbGxpbmdVaWQsIG1TdGFydEFjdGl2aXR5LmludGVudCwgbVN0YXJ0QWN0aXZpdHkubGF1bmNoZWRGcm9tUGFja2FnZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIEEgc3BlY2lhbCBjYXNlOiB3ZSBuZWVkIHRvIHN0YXJ0IHRoZSBhY3Rpdml0eSBiZWNhdXNlIGl0IGlzIG5vdCBjdXJyZW50bHkKKyAgICAgICAgICAgICAgICAvLyBydW5uaW5nLCBhbmQgdGhlIGNhbGxlciBoYXMgYXNrZWQgdG8gY2xlYXIgdGhlIGN1cnJlbnQgdGFzayB0byBoYXZlIHRoaXMKKyAgICAgICAgICAgICAgICAvLyBhY3Rpdml0eSBhdCB0aGUgdG9wLgorICAgICAgICAgICAgICAgIG1BZGRpbmdUb1Rhc2sgPSB0cnVlOworICAgICAgICAgICAgICAgIC8vIE5vdyBwcmV0ZW5kIGxpa2UgdGhpcyBhY3Rpdml0eSBpcyBiZWluZyBzdGFydGVkIGJ5IHRoZSB0b3Agb2YgaXRzIHRhc2ssIHNvIGl0CisgICAgICAgICAgICAgICAgLy8gaXMgcHV0IGluIHRoZSByaWdodCBwbGFjZS4KKyAgICAgICAgICAgICAgICBtU291cmNlUmVjb3JkID0gaW50ZW50QWN0aXZpdHk7CisgICAgICAgICAgICAgICAgZmluYWwgVGFza1JlY29yZCB0YXNrID0gbVNvdXJjZVJlY29yZC50YXNrOworICAgICAgICAgICAgICAgIGlmICh0YXNrICE9IG51bGwgJiYgdGFzay5zdGFjayA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRhcmdldCBzdGFjayBnb3QgY2xlYXJlZCB3aGVuIHdlIGFsbCBhY3Rpdml0aWVzIHdlcmUgcmVtb3ZlZCBhYm92ZS4KKyAgICAgICAgICAgICAgICAgICAgLy8gR28gYWhlYWQgYW5kIHJlc2V0IGl0LgorICAgICAgICAgICAgICAgICAgICBtVGFyZ2V0U3RhY2sgPSBjb21wdXRlU3RhY2tGb2N1cyhtU291cmNlUmVjb3JkLCBmYWxzZSAvKiBuZXdUYXNrICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwgLyogYm91bmRzICovLCBtTGF1bmNoRmxhZ3MsIG1PcHRpb25zKTsKKyAgICAgICAgICAgICAgICAgICAgbVRhcmdldFN0YWNrLmFkZFRhc2sodGFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAhbUxhdW5jaFRhc2tCZWhpbmQgLyogdG9Ub3AgKi8sICJzdGFydEFjdGl2aXR5VW5jaGVja2VkIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKG1TdGFydEFjdGl2aXR5LnJlYWxBY3Rpdml0eS5lcXVhbHMoaW50ZW50QWN0aXZpdHkudGFzay5yZWFsQWN0aXZpdHkpKSB7CisgICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UgdGhlIHRvcCBhY3Rpdml0eSBvbiB0aGUgdGFzayBpcyB0aGUgc2FtZSBhcyB0aGUgb25lIGJlaW5nIGxhdW5jaGVkLAorICAgICAgICAgICAgLy8gc28gd2UgdGFrZSB0aGF0IGFzIGEgcmVxdWVzdCB0byBicmluZyB0aGUgdGFzayB0byB0aGUgZm9yZWdyb3VuZC4gSWYgdGhlIHRvcAorICAgICAgICAgICAgLy8gYWN0aXZpdHkgaW4gdGhlIHRhc2sgaXMgdGhlIHJvb3QgYWN0aXZpdHksIGRlbGl2ZXIgdGhpcyBuZXcgaW50ZW50IHRvIGl0IGlmIGl0CisgICAgICAgICAgICAvLyBkZXNpcmVzLgorICAgICAgICAgICAgaWYgKCgobUxhdW5jaEZsYWdzICYgRkxBR19BQ1RJVklUWV9TSU5HTEVfVE9QKSAhPSAwIHx8IG1MYXVuY2hTaW5nbGVUb3ApCisgICAgICAgICAgICAgICAgICAgICYmIGludGVudEFjdGl2aXR5LnJlYWxBY3Rpdml0eS5lcXVhbHMobVN0YXJ0QWN0aXZpdHkucmVhbEFjdGl2aXR5KSkgeworICAgICAgICAgICAgICAgIEFjdGl2aXR5U3RhY2subG9nU3RhcnRBY3Rpdml0eShFdmVudExvZ1RhZ3MuQU1fTkVXX0lOVEVOVCwgbVN0YXJ0QWN0aXZpdHksCisgICAgICAgICAgICAgICAgICAgICAgICBpbnRlbnRBY3Rpdml0eS50YXNrKTsKKyAgICAgICAgICAgICAgICBpZiAoaW50ZW50QWN0aXZpdHkuZnJvbnRPZlRhc2spIHsKKyAgICAgICAgICAgICAgICAgICAgaW50ZW50QWN0aXZpdHkudGFzay5zZXRJbnRlbnQobVN0YXJ0QWN0aXZpdHkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpbnRlbnRBY3Rpdml0eS5kZWxpdmVyTmV3SW50ZW50TG9ja2VkKG1DYWxsaW5nVWlkLCBtU3RhcnRBY3Rpdml0eS5pbnRlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICBtU3RhcnRBY3Rpdml0eS5sYXVuY2hlZEZyb21QYWNrYWdlKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIW1TdGFydEFjdGl2aXR5LmludGVudC5maWx0ZXJFcXVhbHMoaW50ZW50QWN0aXZpdHkudGFzay5pbnRlbnQpKSB7CisgICAgICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlIHdlIGFyZSBsYXVuY2hpbmcgdGhlIHJvb3QgYWN0aXZpdHkgb2YgdGhlIHRhc2ssIGJ1dCB3aXRoIGEKKyAgICAgICAgICAgICAgICAvLyBkaWZmZXJlbnQgaW50ZW50LiBXZSBzaG91bGQgc3RhcnQgYSBuZXcgaW5zdGFuY2Ugb24gdG9wLgorICAgICAgICAgICAgICAgIG1BZGRpbmdUb1Rhc2sgPSB0cnVlOworICAgICAgICAgICAgICAgIG1Tb3VyY2VSZWNvcmQgPSBpbnRlbnRBY3Rpdml0eTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICgobUxhdW5jaEZsYWdzICYgRkxBR19BQ1RJVklUWV9SRVNFVF9UQVNLX0lGX05FRURFRCkgPT0gMCkgeworICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlIGFuIGFjdGl2aXR5IGlzIGJlaW5nIGxhdW5jaGVkIGluIHRvIGFuIGV4aXN0aW5nIHRhc2ssIHdpdGhvdXQKKyAgICAgICAgICAgIC8vIHJlc2V0dGluZyB0aGF0IHRhc2suIFRoaXMgaXMgdHlwaWNhbGx5IHRoZSBzaXR1YXRpb24gb2YgbGF1bmNoaW5nIGFuIGFjdGl2aXR5CisgICAgICAgICAgICAvLyBmcm9tIGEgbm90aWZpY2F0aW9uIG9yIHNob3J0Y3V0LiBXZSB3YW50IHRvIHBsYWNlIHRoZSBuZXcgYWN0aXZpdHkgb24gdG9wIG9mIHRoZQorICAgICAgICAgICAgLy8gY3VycmVudCB0YXNrLgorICAgICAgICAgICAgbUFkZGluZ1RvVGFzayA9IHRydWU7CisgICAgICAgICAgICBtU291cmNlUmVjb3JkID0gaW50ZW50QWN0aXZpdHk7CisgICAgICAgIH0gZWxzZSBpZiAoIWludGVudEFjdGl2aXR5LnRhc2sucm9vdFdhc1Jlc2V0KSB7CisgICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2Ugd2UgYXJlIGxhdW5jaGluZyBpbnRvIGFuIGV4aXN0aW5nIHRhc2sgdGhhdCBoYXMgbm90IHlldCBiZWVuIHN0YXJ0ZWQKKyAgICAgICAgICAgIC8vIGZyb20gaXRzIGZyb250IGRvb3IuIFRoZSBjdXJyZW50IHRhc2sgaGFzIGJlZW4gYnJvdWdodCB0byB0aGUgZnJvbnQuIElkZWFsbHksCisgICAgICAgICAgICAvLyB3ZSdkIHByb2JhYmx5IGxpa2UgdG8gcGxhY2UgdGhpcyBuZXcgdGFzayBhdCB0aGUgYm90dG9tIG9mIGl0cyBzdGFjaywgYnV0IHRoYXQncworICAgICAgICAgICAgLy8gYSBsaXR0bGUgaGFyZCB0byBkbyB3aXRoIHRoZSBjdXJyZW50IG9yZ2FuaXphdGlvbiBvZiB0aGUgY29kZSBzbyBmb3Igbm93IHdlJ2xsCisgICAgICAgICAgICAvLyBqdXN0IGRyb3AgaXQuCisgICAgICAgICAgICBpbnRlbnRBY3Rpdml0eS50YXNrLnNldEludGVudChtU3RhcnRBY3Rpdml0eSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgcmVzdW1lVGFyZ2V0U3RhY2tJZk5lZWRlZCgpIHsKKyAgICAgICAgaWYgKG1Eb1Jlc3VtZSkgeworICAgICAgICAgICAgbVN1cGVydmlzb3IucmVzdW1lRm9jdXNlZFN0YWNrVG9wQWN0aXZpdHlMb2NrZWQobVRhcmdldFN0YWNrLCBudWxsLCBtT3B0aW9ucyk7CisgICAgICAgICAgICBpZiAoIW1Nb3ZlZFRvRnJvbnQpIHsKKyAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdG8gbm90aWZ5IEtleWd1YXJkIGFzIHdlbGwgaWYgd2UgYXJlIG5vdCBydW5uaW5nIGFuIGFwcCB0cmFuc2l0aW9uCisgICAgICAgICAgICAgICAgLy8gbGF0ZXIuCisgICAgICAgICAgICAgICAgbVN1cGVydmlzb3Iubm90aWZ5QWN0aXZpdHlEcmF3bkZvcktleWd1YXJkKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBY3Rpdml0eU9wdGlvbnMuYWJvcnQobU9wdGlvbnMpOworICAgICAgICB9CisgICAgICAgIG1TdXBlcnZpc29yLnVwZGF0ZVVzZXJTdGFja0xvY2tlZChtU3RhcnRBY3Rpdml0eS51c2VySWQsIG1UYXJnZXRTdGFjayk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHNldFRhc2tGcm9tUmV1c2VPckNyZWF0ZU5ld1Rhc2soVGFza1JlY29yZCB0YXNrVG9BZmZpbGlhdGUpIHsKKyAgICAgICAgbVRhcmdldFN0YWNrID0gY29tcHV0ZVN0YWNrRm9jdXMobVN0YXJ0QWN0aXZpdHksIHRydWUsIG1MYXVuY2hCb3VuZHMsIG1MYXVuY2hGbGFncywKKyAgICAgICAgICAgICAgICBtT3B0aW9ucyk7CisgICAgICAgIGlmIChtRG9SZXN1bWUpIHsKKyAgICAgICAgICAgIG1UYXJnZXRTdGFjay5tb3ZlVG9Gcm9udCgic3RhcnRpbmdOZXdUYXNrIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVJldXNlVGFzayA9PSBudWxsKSB7CisgICAgICAgICAgICBmaW5hbCBUYXNrUmVjb3JkIHRhc2sgPSBtVGFyZ2V0U3RhY2suY3JlYXRlVGFza1JlY29yZChtU3VwZXJ2aXNvci5nZXROZXh0VGFza0lkKCksCisgICAgICAgICAgICAgICAgICAgIG1OZXdUYXNrSW5mbyAhPSBudWxsID8gbU5ld1Rhc2tJbmZvIDogbVN0YXJ0QWN0aXZpdHkuaW5mbywKKyAgICAgICAgICAgICAgICAgICAgbU5ld1Rhc2tJbnRlbnQgIT0gbnVsbCA/IG1OZXdUYXNrSW50ZW50IDogbUludGVudCwKKyAgICAgICAgICAgICAgICAgICAgbVZvaWNlU2Vzc2lvbiwgbVZvaWNlSW50ZXJhY3RvciwgIW1MYXVuY2hUYXNrQmVoaW5kIC8qIHRvVG9wICovKTsKKyAgICAgICAgICAgIG1TdGFydEFjdGl2aXR5LnNldFRhc2sodGFzaywgdGFza1RvQWZmaWxpYXRlKTsKKyAgICAgICAgICAgIGlmIChtTGF1bmNoQm91bmRzICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBtU3RhcnRBY3Rpdml0eS50YXNrLnVwZGF0ZU92ZXJyaWRlQ29uZmlndXJhdGlvbihtTGF1bmNoQm91bmRzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChERUJVR19UQVNLUykgU2xvZy52KFRBR19UQVNLUywKKyAgICAgICAgICAgICAgICAgICAgIlN0YXJ0aW5nIG5ldyBhY3Rpdml0eSAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU3RhcnRBY3Rpdml0eSArICIgaW4gbmV3IHRhc2sgIiArIG1TdGFydEFjdGl2aXR5LnRhc2spOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbVN0YXJ0QWN0aXZpdHkuc2V0VGFzayhtUmV1c2VUYXNrLCB0YXNrVG9BZmZpbGlhdGUpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBpbnQgc2V0VGFza0Zyb21Tb3VyY2VSZWNvcmQoKSB7CisgICAgICAgIGZpbmFsIFRhc2tSZWNvcmQgc291cmNlVGFzayA9IG1Tb3VyY2VSZWNvcmQudGFzazsKKyAgICAgICAgLy8gV2Ugb25seSB3YW50IHRvIGFsbG93IGNoYW5naW5nIHN0YWNrIGlmIHRoZSB0YXJnZXQgdGFzayBpcyBub3QgdGhlIHRvcCBvbmUsCisgICAgICAgIC8vIG90aGVyd2lzZSB3ZSB3b3VsZCBtb3ZlIHRoZSBsYXVuY2hpbmcgdGFzayB0byB0aGUgb3RoZXIgc2lkZSwgcmF0aGVyIHRoYW4gc2hvdworICAgICAgICAvLyB0d28gc2lkZSBieSBzaWRlLgorICAgICAgICBmaW5hbCBib29sZWFuIGxhdW5jaFRvU2lkZUFsbG93ZWQgPSBzb3VyY2VUYXNrLnN0YWNrLnRvcFRhc2soKSAhPSBzb3VyY2VUYXNrOworICAgICAgICBtVGFyZ2V0U3RhY2sgPSBnZXRMYXVuY2hTdGFjayhtU3RhcnRBY3Rpdml0eSwgbUxhdW5jaEZsYWdzLCBtU3RhcnRBY3Rpdml0eS50YXNrLCBtT3B0aW9ucywgbGF1bmNoVG9TaWRlQWxsb3dlZCk7CisKKyAgICAgICAgaWYgKG1UYXJnZXRTdGFjayA9PSBudWxsKSB7CisgICAgICAgICAgICBtVGFyZ2V0U3RhY2sgPSBzb3VyY2VUYXNrLnN0YWNrOworICAgICAgICB9IGVsc2UgaWYgKG1UYXJnZXRTdGFjayAhPSBzb3VyY2VUYXNrLnN0YWNrKSB7CisgICAgICAgICAgICBtU3VwZXJ2aXNvci5tb3ZlVGFza1RvU3RhY2tMb2NrZWQoc291cmNlVGFzay50YXNrSWQsIG1UYXJnZXRTdGFjay5tU3RhY2tJZCwKKyAgICAgICAgICAgICAgICAgICAgT05fVE9QLCBGT1JDRV9GT0NVUywgImxhdW5jaFRvU2lkZSIsICFBTklNQVRFKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobURvUmVzdW1lKSB7CisgICAgICAgICAgICBtVGFyZ2V0U3RhY2subW92ZVRvRnJvbnQoInNvdXJjZVN0YWNrVG9Gcm9udCIpOworICAgICAgICB9CisgICAgICAgIGZpbmFsIFRhc2tSZWNvcmQgdG9wVGFzayA9IG1UYXJnZXRTdGFjay50b3BUYXNrKCk7CisgICAgICAgIGlmICh0b3BUYXNrICE9IHNvdXJjZVRhc2spIHsKKyAgICAgICAgICAgIG1UYXJnZXRTdGFjay5tb3ZlVGFza1RvRnJvbnRMb2NrZWQoc291cmNlVGFzaywgbU5vQW5pbWF0aW9uLCBtT3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgbVN0YXJ0QWN0aXZpdHkuYXBwVGltZVRyYWNrZXIsICJzb3VyY2VUYXNrVG9Gcm9udCIpOworICAgICAgICB9CisgICAgICAgIGlmICghbUFkZGluZ1RvVGFzayAmJiAobUxhdW5jaEZsYWdzICYgRkxBR19BQ1RJVklUWV9DTEVBUl9UT1ApICE9IDApIHsKKyAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSwgd2UgYXJlIGFkZGluZyB0aGUgYWN0aXZpdHkgdG8gYW4gZXhpc3RpbmcgdGFzaywgYnV0IHRoZSBjYWxsZXIgaGFzCisgICAgICAgICAgICAvLyBhc2tlZCB0byBjbGVhciB0aGF0IHRhc2sgaWYgdGhlIGFjdGl2aXR5IGlzIGFscmVhZHkgcnVubmluZy4KKyAgICAgICAgICAgIEFjdGl2aXR5UmVjb3JkIHRvcCA9IHNvdXJjZVRhc2sucGVyZm9ybUNsZWFyVGFza0xvY2tlZChtU3RhcnRBY3Rpdml0eSwgbUxhdW5jaEZsYWdzKTsKKyAgICAgICAgICAgIG1LZWVwQ3VyVHJhbnNpdGlvbiA9IHRydWU7CisgICAgICAgICAgICBpZiAodG9wICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBBY3Rpdml0eVN0YWNrLmxvZ1N0YXJ0QWN0aXZpdHkoRXZlbnRMb2dUYWdzLkFNX05FV19JTlRFTlQsIG1TdGFydEFjdGl2aXR5LCB0b3AudGFzayk7CisgICAgICAgICAgICAgICAgdG9wLmRlbGl2ZXJOZXdJbnRlbnRMb2NrZWQobUNhbGxpbmdVaWQsIG1TdGFydEFjdGl2aXR5LmludGVudCwgbVN0YXJ0QWN0aXZpdHkubGF1bmNoZWRGcm9tUGFja2FnZSk7CisgICAgICAgICAgICAgICAgLy8gRm9yIHBhcmFub2lhLCBtYWtlIHN1cmUgd2UgaGF2ZSBjb3JyZWN0bHkgcmVzdW1lZCB0aGUgdG9wIGFjdGl2aXR5LgorICAgICAgICAgICAgICAgIG1UYXJnZXRTdGFjay5tTGFzdFBhdXNlZEFjdGl2aXR5ID0gbnVsbDsKKyAgICAgICAgICAgICAgICBpZiAobURvUmVzdW1lKSB7CisgICAgICAgICAgICAgICAgICAgIG1TdXBlcnZpc29yLnJlc3VtZUZvY3VzZWRTdGFja1RvcEFjdGl2aXR5TG9ja2VkKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEFjdGl2aXR5T3B0aW9ucy5hYm9ydChtT3B0aW9ucyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFNUQVJUX0RFTElWRVJFRF9UT19UT1A7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoIW1BZGRpbmdUb1Rhc2sgJiYgKG1MYXVuY2hGbGFncyAmIEZMQUdfQUNUSVZJVFlfUkVPUkRFUl9UT19GUk9OVCkgIT0gMCkgeworICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlLCB3ZSBhcmUgbGF1bmNoaW5nIGFuIGFjdGl2aXR5IGluIG91ciBvd24gdGFzayB0aGF0IG1heSBhbHJlYWR5IGJlCisgICAgICAgICAgICAvLyBydW5uaW5nIHNvbWV3aGVyZSBpbiB0aGUgaGlzdG9yeSwgYW5kIHdlIHdhbnQgdG8gc2h1ZmZsZSBpdCB0byB0aGUgZnJvbnQgb2YgdGhlCisgICAgICAgICAgICAvLyBzdGFjayBpZiBzby4KKyAgICAgICAgICAgIGZpbmFsIEFjdGl2aXR5UmVjb3JkIHRvcCA9IHNvdXJjZVRhc2suZmluZEFjdGl2aXR5SW5IaXN0b3J5TG9ja2VkKG1TdGFydEFjdGl2aXR5KTsKKyAgICAgICAgICAgIGlmICh0b3AgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGZpbmFsIFRhc2tSZWNvcmQgdGFzayA9IHRvcC50YXNrOworICAgICAgICAgICAgICAgIHRhc2subW92ZUFjdGl2aXR5VG9Gcm9udExvY2tlZCh0b3ApOworICAgICAgICAgICAgICAgIHRvcC51cGRhdGVPcHRpb25zTG9ja2VkKG1PcHRpb25zKTsKKyAgICAgICAgICAgICAgICBBY3Rpdml0eVN0YWNrLmxvZ1N0YXJ0QWN0aXZpdHkoRXZlbnRMb2dUYWdzLkFNX05FV19JTlRFTlQsIG1TdGFydEFjdGl2aXR5LCB0YXNrKTsKKyAgICAgICAgICAgICAgICB0b3AuZGVsaXZlck5ld0ludGVudExvY2tlZChtQ2FsbGluZ1VpZCwgbVN0YXJ0QWN0aXZpdHkuaW50ZW50LCBtU3RhcnRBY3Rpdml0eS5sYXVuY2hlZEZyb21QYWNrYWdlKTsKKyAgICAgICAgICAgICAgICBtVGFyZ2V0U3RhY2subUxhc3RQYXVzZWRBY3Rpdml0eSA9IG51bGw7CisgICAgICAgICAgICAgICAgaWYgKG1Eb1Jlc3VtZSkgeworICAgICAgICAgICAgICAgICAgICBtU3VwZXJ2aXNvci5yZXN1bWVGb2N1c2VkU3RhY2tUb3BBY3Rpdml0eUxvY2tlZCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gU1RBUlRfREVMSVZFUkVEX1RPX1RPUDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEFuIGV4aXN0aW5nIGFjdGl2aXR5IGlzIHN0YXJ0aW5nIHRoaXMgbmV3IGFjdGl2aXR5LCBzbyB3ZSB3YW50IHRvIGtlZXAgdGhlIG5ldyBvbmUgaW4KKyAgICAgICAgLy8gdGhlIHNhbWUgdGFzayBhcyB0aGUgb25lIHRoYXQgaXMgc3RhcnRpbmcgaXQuCisgICAgICAgIG1TdGFydEFjdGl2aXR5LnNldFRhc2soc291cmNlVGFzaywgbnVsbCk7CisgICAgICAgIGlmIChERUJVR19UQVNLUykgU2xvZy52KFRBR19UQVNLUywgIlN0YXJ0aW5nIG5ldyBhY3Rpdml0eSAiICsgbVN0YXJ0QWN0aXZpdHkKKyAgICAgICAgICAgICAgICArICIgaW4gZXhpc3RpbmcgdGFzayAiICsgbVN0YXJ0QWN0aXZpdHkudGFzayArICIgZnJvbSBzb3VyY2UgIiArIG1Tb3VyY2VSZWNvcmQpOworICAgICAgICByZXR1cm4gU1RBUlRfU1VDQ0VTUzsKKyAgICB9CisKKyAgICBwcml2YXRlIGludCBzZXRUYXNrRnJvbUluVGFzaygpIHsKKyAgICAgICAgaWYgKG1MYXVuY2hCb3VuZHMgIT0gbnVsbCkgeworICAgICAgICAgICAgbUluVGFzay51cGRhdGVPdmVycmlkZUNvbmZpZ3VyYXRpb24obUxhdW5jaEJvdW5kcyk7CisgICAgICAgICAgICBpbnQgc3RhY2tJZCA9IG1JblRhc2suZ2V0TGF1bmNoU3RhY2tJZCgpOworICAgICAgICAgICAgaWYgKHN0YWNrSWQgIT0gbUluVGFzay5zdGFjay5tU3RhY2tJZCkgeworICAgICAgICAgICAgICAgIG1TdXBlcnZpc29yLm1vdmVUYXNrVG9TdGFja1VuY2hlY2tlZExvY2tlZCgKKyAgICAgICAgICAgICAgICAgICAgICAgIG1JblRhc2ssIHN0YWNrSWQsIE9OX1RPUCwgIUZPUkNFX0ZPQ1VTLCAiaW5UYXNrVG9Gcm9udCIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG1UYXJnZXRTdGFjayA9IG1JblRhc2suc3RhY2s7CisgICAgICAgIG1UYXJnZXRTdGFjay5tb3ZlVGFza1RvRnJvbnRMb2NrZWQoCisgICAgICAgICAgICAgICAgbUluVGFzaywgbU5vQW5pbWF0aW9uLCBtT3B0aW9ucywgbVN0YXJ0QWN0aXZpdHkuYXBwVGltZVRyYWNrZXIsICJpblRhc2tUb0Zyb250Iik7CisKKyAgICAgICAgLy8gQ2hlY2sgd2hldGhlciB3ZSBzaG91bGQgYWN0dWFsbHkgbGF1bmNoIHRoZSBuZXcgYWN0aXZpdHkgaW4gdG8gdGhlIHRhc2ssCisgICAgICAgIC8vIG9yIGp1c3QgcmV1c2UgdGhlIGN1cnJlbnQgYWN0aXZpdHkgb24gdG9wLgorICAgICAgICBBY3Rpdml0eVJlY29yZCB0b3AgPSBtSW5UYXNrLmdldFRvcEFjdGl2aXR5KCk7CisgICAgICAgIGlmICh0b3AgIT0gbnVsbCAmJiB0b3AucmVhbEFjdGl2aXR5LmVxdWFscyhtU3RhcnRBY3Rpdml0eS5yZWFsQWN0aXZpdHkpICYmIHRvcC51c2VySWQgPT0gbVN0YXJ0QWN0aXZpdHkudXNlcklkKSB7CisgICAgICAgICAgICBpZiAoKG1MYXVuY2hGbGFncyAmIEZMQUdfQUNUSVZJVFlfU0lOR0xFX1RPUCkgIT0gMAorICAgICAgICAgICAgICAgICAgICB8fCBtTGF1bmNoU2luZ2xlVG9wIHx8IG1MYXVuY2hTaW5nbGVUYXNrKSB7CisgICAgICAgICAgICAgICAgQWN0aXZpdHlTdGFjay5sb2dTdGFydEFjdGl2aXR5KEV2ZW50TG9nVGFncy5BTV9ORVdfSU5URU5ULCB0b3AsIHRvcC50YXNrKTsKKyAgICAgICAgICAgICAgICBpZiAoKG1TdGFydEZsYWdzICYgU1RBUlRfRkxBR19PTkxZX0lGX05FRURFRCkgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIHN0YXJ0IGEgbmV3IGFjdGl2aXR5LCBhbmQgdGhlIGNsaWVudCBzYWlkIG5vdCB0byBkbworICAgICAgICAgICAgICAgICAgICAvLyBhbnl0aGluZyBpZiB0aGF0IGlzIHRoZSBjYXNlLCBzbyB0aGlzIGlzIGl0IQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gU1RBUlRfUkVUVVJOX0lOVEVOVF9UT19DQUxMRVI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRvcC5kZWxpdmVyTmV3SW50ZW50TG9ja2VkKG1DYWxsaW5nVWlkLCBtU3RhcnRBY3Rpdml0eS5pbnRlbnQsIG1TdGFydEFjdGl2aXR5LmxhdW5jaGVkRnJvbVBhY2thZ2UpOworICAgICAgICAgICAgICAgIHJldHVybiBTVEFSVF9ERUxJVkVSRURfVE9fVE9QOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCFtQWRkaW5nVG9UYXNrKSB7CisgICAgICAgICAgICAvLyBXZSBkb24ndCBhY3R1YWxseSB3YW50IHRvIGhhdmUgdGhpcyBhY3Rpdml0eSBhZGRlZCB0byB0aGUgdGFzaywgc28ganVzdAorICAgICAgICAgICAgLy8gc3RvcCBoZXJlIGJ1dCBzdGlsbCB0ZWxsIHRoZSBjYWxsZXIgdGhhdCB3ZSBjb25zdW1lZCB0aGUgaW50ZW50LgorICAgICAgICAgICAgQWN0aXZpdHlPcHRpb25zLmFib3J0KG1PcHRpb25zKTsKKyAgICAgICAgICAgIHJldHVybiBTVEFSVF9UQVNLX1RPX0ZST05UOworICAgICAgICB9CisKKyAgICAgICAgbVN0YXJ0QWN0aXZpdHkuc2V0VGFzayhtSW5UYXNrLCBudWxsKTsKKyAgICAgICAgaWYgKERFQlVHX1RBU0tTKSBTbG9nLnYoVEFHX1RBU0tTLAorICAgICAgICAgICAgICAgICJTdGFydGluZyBuZXcgYWN0aXZpdHkgIiArIG1TdGFydEFjdGl2aXR5ICsgIiBpbiBleHBsaWNpdCB0YXNrICIgKyBtU3RhcnRBY3Rpdml0eS50YXNrKTsKKworICAgICAgICByZXR1cm4gU1RBUlRfU1VDQ0VTUzsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgc2V0VGFza1RvQ3VycmVudFRvcE9yQ3JlYXRlTmV3VGFzaygpIHsKKyAgICAgICAgbVRhcmdldFN0YWNrID0gY29tcHV0ZVN0YWNrRm9jdXMobVN0YXJ0QWN0aXZpdHksIGZhbHNlLCBudWxsIC8qIGJvdW5kcyAqLywgbUxhdW5jaEZsYWdzLAorICAgICAgICAgICAgICAgIG1PcHRpb25zKTsKKyAgICAgICAgaWYgKG1Eb1Jlc3VtZSkgeworICAgICAgICAgICAgbVRhcmdldFN0YWNrLm1vdmVUb0Zyb250KCJhZGRpbmdUb1RvcFRhc2siKTsKKyAgICAgICAgfQorICAgICAgICBmaW5hbCBBY3Rpdml0eVJlY29yZCBwcmV2ID0gbVRhcmdldFN0YWNrLnRvcEFjdGl2aXR5KCk7CisgICAgICAgIGZpbmFsIFRhc2tSZWNvcmQgdGFzayA9IHByZXYgIT0gbnVsbCA/IHByZXYudGFzaworICAgICAgICAgICAgICAgIDogbVRhcmdldFN0YWNrLmNyZWF0ZVRhc2tSZWNvcmQoCisgICAgICAgICAgICAgICAgbVN1cGVydmlzb3IuZ2V0TmV4dFRhc2tJZCgpLCBtU3RhcnRBY3Rpdml0eS5pbmZvLCBtSW50ZW50LCBudWxsLCBudWxsLCB0cnVlKTsKKyAgICAgICAgbVN0YXJ0QWN0aXZpdHkuc2V0VGFzayh0YXNrLCBudWxsKTsKKyAgICAgICAgbVdpbmRvd01hbmFnZXIubW92ZVRhc2tUb1RvcChtU3RhcnRBY3Rpdml0eS50YXNrLnRhc2tJZCk7CisgICAgICAgIGlmIChERUJVR19UQVNLUykgU2xvZy52KFRBR19UQVNLUywKKyAgICAgICAgICAgICAgICAiU3RhcnRpbmcgbmV3IGFjdGl2aXR5ICIgKyBtU3RhcnRBY3Rpdml0eSArICIgaW4gbmV3IGd1ZXNzZWQgIiArIG1TdGFydEFjdGl2aXR5LnRhc2spOworICAgIH0KKworICAgIHByaXZhdGUgaW50IGFkanVzdExhdW5jaEZsYWdzVG9Eb2N1bWVudE1vZGUoQWN0aXZpdHlSZWNvcmQgciwgYm9vbGVhbiBsYXVuY2hTaW5nbGVJbnN0YW5jZSwKKyAgICAgICAgICAgIGJvb2xlYW4gbGF1bmNoU2luZ2xlVGFzaywgaW50IGxhdW5jaEZsYWdzKSB7CisgICAgICAgIGlmICgobGF1bmNoRmxhZ3MgJiBJbnRlbnQuRkxBR19BQ1RJVklUWV9ORVdfRE9DVU1FTlQpICE9IDAgJiYKKyAgICAgICAgICAgICAgICAobGF1bmNoU2luZ2xlSW5zdGFuY2UgfHwgbGF1bmNoU2luZ2xlVGFzaykpIHsKKyAgICAgICAgICAgIC8vIFdlIGhhdmUgYSBjb25mbGljdCBiZXR3ZWVuIHRoZSBJbnRlbnQgYW5kIHRoZSBBY3Rpdml0eSBtYW5pZmVzdCwgbWFuaWZlc3Qgd2lucy4KKyAgICAgICAgICAgIFNsb2cuaShUQUcsICJJZ25vcmluZyBGTEFHX0FDVElWSVRZX05FV19ET0NVTUVOVCwgbGF1bmNoTW9kZSBpcyAiICsKKyAgICAgICAgICAgICAgICAgICAgIlwic2luZ2xlSW5zdGFuY2VcIiBvciBcInNpbmdsZVRhc2tcIiIpOworICAgICAgICAgICAgbGF1bmNoRmxhZ3MgJj0KKyAgICAgICAgICAgICAgICAgICAgfihJbnRlbnQuRkxBR19BQ1RJVklUWV9ORVdfRE9DVU1FTlQgfCBGTEFHX0FDVElWSVRZX01VTFRJUExFX1RBU0spOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3dpdGNoIChyLmluZm8uZG9jdW1lbnRMYXVuY2hNb2RlKSB7CisgICAgICAgICAgICAgICAgY2FzZSBBY3Rpdml0eUluZm8uRE9DVU1FTlRfTEFVTkNIX05PTkU6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQWN0aXZpdHlJbmZvLkRPQ1VNRU5UX0xBVU5DSF9JTlRPX0VYSVNUSU5HOgorICAgICAgICAgICAgICAgICAgICBsYXVuY2hGbGFncyB8PSBJbnRlbnQuRkxBR19BQ1RJVklUWV9ORVdfRE9DVU1FTlQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQWN0aXZpdHlJbmZvLkRPQ1VNRU5UX0xBVU5DSF9BTFdBWVM6CisgICAgICAgICAgICAgICAgICAgIGxhdW5jaEZsYWdzIHw9IEludGVudC5GTEFHX0FDVElWSVRZX05FV19ET0NVTUVOVDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBBY3Rpdml0eUluZm8uRE9DVU1FTlRfTEFVTkNIX05FVkVSOgorICAgICAgICAgICAgICAgICAgICBsYXVuY2hGbGFncyAmPSB+RkxBR19BQ1RJVklUWV9NVUxUSVBMRV9UQVNLOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbGF1bmNoRmxhZ3M7CisgICAgfQorCisgICAgZmluYWwgdm9pZCBkb1BlbmRpbmdBY3Rpdml0eUxhdW5jaGVzTG9ja2VkKGJvb2xlYW4gZG9SZXN1bWUpIHsKKyAgICAgICAgd2hpbGUgKCFtUGVuZGluZ0FjdGl2aXR5TGF1bmNoZXMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBQZW5kaW5nQWN0aXZpdHlMYXVuY2ggcGFsID0gbVBlbmRpbmdBY3Rpdml0eUxhdW5jaGVzLnJlbW92ZSgwKTsKKworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBzdGFydEFjdGl2aXR5VW5jaGVja2VkKHBhbC5yLCBwYWwuc291cmNlUmVjb3JkLCBudWxsLCBudWxsLCBwYWwuc3RhcnRGbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvUmVzdW1lICYmIG1QZW5kaW5nQWN0aXZpdHlMYXVuY2hlcy5pc0VtcHR5KCksIG51bGwsIG51bGwpOworICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBTbG9nLmUoVEFHLCAiRXhjZXB0aW9uIGR1cmluZyBwZW5kaW5nIGFjdGl2aXR5IGxhdW5jaCBwYWw9IiArIHBhbCwgZSk7CisgICAgICAgICAgICAgICAgcGFsLnNlbmRFcnJvclJlc3VsdChlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIEFjdGl2aXR5U3RhY2sgY29tcHV0ZVN0YWNrRm9jdXMoQWN0aXZpdHlSZWNvcmQgciwgYm9vbGVhbiBuZXdUYXNrLCBSZWN0IGJvdW5kcywKKyAgICAgICAgICAgIGludCBsYXVuY2hGbGFncywgQWN0aXZpdHlPcHRpb25zIGFPcHRpb25zKSB7CisgICAgICAgIGZpbmFsIFRhc2tSZWNvcmQgdGFzayA9IHIudGFzazsKKyAgICAgICAgaWYgKCEoci5pc0FwcGxpY2F0aW9uQWN0aXZpdHkoKSB8fCAodGFzayAhPSBudWxsICYmIHRhc2suaXNBcHBsaWNhdGlvblRhc2soKSkpKSB7CisgICAgICAgICAgICByZXR1cm4gbVN1cGVydmlzb3IubUhvbWVTdGFjazsKKyAgICAgICAgfQorCisgICAgICAgIEFjdGl2aXR5U3RhY2sgc3RhY2sgPSBnZXRMYXVuY2hTdGFjayhyLCBsYXVuY2hGbGFncywgdGFzaywgYU9wdGlvbnMsIHRydWUpOworICAgICAgICBpZiAoc3RhY2sgIT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIHN0YWNrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRhc2sgIT0gbnVsbCAmJiB0YXNrLnN0YWNrICE9IG51bGwpIHsKKyAgICAgICAgICAgIHN0YWNrID0gdGFzay5zdGFjazsKKyAgICAgICAgICAgIGlmIChzdGFjay5pc09uSG9tZURpc3BsYXkoKSkgeworICAgICAgICAgICAgICAgIGlmIChtU3VwZXJ2aXNvci5tRm9jdXNlZFN0YWNrICE9IHN0YWNrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChERUJVR19GT0NVUyB8fCBERUJVR19TVEFDSykgU2xvZy5kKFRBR19GT0NVUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tcHV0ZVN0YWNrRm9jdXM6IFNldHRpbmcgIiArICJmb2N1c2VkIHN0YWNrIHRvIHI9IiArIHIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiB0YXNrPSIgKyB0YXNrKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUdfRk9DVVMgfHwgREVCVUdfU1RBQ0spIFNsb2cuZChUQUdfRk9DVVMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbXB1dGVTdGFja0ZvY3VzOiBGb2N1c2VkIHN0YWNrIGFscmVhZHk9IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBtU3VwZXJ2aXNvci5tRm9jdXNlZFN0YWNrKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gc3RhY2s7CisgICAgICAgIH0KKworICAgICAgICBmaW5hbCBBY3Rpdml0eVN0YWNrU3VwZXJ2aXNvci5BY3Rpdml0eUNvbnRhaW5lciBjb250YWluZXIgPSByLm1Jbml0aWFsQWN0aXZpdHlDb250YWluZXI7CisgICAgICAgIGlmIChjb250YWluZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgLy8gVGhlIGZpcnN0IHRpbWUgcHV0IGl0IG9uIHRoZSBkZXNpcmVkIHN0YWNrLCBhZnRlciB0aGlzIHB1dCBvbiB0YXNrIHN0YWNrLgorICAgICAgICAgICAgci5tSW5pdGlhbEFjdGl2aXR5Q29udGFpbmVyID0gbnVsbDsKKyAgICAgICAgICAgIHJldHVybiBjb250YWluZXIubVN0YWNrOworICAgICAgICB9CisKKyAgICAgICAgLy8gVGhlIGZ1bGxzY3JlZW4gc3RhY2sgY2FuIGNvbnRhaW4gYW55IHRhc2sgcmVnYXJkbGVzcyBvZiBpZiB0aGUgdGFzayBpcyByZXNpemVhYmxlCisgICAgICAgIC8vIG9yIG5vdC4gU28sIHdlIGxldCB0aGUgdGFzayBnbyBpbiB0aGUgZnVsbHNjcmVlbiB0YXNrIGlmIGl0IGlzIHRoZSBmb2N1cyBzdGFjay4KKyAgICAgICAgLy8gSWYgdGhlIGZyZWVmb3JtIG9yIGRvY2tlZCBzdGFjayBoYXMgZm9jdXMsIGFuZCB0aGUgYWN0aXZpdHkgdG8gYmUgbGF1bmNoZWQgaXMgcmVzaXplYWJsZSwKKyAgICAgICAgLy8gd2UgY2FuIGFsc28gcHV0IGl0IGluIHRoZSBmb2N1c2VkIHN0YWNrLgorICAgICAgICBmaW5hbCBpbnQgZm9jdXNlZFN0YWNrSWQgPSBtU3VwZXJ2aXNvci5tRm9jdXNlZFN0YWNrLm1TdGFja0lkOworICAgICAgICBmaW5hbCBib29sZWFuIGNhblVzZUZvY3VzZWRTdGFjayA9CisgICAgICAgICAgICAgICAgZm9jdXNlZFN0YWNrSWQgPT0gRlVMTFNDUkVFTl9XT1JLU1BBQ0VfU1RBQ0tfSUQKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IGZvY3VzZWRTdGFja0lkID09IERPQ0tFRF9TVEFDS19JRAorICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGZvY3VzZWRTdGFja0lkID09IEZSRUVGT1JNX1dPUktTUEFDRV9TVEFDS19JRCAmJiByLmlzUmVzaXplYWJsZSgpKTsKKyAgICAgICAgaWYgKGNhblVzZUZvY3VzZWRTdGFjayAmJiAoIW5ld1Rhc2sKKyAgICAgICAgICAgICAgICB8fCBtU3VwZXJ2aXNvci5tRm9jdXNlZFN0YWNrLm1BY3Rpdml0eUNvbnRhaW5lci5pc0VsaWdpYmxlRm9yTmV3VGFza3MoKSkpIHsKKyAgICAgICAgICAgIGlmIChERUJVR19GT0NVUyB8fCBERUJVR19TVEFDSykgU2xvZy5kKFRBR19GT0NVUywKKyAgICAgICAgICAgICAgICAgICAgImNvbXB1dGVTdGFja0ZvY3VzOiBIYXZlIGEgZm9jdXNlZCBzdGFjaz0iICsgbVN1cGVydmlzb3IubUZvY3VzZWRTdGFjayk7CisgICAgICAgICAgICByZXR1cm4gbVN1cGVydmlzb3IubUZvY3VzZWRTdGFjazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFdlIGZpcnN0IHRyeSB0byBwdXQgdGhlIHRhc2sgaW4gdGhlIGZpcnN0IGR5bmFtaWMgc3RhY2suCisgICAgICAgIGZpbmFsIEFycmF5TGlzdDxBY3Rpdml0eVN0YWNrPiBob21lRGlzcGxheVN0YWNrcyA9IG1TdXBlcnZpc29yLm1Ib21lU3RhY2subVN0YWNrczsKKyAgICAgICAgZm9yIChpbnQgc3RhY2tOZHggPSBob21lRGlzcGxheVN0YWNrcy5zaXplKCkgLSAxOyBzdGFja05keCA+PSAwOyAtLXN0YWNrTmR4KSB7CisgICAgICAgICAgICBzdGFjayA9IGhvbWVEaXNwbGF5U3RhY2tzLmdldChzdGFja05keCk7CisgICAgICAgICAgICBpZiAoIUFjdGl2aXR5TWFuYWdlci5TdGFja0lkLmlzU3RhdGljU3RhY2soc3RhY2subVN0YWNrSWQpKSB7CisgICAgICAgICAgICAgICAgaWYgKERFQlVHX0ZPQ1VTIHx8IERFQlVHX1NUQUNLKSBTbG9nLmQoVEFHX0ZPQ1VTLAorICAgICAgICAgICAgICAgICAgICAgICAgImNvbXB1dGVTdGFja0ZvY3VzOiBTZXR0aW5nIGZvY3VzZWQgc3RhY2s9IiArIHN0YWNrKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhY2s7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBzdWl0YWJsZSBkeW5hbWljIHN0YWNrIHRoZW4gd2UgZmlndXJlIG91dCB3aGljaCBzdGF0aWMgc3RhY2sgdG8gdXNlLgorICAgICAgICBmaW5hbCBpbnQgc3RhY2tJZCA9IHRhc2sgIT0gbnVsbCA/IHRhc2suZ2V0TGF1bmNoU3RhY2tJZCgpIDoKKyAgICAgICAgICAgICAgICBib3VuZHMgIT0gbnVsbCA/IEZSRUVGT1JNX1dPUktTUEFDRV9TVEFDS19JRCA6CisgICAgICAgICAgICAgICAgICAgICAgICBGVUxMU0NSRUVOX1dPUktTUEFDRV9TVEFDS19JRDsKKyAgICAgICAgc3RhY2sgPSBtU3VwZXJ2aXNvci5nZXRTdGFjayhzdGFja0lkLCBDUkVBVEVfSUZfTkVFREVELCBPTl9UT1ApOworICAgICAgICBpZiAoREVCVUdfRk9DVVMgfHwgREVCVUdfU1RBQ0spIFNsb2cuZChUQUdfRk9DVVMsICJjb21wdXRlU3RhY2tGb2N1czogTmV3IHN0YWNrIHI9IgorICAgICAgICAgICAgICAgICsgciArICIgc3RhY2tJZD0iICsgc3RhY2subVN0YWNrSWQpOworICAgICAgICByZXR1cm4gc3RhY2s7CisgICAgfQorCisgICAgcHJpdmF0ZSBBY3Rpdml0eVN0YWNrIGdldExhdW5jaFN0YWNrKEFjdGl2aXR5UmVjb3JkIHIsIGludCBsYXVuY2hGbGFncywgVGFza1JlY29yZCB0YXNrLAorICAgICAgICAgICAgQWN0aXZpdHlPcHRpb25zIGFPcHRpb25zLCBib29sZWFuIGxhdW5jaFRvU2lkZUFsbG93ZWQpIHsKKyAgICAgICAgZmluYWwgaW50IGxhdW5jaFN0YWNrSWQgPQorICAgICAgICAgICAgICAgIChhT3B0aW9ucyAhPSBudWxsKSA/IGFPcHRpb25zLmdldExhdW5jaFN0YWNrSWQoKSA6IElOVkFMSURfU1RBQ0tfSUQ7CisKKyAgICAgICAgaWYgKGlzVmFsaWRMYXVuY2hTdGFja0lkKGxhdW5jaFN0YWNrSWQsIHIpKSB7CisgICAgICAgICAgICByZXR1cm4gbVN1cGVydmlzb3IuZ2V0U3RhY2sobGF1bmNoU3RhY2tJZCwgQ1JFQVRFX0lGX05FRURFRCwgT05fVE9QKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghbGF1bmNoVG9TaWRlQWxsb3dlZCB8fCAobGF1bmNoRmxhZ3MgJiBGTEFHX0FDVElWSVRZX0xBVU5DSF9UT19TSURFKSA9PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRoZSBwYXJlbnQgYWN0aXZpdHkgZG9lc24ndCB3YW50IHRvIGxhdW5jaCB0aGUgYWN0aXZpdHkgb24gdG9wIG9mIGl0c2VsZiwgYnV0CisgICAgICAgIC8vIGluc3RlYWQgdHJpZXMgdG8gcHV0IGl0IG9udG8gb3RoZXIgc2lkZSBpbiBzaWRlLWJ5LXNpZGUgbW9kZS4KKyAgICAgICAgZmluYWwgQWN0aXZpdHlTdGFjayBwYXJlbnRTdGFjayA9IHRhc2sgIT0gbnVsbCA/IHRhc2suc3RhY2sKKyAgICAgICAgICAgICAgICA6IHIubUluaXRpYWxBY3Rpdml0eUNvbnRhaW5lciAhPSBudWxsID8gci5tSW5pdGlhbEFjdGl2aXR5Q29udGFpbmVyLm1TdGFjaworICAgICAgICAgICAgICAgIDogbVN1cGVydmlzb3IubUZvY3VzZWRTdGFjazsKKyAgICAgICAgaWYgKHBhcmVudFN0YWNrICE9IG51bGwgJiYgcGFyZW50U3RhY2subVN0YWNrSWQgPT0gRE9DS0VEX1NUQUNLX0lEKSB7CisgICAgICAgICAgICAvLyBJZiBwYXJlbnQgd2FzIGluIGRvY2tlZCBzdGFjaywgdGhlIG5hdHVyYWwgcGxhY2UgdG8gbGF1bmNoIGFub3RoZXIgYWN0aXZpdHkKKyAgICAgICAgICAgIC8vIHdpbGwgYmUgZnVsbHNjcmVlbiwgc28gaXQgY2FuIGFwcGVhciBhbG9uZ3NpZGUgdGhlIGRvY2tlZCB3aW5kb3cuCisgICAgICAgICAgICByZXR1cm4gbVN1cGVydmlzb3IuZ2V0U3RhY2soRlVMTFNDUkVFTl9XT1JLU1BBQ0VfU1RBQ0tfSUQsIENSRUFURV9JRl9ORUVERUQsIE9OX1RPUCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBJZiB0aGUgcGFyZW50IGlzIG5vdCBpbiB0aGUgZG9ja2VkIHN0YWNrLCB3ZSBjaGVjayBpZiB0aGVyZSBpcyBkb2NrZWQgd2luZG93CisgICAgICAgICAgICAvLyBhbmQgaWYgeWVzLCB3ZSB3aWxsIGxhdW5jaCBpbnRvIHRoYXQgc3RhY2suIElmIG5vdCwgd2UganVzdCBwdXQgdGhlIG5ldworICAgICAgICAgICAgLy8gYWN0aXZpdHkgaW50byBwYXJlbnQncyBzdGFjaywgYmVjYXVzZSB3ZSBjYW4ndCBmaW5kIGEgYmV0dGVyIHBsYWNlLgorICAgICAgICAgICAgZmluYWwgQWN0aXZpdHlTdGFjayBzdGFjayA9IG1TdXBlcnZpc29yLmdldFN0YWNrKERPQ0tFRF9TVEFDS19JRCk7CisgICAgICAgICAgICBpZiAoc3RhY2sgIT0gbnVsbCAmJiAhc3RhY2suaXNTdGFja1Zpc2libGVMb2NrZWQoKSkgeworICAgICAgICAgICAgICAgIC8vIFRoZXJlIGlzIGEgZG9ja2VkIHN0YWNrLCBidXQgaXQgaXNuJ3QgdmlzaWJsZSwgc28gd2UgY2FuJ3QgbGF1bmNoIGludG8gdGhhdC4KKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YWNrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBib29sZWFuIGlzVmFsaWRMYXVuY2hTdGFja0lkKGludCBzdGFja0lkLCBBY3Rpdml0eVJlY29yZCByKSB7CisgICAgICAgIGlmIChzdGFja0lkID09IElOVkFMSURfU1RBQ0tfSUQgfHwgc3RhY2tJZCA9PSBIT01FX1NUQUNLX0lECisgICAgICAgICAgICAgICAgfHwgIVN0YWNrSWQuaXNTdGF0aWNTdGFjayhzdGFja0lkKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgZmluYWwgYm9vbGVhbiByZXNpemVhYmxlID0gci5pc1Jlc2l6ZWFibGUoKSB8fCBtU2VydmljZS5tRm9yY2VSZXNpemFibGVBY3Rpdml0aWVzOworCisgICAgICAgIGlmIChzdGFja0lkICE9IEZVTExTQ1JFRU5fV09SS1NQQUNFX1NUQUNLX0lEICYmICFyZXNpemVhYmxlKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3RhY2tJZCA9PSBGUkVFRk9STV9XT1JLU1BBQ0VfU1RBQ0tfSUQgJiYgIW1TZXJ2aWNlLm1TdXBwb3J0c0ZyZWVmb3JtV2luZG93TWFuYWdlbWVudCkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgZmluYWwgYm9vbGVhbiBzdXBwb3J0c1BpcCA9IG1TZXJ2aWNlLm1TdXBwb3J0c1BpY3R1cmVJblBpY3R1cmUKKyAgICAgICAgICAgICAgICAmJiAoci5zdXBwb3J0c1BpY3R1cmVJblBpY3R1cmUoKSB8fCBtU2VydmljZS5tRm9yY2VSZXNpemFibGVBY3Rpdml0aWVzKTsKKyAgICAgICAgaWYgKHN0YWNrSWQgPT0gUElOTkVEX1NUQUNLX0lEICYmICFzdXBwb3J0c1BpcCkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIFJlY3QgZ2V0T3ZlcnJpZGVCb3VuZHMoQWN0aXZpdHlSZWNvcmQgciwgQWN0aXZpdHlPcHRpb25zIG9wdGlvbnMsIFRhc2tSZWNvcmQgaW5UYXNrKSB7CisgICAgICAgIFJlY3QgbmV3Qm91bmRzID0gbnVsbDsKKyAgICAgICAgaWYgKG9wdGlvbnMgIT0gbnVsbCAmJiAoci5pc1Jlc2l6ZWFibGUoKSB8fCAoaW5UYXNrICE9IG51bGwgJiYgaW5UYXNrLm1SZXNpemVhYmxlKSkpIHsKKyAgICAgICAgICAgIGlmIChtU3VwZXJ2aXNvci5jYW5Vc2VBY3Rpdml0eU9wdGlvbnNMYXVuY2hCb3VuZHMoCisgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMsIG9wdGlvbnMuZ2V0TGF1bmNoU3RhY2tJZCgpKSkgeworICAgICAgICAgICAgICAgIG5ld0JvdW5kcyA9IG9wdGlvbnMuZ2V0TGF1bmNoQm91bmRzKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5ld0JvdW5kczsKKyAgICB9CisKKyAgICB2b2lkIHNldFdpbmRvd01hbmFnZXIoV2luZG93TWFuYWdlclNlcnZpY2Ugd20pIHsKKyAgICAgICAgbVdpbmRvd01hbmFnZXIgPSB3bTsKKyAgICB9CisKKyAgICB2b2lkIHJlbW92ZVBlbmRpbmdBY3Rpdml0eUxhdW5jaGVzTG9ja2VkKEFjdGl2aXR5U3RhY2sgc3RhY2spIHsKKyAgICAgICAgZm9yIChpbnQgcGFsTmR4ID0gbVBlbmRpbmdBY3Rpdml0eUxhdW5jaGVzLnNpemUoKSAtIDE7IHBhbE5keCA+PSAwOyAtLXBhbE5keCkgeworICAgICAgICAgICAgUGVuZGluZ0FjdGl2aXR5TGF1bmNoIHBhbCA9IG1QZW5kaW5nQWN0aXZpdHlMYXVuY2hlcy5nZXQocGFsTmR4KTsKKyAgICAgICAgICAgIGlmIChwYWwuc3RhY2sgPT0gc3RhY2spIHsKKyAgICAgICAgICAgICAgICBtUGVuZGluZ0FjdGl2aXR5TGF1bmNoZXMucmVtb3ZlKHBhbE5keCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL0JhdHRlcnlTdGF0c1NlcnZpY2UuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vQmF0dGVyeVN0YXRzU2VydmljZS5qYXZhCmluZGV4IGY2NGI4MDMuLjgyODYyZTggMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vQmF0dGVyeVN0YXRzU2VydmljZS5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vQmF0dGVyeVN0YXRzU2VydmljZS5qYXZhCkBAIC0xMTE0LDcgKzExMTQsNyBAQAogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIE5vdCBhbiBvcHRpb24sIGxhc3QgYXJndW1lbnQgbXVzdCBiZSBhIHBhY2thZ2UgbmFtZS4KICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcVVpZCA9IG1Db250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCkuZ2V0UGFja2FnZVVpZChhcmcsCisgICAgICAgICAgICAgICAgICAgICAgICByZXFVaWQgPSBtQ29udGV4dC5nZXRQYWNrYWdlTWFuYWdlcigpLmdldFBhY2thZ2VVaWRBc1VzZXIoYXJnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VySGFuZGxlLmdldENhbGxpbmdVc2VySWQoKSk7CiAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFBhY2thZ2VNYW5hZ2VyLk5hbWVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBwdy5wcmludGxuKCJVbmtub3duIHBhY2thZ2U6ICIgKyBhcmcpOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9SZXNpemVEb2NrZWRTdGFja1RpbWVvdXQuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vUmVzaXplRG9ja2VkU3RhY2tUaW1lb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmYzOTU4OQotLS0gL2Rldi9udWxsCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vUmVzaXplRG9ja2VkU3RhY2tUaW1lb3V0LmphdmEKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQuc2VydmVyLmFtOworCitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0OworaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKKworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlTdGFja1N1cGVydmlzb3IuUFJFU0VSVkVfV0lORE9XUzsKKworLyoqCisgKiBXaGVuIHJlc2l6aW5nIHRoZSBkb2NrZWQgc3RhY2ssIGEgY2FsbGVyIGNhbiB0ZW1wb3JhcmlseSBzdXBwbHkgdGFzayBib3VuZHMgdGhhdCBhcmUgZGlmZmVyZW50CisgKiBmcm9tIHRoZSBzdGFjayBib3VuZHMuIEluIG9yZGVyIHRvIHJldHVybiB0byBhIHNhbmUgc3RhdGUgaWYgdGhlIGNhbGxlciBjcmFzaGVzIG9yIGhhcyBhIGJ1ZywKKyAqIHRoaXMgY2xhc3MgbWFuYWdlcyB0aGlzIGN5Y2xlLgorICovCitjbGFzcyBSZXNpemVEb2NrZWRTdGFja1RpbWVvdXQgeworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBUSU1FT1VUX01TID0gMTAgKiAxMDAwOworICAgIHByaXZhdGUgZmluYWwgQWN0aXZpdHlNYW5hZ2VyU2VydmljZSBtU2VydmljZTsKKyAgICBwcml2YXRlIGZpbmFsIEFjdGl2aXR5U3RhY2tTdXBlcnZpc29yIG1TdXBlcnZpc29yOworICAgIHByaXZhdGUgZmluYWwgSGFuZGxlciBtSGFuZGxlcjsKKyAgICBwcml2YXRlIGZpbmFsIFJlY3QgbUN1cnJlbnREb2NrZWRCb3VuZHMgPSBuZXcgUmVjdCgpOworCisgICAgcHJpdmF0ZSBmaW5hbCBSdW5uYWJsZSBtVGltZW91dFJ1bm5hYmxlID0gbmV3IFJ1bm5hYmxlKCkgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgc3luY2hyb25pemVkIChtU2VydmljZSkgeworICAgICAgICAgICAgICAgIG1TdXBlcnZpc29yLnJlc2l6ZURvY2tlZFN0YWNrTG9ja2VkKG1DdXJyZW50RG9ja2VkQm91bmRzLCBudWxsLCBudWxsLCBudWxsLCBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgUFJFU0VSVkVfV0lORE9XUyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCisgICAgUmVzaXplRG9ja2VkU3RhY2tUaW1lb3V0KEFjdGl2aXR5TWFuYWdlclNlcnZpY2Ugc2VydmljZSwgQWN0aXZpdHlTdGFja1N1cGVydmlzb3Igc3VwZXJ2aXNvciwKKyAgICAgICAgICAgIEhhbmRsZXIgaGFuZGxlcikgeworICAgICAgICBtU2VydmljZSA9IHNlcnZpY2U7CisgICAgICAgIG1TdXBlcnZpc29yID0gc3VwZXJ2aXNvcjsKKyAgICAgICAgbUhhbmRsZXIgPSBoYW5kbGVyOworICAgIH0KKworICAgIHZvaWQgbm90aWZ5UmVzaXppbmcoUmVjdCBkb2NrZWRCb3VuZHMsIGJvb2xlYW4gaGFzVGVtcEJvdW5kcykgeworICAgICAgICBtSGFuZGxlci5yZW1vdmVDYWxsYmFja3MobVRpbWVvdXRSdW5uYWJsZSk7CisgICAgICAgIGlmICghaGFzVGVtcEJvdW5kcykgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1DdXJyZW50RG9ja2VkQm91bmRzLnNldChkb2NrZWRCb3VuZHMpOworICAgICAgICBtSGFuZGxlci5wb3N0RGVsYXllZChtVGltZW91dFJ1bm5hYmxlLCBUSU1FT1VUX01TKTsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vVGFza1JlY29yZC5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9UYXNrUmVjb3JkLmphdmEKaW5kZXggNWVlOWVlYS4uYzk3ZDA5YyAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9UYXNrUmVjb3JkLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9UYXNrUmVjb3JkLmphdmEKQEAgLTIzLDYgKzIzLDcgQEAKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlN0YWNrSWQuUElOTkVEX1NUQUNLX0lEOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQuSW50ZW50LkZMQUdfQUNUSVZJVFlfTkVXX0RPQ1VNRU5UOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQuSW50ZW50LkZMQUdfQUNUSVZJVFlfUkVUQUlOX0lOX1JFQ0VOVFM7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5wbS5BY3Rpdml0eUluZm8uRkxBR19SRVNJWkVBQkxFOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQucG0uQWN0aXZpdHlJbmZvLkxPQ0tfVEFTS19MQVVOQ0hfTU9ERV9BTFdBWVM7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5wbS5BY3Rpdml0eUluZm8uTE9DS19UQVNLX0xBVU5DSF9NT0RFX0RFRkFVTFQ7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5wbS5BY3Rpdml0eUluZm8uTE9DS19UQVNLX0xBVU5DSF9NT0RFX0lGX1dISVRFTElTVEVEOwpAQCAtNDQxLDcgKzQ0Miw3IEBACiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBhdXRvUmVtb3ZlUmVjZW50cyA9IGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIG1SZXNpemVhYmxlID0gaW5mby5yZXNpemVhYmxlIHx8IG1TZXJ2aWNlLm1Gb3JjZVJlc2l6YWJsZUFjdGl2aXRpZXM7CisgICAgICAgIG1SZXNpemVhYmxlID0gKGluZm8uZmxhZ3MgJiBGTEFHX1JFU0laRUFCTEUpICE9IDAgfHwgbVNlcnZpY2UubUZvcmNlUmVzaXphYmxlQWN0aXZpdGllczsKICAgICAgICAgbUxvY2tUYXNrTW9kZSA9IGluZm8ubG9ja1Rhc2tMYXVuY2hNb2RlOwogICAgICAgICBtUHJpdmlsZWdlZCA9IChpbmZvLmFwcGxpY2F0aW9uSW5mby5wcml2YXRlRmxhZ3MgJiBQUklWQVRFX0ZMQUdfUFJJVklMRUdFRCkgIT0gMDsKICAgICAgICAgc2V0TG9ja1Rhc2tBdXRoKCk7CkBAIC02OTcsNyArNjk4LDcgQEAKICAgICAgICAgaWYgKG1BY3Rpdml0aWVzLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgdGFza1R5cGUgPSByLm1BY3Rpdml0eVR5cGU7CiAgICAgICAgICAgICBpZiAodGFza1R5cGUgPT0gSE9NRV9BQ1RJVklUWV9UWVBFICYmIG1TZXJ2aWNlLm1Gb3JjZVJlc2l6YWJsZUFjdGl2aXRpZXMpIHsKLSAgICAgICAgICAgICAgICBtUmVzaXplYWJsZSA9IHIuaW5mby5yZXNpemVhYmxlOworICAgICAgICAgICAgICAgIG1SZXNpemVhYmxlID0gci5pc1Jlc2l6ZWFibGUoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlzUGVyc2lzdGFibGUgPSByLmlzUGVyc2lzdGFibGUoKTsKICAgICAgICAgICAgIG1DYWxsaW5nVWlkID0gci5sYXVuY2hlZEZyb21VaWQ7CkBAIC0xMzIxLDcgKzEzMjIsMTIgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHZvaWQgcmVwb3J0UGljdHVyZUluUGljdHVyZU1vZGVDaGFuZ2UoKSB7CisgICAgdm9pZCByZXBvcnRQaWN0dXJlSW5QaWN0dXJlTW9kZUNoYW5nZUlmTmVlZGVkKEFjdGl2aXR5U3RhY2sgcHJldlN0YWNrKSB7CisgICAgICAgIGlmIChwcmV2U3RhY2sgPT0gbnVsbCB8fCBwcmV2U3RhY2sgPT0gc3RhY2sKKyAgICAgICAgICAgICAgICB8fCAocHJldlN0YWNrLm1TdGFja0lkICE9IFBJTk5FRF9TVEFDS19JRCAmJiBzdGFjay5tU3RhY2tJZCAhPSBQSU5ORURfU1RBQ0tfSUQpKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwogICAgICAgICBmb3IgKGludCBpID0gbUFjdGl2aXRpZXMuc2l6ZSgpIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgICAgICAgIGZpbmFsIEFjdGl2aXR5UmVjb3JkIHIgPSBtQWN0aXZpdGllcy5nZXQoaSk7CiAgICAgICAgICAgICBpZiAoci5hcHAgIT0gbnVsbCAmJiByLmFwcC50aHJlYWQgIT0gbnVsbCkgewpAQCAtMTM5NCw2ICsxNDAwLDEyIEBACiAgICAgICAgIHJldHVybiBtTGFzdE5vbkZ1bGxzY3JlZW5Cb3VuZHM7CiAgICAgfQogCisgICAgYm9vbGVhbiBjYW5NYXRjaFJvb3RBZmZpbml0eSgpIHsKKyAgICAgICAgLy8gV2UgZG9uJ3QgYWxsb3cgcm9vdCBhZmZpbml0eSBtYXRjaGluZyBvbiB0aGUgcGlubmVkIHN0YWNrIGFzIG5vIG90aGVyIHRhc2sgc2hvdWxkCisgICAgICAgIC8vIGJlIGxhdW5jaGluZyBpbiBpdCBiYXNlZCBvbiBhZmZpbml0eS4KKyAgICAgICAgcmV0dXJuIHJvb3RBZmZpbml0eSAhPSBudWxsICYmIChzdGFjayA9PSBudWxsIHx8IHN0YWNrLm1TdGFja0lkICE9IFBJTk5FRF9TVEFDS19JRCk7CisgICAgfQorCiAgICAgdm9pZCBkdW1wKFByaW50V3JpdGVyIHB3LCBTdHJpbmcgcHJlZml4KSB7CiAgICAgICAgIHB3LnByaW50KHByZWZpeCk7IHB3LnByaW50KCJ1c2VySWQ9Iik7IHB3LnByaW50KHVzZXJJZCk7CiAgICAgICAgICAgICAgICAgcHcucHJpbnQoIiBlZmZlY3RpdmVVaWQ9Iik7IFVzZXJIYW5kbGUuZm9ybWF0VWlkKHB3LCBlZmZlY3RpdmVVaWQpOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9Vc2VyQ29udHJvbGxlci5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9Vc2VyQ29udHJvbGxlci5qYXZhCmluZGV4IDYyZTc4YTQuLjcxNzI4NTkgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vVXNlckNvbnRyb2xsZXIuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL1VzZXJDb250cm9sbGVyLmphdmEKQEAgLTIyLDYgKzIyLDcgQEAKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlVTRVJfT1BfRVJST1JfUkVMQVRFRF9VU0VSU19DQU5OT1RfU1RPUDsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlVTRVJfT1BfSVNfQ1VSUkVOVDsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlVTRVJfT1BfU1VDQ0VTUzsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LkNvbnRleHQuS0VZR1VBUkRfU0VSVklDRTsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5vcy5Qcm9jZXNzLlNZU1RFTV9VSUQ7CiBpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eU1hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19NVTsKIGltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5TWFuYWdlckRlYnVnQ29uZmlnLlRBR19BTTsKQEAgLTQzLDYgKzQ0LDcgQEAKIGltcG9ydCBhbmRyb2lkLmFwcC5EaWFsb2c7CiBpbXBvcnQgYW5kcm9pZC5hcHAuSVN0b3BVc2VyQ2FsbGJhY2s7CiBpbXBvcnQgYW5kcm9pZC5hcHAuSVVzZXJTd2l0Y2hPYnNlcnZlcjsKK2ltcG9ydCBhbmRyb2lkLmFwcC5LZXlndWFyZE1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LklJbnRlbnRSZWNlaXZlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwpAQCAtNzMsNiArNzUsNyBAQAogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLlI7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuYW5ub3RhdGlvbnMuR3VhcmRlZEJ5OwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuQXJyYXlVdGlsczsKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC53aWRnZXQuTG9ja1BhdHRlcm5VdGlsczsKIGltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIucG0uVXNlck1hbmFnZXJTZXJ2aWNlOwogCiBpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKQEAgLTIxNSw3ICsyMTgsOCBAQAogCiAgICAgICAgICAgICAgICAgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoSW50ZW50LkFDVElPTl9MT0NLRURfQk9PVF9DT01QTEVURUQsIG51bGwpOwogICAgICAgICAgICAgICAgIGludGVudC5wdXRFeHRyYShJbnRlbnQuRVhUUkFfVVNFUl9IQU5ETEUsIHVzZXJJZCk7Ci0gICAgICAgICAgICAgICAgaW50ZW50LmFkZEZsYWdzKEludGVudC5GTEFHX1JFQ0VJVkVSX05PX0FCT1JUKTsKKyAgICAgICAgICAgICAgICBpbnRlbnQuYWRkRmxhZ3MoSW50ZW50LkZMQUdfUkVDRUlWRVJfTk9fQUJPUlQKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgSW50ZW50LkZMQUdfUkVDRUlWRVJfSU5DTFVERV9CQUNLR1JPVU5EKTsKICAgICAgICAgICAgICAgICBtU2VydmljZS5icm9hZGNhc3RJbnRlbnRMb2NrZWQobnVsbCwgbnVsbCwgaW50ZW50LCBudWxsLCByZXN1bHRUbywgMCwgbnVsbCwgbnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdbXSB7IGFuZHJvaWQuTWFuaWZlc3QucGVybWlzc2lvbi5SRUNFSVZFX0JPT1RfQ09NUExFVEVEIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICBBcHBPcHNNYW5hZ2VyLk9QX05PTkUsIG51bGwsIHRydWUsIGZhbHNlLCBNWV9QSUQsIFNZU1RFTV9VSUQsIHVzZXJJZCk7CkBAIC0yNDUsNiArMjQ5LDcgQEAKICAgICAgICAgICAgICAgICBtSGFuZGxlci5zZW5kTWVzc2FnZShtSGFuZGxlci5vYnRhaW5NZXNzYWdlKFNZU1RFTV9VU0VSX1VOTE9DS19NU0csIHVzZXJJZCwgMCkpOwogCiAgICAgICAgICAgICAgICAgZmluYWwgSW50ZW50IHVubG9ja2VkSW50ZW50ID0gbmV3IEludGVudChJbnRlbnQuQUNUSU9OX1VTRVJfVU5MT0NLRUQpOworICAgICAgICAgICAgICAgIHVubG9ja2VkSW50ZW50LnB1dEV4dHJhKEludGVudC5FWFRSQV9VU0VSX0hBTkRMRSwgdXNlcklkKTsKICAgICAgICAgICAgICAgICB1bmxvY2tlZEludGVudC5hZGRGbGFncygKICAgICAgICAgICAgICAgICAgICAgICAgIEludGVudC5GTEFHX1JFQ0VJVkVSX1JFR0lTVEVSRURfT05MWSB8IEludGVudC5GTEFHX1JFQ0VJVkVSX0ZPUkVHUk9VTkQpOwogICAgICAgICAgICAgICAgIG1TZXJ2aWNlLmJyb2FkY2FzdEludGVudExvY2tlZChudWxsLCBudWxsLCB1bmxvY2tlZEludGVudCwgbnVsbCwgbnVsbCwgMCwgbnVsbCwKQEAgLTMwMiw3ICszMDcsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICsgcmVsYXRlZFVzZXJJZCk7CiAgICAgICAgICAgICAgICAgLy8gV2Ugc3RpbGwgbmVlZCB0byBzdG9wIHRoZSByZXF1ZXN0ZWQgdXNlciBpZiBpdCdzIGEgZm9yY2Ugc3RvcC4KICAgICAgICAgICAgICAgICBpZiAoZm9yY2UpIHsKKyAgICAgICAgICAgICAgICAgICAgU2xvZy5pKFRBRywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRm9yY2Ugc3RvcCB1c2VyICIgKyB1c2VySWQgKyAiLiBSZWxhdGVkIHVzZXJzIHdpbGwgbm90IGJlIHN0b3BwZWQiKTsKICAgICAgICAgICAgICAgICAgICAgc3RvcFNpbmdsZVVzZXJMb2NrZWQodXNlcklkLCBjYWxsYmFjayk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBVU0VSX09QX1NVQ0NFU1M7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHJldHVybiBVU0VSX09QX0VSUk9SX1JFTEFURURfVVNFUlNfQ0FOTk9UX1NUT1A7CiAgICAgICAgICAgICB9CkBAIC00MzAsNiArNDM4LDEwIEBACiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1TZXJ2aWNlKSB7CiAgICAgICAgICAgICAgICAgbVNlcnZpY2UubVN0YWNrU3VwZXJ2aXNvci5yZW1vdmVVc2VyTG9ja2VkKHVzZXJJZCk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBSZW1vdmUgdGhlIHVzZXIgaWYgaXQgaXMgZXBoZW1lcmFsLgorICAgICAgICAgICAgaWYgKGdldFVzZXJJbmZvKHVzZXJJZCkuaXNFcGhlbWVyYWwoKSkgeworICAgICAgICAgICAgICAgIG1Vc2VyTWFuYWdlci5yZW1vdmVVc2VyKHVzZXJJZCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTQ3Niw5ICs0ODgsOSBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIFN0b3BzIHRoZSBndWVzdCB1c2VyIGlmIGl0IGhhcyBnb25lIHRvIHRoZSBiYWNrZ3JvdW5kLgorICAgICAqIFN0b3BzIHRoZSBndWVzdCBvciBlcGhlbWVyYWwgdXNlciBpZiBpdCBoYXMgZ29uZSB0byB0aGUgYmFja2dyb3VuZC4KICAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgc3RvcEd1ZXN0VXNlcklmQmFja2dyb3VuZCgpIHsKKyAgICBwcml2YXRlIHZvaWQgc3RvcEd1ZXN0T3JFcGhlbWVyYWxVc2VySWZCYWNrZ3JvdW5kKCkgewogICAgICAgICBzeW5jaHJvbml6ZWQgKG1TZXJ2aWNlKSB7CiAgICAgICAgICAgICBmaW5hbCBpbnQgbnVtID0gbVVzZXJMcnUuc2l6ZSgpOwogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW07IGkrKykgewpAQCAtNDkwLDcgKzUwMiw3IEBACiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBVc2VySW5mbyB1c2VySW5mbyA9IGdldFVzZXJJbmZvKG9sZFVzZXJJZCk7Ci0gICAgICAgICAgICAgICAgaWYgKHVzZXJJbmZvLmlzR3Vlc3QoKSkgeworICAgICAgICAgICAgICAgIGlmICh1c2VySW5mby5pc0d1ZXN0KCkgfHwgdXNlckluZm8uaXNFcGhlbWVyYWwoKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgdXNlciB0byBiZSBzdG9wcGVkLgogICAgICAgICAgICAgICAgICAgICBzdG9wVXNlcnNMb2NrZWQob2xkVXNlcklkLCB0cnVlLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC05MTYsNyArOTI4LDcgQEAKICAgICAgICAgICAgIG1IYW5kbGVyLnNlbmRNZXNzYWdlKG1IYW5kbGVyLm9idGFpbk1lc3NhZ2UoUkVQT1JUX1VTRVJfU1dJVENIX0NPTVBMRVRFX01TRywKICAgICAgICAgICAgICAgICAgICAgbmV3VXNlcklkLCAwKSk7CiAgICAgICAgIH0KLSAgICAgICAgc3RvcEd1ZXN0VXNlcklmQmFja2dyb3VuZCgpOworICAgICAgICBzdG9wR3Vlc3RPckVwaGVtZXJhbFVzZXJJZkJhY2tncm91bmQoKTsKICAgICAgICAgc3RvcEJhY2tncm91bmRVc2Vyc0lmRW5mb3JjZWQob2xkVXNlcklkKTsKICAgICB9CiAKQEAgLTkyNSw3ICs5MzcsNyBAQAogICAgICAgICBpZiAoaG9tZUluRnJvbnQpIHsKICAgICAgICAgICAgIG1TZXJ2aWNlLnN0YXJ0SG9tZUFjdGl2aXR5TG9ja2VkKG5ld1VzZXJJZCwgIm1vdmVVc2VyVG9Gb3JlZ3JvdW5kIik7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtU2VydmljZS5tU3RhY2tTdXBlcnZpc29yLnJlc3VtZVRvcEFjdGl2aXRpZXNMb2NrZWQoKTsKKyAgICAgICAgICAgIG1TZXJ2aWNlLm1TdGFja1N1cGVydmlzb3IucmVzdW1lRm9jdXNlZFN0YWNrVG9wQWN0aXZpdHlMb2NrZWQoKTsKICAgICAgICAgfQogICAgICAgICBFdmVudExvZ1RhZ3Mud3JpdGVBbVN3aXRjaFVzZXIobmV3VXNlcklkKTsKICAgICAgICAgZ2V0VXNlck1hbmFnZXIoKS5vblVzZXJGb3JlZ3JvdW5kKG5ld1VzZXJJZCk7CkBAIC0xMjIwLDcgKzEyMzIsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgYm9vbGVhbiBpc0N1cnJlbnRVc2VyTG9ja2VkKGludCB1c2VySWQpIHsKLSAgICAgICAgcmV0dXJuIG1DdXJyZW50VXNlcklkID09IHVzZXJJZCB8fCBtVGFyZ2V0VXNlcklkID09IHVzZXJJZDsKKyAgICAgICAgcmV0dXJuIHVzZXJJZCA9PSBnZXRDdXJyZW50T3JUYXJnZXRVc2VySWRMb2NrZWQoKTsKICAgICB9CiAKICAgICBpbnQgc2V0VGFyZ2V0VXNlcklkTG9ja2VkKGludCB0YXJnZXRVc2VySWQpIHsKQEAgLTEyNzcsNiArMTI4OSwyMCBAQAogICAgICAgICByZXR1cm4gbUN1cnJlbnRQcm9maWxlSWRzOwogICAgIH0KIAorICAgIC8qKgorICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgZ2l2ZW4gdXNlciByZXF1aXJlcyBjcmVkZW50aWFsIGVudHJ5IGF0IHRoaXMgdGltZS4gVGhpcyBpcyB1c2VkIHRvCisgICAgICogaW50ZXJjZXB0IGFjdGl2aXR5IGxhdW5jaGVzIGZvciB3b3JrIGFwcHMgd2hlbiB0aGUgV29yayBDaGFsbGVuZ2UgaXMgcHJlc2VudC4KKyAgICAgKi8KKyAgICBib29sZWFuIHNob3VsZENvbmZpcm1DcmVkZW50aWFscyhpbnQgdXNlcklkKSB7CisgICAgICAgIGZpbmFsIFVzZXJJbmZvIHVzZXIgPSBnZXRVc2VySW5mbyh1c2VySWQpOworICAgICAgICBpZiAoIXVzZXIuaXNNYW5hZ2VkUHJvZmlsZSgpIHx8ICFMb2NrUGF0dGVyblV0aWxzLmlzU2VwYXJhdGVXb3JrQ2hhbGxlbmdlRW5hYmxlZCgpKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZmluYWwgS2V5Z3VhcmRNYW5hZ2VyIGttID0gKEtleWd1YXJkTWFuYWdlcikgbVNlcnZpY2UubUNvbnRleHQKKyAgICAgICAgICAgICAgICAuZ2V0U3lzdGVtU2VydmljZShLRVlHVUFSRF9TRVJWSUNFKTsKKyAgICAgICAgcmV0dXJuIGttLmlzRGV2aWNlTG9ja2VkKHVzZXIuaWQpOworICAgIH0KKwogICAgIHZvaWQgZHVtcChQcmludFdyaXRlciBwdywgYm9vbGVhbiBkdW1wQWxsKSB7CiAgICAgICAgIHB3LnByaW50bG4oIiAgbVN0YXJ0ZWRVc2VyczoiKTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtU3RhcnRlZFVzZXJzLnNpemUoKTsgaSsrKSB7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2Nvbm5lY3Rpdml0eS9WcG4uamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvY29ubmVjdGl2aXR5L1Zwbi5qYXZhCmluZGV4IDJiZWEyNzguLjViZDRmOTggMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvY29ubmVjdGl2aXR5L1Zwbi5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvY29ubmVjdGl2aXR5L1Zwbi5qYXZhCkBAIC0zMDksNyArMzA5LDcgQEAKICAgICAgICAgUGFja2FnZU1hbmFnZXIgcG0gPSBtQ29udGV4dC5nZXRQYWNrYWdlTWFuYWdlcigpOwogICAgICAgICBpbnQgcmVzdWx0OwogICAgICAgICB0cnkgewotICAgICAgICAgICAgcmVzdWx0ID0gcG0uZ2V0UGFja2FnZVVpZChhcHAsIHVzZXJIYW5kbGUpOworICAgICAgICAgICAgcmVzdWx0ID0gcG0uZ2V0UGFja2FnZVVpZEFzVXNlcihhcHAsIHVzZXJIYW5kbGUpOwogICAgICAgICB9IGNhdGNoIChOYW1lTm90Rm91bmRFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgcmVzdWx0ID0gLTE7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvaW5wdXQvSW5wdXRNYW5hZ2VyU2VydmljZS5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9pbnB1dC9JbnB1dE1hbmFnZXJTZXJ2aWNlLmphdmEKaW5kZXggNjhiMzgxNy4uZWU4YWFiNiAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9pbnB1dC9JbnB1dE1hbmFnZXJTZXJ2aWNlLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9pbnB1dC9JbnB1dE1hbmFnZXJTZXJ2aWNlLmphdmEKQEAgLTIxNCw2ICsyMTQsNyBAQAogICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIG5hdGl2ZVNldFBvaW50ZXJJY29uU2hhcGUobG9uZyBwdHIsIGludCBpY29uSWQpOwogICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIG5hdGl2ZVJlbG9hZFBvaW50ZXJJY29ucyhsb25nIHB0cik7CiAgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgbmF0aXZlU2V0Q3VzdG9tUG9pbnRlckljb24obG9uZyBwdHIsIFBvaW50ZXJJY29uIGljb24pOworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIG5hdGl2ZVNldFBvaW50ZXJJY29uRGV0YWNoZWQobG9uZyBwdHIsIGJvb2xlYW4gZGV0YWNoZWQpOwogCiAgICAgLy8gSW5wdXQgZXZlbnQgaW5qZWN0aW9uIGNvbnN0YW50cyBkZWZpbmVkIGluIElucHV0RGlzcGF0Y2hlci5oLgogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBJTlBVVF9FVkVOVF9JTkpFQ1RJT05fU1VDQ0VFREVEID0gMDsKQEAgLTk3Nyw3ICs5NzgsNyBAQAogICAgICAgICBmaW5hbCBQYWNrYWdlTWFuYWdlciBwbSA9IG1Db250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCk7CiAgICAgICAgIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KElucHV0TWFuYWdlci5BQ1RJT05fUVVFUllfS0VZQk9BUkRfTEFZT1VUUyk7CiAgICAgICAgIGZvciAoUmVzb2x2ZUluZm8gcmVzb2x2ZUluZm8gOiBwbS5xdWVyeUJyb2FkY2FzdFJlY2VpdmVycyhpbnRlbnQsCi0gICAgICAgICAgICAgICAgUGFja2FnZU1hbmFnZXIuR0VUX01FVEFfREFUQSkpIHsKKyAgICAgICAgICAgICAgICBQYWNrYWdlTWFuYWdlci5HRVRfTUVUQV9EQVRBIHwgUGFja2FnZU1hbmFnZXIuTUFUQ0hfRU5DUllQVElPTl9BV0FSRV9BTkRfVU5BV0FSRSkpIHsKICAgICAgICAgICAgIGZpbmFsIEFjdGl2aXR5SW5mbyBhY3Rpdml0eUluZm8gPSByZXNvbHZlSW5mby5hY3Rpdml0eUluZm87CiAgICAgICAgICAgICBmaW5hbCBpbnQgcHJpb3JpdHkgPSByZXNvbHZlSW5mby5wcmlvcml0eTsKICAgICAgICAgICAgIHZpc2l0S2V5Ym9hcmRMYXlvdXRzSW5QYWNrYWdlKHBtLCBhY3Rpdml0eUluZm8sIG51bGwsIHByaW9yaXR5LCB2aXNpdG9yKTsKQEAgLTk5Miw3ICs5OTMsOCBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBBY3Rpdml0eUluZm8gcmVjZWl2ZXIgPSBwbS5nZXRSZWNlaXZlckluZm8oCiAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQ29tcG9uZW50TmFtZShkLnBhY2thZ2VOYW1lLCBkLnJlY2VpdmVyTmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlTWFuYWdlci5HRVRfTUVUQV9EQVRBKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VNYW5hZ2VyLkdFVF9NRVRBX0RBVEEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQYWNrYWdlTWFuYWdlci5NQVRDSF9FTkNSWVBUSU9OX0FXQVJFX0FORF9VTkFXQVJFKTsKICAgICAgICAgICAgICAgICB2aXNpdEtleWJvYXJkTGF5b3V0c0luUGFja2FnZShwbSwgcmVjZWl2ZXIsIGQua2V5Ym9hcmRMYXlvdXROYW1lLCAwLCB2aXNpdG9yKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKE5hbWVOb3RGb3VuZEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgfQpAQCAtMTI3NCw2ICsxMjc2LDExIEBACiAgICAgICAgIG5hdGl2ZVNldEZvY3VzZWRBcHBsaWNhdGlvbihtUHRyLCBhcHBsaWNhdGlvbik7CiAgICAgfQogCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgc2V0UG9pbnRlckljb25EZXRhY2hlZChib29sZWFuIGRldGFjaGVkKSB7CisgICAgICAgIG5hdGl2ZVNldFBvaW50ZXJJY29uRGV0YWNoZWQobVB0ciwgZGV0YWNoZWQpOworICAgIH0KKwogICAgIHB1YmxpYyB2b2lkIHNldElucHV0RGlzcGF0Y2hNb2RlKGJvb2xlYW4gZW5hYmxlZCwgYm9vbGVhbiBmcm96ZW4pIHsKICAgICAgICAgbmF0aXZlU2V0SW5wdXREaXNwYXRjaE1vZGUobVB0ciwgZW5hYmxlZCwgZnJvemVuKTsKICAgICB9CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2pvYi9Kb2JTY2hlZHVsZXJTZXJ2aWNlLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2pvYi9Kb2JTY2hlZHVsZXJTZXJ2aWNlLmphdmEKaW5kZXggMzA5YmVjOC4uNGVhYmUzNiAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9qb2IvSm9iU2NoZWR1bGVyU2VydmljZS5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvam9iL0pvYlNjaGVkdWxlclNlcnZpY2UuamF2YQpAQCAtMTYsMjAgKzE2LDE0IEBACiAKIHBhY2thZ2UgY29tLmFuZHJvaWQuc2VydmVyLmpvYjsKIAotaW1wb3J0IGphdmEuaW8uRmlsZURlc2NyaXB0b3I7Ci1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQogaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXJOYXRpdmU7CiBpbXBvcnQgYW5kcm9pZC5hcHAuQXBwR2xvYmFsczsKIGltcG9ydCBhbmRyb2lkLmFwcC5JVWlkT2JzZXJ2ZXI7CitpbXBvcnQgYW5kcm9pZC5hcHAuam9iLklKb2JTY2hlZHVsZXI7CiBpbXBvcnQgYW5kcm9pZC5hcHAuam9iLkpvYkluZm87CiBpbXBvcnQgYW5kcm9pZC5hcHAuam9iLkpvYlNjaGVkdWxlcjsKIGltcG9ydCBhbmRyb2lkLmFwcC5qb2IuSm9iU2VydmljZTsKLWltcG9ydCBhbmRyb2lkLmFwcC5qb2IuSUpvYlNjaGVkdWxlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQnJvYWRjYXN0UmVjZWl2ZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWU7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CkBAIC01Myw2ICs0Nyw3IEBACiBpbXBvcnQgYW5kcm9pZC51dGlsLlNwYXJzZUFycmF5OwogCiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuYXBwLklCYXR0ZXJ5U3RhdHM7CitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5BcnJheVV0aWxzOwogaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5EZXZpY2VJZGxlQ29udHJvbGxlcjsKIGltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIuTG9jYWxTZXJ2aWNlczsKIGltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIuam9iLmNvbnRyb2xsZXJzLkFwcElkbGVDb250cm9sbGVyOwpAQCAtNjMsNiArNTgsMTUgQEAKIGltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIuam9iLmNvbnRyb2xsZXJzLlN0YXRlQ29udHJvbGxlcjsKIGltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIuam9iLmNvbnRyb2xsZXJzLlRpbWVDb250cm9sbGVyOwogCitpbXBvcnQgbGliY29yZS51dGlsLkVtcHR5QXJyYXk7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGVEZXNjcmlwdG9yOworaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKwogLyoqCiAgKiBSZXNwb25zaWJsZSBmb3IgdGFraW5nIGpvYnMgcmVwcmVzZW50aW5nIHdvcmsgdG8gYmUgcGVyZm9ybWVkIGJ5IGEgY2xpZW50IGFwcCwgYW5kIGRldGVybWluaW5nCiAgKiBiYXNlZCBvbiB0aGUgY3JpdGVyaWEgc3BlY2lmaWVkIHdoZW4gdGhhdCBqb2Igc2hvdWxkIGJlIHJ1biBhZ2FpbnN0IHRoZSBjbGllbnQgYXBwbGljYXRpb24ncwpAQCAtMTI2LDcgKzEzMCw3IEBACiAgICAgICovCiAgICAgZmluYWwgQXJyYXlMaXN0PEpvYlN0YXR1cz4gbVBlbmRpbmdKb2JzID0gbmV3IEFycmF5TGlzdDw+KCk7CiAKLSAgICBmaW5hbCBBcnJheUxpc3Q8SW50ZWdlcj4gbVN0YXJ0ZWRVc2VycyA9IG5ldyBBcnJheUxpc3Q8PigpOworICAgIGludFtdIG1TdGFydGVkVXNlcnMgPSBFbXB0eUFycmF5LklOVDsKIAogICAgIGZpbmFsIEpvYkhhbmRsZXIgbUhhbmRsZXI7CiAgICAgZmluYWwgSm9iU2NoZWR1bGVyU3R1YiBtSm9iU2NoZWR1bGVyU3R1YjsKQEAgLTE1Nyw4ICsxNjEsOSBAQAogICAgIHByaXZhdGUgZmluYWwgQnJvYWRjYXN0UmVjZWl2ZXIgbUJyb2FkY2FzdFJlY2VpdmVyID0gbmV3IEJyb2FkY2FzdFJlY2VpdmVyKCkgewogICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHVibGljIHZvaWQgb25SZWNlaXZlKENvbnRleHQgY29udGV4dCwgSW50ZW50IGludGVudCkgewotICAgICAgICAgICAgU2xvZy5kKFRBRywgIlJlY2VpZXZlZDogIiArIGludGVudC5nZXRBY3Rpb24oKSk7Ci0gICAgICAgICAgICBpZiAoSW50ZW50LkFDVElPTl9QQUNLQUdFX1JFTU9WRUQuZXF1YWxzKGludGVudC5nZXRBY3Rpb24oKSkpIHsKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyBhY3Rpb24gPSBpbnRlbnQuZ2V0QWN0aW9uKCk7CisgICAgICAgICAgICBTbG9nLmQoVEFHLCAiUmVjZWlldmVkOiAiICsgYWN0aW9uKTsKKyAgICAgICAgICAgIGlmIChJbnRlbnQuQUNUSU9OX1BBQ0tBR0VfUkVNT1ZFRC5lcXVhbHMoYWN0aW9uKSkgewogICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYW4gb3V0cmlnaHQgdW5pbnN0YWxsIHJhdGhlciB0aGFuIHRoZSBmaXJzdCBoYWxmIG9mIGFuCiAgICAgICAgICAgICAgICAgLy8gYXBwIHVwZGF0ZSBzZXF1ZW5jZSwgY2FuY2VsIHRoZSBqb2JzIGFzc29jaWF0ZWQgd2l0aCB0aGUgYXBwLgogICAgICAgICAgICAgICAgIGlmICghaW50ZW50LmdldEJvb2xlYW5FeHRyYShJbnRlbnQuRVhUUkFfUkVQTEFDSU5HLCBmYWxzZSkpIHsKQEAgLTE2OCwxOCArMTczLDIxIEBACiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgY2FuY2VsSm9ic0ZvclVpZCh1aWRSZW1vdmVkLCB0cnVlKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKEludGVudC5BQ1RJT05fVVNFUl9SRU1PVkVELmVxdWFscyhpbnRlbnQuZ2V0QWN0aW9uKCkpKSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKEludGVudC5BQ1RJT05fVVNFUl9SRU1PVkVELmVxdWFscyhhY3Rpb24pKSB7CiAgICAgICAgICAgICAgICAgZmluYWwgaW50IHVzZXJJZCA9IGludGVudC5nZXRJbnRFeHRyYShJbnRlbnQuRVhUUkFfVVNFUl9IQU5ETEUsIDApOwogICAgICAgICAgICAgICAgIGlmIChERUJVRykgewogICAgICAgICAgICAgICAgICAgICBTbG9nLmQoVEFHLCAiUmVtb3Zpbmcgam9icyBmb3IgdXNlcjogIiArIHVzZXJJZCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNhbmNlbEpvYnNGb3JVc2VyKHVzZXJJZCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKFBvd2VyTWFuYWdlci5BQ1RJT05fTElHSFRfREVWSUNFX0lETEVfTU9ERV9DSEFOR0VELmVxdWFscyhpbnRlbnQuZ2V0QWN0aW9uKCkpCi0gICAgICAgICAgICAgICAgICAgIHx8IFBvd2VyTWFuYWdlci5BQ1RJT05fREVWSUNFX0lETEVfTU9ERV9DSEFOR0VELmVxdWFscyhpbnRlbnQuZ2V0QWN0aW9uKCkpKSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKFBvd2VyTWFuYWdlci5BQ1RJT05fTElHSFRfREVWSUNFX0lETEVfTU9ERV9DSEFOR0VELmVxdWFscyhhY3Rpb24pCisgICAgICAgICAgICAgICAgICAgIHx8IFBvd2VyTWFuYWdlci5BQ1RJT05fREVWSUNFX0lETEVfTU9ERV9DSEFOR0VELmVxdWFscyhhY3Rpb24pKSB7CiAgICAgICAgICAgICAgICAgdXBkYXRlSWRsZU1vZGUobVBvd2VyTWFuYWdlciAhPSBudWxsCiAgICAgICAgICAgICAgICAgICAgICAgICA/IChtUG93ZXJNYW5hZ2VyLmlzRGV2aWNlSWRsZU1vZGUoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBtUG93ZXJNYW5hZ2VyLmlzTGlnaHREZXZpY2VJZGxlTW9kZSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgOiBmYWxzZSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKEludGVudC5BQ1RJT05fRVhURVJOQUxfQVBQTElDQVRJT05TX0FWQUlMQUJMRS5lcXVhbHMoYWN0aW9uKSkgeworICAgICAgICAgICAgICAgIC8vIEtpY2sgb2ZmIHBlbmRpbmcgam9icyBmb3IgYW55IGFwcHMgdGhhdCByZS1hcHBlYXJlZAorICAgICAgICAgICAgICAgIG1IYW5kbGVyLm9idGFpbk1lc3NhZ2UoTVNHX0NIRUNLX0pPQikuc2VuZFRvVGFyZ2V0KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9OwpAQCAtMjAxLDE0ICsyMDksMjAgQEAKIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIG9uU3RhcnRVc2VyKGludCB1c2VySGFuZGxlKSB7Ci0gICAgICAgIG1TdGFydGVkVXNlcnMuYWRkKHVzZXJIYW5kbGUpOworICAgICAgICBtU3RhcnRlZFVzZXJzID0gQXJyYXlVdGlscy5hcHBlbmRJbnQobVN0YXJ0ZWRVc2VycywgdXNlckhhbmRsZSk7CisgICAgICAgIC8vIExldCdzIGtpY2sgYW55IG91dHN0YW5kaW5nIGpvYnMgZm9yIHRoaXMgdXNlci4KKyAgICAgICAgbUhhbmRsZXIub2J0YWluTWVzc2FnZShNU0dfQ0hFQ0tfSk9CKS5zZW5kVG9UYXJnZXQoKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvblVubG9ja1VzZXIoaW50IHVzZXJIYW5kbGUpIHsKICAgICAgICAgLy8gTGV0J3Mga2ljayBhbnkgb3V0c3RhbmRpbmcgam9icyBmb3IgdGhpcyB1c2VyLgogICAgICAgICBtSGFuZGxlci5vYnRhaW5NZXNzYWdlKE1TR19DSEVDS19KT0IpLnNlbmRUb1RhcmdldCgpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIG9uU3RvcFVzZXIoaW50IHVzZXJIYW5kbGUpIHsKLSAgICAgICAgbVN0YXJ0ZWRVc2Vycy5yZW1vdmUoSW50ZWdlci52YWx1ZU9mKHVzZXJIYW5kbGUpKTsKKyAgICAgICAgbVN0YXJ0ZWRVc2VycyA9IEFycmF5VXRpbHMucmVtb3ZlSW50KG1TdGFydGVkVXNlcnMsIHVzZXJIYW5kbGUpOwogICAgIH0KIAogICAgIC8qKgpAQCAtNDE1LDE3ICs0MjksMjQgQEAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBvbkJvb3RQaGFzZShpbnQgcGhhc2UpIHsKICAgICAgICAgaWYgKFBIQVNFX1NZU1RFTV9TRVJWSUNFU19SRUFEWSA9PSBwaGFzZSkgewotICAgICAgICAgICAgLy8gUmVnaXN0ZXIgYnIgZm9yIHBhY2thZ2UgcmVtb3ZhbHMgYW5kIHVzZXIgcmVtb3ZhbHMuCisgICAgICAgICAgICAvLyBSZWdpc3RlciBmb3IgcGFja2FnZSByZW1vdmFscyBhbmQgdXNlciByZW1vdmFscy4KICAgICAgICAgICAgIGZpbmFsIEludGVudEZpbHRlciBmaWx0ZXIgPSBuZXcgSW50ZW50RmlsdGVyKEludGVudC5BQ1RJT05fUEFDS0FHRV9SRU1PVkVEKTsKICAgICAgICAgICAgIGZpbHRlci5hZGREYXRhU2NoZW1lKCJwYWNrYWdlIik7CiAgICAgICAgICAgICBnZXRDb250ZXh0KCkucmVnaXN0ZXJSZWNlaXZlckFzVXNlcigKICAgICAgICAgICAgICAgICAgICAgbUJyb2FkY2FzdFJlY2VpdmVyLCBVc2VySGFuZGxlLkFMTCwgZmlsdGVyLCBudWxsLCBudWxsKTsKKwogICAgICAgICAgICAgZmluYWwgSW50ZW50RmlsdGVyIHVzZXJGaWx0ZXIgPSBuZXcgSW50ZW50RmlsdGVyKEludGVudC5BQ1RJT05fVVNFUl9SRU1PVkVEKTsKICAgICAgICAgICAgIHVzZXJGaWx0ZXIuYWRkQWN0aW9uKFBvd2VyTWFuYWdlci5BQ1RJT05fREVWSUNFX0lETEVfTU9ERV9DSEFOR0VEKTsKICAgICAgICAgICAgIHVzZXJGaWx0ZXIuYWRkQWN0aW9uKFBvd2VyTWFuYWdlci5BQ1RJT05fTElHSFRfREVWSUNFX0lETEVfTU9ERV9DSEFOR0VEKTsKICAgICAgICAgICAgIGdldENvbnRleHQoKS5yZWdpc3RlclJlY2VpdmVyQXNVc2VyKAogICAgICAgICAgICAgICAgICAgICBtQnJvYWRjYXN0UmVjZWl2ZXIsIFVzZXJIYW5kbGUuQUxMLCB1c2VyRmlsdGVyLCBudWxsLCBudWxsKTsKLSAgICAgICAgICAgIG1Qb3dlck1hbmFnZXIgPSAoUG93ZXJNYW5hZ2VyKWdldENvbnRleHQoKS5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuUE9XRVJfU0VSVklDRSk7CisKKyAgICAgICAgICAgIGZpbmFsIEludGVudEZpbHRlciBzdG9yYWdlRmlsdGVyID0gbmV3IEludGVudEZpbHRlcigpOworICAgICAgICAgICAgc3RvcmFnZUZpbHRlci5hZGRBY3Rpb24oSW50ZW50LkFDVElPTl9FWFRFUk5BTF9BUFBMSUNBVElPTlNfQVZBSUxBQkxFKTsKKyAgICAgICAgICAgIGdldENvbnRleHQoKS5yZWdpc3RlclJlY2VpdmVyQXNVc2VyKAorICAgICAgICAgICAgICAgICAgICBtQnJvYWRjYXN0UmVjZWl2ZXIsIFVzZXJIYW5kbGUuQUxMLCBzdG9yYWdlRmlsdGVyLCBudWxsLCBudWxsKTsKKworICAgICAgICAgICAgbVBvd2VyTWFuYWdlciA9IGdldENvbnRleHQoKS5nZXRTeXN0ZW1TZXJ2aWNlKFBvd2VyTWFuYWdlci5jbGFzcyk7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIEFjdGl2aXR5TWFuYWdlck5hdGl2ZS5nZXREZWZhdWx0KCkucmVnaXN0ZXJVaWRPYnNlcnZlcihtVWlkT2JzZXJ2ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eU1hbmFnZXIuVUlEX09CU0VSVkVSX0lETEUpOwpAQCAtNzQ0LDcgKzc2NSw3IEBACiAgICAgICAgICAqLwogICAgICAgICBwcml2YXRlIHZvaWQgbWF5YmVRdWV1ZVJlYWR5Sm9ic0ZvckV4ZWN1dGlvbkxvY2tlZEgoKSB7CiAgICAgICAgICAgICBpbnQgY2hhcmdpbmdDb3VudCA9IDA7Ci0gICAgICAgICAgICBpbnQgaWRsZUNvdW50ID0gIDA7CisgICAgICAgICAgICBpbnQgaWRsZUNvdW50ID0gMDsKICAgICAgICAgICAgIGludCBiYWNrb2ZmQ291bnQgPSAwOwogICAgICAgICAgICAgaW50IGNvbm5lY3Rpdml0eUNvdW50ID0gMDsKICAgICAgICAgICAgIExpc3Q8Sm9iU3RhdHVzPiBydW5uYWJsZUpvYnMgPSBudWxsOwpAQCAtODEyLDE4ICs4MzMsMzEgQEAKICAgICAgICAgICogICAgICAtIEl0J3Mgbm90IHBlbmRpbmcuCiAgICAgICAgICAqICAgICAgLSBJdCdzIG5vdCBhbHJlYWR5IHJ1bm5pbmcgb24gYSBKU0MuCiAgICAgICAgICAqICAgICAgLSBUaGUgdXNlciB0aGF0IHJlcXVlc3RlZCB0aGUgam9iIGlzIHJ1bm5pbmcuCisgICAgICAgICAqICAgICAgLSBUaGUgY29tcG9uZW50IGlzIGVuYWJsZWQgYW5kIHJ1bm5hYmxlLgogICAgICAgICAgKi8KICAgICAgICAgcHJpdmF0ZSBib29sZWFuIGlzUmVhZHlUb0JlRXhlY3V0ZWRMb2NrZWQoSm9iU3RhdHVzIGpvYikgewogICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBqb2JSZWFkeSA9IGpvYi5pc1JlYWR5KCk7CiAgICAgICAgICAgICBmaW5hbCBib29sZWFuIGpvYlBlbmRpbmcgPSBtUGVuZGluZ0pvYnMuY29udGFpbnMoam9iKTsKICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gam9iQWN0aXZlID0gaXNDdXJyZW50bHlBY3RpdmVMb2NrZWQoam9iKTsKLSAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gdXNlclJ1bm5pbmcgPSBtU3RhcnRlZFVzZXJzLmNvbnRhaW5zKGpvYi5nZXRVc2VySWQoKSk7CisKKyAgICAgICAgICAgIGZpbmFsIGludCB1c2VySWQgPSBqb2IuZ2V0VXNlcklkKCk7CisgICAgICAgICAgICBmaW5hbCBib29sZWFuIHVzZXJTdGFydGVkID0gQXJyYXlVdGlscy5jb250YWlucyhtU3RhcnRlZFVzZXJzLCB1c2VySWQpOworICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBjb21wb25lbnRQcmVzZW50OworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjb21wb25lbnRQcmVzZW50ID0gKEFwcEdsb2JhbHMuZ2V0UGFja2FnZU1hbmFnZXIoKS5nZXRTZXJ2aWNlSW5mbygKKyAgICAgICAgICAgICAgICAgICAgICAgIGpvYi5nZXRTZXJ2aWNlQ29tcG9uZW50KCksIFBhY2thZ2VNYW5hZ2VyLk1BVENIX0RFQlVHX1RSSUFHRURfTUlTU0lORywKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJJZCkgIT0gbnVsbCk7CisgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIHRocm93IGUucmV0aHJvd0FzUnVudGltZUV4Y2VwdGlvbigpOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBpZiAoREVCVUcpIHsKICAgICAgICAgICAgICAgICBTbG9nLnYoVEFHLCAiaXNSZWFkeVRvQmVFeGVjdXRlZExvY2tlZDogIiArIGpvYi50b1Nob3J0U3RyaW5nKCkKICAgICAgICAgICAgICAgICAgICAgICAgICsgIiByZWFkeT0iICsgam9iUmVhZHkgKyAiIHBlbmRpbmc9IiArIGpvYlBlbmRpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICsgIiBhY3RpdmU9IiArIGpvYkFjdGl2ZSArICIgdXNlclJ1bm5pbmc9IiArIHVzZXJSdW5uaW5nKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIiBhY3RpdmU9IiArIGpvYkFjdGl2ZSArICIgdXNlclN0YXJ0ZWQ9IiArIHVzZXJTdGFydGVkCisgICAgICAgICAgICAgICAgICAgICAgICArICIgY29tcG9uZW50UHJlc2VudD0iICsgY29tcG9uZW50UHJlc2VudCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdXNlclJ1bm5pbmcgJiYgam9iUmVhZHkgJiYgIWpvYlBlbmRpbmcgJiYgIWpvYkFjdGl2ZTsKKyAgICAgICAgICAgIHJldHVybiB1c2VyU3RhcnRlZCAmJiBjb21wb25lbnRQcmVzZW50ICYmIGpvYlJlYWR5ICYmICFqb2JQZW5kaW5nICYmICFqb2JBY3RpdmU7CiAgICAgICAgIH0KIAogICAgICAgICAvKioKQEAgLTkwMSw3ICs5MzUsOCBAQAogICAgICAgICAgICAgZmluYWwgSVBhY2thZ2VNYW5hZ2VyIHBtID0gQXBwR2xvYmFscy5nZXRQYWNrYWdlTWFuYWdlcigpOwogICAgICAgICAgICAgZmluYWwgQ29tcG9uZW50TmFtZSBzZXJ2aWNlID0gam9iLmdldFNlcnZpY2UoKTsKICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgU2VydmljZUluZm8gc2kgPSBwbS5nZXRTZXJ2aWNlSW5mbyhzZXJ2aWNlLCAwLCBVc2VySGFuZGxlLmdldFVzZXJJZCh1aWQpKTsKKyAgICAgICAgICAgICAgICBTZXJ2aWNlSW5mbyBzaSA9IHBtLmdldFNlcnZpY2VJbmZvKHNlcnZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlTWFuYWdlci5NQVRDSF9ERUJVR19UUklBR0VEX01JU1NJTkcsIFVzZXJIYW5kbGUuZ2V0VXNlcklkKHVpZCkpOwogICAgICAgICAgICAgICAgIGlmIChzaSA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIk5vIHN1Y2ggc2VydmljZSAiICsgc2VydmljZSk7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTAxNCwxNiArMTA0OSwxMiBAQAogICAgICAgICAgICAgICAgIEJpbmRlci5yZXN0b3JlQ2FsbGluZ0lkZW50aXR5KGlkZW50aXR5VG9rZW4pOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfTsKKyAgICB9CiAKICAgICB2b2lkIGR1bXBJbnRlcm5hbChQcmludFdyaXRlciBwdykgewogICAgICAgICBmaW5hbCBsb25nIG5vdyA9IFN5c3RlbUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpOwogICAgICAgICBzeW5jaHJvbml6ZWQgKG1Kb2JzKSB7Ci0gICAgICAgICAgICBwdy5wcmludCgiU3RhcnRlZCB1c2VyczogIik7Ci0gICAgICAgICAgICBmb3IgKGludCBpPTA7IGk8bVN0YXJ0ZWRVc2Vycy5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgICAgIHB3LnByaW50KCJ1IiArIG1TdGFydGVkVXNlcnMuZ2V0KGkpICsgIiAiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHB3LnByaW50bG4oKTsKKyAgICAgICAgICAgIHB3LnByaW50bG4oIlN0YXJ0ZWQgdXNlcnM6ICIgKyBBcnJheXMudG9TdHJpbmcobVN0YXJ0ZWRVc2VycykpOwogICAgICAgICAgICAgcHcucHJpbnRsbigiUmVnaXN0ZXJlZCBqb2JzOiIpOwogICAgICAgICAgICAgaWYgKG1Kb2JzLnNpemUoKSA+IDApIHsKICAgICAgICAgICAgICAgICBBcnJheVNldDxKb2JTdGF0dXM+IGpvYnMgPSBtSm9icy5nZXRKb2JzKCk7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL25ldC9OZXR3b3JrUG9saWN5TWFuYWdlclNlcnZpY2UuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbmV0L05ldHdvcmtQb2xpY3lNYW5hZ2VyU2VydmljZS5qYXZhCmluZGV4IDJhYzBiYTYuLjVhYWE5MzAgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbmV0L05ldHdvcmtQb2xpY3lNYW5hZ2VyU2VydmljZS5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbmV0L05ldHdvcmtQb2xpY3lNYW5hZ2VyU2VydmljZS5qYXZhCkBAIC0yMTg3LDcgKzIxODcsOCBAQAogICAgICAgICAvLyB1cGRhdGUgcnVsZXMgZm9yIGFsbCBpbnN0YWxsZWQgYXBwbGljYXRpb25zCiAgICAgICAgIGZpbmFsIExpc3Q8VXNlckluZm8+IHVzZXJzID0gbVVzZXJNYW5hZ2VyLmdldFVzZXJzKCk7CiAgICAgICAgIGZpbmFsIExpc3Q8QXBwbGljYXRpb25JbmZvPiBhcHBzID0gcG0uZ2V0SW5zdGFsbGVkQXBwbGljYXRpb25zKAotICAgICAgICAgICAgICAgIFBhY2thZ2VNYW5hZ2VyLkdFVF9VTklOU1RBTExFRF9QQUNLQUdFUyB8IFBhY2thZ2VNYW5hZ2VyLkdFVF9ESVNBQkxFRF9DT01QT05FTlRTKTsKKyAgICAgICAgICAgICAgICBQYWNrYWdlTWFuYWdlci5HRVRfVU5JTlNUQUxMRURfUEFDS0FHRVMgfCBQYWNrYWdlTWFuYWdlci5HRVRfRElTQUJMRURfQ09NUE9ORU5UUworICAgICAgICAgICAgICAgICAgICAgICAgfCBQYWNrYWdlTWFuYWdlci5NQVRDSF9FTkNSWVBUSU9OX0FXQVJFX0FORF9VTkFXQVJFKTsKIAogICAgICAgICBmb3IgKFVzZXJJbmZvIHVzZXIgOiB1c2VycykgewogICAgICAgICAgICAgZm9yIChBcHBsaWNhdGlvbkluZm8gYXBwIDogYXBwcykgewpAQCAtMjMzMiw3ICsyMzMzLDcgQEAKICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyB2b2lkIG9uQXBwSWRsZVN0YXRlQ2hhbmdlZChTdHJpbmcgcGFja2FnZU5hbWUsIGludCB1c2VySWQsIGJvb2xlYW4gaWRsZSkgewogICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBpbnQgdWlkID0gbUNvbnRleHQuZ2V0UGFja2FnZU1hbmFnZXIoKS5nZXRQYWNrYWdlVWlkKHBhY2thZ2VOYW1lLCB1c2VySWQpOworICAgICAgICAgICAgICAgIGludCB1aWQgPSBtQ29udGV4dC5nZXRQYWNrYWdlTWFuYWdlcigpLmdldFBhY2thZ2VVaWRBc1VzZXIocGFja2FnZU5hbWUsIHVzZXJJZCk7CiAgICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChtUnVsZXNMb2NrKSB7CiAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVJ1bGVGb3JBcHBJZGxlTG9ja2VkKHVpZCk7CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9ub3RpZmljYXRpb24vQ29uZGl0aW9uUHJvdmlkZXJzLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL25vdGlmaWNhdGlvbi9Db25kaXRpb25Qcm92aWRlcnMuamF2YQppbmRleCAxOTg3MjE0Li5jZTE4ODE4IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL25vdGlmaWNhdGlvbi9Db25kaXRpb25Qcm92aWRlcnMuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL25vdGlmaWNhdGlvbi9Db25kaXRpb25Qcm92aWRlcnMuamF2YQpAQCAtMTIxLDYgKzEyMSwxMSBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCBib29sZWFuIGNoZWNrVHlwZShJSW50ZXJmYWNlIHNlcnZpY2UpIHsKKyAgICAgICAgcmV0dXJuIHNlcnZpY2UgaW5zdGFuY2VvZiBJQ29uZGl0aW9uUHJvdmlkZXI7CisgICAgfQorCisgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgb25Cb290UGhhc2VBcHBzQ2FuU3RhcnQoKSB7CiAgICAgICAgIHN1cGVyLm9uQm9vdFBoYXNlQXBwc0NhblN0YXJ0KCk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbVN5c3RlbUNvbmRpdGlvblByb3ZpZGVycy5zaXplKCk7IGkrKykgewpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9ub3RpZmljYXRpb24vTWFuYWdlZFNlcnZpY2VzLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL25vdGlmaWNhdGlvbi9NYW5hZ2VkU2VydmljZXMuamF2YQppbmRleCBkNTc3MzY5MC4uMDllNjY0NyAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9ub3RpZmljYXRpb24vTWFuYWdlZFNlcnZpY2VzLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9ub3RpZmljYXRpb24vTWFuYWdlZFNlcnZpY2VzLmphdmEKQEAgLTQyLDYgKzQyLDcgQEAKIGltcG9ydCBhbmRyb2lkLm9zLlVzZXJNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuU2V0dGluZ3M7CiBpbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRVdGlsczsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuQXJyYXlNYXA7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkFycmF5U2V0OwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlNsb2c7CkBAIC01Myw2ICs1NCw3IEBACiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwogaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7CiBpbXBvcnQgamF2YS51dGlsLk9iamVjdHM7CiBpbXBvcnQgamF2YS51dGlsLlNldDsKIApAQCAtOTMsNiArOTUsOCBAQAogICAgIC8vIExpc3Qgb2YgcGFja2FnZXMgaW4gcmVzdG9yZWQgc2V0dGluZyBhY3Jvc3MgYWxsIG1Vc2VyUHJvZmlsZXMsIGZvciBxdWljawogICAgIC8vIGZpbHRlcmluZyB1cG9uIHBhY2thZ2UgdXBkYXRlcy4KICAgICBwcml2YXRlIEFycmF5U2V0PFN0cmluZz4gbVJlc3RvcmVkUGFja2FnZXMgPSBuZXcgQXJyYXlTZXQ8PigpOworICAgIC8vIFN0YXRlIG9mIGN1cnJlbnQgc2VydmljZSBjYXRlZ29yaWVzCisgICAgcHJpdmF0ZSBBcnJheU1hcDxTdHJpbmcsIEJvb2xlYW4+IG1DYXRlZ29yeUVuYWJsZWQgPSBuZXcgQXJyYXlNYXA8PigpOwogCiAKICAgICAvLyBLZXB0IHRvIGRlLWR1cGUgdXNlciBjaGFuZ2UgZXZlbnRzIChleHBlcmllbmNlZCBhZnRlciBib290LCB3aGVuIHdlIHJlY2VpdmUgYSBzZXR0aW5ncyBhbmQgYQpAQCAtMTM3LDYgKzE0MSw4IEBACiAKICAgICBhYnN0cmFjdCBwcm90ZWN0ZWQgSUludGVyZmFjZSBhc0ludGVyZmFjZShJQmluZGVyIGJpbmRlcik7CiAKKyAgICBhYnN0cmFjdCBwcm90ZWN0ZWQgYm9vbGVhbiBjaGVja1R5cGUoSUludGVyZmFjZSBzZXJ2aWNlKTsKKwogICAgIGFic3RyYWN0IHByb3RlY3RlZCB2b2lkIG9uU2VydmljZUFkZGVkKE1hbmFnZWRTZXJ2aWNlSW5mbyBpbmZvKTsKIAogICAgIHByb3RlY3RlZCB2b2lkIG9uU2VydmljZVJlbW92ZWRMb2NrZWQoTWFuYWdlZFNlcnZpY2VJbmZvIHJlbW92ZWQpIHsgfQpAQCAtMTY1LDcgKzE3MSw4IEBACiAgICAgICAgICAgICBpZiAoZmlsdGVyICE9IG51bGwgJiYgIWZpbHRlci5tYXRjaGVzKGluZm8uY29tcG9uZW50KSkgY29udGludWU7CiAgICAgICAgICAgICBwdy5wcmludGxuKCIgICAgICAiICsgaW5mby5jb21wb25lbnQKICAgICAgICAgICAgICAgICAgICAgKyAiICh1c2VyICIgKyBpbmZvLnVzZXJpZCArICIpOiAiICsgaW5mby5zZXJ2aWNlCi0gICAgICAgICAgICAgICAgICAgICsgKGluZm8uaXNTeXN0ZW0/IiBTWVNURU0iOiIiKSk7CisgICAgICAgICAgICAgICAgICAgICsgKGluZm8uaXNTeXN0ZW0/IiBTWVNURU0iOiIiKQorICAgICAgICAgICAgICAgICAgICArIChpbmZvLmlzR3Vlc3QodGhpcyk/IiBHVUVTVCI6IiIpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjYyLDYgKzI2OSw1OCBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgLyoqCisgICAgICogQWRkIGEgc2VydmljZSB0byBvdXIgY2FsbGJhY2tzLiBUaGUgbGlmZWN5Y2xlIG9mIHRoaXMgc2VydmljZSBpcyBtYW5hZ2VkIGV4dGVybmFsbHksCisgICAgICogYnV0IHVubGlrZSBhIHN5c3RlbSBzZXJ2aWNlLCBpdCBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQgcHJpdmxlZGdlZC4KKyAgICAgKiAqLworICAgIHB1YmxpYyB2b2lkIHJlZ2lzdGVyR3Vlc3RTZXJ2aWNlKE1hbmFnZWRTZXJ2aWNlSW5mbyBndWVzdCkgeworICAgICAgICBjaGVja05vdE51bGwoZ3Vlc3Quc2VydmljZSk7CisgICAgICAgIGNoZWNrVHlwZShndWVzdC5zZXJ2aWNlKTsKKyAgICAgICAgaWYgKHJlZ2lzdGVyU2VydmljZUltcGwoZ3Vlc3QpICE9IG51bGwpIHsKKyAgICAgICAgICAgIG9uU2VydmljZUFkZGVkKGd1ZXN0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldENhdGVnb3J5U3RhdGUoU3RyaW5nIGNhdGVnb3J5LCBib29sZWFuIGVuYWJsZWQpIHsKKyAgICAgICAgc3luY2hyb25pemVkIChtTXV0ZXgpIHsKKyAgICAgICAgICAgIGZpbmFsIEJvb2xlYW4gcHJldmlvdXMgPSBtQ2F0ZWdvcnlFbmFibGVkLnB1dChjYXRlZ29yeSwgZW5hYmxlZCk7CisgICAgICAgICAgICBpZiAoIShwcmV2aW91cyA9PSBudWxsIHx8IHByZXZpb3VzICE9IGVuYWJsZWQpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBTdGF0ZSBjaGFuZ2VkCisgICAgICAgICAgICBpZiAoREVCVUcpIHsKKyAgICAgICAgICAgICAgICBTbG9nLmQoVEFHLCAoKGVuYWJsZWQpID8gIkVuYWJsaW5nICIgOiAiRGlzYWJsaW5nICIpICsgImNhdGVnb3J5ICIgKyBjYXRlZ29yeSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZpbmFsIGludFtdIHVzZXJJZHMgPSBtVXNlclByb2ZpbGVzLmdldEN1cnJlbnRQcm9maWxlSWRzKCk7CisgICAgICAgICAgICBmb3IgKGludCB1c2VySWQgOiB1c2VySWRzKSB7CisgICAgICAgICAgICAgICAgZmluYWwgU2V0PENvbXBvbmVudE5hbWU+IGNvbXBvbmVudE5hbWVzID0gcXVlcnlQYWNrYWdlRm9yU2VydmljZXMobnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJJZCwgY2F0ZWdvcnkpOworCisgICAgICAgICAgICAgICAgLy8gRGlzYWxsb3cgc2VydmljZXMgbm90IGVuYWJsZWQgaW4gU2V0dGluZ3MKKyAgICAgICAgICAgICAgICBmaW5hbCBBcnJheVNldDxDb21wb25lbnROYW1lPiB1c2VyQ29tcG9uZW50cyA9CisgICAgICAgICAgICAgICAgICAgICAgICBsb2FkQ29tcG9uZW50TmFtZXNGcm9tU2V0dGluZyhtQ29uZmlnLnNlY3VyZVNldHRpbmdOYW1lLCB1c2VySWQpOworICAgICAgICAgICAgICAgIGlmICh1c2VyQ29tcG9uZW50cyA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudE5hbWVzLmNsZWFyKCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50TmFtZXMucmV0YWluQWxsKHVzZXJDb21wb25lbnRzKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoREVCVUcpIHsKKyAgICAgICAgICAgICAgICAgICAgU2xvZy5kKFRBRywgIkNvbXBvbmVudHMgZm9yIGNhdGVnb3J5ICIgKyBjYXRlZ29yeSArICI6ICIgKyBjb21wb25lbnROYW1lcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZvciAoQ29tcG9uZW50TmFtZSBjIDogY29tcG9uZW50TmFtZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyU2VydmljZUxvY2tlZChjLCB1c2VySWQpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgdW5yZWdpc3RlclNlcnZpY2VMb2NrZWQoYywgdXNlcklkKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICB9CisgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHJlYnVpbGRSZXN0b3JlZFBhY2thZ2VzKCkgewogICAgICAgICBtUmVzdG9yZWRQYWNrYWdlcy5jbGVhcigpOwpAQCAtMjgzLDkgKzM0Miw5IEBACiAgICAgICAgICAgICBpbnQgdXNlcklkKSB7CiAgICAgICAgIGZpbmFsIENvbnRlbnRSZXNvbHZlciBjciA9IG1Db250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpOwogICAgICAgICBTdHJpbmcgc2V0dGluZ1ZhbHVlID0gU2V0dGluZ3MuU2VjdXJlLmdldFN0cmluZ0ZvclVzZXIoCi0gICAgICAgICAgICAgICAgY3IsCi0gICAgICAgICAgICAgICAgc2V0dGluZ05hbWUsCi0gICAgICAgICAgICAgICAgdXNlcklkKTsKKyAgICAgICAgICAgIGNyLAorICAgICAgICAgICAgc2V0dGluZ05hbWUsCisgICAgICAgICAgICB1c2VySWQpOwogICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkoc2V0dGluZ1ZhbHVlKSkKICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICBTdHJpbmdbXSByZXN0b3JlZCA9IHNldHRpbmdWYWx1ZS5zcGxpdChFTkFCTEVEX1NFUlZJQ0VTX1NFUEFSQVRPUik7CkBAIC0zMTQsMTAgKzM3MywxMCBAQAogICAgICAgICAgICAgICAgIFRleHRVdGlscy5qb2luKEVOQUJMRURfU0VSVklDRVNfU0VQQVJBVE9SLCBjb21wb25lbnROYW1lcyk7CiAgICAgICAgIGZpbmFsIENvbnRlbnRSZXNvbHZlciBjciA9IG1Db250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpOwogICAgICAgICBTZXR0aW5ncy5TZWN1cmUucHV0U3RyaW5nRm9yVXNlcigKLSAgICAgICAgICAgICAgICBjciwKLSAgICAgICAgICAgICAgICBzZXR0aW5nTmFtZSwKLSAgICAgICAgICAgICAgICB2YWx1ZSwKLSAgICAgICAgICAgICAgICB1c2VySWQpOworICAgICAgICAgICAgY3IsCisgICAgICAgICAgICBzZXR0aW5nTmFtZSwKKyAgICAgICAgICAgIHZhbHVlLAorICAgICAgICAgICAgdXNlcklkKTsKICAgICB9CiAKICAgICAvKioKQEAgLTMzMywxMiArMzkyLDIwIEBACiAgICAgfQogCiAgICAgcHJvdGVjdGVkIFNldDxDb21wb25lbnROYW1lPiBxdWVyeVBhY2thZ2VGb3JTZXJ2aWNlcyhTdHJpbmcgcGFja2FnZU5hbWUsIGludCB1c2VySWQpIHsKKyAgICAgICAgcmV0dXJuIHF1ZXJ5UGFja2FnZUZvclNlcnZpY2VzKHBhY2thZ2VOYW1lLCB1c2VySWQsIG51bGwpOworICAgIH0KKworICAgIHByb3RlY3RlZCBTZXQ8Q29tcG9uZW50TmFtZT4gcXVlcnlQYWNrYWdlRm9yU2VydmljZXMoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgdXNlcklkLAorICAgICAgICAgICAgU3RyaW5nIGNhdGVnb3J5KSB7CiAgICAgICAgIFNldDxDb21wb25lbnROYW1lPiBpbnN0YWxsZWQgPSBuZXcgQXJyYXlTZXQ8PigpOwogICAgICAgICBmaW5hbCBQYWNrYWdlTWFuYWdlciBwbSA9IG1Db250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCk7CiAgICAgICAgIEludGVudCBxdWVyeUludGVudCA9IG5ldyBJbnRlbnQobUNvbmZpZy5zZXJ2aWNlSW50ZXJmYWNlKTsKICAgICAgICAgaWYgKCFUZXh0VXRpbHMuaXNFbXB0eShwYWNrYWdlTmFtZSkpIHsKICAgICAgICAgICAgIHF1ZXJ5SW50ZW50LnNldFBhY2thZ2UocGFja2FnZU5hbWUpOwogICAgICAgICB9CisgICAgICAgIGlmIChjYXRlZ29yeSAhPSBudWxsKSB7CisgICAgICAgICAgICBxdWVyeUludGVudC5hZGRDYXRlZ29yeShjYXRlZ29yeSk7CisgICAgICAgIH0KICAgICAgICAgTGlzdDxSZXNvbHZlSW5mbz4gaW5zdGFsbGVkU2VydmljZXMgPSBwbS5xdWVyeUludGVudFNlcnZpY2VzQXNVc2VyKAogICAgICAgICAgICAgICAgIHF1ZXJ5SW50ZW50LAogICAgICAgICAgICAgICAgIFBhY2thZ2VNYW5hZ2VyLkdFVF9TRVJWSUNFUyB8IFBhY2thZ2VNYW5hZ2VyLkdFVF9NRVRBX0RBVEEsCkBAIC0zNTMsOSArNDIwLDkgQEAKICAgICAgICAgICAgICAgICBDb21wb25lbnROYW1lIGNvbXBvbmVudCA9IG5ldyBDb21wb25lbnROYW1lKGluZm8ucGFja2FnZU5hbWUsIGluZm8ubmFtZSk7CiAgICAgICAgICAgICAgICAgaWYgKCFtQ29uZmlnLmJpbmRQZXJtaXNzaW9uLmVxdWFscyhpbmZvLnBlcm1pc3Npb24pKSB7CiAgICAgICAgICAgICAgICAgICAgIFNsb2cudyhUQUcsICJTa2lwcGluZyAiICsgZ2V0Q2FwdGlvbigpICsgIiBzZXJ2aWNlICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGluZm8ucGFja2FnZU5hbWUgKyAiLyIgKyBpbmZvLm5hbWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArICI6IGl0IGRvZXMgbm90IHJlcXVpcmUgdGhlIHBlcm1pc3Npb24gIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgbUNvbmZpZy5iaW5kUGVybWlzc2lvbik7CisgICAgICAgICAgICAgICAgICAgICAgICArIGluZm8ucGFja2FnZU5hbWUgKyAiLyIgKyBpbmZvLm5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIjogaXQgZG9lcyBub3QgcmVxdWlyZSB0aGUgcGVybWlzc2lvbiAiCisgICAgICAgICAgICAgICAgICAgICAgICArIG1Db25maWcuYmluZFBlcm1pc3Npb24pOwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaW5zdGFsbGVkLmFkZChjb21wb25lbnQpOwpAQCAtNDMyLDcgKzQ5OSw3IEBACiAgICAgICAgIHN5bmNocm9uaXplZCAobU11dGV4KSB7CiAgICAgICAgICAgICAvLyBVbmJpbmQgYXV0b21hdGljYWxseSBib3VuZCBzZXJ2aWNlcywgcmV0YWluIHN5c3RlbSBzZXJ2aWNlcy4KICAgICAgICAgICAgIGZvciAoTWFuYWdlZFNlcnZpY2VJbmZvIHNlcnZpY2UgOiBtU2VydmljZXMpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXNlcnZpY2UuaXNTeXN0ZW0pIHsKKyAgICAgICAgICAgICAgICBpZiAoIXNlcnZpY2UuaXNTeXN0ZW0gJiYgIXNlcnZpY2UuaXNHdWVzdCh0aGlzKSkgewogICAgICAgICAgICAgICAgICAgICB0b1JlbW92ZS5hZGQoc2VydmljZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtNDQ5LDYgKzUxNiwxNiBAQAogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGZpbmFsIEFycmF5TGlzdDxDb21wb25lbnROYW1lPiBhZGQgPSBuZXcgQXJyYXlMaXN0PD4odXNlckNvbXBvbmVudHMpOworCisgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGNvbXBvbmVudHMgZnJvbSBkaXNhYmxlZCBjYXRlZ29yaWVzIHNvIHRoYXQgdGhvc2Ugc2VydmljZXMgYXJlbid0IHJ1bi4KKyAgICAgICAgICAgICAgICBmb3IgKEVudHJ5PFN0cmluZywgQm9vbGVhbj4gZSA6IG1DYXRlZ29yeUVuYWJsZWQuZW50cnlTZXQoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWUuZ2V0VmFsdWUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgU2V0PENvbXBvbmVudE5hbWU+IGMgPSBxdWVyeVBhY2thZ2VGb3JTZXJ2aWNlcyhudWxsLCB1c2VySWRzW2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuZ2V0S2V5KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgYWRkLnJlbW92ZUFsbChjKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgIHRvQWRkLnB1dCh1c2VySWRzW2ldLCBhZGQpOwogCiAgICAgICAgICAgICAgICAgbmV3RW5hYmxlZC5hZGRBbGwodXNlckNvbXBvbmVudHMpOwpAQCAtNDg4LDkzICs1NjUsOTcgQEAKICAgICAgKiBWZXJzaW9uIG9mIHJlZ2lzdGVyU2VydmljZSB0aGF0IHRha2VzIHRoZSBuYW1lIG9mIGEgc2VydmljZSBjb21wb25lbnQgdG8gYmluZCB0by4KICAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgcmVnaXN0ZXJTZXJ2aWNlKGZpbmFsIENvbXBvbmVudE5hbWUgbmFtZSwgZmluYWwgaW50IHVzZXJpZCkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKG1NdXRleCkgeworICAgICAgICAgICAgcmVnaXN0ZXJTZXJ2aWNlTG9ja2VkKG5hbWUsIHVzZXJpZCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgcmVnaXN0ZXJTZXJ2aWNlTG9ja2VkKGZpbmFsIENvbXBvbmVudE5hbWUgbmFtZSwgZmluYWwgaW50IHVzZXJpZCkgewogICAgICAgICBpZiAoREVCVUcpIFNsb2cudihUQUcsICJyZWdpc3RlclNlcnZpY2U6ICIgKyBuYW1lICsgIiB1PSIgKyB1c2VyaWQpOwogCi0gICAgICAgIHN5bmNocm9uaXplZCAobU11dGV4KSB7Ci0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgc2VydmljZXNCaW5kaW5nVGFnID0gbmFtZS50b1N0cmluZygpICsgIi8iICsgdXNlcmlkOwotICAgICAgICAgICAgaWYgKG1TZXJ2aWNlc0JpbmRpbmcuY29udGFpbnMoc2VydmljZXNCaW5kaW5nVGFnKSkgewotICAgICAgICAgICAgICAgIC8vIHN0b3AgcmVnaXN0ZXJpbmcgdGhpcyB0aGluZyBhbHJlYWR5ISB3ZSdyZSB3b3JraW5nIG9uIGl0Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbVNlcnZpY2VzQmluZGluZy5hZGQoc2VydmljZXNCaW5kaW5nVGFnKTsKKyAgICAgICAgZmluYWwgU3RyaW5nIHNlcnZpY2VzQmluZGluZ1RhZyA9IG5hbWUudG9TdHJpbmcoKSArICIvIiArIHVzZXJpZDsKKyAgICAgICAgaWYgKG1TZXJ2aWNlc0JpbmRpbmcuY29udGFpbnMoc2VydmljZXNCaW5kaW5nVGFnKSkgeworICAgICAgICAgICAgLy8gc3RvcCByZWdpc3RlcmluZyB0aGlzIHRoaW5nIGFscmVhZHkhIHdlJ3JlIHdvcmtpbmcgb24gaXQKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtU2VydmljZXNCaW5kaW5nLmFkZChzZXJ2aWNlc0JpbmRpbmdUYWcpOwogCi0gICAgICAgICAgICBmaW5hbCBpbnQgTiA9IG1TZXJ2aWNlcy5zaXplKCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gTiAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgTWFuYWdlZFNlcnZpY2VJbmZvIGluZm8gPSBtU2VydmljZXMuZ2V0KGkpOwotICAgICAgICAgICAgICAgIGlmIChuYW1lLmVxdWFscyhpbmZvLmNvbXBvbmVudCkKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIGluZm8udXNlcmlkID09IHVzZXJpZCkgewotICAgICAgICAgICAgICAgICAgICAvLyBjdXQgb2xkIGNvbm5lY3Rpb25zCi0gICAgICAgICAgICAgICAgICAgIGlmIChERUJVRykgU2xvZy52KFRBRywgIiAgICBkaXNjb25uZWN0aW5nIG9sZCAiICsgZ2V0Q2FwdGlvbigpICsgIjogIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgaW5mby5zZXJ2aWNlKTsKLSAgICAgICAgICAgICAgICAgICAgcmVtb3ZlU2VydmljZUxvY2tlZChpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGluZm8uY29ubmVjdGlvbiAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtQ29udGV4dC51bmJpbmRTZXJ2aWNlKGluZm8uY29ubmVjdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgZmluYWwgaW50IE4gPSBtU2VydmljZXMuc2l6ZSgpOworICAgICAgICBmb3IgKGludCBpID0gTiAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgICAgICBmaW5hbCBNYW5hZ2VkU2VydmljZUluZm8gaW5mbyA9IG1TZXJ2aWNlcy5nZXQoaSk7CisgICAgICAgICAgICBpZiAobmFtZS5lcXVhbHMoaW5mby5jb21wb25lbnQpCisgICAgICAgICAgICAgICAgJiYgaW5mby51c2VyaWQgPT0gdXNlcmlkKSB7CisgICAgICAgICAgICAgICAgLy8gY3V0IG9sZCBjb25uZWN0aW9ucworICAgICAgICAgICAgICAgIGlmIChERUJVRykgU2xvZy52KFRBRywgIiAgICBkaXNjb25uZWN0aW5nIG9sZCAiICsgZ2V0Q2FwdGlvbigpICsgIjogIgorICAgICAgICAgICAgICAgICAgICArIGluZm8uc2VydmljZSk7CisgICAgICAgICAgICAgICAgcmVtb3ZlU2VydmljZUxvY2tlZChpKTsKKyAgICAgICAgICAgICAgICBpZiAoaW5mby5jb25uZWN0aW9uICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgbUNvbnRleHQudW5iaW5kU2VydmljZShpbmZvLmNvbm5lY3Rpb24pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKyAgICAgICAgfQogCi0gICAgICAgICAgICBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudChtQ29uZmlnLnNlcnZpY2VJbnRlcmZhY2UpOwotICAgICAgICAgICAgaW50ZW50LnNldENvbXBvbmVudChuYW1lKTsKKyAgICAgICAgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQobUNvbmZpZy5zZXJ2aWNlSW50ZXJmYWNlKTsKKyAgICAgICAgaW50ZW50LnNldENvbXBvbmVudChuYW1lKTsKIAotICAgICAgICAgICAgaW50ZW50LnB1dEV4dHJhKEludGVudC5FWFRSQV9DTElFTlRfTEFCRUwsIG1Db25maWcuY2xpZW50TGFiZWwpOworICAgICAgICBpbnRlbnQucHV0RXh0cmEoSW50ZW50LkVYVFJBX0NMSUVOVF9MQUJFTCwgbUNvbmZpZy5jbGllbnRMYWJlbCk7CiAKLSAgICAgICAgICAgIGZpbmFsIFBlbmRpbmdJbnRlbnQgcGVuZGluZ0ludGVudCA9IFBlbmRpbmdJbnRlbnQuZ2V0QWN0aXZpdHkoCi0gICAgICAgICAgICAgICAgICAgIG1Db250ZXh0LCAwLCBuZXcgSW50ZW50KG1Db25maWcuc2V0dGluZ3NBY3Rpb24pLCAwKTsKLSAgICAgICAgICAgIGludGVudC5wdXRFeHRyYShJbnRlbnQuRVhUUkFfQ0xJRU5UX0lOVEVOVCwgcGVuZGluZ0ludGVudCk7CisgICAgICAgIGZpbmFsIFBlbmRpbmdJbnRlbnQgcGVuZGluZ0ludGVudCA9IFBlbmRpbmdJbnRlbnQuZ2V0QWN0aXZpdHkoCisgICAgICAgICAgICBtQ29udGV4dCwgMCwgbmV3IEludGVudChtQ29uZmlnLnNldHRpbmdzQWN0aW9uKSwgMCk7CisgICAgICAgIGludGVudC5wdXRFeHRyYShJbnRlbnQuRVhUUkFfQ0xJRU5UX0lOVEVOVCwgcGVuZGluZ0ludGVudCk7CiAKLSAgICAgICAgICAgIEFwcGxpY2F0aW9uSW5mbyBhcHBJbmZvID0gbnVsbDsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgYXBwSW5mbyA9IG1Db250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCkuZ2V0QXBwbGljYXRpb25JbmZvKAotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZS5nZXRQYWNrYWdlTmFtZSgpLCAwKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKE5hbWVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgLy8gSWdub3JlIGlmIHRoZSBwYWNrYWdlIGRvZXNuJ3QgZXhpc3Qgd2Ugd29uJ3QgYmUgYWJsZSB0byBiaW5kIHRvIHRoZSBzZXJ2aWNlLgotICAgICAgICAgICAgfQotICAgICAgICAgICAgZmluYWwgaW50IHRhcmdldFNka1ZlcnNpb24gPQotICAgICAgICAgICAgICAgICAgICBhcHBJbmZvICE9IG51bGwgPyBhcHBJbmZvLnRhcmdldFNka1ZlcnNpb24gOiBCdWlsZC5WRVJTSU9OX0NPREVTLkJBU0U7CisgICAgICAgIEFwcGxpY2F0aW9uSW5mbyBhcHBJbmZvID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGFwcEluZm8gPSBtQ29udGV4dC5nZXRQYWNrYWdlTWFuYWdlcigpLmdldEFwcGxpY2F0aW9uSW5mbygKKyAgICAgICAgICAgICAgICBuYW1lLmdldFBhY2thZ2VOYW1lKCksIDApOworICAgICAgICB9IGNhdGNoIChOYW1lTm90Rm91bmRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgLy8gSWdub3JlIGlmIHRoZSBwYWNrYWdlIGRvZXNuJ3QgZXhpc3Qgd2Ugd29uJ3QgYmUgYWJsZSB0byBiaW5kIHRvIHRoZSBzZXJ2aWNlLgorICAgICAgICB9CisgICAgICAgIGZpbmFsIGludCB0YXJnZXRTZGtWZXJzaW9uID0KKyAgICAgICAgICAgIGFwcEluZm8gIT0gbnVsbCA/IGFwcEluZm8udGFyZ2V0U2RrVmVyc2lvbiA6IEJ1aWxkLlZFUlNJT05fQ09ERVMuQkFTRTsKIAotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBpZiAoREVCVUcpIFNsb2cudihUQUcsICJiaW5kaW5nOiAiICsgaW50ZW50KTsKLSAgICAgICAgICAgICAgICBTZXJ2aWNlQ29ubmVjdGlvbiBzZXJ2aWNlQ29ubmVjdGlvbiA9IG5ldyBTZXJ2aWNlQ29ubmVjdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgSUludGVyZmFjZSBtU2VydmljZTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlmIChERUJVRykgU2xvZy52KFRBRywgImJpbmRpbmc6ICIgKyBpbnRlbnQpOworICAgICAgICAgICAgU2VydmljZUNvbm5lY3Rpb24gc2VydmljZUNvbm5lY3Rpb24gPSBuZXcgU2VydmljZUNvbm5lY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgSUludGVyZmFjZSBtU2VydmljZTsKIAotICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25TZXJ2aWNlQ29ubmVjdGVkKENvbXBvbmVudE5hbWUgbmFtZSwgSUJpbmRlciBiaW5kZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gYWRkZWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIE1hbmFnZWRTZXJ2aWNlSW5mbyBpbmZvID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAobU11dGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVNlcnZpY2VzQmluZGluZy5yZW1vdmUoc2VydmljZXNCaW5kaW5nVGFnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU2VydmljZSA9IGFzSW50ZXJmYWNlKGJpbmRlcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8gPSBuZXdTZXJ2aWNlSW5mbyhtU2VydmljZSwgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyaWQsIGZhbHNlIC8qaXNTeXN0ZW0qLywgdGhpcywgdGFyZ2V0U2RrVmVyc2lvbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRlci5saW5rVG9EZWF0aChpbmZvLCAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkZWQgPSBtU2VydmljZXMuYWRkKGluZm8pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgZGVhZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZGRlZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uU2VydmljZUFkZGVkKGluZm8pOworICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uU2VydmljZUNvbm5lY3RlZChDb21wb25lbnROYW1lIG5hbWUsIElCaW5kZXIgYmluZGVyKSB7CisgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gYWRkZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgTWFuYWdlZFNlcnZpY2VJbmZvIGluZm8gPSBudWxsOworICAgICAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1NdXRleCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbVNlcnZpY2VzQmluZGluZy5yZW1vdmUoc2VydmljZXNCaW5kaW5nVGFnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVNlcnZpY2UgPSBhc0ludGVyZmFjZShiaW5kZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8gPSBuZXdTZXJ2aWNlSW5mbyhtU2VydmljZSwgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcmlkLCBmYWxzZSAvKmlzU3lzdGVtKi8sIHRoaXMsIHRhcmdldFNka1ZlcnNpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRlci5saW5rVG9EZWF0aChpbmZvLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRlZCA9IG1TZXJ2aWNlcy5hZGQoaW5mbyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgZGVhZAogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uU2VydmljZURpc2Nvbm5lY3RlZChDb21wb25lbnROYW1lIG5hbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFNsb2cudihUQUcsIGdldENhcHRpb24oKSArICIgY29ubmVjdGlvbiBsb3N0OiAiICsgbmFtZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChhZGRlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgb25TZXJ2aWNlQWRkZWQoaW5mbyk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgIGlmICghbUNvbnRleHQuYmluZFNlcnZpY2VBc1VzZXIoaW50ZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZUNvbm5lY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICBDb250ZXh0LkJJTkRfQVVUT19DUkVBVEUgfCBDb250ZXh0LkJJTkRfRk9SRUdST1VORF9TRVJWSUNFLAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFVzZXJIYW5kbGUodXNlcmlkKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgbVNlcnZpY2VzQmluZGluZy5yZW1vdmUoc2VydmljZXNCaW5kaW5nVGFnKTsKLSAgICAgICAgICAgICAgICAgICAgU2xvZy53KFRBRywgIlVuYWJsZSB0byBiaW5kICIgKyBnZXRDYXB0aW9uKCkgKyAiIHNlcnZpY2U6ICIgKyBpbnRlbnQpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBjYXRjaCAoU2VjdXJpdHlFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgICAgICBTbG9nLmUoVEFHLCAiVW5hYmxlIHRvIGJpbmQgIiArIGdldENhcHRpb24oKSArICIgc2VydmljZTogIiArIGludGVudCwgZXgpOworCisgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25TZXJ2aWNlRGlzY29ubmVjdGVkKENvbXBvbmVudE5hbWUgbmFtZSkgeworICAgICAgICAgICAgICAgICAgICBTbG9nLnYoVEFHLCBnZXRDYXB0aW9uKCkgKyAiIGNvbm5lY3Rpb24gbG9zdDogIiArIG5hbWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBpZiAoIW1Db250ZXh0LmJpbmRTZXJ2aWNlQXNVc2VyKGludGVudCwKKyAgICAgICAgICAgICAgICBzZXJ2aWNlQ29ubmVjdGlvbiwKKyAgICAgICAgICAgICAgICBDb250ZXh0LkJJTkRfQVVUT19DUkVBVEUgfCBDb250ZXh0LkJJTkRfRk9SRUdST1VORF9TRVJWSUNFLAorICAgICAgICAgICAgICAgIG5ldyBVc2VySGFuZGxlKHVzZXJpZCkpKSB7CisgICAgICAgICAgICAgICAgbVNlcnZpY2VzQmluZGluZy5yZW1vdmUoc2VydmljZXNCaW5kaW5nVGFnKTsKKyAgICAgICAgICAgICAgICBTbG9nLncoVEFHLCAiVW5hYmxlIHRvIGJpbmQgIiArIGdldENhcHRpb24oKSArICIgc2VydmljZTogIiArIGludGVudCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChTZWN1cml0eUV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgU2xvZy5lKFRBRywgIlVuYWJsZSB0byBiaW5kICIgKyBnZXRDYXB0aW9uKCkgKyAiIHNlcnZpY2U6ICIgKyBpbnRlbnQsIGV4KTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KIApAQCAtNTgzLDIwICs2NjQsMjQgQEAKICAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgdW5yZWdpc3RlclNlcnZpY2UoQ29tcG9uZW50TmFtZSBuYW1lLCBpbnQgdXNlcmlkKSB7CiAgICAgICAgIHN5bmNocm9uaXplZCAobU11dGV4KSB7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgTiA9IG1TZXJ2aWNlcy5zaXplKCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gTiAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgTWFuYWdlZFNlcnZpY2VJbmZvIGluZm8gPSBtU2VydmljZXMuZ2V0KGkpOwotICAgICAgICAgICAgICAgIGlmIChuYW1lLmVxdWFscyhpbmZvLmNvbXBvbmVudCkKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIGluZm8udXNlcmlkID09IHVzZXJpZCkgewotICAgICAgICAgICAgICAgICAgICByZW1vdmVTZXJ2aWNlTG9ja2VkKGkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoaW5mby5jb25uZWN0aW9uICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbUNvbnRleHQudW5iaW5kU2VydmljZShpbmZvLmNvbm5lY3Rpb24pOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc29tZXRoaW5nIGhhcHBlbmVkIHRvIHRoZSBzZXJ2aWNlOiB3ZSB0aGluayB3ZSBoYXZlIGEgY29ubmVjdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ1dCBpdCdzIGJvZ3VzLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNsb2cuZShUQUcsIGdldENhcHRpb24oKSArICIgIiArIG5hbWUgKyAiIGNvdWxkIG5vdCBiZSB1bmJvdW5kOiAiICsgZXgpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgdW5yZWdpc3RlclNlcnZpY2VMb2NrZWQobmFtZSwgdXNlcmlkKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCB1bnJlZ2lzdGVyU2VydmljZUxvY2tlZChDb21wb25lbnROYW1lIG5hbWUsIGludCB1c2VyaWQpIHsKKyAgICAgICAgZmluYWwgaW50IE4gPSBtU2VydmljZXMuc2l6ZSgpOworICAgICAgICBmb3IgKGludCBpID0gTiAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgICAgICBmaW5hbCBNYW5hZ2VkU2VydmljZUluZm8gaW5mbyA9IG1TZXJ2aWNlcy5nZXQoaSk7CisgICAgICAgICAgICBpZiAobmFtZS5lcXVhbHMoaW5mby5jb21wb25lbnQpCisgICAgICAgICAgICAgICAgJiYgaW5mby51c2VyaWQgPT0gdXNlcmlkKSB7CisgICAgICAgICAgICAgICAgcmVtb3ZlU2VydmljZUxvY2tlZChpKTsKKyAgICAgICAgICAgICAgICBpZiAoaW5mby5jb25uZWN0aW9uICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1Db250ZXh0LnVuYmluZFNlcnZpY2UoaW5mby5jb25uZWN0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBzb21ldGhpbmcgaGFwcGVuZWQgdG8gdGhlIHNlcnZpY2U6IHdlIHRoaW5rIHdlIGhhdmUgYSBjb25uZWN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBidXQgaXQncyBib2d1cy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNsb2cuZShUQUcsIGdldENhcHRpb24oKSArICIgIiArIG5hbWUgKyAiIGNvdWxkIG5vdCBiZSB1bmJvdW5kOiAiICsgZXgpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtNjM5LDExICs3MjQsMTUgQEAKIAogICAgIHByaXZhdGUgTWFuYWdlZFNlcnZpY2VJbmZvIHJlZ2lzdGVyU2VydmljZUltcGwoZmluYWwgSUludGVyZmFjZSBzZXJ2aWNlLAogICAgICAgICAgICAgZmluYWwgQ29tcG9uZW50TmFtZSBjb21wb25lbnQsIGZpbmFsIGludCB1c2VyaWQpIHsKKyAgICAgICAgTWFuYWdlZFNlcnZpY2VJbmZvIGluZm8gPSBuZXdTZXJ2aWNlSW5mbyhzZXJ2aWNlLCBjb21wb25lbnQsIHVzZXJpZCwKKyAgICAgICAgICAgICAgICB0cnVlIC8qaXNTeXN0ZW0qLywgbnVsbCAvKmNvbm5lY3Rpb24qLywgQnVpbGQuVkVSU0lPTl9DT0RFUy5MT0xMSVBPUCk7CisgICAgICAgIHJldHVybiByZWdpc3RlclNlcnZpY2VJbXBsKGluZm8pOworICAgIH0KKworICAgIHByaXZhdGUgTWFuYWdlZFNlcnZpY2VJbmZvIHJlZ2lzdGVyU2VydmljZUltcGwoTWFuYWdlZFNlcnZpY2VJbmZvIGluZm8pIHsKICAgICAgICAgc3luY2hyb25pemVkIChtTXV0ZXgpIHsKICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgTWFuYWdlZFNlcnZpY2VJbmZvIGluZm8gPSBuZXdTZXJ2aWNlSW5mbyhzZXJ2aWNlLCBjb21wb25lbnQsIHVzZXJpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHRydWUgLyppc1N5c3RlbSovLCBudWxsLCBCdWlsZC5WRVJTSU9OX0NPREVTLkxPTExJUE9QKTsKLSAgICAgICAgICAgICAgICBzZXJ2aWNlLmFzQmluZGVyKCkubGlua1RvRGVhdGgoaW5mbywgMCk7CisgICAgICAgICAgICAgICAgaW5mby5zZXJ2aWNlLmFzQmluZGVyKCkubGlua1RvRGVhdGgoaW5mbywgMCk7CiAgICAgICAgICAgICAgICAgbVNlcnZpY2VzLmFkZChpbmZvKTsKICAgICAgICAgICAgICAgICByZXR1cm4gaW5mbzsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CkBAIC02NTgsNyArNzQ3LDcgQEAKICAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgdW5yZWdpc3RlclNlcnZpY2VJbXBsKElJbnRlcmZhY2Ugc2VydmljZSwgaW50IHVzZXJpZCkgewogICAgICAgICBNYW5hZ2VkU2VydmljZUluZm8gaW5mbyA9IHJlbW92ZVNlcnZpY2VJbXBsKHNlcnZpY2UsIHVzZXJpZCk7Ci0gICAgICAgIGlmIChpbmZvICE9IG51bGwgJiYgaW5mby5jb25uZWN0aW9uICE9IG51bGwpIHsKKyAgICAgICAgaWYgKGluZm8gIT0gbnVsbCAmJiBpbmZvLmNvbm5lY3Rpb24gIT0gbnVsbCAmJiAhaW5mby5pc0d1ZXN0KHRoaXMpKSB7CiAgICAgICAgICAgICBtQ29udGV4dC51bmJpbmRTZXJ2aWNlKGluZm8uY29ubmVjdGlvbik7CiAgICAgICAgIH0KICAgICB9CkBAIC03MTAsNiArNzk5LDEwIEBACiAgICAgICAgICAgICB0aGlzLnRhcmdldFNka1ZlcnNpb24gPSB0YXJnZXRTZGtWZXJzaW9uOwogICAgICAgICB9CiAKKyAgICAgICAgcHVibGljIGJvb2xlYW4gaXNHdWVzdChNYW5hZ2VkU2VydmljZXMgaG9zdCkgeworICAgICAgICAgICAgcmV0dXJuIE1hbmFnZWRTZXJ2aWNlcy50aGlzICE9IGhvc3Q7CisgICAgICAgIH0KKwogICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKICAgICAgICAgICAgIHJldHVybiBuZXcgU3RyaW5nQnVpbGRlcigiTWFuYWdlZFNlcnZpY2VJbmZvWyIpCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL25vdGlmaWNhdGlvbi9Ob3RpZmljYXRpb25NYW5hZ2VyU2VydmljZS5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9ub3RpZmljYXRpb24vTm90aWZpY2F0aW9uTWFuYWdlclNlcnZpY2UuamF2YQppbmRleCBiYjA3ZTlkLi45ZGNjY2M0IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL25vdGlmaWNhdGlvbi9Ob3RpZmljYXRpb25NYW5hZ2VyU2VydmljZS5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbm90aWZpY2F0aW9uL05vdGlmaWNhdGlvbk1hbmFnZXJTZXJ2aWNlLmphdmEKQEAgLTMzLDEyICszMywxNCBAQAogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnNlcnZpY2Uubm90aWZpY2F0aW9uLk5vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZS5SYW5raW5nLklNUE9SVEFOQ0VfSElHSDsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5zZXJ2aWNlLm5vdGlmaWNhdGlvbi5Ob3RpZmljYXRpb25MaXN0ZW5lclNlcnZpY2UuU1VQUFJFU1NFRF9FRkZFQ1RfTElHSFRTOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnNlcnZpY2Uubm90aWZpY2F0aW9uLk5vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZS5TVVBQUkVTU0VEX0VGRkVDVF9QRUVLOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnNlcnZpY2Uubm90aWZpY2F0aW9uLk5vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZS5TVVBQUkVTU0VEX0VGRkVDVF9TQ1JFRU5fT047CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQuc2VydmljZS5ub3RpZmljYXRpb24uTm90aWZpY2F0aW9uTGlzdGVuZXJTZXJ2aWNlLlRSSU1fRlVMTDsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5zZXJ2aWNlLm5vdGlmaWNhdGlvbi5Ob3RpZmljYXRpb25MaXN0ZW5lclNlcnZpY2UuVFJJTV9MSUdIVDsKIGltcG9ydCBzdGF0aWMgb3JnLnhtbHB1bGwudjEuWG1sUHVsbFBhcnNlci5FTkRfRE9DVU1FTlQ7CiBpbXBvcnQgc3RhdGljIG9yZy54bWxwdWxsLnYxLlhtbFB1bGxQYXJzZXIuRU5EX1RBRzsKIGltcG9ydCBzdGF0aWMgb3JnLnhtbHB1bGwudjEuWG1sUHVsbFBhcnNlci5TVEFSVF9UQUc7CiAKK2ltcG9ydCBhbmRyb2lkLk1hbmlmZXN0OwogaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXJOYXRpdmU7CiBpbXBvcnQgYW5kcm9pZC5hcHAuQXBwR2xvYmFsczsKQEAgLTk2LDYgKzk4LDcgQEAKIGltcG9ydCBhbmRyb2lkLnNlcnZpY2Uubm90aWZpY2F0aW9uLklDb25kaXRpb25Qcm92aWRlcjsKIGltcG9ydCBhbmRyb2lkLnNlcnZpY2Uubm90aWZpY2F0aW9uLklOb3RpZmljYXRpb25MaXN0ZW5lcjsKIGltcG9ydCBhbmRyb2lkLnNlcnZpY2Uubm90aWZpY2F0aW9uLklTdGF0dXNCYXJOb3RpZmljYXRpb25Ib2xkZXI7CitpbXBvcnQgYW5kcm9pZC5zZXJ2aWNlLm5vdGlmaWNhdGlvbi5Ob3RpZmljYXRpb25Bc3Npc3RhbnRTZXJ2aWNlOwogaW1wb3J0IGFuZHJvaWQuc2VydmljZS5ub3RpZmljYXRpb24uTm90aWZpY2F0aW9uTGlzdGVuZXJTZXJ2aWNlOwogaW1wb3J0IGFuZHJvaWQuc2VydmljZS5ub3RpZmljYXRpb24uTm90aWZpY2F0aW9uUmFua2luZ1VwZGF0ZTsKIGltcG9ydCBhbmRyb2lkLnNlcnZpY2Uubm90aWZpY2F0aW9uLlN0YXR1c0Jhck5vdGlmaWNhdGlvbjsKQEAgLTEyNCw2ICsxMjcsOSBAQAogaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5ub3RpZmljYXRpb24uTWFuYWdlZFNlcnZpY2VzLk1hbmFnZWRTZXJ2aWNlSW5mbzsKIGltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIubm90aWZpY2F0aW9uLk1hbmFnZWRTZXJ2aWNlcy5Vc2VyUHJvZmlsZXM7CiBpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLnN0YXR1c2Jhci5TdGF0dXNCYXJNYW5hZ2VySW50ZXJuYWw7CitpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLnZyLlZyTWFuYWdlckludGVybmFsOworaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci52ci5WclN0YXRlTGlzdGVuZXI7CisKIGltcG9ydCBsaWJjb3JlLmlvLklvVXRpbHM7CiBpbXBvcnQgb3JnLmpzb24uSlNPTkFycmF5OwogaW1wb3J0IG9yZy5qc29uLkpTT05FeGNlcHRpb247CkBAIC0xNTEsNiArMTU3LDcgQEAKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuTWFwLkVudHJ5OwogaW1wb3J0IGphdmEudXRpbC5PYmplY3RzOworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0OwogCiAvKioge0BoaWRlfSAqLwogcHVibGljIGNsYXNzIE5vdGlmaWNhdGlvbk1hbmFnZXJTZXJ2aWNlIGV4dGVuZHMgU3lzdGVtU2VydmljZSB7CkBAIC0xNjQsMTEgKzE3MSwxMyBAQAogICAgIC8vIG1lc3NhZ2UgY29kZXMKICAgICBzdGF0aWMgZmluYWwgaW50IE1FU1NBR0VfVElNRU9VVCA9IDI7CiAgICAgc3RhdGljIGZpbmFsIGludCBNRVNTQUdFX1NBVkVfUE9MSUNZX0ZJTEUgPSAzOwotICAgIHN0YXRpYyBmaW5hbCBpbnQgTUVTU0FHRV9SRUNPTlNJREVSX1JBTktJTkcgPSA0OwotICAgIHN0YXRpYyBmaW5hbCBpbnQgTUVTU0FHRV9SQU5LSU5HX0NPTkZJR19DSEFOR0UgPSA1OwotICAgIHN0YXRpYyBmaW5hbCBpbnQgTUVTU0FHRV9TRU5EX1JBTktJTkdfVVBEQVRFID0gNjsKLSAgICBzdGF0aWMgZmluYWwgaW50IE1FU1NBR0VfTElTVEVORVJfSElOVFNfQ0hBTkdFRCA9IDc7Ci0gICAgc3RhdGljIGZpbmFsIGludCBNRVNTQUdFX0xJU1RFTkVSX05PVElGSUNBVElPTl9GSUxURVJfQ0hBTkdFRCA9IDg7CisgICAgc3RhdGljIGZpbmFsIGludCBNRVNTQUdFX1NFTkRfUkFOS0lOR19VUERBVEUgPSA0OworICAgIHN0YXRpYyBmaW5hbCBpbnQgTUVTU0FHRV9MSVNURU5FUl9ISU5UU19DSEFOR0VEID0gNTsKKyAgICBzdGF0aWMgZmluYWwgaW50IE1FU1NBR0VfTElTVEVORVJfTk9USUZJQ0FUSU9OX0ZJTFRFUl9DSEFOR0VEID0gNjsKKworICAgIC8vIHJhbmtpbmcgdGhyZWFkIG1lc3NhZ2VzCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1FU1NBR0VfUkVDT05TSURFUl9SQU5LSU5HID0gMTAwMDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUVTU0FHRV9SQU5LSU5HX1NPUlQgPSAxMDAxOwogCiAgICAgc3RhdGljIGZpbmFsIGludCBMT05HX0RFTEFZID0gMzUwMDsgLy8gMy41IHNlY29uZHMKICAgICBzdGF0aWMgZmluYWwgaW50IFNIT1JUX0RFTEFZID0gMjAwMDsgLy8gMiBzZWNvbmRzCkBAIC0yMDYsNiArMjE1LDggQEAKICAgICBBdWRpb01hbmFnZXJJbnRlcm5hbCBtQXVkaW9NYW5hZ2VySW50ZXJuYWw7CiAgICAgU3RhdHVzQmFyTWFuYWdlckludGVybmFsIG1TdGF0dXNCYXI7CiAgICAgVmlicmF0b3IgbVZpYnJhdG9yOworICAgIHByaXZhdGUgVnJNYW5hZ2VySW50ZXJuYWwgbVZyTWFuYWdlckludGVybmFsOworICAgIHByaXZhdGUgZmluYWwgTm90aWZpY2F0aW9uVnJMaXN0ZW5lciBtVnJMaXN0ZW5lciA9IG5ldyBOb3RpZmljYXRpb25Wckxpc3RlbmVyKCk7CiAKICAgICBmaW5hbCBJQmluZGVyIG1Gb3JlZ3JvdW5kVG9rZW4gPSBuZXcgQmluZGVyKCk7CiAgICAgcHJpdmF0ZSBXb3JrZXJIYW5kbGVyIG1IYW5kbGVyOwpAQCAtMjc2LDExICsyODcsMTMgQEAKIAogICAgIHByaXZhdGUgZmluYWwgVXNlclByb2ZpbGVzIG1Vc2VyUHJvZmlsZXMgPSBuZXcgVXNlclByb2ZpbGVzKCk7CiAgICAgcHJpdmF0ZSBOb3RpZmljYXRpb25MaXN0ZW5lcnMgbUxpc3RlbmVyczsKKyAgICBwcml2YXRlIE5vdGlmaWNhdGlvbkFzc2lzdGFudCBtQXNzaXN0YW50OwogICAgIHByaXZhdGUgQ29uZGl0aW9uUHJvdmlkZXJzIG1Db25kaXRpb25Qcm92aWRlcnM7CiAgICAgcHJpdmF0ZSBOb3RpZmljYXRpb25Vc2FnZVN0YXRzIG1Vc2FnZVN0YXRzOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1ZX1VJRCA9IFByb2Nlc3MubXlVaWQoKTsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTVlfUElEID0gUHJvY2Vzcy5teVBpZCgpOworICAgIHByaXZhdGUgUmFua2luZ0hhbmRsZXIgbVJhbmtpbmdIYW5kbGVyOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgQXJjaGl2ZSB7CiAgICAgICAgIGZpbmFsIGludCBtQnVmZmVyU2l6ZTsKQEAgLTczMyw2ICs3NDYsNyBAQAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG1MaXN0ZW5lcnMub25QYWNrYWdlc0NoYW5nZWQocXVlcnlSZXBsYWNlLCBwa2dMaXN0KTsKKyAgICAgICAgICAgICAgICBtQXNzaXN0YW50Lm9uUGFja2FnZXNDaGFuZ2VkKHF1ZXJ5UmVwbGFjZSwgcGtnTGlzdCk7CiAgICAgICAgICAgICAgICAgbUNvbmRpdGlvblByb3ZpZGVycy5vblBhY2thZ2VzQ2hhbmdlZChxdWVyeVJlcGxhY2UsIHBrZ0xpc3QpOwogICAgICAgICAgICAgICAgIG1SYW5raW5nSGVscGVyLm9uUGFja2FnZXNDaGFuZ2VkKHF1ZXJ5UmVwbGFjZSwgcGtnTGlzdCk7CiAgICAgICAgICAgICB9CkBAIC03NzQsNiArNzg4LDcgQEAKICAgICAgICAgICAgICAgICAvLyBSZWZyZXNoIG1hbmFnZWQgc2VydmljZXMKICAgICAgICAgICAgICAgICBtQ29uZGl0aW9uUHJvdmlkZXJzLm9uVXNlclN3aXRjaGVkKHVzZXIpOwogICAgICAgICAgICAgICAgIG1MaXN0ZW5lcnMub25Vc2VyU3dpdGNoZWQodXNlcik7CisgICAgICAgICAgICAgICAgbUFzc2lzdGFudC5vblVzZXJTd2l0Y2hlZCh1c2VyKTsKICAgICAgICAgICAgICAgICBtWmVuTW9kZUhlbHBlci5vblVzZXJTd2l0Y2hlZCh1c2VyKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uLmVxdWFscyhJbnRlbnQuQUNUSU9OX1VTRVJfQURERUQpKSB7CiAgICAgICAgICAgICAgICAgbVVzZXJQcm9maWxlcy51cGRhdGVDYWNoZShjb250ZXh0KTsKQEAgLTgxNiw2ICs4MzEsMTQgQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIHByaXZhdGUgZmluYWwgY2xhc3MgTm90aWZpY2F0aW9uVnJMaXN0ZW5lciBleHRlbmRzIFZyU3RhdGVMaXN0ZW5lciB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvblZyU3RhdGVDaGFuZ2VkKGZpbmFsIGJvb2xlYW4gZW5hYmxlZCkgeworICAgICAgICAgICAgbUxpc3RlbmVycy5zZXRDYXRlZ29yeVN0YXRlKE5vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZS5DQVRFR09SWV9WUl9OT1RJRklDQVRJT05TLAorICAgICAgICAgICAgICAgIGVuYWJsZWQpOworICAgICAgICB9CisgICAgfQorCiAgICAgcHJpdmF0ZSBTZXR0aW5nc09ic2VydmVyIG1TZXR0aW5nc09ic2VydmVyOwogICAgIHByaXZhdGUgWmVuTW9kZUhlbHBlciBtWmVuTW9kZUhlbHBlcjsKIApAQCAtODYxLDggKzg4NCw5IEBACiAgICAgICAgICAgICBleHRyYWN0b3JOYW1lcyA9IG5ldyBTdHJpbmdbMF07CiAgICAgICAgIH0KICAgICAgICAgbVVzYWdlU3RhdHMgPSBuZXcgTm90aWZpY2F0aW9uVXNhZ2VTdGF0cyhnZXRDb250ZXh0KCkpOworICAgICAgICBtUmFua2luZ0hhbmRsZXIgPSBuZXcgUmFua2luZ0hhbmRsZXJXb3JrZXIobVJhbmtpbmdUaHJlYWQuZ2V0TG9vcGVyKCkpOwogICAgICAgICBtUmFua2luZ0hlbHBlciA9IG5ldyBSYW5raW5nSGVscGVyKGdldENvbnRleHQoKSwKLSAgICAgICAgICAgICAgICBuZXcgUmFua2luZ1dvcmtlckhhbmRsZXIobVJhbmtpbmdUaHJlYWQuZ2V0TG9vcGVyKCkpLAorICAgICAgICAgICAgICAgIG1SYW5raW5nSGFuZGxlciwKICAgICAgICAgICAgICAgICBtVXNhZ2VTdGF0cywKICAgICAgICAgICAgICAgICBleHRyYWN0b3JOYW1lcyk7CiAgICAgICAgIG1Db25kaXRpb25Qcm92aWRlcnMgPSBuZXcgQ29uZGl0aW9uUHJvdmlkZXJzKGdldENvbnRleHQoKSwgbUhhbmRsZXIsIG1Vc2VyUHJvZmlsZXMpOwpAQCAtODk2LDYgKzkyMCw3IEBACiAgICAgICAgIGltcG9ydE9sZEJsb2NrRGIoKTsKIAogICAgICAgICBtTGlzdGVuZXJzID0gbmV3IE5vdGlmaWNhdGlvbkxpc3RlbmVycygpOworICAgICAgICBtQXNzaXN0YW50ID0gbmV3IE5vdGlmaWNhdGlvbkFzc2lzdGFudCgpOwogICAgICAgICBtU3RhdHVzQmFyID0gZ2V0TG9jYWxTZXJ2aWNlKFN0YXR1c0Jhck1hbmFnZXJJbnRlcm5hbC5jbGFzcyk7CiAgICAgICAgIG1TdGF0dXNCYXIuc2V0Tm90aWZpY2F0aW9uRGVsZWdhdGUobU5vdGlmaWNhdGlvbkRlbGVnYXRlKTsKIApAQCAtMTAwNCwxMiArMTAyOSwxNSBAQAogICAgICAgICAgICAgLy8gR3JhYiBvdXIgb3B0aW9uYWwgQXVkaW9TZXJ2aWNlCiAgICAgICAgICAgICBtQXVkaW9NYW5hZ2VyID0gKEF1ZGlvTWFuYWdlcikgZ2V0Q29udGV4dCgpLmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5BVURJT19TRVJWSUNFKTsKICAgICAgICAgICAgIG1BdWRpb01hbmFnZXJJbnRlcm5hbCA9IGdldExvY2FsU2VydmljZShBdWRpb01hbmFnZXJJbnRlcm5hbC5jbGFzcyk7CisgICAgICAgICAgICBtVnJNYW5hZ2VySW50ZXJuYWwgPSBnZXRMb2NhbFNlcnZpY2UoVnJNYW5hZ2VySW50ZXJuYWwuY2xhc3MpOworICAgICAgICAgICAgbVZyTWFuYWdlckludGVybmFsLnJlZ2lzdGVyTGlzdGVuZXIobVZyTGlzdGVuZXIpOwogICAgICAgICAgICAgbVplbk1vZGVIZWxwZXIub25TeXN0ZW1SZWFkeSgpOwogICAgICAgICB9IGVsc2UgaWYgKHBoYXNlID09IFN5c3RlbVNlcnZpY2UuUEhBU0VfVEhJUkRfUEFSVFlfQVBQU19DQU5fU1RBUlQpIHsKICAgICAgICAgICAgIC8vIFRoaXMgb2JzZXJ2ZXIgd2lsbCBmb3JjZSBhbiB1cGRhdGUgd2hlbiBvYnNlcnZlIGlzIGNhbGxlZCwgY2F1c2luZyB1cyB0bwogICAgICAgICAgICAgLy8gYmluZCB0byBsaXN0ZW5lciBzZXJ2aWNlcy4KICAgICAgICAgICAgIG1TZXR0aW5nc09ic2VydmVyLm9ic2VydmUoKTsKICAgICAgICAgICAgIG1MaXN0ZW5lcnMub25Cb290UGhhc2VBcHBzQ2FuU3RhcnQoKTsKKyAgICAgICAgICAgIG1Bc3Npc3RhbnQub25Cb290UGhhc2VBcHBzQ2FuU3RhcnQoKTsKICAgICAgICAgICAgIG1Db25kaXRpb25Qcm92aWRlcnMub25Cb290UGhhc2VBcHBzQ2FuU3RhcnQoKTsKICAgICAgICAgfQogICAgIH0KQEAgLTEyNDgsNiArMTI3NiwyMSBAQAogICAgICAgICAgICAgcmV0dXJuIG1SYW5raW5nSGVscGVyLmdldFRvcGljSW1wb3J0YW5jZShwa2csIHVpZCwgdG9waWMpOwogICAgICAgICB9CiAKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHNldEFwcEltcG9ydGFuY2UoU3RyaW5nIHBrZywgaW50IHVpZCwgaW50IGltcG9ydGFuY2UpIHsKKyAgICAgICAgICAgIGVuZm9yY2VTeXN0ZW1PclN5c3RlbVVJKCJDYWxsZXIgbm90IHN5c3RlbSBvciBzeXN0ZW11aSIpOworICAgICAgICAgICAgc2V0Tm90aWZpY2F0aW9uc0VuYWJsZWRGb3JQYWNrYWdlSW1wbChwa2csIHVpZCwKKyAgICAgICAgICAgICAgICAgICAgaW1wb3J0YW5jZSAhPSBOb3RpZmljYXRpb25MaXN0ZW5lclNlcnZpY2UuUmFua2luZy5JTVBPUlRBTkNFX05PTkUpOworICAgICAgICAgICAgbVJhbmtpbmdIZWxwZXIuc2V0QXBwSW1wb3J0YW5jZShwa2csIHVpZCwgaW1wb3J0YW5jZSk7CisgICAgICAgICAgICBzYXZlUG9saWN5RmlsZSgpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBib29sZWFuIGRvZXNBcHBVc2VUb3BpY3MoU3RyaW5nIHBrZywgaW50IHVpZCkgeworICAgICAgICAgICAgZW5mb3JjZVN5c3RlbU9yU3lzdGVtVUkoIkNhbGxlciBub3Qgc3lzdGVtIG9yIHN5c3RlbXVpIik7CisgICAgICAgICAgICByZXR1cm4gbVJhbmtpbmdIZWxwZXIuZG9lc0FwcFVzZVRvcGljcyhwa2csIHVpZCk7CisgICAgICAgIH0KKwogICAgICAgICAvKioKICAgICAgICAgICogU3lzdGVtLW9ubHkgQVBJIGZvciBnZXR0aW5nIGEgbGlzdCBvZiBjdXJyZW50IChpLmUuIG5vdCBjbGVhcmVkKSBub3RpZmljYXRpb25zLgogICAgICAgICAgKgpAQCAtMTg2Niw2ICsxOTA5LDIyIEBACiAgICAgICAgICAgICAgICAgQmluZGVyLnJlc3RvcmVDYWxsaW5nSWRlbnRpdHkoaWRlbnRpdHkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHNldEltcG9ydGFuY2VGcm9tQXNzaXN0YW50KElOb3RpZmljYXRpb25MaXN0ZW5lciB0b2tlbiwgU3RyaW5nIGtleSwKKyAgICAgICAgICAgICAgICBpbnQgaW1wb3J0YW5jZSwgQ2hhclNlcXVlbmNlIGV4cGxhbmF0aW9uKSB7CisgICAgICAgICAgICBmaW5hbCBsb25nIGlkZW50aXR5ID0gQmluZGVyLmNsZWFyQ2FsbGluZ0lkZW50aXR5KCk7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAobU5vdGlmaWNhdGlvbkxpc3QpIHsKKyAgICAgICAgICAgICAgICAgICAgbUFzc2lzdGFudC5jaGVja1NlcnZpY2VUb2tlbkxvY2tlZCh0b2tlbik7CisgICAgICAgICAgICAgICAgICAgIE5vdGlmaWNhdGlvblJlY29yZCBuID0gbU5vdGlmaWNhdGlvbnNCeUtleS5nZXQoa2V5KTsKKyAgICAgICAgICAgICAgICAgICAgbi5zZXRJbXBvcnRhbmNlKGltcG9ydGFuY2UsIGV4cGxhbmF0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgbVJhbmtpbmdIYW5kbGVyLnJlcXVlc3RTb3J0KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICBCaW5kZXIucmVzdG9yZUNhbGxpbmdJZGVudGl0eShpZGVudGl0eSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9OwogCiAgICAgcHJpdmF0ZSBTdHJpbmcgZGlzYWJsZU5vdGlmaWNhdGlvbkVmZmVjdHMoTm90aWZpY2F0aW9uUmVjb3JkIHJlY29yZCkgewpAQCAtMjAwNyw2ICsyMDY2LDggQEAKICAgICAgICAgICAgICAgICAgICAgcHcucHJpbnQobGlzdGVuZXIuY29tcG9uZW50KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcHcucHJpbnRsbignKScpOworICAgICAgICAgICAgICAgIHB3LnByaW50bG4oIlxuICBOb3RpZmljYXRpb24gYXNzaXN0YW50OiIpOworICAgICAgICAgICAgICAgIG1Bc3Npc3RhbnQuZHVtcChwdywgZmlsdGVyKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHB3LnByaW50bG4oIlxuICBQb2xpY3kgYWNjZXNzOiIpOwogICAgICAgICAgICAgcHcucHJpbnQoIiAgICBtUG9saWN5QWNjZXNzOiAiKTsgcHcucHJpbnRsbihtUG9saWN5QWNjZXNzKTsKQEAgLTIwNDUsMTIgKzIxMDYsMTIgQEAKICAgICAgICAgZm9yIChVc2VySW5mbyB1c2VyIDogVXNlck1hbmFnZXIuZ2V0KGdldENvbnRleHQoKSkuZ2V0VXNlcnMoKSkgewogICAgICAgICAgICAgZmluYWwgaW50IHVzZXJJZCA9IHVzZXIuZ2V0VXNlckhhbmRsZSgpLmdldElkZW50aWZpZXIoKTsKICAgICAgICAgICAgIGZpbmFsIFBhY2thZ2VNYW5hZ2VyIHBhY2thZ2VNYW5hZ2VyID0gZ2V0Q29udGV4dCgpLmdldFBhY2thZ2VNYW5hZ2VyKCk7Ci0gICAgICAgICAgICBMaXN0PFBhY2thZ2VJbmZvPiBwYWNrYWdlcyA9IHBhY2thZ2VNYW5hZ2VyLmdldEluc3RhbGxlZFBhY2thZ2VzKDAsIHVzZXJJZCk7CisgICAgICAgICAgICBMaXN0PFBhY2thZ2VJbmZvPiBwYWNrYWdlcyA9IHBhY2thZ2VNYW5hZ2VyLmdldEluc3RhbGxlZFBhY2thZ2VzQXNVc2VyKDAsIHVzZXJJZCk7CiAgICAgICAgICAgICBmaW5hbCBpbnQgcGFja2FnZUNvdW50ID0gcGFja2FnZXMuc2l6ZSgpOwogICAgICAgICAgICAgZm9yIChpbnQgcCA9IDA7IHAgPCBwYWNrYWdlQ291bnQ7IHArKykgewogICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBwYWNrYWdlTmFtZSA9IHBhY2thZ2VzLmdldChwKS5wYWNrYWdlTmFtZTsKICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyID09IG51bGwgfHwgZmlsdGVyLm1hdGNoZXMocGFja2FnZU5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpbmFsIGludCB1aWQgPSBwYWNrYWdlTWFuYWdlci5nZXRQYWNrYWdlVWlkKHBhY2thZ2VOYW1lLCB1c2VySWQpOworICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgdWlkID0gcGFja2FnZU1hbmFnZXIuZ2V0UGFja2FnZVVpZEFzVXNlcihwYWNrYWdlTmFtZSwgdXNlcklkKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFjaGVja05vdGlmaWNhdGlvbk9wKHBhY2thZ2VOYW1lLCB1aWQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlTmFtZXMuYWRkKHBhY2thZ2VOYW1lKTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjUwMyw5ICsyNTY0LDE0IEBACiAgICAgICAgICAgICB1cGRhdGVMaWdodHNMb2NrZWQoKTsKICAgICAgICAgfQogICAgICAgICBpZiAoYnV6eiB8fCBiZWVwIHx8IGJsaW5rKSB7Ci0gICAgICAgICAgICBFdmVudExvZ1RhZ3Mud3JpdGVOb3RpZmljYXRpb25BbGVydChyZWNvcmQuZ2V0S2V5KCksCi0gICAgICAgICAgICAgICAgICAgIGJ1enogPyAxIDogMCwgYmVlcCA/IDEgOiAwLCBibGluayA/IDEgOiAwKTsKLSAgICAgICAgICAgIG1IYW5kbGVyLnBvc3QobUJ1enpCZWVwQmxpbmtlZCk7CisgICAgICAgICAgICBpZiAoKChyZWNvcmQuZ2V0U3VwcHJlc3NlZFZpc3VhbEVmZmVjdHMoKQorICAgICAgICAgICAgICAgICAgICAmIE5vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZS5TVVBQUkVTU0VEX0VGRkVDVF9TQ1JFRU5fT04pICE9IDApKSB7CisgICAgICAgICAgICAgICAgaWYgKERCRykgU2xvZy52KFRBRywgIlN1cHByZXNzZWQgU3lzdGVtVUkgZnJvbSB0cmlnZ2VyaW5nIHNjcmVlbiBvbiIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBFdmVudExvZ1RhZ3Mud3JpdGVOb3RpZmljYXRpb25BbGVydChyZWNvcmQuZ2V0S2V5KCksCisgICAgICAgICAgICAgICAgICAgICAgICBidXp6ID8gMSA6IDAsIGJlZXAgPyAxIDogMCwgYmxpbmsgPyAxIDogMCk7CisgICAgICAgICAgICAgICAgbUhhbmRsZXIucG9zdChtQnV6ekJlZXBCbGlua2VkKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIApAQCAtMjY1Niw3ICsyNzIyLDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBoYW5kbGVSYW5raW5nQ29uZmlnQ2hhbmdlKCkgeworICAgIHByaXZhdGUgdm9pZCBoYW5kbGVSYW5raW5nU29ydCgpIHsKICAgICAgICAgc3luY2hyb25pemVkIChtTm90aWZpY2F0aW9uTGlzdCkgewogICAgICAgICAgICAgZmluYWwgaW50IE4gPSBtTm90aWZpY2F0aW9uTGlzdC5zaXplKCk7CiAgICAgICAgICAgICBBcnJheUxpc3Q8U3RyaW5nPiBvcmRlckJlZm9yZSA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPihOKTsKQEAgLTI2NjcsOCArMjczMyw4IEBACiAgICAgICAgICAgICAgICAgdmlzaWJpbGl0aWVzW2ldID0gci5nZXRQYWNrYWdlVmlzaWJpbGl0eU92ZXJyaWRlKCk7CiAgICAgICAgICAgICAgICAgbVJhbmtpbmdIZWxwZXIuZXh0cmFjdFNpZ25hbHMocik7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBtUmFua2luZ0hlbHBlci5zb3J0KG1Ob3RpZmljYXRpb25MaXN0KTsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgbVJhbmtpbmdIZWxwZXIuc29ydChtTm90aWZpY2F0aW9uTGlzdCk7CiAgICAgICAgICAgICAgICAgZmluYWwgTm90aWZpY2F0aW9uUmVjb3JkIHIgPSBtTm90aWZpY2F0aW9uTGlzdC5nZXQoaSk7CiAgICAgICAgICAgICAgICAgaWYgKCFvcmRlckJlZm9yZS5nZXQoaSkuZXF1YWxzKHIuZ2V0S2V5KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICB8fCB2aXNpYmlsaXRpZXNbaV0gIT0gci5nZXRQYWNrYWdlVmlzaWJpbGl0eU92ZXJyaWRlKCkpIHsKQEAgLTI2ODQsNyArMjc1MCw4IEBACiAgICAgICAgIHJlY29yZC5zZXRJbnRlcmNlcHRlZChtWmVuTW9kZUhlbHBlci5zaG91bGRJbnRlcmNlcHQocmVjb3JkKSk7CiAgICAgICAgIGlmIChyZWNvcmQuaXNJbnRlcmNlcHRlZCgpKSB7CiAgICAgICAgICAgICBpbnQgc3VwcHJlc3NlZCA9IChtWmVuTW9kZUhlbHBlci5zaG91bGRTdXBwcmVzc0xpZ2h0KCkgPyBTVVBQUkVTU0VEX0VGRkVDVF9MSUdIVFMgOiAwKQotICAgICAgICAgICAgICAgICAgICB8IChtWmVuTW9kZUhlbHBlci5zaG91bGRTdXBwcmVzc1BlZWsoKSA/IFNVUFBSRVNTRURfRUZGRUNUX1BFRUsgOiAwKTsKKyAgICAgICAgICAgICAgICAgICAgfCAobVplbk1vZGVIZWxwZXIuc2hvdWxkU3VwcHJlc3NQZWVrKCkgPyBTVVBQUkVTU0VEX0VGRkVDVF9QRUVLIDogMCkKKyAgICAgICAgICAgICAgICAgICAgfCAobVplbk1vZGVIZWxwZXIuc2hvdWxkU3VwcHJlc3NTY3JlZW5PbigpID8gU1VQUFJFU1NFRF9FRkZFQ1RfU0NSRUVOX09OIDogMCk7CiAgICAgICAgICAgICByZWNvcmQuc2V0U3VwcHJlc3NlZFZpc3VhbEVmZmVjdHMoc3VwcHJlc3NlZCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0yNzU4LDkgKzI4MjUsOSBAQAogCiAgICAgfQogCi0gICAgcHJpdmF0ZSBmaW5hbCBjbGFzcyBSYW5raW5nV29ya2VySGFuZGxlciBleHRlbmRzIEhhbmRsZXIKKyAgICBwcml2YXRlIGZpbmFsIGNsYXNzIFJhbmtpbmdIYW5kbGVyV29ya2VyIGV4dGVuZHMgSGFuZGxlciBpbXBsZW1lbnRzIFJhbmtpbmdIYW5kbGVyCiAgICAgewotICAgICAgICBwdWJsaWMgUmFua2luZ1dvcmtlckhhbmRsZXIoTG9vcGVyIGxvb3BlcikgeworICAgICAgICBwdWJsaWMgUmFua2luZ0hhbmRsZXJXb3JrZXIoTG9vcGVyIGxvb3BlcikgewogICAgICAgICAgICAgc3VwZXIobG9vcGVyKTsKICAgICAgICAgfQogCkBAIC0yNzcwLDExICsyODM3LDIzIEBACiAgICAgICAgICAgICAgICAgY2FzZSBNRVNTQUdFX1JFQ09OU0lERVJfUkFOS0lORzoKICAgICAgICAgICAgICAgICAgICAgaGFuZGxlUmFua2luZ1JlY29uc2lkZXJhdGlvbihtc2cpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIE1FU1NBR0VfUkFOS0lOR19DT05GSUdfQ0hBTkdFOgotICAgICAgICAgICAgICAgICAgICBoYW5kbGVSYW5raW5nQ29uZmlnQ2hhbmdlKCk7CisgICAgICAgICAgICAgICAgY2FzZSBNRVNTQUdFX1JBTktJTkdfU09SVDoKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlUmFua2luZ1NvcnQoKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCByZXF1ZXN0U29ydCgpIHsKKyAgICAgICAgICAgIHJlbW92ZU1lc3NhZ2VzKE1FU1NBR0VfUkFOS0lOR19TT1JUKTsKKyAgICAgICAgICAgIHNlbmRFbXB0eU1lc3NhZ2UoTUVTU0FHRV9SQU5LSU5HX1NPUlQpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgcmVxdWVzdFJlY29uc2lkZXJhdGlvbihSYW5raW5nUmVjb25zaWRlcmF0aW9uIHJlY29uKSB7CisgICAgICAgICAgICBNZXNzYWdlIG0gPSBNZXNzYWdlLm9idGFpbih0aGlzLAorICAgICAgICAgICAgICAgICAgICBOb3RpZmljYXRpb25NYW5hZ2VyU2VydmljZS5NRVNTQUdFX1JFQ09OU0lERVJfUkFOS0lORywgcmVjb24pOworICAgICAgICAgICAgbG9uZyBkZWxheSA9IHJlY29uLmdldERlbGF5KFRpbWVVbml0Lk1JTExJU0VDT05EUyk7CisgICAgICAgICAgICBzZW5kTWVzc2FnZURlbGF5ZWQobSwgZGVsYXkpOworICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gTm90aWZpY2F0aW9ucwpAQCAtMzI3NSw2ICszMzU0LDQ1IEBACiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAorICAgIHB1YmxpYyBjbGFzcyBOb3RpZmljYXRpb25Bc3Npc3RhbnQgZXh0ZW5kcyBNYW5hZ2VkU2VydmljZXMgeworCisgICAgICAgIHB1YmxpYyBOb3RpZmljYXRpb25Bc3Npc3RhbnQoKSB7CisgICAgICAgICAgICBzdXBlcihnZXRDb250ZXh0KCksIG1IYW5kbGVyLCBtTm90aWZpY2F0aW9uTGlzdCwgbVVzZXJQcm9maWxlcyk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHJvdGVjdGVkIENvbmZpZyBnZXRDb25maWcoKSB7CisgICAgICAgICAgICBDb25maWcgYyA9IG5ldyBDb25maWcoKTsKKyAgICAgICAgICAgIGMuY2FwdGlvbiA9ICJub3RpZmljYXRpb24gYXNzaXN0YW50IjsKKyAgICAgICAgICAgIGMuc2VydmljZUludGVyZmFjZSA9IE5vdGlmaWNhdGlvbkFzc2lzdGFudFNlcnZpY2UuU0VSVklDRV9JTlRFUkZBQ0U7CisgICAgICAgICAgICBjLnNlY3VyZVNldHRpbmdOYW1lID0gU2V0dGluZ3MuU2VjdXJlLkVOQUJMRURfTk9USUZJQ0FUSU9OX0FTU0lTVEFOVDsKKyAgICAgICAgICAgIGMuYmluZFBlcm1pc3Npb24gPSBNYW5pZmVzdC5wZXJtaXNzaW9uLkJJTkRfTk9USUZJQ0FUSU9OX0FTU0lTVEFOVF9TRVJWSUNFOworICAgICAgICAgICAgYy5zZXR0aW5nc0FjdGlvbiA9IFNldHRpbmdzLkFDVElPTl9NQU5BR0VfREVGQVVMVF9BUFBTX1NFVFRJTkdTOworICAgICAgICAgICAgYy5jbGllbnRMYWJlbCA9IFIuc3RyaW5nLm5vdGlmaWNhdGlvbl9hc3Npc3RhbnRfYmluZGluZ19sYWJlbDsKKyAgICAgICAgICAgIHJldHVybiBjOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHByb3RlY3RlZCBJSW50ZXJmYWNlIGFzSW50ZXJmYWNlKElCaW5kZXIgYmluZGVyKSB7CisgICAgICAgICAgICByZXR1cm4gSU5vdGlmaWNhdGlvbkxpc3RlbmVyLlN0dWIuYXNJbnRlcmZhY2UoYmluZGVyKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgYm9vbGVhbiBjaGVja1R5cGUoSUludGVyZmFjZSBzZXJ2aWNlKSB7CisgICAgICAgICAgICByZXR1cm4gc2VydmljZSBpbnN0YW5jZW9mIElOb3RpZmljYXRpb25MaXN0ZW5lcjsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgdm9pZCBvblNlcnZpY2VBZGRlZChNYW5hZ2VkU2VydmljZUluZm8gaW5mbykgeworICAgICAgICAgICAgbUxpc3RlbmVycy5yZWdpc3Rlckd1ZXN0U2VydmljZShpbmZvKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgdm9pZCBvblNlcnZpY2VSZW1vdmVkTG9ja2VkKE1hbmFnZWRTZXJ2aWNlSW5mbyByZW1vdmVkKSB7CisgICAgICAgICAgICBtTGlzdGVuZXJzLnVucmVnaXN0ZXJTZXJ2aWNlKHJlbW92ZWQuc2VydmljZSwgcmVtb3ZlZC51c2VyaWQpOworICAgICAgICB9CisgICAgfQorCiAgICAgcHVibGljIGNsYXNzIE5vdGlmaWNhdGlvbkxpc3RlbmVycyBleHRlbmRzIE1hbmFnZWRTZXJ2aWNlcyB7CiAKICAgICAgICAgcHJpdmF0ZSBmaW5hbCBBcnJheVNldDxNYW5hZ2VkU2VydmljZUluZm8+IG1MaWdodFRyaW1MaXN0ZW5lcnMgPSBuZXcgQXJyYXlTZXQ8PigpOwpAQCAtMzMwMiw2ICszNDIwLDExIEBACiAgICAgICAgIH0KIAogICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHJvdGVjdGVkIGJvb2xlYW4gY2hlY2tUeXBlKElJbnRlcmZhY2Ugc2VydmljZSkgeworICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2UgaW5zdGFuY2VvZiBJTm90aWZpY2F0aW9uTGlzdGVuZXI7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHVibGljIHZvaWQgb25TZXJ2aWNlQWRkZWQoTWFuYWdlZFNlcnZpY2VJbmZvIGluZm8pIHsKICAgICAgICAgICAgIGZpbmFsIElOb3RpZmljYXRpb25MaXN0ZW5lciBsaXN0ZW5lciA9IChJTm90aWZpY2F0aW9uTGlzdGVuZXIpIGluZm8uc2VydmljZTsKICAgICAgICAgICAgIGZpbmFsIE5vdGlmaWNhdGlvblJhbmtpbmdVcGRhdGUgdXBkYXRlOwpAQCAtMzMzNiw3ICszNDU5LDYgQEAKIAogICAgICAgICBwdWJsaWMgaW50IGdldE9uTm90aWZpY2F0aW9uUG9zdGVkVHJpbShNYW5hZ2VkU2VydmljZUluZm8gaW5mbykgewogICAgICAgICAgICAgcmV0dXJuIG1MaWdodFRyaW1MaXN0ZW5lcnMuY29udGFpbnMoaW5mbykgPyBUUklNX0xJR0hUIDogVFJJTV9GVUxMOwotCiAgICAgICAgIH0KIAogICAgICAgICAvKioKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbm90aWZpY2F0aW9uL1JhbmtpbmdDb25maWcuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbm90aWZpY2F0aW9uL1JhbmtpbmdDb25maWcuamF2YQppbmRleCBhY2RkOTBhLi45YjEwZWYyIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL25vdGlmaWNhdGlvbi9SYW5raW5nQ29uZmlnLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9ub3RpZmljYXRpb24vUmFua2luZ0NvbmZpZy5qYXZhCkBAIC0zNSw0ICszNSw4IEBACiAgICAgdm9pZCBzZXRUb3BpY0ltcG9ydGFuY2UoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgdWlkLCBOb3RpZmljYXRpb24uVG9waWMgdG9waWMsIGludCBpbXBvcnRhbmNlKTsKIAogICAgIGludCBnZXRUb3BpY0ltcG9ydGFuY2UoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgdWlkLCBOb3RpZmljYXRpb24uVG9waWMgdG9waWMpOworCisgICAgdm9pZCBzZXRBcHBJbXBvcnRhbmNlKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHVpZCwgaW50IGltcG9ydGFuY2UpOworCisgICAgYm9vbGVhbiBkb2VzQXBwVXNlVG9waWNzKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHVpZCk7CiB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0lEb2NrRGl2aWRlclZpc2liaWxpdHlMaXN0ZW5lci5haWRsIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9ub3RpZmljYXRpb24vUmFua2luZ0hhbmRsZXIuamF2YQpzaW1pbGFyaXR5IGluZGV4IDY3JQpjb3B5IGZyb20gY29yZS9qYXZhL2FuZHJvaWQvdmlldy9JRG9ja0RpdmlkZXJWaXNpYmlsaXR5TGlzdGVuZXIuYWlkbApjb3B5IHRvIHNlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbm90aWZpY2F0aW9uL1JhbmtpbmdIYW5kbGVyLmphdmEKaW5kZXggYTdkNWNkYS4uODBiYjRmMCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9JRG9ja0RpdmlkZXJWaXNpYmlsaXR5TGlzdGVuZXIuYWlkbAorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL25vdGlmaWNhdGlvbi9SYW5raW5nSGFuZGxlci5qYXZhCkBAIC0xMywxNSArMTMsOSBAQAogICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KK3BhY2thZ2UgY29tLmFuZHJvaWQuc2VydmVyLm5vdGlmaWNhdGlvbjsKIAotcGFja2FnZSBhbmRyb2lkLnZpZXc7Ci0KLS8qKgotICAqIExpc3RlbmVyIGZvciBzaG93aW5nL2hpZGluZyBvZiB0aGUgZG9jayBkaXZpZGVyLiBXaWxsIGZpcmUgd2hlbiBhbiBhcHAgaXMgc2hvd24gaW4gc2lkZSBieSBzaWRlCi0gICogbW9kZSBhbmQgYSBkaXZpZGVyIHNob3VsZCBiZSBzaG93bi4KLSAgKgotICAqIEBoaWRlCi0gICovCi1vbmV3YXkgaW50ZXJmYWNlIElEb2NrRGl2aWRlclZpc2liaWxpdHlMaXN0ZW5lciB7Ci0gICAgdm9pZCBvbkRvY2tEaXZpZGVyVmlzaWJpbGl0eUNoYW5nZWQoYm9vbGVhbiB2aXNpYmxlKTsKK3B1YmxpYyBpbnRlcmZhY2UgUmFua2luZ0hhbmRsZXIgeworICAgIHB1YmxpYyB2b2lkIHJlcXVlc3RTb3J0KCk7CisgICAgcHVibGljIHZvaWQgcmVxdWVzdFJlY29uc2lkZXJhdGlvbihSYW5raW5nUmVjb25zaWRlcmF0aW9uIHJlY29uKTsKIH0KZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbm90aWZpY2F0aW9uL1JhbmtpbmdIZWxwZXIuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbm90aWZpY2F0aW9uL1JhbmtpbmdIZWxwZXIuamF2YQppbmRleCA1YTMxYzZhLi5mMWZkNDJjIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL25vdGlmaWNhdGlvbi9SYW5raW5nSGVscGVyLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9ub3RpZmljYXRpb24vUmFua2luZ0hlbHBlci5qYXZhCkBAIC0xOSwxMCArMTksNyBAQAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuTmFtZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKLWltcG9ydCBhbmRyb2lkLm9zLk1lc3NhZ2U7CiBpbXBvcnQgYW5kcm9pZC5vcy5Vc2VySGFuZGxlOwotaW1wb3J0IGFuZHJvaWQuc2VydmljZS5ub3RpZmljYXRpb24uTm90aWZpY2F0aW9uTGlzdGVuZXJTZXJ2aWNlOwogaW1wb3J0IGFuZHJvaWQuc2VydmljZS5ub3RpZmljYXRpb24uTm90aWZpY2F0aW9uTGlzdGVuZXJTZXJ2aWNlLlJhbmtpbmc7CiBpbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRVdGlsczsKIGltcG9ydCBhbmRyb2lkLnV0aWwuQXJyYXlNYXA7CkBAIC00MCw3ICszNyw2IEBACiBpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZVVuaXQ7CiAKIHB1YmxpYyBjbGFzcyBSYW5raW5nSGVscGVyIGltcGxlbWVudHMgUmFua2luZ0NvbmZpZyB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJSYW5raW5nSGVscGVyIjsKQEAgLTczLDEwICs2OSwxMCBAQAogICAgIHByaXZhdGUgZmluYWwgQXJyYXlNYXA8U3RyaW5nLCBSZWNvcmQ+IG1SZXN0b3JlZFdpdGhvdXRVaWRzID0gbmV3IEFycmF5TWFwPD4oKTsgLy8gcGtnID0+IFJlY29yZAogCiAgICAgcHJpdmF0ZSBmaW5hbCBDb250ZXh0IG1Db250ZXh0OwotICAgIHByaXZhdGUgZmluYWwgSGFuZGxlciBtUmFua2luZ0hhbmRsZXI7CisgICAgcHJpdmF0ZSBmaW5hbCBSYW5raW5nSGFuZGxlciBtUmFua2luZ0hhbmRsZXI7CiAKLSAgICBwdWJsaWMgUmFua2luZ0hlbHBlcihDb250ZXh0IGNvbnRleHQsIEhhbmRsZXIgcmFua2luZ0hhbmRsZXIsIE5vdGlmaWNhdGlvblVzYWdlU3RhdHMgdXNhZ2VTdGF0cywKLSAgICAgICAgICAgIFN0cmluZ1tdIGV4dHJhY3Rvck5hbWVzKSB7CisgICAgcHVibGljIFJhbmtpbmdIZWxwZXIoQ29udGV4dCBjb250ZXh0LCBSYW5raW5nSGFuZGxlciByYW5raW5nSGFuZGxlciwKKyAgICAgICAgICAgIE5vdGlmaWNhdGlvblVzYWdlU3RhdHMgdXNhZ2VTdGF0cywgU3RyaW5nW10gZXh0cmFjdG9yTmFtZXMpIHsKICAgICAgICAgbUNvbnRleHQgPSBjb250ZXh0OwogICAgICAgICBtUmFua2luZ0hhbmRsZXIgPSByYW5raW5nSGFuZGxlcjsKIApAQCAtMTE5LDEwICsxMTUsNyBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBSYW5raW5nUmVjb25zaWRlcmF0aW9uIHJlY29uID0gZXh0cmFjdG9yLnByb2Nlc3Mocik7CiAgICAgICAgICAgICAgICAgaWYgKHJlY29uICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSBtID0gTWVzc2FnZS5vYnRhaW4obVJhbmtpbmdIYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vdGlmaWNhdGlvbk1hbmFnZXJTZXJ2aWNlLk1FU1NBR0VfUkVDT05TSURFUl9SQU5LSU5HLCByZWNvbik7Ci0gICAgICAgICAgICAgICAgICAgIGxvbmcgZGVsYXkgPSByZWNvbi5nZXREZWxheShUaW1lVW5pdC5NSUxMSVNFQ09ORFMpOwotICAgICAgICAgICAgICAgICAgICBtUmFua2luZ0hhbmRsZXIuc2VuZE1lc3NhZ2VEZWxheWVkKG0sIGRlbGF5KTsKKyAgICAgICAgICAgICAgICAgICAgbVJhbmtpbmdIYW5kbGVyLnJlcXVlc3RSZWNvbnNpZGVyYXRpb24ocmVjb24pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0KSB7CiAgICAgICAgICAgICAgICAgU2xvZy53KFRBRywgIk5vdGlmaWNhdGlvblNpZ25hbEV4dHJhY3RvciBmYWlsZWQuIiwgdCk7CkBAIC0xNTUsNyArMTQ4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3JSZXN0b3JlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9UT0RPOiBodHRwOi8vYi8yMjM4ODAxMgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aWQgPSBwbS5nZXRQYWNrYWdlVWlkKG5hbWUsIFVzZXJIYW5kbGUuVVNFUl9TWVNURU0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aWQgPSBwbS5nZXRQYWNrYWdlVWlkQXNVc2VyKG5hbWUsIFVzZXJIYW5kbGUuVVNFUl9TWVNURU0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKE5hbWVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vb3AKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC0xNzAsNiArMTYzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IGdldE9yQ3JlYXRlUmVjb3JkKG5hbWUsIHVpZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICByLmltcG9ydGFuY2UgPSBzYWZlSW50KHBhcnNlciwgQVRUX0lNUE9SVEFOQ0UsIERFRkFVTFRfSU1QT1JUQU5DRSk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1pZ3JhdGUgcGFja2FnZSBsZXZlbCBzZXR0aW5ncyB0byB0aGUgZGVmYXVsdCB0b3BpYy4KICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1pZ2h0IGJlIG92ZXJ3cml0dGVuIGJ5IHBhcnNlVG9waWNzLgpAQCAtMjUxLDYgKzI0NSw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBvdXQuc3RhcnRUYWcobnVsbCwgVEFHX1BBQ0tBR0UpOwogICAgICAgICAgICAgb3V0LmF0dHJpYnV0ZShudWxsLCBBVFRfTkFNRSwgci5wa2cpOworICAgICAgICAgICAgb3V0LmF0dHJpYnV0ZShudWxsLCBBVFRfSU1QT1JUQU5DRSwgSW50ZWdlci50b1N0cmluZyhyLmltcG9ydGFuY2UpKTsKIAogICAgICAgICAgICAgaWYgKCFmb3JCYWNrdXApIHsKICAgICAgICAgICAgICAgICBvdXQuYXR0cmlidXRlKG51bGwsIEFUVF9VSUQsIEludGVnZXIudG9TdHJpbmcoci51aWQpKTsKQEAgLTI4NSw3ICsyODAsNyBAQAogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgewogICAgICAgICAgICAgbVNpZ25hbEV4dHJhY3RvcnNbaV0uc2V0Q29uZmlnKHRoaXMpOwogICAgICAgICB9Ci0gICAgICAgIG1SYW5raW5nSGFuZGxlci5zZW5kRW1wdHlNZXNzYWdlKE5vdGlmaWNhdGlvbk1hbmFnZXJTZXJ2aWNlLk1FU1NBR0VfUkFOS0lOR19DT05GSUdfQ0hBTkdFKTsKKyAgICAgICAgbVJhbmtpbmdIYW5kbGVyLnJlcXVlc3RTb3J0KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc29ydChBcnJheUxpc3Q8Tm90aWZpY2F0aW9uUmVjb3JkPiBub3RpZmljYXRpb25MaXN0KSB7CkBAIC00MjYsNiArNDIxLDMyIEBACiAgICAgICAgIHVwZGF0ZUNvbmZpZygpOwogICAgIH0KIAorICAgIC8qKgorICAgICAqIFNldHMgdGhlIGRlZmF1bHQgaW1wb3J0YW5jZSBmb3IgYWxsIG5ldyB0b3BpY3MgdGhhdCBhcHBlYXIgaW4gdGhlIGZ1dHVyZSwgYW5kIHJlc2V0cworICAgICAqIHRoZSBpbXBvcnRhbmNlIG9mIGFsbCBjdXJyZW50IHRvcGljcy4KKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBzZXRBcHBJbXBvcnRhbmNlKFN0cmluZyBwa2dOYW1lLCBpbnQgdWlkLCBpbnQgaW1wb3J0YW5jZSkgeworICAgICAgICBmaW5hbCBSZWNvcmQgciA9IGdldE9yQ3JlYXRlUmVjb3JkKHBrZ05hbWUsIHVpZCk7CisgICAgICAgIHIuaW1wb3J0YW5jZSA9IGltcG9ydGFuY2U7CisgICAgICAgIGZvciAoVG9waWMgdCA6ICByLnRvcGljcy52YWx1ZXMoKSkgeworICAgICAgICAgICAgdC5pbXBvcnRhbmNlID0gaW1wb3J0YW5jZTsKKyAgICAgICAgfQorICAgICAgICB1cGRhdGVDb25maWcoKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBkb2VzQXBwVXNlVG9waWNzKFN0cmluZyBwa2dOYW1lLCBpbnQgdWlkKSB7CisgICAgICAgIGZpbmFsIFJlY29yZCByID0gZ2V0T3JDcmVhdGVSZWNvcmQocGtnTmFtZSwgdWlkKTsKKyAgICAgICAgaW50IG51bVRvcGljcyA9IHIudG9waWNzLnNpemUoKTsKKyAgICAgICAgaWYgKG51bVRvcGljcyA9PSAwCisgICAgICAgICAgICAgICAgfHwgKG51bVRvcGljcyA9PSAxICYmIHIudG9waWNzLmNvbnRhaW5zS2V5KE5vdGlmaWNhdGlvbi5UT1BJQ19ERUZBVUxUKSkpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCiAgICAgcHJpdmF0ZSBUb3BpYyBnZXRPckNyZWF0ZVRvcGljKFJlY29yZCByLCBOb3RpZmljYXRpb24uVG9waWMgdG9waWMpIHsKICAgICAgICAgaWYgKHRvcGljID09IG51bGwpIHsKICAgICAgICAgICAgIHRvcGljID0gY3JlYXRlRGVmYXVsdFRvcGljKCk7CkBAIC00MzUsNiArNDU2LDcgQEAKICAgICAgICAgICAgIHJldHVybiB0OwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgdCA9IG5ldyBUb3BpYyh0b3BpYyk7CisgICAgICAgICAgICB0LmltcG9ydGFuY2UgPSByLmltcG9ydGFuY2U7CiAgICAgICAgICAgICByLnRvcGljcy5wdXQodG9waWMuZ2V0SWQoKSwgdCk7CiAgICAgICAgICAgICByZXR1cm4gdDsKICAgICAgICAgfQpAQCAtNDc3LDYgKzQ5OSw4IEBACiAgICAgICAgICAgICAgICAgcHcucHJpbnQoIiAoIik7CiAgICAgICAgICAgICAgICAgcHcucHJpbnQoci51aWQgPT0gUmVjb3JkLlVOS05PV05fVUlEID8gIlVOS05PV05fVUlEIiA6IEludGVnZXIudG9TdHJpbmcoci51aWQpKTsKICAgICAgICAgICAgICAgICBwdy5wcmludCgnKScpOworICAgICAgICAgICAgICAgIHB3LnByaW50KCIgaW1wb3J0YW5jZT0iKTsKKyAgICAgICAgICAgICAgICBwdy5wcmludChSYW5raW5nLmltcG9ydGFuY2VUb1N0cmluZyhyLmltcG9ydGFuY2UpKTsKICAgICAgICAgICAgICAgICBwdy5wcmludGxuKCk7CiAgICAgICAgICAgICAgICAgZm9yIChUb3BpYyB0IDogci50b3BpY3MudmFsdWVzKCkpIHsKICAgICAgICAgICAgICAgICAgICAgcHcucHJpbnQocHJlZml4KTsKQEAgLTUxMyw3ICs1MzcsNyBAQAogICAgICAgICAgICAgaWYgKHIgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgIC8vVE9ETzogaHR0cDovL2IvMjIzODgwMTIKLSAgICAgICAgICAgICAgICAgICAgci51aWQgPSBwbS5nZXRQYWNrYWdlVWlkKHIucGtnLCBVc2VySGFuZGxlLlVTRVJfU1lTVEVNKTsKKyAgICAgICAgICAgICAgICAgICAgci51aWQgPSBwbS5nZXRQYWNrYWdlVWlkQXNVc2VyKHIucGtnLCBVc2VySGFuZGxlLlVTRVJfU1lTVEVNKTsKICAgICAgICAgICAgICAgICAgICAgbVJlc3RvcmVkV2l0aG91dFVpZHMucmVtb3ZlKHBrZyk7CiAgICAgICAgICAgICAgICAgICAgIG1SZWNvcmRzLnB1dChyZWNvcmRLZXkoci5wa2csIHIudWlkKSwgcik7CiAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWQgPSB0cnVlOwpAQCAtNTMyLDYgKzU1Niw3IEBACiAKICAgICAgICAgU3RyaW5nIHBrZzsKICAgICAgICAgaW50IHVpZCA9IFVOS05PV05fVUlEOworICAgICAgICBpbnQgaW1wb3J0YW5jZSA9IERFRkFVTFRfSU1QT1JUQU5DRTsKICAgICAgICAgTWFwPFN0cmluZywgVG9waWM+IHRvcGljcyA9IG5ldyBBcnJheU1hcDw+KCk7CiAgICB9CiAKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbm90aWZpY2F0aW9uL1plbk1vZGVIZWxwZXIuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbm90aWZpY2F0aW9uL1plbk1vZGVIZWxwZXIuamF2YQppbmRleCA4NWMzY2Y4Li4yNzZjNmJhIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL25vdGlmaWNhdGlvbi9aZW5Nb2RlSGVscGVyLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9ub3RpZmljYXRpb24vWmVuTW9kZUhlbHBlci5qYXZhCkBAIC0xNTUsNiArMTU1LDEyIEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICBwdWJsaWMgYm9vbGVhbiBzaG91bGRTdXBwcmVzc1NjcmVlbk9uKCkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKG1Db25maWcpIHsKKyAgICAgICAgICAgIHJldHVybiAhbUNvbmZpZy5hbGxvd1NjcmVlbk9uOworICAgICAgICB9CisgICAgfQorCiAgICAgcHVibGljIHZvaWQgYWRkQ2FsbGJhY2soQ2FsbGJhY2sgY2FsbGJhY2spIHsKICAgICAgICAgbUNhbGxiYWNrcy5hZGQoY2FsbGJhY2spOwogICAgIH0KQEAgLTQzNSwxMSArNDQxLDEyIEBACiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgcHcucHJpbnRmKCJhbGxvdyhjYWxscz0lcyxjYWxsc0Zyb209JXMscmVwZWF0Q2FsbGVycz0lcyxtZXNzYWdlcz0lcyxtZXNzYWdlc0Zyb209JXMsIgotICAgICAgICAgICAgICAgICsgImV2ZW50cz0lcyxyZW1pbmRlcnM9JXMsbGlnaHRzPSVzLHBlZWs9JXMpXG4iLAorICAgICAgICAgICAgICAgICsgImV2ZW50cz0lcyxyZW1pbmRlcnM9JXMsbGlnaHRzPSVzLHBlZWs9JXMsc2NyZWVuT249JXMpXG4iLAogICAgICAgICAgICAgICAgIGNvbmZpZy5hbGxvd0NhbGxzLCBaZW5Nb2RlQ29uZmlnLnNvdXJjZVRvU3RyaW5nKGNvbmZpZy5hbGxvd0NhbGxzRnJvbSksCiAgICAgICAgICAgICAgICAgY29uZmlnLmFsbG93UmVwZWF0Q2FsbGVycywgY29uZmlnLmFsbG93TWVzc2FnZXMsCiAgICAgICAgICAgICAgICAgWmVuTW9kZUNvbmZpZy5zb3VyY2VUb1N0cmluZyhjb25maWcuYWxsb3dNZXNzYWdlc0Zyb20pLAotICAgICAgICAgICAgICAgIGNvbmZpZy5hbGxvd0V2ZW50cywgY29uZmlnLmFsbG93UmVtaW5kZXJzLCBjb25maWcuYWxsb3dMaWdodHMsIGNvbmZpZy5hbGxvd1BlZWspOworICAgICAgICAgICAgICAgIGNvbmZpZy5hbGxvd0V2ZW50cywgY29uZmlnLmFsbG93UmVtaW5kZXJzLCBjb25maWcuYWxsb3dMaWdodHMsIGNvbmZpZy5hbGxvd1BlZWssCisgICAgICAgICAgICAgICAgY29uZmlnLmFsbG93U2NyZWVuT24pOwogICAgICAgICBwdy5wcmludChwcmVmaXgpOyBwdy5wcmludCgiICBtYW51YWxSdWxlPSIpOyBwdy5wcmludGxuKGNvbmZpZy5tYW51YWxSdWxlKTsKICAgICAgICAgaWYgKGNvbmZpZy5hdXRvbWF0aWNSdWxlcy5pc0VtcHR5KCkpIHJldHVybjsKICAgICAgICAgZmluYWwgaW50IE4gPSBjb25maWcuYXV0b21hdGljUnVsZXMuc2l6ZSgpOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wbS9EZWZhdWx0UGVybWlzc2lvbkdyYW50UG9saWN5LmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BtL0RlZmF1bHRQZXJtaXNzaW9uR3JhbnRQb2xpY3kuamF2YQppbmRleCAwNzNiNGYwMy4uYjI1NGYyOSAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wbS9EZWZhdWx0UGVybWlzc2lvbkdyYW50UG9saWN5LmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wbS9EZWZhdWx0UGVybWlzc2lvbkdyYW50UG9saWN5LmphdmEKQEAgLTU3LDcgKzU3LDcgQEAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIkRlZmF1bHRQZXJtR3JhbnRQb2xpY3kiOyAvLyBtdXN0IGJlIDw9IDIzIGNoYXJzCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwogCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERFRkFVTFRfRkxBR1MgPSBQYWNrYWdlTWFuYWdlci5HRVRfRU5DUllQVElPTl9VTkFXQVJFX0NPTVBPTkVOVFM7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERFRkFVTFRfRkxBR1MgPSBQYWNrYWdlTWFuYWdlci5NQVRDSF9FTkNSWVBUSU9OX0FXQVJFX0FORF9VTkFXQVJFOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFVRElPX01JTUVfVFlQRSA9ICJhdWRpby9tcGVnIjsKIApAQCAtNTk0LDYgKzU5NCwxNCBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgLy8gUHJpbnQgU3Bvb2xlcgorICAgICAgICAgICAgUGFja2FnZVBhcnNlci5QYWNrYWdlIHByaW50U3Bvb2xlclBhY2thZ2UgPSBnZXRTeXN0ZW1QYWNrYWdlTFByKAorICAgICAgICAgICAgICAgICAgICAiY29tLmFuZHJvaWQucHJpbnRzcG9vbGVyIik7CisgICAgICAgICAgICBpZiAocHJpbnRTcG9vbGVyUGFja2FnZSAhPSBudWxsCisgICAgICAgICAgICAgICAgICAgICYmIGRvZXNQYWNrYWdlU3VwcG9ydFJ1bnRpbWVQZXJtaXNzaW9ucyhwcmludFNwb29sZXJQYWNrYWdlKSkgeworICAgICAgICAgICAgICAgIGdyYW50UnVudGltZVBlcm1pc3Npb25zTFB3KHByaW50U3Bvb2xlclBhY2thZ2UsIExPQ0FUSU9OX1BFUk1JU1NJT05TLCB0cnVlLCB1c2VySWQpOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBtU2VydmljZS5tU2V0dGluZ3Mub25EZWZhdWx0UnVudGltZVBlcm1pc3Npb25zR3JhbnRlZExQcih1c2VySWQpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wbS9QYWNrYWdlTWFuYWdlclNlcnZpY2UuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvcG0vUGFja2FnZU1hbmFnZXJTZXJ2aWNlLmphdmEKaW5kZXggZGZiMDFlYi4uOTlmNDAzMSAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wbS9QYWNrYWdlTWFuYWdlclNlcnZpY2UuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BtL1BhY2thZ2VNYW5hZ2VyU2VydmljZS5qYXZhCkBAIC01NCwxMSArNTQsMTUgQEAKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLklOU1RBTExfSU5URVJOQUw7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5JTlNUQUxMX1BBUlNFX0ZBSUxFRF9JTkNPTlNJU1RFTlRfQ0VSVElGSUNBVEVTOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuSU5URU5UX0ZJTFRFUl9ET01BSU5fVkVSSUZJQ0FUSU9OX1NUQVRVU19BTFdBWVM7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5JTlRFTlRfRklMVEVSX0RPTUFJTl9WRVJJRklDQVRJT05fU1RBVFVTX0FMV0FZU19BU0s7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5JTlRFTlRfRklMVEVSX0RPTUFJTl9WRVJJRklDQVRJT05fU1RBVFVTX0FTSzsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLklOVEVOVF9GSUxURVJfRE9NQUlOX1ZFUklGSUNBVElPTl9TVEFUVVNfTkVWRVI7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5JTlRFTlRfRklMVEVSX0RPTUFJTl9WRVJJRklDQVRJT05fU1RBVFVTX1VOREVGSU5FRDsKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLklOVEVOVF9GSUxURVJfRE9NQUlOX1ZFUklGSUNBVElPTl9TVEFUVVNfQUxXQVlTX0FTSzsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLk1BVENIX0FMTDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLk1BVENIX0RJU0FCTEVEX0NPTVBPTkVOVFM7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5NQVRDSF9FTkNSWVBUSU9OX0FXQVJFX0FORF9VTkFXQVJFOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuTUFUQ0hfU1lTVEVNX09OTFk7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5NQVRDSF9VTklOU1RBTExFRF9QQUNLQUdFUzsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLk1PVkVfRkFJTEVEX0RPRVNOVF9FWElTVDsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLk1PVkVfRkFJTEVEX0lOVEVSTkFMX0VSUk9SOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuTU9WRV9GQUlMRURfT1BFUkFUSU9OX1BFTkRJTkc7CkBAIC03MSw2ICs3NSw3IEBACiBpbXBvcnQgc3RhdGljIGFuZHJvaWQub3MuVHJhY2UuVFJBQ0VfVEFHX1BBQ0tBR0VfTUFOQUdFUjsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5zeXN0ZW0uT3NDb25zdGFudHMuT19DUkVBVDsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5zeXN0ZW0uT3NDb25zdGFudHMuT19SRFdSOworCiBpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmludGVybmFsLmFwcC5JbnRlbnRGb3J3YXJkZXJBY3Rpdml0eS5GT1JXQVJEX0lOVEVOVF9UT19NQU5BR0VEX1BST0ZJTEU7CiBpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmludGVybmFsLmFwcC5JbnRlbnRGb3J3YXJkZXJBY3Rpdml0eS5GT1JXQVJEX0lOVEVOVF9UT19QQVJFTlQ7CiBpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmludGVybmFsLmNvbnRlbnQuTmF0aXZlTGlicmFyeUhlbHBlci5MSUI2NF9ESVJfTkFNRTsKQEAgLTg3LDYgKzkyLDggQEAKIGltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLnBtLlBlcm1pc3Npb25zU3RhdGUuUEVSTUlTU0lPTl9PUEVSQVRJT05fU1VDQ0VTU19HSURTX0NIQU5HRUQ7CiAKIGltcG9ydCBhbmRyb2lkLk1hbmlmZXN0OworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5Ob25OdWxsOworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKIGltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyTmF0aXZlOwogaW1wb3J0IGFuZHJvaWQuYXBwLkFwcEdsb2JhbHM7CkBAIC0xMDUsOCArMTEyLDEwIEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLkFjdGl2aXR5SW5mbzsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uQXBwbGljYXRpb25JbmZvOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5BcHBzUXVlcnlIZWxwZXI7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLkVwaGVtZXJhbFJlc29sdmVJbmZvOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5Db21wb25lbnRJbmZvOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5FcGhlbWVyYWxBcHBsaWNhdGlvbkluZm87CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLkVwaGVtZXJhbFJlc29sdmVJbmZvOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5FcGhlbWVyYWxSZXNvbHZlSW5mby5FcGhlbWVyYWxSZXNvbHZlSW50ZW50SW5mbzsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uRmVhdHVyZUluZm87CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLklPblBlcm1pc3Npb25zQ2hhbmdlTGlzdGVuZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLklQYWNrYWdlRGF0YU9ic2VydmVyOwpAQCAtMTIwLDcgKzEyOSw2IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLkluc3RydW1lbnRhdGlvbkluZm87CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLkludGVudEZpbHRlclZlcmlmaWNhdGlvbkluZm87CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLktleVNldDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uTWFuaWZlc3REaWdlc3Q7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VDbGVhbkl0ZW07CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VJbmZvOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlSW5mb0xpdGU7CkBAIC0xNDUsMTUgKzE1MywxNCBAQAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5WZXJpZmljYXRpb25QYXJhbXM7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlZlcmlmaWVyRGV2aWNlSWRlbnRpdHk7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlZlcmlmaWVySW5mbzsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uRXBoZW1lcmFsUmVzb2x2ZUluZm8uRXBoZW1lcmFsUmVzb2x2ZUludGVudEluZm87CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXA7CiBpbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5kaXNwbGF5LkRpc3BsYXlNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQubmV0LlVyaTsKLWltcG9ydCBhbmRyb2lkLm9zLkRlYnVnOwogaW1wb3J0IGFuZHJvaWQub3MuQmluZGVyOwogaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7CiBpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CitpbXBvcnQgYW5kcm9pZC5vcy5EZWJ1ZzsKIGltcG9ydCBhbmRyb2lkLm9zLkVudmlyb25tZW50OwogaW1wb3J0IGFuZHJvaWQub3MuRW52aXJvbm1lbnQuVXNlckVudmlyb25tZW50OwogaW1wb3J0IGFuZHJvaWQub3MuRmlsZVV0aWxzOwpAQCAtMjA0LDEzICsyMTEsNiBAQAogaW1wb3J0IGFuZHJvaWQudXRpbC5YbWw7CiBpbXBvcnQgYW5kcm9pZC52aWV3LkRpc3BsYXk7CiAKLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5hbm5vdGF0aW9ucy5HdWFyZGVkQnk7Ci1pbXBvcnQgZGFsdmlrLnN5c3RlbS5EZXhGaWxlOwotaW1wb3J0IGRhbHZpay5zeXN0ZW0uVk1SdW50aW1lOwotCi1pbXBvcnQgbGliY29yZS5pby5Jb1V0aWxzOwotaW1wb3J0IGxpYmNvcmUudXRpbC5FbXB0eUFycmF5OwotCiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuUjsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5hbm5vdGF0aW9ucy5HdWFyZGVkQnk7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuYXBwLklNZWRpYUNvbnRhaW5lclNlcnZpY2U7CkBAIC0yMzcsNiArMjM3LDEyIEBACiBpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLnBtLlNldHRpbmdzLlZlcnNpb25JbmZvOwogaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5zdG9yYWdlLkRldmljZVN0b3JhZ2VNb25pdG9ySW50ZXJuYWw7CiAKK2ltcG9ydCBkYWx2aWsuc3lzdGVtLkRleEZpbGU7CitpbXBvcnQgZGFsdmlrLnN5c3RlbS5WTVJ1bnRpbWU7CisKK2ltcG9ydCBsaWJjb3JlLmlvLklvVXRpbHM7CitpbXBvcnQgbGliY29yZS51dGlsLkVtcHR5QXJyYXk7CisKIGltcG9ydCBvcmcueG1scHVsbC52MS5YbWxQdWxsUGFyc2VyOwogaW1wb3J0IG9yZy54bWxwdWxsLnYxLlhtbFB1bGxQYXJzZXJFeGNlcHRpb247CiBpbXBvcnQgb3JnLnhtbHB1bGwudjEuWG1sU2VyaWFsaXplcjsKQEAgLTMwNyw2ICszMTMsNyBAQAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUdfREVYT1BUID0gZmFsc2U7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVR19BQklfU0VMRUNUSU9OID0gZmFsc2U7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVR19FUEhFTUVSQUwgPSBmYWxzZTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHX1RSSUFHRURfTUlTU0lORyA9IGZhbHNlOwogCiAgICAgc3RhdGljIGZpbmFsIGJvb2xlYW4gQ0xFQVJfUlVOVElNRV9QRVJNSVNTSU9OU19PTl9VUEdSQURFID0gZmFsc2U7CiAKQEAgLTgwNiw3ICs4MTMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZU5hbWUpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKERFQlVHX0RPTUFJTl9WRVJJRklDQVRJT04pIHsKLSAgICAgICAgICAgICAgICBTbG9nLmQoVEFHLCAiQWRkaW5nIHZlcmlmaWNhdGlvbiBmaWx0ZXIgZm9yICIgKyBwYWNrYWdlTmFtZSArICIgOiAiICsgZmlsdGVyKTsKKyAgICAgICAgICAgICAgICBTbG9nLmQoVEFHLCAiQWRkaW5nIHZlcmlmaWNhdGlvbiBmaWx0ZXIgZm9yICIgKyBwYWNrYWdlTmFtZSArICI6ICIgKyBmaWx0ZXIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaXZzLmFkZEZpbHRlcihmaWx0ZXIpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yNDI1LDExMyArMjQzMiw2MCBAQAogICAgICAgICByZXR1cm4gbUlzVXBncmFkZTsKICAgICB9CiAKLSAgICBwcml2YXRlIFN0cmluZyBnZXRSZXF1aXJlZFZlcmlmaWVyTFByKCkgewotICAgICAgICBmaW5hbCBJbnRlbnQgdmVyaWZpY2F0aW9uID0gbmV3IEludGVudChJbnRlbnQuQUNUSU9OX1BBQ0tBR0VfTkVFRFNfVkVSSUZJQ0FUSU9OKTsKLSAgICAgICAgLy8gV2Ugb25seSBjYXJlIGFib3V0IHZlcmlmaWVyIHRoYXQncyBpbnN0YWxsZWQgdW5kZXIgc3lzdGVtIHVzZXIuCi0gICAgICAgIGZpbmFsIExpc3Q8UmVzb2x2ZUluZm8+IHJlY2VpdmVycyA9IHF1ZXJ5SW50ZW50UmVjZWl2ZXJzKHZlcmlmaWNhdGlvbiwgUEFDS0FHRV9NSU1FX1RZUEUsCi0gICAgICAgICAgICAgICAgUGFja2FnZU1hbmFnZXIuR0VUX0RJU0FCTEVEX0NPTVBPTkVOVFMsIFVzZXJIYW5kbGUuVVNFUl9TWVNURU0pOworICAgIHByaXZhdGUgQE5vbk51bGwgU3RyaW5nIGdldFJlcXVpcmVkVmVyaWZpZXJMUHIoKSB7CisgICAgICAgIGZpbmFsIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KEludGVudC5BQ1RJT05fUEFDS0FHRV9ORUVEU19WRVJJRklDQVRJT04pOwogCi0gICAgICAgIFN0cmluZyByZXF1aXJlZFZlcmlmaWVyID0gbnVsbDsKLQotICAgICAgICBmaW5hbCBpbnQgTiA9IHJlY2VpdmVycy5zaXplKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7Ci0gICAgICAgICAgICBmaW5hbCBSZXNvbHZlSW5mbyBpbmZvID0gcmVjZWl2ZXJzLmdldChpKTsKLQotICAgICAgICAgICAgaWYgKGluZm8uYWN0aXZpdHlJbmZvID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZmluYWwgU3RyaW5nIHBhY2thZ2VOYW1lID0gaW5mby5hY3Rpdml0eUluZm8ucGFja2FnZU5hbWU7Ci0KLSAgICAgICAgICAgIGlmIChjaGVja1Blcm1pc3Npb24oYW5kcm9pZC5NYW5pZmVzdC5wZXJtaXNzaW9uLlBBQ0tBR0VfVkVSSUZJQ0FUSU9OX0FHRU5ULAotICAgICAgICAgICAgICAgICAgICBwYWNrYWdlTmFtZSwgVXNlckhhbmRsZS5VU0VSX1NZU1RFTSkgIT0gUGFja2FnZU1hbmFnZXIuUEVSTUlTU0lPTl9HUkFOVEVEKSB7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChyZXF1aXJlZFZlcmlmaWVyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVGhlcmUgY2FuIGJlIG9ubHkgb25lIHJlcXVpcmVkIHZlcmlmaWVyIik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJlcXVpcmVkVmVyaWZpZXIgPSBwYWNrYWdlTmFtZTsKKyAgICAgICAgZmluYWwgTGlzdDxSZXNvbHZlSW5mbz4gbWF0Y2hlcyA9IHF1ZXJ5SW50ZW50UmVjZWl2ZXJzKGludGVudCwgUEFDS0FHRV9NSU1FX1RZUEUsCisgICAgICAgICAgICAgICAgTUFUQ0hfU1lTVEVNX09OTFkgfCBNQVRDSF9FTkNSWVBUSU9OX0FXQVJFX0FORF9VTkFXQVJFLCBVc2VySGFuZGxlLlVTRVJfU1lTVEVNKTsKKyAgICAgICAgaWYgKG1hdGNoZXMuc2l6ZSgpID09IDEpIHsKKyAgICAgICAgICAgIHJldHVybiBtYXRjaGVzLmdldCgwKS5nZXRDb21wb25lbnRJbmZvKCkucGFja2FnZU5hbWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVGhlcmUgbXVzdCBiZSBleGFjdGx5IG9uZSB2ZXJpZmllcjsgZm91bmQgIiArIG1hdGNoZXMpOwogICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJlcXVpcmVkVmVyaWZpZXI7CiAgICAgfQogCi0gICAgcHJpdmF0ZSBTdHJpbmcgZ2V0UmVxdWlyZWRJbnN0YWxsZXJMUHIoKSB7Ci0gICAgICAgIEludGVudCBpbnN0YWxsZXJJbnRlbnQgPSBuZXcgSW50ZW50KEludGVudC5BQ1RJT05fSU5TVEFMTF9QQUNLQUdFKTsKLSAgICAgICAgaW5zdGFsbGVySW50ZW50LmFkZENhdGVnb3J5KEludGVudC5DQVRFR09SWV9ERUZBVUxUKTsKLSAgICAgICAgaW5zdGFsbGVySW50ZW50LnNldERhdGFBbmRUeXBlKFVyaS5mcm9tRmlsZShuZXcgRmlsZSgiZm9vLmFwayIpKSwgUEFDS0FHRV9NSU1FX1RZUEUpOworICAgIHByaXZhdGUgQE5vbk51bGwgU3RyaW5nIGdldFJlcXVpcmVkSW5zdGFsbGVyTFByKCkgeworICAgICAgICBmaW5hbCBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudChJbnRlbnQuQUNUSU9OX0lOU1RBTExfUEFDS0FHRSk7CisgICAgICAgIGludGVudC5hZGRDYXRlZ29yeShJbnRlbnQuQ0FURUdPUllfREVGQVVMVCk7CisgICAgICAgIGludGVudC5zZXREYXRhQW5kVHlwZShVcmkuZnJvbUZpbGUobmV3IEZpbGUoImZvby5hcGsiKSksIFBBQ0tBR0VfTUlNRV9UWVBFKTsKIAotICAgICAgICBmaW5hbCBMaXN0PFJlc29sdmVJbmZvPiBpbnN0YWxsZXJzID0gcXVlcnlJbnRlbnRBY3Rpdml0aWVzKGluc3RhbGxlckludGVudCwKLSAgICAgICAgICAgICAgICBQQUNLQUdFX01JTUVfVFlQRSwgMCwgVXNlckhhbmRsZS5VU0VSX1NZU1RFTSk7Ci0KLSAgICAgICAgU3RyaW5nIHJlcXVpcmVkSW5zdGFsbGVyID0gbnVsbDsKLQotICAgICAgICBmaW5hbCBpbnQgTiA9IGluc3RhbGxlcnMuc2l6ZSgpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgewotICAgICAgICAgICAgZmluYWwgUmVzb2x2ZUluZm8gaW5mbyA9IGluc3RhbGxlcnMuZ2V0KGkpOwotICAgICAgICAgICAgZmluYWwgU3RyaW5nIHBhY2thZ2VOYW1lID0gaW5mby5hY3Rpdml0eUluZm8ucGFja2FnZU5hbWU7Ci0KLSAgICAgICAgICAgIGlmICghaW5mby5hY3Rpdml0eUluZm8uYXBwbGljYXRpb25JbmZvLmlzU3lzdGVtQXBwKCkpIHsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHJlcXVpcmVkSW5zdGFsbGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVGhlcmUgbXVzdCBiZSBvbmUgcmVxdWlyZWQgaW5zdGFsbGVyIik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJlcXVpcmVkSW5zdGFsbGVyID0gcGFja2FnZU5hbWU7CisgICAgICAgIGZpbmFsIExpc3Q8UmVzb2x2ZUluZm8+IG1hdGNoZXMgPSBxdWVyeUludGVudEFjdGl2aXRpZXMoaW50ZW50LCBQQUNLQUdFX01JTUVfVFlQRSwKKyAgICAgICAgICAgICAgICBNQVRDSF9TWVNURU1fT05MWSB8IE1BVENIX0VOQ1JZUFRJT05fQVdBUkVfQU5EX1VOQVdBUkUsIFVzZXJIYW5kbGUuVVNFUl9TWVNURU0pOworICAgICAgICBpZiAobWF0Y2hlcy5zaXplKCkgPT0gMSkgeworICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXMuZ2V0KDApLmdldENvbXBvbmVudEluZm8oKS5wYWNrYWdlTmFtZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJUaGVyZSBtdXN0IGJlIGV4YWN0bHkgb25lIGluc3RhbGxlcjsgZm91bmQgIiArIG1hdGNoZXMpOwogICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlcXVpcmVkSW5zdGFsbGVyID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJUaGVyZSBtdXN0IGJlIG9uZSByZXF1aXJlZCBpbnN0YWxsZXIiKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiByZXF1aXJlZEluc3RhbGxlcjsKICAgICB9CiAKLSAgICBwcml2YXRlIENvbXBvbmVudE5hbWUgZ2V0SW50ZW50RmlsdGVyVmVyaWZpZXJDb21wb25lbnROYW1lTFByKCkgewotICAgICAgICBmaW5hbCBJbnRlbnQgdmVyaWZpY2F0aW9uID0gbmV3IEludGVudChJbnRlbnQuQUNUSU9OX0lOVEVOVF9GSUxURVJfTkVFRFNfVkVSSUZJQ0FUSU9OKTsKLSAgICAgICAgZmluYWwgTGlzdDxSZXNvbHZlSW5mbz4gcmVjZWl2ZXJzID0gcXVlcnlJbnRlbnRSZWNlaXZlcnModmVyaWZpY2F0aW9uLCBQQUNLQUdFX01JTUVfVFlQRSwKLSAgICAgICAgICAgICAgICBQYWNrYWdlTWFuYWdlci5HRVRfRElTQUJMRURfQ09NUE9ORU5UUywgVXNlckhhbmRsZS5VU0VSX1NZU1RFTSk7CisgICAgcHJpdmF0ZSBATm9uTnVsbCBDb21wb25lbnROYW1lIGdldEludGVudEZpbHRlclZlcmlmaWVyQ29tcG9uZW50TmFtZUxQcigpIHsKKyAgICAgICAgZmluYWwgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoSW50ZW50LkFDVElPTl9JTlRFTlRfRklMVEVSX05FRURTX1ZFUklGSUNBVElPTik7CiAKLSAgICAgICAgQ29tcG9uZW50TmFtZSB2ZXJpZmllckNvbXBvbmVudE5hbWUgPSBudWxsOwotCi0gICAgICAgIGludCBwcmlvcml0eSA9IC0xMDAwOwotICAgICAgICBmaW5hbCBpbnQgTiA9IHJlY2VpdmVycy5zaXplKCk7CisgICAgICAgIGZpbmFsIExpc3Q8UmVzb2x2ZUluZm8+IG1hdGNoZXMgPSBxdWVyeUludGVudFJlY2VpdmVycyhpbnRlbnQsIFBBQ0tBR0VfTUlNRV9UWVBFLAorICAgICAgICAgICAgICAgIE1BVENIX1NZU1RFTV9PTkxZIHwgTUFUQ0hfRU5DUllQVElPTl9BV0FSRV9BTkRfVU5BV0FSRSwgVXNlckhhbmRsZS5VU0VSX1NZU1RFTSk7CisgICAgICAgIFJlc29sdmVJbmZvIGJlc3QgPSBudWxsOworICAgICAgICBmaW5hbCBpbnQgTiA9IG1hdGNoZXMuc2l6ZSgpOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgewotICAgICAgICAgICAgZmluYWwgUmVzb2x2ZUluZm8gaW5mbyA9IHJlY2VpdmVycy5nZXQoaSk7Ci0KLSAgICAgICAgICAgIGlmIChpbmZvLmFjdGl2aXR5SW5mbyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBwYWNrYWdlTmFtZSA9IGluZm8uYWN0aXZpdHlJbmZvLnBhY2thZ2VOYW1lOwotCi0gICAgICAgICAgICBmaW5hbCBQYWNrYWdlU2V0dGluZyBwcyA9IG1TZXR0aW5ncy5tUGFja2FnZXMuZ2V0KHBhY2thZ2VOYW1lKTsKLSAgICAgICAgICAgIGlmIChwcyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KKyAgICAgICAgICAgIGZpbmFsIFJlc29sdmVJbmZvIGN1ciA9IG1hdGNoZXMuZ2V0KGkpOworICAgICAgICAgICAgZmluYWwgU3RyaW5nIHBhY2thZ2VOYW1lID0gY3VyLmdldENvbXBvbmVudEluZm8oKS5wYWNrYWdlTmFtZTsKICAgICAgICAgICAgIGlmIChjaGVja1Blcm1pc3Npb24oYW5kcm9pZC5NYW5pZmVzdC5wZXJtaXNzaW9uLklOVEVOVF9GSUxURVJfVkVSSUZJQ0FUSU9OX0FHRU5ULAogICAgICAgICAgICAgICAgICAgICBwYWNrYWdlTmFtZSwgVXNlckhhbmRsZS5VU0VSX1NZU1RFTSkgIT0gUGFja2FnZU1hbmFnZXIuUEVSTUlTU0lPTl9HUkFOVEVEKSB7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIFNlbGVjdCB0aGUgSW50ZW50RmlsdGVyVmVyaWZpZXIgd2l0aCB0aGUgaGlnaGVzdCBwcmlvcml0eQotICAgICAgICAgICAgaWYgKHByaW9yaXR5IDwgaW5mby5wcmlvcml0eSkgewotICAgICAgICAgICAgICAgIHByaW9yaXR5ID0gaW5mby5wcmlvcml0eTsKLSAgICAgICAgICAgICAgICB2ZXJpZmllckNvbXBvbmVudE5hbWUgPSBuZXcgQ29tcG9uZW50TmFtZShwYWNrYWdlTmFtZSwgaW5mby5hY3Rpdml0eUluZm8ubmFtZSk7Ci0gICAgICAgICAgICAgICAgaWYgKERFQlVHX0RPTUFJTl9WRVJJRklDQVRJT04pIFNsb2cuZChUQUcsICJTZWxlY3RpbmcgSW50ZW50RmlsdGVyVmVyaWZpZXI6ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICsgdmVyaWZpZXJDb21wb25lbnROYW1lICsgIiB3aXRoIHByaW9yaXR5OiAiICsgaW5mby5wcmlvcml0eSk7CisgICAgICAgICAgICBpZiAoYmVzdCA9PSBudWxsIHx8IGN1ci5wcmlvcml0eSA+IGJlc3QucHJpb3JpdHkpIHsKKyAgICAgICAgICAgICAgICBiZXN0ID0gY3VyOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIHZlcmlmaWVyQ29tcG9uZW50TmFtZTsKKyAgICAgICAgaWYgKGJlc3QgIT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIGJlc3QuZ2V0Q29tcG9uZW50SW5mbygpLmdldENvbXBvbmVudE5hbWUoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJUaGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZSBpbnRlbnQgZmlsdGVyIHZlcmlmaWVyIik7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBwcml2YXRlIENvbXBvbmVudE5hbWUgZ2V0RXBoZW1lcmFsUmVzb2x2ZXJMUHIoKSB7CisgICAgcHJpdmF0ZSBATnVsbGFibGUgQ29tcG9uZW50TmFtZSBnZXRFcGhlbWVyYWxSZXNvbHZlckxQcigpIHsKICAgICAgICAgZmluYWwgU3RyaW5nW10gcGFja2FnZUFycmF5ID0KICAgICAgICAgICAgICAgICBtQ29udGV4dC5nZXRSZXNvdXJjZXMoKS5nZXRTdHJpbmdBcnJheShSLmFycmF5LmNvbmZpZ19lcGhlbWVyYWxSZXNvbHZlclBhY2thZ2UpOwogICAgICAgICBpZiAocGFja2FnZUFycmF5Lmxlbmd0aCA9PSAwKSB7CkBAIC0yNTQxLDkgKzI0OTUsOSBAQAogICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgIH0KIAotICAgICAgICBJbnRlbnQgcmVzb2x2ZXJJbnRlbnQgPSBuZXcgSW50ZW50KEludGVudC5BQ1RJT05fUkVTT0xWRV9FUEhFTUVSQUxfUEFDS0FHRSk7Ci0gICAgICAgIGZpbmFsIExpc3Q8UmVzb2x2ZUluZm8+IHJlc29sdmVycyA9IHF1ZXJ5SW50ZW50U2VydmljZXMocmVzb2x2ZXJJbnRlbnQsCi0gICAgICAgICAgICAgICAgbnVsbCAvKnJlc29sdmVkVHlwZSovLCAwIC8qZmxhZ3MqLywgVXNlckhhbmRsZS5VU0VSX1NZU1RFTSk7CisgICAgICAgIGZpbmFsIEludGVudCByZXNvbHZlckludGVudCA9IG5ldyBJbnRlbnQoSW50ZW50LkFDVElPTl9SRVNPTFZFX0VQSEVNRVJBTF9QQUNLQUdFKTsKKyAgICAgICAgZmluYWwgTGlzdDxSZXNvbHZlSW5mbz4gcmVzb2x2ZXJzID0gcXVlcnlJbnRlbnRTZXJ2aWNlcyhyZXNvbHZlckludGVudCwgbnVsbCwKKyAgICAgICAgICAgICAgICBNQVRDSF9TWVNURU1fT05MWSB8IE1BVENIX0VOQ1JZUFRJT05fQVdBUkVfQU5EX1VOQVdBUkUsIFVzZXJIYW5kbGUuVVNFUl9TWVNURU0pOwogCiAgICAgICAgIGZpbmFsIGludCBOID0gcmVzb2x2ZXJzLnNpemUoKTsKICAgICAgICAgaWYgKE4gPT0gMCkgewpAQCAtMjU4MiwzNiArMjUzNiwyMSBAQAogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9CiAKLSAgICBwcml2YXRlIENvbXBvbmVudE5hbWUgZ2V0RXBoZW1lcmFsSW5zdGFsbGVyTFByKCkgewotICAgICAgICBJbnRlbnQgaW5zdGFsbGVySW50ZW50ID0gbmV3IEludGVudChJbnRlbnQuQUNUSU9OX0lOU1RBTExfRVBIRU1FUkFMX1BBQ0tBR0UpOwotICAgICAgICBpbnN0YWxsZXJJbnRlbnQuYWRkQ2F0ZWdvcnkoSW50ZW50LkNBVEVHT1JZX0RFRkFVTFQpOwotICAgICAgICBpbnN0YWxsZXJJbnRlbnQuc2V0RGF0YUFuZFR5cGUoVXJpLmZyb21GaWxlKG5ldyBGaWxlKCJmb28uYXBrIikpLCBQQUNLQUdFX01JTUVfVFlQRSk7Ci0gICAgICAgIGZpbmFsIExpc3Q8UmVzb2x2ZUluZm8+IGluc3RhbGxlcnMgPSBxdWVyeUludGVudEFjdGl2aXRpZXMoaW5zdGFsbGVySW50ZW50LAotICAgICAgICAgICAgICAgIFBBQ0tBR0VfTUlNRV9UWVBFLCAwIC8qZmxhZ3MqLywgMCAvKnVzZXJJZCovKTsKKyAgICBwcml2YXRlIEBOdWxsYWJsZSBDb21wb25lbnROYW1lIGdldEVwaGVtZXJhbEluc3RhbGxlckxQcigpIHsKKyAgICAgICAgZmluYWwgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoSW50ZW50LkFDVElPTl9JTlNUQUxMX0VQSEVNRVJBTF9QQUNLQUdFKTsKKyAgICAgICAgaW50ZW50LmFkZENhdGVnb3J5KEludGVudC5DQVRFR09SWV9ERUZBVUxUKTsKKyAgICAgICAgaW50ZW50LnNldERhdGFBbmRUeXBlKFVyaS5mcm9tRmlsZShuZXcgRmlsZSgiZm9vLmFwayIpKSwgUEFDS0FHRV9NSU1FX1RZUEUpOwogCi0gICAgICAgIENvbXBvbmVudE5hbWUgZXBoZW1lcmFsSW5zdGFsbGVyID0gbnVsbDsKLQotICAgICAgICBmaW5hbCBpbnQgTiA9IGluc3RhbGxlcnMuc2l6ZSgpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgewotICAgICAgICAgICAgZmluYWwgUmVzb2x2ZUluZm8gaW5mbyA9IGluc3RhbGxlcnMuZ2V0KGkpOwotICAgICAgICAgICAgZmluYWwgU3RyaW5nIHBhY2thZ2VOYW1lID0gaW5mby5hY3Rpdml0eUluZm8ucGFja2FnZU5hbWU7Ci0KLSAgICAgICAgICAgIGlmICghaW5mby5hY3Rpdml0eUluZm8uYXBwbGljYXRpb25JbmZvLmlzU3lzdGVtQXBwKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoREVCVUdfRVBIRU1FUkFMKSB7Ci0gICAgICAgICAgICAgICAgICAgIFNsb2cuZChUQUcsICJFcGhlbWVyYWwgaW5zdGFsbGVyIGlzIG5vdCBzeXN0ZW0gYXBwOyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgcGtnOiAiICsgcGFja2FnZU5hbWUgKyAiLCBpbmZvOiIgKyBpbmZvKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChlcGhlbWVyYWxJbnN0YWxsZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJUaGVyZSBtdXN0IG9ubHkgYmUgb25lIGVwaGVtZXJhbCBpbnN0YWxsZXIiKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZXBoZW1lcmFsSW5zdGFsbGVyID0gbmV3IENvbXBvbmVudE5hbWUocGFja2FnZU5hbWUsIGluZm8uYWN0aXZpdHlJbmZvLm5hbWUpOworICAgICAgICBmaW5hbCBMaXN0PFJlc29sdmVJbmZvPiBtYXRjaGVzID0gcXVlcnlJbnRlbnRBY3Rpdml0aWVzKGludGVudCwgUEFDS0FHRV9NSU1FX1RZUEUsCisgICAgICAgICAgICAgICAgTUFUQ0hfU1lTVEVNX09OTFkgfCBNQVRDSF9FTkNSWVBUSU9OX0FXQVJFX0FORF9VTkFXQVJFLCBVc2VySGFuZGxlLlVTRVJfU1lTVEVNKTsKKyAgICAgICAgaWYgKG1hdGNoZXMuc2l6ZSgpID09IDApIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9IGVsc2UgaWYgKG1hdGNoZXMuc2l6ZSgpID09IDEpIHsKKyAgICAgICAgICAgIHJldHVybiBtYXRjaGVzLmdldCgwKS5nZXRDb21wb25lbnRJbmZvKCkuZ2V0Q29tcG9uZW50TmFtZSgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICJUaGVyZSBtdXN0IGJlIGF0IG1vc3Qgb25lIGVwaGVtZXJhbCBpbnN0YWxsZXI7IGZvdW5kICIgKyBtYXRjaGVzKTsKICAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBlcGhlbWVyYWxJbnN0YWxsZXI7CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHByaW1lRG9tYWluVmVyaWZpY2F0aW9uc0xQdyhpbnQgdXNlcklkKSB7CkBAIC0yNjU4LDcgKzI1OTcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIicgZG9lcyBub3QgaGFuZGxlIHdlYiBsaW5rcyIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU2xvZy53KFRBRywgIlVua25vd24gcGFja2FnZSAnIiArIHBhY2thZ2VOYW1lICsgIicgaW4gc3lzY29uZmlnIDxhcHAtbGluaz4iKTsKKyAgICAgICAgICAgICAgICBTbG9nLncoVEFHLCAiVW5rbm93biBwYWNrYWdlICIgKyBwYWNrYWdlTmFtZSArICIgaW4gc3lzY29uZmlnIDxhcHAtbGluaz4iKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC0yODQ2LDYgKzI3ODUsNyBAQAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBQYWNrYWdlSW5mbyBnZXRQYWNrYWdlSW5mbyhTdHJpbmcgcGFja2FnZU5hbWUsIGludCBmbGFncywgaW50IHVzZXJJZCkgewogICAgICAgICBpZiAoIXNVc2VyTWFuYWdlci5leGlzdHModXNlcklkKSkgcmV0dXJuIG51bGw7CisgICAgICAgIGZsYWdzID0gdXBkYXRlRmxhZ3NGb3JQYWNrYWdlKGZsYWdzLCB1c2VySWQsIHBhY2thZ2VOYW1lKTsKICAgICAgICAgZW5mb3JjZUNyb3NzVXNlclBlcm1pc3Npb24oQmluZGVyLmdldENhbGxpbmdVaWQoKSwgdXNlcklkLCBmYWxzZSwgZmFsc2UsICJnZXQgcGFja2FnZSBpbmZvIik7CiAgICAgICAgIC8vIHJlYWRlcgogICAgICAgICBzeW5jaHJvbml6ZWQgKG1QYWNrYWdlcykgewpAQCAtMjg1NSw3ICsyNzk1LDcgQEAKICAgICAgICAgICAgIGlmIChwICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdGVQYWNrYWdlSW5mbyhwLCBmbGFncywgdXNlcklkKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmKChmbGFncyAmIFBhY2thZ2VNYW5hZ2VyLkdFVF9VTklOU1RBTExFRF9QQUNLQUdFUykgIT0gMCkgeworICAgICAgICAgICAgaWYgKChmbGFncyAmIE1BVENIX1VOSU5TVEFMTEVEX1BBQ0tBR0VTKSAhPSAwKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRlUGFja2FnZUluZm9Gcm9tU2V0dGluZ3NMUHcocGFja2FnZU5hbWUsIGZsYWdzLCB1c2VySWQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yODk2LDYgKzI4MzYsNyBAQAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBpbnQgZ2V0UGFja2FnZVVpZEV0YyhTdHJpbmcgcGFja2FnZU5hbWUsIGludCBmbGFncywgaW50IHVzZXJJZCkgewogICAgICAgICBpZiAoIXNVc2VyTWFuYWdlci5leGlzdHModXNlcklkKSkgcmV0dXJuIC0xOworICAgICAgICBmbGFncyA9IHVwZGF0ZUZsYWdzRm9yUGFja2FnZShmbGFncywgdXNlcklkLCBwYWNrYWdlTmFtZSk7CiAgICAgICAgIGVuZm9yY2VDcm9zc1VzZXJQZXJtaXNzaW9uKEJpbmRlci5nZXRDYWxsaW5nVWlkKCksIHVzZXJJZCwgZmFsc2UsIGZhbHNlLCAiZ2V0IHBhY2thZ2UgdWlkIik7CiAKICAgICAgICAgLy8gcmVhZGVyCkBAIC0yOTA0LDcgKzI4NDUsNyBAQAogICAgICAgICAgICAgaWYgKHAgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIHJldHVybiBVc2VySGFuZGxlLmdldFVpZCh1c2VySWQsIHAuYXBwbGljYXRpb25JbmZvLnVpZCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKGZsYWdzICYgUGFja2FnZU1hbmFnZXIuR0VUX1VOSU5TVEFMTEVEX1BBQ0tBR0VTKSAhPSAwKSB7CisgICAgICAgICAgICBpZiAoKGZsYWdzICYgTUFUQ0hfVU5JTlNUQUxMRURfUEFDS0FHRVMpICE9IDApIHsKICAgICAgICAgICAgICAgICBmaW5hbCBQYWNrYWdlU2V0dGluZyBwcyA9IG1TZXR0aW5ncy5tUGFja2FnZXMuZ2V0KHBhY2thZ2VOYW1lKTsKICAgICAgICAgICAgICAgICBpZiAocHMgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gVXNlckhhbmRsZS5nZXRVaWQodXNlcklkLCBwcy5hcHBJZCk7CkBAIC0yOTIyLDEwICsyODYzLDggQEAKIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBpbnRbXSBnZXRQYWNrYWdlR2lkc0V0YyhTdHJpbmcgcGFja2FnZU5hbWUsIGludCBmbGFncywgaW50IHVzZXJJZCkgewotICAgICAgICBpZiAoIXNVc2VyTWFuYWdlci5leGlzdHModXNlcklkKSkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLQorICAgICAgICBpZiAoIXNVc2VyTWFuYWdlci5leGlzdHModXNlcklkKSkgcmV0dXJuIG51bGw7CisgICAgICAgIGZsYWdzID0gdXBkYXRlRmxhZ3NGb3JQYWNrYWdlKGZsYWdzLCB1c2VySWQsIHBhY2thZ2VOYW1lKTsKICAgICAgICAgZW5mb3JjZUNyb3NzVXNlclBlcm1pc3Npb24oQmluZGVyLmdldENhbGxpbmdVaWQoKSwgdXNlcklkLCBmYWxzZSwgZmFsc2UsCiAgICAgICAgICAgICAgICAgImdldFBhY2thZ2VHaWRzIik7CiAKQEAgLTI5MzYsNyArMjg3NSw3IEBACiAgICAgICAgICAgICAgICAgUGFja2FnZVNldHRpbmcgcHMgPSAoUGFja2FnZVNldHRpbmcpIHAubUV4dHJhczsKICAgICAgICAgICAgICAgICByZXR1cm4gcHMuZ2V0UGVybWlzc2lvbnNTdGF0ZSgpLmNvbXB1dGVHaWRzKHVzZXJJZCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKGZsYWdzICYgUGFja2FnZU1hbmFnZXIuR0VUX1VOSU5TVEFMTEVEX1BBQ0tBR0VTKSAhPSAwKSB7CisgICAgICAgICAgICBpZiAoKGZsYWdzICYgTUFUQ0hfVU5JTlNUQUxMRURfUEFDS0FHRVMpICE9IDApIHsKICAgICAgICAgICAgICAgICBmaW5hbCBQYWNrYWdlU2V0dGluZyBwcyA9IG1TZXR0aW5ncy5tUGFja2FnZXMuZ2V0KHBhY2thZ2VOYW1lKTsKICAgICAgICAgICAgICAgICBpZiAocHMgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHMuZ2V0UGVybWlzc2lvbnNTdGF0ZSgpLmNvbXB1dGVHaWRzKHVzZXJJZCk7CkBAIC0yOTQ3LDggKzI4ODYsNyBAQAogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9CiAKLSAgICBzdGF0aWMgUGVybWlzc2lvbkluZm8gZ2VuZXJhdGVQZXJtaXNzaW9uSW5mbygKLSAgICAgICAgICAgIEJhc2VQZXJtaXNzaW9uIGJwLCBpbnQgZmxhZ3MpIHsKKyAgICBzdGF0aWMgUGVybWlzc2lvbkluZm8gZ2VuZXJhdGVQZXJtaXNzaW9uSW5mbyhCYXNlUGVybWlzc2lvbiBicCwgaW50IGZsYWdzKSB7CiAgICAgICAgIGlmIChicC5wZXJtICE9IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybiBQYWNrYWdlUGFyc2VyLmdlbmVyYXRlUGVybWlzc2lvbkluZm8oYnAucGVybSwgZmxhZ3MpOwogICAgICAgICB9CkBAIC0zMDQ1LDcgKzI5ODMsNyBAQAogICAgICAgICBpZiAocHMgIT0gbnVsbCkgewogICAgICAgICAgICAgUGFja2FnZVBhcnNlci5QYWNrYWdlIHBrZyA9IHBzLnBrZzsKICAgICAgICAgICAgIGlmIChwa2cgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGlmICgoZmxhZ3MgJiBQYWNrYWdlTWFuYWdlci5HRVRfVU5JTlNUQUxMRURfUEFDS0FHRVMpID09IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoKGZsYWdzICYgTUFUQ0hfVU5JTlNUQUxMRURfUEFDS0FHRVMpID09IDApIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIC8vIE9ubHkgZGF0YSByZW1haW5zLCBzbyB3ZSBhcmVuJ3Qgd29ycmllZCBhYm91dCBjb2RlIHBhdGhzCkBAIC0zMDY2LDYgKzMwMDQsNyBAQAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBBcHBsaWNhdGlvbkluZm8gZ2V0QXBwbGljYXRpb25JbmZvKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IGZsYWdzLCBpbnQgdXNlcklkKSB7CiAgICAgICAgIGlmICghc1VzZXJNYW5hZ2VyLmV4aXN0cyh1c2VySWQpKSByZXR1cm4gbnVsbDsKKyAgICAgICAgZmxhZ3MgPSB1cGRhdGVGbGFnc0ZvckFwcGxpY2F0aW9uKGZsYWdzLCB1c2VySWQsIHBhY2thZ2VOYW1lKTsKICAgICAgICAgZW5mb3JjZUNyb3NzVXNlclBlcm1pc3Npb24oQmluZGVyLmdldENhbGxpbmdVaWQoKSwgdXNlcklkLCBmYWxzZSwgZmFsc2UsICJnZXQgYXBwbGljYXRpb24gaW5mbyIpOwogICAgICAgICAvLyB3cml0ZXIKICAgICAgICAgc3luY2hyb25pemVkIChtUGFja2FnZXMpIHsKQEAgLTMwODMsNyArMzAyMiw3IEBACiAgICAgICAgICAgICBpZiAoImFuZHJvaWQiLmVxdWFscyhwYWNrYWdlTmFtZSl8fCJzeXN0ZW0iLmVxdWFscyhwYWNrYWdlTmFtZSkpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gbUFuZHJvaWRBcHBsaWNhdGlvbjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgoZmxhZ3MgJiBQYWNrYWdlTWFuYWdlci5HRVRfVU5JTlNUQUxMRURfUEFDS0FHRVMpICE9IDApIHsKKyAgICAgICAgICAgIGlmICgoZmxhZ3MgJiBNQVRDSF9VTklOU1RBTExFRF9QQUNLQUdFUykgIT0gMCkgewogICAgICAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZUFwcGxpY2F0aW9uSW5mb0Zyb21TZXR0aW5nc0xQdyhwYWNrYWdlTmFtZSwgZmxhZ3MsIHVzZXJJZCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTMxODAsMjYgKzMxMTksOTQgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBBdWdtZW50IHRoZSBnaXZlbiBmbGFncyBkZXBlbmRpbmcgb24gY3VycmVudCB1c2VyIHJ1bm5pbmcgc3RhdGUuIFRoaXMgaXMKLSAgICAgKiBwdXJwb3NlZnVsbHkgZG9uZSBiZWZvcmUgYWNxdWlyaW5nIHtAbGluayAjbVBhY2thZ2VzfSBsb2NrLgorICAgICAqIFVwZGF0ZSBnaXZlbiBmbGFncyBiYXNlZCBvbiBlbmNyeXB0aW9uIHN0YXR1cyBvZiBjdXJyZW50IHVzZXIuCiAgICAgICovCi0gICAgcHJpdmF0ZSBpbnQgYXVnbWVudEZsYWdzRm9yVXNlcihpbnQgZmxhZ3MsIGludCB1c2VySWQpIHsKLSAgICAgICAgaWYgKCFpc1VzZXJLZXlVbmxvY2tlZCh1c2VySWQpKSB7Ci0gICAgICAgICAgICBmbGFncyB8PSBQYWNrYWdlTWFuYWdlci5NQVRDSF9FTkNSWVBUSU9OX0FXQVJFX09OTFk7CisgICAgcHJpdmF0ZSBpbnQgdXBkYXRlRmxhZ3NGb3JFbmNyeXB0aW9uKGludCBmbGFncywgaW50IHVzZXJJZCkgeworICAgICAgICBpZiAoKGZsYWdzICYgKFBhY2thZ2VNYW5hZ2VyLk1BVENIX0VOQ1JZUFRJT05fVU5BV0FSRQorICAgICAgICAgICAgICAgIHwgUGFja2FnZU1hbmFnZXIuTUFUQ0hfRU5DUllQVElPTl9BV0FSRSkpICE9IDApIHsKKyAgICAgICAgICAgIC8vIENhbGxlciBleHByZXNzZWQgYW4gZXhwbGljaXQgb3BpbmlvbiBhYm91dCB3aGF0IGVuY3J5cHRpb24KKyAgICAgICAgICAgIC8vIGF3YXJlL3VuYXdhcmUgY29tcG9uZW50cyB0aGV5IHdhbnQgdG8gc2VlLCBzbyBmYWxsIHRocm91Z2ggYW5kCisgICAgICAgICAgICAvLyBnaXZlIHRoZW0gd2hhdCB0aGV5IHdhbnQKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIENhbGxlciBleHByZXNzZWQgbm8gb3Bpbmlvbiwgc28gbWF0Y2ggYmFzZWQgb24gdXNlciBzdGF0ZQorICAgICAgICAgICAgaWYgKGlzVXNlcktleVVubG9ja2VkKHVzZXJJZCkpIHsKKyAgICAgICAgICAgICAgICBmbGFncyB8PSBQYWNrYWdlTWFuYWdlci5NQVRDSF9FTkNSWVBUSU9OX0FXQVJFX0FORF9VTkFXQVJFOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmbGFncyB8PSBQYWNrYWdlTWFuYWdlci5NQVRDSF9FTkNSWVBUSU9OX0FXQVJFOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmbGFnczsKICAgICB9CiAKKyAgICAvKioKKyAgICAgKiBVcGRhdGUgZ2l2ZW4gZmxhZ3Mgd2hlbiBiZWluZyB1c2VkIHRvIHJlcXVlc3Qge0BsaW5rIFBhY2thZ2VJbmZvfS4KKyAgICAgKi8KKyAgICBwcml2YXRlIGludCB1cGRhdGVGbGFnc0ZvclBhY2thZ2UoaW50IGZsYWdzLCBpbnQgdXNlcklkLCBPYmplY3QgY29va2llKSB7CisgICAgICAgIGJvb2xlYW4gdHJpYWdlZCA9IHRydWU7CisgICAgICAgIGlmICgoZmxhZ3MgJiBQYWNrYWdlTWFuYWdlci5HRVRfQUNUSVZJVElFUyB8IFBhY2thZ2VNYW5hZ2VyLkdFVF9SRUNFSVZFUlMKKyAgICAgICAgICAgICAgICB8IFBhY2thZ2VNYW5hZ2VyLkdFVF9TRVJWSUNFUyB8IFBhY2thZ2VNYW5hZ2VyLkdFVF9QUk9WSURFUlMpICE9IDApIHsKKyAgICAgICAgICAgIC8vIENhbGxlciBpcyBhc2tpbmcgZm9yIGNvbXBvbmVudCBkZXRhaWxzLCBzbyB0aGV5J2QgYmV0dGVyIGJlCisgICAgICAgICAgICAvLyBhc2tpbmcgZm9yIHNwZWNpZmljIGVuY3J5cHRpb24gbWF0Y2hpbmcgYmVoYXZpb3IsIG9yIGJlIHRyaWFnZWQKKyAgICAgICAgICAgIGlmICgoZmxhZ3MgJiAoUGFja2FnZU1hbmFnZXIuTUFUQ0hfRU5DUllQVElPTl9VTkFXQVJFCisgICAgICAgICAgICAgICAgICAgIHwgUGFja2FnZU1hbmFnZXIuTUFUQ0hfRU5DUllQVElPTl9BV0FSRQorICAgICAgICAgICAgICAgICAgICB8IFBhY2thZ2VNYW5hZ2VyLk1BVENIX0RFQlVHX1RSSUFHRURfTUlTU0lORykpID09IDApIHsKKyAgICAgICAgICAgICAgICB0cmlhZ2VkID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKChmbGFncyAmIChQYWNrYWdlTWFuYWdlci5NQVRDSF9VTklOU1RBTExFRF9QQUNLQUdFUworICAgICAgICAgICAgICAgIHwgUGFja2FnZU1hbmFnZXIuTUFUQ0hfREVCVUdfVFJJQUdFRF9NSVNTSU5HKSkgPT0gMCkgeworICAgICAgICAgICAgdHJpYWdlZCA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmIChERUJVR19UUklBR0VEX01JU1NJTkcgJiYgKEJpbmRlci5nZXRDYWxsaW5nVWlkKCkgPT0gUHJvY2Vzcy5TWVNURU1fVUlEKSAmJiAhdHJpYWdlZCkgeworICAgICAgICAgICAgTG9nLncoVEFHLCAiQ2FsbGVyIGhhc24ndCBiZWVuIHRyaWFnZWQgZm9yIG1pc3NpbmcgYXBwczsgdGhleSBhc2tlZCBhYm91dCAiICsgY29va2llLAorICAgICAgICAgICAgICAgICAgICBuZXcgVGhyb3dhYmxlKCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB1cGRhdGVGbGFnc0ZvckVuY3J5cHRpb24oZmxhZ3MsIHVzZXJJZCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVXBkYXRlIGdpdmVuIGZsYWdzIHdoZW4gYmVpbmcgdXNlZCB0byByZXF1ZXN0IHtAbGluayBBcHBsaWNhdGlvbkluZm99LgorICAgICAqLworICAgIHByaXZhdGUgaW50IHVwZGF0ZUZsYWdzRm9yQXBwbGljYXRpb24oaW50IGZsYWdzLCBpbnQgdXNlcklkLCBPYmplY3QgY29va2llKSB7CisgICAgICAgIHJldHVybiB1cGRhdGVGbGFnc0ZvclBhY2thZ2UoZmxhZ3MsIHVzZXJJZCwgY29va2llKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBVcGRhdGUgZ2l2ZW4gZmxhZ3Mgd2hlbiBiZWluZyB1c2VkIHRvIHJlcXVlc3Qge0BsaW5rIENvbXBvbmVudEluZm99LgorICAgICAqLworICAgIHByaXZhdGUgaW50IHVwZGF0ZUZsYWdzRm9yQ29tcG9uZW50KGludCBmbGFncywgaW50IHVzZXJJZCwgT2JqZWN0IGNvb2tpZSkgeworICAgICAgICBib29sZWFuIHRyaWFnZWQgPSB0cnVlOworICAgICAgICAvLyBDYWxsZXIgaXMgYXNraW5nIGZvciBjb21wb25lbnQgZGV0YWlscywgc28gdGhleSdkIGJldHRlciBiZQorICAgICAgICAvLyBhc2tpbmcgZm9yIHNwZWNpZmljIGVuY3J5cHRpb24gbWF0Y2hpbmcgYmVoYXZpb3IsIG9yIGJlIHRyaWFnZWQKKyAgICAgICAgaWYgKChmbGFncyAmIChQYWNrYWdlTWFuYWdlci5NQVRDSF9FTkNSWVBUSU9OX1VOQVdBUkUKKyAgICAgICAgICAgICAgICB8IFBhY2thZ2VNYW5hZ2VyLk1BVENIX0VOQ1JZUFRJT05fQVdBUkUKKyAgICAgICAgICAgICAgICB8IFBhY2thZ2VNYW5hZ2VyLk1BVENIX0RFQlVHX1RSSUFHRURfTUlTU0lORykpID09IDApIHsKKyAgICAgICAgICAgIHRyaWFnZWQgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoREVCVUdfVFJJQUdFRF9NSVNTSU5HICYmIChCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpID09IFByb2Nlc3MuU1lTVEVNX1VJRCkgJiYgIXRyaWFnZWQpIHsKKyAgICAgICAgICAgIExvZy53KFRBRywgIkNhbGxlciBoYXNuJ3QgYmVlbiB0cmlhZ2VkIGZvciBtaXNzaW5nIGFwcHM7IHRoZXkgYXNrZWQgYWJvdXQgIiArIGNvb2tpZSwKKyAgICAgICAgICAgICAgICAgICAgbmV3IFRocm93YWJsZSgpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdXBkYXRlRmxhZ3NGb3JFbmNyeXB0aW9uKGZsYWdzLCB1c2VySWQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFVwZGF0ZSBnaXZlbiBmbGFncyB3aGVuIGJlaW5nIHVzZWQgdG8gcmVxdWVzdCB7QGxpbmsgUmVzb2x2ZUluZm99LgorICAgICAqLworICAgIHByaXZhdGUgaW50IHVwZGF0ZUZsYWdzRm9yUmVzb2x2ZShpbnQgZmxhZ3MsIGludCB1c2VySWQsIE9iamVjdCBjb29raWUpIHsKKyAgICAgICAgcmV0dXJuIHVwZGF0ZUZsYWdzRm9yQ29tcG9uZW50KGZsYWdzLCB1c2VySWQsIGNvb2tpZSk7CisgICAgfQorCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIEFjdGl2aXR5SW5mbyBnZXRBY3Rpdml0eUluZm8oQ29tcG9uZW50TmFtZSBjb21wb25lbnQsIGludCBmbGFncywgaW50IHVzZXJJZCkgewogICAgICAgICBpZiAoIXNVc2VyTWFuYWdlci5leGlzdHModXNlcklkKSkgcmV0dXJuIG51bGw7Ci0gICAgICAgIGZsYWdzID0gYXVnbWVudEZsYWdzRm9yVXNlcihmbGFncywgdXNlcklkKTsKKyAgICAgICAgZmxhZ3MgPSB1cGRhdGVGbGFnc0ZvckNvbXBvbmVudChmbGFncywgdXNlcklkLCBjb21wb25lbnQpOwogICAgICAgICBlbmZvcmNlQ3Jvc3NVc2VyUGVybWlzc2lvbihCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpLCB1c2VySWQsIGZhbHNlLCBmYWxzZSwgImdldCBhY3Rpdml0eSBpbmZvIik7CiAgICAgICAgIHN5bmNocm9uaXplZCAobVBhY2thZ2VzKSB7CiAgICAgICAgICAgICBQYWNrYWdlUGFyc2VyLkFjdGl2aXR5IGEgPSBtQWN0aXZpdGllcy5tQWN0aXZpdGllcy5nZXQoY29tcG9uZW50KTsKIAogICAgICAgICAgICAgaWYgKERFQlVHX1BBQ0tBR0VfSU5GTykgTG9nLnYoVEFHLCAiZ2V0QWN0aXZpdHlJbmZvICIgKyBjb21wb25lbnQgKyAiOiAiICsgYSk7Ci0gICAgICAgICAgICBpZiAoYSAhPSBudWxsICYmIG1TZXR0aW5ncy5pc0VuYWJsZWRBbmRWaXNpYmxlTFByKGEuaW5mbywgZmxhZ3MsIHVzZXJJZCkpIHsKKyAgICAgICAgICAgIGlmIChhICE9IG51bGwgJiYgbVNldHRpbmdzLmlzRW5hYmxlZEFuZE1hdGNoTFByKGEuaW5mbywgZmxhZ3MsIHVzZXJJZCkpIHsKICAgICAgICAgICAgICAgICBQYWNrYWdlU2V0dGluZyBwcyA9IG1TZXR0aW5ncy5tUGFja2FnZXMuZ2V0KGNvbXBvbmVudC5nZXRQYWNrYWdlTmFtZSgpKTsKICAgICAgICAgICAgICAgICBpZiAocHMgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICAgICAgcmV0dXJuIFBhY2thZ2VQYXJzZXIuZ2VuZXJhdGVBY3Rpdml0eUluZm8oYSwgZmxhZ3MsIHBzLnJlYWRVc2VyU3RhdGUodXNlcklkKSwKQEAgLTMyMzgsMTMgKzMyNDUsMTMgQEAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgQWN0aXZpdHlJbmZvIGdldFJlY2VpdmVySW5mbyhDb21wb25lbnROYW1lIGNvbXBvbmVudCwgaW50IGZsYWdzLCBpbnQgdXNlcklkKSB7CiAgICAgICAgIGlmICghc1VzZXJNYW5hZ2VyLmV4aXN0cyh1c2VySWQpKSByZXR1cm4gbnVsbDsKLSAgICAgICAgZmxhZ3MgPSBhdWdtZW50RmxhZ3NGb3JVc2VyKGZsYWdzLCB1c2VySWQpOworICAgICAgICBmbGFncyA9IHVwZGF0ZUZsYWdzRm9yQ29tcG9uZW50KGZsYWdzLCB1c2VySWQsIGNvbXBvbmVudCk7CiAgICAgICAgIGVuZm9yY2VDcm9zc1VzZXJQZXJtaXNzaW9uKEJpbmRlci5nZXRDYWxsaW5nVWlkKCksIHVzZXJJZCwgZmFsc2UsIGZhbHNlLCAiZ2V0IHJlY2VpdmVyIGluZm8iKTsKICAgICAgICAgc3luY2hyb25pemVkIChtUGFja2FnZXMpIHsKICAgICAgICAgICAgIFBhY2thZ2VQYXJzZXIuQWN0aXZpdHkgYSA9IG1SZWNlaXZlcnMubUFjdGl2aXRpZXMuZ2V0KGNvbXBvbmVudCk7CiAgICAgICAgICAgICBpZiAoREVCVUdfUEFDS0FHRV9JTkZPKSBMb2cudigKICAgICAgICAgICAgICAgICBUQUcsICJnZXRSZWNlaXZlckluZm8gIiArIGNvbXBvbmVudCArICI6ICIgKyBhKTsKLSAgICAgICAgICAgIGlmIChhICE9IG51bGwgJiYgbVNldHRpbmdzLmlzRW5hYmxlZEFuZFZpc2libGVMUHIoYS5pbmZvLCBmbGFncywgdXNlcklkKSkgeworICAgICAgICAgICAgaWYgKGEgIT0gbnVsbCAmJiBtU2V0dGluZ3MuaXNFbmFibGVkQW5kTWF0Y2hMUHIoYS5pbmZvLCBmbGFncywgdXNlcklkKSkgewogICAgICAgICAgICAgICAgIFBhY2thZ2VTZXR0aW5nIHBzID0gbVNldHRpbmdzLm1QYWNrYWdlcy5nZXQoY29tcG9uZW50LmdldFBhY2thZ2VOYW1lKCkpOwogICAgICAgICAgICAgICAgIGlmIChwcyA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICAgICByZXR1cm4gUGFja2FnZVBhcnNlci5nZW5lcmF0ZUFjdGl2aXR5SW5mbyhhLCBmbGFncywgcHMucmVhZFVzZXJTdGF0ZSh1c2VySWQpLApAQCAtMzI1NywxMyArMzI2NCwxMyBAQAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBTZXJ2aWNlSW5mbyBnZXRTZXJ2aWNlSW5mbyhDb21wb25lbnROYW1lIGNvbXBvbmVudCwgaW50IGZsYWdzLCBpbnQgdXNlcklkKSB7CiAgICAgICAgIGlmICghc1VzZXJNYW5hZ2VyLmV4aXN0cyh1c2VySWQpKSByZXR1cm4gbnVsbDsKLSAgICAgICAgZmxhZ3MgPSBhdWdtZW50RmxhZ3NGb3JVc2VyKGZsYWdzLCB1c2VySWQpOworICAgICAgICBmbGFncyA9IHVwZGF0ZUZsYWdzRm9yQ29tcG9uZW50KGZsYWdzLCB1c2VySWQsIGNvbXBvbmVudCk7CiAgICAgICAgIGVuZm9yY2VDcm9zc1VzZXJQZXJtaXNzaW9uKEJpbmRlci5nZXRDYWxsaW5nVWlkKCksIHVzZXJJZCwgZmFsc2UsIGZhbHNlLCAiZ2V0IHNlcnZpY2UgaW5mbyIpOwogICAgICAgICBzeW5jaHJvbml6ZWQgKG1QYWNrYWdlcykgewogICAgICAgICAgICAgUGFja2FnZVBhcnNlci5TZXJ2aWNlIHMgPSBtU2VydmljZXMubVNlcnZpY2VzLmdldChjb21wb25lbnQpOwogICAgICAgICAgICAgaWYgKERFQlVHX1BBQ0tBR0VfSU5GTykgTG9nLnYoCiAgICAgICAgICAgICAgICAgVEFHLCAiZ2V0U2VydmljZUluZm8gIiArIGNvbXBvbmVudCArICI6ICIgKyBzKTsKLSAgICAgICAgICAgIGlmIChzICE9IG51bGwgJiYgbVNldHRpbmdzLmlzRW5hYmxlZEFuZFZpc2libGVMUHIocy5pbmZvLCBmbGFncywgdXNlcklkKSkgeworICAgICAgICAgICAgaWYgKHMgIT0gbnVsbCAmJiBtU2V0dGluZ3MuaXNFbmFibGVkQW5kTWF0Y2hMUHIocy5pbmZvLCBmbGFncywgdXNlcklkKSkgewogICAgICAgICAgICAgICAgIFBhY2thZ2VTZXR0aW5nIHBzID0gbVNldHRpbmdzLm1QYWNrYWdlcy5nZXQoY29tcG9uZW50LmdldFBhY2thZ2VOYW1lKCkpOwogICAgICAgICAgICAgICAgIGlmIChwcyA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICAgICByZXR1cm4gUGFja2FnZVBhcnNlci5nZW5lcmF0ZVNlcnZpY2VJbmZvKHMsIGZsYWdzLCBwcy5yZWFkVXNlclN0YXRlKHVzZXJJZCksCkBAIC0zMjc2LDEzICszMjgzLDEzIEBACiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIFByb3ZpZGVySW5mbyBnZXRQcm92aWRlckluZm8oQ29tcG9uZW50TmFtZSBjb21wb25lbnQsIGludCBmbGFncywgaW50IHVzZXJJZCkgewogICAgICAgICBpZiAoIXNVc2VyTWFuYWdlci5leGlzdHModXNlcklkKSkgcmV0dXJuIG51bGw7Ci0gICAgICAgIGZsYWdzID0gYXVnbWVudEZsYWdzRm9yVXNlcihmbGFncywgdXNlcklkKTsKKyAgICAgICAgZmxhZ3MgPSB1cGRhdGVGbGFnc0ZvckNvbXBvbmVudChmbGFncywgdXNlcklkLCBjb21wb25lbnQpOwogICAgICAgICBlbmZvcmNlQ3Jvc3NVc2VyUGVybWlzc2lvbihCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpLCB1c2VySWQsIGZhbHNlLCBmYWxzZSwgImdldCBwcm92aWRlciBpbmZvIik7CiAgICAgICAgIHN5bmNocm9uaXplZCAobVBhY2thZ2VzKSB7CiAgICAgICAgICAgICBQYWNrYWdlUGFyc2VyLlByb3ZpZGVyIHAgPSBtUHJvdmlkZXJzLm1Qcm92aWRlcnMuZ2V0KGNvbXBvbmVudCk7CiAgICAgICAgICAgICBpZiAoREVCVUdfUEFDS0FHRV9JTkZPKSBMb2cudigKICAgICAgICAgICAgICAgICBUQUcsICJnZXRQcm92aWRlckluZm8gIiArIGNvbXBvbmVudCArICI6ICIgKyBwKTsKLSAgICAgICAgICAgIGlmIChwICE9IG51bGwgJiYgbVNldHRpbmdzLmlzRW5hYmxlZEFuZFZpc2libGVMUHIocC5pbmZvLCBmbGFncywgdXNlcklkKSkgeworICAgICAgICAgICAgaWYgKHAgIT0gbnVsbCAmJiBtU2V0dGluZ3MuaXNFbmFibGVkQW5kTWF0Y2hMUHIocC5pbmZvLCBmbGFncywgdXNlcklkKSkgewogICAgICAgICAgICAgICAgIFBhY2thZ2VTZXR0aW5nIHBzID0gbVNldHRpbmdzLm1QYWNrYWdlcy5nZXQoY29tcG9uZW50LmdldFBhY2thZ2VOYW1lKCkpOwogICAgICAgICAgICAgICAgIGlmIChwcyA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICAgICByZXR1cm4gUGFja2FnZVBhcnNlci5nZW5lcmF0ZVByb3ZpZGVySW5mbyhwLCBmbGFncywgcHMucmVhZFVzZXJTdGF0ZSh1c2VySWQpLApAQCAtMzcwNCw4ICszNzExLDggQEAKIAogICAgICAgICAgICAgZmluYWwgaW50IGZsYWdzID0gcGVybWlzc2lvbnNTdGF0ZS5nZXRQZXJtaXNzaW9uRmxhZ3MobmFtZSwgdXNlcklkKTsKICAgICAgICAgICAgIGlmICgoZmxhZ3MgJiBQYWNrYWdlTWFuYWdlci5GTEFHX1BFUk1JU1NJT05fU1lTVEVNX0ZJWEVEKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXhjZXB0aW9uKCJDYW5ub3QgZ3JhbnQgc3lzdGVtIGZpeGVkIHBlcm1pc3Npb246ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICsgbmFtZSArICIgZm9yIHBhY2thZ2U6ICIgKyBwYWNrYWdlTmFtZSk7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXhjZXB0aW9uKCJDYW5ub3QgZ3JhbnQgc3lzdGVtIGZpeGVkIHBlcm1pc3Npb24gIgorICAgICAgICAgICAgICAgICAgICAgICAgKyBuYW1lICsgIiBmb3IgcGFja2FnZSAiICsgcGFja2FnZU5hbWUpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoYnAuaXNEZXZlbG9wbWVudCgpKSB7CkBAIC0zODEzLDggKzM4MjAsOCBAQAogCiAgICAgICAgICAgICBmaW5hbCBpbnQgZmxhZ3MgPSBwZXJtaXNzaW9uc1N0YXRlLmdldFBlcm1pc3Npb25GbGFncyhuYW1lLCB1c2VySWQpOwogICAgICAgICAgICAgaWYgKChmbGFncyAmIFBhY2thZ2VNYW5hZ2VyLkZMQUdfUEVSTUlTU0lPTl9TWVNURU1fRklYRUQpICE9IDApIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFeGNlcHRpb24oIkNhbm5vdCByZXZva2Ugc3lzdGVtIGZpeGVkIHBlcm1pc3Npb246ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICsgbmFtZSArICIgZm9yIHBhY2thZ2U6ICIgKyBwYWNrYWdlTmFtZSk7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXhjZXB0aW9uKCJDYW5ub3QgcmV2b2tlIHN5c3RlbSBmaXhlZCBwZXJtaXNzaW9uICIKKyAgICAgICAgICAgICAgICAgICAgICAgICsgbmFtZSArICIgZm9yIHBhY2thZ2UgIiArIHBhY2thZ2VOYW1lKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGJwLmlzRGV2ZWxvcG1lbnQoKSkgewpAQCAtNDQwMSw3ICs0NDA4LDcgQEAKICAgICBwdWJsaWMgUmVzb2x2ZUluZm8gcmVzb2x2ZUludGVudChJbnRlbnQgaW50ZW50LCBTdHJpbmcgcmVzb2x2ZWRUeXBlLAogICAgICAgICAgICAgaW50IGZsYWdzLCBpbnQgdXNlcklkKSB7CiAgICAgICAgIGlmICghc1VzZXJNYW5hZ2VyLmV4aXN0cyh1c2VySWQpKSByZXR1cm4gbnVsbDsKLSAgICAgICAgZmxhZ3MgPSBhdWdtZW50RmxhZ3NGb3JVc2VyKGZsYWdzLCB1c2VySWQpOworICAgICAgICBmbGFncyA9IHVwZGF0ZUZsYWdzRm9yUmVzb2x2ZShmbGFncywgdXNlcklkLCBpbnRlbnQpOwogICAgICAgICBlbmZvcmNlQ3Jvc3NVc2VyUGVybWlzc2lvbihCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpLCB1c2VySWQsIGZhbHNlLCBmYWxzZSwgInJlc29sdmUgaW50ZW50Iik7CiAgICAgICAgIExpc3Q8UmVzb2x2ZUluZm8+IHF1ZXJ5ID0gcXVlcnlJbnRlbnRBY3Rpdml0aWVzKGludGVudCwgcmVzb2x2ZWRUeXBlLCBmbGFncywgdXNlcklkKTsKICAgICAgICAgZmluYWwgUmVzb2x2ZUluZm8gYmVzdENob2ljZSA9CkBAIC00NjE5LDcgKzQ2MjYsNyBAQAogICAgICAgICAgICAgICAgICAgICBwcGEuZHVtcChuZXcgTG9nUHJpbnRlcihMb2cuVkVSQk9TRSwgVEFHLCBMb2cuTE9HX0lEX1NZU1RFTSksICIgICIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBmaW5hbCBBY3Rpdml0eUluZm8gYWkgPSBnZXRBY3Rpdml0eUluZm8ocHBhLm1Db21wb25lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICBmbGFncyB8IFBhY2thZ2VNYW5hZ2VyLkdFVF9ESVNBQkxFRF9DT01QT05FTlRTLCB1c2VySWQpOworICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgfCBNQVRDSF9ESVNBQkxFRF9DT01QT05FTlRTLCB1c2VySWQpOwogICAgICAgICAgICAgICAgIGlmIChERUJVR19QUkVGRVJSRUQgfHwgZGVidWcpIHsKICAgICAgICAgICAgICAgICAgICAgU2xvZy52KFRBRywgIkZvdW5kIHBlcnNpc3RlbnQgcHJlZmVycmVkIGFjdGl2aXR5OiIpOwogICAgICAgICAgICAgICAgICAgICBpZiAoYWkgIT0gbnVsbCkgewpAQCAtNDY1OSw3ICs0NjY2LDcgQEAKICAgICAgICAgICAgIExpc3Q8UmVzb2x2ZUluZm8+IHF1ZXJ5LCBpbnQgcHJpb3JpdHksIGJvb2xlYW4gYWx3YXlzLAogICAgICAgICAgICAgYm9vbGVhbiByZW1vdmVNYXRjaGVzLCBib29sZWFuIGRlYnVnLCBpbnQgdXNlcklkKSB7CiAgICAgICAgIGlmICghc1VzZXJNYW5hZ2VyLmV4aXN0cyh1c2VySWQpKSByZXR1cm4gbnVsbDsKLSAgICAgICAgZmxhZ3MgPSBhdWdtZW50RmxhZ3NGb3JVc2VyKGZsYWdzLCB1c2VySWQpOworICAgICAgICBmbGFncyA9IHVwZGF0ZUZsYWdzRm9yUmVzb2x2ZShmbGFncywgdXNlcklkLCBpbnRlbnQpOwogICAgICAgICAvLyB3cml0ZXIKICAgICAgICAgc3luY2hyb25pemVkIChtUGFja2FnZXMpIHsKICAgICAgICAgICAgIGlmIChpbnRlbnQuZ2V0U2VsZWN0b3IoKSAhPSBudWxsKSB7CkBAIC00NzI4LDcgKzQ3MzUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgQWN0aXZpdHlJbmZvIGFpID0gZ2V0QWN0aXZpdHlJbmZvKHBhLm1QcmVmLm1Db21wb25lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzIHwgUGFja2FnZU1hbmFnZXIuR0VUX0RJU0FCTEVEX0NPTVBPTkVOVFMsIHVzZXJJZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzIHwgTUFUQ0hfRElTQUJMRURfQ09NUE9ORU5UUywgdXNlcklkKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERUJVR19QUkVGRVJSRUQgfHwgZGVidWcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTbG9nLnYoVEFHLCAiRm91bmQgcHJlZmVycmVkIGFjdGl2aXR5OiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhaSAhPSBudWxsKSB7CkBAIC00ODU4LDcgKzQ4NjUsNyBAQAogICAgIHB1YmxpYyBMaXN0PFJlc29sdmVJbmZvPiBxdWVyeUludGVudEFjdGl2aXRpZXMoSW50ZW50IGludGVudCwKICAgICAgICAgICAgIFN0cmluZyByZXNvbHZlZFR5cGUsIGludCBmbGFncywgaW50IHVzZXJJZCkgewogICAgICAgICBpZiAoIXNVc2VyTWFuYWdlci5leGlzdHModXNlcklkKSkgcmV0dXJuIENvbGxlY3Rpb25zLmVtcHR5TGlzdCgpOwotICAgICAgICBmbGFncyA9IGF1Z21lbnRGbGFnc0ZvclVzZXIoZmxhZ3MsIHVzZXJJZCk7CisgICAgICAgIGZsYWdzID0gdXBkYXRlRmxhZ3NGb3JSZXNvbHZlKGZsYWdzLCB1c2VySWQsIGludGVudCk7CiAgICAgICAgIGVuZm9yY2VDcm9zc1VzZXJQZXJtaXNzaW9uKEJpbmRlci5nZXRDYWxsaW5nVWlkKCksIHVzZXJJZCwgZmFsc2UsIGZhbHNlLCAicXVlcnkgaW50ZW50IGFjdGl2aXRpZXMiKTsKICAgICAgICAgQ29tcG9uZW50TmFtZSBjb21wID0gaW50ZW50LmdldENvbXBvbmVudCgpOwogICAgICAgICBpZiAoY29tcCA9PSBudWxsKSB7CkBAIC01MzQyLDcgKzUzNDksNyBAQAogICAgICAgICAgICAgSW50ZW50W10gc3BlY2lmaWNzLCBTdHJpbmdbXSBzcGVjaWZpY1R5cGVzLCBJbnRlbnQgaW50ZW50LAogICAgICAgICAgICAgU3RyaW5nIHJlc29sdmVkVHlwZSwgaW50IGZsYWdzLCBpbnQgdXNlcklkKSB7CiAgICAgICAgIGlmICghc1VzZXJNYW5hZ2VyLmV4aXN0cyh1c2VySWQpKSByZXR1cm4gQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCk7Ci0gICAgICAgIGZsYWdzID0gYXVnbWVudEZsYWdzRm9yVXNlcihmbGFncywgdXNlcklkKTsKKyAgICAgICAgZmxhZ3MgPSB1cGRhdGVGbGFnc0ZvclJlc29sdmUoZmxhZ3MsIHVzZXJJZCwgaW50ZW50KTsKICAgICAgICAgZW5mb3JjZUNyb3NzVXNlclBlcm1pc3Npb24oQmluZGVyLmdldENhbGxpbmdVaWQoKSwgdXNlcklkLCBmYWxzZSwKICAgICAgICAgICAgICAgICBmYWxzZSwgInF1ZXJ5IGludGVudCBhY3Rpdml0eSBvcHRpb25zIik7CiAgICAgICAgIGZpbmFsIFN0cmluZyByZXN1bHRzQWN0aW9uID0gaW50ZW50LmdldEFjdGlvbigpOwpAQCAtNTUxNSw3ICs1NTIyLDcgQEAKICAgICBwdWJsaWMgTGlzdDxSZXNvbHZlSW5mbz4gcXVlcnlJbnRlbnRSZWNlaXZlcnMoSW50ZW50IGludGVudCwgU3RyaW5nIHJlc29sdmVkVHlwZSwgaW50IGZsYWdzLAogICAgICAgICAgICAgaW50IHVzZXJJZCkgewogICAgICAgICBpZiAoIXNVc2VyTWFuYWdlci5leGlzdHModXNlcklkKSkgcmV0dXJuIENvbGxlY3Rpb25zLmVtcHR5TGlzdCgpOwotICAgICAgICBmbGFncyA9IGF1Z21lbnRGbGFnc0ZvclVzZXIoZmxhZ3MsIHVzZXJJZCk7CisgICAgICAgIGZsYWdzID0gdXBkYXRlRmxhZ3NGb3JSZXNvbHZlKGZsYWdzLCB1c2VySWQsIGludGVudCk7CiAgICAgICAgIENvbXBvbmVudE5hbWUgY29tcCA9IGludGVudC5nZXRDb21wb25lbnQoKTsKICAgICAgICAgaWYgKGNvbXAgPT0gbnVsbCkgewogICAgICAgICAgICAgaWYgKGludGVudC5nZXRTZWxlY3RvcigpICE9IG51bGwpIHsKQEAgLTU1NTIsNyArNTU1OSw3IEBACiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIFJlc29sdmVJbmZvIHJlc29sdmVTZXJ2aWNlKEludGVudCBpbnRlbnQsIFN0cmluZyByZXNvbHZlZFR5cGUsIGludCBmbGFncywgaW50IHVzZXJJZCkgewogICAgICAgICBpZiAoIXNVc2VyTWFuYWdlci5leGlzdHModXNlcklkKSkgcmV0dXJuIG51bGw7Ci0gICAgICAgIGZsYWdzID0gYXVnbWVudEZsYWdzRm9yVXNlcihmbGFncywgdXNlcklkKTsKKyAgICAgICAgZmxhZ3MgPSB1cGRhdGVGbGFnc0ZvclJlc29sdmUoZmxhZ3MsIHVzZXJJZCwgaW50ZW50KTsKICAgICAgICAgTGlzdDxSZXNvbHZlSW5mbz4gcXVlcnkgPSBxdWVyeUludGVudFNlcnZpY2VzKGludGVudCwgcmVzb2x2ZWRUeXBlLCBmbGFncywgdXNlcklkKTsKICAgICAgICAgaWYgKHF1ZXJ5ICE9IG51bGwpIHsKICAgICAgICAgICAgIGlmIChxdWVyeS5zaXplKCkgPj0gMSkgewpAQCAtNTU2OCw3ICs1NTc1LDcgQEAKICAgICBwdWJsaWMgTGlzdDxSZXNvbHZlSW5mbz4gcXVlcnlJbnRlbnRTZXJ2aWNlcyhJbnRlbnQgaW50ZW50LCBTdHJpbmcgcmVzb2x2ZWRUeXBlLCBpbnQgZmxhZ3MsCiAgICAgICAgICAgICBpbnQgdXNlcklkKSB7CiAgICAgICAgIGlmICghc1VzZXJNYW5hZ2VyLmV4aXN0cyh1c2VySWQpKSByZXR1cm4gQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCk7Ci0gICAgICAgIGZsYWdzID0gYXVnbWVudEZsYWdzRm9yVXNlcihmbGFncywgdXNlcklkKTsKKyAgICAgICAgZmxhZ3MgPSB1cGRhdGVGbGFnc0ZvclJlc29sdmUoZmxhZ3MsIHVzZXJJZCwgaW50ZW50KTsKICAgICAgICAgQ29tcG9uZW50TmFtZSBjb21wID0gaW50ZW50LmdldENvbXBvbmVudCgpOwogICAgICAgICBpZiAoY29tcCA9PSBudWxsKSB7CiAgICAgICAgICAgICBpZiAoaW50ZW50LmdldFNlbGVjdG9yKCkgIT0gbnVsbCkgewpAQCAtNTYwNiw3ICs1NjEzLDcgQEAKICAgICBwdWJsaWMgTGlzdDxSZXNvbHZlSW5mbz4gcXVlcnlJbnRlbnRDb250ZW50UHJvdmlkZXJzKAogICAgICAgICAgICAgSW50ZW50IGludGVudCwgU3RyaW5nIHJlc29sdmVkVHlwZSwgaW50IGZsYWdzLCBpbnQgdXNlcklkKSB7CiAgICAgICAgIGlmICghc1VzZXJNYW5hZ2VyLmV4aXN0cyh1c2VySWQpKSByZXR1cm4gQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCk7Ci0gICAgICAgIGZsYWdzID0gYXVnbWVudEZsYWdzRm9yVXNlcihmbGFncywgdXNlcklkKTsKKyAgICAgICAgZmxhZ3MgPSB1cGRhdGVGbGFnc0ZvclJlc29sdmUoZmxhZ3MsIHVzZXJJZCwgaW50ZW50KTsKICAgICAgICAgQ29tcG9uZW50TmFtZSBjb21wID0gaW50ZW50LmdldENvbXBvbmVudCgpOwogICAgICAgICBpZiAoY29tcCA9PSBudWxsKSB7CiAgICAgICAgICAgICBpZiAoaW50ZW50LmdldFNlbGVjdG9yKCkgIT0gbnVsbCkgewpAQCAtNTY0Miw4ICs1NjQ5LDkgQEAKIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBQYXJjZWxlZExpc3RTbGljZTxQYWNrYWdlSW5mbz4gZ2V0SW5zdGFsbGVkUGFja2FnZXMoaW50IGZsYWdzLCBpbnQgdXNlcklkKSB7Ci0gICAgICAgIGZpbmFsIGJvb2xlYW4gbGlzdFVuaW5zdGFsbGVkID0gKGZsYWdzICYgUGFja2FnZU1hbmFnZXIuR0VUX1VOSU5TVEFMTEVEX1BBQ0tBR0VTKSAhPSAwOwotCisgICAgICAgIGlmICghc1VzZXJNYW5hZ2VyLmV4aXN0cyh1c2VySWQpKSByZXR1cm4gUGFyY2VsZWRMaXN0U2xpY2UuZW1wdHlMaXN0KCk7CisgICAgICAgIGZsYWdzID0gdXBkYXRlRmxhZ3NGb3JQYWNrYWdlKGZsYWdzLCB1c2VySWQsIG51bGwpOworICAgICAgICBmaW5hbCBib29sZWFuIGxpc3RVbmluc3RhbGxlZCA9IChmbGFncyAmIE1BVENIX1VOSU5TVEFMTEVEX1BBQ0tBR0VTKSAhPSAwOwogICAgICAgICBlbmZvcmNlQ3Jvc3NVc2VyUGVybWlzc2lvbihCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpLCB1c2VySWQsIHRydWUsIGZhbHNlLCAiZ2V0IGluc3RhbGxlZCBwYWNrYWdlcyIpOwogCiAgICAgICAgIC8vIHdyaXRlcgpAQCAtNTcyMiw5ICs1NzMwLDkgQEAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgUGFyY2VsZWRMaXN0U2xpY2U8UGFja2FnZUluZm8+IGdldFBhY2thZ2VzSG9sZGluZ1Blcm1pc3Npb25zKAogICAgICAgICAgICAgU3RyaW5nW10gcGVybWlzc2lvbnMsIGludCBmbGFncywgaW50IHVzZXJJZCkgewotICAgICAgICBpZiAoIXNVc2VyTWFuYWdlci5leGlzdHModXNlcklkKSkgcmV0dXJuIG51bGw7Ci0gICAgICAgIGZsYWdzID0gYXVnbWVudEZsYWdzRm9yVXNlcihmbGFncywgdXNlcklkKTsKLSAgICAgICAgZmluYWwgYm9vbGVhbiBsaXN0VW5pbnN0YWxsZWQgPSAoZmxhZ3MgJiBQYWNrYWdlTWFuYWdlci5HRVRfVU5JTlNUQUxMRURfUEFDS0FHRVMpICE9IDA7CisgICAgICAgIGlmICghc1VzZXJNYW5hZ2VyLmV4aXN0cyh1c2VySWQpKSByZXR1cm4gUGFyY2VsZWRMaXN0U2xpY2UuZW1wdHlMaXN0KCk7CisgICAgICAgIGZsYWdzID0gdXBkYXRlRmxhZ3NGb3JQYWNrYWdlKGZsYWdzLCB1c2VySWQsIHBlcm1pc3Npb25zKTsKKyAgICAgICAgZmluYWwgYm9vbGVhbiBsaXN0VW5pbnN0YWxsZWQgPSAoZmxhZ3MgJiBNQVRDSF9VTklOU1RBTExFRF9QQUNLQUdFUykgIT0gMDsKIAogICAgICAgICAvLyB3cml0ZXIKICAgICAgICAgc3luY2hyb25pemVkIChtUGFja2FnZXMpIHsKQEAgLTU3NTAsOSArNTc1OCw5IEBACiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgUGFyY2VsZWRMaXN0U2xpY2U8QXBwbGljYXRpb25JbmZvPiBnZXRJbnN0YWxsZWRBcHBsaWNhdGlvbnMoaW50IGZsYWdzLCBpbnQgdXNlcklkKSB7Ci0gICAgICAgIGlmICghc1VzZXJNYW5hZ2VyLmV4aXN0cyh1c2VySWQpKSByZXR1cm4gbnVsbDsKLSAgICAgICAgZmxhZ3MgPSBhdWdtZW50RmxhZ3NGb3JVc2VyKGZsYWdzLCB1c2VySWQpOwotICAgICAgICBmaW5hbCBib29sZWFuIGxpc3RVbmluc3RhbGxlZCA9IChmbGFncyAmIFBhY2thZ2VNYW5hZ2VyLkdFVF9VTklOU1RBTExFRF9QQUNLQUdFUykgIT0gMDsKKyAgICAgICAgaWYgKCFzVXNlck1hbmFnZXIuZXhpc3RzKHVzZXJJZCkpIHJldHVybiBQYXJjZWxlZExpc3RTbGljZS5lbXB0eUxpc3QoKTsKKyAgICAgICAgZmxhZ3MgPSB1cGRhdGVGbGFnc0ZvckFwcGxpY2F0aW9uKGZsYWdzLCB1c2VySWQsIG51bGwpOworICAgICAgICBmaW5hbCBib29sZWFuIGxpc3RVbmluc3RhbGxlZCA9IChmbGFncyAmIE1BVENIX1VOSU5TVEFMTEVEX1BBQ0tBR0VTKSAhPSAwOwogCiAgICAgICAgIC8vIHdyaXRlcgogICAgICAgICBzeW5jaHJvbml6ZWQgKG1QYWNrYWdlcykgewpAQCAtNTg5NCw3ICs1OTAyLDcgQEAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgUHJvdmlkZXJJbmZvIHJlc29sdmVDb250ZW50UHJvdmlkZXIoU3RyaW5nIG5hbWUsIGludCBmbGFncywgaW50IHVzZXJJZCkgewogICAgICAgICBpZiAoIXNVc2VyTWFuYWdlci5leGlzdHModXNlcklkKSkgcmV0dXJuIG51bGw7Ci0gICAgICAgIGZsYWdzID0gYXVnbWVudEZsYWdzRm9yVXNlcihmbGFncywgdXNlcklkKTsKKyAgICAgICAgZmxhZ3MgPSB1cGRhdGVGbGFnc0ZvckNvbXBvbmVudChmbGFncywgdXNlcklkLCBuYW1lKTsKICAgICAgICAgLy8gcmVhZGVyCiAgICAgICAgIHN5bmNocm9uaXplZCAobVBhY2thZ2VzKSB7CiAgICAgICAgICAgICBmaW5hbCBQYWNrYWdlUGFyc2VyLlByb3ZpZGVyIHByb3ZpZGVyID0gbVByb3ZpZGVyc0J5QXV0aG9yaXR5LmdldChuYW1lKTsKQEAgLTU5MDIsNyArNTkxMCw3IEBACiAgICAgICAgICAgICAgICAgICAgID8gbVNldHRpbmdzLm1QYWNrYWdlcy5nZXQocHJvdmlkZXIub3duZXIucGFja2FnZU5hbWUpCiAgICAgICAgICAgICAgICAgICAgIDogbnVsbDsKICAgICAgICAgICAgIHJldHVybiBwcyAhPSBudWxsCi0gICAgICAgICAgICAgICAgICAgICYmIG1TZXR0aW5ncy5pc0VuYWJsZWRBbmRWaXNpYmxlTFByKHByb3ZpZGVyLmluZm8sIGZsYWdzLCB1c2VySWQpCisgICAgICAgICAgICAgICAgICAgICYmIG1TZXR0aW5ncy5pc0VuYWJsZWRBbmRNYXRjaExQcihwcm92aWRlci5pbmZvLCBmbGFncywgdXNlcklkKQogICAgICAgICAgICAgICAgICAgICAmJiAoIW1TYWZlTW9kZSB8fCAocHJvdmlkZXIuaW5mby5hcHBsaWNhdGlvbkluZm8uZmxhZ3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmQXBwbGljYXRpb25JbmZvLkZMQUdfU1lTVEVNKSAhPSAwKQogICAgICAgICAgICAgICAgICAgICA/IFBhY2thZ2VQYXJzZXIuZ2VuZXJhdGVQcm92aWRlckluZm8ocHJvdmlkZXIsIGZsYWdzLApAQCAtNTk0Niw3ICs1OTU0LDcgQEAKICAgICAgICAgZmluYWwgaW50IHVzZXJJZCA9IHByb2Nlc3NOYW1lICE9IG51bGwgPyBVc2VySGFuZGxlLmdldFVzZXJJZCh1aWQpCiAgICAgICAgICAgICAgICAgOiBVc2VySGFuZGxlLmdldENhbGxpbmdVc2VySWQoKTsKICAgICAgICAgaWYgKCFzVXNlck1hbmFnZXIuZXhpc3RzKHVzZXJJZCkpIHJldHVybiBudWxsOwotICAgICAgICBmbGFncyA9IGF1Z21lbnRGbGFnc0ZvclVzZXIoZmxhZ3MsIHVzZXJJZCk7CisgICAgICAgIGZsYWdzID0gdXBkYXRlRmxhZ3NGb3JDb21wb25lbnQoZmxhZ3MsIHVzZXJJZCwgcHJvY2Vzc05hbWUpOwogCiAgICAgICAgIEFycmF5TGlzdDxQcm92aWRlckluZm8+IGZpbmFsTGlzdCA9IG51bGw7CiAgICAgICAgIC8vIHJlYWRlcgpAQCAtNTk1OSw3ICs1OTY3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICYmIChwcm9jZXNzTmFtZSA9PSBudWxsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChwLmluZm8ucHJvY2Vzc05hbWUuZXF1YWxzKHByb2Nlc3NOYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIFVzZXJIYW5kbGUuaXNTYW1lQXBwKHAuaW5mby5hcHBsaWNhdGlvbkluZm8udWlkLCB1aWQpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIG1TZXR0aW5ncy5pc0VuYWJsZWRBbmRWaXNpYmxlTFByKHAuaW5mbywgZmxhZ3MsIHVzZXJJZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIG1TZXR0aW5ncy5pc0VuYWJsZWRBbmRNYXRjaExQcihwLmluZm8sIGZsYWdzLCB1c2VySWQpCiAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoIW1TYWZlTW9kZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAocC5pbmZvLmFwcGxpY2F0aW9uSW5mby5mbGFncyAmIEFwcGxpY2F0aW9uSW5mby5GTEFHX1NZU1RFTSkgIT0gMCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbmFsTGlzdCA9PSBudWxsKSB7CkBAIC01OTgzLDggKzU5OTEsNyBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBJbnN0cnVtZW50YXRpb25JbmZvIGdldEluc3RydW1lbnRhdGlvbkluZm8oQ29tcG9uZW50TmFtZSBuYW1lLAotICAgICAgICAgICAgaW50IGZsYWdzKSB7CisgICAgcHVibGljIEluc3RydW1lbnRhdGlvbkluZm8gZ2V0SW5zdHJ1bWVudGF0aW9uSW5mbyhDb21wb25lbnROYW1lIG5hbWUsIGludCBmbGFncykgewogICAgICAgICAvLyByZWFkZXIKICAgICAgICAgc3luY2hyb25pemVkIChtUGFja2FnZXMpIHsKICAgICAgICAgICAgIGZpbmFsIFBhY2thZ2VQYXJzZXIuSW5zdHJ1bWVudGF0aW9uIGkgPSBtSW5zdHJ1bWVudGF0aW9uLmdldChuYW1lKTsKQEAgLTYxNzksNyArNjE4Niw2IEBACiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHBwLmNvbGxlY3RDZXJ0aWZpY2F0ZXMocGtnLCBwYXJzZUZsYWdzKTsKLSAgICAgICAgICAgIHBwLmNvbGxlY3RNYW5pZmVzdERpZ2VzdChwa2cpOwogICAgICAgICB9IGNhdGNoIChQYWNrYWdlUGFyc2VyRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIHRocm93IFBhY2thZ2VNYW5hZ2VyRXhjZXB0aW9uLmZyb20oZSk7CiAgICAgICAgIH0KQEAgLTYyNjcsNyArNjI3Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGlnbm9yZWQ6IHVwZGF0ZWQgdmVyc2lvbiAiICsgcHMudmVyc2lvbkNvZGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgYmV0dGVyIHRoYW4gdGhpcyAiICsgcGtnLm1WZXJzaW9uQ29kZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghdXBkYXRlZFBrZy5jb2RlUGF0aC5lcXVhbHMoc2NhbkZpbGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTbG9nLncoUGFja2FnZU1hbmFnZXJTZXJ2aWNlLlRBRywgIkNvZGUgcGF0aCBmb3IgaGlkZGVuIHN5c3RlbSBwa2cgOiAiCisgICAgICAgICAgICAgICAgICAgICAgICBTbG9nLncoUGFja2FnZU1hbmFnZXJTZXJ2aWNlLlRBRywgIkNvZGUgcGF0aCBmb3IgaGlkZGVuIHN5c3RlbSBwa2cgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHBzLm5hbWUgKyAiIGNoYW5naW5nIGZyb20gIiArIHVwZGF0ZWRQa2cuY29kZVBhdGhTdHJpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHRvICIgKyBzY2FuRmlsZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVkUGtnLmNvZGVQYXRoID0gc2NhbkZpbGU7CkBAIC02MzkyLDcgKzYzOTgsNyBAQAogICAgICAgICAgICAgICAgIGJhc2VSZXNvdXJjZVBhdGggPSBwcy5yZXNvdXJjZVBhdGhTdHJpbmc7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIFNob3VsZCBub3QgaGFwcGVuIGF0IGFsbC4gSnVzdCBsb2cgYW4gZXJyb3IuCi0gICAgICAgICAgICAgICAgU2xvZy5lKFRBRywgIlJlc291cmNlIHBhdGggbm90IHNldCBmb3IgcGtnIDogIiArIHBrZy5wYWNrYWdlTmFtZSk7CisgICAgICAgICAgICAgICAgU2xvZy5lKFRBRywgIlJlc291cmNlIHBhdGggbm90IHNldCBmb3IgcGFja2FnZSAiICsgcGtnLnBhY2thZ2VOYW1lKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHJlc291cmNlUGF0aCA9IHBrZy5jb2RlUGF0aDsKQEAgLTY2NDEsNyArNjY0Nyw3IEBACiAgICAgICAgIHN5bmNocm9uaXplZCAobVBhY2thZ2VzKSB7CiAgICAgICAgICAgICBwa2cgPSBtUGFja2FnZXMuZ2V0KHBhY2thZ2VOYW1lKTsKICAgICAgICAgICAgIGlmIChwa2cgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIk1pc3NpbmcgcGFja2FnZTogIiArIHBhY2thZ2VOYW1lKTsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJVbmtub3duIHBhY2thZ2U6ICIgKyBwYWNrYWdlTmFtZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtNzE1MSw3ICs3MTU3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwa2cubVNpZ25hdHVyZXMpICE9IFBhY2thZ2VNYW5hZ2VyLlNJR05BVFVSRV9NQVRDSCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYWNrYWdlTWFuYWdlckV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOU1RBTExfUEFSU0VfRkFJTEVEX0lOQ09OU0lTVEVOVF9DRVJUSUZJQ0FURVMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTaWduYXR1cmUgbWlzbWF0Y2ggZm9yIHNoYXJlZCB1c2VyIDogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2lnbmF0dXJlIG1pc21hdGNoIGZvciBzaGFyZWQgdXNlcjogIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHBrZ1NldHRpbmcuc2hhcmVkVXNlcik7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTc0MDMsNyArNzQwOSw3IEBACiAgICAgICAgIGlmICgoc2NhbkZsYWdzICYgU0NBTl9OT19ERVgpID09IDAgJiYgKHNjYW5GbGFncyAmIFNDQU5fTkVXX0lOU1RBTEwpICE9IDApIHsKICAgICAgICAgICAgIGlmIChjcHVBYmlPdmVycmlkZSA9PSBudWxsICYmIHBrZ1NldHRpbmcuY3B1QWJpT3ZlcnJpZGVTdHJpbmcgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIFNsb2cudyhUQUcsICJJZ25vcmluZyBwZXJzaXN0ZWQgQUJJIG92ZXJyaWRlICIgKyBjcHVBYmlPdmVycmlkZSArCi0gICAgICAgICAgICAgICAgICAgICAgICAiIGZvciBwYWNrYWdlOiAiICsgcGtnLnBhY2thZ2VOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICIgZm9yIHBhY2thZ2UgIiArIHBrZy5wYWNrYWdlTmFtZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtODExMCw3ICs4MTE2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgcHMucHJpbWFyeUNwdUFiaVN0cmluZyA9IGFkanVzdGVkQWJpOwogICAgICAgICAgICAgICAgICAgICBpZiAocHMucGtnICE9IG51bGwgJiYgcHMucGtnLmFwcGxpY2F0aW9uSW5mbyAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBwcy5wa2cuYXBwbGljYXRpb25JbmZvLnByaW1hcnlDcHVBYmkgPSBhZGp1c3RlZEFiaTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFNsb2cuaShUQUcsICJBZGp1c3RpbmcgQUJJIGZvciA6ICIgKyBwcy5uYW1lICsgIiB0byAiICsgYWRqdXN0ZWRBYmkpOworICAgICAgICAgICAgICAgICAgICAgICAgU2xvZy5pKFRBRywgIkFkanVzdGluZyBBQkkgZm9yICIgKyBwcy5uYW1lICsgIiB0byAiICsgYWRqdXN0ZWRBYmkpOwogICAgICAgICAgICAgICAgICAgICAgICAgbUluc3RhbGxlci5ybWRleChwcy5jb2RlUGF0aFN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RGV4Q29kZUluc3RydWN0aW9uU2V0KGdldFByZWZlcnJlZEluc3RydWN0aW9uU2V0KCkpKTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtODM0OCw3ICs4MzU0LDcgQEAKICAgICAgICAgICAgIC8vIDY0IGJpdCBhcHBzIHdpbGwgc2VlIGEgNjQgYml0IHByaW1hcnkgQUJJLAogCiAgICAgICAgICAgICBpZiAoKHBrZy5hcHBsaWNhdGlvbkluZm8uZmxhZ3MgJiBBcHBsaWNhdGlvbkluZm8uRkxBR19NVUxUSUFSQ0gpID09IDApIHsKLSAgICAgICAgICAgICAgICBTbG9nLmUoVEFHLCAiUGFja2FnZTogIiArIHBrZyArICIgaGFzIG11bHRpcGxlIGJ1bmRsZWQgbGlicywgYnV0IGlzIG5vdCBtdWx0aWFyY2guIik7CisgICAgICAgICAgICAgICAgU2xvZy5lKFRBRywgIlBhY2thZ2UgIiArIHBrZyArICIgaGFzIG11bHRpcGxlIGJ1bmRsZWQgbGlicywgYnV0IGlzIG5vdCBtdWx0aWFyY2guIik7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChWTVJ1bnRpbWUuaXM2NEJpdEluc3RydWN0aW9uU2V0KGdldFByZWZlcnJlZEluc3RydWN0aW9uU2V0KCkpKSB7CkBAIC05MjI1LDcgKzkyMzEsNyBAQAogICAgICAgICBwcm90ZWN0ZWQgUmVzb2x2ZUluZm8gbmV3UmVzdWx0KFBhY2thZ2VQYXJzZXIuQWN0aXZpdHlJbnRlbnRJbmZvIGluZm8sCiAgICAgICAgICAgICAgICAgaW50IG1hdGNoLCBpbnQgdXNlcklkKSB7CiAgICAgICAgICAgICBpZiAoIXNVc2VyTWFuYWdlci5leGlzdHModXNlcklkKSkgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICBpZiAoIW1TZXR0aW5ncy5pc0VuYWJsZWRBbmRWaXNpYmxlTFByKGluZm8uYWN0aXZpdHkuaW5mbywgbUZsYWdzLCB1c2VySWQpKSB7CisgICAgICAgICAgICBpZiAoIW1TZXR0aW5ncy5pc0VuYWJsZWRBbmRNYXRjaExQcihpbmZvLmFjdGl2aXR5LmluZm8sIG1GbGFncywgdXNlcklkKSkgewogICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZmluYWwgUGFja2FnZVBhcnNlci5BY3Rpdml0eSBhY3Rpdml0eSA9IGluZm8uYWN0aXZpdHk7CkBAIC05NDQ5LDcgKzk0NTUsNyBAQAogICAgICAgICAgICAgICAgIGludCBtYXRjaCwgaW50IHVzZXJJZCkgewogICAgICAgICAgICAgaWYgKCFzVXNlck1hbmFnZXIuZXhpc3RzKHVzZXJJZCkpIHJldHVybiBudWxsOwogICAgICAgICAgICAgZmluYWwgUGFja2FnZVBhcnNlci5TZXJ2aWNlSW50ZW50SW5mbyBpbmZvID0gKFBhY2thZ2VQYXJzZXIuU2VydmljZUludGVudEluZm8pZmlsdGVyOwotICAgICAgICAgICAgaWYgKCFtU2V0dGluZ3MuaXNFbmFibGVkQW5kVmlzaWJsZUxQcihpbmZvLnNlcnZpY2UuaW5mbywgbUZsYWdzLCB1c2VySWQpKSB7CisgICAgICAgICAgICBpZiAoIW1TZXR0aW5ncy5pc0VuYWJsZWRBbmRNYXRjaExQcihpbmZvLnNlcnZpY2UuaW5mbywgbUZsYWdzLCB1c2VySWQpKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmaW5hbCBQYWNrYWdlUGFyc2VyLlNlcnZpY2Ugc2VydmljZSA9IGluZm8uc2VydmljZTsKQEAgLTk2NzIsNyArOTY3OCw3IEBACiAgICAgICAgICAgICBpZiAoIXNVc2VyTWFuYWdlci5leGlzdHModXNlcklkKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgIGZpbmFsIFBhY2thZ2VQYXJzZXIuUHJvdmlkZXJJbnRlbnRJbmZvIGluZm8gPSBmaWx0ZXI7Ci0gICAgICAgICAgICBpZiAoIW1TZXR0aW5ncy5pc0VuYWJsZWRBbmRWaXNpYmxlTFByKGluZm8ucHJvdmlkZXIuaW5mbywgbUZsYWdzLCB1c2VySWQpKSB7CisgICAgICAgICAgICBpZiAoIW1TZXR0aW5ncy5pc0VuYWJsZWRBbmRNYXRjaExQcihpbmZvLnByb3ZpZGVyLmluZm8sIG1GbGFncywgdXNlcklkKSkgewogICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZmluYWwgUGFja2FnZVBhcnNlci5Qcm92aWRlciBwcm92aWRlciA9IGluZm8ucHJvdmlkZXI7CkBAIC0xMDAxMSw3ICsxMDAxNyw3IEBACiAgICAgICAgIH0KICAgICAgICAgZmluYWwgVmVyaWZpY2F0aW9uUGFyYW1zIHZlcmlmUGFyYW1zID0gbmV3IFZlcmlmaWNhdGlvblBhcmFtcygKICAgICAgICAgICAgICAgICBudWxsLCBzZXNzaW9uUGFyYW1zLm9yaWdpbmF0aW5nVXJpLCBzZXNzaW9uUGFyYW1zLnJlZmVycmVyVXJpLAotICAgICAgICAgICAgICAgIHNlc3Npb25QYXJhbXMub3JpZ2luYXRpbmdVaWQsIG51bGwpOworICAgICAgICAgICAgICAgIHNlc3Npb25QYXJhbXMub3JpZ2luYXRpbmdVaWQpOwogICAgICAgICB2ZXJpZlBhcmFtcy5zZXRJbnN0YWxsZXJVaWQoaW5zdGFsbGVyVWlkKTsKIAogICAgICAgICBmaW5hbCBPcmlnaW5JbmZvIG9yaWdpbjsKQEAgLTEwNTk0LDcgKzEwNjAwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXhjZXB0aW9uKCJCYWQgb2JqZWN0ICIgKyBvYmogKyAiIGZvciB1aWQgIiArIHVpZCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFeGNlcHRpb24oIlVua25vd24gY2FsbGluZyB1aWQgIiArIHVpZCk7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXhjZXB0aW9uKCJVbmtub3duIGNhbGxpbmcgVUlEOiAiICsgdWlkKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gVmVyaWZ5OiBjYW4ndCBzZXQgaW5zdGFsbGVyUGFja2FnZU5hbWUgdG8gYSBwYWNrYWdlIHRoYXQgaXMKQEAgLTEwOTkzLDEzICsxMDk5OSw2IEBACiAgICAgICAgICAgICAgICAgICAgICsgIiBmaWxlPSIgKyBvcmlnaW4uZmlsZSArICIgY2lkPSIgKyBvcmlnaW4uY2lkICsgIn0iOwogICAgICAgICB9CiAKLSAgICAgICAgcHVibGljIE1hbmlmZXN0RGlnZXN0IGdldE1hbmlmZXN0RGlnZXN0KCkgewotICAgICAgICAgICAgaWYgKHZlcmlmaWNhdGlvblBhcmFtcyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdmVyaWZpY2F0aW9uUGFyYW1zLmdldE1hbmlmZXN0RGlnZXN0KCk7Ci0gICAgICAgIH0KLQogICAgICAgICBwcml2YXRlIGludCBpbnN0YWxsTG9jYXRpb25Qb2xpY3koUGFja2FnZUluZm9MaXRlIHBrZ0xpdGUpIHsKICAgICAgICAgICAgIFN0cmluZyBwYWNrYWdlTmFtZSA9IHBrZ0xpdGUucGFja2FnZU5hbWU7CiAgICAgICAgICAgICBpbnQgaW5zdGFsbExvY2F0aW9uID0gcGtnTGl0ZS5pbnN0YWxsTG9jYXRpb247CkBAIC0xMTIwMiw5ICsxMTIwMSw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFDS0FHRV9NSU1FX1RZUEUpOwogICAgICAgICAgICAgICAgICAgICB2ZXJpZmljYXRpb24uYWRkRmxhZ3MoSW50ZW50LkZMQUdfR1JBTlRfUkVBRF9VUklfUEVSTUlTU0lPTik7CiAKKyAgICAgICAgICAgICAgICAgICAgLy8gUXVlcnkgYWxsIGxpdmUgdmVyaWZpZXJzIGJhc2VkIG9uIGN1cnJlbnQgdXNlciBzdGF0ZQogICAgICAgICAgICAgICAgICAgICBmaW5hbCBMaXN0PFJlc29sdmVJbmZvPiByZWNlaXZlcnMgPSBxdWVyeUludGVudFJlY2VpdmVycyh2ZXJpZmljYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFDS0FHRV9NSU1FX1RZUEUsIFBhY2thZ2VNYW5hZ2VyLkdFVF9ESVNBQkxFRF9DT01QT05FTlRTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcmlmaWVyVXNlci5nZXRJZGVudGlmaWVyKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBQ0tBR0VfTUlNRV9UWVBFLCAwLCB2ZXJpZmllclVzZXIuZ2V0SWRlbnRpZmllcigpKTsKIAogICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUdfVkVSSUZZKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBTbG9nLmQoVEFHLCAiRm91bmQgIiArIHJlY2VpdmVycy5zaXplKCkgKyAiIHZlcmlmaWVycyBmb3IgaW50ZW50ICIKQEAgLTExNDE4LDcgKzExNDE3LDYgQEAKICAgICAgICAgZmluYWwgaW50IGluc3RhbGxGbGFnczsKICAgICAgICAgZmluYWwgU3RyaW5nIGluc3RhbGxlclBhY2thZ2VOYW1lOwogICAgICAgICBmaW5hbCBTdHJpbmcgdm9sdW1lVXVpZDsKLSAgICAgICAgZmluYWwgTWFuaWZlc3REaWdlc3QgbWFuaWZlc3REaWdlc3Q7CiAgICAgICAgIGZpbmFsIFVzZXJIYW5kbGUgdXNlcjsKICAgICAgICAgZmluYWwgU3RyaW5nIGFiaU92ZXJyaWRlOwogICAgICAgICBmaW5hbCBTdHJpbmdbXSBpbnN0YWxsR3JhbnRQZXJtaXNzaW9uczsKQEAgLTExNDMzLDcgKzExNDMxLDcgQEAKIAogICAgICAgICBJbnN0YWxsQXJncyhPcmlnaW5JbmZvIG9yaWdpbiwgTW92ZUluZm8gbW92ZSwgSVBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXIyIG9ic2VydmVyLAogICAgICAgICAgICAgICAgIGludCBpbnN0YWxsRmxhZ3MsIFN0cmluZyBpbnN0YWxsZXJQYWNrYWdlTmFtZSwgU3RyaW5nIHZvbHVtZVV1aWQsCi0gICAgICAgICAgICAgICAgTWFuaWZlc3REaWdlc3QgbWFuaWZlc3REaWdlc3QsIFVzZXJIYW5kbGUgdXNlciwgU3RyaW5nW10gaW5zdHJ1Y3Rpb25TZXRzLAorICAgICAgICAgICAgICAgIFVzZXJIYW5kbGUgdXNlciwgU3RyaW5nW10gaW5zdHJ1Y3Rpb25TZXRzLAogICAgICAgICAgICAgICAgIFN0cmluZyBhYmlPdmVycmlkZSwgU3RyaW5nW10gaW5zdGFsbEdyYW50UGVybWlzc2lvbnMsCiAgICAgICAgICAgICAgICAgU3RyaW5nIHRyYWNlTWV0aG9kLCBpbnQgdHJhY2VDb29raWUpIHsKICAgICAgICAgICAgIHRoaXMub3JpZ2luID0gb3JpZ2luOwpAQCAtMTE0NDIsNyArMTE0NDAsNiBAQAogICAgICAgICAgICAgdGhpcy5vYnNlcnZlciA9IG9ic2VydmVyOwogICAgICAgICAgICAgdGhpcy5pbnN0YWxsZXJQYWNrYWdlTmFtZSA9IGluc3RhbGxlclBhY2thZ2VOYW1lOwogICAgICAgICAgICAgdGhpcy52b2x1bWVVdWlkID0gdm9sdW1lVXVpZDsKLSAgICAgICAgICAgIHRoaXMubWFuaWZlc3REaWdlc3QgPSBtYW5pZmVzdERpZ2VzdDsKICAgICAgICAgICAgIHRoaXMudXNlciA9IHVzZXI7CiAgICAgICAgICAgICB0aGlzLmluc3RydWN0aW9uU2V0cyA9IGluc3RydWN0aW9uU2V0czsKICAgICAgICAgICAgIHRoaXMuYWJpT3ZlcnJpZGUgPSBhYmlPdmVycmlkZTsKQEAgLTExNTE3LDggKzExNTE0LDggQEAKICAgICAgICAgICAgICAgICBmb3IgKFN0cmluZyBkZXhDb2RlSW5zdHJ1Y3Rpb25TZXQgOiBkZXhDb2RlSW5zdHJ1Y3Rpb25TZXRzKSB7CiAgICAgICAgICAgICAgICAgICAgIGludCByZXRDb2RlID0gbUluc3RhbGxlci5ybWRleChjb2RlUGF0aCwgZGV4Q29kZUluc3RydWN0aW9uU2V0KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHJldENvZGUgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTbG9nLncoVEFHLCAiQ291bGRuJ3QgcmVtb3ZlIGRleCBmaWxlIGZvciBwYWNrYWdlOiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBhdCBsb2NhdGlvbiAiICsgY29kZVBhdGggKyAiLCByZXRjb2RlPSIgKyByZXRDb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNsb2cudyhUQUcsICJDb3VsZG4ndCByZW1vdmUgZGV4IGZpbGUgZm9yIHBhY2thZ2UgYXQgbG9jYXRpb24gIiArIGNvZGVQYXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgcmV0Y29kZT0iICsgcmV0Q29kZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBkb24ndCBjb25zaWRlciB0aGlzIHRvIGJlIGEgZmFpbHVyZSBvZiB0aGUgY29yZSBwYWNrYWdlIGRlbGV0aW9uCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC0xMTU0NCw3ICsxMTU0MSw3IEBACiAgICAgICAgIC8qKiBOZXcgaW5zdGFsbCAqLwogICAgICAgICBGaWxlSW5zdGFsbEFyZ3MoSW5zdGFsbFBhcmFtcyBwYXJhbXMpIHsKICAgICAgICAgICAgIHN1cGVyKHBhcmFtcy5vcmlnaW4sIHBhcmFtcy5tb3ZlLCBwYXJhbXMub2JzZXJ2ZXIsIHBhcmFtcy5pbnN0YWxsRmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5pbnN0YWxsZXJQYWNrYWdlTmFtZSwgcGFyYW1zLnZvbHVtZVV1aWQsIHBhcmFtcy5nZXRNYW5pZmVzdERpZ2VzdCgpLAorICAgICAgICAgICAgICAgICAgICBwYXJhbXMuaW5zdGFsbGVyUGFja2FnZU5hbWUsIHBhcmFtcy52b2x1bWVVdWlkLAogICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZ2V0VXNlcigpLCBudWxsIC8qIGluc3RydWN0aW9uIHNldHMgKi8sIHBhcmFtcy5wYWNrYWdlQWJpT3ZlcnJpZGUsCiAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5ncmFudGVkUnVudGltZVBlcm1pc3Npb25zLAogICAgICAgICAgICAgICAgICAgICBwYXJhbXMudHJhY2VNZXRob2QsIHBhcmFtcy50cmFjZUNvb2tpZSk7CkBAIC0xMTU1NSw3ICsxMTU1Miw3IEBACiAKICAgICAgICAgLyoqIEV4aXN0aW5nIGluc3RhbGwgKi8KICAgICAgICAgRmlsZUluc3RhbGxBcmdzKFN0cmluZyBjb2RlUGF0aCwgU3RyaW5nIHJlc291cmNlUGF0aCwgU3RyaW5nW10gaW5zdHJ1Y3Rpb25TZXRzKSB7Ci0gICAgICAgICAgICBzdXBlcihPcmlnaW5JbmZvLmZyb21Ob3RoaW5nKCksIG51bGwsIG51bGwsIDAsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIGluc3RydWN0aW9uU2V0cywKKyAgICAgICAgICAgIHN1cGVyKE9yaWdpbkluZm8uZnJvbU5vdGhpbmcoKSwgbnVsbCwgbnVsbCwgMCwgbnVsbCwgbnVsbCwgbnVsbCwgaW5zdHJ1Y3Rpb25TZXRzLAogICAgICAgICAgICAgICAgICAgICBudWxsLCBudWxsLCBudWxsLCAwKTsKICAgICAgICAgICAgIHRoaXMuY29kZUZpbGUgPSAoY29kZVBhdGggIT0gbnVsbCkgPyBuZXcgRmlsZShjb2RlUGF0aCkgOiBudWxsOwogICAgICAgICAgICAgdGhpcy5yZXNvdXJjZUZpbGUgPSAocmVzb3VyY2VQYXRoICE9IG51bGwpID8gbmV3IEZpbGUocmVzb3VyY2VQYXRoKSA6IG51bGw7CkBAIC0xMTc4Miw3ICsxMTc3OSw3IEBACiAgICAgICAgIC8qKiBOZXcgaW5zdGFsbCAqLwogICAgICAgICBBc2VjSW5zdGFsbEFyZ3MoSW5zdGFsbFBhcmFtcyBwYXJhbXMpIHsKICAgICAgICAgICAgIHN1cGVyKHBhcmFtcy5vcmlnaW4sIHBhcmFtcy5tb3ZlLCBwYXJhbXMub2JzZXJ2ZXIsIHBhcmFtcy5pbnN0YWxsRmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5pbnN0YWxsZXJQYWNrYWdlTmFtZSwgcGFyYW1zLnZvbHVtZVV1aWQsIHBhcmFtcy5nZXRNYW5pZmVzdERpZ2VzdCgpLAorICAgICAgICAgICAgICAgICAgICBwYXJhbXMuaW5zdGFsbGVyUGFja2FnZU5hbWUsIHBhcmFtcy52b2x1bWVVdWlkLAogICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZ2V0VXNlcigpLCBudWxsIC8qIGluc3RydWN0aW9uIHNldHMgKi8sIHBhcmFtcy5wYWNrYWdlQWJpT3ZlcnJpZGUsCiAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5ncmFudGVkUnVudGltZVBlcm1pc3Npb25zLAogICAgICAgICAgICAgICAgICAgICBwYXJhbXMudHJhY2VNZXRob2QsIHBhcmFtcy50cmFjZUNvb2tpZSk7CkBAIC0xMTc5Miw3ICsxMTc4OSw3IEBACiAgICAgICAgIEFzZWNJbnN0YWxsQXJncyhTdHJpbmcgZnVsbENvZGVQYXRoLCBTdHJpbmdbXSBpbnN0cnVjdGlvblNldHMsCiAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGlzRXh0ZXJuYWwsIGJvb2xlYW4gaXNGb3J3YXJkTG9ja2VkKSB7CiAgICAgICAgICAgICBzdXBlcihPcmlnaW5JbmZvLmZyb21Ob3RoaW5nKCksIG51bGwsIG51bGwsIChpc0V4dGVybmFsID8gSU5TVEFMTF9FWFRFUk5BTCA6IDApCi0gICAgICAgICAgICAgICAgICAgIHwgKGlzRm9yd2FyZExvY2tlZCA/IElOU1RBTExfRk9SV0FSRF9MT0NLIDogMCksIG51bGwsIG51bGwsIG51bGwsIG51bGwsCisgICAgICAgICAgICAgICAgICAgIHwgKGlzRm9yd2FyZExvY2tlZCA/IElOU1RBTExfRk9SV0FSRF9MT0NLIDogMCksIG51bGwsIG51bGwsIG51bGwsCiAgICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uU2V0cywgbnVsbCwgbnVsbCwgbnVsbCwgMCk7CiAgICAgICAgICAgICAvLyBIYWNraWx5IHByZXRlbmQgd2UncmUgc3RpbGwgbG9va2luZyBhdCBhIGZ1bGwgY29kZSBwYXRoCiAgICAgICAgICAgICBpZiAoIWZ1bGxDb2RlUGF0aC5lbmRzV2l0aChSRVNfRklMRV9OQU1FKSkgewpAQCAtMTE4MDksNyArMTE4MDYsNyBAQAogCiAgICAgICAgIEFzZWNJbnN0YWxsQXJncyhTdHJpbmcgY2lkLCBTdHJpbmdbXSBpbnN0cnVjdGlvblNldHMsIGJvb2xlYW4gaXNGb3J3YXJkTG9ja2VkKSB7CiAgICAgICAgICAgICBzdXBlcihPcmlnaW5JbmZvLmZyb21Ob3RoaW5nKCksIG51bGwsIG51bGwsIChpc0FzZWNFeHRlcm5hbChjaWQpID8gSU5TVEFMTF9FWFRFUk5BTCA6IDApCi0gICAgICAgICAgICAgICAgICAgIHwgKGlzRm9yd2FyZExvY2tlZCA/IElOU1RBTExfRk9SV0FSRF9MT0NLIDogMCksIG51bGwsIG51bGwsIG51bGwsIG51bGwsCisgICAgICAgICAgICAgICAgICAgIHwgKGlzRm9yd2FyZExvY2tlZCA/IElOU1RBTExfRk9SV0FSRF9MT0NLIDogMCksIG51bGwsIG51bGwsIG51bGwsCiAgICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uU2V0cywgbnVsbCwgbnVsbCwgbnVsbCwgMCk7CiAgICAgICAgICAgICB0aGlzLmNpZCA9IGNpZDsKICAgICAgICAgICAgIHNldE1vdW50UGF0aChQYWNrYWdlSGVscGVyLmdldFNkRGlyKGNpZCkpOwpAQCAtMTIwNzYsNyArMTIwNzMsNyBAQAogICAgICAgICAvKiogTmV3IGluc3RhbGwgKi8KICAgICAgICAgTW92ZUluc3RhbGxBcmdzKEluc3RhbGxQYXJhbXMgcGFyYW1zKSB7CiAgICAgICAgICAgICBzdXBlcihwYXJhbXMub3JpZ2luLCBwYXJhbXMubW92ZSwgcGFyYW1zLm9ic2VydmVyLCBwYXJhbXMuaW5zdGFsbEZsYWdzLAotICAgICAgICAgICAgICAgICAgICBwYXJhbXMuaW5zdGFsbGVyUGFja2FnZU5hbWUsIHBhcmFtcy52b2x1bWVVdWlkLCBwYXJhbXMuZ2V0TWFuaWZlc3REaWdlc3QoKSwKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmluc3RhbGxlclBhY2thZ2VOYW1lLCBwYXJhbXMudm9sdW1lVXVpZCwKICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmdldFVzZXIoKSwgbnVsbCAvKiBpbnN0cnVjdGlvbiBzZXRzICovLCBwYXJhbXMucGFja2FnZUFiaU92ZXJyaWRlLAogICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZ3JhbnRlZFJ1bnRpbWVQZXJtaXNzaW9ucywKICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnRyYWNlTWV0aG9kLCBwYXJhbXMudHJhY2VDb29raWUpOwpAQCAtMTI1NTIsNyArMTI1NDksNyBAQAogICAgICAgICAgICAgaWYoKG9sZFBrZyA9PSBudWxsKSB8fCAob2xkUGtnLmFwcGxpY2F0aW9uSW5mbyA9PSBudWxsKSB8fAogICAgICAgICAgICAgICAgICAgICAob2xkUGtnU2V0dGluZyA9PSBudWxsKSkgewogICAgICAgICAgICAgICAgIHJlcy5zZXRFcnJvcihJTlNUQUxMX0ZBSUxFRF9SRVBMQUNFX0NPVUxETlRfREVMRVRFLAotICAgICAgICAgICAgICAgICAgICAgICAgIkNvdWxkbid0IGZpbmQgcGFja2FnZToiICsgcGFja2FnZU5hbWUgKyAiIGluZm9ybWF0aW9uIik7CisgICAgICAgICAgICAgICAgICAgICAgICAiQ291bGRuJ3QgZmluZCBwYWNrYWdlICIgKyBwYWNrYWdlTmFtZSArICIgaW5mb3JtYXRpb24iKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTEyODUwLDM1ICsxMjg0Nyw2IEBACiAgICAgICAgICAgICBUcmFjZS50cmFjZUVuZChUUkFDRV9UQUdfUEFDS0FHRV9NQU5BR0VSKTsKICAgICAgICAgfQogCi0gICAgICAgIC8qIElmIHRoZSBpbnN0YWxsZXIgcGFzc2VkIGluIGEgbWFuaWZlc3QgZGlnZXN0LCBjb21wYXJlIGl0IG5vdy4gKi8KLSAgICAgICAgaWYgKGFyZ3MubWFuaWZlc3REaWdlc3QgIT0gbnVsbCkgewotICAgICAgICAgICAgVHJhY2UudHJhY2VCZWdpbihUUkFDRV9UQUdfUEFDS0FHRV9NQU5BR0VSLCAiY29sbGVjdE1hbmlmZXN0RGlnZXN0Iik7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIHBwLmNvbGxlY3RNYW5pZmVzdERpZ2VzdChwa2cpOwotICAgICAgICAgICAgfSBjYXRjaCAoUGFja2FnZVBhcnNlckV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgcmVzLnNldEVycm9yKCJGYWlsZWQgY29sbGVjdCBkdXJpbmcgaW5zdGFsbFBhY2thZ2VMSSIsIGUpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICAgICAgVHJhY2UudHJhY2VFbmQoVFJBQ0VfVEFHX1BBQ0tBR0VfTUFOQUdFUik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChERUJVR19JTlNUQUxMKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIHBhcnNlZE1hbmlmZXN0ID0gcGtnLm1hbmlmZXN0RGlnZXN0ID09IG51bGwgPyAibnVsbCIKLSAgICAgICAgICAgICAgICAgICAgICAgIDogcGtnLm1hbmlmZXN0RGlnZXN0LnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgU2xvZy5kKFRBRywgIkNvbXBhcmluZyBtYW5pZmVzdHM6ICIgKyBhcmdzLm1hbmlmZXN0RGlnZXN0LnRvU3RyaW5nKCkgKyAiIHZzLiAiCi0gICAgICAgICAgICAgICAgICAgICAgICArIHBhcnNlZE1hbmlmZXN0KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFhcmdzLm1hbmlmZXN0RGlnZXN0LmVxdWFscyhwa2cubWFuaWZlc3REaWdlc3QpKSB7Ci0gICAgICAgICAgICAgICAgcmVzLnNldEVycm9yKElOU1RBTExfRkFJTEVEX1BBQ0tBR0VfQ0hBTkdFRCwgIk1hbmlmZXN0IGRpZ2VzdCBjaGFuZ2VkIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKERFQlVHX0lOU1RBTEwpIHsKLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBwYXJzZWRNYW5pZmVzdCA9IHBrZy5tYW5pZmVzdERpZ2VzdCA9PSBudWxsCi0gICAgICAgICAgICAgICAgICAgID8gIm51bGwiIDogcGtnLm1hbmlmZXN0RGlnZXN0LnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICBTbG9nLmQoVEFHLCAibWFuaWZlc3REaWdlc3Qgd2FzIG5vdCBwcmVzZW50LCBidXQgcGFyc2VyIGdvdDogIiArIHBhcnNlZE1hbmlmZXN0KTsKLSAgICAgICAgfQotCiAgICAgICAgIC8vIEdldCByaWQgb2YgYWxsIHJlZmVyZW5jZXMgdG8gcGFja2FnZSBzY2FuIHBhdGggdmlhIHBhcnNlci4KICAgICAgICAgcHAgPSBudWxsOwogICAgICAgICBTdHJpbmcgb2xkQ29kZVBhdGggPSBudWxsOwpAQCAtMTM2NjYsNyArMTM2MzQsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgbmV3UGtnID0gc2NhblBhY2thZ2VUcmFjZWRMSShkaXNhYmxlZFBzLmNvZGVQYXRoLCBwYXJzZUZsYWdzLCBTQ0FOX05PX1BBVEhTLCAwLCBudWxsKTsKICAgICAgICAgfSBjYXRjaCAoUGFja2FnZU1hbmFnZXJFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgU2xvZy53KFRBRywgIkZhaWxlZCB0byByZXN0b3JlIHN5c3RlbSBwYWNrYWdlOiIgKyBuZXdQcy5uYW1lICsgIjogIiArIGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgIFNsb2cudyhUQUcsICJGYWlsZWQgdG8gcmVzdG9yZSBzeXN0ZW0gcGFja2FnZSAiICsgbmV3UHMubmFtZSArICI6ICIgKyBlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIApAQCAtMTM4ODQsMTMgKzEzODUyLDEzIEBACiAKICAgICAgICAgYm9vbGVhbiByZXQgPSBmYWxzZTsKICAgICAgICAgaWYgKGlzU3lzdGVtQXBwKHBzKSkgewotICAgICAgICAgICAgaWYgKERFQlVHX1JFTU9WRSkgU2xvZy5kKFRBRywgIlJlbW92aW5nIHN5c3RlbSBwYWNrYWdlOiIgKyBwcy5uYW1lKTsKKyAgICAgICAgICAgIGlmIChERUJVR19SRU1PVkUpIFNsb2cuZChUQUcsICJSZW1vdmluZyBzeXN0ZW0gcGFja2FnZTogIiArIHBzLm5hbWUpOwogICAgICAgICAgICAgLy8gV2hlbiBhbiB1cGRhdGVkIHN5c3RlbSBhcHBsaWNhdGlvbiBpcyBkZWxldGVkIHdlIGRlbGV0ZSB0aGUgZXhpc3RpbmcgcmVzb3VyY2VzIGFzIHdlbGwgYW5kCiAgICAgICAgICAgICAvLyBmYWxsIGJhY2sgdG8gZXhpc3RpbmcgY29kZSBpbiBzeXN0ZW0gcGFydGl0aW9uCiAgICAgICAgICAgICByZXQgPSBkZWxldGVTeXN0ZW1QYWNrYWdlTEkocHMsIGFsbFVzZXJIYW5kbGVzLCBwZXJVc2VySW5zdGFsbGVkLAogICAgICAgICAgICAgICAgICAgICBmbGFncywgb3V0SW5mbywgd3JpdGVTZXR0aW5ncyk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoREVCVUdfUkVNT1ZFKSBTbG9nLmQoVEFHLCAiUmVtb3Zpbmcgbm9uLXN5c3RlbSBwYWNrYWdlOiIgKyBwcy5uYW1lKTsKKyAgICAgICAgICAgIGlmIChERUJVR19SRU1PVkUpIFNsb2cuZChUQUcsICJSZW1vdmluZyBub24tc3lzdGVtIHBhY2thZ2U6ICIgKyBwcy5uYW1lKTsKICAgICAgICAgICAgIC8vIEtpbGwgYXBwbGljYXRpb24gcHJlLWVtcHRpdmVseSBlc3BlY2lhbGx5IGZvciBhcHBzIG9uIHNkLgogICAgICAgICAgICAga2lsbEFwcGxpY2F0aW9uKHBhY2thZ2VOYW1lLCBwcy5hcHBJZCwgInVuaW5zdGFsbCBwa2ciKTsKICAgICAgICAgICAgIHJldCA9IGRlbGV0ZUluc3RhbGxlZFBhY2thZ2VMSShwcywgZGVsZXRlQ29kZUFuZFJlc291cmNlcywgZmxhZ3MsCkBAIC0xNDAzOSw3ICsxNDAwNyw3IEBACiAgICAgICAgIC8vIHJlc29ydGluZyB0byBhIGZ1bGwgZGF0YSB3aXBlLgogICAgICAgICBpbnQgcmV0Q29kZSA9IG1JbnN0YWxsZXIuY2xlYXJVc2VyRGF0YShwa2cudm9sdW1lVXVpZCwgcGFja2FnZU5hbWUsIHVzZXJJZCk7CiAgICAgICAgIGlmIChyZXRDb2RlIDwgMCkgewotICAgICAgICAgICAgU2xvZy53KFRBRywgIkNvdWxkbid0IHJlbW92ZSBjYWNoZSBmaWxlcyBmb3IgcGFja2FnZTogIiArIHBhY2thZ2VOYW1lKTsKKyAgICAgICAgICAgIFNsb2cudyhUQUcsICJDb3VsZG4ndCByZW1vdmUgY2FjaGUgZmlsZXMgZm9yIHBhY2thZ2UgIiArIHBhY2thZ2VOYW1lKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCkBAIC0xNDI2OSw3ICsxNDIzNyw3IEBACiAgICAgICAgIH0KICAgICAgICAgaW50IHJldENvZGUgPSBtSW5zdGFsbGVyLmRlbGV0ZUNhY2hlRmlsZXMocC52b2x1bWVVdWlkLCBwYWNrYWdlTmFtZSwgdXNlcklkKTsKICAgICAgICAgaWYgKHJldENvZGUgPCAwKSB7Ci0gICAgICAgICAgICBTbG9nLncoVEFHLCAiQ291bGRuJ3QgcmVtb3ZlIGNhY2hlIGZpbGVzIGZvciBwYWNrYWdlOiAiCisgICAgICAgICAgICBTbG9nLncoVEFHLCAiQ291bGRuJ3QgcmVtb3ZlIGNhY2hlIGZpbGVzIGZvciBwYWNrYWdlICIKICAgICAgICAgICAgICAgICAgICAgICAgKyBwYWNrYWdlTmFtZSArICIgdSIgKyB1c2VySWQpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC0xNDcxNCw3ICsxNDY4Miw3IEBACiAgICAgICAgIH0KICAgICAgICAgc3luY2hyb25pemVkIChtUGFja2FnZXMpIHsKICAgICAgICAgICAgIFNsb2cuaShUQUcsICJBZGRpbmcgcGVyc2lzdGVudCBwcmVmZXJyZWQgYWN0aXZpdHkgIiArIGFjdGl2aXR5ICsgIiBmb3IgdXNlciAiICsgdXNlcklkICsKLSAgICAgICAgICAgICAgICAgICAgIiA6Iik7CisgICAgICAgICAgICAgICAgICAgICI6Iik7CiAgICAgICAgICAgICBmaWx0ZXIuZHVtcChuZXcgTG9nUHJpbnRlcihMb2cuSU5GTywgVEFHKSwgIiAgIik7CiAgICAgICAgICAgICBtU2V0dGluZ3MuZWRpdFBlcnNpc3RlbnRQcmVmZXJyZWRBY3Rpdml0aWVzTFB3KHVzZXJJZCkuYWRkRmlsdGVyKAogICAgICAgICAgICAgICAgICAgICBuZXcgUGVyc2lzdGVudFByZWZlcnJlZEFjdGl2aXR5KGZpbHRlciwgYWN0aXZpdHkpKTsKQEAgLTE1MTE5LDEyICsxNTA4NywxMCBAQAogICAgICAgICAgICAgcGtnU2V0dGluZyA9IG1TZXR0aW5ncy5tUGFja2FnZXMuZ2V0KHBhY2thZ2VOYW1lKTsKICAgICAgICAgICAgIGlmIChwa2dTZXR0aW5nID09IG51bGwpIHsKICAgICAgICAgICAgICAgICBpZiAoY2xhc3NOYW1lID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVW5rbm93biBwYWNrYWdlOiAiICsgcGFja2FnZU5hbWUpOworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJVbmtub3duIHBhY2thZ2U6ICIgKyBwYWNrYWdlTmFtZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgICAgICAgICAiVW5rbm93biBjb21wb25lbnQ6ICIgKyBwYWNrYWdlTmFtZQotICAgICAgICAgICAgICAgICAgICAgICAgKyAiLyIgKyBjbGFzc05hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgIlVua25vd24gY29tcG9uZW50OiAiICsgcGFja2FnZU5hbWUgKyAiLyIgKyBjbGFzc05hbWUpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLy8gQWxsb3cgcm9vdCBhbmQgdmVyaWZ5IHRoYXQgdXNlcklkIGlzIG5vdCBiZWluZyBzcGVjaWZpZWQgYnkgYSBkaWZmZXJlbnQgdXNlcgogICAgICAgICAgICAgaWYgKCFhbGxvd2VkQnlQZXJtaXNzaW9uICYmICFVc2VySGFuZGxlLmlzU2FtZUFwcCh1aWQsIHBrZ1NldHRpbmcuYXBwSWQpKSB7CkBAIC0xNzE2Niw3ICsxNzEzMiw3IEBACiAgICAgICAgIHN5bmNocm9uaXplZChtUGFja2FnZXMpIHsKICAgICAgICAgICAgIGZpbmFsIFBhY2thZ2VQYXJzZXIuUGFja2FnZSBwa2cgPSBtUGFja2FnZXMuZ2V0KHBhY2thZ2VOYW1lKTsKICAgICAgICAgICAgIGlmIChwa2cgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIFNsb2cudyhUQUcsICJLZXlTZXQgcmVxdWVzdGVkIGZvciB1bmtub3duIHBhY2thZ2U6IiArIHBhY2thZ2VOYW1lKTsKKyAgICAgICAgICAgICAgICBTbG9nLncoVEFHLCAiS2V5U2V0IHJlcXVlc3RlZCBmb3IgdW5rbm93biBwYWNrYWdlOiAiICsgcGFja2FnZU5hbWUpOwogICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlVua25vd24gcGFja2FnZTogIiArIHBhY2thZ2VOYW1lKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEtleVNldE1hbmFnZXJTZXJ2aWNlIGtzbXMgPSBtU2V0dGluZ3MubUtleVNldE1hbmFnZXJTZXJ2aWNlOwpAQCAtMTcxODIsNyArMTcxNDgsNyBAQAogICAgICAgICBzeW5jaHJvbml6ZWQobVBhY2thZ2VzKSB7CiAgICAgICAgICAgICBmaW5hbCBQYWNrYWdlUGFyc2VyLlBhY2thZ2UgcGtnID0gbVBhY2thZ2VzLmdldChwYWNrYWdlTmFtZSk7CiAgICAgICAgICAgICBpZiAocGtnID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBTbG9nLncoVEFHLCAiS2V5U2V0IHJlcXVlc3RlZCBmb3IgdW5rbm93biBwYWNrYWdlOiIgKyBwYWNrYWdlTmFtZSk7CisgICAgICAgICAgICAgICAgU2xvZy53KFRBRywgIktleVNldCByZXF1ZXN0ZWQgZm9yIHVua25vd24gcGFja2FnZTogIiArIHBhY2thZ2VOYW1lKTsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJVbmtub3duIHBhY2thZ2U6ICIgKyBwYWNrYWdlTmFtZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAocGtnLmFwcGxpY2F0aW9uSW5mby51aWQgIT0gQmluZGVyLmdldENhbGxpbmdVaWQoKQpAQCAtMTcyMDIsNyArMTcxNjgsNyBAQAogICAgICAgICBzeW5jaHJvbml6ZWQobVBhY2thZ2VzKSB7CiAgICAgICAgICAgICBmaW5hbCBQYWNrYWdlUGFyc2VyLlBhY2thZ2UgcGtnID0gbVBhY2thZ2VzLmdldChwYWNrYWdlTmFtZSk7CiAgICAgICAgICAgICBpZiAocGtnID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBTbG9nLncoVEFHLCAiS2V5U2V0IHJlcXVlc3RlZCBmb3IgdW5rbm93biBwYWNrYWdlOiIgKyBwYWNrYWdlTmFtZSk7CisgICAgICAgICAgICAgICAgU2xvZy53KFRBRywgIktleVNldCByZXF1ZXN0ZWQgZm9yIHVua25vd24gcGFja2FnZTogIiArIHBhY2thZ2VOYW1lKTsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJVbmtub3duIHBhY2thZ2U6ICIgKyBwYWNrYWdlTmFtZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBJQmluZGVyIGtzaCA9IGtzLmdldFRva2VuKCk7CkBAIC0xNzIyMiw3ICsxNzE4OCw3IEBACiAgICAgICAgIHN5bmNocm9uaXplZChtUGFja2FnZXMpIHsKICAgICAgICAgICAgIGZpbmFsIFBhY2thZ2VQYXJzZXIuUGFja2FnZSBwa2cgPSBtUGFja2FnZXMuZ2V0KHBhY2thZ2VOYW1lKTsKICAgICAgICAgICAgIGlmIChwa2cgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIFNsb2cudyhUQUcsICJLZXlTZXQgcmVxdWVzdGVkIGZvciB1bmtub3duIHBhY2thZ2U6IiArIHBhY2thZ2VOYW1lKTsKKyAgICAgICAgICAgICAgICBTbG9nLncoVEFHLCAiS2V5U2V0IHJlcXVlc3RlZCBmb3IgdW5rbm93biBwYWNrYWdlOiAiICsgcGFja2FnZU5hbWUpOwogICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlVua25vd24gcGFja2FnZTogIiArIHBhY2thZ2VOYW1lKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIElCaW5kZXIga3NoID0ga3MuZ2V0VG9rZW4oKTsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvcG0vUGFja2FnZU1hbmFnZXJTaGVsbENvbW1hbmQuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvcG0vUGFja2FnZU1hbmFnZXJTaGVsbENvbW1hbmQuamF2YQppbmRleCA3YzQyYWUxLi45MDE3NDllIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BtL1BhY2thZ2VNYW5hZ2VyU2hlbGxDb21tYW5kLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wbS9QYWNrYWdlTWFuYWdlclNoZWxsQ29tbWFuZC5qYXZhCkBAIC0xNDEsNiArMTQxLDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGFiYW5kb25TZXNzaW9uID0gZmFsc2U7CisgICAgICAgICAgICBwdy5wcmludGxuKCJTdWNjZXNzIik7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIGlmIChhYmFuZG9uU2Vzc2lvbikgewpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wbS9TZXR0aW5ncy5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wbS9TZXR0aW5ncy5qYXZhCmluZGV4IGVmMmYyOWIuLjNmOWNlN2EgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvcG0vU2V0dGluZ3MuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BtL1NldHRpbmdzLmphdmEKQEAgLTE2LDIzICsxNiw0MiBAQAogCiBwYWNrYWdlIGNvbS5hbmRyb2lkLnNlcnZlci5wbTsKIAoraW1wb3J0IHN0YXRpYyBhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uUkVBRF9FWFRFUk5BTF9TVE9SQUdFOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuQ09NUE9ORU5UX0VOQUJMRURfU1RBVEVfREVGQVVMVDsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLkNPTVBPTkVOVF9FTkFCTEVEX1NUQVRFX0RJU0FCTEVEOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuQ09NUE9ORU5UX0VOQUJMRURfU1RBVEVfRElTQUJMRURfVU5USUxfVVNFRDsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLkNPTVBPTkVOVF9FTkFCTEVEX1NUQVRFX0RJU0FCTEVEX1VTRVI7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5DT01QT05FTlRfRU5BQkxFRF9TVEFURV9FTkFCTEVEOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uUkVBRF9FWFRFUk5BTF9TVE9SQUdFOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuSU5URU5UX0ZJTFRFUl9ET01BSU5fVkVSSUZJQ0FUSU9OX1NUQVRVU19BTFdBWVM7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5JTlRFTlRfRklMVEVSX0RPTUFJTl9WRVJJRklDQVRJT05fU1RBVFVTX1VOREVGSU5FRDsKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC5vcy5Qcm9jZXNzLlNZU1RFTV9VSUQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5NQVRDSF9ERUZBVUxUX09OTFk7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5NQVRDSF9ESVNBQkxFRF9DT01QT05FTlRTOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuTUFUQ0hfRElTQUJMRURfVU5USUxfVVNFRF9DT01QT05FTlRTOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuTUFUQ0hfRU5DUllQVElPTl9BV0FSRTsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLk1BVENIX0VOQ1JZUFRJT05fVU5BV0FSRTsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLk1BVENIX1NZU1RFTV9PTkxZOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLm9zLlByb2Nlc3MuUEFDS0FHRV9JTkZPX0dJRDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5vcy5Qcm9jZXNzLlNZU1RFTV9VSUQ7CisKIGltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLnBtLlBhY2thZ2VNYW5hZ2VyU2VydmljZS5ERUJVR19ET01BSU5fVkVSSUZJQ0FUSU9OOwogCiBpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk5vbk51bGw7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWU7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50RmlsdGVyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5BY3Rpdml0eUluZm87CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLkFwcGxpY2F0aW9uSW5mbzsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uQ29tcG9uZW50SW5mbzsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uSW50ZW50RmlsdGVyVmVyaWZpY2F0aW9uSW5mbzsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZUNsZWFuSXRlbTsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VQYXJzZXI7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VVc2VyU3RhdGU7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBlcm1pc3Npb25JbmZvOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5SZXNvbHZlSW5mbzsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uU2lnbmF0dXJlOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5Vc2VySW5mbzsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uVmVyaWZpZXJEZXZpY2VJZGVudGl0eTsKIGltcG9ydCBhbmRyb2lkLm5ldC5Vcmk7CiBpbXBvcnQgYW5kcm9pZC5vcy5CaW5kZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5CdWlsZDsKQEAgLTQ3LDExICs2NiwxOCBAQAogaW1wb3J0IGFuZHJvaWQub3MuVXNlck1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5zdG9yYWdlLlN0b3JhZ2VNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQub3Muc3RvcmFnZS5Wb2x1bWVJbmZvOwotaW1wb3J0IGFuZHJvaWQudXRpbC5BdG9taWNGaWxlOwogaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7CitpbXBvcnQgYW5kcm9pZC51dGlsLkFycmF5TWFwOworaW1wb3J0IGFuZHJvaWQudXRpbC5BcnJheVNldDsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuQXRvbWljRmlsZTsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2dQcmludGVyOworaW1wb3J0IGFuZHJvaWQudXRpbC5TbG9nOworaW1wb3J0IGFuZHJvaWQudXRpbC5TcGFyc2VBcnJheTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU3BhcnNlQm9vbGVhbkFycmF5OworaW1wb3J0IGFuZHJvaWQudXRpbC5TcGFyc2VJbnRBcnJheTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU3BhcnNlTG9uZ0FycmF5OworaW1wb3J0IGFuZHJvaWQudXRpbC5YbWw7CiAKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5hbm5vdGF0aW9ucy5HdWFyZGVkQnk7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwub3MuQmFja2dyb3VuZFRocmVhZDsKQEAgLTY1LDUzICs5MSwzNyBAQAogaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5wbS5QYWNrYWdlTWFuYWdlclNlcnZpY2UuRHVtcFN0YXRlOwogaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5wbS5QZXJtaXNzaW9uc1N0YXRlLlBlcm1pc3Npb25TdGF0ZTsKIAotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGxpYmNvcmUuaW8uSW9VdGlsczsKIAogaW1wb3J0IG9yZy54bWxwdWxsLnYxLlhtbFB1bGxQYXJzZXI7CiBpbXBvcnQgb3JnLnhtbHB1bGwudjEuWG1sUHVsbFBhcnNlckV4Y2VwdGlvbjsKIGltcG9ydCBvcmcueG1scHVsbC52MS5YbWxTZXJpYWxpemVyOwogCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWU7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uQXBwbGljYXRpb25JbmZvOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5Db21wb25lbnRJbmZvOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlQ2xlYW5JdGVtOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZVBhcnNlcjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGVybWlzc2lvbkluZm87Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlNpZ25hdHVyZTsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uVXNlckluZm87Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VVc2VyU3RhdGU7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlZlcmlmaWVyRGV2aWNlSWRlbnRpdHk7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkFycmF5TWFwOwotaW1wb3J0IGFuZHJvaWQudXRpbC5BcnJheVNldDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotaW1wb3J0IGFuZHJvaWQudXRpbC5TbG9nOwotaW1wb3J0IGFuZHJvaWQudXRpbC5TcGFyc2VBcnJheTsKLWltcG9ydCBhbmRyb2lkLnV0aWwuU3BhcnNlSW50QXJyYXk7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLlhtbDsKLQoraW1wb3J0IGphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRXcml0ZXI7CiBpbXBvcnQgamF2YS5pby5GaWxlOwogaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW1Xcml0ZXI7CiBpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXQ7CiBpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOwogaW1wb3J0IGphdmEudGV4dC5TaW1wbGVEYXRlRm9ybWF0OwogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKIGltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CiBpbXBvcnQgamF2YS51dGlsLkRhdGU7CiBpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLk1hcC5FbnRyeTsKIGltcG9ydCBqYXZhLnV0aWwuT2JqZWN0czsKIGltcG9ydCBqYXZhLnV0aWwuU2V0OwotaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7Ci0KLWltcG9ydCBsaWJjb3JlLmlvLklvVXRpbHM7CiAKIC8qKgogICogSG9sZHMgaW5mb3JtYXRpb24gYWJvdXQgZHluYW1pYyBzZXR0aW5ncy4KQEAgLTQyMSw3ICs0MzEsNyBAQAogICAgIGJvb2xlYW4gZGlzYWJsZVN5c3RlbVBhY2thZ2VMUHcoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgZmluYWwgUGFja2FnZVNldHRpbmcgcCA9IG1QYWNrYWdlcy5nZXQobmFtZSk7CiAgICAgICAgIGlmKHAgPT0gbnVsbCkgewotICAgICAgICAgICAgTG9nLncoUGFja2FnZU1hbmFnZXJTZXJ2aWNlLlRBRywgIlBhY2thZ2U6IituYW1lKyIgaXMgbm90IGFuIGluc3RhbGxlZCBwYWNrYWdlIik7CisgICAgICAgICAgICBMb2cudyhQYWNrYWdlTWFuYWdlclNlcnZpY2UuVEFHLCAiUGFja2FnZSAiICsgbmFtZSArICIgaXMgbm90IGFuIGluc3RhbGxlZCBwYWNrYWdlIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgZmluYWwgUGFja2FnZVNldHRpbmcgZHAgPSBtRGlzYWJsZWRTeXNQYWNrYWdlcy5nZXQobmFtZSk7CkBAIC00NDYsNyArNDU2LDcgQEAKICAgICBQYWNrYWdlU2V0dGluZyBlbmFibGVTeXN0ZW1QYWNrYWdlTFB3KFN0cmluZyBuYW1lKSB7CiAgICAgICAgIFBhY2thZ2VTZXR0aW5nIHAgPSBtRGlzYWJsZWRTeXNQYWNrYWdlcy5nZXQobmFtZSk7CiAgICAgICAgIGlmKHAgPT0gbnVsbCkgewotICAgICAgICAgICAgTG9nLncoUGFja2FnZU1hbmFnZXJTZXJ2aWNlLlRBRywgIlBhY2thZ2U6IituYW1lKyIgaXMgbm90IGRpc2FibGVkIik7CisgICAgICAgICAgICBMb2cudyhQYWNrYWdlTWFuYWdlclNlcnZpY2UuVEFHLCAiUGFja2FnZSAiICsgbmFtZSArICIgaXMgbm90IGRpc2FibGVkIik7CiAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgfQogICAgICAgICAvLyBSZXNldCBmbGFnIGluIEFwcGxpY2F0aW9uSW5mbyBvYmplY3QKQEAgLTEzMzMsNyArMTM0Myw3IEBACiAgICAgICAgICAgICB0aHJvd3MgWG1sUHVsbFBhcnNlckV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBJbnRlbnRGaWx0ZXJWZXJpZmljYXRpb25JbmZvIGl2aSA9IG5ldyBJbnRlbnRGaWx0ZXJWZXJpZmljYXRpb25JbmZvKHBhcnNlcik7CiAgICAgICAgIHBhY2thZ2VTZXR0aW5nLnNldEludGVudEZpbHRlclZlcmlmaWNhdGlvbkluZm8oaXZpKTsKLSAgICAgICAgTG9nLmQoVEFHLCAiUmVhZCBkb21haW4gdmVyaWZpY2F0aW9uIGZvciBwYWNrYWdlOiIgKyBpdmkuZ2V0UGFja2FnZU5hbWUoKSk7CisgICAgICAgIExvZy5kKFRBRywgIlJlYWQgZG9tYWluIHZlcmlmaWNhdGlvbiBmb3IgcGFja2FnZTogIiArIGl2aS5nZXRQYWNrYWdlTmFtZSgpKTsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgcmVhZFJlc3RvcmVkSW50ZW50RmlsdGVyVmVyaWZpY2F0aW9ucyhYbWxQdWxsUGFyc2VyIHBhcnNlcikKQEAgLTE0NjcsNyArMTQ3Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gcGFyc2VyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsIEFUVFJfTkFNRSk7CiAgICAgICAgICAgICAgICAgICAgIHBzID0gbVBhY2thZ2VzLmdldChuYW1lKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHBzID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFNsb2cudyhQYWNrYWdlTWFuYWdlclNlcnZpY2UuVEFHLCAiTm8gcGFja2FnZSBrbm93biBmb3Igc3RvcHBlZCBwYWNrYWdlOiAiCisgICAgICAgICAgICAgICAgICAgICAgICBTbG9nLncoUGFja2FnZU1hbmFnZXJTZXJ2aWNlLlRBRywgIk5vIHBhY2thZ2Uga25vd24gZm9yIHN0b3BwZWQgcGFja2FnZSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgbmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBYbWxVdGlscy5za2lwQ3VycmVudFRhZyhwYXJzZXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0yMDMxLDcgKzIwNDEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgU2xvZy53KFBhY2thZ2VNYW5hZ2VyU2VydmljZS5UQUcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJObyBwYWNrYWdlIGtub3duIGZvciBzdG9wcGVkIHBhY2thZ2U6ICIgKyBuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vIHBhY2thZ2Uga25vd24gZm9yIHN0b3BwZWQgcGFja2FnZSAiICsgbmFtZSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgWG1sVXRpbHMuc2tpcEN1cnJlbnRUYWcocGFyc2VyKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMjI0OSwxMSArMjI1OSwxMSBAQAogICAgICAgICBKb3VybmFsZWRGaWxlIGpvdXJuYWwgPSBuZXcgSm91cm5hbGVkRmlsZShtUGFja2FnZUxpc3RGaWxlbmFtZSwgdGVtcEZpbGUpOwogCiAgICAgICAgIGZpbmFsIEZpbGUgd3JpdGVUYXJnZXQgPSBqb3VybmFsLmNob29zZUZvcldyaXRlKCk7Ci0gICAgICAgIEZpbGVPdXRwdXRTdHJlYW0gZnN0ciA9IG51bGw7Ci0gICAgICAgIEJ1ZmZlcmVkT3V0cHV0U3RyZWFtIHN0ciA9IG51bGw7CisgICAgICAgIEZpbGVPdXRwdXRTdHJlYW0gZnN0cjsKKyAgICAgICAgQnVmZmVyZWRXcml0ZXIgd3JpdGVyID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGZzdHIgPSBuZXcgRmlsZU91dHB1dFN0cmVhbSh3cml0ZVRhcmdldCk7Ci0gICAgICAgICAgICBzdHIgPSBuZXcgQnVmZmVyZWRPdXRwdXRTdHJlYW0oZnN0cik7CisgICAgICAgICAgICB3cml0ZXIgPSBuZXcgQnVmZmVyZWRXcml0ZXIobmV3IE91dHB1dFN0cmVhbVdyaXRlcihmc3RyLCBDaGFyc2V0LmRlZmF1bHRDaGFyc2V0KCkpKTsKICAgICAgICAgICAgIEZpbGVVdGlscy5zZXRQZXJtaXNzaW9ucyhmc3RyLmdldEZEKCksIDA2NDAsIFNZU1RFTV9VSUQsIFBBQ0tBR0VfSU5GT19HSUQpOwogCiAgICAgICAgICAgICBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKQEAgLTIyNzAsNyArMjI4MCw3IEBACiAgICAgICAgICAgICAgICAgZmluYWwgaW50W10gZ2lkcyA9IHBrZy5nZXRQZXJtaXNzaW9uc1N0YXRlKCkuY29tcHV0ZUdpZHModXNlcklkcyk7CiAKICAgICAgICAgICAgICAgICAvLyBBdm9pZCBhbnkgYXBwbGljYXRpb24gdGhhdCBoYXMgYSBzcGFjZSBpbiBpdHMgcGF0aC4KLSAgICAgICAgICAgICAgICBpZiAoZGF0YVBhdGguaW5kZXhPZigiICIpID49IDApCisgICAgICAgICAgICAgICAgaWYgKGRhdGFQYXRoLmluZGV4T2YoJyAnKSA+PSAwKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgICAgIC8vIHdlIHN0b3JlIG9uIGVhY2ggbGluZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGZvciBub3c6CkBAIC0yMjkyLDcgKzIzMDIsNyBAQAogICAgICAgICAgICAgICAgIHNiLnNldExlbmd0aCgwKTsKICAgICAgICAgICAgICAgICBzYi5hcHBlbmQoYWkucGFja2FnZU5hbWUpOwogICAgICAgICAgICAgICAgIHNiLmFwcGVuZCgiICIpOwotICAgICAgICAgICAgICAgIHNiLmFwcGVuZCgoaW50KWFpLnVpZCk7CisgICAgICAgICAgICAgICAgc2IuYXBwZW5kKGFpLnVpZCk7CiAgICAgICAgICAgICAgICAgc2IuYXBwZW5kKGlzRGVidWcgPyAiIDEgIiA6ICIgMCAiKTsKICAgICAgICAgICAgICAgICBzYi5hcHBlbmQoZGF0YVBhdGgpOwogICAgICAgICAgICAgICAgIHNiLmFwcGVuZCgiICIpOwpAQCAtMjMwOCwxNSArMjMxOCwxNSBAQAogICAgICAgICAgICAgICAgICAgICBzYi5hcHBlbmQoIm5vbmUiKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc2IuYXBwZW5kKCJcbiIpOwotICAgICAgICAgICAgICAgIHN0ci53cml0ZShzYi50b1N0cmluZygpLmdldEJ5dGVzKCkpOworICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoc2IpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgc3RyLmZsdXNoKCk7CisgICAgICAgICAgICB3cml0ZXIuZmx1c2goKTsKICAgICAgICAgICAgIEZpbGVVdGlscy5zeW5jKGZzdHIpOwotICAgICAgICAgICAgc3RyLmNsb3NlKCk7CisgICAgICAgICAgICB3cml0ZXIuY2xvc2UoKTsKICAgICAgICAgICAgIGpvdXJuYWwuY29tbWl0KCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBTbG9nLnd0ZihUQUcsICJGYWlsZWQgdG8gd3JpdGUgcGFja2FnZXMubGlzdCIsIGUpOwotICAgICAgICAgICAgSW9VdGlscy5jbG9zZVF1aWV0bHkoc3RyKTsKKyAgICAgICAgICAgIElvVXRpbHMuY2xvc2VRdWlldGx5KHdyaXRlcik7CiAgICAgICAgICAgICBqb3VybmFsLnJvbGxiYWNrKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0yNzk5LDkgKzI4MDksOSBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoUGFja2FnZU1hbmFnZXJTZXJ2aWNlLkRFQlVHX1BSRUZFUlJFRCkgTG9nLmQoVEFHLCAiUmVhZGluZyBkZWZhdWx0IHByZWZlcnJlZCAiICsgZik7Ci0gICAgICAgICAgICBGaWxlSW5wdXRTdHJlYW0gc3RyID0gbnVsbDsKKyAgICAgICAgICAgIElucHV0U3RyZWFtIHN0ciA9IG51bGw7CiAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIHN0ciA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oZik7CisgICAgICAgICAgICAgICAgc3RyID0gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0obmV3IEZpbGVJbnB1dFN0cmVhbShmKSk7CiAgICAgICAgICAgICAgICAgWG1sUHVsbFBhcnNlciBwYXJzZXIgPSBYbWwubmV3UHVsbFBhcnNlcigpOwogICAgICAgICAgICAgICAgIHBhcnNlci5zZXRJbnB1dChzdHIsIG51bGwpOwogCkBAIC0yODUyLDcgKzI4NjIsNyBAQAogICAgICAgICBmb3IgKGludCBpPTA7IGk8dG1wUGEuY291bnRDYXRlZ29yaWVzKCk7IGkrKykgewogICAgICAgICAgICAgU3RyaW5nIGNhdCA9IHRtcFBhLmdldENhdGVnb3J5KGkpOwogICAgICAgICAgICAgaWYgKGNhdC5lcXVhbHMoSW50ZW50LkNBVEVHT1JZX0RFRkFVTFQpKSB7Ci0gICAgICAgICAgICAgICAgZmxhZ3MgfD0gUGFja2FnZU1hbmFnZXIuTUFUQ0hfREVGQVVMVF9PTkxZOworICAgICAgICAgICAgICAgIGZsYWdzIHw9IE1BVENIX0RFRkFVTFRfT05MWTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgaW50ZW50LmFkZENhdGVnb3J5KGNhdCk7CiAgICAgICAgICAgICB9CkBAIC0zMDAyLDcgKzMwMTIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLmFkZENhdGVnb3J5KGNhdCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKChmbGFncyZQYWNrYWdlTWFuYWdlci5NQVRDSF9ERUZBVUxUX09OTFkpICE9IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoKGZsYWdzICYgTUFUQ0hfREVGQVVMVF9PTkxZKSAhPSAwKSB7CiAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5hZGRDYXRlZ29yeShJbnRlbnQuQ0FURUdPUllfREVGQVVMVCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChzY2hlbWUgIT0gbnVsbCkgewpAQCAtMzc4OCwxNyArMzc5OCwxNiBAQAogICAgICAgICByZXR1cm4gY21wICE9IG51bGwgPyBBcnJheXMudG9TdHJpbmcoY21wLnRvQXJyYXkoKSkgOiAiW10iOwogICAgIH0KIAotICAgIGJvb2xlYW4gaXNFbmFibGVkQW5kVmlzaWJsZUxQcihDb21wb25lbnRJbmZvIGNvbXBvbmVudEluZm8sIGludCBmbGFncywgaW50IHVzZXJJZCkgeworICAgIGJvb2xlYW4gaXNFbmFibGVkQW5kTWF0Y2hMUHIoQ29tcG9uZW50SW5mbyBjb21wb25lbnRJbmZvLCBpbnQgZmxhZ3MsIGludCB1c2VySWQpIHsKICAgICAgICAgcmV0dXJuIGlzRW5hYmxlZExQcihjb21wb25lbnRJbmZvLCBmbGFncywgdXNlcklkKQotICAgICAgICAgICAgICAgICYmIGlzVmlzaWJsZUxQcihjb21wb25lbnRJbmZvLCBmbGFncyk7CisgICAgICAgICAgICAgICAgJiYgaXNNYXRjaExQcihjb21wb25lbnRJbmZvLCBmbGFncyk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSBib29sZWFuIGlzRW5hYmxlZExQcihDb21wb25lbnRJbmZvIGNvbXBvbmVudEluZm8sIGludCBmbGFncywgaW50IHVzZXJJZCkgewotICAgICAgICBpZiAoKGZsYWdzJlBhY2thZ2VNYW5hZ2VyLkdFVF9ESVNBQkxFRF9DT01QT05FTlRTKSAhPSAwKSB7CisgICAgICAgIGlmICgoZmxhZ3MgJiBNQVRDSF9ESVNBQkxFRF9DT01QT05FTlRTKSAhPSAwKSB7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQotICAgICAgICBmaW5hbCBTdHJpbmcgcGtnTmFtZSA9IGNvbXBvbmVudEluZm8ucGFja2FnZU5hbWU7Ci0gICAgICAgIGZpbmFsIFBhY2thZ2VTZXR0aW5nIHBhY2thZ2VTZXR0aW5ncyA9IG1QYWNrYWdlcy5nZXQocGtnTmFtZSk7CisgICAgICAgIGZpbmFsIFBhY2thZ2VTZXR0aW5nIHBhY2thZ2VTZXR0aW5ncyA9IG1QYWNrYWdlcy5nZXQoY29tcG9uZW50SW5mby5wYWNrYWdlTmFtZSk7CiAgICAgICAgIGlmIChQYWNrYWdlTWFuYWdlclNlcnZpY2UuREVCVUdfU0VUVElOR1MpIHsKICAgICAgICAgICAgIExvZy52KFBhY2thZ2VNYW5hZ2VyU2VydmljZS5UQUcsICJpc0VuYWJsZWRMb2NrIC0gcGFja2FnZU5hbWUgPSAiCiAgICAgICAgICAgICAgICAgICAgICsgY29tcG9uZW50SW5mby5wYWNrYWdlTmFtZSArICIgY29tcG9uZW50TmFtZSA9ICIgKyBjb21wb25lbnRJbmZvLm5hbWUpOwpAQCAtMzgxMSw3ICszODIwLDcgQEAKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBQYWNrYWdlVXNlclN0YXRlIHVzdGF0ZSA9IHBhY2thZ2VTZXR0aW5ncy5yZWFkVXNlclN0YXRlKHVzZXJJZCk7Ci0gICAgICAgIGlmICgoZmxhZ3MmUGFja2FnZU1hbmFnZXIuR0VUX0RJU0FCTEVEX1VOVElMX1VTRURfQ09NUE9ORU5UUykgIT0gMCkgeworICAgICAgICBpZiAoKGZsYWdzICYgTUFUQ0hfRElTQUJMRURfVU5USUxfVVNFRF9DT01QT05FTlRTKSAhPSAwKSB7CiAgICAgICAgICAgICBpZiAodXN0YXRlLmVuYWJsZWQgPT0gQ09NUE9ORU5UX0VOQUJMRURfU1RBVEVfRElTQUJMRURfVU5USUxfVVNFRCkgewogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQpAQCAtMzgzNCwxNCArMzg0MywxOSBAQAogICAgICAgICByZXR1cm4gY29tcG9uZW50SW5mby5lbmFibGVkOwogICAgIH0KIAotICAgIHByaXZhdGUgYm9vbGVhbiBpc1Zpc2libGVMUHIoQ29tcG9uZW50SW5mbyBjb21wb25lbnRJbmZvLCBpbnQgZmxhZ3MpIHsKLSAgICAgICAgaWYgKChmbGFncyAmIFBhY2thZ2VNYW5hZ2VyLkdFVF9FTkNSWVBUSU9OX1VOQVdBUkVfQ09NUE9ORU5UUykgIT0gMCkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcHJpdmF0ZSBib29sZWFuIGlzTWF0Y2hMUHIoQ29tcG9uZW50SW5mbyBjb21wb25lbnRJbmZvLCBpbnQgZmxhZ3MpIHsKKyAgICAgICAgaWYgKChmbGFncyAmIE1BVENIX1NZU1RFTV9PTkxZKSAhPSAwKSB7CisgICAgICAgICAgICBmaW5hbCBQYWNrYWdlU2V0dGluZyBwcyA9IG1QYWNrYWdlcy5nZXQoY29tcG9uZW50SW5mby5wYWNrYWdlTmFtZSk7CisgICAgICAgICAgICBpZiAoKHBzLnBrZ0ZsYWdzICYgQXBwbGljYXRpb25JbmZvLkZMQUdfU1lTVEVNKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGlmICgoZmxhZ3MgJiBQYWNrYWdlTWFuYWdlci5NQVRDSF9FTkNSWVBUSU9OX0FXQVJFX09OTFkpICE9IDApIHsKLSAgICAgICAgICAgIHJldHVybiBjb21wb25lbnRJbmZvLmVuY3J5cHRpb25Bd2FyZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBmaW5hbCBib29sZWFuIG1hdGNoZXNVbmF3YXJlID0gKChmbGFncyAmIE1BVENIX0VOQ1JZUFRJT05fVU5BV0FSRSkgIT0gMCkKKyAgICAgICAgICAgICAgICAmJiAhY29tcG9uZW50SW5mby5lbmNyeXB0aW9uQXdhcmU7CisgICAgICAgIGZpbmFsIGJvb2xlYW4gbWF0Y2hlc0F3YXJlID0gKChmbGFncyAmIE1BVENIX0VOQ1JZUFRJT05fQVdBUkUpICE9IDApCisgICAgICAgICAgICAgICAgJiYgY29tcG9uZW50SW5mby5lbmNyeXB0aW9uQXdhcmU7CisgICAgICAgIHJldHVybiBtYXRjaGVzVW5hd2FyZSB8fCBtYXRjaGVzQXdhcmU7CiAgICAgfQogCiAgICAgU3RyaW5nIGdldEluc3RhbGxlclBhY2thZ2VOYW1lTFByKFN0cmluZyBwYWNrYWdlTmFtZSkgewpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wbS9Vc2VyTWFuYWdlclNlcnZpY2UuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvcG0vVXNlck1hbmFnZXJTZXJ2aWNlLmphdmEKaW5kZXggZjVkYTEwMy4uM2Q2MTRhMyAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wbS9Vc2VyTWFuYWdlclNlcnZpY2UuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BtL1VzZXJNYW5hZ2VyU2VydmljZS5qYXZhCkBAIC02OSw2ICs2OSw3IEBACiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuYW5ub3RhdGlvbnMuR3VhcmRlZEJ5OwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLmFubm90YXRpb25zLlZpc2libGVGb3JUZXN0aW5nOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLmFwcC5JQXBwT3BzU2VydmljZTsKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5sb2dnaW5nLk1ldHJpY3NMb2dnZXI7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5GYXN0WG1sU2VyaWFsaXplcjsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLlByZWNvbmRpdGlvbnM7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5YbWxVdGlsczsKQEAgLTE2Niw2ICsxNjcsMTAgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYQVRUUl9TRVJJQUwgPSAidXNlci5zZXJpYWwiOwogCisgICAgLy8gVHJvbiBjb3VudGVycworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUUk9OX0dVRVNUX0NSRUFURUQgPSAidXNlcnNfZ3Vlc3RfY3JlYXRlZCI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRST05fVVNFUl9DUkVBVEVEID0gInVzZXJzX3VzZXJfY3JlYXRlZCI7CisKICAgICBwcml2YXRlIGZpbmFsIENvbnRleHQgbUNvbnRleHQ7CiAgICAgcHJpdmF0ZSBmaW5hbCBQYWNrYWdlTWFuYWdlclNlcnZpY2UgbVBtOwogICAgIHByaXZhdGUgZmluYWwgT2JqZWN0IG1QYWNrYWdlc0xvY2s7CkBAIC01MjYsNiArNTMxLDcgQEAKICAgICAgICAgaWYgKHBhcmVudEhhbmRsZSAhPSBudWxsKSB7CiAgICAgICAgICAgICBpbnRlbnQgPSBuZXcgSW50ZW50KEludGVudC5BQ1RJT05fTUFOQUdFRF9QUk9GSUxFX0FWQUlMQUJJTElUWV9DSEFOR0VEKTsKICAgICAgICAgICAgIGludGVudC5wdXRFeHRyYShJbnRlbnQuRVhUUkFfVVNFUiwgcHJvZmlsZUhhbmRsZSk7CisgICAgICAgICAgICBpbnRlbnQucHV0RXh0cmEoSW50ZW50LkVYVFJBX1VTRVJfSEFORExFLCBwcm9maWxlSGFuZGxlLmdldElkZW50aWZpZXIoKSk7CiAgICAgICAgICAgICBpbnRlbnQuYWRkRmxhZ3MoSW50ZW50LkZMQUdfUkVDRUlWRVJfUkVHSVNURVJFRF9PTkxZKTsKICAgICAgICAgICAgIGludGVudC5wdXRFeHRyYXMoZXh0cmFzKTsKICAgICAgICAgICAgIG1Db250ZXh0LnNlbmRCcm9hZGNhc3RBc1VzZXIoaW50ZW50LCBwYXJlbnRIYW5kbGUpOwpAQCAtMTgyOSw2ICsxODM1LDcgQEAKICAgICAgICAgICAgIGFkZGVkSW50ZW50LnB1dEV4dHJhKEludGVudC5FWFRSQV9VU0VSX0hBTkRMRSwgdXNlcklkKTsKICAgICAgICAgICAgIG1Db250ZXh0LnNlbmRCcm9hZGNhc3RBc1VzZXIoYWRkZWRJbnRlbnQsIFVzZXJIYW5kbGUuQUxMLAogICAgICAgICAgICAgICAgICAgICBhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uTUFOQUdFX1VTRVJTKTsKKyAgICAgICAgICAgIE1ldHJpY3NMb2dnZXIuY291bnQobUNvbnRleHQsIGlzR3Vlc3QgPyBUUk9OX0dVRVNUX0NSRUFURUQgOiBUUk9OX1VTRVJfQ1JFQVRFRCwgMSk7CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBCaW5kZXIucmVzdG9yZUNhbGxpbmdJZGVudGl0eShpZGVudCk7CiAgICAgICAgIH0KQEAgLTIwNzMsNiArMjA4MCw3IEBACiAgICAgICAgIG1hbmFnZWRQcm9maWxlSW50ZW50LmFkZEZsYWdzKEludGVudC5GTEFHX1JFQ0VJVkVSX1JFR0lTVEVSRURfT05MWSB8CiAgICAgICAgICAgICAgICAgSW50ZW50LkZMQUdfUkVDRUlWRVJfRk9SRUdST1VORCk7CiAgICAgICAgIG1hbmFnZWRQcm9maWxlSW50ZW50LnB1dEV4dHJhKEludGVudC5FWFRSQV9VU0VSLCBuZXcgVXNlckhhbmRsZShyZW1vdmVkVXNlcklkKSk7CisgICAgICAgIG1hbmFnZWRQcm9maWxlSW50ZW50LnB1dEV4dHJhKEludGVudC5FWFRSQV9VU0VSX0hBTkRMRSwgcmVtb3ZlZFVzZXJJZCk7CiAgICAgICAgIG1Db250ZXh0LnNlbmRCcm9hZGNhc3RBc1VzZXIobWFuYWdlZFByb2ZpbGVJbnRlbnQsIG5ldyBVc2VySGFuZGxlKHBhcmVudFVzZXJJZCksIG51bGwpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wb2xpY3kvR2xvYmFsQWN0aW9ucy5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wb2xpY3kvR2xvYmFsQWN0aW9ucy5qYXZhCmluZGV4IDU5NDhkM2MuLjNlYWU3ZmMgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvcG9saWN5L0dsb2JhbEFjdGlvbnMuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BvbGljeS9HbG9iYWxBY3Rpb25zLmphdmEKQEAgLTM4MywxMyArMzgzLDExIEBACiAgICAgICAgICAgICAvLyBBZGQgYSBsaXR0bGUgZGVsYXkgYmVmb3JlIGV4ZWN1dGluZywgdG8gZ2l2ZSB0aGUKICAgICAgICAgICAgIC8vIGRpYWxvZyBhIGNoYW5jZSB0byBnbyBhd2F5IGJlZm9yZSBpdCB0YWtlcyBhCiAgICAgICAgICAgICAvLyBzY3JlZW5zaG90LgotICAgICAgICAgICAgLy8gVE9ETzogcmVtb3ZlIG9uY2Ugc2NyZWVuc2hvdHMgYXJlIGhhbmRsZWQgYnkgU2hlbGwgKGluc3RlYWQgb2YgZHVtcHN0YXRlKQogICAgICAgICAgICAgbUhhbmRsZXIucG9zdERlbGF5ZWQobmV3IFJ1bm5hYmxlKCkgewogICAgICAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRha2UgYSAiaGVhdnkiIGJ1Z3JlcG9ydDogaXQncyBtb3JlIHVzZXIgZnJpZW5kbHksIGJ1dCBjYXVzZXMgbW9yZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW50ZXJmZXJlbmNlLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGFrZSBhbiAiaW50ZXJhY3RpdmUiIGJ1Z3JlcG9ydC4KICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5TWFuYWdlck5hdGl2ZS5nZXREZWZhdWx0KCkucmVxdWVzdEJ1Z1JlcG9ydCh0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtNDA1LDExICs0MDMsMTEgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIC8vIFRha2UgYSAibGlnaHQiIGJ1Z3JlcG9ydCwgd2l0aCBsZXNzIGludGVyZmVyZW5jZS4KKyAgICAgICAgICAgICAgICAvLyBUYWtlIGEgImZ1bGwiIGJ1Z3JlcG9ydC4KICAgICAgICAgICAgICAgICBBY3Rpdml0eU1hbmFnZXJOYXRpdmUuZ2V0RGVmYXVsdCgpLnJlcXVlc3RCdWdSZXBvcnQoZmFsc2UpOwogICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKICAgICAgICAgcHVibGljIGJvb2xlYW4gc2hvd0R1cmluZ0tleWd1YXJkKCkgewpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wb2xpY3kvUGhvbmVXaW5kb3dNYW5hZ2VyLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BvbGljeS9QaG9uZVdpbmRvd01hbmFnZXIuamF2YQppbmRleCBkZmY2ZTNmLi43MjYxMWI3IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BvbGljeS9QaG9uZVdpbmRvd01hbmFnZXIuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BvbGljeS9QaG9uZVdpbmRvd01hbmFnZXIuamF2YQpAQCAtMjA2Myw3ICsyMDYzLDggQEAKICAgICAgICAgICAgICAgICBhdHRycy5zdWJ0cmVlU3lzdGVtVWlWaXNpYmlsaXR5IHw9IFZpZXcuU1lTVEVNX1VJX0ZMQUdfTEFZT1VUX0hJREVfTkFWSUdBVElPTjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICgoYXR0cnMuZmxhZ3MgJiBGTEFHX0RSQVdTX1NZU1RFTV9CQVJfQkFDS0dST1VORFMpICE9IDAKLSAgICAgICAgICAgICAgICAgICAgfHwgbUZvcmNlV2luZG93RHJhd3NTdGF0dXNCYXJCYWNrZ3JvdW5kKSB7CisgICAgICAgICAgICAgICAgICAgIHx8IChtRm9yY2VXaW5kb3dEcmF3c1N0YXR1c0JhckJhY2tncm91bmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBhdHRycy5oZWlnaHQgPT0gTUFUQ0hfUEFSRU5UICYmIGF0dHJzLndpZHRoID09IE1BVENIX1BBUkVOVCkpIHsKICAgICAgICAgICAgICAgICBhdHRycy5zdWJ0cmVlU3lzdGVtVWlWaXNpYmlsaXR5IHw9IFZpZXcuU1lTVEVNX1VJX0ZMQUdfTEFZT1VUX0ZVTExTQ1JFRU47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTMzODAsNyArMzM4MSw2IEBACiAgICAgICAgICAgICBpZiAoYXdha2VuRnJvbURyZWFtcykgewogICAgICAgICAgICAgICAgIGF3YWtlbkRyZWFtcygpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgc2VuZENsb3NlU3lzdGVtV2luZG93cyhTWVNURU1fRElBTE9HX1JFQVNPTl9IT01FX0tFWSk7CiAgICAgICAgICAgICBoaWRlUmVjZW50QXBwcyhmYWxzZSwgdHJ1ZSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBPdGhlcndpc2UsIGp1c3QgbGF1bmNoIEhvbWUKQEAgLTQyNDIsNiArNDI0Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoc3lzVWlGbCAmIFZpZXcuU1lTVEVNX1VJX0ZMQUdfTEFZT1VUX0hJREVfTkFWSUdBVElPTikgIT0gMAogICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGF0dHJzLnR5cGUgPT0gVFlQRV9TVEFUVVNfQkFSCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgYXR0cnMudHlwZSA9PSBUWVBFX1RPQVNUCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgYXR0cnMudHlwZSA9PSBUWVBFX0RPQ0tfRElWSURFUgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGF0dHJzLnR5cGUgPT0gVFlQRV9WT0lDRV9JTlRFUkFDVElPTl9TVEFSVElORwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChhdHRycy50eXBlID49IFdpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLkZJUlNUX0FQUExJQ0FUSU9OX1dJTkRPVwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGF0dHJzLnR5cGUgPD0gV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuTEFTVF9TVUJfV0lORE9XKSkpIHsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvcG9saWN5L1Nob3J0Y3V0TWFuYWdlci5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wb2xpY3kvU2hvcnRjdXRNYW5hZ2VyLmphdmEKaW5kZXggNzZmNTZiYy4uOTkwODYyNCAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wb2xpY3kvU2hvcnRjdXRNYW5hZ2VyLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wb2xpY3kvU2hvcnRjdXRNYW5hZ2VyLmphdmEKQEAgLTEyOCwxMyArMTI4LDE1IEBACiAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5SW5mbyBpbmZvID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICAgQ29tcG9uZW50TmFtZSBjb21wb25lbnROYW1lID0gbmV3IENvbXBvbmVudE5hbWUocGFja2FnZU5hbWUsIGNsYXNzTmFtZSk7CiAgICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbmZvID0gcGFja2FnZU1hbmFnZXIuZ2V0QWN0aXZpdHlJbmZvKGNvbXBvbmVudE5hbWUsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgaW5mbyA9IHBhY2thZ2VNYW5hZ2VyLmdldEFjdGl2aXR5SW5mbyhjb21wb25lbnROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlTWFuYWdlci5NQVRDSF9FTkNSWVBUSU9OX0FXQVJFX0FORF9VTkFXQVJFKTsKICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoUGFja2FnZU1hbmFnZXIuTmFtZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ1tdIHBhY2thZ2VzID0gcGFja2FnZU1hbmFnZXIuY2Fub25pY2FsVG9DdXJyZW50UGFja2FnZU5hbWVzKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgU3RyaW5nW10geyBwYWNrYWdlTmFtZSB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudE5hbWUgPSBuZXcgQ29tcG9uZW50TmFtZShwYWNrYWdlc1swXSwgY2xhc3NOYW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mbyA9IHBhY2thZ2VNYW5hZ2VyLmdldEFjdGl2aXR5SW5mbyhjb21wb25lbnROYW1lLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvID0gcGFja2FnZU1hbmFnZXIuZ2V0QWN0aXZpdHlJbmZvKGNvbXBvbmVudE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlTWFuYWdlci5NQVRDSF9FTkNSWVBUSU9OX0FXQVJFX0FORF9VTkFXQVJFKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFBhY2thZ2VNYW5hZ2VyLk5hbWVOb3RGb3VuZEV4Y2VwdGlvbiBlMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy53KFRBRywgIlVuYWJsZSB0byBhZGQgYm9va21hcms6ICIgKyBwYWNrYWdlTmFtZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLyIgKyBjbGFzc05hbWUsIGUpOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wb2xpY3kva2V5Z3VhcmQvS2V5Z3VhcmRTZXJ2aWNlRGVsZWdhdGUuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvcG9saWN5L2tleWd1YXJkL0tleWd1YXJkU2VydmljZURlbGVnYXRlLmphdmEKaW5kZXggYzBkZmJjYi4uNTQ5ZDJkYyAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wb2xpY3kva2V5Z3VhcmQvS2V5Z3VhcmRTZXJ2aWNlRGVsZWdhdGUuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BvbGljeS9rZXlndWFyZC9LZXlndWFyZFNlcnZpY2VEZWxlZ2F0ZS5qYXZhCkBAIC0xMjYsNiArMTI2LDcgQEAKIAogICAgICAgICBmaW5hbCBDb21wb25lbnROYW1lIGtleWd1YXJkQ29tcG9uZW50ID0gQ29tcG9uZW50TmFtZS51bmZsYXR0ZW5Gcm9tU3RyaW5nKAogICAgICAgICAgICAgICAgIHJlc291cmNlcy5nZXRTdHJpbmcoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHJpbmcuY29uZmlnX2tleWd1YXJkQ29tcG9uZW50KSk7CisgICAgICAgIGludGVudC5hZGRGbGFncyhJbnRlbnQuRkxBR19ERUJVR19UUklBR0VEX01JU1NJTkcpOwogICAgICAgICBpbnRlbnQuc2V0Q29tcG9uZW50KGtleWd1YXJkQ29tcG9uZW50KTsKIAogICAgICAgICBpZiAoIWNvbnRleHQuYmluZFNlcnZpY2VBc1VzZXIoaW50ZW50LCBtS2V5Z3VhcmRDb25uZWN0aW9uLApkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci90di9UdklucHV0SGFyZHdhcmVNYW5hZ2VyLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3R2L1R2SW5wdXRIYXJkd2FyZU1hbmFnZXIuamF2YQppbmRleCA5YmY3YWU0Li41Nzg0MjhiIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3R2L1R2SW5wdXRIYXJkd2FyZU1hbmFnZXIuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3R2L1R2SW5wdXRIYXJkd2FyZU1hbmFnZXIuamF2YQpAQCAtMzksNiArMzksNyBAQAogaW1wb3J0IGFuZHJvaWQubWVkaWEuQXVkaW9QYXRjaDsKIGltcG9ydCBhbmRyb2lkLm1lZGlhLkF1ZGlvUG9ydDsKIGltcG9ydCBhbmRyb2lkLm1lZGlhLkF1ZGlvUG9ydENvbmZpZzsKK2ltcG9ydCBhbmRyb2lkLm1lZGlhLkF1ZGlvU3lzdGVtOwogaW1wb3J0IGFuZHJvaWQubWVkaWEudHYuSVR2SW5wdXRIYXJkd2FyZTsKIGltcG9ydCBhbmRyb2lkLm1lZGlhLnR2LklUdklucHV0SGFyZHdhcmVDYWxsYmFjazsKIGltcG9ydCBhbmRyb2lkLm1lZGlhLnR2LlR2SW5wdXRIYXJkd2FyZUluZm87CkBAIC03MDMsNyArNzA0LDggQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGludCBzaW5rRGV2aWNlID0gbUF1ZGlvTWFuYWdlci5nZXREZXZpY2VzRm9yU3RyZWFtKEF1ZGlvTWFuYWdlci5TVFJFQU1fTVVTSUMpOwogICAgICAgICAgICAgZm9yIChBdWRpb0RldmljZVBvcnQgcG9ydCA6IGRldmljZVBvcnRzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKChwb3J0LnR5cGUoKSAmIHNpbmtEZXZpY2UpICE9IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoKHBvcnQudHlwZSgpICYgc2lua0RldmljZSkgIT0gMCAmJgorICAgICAgICAgICAgICAgICAgICAocG9ydC50eXBlKCkgJiBBdWRpb1N5c3RlbS5ERVZJQ0VfQklUX0lOKSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgIHNpbmtzLmFkZChwb3J0KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3ZyL1ZyTWFuYWdlckludGVybmFsLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3ZyL1ZyTWFuYWdlckludGVybmFsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJkYjM2NAotLS0gL2Rldi9udWxsCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvdnIvVnJNYW5hZ2VySW50ZXJuYWwuamF2YQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmFuZHJvaWQuc2VydmVyLnZyOworCisvKioKKyAqIFZSIG1vZGUgbG9jYWwgc3lzdGVtIHNlcnZpY2UgaW50ZXJmYWNlLgorICoKKyAqIEBoaWRlIE9ubHkgZm9yIHVzZSB3aXRoaW4gc3lzdGVtIHNlcnZlci4KKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIFZyTWFuYWdlckludGVybmFsIHsKKworICAgIC8qKgorICAgICAqIFJldHVybiBjdXJyZW50IFZSIG1vZGUgc3RhdGUuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIHtAY29kZSB0cnVlfSBpZiBWUiBtb2RlIGlzIGVuYWJsZWQuCisgICAgICovCisgICAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gaXNJblZyTW9kZSgpOworCisgICAgLyoqCisgICAgICogU2V0IHRoZSBjdXJyZW50IFZSIG1vZGUgc3RhdGUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gZW5hYmxlZCB7QGNvZGUgdHJ1ZX0gdG8gZW5hYmxlIFZSIG1vZGUuCisgICAgICovCisgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0VnJNb2RlKGJvb2xlYW4gZW5hYmxlZCk7CisKKyAgICAvKioKKyAgICAgKiBBZGQgYSBsaXN0ZW5lciBmb3IgVlIgbW9kZSBzdGF0ZSBjaGFuZ2VzLgorICAgICAqIDxwPgorICAgICAqIFRoaXMgbGlzdGVuZXIgd2lsbCBpbW1lZGlhdGVseSBiZSBjYWxsZWQgd2l0aCB0aGUgY3VycmVudCBWUiBtb2RlIHN0YXRlLgorICAgICAqIDwvcD4KKyAgICAgKiBAcGFyYW0gbGlzdGVuZXIgdGhlIGxpc3RlbmVyIGluc3RhbmNlIHRvIGFkZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCByZWdpc3Rlckxpc3RlbmVyKFZyU3RhdGVMaXN0ZW5lciBsaXN0ZW5lcik7CisKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgdGhlIGxpc3RlbmVyIGZyb20gdGhlIGN1cnJlbnQgc2V0IG9mIGxpc3RlbmVycy4KKyAgICAgKgorICAgICAqIEBwYXJhbSBsaXN0ZW5lciB0aGUgbGlzdGVuZXIgdG8gcmVtb3ZlLgorICAgICAqLworICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHVucmVnaXN0ZXJMaXN0ZW5lcihWclN0YXRlTGlzdGVuZXIgbGlzdGVuZXIpOworCit9CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3ZyL1ZyTWFuYWdlclNlcnZpY2UuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvdnIvVnJNYW5hZ2VyU2VydmljZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhNTVlN2YKLS0tIC9kZXYvbnVsbAorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3ZyL1ZyTWFuYWdlclNlcnZpY2UuamF2YQpAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5hbmRyb2lkLnNlcnZlci52cjsKKworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQub3MuVXNlckhhbmRsZTsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuQXJyYXlTZXQ7CitpbXBvcnQgYW5kcm9pZC51dGlsLlNsb2c7CisKK2ltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIuU3lzdGVtU2VydmljZTsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CisKKy8qKgorICogU2VydmljZSB0cmFja2luZyB3aGV0aGVyIFZSIG1vZGUgaXMgYWN0aXZlLCBhbmQgbm90aWZ5aW5nIGxpc3RlbmluZyBzeXN0ZW0gc2VydmljZXMgb2Ygc3RhdGUKKyAqIGNoYW5nZXMuCisgKgorICoge0BoaWRlfQorICovCitwdWJsaWMgY2xhc3MgVnJNYW5hZ2VyU2VydmljZSBleHRlbmRzIFN5c3RlbVNlcnZpY2UgeworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIlZyTWFuYWdlclNlcnZpY2UiOworCisgICAgcHJpdmF0ZSBmaW5hbCBPYmplY3QgbUxvY2sgPSBuZXcgT2JqZWN0KCk7CisgICAgcHJpdmF0ZSBib29sZWFuIG1Wck1vZGVFbmFibGVkID0gZmFsc2U7CisgICAgcHJpdmF0ZSBBcnJheVNldDxWclN0YXRlTGlzdGVuZXI+IG1MaXN0ZW5lcnMgPSBuZXcgQXJyYXlTZXQ8PigpOworCisgICAgcHJpdmF0ZSBmaW5hbCBjbGFzcyBMb2NhbFNlcnZpY2UgZXh0ZW5kcyBWck1hbmFnZXJJbnRlcm5hbCB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc0luVnJNb2RlKCkgeworICAgICAgICAgICAgcmV0dXJuIFZyTWFuYWdlclNlcnZpY2UudGhpcy5nZXRWck1vZGUoKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBzZXRWck1vZGUoYm9vbGVhbiBlbmFibGVkKSB7CisgICAgICAgICAgICBWck1hbmFnZXJTZXJ2aWNlLnRoaXMuc2V0VnJNb2RlKGVuYWJsZWQpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHJlZ2lzdGVyTGlzdGVuZXIoVnJTdGF0ZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisgICAgICAgICAgICBWck1hbmFnZXJTZXJ2aWNlLnRoaXMuYWRkTGlzdGVuZXIobGlzdGVuZXIpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHVucmVnaXN0ZXJMaXN0ZW5lcihWclN0YXRlTGlzdGVuZXIgbGlzdGVuZXIpIHsKKyAgICAgICAgICAgIFZyTWFuYWdlclNlcnZpY2UudGhpcy5yZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgVnJNYW5hZ2VyU2VydmljZShDb250ZXh0IGNvbnRleHQpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25TdGFydCgpIHsKKyAgICAgICAgcHVibGlzaExvY2FsU2VydmljZShWck1hbmFnZXJJbnRlcm5hbC5jbGFzcywgbmV3IExvY2FsU2VydmljZSgpKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgYWRkTGlzdGVuZXIoVnJTdGF0ZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisgICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKKyAgICAgICAgICAgIG1MaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCByZW1vdmVMaXN0ZW5lcihWclN0YXRlTGlzdGVuZXIgbGlzdGVuZXIpIHsKKyAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgeworICAgICAgICAgICAgbUxpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHNldFZyTW9kZShib29sZWFuIGVuYWJsZWQpIHsKKyAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgeworICAgICAgICAgICAgaWYgKG1Wck1vZGVFbmFibGVkICE9IGVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICBtVnJNb2RlRW5hYmxlZCA9IGVuYWJsZWQ7CisgICAgICAgICAgICAgICAgaWYgKERFQlVHKSBTbG9nLmQoVEFHLCAiVlIgbW9kZSAiICsgKChtVnJNb2RlRW5hYmxlZCkgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKSk7CisgICAgICAgICAgICAgICAgb25Wck1vZGVDaGFuZ2VkTG9ja2VkKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGJvb2xlYW4gZ2V0VnJNb2RlKCkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CisgICAgICAgICAgICByZXR1cm4gbVZyTW9kZUVuYWJsZWQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBOb3RpZnkgc3lzdGVtIHNlcnZpY2VzIG9mIFZSIG1vZGUgY2hhbmdlLgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCBvblZyTW9kZUNoYW5nZWRMb2NrZWQoKSB7CisgICAgICAgIGZvciAoVnJTdGF0ZUxpc3RlbmVyIGwgOiBtTGlzdGVuZXJzKSB7CisgICAgICAgICAgICBsLm9uVnJTdGF0ZUNoYW5nZWQobVZyTW9kZUVuYWJsZWQpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci92ci9WclN0YXRlTGlzdGVuZXIuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvdnIvVnJTdGF0ZUxpc3RlbmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhhZjRiMgotLS0gL2Rldi9udWxsCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvdnIvVnJTdGF0ZUxpc3RlbmVyLmphdmEKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5hbmRyb2lkLnNlcnZlci52cjsKKworLyoqCisgKiBMaXN0ZW5lciBmb3Igc3RhdGUgY2hhbmdlcyBpbiBWck1hbmFnZXJTZXJ2aWNlLAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgVnJTdGF0ZUxpc3RlbmVyIHsKKworICAvKioKKyAgICogQ2FsbGVkIHdoZW4gdGhlIFZSIG1vZGUgc3RhdGUgY2hhbmdlcy4KKyAgICoKKyAgICogQHBhcmFtIGVuYWJsZWQge0Bjb2RlIHRydWV9IGlmIFZSIG1vZGUgaXMgZW5hYmxlZC4KKyAgICovCisgICAgcHVibGljIGFic3RyYWN0IHZvaWQgb25WclN0YXRlQ2hhbmdlZChib29sZWFuIGVuYWJsZWQpOworfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9BcHBXaW5kb3dUb2tlbi5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9BcHBXaW5kb3dUb2tlbi5qYXZhCmluZGV4IGI0OTY0MWYuLjc1MWY4NzEgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vQXBwV2luZG93VG9rZW4uamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL0FwcFdpbmRvd1Rva2VuLmphdmEKQEAgLTE2LDYgKzE2LDcgQEAKIAogcGFja2FnZSBjb20uYW5kcm9pZC5zZXJ2ZXIud207CiAKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlN0YWNrSWQ7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5UWVBFX0FQUExJQ0FUSU9OX1NUQVJUSU5HOwogaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX0FOSU07CiBpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfQVBQX1RSQU5TSVRJT05TOwpAQCAtMjQsMTIgKzI1LDE0IEBACiBpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfV0lORE9XX01PVkVNRU5UOwogaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLlRBR19XSVRIX0NMQVNTX05BTUU7CiBpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuVEFHX1dNOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlclNlcnZpY2UuV0lORE9XX1JFUExBQ0VNRU5UX1RJTUVPVVRfRFVSQVRJT047CiAKIGltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIuaW5wdXQuSW5wdXRBcHBsaWNhdGlvbkhhbmRsZTsKIGltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlclNlcnZpY2UuSDsKIAogaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5Ob25OdWxsOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5BY3Rpdml0eUluZm87CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0OwogaW1wb3J0IGFuZHJvaWQub3MuTWVzc2FnZTsKIGltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU2xvZzsKQEAgLTM4LDYgKzQxLDcgQEAKIGltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlcjsKIAogaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CitpbXBvcnQgamF2YS51dGlsLkFycmF5RGVxdWU7CiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIAogY2xhc3MgQXBwVG9rZW5MaXN0IGV4dGVuZHMgQXJyYXlMaXN0PEFwcFdpbmRvd1Rva2VuPiB7CkBAIC0xMjMsNiArMTI3LDEwIEBACiAgICAgLy8gVHJ1ZSBpZiB0aGUgd2luZG93cyBhc3NvY2lhdGVkIHdpdGggdGhpcyB0b2tlbiBzaG91bGQgYmUgY3JvcHBlZCB0byB0aGVpciBzdGFjayBib3VuZHMuCiAgICAgYm9vbGVhbiBtQ3JvcFdpbmRvd3NUb1N0YWNrOwogCisgICAgYm9vbGVhbiBtQWx3YXlzRm9jdXNhYmxlOworCisgICAgQXJyYXlEZXF1ZTxSZWN0PiBtRnJvemVuQm91bmRzID0gbmV3IEFycmF5RGVxdWU8PigpOworCiAgICAgQXBwV2luZG93VG9rZW4oV2luZG93TWFuYWdlclNlcnZpY2UgX3NlcnZpY2UsIElBcHBsaWNhdGlvblRva2VuIF90b2tlbiwKICAgICAgICAgICAgIGJvb2xlYW4gX3ZvaWNlSW50ZXJhY3Rpb24pIHsKICAgICAgICAgc3VwZXIoX3NlcnZpY2UsIF90b2tlbi5hc0JpbmRlcigpLApAQCAtMjU2LDggKzI2NCw4IEBACiAgICAgICAgIHJldHVybiBjYW5kaWRhdGU7CiAgICAgfQogCi0gICAgYm9vbGVhbiBzdGFja0NhblJlY2VpdmVLZXlzKCkgewotICAgICAgICByZXR1cm4gKHdpbmRvd3Muc2l6ZSgpID4gMCkgPyB3aW5kb3dzLmdldCh3aW5kb3dzLnNpemUoKSAtIDEpLnN0YWNrQ2FuUmVjZWl2ZUtleXMoKSA6IGZhbHNlOworICAgIGJvb2xlYW4gd2luZG93c0FyZUZvY3VzYWJsZSgpIHsKKyAgICAgICAgcmV0dXJuIFN0YWNrSWQuY2FuUmVjZWl2ZUtleXMobVRhc2subVN0YWNrLm1TdGFja0lkKSB8fCBtQWx3YXlzRm9jdXNhYmxlOwogICAgIH0KIAogICAgIGJvb2xlYW4gaXNWaXNpYmxlKCkgewpAQCAtMzk2LDEyICs0MDQsMjggQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIHZvaWQgcmVzZXRSZXBsYWNpbmdXaW5kb3dzKCkgeworICAgICAgICBpZiAoREVCVUdfQUREX1JFTU9WRSkgU2xvZy5kKFRBR19XTSwgIlJlc2V0dGluZyBhcHAgdG9rZW4gIiArIGFwcFdpbmRvd1Rva2VuCisgICAgICAgICAgICAgICAgKyAiIG9mIHJlcGxhY2luZyB3aW5kb3cgbWFya3MuIik7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IGFsbEFwcFdpbmRvd3Muc2l6ZSgpIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgICAgIGZpbmFsIFdpbmRvd1N0YXRlIHcgPSBhbGxBcHBXaW5kb3dzLmdldChpKTsKKyAgICAgICAgICAgIHcucmVzZXRSZXBsYWNpbmcoKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHZvaWQgYWRkV2luZG93KFdpbmRvd1N0YXRlIHcpIHsKICAgICAgICAgZm9yIChpbnQgaSA9IGFsbEFwcFdpbmRvd3Muc2l6ZSgpIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgICAgICAgIFdpbmRvd1N0YXRlIGNhbmRpZGF0ZSA9IGFsbEFwcFdpbmRvd3MuZ2V0KGkpOwogICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS5tV2lsbFJlcGxhY2VXaW5kb3cgJiYgY2FuZGlkYXRlLm1SZXBsYWNpbmdXaW5kb3cgPT0gbnVsbCAmJgogICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGUuZ2V0V2luZG93VGFnKCkuZXF1YWxzKHcuZ2V0V2luZG93VGFnKCkudG9TdHJpbmcoKSkpIHsKICAgICAgICAgICAgICAgICBjYW5kaWRhdGUubVJlcGxhY2luZ1dpbmRvdyA9IHc7CisKKyAgICAgICAgICAgICAgICAvLyBpZiB3ZSBnb3QgYSByZXBsYWNlbWVudCB3aW5kb3csIHJlc2V0IHRoZSB0aW1lb3V0IHRvIGdpdmUgZHJhd2luZyBtb3JlIHRpbWUKKyAgICAgICAgICAgICAgICBzZXJ2aWNlLm1ILnJlbW92ZU1lc3NhZ2VzKEguV0lORE9XX1JFUExBQ0VNRU5UX1RJTUVPVVQpOworICAgICAgICAgICAgICAgIHNlcnZpY2UubUguc2VuZE1lc3NhZ2VEZWxheWVkKAorICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS5tSC5vYnRhaW5NZXNzYWdlKEguV0lORE9XX1JFUExBQ0VNRU5UX1RJTUVPVVQsIHRoaXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdJTkRPV19SRVBMQUNFTUVOVF9USU1FT1VUX0RVUkFUSU9OKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBhbGxBcHBXaW5kb3dzLmFkZCh3KTsKQEAgLTQxNyw3ICs0NDEsNyBAQAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgdm9pZCBjbGVhclRpbWVkb3V0UmVwbGFjZWVzTG9ja2VkKCkgeworICAgIHZvaWQgY2xlYXJUaW1lZG91dFJlcGxhY2VzTG9ja2VkKCkgewogICAgICAgICBmb3IgKGludCBpID0gYWxsQXBwV2luZG93cy5zaXplKCkgLSAxOyBpID49IDA7CiAgICAgICAgICAgICAgLy8gcmVtb3ZlV2luZG93TG9ja2VkIGF0IGJvdHRvbSBvZiBsb29wIG1heSByZW1vdmUgbXVsdGlwbGUgZW50cmllcyBmcm9tCiAgICAgICAgICAgICAgLy8gYWxsQXBwV2luZG93cyBpZiB0aGUgd2luZG93IHRvIGJlIHJlbW92ZWQgaGFzIGNoaWxkIHdpbmRvd3MuIEl0IGFsc28gbWF5CkBAIC00MzAsMTAgKzQ1NCwzMSBAQAogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FuZGlkYXRlLm1XaWxsUmVwbGFjZVdpbmRvdyA9IGZhbHNlOwotICAgICAgICAgICAgc2VydmljZS5yZW1vdmVXaW5kb3dMb2NrZWQoY2FuZGlkYXRlKTsKKyAgICAgICAgICAgIC8vIFNpbmNlIHRoZSB3aW5kb3cgYWxyZWFkeSB0aW1lZCBvdXQsIHJlbW92ZSBpdCBpbW1lZGlhdGVseSBub3cuCisgICAgICAgICAgICAvLyBVc2UgcmVtb3ZlV2luZG93SW5uZXJMb2NrZWQoKSBpbnN0ZWFkIG9mIHJlbW92ZVdpbmRvd0xvY2tlZCgpLCBhcyB0aGUgbGF0dGVyCisgICAgICAgICAgICAvLyBkZWxheXMgcmVtb3ZhbCBvbiBjZXJ0YWluIGNvbmRpdGlvbnMsIHdoaWNoIHdpbGwgbGVhdmUgdGhlIHN0YWxlIHdpbmRvdyBpbiB0aGUKKyAgICAgICAgICAgIC8vIHN0YWNrIGFuZCBtYXJrZWQgbVdpbGxSZXBsYWNlV2luZG93PWZhbHNlLCBzbyB0aGUgd2luZG93IHdpbGwgbmV2ZXIgYmUgcmVtb3ZlZC4KKyAgICAgICAgICAgIHNlcnZpY2UucmVtb3ZlV2luZG93SW5uZXJMb2NrZWQoY2FuZGlkYXRlKTsKICAgICAgICAgfQogICAgIH0KIAorICAgIC8qKgorICAgICAqIEZyZWV6ZXMgdGhlIHRhc2sgYm91bmRzLiBUaGUgc2l6ZSBvZiB0aGlzIHRhc2sgcmVwb3J0ZWQgdGhlIGFwcCB3aWxsIGJlIGZpeGVkIHRvIHRoZSBib3VuZHMKKyAgICAgKiBmcmVlemVkIGJ5IHtAbGluayBUYXNrI3ByZXBhcmVGcmVlemluZ0JvdW5kc30gdW50aWwge0BsaW5rICN1bmZyZWV6ZUJvdW5kc30gZ2V0cyBjYWxsZWQsIGV2ZW4KKyAgICAgKiBpZiB0aGV5IGNoYW5nZSBpbiB0aGUgbWVhbnRpbWUuIElmIHRoZSBib3VuZHMgYXJlIGFscmVhZHkgZnJvemVuLCB0aGUgYm91bmRzIHdpbGwgYmUgZnJvemVuCisgICAgICogd2l0aCBhIHF1ZXVlLgorICAgICAqLworICAgIHZvaWQgZnJlZXplQm91bmRzKCkgeworICAgICAgICBtRnJvemVuQm91bmRzLm9mZmVyKG5ldyBSZWN0KG1UYXNrLm1QcmVwYXJlZEZyb3plbkJvdW5kcykpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFVuZnJlZXplcyB0aGUgcHJldmlvdXNseSBmcm96ZW4gYm91bmRzLiBTZWUge0BsaW5rICNmcmVlemVCb3VuZHN9LgorICAgICAqLworICAgIHZvaWQgdW5mcmVlemVCb3VuZHMoKSB7CisgICAgICAgIG1Gcm96ZW5Cb3VuZHMucmVtb3ZlKCk7CisgICAgfQorCiAgICAgQE92ZXJyaWRlCiAgICAgdm9pZCBkdW1wKFByaW50V3JpdGVyIHB3LCBTdHJpbmcgcHJlZml4KSB7CiAgICAgICAgIHN1cGVyLmR1bXAocHcsIHByZWZpeCk7CkBAIC00ODAsNiArNTI1LDkgQEAKICAgICAgICAgICAgICAgICAgICAgcHcucHJpbnQoIiBzdGFydGluZ0Rpc3BsYXllZD0iKTsgcHcucHJpbnQoc3RhcnRpbmdEaXNwbGF5ZWQpOwogICAgICAgICAgICAgICAgICAgICBwdy5wcmludCgiIHN0YXJ0aW5nTW92ZWQiKTsgcHcucHJpbnRsbihzdGFydGluZ01vdmVkKTsKICAgICAgICAgfQorICAgICAgICBpZiAoIW1Gcm96ZW5Cb3VuZHMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBwdy5wcmludChwcmVmaXgpOyBwdy5wcmludCgibUZyb3plbkJvdW5kcz0iKTsgcHcucHJpbnQobUZyb3plbkJvdW5kcyk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBAT3ZlcnJpZGUKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vRG9ja2VkU3RhY2tEaXZpZGVyQ29udHJvbGxlci5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9Eb2NrZWRTdGFja0RpdmlkZXJDb250cm9sbGVyLmphdmEKaW5kZXggOGYzZDNlMy4uNzI5NTMxOCAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9Eb2NrZWRTdGFja0RpdmlkZXJDb250cm9sbGVyLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9Eb2NrZWRTdGFja0RpdmlkZXJDb250cm9sbGVyLmphdmEKQEAgLTE4LDExICsxOCwxNyBAQAogCiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0OworaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlQ2FsbGJhY2tMaXN0OwogaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGFuZHJvaWQudXRpbC5TbG9nOwotaW1wb3J0IGFuZHJvaWQudmlldy5JRG9ja0RpdmlkZXJWaXNpYmlsaXR5TGlzdGVuZXI7CitpbXBvcnQgYW5kcm9pZC52aWV3LkRpc3BsYXlJbmZvOworaW1wb3J0IGFuZHJvaWQudmlldy5JRG9ja2VkU3RhY2tMaXN0ZW5lcjsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZUNvbnRyb2w7CisKK2ltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIud20uRGltTGF5ZXIuRGltTGF5ZXJVc2VyOwogCiBpbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5TdGFja0lkLkRPQ0tFRF9TVEFDS19JRDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlN0YWNrSWQuSU5WQUxJRF9TVEFDS19JRDsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuRE9DS0VEX0JPVFRPTTsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuRE9DS0VEX0xFRlQ7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkRPQ0tFRF9SSUdIVDsKQEAgLTMzLDcgKzM5LDcgQEAKIC8qKgogICogS2VlcHMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGRvY2tlZCBzdGFjayBkaXZpZGVyLgogICovCi1wdWJsaWMgY2xhc3MgRG9ja2VkU3RhY2tEaXZpZGVyQ29udHJvbGxlciB7CitwdWJsaWMgY2xhc3MgRG9ja2VkU3RhY2tEaXZpZGVyQ29udHJvbGxlciBpbXBsZW1lbnRzIERpbUxheWVyVXNlciB7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gVEFHX1dJVEhfQ0xBU1NfTkFNRSA/ICJEb2NrZWRTdGFja0RpdmlkZXJDb250cm9sbGVyIiA6IFRBR19XTTsKIApAQCAtNDQsOSArNTAsMTAgQEAKICAgICBwcml2YXRlIFdpbmRvd1N0YXRlIG1XaW5kb3c7CiAgICAgcHJpdmF0ZSBmaW5hbCBSZWN0IG1UbXBSZWN0ID0gbmV3IFJlY3QoKTsKICAgICBwcml2YXRlIGZpbmFsIFJlY3QgbUxhc3RSZWN0ID0gbmV3IFJlY3QoKTsKLSAgICBwcml2YXRlIElEb2NrRGl2aWRlclZpc2liaWxpdHlMaXN0ZW5lciBtTGlzdGVuZXI7CiAgICAgcHJpdmF0ZSBib29sZWFuIG1MYXN0VmlzaWJpbGl0eSA9IGZhbHNlOwotICAgIHByaXZhdGUgYm9vbGVhbiBtRm9yY2VWaXNpYmlsaXR5UmVldmFsdWF0aW9uOworICAgIHByaXZhdGUgZmluYWwgUmVtb3RlQ2FsbGJhY2tMaXN0PElEb2NrZWRTdGFja0xpc3RlbmVyPiBtRG9ja2VkU3RhY2tMaXN0ZW5lcnMKKyAgICAgICAgICAgID0gbmV3IFJlbW90ZUNhbGxiYWNrTGlzdDw+KCk7CisgICAgcHJpdmF0ZSBmaW5hbCBEaW1MYXllciBtRGltTGF5ZXI7CiAKICAgICBEb2NrZWRTdGFja0RpdmlkZXJDb250cm9sbGVyKENvbnRleHQgY29udGV4dCwgRGlzcGxheUNvbnRlbnQgZGlzcGxheUNvbnRlbnQpIHsKICAgICAgICAgbURpc3BsYXlDb250ZW50ID0gZGlzcGxheUNvbnRlbnQ7CkBAIC01NCw2ICs2MSw3IEBACiAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5kaW1lbi5kb2NrZWRfc3RhY2tfZGl2aWRlcl90aGlja25lc3MpOwogICAgICAgICBtRGl2aWRlckluc2V0cyA9IGNvbnRleHQuZ2V0UmVzb3VyY2VzKCkuZ2V0RGltZW5zaW9uUGl4ZWxTaXplKAogICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuZGltZW4uZG9ja2VkX3N0YWNrX2RpdmlkZXJfaW5zZXRzKTsKKyAgICAgICAgbURpbUxheWVyID0gbmV3IERpbUxheWVyKGRpc3BsYXlDb250ZW50Lm1TZXJ2aWNlLCB0aGlzLCBkaXNwbGF5Q29udGVudC5nZXREaXNwbGF5SWQoKSk7CiAgICAgfQogCiAgICAgYm9vbGVhbiBpc1Jlc2l6aW5nKCkgewpAQCAtODMsMTUgKzkxLDE2IEBACiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgbUxhc3RWaXNpYmlsaXR5ID0gdmlzaWJsZTsKLSAgICAgICAgaWYgKG1MaXN0ZW5lciAhPSBudWxsKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIG1MaXN0ZW5lci5vbkRvY2tEaXZpZGVyVmlzaWJpbGl0eUNoYW5nZWQodmlzaWJsZSk7Ci0gICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIFNsb2cuZShUQUcsICJ2aXNpYmlsaXR5IGNhbGwgZmFpbGVkOiAiICsgZSk7Ci0gICAgICAgICAgICB9CisgICAgICAgIG5vdGlmeURvY2tlZERpdmlkZXJWaXNpYmlsaXR5Q2hhbmdlZCh2aXNpYmxlKTsKKyAgICAgICAgaWYgKCF2aXNpYmxlKSB7CisgICAgICAgICAgICBzZXRSZXNpemVEaW1MYXllcihmYWxzZSwgSU5WQUxJRF9TVEFDS19JRCwgMGYpOwogICAgICAgICB9CiAgICAgfQogCisgICAgYm9vbGVhbiB3YXNWaXNpYmxlKCkgeworICAgICAgICByZXR1cm4gbUxhc3RWaXNpYmlsaXR5OworICAgIH0KKwogICAgIHZvaWQgcG9zaXRpb25Eb2NrZWRTdGFja2VkRGl2aWRlcihSZWN0IGZyYW1lKSB7CiAgICAgICAgIFRhc2tTdGFjayBzdGFjayA9IG1EaXNwbGF5Q29udGVudC5nZXREb2NrZWRTdGFja0xvY2tlZCgpOwogICAgICAgICBpZiAoc3RhY2sgPT0gbnVsbCkgewpAQCAtMTI3LDExICsxMzYsNzYgQEAKICAgICAgICAgbUxhc3RSZWN0LnNldChmcmFtZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgcmVnaXN0ZXJEb2NrRGl2aWRlclZpc2liaWxpdHlMaXN0ZW5lcihJRG9ja0RpdmlkZXJWaXNpYmlsaXR5TGlzdGVuZXIgbGlzdGVuZXIpIHsKLSAgICAgICAgaWYgKG1MaXN0ZW5lciAhPSBudWxsICYmIGxpc3RlbmVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkRvY2sgZGl2aWRlciB2aXNpYmlsaXR5IGxpc3RlbmVyIGFscmVhZHkgc2V0ISIpOworICAgIHZvaWQgbm90aWZ5RG9ja2VkRGl2aWRlclZpc2liaWxpdHlDaGFuZ2VkKGJvb2xlYW4gdmlzaWJsZSkgeworICAgICAgICBmaW5hbCBpbnQgc2l6ZSA9IG1Eb2NrZWRTdGFja0xpc3RlbmVycy5iZWdpbkJyb2FkY2FzdCgpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICAgICAgZmluYWwgSURvY2tlZFN0YWNrTGlzdGVuZXIgbGlzdGVuZXIgPSBtRG9ja2VkU3RhY2tMaXN0ZW5lcnMuZ2V0QnJvYWRjYXN0SXRlbShpKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgbGlzdGVuZXIub25EaXZpZGVyVmlzaWJpbGl0eUNoYW5nZWQodmlzaWJsZSk7CisgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIFNsb2cuZShUQUdfV00sICJFcnJvciBkZWxpdmVyaW5nIGRpdmlkZXIgdmlzaWJpbGl0eSBjaGFuZ2VkIGV2ZW50LiIsIGUpOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIG1MaXN0ZW5lciA9IGxpc3RlbmVyOwotICAgICAgICByZWV2YWx1YXRlVmlzaWJpbGl0eSh0cnVlKTsKKyAgICAgICAgbURvY2tlZFN0YWNrTGlzdGVuZXJzLmZpbmlzaEJyb2FkY2FzdCgpOworICAgIH0KKworICAgIHZvaWQgbm90aWZ5RG9ja2VkU3RhY2tFeGlzdHNDaGFuZ2VkKGJvb2xlYW4gZXhpc3RzKSB7CisgICAgICAgIGZpbmFsIGludCBzaXplID0gbURvY2tlZFN0YWNrTGlzdGVuZXJzLmJlZ2luQnJvYWRjYXN0KCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAgICBmaW5hbCBJRG9ja2VkU3RhY2tMaXN0ZW5lciBsaXN0ZW5lciA9IG1Eb2NrZWRTdGFja0xpc3RlbmVycy5nZXRCcm9hZGNhc3RJdGVtKGkpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBsaXN0ZW5lci5vbkRvY2tlZFN0YWNrRXhpc3RzQ2hhbmdlZChleGlzdHMpOworICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBTbG9nLmUoVEFHX1dNLCAiRXJyb3IgZGVsaXZlcmluZyBkb2NrZWQgc3RhY2sgZXhpc3RzIGNoYW5nZWQgZXZlbnQuIiwgZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbURvY2tlZFN0YWNrTGlzdGVuZXJzLmZpbmlzaEJyb2FkY2FzdCgpOworICAgIH0KKworICAgIHZvaWQgcmVnaXN0ZXJEb2NrZWRTdGFja0xpc3RlbmVyKElEb2NrZWRTdGFja0xpc3RlbmVyIGxpc3RlbmVyKSB7CisgICAgICAgIG1Eb2NrZWRTdGFja0xpc3RlbmVycy5yZWdpc3RlcihsaXN0ZW5lcik7CisgICAgICAgIG5vdGlmeURvY2tlZERpdmlkZXJWaXNpYmlsaXR5Q2hhbmdlZCh3YXNWaXNpYmxlKCkpOworICAgICAgICBub3RpZnlEb2NrZWRTdGFja0V4aXN0c0NoYW5nZWQoCisgICAgICAgICAgICAgICAgbURpc3BsYXlDb250ZW50Lm1TZXJ2aWNlLm1TdGFja0lkVG9TdGFjay5nZXQoRE9DS0VEX1NUQUNLX0lEKSAhPSBudWxsKTsKKyAgICB9CisKKyAgICB2b2lkIHNldFJlc2l6ZURpbUxheWVyKGJvb2xlYW4gdmlzaWJsZSwgaW50IHRhcmdldFN0YWNrSWQsIGZsb2F0IGFscGhhKSB7CisgICAgICAgIFN1cmZhY2VDb250cm9sLm9wZW5UcmFuc2FjdGlvbigpOworICAgICAgICBUYXNrU3RhY2sgc3RhY2sgPSBtRGlzcGxheUNvbnRlbnQubVNlcnZpY2UubVN0YWNrSWRUb1N0YWNrLmdldCh0YXJnZXRTdGFja0lkKTsKKyAgICAgICAgYm9vbGVhbiB2aXNpYmxlQW5kVmFsaWQgPSB2aXNpYmxlICYmIHN0YWNrICE9IG51bGw7CisgICAgICAgIGlmICh2aXNpYmxlQW5kVmFsaWQpIHsKKyAgICAgICAgICAgIHN0YWNrLmdldERpbUJvdW5kcyhtVG1wUmVjdCk7CisgICAgICAgICAgICBpZiAobVRtcFJlY3QuaGVpZ2h0KCkgPiAwICYmIG1UbXBSZWN0LndpZHRoKCkgPiAwKSB7CisgICAgICAgICAgICAgICAgbURpbUxheWVyLnNldEJvdW5kcyhtVG1wUmVjdCk7CisgICAgICAgICAgICAgICAgbURpbUxheWVyLnNob3cobURpc3BsYXlDb250ZW50Lm1TZXJ2aWNlLm1MYXllcnNDb250cm9sbGVyLmdldFJlc2l6ZURpbUxheWVyKCksCisgICAgICAgICAgICAgICAgICAgICAgICBhbHBoYSwgMCAvKiBkdXJhdGlvbiAqLyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZpc2libGVBbmRWYWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghdmlzaWJsZUFuZFZhbGlkKSB7CisgICAgICAgICAgICBtRGltTGF5ZXIuaGlkZSgpOworICAgICAgICB9CisgICAgICAgIFN1cmZhY2VDb250cm9sLmNsb3NlVHJhbnNhY3Rpb24oKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBpc0Z1bGxzY3JlZW4oKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgRGlzcGxheUluZm8gZ2V0RGlzcGxheUluZm8oKSB7CisgICAgICAgIHJldHVybiBtRGlzcGxheUNvbnRlbnQuZ2V0RGlzcGxheUluZm8oKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBnZXREaW1Cb3VuZHMoUmVjdCBvdXRCb3VuZHMpIHsKKyAgICAgICAgLy8gVGhpcyBkaW0gbGF5ZXIgdXNlciBkb2Vzbid0IG5lZWQgdGhpcy4KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU3RyaW5nIHRvU2hvcnRTdHJpbmcoKSB7CisgICAgICAgIHJldHVybiBUQUc7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9Ecm9wUGVybWlzc2lvbnNIYW5kbGVyLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL0Ryb3BQZXJtaXNzaW9uc0hhbmRsZXIuamF2YQppbmRleCAyYWMxZWY0Li42OGNmYWFiIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL0Ryb3BQZXJtaXNzaW9uc0hhbmRsZXIuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL0Ryb3BQZXJtaXNzaW9uc0hhbmRsZXIuamF2YQpAQCAtMzcsNyArMzcsNyBAQAogCiAgICAgcHJpdmF0ZSBmaW5hbCBBcnJheUxpc3Q8VXJpPiBtVXJpcyA9IG5ldyBBcnJheUxpc3Q8VXJpPigpOwogCi0gICAgcHJpdmF0ZSBJQmluZGVyIG1QZXJtaXNzaW9uT3duZXIgPSBudWxsOworICAgIHByaXZhdGUgSUJpbmRlciBtQWN0aXZpdHlUb2tlbiA9IG51bGw7CiAKICAgICBEcm9wUGVybWlzc2lvbnNIYW5kbGVyKENsaXBEYXRhIGNsaXBEYXRhLCBpbnQgc291cmNlVWlkLCBTdHJpbmcgdGFyZ2V0UGFja2FnZSwgaW50IG1vZGUsCiAgICAgICAgICAgICBpbnQgc291cmNlVXNlcklkLCBpbnQgdGFyZ2V0VXNlcklkKSB7CkBAIC01MSwxOCArNTEsMjEgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB0YWtlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIGlmIChtUGVybWlzc2lvbk93bmVyICE9IG51bGwpIHsKKyAgICBwdWJsaWMgdm9pZCB0YWtlKElCaW5kZXIgYWN0aXZpdHlUb2tlbikgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CisgICAgICAgIGlmIChtQWN0aXZpdHlUb2tlbiAhPSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKyAgICAgICAgbUFjdGl2aXR5VG9rZW4gPSBhY3Rpdml0eVRva2VuOwogCi0gICAgICAgIG1QZXJtaXNzaW9uT3duZXIgPSBBY3Rpdml0eU1hbmFnZXJOYXRpdmUuZ2V0RGVmYXVsdCgpLm5ld1VyaVBlcm1pc3Npb25Pd25lcigiZHJvcCIpOworICAgICAgICAvLyBXaWxsIHRocm93IGlmIEFjdGl2aXR5IGlzIG5vdCBmb3VuZC4KKyAgICAgICAgSUJpbmRlciBwZXJtaXNzaW9uT3duZXIgPSBBY3Rpdml0eU1hbmFnZXJOYXRpdmUuZ2V0RGVmYXVsdCgpLgorICAgICAgICAgICAgICAgIGdldFVyaVBlcm1pc3Npb25Pd25lckZvckFjdGl2aXR5KG1BY3Rpdml0eVRva2VuKTsKIAogICAgICAgICBsb25nIG9yaWdJZCA9IEJpbmRlci5jbGVhckNhbGxpbmdJZGVudGl0eSgpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtVXJpcy5zaXplKCk7IGkrKykgewogICAgICAgICAgICAgICAgIEFjdGl2aXR5TWFuYWdlck5hdGl2ZS5nZXREZWZhdWx0KCkuZ3JhbnRVcmlQZXJtaXNzaW9uRnJvbU93bmVyKAotICAgICAgICAgICAgICAgICAgICAgICAgbVBlcm1pc3Npb25Pd25lciwgbVNvdXJjZVVpZCwgbVRhcmdldFBhY2thZ2UsIG1VcmlzLmdldChpKSwgbU1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9uT3duZXIsIG1Tb3VyY2VVaWQsIG1UYXJnZXRQYWNrYWdlLCBtVXJpcy5nZXQoaSksIG1Nb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgbVNvdXJjZVVzZXJJZCwgbVRhcmdldFVzZXJJZCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZmluYWxseSB7CkBAIC03MiwxNSArNzUsMjQgQEAKIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIHJlbGVhc2UoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgaWYgKG1QZXJtaXNzaW9uT3duZXIgPT0gbnVsbCkgeworICAgICAgICBpZiAobUFjdGl2aXR5VG9rZW4gPT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKKyAgICAgICAgSUJpbmRlciBwZXJtaXNzaW9uT3duZXIgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgcGVybWlzc2lvbk93bmVyID0gQWN0aXZpdHlNYW5hZ2VyTmF0aXZlLmdldERlZmF1bHQoKS4KKyAgICAgICAgICAgICAgICAgICAgZ2V0VXJpUGVybWlzc2lvbk93bmVyRm9yQWN0aXZpdHkobUFjdGl2aXR5VG9rZW4pOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgLy8gQWN0aXZpdHkgaXMgZGVzdHJveWVkLCBwZXJtaXNzaW9ucyBhbHJlYWR5IHJldm9rZWQuCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBtQWN0aXZpdHlUb2tlbiA9IG51bGw7CisgICAgICAgIH0KKwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1VcmlzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBBY3Rpdml0eU1hbmFnZXJOYXRpdmUuZ2V0RGVmYXVsdCgpLnJldm9rZVVyaVBlcm1pc3Npb25Gcm9tT3duZXIoCi0gICAgICAgICAgICAgICAgICAgIG1QZXJtaXNzaW9uT3duZXIsIG1VcmlzLmdldChpKSwgbU1vZGUsIG1Tb3VyY2VVc2VySWQpOworICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9uT3duZXIsIG1VcmlzLmdldChpKSwgbU1vZGUsIG1Tb3VyY2VVc2VySWQpOwogICAgICAgICB9Ci0KLSAgICAgICAgbVBlcm1pc3Npb25Pd25lciA9IG51bGw7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9UYXNrLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL1Rhc2suamF2YQppbmRleCA3MmE4MzQzLi4yMjNlMDNhIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL1Rhc2suamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL1Rhc2suamF2YQpAQCAtNjEsNiArNjEsMTAgQEAKIAogICAgIC8vIENvbnRlbnQgbGltaXRzIHJlbGF0aXZlIHRvIHRoZSBEaXNwbGF5Q29udGVudCB0aGlzIHNpdHMgaW4uCiAgICAgcHJpdmF0ZSBSZWN0IG1Cb3VuZHMgPSBuZXcgUmVjdCgpOworICAgIGZpbmFsIFJlY3QgbVByZXBhcmVkRnJvemVuQm91bmRzID0gbmV3IFJlY3QoKTsKKworICAgIC8vIEJvdW5kcyB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5zZXRzLgorICAgIHByaXZhdGUgZmluYWwgUmVjdCBtVGVtcEluc2V0Qm91bmRzID0gbmV3IFJlY3QoKTsKIAogICAgIC8vIERldmljZSByb3RhdGlvbiBhcyBvZiB0aGUgbGFzdCB0aW1lIHtAbGluayAjbUJvdW5kc30gd2FzIHNldC4KICAgICBpbnQgbVJvdGF0aW9uOwpAQCAtMTk3LDggKzIwMSw3IEBACiAgICAgYm9vbGVhbiByZW1vdmVBcHBUb2tlbihBcHBXaW5kb3dUb2tlbiB3dG9rZW4pIHsKICAgICAgICAgYm9vbGVhbiByZW1vdmVkID0gbUFwcFRva2Vucy5yZW1vdmUod3Rva2VuKTsKICAgICAgICAgaWYgKG1BcHBUb2tlbnMuc2l6ZSgpID09IDApIHsKLSAgICAgICAgICAgIEV2ZW50TG9nLndyaXRlRXZlbnQoRXZlbnRMb2dUYWdzLldNX1RBU0tfUkVNT1ZFRCwgbVRhc2tJZCwKLSAgICAgICAgICAgICAgICAgICAgInJlbW92ZUFwcFRva2VuOiBsYXN0IHRva2VuIik7CisgICAgICAgICAgICBFdmVudExvZy53cml0ZUV2ZW50KEV2ZW50TG9nVGFncy5XTV9UQVNLX1JFTU9WRUQsIG1UYXNrSWQsICJyZW1vdmVBcHBUb2tlbjogbGFzdCB0b2tlbiIpOwogICAgICAgICAgICAgaWYgKG1EZWZlclJlbW92YWwpIHsKICAgICAgICAgICAgICAgICByZW1vdmVMb2NrZWQoKTsKICAgICAgICAgICAgIH0KQEAgLTI2Nyw2ICsyNzAsMjYgQEAKICAgICAgICAgcmV0dXJuIGJvdW5kc0NoYW5nZTsKICAgICB9CiAKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBib3VuZHMgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluc2V0cy4gU2VlCisgICAgICoge0BsaW5rIGFuZHJvaWQuYXBwLklBY3Rpdml0eU1hbmFnZXIjcmVzaXplRG9ja2VkU3RhY2t9IHdoeSB0aGlzIGlzIG5lZWRlZC4KKyAgICAgKi8KKyAgICB2b2lkIHNldFRlbXBJbnNldEJvdW5kcyhSZWN0IHRlbXBJbnNldEJvdW5kcykgeworICAgICAgICBpZiAodGVtcEluc2V0Qm91bmRzICE9IG51bGwpIHsKKyAgICAgICAgICAgIG1UZW1wSW5zZXRCb3VuZHMuc2V0KHRlbXBJbnNldEJvdW5kcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtVGVtcEluc2V0Qm91bmRzLnNldEVtcHR5KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBib3VuZHMgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluc2V0cy4gU2VlCisgICAgICoge0BsaW5rIGFuZHJvaWQuYXBwLklBY3Rpdml0eU1hbmFnZXIjcmVzaXplRG9ja2VkU3RhY2t9IHdoeSB0aGlzIGlzIG5lZWRlZC4KKyAgICAgKi8KKyAgICB2b2lkIGdldFRlbXBJbnNldEJvdW5kcyhSZWN0IG91dCkgeworICAgICAgICBvdXQuc2V0KG1UZW1wSW5zZXRCb3VuZHMpOworICAgIH0KKwogICAgIHZvaWQgc2V0UmVzaXplYWJsZShib29sZWFuIHJlc2l6ZWFibGUpIHsKICAgICAgICAgbVJlc2l6ZWFibGUgPSByZXNpemVhYmxlOwogICAgIH0KQEAgLTI4NSwxMCArMzA4LDIwIEBACiAgICAgICAgIH0KICAgICAgICAgaWYgKChib3VuZHNDaGFuZ2VkICYgQk9VTkRTX0NIQU5HRV9TSVpFKSA9PSBCT1VORFNfQ0hBTkdFX1NJWkUpIHsKICAgICAgICAgICAgIHJlc2l6ZVdpbmRvd3MoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1vdmVXaW5kb3dzKCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCisgICAgLyoqCisgICAgICogUHJlcGFyZXMgdGhlIHRhc2sgYm91bmRzIHRvIGJlIGZyb3plbiB3aXRoIHRoZSBjdXJyZW50IHNpemUuIFNlZQorICAgICAqIHtAbGluayBBcHBXaW5kb3dUb2tlbiNmcmVlemVCb3VuZHN9LgorICAgICAqLworICAgIHZvaWQgcHJlcGFyZUZyZWV6aW5nQm91bmRzKCkgeworICAgICAgICBtUHJlcGFyZWRGcm96ZW5Cb3VuZHMuc2V0KG1Cb3VuZHMpOworICAgIH0KKwogICAgIGJvb2xlYW4gc2Nyb2xsTG9ja2VkKFJlY3QgYm91bmRzKSB7CiAgICAgICAgIC8vIHNoaWZ0IHRoZSB0YXNrIGJvdW5kIGlmIGl0IGRvZXNuJ3QgZnVsbHkgY292ZXIgdGhlIHN0YWNrIGFyZWEKICAgICAgICAgbVN0YWNrLmdldERpbUJvdW5kcyhtVG1wUmVjdCk7CkBAIC0zNTUsNyArMzg4LDYgQEAKICAgICAgICAgbVN0YWNrLmdldERpc3BsYXlDb250ZW50KCkuZ2V0TG9naWNhbERpc3BsYXlSZWN0KG91dCk7CiAgICAgfQogCi0KICAgICAvKioKICAgICAgKiBDYWxjdWxhdGUgdGhlIG1heGltdW0gdmlzaWJsZSBhcmVhIG9mIHRoaXMgdGFzay4gSWYgdGhlIHRhc2sgaGFzIG9ubHkgb25lIGFwcCwKICAgICAgKiB0aGUgcmVzdWx0IHdpbGwgYmUgdmlzaWJsZSBmcmFtZSBvZiB0aGF0IGFwcC4gSWYgdGhlIHRhc2sgaGFzIG1vcmUgdGhhbiBvbmUgYXBwcywKQEAgLTQ2MywxMyArNDk1LDI0IEBACiAgICAgICAgICAgICBmb3IgKGludCB3aW5OZHggPSB3aW5kb3dzLnNpemUoKSAtIDE7IHdpbk5keCA+PSAwOyAtLXdpbk5keCkgewogICAgICAgICAgICAgICAgIGZpbmFsIFdpbmRvd1N0YXRlIHdpbiA9IHdpbmRvd3MuZ2V0KHdpbk5keCk7CiAgICAgICAgICAgICAgICAgaWYgKCFyZXNpemluZ1dpbmRvd3MuY29udGFpbnMod2luKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUdfUkVTSVpFKSBTbG9nLmQoVEFHX1dNLCAic2V0Qm91bmRzOiBSZXNpemluZyAiICsgd2luKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHX1JFU0laRSkgU2xvZy5kKFRBR19XTSwgInJlc2l6ZVdpbmRvd3M6IFJlc2l6aW5nICIgKyB3aW4pOwogICAgICAgICAgICAgICAgICAgICByZXNpemluZ1dpbmRvd3MuYWRkKHdpbik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCisgICAgdm9pZCBtb3ZlV2luZG93cygpIHsKKyAgICAgICAgZm9yIChpbnQgYWN0aXZpdHlOZHggPSBtQXBwVG9rZW5zLnNpemUoKSAtIDE7IGFjdGl2aXR5TmR4ID49IDA7IC0tYWN0aXZpdHlOZHgpIHsKKyAgICAgICAgICAgIGZpbmFsIEFycmF5TGlzdDxXaW5kb3dTdGF0ZT4gd2luZG93cyA9IG1BcHBUb2tlbnMuZ2V0KGFjdGl2aXR5TmR4KS5hbGxBcHBXaW5kb3dzOworICAgICAgICAgICAgZm9yIChpbnQgd2luTmR4ID0gd2luZG93cy5zaXplKCkgLSAxOyB3aW5OZHggPj0gMDsgLS13aW5OZHgpIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBXaW5kb3dTdGF0ZSB3aW4gPSB3aW5kb3dzLmdldCh3aW5OZHgpOworICAgICAgICAgICAgICAgIGlmIChERUJVR19SRVNJWkUpIFNsb2cuZChUQUdfV00sICJtb3ZlV2luZG93czogTW92aW5nICIgKyB3aW4pOworICAgICAgICAgICAgICAgIHdpbi5tTW92ZWRCeVJlc2l6ZSA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKICAgICAvKioKICAgICAgKiBDYW5jZWxzIGFueSBydW5uaW5nIGFwcCB0cmFuc2l0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlIHRhc2suCiAgICAgICovCkBAIC01NjYsNSArNjA5LDYgQEAKICAgICAgICAgICAgIHB3LnByaW50KHByZWZpeCArIHByZWZpeCk7IHB3LnByaW50KCJtQm91bmRzPSIpOyBwdy5wcmludGxuKG1Cb3VuZHMudG9TaG9ydFN0cmluZygpKTsKICAgICAgICAgICAgIHB3LnByaW50KHByZWZpeCArIHByZWZpeCk7IHB3LnByaW50KCJtZHI9Iik7IHB3LnByaW50bG4obURlZmVyUmVtb3ZhbCk7CiAgICAgICAgICAgICBwdy5wcmludChwcmVmaXggKyBwcmVmaXgpOyBwdy5wcmludCgiYXBwVG9rZW5zPSIpOyBwdy5wcmludGxuKG1BcHBUb2tlbnMpOworICAgICAgICAgICAgcHcucHJpbnQocHJlZml4ICsgcHJlZml4KTsgcHcucHJpbnQoIm1UZW1wSW5zZXRCb3VuZHM9Iik7IHB3LnByaW50bG4obVRlbXBJbnNldEJvdW5kcyk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9UYXNrU3RhY2suamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vVGFza1N0YWNrLmphdmEKaW5kZXggYjk2MTg3OS4uNjdkZWJlNiAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9UYXNrU3RhY2suamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL1Rhc2tTdGFjay5qYXZhCkBAIC0xMTQsNyArMTE0LDggQEAKICAgICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHN0YWNrIGJvdW5kcyB3YXMgY2hhbmdlZC4KICAgICAgKiAqLwogICAgIGJvb2xlYW4gc2V0Qm91bmRzKAotICAgICAgICAgICAgUmVjdCBzdGFja0JvdW5kcywgU3BhcnNlQXJyYXk8Q29uZmlndXJhdGlvbj4gY29uZmlncywgU3BhcnNlQXJyYXk8UmVjdD4gdGFza0JvdW5kcykgeworICAgICAgICAgICAgUmVjdCBzdGFja0JvdW5kcywgU3BhcnNlQXJyYXk8Q29uZmlndXJhdGlvbj4gY29uZmlncywgU3BhcnNlQXJyYXk8UmVjdD4gdGFza0JvdW5kcywKKyAgICAgICAgICAgIFNwYXJzZUFycmF5PFJlY3Q+IHRhc2tUZW1wSW5zZXRCb3VuZHMpIHsKICAgICAgICAgaWYgKCFzZXRCb3VuZHMoc3RhY2tCb3VuZHMpKSB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTEzNiw2ICsxMzcsOSBAQAogICAgICAgICAgICAgICAgICAgICB0YXNrLnNjcm9sbExvY2tlZChtVG1wUmVjdCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgdGFzay5zZXRCb3VuZHMoYm91bmRzLCBjb25maWcpOworICAgICAgICAgICAgICAgICAgICB0YXNrLnNldFRlbXBJbnNldEJvdW5kcygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrVGVtcEluc2V0Qm91bmRzICE9IG51bGwgPyB0YXNrVGVtcEluc2V0Qm91bmRzLmdldCh0YXNrLm1UYXNrSWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG51bGwpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgU2xvZy53dGYoVEFHX1dNLCAiTm8gY29uZmlnIGZvciB0YXNrOiAiICsgdGFzayArICIsIGlzIHRoZXJlIGEgbWlzbWF0Y2ggd2l0aCBBTT8iKTsKQEAgLTE0NCw2ICsxNDgsMTMgQEAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCisgICAgdm9pZCBwcmVwYXJlRnJlZXppbmdUYXNrQm91bmRzKCkgeworICAgICAgICBmb3IgKGludCB0YXNrTmR4ID0gbVRhc2tzLnNpemUoKSAtIDE7IHRhc2tOZHggPj0gMDsgLS10YXNrTmR4KSB7CisgICAgICAgICAgICBmaW5hbCBUYXNrIHRhc2sgPSBtVGFza3MuZ2V0KHRhc2tOZHgpOworICAgICAgICAgICAgdGFzay5wcmVwYXJlRnJlZXppbmdCb3VuZHMoKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGJvb2xlYW4gaXNGdWxsc2NyZWVuQm91bmRzKFJlY3QgYm91bmRzKSB7CiAgICAgICAgIGlmIChtRGlzcGxheUNvbnRlbnQgPT0gbnVsbCB8fCBib3VuZHMgPT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL1Rhc2tUYXBQb2ludGVyRXZlbnRMaXN0ZW5lci5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9UYXNrVGFwUG9pbnRlckV2ZW50TGlzdGVuZXIuamF2YQppbmRleCBhZjEwOWQ0Li45ODAzM2Y2IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL1Rhc2tUYXBQb2ludGVyRXZlbnRMaXN0ZW5lci5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vVGFza1RhcFBvaW50ZXJFdmVudExpc3RlbmVyLmphdmEKQEAgLTIwLDYgKzIwLDcgQEAKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlZ2lvbjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuRGlzcGxheUluZm87CiBpbXBvcnQgYW5kcm9pZC52aWV3Lkdlc3R1cmVEZXRlY3RvcjsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuSW5wdXREZXZpY2U7CiBpbXBvcnQgYW5kcm9pZC52aWV3Lk1vdGlvbkV2ZW50OwogaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyUG9saWN5LlBvaW50ZXJFdmVudExpc3RlbmVyOwogCkBAIC0xMDgsNyArMTA5LDggQEAKICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgeCA9IChpbnQpIG1vdGlvbkV2ZW50LmdldFgoKTsKICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgeSA9IChpbnQpIG1vdGlvbkV2ZW50LmdldFkoKTsKICAgICAgICAgICAgICAgICBmaW5hbCBUYXNrIHRhc2sgPSBtRGlzcGxheUNvbnRlbnQuZmluZFRhc2tGb3JDb250cm9sUG9pbnQoeCwgeSk7Ci0gICAgICAgICAgICAgICAgaWYgKHRhc2sgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIElucHV0RGV2aWNlIGlucHV0RGV2aWNlID0gbW90aW9uRXZlbnQuZ2V0RGV2aWNlKCk7CisgICAgICAgICAgICAgICAgaWYgKHRhc2sgPT0gbnVsbCB8fCBpbnB1dERldmljZSA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIG1Qb2ludGVySWNvblNoYXBlID0gU1RZTEVfTk9UX1NQRUNJRklFRDsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTMwLDcgKzEzMiw3IEBACiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgaWYgKG1Qb2ludGVySWNvblNoYXBlICE9IGljb25TaGFwZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgbVBvaW50ZXJJY29uU2hhcGUgPSBpY29uU2hhcGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtb3Rpb25FdmVudC5nZXREZXZpY2UoKS5zZXRQb2ludGVyU2hhcGUoaWNvblNoYXBlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0RGV2aWNlLnNldFBvaW50ZXJTaGFwZShpY29uU2hhcGUpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgbVBvaW50ZXJJY29uU2hhcGUgPSBTVFlMRV9OT1RfU1BFQ0lGSUVEOwpAQCAtMTM5LDcgKzE0MSwxMCBAQAogCiAgICAgICAgICAgICBjYXNlIE1vdGlvbkV2ZW50LkFDVElPTl9IT1ZFUl9FWElUOgogICAgICAgICAgICAgICAgIG1Qb2ludGVySWNvblNoYXBlID0gU1RZTEVfTk9UX1NQRUNJRklFRDsKLSAgICAgICAgICAgICAgICBtb3Rpb25FdmVudC5nZXREZXZpY2UoKS5zZXRQb2ludGVyU2hhcGUoU1RZTEVfREVGQVVMVCk7CisgICAgICAgICAgICAgICAgSW5wdXREZXZpY2UgaW5wdXREZXZpY2UgPSBtb3Rpb25FdmVudC5nZXREZXZpY2UoKTsKKyAgICAgICAgICAgICAgICBpZiAoaW5wdXREZXZpY2UgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBpbnB1dERldmljZS5zZXRQb2ludGVyU2hhcGUoU1RZTEVfREVGQVVMVCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIE1vdGlvbkV2ZW50LkFDVElPTl9VUDoKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vV2luZG93QW5pbWF0b3IuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vV2luZG93QW5pbWF0b3IuamF2YQppbmRleCA2YTUxODNmLi42MmQ0ZjM2IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL1dpbmRvd0FuaW1hdG9yLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9XaW5kb3dBbmltYXRvci5qYXZhCkBAIC03ODIsNyArNzgyLDcgQEAKICAgICAgICAgU3VyZmFjZUNvbnRyb2wub3BlblRyYW5zYWN0aW9uKCk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBmb3IgKGludCBpID0gbVNlcnZpY2UubURpc3BsYXlDb250ZW50cy5zaXplKCkgLSAxOyBpID49IDA7IGktLSkgewotICAgICAgICAgICAgICAgIERpc3BsYXlDb250ZW50IGRpc3BsYXkgPSBtU2VydmljZS5tRGlzcGxheUNvbnRlbnRzLmdldChpKTsKKyAgICAgICAgICAgICAgICBEaXNwbGF5Q29udGVudCBkaXNwbGF5ID0gbVNlcnZpY2UubURpc3BsYXlDb250ZW50cy52YWx1ZUF0KGkpOwogICAgICAgICAgICAgICAgIGZpbmFsIFdpbmRvd0xpc3Qgd2luZG93cyA9IG1TZXJ2aWNlLmdldFdpbmRvd0xpc3RMb2NrZWQoZGlzcGxheS5nZXREaXNwbGF5SWQoKSk7CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IHdpbmRvd3Muc2l6ZSgpIC0gMTsgaiA+PSAwOyBqLS0pIHsKICAgICAgICAgICAgICAgICAgICAgd2luZG93cy5nZXQoaikubWF5YmVSZW1vdmVSZXBsYWNlZFdpbmRvdygpOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9XaW5kb3dMYXllcnNDb250cm9sbGVyLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL1dpbmRvd0xheWVyc0NvbnRyb2xsZXIuamF2YQppbmRleCBmYzdjNDQ4Li4yY2YyNjE4IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL1dpbmRvd0xheWVyc0NvbnRyb2xsZXIuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL1dpbmRvd0xheWVyc0NvbnRyb2xsZXIuamF2YQpAQCAtMSw5ICsxLDIwIEBACi1wYWNrYWdlIGNvbS5hbmRyb2lkLnNlcnZlci53bTsKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogCi1pbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5UWVBFX0RPQ0tfRElWSURFUjsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19MQVlFUlM7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuVEFHX1dNOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlclNlcnZpY2UuV0lORE9XX0xBWUVSX01VTFRJUExJRVI7CitwYWNrYWdlIGNvbS5hbmRyb2lkLnNlcnZlci53bTsKIAogaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5TdGFja0lkOwogaW1wb3J0IGFuZHJvaWQudXRpbC5TbG9nOwpAQCAtMTEsNiArMjIsMTEgQEAKIAogaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CiAKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLlRZUEVfRE9DS19ESVZJREVSOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX0xBWUVSUzsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJEZWJ1Z0NvbmZpZy5UQUdfV007CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyU2VydmljZS5XSU5ET1dfTEFZRVJfTVVMVElQTElFUjsKKwogLyoqCiAgKiBDb250cm9sbGVyIGZvciBhc3NpZ25pbmcgbGF5ZXJzIHRvIHdpbmRvd3Mgb24gdGhlIGRpc3BsYXkuCiAgKgpAQCAtNDIsNyArNTgsNiBAQAogICAgIHByaXZhdGUgV2luZG93U3RhdGUgbVBpbm5lZFdpbmRvdyA9IG51bGw7CiAgICAgcHJpdmF0ZSBXaW5kb3dTdGF0ZSBtRG9ja2VkV2luZG93ID0gbnVsbDsKICAgICBwcml2YXRlIFdpbmRvd1N0YXRlIG1Eb2NrRGl2aWRlciA9IG51bGw7Ci0gICAgcHJpdmF0ZSBXaW5kb3dTdGF0ZSBtSW1lV2luZG93ID0gbnVsbDsKICAgICBwcml2YXRlIFdpbmRvd1N0YXRlIG1SZXBsYWNpbmdXaW5kb3cgPSBudWxsOwogCiAgICAgZmluYWwgdm9pZCBhc3NpZ25MYXllcnNMb2NrZWQoV2luZG93TGlzdCB3aW5kb3dzKSB7CkBAIC0xMTYsNyArMTMxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBhbmltIGxheWVyOiAiICsgY2hpbGRXaW5kb3cubVdpbkFuaW1hdG9yLm1BbmltTGF5ZXIpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGZvciAoaW50IGkgPSBtU2VydmljZS5tSW5wdXRNZXRob2REaWFsb2dzLnNpemUoKTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IG1TZXJ2aWNlLm1JbnB1dE1ldGhvZERpYWxvZ3Muc2l6ZSgpIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgICAgICAgIGZpbmFsIFdpbmRvd1N0YXRlIGRpYWxvZyA9IG1TZXJ2aWNlLm1JbnB1dE1ldGhvZERpYWxvZ3MuZ2V0KGkpOwogICAgICAgICAgICAgZGlhbG9nLm1XaW5BbmltYXRvci5tQW5pbUxheWVyID0gZGlhbG9nLm1MYXllciArIGFkajsKICAgICAgICAgICAgIGlmIChERUJVR19MQVlFUlMpIFNsb2cudihUQUdfV00sICJJTSB3aW4gIiArIGltdwpAQCAtMTMzLDYgKzE0OCwxNCBAQAogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIFRoZSBsYXllciB1c2VkIGZvciBkaW1taW5nIHRoZSBhcHBzIHdoZW4gZGlzbWlzc2luZyBkb2NrZWQvZnVsbHNjcmVlbiBzdGFjay4gSnVzdAorICAgICAqICAgICAgICAgYWJvdmUgYWxsIGFwcGxpY2F0aW9uIHN1cmZhY2VzLgorICAgICAqLworICAgIGludCBnZXRSZXNpemVEaW1MYXllcigpIHsKKyAgICAgICAgcmV0dXJuIG1Eb2NrRGl2aWRlci5tTGF5ZXIgLSAxOworICAgIH0KKwogICAgIHByaXZhdGUgdm9pZCBsb2dEZWJ1Z0xheWVycyhXaW5kb3dMaXN0IHdpbmRvd3MpIHsKICAgICAgICAgZm9yIChpbnQgaSA9IDAsIG4gPSB3aW5kb3dzLnNpemUoKTsgaSA8IG47IGkrKykgewogICAgICAgICAgICAgZmluYWwgV2luZG93U3RhdGUgdyA9IHdpbmRvd3MuZ2V0KGkpOwpAQCAtMTQ2LDE5ICsxNjksMTkgQEAKIAogICAgIHByaXZhdGUgdm9pZCBjbGVhcigpIHsKICAgICAgICAgbUhpZ2hlc3RBcHBsaWNhdGlvbkxheWVyID0gMDsKLSAgICAgICAgbUltZVdpbmRvdyA9IG51bGw7CiAgICAgICAgIG1QaW5uZWRXaW5kb3cgPSBudWxsOwogICAgICAgICBtRG9ja2VkV2luZG93ID0gbnVsbDsKICAgICAgICAgbURvY2tEaXZpZGVyID0gbnVsbDsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgY29sbGVjdFNwZWNpYWxXaW5kb3dzKFdpbmRvd1N0YXRlIHcpIHsKLSAgICAgICAgaWYgKHcubUlzSW1XaW5kb3cpIHsKLSAgICAgICAgICAgIG1JbWVXaW5kb3cgPSB3OwotICAgICAgICB9IGVsc2UgaWYgKHcubUF0dHJzLnR5cGUgPT0gVFlQRV9ET0NLX0RJVklERVIpIHsKKyAgICAgICAgaWYgKHcubUF0dHJzLnR5cGUgPT0gVFlQRV9ET0NLX0RJVklERVIpIHsKICAgICAgICAgICAgIG1Eb2NrRGl2aWRlciA9IHc7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBmaW5hbCBUYXNrU3RhY2sgc3RhY2sgPSB3LmdldFN0YWNrKCk7CisgICAgICAgICAgICBpZiAoc3RhY2sgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChzdGFjay5tU3RhY2tJZCA9PSBTdGFja0lkLlBJTk5FRF9TVEFDS19JRCkgewogICAgICAgICAgICAgICAgIG1QaW5uZWRXaW5kb3cgPSB3OwogICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFjay5tU3RhY2tJZCA9PSBTdGFja0lkLkRPQ0tFRF9TVEFDS19JRCkgewpAQCAtMTcyLDEzICsxOTUsMTcgQEAKICAgICAgICAgLy8gRm9yIHBpbm5lZCBhbmQgZG9ja2VkIHN0YWNrIHdpbmRvdywgd2Ugd2FudCB0byBtYWtlIHRoZW0gYWJvdmUgb3RoZXIgd2luZG93cwogICAgICAgICAvLyBhbHNvIHdoZW4gdGhlc2Ugd2luZG93cyBhcmUgYW5pbWF0aW5nLgogICAgICAgICBsYXllciA9IGFzc2lnbkFuZEluY3JlYXNlTGF5ZXJJZk5lZWRlZChtRG9ja2VkV2luZG93LCBsYXllcik7CisKKyAgICAgICAgLy8gTGVhdmUgc29tZSBzcGFjZSBoZXJlIHNvIHRoZSBkaW0gbGF5ZXIgd2hpbGUgZGlzbWlzc2luZyBkb2NrZWQvZnVsbHNjcmVlbiBzdGFjayBoYXMgc3BhY2UKKyAgICAgICAgLy8gYmVsb3cgdGhlIGRpdmlkZXIgYnV0IGFib3ZlIHRoZSBhcHAgd2luZG93cy4gSXQgbmVlZHMgdG8gYmUgYmVsb3cgdGhlIGRpdmlkZXIgaW4gYmVjYXVzZQorICAgICAgICAvLyB0aGUgZGl2aWRlciBzb21ldGltZXMgb3ZlcmxhcHMgdGhlIGFwcCB3aW5kb3dzLgorICAgICAgICBsYXllcisrOwogICAgICAgICBsYXllciA9IGFzc2lnbkFuZEluY3JlYXNlTGF5ZXJJZk5lZWRlZChtRG9ja0RpdmlkZXIsIGxheWVyKTsKICAgICAgICAgLy8gV2Uga25vdyB0aGF0IHdlIHdpbGwgYmUgYW5pbWF0aW5nIGEgcmVsYXVuY2hpbmcgd2luZG93IGluIHRoZSBuZWFyIGZ1dHVyZSwKICAgICAgICAgLy8gd2hpY2ggd2lsbCByZWNlaXZlIGEgei1vcmRlciBpbmNyZWFzZS4gV2Ugd2FudCB0aGUgcmVwbGFjZWQgd2luZG93IHRvCiAgICAgICAgIC8vIGltbWVkaWF0ZWx5IHJlY2VpdmUgdGhlIHNhbWUgdHJlYXRtZW50LCBlLmcuIHRvIGJlIGFib3ZlIHRoZSBkb2NrIGRpdmlkZXIuCiAgICAgICAgIGxheWVyID0gYXNzaWduQW5kSW5jcmVhc2VMYXllcklmTmVlZGVkKG1SZXBsYWNpbmdXaW5kb3csIGxheWVyKTsKICAgICAgICAgbGF5ZXIgPSBhc3NpZ25BbmRJbmNyZWFzZUxheWVySWZOZWVkZWQobVBpbm5lZFdpbmRvdywgbGF5ZXIpOwotICAgICAgICBsYXllciA9IGFzc2lnbkFuZEluY3JlYXNlTGF5ZXJJZk5lZWRlZChtSW1lV2luZG93LCBsYXllcik7CiAgICAgfQogCiAgICAgcHJpdmF0ZSBpbnQgYXNzaWduQW5kSW5jcmVhc2VMYXllcklmTmVlZGVkKFdpbmRvd1N0YXRlIHdpbiwgaW50IGxheWVyKSB7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL1dpbmRvd01hbmFnZXJEZWJ1Z0NvbmZpZy5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuamF2YQppbmRleCA4NDUxMDBkLi40YzNhNDIyIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL1dpbmRvd01hbmFnZXJEZWJ1Z0NvbmZpZy5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLmphdmEKQEAgLTM1LDcgKzM1LDcgQEAKIAogICAgIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHX1JFU0laRSA9IGZhbHNlOwogICAgIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0gICAgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUdfQUREX1JFTU9WRSA9IGZhbHNlOworICAgIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHX0FERF9SRU1PVkUgPSB0cnVlOwogICAgIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHX0ZPQ1VTID0gdHJ1ZTsKICAgICBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVR19GT0NVU19MSUdIVCA9IERFQlVHX0ZPQ1VTIHx8IGZhbHNlOwogICAgIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHX0FOSU0gPSBmYWxzZTsKQEAgLTUwLDggKzUwLDggQEAKICAgICBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVR19PUklFTlRBVElPTiA9IGZhbHNlOwogICAgIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHX0FQUF9PUklFTlRBVElPTiA9IGZhbHNlOwogICAgIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHX0NPTkZJR1VSQVRJT04gPSBmYWxzZTsKLSAgICBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVR19BUFBfVFJBTlNJVElPTlMgPSBmYWxzZTsKLSAgICBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVR19TVEFSVElOR19XSU5ET1cgPSBmYWxzZTsKKyAgICBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVR19BUFBfVFJBTlNJVElPTlMgPSB0cnVlOworICAgIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHX1NUQVJUSU5HX1dJTkRPVyA9IHRydWU7CiAgICAgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUdfV0FMTFBBUEVSID0gZmFsc2U7CiAgICAgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUdfV0FMTFBBUEVSX0xJR0hUID0gZmFsc2UgfHwgREVCVUdfV0FMTFBBUEVSOwogICAgIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHX0RSQUcgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vV2luZG93TWFuYWdlclNlcnZpY2UuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vV2luZG93TWFuYWdlclNlcnZpY2UuamF2YQppbmRleCA2Mzg1Y2FhLi5mNmU2MmY2IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL1dpbmRvd01hbmFnZXJTZXJ2aWNlLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9XaW5kb3dNYW5hZ2VyU2VydmljZS5qYXZhCkBAIC0xNiw4MSArMTYsMTEgQEAKIAogcGFja2FnZSBjb20uYW5kcm9pZC5zZXJ2ZXIud207CiAKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLkRPQ0tFRF9TVEFDS19DUkVBVEVfTU9ERV9UT1BfT1JfTEVGVDsKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlN0YWNrSWQuRE9DS0VEX1NUQUNLX0lEOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuU3RhY2tJZC5GUkVFRk9STV9XT1JLU1BBQ0VfU1RBQ0tfSUQ7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLlN0YXR1c0Jhck1hbmFnZXIuRElTQUJMRV9NQVNLOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQucG0uQWN0aXZpdHlJbmZvLlNDUkVFTl9PUklFTlRBVElPTl9CRUhJTkQ7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5wbS5BY3Rpdml0eUluZm8uU0NSRUVOX09SSUVOVEFUSU9OX1VOU1BFQ0lGSUVEOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5ET0NLRURfSU5WQUxJRDsKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLkZJUlNUX0FQUExJQ0FUSU9OX1dJTkRPVzsKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLkZJUlNUX1NVQl9XSU5ET1c7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5GTEFHX0FMVF9GT0NVU0FCTEVfSU07Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5GTEFHX05PVF9GT0NVU0FCTEU7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5GTEFHX1NFQ1VSRTsKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLkZMQUdfU0hPV19XQUxMUEFQRVI7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5JTlBVVF9GRUFUVVJFX05PX0lOUFVUX0NIQU5ORUw7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5MQVNUX0FQUExJQ0FUSU9OX1dJTkRPVzsKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLkxBU1RfU1VCX1dJTkRPVzsKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLlBSSVZBVEVfRkxBR19DT01QQVRJQkxFX1dJTkRPVzsKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLlRZUEVfQUNDRVNTSUJJTElUWV9PVkVSTEFZOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuVFlQRV9BUFBMSUNBVElPTjsKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLlRZUEVfQVBQTElDQVRJT05fU1RBUlRJTkc7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5UWVBFX0JBU0VfQVBQTElDQVRJT047Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5UWVBFX0JPT1RfUFJPR1JFU1M7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5UWVBFX0RPQ0tfRElWSURFUjsKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLlRZUEVfRFJFQU07Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5UWVBFX0lOUFVUX01FVEhPRDsKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLlRZUEVfSU5QVVRfTUVUSE9EX0RJQUxPRzsKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLlRZUEVfTkFWSUdBVElPTl9CQVI7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5UWVBFX1BSSVZBVEVfUFJFU0VOVEFUSU9OOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuVFlQRV9RU19ESUFMT0c7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5UWVBFX1NUQVRVU19CQVI7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5UWVBFX1ZPSUNFX0lOVEVSQUNUSU9OOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuVFlQRV9XQUxMUEFQRVI7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyR2xvYmFsLlJFTEFZT1VUX0RFRkVSX1NVUkZBQ0VfREVTVFJPWTsKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXJHbG9iYWwuUkVMQVlPVVRfUkVTX1NVUkZBQ0VfQ0hBTkdFRDsKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXJQb2xpY3kuRklOSVNIX0xBWU9VVF9SRURPX1dBTExQQVBFUjsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLkFwcFdpbmRvd0FuaW1hdG9yLlBST0xPTkdfQU5JTUFUSU9OX0FUX0VORDsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLkFwcFdpbmRvd0FuaW1hdG9yLlBST0xPTkdfQU5JTUFUSU9OX0FUX1NUQVJUOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX0FERF9SRU1PVkU7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfQU5JTTsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19BUFBfT1JJRU5UQVRJT047Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfQVBQX1RSQU5TSVRJT05TOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX0JPT1Q7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfQ09ORklHVVJBVElPTjsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19ESVNQTEFZOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX0RSQUc7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfRk9DVVM7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfRk9DVVNfTElHSFQ7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfSU5QVVRfTUVUSE9EOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX0tFWUdVQVJEOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX0xBWU9VVDsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19PUklFTlRBVElPTjsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19SRVNJWkU7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfU0NSRUVOU0hPVDsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19TQ1JFRU5fT047Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfU1RBQ0s7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfU1RBUlRJTkdfV0lORE9XOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX1NVUkZBQ0VfVFJBQ0U7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfVEFTS19QT1NJVElPTklORzsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19UT0tFTl9NT1ZFTUVOVDsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19WSVNJQklMSVRZOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX1dBTExQQVBFUl9MSUdIVDsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19XSU5ET1dfTU9WRU1FTlQ7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfV0lORE9XX1RSQUNFOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLkhJREVfU1RBQ0tfQ1JBV0xTOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLlNIT1dfTElHSFRfVFJBTlNBQ1RJT05TOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLlNIT1dfU1VSRkFDRV9BTExPQzsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJEZWJ1Z0NvbmZpZy5TSE9XX1RSQU5TQUNUSU9OUzsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJEZWJ1Z0NvbmZpZy5TSE9XX1ZFUkJPU0VfVFJBTlNBQ1RJT05TOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLlRBR19XTTsKLQogaW1wb3J0IGFuZHJvaWQuTWFuaWZlc3Q7CiBpbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uVmFsdWVBbmltYXRvcjsKIGltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTm9uTnVsbDsKIGltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTnVsbGFibGU7CitpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlN0YWNrSWQ7CiBpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyTmF0aXZlOwogaW1wb3J0IGFuZHJvaWQuYXBwLkFwcE9wc01hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5hcHAuSUFjdGl2aXR5TWFuYWdlcjsKQEAgLTEyNyw2ICs1Nyw3IEBACiBpbXBvcnQgYW5kcm9pZC5vcy5Qb3dlck1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5Qb3dlck1hbmFnZXJJbnRlcm5hbDsKIGltcG9ydCBhbmRyb2lkLm9zLlByb2Nlc3M7CitpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVDYWxsYmFja0xpc3Q7CiBpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgYW5kcm9pZC5vcy5TZXJ2aWNlTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLm9zLlN0cmljdE1vZGU7CkBAIC0xNTQsNyArODUsNyBAQAogaW1wb3J0IGFuZHJvaWQudmlldy5HcmF2aXR5OwogaW1wb3J0IGFuZHJvaWQudmlldy5JQXBwVHJhbnNpdGlvbkFuaW1hdGlvblNwZWNzRnV0dXJlOwogaW1wb3J0IGFuZHJvaWQudmlldy5JQXBwbGljYXRpb25Ub2tlbjsKLWltcG9ydCBhbmRyb2lkLnZpZXcuSURvY2tEaXZpZGVyVmlzaWJpbGl0eUxpc3RlbmVyOworaW1wb3J0IGFuZHJvaWQudmlldy5JRG9ja2VkU3RhY2tMaXN0ZW5lcjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuSUlucHV0RmlsdGVyOwogaW1wb3J0IGFuZHJvaWQudmlldy5JT25LZXlndWFyZEV4aXRSZXN1bHQ7CiBpbXBvcnQgYW5kcm9pZC52aWV3LklSb3RhdGlvbldhdGNoZXI7CkBAIC0yMjQsOSArMTU1LDgzIEBACiBpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogCitpbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5ET0NLRURfU1RBQ0tfQ1JFQVRFX01PREVfVE9QX09SX0xFRlQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5TdGFja0lkLkRPQ0tFRF9TVEFDS19JRDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlN0YWNrSWQuRlJFRUZPUk1fV09SS1NQQUNFX1NUQUNLX0lEOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5TdGF0dXNCYXJNYW5hZ2VyLkRJU0FCTEVfTUFTSzsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LnBtLkFjdGl2aXR5SW5mby5TQ1JFRU5fT1JJRU5UQVRJT05fQkVISU5EOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQucG0uQWN0aXZpdHlJbmZvLlNDUkVFTl9PUklFTlRBVElPTl9VTlNQRUNJRklFRDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuRE9DS0VEX0lOVkFMSUQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5GSVJTVF9BUFBMSUNBVElPTl9XSU5ET1c7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5GSVJTVF9TVUJfV0lORE9XOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuRkxBR19BTFRfRk9DVVNBQkxFX0lNOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuRkxBR19OT1RfRk9DVVNBQkxFOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuRkxBR19TRUNVUkU7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5GTEFHX1NIT1dfV0FMTFBBUEVSOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuSU5QVVRfRkVBVFVSRV9OT19JTlBVVF9DSEFOTkVMOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuTEFTVF9BUFBMSUNBVElPTl9XSU5ET1c7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5MQVNUX1NVQl9XSU5ET1c7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5QUklWQVRFX0ZMQUdfQ09NUEFUSUJMRV9XSU5ET1c7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5UWVBFX0FDQ0VTU0lCSUxJVFlfT1ZFUkxBWTsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLlRZUEVfQVBQTElDQVRJT047CitpbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5UWVBFX0FQUExJQ0FUSU9OX1NUQVJUSU5HOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuVFlQRV9CQVNFX0FQUExJQ0FUSU9OOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuVFlQRV9CT09UX1BST0dSRVNTOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuVFlQRV9ET0NLX0RJVklERVI7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5UWVBFX0RSRUFNOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuVFlQRV9JTlBVVF9NRVRIT0Q7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5UWVBFX0lOUFVUX01FVEhPRF9ESUFMT0c7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5UWVBFX05BVklHQVRJT05fQkFSOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuVFlQRV9QUklWQVRFX1BSRVNFTlRBVElPTjsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLlRZUEVfUVNfRElBTE9HOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuVFlQRV9TVEFUVVNfQkFSOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuVFlQRV9WT0lDRV9JTlRFUkFDVElPTjsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLlRZUEVfV0FMTFBBUEVSOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlckdsb2JhbC5SRUxBWU9VVF9ERUZFUl9TVVJGQUNFX0RFU1RST1k7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyR2xvYmFsLlJFTEFZT1VUX1JFU19TVVJGQUNFX0NIQU5HRUQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyUG9saWN5LkZJTklTSF9MQVlPVVRfUkVET19XQUxMUEFQRVI7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5BcHBXaW5kb3dBbmltYXRvci5QUk9MT05HX0FOSU1BVElPTl9BVF9FTkQ7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5BcHBXaW5kb3dBbmltYXRvci5QUk9MT05HX0FOSU1BVElPTl9BVF9TVEFSVDsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVRzsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19BRERfUkVNT1ZFOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX0FOSU07CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfQVBQX09SSUVOVEFUSU9OOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX0FQUF9UUkFOU0lUSU9OUzsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19CT09UOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX0NPTkZJR1VSQVRJT047CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfRElTUExBWTsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19EUkFHOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX0ZPQ1VTOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX0ZPQ1VTX0xJR0hUOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX0lOUFVUX01FVEhPRDsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19LRVlHVUFSRDsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19MQVlPVVQ7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfT1JJRU5UQVRJT047CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfUkVTSVpFOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX1NDUkVFTlNIT1Q7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfU0NSRUVOX09OOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX1NUQUNLOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX1NUQVJUSU5HX1dJTkRPVzsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19TVVJGQUNFX1RSQUNFOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX1RBU0tfUE9TSVRJT05JTkc7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfVE9LRU5fTU9WRU1FTlQ7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfVklTSUJJTElUWTsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19XQUxMUEFQRVJfTElHSFQ7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfV0lORE9XX01PVkVNRU5UOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX1dJTkRPV19UUkFDRTsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJEZWJ1Z0NvbmZpZy5ISURFX1NUQUNLX0NSQVdMUzsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJEZWJ1Z0NvbmZpZy5TSE9XX0xJR0hUX1RSQU5TQUNUSU9OUzsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJEZWJ1Z0NvbmZpZy5TSE9XX1NVUkZBQ0VfQUxMT0M7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuU0hPV19UUkFOU0FDVElPTlM7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuU0hPV19WRVJCT1NFX1RSQU5TQUNUSU9OUzsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJEZWJ1Z0NvbmZpZy5UQUdfV0lUSF9DTEFTU19OQU1FOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLlRBR19XTTsKKwogLyoqIHtAaGlkZX0gKi8KIHB1YmxpYyBjbGFzcyBXaW5kb3dNYW5hZ2VyU2VydmljZSBleHRlbmRzIElXaW5kb3dNYW5hZ2VyLlN0dWIKICAgICAgICAgaW1wbGVtZW50cyBXYXRjaGRvZy5Nb25pdG9yLCBXaW5kb3dNYW5hZ2VyUG9saWN5LldpbmRvd01hbmFnZXJGdW5jcyB7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9IFRBR19XSVRIX0NMQVNTX05BTUUgPyAiV2luZG93TWFuYWdlclNlcnZpY2UiIDogVEFHX1dNOworCiAgICAgc3RhdGljIGZpbmFsIGludCBMQVlPVVRfUkVQRUFUX1RIUkVTSE9MRCA9IDQ7CiAKICAgICBzdGF0aWMgZmluYWwgYm9vbGVhbiBQUk9GSUxFX09SSUVOVEFUSU9OID0gZmFsc2U7CkBAIC0yNDI2LDEzICsyNDMxLDE3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICB2b2lkIHNldEluc2V0c1dpbmRvdyhTZXNzaW9uIHNlc3Npb24sIElXaW5kb3cgY2xpZW50LAotICAgICAgICAgICAgaW50IHRvdWNoYWJsZUluc2V0cywgUmVjdCBjb250ZW50SW5zZXRzLAorICAgIHZvaWQgc2V0SW5zZXRzV2luZG93KFNlc3Npb24gc2Vzc2lvbiwgSVdpbmRvdyBjbGllbnQsIGludCB0b3VjaGFibGVJbnNldHMsIFJlY3QgY29udGVudEluc2V0cywKICAgICAgICAgICAgIFJlY3QgdmlzaWJsZUluc2V0cywgUmVnaW9uIHRvdWNoYWJsZVJlZ2lvbikgewogICAgICAgICBsb25nIG9yaWdJZCA9IEJpbmRlci5jbGVhckNhbGxpbmdJZGVudGl0eSgpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgc3luY2hyb25pemVkIChtV2luZG93TWFwKSB7CiAgICAgICAgICAgICAgICAgV2luZG93U3RhdGUgdyA9IHdpbmRvd0ZvckNsaWVudExvY2tlZChzZXNzaW9uLCBjbGllbnQsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBpZiAoREVCVUdfTEFZT1VUKSBTbG9nLmQoVEFHLCAic2V0SW5zZXRzV2luZG93ICIgKyB3CisgICAgICAgICAgICAgICAgICAgICAgICArICIsIGNvbnRlbnRJbnNldHM9IiArIHcubUdpdmVuQ29udGVudEluc2V0cyArICIgLT4gIiArIGNvbnRlbnRJbnNldHMKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgdmlzaWJsZUluc2V0cz0iICsgdy5tR2l2ZW5WaXNpYmxlSW5zZXRzICsgIiAtPiAiICsgdmlzaWJsZUluc2V0cworICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCB0b3VjaGFibGVSZWdpb249IiArIHcubUdpdmVuVG91Y2hhYmxlUmVnaW9uICsgIiAtPiAiICsgdG91Y2hhYmxlUmVnaW9uCisgICAgICAgICAgICAgICAgICAgICAgICArICIsIHRvdWNoYWJsZUluc2V0cyAiICsgdy5tVG91Y2hhYmxlSW5zZXRzICsgIiAtPiAiICsgdG91Y2hhYmxlSW5zZXRzKTsKICAgICAgICAgICAgICAgICBpZiAodyAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIHcubUdpdmVuSW5zZXRzUGVuZGluZyA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICB3Lm1HaXZlbkNvbnRlbnRJbnNldHMuc2V0KGNvbnRlbnRJbnNldHMpOwpAQCAtMzIwMyw3ICszMjEyLDggQEAKICAgICBwdWJsaWMgdm9pZCBhZGRBcHBUb2tlbihpbnQgYWRkUG9zLCBJQXBwbGljYXRpb25Ub2tlbiB0b2tlbiwgaW50IHRhc2tJZCwgaW50IHN0YWNrSWQsCiAgICAgICAgICAgICBpbnQgcmVxdWVzdGVkT3JpZW50YXRpb24sIGJvb2xlYW4gZnVsbHNjcmVlbiwgYm9vbGVhbiBzaG93Rm9yQWxsVXNlcnMsIGludCB1c2VySWQsCiAgICAgICAgICAgICBpbnQgY29uZmlnQ2hhbmdlcywgYm9vbGVhbiB2b2ljZUludGVyYWN0aW9uLCBib29sZWFuIGxhdW5jaFRhc2tCZWhpbmQsCi0gICAgICAgICAgICBSZWN0IHRhc2tCb3VuZHMsIENvbmZpZ3VyYXRpb24gY29uZmlnLCBib29sZWFuIGNyb3BXaW5kb3dzVG9TdGFjaykgeworICAgICAgICAgICAgUmVjdCB0YXNrQm91bmRzLCBDb25maWd1cmF0aW9uIGNvbmZpZywgYm9vbGVhbiBjcm9wV2luZG93c1RvU3RhY2ssCisgICAgICAgICAgICBib29sZWFuIGFsd2F5c0ZvY3VzYWJsZSkgewogICAgICAgICBpZiAoIWNoZWNrQ2FsbGluZ1Blcm1pc3Npb24oYW5kcm9pZC5NYW5pZmVzdC5wZXJtaXNzaW9uLk1BTkFHRV9BUFBfVE9LRU5TLAogICAgICAgICAgICAgICAgICJhZGRBcHBUb2tlbigpIikpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBTZWN1cml0eUV4Y2VwdGlvbigiUmVxdWlyZXMgTUFOQUdFX0FQUF9UT0tFTlMgcGVybWlzc2lvbiIpOwpAQCAtMzIzOCw2ICszMjQ4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgKEFjdGl2aXR5SW5mby5DT05GSUdfU0NSRUVOX1NJWkUgfCBBY3Rpdml0eUluZm8uQ09ORklHX09SSUVOVEFUSU9OKSkgIT0gMDsKICAgICAgICAgICAgIGF0b2tlbi5tTGF1bmNoVGFza0JlaGluZCA9IGxhdW5jaFRhc2tCZWhpbmQ7CiAgICAgICAgICAgICBhdG9rZW4ubUNyb3BXaW5kb3dzVG9TdGFjayA9IGNyb3BXaW5kb3dzVG9TdGFjazsKKyAgICAgICAgICAgIGF0b2tlbi5tQWx3YXlzRm9jdXNhYmxlID0gYWx3YXlzRm9jdXNhYmxlOwogICAgICAgICAgICAgaWYgKERFQlVHX1RPS0VOX01PVkVNRU5UIHx8IERFQlVHX0FERF9SRU1PVkUpIFNsb2cudihUQUdfV00sICJhZGRBcHBUb2tlbjogIiArIGF0b2tlbgogICAgICAgICAgICAgICAgICAgICArICIgdG8gc3RhY2s9IiArIHN0YWNrSWQgKyAiIHRhc2s9IiArIHRhc2tJZCArICIgYXQgIiArIGFkZFBvcyk7CiAKQEAgLTM4NzcsNyArMzg4OCw3IEBACiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgV2luZG93U3RhdGUgc3RhcnRpbmdXaW5kb3cgPSB0dG9rZW4uc3RhcnRpbmdXaW5kb3c7Ci0gICAgICAgIGlmIChzdGFydGluZ1dpbmRvdyAhPSBudWxsKSB7CisgICAgICAgIGlmIChzdGFydGluZ1dpbmRvdyAhPSBudWxsICYmIHR0b2tlbi5zdGFydGluZ1ZpZXcgIT0gbnVsbCkgewogICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlLCB0aGUgc3RhcnRpbmcgaWNvbiBoYXMgYWxyZWFkeSBiZWVuIGRpc3BsYXllZCwgc28gc3RhcnQKICAgICAgICAgICAgIC8vIGxldHRpbmcgd2luZG93cyBnZXQgc2hvd24gaW1tZWRpYXRlbHkgd2l0aG91dCBhbnkgbW9yZSB0cmFuc2l0aW9ucy4KICAgICAgICAgICAgIG1Ta2lwQXBwVHJhbnNpdGlvbkFuaW1hdGlvbiA9IHRydWU7CkBAIC00NjUxLDYgKzQ2NjIsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERUJVR19TVEFDSykgU2xvZy5kKFRBR19XTSwgImF0dGFjaFN0YWNrOiBzdGFja0lkPSIgKyBzdGFja0lkKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrID0gbmV3IFRhc2tTdGFjayh0aGlzLCBzdGFja0lkKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG1TdGFja0lkVG9TdGFjay5wdXQoc3RhY2tJZCwgc3RhY2spOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrSWQgPT0gRE9DS0VEX1NUQUNLX0lEKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RGVmYXVsdERpc3BsYXlDb250ZW50TG9ja2VkKCkubURpdmlkZXJDb250cm9sbGVyTG9ja2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubm90aWZ5RG9ja2VkU3RhY2tFeGlzdHNDaGFuZ2VkKHRydWUpOworICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIHN0YWNrLmF0dGFjaERpc3BsYXlDb250ZW50KGRpc3BsYXlDb250ZW50KTsKICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUNvbnRlbnQuYXR0YWNoU3RhY2soc3RhY2ssIG9uVG9wKTsKQEAgLTQ2NzYsNiArNDY5MSwxMCBAQAogICAgIHZvaWQgZGV0YWNoU3RhY2tMb2NrZWQoRGlzcGxheUNvbnRlbnQgZGlzcGxheUNvbnRlbnQsIFRhc2tTdGFjayBzdGFjaykgewogICAgICAgICBkaXNwbGF5Q29udGVudC5kZXRhY2hTdGFjayhzdGFjayk7CiAgICAgICAgIHN0YWNrLmRldGFjaERpc3BsYXkoKTsKKyAgICAgICAgaWYgKHN0YWNrLm1TdGFja0lkID09IERPQ0tFRF9TVEFDS19JRCkgeworICAgICAgICAgICAgZ2V0RGVmYXVsdERpc3BsYXlDb250ZW50TG9ja2VkKCkubURpdmlkZXJDb250cm9sbGVyTG9ja2VkCisgICAgICAgICAgICAgICAgICAgIC5ub3RpZnlEb2NrZWRTdGFja0V4aXN0c0NoYW5nZWQoZmFsc2UpOworICAgICAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZGV0YWNoU3RhY2soaW50IHN0YWNrSWQpIHsKQEAgLTQ4MjIsMTQgKzQ4NDEsMTYgQEAKICAgICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHN0YWNrIGlzIG5vdyBmdWxsc2NyZWVuLgogICAgICAqICovCiAgICAgcHVibGljIGJvb2xlYW4gcmVzaXplU3RhY2soaW50IHN0YWNrSWQsIFJlY3QgYm91bmRzLAotICAgICAgICAgICAgU3BhcnNlQXJyYXk8Q29uZmlndXJhdGlvbj4gY29uZmlncywgU3BhcnNlQXJyYXk8UmVjdD4gdGFza0JvdW5kcykgeworICAgICAgICAgICAgU3BhcnNlQXJyYXk8Q29uZmlndXJhdGlvbj4gY29uZmlncywgU3BhcnNlQXJyYXk8UmVjdD4gdGFza0JvdW5kcywKKyAgICAgICAgICAgIFNwYXJzZUFycmF5PFJlY3Q+IHRhc2tUZW1wSW5zZXRCb3VuZHMpIHsKICAgICAgICAgc3luY2hyb25pemVkIChtV2luZG93TWFwKSB7CiAgICAgICAgICAgICBmaW5hbCBUYXNrU3RhY2sgc3RhY2sgPSBtU3RhY2tJZFRvU3RhY2suZ2V0KHN0YWNrSWQpOwogICAgICAgICAgICAgaWYgKHN0YWNrID09IG51bGwpIHsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJyZXNpemVTdGFjazogc3RhY2tJZCAiICsgc3RhY2tJZAogICAgICAgICAgICAgICAgICAgICAgICAgKyAiIG5vdCBmb3VuZC4iKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzdGFjay5zZXRCb3VuZHMoYm91bmRzLCBjb25maWdzLCB0YXNrQm91bmRzKSAmJiBzdGFjay5pc1Zpc2libGVMb2NrZWQoKSkgeworICAgICAgICAgICAgaWYgKHN0YWNrLnNldEJvdW5kcyhib3VuZHMsIGNvbmZpZ3MsIHRhc2tCb3VuZHMsIHRhc2tUZW1wSW5zZXRCb3VuZHMpCisgICAgICAgICAgICAgICAgICAgICYmIHN0YWNrLmlzVmlzaWJsZUxvY2tlZCgpKSB7CiAgICAgICAgICAgICAgICAgc3RhY2sucmVzaXplV2luZG93cygpOwogICAgICAgICAgICAgICAgIHN0YWNrLmdldERpc3BsYXlDb250ZW50KCkubGF5b3V0TmVlZGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBtV2luZG93UGxhY2VyTG9ja2VkLnBlcmZvcm1TdXJmYWNlUGxhY2VtZW50KCk7CkBAIC00ODM4LDYgKzQ4NTksMTcgQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIHB1YmxpYyB2b2lkIHByZXBhcmVGcmVlemluZ1Rhc2tCb3VuZHMoaW50IHN0YWNrSWQpIHsKKyAgICAgICAgc3luY2hyb25pemVkIChtV2luZG93TWFwKSB7CisgICAgICAgICAgICBmaW5hbCBUYXNrU3RhY2sgc3RhY2sgPSBtU3RhY2tJZFRvU3RhY2suZ2V0KHN0YWNrSWQpOworICAgICAgICAgICAgaWYgKHN0YWNrID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJwcmVwYXJlRnJlZXppbmdUYXNrQm91bmRzOiBzdGFja0lkICIgKyBzdGFja0lkCisgICAgICAgICAgICAgICAgICAgICAgICArICIgbm90IGZvdW5kLiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RhY2sucHJlcGFyZUZyZWV6aW5nVGFza0JvdW5kcygpOworICAgICAgICB9CisgICAgfQorCiAgICAgcHVibGljIHZvaWQgcG9zaXRpb25UYXNrSW5TdGFjayhpbnQgdGFza0lkLCBpbnQgc3RhY2tJZCwgaW50IHBvc2l0aW9uLCBSZWN0IGJvdW5kcywKICAgICAgICAgICAgIENvbmZpZ3VyYXRpb24gY29uZmlnKSB7CiAgICAgICAgIHN5bmNocm9uaXplZCAobVdpbmRvd01hcCkgewpAQCAtODA3NCw3ICs4MTA2LDcgQEAKICAgICAgICAgICAgICAgICBjYXNlIFdJTkRPV19SRVBMQUNFTUVOVF9USU1FT1VUOiB7CiAgICAgICAgICAgICAgICAgICAgIGZpbmFsIEFwcFdpbmRvd1Rva2VuIHRva2VuID0gKEFwcFdpbmRvd1Rva2VuKSBtc2cub2JqOwogICAgICAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1XaW5kb3dNYXApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLmNsZWFyVGltZWRvdXRSZXBsYWNlZXNMb2NrZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLmNsZWFyVGltZWRvdXRSZXBsYWNlc0xvY2tlZCgpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtOTA3OCw4ICs5MTEwLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3dG9rZW4gPT0gdG9rZW4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtRm9jdXNlZEFwcCA9PSB0b2tlbiAmJiB0b2tlbi5zdGFja0NhblJlY2VpdmVLZXlzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXaG9vcHMsIHdlIGFyZSBiZWxvdyB0aGUgZm9jdXNlZCBhcHAgd2hvc2Ugc3RhY2sgY2FuIHJlY2VpdmUga2V5cy4uLgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1Gb2N1c2VkQXBwID09IHRva2VuICYmIHRva2VuLndpbmRvd3NBcmVGb2N1c2FibGUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdob29wcywgd2UgYXJlIGJlbG93IHRoZSBmb2N1c2VkIGFwcCB3aG9zZSB3aW5kb3dzIGFyZSBmb2N1c2FibGUuLi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBObyBmb2N1cyBmb3IgeW91ISEhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2FsTE9HViB8fCBERUJVR19GT0NVU19MSUdIVCkgU2xvZy52KFRBR19XTSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaW5kRm9jdXNlZFdpbmRvdzogUmVhY2hlZCBmb2N1c2VkIGFwcD0iICsgbUZvY3VzZWRBcHApOwpAQCAtOTQ2NCw2ICs5NDk2LDMyIEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICBwdWJsaWMgdm9pZCBub3RpZnlBcHBSZWxhdW5jaGluZyhJQmluZGVyIHRva2VuKSB7CisgICAgICAgIHN5bmNocm9uaXplZCAobVdpbmRvd01hcCkgeworICAgICAgICAgICAgQXBwV2luZG93VG9rZW4gYXBwV2luZG93ID0gZmluZEFwcFdpbmRvd1Rva2VuKHRva2VuKTsKKyAgICAgICAgICAgIGlmIChjYW5GcmVlemVCb3VuZHMoYXBwV2luZG93KSkgeworICAgICAgICAgICAgICAgIGFwcFdpbmRvdy5mcmVlemVCb3VuZHMoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIG5vdGlmeUFwcFJlbGF1bmNoaW5nRmluaXNoZWQoSUJpbmRlciB0b2tlbikgeworICAgICAgICBzeW5jaHJvbml6ZWQgKG1XaW5kb3dNYXApIHsKKyAgICAgICAgICAgIEFwcFdpbmRvd1Rva2VuIGFwcFdpbmRvdyA9IGZpbmRBcHBXaW5kb3dUb2tlbih0b2tlbik7CisgICAgICAgICAgICBpZiAoY2FuRnJlZXplQm91bmRzKGFwcFdpbmRvdykpIHsKKyAgICAgICAgICAgICAgICBhcHBXaW5kb3cudW5mcmVlemVCb3VuZHMoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgYm9vbGVhbiBjYW5GcmVlemVCb3VuZHMoQXBwV2luZG93VG9rZW4gYXBwV2luZG93KSB7CisKKyAgICAgICAgLy8gRm9yIGZyZWVmb3JtIHdpbmRvd3MsIHdlIGNhbid0IGZyZWV6ZSB0aGUgYm91bmRzIGF0IHRoZSBtb21lbnQgYmVjYXVzZSB0aGlzIHdvdWxkIG1ha2UKKyAgICAgICAgLy8gdGhlIHJlc2l6aW5nIHVucmVzcG9uc2l2ZS4KKyAgICAgICAgcmV0dXJuIGFwcFdpbmRvdyAhPSBudWxsICYmIGFwcFdpbmRvdy5tVGFzayAhPSBudWxsCisgICAgICAgICAgICAgICAgJiYgIWFwcFdpbmRvdy5tVGFzay5pbkZyZWVmb3JtV29ya3NwYWNlKCk7CisgICAgfQorCiAgICAgdm9pZCBkdW1wUG9saWN5TG9ja2VkKFByaW50V3JpdGVyIHB3LCBTdHJpbmdbXSBhcmdzLCBib29sZWFuIGR1bXBBbGwpIHsKICAgICAgICAgcHcucHJpbnRsbigiV0lORE9XIE1BTkFHRVIgUE9MSUNZIFNUQVRFIChkdW1wc3lzIHdpbmRvdyBwb2xpY3kpIik7CiAgICAgICAgIG1Qb2xpY3kuZHVtcCgiICAgICIsIHB3LCBhcmdzKTsKQEAgLTEwMTI4LDE2ICsxMDE4Niw0MCBAQAogICAgICAgICBzeW5jaHJvbml6ZWQgKG1XaW5kb3dNYXApIHsKICAgICAgICAgICAgIGFwcFdpbmRvd1Rva2VuID0gZmluZEFwcFdpbmRvd1Rva2VuKHRva2VuKTsKICAgICAgICAgICAgIGlmIChhcHBXaW5kb3dUb2tlbiA9PSBudWxsIHx8ICFhcHBXaW5kb3dUb2tlbi5pc1Zpc2libGUoKSkgewotICAgICAgICAgICAgICAgIFNsb2cudyhUQUdfV00sICJBdHRlbXB0ZWQgdG8gc2V0IHJlcGxhY2luZyB3aW5kb3cgb24gbm9uLWV4aXN0aW5nIGFwcCB0b2tlbiAiICsgdG9rZW4pOworICAgICAgICAgICAgICAgIFNsb2cudyhUQUdfV00sICJBdHRlbXB0ZWQgdG8gc2V0IHJlcGxhY2luZyB3aW5kb3cgb24gbm9uLWV4aXN0aW5nIGFwcCB0b2tlbiAiCisgICAgICAgICAgICAgICAgICAgICAgICArIHRva2VuKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBhcHBXaW5kb3dUb2tlbi5zZXRSZXBsYWNpbmdXaW5kb3dzKGFuaW1hdGUpOwogICAgICAgICB9CisgICAgfQogCi0gICAgICAgIGlmIChhcHBXaW5kb3dUb2tlbiAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtSC5yZW1vdmVNZXNzYWdlcyhILldJTkRPV19SRVBMQUNFTUVOVF9USU1FT1VUKTsKLSAgICAgICAgICAgIG1ILnNlbmRNZXNzYWdlRGVsYXllZChtSC5vYnRhaW5NZXNzYWdlKEguV0lORE9XX1JFUExBQ0VNRU5UX1RJTUVPVVQsIGFwcFdpbmRvd1Rva2VuKSwKLSAgICAgICAgICAgICAgICAgICAgV0lORE9XX1JFUExBQ0VNRU5UX1RJTUVPVVRfRFVSQVRJT04pOworICAgIC8qKgorICAgICAqIElmIHdlJ3JlIHJlcGxhY2luZyB0aGUgd2luZG93LCBzY2hlZHVsZSBhIHRpbWVyIHRvIGNsZWFyIHRoZSByZXBsYWNlZCB3aW5kb3cKKyAgICAgKiBhZnRlciBhIHRpbWVvdXQsIGluIGNhc2UgdGhlIHJlcGxhY2luZyB3aW5kb3cgaXMgbm90IGNvbWluZy4KKyAgICAgKgorICAgICAqIElmIHdlJ3JlIG5vdCByZXBsYWNpbmcgdGhlIHdpbmRvdywgY2xlYXIgdGhlIHJlcGxhY2Ugd2luZG93IHNldHRpbmdzIG9mIHRoZSBhcHAuCisgICAgICoKKyAgICAgKiBAcGFyYW0gdG9rZW4gQXBwbGljYXRpb24gdG9rZW4gZm9yIHRoZSBhY3Rpdml0eSB3aG9zZSB3aW5kb3cgbWlnaHQgYmUgcmVwbGFjZWQuCisgICAgICogQHBhcmFtIHJlcGxhY2luZyBXaGV0aGVyIHRoZSB3aW5kb3cgaXMgYmVpbmcgcmVwbGFjZWQgb3Igbm90LgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNjaGVkdWxlQ2xlYXJSZXBsYWNpbmdXaW5kb3dJZk5lZWRlZChJQmluZGVyIHRva2VuLCBib29sZWFuIHJlcGxhY2luZykgeworICAgICAgICBBcHBXaW5kb3dUb2tlbiBhcHBXaW5kb3dUb2tlbiA9IG51bGw7CisgICAgICAgIHN5bmNocm9uaXplZCAobVdpbmRvd01hcCkgeworICAgICAgICAgICAgYXBwV2luZG93VG9rZW4gPSBmaW5kQXBwV2luZG93VG9rZW4odG9rZW4pOworICAgICAgICAgICAgaWYgKGFwcFdpbmRvd1Rva2VuID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBTbG9nLncoVEFHX1dNLCAiQXR0ZW1wdGVkIHRvIHJlc2V0IHJlcGxhY2luZyB3aW5kb3cgb24gbm9uLWV4aXN0aW5nIGFwcCB0b2tlbiAiCisgICAgICAgICAgICAgICAgICAgICAgICArIHRva2VuKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocmVwbGFjaW5nKSB7CisgICAgICAgICAgICAgICAgbUgucmVtb3ZlTWVzc2FnZXMoSC5XSU5ET1dfUkVQTEFDRU1FTlRfVElNRU9VVCk7CisgICAgICAgICAgICAgICAgbUguc2VuZE1lc3NhZ2VEZWxheWVkKAorICAgICAgICAgICAgICAgICAgICAgICAgbUgub2J0YWluTWVzc2FnZShILldJTkRPV19SRVBMQUNFTUVOVF9USU1FT1VULCBhcHBXaW5kb3dUb2tlbiksCisgICAgICAgICAgICAgICAgICAgICAgICBXSU5ET1dfUkVQTEFDRU1FTlRfVElNRU9VVF9EVVJBVElPTik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGFwcFdpbmRvd1Rva2VuLnJlc2V0UmVwbGFjaW5nV2luZG93cygpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCkBAIC0xMDE1Nyw2ICsxMDIzOSwxNCBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgc2V0UmVzaXplRGltTGF5ZXIoYm9vbGVhbiB2aXNpYmxlLCBpbnQgdGFyZ2V0U3RhY2tJZCwgZmxvYXQgYWxwaGEpIHsKKyAgICAgICAgc3luY2hyb25pemVkIChtV2luZG93TWFwKSB7CisgICAgICAgICAgICBnZXREZWZhdWx0RGlzcGxheUNvbnRlbnRMb2NrZWQoKS5nZXREb2NrZWREaXZpZGVyQ29udHJvbGxlcigpLnNldFJlc2l6ZURpbUxheWVyKAorICAgICAgICAgICAgICAgICAgICB2aXNpYmxlLCB0YXJnZXRTdGFja0lkLCBhbHBoYSk7CisgICAgICAgIH0KKyAgICB9CisKICAgICBwdWJsaWMgdm9pZCBzZXRUYXNrUmVzaXplYWJsZShpbnQgdGFza0lkLCBib29sZWFuIHJlc2l6ZWFibGUpIHsKICAgICAgICAgc3luY2hyb25pemVkIChtV2luZG93TWFwKSB7CiAgICAgICAgICAgICBUYXNrIHRhc2sgPSBtVGFza0lkVG9UYXNrLmdldCh0YXNrSWQpOwpAQCAtMTAxNzUsMjYgKzEwMjY1LDE0IEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcmVnaXN0ZXJEb2NrRGl2aWRlclZpc2liaWxpdHlMaXN0ZW5lcihJRG9ja0RpdmlkZXJWaXNpYmlsaXR5TGlzdGVuZXIgbGlzdGVuZXIpIHsKKyAgICBwdWJsaWMgdm9pZCByZWdpc3RlckRvY2tlZFN0YWNrTGlzdGVuZXIoSURvY2tlZFN0YWNrTGlzdGVuZXIgbGlzdGVuZXIpIHsKICAgICAgICAgaWYgKCFjaGVja0NhbGxpbmdQZXJtaXNzaW9uKGFuZHJvaWQuTWFuaWZlc3QucGVybWlzc2lvbi5SRUdJU1RFUl9XSU5ET1dfTUFOQUdFUl9MSVNURU5FUlMsCi0gICAgICAgICAgICAgICAgInJlZ2lzdGVyRG9ja0RpdmlkZXJWaXNpYmlsaXR5TGlzdGVuZXIoKSIpKSB7CisgICAgICAgICAgICAgICAgInJlZ2lzdGVyRG9ja2VkU3RhY2tMaXN0ZW5lcigpIikpIHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAvLyBUT0RPKG11bHRpLWRpc3BsYXkpOiBUaGUgbGlzdGVuZXIgaXMgcmVnaXN0ZXJlZCBvbiB0aGUgZGVmYXVsdCBkaXNwbGF5IG9ubHkuCi0gICAgICAgIGZpbmFsIERvY2tlZFN0YWNrRGl2aWRlckNvbnRyb2xsZXIgY29udHJvbGxlciA9Ci0gICAgICAgICAgICAgICAgZ2V0RGVmYXVsdERpc3BsYXlDb250ZW50TG9ja2VkKCkuZ2V0RG9ja2VkRGl2aWRlckNvbnRyb2xsZXIoKTsKLSAgICAgICAgY29udHJvbGxlci5yZWdpc3RlckRvY2tEaXZpZGVyVmlzaWJpbGl0eUxpc3RlbmVyKGxpc3RlbmVyKTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGxpc3RlbmVyLmFzQmluZGVyKCkubGlua1RvRGVhdGgobmV3IElCaW5kZXIuRGVhdGhSZWNpcGllbnQoKSB7Ci0gICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgcHVibGljIHZvaWQgYmluZGVyRGllZCgpIHsKLSAgICAgICAgICAgICAgICAgICAgZ2V0RGVmYXVsdERpc3BsYXlDb250ZW50TG9ja2VkKCkuZ2V0RG9ja2VkRGl2aWRlckNvbnRyb2xsZXIoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZWdpc3RlckRvY2tEaXZpZGVyVmlzaWJpbGl0eUxpc3RlbmVyKG51bGwpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sIDApOwotICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgY29udHJvbGxlci5yZWdpc3RlckRvY2tEaXZpZGVyVmlzaWJpbGl0eUxpc3RlbmVyKG51bGwpOwotICAgICAgICB9CisgICAgICAgIGdldERlZmF1bHREaXNwbGF5Q29udGVudExvY2tlZCgpLm1EaXZpZGVyQ29udHJvbGxlckxvY2tlZC5yZWdpc3RlckRvY2tlZFN0YWNrTGlzdGVuZXIoCisgICAgICAgICAgICAgICAgbGlzdGVuZXIpOwogICAgIH0KIAogICAgIHByaXZhdGUgZmluYWwgY2xhc3MgTG9jYWxTZXJ2aWNlIGV4dGVuZHMgV2luZG93TWFuYWdlckludGVybmFsIHsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vV2luZG93U3RhdGUuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vV2luZG93U3RhdGUuamF2YQppbmRleCA5YTI0OTQyLi5iN2ZkNjBmIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL1dpbmRvd1N0YXRlLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9XaW5kb3dTdGF0ZS5qYXZhCkBAIC03NCw2ICs3NCw3IEBACiBpbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5MQVNUX1NVQl9XSU5ET1c7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5NQVRDSF9QQVJFTlQ7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5QUklWQVRFX0ZMQUdfQ09NUEFUSUJMRV9XSU5ET1c7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5QUklWQVRFX0ZMQUdfTEFZT1VUX0NISUxEX1dJTkRPV19JTl9QQVJFTlRfRlJBTUU7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5QUklWQVRFX0ZMQUdfS0VZR1VBUkQ7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5QUklWQVRFX0ZMQUdfV0lMTF9OT1RfUkVQTEFDRV9PTl9SRUxBVU5DSDsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLlNPRlRfSU5QVVRfQURKVVNUX1JFU0laRTsKQEAgLTMwOCw2ICszMDksMTIgQEAKICAgICAvLyBwb3NzaWJsZSB0byBkcmF3LgogICAgIGZpbmFsIFJlY3QgbU91dHNldEZyYW1lID0gbmV3IFJlY3QoKTsKIAorICAgIC8qKgorICAgICAqIFVzdWFsbHkgZW1wdHkuIFNldCB0byB0aGUgdGFzaydzIHRlbXBJbnNldEZyYW1lLiBTZWUKKyAgICAgKntAbGluayBhbmRyb2lkLmFwcC5JQWN0aXZpdHlNYW5hZ2VyI3Jlc2l6ZURvY2tlZFN0YWNrfS4KKyAgICAgKi8KKyAgICBmaW5hbCBSZWN0IG1JbnNldEZyYW1lID0gbmV3IFJlY3QoKTsKKwogICAgIGJvb2xlYW4gbUNvbnRlbnRDaGFuZ2VkOwogCiAgICAgLy8gSWYgYSB3aW5kb3cgc2hvd2luZyBhIHdhbGxwYXBlcjogdGhlIHJlcXVlc3RlZCBvZmZzZXQgZm9yIHRoZQpAQCAtNDE2LDYgKzQyMyw4IEBACiAgICAgLy8gdGhlIHdpbmRvdyBpcyBhZGRlZCBhbmQgdW5zZXQgd2hlbiB0aGlzIHdpbmRvdyByZXBvcnRzIGl0cyBmaXJzdCBkcmF3LgogICAgIFdpbmRvd1N0YXRlIG1SZXBsYWNpbmdXaW5kb3cgPSBudWxsOwogCisgICAgLy8gV2hldGhlciB0aGlzIHdpbmRvdyBpcyBiZWluZyBtb3ZlZCB2aWEgdGhlIHJlc2l6ZSBBUEkKKyAgICBib29sZWFuIG1Nb3ZlZEJ5UmVzaXplOwogICAgIC8qKgogICAgICAqIFdha2UgbG9jayBmb3IgZHJhd2luZy4KICAgICAgKiBFdmVuIHRob3VnaCBpdCdzIHNsaWdodGx5IG1vcmUgZXhwZW5zaXZlIHRvIGRvIHNvLCB3ZSB3aWxsIHVzZSBhIHNlcGFyYXRlIHdha2UgbG9jawpAQCAtNjAzLDEwICs2MTIsMjYgQEAKICAgICAgICAgbUhhdmVGcmFtZSA9IHRydWU7CiAKICAgICAgICAgZmluYWwgVGFzayB0YXNrID0gZ2V0VGFzaygpOwotICAgICAgICBmaW5hbCBib29sZWFuIG5vbkZ1bGxzY3JlZW5UYXNrID0gdGFzayAhPSBudWxsICYmICF0YXNrLmlzRnVsbHNjcmVlbigpOworICAgICAgICBmaW5hbCBib29sZWFuIGZ1bGxzY3JlZW5UYXNrID0gdGFzayA9PSBudWxsIHx8IHRhc2suaXNGdWxsc2NyZWVuKCk7CiAgICAgICAgIGZpbmFsIGJvb2xlYW4gZnJlZWZvcm1Xb3Jrc3BhY2UgPSB0YXNrICE9IG51bGwgJiYgdGFzay5pbkZyZWVmb3JtV29ya3NwYWNlKCk7Ci0gICAgICAgIGlmIChub25GdWxsc2NyZWVuVGFzaykgeworCisgICAgICAgIGlmIChmdWxsc2NyZWVuVGFzayB8fCAoaXNDaGlsZFdpbmRvdygpCisgICAgICAgICAgICAgICAgJiYgKG1BdHRycy5wcml2YXRlRmxhZ3MgJiBQUklWQVRFX0ZMQUdfTEFZT1VUX0NISUxEX1dJTkRPV19JTl9QQVJFTlRfRlJBTUUpICE9IDApKSB7CisgICAgICAgICAgICAvLyBXZSB1c2UgdGhlIHBhcmVudCBmcmFtZSBhcyB0aGUgY29udGFpbmluZyBmcmFtZSBmb3IgZnVsbHNjcmVlbiBhbmQgY2hpbGQgd2luZG93cworICAgICAgICAgICAgbUNvbnRhaW5pbmdGcmFtZS5zZXQocGYpOworICAgICAgICAgICAgbURpc3BsYXlGcmFtZS5zZXQoZGYpOworICAgICAgICAgICAgbUluc2V0RnJhbWUuc2V0RW1wdHkoKTsKKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHRhc2suZ2V0Qm91bmRzKG1Db250YWluaW5nRnJhbWUpOworICAgICAgICAgICAgdGFzay5nZXRUZW1wSW5zZXRCb3VuZHMobUluc2V0RnJhbWUpOworICAgICAgICAgICAgaWYgKG1BcHBUb2tlbiAhPSBudWxsICYmICFtQXBwVG9rZW4ubUZyb3plbkJvdW5kcy5pc0VtcHR5KCkpIHsKKworICAgICAgICAgICAgICAgIC8vIElmIHRoZSBib3VuZHMgYXJlIGZyb3plbiwgd2Ugc3RpbGwgd2FudCB0byB0cmFuc2xhdGUgdGhlIHdpbmRvdyBmcmVlbHkgYW5kIG9ubHkKKyAgICAgICAgICAgICAgICAvLyBmcmVlemUgdGhlIHNpemUuCisgICAgICAgICAgICAgICAgUmVjdCBmcm96ZW4gPSBtQXBwVG9rZW4ubUZyb3plbkJvdW5kcy5wZWVrKCk7CisgICAgICAgICAgICAgICAgbUNvbnRhaW5pbmdGcmFtZS5yaWdodCA9IG1Db250YWluaW5nRnJhbWUubGVmdCArIGZyb3plbi53aWR0aCgpOworICAgICAgICAgICAgICAgIG1Db250YWluaW5nRnJhbWUuYm90dG9tID0gbUNvbnRhaW5pbmdGcmFtZS50b3AgKyBmcm96ZW4uaGVpZ2h0KCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBmaW5hbCBXaW5kb3dTdGF0ZSBpbWVXaW4gPSBtU2VydmljZS5tSW5wdXRNZXRob2RXaW5kb3c7CiAgICAgICAgICAgICBpZiAoaW1lV2luICE9IG51bGwgJiYgaW1lV2luLmlzVmlzaWJsZU5vdygpICYmIG1TZXJ2aWNlLm1JbnB1dE1ldGhvZFRhcmdldCA9PSB0aGlzCiAgICAgICAgICAgICAgICAgICAgICYmIG1Db250YWluaW5nRnJhbWUuYm90dG9tID4gY2YuYm90dG9tKSB7CkBAIC02MjMsOSArNjQ4LDYgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtRGlzcGxheUZyYW1lLnNldChtQ29udGFpbmluZ0ZyYW1lKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1Db250YWluaW5nRnJhbWUuc2V0KHBmKTsKLSAgICAgICAgICAgIG1EaXNwbGF5RnJhbWUuc2V0KGRmKTsKICAgICAgICAgfQogCiAgICAgICAgIGZpbmFsIGludCBwdyA9IG1Db250YWluaW5nRnJhbWUud2lkdGgoKTsKQEAgLTY2OCw2ICs2OTAsMTIgQEAKICAgICAgICAgICAgIG1PdXRzZXRzLnNldCgwLCAwLCAwLCAwKTsKICAgICAgICAgfQogCisgICAgICAgIC8vIERlbm90ZXMgdGhlIGFjdHVhbCBmcmFtZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5zZXRzLiBXaGVuIHJlc2l6aW5nIGluIGRvY2tlZCBtb2RlLAorICAgICAgICAvLyB3ZSdkIGxpa2UgdG8gZnJlZXplIHRoZSBsYXlvdXQsIHNvIHdlIGFsc28gbmVlZCB0byBmcmVlemUgdGhlIGluc2V0cyB0ZW1wb3JhcmlseS4gQnkgdGhlCisgICAgICAgIC8vIG5vdGlvbiBvZiBhIHRhc2sgaGF2aW5nIGEgZGlmZmVyZW50IGluc2V0IGZyYW1lLCB3ZSBjYW4gYWNoaWV2ZSB0aGF0IHdoaWxlIHN0aWxsIG1vdmluZworICAgICAgICAvLyB0aGUgdGFzayBhcm91bmQuCisgICAgICAgIGZpbmFsIFJlY3QgZnJhbWUgPSAhbUluc2V0RnJhbWUuaXNFbXB0eSgpID8gbUluc2V0RnJhbWUgOiBtRnJhbWU7CisKICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBjb250ZW50IGFuZCB2aXNpYmxlIGZyYW1lcyBhcmUgaW5zaWRlIG9mIHRoZQogICAgICAgICAvLyBmaW5hbCB3aW5kb3cgZnJhbWUuCiAgICAgICAgIGlmIChmcmVlZm9ybVdvcmtzcGFjZSAmJiAhbUZyYW1lLmlzRW1wdHkoKSkgewpAQCAtNzAzLDQyICs3MzEsNjkgQEAKICAgICAgICAgICAgICAgICBtQ29udGVudEZyYW1lLnNldChtRnJhbWUpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbUNvbnRlbnRGcmFtZS5zZXQoTWF0aC5tYXgobUNvbnRlbnRGcmFtZS5sZWZ0LCBtRnJhbWUubGVmdCksCi0gICAgICAgICAgICAgICAgICAgIE1hdGgubWF4KG1Db250ZW50RnJhbWUudG9wLCBtRnJhbWUudG9wKSwKLSAgICAgICAgICAgICAgICAgICAgTWF0aC5taW4obUNvbnRlbnRGcmFtZS5yaWdodCwgbUZyYW1lLnJpZ2h0KSwKLSAgICAgICAgICAgICAgICAgICAgTWF0aC5taW4obUNvbnRlbnRGcmFtZS5ib3R0b20sIG1GcmFtZS5ib3R0b20pKTsKKyAgICAgICAgICAgIG1Db250ZW50RnJhbWUuc2V0KE1hdGgubWF4KG1Db250ZW50RnJhbWUubGVmdCwgZnJhbWUubGVmdCksCisgICAgICAgICAgICAgICAgICAgIE1hdGgubWF4KG1Db250ZW50RnJhbWUudG9wLCBmcmFtZS50b3ApLAorICAgICAgICAgICAgICAgICAgICBNYXRoLm1pbihtQ29udGVudEZyYW1lLnJpZ2h0LCBmcmFtZS5yaWdodCksCisgICAgICAgICAgICAgICAgICAgIE1hdGgubWluKG1Db250ZW50RnJhbWUuYm90dG9tLCBmcmFtZS5ib3R0b20pKTsKIAotICAgICAgICAgICAgbVZpc2libGVGcmFtZS5zZXQoTWF0aC5tYXgobVZpc2libGVGcmFtZS5sZWZ0LCBtRnJhbWUubGVmdCksCi0gICAgICAgICAgICAgICAgICAgIE1hdGgubWF4KG1WaXNpYmxlRnJhbWUudG9wLCBtRnJhbWUudG9wKSwKLSAgICAgICAgICAgICAgICAgICAgTWF0aC5taW4obVZpc2libGVGcmFtZS5yaWdodCwgbUZyYW1lLnJpZ2h0KSwKLSAgICAgICAgICAgICAgICAgICAgTWF0aC5taW4obVZpc2libGVGcmFtZS5ib3R0b20sIG1GcmFtZS5ib3R0b20pKTsKKyAgICAgICAgICAgIG1WaXNpYmxlRnJhbWUuc2V0KE1hdGgubWF4KG1WaXNpYmxlRnJhbWUubGVmdCwgZnJhbWUubGVmdCksCisgICAgICAgICAgICAgICAgICAgIE1hdGgubWF4KG1WaXNpYmxlRnJhbWUudG9wLCBmcmFtZS50b3ApLAorICAgICAgICAgICAgICAgICAgICBNYXRoLm1pbihtVmlzaWJsZUZyYW1lLnJpZ2h0LCBmcmFtZS5yaWdodCksCisgICAgICAgICAgICAgICAgICAgIE1hdGgubWluKG1WaXNpYmxlRnJhbWUuYm90dG9tLCBmcmFtZS5ib3R0b20pKTsKIAotICAgICAgICAgICAgbVN0YWJsZUZyYW1lLnNldChNYXRoLm1heChtU3RhYmxlRnJhbWUubGVmdCwgbUZyYW1lLmxlZnQpLAotICAgICAgICAgICAgICAgICAgICBNYXRoLm1heChtU3RhYmxlRnJhbWUudG9wLCBtRnJhbWUudG9wKSwKLSAgICAgICAgICAgICAgICAgICAgTWF0aC5taW4obVN0YWJsZUZyYW1lLnJpZ2h0LCBtRnJhbWUucmlnaHQpLAotICAgICAgICAgICAgICAgICAgICBNYXRoLm1pbihtU3RhYmxlRnJhbWUuYm90dG9tLCBtRnJhbWUuYm90dG9tKSk7CisgICAgICAgICAgICBtU3RhYmxlRnJhbWUuc2V0KE1hdGgubWF4KG1TdGFibGVGcmFtZS5sZWZ0LCBmcmFtZS5sZWZ0KSwKKyAgICAgICAgICAgICAgICAgICAgTWF0aC5tYXgobVN0YWJsZUZyYW1lLnRvcCwgZnJhbWUudG9wKSwKKyAgICAgICAgICAgICAgICAgICAgTWF0aC5taW4obVN0YWJsZUZyYW1lLnJpZ2h0LCBmcmFtZS5yaWdodCksCisgICAgICAgICAgICAgICAgICAgIE1hdGgubWluKG1TdGFibGVGcmFtZS5ib3R0b20sIGZyYW1lLmJvdHRvbSkpOwogICAgICAgICB9CiAKLSAgICAgICAgbU92ZXJzY2FuSW5zZXRzLnNldChNYXRoLm1heChtT3ZlcnNjYW5GcmFtZS5sZWZ0IC0gbUZyYW1lLmxlZnQsIDApLAotICAgICAgICAgICAgICAgIE1hdGgubWF4KG1PdmVyc2NhbkZyYW1lLnRvcCAtIG1GcmFtZS50b3AsIDApLAotICAgICAgICAgICAgICAgIE1hdGgubWF4KG1GcmFtZS5yaWdodCAtIG1PdmVyc2NhbkZyYW1lLnJpZ2h0LCAwKSwKLSAgICAgICAgICAgICAgICBNYXRoLm1heChtRnJhbWUuYm90dG9tIC0gbU92ZXJzY2FuRnJhbWUuYm90dG9tLCAwKSk7CisgICAgICAgIG1PdmVyc2Nhbkluc2V0cy5zZXQoTWF0aC5tYXgobU92ZXJzY2FuRnJhbWUubGVmdCAtIGZyYW1lLmxlZnQsIDApLAorICAgICAgICAgICAgICAgIE1hdGgubWF4KG1PdmVyc2NhbkZyYW1lLnRvcCAtIGZyYW1lLnRvcCwgMCksCisgICAgICAgICAgICAgICAgTWF0aC5tYXgoZnJhbWUucmlnaHQgLSBtT3ZlcnNjYW5GcmFtZS5yaWdodCwgMCksCisgICAgICAgICAgICAgICAgTWF0aC5tYXgoZnJhbWUuYm90dG9tIC0gbU92ZXJzY2FuRnJhbWUuYm90dG9tLCAwKSk7CiAKLSAgICAgICAgbUNvbnRlbnRJbnNldHMuc2V0KG1Db250ZW50RnJhbWUubGVmdCAtIG1GcmFtZS5sZWZ0LAotICAgICAgICAgICAgICAgIG1Db250ZW50RnJhbWUudG9wIC0gbUZyYW1lLnRvcCwKLSAgICAgICAgICAgICAgICBtRnJhbWUucmlnaHQgLSBtQ29udGVudEZyYW1lLnJpZ2h0LAotICAgICAgICAgICAgICAgIG1GcmFtZS5ib3R0b20gLSBtQ29udGVudEZyYW1lLmJvdHRvbSk7CisgICAgICAgIG1Db250ZW50SW5zZXRzLnNldChtQ29udGVudEZyYW1lLmxlZnQgLSBmcmFtZS5sZWZ0LAorICAgICAgICAgICAgICAgIG1Db250ZW50RnJhbWUudG9wIC0gZnJhbWUudG9wLAorICAgICAgICAgICAgICAgIGZyYW1lLnJpZ2h0IC0gbUNvbnRlbnRGcmFtZS5yaWdodCwKKyAgICAgICAgICAgICAgICBmcmFtZS5ib3R0b20gLSBtQ29udGVudEZyYW1lLmJvdHRvbSk7CiAKLSAgICAgICAgbVZpc2libGVJbnNldHMuc2V0KG1WaXNpYmxlRnJhbWUubGVmdCAtIG1GcmFtZS5sZWZ0LAotICAgICAgICAgICAgICAgIG1WaXNpYmxlRnJhbWUudG9wIC0gbUZyYW1lLnRvcCwKLSAgICAgICAgICAgICAgICBtRnJhbWUucmlnaHQgLSBtVmlzaWJsZUZyYW1lLnJpZ2h0LAotICAgICAgICAgICAgICAgIG1GcmFtZS5ib3R0b20gLSBtVmlzaWJsZUZyYW1lLmJvdHRvbSk7CisgICAgICAgIG1WaXNpYmxlSW5zZXRzLnNldChtVmlzaWJsZUZyYW1lLmxlZnQgLSBmcmFtZS5sZWZ0LAorICAgICAgICAgICAgICAgIG1WaXNpYmxlRnJhbWUudG9wIC0gZnJhbWUudG9wLAorICAgICAgICAgICAgICAgIGZyYW1lLnJpZ2h0IC0gbVZpc2libGVGcmFtZS5yaWdodCwKKyAgICAgICAgICAgICAgICBmcmFtZS5ib3R0b20gLSBtVmlzaWJsZUZyYW1lLmJvdHRvbSk7CiAKLSAgICAgICAgbVN0YWJsZUluc2V0cy5zZXQoTWF0aC5tYXgobVN0YWJsZUZyYW1lLmxlZnQgLSBtRnJhbWUubGVmdCwgMCksCi0gICAgICAgICAgICAgICAgTWF0aC5tYXgobVN0YWJsZUZyYW1lLnRvcCAtIG1GcmFtZS50b3AsIDApLAotICAgICAgICAgICAgICAgIE1hdGgubWF4KG1GcmFtZS5yaWdodCAtIG1TdGFibGVGcmFtZS5yaWdodCwgMCksCi0gICAgICAgICAgICAgICAgTWF0aC5tYXgobUZyYW1lLmJvdHRvbSAtIG1TdGFibGVGcmFtZS5ib3R0b20sIDApKTsKKyAgICAgICAgaWYgKG1BdHRycy50eXBlID09IFRZUEVfRE9DS19ESVZJREVSKSB7CiAKKyAgICAgICAgICAgIC8vIEZvciB0aGUgZG9ja2VkIGRpdmlkZXIsIHdlIGNhbGN1bGF0ZSB0aGUgc3RhYmxlIGluc2V0cyBsaWtlIGEgZnVsbC1zY3JlZW4gd2luZG93CisgICAgICAgICAgICAvLyBzbyBpdCBjYW4gdXNlIGl0IHRvIGNhbGN1bGF0ZSB0aGUgc25hcCBwb3NpdGlvbnMuCisgICAgICAgICAgICBtU3RhYmxlSW5zZXRzLnNldChNYXRoLm1heChtU3RhYmxlRnJhbWUubGVmdCAtIG1EaXNwbGF5RnJhbWUubGVmdCwgMCksCisgICAgICAgICAgICAgICAgICAgIE1hdGgubWF4KG1TdGFibGVGcmFtZS50b3AgLSBtRGlzcGxheUZyYW1lLnRvcCwgMCksCisgICAgICAgICAgICAgICAgICAgIE1hdGgubWF4KG1EaXNwbGF5RnJhbWUucmlnaHQgLSBtU3RhYmxlRnJhbWUucmlnaHQsIDApLAorICAgICAgICAgICAgICAgICAgICBNYXRoLm1heChtRGlzcGxheUZyYW1lLmJvdHRvbSAtIG1TdGFibGVGcmFtZS5ib3R0b20sIDApKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1TdGFibGVJbnNldHMuc2V0KE1hdGgubWF4KG1TdGFibGVGcmFtZS5sZWZ0IC0gZnJhbWUubGVmdCwgMCksCisgICAgICAgICAgICAgICAgICAgIE1hdGgubWF4KG1TdGFibGVGcmFtZS50b3AgLSBmcmFtZS50b3AsIDApLAorICAgICAgICAgICAgICAgICAgICBNYXRoLm1heChmcmFtZS5yaWdodCAtIG1TdGFibGVGcmFtZS5yaWdodCwgMCksCisgICAgICAgICAgICAgICAgICAgIE1hdGgubWF4KGZyYW1lLmJvdHRvbSAtIG1TdGFibGVGcmFtZS5ib3R0b20sIDApKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghbUluc2V0RnJhbWUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBtQ29udGVudEZyYW1lLnNldChtRnJhbWUpOworICAgICAgICAgICAgbUNvbnRlbnRGcmFtZS50b3AgKz0gbUNvbnRlbnRJbnNldHMudG9wOworICAgICAgICAgICAgbUNvbnRlbnRGcmFtZS5ib3R0b20gKz0gbUNvbnRlbnRJbnNldHMuYm90dG9tOworICAgICAgICAgICAgbUNvbnRlbnRGcmFtZS5sZWZ0ICs9IG1Db250ZW50SW5zZXRzLmxlZnQ7CisgICAgICAgICAgICBtQ29udGVudEZyYW1lLnJpZ2h0ICs9IG1Db250ZW50SW5zZXRzLnJpZ2h0OworICAgICAgICAgICAgbVZpc2libGVGcmFtZS5zZXQobUZyYW1lKTsKKyAgICAgICAgICAgIG1WaXNpYmxlRnJhbWUudG9wICs9IG1WaXNpYmxlSW5zZXRzLnRvcDsKKyAgICAgICAgICAgIG1WaXNpYmxlRnJhbWUuYm90dG9tICs9IG1WaXNpYmxlSW5zZXRzLmJvdHRvbTsKKyAgICAgICAgICAgIG1WaXNpYmxlRnJhbWUubGVmdCArPSBtVmlzaWJsZUluc2V0cy5sZWZ0OworICAgICAgICAgICAgbVZpc2libGVGcmFtZS5yaWdodCArPSBtVmlzaWJsZUluc2V0cy5yaWdodDsKKyAgICAgICAgICAgIG1TdGFibGVGcmFtZS5zZXQobUZyYW1lKTsKKyAgICAgICAgICAgIG1TdGFibGVGcmFtZS50b3AgKz0gbVN0YWJsZUluc2V0cy50b3A7CisgICAgICAgICAgICBtU3RhYmxlRnJhbWUuYm90dG9tICs9IG1TdGFibGVJbnNldHMuYm90dG9tOworICAgICAgICAgICAgbVN0YWJsZUZyYW1lLmxlZnQgKz0gbVN0YWJsZUluc2V0cy5sZWZ0OworICAgICAgICAgICAgbVN0YWJsZUZyYW1lLnJpZ2h0ICs9IG1TdGFibGVJbnNldHMucmlnaHQ7CisgICAgICAgIH0KICAgICAgICAgbUNvbXBhdEZyYW1lLnNldChtRnJhbWUpOwogICAgICAgICBpZiAobUVuZm9yY2VTaXplQ29tcGF0KSB7CiAgICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIHNpemUgY29tcGF0aWJpbGl0eSBzY2FsZSBiZWluZyBhcHBsaWVkIHRvIHRoZQpAQCAtMTIwNCw5ICsxMjU5LDkgQEAKICAgICAgKiBzZW5zZSB0byBjYWxsIGZyb20gcGVyZm9ybUxheW91dEFuZFBsYWNlU3VyZmFjZXNMb2NrZWRJbm5lcigpLikKICAgICAgKi8KICAgICBib29sZWFuIGhhc01vdmVkKCkgewotICAgICAgICByZXR1cm4gbUhhc1N1cmZhY2UgJiYgbUNvbnRlbnRDaGFuZ2VkICYmICFtRXhpdGluZyAmJiAhbVdpbkFuaW1hdG9yLm1MYXN0SGlkZGVuCi0gICAgICAgICAgICAgICAgJiYgbVNlcnZpY2Uub2tUb0Rpc3BsYXkoKSAmJiAobUZyYW1lLnRvcCAhPSBtTGFzdEZyYW1lLnRvcAotICAgICAgICAgICAgICAgICAgICAgICAgfHwgbUZyYW1lLmxlZnQgIT0gbUxhc3RGcmFtZS5sZWZ0KQorICAgICAgICByZXR1cm4gbUhhc1N1cmZhY2UgJiYgKG1Db250ZW50Q2hhbmdlZCB8fCBtTW92ZWRCeVJlc2l6ZSkKKyAgICAgICAgICAgICAgICAmJiAhbUV4aXRpbmcgJiYgIW1XaW5BbmltYXRvci5tTGFzdEhpZGRlbiAmJiBtU2VydmljZS5va1RvRGlzcGxheSgpCisgICAgICAgICAgICAgICAgJiYgKG1GcmFtZS50b3AgIT0gbUxhc3RGcmFtZS50b3AgfHwgbUZyYW1lLmxlZnQgIT0gbUxhc3RGcmFtZS5sZWZ0KQogICAgICAgICAgICAgICAgICYmIChtQXR0YWNoZWRXaW5kb3cgPT0gbnVsbCB8fCAhbUF0dGFjaGVkV2luZG93Lmhhc01vdmVkKCkpOwogICAgIH0KIApAQCAtMTU1MiwxMiArMTYwNyw3IEBACiAgICAgICAgIHJldHVybiBpc1Zpc2libGVPckFkZGluZygpCiAgICAgICAgICAgICAgICAgJiYgKG1WaWV3VmlzaWJpbGl0eSA9PSBWaWV3LlZJU0lCTEUpCiAgICAgICAgICAgICAgICAgJiYgKChtQXR0cnMuZmxhZ3MgJiBXaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5GTEFHX05PVF9GT0NVU0FCTEUpID09IDApCi0gICAgICAgICAgICAgICAgJiYgc3RhY2tDYW5SZWNlaXZlS2V5cygpOwotICAgIH0KLQotICAgIGJvb2xlYW4gc3RhY2tDYW5SZWNlaXZlS2V5cygpIHsKLSAgICAgICAgZmluYWwgVGFza1N0YWNrIHN0YWNrID0gZ2V0U3RhY2soKTsKLSAgICAgICAgcmV0dXJuIHN0YWNrICE9IG51bGwgJiYgU3RhY2tJZC5jYW5SZWNlaXZlS2V5cyhzdGFjay5tU3RhY2tJZCk7CisgICAgICAgICAgICAgICAgJiYgKG1BcHBUb2tlbiA9PSBudWxsIHx8IG1BcHBUb2tlbi53aW5kb3dzQXJlRm9jdXNhYmxlKCkpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpAQCAtMTk0OSw4ICsxOTk5LDggQEAKICAgICAgICAgLy8gaXNEcmFnUmVzaXppbmcoKSBvciBpc0RyYWdSZXNpemVDaGFuZ2VkKCkgaXMgdHJ1ZS4KICAgICAgICAgYm9vbGVhbiByZXNpemluZyA9IGlzRHJhZ1Jlc2l6aW5nKCkgfHwgaXNEcmFnUmVzaXplQ2hhbmdlZCgpOwogICAgICAgICBmaW5hbCBSZWN0IGJhY2tEcm9wRnJhbWUgPSAoaW5GcmVlZm9ybVdvcmtzcGFjZSgpIHx8ICFyZXNpemluZykgPyBmcmFtZSA6IG1UbXBSZWN0OwotICAgICAgICBtQ2xpZW50LnJlc2l6ZWQoZnJhbWUsIG92ZXJzY2FuSW5zZXRzLCBjb250ZW50SW5zZXRzLCB2aXNpYmxlSW5zZXRzLCBzdGFibGVJbnNldHMsCi0gICAgICAgICAgICAgICAgb3V0c2V0cywgcmVwb3J0RHJhdywgbmV3Q29uZmlnLCBiYWNrRHJvcEZyYW1lKTsKKyAgICAgICAgbUNsaWVudC5yZXNpemVkKGZyYW1lLCBvdmVyc2Nhbkluc2V0cywgY29udGVudEluc2V0cywgdmlzaWJsZUluc2V0cywgc3RhYmxlSW5zZXRzLCBvdXRzZXRzLAorICAgICAgICAgICAgICAgIHJlcG9ydERyYXcsIG5ld0NvbmZpZywgYmFja0Ryb3BGcmFtZSk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgcmVnaXN0ZXJGb2N1c09ic2VydmVyKElXaW5kb3dGb2N1c09ic2VydmVyIG9ic2VydmVyKSB7CkBAIC0xOTk3LDcgKzIwNDcsMTMgQEAKICAgICAgICAgaWYgKHRhc2suaXNEcmFnUmVzaXppbmcoKSkgewogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1EaXNwbGF5Q29udGVudC5tRGl2aWRlckNvbnRyb2xsZXJMb2NrZWQuaXNSZXNpemluZygpICYmCisKKyAgICAgICAgLy8gSWYgdGhlIGJvdW5kcyBhcmUgY3VycmVudGx5IGZyb3plbiwgaXQgbWVhbnMgdGhhdCB0aGUgbGF5b3V0IHNpemUgdGhhdCB0aGUgYXBwIHNlZXMKKyAgICAgICAgLy8gYW5kIHRoZSBib3VuZHMgd2UgY2xpcCB0aGlzIHdpbmRvdyB0byBtaWdodCBiZSBkaWZmZXJlbnQuIEluIG9yZGVyIHRvIGF2b2lkIGhvbGVzLCB3ZQorICAgICAgICAvLyBzaW11bGF0ZSB0aGF0IHdlIGFyZSBzdGlsbCByZXNpemluZyBzbyB0aGUgYXBwIGZpbGxzIHRoZSBob2xlIHdpdGggdGhlIHJlc2l6aW5nCisgICAgICAgIC8vIGJhY2tncm91bmQuCisgICAgICAgIHJldHVybiAobURpc3BsYXlDb250ZW50Lm1EaXZpZGVyQ29udHJvbGxlckxvY2tlZC5pc1Jlc2l6aW5nKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1BcHBUb2tlbiAhPSBudWxsICYmICFtQXBwVG9rZW4ubUZyb3plbkJvdW5kcy5pc0VtcHR5KCkpICYmCiAgICAgICAgICAgICAgICAgIXRhc2suaW5GcmVlZm9ybVdvcmtzcGFjZSgpICYmICF0YXNrLmlzRnVsbHNjcmVlbigpOwogICAgIH0KIApAQCAtMjI3Niw3ICsyMzMyLDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIGlmIChub25GdWxsc2NyZWVuVGFzaykgewotICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHdpbmRvdyBmaXRzIGluIGNvbnRhaW5pbmcgZnJhbWUgc2luY2UgaXQgaXMgaW4gYSBub24tZnVsbHNjcmVlbiBzdGFjayBhcworICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHdpbmRvdyBmaXRzIGluIGNvbnRhaW5pbmcgZnJhbWUgc2luY2UgaXQgaXMgaW4gYSBub24tZnVsbHNjcmVlbiB0YXNrIGFzCiAgICAgICAgICAgICAvLyByZXF1aXJlZCBieSB7QGxpbmsgR3Jhdml0eSNhcHBseX0gY2FsbC4KICAgICAgICAgICAgIHcgPSBNYXRoLm1pbih3LCBwdyk7CiAgICAgICAgICAgICBoID0gTWF0aC5taW4oaCwgcGgpOwpAQCAtMjI5NiwxMCArMjM1MiwyMSBAQAogICAgIH0KIAogICAgIHZvaWQgc2V0UmVwbGFjaW5nKGJvb2xlYW4gYW5pbWF0ZSkgewotICAgICAgICBpZiAoKG1BdHRycy5wcml2YXRlRmxhZ3MgJiBQUklWQVRFX0ZMQUdfV0lMTF9OT1RfUkVQTEFDRV9PTl9SRUxBVU5DSCkgPT0gMCkgewotICAgICAgICAgICAgbVdpbGxSZXBsYWNlV2luZG93ID0gdHJ1ZTsKLSAgICAgICAgICAgIG1SZXBsYWNpbmdXaW5kb3cgPSBudWxsOwotICAgICAgICAgICAgbUFuaW1hdGVSZXBsYWNpbmdXaW5kb3cgPSBhbmltYXRlOworICAgICAgICBpZiAoKG1BdHRycy5wcml2YXRlRmxhZ3MgJiBQUklWQVRFX0ZMQUdfV0lMTF9OT1RfUkVQTEFDRV9PTl9SRUxBVU5DSCkgIT0gMAorICAgICAgICAgICAgICAgIHx8IG1BdHRycy50eXBlID09IFRZUEVfQVBQTElDQVRJT05fU1RBUlRJTkcpIHsKKyAgICAgICAgICAgIC8vIFdlIGRvbid0IHNldCByZXBsYWNpbmcgb24gc3RhcnRpbmcgd2luZG93cyBzaW5jZSB0aGV5IGFyZSBhZGRlZCBieSB3aW5kb3cgbWFuYWdlciBhbmQKKyAgICAgICAgICAgIC8vIG5vdCB0aGUgY2xpZW50IHNvIHdvbid0IGJlIHJlcGxhY2VkIGJ5IHRoZSBjbGllbnQuCisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKworICAgICAgICBtV2lsbFJlcGxhY2VXaW5kb3cgPSB0cnVlOworICAgICAgICBtUmVwbGFjaW5nV2luZG93ID0gbnVsbDsKKyAgICAgICAgbUFuaW1hdGVSZXBsYWNpbmdXaW5kb3cgPSBhbmltYXRlOworICAgIH0KKworICAgIHZvaWQgcmVzZXRSZXBsYWNpbmcoKSB7CisgICAgICAgIG1XaWxsUmVwbGFjZVdpbmRvdyA9IGZhbHNlOworICAgICAgICBtUmVwbGFjaW5nV2luZG93ID0gbnVsbDsKKyAgICAgICAgbUFuaW1hdGVSZXBsYWNpbmdXaW5kb3cgPSBmYWxzZTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL1dpbmRvd1N0YXRlQW5pbWF0b3IuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vV2luZG93U3RhdGVBbmltYXRvci5qYXZhCmluZGV4IDc2MDVhZjAuLjgzYWIxOTAgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vV2luZG93U3RhdGVBbmltYXRvci5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vV2luZG93U3RhdGVBbmltYXRvci5qYXZhCkBAIC0zNyw2ICszNyw3IEBACiBpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuVEFHX1dNOwogaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlclNlcnZpY2UuVFlQRV9MQVlFUl9NVUxUSVBMSUVSOwogaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlclNlcnZpY2UubG9jYWxMT0dWOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93U3RhdGUuRFJBR19SRVNJWkVfTU9ERV9ET0NLRURfRElWSURFUjsKIGltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd1N0YXRlLkRSQUdfUkVTSVpFX01PREVfRlJFRUZPUk07CiBpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dTdXJmYWNlUGxhY2VyLlNFVF9PUklFTlRBVElPTl9DSEFOR0VfQ09NUExFVEU7CiBpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dTdXJmYWNlUGxhY2VyLlNFVF9UVVJOX09OX1NDUkVFTjsKQEAgLTcwNSwxNCArNzA2LDEyIEBACiAgICAgICAgIH0KIAogICAgICAgICAvLyBTb21ldGhpbmcgaXMgd3JvbmcgYW5kIFN1cmZhY2VGbGluZ2VyIHdpbGwgbm90IGxpa2UgdGhpcywgdHJ5IHRvIHJldmVydCB0byBzYW5lIHZhbHVlcy4KKyAgICAgICAgLy8gVGhpcyBkb2Vzbid0IG5lY2Vzc2FyaWx5IG1lYW4gdGhhdCB0aGVyZSBpcyBhbiBlcnJvciBpbiB0aGUgc3lzdGVtLiBUaGUgc2l6ZXMgbWlnaHQgYmUKKyAgICAgICAgLy8gaW5jb3JyZWN0LCBiZWNhdXNlIGl0IGlzIGJlZm9yZSB0aGUgZmlyc3QgbGF5b3V0IG9yIGRyYXcuCiAgICAgICAgIGlmIChtVG1wU2l6ZS53aWR0aCgpIDwgMSkgewotICAgICAgICAgICAgaWYgKCFtV2luLm1MYXlvdXROZWVkZWQpIFNsb2cudyhUQUcsCi0gICAgICAgICAgICAgICAgICAgICJXaWR0aCBvZiAiICsgdyArICIgaXMgbm90IHBvc2l0aXZlICIgKyBtVG1wU2l6ZS53aWR0aCgpKTsKICAgICAgICAgICAgIG1UbXBTaXplLnJpZ2h0ID0gbVRtcFNpemUubGVmdCArIDE7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1UbXBTaXplLmhlaWdodCgpIDwgMSkgewotICAgICAgICAgICAgaWYgKCFtV2luLm1MYXlvdXROZWVkZWQpIFNsb2cudyhUQUcsCi0gICAgICAgICAgICAgICAgICAgICJIZWlnaHQgb2YgIiArIHcgKyAiIGlzIG5vdCBwb3NpdGl2ZSAiICsgbVRtcFNpemUuaGVpZ2h0KCkpOwogICAgICAgICAgICAgbVRtcFNpemUuYm90dG9tID0gbVRtcFNpemUudG9wICsgMTsKICAgICAgICAgfQogCkBAIC0xMDY1LDcgKzEwNjQsMTYgQEAKICAgICAgICAgZmluYWwgaW50IHRvcCA9IHcubVlPZmZzZXQgKyB3Lm1GcmFtZS50b3A7CiAKICAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZGVjb3IgcmVjdCB0byB0aGUgZW50aXJlIGZyYW1lLgotICAgICAgICBtU3lzdGVtRGVjb3JSZWN0LnNldCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgaWYgKHcuaXNEcmFnUmVzaXppbmcoKSAmJiB3LmdldFJlc2l6ZU1vZGUoKSA9PSBEUkFHX1JFU0laRV9NT0RFX0RPQ0tFRF9ESVZJREVSKSB7CisKKyAgICAgICAgICAgIC8vIElmIHdlIGFyZSByZXNpemluZyB3aXRoIHRoZSBkaXZpZGVyLCB0aGUgdGFzayBib3VuZHMgbWlnaHQgYmUgc21hbGxlciB0aGFuIHRoZQorICAgICAgICAgICAgLy8gc3RhY2sgYm91bmRzLiBUaGUgc3lzdGVtIGRlY29yIGlzIHVzZWQgdG8gY2xpcCB0byB0aGUgdGFzayBib3VuZHMsIHdoaWNoIHdlIGRvbid0CisgICAgICAgICAgICAvLyB3YW50IGluIHRoaXMgY2FzZSBpbiBvcmRlciB0byBhdm9pZCBob2xlcy4KKyAgICAgICAgICAgIGZpbmFsIERpc3BsYXlJbmZvIGRpc3BsYXlJbmZvID0gdy5nZXREaXNwbGF5Q29udGVudCgpLmdldERpc3BsYXlJbmZvKCk7CisgICAgICAgICAgICBtU3lzdGVtRGVjb3JSZWN0LnNldCgwLCAwLCBkaXNwbGF5SW5mby5sb2dpY2FsV2lkdGgsIGRpc3BsYXlJbmZvLmxvZ2ljYWxIZWlnaHQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbVN5c3RlbURlY29yUmVjdC5zZXQoMCwgMCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIH0KIAogICAgICAgICAvLyBJZiBhIGZyZWVmb3JtIHdpbmRvdyBpcyBhbmltYXRpbmcgZnJvbSBhIHBvc2l0aW9uIHdoZXJlIGl0IHdvdWxkIGJlIGN1dG9mZiwgaXQgd291bGQgYmUKICAgICAgICAgLy8gY3V0b2ZmIGR1cmluZyB0aGUgYW5pbWF0aW9uLiBXZSBkb24ndCB3YW50IHRoYXQsIHNvIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFuaW1hdGlvbgpAQCAtMTE4NCwxMSArMTE5MiwxNCBAQAogICAgICAgICAvLyBXZSBkb24ndCBhcHBseSB0aGUgc3RhY2sgYm91bmRzIGNyb3AgaWY6CiAgICAgICAgIC8vIDEuIFRoZSB3aW5kb3cgaXMgY3VycmVudGx5IGFuaW1hdGluZyBkb2NrZWQgbW9kZSBvciBpbiBmcmVlZm9ybSBtb2RlLCBvdGhlcndpc2UgdGhlCiAgICAgICAgIC8vIGFuaW1hdGluZyB3aW5kb3cgd2lsbCBiZSBzdWRkZW5seSAoZG9ja2VkKSBvciBmb3Igd2hvbGUgYW5pbWF0aW9uIChmcmVlZm9ybSkgY3V0IG9mZi4KKyAgICAgICAgLy8gKE5vdGUgdGhhdCB3ZSBzdGlsbCBuZWVkIHRvIGFwcGx5IHRoZSBjcm9wIGlmIHRoZSB0YXNrIGJlaW5nIGRvY2tlZCBpcyBub24tcmVzaXplYWJsZSwKKyAgICAgICAgLy8gaW4gd2hpY2ggY2FzZSB0aGUgdGFzayBpcyBydW5uaW5nIGluIGZ1bGxzY3JlZW4gc2l6ZSBidXQgY3JvcHBlZCB0byBzdGFjayBib3VuZHMuKQogICAgICAgICAvLyAyLiBUaGUgd2luZG93IHRoYXQgaXMgYmVpbmcgcmVwbGFjZWQgZHVyaW5nIGFuaW1hdGlvbiwgYmVjYXVzZSBpdCB3YXMgbGl2aW5nIGluIGEKICAgICAgICAgLy8gZGlmZmVyZW50IHN0YWNrLiBJZiB3ZSBzdWRkZW5seSBjcm9wIGl0IHRvIHRoZSBuZXcgc3RhY2sgYm91bmRzLCBpdCBtaWdodCBnZXQgY3V0IG9mZi4KICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCBpdCB0byBoYXBwZW4sIHNvIHdlIGxldCBpdCBpZ25vcmUgdGhlIHN0YWNrIGJvdW5kcyB1bnRpbCBpdCBnZXRzIHJlbW92ZWQuCiAgICAgICAgIC8vIFRoZSB3aW5kb3cgdGhhdCB3aWxsIHJlcGxhY2UgaXQgd2lsbCBhYmlkZSB0aGVtLgotICAgICAgICBpZiAoaXNBbmltYXRpbmcoKSAmJiAody5tV2lsbFJlcGxhY2VXaW5kb3cgfHwgdy5pbkRvY2tlZFdvcmtzcGFjZSgpCisgICAgICAgIGlmIChpc0FuaW1hdGluZygpICYmICh3Lm1XaWxsUmVwbGFjZVdpbmRvdworICAgICAgICAgICAgICAgIHx8ICh3LmluRG9ja2VkV29ya3NwYWNlKCkgJiYgdGFzay5pc1Jlc2l6ZWFibGUoKSkKICAgICAgICAgICAgICAgICB8fCB3LmluRnJlZWZvcm1Xb3Jrc3BhY2UoKSkpIHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9XaW5kb3dTdXJmYWNlUGxhY2VyLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL1dpbmRvd1N1cmZhY2VQbGFjZXIuamF2YQppbmRleCBjYmZiMjAxLi5mZWVhYjI3IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL1dpbmRvd1N1cmZhY2VQbGFjZXIuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL1dpbmRvd1N1cmZhY2VQbGFjZXIuamF2YQpAQCAtNzA5LDYgKzcwOSw3IEBACiAKICAgICAgICAgICAgICAgICAvL1Nsb2cuaShUQUdfV00sICJXaW5kb3cgIiArIHRoaXMgKyAiIGNsZWFyaW5nIG1Db250ZW50Q2hhbmdlZCAtIGRvbmUgcGxhY2luZyIpOwogICAgICAgICAgICAgICAgIHcubUNvbnRlbnRDaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgdy5tTW92ZWRCeVJlc2l6ZSA9IGZhbHNlOwogCiAgICAgICAgICAgICAgICAgLy8gTW92ZWQgZnJvbSB1cGRhdGVXaW5kb3dzQW5kV2FsbHBhcGVyTG9ja2VkKCkuCiAgICAgICAgICAgICAgICAgaWYgKHcubUhhc1N1cmZhY2UpIHsKQEAgLTczOCwxMyArNzM5LDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICAgICAqIFVwZGF0ZXMgdGhlIHNob3duIGZyYW1lIGJlZm9yZSB3ZSBzZXQgdXAgdGhlIHN1cmZhY2UuIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2UKLSAgICAgICAgICAgICAgICAgICAgICogdGhlIHJlc2l6aW5nIGNvdWxkIGNoYW5nZSB0aGUgdG9wLWxlZnQgcG9zaXRpb24gKGluIGFkZGl0aW9uIHRvIHNpemUpIG9mIHRoZQotICAgICAgICAgICAgICAgICAgICAgKiB3aW5kb3cuIHNldFN1cmZhY2VCb3VuZGFyaWVzTG9ja2VkIHVzZXMgbVNob3duUG9zaXRpb24gdG8gcG9zaXRpb24gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgKiBzdXJmYWNlLgotICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgd2luQW5pbWF0b3IuY29tcHV0ZVNob3duRnJhbWVMb2NrZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF3aW5BbmltYXRvci5pc0FuaW1hdGluZygpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGVzIHRoZSBzaG93biBmcmFtZSBiZWZvcmUgd2Ugc2V0IHVwIHRoZSBzdXJmYWNlLiBUaGlzIGlzIG5lZWRlZAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGUgcmVzaXppbmcgY291bGQgY2hhbmdlIHRoZSB0b3AtbGVmdCBwb3NpdGlvbiAoaW4gYWRkaXRpb24gdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpemUpIG9mIHRoZSB3aW5kb3cuIHNldFN1cmZhY2VCb3VuZGFyaWVzTG9ja2VkIHVzZXMgbVNob3duUG9zaXRpb24gdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBvc2l0aW9uIHRoZSBzdXJmYWNlLiBXZSBvbmx5IGFwcGx5IGl0IHRvIHdpbmRvd3MgdGhhdCBhcmVuJ3QgYW5pbWF0aW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmVjYXVzZSB3ZSBkZXBlbmQgb24gdGhlIGFuaW1hdGlvbiB0byBjYWxjdWxhdGUgdGhlIGNvcnJlY3Qgc2hvd24gZnJhbWUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9uIHRoZSBuZXh0IGFuaW1hdGlvbiBzdGVwLgorICAgICAgICAgICAgICAgICAgICAgICAgd2luQW5pbWF0b3IuY29tcHV0ZVNob3duRnJhbWVMb2NrZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB3aW5BbmltYXRvci5zZXRTdXJmYWNlQm91bmRhcmllc0xvY2tlZChyZWNvdmVyaW5nTWVtb3J5KTsKICAgICAgICAgICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvam5pL2NvbV9hbmRyb2lkX3NlcnZlcl9pbnB1dF9JbnB1dE1hbmFnZXJTZXJ2aWNlLmNwcCBiL3NlcnZpY2VzL2NvcmUvam5pL2NvbV9hbmRyb2lkX3NlcnZlcl9pbnB1dF9JbnB1dE1hbmFnZXJTZXJ2aWNlLmNwcAppbmRleCA0Yzg0NzRhLi5hNTIzN2NhIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2puaS9jb21fYW5kcm9pZF9zZXJ2ZXJfaW5wdXRfSW5wdXRNYW5hZ2VyU2VydmljZS5jcHAKKysrIGIvc2VydmljZXMvY29yZS9qbmkvY29tX2FuZHJvaWRfc2VydmVyX2lucHV0X0lucHV0TWFuYWdlclNlcnZpY2UuY3BwCkBAIC0yMDcsNiArMjA3LDcgQEAKICAgICB2b2lkIHNldFBvaW50ZXJJY29uU2hhcGUoaW50MzJfdCBpY29uSWQpOwogICAgIHZvaWQgcmVsb2FkUG9pbnRlckljb25zKCk7CiAgICAgdm9pZCBzZXRDdXN0b21Qb2ludGVySWNvbihjb25zdCBTcHJpdGVJY29uJiBpY29uKTsKKyAgICB2b2lkIHNldFBvaW50ZXJJY29uRGV0YWNoZWQoYm9vbCBkZXRhY2hlZCk7CiAKICAgICAvKiAtLS0gSW5wdXRSZWFkZXJQb2xpY3lJbnRlcmZhY2UgaW1wbGVtZW50YXRpb24gLS0tICovCiAKQEAgLTcxMSw2ICs3MTIsMTQgQEAKICAgICBtSW5wdXRNYW5hZ2VyLT5nZXREaXNwYXRjaGVyKCktPnNldEZvY3VzZWRBcHBsaWNhdGlvbihhcHBsaWNhdGlvbkhhbmRsZSk7CiB9CiAKK3ZvaWQgTmF0aXZlSW5wdXRNYW5hZ2VyOjpzZXRQb2ludGVySWNvbkRldGFjaGVkKGJvb2wgZGV0YWNoZWQpIHsKKyAgICBBdXRvTXV0ZXggX2wobUxvY2spOworICAgIHNwPFBvaW50ZXJDb250cm9sbGVyPiBjb250cm9sbGVyID0gbUxvY2tlZC5wb2ludGVyQ29udHJvbGxlci5wcm9tb3RlKCk7CisgICAgaWYgKGNvbnRyb2xsZXIgIT0gTlVMTCkgeworICAgICAgICBjb250cm9sbGVyLT5kZXRhY2hQb2ludGVySWNvbihkZXRhY2hlZCk7CisgICAgfQorfQorCiB2b2lkIE5hdGl2ZUlucHV0TWFuYWdlcjo6c2V0SW5wdXREaXNwYXRjaE1vZGUoYm9vbCBlbmFibGVkLCBib29sIGZyb3plbikgewogICAgIG1JbnB1dE1hbmFnZXItPmdldERpc3BhdGNoZXIoKS0+c2V0SW5wdXREaXNwYXRjaE1vZGUoZW5hYmxlZCwgZnJvemVuKTsKIH0KQEAgLTEzMTcsNiArMTMyNiwxMiBAQAogICAgIGltLT5zZXRGb2N1c2VkQXBwbGljYXRpb24oZW52LCBhcHBsaWNhdGlvbkhhbmRsZU9iaik7CiB9CiAKK3N0YXRpYyB2b2lkIG5hdGl2ZVNldFBvaW50ZXJJY29uRGV0YWNoZWQoSk5JRW52KiBlbnYsIGpjbGFzcyAvKiBjbGF6eiAqLywgamxvbmcgcHRyLAorICAgICAgICBqYm9vbGVhbiBkZXRhY2hlZCkgeworICAgIE5hdGl2ZUlucHV0TWFuYWdlciogaW0gPSByZWludGVycHJldF9jYXN0PE5hdGl2ZUlucHV0TWFuYWdlcio+KHB0cik7CisgICAgaW0tPnNldFBvaW50ZXJJY29uRGV0YWNoZWQoZGV0YWNoZWQpOworfQorCiBzdGF0aWMgdm9pZCBuYXRpdmVTZXRJbnB1dERpc3BhdGNoTW9kZShKTklFbnYqIC8qIGVudiAqLywKICAgICAgICAgamNsYXNzIC8qIGNsYXp6ICovLCBqbG9uZyBwdHIsIGpib29sZWFuIGVuYWJsZWQsIGpib29sZWFuIGZyb3plbikgewogICAgIE5hdGl2ZUlucHV0TWFuYWdlciogaW0gPSByZWludGVycHJldF9jYXN0PE5hdGl2ZUlucHV0TWFuYWdlcio+KHB0cik7CkBAIC0xNDk3LDYgKzE1MTIsOCBAQAogICAgICAgICAgICAgKHZvaWQqKSBuYXRpdmVTZXRJbnB1dFdpbmRvd3MgfSwKICAgICB7ICJuYXRpdmVTZXRGb2N1c2VkQXBwbGljYXRpb24iLCAiKEpMY29tL2FuZHJvaWQvc2VydmVyL2lucHV0L0lucHV0QXBwbGljYXRpb25IYW5kbGU7KVYiLAogICAgICAgICAgICAgKHZvaWQqKSBuYXRpdmVTZXRGb2N1c2VkQXBwbGljYXRpb24gfSwKKyAgICB7ICJuYXRpdmVTZXRQb2ludGVySWNvbkRldGFjaGVkIiwgIihKWilWIiwKKyAgICAgICAgICAgICh2b2lkKikgbmF0aXZlU2V0UG9pbnRlckljb25EZXRhY2hlZCB9LAogICAgIHsgIm5hdGl2ZVNldElucHV0RGlzcGF0Y2hNb2RlIiwgIihKWlopViIsCiAgICAgICAgICAgICAodm9pZCopIG5hdGl2ZVNldElucHV0RGlzcGF0Y2hNb2RlIH0sCiAgICAgeyAibmF0aXZlU2V0U3lzdGVtVWlWaXNpYmlsaXR5IiwgIihKSSlWIiwKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2RldmljZXBvbGljeS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9kZXZpY2Vwb2xpY3kvRGV2aWNlUG9saWN5TWFuYWdlclNlcnZpY2UuamF2YSBiL3NlcnZpY2VzL2RldmljZXBvbGljeS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9kZXZpY2Vwb2xpY3kvRGV2aWNlUG9saWN5TWFuYWdlclNlcnZpY2UuamF2YQppbmRleCAyMDgyOTExLi41M2VkYzc4OSAxMDA2NDQKLS0tIGEvc2VydmljZXMvZGV2aWNlcG9saWN5L2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2RldmljZXBvbGljeS9EZXZpY2VQb2xpY3lNYW5hZ2VyU2VydmljZS5qYXZhCisrKyBiL3NlcnZpY2VzL2RldmljZXBvbGljeS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9kZXZpY2Vwb2xpY3kvRGV2aWNlUG9saWN5TWFuYWdlclNlcnZpY2UuamF2YQpAQCAtNDI0LDYgKzQyNCw4IEBACiAgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdfUEFDS0FHRV9MSVNUX0lURU0gID0gIml0ZW0iOwogICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHX0tFRVBfVU5JTlNUQUxMRURfUEFDS0FHRVMgID0gImtlZXAtdW5pbnN0YWxsZWQtcGFja2FnZXMiOwogICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHX1VTRVJfUkVTVFJJQ1RJT05TID0gInVzZXItcmVzdHJpY3Rpb25zIjsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBR19TSE9SVF9TVVBQT1JUX01FU1NBR0UgPSAic2hvcnQtc3VwcG9ydC1tZXNzYWdlIjsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBR19MT05HX1NVUFBPUlRfTUVTU0FHRSA9ICJsb25nLXN1cHBvcnQtbWVzc2FnZSI7CiAKICAgICAgICAgZmluYWwgRGV2aWNlQWRtaW5JbmZvIGluZm87CiAKQEAgLTUwOSw2ICs1MTEsMTAgQEAKIAogICAgICAgICBCdW5kbGUgdXNlclJlc3RyaWN0aW9uczsKIAorICAgICAgICAvLyBTdXBwb3J0IHRleHQgcHJvdmlkZWQgYnkgdGhlIGFkbWluIHRvIGRpc3BsYXkgdG8gdGhlIHVzZXIuCisgICAgICAgIFN0cmluZyBzaG9ydFN1cHBvcnRNZXNzYWdlID0gbnVsbDsKKyAgICAgICAgU3RyaW5nIGxvbmdTdXBwb3J0TWVzc2FnZSA9IG51bGw7CisKICAgICAgICAgQWN0aXZlQWRtaW4oRGV2aWNlQWRtaW5JbmZvIF9pbmZvKSB7CiAgICAgICAgICAgICBpbmZvID0gX2luZm87CiAgICAgICAgIH0KQEAgLTY4OCw2ICs2OTQsMTYgQEAKICAgICAgICAgICAgICAgICBVc2VyUmVzdHJpY3Rpb25zVXRpbHMud3JpdGVSZXN0cmljdGlvbnMoCiAgICAgICAgICAgICAgICAgICAgICAgICBvdXQsIHVzZXJSZXN0cmljdGlvbnMsIFRBR19VU0VSX1JFU1RSSUNUSU9OUyk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIVRleHRVdGlscy5pc0VtcHR5KHNob3J0U3VwcG9ydE1lc3NhZ2UpKSB7CisgICAgICAgICAgICAgICAgb3V0LnN0YXJ0VGFnKG51bGwsIFRBR19TSE9SVF9TVVBQT1JUX01FU1NBR0UpOworICAgICAgICAgICAgICAgIG91dC50ZXh0KHNob3J0U3VwcG9ydE1lc3NhZ2UpOworICAgICAgICAgICAgICAgIG91dC5lbmRUYWcobnVsbCwgVEFHX1NIT1JUX1NVUFBPUlRfTUVTU0FHRSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIVRleHRVdGlscy5pc0VtcHR5KGxvbmdTdXBwb3J0TWVzc2FnZSkpIHsKKyAgICAgICAgICAgICAgICBvdXQuc3RhcnRUYWcobnVsbCwgVEFHX0xPTkdfU1VQUE9SVF9NRVNTQUdFKTsKKyAgICAgICAgICAgICAgICBvdXQudGV4dChsb25nU3VwcG9ydE1lc3NhZ2UpOworICAgICAgICAgICAgICAgIG91dC5lbmRUYWcobnVsbCwgVEFHX0xPTkdfU1VQUE9SVF9NRVNTQUdFKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgd3JpdGVQYWNrYWdlTGlzdFRvWG1sKFhtbFNlcmlhbGl6ZXIgb3V0LCBTdHJpbmcgb3V0ZXJUYWcsCkBAIC04MDEsNiArODE3LDIwIEBACiAgICAgICAgICAgICAgICAgICAgIGtlZXBVbmluc3RhbGxlZFBhY2thZ2VzID0gcmVhZFBhY2thZ2VMaXN0KHBhcnNlciwgdGFnKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFRBR19VU0VSX1JFU1RSSUNUSU9OUy5lcXVhbHModGFnKSkgewogICAgICAgICAgICAgICAgICAgICBVc2VyUmVzdHJpY3Rpb25zVXRpbHMucmVhZFJlc3RyaWN0aW9ucyhwYXJzZXIsIGVuc3VyZVVzZXJSZXN0cmljdGlvbnMoKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChUQUdfU0hPUlRfU1VQUE9SVF9NRVNTQUdFLmVxdWFscyh0YWcpKSB7CisgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBwYXJzZXIubmV4dCgpOworICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBYbWxQdWxsUGFyc2VyLlRFWFQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0U3VwcG9ydE1lc3NhZ2UgPSBwYXJzZXIuZ2V0VGV4dCgpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgTG9nLncoTE9HX1RBRywgIk1pc3NpbmcgdGV4dCB3aGVuIGxvYWRpbmcgc2hvcnQgc3VwcG9ydCBtZXNzYWdlIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFRBR19MT05HX1NVUFBPUlRfTUVTU0FHRS5lcXVhbHModGFnKSkgeworICAgICAgICAgICAgICAgICAgICB0eXBlID0gcGFyc2VyLm5leHQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gWG1sUHVsbFBhcnNlci5URVhUKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsb25nU3VwcG9ydE1lc3NhZ2UgPSBwYXJzZXIuZ2V0VGV4dCgpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgTG9nLncoTE9HX1RBRywgIk1pc3NpbmcgdGV4dCB3aGVuIGxvYWRpbmcgbG9uZyBzdXBwb3J0IG1lc3NhZ2UiKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIFNsb2cudyhMT0dfVEFHLCAiVW5rbm93biBhZG1pbiB0YWc6ICIgKyB0YWcpOwogICAgICAgICAgICAgICAgICAgICBYbWxVdGlscy5za2lwQ3VycmVudFRhZyhwYXJzZXIpOwpAQCAtMTU5OSw2ICsxNjI5LDIzIEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICAvKioKKyAgICAgKiBGaW5kIHRoZSBhZG1pbiBmb3IgdGhlIGNvbXBvbmVudCBhbmQgdXNlcklkIGJpdCBvZiB0aGUgdWlkLCB0aGVuIGNoZWNrCisgICAgICogdGhlIGFkbWluJ3MgdWlkIG1hdGNoZXMgdGhlIHVpZC4KKyAgICAgKi8KKyAgICBwcml2YXRlIEFjdGl2ZUFkbWluIGdldEFjdGl2ZUFkbWluRm9yVWlkTG9ja2VkKENvbXBvbmVudE5hbWUgd2hvLCBpbnQgdWlkKSB7CisgICAgICAgIGZpbmFsIGludCB1c2VySWQgPSBVc2VySGFuZGxlLmdldFVzZXJJZCh1aWQpOworICAgICAgICBmaW5hbCBEZXZpY2VQb2xpY3lEYXRhIHBvbGljeSA9IGdldFVzZXJEYXRhKHVzZXJJZCk7CisgICAgICAgIEFjdGl2ZUFkbWluIGFkbWluID0gcG9saWN5Lm1BZG1pbk1hcC5nZXQod2hvKTsKKyAgICAgICAgaWYgKGFkbWluID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBTZWN1cml0eUV4Y2VwdGlvbigiTm8gYWN0aXZlIGFkbWluICIgKyB3aG8pOworICAgICAgICB9CisgICAgICAgIGlmIChhZG1pbi5nZXRVaWQoKSAhPSB1aWQpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBTZWN1cml0eUV4Y2VwdGlvbigiQWRtaW4gIiArIHdobyArICIgaXMgbm90IG93bmVkIGJ5IHVpZCAiICsgdWlkKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYWRtaW47CisgICAgfQorCiAgICAgcHJpdmF0ZSBBY3RpdmVBZG1pbiBnZXRBY3RpdmVBZG1pbldpdGhQb2xpY3lGb3JVaWRMb2NrZWQoQ29tcG9uZW50TmFtZSB3aG8sIGludCByZXFQb2xpY3ksCiAgICAgICAgICAgICBpbnQgdWlkKSB7CiAgICAgICAgIC8vIFRyeSB0byBmaW5kIGFuIGFkbWluIHdoaWNoIGNhbiB1c2UgcmVxUG9saWN5CkBAIC0xNjEwLDggKzE2NTcsNyBAQAogICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZWN1cml0eUV4Y2VwdGlvbigiTm8gYWN0aXZlIGFkbWluICIgKyB3aG8pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGFkbWluLmdldFVpZCgpICE9IHVpZCkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZWN1cml0eUV4Y2VwdGlvbigiQWRtaW4gIiArIHdobyArICIgaXMgbm90IG93bmVkIGJ5IHVpZCAiCi0gICAgICAgICAgICAgICAgICAgICAgICArIG1JbmplY3Rvci5iaW5kZXJHZXRDYWxsaW5nVWlkKCkpOworICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZWN1cml0eUV4Y2VwdGlvbigiQWRtaW4gIiArIHdobyArICIgaXMgbm90IG93bmVkIGJ5IHVpZCAiICsgdWlkKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChpc0FjdGl2ZUFkbWluV2l0aFBvbGljeUZvclVzZXJMb2NrZWQoYWRtaW4sIHJlcVBvbGljeSwgdXNlcklkKSkgewogICAgICAgICAgICAgICAgIHJldHVybiBhZG1pbjsKQEAgLTE3NDQsNyArMTc5MCw3IEBACiAgICAgICAgIGVuZm9yY2VDcm9zc1VzZXJQZXJtaXNzaW9uKHVzZXJIYW5kbGUpOwogICAgICAgICBJbnRlbnQgcmVzb2x2ZUludGVudCA9IG5ldyBJbnRlbnQoKTsKICAgICAgICAgcmVzb2x2ZUludGVudC5zZXRDb21wb25lbnQoYWRtaW5OYW1lKTsKLSAgICAgICAgTGlzdDxSZXNvbHZlSW5mbz4gaW5mb3MgPSBtQ29udGV4dC5nZXRQYWNrYWdlTWFuYWdlcigpLnF1ZXJ5QnJvYWRjYXN0UmVjZWl2ZXJzKAorICAgICAgICBMaXN0PFJlc29sdmVJbmZvPiBpbmZvcyA9IG1Db250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCkucXVlcnlCcm9hZGNhc3RSZWNlaXZlcnNBc1VzZXIoCiAgICAgICAgICAgICAgICAgcmVzb2x2ZUludGVudCwKICAgICAgICAgICAgICAgICBQYWNrYWdlTWFuYWdlci5HRVRfTUVUQV9EQVRBIHwgUGFja2FnZU1hbmFnZXIuR0VUX0RJU0FCTEVEX1VOVElMX1VTRURfQ09NUE9ORU5UUywKICAgICAgICAgICAgICAgICB1c2VySGFuZGxlKTsKQEAgLTM1NzIsNyArMzYxOCw3IEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgaW50IHVpZCA9IG1Db250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCkuZ2V0UGFja2FnZVVpZCgKKyAgICAgICAgICAgICAgICBpbnQgdWlkID0gbUNvbnRleHQuZ2V0UGFja2FnZU1hbmFnZXIoKS5nZXRQYWNrYWdlVWlkQXNVc2VyKAogICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5Lm1EZWxlZ2F0ZWRDZXJ0SW5zdGFsbGVyUGFja2FnZSwgdXNlckhhbmRsZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHVpZCA9PSBjYWxsaW5nVWlkOwogICAgICAgICAgICAgfSBjYXRjaCAoTmFtZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKQEAgLTQ3MzIsNyArNDc3OCw3IEBACiAgICAgICAgIFByZWNvbmRpdGlvbnMuY2hlY2tOb3ROdWxsKHBhY2thZ2VOYW1lLCAicGFja2FnZU5hbWUgaXMgbnVsbCIpOwogICAgICAgICBmaW5hbCBpbnQgY2FsbGluZ1VpZCA9IG1JbmplY3Rvci5iaW5kZXJHZXRDYWxsaW5nVWlkKCk7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBpbnQgdWlkID0gbUNvbnRleHQuZ2V0UGFja2FnZU1hbmFnZXIoKS5nZXRQYWNrYWdlVWlkKHBhY2thZ2VOYW1lLCAwKTsKKyAgICAgICAgICAgIGludCB1aWQgPSBtQ29udGV4dC5nZXRQYWNrYWdlTWFuYWdlcigpLmdldFBhY2thZ2VVaWRBc1VzZXIocGFja2FnZU5hbWUsIDApOwogICAgICAgICAgICAgaWYgKHVpZCAhPSBjYWxsaW5nVWlkKSB7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXhjZXB0aW9uKCJJbnZhbGlkIHBhY2thZ2VOYW1lIik7CiAgICAgICAgICAgICB9CkBAIC01MjQxLDcgKzUyODcsNyBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGludCB1aWQgPSBtQ29udGV4dC5nZXRQYWNrYWdlTWFuYWdlcigpLmdldFBhY2thZ2VVaWQoCisgICAgICAgICAgICAgICAgaW50IHVpZCA9IG1Db250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCkuZ2V0UGFja2FnZVVpZEFzVXNlcigKICAgICAgICAgICAgICAgICAgICAgICAgIHBvbGljeS5tQXBwbGljYXRpb25SZXN0cmljdGlvbnNNYW5hZ2luZ1BhY2thZ2UsIHVzZXJIYW5kbGUpOwogICAgICAgICAgICAgICAgIHJldHVybiB1aWQgPT0gY2FsbGluZ1VpZDsKICAgICAgICAgICAgIH0gY2F0Y2ggKE5hbWVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CkBAIC01OTcxLDcgKzYwMTcsOSBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGFjdGl2ZUFkbWluLmdldFVpZCgpICE9IG1JbmplY3Rvci5iaW5kZXJHZXRDYWxsaW5nVWlkKCkpIHsKICAgICAgICAgICAgICAgICBtQ29udGV4dC5lbmZvcmNlQ2FsbGluZ09yU2VsZlBlcm1pc3Npb24oCi0gICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uTUFOQUdFX1BST0ZJTEVfQU5EX0RFVklDRV9PV05FUlMsIG51bGwpOworICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZC5NYW5pZmVzdC5wZXJtaXNzaW9uLk1BTkFHRV9QUk9GSUxFX0FORF9ERVZJQ0VfT1dORVJTLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNhbGxpbmcgdWlkICIgKyBtSW5qZWN0b3IuYmluZGVyR2V0Q2FsbGluZ1VpZCgpICsgIiBuZWl0aGVyIG93bnMgdGhlIGFkbWluIgorICAgICAgICAgICAgICAgICAgICAgICAgKyAiICIgKyB3aG8gKyAiIG5vciBoYXMgTUFOQUdFX1BST0ZJTEVfQU5EX0RFVklDRV9PV05FUlMgcGVybWlzc2lvbiIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGFjdGl2ZUFkbWluLnVzZXJSZXN0cmljdGlvbnM7CiAgICAgICAgIH0KQEAgLTcxMDIsNCArNzE1MCw5OSBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgc2V0U2hvcnRTdXBwb3J0TWVzc2FnZShATm9uTnVsbCBDb21wb25lbnROYW1lIHdobywgU3RyaW5nIG1lc3NhZ2UpIHsKKyAgICAgICAgaWYgKCFtSGFzRmVhdHVyZSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIFByZWNvbmRpdGlvbnMuY2hlY2tOb3ROdWxsKHdobywgIkNvbXBvbmVudE5hbWUgaXMgbnVsbCIpOworICAgICAgICBmaW5hbCBpbnQgdXNlckhhbmRsZSA9IG1JbmplY3Rvci51c2VySGFuZGxlR2V0Q2FsbGluZ1VzZXJJZCgpOworICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKKyAgICAgICAgICAgIEFjdGl2ZUFkbWluIGFkbWluID0gZ2V0QWN0aXZlQWRtaW5Gb3JVaWRMb2NrZWQod2hvLAorICAgICAgICAgICAgICAgICAgICBtSW5qZWN0b3IuYmluZGVyR2V0Q2FsbGluZ1VpZCgpKTsKKyAgICAgICAgICAgIGlmICghVGV4dFV0aWxzLmVxdWFscyhhZG1pbi5zaG9ydFN1cHBvcnRNZXNzYWdlLCBtZXNzYWdlKSkgeworICAgICAgICAgICAgICAgIGFkbWluLnNob3J0U3VwcG9ydE1lc3NhZ2UgPSBtZXNzYWdlOworICAgICAgICAgICAgICAgIHNhdmVTZXR0aW5nc0xvY2tlZCh1c2VySGFuZGxlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2hvcnRTdXBwb3J0TWVzc2FnZShATm9uTnVsbCBDb21wb25lbnROYW1lIHdobykgeworICAgICAgICBpZiAoIW1IYXNGZWF0dXJlKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBQcmVjb25kaXRpb25zLmNoZWNrTm90TnVsbCh3aG8sICJDb21wb25lbnROYW1lIGlzIG51bGwiKTsKKyAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7CisgICAgICAgICAgICBBY3RpdmVBZG1pbiBhZG1pbiA9IGdldEFjdGl2ZUFkbWluRm9yVWlkTG9ja2VkKHdobywKKyAgICAgICAgICAgICAgICAgICAgbUluamVjdG9yLmJpbmRlckdldENhbGxpbmdVaWQoKSk7CisgICAgICAgICAgICByZXR1cm4gYWRtaW4uc2hvcnRTdXBwb3J0TWVzc2FnZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHNldExvbmdTdXBwb3J0TWVzc2FnZShATm9uTnVsbCBDb21wb25lbnROYW1lIHdobywgU3RyaW5nIG1lc3NhZ2UpIHsKKyAgICAgICAgaWYgKCFtSGFzRmVhdHVyZSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIFByZWNvbmRpdGlvbnMuY2hlY2tOb3ROdWxsKHdobywgIkNvbXBvbmVudE5hbWUgaXMgbnVsbCIpOworICAgICAgICBmaW5hbCBpbnQgdXNlckhhbmRsZSA9IG1JbmplY3Rvci51c2VySGFuZGxlR2V0Q2FsbGluZ1VzZXJJZCgpOworICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKKyAgICAgICAgICAgIEFjdGl2ZUFkbWluIGFkbWluID0gZ2V0QWN0aXZlQWRtaW5Gb3JVaWRMb2NrZWQod2hvLAorICAgICAgICAgICAgICAgICAgICBtSW5qZWN0b3IuYmluZGVyR2V0Q2FsbGluZ1VpZCgpKTsKKyAgICAgICAgICAgIGlmICghVGV4dFV0aWxzLmVxdWFscyhhZG1pbi5sb25nU3VwcG9ydE1lc3NhZ2UsIG1lc3NhZ2UpKSB7CisgICAgICAgICAgICAgICAgYWRtaW4ubG9uZ1N1cHBvcnRNZXNzYWdlID0gbWVzc2FnZTsKKyAgICAgICAgICAgICAgICBzYXZlU2V0dGluZ3NMb2NrZWQodXNlckhhbmRsZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU3RyaW5nIGdldExvbmdTdXBwb3J0TWVzc2FnZShATm9uTnVsbCBDb21wb25lbnROYW1lIHdobykgeworICAgICAgICBpZiAoIW1IYXNGZWF0dXJlKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBQcmVjb25kaXRpb25zLmNoZWNrTm90TnVsbCh3aG8sICJDb21wb25lbnROYW1lIGlzIG51bGwiKTsKKyAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7CisgICAgICAgICAgICBBY3RpdmVBZG1pbiBhZG1pbiA9IGdldEFjdGl2ZUFkbWluRm9yVWlkTG9ja2VkKHdobywKKyAgICAgICAgICAgICAgICAgICAgbUluamVjdG9yLmJpbmRlckdldENhbGxpbmdVaWQoKSk7CisgICAgICAgICAgICByZXR1cm4gYWRtaW4ubG9uZ1N1cHBvcnRNZXNzYWdlOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFN0cmluZyBnZXRTaG9ydFN1cHBvcnRNZXNzYWdlRm9yVXNlcihATm9uTnVsbCBDb21wb25lbnROYW1lIHdobywgaW50IHVzZXJIYW5kbGUpIHsKKyAgICAgICAgaWYgKCFtSGFzRmVhdHVyZSkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgUHJlY29uZGl0aW9ucy5jaGVja05vdE51bGwod2hvLCAiQ29tcG9uZW50TmFtZSBpcyBudWxsIik7CisgICAgICAgIGlmICghVXNlckhhbmRsZS5pc1NhbWVBcHAobUluamVjdG9yLmJpbmRlckdldENhbGxpbmdVaWQoKSwgUHJvY2Vzcy5TWVNURU1fVUlEKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXhjZXB0aW9uKCJPbmx5IHRoZSBzeXN0ZW0gY2FuIHF1ZXJ5IHN1cHBvcnQgbWVzc2FnZSBmb3IgdXNlciIpOworICAgICAgICB9CisgICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgeworICAgICAgICAgICAgQWN0aXZlQWRtaW4gYWRtaW4gPSBnZXRBY3RpdmVBZG1pblVuY2hlY2tlZExvY2tlZCh3aG8sIHVzZXJIYW5kbGUpOworICAgICAgICAgICAgaWYgKGFkbWluICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYWRtaW4uc2hvcnRTdXBwb3J0TWVzc2FnZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU3RyaW5nIGdldExvbmdTdXBwb3J0TWVzc2FnZUZvclVzZXIoQE5vbk51bGwgQ29tcG9uZW50TmFtZSB3aG8sIGludCB1c2VySGFuZGxlKSB7CisgICAgICAgIGlmICghbUhhc0ZlYXR1cmUpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIFByZWNvbmRpdGlvbnMuY2hlY2tOb3ROdWxsKHdobywgIkNvbXBvbmVudE5hbWUgaXMgbnVsbCIpOworICAgICAgICBpZiAoIVVzZXJIYW5kbGUuaXNTYW1lQXBwKG1JbmplY3Rvci5iaW5kZXJHZXRDYWxsaW5nVWlkKCksIFByb2Nlc3MuU1lTVEVNX1VJRCkpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBTZWN1cml0eUV4Y2VwdGlvbigiT25seSB0aGUgc3lzdGVtIGNhbiBxdWVyeSBzdXBwb3J0IG1lc3NhZ2UgZm9yIHVzZXIiKTsKKyAgICAgICAgfQorICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKKyAgICAgICAgICAgIEFjdGl2ZUFkbWluIGFkbWluID0gZ2V0QWN0aXZlQWRtaW5VbmNoZWNrZWRMb2NrZWQod2hvLCB1c2VySGFuZGxlKTsKKyAgICAgICAgICAgIGlmIChhZG1pbiAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGFkbWluLmxvbmdTdXBwb3J0TWVzc2FnZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9TeXN0ZW1TZXJ2ZXIuamF2YSBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL1N5c3RlbVNlcnZlci5qYXZhCmluZGV4IGZiNWYyMWEuLmRkNjQ5M2MgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL1N5c3RlbVNlcnZlci5qYXZhCisrKyBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL1N5c3RlbVNlcnZlci5qYXZhCkBAIC04OSwxNCArODksMTMgQEAKIGltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIudHYuVHZJbnB1dE1hbmFnZXJTZXJ2aWNlOwogaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci50d2lsaWdodC5Ud2lsaWdodFNlcnZpY2U7CiBpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLnVzYWdlLlVzYWdlU3RhdHNTZXJ2aWNlOwotaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci51c2IuVXNiU2VydmljZTsKK2ltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIudnIuVnJNYW5hZ2VyU2VydmljZTsKIGltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIud2FsbHBhcGVyLldhbGxwYXBlck1hbmFnZXJTZXJ2aWNlOwogaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci53ZWJraXQuV2ViVmlld1VwZGF0ZVNlcnZpY2U7CiBpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJTZXJ2aWNlOwogCiBpbXBvcnQgZGFsdmlrLnN5c3RlbS5WTVJ1bnRpbWU7CiAKLWltcG9ydCBqYXZhLmlvLkZpbGU7CiBpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKIGltcG9ydCBqYXZhLnV0aWwuVGltZXI7CiBpbXBvcnQgamF2YS51dGlsLlRpbWVyVGFzazsKQEAgLTQ0Nyw2ICs0NDYsNyBAQAogICAgICAgICBDb25zdW1lcklyU2VydmljZSBjb25zdW1lcklyID0gbnVsbDsKICAgICAgICAgTW1zU2VydmljZUJyb2tlciBtbXNTZXJ2aWNlID0gbnVsbDsKICAgICAgICAgRW50cm9weU1peGVyIGVudHJvcHlNaXhlciA9IG51bGw7CisgICAgICAgIFZyTWFuYWdlclNlcnZpY2UgdnJNYW5hZ2VyU2VydmljZSA9IG51bGw7CiAKICAgICAgICAgYm9vbGVhbiBkaXNhYmxlU3RvcmFnZSA9IFN5c3RlbVByb3BlcnRpZXMuZ2V0Qm9vbGVhbigiY29uZmlnLmRpc2FibGVfc3RvcmFnZSIsIGZhbHNlKTsKICAgICAgICAgYm9vbGVhbiBkaXNhYmxlQmx1ZXRvb3RoID0gU3lzdGVtUHJvcGVydGllcy5nZXRCb29sZWFuKCJjb25maWcuZGlzYWJsZV9ibHVldG9vdGgiLCBmYWxzZSk7CkBAIC01MzIsNiArNTMyLDEwIEBACiAgICAgICAgICAgICBTZXJ2aWNlTWFuYWdlci5hZGRTZXJ2aWNlKENvbnRleHQuSU5QVVRfU0VSVklDRSwgaW5wdXRNYW5hZ2VyKTsKICAgICAgICAgICAgIFRyYWNlLnRyYWNlRW5kKFRyYWNlLlRSQUNFX1RBR19TWVNURU1fU0VSVkVSKTsKIAorICAgICAgICAgICAgdHJhY2VCZWdpbkFuZFNsb2coIlN0YXJ0VnJNYW5hZ2VyU2VydmljZSIpOworICAgICAgICAgICAgbVN5c3RlbVNlcnZpY2VNYW5hZ2VyLnN0YXJ0U2VydmljZShWck1hbmFnZXJTZXJ2aWNlLmNsYXNzKTsKKyAgICAgICAgICAgIFRyYWNlLnRyYWNlRW5kKFRyYWNlLlRSQUNFX1RBR19TWVNURU1fU0VSVkVSKTsKKwogICAgICAgICAgICAgbUFjdGl2aXR5TWFuYWdlclNlcnZpY2Uuc2V0V2luZG93TWFuYWdlcih3bSk7CiAKICAgICAgICAgICAgIGlucHV0TWFuYWdlci5zZXRXaW5kb3dNYW5hZ2VyQ2FsbGJhY2tzKHdtLmdldElucHV0TW9uaXRvcigpKTsKQEAgLTEzMTgsNiArMTMyMiw3IEBACiAgICAgICAgIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KCk7CiAgICAgICAgIGludGVudC5zZXRDb21wb25lbnQobmV3IENvbXBvbmVudE5hbWUoImNvbS5hbmRyb2lkLnN5c3RlbXVpIiwKICAgICAgICAgICAgICAgICAgICAgImNvbS5hbmRyb2lkLnN5c3RlbXVpLlN5c3RlbVVJU2VydmljZSIpKTsKKyAgICAgICAgaW50ZW50LmFkZEZsYWdzKEludGVudC5GTEFHX0RFQlVHX1RSSUFHRURfTUlTU0lORyk7CiAgICAgICAgIC8vU2xvZy5kKFRBRywgIlN0YXJ0aW5nIHNlcnZpY2U6ICIgKyBpbnRlbnQpOwogICAgICAgICBjb250ZXh0LnN0YXJ0U2VydmljZUFzVXNlcihpbnRlbnQsIFVzZXJIYW5kbGUuU1lTVEVNKTsKICAgICB9CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9wcmludC9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wcmludC9QcmludE1hbmFnZXJTZXJ2aWNlLmphdmEgYi9zZXJ2aWNlcy9wcmludC9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wcmludC9QcmludE1hbmFnZXJTZXJ2aWNlLmphdmEKaW5kZXggMGE4YzAxNC4uZDVmMzg0ZCAxMDA2NDQKLS0tIGEvc2VydmljZXMvcHJpbnQvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvcHJpbnQvUHJpbnRNYW5hZ2VyU2VydmljZS5qYXZhCisrKyBiL3NlcnZpY2VzL3ByaW50L2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3ByaW50L1ByaW50TWFuYWdlclNlcnZpY2UuamF2YQpAQCAtMjcsNiArMjcsNyBAQAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5TZXJ2aWNlSW5mbzsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uVXNlckluZm87CiBpbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5Db250ZW50T2JzZXJ2ZXI7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5JY29uOwogaW1wb3J0IGFuZHJvaWQubmV0LlVyaTsKIGltcG9ydCBhbmRyb2lkLm9zLkJpbmRlcjsKIGltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKQEAgLTc3LDggKzc4LDggQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvblN0YXJ0VXNlcihpbnQgdXNlckhhbmRsZSkgewotICAgICAgICBtUHJpbnRNYW5hZ2VySW1wbC5oYW5kbGVVc2VyU3RhcnRlZCh1c2VySGFuZGxlKTsKKyAgICBwdWJsaWMgdm9pZCBvblVubG9ja1VzZXIoaW50IHVzZXJIYW5kbGUpIHsKKyAgICAgICAgbVByaW50TWFuYWdlckltcGwuaGFuZGxlVXNlclVubG9ja2VkKHVzZXJIYW5kbGUpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpAQCAtMTc3LDYgKzE3OCwyNSBAQAogICAgICAgICB9CiAKICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBJY29uIGdldEN1c3RvbVByaW50ZXJJY29uKFByaW50ZXJJZCBwcmludGVySWQsIGludCB1c2VySWQpIHsKKyAgICAgICAgICAgIGZpbmFsIGludCByZXNvbHZlZFVzZXJJZCA9IHJlc29sdmVDYWxsaW5nVXNlckVuZm9yY2luZ1Blcm1pc3Npb25zKHVzZXJJZCk7CisgICAgICAgICAgICBmaW5hbCBVc2VyU3RhdGUgdXNlclN0YXRlOworICAgICAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgeworICAgICAgICAgICAgICAgIC8vIE9ubHkgdGhlIGN1cnJlbnQgZ3JvdXAgbWVtYmVycyBjYW4gZ2V0IHRoZSBwcmludGVyIGljb25zLgorICAgICAgICAgICAgICAgIGlmIChyZXNvbHZlQ2FsbGluZ1Byb2ZpbGVQYXJlbnRMb2NrZWQocmVzb2x2ZWRVc2VySWQpICE9IGdldEN1cnJlbnRVc2VySWQoKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdXNlclN0YXRlID0gZ2V0T3JDcmVhdGVVc2VyU3RhdGVMb2NrZWQocmVzb2x2ZWRVc2VySWQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZmluYWwgbG9uZyBpZGVudGl0eSA9IEJpbmRlci5jbGVhckNhbGxpbmdJZGVudGl0eSgpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdXNlclN0YXRlLmdldEN1c3RvbVByaW50ZXJJY29uKHByaW50ZXJJZCk7CisgICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgICAgIEJpbmRlci5yZXN0b3JlQ2FsbGluZ0lkZW50aXR5KGlkZW50aXR5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwdWJsaWMgdm9pZCBjYW5jZWxQcmludEpvYihQcmludEpvYklkIHByaW50Sm9iSWQsIGludCBhcHBJZCwgaW50IHVzZXJJZCkgewogICAgICAgICAgICAgZmluYWwgaW50IHJlc29sdmVkVXNlcklkID0gcmVzb2x2ZUNhbGxpbmdVc2VyRW5mb3JjaW5nUGVybWlzc2lvbnModXNlcklkKTsKICAgICAgICAgICAgIGZpbmFsIGludCByZXNvbHZlZEFwcElkOwpAQCAtNDczLDE0ICs0OTMsMTEgQEAKICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNoYW5nZShib29sZWFuIHNlbGZDaGFuZ2UsIFVyaSB1cmksIGludCB1c2VySWQpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGVuYWJsZWRQcmludFNlcnZpY2VzVXJpLmVxdWFscyh1cmkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZXJJZCAhPSBVc2VySGFuZGxlLlVTRVJfQUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJTdGF0ZSB1c2VyU3RhdGUgPSBnZXRPckNyZWF0ZVVzZXJTdGF0ZUxvY2tlZCh1c2VySWQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyU3RhdGUudXBkYXRlSWZOZWVkZWRMb2NrZWQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgdXNlckNvdW50ID0gbVVzZXJTdGF0ZXMuc2l6ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHVzZXJDb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VyU3RhdGUgdXNlclN0YXRlID0gbVVzZXJTdGF0ZXMudmFsdWVBdChpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJTdGF0ZS51cGRhdGVJZk5lZWRlZExvY2tlZCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGludCB1c2VyQ291bnQgPSBtVXNlclN0YXRlcy5zaXplKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB1c2VyQ291bnQ7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXNlcklkID09IFVzZXJIYW5kbGUuVVNFUl9BTEwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB1c2VySWQgPT0gbVVzZXJTdGF0ZXMua2V5QXQoaSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VyU3RhdGVzLnZhbHVlQXQoaSkudXBkYXRlSWZOZWVkZWRMb2NrZWQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTQ5Niw2ICs1MTMsNyBAQAogICAgICAgICAgICAgUGFja2FnZU1vbml0b3IgbW9uaXRvciA9IG5ldyBQYWNrYWdlTW9uaXRvcigpIHsKICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblBhY2thZ2VNb2RpZmllZChTdHJpbmcgcGFja2FnZU5hbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtVXNlck1hbmFnZXIuaXNVc2VyVW5sb2NrZWQoZ2V0Q2hhbmdpbmdVc2VySWQoKSkpIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gQSBiYWNrZ3JvdW5kIHVzZXIvcHJvZmlsZSdzIHByaW50IGpvYnMgYXJlIHJ1bm5pbmcgYnV0IHRoZXJlIGlzCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBubyBVSSBzaG93bi4gSGVuY2UsIGlmIHRoZSBwYWNrYWdlcyBvZiBzdWNoIGEgdXNlciBjaGFuZ2Ugd2UgbmVlZApAQCAtNTE3LDYgKzUzNSw3IEBACiAKICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblBhY2thZ2VSZW1vdmVkKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHVpZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIW1Vc2VyTWFuYWdlci5pc1VzZXJVbmxvY2tlZChnZXRDaGFuZ2luZ1VzZXJJZCgpKSkgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBIGJhY2tncm91bmQgdXNlci9wcm9maWxlJ3MgcHJpbnQgam9icyBhcmUgcnVubmluZyBidXQgdGhlcmUgaXMKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vIFVJIHNob3duLiBIZW5jZSwgaWYgdGhlIHBhY2thZ2VzIG9mIHN1Y2ggYSB1c2VyIGNoYW5nZSB3ZSBuZWVkCkBAIC01NDQsNiArNTYzLDcgQEAKICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBvbkhhbmRsZUZvcmNlU3RvcChJbnRlbnQgaW50ZW50LCBTdHJpbmdbXSBzdG9wcGVkUGFja2FnZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdWlkLCBib29sZWFuIGRvaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtVXNlck1hbmFnZXIuaXNVc2VyVW5sb2NrZWQoZ2V0Q2hhbmdpbmdVc2VySWQoKSkpIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gQSBiYWNrZ3JvdW5kIHVzZXIvcHJvZmlsZSdzIHByaW50IGpvYnMgYXJlIHJ1bm5pbmcgYnV0IHRoZXJlIGlzCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBubyBVSSBzaG93bi4gSGVuY2UsIGlmIHRoZSBwYWNrYWdlcyBvZiBzdWNoIGEgdXNlciBjaGFuZ2Ugd2UgbmVlZApAQCAtNTc0LDYgKzU5NCw4IEBACiAKICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblBhY2thZ2VBZGRlZChTdHJpbmcgcGFja2FnZU5hbWUsIGludCB1aWQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtVXNlck1hbmFnZXIuaXNVc2VyVW5sb2NrZWQoZ2V0Q2hhbmdpbmdVc2VySWQoKSkpIHJldHVybjsKKwogICAgICAgICAgICAgICAgICAgICAvLyBBIGJhY2tncm91bmQgdXNlci9wcm9maWxlJ3MgcHJpbnQgam9icyBhcmUgcnVubmluZyBidXQgdGhlcmUgaXMKICAgICAgICAgICAgICAgICAgICAgLy8gbm8gVUkgc2hvd24uIEhlbmNlLCBpZiB0aGUgcGFja2FnZXMgb2Ygc3VjaCBhIHVzZXIgY2hhbmdlIHdlIG5lZWQKICAgICAgICAgICAgICAgICAgICAgLy8gdG8gaGFuZGxlIGl0IGFzIHRoZSBjaGFuZ2UgbWF5IGFmZmVjdCBvbmdvaW5nIHByaW50IGpvYnMuCkBAIC02MzQsNiArNjU2LDExIEBACiAgICAgICAgIH0KIAogICAgICAgICBwcml2YXRlIFVzZXJTdGF0ZSBnZXRPckNyZWF0ZVVzZXJTdGF0ZUxvY2tlZChpbnQgdXNlcklkKSB7CisgICAgICAgICAgICBpZiAoIW1Vc2VyTWFuYWdlci5pc1VzZXJVbmxvY2tlZCh1c2VySWQpKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICJVc2VyICIgKyB1c2VySWQgKyAiIG11c3QgYmUgdW5sb2NrZWQgZm9yIHByaW50aW5nIHRvIGJlIGF2YWlsYWJsZSIpOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBVc2VyU3RhdGUgdXNlclN0YXRlID0gbVVzZXJTdGF0ZXMuZ2V0KHVzZXJJZCk7CiAgICAgICAgICAgICBpZiAodXNlclN0YXRlID09IG51bGwpIHsKICAgICAgICAgICAgICAgICB1c2VyU3RhdGUgPSBuZXcgVXNlclN0YXRlKG1Db250ZXh0LCB1c2VySWQsIG1Mb2NrKTsKQEAgLTY0Miw3ICs2NjksNyBAQAogICAgICAgICAgICAgcmV0dXJuIHVzZXJTdGF0ZTsKICAgICAgICAgfQogCi0gICAgICAgIHByaXZhdGUgdm9pZCBoYW5kbGVVc2VyU3RhcnRlZChmaW5hbCBpbnQgdXNlcklkKSB7CisgICAgICAgIHByaXZhdGUgdm9pZCBoYW5kbGVVc2VyVW5sb2NrZWQoZmluYWwgaW50IHVzZXJJZCkgewogICAgICAgICAgICAgLy8gVGhpcyBjb2RlIHdpbGwgdG91Y2ggdGhlIHJlbW90ZSBwcmludCBzcG9vbGVyIHdoaWNoCiAgICAgICAgICAgICAvLyBtdXN0IGJlIGNhbGxlZCBvZmYgdGhlIG1haW4gdGhyZWFkLCBzbyBwb3N0IHRoZSB3b3JrLgogICAgICAgICAgICAgQmFja2dyb3VuZFRocmVhZC5nZXRIYW5kbGVyKCkucG9zdChuZXcgUnVubmFibGUoKSB7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9wcmludC9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wcmludC9SZW1vdGVQcmludFNlcnZpY2UuamF2YSBiL3NlcnZpY2VzL3ByaW50L2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3ByaW50L1JlbW90ZVByaW50U2VydmljZS5qYXZhCmluZGV4IDc3YTQ3ZjguLjBhZjE1MjUgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL3ByaW50L2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3ByaW50L1JlbW90ZVByaW50U2VydmljZS5qYXZhCisrKyBiL3NlcnZpY2VzL3ByaW50L2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3ByaW50L1JlbW90ZVByaW50U2VydmljZS5qYXZhCkBAIC0yNCw2ICsyNCw3IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuU2VydmljZUNvbm5lY3Rpb247CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhcmNlbGVkTGlzdFNsaWNlOworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuSWNvbjsKIGltcG9ydCBhbmRyb2lkLm9zLkJpbmRlcjsKIGltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOwpAQCAtOTgsNiArOTksMTUgQEAKICAgICAgICAgcHVibGljIHZvaWQgb25QcmludGVyc0FkZGVkKExpc3Q8UHJpbnRlckluZm8+IHByaW50ZXJzKTsKICAgICAgICAgcHVibGljIHZvaWQgb25QcmludGVyc1JlbW92ZWQoTGlzdDxQcmludGVySWQ+IHByaW50ZXJJZHMpOwogICAgICAgICBwdWJsaWMgdm9pZCBvblNlcnZpY2VEaWVkKFJlbW90ZVByaW50U2VydmljZSBzZXJ2aWNlKTsKKworICAgICAgICAvKioKKyAgICAgICAgICogSGFuZGxlIHRoYXQgYSBjdXN0b20gaWNvbiBmb3IgYSBwcmludGVyIHdhcyBsb2FkZWQuCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSBwcmludGVySWQgdGhlIGlkIG9mIHRoZSBwcmludGVyIHRoZSBpY29uIGJlbG9uZ3MgdG8KKyAgICAgICAgICogQHBhcmFtIGljb24gdGhlIGljb24gdGhhdCB3YXMgbG9hZGVkCisgICAgICAgICAqIEBzZWUgYW5kcm9pZC5wcmludC5QcmludGVySW5mby5CdWlsZGVyI3NldEhhc0N1c3RvbVByaW50ZXJJY29uKCkKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIG9uQ3VzdG9tUHJpbnRlckljb25Mb2FkZWQoUHJpbnRlcklkIHByaW50ZXJJZCwgSWNvbiBpY29uKTsKICAgICB9CiAKICAgICBwdWJsaWMgUmVtb3RlUHJpbnRTZXJ2aWNlKENvbnRleHQgY29udGV4dCwgQ29tcG9uZW50TmFtZSBjb21wb25lbnROYW1lLCBpbnQgdXNlcklkLApAQCAtNDA0LDYgKzQxNCwyMiBAQAogICAgICAgICAgICAgICAgIHByaW50ZXJJZCkuc2VuZFRvVGFyZ2V0KCk7CiAgICAgfQogCisgICAgLyoqCisgICAgICogUmVxdWVzdCB0aGUgY3VzdG9tIHByaW50ZXIgaWNvbiBmb3IgYSBwcmludGVyLgorICAgICAqCisgICAgICogQHBhcmFtIHByaW50ZXJJZCB0aGUgaWQgb2YgdGhlIHByaW50ZXIgdGhlIGljb24gc2hvdWxkIGJlIGxvYWRlZCBmb3IKKyAgICAgKiBAc2VlIGFuZHJvaWQucHJpbnQuUHJpbnRlckluZm8uQnVpbGRlciNzZXRIYXNDdXN0b21QcmludGVySWNvbigpCisgICAgICovCisgICAgcHVibGljIHZvaWQgcmVxdWVzdEN1c3RvbVByaW50ZXJJY29uKFByaW50ZXJJZCBwcmludGVySWQpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlmIChpc0JvdW5kKCkpIHsKKyAgICAgICAgICAgICAgICBtUHJpbnRTZXJ2aWNlLnJlcXVlc3RDdXN0b21QcmludGVySWNvbihwcmludGVySWQpOworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gcmUpIHsKKyAgICAgICAgICAgIFNsb2cuZShMT0dfVEFHLCAiRXJyb3IgcmVxdWVzdGluZyBpY29uIGZvciAiICsgcHJpbnRlcklkLCByZSk7CisgICAgICAgIH0KKyAgICB9CisKICAgICBwcml2YXRlIHZvaWQgaGFuZGxlU3RhcnRQcmludGVyU3RhdGVUcmFja2luZyhmaW5hbCBQcmludGVySWQgcHJpbnRlcklkKSB7CiAgICAgICAgIHRocm93SWZEZXN0cm95ZWQoKTsKICAgICAgICAgLy8gVGFrZSBhIG5vdGUgd2UgYXJlIHRyYWNraW5nIHRoZSBwcmludGVyLgpAQCAtODQyLDUgKzg2OCwxOSBAQAogICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgcHJpbnRlciBpZDogIiArIHByaW50ZXJJZCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25DdXN0b21QcmludGVySWNvbkxvYWRlZChQcmludGVySWQgcHJpbnRlcklkLCBJY29uIGljb24pCisgICAgICAgICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CisgICAgICAgICAgICBSZW1vdGVQcmludFNlcnZpY2Ugc2VydmljZSA9IG1XZWFrU2VydmljZS5nZXQoKTsKKyAgICAgICAgICAgIGlmIChzZXJ2aWNlICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBsb25nIGlkZW50aXR5ID0gQmluZGVyLmNsZWFyQ2FsbGluZ0lkZW50aXR5KCk7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgc2VydmljZS5tQ2FsbGJhY2tzLm9uQ3VzdG9tUHJpbnRlckljb25Mb2FkZWQocHJpbnRlcklkLCBpY29uKTsKKyAgICAgICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgICAgICAgICBCaW5kZXIucmVzdG9yZUNhbGxpbmdJZGVudGl0eShpZGVudGl0eSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvcHJpbnQvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvcHJpbnQvUmVtb3RlUHJpbnRTcG9vbGVyLmphdmEgYi9zZXJ2aWNlcy9wcmludC9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wcmludC9SZW1vdGVQcmludFNwb29sZXIuamF2YQppbmRleCBjNTA2YjZmLi40MGE4ODgwIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9wcmludC9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wcmludC9SZW1vdGVQcmludFNwb29sZXIuamF2YQorKysgYi9zZXJ2aWNlcy9wcmludC9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wcmludC9SZW1vdGVQcmludFNwb29sZXIuamF2YQpAQCAtMjMsNiArMjMsNyBAQAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LlNlcnZpY2VDb25uZWN0aW9uOworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuSWNvbjsKIGltcG9ydCBhbmRyb2lkLm9zLkJpbmRlcjsKIGltcG9ydCBhbmRyb2lkLm9zLkJ1aWxkOwogaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKQEAgLTM1LDYgKzM2LDcgQEAKIGltcG9ydCBhbmRyb2lkLnByaW50LklQcmludFNwb29sZXJDbGllbnQ7CiBpbXBvcnQgYW5kcm9pZC5wcmludC5QcmludEpvYklkOwogaW1wb3J0IGFuZHJvaWQucHJpbnQuUHJpbnRKb2JJbmZvOworaW1wb3J0IGFuZHJvaWQucHJpbnQuUHJpbnRlcklkOwogaW1wb3J0IGFuZHJvaWQudXRpbC5TbG9nOwogaW1wb3J0IGFuZHJvaWQudXRpbC5UaW1lZFJlbW90ZUNhbGxlcjsKIApAQCAtNzIsNiArNzQsMTUgQEAKIAogICAgIHByaXZhdGUgZmluYWwgU2V0UHJpbnRKb2JUYWdDYWxsZXIgbVNldFByaW50Sm9iVGFnQ2FsbGVyID0gbmV3IFNldFByaW50Sm9iVGFnQ2FsbGVyKCk7CiAKKyAgICBwcml2YXRlIGZpbmFsIE9uQ3VzdG9tUHJpbnRlckljb25Mb2FkZWRDYWxsZXIgbUN1c3RvbVByaW50ZXJJY29uTG9hZGVkQ2FsbGVyID0KKyAgICAgICAgICAgIG5ldyBPbkN1c3RvbVByaW50ZXJJY29uTG9hZGVkQ2FsbGVyKCk7CisKKyAgICBwcml2YXRlIGZpbmFsIENsZWFyQ3VzdG9tUHJpbnRlckljb25DYWNoZUNhbGxlciBtQ2xlYXJDdXN0b21QcmludGVySWNvbkNhY2hlID0KKyAgICAgICAgICAgIG5ldyBDbGVhckN1c3RvbVByaW50ZXJJY29uQ2FjaGVDYWxsZXIoKTsKKworICAgIHByaXZhdGUgZmluYWwgR2V0Q3VzdG9tUHJpbnRlckljb25DYWxsZXIgbUdldEN1c3RvbVByaW50ZXJJY29uQ2FsbGVyID0KKyAgICAgICAgICAgIG5ldyBHZXRDdXN0b21QcmludGVySWNvbkNhbGxlcigpOworCiAgICAgcHJpdmF0ZSBmaW5hbCBTZXJ2aWNlQ29ubmVjdGlvbiBtU2VydmljZUNvbm5lY3Rpb24gPSBuZXcgTXlTZXJ2aWNlQ29ubmVjdGlvbigpOwogCiAgICAgcHJpdmF0ZSBmaW5hbCBDb250ZXh0IG1Db250ZXh0OwpAQCAtMjg3LDYgKzI5OCw5NiBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgLyoqCisgICAgICogSGFuZGxlIHRoYXQgYSBjdXN0b20gaWNvbiBmb3IgYSBwcmludGVyIHdhcyBsb2FkZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcHJpbnRlcklkIHRoZSBpZCBvZiB0aGUgcHJpbnRlciB0aGUgaWNvbiBiZWxvbmdzIHRvCisgICAgICogQHBhcmFtIGljb24gdGhlIGljb24gdGhhdCB3YXMgbG9hZGVkCisgICAgICogQHNlZSBhbmRyb2lkLnByaW50LlByaW50ZXJJbmZvLkJ1aWxkZXIjc2V0SGFzQ3VzdG9tUHJpbnRlckljb24oKQorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCB2b2lkIG9uQ3VzdG9tUHJpbnRlckljb25Mb2FkZWQoQE5vbk51bGwgUHJpbnRlcklkIHByaW50ZXJJZCwKKyAgICAgICAgICAgIEBOdWxsYWJsZSBJY29uIGljb24pIHsKKyAgICAgICAgdGhyb3dJZkNhbGxlZE9uTWFpblRocmVhZCgpOworICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CisgICAgICAgICAgICB0aHJvd0lmRGVzdHJveWVkTG9ja2VkKCk7CisgICAgICAgICAgICBtQ2FuVW5iaW5kID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIG1DdXN0b21QcmludGVySWNvbkxvYWRlZENhbGxlci5vbkN1c3RvbVByaW50ZXJJY29uTG9hZGVkKGdldFJlbW90ZUluc3RhbmNlTGF6eSgpLAorICAgICAgICAgICAgICAgICAgICBwcmludGVySWQsIGljb24pOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb258VGltZW91dEV4Y2VwdGlvbiByZSkgeworICAgICAgICAgICAgU2xvZy5lKExPR19UQUcsICJFcnJvciBsb2FkaW5nIG5ldyBjdXN0b20gcHJpbnRlciBpY29uLiIsIHJlKTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIGlmIChERUJVRykgeworICAgICAgICAgICAgICAgIFNsb2cuaShMT0dfVEFHLAorICAgICAgICAgICAgICAgICAgICAgICAgIlt1c2VyOiAiICsgbVVzZXJIYW5kbGUuZ2V0SWRlbnRpZmllcigpICsgIl0gb25DdXN0b21QcmludGVySWNvbkxvYWRlZCgpIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CisgICAgICAgICAgICAgICAgbUNhblVuYmluZCA9IHRydWU7CisgICAgICAgICAgICAgICAgbUxvY2subm90aWZ5QWxsKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIGN1c3RvbSBpY29uIGZvciBhIHByaW50ZXIuIElmIHRoZSBpY29uIGlzIG5vdCBjYWNoZWQsIHRoZSBpY29uIGlzCisgICAgICogcmVxdWVzdGVkIGFzeW5jaHJvbm91c2x5LiBPbmNlIGl0IGlzIGF2YWlsYWJsZSB0aGUgcHJpbnRlciBpcyB1cGRhdGVkLgorICAgICAqCisgICAgICogQHBhcmFtIHByaW50ZXJJZCB0aGUgaWQgb2YgdGhlIHByaW50ZXIgdGhlIGljb24gc2hvdWxkIGJlIGxvYWRlZCBmb3IKKyAgICAgKiBAcmV0dXJuIHRoZSBjdXN0b20gaWNvbiB0byBiZSB1c2VkIGZvciB0aGUgcHJpbnRlciBvciBudWxsIGlmIHRoZSBpY29uIGlzCisgICAgICogICAgICAgICBub3QgeWV0IGF2YWlsYWJsZQorICAgICAqIEBzZWUgYW5kcm9pZC5wcmludC5QcmludGVySW5mby5CdWlsZGVyI3NldEhhc0N1c3RvbVByaW50ZXJJY29uKCkKKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgQE51bGxhYmxlIEljb24gZ2V0Q3VzdG9tUHJpbnRlckljb24oQE5vbk51bGwgUHJpbnRlcklkIHByaW50ZXJJZCkgeworICAgICAgICB0aHJvd0lmQ2FsbGVkT25NYWluVGhyZWFkKCk7CisgICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKKyAgICAgICAgICAgIHRocm93SWZEZXN0cm95ZWRMb2NrZWQoKTsKKyAgICAgICAgICAgIG1DYW5VbmJpbmQgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICB0cnkgeworICAgICAgICAgICAgcmV0dXJuIG1HZXRDdXN0b21QcmludGVySWNvbkNhbGxlci5nZXRDdXN0b21QcmludGVySWNvbihnZXRSZW1vdGVJbnN0YW5jZUxhenkoKSwKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRlcklkKTsKKyAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9ufFRpbWVvdXRFeGNlcHRpb24gcmUpIHsKKyAgICAgICAgICAgIFNsb2cuZShMT0dfVEFHLCAiRXJyb3IgZ2V0dGluZyBjdXN0b20gcHJpbnRlciBpY29uLiIsIHJlKTsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgaWYgKERFQlVHKSB7CisgICAgICAgICAgICAgICAgU2xvZy5pKExPR19UQUcsCisgICAgICAgICAgICAgICAgICAgICAgICAiW3VzZXI6ICIgKyBtVXNlckhhbmRsZS5nZXRJZGVudGlmaWVyKCkgKyAiXSBnZXRDdXN0b21QcmludGVySWNvbigpIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CisgICAgICAgICAgICAgICAgbUNhblVuYmluZCA9IHRydWU7CisgICAgICAgICAgICAgICAgbUxvY2subm90aWZ5QWxsKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDbGVhciB0aGUgY3VzdG9tIHByaW50ZXIgaWNvbiBjYWNoZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGNsZWFyQ3VzdG9tUHJpbnRlckljb25DYWNoZSgpIHsKKyAgICAgICAgdGhyb3dJZkNhbGxlZE9uTWFpblRocmVhZCgpOworICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CisgICAgICAgICAgICB0aHJvd0lmRGVzdHJveWVkTG9ja2VkKCk7CisgICAgICAgICAgICBtQ2FuVW5iaW5kID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIG1DbGVhckN1c3RvbVByaW50ZXJJY29uQ2FjaGUuY2xlYXJDdXN0b21QcmludGVySWNvbkNhY2hlKGdldFJlbW90ZUluc3RhbmNlTGF6eSgpKTsKKyAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9ufFRpbWVvdXRFeGNlcHRpb24gcmUpIHsKKyAgICAgICAgICAgIFNsb2cuZShMT0dfVEFHLCAiRXJyb3IgY2xlYXJpbmcgY3VzdG9tIHByaW50ZXIgaWNvbiBjYWNoZS4iLCByZSk7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBpZiAoREVCVUcpIHsKKyAgICAgICAgICAgICAgICBTbG9nLmkoTE9HX1RBRywKKyAgICAgICAgICAgICAgICAgICAgICAgICJbdXNlcjogIiArIG1Vc2VySGFuZGxlLmdldElkZW50aWZpZXIoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJdIGNsZWFyQ3VzdG9tUHJpbnRlckljb25DYWNoZSgpIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CisgICAgICAgICAgICAgICAgbUNhblVuYmluZCA9IHRydWU7CisgICAgICAgICAgICAgICAgbUxvY2subm90aWZ5QWxsKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKICAgICBwdWJsaWMgZmluYWwgYm9vbGVhbiBzZXRQcmludEpvYlRhZyhQcmludEpvYklkIHByaW50Sm9iSWQsIFN0cmluZyB0YWcpIHsKICAgICAgICAgdGhyb3dJZkNhbGxlZE9uTWFpblRocmVhZCgpOwogICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CkBAIC02MzIsNiArNzMzLDY5IEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjbGFzcyBPbkN1c3RvbVByaW50ZXJJY29uTG9hZGVkQ2FsbGVyIGV4dGVuZHMgVGltZWRSZW1vdGVDYWxsZXI8Vm9pZD4geworICAgICAgICBwcml2YXRlIGZpbmFsIElQcmludFNwb29sZXJDYWxsYmFja3MgbUNhbGxiYWNrOworCisgICAgICAgIHB1YmxpYyBPbkN1c3RvbVByaW50ZXJJY29uTG9hZGVkQ2FsbGVyKCkgeworICAgICAgICAgICAgc3VwZXIoVGltZWRSZW1vdGVDYWxsZXIuREVGQVVMVF9DQUxMX1RJTUVPVVRfTUlMTElTKTsKKyAgICAgICAgICAgIG1DYWxsYmFjayA9IG5ldyBCYXNlUHJpbnRTcG9vbGVyU2VydmljZUNhbGxiYWNrcygpIHsKKyAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkN1c3RvbVByaW50ZXJJY29uQ2FjaGVkKGludCBzZXF1ZW5jZSkgeworICAgICAgICAgICAgICAgICAgICBvblJlbW90ZU1ldGhvZFJlc3VsdChudWxsLCBzZXF1ZW5jZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBWb2lkIG9uQ3VzdG9tUHJpbnRlckljb25Mb2FkZWQoSVByaW50U3Bvb2xlciB0YXJnZXQsIFByaW50ZXJJZCBwcmludGVySWQsCisgICAgICAgICAgICAgICAgSWNvbiBpY29uKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uLCBUaW1lb3V0RXhjZXB0aW9uIHsKKyAgICAgICAgICAgIGZpbmFsIGludCBzZXF1ZW5jZSA9IG9uQmVmb3JlUmVtb3RlQ2FsbCgpOworICAgICAgICAgICAgdGFyZ2V0Lm9uQ3VzdG9tUHJpbnRlckljb25Mb2FkZWQocHJpbnRlcklkLCBpY29uLCBtQ2FsbGJhY2ssIHNlcXVlbmNlKTsKKyAgICAgICAgICAgIHJldHVybiBnZXRSZXN1bHRUaW1lZChzZXF1ZW5jZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjbGFzcyBDbGVhckN1c3RvbVByaW50ZXJJY29uQ2FjaGVDYWxsZXIgZXh0ZW5kcyBUaW1lZFJlbW90ZUNhbGxlcjxWb2lkPiB7CisgICAgICAgIHByaXZhdGUgZmluYWwgSVByaW50U3Bvb2xlckNhbGxiYWNrcyBtQ2FsbGJhY2s7CisKKyAgICAgICAgcHVibGljIENsZWFyQ3VzdG9tUHJpbnRlckljb25DYWNoZUNhbGxlcigpIHsKKyAgICAgICAgICAgIHN1cGVyKFRpbWVkUmVtb3RlQ2FsbGVyLkRFRkFVTFRfQ0FMTF9USU1FT1VUX01JTExJUyk7CisgICAgICAgICAgICBtQ2FsbGJhY2sgPSBuZXcgQmFzZVByaW50U3Bvb2xlclNlcnZpY2VDYWxsYmFja3MoKSB7CisgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgY3VzdG9tUHJpbnRlckljb25DYWNoZUNsZWFyZWQoaW50IHNlcXVlbmNlKSB7CisgICAgICAgICAgICAgICAgICAgIG9uUmVtb3RlTWV0aG9kUmVzdWx0KG51bGwsIHNlcXVlbmNlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFZvaWQgY2xlYXJDdXN0b21QcmludGVySWNvbkNhY2hlKElQcmludFNwb29sZXIgdGFyZ2V0KQorICAgICAgICAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24sIFRpbWVvdXRFeGNlcHRpb24geworICAgICAgICAgICAgZmluYWwgaW50IHNlcXVlbmNlID0gb25CZWZvcmVSZW1vdGVDYWxsKCk7CisgICAgICAgICAgICB0YXJnZXQuY2xlYXJDdXN0b21QcmludGVySWNvbkNhY2hlKG1DYWxsYmFjaywgc2VxdWVuY2UpOworICAgICAgICAgICAgcmV0dXJuIGdldFJlc3VsdFRpbWVkKHNlcXVlbmNlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNsYXNzIEdldEN1c3RvbVByaW50ZXJJY29uQ2FsbGVyIGV4dGVuZHMgVGltZWRSZW1vdGVDYWxsZXI8SWNvbj4geworICAgICAgICBwcml2YXRlIGZpbmFsIElQcmludFNwb29sZXJDYWxsYmFja3MgbUNhbGxiYWNrOworCisgICAgICAgIHB1YmxpYyBHZXRDdXN0b21QcmludGVySWNvbkNhbGxlcigpIHsKKyAgICAgICAgICAgIHN1cGVyKFRpbWVkUmVtb3RlQ2FsbGVyLkRFRkFVTFRfQ0FMTF9USU1FT1VUX01JTExJUyk7CisgICAgICAgICAgICBtQ2FsbGJhY2sgPSBuZXcgQmFzZVByaW50U3Bvb2xlclNlcnZpY2VDYWxsYmFja3MoKSB7CisgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25HZXRDdXN0b21QcmludGVySWNvblJlc3VsdChJY29uIGljb24sIGludCBzZXF1ZW5jZSkgeworICAgICAgICAgICAgICAgICAgICBvblJlbW90ZU1ldGhvZFJlc3VsdChpY29uLCBzZXF1ZW5jZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBJY29uIGdldEN1c3RvbVByaW50ZXJJY29uKElQcmludFNwb29sZXIgdGFyZ2V0LCBQcmludGVySWQgcHJpbnRlcklkKQorICAgICAgICAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24sIFRpbWVvdXRFeGNlcHRpb24geworICAgICAgICAgICAgZmluYWwgaW50IHNlcXVlbmNlID0gb25CZWZvcmVSZW1vdGVDYWxsKCk7CisgICAgICAgICAgICB0YXJnZXQuZ2V0Q3VzdG9tUHJpbnRlckljb24ocHJpbnRlcklkLCBtQ2FsbGJhY2ssIHNlcXVlbmNlKTsKKyAgICAgICAgICAgIHJldHVybiBnZXRSZXN1bHRUaW1lZChzZXF1ZW5jZSk7CisgICAgICAgIH0KKyAgICB9CisKICAgICBwcml2YXRlIHN0YXRpYyBhYnN0cmFjdCBjbGFzcyBCYXNlUHJpbnRTcG9vbGVyU2VydmljZUNhbGxiYWNrcwogICAgICAgICAgICAgZXh0ZW5kcyBJUHJpbnRTcG9vbGVyQ2FsbGJhY2tzLlN0dWIgewogICAgICAgICBAT3ZlcnJpZGUKQEAgLTY1OCw2ICs4MjIsMjEgQEAKICAgICAgICAgcHVibGljIHZvaWQgb25TZXRQcmludEpvYlRhZ1Jlc3VsdChib29sZWFuIHN1Y2Nlc3MsIGludCBzZXF1ZW5jZSkgewogICAgICAgICAgICAgLyogZG8gbm90aGluZyAqLwogICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uQ3VzdG9tUHJpbnRlckljb25DYWNoZWQoaW50IHNlcXVlbmNlKSB7CisgICAgICAgICAgICAvKiBkbyBub3RoaW5nICovCisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25HZXRDdXN0b21QcmludGVySWNvblJlc3VsdChATnVsbGFibGUgSWNvbiBpY29uLCBpbnQgc2VxdWVuY2UpIHsKKyAgICAgICAgICAgIC8qIGRvIG5vdGhpbmcgKi8KKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBjdXN0b21QcmludGVySWNvbkNhY2hlQ2xlYXJlZChpbnQgc2VxdWVuY2UpIHsKKyAgICAgICAgICAgIC8qIGRvIG5vdGhpbmcgKi8KKyAgICAgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNsYXNzIFByaW50U3Bvb2xlckNsaWVudCBleHRlbmRzIElQcmludFNwb29sZXJDbGllbnQuU3R1YiB7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9wcmludC9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wcmludC9Vc2VyU3RhdGUuamF2YSBiL3NlcnZpY2VzL3ByaW50L2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3ByaW50L1VzZXJTdGF0ZS5qYXZhCmluZGV4IDZhNTBhNmUuLjYzZDMzMDEgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL3ByaW50L2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3ByaW50L1VzZXJTdGF0ZS5qYXZhCisrKyBiL3NlcnZpY2VzL3ByaW50L2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3ByaW50L1VzZXJTdGF0ZS5qYXZhCkBAIC0yNiw2ICsyNiw3IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhcmNlbGVkTGlzdFNsaWNlOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5SZXNvbHZlSW5mbzsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uU2VydmljZUluZm87CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5JY29uOwogaW1wb3J0IGFuZHJvaWQubmV0LlVyaTsKIGltcG9ydCBhbmRyb2lkLm9zLkFzeW5jVGFzazsKIGltcG9ydCBhbmRyb2lkLm9zLkJpbmRlcjsKQEAgLTI3MSw2ICsyNzIsMjggQEAKICAgICAgICAgcmV0dXJuIHByaW50Sm9iOwogICAgIH0KIAorICAgIC8qKgorICAgICAqIEdldCB0aGUgY3VzdG9tIGljb24gZm9yIGEgcHJpbnRlci4gSWYgdGhlIGljb24gaXMgbm90IGNhY2hlZCwgdGhlIGljb24gaXMKKyAgICAgKiByZXF1ZXN0ZWQgYXN5bmNocm9ub3VzbHkuIE9uY2UgaXQgaXMgYXZhaWxhYmxlIHRoZSBwcmludGVyIGlzIHVwZGF0ZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcHJpbnRlcklkIHRoZSBpZCBvZiB0aGUgcHJpbnRlciB0aGUgaWNvbiBzaG91bGQgYmUgbG9hZGVkIGZvcgorICAgICAqIEByZXR1cm4gdGhlIGN1c3RvbSBpY29uIHRvIGJlIHVzZWQgZm9yIHRoZSBwcmludGVyIG9yIG51bGwgaWYgdGhlIGljb24gaXMKKyAgICAgKiAgICAgICAgIG5vdCB5ZXQgYXZhaWxhYmxlCisgICAgICogQHNlZSBhbmRyb2lkLnByaW50LlByaW50ZXJJbmZvLkJ1aWxkZXIjc2V0SGFzQ3VzdG9tUHJpbnRlckljb24oKQorICAgICAqLworICAgIHB1YmxpYyBJY29uIGdldEN1c3RvbVByaW50ZXJJY29uKFByaW50ZXJJZCBwcmludGVySWQpIHsKKyAgICAgICAgSWNvbiBpY29uID0gbVNwb29sZXIuZ2V0Q3VzdG9tUHJpbnRlckljb24ocHJpbnRlcklkKTsKKworICAgICAgICBpZiAoaWNvbiA9PSBudWxsKSB7CisgICAgICAgICAgICBSZW1vdGVQcmludFNlcnZpY2Ugc2VydmljZSA9IG1BY3RpdmVTZXJ2aWNlcy5nZXQocHJpbnRlcklkLmdldFNlcnZpY2VOYW1lKCkpOworICAgICAgICAgICAgaWYgKHNlcnZpY2UgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHNlcnZpY2UucmVxdWVzdEN1c3RvbVByaW50ZXJJY29uKHByaW50ZXJJZCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gaWNvbjsKKyAgICB9CisKICAgICBwdWJsaWMgdm9pZCBjYW5jZWxQcmludEpvYihQcmludEpvYklkIHByaW50Sm9iSWQsIGludCBhcHBJZCkgewogICAgICAgICBQcmludEpvYkluZm8gcHJpbnRKb2JJbmZvID0gbVNwb29sZXIuZ2V0UHJpbnRKb2JJbmZvKHByaW50Sm9iSWQsIGFwcElkKTsKICAgICAgICAgaWYgKHByaW50Sm9iSW5mbyA9PSBudWxsKSB7CkBAIC0zNDUsNiArMzY4LDggQEAKICAgICAgICAgICAgIHRocm93SWZEZXN0cm95ZWRMb2NrZWQoKTsKIAogICAgICAgICAgICAgaWYgKG1QcmludGVyRGlzY292ZXJ5U2Vzc2lvbiA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgbVNwb29sZXIuY2xlYXJDdXN0b21QcmludGVySWNvbkNhY2hlKCk7CisKICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBkbyBub3QgaGF2ZSBhIHNlc3Npb24sIHRlbGwgYWxsIHNlcnZpY2UgdG8gY3JlYXRlIG9uZS4KICAgICAgICAgICAgICAgICBtUHJpbnRlckRpc2NvdmVyeVNlc3Npb24gPSBuZXcgUHJpbnRlckRpc2NvdmVyeVNlc3Npb25NZWRpYXRvcihtQ29udGV4dCkgewogICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKQEAgLTUzMyw2ICs1NTgsMjAgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvbkN1c3RvbVByaW50ZXJJY29uTG9hZGVkKFByaW50ZXJJZCBwcmludGVySWQsIEljb24gaWNvbikgeworICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CisgICAgICAgICAgICB0aHJvd0lmRGVzdHJveWVkTG9ja2VkKCk7CisKKyAgICAgICAgICAgIC8vIE5vIHNlc3Npb24gLSBub3RoaW5nIHRvIGRvLgorICAgICAgICAgICAgaWYgKG1QcmludGVyRGlzY292ZXJ5U2Vzc2lvbiA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbVNwb29sZXIub25DdXN0b21QcmludGVySWNvbkxvYWRlZChwcmludGVySWQsIGljb24pOworICAgICAgICAgICAgbVByaW50ZXJEaXNjb3ZlcnlTZXNzaW9uLm9uQ3VzdG9tUHJpbnRlckljb25Mb2FkZWRMb2NrZWQocHJpbnRlcklkKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIG9uU2VydmljZURpZWQoUmVtb3RlUHJpbnRTZXJ2aWNlIHNlcnZpY2UpIHsKICAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgewogICAgICAgICAgICAgdGhyb3dJZkRlc3Ryb3llZExvY2tlZCgpOwpAQCAtOTczLDE2ICsxMDEyLDE2IEBACiAKICAgICAgICAgcHJpdmF0ZSBmaW5hbCBMaXN0PFByaW50ZXJJZD4gbVN0YXRlVHJhY2tlZFByaW50ZXJzID0gbmV3IEFycmF5TGlzdDxQcmludGVySWQ+KCk7CiAKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBIYW5kbGVyIG1IYW5kbGVyOworICAgICAgICBwcml2YXRlIGZpbmFsIEhhbmRsZXIgbVNlc3Npb25IYW5kbGVyOwogCiAgICAgICAgIHByaXZhdGUgYm9vbGVhbiBtSXNEZXN0cm95ZWQ7CiAKICAgICAgICAgcHVibGljIFByaW50ZXJEaXNjb3ZlcnlTZXNzaW9uTWVkaWF0b3IoQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICAgICAgICBtSGFuZGxlciA9IG5ldyBTZXNzaW9uSGFuZGxlcihjb250ZXh0LmdldE1haW5Mb29wZXIoKSk7CisgICAgICAgICAgICBtU2Vzc2lvbkhhbmRsZXIgPSBuZXcgU2Vzc2lvbkhhbmRsZXIoY29udGV4dC5nZXRNYWluTG9vcGVyKCkpOwogICAgICAgICAgICAgLy8gS2ljayBvZmYgdGhlIHNlc3Npb24gY3JlYXRpb24uCiAgICAgICAgICAgICBMaXN0PFJlbW90ZVByaW50U2VydmljZT4gc2VydmljZXMgPSBuZXcgQXJyYXlMaXN0PFJlbW90ZVByaW50U2VydmljZT4oCiAgICAgICAgICAgICAgICAgICAgIG1BY3RpdmVTZXJ2aWNlcy52YWx1ZXMoKSk7Ci0gICAgICAgICAgICBtSGFuZGxlci5vYnRhaW5NZXNzYWdlKFNlc3Npb25IYW5kbGVyCisgICAgICAgICAgICBtU2Vzc2lvbkhhbmRsZXIub2J0YWluTWVzc2FnZShTZXNzaW9uSGFuZGxlcgogICAgICAgICAgICAgICAgICAgICAuTVNHX0RJU1BBVENIX0NSRUFURV9QUklOVEVSX0RJU0NPVkVSWV9TRVNTSU9OLCBzZXJ2aWNlcykKICAgICAgICAgICAgICAgICAgICAgLnNlbmRUb1RhcmdldCgpOwogICAgICAgICB9CkBAIC05OTcsNyArMTAzNiw3IEBACiAgICAgICAgICAgICAgICAgU29tZUFyZ3MgYXJncyA9IFNvbWVBcmdzLm9idGFpbigpOwogICAgICAgICAgICAgICAgIGFyZ3MuYXJnMSA9IG9ic2VydmVyOwogICAgICAgICAgICAgICAgIGFyZ3MuYXJnMiA9IHByaW50ZXJzOwotICAgICAgICAgICAgICAgIG1IYW5kbGVyLm9idGFpbk1lc3NhZ2UoU2Vzc2lvbkhhbmRsZXIuTVNHX1BSSU5URVJTX0FEREVELAorICAgICAgICAgICAgICAgIG1TZXNzaW9uSGFuZGxlci5vYnRhaW5NZXNzYWdlKFNlc3Npb25IYW5kbGVyLk1TR19QUklOVEVSU19BRERFRCwKICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MpLnNlbmRUb1RhcmdldCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xMDQwLDcgKzEwNzksNyBAQAogICAgICAgICAgICAgU29tZUFyZ3MgYXJncyA9IFNvbWVBcmdzLm9idGFpbigpOwogICAgICAgICAgICAgYXJncy5hcmcxID0gc2VydmljZXM7CiAgICAgICAgICAgICBhcmdzLmFyZzIgPSBwcmlvcml0eUxpc3Q7Ci0gICAgICAgICAgICBtSGFuZGxlci5vYnRhaW5NZXNzYWdlKFNlc3Npb25IYW5kbGVyCisgICAgICAgICAgICBtU2Vzc2lvbkhhbmRsZXIub2J0YWluTWVzc2FnZShTZXNzaW9uSGFuZGxlcgogICAgICAgICAgICAgICAgICAgICAuTVNHX0RJU1BBVENIX1NUQVJUX1BSSU5URVJfRElTQ09WRVJZLCBhcmdzKQogICAgICAgICAgICAgICAgICAgICAuc2VuZFRvVGFyZ2V0KCk7CiAgICAgICAgIH0KQEAgLTEwNjAsNyArMTA5OSw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBMaXN0PFJlbW90ZVByaW50U2VydmljZT4gc2VydmljZXMgPSBuZXcgQXJyYXlMaXN0PFJlbW90ZVByaW50U2VydmljZT4oCiAgICAgICAgICAgICAgICAgICAgIG1BY3RpdmVTZXJ2aWNlcy52YWx1ZXMoKSk7Ci0gICAgICAgICAgICBtSGFuZGxlci5vYnRhaW5NZXNzYWdlKFNlc3Npb25IYW5kbGVyCisgICAgICAgICAgICBtU2Vzc2lvbkhhbmRsZXIub2J0YWluTWVzc2FnZShTZXNzaW9uSGFuZGxlcgogICAgICAgICAgICAgICAgICAgICAuTVNHX0RJU1BBVENIX1NUT1BfUFJJTlRFUl9ESVNDT1ZFUlksIHNlcnZpY2VzKQogICAgICAgICAgICAgICAgICAgICAuc2VuZFRvVGFyZ2V0KCk7CiAgICAgICAgIH0KQEAgLTEwOTQsNyArMTEzMyw3IEBACiAgICAgICAgICAgICAgICAgICAgIFNvbWVBcmdzIGFyZ3MgPSBTb21lQXJncy5vYnRhaW4oKTsKICAgICAgICAgICAgICAgICAgICAgYXJncy5hcmcxID0gc2VydmljZTsKICAgICAgICAgICAgICAgICAgICAgYXJncy5hcmcyID0gdXBkYXRlTGlzdDsKLSAgICAgICAgICAgICAgICAgICAgbUhhbmRsZXIub2J0YWluTWVzc2FnZShTZXNzaW9uSGFuZGxlcgorICAgICAgICAgICAgICAgICAgICBtU2Vzc2lvbkhhbmRsZXIub2J0YWluTWVzc2FnZShTZXNzaW9uSGFuZGxlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5NU0dfVkFMSURBVEVfUFJJTlRFUlMsIGFyZ3MpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNlbmRUb1RhcmdldCgpOwogICAgICAgICAgICAgICAgIH0KQEAgLTExMjYsNyArMTE2NSw3IEBACiAgICAgICAgICAgICBTb21lQXJncyBhcmdzID0gU29tZUFyZ3Mub2J0YWluKCk7CiAgICAgICAgICAgICBhcmdzLmFyZzEgPSBzZXJ2aWNlOwogICAgICAgICAgICAgYXJncy5hcmcyID0gcHJpbnRlcklkOwotICAgICAgICAgICAgbUhhbmRsZXIub2J0YWluTWVzc2FnZShTZXNzaW9uSGFuZGxlcgorICAgICAgICAgICAgbVNlc3Npb25IYW5kbGVyLm9idGFpbk1lc3NhZ2UoU2Vzc2lvbkhhbmRsZXIKICAgICAgICAgICAgICAgICAgICAgLk1TR19TVEFSVF9QUklOVEVSX1NUQVRFX1RSQUNLSU5HLCBhcmdzKQogICAgICAgICAgICAgICAgICAgICAuc2VuZFRvVGFyZ2V0KCk7CiAgICAgICAgIH0KQEAgLTExNTMsNyArMTE5Miw3IEBACiAgICAgICAgICAgICBTb21lQXJncyBhcmdzID0gU29tZUFyZ3Mub2J0YWluKCk7CiAgICAgICAgICAgICBhcmdzLmFyZzEgPSBzZXJ2aWNlOwogICAgICAgICAgICAgYXJncy5hcmcyID0gcHJpbnRlcklkOwotICAgICAgICAgICAgbUhhbmRsZXIub2J0YWluTWVzc2FnZShTZXNzaW9uSGFuZGxlcgorICAgICAgICAgICAgbVNlc3Npb25IYW5kbGVyLm9idGFpbk1lc3NhZ2UoU2Vzc2lvbkhhbmRsZXIKICAgICAgICAgICAgICAgICAgICAgLk1TR19TVE9QX1BSSU5URVJfU1RBVEVfVFJBQ0tJTkcsIGFyZ3MpCiAgICAgICAgICAgICAgICAgICAgIC5zZW5kVG9UYXJnZXQoKTsKICAgICAgICAgfQpAQCAtMTE4Myw3ICsxMjIyLDcgQEAKICAgICAgICAgICAgIC8vIFRlbGwgdGhlIHNlcnZpY2VzIHdlIGFyZSBkb25lLgogICAgICAgICAgICAgTGlzdDxSZW1vdGVQcmludFNlcnZpY2U+IHNlcnZpY2VzID0gbmV3IEFycmF5TGlzdDxSZW1vdGVQcmludFNlcnZpY2U+KAogICAgICAgICAgICAgICAgICAgICBtQWN0aXZlU2VydmljZXMudmFsdWVzKCkpOwotICAgICAgICAgICAgbUhhbmRsZXIub2J0YWluTWVzc2FnZShTZXNzaW9uSGFuZGxlcgorICAgICAgICAgICAgbVNlc3Npb25IYW5kbGVyLm9idGFpbk1lc3NhZ2UoU2Vzc2lvbkhhbmRsZXIKICAgICAgICAgICAgICAgICAgICAgLk1TR19ESVNQQVRDSF9ERVNUUk9ZX1BSSU5URVJfRElTQ09WRVJZX1NFU1NJT04sIHNlcnZpY2VzKQogICAgICAgICAgICAgICAgICAgICAuc2VuZFRvVGFyZ2V0KCk7CiAgICAgICAgIH0KQEAgLTEyMDksNyArMTI0OCw3IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGFkZGVkUHJpbnRlcnMgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1IYW5kbGVyLm9idGFpbk1lc3NhZ2UoU2Vzc2lvbkhhbmRsZXIuTVNHX0RJU1BBVENIX1BSSU5URVJTX0FEREVELAorICAgICAgICAgICAgICAgIG1TZXNzaW9uSGFuZGxlci5vYnRhaW5NZXNzYWdlKFNlc3Npb25IYW5kbGVyLk1TR19ESVNQQVRDSF9QUklOVEVSU19BRERFRCwKICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGVkUHJpbnRlcnMpLnNlbmRUb1RhcmdldCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xMjM0LDcgKzEyNzMsNyBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChyZW1vdmVkUHJpbnRlcklkcyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbUhhbmRsZXIub2J0YWluTWVzc2FnZShTZXNzaW9uSGFuZGxlci5NU0dfRElTUEFUQ0hfUFJJTlRFUlNfUkVNT1ZFRCwKKyAgICAgICAgICAgICAgICBtU2Vzc2lvbkhhbmRsZXIub2J0YWluTWVzc2FnZShTZXNzaW9uSGFuZGxlci5NU0dfRElTUEFUQ0hfUFJJTlRFUlNfUkVNT1ZFRCwKICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWRQcmludGVySWRzKS5zZW5kVG9UYXJnZXQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTI1MCw2ICsxMjg5LDM3IEBACiAgICAgICAgICAgICBzZXJ2aWNlLmRlc3Ryb3koKTsKICAgICAgICAgfQogCisgICAgICAgIC8qKgorICAgICAgICAgKiBIYW5kbGUgdGhhdCBhIGN1c3RvbSBpY29uIGZvciBhIHByaW50ZXIgd2FzIGxvYWRlZC4KKyAgICAgICAgICoKKyAgICAgICAgICogVGhpcyBpbmNyZW1lbnRzIHRoZSBpY29uIGdlbmVyYXRpb24gYW5kIGFkZHMgdGhlIHByaW50ZXIgYWdhaW4gd2hpY2ggdHJpZ2dlcnMgYW4gdXBkYXRlCisgICAgICAgICAqIGluIGFsbCB1c2VycyBvZiB0aGUgY3VycmVudGx5IGtub3duIHByaW50ZXJzLgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gcHJpbnRlcklkIHRoZSBpZCBvZiB0aGUgcHJpbnRlciB0aGUgaWNvbiBiZWxvbmdzIHRvCisgICAgICAgICAqIEBzZWUgYW5kcm9pZC5wcmludC5QcmludGVySW5mby5CdWlsZGVyI3NldEhhc0N1c3RvbVByaW50ZXJJY29uKCkKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIG9uQ3VzdG9tUHJpbnRlckljb25Mb2FkZWRMb2NrZWQoUHJpbnRlcklkIHByaW50ZXJJZCkgeworICAgICAgICAgICAgaWYgKERFQlVHKSB7CisgICAgICAgICAgICAgICAgTG9nLmkoTE9HX1RBRywgIm9uQ3VzdG9tUHJpbnRlckljb25Mb2FkZWRMb2NrZWQoKSIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1Jc0Rlc3Ryb3llZCkgeworICAgICAgICAgICAgICAgIExvZy53KExPR19UQUcsICJOb3QgdXBkYXRpbmcgcHJpbnRlciAtIHNlc3Npb24gZGVzdHJveWVkIik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBQcmludGVySW5mbyBwcmludGVyID0gbVByaW50ZXJzLmdldChwcmludGVySWQpOworICAgICAgICAgICAgaWYgKHByaW50ZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIFByaW50ZXJJbmZvIG5ld1ByaW50ZXIgPSAobmV3IFByaW50ZXJJbmZvLkJ1aWxkZXIocHJpbnRlcikpCisgICAgICAgICAgICAgICAgICAgICAgICAuaW5jQ3VzdG9tUHJpbnRlckljb25HZW4oKS5idWlsZCgpOworICAgICAgICAgICAgICAgIG1QcmludGVycy5wdXQocHJpbnRlcklkLCBuZXdQcmludGVyKTsKKworICAgICAgICAgICAgICAgIEFycmF5TGlzdDxQcmludGVySW5mbz4gYWRkZWRQcmludGVycyA9IG5ldyBBcnJheUxpc3Q8PigxKTsKKyAgICAgICAgICAgICAgICBhZGRlZFByaW50ZXJzLmFkZChuZXdQcmludGVyKTsKKyAgICAgICAgICAgICAgICBtU2Vzc2lvbkhhbmRsZXIub2J0YWluTWVzc2FnZShTZXNzaW9uSGFuZGxlci5NU0dfRElTUEFUQ0hfUFJJTlRFUlNfQURERUQsCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRlZFByaW50ZXJzKS5zZW5kVG9UYXJnZXQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCiAgICAgICAgIHB1YmxpYyB2b2lkIG9uU2VydmljZURpZWRMb2NrZWQoUmVtb3RlUHJpbnRTZXJ2aWNlIHNlcnZpY2UpIHsKICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgcmVwb3J0ZWQgYnkgdGhhdCBzZXJ2aWNlLgogICAgICAgICAgICAgcmVtb3ZlUHJpbnRlcnNGb3JTZXJ2aWNlTG9ja2VkKHNlcnZpY2UuZ2V0Q29tcG9uZW50TmFtZSgpKTsKQEAgLTEyNjEsMTIgKzEzMzEsMTIgQEAKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBUZWxsIHRoZSBzZXJ2aWNlIHRvIGNyZWF0ZSBhIHNlc3Npb24uCi0gICAgICAgICAgICBtSGFuZGxlci5vYnRhaW5NZXNzYWdlKAorICAgICAgICAgICAgbVNlc3Npb25IYW5kbGVyLm9idGFpbk1lc3NhZ2UoCiAgICAgICAgICAgICAgICAgICAgIFNlc3Npb25IYW5kbGVyLk1TR19DUkVBVEVfUFJJTlRFUl9ESVNDT1ZFUllfU0VTU0lPTiwKICAgICAgICAgICAgICAgICAgICAgc2VydmljZSkuc2VuZFRvVGFyZ2V0KCk7CiAgICAgICAgICAgICAvLyBTdGFydCBwcmludGVyIGRpc2NvdmVyeSBpZiBuZWNlc3NhcnkuCiAgICAgICAgICAgICBpZiAoIW1TdGFydGVkUHJpbnRlckRpc2NvdmVyeVRva2Vucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBtSGFuZGxlci5vYnRhaW5NZXNzYWdlKAorICAgICAgICAgICAgICAgIG1TZXNzaW9uSGFuZGxlci5vYnRhaW5NZXNzYWdlKAogICAgICAgICAgICAgICAgICAgICAgICAgU2Vzc2lvbkhhbmRsZXIuTVNHX1NUQVJUX1BSSU5URVJfRElTQ09WRVJZLAogICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZSkuc2VuZFRvVGFyZ2V0KCk7CiAgICAgICAgICAgICB9CkBAIC0xMjc4LDcgKzEzNDgsNyBAQAogICAgICAgICAgICAgICAgICAgICBTb21lQXJncyBhcmdzID0gU29tZUFyZ3Mub2J0YWluKCk7CiAgICAgICAgICAgICAgICAgICAgIGFyZ3MuYXJnMSA9IHNlcnZpY2U7CiAgICAgICAgICAgICAgICAgICAgIGFyZ3MuYXJnMiA9IHByaW50ZXJJZDsKLSAgICAgICAgICAgICAgICAgICAgbUhhbmRsZXIub2J0YWluTWVzc2FnZShTZXNzaW9uSGFuZGxlcgorICAgICAgICAgICAgICAgICAgICBtU2Vzc2lvbkhhbmRsZXIub2J0YWluTWVzc2FnZShTZXNzaW9uSGFuZGxlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5NU0dfU1RBUlRfUFJJTlRFUl9TVEFURV9UUkFDS0lORywgYXJncykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2VuZFRvVGFyZ2V0KCk7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTM0OCw3ICsxNDE4LDcgQEAKICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlbW92ZWRQcmludGVyQ291bnQ7IGkrKykgewogICAgICAgICAgICAgICAgICAgICBtUHJpbnRlcnMucmVtb3ZlKHJlbW92ZWRQcmludGVySWRzLmdldChpKSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1IYW5kbGVyLm9idGFpbk1lc3NhZ2UoCisgICAgICAgICAgICAgICAgbVNlc3Npb25IYW5kbGVyLm9idGFpbk1lc3NhZ2UoCiAgICAgICAgICAgICAgICAgICAgICAgICBTZXNzaW9uSGFuZGxlci5NU0dfRElTUEFUQ0hfUFJJTlRFUlNfUkVNT1ZFRCwKICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWRQcmludGVySWRzKS5zZW5kVG9UYXJnZXQoKTsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL3NlcnZpY2VzL3Rlc3RzL3NlcnZpY2VzdGVzdHMvc3JjL2NvbS9hbmRyb2lkL3NlcnZlci9kZXZpY2Vwb2xpY3kvRGV2aWNlUG9saWN5TWFuYWdlclNlcnZpY2VUZXN0YWJsZS5qYXZhIGIvc2VydmljZXMvdGVzdHMvc2VydmljZXN0ZXN0cy9zcmMvY29tL2FuZHJvaWQvc2VydmVyL2RldmljZXBvbGljeS9EZXZpY2VQb2xpY3lNYW5hZ2VyU2VydmljZVRlc3RhYmxlLmphdmEKaW5kZXggNDM1YjYwMi4uOTBlNGFjZiAxMDA2NDQKLS0tIGEvc2VydmljZXMvdGVzdHMvc2VydmljZXN0ZXN0cy9zcmMvY29tL2FuZHJvaWQvc2VydmVyL2RldmljZXBvbGljeS9EZXZpY2VQb2xpY3lNYW5hZ2VyU2VydmljZVRlc3RhYmxlLmphdmEKKysrIGIvc2VydmljZXMvdGVzdHMvc2VydmljZXN0ZXN0cy9zcmMvY29tL2FuZHJvaWQvc2VydmVyL2RldmljZXBvbGljeS9EZXZpY2VQb2xpY3lNYW5hZ2VyU2VydmljZVRlc3RhYmxlLmphdmEKQEAgLTIwOCw2ICsyMDgsMTEgQEAKICAgICAgICAgfQogCiAgICAgICAgIEBPdmVycmlkZQorICAgICAgICB2b2lkIHBvd2VyTWFuYWdlclJlYm9vdChTdHJpbmcgcmVhc29uKSB7CisgICAgICAgICAgICBjb250ZXh0LnBvd2VyTWFuYWdlci5yZWJvb3QocmVhc29uKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQogICAgICAgICBib29sZWFuIHN5c3RlbVByb3BlcnRpZXNHZXRCb29sZWFuKFN0cmluZyBrZXksIGJvb2xlYW4gZGVmKSB7CiAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5zeXN0ZW1Qcm9wZXJ0aWVzLmdldEJvb2xlYW4oa2V5LCBkZWYpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy90ZXN0cy9zZXJ2aWNlc3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9zZXJ2ZXIvZGV2aWNlcG9saWN5L0RldmljZVBvbGljeU1hbmFnZXJUZXN0LmphdmEgYi9zZXJ2aWNlcy90ZXN0cy9zZXJ2aWNlc3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9zZXJ2ZXIvZGV2aWNlcG9saWN5L0RldmljZVBvbGljeU1hbmFnZXJUZXN0LmphdmEKaW5kZXggNzc0N2ZkOS4uNjcyMDU4YiAxMDA2NDQKLS0tIGEvc2VydmljZXMvdGVzdHMvc2VydmljZXN0ZXN0cy9zcmMvY29tL2FuZHJvaWQvc2VydmVyL2RldmljZXBvbGljeS9EZXZpY2VQb2xpY3lNYW5hZ2VyVGVzdC5qYXZhCisrKyBiL3NlcnZpY2VzL3Rlc3RzL3NlcnZpY2VzdGVzdHMvc3JjL2NvbS9hbmRyb2lkL3NlcnZlci9kZXZpY2Vwb2xpY3kvRGV2aWNlUG9saWN5TWFuYWdlclRlc3QuamF2YQpAQCAtNzU4LDcgKzc1OCw3IEBACiAgICAgICAgIHdoZW4obUNvbnRleHQudXNlck1hbmFnZXIuZ2V0VXNlclJlc3RyaWN0aW9ucygpKS50aGVuUmV0dXJuKG5ldyBCdW5kbGUoKSk7CiAKICAgICAgICAgLy8gTm93IGNhbGwgY2xlYXIuCi0gICAgICAgIGRvUmV0dXJuKERwbU1vY2tDb250ZXh0LkNBTExFUl9TWVNURU1fVVNFUl9VSUQpLndoZW4obUNvbnRleHQucGFja2FnZU1hbmFnZXIpLmdldFBhY2thZ2VVaWQoCisgICAgICAgIGRvUmV0dXJuKERwbU1vY2tDb250ZXh0LkNBTExFUl9TWVNURU1fVVNFUl9VSUQpLndoZW4obUNvbnRleHQucGFja2FnZU1hbmFnZXIpLmdldFBhY2thZ2VVaWRBc1VzZXIoCiAgICAgICAgICAgICAgICAgZXEoYWRtaW4xLmdldFBhY2thZ2VOYW1lKCkpLAogICAgICAgICAgICAgICAgIGFueUludCgpKTsKICAgICAgICAgZHBtLmNsZWFyRGV2aWNlT3duZXJBcHAoYWRtaW4xLmdldFBhY2thZ2VOYW1lKCkpOwpAQCAtNzk3LDcgKzc5Nyw3IEBACiAgICAgICAgIG1Db250ZXh0LmJpbmRlci5jYWxsaW5nVWlkID0gRHBtTW9ja0NvbnRleHQuQ0FMTEVSX1VJRDsKIAogICAgICAgICAvLyBOb3cgY2FsbCBjbGVhci4KLSAgICAgICAgZG9SZXR1cm4oRHBtTW9ja0NvbnRleHQuQ0FMTEVSX1VJRCkud2hlbihtQ29udGV4dC5wYWNrYWdlTWFuYWdlcikuZ2V0UGFja2FnZVVpZCgKKyAgICAgICAgZG9SZXR1cm4oRHBtTW9ja0NvbnRleHQuQ0FMTEVSX1VJRCkud2hlbihtQ29udGV4dC5wYWNrYWdlTWFuYWdlcikuZ2V0UGFja2FnZVVpZEFzVXNlcigKICAgICAgICAgICAgICAgICBlcShhZG1pbjEuZ2V0UGFja2FnZU5hbWUoKSksCiAgICAgICAgICAgICAgICAgYW55SW50KCkpOwogICAgICAgICB0cnkgewpAQCAtOTUxLDcgKzk1MSw3IEBACiAgICAgICAgIGZpbmFsIGludCBhcHBSZXN0cmljdGlvbnNNYW5hZ2VyQXBwSWQgPSAyMDk4NzsKICAgICAgICAgZmluYWwgaW50IGFwcFJlc3RyaWN0aW9uc01hbmFnZXJVaWQgPSBVc2VySGFuZGxlLmdldFVpZCgKICAgICAgICAgICAgICAgICBEcG1Nb2NrQ29udGV4dC5DQUxMRVJfVVNFUl9IQU5ETEUsIGFwcFJlc3RyaWN0aW9uc01hbmFnZXJBcHBJZCk7Ci0gICAgICAgIGRvUmV0dXJuKGFwcFJlc3RyaWN0aW9uc01hbmFnZXJVaWQpLndoZW4obUNvbnRleHQucGFja2FnZU1hbmFnZXIpLmdldFBhY2thZ2VVaWQoCisgICAgICAgIGRvUmV0dXJuKGFwcFJlc3RyaWN0aW9uc01hbmFnZXJVaWQpLndoZW4obUNvbnRleHQucGFja2FnZU1hbmFnZXIpLmdldFBhY2thZ2VVaWRBc1VzZXIoCiAgICAgICAgICAgICAgICAgZXEoYXBwUmVzdHJpY3Rpb25zTWFuYWdlclBhY2thZ2UpLAogICAgICAgICAgICAgICAgIGVxKERwbU1vY2tDb250ZXh0LkNBTExFUl9VU0VSX0hBTkRMRSkpOwogICAgICAgICBtQ29udGV4dC5iaW5kZXIuY2FsbGluZ1VpZCA9IGFwcFJlc3RyaWN0aW9uc01hbmFnZXJVaWQ7CkBAIC0xMzQ5LDQgKzEzNDksMTMxIEBACiAgICAgICAgIHdoZW4obUNvbnRleHQud2lmaU1hbmFnZXIuZ2V0Q29ubmVjdGlvbkluZm8oKSkudGhlblJldHVybih3aSk7CiAgICAgICAgIGFzc2VydEVxdWFscygiMTE6MjI6MzM6NDQ6NTU6NjYiLCBkcG0uZ2V0V2lmaU1hY0FkZHJlc3MoKSk7CiAgICAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdFJlYm9vdENhbk9ubHlCZUNhbGxlZEJ5RGV2aWNlT3duZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgbUNvbnRleHQuY2FsbGVyUGVybWlzc2lvbnMuYWRkKHBlcm1pc3Npb24uTUFOQUdFX0RFVklDRV9BRE1JTlMpOworICAgICAgICBtQ29udGV4dC5jYWxsZXJQZXJtaXNzaW9ucy5hZGQocGVybWlzc2lvbi5NQU5BR0VfUFJPRklMRV9BTkRfREVWSUNFX09XTkVSUyk7CisKKyAgICAgICAgLy8gSW4gdGhpcyB0ZXN0LCBjaGFuZ2UgdGhlIGNhbGxlciB1c2VyIHRvICJzeXN0ZW0iLgorICAgICAgICBtQ29udGV4dC5iaW5kZXIuY2FsbGluZ1VpZCA9IERwbU1vY2tDb250ZXh0LkNBTExFUl9TWVNURU1fVVNFUl9VSUQ7CisKKyAgICAgICAgLy8gTWFrZSBzdXJlIGFkbWluMSBpcyBpbnN0YWxsZWQgb24gc3lzdGVtIHVzZXIuCisgICAgICAgIHNldFVwUGFja2FnZU1hbmFnZXJGb3JBZG1pbihhZG1pbjEsIERwbU1vY2tDb250ZXh0LkNBTExFUl9TWVNURU1fVVNFUl9VSUQpOworCisgICAgICAgIC8vIFNldCBhZG1pbjEgYXMgREEuCisgICAgICAgIGRwbS5zZXRBY3RpdmVBZG1pbihhZG1pbjEsIGZhbHNlKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShkcG0uaXNBZG1pbkFjdGl2ZShhZG1pbjEpKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGRwbS5yZWJvb3QoYWRtaW4xKTsKKyAgICAgICAgICAgIGZhaWwoIkRBIGNhbGxzIERQTS5yZWJvb3QoKSwgZGlkIG5vdCB0aHJvdyBleHBlY3RlZCBTZWN1cml0eUV4Y2VwdGlvbiIpOworICAgICAgICB9IGNhdGNoIChTZWN1cml0eUV4Y2VwdGlvbiBleHBlY3RlZCkgeworICAgICAgICAgICAgTW9yZUFzc2VydHMuYXNzZXJ0Q29udGFpbnNSZWdleCgiZG9lcyBub3Qgb3duIHRoZSBkZXZpY2UiLCBleHBlY3RlZC5nZXRNZXNzYWdlKCkpOworICAgICAgICB9CisKKyAgICAgICAgLy8gU2V0IGFkbWluMSBhcyBQTy4KKyAgICAgICAgYXNzZXJ0VHJ1ZShkcG0uc2V0UHJvZmlsZU93bmVyKGFkbWluMSwgbnVsbCwgVXNlckhhbmRsZS5VU0VSX1NZU1RFTSkpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgZHBtLnJlYm9vdChhZG1pbjEpOworICAgICAgICAgICAgZmFpbCgiUE8gY2FsbHMgRFBNLnJlYm9vdCgpLCBkaWQgbm90IHRocm93IGV4cGVjdGVkIFNlY3VyaXR5RXhjZXB0aW9uIik7CisgICAgICAgIH0gY2F0Y2ggKFNlY3VyaXR5RXhjZXB0aW9uIGV4cGVjdGVkKSB7CisgICAgICAgICAgICBNb3JlQXNzZXJ0cy5hc3NlcnRDb250YWluc1JlZ2V4KCJkb2VzIG5vdCBvd24gdGhlIGRldmljZSIsIGV4cGVjdGVkLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBSZW1vdmUgUE8gYW5kIGFkZCBETy4KKyAgICAgICAgZHBtLmNsZWFyUHJvZmlsZU93bmVyKGFkbWluMSk7CisgICAgICAgIGFzc2VydFRydWUoZHBtLnNldERldmljZU93bmVyKGFkbWluMSwgbnVsbCwgVXNlckhhbmRsZS5VU0VSX1NZU1RFTSkpOworCisgICAgICAgIGRwbS5yZWJvb3QoYWRtaW4xKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0U2V0R2V0U3VwcG9ydFRleHQoKSB7CisgICAgICAgIG1Db250ZXh0LmNhbGxlclBlcm1pc3Npb25zLmFkZChwZXJtaXNzaW9uLk1BTkFHRV9ERVZJQ0VfQURNSU5TKTsKKyAgICAgICAgZHBtLnNldEFjdGl2ZUFkbWluKGFkbWluMSwgdHJ1ZSk7CisgICAgICAgIGRwbS5zZXRBY3RpdmVBZG1pbihhZG1pbjIsIHRydWUpOworICAgICAgICBtQ29udGV4dC5jYWxsZXJQZXJtaXNzaW9ucy5yZW1vdmUocGVybWlzc2lvbi5NQU5BR0VfREVWSUNFX0FETUlOUyk7CisKKyAgICAgICAgLy8gTnVsbCBkZWZhdWx0IHN1cHBvcnQgbWVzc2FnZXMuCisgICAgICAgIHsKKyAgICAgICAgICAgIGFzc2VydE51bGwoZHBtLmdldExvbmdTdXBwb3J0TWVzc2FnZShhZG1pbjEpKTsKKyAgICAgICAgICAgIGFzc2VydE51bGwoZHBtLmdldFNob3J0U3VwcG9ydE1lc3NhZ2UoYWRtaW4xKSk7CisgICAgICAgICAgICBtQ29udGV4dC5iaW5kZXIuY2FsbGluZ1VpZCA9IERwbU1vY2tDb250ZXh0LlNZU1RFTV9VSUQ7CisgICAgICAgICAgICBhc3NlcnROdWxsKGRwbS5nZXRTaG9ydFN1cHBvcnRNZXNzYWdlRm9yVXNlcihhZG1pbjEsCisgICAgICAgICAgICAgICAgICAgIERwbU1vY2tDb250ZXh0LkNBTExFUl9VU0VSX0hBTkRMRSkpOworICAgICAgICAgICAgYXNzZXJ0TnVsbChkcG0uZ2V0TG9uZ1N1cHBvcnRNZXNzYWdlRm9yVXNlcihhZG1pbjEsCisgICAgICAgICAgICAgICAgICAgIERwbU1vY2tDb250ZXh0LkNBTExFUl9VU0VSX0hBTkRMRSkpOworICAgICAgICAgICAgbU1vY2tDb250ZXh0LmJpbmRlci5jYWxsaW5nVWlkID0gRHBtTW9ja0NvbnRleHQuQ0FMTEVSX1VJRDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9ubHkgc3lzdGVtIGNhbiBjYWxsIHRoZSBwZXIgdXNlciB2ZXJzaW9ucy4KKyAgICAgICAgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBkcG0uZ2V0U2hvcnRTdXBwb3J0TWVzc2FnZUZvclVzZXIoYWRtaW4xLAorICAgICAgICAgICAgICAgICAgICAgICAgRHBtTW9ja0NvbnRleHQuQ0FMTEVSX1VTRVJfSEFORExFKTsKKyAgICAgICAgICAgICAgICBmYWlsKCJPbmx5IHN5c3RlbSBzaG91bGQgYmUgYWJsZSB0byBjYWxsIGdldFhYWEZvclVzZXIgdmVyc2lvbnMiKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKFNlY3VyaXR5RXhjZXB0aW9uIGV4cGVjdGVkKSB7CisgICAgICAgICAgICAgICAgTW9yZUFzc2VydHMuYXNzZXJ0Q29udGFpbnNSZWdleCgibWVzc2FnZSBmb3IgdXNlciIsIGV4cGVjdGVkLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGRwbS5nZXRMb25nU3VwcG9ydE1lc3NhZ2VGb3JVc2VyKGFkbWluMSwKKyAgICAgICAgICAgICAgICAgICAgICAgIERwbU1vY2tDb250ZXh0LkNBTExFUl9VU0VSX0hBTkRMRSk7CisgICAgICAgICAgICAgICAgZmFpbCgiT25seSBzeXN0ZW0gc2hvdWxkIGJlIGFibGUgdG8gY2FsbCBnZXRYWFhGb3JVc2VyIHZlcnNpb25zIik7CisgICAgICAgICAgICB9IGNhdGNoIChTZWN1cml0eUV4Y2VwdGlvbiBleHBlY3RlZCkgeworICAgICAgICAgICAgICAgIE1vcmVBc3NlcnRzLmFzc2VydENvbnRhaW5zUmVnZXgoIm1lc3NhZ2UgZm9yIHVzZXIiLCBleHBlY3RlZC5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gQ2FuJ3Qgc2V0IG1lc3NhZ2UgZm9yIGFkbWluIGluIGFub3RoZXIgdWlkLgorICAgICAgICB7CisgICAgICAgICAgICBtQ29udGV4dC5iaW5kZXIuY2FsbGluZ1VpZCA9IERwbU1vY2tDb250ZXh0LkNBTExFUl9VSUQgKyAxOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBkcG0uc2V0U2hvcnRTdXBwb3J0TWVzc2FnZShhZG1pbjEsICJTb21lIHRleHQiKTsKKyAgICAgICAgICAgICAgICBmYWlsKCJBZG1pbnMgc2hvdWxkIG9ubHkgYmUgYWJsZSB0byBjaGFuZ2UgdGhlaXIgb3duIHN1cHBvcnQgdGV4dC4iKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKFNlY3VyaXR5RXhjZXB0aW9uIGV4cGVjdGVkKSB7CisgICAgICAgICAgICAgICAgTW9yZUFzc2VydHMuYXNzZXJ0Q29udGFpbnNSZWdleCgiaXMgbm90IG93bmVkIGJ5IHVpZCIsIGV4cGVjdGVkLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtQ29udGV4dC5iaW5kZXIuY2FsbGluZ1VpZCA9IERwbU1vY2tDb250ZXh0LkNBTExFUl9VSUQ7CisgICAgICAgIH0KKworICAgICAgICAvLyBTZXQvR2V0IHNob3J0IHJldHVybnMgd2hhdCBpdCBzZXRzIGFuZCBvdGhlciBhZG1pbnMgdGV4dCBpc24ndCBjaGFuZ2VkLgorICAgICAgICB7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgc3VwcG9ydFRleHQgPSAiU29tZSB0ZXh0IHRvIHRlc3Qgd2l0aC4iOworICAgICAgICAgICAgZHBtLnNldFNob3J0U3VwcG9ydE1lc3NhZ2UoYWRtaW4xLCBzdXBwb3J0VGV4dCk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoc3VwcG9ydFRleHQsIGRwbS5nZXRTaG9ydFN1cHBvcnRNZXNzYWdlKGFkbWluMSkpOworICAgICAgICAgICAgYXNzZXJ0TnVsbChkcG0uZ2V0TG9uZ1N1cHBvcnRNZXNzYWdlKGFkbWluMSkpOworICAgICAgICAgICAgYXNzZXJ0TnVsbChkcG0uZ2V0U2hvcnRTdXBwb3J0TWVzc2FnZShhZG1pbjIpKTsKKworICAgICAgICAgICAgbUNvbnRleHQuYmluZGVyLmNhbGxpbmdVaWQgPSBEcG1Nb2NrQ29udGV4dC5TWVNURU1fVUlEOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKHN1cHBvcnRUZXh0LCBkcG0uZ2V0U2hvcnRTdXBwb3J0TWVzc2FnZUZvclVzZXIoYWRtaW4xLAorICAgICAgICAgICAgICAgICAgICBEcG1Nb2NrQ29udGV4dC5DQUxMRVJfVVNFUl9IQU5ETEUpKTsKKyAgICAgICAgICAgIGFzc2VydE51bGwoZHBtLmdldFNob3J0U3VwcG9ydE1lc3NhZ2VGb3JVc2VyKGFkbWluMiwKKyAgICAgICAgICAgICAgICAgICAgRHBtTW9ja0NvbnRleHQuQ0FMTEVSX1VTRVJfSEFORExFKSk7CisgICAgICAgICAgICBhc3NlcnROdWxsKGRwbS5nZXRMb25nU3VwcG9ydE1lc3NhZ2VGb3JVc2VyKGFkbWluMSwKKyAgICAgICAgICAgICAgICAgICAgRHBtTW9ja0NvbnRleHQuQ0FMTEVSX1VTRVJfSEFORExFKSk7CisgICAgICAgICAgICBtTW9ja0NvbnRleHQuYmluZGVyLmNhbGxpbmdVaWQgPSBEcG1Nb2NrQ29udGV4dC5DQUxMRVJfVUlEOworCisgICAgICAgICAgICBkcG0uc2V0U2hvcnRTdXBwb3J0TWVzc2FnZShhZG1pbjEsIG51bGwpOworICAgICAgICAgICAgYXNzZXJ0TnVsbChkcG0uZ2V0U2hvcnRTdXBwb3J0TWVzc2FnZShhZG1pbjEpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFNldC9HZXQgbG9uZyByZXR1cm5zIHdoYXQgaXQgc2V0cyBhbmQgb3RoZXIgYWRtaW5zIHRleHQgaXNuJ3QgY2hhbmdlZC4KKyAgICAgICAgeworICAgICAgICAgICAgZmluYWwgU3RyaW5nIHN1cHBvcnRUZXh0ID0gIlNvbWUgdGV4dCB0byB0ZXN0IHdpdGguXG5XaXRoIG1vcmUgdGV4dC4iOworICAgICAgICAgICAgZHBtLnNldExvbmdTdXBwb3J0TWVzc2FnZShhZG1pbjEsIHN1cHBvcnRUZXh0KTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyhzdXBwb3J0VGV4dCwgZHBtLmdldExvbmdTdXBwb3J0TWVzc2FnZShhZG1pbjEpKTsKKyAgICAgICAgICAgIGFzc2VydE51bGwoZHBtLmdldFNob3J0U3VwcG9ydE1lc3NhZ2UoYWRtaW4xKSk7CisgICAgICAgICAgICBhc3NlcnROdWxsKGRwbS5nZXRMb25nU3VwcG9ydE1lc3NhZ2UoYWRtaW4yKSk7CisKKyAgICAgICAgICAgIG1Db250ZXh0LmJpbmRlci5jYWxsaW5nVWlkID0gRHBtTW9ja0NvbnRleHQuU1lTVEVNX1VJRDsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyhzdXBwb3J0VGV4dCwgZHBtLmdldExvbmdTdXBwb3J0TWVzc2FnZUZvclVzZXIoYWRtaW4xLAorICAgICAgICAgICAgICAgICAgICBEcG1Nb2NrQ29udGV4dC5DQUxMRVJfVVNFUl9IQU5ETEUpKTsKKyAgICAgICAgICAgIGFzc2VydE51bGwoZHBtLmdldExvbmdTdXBwb3J0TWVzc2FnZUZvclVzZXIoYWRtaW4yLAorICAgICAgICAgICAgICAgICAgICBEcG1Nb2NrQ29udGV4dC5DQUxMRVJfVVNFUl9IQU5ETEUpKTsKKyAgICAgICAgICAgIGFzc2VydE51bGwoZHBtLmdldFNob3J0U3VwcG9ydE1lc3NhZ2VGb3JVc2VyKGFkbWluMSwKKyAgICAgICAgICAgICAgICAgICAgRHBtTW9ja0NvbnRleHQuQ0FMTEVSX1VTRVJfSEFORExFKSk7CisgICAgICAgICAgICBtTW9ja0NvbnRleHQuYmluZGVyLmNhbGxpbmdVaWQgPSBEcG1Nb2NrQ29udGV4dC5DQUxMRVJfVUlEOworCisgICAgICAgICAgICBkcG0uc2V0TG9uZ1N1cHBvcnRNZXNzYWdlKGFkbWluMSwgbnVsbCk7CisgICAgICAgICAgICBhc3NlcnROdWxsKGRwbS5nZXRMb25nU3VwcG9ydE1lc3NhZ2UoYWRtaW4xKSk7CisgICAgICAgIH0KKyAgICB9CiB9CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy90ZXN0cy9zZXJ2aWNlc3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9zZXJ2ZXIvZGV2aWNlcG9saWN5L0RwbU1vY2tDb250ZXh0LmphdmEgYi9zZXJ2aWNlcy90ZXN0cy9zZXJ2aWNlc3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9zZXJ2ZXIvZGV2aWNlcG9saWN5L0RwbU1vY2tDb250ZXh0LmphdmEKaW5kZXggNjZkNzAxZC4uNTY2NjdlNSAxMDA2NDQKLS0tIGEvc2VydmljZXMvdGVzdHMvc2VydmljZXN0ZXN0cy9zcmMvY29tL2FuZHJvaWQvc2VydmVyL2RldmljZXBvbGljeS9EcG1Nb2NrQ29udGV4dC5qYXZhCisrKyBiL3NlcnZpY2VzL3Rlc3RzL3NlcnZpY2VzdGVzdHMvc3JjL2NvbS9hbmRyb2lkL3NlcnZlci9kZXZpY2Vwb2xpY3kvRHBtTW9ja0NvbnRleHQuamF2YQpAQCAtMTM0LDYgKzEzNCw5IEBACiAKICAgICAgICAgcHVibGljIHZvaWQgZ29Ub1NsZWVwKGxvbmcgdGltZSwgaW50IHJlYXNvbiwgaW50IGZsYWdzKSB7CiAgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCByZWJvb3QoU3RyaW5nIHJlYXNvbikgeworICAgICAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHN0YXRpYyBjbGFzcyBTeXN0ZW1Qcm9wZXJ0aWVzRm9yTW9jayB7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy90ZXN0cy9zZXJ2aWNlc3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9zZXJ2ZXIvZGV2aWNlcG9saWN5L0RwbVRlc3RCYXNlLmphdmEgYi9zZXJ2aWNlcy90ZXN0cy9zZXJ2aWNlc3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9zZXJ2ZXIvZGV2aWNlcG9saWN5L0RwbVRlc3RCYXNlLmphdmEKaW5kZXggNWIzM2U0ZC4uYzU1N2FiNyAxMDA2NDQKLS0tIGEvc2VydmljZXMvdGVzdHMvc2VydmljZXN0ZXN0cy9zcmMvY29tL2FuZHJvaWQvc2VydmVyL2RldmljZXBvbGljeS9EcG1UZXN0QmFzZS5qYXZhCisrKyBiL3NlcnZpY2VzL3Rlc3RzL3NlcnZpY2VzdGVzdHMvc3JjL2NvbS9hbmRyb2lkL3NlcnZlci9kZXZpY2Vwb2xpY3kvRHBtVGVzdEJhc2UuamF2YQpAQCAtMTE3LDcgKzExNyw3IEBACiAgICAgICAgIC8vIFdlIG5lZWQgdG8gcmV3cml0ZSB0aGUgVUlEIGluIHRoZSBhY3Rpdml0eSBpbmZvLgogICAgICAgICByZWFsUmVzb2x2ZUluZm8uZ2V0KDApLmFjdGl2aXR5SW5mby5hcHBsaWNhdGlvbkluZm8gPSBhaTsKIAotICAgICAgICBkb1JldHVybihyZWFsUmVzb2x2ZUluZm8pLndoZW4obU1vY2tDb250ZXh0LnBhY2thZ2VNYW5hZ2VyKS5xdWVyeUJyb2FkY2FzdFJlY2VpdmVycygKKyAgICAgICAgZG9SZXR1cm4ocmVhbFJlc29sdmVJbmZvKS53aGVuKG1Nb2NrQ29udGV4dC5wYWNrYWdlTWFuYWdlcikucXVlcnlCcm9hZGNhc3RSZWNlaXZlcnNBc1VzZXIoCiAgICAgICAgICAgICAgICAgTW9ja1V0aWxzLmNoZWNrSW50ZW50Q29tcG9uZW50KGFkbWluKSwKICAgICAgICAgICAgICAgICBlcShQYWNrYWdlTWFuYWdlci5HRVRfTUVUQV9EQVRBCiAgICAgICAgICAgICAgICAgICAgICAgICB8IFBhY2thZ2VNYW5hZ2VyLkdFVF9ESVNBQkxFRF9VTlRJTF9VU0VEX0NPTVBPTkVOVFMpLApkaWZmIC0tZ2l0IGEvc2VydmljZXMvdGVzdHMvc2VydmljZXN0ZXN0cy9zcmMvY29tL2FuZHJvaWQvc2VydmVyL25vdGlmaWNhdGlvbi9SYW5raW5nSGVscGVyVGVzdC5qYXZhIGIvc2VydmljZXMvdGVzdHMvc2VydmljZXN0ZXN0cy9zcmMvY29tL2FuZHJvaWQvc2VydmVyL25vdGlmaWNhdGlvbi9SYW5raW5nSGVscGVyVGVzdC5qYXZhCmluZGV4IGRmN2I0MTIuLjI2NDA4ODkgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL3Rlc3RzL3NlcnZpY2VzdGVzdHMvc3JjL2NvbS9hbmRyb2lkL3NlcnZlci9ub3RpZmljYXRpb24vUmFua2luZ0hlbHBlclRlc3QuamF2YQorKysgYi9zZXJ2aWNlcy90ZXN0cy9zZXJ2aWNlc3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9zZXJ2ZXIvbm90aWZpY2F0aW9uL1JhbmtpbmdIZWxwZXJUZXN0LmphdmEKQEAgLTM1LDcgKzM1LDcgQEAKIAogcHVibGljIGNsYXNzIFJhbmtpbmdIZWxwZXJUZXN0IGV4dGVuZHMgQW5kcm9pZFRlc3RDYXNlIHsKICAgICBATW9jayBOb3RpZmljYXRpb25Vc2FnZVN0YXRzIG1Vc2FnZVN0YXRzOwotICAgIEBNb2NrIEhhbmRsZXIgaGFuZGxlcjsKKyAgICBATW9jayBSYW5raW5nSGFuZGxlciBoYW5kbGVyOwogCiAgICAgcHJpdmF0ZSBOb3RpZmljYXRpb24gbU5vdGlHcm91cEdTb3J0QTsKICAgICBwcml2YXRlIE5vdGlmaWNhdGlvbiBtTm90aUdyb3VwR1NvcnRCOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvdXNhZ2UvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvdXNhZ2UvVXNhZ2VTdGF0c1NlcnZpY2UuamF2YSBiL3NlcnZpY2VzL3VzYWdlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3VzYWdlL1VzYWdlU3RhdHNTZXJ2aWNlLmphdmEKaW5kZXggMmIwOTE5Yi4uMjNlODg5NCAxMDA2NDQKLS0tIGEvc2VydmljZXMvdXNhZ2UvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvdXNhZ2UvVXNhZ2VTdGF0c1NlcnZpY2UuamF2YQorKysgYi9zZXJ2aWNlcy91c2FnZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci91c2FnZS9Vc2FnZVN0YXRzU2VydmljZS5qYXZhCkBAIC0zNzQsNyArMzc0LDcgQEAKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB1c2VySWRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICBmaW5hbCBpbnQgdXNlcklkID0gdXNlcklkc1tpXTsKICAgICAgICAgICAgIExpc3Q8UGFja2FnZUluZm8+IHBhY2thZ2VzID0KLSAgICAgICAgICAgICAgICAgICAgZ2V0Q29udGV4dCgpLmdldFBhY2thZ2VNYW5hZ2VyKCkuZ2V0SW5zdGFsbGVkUGFja2FnZXMoCisgICAgICAgICAgICAgICAgICAgIGdldENvbnRleHQoKS5nZXRQYWNrYWdlTWFuYWdlcigpLmdldEluc3RhbGxlZFBhY2thZ2VzQXNVc2VyKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VNYW5hZ2VyLkdFVF9ESVNBQkxFRF9DT01QT05FTlRTCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUGFja2FnZU1hbmFnZXIuR0VUX1VOSU5TVEFMTEVEX1BBQ0tBR0VTLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJJZCk7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy91c2FnZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci91c2FnZS9Vc2VyVXNhZ2VTdGF0c1NlcnZpY2UuamF2YSBiL3NlcnZpY2VzL3VzYWdlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3VzYWdlL1VzZXJVc2FnZVN0YXRzU2VydmljZS5qYXZhCmluZGV4IDUxODhlNWYuLjcyNjIxYTQgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL3VzYWdlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3VzYWdlL1VzZXJVc2FnZVN0YXRzU2VydmljZS5qYXZhCisrKyBiL3NlcnZpY2VzL3VzYWdlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3VzYWdlL1VzZXJVc2FnZVN0YXRzU2VydmljZS5qYXZhCkBAIC0xNDgsNyArMTQ4LDcgQEAKICAgICBwcml2YXRlIHZvaWQgaW5pdGlhbGl6ZURlZmF1bHRzRm9yQXBwcyhsb25nIGN1cnJlbnRUaW1lTWlsbGlzLCBsb25nIGRldmljZVVzYWdlVGltZSwKICAgICAgICAgICAgIGJvb2xlYW4gZmlyc3RVcGRhdGUpIHsKICAgICAgICAgUGFja2FnZU1hbmFnZXIgcG0gPSBtQ29udGV4dC5nZXRQYWNrYWdlTWFuYWdlcigpOwotICAgICAgICBMaXN0PFBhY2thZ2VJbmZvPiBwYWNrYWdlcyA9IHBtLmdldEluc3RhbGxlZFBhY2thZ2VzKDAsIG1Vc2VySWQpOworICAgICAgICBMaXN0PFBhY2thZ2VJbmZvPiBwYWNrYWdlcyA9IHBtLmdldEluc3RhbGxlZFBhY2thZ2VzQXNVc2VyKDAsIG1Vc2VySWQpOwogICAgICAgICBmaW5hbCBpbnQgcGFja2FnZUNvdW50ID0gcGFja2FnZXMuc2l6ZSgpOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhY2thZ2VDb3VudDsgaSsrKSB7CiAgICAgICAgICAgICBmaW5hbCBQYWNrYWdlSW5mbyBwaSA9IHBhY2thZ2VzLmdldChpKTsKZGlmZiAtLWdpdCBhL3RlbGVjb21tL2phdmEvYW5kcm9pZC90ZWxlY29tL0NhbGwuamF2YSBiL3RlbGVjb21tL2phdmEvYW5kcm9pZC90ZWxlY29tL0NhbGwuamF2YQppbmRleCA5MmQ1YWE5Li5hYTk1ZTFkIDEwMDY0NAotLS0gYS90ZWxlY29tbS9qYXZhL2FuZHJvaWQvdGVsZWNvbS9DYWxsLmphdmEKKysrIGIvdGVsZWNvbW0vamF2YS9hbmRyb2lkL3RlbGVjb20vQ2FsbC5qYXZhCkBAIC0yNDIsOCArMjQyLDEzIEBACiAgICAgICAgICAqLwogICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQUk9QRVJUWV9ISUdIX0RFRl9BVURJTyA9IDB4MDAwMDAwMTA7CiAKKyAgICAgICAgLyoqCisgICAgICAgICAqIFdoZXRoZXIgdGhlIGNhbGwgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSB3b3JrIHByb2ZpbGUuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQUk9QRVJUWV9XT1JLX0NBTEwgPSAweDAwMDAwMDIwOworCiAgICAgICAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICAgICAgIC8vIE5leHQgUFJPUEVSVFkgdmFsdWU6IDB4MDAwMDAwMjAKKyAgICAgICAgLy8gTmV4dCBQUk9QRVJUWSB2YWx1ZTogMHgwMDAwMDA0MAogICAgICAgICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgICAgICAgIHByaXZhdGUgZmluYWwgVXJpIG1IYW5kbGU7CkBAIC0yNjksNyArMjc0LDcgQEAKICAgICAgICAgICogQHJldHVybiBXaGV0aGVyIHRoZSBzcGVjaWZpZWQgY2FwYWJpbGl0eSBpcyBzdXBwb3J0ZWQuCiAgICAgICAgICAqLwogICAgICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gY2FuKGludCBjYXBhYmlsaXRpZXMsIGludCBjYXBhYmlsaXR5KSB7Ci0gICAgICAgICAgICByZXR1cm4gKGNhcGFiaWxpdGllcyAmIGNhcGFiaWxpdHkpICE9IDA7CisgICAgICAgICAgICByZXR1cm4gKGNhcGFiaWxpdGllcyAmIGNhcGFiaWxpdHkpID09IGNhcGFiaWxpdHk7CiAgICAgICAgIH0KIAogICAgICAgICAvKioKQEAgLTM1MSw3ICszNTYsNyBAQAogICAgICAgICAgKiBAcmV0dXJuIFdoZXRoZXIgdGhlIHNwZWNpZmllZCBwcm9wZXJ0eSBpcyBzdXBwb3J0ZWQuCiAgICAgICAgICAqLwogICAgICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaGFzUHJvcGVydHkoaW50IHByb3BlcnRpZXMsIGludCBwcm9wZXJ0eSkgewotICAgICAgICAgICAgcmV0dXJuIChwcm9wZXJ0aWVzICYgcHJvcGVydHkpICE9IDA7CisgICAgICAgICAgICByZXR1cm4gKHByb3BlcnRpZXMgJiBwcm9wZXJ0eSkgPT0gcHJvcGVydHk7CiAgICAgICAgIH0KIAogICAgICAgICAvKioKZGlmZiAtLWdpdCBhL3RlbGVjb21tL2phdmEvYW5kcm9pZC90ZWxlY29tL0Nvbm5lY3Rpb24uamF2YSBiL3RlbGVjb21tL2phdmEvYW5kcm9pZC90ZWxlY29tL0Nvbm5lY3Rpb24uamF2YQppbmRleCAxN2JkMDhjLi5kZWI5OGY0IDEwMDY0NAotLS0gYS90ZWxlY29tbS9qYXZhL2FuZHJvaWQvdGVsZWNvbS9Db25uZWN0aW9uLmphdmEKKysrIGIvdGVsZWNvbW0vamF2YS9hbmRyb2lkL3RlbGVjb20vQ29ubmVjdGlvbi5qYXZhCkBAIC0yOTQsNyArMjk0LDcgQEAKICAgICAgKiBAaGlkZQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBjYW4oaW50IGNhcGFiaWxpdGllcywgaW50IGNhcGFiaWxpdHkpIHsKLSAgICAgICAgcmV0dXJuIChjYXBhYmlsaXRpZXMgJiBjYXBhYmlsaXR5KSAhPSAwOworICAgICAgICByZXR1cm4gKGNhcGFiaWxpdGllcyAmIGNhcGFiaWxpdHkpID09IGNhcGFiaWxpdHk7CiAgICAgfQogCiAgICAgLyoqCmRpZmYgLS1naXQgYS90ZWxlY29tbS9qYXZhL2FuZHJvaWQvdGVsZWNvbS9EZWZhdWx0RGlhbGVyTWFuYWdlci5qYXZhIGIvdGVsZWNvbW0vamF2YS9hbmRyb2lkL3RlbGVjb20vRGVmYXVsdERpYWxlck1hbmFnZXIuamF2YQppbmRleCA1ODUyYjhlLi5hOTE1ZDM3IDEwMDY0NAotLS0gYS90ZWxlY29tbS9qYXZhL2FuZHJvaWQvdGVsZWNvbS9EZWZhdWx0RGlhbGVyTWFuYWdlci5qYXZhCisrKyBiL3RlbGVjb21tL2phdmEvYW5kcm9pZC90ZWxlY29tL0RlZmF1bHREaWFsZXJNYW5hZ2VyLmphdmEKQEAgLTIwNyw4ICsyMDcsOCBAQAogICAgICAgICB9CiAKICAgICAgICAgZmluYWwgTGlzdDxTdHJpbmc+IHJlc3VsdCA9IG5ldyBBcnJheUxpc3Q8PigpOwotICAgICAgICBmaW5hbCBMaXN0PFJlc29sdmVJbmZvPiByZXNvbHZlSW5mb0xpc3QgPQotICAgICAgICAgICAgICAgIGNvbnRleHQuZ2V0UGFja2FnZU1hbmFnZXIoKS5xdWVyeUludGVudEFjdGl2aXRpZXMoaW50ZW50LCAwKTsKKyAgICAgICAgZmluYWwgTGlzdDxSZXNvbHZlSW5mbz4gcmVzb2x2ZUluZm9MaXN0ID0gY29udGV4dC5nZXRQYWNrYWdlTWFuYWdlcigpCisgICAgICAgICAgICAgICAgLnF1ZXJ5SW50ZW50QWN0aXZpdGllcyhpbnRlbnQsIDApOwogICAgICAgICBmaW5hbCBpbnQgbGVuZ3RoID0gcmVzb2x2ZUluZm9MaXN0LnNpemUoKTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAgICAgZmluYWwgQWN0aXZpdHlJbmZvIGluZm8gPSByZXNvbHZlSW5mb0xpc3QuZ2V0KGkpLmFjdGl2aXR5SW5mbzsKZGlmZiAtLWdpdCBhL3RlbGVjb21tL2phdmEvYW5kcm9pZC90ZWxlY29tL0luQ2FsbFNlcnZpY2UuamF2YSBiL3RlbGVjb21tL2phdmEvYW5kcm9pZC90ZWxlY29tL0luQ2FsbFNlcnZpY2UuamF2YQppbmRleCA1MDg3MDgwLi40MjZiMjQwIDEwMDY0NAotLS0gYS90ZWxlY29tbS9qYXZhL2FuZHJvaWQvdGVsZWNvbS9JbkNhbGxTZXJ2aWNlLmphdmEKKysrIGIvdGVsZWNvbW0vamF2YS9hbmRyb2lkL3RlbGVjb20vSW5DYWxsU2VydmljZS5qYXZhCkBAIC00OSw3ICs0OSw3IEBACiAgKiA8cHJlPgogICoge0Bjb2RlCiAgKiA8c2VydmljZSBhbmRyb2lkOm5hbWU9InlvdXIucGFja2FnZS5Zb3VySW5DYWxsU2VydmljZUltcGxlbWVudGF0aW9uIgotICogICAgICAgICAgYW5kcm9pZDpwZXJtaXNzaW9uPSJhbmRyb2lkLnBlcm1pc3Npb24uQklORF9JTl9DQUxMX1NFUlZJQ0UiPgorICogICAgICAgICAgYW5kcm9pZDpwZXJtaXNzaW9uPSJhbmRyb2lkLnBlcm1pc3Npb24uQklORF9JTkNBTExfU0VSVklDRSI+CiAgKiAgICAgIDxtZXRhLWRhdGEgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnRlbGVjb20uSU5fQ0FMTF9TRVJWSUNFX1VJIiBhbmRyb2lkOnZhbHVlPSJ0cnVlIiAvPgogICogICAgICA8aW50ZW50LWZpbHRlcj4KICAqICAgICAgICAgIDxhY3Rpb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnRlbGVjb20uSW5DYWxsU2VydmljZSIvPgpkaWZmIC0tZ2l0IGEvdGVsZXBob255L2phdmEvYW5kcm9pZC90ZWxlcGhvbnkvU2VydmljZVN0YXRlLmphdmEgYi90ZWxlcGhvbnkvamF2YS9hbmRyb2lkL3RlbGVwaG9ueS9TZXJ2aWNlU3RhdGUuamF2YQppbmRleCA4NTM3ZjljLi5jNjgwOTk5IDEwMDY0NAotLS0gYS90ZWxlcGhvbnkvamF2YS9hbmRyb2lkL3RlbGVwaG9ueS9TZXJ2aWNlU3RhdGUuamF2YQorKysgYi90ZWxlcGhvbnkvamF2YS9hbmRyb2lkL3RlbGVwaG9ueS9TZXJ2aWNlU3RhdGUuamF2YQpAQCAtMTUzLDYgKzE1MywxNyBAQAogICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUklMX1JBRElPX1RFQ0hOT0xPR1lfSVdMQU4gPSAxODsKKworICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJJTF9SQURJT19DRE1BX1RFQ0hOT0xPR1lfQklUTUFTSyA9CisgICAgICAgICAgICAoMSA8PCAoUklMX1JBRElPX1RFQ0hOT0xPR1lfSVM5NUEgLSAxKSkKKyAgICAgICAgICAgICAgICAgICAgfCAoMSA8PCAoUklMX1JBRElPX1RFQ0hOT0xPR1lfSVM5NUIgLSAxKSkKKyAgICAgICAgICAgICAgICAgICAgfCAoMSA8PCAoUklMX1JBRElPX1RFQ0hOT0xPR1lfMXhSVFQgLSAxKSkKKyAgICAgICAgICAgICAgICAgICAgfCAoMSA8PCAoUklMX1JBRElPX1RFQ0hOT0xPR1lfRVZET18wIC0gMSkpCisgICAgICAgICAgICAgICAgICAgIHwgKDEgPDwgKFJJTF9SQURJT19URUNITk9MT0dZX0VWRE9fQSAtIDEpKQorICAgICAgICAgICAgICAgICAgICB8ICgxIDw8IChSSUxfUkFESU9fVEVDSE5PTE9HWV9FVkRPX0IgLSAxKSkKKyAgICAgICAgICAgICAgICAgICAgfCAoMSA8PCAoUklMX1JBRElPX1RFQ0hOT0xPR1lfRUhSUEQgLSAxKSk7CisKICAgICAvKioKICAgICAgKiBBdmFpbGFibGUgcmVnaXN0cmF0aW9uIHN0YXRlcyBmb3IgR1NNLCBVTVRTIGFuZCBDRE1BLgogICAgICAqLwpAQCAtMTE0MSwxNiArMTE1Miw4IEBACiAgICAgfQogCiAgICAgLyoqIEBoaWRlICovCi0gICAgcHVibGljIHN0YXRpYyBib29sZWFuIGhhc0NkbWEoaW50IHJhZGlvVGVjaG5vbG9neUJpdG1hc2spIHsKLSAgICAgICAgaW50IGNkbWFCaXRtYXNrID0gKFJJTF9SQURJT19URUNITk9MT0dZX0lTOTVBCi0gICAgICAgICAgICAgICAgfCBSSUxfUkFESU9fVEVDSE5PTE9HWV9JUzk1QgotICAgICAgICAgICAgICAgIHwgUklMX1JBRElPX1RFQ0hOT0xPR1lfMXhSVFQKLSAgICAgICAgICAgICAgICB8IFJJTF9SQURJT19URUNITk9MT0dZX0VWRE9fMAotICAgICAgICAgICAgICAgIHwgUklMX1JBRElPX1RFQ0hOT0xPR1lfRVZET19BCi0gICAgICAgICAgICAgICAgfCBSSUxfUkFESU9fVEVDSE5PTE9HWV9FVkRPX0IKLSAgICAgICAgICAgICAgICB8IFJJTF9SQURJT19URUNITk9MT0dZX0VIUlBEKTsKLQotICAgICAgICByZXR1cm4gKChyYWRpb1RlY2hub2xvZ3lCaXRtYXNrICYgY2RtYUJpdG1hc2spICE9IDApOworICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBiZWFyZXJCaXRtYXBIYXNDZG1hKGludCByYWRpb1RlY2hub2xvZ3lCaXRtYXApIHsKKyAgICAgICAgcmV0dXJuIChSSUxfUkFESU9fQ0RNQV9URUNITk9MT0dZX0JJVE1BU0sgJiByYWRpb1RlY2hub2xvZ3lCaXRtYXApICE9IDA7CiAgICAgfQogCiAgICAgLyoqIEBoaWRlICovCmRpZmYgLS1naXQgYS90ZWxlcGhvbnkvamF2YS9hbmRyb2lkL3RlbGVwaG9ueS9TdWJzY3JpcHRpb25NYW5hZ2VyLmphdmEgYi90ZWxlcGhvbnkvamF2YS9hbmRyb2lkL3RlbGVwaG9ueS9TdWJzY3JpcHRpb25NYW5hZ2VyLmphdmEKaW5kZXggMzY0MDdlMS4uOTk5ODkzNyAxMDA2NDQKLS0tIGEvdGVsZXBob255L2phdmEvYW5kcm9pZC90ZWxlcGhvbnkvU3Vic2NyaXB0aW9uTWFuYWdlci5qYXZhCisrKyBiL3RlbGVwaG9ueS9qYXZhL2FuZHJvaWQvdGVsZXBob255L1N1YnNjcmlwdGlvbk1hbmFnZXIuamF2YQpAQCAtMTIwNyw3ICsxMjA3LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgIH0KLSAgICAgICAgbG9nZCgiZ2V0U2ltU3RhdGVGb3JTdWJzY3JpYmVyOiBzaW1TdGF0ZT0iICsgc2ltU3RhdGUgKyAiIHNsb3RJZHg9IiArIHNsb3RJZHgpOworCiAgICAgICAgIHJldHVybiBzaW1TdGF0ZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL3RlbGVwaG9ueS9qYXZhL2FuZHJvaWQvdGVsZXBob255L1RlbGVwaG9ueU1hbmFnZXIuamF2YSBiL3RlbGVwaG9ueS9qYXZhL2FuZHJvaWQvdGVsZXBob255L1RlbGVwaG9ueU1hbmFnZXIuamF2YQppbmRleCAzYjI4MWUyLi4wYjVhYWEzIDEwMDY0NAotLS0gYS90ZWxlcGhvbnkvamF2YS9hbmRyb2lkL3RlbGVwaG9ueS9UZWxlcGhvbnlNYW5hZ2VyLmphdmEKKysrIGIvdGVsZXBob255L2phdmEvYW5kcm9pZC90ZWxlcGhvbnkvVGVsZXBob255TWFuYWdlci5qYXZhCkBAIC03NjYsNyArNzY2LDcgQEAKICAgICAgICAgICAgIElQaG9uZVN1YkluZm8gaW5mbyA9IGdldFN1YnNjcmliZXJJbmZvKCk7CiAgICAgICAgICAgICBpZiAoaW5mbyA9PSBudWxsKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgcmV0dXJuIGluZm8uZ2V0RGV2aWNlSWRGb3JQaG9uZShzbG90SWQpOworICAgICAgICAgICAgcmV0dXJuIGluZm8uZ2V0RGV2aWNlSWRGb3JQaG9uZShzbG90SWQsIG1Db250ZXh0LmdldE9wUGFja2FnZU5hbWUoKSk7CiAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgIH0gY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9uIGV4KSB7CkBAIC00ODY1LDQgKzQ4NjUsNCBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCit9CmRpZmYgLS1naXQgYS90ZWxlcGhvbnkvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC90ZWxlcGhvbnkvSVBob25lU3ViSW5mby5haWRsIGIvdGVsZXBob255L2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdGVsZXBob255L0lQaG9uZVN1YkluZm8uYWlkbAppbmRleCBlZDg1MzkyLi5kYzJiMjk3IDEwMDY0NAotLS0gYS90ZWxlcGhvbnkvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC90ZWxlcGhvbnkvSVBob25lU3ViSW5mby5haWRsCisrKyBiL3RlbGVwaG9ueS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3RlbGVwaG9ueS9JUGhvbmVTdWJJbmZvLmFpZGwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgKiBSZXRyaWV2ZXMgdGhlIHVuaXF1ZSBkZXZpY2UgSUQgb2YgYSBwaG9uZSBmb3IgdGhlIGRldmljZSwgZS5nLiwgSU1FSQogICAgICAqIGZvciBHU00gcGhvbmVzLgogICAgICAqLwotICAgIFN0cmluZyBnZXREZXZpY2VJZEZvclBob25lKGludCBwaG9uZUlkKTsKKyAgICBTdHJpbmcgZ2V0RGV2aWNlSWRGb3JQaG9uZShpbnQgcGhvbmVJZCwgU3RyaW5nIGNhbGxpbmdQYWNrYWdlKTsKIAogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgSU1FSS4KZGlmZiAtLWdpdCBhL3Rlc3QtcnVubmVyL3NyYy9hbmRyb2lkL3Rlc3QvbW9jay9Nb2NrUGFja2FnZU1hbmFnZXIuamF2YSBiL3Rlc3QtcnVubmVyL3NyYy9hbmRyb2lkL3Rlc3QvbW9jay9Nb2NrUGFja2FnZU1hbmFnZXIuamF2YQppbmRleCAyODEzZGY1Li44NWQ1NjdkIDEwMDY0NAotLS0gYS90ZXN0LXJ1bm5lci9zcmMvYW5kcm9pZC90ZXN0L21vY2svTW9ja1BhY2thZ2VNYW5hZ2VyLmphdmEKKysrIGIvdGVzdC1ydW5uZXIvc3JjL2FuZHJvaWQvdGVzdC9tb2NrL01vY2tQYWNrYWdlTWFuYWdlci5qYXZhCkBAIC0zNCw3ICszNCw2IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLkluc3RydW1lbnRhdGlvbkluZm87CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLkludGVudEZpbHRlclZlcmlmaWNhdGlvbkluZm87CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLktleVNldDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uTWFuaWZlc3REaWdlc3Q7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VJbmZvOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlSW5zdGFsbGVyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlSXRlbUluZm87CkBAIC0xMDQsNyArMTAzLDcgQEAKIAogICAgIC8qKiBAaGlkZSAqLwogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0UGFja2FnZVVpZChTdHJpbmcgcGFja2FnZU5hbWUsIGludCB1c2VySGFuZGxlKQorICAgIHB1YmxpYyBpbnQgZ2V0UGFja2FnZVVpZEFzVXNlcihTdHJpbmcgcGFja2FnZU5hbWUsIGludCB1c2VySGFuZGxlKQogICAgICAgICAgICAgdGhyb3dzIE5hbWVOb3RGb3VuZEV4Y2VwdGlvbiB7CiAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwogICAgIH0KQEAgLTE3NSw3ICsxNzQsNyBAQAogCiAgICAgLyoqIEBoaWRlICovCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIExpc3Q8UGFja2FnZUluZm8+IGdldEluc3RhbGxlZFBhY2thZ2VzKGludCBmbGFncywgaW50IHVzZXJJZCkgeworICAgIHB1YmxpYyBMaXN0PFBhY2thZ2VJbmZvPiBnZXRJbnN0YWxsZWRQYWNrYWdlc0FzVXNlcihpbnQgZmxhZ3MsIGludCB1c2VySWQpIHsKICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CiAgICAgfQogCkBAIC0zNTYsNyArMzU1LDcgQEAKIAogICAgIC8qKiBAaGlkZSAqLwogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBMaXN0PFJlc29sdmVJbmZvPiBxdWVyeUJyb2FkY2FzdFJlY2VpdmVycyhJbnRlbnQgaW50ZW50LCBpbnQgZmxhZ3MsIGludCB1c2VySWQpIHsKKyAgICBwdWJsaWMgTGlzdDxSZXNvbHZlSW5mbz4gcXVlcnlCcm9hZGNhc3RSZWNlaXZlcnNBc1VzZXIoSW50ZW50IGludGVudCwgaW50IGZsYWdzLCBpbnQgdXNlcklkKSB7CiAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwogICAgIH0KIApAQCAtNzQ3LDcgKzc0Niw3IEBACiAgICAgICogQGhpZGUgLSB0byBtYXRjaCBoaWRpbmcgaW4gc3VwZXJjbGFzcwogICAgICAqLwogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGdldFBhY2thZ2VTaXplSW5mbyhTdHJpbmcgcGFja2FnZU5hbWUsIGludCB1c2VySGFuZGxlLAorICAgIHB1YmxpYyB2b2lkIGdldFBhY2thZ2VTaXplSW5mb0FzVXNlcihTdHJpbmcgcGFja2FnZU5hbWUsIGludCB1c2VySGFuZGxlLAogICAgICAgICAgICAgSVBhY2thZ2VTdGF0c09ic2VydmVyIG9ic2VydmVyKSB7CiAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwogICAgIH0KQEAgLTgyMCw3ICs4MTksNyBAQAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIGluc3RhbGxQYWNrYWdlV2l0aFZlcmlmaWNhdGlvbihVcmkgcGFja2FnZVVSSSwgSVBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXIgb2JzZXJ2ZXIsCiAgICAgICAgICAgICBpbnQgZmxhZ3MsIFN0cmluZyBpbnN0YWxsZXJQYWNrYWdlTmFtZSwgVXJpIHZlcmlmaWNhdGlvblVSSSwKLSAgICAgICAgICAgIE1hbmlmZXN0RGlnZXN0IG1hbmlmZXN0RGlnZXN0LCBDb250YWluZXJFbmNyeXB0aW9uUGFyYW1zIGVuY3J5cHRpb25QYXJhbXMpIHsKKyAgICAgICAgICAgIENvbnRhaW5lckVuY3J5cHRpb25QYXJhbXMgZW5jcnlwdGlvblBhcmFtcykgewogICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKICAgICB9CiAKQEAgLTg5MSw3ICs4OTAsNyBAQAogICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRJbnRlbnRWZXJpZmljYXRpb25TdGF0dXMoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgdXNlcklkKSB7CisgICAgcHVibGljIGludCBnZXRJbnRlbnRWZXJpZmljYXRpb25TdGF0dXNBc1VzZXIoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgdXNlcklkKSB7CiAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwogICAgIH0KIApAQCAtODk5LDcgKzg5OCw3IEBACiAgICAgICogQGhpZGUKICAgICAgKi8KICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiB1cGRhdGVJbnRlbnRWZXJpZmljYXRpb25TdGF0dXMoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgc3RhdHVzLCBpbnQgdXNlcklkKSB7CisgICAgcHVibGljIGJvb2xlYW4gdXBkYXRlSW50ZW50VmVyaWZpY2F0aW9uU3RhdHVzQXNVc2VyKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHN0YXR1cywgaW50IHVzZXJJZCkgewogICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKICAgICB9CiAKQEAgLTkxNiwxNiArOTE1LDMwIEBACiAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwogICAgIH0KIAotICAgIEBPdmVycmlkZQorICAgIC8qKiB7QHJlbW92ZWR9ICovCisgICAgQERlcHJlY2F0ZWQKICAgICBwdWJsaWMgU3RyaW5nIGdldERlZmF1bHRCcm93c2VyUGFja2FnZU5hbWUoaW50IHVzZXJJZCkgewogICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKICAgICB9CiAKKyAgICAvKioge0BoaWRlfSAqLwogICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVmYXVsdEJyb3dzZXJQYWNrYWdlTmFtZUFzVXNlcihpbnQgdXNlcklkKSB7CisgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOworICAgIH0KKworICAgIC8qKiB7QHJlbW92ZWR9ICovCisgICAgQERlcHJlY2F0ZWQKICAgICBwdWJsaWMgYm9vbGVhbiBzZXREZWZhdWx0QnJvd3NlclBhY2thZ2VOYW1lKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHVzZXJJZCkgewogICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKICAgICB9CiAKKyAgICAvKioge0BoaWRlfSAqLworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIHNldERlZmF1bHRCcm93c2VyUGFja2FnZU5hbWVBc1VzZXIoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgdXNlcklkKSB7CisgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOworICAgIH0KKwogICAgIC8qKgogICAgICAqIEBoaWRlCiAgICAgICovCkBAIC05NTcsNyArOTcwLDcgQEAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBpbnN0YWxsUGFja2FnZVdpdGhWZXJpZmljYXRpb24oVXJpIHBhY2thZ2VVUkksCiAgICAgICAgICAgICBQYWNrYWdlSW5zdGFsbE9ic2VydmVyIG9ic2VydmVyLCBpbnQgZmxhZ3MsIFN0cmluZyBpbnN0YWxsZXJQYWNrYWdlTmFtZSwKLSAgICAgICAgICAgIFVyaSB2ZXJpZmljYXRpb25VUkksIE1hbmlmZXN0RGlnZXN0IG1hbmlmZXN0RGlnZXN0LAorICAgICAgICAgICAgVXJpIHZlcmlmaWNhdGlvblVSSSwKICAgICAgICAgICAgIENvbnRhaW5lckVuY3J5cHRpb25QYXJhbXMgZW5jcnlwdGlvblBhcmFtcykgewogICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKICAgICB9CmRpZmYgLS1naXQgYS90ZXN0cy9TdGF0dXNCYXIvc3JjL2NvbS9hbmRyb2lkL3N0YXR1c2JhcnRlc3QvTm90aWZpY2F0aW9uVGVzdExpc3QuamF2YSBiL3Rlc3RzL1N0YXR1c0Jhci9zcmMvY29tL2FuZHJvaWQvc3RhdHVzYmFydGVzdC9Ob3RpZmljYXRpb25UZXN0TGlzdC5qYXZhCmluZGV4IGNmMWE0YWEuLmZlY2ZkZjkgMTAwNjQ0Ci0tLSBhL3Rlc3RzL1N0YXR1c0Jhci9zcmMvY29tL2FuZHJvaWQvc3RhdHVzYmFydGVzdC9Ob3RpZmljYXRpb25UZXN0TGlzdC5qYXZhCisrKyBiL3Rlc3RzL1N0YXR1c0Jhci9zcmMvY29tL2FuZHJvaWQvc3RhdHVzYmFydGVzdC9Ob3RpZmljYXRpb25UZXN0TGlzdC5qYXZhCkBAIC0yMyw2ICsyMyw3IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRSZXNvbHZlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwOworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwRmFjdG9yeTsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkJpdG1hcERyYXdhYmxlOwogaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwogaW1wb3J0IGFuZHJvaWQub3MuVmlicmF0b3I7CkBAIC0xODAsNiArMTgxLDkgQEAKIAogICAgICAgICBuZXcgVGVzdCgid2l0aCB0b3BpYyBHb29kQnllIikgewogICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICAgIE5vdGlmaWNhdGlvbi5CaWdQaWN0dXJlU3R5bGUgcGljdHVyZSA9IG5ldyBOb3RpZmljYXRpb24uQmlnUGljdHVyZVN0eWxlKCk7CisgICAgICAgICAgICAgICAgcGljdHVyZS5iaWdQaWN0dXJlKEJpdG1hcEZhY3RvcnkuZGVjb2RlUmVzb3VyY2UoZ2V0UmVzb3VyY2VzKCksCisgICAgICAgICAgICAgICAgICAgICAgICBSLmlkLmxhcmdlX2ljb25fcGluZWFwcGxlMikpOwogICAgICAgICAgICAgICAgIE5vdGlmaWNhdGlvbiBuID0gbmV3IE5vdGlmaWNhdGlvbi5CdWlsZGVyKE5vdGlmaWNhdGlvblRlc3RMaXN0LnRoaXMpCiAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0U21hbGxJY29uKFIuZHJhd2FibGUuaWNvbjEpCiAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0V2hlbihtQWN0aXZpdHlDcmVhdGVUaW1lKQpAQCAtMTg3LDExICsxOTEsMjkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRDb250ZW50VGV4dCgiVGhpcyBpcyBhIG5vdGlmaWNhdGlvbiEhISIpCiAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0Q29udGVudEludGVudChtYWtlSW50ZW50MigpKQogICAgICAgICAgICAgICAgICAgICAgICAgLnNldFRvcGljKG5ldyBOb3RpZmljYXRpb24uVG9waWMoImJ5ZSIsICJHb29kYnllIikpCisgICAgICAgICAgICAgICAgICAgICAgICAuc2V0U3R5bGUocGljdHVyZSkKICAgICAgICAgICAgICAgICAgICAgICAgIC5idWlsZCgpOwogCiAgICAgICAgICAgICAgICAgbU5NLm5vdGlmeSg5OTk5LCBuKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSwKKyAgICAgICAgbmV3IFRlc3QoIndpdGggdG9waWMgQmFuYW5hcyIpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICBOb3RpZmljYXRpb24uQmlnVGV4dFN0eWxlIGJpZ1RleHQgPSBuZXcgTm90aWZpY2F0aW9uLkJpZ1RleHRTdHlsZSgpOworICAgICAgICAgICAgICAgIGJpZ1RleHQuYmlnVGV4dCgiYmFuYW5hcyBhcmUgZ3JlYXRcbnNvIHRhc3R5XG55dW1cbnl1bVxueXVtXG4iKTsKKyAgICAgICAgICAgICAgICBOb3RpZmljYXRpb24gbiA9IG5ldyBOb3RpZmljYXRpb24uQnVpbGRlcihOb3RpZmljYXRpb25UZXN0TGlzdC50aGlzKQorICAgICAgICAgICAgICAgICAgICAgICAgLnNldFNtYWxsSWNvbihSLmRyYXdhYmxlLmljb24xKQorICAgICAgICAgICAgICAgICAgICAgICAgLnNldFN0eWxlKGJpZ1RleHQpCisgICAgICAgICAgICAgICAgICAgICAgICAuc2V0V2hlbihtQWN0aXZpdHlDcmVhdGVUaW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgLnNldENvbnRlbnRUaXRsZSgiYmFuYW5hbmFuYW5hIikKKyAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRDb250ZW50VGV4dCgiVGhpcyBpcyBhIGJhbmFuYSEhISIpCisgICAgICAgICAgICAgICAgICAgICAgICAuc2V0Q29udGVudEludGVudChtYWtlSW50ZW50MigpKQorICAgICAgICAgICAgICAgICAgICAgICAgLnNldFRvcGljKG5ldyBOb3RpZmljYXRpb24uVG9waWMoImJhbmFuYXMiLCAiQmFuYW5hcyIpKQorICAgICAgICAgICAgICAgICAgICAgICAgLmJ1aWxkKCk7CisKKyAgICAgICAgICAgICAgICBtTk0ubm90aWZ5KDk5OSwgbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCiAKICAgICAgICAgbmV3IFRlc3QoIldoZW5zIikgewogICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3Blcm1pc3Npb24vc3JjL2NvbS9hbmRyb2lkL2ZyYW1ld29yay9wZXJtaXNzaW9uL3Rlc3RzL1dpbmRvd01hbmFnZXJQZXJtaXNzaW9uVGVzdHMuamF2YSBiL3Rlc3RzL3Blcm1pc3Npb24vc3JjL2NvbS9hbmRyb2lkL2ZyYW1ld29yay9wZXJtaXNzaW9uL3Rlc3RzL1dpbmRvd01hbmFnZXJQZXJtaXNzaW9uVGVzdHMuamF2YQppbmRleCAzYzI2NTlmLi5iNzhmZDQ5IDEwMDY0NAotLS0gYS90ZXN0cy9wZXJtaXNzaW9uL3NyYy9jb20vYW5kcm9pZC9mcmFtZXdvcmsvcGVybWlzc2lvbi90ZXN0cy9XaW5kb3dNYW5hZ2VyUGVybWlzc2lvblRlc3RzLmphdmEKKysrIGIvdGVzdHMvcGVybWlzc2lvbi9zcmMvY29tL2FuZHJvaWQvZnJhbWV3b3JrL3Blcm1pc3Npb24vdGVzdHMvV2luZG93TWFuYWdlclBlcm1pc3Npb25UZXN0cy5qYXZhCkBAIC05Myw3ICs5Myw3IEBACiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIG1XbS5hZGRBcHBUb2tlbigwLCBudWxsLCAwLCAwLCAwLCBmYWxzZSwgZmFsc2UsIDAsIDAsIGZhbHNlLCBmYWxzZSwgbnVsbCwKLSAgICAgICAgICAgICAgICAgICAgQ29uZmlndXJhdGlvbi5FTVBUWSwgZmFsc2UpOworICAgICAgICAgICAgICAgICAgICBDb25maWd1cmF0aW9uLkVNUFRZLCBmYWxzZSwgZmFsc2UpOwogICAgICAgICAgICAgZmFpbCgiSVdpbmRvd01hbmFnZXIuYWRkQXBwVG9rZW4gZGlkIG5vdCB0aHJvdyBTZWN1cml0eUV4Y2VwdGlvbiBhcyIKICAgICAgICAgICAgICAgICAgICAgKyAiIGV4cGVjdGVkIik7CiAgICAgICAgIH0gY2F0Y2ggKFNlY3VyaXR5RXhjZXB0aW9uIGUpIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL2FhcHQyL2NvbXBpbGUvWG1sSWRDb2xsZWN0b3JfdGVzdC5jcHAgYi90b29scy9hYXB0Mi9jb21waWxlL1htbElkQ29sbGVjdG9yX3Rlc3QuY3BwCmluZGV4IDQ1YjdhZjIuLmEzN2VhODYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2FhcHQyL2NvbXBpbGUvWG1sSWRDb2xsZWN0b3JfdGVzdC5jcHAKKysrIGIvdG9vbHMvYWFwdDIvY29tcGlsZS9YbWxJZENvbGxlY3Rvcl90ZXN0LmNwcApAQCAtMzcsMTMgKzM3LDEzIEBACiAgICAgWG1sSWRDb2xsZWN0b3IgY29sbGVjdG9yOwogICAgIEFTU0VSVF9UUlVFKGNvbGxlY3Rvci5jb25zdW1lKGNvbnRleHQuZ2V0KCksIGRvYy5nZXQoKSkpOwogCi0gICAgRVhQRUNUX0VRKDF1LCBzdGQ6OmNvdW50KGRvYy0+ZmlsZS5leHBvcnRlZFN5bWJvbHMuYmVnaW4oKSwgZG9jLT5maWxlLmV4cG9ydGVkU3ltYm9scy5lbmQoKSwKKyAgICBFWFBFQ1RfRVEoMSwgc3RkOjpjb3VudChkb2MtPmZpbGUuZXhwb3J0ZWRTeW1ib2xzLmJlZ2luKCksIGRvYy0+ZmlsZS5leHBvcnRlZFN5bWJvbHMuZW5kKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZWRSZXNvdXJjZU5hbWV7IHRlc3Q6OnBhcnNlTmFtZU9yRGllKHUiQGlkL2ZvbyIpLCAzdSB9KSk7CiAKLSAgICBFWFBFQ1RfRVEoMXUsIHN0ZDo6Y291bnQoZG9jLT5maWxlLmV4cG9ydGVkU3ltYm9scy5iZWdpbigpLCBkb2MtPmZpbGUuZXhwb3J0ZWRTeW1ib2xzLmVuZCgpLAorICAgIEVYUEVDVF9FUSgxLCBzdGQ6OmNvdW50KGRvYy0+ZmlsZS5leHBvcnRlZFN5bWJvbHMuYmVnaW4oKSwgZG9jLT5maWxlLmV4cG9ydGVkU3ltYm9scy5lbmQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlZFJlc291cmNlTmFtZXsgdGVzdDo6cGFyc2VOYW1lT3JEaWUodSJAaWQvYmFyIiksIDN1IH0pKTsKIAotICAgIEVYUEVDVF9FUSgxdSwgc3RkOjpjb3VudChkb2MtPmZpbGUuZXhwb3J0ZWRTeW1ib2xzLmJlZ2luKCksIGRvYy0+ZmlsZS5leHBvcnRlZFN5bWJvbHMuZW5kKCksCisgICAgRVhQRUNUX0VRKDEsIHN0ZDo6Y291bnQoZG9jLT5maWxlLmV4cG9ydGVkU3ltYm9scy5iZWdpbigpLCBkb2MtPmZpbGUuZXhwb3J0ZWRTeW1ib2xzLmVuZCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VkUmVzb3VyY2VOYW1leyB0ZXN0OjpwYXJzZU5hbWVPckRpZSh1IkBpZC9jYXIiKSwgNnUgfSkpOwogfQogCmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3ZpZXcvSVdpbmRvd01hbmFnZXJJbXBsLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3ZpZXcvSVdpbmRvd01hbmFnZXJJbXBsLmphdmEKaW5kZXggNDA0MzdmYS4uMDFlZTE4YiAxMDA2NDQKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC92aWV3L0lXaW5kb3dNYW5hZ2VySW1wbC5qYXZhCisrKyBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvdmlldy9JV2luZG93TWFuYWdlckltcGwuamF2YQpAQCAtNzYsNyArNzYsNyBAQAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIGFkZEFwcFRva2VuKGludCBhcmcwLCBJQXBwbGljYXRpb25Ub2tlbiBhcmcxLCBpbnQgYXJnMiwgaW50IGFyZzMsIGludCBhcmc0LAogICAgICAgICAgICAgYm9vbGVhbiBhcmc1LCBib29sZWFuIGFyZzYsIGludCBhcmc3LCBpbnQgYXJnOCwgYm9vbGVhbiBhcmc5LCBib29sZWFuIGFyZzEwLAotICAgICAgICAgICAgUmVjdCBhcmcxMSwgQ29uZmlndXJhdGlvbiBhcmcxMiwgYm9vbGVhbiBhcmcxMykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CisgICAgICAgICAgICBSZWN0IGFyZzExLCBDb25maWd1cmF0aW9uIGFyZzEyLCBib29sZWFuIGFyZzEzLCBib29sZWFuIGFyZzE0KSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKICAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgogICAgIH0KIApAQCAtNTQzLDYgKzU0MywxMSBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRG9ja0RpdmlkZXJWaXNpYmlsaXR5TGlzdGVuZXIoSURvY2tEaXZpZGVyVmlzaWJpbGl0eUxpc3RlbmVyIGxpc3RlbmVyKSB7CisgICAgcHVibGljIHZvaWQgcmVnaXN0ZXJEb2NrZWRTdGFja0xpc3RlbmVyKElEb2NrZWRTdGFja0xpc3RlbmVyIGxpc3RlbmVyKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBzZXRSZXNpemVEaW1MYXllcihib29sZWFuIHZpc2libGUsIGludCB0YXJnZXRTdGFja0lkLCBmbG9hdCBhbHBoYSkKKyAgICAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewogICAgIH0KIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvQnJpZGdlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL0JyaWRnZS5qYXZhCmluZGV4IDY4M2M0YWEuLmM4ZTNkMDMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvQnJpZGdlLmphdmEKKysrIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9CcmlkZ2UuamF2YQpAQCAtMTgzLDcgKzE4Myw3IEBACiAgICAgICovCiAgICAgcHJpdmF0ZSBzdGF0aWMgTGF5b3V0TG9nIHNDdXJyZW50TG9nID0gc0RlZmF1bHRMb2c7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTEFTVF9TVVBQT1JURURfRkVBVFVSRSA9IEZlYXR1cmVzLkNIT1JFT0dSQVBIRVI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IExBU1RfU1VQUE9SVEVEX0ZFQVRVUkUgPSBGZWF0dXJlcy5USEVNRV9QUkVWSUVXX05BVklHQVRJT05fQkFSOwogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGludCBnZXRBcGlMZXZlbCgpIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvYW5kcm9pZC9CcmlkZ2VQYWNrYWdlTWFuYWdlci5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9hbmRyb2lkL0JyaWRnZVBhY2thZ2VNYW5hZ2VyLmphdmEKaW5kZXggYTJmYWQxMy4uMjc3NTFlYiAxMDA2NDQKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9hbmRyb2lkL0JyaWRnZVBhY2thZ2VNYW5hZ2VyLmphdmEKKysrIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9hbmRyb2lkL0JyaWRnZVBhY2thZ2VNYW5hZ2VyLmphdmEKQEAgLTM0LDcgKzM0LDYgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uSW5zdHJ1bWVudGF0aW9uSW5mbzsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uSW50ZW50RmlsdGVyVmVyaWZpY2F0aW9uSW5mbzsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uS2V5U2V0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5NYW5pZmVzdERpZ2VzdDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZUluZm87CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VJbnN0YWxsZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VJdGVtSW5mbzsKQEAgLTk4LDcgKzk3LDcgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldFBhY2thZ2VVaWQoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgdXNlckhhbmRsZSkgdGhyb3dzIE5hbWVOb3RGb3VuZEV4Y2VwdGlvbiB7CisgICAgcHVibGljIGludCBnZXRQYWNrYWdlVWlkQXNVc2VyKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHVzZXJIYW5kbGUpIHRocm93cyBOYW1lTm90Rm91bmRFeGNlcHRpb24gewogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKQEAgLTE2NSw3ICsxNjQsNyBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBMaXN0PFBhY2thZ2VJbmZvPiBnZXRJbnN0YWxsZWRQYWNrYWdlcyhpbnQgZmxhZ3MsIGludCB1c2VySWQpIHsKKyAgICBwdWJsaWMgTGlzdDxQYWNrYWdlSW5mbz4gZ2V0SW5zdGFsbGVkUGFja2FnZXNBc1VzZXIoaW50IGZsYWdzLCBpbnQgdXNlcklkKSB7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KIApAQCAtMzI5LDcgKzMyOCw3IEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIExpc3Q8UmVzb2x2ZUluZm8+IHF1ZXJ5QnJvYWRjYXN0UmVjZWl2ZXJzKEludGVudCBpbnRlbnQsIGludCBmbGFncywgaW50IHVzZXJJZCkgeworICAgIHB1YmxpYyBMaXN0PFJlc29sdmVJbmZvPiBxdWVyeUJyb2FkY2FzdFJlY2VpdmVyc0FzVXNlcihJbnRlbnQgaW50ZW50LCBpbnQgZmxhZ3MsIGludCB1c2VySWQpIHsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQogCkBAIC01MjIsNyArNTIxLDcgQEAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBpbnN0YWxsUGFja2FnZVdpdGhWZXJpZmljYXRpb24oVXJpIHBhY2thZ2VVUkksIElQYWNrYWdlSW5zdGFsbE9ic2VydmVyIG9ic2VydmVyLAogICAgICAgICAgICAgaW50IGZsYWdzLCBTdHJpbmcgaW5zdGFsbGVyUGFja2FnZU5hbWUsIFVyaSB2ZXJpZmljYXRpb25VUkksCi0gICAgICAgICAgICBNYW5pZmVzdERpZ2VzdCBtYW5pZmVzdERpZ2VzdCwgQ29udGFpbmVyRW5jcnlwdGlvblBhcmFtcyBlbmNyeXB0aW9uUGFyYW1zKSB7CisgICAgICAgICAgICBDb250YWluZXJFbmNyeXB0aW9uUGFyYW1zIGVuY3J5cHRpb25QYXJhbXMpIHsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKQEAgLTU0NCw3ICs1NDMsNyBAQAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIGluc3RhbGxQYWNrYWdlV2l0aFZlcmlmaWNhdGlvbihVcmkgcGFja2FnZVVSSSwgUGFja2FnZUluc3RhbGxPYnNlcnZlciBvYnNlcnZlciwKICAgICAgICAgICAgIGludCBmbGFncywgU3RyaW5nIGluc3RhbGxlclBhY2thZ2VOYW1lLCBVcmkgdmVyaWZpY2F0aW9uVVJJLAotICAgICAgICAgICAgTWFuaWZlc3REaWdlc3QgbWFuaWZlc3REaWdlc3QsIENvbnRhaW5lckVuY3J5cHRpb25QYXJhbXMgZW5jcnlwdGlvblBhcmFtcykgeworICAgICAgICAgICAgQ29udGFpbmVyRW5jcnlwdGlvblBhcmFtcyBlbmNyeXB0aW9uUGFyYW1zKSB7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCkBAIC01NzksMTIgKzU3OCwxMiBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0SW50ZW50VmVyaWZpY2F0aW9uU3RhdHVzKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHVzZXJJZCkgeworICAgIHB1YmxpYyBpbnQgZ2V0SW50ZW50VmVyaWZpY2F0aW9uU3RhdHVzQXNVc2VyKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHVzZXJJZCkgewogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiB1cGRhdGVJbnRlbnRWZXJpZmljYXRpb25TdGF0dXMoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgc3RhdHVzLCBpbnQgdXNlcklkKSB7CisgICAgcHVibGljIGJvb2xlYW4gdXBkYXRlSW50ZW50VmVyaWZpY2F0aW9uU3RhdHVzQXNVc2VyKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHN0YXR1cywgaW50IHVzZXJJZCkgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC01OTksMTIgKzU5OCwxMiBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVmYXVsdEJyb3dzZXJQYWNrYWdlTmFtZShpbnQgdXNlcklkKSB7CisgICAgcHVibGljIFN0cmluZyBnZXREZWZhdWx0QnJvd3NlclBhY2thZ2VOYW1lQXNVc2VyKGludCB1c2VySWQpIHsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gc2V0RGVmYXVsdEJyb3dzZXJQYWNrYWdlTmFtZShTdHJpbmcgcGFja2FnZU5hbWUsIGludCB1c2VySWQpIHsKKyAgICBwdWJsaWMgYm9vbGVhbiBzZXREZWZhdWx0QnJvd3NlclBhY2thZ2VOYW1lQXNVc2VyKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHVzZXJJZCkgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC02NDQsNyArNjQzLDcgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBnZXRQYWNrYWdlU2l6ZUluZm8oU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgdXNlckhhbmRsZSwKKyAgICBwdWJsaWMgdm9pZCBnZXRQYWNrYWdlU2l6ZUluZm9Bc1VzZXIoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgdXNlckhhbmRsZSwKICAgICAgICAgICAgIElQYWNrYWdlU3RhdHNPYnNlcnZlciBvYnNlcnZlcikgewogICAgIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9iYXJzL05hdmlnYXRpb25CYXIuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvYmFycy9OYXZpZ2F0aW9uQmFyLmphdmEKaW5kZXggOWM4OWJmZTIuLmRmYmM2OWIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvYmFycy9OYXZpZ2F0aW9uQmFyLmphdmEKKysrIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9iYXJzL05hdmlnYXRpb25CYXIuamF2YQpAQCAtMTksOSArMTksNiBAQAogaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuYW5kcm9pZC5CcmlkZ2VDb250ZXh0OwogaW1wb3J0IGNvbS5hbmRyb2lkLnJlc291cmNlcy5EZW5zaXR5OwogCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLkFwcGxpY2F0aW9uSW5mbzsKLWltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OwogaW1wb3J0IGFuZHJvaWQudXRpbC5EaXNwbGF5TWV0cmljczsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5MaW5lYXJMYXlvdXQ7CkBAIC00MSwyOSArMzgsMTggQEAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgV0lEVEhfREVGQVVMVCA9IDM2OwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBXSURUSF9TVzM2MCA9IDQwOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBXSURUSF9TVzYwMCA9IDQ4OwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBMQVlPVVRfWE1MID0gIi9iYXJzL25hdmlnYXRpb25fYmFyLnhtbCI7CisgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgTEFZT1VUX1hNTCA9ICIvYmFycy9uYXZpZ2F0aW9uX2Jhci54bWwiOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBMQVlPVVRfNjAwRFBfWE1MID0gIi9iYXJzL25hdmlnYXRpb25fYmFyNjAwZHAueG1sIjsKIAotCi0gICAgLyoqCi0gICAgICogQ29uc3RydWN0b3IgdG8gYmUgdXNlZCB3aGVuIGNyZWF0aW5nIHRoZSB7QGxpbmsgTmF2aWdhdGlvbkJhcn0gYXMgYSByZWd1bGFyIGNvbnRyb2wuCi0gICAgICogVGhpcyBpcyBjdXJyZW50bHkgdXNlZCBieSB0aGUgdGhlbWUgZWRpdG9yLgotICAgICAqLwotICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQotICAgIHB1YmxpYyBOYXZpZ2F0aW9uQmFyKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzKSB7Ci0gICAgICAgIHRoaXMoKEJyaWRnZUNvbnRleHQpIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgRGVuc2l0eS5nZXRFbnVtKCgoQnJpZGdlQ29udGV4dCkgY29udGV4dCkuZ2V0TWV0cmljcygpLmRlbnNpdHlEcGkpLAotICAgICAgICAgICAgICAgIExpbmVhckxheW91dC5IT1JJWk9OVEFMLCAvLyBJbiB0aGlzIG1vZGUsIGl0IGRvZXNuJ3QgbmVlZCB0byBiZSByZW5kZXIgdmVydGljYWxseQotICAgICAgICAgICAgICAgICgoQnJpZGdlQ29udGV4dCkgY29udGV4dCkuZ2V0Q29uZmlndXJhdGlvbigpLmdldExheW91dERpcmVjdGlvbigpID09Ci0gICAgICAgICAgICAgICAgICAgICAgICBWaWV3LkxBWU9VVF9ESVJFQ1RJT05fUlRMLAotICAgICAgICAgICAgICAgIChjb250ZXh0LmdldEFwcGxpY2F0aW9uSW5mbygpLmZsYWdzICYgQXBwbGljYXRpb25JbmZvLkZMQUdfU1VQUE9SVFNfUlRMKSAhPSAwLAotICAgICAgICAgICAgICAgIDApOworICAgIHB1YmxpYyBOYXZpZ2F0aW9uQmFyKEJyaWRnZUNvbnRleHQgY29udGV4dCwgRGVuc2l0eSBkZW5zaXR5LCBpbnQgb3JpZW50YXRpb24sIGJvb2xlYW4gaXNSdGwsCisgICAgICBib29sZWFuIHJ0bEVuYWJsZWQsIGludCBzaW11bGF0ZWRQbGF0Zm9ybVZlcnNpb24pIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBkZW5zaXR5LCBvcmllbnRhdGlvbiwgaXNSdGwsIHJ0bEVuYWJsZWQsIHNpbXVsYXRlZFBsYXRmb3JtVmVyc2lvbiwKKyAgICAgICAgICBnZXRTaG9ydGVzdFdpZHRoKGNvbnRleHQpPj0gNjAwID8gTEFZT1VUXzYwMERQX1hNTCA6IExBWU9VVF9YTUwpOwogICAgIH0KIAotICAgIHB1YmxpYyBOYXZpZ2F0aW9uQmFyKEJyaWRnZUNvbnRleHQgY29udGV4dCwgRGVuc2l0eSBkZW5zaXR5LCBpbnQgb3JpZW50YXRpb24sIGJvb2xlYW4gaXNSdGwsCi0gICAgICAgICAgICBib29sZWFuIHJ0bEVuYWJsZWQsIGludCBzaW11bGF0ZWRQbGF0Zm9ybVZlcnNpb24pIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgb3JpZW50YXRpb24sIGdldFNob3J0ZXN0V2lkdGgoY29udGV4dCk+PSA2MDAgPyBMQVlPVVRfNjAwRFBfWE1MIDogTEFZT1VUX1hNTCwKLSAgICAgICAgICAgICAgICAibmF2aWdhdGlvbl9iYXIueG1sIiwgc2ltdWxhdGVkUGxhdGZvcm1WZXJzaW9uKTsKKyAgICBwcm90ZWN0ZWQgTmF2aWdhdGlvbkJhcihCcmlkZ2VDb250ZXh0IGNvbnRleHQsIERlbnNpdHkgZGVuc2l0eSwgaW50IG9yaWVudGF0aW9uLCBib29sZWFuIGlzUnRsLAorICAgICAgYm9vbGVhbiBydGxFbmFibGVkLCBpbnQgc2ltdWxhdGVkUGxhdGZvcm1WZXJzaW9uLCBTdHJpbmcgbGF5b3V0UGF0aCkgeworICAgICAgICBzdXBlcihjb250ZXh0LCBvcmllbnRhdGlvbiwgbGF5b3V0UGF0aCwgIm5hdmlnYXRpb25fYmFyLnhtbCIsIHNpbXVsYXRlZFBsYXRmb3JtVmVyc2lvbik7CiAKICAgICAgICAgaW50IGNvbG9yID0gZ2V0QmFyQ29sb3IoQVRUUl9DT0xPUiwgQVRUUl9UUkFOU0xVQ0VOVCk7CiAgICAgICAgIHNldEJhY2tncm91bmRDb2xvcihjb2xvciA9PSAwID8gMHhGRjAwMDAwMCA6IGNvbG9yKTsKQEAgLTExNyw3ICsxMDMsNyBAQAogICAgICAgICB2aWV3LnNldExheW91dFBhcmFtcyhsYXlvdXRQYXJhbXMpOwogICAgIH0KIAotICAgIHByaXZhdGUgc3RhdGljIGludCBnZXRTaWRlUGFkZGluZyhmbG9hdCBzdykgeworICAgIHByb3RlY3RlZCBpbnQgZ2V0U2lkZVBhZGRpbmcoZmxvYXQgc3cpIHsKICAgICAgICAgaWYgKHN3ID49IDQwMCkgewogICAgICAgICAgICAgcmV0dXJuIFBBRERJTkdfV0lEVEhfU1c0MDA7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvYmFycy9UaGVtZVByZXZpZXdOYXZpZ2F0aW9uQmFyLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2JhcnMvVGhlbWVQcmV2aWV3TmF2aWdhdGlvbkJhci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MzUyODAKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2JhcnMvVGhlbWVQcmV2aWV3TmF2aWdhdGlvbkJhci5qYXZhCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuYmFyczsKKworaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuYW5kcm9pZC5CcmlkZ2VDb250ZXh0OworaW1wb3J0IGNvbS5hbmRyb2lkLnJlc291cmNlcy5EZW5zaXR5OworCitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLkFwcGxpY2F0aW9uSW5mbzsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkxpbmVhckxheW91dDsKKworLyoqCisgKiBOYXZpZ2F0aW9uIEJhciBmb3IgdGhlIFRoZW1lIEVkaXRvciBwcmV2aWV3LgorICoKKyAqIEZvciBzbWFsbCBiYXJzLCBpdCBpcyBpZGVudGljYWwgdG8ge0BsaW5rIE5hdmlnYXRpb25CYXJ9LgorICogQnV0IHdpZGUgYmFycyBmcm9tIHtAbGluayBOYXZpZ2F0aW9uQmFyfSBhcmUgdG9vIHdpZGUgZm9yIHRoZSBUaGVtZSBFZGl0b3IgcHJldmlldy4KKyAqIFRvIHNvbHZlIHRoYXQgcHJvYmxlbSwge0BsaW5rIFRoZW1lUHJldmlld05hdmlnYXRpb25CYXJ9IHVzZSB0aGUgbGF5b3V0IGZvciBzbWFsbCBiYXJzLAorICogYW5kIGhhdmUgbm8gcGFkZGluZyBvbiB0aGUgc2lkZXMuIFRoYXQgd2F5LCB0aGV5IGhhdmUgYSBzaW1pbGFyIGxvb2sgYXMgdGhlIHRydWUgb25lcywKKyAqIGFuZCB0aGV5IGZpdCBpbiB0aGUgVGhlbWUgRWRpdG9yIHByZXZpZXcuCisgKi8KK3B1YmxpYyBjbGFzcyBUaGVtZVByZXZpZXdOYXZpZ2F0aW9uQmFyIGV4dGVuZHMgTmF2aWdhdGlvbkJhciB7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFBBRERJTkdfV0lEVEhfU1c2MDAgPSAwOworCisgICAgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisgICAgcHVibGljIFRoZW1lUHJldmlld05hdmlnYXRpb25CYXIoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKKyAgICAgICAgc3VwZXIoKEJyaWRnZUNvbnRleHQpIGNvbnRleHQsCisgICAgICAgICAgICAgICAgRGVuc2l0eS5nZXRFbnVtKCgoQnJpZGdlQ29udGV4dCkgY29udGV4dCkuZ2V0TWV0cmljcygpLmRlbnNpdHlEcGkpLAorICAgICAgICAgICAgICAgIExpbmVhckxheW91dC5IT1JJWk9OVEFMLCAvLyBJbiB0aGlzIG1vZGUsIGl0IGRvZXNuJ3QgbmVlZCB0byBiZSByZW5kZXIgdmVydGljYWxseQorICAgICAgICAgICAgICAgICgoQnJpZGdlQ29udGV4dCkgY29udGV4dCkuZ2V0Q29uZmlndXJhdGlvbigpLmdldExheW91dERpcmVjdGlvbigpID09CisgICAgICAgICAgICAgICAgICAgICAgICBWaWV3LkxBWU9VVF9ESVJFQ1RJT05fUlRMLAorICAgICAgICAgICAgICAgIChjb250ZXh0LmdldEFwcGxpY2F0aW9uSW5mbygpLmZsYWdzICYgQXBwbGljYXRpb25JbmZvLkZMQUdfU1VQUE9SVFNfUlRMKSAhPSAwLAorICAgICAgICAgICAgICAgIDAsIExBWU9VVF9YTUwpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCBpbnQgZ2V0U2lkZVBhZGRpbmcoZmxvYXQgc3cpIHsKKyAgICAgICAgaWYgKHN3ID49IDYwMCkgeworICAgICAgICAgICAgcmV0dXJuIFBBRERJTkdfV0lEVEhfU1c2MDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN1cGVyLmdldFNpZGVQYWRkaW5nKHN3KTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9XaWZpU2Nhbm5lci5qYXZhIGIvd2lmaS9qYXZhL2FuZHJvaWQvbmV0L3dpZmkvV2lmaVNjYW5uZXIuamF2YQppbmRleCA1NTM0Y2FkLi43NmM2NzljIDEwMDY0NAotLS0gYS93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9XaWZpU2Nhbm5lci5qYXZhCisrKyBiL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL1dpZmlTY2FubmVyLmphdmEKQEAgLTE3MCwxOCArMTcwLDE0IEBACiAgICAgICAgIHB1YmxpYyBpbnQgbWF4U2NhbnNUb0NhY2hlOwogICAgICAgICAvKioKICAgICAgICAgICogaWYgbWF4UGVyaW9kSW5NcyBpcyBub24gemVybyBvciBkaWZmZXJlbnQgdGhhbiBwZXJpb2QsIHRoZW4gdGhpcyBidWNrZXQgaXMKLSAgICAgICAgICogYW4gZXhwb25lbnRpYWwgYmFja29mZiBidWNrZXQgYW5kIHRoZSBzY2FuIHBlcmlvZCB3aWxsIGdyb3cgZXhwb25lbnRpYWxseQotICAgICAgICAgKiBhcyBwZXIgZm9ybXVsYTogYWN0dWFsX3BlcmlvZChOKSA9IHBlcmlvZCBeIChOLyhzdGVwX2NvdW50KzEpKQotICAgICAgICAgKiB0byBhIG1heGltdW0gcGVyaW9kIG9mIG1heF9wZXJpb2QuCisgICAgICAgICAqIGEgdHJ1bmNhdGVkIGJpbmFyeSBleHBvbmVudGlhbCBiYWNrb2ZmIGJ1Y2tldCBhbmQgdGhlIHNjYW4gcGVyaW9kIHdpbGwgZ3JvdworICAgICAgICAgKiBleHBvbmVudGlhbGx5IGFzIHBlciBmb3JtdWxhOiBhY3R1YWxfcGVyaW9kKE4pID0gcGVyaW9kICogKDIgXiAoTi9zdGVwQ291bnQpKQorICAgICAgICAgKiB0byBtYXhQZXJpb2RJbk1zCiAgICAgICAgICAqLwogICAgICAgICBwdWJsaWMgaW50IG1heFBlcmlvZEluTXM7CiAgICAgICAgIC8qKgotICAgICAgICAgKiBmb3IgZXhwb25lbnRpYWwgYmFjayBvZmYgYnVja2V0OiBtdWx0aXBsaWVyOiBuZXdfcGVyaW9kPW9sZF9wZXJpb2QqZXhwb25lbnQKLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBpbnQgZXhwb25lbnQ7Ci0gICAgICAgIC8qKgotICAgICAgICAgKiBmb3IgZXhwb25lbnRpYWwgYmFjayBvZmYgYnVja2V0LCBudW1iZXIgb2Ygc2NhbnMgcGVyZm9ybWVkIGF0IGEgZ2l2ZW4KLSAgICAgICAgICogcGVyaW9kIGFuZCB1bnRpbCB0aGUgZXhwb25lbnQgaXMgYXBwbGllZAorICAgICAgICAgKiBmb3IgdHJ1bmNhdGVkIGJpbmFyeSBleHBvbmVudGlhbCBiYWNrIG9mZiBidWNrZXQsIG51bWJlciBvZiBzY2FucyB0byBwZXJmb3JtCisgICAgICAgICAqIGZvciBhIGdpdmVuIHBlcmlvZAogICAgICAgICAgKi8KICAgICAgICAgcHVibGljIGludCBzdGVwQ291bnQ7CiAKQEAgLTE5OCw3ICsxOTQsNiBAQAogICAgICAgICAgICAgZGVzdC53cml0ZUludChudW1Cc3NpZHNQZXJTY2FuKTsKICAgICAgICAgICAgIGRlc3Qud3JpdGVJbnQobWF4U2NhbnNUb0NhY2hlKTsKICAgICAgICAgICAgIGRlc3Qud3JpdGVJbnQobWF4UGVyaW9kSW5Ncyk7Ci0gICAgICAgICAgICBkZXN0LndyaXRlSW50KGV4cG9uZW50KTsKICAgICAgICAgICAgIGRlc3Qud3JpdGVJbnQoc3RlcENvdW50KTsKIAogICAgICAgICAgICAgaWYgKGNoYW5uZWxzICE9IG51bGwpIHsKQEAgLTIyNiw3ICsyMjEsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MubnVtQnNzaWRzUGVyU2NhbiA9IGluLnJlYWRJbnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzLm1heFNjYW5zVG9DYWNoZSA9IGluLnJlYWRJbnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzLm1heFBlcmlvZEluTXMgPSBpbi5yZWFkSW50KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncy5leHBvbmVudCA9IGluLnJlYWRJbnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzLnN0ZXBDb3VudCA9IGluLnJlYWRJbnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1fY2hhbm5lbHMgPSBpbi5yZWFkSW50KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncy5jaGFubmVscyA9IG5ldyBDaGFubmVsU3BlY1tudW1fY2hhbm5lbHNdOwo=