ZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9kZXZ0b29scy9idWlsZC9za3lkb2MvU2t5ZG9jTWFpbi5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL2RldnRvb2xzL2J1aWxkL3NreWRvYy9Ta3lkb2NNYWluLmphdmEKaW5kZXggMmVmODU3Yi4uOTUwYTVlNCAxMDA2NDQKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL2RldnRvb2xzL2J1aWxkL3NreWRvYy9Ta3lkb2NNYWluLmphdmEKKysrIGIvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL2RldnRvb2xzL2J1aWxkL3NreWRvYy9Ta3lkb2NNYWluLmphdmEKQEAgLTIxNyw3ICsyMTcsNyBAQAogICAgIExhYmVsIHRhcmdldEZpbGVMYWJlbCA9IExhYmVsLnBhcnNlQWJzb2x1dGUodGFyZ2V0RmlsZUxhYmVsU3RyaW5nLCBJbW11dGFibGVNYXAub2YoKSk7CiAKICAgICBJbW11dGFibGVNYXAuQnVpbGRlcjxTdHJpbmcsIFJ1bGVJbmZvPiBydWxlSW5mb01hcCA9IEltbXV0YWJsZU1hcC5idWlsZGVyKCk7Ci0gICAgSW1tdXRhYmxlTWFwLkJ1aWxkZXI8U3RyaW5nLCBQcm92aWRlckluZm9XcmFwcGVyPiBwcm92aWRlckluZm9NYXAgPSBJbW11dGFibGVNYXAuYnVpbGRlcigpOworICAgIEltbXV0YWJsZU1hcC5CdWlsZGVyPFN0cmluZywgUHJvdmlkZXJJbmZvPiBwcm92aWRlckluZm9NYXAgPSBJbW11dGFibGVNYXAuYnVpbGRlcigpOwogICAgIEltbXV0YWJsZU1hcC5CdWlsZGVyPFN0cmluZywgVXNlckRlZmluZWRGdW5jdGlvbj4gdXNlckRlZmluZWRGdW5jdGlvbnMgPSBJbW11dGFibGVNYXAuYnVpbGRlcigpOwogCiAgICAgdHJ5IHsKQEAgLTIzNyw3ICsyMzcsNyBAQAogICAgICAgICBydWxlSW5mb01hcC5idWlsZCgpLmVudHJ5U2V0KCkuc3RyZWFtKCkKICAgICAgICAgICAgIC5maWx0ZXIoZW50cnkgLT4gdmFsaWRTeW1ib2xOYW1lKHN5bWJvbE5hbWVzLCBlbnRyeS5nZXRLZXkoKSkpCiAgICAgICAgICAgICAuY29sbGVjdChJbW11dGFibGVNYXAudG9JbW11dGFibGVNYXAoRW50cnk6OmdldEtleSwgRW50cnk6OmdldFZhbHVlKSk7Ci0gICAgTWFwPFN0cmluZywgUHJvdmlkZXJJbmZvV3JhcHBlcj4gZmlsdGVyZWRQcm92aWRlckluZm9zID0KKyAgICBNYXA8U3RyaW5nLCBQcm92aWRlckluZm8+IGZpbHRlcmVkUHJvdmlkZXJJbmZvcyA9CiAgICAgICAgIHByb3ZpZGVySW5mb01hcC5idWlsZCgpLmVudHJ5U2V0KCkuc3RyZWFtKCkKICAgICAgICAgICAgIC5maWx0ZXIoZW50cnkgLT4gdmFsaWRTeW1ib2xOYW1lKHN5bWJvbE5hbWVzLCBlbnRyeS5nZXRLZXkoKSkpCiAgICAgICAgICAgICAuY29sbGVjdChJbW11dGFibGVNYXAudG9JbW11dGFibGVNYXAoRW50cnk6OmdldEtleSwgRW50cnk6OmdldFZhbHVlKSk7CkBAIC0yOTYsMTMgKzI5NiwxMSBAQAogICB9CiAKICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBwcmludFByb3ZpZGVySW5mb3MoCi0gICAgICBQcmludFdyaXRlciBwcmludFdyaXRlciwKLSAgICAgIE1hcmtkb3duUmVuZGVyZXIgcmVuZGVyZXIsCi0gICAgICBNYXA8U3RyaW5nLCBQcm92aWRlckluZm9XcmFwcGVyPiBwcm92aWRlckluZm9zKQorICAgICAgUHJpbnRXcml0ZXIgcHJpbnRXcml0ZXIsIE1hcmtkb3duUmVuZGVyZXIgcmVuZGVyZXIsIE1hcDxTdHJpbmcsIFByb3ZpZGVySW5mbz4gcHJvdmlkZXJJbmZvcykKICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgZm9yIChFbnRyeTxTdHJpbmcsIFByb3ZpZGVySW5mb1dyYXBwZXI+IGVudHJ5IDogcHJvdmlkZXJJbmZvcy5lbnRyeVNldCgpKSB7Ci0gICAgICBQcm92aWRlckluZm9XcmFwcGVyIGluZm9XcmFwcGVyID0gZW50cnkuZ2V0VmFsdWUoKTsKLSAgICAgIHByaW50UHJvdmlkZXJJbmZvKHByaW50V3JpdGVyLCByZW5kZXJlciwgZW50cnkuZ2V0S2V5KCksIGluZm9XcmFwcGVyLmdldFByb3ZpZGVySW5mbygpKTsKKyAgICBmb3IgKEVudHJ5PFN0cmluZywgUHJvdmlkZXJJbmZvPiBlbnRyeSA6IHByb3ZpZGVySW5mb3MuZW50cnlTZXQoKSkgeworICAgICAgUHJvdmlkZXJJbmZvIHByb3ZpZGVySW5mbyA9IGVudHJ5LmdldFZhbHVlKCk7CisgICAgICBwcmludFByb3ZpZGVySW5mbyhwcmludFdyaXRlciwgcmVuZGVyZXIsIGVudHJ5LmdldEtleSgpLCBwcm92aWRlckluZm8pOwogICAgICAgcHJpbnRXcml0ZXIucHJpbnRsbigpOwogICAgIH0KICAgfQpAQCAtMzY5LDcgKzM2Nyw3IEBACiAgICAgICBTdGFybGFya1NlbWFudGljcyBzZW1hbnRpY3MsCiAgICAgICBMYWJlbCBsYWJlbCwKICAgICAgIEltbXV0YWJsZU1hcC5CdWlsZGVyPFN0cmluZywgUnVsZUluZm8+IHJ1bGVJbmZvTWFwLAotICAgICAgSW1tdXRhYmxlTWFwLkJ1aWxkZXI8U3RyaW5nLCBQcm92aWRlckluZm9XcmFwcGVyPiBwcm92aWRlckluZm9NYXAsCisgICAgICBJbW11dGFibGVNYXAuQnVpbGRlcjxTdHJpbmcsIFByb3ZpZGVySW5mbz4gcHJvdmlkZXJJbmZvTWFwLAogICAgICAgSW1tdXRhYmxlTWFwLkJ1aWxkZXI8U3RyaW5nLCBVc2VyRGVmaW5lZEZ1bmN0aW9uPiB1c2VyRGVmaW5lZEZ1bmN0aW9uTWFwKQogICAgICAgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgTGFiZWxTeW50YXhFeGNlcHRpb24sIEV2YWxFeGNlcHRpb24sCiAgICAgICAgICAgU3RhcmxhcmtFdmFsdWF0aW9uRXhjZXB0aW9uIHsKQEAgLTM5MywxMSArMzkxLDE0IEBACiAKICAgICBmb3IgKEVudHJ5PFN0cmluZywgT2JqZWN0PiBlbnZFbnRyeSA6IHNvcnRlZEJpbmRpbmdzLmVudHJ5U2V0KCkpIHsKICAgICAgIGlmIChydWxlRnVuY3Rpb25zLmNvbnRhaW5zS2V5KGVudkVudHJ5LmdldFZhbHVlKCkpKSB7Ci0gICAgICAgIFJ1bGVJbmZvIHJ1bGVJbmZvID0gcnVsZUZ1bmN0aW9ucy5nZXQoZW52RW50cnkuZ2V0VmFsdWUoKSkuZ2V0UnVsZUluZm8oKTsKKyAgICAgICAgUnVsZUluZm8uQnVpbGRlciBydWxlSW5mb0J1aWxkID0gcnVsZUZ1bmN0aW9ucy5nZXQoZW52RW50cnkuZ2V0VmFsdWUoKSkuZ2V0UnVsZUluZm8oKTsKKyAgICAgICAgUnVsZUluZm8gcnVsZUluZm8gPSBydWxlSW5mb0J1aWxkLnNldFJ1bGVOYW1lKGVudkVudHJ5LmdldEtleSgpKS5idWlsZCgpOwogICAgICAgICBydWxlSW5mb01hcC5wdXQoZW52RW50cnkuZ2V0S2V5KCksIHJ1bGVJbmZvKTsKICAgICAgIH0KICAgICAgIGlmIChwcm92aWRlckluZm9zLmNvbnRhaW5zS2V5KGVudkVudHJ5LmdldFZhbHVlKCkpKSB7Ci0gICAgICAgIFByb3ZpZGVySW5mb1dyYXBwZXIgcHJvdmlkZXJJbmZvID0gcHJvdmlkZXJJbmZvcy5nZXQoZW52RW50cnkuZ2V0VmFsdWUoKSk7CisgICAgICAgIFByb3ZpZGVySW5mby5CdWlsZGVyIHByb3ZpZGVySW5mb0J1aWxkID0KKyAgICAgICAgICAgIHByb3ZpZGVySW5mb3MuZ2V0KGVudkVudHJ5LmdldFZhbHVlKCkpLmdldFByb3ZpZGVySW5mbygpOworICAgICAgICBQcm92aWRlckluZm8gcHJvdmlkZXJJbmZvID0gcHJvdmlkZXJJbmZvQnVpbGQuc2V0UHJvdmlkZXJOYW1lKGVudkVudHJ5LmdldEtleSgpKS5idWlsZCgpOwogICAgICAgICBwcm92aWRlckluZm9NYXAucHV0KGVudkVudHJ5LmdldEtleSgpLCBwcm92aWRlckluZm8pOwogICAgICAgfQogICAgICAgaWYgKGVudkVudHJ5LmdldFZhbHVlKCkgaW5zdGFuY2VvZiBVc2VyRGVmaW5lZEZ1bmN0aW9uKSB7CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvZGV2dG9vbHMvYnVpbGQvc2t5ZG9jL2Zha2VidWlsZGFwaS9GYWtlU2t5bGFya1J1bGVGdW5jdGlvbnNBcGkuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9kZXZ0b29scy9idWlsZC9za3lkb2MvZmFrZWJ1aWxkYXBpL0Zha2VTa3lsYXJrUnVsZUZ1bmN0aW9uc0FwaS5qYXZhCmluZGV4IGJiOTlhNGIuLmZhODJiOGEgMTAwNjQ0Ci0tLSBhL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9kZXZ0b29scy9idWlsZC9za3lkb2MvZmFrZWJ1aWxkYXBpL0Zha2VTa3lsYXJrUnVsZUZ1bmN0aW9uc0FwaS5qYXZhCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9kZXZ0b29scy9idWlsZC9za3lkb2MvZmFrZWJ1aWxkYXBpL0Zha2VTa3lsYXJrUnVsZUZ1bmN0aW9uc0FwaS5qYXZhCkBAIC0xNTUsNyArMTU1LDggQEAKIAogICAgIFJ1bGVEZWZpbml0aW9uSWRlbnRpZmllciBmdW5jdGlvbklkZW50aWZpZXIgPSBuZXcgUnVsZURlZmluaXRpb25JZGVudGlmaWVyKCk7CiAKLSAgICBSdWxlSW5mbyBydWxlSW5mbyA9IFJ1bGVJbmZvLm5ld0J1aWxkZXIoKS5zZXREb2NTdHJpbmcoZG9jKS5hZGRBbGxBdHRyaWJ1dGUoYXR0ckluZm9zKS5idWlsZCgpOworICAgIC8vIE9ubHkgdGhlIEJ1aWxkZXIgaXMgcGFzc2VkIHRvIFJ1bGVJbmZvV3JhcHBlciBhcyB0aGUgcnVsZSBuYW1lIGlzIG5vdCB5ZXQgYXZhaWxhYmxlLgorICAgIFJ1bGVJbmZvLkJ1aWxkZXIgcnVsZUluZm8gPSBSdWxlSW5mby5uZXdCdWlsZGVyKCkuc2V0RG9jU3RyaW5nKGRvYykuYWRkQWxsQXR0cmlidXRlKGF0dHJJbmZvcyk7CiAKICAgICBydWxlSW5mb0xpc3QuYWRkKG5ldyBSdWxlSW5mb1dyYXBwZXIoZnVuY3Rpb25JZGVudGlmaWVyLCBhc3QuZ2V0TG9jYXRpb24oKSwgcnVsZUluZm8pKTsKIApkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL2RldnRvb2xzL2J1aWxkL3NreWRvYy9mYWtlYnVpbGRhcGkvcmVwb3NpdG9yeS9GYWtlUmVwb3NpdG9yeU1vZHVsZS5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL2RldnRvb2xzL2J1aWxkL3NreWRvYy9mYWtlYnVpbGRhcGkvcmVwb3NpdG9yeS9GYWtlUmVwb3NpdG9yeU1vZHVsZS5qYXZhCmluZGV4IDI4YjkzZmYuLjBhMWNlMTkgMTAwNjQ0Ci0tLSBhL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9kZXZ0b29scy9idWlsZC9za3lkb2MvZmFrZWJ1aWxkYXBpL3JlcG9zaXRvcnkvRmFrZVJlcG9zaXRvcnlNb2R1bGUuamF2YQorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvZGV2dG9vbHMvYnVpbGQvc2t5ZG9jL2Zha2VidWlsZGFwaS9yZXBvc2l0b3J5L0Zha2VSZXBvc2l0b3J5TW9kdWxlLmphdmEKQEAgLTc0LDcgKzc0LDggQEAKICAgICBSZXBvc2l0b3J5UnVsZURlZmluaXRpb25JZGVudGlmaWVyIGZ1bmN0aW9uSWRlbnRpZmllciA9CiAgICAgICAgIG5ldyBSZXBvc2l0b3J5UnVsZURlZmluaXRpb25JZGVudGlmaWVyKCk7CiAKLSAgICBSdWxlSW5mbyBydWxlSW5mbyA9IFJ1bGVJbmZvLm5ld0J1aWxkZXIoKS5zZXREb2NTdHJpbmcoZG9jKS5hZGRBbGxBdHRyaWJ1dGUoYXR0ckluZm9zKS5idWlsZCgpOworICAgIC8vIE9ubHkgdGhlIEJ1aWxkZXIgaXMgcGFzc2VkIHRvIFJ1bGVJbmZvV3JhcHBlciBhcyB0aGUgcnVsZSBuYW1lIGlzIG5vdCB5ZXQgYXZhaWxhYmxlLgorICAgIFJ1bGVJbmZvLkJ1aWxkZXIgcnVsZUluZm8gPSBSdWxlSW5mby5uZXdCdWlsZGVyKCkuc2V0RG9jU3RyaW5nKGRvYykuYWRkQWxsQXR0cmlidXRlKGF0dHJJbmZvcyk7CiAKICAgICBydWxlSW5mb0xpc3QuYWRkKG5ldyBSdWxlSW5mb1dyYXBwZXIoZnVuY3Rpb25JZGVudGlmaWVyLCBhc3QuZ2V0TG9jYXRpb24oKSwgcnVsZUluZm8pKTsKICAgICByZXR1cm4gZnVuY3Rpb25JZGVudGlmaWVyOwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL2RldnRvb2xzL2J1aWxkL3NreWRvYy9yZW5kZXJpbmcvUHJvdG9SZW5kZXJlci5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL2RldnRvb2xzL2J1aWxkL3NreWRvYy9yZW5kZXJpbmcvUHJvdG9SZW5kZXJlci5qYXZhCmluZGV4IDFkNDI4MzMuLjUwNDg3MjQgMTAwNjQ0Ci0tLSBhL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9kZXZ0b29scy9idWlsZC9za3lkb2MvcmVuZGVyaW5nL1Byb3RvUmVuZGVyZXIuamF2YQorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvZGV2dG9vbHMvYnVpbGQvc2t5ZG9jL3JlbmRlcmluZy9Qcm90b1JlbmRlcmVyLmphdmEKQEAgLTQyLDkgKzQyLDggQEAKICAgfQogCiAgIC8qKiBBcHBlbmRzIHtAbGluayBQcm92aWRlckluZm99IHByb3RvcyB0byBhIHtAbGluayBNb2R1bGVJbmZvLkJ1aWxkZXJ9LiAqLwotICBwdWJsaWMgUHJvdG9SZW5kZXJlciBhcHBlbmRQcm92aWRlckluZm9zKENvbGxlY3Rpb248UHJvdmlkZXJJbmZvV3JhcHBlcj4gcHJvdmlkZXJJbmZvV3JhcHBlcnMpIHsKLSAgICBmb3IgKFByb3ZpZGVySW5mb1dyYXBwZXIgcHJvdmlkZXJJbmZvV3JhcHBlciA6IHByb3ZpZGVySW5mb1dyYXBwZXJzKSB7Ci0gICAgICBQcm92aWRlckluZm8gcHJvdmlkZXJJbmZvID0gcHJvdmlkZXJJbmZvV3JhcHBlci5nZXRQcm92aWRlckluZm8oKTsKKyAgcHVibGljIFByb3RvUmVuZGVyZXIgYXBwZW5kUHJvdmlkZXJJbmZvcyhDb2xsZWN0aW9uPFByb3ZpZGVySW5mbz4gcHJvdmlkZXJJbmZvcykgeworICAgIGZvciAoUHJvdmlkZXJJbmZvIHByb3ZpZGVySW5mbyA6IHByb3ZpZGVySW5mb3MpIHsKICAgICAgIG1vZHVsZUluZm8uYWRkUHJvdmlkZXJJbmZvKHByb3ZpZGVySW5mbyk7CiAgICAgfQogICAgIHJldHVybiB0aGlzOwpAQCAtNjYsNCArNjUsOCBAQAogICAgIE1vZHVsZUluZm8gYnVpbGQgPSBtb2R1bGVJbmZvLmJ1aWxkKCk7CiAgICAgYnVpbGQud3JpdGVUbyhvdXRwdXRTdHJlYW0pOwogICB9CisKKyAgcHVibGljIE1vZHVsZUluZm8uQnVpbGRlciBnZXRNb2R1bGVJbmZvKCkgeworICAgIHJldHVybiBtb2R1bGVJbmZvOworICB9CiB9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvZGV2dG9vbHMvYnVpbGQvc2t5ZG9jL3JlbmRlcmluZy9Qcm92aWRlckluZm9XcmFwcGVyLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvZGV2dG9vbHMvYnVpbGQvc2t5ZG9jL3JlbmRlcmluZy9Qcm92aWRlckluZm9XcmFwcGVyLmphdmEKaW5kZXggY2ZlYzRkNi4uYzY0Y2ZhOCAxMDA2NDQKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL2RldnRvb2xzL2J1aWxkL3NreWRvYy9yZW5kZXJpbmcvUHJvdmlkZXJJbmZvV3JhcHBlci5qYXZhCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9kZXZ0b29scy9idWlsZC9za3lkb2MvcmVuZGVyaW5nL1Byb3ZpZGVySW5mb1dyYXBwZXIuamF2YQpAQCAtMzMsMjAgKzMzLDIxIEBACiBwdWJsaWMgY2xhc3MgUHJvdmlkZXJJbmZvV3JhcHBlciB7CiAKICAgcHJpdmF0ZSBmaW5hbCBCYXNlRnVuY3Rpb24gaWRlbnRpZmllcjsKLSAgcHJpdmF0ZSBmaW5hbCBQcm92aWRlckluZm8gcHJvdmlkZXJJbmZvOworICAvLyBPbmx5IHRoZSBCdWlsZGVyIGlzIHBhc3NlZCB0byBQcm92aWRlckluZm9XcmFwcGVyIGFzIHRoZSBwcm92aWRlciBuYW1lIGlzIG5vdCB5ZXQgYXZhaWxhYmxlLgorICBwcml2YXRlIGZpbmFsIFByb3ZpZGVySW5mby5CdWlsZGVyIHByb3ZpZGVySW5mbzsKIAogICBwdWJsaWMgUHJvdmlkZXJJbmZvV3JhcHBlcigKICAgICAgIEJhc2VGdW5jdGlvbiBpZGVudGlmaWVyLCBTdHJpbmcgZG9jU3RyaW5nLCBDb2xsZWN0aW9uPFByb3ZpZGVyRmllbGRJbmZvPiBmaWVsZEluZm9zKSB7CiAgICAgdGhpcy5pZGVudGlmaWVyID0gaWRlbnRpZmllcjsKICAgICB0aGlzLnByb3ZpZGVySW5mbyA9Ci0gICAgICAgIFByb3ZpZGVySW5mby5uZXdCdWlsZGVyKCkuc2V0RG9jU3RyaW5nKGRvY1N0cmluZykuYWRkQWxsRmllbGRJbmZvKGZpZWxkSW5mb3MpLmJ1aWxkKCk7CisgICAgICAgIFByb3ZpZGVySW5mby5uZXdCdWlsZGVyKCkuc2V0RG9jU3RyaW5nKGRvY1N0cmluZykuYWRkQWxsRmllbGRJbmZvKGZpZWxkSW5mb3MpOwogICB9CiAKICAgcHVibGljIEJhc2VGdW5jdGlvbiBnZXRJZGVudGlmaWVyKCkgewogICAgIHJldHVybiBpZGVudGlmaWVyOwogICB9CiAKLSAgcHVibGljIFByb3ZpZGVySW5mbyBnZXRQcm92aWRlckluZm8oKSB7CisgIHB1YmxpYyBQcm92aWRlckluZm8uQnVpbGRlciBnZXRQcm92aWRlckluZm8oKSB7CiAgICAgcmV0dXJuIHByb3ZpZGVySW5mbzsKICAgfQogfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL2RldnRvb2xzL2J1aWxkL3NreWRvYy9yZW5kZXJpbmcvUnVsZUluZm9XcmFwcGVyLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvZGV2dG9vbHMvYnVpbGQvc2t5ZG9jL3JlbmRlcmluZy9SdWxlSW5mb1dyYXBwZXIuamF2YQppbmRleCBjMzcxMjcyLi4zZTIzNDE2IDEwMDY0NAotLS0gYS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvZGV2dG9vbHMvYnVpbGQvc2t5ZG9jL3JlbmRlcmluZy9SdWxlSW5mb1dyYXBwZXIuamF2YQorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvZGV2dG9vbHMvYnVpbGQvc2t5ZG9jL3JlbmRlcmluZy9SdWxlSW5mb1dyYXBwZXIuamF2YQpAQCAtMjMsOSArMjMsMTEgQEAKIAogICBwcml2YXRlIGZpbmFsIEJhc2VGdW5jdGlvbiBpZGVudGlmaWVyRnVuY3Rpb247CiAgIHByaXZhdGUgZmluYWwgTG9jYXRpb24gbG9jYXRpb247Ci0gIHByaXZhdGUgZmluYWwgUnVsZUluZm8gcnVsZUluZm87CisgIC8vIE9ubHkgdGhlIEJ1aWxkZXIgaXMgcGFzc2VkIHRvIFJ1bGVJbmZvV3JhcHBlciBhcyB0aGUgcnVsZSBuYW1lIGlzIG5vdCB5ZXQgYXZhaWxhYmxlLgorICBwcml2YXRlIGZpbmFsIFJ1bGVJbmZvLkJ1aWxkZXIgcnVsZUluZm87CiAKLSAgcHVibGljIFJ1bGVJbmZvV3JhcHBlcihCYXNlRnVuY3Rpb24gaWRlbnRpZmllckZ1bmN0aW9uLCBMb2NhdGlvbiBsb2NhdGlvbiwgUnVsZUluZm8gcnVsZUluZm8pIHsKKyAgcHVibGljIFJ1bGVJbmZvV3JhcHBlcigKKyAgICAgIEJhc2VGdW5jdGlvbiBpZGVudGlmaWVyRnVuY3Rpb24sIExvY2F0aW9uIGxvY2F0aW9uLCBSdWxlSW5mby5CdWlsZGVyIHJ1bGVJbmZvKSB7CiAgICAgdGhpcy5pZGVudGlmaWVyRnVuY3Rpb24gPSBpZGVudGlmaWVyRnVuY3Rpb247CiAgICAgdGhpcy5sb2NhdGlvbiA9IGxvY2F0aW9uOwogICAgIHRoaXMucnVsZUluZm8gPSBydWxlSW5mbzsKQEAgLTM5LDcgKzQxLDcgQEAKICAgICByZXR1cm4gbG9jYXRpb247CiAgIH0KIAotICBwdWJsaWMgUnVsZUluZm8gZ2V0UnVsZUluZm8oKSB7CisgIHB1YmxpYyBSdWxlSW5mby5CdWlsZGVyIGdldFJ1bGVJbmZvKCkgewogICAgIHJldHVybiBydWxlSW5mbzsKICAgfQogfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZ29vZ2xlL2RldnRvb2xzL2J1aWxkL3NreWRvYy9yZW5kZXJpbmcvcHJvdG8vc3RhcmRvY19vdXRwdXQucHJvdG8gYi9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvZGV2dG9vbHMvYnVpbGQvc2t5ZG9jL3JlbmRlcmluZy9wcm90by9zdGFyZG9jX291dHB1dC5wcm90bwppbmRleCAxNmNkYjgzLi45ZmMzYmU3IDEwMDY0NAotLS0gYS9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvZGV2dG9vbHMvYnVpbGQvc2t5ZG9jL3JlbmRlcmluZy9wcm90by9zdGFyZG9jX291dHB1dC5wcm90bworKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9nb29nbGUvZGV2dG9vbHMvYnVpbGQvc2t5ZG9jL3JlbmRlcmluZy9wcm90by9zdGFyZG9jX291dHB1dC5wcm90bwpAQCAtNTgsMTEgKzU4LDE0IEBACiAKIC8vIFJlcHJlc2VudGF0aW9uIG9mIGEgU3RhcmxhcmsgcnVsZSBkZWZpbml0aW9uLgogbWVzc2FnZSBSdWxlSW5mbyB7CisgIC8vIFRoZSBuYW1lIG9mIHRoZSBydWxlLgorICBzdHJpbmcgcnVsZV9uYW1lID0gMTsKKwogICAvLyBUaGUgZG9jdW1lbnRhdGlvbiBzdHJpbmcgb2YgdGhlIHJ1bGUuCi0gIHN0cmluZyBkb2Nfc3RyaW5nID0gMTsKKyAgc3RyaW5nIGRvY19zdHJpbmcgPSAyOwogCiAgIC8vIFRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBydWxlLgotICByZXBlYXRlZCBBdHRyaWJ1dGVJbmZvIGF0dHJpYnV0ZSA9IDI7CisgIHJlcGVhdGVkIEF0dHJpYnV0ZUluZm8gYXR0cmlidXRlID0gMzsKIH0KIAogLy8gUmVwcmVzZW50YXRpb24gb2YgYSBTdGFybGFyayBydWxlIGF0dHJpYnV0ZSBkZWZpbml0aW9uLCBjb21wcmlzZWQgb2YgYW4KQEAgLTEyOSw5ICsxMzIsMTIgQEAKIAogLy8gUmVwcmVzZW50YXRpb24gb2YgYSBTdGFybGFyayBwcm92aWRlciBkZWZpbml0aW9uLgogbWVzc2FnZSBQcm92aWRlckluZm8geworICAvLyBUaGUgbmFtZSBvZiB0aGUgcHJvdmlkZXIuCisgIHN0cmluZyBwcm92aWRlcl9uYW1lID0gMTsKKwogICAvLyBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIHByb3ZpZGVyLgotICBzdHJpbmcgZG9jX3N0cmluZyA9IDE7CisgIHN0cmluZyBkb2Nfc3RyaW5nID0gMjsKIAogICAvLyBUaGUgZmllbGRzIG9mIHRoZSBwcm92aWRlci4KLSAgcmVwZWF0ZWQgUHJvdmlkZXJGaWVsZEluZm8gZmllbGRfaW5mbyA9IDI7CisgIHJlcGVhdGVkIFByb3ZpZGVyRmllbGRJbmZvIGZpZWxkX2luZm8gPSAzOwogfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL2RldnRvb2xzL2J1aWxkL3NreWRvYy9Ta3lkb2NUZXN0LmphdmEgYi9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvZGV2dG9vbHMvYnVpbGQvc2t5ZG9jL1NreWRvY1Rlc3QuamF2YQppbmRleCBjMTIwZTkwLi43ZGIzYjllIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvZGV2dG9vbHMvYnVpbGQvc2t5ZG9jL1NreWRvY1Rlc3QuamF2YQorKysgYi9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvZGV2dG9vbHMvYnVpbGQvc2t5ZG9jL1NreWRvY1Rlc3QuamF2YQpAQCAtMzAsMTEgKzMwLDEzIEBACiBpbXBvcnQgY29tLmdvb2dsZS5kZXZ0b29scy5idWlsZC5za3lkb2MuU2t5ZG9jTWFpbi5TdGFybGFya0V2YWx1YXRpb25FeGNlcHRpb247CiBpbXBvcnQgY29tLmdvb2dsZS5kZXZ0b29scy5idWlsZC5za3lkb2MucmVuZGVyaW5nLkRvY3N0cmluZ1BhcnNlRXhjZXB0aW9uOwogaW1wb3J0IGNvbS5nb29nbGUuZGV2dG9vbHMuYnVpbGQuc2t5ZG9jLnJlbmRlcmluZy5GdW5jdGlvblV0aWw7CitpbXBvcnQgY29tLmdvb2dsZS5kZXZ0b29scy5idWlsZC5za3lkb2MucmVuZGVyaW5nLlByb3RvUmVuZGVyZXI7CiBpbXBvcnQgY29tLmdvb2dsZS5kZXZ0b29scy5idWlsZC5za3lkb2MucmVuZGVyaW5nLnByb3RvLlN0YXJkb2NPdXRwdXRQcm90b3MuQXR0cmlidXRlVHlwZTsKK2ltcG9ydCBjb20uZ29vZ2xlLmRldnRvb2xzLmJ1aWxkLnNreWRvYy5yZW5kZXJpbmcucHJvdG8uU3RhcmRvY091dHB1dFByb3Rvcy5Nb2R1bGVJbmZvOwogaW1wb3J0IGNvbS5nb29nbGUuZGV2dG9vbHMuYnVpbGQuc2t5ZG9jLnJlbmRlcmluZy5wcm90by5TdGFyZG9jT3V0cHV0UHJvdG9zLlJ1bGVJbmZvOworaW1wb3J0IGNvbS5nb29nbGUuZGV2dG9vbHMuYnVpbGQuc2t5ZG9jLnJlbmRlcmluZy5wcm90by5TdGFyZG9jT3V0cHV0UHJvdG9zLlVzZXJEZWZpbmVkRnVuY3Rpb25JbmZvOwogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwLkVudHJ5OwogaW1wb3J0IGphdmEudXRpbC5zdHJlYW0uQ29sbGVjdG9yczsKIGltcG9ydCBvcmcuanVuaXQuQmVmb3JlOwogaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwpAQCAtMTI1LDEyICsxMjcsMTEgQEAKICAgICBNYXA8U3RyaW5nLCBSdWxlSW5mbz4gcnVsZUluZm9zID0gcnVsZUluZm9NYXAuYnVpbGQoKTsKICAgICBhc3NlcnRUaGF0KHJ1bGVJbmZvcykuaGFzU2l6ZSgxKTsKIAotICAgIEVudHJ5PFN0cmluZywgUnVsZUluZm8+IHJ1bGVJbmZvID0gSXRlcmFibGVzLmdldE9ubHlFbGVtZW50KHJ1bGVJbmZvcy5lbnRyeVNldCgpKTsKLSAgICBhc3NlcnRUaGF0KHJ1bGVJbmZvLmdldEtleSgpKS5pc0VxdWFsVG8oIm15X3J1bGUiKTsKLSAgICBhc3NlcnRUaGF0KHJ1bGVJbmZvLmdldFZhbHVlKCkuZ2V0RG9jU3RyaW5nKCkpLmlzRXF1YWxUbygiVGhpcyBpcyBteSBydWxlLiBJdCBkb2VzIHN0dWZmLiIpOwotICAgIGFzc2VydFRoYXQoZ2V0QXR0ck5hbWVzKHJ1bGVJbmZvLmdldFZhbHVlKCkpKS5jb250YWluc0V4YWN0bHkoCi0gICAgICAgICJuYW1lIiwgImEiLCAiYiIsICJjIiwgImQiKS5pbk9yZGVyKCk7Ci0gICAgYXNzZXJ0VGhhdChnZXRBdHRyVHlwZXMocnVsZUluZm8uZ2V0VmFsdWUoKSkpCisgICAgUnVsZUluZm8gcnVsZUluZm8gPSBJdGVyYWJsZXMuZ2V0T25seUVsZW1lbnQocnVsZUluZm9zLnZhbHVlcygpKTsKKyAgICBhc3NlcnRUaGF0KHJ1bGVJbmZvLmdldFJ1bGVOYW1lKCkpLmlzRXF1YWxUbygibXlfcnVsZSIpOworICAgIGFzc2VydFRoYXQocnVsZUluZm8uZ2V0RG9jU3RyaW5nKCkpLmlzRXF1YWxUbygiVGhpcyBpcyBteSBydWxlLiBJdCBkb2VzIHN0dWZmLiIpOworICAgIGFzc2VydFRoYXQoZ2V0QXR0ck5hbWVzKHJ1bGVJbmZvKSkuY29udGFpbnNFeGFjdGx5KCJuYW1lIiwgImEiLCAiYiIsICJjIiwgImQiKS5pbk9yZGVyKCk7CisgICAgYXNzZXJ0VGhhdChnZXRBdHRyVHlwZXMocnVsZUluZm8pKQogICAgICAgICAuY29udGFpbnNFeGFjdGx5KAogICAgICAgICAgICAgQXR0cmlidXRlVHlwZS5OQU1FLAogICAgICAgICAgICAgQXR0cmlidXRlVHlwZS5MQUJFTCwKQEAgLTM5MSw0ICszOTIsNDUgQEAKICAgICAgICAgICAgICIvdGVzdC9tYWluLmJ6bDoxOjUgbGluZSA4OiBpbnZhbGlkIHBhcmFtZXRlciBkb2N1bWVudGF0aW9uICIKICAgICAgICAgICAgICAgICArICIoZXhwZWN0ZWQgZm9ybWF0OiBcInBhcmFtZXRlcl9uYW1lOiBkb2N1bWVudGF0aW9uXCIpLiIpOwogICB9CisKKyAgQFRlc3QKKyAgcHVibGljIHZvaWQgdGVzdEZ1bmNJbmZvUGFyYW1zKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc2NyYXRjaC5maWxlKAorICAgICAgICAiL3Rlc3QvdGVzdC5iemwiLAorICAgICAgICAiZGVmIGNoZWNrX2Z1bmN0aW9uKGZvbywgYmFyLCBiYXopOiIsCisgICAgICAgICJcIlwiXCJSdW5zIHNvbWUgY2hlY2tzIG9uIHRoZSBnaXZlbiBmdW5jdGlvbiBwYXJhbWV0ZXIuIiwKKyAgICAgICAgIiAiLAorICAgICAgICAiVGhpcyBydWxlIHJ1bnMgY2hlY2tzIG9uIGEgZ2l2ZW4gZnVuY3Rpb24gcGFyYW1ldGVyLiIsCisgICAgICAgICIgIiwKKyAgICAgICAgIkFyZ3M6IiwKKyAgICAgICAgImZvbzogQSB1bmlxdWUgcGFyYW1ldGVyIGZvciB0aGlzIHJ1bGUuIiwKKyAgICAgICAgImJhcjogQSB1bmlxdWUgcGFyYW1ldGVyIGZvciB0aGlzIHJ1bGUuIiwKKyAgICAgICAgImJhejogQSB1bmlxdWUgcGFyYW1ldGVyIGZvciB0aGlzIHJ1bGUuIiwKKyAgICAgICAgIlwiXCJcIiIsCisgICAgICAgICJwYXNzIik7CisKKyAgICBJbW11dGFibGVNYXAuQnVpbGRlcjxTdHJpbmcsIFVzZXJEZWZpbmVkRnVuY3Rpb24+IGZ1bmNJbmZvTWFwID0gSW1tdXRhYmxlTWFwLmJ1aWxkZXIoKTsKKworICAgIHNreWRvY01haW4uZXZhbCgKKyAgICAgICAgU3RhcmxhcmtTZW1hbnRpY3MuREVGQVVMVF9TRU1BTlRJQ1MsCisgICAgICAgIExhYmVsLnBhcnNlQWJzb2x1dGVVbmNoZWNrZWQoIi8vdGVzdDp0ZXN0LmJ6bCIpLAorICAgICAgICBJbW11dGFibGVNYXAuYnVpbGRlcigpLAorICAgICAgICBJbW11dGFibGVNYXAuYnVpbGRlcigpLAorICAgICAgICBmdW5jSW5mb01hcCk7CisKKyAgICBNYXA8U3RyaW5nLCBVc2VyRGVmaW5lZEZ1bmN0aW9uPiBmdW5jdGlvbnMgPSBmdW5jSW5mb01hcC5idWlsZCgpOworICAgIGFzc2VydFRoYXQoZnVuY3Rpb25zKS5oYXNTaXplKDEpOworCisgICAgTW9kdWxlSW5mbyBtb2R1bGVJbmZvID0KKyAgICAgICAgbmV3IFByb3RvUmVuZGVyZXIoKS5hcHBlbmRVc2VyRGVmaW5lZEZ1bmN0aW9uSW5mb3MoZnVuY3Rpb25zKS5nZXRNb2R1bGVJbmZvKCkuYnVpbGQoKTsKKyAgICBVc2VyRGVmaW5lZEZ1bmN0aW9uSW5mbyBmdW5jSW5mbyA9IG1vZHVsZUluZm8uZ2V0RnVuY0luZm8oMCk7CisgICAgYXNzZXJ0VGhhdChmdW5jSW5mby5nZXRGdW5jdGlvbk5hbWUoKSkuaXNFcXVhbFRvKCJjaGVja19mdW5jdGlvbiIpOworICAgIGFzc2VydFRoYXQoZ2V0UGFyYW1OYW1lcyhmdW5jSW5mbykpLmNvbnRhaW5zRXhhY3RseSgiZm9vIiwgImJhciIsICJiYXoiKS5pbk9yZGVyKCk7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyBJdGVyYWJsZTxTdHJpbmc+IGdldFBhcmFtTmFtZXMoVXNlckRlZmluZWRGdW5jdGlvbkluZm8gZnVuY0luZm8pIHsKKyAgICByZXR1cm4gZnVuY0luZm8uZ2V0UGFyYW1ldGVyTGlzdCgpLnN0cmVhbSgpCisgICAgICAgIC5tYXAocGFyYW0gLT4gcGFyYW0uZ2V0TmFtZSgpKQorICAgICAgICAuY29sbGVjdChDb2xsZWN0b3JzLnRvTGlzdCgpKTsKKyAgfQogfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL2RldnRvb2xzL2J1aWxkL3NreWRvYy90ZXN0ZGF0YS9wcm90b19mb3JtYXRfdGVzdC9nb2xkZW4ucmF3IGIvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL2RldnRvb2xzL2J1aWxkL3NreWRvYy90ZXN0ZGF0YS9wcm90b19mb3JtYXRfdGVzdC9nb2xkZW4ucmF3CmluZGV4IGY4MGFjMDcuLjVjYjI5MDggMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L2phdmEvY29tL2dvb2dsZS9kZXZ0b29scy9idWlsZC9za3lkb2MvdGVzdGRhdGEvcHJvdG9fZm9ybWF0X3Rlc3QvZ29sZGVuLnJhdworKysgYi9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvZGV2dG9vbHMvYnVpbGQvc2t5ZG9jL3Rlc3RkYXRhL3Byb3RvX2Zvcm1hdF90ZXN0L2dvbGRlbi5yYXcKQEAgLTEsMTEgKzEsMTIgQEAKIAotcQotFlNtYWxsIGV4YW1wbGUgb2YgcnVsZS4SKgotBG5hbWUSHkEgdW5pcXVlIG5hbWUgZm9yIHRoaXMgdGFyZ2V0LhgBIAESKwotB3VzZWxlc3MSHlRoaXMgYXJndW1lbnQgd2lsbCBiZSBpZ25vcmVkLhgEEowBCi0kU3RvcmVzIGluZm9ybWF0aW9uIGFib3V0IGFuIGV4YW1wbGUuEiAKLQNmb28SGUEgc3RyaW5nIHJlcHJlc2VudGluZyBmb28SIAotA2JhchIZQSBzdHJpbmcgcmVwcmVzZW50aW5nIGJhchIgCit9CisKK215X2V4YW1wbGUSFlNtYWxsIGV4YW1wbGUgb2YgcnVsZS4aKgorBG5hbWUSHkEgdW5pcXVlIG5hbWUgZm9yIHRoaXMgdGFyZ2V0LhgBIAEaKworB3VzZWxlc3MSHlRoaXMgYXJndW1lbnQgd2lsbCBiZSBpZ25vcmVkLhgEEpUBCisHZXhhbXBsZRIkU3RvcmVzIGluZm9ybWF0aW9uIGFib3V0IGFuIGV4YW1wbGUuGiAKKwNmb28SGUEgc3RyaW5nIHJlcHJlc2VudGluZyBmb28aIAorA2JhchIZQSBzdHJpbmcgcmVwcmVzZW50aW5nIGJhchogCiADYmF6EhlBIHN0cmluZyByZXByZXNlbnRpbmcgYmF6GsYBCiAOY2hlY2tfZnVuY3Rpb24SJQogA2ZvbxIcQSB1bmlxdWUgbmFtZSBmb3IgdGhpcyBydWxlLiABGowBUnVucyBzb21lIGNoZWNrcyBvbiB0aGUgZ2l2ZW4gZnVuY3Rpb24gcGFyYW1ldGVyLgo=