LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQWdlcmUgU3lzdGVtcyBJbmMuCiAqIFdpcmVsZXNzIGRldmljZSBkcml2ZXIgZm9yIExpbnV4ICh3bGFnczQ5KS4KICoKICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMgQWdlcmUgU3lzdGVtcyBJbmMuCiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqICAgaHR0cDovL3d3dy5hZ2VyZS5jb20KICoKICogSW5pdGlhbGx5IGRldmVsb3BlZCBieSBUcmlwbGVQb2ludCwgSW5jLgogKiAgIGh0dHA6Ly93d3cudHJpcGxlcG9pbnQuY29tCiAqCiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqCiAqICAgVGhpcyBmaWxlIGNvbnRhaW5zIERIRiBjb25maWd1cmF0aW9uIGluZm8uCiAqCiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqCiAqIFNPRlRXQVJFIExJQ0VOU0UKICoKICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMsCiAqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKICogc29mdHdhcmUgaW5kaWNhdGVzIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIElmIHlvdSBkbwogKiBub3QgYWdyZWUgd2l0aCB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgZG8gbm90IHVzZSB0aGUgc29mdHdhcmUuCiAqCiAqIENvcHlyaWdodCCpIDIwMDMgQWdlcmUgU3lzdGVtcyBJbmMuCiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqCiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIG9yIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAqIG1vZGlmaWNhdGlvbnMsIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKICoKICogLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKICogICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgYXMgY29tbWVudHMgaW4gdGhlIGNvZGUgYXMKICogICAgd2VsbCBhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCiAqICAgIGRpc3RyaWJ1dGlvbi4KICoKICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCiAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAqCiAqIC4gTmVpdGhlciB0aGUgbmFtZSBvZiBBZ2VyZSBTeXN0ZW1zIEluYy4gbm9yIHRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzCiAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQogKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KICoKICogRGlzY2xhaW1lcgogKgogKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIJNBUyBJU5QgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIElORlJJTkdFTUVOVCBBTkQgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgogKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgQU5ZCiAqIFVTRSwgTU9ESUZJQ0FUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSElTIFNPRlRXQVJFIElTIFNPTEVMWSBBVCBUSEUgVVNFUlMgT1dOCiAqIFJJU0suIElOIE5PIEVWRU5UIFNIQUxMIEFHRVJFIFNZU1RFTVMgSU5DLiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwogKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBDT05UUkFDVCwgU1RSSUNUCiAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCiAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICiAqIERBTUFHRS4KICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCiNpZm5kZWYgREhGQ0ZHX0gKI2RlZmluZSBESEZDRkdfSAovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIEZpbGUgREhGQ0ZHLkgKICoKICogQ29udGVudHM6ICNkZWZpbmVzIGZvciB0aGUgREhGIG1vZHVsZQogKgogKiBDb21tZW50czoKICogICBTb21lIGNvbWJpbmF0aW9ucyBvZiB0aGUgI2RlZmluZXMgaW4gdGhpcyBmaWxlIGFyZSBpbGxlZ2FsIChhcyBub3RlZCBiZWxvdykuCiAqICAgSWYgYW4gaWxsZWdhbCBjb21iaW5hdGlvbnMgb2YgI2RlZmluZXMgaXMgc3BlY2lmaWVkIGEgY29tcGlsZSBlcnJvciBpcwogKiAgIGdlbmVyYXRlZC4gU2VlIGRvY3VtZW50IERIRlVHLkRPQyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICoKICogQXV0aG9yOiBKb2huIE1lZXJ0ZW5zCiAqIERhdGU6ICAgMTEtMDEtMjAwMAogKgogKiBDaGFuZ2UgaGlzdG9yeToKICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoKCi8vIERlZmluZSBESEZfV0NJIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgV0NJIHRvIGFjY2VzcyB0aGUgT1JpTk9DTyBjYXJkLgovLyBEZWZpbmUgREhGX1VJTCBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIFVJTCB0byBhY2Nlc3MgdGhlIE9SaU5PQ08gY2FyZC4KLy8gWW91IG11c3QgZGVmaW5lIGVpdGhlciBESEZfV0NJIG9yIERIRl9VSUwuIElmIG5laXRoZXIgb2YgdGhlIHR3byBpcyBkZWZpbmVkCi8vIG9yIGJvdGggYSBjb21waWxlIGVycm9yIGlzIGdlbmVyYXRlZC4KI2RlZmluZSBESEZfV0NJCi8vISEhI2RlZmluZSBESEZfVUlMCgovLyBEZWZpbmUgREhGX0JJR19FTkRJQU4gaWYgeW91IGFyZSB3b3JraW5nIG9uIGEgYmlnIGVuZGlhbiBwbGF0Zm9ybS4KLy8gRGVmaW5lIERIRl9MSVRUTEVfRU5ESUFOIGlmIHlvdSBhcmUgd29ya2luZyBvbiBhIGxpdHRsZSBlbmRpYW4gcGxhdGZvcm0uCi8vIFlvdSBtdXN0IGRlZmluZSBlaXRoZXIgREhGX0JJR19FTkRJQU4gb3IgREhGX0xJVFRMRV9FTkRJQU4uIElmIG5laXRoZXIgb2YKLy8gdGhlIHR3byBpcyBkZWZpbmVkIG9yIGJvdGggYSBjb21waWxlIGVycm9yIGlzIGdlbmVyYXRlZC4KI2lmZGVmIFVTRV9CSUdfRU5ESUFOCiNkZWZpbmUgREhGX0JJR19FTkRJQU4KI2Vsc2UKI2RlZmluZSBESEZfTElUVExFX0VORElBTgojZW5kaWYgIC8qIFVTRV9CSUdfRU5ESUFOICovCgovLyBEZWZpbmUgREhGX1dJTiBpZiB5b3UgYXJlIHdvcmtpbmcgb24gV2luZG93cyBwbGF0Zm9ybS4KLy8gRGVmaW5lIERIRl9ET1MgaWYgeW91IGFyZSB3b3JraW5nIG9uIERPUy4KLy8gWW91IG11c3QgZGVmaW5lIGVpdGhlciBESEZfV0lOIG9yIERIRl9ET1MuIElmIG5laXRoZXIgb2YKLy8gdGhlIHR3byBpcyBkZWZpbmVkIG9yIGJvdGggYSBjb21waWxlIGVycm9yIGlzIGdlbmVyYXRlZC4KLy8hISEjZGVmaW5lIERIRl9XSU4KLy8hISEjZGVmaW5lIERIRl9ET1MKCi8vIERlZmluZSBpZiB5b3Ugd2FudCB0aGUgREhGIHRvIHVzZXJzLiBOb3QgZGVmaW5pbmcgREhGX0dFVF9SRVNfTVNHCi8vIGxlYWRzIHRvIGEgZGVjcmVhc2UgaW4gY29kZSBzaXplIGFzIG1lc3NhZ2Ugc3RyaW5ncyBhcmUgbm90IGluY2x1ZGVkLgovLyEhISNkZWZpbmUgREhGX0dFVF9SRVNfTVNHCgovLyBMaW51eCBkcml2ZXIgc3BlY2lmaWMKLy8gUHJldmVudCBpbmNsdXNpb24gb2Ygc3RkbGliLmggYW5kIHN0cmluZy5oCiNkZWZpbmUgX0lOQ19TVERMSUIKI2RlZmluZSBfSU5DX1NUUklORwoKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBEZWZpbmUgb25lIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZyBEU0YgI2RlZmluZXMgaWYgeW91IHdhbnQgdG8gaW1wbGVtZW50Ci8vIHRoZSByZWxhdGVkIERTRi1mdW5jdGlvbi4gRnVuY3Rpb24gZHNmX2NhbGxiYWNrIG11c3QgYWxsd2F5cyBiZSBpbXBsZW1lbnRlZC4KLy8gU2VlIGZpbGUgREhGLkggZm9yIHByb3RvdHlwZXMgb2YgdGhlIGZ1bmN0aW9ucy4KCi8vIERlZmluZSBEU0ZfQUxMT0MgaWYgeW91IHdhbnQgdG8gbWFuYWdlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBkZS1hbGxvY2F0aW9uCi8vIGZvciB0aGUgREhGLiBJZiBEU0ZfQUxMT0MgaXMgZGVmaW5lZCB5b3UgbXVzdCBpbXBsZW1lbnQgZHNmX2FsbG9jIGFuZCBkc2ZfZnJlZS4KLy8hISEjZGVmaW5lIERTRl9BTExPQwoKLy8gRGVmaW5lIERTRl9DT05GSVJNIGlmIHlvdSB3YW50IHRoZSBESEYgdG8gYXNrIHRoZSB1c2VyIGZvciBjb25maXJtYXRpb24gaW4gYQovLyBudW1iZXIgb2Ygc2l0dWF0aW9ucy4gSWYgRFNGX0NPTkZJUk0gaXMgZGVmaW5lZCB5b3UgbXVzdCBpbXBsZW1lbnQgZHNmX2NvbmZpcm0uCi8vIE5vdCBkZWZpbmluZyBEU0ZfQ09ORklSTSBsZWFkcyB0byBhIGRlY3JlYXNlIGluIGNvZGUgc2l6ZSBhcyBjb25maXJtYXRpb24KLy8gc3RyaW5ncyBhcmUgbm90IGluY2x1ZGVkLgovLyEhISNkZWZpbmUgRFNGX0NPTkZJUk0KCi8vIERlZmluZSBEU0ZfREVCVUdfTUVTU0FHRSBpZiB5b3Ugd2FudCBkZWJ1ZyBtZXNzYWdlcyBhZGRlZCB0byB5b3VyIG91dHB1dC4KLy8gSWYgeW91IGRlZmluZSBEU0ZfREVCVUdfTUVTU0FHRSB0aGVuIHlvdSBtdXN0IGltcGxlbWVudCBmdW5jdGlvbgovLyBkc2ZfZGVidWdfbWVzc2FnZS4KLy8jZGVmaW5lIERTRl9ERUJVR19NRVNTQUdFCgovLyBEZWZpbmUgRFNGX0FTU0VSVCBpZiB5b3Ugd2FudCBhc3NlcnRzIHRvIGJlIGFjdGl2YXRlZC4KLy8gSWYgeW91IGRlZmluZSBEU0ZfQVNTRVJUIHRoZW4geW91IG11c3QgaW1wbGVtZW50IGZ1bmN0aW9uIGRzZl9hc3NlcnQuCi8vI2RlZmluZSBEQkcgMQovLyNkZWZpbmUgRFNGX0FTU0VSVAoKLy8gRGVmaW5lIERTRl9EQldJTiBpZiB5b3Ugd2FudCBhc3NlcnRzIGFuZCBkZWJ1ZyBtZXNzYWdlcyB0byBiZSBzZW5kIHRvIGEgZGVidWcKLy8gd2luZG93IGxpa2UgU09GVElDRSBvciBEZWJ1Z1ZpZXcgZnJvbSBTeXNJbnRlcm5hbHMuCi8vISEhI2RlZmluZSBEU0ZfREJXSU4KLy8hISEgTm90IGltcGxlbWVudGVkIHlldCEKCi8vIERlZmluZSBEU0ZfVk9MQVRJTEVfT05MWSBpZiB5b3Ugb25seSB3YW50cyB0byB1c2UgdmFsYXRpbGUgZnVuY3Rpb25zCi8vIFRoaXMgaXMgYSB0eXBpY2FsIHNldHRpbmcgZm9yIGEgQVAgYW5kIGEgZHJpdmVyLgojZGVmaW5lIERTRl9WT0xBVElMRV9PTkxZCgovLyBEZWZpbmUgRFNGX0hFUk1FU0lJIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgREhGIGZvciB0aGUgSGVybWVzLUlJCiNpZmRlZiBIRVJNRVMyCiNkZWZpbmUgRFNGX0hFUk1FU0lJCiNlbHNlCiN1bmRlZiBEU0ZfSEVSTUVTSUkKI2VuZGlmIC8vIEhFUk1FUzIKCi8vIERlZmluZSBEU0ZfQklOQVJZX0ZJTEUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBESEYgaW4gY29tYmluYXRpb24gd2l0aAovLyByZWFkaW5nIHRoZSBGaXJtd2FyZSBmcm9tIGEgc2VwYXJhdGUgYmluYXJ5IGZpbGUuCi8vISEhI2RlZmluZSBEU0ZfQklOQVJZX0ZJTEUKCiNlbmRpZiAvLyBESEZDRkdfSAo=