LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIChjKSBDb3B5cmlnaHQgMjAwOSBBY3RlbCBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQogKiANCiAqIFNtYXJ0RnVzaW9uIE1pY3JvY29udHJvbGxlciBTdWJzeXN0ZW0gKE1TUykgV2F0Y2hkb2cgYmFyZSBtZXRhbCBzb2Z0d2FyZQ0KICogZHJpdmVyLg0KICoNCiAqIFNWTiAkUmV2aXNpb246IDE4ODggJA0KICogU1ZOICREYXRlOiAyMDA5LTEyLTE4IDEwOjU4OjQyICswMDAwIChGcmksIDE4IERlYyAyMDA5KSAkDQogKi8NCi8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovLyoqDQogIEBzZWN0aW9uIGludHJvX3NlYyBJbnRyb2R1Y3Rpb24NCiAgVGhlIFNtYXJ0RnVzaW9uIG1pY3JvY29udHJvbGxlciBzdWJzeXN0ZW0gKE1TUykgaW5jbHVkZXMgYSB3YXRjaGRvZyB0aW1lciB1c2VkDQogIHRvIGRldGVjdCBzeXN0ZW0gbG9ja3Vwcy4NCiAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgYSBzZXQgb2YgZnVuY3Rpb25zIGZvciBjb250cm9sbGluZyB0aGUgTVNTIHdhdGNoZG9nIGFzDQogIHBhcnQgb2YgYSBiYXJlIG1ldGFsIHN5c3RlbSB3aGVyZSBubyBvcGVyYXRpbmcgc3lzdGVtIGlzIGF2YWlsYWJsZS4gVGhlc2UNCiAgZHJpdmVycyBjYW4gYmUgYWRhcHRlZCBmb3IgdXNlIGFzIHBhcnQgb2YgYW4gb3BlcmF0aW5nIHN5c3RlbSBidXQgdGhlDQogIGltcGxlbWVudGF0aW9uIG9mIHRoZSBhZGFwdGF0aW9uIGxheWVyIGJldHdlZW4gdGhpcyBkcml2ZXIgYW5kIHRoZSBvcGVyYXRpbmcNCiAgc3lzdGVtJ3MgZHJpdmVyIG1vZGVsIGlzIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgZHJpdmVyLg0KICAgIA0KICBAc2VjdGlvbiBod19kZXBlbmRlbmNpZXMgSGFyZHdhcmUgRmxvdyBEZXBlbmRlbmNpZXMNCiAgVGhlIGNvbmZpZ3VyYXRpb24gb2YgYWxsIGZlYXR1cmVzIG9mIHRoZSBNU1Mgd2F0Y2hkb2cgaXMgY292ZXJlZCBieSB0aGlzDQogIGRyaXZlci4gVGhlcmUgYXJlIG5vIGRlcGVuZGVuY2llcyBvbiB0aGUgaGFyZHdhcmUgZmxvdyBmb3IgY29uZmlndXJpbmcgdGhlDQogIFNtYXJ0RnVzaW9uIE1TUyB3YXRjaGRvZyB0aW1lci4NCiAgICANCiAgQHNlY3Rpb24gdGhlb3J5X29wIFRoZW9yeSBvZiBPcGVyYXRpb24NCiAgVGhlIHdhdGNoZG9nIGRyaXZlciB1c2VzIHRoZSBTbWFydEZ1c2lvbiAiQ29ydGV4IE1pY3JvY29udHJvbGVyIFNvZnR3YXJlDQogIEludGVyZmFjZSBTdGFuZGFyZCAtIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyIiAoQ01TSVMtUEFMKSB0byBhY2Nlc3MgaGFkd2FyZQ0KICByZWdpc3RlcnMuIFlvdSBtdXN0IGVuc3VyZSB0aGF0IHRoZSBTbWFydEZ1c2lvbiBDTVNJUy1QQUwgaXMgZWl0aGVyIGluY2x1ZGVkDQogIGluIHRoZSBzb2Z0d2FyZSB0b29sY2hhaW4gdXNlZCB0byBidWlsZCB5b3VyIHByb2plY3Qgb3IgaXMgaW5jbHVkZWQgaW4geW91cg0KICBwcm9qZWN0LiBUaGUgbW9zdCB1cC10by1kYXRlIFNtYXJ0RnVzaW9uIENNU0lTLVBBTCBmaWxlcyBjYW4gYmUgb2J0YWluZWQgdXNpbmcNCiAgdGhlIEFjdGVsIEZpcm13YXJlIENhdGFsb2cuDQogIA0KICBUaGUgd2F0Y2hkb2cgZHJpdmVyIGZ1bmN0aW9ucyBhcmUgZ3JvdXBlZCBpbnRvIHRoZSBmb2xsb3dpbmcgY2F0ZWdvcmllczoNCiAgICAtIEluaXRpYWxpemF0aW9uIGFuZCBjbmZpZ3VyYXRpb24NCiAgICAtIFJlYWRpbmcgdGhlIHdhdGNoZG9nIHRpbWVyIGN1cnJlbnQgdmFsdWUgYW5kIHN0YXR1cw0KICAgIC0gUmVmcmVzaGluZyB0aGUgd2F0Y2hkb2cgdGltZXIgdmFsdWUNCiAgICAtIFRpbWUtb3V0IGFuZCB3YWtlLXVwIGludGVycnVwdHMgY29udHJvbA0KICANCiAgVGhlIHdhdGNoZG9nIGRyaXZlciBpcyBpbml0aWFsaXplZCBhbmQgY29uZmlndXJlZCB0aHJvdWdoIGEgY2FsbCB0byB0aGUNCiAgTVNTX1dEX2luaXQoKSBmdW5jdGlvbi4gVGhlIHBhcmFtZXRlcnMgcGFzc2VkIHRvIE1TU19XRF9pbml0KCkgZnVuY3Rpb24NCiAgc3BlY2lmeSB0aGUgd2F0Y2hkb2cgdGltZXIgY29uZmlndXJhdGlvbi4gVGhlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBpbmNsdWRlDQogIHRoZSB2YWx1ZSB0aGF0IHdpbGwgYmUgcmVsb2FkZWQgaW50byB0aGUgd2F0Y2hkb2cgdGltZXIgZG93biBjb3VudGVyIGV2ZXJ5DQogIHRpbWUgdGhlIHdhdGNoZG9nIGlzIHJlZnJlc2hlZC4gQWxzbyBpbmNsdWRlZCBhcyBwYXJ0IG9mIHRoZSBjb25maWd1cmF0aW9uDQogIHBhcmFtZXRlcnMgaXMgdGhlIG9wdGlvbmFsIGFsbG93ZWQgcmVmcmVzaCB3aW5kb3cuIFRoZSBhbGxvd2VkIHJlZnJlc2ggd2luZG93DQogIHNwZWNpZmllcyB0aGUgbWF4aW11bSBhbGxvd2VkIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHdhdGNoZG9nIHRpbWVyIGF0IHRoZSB0aW1lDQogIG9mIHRoZSB3YXRjaGRvZyBpcyByZWxhb2RlZC4gQXR0ZW1wdGluZyB0byByZWxvYWQgdGhlIHdhdGNoZG9nIHRpbWVyIHdoZW4gaXRzDQogIHZhbHVlIGlzIGxhcmdlciB0aGFuIHRoZSBhbGxvd2VkIHJlZnJlc2ggd2luZG93IHdpbGwgY2F1c2UgYSByZXNldCBvcg0KICBpbnRlcnJ1cHQgZGVwZW5kaW5nIG9uIHRoZSB3YXRjaGRvZyBjb25maWd1cmF0aW9uLiBUaGUgYWxsb3dlZCByZWZyZXNoIHdpbmRvdw0KICBjYW4gYmUgZGlzYWJsZWQgYnkgc3BlY2lmeWluZyBhbiBhbGxvd2VkIHJlZmVzaCB3aW5kb3cgZXF1YWwgb3IgaGlnaGVyIHRoYW4NCiAgdGhlIHdhdGNoZG9nIHJlbG9hZCB2YWx1ZS4NCiAgVGhlIE1TU19XRF9pbml0KCkgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFueSBvdGhlciB3YXRjaGRvZyBkcml2ZXINCiAgZnVuY3Rpb25zIGNhbiBiZSBjYWxsZWQgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZSBNU1NfV0RfZGlzYWJsZSgpIGZ1bmN0aW9uLg0KICANCiAgVGhlIHdhdGNoZG9nIHRpbWVyIGNhbiBiZSBkaXNhYmxlZCB1c2luZyB0aGUgTVNTX1dEX2Rpc2FibGUoKSBmdW5jdGlvbi4gT25jZQ0KICBkaXNhYmxlZCwgdGhlIHdhdGNoZG9nIHRpbWVyIGNhbiBvbmx5IGJlIHJlZW5hYmxlZCBieSBhIHBvd2VyLW9uIHJlc2V0Lg0KICANCiAgVGhlIHdhdGNoZG9nIHRpbWVyIGN1cnJlbnQgdmFsdWUgY2FuIGJlIHJlYWQgdXNpbmcgdGhlIE1TU19XRF9jdXJyZW50X3ZhbHVlKCkNCiAgZnVuY3Rpb24uIFRoZSB3YXRjaGRvZyBzdGF0dXMgY2FuIGJlIHJlYWQgdXNpbmcgdGhlIE1TU19XRF9zdGF0dXMoKSBmdW5jdGlvbi4NCiAgVGhlc2UgZnVuY3Rpb25zIGFyZSB0eXBpY2FsbHkgcmVxdWlyZWQgd2hlbiB1c2luZyB0aGUgd2F0Y2hkb2cgY29uZmlndXJlZCB3aXRoDQogIGFuIGFsbG93ZWQgcmVmcmVzaCB3aW5kb3cgdG8gY2hlY2sgaWYgYSB3YXRjaGRvZyByZWxvYWQgaXMgY3VycmVudGx5IGFsbG93ZWQuDQogIA0KICBUaGUgd2F0Y2hkb2cgdGltZXIgdmFsdWUgaXMgcmVsb2FkZWQgdXNpbmcgdGhlIE1TU19XRF9yZWxvYWQoKSBmdW5jdGlvbi4gVGhlDQogIHZhbHVlIHJlbG9hZGVkIGludG8gdGhlIHdhdGNoZG9nIHRpbWVyIGRvd24gY291bnRlciBpcyB0aGUgdmFsdWUgc3BlY2lmaWVkIGFzDQogIHBhcmFtZXRlciB0byB0aGUgTVNTX1dEX2luaXQoKSBmdW5jdGlvbi4NCiAgDQogIFRoZSB3YXRjaGRvZyB0aW1lciBjYW4gZ2VuZXJhdGUgaW50ZXJydXB0cyBpbnN0ZWFkIG9mIHJlc2V0dGluZyB0aGUgc3lzdGVtDQogIHdoZW4gaXRzIGRvd24tY291bnRlciB0aW1lciBleHBpcmVzLiBUaGVzZSB0aW1lLW91dCBpbnRlcnJ1cHRzIGFyZSBjb250cm9sbGVkDQogIHVzaW5nIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOg0KICAgIC0gTVNTX1dEX2VuYWJsZV90aW1lb3V0X2lycQ0KICAgIC0gTVNTX1dEX2Rpc2FibGVfdGltZW91dF9pcnENCiAgICAtIE1TU19XRF9jbGVhcl90aW1lb3V0X2lycQ0KICANCiAgVGhlIHdhdGNoZG9nIHRpbWVyIGlzIGV4dGVybmFsIHRvIHRoZSBDb3J0ZXgtTTMgcHJvY2Vzc29yIGNvcmUgYW5kIG9wZXJhdGVzDQogIGV2ZW4gd2hlbiB0aGUgQ29ydGV4LU0zIGlzIGluIHNsZWVwIG1vZGUuIEEgd2FrZXVwIGludGVycnVwdCBjYW4gYmUgZ2VuZXJhdGVkDQogIGJ5IHRoZSB3YXRjaGRvZyB0aW1lciB0byB3YWtldXAgdGhlIENvcnRleHQtTTMgd2hlbiB0aGUgd2F0Y2hkb2cgdGltZXIgdmFsdWUNCiAgcmVhY2hlcyB0aGUgYWxsb3dlZCByZWZyZXNoIHdpbmRvdyB3aGlsZSB0aGUgQ29ydGV4LU0zIGlzIGluIHNsZWVwIG1vZGUuIFRoZQ0KICB3YXRjaGRvZyBkcml2ZXIgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgdG8gY29udHJvbCB3YWtldXAgaW50ZXJydXB0czoNCiAgICAtIE1TU19XRF9lbmFibGVfd2FrZXVwX2lycQ0KICAgIC0gTVNTX1dEX2Rpc2FibGVfd2FrZXVwX2lycQ0KICAgIC0gTVNTX1dEX2NsZWFyX3dha2V1cF9pcnENCiAgICANCiAqLy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovDQoNCiNpZm5kZWYgTVNTX1dBVENIRE9HX0hfDQojZGVmaW5lIE1TU19XQVRDSERPR19IXw0KDQojaWZkZWYgX19jcGx1c3BsdXMNCmV4dGVybiAiQyIgew0KI2VuZGlmIA0KDQojaW5jbHVkZSAiLi4vLi4vQ01TSVMvYTJmeHh4bTMuaCINCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioNCiAqIFRoZSBNU1NfV0RPR19SRVNFVF9PTl9USU1FT1VUX01PREUgbWFjcm8gaXMgb25lIG9mIHRoZSBwb3NzaWJsZSB2YWx1ZXMgZm9yIHRoZQ0KICogbW9kZSBwYXJhbWV0ZXIgb2YgdGhlIFdEX2luaXQoKSBmdW5jdGlvbi4gSXQgaXMgdXNlZCB0byBzcGVjaWZ5IHRoYXQgYSByZXNldA0KICogc2hvdWxkIG9jY3VyIHdoZW4gdGhlIHdhdGNoZG9nIGRvd24gY291bnRlciB0aW1lcyBvdXQuDQogKi8NCiNkZWZpbmUgTVNTX1dET0dfUkVTRVRfT05fVElNRU9VVF9NT0RFICAgICAgICh1aW50MzJfdCkweDAwMDAwMDAwVQ0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKg0KICogVGhlIE1TU19XRE9HX0lOVEVSUlVQVF9PTl9USU1FT1VUX01PREUgbWFjcm8gaXMgb25lIG9mIHRoZSBwb3NzaWJsZSB2YWx1ZXMgZm9yDQogKiB0aGUgIG1vZGUgcGFyYW1ldGVyIG9mIGZ1bmN0aW9uIHRoZSBXRF9pbml0KCkgZnVuY3Rpb24uIEl0IGlzIHVzZWQgdG8gc3BlY2lmeQ0KICogdGhhdCBhIHRpbWUgb3V0IGludGVycnVwdCBzaG91bGQgb2NjdXIgd2hlbiB0aGUgd2F0Y2hkb2cgZG93biBjb3VudGVyIGV4cGlyZXMuDQogKi8NCiNkZWZpbmUgTVNTX1dET0dfSU5URVJSVVBUX09OX1RJTUVPVVRfTU9ERSAgICh1aW50MzJfdCkweDAwMDAwMDA0VQ0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKg0KICogVGhlIE1TU19XRE9HX05PX1dJTkRPVyBtYWNybyBjYW4gYmUgdXNlZCBhcyB0aGUgdmFsdWUgZm9yIHRoZSByZWxvYWRfd2luZG93DQogKiBwYXJhbWV0ZXIgb2YgdGhlIFdEX2luaXQoKSBmdW5jdGlvbi4gSXQgaXMgdXNlZCB0byBzcGVjaWZ5IHRoYXQgbm8gZm9yYmlkZGVuDQogKiB3aW5kb3cgd2lsbCBleGlzdCBmb3IgdGhlIHJlbG9hZCBvZiB0aGUgd2F0Y2hkb2cgZG93biBjb3VudGVyLg0KICovDQojZGVmaW5lIE1TU19XRE9HX05PX1dJTkRPVyAgICAodWludDMyX3QpMHhGRkZGRkZGRlUNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioNCiAqIFRoZSBNU1NfV0RPR19DVFJMX01PREVfQklUX01BU0sgbWFjcm8gaXMgYSBiaXQgbWFzayBzcGVjaWZ5aW5nIHRoZSBiaXQgdXNlZCB0bw0KICogc2V0IHRoZSB3YXRjaGRvZydzIG9wZXJhdGluZyBtb2RlIHdpdGhpbiB0aGUgd2F0aGNkb2cncyBXRE9HQ09OVFJPTCByZWdpc3Rlci4NCiAqLw0KI2RlZmluZSBNU1NfV0RPR19DVFJMX01PREVfQklUX01BU0sgICAgICAgICAgICh1aW50MzJfdCkweDAwMDAwMDA0VQ0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKg0KICogVGhlIE1TU19XRE9HX1RJTUVPVVRfSVJRX0VOQUJMRV9CSVRfTUFTSyBtYWNybyBpcyBhIGJpdCBtYXNrIHNwZWNpZnlpbmcgdGhlIGJpdA0KICogdXNlZCB0byBlbmFibGUgdGhlIHRpbWUgb3V0IGludGVycnVwdCB3aXRoaW4gdGhlIHdhdGNoZG9nJ3MgV0RPR0NPTlRST0wNCiAqIHJlZ2lzdGVyLg0KICovDQojZGVmaW5lIE1TU19XRE9HX1RJTUVPVVRfSVJRX0VOQUJMRV9CSVRfTUFTSyAgKHVpbnQzMl90KTB4MDAwMDAwMDFVDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqDQogIFRoZSBNU1NfV0RPR19XQUtFVVBfSVJRX0VOQUJMRV9CSVRfTUFTSyBtYWNybyBpcyBhIGJpdCBtYXNrIHNwZWNpZnlpbmcgdGhlIGJpdA0KICB1c2VkIHRvIGVuYWJsZSB0aGUgd2FrZSB1cCBpbnRlcnJ1cHQgd2l0aGluIHRoZSB3YXRjaGRvZydzIFdET0dDT05UUk9MDQogIHJlZ2lzdGVyLg0KICovDQojZGVmaW5lIE1TU19XRE9HX1dBS0VVUF9JUlFfRU5BQkxFX0JJVF9NQVNLICAgKHVpbnQzMl90KTB4MDAwMDAwMDJVDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqDQogIFRoZSBNU1NfV0RPR19USU1FT1VUX0lSUV9DTEVBUl9CSVRfTUFTSyBtYWNybyBpcyBhIGJpdCBtYXNrIHNwZWNpZnlpbmcgdGhlIGJpdA0KICB1c2VkIHRvIGNsZWFyIHRoZSB0aW1lIG91dCBpbnRlcnJ1cHQgd2l0aGluIHRoZSB3YXRjaGRvZydzIFdET0dSSVMgcmVnaXN0ZXIuDQogKi8NCiNkZWZpbmUgTVNTX1dET0dfVElNRU9VVF9JUlFfQ0xFQVJfQklUX01BU0sgICAodWludDMyX3QpMHgwMDAwMDAwMVUNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioNCiAgVGhlIE1TU19XRE9HX1dBS0VVUF9JUlFfQ0xFQVJfQklUX01BU0sgbWFjcm8gaXMgYSBiaXQgbWFzayBzcGVjaWZ5aW5nIHRoZSBiaXQNCiAgdXNlZCB0byBjbGVhciB0aGUgd2FrZSB1cCBpbnRlcnJ1cHQgd2l0aGluIHRoZSB3YXRjaGRvZydzIFdET0dSSVMgcmVnaXN0ZXIuDQogKi8NCiNkZWZpbmUgTVNTX1dET0dfV0FLRVVQX0lSUV9DTEVBUl9CSVRfTUFTSyAgICAodWludDMyX3QpMHgwMDAwMDAwMlUNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioNCiAgVGhlIE1TU19XRE9HX1JFRlJFU0hfS0VZIG1hY3JvIGhvbGRzIHRoZSBtYWdpYyB2YWx1ZSB3aGljaCB3aWxsIGNhdXNlIGEgcmVsb2FkDQogIG9mIHRoZSB3YXRjaGRvZydzIGRvd24gY291bnRlciB3aGVuIHdyaXR0ZW4gdG8gdGhlIHdhdGNoZG9nJ3MgV0RPR1JFRlJFU0gNCiAgcmVnaXN0ZXIuDQogKi8NCiNkZWZpbmUgTVNTX1dET0dfUkVGUkVTSF9LRVkgICAgKHVpbnQzMl90KTB4QUMxNURFNDJVDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqDQogIFRoZSBNU1NfV0RPR19ESVNBQkxFX0tFWSBtYWNybyBob2xkcyB0aGUgbWFnaWMgdmFsdWUgd2hpY2ggd2lsbCBkaXNhYmxlIHRoZQ0KICB3YXRjaGRvZyBpZiB3cml0dGVuIHRvIHRoZSB3YXRjaGRvZydzIFdET0dFTkFCTEUgcmVnaXN0ZXIuDQogKi8NCiNkZWZpbmUgTVNTX1dET0dfRElTQUJMRV9LRVkgICAgKHVpbnQzMl90KTB4NEM2RTU1RkFVDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqDQogIFRoZSBNU1NfV0RfaW5pdCgpIGZ1bmN0aW9uIGluaXRpYWxpemVzIGFuZCBjb25maWd1cmVzIHRoZSB3YXRjaGRvZyB0aW1lci4NCiANCiAgQHBhcmFtIGxvYWRfdmFsdWUNCiAgICBUaGUgbG9hZF92YWx1ZSBwYXJhbWV0ZXIgc3BlY2lmaWVzIHRoZSB2YWx1ZSB0aGF0IHdpbGwgYmUgbG9hZGVkIGludG8gdGhlDQogICAgd2F0Y2hkb2cncyBkb3duIGNvdW50ZXIgd2hlbiB0aGUgcmVsb2FkIGNvbW1hbmQgaXMgaXNzdWVkIHRocm91Z2ggYSBjYWxsIHRvDQogICAgTVNTX1dEX3JlbG9hZCgpLg0KICAgICAgICAgICAgICAgICAgIA0KICBAcGFyYW0gcmVsb2FkX3dpbmRvdw0KICAgIFRoZSByZWxvYWRfd2luZG93IHBhcmFtZXRlciBzcGVjaWZpZXMgdGhlIHRpbWUgd2luZG93IGR1cmluZyB3aGljaCBhIHJlbG9hZA0KICAgIG9mIHRoZSB3YXRjaGRvZyBjb3VudGVyIGlzIGFsbG93ZWQuIEEgcmVsb2FkIG9mIHRoZSB3YXRjaGRvZyBjb3VudGVyIHNob3VsZA0KICAgIG9ubHkgYmUgcGVyZm9ybWVkIHdoZW4gdGhlIHdhdGNoZG9nIGNvdW50ZXIgdmFsdWUgaXMgYmVsb3cgdGhlIHZhbHVlIG9mIHRoZQ0KICAgIHJlbG9hZF93aW5kb3cuIFJlbG9hZGluZyB0aGUgd2F0Y2hkb2cgZG93biBjb3VudGVyIHZhbHVlIGJlZm9yZSBpdCBoYXMNCiAgICByZWFjaGVkIHRoZSByZWxvYWRfd2luZG93IHdpbGwgcmVzdWx0IGluIGFuIGludGVycnVwdCBvciByZXNldCBkZXBlbmRpbmcgb24NCiAgICB0aGUgd2F0Y2hkb2cncyBtb2RlLg0KICAgIFRoZSByZWxvYWQgd2luZG93IGNhbiBiZSBkaXNhYmxlZCBieSB1c2luZyBXRE9HX05PX1dJTkRPVyBmb3IgdGhpcyBwYXJhbWV0ZXIuDQogDQogIEBwYXJhbSBtb2RlDQogICAgVGhlIG1vZGUgcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgd2F0Y2hkb2cncyBvcGVyYXRpbmcgbW9kZS4gSXQgY2FuIGJlIGVpdGhlcg0KICAgIE1TU19XRE9HX1JFU0VUX09OX1RJTUVPVVRfTU9ERSBvciBNU1NfV0RPR19JTlRFUlJVUFRfT05fVElNRU9VVF9NT0RFLg0KICAgIE1TU19XRE9HX1JFU0VUX09OX1RJTUVPVVRfTU9ERTogYSByZXNldCB3aWxsIG9jY3VyIGlmIHRoZSB3YXRjaGRvZyB0aW1lcg0KICAgIGV4cGlyZXMuDQogICAgTVNTX1dET0dfSU5URVJSVVBUX09OX1RJTUVPVVRfTU9ERTogYW4gTk1JIGludGVycnVwdCB3aWxsIG9jY3VyIGlmIHRoZQ0KICAgIHdhdGNoZG9nIHRpbWVyIGV4cGlyZXMuDQogDQogIEByZXR1cm4NCiAgICBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHJldHVybiBhIHZhbHVlLg0KICovDQpzdGF0aWMgX19JTkxJTkUgdm9pZCBNU1NfV0RfaW5pdA0KKA0KICAgIHVpbnQzMl90IGxvYWRfdmFsdWUsDQogICAgdWludDMyX3QgcmVsb2FkX3dpbmRvdywNCiAgICB1aW50MzJfdCBtb2RlDQopDQp7DQogICAgLyogRGlzYWJsZSBpbnRlcnJ1cHRzLiAqLw0KICAgIFdBVENIRE9HLT5XRE9HQ09OVFJPTCAmPSB+KE1TU19XRE9HX1RJTUVPVVRfSVJRX0VOQUJMRV9CSVRfTUFTSyB8IE1TU19XRE9HX1dBS0VVUF9JUlFfQ0xFQVJfQklUX01BU0spOw0KICAgIA0KICAgIC8qIENsZWFyIGFueSBleGlzdGluZyBpbnRlcnJ1cHRzLiAqLw0KICAgIFdBVENIRE9HLT5XRE9HUklTID0gTVNTX1dET0dfVElNRU9VVF9JUlFfQ0xFQVJfQklUX01BU0sgfCBNU1NfV0RPR19XQUtFVVBfSVJRX0NMRUFSX0JJVF9NQVNLOw0KICAgIA0KICAgIC8qIENvbmZpZ3VyZSB3YXRjaGRvZyB3aXRoIG5ldyBjb25maWd1cmF0aW9uIHBhc3NlZCBhcyBwYXJhbWV0ZXIuICovDQogICAgV0FUQ0hET0ctPldET0dNVlJQID0gTVNTX1dET0dfTk9fV0lORE9XOw0KICAgIFdBVENIRE9HLT5XRE9HTE9BRCA9IGxvYWRfdmFsdWU7DQogICAgV0FUQ0hET0ctPldET0dDT05UUk9MID0gKFdBVENIRE9HLT5XRE9HQ09OVFJPTCAmIH5NU1NfV0RPR19DVFJMX01PREVfQklUX01BU0spIHwgKG1vZGUgJiBNU1NfV0RPR19DVFJMX01PREVfQklUX01BU0spOw0KICAgIA0KICAgIC8qIFJlbG9hZCB3YXRjaGRvZyB3aXRoIG5ldyBsb2FkIHZhbHVlLiAqLw0KICAgIFdBVENIRE9HLT5XRE9HUkVGUkVTSCA9IE1TU19XRE9HX1JFRlJFU0hfS0VZOw0KICAgIA0KICAgIC8qIFNldCBhbGxvd2VkIHdpbmRvdy4gKi8NCiAgICBXQVRDSERPRy0+V0RPR01WUlAgPSByZWxvYWRfd2luZG93Ow0KfQ0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKg0KICBUaGUgTVNTX1dEX3JlbG9hZCgpIGZ1bmN0aW9uIGNhdXNlcyB0aGUgd2F0Y2hkb2cgdG8gcmVsb2FkIGl0cyBkb3duIGNvdW50ZXIgdGltZXINCiAgd2l0aCB0aGUgbG9hZCB2YWx1ZSBjb25maWd1cmVkIHRocm91Z2ggdGhlIGNhbGwgdG8gV0RfaW5pdCgpLiBUaGlzIGZ1bmN0aW9uIA0KICBtdXN0IGJlIGNhbGxlZCByZWd1bGFybHkgdG8gYXZvaWQgYSBzeXN0ZW0gcmVzZXQuDQogDQogIEByZXR1cm4NCiAgICBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHJldHVybiBhIHZhbHVlLg0KICovDQpzdGF0aWMgX19JTkxJTkUgdm9pZCBNU1NfV0RfcmVsb2FkKCB2b2lkICkNCnsNCiAgICBXQVRDSERPRy0+V0RPR1JFRlJFU0ggPSBNU1NfV0RPR19SRUZSRVNIX0tFWTsNCn0NCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioNCiAgVGhlIE1TU19XRF9kaXNhYmxlKCkgZnVuY3Rpb24gZGlzYWJsZXMgdGhlIHdhdGNoZG9nLg0KICBQbGVhc2Ugbm90ZSB0aGF0IHRoZSB3YXRjaGRvZyBjYW4gb25seSBiZSByZWVuYWJsZWQgYXMgYSByZXN1bHQgb2YgYSBwb3dlci1vbg0KICByZXNldC4NCiANCiAgQHJldHVybg0KICAgIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmV0dXJuIGEgdmFsdWUuDQogKi8NCnN0YXRpYyBfX0lOTElORSB2b2lkIE1TU19XRF9kaXNhYmxlKCB2b2lkICkNCnsNCiAgICBXQVRDSERPRy0+V0RPR0VOQUJMRSA9IE1TU19XRE9HX0RJU0FCTEVfS0VZOw0KfQ0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKg0KICBUaGUgTVNTX1dEX2N1cnJlbnRfdmFsdWUoKSBmdW5jdGlvbiByZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSB3YXRjaGRvZydzDQogIGRvd24gY291bnRlci4NCiANCiAgQHJldHVybg0KICAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgd2F0Y2hkb2cgZG93biBjb3VudGVyLg0KICovDQpzdGF0aWMgX19JTkxJTkUgdWludDMyX3QgTVNTX1dEX2N1cnJlbnRfdmFsdWUoIHZvaWQgKQ0Kew0KICAgIHJldHVybiBXQVRDSERPRy0+V0RPR1ZBTFVFOw0KfQ0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKg0KICBUaGUgTVNTX1dEX3N0YXR1cygpIGZ1bmN0aW9uIHJldHVybnMgdGhlIHN0YXR1cyBvZiB0aGUgd2F0Y2hkb2cuDQogDQogIEByZXR1cm4gDQogICAgVGhlIE1TU19XRF9zdGF0dXMoKSBmdW5jdGlvbiByZXR1cm5zIHRoZSBzdGF0dXMgb2YgdGhlIHdhdGNoZG9nLiBBIHZhbHVlIG9mDQogICAgMCBpbmRpY2F0ZXMgdGhhdCB3YXRjaGRvZyBjb3VudGVyIGhhcyByZWFjaGVkIHRoZSBmb3JiaWRkZW4gd2luZG93IGFuZCB0aGF0DQogICAgYSByZWxvYWQgc2hvdWxkIG5vdCBiZSBkb25lLiBBIHZhbHVlIG9mIDEgaW5kaWNhdGVzIHRoYXQgdGhlIHdhdGNoZG9nIGNvdW50ZXINCiAgICBpcyB3aXRoaW4gdGhlIHBlcm1pdHRlZCB3aW5kb3cgYW5kIHRoYXQgYSByZWxvYWQgaXMgYWxsb3dlZC4NCiAqLw0Kc3RhdGljIF9fSU5MSU5FIHVpbnQzMl90IE1TU19XRF9zdGF0dXMoIHZvaWQgKQ0Kew0KICAgIHJldHVybiBXQVRDSERPRy0+V0RPR1NUQVRVUzsNCn0NCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioNCiAgVGhlIE1TU19XRF9lbmFibGVfdGltZW91dF9pcnEoKSBmdW5jdGlvbiBlbmFibGVzIHRoZSB3YXRjaGRvZ5JzIHRpbWUgb3V0DQogIGludGVycnVwdCB3aGljaCBpcyBjb25uZWN0ZWQgdG8gdGhlIENvcnRleC1NMyBOTUkgaW50ZXJydXB0Lg0KICBUaGUgTk1JX0hhbmRsZXIoKSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aGVuIGEgd2F0Y2hkb2cgdGltZSBvdXQgb2NjdXJzLiBZb3UNCiAgbXVzdCBwcm92aWRlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTk1JX0hhbmRsZXIoKSBmdW5jdGlvbiB0byBzdWl0IHlvdXINCiAgYXBwbGljYXRpb24uDQogDQogIEByZXR1cm4NCiAgICBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHJldHVybiBhIHZhbHVlLg0KIA0KICBFeGFtcGxlOg0KICBAY29kZQ0KICAjaW5jbHVkZSAibXNzX3dhdGNoZG9nLmgiDQogIGludCBtYWluKCB2b2lkICkNCiAgew0KICAgICAgTVNTX1dEX2luaXQoIDB4MTAwMDAwMDAsIE1TU19XRE9HX05PX1dJTkRPVywgTVNTX1dET0dfSU5URVJSVVBUX09OX1RJTUVPVVRfTU9ERSApOw0KICAgICAgTVNTX1dEX2VuYWJsZV90aW1lb3V0X2lycSgpOw0KICAgICAgZm9yICg7OykNCiAgICAgIHsNCiAgICAgICAgICBtYWluX3Rhc2soKTsNCiAgICAgIH0NCiAgfQ0KIA0KICB2b2lkIE5NSV9IYW5kbGVyKCB2b2lkICkNCiAgew0KICAgICAgcHJvY2Vzc190aW1lb3V0KCk7DQogICAgICBNU1NfV0RfY2xlYXJfdGltZW91dF9pcnEoKTsNCiAgfQ0KICBAZW5kY29kZQ0KICovDQpzdGF0aWMgX19JTkxJTkUgdm9pZCBNU1NfV0RfZW5hYmxlX3RpbWVvdXRfaXJxKCB2b2lkICkNCnsNCiAgICBXQVRDSERPRy0+V0RPR0NPTlRST0wgfD0gTVNTX1dET0dfVElNRU9VVF9JUlFfRU5BQkxFX0JJVF9NQVNLOw0KfQ0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKg0KICBUaGUgV0RfZGlzYWJsZV90aW1lb3V0X2lycSgpIGZ1bmN0aW9uIGRpc2FibGVzIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBOTUkNCiAgaW50ZXJydXB0IHdoZW4gdGhlIHdhdGNoZG9nIHRpbWVzIG91dC4NCiANCiAgQHJldHVybg0KICAgIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmV0dXJuIGEgdmFsdWUuDQogKi8NCnN0YXRpYyBfX0lOTElORSB2b2lkIE1TU19XRF9kaXNhYmxlX3RpbWVvdXRfaXJxKCB2b2lkICkNCnsNCiAgICBXQVRDSERPRy0+V0RPR0NPTlRST0wgJj0gfk1TU19XRE9HX1RJTUVPVVRfSVJRX0VOQUJMRV9CSVRfTUFTSzsNCn0NCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioNCiAgVGhlIE1TU19XRF9lbmFibGVfd2FrZXVwX2lycSgpIGZ1bmN0aW9uIGVuYWJsZXMgdGhlIFNtYXJ0RnVzaW9uIHdha2V1cA0KICBpbnRlcnJ1cHQuIFRoZSBXZG9nV2FrZXVwX0lSUUhhbmRsZXIoKSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aGVuIGEgd2FrZSB1cA0KICBpbnRlcnJ1cHQgb2NjdXJzLiBZb3UgbXVzdCBwcm92aWRlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgV2RvZ1dha2V1cF9JUlFIYW5kbGVyKCkNCiAgZnVuY3Rpb24gdG8gc3VpdCB5b3VyIGFwcGxpY2F0aW9uLg0KIA0KICBAcmV0dXJuDQogICAgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZS4NCiANCiAgRXhhbXBsZToNCiAgQGNvZGUNCiAgI2luY2x1ZGUgIm1zc193YXRjaGRvZy5oIg0KICBpbnQgbWFpbiggdm9pZCApDQogIHsNCiAgICAgIE1TU19XRF9pbml0KCAweDEwMDAwMDAwLCBNU1NfV0RPR19OT19XSU5ET1csIE1TU19XRE9HX0lOVEVSUlVQVF9PTl9USU1FT1VUX01PREUgKTsNCiAgICAgIE1TU19XRF9lbmFibGVfd2FrZXVwX2lycSgpOw0KICAgICAgZm9yICg7OykNCiAgICAgIHsNCiAgICAgICAgICBtYWluX3Rhc2soKTsNCiAgICAgICAgICBjb3J0ZXhfc2xlZXAoKTsNCiAgICAgIH0NCiAgfQ0KIA0KICB2b2lkIFdkb2dXYWtldXBfSVJRSGFuZGxlciggdm9pZCApDQogIHsNCiAgICAgIHByb2Nlc3Nfd2FrZXVwKCk7DQogICAgICBNU1NfV0RfY2xlYXJfd2FrZXVwX2lycSgpOw0KICB9DQogIEBlbmRjb2RlDQogKi8NCnN0YXRpYyBfX0lOTElORSB2b2lkIE1TU19XRF9lbmFibGVfd2FrZXVwX2lycSggdm9pZCApDQp7DQogICAgV0FUQ0hET0ctPldET0dDT05UUk9MIHw9IE1TU19XRE9HX1dBS0VVUF9JUlFfRU5BQkxFX0JJVF9NQVNLOw0KICAgIE5WSUNfRW5hYmxlSVJRKCBXZG9nV2FrZXVwX0lSUW4gKTsNCn0NCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioNCiAgVGhlIE1TU19XRF9kaXNhYmxlX3dha2V1cF9pcnEoKSBmdW5jdGlvbiBkaXNhYmxlcyB0aGUgU21hcnRGdXNpb24gd2FrZXVwDQogIGludGVycnVwdC4gDQogDQogIEByZXR1cm4NCiAgICBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHJldHVybiBhIHZhbHVlLg0KICovDQpzdGF0aWMgX19JTkxJTkUgdm9pZCBNU1NfV0RfZGlzYWJsZV93YWtldXBfaXJxKCB2b2lkICkNCnsNCiAgICBXQVRDSERPRy0+V0RPR0NPTlRST0wgJj0gfk1TU19XRE9HX1dBS0VVUF9JUlFfRU5BQkxFX0JJVF9NQVNLOw0KfQ0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKg0KICBUaGUgTVNTX1dEX2NsZWFyX3RpbWVvdXRfaXJxKCkgZnVuY3Rpb24gY2xlYXJzIHRoZSB3YXRjaGRvZ5JzIHRpbWUgb3V0DQogIGludGVycnVwdCB3aGljaCBpcyBjb25uZWN0ZWQgdG8gdGhlIENvcnRleC1NMyBOTUkgaW50ZXJydXB0Lg0KICBDYWxsaW5nIE1TU19XRF9jbGVhcl90aW1lb3V0X2lycSgpIHJlc3VsdHMgaW4gY2xlYXJpbmcgdGhlIENvcnRleC1NMyBOTUkgaW50ZXJydXB0Lg0KICBOb3RlOiBUaGUgTVNTX1dEX2NsZWFyX3RpbWVvdXRfaXJxKCkgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYXMgcGFydCBvZiB0aGUNCiAgdGltZW91dCBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lIChJU1IpIGluIG9yZGVyIHRvIHByZXZlbnQgdGhlIHNhbWUgaW50ZXJydXB0DQogIGV2ZW50IHJldHJpZ2dlcmluZyBhIGNhbGwgdG8gdGhlIHdha2V1cCBJU1IuDQogDQogIEByZXR1cm4NCiAgICBUaGUgZXhhbXBsZSBiZWxvdyBkZW1vbnN0cmF0ZXMgdGhlIHVzZSBvZiB0aGUgTVNTX1dEX2NsZWFyX3RpbWVvdXRfaXJxKCkNCiAgICBmdW5jdGlvbiBhcyBwYXJ0IG9mIHRoZSBOTUkgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZS4NCg0KICAgIEV4YW1wbGU6DQogIEBjb2RlDQogIHZvaWQgTk1JX0hhbmRsZXIoIHZvaWQgKQ0KICB7DQogICAgICBwcm9jZXNzX3RpbWVvdXQoKTsNCiAgICAgIE1TU19XRF9jbGVhcl90aW1lb3V0X2lycSgpOw0KICB9DQogIEBlbmRjb2RlDQogKi8NCnN0YXRpYyBfX0lOTElORSB2b2lkIE1TU19XRF9jbGVhcl90aW1lb3V0X2lycSggdm9pZCApDQp7DQogICAgV0FUQ0hET0ctPldET0dSSVMgPSBNU1NfV0RPR19USU1FT1VUX0lSUV9DTEVBUl9CSVRfTUFTSzsNCiAgICAvKg0KICAgICAqIFBlcmZvcm0gYSBzZWNvbmQgd3JpdGUgdG8gZW5zdXJlIHRoYXQgdGhlIGZpcnN0IHdyaXRlIGNvbXBsZXRlZCBiZWZvcmUgDQogICAgICogcmV0dXJuaW5nIGZyb20gdGhpcyBmdW5jdGlvbi4gVGhpcyBpcyB0byBhY2NvdW50IGZvciBwb3N0ZWQgd3JpdGVzIGFjcm9zcw0KICAgICAqIHRoZSBBSEIgbWF0cml4LiBUaGUgc2Vjb25kIHdyaXRlIGVuc3VyZXMgdGhhdCB0aGUgZmlyc3Qgd3JpdGUgaGFzDQogICAgICogY29tcGxldGVkIGFuZCB0aGF0IHRoZSBpbnRlcnJ1cHQgbGluZSBoYXMgYmVlbiBkZS1hc3NlcnRlZCBieSB0aGUgdGltZQ0KICAgICAqIHRoZSBmdW5jdGlvbiByZXR1cm5zLiBPbWl0dGluZyB0aGUgc2Vjb25kIHdyaXRlIG1heSByZXN1bHQgaW4gYSBkZWxheQ0KICAgICAqIGluIHRoZSBkZS1hc3NlcnRpb24gb2YgdGhlIGludGVycnVwdCBsaW5lIGdvaW5nIHRvIHRoZSBDb3J0ZXgtTTMgYW5kIGENCiAgICAgKiByZXRyaWdnZXJpbmcgb2YgdGhlIGludGVycnVwdC4NCiAgICAgKi8NCiAgICBXQVRDSERPRy0+V0RPR1JJUyA9IE1TU19XRE9HX1RJTUVPVVRfSVJRX0NMRUFSX0JJVF9NQVNLOw0KfQ0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKg0KICBUaGUgTVNTX1dEX2NsZWFyX3dha2V1cF9pcnEoKSBmdW5jdGlvbiBjbGVhcnMgdGhlIHdha2V1cCBpbnRlcnJ1cHQuDQogIE5vdGU6IFRoZSBNU1NfV0RfY2xlYXJfd2FrZXVwX2lycSgpIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGFzIHBhcnQgb2YgdGhlDQogIHdha2V1cCBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lIChJU1IpIGluIG9yZGVyIHRvIHByZXZlbnQgdGhlIHNhbWUgaW50ZXJydXB0DQogIGV2ZW50IHJldHJpZ2dlcmluZyBhIGNhbGwgdG8gdGhlIHdha2V1cCBJU1IuIFRoaXMgZnVuY3Rpb24gYWxzbyBjbGVhcnMgdGhlDQogIGludGVycnVwdCBpbiB0aGUgQ29ydGV4LU0zIGludGVycnVwdCBjb250cm9sbGVyIHRocm91Z2ggYSBjYWxsIHRvDQogIE5WSUNfQ2xlYXJQZW5kaW5nSVJRKCkuDQogDQogIEByZXR1cm4NCiAgICBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHJldHVybiBhIHZhbHVlLg0KDQogICAgRXhhbXBsZToNCiAgICBUaGUgZXhhbXBsZSBiZWxvdyBkZW1vbnN0cmF0ZXMgdGhlIHVzZSBvZiB0aGUgTVNTX1dEX2NsZWFyX3dha2V1cF9pcnEoKSBmdW5jdGlvbg0KICAgIGFzIHBhcnQgb2YgdGhlIHdha2V1cCBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lLiAgDQogICAgQGNvZGUNCiAgICB2b2lkIFdkb2dXYWtldXBfSVJRSGFuZGxlciggdm9pZCApDQogICAgew0KICAgICAgICBkb19pbnRlcnJ1cHRfcHJvY2Vzc2luZygpOw0KICAgICAgICANCiAgICAgICAgTVNTX1dEX2NsZWFyX3dha2V1cF9pcnEoKTsNCiAgICB9DQogICAgQGVuZGNvZGUNCiovDQpzdGF0aWMgX19JTkxJTkUgdm9pZCBNU1NfV0RfY2xlYXJfd2FrZXVwX2lycSggdm9pZCApDQp7DQogICAgV0FUQ0hET0ctPldET0dSSVMgPSBNU1NfV0RPR19XQUtFVVBfSVJRX0NMRUFSX0JJVF9NQVNLOw0KICAgIE5WSUNfQ2xlYXJQZW5kaW5nSVJRKCBXZG9nV2FrZXVwX0lSUW4gKTsNCn0NCiNpZmRlZiBfX2NwbHVzcGx1cw0KfQ0KI2VuZGlmDQoNCiNlbmRpZiAvKiBNU1NfV0FUQ0hET0dfSF8gKi8NCg==