Li4gTWV0YWZ1bmN0aW9ucy9NaXNjZWxsYW5lb3VzLy9zaXplb2ZfIHwxMDAKCnNpemVvZlxfCj09PT09PT09CgpTeW5vcHNpcwotLS0tLS0tLQoKLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgCiAgICB0ZW1wbGF0ZTwKICAgICAgICAgIHR5cGVuYW1lIFgKICAgICAgICA+CiAgICBzdHJ1Y3Qgc2l6ZW9mXF8KICAgIHsKICAgICAgICB0eXBlZGVmIHx1bnNwZWNpZmllZHwgdHlwZTsKICAgIH07CgoKCkRlc2NyaXB0aW9uCi0tLS0tLS0tLS0tCgpSZXR1cm5zIHRoZSByZXN1bHQgb2YgYSBgYHNpemVvZihYKWBgIGV4cHJlc3Npb24gd3JhcHBlZCBpbnRvIGFuIAp8SW50ZWdyYWwgQ29uc3RhbnR8IG9mIHRoZSBjb3JyZXNwb25kaW5nIHR5cGUsIGBgc3RkOjpzaXplX3RgYC4KCgpIZWFkZXIKLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgICNpbmNsdWRlIDxib29zdC9tcGwvc2l6ZW9mLmhwcD4KCgpNb2RlbCBvZgotLS0tLS0tLQoKfE1ldGFmdW5jdGlvbnwKCgpQYXJhbWV0ZXJzCi0tLS0tLS0tLS0KCistLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwp8IFBhcmFtZXRlciAgICAgfCBSZXF1aXJlbWVudCAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKz09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCnwgYGBYYGAgICAgICAgICB8IEFueSB0eXBlICAgICAgICAgIHwgQSB0eXBlIHRvIGNvbXB1dGUgdGhlIGBgc2l6ZW9mYGAgZm9yLiAgICAgfAorLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKCgpFeHByZXNzaW9uIHNlbWFudGljcwotLS0tLS0tLS0tLS0tLS0tLS0tLQoKRm9yIGFuIGFyYml0cmFyeSB0eXBlIGBgeGBgOgoKCi4uIHBhcnNlZC1saXRlcmFsOjoKCiAgICB0eXBlZGVmIHNpemVvZl88eD46OnR5cGUgbjsgCgoKOlJldHVybiB0eXBlOgogICAgfEludGVncmFsIENvbnN0YW50fC4KCjpQcmVjb25kaXRpb246CiAgICBgYHhgYCBpcyBhIGNvbXBsZXRlIHR5cGUuCgo6U2VtYW50aWNzOgogICAgRXF1aXZhbGVudCB0bwogICAgICAgIAogICAgLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgCiAgICAgICAgdHlwZWRlZiBzaXplX3Q8IHNpemVvZih4KSA+IG47CgoKCkNvbXBsZXhpdHkKLS0tLS0tLS0tLQoKQ29uc3RhbnQgdGltZS4gCgoKRXhhbXBsZQotLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgIHN0cnVjdCB1ZHQgeyBjaGFyIGFbMTAwXTsgfTsKCiAgICBCT09TVF9NUExfQVNTRVJUX1JFTEFUSU9OKCBzaXplb2ZfPGNoYXI+Ojp2YWx1ZSwgPT0sIHNpemVvZihjaGFyKSApOwogICAgQk9PU1RfTVBMX0FTU0VSVF9SRUxBVElPTiggc2l6ZW9mXzxpbnQ+Ojp2YWx1ZSwgPT0sIHNpemVvZihpbnQpICk7CiAgICBCT09TVF9NUExfQVNTRVJUX1JFTEFUSU9OKCBzaXplb2ZfPGRvdWJsZT46OnZhbHVlLCA9PSwgc2l6ZW9mKGRvdWJsZSkgKTsKICAgIEJPT1NUX01QTF9BU1NFUlRfUkVMQVRJT04oIHNpemVvZl88dWR0Pjo6dmFsdWUsID09LCBzaXplb2YobXkpICk7CgoKU2VlIGFsc28KLS0tLS0tLS0KCnxNZXRhZnVuY3Rpb25zfCwgfEludGVncmFsIENvbnN0YW50fCwgfHNpemVfdHwKCgouLiBjb3B5cmlnaHQ6OiBDb3B5cmlnaHQgqSAgMjAwMS0yMDA5IEFsZWtzZXkgR3VydG92b3kgYW5kIERhdmlkIEFicmFoYW1zCiAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKICAgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCg==