LyoqCiAqIENvcHlyaWdodChjKSAyMDExIFRydXN0ZWQgTG9naWMuICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogKiBhcmUgbWV0OgogKgogKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgogKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCiAqICAgIGRpc3RyaWJ1dGlvbi4KICogICogTmVpdGhlciB0aGUgbmFtZSBUcnVzdGVkIExvZ2ljIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAogKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAqCiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCiAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCiAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAogKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCiAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAogKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICovCiNpZm5kZWYgX19TX1ZFUlNJT05fSF9fCiNkZWZpbmUgX19TX1ZFUlNJT05fSF9fCgovKgogKiBVc2FnZTogZGVmaW5lIFNfVkVSU0lPTl9CVUlMRCBvbiB0aGUgY29tcGlsZXIncyBjb21tYW5kIGxpbmUuCiAqCiAqIFRoZW4gc2V0OgogKiAtIFNfVkVSU0lPTl9PUwogKiAtIFNfVkVSU0lPTl9QTEFURk9STQogKiAtIFNfVkVSU0lPTl9NQUlOCiAqIC0gU19WRVJTSU9OX0VORyBpcyBvcHRpb25hbAogKiAtIFNfVkVSU0lPTl9QQVRDSCBpcyBvcHRpb25hbAogKiAtIFNfVkVSU0lPTl9CVUlMRCA9IDAgaWYgU19WRVJTSU9OX0JVSUxEIG5vdCBkZWZpbmVkIG9yIGVtcHR5CiAqLwojaWYgZGVmaW5lZChXSU4zMikKI2RlZmluZSBTX1ZFUlNJT05fT1MgIlciICAgICAgICAgIC8qICJXIiBmb3IgV2luZG93cyBQQyAoWFAsIFZpc3RhhSkgKi8KI2RlZmluZSBTX1ZFUlNJT05fUExBVEZPUk0gIlgiICAgIC8qICJYIiBmb3IgaXg4NiBQQyBzaW11bGF0b3JzICovCiNlbGlmIGRlZmluZWQoQU5EUk9JRCkKI2RlZmluZSBTX1ZFUlNJT05fT1MgIkEiICAgICAgICAgIC8qICJBIiBmb3IgQW5kcm9pZCAqLwojZGVmaW5lIFNfVkVSU0lPTl9QTEFURk9STSAiRyIgICAgLyogIkciIGZvciA0NDMwICovCiNlbGlmIGRlZmluZWQoTElOVVgpCiNkZWZpbmUgU19WRVJTSU9OX09TICJMIiAgICAgICAgICAvKiAiTCIgZm9yIExpbnV4ICovCiNkZWZpbmUgU19WRVJTSU9OX1BMQVRGT1JNICJYIiAgICAvKiAiWCIgZm9yIGl4ODYgUEMgc2ltdWxhdG9ycyAqLwojZWxzZQojZGVmaW5lIFNfVkVSU0lPTl9PUyAiWCIgICAgICAgICAgLyogIlgiIGZvciBTZWN1cmUtV29ybGQgKi8KI2RlZmluZSBTX1ZFUlNJT05fUExBVEZPUk0gIkciICAgIC8qICJHIiBmb3IgNDQzMCAqLwojZW5kaWYKCi8qCiAqIFRoaXMgdmVyc2lvbiBudW1iZXIgbXVzdCBiZSB1cGRhdGVkIGZvciBlYWNoIG5ldyByZWxlYXNlCiAqLwojZGVmaW5lIFNfVkVSU0lPTl9NQUlOICAiMDEuMDYiCiNkZWZpbmUgU19WRVJTSU9OX1JFU09VUkNFIDEsNiwwLFNfVkVSU0lPTl9CVUlMRAoKLyoKKiBJZiB0aGlzIGlzIGEgcGF0Y2ggb3IgZW5naW5lZXJpbmcgdmVyc2lvbiB1c2UgdGhlIGZvbGxvd2luZwoqIGRlZmluZXMgdG8gc2V0IHRoZSB2ZXJzaW9uIG51bWJlci4gRWxzZSBzZXQgdGhlc2UgdmFsdWVzIHRvIDAuCiovCiNkZWZpbmUgU19WRVJTSU9OX0VORyAwCiNkZWZpbmUgU19WRVJTSU9OX1BBVENIIDYKCiNpZmRlZiBTX1ZFUlNJT05fQlVJTEQKLyogVFJJQ0s6IGRldGVjdCBpZiBTX1ZFUlNJT04gaXMgZGVmaW5lZCBidXQgZW1wdHkgKi8KI2lmIDAgPT0gU19WRVJTSU9OX0JVSUxELTAKI3VuZGVmICBTX1ZFUlNJT05fQlVJTEQKI2RlZmluZSBTX1ZFUlNJT05fQlVJTEQgMAojZW5kaWYKI2Vsc2UKLyogU19WRVJTSU9OX0JVSUxEIGlzIG5vdCBkZWZpbmVkICovCiNkZWZpbmUgU19WRVJTSU9OX0JVSUxEIDAKI2VuZGlmCgojZGVmaW5lIF9fU1RSSU5HSUZZKFgpICNYCiNkZWZpbmUgX19TVFJJTkdJRlkyKFgpIF9fU1RSSU5HSUZZKFgpCgojaWYgU19WRVJTSU9OX0VORyAhPSAwCiNkZWZpbmUgX1NfVkVSU0lPTl9FTkcgImUiIF9fU1RSSU5HSUZZMihTX1ZFUlNJT05fRU5HKQojZWxzZQojZGVmaW5lIF9TX1ZFUlNJT05fRU5HICIiCiNlbmRpZgoKI2lmIFNfVkVSU0lPTl9QQVRDSCAhPSAwCiNkZWZpbmUgX1NfVkVSU0lPTl9QQVRDSCAicCIgX19TVFJJTkdJRlkyKFNfVkVSU0lPTl9QQVRDSCkKI2Vsc2UKI2RlZmluZSBfU19WRVJTSU9OX1BBVENIICIiCiNlbmRpZgoKI2lmICFkZWZpbmVkKE5ERUJVRykgfHwgZGVmaW5lZChfREVCVUcpCiNkZWZpbmUgU19WRVJTSU9OX1ZBUklBTlQgIkQgICAiCiNlbHNlCiNkZWZpbmUgU19WRVJTSU9OX1ZBUklBTlQgIiAgICAiCiNlbmRpZgoKI2RlZmluZSBTX1ZFUlNJT05fU1RSSU5HIFwKCSJTTUMiIFwKCVNfVkVSU0lPTl9PUyBcCglTX1ZFUlNJT05fUExBVEZPUk0gXAoJU19WRVJTSU9OX01BSU4gXAoJX1NfVkVSU0lPTl9FTkcgXAoJX1NfVkVSU0lPTl9QQVRDSCBcCgkiLiIgIF9fU1RSSU5HSUZZMihTX1ZFUlNJT05fQlVJTEQpICIgIiBcCglTX1ZFUlNJT05fVkFSSUFOVAoKI2VuZGlmIC8qIF9fU19WRVJTSU9OX0hfXyAqLwo=