Li4gU2VxdWVuY2VzL0ludHJpbnNpYyBNZXRhZnVuY3Rpb25zLy9pc19zZXF1ZW5jZQoKaXNfc2VxdWVuY2UKPT09PT09PT09PT0KClN5bm9wc2lzCi0tLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgIHRlbXBsYXRlPAogICAgICAgICAgdHlwZW5hbWUgWAogICAgICAgID4KICAgIHN0cnVjdCBpc19zZXF1ZW5jZQogICAgewogICAgICAgIHR5cGVkZWYgfHVuc3BlY2lmaWVkfCB0eXBlOwogICAgfTsKCgoKRGVzY3JpcHRpb24KLS0tLS0tLS0tLS0KClJldHVybnMgYSBib29sZWFuIHxJbnRlZ3JhbCBDb25zdGFudHwgYGBjYGAgc3VjaCB0aGF0IGBgYzo6dmFsdWUgPT0gdHJ1ZWBgIGlmIGFuZCAKb25seSBpZiBgYFhgYCBpcyBhIG1vZGVsIG9mIHxGb3J3YXJkIFNlcXVlbmNlfC4KCgpIZWFkZXIKLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgICNpbmNsdWRlIDxib29zdC9tcGwvaXNfc2VxdWVuY2UuaHBwPgoKClBhcmFtZXRlcnMKLS0tLS0tLS0tLQoKKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwp8IFBhcmFtZXRlciAgICAgfCBSZXF1aXJlbWVudCAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cis9PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKfCBgYFhgYCAgICAgICAgIHwgQW55IHR5cGUgICAgICAgICAgfCBUaGUgdHlwZSB0byBxdWVyeS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCgoKRXhwcmVzc2lvbiBzZW1hbnRpY3MKLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgouLiBwYXJzZWQtbGl0ZXJhbDo6CgogICAgdHlwZWRlZiBpc19zZXF1ZW5jZTxYPjo6dHlwZSBjOyAKCjpSZXR1cm4gdHlwZToKICAgIEJvb2xlYW4gfEludGVncmFsIENvbnN0YW50fC4KCjpTZW1hbnRpY3M6CiAgICBFcXVpdmFsZW50IHRvIAoKICAgIC4uIHBhcnNlZC1saXRlcmFsOjoKICAgIAogICAgICAgIHR5cGVkZWYgbm90XzwgaXNfc2FtZTwgYmVnaW48VD46OnR5cGUsdm9pZF8gPiA+Ojp0eXBlIGM7CgoKCkNvbXBsZXhpdHkKLS0tLS0tLS0tLQoKQW1vcnRpemVkIGNvbnN0YW50IHRpbWUuCgoKRXhhbXBsZQotLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgIHN0cnVjdCBVRFQge307CgogICAgQk9PU1RfTVBMX0FTU0VSVF9OT1QoKCBpc19zZXF1ZW5jZTwgc3RkOjp2ZWN0b3I8aW50PiA+ICkpOwogICAgQk9PU1RfTVBMX0FTU0VSVF9OT1QoKCBpc19zZXF1ZW5jZTwgaW50ID4gKSk7CiAgICBCT09TVF9NUExfQVNTRVJUX05PVCgoIGlzX3NlcXVlbmNlPCBpbnQmID4gKSk7CiAgICBCT09TVF9NUExfQVNTRVJUX05PVCgoIGlzX3NlcXVlbmNlPCBVRFQgPiApKTsKICAgIEJPT1NUX01QTF9BU1NFUlRfTk9UKCggaXNfc2VxdWVuY2U8IFVEVCogPiApKTsKICAgIEJPT1NUX01QTF9BU1NFUlQoKCBpc19zZXF1ZW5jZTwgcmFuZ2VfYzxpbnQsMCwwPiA+ICkpOwogICAgQk9PU1RfTVBMX0FTU0VSVCgoIGlzX3NlcXVlbmNlPCBsaXN0PD4gPiApKTsKICAgIEJPT1NUX01QTF9BU1NFUlQoKCBpc19zZXF1ZW5jZTwgbGlzdDxpbnQ+ID4gKSk7CiAgICBCT09TVF9NUExfQVNTRVJUKCggaXNfc2VxdWVuY2U8IHZlY3Rvcjw+ID4gKSk7CiAgICBCT09TVF9NUExfQVNTRVJUKCggaXNfc2VxdWVuY2U8IHZlY3RvcjxpbnQ+ID4gKSk7CgoKU2VlIGFsc28KLS0tLS0tLS0KCnxGb3J3YXJkIFNlcXVlbmNlfCwgfGJlZ2lufCwgfGVuZHwsIHx2ZWN0b3J8LCB8bGlzdHwsIHxyYW5nZV9jfAoKCi4uIGNvcHlyaWdodDo6IENvcHlyaWdodCCpICAyMDAxLTIwMDkgQWxla3NleSBHdXJ0b3ZveSBhbmQgRGF2aWQgQWJyYWhhbXMKICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwogICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkK