ZGlmZiAtLWdpdCBhL2phdmEvY29tL2FuZHJvaWQvdmNhcmQvVkNhcmRQYXJzZXJJbXBsX1YyMS5qYXZhIGIvamF2YS9jb20vYW5kcm9pZC92Y2FyZC9WQ2FyZFBhcnNlckltcGxfVjIxLmphdmEKaW5kZXggMzg2ZDYyNi4uZTg2NTVhOCAxMDA2NDQKLS0tIGEvamF2YS9jb20vYW5kcm9pZC92Y2FyZC9WQ2FyZFBhcnNlckltcGxfVjIxLmphdmEKKysrIGIvamF2YS9jb20vYW5kcm9pZC92Y2FyZC9WQ2FyZFBhcnNlckltcGxfVjIxLmphdmEKQEAgLTY4NSw4ICs2ODUsOCBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBBcnJheUxpc3Q8U3RyaW5nPiBwcm9wZXJ0eVZhbHVlTGlzdCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOwotICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gVkNhcmRVdGlscy5jb252ZXJ0U3RyaW5nQ2hhcnNldCgKLSAgICAgICAgICAgICAgICAgICAgbWF5YmVVbmVzY2FwZVRleHQocHJvcGVydHlSYXdWYWx1ZSksIHNvdXJjZUNoYXJzZXQsIHRhcmdldENoYXJzZXQpOworICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gbWF5YmVVbmVzY2FwZVRleHQoVkNhcmRVdGlscy5jb252ZXJ0U3RyaW5nQ2hhcnNldCgKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlSYXdWYWx1ZSwgc291cmNlQ2hhcnNldCwgdGFyZ2V0Q2hhcnNldCkpOwogICAgICAgICAgICAgcHJvcGVydHlWYWx1ZUxpc3QuYWRkKHZhbHVlKTsKICAgICAgICAgICAgIHByb3BlcnR5LnNldFZhbHVlcyhwcm9wZXJ0eVZhbHVlTGlzdCk7CiAgICAgICAgICAgICBmb3IgKFZDYXJkSW50ZXJwcmV0ZXIgaW50ZXJwcmV0ZXIgOiBtSW50ZXJwcmV0ZXJMaXN0KSB7CkBAIC03MjAsMTIgKzcyMCwxMiBAQAogICAgICAgICAgICAgICAgIGVuY29kZWRWYWx1ZUxpc3QuYWRkKGVuY29kZWQpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZmluYWwgU3RyaW5nIHByb3BlcnR5VmFsdWUgPSBnZXRQb3RlbnRpYWxNdWx0aWxpbmUocHJvcGVydHlSYXdWYWx1ZSk7Ci0gICAgICAgICAgICBmaW5hbCBMaXN0PFN0cmluZz4gcmF3VmFsdWVMaXN0ID0KKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyBwcm9wZXJ0eVZhbHVlID0gVkNhcmRVdGlscy5jb252ZXJ0U3RyaW5nQ2hhcnNldCgKKyAgICAgICAgICAgICAgICAgICAgZ2V0UG90ZW50aWFsTXVsdGlsaW5lKHByb3BlcnR5UmF3VmFsdWUpLCBzb3VyY2VDaGFyc2V0LCB0YXJnZXRDaGFyc2V0KTsKKyAgICAgICAgICAgIGZpbmFsIExpc3Q8U3RyaW5nPiB2YWx1ZUxpc3QgPQogICAgICAgICAgICAgICAgICAgICBWQ2FyZFV0aWxzLmNvbnN0cnVjdExpc3RGcm9tVmFsdWUocHJvcGVydHlWYWx1ZSwgZ2V0VmVyc2lvbigpKTsKLSAgICAgICAgICAgIGZvciAoU3RyaW5nIHJhd1ZhbHVlIDogcmF3VmFsdWVMaXN0KSB7Ci0gICAgICAgICAgICAgICAgZW5jb2RlZFZhbHVlTGlzdC5hZGQoVkNhcmRVdGlscy5jb252ZXJ0U3RyaW5nQ2hhcnNldCgKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhd1ZhbHVlLCBzb3VyY2VDaGFyc2V0LCB0YXJnZXRDaGFyc2V0KSk7CisgICAgICAgICAgICBmb3IgKFN0cmluZyB2YWx1ZSA6IHZhbHVlTGlzdCkgeworICAgICAgICAgICAgICAgIGVuY29kZWRWYWx1ZUxpc3QuYWRkKHZhbHVlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCmRpZmYgLS1naXQgYS90ZXN0cy9yZXMvcmF3L3YyMV9qYXBhbmVzZV8zLnZjZiBiL3Rlc3RzL3Jlcy9yYXcvdjIxX2phcGFuZXNlXzMudmNmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1NDEyNGQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXMvcmF3L3YyMV9qYXBhbmVzZV8zLnZjZgpAQCAtMCwwICsxLDUgQEAKK0JFR0lOOlZDQVJECitWRVJTSU9OOjIuMQorRk47Q0hBUlNFVD1TSElGVF9KSVM6iMmUXCCMXIjqIIjJl1wKK047Q0hBUlNFVD1TSElGVF9KSVM6iMmUXDuMXIjqO4jJl1w7OworRU5EOlZDQVJECmRpZmYgLS1naXQgYS90ZXN0cy9yZXMvcmF3L3YzMF9qYXBhbmVzZS52Y2YgYi90ZXN0cy9yZXMvcmF3L3YzMF9qYXBhbmVzZS52Y2YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFiNzY3NAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3Jlcy9yYXcvdjMwX2phcGFuZXNlLnZjZgpAQCAtMCwwICsxLDUgQEAKK0JFR0lOOlZDQVJECitWRVJTSU9OOjMuMAorRk47Q0hBUlNFVD1TSElGVF9KSVM6iMmUXCCMXIjqIIjJl1wKK047Q0hBUlNFVD1TSElGVF9KSVM6iMmUXDuMXIjqO4jJl1w7OworRU5EOlZDQVJECmRpZmYgLS1naXQgYS90ZXN0cy9zcmMvY29tL2FuZHJvaWQvdmNhcmQvdGVzdHMvVkNhcmRJbXBvcnRlclRlc3RzLmphdmEgYi90ZXN0cy9zcmMvY29tL2FuZHJvaWQvdmNhcmQvdGVzdHMvVkNhcmRJbXBvcnRlclRlc3RzLmphdmEKaW5kZXggMTJhZGRkNi4uNjA5MTgyNiAxMDA2NDQKLS0tIGEvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL3ZjYXJkL3Rlc3RzL1ZDYXJkSW1wb3J0ZXJUZXN0cy5qYXZhCisrKyBiL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC92Y2FyZC90ZXN0cy9WQ2FyZEltcG9ydGVyVGVzdHMuamF2YQpAQCAtODY5LDYgKzg2OSwzOSBAQAogICAgICAgICAgICAgICAgIC5wdXQoTm90ZS5OT1RFLCAiXHUzMEUxXHUzMEUyIik7CiAgICAgfQogCisgICAgcHVibGljIHZvaWQgdGVzdFYyMUphcGFuZXNlM19QYXJzaW5nKCkgeworICAgICAgICBtVmVyaWZpZXIuaW5pdEZvckltcG9ydFRlc3QoVkNhcmRDb25maWcuVkNBUkRfVFlQRV9WMjFfSkFQQU5FU0UsIFIucmF3LnYyMV9qYXBhbmVzZV8zKTsKKyAgICAgICAgbVZlcmlmaWVyLmFkZFByb3BlcnR5Tm9kZXNWZXJpZmllckVsZW0oKQorICAgICAgICAgICAgICAgIC5hZGRFeHBlY3RlZE5vZGVXaXRoT3JkZXIoIk4iLCAiXHU0ZjBhXHU4MGZkO1x1NTcyZFx1NGUwMDtcdTRmMGFcdTRlODg7OyIsCisgICAgICAgICAgICAgICAgICAgICAgICBBcnJheXMuYXNMaXN0KCJcdTRmMGFcdTgwZmQiLCAiXHU1NzJkXHU0ZTAwIiwgIlx1NGYwYVx1NGU4OCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiLCAiIiksCisgICAgICAgICAgICAgICAgICAgICAgICBudWxsLCBtQ29udGVudFZhbHVlc0ZvclNKaXMsIG51bGwsIG51bGwpCisgICAgICAgICAgICAgICAgLmFkZEV4cGVjdGVkTm9kZVdpdGhPcmRlcigiRk4iLCAiXHU0ZjBhXHU4MGZkXHUwMDIwXHU1NzJkXHU0ZTAwXHUwMDIwXHU0ZjBhXHU0ZTg4IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsIG51bGwsIG1Db250ZW50VmFsdWVzRm9yU0ppcywgbnVsbCwgbnVsbCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdFYyMUphcGFuZXNlM19QYXJzaW5nX1V0ZjgoKSB7CisgICAgICAgIG1WZXJpZmllci5pbml0Rm9ySW1wb3J0VGVzdChWMjEsIFIucmF3LnYyMV9qYXBhbmVzZV8zKTsKKyAgICAgICAgbVZlcmlmaWVyLmFkZFByb3BlcnR5Tm9kZXNWZXJpZmllckVsZW0oKQorICAgICAgICAgICAgICAgIC5hZGRFeHBlY3RlZE5vZGVXaXRoT3JkZXIoIk4iLCAiXHU0ZjBhXHU4MGZkO1x1NTcyZFx1NGUwMDtcdTRmMGFcdTRlODg7OyIsCisgICAgICAgICAgICAgICAgICAgICAgICBBcnJheXMuYXNMaXN0KCJcdTRmMGFcdTgwZmQiLCAiXHU1NzJkXHU0ZTAwIiwgIlx1NGYwYVx1NGU4OCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiLCAiIiksCisgICAgICAgICAgICAgICAgICAgICAgICBudWxsLCBtQ29udGVudFZhbHVlc0ZvclNKaXMsIG51bGwsIG51bGwpCisgICAgICAgICAgICAgICAgLmFkZEV4cGVjdGVkTm9kZVdpdGhPcmRlcigiRk4iLCAiXHU0ZjBhXHU4MGZkXHUwMDIwXHU1NzJkXHU0ZTAwXHUwMDIwXHU0ZjBhXHU0ZTg4IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsIG51bGwsIG1Db250ZW50VmFsdWVzRm9yU0ppcywgbnVsbCwgbnVsbCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdFYzMEphcGFuZXNlX1BhcnNpbmcoKSB7CisgICAgICAgIG1WZXJpZmllci5pbml0Rm9ySW1wb3J0VGVzdChWMzAsIFIucmF3LnYzMF9qYXBhbmVzZSk7CisgICAgICAgIG1WZXJpZmllci5hZGRQcm9wZXJ0eU5vZGVzVmVyaWZpZXJFbGVtKCkKKyAgICAgICAgICAgICAgICAuYWRkRXhwZWN0ZWROb2RlV2l0aE9yZGVyKCJOIiwgIlx1NGYwYVx1ODBmZDtcdTU3MmRcdTRlMDA7XHU0ZjBhXHU0ZTg4OzsiLAorICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXlzLmFzTGlzdCgiXHU0ZjBhXHU4MGZkIiwgIlx1NTcyZFx1NGUwMCIsICJcdTRmMGFcdTRlODgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiwgIiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwgbUNvbnRlbnRWYWx1ZXNGb3JTSmlzLCBudWxsLCBudWxsKQorICAgICAgICAgICAgICAgIC5hZGRFeHBlY3RlZE5vZGVXaXRoT3JkZXIoIkZOIiwgIlx1NGYwYVx1ODBmZFx1MDAyMFx1NTcyZFx1NGUwMFx1MDAyMFx1NGYwYVx1NGU4OCIsCisgICAgICAgICAgICAgICAgICAgICAgICBudWxsLCBudWxsLCBtQ29udGVudFZhbHVlc0ZvclNKaXMsIG51bGwsIG51bGwpOworICAgIH0KKwogICAgIHB1YmxpYyB2b2lkIHRlc3RWMjFNdWx0aXBsZUVudHJ5Q2FzZV9QYXJzZSgpIHsKICAgICAgICAgbVZlcmlmaWVyLmluaXRGb3JJbXBvcnRUZXN0KFZDYXJkQ29uZmlnLlZDQVJEX1RZUEVfVjIxX0pBUEFORVNFLCBSLnJhdy52MjFfbXVsdGlwbGVfZW50cnkpOwogICAgICAgICBtVmVyaWZpZXIuYWRkUHJvcGVydHlOb2Rlc1ZlcmlmaWVyRWxlbSgpCg==