Li4gU2VxdWVuY2VzL0ludHJpbnNpYyBNZXRhZnVuY3Rpb25zLy9lbXB0eQoKZW1wdHkKPT09PT0KClN5bm9wc2lzCi0tLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgIHRlbXBsYXRlPAogICAgICAgICAgdHlwZW5hbWUgU2VxdWVuY2UKICAgICAgICA+CiAgICBzdHJ1Y3QgZW1wdHkKICAgIHsKICAgICAgICB0eXBlZGVmIHx1bnNwZWNpZmllZHwgdHlwZTsKICAgIH07CgoKCkRlc2NyaXB0aW9uCi0tLS0tLS0tLS0tCgpSZXR1cm5zIGFuIHxJbnRlZ3JhbCBDb25zdGFudHwgYGBjYGAgc3VjaCB0aGF0IGBgYzo6dmFsdWUgPT0gdHJ1ZWBgIGlmIAphbmQgb25seSBpZiB0aGUgc2VxdWVuY2UgaXMgZW1wdHkuCgoKSGVhZGVyCi0tLS0tLQoKLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgCiAgICAjaW5jbHVkZSA8Ym9vc3QvbXBsL2VtcHR5LmhwcD4KCgpNb2RlbCBvZgotLS0tLS0tLQoKfFRhZyBEaXNwYXRjaGVkIE1ldGFmdW5jdGlvbnwKCgpQYXJhbWV0ZXJzCi0tLS0tLS0tLS0KCistLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgUGFyYW1ldGVyICAgICB8IFJlcXVpcmVtZW50ICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICB8Cis9PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCnwgYGBTZXF1ZW5jZWBgICB8IHxGb3J3YXJkIFNlcXVlbmNlfCAgICB8IEEgc2VxdWVuY2UgdG8gdGVzdC4gICAgICAgICAgICAgICB8CistLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCgoKRXhwcmVzc2lvbiBzZW1hbnRpY3MKLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkZvciBhbnkgfEZvcndhcmQgU2VxdWVuY2V8IGBgc2BgOgoKCi4uIHBhcnNlZC1saXRlcmFsOjoKCiAgICB0eXBlZGVmIGVtcHR5PHM+Ojp0eXBlIGM7IAoKOlJldHVybiB0eXBlOgogICAgQm9vbGVhbiB8SW50ZWdyYWwgQ29uc3RhbnR8LgoKOlNlbWFudGljczoKICAgIEVxdWl2YWxlbnQgdG8gYGB0eXBlZGVmIGlzX3NhbWU8IGJlZ2luPHM+Ojp0eXBlLGVuZDxzPjo6dHlwZSA+Ojp0eXBlIGM7YGAuCgo6UG9zdGNvbmRpdGlvbjoKICAgIGBgZW1wdHk8cz46OnZhbHVlID09ICggc2l6ZTxzPjo6dmFsdWUgPT0gMCApYGAuCgoKCkNvbXBsZXhpdHkKLS0tLS0tLS0tLQoKQW1vcnRpemVkIGNvbnN0YW50IHRpbWUuCgoKRXhhbXBsZQotLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgIHR5cGVkZWYgcmFuZ2VfYzxpbnQsMCwwPiBlbXB0eV9yYW5nZTsKICAgIHR5cGVkZWYgdmVjdG9yPGxvbmcsZmxvYXQsZG91YmxlPiB0eXBlczsKICAgIAogICAgQk9PU1RfTVBMX0FTU0VSVCggZW1wdHk8ZW1wdHlfcmFuZ2U+ICk7CiAgICBCT09TVF9NUExfQVNTRVJUX05PVCggZW1wdHk8dHlwZXM+ICk7CgoKU2VlIGFsc28KLS0tLS0tLS0KCnxGb3J3YXJkIFNlcXVlbmNlfCwgfEludGVncmFsIENvbnN0YW50fCwgfHNpemV8LCB8YmVnaW58IC8gfGVuZHwKCgouLiBjb3B5cmlnaHQ6OiBDb3B5cmlnaHQgqSAgMjAwMS0yMDA5IEFsZWtzZXkgR3VydG92b3kgYW5kIERhdmlkIEFicmFoYW1zCiAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKICAgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCg==