Li4gTWFjcm9zL0NvbmZpZ3VyYXRpb24vL0JPT1NUX01QTF9MSU1JVF9MSVNUX1NJWkUgfDQwCgpCT09TVF9NUExfTElNSVRfTElTVF9TSVpFCj09PT09PT09PT09PT09PT09PT09PT09PT0KClN5bm9wc2lzCi0tLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CgogICAgI2lmICFkZWZpbmVkKEJPT1NUX01QTF9MSU1JVF9MSVNUX1NJWkUpCiAgICAjICAgZGVmaW5lIEJPT1NUX01QTF9MSU1JVF9MSVNUX1NJWkUgXFwKICAgICAgICAgICAgfGlkaWN8IFxcCiAgICAvXCpcKi8KICAgICNlbmRpZgoKCkRlc2NyaXB0aW9uCi0tLS0tLS0tLS0tCgpgYEJPT1NUX01QTF9MSU1JVF9MSVNUX1NJWkVgYCBpcyBhbiBvdmVycmlkYWJsZSBjb25maWd1cmF0aW9uIG1hY3JvIHJlZ3VsYXRpbmcKdGhlIG1heGltdW0gYXJpdHkgb2YgdGhlIGBgbGlzdGBgXCAncyBhbmQgYGBsaXN0X2NgYFwgJ3MgfHZhcmlhZGljIGZvcm1zfC4gSW4gdGhpcyAKaW1wbGVtZW50YXRpb24gb2YgdGhlIGxpYnJhcnksIGBgQk9PU1RfTVBMX0xJTUlUX0xJU1RfU0laRWBgIGhhcyBhIGRlZmF1bHQgdmFsdWUKb2YgMjAuIFRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGxpbWl0LCBkZWZpbmUgYGBCT09TVF9NUExfTElNSVRfTElTVF9TSVpFYGAgdG8KdGhlIGRlc2lyZWQgbWF4aW11bSBhcml0eSByb3VuZGVkIHVwIHRvIHRoZSBuZWFyZXN0IG11bHRpcGxlIG9mIHRlbiBiZWZvcmUgCmluY2x1ZGluZyBhbnkgbGlicmFyeSBoZWFkZXIuIHxwcmVwcm9jZXNzZWQgaGVhZGVycyBkaXNjbGFpbWVyfAoKCkV4YW1wbGUKLS0tLS0tLQoKLi4gcGFyc2VkLWxpdGVyYWw6OgoKICAgICNkZWZpbmUgQk9PU1RfTVBMX0NGR19OT19QUkVQUk9DRVNTRURfSEVBREVSUwogICAgI2RlZmluZSBCT09TVF9NUExfTElNSVRfTElTVF9TSVpFIDEwCiAgICBgYCNgYFwgaW5jbHVkZSA8Ym9vc3QvbXBsL2xpc3QuaHBwPgogICAgCiAgICB1c2luZyBuYW1lc3BhY2UgYm9vc3Q6Om1wbDsKCiAgICB0eXBlZGVmIGxpc3RfYzxpbnQsMT4gbF8xOwogICAgdHlwZWRlZiBsaXN0X2M8aW50LDEsMiwzLDQsNSw2LDcsOCw5LDEwPiBsXzEwOwogICAgLy8gdHlwZWRlZiBsaXN0X2M8aW50LDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExPiBsXzExOyAvLyBlcnJvciEKCgpTZWUgYWxzbwotLS0tLS0tLQoKfENvbmZpZ3VyYXRpb258LCB8Qk9PU1RfTVBMX0NGR19OT19QUkVQUk9DRVNTRURfSEVBREVSU3wsIHxCT09TVF9NUExfTElNSVRfVkVDVE9SX1NJWkV8CgoKLi4gY29weXJpZ2h0OjogQ29weXJpZ2h0IKkgIDIwMDEtMjAwOSBBbGVrc2V5IEd1cnRvdm95IGFuZCBEYXZpZCBBYnJhaGFtcwogICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCiAgIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQo=