LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoqIENvcHlyaWdodCAoQykgMjAxNiBieSBTYXZvaXItZmFpcmUgTGludXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCiogQXV0aG9yOiBK5GdlciBOaWNvbGFzIDxuaWNvbGFzLmphZ2VyQHNhdm9pcmZhaXJlbGludXguY29tPiAgICAgICAgICAgICAgKg0KKiBBdXRob3I6IFRyYWN6eWsgQW5kcmVhcyA8YW5kcmVhcy50cmFjenlrQHNhdm9pcmZhaXJlbGludXguY29tPiAgICAgICAgICAqDQoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCiogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICAgKg0KKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgICAqDQoqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAgICoNCiogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQoqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAgICoNCiogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICAgKg0KKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgICAqDQoqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgICAqDQoqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgICoNCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KI3ByYWdtYSBvbmNlDQoNCnVzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpVSTo6WGFtbDsNCnVzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpBcHBsaWNhdGlvbk1vZGVsOjpDb3JlOw0KdXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OkRldmljZXM6OkVudW1lcmF0aW9uOw0KdXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6Ok1lZGlhOjpDYXB0dXJlOw0KdXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OkZvdW5kYXRpb247DQp1c2luZyBuYW1lc3BhY2UgQ29uY3VycmVuY3k7DQoNCm5hbWVzcGFjZSBSaW5nQ2xpZW50VVdQDQp7DQoNCmRlbGVnYXRlIHZvaWQgU3RhcnRQcmV2aWV3aW5nKCk7DQpkZWxlZ2F0ZSB2b2lkIFN0b3BQcmV2aWV3aW5nKCk7DQpkZWxlZ2F0ZSBXaW5kb3dzOjpVSTo6WGFtbDo6Q29udHJvbHM6OkNhcHR1cmVFbGVtZW50XiBHZXRTaW5rKCk7DQoNCm5hbWVzcGFjZSBWaWRlbw0Kew0KDQpwdWJsaWMgcmVmIGNsYXNzIFZpZGVvQ2FwdHVyZU1hbmFnZXIgc2VhbGVkDQp7DQppbnRlcm5hbDoNCiAgICBwcm9wZXJ0eSBib29sIGlzUHJldmlld2luZw0KICAgIHsNCiAgICAgICAgYm9vbCBnZXQoKSB7IHJldHVybiBpc1ByZXZpZXdpbmdfOyB9DQogICAgICAgIHZvaWQgc2V0KGJvb2wgdmFsdWUpIHsgaXNQcmV2aWV3aW5nXyA9IHZhbHVlOyB9DQogICAgfQ0KDQogICAgTWFwPFN0cmluZ14sU3RyaW5nXj5eIGdldFNldHRpbmdzKFN0cmluZ14gZGV2aWNlKTsNCg0KICAgIFZpZGVvQ2FwdHVyZU1hbmFnZXIoKTsNCg0KICAgIFdpbmRvd3M6OkdyYXBoaWNzOjpEaXNwbGF5OjpEaXNwbGF5SW5mb3JtYXRpb25eIGRpc3BsYXlJbmZvcm1hdGlvbjsNCiAgICBXaW5kb3dzOjpHcmFwaGljczo6RGlzcGxheTo6RGlzcGxheU9yaWVudGF0aW9ucyBkaXNwbGF5T3JpZW50YXRpb247DQoNCiAgICBXaW5kb3dzOjpTeXN0ZW06OkRpc3BsYXk6OkRpc3BsYXlSZXF1ZXN0XiBkaXNwbGF5UmVxdWVzdDsNCg0KICAgIGNvbnN0IEdVSUQgUm90YXRpb25LZXk7DQoNCiAgICBib29sIGV4dGVybmFsQ2FtZXJhOw0KICAgIGJvb2wgbWlycm9yaW5nUHJldmlldzsNCiAgICBib29sIGlzSW5pdGlhbGl6ZWQ7DQogICAgYm9vbCBpc0NoYW5naW5nQ2FtZXJhOw0KICAgIGJvb2wgaXNSZW5kZXJpbmc7DQoNCiAgICBWZWN0b3I8RGV2aWNlXj5eIGRldmljZUxpc3Q7DQogICAgRGV2aWNlXiBhY3RpdmVEZXZpY2U7DQoNCiAgICBEZXZpY2VJbmZvcm1hdGlvbkNvbGxlY3Rpb25eIGRldkluZm9Db2xsZWN0aW9uOw0KDQogICAgUGxhdGZvcm06OkFnaWxlPFdpbmRvd3M6Ok1lZGlhOjpDYXB0dXJlOjpNZWRpYUNhcHR1cmVePiBtZWRpYUNhcHR1cmU7DQoNCiAgICB0YXNrPHZvaWQ+IEluaXRpYWxpemVDYW1lcmFBc3luYygpOw0KICAgIHRhc2s8dm9pZD4gU3RhcnRQcmV2aWV3QXN5bmMoKTsNCiAgICB0YXNrPHZvaWQ+IFN0b3BQcmV2aWV3QXN5bmMoKTsNCiAgICB0YXNrPHZvaWQ+IEVudW1lcmF0ZVdlYmNhbXNBc3luYygpOw0KICAgIHRhc2s8dm9pZD4gQ2xlYW51cENhbWVyYUFzeW5jKCk7DQoNCiAgICAvLyBldmVudCB0b2tlbnMNCiAgICBFdmVudFJlZ2lzdHJhdGlvblRva2VuIG1lZGlhQ2FwdHVyZUZhaWxlZEV2ZW50VG9rZW47DQogICAgRXZlbnRSZWdpc3RyYXRpb25Ub2tlbiBkaXNwbGF5SW5mb3JtYXRpb25FdmVudFRva2VuOw0KICAgIEV2ZW50UmVnaXN0cmF0aW9uVG9rZW4gdmlzaWJpbGl0eUNoYW5nZWRFdmVudFRva2VuOw0KDQogICAgY2FuY2VsbGF0aW9uX3Rva2VuX3NvdXJjZSogY2FwdHVyZVRhc2tUb2tlblNvdXJjZTsNCg0KICAgIHZvaWQgTWVkaWFDYXB0dXJlX0ZhaWxlZChNZWRpYUNhcHR1cmUgXmN1cnJlbnRDYXB0dXJlT2JqZWN0LCBNZWRpYUNhcHR1cmVGYWlsZWRFdmVudEFyZ3NeIGVycm9yRXZlbnRBcmdzKTsNCiAgICB2b2lkIEFkZFZpZGVvRGV2aWNlKHVpbnQ4X3QgaW5kZXgpOw0KICAgIHZvaWQgU2V0Q2FwdHVyZVNldHRpbmdzKCk7DQoNCiAgICBEaXNwYXRjaGVyVGltZXJeIHZpZGVvRnJhbWVDb3B5SW52b2tlcjsNCiAgICB0YXNrPHZvaWQ+IENvcHlGcmFtZUFzeW5jKCk7DQogICAgdm9pZCBDb3B5RnJhbWUoT2JqZWN0XiBzZW5kZXIsIE9iamVjdF4gZSk7DQogICAgdm9pZCBJbml0aWFsaXplQ29weUZyYW1lRGlzcGF0Y2hlcigpOw0KDQogICAgZXZlbnQgU3RhcnRQcmV2aWV3aW5nXiBzdGFydFByZXZpZXdpbmc7DQogICAgZXZlbnQgU3RvcFByZXZpZXdpbmdeIHN0b3BQcmV2aWV3aW5nOw0KICAgIGV2ZW50IEdldFNpbmteIGdldFNpbms7DQoNCnByaXZhdGU6DQogICAgYm9vbCBpc1ByZXZpZXdpbmdfOw0KDQp9Ow0KDQp9IC8qIG5hbWVzcGFjZSBWaWRlbyAqLw0KfSAvKiBuYW1lc3BhY2UgUmluZ0NsaWVudFVXUCAqLw==