Li4gRGF0YSBUeXBlcy9OdW1lcmljLy9pbnRlZ3JhbF9jIHw1MAoKaW50ZWdyYWxfYwo9PT09PT09PT09CgpTeW5vcHNpcwotLS0tLS0tLQoKLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgCiAgICB0ZW1wbGF0ZTwKICAgICAgICAgIHR5cGVuYW1lIFQsIFQgTgogICAgICAgID4KICAgIHN0cnVjdCBpbnRlZ3JhbF9jCiAgICB7CiAgICAgICAgLy8gfHVuc3BlY2lmaWVkfAogICAgICAgIC8vIC4uLgogICAgfTsKCgpEZXNjcmlwdGlvbgotLS0tLS0tLS0tLQoKQSBnZW5lcmljIHxJbnRlZ3JhbCBDb25zdGFudHwgd3JhcHBlci4KCgpIZWFkZXIKLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgICNpbmNsdWRlIDxib29zdC9tcGwvaW50ZWdyYWxfYy5ocHA+CgoKTW9kZWwgb2YKLS0tLS0tLS0KCnxJbnRlZ3JhbCBDb25zdGFudHwKCgpQYXJhbWV0ZXJzCi0tLS0tLS0tLS0KCistLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgUGFyYW1ldGVyICAgICB8IFJlcXVpcmVtZW50ICAgICAgICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICB8Cis9PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT0rCnwgYGBUYGAgICAgICAgICB8IEFuIGludGVncmFsIHR5cGUgICAgICAgICAgICAgIHwgV3JhcHBlcidzIHZhbHVlIHR5cGUuICAgICB8CistLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgYGBOYGAgICAgICAgICB8IEFuIGludGVncmFsIGNvbnN0YW50ICAgICAgICAgIHwgQSB2YWx1ZSB0byB3cmFwLiAgICAgICAgICB8IAorLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwoKCkV4cHJlc3Npb24gc2VtYW50aWNzCi0tLS0tLS0tLS0tLS0tLS0tLS0tCgp8U2VtYW50aWNzIGRpc2NsYWltZXIuLi58IHxJbnRlZ3JhbCBDb25zdGFudHwuCgpGb3IgYXJiaXRyYXJ5IGludGVncmFsIHR5cGUgYGB0YGAgYW5kIGludGVncmFsIGNvbnN0YW50IGBgbmBgOgoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwp8IEV4cHJlc3Npb24gICAgICAgICAgICB8IFNlbWFudGljcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cis9PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKfCBgYGludGVncmFsX2M8dCxjPmBgICAgfCBBbiB8SW50ZWdyYWwgQ29uc3RhbnR8IGBgeGBgIHN1Y2ggdGhhdCBgYHg6OnZhbHVlID09IGNgYCAgfAp8ICAgICAgICAgICAgICAgICAgICAgICB8IGFuZCBgYHg6OnZhbHVlX3R5cGVgYCBpcyBpZGVudGljYWwgdG8gYGB0YGAuICAgICAgICAgICAgICB8CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKCgpFeGFtcGxlCi0tLS0tLS0KCi4uIHBhcnNlZC1saXRlcmFsOjoKCiAgICB0eXBlZGVmIGludGVncmFsX2M8c2hvcnQsOD4gZWlnaHQ7CiAgICAKICAgIEJPT1NUX01QTF9BU1NFUlQoKCBpc19zYW1lPCBlaWdodDo6dmFsdWVfdHlwZSwgc2hvcnQgPiApKTsKICAgIEJPT1NUX01QTF9BU1NFUlQoKCBpc19zYW1lPCBlaWdodDo6dHlwZSwgZWlnaHQgPiApKTsKICAgIEJPT1NUX01QTF9BU1NFUlQoKCBpc19zYW1lPCBuZXh0PCBlaWdodCA+Ojp0eXBlLCBpbnRlZ3JhbF9jPHNob3J0LDk+ID4gKSk7CiAgICBCT09TVF9NUExfQVNTRVJUKCggaXNfc2FtZTwgcHJpb3I8IGVpZ2h0ID46OnR5cGUsIGludGVncmFsX2M8c2hvcnQsNz4gPiApKTsKICAgIEJPT1NUX01QTF9BU1NFUlRfUkVMQVRJT04oIChlaWdodDo6dmFsdWUpLCA9PSwgOCApOwogICAgYXNzZXJ0KCBlaWdodCgpID09IDggKTsKCgpTZWUgYWxzbwotLS0tLS0tLQoKfERhdGEgVHlwZXN8LCB8SW50ZWdyYWwgQ29uc3RhbnR8LCB8Ym9vbF98LCB8aW50X3wsIHxsb25nX3wsIHxzaXplX3R8CgoKLi4gY29weXJpZ2h0OjogQ29weXJpZ2h0IKkgIDIwMDEtMjAwOSBBbGVrc2V5IEd1cnRvdm95IGFuZCBEYXZpZCBBYnJhaGFtcwogICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCiAgIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQo=