LyogZ2xvYmFscy5oCiAqCiAqIENvcHlyaWdodCCpIDIwMTAgLSAyMDEzIFVOSVNZUyBDT1JQT1JBVElPTgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKgogKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQKICogeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CiAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCiAqIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlCiAqIGRldGFpbHMuCiAqLwoKCiNpZm5kZWYgX19WSVNPUkNISVBTRVRfR0xPQkFMU19IX18KI2RlZmluZSBfX1ZJU09SQ0hJUFNFVF9HTE9CQUxTX0hfXwoKI2luY2x1ZGUgInVuaWtsb2cuaCIKI2luY2x1ZGUgImRpYWdub3N0aWNzL2FwcG9zX3N1YnN5c3RlbXMuaCIKI2luY2x1ZGUgInRpbXNrbW9kLmgiCiNpbmNsdWRlICJ2aXNvcmNoaXBzZXQuaCIKI2luY2x1ZGUgInZpc29yY2hpcHNldF91bW9kZS5oIgojaW5jbHVkZSAidmVyc2lvbi5oIgoKI2RlZmluZSBNWURSVk5BTUUgInZpc29yY2hpcHNldCIKCgovKiBtb2R1bGUgcGFyYW1ldGVycyAqLwoKZXh0ZXJuIGludCB2aXNvcmNoaXBzZXRfdGVzdHZuaWM7CmV4dGVybiBpbnQgdmlzb3JjaGlwc2V0X3Rlc3R2bmljY2xpZW50OwpleHRlcm4gaW50IHZpc29yY2hpcHNldF90ZXN0bXNnOwpleHRlcm4gaW50IHZpc29yY2hpcHNldF9tYWpvcjsKZXh0ZXJuIGludCB2aXNvcmNoaXBzZXRfc2VydmVycmVnd2FpdDsKZXh0ZXJuIGludCB2aXNvcmNoaXBzZXRfY2xpZW50cmVnd2FpdDsKZXh0ZXJuIGludCB2aXNvcmNoaXBzZXRfdGVzdHRlYXJkb3duOwpleHRlcm4gaW50IHZpc29yY2hpcHNldF9kaXNhYmxlX2NvbnRyb2x2bTsKZXh0ZXJuIGludCB2aXNvcmNoaXBzZXRfY3Jhc2hfa2VybmVsOwpleHRlcm4gaW50IHZpc29yY2hpcHNldF9ob2xkY2hpcHNldHJlYWR5OwoKI2VuZGlmCg==