SW5kZXg6IHNyYy9vcmcvZWNsaXBzZS92aWF0cmEyL2d0YXNtL3BhdHRlcm5tYXRjaGVyL2luY3JlbWVudGFsL3JldGUvbmV0d29yay9TdGFuZGFyZE5vZGUuamF2YQ0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHNyYy9vcmcvZWNsaXBzZS92aWF0cmEyL2d0YXNtL3BhdHRlcm5tYXRjaGVyL2luY3JlbWVudGFsL3JldGUvbmV0d29yay9TdGFuZGFyZE5vZGUuamF2YQkocmV2aXNpb24gMTU4NSkNCisrKyBzcmMvb3JnL2VjbGlwc2UvdmlhdHJhMi9ndGFzbS9wYXR0ZXJubWF0Y2hlci9pbmNyZW1lbnRhbC9yZXRlL25ldHdvcmsvU3RhbmRhcmROb2RlLmphdmEJKHdvcmtpbmcgY29weSkNCkBAIC0xMSw3ICsxMSw3IEBADQogCiBwYWNrYWdlIG9yZy5lY2xpcHNlLnZpYXRyYTIuZ3Rhc20ucGF0dGVybm1hdGNoZXIuaW5jcmVtZW50YWwucmV0ZS5uZXR3b3JrOwogCi1pbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIAogaW1wb3J0IG9yZy5lY2xpcHNlLnZpYXRyYTIuZ3Rhc20ucGF0dGVybm1hdGNoZXIuaW5jcmVtZW50YWwucmV0ZS50dXBsZS5UdXBsZTsKQEAgLTMwLDEyICszMCwyNiBAQA0KIAlwdWJsaWMgU3RhbmRhcmROb2RlKFJldGVDb250YWluZXIgcmV0ZUNvbnRhaW5lcikgewogCQl0aGlzLnJldGVDb250YWluZXIgPSByZXRlQ29udGFpbmVyOwogCQl0aGlzLm5vZGVJZCA9IHJldGVDb250YWluZXIucmVnaXN0ZXJOb2RlKHRoaXMpOwotCQljaGlsZHJlbiA9IG5ldyBMaW5rZWRMaXN0PFJlY2VpdmVyPigpOworCQljaGlsZHJlbiA9IG5ldyBBcnJheUxpc3Q8UmVjZWl2ZXI+KCk7CiAJfQorCQorLy8Jc3RhdGljIGxvbmcgemFuecOhZENvdW50ZXIgPSAwOworLy8JcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IF9hbG90ID0gMTAwMDAwMDsvLy0xOwogCiAJcHJvdGVjdGVkIHZvaWQgcHJvcGFnYXRlVXBkYXRlKERpcmVjdGlvbiBkaXJlY3Rpb24sIFR1cGxlIHVwZGF0ZUVsZW1lbnQpIHsKKy8vCQl6YW55w6FkQ291bnRlcis9Y2hpbGRyZW4uc2l6ZSgpO2lmICh6YW55w6FkQ291bnRlciA9PSBfYWxvdCkgeworLy8JCQlTeXN0ZW0ub3V0LnByaW50bG4oIsM/wz/DP8M/wz/DP8M/wz8iKTsKKy8vCQkJd2hpbGUgKHRydWUpIHRyeSB7CisvLwkJCQlUaHJlYWQuc2xlZXAoX2Fsb3QpOworLy8JCQl9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7CisvLwkJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisvLwkJCQllLnByaW50U3RhY2tUcmFjZSgpOworLy8JCQl9CisvLwkJfQogCQlmb3IgKFJlY2VpdmVyIHIgOiBjaGlsZHJlbikKLQkJCXJldGVDb250YWluZXIuc2VuZFVwZGF0ZUludGVybmFsKHIsIGRpcmVjdGlvbiwgdXBkYXRlRWxlbWVudCk7CisJCQlyLnVwZGF0ZShkaXJlY3Rpb24sIHVwZGF0ZUVsZW1lbnQpOworCQkJLy9yZXRlQ29udGFpbmVyLnNlbmRVcGRhdGVJbnRlcm5hbChyLCBkaXJlY3Rpb24sIHVwZGF0ZUVsZW1lbnQpOworCiAJfQogCiAJcHVibGljIHZvaWQgYXBwZW5kQ2hpbGQoUmVjZWl2ZXIgcmVjZWl2ZXIpIHsKSW5kZXg6IHNyYy9vcmcvZWNsaXBzZS92aWF0cmEyL2d0YXNtL3BhdHRlcm5tYXRjaGVyL2luY3JlbWVudGFsL3JldGUvc2luZ2xlL1RyaW1tZXJOb2RlLmphdmENCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBzcmMvb3JnL2VjbGlwc2UvdmlhdHJhMi9ndGFzbS9wYXR0ZXJubWF0Y2hlci9pbmNyZW1lbnRhbC9yZXRlL3NpbmdsZS9UcmltbWVyTm9kZS5qYXZhCShyZXZpc2lvbiAxNTg1KQ0KKysrIHNyYy9vcmcvZWNsaXBzZS92aWF0cmEyL2d0YXNtL3BhdHRlcm5tYXRjaGVyL2luY3JlbWVudGFsL3JldGUvc2luZ2xlL1RyaW1tZXJOb2RlLmphdmEJKHdvcmtpbmcgY29weSkNCkBAIC0xMSw5ICsxMSwxMSBAQA0KIAogcGFja2FnZSBvcmcuZWNsaXBzZS52aWF0cmEyLmd0YXNtLnBhdHRlcm5tYXRjaGVyLmluY3JlbWVudGFsLnJldGUuc2luZ2xlOwogCitpbXBvcnQgb3JnLmVjbGlwc2UudmlhdHJhMi5ndGFzbS5wYXR0ZXJubWF0Y2hlci5pbmNyZW1lbnRhbC5yZXRlLm5ldHdvcmsuRGlyZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnZpYXRyYTIuZ3Rhc20ucGF0dGVybm1hdGNoZXIuaW5jcmVtZW50YWwucmV0ZS5uZXR3b3JrLlJlY2VpdmVyOwogaW1wb3J0IG9yZy5lY2xpcHNlLnZpYXRyYTIuZ3Rhc20ucGF0dGVybm1hdGNoZXIuaW5jcmVtZW50YWwucmV0ZS5uZXR3b3JrLlJldGVDb250YWluZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudmlhdHJhMi5ndGFzbS5wYXR0ZXJubWF0Y2hlci5pbmNyZW1lbnRhbC5yZXRlLnR1cGxlLlR1cGxlTWFzazsKIGltcG9ydCBvcmcuZWNsaXBzZS52aWF0cmEyLmd0YXNtLnBhdHRlcm5tYXRjaGVyLmluY3JlbWVudGFsLnJldGUudHVwbGUuVHVwbGU7CitpbXBvcnQgb3JnLmVjbGlwc2UudmlhdHJhMi5ndGFzbS5wYXR0ZXJubWF0Y2hlci5pbmNyZW1lbnRhbC5yZXRlLnR1cGxlLlR1cGxlTWFzazsKIAogLyoqCiAgKiBUcmltcyB0aGUgbWF0Y2hpbmdzIGFzIHNwZWNpZmllZCBieSBhIG1hc2suCkBAIC02NCw1ICs2NiwxNSBAQA0KIAlwcm90ZWN0ZWQgVHVwbGUgdHJhbnNmb3JtKFR1cGxlIGlucHV0KSB7CiAJCXJldHVybiBtYXNrLnRyYW5zZm9ybShpbnB1dCk7CiAJfQorCQorCS8qIChub24tSmF2YWRvYykKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnZpYXRyYTIuZ3Rhc20ucGF0dGVybm1hdGNoZXIuaW5jcmVtZW50YWwucmV0ZS5uZXR3b3JrLlN0YW5kYXJkTm9kZSNwcm9wYWdhdGVVcGRhdGUob3JnLmVjbGlwc2UudmlhdHJhMi5ndGFzbS5wYXR0ZXJubWF0Y2hlci5pbmNyZW1lbnRhbC5yZXRlLm5ldHdvcmsuRGlyZWN0aW9uLCBvcmcuZWNsaXBzZS52aWF0cmEyLmd0YXNtLnBhdHRlcm5tYXRjaGVyLmluY3JlbWVudGFsLnJldGUudHVwbGUuVHVwbGUpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgcHJvcGFnYXRlVXBkYXRlKERpcmVjdGlvbiBkaXJlY3Rpb24sIFR1cGxlIHVwZGF0ZUVsZW1lbnQpIHsKKwkJLy8gVE9ETyBIwz9LIHRvIGF2b2lkIGNpcmN1bGFyaXR5IHByb2JsZW1zIHdpdGggcHJvZHVjdGlvbiBub2RlICh3aGVyZSBSRVRFIGNhbiB0dXJuIG5vbi1EQUcpCisJCWZvciAoUmVjZWl2ZXIgcjogY2hpbGRyZW4pCisJCQlyZXRlQ29udGFpbmVyLnNlbmRVcGRhdGVJbnRlcm5hbChyLCBkaXJlY3Rpb24sIHVwZGF0ZUVsZW1lbnQpOworCX0KIAogfQo=