Li4gTWV0YWZ1bmN0aW9ucy9Bcml0aG1ldGljIE9wZXJhdGlvbnMvL3RpbWVzIHwzMAoKdGltZXMKPT09PT0KClN5bm9wc2lzCi0tLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgIHRlbXBsYXRlPAogICAgICAgICAgdHlwZW5hbWUgVDEKICAgICAgICAsIHR5cGVuYW1lIFQyCiAgICAgICAgLCB0eXBlbmFtZSBUMyA9IHx1bnNwZWNpZmllZHwKICAgICAgICB8Li4ufAogICAgICAgICwgdHlwZW5hbWUgVFwgKm4qID0gfHVuc3BlY2lmaWVkfAogICAgICAgID4KICAgIHN0cnVjdCB0aW1lcwogICAgewogICAgICAgIHR5cGVkZWYgfHVuc3BlY2lmaWVkfCB0eXBlOwogICAgfTsKCgoKRGVzY3JpcHRpb24KLS0tLS0tLS0tLS0KClJldHVybnMgdGhlIHByb2R1Y3Qgb2YgaXRzIGFyZ3VtZW50cy4KCgpIZWFkZXIKLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgICNpbmNsdWRlIDxib29zdC9tcGwvdGltZXMuaHBwPgogICAgI2luY2x1ZGUgPGJvb3N0L21wbC9hcml0aG1ldGljLmhwcD4KCgpNb2RlbCBvZgotLS0tLS0tLQoKfE51bWVyaWMgTWV0YWZ1bmN0aW9ufAoKClBhcmFtZXRlcnMKLS0tLS0tLS0tLQoKKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgUGFyYW1ldGVyICAgICB8IFJlcXVpcmVtZW50ICAgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorPT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKfCB8VDEuLi5UbnwgICAgIHwgfEludGVncmFsIENvbnN0YW50fCAgICAgICB8IE9wZXJhdGlvbidzIGFyZ3VtZW50cy4gICAgICAgICAgICAgICAgICAgICAgICB8CistLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwoKfE5vdGU6fCB8bnVtZXJpYyBtZXRhZnVuY3Rpb24gbm90ZXwgfC0tIGVuZCBub3RlfAoKCkV4cHJlc3Npb24gc2VtYW50aWNzCi0tLS0tLS0tLS0tLS0tLS0tLS0tCgpGb3IgYW55IHxJbnRlZ3JhbCBDb25zdGFudHxcIHMgfGMxLi4uY258OgoKCi4uIHBhcnNlZC1saXRlcmFsOjoKCiAgICB0eXBlZGVmIHRpbWVzPGMxLFwgfC4uLnxcIGNcICpuKlw+Ojp0eXBlIHI7IAoKOlJldHVybiB0eXBlOgogICAgfEludGVncmFsIENvbnN0YW50fC4KCjpTZW1hbnRpY3M6CiAgICBFcXVpdmFsZW50IHRvIAogICAgICAgIAogICAgLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgCiAgICAgICAgdHlwZWRlZiBpbnRlZ3JhbF9jPAogICAgICAgICAgICAgIHR5cGVvZihjMTo6dmFsdWUgKiBjMjo6dmFsdWUpCiAgICAgICAgICAgICwgKCBjMTo6dmFsdWUgKiBjMjo6dmFsdWUgKQogICAgICAgICAgICA+IGM7CiAgICAgICAgICAgIAogICAgICAgIHR5cGVkZWYgdGltZXM8YyxjMyxcIHwuLi58XGNcICpuKlw+Ojp0eXBlIHI7IAoKLi4gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KCgouLiBwYXJzZWQtbGl0ZXJhbDo6CgogICAgdHlwZWRlZiB0aW1lczxjMSxcIHwuLi58XCBjXCAqbipcPiByOwoKOlJldHVybiB0eXBlOgogICAgfEludGVncmFsIENvbnN0YW50fC4KCjpTZW1hbnRpY3M6CiAgICBFcXVpdmFsZW50IHRvIAogICAgICAgIAogICAgLi4gcGFyc2VkLWxpdGVyYWw6OgoKICAgICAgICBzdHJ1Y3QgciA6IHRpbWVzPGMxLFwgfC4uLnxcIGNcICpuKlw+Ojp0eXBlIHt9OwoKCkNvbXBsZXhpdHkKLS0tLS0tLS0tLQoKQW1vcnRpemVkIGNvbnN0YW50IHRpbWUuCgoKRXhhbXBsZQotLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgIHR5cGVkZWYgdGltZXM8IGludF88LTEwPiwgaW50XzwzPiwgbG9uZ188MT4gPjo6dHlwZSByOwogICAgQk9PU1RfTVBMX0FTU0VSVF9SRUxBVElPTiggcjo6dmFsdWUsID09LCAtMzAgKTsKICAgIEJPT1NUX01QTF9BU1NFUlQoKCBpc19zYW1lPCByOjp2YWx1ZV90eXBlLCBsb25nID4gKSk7CgoKU2VlIGFsc28KLS0tLS0tLS0KCnxNZXRhZnVuY3Rpb25zfCwgfE51bWVyaWMgTWV0YWZ1bmN0aW9ufCwgfG51bWVyaWNfY2FzdHwsIHxkaXZpZGVzfCwgfG1vZHVsdXN8LCB8cGx1c3wKCgouLiBjb3B5cmlnaHQ6OiBDb3B5cmlnaHQgqSAgMjAwMS0yMDA5IEFsZWtzZXkgR3VydG92b3kgYW5kIERhdmlkIEFicmFoYW1zCiAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKICAgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCg==