Li4gTWV0YWZ1bmN0aW9ucy9JbnZvY2F0aW9uLy91bnBhY2tfYXJncyB8MzAKCnVucGFja19hcmdzCj09PT09PT09PT09CgpTeW5vcHNpcwotLS0tLS0tLQoKLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgCiAgICB0ZW1wbGF0ZTwgCiAgICAgICAgICB0eXBlbmFtZSBGCiAgICAgICAgPgogICAgc3RydWN0IHVucGFja19hcmdzCiAgICB7CiAgICAgICAgLy8gfHVuc3BlY2lmaWVkfAogICAgICAgIC8vIHwuLi58CiAgICB9OwoKCkRlc2NyaXB0aW9uCi0tLS0tLS0tLS0tCgpBIGhpZ2hlci1vcmRlciBwcmltaXRpdmUgdHJhbnNmb3JtaW5nIGFuICpuKi1hcnkgfExhbWJkYSBFeHByZXNzaW9ufCBgYEZgYCBpbnRvCmFuIHVuYXJ5IHxNZXRhZnVuY3Rpb24gQ2xhc3N8IGBgZ2BgIGFjY2VwdGluZyBhIHNpbmdsZSBzZXF1ZW5jZSBvZiAqbiogYXJndW1lbnRzLgoKCkhlYWRlcgotLS0tLS0KCi4uIHBhcnNlZC1saXRlcmFsOjoKICAgIAogICAgI2luY2x1ZGUgPGJvb3N0L21wbC91bnBhY2tfYXJncy5ocHA+CgoKTW9kZWwgb2YKLS0tLS0tLS0KCnxNZXRhZnVuY3Rpb24gQ2xhc3N8CgoKUGFyYW1ldGVycwotLS0tLS0tLS0tCgorLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgUGFyYW1ldGVyICAgICB8IFJlcXVpcmVtZW50ICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKz09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kwp8IGBgRmBgICAgICAgICAgfCB8TGFtYmRhIEV4cHJlc3Npb258ICAgfCBBIGxhbWJkYSBleHByZXNzaW9uIHRvIGFkb3B0LiAgICAgICAgICAgICB8CistLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKCgpFeHByZXNzaW9uIHNlbWFudGljcwotLS0tLS0tLS0tLS0tLS0tLS0tLQoKRm9yIGFuIGFyYml0cmFyeSB8TGFtYmRhIEV4cHJlc3Npb258IGBgZmBgLCBhbmQgYXJiaXRyYXJ5IHR5cGVzIHxhMS4uLmFufDoKCgouLiBwYXJzZWQtbGl0ZXJhbDo6CgogICAgdHlwZWRlZiB1bnBhY2tfYXJnczxmPiBnOwoKOlJldHVybiB0eXBlOgogICAgfE1ldGFmdW5jdGlvbiBDbGFzc3wuCgo6U2VtYW50aWNzOgogICAgYGBnYGAgaXMgYSB1bmFyeSB8TWV0YWZ1bmN0aW9uIENsYXNzfCBzdWNoIHRoYXQKICAgIAogICAgLi4gcGFyc2VkLWxpdGVyYWw6OgoKICAgICAgICBhcHBseV93cmFwXCAqbipcIDwgZywgdmVjdG9yPGExLFwgfC4uLnxcIGFcICpuKlwgPiA+Ojp0eXBlCiAgICAgICAKICAgIGlzIGlkZW50aWNhbCB0bwoKICAgIC4uIHBhcnNlZC1saXRlcmFsOjoKCiAgICAgICAgYXBwbHk8RixhMSxcIHwuLi58XCBhXCAqbipcID46OnR5cGUKCgpFeGFtcGxlCi0tLS0tLS0KCi4uIHBhcnNlZC1saXRlcmFsOjoKICAgIAogICAgQk9PU1RfTVBMX0FTU0VSVCgoIGFwcGx5PCAKICAgICAgICAgIHVucGFja19hcmdzPCBpc19zYW1lPF8xLF8yPiA+CiAgICAgICAgLCB2ZWN0b3I8aW50LGludD4KICAgICAgICA+ICkpOwoKClNlZSBhbHNvCi0tLS0tLS0tCgp8TWV0YWZ1bmN0aW9uc3wsIHxMYW1iZGEgRXhwcmVzc2lvbnwsIHxNZXRhZnVuY3Rpb24gQ2xhc3N8LCB8YXBwbHl8LCB8YXBwbHlfd3JhcHwsIHxiaW5kfAoKCi4uIGNvcHlyaWdodDo6IENvcHlyaWdodCCpICAyMDAxLTIwMDkgQWxla3NleSBHdXJ0b3ZveSBhbmQgRGF2aWQgQWJyYWhhbXMKICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwogICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkK