Li4gU2VxdWVuY2VzL0ludHJpbnNpYyBNZXRhZnVuY3Rpb25zLy9lbmQKCmVuZAo9PT0KClN5bm9wc2lzCi0tLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgIHRlbXBsYXRlPAogICAgICAgICAgdHlwZW5hbWUgWAogICAgICAgID4KICAgIHN0cnVjdCBlbmQKICAgIHsKICAgICAgICB0eXBlZGVmIHx1bnNwZWNpZmllZHwgdHlwZTsKICAgIH07CgoKCkRlc2NyaXB0aW9uCi0tLS0tLS0tLS0tCgpSZXR1cm5zIHRoZSBzZXF1ZW5jZSdzIHBhc3QtdGhlLWVuZCBpdGVyYXRvci4gSWYgdGhlIGFyZ3VtZW50IGlzIG5vdCBhIAp8Rm9yd2FyZCBTZXF1ZW5jZXwsIHJldHVybnMgfHZvaWRffC4KCgpIZWFkZXIKLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgICNpbmNsdWRlIDxib29zdC9tcGwvYmVnaW5fZW5kLmhwcD4KCgpNb2RlbCBvZgotLS0tLS0tLQoKfFRhZyBEaXNwYXRjaGVkIE1ldGFmdW5jdGlvbnwKCgpQYXJhbWV0ZXJzCi0tLS0tLS0tLS0KCistLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBQYXJhbWV0ZXIgICAgIHwgUmVxdWlyZW1lbnQgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorPT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCnwgYGBYYGAgICAgICAgICB8IEFueSB0eXBlICAgICAgICAgIHwgQSB0eXBlIHdob3NlIGVuZCBpdGVyYXRvciwgaWYgYW55LCB3aWxsIGJlICAgIHwKfCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCByZXR1cm5lZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCgoKRXhwcmVzc2lvbiBzZW1hbnRpY3MKLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkZvciBhbnkgYXJiaXRyYXJ5IHR5cGUgYGB4YGA6CgouLiBwYXJzZWQtbGl0ZXJhbDo6CgogICAgdHlwZWRlZiBlbmQ8eD46OnR5cGUgbGFzdDsgCgo6UmV0dXJuIHR5cGU6CiAgICB8Rm9yd2FyZCBJdGVyYXRvcnwgb3IgfHZvaWRffC4KCjpTZW1hbnRpY3M6CiAgICBJZiBgYHhgYCBpcyB8Rm9yd2FyZCBTZXF1ZW5jZXwsIGBgbGFzdGBgIGlzIGFuIGl0ZXJhdG9yIHBvaW50aW5nIG9uZSBwYXN0IHRoZSAKICAgIGxhc3QgZWxlbWVudCBpbiBgYHNgYDsgb3RoZXJ3aXNlIGBgbGFzdGBgIGlzIHx2b2lkX3wuCgo6UG9zdGNvbmRpdGlvbjoKICAgIElmIGBgbGFzdGBgIGlzIGFuIGl0ZXJhdG9yLCBpdCBpcyBwYXN0LXRoZS1lbmQuIAoKCkNvbXBsZXhpdHkKLS0tLS0tLS0tLQoKQW1vcnRpemVkIGNvbnN0YW50IHRpbWUuCgoKRXhhbXBsZQotLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgIHR5cGVkZWYgdmVjdG9yPGxvbmc+IHY7CiAgICB0eXBlZGVmIGJlZ2luPHY+Ojp0eXBlIGZpcnN0OwogICAgdHlwZWRlZiBlbmQ8dj46OnR5cGUgbGFzdDsKCiAgICBCT09TVF9NUExfQVNTRVJUKCggaXNfc2FtZTwgbmV4dDxmaXJzdD46OnR5cGUsIGxhc3QgPiApKTsKCgpTZWUgYWxzbwotLS0tLS0tLQoKfEl0ZXJhdG9yc3wsIHxGb3J3YXJkIFNlcXVlbmNlfCwgfGJlZ2lufCwgfGVuZHwsIHxuZXh0fAoKCi4uIGNvcHlyaWdodDo6IENvcHlyaWdodCCpICAyMDAxLTIwMDkgQWxla3NleSBHdXJ0b3ZveSBhbmQgRGF2aWQgQWJyYWhhbXMKICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwogICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkK