LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoqIENvcHlyaWdodCAoQykgMjAxNiBieSBTYXZvaXItZmFpcmUgTGludXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCiogQXV0aG9yOiBK5GdlciBOaWNvbGFzIDxuaWNvbGFzLmphZ2VyQHNhdm9pcmZhaXJlbGludXguY29tPiAgICAgICAgICAgICAgKg0KKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQoqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAgICoNCiogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAgKg0KKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgICAqDQoqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgICAqDQoqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAgICoNCiogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICAgKg0KKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCiogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICAgKg0KKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICAqDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCiNpbmNsdWRlICJwY2guaCINCg0KI2luY2x1ZGUgIkNhbGwuaCINCg0KdXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OkFwcGxpY2F0aW9uTW9kZWw6OkNvcmU7DQp1c2luZyBuYW1lc3BhY2UgUGxhdGZvcm07DQp1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OkNvcmU7DQoNCnVzaW5nIG5hbWVzcGFjZSBSaW5nQ2xpZW50VVdQOw0KDQpDYWxsOjpDYWxsKFN0cmluZ14gYWNjb3VudElkeiwgU3RyaW5nXiBjYWxsSWR6LCBTdHJpbmdeIGZyb216KQ0Kew0KICAgIHRoaXMtPmFjY291bnRJZCA9IGFjY291bnRJZHo7DQogICAgdGhpcy0+Y2FsbElkID0gY2FsbElkejsNCiAgICB0aGlzLT5mcm9tID0gZnJvbXo7DQoNCiAgICB0aGlzLT5zdGF0ZSA9ICJpbmNvbWluZyBjYWxsIjsNCiAgICB0aGlzLT5jb2RlID0gLTE7DQp9DQoNCnZvaWQgUmluZ0NsaWVudFVXUDo6Q2FsbDo6c3RhdGVDaGFuZ2UoU3RyaW5nIF4gc3RhdGUsIGludCBjb2RlKQ0Kew0KICAgIHRoaXMtPnN0YXRlID0gc3RhdGU7DQogICAgUHJvcGVydHlDaGFuZ2VkKHRoaXMsIHJlZiBuZXcgUHJvcGVydHlDaGFuZ2VkRXZlbnRBcmdzKCJzdGF0ZSIpKTsNCiAgICB0aGlzLT5jb2RlID0gY29kZTsNCn0NCg0Kdm9pZA0KQ2FsbDo6Tm90aWZ5UHJvcGVydHlDaGFuZ2VkKFN0cmluZ14gcHJvcGVydHlOYW1lKQ0Kew0KICAgIENvcmVBcHBsaWNhdGlvblZpZXdeIHZpZXcgPSBDb3JlQXBwbGljYXRpb246Ok1haW5WaWV3Ow0KICAgIHZpZXctPkNvcmVXaW5kb3ctPkRpc3BhdGNoZXItPlJ1bkFzeW5jKA0KICAgICAgICBDb3JlRGlzcGF0Y2hlclByaW9yaXR5OjpOb3JtYWwsDQogICAgICAgIHJlZiBuZXcgRGlzcGF0Y2hlZEhhbmRsZXIoW3RoaXMsIHByb3BlcnR5TmFtZV0oKQ0KICAgIHsNCiAgICAgICAgUHJvcGVydHlDaGFuZ2VkKHRoaXMsIHJlZiBuZXcgUHJvcGVydHlDaGFuZ2VkRXZlbnRBcmdzKHByb3BlcnR5TmFtZSkpOw0KDQogICAgfSkpOw0KfQ==