IyMjDQojID09PT09PT09PT09PUxJQ0VOU0VfU1RBUlQ9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiMgT05BUCBQb3J0YWwgU0RLDQojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiMgQ29weXJpZ2h0IKkgMjAxNyBBVCZUIEludGVsbGVjdHVhbCBQcm9wZXJ0eS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KIw0KIyBVbmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCwgYWxsIHNvZnR3YXJlIGNvbnRhaW5lZCBoZXJlaW4gaXMgbGljZW5zZWQNCiMgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIJNMaWNlbnNllCk7DQojIHlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KIyANCiMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCiMgDQojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQojDQojIFVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkLCBhbGwgZG9jdW1lbnRhdGlvbiBjb250YWluZWQgaGVyZWluIGlzIGxpY2Vuc2VkDQojIHVuZGVyIHRoZSBDcmVhdGl2ZSBDb21tb25zIExpY2Vuc2UsIEF0dHJpYnV0aW9uIDQuMCBJbnRsLiAodGhlIJNMaWNlbnNllCk7DQojIHlvdSBtYXkgbm90IHVzZSB0aGlzIGRvY3VtZW50YXRpb24gZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4NCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQojDQojICAgICAgICAgICAgIGh0dHBzOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS80LjAvDQojDQojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgZG9jdW1lbnRhdGlvbg0KIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCiMNCiMgPT09PT09PT09PT09TElDRU5TRV9FTkQ9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KIw0KIyBFQ09NUCBpcyBhIHRyYWRlbWFyayBhbmQgc2VydmljZSBtYXJrIG9mIEFUJlQgSW50ZWxsZWN0dWFsIFByb3BlcnR5Lg0KIyMjDQojIFByb3BlcnRpZXMgcmVhZCBieSBFQ09NUCBGcmFtZXdvcmsgbGlicmFyeSwgZWNvbXBGVy5qYXINCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMgVGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIHNob3VsZCBOT1QgYmUgY2hhbmdlZCBieSBwYXJ0bmVyIGFwcGxpY2F0aW9ucy4NCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCnBvcnRhbC5hcGkucHJlZml4ID0gL2FwaQ0KbWF4LmlkbGUudGltZSA9IDUNCnVzZXIuYXR0cmlidXRlLm5hbWUgPSB1c2VyX2F0dHJpYnV0ZQ0KDQojVXNlIFJFU1QgQVBJIGluc3RlYWQgb2YgVUVCIHRvIGZldGNoIHRoZSBmdW5jdGlvbmFsIG1lbnUgZGF0YQ0KdXNlX3Jlc3RfZm9yX2Z1bmN0aW9uYWxfbWVudT10cnVlDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojIFRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBNVVNUIGJlIGNoYW5nZWQgYnkgcGFydG5lciBhcHBsaWNhdGlvbnMuDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQojIE5hbWUgb2YgamF2YSBjbGFzcyB0aGF0IGltcGxlbWVudHMgdGhlIE9uQm9hcmRpbmdBcGlTZXJ2aWNlIGludGVyZmFjZS4NCnBvcnRhbC5hcGkuaW1wbC5jbGFzcyA9IG9yZy5vbmFwLnBvcnRhbGFwcC5zZXJ2aWNlLk9uQm9hcmRpbmdBcGlTZXJ2aWNlSW1wbA0KDQojIExvZyBPbiBmb3Igc2luZ2xlIHNpZ24gb24NCmVjb21wX3JlZGlyZWN0X3VybCA9IGh0dHA6Ly9wb3J0YWwuYXBpLnNpbXBsZWRlbW8ub25hcC5vcmc6ODk4OS9PTkFQUE9SVEFML2xvZ2luLmh0bQ0KDQojIFVSTCBvZiB0aGUgRUNPTVAgUG9ydGFsIFJFU1QgQVBJDQplY29tcF9yZXN0X3VybCA9IGh0dHA6Ly9wb3J0YWwuYXBpLnNpbXBsZWRlbW8ub25hcC5vcmc6ODk4OS9PTkFQUE9SVEFML2F1eGFwaQ0KDQojIEFwcGxpY2F0aW9ucyBkbyBub3QgbmVlZCB0byBydW4gYSBVRUIgbGlzdGVuZXIgYWZ0ZXIgMTYwNy4NCnVlYl9saXN0ZW5lcnNfZW5hYmxlID0gZmFsc2UNCg0KIyBVRUIgQ29uZmlndXJhdGlvbg0KIyBJbiByZWxlYXNlIDE2MDcsIGFsbCA2IGVudHJpZXMgYmVsb3cgd2VyZSByZXF1aXJlZC4NCiMgSW4gcmVsZWFzZSAxNjEwLCBpZiBrZXkgdWViX2xpc3RlbmVyc19lbmFibGUgaXMgc2V0IHRvIGZhbHNlLA0KIyB0aGVuIG9ubHkgdGhlIHVlYl9hcHBfa2V5IGlzIHJlcXVpcmVkLg0KIyBVRUIgc2VydmVycw0KI3VlYl91cmxfbGlzdCA9IHRvZG9fdWViX3VybF9saXN0DQojIEVDT01QIFBvcnRhbCBsaXN0ZW5zIG9uIHRoaXMgVUVCIHRvcGljDQojZWNvbXBfcG9ydGFsX2luYm94X25hbWUgPSBFQ09NUC1QT1JUQUwtSU5CT1gtREVWLUxPQ0FMDQoNCiMgUmVwbGFjZSB0aGVzZSAzIGRlZmF1bHQgdmFsdWVzIHdpdGggdGhlIG9uZXMgZm9yIHlvdXIgc3BlY2lmaWMgQXBwLA0KIyBhcyBzaG93biBvbiB0aGUgb24tYm9hcmRpbmcgcGFnZSBvbiB0aGUgRUNPTVAgUG9ydGFsIHdlYiBhcHBsaWNhdGlvbi4NCnVlYl9hcHBfa2V5ID0gb1ZHaWtJSUZqempVTnRwaA0KdWViX2FwcF9zZWNyZXQgPSA4eEpOUGNnS0pKZ0hoZmJ0aDZDMXlOM2UNCnVlYl9hcHBfbWFpbGJveF9uYW1lID0gRUNPTVAtUE9SVEFMLU9VVEJPWC1URVNULTc3NjIxDQojIENvbnN1bWVyIGdyb3VwIG5hbWUgZm9yIFVFQiB0b3BpYy4NCiMgVXNlIHRoZSBzcGVjaWFsIHRhZyB0byBnZW5lcmF0ZSBhIHVuaXF1ZSBvbmUgZm9yIGVhY2ggc2RrLWFwcCBzZXJ2ZXIuDQojdWViX2FwcF9jb25zdW1lcl9ncm91cF9uYW1lID0ge1VVSUR9DQoNCiNkZWNyeXB0aW9uX2tleQkJCQkgID0gQUdMRGRHNEQwNEJLbTJJeElXRXI4bz09DQo=