IwojIENvbmZpZyBmaWxlIGZvciBrdGVzdC5wbAojCiMgTm90ZSwgYWxsIHBhdGhzIG11c3QgYmUgYWJzb2x1dGUKIwoKIyBPcHRpb25zIHNldCBpbiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlIGFyZSBjb25zaWRlcmVkIHRvIGJlCiMgZGVmYXVsdCBvcHRpb25zLiBUaGVzZSBvcHRpb25zIGNhbiBiZSBvdmVycmlkZW4gYnkgdGVzdCBzcGVjaWZpYwojIG9wdGlvbnMsIHdpdGggdGhlIGZvbGxvd2luZyBleGNlcHRpb25zOgojCiMgIExPR19GSUxFCiMgIENMRUFSX0xPRwojICBQT1dFUk9GRl9PTl9TVUNDRVNTCiMgIFJFQk9PVF9PTl9TVUNDRVNTCiMKIyBUZXN0IHNwZWNpZmljIG9wdGlvbnMgYXJlIHNldCBhZnRlciB0aGUgbGFiZWw6CiMKIyBURVNUX1NUQVJUCiMKIyBUaGUgb3B0aW9ucyBhZnRlciBhIFRFU1RfU1RBUlQgbGFiZWwgYXJlIHNwZWNpZmljIHRvIHRoYXQgdGVzdC4KIyBFYWNoIFRFU1RfU1RBUlQgbGFiZWwgd2lsbCBzZXQgdXAgYSBuZXcgdGVzdC4gSWYgeW91IHdhbnQgdG8KIyBwZXJmb3JtIGEgdGVzdCBtb3JlIHRoYW4gb25jZSwgeW91IGNhbiBhZGQgdGhlIElURVJBVEUgbGFiZWwKIyB0byBpdCBmb2xsb3dlZCBieSB0aGUgbnVtYmVyIG9mIHRpbWVzIHlvdSB3YW50IHRoYXQgdGVzdAojIHRvIGl0ZXJhdGUuIElmIHRoZSBJVEVSQVRFIGlzIGxlZnQgb2ZmLCB0aGUgdGVzdCB3aWxsIG9ubHkKIyBiZSBwZXJmb3JtZWQgb25jZS4KIwojIFRFU1RfU1RBUlQgSVRFUkFURSAxMAojCiMgWW91IGNhbiBza2lwIGEgdGVzdCBieSBhZGRpbmcgU0tJUCAoYmVmb3JlIG9yIGFmdGVyIHRoZSBJVEVSQVRFCiMgYW5kIG51bWJlcikKIwojIFRFU1RfU1RBUlQgU0tJUAojCiMgVEVTVF9TVEFSVCBTS0lQIElURVJBVEUgMTAKIwojIFRFU1RfU1RBUlQgSVRFUkFURSAxMCBTS0lQCiMKIyBUaGUgU0tJUCBsYWJlbCBjYXVzZXMgdGhlIG9wdGlvbnMgYW5kIHRoZSB0ZXN0IGl0c2VsZiB0byBiZSBpZ25vcmVkLgojIFRoaXMgaXMgdXNlZnVsIHRvIHNldCB1cCBzZXZlcmFsIGRpZmZlcmVudCB0ZXN0cyBpbiBvbmUgY29uZmlnIGZpbGUsIGFuZAojIG9ubHkgZW5hYmxpbmcgdGhlIG9uZXMgeW91IHdhbnQgdG8gdXNlIGZvciBhIGN1cnJlbnQgdGVzdCBydW4uCiMKIyBZb3UgY2FuIGFkZCBkZWZhdWx0IG9wdGlvbnMgYW55d2hlcmUgaW4gdGhlIGZpbGUgYXMgd2VsbAojIHdpdGggdGhlIERFRkFVTFRTIHRhZy4gVGhpcyBhbGxvd3MgeW91IHRvIGhhdmUgZGVmYXVsdCBvcHRpb25zCiMgYWZ0ZXIgdGhlIHRlc3Qgb3B0aW9ucyB0byBrZWVwIHRoZSB0ZXN0IG9wdGlvbnMgYXQgdGhlIHRvcAojIG9mIHRoZSBmaWxlLiBZb3UgY2FuIGV2ZW4gcGxhY2UgdGhlIERFRkFVTFRTIHRhZyBiZXR3ZWVuCiMgdGVzdCBjYXNlcyAoYnV0IG5vdCBpbiB0aGUgbWlkZGxlIG9mIGEgc2luZ2xlIHRlc3QgY2FzZSkKIwojIFRFU1RfU1RBUlQKIyBNSU5fQ09ORklHID0gL2hvbWUvdGVzdC9jb25maWctdGVzdDEKIwojIERFRkFVTFRTCiMgTUlOX0NPTkZJRyA9IC9ob21lL3Rlc3QvY29uZmlnLWRlZmF1bHQKIwojIFRFU1RfU1RBUlQgSVRFUkFURSAxMAojCiMgVGhlIGFib3ZlIHdpbGwgcnVuIHRoZSBmaXJzdCB0ZXN0IHdpdGggTUlOX0NPTkZJRyBzZXQgdG8KIyAvaG9tZS90ZXN0L2NvbmZpZy10ZXN0LTEuIFRoZW4gMTAgdGVzdHMgd2lsbCBiZSBleGVjdXRlZAojIHdpdGggTUlOX0NPTkZJRyB3aXRoIC9ob21lL3Rlc3QvY29uZmlnLWRlZmF1bHQuCiMKIyBZb3UgY2FuIGFsc28gZGlzYWJsZSBkZWZhdWx0cyB3aXRoIHRoZSBTS0lQIG9wdGlvbgojCiMgREVGQVVMVFMgU0tJUAojIE1JTl9DT05GSUcgPSAvaG9tZS90ZXN0L2NvbmZpZy11c2Utc29tZXRpbWVzCiMKIyBERUZBVUxUUwojIE1JTl9DT05GSUcgPSAvaG9tZS90ZXN0L2NvbmZpZy1tb3N0LXRpbWVzCiMKIyBUaGUgYWJvdmUgd2lsbCBpZ25vcmUgdGhlIGZpcnN0IE1JTl9DT05GSUcuIElmIHlvdSB3YW50IHRvCiMgdXNlIHRoZSBmaXJzdCBNSU5fQ09ORklHLCByZW1vdmUgdGhlIFNLSVAgZnJvbSB0aGUgZmlyc3QKIyBERUZBVUxUUyB0YWcgYW5kIGFkZCBpdCB0byB0aGUgc2Vjb25kLiBCZSBjYXJlZnVsLCBvcHRpb25zCiMgbWF5IG9ubHkgYmUgZGVjbGFyZWQgb25jZSBwZXIgdGVzdCBvciBkZWZhdWx0LiBJZiB5b3UgaGF2ZQojIHRoZSBzYW1lIG9wdGlvbiBuYW1lIHVuZGVyIHRoZSBzYW1lIHRlc3Qgb3IgYXMgZGVmYXVsdAojIGt0ZXN0IHdpbGwgZmFpbCB0byBleGVjdXRlLCBhbmQgbm8gdGVzdHMgd2lsbCBydW4uCiMKCgojIyMjIE1hbmRhdG9yeSBEZWZhdWx0IE9wdGlvbnMgIyMjIwoKIyBUaGVzZSBvcHRpb25zIG11c3QgYmUgaW4gdGhlIGRlZmF1bHQgc2VjdGlvbiwgYWx0aG91Z2ggbW9zdAojIG1heSBiZSBvdmVycmlkZGVuIGJ5IHRlc3Qgb3B0aW9ucy4KCiMgVGhlIG1hY2hpbmUgaG9zdG5hbWUgdGhhdCB5b3Ugd2lsbCB0ZXN0CiNNQUNISU5FID0gdGFyZ2V0CgojIFRoZSBib3ggaXMgZXhwZWN0ZWQgdG8gaGF2ZSBzc2ggb24gbm9ybWFsIGJvb3R1cCwgcHJvdmlkZSB0aGUgdXNlcgojICAobW9zdCBsaWtlbHkgcm9vdCwgc2luY2UgeW91IG5lZWQgcHJpdmlsZWdlZCBvcGVyYXRpb25zKQojU1NIX1VTRVIgPSByb290CgojIFRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0aGUgTGludXggc291cmNlIGNvZGUKI0JVSUxEX0RJUiA9IC9ob21lL3Rlc3QvbGludXguZ2l0CgojIFRoZSBkaXJlY3RvcnkgdGhhdCB0aGUgb2JqZWN0cyB3aWxsIGJlIGJ1aWx0CiMgKGNhbiBub3QgYmUgc2FtZSBhcyBCVUlMRF9ESVIpCiNPVVRQVVRfRElSID0gL2hvbWUvdGVzdC9idWlsZC90YXJnZXQKCiMgVGhlIGxvY2F0aW9uIG9mIHRoZSBjb21waWxlZCBmaWxlIHRvIGNvcHkgdG8gdGhlIHRhcmdldAojIChyZWxhdGl2ZSB0byBPVVRQVVRfRElSKQojQlVJTERfVEFSR0VUID0gYXJjaC94ODYvYm9vdC9iekltYWdlCgojIFRoZSBwbGFjZSB0byBwdXQgeW91ciBpbWFnZSBvbiB0aGUgdGVzdCBtYWNoaW5lCiNUQVJHRVRfSU1BR0UgPSAvYm9vdC92bWxpbnV6LXRlc3QKCiMgQSBzY3JpcHQgb3IgY29tbWFuZCB0byByZWJvb3QgdGhlIGJveAojCiMgSGVyZSBpcyBhIGRpZ2l0YWwgbG9nZ2VycyBwb3dlciBzd2l0Y2ggZXhhbXBsZQojUE9XRVJfQ1lDTEUgPSB3Z2V0IC0tbm8tcHJveHkgLU8gL2Rldi9udWxsIC1xICAtLWF1dGgtbm8tY2hhbGxlbmdlICdodHRwOi8vYWRtaW46YWRtaW5AcG93ZXIvb3V0bGV0PzU9Q0NMJwojCiMgSGVyZSBpcyBhbiBleGFtcGxlIHRvIHJlYm9vdCBhIHZpcnR1YWwgYm94IG9uIHRoZSBjdXJyZW50IGhvc3QKIyB3aXRoIHRoZSBuYW1lICJHdWVzdCIuCiNQT1dFUl9DWUNMRSA9IHZpcnNoIGRlc3Ryb3kgR3Vlc3Q7IHNsZWVwIDU7IHZpcnNoIHN0YXJ0IEd1ZXN0CgojIFRoZSBzY3JpcHQgb3IgY29tbWFuZCB0aGF0IHJlYWRzIHRoZSBjb25zb2xlCiMKIyAgSWYgeW91IHVzZSB0dHl3YXRjaCBzZXJ2ZXIsIHNvbWV0aGluZyBsaWtlIHRoZSBmb2xsb3dpbmcgd291bGQgd29yay4KI0NPTlNPTEUgPSBuYyAtZCBsb2NhbGhvc3QgMzAwMQojCiMgRm9yIGEgdmlydHVhbCBtYWNoaW5lIHdpdGggZ3Vlc3QgbmFtZSAiR3Vlc3QiLgojQ09OU09MRSA9ICB2aXJzaCBjb25zb2xlIEd1ZXN0CgojIFJlcXVpcmVkIHZlcnNpb24gZW5kaW5nIHRvIGRpZmZlcmVudGlhdGUgdGhlIHRlc3QKIyBmcm9tIG90aGVyIGxpbnV4IGJ1aWxkcyBvbiB0aGUgc3lzdGVtLgojTE9DQUxWRVJTSU9OID0gLXRlc3QKCiMgVGhlIGdydWIgdGl0bGUgbmFtZSBmb3IgdGhlIHRlc3Qga2VybmVsIHRvIGJvb3QKIyAoT25seSBtYW5kYXRvcnkgaWYgUkVCT09UX1RZUEUgPSBncnViKQojCiMgTm90ZSwga3Rlc3QucGwgd2lsbCBub3QgdXBkYXRlIHRoZSBncnViIG1lbnUubHN0LCB5b3UgbmVlZCB0bwojIG1hbnVhbGx5IGFkZCBhbiBvcHRpb24gZm9yIHRoZSB0ZXN0LiBrdGVzdC5wbCB3aWxsIHNlYXJjaAojIHRoZSBncnViIG1lbnUubHN0IGZvciB0aGlzIG9wdGlvbiB0byBmaW5kIHdoYXQga2VybmVsIHRvCiMgcmVib290IGludG8uCiMKIyBGb3IgZXhhbXBsZSwgaWYgaW4gdGhlIC9ib290L2dydWIvbWVudS5sc3QgdGhlIHRlc3Qga2VybmVsIHRpdGxlIGhhczoKIyB0aXRsZSBUZXN0IEtlcm5lbAojIGtlcm5lbCB2bWxpbnV6LXRlc3QKI0dSVUJfTUVOVSA9IFRlc3QgS2VybmVsCgojIEEgc2NyaXB0IHRvIHJlYm9vdCB0aGUgdGFyZ2V0IGludG8gdGhlIHRlc3Qga2VybmVsCiMgKE9ubHkgbWFuZGF0b3J5IGlmIFJFQk9PVF9UWVBFID0gc2NyaXB0KQojUkVCT09UX1NDUklQVCA9CgojIyMjIE9wdGlvbmFsIENvbmZpZyBPcHRpb25zIChhbGwgaGF2ZSBkZWZhdWx0cykgIyMjIwoKIyBTdGFydCBhIHRlc3Qgc2V0dXAuIElmIHlvdSBsZWF2ZSB0aGlzIG9mZiwgYWxsIG9wdGlvbnMKIyB3aWxsIGJlIGRlZmF1bHQgYW5kIHRoZSB0ZXN0IHdpbGwgcnVuIG9uY2UuCiMgVGhpcyBpcyBhIGxhYmVsIGFuZCBub3QgcmVhbGx5IGFuIG9wdGlvbiAoaXQgdGFrZXMgbm8gdmFsdWUpLgojIFlvdSBjYW4gYXBwZW5kIElURVJBVEUgYW5kIGEgbnVtYmVyIGFmdGVyIGl0IHRvIGl0ZXJhdGUgdGhlCiMgdGVzdCBhIG51bWJlciBvZiB0aW1lcywgb3IgU0tJUCB0byBpZ25vcmUgdGhpcyB0ZXN0LgojCiNURVNUX1NUQVJUCiNURVNUX1NUQVJUIElURVJBVEUgNQojVEVTVF9TVEFSVCBTS0lQCgojIEhhdmUgdGhlIGZvbGxvd2luZyBvcHRpb25zIGFzIGRlZmF1bHQgYWdhaW4uIFVzZWQgYWZ0ZXIgdGVzdHMKIyBoYXZlIGFscmVhZHkgYmVlbiBkZWZpbmVkIGJ5IFRFU1RfU1RBUlQuIE9wdGlvbmFsbHksIHlvdSBjYW4KIyBqdXN0IGRlZmluZSBhbGwgZGVmYXVsdCBvcHRpb25zIGJlZm9yZSB0aGUgZmlyc3QgVEVTVF9TVEFSVAojIGFuZCB5b3UgZG8gbm90IG5lZWQgdGhpcyBvcHRpb24uCiMKIyBUaGlzIGlzIGEgbGFiZWwgYW5kIG5vdCByZWFsbHkgYW4gb3B0aW9uIChpdCB0YWtlcyBubyB2YWx1ZSkuCiMgWW91IGNhbiBhcHBlbmQgU0tJUCB0byB0aGlzIGxhYmVsIGFuZCB0aGUgb3B0aW9ucyB3aXRoaW4gdGhpcwojIHNlY3Rpb24gd2lsbCBiZSBpZ25vcmVkLgojCiMgREVGQVVMVFMKIyBERUZBVUxUUyBTS0lQCgojIFRoZSBkZWZhdWx0IHRlc3QgdHlwZSAoZGVmYXVsdCB0ZXN0KQojIFRoZSB0ZXN0IHR5cGVzIG1heSBiZToKIyAgIGJ1aWxkIC0gb25seSBidWlsZCB0aGUga2VybmVsLCBkbyBub3RoaW5nIGVsc2UKIyAgIGJvb3QgLSBidWlsZCBhbmQgYm9vdCB0aGUga2VybmVsCiMgICB0ZXN0IC0gYnVpbGQsIGJvb3QgYW5kIGlmIFRFU1QgaXMgc2V0LCBydW4gdGhlIHRlc3Qgc2NyaXB0CiMgICAgICAgICAgKElmIFRFU1QgaXMgbm90IHNldCwgaXQgZGVmYXVsdHMgYmFjayB0byBib290KQojICAgYmlzZWN0IC0gUGVyZm9ybSBhIGJpc2VjdCBvbiB0aGUga2VybmVsIChzZWUgQklTRUNUX1RZUEUgYmVsb3cpCiMgICBwYXRjaGNoZWNrIC0gRG8gYSB0ZXN0IG9uIGEgc2VyaWVzIG9mIGNvbW1pdHMgaW4gZ2l0IChzZWUgUEFUQ0hDSEVDSyBiZWxvdykKI1RFU1RfVFlQRSA9IHRlc3QKCiMgVGVzdCB0byBydW4gaWYgdGhlcmUgaXMgYSBzdWNjZXNzZnVsIGJvb3QgYW5kIFRFU1RfVFlQRSBpcyB0ZXN0LgojIE11c3QgZXhpdCB3aXRoIDAgb24gc3VjY2VzcyBhbmQgbm9uIHplcm8gb24gZXJyb3IKIyBkZWZhdWx0ICh1bmRlZmluZWQpCiNURVNUID0gc3NoIHVzZXJAbWFjaGluZSAvcm9vdC9ydW5fdGVzdAoKIyBUaGUgYnVpbGQgdHlwZSBpcyBhbnkgbWFrZSBjb25maWcgdHlwZSBvciBzcGVjaWFsIGNvbW1hbmQKIyAgKGRlZmF1bHQgcmFuZGNvbmZpZykKIyAgIG5vYnVpbGQgLSBza2lwIHRoZSBjbGVhbiBhbmQgYnVpbGQgc3RlcAojICAgdXNlY29uZmlnOi9wYXRoL3RvL2NvbmZpZyAtIHVzZSB0aGUgZ2l2ZW4gY29uZmlnIGFuZCBydW4KIyAgICAgICAgICAgICAgb2xkY29uZmlnIG9uIGl0LgojIFRoaXMgb3B0aW9uIGlzIGlnbm9yZWQgaWYgVEVTVF9UWVBFIGlzIHBhdGNoY2hlY2sgb3IgYmlzZWN0CiNCVUlMRF9UWVBFID0gcmFuZGNvbmZpZwoKIyBUaGUgbWFrZSBjb21tYW5kIChkZWZhdWx0IG1ha2UpCiMgSWYgeW91IGFyZSBidWlsZGluZyBhIDMyYml0IHg4NiBvbiBhIDY0IGJpdCBob3N0CiNNQUtFX0NNRCA9IENDPWkzODYtZ2NjIEFTPWkzODYtYXMgbWFrZSBBUkNIPWkzODYKCiMgQW55IGJ1aWxkIG9wdGlvbnMgZm9yIHRoZSBtYWtlIG9mIHRoZSBrZXJuZWwgKG5vdCBmb3Igb3RoZXIgbWFrZXMsIGxpa2UgY29uZmlncykKIyAoZGVmYXVsdCAiIikKI0JVSUxEX09QVElPTlMgPSAtajIwCgojIElmIHlvdSBuZWVkIGFuIGluaXRyZCwgeW91IGNhbiBhZGQgYSBzY3JpcHQgb3IgY29kZSBoZXJlIHRvIGluc3RhbGwKIyBpdC4gVGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEtFUk5FTF9WRVJTSU9OIHdpbGwgYmUgc2V0IHRvIHRoZQojIGtlcm5lbCB2ZXJzaW9uIHRoYXQgaXMgdXNlZC4gUmVtZW1iZXIgdG8gYWRkIHRoZSBpbml0cmQgbGluZQojIHRvIHlvdXIgZ3J1YiBtZW51LmxzdCBmaWxlLgojCiMgSGVyZSdzIGEgY291cGxlIG9mIGV4YW1wbGVzIHRvIHVzZToKI1BPU1RfSU5TVEFMTCA9IHNzaCB1c2VyQHRhcmdldCAvc2Jpbi9ta2luaXRyZCAtLWFsbG93LW1pc3NpbmcgLWYgL2Jvb3QvaW5pdHJhbWZzLXRlc3QuaW1nICRLRVJORUxfVkVSU0lPTgojCiMgb3Igb24gc29tZSBzeXN0ZW1zOgojUE9TVF9JTlNUQUxMID0gc3NoIHVzZXJAdGFyZ2V0IC9zYmluL2RyYWN1dCAtZiAvYm9vdC9pbml0cmFtZnMtdGVzdC5pbWcgJEtFUk5FTF9WRVJTSU9OCgojIFdheSB0byByZWJvb3QgdGhlIGJveCB0byB0aGUgdGVzdCBrZXJuZWwuCiMgT25seSB2YWxpZCBvcHRpb25zIHNvIGZhciBhcmUgImdydWIiIGFuZCAic2NyaXB0IgojIChkZWZhdWx0IGdydWIpCiMgSWYgeW91IHNwZWNpZnkgZ3J1YiwgaXQgd2lsbCBhc3N1bWUgZ3J1YiB2ZXJzaW9uIDEKIyBhbmQgd2lsbCBzZWFyY2ggaW4gL2Jvb3QvZ3J1Yi9tZW51LmxzdCBmb3IgdGhlIHRpdGxlICRHUlVCX01FTlUKIyBhbmQgc2VsZWN0IHRoYXQgdGFyZ2V0IHRvIHJlYm9vdCB0byB0aGUga2VybmVsLiBJZiB0aGlzIGlzIG5vdAojIHlvdXIgc2V0dXAsIHRoZW4gc3BlY2lmeSAic2NyaXB0IiBhbmQgaGF2ZSBhIGNvbW1hbmQgb3Igc2NyaXB0CiMgc3BlY2lmaWVkIGluIFJFQk9PVF9TQ1JJUFQgdG8gYm9vdCB0byB0aGUgdGFyZ2V0LgojCiMgVGhlIGVudHJ5IGluIC9ib290L2dydWIvbWVudS5sc3QgbXVzdCBiZSBlbnRlcmVkIGluIG1hbnVhbGx5LgojIFRoZSB0ZXN0IHdpbGwgbm90IG1vZGlmeSB0aGF0IGZpbGUuCiNSRUJPT1RfVFlQRSA9IGdydWIKCiMgVGhlIG1pbiBjb25maWcgdGhhdCBpcyBuZWVkZWQgdG8gYnVpbGQgZm9yIHRoZSBtYWNoaW5lCiMgQSBuaWNlIHdheSB0byBjcmVhdGUgdGhpcyBpcyB3aXRoIHRoZSBmb2xsb3dpbmc6CiMKIyAgICQgc3NoIHRhcmdldAojICAgJCBsc21vZCA+IG15bW9kcwojICAgJCBzY3AgbXltb2RzIGhvc3Q6L3RtcAojICAgJCBleGl0CiMgICAkIGNkIGxpbnV4LmdpdAojICAgJCBybSAuY29uZmlnCiMgICAkIG1ha2UgTFNNT0Q9bXltb2RzIGxvY2FseWVzY29uZmlnCiMgICAkIGdyZXAgJ15DT05GSUcnIC5jb25maWcgPiAvaG9tZS90ZXN0L2NvbmZpZy1taW4KIwojIElmIHlvdSB3YW50IGV2ZW4gbGVzcyBjb25maWdzOgojCiMgICBsb2cgaW4gZGlyZWN0bHkgdG8gdGFyZ2V0IChkbyBub3Qgc3NoKQojCiMgICAkIHN1CiMgICAjIGxzbW9kIHwgY3V0IC1kJyAnIC1mMSB8IHhhcmdzIHJtbW9kCiMKIyAgIHJlcGVhdCB0aGUgYWJvdmUgc2V2ZXJhbCB0aW1lcwojCiMgICAjIGxzbW9kID4gbXltb2RzCiMgICAjIHJlYm9vdAojCiMgTWF5IG5lZWQgdG8gcmVib290IHRvIGdldCB5b3VyIG5ldHdvcmsgYmFjayB0byBjb3B5IHRoZSBteW1vZHMKIyB0byB0aGUgaG9zdCwgYW5kIHRoZW4gcmVtb3ZlIHRoZSBwcmV2aW91cyAuY29uZmlnIGFuZCBydW4gdGhlCiMgbG9jYWx5ZXNjb25maWcgYWdhaW4uIFRoZSBDT05GSUdfTUlOIGdlbmVyYXRlZCBsaWtlIHRoaXMgd2lsbAojIG5vdCBndWFyYW50ZWUgbmV0d29yayBhY3Rpdml0eSB0byB0aGUgYm94IHNvIHRoZSBURVNUX1RZUEUgb2YKIyB0ZXN0IG1heSBmYWlsLgojCiMgWW91IG1pZ2h0IGFsc28gd2FudCB0byBzZXQ6CiMgICBDT05GSUdfQ01ETElORT0iPHlvdXIgb3B0aW9ucyBoZXJlPiIKIyAgcmFuZGNvbmZpZyBtYXkgc2V0IHRoZSBhYm92ZSBhbmQgb3ZlcnJpZGUgeW91ciByZWFsIGNvbW1hbmQKIyAgbGluZSBvcHRpb25zLgojIChkZWZhdWx0IHVuZGVmaW5lZCkKI01JTl9DT05GSUcgPSAvaG9tZS90ZXN0L2NvbmZpZy1taW4KCiMgU29tZXRpbWVzIHRoZXJlJ3Mgb3B0aW9ucyB0aGF0IGp1c3QgYnJlYWsgdGhlIGJvb3QgYW5kCiMgeW91IGRvIG5vdCBjYXJlIGFib3V0LiBIZXJlIGFyZSBhIGZldzoKIyAgICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAojICBTdGFnaW5nIGRyaXZlcnMgYXJlIGhvcnJpYmxlLCBhbmQgY2FuIGJyZWFrIHRoZSBidWlsZC4KIyAgICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAojICBTQ1NJX0RFQlVHIG1heSBjaGFuZ2UgeW91ciByb290IHBhcnRpdGlvbgojICAgIyBDT05GSUdfS0dEQl9TRVJJQUxfQ09OU09MRSBpcyBub3Qgc2V0CiMgIEtHREIgbWF5IGNhdXNlIG9vcHMgd2FpdGluZyBmb3IgYSBjb25uZWN0aW9uIHRoYXQncyBub3QgdGhlcmUuCiMgVGhpcyBvcHRpb24gcG9pbnRzIHRvIHRoZSBmaWxlIGNvbnRhaW5pbmcgY29uZmlnIG9wdGlvbnMgdGhhdCB3aWxsIGJlIHByZXBlbmRlZAojIHRvIHRoZSBNSU5fQ09ORklHIChvciBiZSB0aGUgTUlOX0NPTkZJRyBpZiBpdCBpcyBub3Qgc2V0KQojCiMgTm90ZSwgY29uZmlnIG9wdGlvbnMgaW4gTUlOX0NPTkZJRyB3aWxsIG92ZXJyaWRlIHRoZXNlIG9wdGlvbnMuCiMKIyAoZGVmYXVsdCB1bmRlZmluZWQpCiNBRERfQ09ORklHID0gL2hvbWUvdGVzdC9jb25maWctYnJva2VuCgojIFRoZSBsb2NhdGlvbiBvbiB0aGUgaG9zdCB3aGVyZSB0byB3cml0ZSB0ZW1wIGZpbGVzCiMgKGRlZmF1bHQgL3RtcC9rdGVzdCkKI1RNUF9ESVIgPSAvdG1wL2t0ZXN0CgojIE9wdGlvbmFsIGxvZyBmaWxlIHRvIHdyaXRlIHRoZSBzdGF0dXMgKHJlY29tbWVuZGVkKQojICBOb3RlLCB0aGlzIGlzIGEgREVGQVVMVCBzZWN0aW9uIG9ubHkgb3B0aW9uLgojIChkZWZhdWx0IHVuZGVmaW5lZCkKI0xPR19GSUxFID0gL2hvbWUvdGVzdC9sb2dmaWxlcy90YXJnZXQubG9nCgojIFJlbW92ZSBvbGQgbG9nZmlsZSBpZiBpdCBleGlzdHMgYmVmb3JlIHN0YXJ0aW5nIGFsbCB0ZXN0cy4KIyAgTm90ZSwgdGhpcyBpcyBhIERFRkFVTFQgc2VjdGlvbiBvbmx5IG9wdGlvbi4KIyAoZGVmYXVsdCAwKQojQ0xFQVJfTE9HID0gMAoKIyBMaW5lIHRvIGRlZmluZSBhIHN1Y2Nlc3NmdWwgYm9vdCB1cCBpbiBjb25zb2xlIG91dHB1dC4KIyBUaGlzIGlzIHdoYXQgdGhlIGxpbmUgY29udGFpbnMsIG5vdCB0aGUgZW50aXJlIGxpbmUuIElmIHlvdSBuZWVkCiMgdGhlIGVudGlyZSBsaW5lIHRvIG1hdGNoLCB0aGVuIHVzZSByZWd1cmFsIGV4cHJlc3Npb24gc3ludGF4IGxpa2U6CiMgIChkbyBub3QgYWRkIGFueSBxdW90ZXMgYXJvdW5kIGl0KQojCiMgIFNVQ0NFU1NfTElORSA9IF5NeUJveCBMb2dpbjokCiMKIyAoZGVmYXVsdCAibG9naW46IikKI1NVQ0NFU1NfTElORSA9IGxvZ2luOgoKIyBJbiBjYXNlIHRoZSBjb25zb2xlIGNvbnN0YW50bHkgZmlsbHMgdGhlIHNjcmVlbiwgaGF2aW5nCiMgYSBzcGVjaWZpZWQgdGltZSB0byBzdG9wIHRoZSB0ZXN0IGFmdGVyIHN1Y2Nlc3MgaXMgcmVjb21tZW5kZWQuCiMgKGluIHNlY29uZHMpCiMgKGRlZmF1bHQgMTApCiNTVE9QX0FGVEVSX1NVQ0NFU1MgPSAxMAoKIyBJbiBjYXNlIHRoZSBjb25zb2xlIGNvbnN0YW50bHkgZmlsbHMgdGhlIHNjcmVlbiwgaGF2aW5nCiMgYSBzcGVjaWZpZWQgdGltZSB0byBzdG9wIHRoZSB0ZXN0IGFmdGVyIGZhaWx1cmUgaXMgcmVjb21tZW5kZWQuCiMgKGluIHNlY29uZHMpCiMgKGRlZmF1bHQgNjApCiNTVE9QX0FGVEVSX0ZBSUxVUkUgPSA2MAoKIyBJbiBjYXNlIHRoZSBjb25zb2xlIGNvbnN0YW50bHkgZmlsbHMgdGhlIHNjcmVlbiwgaGF2aW5nCiMgYSBzcGVjaWZpZWQgdGltZSB0byBzdG9wIHRoZSB0ZXN0IGlmIGl0IG5ldmVyIHN1Y2NlZWRzIG5vciBmYWlscwojIGlzIHJlY29tbWVuZGVkLgojIE5vdGU6IHRoaXMgaXMgaWdub3JlZCBpZiBhIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBpcyBkZXRlY3RlZC4KIyAoaW4gc2Vjb25kcykKIyAoZGVmYXVsdCA2MDAsIC0xIGlzIHRvIG5ldmVyIHN0b3ApCiNTVE9QX1RFU1RfQUZURVIgPSA2MDAKCiMgU3RvcCB0ZXN0aW5nIGlmIGEgYnVpbGQgZmFpbHMuIElmIHNldCwgdGhlIHNjcmlwdCB3aWxsIGVuZCBpZgojIGEgZmFpbHVyZSBpcyBkZXRlY3RlZCwgb3RoZXJ3aXNlIGl0IHdpbGwgc2F2ZSBvZmYgdGhlIC5jb25maWcsCiMgZG1lc2cgYW5kIGJvb3Rsb2cgaW4gYSBkaXJlY3RvcnkgY2FsbGVkCiMgTUFDSElORS1URVNUX1RZUEVfQlVJTERfVFlQRS1mYWlsLXl5eXltbWRkaGhtbXNzCiMgaWYgdGhlIFNUT1JFX0ZBSUxVUkVTIGRpcmVjdG9yeSBpcyBzZXQuCiMgKGRlZmF1bHQgMSkKIyBOb3RlLCBldmVuIGlmIHRoaXMgaXMgc2V0IHRvIHplcm8sIHRoZXJlIGFyZSBzb21lIGVycm9ycyB0aGF0IHN0aWxsCiMgc3RvcCB0aGUgdGVzdHMuCiNESUVfT05fRkFJTFVSRSA9IDEKCiMgRGlyZWN0b3J5IHRvIHN0b3JlIGZhaWx1cmUgZGlyZWN0b3JpZXMgb24gZmFpbHVyZS4gSWYgdGhpcyBpcyBub3QKIyBzZXQsIERJRV9PTl9GQUlMVVJFPTAgd2lsbCBub3Qgc2F2ZSBvZmYgdGhlIC5jb25maWcsIGRtZXNnIGFuZAojIGJvb3Rsb2cuIFRoaXMgb3B0aW9uIGlzIGlnbm9yZWQgaWYgRElFX09OX0ZBSUxVUkUgaXMgbm90IHNldC4KIyAoZGVmYXVsdCB1bmRlZmluZWQpCiNTVE9SRV9GQUlMVVJFUyA9IC9ob21lL3Rlc3QvZmFpbHVyZXMKCiMgQnVpbGQgd2l0aG91dCBkb2luZyBhIG1ha2UgbXJwcm9wZXIsIG9yIHJlbW92aW5nIC5jb25maWcKIyAoZGVmYXVsdCAwKQojQlVJTERfTk9DTEVBTiA9IDAKCiMgQXMgdGhlIHRlc3QgcmVhZHMgdGhlIGNvbnNvbGUsIGFmdGVyIGl0IGhpdHMgdGhlIFNVQ0NFU1NfTElORQojIHRoZSB0aW1lIGl0IHdhaXRzIGZvciB0aGUgbW9uaXRvciB0byBzZXR0bGUgZG93biBiZXR3ZWVuIHJlYWRzCiMgY2FuIHVzdWFsbHkgYmUgbG93ZXJlZC4KIyAoaW4gc2Vjb25kcykgKGRlZmF1bHQgMSkKI0JPT1RFRF9USU1FT1VUID0gMQoKIyBUaGUgdGltZW91dCBpbiBzZWNvbmRzIHdoZW4gd2UgY29uc2lkZXIgdGhlIGJveCBodW5nIGFmdGVyCiMgdGhlIGNvbnNvbGUgc3RvcCBwcm9kdWNpbmcgb3V0cHV0LiBCZSBzdXJlIHRvIGxlYXZlIGVub3VnaAojIHRpbWUgaGVyZSB0byBnZXQgcGFzcyBhIHJlYm9vdC4gU29tZSBtYWNoaW5lcyBtYXkgbm90IHByb2R1Y2UKIyBhbnkgY29uc29sZSBvdXRwdXQgZm9yIGEgbG9uZyB0aW1lIGR1cmluZyBhIHJlYm9vdC4gWW91IGRvCiMgbm90IHdhbnQgdGhlIHRlc3QgdG8gZmFpbCBqdXN0IGJlY2F1c2UgdGhlIHN5c3RlbSB3YXMgaW4KIyB0aGUgcHJvY2VzcyBvZiByZWJvb3RpbmcgdG8gdGhlIHRlc3Qga2VybmVsLgojIChkZWZhdWx0IDEyMCkKI1RJTUVPVVQgPSAxMjAKCiMgSW4gYmV0d2VlbiB0ZXN0cywgYSByZWJvb3Qgb2YgdGhlIGJveCBtYXkgb2NjdXIsIGFuZCB0aGlzCiMgaXMgdGhlIHRpbWUgdG8gd2FpdCBmb3IgdGhlIGNvbnNvbGUgYWZ0ZXIgaXQgc3RvcHMgcHJvZHVjaW5nCiMgb3V0cHV0LiBTb21lIG1hY2hpbmVzIG1heSBub3QgcHJvZHVjZSBhIGxhcmdlIGxhZyBvbiByZWJvb3QKIyBzbyB0aGlzIHNob3VsZCBhY2NvbW1vZGF0ZSBpdC4KIyBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoaXMgYW5kIFRJTUVPVVQsIGlzIHRoYXQgVElNRU9VVCBoYXBwZW5zCiMgd2hlbiByZWJvb3RpbmcgdG8gdGhlIHRlc3Qga2VybmVsLiBUaGlzIHNsZWVwIHRpbWUgaGFwcGVucwojIGFmdGVyIGEgdGVzdCBoYXMgY29tcGxldGVkIGFuZCB3ZSBhcmUgYWJvdXQgdG8gc3RhcnQgcnVubmluZwojIGFub3RoZXIgdGVzdC4gSWYgYSByZWJvb3QgdG8gdGhlIHJlbGlhYmxlIGtlcm5lbCBoYXBwZW5zLAojIHdlIHdhaXQgU0xFRVBfVElNRSBmb3IgdGhlIGNvbnNvbGUgdG8gc3RvcCBwcm9kdWNpbmcgb3V0cHV0CiMgYmVmb3JlIHN0YXJ0aW5nIHRoZSBuZXh0IHRlc3QuCiMgKGRlZmF1bHQgNjApCiNTTEVFUF9USU1FID0gNjAKCiMgVGhlIHRpbWUgaW4gYmV0d2VlbiBiaXNlY3RzIHRvIHNsZWVwIChpbiBzZWNvbmRzKQojIChkZWZhdWx0IDYwKQojQklTRUNUX1NMRUVQX1RJTUUgPSA2MAoKIyBSZWJvb3QgdGhlIHRhcmdldCBib3ggb24gZXJyb3IgKGRlZmF1bHQgMCkKI1JFQk9PVF9PTl9FUlJPUiA9IDAKCiMgUG93ZXIgb2ZmIHRoZSB0YXJnZXQgb24gZXJyb3IgKGlnbm9yZWQgaWYgUkVCT09UX09OX0VSUk9SIGlzIHNldCkKIyAgTm90ZSwgdGhpcyBpcyBhIERFRkFVTFQgc2VjdGlvbiBvbmx5IG9wdGlvbi4KIyAoZGVmYXVsdCAwKQojUE9XRVJPRkZfT05fRVJST1IgPSAwCgojIFBvd2VyIG9mZiB0aGUgdGFyZ2V0IGFmdGVyIGFsbCB0ZXN0cyBoYXZlIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkKIyAgTm90ZSwgdGhpcyBpcyBhIERFRkFVTFQgc2VjdGlvbiBvbmx5IG9wdGlvbi4KIyAoZGVmYXVsdCAwKQojUE9XRVJPRkZfT05fU1VDQ0VTUyA9IDAKCiMgUmVib290IHRoZSB0YXJnZXQgYWZ0ZXIgYWxsIHRlc3QgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSAoZGVmYXVsdCAxKQojIChpZ25vcmVkIGlmIFBPV0VST0ZGX09OX1NVQ0NFU1MgaXMgc2V0KQojUkVCT09UX09OX1NVQ0NFU1MgPSAxCgojIEluIGNhc2UgdGhlcmUgYXJlIGlzc2VzIHdpdGggcmVib290aW5nLCB5b3UgY2FuIHNwZWNpZnkgdGhpcwojIHRvIGFsd2F5cyBwb3dlcmN5Y2xlIGFmdGVyIHRoaXMgYW1vdW50IG9mIHRpbWUgYWZ0ZXIgY2FsbGluZwojIHJlYm9vdC4KIyBOb3RlLCBQT1dFUkNZQ0xFX0FGVEVSX1JFQk9PVCA9IDAgZG9lcyBOT1QgZGlzYWJsZSBpdC4gSXQganVzdAojIG1ha2VzIGl0IHBvd2VyY3ljbGUgaW1tZWRpYXRlbHkgYWZ0ZXIgcmVib290aW5nLiBEbyBub3QgZGVmaW5lCiMgaXQgaWYgeW91IGRvIG5vdCB3YW50IGl0LgojIChkZWZhdWx0IHVuZGVmaW5lZCkKI1BPV0VSQ1lDTEVfQUZURVJfUkVCT09UID0gNQoKIyBJbiBjYXNlIHRoZXJlJ3MgaXNzZXMgd2l0aCBoYWx0aW5nLCB5b3UgY2FuIHNwZWNpZnkgdGhpcwojIHRvIGFsd2F5cyBwb3dlcm9mZiBhZnRlciB0aGlzIGFtb3VudCBvZiB0aW1lIGFmdGVyIGNhbGxpbmcKIyBoYWx0LgojIE5vdGUsIFBPV0VST0ZGX0FGVEVSX0hBTFQgPSAwIGRvZXMgTk9UIGRpc2FibGUgaXQuIEl0IGp1c3QKIyBtYWtlcyBpdCBwb3dlcm9mZiBpbW1lZGlhdGVseSBhZnRlciBoYWx0aW5nLiBEbyBub3QgZGVmaW5lCiMgaXQgaWYgeW91IGRvIG5vdCB3YW50IGl0LgojIChkZWZhdWx0IHVuZGVmaW5lZCkKI1BPV0VST0ZGX0FGVEVSX0hBTFQgPSAyMAoKIyBBIHNjcmlwdCBvciBjb21tYW5kIHRvIHBvd2VyIG9mZiB0aGUgYm94IChkZWZhdWx0IHVuZGVmaW5lZCkKIyBOZWVkZWQgZm9yIFBPV0VST0ZGX09OX0VSUk9SIGFuZCBTVUNDRVNTCiMKIyBFeGFtcGxlIGZvciBkaWdpdGFsIGxvZ2dlcnMgcG93ZXIgc3dpdGNoOgojUE9XRVJfT0ZGID0gd2dldCAtLW5vLXByb3h5IC1PIC9kZXYvbnVsbCAtcSAgLS1hdXRoLW5vLWNoYWxsZW5nZSAnaHR0cDovL2FkbWluOmFkbWluQHBvd2VyL291dGxldD81PU9GRicKIwojIEV4YW1wbGUgZm9yIGEgdmlydHVhbCBndWVzdCBjYWxsICJHdWVzdCIuCiNQT1dFUl9PRkYgPSB2aXJzaCBkZXN0cm95IEd1ZXN0CgojIFRoZSB3YXkgdG8gZXhlY3V0ZSBhIGNvbW1hbmQgb24gdGhlIHRhcmdldAojIChkZWZhdWx0IHNzaCAkU1NIX1VTRVJAJE1BQ0hJTkUgJFNTSF9DT01NQU5EIjspCiMgVGhlIHZhcmlhYmxlcyBTU0hfVVNFUiwgTUFDSElORSBhbmQgU1NIX0NPTU1BTkQgYXJlIGRlZmluZWQKI1NTSF9FWEVDID0gc3NoICRTU0hfVVNFUkAkTUFDSElORSAkU1NIX0NPTU1BTkQiOwoKIyBUaGUgd2F5IHRvIGNvcHkgYSBmaWxlIHRvIHRoZSB0YXJnZXQKIyAoZGVmYXVsdCBzY3AgJFNSQ19GSUxFICRTU0hfVVNFUkAkTUFDSElORTokRFNUX0ZJTEUpCiMgVGhlIHZhcmlhYmxlcyBTU0hfVVNFUiwgTUFDSElORSwgU1JDX0ZJTEUgYW5kIERTVF9GSUxFIGFyZSBkZWZpbmVkLgojU0NQX1RPX1RBUkdFVCA9IHNjcCAkU1JDX0ZJTEUgJFNTSF9VU0VSQCRNQUNISU5FOiREU1RfRklMRQoKIyBUaGUgbmljZSB3YXkgdG8gcmVib290IHRoZSB0YXJnZXQKIyAoZGVmYXVsdCBzc2ggJFNTSF9VU0VSQCRNQUNISU5FIHJlYm9vdCkKIyBUaGUgdmFyaWFibGVzIFNTSF9VU0VSIGFuZCBNQUNISU5FIGFyZSBkZWZpbmVkLgojUkVCT09UID0gc3NoICRTU0hfVVNFUkAkTUFDSElORSByZWJvb3QKCiMjIyMgUGVyIHRlc3QgcnVuIG9wdGlvbnMgIyMjIwojIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgb25seSBhbGxvd2VkIGluIFRFU1RfU1RBUlQgc2VjdGlvbnMuCiMgVGhleSBhcmUgaWdub3JlZCBpbiB0aGUgREVGQVVMVFMgc2VjdGlvbnMuCiMKIyBBbGwgb2YgdGhlc2UgYXJlIG9wdGlvbmFsIGFuZCB1bmRlZmluZWQgYnkgZGVmYXVsdCwgYWx0aG91Z2gKIyAgc29tZSBvZiB0aGVzZSBvcHRpb25zIGFyZSByZXF1aXJlZCBmb3IgVEVTVF9UWVBFIG9mIHBhdGNoY2hlY2sKIyAgYW5kIGJpc2VjdC4KIwojCiMgQ0hFQ0tPVVQgPSBicmFuY2gKIwojICBJZiB0aGUgQlVJTERfRElSIGlzIGEgZ2l0IHJlcG9zaXRvcnksIHRoZW4geW91IGNhbiBzZXQgdGhpcyBvcHRpb24KIyAgdG8gY2hlY2tvdXQgdGhlIGdpdmVuIGJyYW5jaCBiZWZvcmUgcnVubmluZyB0aGUgVEVTVC4gSWYgeW91CiMgIHNwZWNpZnkgdGhpcyBmb3IgdGhlIGZpcnN0IHJ1biwgdGhhdCBicmFuY2ggd2lsbCBiZSB1c2VkIGZvcgojICBhbGwgcHJlY2VkaW5nIHRlc3RzIHVudGlsIGEgbmV3IENIRUNLT1VUIGlzIHNldC4KIwojCiMKIyBGb3IgVEVTVF9UWVBFID0gcGF0Y2hjaGVjawojCiMgIFRoaXMgZXhwZWN0cyB0aGUgQlVJTERfRElSIHRvIGJlIGEgZ2l0IHJlcG9zaXRvcnksIGFuZAojICB3aWxsIGNoZWNrb3V0IHRoZSBQQVRDSENIRUNLX1NUQVJUIGNvbW1pdC4KIwojICBUaGUgb3B0aW9uIEJVSUxEX1RZUEUgd2lsbCBiZSBpZ25vcmVkLgojCiMgIFRoZSBNSU5fQ09ORklHIHdpbGwgYmUgdXNlZCBmb3IgYWxsIGJ1aWxkcyBvZiB0aGUgcGF0Y2hjaGVjay4gVGhlIGJ1aWxkIHR5cGUKIyAgdXNlZCBmb3IgcGF0Y2hjaGVjayBpcyBvbGRjb25maWcuCiMKIyAgUEFUQ0hDSEVDS19TVEFSVCBpcyByZXF1aXJlZCBhbmQgaXMgdGhlIGZpcnN0IHBhdGNoIHRvCiMgICB0ZXN0ICh0aGUgU0hBMSBvZiB0aGUgY29tbWl0KS4gWW91IG1heSBhbHNvIHNwZWNpZnkgYW55dGhpbmcKIyAgIHRoYXQgZ2l0IGNoZWNrb3V0IGFsbG93cyAoYnJhbmNoIG5hbWUsIHRhZ2UsIEhFQUR+MykuCiMKIyAgUEFUQ0hDSEVDS19FTkQgaXMgdGhlIGxhc3QgcGF0Y2ggdG8gY2hlY2sgKGRlZmF1bHQgSEVBRCkKIwojICBQQVRDSENIRUNLX1RZUEUgaXMgcmVxdWlyZWQgYW5kIGlzIHRoZSB0eXBlIG9mIHRlc3QgdG8gcnVuOgojICAgICAgYnVpbGQsIGJvb3QsIHRlc3QuCiMKIyAgIE5vdGUsIHRoZSBidWlsZCB0ZXN0IHdpbGwgbG9vayBmb3Igd2FybmluZ3MsIGlmIGEgd2FybmluZyBvY2N1cnJlZAojICAgICBpbiBhIGZpbGUgdGhhdCBhIGNvbW1pdCB0b3VjaGVzLCB0aGUgYnVpbGQgd2lsbCBmYWlsLgojCiMgICBJZiBCVUlMRF9OT0NMRUFOIGlzIHNldCwgdGhlbiBtYWtlIG1ycHJvcGVyIHdpbGwgbm90IGJlIHJ1biBvbgojICAgYW55IG9mIHRoZSBidWlsZHMsIGp1c3QgbGlrZSBhbGwgb3RoZXIgVEVTVF9UWVBFIHRlc3RzLiBCdXQKIyAgIHdoYXQgbWFrZXMgcGF0Y2hjaGVjayBkaWZmZXJlbnQgZnJvbSB0aGUgb3RoZXIgdGVzdHMsIGlzIGlmCiMgICBCVUlMRF9OT0NMRUFOIGlzIG5vdCBzZXQsIG9ubHkgdGhlIGZpcnN0IGFuZCBsYXN0IHBhdGNoIHJ1bgojICAgbWFrZSBtcnByb3Blci4gVGhpcyBoZWxwcyBzcGVlZCB1cCB0aGUgdGVzdC4KIwojIEV4YW1wbGU6CiMgICBURVNUX1NUQVJUCiMgICBURVNUX1RZUEUgPSBwYXRjaGNoZWNrCiMgICBDSEVDS09VVCA9IG15YnJhbmNoCiMgICBQQVRDSENIRUNLX1RZUEUgPSBib290CiMgICBQQVRDSENIRUNLX1NUQVJUID0gNzQ3ZTk0YWUzZDFiNGM5YmY1MzgwZTU2OWY2MTRlYjkwNDBiNzllNwojICAgUEFUQ0hDSEVDS19FTkQgPSBIRUFEfjIKIwojCiMKIyBGb3IgVEVTVF9UWVBFID0gYmlzZWN0CiMKIyAgWW91IGNhbiBzcGVjaWZ5IGEgZ2l0IGJpc2VjdCBpZiB0aGUgQlVJTERfRElSIGlzIGEgZ2l0IHJlcG9zaXRvcnkuCiMgIFRoZSBNSU5fQ09ORklHIHdpbGwgYmUgdXNlZCBmb3IgYWxsIGJ1aWxkcyBvZiB0aGUgYmlzZWN0LiBUaGUgYnVpbGQgdHlwZQojICB1c2VkIGZvciBiaXNlY3RpbmcgaXMgb2xkY29uZmlnLgojCiMgIFRoZSBvcHRpb24gQlVJTERfVFlQRSB3aWxsIGJlIGlnbm9yZWQuCiMKIyAgQklTRUNUX1RZUEUgaXMgdGhlIHR5cGUgb2YgdGVzdCB0byBwZXJmb3JtOgojCWJ1aWxkCS0gYmFkIGZhaWxzIHRvIGJ1aWxkCiMJYm9vdAktIGJhZCBidWlsZHMgYnV0IGZhaWxzIHRvIGJvb3QKIwl0ZXN0CS0gYmFkIGJvb3RzIGJ1dCBmYWlscyBhIHRlc3QKIwojIEJJU0VDVF9HT09EIGlzIHRoZSBjb21taXQgKFNIQTEpIHRvIGxhYmVsIGFzIGdvb2QgKGFjY2VwdHMgYWxsIGdpdCBnb29kIGNvbW1pdCB0eXBlcykKIyBCSVNFQ1RfQkFEIGlzIHRoZSBjb21taXQgdG8gbGFiZWwgYXMgYmFkIChhY2NlcHRzIGFsbCBnaXQgYmFkIGNvbW1pdCB0eXBlcykKIwojIFRoZSBhYm92ZSB0aHJlZSBvcHRpb25zIGFyZSByZXF1aXJlZCBmb3IgYSBiaXNlY3Qgb3BlcmF0aW9uLgojCiMgQklTRUNUX1JFUExBWSA9IC9wYXRoL3RvL3JlcGxheS9maWxlIChvcHRpb25hbCwgZGVmYXVsdCB1bmRlZmluZWQpCiMKIyAgIElmIGFuIG9wZXJhdGlvbiBmYWlsZWQgaW4gdGhlIGJpc2VjdCB0aGF0IHdhcyBub3QgZXhwZWN0ZWQgdG8KIyAgIGZhaWwuIFRoZW4gdGhlIHRlc3QgZW5kcy4gVGhlIHN0YXRlIG9mIHRoZSBCVUlMRF9ESVIgd2lsbCBiZQojICAgbGVmdCBvZmYgYXQgd2hlcmUgdGhlIGZhaWx1cmUgb2NjdXJyZWQuIFlvdSBjYW4gZXhhbWluZSB0aGUKIyAgIHJlYXNvbiBmb3IgdGhlIGZhaWx1cmUsIGFuZCBwZXJoYXBzIGV2ZW4gZmluZCBhIGdpdCBjb21taXQKIyAgIHRoYXQgd291bGQgd29yayB0byBjb250aW51ZSB3aXRoLiBZb3UgY2FuIHJ1bjoKIwojICAgZ2l0IGJpc2VjdCBsb2cgPiAvcGF0aC90by9yZXBsYXkvZmlsZQojCiMgICBUaGUgYWRkaW5nOgojCiMgICAgQklTRUNUX1JFUExBWT0gL3BhdGgvdG8vcmVwbGF5L2ZpbGUKIwojICAgQW5kIHJ1bm5pbmcgdGhlIHRlc3QgYWdhaW4uIFRoZSB0ZXN0IHdpbGwgcGVyZm9ybSB0aGUgaW5pdGlhbAojICAgIGdpdCBiaXNlY3Qgc3RhcnQsIGdpdCBiaXNlY3QgZ29vZCwgYW5kIGdpdCBiaXNlY3QgYmFkLCBhbmQKIyAgICB0aGVuIGl0IHdpbGwgcnVuIGdpdCBiaXNlY3QgcmVwbGF5IG9uIHRoaXMgZmlsZSwgYmVmb3JlCiMgICAgY29udGludWluZyB3aXRoIHRoZSBiaXNlY3QuCiMKIyBCSVNFQ1RfU1RBUlQgPSBjb21taXQgKG9wdGlvbmFsLCBkZWZhdWx0IHVuZGVmaW5lZCkKIwojICAgQXMgd2l0aCBCSVNFQ1RfUkVQTEFZLCBpZiB0aGUgdGVzdCBmYWlsZWQgb24gYSBjb21taXQgdGhhdAojICAganVzdCBoYXBwZW4gdG8gaGF2ZSBhIGJhZCBjb21taXQgaW4gdGhlIG1pZGRsZSBvZiB0aGUgYmlzZWN0LAojICAgYW5kIHlvdSBuZWVkIHRvIHNraXAgaXQuIElmIEJJU0VDVF9TVEFSVCBpcyBkZWZpbmVkLCBpdAojICAgd2lsbCBjaGVja291dCB0aGF0IGNvbW1pdCBhZnRlciBkb2luZyB0aGUgaW5pdGlhbCBnaXQgYmlzZWN0IHN0YXJ0LAojICAgZ2l0IGJpc2VjdCBnb29kLCBnaXQgYmlzZWN0IGJhZCwgYW5kIHJ1bm5pbmcgdGhlIGdpdCBiaXNlY3QgcmVwbGF5CiMgICBpZiB0aGUgQklTRUNUX1JFUExBWSBpcyBzZXQuCiMKIyBCSVNFQ1RfU0tJUCA9IDEgKG9wdGlvbmFsLCBkZWZhdWx0IDApCiMKIyAgIElmIEJJU0VDVF9UWVBFIGlzIHNldCB0byB0ZXN0IGJ1dCB0aGUgYnVpbGQgZmFpbHMsIGt0ZXN0IHdpbGwKIyAgIHNpbXBseSBmYWlsIHRoZSB0ZXN0IGFuZCBlbmQgdGhlaXIuIFlvdSBjb3VsZCB1c2UgQklTRUNUX1JFUExBWQojICAgYW5kIEJJU0VDVF9TVEFSVCB0byByZXN1bWUgYWZ0ZXIgeW91IGZvdW5kIGEgbmV3IHN0YXJ0aW5nIHBvaW50LAojICAgb3IgeW91IGNvdWxkIHNldCBCSVNFQ1RfU0tJUCB0byAxLiBJZiBCSVNFQ1RfU0tJUCBpcyBzZXQgdG8gMSwKIyAgIHdoZW4gc29tZXRoaW5nIG90aGVyIHRoYW4gdGhlIEJJU0VDVF9UWVBFIGZhaWxzLCBrdGVzdC5wbCB3aWxsCiMgICBydW4gImdpdCBiaXNlY3Qgc2tpcCIgYW5kIHRyeSBhZ2Fpbi4KIwojIEJJU0VDVF9GSUxFUyA9IDxwYXRoPiAob3B0aW9uYWwsIGRlZmF1bHQgdW5kZWZpbmVkKQojCiMgICBUbyBqdXN0IHJ1biB0aGUgZ2l0IGJpc2VjdCBvbiBhIHNwZWNpZmljIHBhdGgsIHNldCBCSVNFQ1RfRklMRVMuCiMgICBGb3IgZXhhbXBsZToKIwojICAgICBCSVNFQ1RfRklMRVMgPSBhcmNoL3g4NiBrZXJuZWwvdGltZQojCiMgICBXaWxsIHJ1biB0aGUgYmlzZWN0IHdpdGggImdpdCBiaXNlY3Qgc3RhcnQgLS0gYXJjaC94ODYga2VybmVsL3RpbWUiCiMKIyBCSVNFQ1RfUkVWRVJTRSA9IDEgKG9wdGlvbmFsLCBkZWZhdWx0IDApCiMKIyAgIEluIHRob3NlIHN0cmFuZ2UgaW5zdGFuY2VzIHdoZXJlIGl0IHdhcyBicm9rZW4gZm9yZXZlcgojICAgYW5kIHlvdSBhcmUgdHJ5aW5nIHRvIGZpbmQgd2hlcmUgaXQgc3RhcnRlZCB0byB3b3JrIQojICAgU2V0IEJJU0VDVF9HT09EIHRvIHRoZSBjb21taXQgdGhhdCB3YXMgbGFzdCBrbm93biB0byBmYWlsCiMgICBTZXQgQklTRUNUX0JBRCB0byB0aGUgY29tbWl0IHRoYXQgaXMga25vd24gdG8gc3RhcnQgd29ya2luZy4KIyAgIFdpdGggQklTRUNUX1JFVkVSU0UgPSAxLCBUaGUgdGVzdCB3aWxsIGNvbnNpZGVyIGZhaWx1cmVzIGFzCiMgICBnb29kLCBhbmQgc3VjY2VzcyBhcyBiYWQuCiMKIyBCSVNFQ1RfTUFOVUFMID0gMSAob3B0aW9uYWwsIGRlZmF1bHQgMCkKIwojICAgSW4gY2FzZSB0aGVyZSdzIGEgcHJvYmxlbSB3aXRoIGF1dG9tYXRpbmcgdGhlIGJpc2VjdCBmb3IKIyAgIHdoYXRldmVyIHJlYXNvbi4gKENhbid0IHJlYm9vdCwgd2FudCB0byBpbnNwZWN0IGVhY2ggaXRlcmF0aW9uKQojICAgRG9pbmcgYSBCSVNFQ1RfTUFOVUFMIHdpbGwgaGF2ZSB0aGUgdGVzdCB3YWl0IGZvciB5b3UgdG8KIyAgIHRlbGwgaXQgaWYgdGhlIHRlc3QgcGFzc2VkIG9yIGZhaWxlZCBhZnRlciBlYWNoIGl0ZXJhdGlvbi4KIyAgIFRoaXMgaXMgYmFzaWNhbGwgdGhlIHNhbWUgYXMgcnVubmluZyBnaXQgYmlzZWN0IHlvdXJzZWxmCiMgICBidXQga3Rlc3Qgd2lsbCByZWJ1aWxkIGFuZCBpbnN0YWxsIHRoZSBrZXJuZWwgZm9yIHlvdS4KIwojIEJJU0VDVF9DSEVDSyA9IDEgKG9wdGlvbmFsLCBkZWZhdWx0IDApCiMKIyAgIEp1c3QgdG8gYmUgc3VyZSB0aGUgZ29vZCBpcyBnb29kIGFuZCBiYWQgaXMgYmFkLCBzZXR0aW5nCiMgICBCSVNFQ1RfQ0hFQ0sgdG8gMSB3aWxsIHN0YXJ0IHRoZSBiaXNlY3QgYnkgZmlyc3QgY2hlY2tpbmcKIyAgIG91dCBCSVNFQ1RfQkFEIGFuZCBtYWtlcyBzdXJlIGl0IGZhaWxzLCB0aGVuIGl0IHdpbGwgY2hlY2sKIyAgIG91dCBCSVNFQ1RfR09PRCBhbmQgbWFrZXMgc3VyZSBpdCBzdWNjZWVkcyBiZWZvcmUgc3RhcnRpbmcKIyAgIHRoZSBiaXNlY3QgKGl0IHdvcmtzIGZvciBCSVNFQ1RfUkVWRVJTRSB0b28pLgojCiMgICBZb3UgY2FuIGxpbWl0IHRoZSB0ZXN0IHRvIGp1c3QgY2hlY2sgQklTRUNUX0dPT0Qgb3IKIyAgIEJJU0VDVF9CQUQgd2l0aCBCSVNFQ1RfQ0hFQ0sgPSBnb29kIG9yCiMgICBCSVNFQ1RfQ0hFQ0sgPSBiYWQsIHJlc3BlY3RpdmVseS4KIwojIEV4YW1wbGU6CiMgICBURVNUX1NUQVJUCiMgICBURVNUX1RZUEUgPSBiaXNlY3QKIyAgIEJJU0VDVF9HT09EID0gdjIuNi4zNgojICAgQklTRUNUX0JBRCA9IGI1MTUzMTYzZWQ1ODBlMDBjNjdiZGZlY2IwMmIyZTM4NDM4MTdiM2UKIyAgIEJJU0VDVF9UWVBFID0gYnVpbGQKIyAgIE1JTl9DT05GSUcgPSAvaG9tZS90ZXN0L2NvbmZpZy1iaXNlY3QKIwojCiMKIyBGb3IgVEVTVF9UWVBFID0gY29uZmlnX2Jpc2VjdAojCiMgIEluIHRob3NlIGNhc2VzIHRoYXQgeW91IGhhdmUgdHdvIGRpZmZlcmVudCBjb25maWdzLiBPbmUgb2YgdGhlbQojICB3b3JrLCB0aGUgb3RoZXIgZG9lcyBub3QsIGFuZCB5b3UgZG8gbm90IGtub3cgd2hhdCBjb25maWcgY2F1c2VzCiMgIHRoZSBwcm9ibGVtLgojICBUaGUgVEVTVF9UWVBFIGNvbmZpZ19iaXNlY3Qgd2lsbCBiaXNlY3QgdGhlIGJhZCBjb25maWcgbG9va2luZyBmb3IKIyAgd2hhdCBjb25maWcgY2F1c2VzIHRoZSBmYWlsdXJlLgojCiMgIFRoZSB3YXkgaXQgd29ya3MgaXMgdGhpczoKIwojICAgRmlyc3QgaXQgZmluZHMgYSBjb25maWcgdG8gd29yayB3aXRoLiBTaW5jZSBhIGRpZmZlcmVudCB2ZXJzaW9uLCBvcgojICAgTUlOX0NPTkZJRyBtYXkgY2F1c2UgZGlmZmVyZW50IGRlcGVuZGVjaWVzLCBpdCBtdXN0IHJ1biB0aHJvdWdoIHRoaXMKIyAgIHByZXBhcmF0aW9uLgojCiMgICBPdmVyd3JpdGVzIGFueSBjb25maWcgc2V0IGluIHRoZSBiYWQgY29uZmlnIHdpdGggYSBjb25maWcgc2V0IGluCiMgICBlaXRoZXIgdGhlIE1JTl9DT05GSUcgb3IgQUREX0NPTkZJRy4gVGh1cywgbWFrZSBzdXJlIHRoZXNlIGNvbmZpZ3MKIyAgIGFyZSBtaW5pbWFsIGFuZCBkbyBub3QgZGlzYWJsZSBjb25maWdzIHlvdSB3YW50IHRvIHRlc3Q6CiMgICAoaWUuICAjIENPTkZJR19GT08gaXMgbm90IHNldCkuCiMKIyAgIEFuIG9sZGNvbmZpZyBpcyBydW4gb24gdGhlIGJhZCBjb25maWcgYW5kIGFueSBuZXcgY29uZmlnIHRoYXQKIyAgIGFwcGVhcnMgd2lsbCBiZSBhZGRlZCB0byB0aGUgY29uZmlncyB0byB0ZXN0LgojCiMgICBGaW5hbGx5LCBpdCBnZW5lcmF0ZXMgYSBjb25maWcgd2l0aCB0aGUgYWJvdmUgcmVzdWx0IGFuZCBydW5zIGl0CiMgICBhZ2FpbiB0aHJvdWdoIG1ha2Ugb2xkY29uZmlnIHRvIHByb2R1Y2UgYSBjb25maWcgdGhhdCBzaG91bGQgYmUKIyAgIHNhdGlzZmllZCBieSBrY29uZmlnLgojCiMgICBUaGVuIGl0IHN0YXJ0cyB0aGUgYmlzZWN0LgojCiMgICBUaGUgY29uZmlncyB0byB0ZXN0IGFyZSBjdXQgaW4gaGFsZi4gSWYgYWxsIHRoZSBjb25maWdzIGluIHRoaXMKIyAgIGhhbGYgZGVwZW5kIG9uIGEgY29uZmlnIGluIHRoZSBvdGhlciBoYWxmLCB0aGVuIHRoZSBvdGhlciBoYWxmCiMgICBpcyB0ZXN0ZWQgaW5zdGVhZC4gSWYgbm8gY29uZmlncyBhcmUgZW5hYmxlZCBieSBlaXRoZXIgaGFsZiwgdGhlbgojICAgdGhpcyBtZWFucyBhIGNpcmN1bGFyIGRlcGVuZGVuY3kgZXhpc3RzIGFuZCB0aGUgdGVzdCBmYWlscy4KIwojICAgQSBjb25maWcgaXMgY3JlYXRlZCB3aXRoIHRoZSB0ZXN0IGhhbGYsIGFuZCB0aGUgYmlzZWN0IHRlc3QgaXMgcnVuLgojCiMgICBJZiB0aGUgYmlzZWN0IHN1Y2NlZWRzLCB0aGVuIGFsbCBjb25maWdzIGluIHRoZSBnZW5lcmF0ZWQgY29uZmlnCiMgICBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBjb25maWdzIHRvIHRlc3QgYW5kIGFkZGVkIHRvIHRoZSBjb25maWdzIHRoYXQKIyAgIHdpbGwgYmUgZW5hYmxlZCBmb3IgYWxsIGJ1aWxkcyAodGhleSB3aWxsIGJlIGVuYWJsZWQsIGJ1dCBub3QgYmUgcGFydAojICAgb2YgdGhlIGNvbmZpZ3MgdG8gZXhhbWluZSkuCiMKIyAgIElmIHRoZSBiaXNlY3QgZmFpbHMsIHRoZW4gYWxsIHRlc3QgY29uZmlncyB0aGF0IHdlcmUgbm90IGVuYWJsZWQgYnkKIyAgIHRoZSBjb25maWcgZmlsZSBhcmUgcmVtb3ZlZCBmcm9tIHRoZSB0ZXN0LiBUaGVzZSBjb25maWdzIHdpbGwgbm90CiMgICBiZSBlbmFibGVkIGluIGZ1dHVyZSB0ZXN0cy4gU2luY2UgY3VycmVudCBjb25maWcgZmFpbGVkLCB3ZSBjb25zaWRlcgojICAgdGhpcyB0byBiZSBhIHN1YnNldCBvZiB0aGUgY29uZmlnIHRoYXQgd2Ugc3RhcnRlZCB3aXRoLgojCiMgICBXaGVuIHdlIGFyZSBkb3duIHRvIG9uZSBjb25maWcsIGl0IGlzIGNvbnNpZGVyZWQgdGhlIGJhZCBjb25maWcuCiMKIyAgIE5vdGUsIHRoZSBjb25maWcgY2hvc2VuIG1heSBub3QgYmUgdGhlIHRydWUgYmFkIGNvbmZpZy4gRHVlIHRvCiMgICBkZXBlbmRlbmNpZXMgYW5kIHNlbGVjdGlvbnMgb2YgdGhlIGtidWlsZCBzeXN0ZW0sIG11bGl0cGxlCiMgICBjb25maWdzIG1heSBiZSBuZWVkZWQgdG8gY2F1c2UgYSBmYWlsdXJlLiBJZiB5b3UgZGlzYWJsZSB0aGUKIyAgIGNvbmZpZyB0aGF0IHdhcyBmb3VuZCBhbmQgcmVzdGFydCB0aGUgdGVzdCwgaWYgdGhlIHRlc3QgZmFpbHMKIyAgIGFnYWluLCBpdCBpcyByZWNvbW1lbmRlZCB0byByZXJ1biB0aGUgY29uZmlnX2Jpc2VjdCB3aXRoIGEgbmV3CiMgICBiYWQgY29uZmlnIHdpdGhvdXQgdGhlIGZvdW5kIGNvbmZpZyBlbmFibGVkLgojCiMgIFRoZSBvcHRpb24gQlVJTERfVFlQRSB3aWxsIGJlIGlnbm9yZWQuCiMKIyAgQ09ORklHX0JJU0VDVF9UWVBFIGlzIHRoZSB0eXBlIG9mIHRlc3QgdG8gcGVyZm9ybToKIwlidWlsZAktIGJhZCBmYWlscyB0byBidWlsZAojCWJvb3QJLSBiYWQgYnVpbGRzIGJ1dCBmYWlscyB0byBib290CiMJdGVzdAktIGJhZCBib290cyBidXQgZmFpbHMgYSB0ZXN0CiMKIyAgIENPTkZJR19CSVNFQ1QgaXMgdGhlIGNvbmZpZyB0aGF0IGZhaWxlZCB0byBib290CiMKIyAgIElmIEJJU0VDVF9NQU5VQUwgaXMgc2V0LCBpdCB3aWxsIHBhdXNlIGJldHdlZW4gaXRlcmF0aW9ucy4KIyAgIFRoaXMgaXMgdXNlZnVsIHRvIHVzZSBqdXN0IGt0ZXN0LnBsIGp1c3QgZm9yIHRoZSBjb25maWcgYmlzZWN0LgojICAgSWYgeW91IHNldCBpdCB0byBidWlsZCwgaXQgd2lsbCBydW4gdGhlIGJpc2VjdCBhbmQgeW91IGNhbgojICAgY29udHJvbCB3aGF0IGhhcHBlbnMgaW4gYmV0d2VlbiBpdGVyYXRpb25zLiBJdCB3aWxsIGFzayB5b3UgaWYKIyAgIHRoZSB0ZXN0IHN1Y2NlZWRlZCBvciBub3QgYW5kIGNvbnRpbnVlIHRoZSBjb25maWcgYmlzZWN0LgojCiMgRXhhbXBsZToKIyAgIFRFU1RfU1RBUlQKIyAgIFRFU1RfVFlQRSA9IGNvbmZpZ19iaXNlY3QKIyAgIENPTkZJR19CSVNFQ1RfVFlQRSA9IGJ1aWxkCiMgICBDT05GSUdfQklTRUNUID0gL2hvbWUvdGVzdC+ib25maWctYmFkCiMgICBNSU5fQ09ORklHID0gL2hvbWUvdGVzdC9jb25maWctbWluCiMgICBCSVNFQ1RfTUFOVUFMID0gMQojCg==