Li4gU2VxdWVuY2VzL0ludHJpbnNpYyBNZXRhZnVuY3Rpb25zLy92YWx1ZV90eXBlCgp2YWx1ZV90eXBlCj09PT09PT09PT0KClN5bm9wc2lzCi0tLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgIHRlbXBsYXRlPAogICAgICAgICAgdHlwZW5hbWUgU2VxdWVuY2UKICAgICAgICAsIHR5cGVuYW1lIFgKICAgICAgICA+CiAgICBzdHJ1Y3QgdmFsdWVfdHlwZQogICAgewogICAgICAgIHR5cGVkZWYgfHVuc3BlY2lmaWVkfCB0eXBlOwogICAgfTsKCgoKRGVzY3JpcHRpb24KLS0tLS0tLS0tLS0KClJldHVybnMgdGhlIHx2YWx1ZXwgdGhhdCB3b3VsZCBiZSB1c2VkIGZvciBlbGVtZW50IGBgWGBgIGluIGBgU2VxdWVuY2VgYC4KCgpIZWFkZXIKLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgICNpbmNsdWRlIDxib29zdC9tcGwvdmFsdWVfdHlwZS5ocHA+CgoKTW9kZWwgb2YKLS0tLS0tLS0KCnxUYWcgRGlzcGF0Y2hlZCBNZXRhZnVuY3Rpb258CgoKUGFyYW1ldGVycwotLS0tLS0tLS0tCgorLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBQYXJhbWV0ZXIgICAgIHwgUmVxdWlyZW1lbnQgICAgICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cis9PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kwp8IGBgU2VxdWVuY2VgYCAgfCB8QXNzb2NpYXRpdmUgU2VxdWVuY2V8ICAgIHwgQSBzZXF1ZW5jZSB0byBxdWVyeS4gICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgYGBYYGAgICAgICAgICB8IEFueSB0eXBlICAgICAgICAgICAgICAgICAgfCBUaGUgdHlwZSB0byBnZXQgdGhlIHx2YWx1ZXwgZm9yLiAgICAgICAgICAgICAgfAorLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKCgpFeHByZXNzaW9uIHNlbWFudGljcwotLS0tLS0tLS0tLS0tLS0tLS0tLQoKRm9yIGFueSB8QXNzb2NpYXRpdmUgU2VxdWVuY2V8IGBgc2BgLCBhbmQgYW4gYXJ0aWJyYXJ5IHR5cGUgYGB4YGA6CgoKLi4gcGFyc2VkLWxpdGVyYWw6OgoKICAgIHR5cGVkZWYgdmFsdWVfdHlwZTxzLHg+Ojp0eXBlIHY7IAoKOlJldHVybiB0eXBlOgogICAgQSB0eXBlLgogICAgCjpQcmVjb25kaXRpb246CiAgICBgYHhgYCBjYW4gYmUgcHV0IGluIGBgc2BgLgoKOlNlbWFudGljczoKICAgIGBgdmBgIGlzIHRoZSB8dmFsdWV8IHRoYXQgd291bGQgYmUgdXNlZCBmb3IgYGB4YGAgaW4gYGBzYGAuCgo6UG9zdGNvbmRpdGlvbjoKICAgIElmICAgICAKICAgIC4uIHBhcnNlZC1saXRlcmFsOjoKICAgICAgIAogICAgICAgaGFzX2tleTwgcyxrZXlfdHlwZTxzLHg+Ojp0eXBlID46OnR5cGUKICAgIAogICAgdGhlbgogICAgLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgCiAgICAgICBhdDwgcyxrZXlfdHlwZTxzLHg+Ojp0eXBlID46OnR5cGUKICAgIAogICAgaXMgaWRlbnRpY2FsIHRvIGBgdmFsdWVfdHlwZTxzLHg+Ojp0eXBlYGAuCgoKCkNvbXBsZXhpdHkKLS0tLS0tLS0tLQoKQW1vcnRpemVkIGNvbnN0YW50IHRpbWUuCgoKRXhhbXBsZQotLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgIHR5cGVkZWYgdmFsdWVfdHlwZTwgbWFwPD4scGFpcjxpbnQsdW5zaWduZWQ+ID46OnR5cGUgdjE7CiAgICB0eXBlZGVmIHZhbHVlX3R5cGU8IHNldDw+LHBhaXI8aW50LHVuc2lnbmVkPiA+Ojp0eXBlIHYyOwoKICAgIEJPT1NUX01QTF9BU1NFUlQoKCBpc19zYW1lPCB2MSx1bnNpZ25lZCA+ICkpOwogICAgQk9PU1RfTVBMX0FTU0VSVCgoIGlzX3NhbWU8IHYyLHBhaXI8aW50LHVuc2lnbmVkPiA+ICkpOwoKClNlZSBhbHNvCi0tLS0tLS0tCgp8QXNzb2NpYXRpdmUgU2VxdWVuY2V8LCB8a2V5X3R5cGV8LCB8YXR8LCB8c2V0fCwgfG1hcHwKCgouLiBjb3B5cmlnaHQ6OiBDb3B5cmlnaHQgqSAgMjAwMS0yMDA5IEFsZWtzZXkgR3VydG92b3kgYW5kIERhdmlkIEFicmFoYW1zCiAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKICAgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCg==