IyAtKi0gY29kaW5nOiBsYXRpbi0xIC0qLQojIENvcHlyaWdodCBHb3R0ZnJpZWQgR2Fu32F1Z2UgMjAwMy4uMjAwNi4gIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdAojIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwojIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQoKCiIiIgo+Pj4gZnJvbSBvcGFxdWVfZXh0IGltcG9ydCAqCgoKICAgIENoZWNrIGZvciBjb3JyZWN0IGNvbnZlcnNpb24KICAgIAo+Pj4gdXNlKGdldCgpKQoKICAgIENoZWNrIHRoYXQgTm9uZSBpcyBjb252ZXJ0ZWQgdG8gYSBOVUxMIG9wYXF1ZSBwb2ludGVyCiAgICAKPj4+IHVzZWFueShnZXQoKSkKMQo+Pj4gdXNlYW55KE5vbmUpCjAKCiAgICBDaGVjayB0aGF0IHdlIGRvbid0IGxvc2UgdHlwZSBpbmZvcm1hdGlvbiBieSBjb252ZXJ0aW5nIE5VTEwKICAgIG9wYXF1ZSBwb2ludGVycyB0byBOb25lCiAgICAKPj4+IGFzc2VydCBnZXRudWxsKCkgaXMgTm9uZQo+Pj4gdXNlYW55KGdldG51bGwoKSkKMAoKPj4+IGZhaWx1c2UoZ2V0KCkpClRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgICAgICAuLi4KUnVudGltZUVycm9yOiBzdWNjZXNzCgogICBDaGVjayB0aGF0IHRoZXJlIGlzIG5vIGNvbnZlcnNpb24gZnJvbSBpbnRlZ2VycyAuLi4KICAgCj4+PiB0cnk6IHVzZSgwKQouLi4gZXhjZXB0IFR5cGVFcnJvcjogcGFzcwouLi4gZWxzZTogcHJpbnQgJ2V4cGVjdGVkIGEgVHlwZUVycm9yJwoKICAgLi4uIGFuZCBmcm9tIHN0cmluZ3MgdG8gb3BhcXVlIG9iamVjdHMKICAgCj4+PiB0cnk6IHVzZSgiIikKLi4uIGV4Y2VwdCBUeXBlRXJyb3I6IHBhc3MKLi4uIGVsc2U6IHByaW50ICdleHBlY3RlZCBhIFR5cGVFcnJvcicKCiAgIE5vdyBjaGVjayB0aGUgc2FtZSBmb3IgYW5vdGhlciBvcGFxdWUgcG9pbnRlciB0eXBlCiAgIAo+Pj4gdXNlMihnZXQyKCkpCj4+PiBmYWlsdXNlMihnZXQyKCkpClRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgICAgICAuLi4KUnVudGltZUVycm9yOiBzdWNjZXNzCj4+PiB0cnk6IHVzZTIoMCkKLi4uIGV4Y2VwdCBUeXBlRXJyb3I6IHBhc3MKLi4uIGVsc2U6IHByaW50ICdleHBlY3RlZCBhIFR5cGVFcnJvcicKPj4+IHRyeTogdXNlMigiIikKLi4uIGV4Y2VwdCBUeXBlRXJyb3I6IHBhc3MKLi4uIGVsc2U6IHByaW50ICdleHBlY3RlZCBhIFR5cGVFcnJvcicKCiAgIENoZWNrIHRoYXQgb3BhcXVlIHR5cGVzIGFyZSBkaXN0aW5jdAoKPj4+IHRyeTogdXNlKGdldDIoKSkKLi4uIGV4Y2VwdCBUeXBlRXJyb3I6IHBhc3MKLi4uIGVsc2U6IHByaW50ICdleHBlY3RlZCBhIFR5cGVFcnJvcicKPj4+IHRyeTogdXNlMihnZXQoKSkKLi4uIGV4Y2VwdCBUeXBlRXJyb3I6IHBhc3MKLi4uIGVsc2U6IHByaW50ICdleHBlY3RlZCBhIFR5cGVFcnJvcicKCiAgIFRoaXMgdXNlZCB0byByZXN1bHQgaW4gYSBzZWdtZW50YXRpb24gdmlvbGF0aW9uCgo+Pj4gdHlwZShnZXQoKSkgIT0gdHlwZSAoZ2V0MigpKQoxCiIiIgpkZWYgcnVuKGFyZ3MgPSBOb25lKToKICAgIGltcG9ydCBzeXMKICAgIGltcG9ydCBkb2N0ZXN0CgogICAgaWYgYXJncyBpcyBub3QgTm9uZToKICAgICAgICBzeXMuYXJndiA9IGFyZ3MKICAgIHJldHVybiBkb2N0ZXN0LnRlc3Rtb2Qoc3lzLm1vZHVsZXMuZ2V0KF9fbmFtZV9fKSkKICAgIAppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgcHJpbnQgInJ1bm5pbmcuLi4iCiAgICBpbXBvcnQgc3lzCiAgICBzdGF0dXMgPSBydW4oKVswXQogICAgaWYgKHN0YXR1cyA9PSAwKTogcHJpbnQgIkRvbmUuIgogICAgc3lzLmV4aXQoc3RhdHVzKQo=