PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvc3RyaWN0LmR0ZCI+DQo8aHRtbCBsYW5nPSJqYSI+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVNoaWZ0X0pJUyI+DQo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4NCjxsaW5rIHJlbD0idXAiIHRpdGxlPSJGYXRGcyIgaHJlZj0iLi4vMDBpbmRleF9qLmh0bWwiPg0KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9jc3Nfai5jc3MiIHR5cGU9InRleHQvY3NzIiBtZWRpYT0ic2NyZWVuIiB0aXRsZT0iRUxNIERlZmF1bHQiPg0KPHRpdGxlPkZhdEZzIC0gZl9mb3J3YXJkPC90aXRsZT4NCjwvaGVhZD4NCg0KPGJvZHk+DQoNCjxkaXYgY2xhc3M9InBhcmEiPg0KPGgyPmZfZm9yd2FyZDwvaDI+DQo8cD6DdINAg0ODi4KpgueDZoFbg16C8JPHgt2Pb4K1gUGRl5BNg1iDZ4OKgVuDgILJkryQ2pNdkZeCtYLcgreBQjwvcD4NCjxwcmU+DQpGUkVTVUxUIGZfZm9yd2FyZCAoDQogIEZJTCogPGVtPkZpbGVPYmplY3Q8L2VtPiwgICAgICAgICAgICAgICAgIC8qIIN0g0CDQ4OLgUWDSYN1g1eDRoNOg2eNXJGikcwgKi8NCiAgVUlOVCAoKjxlbT5GdW5jPC9lbT4pKGNvbnN0IEJZVEUqLFVJTlQpLCAgLyogg2aBW4Nek12Rl4rWkJQgKi8NCiAgVUlOVCA8ZW0+Qnl0ZVRvRndkPC9lbT4sICAgICAgICAgICAgICAgICAgLyogk12Rl4K3gumDb4NDg2eQlCAqLw0KICBVSU5UKiA8ZW0+Qnl0ZUZ3ZDwvZW0+ICAgICAgICAgICAgICAgICAgICAvKiCTXZGXgrOC6oK9g2+DQ4NnkJQgKi8NCik7DQo8L3ByZT4NCjwvZGl2Pg0KDQo8ZGl2IGNsYXNzPSJwYXJhIj4NCjxoND6I+JCUPC9oND4NCjxkbCBjbGFzcz0icGFyIj4NCjxkdD5GaWxlT2JqZWN0PC9kdD4NCjxkZD6DdINAg0ODi4FFg0mDdYNXg0aDToNnjVyRopHMgtaCzIN8g0ODk4NegvCOd5LogrWC3IK3gUI8L2RkPg0KPGR0PkZ1bmM8L2R0Pg0KPGRkPoNmgVuDXoLwk26Ct4OGgVuDVZLoi2CK1pCUgtaCzIN8g0ODk4NegvCOd5LogrWC3IK3gUKCsYLMitaQlILMjmSXbILNg1SDk4N2g4uC8I5Rj8aCtYLEgq2CvoKzgqKBQjwvZGQ+DQo8ZHQ+Qnl0ZVRvUmVhZDwvZHQ+DQo8ZGQ+k12Rl4K3gumDb4NDg2eQlCgwgWBVSU5UgsyNxZHlkmwpgvCOd5LogrWC3IK3gUI8L2RkPg0KPGR0PkJ5dGVSZWFkPC9kdD4NCjxkZD6OwI3bgsmTXZGXgrOC6oK9g2+DQ4NnkJSC8IpplFuCt4Lplc+QlILwjneCt4N8g0ODk4NegvCOd5LogrWC3IK3gUI8L2RkPg0KPC9kbD4NCjwvZGl2Pg0KDQoNCjxkaXYgY2xhc3M9InBhcmEiPg0KPGg0PpbfguiSbDwvaDQ+DQo8ZGwgY2xhc3M9InJldCI+DQo8ZHQ+RlJfT0sgKDApPC9kdD4NCjxkZD6Qs4/tj0mXuYFCPC9kZD4NCjxkdD5GUl9ERU5JRUQ8L2R0Pg0KPGRkPpTxk8eC3Y2egt2DgoFbg2iCxYpKgqKCvYN0g0CDQ4OLgqmC55PHgt2NnoLggqSCxoK1gr2BQjwvZGQ+DQo8ZHQ+RlJfRElTS19FUlI8L2R0Pg0KPGRkPoNmg0KDWINOgUWDR4OJgVuCyYLmgumOuJRzgUI8L2RkPg0KPGR0PkZSX0lOVF9FUlI8L2R0Pg0KPGRkPpVzkLOCyEZBVI1ckaKC3IK9gs2T4JWUg0eDiYFbgsmC5oLpjriUc4FCPC9kZD4NCjxkdD5GUl9OT1RfUkVBRFk8L2R0Pg0KPGRkPoOBg2aDQoNBgqqDWoNig2eCs4LqgsSCooLIgqKCyILHgUGVqJedg2iDiYNDg3WCqpOujeyVc5Rcj/OR1IFCPC9kZD4NCjxkdD5GUl9JTlZBTElEX09CSkVDVDwvZHQ+DQo8ZGQ+lrOM+ILIg3SDQINDg4uBRYNJg3WDV4NGg06DZ4FCPC9kZD4NCjwvZGw+DQo8L2Rpdj4NCg0KDQo8ZGl2IGNsYXNzPSJwYXJhIj4NCjxoND6J8JDgPC9oND4NCjxwPoN0g0CDQ4OLgsyDZoFbg16C8INvg2KDdINAgsmTx4Ldj2+Cs4K4gsmRl5BNg1iDZ4OKgVuDgILJkryQ2pNdkZeCtYLcgreBQoNBg3aDioNQgVuDVoOHg5ORpILFg2aBW4NegUWDb4Nig3SDQILwlUuXdoLGgrWCyIKigsyCxYFBg4GDgoOKgsyMwILnguqCvYrCi6uCxZdMjPiCxYK3gUKTXZGXikqObojKknWCzYFBjLuN3YLMg3SDQINDg4tSL1eDfINDg5ODXoKpgueCyYLIguiC3IK3gUKDdINAg0ODi1IvV4N8g0ODk4Negs2TXZGXgrOC6oK9g2+DQ4NnkJSCvoKvkGmC3YLcgreBQo53kuiCs4Lqgr2Db4NDg2eQlILMk12Rl5KGgsmDdINAg0ODi4LMj0mSW4LJkkKCtYK9j+qNh4LikZeQTYNYg2eDioFbg4CCqoNyg1eBW4LJgsiCwYK9j+qNh4FBPHR0PipCeXRlRndkPC90dD6CzTx0dD5CeXRlVG9Gd2Q8L3R0PoLmguiC4I+sgrOCrYLIguiC3IK3gUI8L3A+DQo8L2Rpdj4NCg0KDQo8ZGl2IGNsYXNzPSJwYXJhIj4NCjxoND6Rzomej+6V8TwvaDQ+DQo8cD48dHQ+X1VTRV9GT1JXQVJEID09IDE8L3R0PoLFgUGKjoLCPHR0Pl9GU19USU5ZID09IDE8L3R0PoLMgsaCq4LJjmeXcInClFyCxYK3gUI8L3A+DQo8L2Rpdj4NCg0KDQo8ZGl2IGNsYXNzPSJwYXJhIj4NCjxoND6OZ5dwl+GBaYNJgVuDZoNCg0mNxJC2gWo8L2g0Pg0KPHByZT4NCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KLyogZl9mb3J3YXJkitaQlIKpgueMxILOguqC6YNmgVuDXpGXkE2K1pCUgsyX4SAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCg0KVUlOVCBvdXRfc3RyZWFtICggICAvKiCW34Lokmw6IJNdkZeCs4Lqgr2Db4NDg2eQlILcgr2CzYNYg2eDioFbg4CCzI/zkdQgKi8NCiAgICBjb25zdCBCWVRFICpwLCAgLyogk12Rl4K3gumDZoFbg16C8I53greDfINDg5ODXiAqLw0KICAgIFVJTlQgYnRmICAgICAgICAvKiAmZ3Q7MDogk12Rl4LwjXOCpCiDb4NDg2eQlCkuIDA6IINYg2eDioFbg4CCzI/zkdSC8JKygteC6SAqLw0KKQ0Kew0KICAgIFVJTlQgY250ID0gMDsNCg0KDQogICAgaWYgKGJ0ZiA9PSAwKSB7ICAgICAvKiCDWoOTg1iXdouBICovDQogICAgICAgIC8qIINYg2eDioFbg4CCzI/zkdSC8JXUgrcgKDA6IINyg1eBWywgMTogg4yDZoNCKSAqLw0KICAgICAgICAvKiCI6pJVgUGDjINmg0KC8JXUgrWCvYLngUGRsYKtk12Rl5d2i4GCxY+tgsiCrYLGguAxg2+DQ4Nngs0gKi8NCiAgICAgICAgLyogk12Rl4KzguqCyIKigsYgZl9mb3J3YXJkitaQlILNIEZSX1JXX0VSUk9SIILGgsiC6YFCICovDQogICAgICAgIGlmIChGSUZPX1JFQURZKSBjbnQgPSAxOw0KICAgIH0NCiAgICBlbHNlIHsgICAgICAgICAgICAgIC8qIJNdkZeXdouBICovDQogICAgICAgIGRvIHsgICAgLyogkVOCxILMg2+DQ4NngvCTXZGXgreC6YKpgUGDWINng4qBW4OAgqqDcoNXgVuCyYLIgumC3ILFjEqC6JXUgrcgKi8NCiAgICAgICAgICAgIEZJRk9fUE9SVCA9ICpwKys7DQogICAgICAgICAgICBjbnQrKzsNCiAgICAgICAgfSB3aGlsZSAoY250ICZsdDsgYnRmICZhbXA7JmFtcDsgRklGT19SRUFEWSk7DQogICAgfQ0KDQogICAgcmV0dXJuIGNudDsNCn0NCg0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCi8qIGZfZm9yd2FyZIrWkJSCzI5nl3CX4SAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoNCkZSRVNVTFQgcGxheV9maWxlICgNCiAgICBjaGFyICpmbiAgICAgICAgLyogjcSQtoK3gumDSYFbg2aDQoNJgUWDdINAg0ODi5a8gvCOd4K3g3yDQ4OTg14gKi8NCikNCnsNCiAgICBGUkVTVUxUIHJjOw0KICAgIEZJTCBmaWw7DQogICAgVUlOVCBkbXk7DQoNCiAgICAvKiCDdINAg0ODi4Lwk8eC3Y9vgrWDgoFbg2iCxYpKgq0gKi8NCiAgICByYyA9IGZfb3BlbigmYW1wO2ZpbCwgZm4sIEZBX1JFQUQpOw0KDQogICAgLyogkVOCxILMg2aBW4NegqqTXZGXgrOC6oLpgqmDR4OJgVuCqpStkLaCt4LpgtyCxZGxgq+C6SAqLw0KICAgIHdoaWxlIChyYyA9PSBGUl9PSyAmYW1wOyZhbXA7IGZpbC5mcHRyICZsdDsgZmlsLmZzaXplKSB7DQoNCiAgICAgICAgLyoggtmCqYLMj4iXnS4uLiAqLw0KDQogICAgICAgIC8qIJLoivqTSYLcgr2CzZd2i4GCyYmegraCxINmgVuDXoLwg1iDZ4OKgVuDgILJkZePb4K3gukgKi8NCiAgICAgICAgcmMgPSBmX2ZvcndhcmQoJmFtcDtmaWwsIG91dF9zdHJlYW0sIDEwMDAsICZhbXA7ZG15KTsNCiAgICB9DQoNCiAgICByZXR1cm4gcmM7CS8qIEZSX09LOiCQs4/tj0mXuSwggtmCqTqI2Y/tj0mXuSAqLw0KfQ0KPC9wcmU+DQo8L2Rpdj4NCg0KDQo8ZGl2IGNsYXNzPSJwYXJhIj4NCjxoND6OUY/GPC9oND4NCjxwPjx0dD48YSBocmVmPSJvcGVuLmh0bWwiPmZfb3BlbjwvYT4sIDxhIGhyZWY9ImdldHMuaHRtbCI+ZmdldHM8L2E+LCA8YSBocmVmPSJ3cml0ZS5odG1sIj5mX3dyaXRlPC9hPiwgPGEgaHJlZj0iY2xvc2UuaHRtbCI+Zl9jbG9zZTwvYT4sIDxhIGhyZWY9InNmaWxlLmh0bWwiPkZJTDwvYT48L3R0PjwvcD4NCjwvZGl2Pg0KDQo8cCBjbGFzcz0iZm9vdCI+PGEgaHJlZj0iLi4vMDBpbmRleF9qLmh0bWwiPpbfguk8L2E+PC9wPg0KPC9ib2R5Pg0KPC9odG1sPg0K