LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogqSAyMDE1IE1pY3JvY2hpcCBUZWNobm9sb2d5IEluYy4gYW5kIGl0cyBzdWJzaWRpYXJpZXMuCiogWW91IG1heSB1c2UgdGhpcyBzb2Z0d2FyZSBhbmQgYW55IGRlcml2YXRpdmVzIGV4Y2x1c2l2ZWx5IHdpdGgKKiBNaWNyb2NoaXAgcHJvZHVjdHMuCiogVEhJUyBTT0ZUV0FSRSBJUyBTVVBQTElFRCBCWSBNSUNST0NISVAgIkFTIElTIi4KKiBOTyBXQVJSQU5USUVTLCBXSEVUSEVSIEVYUFJFU1MsIElNUExJRUQgT1IgU1RBVFVUT1JZLCBBUFBMWSBUTyBUSElTIFNPRlRXQVJFLAoqIElOQ0xVRElORyBBTlkgSU1QTElFRCBXQVJSQU5USUVTIE9GIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwKKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SIElUUyBJTlRFUkFDVElPTiBXSVRIIE1JQ1JPQ0hJUAoqIFBST0RVQ1RTLCBDT01CSU5BVElPTiBXSVRIIEFOWSBPVEhFUiBQUk9EVUNUUywgT1IgVVNFIElOIEFOWSBBUFBMSUNBVElPTi4KKiBJTiBOTyBFVkVOVCBXSUxMIE1JQ1JPQ0hJUCBCRSBMSUFCTEUgRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgUFVOSVRJVkUsCiogSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIExPU1MsIERBTUFHRSwgQ09TVCBPUiBFWFBFTlNFIE9GIEFOWSBLSU5ECiogV0hBVFNPRVZFUiBSRUxBVEVEIFRPIFRIRSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQsIEVWRU4gSUYgTUlDUk9DSElQIEhBUwoqIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT1IgVEhFIERBTUFHRVMgQVJFIEZPUkVTRUVBQkxFLgoqIFRPIFRIRSBGVUxMRVNUIEVYVEVOVCBBTExPV0VEIEJZIExBVywgTUlDUk9DSElQJ1MgVE9UQUwgTElBQklMSVRZIE9OIEFMTAoqIENMQUlNUyBJTiBBTlkgV0FZIFJFTEFURUQgVE8gVEhJUyBTT0ZUV0FSRSBXSUxMIE5PVCBFWENFRUQgVEhFIEFNT1VOVCBPRgoqIEZFRVMsIElGIEFOWSwgVEhBVCBZT1UgSEFWRSBQQUlEIERJUkVDVExZIFRPIE1JQ1JPQ0hJUCBGT1IgVEhJUyBTT0ZUV0FSRS4KKiBNSUNST0NISVAgUFJPVklERVMgVEhJUyBTT0ZUV0FSRSBDT05ESVRJT05BTExZIFVQT04gWU9VUiBBQ0NFUFRBTkNFCiogT0YgVEhFU0UgVEVSTVMuCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKVmVyc2lvbiBDb250cm9sIEluZm9ybWF0aW9uIChQZXJmb3JjZSkKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiRSZXZpc2lvbjogIzEgJCAKJERhdGVUaW1lOiAyMDE2LzA0LzA4IDEwOjE4OjI4ICQgCiRBdXRob3I6IHByYW1hbnMgJApMYXN0IENoYW5nZTogVXBkYXRlZCBmb3IgcGVyaXBoZXJhbCBmdW5jdGlvbnMgcHJlZml4IHBfCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyoqIEBmaWxlIGJ0aW1lcl9wZXJwaGwuYwoqIFxicmllZiBIaWJlcm5hdGlvbiBUaW1lciBBUEkgU291cmNlIGZpbGUKKiBcYXV0aG9yIGp2YXNhbnRoCiogCiogVGhpcyBmaWxlIGltcGxlbWVudHMgSGliZXJuYXRpb24gVGltZXIgQVBJcyAgIAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgovKiogQGRlZmdyb3VwIEhpYmVybmF0aW9uX1RpbWVyCiAqICBAewogKi8KCiNpbmNsdWRlICJjb21tb25fbGliLmgiCiNpbmNsdWRlICJodGltZXIuaCIKCiNpZmRlZiBQTElCX0hUSU1FUl9DSEVDS19JRAoKLyoqIExvY2FsIGhlbHBlciB0aGF0IGNoZWNrcyBpZiBsb2dpY2FsIFRpbWVyIElEIGlzIHZhbGlkLiAgCiAqIEBwYXJhbSBodGltZXJfaWQgSGliZXJuYXRpb24gVGltZXIgSUQgCiAqIEByZXR1cm4gdWludDhfdCBOb24temVybyhWQUxJRCksIDAoSW52YWxpZCkKICovCnN0YXRpYyB1aW50OF90IGh0bXJfdmFsaWQodWludDhfdCBodGltZXJfaWQpCnsKICAgIGlmICggaHRpbWVyX2lkIDwgKFBJRF9IVElNRVJfTUFYICkgKSB7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9CiAgICByZXR1cm4gMDsKfQoKI2Vsc2UKCgovKiogVGhpcyB2ZXJzaW9uIG9mIHRtcl92YWxpZCBza2lwcyBjaGVja2luZyBhbHdheXMgcmV0dXJuaW5nIDEuICAKICogIENvbXBpbGVyIG1heSBvcHRpbWl6ZSBpdCBvdXQuCiAqIEBwYXJhbSBodGltZXJfaWQgSGliZXJuYXRpb24gVGltZXIgSUQKICogQHJldHVybiB1aW50OF90IDEoVkFMSUQpIAogKi8Kc3RhdGljIHVpbnQ4X3QgaHRtcl92YWxpZCh1aW50OF90IGh0aW1lcl9pZCkgeyByZXR1cm4gMTsgfQoKI2VuZGlmCgoKLyoqIEVuYWJsZXMgaGliZXJuYXRpb24gdGltZXIKICogQHBhcmFtIGh0aW1lcl9pZCBIaWJlcm5hdGlvbiBUaW1lciBJRAogKiBAcGFyYW0gcHJlbG9hZF92YWx1ZQktIDE2LWJpdCBwcmVsb2FkIHZhbHVlIAogKiBAcGFyYW0gcmVzb2x1dGlvbl9tb2RlIDAgLSByZXNvbHV0aW9uIG9mIDMwLjV1cyBwZXIgTFNCLCAKICogICAgICAgIDEgLSByZXNvbHV0aW9uIG9mIDAuMTI1cyBwZXIgTFNCCiAqLwp2b2lkIGh0aW1lcl9lbmFibGUodWludDhfdCBodGltZXJfaWQsIHVpbnQxNl90IHByZWxvYWRfdmFsdWUsIHVpbnQ4X3QgcmVzb2x1dGlvbl9tb2RlKQp7CiAgICBpZiAoaHRtcl92YWxpZChodGltZXJfaWQpKSAKICAgIHsKICAgICAgICBwX2h0aW1lcl9wcmVsb2FkX3NldChodGltZXJfaWQsIHByZWxvYWRfdmFsdWUpOwogICAgICAgIAogICAgICAgIHBfaHRpbWVyX3Jlc29sdXRpb25fc2V0KGh0aW1lcl9pZCwgcmVzb2x1dGlvbl9tb2RlKTsKICAgIH0gICAgICAgIAp9CgovKiogRGlzYWJsZXMgdGhlIGhpYmVybmF0aW9uIHRpbWVyIGJ5IHByb2dyYW1taW5nIHRoZSBwcmVsYW9kIHZhbHVlIGFzIDAKICogQHBhcmFtIGh0aW1lcl9pZCBIaWJlcm5hdGlvbiBUaW1lciBJRCAKICovCnZvaWQgaHRpbWVyX2Rpc2FibGUodWludDhfdCBodGltZXJfaWQpCnsgICAgCiAgICBpZiAoaHRtcl92YWxpZChodGltZXJfaWQpKSAKICAgIHsKICAgICAgICBwX2h0aW1lcl9wcmVsb2FkX3NldChodGltZXJfaWQsIDApOwogICAgfSAgICAgICAgCn0KCi8qKiBSZWxvYWRzIG5ldyBwcmVsb2FkIHZhbHVlIGZvciB0aGUgaGliZXJuYXRpb24gdGltZXIKICogQHBhcmFtIGh0aW1lcl9pZCBIaWJlcm5hdGlvbiBUaW1lciBJRAogKiBAcGFyYW0gcmVsb2FkX3ZhbHVlCS0gMTYtYml0IHByZWxvYWQgdmFsdWUgCiAqLwp2b2lkIGh0aW1lcl9yZWxvYWQodWludDhfdCBodGltZXJfaWQsIHVpbnQxNl90IHJlbG9hZF92YWx1ZSkKeyAgICAKICAgIGlmICggaHRtcl92YWxpZChodGltZXJfaWQpKSAKICAgIHsKICAgICAgICBwX2h0aW1lcl9wcmVsb2FkX3NldChodGltZXJfaWQsIHJlbG9hZF92YWx1ZSk7CiAgICB9ICAgICAgICAKfQoKLyogZW5kIGh0aW1lcl9hcGkuYyAqLwoKLyoqICAgQH0gLy9BUElzIEhpYmVybmF0aW9uX1RpbWVyCiAqLwoK