Li4gTWFjcm9zL0NvbmZpZ3VyYXRpb24vL0JPT1NUX01QTF9MSU1JVF9TRVRfU0laRSB8NTAKCkJPT1NUX01QTF9MSU1JVF9TRVRfU0laRQo9PT09PT09PT09PT09PT09PT09PT09PT0KClN5bm9wc2lzCi0tLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CgogICAgI2lmICFkZWZpbmVkKEJPT1NUX01QTF9MSU1JVF9TRVRfU0laRSkKICAgICMgICBkZWZpbmUgQk9PU1RfTVBMX0xJTUlUX1NFVF9TSVpFIFxcCiAgICAgICAgICAgIHxpZGljfCBcXAogICAgL1wqXCovCiAgICAjZW5kaWYKCgpEZXNjcmlwdGlvbgotLS0tLS0tLS0tLQoKYGBCT09TVF9NUExfTElNSVRfU0VUX1NJWkVgYCBpcyBhbiBvdmVycmlkYWJsZSBjb25maWd1cmF0aW9uIG1hY3JvIHJlZ3VsYXRpbmcKdGhlIG1heGltdW0gYXJpdHkgb2YgdGhlIGBgc2V0YGBcICdzIGFuZCBgYHNldF9jYGBcICdzIHx2YXJpYWRpYyBmb3Jtc3wuIEluIHRoaXMgCmltcGxlbWVudGF0aW9uIG9mIHRoZSBsaWJyYXJ5LCBgYEJPT1NUX01QTF9MSU1JVF9TRVRfU0laRWBgIGhhcyBhIGRlZmF1bHQgdmFsdWUKb2YgMjAuIFRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGxpbWl0LCBkZWZpbmUgYGBCT09TVF9NUExfTElNSVRfU0VUX1NJWkVgYCB0bwp0aGUgZGVzaXJlZCBtYXhpbXVtIGFyaXR5IHJvdW5kZWQgdXAgdG8gdGhlIG5lYXJlc3QgbXVsdGlwbGUgb2YgdGVuIGJlZm9yZSAKaW5jbHVkaW5nIGFueSBsaWJyYXJ5IGhlYWRlci4gfHByZXByb2Nlc3NlZCBoZWFkZXJzIGRpc2NsYWltZXJ8CgoKRXhhbXBsZQotLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CgogICAgI2RlZmluZSBCT09TVF9NUExfQ0ZHX05PX1BSRVBST0NFU1NFRF9IRUFERVJTCiAgICAjZGVmaW5lIEJPT1NUX01QTF9MSU1JVF9TRVRfU0laRSAxMAogICAgYGAjYGBcIGluY2x1ZGUgPGJvb3N0L21wbC9zZXQuaHBwPgogICAgCiAgICB1c2luZyBuYW1lc3BhY2UgYm9vc3Q6Om1wbDsKCiAgICB0eXBlZGVmIHNldF9jPGludCwxPiBzXzE7CiAgICB0eXBlZGVmIHNldF9jPGludCwxLDIsMyw0LDUsNiw3LDgsOSwxMD4gc18xMDsKICAgIC8vIHR5cGVkZWYgc2V0X2M8aW50LDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExPiBzXzExOyAvLyBlcnJvciEKCgpTZWUgYWxzbwotLS0tLS0tLQoKfENvbmZpZ3VyYXRpb258LCB8Qk9PU1RfTVBMX0NGR19OT19QUkVQUk9DRVNTRURfSEVBREVSU3wsIHxCT09TVF9NUExfTElNSVRfTUFQX1NJWkV8CgoKLi4gY29weXJpZ2h0OjogQ29weXJpZ2h0IKkgIDIwMDEtMjAwOSBBbGVrc2V5IEd1cnRvdm95IGFuZCBEYXZpZCBBYnJhaGFtcwogICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCiAgIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQo=