Li4gRGF0YSBUeXBlcy9OdW1lcmljLy9pbnRfIHwyMAoKaW50XF8KPT09PT0KClN5bm9wc2lzCi0tLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgIHRlbXBsYXRlPAogICAgICAgICAgaW50IE4KICAgICAgICA+CiAgICBzdHJ1Y3QgaW50XF8KICAgIHsKICAgICAgICAvLyB8dW5zcGVjaWZpZWR8CiAgICAgICAgLy8gLi4uCiAgICB9OwoKCkRlc2NyaXB0aW9uCi0tLS0tLS0tLS0tCgpBbiB8SW50ZWdyYWwgQ29uc3RhbnR8IHdyYXBwZXIgZm9yIGBgaW50YGAuCgoKSGVhZGVyCi0tLS0tLQoKLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgCiAgICAjaW5jbHVkZSA8Ym9vc3QvbXBsL2ludC5ocHA+CgoKTW9kZWwgb2YKLS0tLS0tLS0KCnxJbnRlZ3JhbCBDb25zdGFudHwKCgpQYXJhbWV0ZXJzCi0tLS0tLS0tLS0KCistLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgUGFyYW1ldGVyICAgICB8IFJlcXVpcmVtZW50ICAgICAgICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICB8Cis9PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT0rCnwgYGBOYGAgICAgICAgICB8IEFuIGludGVncmFsIGNvbnN0YW50ICAgICAgICAgIHwgQSB2YWx1ZSB0byB3cmFwLiAgICAgICAgICB8IAorLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwoKRXhwcmVzc2lvbiBzZW1hbnRpY3MKLS0tLS0tLS0tLS0tLS0tLS0tLS0KCnxTZW1hbnRpY3MgZGlzY2xhaW1lci4uLnwgfEludGVncmFsIENvbnN0YW50fC4KCkZvciBhcmJpdHJhcnkgaW50ZWdyYWwgY29uc3RhbnQgYGBuYGA6CgorLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBFeHByZXNzaW9uICAgICAgICB8IFNlbWFudGljcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cis9PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kwp8IGBgaW50XzxjPmBgICAgICAgIHwgQW4gfEludGVncmFsIENvbnN0YW50fCBgYHhgYCBzdWNoIHRoYXQgYGB4Ojp2YWx1ZSA9PSBjYGAgIHwKfCAgICAgICAgICAgICAgICAgICB8IGFuZCBgYHg6OnZhbHVlX3R5cGVgYCBpcyBpZGVudGljYWwgdG8gYGBpbnRgYC4gICAgICAgICAgICB8CistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwoKCkV4YW1wbGUKLS0tLS0tLQoKLi4gcGFyc2VkLWxpdGVyYWw6OgoKICAgIHR5cGVkZWYgaW50Xzw4PiBlaWdodDsKICAgIAogICAgQk9PU1RfTVBMX0FTU0VSVCgoIGlzX3NhbWU8IGVpZ2h0Ojp2YWx1ZV90eXBlLCBpbnQgPiApKTsKICAgIEJPT1NUX01QTF9BU1NFUlQoKCBpc19zYW1lPCBlaWdodDo6dHlwZSwgZWlnaHQgPiApKTsKICAgIEJPT1NUX01QTF9BU1NFUlQoKCBpc19zYW1lPCBuZXh0PCBlaWdodCA+Ojp0eXBlLCBpbnRfPDk+ID4gKSk7CiAgICBCT09TVF9NUExfQVNTRVJUKCggaXNfc2FtZTwgcHJpb3I8IGVpZ2h0ID46OnR5cGUsIGludF88Nz4gPiApKTsKICAgIEJPT1NUX01QTF9BU1NFUlRfUkVMQVRJT04oIChlaWdodDo6dmFsdWUpLCA9PSwgOCApOwogICAgYXNzZXJ0KCBlaWdodCgpID09IDggKTsKCgpTZWUgYWxzbwotLS0tLS0tLQoKfERhdGEgVHlwZXN8LCB8SW50ZWdyYWwgQ29uc3RhbnR8LCB8bG9uZ198LCB8c2l6ZV90fCwgfGludGVncmFsX2N8CgoKLi4gY29weXJpZ2h0OjogQ29weXJpZ2h0IKkgIDIwMDEtMjAwOSBBbGVrc2V5IEd1cnRvdm95IGFuZCBEYXZpZCBBYnJhaGFtcwogICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCiAgIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQo=