LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQWdlcmUgU3lzdGVtcyBJbmMuCiAqIFdpcmVsZXNzIGRldmljZSBkcml2ZXIgZm9yIExpbnV4ICh3bGFnczQ5KS4KICoKICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMgQWdlcmUgU3lzdGVtcyBJbmMuCiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqICAgaHR0cDovL3d3dy5hZ2VyZS5jb20KICoKICogSW5pdGlhbGx5IGRldmVsb3BlZCBieSBUcmlwbGVQb2ludCwgSW5jLgogKiAgIGh0dHA6Ly93d3cudHJpcGxlcG9pbnQuY29tCiAqCiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqCiAqICAgVGhpcyBoZWFkZXIgZmlsZSBjb250YWlucyB2ZXJzaW9uIGluZm9ybWF0aW9uIGZvciB0aGUgY29kZSBiYXNlLCBhcyB3ZWxsIGFzCiAqICAgc3BlY2lhbCBkZWZpbml0aW9ucyBhbmQgbWFjcm9zIG5lZWRlZCBieSBjZXJ0YWluIHZlcnNpb25zIG9mIHRoZSBjb2RlLgogKgogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKgogKiBTT0ZUV0FSRSBMSUNFTlNFCiAqCiAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLAogKiB3aGljaCB5b3Ugc2hvdWxkIHJlYWQgY2FyZWZ1bGx5IGJlZm9yZSB1c2luZyB0aGUgc29mdHdhcmUuICBVc2luZyB0aGlzCiAqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KICogbm90IGFncmVlIHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGRvIG5vdCB1c2UgdGhlIHNvZnR3YXJlLgogKgogKiBDb3B5cmlnaHQgqSAyMDAzIEFnZXJlIFN5c3RlbXMgSW5jLgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKgogKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogKiBtb2RpZmljYXRpb25zLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CiAqCiAqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCiAqICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGFzIGNvbW1lbnRzIGluIHRoZSBjb2RlIGFzCiAqICAgIHdlbGwgYXMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQogKiAgICBkaXN0cmlidXRpb24uCiAqCiAqIC4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAogKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCiAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogKgogKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycwogKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAqCiAqIERpc2NsYWltZXIKICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCCTQVMgSVOUIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCiAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBJTkZSSU5HRU1FTlQgQU5EIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIEFOWQogKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgogKiBSSVNLLiBJTiBOTyBFVkVOVCBTSEFMTCBBR0VSRSBTWVNURU1TIElOQy4gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCiAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECiAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQ09OVFJBQ1QsIFNUUklDVAogKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAogKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAogKiBEQU1BR0UuCiAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgojaWZuZGVmIF9fV0xfVkVSU0lPTl9IX18KI2RlZmluZSBfX1dMX1ZFUlNJT05fSF9fCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgaW5jbHVkZSBmaWxlcwogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovLyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KCiNpZm5kZWYgQ09ORklHX01PRFZFUlNJT05TCiNkZWZpbmUgX19OT19WRVJTSU9OX18KI2VuZGlmICAvLyBDT05GSUdfTU9EVkVSU0lPTlMKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICBjb25zdGFudCBkZWZpbml0aW9ucwogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKI2RlZmluZSBWRU5ET1JfTkFNRSAgICAgICAgICJBZ2VyZSBTeXN0ZW1zLCBodHRwOi8vd3d3LmFnZXJlLmNvbSIKCiNkZWZpbmUgRFJJVkVSX05BTUUgICAgICAgICAid2xhZ3M0OSIKI2RlZmluZSBEUlZfSURFTlRJVFkgICAgICAgIDQ5CgojZGVmaW5lIERSVl9NQUpPUl9WRVJTSU9OICAgNwojZGVmaW5lIERSVl9NSU5PUl9WRVJTSU9OICAgMjIKI2RlZmluZSBEUlZfVkVSU0lPTl9TVFIgICAgICI3LjIyIgoKCiNpZiBkZWZpbmVkIEJVU19QQ01DSUEKI2RlZmluZSBCVVNfVFlQRSAgICAgICAgICAgICJQQ01DSUEiCiNlbGlmIGRlZmluZWQgQlVTX1BDSQojZGVmaW5lIEJVU19UWVBFICAgICAgICAgICAgIlBDSSIKI2Vsc2UKZXJyOiBkZWZpbmUgYnVzIHR5cGU7CiNlbmRpZiAgLy8gQlVTX1hYWAoKI2lmIGRlZmluZWQgSEVSTUVTMjUKI2RlZmluZSBIV19UWVBFCQkJCSJISUkuNSIKI2Vsc2UKI2RlZmluZSBIV19UWVBFCQkJCSJISUkiCiNlbmRpZiAvLyBIRVJNRVMyNQoKI2lmIGRlZmluZWQgV0FSUAojZGVmaW5lIEZXX1RZUEUJCQkJIldBUlAiCiNlbHNlCiNkZWZpbmUgRldfVFlQRQkJCQkiQkVBR0xFIgojZW5kaWYgLy8gV0FSUAoKI2lmIGRlZmluZWQgSEVSTUVTMjUKI2lmIGRlZmluZWQgV0FSUAojZGVmaW5lIERSVl9WQVJJQU5UICAgICAgICAgMwojZWxzZQojZGVmaW5lIERSVl9WQVJJQU5UICAgICAgICAgNAojZW5kaWYgLy8gV0FSUAojZWxzZQojZGVmaW5lIERSVl9WQVJJQU5UICAgICAgICAgMgojZW5kaWYgLy8gSEVSTUVTMjUKCiNpZmRlZiBCVVNfUENNQ0lBCiNpZiBkZWZpbmVkIEhFUk1FUzI1CiNkZWZpbmUgTU9EVUxFX05BTUUgICAgICAgICBEUklWRVJfTkFNRSAiX2gyNV9jcyIKI2Vsc2UKI2RlZmluZSBNT0RVTEVfTkFNRSAgICAgICAgIERSSVZFUl9OQU1FICJfaDJfY3MiCiNlbmRpZiAgLyogSEVSTUVTMjUgKi8KI2VsaWYgZGVmaW5lZCBCVVNfUENJCiNpZiBkZWZpbmVkIEhFUk1FUzI1CiNkZWZpbmUgTU9EVUxFX05BTUUgICAgICAgICBEUklWRVJfTkFNRSAiX2gyNSIKI2Vsc2UKI2RlZmluZSBNT0RVTEVfTkFNRSAgICAgICAgIERSSVZFUl9OQU1FICJfaDIiCiNlbmRpZiAgLyogSEVSTUVTMjUgKi8KI2VuZGlmICAvKiBCVVNfWFhYICovCgojaWZkZWYgREJHCiNkZWZpbmUgTU9EVUxFX0RBVEUgICAgICAgICBfX0RBVEVfXyAiICIgX19USU1FX18KI2Vsc2UKI2RlZmluZSBNT0RVTEVfREFURSAgICAgICAgICIwNy8xOC8yMDA0IDEzOjMwOjAwIgojZW5kaWYgLy8gREJHCgovLyNkZWZpbmUgU1RSMihtKSAjbQovLyNkZWZpbmUgU1RSMShtKSBTVFIyKG0pCi8vI2RlZmluZSBNT0RVTEVfTkFNRQkJCVNUUjEoIE1PRF9OQU1FICkKCiNkZWZpbmUgVkVSU0lPTl9JTkZPICAgICAgICBNT0RVTEVfTkFNRSAiIHYiIERSVl9WRVJTSU9OX1NUUiBcCgkJCQkJCQkiIGZvciAiIEJVU19UWVBFICIsICIgCQkJCQkJCQkJCQkgICAJIFwKCQkJCQkJCU1PRFVMRV9EQVRFICIgYnkgIiBWRU5ET1JfTkFNRQoKLyogVGhlIHZlcnNpb24gb2Ygd2lyZWxlc3MgZXh0ZW5zaW9ucyB3ZSBzdXBwb3J0ICovCiNkZWZpbmUgV0lSRUxFU1NfU1VQUE9SVCAgICAyMQoKLy8jZGVmaW5lIERCR19NT0RfTkFNRSAgICAgICAgIERSSVZFUl9OQU1FICI6IiBCVVNfVFlQRSAiOiIgSFdfVFlQRSAiOiIgRldfVFlQRQojZGVmaW5lIERCR19NT0RfTkFNRSAgICAgICAgTU9EVUxFX05BTUUKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogIGJ1cyBhcmNoaXRlY2h0dXJlIHNwZWNpZmljIGRlZmluZXMsIGluY2x1ZGVzLCBldGMuCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qCiAqIFRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIGRpZmZlcmVuY2UgZm9yIFBDTUNJQSBhbmQgUENJIGFueW1vcmUsIGF0IGxlYXN0CiAqIGZvciBQQ01DSUEgdGhlIHNhbWUgZGVmaW5lcyBhcmUgbmVlZGVkIG5vdyBhcyBwcmV2aW91c2x5IG9ubHkgdXNlZCBmb3IgUENJCiAqLwoKI2RlZmluZSBORVdfTVVMVElDQVNUCiNkZWZpbmUgQUxMT0NfU0tCKGxlbikgICBkZXZfYWxsb2Nfc2tiKGxlbisyKQojZGVmaW5lIEdFVF9QQUNLRVQoZGV2LCBza2IsIGNvdW50KVwKICAgICAgICAgICAgICAgICAgICAgICAgc2tiX3Jlc2VydmUoKHNrYiksIDIpOyBcCiAgICAgICAgICAgICAgICAgICAgICAgIEJMT0NLX0lOUFVUKHNrYl9wdXQoKHNrYiksIChjb3VudCkpLCAoY291bnQpKTsgXAogICAgICAgICAgICAgICAgICAgICAgICAoc2tiKS0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucygoc2tiKSwgKGRldikpCiNkZWZpbmUgR0VUX1BBQ0tFVF9ETUEoZGV2LCBza2IsIGNvdW50KVwKICAgICAgICAgICAgICAgICAgICAgICAgc2tiX3Jlc2VydmUoKHNrYiksIDIpOyBcCiAgICAgICAgICAgICAgICAgICAgICAgIEJMT0NLX0lOUFVUX0RNQShza2JfcHV0KChza2IpLCAoY291bnQpKSwgKGNvdW50KSk7IFwKICAgICAgICAgICAgICAgICAgICAgICAgKHNrYiktPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoKHNrYiksIChkZXYpKQoKCgoKI2VuZGlmICAvLyBfX1dMX1ZFUlNJT05fSF9fCg==