LyoKICogVkdBIGVtdWxhdGlvbgogKiAKICogQ29weXJpZ2h0IDE5OTggT3ZlIEvFdmVuCiAqCiAqLwoKI2lmbmRlZiBfX1dJTkVfVkdBX0gKI2RlZmluZSBfX1dJTkVfVkdBX0gKCiNpbmNsdWRlICJ3aW50eXBlcy5oIgoKaW50IFZHQV9TZXRNb2RlKHVuc2lnbmVkIFhyZXMsdW5zaWduZWQgWXJlcyx1bnNpZ25lZCBEZXB0aCk7CmludCBWR0FfR2V0TW9kZSh1bnNpZ25lZCpIZWlnaHQsdW5zaWduZWQqV2lkdGgsdW5zaWduZWQqRGVwdGgpOwp2b2lkIFZHQV9FeGl0KHZvaWQpOwp2b2lkIFZHQV9TZXRQYWxldHRlKFBBTEVUVEVFTlRSWSpwYWwsaW50IHN0YXJ0LGludCBsZW4pOwp2b2lkIFZHQV9TZXRRdWFkUGFsZXR0ZShSR0JRVUFEKmNvbG9yLGludCBzdGFydCxpbnQgbGVuKTsKTFBTVFIgVkdBX0xvY2sodW5zaWduZWQqUGl0Y2gsdW5zaWduZWQqSGVpZ2h0LHVuc2lnbmVkKldpZHRoLHVuc2lnbmVkKkRlcHRoKTsKdm9pZCBWR0FfVW5sb2NrKHZvaWQpOwp2b2lkIFZHQV9Qb2xsKFdPUkQgdGltZXIpOwp2b2lkIFZHQV9pb3BvcnRfb3V0KFdPUkQgcG9ydCwgQllURSB2YWwpOwpCWVRFIFZHQV9pb3BvcnRfaW4oV09SRCBwb3J0KTsKCiNlbmRpZiAvKiBfX1dJTkVfVkdBX0ggKi8K