LyoqCiAqIENvcHlyaWdodChjKSAyMDExIFRydXN0ZWQgTG9naWMuICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogKiBhcmUgbWV0OgogKgogKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgogKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCiAqICAgIGRpc3RyaWJ1dGlvbi4KICogICogTmVpdGhlciB0aGUgbmFtZSBUcnVzdGVkIExvZ2ljIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAogKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAqCiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCiAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCiAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAogKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCiAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAogKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICovCgojaWZuZGVmIF9fU19WRVJTSU9OX0hfXwojZGVmaW5lIF9fU19WRVJTSU9OX0hfXwoKLyoKICogVXNhZ2U6IGRlZmluZSBTX1ZFUlNJT05fQlVJTEQgb24gdGhlIGNvbXBpbGVyJ3MgY29tbWFuZCBsaW5lLgogKgogKiBUaGVuIHNldDoKICogLSBTX1ZFUlNJT05fT1MKICogLSBTX1ZFUlNJT05fUExBVEZPUk0KICogLSBTX1ZFUlNJT05fTUFJTgogKiAtIFNfVkVSU0lPTl9FTkcgaXMgb3B0aW9uYWwKICogLSBTX1ZFUlNJT05fUEFUQ0ggaXMgb3B0aW9uYWwKICogLSBTX1ZFUlNJT05fQlVJTEQgPSAwIGlmIFNfVkVSU0lPTl9CVUlMRCBub3QgZGVmaW5lZCBvciBlbXB0eQogKi8KI2lmIGRlZmluZWQoV0lOMzIpCiNkZWZpbmUgU19WRVJTSU9OX09TICJXIiAgICAgICAgICAvKiAiVyIgZm9yIFdpbmRvd3MgUEMgKFhQLCBWaXN0YYUpICovCiNkZWZpbmUgU19WRVJTSU9OX1BMQVRGT1JNICJYIiAgICAvKiAiWCIgZm9yIGl4ODYgUEMgc2ltdWxhdG9ycyAqLwojZWxpZiBkZWZpbmVkKF9fQU5EUk9JRDMyX18pCiNkZWZpbmUgU19WRVJTSU9OX09TICJBIiAgICAgICAgICAvKiAiQSIgZm9yIEFuZHJvaWQgKi8KI2RlZmluZSBTX1ZFUlNJT05fUExBVEZPUk0gIkciICAgIC8qICJHIiBmb3IgNDQzMCAqLwojZWxpZiBkZWZpbmVkKExJTlVYKQojZGVmaW5lIFNfVkVSU0lPTl9PUyAiTCIgICAgICAgICAgLyogIkwiIGZvciBMaW51eCAqLwojZGVmaW5lIFNfVkVSU0lPTl9QTEFURk9STSAiWCIgICAgLyogIlgiIGZvciBpeDg2IFBDIHNpbXVsYXRvcnMgKi8KI2Vsc2UKI2RlZmluZSBTX1ZFUlNJT05fT1MgIlgiICAgICAgICAgIC8qICJYIiBmb3IgU2VjdXJlLVdvcmxkICovCiNkZWZpbmUgU19WRVJTSU9OX1BMQVRGT1JNICJHIiAgICAvKiAiRyIgZm9yIDQ0MzAgKi8KI2VuZGlmCgovKgogKiBUaGlzIHZlcnNpb24gbnVtYmVyIG11c3QgYmUgdXBkYXRlZCBmb3IgZWFjaCBuZXcgcmVsZWFzZQogKi8KI2RlZmluZSBTX1ZFUlNJT05fTUFJTiAgIjAxLjA0IgojZGVmaW5lIFNfVkVSU0lPTl9SRVNPVVJDRSAxLDQsMCxTX1ZFUlNJT05fQlVJTEQKCi8qCiogSWYgdGhpcyBpcyBhIHBhdGNoIG9yIGVuZ2luZWVyaW5nIHZlcnNpb24gdXNlIHRoZSBmb2xsb3dpbmcKKiBkZWZpbmVzIHRvIHNldCB0aGUgdmVyc2lvbiBudW1iZXIuIEVsc2Ugc2V0IHRoZXNlIHZhbHVlcyB0byAwLgoqLwojZGVmaW5lIFNfVkVSU0lPTl9QQVRDSCAxMQojZGVmaW5lIFNfVkVSU0lPTl9FTkcgMAoKI2lmZGVmIFNfVkVSU0lPTl9CVUlMRAovKiBUUklDSzogZGV0ZWN0IGlmIFNfVkVSU0lPTiBpcyBkZWZpbmVkIGJ1dCBlbXB0eSAqLwojaWYgMCA9PSBTX1ZFUlNJT05fQlVJTEQtMAojdW5kZWYgIFNfVkVSU0lPTl9CVUlMRAojZGVmaW5lIFNfVkVSU0lPTl9CVUlMRCAwCiNlbmRpZgojZWxzZQovKiBTX1ZFUlNJT05fQlVJTEQgaXMgbm90IGRlZmluZWQgKi8KI2RlZmluZSBTX1ZFUlNJT05fQlVJTEQgMAojZW5kaWYKCiNkZWZpbmUgX19TVFJJTkdJRlkoWCkgI1gKI2RlZmluZSBfX1NUUklOR0lGWTIoWCkgX19TVFJJTkdJRlkoWCkKCiNpZiBTX1ZFUlNJT05fRU5HICE9IDAKI2RlZmluZSBfU19WRVJTSU9OX0VORyAiZSIgX19TVFJJTkdJRlkyKFNfVkVSU0lPTl9FTkcpCiNlbHNlCiNkZWZpbmUgX1NfVkVSU0lPTl9FTkcgIiIKI2VuZGlmCgojaWYgU19WRVJTSU9OX1BBVENIICE9IDAKI2RlZmluZSBfU19WRVJTSU9OX1BBVENIICJwIiBfX1NUUklOR0lGWTIoU19WRVJTSU9OX1BBVENIKQojZWxzZQojZGVmaW5lIF9TX1ZFUlNJT05fUEFUQ0ggIiIKI2VuZGlmCgojaWYgIWRlZmluZWQoTkRFQlVHKSB8fCBkZWZpbmVkKF9ERUJVRykKI2RlZmluZSBTX1ZFUlNJT05fVkFSSUFOVCAiRCAgICIKI2Vsc2UKI2RlZmluZSBTX1ZFUlNJT05fVkFSSUFOVCAiICAgICIKI2VuZGlmCgojZGVmaW5lIFNfVkVSU0lPTl9TVFJJTkcgXAoJIlNNQyIgXAoJU19WRVJTSU9OX09TIFwKCVNfVkVSU0lPTl9QTEFURk9STSBcCglTX1ZFUlNJT05fTUFJTiBcCglfU19WRVJTSU9OX1BBVENIIFwKCV9TX1ZFUlNJT05fRU5HIFwKCSIuIiAgX19TVFJJTkdJRlkyKFNfVkVSU0lPTl9CVUlMRCkgIiAiIFwKCVNfVkVSU0lPTl9WQVJJQU5UCgojZW5kaWYgLyogX19TX1ZFUlNJT05fSF9fICovCg==