ZGlmZiAtLWdpdCBhL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5nZW5lcmF0b3IvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYuZ2VuZXJhdG9yL01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IDE3MzIzOWQuLjMyMDdhNDYgMTAwNjQ0Ci0tLSBhL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5nZW5lcmF0b3IvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLmdlbmVyYXRvci9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtNSw3ICs1LDggQEAKIEJ1bmRsZS1WZXJzaW9uOiAxLjAuMC5xdWFsaWZpZXIKIEJ1bmRsZS1BY3RpdmF0b3I6IGNvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5nZW5lcmF0b3IuQWN0aXZhdG9yCiBCdW5kbGUtVmVuZG9yOiBHb29nbGUKLVJlcXVpcmUtQnVuZGxlOiBvcmcuYW50bHIucnVudGltZSwKK1JlcXVpcmUtQnVuZGxlOiBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYsCisgb3JnLmFudGxyLnJ1bnRpbWUsCiAgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcsCiAgb3JnLmFwYWNoZS5sb2c0aiwKICBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcywKZGlmZiAtLWdpdCBhL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5nZW5lcmF0b3IvYmluLy5wcm9qZWN0IGIvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLmdlbmVyYXRvci9iaW4vLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlODlhN2UuLjAwMDAwMDAKLS0tIGEvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLmdlbmVyYXRvci9iaW4vLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYuZ2VuZXJhdG9yPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UueHRleHQudWkuc2hhcmVkLnh0ZXh0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnh0ZXh0LnVpLnNoYXJlZC54dGV4dE5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLmdlbmVyYXRvci9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL0dlbmVyYXRlUHJvdG9idWYubXdlMiBiL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5nZW5lcmF0b3Ivc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi9HZW5lcmF0ZVByb3RvYnVmLm13ZTIKaW5kZXggMDk3ODUyYi4uZWMyNmU4ZSAxMDA2NDQKLS0tIGEvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLmdlbmVyYXRvci9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL0dlbmVyYXRlUHJvdG9idWYubXdlMgorKysgYi9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYuZ2VuZXJhdG9yL3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvR2VuZXJhdGVQcm90b2J1Zi5td2UyCkBAIC00MiwyMyArNDIsMjMgQEAKICAgICAgIHVyaSA9IGdyYW1tYXJVUkkKICAgICAgIGZpbGVFeHRlbnNpb25zID0gZmlsZS5leHRlbnNpb25zCiAKLSAgICAgIC8vIEphdmEgQVBJIHRvIGFjY2VzcyBncmFtbWFyIGVsZW1lbnRzIChyZXF1aXJlZCBieSBzZXZlcmFsIG90aGVyIGZyYWdtZW50cykKKyAgICAgIC8vIEphdmEgQVBJIGZvciBhY2Nlc3NpbmcgZ3JhbW1hciBlbGVtZW50cyAocmVxdWlyZWQgYnkgc2V2ZXJhbCBvdGhlciBmcmFnbWVudHMpCiAgICAgICBmcmFnbWVudCA9IGdyYW1tYXJBY2Nlc3MuR3JhbW1hckFjY2Vzc0ZyYWdtZW50IHt9CiAKLSAgICAgIC8vIGdlbmVyYXRlcyBKYXZhIEFQSSBmb3IgdGhlIGdlbmVyYXRlZCBFUGFja2FnZXMgCisgICAgICAvLyBHZW5lcmF0ZXMgSmF2YSBBUEkgZm9yIHRoZSBnZW5lcmF0ZWQgRVBhY2thZ2VzCiAgICAgICBmcmFnbWVudCA9IGVjb3JlLkVNRkdlbmVyYXRvckZyYWdtZW50IHsKICAgICAgIC8vIHJlZmVyZW5jZWRHZW5Nb2RlbHMgPSAidXJpIHRvIGdlbm1vZGVsLCB1cmkgdG8gbmV4dCBnZW5tb2RlbCIKICAgICAgIH0KLSAgICAgIAorCiAgICAgICAvLyBTZXJpYWxpemVyIDIuMAogICAgICAgZnJhZ21lbnQgPSBzZXJpYWxpemVyLlNlcmlhbGl6ZXJGcmFnbWVudCB7CiAgICAgICAgIGdlbmVyYXRlU3R1YiA9IGZhbHNlCiAgICAgICB9CiAKLSAgICAgIC8vIHRoZSBzZXJpYWxpemF0aW9uIGNvbXBvbmVudAorICAgICAgLy8gVGhlIHNlcmlhbGl6YXRpb24gY29tcG9uZW50CiAgICAgICAvLyBmcmFnbWVudCA9IHBhcnNlVHJlZUNvbnN0cnVjdG9yLlBhcnNlVHJlZUNvbnN0cnVjdG9yRnJhZ21lbnQge30KIAotICAgICAgLy8gYSBjdXN0b20gUmVzb3VyY2VGYWN0b3J5IGZvciB1c2Ugd2l0aCBFTUYgCisgICAgICAvLyBBIGN1c3RvbSBSZXNvdXJjZUZhY3RvcnkgZm9yIHVzZSB3aXRoIEVNRgogICAgICAgZnJhZ21lbnQgPSByZXNvdXJjZUZhY3RvcnkuUmVzb3VyY2VGYWN0b3J5RnJhZ21lbnQgewogICAgICAgICBmaWxlRXh0ZW5zaW9ucyA9IGZpbGUuZXh0ZW5zaW9ucwogICAgICAgfQpAQCAtNzAsNTIgKzcwLDUyIEBACiAgICAgICAgIC8vIH0KICAgICAgIH0KIAotICAgICAgLy8gamF2YS1iYXNlZCBBUEkgZm9yIHZhbGlkYXRpb24gCisgICAgICAvLyBKYXZhLWJhc2VkIEFQSSBmb3IgdmFsaWRhdGlvbgogICAgICAgZnJhZ21lbnQgPSB2YWxpZGF0aW9uLkphdmFWYWxpZGF0b3JGcmFnbWVudCB7CiAgICAgICAvLyBjb21wb3NlZENoZWNrID0gIm9yZy5lY2xpcHNlLnh0ZXh0LnZhbGlkYXRpb24uSW1wb3J0VXJpVmFsaWRhdG9yIgogICAgICAgLy8gY29tcG9zZWRDaGVjayA9ICJvcmcuZWNsaXBzZS54dGV4dC52YWxpZGF0aW9uLk5hbWVzQXJlVW5pcXVlVmFsaWRhdG9yIgogICAgICAgLy8gcmVnaXN0ZXJGb3JJbXBvcnRlZFBhY2thZ2VzID0gdHJ1ZQogICAgICAgfQogCi0gICAgICAvLyBzY29waW5nIGFuZCBleHBvcnRpbmcgQVBJCisgICAgICAvLyBTY29waW5nIGFuZCBleHBvcnRpbmcgQVBJCiAgICAgICAvLyBmcmFnbWVudCA9IHNjb3BpbmcuSW1wb3J0VVJJU2NvcGluZ0ZyYWdtZW50IHt9CiAgICAgICAvLyBmcmFnbWVudCA9IGV4cG9ydGluZy5TaW1wbGVOYW1lc0ZyYWdtZW50IHt9CiAKLSAgICAgIC8vIHNjb3BpbmcgYW5kIGV4cG9ydGluZyBBUEkgCi0gICAgICBmcmFnbWVudCA9IHNjb3BpbmcuSW1wb3J0TmFtZXNwYWNlc1Njb3BpbmdGcmFnbWVudCB7fQorICAgICAgLy8gU2NvcGluZyBhbmQgZXhwb3J0aW5nIEFQSQorICAgICAgZnJhZ21lbnQgPSBzY29waW5nLlByb3RvYnVmSW1wb3J0TmFtZXNwYWNlc1Njb3BpbmdGcmFnbWVudCB7fQogICAgICAgZnJhZ21lbnQgPSBleHBvcnRpbmcuUXVhbGlmaWVkTmFtZXNGcmFnbWVudCB7fQogICAgICAgZnJhZ21lbnQgPSBidWlsZGVyLkJ1aWxkZXJJbnRlZ3JhdGlvbkZyYWdtZW50IHt9CiAKLSAgICAgIC8vIGZvcm1hdHRlciBBUEkgCisgICAgICAvLyBGb3JtYXR0ZXIgQVBJCiAgICAgICBmcmFnbWVudCA9IGZvcm1hdHRpbmcuRm9ybWF0dGVyRnJhZ21lbnQge30KIAotICAgICAgLy8gbGFiZWxpbmcgQVBJIAorICAgICAgLy8gTGFiZWxpbmcgQVBJCiAgICAgICBmcmFnbWVudCA9IGxhYmVsaW5nLkxhYmVsUHJvdmlkZXJGcmFnbWVudCB7fQogCi0gICAgICAvLyBvdXRsaW5lIEFQSSAKKyAgICAgIC8vIE91dGxpbmUgQVBJCiAgICAgICBmcmFnbWVudCA9IG91dGxpbmUuT3V0bGluZVRyZWVQcm92aWRlckZyYWdtZW50IHt9CiAgICAgICBmcmFnbWVudCA9IG91dGxpbmUuUXVpY2tPdXRsaW5lRnJhZ21lbnQge30KIAotICAgICAgLy8gcXVpY2tmaXggQVBJIAorICAgICAgLy8gUXVpY2tmaXggQVBJCiAgICAgICBmcmFnbWVudCA9IHF1aWNrZml4LlF1aWNrZml4UHJvdmlkZXJGcmFnbWVudCB7fQogCi0gICAgICAvLyByZW5hbWUgcmVmYWN0b3JpbmcKKyAgICAgIC8vIFJlbmFtZSByZWZhY3RvcmluZwogICAgICAgZnJhZ21lbnQgPSByZWZhY3RvcmluZy5SZWZhY3RvckVsZW1lbnROYW1lRnJhZ21lbnQge30KIAotICAgICAgLy8gY29udGVudCBhc3Npc3QgQVBJICAKKyAgICAgIC8vIENvbnRlbnQgYXNzaXN0IEFQSQogICAgICAgZnJhZ21lbnQgPSBjb250ZW50QXNzaXN0LkphdmFCYXNlZENvbnRlbnRBc3Npc3RGcmFnbWVudCB7fQogCi0gICAgICAvLyBnZW5lcmF0ZXMgYSBtb3JlIGxpZ2h0d2VpZ2h0IEFudGxyIHBhcnNlciBhbmQgbGV4ZXIgdGFpbG9yZWQgZm9yIGNvbnRlbnQgYXNzaXN0ICAKKyAgICAgIC8vIEdlbmVyYXRlcyBhIG1vcmUgbGlnaHR3ZWlnaHQgQW50bHIgcGFyc2VyIGFuZCBsZXhlciB0YWlsb3JlZCBmb3IgY29udGVudCBhc3Npc3QKICAgICAgIGZyYWdtZW50ID0gcGFyc2VyLmFudGxyLlh0ZXh0QW50bHJVaUdlbmVyYXRvckZyYWdtZW50IHsKICAgICAgICAgLy8gb3B0aW9ucyA9IHsKICAgICAgICAgLy8gICBiYWNrdHJhY2sgPSB0cnVlCiAgICAgICAgIC8vIH0KICAgICAgIH0KIAotICAgICAgLy8gcHJvamVjdCB3aXphcmQgKG9wdGlvbmFsKSAKKyAgICAgIC8vIFByb2plY3Qgd2l6YXJkIChvcHRpb25hbCkKICAgICAgIC8vIGZyYWdtZW50ID0gcHJvamVjdFdpemFyZC5TaW1wbGVQcm9qZWN0V2l6YXJkRnJhZ21lbnQgewotICAgICAgLy8gCQlnZW5lcmF0b3JQcm9qZWN0TmFtZSA9ICIke3Byb2plY3ROYW1lfS5nZW5lcmF0b3IiIAotICAgICAgLy8JCW1vZGVsRmlsZUV4dGVuc2lvbiA9IGZpbGUuZXh0ZW5zaW9ucworICAgICAgLy8gICBnZW5lcmF0b3JQcm9qZWN0TmFtZSA9ICIke3Byb2plY3ROYW1lfS5nZW5lcmF0b3IiCisgICAgICAvLyAgIG1vZGVsRmlsZUV4dGVuc2lvbiA9IGZpbGUuZXh0ZW5zaW9ucwogICAgICAgLy8gfQogICAgIH0KICAgfQpkaWZmIC0tZ2l0IGEvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLmdlbmVyYXRvci9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL1Byb3RvYnVmLnh0ZXh0IGIvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLmdlbmVyYXRvci9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL1Byb3RvYnVmLnh0ZXh0CmluZGV4IDJhMzliYTYuLjJiOTllYTcgMTAwNjQ0Ci0tLSBhL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5nZW5lcmF0b3Ivc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi9Qcm90b2J1Zi54dGV4dAorKysgYi9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYuZ2VuZXJhdG9yL3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvUHJvdG9idWYueHRleHQKQEAgLTI0LDcgKzI0LDcgQEAKICAgUGFja2FnZSB8IEltcG9ydCB8IE9wdGlvbiB8IENvbXBsZXhUeXBlIHwgVHlwZUV4dGVuc2lvbiB8IFNlcnZpY2U7CiAKIFBhY2thZ2U6Ci0gICdwYWNrYWdlJyBuYW1lPVBhY2thZ2VOYW1lICgnOycpKzsKKyAgJ3BhY2thZ2UnIGltcG9ydGVkTmFtZXNwYWNlPVBhY2thZ2VOYW1lICgnOycpKzsKIAogUGFja2FnZU5hbWU6CiAgIElkT3JSZXNlcnZlZFdvcmQgKCcuJyBJZE9yUmVzZXJ2ZWRXb3JkKSo7CmRpZmYgLS1naXQgYS9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYuZ2VuZXJhdG9yL3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvc2NvcGluZy9Qcm90b2J1ZkltcG9ydE5hbWVzcGFjZXNTY29waW5nRnJhZ21lbnQuamF2YSBiL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5nZW5lcmF0b3Ivc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi9zY29waW5nL1Byb3RvYnVmSW1wb3J0TmFtZXNwYWNlc1Njb3BpbmdGcmFnbWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlM2RhMTMKLS0tIC9kZXYvbnVsbAorKysgYi9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYuZ2VuZXJhdG9yL3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvc2NvcGluZy9Qcm90b2J1ZkltcG9ydE5hbWVzcGFjZXNTY29waW5nRnJhZ21lbnQuamF2YQpAQCAtMCwwICsxLDI1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE2IEdvb2dsZSBJbmMuCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQorICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoCisgKiBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqLworcGFja2FnZSBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYuc2NvcGluZzsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnh0ZXh0LmdlbmVyYXRvci5zY29waW5nLkFic3RyYWN0U2NvcGluZ0ZyYWdtZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnh0ZXh0LnNjb3BpbmcuSUdsb2JhbFNjb3BlUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UueHRleHQuc2NvcGluZy5JU2NvcGVQcm92aWRlcjsKKworcHVibGljIGNsYXNzIFByb3RvYnVmSW1wb3J0TmFtZXNwYWNlc1Njb3BpbmdGcmFnbWVudCBleHRlbmRzIEFic3RyYWN0U2NvcGluZ0ZyYWdtZW50IHsKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBDbGFzczw/IGV4dGVuZHMgSUdsb2JhbFNjb3BlUHJvdmlkZXI+IGdldEdsb2JhbFNjb3BlUHJvdmlkZXIoKSB7CisgICAgcmV0dXJuIFByb3RvYnVmSW1wb3J0VXJpR2xvYmFsU2NvcGVQcm92aWRlci5jbGFzczsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgQ2xhc3M8PyBleHRlbmRzIElTY29wZVByb3ZpZGVyPiBnZXRMb2NhbFNjb3BlUHJvdmlkZXIoKSB7CisgICAgcmV0dXJuIFByb3RvYnVmSW1wb3J0ZWROYW1lc3BhY2VBd2FyZUxvY2FsU2NvcGVQcm92aWRlci5jbGFzczsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLmdlbmVyYXRvci9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL3Njb3BpbmcvUHJvdG9idWZJbXBvcnROYW1lc3BhY2VzU2NvcGluZ0ZyYWdtZW50LnhwdCBiL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5nZW5lcmF0b3Ivc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi9zY29waW5nL1Byb3RvYnVmSW1wb3J0TmFtZXNwYWNlc1Njb3BpbmdGcmFnbWVudC54cHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNjNmNjNQotLS0gL2Rldi9udWxsCisrKyBiL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5nZW5lcmF0b3Ivc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi9zY29waW5nL1Byb3RvYnVmSW1wb3J0TmFtZXNwYWNlc1Njb3BpbmdGcmFnbWVudC54cHQKQEAgLTAsMCArMSwyMyBAQAorq1JFTbsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggaXRlbWlzIEFHIChodHRwOi8vd3d3Lml0ZW1pcy5ldSkgYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiurRU5EUkVNuworCiurSU1QT1JUIG9yZzo6ZWNsaXBzZTo6eHRleHS7CisKKworq0RFRklORSBhZGRUb1BsdWdpblhtbFJ0KFN0cmluZyBzY29wZVByb3ZpZGVyU3VwZXJDbGFzc05hbWUsIEJvb2xlYW4gZ2VuZXJhdGVTdHViLCBCb29sZWFuIGdlbmVyYXRlWHRlbmRTdHViKSBGT1IgR3JhbW1hcrurRU5EREVGSU5FuworCiurREVGSU5FIGFkZFRvUGx1Z2luWG1sVWkoU3RyaW5nIHNjb3BlUHJvdmlkZXJTdXBlckNsYXNzTmFtZSwgQm9vbGVhbiBnZW5lcmF0ZVN0dWIsIEJvb2xlYW4gZ2VuZXJhdGVYdGVuZFN0dWIpIEZPUiBHcmFtbWFyu6tFTkRERUZJTkW7CisKK6tERUZJTkUgYWRkVG9TdGFuZGFsb25lU2V0dXAoU3RyaW5nIHNjb3BlUHJvdmlkZXJTdXBlckNsYXNzTmFtZSwgQm9vbGVhbiBnZW5lcmF0ZVN0dWIsIEJvb2xlYW4gZ2VuZXJhdGVYdGVuZFN0dWIpIEZPUiBHcmFtbWFyu6tFTkRERUZJTkW7CisKK6tERUZJTkUgZ2VuZXJhdGUoU3RyaW5nIHNjb3BlUHJvdmlkZXJTdXBlckNsYXNzTmFtZSwgQm9vbGVhbiBnZW5lcmF0ZVN0dWIsIEJvb2xlYW4gZ2VuZXJhdGVYdGVuZFN0dWIpIEZPUiBHcmFtbWFyuworCatFWFBBTkQgZ2VuZXJhdG9yOjpzY29waW5nOjpBYnN0cmFjdFNjb3BpbmdGcmFnbWVudDo6Z2VuZXJhdGVTY29wZVByb3ZpZGVyKHNjb3BlUHJvdmlkZXJTdXBlckNsYXNzTmFtZSwgZ2VuZXJhdGVTdHViLCBnZW5lcmF0ZVh0ZW5kU3R1Yim7CiurRU5EREVGSU5FuwpkaWZmIC0tZ2l0IGEvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnRlc3Qvc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi9qdW5pdC9jb3JlL0ZpbmRlci5qYXZhIGIvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnRlc3Qvc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi9qdW5pdC9jb3JlL0ZpbmRlci5qYXZhCmluZGV4IGY0MDJjMDMuLmVhNzE0YTEgMTAwNjQ0Ci0tLSBhL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi50ZXN0L3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvanVuaXQvY29yZS9GaW5kZXIuamF2YQorKysgYi9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYudGVzdC9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL2p1bml0L2NvcmUvRmluZGVyLmphdmEKQEAgLTMyLDcgKzMyLDcgQEAKIGNsYXNzIEZpbmRlciB7CiAgIC8vIFRPRE8gcmVtb3ZlIGZlYXR1cmUgbmFtZXMgdGhhdCBhcmUgbm90IHVzZWQgb3IgZG9uJ3QgZXhpc3QgYW55IG1vcmUuCiAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIEZFQVRVUkVfTkFNRVMgPSB7ICJleHRlbnNpb24iLCAidGFyZ2V0IiwgIm1lc3NhZ2UiLCAibmFtZSIsICJvcHRpb25GaWVsZCIsICJwcm9wZXJ0eSIsCi0gICAgICAic291cmNlIiwgInR5cGUiLCAidmFsdWUiIH07CisgICAgICAic291cmNlIiwgInR5cGUiLCAidmFsdWUiLCAiaW1wb3J0ZWROYW1lc3BhY2UifTsKIAogICBwcml2YXRlIGZpbmFsIFN0cmluZyBwcm90b0FzVGV4dDsKICAgcHJpdmF0ZSBmaW5hbCBBYnN0cmFjdE5vZGUgcm9vdDsKZGlmZiAtLWdpdCBhL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi50ZXN0L3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvbW9kZWwvdXRpbC9Nb2RlbE9iamVjdHNfcGFja2FnZU9mX1Rlc3QuamF2YSBiL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi50ZXN0L3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvbW9kZWwvdXRpbC9Nb2RlbE9iamVjdHNfcGFja2FnZU9mX1Rlc3QuamF2YQppbmRleCAwMTQxMmQ1Li4wNDNkNDY3IDEwMDY0NAotLS0gYS9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYudGVzdC9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL21vZGVsL3V0aWwvTW9kZWxPYmplY3RzX3BhY2thZ2VPZl9UZXN0LmphdmEKKysrIGIvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnRlc3Qvc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi9tb2RlbC91dGlsL01vZGVsT2JqZWN0c19wYWNrYWdlT2ZfVGVzdC5qYXZhCkBAIC00NCw3ICs0NCw3IEBACiAgIEBUZXN0IHB1YmxpYyB2b2lkIHNob3VsZF9yZXR1cm5fcGFja2FnZV9pZl9wcm90b19oYXNfb25lKCkgewogICAgIE1lc3NhZ2VGaWVsZCBmaWVsZCA9IHh0ZXh0LmZpbmQoImlkIiwgTWVzc2FnZUZpZWxkLmNsYXNzKTsKICAgICBQYWNrYWdlIGFQYWNrYWdlID0gbW9kZWxPYmplY3RzLnBhY2thZ2VPZihmaWVsZCk7Ci0gICAgYXNzZXJ0VGhhdChhUGFja2FnZS5nZXROYW1lKCksIGVxdWFsVG8oInBlcnNvbi50ZXN0IikpOworICAgIGFzc2VydFRoYXQoYVBhY2thZ2UuZ2V0SW1wb3J0ZWROYW1lc3BhY2UoKSwgZXF1YWxUbygicGVyc29uLnRlc3QiKSk7CiAgIH0KIAogICAvLyBzeW50YXggPSAicHJvdG8yIjsKZGlmZiAtLWdpdCBhL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi50ZXN0L3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvbW9kZWwvdXRpbC9QYWNrYWdlc19hcmVSZWxhdGVkX1Rlc3QuamF2YSBiL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi50ZXN0L3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvbW9kZWwvdXRpbC9QYWNrYWdlc19hcmVSZWxhdGVkX1Rlc3QuamF2YQppbmRleCAyZWJmYTEyLi5jOWFlZWM0IDEwMDY0NAotLS0gYS9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYudGVzdC9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL21vZGVsL3V0aWwvUGFja2FnZXNfYXJlUmVsYXRlZF9UZXN0LmphdmEKKysrIGIvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnRlc3Qvc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi9tb2RlbC91dGlsL1BhY2thZ2VzX2FyZVJlbGF0ZWRfVGVzdC5qYXZhCkBAIC00OSwzNiArNDksMzYgQEAKICAgICAgICAgIm1heSIKICAgICB9OwogICAgIHAxID0gbW9jayhQYWNrYWdlLmNsYXNzKTsKLSAgICB3aGVuKHAxLmdldE5hbWUoKSkudGhlblJldHVybihiYXNlTmFtZSk7CisgICAgd2hlbihwMS5nZXRJbXBvcnRlZE5hbWVzcGFjZSgpKS50aGVuUmV0dXJuKGJhc2VOYW1lKTsKICAgICBwMiA9IG1vY2soUGFja2FnZS5jbGFzcyk7CiAgIH0KIAogICBAVGVzdCBwdWJsaWMgdm9pZCBzaG91bGRfcmV0dXJuX3RydWVfaWZfcGFja2FnZXNfYXJlX2VxdWFsKCkgewotICAgIHdoZW4ocDIuZ2V0TmFtZSgpKS50aGVuUmV0dXJuKGJhc2VOYW1lKTsKKyAgICB3aGVuKHAyLmdldEltcG9ydGVkTmFtZXNwYWNlKCkpLnRoZW5SZXR1cm4oYmFzZU5hbWUpOwogICAgIGFzc2VydFRydWUocGFja2FnZXMuYXJlUmVsYXRlZChwMSwgcDIpKTsKICAgfQogCiAgIEBUZXN0IHB1YmxpYyB2b2lkIHNob3VsZF9yZXR1cm5fdHJ1ZV9zZWNvbmRfaXNfc3ViUGFja2FnZV9vZl9maXJzdCgpIHsKICAgICBmb3IgKFN0cmluZyBuYW1lIDogc3VicGFja2FnZU5hbWVzKSB7Ci0gICAgICB3aGVuKHAyLmdldE5hbWUoKSkudGhlblJldHVybihuYW1lKTsKKyAgICAgIHdoZW4ocDIuZ2V0SW1wb3J0ZWROYW1lc3BhY2UoKSkudGhlblJldHVybihuYW1lKTsKICAgICAgIGFzc2VydFRydWUocGFja2FnZXMuYXJlUmVsYXRlZChwMSwgcDIpKTsKICAgICB9CiAgIH0KIAogICBAVGVzdCBwdWJsaWMgdm9pZCBzaG91bGRfcmV0dXJuX3RydWVfZmlyc3RfaXNfc3ViUGFja2FnZV9vZl9zZWNvbmQoKSB7CiAgICAgZm9yIChTdHJpbmcgbmFtZSA6IHN1YnBhY2thZ2VOYW1lcykgewotICAgICAgd2hlbihwMi5nZXROYW1lKCkpLnRoZW5SZXR1cm4obmFtZSk7CisgICAgICB3aGVuKHAyLmdldEltcG9ydGVkTmFtZXNwYWNlKCkpLnRoZW5SZXR1cm4obmFtZSk7CiAgICAgICBhc3NlcnRUcnVlKHBhY2thZ2VzLmFyZVJlbGF0ZWQocDIsIHAxKSk7CiAgICAgfQogICB9CiAKICAgQFRlc3QgcHVibGljIHZvaWQgc2hvdWxkX3JldHVybl9mYWxzZV9pZl9zZWNvbmRfc3RhcnRzX3dpdGhfZmV3X3NlZ21lbnRzX29mX2ZpcnN0X2J1dF9pc19ub3Rfc3VicGFja2FnZSgpIHsKLSAgICB3aGVuKHAyLmdldE5hbWUoKSkudGhlblJldHVybigibWF5LnRoZS5yaW5nIik7CisgICAgd2hlbihwMi5nZXRJbXBvcnRlZE5hbWVzcGFjZSgpKS50aGVuUmV0dXJuKCJtYXkudGhlLnJpbmciKTsKICAgICBhc3NlcnRGYWxzZShwYWNrYWdlcy5hcmVSZWxhdGVkKHAxLCBwMikpOwogICB9CiAKICAgQFRlc3QgcHVibGljIHZvaWQgc2hvdWxkX3JldHVybl9mYWxzZV9pZl9uYW1lc19hcmVfY29tcGxldGVseV9kaWZmZXJlbnQoKSB7Ci0gICAgd2hlbihwMi5nZXROYW1lKCkpLnRoZW5SZXR1cm4oInBlYWNlLmRvZyIpOworICAgIHdoZW4ocDIuZ2V0SW1wb3J0ZWROYW1lc3BhY2UoKSkudGhlblJldHVybigicGVhY2UuZG9nIik7CiAgICAgYXNzZXJ0RmFsc2UocGFja2FnZXMuYXJlUmVsYXRlZChwMSwgcDIpKTsKICAgfQogfQpkaWZmIC0tZ2l0IGEvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnRlc3Qvc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi92YWxpZGF0aW9uL0ltcG9ydFZhbGlkYXRvcl9jaGVja1Vua25vd25TeW50YXhJbXBvcnRzX3dpdGhOb25Qcm90bzJJbXBvcnRzX1Rlc3RzLmphdmEgYi9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYudGVzdC9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL3ZhbGlkYXRpb24vSW1wb3J0VmFsaWRhdG9yX2NoZWNrVW5rbm93blN5bnRheEltcG9ydHNfd2l0aE5vblByb3RvMkltcG9ydHNfVGVzdHMuamF2YQppbmRleCBjOGI5MWJjLi40N2U0ZTZjIDEwMDY0NAotLS0gYS9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYudGVzdC9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL3ZhbGlkYXRpb24vSW1wb3J0VmFsaWRhdG9yX2NoZWNrVW5rbm93blN5bnRheEltcG9ydHNfd2l0aE5vblByb3RvMkltcG9ydHNfVGVzdHMuamF2YQorKysgYi9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYudGVzdC9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL3ZhbGlkYXRpb24vSW1wb3J0VmFsaWRhdG9yX2NoZWNrVW5rbm93blN5bnRheEltcG9ydHNfd2l0aE5vblByb3RvMkltcG9ydHNfVGVzdHMuamF2YQpAQCAtMTAsNyArMTAsNyBAQAogCiBpbXBvcnQgc3RhdGljIGNvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5qdW5pdC5jb3JlLkludGVncmF0aW9uVGVzdE1vZHVsZS5pbnRlZ3JhdGlvblRlc3RNb2R1bGU7CiBpbXBvcnQgc3RhdGljIGNvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5qdW5pdC5jb3JlLlh0ZXh0UnVsZS5vdmVycmlkZVJ1bnRpbWVNb2R1bGVXaXRoOwotaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYucHJvdG9idWYuUHJvdG9idWZQYWNrYWdlLkxpdGVyYWxzLklNUE9SVF9fUEFUSDsKK2ltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnByb3RvYnVmLlByb3RvYnVmUGFja2FnZS5MaXRlcmFscy5QQUNLQUdFX19JTVBPUlRFRF9OQU1FU1BBQ0U7CiBpbXBvcnQgc3RhdGljIGNvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi52YWxpZGF0aW9uLk1lc3NhZ2VzLmltcG9ydGluZ1Vuc3VwcG9ydGVkU3ludGF4OwogaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS54dGV4dC52YWxpZGF0aW9uLlZhbGlkYXRpb25NZXNzYWdlQWNjZXB0b3IuSU5TSUdOSUZJQ0FOVF9JTkRFWDsKIGltcG9ydCBzdGF0aWMgb3JnLm1vY2tpdG8uTW9ja2l0by5tb2NrOwpAQCAtMTA0LDcgKzEwNCw3IEBACiAgIHByaXZhdGUgdm9pZCB2ZXJpZnlUaGF0SW1wb3J0aW5nVW5rbm93blN5bnRheEZpbGVDcmVhdGVkV2FybmluZyhJbXBvcnQgYW5JbXBvcnQpIHsKICAgICB2ZXJpZnkobWVzc2FnZUFjY2VwdG9yKS5hY2NlcHRXYXJuaW5nKGltcG9ydGluZ1Vuc3VwcG9ydGVkU3ludGF4LAogICAgICAgICBhbkltcG9ydCwKLSAgICAgICAgSU1QT1JUX19QQVRILAorICAgICAgICBQQUNLQUdFX19JTVBPUlRFRF9OQU1FU1BBQ0UsCiAgICAgICAgIElOU0lHTklGSUNBTlRfSU5ERVgsCiAgICAgICAgIG51bGwsCiAgICAgICAgIG5ldyBTdHJpbmdbMF0pOwpkaWZmIC0tZ2l0IGEvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnRlc3Qvc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi92YWxpZGF0aW9uL1Byb3RvYnVmSmF2YVZhbGlkYXRvcl9jaGVja09ubHlPbmVQYWNrYWdlRGVmaW5pdGlvbl9UZXN0LmphdmEgYi9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYudGVzdC9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL3ZhbGlkYXRpb24vUHJvdG9idWZKYXZhVmFsaWRhdG9yX2NoZWNrT25seU9uZVBhY2thZ2VEZWZpbml0aW9uX1Rlc3QuamF2YQppbmRleCBkZjg4MGY0Li41YmY1NDU3IDEwMDY0NAotLS0gYS9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYudGVzdC9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL3ZhbGlkYXRpb24vUHJvdG9idWZKYXZhVmFsaWRhdG9yX2NoZWNrT25seU9uZVBhY2thZ2VEZWZpbml0aW9uX1Rlc3QuamF2YQorKysgYi9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYudGVzdC9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL3ZhbGlkYXRpb24vUHJvdG9idWZKYXZhVmFsaWRhdG9yX2NoZWNrT25seU9uZVBhY2thZ2VEZWZpbml0aW9uX1Rlc3QuamF2YQpAQCAtMTUsNyArMTUsNyBAQAogCiBpbXBvcnQgc3RhdGljIGNvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5qdW5pdC5jb3JlLlVuaXRUZXN0TW9kdWxlLnVuaXRUZXN0TW9kdWxlOwogaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYuanVuaXQuY29yZS5YdGV4dFJ1bGUub3ZlcnJpZGVSdW50aW1lTW9kdWxlV2l0aDsKLWltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnByb3RvYnVmLlByb3RvYnVmUGFja2FnZS5MaXRlcmFscy5QQUNLQUdFX19OQU1FOworaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYucHJvdG9idWYuUHJvdG9idWZQYWNrYWdlLkxpdGVyYWxzLlBBQ0tBR0VfX0lNUE9SVEVEX05BTUVTUEFDRTsKIGltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnZhbGlkYXRpb24uTWVzc2FnZXMubXVsdGlwbGVQYWNrYWdlczsKIGltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnZhbGlkYXRpb24uUHJvdG9idWZKYXZhVmFsaWRhdG9yLk1PUkVfVEhBTl9PTkVfUEFDS0FHRV9FUlJPUjsKIApAQCAtNTEsNyArNTEsNyBAQAogICBAVGVzdCBwdWJsaWMgdm9pZCBzaG91bGRfY3JlYXRlX2Vycm9yX2lmX3RoZXJlX2FyZV9tb3JlX3RoYW5fb25lX3BhY2thZ2VfZGVmaW5pdGlvbnMoKSB7CiAgICAgUGFja2FnZSBwID0geHRleHQuZmluZCgiY29tLmdvb2dsZS5lY2xpcHNlIiwgUGFja2FnZS5jbGFzcyk7CiAgICAgdmFsaWRhdG9yLmNoZWNrT25seU9uZVBhY2thZ2VEZWZpbml0aW9uKHApOwotICAgIHZlcmlmeShtZXNzYWdlQWNjZXB0b3IpLmFjY2VwdEVycm9yKG11bHRpcGxlUGFja2FnZXMsIHAsIFBBQ0tBR0VfX05BTUUsIElOU0lHTklGSUNBTlRfSU5ERVgsIE1PUkVfVEhBTl9PTkVfUEFDS0FHRV9FUlJPUik7CisgICAgdmVyaWZ5KG1lc3NhZ2VBY2NlcHRvcikuYWNjZXB0RXJyb3IobXVsdGlwbGVQYWNrYWdlcywgcCwgUEFDS0FHRV9fSU1QT1JURURfTkFNRVNQQUNFLCBJTlNJR05JRklDQU5UX0lOREVYLCBNT1JFX1RIQU5fT05FX1BBQ0tBR0VfRVJST1IpOwogICB9CiAKICAgLy8gc3ludGF4ID0gInByb3RvMiI7CmRpZmYgLS1naXQgYS9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYudWkvc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi91aS9Qcm90b2J1ZlVpTW9kdWxlLmphdmEgYi9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYudWkvc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi91aS9Qcm90b2J1ZlVpTW9kdWxlLmphdmEKaW5kZXggMGI5MDE3MS4uYTQwZDQzYSAxMDA2NDQKLS0tIGEvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnVpL3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvdWkvUHJvdG9idWZVaU1vZHVsZS5qYXZhCisrKyBiL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi51aS9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL3VpL1Byb3RvYnVmVWlNb2R1bGUuamF2YQpAQCAtNDMsNiArNDMsNyBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luOwogaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLklDb250ZW50T3V0bGluZVBhZ2U7CiBpbXBvcnQgb3JnLmVjbGlwc2UueHRleHQuZG9jdW1lbnRhdGlvbi5JRU9iamVjdERvY3VtZW50YXRpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS54dGV4dC5pZGUuZWRpdG9yLnN5bnRheGNvbG9yaW5nLklTZW1hbnRpY0hpZ2hsaWdodGluZ0NhbGN1bGF0b3I7CiBpbXBvcnQgb3JnLmVjbGlwc2UueHRleHQucGFyc2VyLklQYXJzZXI7CiBpbXBvcnQgb3JnLmVjbGlwc2UueHRleHQucmVzb3VyY2UuSVJlc291cmNlU2VydmljZVByb3ZpZGVyOwogaW1wb3J0IG9yZy5lY2xpcHNlLnh0ZXh0LnVpLkxhbmd1YWdlU3BlY2lmaWM7CkBAIC01Myw3ICs1NCw2IEBACiBpbXBvcnQgb3JnLmVjbGlwc2UueHRleHQudWkuZWRpdG9yLnByZWZlcmVuY2VzLklQcmVmZXJlbmNlU3RvcmVJbml0aWFsaXplcjsKIGltcG9ydCBvcmcuZWNsaXBzZS54dGV4dC51aS5lZGl0b3Iuc3ludGF4Y29sb3JpbmcuQWJzdHJhY3RBbnRsclRva2VuVG9BdHRyaWJ1dGVJZE1hcHBlcjsKIGltcG9ydCBvcmcuZWNsaXBzZS54dGV4dC51aS5lZGl0b3Iuc3ludGF4Y29sb3JpbmcuSUhpZ2hsaWdodGluZ0NvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHRleHQudWkuZWRpdG9yLnN5bnRheGNvbG9yaW5nLklTZW1hbnRpY0hpZ2hsaWdodGluZ0NhbGN1bGF0b3I7CiBpbXBvcnQgb3JnLmVjbGlwc2UueHRleHQudWkucmVzb3VyY2UuSVJlc291cmNlU2V0UHJvdmlkZXI7CiBpbXBvcnQgb3JnLmVjbGlwc2UueHRleHQudWkucmVzb3VyY2UuU2ltcGxlUmVzb3VyY2VTZXRQcm92aWRlcjsKIApkaWZmIC0tZ2l0IGEvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnVpL3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvdWkvZWRpdG9yL2h5cGVybGlua2luZy9Qcm90b2J1Zkh5cGVybGlua0RldGVjdG9yLmphdmEgYi9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYudWkvc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi91aS9lZGl0b3IvaHlwZXJsaW5raW5nL1Byb3RvYnVmSHlwZXJsaW5rRGV0ZWN0b3IuamF2YQppbmRleCBjMjQ4MmVlLi5lNmI0YWE5IDEwMDY0NAotLS0gYS9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYudWkvc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi91aS9lZGl0b3IvaHlwZXJsaW5raW5nL1Byb3RvYnVmSHlwZXJsaW5rRGV0ZWN0b3IuamF2YQorKysgYi9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYudWkvc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi91aS9lZGl0b3IvaHlwZXJsaW5raW5nL1Byb3RvYnVmSHlwZXJsaW5rRGV0ZWN0b3IuamF2YQpAQCAtOCw3ICs4LDcgQEAKICAqLwogcGFja2FnZSBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYudWkuZWRpdG9yLmh5cGVybGlua2luZzsKIAotaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYucHJvdG9idWYuUHJvdG9idWZQYWNrYWdlLkxpdGVyYWxzLklNUE9SVF9fUEFUSDsKK2ltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnByb3RvYnVmLlByb3RvYnVmUGFja2FnZS5MaXRlcmFscy5QQUNLQUdFX19JTVBPUlRFRF9OQU1FU1BBQ0U7CiAKIGltcG9ydCBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYubW9kZWwudXRpbC5JTm9kZXM7CiBpbXBvcnQgY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLm1vZGVsLnV0aWwuSW1wb3J0czsKQEAgLTcxLDcgKzcxLDcgQEAKICAgICAgICAgaWYgKCFpbXBvcnRzLmlzUmVzb2x2ZWQoYW5JbXBvcnQpKSB7CiAgICAgICAgICAgcmV0dXJuIE5PX0hZUEVSTElOS1M7CiAgICAgICAgIH0KLSAgICAgICAgSU5vZGUgaW1wb3J0VXJpTm9kZSA9IG5vZGVzLmZpcnN0Tm9kZUZvckZlYXR1cmUoYW5JbXBvcnQsIElNUE9SVF9fUEFUSCk7CisgICAgICAgIElOb2RlIGltcG9ydFVyaU5vZGUgPSBub2Rlcy5maXJzdE5vZGVGb3JGZWF0dXJlKGFuSW1wb3J0LCBQQUNLQUdFX19JTVBPUlRFRF9OQU1FU1BBQ0UpOwogICAgICAgICBpZiAoaW1wb3J0VXJpTm9kZS5nZXRMZW5ndGgoKSA9PSAwKSB7CiAgICAgICAgICAgcmV0dXJuIE5PX0hZUEVSTElOS1M7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi51aS9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL3VpL2VkaXRvci9zeW50YXhjb2xvcmluZy9Qcm90b2J1ZlNlbWFudGljSGlnaGxpZ2h0aW5nQ2FsY3VsYXRvci5qYXZhIGIvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnVpL3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvdWkvZWRpdG9yL3N5bnRheGNvbG9yaW5nL1Byb3RvYnVmU2VtYW50aWNIaWdobGlnaHRpbmdDYWxjdWxhdG9yLmphdmEKaW5kZXggOTVhYjFiYi4uYjAwNDZhYSAxMDA2NDQKLS0tIGEvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnVpL3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvdWkvZWRpdG9yL3N5bnRheGNvbG9yaW5nL1Byb3RvYnVmU2VtYW50aWNIaWdobGlnaHRpbmdDYWxjdWxhdG9yLmphdmEKKysrIGIvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnVpL3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvdWkvZWRpdG9yL3N5bnRheGNvbG9yaW5nL1Byb3RvYnVmU2VtYW50aWNIaWdobGlnaHRpbmdDYWxjdWxhdG9yLmphdmEKQEAgLTM1LDEwICszNSwxMSBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKIGltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKIGltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLnh0ZXh0LmlkZS5lZGl0b3Iuc3ludGF4Y29sb3JpbmcuSUhpZ2hsaWdodGVkUG9zaXRpb25BY2NlcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS54dGV4dC5pZGUuZWRpdG9yLnN5bnRheGNvbG9yaW5nLklTZW1hbnRpY0hpZ2hsaWdodGluZ0NhbGN1bGF0b3I7CiBpbXBvcnQgb3JnLmVjbGlwc2UueHRleHQubm9kZW1vZGVsLklOb2RlOwogaW1wb3J0IG9yZy5lY2xpcHNlLnh0ZXh0LnJlc291cmNlLlh0ZXh0UmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHRleHQudWkuZWRpdG9yLnN5bnRheGNvbG9yaW5nLklIaWdobGlnaHRlZFBvc2l0aW9uQWNjZXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHRleHQudWkuZWRpdG9yLnN5bnRheGNvbG9yaW5nLklTZW1hbnRpY0hpZ2hsaWdodGluZ0NhbGN1bGF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UueHRleHQudXRpbC5DYW5jZWxJbmRpY2F0b3I7CiAKIGltcG9ydCBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYubW9kZWwudXRpbC5JTm9kZXM7CiBpbXBvcnQgY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLm1vZGVsLnV0aWwuSW5kZXhlZEVsZW1lbnRzOwpAQCAtNzcsNyArNzgsMTEgQEAKICAgQEluamVjdCBwcml2YXRlIElOb2RlcyBub2RlczsKICAgQEluamVjdCBwcml2YXRlIE9wdGlvbnMgb3B0aW9uczsKIAotICBAT3ZlcnJpZGUgcHVibGljIHZvaWQgcHJvdmlkZUhpZ2hsaWdodGluZ0ZvcihYdGV4dFJlc291cmNlIHJlc291cmNlLCBJSGlnaGxpZ2h0ZWRQb3NpdGlvbkFjY2VwdG9yIGFjY2VwdG9yKSB7CisgIEBPdmVycmlkZQorICBwdWJsaWMgdm9pZCBwcm92aWRlSGlnaGxpZ2h0aW5nRm9yKAorICAgICAgWHRleHRSZXNvdXJjZSByZXNvdXJjZSwKKyAgICAgIElIaWdobGlnaHRlZFBvc2l0aW9uQWNjZXB0b3IgYWNjZXB0b3IsCisgICAgICBDYW5jZWxJbmRpY2F0b3IgY2FuY2VsSW5kaWNhdG9yKSB7CiAgICAgaWYgKHJlc291cmNlID09IG51bGwpIHsKICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xNTcsNyArMTYyLDggQEAKIAogICBwcml2YXRlIHZvaWQgaGlnaGxpZ2h0KEluZGV4ZWRFbGVtZW50IGVsZW1lbnQsIElIaWdobGlnaHRlZFBvc2l0aW9uQWNjZXB0b3IgYWNjZXB0b3IpIHsKICAgICBoaWdobGlnaHROYW1lKGVsZW1lbnQsIGFjY2VwdG9yLCBERUZBVUxUX0lEKTsKLSAgICBoaWdobGlnaHRGaXJzdEZlYXR1cmUoZWxlbWVudCwgaW5kZXhlZEVsZW1lbnRzLmluZGV4RmVhdHVyZU9mKGVsZW1lbnQpLCBhY2NlcHRvciwgTUVTU0FHRV9GSUVMRF9JTkRFWF9JRCk7CisgICAgaGlnaGxpZ2h0Rmlyc3RGZWF0dXJlKAorICAgICAgICBlbGVtZW50LCBpbmRleGVkRWxlbWVudHMuaW5kZXhGZWF0dXJlT2YoZWxlbWVudCksIGFjY2VwdG9yLCBNRVNTQUdFX0ZJRUxEX0lOREVYX0lEKTsKICAgICBoaWdobGlnaHRPcHRpb25zKGVsZW1lbnQsIGFjY2VwdG9yKTsKICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEdyb3VwKSB7CiAgICAgICBoaWdobGlnaHQoKEdyb3VwKSBlbGVtZW50LCBhY2NlcHRvcik7CkBAIC0yNjksMTEgKzI3NSwxOCBAQAogICB9CiAKICAgcHJpdmF0ZSB2b2lkIGhpZ2hsaWdodE5hbWUoRU9iamVjdCBvLCBJSGlnaGxpZ2h0ZWRQb3NpdGlvbkFjY2VwdG9yIGFjY2VwdG9yLCBTdHJpbmcgaGlnaGxpZ2h0SWQpIHsKLSAgICBoaWdobGlnaHRGaXJzdEZlYXR1cmUobywgby5lQ2xhc3MoKS5nZXRFU3RydWN0dXJhbEZlYXR1cmUoIm5hbWUiKSwgYWNjZXB0b3IsIGhpZ2hsaWdodElkKTsKKyAgICBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSA9IG8uZUNsYXNzKCkuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCJuYW1lIik7CisgICAgaWYgKGZlYXR1cmUgPT0gbnVsbCkgeworICAgICAgZmVhdHVyZSA9IG8uZUNsYXNzKCkuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCJpbXBvcnRlZE5hbWVzcGFjZSIpOworICAgIH0KKyAgICBoaWdobGlnaHRGaXJzdEZlYXR1cmUobywgZmVhdHVyZSwgYWNjZXB0b3IsIGhpZ2hsaWdodElkKTsKICAgfQogCi0gIHByaXZhdGUgdm9pZCBoaWdobGlnaHRGaXJzdEZlYXR1cmUoRU9iamVjdCBzZW1hbnRpYywgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUsCi0gICAgICBJSGlnaGxpZ2h0ZWRQb3NpdGlvbkFjY2VwdG9yIGFjY2VwdG9yLCBTdHJpbmcgaGlnaGxpZ2h0SWQpIHsKKyAgcHJpdmF0ZSB2b2lkIGhpZ2hsaWdodEZpcnN0RmVhdHVyZSgKKyAgICAgIEVPYmplY3Qgc2VtYW50aWMsCisgICAgICBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSwKKyAgICAgIElIaWdobGlnaHRlZFBvc2l0aW9uQWNjZXB0b3IgYWNjZXB0b3IsCisgICAgICBTdHJpbmcgaGlnaGxpZ2h0SWQpIHsKICAgICBJTm9kZSBub2RlID0gbm9kZXMuZmlyc3ROb2RlRm9yRmVhdHVyZShzZW1hbnRpYywgZmVhdHVyZSk7CiAgICAgaWYgKG5vZGUgPT0gbnVsbCkgewogICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmL01FVEEtSU5GL01BTklGRVNULk1GIGIvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmL01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IDU4OWRhYzEuLmU3NjQzMWQgMTAwNjQ0Ci0tLSBhL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTE4LDggKzE4LDcgQEAKICBvcmcuZWNsaXBzZS54dGV4dCwNCiAgb3JnLmVjbGlwc2UueHRleHQuZ2VuZXJhdG9yO3Jlc29sdXRpb246PW9wdGlvbmFsLA0KICBvcmcuZWNsaXBzZS54dGV4dC51aSwNCi0gb3JnLmVjbGlwc2UueHRleHQudXRpbCwNCi0gY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLmdlbmVyYXRvcjtidW5kbGUtdmVyc2lvbj0iMS4wLjAiDQorIG9yZy5lY2xpcHNlLnh0ZXh0LnV0aWwNCiBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTEuOA0KIEV4cG9ydC1QYWNrYWdlOiBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYsDQogIGNvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5jb252ZXJzaW9uLA0KZGlmZiAtLWdpdCBhL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL1Byb3RvYnVmUnVudGltZU1vZHVsZS5qYXZhIGIvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmL3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvUHJvdG9idWZSdW50aW1lTW9kdWxlLmphdmEKaW5kZXggNTQxYjFhMS4uMzc4ZmU4NiAxMDA2NDQKLS0tIGEvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmL3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvUHJvdG9idWZSdW50aW1lTW9kdWxlLmphdmEKKysrIGIvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmL3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvUHJvdG9idWZSdW50aW1lTW9kdWxlLmphdmEKQEAgLTE1LDcgKzE1LDYgQEAKIGltcG9ydCBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYucmVzb3VyY2UuRmFzdFh0ZXh0UmVzb3VyY2VTZXQ7CiBpbXBvcnQgY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnJlc291cmNlLkdsb2JhbFJlc291cmNlU2VydmljZVByb3ZpZGVyOwogaW1wb3J0IGNvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5zY29waW5nLkV4dGVuc2lvblJlZ2lzdHJ5UHJvdmlkZXI7Ci1pbXBvcnQgY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnNjb3BpbmcuUHJvdG9idWZHbG9iYWxTY29wZVByb3ZpZGVyOwogaW1wb3J0IGNvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi52YWxpZGF0aW9uLlByb3RvYnVmUmVzb3VyY2VWYWxpZGF0b3I7CiBpbXBvcnQgY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnZhbGlkYXRpb24uUHJvdG9idWZTeW50YXhFcnJvck1lc3NhZ2VQcm92aWRlcjsKIGltcG9ydCBjb20uZ29vZ2xlLmluamVjdC5CaW5kZXI7CkBAIC0yOCwxMSArMjcsMTEgQEAKIGltcG9ydCBvcmcuZWNsaXBzZS54dGV4dC5yZXNvdXJjZS5JR2xvYmFsU2VydmljZVByb3ZpZGVyOwogaW1wb3J0IG9yZy5lY2xpcHNlLnh0ZXh0LnJlc291cmNlLlh0ZXh0UmVzb3VyY2U7CiBpbXBvcnQgb3JnLmVjbGlwc2UueHRleHQucmVzb3VyY2UuWHRleHRSZXNvdXJjZVNldDsKLWltcG9ydCBvcmcuZWNsaXBzZS54dGV4dC5zY29waW5nLklHbG9iYWxTY29wZVByb3ZpZGVyOwogaW1wb3J0IG9yZy5lY2xpcHNlLnh0ZXh0LnZhbGlkYXRpb24uSVJlc291cmNlVmFsaWRhdG9yOwogCiAvKioKLSAqIFVzZSB0aGlzIGNsYXNzIHRvIHJlZ2lzdGVyIGNvbXBvbmVudHMgdG8gYmUgdXNlZCBhdCBydW50aW1lIC8gd2l0aG91dCB0aGUgRXF1aW5veCBleHRlbnNpb24gcmVnaXN0cnkuCisgKiBVc2UgdGhpcyBjbGFzcyB0byByZWdpc3RlciBjb21wb25lbnRzIHRvIGJlIHVzZWQgYXQgcnVudGltZSAvIHdpdGhvdXQgdGhlIEVxdWlub3ggZXh0ZW5zaW9uCisgKiByZWdpc3RyeS4KICAqLwogcHVibGljIGNsYXNzIFByb3RvYnVmUnVudGltZU1vZHVsZSBleHRlbmRzIEFic3RyYWN0UHJvdG9idWZSdW50aW1lTW9kdWxlIHsKICAgcHVibGljIENsYXNzPD8gZXh0ZW5kcyBJR2xvYmFsU2VydmljZVByb3ZpZGVyPiBiaW5kSUdsb2JhbFNlcnZpY2VQcm92aWRlcigpIHsKQEAgLTQzLDcgKzQyLDggQEAKICAgICByZXR1cm4gUHJvdG9idWZRdWFsaWZpZWROYW1lQ29udmVydGVyLmNsYXNzOwogICB9CiAKLSAgQE92ZXJyaWRlIHB1YmxpYyBDbGFzczw/IGV4dGVuZHMgSVF1YWxpZmllZE5hbWVQcm92aWRlcj4gYmluZElRdWFsaWZpZWROYW1lUHJvdmlkZXIoKSB7CisgIEBPdmVycmlkZQorICBwdWJsaWMgQ2xhc3M8PyBleHRlbmRzIElRdWFsaWZpZWROYW1lUHJvdmlkZXI+IGJpbmRJUXVhbGlmaWVkTmFtZVByb3ZpZGVyKCkgewogICAgIHJldHVybiBQcm90b2J1ZlF1YWxpZmllZE5hbWVQcm92aWRlci5jbGFzczsKICAgfQogCkBAIC01NSwyMiArNTUsMjEgQEAKICAgICByZXR1cm4gUHJvdG9idWZTeW50YXhFcnJvck1lc3NhZ2VQcm92aWRlci5jbGFzczsKICAgfQogCi0gIEBPdmVycmlkZSBwdWJsaWMgQ2xhc3M8PyBleHRlbmRzIElWYWx1ZUNvbnZlcnRlclNlcnZpY2U+IGJpbmRJVmFsdWVDb252ZXJ0ZXJTZXJ2aWNlKCkgeworICBAT3ZlcnJpZGUKKyAgcHVibGljIENsYXNzPD8gZXh0ZW5kcyBJVmFsdWVDb252ZXJ0ZXJTZXJ2aWNlPiBiaW5kSVZhbHVlQ29udmVydGVyU2VydmljZSgpIHsKICAgICByZXR1cm4gUHJvdG9idWZUZXJtaW5hbENvbnZlcnRlcnMuY2xhc3M7CiAgIH0KIAotICBAT3ZlcnJpZGUgcHVibGljIENsYXNzPD8gZXh0ZW5kcyBYdGV4dFJlc291cmNlPiBiaW5kWHRleHRSZXNvdXJjZSgpIHsKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBDbGFzczw/IGV4dGVuZHMgWHRleHRSZXNvdXJjZT4gYmluZFh0ZXh0UmVzb3VyY2UoKSB7CiAgICAgcmV0dXJuIFByb3RvYnVmUmVzb3VyY2UuY2xhc3M7CiAgIH0KIAotICBAT3ZlcnJpZGUgcHVibGljIENsYXNzPD8gZXh0ZW5kcyBYdGV4dFJlc291cmNlU2V0PiBiaW5kWHRleHRSZXNvdXJjZVNldCgpIHsKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBDbGFzczw/IGV4dGVuZHMgWHRleHRSZXNvdXJjZVNldD4gYmluZFh0ZXh0UmVzb3VyY2VTZXQoKSB7CiAgICAgcmV0dXJuIEZhc3RYdGV4dFJlc291cmNlU2V0LmNsYXNzOwogICB9CiAKLSAgQE92ZXJyaWRlIHB1YmxpYyBDbGFzczw/IGV4dGVuZHMgSUdsb2JhbFNjb3BlUHJvdmlkZXI+IGJpbmRJR2xvYmFsU2NvcGVQcm92aWRlcigpIHsKLSAgICByZXR1cm4gUHJvdG9idWZHbG9iYWxTY29wZVByb3ZpZGVyLmNsYXNzOwotICB9Ci0KICAgcHVibGljIHZvaWQgY29uZmlndXJlRXh0ZW5zaW9uUmVnaXN0cnkoQmluZGVyIGJpbmRlcikgewogICAgIGJpbmRlci5iaW5kKElFeHRlbnNpb25SZWdpc3RyeS5jbGFzcykudG9Qcm92aWRlcihFeHRlbnNpb25SZWdpc3RyeVByb3ZpZGVyLmNsYXNzKTsKICAgfQpkaWZmIC0tZ2l0IGEvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmL3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvbW9kZWwvdXRpbC9QYWNrYWdlcy5qYXZhIGIvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmL3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvbW9kZWwvdXRpbC9QYWNrYWdlcy5qYXZhCmluZGV4IDY2YTU3ZjYuLjMyNGI5YzMgMTAwNjQ0Ci0tLSBhL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL21vZGVsL3V0aWwvUGFja2FnZXMuamF2YQorKysgYi9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYvc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi9tb2RlbC91dGlsL1BhY2thZ2VzLmphdmEKQEAgLTEzMCw3ICsxMzAsNyBAQAogICB9CiAKICAgcHJpdmF0ZSBRdWFsaWZpZWROYW1lIG5hbWVPZihQYWNrYWdlIHApIHsKLSAgICBTdHJpbmcgbmFtZSA9IHAuZ2V0TmFtZSgpOworICAgIFN0cmluZyBuYW1lID0gcC5nZXRJbXBvcnRlZE5hbWVzcGFjZSgpOwogICAgIHJldHVybiAoaXNFbXB0eShuYW1lKSkgPyBudWxsIDogcXVhbGlmaWVkTmFtZUNvbnZlcnRlci50b1F1YWxpZmllZE5hbWUobmFtZSk7CiAgIH0KIH0KZGlmZiAtLWdpdCBhL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL25hbWluZy9OYW1lUmVzb2x2ZXIuamF2YSBiL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL25hbWluZy9OYW1lUmVzb2x2ZXIuamF2YQppbmRleCA2NWYxYTk0Li41YzdkMzRhIDEwMDY0NAotLS0gYS9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYvc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi9uYW1pbmcvTmFtZVJlc29sdmVyLmphdmEKKysrIGIvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmL3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvbmFtaW5nL05hbWVSZXNvbHZlci5qYXZhCkBAIC0xNCw2ICsxNCw3IEBACiAKIGltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKIGltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLnh0ZXh0LnV0aWwuU2ltcGxlQXR0cmlidXRlUmVzb2x2ZXI7CiAKIGltcG9ydCBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYucHJvdG9idWYuRGVmYXVsdFZhbHVlRmllbGRPcHRpb247CiBpbXBvcnQgY29tLmdvb2dsZS5pbmplY3QuU2luZ2xldG9uOwpAQCAtMjMsMTEgKzI0LDE0IEBACiAgKgogICogQGF1dGhvciBhbHJ1aXpAZ29vZ2xlLmNvbSAoQWxleCBSdWl6KQogICovCi1AU2luZ2xldG9uIHB1YmxpYyBjbGFzcyBOYW1lUmVzb2x2ZXIgeworQFNpbmdsZXRvbgorcHVibGljIGNsYXNzIE5hbWVSZXNvbHZlciB7CiAgIC8qKgogICAgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBnaXZlbiBlbGVtZW50LgorICAgKgogICAgKiBAcGFyYW0gbyB0aGUgZ2l2ZW4gZWxlbWVudC4KLSAgICogQHJldHVybiB0aGUgbmFtZSBvZiB0aGUgZ2l2ZW4gZWxlbWVudCwgb3Ige0Bjb2RlIG51bGx9IGlmIHRoZSBnaXZlbiBlbGVtZW50IGRvZXMgbm90IGhhdmUgc3VwcG9ydCBmb3IgbmFtaW5nLgorICAgKiBAcmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBnaXZlbiBlbGVtZW50LCBvciB7QGNvZGUgbnVsbH0gaWYgdGhlIGdpdmVuIGVsZW1lbnQgZG9lcyBub3QgaGF2ZQorICAgKiBzdXBwb3J0IGZvciBuYW1pbmcuCiAgICAqLwogICBwdWJsaWMgU3RyaW5nIG5hbWVPZihFT2JqZWN0IG8pIHsKICAgICBpZiAobyA9PSBudWxsKSB7CkBAIC0zNyw2ICs0MSw5IEBACiAgICAgICByZXR1cm4gREVGQVVMVC50b1N0cmluZygpOwogICAgIH0KICAgICBPYmplY3QgdmFsdWUgPSBuYW1lRmVhdHVyZU9mKG8pOworICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7CisgICAgICB2YWx1ZSA9IGltcG9ydGVkTmFtZXNwYWNlRmVhdHVyZU9mKG8pOworICAgIH0KICAgICByZXR1cm4gKFN0cmluZykgdmFsdWU7CiAgIH0KIApAQCAtNDQsNCArNTEsMTAgQEAKICAgICBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSA9IE5BTUVfUkVTT0xWRVIuZ2V0QXR0cmlidXRlKGUpOwogICAgIHJldHVybiAoZmVhdHVyZSAhPSBudWxsKSA/IGUuZUdldChmZWF0dXJlKSA6IG51bGw7CiAgIH0KKworICBwcml2YXRlIE9iamVjdCBpbXBvcnRlZE5hbWVzcGFjZUZlYXR1cmVPZihFT2JqZWN0IGUpIHsKKyAgICBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSA9CisgICAgICAgIFNpbXBsZUF0dHJpYnV0ZVJlc29sdmVyLm5ld1Jlc29sdmVyKFN0cmluZy5jbGFzcywgImltcG9ydGVkTmFtZXNwYWNlIikuZ2V0QXR0cmlidXRlKGUpOworICAgIHJldHVybiAoZmVhdHVyZSAhPSBudWxsKSA/IGUuZUdldChmZWF0dXJlKSA6IG51bGw7CisgIH0KIH0KZGlmZiAtLWdpdCBhL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL3Njb3BpbmcvUHJvdG9idWZHbG9iYWxTY29wZVByb3ZpZGVyLmphdmEgYi9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYvc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi9zY29waW5nL1Byb3RvYnVmR2xvYmFsU2NvcGVQcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjEwZWIwLi4wMDAwMDAwCi0tLSBhL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL3Njb3BpbmcvUHJvdG9idWZHbG9iYWxTY29wZVByb3ZpZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE0IEdvb2dsZSBJbmMuCi0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlCi0gKiBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKgotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqLwotcGFja2FnZSBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYuc2NvcGluZzsKLQotaW1wb3J0IGNvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5tb2RlbC51dGlsLlByb3RvYnVmczsKLWltcG9ydCBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYubW9kZWwudXRpbC5SZXNvdXJjZXM7Ci1pbXBvcnQgY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnByb3RvYnVmLkltcG9ydDsKLWltcG9ydCBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYucHJvdG9idWYuUHJvdG9idWY7Ci1pbXBvcnQgY29tLmdvb2dsZS5pbmplY3QuSW5qZWN0OwotaW1wb3J0IGNvbS5nb29nbGUuaW5qZWN0LlByb3ZpZGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHRleHQuRWNvcmVVdGlsMjsKLWltcG9ydCBvcmcuZWNsaXBzZS54dGV4dC5zY29waW5nLmltcGwuSW1wb3J0VXJpR2xvYmFsU2NvcGVQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54dGV4dC51dGlsLklBY2NlcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54dGV4dC51dGlsLklSZXNvdXJjZVNjb3BlQ2FjaGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpbmtlZEhhc2hTZXQ7Ci0KLS8qKgotICogQSBnbG9iYWwgc2NvcGUgcHJvdmlkZXIgdGhhdCByZWFkcyBlYWNoIHtAbGluayBJbXBvcnR9IGluIHRoZSBwcm90b2J1ZiBmaWxlLCByZXNvbHZlcyBpdCwgYW5kCi0gKiBjYWNoZXMgdGhlIHJlc3VsdC4KLSAqLwotcHVibGljIGNsYXNzIFByb3RvYnVmR2xvYmFsU2NvcGVQcm92aWRlciBleHRlbmRzIEltcG9ydFVyaUdsb2JhbFNjb3BlUHJvdmlkZXIgewotICBASW5qZWN0Ci0gIHByaXZhdGUgSVJlc291cmNlU2NvcGVDYWNoZSBjYWNoZTsKLQotICBASW5qZWN0Ci0gIHByaXZhdGUgUmVzb3VyY2VzIHJlc291cmNlczsKLQotICBASW5qZWN0Ci0gIHByaXZhdGUgUHJvdG9idWZzIHByb3RvYnVmczsKLQotICBASW5qZWN0Ci0gIHByaXZhdGUgSUltcG9ydFJlc29sdmVyIGltcG9ydFJlc29sdmVyOwotCi0gIEBPdmVycmlkZQotICBwcm90ZWN0ZWQgTGlua2VkSGFzaFNldDxVUkk+IGdldEltcG9ydGVkVXJpcyhmaW5hbCBSZXNvdXJjZSByZXNvdXJjZSkgewotICAgIHJldHVybiBjYWNoZS5nZXQoUHJvdG9idWZHbG9iYWxTY29wZVByb3ZpZGVyLmNsYXNzLmdldE5hbWUoKSwgcmVzb3VyY2UsCi0gICAgICAgIG5ldyBQcm92aWRlcjxMaW5rZWRIYXNoU2V0PFVSST4+KCkgewotICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgIHB1YmxpYyBMaW5rZWRIYXNoU2V0PFVSST4gZ2V0KCkgewotICAgICAgICAgICAgZmluYWwgTGlua2VkSGFzaFNldDxVUkk+IHVuaXF1ZUltcG9ydFVSSXMgPSBuZXcgTGlua2VkSGFzaFNldDw+KDUpOwotICAgICAgICAgICAgSUFjY2VwdG9yPFN0cmluZz4gY29sbGVjdG9yID0gY3JlYXRlVVJJQ29sbGVjdG9yKHJlc291cmNlLCB1bmlxdWVJbXBvcnRVUklzKTsKLSAgICAgICAgICAgIFByb3RvYnVmIHByb3RvYnVmID0gcmVzb3VyY2VzLnJvb3RPZihyZXNvdXJjZSk7Ci0gICAgICAgICAgICBpZiAocHJvdG9idWYgPT0gbnVsbCkgewotICAgICAgICAgICAgICByZXR1cm4gdW5pcXVlSW1wb3J0VVJJczsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvciAoSW1wb3J0IGFuSW1wb3J0IDogcHJvdG9idWZzLmltcG9ydHNJbihwcm90b2J1ZikpIHsKLSAgICAgICAgICAgICAgY29sbGVjdG9yLmFjY2VwdChpbXBvcnRSZXNvbHZlci5yZXNvbHZlKGFuSW1wb3J0KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBJdGVyYXRvcjxVUkk+IHVyaUl0ZXIgPSB1bmlxdWVJbXBvcnRVUklzLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICB3aGlsZSAodXJpSXRlci5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgICAgaWYgKCFFY29yZVV0aWwyLmlzVmFsaWRVcmkocmVzb3VyY2UsIHVyaUl0ZXIubmV4dCgpKSkgewotICAgICAgICAgICAgICAgIHVyaUl0ZXIucmVtb3ZlKCk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB1bmlxdWVJbXBvcnRVUklzOwotICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL3Njb3BpbmcvUHJvdG9idWZJbXBvcnRVcmlHbG9iYWxTY29wZVByb3ZpZGVyLmphdmEgYi9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYvc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi9zY29waW5nL1Byb3RvYnVmSW1wb3J0VXJpR2xvYmFsU2NvcGVQcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlODhlODkKLS0tIC9kZXYvbnVsbAorKysgYi9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYvc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi9zY29waW5nL1Byb3RvYnVmSW1wb3J0VXJpR2xvYmFsU2NvcGVQcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYgR29vZ2xlIEluYy4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlCisgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2gKKyAqIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICovCitwYWNrYWdlIGNvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5zY29waW5nOworCitpbXBvcnQgY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLm1vZGVsLnV0aWwuSW1wb3J0czsKK2ltcG9ydCBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYubW9kZWwudXRpbC5Qcm90b2J1ZnM7CitpbXBvcnQgY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLm1vZGVsLnV0aWwuUmVzb3VyY2VzOworaW1wb3J0IGNvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5wcm90b2J1Zi5JbXBvcnQ7CitpbXBvcnQgY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnByb3RvYnVmLlByb3RvYnVmOworaW1wb3J0IGNvbS5nb29nbGUuaW5qZWN0LkluamVjdDsKK2ltcG9ydCBjb20uZ29vZ2xlLmluamVjdC5Qcm92aWRlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnh0ZXh0LnNjb3BpbmcuaW1wbC5JbXBvcnRVcmlHbG9iYWxTY29wZVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnh0ZXh0LnV0aWwuSVJlc291cmNlU2NvcGVDYWNoZTsKKworaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoU2V0OworCisvKioKKyAqIEEgZ2xvYmFsIHNjb3BlIHByb3ZpZGVyIHRoYXQgcmVhZHMgZWFjaCB7QGxpbmsgSW1wb3J0fSBpbiB0aGUgcHJvdG9idWYgZmlsZSwgcmVzb2x2ZXMgaXQsIGFuZAorICogY2FjaGVzIHRoZSByZXN1bHQuCisgKi8KK3B1YmxpYyBjbGFzcyBQcm90b2J1ZkltcG9ydFVyaUdsb2JhbFNjb3BlUHJvdmlkZXIgZXh0ZW5kcyBJbXBvcnRVcmlHbG9iYWxTY29wZVByb3ZpZGVyIHsKKyAgQEluamVjdCBwcml2YXRlIFByb3RvYnVmcyBwcm90b2J1ZnM7CisgIEBJbmplY3QgcHJpdmF0ZSBSZXNvdXJjZXMgcmVzb3VyY2VzOworICBASW5qZWN0IHByaXZhdGUgSW1wb3J0cyBpbXBvcnRzOworICBASW5qZWN0IHByaXZhdGUgSVJlc291cmNlU2NvcGVDYWNoZSBjYWNoZTsKKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIExpbmtlZEhhc2hTZXQ8VVJJPiBnZXRJbXBvcnRlZFVyaXMoZmluYWwgUmVzb3VyY2UgcmVzb3VyY2UpIHsKKyAgICByZXR1cm4gY2FjaGUuZ2V0KAorICAgICAgICBQcm90b2J1ZkltcG9ydFVyaUdsb2JhbFNjb3BlUHJvdmlkZXIuY2xhc3MuZ2V0TmFtZSgpLAorICAgICAgICByZXNvdXJjZSwKKyAgICAgICAgbmV3IFByb3ZpZGVyPExpbmtlZEhhc2hTZXQ8VVJJPj4oKSB7CisgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgcHVibGljIExpbmtlZEhhc2hTZXQ8VVJJPiBnZXQoKSB7CisgICAgICAgICAgICBMaW5rZWRIYXNoU2V0PFVSST4gaW1wb3J0ZWRVcmlzID0gbmV3IExpbmtlZEhhc2hTZXQ8PigpOworICAgICAgICAgICAgUHJvdG9idWYgcHJvdG9idWYgPSByZXNvdXJjZXMucm9vdE9mKHJlc291cmNlKTsKKyAgICAgICAgICAgIGlmIChwcm90b2J1ZiA9PSBudWxsKSB7CisgICAgICAgICAgICAgIHJldHVybiBpbXBvcnRlZFVyaXM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKEltcG9ydCBzaW5nbGVJbXBvcnQgOiBwcm90b2J1ZnMuaW1wb3J0c0luKHByb3RvYnVmKSkgeworICAgICAgICAgICAgICByZXNvbHZlSW1wb3J0KGltcG9ydGVkVXJpcywgc2luZ2xlSW1wb3J0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBpbXBvcnRlZFVyaXM7CisgICAgICAgICAgfQorCisgICAgICAgICAgcHJpdmF0ZSB2b2lkIGFkZFB1YmxpY0ltcG9ydGVkVXJpcyhQcm90b2J1ZiBwcm90b2J1ZiwgTGlua2VkSGFzaFNldDxVUkk+IGltcG9ydGVkVXJpcykgeworICAgICAgICAgICAgZm9yIChJbXBvcnQgc2luZ2xlSW1wb3J0IDogcHJvdG9idWZzLnB1YmxpY0ltcG9ydHNJbihwcm90b2J1ZikpIHsKKyAgICAgICAgICAgICAgcmVzb2x2ZUltcG9ydChpbXBvcnRlZFVyaXMsIHNpbmdsZUltcG9ydCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgcHJpdmF0ZSB2b2lkIHJlc29sdmVJbXBvcnQoTGlua2VkSGFzaFNldDxVUkk+IGltcG9ydGVkVXJpcywgSW1wb3J0IHNpbmdsZUltcG9ydCkgeworICAgICAgICAgICAgaWYgKGltcG9ydHMuaXNSZXNvbHZlZChzaW5nbGVJbXBvcnQpKSB7CisgICAgICAgICAgICAgIGltcG9ydGVkVXJpcy5hZGQoaW1wb3J0cy5yZXNvbHZlZFVyaU9mKHNpbmdsZUltcG9ydCkpOworICAgICAgICAgICAgICBQcm90b2J1ZiByb290ID0gcmVzb3VyY2VzLnJvb3RPZihpbXBvcnRzLmltcG9ydGVkUmVzb3VyY2Uoc2luZ2xlSW1wb3J0KSk7CisgICAgICAgICAgICAgIGlmIChyb290ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBhZGRQdWJsaWNJbXBvcnRlZFVyaXMocm9vdCwgaW1wb3J0ZWRVcmlzKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL3Njb3BpbmcvUHJvdG9idWZJbXBvcnRlZE5hbWVzcGFjZUF3YXJlTG9jYWxTY29wZVByb3ZpZGVyLmphdmEgYi9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYvc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi9zY29waW5nL1Byb3RvYnVmSW1wb3J0ZWROYW1lc3BhY2VBd2FyZUxvY2FsU2NvcGVQcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkOTNiZjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYvc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi9zY29waW5nL1Byb3RvYnVmSW1wb3J0ZWROYW1lc3BhY2VBd2FyZUxvY2FsU2NvcGVQcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYgR29vZ2xlIEluYy4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlCisgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2gKKyAqIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICovCitwYWNrYWdlIGNvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5zY29waW5nOworCitpbXBvcnQgb3JnLmVjbGlwc2UueHRleHQubmFtaW5nLlF1YWxpZmllZE5hbWU7CitpbXBvcnQgb3JnLmVjbGlwc2UueHRleHQuc2NvcGluZy5pbXBsLkltcG9ydE5vcm1hbGl6ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UueHRleHQuc2NvcGluZy5pbXBsLkltcG9ydGVkTmFtZXNwYWNlQXdhcmVMb2NhbFNjb3BlUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UueHRleHQudXRpbC5TdHJpbmdzOworaW1wb3J0IGNvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5uYW1pbmcuUHJvdG9idWZRdWFsaWZpZWROYW1lQ29udmVydGVyOworaW1wb3J0IGNvbS5nb29nbGUuaW5qZWN0LkluamVjdDsKKworcHVibGljIGNsYXNzIFByb3RvYnVmSW1wb3J0ZWROYW1lc3BhY2VBd2FyZUxvY2FsU2NvcGVQcm92aWRlcgorICAgIGV4dGVuZHMgSW1wb3J0ZWROYW1lc3BhY2VBd2FyZUxvY2FsU2NvcGVQcm92aWRlciB7CisgIEBJbmplY3QgcHJpdmF0ZSBQcm90b2J1ZlF1YWxpZmllZE5hbWVDb252ZXJ0ZXIgcXVhbGlmaWVkTmFtZUNvbnZlcnRlcjsKKworICAvKioKKyAgICogQ3JlYXRlcyBhIG5ldyB7QGxpbmsgSW1wb3J0Tm9ybWFsaXplcn0gZm9yIHRoZSBnaXZlbiBuYW1lc3BhY2UuCisgICAqCisgICAqIEBwYXJhbSBuYW1lc3BhY2UgdGhlIG5hbWVzcGFjZS4KKyAgICogQHBhcmFtIGlnbm9yZUNhc2UgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIHJlc29sdmVyIHNob3VsZCBiZSBjYXNlIGluc2Vuc2l0aXZlLgorICAgKiBAcmV0dXJuIGEgbmV3IHtAbGluayBJbXBvcnROb3JtYWxpemVyfSBvciB7QGNvZGUgbnVsbH0gaWYgdGhlIG5hbWVzcGFjZSBjYW5ub3QgYmUKKyAgICogICAgIGNvbnZlcnRlZCB0byBhIHZhbGlkIHF1YWxpZmllZCBuYW1lLgorICAgKi8KKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBJbXBvcnROb3JtYWxpemVyIGNyZWF0ZUltcG9ydGVkTmFtZXNwYWNlUmVzb2x2ZXIoU3RyaW5nIG5hbWVzcGFjZSwKKyAgICAgIGJvb2xlYW4gaWdub3JlQ2FzZSkgeworICAgIGlmIChTdHJpbmdzLmlzRW1wdHkobmFtZXNwYWNlKSkgeworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIFF1YWxpZmllZE5hbWUgaW1wb3J0ZWROYW1lc3BhY2UgPSBxdWFsaWZpZWROYW1lQ29udmVydGVyLnRvUXVhbGlmaWVkTmFtZShuYW1lc3BhY2UpOworICAgIGlmIChpbXBvcnRlZE5hbWVzcGFjZSA9PSBudWxsIHx8IGltcG9ydGVkTmFtZXNwYWNlLmlzRW1wdHkoKSkgeworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIHJldHVybiBkb0NyZWF0ZUltcG9ydE5vcm1hbGl6ZXIoaW1wb3J0ZWROYW1lc3BhY2UsIHRydWUsIGlnbm9yZUNhc2UpOworICB9Cit9CmRpZmYgLS1naXQgYS9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYvc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi92YWxpZGF0aW9uL0ltcG9ydFZhbGlkYXRvci5qYXZhIGIvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmL3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvdmFsaWRhdGlvbi9JbXBvcnRWYWxpZGF0b3IuamF2YQppbmRleCBmMDNkZjdmLi5iNDE4NTA2IDEwMDY0NAotLS0gYS9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYvc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi92YWxpZGF0aW9uL0ltcG9ydFZhbGlkYXRvci5qYXZhCisrKyBiL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL3ZhbGlkYXRpb24vSW1wb3J0VmFsaWRhdG9yLmphdmEKQEAgLTEwLDcgKzEwLDcgQEAKIAogaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLmNvbW1vbi5jb2xsZWN0Lk1hcHMubmV3SGFzaE1hcDsKIGltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5TZXRzLm5ld0hhc2hTZXQ7Ci1pbXBvcnQgc3RhdGljIGNvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5wcm90b2J1Zi5Qcm90b2J1ZlBhY2thZ2UuTGl0ZXJhbHMuSU1QT1JUX19QQVRIOworaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYucHJvdG9idWYuUHJvdG9idWZQYWNrYWdlLkxpdGVyYWxzLlBBQ0tBR0VfX0lNUE9SVEVEX05BTUVTUEFDRTsKIGltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnZhbGlkYXRpb24uTWVzc2FnZXMuaW1wb3J0Tm90Rm91bmQ7CiBpbXBvcnQgc3RhdGljIGNvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi52YWxpZGF0aW9uLk1lc3NhZ2VzLmltcG9ydGluZ1Vuc3VwcG9ydGVkU3ludGF4OwogaW1wb3J0IHN0YXRpYyBqYXZhLmxhbmcuU3RyaW5nLmZvcm1hdDsKQEAgLTExMSw3ICsxMTEsNyBAQAogICB9CiAKICAgcHJpdmF0ZSB2b2lkIHdhcm5VbnN1cHBvcnRlZEltcG9ydEZvdW5kSW4oSW1wb3J0IGFuSW1wb3J0KSB7Ci0gICAgd2FybmluZyhpbXBvcnRpbmdVbnN1cHBvcnRlZFN5bnRheCwgYW5JbXBvcnQsIElNUE9SVF9fUEFUSCwgSU5TSUdOSUZJQ0FOVF9JTkRFWCk7CisgICAgd2FybmluZyhpbXBvcnRpbmdVbnN1cHBvcnRlZFN5bnRheCwgYW5JbXBvcnQsIFBBQ0tBR0VfX0lNUE9SVEVEX05BTUVTUEFDRSwgSU5TSUdOSUZJQ0FOVF9JTkRFWCk7CiAgIH0KIAogICAvKioKQEAgLTEyNSw3ICsxMjUsNyBAQAogICAgIGlmIChpbXBvcnRzLmlzUmVzb2x2ZWQoYW5JbXBvcnQpKSB7CiAgICAgICByZXR1cm47CiAgICAgfQotICAgIGVycm9yKGZvcm1hdChpbXBvcnROb3RGb3VuZCwgaW1wb3J0cy5nZXRQYXRoKGFuSW1wb3J0KSksIElNUE9SVF9fUEFUSCk7CisgICAgZXJyb3IoZm9ybWF0KGltcG9ydE5vdEZvdW5kLCBpbXBvcnRzLmdldFBhdGgoYW5JbXBvcnQpKSwgUEFDS0FHRV9fSU1QT1JURURfTkFNRVNQQUNFKTsKICAgfQogCiAgIHByaXZhdGUgc3RhdGljIGVudW0gSGFzS25vd25TeW50YXggewpkaWZmIC0tZ2l0IGEvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmL3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvdmFsaWRhdGlvbi9Qcm90b2J1ZkphdmFWYWxpZGF0b3IuamF2YSBiL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL3ZhbGlkYXRpb24vUHJvdG9idWZKYXZhVmFsaWRhdG9yLmphdmEKaW5kZXggM2M2ZTE3My4uYjE2NDk1NyAxMDA2NDQKLS0tIGEvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmL3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvdmFsaWRhdGlvbi9Qcm90b2J1ZkphdmFWYWxpZGF0b3IuamF2YQorKysgYi9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYvc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi92YWxpZGF0aW9uL1Byb3RvYnVmSmF2YVZhbGlkYXRvci5qYXZhCkBAIC0xMSw3ICsxMSw3IEBACiBpbXBvcnQgc3RhdGljIGNvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5wcm90b2J1Zi5Qcm90b2J1ZlBhY2thZ2UuTGl0ZXJhbHMuTUFQX1RZUEVfX0tFWV9UWVBFOwogaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYucHJvdG9idWYuUHJvdG9idWZQYWNrYWdlLkxpdGVyYWxzLk1BUF9UWVBFX19WQUxVRV9UWVBFOwogaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYucHJvdG9idWYuUHJvdG9idWZQYWNrYWdlLkxpdGVyYWxzLk1FU1NBR0VfRklFTERfX01PRElGSUVSOwotaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYucHJvdG9idWYuUHJvdG9idWZQYWNrYWdlLkxpdGVyYWxzLlBBQ0tBR0VfX05BTUU7CitpbXBvcnQgc3RhdGljIGNvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5wcm90b2J1Zi5Qcm90b2J1ZlBhY2thZ2UuTGl0ZXJhbHMuUEFDS0FHRV9fSU1QT1JURURfTkFNRVNQQUNFOwogaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYucHJvdG9idWYuUHJvdG9idWZQYWNrYWdlLkxpdGVyYWxzLlNZTlRBWF9fTkFNRTsKIGltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnZhbGlkYXRpb24uTWVzc2FnZXMuZXhwZWN0ZWRGaWVsZE51bWJlcjsKIGltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnZhbGlkYXRpb24uTWVzc2FnZXMuZXhwZWN0ZWRTeW50YXhJZGVudGlmaWVyOwpAQCAtMzgwLDcgKzM4MCw3IEBACiAgICAgZm9yIChQcm90b2J1ZkVsZW1lbnQgZSA6IHJvb3QuZ2V0RWxlbWVudHMoKSkgewogICAgICAgaWYgKGUgPT0gYVBhY2thZ2UpIHsKICAgICAgICAgaWYgKGZpcnN0Rm91bmQpIHsKLSAgICAgICAgICBlcnJvcihtdWx0aXBsZVBhY2thZ2VzLCBhUGFja2FnZSwgUEFDS0FHRV9fTkFNRSwgTU9SRV9USEFOX09ORV9QQUNLQUdFX0VSUk9SKTsKKyAgICAgICAgICBlcnJvcihtdWx0aXBsZVBhY2thZ2VzLCBhUGFja2FnZSwgUEFDS0FHRV9fSU1QT1JURURfTkFNRVNQQUNFLCBNT1JFX1RIQU5fT05FX1BBQ0tBR0VfRVJST1IpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICAgIH0K