LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIChjKSBDb3B5cmlnaHQgMjAwOSBBY3RlbCBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQogKiANCiAqIFNtYXJ0RnVzaW9uIG1pY3JvY29udHJvbGxlciBzdWJzeXN0ZW0gKE1TUykgdGltZXIgZHJpdmVyIEFQSS4NCiAqDQogKiBTVk4gJFJldmlzaW9uOiAyNjYxICQNCiAqIFNWTiAkRGF0ZTogMjAxMC0wNC0xOSAxNzoxNDoyNiArMDEwMCAoTW9uLCAxOSBBcHIgMjAxMCkgJA0KICovDQovKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLy8qKg0KICBAbWFpbnBhZ2UgU21hcnRGdXNpb24gTVNTIFRpbWVyIEJhcmUgTWV0YWwgRHJpdmVyLg0KDQogIEBzZWN0aW9uIGludHJvX3NlYyBJbnRyb2R1Y3Rpb24NCiAgVGhlIFNtYXJ0RnVzaW9uIE1pY3JvY29udHJvbGxlciBTdWJzeXN0ZW0gKE1TUykgaW5jbHVkZXMgYSB0aW1lciBoYXJkd2FyZQ0KICBibG9jayB3aGljaCBjYW4gYmUgdXNlZCBhcyB0d28gaW5kZXBlbmRlbnQgMzItYml0cyB0aW1lcnMgb3IgYXMgYSBzaW5nbGUNCiAgNjQtYml0cyB0aW1lciBpbiBwZXJpb2RpYyBvciBvbmUtc2hvdCBtb2RlLiANCg0KICBUaGlzIGRyaXZlciBwcm92aWRlcyBhIHNldCBvZiBmdW5jdGlvbnMgZm9yIGNvbnRyb2xsaW5nIHRoZSBNU1MgdGltZXIgYXMgcGFydA0KICBvZiBhIGJhcmUgbWV0YWwgc3lzdGVtIHdoZXJlIG5vIG9wZXJhdGluZyBzeXN0ZW0gaXMgYXZhaWxhYmxlLiBUaGVzZSBkcml2ZXJzDQogIGNhbiBiZSBhZGFwdGVkIGZvciB1c2UgYXMgcGFydCBvZiBhbiBvcGVyYXRpbmcgc3lzdGVtIGJ1dCB0aGUgaW1wbGVtZW50YXRpb24NCiAgb2YgdGhlIGFkYXB0YXRpb24gbGF5ZXIgYmV0d2VlbiB0aGlzIGRyaXZlciBhbmQgdGhlIG9wZXJhdGluZyBzeXN0ZW0ncyBkcml2ZXINCiAgbW9kZWwgaXMgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBkcml2ZXIuDQogIA0KICBAc2VjdGlvbiB0aGVvcnlfb3AgVGhlb3J5IG9mIE9wZXJhdGlvbg0KICBUaGUgTVNTIFRpbWVyIGRyaXZlciB1c2VzIHRoZSBTbWFydEZ1c2lvbiAiQ29ydGV4IE1pY3JvY29udHJvbGVyIFNvZnR3YXJlDQogIEludGVyZmFjZSBTdGFuZGFyZCAtIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyIiAoQ01TSVMtUEFMKSB0byBhY2Nlc3MgaGFkd2FyZQ0KICByZWdpc3RlcnMuIFlvdSBtdXN0IGVuc3VyZSB0aGF0IHRoZSBTbWFydEZ1c2lvbiBDTVNJUy1QQUwgaXMgZWl0aGVyIGluY2x1ZGVkDQogIGluIHRoZSBzb2Z0d2FyZSB0b29sY2hhaW4gdXNlZCB0byBidWlsZCB5b3VyIHByb2plY3Qgb3IgaXMgaW5jbHVkZWQgaW4geW91cg0KICBwcm9qZWN0LiBUaGUgbW9zdCB1cC10by1kYXRlIFNtYXJ0RnVzaW9uIENNU0lTLVBBTCBmaWxlcyBjYW4gYmUgb2J0YWluZWQgdXNpbmcNCiAgdGhlIEFjdGVsIEZpcm13YXJlIENhdGFsb2cuDQogIFRoZSBTbWFydEZ1c2lvbiBNU1MgVGltZXIgY2FuIGJlIHVzZWQgaW4gb25lIG9mIHR3byBtdXR1YWxseSBleGNsdXNpdmUgbW9kZXM7DQogIGVpdGhlciBhcyBhIHNpbmdsZSA2NC1iaXRzIHRpbWVyIG9yIGFzIHR3byBpbmRlcGVuZGVudCAzMi1iaXRzIHRpbWVycy4gVGhlIE1TUw0KICBUaW1lciBjYW4gYmUgdXNlZCBpbiBlaXRoZXIgcGVyaW9kaWMgbW9kZSBvciBvbmUtc2hvdCBtb2RlLiBBIHRpbWVyIGNvbmZpZ3VyZWQNCiAgZm9yIHBlcmlvZGljIG1vZGUgb3BlcmF0aW9ucyB3aWxsIGdlbmVyYXRlIGFuIGludGVycnVwdCBhbmQgcmVsb2FkIGl0cw0KICBkb3duLWNvdW50ZXIgd2hlbiBpdCByZWFjaGVzIDAuIFRoZSB0aW1lciB3aWxsIHRoZW4gY29udGludWUgZGVjcmVtZW50aW5nIGZyb20NCiAgaXRzIHJlbG9hZCB2YWx1ZSB3aXRob3V0IHdhaXRpbmcgZm9yIHRoZSBpbnRlcnJ1cHQgdG8gYmUgY2xlYXJlZC4gQSB0aW1lcg0KICBjb25maWd1cmVkIGZvciBvbmUtc2hvdCBtb2RlIHdpbGwgb25seSBnZW5lcmF0ZSBhbiBpbnRlcnJ1cHQgb25jZSB3aGVuIGl0cw0KICBkb3duLWNvdW50ZXIgcmVhY2hlcyAwLiBJdCBtdXN0IGJlIGV4cGxpdGNpdGx5IHJlbG9hZGVkIHRvIHN0YXJ0IGRlY3JlbWVudGluZw0KICBhZ2Fpbi4NCiAgDQogIFRoZSBNU1MgVGltZXIgZHJpdmVyIGZ1bmN0aW9ucyBhcmUgZ3JvdXBlZCBpbnRvIHRoZSBmb2xsb3dpbmcgY2F0ZWdvcmllczoNCiAgICAtIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uDQogICAgLSBUaW1lciBjb250cm9sDQogICAgLSBJbnRlcnJ1cHQgY29udHJvbA0KICANCiAgVGhlIE1TUyBUaW1lciBkcml2ZXIgcHJvdmlkZXMgdGhyZWUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zOg0KICAgIC0gTVNTX1RJTTFfaW5pdCgpDQogICAgLSBNU1NfVElNMl9pbml0KCkNCiAgICAtIE1TU19USU02NF9pbml0KCkNCiAgVGhlIE1TUyBUaW1lciBkcml2ZXIgaXMgaW5pdGlhbGl6ZWQgdGhyb3VnaCBjYWxscyB0byB0aGVzZSBmdW5jdGlvbnMgYW5kIGF0DQogIGxlYXN0IG9uZSBvZiB0aGVtIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBhbnkgb3RoZXIgTVNTIFRpbWVyIGRyaXZlciBmdW5jdGlvbnMNCiAgY2FuIGJlIGNhbGxlZC4NCiAgWW91IHNob3VsZCBvbmx5IHVzZSB0aGUgTVNTX1RJTTFfaW5pdCgpIGFuZCBNU1NfVElNMl9pbml0KCkgZnVuY3Rpb25zIGlmIHlvdQ0KICBpbnRlbmQgdG8gdXNlIHRoZSB0aW1lciBpbiAzMi1iaXRzIG1vZGUuIFVzZSB0aGUgTVNTX1RJTTY0X2luaXQoKSBmdW5jdGlvbiBpcw0KICB5b3UgaW50ZW5kIHRvIHVzZSB0aGUgTVNTIFRpbWVyIGFzIGEgc2luZ2xlIDY0LWJpdHMgdGltZXIuIFRoZSBpbml0aWFsaXphdGlvbg0KICBmdW5jdGlvbnMgdGFrZSBhIHNpbmdsZSBwYXJhbWV0ZXIgc3BlY2lmeWluZyB0aGUgb3BlcmF0aW5nIG1vZGUgb2YgdGhlIHRpbWVyDQogIGJlaW5nIGluaXRpYWxpemVkLg0KICANCiAgT25jZSBpbml0aWFsaXplZCBhIHRpbWVyIGNhbiBiZSBjb250cm9sbGVkIHVzaW5nIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOg0KICAgIC0gTVNTX1RJTTFfbG9hZF9pbW1lZGlhdGUoKQ0KICAgIC0gTVNTX1RJTTFfbG9hZF9iYWNrZ3JvdW5kKCkNCiAgICAtIE1TU19USU0xX2dldF9jdXJyZW50X3ZhbHVlKCkNCiAgICAtIE1TU19USU0xX3N0YXJ0KCkNCiAgICAtIE1TU19USU0xX3N0b3AoKQ0KICAgIC0gTVNTX1RJTTJfbG9hZF9pbW1lZGlhdGUoKQ0KICAgIC0gTVNTX1RJTTJfbG9hZF9iYWNrZ3JvdW5kKCkNCiAgICAtIE1TU19USU0yX2dldF9jdXJyZW50X3ZhbHVlKCkNCiAgICAtIE1TU19USU0yX3N0YXJ0KCkNCiAgICAtIE1TU19USU0yX3N0b3AoKQ0KICAgIC0gTVNTX1RJTTY0X2xvYWRfaW1tZWRpYXRlKCkNCiAgICAtIE1TU19USU02NF9sb2FkX2JhY2tncm91bmQoKQ0KICAgIC0gTVNTX1RJTTY0X2dldF9jdXJyZW50X3ZhbHVlKCkNCiAgICAtIE1TU19USU02NF9zdGFydCgpDQogICAgLSBNU1NfVElNNjRfc3RvcCgpDQogIA0KICBUaW1lciBpbnRlcnJ1cHRzIGFyZSBjb250cm9sbGVkIHVzaW5nIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOg0KICAgIC0gTVNTX1RJTTFfZW5hYmxlX2lycSgpDQogICAgLSBNU1NfVElNMV9kaXNhYmxlX2lycSgpDQogICAgLSBNU1NfVElNMV9jbGVhcl9pcnEoKQ0KICAgIC0gTVNTX1RJTTJfZW5hYmxlX2lycSgpDQogICAgLSBNU1NfVElNMl9kaXNhYmxlX2lycSgpDQogICAgLSBNU1NfVElNMl9jbGVhcl9pcnEoKQ0KICAgIC0gTVNTX1RJTTY0X2VuYWJsZV9pcnEoKQ0KICAgIC0gTVNTX1RJTTY0X2Rpc2FibGVfaXJxKCkNCiAgICAtIE1TU19USU02NF9jbGVhcl9pcnEoKQ0KICANCiAgVGhlIGZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIHRoZSB0aW1lciBpbnRlcnJ1cHQgaGFuZGxlcnMgYXJlOg0KICAgIC0gdm9pZCBUaW1lcjFfSVJRSGFuZGxlciggdm9pZCApDQogICAgLSB2b2lkIFRpbWVyMl9JUlFIYW5kbGVyKCB2b2lkICkNCiAgRW50cmllcyBmb3IgdGhlc2UgaW50ZXJydXB0IGhhbmRsZXJzIGFyZSBwcm92aWRlZCBpbiB0aGUgU21hcnRGdXNpb24gQ01TSVMtUEFMDQogIHZlY3RvciB0YWJsZS4gVG8gYWRkIGEgVGltZXIgMSBpbnRlcnJ1cHQgaGFuZGxlciwgeW91IG11c3QgaW1wbGVtZW50IGENCiAgVGltZXIxX0lSUUhhbmRsZXIoICkgZnVuY3Rpb24gYXMgcGFydCBvZiB5b3VyIGFwcGxpY2F0aW9uIGNvZGUuIFRvIGFkZCBhDQogIFRpbWVyIDIgaW50ZXJydXB0IGhhbmRsZXIsIHlvdSBtdXN0IGltcGxlbWVudCBhIFRpbWVyMl9JUlFIYW5kbGVyKCApIGZ1bmN0aW9uDQogIGFzIHBhcnQgb2YgeW91ciBhcHBsaWNhdGlvbiBjb2RlLiBXaGVuIHVzaW5nIHRoZSBNU1MgVGltZXIgYXMgYSA2NC1iaXQgdGltZXIsDQogIHlvdSBtdXN0IGltcGxlbWVudCBhIFRpbWVyMV9JUlFIYW5kbGVyKCApIGZ1bmN0aW9uIGFzIHBhcnQgb2YgeW91cg0KICBhcHBsaWNhdGlvbiBjb2RlLiBUaGUgVGltZXIgMiBpbnRlcnJ1cHQgaXMgbm90IHVzZWQgd2hlbiB0aGUgTVNTIFRpbWVyIGlzDQogIGNvbmZpZ3VyZWQgYXMgYSA2NC1iaXQgdGltZXIuDQogIA0KICovLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8NCiNpZm5kZWYgTVNTX1RJTUVSX0hfDQojZGVmaW5lIE1TU19USU1FUl9IXw0KDQoNCiNpbmNsdWRlICIuLi8uLi9DTVNJUy9hMmZ4eHhtMy5oIg0KDQojaWZkZWYgX19jcGx1c3BsdXMNCmV4dGVybiAiQyIgew0KI2VuZGlmIA0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLy8qKg0KICogVGltZXIgbW9kZSBzZWxlY3Rpb24uIFRoaXMgZW51bWVyYXRpb24gaXMgdXNlZCB0byBzZWxlY3QgYmV0d2VlbiB0aGUgdHdvDQogKiBwb3NzaWJsZSB0aW1lciBtb2RlcyBvZiBvcGVyYXRpb246IHBlcmlvZGljIGFuZCBvbmUtc2hvdCBtb2RlLiBJdCBpcyB1c2VkIGFzDQogKiBhbiBhcmd1bWVudCB0byB0aGUgTVNTX1RJTTFfaW5pdCgpLCBNU1NfVElNMl9pbml0KCkgYW5kIE1TU19USU02NF9pbml0KCkNCiAqIGZ1bmN0aW9ucy4NCiAqIE1TU19USU1FUl9QRVJJT0RJQ19NT0RFOg0KICogIEluIHBlcmlvZGljIG1vZGUgdGhlIHRpbWVyIGdlbmVyYXRlcyBpbnRlcnJ1cHRzIGF0IGNvbnN0YW50IGludGVydmFscy4gT24gDQogKiAgcmVhY2hpbmcgemVybywgdGhlIHRpbWVyJ3MgY291bnRlciBpcyByZWxvYWRlZCB3aXRoIGEgdmFsdWUgaGVsZCBpbiBhDQogKiAgcmVnaXN0ZXIgYW5kIGJlZ2lucyBjb3VudGluZyBkb3duIGFnYWluLg0KICogTVNTX1RJTUVSX09ORV9TSE9UX01PREU6DQogKiAgVGhlIHRpbWVyIGdlbmVyYXRlcyBhIHNpbmdsZSBpbnRlcnJ1cHQgaW4gdGhpcyBtb2RlLiBPbiByZWFjaGluZyB6ZXJvLCB0aGUNCiAqICB0aW1lcidzIGNvdW50ZXIgaGFsdHMgdW50aWwgcmVwcm9ncmFtbWVkIGJ5IHRoZSB1c2VyLg0KICovDQp0eXBlZGVmIGVudW0gX19tc3NfdGltZXJfbW9kZV90DQp7DQogICAgTVNTX1RJTUVSX1BFUklPRElDX01PREUgPSAwLA0KICAgIE1TU19USU1FUl9PTkVfU0hPVF9NT0RFID0gMQ0KfSBtc3NfdGltZXJfbW9kZV90Ow0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLy8qKg0KICBUaGUgTVNTX1RJTTFfaW5pdCgpIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBTbWFydEZ1c2lvbiBNU1MgVGltZXIgYmxvY2sgZm9yDQogIHVzZSBhcyBhIDMyLWJpdCB0aW1lciBhbmQgc2VsZWN0cyB0aGUgb3BlcmF0aW5nIG1vZGUgZm9yIFRpbWVyIDEuIFRoaXMgZnVuY3Rpb24NCiAgdGFrZXMgdGhlIE1TUyBUaW1lciBibG9jayBvdXQgb2YgcmVzZXQgaW4gY2FzZSB0aGlzIGhhc26SdCBiZWVuIGRvbmUgYWxyZWFkeSwNCiAgc3RvcHMgVGltZXIgMSwgZGlzYWJsZXMgaXRzIGludGVycnVwdCBhbmQgc2V0cyB0aGUgVGltZXIgMSBvcGVyYXRpbmcgbW9kZS4NCiAgUGxlYXNlIG5vdGUgdGhhdCB0aGUgU21hcnRGdXNpb24gTVNTIFRpbWVyIGJsb2NrIGNhbm5vdCBiZSB1c2VkIGJvdGggYXMgYQ0KICA2NC1iaXQgYW5kIDMyLWJpdCB0aW1lci4gQ2FsbGluZyBNU1NfVElNMV9pbml0KCkgd2lsbCBvdmVyd3JpdGUgYW55IHByZXZpb3VzDQogIGNvbmZpZ3VyYXRpb24gb2YgdGhlIE1TUyBUaW1lciBhcyBhIDY0LWJpdCB0aW1lci4NCg0KIA0KICBAcGFyYW0gbW9kZQ0KICAgIFRoZSBtb2RlIHBhcmFtZXRlciBzcGVjaWZpZXMgd2hldGhlciB0aGUgdGltZXIgd2lsbCBvcGVyYXRlIGluIHBlcmlvZGljIG9yDQogICAgb25lLXNob3QgbW9kZS4gQWxsb3dlZCB2YWx1ZXMgZm9yIHRoaXMgcGFyYW1ldGVyIGFyZToNCiAgICAgICAgLSBNU1NfVElNRVJfUEVSSU9ESUNfTU9ERQ0KICAgICAgICAtIE1TU19USU1FUl9PTkVfU0hPVF9NT0RFDQogKi8NCnN0YXRpYyBfX0lOTElORSB2b2lkIE1TU19USU0xX2luaXQoIG1zc190aW1lcl9tb2RlX3QgbW9kZSApDQp7DQogICAgTlZJQ19EaXNhYmxlSVJRKCBUaW1lcjFfSVJRbiApOyAgICAgICAgICAgICAvKiBEaXNhYmxlIHRpbWVyIDEgaXJxIGluIHRoZSBDb3J0ZXgtTTMgTlZJQyAqLyAgDQogICAgDQogICAgU1lTUkVHLT5TT0ZUX1JTVF9DUiAmPSB+U1lTUkVHX1RJTUVSX1NPRlRSRVNFVF9NQVNLOyAvKiBUYWtlIHRpbWVyIGJsb2NrIG91dCBvZiByZXNldCAqLw0KICAgIA0KICAgIFRJTUVSLT5USU02NF9NT0RFID0gMFU7ICAgICAgICAgICAgICAgICAgICAgLyogc3dpdGNoIHRvIDMyIGJpdHMgbW9kZSAqLw0KICAgIA0KICAgIFRJTUVSX0JJVEJBTkQtPlRJTTFFTkFCTEUgPSAwVTsgICAgICAgICAgICAgLyogZGlzYWJsZSB0aW1lciAqLw0KICAgIFRJTUVSX0JJVEJBTkQtPlRJTTFJTlRFTiA9IDBVOyAgICAgICAgICAgICAgLyogZGlzYWJsZSBpbnRlcnJ1cHQgKi8NCiAgICBUSU1FUl9CSVRCQU5ELT5USU0xTU9ERSA9ICh1aW50MzJfdCltb2RlOyAgIC8qIHNldCBtb2RlIChjb250aW51b3VzL29uZS1zaG90KSAqLw0KICAgIA0KICAgIFRJTUVSLT5USU0xX1JJUyA9IDFVOyAgICAgICAgICAgICAgICAgICAgICAgLyogY2xlYXIgdGltZXIgMSBpbnRlcnJ1cHQgKi8NCiAgICBOVklDX0NsZWFyUGVuZGluZ0lSUSggVGltZXIxX0lSUW4gKTsgICAgICAgIC8qIGNsZWFyIHRpbWVyIDEgaW50ZXJydXB0IHdpdGhpbiBOVklDICovDQp9DQoNCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovLyoqDQogIFRoZSBNU1NfVElNMV9zdGFydCgpIGZ1bmN0aW9uIGVuYWJsZXMgVGltZXIgMSBhbmQgc3RhcnRzIGl0cyBkb3duLWNvdW50ZXINCiAgZGVjcmVtZW50aW5nIGZyb20gdGhlIGxvYWRfdmFsdWUgc3BlY2lmaWVkIGluIHByZXZpb3VzIGNhbGxzIHRvIHRoZQ0KICBNU1NfVElNMV9sb2FkX2ltbWVkaWF0ZSgpIG9yIE1TU19USU0xX2xvYWRfYmFja2dyb3VuZCgpIGZ1bmN0aW9ucy4NCiAqLw0Kc3RhdGljIF9fSU5MSU5FIHZvaWQgTVNTX1RJTTFfc3RhcnQoIHZvaWQgKQ0Kew0KICAgIFRJTUVSX0JJVEJBTkQtPlRJTTFFTkFCTEUgPSAxVTsgICAgLyogZW5hYmxlIHRpbWVyICovDQp9DQoNCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovLyoqDQogIFRoZSBNU1NfVElNMV9zdG9wKCkgZnVuY3Rpb24gZGlzYWJsZXMgVGltZXIgMSBhbmQgc3RvcHMgaXRzIGRvd24tY291bnRlcg0KICBkZWNyZW1lbnRpbmcuDQogKi8NCnN0YXRpYyBfX0lOTElORSB2b2lkIE1TU19USU0xX3N0b3AoIHZvaWQgKQ0Kew0KICAgIFRJTUVSX0JJVEJBTkQtPlRJTTFFTkFCTEUgPSAwVTsgICAgLyogZGlzYWJsZSB0aW1lciAqLw0KfQ0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLy8qKg0KICBUaGUgTVNTX1RJTTFfZ2V0X2N1cnJlbnRfdmFsdWUoKSByZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBUaW1lciAxDQogIGRvd24tY291bnRlci4NCiAgDQogIEByZXR1cm4NCiAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIDMyLWJpdHMgY3VycmVudCB2YWx1ZSBvZiB0aGUgVGltZXIgMSBkb3duLWNvdW50ZXIuDQogKi8NCnN0YXRpYyBfX0lOTElORSB1aW50MzJfdCBNU1NfVElNMV9nZXRfY3VycmVudF92YWx1ZSggdm9pZCApDQp7DQogICAgcmV0dXJuIFRJTUVSLT5USU0xX1ZBTDsNCn0NCg0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8vKioNCiAgVGhlIE1TU19USU0xX2xvYWRfaW1tZWRpYXRlKCkgZnVuY3Rpb24gbG9hZHMgdGhlIHZhbHVlIHBhc3NlZCBieSB0aGUNCiAgbG9hZF92YWx1ZSBwYXJhbWV0ZXIgaW50byB0aGUgVGltZXIgMSBkb3duLWNvdW50ZXIuIFRoZSBjb3VudGVyIHdpbGwgZGVjcmVtZW50DQogIGltbWVkaWF0ZWx5IGZyb20gdGhpcyB2YWx1ZSBvbmNlIFRpbWVyIDEgaXMgZW5hYmxlZC4gVGhlIE1TUyBUaW1lciB3aWxsDQogIGdlbmVyYXRlIGFuIGludGVycnVwdCB3aGVuIHRoZSBjb3VudGVyIHJlYWNoZXMgemVybyBpZiBUaW1lciAxIGludGVycnVwdHMgYXJlDQogIGVuYWJsZWQuIFRoaXMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aGVuIFRpbWVyIDEgaXMgY29uZmlndXJlZCBmb3INCiAgb25lLXNob3QgbW9kZSB0byB0aW1lIGEgc2luZ2xlIGRlbGF5Lg0KIA0KICBAcGFyYW0gbG9hZF92YWx1ZQ0KICAgIFRoZSBsb2FkX3ZhbHVlIHBhcmFtZXRlciBzcGVjaWZpZXMgdGhlIHZhbHVlIGZyb20gd2hpY2ggdGhlIFRpbWVyIDEgZG93bi1jb3VudGVyDQogICAgd2lsbCBzdGFydCBkZWNyZW1lbnRpbmcgZnJvbS4NCiAqLw0Kc3RhdGljIF9fSU5MSU5FIHZvaWQgTVNTX1RJTTFfbG9hZF9pbW1lZGlhdGUoIHVpbnQzMl90IGxvYWRfdmFsdWUgKQ0Kew0KICAgIFRJTUVSLT5USU0xX0xPQURWQUwgPSBsb2FkX3ZhbHVlOw0KfQ0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLy8qKg0KICBUaGUgTVNTX1RJTTFfbG9hZF9iYWNrZ3JvdW5kKCkgZnVuY3Rpb24gaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSB2YWx1ZSB0aGF0IHdpbGwNCiAgYmUgcmVsb2FkZWQgaW50byB0aGUgVGltZXIgMSBkb3duLWNvdW50ZXIgdGhlIG5leHQgdGltZSB0aGUgY291bnRlciByZWFjaGVzDQogIHplcm8uIFRoaXMgZnVuY3Rpb24gaXMgdHlwaWNhbGx5IHVzZWQgd2hlbiBUaW1lciAxIGlzIGNvbmZpZ3VyZWQgZm9yIHBlcmlvZGljDQogIG1vZGUgb3BlcmF0aW9uIHRvIHNlbGVjdCBvciBjaGFuZ2UgdGhlIGRlbGF5IHBlcmlvZCBiZXR3ZWVuIHRoZSBpbnRlcnJ1cHRzDQogIGdlbmVyYXRlZCBieSBUaW1lciAxLg0KIA0KICBAcGFyYW0gbG9hZF92YWx1ZQ0KICAgIFRoZSBsb2FkX3ZhbHVlIHBhcmFtZXRlciBzcGVjaWZpZXMgdGhlIHZhbHVlIHRoYXQgd2lsbCBiZSBsb2FkZWQgaW50byB0aGUNCiAgICBUaW1lciAxIGRvd24tY291bnRlciB0aGUgbmV4dCB0aW1lIHRoZSBkb3duLWNvdW50ZXIgcmVhY2hlcyB6ZXJvLiBUaGUgVGltZXINCiAgICAxIGRvd24tY291bnRlciB3aWxsIHN0YXJ0IGRlY3JlbWVudGluZyBmcm9tIHRoaXMgdmFsdWUgYWZ0ZXIgdGhlIGN1cnJlbnQNCiAgICBjb3VudCBleHBpcmVzLg0KICovDQpzdGF0aWMgX19JTkxJTkUgdm9pZCBNU1NfVElNMV9sb2FkX2JhY2tncm91bmQoIHVpbnQzMl90IGxvYWRfdmFsdWUgKQ0Kew0KICAgIFRJTUVSLT5USU0xX0JHTE9BRFZBTCA9IGxvYWRfdmFsdWU7DQp9DQoNCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovLyoqDQogIFRoZSBNU1NfVElNMV9lbmFibGVfaXJxKCkgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUgaW50ZXJydXB0IGdlbmVyYXRpb24gZm9yDQogIFRpbWVyIDEuIFRoaXMgZnVuY3Rpb24gYWxzbyBlbmFibGVzIHRoZSBpbnRlcnJ1cHQgaW4gdGhlIENvcnRleC1NMyBpbnRlcnJ1cHQNCiAgY29udHJvbGxlci4gVGhlIFRpbWVyMV9JUlFIYW5kbGVyKCkgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2hlbiBhIFRpbWVyIDENCiAgaW50ZXJydXB0IG9jY3Vycy4NCiAgTm90ZTogTm90ZTogCUEgVGltZXIxX0lSUUhhbmRsZXIoKSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzIGRlZmluZWQsIHdpdGgNCiAgd2VhayBsaW5rYWdlLCBpbiB0aGUgU21hcnRGdXNpb24gQ01TSVMtUEFMLiBZb3UgbXVzdCBwcm92aWRlIHlvdXIgb3duDQogIGltcGxlbWVudGF0aW9uIG9mIHRoZSBUaW1lcjFfSVJRSGFuZGxlcigpIGZ1bmN0aW9uLCB0aGF0IHdpbGwgb3ZlcnJpZGUgdGhlDQogIGRlZmF1bHQgaW1wbGVtZW50YXRpb24sIHRvIHN1aXQgeW91ciBhcHBsaWNhdGlvbi4NCg0KICovDQpzdGF0aWMgX19JTkxJTkUgdm9pZCBNU1NfVElNMV9lbmFibGVfaXJxKCB2b2lkICkNCnsNCiAgICBUSU1FUl9CSVRCQU5ELT5USU0xSU5URU4gPSAxVTsNCiAgICBOVklDX0VuYWJsZUlSUSggVGltZXIxX0lSUW4gKTsNCn0NCg0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8vKioNCiAgVGhlIE1TU19USU0xX2Rpc2FibGVfaXJxKCkgZnVuY3Rpb24gaXMgdXNlZCB0byBkaXNhYmxlIGludGVycnVwdCBnZW5lcmF0aW9uDQogIGZvciBUaW1lciAxLiBUaGlzIGZ1bmN0aW9uIGFsc28gZGlzYWJsZXMgdGhlIGludGVycnVwdCBpbiB0aGUgQ29ydGV4LU0zDQogIGludGVycnVwdCBjb250cm9sbGVyLg0KICovDQpzdGF0aWMgX19JTkxJTkUgdm9pZCBNU1NfVElNMV9kaXNhYmxlX2lycSggdm9pZCApDQp7DQogICAgVElNRVJfQklUQkFORC0+VElNMUlOVEVOID0gMFU7DQogICAgTlZJQ19EaXNhYmxlSVJRKCBUaW1lcjFfSVJRbiApOw0KfQ0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLy8qKg0KICBUaGUgTVNTX1RJTTFfY2xlYXJfaXJxKCkgZnVuY3Rpb24gaXMgdXNlZCB0byBjbGVhciBhIHBlbmRpbmcgaW50ZXJydXB0IGZyb20NCiAgVGltZXIgMS4gVGhpcyBmdW5jdGlvbiBhbHNvIGNsZWFycyB0aGUgaW50ZXJydXB0IGluIHRoZSBDb3J0ZXgtTTMgaW50ZXJydXB0DQogIGNvbnRyb2xsZXIuDQogIE5vdGU6IFlvdSBtdXN0IGNhbGwgdGhlIE1TU19USU0xX2NsZWFyX2lycSgpIGZ1bmN0aW9uIGFzIHBhcnQgb2YgeW91cg0KICBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVGltZXIxX0lSUUhhbmRsZXIoKSBUaW1lciAxIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUNCiAgKElTUikgaW4gb3JkZXIgdG8gcHJldmVudCB0aGUgc2FtZSBpbnRlcnJ1cHQgZXZlbnQgcmV0cmlnZ2VyaW5nIGEgY2FsbCB0byB0aGUNCiAgSVNSLg0KDQogKi8NCnN0YXRpYyBfX0lOTElORSB2b2lkIE1TU19USU0xX2NsZWFyX2lycSggdm9pZCApDQp7DQogICAgVElNRVItPlRJTTFfUklTID0gMVU7DQogICAgTlZJQ19DbGVhclBlbmRpbmdJUlEoIFRpbWVyMV9JUlFuICk7DQp9DQoNCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovLyoqDQogIFRoZSBNU1NfVElNMl9pbml0KCkgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIFNtYXJ0RnVzaW9uIE1TUyBUaW1lciBibG9jayBmb3INCiAgdXNlIGFzIGEgMzItYml0IHRpbWVyIGFuZCBzZWxlY3RzIHRoZSBvcGVyYXRpbmcgbW9kZSBmb3IgVGltZXIgMi4gVGhpcyBmdW5jdGlvbg0KICB0YWtlcyB0aGUgTVNTIFRpbWVyIGJsb2NrIG91dCBvZiByZXNldCBpbiBjYXNlIHRoaXMgaGFzbpJ0IGJlZW4gZG9uZSBhbHJlYWR5LA0KICBzdG9wcyBUaW1lciAyLCBkaXNhYmxlcyBpdHMgaW50ZXJydXB0IGFuZCBzZXRzIHRoZSBUaW1lciAyIG9wZXJhdGluZyBtb2RlLg0KICBOb3RlOiBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBTbWFydEZ1c2lvbiBNU1MgVGltZXIgYmxvY2sgY2Fubm90IGJlIHVzZWQgYm90aCBhcw0KICBhIDY0LWJpdCBhbmQgMzItYml0IHRpbWVyLiBDYWxsaW5nIE1TU19USU0yX2luaXQoKSB3aWxsIG92ZXJ3cml0ZSBhbnkgcHJldmlvdXMNCiAgY29uZmlndXJhdGlvbiBvZiB0aGUgTVNTIFRpbWVyIGFzIGEgNjQtYml0IHRpbWVyLg0KICANCiAgQHBhcmFtIG1vZGUNCiAgICBUaGUgbW9kZSBwYXJhbWV0ZXIgc3BlY2lmaWVzIHdoZXRoZXIgdGhlIHRpbWVyIHdpbGwgb3BlcmF0ZSBpbiBwZXJpb2RpYyBvcg0KICAgIG9uZS1zaG90IG1vZGUuIEFsbG93ZWQgdmFsdWVzIGZvciB0aGlzIHBhcmFtZXRlciBhcmU6DQogICAgICAgIC0gTVNTX1RJTUVSX1BFUklPRElDX01PREUNCiAgICAgICAgLSBNU1NfVElNRVJfT05FX1NIT1RfTU9ERSANCiAqLw0Kc3RhdGljIF9fSU5MSU5FIHZvaWQgTVNTX1RJTTJfaW5pdCggbXNzX3RpbWVyX21vZGVfdCBtb2RlICkNCnsNCiAgICBOVklDX0Rpc2FibGVJUlEoIFRpbWVyMl9JUlFuICk7ICAgICAgICAgICAgIC8qIERpc2FibGUgdGltZXIgMiBpcnEgaW4gdGhlIENvcnRleC1NMyBOVklDICovICANCiAgICANCiAgICBTWVNSRUctPlNPRlRfUlNUX0NSICY9IH5TWVNSRUdfVElNRVJfU09GVFJFU0VUX01BU0s7IC8qIFRha2UgdGltZXIgYmxvY2sgb3V0IG9mIHJlc2V0ICovDQogICAgDQogICAgVElNRVItPlRJTTY0X01PREUgPSAwVTsgICAgICAgICAgICAgICAgICAgICAvKiBzd2l0Y2ggdG8gMzIgYml0cyBtb2RlICovDQogICAgDQogICAgVElNRVJfQklUQkFORC0+VElNMkVOQUJMRSA9IDBVOyAgICAgICAgICAgICAvKiBkaXNhYmxlIHRpbWVyICovDQogICAgVElNRVJfQklUQkFORC0+VElNMklOVEVOID0gMFU7ICAgICAgICAgICAgICAvKiBkaXNhYmxlIGludGVycnVwdCAqLw0KICAgIFRJTUVSX0JJVEJBTkQtPlRJTTJNT0RFID0gKHVpbnQzMl90KW1vZGU7ICAgLyogc2V0IG1vZGUgKGNvbnRpbnVvdXMvb25lLXNob3QpICovDQogICAgDQogICAgVElNRVItPlRJTTJfUklTID0gMVU7ICAgICAgICAgICAgICAgICAgICAgICAvKiBjbGVhciB0aW1lciAyIGludGVycnVwdCAqLw0KICAgIE5WSUNfQ2xlYXJQZW5kaW5nSVJRKCBUaW1lcjJfSVJRbiApOyAgICAgICAgLyogY2xlYXIgdGltZXIgMiBpbnRlcnJ1cHQgd2l0aGluIE5WSUMgKi8NCn0NCg0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8vKioNCiAgVGhlIE1TU19USU0yX3N0YXJ0KCkgZnVuY3Rpb24gZW5hYmxlcyBUaW1lciAyIGFuZCAgc3RhcnRzIGl0cyBkb3duLWNvdW50ZXINCiAgZGVjcmVtZW50aW5nIGZyb20gdGhlIGxvYWRfdmFsdWUgc3BlY2lmaWVkIGluIHByZXZpb3VzIGNhbGxzIHRvIHRoZQ0KICBNU1NfVElNMl9sb2FkX2ltbWVkaWF0ZSgpIG9yIE1TU19USU0yX2xvYWRfYmFja2dyb3VuZCgpIGZ1bmN0aW9ucy4NCiAqLw0Kc3RhdGljIF9fSU5MSU5FIHZvaWQgTVNTX1RJTTJfc3RhcnQoIHZvaWQgKQ0Kew0KICAgIFRJTUVSX0JJVEJBTkQtPlRJTTJFTkFCTEUgPSAxVTsgICAgLyogZW5hYmxlIHRpbWVyICovDQp9DQoNCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovLyoqDQogIFRoZSBNU1NfVElNMl9zdG9wKCkgZnVuY3Rpb24gZGlzYWJsZXMgVGltZXIgMiBhbmQgc3RvcHMgaXRzIGRvd24tY291bnRlcg0KICBkZWNyZW1lbnRpbmcuDQogKi8NCnN0YXRpYyBfX0lOTElORSB2b2lkIE1TU19USU0yX3N0b3AoIHZvaWQgKQ0Kew0KICAgIFRJTUVSX0JJVEJBTkQtPlRJTTJFTkFCTEUgPSAwVTsgICAgLyogZGlzYWJsZSB0aW1lciAqLw0KfQ0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLy8qKg0KICBUaGUgTVNTX1RJTTJfZ2V0X2N1cnJlbnRfdmFsdWUoKSByZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBUaW1lciAyDQogIGRvd24tY291bnRlci4NCiAqLw0Kc3RhdGljIF9fSU5MSU5FIHVpbnQzMl90IE1TU19USU0yX2dldF9jdXJyZW50X3ZhbHVlKCB2b2lkICkNCnsNCiAgICByZXR1cm4gVElNRVItPlRJTTJfVkFMOw0KfQ0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLy8qKg0KICBUaGUgTVNTX1RJTTJfbG9hZF9pbW1lZGlhdGUoKSBmdW5jdGlvbiBsb2FkcyB0aGUgdmFsdWUgcGFzc2VkIGJ5IHRoZQ0KICBsb2FkX3ZhbHVlIHBhcmFtZXRlciBpbnRvIHRoZSBUaW1lciAyIGRvd24tY291bnRlci4gVGhlIGNvdW50ZXIgd2lsbCBkZWNyZW1lbnQNCiAgaW1tZWRpYXRlbHkgZnJvbSB0aGlzIHZhbHVlIG9uY2UgVGltZXIgMiBpcyBlbmFibGVkLiBUaGUgTVNTIFRpbWVyIHdpbGwNCiAgZ2VuZXJhdGUgYW4gaW50ZXJydXB0IHdoZW4gdGhlIGNvdW50ZXIgcmVhY2hlcyB6ZXJvIGlmIFRpbWVyIDIgaW50ZXJydXB0cyBhcmUNCiAgZW5hYmxlZC4gVGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHdoZW4gVGltZXIgMiBpcyBjb25maWd1cmVkIGZvcg0KICBvbmUtc2hvdCBtb2RlIHRvIHRpbWUgYSBzaW5nbGUgZGVsYXkuDQogIA0KICBAcGFyYW0gbG9hZF92YWx1ZQ0KICAgIFRoZSBsb2FkX3ZhbHVlIHBhcmFtZXRlciBzcGVjaWZpZXMgdGhlIHZhbHVlIGZyb20gd2hpY2ggdGhlIFRpbWVyIDINCiAgICBkb3duLWNvdW50ZXIgd2lsbCBzdGFydCBkZWNyZW1lbnRpbmcuIA0KICovDQpzdGF0aWMgX19JTkxJTkUgdm9pZCBNU1NfVElNMl9sb2FkX2ltbWVkaWF0ZSggdWludDMyX3QgbG9hZF92YWx1ZSApDQp7DQogICAgVElNRVItPlRJTTJfTE9BRFZBTCA9IGxvYWRfdmFsdWU7DQp9DQoNCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovLyoqDQogIFRoZSBNU1NfVElNMl9sb2FkX2JhY2tncm91bmQoKSBmdW5jdGlvbiBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIHZhbHVlIHRoYXQgd2lsbA0KICBiZSByZWxvYWRlZCBpbnRvIHRoZSBUaW1lciAyIGRvd24tY291bnRlciB0aGUgbmV4dCB0aW1lIHRoZSBjb3VudGVyIHJlYWNoZXMNCiAgemVyby4gVGhpcyBmdW5jdGlvbiBpcyB0eXBpY2FsbHkgdXNlZCB3aGVuIFRpbWVyIDIgaXMgY29uZmlndXJlZCBmb3IgcGVyaW9kaWMNCiAgbW9kZSBvcGVyYXRpb24gdG8gc2VsZWN0IG9yIGNoYW5nZSB0aGUgZGVsYXkgcGVyaW9kIGJldHdlZW4gdGhlIGludGVycnVwdHMNCiAgZ2VuZXJhdGVkIGJ5IFRpbWVyIDIuDQogIA0KICBAcGFyYW0gbG9hZF92YWx1ZQ0KICAgIFRoZSBsb2FkX3ZhbHVlIHBhcmFtZXRlciBzcGVjaWZpZXMgdGhlIHZhbHVlIHRoYXQgd2lsbCBiZSBsb2FkZWQgaW50byB0aGUNCiAgICBUaW1lciAyIGRvd24tY291bnRlciB0aGUgbmV4dCB0aW1lIHRoZSBkb3duLWNvdW50ZXIgcmVhY2hlcyB6ZXJvLiBUaGUgVGltZXINCiAgICAyIGRvd24tY291bnRlciB3aWxsIHN0YXJ0IGRlY3JlbWVudGluZyBmcm9tIHRoaXMgdmFsdWUgYWZ0ZXIgdGhlIGN1cnJlbnQNCiAgICBjb3VudCBleHBpcmVzLg0KICovDQpzdGF0aWMgX19JTkxJTkUgdm9pZCBNU1NfVElNMl9sb2FkX2JhY2tncm91bmQoIHVpbnQzMl90IGxvYWRfdmFsdWUgKQ0Kew0KICAgIFRJTUVSLT5USU0yX0JHTE9BRFZBTCA9IGxvYWRfdmFsdWU7DQp9DQoNCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovLyoqDQogIFRoZSBNU1NfVElNMl9lbmFibGVfaXJxKCkgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUgaW50ZXJydXB0IGdlbmVyYXRpb24gZm9yDQogIFRpbWVyIDIuIFRoaXMgZnVuY3Rpb24gYWxzbyBlbmFibGVzIHRoZSBpbnRlcnJ1cHQgaW4gdGhlIENvcnRleC1NMyBpbnRlcnJ1cHQNCiAgY29udHJvbGxlci4gVGhlIFRpbWVyMl9JUlFIYW5kbGVyKCkgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2hlbiBhIFRpbWVyIDINCiAgaW50ZXJydXB0IG9jY3Vycy4NCiAgTm90ZTogQSBUaW1lcjJfSVJRSGFuZGxlcigpIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMgZGVmaW5lZCwgd2l0aCB3ZWFrDQogIGxpbmthZ2UsIGluIHRoZSBTbWFydEZ1c2lvbiBDTVNJUy1QQUwuIFlvdSBtdXN0IHByb3ZpZGUgeW91ciBvd24gaW1wbGVtZW50YXRpb24NCiAgb2YgdGhlIFRpbWVyMl9JUlFIYW5kbGVyKCkgZnVuY3Rpb24sIHRoYXQgd2lsbCBvdmVycmlkZSB0aGUgZGVmYXVsdA0KICBpbXBsZW1lbnRhdGlvbiwgdG8gc3VpdCB5b3VyIGFwcGxpY2F0aW9uLg0KICovDQpzdGF0aWMgX19JTkxJTkUgdm9pZCBNU1NfVElNMl9lbmFibGVfaXJxKCB2b2lkICkNCnsNCiAgICBUSU1FUl9CSVRCQU5ELT5USU0ySU5URU4gPSAxVTsNCiAgICBOVklDX0VuYWJsZUlSUSggVGltZXIyX0lSUW4gKTsNCn0NCg0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8vKioNCiAgVGhlIE1TU19USU0yX2Rpc2FibGVfaXJxKCkgZnVuY3Rpb24gaXMgdXNlZCB0byBkaXNhYmxlIGludGVycnVwdCBnZW5lcmF0aW9uDQogIGZvciBUaW1lciAyLiBUaGlzIGZ1bmN0aW9uIGFsc28gZGlzYWJsZXMgdGhlIGludGVycnVwdCBpbiB0aGUgQ29ydGV4LU0zDQogIGludGVycnVwdCBjb250cm9sbGVyLg0KICovDQpzdGF0aWMgX19JTkxJTkUgdm9pZCBNU1NfVElNMl9kaXNhYmxlX2lycSggdm9pZCApDQp7DQogICAgVElNRVJfQklUQkFORC0+VElNMklOVEVOID0gMFU7DQogICAgTlZJQ19EaXNhYmxlSVJRKCBUaW1lcjJfSVJRbiApOw0KfQ0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLy8qKg0KICBUaGUgTVNTX1RJTTJfY2xlYXJfaXJxKCkgZnVuY3Rpb24gaXMgdXNlZCB0byBjbGVhciBhIHBlbmRpbmcgaW50ZXJydXB0IGZyb20NCiAgVGltZXIgMi4gVGhpcyBmdW5jdGlvbiBhbHNvIGNsZWFycyB0aGUgaW50ZXJydXB0IGluIHRoZSBDb3J0ZXgtTTMgaW50ZXJydXB0DQogIGNvbnRyb2xsZXIuDQogIE5vdGU6IFlvdSBtdXN0IGNhbGwgdGhlIE1TU19USU0yX2NsZWFyX2lycSgpIGZ1bmN0aW9uIGFzIHBhcnQgb2YgeW91cg0KICBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVGltZXIyX0lSUUhhbmRsZXIoKSBUaW1lciAyIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUNCiAgKElTUikgaW4gb3JkZXIgdG8gcHJldmVudCB0aGUgc2FtZSBpbnRlcnJ1cHQgZXZlbnQgcmV0cmlnZ2VyaW5nIGEgY2FsbCB0byB0aGUNCiAgSVNSLg0KICovDQpzdGF0aWMgX19JTkxJTkUgdm9pZCBNU1NfVElNMl9jbGVhcl9pcnEoIHZvaWQgKQ0Kew0KICAgIFRJTUVSLT5USU0yX1JJUyA9IDFVOw0KICAgIE5WSUNfQ2xlYXJQZW5kaW5nSVJRKCBUaW1lcjJfSVJRbiApOw0KfQ0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLy8qKg0KICBUaGUgTVNTX1RJTTY0X2luaXQoKSBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgU21hcnRGdXNpb24gTVNTIFRpbWVyIGJsb2NrIGZvcg0KICB1c2UgYXMgYSBzaW5nbGUgNjQtYml0IHRpbWVyIGFuZCBzZWxlY3RzIHRoZSBvcGVyYXRpbmcgbW9kZSBvZiB0aGUgdGltZXIuIFRoaXMNCiAgZnVuY3Rpb24gdGFrZXMgdGhlIE1TUyBUaW1lciBibG9jayBvdXQgb2YgcmVzZXQgaW4gY2FzZSB0aGlzIGhhc26SdCBiZWVuIGRvbmUNCiAgYWxyZWFkeSwgc3RvcHMgdGhlIHRpbWVyLCBkaXNhYmxlcyBpdHMgaW50ZXJydXB0cyBhbmQgc2V0cyB0aGUgdGltZXIncw0KICBvcGVyYXRpbmcgbW9kZS4NCiAgTm90ZTogUGxlYXNlIG5vdGUgdGhhdCB0aGUgU21hcnRGdXNpb24gTVNTIFRpbWVyIGJsb2NrIGNhbm5vdCBiZSB1c2VkIGJvdGggYXMNCiAgYSA2NC1iaXQgYW5kIDMyLWJpdCB0aW1lci4gQ2FsbGluZyBNU1NfVElNNjRfaW5pdCgpIHdpbGwgb3ZlcndyaXRlIGFueSBwcmV2aW91cw0KICBjb25maWd1cmF0aW9uIG9mIHRoZSBNU1MgVGltZXIgYXMgYSAzMi1iaXQgdGltZXIuDQoNCiAgQHBhcmFtIG1vZGUNCiAgICBUaGUgbW9kZSBwYXJhbWV0ZXIgc3BlY2lmaWVzIHdoZXRoZXIgdGhlIHRpbWVyIHdpbGwgb3BlcmF0ZSBpbiBwZXJpb2RpYyBvcg0KICAgIG9uZS1zaG90IG1vZGUuIEFsbG93ZWQgdmFsdWVzIGZvciB0aGlzIHBhcmFtZXRlciBhcmU6DQogICAgICAgIC0gTVNTX1RJTUVSX1BFUklPRElDX01PREUNCiAgICAgICAgLSBNU1NfVElNRVJfT05FX1NIT1RfTU9ERSANCiAqLw0Kc3RhdGljIF9fSU5MSU5FIHZvaWQgTVNTX1RJTTY0X2luaXQoIG1zc190aW1lcl9tb2RlX3QgbW9kZSApDQp7DQogICAgTlZJQ19EaXNhYmxlSVJRKCBUaW1lcjFfSVJRbiApOyAgICAgICAgIC8qIGRpc2FibGUgdGltZXIgMSBpbnRlcnJ1cHQgd2l0aGluIE5WSUMgKi8NCiAgICBOVklDX0Rpc2FibGVJUlEoIFRpbWVyMl9JUlFuICk7ICAgICAgICAgLyogZGlzYWJsZSB0aW1lciAyIGludGVycnVwdCB3aXRoaW4gTlZJQyAqLw0KICAgIA0KICAgIFNZU1JFRy0+U09GVF9SU1RfQ1IgJj0gflNZU1JFR19USU1FUl9TT0ZUUkVTRVRfTUFTSzsgLyogVGFrZSB0aW1lciBibG9jayBvdXQgb2YgcmVzZXQgKi8NCiAgICANCiAgICBUSU1FUi0+VElNNjRfTU9ERSA9IDFVOyAgICAgICAgICAgICAgICAgICAgIC8qIHN3aXRjaCB0byA2NCBiaXRzIG1vZGUgKi8NCiAgICANCiAgICBUSU1FUl9CSVRCQU5ELT5USU02NEVOQUJMRSA9IDBVOyAgICAgICAgICAgIC8qIGRpc2FibGUgdGltZXIgKi8NCiAgICBUSU1FUl9CSVRCQU5ELT5USU02NElOVEVOID0gMFU7ICAgICAgICAgICAgIC8qIGRpc2FibGUgaW50ZXJydXB0ICovDQogICAgVElNRVJfQklUQkFORC0+VElNNjRNT0RFID0gKHVpbnQzMl90KW1vZGU7ICAvKiBzZXQgbW9kZSAoY29udGludW91cy9vbmUtc2hvdCkgKi8NCiAgICANCiAgICBUSU1FUi0+VElNMV9SSVMgPSAxVTsgICAgICAgICAgICAgICAgICAgLyogY2xlYXIgdGltZXIgMSBpbnRlcnJ1cHQgKi8NCiAgICBUSU1FUi0+VElNMl9SSVMgPSAxVTsgICAgICAgICAgICAgICAgICAgLyogY2xlYXIgdGltZXIgMiBpbnRlcnJ1cHQgKi8NCiAgICBOVklDX0NsZWFyUGVuZGluZ0lSUSggVGltZXIxX0lSUW4gKTsgICAgLyogY2xlYXIgdGltZXIgMSBpbnRlcnJ1cHQgd2l0aGluIE5WSUMgKi8NCiAgICBOVklDX0NsZWFyUGVuZGluZ0lSUSggVGltZXIyX0lSUW4gKTsgICAgLyogY2xlYXIgdGltZXIgMiBpbnRlcnJ1cHQgd2l0aGluIE5WSUMgKi8NCn0NCg0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8vKioNCiAgVGhlIE1TU19USU02NF9zdGFydCgpIGZ1bmN0aW9uIGVuYWJsZXMgdGhlIDY0LWJpdCB0aW1lciBhbmQgc3RhcnRzIGl0cw0KICBkb3duLWNvdW50ZXIgZGVjcmVtZW50aW5nIGZyb20gdGhlIGxvYWRfdmFsdWUgc3BlY2lmaWVkIGluIHByZXZpb3VzIGNhbGxzIHRvDQogIHRoZSBNU1NfVElNNjRfbG9hZF9pbW1lZGlhdGUoKSBvciBNU1NfVElNNjRfbG9hZF9iYWNrZ3JvdW5kKCkgZnVuY3Rpb25zLg0KICovDQpzdGF0aWMgX19JTkxJTkUgdm9pZCBNU1NfVElNNjRfc3RhcnQoIHZvaWQgKQ0Kew0KICAgIFRJTUVSX0JJVEJBTkQtPlRJTTY0RU5BQkxFID0gMVU7ICAgIC8qIGVuYWJsZSB0aW1lciAqLw0KfQ0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLy8qKg0KICBUaGUgTVNTX1RJTTY0X3N0b3AoKSBmdW5jdGlvbiBkaXNhYmxlcyB0aGUgNjQtYml0IHRpbWVyIGFuZCBzdG9wcyBpdHMNCiAgZG93bi1jb3VudGVyIGRlY3JlbWVudGluZy4NCiAqLw0Kc3RhdGljIF9fSU5MSU5FIHZvaWQgTVNTX1RJTTY0X3N0b3AoIHZvaWQgKQ0Kew0KICAgIFRJTUVSX0JJVEJBTkQtPlRJTTY0RU5BQkxFID0gMFU7ICAgIC8qIGRpc2FibGUgdGltZXIgKi8NCn0NCg0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8vKioNCiAgVGhlIE1TU19USU02NF9nZXRfY3VycmVudF92YWx1ZSgpIGlzIHVzZWQgdG8gcmVhZCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUNCiAgNjQtYml0IHRpbWVyIGRvd24tY291bnRlci4gDQogDQogIEBwYXJhbSBsb2FkX3ZhbHVlX3UNCiAgICBUaGUgbG9hZF92YWx1ZV91IHBhcmFtZXRlciBpcyBhIHBvaW50ZXIgdG8gYSAzMi1iaXQgdmFyaWFibGUgd2hlcmUgdGhlIHVwcGVyDQogICAgMzIgYml0cyBvZiB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgNjQtYml0IHRpbWVyIGRvd24tY291bnRlciB3aWxsIGJlIGNvcGllZC4NCiAgICANCiAgQHBhcmFtIGxvYWRfdmFsdWVfbA0KICAgIFRoZSBsb2FkX3ZhbHVlX2wgcGFyYW1ldGVyIGlzIGEgcG9pbnRlciB0byBhIDMyLWJpdCB2YXJpYWJsZSB3aGVyZSB0aGUgbG93ZXINCiAgICAzMiBiaXRzIG9mIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSA2NC1iaXQgdGltZXIgZG93bi1jb3VudGVyIHdpbGwgYmUgY29waWVkLg0KICAgIA0KICBFeGFtcGxlOg0KICBAY29kZQ0KICAgIHVpbnQzMl90IGN1cnJlbnRfdmFsdWVfdSA9IDA7DQogICAgdWludDMyX3QgY3VycmVudF92YWx1ZV9sID0gMDsNCiAgICBNU1NfVElNNjRfZ2V0X2N1cnJlbnRfdmFsdWUoICZjdXJyZW50X3ZhbHVlX3UsICZjdXJyZW50X3ZhbHVlX2wgKTsNCiAgQGVuZGNvZGUNCiAqLw0Kc3RhdGljIF9fSU5MSU5FIHZvaWQgTVNTX1RJTTY0X2dldF9jdXJyZW50X3ZhbHVlDQooDQogICAgdWludDMyX3QgKiBsb2FkX3ZhbHVlX3UsDQogICAgdWludDMyX3QgKiBsb2FkX3ZhbHVlX2wNCikNCnsNCiAgICAqbG9hZF92YWx1ZV9sID0gVElNRVItPlRJTTY0X1ZBTF9MOw0KICAgICpsb2FkX3ZhbHVlX3UgPSBUSU1FUi0+VElNNjRfVkFMX1U7DQp9DQoNCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovLyoqDQogIFRoZSBNU1NfVElNNjRfbG9hZF9pbW1lZGlhdGUoKSBmdW5jdGlvbiBsb2FkcyB0aGUgdmFsdWVzIHBhc3NlZCBieSB0aGUNCiAgbG9hZF92YWx1ZV91IGFuZCBsb2FkX3ZhbHVlX2wgcGFyYW1ldGVycyBpbnRvIHRoZSA2NC1iaXQgdGltZXIgZG93bi1jb3VudGVyLg0KICBUaGUgY291bnRlciB3aWxsIGRlY3JlbWVudCBpbW1lZGlhdGVseSBmcm9tIHRoZSBjb25jYXRlbmF0ZWQgNjQtYml0IHZhbHVlIG9uY2UNCiAgdGhlIDY0LWJpdCB0aW1lciBpcyBlbmFibGVkLiBUaGUgTVNTIFRpbWVyIHdpbGwgZ2VuZXJhdGUgYW4gaW50ZXJydXB0IHdoZW4gdGhlDQogIGNvdW50ZXIgcmVhY2hlcyB6ZXJvIGlmIDY0LWJpdCB0aW1lciBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkLiBUaGlzIGZ1bmN0aW9uIGlzDQogIGludGVuZGVkIHRvIGJlIHVzZWQgd2hlbiB0aGUgNjQtYml0IHRpbWVyIGlzIGNvbmZpZ3VyZWQgZm9yIG9uZS1zaG90IG1vZGUgdG8NCiAgdGltZSBhIHNpbmdsZSBkZWxheS4NCiANCiAgQHBhcmFtIGxvYWRfdmFsdWVfdQ0KICAgIFRoZSBsb2FkX3ZhbHVlX3UgcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgdXBwZXIgMzIgYml0cyBvZiB0aGUgNjQtYml0IHRpbWVyDQogICAgbG9hZCB2YWx1ZSBmcm9tIHdoaWNoIHRoZSA2NC1iaXQgdGltZXIgZG93bi1jb3VudGVyIHdpbGwgc3RhcnQgZGVjcmVtZW50aW5nLg0KICAgIA0KICBAcGFyYW0gbG9hZF92YWx1ZV9sDQogICAgVGhlIGxvYWRfdmFsdWVfbCBwYXJhbWV0ZXIgc3BlY2lmaWVzIHRoZSBsb3dlciAzMiBiaXRzIG9mIHRoZSA2NC1iaXQgdGltZXINCiAgICBsb2FkIHZhbHVlIGZyb20gd2hpY2ggdGhlIDY0LWJpdCB0aW1lciBkb3duLWNvdW50ZXIgd2lsbCBzdGFydCBkZWNyZW1lbnRpbmcuDQogKi8NCnN0YXRpYyBfX0lOTElORSB2b2lkIE1TU19USU02NF9sb2FkX2ltbWVkaWF0ZQ0KKA0KICAgIHVpbnQzMl90IGxvYWRfdmFsdWVfdSwNCiAgICB1aW50MzJfdCBsb2FkX3ZhbHVlX2wNCikNCnsNCiAgICBUSU1FUi0+VElNNjRfTE9BRFZBTF9VID0gbG9hZF92YWx1ZV91Ow0KICAgIFRJTUVSLT5USU02NF9MT0FEVkFMX0wgPSBsb2FkX3ZhbHVlX2w7DQp9DQoNCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovLyoqDQogIFRoZSBNU1NfVElNNjRfbG9hZF9iYWNrZ3JvdW5kKCkgZnVuY3Rpb24gaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSA2NC1iaXQgdmFsdWUNCiAgdGhhdCB3aWxsIGJlIHJlbG9hZGVkIGludG8gdGhlIDY0LWJpdCB0aW1lciBkb3duLWNvdW50ZXIgdGhlIG5leHQgdGltZSB0aGUNCiAgY291bnRlciByZWFjaGVzIHplcm8uIFRoaXMgZnVuY3Rpb24gaXMgdHlwaWNhbGx5IHVzZWQgd2hlbiB0aGUgNjQtYml0IHRpbWVyIGlzDQogIGNvbmZpZ3VyZWQgZm9yIHBlcmlvZGljIG1vZGUgb3BlcmF0aW9uIHRvIHNlbGVjdCBvciBjaGFuZ2UgdGhlIGRlbGF5IHBlcmlvZA0KICBiZXR3ZWVuIHRoZSBpbnRlcnJ1cHRzIGdlbmVyYXRlZCBieSB0aGUgNjQtYml0IHRpbWVyLg0KIA0KICBAcGFyYW0gbG9hZF92YWx1ZV91DQogICAgVGhlIGxvYWRfdmFsdWVfdSBwYXJhbWV0ZXIgc3BlY2lmaWVzIHRoZSB1cHBlciAzMiBiaXRzIG9mIHRoZSA2NC1iaXQgdGltZXINCiAgICBsb2FkIHZhbHVlLiBUaGUgY29uY2F0ZW5hdGVkIDY0LWJpdCB2YWx1ZSBmb3JtZWQgZnJvbSBsb2FkX3ZhbHVlX3UgYW5kDQogICAgbG9hZF92YWx1ZV9sIHdpbGwgYmUgbG9hZGVkIGludG8gdGhlIDY0LWJpdCB0aW1lciBkb3duLWNvdW50ZXIgdGhlIG5leHQNCiAgICB0aW1lIHRoZSBkb3duLWNvdW50ZXIgcmVhY2hlcyB6ZXJvLiBUaGUgNjQtYml0IHRpbWVyIGRvd24tY291bnRlciB3aWxsIHN0YXJ0DQogICAgZGVjcmVtZW50aW5nIGZyb20gdGhlIGNvbmNhdGVuYXRlZCA2NC1iaXQgdmFsdWUgYWZ0ZXIgdGhlIGN1cnJlbnQgY291bnQNCiAgICBleHBpcmVzLg0KICAgIA0KICBAcGFyYW0gbG9hZF92YWx1ZV9sDQogICAgVGhlIGxvYWRfdmFsdWVfbCBwYXJhbWV0ZXIgc3BlY2lmaWVzIHRoZSBsb3dlciAzMiBiaXRzIG9mIHRoZSA2NC1iaXQgdGltZXINCiAgICBsb2FkIHZhbHVlLiBUaGUgY29uY2F0ZW5hdGVkIDY0LWJpdCB2YWx1ZSBmb3JtZWQgZnJvbSBsb2FkX3ZhbHVlX3UgYW5kDQogICAgbG9hZF92YWx1ZV9sIHdpbGwgYmUgbG9hZGVkIGludG8gdGhlIDY0LWJpdCB0aW1lciBkb3duLWNvdW50ZXIgdGhlIG5leHQgdGltZQ0KICAgIHRoZSBkb3duLWNvdW50ZXIgcmVhY2hlcyB6ZXJvLiBUaGUgNjQtYml0IHRpbWVyIGRvd24tY291bnRlciB3aWxsIHN0YXJ0DQogICAgZGVjcmVtZW50aW5nIGZyb20gdGhlIGNvbmNhdGVuYXRlZCA2NC1iaXQgdmFsdWUgYWZ0ZXIgdGhlIGN1cnJlbnQgY291bnQNCiAgICBleHBpcmVzLg0KIA0KICovDQpzdGF0aWMgX19JTkxJTkUgdm9pZCBNU1NfVElNNjRfbG9hZF9iYWNrZ3JvdW5kDQooDQogICAgdWludDMyX3QgbG9hZF92YWx1ZV91LA0KICAgIHVpbnQzMl90IGxvYWRfdmFsdWVfbA0KKQ0Kew0KICAgIFRJTUVSLT5USU02NF9CR0xPQURWQUxfVSA9IGxvYWRfdmFsdWVfdTsNCiAgICBUSU1FUi0+VElNNjRfQkdMT0FEVkFMX0wgPSBsb2FkX3ZhbHVlX2w7DQp9DQoNCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovLyoqDQogIFRoZSBNU1NfVElNNjRfZW5hYmxlX2lycSgpIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZW5hYmxlIGludGVycnVwdCBnZW5lcmF0aW9uIGZvcg0KICB0aGUgNjQtYml0IHRpbWVyLiBUaGlzIGZ1bmN0aW9uIGFsc28gZW5hYmxlcyB0aGUgaW50ZXJydXB0IGluIHRoZSBDb3J0ZXgtTTMNCiAgaW50ZXJydXB0IGNvbnRyb2xsZXIuIFRoZSBUaW1lcjFfSVJRSGFuZGxlcigpIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdoZW4gYQ0KICA2NC1iaXQgdGltZXIgaW50ZXJydXB0IG9jY3Vycy4NCiAgTm90ZTogQSBUaW1lcjFfSVJRSGFuZGxlcigpIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMgZGVmaW5lZCwgd2l0aCB3ZWFrDQogIGxpbmthZ2UsIGluIHRoZSBTbWFydEZ1c2lvbiBDTVNJUy1QQUwuIFlvdSBtdXN0IHByb3ZpZGUgeW91ciBvd24NCiAgaW1wbGVtZW50YXRpb24gb2YgdGhlIFRpbWVyMV9JUlFIYW5kbGVyKCkgZnVuY3Rpb24sIHRoYXQgd2lsbCBvdmVycmlkZSB0aGUNCiAgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiwgdG8gc3VpdCB5b3VyIGFwcGxpY2F0aW9uLg0KICBOb3RlOiBUaGUgTVNTX1RJTTY0X2VuYWJsZV9pcnEoKSBmdW5jdGlvbiBlbmFibGVzIGFuZCB1c2VzIFRpbWVyIDEgaW50ZXJydXB0cw0KICBmb3IgdGhlIDY0LWJpdCB0aW1lci4gVGltZXIgMiBpbnRlcnJ1cHRzIHJlbWFpbiBkaXNhYmxlZC4NCiAqLw0Kc3RhdGljIF9fSU5MSU5FIHZvaWQgTVNTX1RJTTY0X2VuYWJsZV9pcnEoIHZvaWQgKQ0Kew0KICAgIFRJTUVSX0JJVEJBTkQtPlRJTTY0SU5URU4gPSAxVTsNCiAgICBOVklDX0VuYWJsZUlSUSggVGltZXIxX0lSUW4gKTsNCn0NCg0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8vKioNCiAgVGhlIE1TU19USU02NF9kaXNhYmxlX2lycSgpIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZGlzYWJsZSBpbnRlcnJ1cHQgZ2VuZXJhdGlvbg0KICBmb3IgdGhlIDY0LWJpdCB0aW1lci4gVGhpcyBmdW5jdGlvbiBhbHNvIGRpc2FibGVzIHRoZSBpbnRlcnJ1cHQgaW4gdGhlDQogIENvcnRleC1NMyBpbnRlcnJ1cHQgY29udHJvbGxlci4NCiAqLw0Kc3RhdGljIF9fSU5MSU5FIHZvaWQgTVNTX1RJTTY0X2Rpc2FibGVfaXJxKCB2b2lkICkNCnsNCiAgICBUSU1FUl9CSVRCQU5ELT5USU02NElOVEVOID0gMFU7DQogICAgTlZJQ19EaXNhYmxlSVJRKCBUaW1lcjFfSVJRbiApOw0KfQ0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLy8qKg0KICBUaGUgTVNTX1RJTTY0X2NsZWFyX2lycSgpIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY2xlYXIgYSBwZW5kaW5nIGludGVycnVwdCBmcm9tDQogIHRoZSA2NC1iaXQgdGltZXIuIFRoaXMgZnVuY3Rpb24gYWxzbyBjbGVhcnMgdGhlIGludGVycnVwdCBpbiB0aGUgQ29ydGV4LU0zDQogIGludGVycnVwdCBjb250cm9sbGVyLg0KICBOb3RlOiBZb3UgbXVzdCBjYWxsIHRoZSBNU1NfVElNNjRfY2xlYXJfaXJxKCkgZnVuY3Rpb24gYXMgcGFydCBvZiB5b3VyDQogIGltcGxlbWVudGF0aW9uIG9mIHRoZSBUaW1lcjFfSVJRSGFuZGxlcigpIDY0LWJpdCB0aW1lciBpbnRlcnJ1cHQgc2VydmljZQ0KICByb3V0aW5lIChJU1IpIGluIG9yZGVyIHRvIHByZXZlbnQgdGhlIHNhbWUgaW50ZXJydXB0IGV2ZW50IHJldHJpZ2dlcmluZyBhDQogIGNhbGwgdG8gdGhlIElTUi4NCiAqLw0Kc3RhdGljIF9fSU5MSU5FIHZvaWQgTVNTX1RJTTY0X2NsZWFyX2lycSggdm9pZCApDQp7DQogICAgVElNRVItPlRJTTY0X1JJUyA9IDFVOw0KICAgIE5WSUNfQ2xlYXJQZW5kaW5nSVJRKCBUaW1lcjFfSVJRbiApOw0KfQ0KDQojaWZkZWYgX19jcGx1c3BsdXMNCn0NCiNlbmRpZg0KDQojZW5kaWYgLypNU1NfVElNRVJfSF8qLw0K