ZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL3Rlc3QvVGVzdEJ1Z3MuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aDIvcHJvY2Vzc29yL3Rlc3QvVGVzdEJ1Z3MuamF2YQppbmRleCBmYTE2OGI4Li4xNjg1OGNkIDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoMi5wcm9jZXNzb3IudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgyL3Byb2Nlc3Nvci90ZXN0L1Rlc3RCdWdzLmphdmEKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoMi9wcm9jZXNzb3IvdGVzdC9UZXN0QnVncy5qYXZhCkBAIC0xLDUgKzEsNSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSwgMjAxMCBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycy4KKyAqIENvcHlyaWdodCAoYykgMjAwOSwgMjAxMiBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAogICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKQEAgLTU4LDYgKzU4LDcgQEAKICAqICBNdWt1bCBHYW5kaGkgICAgLSBidWcgMzQxODYyIC0gaW1wcm92ZW1lbnRzIHRvIGNvbXB1dGF0aW9uIG9mIHR5cGVkIHZhbHVlIG9mIHhzOmJvb2xlYW4gbm9kZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgKiAgSmVzcGVyIFN0ZWVuIE1vbGxlciAgLSBidWcgMzQwOTMzIC0gTWlncmF0ZSB0ZXN0cyB0byBuZXcgWFBhdGgyIEFQSQogICogIEx1a2FzeiBXeWNpc2sgICAtIGJ1ZyAzNjEwNjAgLSBBZ2dyZWdhdGlvbnMgd2l0aCBuaWw91XRydWXVIHRocm93IGV4Y2VwdGlvbnMuCisgKiAgTHVrYXN6IFd5Y2lzayAgIC0gYnVnIDI2MTA1OSAtIEZuUm91bmRIYWxmVG9FdmVuIGlzIHdyb25nIGluIGNhc2Ugb2YgMiBhcmd1bWVudHMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLnRlc3Q7CkBAIC0xMTY1LDYgKzExNjYsNzkgQEAKIAogCQlhc3NlcnRFcXVhbHMoIkRvbid0IHRyeSB0aGlzIGF0IFwiaG9tZVwiLCBzaGUgc2FpZCIsIHJlc3VsdFZhbHVlKTsKIAl9CisJCisJcHVibGljIHZvaWQgdGVzdE51bWVyaWNGdW5jdGlvbk9uRW1wdHlTZXF1ZW5jZSgpIHRocm93cyBFeGNlcHRpb24geworCisJCWJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZSgib3JnLnczYy54cXRzLnRlc3RzdWl0ZSIpOworCQlVUkwgZmlsZVVSTCA9IGJ1bmRsZS5nZXRFbnRyeSgiL1Rlc3RTb3VyY2VzL2VtcHR5ZG9jLnhtbCIpOworCQlsb2FkRE9NRG9jdW1lbnQoZmlsZVVSTCk7CisKKwkJLy8gR2V0IFhNTCBTY2hlbWEgSW5mb3JtYXRpb24gZm9yIHRoZSBEb2N1bWVudAorCQlYU01vZGVsIHNjaGVtYSA9IGdldEdyYW1tYXIoKTsKKworCQlzZXR1cER5bmFtaWNDb250ZXh0KHNjaGVtYSk7CisJCQorCQlTdHJpbmcgeHBhdGggPSBudWxsOworCQlSZXN1bHRTZXF1ZW5jZSBycyA9IG51bGw7CisJCQkJCisJCS8vYSkKKwkJeHBhdGggPSAiZm46YWJzKCgpKSI7CisgICAgICAgICAgY29tcGlsZVhQYXRoKHhwYXRoKTsKKyAgICAgICAgICBycyA9IGV2YWx1YXRlKGRvbURvYyk7CisJCWFzc2VydEVxdWFscygwLHJzLnNpemUoKSk7CisJCQorCQkvL2IpCisJCXhwYXRoID0gImZuOmNlaWxpbmcoKCkpIjsKKyAgICAgICAgICBjb21waWxlWFBhdGgoeHBhdGgpOworICAgICAgICAgIHJzID0gZXZhbHVhdGUoZG9tRG9jKTsKKwkJYXNzZXJ0RXF1YWxzKDAscnMuc2l6ZSgpKTsKKworCQkvL2MpCisJCXhwYXRoID0gImZuOmZsb29yKCgpKSI7CisgICAgICAgICAgY29tcGlsZVhQYXRoKHhwYXRoKTsKKyAgICAgICAgICBycyA9IGV2YWx1YXRlKGRvbURvYyk7CisJCWFzc2VydEVxdWFscygwLHJzLnNpemUoKSk7CisJCQorCQkvL2QpCisJCXhwYXRoID0gImZuOnJvdW5kKCgpKSI7CisgICAgICAgICAgY29tcGlsZVhQYXRoKHhwYXRoKTsKKyAgICAgICAgICBycyA9IGV2YWx1YXRlKGRvbURvYyk7CisJCWFzc2VydEVxdWFscygwLHJzLnNpemUoKSk7CisJCQorCQkvL2UpCisJCXhwYXRoID0gImZuOnJvdW5kLWhhbGYtdG8tZXZlbigoKSkiOworICAgICAgICAgIGNvbXBpbGVYUGF0aCh4cGF0aCk7CisgICAgICAgICAgcnMgPSBldmFsdWF0ZShkb21Eb2MpOworCQlhc3NlcnRFcXVhbHMoMCxycy5zaXplKCkpOworCQkKKwkJLy9mKQorCQl4cGF0aCA9ICJmbjpyb3VuZC1oYWxmLXRvLWV2ZW4oKCksMSkiOworICAgICAgICAgIGNvbXBpbGVYUGF0aCh4cGF0aCk7CisgICAgICAgICAgcnMgPSBldmFsdWF0ZShkb21Eb2MpOworCQlhc3NlcnRFcXVhbHMoMCxycy5zaXplKCkpOworCX0KKwkKKwlwdWJsaWMgdm9pZCB0ZXN0U2VxdWVuY2VBZ2dyZWdhdGlvbk9uRW1wdHkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKworCQlidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoIm9yZy53M2MueHF0cy50ZXN0c3VpdGUiKTsKKwkJVVJMIGZpbGVVUkwgPSBidW5kbGUuZ2V0RW50cnkoIi9UZXN0U291cmNlcy9lbXB0eWRvYy54bWwiKTsKKwkJbG9hZERPTURvY3VtZW50KGZpbGVVUkwpOworCisJCS8vIEdldCBYTUwgU2NoZW1hIEluZm9ybWF0aW9uIGZvciB0aGUgRG9jdW1lbnQKKwkJWFNNb2RlbCBzY2hlbWEgPSBnZXRHcmFtbWFyKCk7CisKKwkJc2V0dXBEeW5hbWljQ29udGV4dChzY2hlbWEpOworCQkKKwkJU3RyaW5nIHhwYXRoID0gbnVsbDsKKwkJUmVzdWx0U2VxdWVuY2UgcnMgPSBudWxsOworCQkJCQorCQkvL2EpCisJCXhwYXRoID0gImZuOnN1bSgoMSwyLDMsKCkgKSkiOworICAgICAgICAgIGNvbXBpbGVYUGF0aCh4cGF0aCk7CisgICAgICAgICAgcnMgPSBldmFsdWF0ZShkb21Eb2MpOworICAgICAgICAgIFhTRGVjaW1hbCB2YWwgPSAoWFNEZWNpbWFsKXJzLmZpcnN0KCk7CisJCWFzc2VydEVxdWFscygiNiIsdmFsLnN0cmluZ192YWx1ZSgpKTsKKwl9CiAKIAlwdWJsaWMgdm9pZCB0ZXN0QnVnMjgwNTU1X2NvbGxhdGlvbnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJLy8gU2V0dXAgY29udGV4dApAQCAtMTg1NSw2ICsxOTI5LDMwIEBACiAJCWFzc2VydEVxdWFscygiMTAwIiwgYWN0dWFsKTsKIAl9CiAJCisJcHVibGljIHZvaWQgdGVzdEZ1bmN0aW9uQXRvbWl6YXRpb24yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCS8vIEJ1ZyAzMTgzMTMKKwkJVVJMIGZpbGVVUkwgPSBidW5kbGUuZ2V0RW50cnkoIi9idWdUZXN0RmlsZXMvYnVnMzE4MzEzLnhtbCIpOworCQlVUkwgc2NoZW1hVVJMID0gYnVuZGxlLmdldEVudHJ5KCIvYnVnVGVzdEZpbGVzL2J1ZzMxODMxMy54c2QiKTsKKworCQlsb2FkRE9NRG9jdW1lbnQoZmlsZVVSTCwgc2NoZW1hVVJMKTsKKworCQkvLyBHZXQgWFNNb2RlbCBvYmplY3QgZm9yIHRoZSBTY2hlbWEKKwkJWFNNb2RlbCBzY2hlbWEgPSBnZXRHcmFtbWFyKHNjaGVtYVVSTCk7CisKKwkJc2V0dXBEeW5hbWljQ29udGV4dChzY2hlbWEpOworCisJCVN0cmluZyB4cGF0aCA9ICJmbjpyb3VuZC1oYWxmLXRvLWV2ZW4oWCwxKSI7CisgICAgICAgICAgY29tcGlsZVhQYXRoKHhwYXRoKTsKKyAgICAgICAgICBSZXN1bHRTZXF1ZW5jZSBycyA9IGV2YWx1YXRlKGRvbURvYyk7CisKKworICAgICAgICAgIFhTRGVjaW1hbCByZXN1bHQgPSAoWFNEZWNpbWFsKSBycy5maXJzdCgpOworCisJCVN0cmluZyBhY3R1YWwgPSByZXN1bHQuZ2V0U3RyaW5nVmFsdWUoKTsKKworCQlhc3NlcnRFcXVhbHMoIjEwMCIsIGFjdHVhbCk7CisJfQorCQogCXB1YmxpYyB2b2lkIHRlc3RUeXBlZFZhbHVlRW5oYW5jZW1lbnRfQnVnMzIzOTAwXzEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJLy8gQnVnIDMyMzkwMAogCQlVUkwgZmlsZVVSTCA9IGJ1bmRsZS5nZXRFbnRyeSgiL2J1Z1Rlc3RGaWxlcy9idWczMjM5MDBfMS54bWwiKTsK