LyoNCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoqKg0KKiogIEZpbGUgICAgICAgIDogU1RNMzJMMTAwWEJfRkxBU0gubGQNCioqDQoqKiAgQWJzdHJhY3QgICAgOiBMaW5rZXIgc2NyaXB0IGZvciBTVE0zMkwxMDBYQiBEZXZpY2Ugd2l0aA0KKiogICAgICAgICAgICAgICAgMTI4S0J5dGUgRkxBU0gsIDEwS0J5dGUgUkFNDQoqKg0KKiogICAgICAgICAgICAgICAgU2V0IGhlYXAgc2l6ZSwgc3RhY2sgc2l6ZSBhbmQgc3RhY2sgbG9jYXRpb24gYWNjb3JkaW5nDQoqKiAgICAgICAgICAgICAgICB0byBhcHBsaWNhdGlvbiByZXF1aXJlbWVudHMuDQoqKg0KKiogICAgICAgICAgICAgICAgU2V0IG1lbW9yeSBiYW5rIGFyZWEgYW5kIHNpemUgaWYgZXh0ZXJuYWwgbWVtb3J5IGlzIHVzZWQuDQoqKg0KKiogIFRhcmdldCAgICAgIDogU1RNaWNyb2VsZWN0cm9uaWNzIFNUTTMyDQoqKg0KKiogIEVudmlyb25tZW50IDogQXRvbGxpYyBUcnVlU1RVRElPKFIpDQoqKg0KKiogIERpc3RyaWJ1dGlvbjogVGhlIGZpbGUgaXMgZGlzdHJpYnV0ZWQgk2FzIGlzLJQgd2l0aG91dCBhbnkgd2FycmFudHkNCioqICAgICAgICAgICAgICAgIG9mIGFueSBraW5kLg0KKioNCioqICAoYylDb3B5cmlnaHQgQXRvbGxpYyBBQi4NCioqICBZb3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMtaXMgb3IgbW9kaWZ5IGl0IGFjY29yZGluZyB0byB0aGUgbmVlZHMgb2YgeW91cg0KKiogIHByb2plY3QuIFRoaXMgZmlsZSBtYXkgb25seSBiZSBidWlsdCAoYXNzZW1ibGVkIG9yIGNvbXBpbGVkIGFuZCBsaW5rZWQpDQoqKiAgdXNpbmcgdGhlIEF0b2xsaWMgVHJ1ZVNUVURJTyhSKSBwcm9kdWN0LiBUaGUgdXNlIG9mIHRoaXMgZmlsZSB0b2dldGhlcg0KKiogIHdpdGggb3RoZXIgdG9vbHMgdGhhbiBBdG9sbGljIFRydWVTVFVESU8oUikgaXMgbm90IHBlcm1pdHRlZC4NCioqDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKi8NCg0KLyogRW50cnkgUG9pbnQgKi8NCkVOVFJZKFJlc2V0X0hhbmRsZXIpDQoNCi8qIEhpZ2hlc3QgYWRkcmVzcyBvZiB0aGUgdXNlciBtb2RlIHN0YWNrICovDQpfZXN0YWNrID0gMHgyMDAwMjdGRjsgICAgLyogZW5kIG9mIFJBTSAqLw0KDQovKiBHZW5lcmF0ZSBhIGxpbmsgZXJyb3IgaWYgaGVhcCBhbmQgc3RhY2sgZG9uJ3QgZml0IGludG8gUkFNICovDQpfTWluX0hlYXBfU2l6ZSA9IDB4MjAwOyAgICAgIC8qIHJlcXVpcmVkIGFtb3VudCBvZiBoZWFwICAqLw0KX01pbl9TdGFja19TaXplID0gMHg0MDA7IC8qIHJlcXVpcmVkIGFtb3VudCBvZiBzdGFjayAqLw0KDQovKiBTcGVjaWZ5IHRoZSBtZW1vcnkgYXJlYXMgKi8NCk1FTU9SWQ0Kew0KRkxBU0ggKHJ4KSAgICAgIDogT1JJR0lOID0gMHgwODAwMDAwMCwgTEVOR1RIID0gMTI4Sw0KUkFNICh4cncpICAgICAgIDogT1JJR0lOID0gMHgyMDAwMDAwMCwgTEVOR1RIID0gMTBLDQp9DQoNCi8qIERlZmluZSBvdXRwdXQgc2VjdGlvbnMgKi8NClNFQ1RJT05TDQp7DQogIC8qIFRoZSBzdGFydHVwIGNvZGUgZ29lcyBmaXJzdCBpbnRvIEZMQVNIICovDQogIC5pc3JfdmVjdG9yIDoNCiAgew0KICAgIC4gPSBBTElHTig0KTsNCiAgICBLRUVQKCooLmlzcl92ZWN0b3IpKSAvKiBTdGFydHVwIGNvZGUgKi8NCiAgICAuID0gQUxJR04oNCk7DQogIH0gPkZMQVNIDQoNCiAgLyogVGhlIHByb2dyYW0gY29kZSBhbmQgb3RoZXIgZGF0YSBnb2VzIGludG8gRkxBU0ggKi8NCiAgLnRleHQgOg0KICB7DQogICAgLiA9IEFMSUdOKDQpOw0KICAgICooLnRleHQpICAgICAgICAgICAvKiAudGV4dCBzZWN0aW9ucyAoY29kZSkgKi8NCiAgICAqKC50ZXh0KikgICAgICAgICAgLyogLnRleHQqIHNlY3Rpb25zIChjb2RlKSAqLw0KICAgICooLmdsdWVfNykgICAgICAgICAvKiBnbHVlIGFybSB0byB0aHVtYiBjb2RlICovDQogICAgKiguZ2x1ZV83dCkgICAgICAgIC8qIGdsdWUgdGh1bWIgdG8gYXJtIGNvZGUgKi8NCiAgICAqKC5laF9mcmFtZSkNCg0KICAgIEtFRVAgKCooLmluaXQpKQ0KICAgIEtFRVAgKCooLmZpbmkpKQ0KDQogICAgLiA9IEFMSUdOKDQpOw0KICAgIF9ldGV4dCA9IC47ICAgICAgICAvKiBkZWZpbmUgYSBnbG9iYWwgc3ltYm9scyBhdCBlbmQgb2YgY29kZSAqLw0KICB9ID5GTEFTSA0KDQogIC8qIENvbnN0YW50IGRhdGEgZ29lcyBpbnRvIEZMQVNIICovDQogIC5yb2RhdGEgOg0KICB7DQogICAgLiA9IEFMSUdOKDQpOw0KICAgICooLnJvZGF0YSkgICAgICAgICAvKiAucm9kYXRhIHNlY3Rpb25zIChjb25zdGFudHMsIHN0cmluZ3MsIGV0Yy4pICovDQogICAgKigucm9kYXRhKikgICAgICAgIC8qIC5yb2RhdGEqIHNlY3Rpb25zIChjb25zdGFudHMsIHN0cmluZ3MsIGV0Yy4pICovDQogICAgLiA9IEFMSUdOKDQpOw0KICB9ID5GTEFTSA0KDQogIC5BUk0uZXh0YWIgICA6IHsgKiguQVJNLmV4dGFiKiAuZ251LmxpbmtvbmNlLmFybWV4dGFiLiopIH0gPkZMQVNIDQogIC5BUk0gOiB7DQogICAgX19leGlkeF9zdGFydCA9IC47DQogICAgKiguQVJNLmV4aWR4KikNCiAgICBfX2V4aWR4X2VuZCA9IC47DQogIH0gPkZMQVNIDQoNCiAgLnByZWluaXRfYXJyYXkgICAgIDoNCiAgew0KICAgIFBST1ZJREVfSElEREVOIChfX3ByZWluaXRfYXJyYXlfc3RhcnQgPSAuKTsNCiAgICBLRUVQICgqKC5wcmVpbml0X2FycmF5KikpDQogICAgUFJPVklERV9ISURERU4gKF9fcHJlaW5pdF9hcnJheV9lbmQgPSAuKTsNCiAgfSA+RkxBU0gNCiAgLmluaXRfYXJyYXkgOg0KICB7DQogICAgUFJPVklERV9ISURERU4gKF9faW5pdF9hcnJheV9zdGFydCA9IC4pOw0KICAgIEtFRVAgKCooU09SVCguaW5pdF9hcnJheS4qKSkpDQogICAgS0VFUCAoKiguaW5pdF9hcnJheSopKQ0KICAgIFBST1ZJREVfSElEREVOIChfX2luaXRfYXJyYXlfZW5kID0gLik7DQogIH0gPkZMQVNIDQogIC5maW5pX2FycmF5IDoNCiAgew0KICAgIFBST1ZJREVfSElEREVOIChfX2ZpbmlfYXJyYXlfc3RhcnQgPSAuKTsNCiAgICBLRUVQICgqKFNPUlQoLmZpbmlfYXJyYXkuKikpKQ0KICAgIEtFRVAgKCooLmZpbmlfYXJyYXkqKSkNCiAgICBQUk9WSURFX0hJRERFTiAoX19maW5pX2FycmF5X2VuZCA9IC4pOw0KICB9ID5GTEFTSA0KDQogIC8qIHVzZWQgYnkgdGhlIHN0YXJ0dXAgdG8gaW5pdGlhbGl6ZSBkYXRhICovDQogIF9zaWRhdGEgPSBMT0FEQUREUiguZGF0YSk7DQoNCiAgLyogSW5pdGlhbGl6ZWQgZGF0YSBzZWN0aW9ucyBnb2VzIGludG8gUkFNLCBsb2FkIExNQSBjb3B5IGFmdGVyIGNvZGUgKi8NCiAgLmRhdGEgOiANCiAgew0KICAgIC4gPSBBTElHTig0KTsNCiAgICBfc2RhdGEgPSAuOyAgICAgICAgLyogY3JlYXRlIGEgZ2xvYmFsIHN5bWJvbCBhdCBkYXRhIHN0YXJ0ICovDQogICAgKiguZGF0YSkgICAgICAgICAgIC8qIC5kYXRhIHNlY3Rpb25zICovDQogICAgKiguZGF0YSopICAgICAgICAgIC8qIC5kYXRhKiBzZWN0aW9ucyAqLw0KDQogICAgLiA9IEFMSUdOKDQpOw0KICAgIF9lZGF0YSA9IC47ICAgICAgICAvKiBkZWZpbmUgYSBnbG9iYWwgc3ltYm9sIGF0IGRhdGEgZW5kICovDQogIH0gPlJBTSBBVD4gRkxBU0gNCg0KICANCiAgLyogVW5pbml0aWFsaXplZCBkYXRhIHNlY3Rpb24gKi8NCiAgLiA9IEFMSUdOKDQpOw0KICAuYnNzIDoNCiAgew0KICAgIC8qIFRoaXMgaXMgdXNlZCBieSB0aGUgc3RhcnR1cCBpbiBvcmRlciB0byBpbml0aWFsaXplIHRoZSAuYnNzIHNlY2lvbiAqLw0KICAgIF9zYnNzID0gLjsgICAgICAgICAvKiBkZWZpbmUgYSBnbG9iYWwgc3ltYm9sIGF0IGJzcyBzdGFydCAqLw0KICAgIF9fYnNzX3N0YXJ0X18gPSBfc2JzczsNCiAgICAqKC5ic3MpDQogICAgKiguYnNzKikNCiAgICAqKENPTU1PTikNCg0KICAgIC4gPSBBTElHTig0KTsNCiAgICBfZWJzcyA9IC47ICAgICAgICAgLyogZGVmaW5lIGEgZ2xvYmFsIHN5bWJvbCBhdCBic3MgZW5kICovDQogICAgX19ic3NfZW5kX18gPSBfZWJzczsNCiAgfSA+UkFNDQoNCiAgLyogVXNlcl9oZWFwX3N0YWNrIHNlY3Rpb24sIHVzZWQgdG8gY2hlY2sgdGhhdCB0aGVyZSBpcyBlbm91Z2ggUkFNIGxlZnQgKi8NCiAgLl91c2VyX2hlYXBfc3RhY2sgOg0KICB7DQogICAgLiA9IEFMSUdOKDQpOw0KICAgIFBST1ZJREUgKCBlbmQgPSAuICk7DQogICAgUFJPVklERSAoIF9lbmQgPSAuICk7DQogICAgLiA9IC4gKyBfTWluX0hlYXBfU2l6ZTsNCiAgICAuID0gLiArIF9NaW5fU3RhY2tfU2l6ZTsNCiAgICAuID0gQUxJR04oNCk7DQogIH0gPlJBTQ0KDQogIA0KDQogIC8qIFJlbW92ZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzdGFuZGFyZCBsaWJyYXJpZXMgKi8NCiAgL0RJU0NBUkQvIDoNCiAgew0KICAgIGxpYmMuYSAoICogKQ0KICAgIGxpYm0uYSAoICogKQ0KICAgIGxpYmdjYy5hICggKiApDQogIH0NCg0KICAuQVJNLmF0dHJpYnV0ZXMgMCA6IHsgKiguQVJNLmF0dHJpYnV0ZXMpIH0NCn0NCg==