fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ck1PVE9ST0xBIE1JQ1JPUFJPQ0VTU09SICYgTUVNT1JZIFRFQ0hOT0xPR1kgR1JPVVAKTTY4MDAwIEhpLVBlcmZvcm1hbmNlIE1pY3JvcHJvY2Vzc29yIERpdmlzaW9uCk02ODA2MCBTb2Z0d2FyZSBQYWNrYWdlClByb2R1Y3Rpb24gUmVsZWFzZSBQMS4wMCAtLSBPY3RvYmVyIDEwLCAxOTk0CgpNNjgwNjAgU29mdHdhcmUgUGFja2FnZSBDb3B5cmlnaHQgqSAxOTkzLCAxOTk0IE1vdG9yb2xhIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgpUSEUgU09GVFdBUkUgaXMgcHJvdmlkZWQgb24gYW4gIkFTIElTIiBiYXNpcyBhbmQgd2l0aG91dCB3YXJyYW50eS4KVG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywKTU9UT1JPTEEgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdIRVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELApJTkNMVURJTkcgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQphbmQgYW55IHdhcnJhbnR5IGFnYWluc3QgaW5mcmluZ2VtZW50IHdpdGggcmVnYXJkIHRvIHRoZSBTT0ZUV0FSRQooSU5DTFVESU5HIEFOWSBNT0RJRklFRCBWRVJTSU9OUyBUSEVSRU9GKSBhbmQgYW55IGFjY29tcGFueWluZyB3cml0dGVuIG1hdGVyaWFscy4KClRvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsCklOIE5PIEVWRU5UIFNIQUxMIE1PVE9ST0xBIEJFIExJQUJMRSBGT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUgooSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBCVVNJTkVTUyBQUk9GSVRTLApCVVNJTkVTUyBJTlRFUlJVUFRJT04sIExPU1MgT0YgQlVTSU5FU1MgSU5GT1JNQVRJT04sIE9SIE9USEVSIFBFQ1VOSUFSWSBMT1NTKQpBUklTSU5HIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgU09GVFdBUkUuCk1vdG9yb2xhIGFzc3VtZXMgbm8gcmVzcG9uc2liaWxpdHkgZm9yIHRoZSBtYWludGVuYW5jZSBhbmQgc3VwcG9ydCBvZiB0aGUgU09GVFdBUkUuCgpZb3UgYXJlIGhlcmVieSBncmFudGVkIGEgY29weXJpZ2h0IGxpY2Vuc2UgdG8gdXNlLCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoZSBTT0ZUV0FSRQpzbyBsb25nIGFzIHRoaXMgZW50aXJlIG5vdGljZSBpcyByZXRhaW5lZCB3aXRob3V0IGFsdGVyYXRpb24gaW4gYW55IG1vZGlmaWVkIGFuZC9vcgpyZWRpc3RyaWJ1dGVkIHZlcnNpb25zLCBhbmQgdGhhdCBzdWNoIG1vZGlmaWVkIHZlcnNpb25zIGFyZSBjbGVhcmx5IGlkZW50aWZpZWQgYXMgc3VjaC4KTm8gbGljZW5zZXMgYXJlIGdyYW50ZWQgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZSB1bmRlciBhbnkgcGF0ZW50cwpvciB0cmFkZW1hcmtzIG9mIE1vdG9yb2xhLCBJbmMuCn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgojCiMgZnJlYWwuczoKIwlUaGlzIGZpbGUgaXMgYXBwZW5kZWQgdG8gdGhlIHRvcCBvZiB0aGUgMDYwRlBTUCBwYWNrYWdlCiMgYW5kIGNvbnRhaW5zIHRoZSBlbnRyeSBwb2ludHMgaW50byB0aGUgcGFja2FnZS4gVGhlIHVzZXIsIGluCiMgZWZmZWN0LCBicmFuY2hlcyB0byBvbmUgb2YgdGhlIGJyYW5jaCB0YWJsZSBlbnRyaWVzIGxvY2F0ZWQKIyBhZnRlciBfMDYwRlBTUF9UQUJMRS4KIwlBbHNvLCBzdWJyb3V0aW5lIHN0dWJzIGV4aXN0IGluIHRoaXMgZmlsZSAoX2Zwc3BfZG9uZSBmb3IKIyBleGFtcGxlKSB0aGF0IGFyZSByZWZlcmVuY2VkIGJ5IHRoZSBGUFNQIHBhY2thZ2UgaXRzZWxmIGluIG9yZGVyCiMgdG8gY2FsbCBhIGdpdmVuIHJvdXRpbmUuIFRoZSBzdHViIHJvdXRpbmUgYWN0dWFsbHkgcGVyZm9ybXMgdGhlCiMgY2FsbG91dC4gVGhlIEZQU1AgY29kZSBkb2VzIGEgImJzciIgdG8gdGhlIHN0dWIgcm91dGluZS4gVGhpcwojIGV4dHJhIGxheWVyIG9mIGhpZXJhcmNoeSBhZGRzIGEgc2xpZ2h0IHBlcmZvcm1hbmNlIHBlbmFsdHkgYnV0CiMgaXQgbWFrZXMgdGhlIEZQU1AgY29kZSBlYXNpZXIgdG8gcmVhZCBhbmQgbW9yZSBtYWluYXRpbmFibGUuCiMKCnNldAlfb2ZmX2JzdW4sCTB4MDAKc2V0CV9vZmZfc25hbiwJMHgwNApzZXQJX29mZl9vcGVyciwJMHgwOApzZXQJX29mZl9vdmZsLAkweDBjCnNldAlfb2ZmX3VuZmwsCTB4MTAKc2V0CV9vZmZfZHosCTB4MTQKc2V0CV9vZmZfaW5leCwJMHgxOApzZXQJX29mZl9mbGluZSwJMHgxYwpzZXQJX29mZl9mcHVfZGlzLAkweDIwCnNldAlfb2ZmX3RyYXAsCTB4MjQKc2V0CV9vZmZfdHJhY2UsCTB4MjgKc2V0CV9vZmZfYWNjZXNzLAkweDJjCnNldAlfb2ZmX2RvbmUsCTB4MzAKCnNldAlfb2ZmX2ltciwJMHg0MApzZXQJX29mZl9kbXIsCTB4NDQKc2V0CV9vZmZfZG13LAkweDQ4CnNldAlfb2ZmX2lydywJMHg0YwpzZXQJX29mZl9pcmwsCTB4NTAKc2V0CV9vZmZfZHJiLAkweDU0CnNldAlfb2ZmX2RydywJMHg1OApzZXQJX29mZl9kcmwsCTB4NWMKc2V0CV9vZmZfZHdiLAkweDYwCnNldAlfb2ZmX2R3dywJMHg2NApzZXQJX29mZl9kd2wsCTB4NjgKCl8wNjBGUFNQX1RBQkxFOgoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgojIEhlcmUncyB0aGUgdGFibGUgb2YgRU5UUlkgUE9JTlRTIGZvciB0aG9zZSBsaW5raW5nIHRoZSBwYWNrYWdlLgoJYnJhLmwJCV9mcHNwX3NuYW4KCXNob3J0CQkweDAwMDAKCWJyYS5sCQlfZnBzcF9vcGVycgoJc2hvcnQJCTB4MDAwMAoJYnJhLmwJCV9mcHNwX292ZmwKCXNob3J0CQkweDAwMDAKCWJyYS5sCQlfZnBzcF91bmZsCglzaG9ydAkJMHgwMDAwCglicmEubAkJX2Zwc3BfZHoKCXNob3J0CQkweDAwMDAKCWJyYS5sCQlfZnBzcF9pbmV4CglzaG9ydAkJMHgwMDAwCglicmEubAkJX2Zwc3BfZmxpbmUKCXNob3J0CQkweDAwMDAKCWJyYS5sCQlfZnBzcF91bnN1cHAKCXNob3J0CQkweDAwMDAKCWJyYS5sCQlfZnBzcF9lZmZhZGQKCXNob3J0CQkweDAwMDAKCglzcGFjZQkJNTYKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoJZ2xvYmFsCQlfZnBzcF9kb25lCl9mcHNwX2RvbmU6Cgltb3YubAkJJWQwLC0oJXNwKQoJbW92LmwJCShfMDYwRlBTUF9UQUJMRS0weDgwK19vZmZfZG9uZSwlcGMpLCVkMAoJcGVhLmwJCShfMDYwRlBTUF9UQUJMRS0weDgwLCVwYywlZDApCgltb3YubAkJMHg0KCVzcCksJWQwCglydGQJCSYweDQKCglnbG9iYWwJCV9yZWFsX292ZmwKX3JlYWxfb3ZmbDoKCW1vdi5sCQklZDAsLSglc3ApCgltb3YubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODArX29mZl9vdmZsLCVwYyksJWQwCglwZWEubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKCW1vdi5sCQkweDQoJXNwKSwlZDAKCXJ0ZAkJJjB4NAoKCWdsb2JhbAkJX3JlYWxfdW5mbApfcmVhbF91bmZsOgoJbW92LmwJCSVkMCwtKCVzcCkKCW1vdi5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCtfb2ZmX3VuZmwsJXBjKSwlZDAKCXBlYS5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQoJbW92LmwJCTB4NCglc3ApLCVkMAoJcnRkCQkmMHg0CgoJZ2xvYmFsCQlfcmVhbF9pbmV4Cl9yZWFsX2luZXg6Cgltb3YubAkJJWQwLC0oJXNwKQoJbW92LmwJCShfMDYwRlBTUF9UQUJMRS0weDgwK19vZmZfaW5leCwlcGMpLCVkMAoJcGVhLmwJCShfMDYwRlBTUF9UQUJMRS0weDgwLCVwYywlZDApCgltb3YubAkJMHg0KCVzcCksJWQwCglydGQJCSYweDQKCglnbG9iYWwJCV9yZWFsX2JzdW4KX3JlYWxfYnN1bjoKCW1vdi5sCQklZDAsLSglc3ApCgltb3YubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODArX29mZl9ic3VuLCVwYyksJWQwCglwZWEubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKCW1vdi5sCQkweDQoJXNwKSwlZDAKCXJ0ZAkJJjB4NAoKCWdsb2JhbAkJX3JlYWxfb3BlcnIKX3JlYWxfb3BlcnI6Cgltb3YubAkJJWQwLC0oJXNwKQoJbW92LmwJCShfMDYwRlBTUF9UQUJMRS0weDgwK19vZmZfb3BlcnIsJXBjKSwlZDAKCXBlYS5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQoJbW92LmwJCTB4NCglc3ApLCVkMAoJcnRkCQkmMHg0CgoJZ2xvYmFsCQlfcmVhbF9zbmFuCl9yZWFsX3NuYW46Cgltb3YubAkJJWQwLC0oJXNwKQoJbW92LmwJCShfMDYwRlBTUF9UQUJMRS0weDgwK19vZmZfc25hbiwlcGMpLCVkMAoJcGVhLmwJCShfMDYwRlBTUF9UQUJMRS0weDgwLCVwYywlZDApCgltb3YubAkJMHg0KCVzcCksJWQwCglydGQJCSYweDQKCglnbG9iYWwJCV9yZWFsX2R6Cl9yZWFsX2R6OgoJbW92LmwJCSVkMCwtKCVzcCkKCW1vdi5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCtfb2ZmX2R6LCVwYyksJWQwCglwZWEubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKCW1vdi5sCQkweDQoJXNwKSwlZDAKCXJ0ZAkJJjB4NAoKCWdsb2JhbAkJX3JlYWxfZmxpbmUKX3JlYWxfZmxpbmU6Cgltb3YubAkJJWQwLC0oJXNwKQoJbW92LmwJCShfMDYwRlBTUF9UQUJMRS0weDgwK19vZmZfZmxpbmUsJXBjKSwlZDAKCXBlYS5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQoJbW92LmwJCTB4NCglc3ApLCVkMAoJcnRkCQkmMHg0CgoJZ2xvYmFsCQlfcmVhbF9mcHVfZGlzYWJsZWQKX3JlYWxfZnB1X2Rpc2FibGVkOgoJbW92LmwJCSVkMCwtKCVzcCkKCW1vdi5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCtfb2ZmX2ZwdV9kaXMsJXBjKSwlZDAKCXBlYS5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQoJbW92LmwJCTB4NCglc3ApLCVkMAoJcnRkCQkmMHg0CgoJZ2xvYmFsCQlfcmVhbF90cmFwCl9yZWFsX3RyYXA6Cgltb3YubAkJJWQwLC0oJXNwKQoJbW92LmwJCShfMDYwRlBTUF9UQUJMRS0weDgwK19vZmZfdHJhcCwlcGMpLCVkMAoJcGVhLmwJCShfMDYwRlBTUF9UQUJMRS0weDgwLCVwYywlZDApCgltb3YubAkJMHg0KCVzcCksJWQwCglydGQJCSYweDQKCglnbG9iYWwJCV9yZWFsX3RyYWNlCl9yZWFsX3RyYWNlOgoJbW92LmwJCSVkMCwtKCVzcCkKCW1vdi5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCtfb2ZmX3RyYWNlLCVwYyksJWQwCglwZWEubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKCW1vdi5sCQkweDQoJXNwKSwlZDAKCXJ0ZAkJJjB4NAoKCWdsb2JhbAkJX3JlYWxfYWNjZXNzCl9yZWFsX2FjY2VzczoKCW1vdi5sCQklZDAsLSglc3ApCgltb3YubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODArX29mZl9hY2Nlc3MsJXBjKSwlZDAKCXBlYS5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQoJbW92LmwJCTB4NCglc3ApLCVkMAoJcnRkCQkmMHg0CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCglnbG9iYWwJCV9pbWVtX3JlYWQKX2ltZW1fcmVhZDoKCW1vdi5sCQklZDAsLSglc3ApCgltb3YubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODArX29mZl9pbXIsJXBjKSwlZDAKCXBlYS5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQoJbW92LmwJCTB4NCglc3ApLCVkMAoJcnRkCQkmMHg0CgoJZ2xvYmFsCQlfZG1lbV9yZWFkCl9kbWVtX3JlYWQ6Cgltb3YubAkJJWQwLC0oJXNwKQoJbW92LmwJCShfMDYwRlBTUF9UQUJMRS0weDgwK19vZmZfZG1yLCVwYyksJWQwCglwZWEubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKCW1vdi5sCQkweDQoJXNwKSwlZDAKCXJ0ZAkJJjB4NAoKCWdsb2JhbAkJX2RtZW1fd3JpdGUKX2RtZW1fd3JpdGU6Cgltb3YubAkJJWQwLC0oJXNwKQoJbW92LmwJCShfMDYwRlBTUF9UQUJMRS0weDgwK19vZmZfZG13LCVwYyksJWQwCglwZWEubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKCW1vdi5sCQkweDQoJXNwKSwlZDAKCXJ0ZAkJJjB4NAoKCWdsb2JhbAkJX2ltZW1fcmVhZF93b3JkCl9pbWVtX3JlYWRfd29yZDoKCW1vdi5sCQklZDAsLSglc3ApCgltb3YubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODArX29mZl9pcncsJXBjKSwlZDAKCXBlYS5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQoJbW92LmwJCTB4NCglc3ApLCVkMAoJcnRkCQkmMHg0CgoJZ2xvYmFsCQlfaW1lbV9yZWFkX2xvbmcKX2ltZW1fcmVhZF9sb25nOgoJbW92LmwJCSVkMCwtKCVzcCkKCW1vdi5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCtfb2ZmX2lybCwlcGMpLCVkMAoJcGVhLmwJCShfMDYwRlBTUF9UQUJMRS0weDgwLCVwYywlZDApCgltb3YubAkJMHg0KCVzcCksJWQwCglydGQJCSYweDQKCglnbG9iYWwJCV9kbWVtX3JlYWRfYnl0ZQpfZG1lbV9yZWFkX2J5dGU6Cgltb3YubAkJJWQwLC0oJXNwKQoJbW92LmwJCShfMDYwRlBTUF9UQUJMRS0weDgwK19vZmZfZHJiLCVwYyksJWQwCglwZWEubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKCW1vdi5sCQkweDQoJXNwKSwlZDAKCXJ0ZAkJJjB4NAoKCWdsb2JhbAkJX2RtZW1fcmVhZF93b3JkCl9kbWVtX3JlYWRfd29yZDoKCW1vdi5sCQklZDAsLSglc3ApCgltb3YubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODArX29mZl9kcncsJXBjKSwlZDAKCXBlYS5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQoJbW92LmwJCTB4NCglc3ApLCVkMAoJcnRkCQkmMHg0CgoJZ2xvYmFsCQlfZG1lbV9yZWFkX2xvbmcKX2RtZW1fcmVhZF9sb25nOgoJbW92LmwJCSVkMCwtKCVzcCkKCW1vdi5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCtfb2ZmX2RybCwlcGMpLCVkMAoJcGVhLmwJCShfMDYwRlBTUF9UQUJMRS0weDgwLCVwYywlZDApCgltb3YubAkJMHg0KCVzcCksJWQwCglydGQJCSYweDQKCglnbG9iYWwJCV9kbWVtX3dyaXRlX2J5dGUKX2RtZW1fd3JpdGVfYnl0ZToKCW1vdi5sCQklZDAsLSglc3ApCgltb3YubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODArX29mZl9kd2IsJXBjKSwlZDAKCXBlYS5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQoJbW92LmwJCTB4NCglc3ApLCVkMAoJcnRkCQkmMHg0CgoJZ2xvYmFsCQlfZG1lbV93cml0ZV93b3JkCl9kbWVtX3dyaXRlX3dvcmQ6Cgltb3YubAkJJWQwLC0oJXNwKQoJbW92LmwJCShfMDYwRlBTUF9UQUJMRS0weDgwK19vZmZfZHd3LCVwYyksJWQwCglwZWEubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKCW1vdi5sCQkweDQoJXNwKSwlZDAKCXJ0ZAkJJjB4NAoKCWdsb2JhbAkJX2RtZW1fd3JpdGVfbG9uZwpfZG1lbV93cml0ZV9sb25nOgoJbW92LmwJCSVkMCwtKCVzcCkKCW1vdi5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCtfb2ZmX2R3bCwlcGMpLCVkMAoJcGVhLmwJCShfMDYwRlBTUF9UQUJMRS0weDgwLCVwYywlZDApCgltb3YubAkJMHg0KCVzcCksJWQwCglydGQJCSYweDQKCiMKIyBUaGlzIGZpbGUgY29udGFpbnMgYSBzZXQgb2YgZGVmaW5lIHN0YXRlbWVudHMgZm9yIGNvbnN0YW50cwojIGluIG9yZGVyIHRvIHByb21vdGUgcmVhZGFiaWxpdHkgd2l0aGluIHRoZSBjb3JlY29kZSBpdHNlbGYuCiMKCnNldCBMT0NBTF9TSVpFLAkJMTkyCQkJIyBzdGFjayBmcmFtZSBzaXplKGJ5dGVzKQpzZXQgTFYsCQkJLUxPQ0FMX1NJWkUJCSMgc3RhY2sgb2Zmc2V0CgpzZXQgRVhDX1NSLAkJMHg0CQkJIyBzdGFjayBzdGF0dXMgcmVnaXN0ZXIKc2V0IEVYQ19QQywJCTB4NgkJCSMgc3RhY2sgcGMKc2V0IEVYQ19WT0ZGLAkJMHhhCQkJIyBzdGFja2VkIHZlY3RvciBvZmZzZXQKc2V0IEVYQ19FQSwJCTB4YwkJCSMgc3RhY2tlZCA8ZWE+CgpzZXQgRVhDX0ZQLAkJMHgwCQkJIyBmcmFtZSBwb2ludGVyCgpzZXQgRVhDX0FSRUdTLAkJLTY4CQkJIyBvZmZzZXQgb2YgYWxsIGFkZHJlc3MgcmVncwpzZXQgRVhDX0RSRUdTLAkJLTEwMAkJCSMgb2Zmc2V0IG9mIGFsbCBkYXRhIHJlZ3MKc2V0IEVYQ19GUFJFR1MsCQktMzYJCQkjIG9mZnNldCBvZiBhbGwgZnAgcmVncwoKc2V0IEVYQ19BNywJCUVYQ19BUkVHUysoNyo0KQkJIyBvZmZzZXQgb2Ygc2F2ZWQgYTcKc2V0IE9MRF9BNywJCUVYQ19BUkVHUysoNio0KQkJIyBleHRyYSBjb3B5IG9mIHNhdmVkIGE3CnNldCBFWENfQTYsCQlFWENfQVJFR1MrKDYqNCkJCSMgb2Zmc2V0IG9mIHNhdmVkIGE2CnNldCBFWENfQTUsCQlFWENfQVJFR1MrKDUqNCkKc2V0IEVYQ19BNCwJCUVYQ19BUkVHUysoNCo0KQpzZXQgRVhDX0EzLAkJRVhDX0FSRUdTKygzKjQpCnNldCBFWENfQTIsCQlFWENfQVJFR1MrKDIqNCkKc2V0IEVYQ19BMSwJCUVYQ19BUkVHUysoMSo0KQpzZXQgRVhDX0EwLAkJRVhDX0FSRUdTKygwKjQpCnNldCBFWENfRDcsCQlFWENfRFJFR1MrKDcqNCkKc2V0IEVYQ19ENiwJCUVYQ19EUkVHUysoNio0KQpzZXQgRVhDX0Q1LAkJRVhDX0RSRUdTKyg1KjQpCnNldCBFWENfRDQsCQlFWENfRFJFR1MrKDQqNCkKc2V0IEVYQ19EMywJCUVYQ19EUkVHUysoMyo0KQpzZXQgRVhDX0QyLAkJRVhDX0RSRUdTKygyKjQpCnNldCBFWENfRDEsCQlFWENfRFJFR1MrKDEqNCkKc2V0IEVYQ19EMCwJCUVYQ19EUkVHUysoMCo0KQoKc2V0IEVYQ19GUDAsCQlFWENfRlBSRUdTKygwKjEyKQkjIG9mZnNldCBvZiBzYXZlZCBmcDAKc2V0IEVYQ19GUDEsCQlFWENfRlBSRUdTKygxKjEyKQkjIG9mZnNldCBvZiBzYXZlZCBmcDEKc2V0IEVYQ19GUDIsCQlFWENfRlBSRUdTKygyKjEyKQkjIG9mZnNldCBvZiBzYXZlZCBmcDIgKG5vdCB1c2VkKQoKc2V0IEZQX1NDUjEsCQlMVis4MAkJCSMgZnAgc2NyYXRjaCAxCnNldCBGUF9TQ1IxX0VYLAkJRlBfU0NSMSswCnNldCBGUF9TQ1IxX1NHTiwJRlBfU0NSMSsyCnNldCBGUF9TQ1IxX0hJLAkJRlBfU0NSMSs0CnNldCBGUF9TQ1IxX0xPLAkJRlBfU0NSMSs4CgpzZXQgRlBfU0NSMCwJCUxWKzY4CQkJIyBmcCBzY3JhdGNoIDAKc2V0IEZQX1NDUjBfRVgsCQlGUF9TQ1IwKzAKc2V0IEZQX1NDUjBfU0dOLAlGUF9TQ1IwKzIKc2V0IEZQX1NDUjBfSEksCQlGUF9TQ1IwKzQKc2V0IEZQX1NDUjBfTE8sCQlGUF9TQ1IwKzgKCnNldCBGUF9EU1QsCQlMVis1NgkJCSMgZnAgZGVzdGluYXRpb24gb3BlcmFuZApzZXQgRlBfRFNUX0VYLAkJRlBfRFNUKzAKc2V0IEZQX0RTVF9TR04sCQlGUF9EU1QrMgpzZXQgRlBfRFNUX0hJLAkJRlBfRFNUKzQKc2V0IEZQX0RTVF9MTywJCUZQX0RTVCs4CgpzZXQgRlBfU1JDLAkJTFYrNDQJCQkjIGZwIHNvdXJjZSBvcGVyYW5kCnNldCBGUF9TUkNfRVgsCQlGUF9TUkMrMApzZXQgRlBfU1JDX1NHTiwJCUZQX1NSQysyCnNldCBGUF9TUkNfSEksCQlGUF9TUkMrNApzZXQgRlBfU1JDX0xPLAkJRlBfU1JDKzgKCnNldCBVU0VSX0ZQSUFSLAkJTFYrNDAJCQkjIEZQIGluc3RyIGFkZHJlc3MgcmVnaXN0ZXIKCnNldCBVU0VSX0ZQU1IsCQlMViszNgkJCSMgRlAgc3RhdHVzIHJlZ2lzdGVyCnNldCBGUFNSX0NDLAkJVVNFUl9GUFNSKzAJCSMgRlBTUiBjb25kaXRpb24gY29kZXMKc2V0IEZQU1JfUUJZVEUsCQlVU0VSX0ZQU1IrMQkJIyBGUFNSIHFvdXRpZW50IGJ5dGUKc2V0IEZQU1JfRVhDRVBULAlVU0VSX0ZQU1IrMgkJIyBGUFNSIGV4Y2VwdGlvbiBzdGF0dXMgYnl0ZQpzZXQgRlBTUl9BRVhDRVBULAlVU0VSX0ZQU1IrMwkJIyBGUFNSIGFjY3J1ZWQgZXhjZXB0aW9uIGJ5dGUKCnNldCBVU0VSX0ZQQ1IsCQlMViszMgkJCSMgRlAgY29udHJvbCByZWdpc3RlcgpzZXQgRlBDUl9FTkFCTEUsCVVTRVJfRlBDUisyCQkjIEZQQ1IgZXhjZXB0aW9uIGVuYWJsZQpzZXQgRlBDUl9NT0RFLAkJVVNFUl9GUENSKzMJCSMgRlBDUiByb3VuZGluZyBtb2RlIGNvbnRyb2wKCnNldCBMX1NDUjMsCQlMVisyOAkJCSMgaW50ZWdlciBzY3JhdGNoIDMKc2V0IExfU0NSMiwJCUxWKzI0CQkJIyBpbnRlZ2VyIHNjcmF0Y2ggMgpzZXQgTF9TQ1IxLAkJTFYrMjAJCQkjIGludGVnZXIgc2NyYXRjaCAxCgpzZXQgU1RPUkVfRkxHLAkJTFYrMTkJCQkjIGZsYWc6IG9wZXJhbmQgc3RvcmUgKGllLiBub3QgZmNtcC9mdHN0KQoKc2V0IEVYQ19URU1QMiwJCUxWKzI0CQkJIyB0ZW1wb3Jhcnkgc3BhY2UKc2V0IEVYQ19URU1QLAkJTFYrMTYJCQkjIHRlbXBvcmFyeSBzcGFjZQoKc2V0IERUQUcsCQlMVisxNQkJCSMgZGVzdGluYXRpb24gb3BlcmFuZCB0eXBlCnNldCBTVEFHLAkJTFYrMTQJCQkjIHNvdXJjZSBvcGVyYW5kIHR5cGUKCnNldCBTUENPTkRfRkxHLAkJTFYrMTAJCQkjIGZsYWc6IHNwZWNpYWwgY2FzZSAoc2VlIGJlbG93KQoKc2V0IEVYQ19DQywJCUxWKzgJCQkjIHNhdmVkIGNvbmRpdGlvbiBjb2RlcwpzZXQgRVhDX0VYVFdQVFIsCUxWKzQJCQkjIHNhdmVkIGN1cnJlbnQgUEMgKGFjdGl2ZSkKc2V0IEVYQ19FWFRXT1JELAlMVisyCQkJIyBzYXZlZCBleHRlbnNpb24gd29yZApzZXQgRVhDX0NNRFJFRywJCUxWKzIJCQkjIHNhdmVkIGV4dGVuc2lvbiB3b3JkCnNldCBFWENfT1BXT1JELAkJTFYrMAkJCSMgc2F2ZWQgb3BlcmF0aW9uIHdvcmQKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgojIEhlbHBmdWwgbWFjcm9zCgpzZXQgRlRFTVAsCQkwCQkJIyBvZmZzZXRzIHdpdGhpbiBhbgpzZXQgRlRFTVBfRVgsCQkwCQkJIyBleHRlbmRlZCBwcmVjaXNpb24Kc2V0IEZURU1QX1NHTiwJCTIJCQkjIHZhbHVlIHNhdmVkIGluIG1lbW9yeS4Kc2V0IEZURU1QX0hJLAkJNApzZXQgRlRFTVBfTE8sCQk4CnNldCBGVEVNUF9HUlMsCQkxMgoKc2V0IExPQ0FMLAkJMAkJCSMgb2Zmc2V0cyB3aXRoaW4gYW4Kc2V0IExPQ0FMX0VYLAkJMAkJCSMgZXh0ZW5kZWQgcHJlY2lzaW9uCnNldCBMT0NBTF9TR04sCQkyCQkJIyB2YWx1ZSBzYXZlZCBpbiBtZW1vcnkuCnNldCBMT0NBTF9ISSwJCTQKc2V0IExPQ0FMX0xPLAkJOApzZXQgTE9DQUxfR1JTLAkJMTIKCnNldCBEU1QsCQkwCQkJIyBvZmZzZXRzIHdpdGhpbiBhbgpzZXQgRFNUX0VYLAkJMAkJCSMgZXh0ZW5kZWQgcHJlY2lzaW9uCnNldCBEU1RfSEksCQk0CQkJIyB2YWx1ZSBzYXZlZCBpbiBtZW1vcnkuCnNldCBEU1RfTE8sCQk4CgpzZXQgU1JDLAkJMAkJCSMgb2Zmc2V0cyB3aXRoaW4gYW4Kc2V0IFNSQ19FWCwJCTAJCQkjIGV4dGVuZGVkIHByZWNpc2lvbgpzZXQgU1JDX0hJLAkJNAkJCSMgdmFsdWUgc2F2ZWQgaW4gbWVtb3J5LgpzZXQgU1JDX0xPLAkJOAoKc2V0IFNHTF9MTywJCTB4M2Y4MQkJCSMgbWluIHNnbCBwcmVjIGV4cG9uZW50CnNldCBTR0xfSEksCQkweDQwN2UJCQkjIG1heCBzZ2wgcHJlYyBleHBvbmVudApzZXQgREJMX0xPLAkJMHgzYzAxCQkJIyBtaW4gZGJsIHByZWMgZXhwb25lbnQKc2V0IERCTF9ISSwJCTB4NDNmZQkJCSMgbWF4IGRibCBwcmVjIGV4cG9uZW50CnNldCBFWFRfTE8sCQkweDAJCQkjIG1pbiBleHQgcHJlYyBleHBvbmVudApzZXQgRVhUX0hJLAkJMHg3ZmZlCQkJIyBtYXggZXh0IHByZWMgZXhwb25lbnQKCnNldCBFWFRfQklBUywJCTB4M2ZmZgkJCSMgZXh0ZW5kZWQgcHJlY2lzaW9uIGJpYXMKc2V0IFNHTF9CSUFTLAkJMHgwMDdmCQkJIyBzaW5nbGUgcHJlY2lzaW9uIGJpYXMKc2V0IERCTF9CSUFTLAkJMHgwM2ZmCQkJIyBkb3VibGUgcHJlY2lzaW9uIGJpYXMKCnNldCBOT1JNLAkJMHgwMAkJCSMgb3BlcmFuZCB0eXBlIGZvciBTVEFHL0RUQUcKc2V0IFpFUk8sCQkweDAxCQkJIyBvcGVyYW5kIHR5cGUgZm9yIFNUQUcvRFRBRwpzZXQgSU5GLAkJMHgwMgkJCSMgb3BlcmFuZCB0eXBlIGZvciBTVEFHL0RUQUcKc2V0IFFOQU4sCQkweDAzCQkJIyBvcGVyYW5kIHR5cGUgZm9yIFNUQUcvRFRBRwpzZXQgREVOT1JNLAkJMHgwNAkJCSMgb3BlcmFuZCB0eXBlIGZvciBTVEFHL0RUQUcKc2V0IFNOQU4sCQkweDA1CQkJIyBvcGVyYW5kIHR5cGUgZm9yIFNUQUcvRFRBRwpzZXQgVU5OT1JNLAkJMHgwNgkJCSMgb3BlcmFuZCB0eXBlIGZvciBTVEFHL0RUQUcKCiMjIyMjIyMjIyMjIyMjIyMjIwojIEZQU1IvRlBDUiBiaXRzICMKIyMjIyMjIyMjIyMjIyMjIyMjCnNldCBuZWdfYml0LAkJMHgzCQkJIyBuZWdhdGl2ZSByZXN1bHQKc2V0IHpfYml0LAkJMHgyCQkJIyB6ZXJvIHJlc3VsdApzZXQgaW5mX2JpdCwJCTB4MQkJCSMgaW5maW5pdGUgcmVzdWx0CnNldCBuYW5fYml0LAkJMHgwCQkJIyBOQU4gcmVzdWx0CgpzZXQgcV9zbl9iaXQsCQkweDcJCQkjIHNpZ24gYml0IG9mIHF1b3RpZW50IGJ5dGUKCnNldCBic3VuX2JpdCwJCTcJCQkjIGJyYW5jaCBvbiB1bm9yZGVyZWQKc2V0IHNuYW5fYml0LAkJNgkJCSMgc2lnbmFsbGluZyBOQU4Kc2V0IG9wZXJyX2JpdCwJCTUJCQkjIG9wZXJhbmQgZXJyb3IKc2V0IG92ZmxfYml0LAkJNAkJCSMgb3ZlcmZsb3cKc2V0IHVuZmxfYml0LAkJMwkJCSMgdW5kZXJmbG93CnNldCBkel9iaXQsCQkyCQkJIyBkaXZpZGUgYnkgemVybwpzZXQgaW5leDJfYml0LAkJMQkJCSMgaW5leGFjdCByZXN1bHQgMgpzZXQgaW5leDFfYml0LAkJMAkJCSMgaW5leGFjdCByZXN1bHQgMQoKc2V0IGFpb3BfYml0LAkJNwkJCSMgYWNjcnVlZCBpbmV4YWN0IG9wZXJhdGlvbiBiaXQKc2V0IGFvdmZsX2JpdCwJCTYJCQkjIGFjY3J1ZWQgb3ZlcmZsb3cgYml0CnNldCBhdW5mbF9iaXQsCQk1CQkJIyBhY2NydWVkIHVuZGVyZmxvdyBiaXQKc2V0IGFkel9iaXQsCQk0CQkJIyBhY2NydWVkIGR6IGJpdApzZXQgYWluZXhfYml0LAkJMwkJCSMgYWNjcnVlZCBpbmV4YWN0IGJpdAoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBGUFNSIGluZGl2aWR1YWwgYml0IG1hc2tzICMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKc2V0IG5lZ19tYXNrLAkJMHgwODAwMDAwMAkJIyBuZWdhdGl2ZSBiaXQgbWFzayAobHcpCnNldCBpbmZfbWFzaywJCTB4MDIwMDAwMDAJCSMgaW5maW5pdHkgYml0IG1hc2sgKGx3KQpzZXQgel9tYXNrLAkJMHgwNDAwMDAwMAkJIyB6ZXJvIGJpdCBtYXNrIChsdykKc2V0IG5hbl9tYXNrLAkJMHgwMTAwMDAwMAkJIyBuYW4gYml0IG1hc2sgKGx3KQoKc2V0IG5lZ19ibWFzaywJCTB4MDgJCQkjIG5lZ2F0aXZlIGJpdCBtYXNrIChieXRlKQpzZXQgaW5mX2JtYXNrLAkJMHgwMgkJCSMgaW5maW5pdHkgYml0IG1hc2sgKGJ5dGUpCnNldCB6X2JtYXNrLAkJMHgwNAkJCSMgemVybyBiaXQgbWFzayAoYnl0ZSkKc2V0IG5hbl9ibWFzaywJCTB4MDEJCQkjIG5hbiBiaXQgbWFzayAoYnl0ZSkKCnNldCBic3VuX21hc2ssCQkweDAwMDA4MDAwCQkjIGJzdW4gZXhjZXB0aW9uIG1hc2sKc2V0IHNuYW5fbWFzaywJCTB4MDAwMDQwMDAJCSMgc25hbiBleGNlcHRpb24gbWFzawpzZXQgb3BlcnJfbWFzaywJCTB4MDAwMDIwMDAJCSMgb3BlcnIgZXhjZXB0aW9uIG1hc2sKc2V0IG92ZmxfbWFzaywJCTB4MDAwMDEwMDAJCSMgb3ZlcmZsb3cgZXhjZXB0aW9uIG1hc2sKc2V0IHVuZmxfbWFzaywJCTB4MDAwMDA4MDAJCSMgdW5kZXJmbG93IGV4Y2VwdGlvbiBtYXNrCnNldCBkel9tYXNrLAkJMHgwMDAwMDQwMAkJIyBkeiBleGNlcHRpb24gbWFzawpzZXQgaW5leDJfbWFzaywJCTB4MDAwMDAyMDAJCSMgaW5leDIgZXhjZXB0aW9uIG1hc2sKc2V0IGluZXgxX21hc2ssCQkweDAwMDAwMTAwCQkjIGluZXgxIGV4Y2VwdGlvbiBtYXNrCgpzZXQgYWlvcF9tYXNrLAkJMHgwMDAwMDA4MAkJIyBhY2NydWVkIGlsbGVnYWwgb3BlcmF0aW9uCnNldCBhb3ZmbF9tYXNrLAkJMHgwMDAwMDA0MAkJIyBhY2NydWVkIG92ZXJmbG93CnNldCBhdW5mbF9tYXNrLAkJMHgwMDAwMDAyMAkJIyBhY2NydWVkIHVuZGVyZmxvdwpzZXQgYWR6X21hc2ssCQkweDAwMDAwMDEwCQkjIGFjY3J1ZWQgZGl2aWRlIGJ5IHplcm8Kc2V0IGFpbmV4X21hc2ssCQkweDAwMDAwMDA4CQkjIGFjY3J1ZWQgaW5leGFjdAoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBGUFNSIGNvbWJpbmF0aW9ucyB1c2VkIGluIHRoZSBGUFNQICMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKc2V0IGR6aW5mX21hc2ssCQlpbmZfbWFzaytkel9tYXNrK2Fkel9tYXNrCnNldCBvcG5hbl9tYXNrLAkJbmFuX21hc2srb3BlcnJfbWFzaythaW9wX21hc2sKc2V0IG56aV9tYXNrLAkJMHgwMWZmZmZmZgkJI2NsZWFycyBOLCBaLCBhbmQgSQpzZXQgdW5maW54X21hc2ssCXVuZmxfbWFzaytpbmV4Ml9tYXNrK2F1bmZsX21hc2srYWluZXhfbWFzawpzZXQgdW5mMmlueF9tYXNrLAl1bmZsX21hc2sraW5leDJfbWFzaythaW5leF9tYXNrCnNldCBvdmZpbnhfbWFzaywJb3ZmbF9tYXNrK2luZXgyX21hc2srYW92ZmxfbWFzaythaW5leF9tYXNrCnNldCBpbngxYV9tYXNrLAkJaW5leDFfbWFzaythaW5leF9tYXNrCnNldCBpbngyYV9tYXNrLAkJaW5leDJfbWFzaythaW5leF9tYXNrCnNldCBzbmFuaW9wX21hc2ssCW5hbl9tYXNrK3NuYW5fbWFzaythaW9wX21hc2sKc2V0IHNuYW5pb3AyX21hc2ssCXNuYW5fbWFzaythaW9wX21hc2sKc2V0IG5hbmlvcF9tYXNrLAluYW5fbWFzaythaW9wX21hc2sKc2V0IG5lZ2luZl9tYXNrLAluZWdfbWFzaytpbmZfbWFzawpzZXQgaW5mYWlvcF9tYXNrLAlpbmZfbWFzaythaW9wX21hc2sKc2V0IG5lZ3pfbWFzaywJCW5lZ19tYXNrK3pfbWFzawpzZXQgb3Bhb3BfbWFzaywJCW9wZXJyX21hc2srYWlvcF9tYXNrCnNldCB1bmZsX2lueF9tYXNrLAl1bmZsX21hc2srYXVuZmxfbWFzaythaW5leF9tYXNrCnNldCBvdmZsX2lueF9tYXNrLAlvdmZsX21hc2srYW92ZmxfbWFzaythaW5leF9tYXNrCgojIyMjIyMjIyMKIyBtaXNjLiAjCiMjIyMjIyMjIwpzZXQgcm5kX3N0a3lfYml0LAkyOQkJCSMgc3RreSBiaXQgcG9zIGluIGxvbmd3b3JkCgpzZXQgc2lnbl9iaXQsCQkweDcJCQkjIHNpZ24gYml0CnNldCBzaWduYW5fYml0LAkJMHg2CQkJIyBzaWduYWxsaW5nIG5hbiBiaXQKCnNldCBzZ2xfdGhyZXNoLAkJMHgzZjgxCQkJIyBtaW5pbXVtIHNnbCBleHBvbmVudApzZXQgZGJsX3RocmVzaCwJCTB4M2MwMQkJCSMgbWluaW11bSBkYmwgZXhwb25lbnQKCnNldCB4X21vZGUsCQkweDAJCQkjIGV4dGVuZGVkIHByZWNpc2lvbgpzZXQgc19tb2RlLAkJMHg0CQkJIyBzaW5nbGUgcHJlY2lzaW9uCnNldCBkX21vZGUsCQkweDgJCQkjIGRvdWJsZSBwcmVjaXNpb24KCnNldCBybl9tb2RlLAkJMHgwCQkJIyByb3VuZC10by1uZWFyZXN0CnNldCByel9tb2RlLAkJMHgxCQkJIyByb3VuZC10by16ZXJvCnNldCBybV9tb2RlLAkJMHgyCQkJIyByb3VuZC10cC1taW51cy1pbmZpbml0eQpzZXQgcnBfbW9kZSwJCTB4MwkJCSMgcm91bmQtdG8tcGx1cy1pbmZpbml0eQoKc2V0IG1hbnRpc3NhbGVuLAk2NAkJCSMgbGVuZ3RoIG9mIG1hbnRpc3NhIGluIGJpdHMKCnNldCBCWVRFLAkJMQkJCSMgbGVuKGJ5dGUpID09IDEgYnl0ZQpzZXQgV09SRCwJCTIJCQkjIGxlbih3b3JkKSA9PSAyIGJ5dGVzCnNldCBMT05HLAkJNAkJCSMgbGVuKGxvbmd3b3JkKSA9PSAyIGJ5dGVzCgpzZXQgQlNVTl9WRUMsCQkweGMwCQkJIyBic3VuICAgIHZlY3RvciBvZmZzZXQKc2V0IElORVhfVkVDLAkJMHhjNAkJCSMgaW5leGFjdCB2ZWN0b3Igb2Zmc2V0CnNldCBEWl9WRUMsCQkweGM4CQkJIyBkeiAgICAgIHZlY3RvciBvZmZzZXQKc2V0IFVORkxfVkVDLAkJMHhjYwkJCSMgdW5mbCAgICB2ZWN0b3Igb2Zmc2V0CnNldCBPUEVSUl9WRUMsCQkweGQwCQkJIyBvcGVyciAgIHZlY3RvciBvZmZzZXQKc2V0IE9WRkxfVkVDLAkJMHhkNAkJCSMgb3ZmbCAgICB2ZWN0b3Igb2Zmc2V0CnNldCBTTkFOX1ZFQywJCTB4ZDgJCQkjIHNuYW4gICAgdmVjdG9yIG9mZnNldAoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgU1BlY2lhbCBDT05EaXRpb24gRkxhR3MgIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKc2V0IGZ0cmFwY2NfZmxnLAkweDAxCQkJIyBmbGFnIGJpdDogZnRyYXBjYyBleGNlcHRpb24Kc2V0IGZic3VuX2ZsZywJCTB4MDIJCQkjIGZsYWcgYml0OiBic3VuIGV4Y2VwdGlvbgpzZXQgbWlhN19mbGcsCQkweDA0CQkJIyBmbGFnIGJpdDogKGE3KSsgPGVhPgpzZXQgbWRhN19mbGcsCQkweDA4CQkJIyBmbGFnIGJpdDogLShhNykgPGVhPgpzZXQgZm1vdm1fZmxnLAkJMHg0MAkJCSMgZmxhZyBiaXQ6IGZtb3ZtIGluc3RydWN0aW9uCnNldCBpbW1lZF9mbGcsCQkweDgwCQkJIyBmbGFnIGJpdDogJjxkYXRhPiA8ZWE+CgpzZXQgZnRyYXBjY19iaXQsCTB4MApzZXQgZmJzdW5fYml0LAkJMHgxCnNldCBtaWE3X2JpdCwJCTB4MgpzZXQgbWRhN19iaXQsCQkweDMKc2V0IGltbWVkX2JpdCwJCTB4NwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFRSQU5TQ0VOREVOVEFMICJMQVNULU9QIiBGTEFHUyAjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKc2V0IEZNVUxfT1AsCQkweDAJCQkjIGZtdWwgaW5zdHIgcGVyZm9ybWVkIGxhc3QKc2V0IEZESVZfT1AsCQkweDEJCQkjIGZkaXYgcGVyZm9ybWVkIGxhc3QKc2V0IEZBRERfT1AsCQkweDIJCQkjIGZhZGQgcGVyZm9ybWVkIGxhc3QKc2V0IEZNT1ZfT1AsCQkweDMJCQkjIGZtb3YgcGVyZm9ybWVkIGxhc3QKCiMjIyMjIyMjIyMjIyMKIyBDT05TVEFOVFMgIwojIyMjIyMjIyMjIyMjClQxOglsb25nCQkweDQwQzYyRDM4LDB4RDNENjQ2MzQJIyAxNjM4MSBMT0cyIExFQUQKVDI6CWxvbmcJCTB4M0Q2RjkwQUUsMHhCMUU3NUNDNwkjIDE2MzgxIExPRzIgVFJBSUwKClBJOglsb25nCQkweDQwMDAwMDAwLDB4QzkwRkRBQTIsMHgyMTY4QzIzNSwweDAwMDAwMDAwClBJQlkyOglsb25nCQkweDNGRkYwMDAwLDB4QzkwRkRBQTIsMHgyMTY4QzIzNSwweDAwMDAwMDAwCgpUV09CWVBJOgoJbG9uZwkJMHgzRkU0NUYzMCwweDZEQzlDODgzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlfZnBzcF9vdmZsKCk6IDA2MEZQU1AgZW50cnkgcG9pbnQgZm9yIEZQIE92ZXJmbG93IGV4Y2VwdGlvbi4JIwojCQkJCQkJCQkJIwojCVRoaXMgaGFuZGxlciBzaG91bGQgYmUgdGhlIGZpcnN0IGNvZGUgZXhlY3V0ZWQgdXBvbiB0YWtpbmcgdGhlCSMKIwlGUCBPdmVyZmxvdyBleGNlcHRpb24gaW4gYW4gb3BlcmF0aW5nIHN5c3RlbS4JCQkjCiMJCQkJCQkJCQkjCiMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlfaW1lbV9yZWFkX2xvbmcoKSAtIHJlYWQgaW5zdHJ1Y3Rpb24gbG9uZ3dvcmQJCQkjCiMJZml4X3NrZXdlZF9vcHMoKSAtIGFkanVzdCBzcmMgb3BlcmFuZCBpbiBmc2F2ZSBmcmFtZQkJIwojCXNldF90YWdfeCgpIC0gZGV0ZXJtaW5lIG9wdHlwZSBvZiBzcmMvZHN0IG9wZXJhbmRzCQkjCiMJc3RvcmVfZnByZWcoKSAtIHN0b3JlIG9wY2xhc3MgMCBvciAyIHJlc3VsdCB0byBGUCByZWdmaWxlCSMKIwl1bm5vcm1fZml4KCkgLSBjaGFuZ2UgVU5OT1JNIG9wZXJhbmRzIHRvIE5PUk0gb3IgWkVSTwkJIwojCWxvYWRfZnBuMigpIC0gbG9hZCBkc3Qgb3BlcmFuZCBmcm9tIEZQIHJlZ2ZpbGUJCQkjCiMJZm91dCgpIC0gZW11bGF0ZSBhbiBvcGNsYXNzIDMgaW5zdHJ1Y3Rpb24JCQkjCiMJdGJsX3Vuc3VwcCAtIGFkZCBvZiB0YWJsZSBvZiBlbXVsYXRpb24gcm91dGluZXMgZm9yIG9wY2xhc3MgMCwyCSMKIwlfZnBzcF9kb25lKCkgLSAiY2FsbG91dCIgZm9yIDA2MEZQU1AgZXhpdCAoYWxsIHdvcmsgZG9uZSEpCSMKIwlfcmVhbF9vdmZsKCkgLSAiY2FsbG91dCIgZm9yIE92ZXJmbG93IGV4Y2VwdGlvbiBlbmFibGVkIGNvZGUJIwojCV9yZWFsX2luZXgoKSAtICJjYWxsb3V0IiBmb3IgSW5leGFjdCBleGNlcHRpb24gZW5hYmxlZCBjb2RlCSMKIwlfcmVhbF90cmFjZSgpIC0gImNhbGxvdXQiIGZvciBUcmFjZSBleGNlcHRpb24gY29kZQkJIwojCQkJCQkJCQkJIwojIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJLSBUaGUgc3lzdGVtIHN0YWNrIGNvbnRhaW5zIHRoZSBGUCBPdmZsIGV4Y2VwdGlvbiBzdGFjayBmcmFtZQkjCiMJLSBUaGUgZnNhdmUgZnJhbWUgY29udGFpbnMgdGhlIHNvdXJjZSBvcGVyYW5kCQkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJT3ZlcmZsb3cgRXhjZXB0aW9uIGVuYWJsZWQ6CQkJCQkjCiMJLSBUaGUgc3lzdGVtIHN0YWNrIGlzIHVuY2hhbmdlZAkJCQkJIwojCS0gVGhlIGZzYXZlIGZyYW1lIGNvbnRhaW5zIHRoZSBhZGp1c3RlZCBzcmMgb3AgZm9yIG9wY2xhc3MgMCwyCSMKIwlPdmVyZmxvdyBFeGNlcHRpb24gZGlzYWJsZWQ6CQkJCQkjCiMJLSBUaGUgc3lzdGVtIHN0YWNrIGlzIHVuY2hhbmdlZAkJCQkJIwojCS0gVGhlICJleGNlcHRpb24gcHJlc2VudCIgZmxhZyBpbiB0aGUgZnNhdmUgZnJhbWUgaXMgY2xlYXJlZAkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlPbiB0aGUgMDYwLCBpZiBhbiBGUCBvdmVyZmxvdyBpcyBwcmVzZW50IGFzIHRoZSByZXN1bHQgb2YgYW55CSMKIyBpbnN0cnVjdGlvbiwgdGhlIDA2MCB3aWxsIHRha2UgYW4gb3ZlcmZsb3cgZXhjZXB0aW9uIHdoZXRoZXIgdGhlCSMKIyBleGNlcHRpb24gaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBpbiB0aGUgRlBDUi4gRm9yIHRoZSBkaXNhYmxlZCBjYXNlLAkjCiMgVGhpcyBoYW5kbGVyIGVtdWxhdGVzIHRoZSBpbnN0cnVjdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0aGUgY29ycmVjdAkjCiMgZGVmYXVsdCByZXN1bHQgc2hvdWxkIGJlIGZvciB0aGUgb3BlcmF0aW9uLiBUaGlzIGRlZmF1bHQgcmVzdWx0IGlzCSMKIyB0aGVuIHN0b3JlZCBpbiBlaXRoZXIgdGhlIEZQIHJlZ2ZpbGUsIGRhdGEgcmVnZmlsZSwgb3IgbWVtb3J5LgkjCiMgRmluYWxseSwgdGhlIGhhbmRsZXIgZXhpdHMgdGhyb3VnaCB0aGUgImNhbGxvdXQiIF9mcHNwX2RvbmUoKQkJIwojIGRlbm90aW5nIHRoYXQgbm8gZXhjZXB0aW9uYWwgY29uZGl0aW9ucyBleGlzdCB3aXRoaW4gdGhlIG1hY2hpbmUuCSMKIwlJZiB0aGUgZXhjZXB0aW9uIGlzIGVuYWJsZWQsIHRoZW4gdGhpcyBoYW5kbGVyIG11c3QgY3JlYXRlIHRoZQkjCiMgZXhjZXB0aW9uYWwgb3BlcmFuZCBhbmQgcGxhdmUgaXQgaW4gdGhlIGZzYXZlIHN0YXRlIGZyYW1lLCBhbmQgc3RvcmUJIwojIHRoZSBkZWZhdWx0IHJlc3VsdCAob25seSBpZiB0aGUgaW5zdHJ1Y3Rpb24gaXMgb3BjbGFzcyAzKS4gRm9yCSMKIyBleGNlcHRpb25zIGVuYWJsZWQsIHRoaXMgaGFuZGxlciBtdXN0IGV4aXQgdGhyb3VnaCB0aGUgImNhbGxvdXQiCSMKIyBfcmVhbF9vdmZsKCkgc28gdGhhdCB0aGUgb3BlcmF0aW5nIHN5c3RlbSBlbmFibGVkIG92ZXJmbG93IGhhbmRsZXIJIwojIGNhbiBoYW5kbGUgdGhpcyBjYXNlLgkJCQkJCQkjCiMJVHdvIG90aGVyIGNvbmRpdGlvbnMgZXhpc3QuIEZpcnN0LCBpZiBvdmVyZmxvdyB3YXMgZGlzYWJsZWQJIwojIGJ1dCB0aGUgaW5leGFjdCBleGNlcHRpb24gd2FzIGVuYWJsZWQsIHRoaXMgaGFuZGxlciBtdXN0IGV4aXQJCSMKIyB0aHJvdWdoIHRoZSAiY2FsbG91dCIgX3JlYWxfaW5leCgpIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgcmVzdWx0CSMKIyB3YXMgaW5leGFjdC4JCQkJCQkJCSMKIwlBbHNvLCBpbiB0aGUgY2FzZSBvZiBhbiBvcGNsYXNzIHRocmVlIGluc3RydWN0aW9uIHdoZXJlCQkjCiMgb3ZlcmZsb3cgd2FzIGRpc2FibGVkIGFuZCB0aGUgdHJhY2UgZXhjZXB0aW9uIHdhcyBlbmFibGVkLCB0aGlzCSMKIyBoYW5kbGVyIG11c3QgZXhpdCB0aHJvdWdoIHRoZSAiY2FsbG91dCIgX3JlYWxfdHJhY2UoKS4JCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCWdsb2JhbAkJX2Zwc3Bfb3ZmbApfZnBzcF9vdmZsOgoKIyQjCXN1Yi5sCQkmMjQsJXNwCQkJIyBtYWtlIHJvb20gZm9yIHNyYy9kc3QKCglsaW5rLncJCSVhNiwmLUxPQ0FMX1NJWkUJIyBpbml0IHN0YWNrIGZyYW1lCgoJZnNhdmUJCUZQX1NSQyglYTYpCQkjIGdyYWIgdGhlICJidXN5IiBmcmFtZQoKCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLCVmcGlhcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCglmbW92bS54CQkmMHhjMCxFWENfRlBSRUdTKCVhNikJIyBzYXZlIGZwMC1mcDEgb24gc3RhY2sKCiMgdGhlIEZQSUFSIGhvbGRzIHRoZSAiY3VycmVudCBQQyIgb2YgdGhlIGZhdWx0aW5nIGluc3RydWN0aW9uCgltb3YubAkJVVNFUl9GUElBUiglYTYpLEVYQ19FWFRXUFRSKCVhNikKCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKCWJzci5sCQlfaW1lbV9yZWFkX2xvbmcJCSMgZmV0Y2ggdGhlIGluc3RydWN0aW9uIHdvcmRzCgltb3YubAkJJWQwLEVYQ19PUFdPUkQoJWE2KQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoJYnRzdAkJJjB4NSxFWENfQ01EUkVHKCVhNikJIyBpcyBpbnN0ciBhbiBmbW92ZSBvdXQ/CglibmUudwkJZm92Zmxfb3V0CgoKCWxlYQkJRlBfU1JDKCVhNiksJWEwCQkjIHBhc3M6IHB0ciB0byBzcmMgb3AKCWJzci5sCQlmaXhfc2tld2VkX29wcwkJIyBmaXggc3JjIG9wCgojIHNpbmNlLCBJIGJlbGlldmUsIG9ubHkgTk9STXMgYW5kIERFTk9STXMgY2FuIGNvbWUgdGhyb3VnaCBoZXJlLAojIG1heWJlIHdlIGNhbiBhdm9pZCB0aGUgc3Vicm91dGluZSBjYWxsLgoJbGVhCQlGUF9TUkMoJWE2KSwlYTAJCSMgcGFzczogcHRyIHRvIHNyYyBvcAoJYnNyLmwJCXNldF90YWdfeAkJIyB0YWcgdGhlIG9wZXJhbmQgdHlwZQoJbW92LmIJCSVkMCxTVEFHKCVhNikJCSMgbWF5YmUgTk9STSxERU5PUk0KCiMgYml0IGZpdmUgb2YgdGhlIGZwIGV4dGVuc2lvbiB3b3JkIHNlcGFyYXRlcyB0aGUgbW9uYWRpYyBhbmQgZHlhZGljIG9wZXJhdGlvbnMKIyB0aGF0IGNhbiBwYXNzIHRocm91Z2ggZnBzcF9vdmZsKCkuIHJlbWVtYmVyIHRoYXQgZmNtcCwgZnRzdCwgYW5kIGZzaW5jb3MKIyB3aWxsIG5ldmVyIHRha2UgdGhpcyBleGNlcHRpb24uCglidHN0CQkmMHg1LDErRVhDX0NNRFJFRyglYTYpCSMgaXMgb3BlcmF0aW9uIG1vbmFkaWMgb3IgZHlhZGljPwoJYmVxLmIJCWZvdmZsX2V4dHJhY3QJCSMgbW9uYWRpYwoKCWJmZXh0dQkJRVhDX0NNRFJFRyglYTYpeyY2OiYzfSwlZDAgIyBkeWFkaWM7IGxvYWQgZHN0IHJlZwoJYnNyLmwJCWxvYWRfZnBuMgkJIyBsb2FkIGRzdCBpbnRvIEZQX0RTVAoKCWxlYQkJRlBfRFNUKCVhNiksJWEwCQkjIHBhc3M6IHB0ciB0byBkc3Qgb3AKCWJzci5sCQlzZXRfdGFnX3gJCSMgdGFnIHRoZSBvcGVyYW5kIHR5cGUKCWNtcGkuYgkJJWQwLCZVTk5PUk0JCSMgaXMgb3BlcmFuZCBhbiBVTk5PUk0/CglibmUuYgkJZm92Zmxfb3AyX2RvbmUJCSMgbm8KCWJzci5sCQl1bm5vcm1fZml4CQkjIHllczsgY29udmVydCB0byBOT1JNLERFTk9STSxvciBaRVJPCmZvdmZsX29wMl9kb25lOgoJbW92LmIJCSVkMCxEVEFHKCVhNikJCSMgc2F2ZSBkc3Qgb3B0eXBlIHRhZwoKZm92ZmxfZXh0cmFjdDoKCiMkIwltb3YubAkJRlBfU1JDX0VYKCVhNiksVFJBUF9TUkNPUF9FWCglYTYpCiMkIwltb3YubAkJRlBfU1JDX0hJKCVhNiksVFJBUF9TUkNPUF9ISSglYTYpCiMkIwltb3YubAkJRlBfU1JDX0xPKCVhNiksVFJBUF9TUkNPUF9MTyglYTYpCiMkIwltb3YubAkJRlBfRFNUX0VYKCVhNiksVFJBUF9EU1RPUF9FWCglYTYpCiMkIwltb3YubAkJRlBfRFNUX0hJKCVhNiksVFJBUF9EU1RPUF9ISSglYTYpCiMkIwltb3YubAkJRlBfRFNUX0xPKCVhNiksVFJBUF9EU1RPUF9MTyglYTYpCgoJY2xyLmwJCSVkMAoJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3Mgcm5kIHByZWMvbW9kZQoKCW1vdi5iCQkxK0VYQ19DTURSRUcoJWE2KSwlZDEKCWFuZGkudwkJJjB4MDA3ZiwlZDEJCSMgZXh0cmFjdCBleHRlbnNpb24KCglhbmRpLmwJCSYweDAwZmYwMWZmLFVTRVJfRlBTUiglYTYpICMgemVybyBhbGwgYnV0IGFjY3VyZWQgZmllbGQKCglmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBjdXJyZW50IGNvbnRyb2wgcmVncwoJZm1vdi5sCQkmMHgwLCVmcHNyCgoJbGVhCQlGUF9TUkMoJWE2KSwlYTAKCWxlYQkJRlBfRFNUKCVhNiksJWExCgojIG1heWJlIHdlIGNhbiBtYWtlIHRoZXNlIGVudHJ5IHBvaW50cyBPTkxZIHRoZSBPVkZMIGVudHJ5IHBvaW50cyBvZiBlYWNoIHJvdXRpbmUuCgltb3YubAkJKHRibF91bnN1cHAubCwlcGMsJWQxLncqNCksJWQxICMgZmV0Y2ggcm91dGluZSBhZGRyCglqc3IJCSh0YmxfdW5zdXBwLmwsJXBjLCVkMS5sKjEpCgojIHRoZSBvcGVyYXRpb24gaGFzIGJlZW4gZW11bGF0ZWQuIHRoZSByZXN1bHQgaXMgaW4gZnAwLgojIHRoZSBFWE9QLCBpZiBhbiBleGNlcHRpb24gb2NjdXJyZWQsIGlzIGluIGZwMS4KIyB3ZSBtdXN0IHNhdmUgdGhlIGRlZmF1bHQgcmVzdWx0IHJlZ2FyZGxlc3Mgb2Ygd2hldGhlcgojIHRyYXBzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkLgoJYmZleHR1CQlFWENfQ01EUkVHKCVhNil7JjY6JjN9LCVkMAoJYnNyLmwJCXN0b3JlX2ZwcmVnCgojIHRoZSBleGNlcHRpb25hbCBwb3NzaWJpbGl0aWVzIHdlIGhhdmUgbGVmdCBvdXJzZWx2ZXMgd2l0aCBhcmUgT05MWSBvdmVyZmxvdwojIGFuZCBpbmV4YWN0LiBhbmQsIHRoZSBpbmV4YWN0IGlzIHN1Y2ggdGhhdCBvdmVyZmxvdyBvY2N1cnJlZCBhbmQgd2FzIGRpc2FibGVkCiMgYnV0IGluZXhhY3Qgd2FzIGVuYWJsZWQuCglidHN0CQkmb3ZmbF9iaXQsRlBDUl9FTkFCTEUoJWE2KQoJYm5lLmIJCWZvdmZsX292Zmxfb24KCglidHN0CQkmaW5leDJfYml0LEZQQ1JfRU5BQkxFKCVhNikKCWJuZS5iCQlmb3ZmbF9pbmV4X29uCgoJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAtZnAxCglmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncwoJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQoKCXVubGsJCSVhNgojJCMJYWRkLmwJCSYyNCwlc3AKCWJyYS5sCQlfZnBzcF9kb25lCgojIG92ZXJmbG93IGlzIGVuYWJsZWQgQU5EIG92ZXJmbG93LCBvZiBjb3Vyc2UsIG9jY3VycmVkLiBzbywgd2UgaGF2ZSB0aGUgRVhPUAojIGluIGZwMS4gbm93LCBzaW1wbHkganVtcCB0byBfcmVhbF9vdmZsKCkhCmZvdmZsX292Zmxfb246CglmbW92bS54CQkmMHg0MCxGUF9TUkMoJWE2KQkjIHNhdmUgRVhPUCAoZnAxKSB0byBzdGFjawoKCW1vdi53CQkmMHhlMDA1LDIrRlBfU1JDKCVhNikJIyBzYXZlIGV4YyBzdGF0dXMKCglmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC1mcDEKCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCgltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCgoJZnJlc3RvcmUJRlBfU1JDKCVhNikJCSMgZG8gdGhpcyBhZnRlciBmbW92bSxvdGhlciBmPG9wPnMhCgoJdW5sawkJJWE2CgoJYnJhLmwJCV9yZWFsX292ZmwKCiMgb3ZlcmZsb3cgb2NjdXJyZWQgYnV0IGlzIGRpc2FibGVkLiBtZWFud2hpbGUsIGluZXhhY3QgaXMgZW5hYmxlZC4gdGhlcmVmb3JlLAojIHdlIG11c3QganVtcCB0byByZWFsX2luZXgoKS4KZm92ZmxfaW5leF9vbjoKCglmbW92bS54CQkmMHg0MCxGUF9TUkMoJWE2KQkjIHNhdmUgRVhPUCAoZnAxKSB0byBzdGFjawoKCW1vdi5iCQkmMHhjNCwxK0VYQ19WT0ZGKCVhNikJIyB2ZWN0b3Igb2Zmc2V0ID0gMHhjNAoJbW92LncJCSYweGUwMDEsMitGUF9TUkMoJWE2KQkjIHNhdmUgZXhjIHN0YXR1cwoKCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMQoJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKCglmcmVzdG9yZQlGUF9TUkMoJWE2KQkJIyBkbyB0aGlzIGFmdGVyIGZtb3ZtLG90aGVyIGY8b3A+cyEKCgl1bmxrCQklYTYKCglicmEubAkJX3JlYWxfaW5leAoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmZvdmZsX291dDoKCgojJCMJbW92LmwJCUZQX1NSQ19FWCglYTYpLFRSQVBfU1JDT1BfRVgoJWE2KQojJCMJbW92LmwJCUZQX1NSQ19ISSglYTYpLFRSQVBfU1JDT1BfSEkoJWE2KQojJCMJbW92LmwJCUZQX1NSQ19MTyglYTYpLFRSQVBfU1JDT1BfTE8oJWE2KQoKIyB0aGUgc3JjIG9wZXJhbmQgaXMgZGVmaW5pdGVseSBhIE5PUk0oISksIHNvIHRhZyBpdCBhcyBzdWNoCgltb3YuYgkJJk5PUk0sU1RBRyglYTYpCQkjIHNldCBzcmMgb3B0eXBlIHRhZwoKCWNsci5sCQklZDAKCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBwcmVjL21vZGUKCglhbmQubAkJJjB4ZmZmZjAwZmYsVVNFUl9GUFNSKCVhNikgIyB6ZXJvIGFsbCBidXQgYWNjdXJlZCBmaWVsZAoKCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIGN1cnJlbnQgY29udHJvbCByZWdzCglmbW92LmwJCSYweDAsJWZwc3IKCglsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzIHB0ciB0byBzcmMgb3BlcmFuZAoKCWJzci5sCQlmb3V0CgoJYnRzdAkJJm92ZmxfYml0LEZQQ1JfRU5BQkxFKCVhNikKCWJuZS53CQlmb3ZmbF9vdmZsX29uCgoJYnRzdAkJJmluZXgyX2JpdCxGUENSX0VOQUJMRSglYTYpCglibmUudwkJZm92ZmxfaW5leF9vbgoKCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMQoJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKCgl1bmxrCQklYTYKIyQjCWFkZC5sCQkmMjQsJXNwCgoJYnRzdAkJJjB4NywoJXNwKQkJIyBpcyB0cmFjZSBvbj8KCWJlcS5sCQlfZnBzcF9kb25lCQkjIG5vCgoJZm1vdi5sCQklZnBpYXIsMHg4KCVzcCkJCSMgIkN1cnJlbnQgUEMiIGlzIGluIEZQSUFSCgltb3YudwkJJjB4MjAyNCwweDYoJXNwKQkjIHN0ayBmbXQgPSAweDI7IHZvZmYgPSAweDAyNAoJYnJhLmwJCV9yZWFsX3RyYWNlCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlfZnBzcF91bmZsKCk6IDA2MEZQU1AgZW50cnkgcG9pbnQgZm9yIEZQIFVuZGVyZmxvdyBleGNlcHRpb24uCSMKIwkJCQkJCQkJCSMKIwlUaGlzIGhhbmRsZXIgc2hvdWxkIGJlIHRoZSBmaXJzdCBjb2RlIGV4ZWN1dGVkIHVwb24gdGFraW5nIHRoZQkjCiMJRlAgVW5kZXJmbG93IGV4Y2VwdGlvbiBpbiBhbiBvcGVyYXRpbmcgc3lzdGVtLgkJCSMKIwkJCQkJCQkJCSMKIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCV9pbWVtX3JlYWRfbG9uZygpIC0gcmVhZCBpbnN0cnVjdGlvbiBsb25nd29yZAkJCSMKIwlmaXhfc2tld2VkX29wcygpIC0gYWRqdXN0IHNyYyBvcGVyYW5kIGluIGZzYXZlIGZyYW1lCQkjCiMJc2V0X3RhZ194KCkgLSBkZXRlcm1pbmUgb3B0eXBlIG9mIHNyYy9kc3Qgb3BlcmFuZHMJCSMKIwlzdG9yZV9mcHJlZygpIC0gc3RvcmUgb3BjbGFzcyAwIG9yIDIgcmVzdWx0IHRvIEZQIHJlZ2ZpbGUJIwojCXVubm9ybV9maXgoKSAtIGNoYW5nZSBVTk5PUk0gb3BlcmFuZHMgdG8gTk9STSBvciBaRVJPCQkjCiMJbG9hZF9mcG4yKCkgLSBsb2FkIGRzdCBvcGVyYW5kIGZyb20gRlAgcmVnZmlsZQkJCSMKIwlmb3V0KCkgLSBlbXVsYXRlIGFuIG9wY2xhc3MgMyBpbnN0cnVjdGlvbgkJCSMKIwl0YmxfdW5zdXBwIC0gYWRkIG9mIHRhYmxlIG9mIGVtdWxhdGlvbiByb3V0aW5lcyBmb3Igb3BjbGFzcyAwLDIJIwojCV9mcHNwX2RvbmUoKSAtICJjYWxsb3V0IiBmb3IgMDYwRlBTUCBleGl0IChhbGwgd29yayBkb25lISkJIwojCV9yZWFsX292ZmwoKSAtICJjYWxsb3V0IiBmb3IgT3ZlcmZsb3cgZXhjZXB0aW9uIGVuYWJsZWQgY29kZQkjCiMJX3JlYWxfaW5leCgpIC0gImNhbGxvdXQiIGZvciBJbmV4YWN0IGV4Y2VwdGlvbiBlbmFibGVkIGNvZGUJIwojCV9yZWFsX3RyYWNlKCkgLSAiY2FsbG91dCIgZm9yIFRyYWNlIGV4Y2VwdGlvbiBjb2RlCQkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwktIFRoZSBzeXN0ZW0gc3RhY2sgY29udGFpbnMgdGhlIEZQIFVuZmwgZXhjZXB0aW9uIHN0YWNrIGZyYW1lCSMKIwktIFRoZSBmc2F2ZSBmcmFtZSBjb250YWlucyB0aGUgc291cmNlIG9wZXJhbmQJCQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlVbmRlcmZsb3cgRXhjZXB0aW9uIGVuYWJsZWQ6CQkJCQkjCiMJLSBUaGUgc3lzdGVtIHN0YWNrIGlzIHVuY2hhbmdlZAkJCQkJIwojCS0gVGhlIGZzYXZlIGZyYW1lIGNvbnRhaW5zIHRoZSBhZGp1c3RlZCBzcmMgb3AgZm9yIG9wY2xhc3MgMCwyCSMKIwlVbmRlcmZsb3cgRXhjZXB0aW9uIGRpc2FibGVkOgkJCQkJIwojCS0gVGhlIHN5c3RlbSBzdGFjayBpcyB1bmNoYW5nZWQJCQkJCSMKIwktIFRoZSAiZXhjZXB0aW9uIHByZXNlbnQiIGZsYWcgaW4gdGhlIGZzYXZlIGZyYW1lIGlzIGNsZWFyZWQJIwojCQkJCQkJCQkJIwojIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJT24gdGhlIDA2MCwgaWYgYW4gRlAgdW5kZXJmbG93IGlzIHByZXNlbnQgYXMgdGhlIHJlc3VsdCBvZiBhbnkJIwojIGluc3RydWN0aW9uLCB0aGUgMDYwIHdpbGwgdGFrZSBhbiB1bmRlcmZsb3cgZXhjZXB0aW9uIHdoZXRoZXIgdGhlCSMKIyBleGNlcHRpb24gaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBpbiB0aGUgRlBDUi4gRm9yIHRoZSBkaXNhYmxlZCBjYXNlLAkjCiMgVGhpcyBoYW5kbGVyIGVtdWxhdGVzIHRoZSBpbnN0cnVjdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0aGUgY29ycmVjdAkjCiMgZGVmYXVsdCByZXN1bHQgc2hvdWxkIGJlIGZvciB0aGUgb3BlcmF0aW9uLiBUaGlzIGRlZmF1bHQgcmVzdWx0IGlzCSMKIyB0aGVuIHN0b3JlZCBpbiBlaXRoZXIgdGhlIEZQIHJlZ2ZpbGUsIGRhdGEgcmVnZmlsZSwgb3IgbWVtb3J5LgkjCiMgRmluYWxseSwgdGhlIGhhbmRsZXIgZXhpdHMgdGhyb3VnaCB0aGUgImNhbGxvdXQiIF9mcHNwX2RvbmUoKQkJIwojIGRlbm90aW5nIHRoYXQgbm8gZXhjZXB0aW9uYWwgY29uZGl0aW9ucyBleGlzdCB3aXRoaW4gdGhlIG1hY2hpbmUuCSMKIwlJZiB0aGUgZXhjZXB0aW9uIGlzIGVuYWJsZWQsIHRoZW4gdGhpcyBoYW5kbGVyIG11c3QgY3JlYXRlIHRoZQkjCiMgZXhjZXB0aW9uYWwgb3BlcmFuZCBhbmQgcGxhdmUgaXQgaW4gdGhlIGZzYXZlIHN0YXRlIGZyYW1lLCBhbmQgc3RvcmUJIwojIHRoZSBkZWZhdWx0IHJlc3VsdCAob25seSBpZiB0aGUgaW5zdHJ1Y3Rpb24gaXMgb3BjbGFzcyAzKS4gRm9yCSMKIyBleGNlcHRpb25zIGVuYWJsZWQsIHRoaXMgaGFuZGxlciBtdXN0IGV4aXQgdGhyb3VnaCB0aGUgImNhbGxvdXQiCSMKIyBfcmVhbF91bmZsKCkgc28gdGhhdCB0aGUgb3BlcmF0aW5nIHN5c3RlbSBlbmFibGVkIG92ZXJmbG93IGhhbmRsZXIJIwojIGNhbiBoYW5kbGUgdGhpcyBjYXNlLgkJCQkJCQkjCiMJVHdvIG90aGVyIGNvbmRpdGlvbnMgZXhpc3QuIEZpcnN0LCBpZiB1bmRlcmZsb3cgd2FzIGRpc2FibGVkCSMKIyBidXQgdGhlIGluZXhhY3QgZXhjZXB0aW9uIHdhcyBlbmFibGVkIGFuZCB0aGUgcmVzdWx0IHdhcyBpbmV4YWN0LAkjCiMgdGhpcyBoYW5kbGVyIG11c3QgZXhpdCB0aHJvdWdoIHRoZSAiY2FsbG91dCIgX3JlYWxfaW5leCgpLgkJIwojIHdhcyBpbmV4YWN0LgkJCQkJCQkJIwojCUFsc28sIGluIHRoZSBjYXNlIG9mIGFuIG9wY2xhc3MgdGhyZWUgaW5zdHJ1Y3Rpb24gd2hlcmUJCSMKIyB1bmRlcmZsb3cgd2FzIGRpc2FibGVkIGFuZCB0aGUgdHJhY2UgZXhjZXB0aW9uIHdhcyBlbmFibGVkLCB0aGlzCSMKIyBoYW5kbGVyIG11c3QgZXhpdCB0aHJvdWdoIHRoZSAiY2FsbG91dCIgX3JlYWxfdHJhY2UoKS4JCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCWdsb2JhbAkJX2Zwc3BfdW5mbApfZnBzcF91bmZsOgoKIyQjCXN1Yi5sCQkmMjQsJXNwCQkJIyBtYWtlIHJvb20gZm9yIHNyYy9kc3QKCglsaW5rLncJCSVhNiwmLUxPQ0FMX1NJWkUJIyBpbml0IHN0YWNrIGZyYW1lCgoJZnNhdmUJCUZQX1NSQyglYTYpCQkjIGdyYWIgdGhlICJidXN5IiBmcmFtZQoKCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLCVmcGlhcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCglmbW92bS54CQkmMHhjMCxFWENfRlBSRUdTKCVhNikJIyBzYXZlIGZwMC1mcDEgb24gc3RhY2sKCiMgdGhlIEZQSUFSIGhvbGRzIHRoZSAiY3VycmVudCBQQyIgb2YgdGhlIGZhdWx0aW5nIGluc3RydWN0aW9uCgltb3YubAkJVVNFUl9GUElBUiglYTYpLEVYQ19FWFRXUFRSKCVhNikKCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKCWJzci5sCQlfaW1lbV9yZWFkX2xvbmcJCSMgZmV0Y2ggdGhlIGluc3RydWN0aW9uIHdvcmRzCgltb3YubAkJJWQwLEVYQ19PUFdPUkQoJWE2KQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoJYnRzdAkJJjB4NSxFWENfQ01EUkVHKCVhNikJIyBpcyBpbnN0ciBhbiBmbW92ZSBvdXQ/CglibmUudwkJZnVuZmxfb3V0CgoKCWxlYQkJRlBfU1JDKCVhNiksJWEwCQkjIHBhc3M6IHB0ciB0byBzcmMgb3AKCWJzci5sCQlmaXhfc2tld2VkX29wcwkJIyBmaXggc3JjIG9wCgoJbGVhCQlGUF9TUkMoJWE2KSwlYTAJCSMgcGFzczogcHRyIHRvIHNyYyBvcAoJYnNyLmwJCXNldF90YWdfeAkJIyB0YWcgdGhlIG9wZXJhbmQgdHlwZQoJbW92LmIJCSVkMCxTVEFHKCVhNikJCSMgbWF5YmUgTk9STSxERU5PUk0KCiMgYml0IGZpdmUgb2YgdGhlIGZwIGV4dCB3b3JkIHNlcGFyYXRlcyB0aGUgbW9uYWRpYyBhbmQgZHlhZGljIG9wZXJhdGlvbnMKIyB0aGF0IGNhbiBwYXNzIHRocm91Z2ggZnBzcF91bmZsKCkuIHJlbWVtYmVyIHRoYXQgZmNtcCwgYW5kIGZ0c3QKIyB3aWxsIG5ldmVyIHRha2UgdGhpcyBleGNlcHRpb24uCglidHN0CQkmMHg1LDErRVhDX0NNRFJFRyglYTYpCSMgaXMgb3AgbW9uYWRpYyBvciBkeWFkaWM/CgliZXEuYgkJZnVuZmxfZXh0cmFjdAkJIyBtb25hZGljCgojIG5vdywgd2hhdCdzIGxlZnQgdGhhdCdzIG5vdCBkeWFkaWMgaXMgZnNpbmNvcy4gd2UgY2FuIGRpc3Rpbmd1aXNoIGl0CiMgZnJvbSBhbGwgZHlhZGljcyBieSB0aGUgJzAxMTB4eHggcGF0dGVybgoJYnRzdAkJJjB4NCwxK0VYQ19DTURSRUcoJWE2KQkjIGlzIG9wIGFuIGZzaW5jb3M/CglibmUuYgkJZnVuZmxfZXh0cmFjdAkJIyB5ZXMKCgliZmV4dHUJCUVYQ19DTURSRUcoJWE2KXsmNjomM30sJWQwICMgZHlhZGljOyBsb2FkIGRzdCByZWcKCWJzci5sCQlsb2FkX2ZwbjIJCSMgbG9hZCBkc3QgaW50byBGUF9EU1QKCglsZWEJCUZQX0RTVCglYTYpLCVhMAkJIyBwYXNzOiBwdHIgdG8gZHN0IG9wCglic3IubAkJc2V0X3RhZ194CQkjIHRhZyB0aGUgb3BlcmFuZCB0eXBlCgljbXBpLmIJCSVkMCwmVU5OT1JNCQkjIGlzIG9wZXJhbmQgYW4gVU5OT1JNPwoJYm5lLmIJCWZ1bmZsX29wMl9kb25lCQkjIG5vCglic3IubAkJdW5ub3JtX2ZpeAkJIyB5ZXM7IGNvbnZlcnQgdG8gTk9STSxERU5PUk0sb3IgWkVSTwpmdW5mbF9vcDJfZG9uZToKCW1vdi5iCQklZDAsRFRBRyglYTYpCQkjIHNhdmUgZHN0IG9wdHlwZSB0YWcKCmZ1bmZsX2V4dHJhY3Q6CgojJCMJbW92LmwJCUZQX1NSQ19FWCglYTYpLFRSQVBfU1JDT1BfRVgoJWE2KQojJCMJbW92LmwJCUZQX1NSQ19ISSglYTYpLFRSQVBfU1JDT1BfSEkoJWE2KQojJCMJbW92LmwJCUZQX1NSQ19MTyglYTYpLFRSQVBfU1JDT1BfTE8oJWE2KQojJCMJbW92LmwJCUZQX0RTVF9FWCglYTYpLFRSQVBfRFNUT1BfRVgoJWE2KQojJCMJbW92LmwJCUZQX0RTVF9ISSglYTYpLFRSQVBfRFNUT1BfSEkoJWE2KQojJCMJbW92LmwJCUZQX0RTVF9MTyglYTYpLFRSQVBfRFNUT1BfTE8oJWE2KQoKCWNsci5sCQklZDAKCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBwcmVjL21vZGUKCgltb3YuYgkJMStFWENfQ01EUkVHKCVhNiksJWQxCglhbmRpLncJCSYweDAwN2YsJWQxCQkjIGV4dHJhY3QgZXh0ZW5zaW9uCgoJYW5kaS5sCQkmMHgwMGZmMDFmZixVU0VSX0ZQU1IoJWE2KQoKCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIGN1cnJlbnQgY29udHJvbCByZWdzCglmbW92LmwJCSYweDAsJWZwc3IKCglsZWEJCUZQX1NSQyglYTYpLCVhMAoJbGVhCQlGUF9EU1QoJWE2KSwlYTEKCiMgbWF5YmUgd2UgY2FuIG1ha2UgdGhlc2UgZW50cnkgcG9pbnRzIE9OTFkgdGhlIE9WRkwgZW50cnkgcG9pbnRzIG9mIGVhY2ggcm91dGluZS4KCW1vdi5sCQkodGJsX3Vuc3VwcC5sLCVwYywlZDEudyo0KSwlZDEgIyBmZXRjaCByb3V0aW5lIGFkZHIKCWpzcgkJKHRibF91bnN1cHAubCwlcGMsJWQxLmwqMSkKCgliZmV4dHUJCUVYQ19DTURSRUcoJWE2KXsmNjomM30sJWQwCglic3IubAkJc3RvcmVfZnByZWcKCiMgVGhlIGAwNjAgRlBVIG11bHRpcGxpZXIgaGFyZHdhcmUgaXMgc3VjaCB0aGF0IGlmIHRoZSByZXN1bHQgb2YgYQojIG11bHRpcGx5IG9wZXJhdGlvbiBpcyB0aGUgc21hbGxlc3QgcG9zc2libGUgbm9ybWFsaXplZCBudW1iZXIKIyAoMHgwMDAwMDAwMF84MDAwMDAwMF8wMDAwMDAwMCksIHRoZW4gdGhlIG1hY2hpbmUgd2lsbCB0YWtlIGFuCiMgdW5kZXJmbG93IGV4Y2VwdGlvbi4gU2luY2UgdGhpcyBpcyBpbmNvcnJlY3QsIHdlIG5lZWQgdG8gY2hlY2sKIyBpZiBvdXIgZW11bGF0aW9uLCBhZnRlciByZS1kb2luZyB0aGUgb3BlcmF0aW9uLCBkZWNpZGVkIHRoYXQKIyBubyB1bmRlcmZsb3cgd2FzIGNhbGxlZCBmb3IuIFdlIGRvIHRoZXNlIGNoZWNrcyBvbmx5IGluCiMgZnVuZmxfe3VuZmwsaW5leH1fb24oKSBiZWNhdXNlIHcvIGJvdGggZXhjZXB0aW9ucyBkaXNhYmxlZCwgdGhpcwojIHNwZWNpYWwgY2FzZSB3aWxsIHNpbXBseSBleGl0IGdyYWNlZnVsbHkgd2l0aCB0aGUgY29ycmVjdCByZXN1bHQuCgojIHRoZSBleGNlcHRpb25hbCBwb3NzaWJpbGl0aWVzIHdlIGhhdmUgbGVmdCBvdXJzZWx2ZXMgd2l0aCBhcmUgT05MWSBvdmVyZmxvdwojIGFuZCBpbmV4YWN0LiBhbmQsIHRoZSBpbmV4YWN0IGlzIHN1Y2ggdGhhdCBvdmVyZmxvdyBvY2N1cnJlZCBhbmQgd2FzIGRpc2FibGVkCiMgYnV0IGluZXhhY3Qgd2FzIGVuYWJsZWQuCglidHN0CQkmdW5mbF9iaXQsRlBDUl9FTkFCTEUoJWE2KQoJYm5lLmIJCWZ1bmZsX3VuZmxfb24KCmZ1bmZsX2Noa2luZXg6CglidHN0CQkmaW5leDJfYml0LEZQQ1JfRU5BQkxFKCVhNikKCWJuZS5iCQlmdW5mbF9pbmV4X29uCgpmdW5mbF9leGl0OgoJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAtZnAxCglmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncwoJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQoKCXVubGsJCSVhNgojJCMJYWRkLmwJCSYyNCwlc3AKCWJyYS5sCQlfZnBzcF9kb25lCgojIG92ZXJmbG93IGlzIGVuYWJsZWQgQU5EIG92ZXJmbG93LCBvZiBjb3Vyc2UsIG9jY3VycmVkLiBzbywgd2UgaGF2ZSB0aGUgRVhPUAojIGluIGZwMSAoZG9uJ3QgZm9yZ2V0IHRvIHNhdmUgZnAwKS4gd2hhdCB0byBkbyBub3c/CiMgd2VsbCwgd2Ugc2ltcGx5IGhhdmUgdG8gZ2V0IHRvIGdvIHRvIF9yZWFsX3VuZmwoKSEKZnVuZmxfdW5mbF9vbjoKCiMgVGhlIGAwNjAgRlBVIG11bHRpcGxpZXIgaGFyZHdhcmUgaXMgc3VjaCB0aGF0IGlmIHRoZSByZXN1bHQgb2YgYQojIG11bHRpcGx5IG9wZXJhdGlvbiBpcyB0aGUgc21hbGxlc3QgcG9zc2libGUgbm9ybWFsaXplZCBudW1iZXIKIyAoMHgwMDAwMDAwMF84MDAwMDAwMF8wMDAwMDAwMCksIHRoZW4gdGhlIG1hY2hpbmUgd2lsbCB0YWtlIGFuCiMgdW5kZXJmbG93IGV4Y2VwdGlvbi4gU2luY2UgdGhpcyBpcyBpbmNvcnJlY3QsIHdlIGNoZWNrIGhlcmUgdG8gc2VlCiMgaWYgb3VyIGVtdWxhdGlvbiwgYWZ0ZXIgcmUtZG9pbmcgdGhlIG9wZXJhdGlvbiwgZGVjaWRlZCB0aGF0CiMgbm8gdW5kZXJmbG93IHdhcyBjYWxsZWQgZm9yLgoJYnRzdAkJJnVuZmxfYml0LEZQU1JfRVhDRVBUKCVhNikKCWJlcS53CQlmdW5mbF9jaGtpbmV4CgpmdW5mbF91bmZsX29uMjoKCWZtb3ZtLngJCSYweDQwLEZQX1NSQyglYTYpCSMgc2F2ZSBFWE9QIChmcDEpIHRvIHN0YWNrCgoJbW92LncJCSYweGUwMDMsMitGUF9TUkMoJWE2KQkjIHNhdmUgZXhjIHN0YXR1cwoKCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMQoJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKCglmcmVzdG9yZQlGUF9TUkMoJWE2KQkJIyBkbyB0aGlzIGFmdGVyIGZtb3ZtLG90aGVyIGY8b3A+cyEKCgl1bmxrCQklYTYKCglicmEubAkJX3JlYWxfdW5mbAoKIyB1bmRlZmxvdyBvY2N1cnJlZCBidXQgaXMgZGlzYWJsZWQuIG1lYW53aGlsZSwgaW5leGFjdCBpcyBlbmFibGVkLiB0aGVyZWZvcmUsCiMgd2UgbXVzdCBqdW1wIHRvIHJlYWxfaW5leCgpLgpmdW5mbF9pbmV4X29uOgoKIyBUaGUgYDA2MCBGUFUgbXVsdGlwbGllciBoYXJkd2FyZSBpcyBzdWNoIHRoYXQgaWYgdGhlIHJlc3VsdCBvZiBhCiMgbXVsdGlwbHkgb3BlcmF0aW9uIGlzIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBub3JtYWxpemVkIG51bWJlcgojICgweDAwMDAwMDAwXzgwMDAwMDAwXzAwMDAwMDAwKSwgdGhlbiB0aGUgbWFjaGluZSB3aWxsIHRha2UgYW4KIyB1bmRlcmZsb3cgZXhjZXB0aW9uLgojIEJ1dCwgd2hldGhlciBib2d1cyBvciBub3QsIGlmIGluZXhhY3QgaXMgZW5hYmxlZCBBTkQgaXQgb2NjdXJyZWQsCiMgdGhlbiB3ZSBoYXZlIHRvIGJyYW5jaCB0byByZWFsX2luZXguCgoJYnRzdAkJJmluZXgyX2JpdCxGUFNSX0VYQ0VQVCglYTYpCgliZXEudwkJZnVuZmxfZXhpdAoKZnVuZmxfaW5leF9vbjI6CgoJZm1vdm0ueAkJJjB4NDAsRlBfU1JDKCVhNikJIyBzYXZlIEVYT1AgdG8gc3RhY2sKCgltb3YuYgkJJjB4YzQsMStFWENfVk9GRiglYTYpCSMgdmVjdG9yIG9mZnNldCA9IDB4YzQKCW1vdi53CQkmMHhlMDAxLDIrRlBfU1JDKCVhNikJIyBzYXZlIGV4YyBzdGF0dXMKCglmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC1mcDEKCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCgltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCgoJZnJlc3RvcmUJRlBfU1JDKCVhNikJCSMgZG8gdGhpcyBhZnRlciBmbW92bSxvdGhlciBmPG9wPnMhCgoJdW5sawkJJWE2CgoJYnJhLmwJCV9yZWFsX2luZXgKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmZ1bmZsX291dDoKCgojJCMJbW92LmwJCUZQX1NSQ19FWCglYTYpLFRSQVBfU1JDT1BfRVgoJWE2KQojJCMJbW92LmwJCUZQX1NSQ19ISSglYTYpLFRSQVBfU1JDT1BfSEkoJWE2KQojJCMJbW92LmwJCUZQX1NSQ19MTyglYTYpLFRSQVBfU1JDT1BfTE8oJWE2KQoKIyB0aGUgc3JjIG9wZXJhbmQgaXMgZGVmaW5pdGVseSBhIE5PUk0oISksIHNvIHRhZyBpdCBhcyBzdWNoCgltb3YuYgkJJk5PUk0sU1RBRyglYTYpCQkjIHNldCBzcmMgb3B0eXBlIHRhZwoKCWNsci5sCQklZDAKCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBwcmVjL21vZGUKCglhbmQubAkJJjB4ZmZmZjAwZmYsVVNFUl9GUFNSKCVhNikgIyB6ZXJvIGFsbCBidXQgYWNjdXJlZCBmaWVsZAoKCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIGN1cnJlbnQgY29udHJvbCByZWdzCglmbW92LmwJCSYweDAsJWZwc3IKCglsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzIHB0ciB0byBzcmMgb3BlcmFuZAoKCWJzci5sCQlmb3V0CgoJYnRzdAkJJnVuZmxfYml0LEZQQ1JfRU5BQkxFKCVhNikKCWJuZS53CQlmdW5mbF91bmZsX29uMgoKCWJ0c3QJCSZpbmV4Ml9iaXQsRlBDUl9FTkFCTEUoJWE2KQoJYm5lLncJCWZ1bmZsX2luZXhfb24yCgoJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAtZnAxCglmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncwoJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQoKCXVubGsJCSVhNgojJCMJYWRkLmwJCSYyNCwlc3AKCglidHN0CQkmMHg3LCglc3ApCQkjIGlzIHRyYWNlIG9uPwoJYmVxLmwJCV9mcHNwX2RvbmUJCSMgbm8KCglmbW92LmwJCSVmcGlhciwweDgoJXNwKQkJIyAiQ3VycmVudCBQQyIgaXMgaW4gRlBJQVIKCW1vdi53CQkmMHgyMDI0LDB4Niglc3ApCSMgc3RrIGZtdCA9IDB4Mjsgdm9mZiA9IDB4MDI0CglicmEubAkJX3JlYWxfdHJhY2UKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCV9mcHNwX3Vuc3VwcCgpOiAwNjBGUFNQIGVudHJ5IHBvaW50IGZvciBGUCAiVW5pbXBsZW1lbnRlZAkjCiMJCSAgICAgICAgRGF0YSBUeXBlIiBleGNlcHRpb24uCQkJCSMKIwkJCQkJCQkJCSMKIwlUaGlzIGhhbmRsZXIgc2hvdWxkIGJlIHRoZSBmaXJzdCBjb2RlIGV4ZWN1dGVkIHVwb24gdGFraW5nIHRoZQkjCiMJRlAgVW5pbXBsZW1lbnRlZCBEYXRhIFR5cGUgZXhjZXB0aW9uIGluIGFuIG9wZXJhdGluZyBzeXN0ZW0uCSMKIwkJCQkJCQkJCSMKIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCV9pbWVtX3JlYWRfe3dvcmQsbG9uZ30oKSAtIHJlYWQgaW5zdHJ1Y3Rpb24gd29yZC9sb25nd29yZAkjCiMJZml4X3NrZXdlZF9vcHMoKSAtIGFkanVzdCBzcmMgb3BlcmFuZCBpbiBmc2F2ZSBmcmFtZQkJIwojCXNldF90YWdfeCgpIC0gZGV0ZXJtaW5lIG9wdHlwZSBvZiBzcmMvZHN0IG9wZXJhbmRzCQkjCiMJc3RvcmVfZnByZWcoKSAtIHN0b3JlIG9wY2xhc3MgMCBvciAyIHJlc3VsdCB0byBGUCByZWdmaWxlCSMKIwl1bm5vcm1fZml4KCkgLSBjaGFuZ2UgVU5OT1JNIG9wZXJhbmRzIHRvIE5PUk0gb3IgWkVSTwkJIwojCWxvYWRfZnBuMigpIC0gbG9hZCBkc3Qgb3BlcmFuZCBmcm9tIEZQIHJlZ2ZpbGUJCQkjCiMJbG9hZF9mcG4xKCkgLSBsb2FkIHNyYyBvcGVyYW5kIGZyb20gRlAgcmVnZmlsZQkJCSMKIwlmb3V0KCkgLSBlbXVsYXRlIGFuIG9wY2xhc3MgMyBpbnN0cnVjdGlvbgkJCSMKIwl0YmxfdW5zdXBwIC0gYWRkIG9mIHRhYmxlIG9mIGVtdWxhdGlvbiByb3V0aW5lcyBmb3Igb3BjbGFzcyAwLDIJIwojCV9yZWFsX2luZXgoKSAtICJjYWxsb3V0IiB0byBvcGVyYXRpbmcgc3lzdGVtIGluZXhhY3QgaGFuZGxlcgkjCiMJX2Zwc3BfZG9uZSgpIC0gImNhbGxvdXQiIGZvciBleGl0OyB3b3JrIGFsbCBkb25lCQkjCiMJX3JlYWxfdHJhY2UoKSAtICJjYWxsb3V0IiBmb3IgVHJhY2UgZW5hYmxlZCBleGNlcHRpb24JCSMKIwlmdW5pbXBfc2tldygpIC0gYWRqdXN0IGZzYXZlIHNyYyBvcHMgdG8gImluY29ycmVjdCIgdmFsdWUJIwojCV9yZWFsX3NuYW4oKSAtICJjYWxsb3V0IiBmb3IgU05BTiBleGNlcHRpb24JCQkjCiMJX3JlYWxfb3BlcnIoKSAtICJjYWxsb3V0IiBmb3IgT1BFUlIgZXhjZXB0aW9uCQkJIwojCV9yZWFsX292ZmwoKSAtICJjYWxsb3V0IiBmb3IgT1ZGTCBleGNlcHRpb24JCQkjCiMJX3JlYWxfdW5mbCgpIC0gImNhbGxvdXQiIGZvciBVTkZMIGV4Y2VwdGlvbgkJCSMKIwlnZXRfcGFja2VkKCkgLSBmZXRjaCBwYWNrZWQgb3BlcmFuZCBmcm9tIG1lbW9yeQkJCSMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCS0gVGhlIHN5c3RlbSBzdGFjayBjb250YWlucyB0aGUgIlVuaW1wIERhdGEgVHlwZSIgc3RrIGZyYW1lCSMKIwktIFRoZSBmc2F2ZSBmcmFtZSBjb250YWlucyB0aGUgc3NyYyBvcCAoZm9yIFVOTk9STS9ERU5PUk0pCSMKIwkJCQkJCQkJCSMKIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCUlmIEluZXhhY3QgZXhjZXB0aW9uIChvcGNsYXNzIDMpOgkJCQkjCiMJLSBUaGUgc3lzdGVtIHN0YWNrIGlzIGNoYW5nZWQgdG8gYW4gSW5leGFjdCBleGNlcHRpb24gc3RrIGZyYW1lCSMKIwlJZiBTTkFOIGV4Y2VwdGlvbiAob3BjbGFzcyAzKToJCQkJCSMKIwktIFRoZSBzeXN0ZW0gc3RhY2sgaXMgY2hhbmdlZCB0byBhbiBTTkFOIGV4Y2VwdGlvbiBzdGsgZnJhbWUJIwojCUlmIE9QRVJSIGV4Y2VwdGlvbiAob3BjbGFzcyAzKToJCQkJCSMKIwktIFRoZSBzeXN0ZW0gc3RhY2sgaXMgY2hhbmdlZCB0byBhbiBPUEVSUiBleGNlcHRpb24gc3RrIGZyYW1lCSMKIwlJZiBPVkZMIGV4Y2VwdGlvbiAob3BjbGFzcyAzKToJCQkJCSMKIwktIFRoZSBzeXN0ZW0gc3RhY2sgaXMgY2hhbmdlZCB0byBhbiBPVkZMIGV4Y2VwdGlvbiBzdGsgZnJhbWUJIwojCUlmIFVORkwgZXhjZXB0aW9uIChvcGNsYXNzIDMpOgkJCQkJIwojCS0gVGhlIHN5c3RlbSBzdGFjayBpcyBjaGFuZ2VkIHRvIGFuIFVORkwgZXhjZXB0aW9uIHN0YWNrIGZyYW1lCSMKIwlJZiBUcmFjZSBleGNlcHRpb24gZW5hYmxlZDoJCQkJCSMKIwktIFRoZSBzeXN0ZW0gc3RhY2sgaXMgY2hhbmdlZCB0byBhIFRyYWNlIGV4Y2VwdGlvbiBzdGFjayBmcmFtZQkjCiMJRWxzZTogKG5vcm1hbCBjYXNlKQkJCQkJCSMKIwktIENvcnJlY3QgcmVzdWx0IGhhcyBiZWVuIHN0b3JlZCBhcyBhcHByb3ByaWF0ZQkJCSMKIwkJCQkJCQkJCSMKIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCVR3byBtYWluIGluc3RydWN0aW9uIHR5cGVzIGNhbiBlbnRlciBoZXJlOiAoMSkgREVOT1JNIG9yIFVOTk9STQkjCiMgdW5pbXBsZW1lbnRlZCBkYXRhIHR5cGVzLiBUaGVzZSBjYW4gYmUgZWl0aGVyIG9wY2xhc3MgMCwyIG9yIDMJIwojIGluc3RydWN0aW9ucywgYW5kICgyKSBQQUNLRUQgdW5pbXBsZW1lbnRlZCBkYXRhIGZvcm1hdCBpbnN0cnVjdGlvbnMJIwojIGFsc28gb2Ygb3BjbGFzc2VzIDAsMiwgb3IgMy4JCQkJCQkjCiMJRm9yIFVOTk9STS9ERU5PUk0gb3BjbGFzcyAwIGFuZCAyLCB0aGUgaGFuZGxlciBmZXRjaGVzIHRoZSBzcmMJIwojIG9wZXJhbmQgZnJvbSB0aGUgZnNhdmUgc3RhdGUgZnJhbWUgYW5kIHRoZSBkc3Qgb3BlcmFuZCAoaWYgZHlhZGljKQkjCiMgZnJvbSB0aGUgRlAgcmVnaXN0ZXIgZmlsZS4gVGhlIGluc3RydWN0aW9uIGlzIHRoZW4gZW11bGF0ZWQgYnkJIwojIGNob29zaW5nIGFuIGVtdWxhdGlvbiByb3V0aW5lIGZyb20gYSB0YWJsZSBvZiByb3V0aW5lcyBpbmRleGVkIGJ5CSMKIyBpbnN0cnVjdGlvbiB0eXBlLiBPbmNlIHRoZSBpbnN0cnVjdGlvbiBoYXMgYmVlbiBlbXVsYXRlZCBhbmQgcmVzdWx0CSMKIyBzYXZlZCwgdGhlbiB3ZSBjaGVjayB0byBzZWUgaWYgYW55IGVuYWJsZWQgZXhjZXB0aW9ucyByZXN1bHRlZCBmcm9tCSMKIyBpbnN0cnVjdGlvbiBlbXVsYXRpb24uIElmIG5vbmUsIHRoZW4gd2UgZXhpdCB0aHJvdWdoIHRoZSAiY2FsbG91dCIJIwojIF9mcHNwX2RvbmUoKS4gSWYgdGhlcmUgaXMgYW4gZW5hYmxlZCBGUCBleGNlcHRpb24sIHRoZW4gd2UgaW5zZXJ0CSMKIyB0aGlzIGV4Y2VwdGlvbiBpbnRvIHRoZSBGUFUgaW4gdGhlIGZzYXZlIHN0YXRlIGZyYW1lIGFuZCB0aGVuIGV4aXQJIwojIHRocm91Z2ggX2Zwc3BfZG9uZSgpLgkJCQkJCQkjCiMJUEFDS0VEIG9wY2xhc3MgMCBhbmQgMiBpcyBzaW1pbGFyIGluIGhvdyB0aGUgaW5zdHJ1Y3Rpb24gaXMJIwojIGVtdWxhdGVkIGFuZCBleGNlcHRpb25zIGhhbmRsZWQuIFRoZSBkaWZmZXJlbmNlcyBvY2N1ciBpbiBob3cgdGhlCSMKIyBoYW5kbGVyIGxvYWRzIHRoZSBwYWNrZWQgb3AgKGJ5IGNhbGxpbmcgZ2V0X3BhY2tlZCgpIHJvdXRpbmUpIGFuZAkjCiMgYnkgdGhlIGZhY3QgdGhhdCBhIFRyYWNlIGV4Y2VwdGlvbiBjb3VsZCBiZSBwZW5kaW5nIGZvciBQQUNLRUQgb3BzLgkjCiMgSWYgYSBUcmFjZSBleGNlcHRpb24gaXMgcGVuZGluZywgdGhlbiB0aGUgY3VycmVudCBleGNlcHRpb24gc3RhY2sJIwojIGZyYW1lIGlzIGNoYW5nZWQgdG8gYSBUcmFjZSBleGNlcHRpb24gc3RhY2sgZnJhbWUgYW5kIGFuIGV4aXQgaXMJIwojIG1hZGUgdGhyb3VnaCBfcmVhbF90cmFjZSgpLgkJCQkJCSMKIwlGb3IgVU5OT1JNL0RFTk9STSBvcGNsYXNzIDMsIHRoZSBhY3R1YWwgbW92ZSBvdXQgdG8gbWVtb3J5IGlzCSMKIyBwZXJmb3JtZWQgYnkgY2FsbGluZyB0aGUgcm91dGluZSBmb3V0KCkuIElmIG5vIGV4Y2VwdGlvbiBzaG91bGQgb2NjdXIJIwojIGFzIHRoZSByZXN1bHQgb2YgZW11bGF0aW9uLCB0aGVuIGFuIGV4aXQgZWl0aGVyIG9jY3VycyB0aHJvdWdoCSMKIyBfZnBzcF9kb25lKCkgb3IgdGhyb3VnaCBfcmVhbF90cmFjZSgpIGlmIGEgVHJhY2UgZXhjZXB0aW9uIGlzIHBlbmRpbmcJIwojIChhIFRyYWNlIHN0YWNrIGZyYW1lIG11c3QgYmUgY3JlYXRlZCBoZXJlLCB0b28pLiBJZiBhbiBGUCBleGNlcHRpb24JIwojIHNob3VsZCBvY2N1ciwgdGhlbiB3ZSBtdXN0IGNyZWF0ZSBhbiBleGNlcHRpb24gc3RhY2sgZnJhbWUgb2YgdGhhdAkjCiMgdHlwZSBhbmQganVtcCB0byBlaXRoZXIgX3JlYWxfc25hbigpLCBfcmVhbF9vcGVycigpLCBfcmVhbF9pbmV4KCksCSMKIyBfcmVhbF91bmZsKCksIG9yIF9yZWFsX292ZmwoKSBhcyBhcHByb3ByaWF0ZS4gUEFDS0VEIG9wY2xhc3MgMwkjCiMgZW11bGF0aW9uIGlzIHBlcmZvcm1lZCBpbiBhIHNpbWlsYXIgbWFubmVyLgkJCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMKIyAoMSkgREVOT1JNIGFuZCBVTk5PUk0gKHVuaW1wbGVtZW50ZWQpIGRhdGEgdHlwZXM6CiMKIwkJCQlwb3N0LWluc3RydWN0aW9uCiMJCQkJKioqKioqKioqKioqKioqKioKIwkJCQkqICAgICAgRUEJKgojCSBwcmUtaW5zdHJ1Y3Rpb24JKgkJKgojCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCiMJKiAweDAgKiAgMHgwZGMgICoJKiAweDMgKiAgMHgwZGMgICoKIwkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgojCSogICAgIE5leHQJKgkqICAgICBOZXh0CSoKIwkqICAgICAgUEMJKgkqICAgICAgUEMJKgojCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCiMJKiAgICAgIFNSCSoJKiAgICAgIFNSCSoKIwkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgojCiMgKDIpIFBBQ0tFRCBmb3JtYXQgKHVuc3VwcG9ydGVkKSBvcGNsYXNzZXMgdHdvIGFuZCB0aHJlZToKIwkqKioqKioqKioqKioqKioqKgojCSogICAgICBFQQkqCiMJKgkJKgojCSoqKioqKioqKioqKioqKioqCiMJKiAweDIgKiAgMHgwZGMJKgojCSoqKioqKioqKioqKioqKioqCiMJKiAgICAgTmV4dAkqCiMJKiAgICAgIFBDCSoKIwkqKioqKioqKioqKioqKioqKgojCSogICAgICBTUgkqCiMJKioqKioqKioqKioqKioqKioKIwoJZ2xvYmFsCQlfZnBzcF91bnN1cHAKX2Zwc3BfdW5zdXBwOgoKCWxpbmsudwkJJWE2LCYtTE9DQUxfU0laRQkjIGluaXQgc3RhY2sgZnJhbWUKCglmc2F2ZQkJRlBfU1JDKCVhNikJCSMgc2F2ZSBmcCBzdGF0ZQoKCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLCVmcGlhcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCglmbW92bS54CQkmMHhjMCxFWENfRlBSRUdTKCVhNikJIyBzYXZlIGZwMC1mcDEgb24gc3RhY2sKCglidHN0CQkmMHg1LEVYQ19TUiglYTYpCSMgdXNlciBvciBzdXBlcnZpc29yIG1vZGU/CglibmUuYgkJZnVfcwpmdV91OgoJbW92LmwJCSV1c3AsJWEwCQkjIGZldGNoIHVzZXIgc3RhY2sgcG9pbnRlcgoJbW92LmwJCSVhMCxFWENfQTcoJWE2KQkJIyBzYXZlIG9uIHN0YWNrCglicmEuYgkJZnVfY29udAojIGlmIHRoZSBleGNlcHRpb24gaXMgYW4gb3BjbGFzcyB6ZXJvIG9yIHR3byB1bmltcGxlbWVudGVkIGRhdGEgdHlwZQojIGV4Y2VwdGlvbiwgdGhlbiB0aGUgYTcnIGNhbGN1bGF0ZWQgaGVyZSBpcyB3cm9uZyBzaW5jZSBpdCBkb2Vzbid0CiMgc3RhY2sgYW4gZWEuIGhvd2V2ZXIsIHdlIGRvbid0IG5lZWQgYW4gYTcnIGZvciB0aGlzIGNhc2UgYW55d2F5cy4KZnVfczoKCWxlYQkJMHg0K0VYQ19FQSglYTYpLCVhMAkjIGxvYWQgb2xkIGE3JwoJbW92LmwJCSVhMCxFWENfQTcoJWE2KQkJIyBzYXZlIG9uIHN0YWNrCgpmdV9jb250OgoKIyB0aGUgRlBJQVIgaG9sZHMgdGhlICJjdXJyZW50IFBDIiBvZiB0aGUgZmF1bHRpbmcgaW5zdHJ1Y3Rpb24KIyB0aGUgRlBJQVIgc2hvdWxkIGJlIHNldCBjb3JyZWN0bHkgZm9yIEFMTCBleGNlcHRpb25zIHBhc3NpbmcgdGhyb3VnaAojIHRoaXMgcG9pbnQuCgltb3YubAkJVVNFUl9GUElBUiglYTYpLEVYQ19FWFRXUFRSKCVhNikKCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKCWJzci5sCQlfaW1lbV9yZWFkX2xvbmcJCSMgZmV0Y2ggdGhlIGluc3RydWN0aW9uIHdvcmRzCgltb3YubAkJJWQwLEVYQ19PUFdPUkQoJWE2KQkjIHN0b3JlIE9QV09SRCBhbmQgRVhUV09SRAoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCWNsci5iCQlTUENPTkRfRkxHKCVhNikJCSMgY2xlYXIgc3BlY2lhbCBjb25kaXRpb24gZmxhZwoKIyBTZXBhcmF0ZSBvcGNsYXNzIHRocmVlIChmcG4tdG8tbWVtKSBvcHMgc2luY2UgdGhleSBoYXZlIGEgZGlmZmVyZW50CiMgc3RhY2sgZnJhbWUgYW5kIHByb3RvY29sLgoJYnRzdAkJJjB4NSxFWENfQ01EUkVHKCVhNikJIyBpcyBpdCBhbiBmbW92ZSBvdXQ/CglibmUudwkJZnVfb3V0CQkJIyB5ZXMKCiMgU2VwYXJhdGUgcGFja2VkIG9wY2xhc3MgdHdvIGluc3RydWN0aW9ucy4KCWJmZXh0dQkJRVhDX0NNRFJFRyglYTYpeyYwOiY2fSwlZDAKCWNtcGkuYgkJJWQwLCYweDEzCgliZXEudwkJZnVfaW5fcGFjawoKCiMgSSdtIG5vdCBzdXJlIGF0IHRoaXMgcG9pbnQgd2hhdCBGUFNSIGJpdHMgYXJlIHZhbGlkIGZvciB0aGlzIGluc3RydWN0aW9uLgojIHNvLCBzaW5jZSB0aGUgZW11bGF0aW9uIHJvdXRpbmVzIHJlLWNyZWF0ZSB0aGVtIGFueXdheXMsIHplcm8gZXhjZXB0aW9uIGZpZWxkCglhbmRpLmwJCSYweDAwZmYwMGZmLFVTRVJfRlBTUiglYTYpICMgemVybyBleGNlcHRpb24gZmllbGQKCglmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBjdXJyZW50IGNvbnRyb2wgcmVncwoJZm1vdi5sCQkmMHgwLCVmcHNyCgojIE9wY2xhc3MgdHdvIHcvIG1lbW9yeS10by1mcG4gb3BlcmF0aW9uIHdpbGwgaGF2ZSBhbiBpbmNvcnJlY3QgZXh0ZW5kZWQKIyBwcmVjaXNpb24gZm9ybWF0IGlmIHRoZSBzcmMgZm9ybWF0IHdhcyBzaW5nbGUgb3IgZG91YmxlIGFuZCB0aGUKIyBzb3VyY2UgZGF0YSB0eXBlIHdhcyBhbiBJTkYsIE5BTiwgREVOT1JNLCBvciBVTk5PUk0KCWxlYQkJRlBfU1JDKCVhNiksJWEwCQkjIHBhc3MgcHRyIHRvIGlucHV0Cglic3IubAkJZml4X3NrZXdlZF9vcHMKCiMgd2UgZG9uJ3Qga25vdyB3aGV0aGVyIHRoZSBzcmMgb3BlcmFuZCBvciB0aGUgZHN0IG9wZXJhbmQgKG9yIGJvdGgpIGlzIHRoZQojIFVOTk9STSBvciBERU5PUk0uIGNhbGwgdGhlIGZ1bmN0aW9uIHRoYXQgdGFncyB0aGUgb3BlcmFuZCB0eXBlLiBpZiB0aGUKIyBpbnB1dCBpcyBhbiBVTk5PUk0sIHRoZW4gY29udmVydCBpdCB0byBhIE5PUk0sIERFTk9STSwgb3IgWkVSTy4KCWxlYQkJRlBfU1JDKCVhNiksJWEwCQkjIHBhc3M6IHB0ciB0byBzcmMgb3AKCWJzci5sCQlzZXRfdGFnX3gJCSMgdGFnIHRoZSBvcGVyYW5kIHR5cGUKCWNtcGkuYgkJJWQwLCZVTk5PUk0JCSMgaXMgb3BlcmFuZCBhbiBVTk5PUk0/CglibmUuYgkJZnVfb3AyCQkJIyBubwoJYnNyLmwJCXVubm9ybV9maXgJCSMgeWVzOyBjb252ZXJ0IHRvIE5PUk0sREVOT1JNLG9yIFpFUk8KCmZ1X29wMjoKCW1vdi5iCQklZDAsU1RBRyglYTYpCQkjIHNhdmUgc3JjIG9wdHlwZSB0YWcKCgliZmV4dHUJCUVYQ19DTURSRUcoJWE2KXsmNjomM30sJWQwICMgZHlhZGljOyBsb2FkIGRzdCByZWcKCiMgYml0IGZpdmUgb2YgdGhlIGZwIGV4dGVuc2lvbiB3b3JkIHNlcGFyYXRlcyB0aGUgbW9uYWRpYyBhbmQgZHlhZGljIG9wZXJhdGlvbnMKIyBhdCB0aGlzIHBvaW50CglidHN0CQkmMHg1LDErRVhDX0NNRFJFRyglYTYpCSMgaXMgb3BlcmF0aW9uIG1vbmFkaWMgb3IgZHlhZGljPwoJYmVxLmIJCWZ1X2V4dHJhY3QJCSMgbW9uYWRpYwoJY21waS5iCQkxK0VYQ19DTURSRUcoJWE2KSwmMHgzYQkjIGlzIG9wZXJhdGlvbiBhbiBmdHN0PwoJYmVxLmIJCWZ1X2V4dHJhY3QJCSMgeWVzLCBzbyBpdCdzIG1vbmFkaWMsIHRvbwoKCWJzci5sCQlsb2FkX2ZwbjIJCSMgbG9hZCBkc3QgaW50byBGUF9EU1QKCglsZWEJCUZQX0RTVCglYTYpLCVhMAkJIyBwYXNzOiBwdHIgdG8gZHN0IG9wCglic3IubAkJc2V0X3RhZ194CQkjIHRhZyB0aGUgb3BlcmFuZCB0eXBlCgljbXBpLmIJCSVkMCwmVU5OT1JNCQkjIGlzIG9wZXJhbmQgYW4gVU5OT1JNPwoJYm5lLmIJCWZ1X29wMl9kb25lCQkjIG5vCglic3IubAkJdW5ub3JtX2ZpeAkJIyB5ZXM7IGNvbnZlcnQgdG8gTk9STSxERU5PUk0sb3IgWkVSTwpmdV9vcDJfZG9uZToKCW1vdi5iCQklZDAsRFRBRyglYTYpCQkjIHNhdmUgZHN0IG9wdHlwZSB0YWcKCmZ1X2V4dHJhY3Q6CgljbHIubAkJJWQwCgltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgZmV0Y2ggcm5kIG1vZGUvcHJlYwoKCWJmZXh0dQkJMStFWENfQ01EUkVHKCVhNil7JjE6Jjd9LCVkMSAjIGV4dHJhY3QgZXh0ZW5zaW9uCgoJbGVhCQlGUF9TUkMoJWE2KSwlYTAKCWxlYQkJRlBfRFNUKCVhNiksJWExCgoJbW92LmwJCSh0YmxfdW5zdXBwLmwsJXBjLCVkMS5sKjQpLCVkMSAjIGZldGNoIHJvdXRpbmUgYWRkcgoJanNyCQkodGJsX3Vuc3VwcC5sLCVwYywlZDEubCoxKQoKIwojIEV4Y2VwdGlvbnMgaW4gb3JkZXIgb2YgcHJlY2VkZW5jZToKIwlCU1VOCTogbm9uZQojCVNOQU4JOiBhbGwgZHlhZGljIG9wcwojCU9QRVJSCTogZnNxcnQoLU5PUk0pCiMJT1ZGTAk6IGFsbCBleGNlcHQgZnRzdCxmY21wCiMJVU5GTAk6IGFsbCBleGNlcHQgZnRzdCxmY21wCiMJRFoJOiBmZGl2CiMJSU5FWDIJOiBhbGwgZXhjZXB0IGZ0c3QsZmNtcAojCUlORVgxCTogbm9uZSAocGFja2VkIGRvZXNuJ3QgZ28gdGhyb3VnaCBoZXJlKQojCgojIHdlIGRldGVybWluZSB0aGUgaGlnaGVzdCBwcmlvcml0eSBleGNlcHRpb24oaWYgYW55KSBzZXQgYnkgdGhlCiMgZW11bGF0aW9uIHJvdXRpbmUgdGhhdCBoYXMgYWxzbyBiZWVuIGVuYWJsZWQgYnkgdGhlIHVzZXIuCgltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDAJIyBmZXRjaCBleGNlcHRpb25zIHNldAoJYm5lLmIJCWZ1X2luX2VuYQkJIyBzb21lIGFyZSBlbmFibGVkCgpmdV9pbl9jb250OgojIGZjbXAgYW5kIGZ0c3QgZG8gbm90IHN0b3JlIGFueSByZXN1bHQuCgltb3YuYgkJMStFWENfQ01EUkVHKCVhNiksJWQwCSMgZmV0Y2ggZXh0ZW5zaW9uCglhbmRpLmIJCSYweDM4LCVkMAkJIyBleHRyYWN0IGJpdHMgMy01CgljbXBpLmIJCSVkMCwmMHgzOAkJIyBpcyBpbnN0ciBmY21wIG9yIGZ0c3Q/CgliZXEuYgkJZnVfaW5fZXhpdAkJIyB5ZXMKCgliZmV4dHUJCUVYQ19DTURSRUcoJWE2KXsmNjomM30sJWQwICMgZHlhZGljOyBsb2FkIGRzdCByZWcKCWJzci5sCQlzdG9yZV9mcHJlZwkJIyBzdG9yZSB0aGUgcmVzdWx0CgpmdV9pbl9leGl0OgoKCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwL2ZwMQoJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKCgl1bmxrCQklYTYKCglicmEubAkJX2Zwc3BfZG9uZQoKZnVfaW5fZW5hOgoJYW5kLmIJCUZQU1JfRVhDRVBUKCVhNiksJWQwCSMga2VlcCBvbmx5IG9uZXMgZW5hYmxlZAoJYmZmZm8JCSVkMHsmMjQ6Jjh9LCVkMAkJIyBmaW5kIGhpZ2hlc3QgcHJpb3JpdHkgZXhjZXB0aW9uCglibmUuYgkJZnVfaW5fZXhjCQkjIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBzZXQKCiMKIyBObyBleGNlcHRpb25zIG9jY3VycmVkIHRoYXQgd2VyZSBhbHNvIGVuYWJsZWQuIE5vdzoKIwojCWlmIChPVkZMICYmIG92ZmxfZGlzYWJsZWQgJiYgaW5leGFjdF9lbmFibGVkKSB7CiMJICAgIGJyYW5jaCB0byBfcmVhbF9pbmV4KCkgKGV2ZW4gaWYgdGhlIHJlc3VsdCB3YXMgZXhhY3QhKTsKIwl9IGVsc2UgewojCSAgICBzYXZlIHRoZSByZXN1bHQgaW4gdGhlIHByb3BlciBmcCByZWcgKHVubGVzcyB0aGUgb3AgaXMgZmNtcCBvciBmdHN0KTsKIwkgICAgcmV0dXJuOwojCX0KIwoJYnRzdAkJJm92ZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgIyB3YXMgb3ZlcmZsb3cgc2V0PwoJYmVxLmIJCWZ1X2luX2NvbnQJCSMgbm8KCmZ1X2luX292ZmxjaGs6CglidHN0CQkmaW5leDJfYml0LEZQQ1JfRU5BQkxFKCVhNikgIyB3YXMgaW5leGFjdCBlbmFibGVkPwoJYmVxLmIJCWZ1X2luX2NvbnQJCSMgbm8KCWJyYS53CQlmdV9pbl9leGNfb3ZmbAkJIyBnbyBpbnNlcnQgb3ZlcmZsb3cgZnJhbWUKCiMKIyBBbiBleGNlcHRpb24gb2NjdXJyZWQgYW5kIHRoYXQgZXhjZXB0aW9uIHdhcyBlbmFibGVkOgojCiMJc2hpZnQgZW5hYmxlZCBleGNlcHRpb24gZmllbGQgaW50byBsbyBieXRlIG9mIGQwOwojCWlmICgoKElORVgyIHx8IElORVgxKSAmJiBpbmV4X2VuYWJsZWQgJiYgT1ZGTCAmJiBvdmZsX2Rpc2FibGVkKSB8fAojCSAgICAoKElORVgyIHx8IElORVgxKSAmJiBpbmV4X2VuYWJsZWQgJiYgVU5GTCAmJiB1bmZsX2Rpc2FibGVkKSkgewojCQkvKgojCQkgKiB0aGlzIGlzIHRoZSBjYXNlIHdoZXJlIHdlIG11c3QgY2FsbCBfcmVhbF9pbmV4KCkgbm93IG9yIGVsc2UKIwkJICogdGhlcmUgd2lsbCBiZSBubyBvdGhlciB3YXkgdG8gcGFzcyBpdCB0aGUgZXhjZXB0aW9uYWwgb3BlcmFuZAojCQkgKi8KIwkJY2FsbCBfcmVhbF9pbmV4KCk7CiMJfSBlbHNlIHsKIwkJcmVzdG9yZSBleGMgc3RhdGUgKFNOQU58fE9QRVJSfHxPVkZMfHxVTkZMfHxEWnx8SU5FWCkgaW50byB0aGUgRlBVOwojCX0KIwpmdV9pbl9leGM6CglzdWJpLmwJCSYyNCwlZDAJCQkjIGZpeCBvZmZzZXQgdG8gYmUgMC04CgljbXBpLmIJCSVkMCwmMHg2CQkjIGlzIGV4Y2VwdGlvbiBJTkVYPyAoNikKCWJuZS5iCQlmdV9pbl9leGNfZXhpdAkJIyBubwoKIyB0aGUgZW5hYmxlZCBleGNlcHRpb24gd2FzIGluZXhhY3QKCWJ0c3QJCSZ1bmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgZGlkIGRpc2FibGVkIHVuZGVyZmxvdyBvY2N1cj8KCWJuZS53CQlmdV9pbl9leGNfdW5mbAkJIyB5ZXMKCWJ0c3QJCSZvdmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgZGlkIGRpc2FibGVkIG92ZXJmbG93IG9jY3VyPwoJYm5lLncJCWZ1X2luX2V4Y19vdmZsCQkjIHllcwoKIyBoZXJlLCB3ZSBpbnNlcnQgdGhlIGNvcnJlY3QgZnNhdmUgc3RhdHVzIHZhbHVlIGludG8gdGhlIGZzYXZlIGZyYW1lIGZvciB0aGUKIyBjb3JyZXNwb25kaW5nIGV4Y2VwdGlvbi4gdGhlIG9wZXJhbmQgaW4gdGhlIGZzYXZlIGZyYW1lIHNob3VsZCBiZSB0aGUgb3JpZ2luYWwKIyBzcmMgb3BlcmFuZC4KZnVfaW5fZXhjX2V4aXQ6Cgltb3YubAkJJWQwLC0oJXNwKQkJIyBzYXZlIGQwCglic3IubAkJZnVuaW1wX3NrZXcJCSMgc2tldyBzZ2wgb3IgZGJsIGlucHV0cwoJbW92LmwJCSglc3ApKywlZDAJCSMgcmVzdG9yZSBkMAoKCW1vdi53CQkodGJsX2V4Y2VwdC5iLCVwYywlZDAudyoyKSwyK0ZQX1NSQyglYTYpICMgY3JlYXRlIGV4YyBzdGF0dXMKCglmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC9mcDEKCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCgltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCgoJZnJlc3RvcmUJRlBfU1JDKCVhNikJCSMgcmVzdG9yZSBzcmMgb3AKCgl1bmxrCQklYTYKCglicmEubAkJX2Zwc3BfZG9uZQoKdGJsX2V4Y2VwdDoKCXNob3J0CQkweGUwMDAsMHhlMDA2LDB4ZTAwNCwweGUwMDUKCXNob3J0CQkweGUwMDMsMHhlMDAyLDB4ZTAwMSwweGUwMDEKCmZ1X2luX2V4Y191bmZsOgoJbW92LncJCSYweDQsJWQwCglicmEuYgkJZnVfaW5fZXhjX2V4aXQKZnVfaW5fZXhjX292Zmw6Cgltb3YudwkJJjB4MDMsJWQwCglicmEuYgkJZnVfaW5fZXhjX2V4aXQKCiMgSWYgdGhlIGlucHV0IG9wZXJhbmQgdG8gdGhpcyBvcGVyYXRpb24gd2FzIG9wY2xhc3MgdHdvIGFuZCBhIHNpbmdsZQojIG9yIGRvdWJsZSBwcmVjaXNpb24gZGVub3JtLCBpbmYsIG9yIG5hbiwgdGhlIG9wZXJhbmQgbmVlZHMgdG8gYmUKIyAiY29ycmVjdGVkIiBpbiBvcmRlciB0byBoYXZlIHRoZSBwcm9wZXIgZXF1aXZhbGVudCBleHRlbmRlZCBwcmVjaXNpb24KIyBudW1iZXIuCglnbG9iYWwJCWZpeF9za2V3ZWRfb3BzCmZpeF9za2V3ZWRfb3BzOgoJYmZleHR1CQlFWENfQ01EUkVHKCVhNil7JjA6JjZ9LCVkMCAjIGV4dHJhY3Qgb3BjbGFzcyxzcmMgZm10CgljbXBpLmIJCSVkMCwmMHgxMQkJIyBpcyBjbGFzcyA9IDIgJiBmbXQgPSBzZ2w/CgliZXEuYgkJZnNvX3NnbAkJCSMgeWVzCgljbXBpLmIJCSVkMCwmMHgxNQkJIyBpcyBjbGFzcyA9IDIgJiBmbXQgPSBkYmw/CgliZXEuYgkJZnNvX2RibAkJCSMgeWVzCglydHMJCQkJCSMgbm8KCmZzb19zZ2w6Cgltb3YudwkJTE9DQUxfRVgoJWEwKSwlZDAJIyBmZXRjaCBzcmMgZXhwb25lbnQKCWFuZGkudwkJJjB4N2ZmZiwlZDAJCSMgc3RyaXAgc2lnbgoJY21waS53CQklZDAsJjB4M2Y4MAkJIyBpcyB8ZXhwfCA9PSAkM2Y4MD8KCWJlcS5iCQlmc29fc2dsX2Rucm1femVybwkjIHllcwoJY21waS53CQklZDAsJjB4NDA3ZgkJIyBubzsgaXMgfGV4cHwgPT0gJDQwN2Y/CgliZXEuYgkJZnNvX2luZm5hbgkJIyB5ZXMKCXJ0cwkJCQkJIyBubwoKZnNvX3NnbF9kbnJtX3plcm86CglhbmRpLmwJCSYweDdmZmZmZmZmLExPQ0FMX0hJKCVhMCkgIyBjbGVhciBqLWJpdAoJYmVxLmIJCWZzb196ZXJvCQkjIGl0J3MgYSBza2V3ZWQgemVybwpmc29fc2dsX2Rucm06CiMgaGVyZSwgd2UgY291bnQgb24gbm9ybSBub3QgdG8gYWx0ZXIgYTAuLi4KCWJzci5sCQlub3JtCQkJIyBub3JtYWxpemUgbWFudGlzc2EKCW5lZy53CQklZDAJCQkjIC1zaGZ0IGFtdAoJYWRkaS53CQkmMHgzZjgxLCVkMAkJIyBhZGp1c3QgbmV3IGV4cG9uZW50CglhbmRpLncJCSYweDgwMDAsTE9DQUxfRVgoJWEwKQkjIGNsZWFyIG9sZCBleHBvbmVudAoJb3IudwkJJWQwLExPQ0FMX0VYKCVhMCkJIyBpbnNlcnQgbmV3IGV4cG9uZW50CglydHMKCmZzb196ZXJvOgoJYW5kaS53CQkmMHg4MDAwLExPQ0FMX0VYKCVhMCkJIyBjbGVhciBib2d1cyBleHBvbmVudAoJcnRzCgpmc29faW5mbmFuOgoJYW5kaS5iCQkmMHg3ZixMT0NBTF9ISSglYTApCSMgY2xlYXIgai1iaXQKCW9yaS53CQkmMHg3ZmZmLExPQ0FMX0VYKCVhMCkJIyBtYWtlIGV4cG9uZW50ID0gJDdmZmYKCXJ0cwoKZnNvX2RibDoKCW1vdi53CQlMT0NBTF9FWCglYTApLCVkMAkjIGZldGNoIHNyYyBleHBvbmVudAoJYW5kaS53CQkmMHg3ZmZmLCVkMAkJIyBzdHJpcCBzaWduCgljbXBpLncJCSVkMCwmMHgzYzAwCQkjIGlzIHxleHB8ID09ICQzYzAwPwoJYmVxLmIJCWZzb19kYmxfZG5ybV96ZXJvCSMgeWVzCgljbXBpLncJCSVkMCwmMHg0M2ZmCQkjIG5vOyBpcyB8ZXhwfCA9PSAkNDNmZj8KCWJlcS5iCQlmc29faW5mbmFuCQkjIHllcwoJcnRzCQkJCQkjIG5vCgpmc29fZGJsX2Rucm1femVybzoKCWFuZGkubAkJJjB4N2ZmZmZmZmYsTE9DQUxfSEkoJWEwKSAjIGNsZWFyIGotYml0CglibmUuYgkJZnNvX2RibF9kbnJtCQkjIGl0J3MgYSBza2V3ZWQgZGVub3JtCgl0c3QubAkJTE9DQUxfTE8oJWEwKQkJIyBpcyBpdCBhIHplcm8/CgliZXEuYgkJZnNvX3plcm8JCSMgeWVzCmZzb19kYmxfZG5ybToKIyBoZXJlLCB3ZSBjb3VudCBvbiBub3JtIG5vdCB0byBhbHRlciBhMC4uLgoJYnNyLmwJCW5vcm0JCQkjIG5vcm1hbGl6ZSBtYW50aXNzYQoJbmVnLncJCSVkMAkJCSMgLXNoZnQgYW10CglhZGRpLncJCSYweDNjMDEsJWQwCQkjIGFkanVzdCBuZXcgZXhwb25lbnQKCWFuZGkudwkJJjB4ODAwMCxMT0NBTF9FWCglYTApCSMgY2xlYXIgb2xkIGV4cG9uZW50Cglvci53CQklZDAsTE9DQUxfRVgoJWEwKQkjIGluc2VydCBuZXcgZXhwb25lbnQKCXJ0cwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMgZm1vdmUgb3V0IHRvb2sgYW4gdW5pbXBsZW1lbnRlZCBkYXRhIHR5cGUgZXhjZXB0aW9uLgojIHRoZSBzcmMgb3BlcmFuZCBpcyBpbiBGUF9TUkMuIENhbGwgX2ZvdXQoKSB0byB3cml0ZSBvdXQgdGhlIHJlc3VsdCBhbmQKIyB0byBkZXRlcm1pbmUgd2hpY2ggZXhjZXB0aW9ucywgaWYgYW55LCB0byB0YWtlLgpmdV9vdXQ6CgojIFNlcGFyYXRlIHBhY2tlZCBtb3ZlIG91dHMgZnJvbSB0aGUgVU5OT1JNIGFuZCBERU5PUk0gbW92ZSBvdXRzLgoJYmZleHR1CQlFWENfQ01EUkVHKCVhNil7JjM6JjN9LCVkMAoJY21waS5iCQklZDAsJjB4MwoJYmVxLncJCWZ1X291dF9wYWNrCgljbXBpLmIJCSVkMCwmMHg3CgliZXEudwkJZnVfb3V0X3BhY2sKCgojIEknbSBub3Qgc3VyZSBhdCB0aGlzIHBvaW50IHdoYXQgRlBTUiBiaXRzIGFyZSB2YWxpZCBmb3IgdGhpcyBpbnN0cnVjdGlvbi4KIyBzbywgc2luY2UgdGhlIGVtdWxhdGlvbiByb3V0aW5lcyByZS1jcmVhdGUgdGhlbSBhbnl3YXlzLCB6ZXJvIGV4Y2VwdGlvbiBmaWVsZC4KIyBmbW92ZSBvdXQgZG9lc24ndCBhZmZlY3QgY2NvZGVzLgoJYW5kLmwJCSYweGZmZmYwMGZmLFVTRVJfRlBTUiglYTYpICMgemVybyBleGNlcHRpb24gZmllbGQKCglmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBjdXJyZW50IGNvbnRyb2wgcmVncwoJZm1vdi5sCQkmMHgwLCVmcHNyCgojIHRoZSBzcmMgY2FuIE9OTFkgYmUgYSBERU5PUk0gb3IgYW4gVU5OT1JNISBzbywgZG9uJ3QgbWFrZSBhbnkgYmlnIHN1YnJvdXRpbmUKIyBjYWxsIGhlcmUuIGp1c3QgZmlndXJlIG91dCB3aGF0IGl0IGlzLi4uCgltb3YudwkJRlBfU1JDX0VYKCVhNiksJWQwCSMgZ2V0IGV4cG9uZW50CglhbmRpLncJCSYweDdmZmYsJWQwCQkjIHN0cmlwIHNpZ24KCWJlcS5iCQlmdV9vdXRfZGVub3JtCQkjIGl0J3MgYSBERU5PUk0KCglsZWEJCUZQX1NSQyglYTYpLCVhMAoJYnNyLmwJCXVubm9ybV9maXgJCSMgeWVzOyBmaXggaXQKCgltb3YuYgkJJWQwLFNUQUcoJWE2KQoKCWJyYS5iCQlmdV9vdXRfY29udApmdV9vdXRfZGVub3JtOgoJbW92LmIJCSZERU5PUk0sU1RBRyglYTYpCmZ1X291dF9jb250OgoKCWNsci5sCQklZDAKCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBmZXRjaCBybmQgbW9kZS9wcmVjCgoJbGVhCQlGUF9TUkMoJWE2KSwlYTAJCSMgcGFzcyBwdHIgdG8gc3JjIG9wZXJhbmQKCgltb3YubAkJKCVhNiksRVhDX0E2KCVhNikJIyBpbiBjYXNlIGE2IGNoYW5nZXMKCWJzci5sCQlmb3V0CQkJIyBjYWxsIGZtb3ZlIG91dCByb3V0aW5lCgojIEV4Y2VwdGlvbnMgaW4gb3JkZXIgb2YgcHJlY2VkZW5jZToKIwlCU1VOCTogbm9uZQojCVNOQU4JOiBub25lCiMJT1BFUlIJOiBmbW92ZS57Yix3LGx9IG91dCBvZiBsYXJnZSBVTk5PUk0KIwlPVkZMCTogZm1vdmUue3MsZH0KIwlVTkZMCTogZm1vdmUue3MsZCx4fQojCURaCTogbm9uZQojCUlORVgyCTogYWxsCiMJSU5FWDEJOiBub25lIChwYWNrZWQgZG9lc24ndCB0cmF2ZWwgdGhyb3VnaCBoZXJlKQoKIyBkZXRlcm1pbmUgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgZXhjZXB0aW9uKGlmIGFueSkgc2V0IGJ5IHRoZQojIGVtdWxhdGlvbiByb3V0aW5lIHRoYXQgaGFzIGFsc28gYmVlbiBlbmFibGVkIGJ5IHRoZSB1c2VyLgoJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQwCSMgZmV0Y2ggZXhjZXB0aW9ucyBlbmFibGVkCglibmUudwkJZnVfb3V0X2VuYQkJIyBzb21lIGFyZSBlbmFibGVkCgpmdV9vdXRfZG9uZToKCgltb3YubAkJRVhDX0E2KCVhNiksKCVhNikJIyBpbiBjYXNlIGE2IGNoYW5nZWQKCiMgb24gZXh0ZW5kZWQgcHJlY2lzaW9uIG9wY2xhc3MgdGhyZWUgaW5zdHJ1Y3Rpb25zIHVzaW5nIHByZS1kZWNyZW1lbnQgb3IKIyBwb3N0LWluY3JlbWVudCBhZGRyZXNzaW5nIG1vZGUsIHRoZSBhZGRyZXNzIHJlZ2lzdGVyIGlzIG5vdCB1cGRhdGVkLiBpcyB0aGUKIyBhZGRyZXNzIHJlZ2lzdGVyIHdhcyB0aGUgc3RhY2sgcG9pbnRlciB1c2VkIGZyb20gdXNlciBtb2RlLCB0aGVuIGxldCdzIHVwZGF0ZQojIGl0IGhlcmUuIGlmIGl0IHdhcyB1c2VkIGZyb20gc3VwZXJ2aXNvciBtb2RlLCB0aGVuIHdlIGhhdmUgdG8gaGFuZGxlIHRoaXMKIyBhcyBhIHNwZWNpYWwgY2FzZS4KCWJ0c3QJCSYweDUsRVhDX1NSKCVhNikKCWJuZS5iCQlmdV9vdXRfZG9uZV9zCgoJbW92LmwJCUVYQ19BNyglYTYpLCVhMAkJIyByZXN0b3JlIGE3Cgltb3YubAkJJWEwLCV1c3AKCmZ1X291dF9kb25lX2NvbnQ6CglmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC9mcDEKCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCgltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCgoJdW5sawkJJWE2CgoJYnRzdAkJJjB4NywoJXNwKQkJIyBpcyB0cmFjZSBvbj8KCWJuZS5iCQlmdV9vdXRfdHJhY2UJCSMgeWVzCgoJYnJhLmwJCV9mcHNwX2RvbmUKCiMgaXMgdGhlIGVhIG1vZGUgcHJlLWRlY3JlbWVudCBvZiB0aGUgc3RhY2sgcG9pbnRlciBmcm9tIHN1cGVydmlzb3IgbW9kZT8KIyAoImZtb3YueCBmcG0sLShhNykiKSBpZiBzbywKZnVfb3V0X2RvbmVfczoKCWNtcGkuYgkJU1BDT05EX0ZMRyglYTYpLCZtZGE3X2ZsZwoJYm5lLmIJCWZ1X291dF9kb25lX2NvbnQKCiMgdGhlIGV4dGVuZGVkIHByZWNpc2lvbiByZXN1bHQgaXMgc3RpbGwgaW4gZnAwLiBidXQsIHdlIG5lZWQgdG8gc2F2ZSBpdAojIHNvbWV3aGVyZSBvbiB0aGUgc3RhY2sgdW50aWwgd2UgY2FuIGNvcHkgaXQgdG8gaXRzIGZpbmFsIHJlc3RpbmcgcGxhY2UuCiMgaGVyZSwgd2UncmUgY291bnRpbmcgb24gdGhlIHRvcCBvZiB0aGUgc3RhY2sgdG8gYmUgdGhlIG9sZCBwbGFjZS1ob2xkZXJzCiMgZm9yIGZwMC9mcDEgd2hpY2ggaGF2ZSBhbHJlYWR5IGJlZW4gcmVzdG9yZWQuIHRoYXQgd2F5LCB3ZSBjYW4gd3JpdGUKIyBvdmVyIHRob3NlIGRlc3RpbmF0aW9ucyB3aXRoIHRoZSBzaGlmdGVkIHN0YWNrIGZyYW1lLgoJZm1vdm0ueAkJJjB4ODAsRlBfU1JDKCVhNikJIyBwdXQgYW5zd2VyIG9uIHN0YWNrCgoJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAvZnAxCglmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncwoJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQoKCW1vdi5sCQkoJWE2KSwlYTYJCSMgcmVzdG9yZSBmcmFtZSBwb2ludGVyCgoJbW92LmwJCUxPQ0FMX1NJWkUrRVhDX1NSKCVzcCksTE9DQUxfU0laRStFWENfU1ItMHhjKCVzcCkKCW1vdi5sCQlMT0NBTF9TSVpFKzIrRVhDX1BDKCVzcCksTE9DQUxfU0laRSsyK0VYQ19QQy0weGMoJXNwKQoKIyBub3csIGNvcHkgdGhlIHJlc3VsdCB0byB0aGUgcHJvcGVyIHBsYWNlIG9uIHRoZSBzdGFjawoJbW92LmwJCUxPQ0FMX1NJWkUrRlBfU1JDX0VYKCVzcCksTE9DQUxfU0laRStFWENfU1IrMHgwKCVzcCkKCW1vdi5sCQlMT0NBTF9TSVpFK0ZQX1NSQ19ISSglc3ApLExPQ0FMX1NJWkUrRVhDX1NSKzB4NCglc3ApCgltb3YubAkJTE9DQUxfU0laRStGUF9TUkNfTE8oJXNwKSxMT0NBTF9TSVpFK0VYQ19TUisweDgoJXNwKQoKCWFkZC5sCQkmTE9DQUxfU0laRS0weDgsJXNwCgoJYnRzdAkJJjB4NywoJXNwKQoJYm5lLmIJCWZ1X291dF90cmFjZQoKCWJyYS5sCQlfZnBzcF9kb25lCgpmdV9vdXRfZW5hOgoJYW5kLmIJCUZQU1JfRVhDRVBUKCVhNiksJWQwCSMga2VlcCBvbmx5IG9uZXMgZW5hYmxlZAoJYmZmZm8JCSVkMHsmMjQ6Jjh9LCVkMAkJIyBmaW5kIGhpZ2hlc3QgcHJpb3JpdHkgZXhjZXB0aW9uCglibmUuYgkJZnVfb3V0X2V4YwkJIyB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgc2V0CgojIG5vIGV4Y2VwdGlvbnMgd2VyZSBzZXQuCiMgaWYgYSBkaXNhYmxlZCBvdmVyZmxvdyBvY2N1cnJlZCBhbmQgaW5leGFjdCB3YXMgZW5hYmxlZCBidXQgdGhlIHJlc3VsdAojIHdhcyBleGFjdCwgdGhlbiBhIGJyYW5jaCB0byBfcmVhbF9pbmV4KCkgaXMgbWFkZS4KCWJ0c3QJCSZvdmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgd2FzIG92ZXJmbG93IHNldD8KCWJlcS53CQlmdV9vdXRfZG9uZQkJIyBubwoKZnVfb3V0X292ZmxjaGs6CglidHN0CQkmaW5leDJfYml0LEZQQ1JfRU5BQkxFKCVhNikgIyB3YXMgaW5leGFjdCBlbmFibGVkPwoJYmVxLncJCWZ1X291dF9kb25lCQkjIG5vCglicmEudwkJZnVfaW5leAkJCSMgeWVzCgojCiMgVGhlIGZwIG1vdmUgb3V0IHRoYXQgdG9vayB0aGUgIlVuaW1wbGVtZW50ZWQgRGF0YSBUeXBlIiBleGNlcHRpb24gd2FzCiMgYmVpbmcgdHJhY2VkLiBTaW5jZSB0aGUgc3RhY2sgZnJhbWVzIGFyZSBzaW1pbGFyLCBnZXQgdGhlICJjdXJyZW50IiBQQwojIGZyb20gRlBJQVIgYW5kIHB1dCBpdCBpbiB0aGUgdHJhY2Ugc3RhY2sgZnJhbWUgdGhlbiBqdW1wIHRvIF9yZWFsX3RyYWNlKCkuCiMKIwkJICBVTlNVUFAgRlJBTUUJCSAgIFRSQUNFIEZSQU1FCiMJCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCiMJCSogICAgICBFQQkqCSogICAgQ3VycmVudAkqCiMJCSoJCSoJKiAgICAgIFBDCSoKIwkJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKIwkJKiAweDMgKiAgMHgwZGMJKgkqIDB4MiAqICAweDAyNAkqCiMJCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCiMJCSogICAgIE5leHQJKgkqICAgICBOZXh0CSoKIwkJKiAgICAgIFBDCSoJKiAgICAgIFBDCSoKIwkJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKIwkJKiAgICAgIFNSCSoJKiAgICAgIFNSCSoKIwkJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKIwpmdV9vdXRfdHJhY2U6Cgltb3YudwkJJjB4MjAyNCwweDYoJXNwKQoJZm1vdi5sCQklZnBpYXIsMHg4KCVzcCkKCWJyYS5sCQlfcmVhbF90cmFjZQoKIyBhbiBleGNlcHRpb24gb2NjdXJyZWQgYW5kIHRoYXQgZXhjZXB0aW9uIHdhcyBlbmFibGVkLgpmdV9vdXRfZXhjOgoJc3ViaS5sCQkmMjQsJWQwCQkJIyBmaXggb2Zmc2V0IHRvIGJlIDAtOAoKIyB3ZSBkb24ndCBtZXNzIHdpdGggdGhlIGV4aXN0aW5nIGZzYXZlIGZyYW1lLiBqdXN0IHJlLWluc2VydCBpdCBhbmQKIyBqdW1wIHRvIHRoZSAiX3JlYWxfe30oKSIgaGFuZGxlci4uLgoJbW92LncJCSh0YmxfZnVfb3V0LmIsJXBjLCVkMC53KjIpLCVkMAoJam1wCQkodGJsX2Z1X291dC5iLCVwYywlZDAudyoxKQoKCXN3YmVnCQkmMHg4CnRibF9mdV9vdXQ6CglzaG9ydAkJdGJsX2Z1X291dAktIHRibF9mdV9vdXQJIyBCU1VOIGNhbid0IGhhcHBlbgoJc2hvcnQJCXRibF9mdV9vdXQJLSB0YmxfZnVfb3V0CSMgU05BTiBjYW4ndCBoYXBwZW4KCXNob3J0CQlmdV9vcGVycgktIHRibF9mdV9vdXQJIyBPUEVSUgoJc2hvcnQJCWZ1X292ZmwJCS0gdGJsX2Z1X291dAkjIE9WRkwKCXNob3J0CQlmdV91bmZsCQktIHRibF9mdV9vdXQJIyBVTkZMCglzaG9ydAkJdGJsX2Z1X291dAktIHRibF9mdV9vdXQJIyBEWiBjYW4ndCBoYXBwZW4KCXNob3J0CQlmdV9pbmV4CQktIHRibF9mdV9vdXQJIyBJTkVYMgoJc2hvcnQJCXRibF9mdV9vdXQJLSB0YmxfZnVfb3V0CSMgSU5FWDEgd29uJ3QgbWFrZSBpdCBoZXJlCgojIGZvciBzbmFuLG9wZXJyLG92ZmwsdW5mbCwgc3JjIG9wIGlzIHN0aWxsIGluIEZQX1NSQyBzbyBqdXN0CiMgZnJlc3RvcmUgaXQuCmZ1X3NuYW46CglmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC9mcDEKCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCgltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCgoJbW92LncJCSYweDMwZDgsRVhDX1ZPRkYoJWE2KQkjIHZlY3RvciBvZmZzZXQgPSAweGQ4Cgltb3YudwkJJjB4ZTAwNiwyK0ZQX1NSQyglYTYpCgoJZnJlc3RvcmUJRlBfU1JDKCVhNikKCgl1bmxrCQklYTYKCgoJYnJhLmwJCV9yZWFsX3NuYW4KCmZ1X29wZXJyOgoJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAvZnAxCglmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncwoJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQoKCW1vdi53CQkmMHgzMGQwLEVYQ19WT0ZGKCVhNikJIyB2ZWN0b3Igb2Zmc2V0ID0gMHhkMAoJbW92LncJCSYweGUwMDQsMitGUF9TUkMoJWE2KQoKCWZyZXN0b3JlCUZQX1NSQyglYTYpCgoJdW5sawkJJWE2CgoKCWJyYS5sCQlfcmVhbF9vcGVycgoKZnVfb3ZmbDoKCWZtb3ZtLngJCSYweDQwLEZQX1NSQyglYTYpCSMgc2F2ZSBFWE9QIHRvIHRoZSBzdGFjawoKCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwL2ZwMQoJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKCgltb3YudwkJJjB4MzBkNCxFWENfVk9GRiglYTYpCSMgdmVjdG9yIG9mZnNldCA9IDB4ZDQKCW1vdi53CQkmMHhlMDA1LDIrRlBfU1JDKCVhNikKCglmcmVzdG9yZQlGUF9TUkMoJWE2KQkJIyByZXN0b3JlIEVYT1AKCgl1bmxrCQklYTYKCglicmEubAkJX3JlYWxfb3ZmbAoKIyB1bmRlcmZsb3cgY2FuIGhhcHBlbiBmb3IgZXh0ZW5kZWQgcHJlY2lzaW9uLiBleHRlbmRlZCBwcmVjaXNpb24gb3BjbGFzcwojIHRocmVlIGluc3RydWN0aW9uIGV4Y2VwdGlvbnMgZG9uJ3QgdXBkYXRlIHRoZSBzdGFjayBwb2ludGVyLiBzbywgaWYgdGhlCiMgZXhjZXB0aW9uIG9jY3VycmVkIGZyb20gdXNlciBtb2RlLCB0aGVuIHNpbXBseSB1cGRhdGUgYTcgYW5kIGV4aXQgbm9ybWFsbHkuCiMgaWYgdGhlIGV4Y2VwdGlvbiBvY2N1cnJlZCBmcm9tIHN1cGVydmlzb3IgbW9kZSwgY2hlY2sgaWYKZnVfdW5mbDoKCW1vdi5sCQlFWENfQTYoJWE2KSwoJWE2KQkjIHJlc3RvcmUgYTYKCglidHN0CQkmMHg1LEVYQ19TUiglYTYpCglibmUudwkJZnVfdW5mbF9zCgoJbW92LmwJCUVYQ19BNyglYTYpLCVhMAkJIyByZXN0b3JlIGE3IHdoZXRoZXIgd2UgbmVlZAoJbW92LmwJCSVhMCwldXNwCQkjIHRvIG9yIG5vdC4uLgoKZnVfdW5mbF9jb250OgoJZm1vdm0ueAkJJjB4NDAsRlBfU1JDKCVhNikJIyBzYXZlIEVYT1AgdG8gdGhlIHN0YWNrCgoJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAvZnAxCglmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncwoJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQoKCW1vdi53CQkmMHgzMGNjLEVYQ19WT0ZGKCVhNikJIyB2ZWN0b3Igb2Zmc2V0ID0gMHhjYwoJbW92LncJCSYweGUwMDMsMitGUF9TUkMoJWE2KQoKCWZyZXN0b3JlCUZQX1NSQyglYTYpCQkjIHJlc3RvcmUgRVhPUAoKCXVubGsJCSVhNgoKCWJyYS5sCQlfcmVhbF91bmZsCgpmdV91bmZsX3M6CgljbXBpLmIJCVNQQ09ORF9GTEcoJWE2KSwmbWRhN19mbGcgIyB3YXMgdGhlIDxlYT4gbW9kZSAtKHNwKT8KCWJuZS5iCQlmdV91bmZsX2NvbnQKCiMgdGhlIGV4dGVuZGVkIHByZWNpc2lvbiByZXN1bHQgaXMgc3RpbGwgaW4gZnAwLiBidXQsIHdlIG5lZWQgdG8gc2F2ZSBpdAojIHNvbWV3aGVyZSBvbiB0aGUgc3RhY2sgdW50aWwgd2UgY2FuIGNvcHkgaXQgdG8gaXRzIGZpbmFsIHJlc3RpbmcgcGxhY2UKIyAod2hlcmUgdGhlIGV4YyBmcmFtZSBpcyBjdXJyZW50bHkpLiBtYWtlIHN1cmUgaXQncyBub3QgYXQgdGhlIHRvcCBvZiB0aGUKIyBmcmFtZSBvciBpdCB3aWxsIGdldCBvdmVyd3JpdHRlbiB3aGVuIHRoZSBleGMgc3RhY2sgZnJhbWUgaXMgc2hpZnRlZCAiZG93biIuCglmbW92bS54CQkmMHg4MCxGUF9TUkMoJWE2KQkjIHB1dCBhbnN3ZXIgb24gc3RhY2sKCWZtb3ZtLngJCSYweDQwLEZQX0RTVCglYTYpCSMgcHV0IEVYT1Agb24gc3RhY2sKCglmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC9mcDEKCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCgltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCgoJbW92LncJCSYweDMwY2MsRVhDX1ZPRkYoJWE2KQkjIHZlY3RvciBvZmZzZXQgPSAweGNjCgltb3YudwkJJjB4ZTAwMywyK0ZQX0RTVCglYTYpCgoJZnJlc3RvcmUJRlBfRFNUKCVhNikJCSMgcmVzdG9yZSBFWE9QCgoJbW92LmwJCSglYTYpLCVhNgkJIyByZXN0b3JlIGZyYW1lIHBvaW50ZXIKCgltb3YubAkJTE9DQUxfU0laRStFWENfU1IoJXNwKSxMT0NBTF9TSVpFK0VYQ19TUi0weGMoJXNwKQoJbW92LmwJCUxPQ0FMX1NJWkUrMitFWENfUEMoJXNwKSxMT0NBTF9TSVpFKzIrRVhDX1BDLTB4Yyglc3ApCgltb3YubAkJTE9DQUxfU0laRStFWENfRUEoJXNwKSxMT0NBTF9TSVpFK0VYQ19FQS0weGMoJXNwKQoKIyBub3csIGNvcHkgdGhlIHJlc3VsdCB0byB0aGUgcHJvcGVyIHBsYWNlIG9uIHRoZSBzdGFjawoJbW92LmwJCUxPQ0FMX1NJWkUrRlBfU1JDX0VYKCVzcCksTE9DQUxfU0laRStFWENfU1IrMHgwKCVzcCkKCW1vdi5sCQlMT0NBTF9TSVpFK0ZQX1NSQ19ISSglc3ApLExPQ0FMX1NJWkUrRVhDX1NSKzB4NCglc3ApCgltb3YubAkJTE9DQUxfU0laRStGUF9TUkNfTE8oJXNwKSxMT0NBTF9TSVpFK0VYQ19TUisweDgoJXNwKQoKCWFkZC5sCQkmTE9DQUxfU0laRS0weDgsJXNwCgoJYnJhLmwJCV9yZWFsX3VuZmwKCiMgZm1vdmUgaW4gYW5kIG91dCBlbnRlciBoZXJlLgpmdV9pbmV4OgoJZm1vdm0ueAkJJjB4NDAsRlBfU1JDKCVhNikJIyBzYXZlIEVYT1AgdG8gdGhlIHN0YWNrCgoJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAvZnAxCglmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncwoJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQoKCW1vdi53CQkmMHgzMGM0LEVYQ19WT0ZGKCVhNikJIyB2ZWN0b3Igb2Zmc2V0ID0gMHhjNAoJbW92LncJCSYweGUwMDEsMitGUF9TUkMoJWE2KQoKCWZyZXN0b3JlCUZQX1NSQyglYTYpCQkjIHJlc3RvcmUgRVhPUAoKCXVubGsJCSVhNgoKCglicmEubAkJX3JlYWxfaW5leAoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmZ1X2luX3BhY2s6CgoKIyBJJ20gbm90IHN1cmUgYXQgdGhpcyBwb2ludCB3aGF0IEZQU1IgYml0cyBhcmUgdmFsaWQgZm9yIHRoaXMgaW5zdHJ1Y3Rpb24uCiMgc28sIHNpbmNlIHRoZSBlbXVsYXRpb24gcm91dGluZXMgcmUtY3JlYXRlIHRoZW0gYW55d2F5cywgemVybyBleGNlcHRpb24gZmllbGQKCWFuZGkubAkJJjB4MGZmMDBmZixVU0VSX0ZQU1IoJWE2KSAjIHplcm8gZXhjZXB0aW9uIGZpZWxkCgoJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gY3VycmVudCBjb250cm9sIHJlZ3MKCWZtb3YubAkJJjB4MCwlZnBzcgoKCWJzci5sCQlnZXRfcGFja2VkCQkjIGZldGNoIHBhY2tlZCBzcmMgb3BlcmFuZAoKCWxlYQkJRlBfU1JDKCVhNiksJWEwCQkjIHBhc3MgcHRyIHRvIHNyYwoJYnNyLmwJCXNldF90YWdfeAkJIyBzZXQgc3JjIG9wdHlwZSB0YWcKCgltb3YuYgkJJWQwLFNUQUcoJWE2KQkJIyBzYXZlIHNyYyBvcHR5cGUgdGFnCgoJYmZleHR1CQlFWENfQ01EUkVHKCVhNil7JjY6JjN9LCVkMCAjIGR5YWRpYzsgbG9hZCBkc3QgcmVnCgojIGJpdCBmaXZlIG9mIHRoZSBmcCBleHRlbnNpb24gd29yZCBzZXBhcmF0ZXMgdGhlIG1vbmFkaWMgYW5kIGR5YWRpYyBvcGVyYXRpb25zCiMgYXQgdGhpcyBwb2ludAoJYnRzdAkJJjB4NSwxK0VYQ19DTURSRUcoJWE2KQkjIGlzIG9wZXJhdGlvbiBtb25hZGljIG9yIGR5YWRpYz8KCWJlcS5iCQlmdV9leHRyYWN0X3AJCSMgbW9uYWRpYwoJY21waS5iCQkxK0VYQ19DTURSRUcoJWE2KSwmMHgzYQkjIGlzIG9wZXJhdGlvbiBhbiBmdHN0PwoJYmVxLmIJCWZ1X2V4dHJhY3RfcAkJIyB5ZXMsIHNvIGl0J3MgbW9uYWRpYywgdG9vCgoJYnNyLmwJCWxvYWRfZnBuMgkJIyBsb2FkIGRzdCBpbnRvIEZQX0RTVAoKCWxlYQkJRlBfRFNUKCVhNiksJWEwCQkjIHBhc3M6IHB0ciB0byBkc3Qgb3AKCWJzci5sCQlzZXRfdGFnX3gJCSMgdGFnIHRoZSBvcGVyYW5kIHR5cGUKCWNtcGkuYgkJJWQwLCZVTk5PUk0JCSMgaXMgb3BlcmFuZCBhbiBVTk5PUk0/CglibmUuYgkJZnVfb3AyX2RvbmVfcAkJIyBubwoJYnNyLmwJCXVubm9ybV9maXgJCSMgeWVzOyBjb252ZXJ0IHRvIE5PUk0sREVOT1JNLG9yIFpFUk8KZnVfb3AyX2RvbmVfcDoKCW1vdi5iCQklZDAsRFRBRyglYTYpCQkjIHNhdmUgZHN0IG9wdHlwZSB0YWcKCmZ1X2V4dHJhY3RfcDoKCWNsci5sCQklZDAKCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBmZXRjaCBybmQgbW9kZS9wcmVjCgoJYmZleHR1CQkxK0VYQ19DTURSRUcoJWE2KXsmMTomN30sJWQxICMgZXh0cmFjdCBleHRlbnNpb24KCglsZWEJCUZQX1NSQyglYTYpLCVhMAoJbGVhCQlGUF9EU1QoJWE2KSwlYTEKCgltb3YubAkJKHRibF91bnN1cHAubCwlcGMsJWQxLmwqNCksJWQxICMgZmV0Y2ggcm91dGluZSBhZGRyCglqc3IJCSh0YmxfdW5zdXBwLmwsJXBjLCVkMS5sKjEpCgojCiMgRXhjZXB0aW9ucyBpbiBvcmRlciBvZiBwcmVjZWRlbmNlOgojCUJTVU4JOiBub25lCiMJU05BTgk6IGFsbCBkeWFkaWMgb3BzCiMJT1BFUlIJOiBmc3FydCgtTk9STSkKIwlPVkZMCTogYWxsIGV4Y2VwdCBmdHN0LGZjbXAKIwlVTkZMCTogYWxsIGV4Y2VwdCBmdHN0LGZjbXAKIwlEWgk6IGZkaXYKIwlJTkVYMgk6IGFsbCBleGNlcHQgZnRzdCxmY21wCiMJSU5FWDEJOiBhbGwKIwoKIyB3ZSBkZXRlcm1pbmUgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgZXhjZXB0aW9uKGlmIGFueSkgc2V0IGJ5IHRoZQojIGVtdWxhdGlvbiByb3V0aW5lIHRoYXQgaGFzIGFsc28gYmVlbiBlbmFibGVkIGJ5IHRoZSB1c2VyLgoJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQwCSMgZmV0Y2ggZXhjZXB0aW9ucyBlbmFibGVkCglibmUudwkJZnVfaW5fZW5hX3AJCSMgc29tZSBhcmUgZW5hYmxlZAoKZnVfaW5fY29udF9wOgojIGZjbXAgYW5kIGZ0c3QgZG8gbm90IHN0b3JlIGFueSByZXN1bHQuCgltb3YuYgkJMStFWENfQ01EUkVHKCVhNiksJWQwCSMgZmV0Y2ggZXh0ZW5zaW9uCglhbmRpLmIJCSYweDM4LCVkMAkJIyBleHRyYWN0IGJpdHMgMy01CgljbXBpLmIJCSVkMCwmMHgzOAkJIyBpcyBpbnN0ciBmY21wIG9yIGZ0c3Q/CgliZXEuYgkJZnVfaW5fZXhpdF9wCQkjIHllcwoKCWJmZXh0dQkJRVhDX0NNRFJFRyglYTYpeyY2OiYzfSwlZDAgIyBkeWFkaWM7IGxvYWQgZHN0IHJlZwoJYnNyLmwJCXN0b3JlX2ZwcmVnCQkjIHN0b3JlIHRoZSByZXN1bHQKCmZ1X2luX2V4aXRfcDoKCglidHN0CQkmMHg1LEVYQ19TUiglYTYpCSMgdXNlciBvciBzdXBlcnZpc29yPwoJYm5lLncJCWZ1X2luX2V4aXRfc19wCQkjIHN1cGVydmlzb3IKCgltb3YubAkJRVhDX0E3KCVhNiksJWEwCQkjIHVwZGF0ZSB1c2VyIGE3Cgltb3YubAkJJWEwLCV1c3AKCmZ1X2luX2V4aXRfY29udF9wOgoJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAvZnAxCglmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncwoJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQoKCXVubGsJCSVhNgkJCSMgdW5yYXZlbCBzdGFjayBmcmFtZQoKCWJ0c3QJCSYweDcsKCVzcCkJCSMgaXMgdHJhY2Ugb24/CglibmUudwkJZnVfdHJhY2VfcAkJIyB5ZXMKCglicmEubAkJX2Zwc3BfZG9uZQkJIyBleGl0IHRvIG9zCgojIHRoZSBleGNlcHRpb24gb2NjdXJyZWQgaW4gc3VwZXJ2aXNvciBtb2RlLiBjaGVjayB0byBzZWUgaWYgdGhlCiMgYWRkcmVzc2luZyBtb2RlIHdhcyAoYTcpKy4gaWYgc28sIHdlJ2xsIG5lZWQgdG8gc2hpZnQgdGhlCiMgc3RhY2sgZnJhbWUgInVwIi4KZnVfaW5fZXhpdF9zX3A6CglidHN0CQkmbWlhN19iaXQsU1BDT05EX0ZMRyglYTYpICMgd2FzIGVhIG1vZGUgKGE3KSsKCWJlcS5iCQlmdV9pbl9leGl0X2NvbnRfcAkjIG5vCgoJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAvZnAxCglmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncwoJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQoKCXVubGsJCSVhNgkJCSMgdW5yYXZlbCBzdGFjayBmcmFtZQoKIyBzaGlmdCB0aGUgc3RhY2sgZnJhbWUgInVwIi4gd2UgZG9uJ3QgcmVhbGx5IGNhcmUgYWJvdXQgdGhlIDxlYT4gZmllbGQuCgltb3YubAkJMHg0KCVzcCksMHgxMCglc3ApCgltb3YubAkJMHgwKCVzcCksMHhjKCVzcCkKCWFkZC5sCQkmMHhjLCVzcAoKCWJ0c3QJCSYweDcsKCVzcCkJCSMgaXMgdHJhY2Ugb24/CglibmUudwkJZnVfdHJhY2VfcAkJIyB5ZXMKCglicmEubAkJX2Zwc3BfZG9uZQkJIyBleGl0IHRvIG9zCgpmdV9pbl9lbmFfcDoKCWFuZC5iCQlGUFNSX0VYQ0VQVCglYTYpLCVkMAkjIGtlZXAgb25seSBvbmVzIGVuYWJsZWQgJiBzZXQKCWJmZmZvCQklZDB7JjI0OiY4fSwlZDAJCSMgZmluZCBoaWdoZXN0IHByaW9yaXR5IGV4Y2VwdGlvbgoJYm5lLmIJCWZ1X2luX2V4Y19wCQkjIGF0IGxlYXN0IG9uZSB3YXMgc2V0CgojCiMgTm8gZXhjZXB0aW9ucyBvY2N1cnJlZCB0aGF0IHdlcmUgYWxzbyBlbmFibGVkLiBOb3c6CiMKIwlpZiAoT1ZGTCAmJiBvdmZsX2Rpc2FibGVkICYmIGluZXhhY3RfZW5hYmxlZCkgewojCSAgICBicmFuY2ggdG8gX3JlYWxfaW5leCgpIChldmVuIGlmIHRoZSByZXN1bHQgd2FzIGV4YWN0ISk7CiMJfSBlbHNlIHsKIwkgICAgc2F2ZSB0aGUgcmVzdWx0IGluIHRoZSBwcm9wZXIgZnAgcmVnICh1bmxlc3MgdGhlIG9wIGlzIGZjbXAgb3IgZnRzdCk7CiMJICAgIHJldHVybjsKIwl9CiMKCWJ0c3QJCSZvdmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgd2FzIG92ZXJmbG93IHNldD8KCWJlcS53CQlmdV9pbl9jb250X3AJCSMgbm8KCmZ1X2luX292ZmxjaGtfcDoKCWJ0c3QJCSZpbmV4Ml9iaXQsRlBDUl9FTkFCTEUoJWE2KSAjIHdhcyBpbmV4YWN0IGVuYWJsZWQ/CgliZXEudwkJZnVfaW5fY29udF9wCQkjIG5vCglicmEudwkJZnVfaW5fZXhjX292ZmxfcAkjIGRvIF9yZWFsX2luZXgoKSBub3cKCiMKIyBBbiBleGNlcHRpb24gb2NjdXJyZWQgYW5kIHRoYXQgZXhjZXB0aW9uIHdhcyBlbmFibGVkOgojCiMJc2hpZnQgZW5hYmxlZCBleGNlcHRpb24gZmllbGQgaW50byBsbyBieXRlIG9mIGQwOwojCWlmICgoKElORVgyIHx8IElORVgxKSAmJiBpbmV4X2VuYWJsZWQgJiYgT1ZGTCAmJiBvdmZsX2Rpc2FibGVkKSB8fAojCSAgICAoKElORVgyIHx8IElORVgxKSAmJiBpbmV4X2VuYWJsZWQgJiYgVU5GTCAmJiB1bmZsX2Rpc2FibGVkKSkgewojCQkvKgojCQkgKiB0aGlzIGlzIHRoZSBjYXNlIHdoZXJlIHdlIG11c3QgY2FsbCBfcmVhbF9pbmV4KCkgbm93IG9yIGVsc2UKIwkJICogdGhlcmUgd2lsbCBiZSBubyBvdGhlciB3YXkgdG8gcGFzcyBpdCB0aGUgZXhjZXB0aW9uYWwgb3BlcmFuZAojCQkgKi8KIwkJY2FsbCBfcmVhbF9pbmV4KCk7CiMJfSBlbHNlIHsKIwkJcmVzdG9yZSBleGMgc3RhdGUgKFNOQU58fE9QRVJSfHxPVkZMfHxVTkZMfHxEWnx8SU5FWCkgaW50byB0aGUgRlBVOwojCX0KIwpmdV9pbl9leGNfcDoKCXN1YmkubAkJJjI0LCVkMAkJCSMgZml4IG9mZnNldCB0byBiZSAwLTgKCWNtcGkuYgkJJWQwLCYweDYJCSMgaXMgZXhjZXB0aW9uIElORVg/ICg2IG9yIDcpCglibHQuYgkJZnVfaW5fZXhjX2V4aXRfcAkjIG5vCgojIHRoZSBlbmFibGVkIGV4Y2VwdGlvbiB3YXMgaW5leGFjdAoJYnRzdAkJJnVuZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgIyBkaWQgZGlzYWJsZWQgdW5kZXJmbG93IG9jY3VyPwoJYm5lLncJCWZ1X2luX2V4Y191bmZsX3AJIyB5ZXMKCWJ0c3QJCSZvdmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgZGlkIGRpc2FibGVkIG92ZXJmbG93IG9jY3VyPwoJYm5lLncJCWZ1X2luX2V4Y19vdmZsX3AJIyB5ZXMKCiMgaGVyZSwgd2UgaW5zZXJ0IHRoZSBjb3JyZWN0IGZzYXZlIHN0YXR1cyB2YWx1ZSBpbnRvIHRoZSBmc2F2ZSBmcmFtZSBmb3IgdGhlCiMgY29ycmVzcG9uZGluZyBleGNlcHRpb24uIHRoZSBvcGVyYW5kIGluIHRoZSBmc2F2ZSBmcmFtZSBzaG91bGQgYmUgdGhlIG9yaWdpbmFsCiMgc3JjIG9wZXJhbmQuCiMgYXMgYSByZW1pbmRlciBmb3IgZnV0dXJlIHByZWRpY3RlZCBwYWluIGFuZCBhZ29ueSwgd2UgYXJlIHBhc3NpbmcgaW4gZnNhdmUgdGhlCiMgIm5vbi1za2V3ZWQiIG9wZXJhbmQgZm9yIGNhc2VzIG9mIHNnbCBhbmQgZGJsIHNyYyBJTkZzLE5BTnMsIGFuZCBERU5PUk1zLgojIHRoaXMgaXMgSU5DT1JSRUNUIGZvciBlbmFibGVkIFNOQU4gd2hpY2ggd291bGQgZ2l2ZSB0byB0aGUgdXNlciB0aGUgc2tld2VkIFNOQU4hISEKZnVfaW5fZXhjX2V4aXRfcDoKCWJ0c3QJCSYweDUsRVhDX1NSKCVhNikJIyB1c2VyIG9yIHN1cGVydmlzb3I/CglibmUudwkJZnVfaW5fZXhjX2V4aXRfc19wCSMgc3VwZXJ2aXNvcgoKCW1vdi5sCQlFWENfQTcoJWE2KSwlYTAJCSMgdXBkYXRlIHVzZXIgYTcKCW1vdi5sCQklYTAsJXVzcAoKZnVfaW5fZXhjX2V4aXRfY29udF9wOgoJbW92LncJCSh0YmxfZXhjZXB0X3AuYiwlcGMsJWQwLncqMiksMitGUF9TUkMoJWE2KQoKCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwL2ZwMQoJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKCglmcmVzdG9yZQlGUF9TUkMoJWE2KQkJIyByZXN0b3JlIHNyYyBvcAoKCXVubGsJCSVhNgoKCWJ0c3QJCSYweDcsKCVzcCkJCSMgaXMgdHJhY2UgZW5hYmxlZD8KCWJuZS53CQlmdV90cmFjZV9wCQkjIHllcwoKCWJyYS5sCQlfZnBzcF9kb25lCgp0YmxfZXhjZXB0X3A6CglzaG9ydAkJMHhlMDAwLDB4ZTAwNiwweGUwMDQsMHhlMDA1CglzaG9ydAkJMHhlMDAzLDB4ZTAwMiwweGUwMDEsMHhlMDAxCgpmdV9pbl9leGNfb3ZmbF9wOgoJbW92LncJCSYweDMsJWQwCglicmEudwkJZnVfaW5fZXhjX2V4aXRfcAoKZnVfaW5fZXhjX3VuZmxfcDoKCW1vdi53CQkmMHg0LCVkMAoJYnJhLncJCWZ1X2luX2V4Y19leGl0X3AKCmZ1X2luX2V4Y19leGl0X3NfcDoKCWJ0c3QJCSZtaWE3X2JpdCxTUENPTkRfRkxHKCVhNikKCWJlcS5iCQlmdV9pbl9leGNfZXhpdF9jb250X3AKCgltb3YudwkJKHRibF9leGNlcHRfcC5iLCVwYywlZDAudyoyKSwyK0ZQX1NSQyglYTYpCgoJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAvZnAxCglmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncwoJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQoKCWZyZXN0b3JlCUZQX1NSQyglYTYpCQkjIHJlc3RvcmUgc3JjIG9wCgoJdW5sawkJJWE2CQkJIyB1bnJhdmVsIHN0YWNrIGZyYW1lCgojIHNoaWZ0IHN0YWNrIGZyYW1lICJ1cCIuIHdobyBjYXJlcyBhYm91dCA8ZWE+IGZpZWxkLgoJbW92LmwJCTB4NCglc3ApLDB4MTAoJXNwKQoJbW92LmwJCTB4MCglc3ApLDB4Yyglc3ApCglhZGQubAkJJjB4Yywlc3AKCglidHN0CQkmMHg3LCglc3ApCQkjIGlzIHRyYWNlIG9uPwoJYm5lLmIJCWZ1X3RyYWNlX3AJCSMgeWVzCgoJYnJhLmwJCV9mcHNwX2RvbmUJCSMgZXhpdCB0byBvcwoKIwojIFRoZSBvcGNsYXNzIHR3byBQQUNLRUQgaW5zdHJ1Y3Rpb24gdGhhdCB0b29rIGFuICJVbmltcGxlbWVudGVkIERhdGEgVHlwZSIKIyBleGNlcHRpb24gd2FzIGJlaW5nIHRyYWNlZC4gTWFrZSB0aGUgImN1cnJlbnQiIFBDIHRoZSBGUElBUiBhbmQgcHV0IGl0IGluIHRoZQojIHRyYWNlIHN0YWNrIGZyYW1lIHRoZW4ganVtcCB0byBfcmVhbF90cmFjZSgpLgojCiMJCSAgVU5TVVBQIEZSQU1FCQkgICBUUkFDRSBGUkFNRQojCQkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgojCQkqICAgICAgRUEJKgkqICAgIEN1cnJlbnQJKgojCQkqCQkqCSogICAgICBQQwkqCiMJCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCiMJCSogMHgyICoJMHgwZGMJKgkqIDB4MiAqICAweDAyNAkqCiMJCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCiMJCSogICAgIE5leHQJKgkqICAgICBOZXh0CSoKIwkJKiAgICAgIFBDCSoJKiAgICAgIFBDCSoKIwkJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKIwkJKiAgICAgIFNSCSoJKiAgICAgIFNSCSoKIwkJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKZnVfdHJhY2VfcDoKCW1vdi53CQkmMHgyMDI0LDB4Niglc3ApCglmbW92LmwJCSVmcGlhciwweDgoJXNwKQoKCWJyYS5sCQlfcmVhbF90cmFjZQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpmdV9vdXRfcGFjazoKCgojIEknbSBub3Qgc3VyZSBhdCB0aGlzIHBvaW50IHdoYXQgRlBTUiBiaXRzIGFyZSB2YWxpZCBmb3IgdGhpcyBpbnN0cnVjdGlvbi4KIyBzbywgc2luY2UgdGhlIGVtdWxhdGlvbiByb3V0aW5lcyByZS1jcmVhdGUgdGhlbSBhbnl3YXlzLCB6ZXJvIGV4Y2VwdGlvbiBmaWVsZC4KIyBmbW92ZSBvdXQgZG9lc24ndCBhZmZlY3QgY2NvZGVzLgoJYW5kLmwJCSYweGZmZmYwMGZmLFVTRVJfRlBTUiglYTYpICMgemVybyBleGNlcHRpb24gZmllbGQKCglmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBjdXJyZW50IGNvbnRyb2wgcmVncwoJZm1vdi5sCQkmMHgwLCVmcHNyCgoJYmZleHR1CQlFWENfQ01EUkVHKCVhNil7JjY6JjN9LCVkMAoJYnNyLmwJCWxvYWRfZnBuMQoKIyB1bmxpa2Ugb3RoZXIgb3BjbGFzcyAzLCB1bmltcGxlbWVudGVkIGRhdGEgdHlwZSBleGNlcHRpb25zLCBwYWNrZWQgbXVzdCBiZQojIGFibGUgdG8gZGV0ZWN0IGFsbCBvcGVyYW5kIHR5cGVzLgoJbGVhCQlGUF9TUkMoJWE2KSwlYTAKCWJzci5sCQlzZXRfdGFnX3gJCSMgdGFnIHRoZSBvcGVyYW5kIHR5cGUKCWNtcGkuYgkJJWQwLCZVTk5PUk0JCSMgaXMgb3BlcmFuZCBhbiBVTk5PUk0/CglibmUuYgkJZnVfb3AyX3AJCSMgbm8KCWJzci5sCQl1bm5vcm1fZml4CQkjIHllczsgY29udmVydCB0byBOT1JNLERFTk9STSxvciBaRVJPCgpmdV9vcDJfcDoKCW1vdi5iCQklZDAsU1RBRyglYTYpCQkjIHNhdmUgc3JjIG9wdHlwZSB0YWcKCgljbHIubAkJJWQwCgltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgZmV0Y2ggcm5kIG1vZGUvcHJlYwoKCWxlYQkJRlBfU1JDKCVhNiksJWEwCQkjIHBhc3MgcHRyIHRvIHNyYyBvcGVyYW5kCgoJbW92LmwJCSglYTYpLEVYQ19BNiglYTYpCSMgaW4gY2FzZSBhNiBjaGFuZ2VzCglic3IubAkJZm91dAkJCSMgY2FsbCBmbW92ZSBvdXQgcm91dGluZQoKIyBFeGNlcHRpb25zIGluIG9yZGVyIG9mIHByZWNlZGVuY2U6CiMJQlNVTgk6IG5vCiMJU05BTgk6IHllcwojCU9QRVJSCTogaWYgKChrX2ZhY3RvciA+ICsxNykgfHwgKGRlYy4gZXhwIGV4Y2VlZHMgMyBkaWdpdHMpKQojCU9WRkwJOiBubwojCVVORkwJOiBubwojCURaCTogbm8KIwlJTkVYMgk6IHllcwojCUlORVgxCTogbm8KCiMgZGV0ZXJtaW5lIHRoZSBoaWdoZXN0IHByaW9yaXR5IGV4Y2VwdGlvbihpZiBhbnkpIHNldCBieSB0aGUKIyBlbXVsYXRpb24gcm91dGluZSB0aGF0IGhhcyBhbHNvIGJlZW4gZW5hYmxlZCBieSB0aGUgdXNlci4KCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMAkjIGZldGNoIGV4Y2VwdGlvbnMgZW5hYmxlZAoJYm5lLncJCWZ1X291dF9lbmFfcAkJIyBzb21lIGFyZSBlbmFibGVkCgpmdV9vdXRfZXhpdF9wOgoJbW92LmwJCUVYQ19BNiglYTYpLCglYTYpCSMgcmVzdG9yZSBhNgoKCWJ0c3QJCSYweDUsRVhDX1NSKCVhNikJIyB1c2VyIG9yIHN1cGVydmlzb3I/CglibmUuYgkJZnVfb3V0X2V4aXRfc19wCQkjIHN1cGVydmlzb3IKCgltb3YubAkJRVhDX0E3KCVhNiksJWEwCQkjIHVwZGF0ZSB1c2VyIGE3Cgltb3YubAkJJWEwLCV1c3AKCmZ1X291dF9leGl0X2NvbnRfcDoKCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwL2ZwMQoJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKCgl1bmxrCQklYTYJCQkjIHVucmF2ZWwgc3RhY2sgZnJhbWUKCglidHN0CQkmMHg3LCglc3ApCQkjIGlzIHRyYWNlIG9uPwoJYm5lLncJCWZ1X3RyYWNlX3AJCSMgeWVzCgoJYnJhLmwJCV9mcHNwX2RvbmUJCSMgZXhpdCB0byBvcwoKIyB0aGUgZXhjZXB0aW9uIG9jY3VycmVkIGluIHN1cGVydmlzb3IgbW9kZS4gY2hlY2sgdG8gc2VlIGlmIHRoZQojIGFkZHJlc3NpbmcgbW9kZSB3YXMgLShhNykuIGlmIHNvLCB3ZSdsbCBuZWVkIHRvIHNoaWZ0IHRoZQojIHN0YWNrIGZyYW1lICJkb3duIi4KZnVfb3V0X2V4aXRfc19wOgoJYnRzdAkJJm1kYTdfYml0LFNQQ09ORF9GTEcoJWE2KSAjIHdhcyBlYSBtb2RlIC0oYTcpCgliZXEuYgkJZnVfb3V0X2V4aXRfY29udF9wCSMgbm8KCglmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC9mcDEKCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCgltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCgoJbW92LmwJCSglYTYpLCVhNgkJIyByZXN0b3JlIGZyYW1lIHBvaW50ZXIKCgltb3YubAkJTE9DQUxfU0laRStFWENfU1IoJXNwKSxMT0NBTF9TSVpFK0VYQ19TUi0weGMoJXNwKQoJbW92LmwJCUxPQ0FMX1NJWkUrMitFWENfUEMoJXNwKSxMT0NBTF9TSVpFKzIrRVhDX1BDLTB4Yyglc3ApCgojIG5vdywgY29weSB0aGUgcmVzdWx0IHRvIHRoZSBwcm9wZXIgcGxhY2Ugb24gdGhlIHN0YWNrCgltb3YubAkJTE9DQUxfU0laRStGUF9EU1RfRVgoJXNwKSxMT0NBTF9TSVpFK0VYQ19TUisweDAoJXNwKQoJbW92LmwJCUxPQ0FMX1NJWkUrRlBfRFNUX0hJKCVzcCksTE9DQUxfU0laRStFWENfU1IrMHg0KCVzcCkKCW1vdi5sCQlMT0NBTF9TSVpFK0ZQX0RTVF9MTyglc3ApLExPQ0FMX1NJWkUrRVhDX1NSKzB4OCglc3ApCgoJYWRkLmwJCSZMT0NBTF9TSVpFLTB4OCwlc3AKCglidHN0CQkmMHg3LCglc3ApCglibmUudwkJZnVfdHJhY2VfcAoKCWJyYS5sCQlfZnBzcF9kb25lCgpmdV9vdXRfZW5hX3A6CglhbmQuYgkJRlBTUl9FWENFUFQoJWE2KSwlZDAJIyBrZWVwIG9ubHkgb25lcyBlbmFibGVkCgliZmZmbwkJJWQweyYyNDomOH0sJWQwCQkjIGZpbmQgaGlnaGVzdCBwcmlvcml0eSBleGNlcHRpb24KCWJlcS53CQlmdV9vdXRfZXhpdF9wCgoJbW92LmwJCUVYQ19BNiglYTYpLCglYTYpCSMgcmVzdG9yZSBhNgoKIyBhbiBleGNlcHRpb24gb2NjdXJyZWQgYW5kIHRoYXQgZXhjZXB0aW9uIHdhcyBlbmFibGVkLgojIHRoZSBvbmx5IGV4Y2VwdGlvbiBwb3NzaWJsZSBvbiBwYWNrZWQgbW92ZSBvdXQgYXJlIElORVgsIE9QRVJSLCBhbmQgU05BTi4KZnVfb3V0X2V4Y19wOgoJY21waS5iCQklZDAsJjB4MWEKCWJndC53CQlmdV9pbmV4X3AyCgliZXEudwkJZnVfb3BlcnJfcAoKZnVfc25hbl9wOgoJYnRzdAkJJjB4NSxFWENfU1IoJWE2KQoJYm5lLmIJCWZ1X3NuYW5fc19wCgoJbW92LmwJCUVYQ19BNyglYTYpLCVhMAoJbW92LmwJCSVhMCwldXNwCglicmEudwkJZnVfc25hbgoKZnVfc25hbl9zX3A6CgljbXBpLmIJCVNQQ09ORF9GTEcoJWE2KSwmbWRhN19mbGcKCWJuZS53CQlmdV9zbmFuCgojIHRoZSBpbnN0cnVjdGlvbiB3YXMgImZtb3ZlLnAgZnBuLC0oYTcpIiBmcm9tIHN1cGVydmlzb3IgbW9kZS4KIyB0aGUgc3RyYXRlZ3kgaXMgdG8gbW92ZSB0aGUgZXhjZXB0aW9uIGZyYW1lICJkb3duIiAxMiBieXRlcy4gdGhlbiwgd2UKIyBjYW4gc3RvcmUgdGhlIGRlZmF1bHQgcmVzdWx0IHdoZXJlIHRoZSBleGNlcHRpb24gZnJhbWUgd2FzLgoJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAvZnAxCglmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncwoJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQoKCW1vdi53CQkmMHgzMGQ4LEVYQ19WT0ZGKCVhNikJIyB2ZWN0b3Igb2Zmc2V0ID0gMHhkMAoJbW92LncJCSYweGUwMDYsMitGUF9TUkMoJWE2KQkjIHNldCBmc2F2ZSBzdGF0dXMKCglmcmVzdG9yZQlGUF9TUkMoJWE2KQkJIyByZXN0b3JlIHNyYyBvcGVyYW5kCgoJbW92LmwJCSglYTYpLCVhNgkJIyByZXN0b3JlIGZyYW1lIHBvaW50ZXIKCgltb3YubAkJTE9DQUxfU0laRStFWENfU1IoJXNwKSxMT0NBTF9TSVpFK0VYQ19TUi0weGMoJXNwKQoJbW92LmwJCUxPQ0FMX1NJWkUrMitFWENfUEMoJXNwKSxMT0NBTF9TSVpFKzIrRVhDX1BDLTB4Yyglc3ApCgltb3YubAkJTE9DQUxfU0laRStFWENfRUEoJXNwKSxMT0NBTF9TSVpFK0VYQ19FQS0weGMoJXNwKQoKIyBub3csIHdlIGNvcHkgdGhlIGRlZmF1bHQgcmVzdWx0IHRvIGl0cyBwcm9wZXIgbG9jYXRpb24KCW1vdi5sCQlMT0NBTF9TSVpFK0ZQX0RTVF9FWCglc3ApLExPQ0FMX1NJWkUrMHg0KCVzcCkKCW1vdi5sCQlMT0NBTF9TSVpFK0ZQX0RTVF9ISSglc3ApLExPQ0FMX1NJWkUrMHg4KCVzcCkKCW1vdi5sCQlMT0NBTF9TSVpFK0ZQX0RTVF9MTyglc3ApLExPQ0FMX1NJWkUrMHhjKCVzcCkKCglhZGQubAkJJkxPQ0FMX1NJWkUtMHg4LCVzcAoKCglicmEubAkJX3JlYWxfc25hbgoKZnVfb3BlcnJfcDoKCWJ0c3QJCSYweDUsRVhDX1NSKCVhNikKCWJuZS53CQlmdV9vcGVycl9wX3MKCgltb3YubAkJRVhDX0E3KCVhNiksJWEwCgltb3YubAkJJWEwLCV1c3AKCWJyYS53CQlmdV9vcGVycgoKZnVfb3BlcnJfcF9zOgoJY21waS5iCQlTUENPTkRfRkxHKCVhNiksJm1kYTdfZmxnCglibmUudwkJZnVfb3BlcnIKCiMgdGhlIGluc3RydWN0aW9uIHdhcyAiZm1vdmUucCBmcG4sLShhNykiIGZyb20gc3VwZXJ2aXNvciBtb2RlLgojIHRoZSBzdHJhdGVneSBpcyB0byBtb3ZlIHRoZSBleGNlcHRpb24gZnJhbWUgImRvd24iIDEyIGJ5dGVzLiB0aGVuLCB3ZQojIGNhbiBzdG9yZSB0aGUgZGVmYXVsdCByZXN1bHQgd2hlcmUgdGhlIGV4Y2VwdGlvbiBmcmFtZSB3YXMuCglmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC9mcDEKCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCgltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCgoJbW92LncJCSYweDMwZDAsRVhDX1ZPRkYoJWE2KQkjIHZlY3RvciBvZmZzZXQgPSAweGQwCgltb3YudwkJJjB4ZTAwNCwyK0ZQX1NSQyglYTYpCSMgc2V0IGZzYXZlIHN0YXR1cwoKCWZyZXN0b3JlCUZQX1NSQyglYTYpCQkjIHJlc3RvcmUgc3JjIG9wZXJhbmQKCgltb3YubAkJKCVhNiksJWE2CQkjIHJlc3RvcmUgZnJhbWUgcG9pbnRlcgoKCW1vdi5sCQlMT0NBTF9TSVpFK0VYQ19TUiglc3ApLExPQ0FMX1NJWkUrRVhDX1NSLTB4Yyglc3ApCgltb3YubAkJTE9DQUxfU0laRSsyK0VYQ19QQyglc3ApLExPQ0FMX1NJWkUrMitFWENfUEMtMHhjKCVzcCkKCW1vdi5sCQlMT0NBTF9TSVpFK0VYQ19FQSglc3ApLExPQ0FMX1NJWkUrRVhDX0VBLTB4Yyglc3ApCgojIG5vdywgd2UgY29weSB0aGUgZGVmYXVsdCByZXN1bHQgdG8gaXRzIHByb3BlciBsb2NhdGlvbgoJbW92LmwJCUxPQ0FMX1NJWkUrRlBfRFNUX0VYKCVzcCksTE9DQUxfU0laRSsweDQoJXNwKQoJbW92LmwJCUxPQ0FMX1NJWkUrRlBfRFNUX0hJKCVzcCksTE9DQUxfU0laRSsweDgoJXNwKQoJbW92LmwJCUxPQ0FMX1NJWkUrRlBfRFNUX0xPKCVzcCksTE9DQUxfU0laRSsweGMoJXNwKQoKCWFkZC5sCQkmTE9DQUxfU0laRS0weDgsJXNwCgoKCWJyYS5sCQlfcmVhbF9vcGVycgoKZnVfaW5leF9wMjoKCWJ0c3QJCSYweDUsRVhDX1NSKCVhNikKCWJuZS53CQlmdV9pbmV4X3NfcDIKCgltb3YubAkJRVhDX0E3KCVhNiksJWEwCgltb3YubAkJJWEwLCV1c3AKCWJyYS53CQlmdV9pbmV4CgpmdV9pbmV4X3NfcDI6CgljbXBpLmIJCVNQQ09ORF9GTEcoJWE2KSwmbWRhN19mbGcKCWJuZS53CQlmdV9pbmV4CgojIHRoZSBpbnN0cnVjdGlvbiB3YXMgImZtb3ZlLnAgZnBuLC0oYTcpIiBmcm9tIHN1cGVydmlzb3IgbW9kZS4KIyB0aGUgc3RyYXRlZ3kgaXMgdG8gbW92ZSB0aGUgZXhjZXB0aW9uIGZyYW1lICJkb3duIiAxMiBieXRlcy4gdGhlbiwgd2UKIyBjYW4gc3RvcmUgdGhlIGRlZmF1bHQgcmVzdWx0IHdoZXJlIHRoZSBleGNlcHRpb24gZnJhbWUgd2FzLgoJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAvZnAxCglmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncwoJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQoKCW1vdi53CQkmMHgzMGM0LEVYQ19WT0ZGKCVhNikJIyB2ZWN0b3Igb2Zmc2V0ID0gMHhjNAoJbW92LncJCSYweGUwMDEsMitGUF9TUkMoJWE2KQkjIHNldCBmc2F2ZSBzdGF0dXMKCglmcmVzdG9yZQlGUF9TUkMoJWE2KQkJIyByZXN0b3JlIHNyYyBvcGVyYW5kCgoJbW92LmwJCSglYTYpLCVhNgkJIyByZXN0b3JlIGZyYW1lIHBvaW50ZXIKCgltb3YubAkJTE9DQUxfU0laRStFWENfU1IoJXNwKSxMT0NBTF9TSVpFK0VYQ19TUi0weGMoJXNwKQoJbW92LmwJCUxPQ0FMX1NJWkUrMitFWENfUEMoJXNwKSxMT0NBTF9TSVpFKzIrRVhDX1BDLTB4Yyglc3ApCgltb3YubAkJTE9DQUxfU0laRStFWENfRUEoJXNwKSxMT0NBTF9TSVpFK0VYQ19FQS0weGMoJXNwKQoKIyBub3csIHdlIGNvcHkgdGhlIGRlZmF1bHQgcmVzdWx0IHRvIGl0cyBwcm9wZXIgbG9jYXRpb24KCW1vdi5sCQlMT0NBTF9TSVpFK0ZQX0RTVF9FWCglc3ApLExPQ0FMX1NJWkUrMHg0KCVzcCkKCW1vdi5sCQlMT0NBTF9TSVpFK0ZQX0RTVF9ISSglc3ApLExPQ0FMX1NJWkUrMHg4KCVzcCkKCW1vdi5sCQlMT0NBTF9TSVpFK0ZQX0RTVF9MTyglc3ApLExPQ0FMX1NJWkUrMHhjKCVzcCkKCglhZGQubAkJJkxPQ0FMX1NJWkUtMHg4LCVzcAoKCglicmEubAkJX3JlYWxfaW5leAoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIwojIGlmIHdlJ3JlIHN0dWZmaW5nIGEgc291cmNlIG9wZXJhbmQgYmFjayBpbnRvIGFuIGZzYXZlIGZyYW1lIHRoZW4gd2UKIyBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IGZvciBzaW5nbGUgb3IgZG91YmxlIHNvdXJjZSBvcGVyYW5kcyB0aGF0IHRoZQojIGZvcm1hdCBzdHVmZmVkIGlzIGFzIHdlaXJkIGFzIHRoZSBoYXJkd2FyZSB1c3VhbGx5IG1ha2VzIGl0LgojCglnbG9iYWwJCWZ1bmltcF9za2V3CmZ1bmltcF9za2V3OgoJYmZleHR1CQlFWENfRVhUV09SRCglYTYpeyYzOiYzfSwlZDAgIyBleHRyYWN0IHNyYyBzcGVjaWZpZXIKCWNtcGkuYgkJJWQwLCYweDEJCSMgd2FzIHNyYyBzZ2w/CgliZXEuYgkJZnVuaW1wX3NrZXdfc2dsCQkjIHllcwoJY21waS5iCQklZDAsJjB4NQkJIyB3YXMgc3JjIGRibD8KCWJlcS5iCQlmdW5pbXBfc2tld19kYmwJCSMgeWVzCglydHMKCmZ1bmltcF9za2V3X3NnbDoKCW1vdi53CQlGUF9TUkNfRVgoJWE2KSwlZDAJIyBmZXRjaCBERU5PUk0gZXhwb25lbnQKCWFuZGkudwkJJjB4N2ZmZiwlZDAJCSMgc3RyaXAgc2lnbgoJYmVxLmIJCWZ1bmltcF9za2V3X3NnbF9ub3QKCWNtcGkudwkJJWQwLCYweDNmODAKCWJndC5iCQlmdW5pbXBfc2tld19zZ2xfbm90CgluZWcudwkJJWQwCQkJIyBtYWtlIGV4cG9uZW50IG5lZ2F0aXZlCglhZGRpLncJCSYweDNmODEsJWQwCQkjIGZpbmQgYW10IHRvIHNoaWZ0Cgltb3YubAkJRlBfU1JDX0hJKCVhNiksJWQxCSMgZmV0Y2ggREVOT1JNIGhpKG1hbikKCWxzci5sCQklZDAsJWQxCQkJIyBzaGlmdCBpdAoJYnNldAkJJjMxLCVkMQkJCSMgc2V0IGotYml0Cgltb3YubAkJJWQxLEZQX1NSQ19ISSglYTYpCSMgaW5zZXJ0IG5ldyBoaShtYW4pCglhbmRpLncJCSYweDgwMDAsRlBfU1JDX0VYKCVhNikJIyBjbGVhciBvbGQgZXhwb25lbnQKCW9yaS53CQkmMHgzZjgwLEZQX1NSQ19FWCglYTYpCSMgaW5zZXJ0IG5ldyAic2tld2VkIiBleHBvbmVudApmdW5pbXBfc2tld19zZ2xfbm90OgoJcnRzCgpmdW5pbXBfc2tld19kYmw6Cgltb3YudwkJRlBfU1JDX0VYKCVhNiksJWQwCSMgZmV0Y2ggREVOT1JNIGV4cG9uZW50CglhbmRpLncJCSYweDdmZmYsJWQwCQkjIHN0cmlwIHNpZ24KCWJlcS5iCQlmdW5pbXBfc2tld19kYmxfbm90CgljbXBpLncJCSVkMCwmMHgzYzAwCgliZ3QuYgkJZnVuaW1wX3NrZXdfZGJsX25vdAoKCXRzdC5iCQlGUF9TUkNfRVgoJWE2KQkJIyBtYWtlICJpbnRlcm5hbCBmb3JtYXQiCglzbWkuYgkJMHgyK0ZQX1NSQyglYTYpCgltb3YudwkJJWQwLEZQX1NSQ19FWCglYTYpCSMgaW5zZXJ0IGV4cG9uZW50IHdpdGggY2xlYXJlZCBzaWduCgljbHIubAkJJWQwCQkJIyBjbGVhciBnLHIscwoJbGVhCQlGUF9TUkMoJWE2KSwlYTAJCSMgcGFzcyBwdHIgdG8gc3JjIG9wCgltb3YudwkJJjB4M2MwMSwlZDEJCSMgcGFzcyBkZW5vcm0gdGhyZXNob2xkCglic3IubAkJZG5ybV9scAkJCSMgZGVub3JtIGl0Cgltb3YudwkJJjB4M2MwMCwlZDAJCSMgbmV3IGV4cG9uZW50Cgl0c3QuYgkJMHgyK0ZQX1NSQyglYTYpCQkjIGlzIHNpZ24gc2V0PwoJYmVxLmIJCWZzc19kYmxfZGVub3JtX2RvbmUJIyBubwoJYnNldAkJJjE1LCVkMAkJCSMgc2V0IHNpZ24KZnNzX2RibF9kZW5vcm1fZG9uZToKCWJzZXQJCSYweDcsRlBfU1JDX0hJKCVhNikJIyBzZXQgai1iaXQKCW1vdi53CQklZDAsRlBfU1JDX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50CmZ1bmltcF9za2V3X2RibF9ub3Q6CglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCWdsb2JhbAkJX21lbV93cml0ZTIKX21lbV93cml0ZTI6CglidHN0CQkmMHg1LEVYQ19TUiglYTYpCgliZXEubAkJX2RtZW1fd3JpdGUKCW1vdi5sCQkweDAoJWEwKSxGUF9EU1RfRVgoJWE2KQoJbW92LmwJCTB4NCglYTApLEZQX0RTVF9ISSglYTYpCgltb3YubAkJMHg4KCVhMCksRlBfRFNUX0xPKCVhNikKCWNsci5sCQklZDEKCXJ0cwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJX2Zwc3BfZWZmYWRkKCk6IDA2MEZQU1AgZW50cnkgcG9pbnQgZm9yIEZQICJVbmltcGxlbWVudGVkCSMKIwkJCWVmZmVjdGl2ZSBhZGRyZXNzIiBleGNlcHRpb24uCQkJIwojCQkJCQkJCQkJIwojCVRoaXMgaGFuZGxlciBzaG91bGQgYmUgdGhlIGZpcnN0IGNvZGUgZXhlY3V0ZWQgdXBvbiB0YWtpbmcgdGhlCSMKIwlGUCBVbmltcGxlbWVudGVkIEVmZmVjdGl2ZSBBZGRyZXNzIGV4Y2VwdGlvbiBpbiBhbiBvcGVyYXRpbmcJIwojCXN5c3RlbS4JCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCV9pbWVtX3JlYWRfbG9uZygpIC0gcmVhZCBpbnN0cnVjdGlvbiBsb25nd29yZAkJCSMKIwlmaXhfc2tld2VkX29wcygpIC0gYWRqdXN0IHNyYyBvcGVyYW5kIGluIGZzYXZlIGZyYW1lCQkjCiMJc2V0X3RhZ194KCkgLSBkZXRlcm1pbmUgb3B0eXBlIG9mIHNyYy9kc3Qgb3BlcmFuZHMJCSMKIwlzdG9yZV9mcHJlZygpIC0gc3RvcmUgb3BjbGFzcyAwIG9yIDIgcmVzdWx0IHRvIEZQIHJlZ2ZpbGUJIwojCXVubm9ybV9maXgoKSAtIGNoYW5nZSBVTk5PUk0gb3BlcmFuZHMgdG8gTk9STSBvciBaRVJPCQkjCiMJbG9hZF9mcG4yKCkgLSBsb2FkIGRzdCBvcGVyYW5kIGZyb20gRlAgcmVnZmlsZQkJCSMKIwl0YmxfdW5zdXBwIC0gYWRkIG9mIHRhYmxlIG9mIGVtdWxhdGlvbiByb3V0aW5lcyBmb3Igb3BjbGFzcyAwLDIJIwojCWRlY2JpbigpIC0gY29udmVydCBwYWNrZWQgZGF0YSB0byBGUCBiaW5hcnkgZGF0YQkJIwojCV9yZWFsX2ZwdV9kaXNhYmxlZCgpIC0gImNhbGxvdXQiIGZvciAiRlBVIGRpc2FibGVkIiBleGNlcHRpb24JIwojCV9yZWFsX2FjY2VzcygpIC0gImNhbGxvdXQiIGZvciBhY2Nlc3MgZXJyb3IgZXhjZXB0aW9uCQkjCiMJX21lbV9yZWFkKCkgLSByZWFkIGV4dGVuZGVkIGltbWVkaWF0ZSBvcGVyYW5kIGZyb20gbWVtb3J5CSMKIwlfZnBzcF9kb25lKCkgLSAiY2FsbG91dCIgZm9yIGV4aXQ7IHdvcmsgYWxsIGRvbmUJCSMKIwlfcmVhbF90cmFjZSgpIC0gImNhbGxvdXQiIGZvciBUcmFjZSBlbmFibGVkIGV4Y2VwdGlvbgkJIwojCWZtb3ZtX2R5bmFtaWMoKSAtIGVtdWxhdGUgZHluYW1pYyBmbW92bSBpbnN0cnVjdGlvbgkJIwojCWZtb3ZtX2N0cmwoKSAtIGVtdWxhdGUgZm1vdm0gY29udHJvbCBpbnN0cnVjdGlvbgkJIwojCQkJCQkJCQkJIwojIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJLSBUaGUgc3lzdGVtIHN0YWNrIGNvbnRhaW5zIHRoZSAiVW5pbXBsZW1lbnRlZCA8ZWE+IiBzdGsgZnJhbWUJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJSWYgYWNjZXNzIGVycm9yOgkJCQkJCSMKIwktIFRoZSBzeXN0ZW0gc3RhY2sgaXMgY2hhbmdlZCB0byBhbiBhY2Nlc3MgZXJyb3Igc3RhY2sgZnJhbWUJIwojCUlmIEZQVSBkaXNhYmxlZDoJCQkJCQkjCiMJLSBUaGUgc3lzdGVtIHN0YWNrIGlzIGNoYW5nZWQgdG8gYW4gRlBVIGRpc2FibGVkIHN0YWNrIGZyYW1lCSMKIwlJZiBUcmFjZSBleGNlcHRpb24gZW5hYmxlZDoJCQkJCSMKIwktIFRoZSBzeXN0ZW0gc3RhY2sgaXMgY2hhbmdlZCB0byBhIFRyYWNlIGV4Y2VwdGlvbiBzdGFjayBmcmFtZQkjCiMJRWxzZTogKG5vcm1hbCBjYXNlKQkJCQkJCSMKIwktIE5vbmUgKGNvcnJlY3QgcmVzdWx0IGhhcyBiZWVuIHN0b3JlZCBhcyBhcHByb3ByaWF0ZSkJCSMKIwkJCQkJCQkJCSMKIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCVRoaXMgZXhjZXB0aW9uIGhhbmRsZXMgMyB0eXBlcyBvZiBvcGVyYXRpb25zOgkJCSMKIyAoMSkgRlAgSW5zdHJ1Y3Rpb25zIHVzaW5nIGV4dGVuZGVkIHByZWNpc2lvbiBvciBwYWNrZWQgaW1tZWRpYXRlCSMKIyAgICAgYWRkcmVzc2luZyBtb2RlLgkJCQkJCQkjCiMgKDIpIFRoZSAiZm1vdm0ueCIgaW5zdHJ1Y3Rpb24gdy8gZHluYW1pYyByZWdpc3RlciBzcGVjaWZpY2F0aW9uLgkjCiMgKDMpIFRoZSAiZm1vdm0ubCIgaW5zdHJ1Y3Rpb24gdy8gMiBvciAzIGNvbnRyb2wgcmVnaXN0ZXJzLgkJIwojCQkJCQkJCQkJIwojCUZvciBpbW1lZGlhdGUgZGF0YSBvcGVyYXRpb25zLCB0aGUgZGF0YSBpcyByZWFkIGluIHcvIGEJCSMKIyBfbWVtX3JlYWQoKSAiY2FsbG91dCIsIGNvbnZlcnRlZCB0byBGUCBiaW5hcnkgKGlmIHBhY2tlZCksIGFuZCB1c2VkCSMKIyBhcyB0aGUgc291cmNlIG9wZXJhbmQgdG8gdGhlIGluc3RydWN0aW9uIHNwZWNpZmllZCBieSB0aGUgaW5zdHJ1Y3Rpb24JIwojIHdvcmQuIElmIG5vIEZQIGV4Y2VwdGlvbiBzaG91bGQgYmUgcmVwb3J0ZWQgYWRzIGEgcmVzdWx0IG9mIHRoZQkjCiMgZW11bGF0aW9uLCB0aGVuIHRoZSByZXN1bHQgaXMgc3RvcmVkIHRvIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBhbmQJIwojIHRoZSBoYW5kbGVyIGV4aXRzIHRocm91Z2ggX2Zwc3BfZG9uZSgpLiBJZiBhbiBlbmFibGVkIGV4YyBoYXMgYmVlbgkjCiMgc2lnbmFsbGVkIGFzIGEgcmVzdWx0IG9mIGVtdWxhdGlvbiwgdGhlbiBhbiBmc2F2ZSBzdGF0ZSBmcmFtZQkJIwojIGNvcnJlc3BvbmRpbmcgdG8gdGhlIEZQIGV4Y2VwdGlvbiB0eXBlIG11c3QgYmUgZW50ZXJlZCBpbnRvIHRoZSAwNjAJIwojIEZQVSBiZWZvcmUgZXhpdGluZy4gSW4gZWl0aGVyIHRoZSBlbmFibGVkIG9yIGRpc2FibGVkIGNhc2VzLCB3ZQkjCiMgbXVzdCBhbHNvIGNoZWNrIGlmIGEgVHJhY2UgZXhjZXB0aW9uIGlzIHBlbmRpbmcsIGluIHdoaWNoIGNhc2UsIHdlCSMKIyBtdXN0IGNyZWF0ZSBhIFRyYWNlIGV4Y2VwdGlvbiBzdGFjayBmcmFtZSBmcm9tIHRoZSBjdXJyZW50IGV4Y2VwdGlvbgkjCiMgc3RhY2sgZnJhbWUuIElmIG5vIFRyYWNlIGlzIHBlbmRpbmcsIHdlIHNpbXBseSBleGl0IHRocm91Z2gJCSMKIyBfZnBzcF9kb25lKCkuCQkJCQkJCQkjCiMJRm9yICJmbW92bS54IiwgY2FsbCB0aGUgcm91dGluZSBmbW92bV9keW5hbWljKCkgd2hpY2ggd2lsbAkjCiMgZGVjb2RlIGFuZCBlbXVsYXRlIHRoZSBpbnN0cnVjdGlvbi4gTm8gRlAgZXhjZXB0aW9ucyBjYW4gYmUgcGVuZGluZwkjCiMgYXMgYSByZXN1bHQgb2YgdGhpcyBvcGVyYXRpb24gZW11bGF0aW9uLiBBIFRyYWNlIGV4Y2VwdGlvbiBjYW4gYmUJIwojIHBlbmRpbmcsIHRob3VnaCwgd2hpY2ggbWVhbnMgdGhlIGN1cnJlbnQgc3RhY2sgZnJhbWUgbXVzdCBiZSBjaGFuZ2VkCSMKIyB0byBhIFRyYWNlIHN0YWNrIGZyYW1lIGFuZCBhbiBleGl0IG1hZGUgdGhyb3VnaCBfcmVhbF90cmFjZSgpLgkjCiMgRm9yIHRoZSBjYXNlIG9mICJmbW92bS54IERuLC0oYTcpIiwgd2hlcmUgdGhlIG9mZmVuZGluZyBpbnN0cnVjdGlvbgkjCiMgd2FzIGV4ZWN1dGVkIGZyb20gc3VwZXJ2aXNvciBtb2RlLCB0aGlzIGhhbmRsZXIgbXVzdCBzdG9yZSB0aGUgRlAJIwojIHJlZ2lzdGVyIGZpbGUgdmFsdWVzIHRvIHRoZSBzeXN0ZW0gc3RhY2sgYnkgaXRzZWxmIHNpbmNlCQkjCiMgZm1vdm1fZHluYW1pYygpIGNhbid0IGhhbmRsZSB0aGlzLiBBIG5vcm1hbCBleGl0IGlzIG1hZGUgdGhyb3VnaAkjCiMgZnBzcF9kb25lKCkuCQkJCQkJCQkjCiMJRm9yICJmbW92bS5sIiwgZm1vdm1fY3RybCgpIGlzIHVzZWQgdG8gZW11bGF0ZSB0aGUgaW5zdHJ1Y3Rpb24uCSMKIyBBZ2FpbiwgYSBUcmFjZSBleGNlcHRpb24gbWF5IGJlIHBlbmRpbmcgYW5kIGFuIGV4aXQgbWFkZSB0aHJvdWdoCSMKIyBfcmVhbF90cmFjZSgpLiBFbHNlLCBhIG5vcm1hbCBleGl0IGlzIG1hZGUgdGhyb3VnaCBfZnBzcF9kb25lKCkuCSMKIwkJCQkJCQkJCSMKIwlCZWZvcmUgYW55IG9mIHRoZSBhYm92ZSBpcyBhdHRlbXB0ZWQsIGl0IG11c3QgYmUgY2hlY2tlZCB0bwkjCiMgc2VlIGlmIHRoZSBGUFUgaXMgZGlzYWJsZWQuIFNpbmNlIHRoZSAiVW5pbXAgPGVhPiIgZXhjZXB0aW9uIGlzIHRha2VuCSMKIyBiZWZvcmUgdGhlICJGUFUgZGlzYWJsZWQiIGV4Y2VwdGlvbiwgYnV0IHRoZSAiRlBVIGRpc2FibGVkIiBleGNlcHRpb24JIwojIGhhcyBoaWdoZXIgcHJpb3JpdHksIHdlIGNoZWNrIHRoZSBkaXNhYmxlZCBiaXQgaW4gdGhlIFBDUi4gSWYgc2V0LAkjCiMgdGhlbiB3ZSBtdXN0IGNyZWF0ZSBhbiA4IHdvcmQgIkZQVSBkaXNhYmxlZCIgZXhjZXB0aW9uIHN0YWNrIGZyYW1lCSMKIyBmcm9tIHRoZSBjdXJyZW50IDQgd29yZCBleGNlcHRpb24gc3RhY2sgZnJhbWUuIFRoaXMgaW5jbHVkZXMJCSMKIyByZXByb2R1Y2luZyB0aGUgZWZmZWN0aXZlIGFkZHJlc3Mgb2YgdGhlIGluc3RydWN0aW9uIHRvIHB1dCBvbiB0aGUJIwojIG5ldyBzdGFjayBmcmFtZS4JCQkJCQkJIwojCQkJCQkJCQkJIwojCUluIHRoZSBwcm9jZXNzIG9mIGFsbCBlbXVsYXRpb24gd29yaywgaWYgYSBfbWVtX3JlYWQoKQkJIwojICJjYWxsb3V0IiByZXR1cm5zIGEgZmFpbGluZyByZXN1bHQgaW5kaWNhdGluZyBhbiBhY2Nlc3MgZXJyb3IsIHRoZW4JIwojIHdlIG11c3QgY3JlYXRlIGFuIGFjY2VzcyBlcnJvciBzdGFjayBmcmFtZSBmcm9tIHRoZSBjdXJyZW50IHN0YWNrCSMKIyBmcmFtZS4gVGhpcyBpbmZvcm1hdGlvbiBpbmNsdWRlcyBhIGZhdWx0aW5nIGFkZHJlc3MgYW5kIGEgZmF1bHQtCSMKIyBzdGF0dXMtbG9uZ3dvcmQuIFRoZXNlIGFyZSBjcmVhdGVkIHdpdGhpbiB0aGlzIGhhbmRsZXIuCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCglnbG9iYWwJCV9mcHNwX2VmZmFkZApfZnBzcF9lZmZhZGQ6CgojIFRoaXMgZXhjZXB0aW9uIHR5cGUgdGFrZXMgcHJpb3JpdHkgb3ZlciB0aGUgIkxpbmUgRiBFbXVsYXRvciIKIyBleGNlcHRpb24uIFRoZXJlZm9yZSwgdGhlIEZQVSBjb3VsZCBiZSBkaXNhYmxlZCB3aGVuIGVudGVyaW5nIGhlcmUuCiMgU28sIHdlIG11c3QgY2hlY2sgdG8gc2VlIGlmIGl0J3MgZGlzYWJsZWQgYW5kIGhhbmRsZSB0aGF0IGNhc2Ugc2VwYXJhdGVseS4KCW1vdi5sCQklZDAsLSglc3ApCQkjIHNhdmUgZDAKCW1vdmMJCSVwY3IsJWQwCQkjIGxvYWQgcHJvYyBjcgoJYnRzdAkJJjB4MSwlZDAJCSMgaXMgRlBVIGRpc2FibGVkPwoJYm5lLncJCWllYV9kaXNhYmxlZAkJIyB5ZXMKCW1vdi5sCQkoJXNwKSssJWQwCQkjIHJlc3RvcmUgZDAKCglsaW5rCQklYTYsJi1MT0NBTF9TSVpFCSMgaW5pdCBzdGFjayBmcmFtZQoKCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLCVmcGlhcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCglmbW92bS54CQkmMHhjMCxFWENfRlBSRUdTKCVhNikJIyBzYXZlIGZwMC1mcDEgb24gc3RhY2sKCiMgUEMgb2YgaW5zdHJ1Y3Rpb24gdGhhdCB0b29rIHRoZSBleGNlcHRpb24gaXMgdGhlIFBDIGluIHRoZSBmcmFtZQoJbW92LmwJCUVYQ19QQyglYTYpLEVYQ19FWFRXUFRSKCVhNikKCgltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCglhZGRxLmwJCSYweDQsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCglic3IubAkJX2ltZW1fcmVhZF9sb25nCQkjIGZldGNoIHRoZSBpbnN0cnVjdGlvbiB3b3JkcwoJbW92LmwJCSVkMCxFWENfT1BXT1JEKCVhNikJIyBzdG9yZSBPUFdPUkQgYW5kIEVYVFdPUkQKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCgl0c3QudwkJJWQwCQkJIyBpcyBvcGVyYXRpb24gZm1vdmVtPwoJYm1pLncJCWllYV9mbW92bQkJIyB5ZXMKCiMKIyBoZXJlLCB3ZSB3aWxsIGhhdmU6CiMJZmFicwlmZGFicwlmc2FicwkJZmFjb3MJCWZtb2QKIwlmYWRkCWZkYWRkCWZzYWRkCQlmYXNpbgkJZnJlbQojCWZjbXAJCQkJZmF0YW4JCWZzY2FsZQojCWZkaXYJZmRkaXYJZnNkaXYJCWZhdGFuaAkJZnNpbgojCWZpbnQJCQkJZmNvcwkJZnNpbmNvcwojCWZpbnRyegkJCQlmY29zaAkJZnNpbmgKIwlmbW92ZQlmZG1vdmUJZnNtb3ZlCQlmZXRveAkJZnRhbgojCWZtdWwJZmRtdWwJZnNtdWwJCWZldG94bTEJCWZ0YW5oCiMJZm5lZwlmZG5lZwlmc25lZwkJZmdldGV4cAkJZnRlbnRveAojCWZzZ2xkaXYJCQkJZmdldG1hbgkJZnR3b3RveAojCWZzZ2xtdWwJCQkJZmxvZzEwCiMJZnNxcnQJCQkJZmxvZzIKIwlmc3ViCWZkc3ViCWZzc3ViCQlmbG9nbgojCWZ0c3QJCQkJZmxvZ25wMQojIHdoaWNoIGNhbiBhbGwgdXNlIGY8b3A+Lnt4LHB9CiMgc28sIG5vdyBpdCdzIGltbWVkaWF0ZSBkYXRhIGV4dGVuZGVkIHByZWNpc2lvbiBBTkQgUEFDS0VEIEZPUk1BVCEKIwppZWFfb3A6CglhbmRpLmwJCSYweDAwZmYwMGZmLFVTRVJfRlBTUiglYTYpCgoJYnRzdAkJJjB4YSwlZDAJCSMgaXMgc3JjIGZtdCB4IG9yIHA/CglibmUuYgkJaWVhX29wX3BhY2sJCSMgcGFja2VkCgoKCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIHBhc3M6IHB0ciB0byAjPGRhdGE+CglsZWEJCUZQX1NSQyglYTYpLCVhMQkJIyBwYXNzOiBwdHIgdG8gc3VwZXIgYWRkcgoJbW92LmwJCSYweGMsJWQwCQkjIHBhc3M6IDEyIGJ5dGVzCglic3IubAkJX2ltZW1fcmVhZAkJIyByZWFkIGV4dGVuZGVkIGltbWVkaWF0ZQoKCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KCWJuZS53CQlpZWFfaWFjYwkJIyB5ZXMKCglicmEuYgkJaWVhX29wX3NldHNyYwoKaWVhX29wX3BhY2s6CgoJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgcGFzczogcHRyIHRvICM8ZGF0YT4KCWxlYQkJRlBfU1JDKCVhNiksJWExCQkjIHBhc3M6IHB0ciB0byBzdXBlciBkc3QKCW1vdi5sCQkmMHhjLCVkMAkJIyBwYXNzOiAxMiBieXRlcwoJYnNyLmwJCV9pbWVtX3JlYWQJCSMgcmVhZCBwYWNrZWQgb3BlcmFuZAoKCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KCWJuZS53CQlpZWFfaWFjYwkJIyB5ZXMKCiMgVGhlIHBhY2tlZCBvcGVyYW5kIGlzIGFuIElORiBvciBhIE5BTiBpZiB0aGUgZXhwb25lbnQgZmllbGQgaXMgYWxsIG9uZXMuCgliZmV4dHUJCUZQX1NSQyglYTYpeyYxOiYxNX0sJWQwCSMgZ2V0IGV4cAoJY21waS53CQklZDAsJjB4N2ZmZgkJIyBJTkYgb3IgTkFOPwoJYmVxLmIJCWllYV9vcF9zZXRzcmMJCSMgb3BlcmFuZCBpcyBhbiBJTkYgb3IgTkFOCgojIFRoZSBwYWNrZWQgb3BlcmFuZCBpcyBhIHplcm8gaWYgdGhlIG1hbnRpc3NhIGlzIGFsbCB6ZXJvLCBlbHNlIGl0J3MKIyBhIG5vcm1hbCBwYWNrZWQgb3AuCgltb3YuYgkJMytGUF9TUkMoJWE2KSwlZDAJIyBnZXQgYnl0ZSA0CglhbmRpLmIJCSYweDBmLCVkMAkJIyBjbGVhciBhbGwgYnV0IGxhc3QgbnliYmxlCglibmUuYgkJaWVhX29wX2dwX25vdF9zcGVjCSMgbm90IGEgemVybwoJdHN0LmwJCUZQX1NSQ19ISSglYTYpCQkjIGlzIGx3IDIgemVybz8KCWJuZS5iCQlpZWFfb3BfZ3Bfbm90X3NwZWMJIyBub3QgYSB6ZXJvCgl0c3QubAkJRlBfU1JDX0xPKCVhNikJCSMgaXMgbHcgMyB6ZXJvPwoJYmVxLmIJCWllYV9vcF9zZXRzcmMJCSMgb3BlcmFuZCBpcyBhIFpFUk8KaWVhX29wX2dwX25vdF9zcGVjOgoJbGVhCQlGUF9TUkMoJWE2KSwlYTAJCSMgcGFzczogcHRyIHRvIHBhY2tlZCBvcAoJYnNyLmwJCWRlY2JpbgkJCSMgY29udmVydCB0byBleHRlbmRlZAoJZm1vdm0ueAkJJjB4ODAsRlBfU1JDKCVhNikJIyBtYWtlIHRoaXMgdGhlIHNyY29wCgppZWFfb3Bfc2V0c3JjOgoJYWRkaS5sCQkmMHhjLEVYQ19FWFRXUFRSKCVhNikJIyB1cGRhdGUgZXh0ZW5zaW9uIHdvcmQgcG9pbnRlcgoKIyBGUF9TUkMgbm93IGhvbGRzIHRoZSBzcmMgb3BlcmFuZC4KCWxlYQkJRlBfU1JDKCVhNiksJWEwCQkjIHBhc3M6IHB0ciB0byBzcmMgb3AKCWJzci5sCQlzZXRfdGFnX3gJCSMgdGFnIHRoZSBvcGVyYW5kIHR5cGUKCW1vdi5iCQklZDAsU1RBRyglYTYpCQkjIGNvdWxkIGJlIEFOWVRISU5HISEhCgljbXBpLmIJCSVkMCwmVU5OT1JNCQkjIGlzIG9wZXJhbmQgYW4gVU5OT1JNPwoJYm5lLmIJCWllYV9vcF9nZXRkc3QJCSMgbm8KCWJzci5sCQl1bm5vcm1fZml4CQkjIHllczsgY29udmVydCB0byBOT1JNL0RFTk9STS9aRVJPCgltb3YuYgkJJWQwLFNUQUcoJWE2KQkJIyBzZXQgbmV3IG9wdHlwZSB0YWcKaWVhX29wX2dldGRzdDoKCWNsci5iCQlTVE9SRV9GTEcoJWE2KQkJIyBjbGVhciAic3RvcmUgcmVzdWx0IiBib29sZWFuCgoJYnRzdAkJJjB4NSwxK0VYQ19DTURSRUcoJWE2KQkjIGlzIG9wZXJhdGlvbiBtb25hZGljIG9yIGR5YWRpYz8KCWJlcS5iCQlpZWFfb3BfZXh0cmFjdAkJIyBtb25hZGljCglidHN0CQkmMHg0LDErRVhDX0NNRFJFRyglYTYpCSMgaXMgb3BlcmF0aW9uIGZzaW5jb3MsZnRzdCxmY21wPwoJYm5lLmIJCWllYV9vcF9zcGVjCQkjIHllcwoKaWVhX29wX2xvYWRkc3Q6CgliZmV4dHUJCUVYQ19DTURSRUcoJWE2KXsmNjomM30sJWQwICMgZmV0Y2ggZHN0IHJlZ25vCglic3IubAkJbG9hZF9mcG4yCQkjIGxvYWQgZHN0IG9wZXJhbmQKCglsZWEJCUZQX0RTVCglYTYpLCVhMAkJIyBwYXNzOiBwdHIgdG8gZHN0IG9wCglic3IubAkJc2V0X3RhZ194CQkjIHRhZyB0aGUgb3BlcmFuZCB0eXBlCgltb3YuYgkJJWQwLERUQUcoJWE2KQkJIyBjb3VsZCBiZSBBTllUSElORyEhIQoJY21waS5iCQklZDAsJlVOTk9STQkJIyBpcyBvcGVyYW5kIGFuIFVOTk9STT8KCWJuZS5iCQlpZWFfb3BfZXh0cmFjdAkJIyBubwoJYnNyLmwJCXVubm9ybV9maXgJCSMgeWVzOyBjb252ZXJ0IHRvIE5PUk0vREVOT1JNL1pFUk8KCW1vdi5iCQklZDAsRFRBRyglYTYpCQkjIHNldCBuZXcgb3B0eXBlIHRhZwoJYnJhLmIJCWllYV9vcF9leHRyYWN0CgojIHRoZSBvcGVyYXRpb24gaXMgZnNpbmNvcywgZnRzdCwgb3IgZmNtcC4gb25seSBmY21wIGlzIGR5YWRpYwppZWFfb3Bfc3BlYzoKCWJ0c3QJCSYweDMsMStFWENfQ01EUkVHKCVhNikJIyBpcyBvcGVyYXRpb24gZnNpbmNvcz8KCWJlcS5iCQlpZWFfb3BfZXh0cmFjdAkJIyB5ZXMKIyBub3csIHdlJ3JlIGxlZnQgd2l0aCBmdHN0IGFuZCBmY21wLiBzbywgZmlyc3QgbGV0J3MgdGFnIHRoZW0gc28gdGhhdCB0aGV5IGRvbid0CiMgc3RvcmUgYSByZXN1bHQuIHRoZW4sIG9ubHkgZmNtcCB3aWxsIGJyYW5jaCBiYWNrIGFuZCBwaWNrIHVwIGEgZHN0IG9wZXJhbmQuCglzdAkJU1RPUkVfRkxHKCVhNikJCSMgZG9uJ3Qgc3RvcmUgYSBmaW5hbCByZXN1bHQKCWJ0c3QJCSYweDEsMStFWENfQ01EUkVHKCVhNikJIyBpcyBvcGVyYXRpb24gZmNtcD8KCWJlcS5iCQlpZWFfb3BfbG9hZGRzdAkJIyB5ZXMKCmllYV9vcF9leHRyYWN0OgoJY2xyLmwJCSVkMAoJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3M6IHJuZCBtb2RlLHByZWMKCgltb3YuYgkJMStFWENfQ01EUkVHKCVhNiksJWQxCglhbmRpLncJCSYweDAwN2YsJWQxCQkjIGV4dHJhY3QgZXh0ZW5zaW9uCgoJZm1vdi5sCQkmMHgwLCVmcGNyCglmbW92LmwJCSYweDAsJWZwc3IKCglsZWEJCUZQX1NSQyglYTYpLCVhMAoJbGVhCQlGUF9EU1QoJWE2KSwlYTEKCgltb3YubAkJKHRibF91bnN1cHAubCwlcGMsJWQxLncqNCksJWQxICMgZmV0Y2ggcm91dGluZSBhZGRyCglqc3IJCSh0YmxfdW5zdXBwLmwsJXBjLCVkMS5sKjEpCgojCiMgRXhjZXB0aW9ucyBpbiBvcmRlciBvZiBwcmVjZWRlbmNlOgojCUJTVU4JOiBub25lCiMJU05BTgk6IGFsbCBvcGVyYXRpb25zCiMJT1BFUlIJOiBhbGwgcmVnLXJlZyBvciBtZW0tcmVnIG9wZXJhdGlvbnMgdGhhdCBjYW4gbm9ybWFsbHkgb3BlcnIKIwlPVkZMCTogc2FtZSBhcyBPUEVSUgojCVVORkwJOiBzYW1lIGFzIE9QRVJSCiMJRFoJOiBzYW1lIGFzIE9QRVJSCiMJSU5FWDIJOiBzYW1lIGFzIE9QRVJSCiMJSU5FWDEJOiBhbGwgcGFja2VkIGltbWVkaWF0ZSBvcGVyYXRpb25zCiMKCiMgd2UgZGV0ZXJtaW5lIHRoZSBoaWdoZXN0IHByaW9yaXR5IGV4Y2VwdGlvbihpZiBhbnkpIHNldCBieSB0aGUKIyBlbXVsYXRpb24gcm91dGluZSB0aGF0IGhhcyBhbHNvIGJlZW4gZW5hYmxlZCBieSB0aGUgdXNlci4KCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMAkjIGZldGNoIGV4Y2VwdGlvbnMgZW5hYmxlZAoJYm5lLmIJCWllYV9vcF9lbmEJCSMgc29tZSBhcmUgZW5hYmxlZAoKIyBub3csIHdlIHNhdmUgdGhlIHJlc3VsdCwgdW5sZXNzLCBvZiBjb3Vyc2UsIHRoZSBvcGVyYXRpb24gd2FzIGZ0c3Qgb3IgZmNtcC4KIyB0aGVzZSBkb24ndCBzYXZlIHJlc3VsdHMuCmllYV9vcF9zYXZlOgoJdHN0LmIJCVNUT1JFX0ZMRyglYTYpCQkjIGRvZXMgdGhpcyBvcCBzdG9yZSBhIHJlc3VsdD8KCWJuZS5iCQlpZWFfb3BfZXhpdDEJCSMgZXhpdCB3aXRoIG5vIGZyZXN0b3JlCgppZWFfb3Bfc3RvcmU6CgliZmV4dHUJCUVYQ19DTURSRUcoJWE2KXsmNjomM30sJWQwICMgZmV0Y2ggZHN0IHJlZ25vCglic3IubAkJc3RvcmVfZnByZWcJCSMgc3RvcmUgdGhlIHJlc3VsdAoKaWVhX29wX2V4aXQxOgoJbW92LmwJCUVYQ19QQyglYTYpLFVTRVJfRlBJQVIoJWE2KSAjIHNldCBGUElBUiB0byAiQ3VycmVudCBQQyIKCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLEVYQ19QQyglYTYpICMgc2V0ICJOZXh0IFBDIiBpbiBleGMgZnJhbWUKCglmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC1mcDEKCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCgltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCgoJdW5sawkJJWE2CQkJIyB1bnJhdmVsIHRoZSBmcmFtZQoKCWJ0c3QJCSYweDcsKCVzcCkJCSMgaXMgdHJhY2Ugb24/CglibmUudwkJaWVhX29wX3RyYWNlCQkjIHllcwoKCWJyYS5sCQlfZnBzcF9kb25lCQkjIGV4aXQgdG8gb3MKCmllYV9vcF9lbmE6CglhbmQuYgkJRlBTUl9FWENFUFQoJWE2KSwlZDAJIyBrZWVwIG9ubHkgb25lcyBlbmFibGUgYW5kIHNldAoJYmZmZm8JCSVkMHsmMjQ6Jjh9LCVkMAkJIyBmaW5kIGhpZ2hlc3QgcHJpb3JpdHkgZXhjZXB0aW9uCglibmUuYgkJaWVhX29wX2V4YwkJIyBhdCBsZWFzdCBvbmUgd2FzIHNldAoKIyBubyBleGNlcHRpb24gb2NjdXJyZWQuIG5vdywgZGlkIGEgZGlzYWJsZWQsIGV4YWN0IG92ZXJmbG93IG9jY3VyIHdpdGggaW5leGFjdAojIGVuYWJsZWQ/IGlmIHNvLCB0aGVuIHdlIGhhdmUgdG8gc3R1ZmYgYW4gb3ZlcmZsb3cgZnJhbWUgaW50byB0aGUgRlBVLgoJYnRzdAkJJm92ZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgIyBkaWQgb3ZlcmZsb3cgb2NjdXI/CgliZXEuYgkJaWVhX29wX3NhdmUKCmllYV9vcF9vdmZsOgoJYnRzdAkJJmluZXgyX2JpdCxGUENSX0VOQUJMRSglYTYpICMgaXMgaW5leGFjdCBlbmFibGVkPwoJYmVxLmIJCWllYV9vcF9zdG9yZQkJIyBubwoJYnJhLmIJCWllYV9vcF9leGNfb3ZmbAkJIyB5ZXMKCiMgYW4gZW5hYmxlZCBleGNlcHRpb24gb2NjdXJyZWQuIHdlIGhhdmUgdG8gaW5zZXJ0IHRoZSBleGNlcHRpb24gdHlwZSBiYWNrIGludG8KIyB0aGUgbWFjaGluZS4KaWVhX29wX2V4YzoKCXN1YmkubAkJJjI0LCVkMAkJCSMgZml4IG9mZnNldCB0byBiZSAwLTgKCWNtcGkuYgkJJWQwLCYweDYJCSMgaXMgZXhjZXB0aW9uIElORVg/CglibmUuYgkJaWVhX29wX2V4Y19mb3JjZQkjIG5vCgojIHRoZSBlbmFibGVkIGV4Y2VwdGlvbiB3YXMgaW5leGFjdC4gc28sIGlmIGl0IG9jY3VycyB3aXRoIGFuIG92ZXJmbG93CiMgb3IgdW5kZXJmbG93IHRoYXQgd2FzIGRpc2FibGVkLCB0aGVuIHdlIGhhdmUgdG8gZm9yY2UgYW4gb3ZlcmZsb3cgb3IKIyB1bmRlcmZsb3cgZnJhbWUuCglidHN0CQkmb3ZmbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIGRpZCBvdmVyZmxvdyBvY2N1cj8KCWJuZS5iCQlpZWFfb3BfZXhjX292ZmwJCSMgeWVzCglidHN0CQkmdW5mbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIGRpZCB1bmRlcmZsb3cgb2NjdXI/CglibmUuYgkJaWVhX29wX2V4Y191bmZsCQkjIHllcwoKaWVhX29wX2V4Y19mb3JjZToKCW1vdi53CQkodGJsX2llYV9leGNlcHQuYiwlcGMsJWQwLncqMiksMitGUF9TUkMoJWE2KQoJYnJhLmIJCWllYV9vcF9leGl0MgkJIyBleGl0IHdpdGggZnJlc3RvcmUKCnRibF9pZWFfZXhjZXB0OgoJc2hvcnQJCTB4ZTAwMiwgMHhlMDA2LCAweGUwMDQsIDB4ZTAwNQoJc2hvcnQJCTB4ZTAwMywgMHhlMDAyLCAweGUwMDEsIDB4ZTAwMQoKaWVhX29wX2V4Y19vdmZsOgoJbW92LncJCSYweGUwMDUsMitGUF9TUkMoJWE2KQoJYnJhLmIJCWllYV9vcF9leGl0MgoKaWVhX29wX2V4Y191bmZsOgoJbW92LncJCSYweGUwMDMsMitGUF9TUkMoJWE2KQoKaWVhX29wX2V4aXQyOgoJbW92LmwJCUVYQ19QQyglYTYpLFVTRVJfRlBJQVIoJWE2KSAjIHNldCBGUElBUiB0byAiQ3VycmVudCBQQyIKCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLEVYQ19QQyglYTYpICMgc2V0ICJOZXh0IFBDIiBpbiBleGMgZnJhbWUKCglmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC1mcDEKCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCgltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCgoJZnJlc3RvcmUJRlBfU1JDKCVhNikJCSMgcmVzdG9yZSBleGNlcHRpb25hbCBzdGF0ZQoKCXVubGsJCSVhNgkJCSMgdW5yYXZlbCB0aGUgZnJhbWUKCglidHN0CQkmMHg3LCglc3ApCQkjIGlzIHRyYWNlIG9uPwoJYm5lLmIJCWllYV9vcF90cmFjZQkJIyB5ZXMKCglicmEubAkJX2Zwc3BfZG9uZQkJIyBleGl0IHRvIG9zCgojCiMgVGhlIG9wY2xhc3MgdHdvIGluc3RydWN0aW9uIHRoYXQgdG9vayBhbiAiVW5pbXBsZW1lbnRlZCBFZmZlY3RpdmUgQWRkcmVzcyIKIyBleGNlcHRpb24gd2FzIGJlaW5nIHRyYWNlZC4gTWFrZSB0aGUgImN1cnJlbnQiIFBDIHRoZSBGUElBUiBhbmQgcHV0IGl0IGluCiMgdGhlIHRyYWNlIHN0YWNrIGZyYW1lIHRoZW4ganVtcCB0byBfcmVhbF90cmFjZSgpLgojCiMJCSBVTklNUCBFQSBGUkFNRQkJICAgVFJBQ0UgRlJBTUUKIwkJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKIwkJKiAweDAgKiAgMHgwZjAJKgkqICAgIEN1cnJlbnQJKgojCQkqKioqKioqKioqKioqKioqKgkqICAgICAgUEMJKgojCQkqICAgIEN1cnJlbnQJKgkqKioqKioqKioqKioqKioqKgojCQkqICAgICAgUEMJKgkqIDB4MiAqICAweDAyNAkqCiMJCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCiMJCSogICAgICBTUgkqCSogICAgIE5leHQJKgojCQkqKioqKioqKioqKioqKioqKgkqICAgICAgUEMJKgojCQkJCQkqKioqKioqKioqKioqKioqKgojCQkJCQkqICAgICAgU1IJKgojCQkJCQkqKioqKioqKioqKioqKioqKgppZWFfb3BfdHJhY2U6Cgltb3YubAkJKCVzcCksLSglc3ApCQkjIHNoaWZ0IHN0YWNrIGZyYW1lICJkb3duIgoJbW92LncJCTB4OCglc3ApLDB4NCglc3ApCgltb3YudwkJJjB4MjAyNCwweDYoJXNwKQkjIHN0ayBmbXQgPSAweDI7IHZvZmYgPSAweDAyNAoJZm1vdi5sCQklZnBpYXIsMHg4KCVzcCkJCSMgIkN1cnJlbnQgUEMiIGlzIGluIEZQSUFSCgoJYnJhLmwJCV9yZWFsX3RyYWNlCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmllYV9mbW92bToKCWJ0c3QJCSYxNCwlZDAJCQkjIGN0cmwgb3IgZGF0YSByZWcKCWJlcS53CQlpZWFfZm1vdm1fY3RybAoKaWVhX2Ztb3ZtX2RhdGE6CgoJYnRzdAkJJjB4NSxFWENfU1IoJWE2KQkjIHVzZXIgb3Igc3VwZXJ2aXNvciBtb2RlCglibmUuYgkJaWVhX2Ztb3ZtX2RhdGFfcwoKaWVhX2Ztb3ZtX2RhdGFfdToKCW1vdi5sCQkldXNwLCVhMAoJbW92LmwJCSVhMCxFWENfQTcoJWE2KQkJIyBzdG9yZSBjdXJyZW50IGE3Cglic3IubAkJZm1vdm1fZHluYW1pYwkJIyBkbyBkeW5hbWljIGZtb3ZtCgltb3YubAkJRVhDX0E3KCVhNiksJWEwCQkjIGxvYWQgcG9zc2libHkgbmV3IGE3Cgltb3YubAkJJWEwLCV1c3AJCSMgdXBkYXRlIHVzcAoJYnJhLncJCWllYV9mbW92bV9leGl0CgppZWFfZm1vdm1fZGF0YV9zOgoJY2xyLmIJCVNQQ09ORF9GTEcoJWE2KQoJbGVhCQkweDIrRVhDX1ZPRkYoJWE2KSwlYTAKCW1vdi5sCQklYTAsRVhDX0E3KCVhNikKCWJzci5sCQlmbW92bV9keW5hbWljCQkjIGRvIGR5bmFtaWMgZm1vdm0KCgljbXBpLmIJCVNQQ09ORF9GTEcoJWE2KSwmbWRhN19mbGcKCWJlcS53CQlpZWFfZm1vdm1fZGF0YV9wcmVkZWMKCWNtcGkuYgkJU1BDT05EX0ZMRyglYTYpLCZtaWE3X2ZsZwoJYm5lLncJCWllYV9mbW92bV9leGl0CgojIHJpZ2h0IG5vdywgZDAgPSB0aGUgc2l6ZS4KIyB0aGUgZGF0YSBoYXMgYmVlbiBmZXRjaGVkIGZyb20gdGhlIHN1cGVydmlzb3Igc3RhY2ssIGJ1dCB3ZSBoYXZlIG5vdAojIGluY3JlbWVudGVkIHRoZSBzdGFjayBwb2ludGVyIGJ5IHRoZSBhcHByb3ByaWF0ZSBudW1iZXIgb2YgYnl0ZXMuCiMgZG8gaXQgaGVyZS4KaWVhX2Ztb3ZtX2RhdGFfcG9zdGluYzoKCWJ0c3QJCSYweDcsRVhDX1NSKCVhNikKCWJuZS5iCQlpZWFfZm1vdm1fZGF0YV9waV90cmFjZQoKCW1vdi53CQlFWENfU1IoJWE2KSwoRVhDX1NSLCVhNiwlZDApCgltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwoRVhDX1BDLCVhNiwlZDApCgltb3YudwkJJjB4MDBmMCwoRVhDX1ZPRkYsJWE2LCVkMCkKCglsZWEJCShFWENfU1IsJWE2LCVkMCksJWEwCgltb3YubAkJJWEwLEVYQ19TUiglYTYpCgoJZm1vdm0ueAkJRVhDX0ZQMCglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAtZnAxCglmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncwoJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQoKCXVubGsJCSVhNgoJbW92LmwJCSglc3ApKywlc3AKCWJyYS5sCQlfZnBzcF9kb25lCgppZWFfZm1vdm1fZGF0YV9waV90cmFjZToKCW1vdi53CQlFWENfU1IoJWE2KSwoRVhDX1NSLTB4NCwlYTYsJWQwKQoJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksKEVYQ19QQy0weDQsJWE2LCVkMCkKCW1vdi53CQkmMHgyMDI0LChFWENfVk9GRi0weDQsJWE2LCVkMCkKCW1vdi5sCQlFWENfUEMoJWE2KSwoRVhDX1ZPRkYrMHgyLTB4NCwlYTYsJWQwKQoKCWxlYQkJKEVYQ19TUi0weDQsJWE2LCVkMCksJWEwCgltb3YubAkJJWEwLEVYQ19TUiglYTYpCgoJZm1vdm0ueAkJRVhDX0ZQMCglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAtZnAxCglmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncwoJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQoKCXVubGsJCSVhNgoJbW92LmwJCSglc3ApKywlc3AKCWJyYS5sCQlfcmVhbF90cmFjZQoKIyByaWdodCBub3csIGQxID0gc2l6ZSBhbmQgZDAgPSB0aGUgc3RyZy4KaWVhX2Ztb3ZtX2RhdGFfcHJlZGVjOgoJbW92LmIJCSVkMSxFWENfVk9GRiglYTYpCSMgc3RvcmUgc3RyZwoJbW92LmIJCSVkMCwweDErRVhDX1ZPRkYoJWE2KQkjIHN0b3JlIHNpemUKCglmbW92bS54CQlFWENfRlAwKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC1mcDEKCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCgltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCgoJbW92LmwJCSglYTYpLC0oJXNwKQkJIyBtYWtlIGEgY29weSBvZiBhNgoJbW92LmwJCSVkMCwtKCVzcCkJCSMgc2F2ZSBkMAoJbW92LmwJCSVkMSwtKCVzcCkJCSMgc2F2ZSBkMQoJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksLSglc3ApCSMgbWFrZSBhIGNvcHkgb2YgTmV4dCBQQwoKCWNsci5sCQklZDAKCW1vdi5iCQkweDErRVhDX1ZPRkYoJWE2KSwlZDAJIyBmZXRjaCBzaXplCgluZWcubAkJJWQwCQkJIyBnZXQgbmVnYXRpdmUgb2Ygc2l6ZQoKCWJ0c3QJCSYweDcsRVhDX1NSKCVhNikJIyBpcyB0cmFjZSBlbmFibGVkPwoJYmVxLmIJCWllYV9mbW92bV9kYXRhX3AyCgoJbW92LncJCUVYQ19TUiglYTYpLChFWENfU1ItMHg0LCVhNiwlZDApCgltb3YubAkJRVhDX1BDKCVhNiksKEVYQ19WT0ZGLTB4MiwlYTYsJWQwKQoJbW92LmwJCSglc3ApKywoRVhDX1BDLTB4NCwlYTYsJWQwKQoJbW92LncJCSYweDIwMjQsKEVYQ19WT0ZGLTB4NCwlYTYsJWQwKQoKCXBlYQkJKCVhNiwlZDApCQkjIGNyZWF0ZSBmaW5hbCBzcAoJYnJhLmIJCWllYV9mbW92bV9kYXRhX3AzCgppZWFfZm1vdm1fZGF0YV9wMjoKCW1vdi53CQlFWENfU1IoJWE2KSwoRVhDX1NSLCVhNiwlZDApCgltb3YubAkJKCVzcCkrLChFWENfUEMsJWE2LCVkMCkKCW1vdi53CQkmMHgwMGYwLChFWENfVk9GRiwlYTYsJWQwKQoKCXBlYQkJKDB4NCwlYTYsJWQwKQkJIyBjcmVhdGUgZmluYWwgc3AKCmllYV9mbW92bV9kYXRhX3AzOgoJY2xyLmwJCSVkMQoJbW92LmIJCUVYQ19WT0ZGKCVhNiksJWQxCSMgZmV0Y2ggc3RyZwoKCXRzdC5iCQklZDEKCWJwbC5iCQlmbV8xCglmbW92bS54CQkmMHg4MCwoMHg0KzB4OCwlYTYsJWQwKQoJYWRkaS5sCQkmMHhjLCVkMApmbV8xOgoJbHNsLmIJCSYweDEsJWQxCglicGwuYgkJZm1fMgoJZm1vdm0ueAkJJjB4NDAsKDB4NCsweDgsJWE2LCVkMCkKCWFkZGkubAkJJjB4YywlZDAKZm1fMjoKCWxzbC5iCQkmMHgxLCVkMQoJYnBsLmIJCWZtXzMKCWZtb3ZtLngJCSYweDIwLCgweDQrMHg4LCVhNiwlZDApCglhZGRpLmwJCSYweGMsJWQwCmZtXzM6Cglsc2wuYgkJJjB4MSwlZDEKCWJwbC5iCQlmbV80CglmbW92bS54CQkmMHgxMCwoMHg0KzB4OCwlYTYsJWQwKQoJYWRkaS5sCQkmMHhjLCVkMApmbV80OgoJbHNsLmIJCSYweDEsJWQxCglicGwuYgkJZm1fNQoJZm1vdm0ueAkJJjB4MDgsKDB4NCsweDgsJWE2LCVkMCkKCWFkZGkubAkJJjB4YywlZDAKZm1fNToKCWxzbC5iCQkmMHgxLCVkMQoJYnBsLmIJCWZtXzYKCWZtb3ZtLngJCSYweDA0LCgweDQrMHg4LCVhNiwlZDApCglhZGRpLmwJCSYweGMsJWQwCmZtXzY6Cglsc2wuYgkJJjB4MSwlZDEKCWJwbC5iCQlmbV83CglmbW92bS54CQkmMHgwMiwoMHg0KzB4OCwlYTYsJWQwKQoJYWRkaS5sCQkmMHhjLCVkMApmbV83OgoJbHNsLmIJCSYweDEsJWQxCglicGwuYgkJZm1fZW5kCglmbW92bS54CQkmMHgwMSwoMHg0KzB4OCwlYTYsJWQwKQpmbV9lbmQ6Cgltb3YubAkJMHg0KCVzcCksJWQxCgltb3YubAkJMHg4KCVzcCksJWQwCgltb3YubAkJMHhjKCVzcCksJWE2Cgltb3YubAkJKCVzcCkrLCVzcAoKCWJ0c3QJCSYweDcsKCVzcCkJCSMgaXMgdHJhY2UgZW5hYmxlZD8KCWJlcS5sCQlfZnBzcF9kb25lCglicmEubAkJX3JlYWxfdHJhY2UKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKaWVhX2Ztb3ZtX2N0cmw6CgoJYnNyLmwJCWZtb3ZtX2N0cmwJCSMgbG9hZCBjdHJsIHJlZ3MKCmllYV9mbW92bV9leGl0OgoJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAtZnAxCglmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncwoJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQoKCWJ0c3QJCSYweDcsRVhDX1NSKCVhNikJIyBpcyB0cmFjZSBvbj8KCWJuZS5iCQlpZWFfZm1vdm1fdHJhY2UJCSMgeWVzCgoJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksRVhDX1BDKCVhNikgIyBzZXQgTmV4dCBQQwoKCXVubGsJCSVhNgkJCSMgdW5yYXZlbCB0aGUgZnJhbWUKCglicmEubAkJX2Zwc3BfZG9uZQkJIyBleGl0IHRvIG9zCgojCiMgVGhlIGNvbnRyb2wgcmVnIGluc3RydWN0aW9uIHRoYXQgdG9vayBhbiAiVW5pbXBsZW1lbnRlZCBFZmZlY3RpdmUgQWRkcmVzcyIKIyBleGNlcHRpb24gd2FzIGJlaW5nIHRyYWNlZC4gVGhlICJDdXJyZW50IFBDIiBmb3IgdGhlIHRyYWNlIGZyYW1lIGlzIHRoZQojIFBDIHN0YWNrZWQgZm9yIFVuaW1wIEVBLiBUaGUgIk5leHQgUEMiIGlzIGluIEVYQ19FWFRXUFRSLgojIEFmdGVyIGZpeGluZyB0aGUgc3RhY2sgZnJhbWUsIGp1bXAgdG8gX3JlYWxfdHJhY2UoKS4KIwojCQkgVU5JTVAgRUEgRlJBTUUJCSAgIFRSQUNFIEZSQU1FCiMJCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCiMJCSogMHgwICogIDB4MGYwCSoJKiAgICBDdXJyZW50CSoKIwkJKioqKioqKioqKioqKioqKioJKiAgICAgIFBDCSoKIwkJKiAgICBDdXJyZW50CSoJKioqKioqKioqKioqKioqKioKIwkJKiAgICAgIFBDCSoJKiAweDIgKiAgMHgwMjQJKgojCQkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgojCQkqICAgICAgU1IJKgkqICAgICBOZXh0CSoKIwkJKioqKioqKioqKioqKioqKioJKiAgICAgIFBDCSoKIwkJCQkJKioqKioqKioqKioqKioqKioKIwkJCQkJKiAgICAgIFNSCSoKIwkJCQkJKioqKioqKioqKioqKioqKioKIyB0aGlzIGFpbid0IGEgcHJldHR5IHNvbHV0aW9uLCBidXQgaXQgd29ya3M6CiMgLXJlc3RvcmUgYTYgKG5vdCB3aXRoIHVubGspCiMgLXNoaWZ0IHN0YWNrIGZyYW1lIGRvd24gb3ZlciB3aGVyZSBvbGQgYTYgdXNlZCB0byBiZQojIC1hZGQgTE9DQUxfU0laRSB0byBzdGFjayBwb2ludGVyCmllYV9mbW92bV90cmFjZToKCW1vdi5sCQkoJWE2KSwlYTYJCSMgcmVzdG9yZSBmcmFtZSBwb2ludGVyCgltb3YudwkJRVhDX1NSK0xPQ0FMX1NJWkUoJXNwKSwweDArTE9DQUxfU0laRSglc3ApCgltb3YubAkJRVhDX1BDK0xPQ0FMX1NJWkUoJXNwKSwweDgrTE9DQUxfU0laRSglc3ApCgltb3YubAkJRVhDX0VYVFdQVFIrTE9DQUxfU0laRSglc3ApLDB4MitMT0NBTF9TSVpFKCVzcCkKCW1vdi53CQkmMHgyMDI0LDB4NitMT0NBTF9TSVpFKCVzcCkgIyBzdGsgZm10ID0gMHgyOyB2b2ZmID0gMHgwMjQKCWFkZC5sCQkmTE9DQUxfU0laRSwlc3AJCSMgY2xlYXIgc3RhY2sgZnJhbWUKCglicmEubAkJX3JlYWxfdHJhY2UKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBUaGUgRlBVIGlzIGRpc2FibGVkIGFuZCBzbyB3ZSBzaG91bGQgcmVhbGx5IGhhdmUgdGFrZW4gdGhlICJMaW5lCiMgRiBFbXVsYXRvciIgZXhjZXB0aW9uLiBTbywgaGVyZSB3ZSBjcmVhdGUgYW4gOC13b3JkIHN0YWNrIGZyYW1lCiMgZnJvbSBvdXIgNC13b3JkIHN0YWNrIGZyYW1lLiBUaGlzIG1lYW5zIHdlIG11c3QgY2FsY3VsYXRlIHRoZSBsZW5ndGgKIyB0aGUgZmF1bHRpbmcgaW5zdHJ1Y3Rpb24gdG8gZ2V0IHRoZSAibmV4dCBQQyIuIFRoaXMgaXMgdHJpdmlhbCBmb3IKIyBpbW1lZGlhdGUgb3BlcmFuZHMgYnV0IHJlcXVpcmVzIHNvbWUgZXh0cmEgd29yayBmb3IgZm1vdm0gZHluYW1pYwojIHdoaWNoIGNhbiB1c2UgbW9zdCBhZGRyZXNzaW5nIG1vZGVzLgppZWFfZGlzYWJsZWQ6Cgltb3YubAkJKCVzcCkrLCVkMAkJIyByZXN0b3JlIGQwCgoJbGluawkJJWE2LCYtTE9DQUxfU0laRQkjIGluaXQgc3RhY2sgZnJhbWUKCgltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCgojIFBDIG9mIGluc3RydWN0aW9uIHRoYXQgdG9vayB0aGUgZXhjZXB0aW9uIGlzIHRoZSBQQyBpbiB0aGUgZnJhbWUKCW1vdi5sCQlFWENfUEMoJWE2KSxFWENfRVhUV1BUUiglYTYpCgltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCglhZGRxLmwJCSYweDQsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCglic3IubAkJX2ltZW1fcmVhZF9sb25nCQkjIGZldGNoIHRoZSBpbnN0cnVjdGlvbiB3b3JkcwoJbW92LmwJCSVkMCxFWENfT1BXT1JEKCVhNikJIyBzdG9yZSBPUFdPUkQgYW5kIEVYVFdPUkQKCgl0c3QudwkJJWQwCQkJIyBpcyBpbnN0ciBmbW92bT8KCWJtaS5iCQlpZWFfZGlzX2Ztb3ZtCQkjIHllcwojIGluc3RydWN0aW9uIGlzIHVzaW5nIGFuIGV4dGVuZGVkIHByZWNpc2lvbiBpbW1lZGlhdGUgb3BlcmFuZC4gdGhlcmVmb3JlLAojIHRoZSB0b3RhbCBpbnN0cnVjdGlvbiBsZW5ndGggaXMgMTYgYnl0ZXMuCmllYV9kaXNfaW1tZWQ6Cgltb3YubAkJJjB4MTAsJWQwCQkjIDE2IGJ5dGVzIG9mIGluc3RydWN0aW9uCglicmEuYgkJaWVhX2Rpc19jb250CmllYV9kaXNfZm1vdm06CglidHN0CQkmMHhlLCVkMAkJIyBpcyBpbnN0ciBmbW92bSBjdHJsCglibmUuYgkJaWVhX2Rpc19mbW92bV9kYXRhCSMgbm8KIyB0aGUgaW5zdHJ1Y3Rpb24gaXMgYSBmbW92bS5sIHdpdGggMiBvciAzIHJlZ2lzdGVycy4KCWJmZXh0dQkJJWQweyYxOTomM30sJWQxCgltb3YubAkJJjB4YywlZDAKCWNtcGkuYgkJJWQxLCYweDcJCSMgbW92ZSBhbGwgcmVncz8KCWJuZS5iCQlpZWFfZGlzX2NvbnQKCWFkZHEubAkJJjB4NCwlZDAKCWJyYS5iCQlpZWFfZGlzX2NvbnQKIyB0aGUgaW5zdHJ1Y3Rpb24gaXMgYW4gZm1vdm0ueCBkeW5hbWljIHdoaWNoIGNhbiB1c2UgbWFueSBhZGRyZXNzaW5nCiMgbW9kZXMgYW5kIHRodXMgY2FuIGhhdmUgc2V2ZXJhbCBkaWZmZXJlbnQgdG90YWwgaW5zdHJ1Y3Rpb24gbGVuZ3Rocy4KIyBjYWxsIGZtb3ZtX2NhbGNfZWEgd2hpY2ggd2lsbCBnbyB0aHJvdWdoIHRoZSBlYSBjYWxjIHByb2Nlc3MgYW5kLAojIGFzIGEgYnktcHJvZHVjdCwgd2lsbCB0ZWxsIHVzIGhvdyBsb25nIHRoZSBpbnN0cnVjdGlvbiBpcy4KaWVhX2Rpc19mbW92bV9kYXRhOgoJY2xyLmwJCSVkMAoJYnNyLmwJCWZtb3ZtX2NhbGNfZWEKCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVkMAoJc3ViLmwJCUVYQ19QQyglYTYpLCVkMAppZWFfZGlzX2NvbnQ6Cgltb3YudwkJJWQwLEVYQ19WT0ZGKCVhNikJIyBzdG9yZSBzdGFjayBzaGlmdCB2YWx1ZQoKCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKCgl1bmxrCQklYTYKCiMgaGVyZSwgd2UgYWN0dWFsbHkgY3JlYXRlIHRoZSA4LXdvcmQgZnJhbWUgZnJvbSB0aGUgNC13b3JkIGZyYW1lLAojIHdpdGggdGhlICJuZXh0IFBDIiBhcyBhZGRpdGlvbmFsIGluZm8uCiMgdGhlIDxlYT4gZmllbGQgaXMgbGV0IGFzIHVuZGVmaW5lZC4KCXN1YnEubAkJJjB4OCwlc3AJCSMgbWFrZSByb29tIGZvciBuZXcgc3RhY2sKCW1vdi5sCQklZDAsLSglc3ApCQkjIHNhdmUgZDAKCW1vdi53CQkweGMoJXNwKSwweDQoJXNwKQkjIG1vdmUgU1IKCW1vdi5sCQkweGUoJXNwKSwweDYoJXNwKQkjIG1vdmUgQ3VycmVudCBQQwoJY2xyLmwJCSVkMAoJbW92LncJCTB4MTIoJXNwKSwlZDAKCW1vdi5sCQkweDYoJXNwKSwweDEwKCVzcCkJIyBtb3ZlIEN1cnJlbnQgUEMKCWFkZC5sCQklZDAsMHg2KCVzcCkJCSMgbWFrZSBOZXh0IFBDCgltb3YudwkJJjB4NDAyYywweGEoJXNwKQkjIGluc2VydCBvZmZzZXQsZnJhbWUgZm9ybWF0Cgltb3YubAkJKCVzcCkrLCVkMAkJIyByZXN0b3JlIGQwCgoJYnJhLmwJCV9yZWFsX2ZwdV9kaXNhYmxlZAoKIyMjIyMjIyMjIwoKaWVhX2lhY2M6Cgltb3ZjCQklcGNyLCVkMAoJYnRzdAkJJjB4MSwlZDAKCWJuZS5iCQlpZWFfaWFjY19jb250CglmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncwoJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAtZnAxIG9uIHN0YWNrCmllYV9pYWNjX2NvbnQ6Cgltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCgoJdW5sawkJJWE2CgoJc3VicS53CQkmMHg4LCVzcAkJIyBtYWtlIHN0YWNrIGZyYW1lIGJpZ2dlcgoJbW92LmwJCTB4OCglc3ApLCglc3ApCQkjIHN0b3JlIFNSLGhpKFBDKQoJbW92LncJCTB4Yyglc3ApLDB4NCglc3ApCSMgc3RvcmUgbG8oUEMpCgltb3YudwkJJjB4NDAwOCwweDYoJXNwKQkjIHN0b3JlIHZvZmYKCW1vdi5sCQkweDIoJXNwKSwweDgoJXNwKQkjIHN0b3JlIGVhCgltb3YubAkJJjB4MDk0MjgwMDEsMHhjKCVzcCkJIyBzdG9yZSBmc2x3CgppZWFfYWNjX2RvbmU6CglidHN0CQkmMHg1LCglc3ApCQkjIHVzZXIgb3Igc3VwZXJ2aXNvciBtb2RlPwoJYmVxLmIJCWllYV9hY2NfZG9uZTIJCSMgdXNlcgoJYnNldAkJJjB4MiwweGQoJXNwKQkJIyBzZXQgc3VwZXJ2aXNvciBUTSBiaXQKCmllYV9hY2NfZG9uZTI6CglicmEubAkJX3JlYWxfYWNjZXNzCgppZWFfZGFjYzoKCWxlYQkJLUxPQ0FMX1NJWkUoJWE2KSwlc3AKCgltb3ZjCQklcGNyLCVkMQoJYnRzdAkJJjB4MSwlZDEKCWJuZS5iCQlpZWFfZGFjY19jb250CglmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC1mcDEgb24gc3RhY2sKCWZtb3ZtLmwJCUxPQ0FMX1NJWkUrVVNFUl9GUENSKCVzcCksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKaWVhX2RhY2NfY29udDoKCW1vdi5sCQkoJWE2KSwlYTYKCgltb3YubAkJMHg0K0xPQ0FMX1NJWkUoJXNwKSwtMHg4KzB4NCtMT0NBTF9TSVpFKCVzcCkKCW1vdi53CQkweDgrTE9DQUxfU0laRSglc3ApLC0weDgrMHg4K0xPQ0FMX1NJWkUoJXNwKQoJbW92LncJCSYweDQwMDgsLTB4OCsweGErTE9DQUxfU0laRSglc3ApCgltb3YubAkJJWEwLC0weDgrMHhjK0xPQ0FMX1NJWkUoJXNwKQoJbW92LncJCSVkMCwtMHg4KzB4MTArTE9DQUxfU0laRSglc3ApCgltb3YudwkJJjB4MDAwMSwtMHg4KzB4MTIrTE9DQUxfU0laRSglc3ApCgoJbW92bS5sCQlMT0NBTF9TSVpFK0VYQ19EUkVHUyglc3ApLCYweDAzMDMgIyByZXN0b3JlIGQwLWQxL2EwLWExCglhZGQudwkJJkxPQ0FMX1NJWkUtMHg0LCVzcAoKCWJyYS5iCQlpZWFfYWNjX2RvbmUKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCV9mcHNwX29wZXJyKCk6IDA2MEZQU1AgZW50cnkgcG9pbnQgZm9yIEZQIE9wZXJyIGV4Y2VwdGlvbi4JIwojCQkJCQkJCQkJIwojCVRoaXMgaGFuZGxlciBzaG91bGQgYmUgdGhlIGZpcnN0IGNvZGUgZXhlY3V0ZWQgdXBvbiB0YWtpbmcgdGhlCSMKIwlGUCBPcGVyYW5kIEVycm9yIGV4Y2VwdGlvbiBpbiBhbiBvcGVyYXRpbmcgc3lzdGVtLgkJIwojCQkJCQkJCQkJIwojIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJX2ltZW1fcmVhZF9sb25nKCkgLSByZWFkIGluc3RydWN0aW9uIGxvbmd3b3JkCQkJIwojCWZpeF9za2V3ZWRfb3BzKCkgLSBhZGp1c3Qgc3JjIG9wZXJhbmQgaW4gZnNhdmUgZnJhbWUJCSMKIwlfcmVhbF9vcGVycigpIC0gImNhbGxvdXQiIHRvIG9wZXJhdGluZyBzeXN0ZW0gb3BlcnIgaGFuZGxlcgkjCiMJX2RtZW1fd3JpdGVfe2J5dGUsd29yZCxsb25nfSgpIC0gc3RvcmUgZGF0YSB0byBtZW0gKG9wY2xhc3MgMykJIwojCXN0b3JlX2RyZWdfe2IsdyxsfSgpIC0gc3RvcmUgZGF0YSB0byBkYXRhIHJlZ2ZpbGUgKG9wY2xhc3MgMykJIwojCWZhY2Nfb3V0X3tiLHcsbH0oKSAtIHN0b3JlIHRvIG1lbW9yeSB0b29rIGFjY2VzcyBlcnJvciAob3BjbCAzKQkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwktIFRoZSBzeXN0ZW0gc3RhY2sgY29udGFpbnMgdGhlIEZQIE9wZXJyIGV4Y2VwdGlvbiBmcmFtZQkjCiMJLSBUaGUgZnNhdmUgZnJhbWUgY29udGFpbnMgdGhlIHNvdXJjZSBvcGVyYW5kCQkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJTm8gYWNjZXNzIGVycm9yOgkJCQkJCSMKIwktIFRoZSBzeXN0ZW0gc3RhY2sgaXMgdW5jaGFuZ2VkCQkJCQkjCiMJLSBUaGUgZnNhdmUgZnJhbWUgY29udGFpbnMgdGhlIGFkanVzdGVkIHNyYyBvcCBmb3Igb3BjbGFzcyAwLDIJIwojCQkJCQkJCQkJIwojIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJSW4gYSBzeXN0ZW0gd2hlcmUgdGhlIEZQIE9wZXJyIGV4Y2VwdGlvbiBpcyBlbmFibGVkLCB0aGUgZ29hbAkjCiMgaXMgdG8gZ2V0IHRvIHRoZSBoYW5kbGVyIHNwZWNpZmllZCBhdCBfcmVhbF9vcGVycigpLiBCdXQsIG9uIHRoZSAwNjAsCSMKIyBmb3Igb3BjbGFzcyB6ZXJvIGFuZCB0d28gaW5zdHJ1Y3Rpb24gdGFraW5nIHRoaXMgZXhjZXB0aW9uLCB0aGUJIwojIGlucHV0IG9wZXJhbmQgaW4gdGhlIGZzYXZlIGZyYW1lIG1heSBiZSBpbmNvcnJlY3QgZm9yIHNvbWUgY2FzZXMJIwojIGFuZCBuZWVkcyB0byBiZSBjb3JyZWN0ZWQuIFRoaXMgaGFuZGxlciBjYWxscyBmaXhfc2tld2VkX29wcygpIHRvCSMKIyBkbyBqdXN0IHRoaXMgYW5kIHRoZW4gZXhpdHMgdGhyb3VnaCBfcmVhbF9vcGVycigpLgkJCSMKIwlGb3Igb3BjbGFzcyAzIGluc3RydWN0aW9ucywgdGhlIDA2MCBkb2Vzbid0IHN0b3JlIHRoZSBkZWZhdWx0CSMKIyBvcGVyciByZXN1bHQgb3V0IHRvIG1lbW9yeSBvciBkYXRhIHJlZ2lzdGVyIGZpbGUgYXMgaXQgc2hvdWxkLgkjCiMgVGhpcyBjb2RlIG11c3QgZW11bGF0ZSB0aGUgbW92ZSBvdXQgYmVmb3JlIGZpbmFsbHkgZXhpdGluZyB0aHJvdWdoCSMKIyBfcmVhbF9pbmV4KCkuIFRoZSBtb3ZlIG91dCwgaWYgdG8gbWVtb3J5LCBpcyBwZXJmb3JtZWQgdXNpbmcJCSMKIyBfbWVtX3dyaXRlKCkgImNhbGxvdXQiIHJvdXRpbmVzIHRoYXQgbWF5IHJldHVybiBhIGZhaWxpbmcgcmVzdWx0LgkjCiMgSW4gdGhpcyBzcGVjaWFsIGNhc2UsIHRoZSBoYW5kbGVyIG11c3QgZXhpdCB0aHJvdWdoIGZhY2Nfb3V0KCkJIwojIHdoaWNoIGNyZWF0ZXMgYW4gYWNjZXNzIGVycm9yIHN0YWNrIGZyYW1lIGZyb20gdGhlIGN1cnJlbnQgb3BlcnIJIwojIHN0YWNrIGZyYW1lLgkJCQkJCQkJIwojCQkJCQkJCQkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoJZ2xvYmFsCQlfZnBzcF9vcGVycgpfZnBzcF9vcGVycjoKCglsaW5rLncJCSVhNiwmLUxPQ0FMX1NJWkUJIyBpbml0IHN0YWNrIGZyYW1lCgoJZnNhdmUJCUZQX1NSQyglYTYpCQkjIGdyYWIgdGhlICJidXN5IiBmcmFtZQoKCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLCVmcGlhcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCglmbW92bS54CQkmMHhjMCxFWENfRlBSRUdTKCVhNikJIyBzYXZlIGZwMC1mcDEgb24gc3RhY2sKCiMgdGhlIEZQSUFSIGhvbGRzIHRoZSAiY3VycmVudCBQQyIgb2YgdGhlIGZhdWx0aW5nIGluc3RydWN0aW9uCgltb3YubAkJVVNFUl9GUElBUiglYTYpLEVYQ19FWFRXUFRSKCVhNikKCgltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCglhZGRxLmwJCSYweDQsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCglic3IubAkJX2ltZW1fcmVhZF9sb25nCQkjIGZldGNoIHRoZSBpbnN0cnVjdGlvbiB3b3JkcwoJbW92LmwJCSVkMCxFWENfT1BXT1JEKCVhNikKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCWJ0c3QJCSYxMywlZDAJCQkjIGlzIGluc3RyIGFuIGZtb3ZlIG91dD8KCWJuZS5iCQlmb3BlcnJfb3V0CQkjIGZtb3ZlIG91dAoKCiMgaGVyZSwgd2Ugc2ltcGx5IHNlZSBpZiB0aGUgb3BlcmFuZCBpbiB0aGUgZnNhdmUgZnJhbWUgbmVlZHMgdG8gYmUgInVuc2tld2VkIi4KIyB0aGlzIHdvdWxkIGJlIHRoZSBjYXNlIGZvciBvcGNsYXNzIHR3byBvcGVyYXRpb25zIHdpdGggYSBzb3VyY2UgaW5maW5pdHkgb3IKIyBkZW5vcm0gb3BlcmFuZCBpbiB0aGUgc2dsIG9yIGRibCBmb3JtYXQuIE5BTnMgYWxzbyBiZWNvbWUgc2tld2VkLCBidXQgY2FuJ3QKIyBjYXVzZSBhbiBvcGVyciBzbyB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIGZvciB0aGVtIGhlcmUuCglsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzOiBwdHIgdG8gc3JjIG9wCglic3IubAkJZml4X3NrZXdlZF9vcHMJCSMgZml4IHNyYyBvcAoKZm9wZXJyX2V4aXQ6CglmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC1mcDEKCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCgltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCgoJZnJlc3RvcmUJRlBfU1JDKCVhNikKCgl1bmxrCQklYTYKCWJyYS5sCQlfcmVhbF9vcGVycgoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgojCiMgdGhlIGhhcmR3YXJlIGRvZXMgbm90IHNhdmUgdGhlIGRlZmF1bHQgcmVzdWx0IHRvIG1lbW9yeSBvbiBlbmFibGVkCiMgb3BlcmFuZCBlcnJvciBleGNlcHRpb25zLiB3ZSBkbyB0aGlzIGhlcmUgYmVmb3JlIHBhc3NpbmcgY29udHJvbCB0bwojIHRoZSB1c2VyIG9wZXJhbmQgZXJyb3IgaGFuZGxlci4KIwojIGJ5dGUsIHdvcmQsIGFuZCBsb25nIGRlc3RpbmF0aW9uIGZvcm1hdCBvcGVyYXRpb25zIGNhbiBwYXNzCiMgdGhyb3VnaCBoZXJlLiB3ZSBzaW1wbHkgbmVlZCB0byB0ZXN0IHRoZSBzaWduIG9mIHRoZSBzcmMKIyBvcGVyYW5kIGFuZCBzYXZlIHRoZSBhcHByb3ByaWF0ZSBtaW5pbXVtIG9yIG1heGltdW0gaW50ZWdlciB2YWx1ZQojIHRvIHRoZSBlZmZlY3RpdmUgYWRkcmVzcyBhcyBwb2ludGVkIHRvIGJ5IHRoZSBzdGFja2VkIGVmZmVjdGl2ZSBhZGRyZXNzLgojCiMgYWx0aG91Z2ggcGFja2VkIG9wY2xhc3MgdGhyZWUgb3BlcmF0aW9ucyBjYW4gdGFrZSBvcGVyYW5kIGVycm9yCiMgZXhjZXB0aW9ucywgdGhleSB3b24ndCBwYXNzIHRocm91Z2ggaGVyZSBzaW5jZSB0aGV5IGFyZSBjYXVnaHQKIyBmaXJzdCBieSB0aGUgdW5zdXBwb3J0ZWQgZGF0YSBmb3JtYXQgZXhjZXB0aW9uIGhhbmRsZXIuIHRoYXQgaGFuZGxlcgojIHNlbmRzIHRoZW0gZGlyZWN0bHkgdG8gX3JlYWxfb3BlcnIoKSBpZiBuZWNlc3NhcnkuCiMKZm9wZXJyX291dDoKCgltb3YudwkJRlBfU1JDX0VYKCVhNiksJWQxCSMgZmV0Y2ggZXhwb25lbnQKCWFuZGkudwkJJjB4N2ZmZiwlZDEKCWNtcGkudwkJJWQxLCYweDdmZmYKCWJuZS5iCQlmb3BlcnJfb3V0X25vdF9xbmFuCiMgdGhlIG9wZXJhbmQgaXMgZWl0aGVyIGFuIGluZmluaXR5IG9yIGEgUU5BTi4KCXRzdC5sCQlGUF9TUkNfTE8oJWE2KQoJYm5lLmIJCWZvcGVycl9vdXRfcW5hbgoJbW92LmwJCUZQX1NSQ19ISSglYTYpLCVkMQoJYW5kaS5sCQkmMHg3ZmZmZmZmZiwlZDEKCWJlcS5iCQlmb3BlcnJfb3V0X25vdF9xbmFuCmZvcGVycl9vdXRfcW5hbjoKCW1vdi5sCQlGUF9TUkNfSEkoJWE2KSxMX1NDUjEoJWE2KQoJYnJhLmIJCWZvcGVycl9vdXRfam1wCgpmb3BlcnJfb3V0X25vdF9xbmFuOgoJbW92LmwJCSYweDdmZmZmZmZmLCVkMQoJdHN0LmIJCUZQX1NSQ19FWCglYTYpCglicGwuYgkJZm9wZXJyX291dF9ub3RfcW5hbjIKCWFkZHEubAkJJjB4MSwlZDEKZm9wZXJyX291dF9ub3RfcW5hbjI6Cgltb3YubAkJJWQxLExfU0NSMSglYTYpCgpmb3BlcnJfb3V0X2ptcDoKCWJmZXh0dQkJJWQweyYxOTomM30sJWQwCQkjIGV4dHJhY3QgZHN0IGZvcm1hdCBmaWVsZAoJbW92LmIJCTErRVhDX09QV09SRCglYTYpLCVkMQkjIGV4dHJhY3QgPGVhPiBtb2RlLHJlZwoJbW92LncJCSh0Ymxfb3BlcnIuYiwlcGMsJWQwLncqMiksJWEwCglqbXAJCSh0Ymxfb3BlcnIuYiwlcGMsJWEwKQoKdGJsX29wZXJyOgoJc2hvcnQJCWZvcGVycl9vdXRfbCAtIHRibF9vcGVyciAjIGxvbmcgd29yZCBpbnRlZ2VyCglzaG9ydAkJdGJsX29wZXJyICAgIC0gdGJsX29wZXJyICMgc2dsIHByZWMgc2hvdWxkbid0IGhhcHBlbgoJc2hvcnQJCXRibF9vcGVyciAgICAtIHRibF9vcGVyciAjIGV4dCBwcmVjIHNob3VsZG4ndCBoYXBwZW4KCXNob3J0CQlmb3BlcnJfZXhpdCAgLSB0Ymxfb3BlcnIgIyBwYWNrZWQgd29uJ3QgZW50ZXIgaGVyZQoJc2hvcnQJCWZvcGVycl9vdXRfdyAtIHRibF9vcGVyciAjIHdvcmQgaW50ZWdlcgoJc2hvcnQJCXRibF9vcGVyciAgICAtIHRibF9vcGVyciAjIGRibCBwcmVjIHNob3VsZG4ndCBoYXBwZW4KCXNob3J0CQlmb3BlcnJfb3V0X2IgLSB0Ymxfb3BlcnIgIyBieXRlIGludGVnZXIKCXNob3J0CQl0Ymxfb3BlcnIgICAgLSB0Ymxfb3BlcnIgIyBwYWNrZWQgd29uJ3QgZW50ZXIgaGVyZQoKZm9wZXJyX291dF9iOgoJbW92LmIJCUxfU0NSMSglYTYpLCVkMAkJIyBsb2FkIHBvc2l0aXZlIGRlZmF1bHQgcmVzdWx0CgljbXBpLmIJCSVkMSwmMHg3CQkjIGlzIDxlYT4gbW9kZSBhIGRhdGEgcmVnPwoJYmxlLmIJCWZvcGVycl9vdXRfYl9zYXZlX2RuCSMgeWVzCgltb3YubAkJRVhDX0VBKCVhNiksJWEwCQkjIHBhc3M6IDxlYT4gb2YgZGVmYXVsdCByZXN1bHQKCWJzci5sCQlfZG1lbV93cml0ZV9ieXRlCSMgd3JpdGUgdGhlIGRlZmF1bHQgcmVzdWx0CgoJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBmYWlsPwoJYm5lLmwJCWZhY2Nfb3V0X2IJCSMgeWVzCgoJYnJhLncJCWZvcGVycl9leGl0CmZvcGVycl9vdXRfYl9zYXZlX2RuOgoJYW5kaS53CQkmMHgwMDA3LCVkMQoJYnNyLmwJCXN0b3JlX2RyZWdfYgkJIyBzdG9yZSByZXN1bHQgdG8gcmVnZmlsZQoJYnJhLncJCWZvcGVycl9leGl0Cgpmb3BlcnJfb3V0X3c6Cgltb3YudwkJTF9TQ1IxKCVhNiksJWQwCQkjIGxvYWQgcG9zaXRpdmUgZGVmYXVsdCByZXN1bHQKCWNtcGkuYgkJJWQxLCYweDcJCSMgaXMgPGVhPiBtb2RlIGEgZGF0YSByZWc/CglibGUuYgkJZm9wZXJyX291dF93X3NhdmVfZG4JIyB5ZXMKCW1vdi5sCQlFWENfRUEoJWE2KSwlYTAJCSMgcGFzczogPGVhPiBvZiBkZWZhdWx0IHJlc3VsdAoJYnNyLmwJCV9kbWVtX3dyaXRlX3dvcmQJIyB3cml0ZSB0aGUgZGVmYXVsdCByZXN1bHQKCgl0c3QubAkJJWQxCQkJIyBkaWQgZHN0b3JlIGZhaWw/CglibmUubAkJZmFjY19vdXRfdwkJIyB5ZXMKCglicmEudwkJZm9wZXJyX2V4aXQKZm9wZXJyX291dF93X3NhdmVfZG46CglhbmRpLncJCSYweDAwMDcsJWQxCglic3IubAkJc3RvcmVfZHJlZ193CQkjIHN0b3JlIHJlc3VsdCB0byByZWdmaWxlCglicmEudwkJZm9wZXJyX2V4aXQKCmZvcGVycl9vdXRfbDoKCW1vdi5sCQlMX1NDUjEoJWE2KSwlZDAJCSMgbG9hZCBwb3NpdGl2ZSBkZWZhdWx0IHJlc3VsdAoJY21waS5iCQklZDEsJjB4NwkJIyBpcyA8ZWE+IG1vZGUgYSBkYXRhIHJlZz8KCWJsZS5iCQlmb3BlcnJfb3V0X2xfc2F2ZV9kbgkjIHllcwoJbW92LmwJCUVYQ19FQSglYTYpLCVhMAkJIyBwYXNzOiA8ZWE+IG9mIGRlZmF1bHQgcmVzdWx0Cglic3IubAkJX2RtZW1fd3JpdGVfbG9uZwkjIHdyaXRlIHRoZSBkZWZhdWx0IHJlc3VsdAoKCXRzdC5sCQklZDEJCQkjIGRpZCBkc3RvcmUgZmFpbD8KCWJuZS5sCQlmYWNjX291dF9sCQkjIHllcwoKCWJyYS53CQlmb3BlcnJfZXhpdApmb3BlcnJfb3V0X2xfc2F2ZV9kbjoKCWFuZGkudwkJJjB4MDAwNywlZDEKCWJzci5sCQlzdG9yZV9kcmVnX2wJCSMgc3RvcmUgcmVzdWx0IHRvIHJlZ2ZpbGUKCWJyYS53CQlmb3BlcnJfZXhpdAoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJX2Zwc3Bfc25hbigpOiAwNjBGUFNQIGVudHJ5IHBvaW50IGZvciBGUCBTTkFOIGV4Y2VwdGlvbi4JIwojCQkJCQkJCQkJIwojCVRoaXMgaGFuZGxlciBzaG91bGQgYmUgdGhlIGZpcnN0IGNvZGUgZXhlY3V0ZWQgdXBvbiB0YWtpbmcgdGhlCSMKIwlGUCBTaWduYWxsaW5nIE5BTiBleGNlcHRpb24gaW4gYW4gb3BlcmF0aW5nIHN5c3RlbS4JCSMKIwkJCQkJCQkJCSMKIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCV9pbWVtX3JlYWRfbG9uZygpIC0gcmVhZCBpbnN0cnVjdGlvbiBsb25nd29yZAkJCSMKIwlmaXhfc2tld2VkX29wcygpIC0gYWRqdXN0IHNyYyBvcGVyYW5kIGluIGZzYXZlIGZyYW1lCQkjCiMJX3JlYWxfc25hbigpIC0gImNhbGxvdXQiIHRvIG9wZXJhdGluZyBzeXN0ZW0gU05BTiBoYW5kbGVyCSMKIwlfZG1lbV93cml0ZV97Ynl0ZSx3b3JkLGxvbmd9KCkgLSBzdG9yZSBkYXRhIHRvIG1lbSAob3BjbGFzcyAzKQkjCiMJc3RvcmVfZHJlZ197Yix3LGx9KCkgLSBzdG9yZSBkYXRhIHRvIGRhdGEgcmVnZmlsZSAob3BjbGFzcyAzKQkjCiMJZmFjY19vdXRfe2IsdyxsLGQseH0oKSAtIHN0b3JlIHRvIG1lbSB0b29rIGFjYyBlcnJvciAob3BjbCAzKQkjCiMJX2NhbGNfZWFfZm91dCgpIC0gZml4IEFuIGlmIDxlYT4gaXMgLSgpIG9yICgpKzsgYWxzbyBnZXQgPGVhPgkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwktIFRoZSBzeXN0ZW0gc3RhY2sgY29udGFpbnMgdGhlIEZQIFNOQU4gZXhjZXB0aW9uIGZyYW1lCQkjCiMJLSBUaGUgZnNhdmUgZnJhbWUgY29udGFpbnMgdGhlIHNvdXJjZSBvcGVyYW5kCQkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJTm8gYWNjZXNzIGVycm9yOgkJCQkJCSMKIwktIFRoZSBzeXN0ZW0gc3RhY2sgaXMgdW5jaGFuZ2VkCQkJCQkjCiMJLSBUaGUgZnNhdmUgZnJhbWUgY29udGFpbnMgdGhlIGFkanVzdGVkIHNyYyBvcCBmb3Igb3BjbGFzcyAwLDIJIwojCQkJCQkJCQkJIwojIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJSW4gYSBzeXN0ZW0gd2hlcmUgdGhlIEZQIFNOQU4gZXhjZXB0aW9uIGlzIGVuYWJsZWQsIHRoZSBnb2FsCSMKIyBpcyB0byBnZXQgdG8gdGhlIGhhbmRsZXIgc3BlY2lmaWVkIGF0IF9yZWFsX3NuYW4oKS4gQnV0LCBvbiB0aGUgMDYwLAkjCiMgZm9yIG9wY2xhc3MgemVybyBhbmQgdHdvIGluc3RydWN0aW9ucyB0YWtpbmcgdGhpcyBleGNlcHRpb24sIHRoZQkjCiMgaW5wdXQgb3BlcmFuZCBpbiB0aGUgZnNhdmUgZnJhbWUgbWF5IGJlIGluY29ycmVjdCBmb3Igc29tZSBjYXNlcwkjCiMgYW5kIG5lZWRzIHRvIGJlIGNvcnJlY3RlZC4gVGhpcyBoYW5kbGVyIGNhbGxzIGZpeF9za2V3ZWRfb3BzKCkgdG8JIwojIGRvIGp1c3QgdGhpcyBhbmQgdGhlbiBleGl0cyB0aHJvdWdoIF9yZWFsX3NuYW4oKS4JCQkjCiMJRm9yIG9wY2xhc3MgMyBpbnN0cnVjdGlvbnMsIHRoZSAwNjAgZG9lc24ndCBzdG9yZSB0aGUgZGVmYXVsdAkjCiMgU05BTiByZXN1bHQgb3V0IHRvIG1lbW9yeSBvciBkYXRhIHJlZ2lzdGVyIGZpbGUgYXMgaXQgc2hvdWxkLgkJIwojIFRoaXMgY29kZSBtdXN0IGVtdWxhdGUgdGhlIG1vdmUgb3V0IGJlZm9yZSBmaW5hbGx5IGV4aXRpbmcgdGhyb3VnaAkjCiMgX3JlYWxfc25hbigpLiBUaGUgbW92ZSBvdXQsIGlmIHRvIG1lbW9yeSwgaXMgcGVyZm9ybWVkIHVzaW5nCQkjCiMgX21lbV93cml0ZSgpICJjYWxsb3V0IiByb3V0aW5lcyB0aGF0IG1heSByZXR1cm4gYSBmYWlsaW5nIHJlc3VsdC4JIwojIEluIHRoaXMgc3BlY2lhbCBjYXNlLCB0aGUgaGFuZGxlciBtdXN0IGV4aXQgdGhyb3VnaCBmYWNjX291dCgpCSMKIyB3aGljaCBjcmVhdGVzIGFuIGFjY2VzcyBlcnJvciBzdGFjayBmcmFtZSBmcm9tIHRoZSBjdXJyZW50IFNOQU4JIwojIHN0YWNrIGZyYW1lLgkJCQkJCQkJIwojCUZvciB0aGUgY2FzZSBvZiBhbiBleHRlbmRlZCBwcmVjaXNpb24gb3BjbGFzcyAzIGluc3RydWN0aW9uLAkjCiMgaWYgdGhlIGVmZmVjdGl2ZSBhZGRyZXNzaW5nIG1vZGUgd2FzIC0oKSBvciAoKSssIHRoZW4gdGhlIGFkZHJlc3MJIwojIHJlZ2lzdGVyIG11c3QgZ2V0IHVwZGF0ZWQgYnkgY2FsbGluZyBfY2FsY19lYV9mb3V0KCkuIElmIHRoZSA8ZWE+CSMKIyB3YXMgLShhNykgZnJvbSBzdXBlcnZpc29yIG1vZGUsIHRoZW4gdGhlIGV4Y2VwdGlvbiBmcmFtZSBjdXJyZW50bHkJIwojIG9uIHRoZSBzeXN0ZW0gc3RhY2sgbXVzdCBiZSBjYXJlZnVsbHkgbW92ZWQgImRvd24iIHRvIG1ha2Ugcm9vbQkjCiMgZm9yIHRoZSBvcGVyYW5kIGJlaW5nIG1vdmVkLgkJCQkJCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCWdsb2JhbAkJX2Zwc3Bfc25hbgpfZnBzcF9zbmFuOgoKCWxpbmsudwkJJWE2LCYtTE9DQUxfU0laRQkjIGluaXQgc3RhY2sgZnJhbWUKCglmc2F2ZQkJRlBfU1JDKCVhNikJCSMgZ3JhYiB0aGUgImJ1c3kiIGZyYW1lCgoJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQoJZm1vdm0ubAkJJWZwY3IsJWZwc3IsJWZwaWFyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKCWZtb3ZtLngJCSYweGMwLEVYQ19GUFJFR1MoJWE2KQkjIHNhdmUgZnAwLWZwMSBvbiBzdGFjawoKIyB0aGUgRlBJQVIgaG9sZHMgdGhlICJjdXJyZW50IFBDIiBvZiB0aGUgZmF1bHRpbmcgaW5zdHJ1Y3Rpb24KCW1vdi5sCQlVU0VSX0ZQSUFSKCVhNiksRVhDX0VYVFdQVFIoJWE2KQoKCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKCWJzci5sCQlfaW1lbV9yZWFkX2xvbmcJCSMgZmV0Y2ggdGhlIGluc3RydWN0aW9uIHdvcmRzCgltb3YubAkJJWQwLEVYQ19PUFdPUkQoJWE2KQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoJYnRzdAkJJjEzLCVkMAkJCSMgaXMgaW5zdHIgYW4gZm1vdmUgb3V0PwoJYm5lLncJCWZzbmFuX291dAkJIyBmbW92ZSBvdXQKCgojIGhlcmUsIHdlIHNpbXBseSBzZWUgaWYgdGhlIG9wZXJhbmQgaW4gdGhlIGZzYXZlIGZyYW1lIG5lZWRzIHRvIGJlICJ1bnNrZXdlZCIuCiMgdGhpcyB3b3VsZCBiZSB0aGUgY2FzZSBmb3Igb3BjbGFzcyB0d28gb3BlcmF0aW9ucyB3aXRoIGEgc291cmNlIGluZmluaXR5IG9yCiMgZGVub3JtIG9wZXJhbmQgaW4gdGhlIHNnbCBvciBkYmwgZm9ybWF0LiBOQU5zIGFsc28gYmVjb21lIHNrZXdlZCBhbmQgbXVzdCBiZQojIGZpeGVkIGhlcmUuCglsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzOiBwdHIgdG8gc3JjIG9wCglic3IubAkJZml4X3NrZXdlZF9vcHMJCSMgZml4IHNyYyBvcAoKZnNuYW5fZXhpdDoKCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMQoJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKCglmcmVzdG9yZQlGUF9TUkMoJWE2KQoKCXVubGsJCSVhNgoJYnJhLmwJCV9yZWFsX3NuYW4KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIwojIHRoZSBoYXJkd2FyZSBkb2VzIG5vdCBzYXZlIHRoZSBkZWZhdWx0IHJlc3VsdCB0byBtZW1vcnkgb24gZW5hYmxlZAojIHNuYW4gZXhjZXB0aW9ucy4gd2UgZG8gdGhpcyBoZXJlIGJlZm9yZSBwYXNzaW5nIGNvbnRyb2wgdG8KIyB0aGUgdXNlciBzbmFuIGhhbmRsZXIuCiMKIyBieXRlLCB3b3JkLCBsb25nLCBhbmQgcGFja2VkIGRlc3RpbmF0aW9uIGZvcm1hdCBvcGVyYXRpb25zIGNhbiBwYXNzCiMgdGhyb3VnaCBoZXJlLiBzaW5jZSBwYWNrZWQgZm9ybWF0IG9wZXJhdGlvbnMgYWxyZWFkeSB3ZXJlIGhhbmRsZWQgYnkKIyBmcHNwX3Vuc3VwcCgpLCB0aGVuIHdlIG5lZWQgdG8gZG8gbm90aGluZyBlbHNlIGZvciB0aGVtIGhlcmUuCiMgZm9yIGJ5dGUsIHdvcmQsIGFuZCBsb25nLCB3ZSBzaW1wbHkgbmVlZCB0byB0ZXN0IHRoZSBzaWduIG9mIHRoZSBzcmMKIyBvcGVyYW5kIGFuZCBzYXZlIHRoZSBhcHByb3ByaWF0ZSBtaW5pbXVtIG9yIG1heGltdW0gaW50ZWdlciB2YWx1ZQojIHRvIHRoZSBlZmZlY3RpdmUgYWRkcmVzcyBhcyBwb2ludGVkIHRvIGJ5IHRoZSBzdGFja2VkIGVmZmVjdGl2ZSBhZGRyZXNzLgojCmZzbmFuX291dDoKCgliZmV4dHUJCSVkMHsmMTk6JjN9LCVkMAkJIyBleHRyYWN0IGRzdCBmb3JtYXQgZmllbGQKCW1vdi5iCQkxK0VYQ19PUFdPUkQoJWE2KSwlZDEJIyBleHRyYWN0IDxlYT4gbW9kZSxyZWcKCW1vdi53CQkodGJsX3NuYW4uYiwlcGMsJWQwLncqMiksJWEwCglqbXAJCSh0Ymxfc25hbi5iLCVwYywlYTApCgp0Ymxfc25hbjoKCXNob3J0CQlmc25hbl9vdXRfbCAtIHRibF9zbmFuICMgbG9uZyB3b3JkIGludGVnZXIKCXNob3J0CQlmc25hbl9vdXRfcyAtIHRibF9zbmFuICMgc2dsIHByZWMgc2hvdWxkbid0IGhhcHBlbgoJc2hvcnQJCWZzbmFuX291dF94IC0gdGJsX3NuYW4gIyBleHQgcHJlYyBzaG91bGRuJ3QgaGFwcGVuCglzaG9ydAkJdGJsX3NuYW4gICAgLSB0Ymxfc25hbiAjIHBhY2tlZCBuZWVkcyBubyBoZWxwCglzaG9ydAkJZnNuYW5fb3V0X3cgLSB0Ymxfc25hbiAjIHdvcmQgaW50ZWdlcgoJc2hvcnQJCWZzbmFuX291dF9kIC0gdGJsX3NuYW4gIyBkYmwgcHJlYyBzaG91bGRuJ3QgaGFwcGVuCglzaG9ydAkJZnNuYW5fb3V0X2IgLSB0Ymxfc25hbiAjIGJ5dGUgaW50ZWdlcgoJc2hvcnQJCXRibF9zbmFuICAgIC0gdGJsX3NuYW4gIyBwYWNrZWQgbmVlZHMgbm8gaGVscAoKZnNuYW5fb3V0X2I6Cgltb3YuYgkJRlBfU1JDX0hJKCVhNiksJWQwCSMgbG9hZCB1cHBlciBieXRlIG9mIFNOQU4KCWJzZXQJCSY2LCVkMAkJCSMgc2V0IFNOQU4gYml0CgljbXBpLmIJCSVkMSwmMHg3CQkjIGlzIDxlYT4gbW9kZSBhIGRhdGEgcmVnPwoJYmxlLmIJCWZzbmFuX291dF9iX2RuCQkjIHllcwoJbW92LmwJCUVYQ19FQSglYTYpLCVhMAkJIyBwYXNzOiA8ZWE+IG9mIGRlZmF1bHQgcmVzdWx0Cglic3IubAkJX2RtZW1fd3JpdGVfYnl0ZQkjIHdyaXRlIHRoZSBkZWZhdWx0IHJlc3VsdAoKCXRzdC5sCQklZDEJCQkjIGRpZCBkc3RvcmUgZmFpbD8KCWJuZS5sCQlmYWNjX291dF9iCQkjIHllcwoKCWJyYS53CQlmc25hbl9leGl0CmZzbmFuX291dF9iX2RuOgoJYW5kaS53CQkmMHgwMDA3LCVkMQoJYnNyLmwJCXN0b3JlX2RyZWdfYgkJIyBzdG9yZSByZXN1bHQgdG8gcmVnZmlsZQoJYnJhLncJCWZzbmFuX2V4aXQKCmZzbmFuX291dF93OgoJbW92LncJCUZQX1NSQ19ISSglYTYpLCVkMAkjIGxvYWQgdXBwZXIgd29yZCBvZiBTTkFOCglic2V0CQkmMTQsJWQwCQkJIyBzZXQgU05BTiBiaXQKCWNtcGkuYgkJJWQxLCYweDcJCSMgaXMgPGVhPiBtb2RlIGEgZGF0YSByZWc/CglibGUuYgkJZnNuYW5fb3V0X3dfZG4JCSMgeWVzCgltb3YubAkJRVhDX0VBKCVhNiksJWEwCQkjIHBhc3M6IDxlYT4gb2YgZGVmYXVsdCByZXN1bHQKCWJzci5sCQlfZG1lbV93cml0ZV93b3JkCSMgd3JpdGUgdGhlIGRlZmF1bHQgcmVzdWx0CgoJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBmYWlsPwoJYm5lLmwJCWZhY2Nfb3V0X3cJCSMgeWVzCgoJYnJhLncJCWZzbmFuX2V4aXQKZnNuYW5fb3V0X3dfZG46CglhbmRpLncJCSYweDAwMDcsJWQxCglic3IubAkJc3RvcmVfZHJlZ193CQkjIHN0b3JlIHJlc3VsdCB0byByZWdmaWxlCglicmEudwkJZnNuYW5fZXhpdAoKZnNuYW5fb3V0X2w6Cgltb3YubAkJRlBfU1JDX0hJKCVhNiksJWQwCSMgbG9hZCB1cHBlciBsb25nd29yZCBvZiBTTkFOCglic2V0CQkmMzAsJWQwCQkJIyBzZXQgU05BTiBiaXQKCWNtcGkuYgkJJWQxLCYweDcJCSMgaXMgPGVhPiBtb2RlIGEgZGF0YSByZWc/CglibGUuYgkJZnNuYW5fb3V0X2xfZG4JCSMgeWVzCgltb3YubAkJRVhDX0VBKCVhNiksJWEwCQkjIHBhc3M6IDxlYT4gb2YgZGVmYXVsdCByZXN1bHQKCWJzci5sCQlfZG1lbV93cml0ZV9sb25nCSMgd3JpdGUgdGhlIGRlZmF1bHQgcmVzdWx0CgoJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBmYWlsPwoJYm5lLmwJCWZhY2Nfb3V0X2wJCSMgeWVzCgoJYnJhLncJCWZzbmFuX2V4aXQKZnNuYW5fb3V0X2xfZG46CglhbmRpLncJCSYweDAwMDcsJWQxCglic3IubAkJc3RvcmVfZHJlZ19sCQkjIHN0b3JlIHJlc3VsdCB0byByZWdmaWxlCglicmEudwkJZnNuYW5fZXhpdAoKZnNuYW5fb3V0X3M6CgljbXBpLmIJCSVkMSwmMHg3CQkjIGlzIDxlYT4gbW9kZSBhIGRhdGEgcmVnPwoJYmxlLmIJCWZzbmFuX291dF9kX2RuCQkjIHllcwoJbW92LmwJCUZQX1NSQ19FWCglYTYpLCVkMAkjIGZldGNoIFNOQU4gc2lnbgoJYW5kaS5sCQkmMHg4MDAwMDAwMCwlZDAJCSMga2VlcCBzaWduCglvcmkubAkJJjB4N2ZjMDAwMDAsJWQwCQkjIGluc2VydCBuZXcgZXhwb25lbnQsU05BTiBiaXQKCW1vdi5sCQlGUF9TUkNfSEkoJWE2KSwlZDEJIyBsb2FkIG1hbnRpc3NhCglsc3IubAkJJjB4OCwlZDEJCSMgc2hpZnQgbWFudGlzc2EgZm9yIHNnbAoJb3IubAkJJWQxLCVkMAkJCSMgY3JlYXRlIHNnbCBTTkFOCgltb3YubAkJRVhDX0VBKCVhNiksJWEwCQkjIHBhc3M6IDxlYT4gb2YgZGVmYXVsdCByZXN1bHQKCWJzci5sCQlfZG1lbV93cml0ZV9sb25nCSMgd3JpdGUgdGhlIGRlZmF1bHQgcmVzdWx0CgoJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBmYWlsPwoJYm5lLmwJCWZhY2Nfb3V0X2wJCSMgeWVzCgoJYnJhLncJCWZzbmFuX2V4aXQKZnNuYW5fb3V0X2RfZG46Cgltb3YubAkJRlBfU1JDX0VYKCVhNiksJWQwCSMgZmV0Y2ggU05BTiBzaWduCglhbmRpLmwJCSYweDgwMDAwMDAwLCVkMAkJIyBrZWVwIHNpZ24KCW9yaS5sCQkmMHg3ZmMwMDAwMCwlZDAJCSMgaW5zZXJ0IG5ldyBleHBvbmVudCxTTkFOIGJpdAoJbW92LmwJCSVkMSwtKCVzcCkKCW1vdi5sCQlGUF9TUkNfSEkoJWE2KSwlZDEJIyBsb2FkIG1hbnRpc3NhCglsc3IubAkJJjB4OCwlZDEJCSMgc2hpZnQgbWFudGlzc2EgZm9yIHNnbAoJb3IubAkJJWQxLCVkMAkJCSMgY3JlYXRlIHNnbCBTTkFOCgltb3YubAkJKCVzcCkrLCVkMQoJYW5kaS53CQkmMHgwMDA3LCVkMQoJYnNyLmwJCXN0b3JlX2RyZWdfbAkJIyBzdG9yZSByZXN1bHQgdG8gcmVnZmlsZQoJYnJhLncJCWZzbmFuX2V4aXQKCmZzbmFuX291dF9kOgoJbW92LmwJCUZQX1NSQ19FWCglYTYpLCVkMAkjIGZldGNoIFNOQU4gc2lnbgoJYW5kaS5sCQkmMHg4MDAwMDAwMCwlZDAJCSMga2VlcCBzaWduCglvcmkubAkJJjB4N2ZmODAwMDAsJWQwCQkjIGluc2VydCBuZXcgZXhwb25lbnQsU05BTiBiaXQKCW1vdi5sCQlGUF9TUkNfSEkoJWE2KSwlZDEJIyBsb2FkIGhpIG1hbnRpc3NhCgltb3YubAkJJWQwLEZQX1NDUjBfRVgoJWE2KQkjIHN0b3JlIHRvIHRlbXAgc3BhY2UKCW1vdi5sCQkmMTEsJWQwCQkJIyBsb2FkIHNoaWZ0IGFtdAoJbHNyLmwJCSVkMCwlZDEKCW9yLmwJCSVkMSxGUF9TQ1IwX0VYKCVhNikJIyBjcmVhdGUgZGJsIGhpCgltb3YubAkJRlBfU1JDX0hJKCVhNiksJWQxCSMgbG9hZCBoaSBtYW50aXNzYQoJYW5kaS5sCQkmMHgwMDAwMDdmZiwlZDEKCXJvci5sCQklZDAsJWQxCgltb3YubAkJJWQxLEZQX1NDUjBfSEkoJWE2KQkjIHN0b3JlIHRvIHRlbXAgc3BhY2UKCW1vdi5sCQlGUF9TUkNfTE8oJWE2KSwlZDEJIyBsb2FkIGxvIG1hbnRpc3NhCglsc3IubAkJJWQwLCVkMQoJb3IubAkJJWQxLEZQX1NDUjBfSEkoJWE2KQkjIGNyZWF0ZSBkYmwgbG8KCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHB0ciB0byBvcGVyYW5kCgltb3YubAkJRVhDX0VBKCVhNiksJWExCQkjIHBhc3M6IGRzdCBhZGRyCgltb3ZxLmwJCSYweDgsJWQwCQkjIHBhc3M6IHNpemUgb2YgOCBieXRlcwoJYnNyLmwJCV9kbWVtX3dyaXRlCQkjIHdyaXRlIHRoZSBkZWZhdWx0IHJlc3VsdAoKCXRzdC5sCQklZDEJCQkjIGRpZCBkc3RvcmUgZmFpbD8KCWJuZS5sCQlmYWNjX291dF9kCQkjIHllcwoKCWJyYS53CQlmc25hbl9leGl0CgojIGZvciBleHRlbmRlZCBwcmVjaXNpb24sIGlmIHRoZSBhZGRyZXNzaW5nIG1vZGUgaXMgcHJlLWRlY3JlbWVudCBvcgojIHBvc3QtaW5jcmVtZW50LCB0aGVuIHRoZSBhZGRyZXNzIHJlZ2lzdGVyIGRpZCBub3QgZ2V0IHVwZGF0ZWQuCiMgaW4gYWRkaXRpb24sIGZvciBwcmUtZGVjcmVtZW50LCB0aGUgc3RhY2tlZCA8ZWE+IGlzIGluY29ycmVjdC4KZnNuYW5fb3V0X3g6CgljbHIuYgkJU1BDT05EX0ZMRyglYTYpCQkjIGNsZWFyIHNwZWNpYWwgY2FzZSBmbGFnCgoJbW92LncJCUZQX1NSQ19FWCglYTYpLEZQX1NDUjBfRVgoJWE2KQoJY2xyLncJCTIrRlBfU0NSMCglYTYpCgltb3YubAkJRlBfU1JDX0hJKCVhNiksJWQwCglic2V0CQkmMzAsJWQwCgltb3YubAkJJWQwLEZQX1NDUjBfSEkoJWE2KQoJbW92LmwJCUZQX1NSQ19MTyglYTYpLEZQX1NDUjBfTE8oJWE2KQoKCWJ0c3QJCSYweDUsRVhDX1NSKCVhNikJIyBzdXBlcnZpc29yIG1vZGUgZXhjZXB0aW9uPwoJYm5lLmIJCWZzbmFuX291dF94X3MJCSMgeWVzCgoJbW92LmwJCSV1c3AsJWEwCQkjIGZldGNoIHVzZXIgc3RhY2sgcG9pbnRlcgoJbW92LmwJCSVhMCxFWENfQTcoJWE2KQkJIyBzYXZlIG9uIHN0YWNrIGZvciBjYWxjX2VhKCkKCW1vdi5sCQkoJWE2KSxFWENfQTYoJWE2KQoKCWJzci5sCQlfY2FsY19lYV9mb3V0CQkjIGZpbmQgdGhlIGNvcnJlY3QgZWEsdXBkYXRlIEFuCgltb3YubAkJJWEwLCVhMQoJbW92LmwJCSVhMCxFWENfRUEoJWE2KQkJIyBzdGFjayBjb3JyZWN0IDxlYT4KCgltb3YubAkJRVhDX0E3KCVhNiksJWEwCgltb3YubAkJJWEwLCV1c3AJCSMgcmVzdG9yZSB1c2VyIHN0YWNrIHBvaW50ZXIKCW1vdi5sCQlFWENfQTYoJWE2KSwoJWE2KQoKZnNuYW5fb3V0X3hfc2F2ZToKCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHB0ciB0byBvcGVyYW5kCgltb3ZxLmwJCSYweGMsJWQwCQkjIHBhc3M6IHNpemUgb2YgZXh0ZW5kZWQKCWJzci5sCQlfZG1lbV93cml0ZQkJIyB3cml0ZSB0aGUgZGVmYXVsdCByZXN1bHQKCgl0c3QubAkJJWQxCQkJIyBkaWQgZHN0b3JlIGZhaWw/CglibmUubAkJZmFjY19vdXRfeAkJIyB5ZXMKCglicmEudwkJZnNuYW5fZXhpdAoKZnNuYW5fb3V0X3hfczoKCW1vdi5sCQkoJWE2KSxFWENfQTYoJWE2KQoKCWJzci5sCQlfY2FsY19lYV9mb3V0CQkjIGZpbmQgdGhlIGNvcnJlY3QgZWEsdXBkYXRlIEFuCgltb3YubAkJJWEwLCVhMQoJbW92LmwJCSVhMCxFWENfRUEoJWE2KQkJIyBzdGFjayBjb3JyZWN0IDxlYT4KCgltb3YubAkJRVhDX0E2KCVhNiksKCVhNikKCgljbXBpLmIJCVNQQ09ORF9GTEcoJWE2KSwmbWRhN19mbGcgIyBpcyA8ZWE+IG1vZGUgLShhNyk/CglibmUuYgkJZnNuYW5fb3V0X3hfc2F2ZQkjIG5vCgojIHRoZSBvcGVyYXRpb24gd2FzICJmbW92ZS54IFNOQU4sLShhNykiIGZyb20gc3VwZXJ2aXNvciBtb2RlLgoJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAtZnAxCglmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncwoJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQoKCWZyZXN0b3JlCUZQX1NSQyglYTYpCgoJbW92LmwJCUVYQ19BNiglYTYpLCVhNgkJIyByZXN0b3JlIGZyYW1lIHBvaW50ZXIKCgltb3YubAkJTE9DQUxfU0laRStFWENfU1IoJXNwKSxMT0NBTF9TSVpFK0VYQ19TUi0weGMoJXNwKQoJbW92LmwJCUxPQ0FMX1NJWkUrRVhDX1BDKzB4Miglc3ApLExPQ0FMX1NJWkUrRVhDX1BDKzB4Mi0weGMoJXNwKQoJbW92LmwJCUxPQ0FMX1NJWkUrRVhDX0VBKCVzcCksTE9DQUxfU0laRStFWENfRUEtMHhjKCVzcCkKCgltb3YubAkJTE9DQUxfU0laRStGUF9TQ1IwX0VYKCVzcCksTE9DQUxfU0laRStFWENfU1IoJXNwKQoJbW92LmwJCUxPQ0FMX1NJWkUrRlBfU0NSMF9ISSglc3ApLExPQ0FMX1NJWkUrRVhDX1BDKzB4Miglc3ApCgltb3YubAkJTE9DQUxfU0laRStGUF9TQ1IwX0xPKCVzcCksTE9DQUxfU0laRStFWENfRUEoJXNwKQoKCWFkZC5sCQkmTE9DQUxfU0laRS0weDgsJXNwCgoJYnJhLmwJCV9yZWFsX3NuYW4KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCV9mcHNwX2luZXgoKTogMDYwRlBTUCBlbnRyeSBwb2ludCBmb3IgRlAgSW5leGFjdCBleGNlcHRpb24uCSMKIwkJCQkJCQkJCSMKIwlUaGlzIGhhbmRsZXIgc2hvdWxkIGJlIHRoZSBmaXJzdCBjb2RlIGV4ZWN1dGVkIHVwb24gdGFraW5nIHRoZQkjCiMJRlAgSW5leGFjdCBleGNlcHRpb24gaW4gYW4gb3BlcmF0aW5nIHN5c3RlbS4JCQkjCiMJCQkJCQkJCQkjCiMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlfaW1lbV9yZWFkX2xvbmcoKSAtIHJlYWQgaW5zdHJ1Y3Rpb24gbG9uZ3dvcmQJCQkjCiMJZml4X3NrZXdlZF9vcHMoKSAtIGFkanVzdCBzcmMgb3BlcmFuZCBpbiBmc2F2ZSBmcmFtZQkJIwojCXNldF90YWdfeCgpIC0gZGV0ZXJtaW5lIG9wdHlwZSBvZiBzcmMvZHN0IG9wZXJhbmRzCQkjCiMJc3RvcmVfZnByZWcoKSAtIHN0b3JlIG9wY2xhc3MgMCBvciAyIHJlc3VsdCB0byBGUCByZWdmaWxlCSMKIwl1bm5vcm1fZml4KCkgLSBjaGFuZ2UgVU5OT1JNIG9wZXJhbmRzIHRvIE5PUk0gb3IgWkVSTwkJIwojCWxvYWRfZnBuMigpIC0gbG9hZCBkc3Qgb3BlcmFuZCBmcm9tIEZQIHJlZ2ZpbGUJCQkjCiMJc21vdmNyKCkgLSBlbXVsYXRlIGFuICJmbW92Y3IiIGluc3RydWN0aW9uCQkJIwojCWZvdXQoKSAtIGVtdWxhdGUgYW4gb3BjbGFzcyAzIGluc3RydWN0aW9uCQkJIwojCXRibF91bnN1cHAgLSBhZGQgb2YgdGFibGUgb2YgZW11bGF0aW9uIHJvdXRpbmVzIGZvciBvcGNsYXNzIDAsMgkjCiMJX3JlYWxfaW5leCgpIC0gImNhbGxvdXQiIHRvIG9wZXJhdGluZyBzeXN0ZW0gaW5leGFjdCBoYW5kbGVyCSMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCS0gVGhlIHN5c3RlbSBzdGFjayBjb250YWlucyB0aGUgRlAgSW5leGFjdCBleGNlcHRpb24gZnJhbWUJIwojCS0gVGhlIGZzYXZlIGZyYW1lIGNvbnRhaW5zIHRoZSBzb3VyY2Ugb3BlcmFuZAkJCSMKIwkJCQkJCQkJCSMKIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCS0gVGhlIHN5c3RlbSBzdGFjayBpcyB1bmNoYW5nZWQJCQkJCSMKIwktIFRoZSBmc2F2ZSBmcmFtZSBjb250YWlucyB0aGUgYWRqdXN0ZWQgc3JjIG9wIGZvciBvcGNsYXNzIDAsMgkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlJbiBhIHN5c3RlbSB3aGVyZSB0aGUgRlAgSW5leGFjdCBleGNlcHRpb24gaXMgZW5hYmxlZCwgdGhlIGdvYWwJIwojIGlzIHRvIGdldCB0byB0aGUgaGFuZGxlciBzcGVjaWZpZWQgYXQgX3JlYWxfaW5leCgpLiBCdXQsIG9uIHRoZSAwNjAsCSMKIyBmb3Igb3BjbGFzcyB6ZXJvIGFuZCB0d28gaW5zdHJ1Y3Rpb24gdGFraW5nIHRoaXMgZXhjZXB0aW9uLCB0aGUJIwojIGhhcmR3YXJlIGRvZXNuJ3Qgc3RvcmUgdGhlIGNvcnJlY3QgcmVzdWx0IHRvIHRoZSBkZXN0aW5hdGlvbiBGUAkjCiMgcmVnaXN0ZXIgYXMgZGlkIHRoZSAnMDQwIGFuZCAnODgxLzIuIFRoaXMgaGFuZGxlciBtdXN0IGVtdWxhdGUgdGhlCSMKIyBpbnN0cnVjdGlvbiBpbiBvcmRlciB0byBnZXQgdGhpcyB2YWx1ZSBhbmQgdGhlbiBzdG9yZSBpdCB0byB0aGUJIwojIGNvcnJlY3QgcmVnaXN0ZXIgYmVmb3JlIGNhbGxpbmcgX3JlYWxfaW5leCgpLgkJCQkjCiMJRm9yIG9wY2xhc3MgMyBpbnN0cnVjdGlvbnMsIHRoZSAwNjAgZG9lc24ndCBzdG9yZSB0aGUgZGVmYXVsdAkjCiMgaW5leGFjdCByZXN1bHQgb3V0IHRvIG1lbW9yeSBvciBkYXRhIHJlZ2lzdGVyIGZpbGUgYXMgaXQgc2hvdWxkLgkjCiMgVGhpcyBjb2RlIG11c3QgZW11bGF0ZSB0aGUgbW92ZSBvdXQgYnkgY2FsbGluZyBmb3V0KCkgYmVmb3JlIGZpbmFsbHkJIwojIGV4aXRpbmcgdGhyb3VnaCBfcmVhbF9pbmV4KCkuCQkJCQkJIwojCQkJCQkJCQkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoJZ2xvYmFsCQlfZnBzcF9pbmV4Cl9mcHNwX2luZXg6CgoJbGluay53CQklYTYsJi1MT0NBTF9TSVpFCSMgaW5pdCBzdGFjayBmcmFtZQoKCWZzYXZlCQlGUF9TUkMoJWE2KQkJIyBncmFiIHRoZSAiYnVzeSIgZnJhbWUKCgltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCglmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncwoJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQUkVHUyglYTYpCSMgc2F2ZSBmcDAtZnAxIG9uIHN0YWNrCgojIHRoZSBGUElBUiBob2xkcyB0aGUgImN1cnJlbnQgUEMiIG9mIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbgoJbW92LmwJCVVTRVJfRlBJQVIoJWE2KSxFWENfRVhUV1BUUiglYTYpCgoJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgoJYWRkcS5sCQkmMHg0LEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgoJYnNyLmwJCV9pbWVtX3JlYWRfbG9uZwkJIyBmZXRjaCB0aGUgaW5zdHJ1Y3Rpb24gd29yZHMKCW1vdi5sCQklZDAsRVhDX09QV09SRCglYTYpCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCglidHN0CQkmMTMsJWQwCQkJIyBpcyBpbnN0ciBhbiBmbW92ZSBvdXQ/CglibmUudwkJZmluZXhfb3V0CQkjIGZtb3ZlIG91dAoKCiMgdGhlIGhhcmR3YXJlLCBmb3IgImZhYnMiIGFuZCAiZm5lZyIgdy8gYSBsb25nIHNvdXJjZSBmb3JtYXQsIHB1dHMgdGhlCiMgbG9uZ3dvcmQgaW50ZWdlciBkaXJlY3RseSBpbnRvIHRoZSB1cHBlciBsb25nd29yZCBvZiB0aGUgbWFudGlzc2EgYWxvbmcKIyB3LyBhbiBleHBvbmVudCB2YWx1ZSBvZiAweDQwMWUuIHdlIGNvbnZlcnQgdGhpcyB0byBleHRlbmRlZCBwcmVjaXNpb24gaGVyZS4KCWJmZXh0dQkJJWQweyYxOTomM30sJWQwCQkjIGZldGNoIGluc3RyIHNpemUKCWJuZS5iCQlmaW5leF9jb250CQkjIGluc3RyIHNpemUgaXMgbm90IGxvbmcKCWNtcGkudwkJRlBfU1JDX0VYKCVhNiksJjB4NDAxZQkjIGlzIGV4cG9uZW50IDB4NDAxZT8KCWJuZS5iCQlmaW5leF9jb250CQkjIG5vCglmbW92LmwJCSYweDAsJWZwY3IKCWZtb3YubAkJRlBfU1JDX0hJKCVhNiksJWZwMAkjIGxvYWQgaW50ZWdlciBzcmMKCWZtb3YueAkJJWZwMCxGUF9TUkMoJWE2KQkjIHN0b3JlIGludGVnZXIgYXMgZXh0ZW5kZWQgcHJlY2lzaW9uCgltb3YudwkJJjB4ZTAwMSwweDIrRlBfU1JDKCVhNikKCmZpbmV4X2NvbnQ6CglsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzOiBwdHIgdG8gc3JjIG9wCglic3IubAkJZml4X3NrZXdlZF9vcHMJCSMgZml4IHNyYyBvcAoKIyBIZXJlLCB3ZSB6ZXJvIHRoZSBjY29kZSBhbmQgZXhjZXB0aW9uIGJ5dGUgZmllbGQgc2luY2Ugd2UncmUgZ29pbmcgdG8KIyBlbXVsYXRlIHRoZSB3aG9sZSBpbnN0cnVjdGlvbi4gTm90aWNlLCB0aG91Z2gsIHRoYXQgd2UgZG9uJ3Qga2lsbCB0aGUKIyBJTkVYMSBiaXQuIFRoaXMgaXMgYmVjYXVzZSBhIHBhY2tlZCBvcCBoYXMgbG9uZyBzaW5jZSBiZWVuIGNvbnZlcnRlZAojIHRvIGV4dGVuZGVkIGJlZm9yZSBhcnJpdmluZyBoZXJlLiBUaGVyZWZvcmUsIHdlIG5lZWQgdG8gcmV0YWluIHRoZQojIElORVgxIGJpdCBmcm9tIHdoZW4gdGhlIG9wZXJhbmQgd2FzIGZpcnN0IGNvbnZlcnRlZC4KCWFuZGkubAkJJjB4MDBmZjAxZmYsVVNFUl9GUFNSKCVhNikgIyB6ZXJvIGFsbCBidXQgYWNjdXJlZCBmaWVsZAoKCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIGN1cnJlbnQgY29udHJvbCByZWdzCglmbW92LmwJCSYweDAsJWZwc3IKCgliZmV4dHUJCUVYQ19FWFRXT1JEKCVhNil7JjA6JjZ9LCVkMSAjIGV4dHJhY3QgdXBwZXIgNiBvZiBjbWRyZWcKCWNtcGkuYgkJJWQxLCYweDE3CQkjIGlzIG9wIGFuIGZtb3ZlY3I/CgliZXEudwkJZmluZXhfZm1vdmNyCQkjIHllcwoKCWxlYQkJRlBfU1JDKCVhNiksJWEwCQkjIHBhc3M6IHB0ciB0byBzcmMgb3AKCWJzci5sCQlzZXRfdGFnX3gJCSMgdGFnIHRoZSBvcGVyYW5kIHR5cGUKCW1vdi5iCQklZDAsU1RBRyglYTYpCQkjIG1heWJlIE5PUk0sREVOT1JNCgojIGJpdHMgZm91ciBhbmQgZml2ZSBvZiB0aGUgZnAgZXh0ZW5zaW9uIHdvcmQgc2VwYXJhdGUgdGhlIG1vbmFkaWMgYW5kIGR5YWRpYwojIG9wZXJhdGlvbnMgdGhhdCBjYW4gcGFzcyB0aHJvdWdoIGZwc3BfaW5leCgpLiByZW1lbWJlciB0aGF0IGZjbXAgYW5kIGZ0c3QKIyB3aWxsIG5ldmVyIHRha2UgdGhpcyBleGNlcHRpb24sIGJ1dCBmc2luY29zIHdpbGwuCglidHN0CQkmMHg1LDErRVhDX0NNRFJFRyglYTYpCSMgaXMgb3BlcmF0aW9uIG1vbmFkaWMgb3IgZHlhZGljPwoJYmVxLmIJCWZpbmV4X2V4dHJhY3QJCSMgbW9uYWRpYwoKCWJ0c3QJCSYweDQsMStFWENfQ01EUkVHKCVhNikJIyBpcyBvcGVyYXRpb24gYW4gZnNpbmNvcz8KCWJuZS5iCQlmaW5leF9leHRyYWN0CQkjIHllcwoKCWJmZXh0dQkJRVhDX0NNRFJFRyglYTYpeyY2OiYzfSwlZDAgIyBkeWFkaWM7IGxvYWQgZHN0IHJlZwoJYnNyLmwJCWxvYWRfZnBuMgkJIyBsb2FkIGRzdCBpbnRvIEZQX0RTVAoKCWxlYQkJRlBfRFNUKCVhNiksJWEwCQkjIHBhc3M6IHB0ciB0byBkc3Qgb3AKCWJzci5sCQlzZXRfdGFnX3gJCSMgdGFnIHRoZSBvcGVyYW5kIHR5cGUKCWNtcGkuYgkJJWQwLCZVTk5PUk0JCSMgaXMgb3BlcmFuZCBhbiBVTk5PUk0/CglibmUuYgkJZmluZXhfb3AyX2RvbmUJCSMgbm8KCWJzci5sCQl1bm5vcm1fZml4CQkjIHllczsgY29udmVydCB0byBOT1JNLERFTk9STSxvciBaRVJPCmZpbmV4X29wMl9kb25lOgoJbW92LmIJCSVkMCxEVEFHKCVhNikJCSMgc2F2ZSBkc3Qgb3B0eXBlIHRhZwoKZmluZXhfZXh0cmFjdDoKCWNsci5sCQklZDAKCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBwcmVjL21vZGUKCgltb3YuYgkJMStFWENfQ01EUkVHKCVhNiksJWQxCglhbmRpLncJCSYweDAwN2YsJWQxCQkjIGV4dHJhY3QgZXh0ZW5zaW9uCgoJbGVhCQlGUF9TUkMoJWE2KSwlYTAKCWxlYQkJRlBfRFNUKCVhNiksJWExCgoJbW92LmwJCSh0YmxfdW5zdXBwLmwsJXBjLCVkMS53KjQpLCVkMSAjIGZldGNoIHJvdXRpbmUgYWRkcgoJanNyCQkodGJsX3Vuc3VwcC5sLCVwYywlZDEubCoxKQoKIyB0aGUgb3BlcmF0aW9uIGhhcyBiZWVuIGVtdWxhdGVkLiB0aGUgcmVzdWx0IGlzIGluIGZwMC4KZmluZXhfc2F2ZToKCWJmZXh0dQkJRVhDX0NNRFJFRyglYTYpeyY2OiYzfSwlZDAKCWJzci5sCQlzdG9yZV9mcHJlZwoKZmluZXhfZXhpdDoKCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMQoJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKCglmcmVzdG9yZQlGUF9TUkMoJWE2KQoKCXVubGsJCSVhNgoJYnJhLmwJCV9yZWFsX2luZXgKCmZpbmV4X2Ztb3ZjcjoKCWNsci5sCQklZDAKCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBwcmVjLG1vZGUKCW1vdi5iCQkxK0VYQ19DTURSRUcoJWE2KSwlZDEKCWFuZGkubAkJJjB4MDAwMDAwN2YsJWQxCQkjIHBhc3Mgcm9tIG9mZnNldAoJYnNyLmwJCXNtb3ZjcgoJYnJhLmIJCWZpbmV4X3NhdmUKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIwojIHRoZSBoYXJkd2FyZSBkb2VzIG5vdCBzYXZlIHRoZSBkZWZhdWx0IHJlc3VsdCB0byBtZW1vcnkgb24gZW5hYmxlZAojIGluZXhhY3QgZXhjZXB0aW9ucy4gd2UgZG8gdGhpcyBoZXJlIGJlZm9yZSBwYXNzaW5nIGNvbnRyb2wgdG8KIyB0aGUgdXNlciBpbmV4YWN0IGhhbmRsZXIuCiMKIyBieXRlLCB3b3JkLCBhbmQgbG9uZyBkZXN0aW5hdGlvbiBmb3JtYXQgb3BlcmF0aW9ucyBjYW4gcGFzcwojIHRocm91Z2ggaGVyZS4gc28gY2FuIGRvdWJsZSBhbmQgc2luZ2xlIHByZWNpc2lvbi4KIyBhbHRob3VnaCBwYWNrZWQgb3BjbGFzcyB0aHJlZSBvcGVyYXRpb25zIGNhbiB0YWtlIGluZXhhY3QKIyBleGNlcHRpb25zLCB0aGV5IHdvbid0IHBhc3MgdGhyb3VnaCBoZXJlIHNpbmNlIHRoZXkgYXJlIGNhdWdodAojIGZpcnN0IGJ5IHRoZSB1bnN1cHBvcnRlZCBkYXRhIGZvcm1hdCBleGNlcHRpb24gaGFuZGxlci4gdGhhdCBoYW5kbGVyCiMgc2VuZHMgdGhlbSBkaXJlY3RseSB0byBfcmVhbF9pbmV4KCkgaWYgbmVjZXNzYXJ5LgojCmZpbmV4X291dDoKCgltb3YuYgkJJk5PUk0sU1RBRyglYTYpCQkjIHNyYyBpcyBhIE5PUk0KCgljbHIubAkJJWQwCgltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgcHJlYyxtb2RlCgoJYW5kaS5sCQkmMHhmZmZmMDBmZixVU0VSX0ZQU1IoJWE2KSAjIHplcm8gZXhjZXB0aW9uIGZpZWxkCgoJbGVhCQlGUF9TUkMoJWE2KSwlYTAJCSMgcGFzcyBwdHIgdG8gc3JjIG9wZXJhbmQKCglic3IubAkJZm91dAkJCSMgc3RvcmUgdGhlIGRlZmF1bHQgcmVzdWx0CgoJYnJhLmIJCWZpbmV4X2V4aXQKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCV9mcHNwX2R6KCk6IDA2MEZQU1AgZW50cnkgcG9pbnQgZm9yIEZQIERaIGV4Y2VwdGlvbi4JCSMKIwkJCQkJCQkJCSMKIwlUaGlzIGhhbmRsZXIgc2hvdWxkIGJlIHRoZSBmaXJzdCBjb2RlIGV4ZWN1dGVkIHVwb24gdGFraW5nCSMKIwl0aGUgRlAgRFogZXhjZXB0aW9uIGluIGFuIG9wZXJhdGluZyBzeXN0ZW0uCQkJIwojCQkJCQkJCQkJIwojIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJX2ltZW1fcmVhZF9sb25nKCkgLSByZWFkIGluc3RydWN0aW9uIGxvbmd3b3JkIGZyb20gbWVtb3J5CSMKIwlmaXhfc2tld2VkX29wcygpIC0gYWRqdXN0IGZzYXZlIG9wZXJhbmQJCQkJIwojCV9yZWFsX2R6KCkgLSAiY2FsbG91dCIgZXhpdCBwb2ludCBmcm9tIEZQIERaIGhhbmRsZXIJCSMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCS0gVGhlIHN5c3RlbSBzdGFjayBjb250YWlucyB0aGUgRlAgRFogZXhjZXB0aW9uIHN0YWNrLgkJIwojCS0gVGhlIGZzYXZlIGZyYW1lIGNvbnRhaW5zIHRoZSBzb3VyY2Ugb3BlcmFuZC4JCQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwktIFRoZSBzeXN0ZW0gc3RhY2sgY29udGFpbnMgdGhlIEZQIERaIGV4Y2VwdGlvbiBzdGFjay4JCSMKIwktIFRoZSBmc2F2ZSBmcmFtZSBjb250YWlucyB0aGUgYWRqdXN0ZWQgc291cmNlIG9wZXJhbmQuCQkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlJbiBhIHN5c3RlbSB3aGVyZSB0aGUgRFogZXhjZXB0aW9uIGlzIGVuYWJsZWQsIHRoZSBnb2FsIGlzIHRvCSMKIyBnZXQgdG8gdGhlIGhhbmRsZXIgc3BlY2lmaWVkIGF0IF9yZWFsX2R6KCkuIEJ1dCwgb24gdGhlIDA2MCwgd2hlbiB0aGUJIwojIGV4Y2VwdGlvbiBpcyB0YWtlbiwgdGhlIGlucHV0IG9wZXJhbmQgaW4gdGhlIGZzYXZlIHN0YXRlIGZyYW1lIG1heQkjCiMgYmUgaW5jb3JyZWN0IGZvciBzb21lIGNhc2VzIGFuZCBuZWVkIHRvIGJlIGFkanVzdGVkLiBTbywgdGhpcyBwYWNrYWdlCSMKIyBhZGp1c3RzIHRoZSBvcGVyYW5kIHVzaW5nIGZpeF9za2V3ZWRfb3BzKCkgYW5kIHRoZW4gYnJhbmNoZXMgdG8JIwojIF9yZWFsX2R6KCkuCQkJCQkJCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCglnbG9iYWwJCV9mcHNwX2R6Cl9mcHNwX2R6OgoKCWxpbmsudwkJJWE2LCYtTE9DQUxfU0laRQkjIGluaXQgc3RhY2sgZnJhbWUKCglmc2F2ZQkJRlBfU1JDKCVhNikJCSMgZ3JhYiB0aGUgImJ1c3kiIGZyYW1lCgoJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQoJZm1vdm0ubAkJJWZwY3IsJWZwc3IsJWZwaWFyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKCWZtb3ZtLngJCSYweGMwLEVYQ19GUFJFR1MoJWE2KQkjIHNhdmUgZnAwLWZwMSBvbiBzdGFjawoKIyB0aGUgRlBJQVIgaG9sZHMgdGhlICJjdXJyZW50IFBDIiBvZiB0aGUgZmF1bHRpbmcgaW5zdHJ1Y3Rpb24KCW1vdi5sCQlVU0VSX0ZQSUFSKCVhNiksRVhDX0VYVFdQVFIoJWE2KQoKCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKCWJzci5sCQlfaW1lbV9yZWFkX2xvbmcJCSMgZmV0Y2ggdGhlIGluc3RydWN0aW9uIHdvcmRzCgltb3YubAkJJWQwLEVYQ19PUFdPUkQoJWE2KQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoKIyBoZXJlLCB3ZSBzaW1wbHkgc2VlIGlmIHRoZSBvcGVyYW5kIGluIHRoZSBmc2F2ZSBmcmFtZSBuZWVkcyB0byBiZSAidW5za2V3ZWQiLgojIHRoaXMgd291bGQgYmUgdGhlIGNhc2UgZm9yIG9wY2xhc3MgdHdvIG9wZXJhdGlvbnMgd2l0aCBhIHNvdXJjZSB6ZXJvCiMgaW4gdGhlIHNnbCBvciBkYmwgZm9ybWF0LgoJbGVhCQlGUF9TUkMoJWE2KSwlYTAJCSMgcGFzczogcHRyIHRvIHNyYyBvcAoJYnNyLmwJCWZpeF9za2V3ZWRfb3BzCQkjIGZpeCBzcmMgb3AKCmZkel9leGl0OgoJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAtZnAxCglmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncwoJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQoKCWZyZXN0b3JlCUZQX1NSQyglYTYpCgoJdW5sawkJJWE2CglicmEubAkJX3JlYWxfZHoKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCV9mcHNwX2ZsaW5lKCk6IDA2MEZQU1AgZW50cnkgcG9pbnQgZm9yICJMaW5lIEYgZW11bGF0b3IiIGV4Yy4JIwojCQkJCQkJCQkJIwojCVRoaXMgaGFuZGxlciBzaG91bGQgYmUgdGhlIGZpcnN0IGNvZGUgZXhlY3V0ZWQgdXBvbiB0YWtpbmcgdGhlCSMKIwkiTGluZSBGIEVtdWxhdG9yIiBleGNlcHRpb24gaW4gYW4gb3BlcmF0aW5nIHN5c3RlbS4JCSMKIwkJCQkJCQkJCSMKIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCV9mcHNwX3VuaW1wKCkgLSBoYW5kbGUgIkZQIFVuaW1wbGVtZW50ZWQiIGV4Y2VwdGlvbnMJCSMKIwlfcmVhbF9mcHVfZGlzYWJsZWQoKSAtIGhhbmRsZSAiRlBVIGRpc2FibGVkIiBleGNlcHRpb25zCQkjCiMJX3JlYWxfZmxpbmUoKSAtIGhhbmRsZSAiRkxJTkUiIGV4Y2VwdGlvbnMJCQkjCiMJX2ltZW1fcmVhZF9sb25nKCkgLSByZWFkIGluc3RydWN0aW9uIGxvbmd3b3JkCQkJIwojCQkJCQkJCQkJIwojIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJLSBUaGUgc3lzdGVtIHN0YWNrIGNvbnRhaW5zIGEgIkxpbmUgRiBFbXVsYXRvciIgZXhjZXB0aW9uCSMKIwkgIHN0YWNrIGZyYW1lLgkJCQkJCQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwktIFRoZSBzeXN0ZW0gc3RhY2sgaXMgdW5jaGFuZ2VkCQkJCQkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlXaGVuIGEgIkxpbmUgRiBFbXVsYXRvciIgZXhjZXB0aW9uIG9jY3VycywgdGhlcmUgYXJlIDMgcG9zc2libGUJIwojIGV4Y2VwdGlvbiB0eXBlcywgZGVub3RlZCBieSB0aGUgZXhjZXB0aW9uIHN0YWNrIGZyYW1lIGZvcm1hdCBudW1iZXI6CSMKIwkoMSkgRlBVIHVuaW1wbGVtZW50ZWQgaW5zdHJ1Y3Rpb24gKDYgd29yZCBzdGFjayBmcmFtZSkJCSMKIwkoMikgRlBVIGRpc2FibGVkICg4IHdvcmQgc3RhY2sgZnJhbWUpCQkJCSMKIwkoMykgTGluZSBGICg0IHdvcmQgc3RhY2sgZnJhbWUpCQkJCQkjCiMJCQkJCQkJCQkjCiMJVGhpcyBtb2R1bGUgZGV0ZXJtaW5lcyB3aGljaCBhbmQgZm9ya3MgdGhlIGZsb3cgb2ZmIHRvIHRoZQkjCiMgYXBwcm9wcmlhdGUgImNhbGxvdXQiIChmb3IgImRpc2FibGVkIiBhbmQgIkxpbmUgRiIpIG9yIHRvIHRoZQkJIwojIGNvcnJlY3QgZW11bGF0aW9uIGNvZGUgKGZvciAiRlBVIHVuaW1wbGVtZW50ZWQiKS4JCQkjCiMJVGhpcyBjb2RlIGFsc28gbXVzdCBjaGVjayBmb3IgImZtb3ZlY3IiIGluc3RydWN0aW9ucyB3LyBhCSMKIyBub24temVybyA8ZWE+IGZpZWxkLiBUaGVzZSBtYXkgZ2V0IGZsYWdnZWQgYXMgIkxpbmUgRiIgYnV0IHNob3VsZAkjCiMgcmVhbGx5IGJlIGZsYWdnZWQgYXMgIkZQVSBVbmltcGxlbWVudGVkIi4gKFRoaXMgaXMgYSAiZmVhdHVyZSIgb24JIwojIHRoZSAnMDYwLgkJCQkJCQkJIwojCQkJCQkJCQkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoJZ2xvYmFsCQlfZnBzcF9mbGluZQpfZnBzcF9mbGluZToKCiMgY2hlY2sgdG8gc2VlIGlmIHRoaXMgZXhjZXB0aW9uIGlzIGEgIkZQIFVuaW1wbGVtZW50ZWQgSW5zdHJ1Y3Rpb24iCiMgZXhjZXB0aW9uLiBpZiBzbywgYnJhbmNoIGRpcmVjdGx5IHRvIHRoYXQgaGFuZGxlcidzIGVudHJ5IHBvaW50LgoJY21waS53CQkweDYoJXNwKSwmMHgyMDJjCgliZXEubAkJX2Zwc3BfdW5pbXAKCiMgY2hlY2sgdG8gc2VlIGlmIHRoZSBGUFUgaXMgZGlzYWJsZWQuIGlmIHNvLCBqdW1wIHRvIHRoZSBPUyBlbnRyeQojIHBvaW50IGZvciB0aGF0IGNvbmRpdGlvbi4KCWNtcGkudwkJMHg2KCVzcCksJjB4NDAyYwoJYmVxLmwJCV9yZWFsX2ZwdV9kaXNhYmxlZAoKIyB0aGUgZXhjZXB0aW9uIHdhcyBhbiAiRi1MaW5lIElsbGVnYWwiIGV4Y2VwdGlvbi4gd2UgY2hlY2sgdG8gc2VlCiMgaWYgdGhlIEYtTGluZSBpbnN0cnVjdGlvbiBpcyBhbiAiZm1vdmVjciIgdy8gYSBub24temVybyA8ZWE+LiBpZgojIHNvLCBjb252ZXJ0IHRoZSBGLUxpbmUgZXhjZXB0aW9uIHN0YWNrIGZyYW1lIHRvIGFuIEZQIFVuaW1wbGVtZW50ZWQKIyBJbnN0cnVjdGlvbiBleGNlcHRpb24gc3RhY2sgZnJhbWUgZWxzZSBicmFuY2ggdG8gdGhlIE9TIGVudHJ5CiMgcG9pbnQgZm9yIHRoZSBGLUxpbmUgZXhjZXB0aW9uIGhhbmRsZXIuCglsaW5rLncJCSVhNiwmLUxPQ0FMX1NJWkUJIyBpbml0IHN0YWNrIGZyYW1lCgoJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQoKCW1vdi5sCQlFWENfUEMoJWE2KSxFWENfRVhUV1BUUiglYTYpCgltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCglhZGRxLmwJCSYweDQsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCglic3IubAkJX2ltZW1fcmVhZF9sb25nCQkjIGZldGNoIGluc3RydWN0aW9uIHdvcmRzCgoJYmZleHR1CQklZDB7JjA6JjEwfSwlZDEJCSMgaXMgaXQgYW4gZm1vdmVjcj8KCWNtcGkudwkJJWQxLCYweDAzYzgKCWJuZS5iCQlmbGluZV9mbGluZQkJIyBubwoKCWJmZXh0dQkJJWQweyYxNjomNn0sJWQxCQkjIGlzIGl0IGFuIGZtb3ZlY3I/CgljbXBpLmIJCSVkMSwmMHgxNwoJYm5lLmIJCWZsaW5lX2ZsaW5lCQkjIG5vCgojIGl0J3MgYW4gZm1vdmVjciB3LyBhIG5vbi16ZXJvIDxlYT4gdGhhdCBoYXMgZW50ZXJlZCB0aHJvdWdoCiMgdGhlIEYtTGluZSBJbGxlZ2FsIGV4Y2VwdGlvbi4KIyBzbywgd2UgbmVlZCB0byBjb252ZXJ0IHRoZSBGLUxpbmUgZXhjZXB0aW9uIHN0YWNrIGZyYW1lIGludG8gYW4KIyBGUCBVbmltcGxlbWVudGVkIEluc3RydWN0aW9uIHN0YWNrIGZyYW1lIGFuZCBqdW1wIHRvIHRoYXQgZW50cnkKIyBwb2ludC4KIwojIGJ1dCwgaWYgdGhlIEZQVSBpcyBkaXNhYmxlZCwgdGhlbiB3ZSBuZWVkIHRvIGp1bXAgdG8gdGhlIEZQVSBkaWFibGVkCiMgZW50cnkgcG9pbnQuCgltb3ZjCQklcGNyLCVkMAoJYnRzdAkJJjB4MSwlZDAKCWJlcS5iCQlmbGluZV9mbW92Y3IKCgltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCgoJdW5sawkJJWE2CgoJc3ViLmwJCSYweDgsJXNwCQkjIG1ha2Ugcm9vbSBmb3IgIk5leHQgUEMiLCA8ZWE+Cgltb3YudwkJMHg4KCVzcCksKCVzcCkKCW1vdi5sCQkweGEoJXNwKSwweDIoJXNwKQkjIG1vdmUgIkN1cnJlbnQgUEMiCgltb3YudwkJJjB4NDAyYywweDYoJXNwKQoJbW92LmwJCTB4Miglc3ApLDB4Yyglc3ApCglhZGRxLmwJCSYweDQsMHgyKCVzcCkJCSMgc2V0ICJOZXh0IFBDIgoKCWJyYS5sCQlfcmVhbF9mcHVfZGlzYWJsZWQKCmZsaW5lX2Ztb3ZjcjoKCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKCgl1bmxrCQklYTYKCglmbW92LmwJCTB4Miglc3ApLCVmcGlhcgkJIyBzZXQgY3VycmVudCBQQwoJYWRkcS5sCQkmMHg0LDB4Miglc3ApCQkjIHNldCBOZXh0IFBDCgoJbW92LmwJCSglc3ApLC0oJXNwKQoJbW92LmwJCTB4OCglc3ApLDB4NCglc3ApCgltb3YuYgkJJjB4MjAsMHg2KCVzcCkKCglicmEubAkJX2Zwc3BfdW5pbXAKCmZsaW5lX2ZsaW5lOgoJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQoKCXVubGsJCSVhNgoKCWJyYS5sCQlfcmVhbF9mbGluZQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJX2Zwc3BfdW5pbXAoKTogMDYwRlBTUCBlbnRyeSBwb2ludCBmb3IgRlAgIlVuaW1wbGVtZW50ZWQJIwojCQkgICAgICAgSW5zdHJ1Y3Rpb24iIGV4Y2VwdGlvbi4JCQkJIwojCQkJCQkJCQkJIwojCVRoaXMgaGFuZGxlciBzaG91bGQgYmUgdGhlIGZpcnN0IGNvZGUgZXhlY3V0ZWQgdXBvbiB0YWtpbmcgdGhlCSMKIwlGUCBVbmltcGxlbWVudGVkIEluc3RydWN0aW9uIGV4Y2VwdGlvbiBpbiBhbiBvcGVyYXRpbmcgc3lzdGVtLgkjCiMJCQkJCQkJCQkjCiMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlfaW1lbV9yZWFkX3t3b3JkLGxvbmd9KCkgLSByZWFkIGluc3RydWN0aW9uIHdvcmQvbG9uZ3dvcmQJIwojCWxvYWRfZm9wKCkgLSBsb2FkIHNyYy9kc3Qgb3BzIGZyb20gbWVtb3J5IGFuZC9vciBGUCByZWdmaWxlCSMKIwlzdG9yZV9mcHJlZygpIC0gc3RvcmUgb3BjbGFzcyAwIG9yIDIgcmVzdWx0IHRvIEZQIHJlZ2ZpbGUJIwojCXRibF90cmFucyAtIGFkZHIgb2YgdGFibGUgb2YgZW11bGF0aW9uIHJvdXRpbmVzIGZvciB0cm5zY25kbHMJIwojCV9yZWFsX2FjY2VzcygpIC0gImNhbGxvdXQiIGZvciBhY2Nlc3MgZXJyb3IgZXhjZXB0aW9uCQkjCiMJX2Zwc3BfZG9uZSgpIC0gImNhbGxvdXQiIGZvciBleGl0OyB3b3JrIGFsbCBkb25lCQkjCiMJX3JlYWxfdHJhY2UoKSAtICJjYWxsb3V0IiBmb3IgVHJhY2UgZW5hYmxlZCBleGNlcHRpb24JCSMKIwlzbW92Y3IoKSAtIGVtdWxhdGUgImZtb3ZlY3IiIGluc3RydWN0aW9uCQkJIwojCWZ1bmltcF9za2V3KCkgLSBhZGp1c3QgZnNhdmUgc3JjIG9wcyB0byAiaW5jb3JyZWN0IiB2YWx1ZQkjCiMJX2Z0cmFwY2MoKSAtIGVtdWxhdGUgYW4gImZ0cmFwY2MiIGluc3RydWN0aW9uCQkJIwojCV9mZGJjYygpIC0gZW11bGF0ZSBhbiAiZmRiY2MiIGluc3RydWN0aW9uCQkJIwojCV9mc2NjKCkgLSBlbXVsYXRlIGFuICJmc2NjIiBpbnN0cnVjdGlvbgkJCQkjCiMJX3JlYWxfdHJhcCgpIC0gImNhbGxvdXQiIGZvciBUcmFwIGV4Y2VwdGlvbgkJCSMKIwlfcmVhbF9ic3VuKCkgLSAiY2FsbG91dCIgZm9yIGVuYWJsZWQgQnN1biBleGNlcHRpb24JCSMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCS0gVGhlIHN5c3RlbSBzdGFjayBjb250YWlucyB0aGUgIlVuaW1wbGVtZW50ZWQgSW5zdHIiIHN0ayBmcmFtZQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlJZiBhY2Nlc3MgZXJyb3I6CQkJCQkJIwojCS0gVGhlIHN5c3RlbSBzdGFjayBpcyBjaGFuZ2VkIHRvIGFuIGFjY2VzcyBlcnJvciBzdGFjayBmcmFtZQkjCiMJSWYgVHJhY2UgZXhjZXB0aW9uIGVuYWJsZWQ6CQkJCQkjCiMJLSBUaGUgc3lzdGVtIHN0YWNrIGlzIGNoYW5nZWQgdG8gYSBUcmFjZSBleGNlcHRpb24gc3RhY2sgZnJhbWUJIwojCUVsc2U6IChub3JtYWwgY2FzZSkJCQkJCQkjCiMJLSBDb3JyZWN0IHJlc3VsdCBoYXMgYmVlbiBzdG9yZWQgYXMgYXBwcm9wcmlhdGUJCQkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlUaGVyZSBhcmUgdHdvIG1haW4gY2FzZXMgb2YgaW5zdHJ1Y3Rpb25zIHRoYXQgbWF5IGVudGVyIGhlcmUgdG8JIwojIGJlIGVtdWxhdGVkOiAoMSkgdGhlIEZQZ2VuIGluc3RydWN0aW9ucywgbW9zdCBvZiB3aGljaCB3ZXJlIGFsc28JIwojIHVuaW1wbGVtZW50ZWQgb24gdGhlIDA0MCwgYW5kICgyKSAiZnRyYXBjYyIsICJmc2NjIiwgYW5kICJmZGJjYyIuCSMKIwlGb3IgdGhlIGZpcnN0IHNldCwgdGhpcyBoYW5kbGVyIGNhbGxzIHRoZSByb3V0aW5lIGxvYWRfZm9wKCkJIwojIHRvIGxvYWQgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gKGZvciBkeWFkaWMpIG9wZXJhbmRzIHRvIGJlIHVzZWQJIwojIGZvciBpbnN0cnVjdGlvbiBlbXVsYXRpb24uIFRoZSBjb3JyZWN0IGVtdWxhdGlvbiByb3V0aW5lIGlzIHRoZW4JIwojIGNob3NlbiBieSBkZWNvZGluZyB0aGUgaW5zdHJ1Y3Rpb24gdHlwZSBhbmQgaW5kZXhpbmcgaW50byBhbgkJIwojIGVtdWxhdGlvbiBzdWJyb3V0aW5lIGluZGV4IHRhYmxlLiBBZnRlciBlbXVsYXRpb24gcmV0dXJucywgdGhpcwkjCiMgaGFuZGxlciBjaGVja3MgdG8gc2VlIGlmIGFuIGV4Y2VwdGlvbiBzaG91bGQgb2NjdXIgYXMgYSByZXN1bHQgb2YgdGhlICMKIyBGUCBpbnN0cnVjdGlvbiBlbXVsYXRpb24uIElmIHNvLCB0aGVuIGFuIEZQIGV4Y2VwdGlvbiBvZiB0aGUgY29ycmVjdAkjCiMgdHlwZSBpcyBpbnNlcnRlZCBpbnRvIHRoZSBGUFUgc3RhdGUgZnJhbWUgdXNpbmcgdGhlICJmcmVzdG9yZSIJIwojIGluc3RydWN0aW9uIGJlZm9yZSBleGl0aW5nIHRocm91Z2ggX2Zwc3BfZG9uZSgpLiBJbiBlaXRoZXIgdGhlCSMKIyBleGNlcHRpb25hbCBvciBub24tZXhjZXB0aW9uYWwgY2FzZXMsIHdlIG11c3QgY2hlY2sgdG8gc2VlIGlmIHRoZQkjCiMgVHJhY2UgZXhjZXB0aW9uIGlzIGVuYWJsZWQuIElmIHNvLCB0aGVuIHdlIG11c3QgY3JlYXRlIGEgVHJhY2UJIwojIGV4Y2VwdGlvbiBmcmFtZSBmcm9tIHRoZSBjdXJyZW50IGV4Y2VwdGlvbiBmcmFtZSBhbmQgZXhpdCB0aHJvdWdoCSMKIyBfcmVhbF90cmFjZSgpLgkJCQkJCQkjCiMJRm9yICJmZGJjYyIsICJmdHJhcGNjIiwgYW5kICJmc2NjIiwgdGhlIGVtdWxhdGlvbiBzdWJyb3V0aW5lcwkjCiMgX2ZkYmNjKCksIF9mdHJhcGNjKCksIGFuZCBfZnNjYygpIHJlc3BlY3RpdmVseSBhcmUgdXNlZC4gQWxsIHRocmVlCSMKIyBtYXkgZmxhZyB0aGF0IGEgQlNVTiBleGNlcHRpb24gc2hvdWxkIGJlIHRha2VuLiBJZiBzbywgdGhlbiB0aGUJIwojIGN1cnJlbnQgZXhjZXB0aW9uIHN0YWNrIGZyYW1lIGlzIGNvbnZlcnRlZCBpbnRvIGEgQlNVTiBleGNlcHRpb24JIwojIHN0YWNrIGZyYW1lIGFuZCBhbiBleGl0IGlzIG1hZGUgdGhyb3VnaCBfcmVhbF9ic3VuKCkuIElmIHRoZQkJIwojIGluc3RydWN0aW9uIHdhcyAiZnRyYXBjYyIgYW5kIGEgVHJhcCBleGNlcHRpb24gc2hvdWxkIHJlc3VsdCwgYSBUcmFwCSMKIyBleGNlcHRpb24gc3RhY2sgZnJhbWUgaXMgY3JlYXRlZCBmcm9tIHRoZSBjdXJyZW50IGZyYW1lIGFuZCBhbiBleGl0CSMKIyBpcyBtYWRlIHRocm91Z2ggX3JlYWxfdHJhcCgpLiBJZiBhIFRyYWNlIGV4Y2VwdGlvbiBpcyBwZW5kaW5nLCB0aGVuCSMKIyBhIFRyYWNlIGV4Y2VwdGlvbiBmcmFtZSBpcyBjcmVhdGVkIGZyb20gdGhlIGN1cnJlbnQgZnJhbWUgYW5kIGEganVtcAkjCiMgaXMgbWFkZSB0byBfcmVhbF90cmFjZSgpLiBGaW5hbGx5LCBpZiBub25lIG9mIHRoZXNlIGNvbmRpdGlvbnMgZXhpc3QsCSMKIyB0aGVuIHRoZSBoYW5kbGVyIGV4aXRzIHRob3VnaCB0aGUgY2FsbG91dCBfZnBzcF9kb25lKCkuCQkjCiMJCQkJCQkJCQkjCiMJSW4gYW55IG9mIHRoZSBhYm92ZSBzY2VuYXJpb3MsIGlmIGEgX21lbV9yZWFkKCkgb3IgX21lbV93cml0ZSgpCSMKIyAiY2FsbG91dCIgcmV0dXJucyBhIGZhaWxpbmcgdmFsdWUsIHRoZW4gYW4gYWNjZXNzIGVycm9yIHN0YWNrIGZyYW1lCSMKIyBpcyBjcmVhdGVkIGZyb20gdGhlIGN1cnJlbnQgc3RhY2sgZnJhbWUgYW5kIGFuIGV4aXQgaXMgbWFkZSB0aHJvdWdoCSMKIyBfcmVhbF9hY2Nlc3MoKS4JCQkJCQkJIwojCQkJCQkJCQkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgojCiMgRlAgVU5JTVBMRU1FTlRFRCBJTlNUUlVDVElPTiBTVEFDSyBGUkFNRToKIwojCSoqKioqKioqKioqKioqKioqCiMJKgkJKiA9PiA8ZWE+IG9mIGZwIHVuaW1wIGluc3RyLgojCS0gICAgICBFQQktCiMJKgkJKgojCSoqKioqKioqKioqKioqKioqCiMJKiAweDIgKiAgMHgwMmMJKiA9PiBmcmFtZSBmb3JtYXQgYW5kIHZlY3RvciBvZmZzZXQodmVjdG9yICMxMSkKIwkqKioqKioqKioqKioqKioqKgojCSoJCSoKIwktICAgIE5leHQgUEMJLSA9PiBQQyBvZiBpbnN0ciB0byBleGVjdXRlIGFmdGVyIGV4YyBoYW5kbGluZwojCSoJCSoKIwkqKioqKioqKioqKioqKioqKgojCSogICAgICBTUgkqID0+IFNSIGF0IHRoZSB0aW1lIHRoZSBleGNlcHRpb24gd2FzIHRha2VuCiMJKioqKioqKioqKioqKioqKioKIwojIE5vdGU6IHRoZSAhTlVMTCBiaXQgZG9lcyBub3QgZ2V0IHNldCBpbiB0aGUgZnNhdmUgZnJhbWUgd2hlbiB0aGUKIyBtYWNoaW5lIGVuY291bnRlcnMgYW4gZnAgdW5pbXAgZXhjZXB0aW9uLiBUaGVyZWZvcmUsIGl0IG11c3QgYmUgc2V0CiMgYmVmb3JlIGxlYXZpbmcgdGhpcyBoYW5kbGVyLgojCglnbG9iYWwJCV9mcHNwX3VuaW1wCl9mcHNwX3VuaW1wOgoKCWxpbmsudwkJJWE2LCYtTE9DQUxfU0laRQkjIGluaXQgc3RhY2sgZnJhbWUKCgltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCglmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncwoJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQUkVHUyglYTYpCSMgc2F2ZSBmcDAtZnAxCgoJYnRzdAkJJjB4NSxFWENfU1IoJWE2KQkjIHVzZXIgbW9kZSBleGNlcHRpb24/CglibmUuYgkJZnVuaW1wX3MJCSMgbm87IHN1cGVydmlzb3IgbW9kZQoKIyBzYXZlIHRoZSB2YWx1ZSBvZiB0aGUgdXNlciBzdGFjayBwb2ludGVyIG9udG8gdGhlIHN0YWNrIGZyYW1lCmZ1bmltcF91OgoJbW92LmwJCSV1c3AsJWEwCQkjIGZldGNoIHVzZXIgc3RhY2sgcG9pbnRlcgoJbW92LmwJCSVhMCxFWENfQTcoJWE2KQkJIyBzdG9yZSBpbiBzdGFjayBmcmFtZQoJYnJhLmIJCWZ1bmltcF9jb250CgojIHN0b3JlIHRoZSB2YWx1ZSBvZiB0aGUgc3VwZXJ2aXNvciBzdGFjayBwb2ludGVyIEJFRk9SRSB0aGUgZXhjIG9jY3VycmVkLgojIG9sZF9zcCBpcyBhZGRyZXNzIGp1c3QgYWJvdmUgc3RhY2tlZCBlZmZlY3RpdmUgYWRkcmVzcy4KZnVuaW1wX3M6CglsZWEJCTQrRVhDX0VBKCVhNiksJWEwCSMgbG9hZCBvbGQgYTcnCgltb3YubAkJJWEwLEVYQ19BNyglYTYpCQkjIHN0b3JlIGE3JwoJbW92LmwJCSVhMCxPTERfQTcoJWE2KQkJIyBtYWtlIGEgY29weQoKZnVuaW1wX2NvbnQ6CgojIHRoZSBGUElBUiBob2xkcyB0aGUgImN1cnJlbnQgUEMiIG9mIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbi4KCW1vdi5sCQlVU0VSX0ZQSUFSKCVhNiksRVhDX0VYVFdQVFIoJWE2KQoKCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKCWJzci5sCQlfaW1lbV9yZWFkX2xvbmcJCSMgZmV0Y2ggdGhlIGluc3RydWN0aW9uIHdvcmRzCgltb3YubAkJJWQwLEVYQ19PUFdPUkQoJWE2KQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCglmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgoKCWNsci5iCQlTUENPTkRfRkxHKCVhNikJCSMgY2xlYXIgInNwZWNpYWwgY2FzZSIgZmxhZwoKIyBEaXZpZGUgdGhlIGZwIGluc3RydWN0aW9ucyBpbnRvIDggdHlwZXMgYmFzZWQgb24gdGhlIFRZUEUgZmllbGQgaW4KIyBiaXRzIDYtOCBvZiB0aGUgb3B3b3JkKGNsYXNzZXMgNiw3IGFyZSB1bmRlZmluZWQpLgojIChmb3IgdGhlICcwNjAsIG9ubHkgdHdvIHR5cGVzICBjYW4gdGFrZSB0aGlzIGV4Y2VwdGlvbikKIwliZnRzdAkJJWQweyY3OiYzfQkJIyB0ZXN0IFRZUEUKCWJ0c3QJCSYyMiwlZDAJCQkjIHR5cGUgMCBvciAxID8KCWJuZS53CQlmdW5pbXBfbWlzYwkJIyB0eXBlIDEKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgVFlQRSA9PSAwOiBHZW5lcmFsIGluc3RydWN0aW9ucwkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmZ1bmltcF9nZW46CgoJY2xyLmIJCVNUT1JFX0ZMRyglYTYpCQkjIGNsZWFyICJzdG9yZSByZXN1bHQiIGZsYWcKCiMgY2xlYXIgdGhlIGNjb2RlIGJ5dGUgYW5kIGV4Y2VwdGlvbiBzdGF0dXMgYnl0ZQoJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQoKCWJmZXh0dQkJJWQweyYxNjomNn0sJWQxCQkjIGV4dHJhY3QgdXBwZXIgNiBvZiBjbWRyZWcKCWNtcGkuYgkJJWQxLCYweDE3CQkjIGlzIG9wIGFuIGZtb3ZlY3I/CgliZXEudwkJZnVuaW1wX2Ztb3ZjcgkJIyB5ZXMKCmZ1bmltcF9nZW5fb3A6Cglic3IubAkJX2xvYWRfZm9wCQkjIGxvYWQKCgljbHIubAkJJWQwCgltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgZmV0Y2ggcm5kIG1vZGUKCgltb3YuYgkJMStFWENfQ01EUkVHKCVhNiksJWQxCglhbmRpLncJCSYweDAwM2YsJWQxCQkjIGV4dHJhY3QgZXh0ZW5zaW9uIGJpdHMKCWxzbC53CQkmMHgzLCVkMQkJIyBzaGlmdCByaWdodCAzIGJpdHMKCW9yLmIJCVNUQUcoJWE2KSwlZDEJCSMgaW5zZXJ0IHNyYyBvcHRhZyBiaXRzCgoJbGVhCQlGUF9EU1QoJWE2KSwlYTEJCSMgcGFzcyBkc3QgcHRyIGluIGExCglsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzIHNyYyBwdHIgaW4gYTAKCgltb3YudwkJKHRibF90cmFucy53LCVwYywlZDEudyoyKSwlZDEKCWpzcgkJKHRibF90cmFucy53LCVwYywlZDEudyoxKSAjIGVtdWxhdGUKCmZ1bmltcF9mc2F2ZToKCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMAkjIGZldGNoIGV4Y2VwdGlvbnMgZW5hYmxlZAoJYm5lLncJCWZ1bmltcF9lbmEJCSMgc29tZSBhcmUgZW5hYmxlZAoKZnVuaW1wX3N0b3JlOgoJYmZleHR1CQlFWENfQ01EUkVHKCVhNil7JjY6JjN9LCVkMCAjIGZldGNoIERuCglic3IubAkJc3RvcmVfZnByZWcJCSMgc3RvcmUgcmVzdWx0IHRvIGZwIHJlZ2ZpbGUKCmZ1bmltcF9nZW5fZXhpdDoKCWZtb3ZtLngJCUVYQ19GUDAoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMQoJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKCmZ1bmltcF9nZW5fZXhpdF9jbXA6CgljbXBpLmIJCVNQQ09ORF9GTEcoJWE2KSwmbWlhN19mbGcgIyB3YXMgdGhlIGVhIG1vZGUgKHNwKSsgPwoJYmVxLmIJCWZ1bmltcF9nZW5fZXhpdF9hNwkjIHllcwoKCWNtcGkuYgkJU1BDT05EX0ZMRyglYTYpLCZtZGE3X2ZsZyAjIHdhcyB0aGUgZWEgbW9kZSAtKHNwKSA/CgliZXEuYgkJZnVuaW1wX2dlbl9leGl0X2E3CSMgeWVzCgpmdW5pbXBfZ2VuX2V4aXRfY29udDoKCXVubGsJCSVhNgoKZnVuaW1wX2dlbl9leGl0X2NvbnQyOgoJYnRzdAkJJjB4NywoJXNwKQkJIyBpcyB0cmFjZSBvbj8KCWJlcS5sCQlfZnBzcF9kb25lCQkjIG5vCgojIHRoaXMgY2F0Y2hlcyBhIHByb2JsZW0gd2l0aCB0aGUgY2FzZSB3aGVyZSBhbiBleGNlcHRpb24gd2lsbCBiZSByZS1pbnNlcnRlZAojIGludG8gdGhlIG1hY2hpbmUuIHRoZSBmcmVzdG9yZSBoYXMgYWxyZWFkeSBiZWVuIGV4ZWN1dGVkLi4uc28sIHRoZSBmbW92LmwKIyBhbG9uZSBvZiB0aGUgY29udHJvbCByZWdpc3RlciB3b3VsZCB0cmlnZ2VyIGFuIHVud2FudGVkIGV4Y2VwdGlvbi4KIyB1bnRpbCBJIGZlZWwgbGlrZSBmaXhpbmcgdGhpcywgd2UnbGwgc2lkZXN0ZXAgdGhlIGV4Y2VwdGlvbi4KCWZzYXZlCQktKCVzcCkKCWZtb3YubAkJJWZwaWFyLDB4MTQoJXNwKQkjICJDdXJyZW50IFBDIiBpcyBpbiBGUElBUgoJZnJlc3RvcmUJKCVzcCkrCgltb3YudwkJJjB4MjAyNCwweDYoJXNwKQkjIHN0ayBmbXQgPSAweDI7IHZvZmYgPSAweDI0CglicmEubAkJX3JlYWxfdHJhY2UKCmZ1bmltcF9nZW5fZXhpdF9hNzoKCWJ0c3QJCSYweDUsRVhDX1NSKCVhNikJIyBzdXBlcnZpc29yIG9yIHVzZXIgbW9kZT8KCWJuZS5iCQlmdW5pbXBfZ2VuX2V4aXRfYTdfcwkjIHN1cGVydmlzb3IKCgltb3YubAkJJWEwLC0oJXNwKQoJbW92LmwJCUVYQ19BNyglYTYpLCVhMAoJbW92LmwJCSVhMCwldXNwCgltb3YubAkJKCVzcCkrLCVhMAoJYnJhLmIJCWZ1bmltcF9nZW5fZXhpdF9jb250CgojIGlmIHRoZSBpbnN0cnVjdGlvbiB3YXMgZXhlY3V0ZWQgZnJvbSBzdXBlcnZpc29yIG1vZGUgYW5kIHRoZSBhZGRyZXNzaW5nCiMgbW9kZSB3YXMgKGE3KSssIHRoZW4gdGhlIHN0YWNrIGZyYW1lIGZvciB0aGUgcnRlIG11c3QgYmUgc2hpZnRlZCAidXAiCiMgIm4iIGJ5dGVzIHdoZXJlICJuIiBpcyB0aGUgc2l6ZSBvZiB0aGUgc3JjIG9wZXJhbmQgdHlwZS4KIyBmPG9wPi57Yix3LGwscyxkLHgscH0KZnVuaW1wX2dlbl9leGl0X2E3X3M6Cgltb3YubAkJJWQwLC0oJXNwKQkJIyBzYXZlIGQwCgltb3YubAkJRVhDX0E3KCVhNiksJWQwCQkjIGxvYWQgbmV3IGE3JwoJc3ViLmwJCU9MRF9BNyglYTYpLCVkMAkJIyBzdWJ0cmFjdCBvbGQgYTcnCgltb3YubAkJMHgyK0VYQ19QQyglYTYpLCgweDIrRVhDX1BDLCVhNiwlZDApICMgc2hpZnQgc3RhY2sgZnJhbWUKCW1vdi5sCQlFWENfU1IoJWE2KSwoRVhDX1NSLCVhNiwlZDApICMgc2hpZnQgc3RhY2sgZnJhbWUKCW1vdi53CQklZDAsRVhDX1NSKCVhNikJCSMgc3RvcmUgaW5jciBudW1iZXIKCW1vdi5sCQkoJXNwKSssJWQwCQkjIHJlc3RvcmUgZDAKCgl1bmxrCQklYTYKCglhZGQudwkJKCVzcCksJXNwCQkjIHN0YWNrIGZyYW1lIHNoaWZ0ZWQKCWJyYS5iCQlmdW5pbXBfZ2VuX2V4aXRfY29udDIKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBmbW92ZWNyLnggI2NjYyxmcG4gIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmZ1bmltcF9mbW92Y3I6CgljbHIubAkJJWQwCgltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCgltb3YuYgkJMStFWENfQ01EUkVHKCVhNiksJWQxCglhbmRpLmwJCSYweDAwMDAwMDdmLCVkMQkJIyBwYXNzIHJvbSBvZmZzZXQgaW4gZDEKCWJzci5sCQlzbW92Y3IKCWJyYS53CQlmdW5pbXBfZnNhdmUKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMKIyB0aGUgdXNlciBoYXMgZW5hYmxlZCBzb21lIGV4Y2VwdGlvbnMuIHdlIGZpZ3VyZSBub3QgdG8gc2VlIHRoaXMgdG9vCiMgb2Z0ZW4gc28gdGhhdCdzIHdoeSBpdCBnZXRzIGxvd2VyIHByaW9yaXR5LgojCmZ1bmltcF9lbmE6CgojIHdhcyBhbiBleGNlcHRpb24gc2V0IHRoYXQgd2FzIGFsc28gZW5hYmxlZD8KCWFuZC5iCQlGUFNSX0VYQ0VQVCglYTYpLCVkMAkjIGtlZXAgb25seSBvbmVzIGVuYWJsZWQgYW5kIHNldAoJYmZmZm8JCSVkMHsmMjQ6Jjh9LCVkMAkJIyBmaW5kIGhpZ2hlc3QgcHJpb3JpdHkgZXhjZXB0aW9uCglibmUuYgkJZnVuaW1wX2V4YwkJIyBhdCBsZWFzdCBvbmUgd2FzIHNldAoKIyBubyBleGNlcHRpb24gdGhhdCB3YXMgZW5hYmxlZCB3YXMgc2V0IEJVVCBpZiB3ZSBnb3QgYW4gZXhhY3Qgb3ZlcmZsb3cKIyBhbmQgb3ZlcmZsb3cgd2Fzbid0IGVuYWJsZWQgYnV0IGluZXhhY3Qgd2FzICh5ZWNoISkgdGhlbiB0aGlzIGlzCiMgYW4gaW5leGFjdCBleGNlcHRpb247IG90aGVyd2lzZSwgcmV0dXJuIHRvIG5vcm1hbCBub24tZXhjZXB0aW9uIGZsb3cuCglidHN0CQkmb3ZmbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIGRpZCBvdmVyZmxvdyBvY2N1cj8KCWJlcS53CQlmdW5pbXBfc3RvcmUJCSMgbm87IHJldHVybiB0byBub3JtYWwgZmxvdwoKIyB0aGUgb3ZlcmZsb3cgdy8gZXhhY3QgcmVzdWx0IGhhcHBlbmVkIGJ1dCB3YXMgaW5leGFjdCBzZXQgaW4gdGhlIEZQQ1I/CmZ1bmltcF9vdmZsOgoJYnRzdAkJJmluZXgyX2JpdCxGUENSX0VOQUJMRSglYTYpICMgaXMgaW5leGFjdCBlbmFibGVkPwoJYmVxLncJCWZ1bmltcF9zdG9yZQkJIyBubzsgcmV0dXJuIHRvIG5vcm1hbCBmbG93CglicmEuYgkJZnVuaW1wX2V4Y19vdmZsCQkjIHllcwoKIyBzb21lIGV4Y2VwdGlvbiBoYXBwZW5lZCB0aGF0IHdhcyBhY3R1YWxseSBlbmFibGVkLgojIHdlJ2xsIGluc2VydCB0aGlzIG5ldyBleGNlcHRpb24gaW50byB0aGUgRlBVIGFuZCB0aGVuIHJldHVybi4KZnVuaW1wX2V4YzoKCXN1YmkubAkJJjI0LCVkMAkJCSMgZml4IG9mZnNldCB0byBiZSAwLTgKCWNtcGkuYgkJJWQwLCYweDYJCSMgaXMgZXhjZXB0aW9uIElORVg/CglibmUuYgkJZnVuaW1wX2V4Y19mb3JjZQkjIG5vCgojIHRoZSBlbmFibGVkIGV4Y2VwdGlvbiB3YXMgaW5leGFjdC4gc28sIGlmIGl0IG9jY3VycyB3aXRoIGFuIG92ZXJmbG93CiMgb3IgdW5kZXJmbG93IHRoYXQgd2FzIGRpc2FibGVkLCB0aGVuIHdlIGhhdmUgdG8gZm9yY2UgYW4gb3ZlcmZsb3cgb3IKIyB1bmRlcmZsb3cgZnJhbWUuIHRoZSBldmVudHVhbCBvdmVyZmxvdyBvciB1bmRlcmZsb3cgaGFuZGxlciB3aWxsIHNlZSB0aGF0CiMgaXQncyBhY3R1YWxseSBhbiBpbmV4YWN0IGFuZCBhY3QgYXBwcm9wcmlhdGVseS4gdGhpcyBpcyB0aGUgb25seSBlYXN5CiMgd2F5IHRvIGhhdmUgdGhlIEVYT1AgYXZhaWxhYmxlIGZvciB0aGUgZW5hYmxlZCBpbmV4YWN0IGhhbmRsZXIgd2hlbgojIGEgZGlzYWJsZWQgb3ZlcmZsb3cgb3IgdW5kZXJmbG93IGhhcyBhbHNvIGhhcHBlbmVkLgoJYnRzdAkJJm92ZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgIyBkaWQgb3ZlcmZsb3cgb2NjdXI/CglibmUuYgkJZnVuaW1wX2V4Y19vdmZsCQkjIHllcwoJYnRzdAkJJnVuZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgIyBkaWQgdW5kZXJmbG93IG9jY3VyPwoJYm5lLmIJCWZ1bmltcF9leGNfdW5mbAkJIyB5ZXMKCiMgZm9yY2UgdGhlIGZzYXZlIGV4Y2VwdGlvbiBzdGF0dXMgYml0cyB0byBzaWduYWwgYW4gZXhjZXB0aW9uIG9mIHRoZQojIGFwcHJvcHJpYXRlIHR5cGUuIGRvbid0IGZvcmdldCB0byAic2tldyIgdGhlIHNvdXJjZSBvcGVyYW5kIGluIGNhc2Ugd2UKIyAidW5za2V3ZWQiIHRoZSBvbmUgdGhlIGhhcmR3YXJlIGluaXRpYWxseSBnYXZlIHVzLgpmdW5pbXBfZXhjX2ZvcmNlOgoJbW92LmwJCSVkMCwtKCVzcCkJCSMgc2F2ZSBkMAoJYnNyLmwJCWZ1bmltcF9za2V3CQkjIGNoZWNrIGZvciBzcGVjaWFsIGNhc2UKCW1vdi5sCQkoJXNwKSssJWQwCQkjIHJlc3RvcmUgZDAKCW1vdi53CQkodGJsX2Z1bmltcF9leGNlcHQuYiwlcGMsJWQwLncqMiksMitGUF9TUkMoJWE2KQoJYnJhLmIJCWZ1bmltcF9nZW5fZXhpdDIJIyBleGl0IHdpdGggZnJlc3RvcmUKCnRibF9mdW5pbXBfZXhjZXB0OgoJc2hvcnQJCTB4ZTAwMiwgMHhlMDA2LCAweGUwMDQsIDB4ZTAwNQoJc2hvcnQJCTB4ZTAwMywgMHhlMDAyLCAweGUwMDEsIDB4ZTAwMQoKIyBpbnNlcnQgYW4gb3ZlcmZsb3cgZnJhbWUKZnVuaW1wX2V4Y19vdmZsOgoJYnNyLmwJCWZ1bmltcF9za2V3CQkjIGNoZWNrIGZvciBzcGVjaWFsIGNhc2UKCW1vdi53CQkmMHhlMDA1LDIrRlBfU1JDKCVhNikKCWJyYS5iCQlmdW5pbXBfZ2VuX2V4aXQyCgojIGluc2VydCBhbiB1bmRlcmZsb3cgZnJhbWUKZnVuaW1wX2V4Y191bmZsOgoJYnNyLmwJCWZ1bmltcF9za2V3CQkjIGNoZWNrIGZvciBzcGVjaWFsIGNhc2UKCW1vdi53CQkmMHhlMDAzLDIrRlBfU1JDKCVhNikKCiMgdGhpcyBpcyB0aGUgZ2VuZXJhbCBleGl0IHBvaW50IGZvciBhbiBlbmFibGVkIGV4Y2VwdGlvbiB0aGF0IHdpbGwgYmUKIyByZXN0b3JlZCBpbnRvIHRoZSBtYWNoaW5lIGZvciB0aGUgaW5zdHJ1Y3Rpb24ganVzdCBlbXVsYXRlZC4KZnVuaW1wX2dlbl9leGl0MjoKCWZtb3ZtLngJCUVYQ19GUDAoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMQoJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKCglmcmVzdG9yZQlGUF9TUkMoJWE2KQkJIyBpbnNlcnQgZXhjZXB0aW9uYWwgc3RhdHVzCgoJYnJhLncJCWZ1bmltcF9nZW5fZXhpdF9jbXAKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMKIyBUWVBFID09IDE6IEZEQjxjYz4sIEZTPGNjPiwgRlRSQVA8Y2M+CiMKIyBUaGVzZSBpbnN0cnVjdGlvbnMgd2VyZSBpbXBsZW1lbnRlZCBvbiB0aGUgJzg4MS8yIGFuZCAnMDQwIGluIGhhcmR3YXJlIGJ1dAojIGFyZSBlbXVsYXRlZCBpbiBzb2Z0d2FyZSBvbiB0aGUgJzA2MC4KIwpmdW5pbXBfbWlzYzoKCWJmZXh0dQkJJWQweyYxMDomM30sJWQxCQkjIGV4dHJhY3QgbW9kZSBmaWVsZAoJY21waS5iCQklZDEsJjB4MQkJIyBpcyBpdCBhbiBmZGI8Y2M+PwoJYmVxLncJCWZ1bmltcF9mZGJjYwkJIyB5ZXMKCWNtcGkuYgkJJWQxLCYweDcJCSMgaXMgaXQgYW4gZnM8Y2M+PwoJYm5lLncJCWZ1bmltcF9mc2NjCQkjIHllcwoJYmZleHR1CQklZDB7JjEzOiYzfSwlZDEKCWNtcGkuYgkJJWQxLCYweDIJCSMgaXMgaXQgYW4gZnM8Y2M+PwoJYmx0LncJCWZ1bmltcF9mc2NjCQkjIHllcwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIGZ0cmFwPGNjPgkJIwojIGZ0cmFwPGNjPi53ICM8ZGF0YT4JIwojIGZ0cmFwPGNjPi5sICM8ZGF0YT4JIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmZ1bmltcF9mdHJhcGNjOgoKCWJzci5sCQlfZnRyYXBjYwkJIyBGVFJBUDxjYz4oKQoKCWNtcGkuYgkJU1BDT05EX0ZMRyglYTYpLCZmYnN1bl9mbGcgIyBpcyBlbmFibGVkIGJzdW4gb2NjdXJyaW5nPwoJYmVxLncJCWZ1bmltcF9ic3VuCQkjIHllcwoKCWNtcGkuYgkJU1BDT05EX0ZMRyglYTYpLCZmdHJhcGNjX2ZsZyAjIHNob3VsZCBhIHRyYXAgb2NjdXI/CglibmUudwkJZnVuaW1wX2RvbmUJCSMgbm8KCiMJIEZQIFVOSU1QIEZSQU1FCQkgICBUUkFQICBGUkFNRQojCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCiMJKiogICAgPEVBPiAgICAgKioJKiogIEN1cnJlbnQgUEMgKioKIwkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgojCSogMHgyICogIDB4MDJjCSoJKiAweDIgKiAgMHgwMWMgICoKIwkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgojCSoqICAgTmV4dCBQQyAgICoqCSoqICAgTmV4dCBQQyAgICoqCiMJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKIwkqICAgICAgU1IJKgkqICAgICAgU1IJKgojCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCiMJICAgICg2IHdvcmRzKQkJICAgICg2IHdvcmRzKQojCiMgdGhlIGZ0cmFwY2MgaW5zdHJ1Y3Rpb24gc2hvdWxkIHRha2UgYSB0cmFwLiBzbywgaGVyZSB3ZSBtdXN0IGNyZWF0ZSBhCiMgdHJhcCBzdGFjayBmcmFtZSBmcm9tIGFuIHVuaW1wbGVtZW50ZWQgZnAgaW5zdHJ1Y3Rpb24gc3RhY2sgZnJhbWUgYW5kCiMganVtcCB0byB0aGUgdXNlciBzdXBwbGllZCBlbnRyeSBwb2ludCBmb3IgdGhlIHRyYXAgZXhjZXB0aW9uCmZ1bmltcF9mdHJhcGNjX3RwOgoJbW92LmwJCVVTRVJfRlBJQVIoJWE2KSxFWENfRUEoJWE2KSAjIEFkZHJlc3MgPSBDdXJyZW50IFBDCgltb3YudwkJJjB4MjAxYyxFWENfVk9GRiglYTYpCSMgVmVjdG9yIE9mZnNldCA9IDB4MDFjCgoJZm1vdm0ueAkJRVhDX0ZQMCglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAtZnAxCglmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncwoJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQoKCXVubGsJCSVhNgoJYnJhLmwJCV9yZWFsX3RyYXAKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBmZGI8Y2M+IERuLDxsYWJlbD4JIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmZ1bmltcF9mZGJjYzoKCgltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCglhZGRxLmwJCSYweDIsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCglic3IubAkJX2ltZW1fcmVhZF93b3JkCQkjIHJlYWQgZGlzcGxhY2VtZW50CgoJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPwoJYm5lLncJCWZ1bmltcF9pYWNjCQkjIHllcwoKCWV4dC5sCQklZDAJCQkjIHNpZ24gZXh0ZW5kIGRpc3BsYWNlbWVudAoKCWJzci5sCQlfZmRiY2MJCQkjIEZEQjxjYz4oKQoKCWNtcGkuYgkJU1BDT05EX0ZMRyglYTYpLCZmYnN1bl9mbGcgIyBpcyBlbmFibGVkIGJzdW4gb2NjdXJyaW5nPwoJYmVxLncJCWZ1bmltcF9ic3VuCgoJYnJhLncJCWZ1bmltcF9kb25lCQkjIGJyYW5jaCB0byBmaW5pc2gKCiMjIyMjIyMjIyMjIyMjIyMjCiMgZnM8Y2M+LmIgPGVhPgkjCiMjIyMjIyMjIyMjIyMjIyMjCmZ1bmltcF9mc2NjOgoKCWJzci5sCQlfZnNjYwkJCSMgRlM8Y2M+KCkKCiMgSSBhbSBhc3N1bWluZyBoZXJlIHRoYXQgYW4gImZzPGNjPi5iIC0oQW4pIiBvciAiZnM8Y2M+LmIgKEFuKSsiIGluc3RydWN0aW9uCiMgZG9lcyBub3QgbmVlZCB0byB1cGRhdGUgIkFuIiBiZWZvcmUgdGFraW5nIGEgYnN1biBleGNlcHRpb24uCgljbXBpLmIJCVNQQ09ORF9GTEcoJWE2KSwmZmJzdW5fZmxnICMgaXMgZW5hYmxlZCBic3VuIG9jY3VycmluZz8KCWJlcS53CQlmdW5pbXBfYnN1bgoKCWJ0c3QJCSYweDUsRVhDX1NSKCVhNikJIyB5ZXM7IGlzIGl0IGEgdXNlciBtb2RlIGV4Y2VwdGlvbj8KCWJuZS5iCQlmdW5pbXBfZnNjY19zCQkjIG5vCgpmdW5pbXBfZnNjY191OgoJbW92LmwJCUVYQ19BNyglYTYpLCVhMAkJIyB5ZXM7IHNldCBuZXcgVVNQCgltb3YubAkJJWEwLCV1c3AKCWJyYS53CQlmdW5pbXBfZG9uZQkJIyBicmFuY2ggdG8gZmluaXNoCgojIHJlbWVtYmVyLCBJJ20gYXNzdW1pbmcgdGhhdCBwb3N0LWluY3JlbWVudCBpcyBib2d1cy4uLihpdCBJUyEhISkKIyBzbywgdGhlIGxlYXN0IHNpZ25pZmljYW50IFdPUkQgb2YgdGhlIHN0YWNrZWQgZWZmZWN0aXZlIGFkZHJlc3MgZ290CiMgb3ZlcndyaXR0ZW4gYnkgdGhlICJmczxjYz4gLShBbikiLiBXZSBtdXN0IHNoaWZ0IHRoZSBzdGFjayBmcmFtZSAiZG93biIKIyBzbyB0aGF0IHRoZSBydGUgd2lsbCB3b3JrIGNvcnJlY3RseSB3aXRob3V0IGRlc3Ryb3lpbmcgdGhlIHJlc3VsdC4KIyBldmVuIHRob3VnaCB0aGUgb3BlcmF0aW9uIHNpemUgaXMgYnl0ZSwgdGhlIHN0YWNrIHB0ciBpcyBkZWNyIGJ5IDIuCiMKIyByZW1lbWJlciwgYWxzbywgdGhpcyBpbnN0cnVjdGlvbiBtYXkgYmUgdHJhY2VkLgpmdW5pbXBfZnNjY19zOgoJY21waS5iCQlTUENPTkRfRkxHKCVhNiksJm1kYTdfZmxnICMgd2FzIGE3IG1vZGlmaWVkPwoJYm5lLncJCWZ1bmltcF9kb25lCQkjIG5vCgoJZm1vdm0ueAkJRVhDX0ZQMCglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAtZnAxCglmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncwoJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQoKCXVubGsJCSVhNgoKCWJ0c3QJCSYweDcsKCVzcCkJCSMgaXMgdHJhY2UgZW5hYmxlZD8KCWJuZS5iCQlmdW5pbXBfZnNjY19zX3RyYWNlCSMgeWVzCgoJc3VicS5sCQkmMHgyLCVzcAoJbW92LmwJCTB4Miglc3ApLCglc3ApCQkjIHNoaWZ0IFNSLGhpKFBDKSAiZG93biIKCW1vdi5sCQkweDYoJXNwKSwweDQoJXNwKQkjIHNoaWZ0IGxvKFBDKSx2b2ZmICJkb3duIgoJYnJhLmwJCV9mcHNwX2RvbmUKCmZ1bmltcF9mc2NjX3NfdHJhY2U6CglzdWJxLmwJCSYweDIsJXNwCgltb3YubAkJMHgyKCVzcCksKCVzcCkJCSMgc2hpZnQgU1IsaGkoUEMpICJkb3duIgoJbW92LncJCTB4Niglc3ApLDB4NCglc3ApCSMgc2hpZnQgbG8oUEMpCgltb3YudwkJJjB4MjAyNCwweDYoJXNwKQkjIGZtdC92b2ZmID0gJDIwMjQKCWZtb3YubAkJJWZwaWFyLDB4OCglc3ApCQkjIGluc2VydCAiY3VycmVudCBQQyIKCglicmEubAkJX3JlYWxfdHJhY2UKCiMKIyBUaGUgZnRyYXA8Y2M+LCBmczxjYz4sIG9yIGZkYjxjYz4gaXMgdG8gdGFrZSBhbiBlbmFibGVkIGJzdW4uIHdlIG11c3QgY29udmVydAojIHRoZSBmcCB1bmltcGxlbWVudGVkIGluc3RydWN0aW9uIGV4Y2VwdGlvbiBzdGFjayBmcmFtZSBpbnRvIGEgYnN1biBzdGFjayBmcmFtZSwKIyByZXN0b3JlIGEgYnN1biBleGNlcHRpb24gaW50byB0aGUgbWFjaGluZSwgYW5kIGJyYW5jaCB0byB0aGUgdXNlcgojIHN1cHBsaWVkIGJzdW4gaG9vay4KIwojCSBGUCBVTklNUCBGUkFNRQkJICAgQlNVTiBGUkFNRQojCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCiMJKiogICAgPEVBPiAgICAgKioJKiAweDAgKiAweDBjMAkqCiMJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKIwkqIDB4MiAqICAweDAyYyAgKgkqKiBDdXJyZW50IFBDICAqKgojCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCiMJKiogICBOZXh0IFBDICAgKioJKiAgICAgIFNSCSoKIwkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgojCSogICAgICBTUgkqCSAgICAoNCB3b3JkcykKIwkqKioqKioqKioqKioqKioqKgojCSAgICAoNiB3b3JkcykKIwpmdW5pbXBfYnN1bjoKCW1vdi53CQkmMHgwMGMwLDIrRVhDX0VBKCVhNikJIyBGbXQgPSAweDA7IFZlY3RvciBPZmZzZXQgPSAweDBjMAoJbW92LmwJCVVTRVJfRlBJQVIoJWE2KSxFWENfVk9GRiglYTYpICMgUEMgPSBDdXJyZW50IFBDCgltb3YudwkJRVhDX1NSKCVhNiksMitFWENfUEMoJWE2KSAjIHNoaWZ0IFNSICJ1cCIKCgltb3YudwkJJjB4ZTAwMCwyK0ZQX1NSQyglYTYpCSMgYnN1biBleGNlcHRpb24gZW5hYmxlZAoKCWZtb3ZtLngJCUVYQ19GUDAoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMQoJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKCglmcmVzdG9yZQlGUF9TUkMoJWE2KQkJIyByZXN0b3JlIGJzdW4gZXhjZXB0aW9uCgoJdW5sawkJJWE2CgoJYWRkcS5sCQkmMHg0LCVzcAkJIyBlcmFzZSBzbHVkZ2UKCglicmEubAkJX3JlYWxfYnN1bgkJIyBicmFuY2ggdG8gdXNlciBic3VuIGhvb2sKCiMKIyBhbGwgZnRyYXBjYy9mc2NjL2ZkYmNjIHByb2Nlc3NpbmcgaGFzIGJlZW4gY29tcGxldGVkLiB1bndpbmQgdGhlIHN0YWNrIGZyYW1lCiMgYW5kIHJldHVybi4KIwojIGFzIHVzdWFsLCB3ZSBoYXZlIHRvIGNoZWNrIGZvciB0cmFjZSBtb2RlIGJlaW5nIG9uIGhlcmUuIHNpbmNlIGluc3RydWN0aW9ucwojIG1vZGlmeWluZyB0aGUgc3VwZXJ2aXNvciBzdGFjayBmcmFtZSBkb24ndCBwYXNzIHRocm91Z2ggaGVyZSwgdGhpcyBpcyBhCiMgcmVsYXRpdmVseSBlYXN5IHRhc2suCiMKZnVuaW1wX2RvbmU6CglmbW92bS54CQlFWENfRlAwKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC1mcDEKCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCgltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCgoJdW5sawkJJWE2CgoJYnRzdAkJJjB4NywoJXNwKQkJIyBpcyB0cmFjZSBlbmFibGVkPwoJYm5lLmIJCWZ1bmltcF90cmFjZQkJIyB5ZXMKCglicmEubAkJX2Zwc3BfZG9uZQoKIwkgRlAgVU5JTVAgRlJBTUUJCSAgVFJBQ0UgIEZSQU1FCiMJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKIwkqKiAgICA8RUE+ICAgICAqKgkqKiAgQ3VycmVudCBQQyAqKgojCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCiMJKiAweDIgKiAgMHgwMmMJKgkqIDB4MiAqICAweDAyNCAgKgojCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCiMJKiogICBOZXh0IFBDICAgKioJKiogICBOZXh0IFBDICAgKioKIwkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgojCSogICAgICBTUgkqCSogICAgICBTUgkqCiMJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKIwkgICAgKDYgd29yZHMpCQkgICAgKDYgd29yZHMpCiMKIyB0aGUgZnNjYyBpbnN0cnVjdGlvbiBzaG91bGQgdGFrZSBhIHRyYWNlIHRyYXAuIHNvLCBoZXJlIHdlIG11c3QgY3JlYXRlIGEKIyB0cmFjZSBzdGFjayBmcmFtZSBmcm9tIGFuIHVuaW1wbGVtZW50ZWQgZnAgaW5zdHJ1Y3Rpb24gc3RhY2sgZnJhbWUgYW5kCiMganVtcCB0byB0aGUgdXNlciBzdXBwbGllZCBlbnRyeSBwb2ludCBmb3IgdGhlIHRyYWNlIGV4Y2VwdGlvbgpmdW5pbXBfdHJhY2U6CglmbW92LmwJCSVmcGlhciwweDgoJXNwKQkJIyBjdXJyZW50IFBDIGlzIGluIGZwaWFyCgltb3YuYgkJJjB4MjQsMHg3KCVzcCkJCSMgdmVjdG9yIG9mZnNldCA9IDB4MDI0CgoJYnJhLmwJCV9yZWFsX3RyYWNlCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoJZ2xvYmFsCQl0YmxfdHJhbnMKCXN3YmVnCQkmMHgxYzAKdGJsX3RyYW5zOgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwMC0wIGZtb3ZlY3IgYWxsCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDAwLTEgZm1vdmVjciBhbGwKCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMDAtMiBmbW92ZWNyIGFsbAoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwMC0zIGZtb3ZlY3IgYWxsCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDAwLTQgZm1vdmVjciBhbGwKCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMDAtNSBmbW92ZWNyIGFsbAoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwMC02IGZtb3ZlY3IgYWxsCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDAwLTcgZm1vdmVjciBhbGwKCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDAxLTAgZmludCBub3JtCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDAxLTEgZmludCB6ZXJvCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDAxLTIgZmludCBpbmYKCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMDEtMyBmaW50IHFuYW4KCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMDEtNSBmaW50IGRlbm9ybQoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwMS00IGZpbnQgc25hbgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwMS02IGZpbnQgdW5ub3JtCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDAxLTcgRVJST1IKCglzaG9ydAkJc3NpbmgJIC0gdGJsX3RyYW5zCSMgJDAyLTAgZnNpbmggbm9ybQoJc2hvcnQJCXNyY196ZXJvIC0gdGJsX3RyYW5zCSMgJDAyLTEgZnNpbmggemVybwoJc2hvcnQJCXNyY19pbmYJIC0gdGJsX3RyYW5zCSMgJDAyLTIgZnNpbmggaW5mCglzaG9ydAkJc3JjX3FuYW4gLSB0YmxfdHJhbnMJIyAkMDItMyBmc2luaCBxbmFuCglzaG9ydAkJc3NpbmhkCSAtIHRibF90cmFucwkjICQwMi01IGZzaW5oIGRlbm9ybQoJc2hvcnQJCXNyY19zbmFuIC0gdGJsX3RyYW5zCSMgJDAyLTQgZnNpbmggc25hbgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwMi02IGZzaW5oIHVubm9ybQoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwMi03IEVSUk9SCgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwMy0wIGZpbnRyeiBub3JtCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDAzLTEgZmludHJ6IHplcm8KCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMDMtMiBmaW50cnogaW5mCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDAzLTMgZmludHJ6IHFuYW4KCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMDMtNSBmaW50cnogZGVub3JtCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDAzLTQgZmludHJ6IHNuYW4KCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMDMtNiBmaW50cnogdW5ub3JtCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDAzLTcgRVJST1IKCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDA0LTAgZnNxcnQgbm9ybQoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwNC0xIGZzcXJ0IHplcm8KCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMDQtMiBmc3FydCBpbmYKCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMDQtMyBmc3FydCBxbmFuCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDA0LTUgZnNxcnQgZGVub3JtCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDA0LTQgZnNxcnQgc25hbgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwNC02IGZzcXJ0IHVubm9ybQoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwNC03IEVSUk9SCgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwNS0wIEVSUk9SCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDA1LTEgRVJST1IKCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMDUtMiBFUlJPUgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwNS0zIEVSUk9SCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDA1LTQgRVJST1IKCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMDUtNSBFUlJPUgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwNS02IEVSUk9SCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDA1LTcgRVJST1IKCglzaG9ydAkJc2xvZ25wMQkgLSB0YmxfdHJhbnMJIyAkMDYtMCBmbG9nbnAxIG5vcm0KCXNob3J0CQlzcmNfemVybyAtIHRibF90cmFucwkjICQwNi0xIGZsb2ducDEgemVybwoJc2hvcnQJCXNvcHJfaW5mIC0gdGJsX3RyYW5zCSMgJDA2LTIgZmxvZ25wMSBpbmYKCXNob3J0CQlzcmNfcW5hbiAtIHRibF90cmFucwkjICQwNi0zIGZsb2ducDEgcW5hbgoJc2hvcnQJCXNsb2ducDFkIC0gdGJsX3RyYW5zCSMgJDA2LTUgZmxvZ25wMSBkZW5vcm0KCXNob3J0CQlzcmNfc25hbiAtIHRibF90cmFucwkjICQwNi00IGZsb2ducDEgc25hbgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwNi02IGZsb2ducDEgdW5ub3JtCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDA2LTcgRVJST1IKCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDA3LTAgRVJST1IKCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMDctMSBFUlJPUgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwNy0yIEVSUk9SCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDA3LTMgRVJST1IKCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMDctNCBFUlJPUgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwNy01IEVSUk9SCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDA3LTYgRVJST1IKCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMDctNyBFUlJPUgoKCXNob3J0CQlzZXRveG0xCSAtIHRibF90cmFucwkjICQwOC0wIGZldG94bTEgbm9ybQoJc2hvcnQJCXNyY196ZXJvIC0gdGJsX3RyYW5zCSMgJDA4LTEgZmV0b3htMSB6ZXJvCglzaG9ydAkJc2V0b3htMWkgLSB0YmxfdHJhbnMJIyAkMDgtMiBmZXRveG0xIGluZgoJc2hvcnQJCXNyY19xbmFuIC0gdGJsX3RyYW5zCSMgJDA4LTMgZmV0b3htMSBxbmFuCglzaG9ydAkJc2V0b3htMWQgLSB0YmxfdHJhbnMJIyAkMDgtNSBmZXRveG0xIGRlbm9ybQoJc2hvcnQJCXNyY19zbmFuIC0gdGJsX3RyYW5zCSMgJDA4LTQgZmV0b3htMSBzbmFuCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDA4LTYgZmV0b3htMSB1bm5vcm0KCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMDgtNyBFUlJPUgoKCXNob3J0CQlzdGFuaAkgLSB0YmxfdHJhbnMJIyAkMDktMCBmdGFuaCBub3JtCglzaG9ydAkJc3JjX3plcm8gLSB0YmxfdHJhbnMJIyAkMDktMSBmdGFuaCB6ZXJvCglzaG9ydAkJc3JjX29uZQkgLSB0YmxfdHJhbnMJIyAkMDktMiBmdGFuaCBpbmYKCXNob3J0CQlzcmNfcW5hbiAtIHRibF90cmFucwkjICQwOS0zIGZ0YW5oIHFuYW4KCXNob3J0CQlzdGFuaGQJIC0gdGJsX3RyYW5zCSMgJDA5LTUgZnRhbmggZGVub3JtCglzaG9ydAkJc3JjX3NuYW4gLSB0YmxfdHJhbnMJIyAkMDktNCBmdGFuaCBzbmFuCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDA5LTYgZnRhbmggdW5ub3JtCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDA5LTcgRVJST1IKCglzaG9ydAkJc2F0YW4JIC0gdGJsX3RyYW5zCSMgJDBhLTAgZmF0YW4gbm9ybQoJc2hvcnQJCXNyY196ZXJvIC0gdGJsX3RyYW5zCSMgJDBhLTEgZmF0YW4gemVybwoJc2hvcnQJCXNwaV8yCSAtIHRibF90cmFucwkjICQwYS0yIGZhdGFuIGluZgoJc2hvcnQJCXNyY19xbmFuIC0gdGJsX3RyYW5zCSMgJDBhLTMgZmF0YW4gcW5hbgoJc2hvcnQJCXNhdGFuZAkgLSB0YmxfdHJhbnMJIyAkMGEtNSBmYXRhbiBkZW5vcm0KCXNob3J0CQlzcmNfc25hbiAtIHRibF90cmFucwkjICQwYS00IGZhdGFuIHNuYW4KCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMGEtNiBmYXRhbiB1bm5vcm0KCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMGEtNyBFUlJPUgoKCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMGItMCBFUlJPUgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwYi0xIEVSUk9SCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDBiLTIgRVJST1IKCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMGItMyBFUlJPUgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwYi00IEVSUk9SCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDBiLTUgRVJST1IKCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMGItNiBFUlJPUgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwYi03IEVSUk9SCgoJc2hvcnQJCXNhc2luCSAtIHRibF90cmFucwkjICQwYy0wIGZhc2luIG5vcm0KCXNob3J0CQlzcmNfemVybyAtIHRibF90cmFucwkjICQwYy0xIGZhc2luIHplcm8KCXNob3J0CQl0X29wZXJyCSAtIHRibF90cmFucwkjICQwYy0yIGZhc2luIGluZgoJc2hvcnQJCXNyY19xbmFuIC0gdGJsX3RyYW5zCSMgJDBjLTMgZmFzaW4gcW5hbgoJc2hvcnQJCXNhc2luZAkgLSB0YmxfdHJhbnMJIyAkMGMtNSBmYXNpbiBkZW5vcm0KCXNob3J0CQlzcmNfc25hbiAtIHRibF90cmFucwkjICQwYy00IGZhc2luIHNuYW4KCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMGMtNiBmYXNpbiB1bm5vcm0KCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMGMtNyBFUlJPUgoKCXNob3J0CQlzYXRhbmgJIC0gdGJsX3RyYW5zCSMgJDBkLTAgZmF0YW5oIG5vcm0KCXNob3J0CQlzcmNfemVybyAtIHRibF90cmFucwkjICQwZC0xIGZhdGFuaCB6ZXJvCglzaG9ydAkJdF9vcGVycgkgLSB0YmxfdHJhbnMJIyAkMGQtMiBmYXRhbmggaW5mCglzaG9ydAkJc3JjX3FuYW4gLSB0YmxfdHJhbnMJIyAkMGQtMyBmYXRhbmggcW5hbgoJc2hvcnQJCXNhdGFuaGQJIC0gdGJsX3RyYW5zCSMgJDBkLTUgZmF0YW5oIGRlbm9ybQoJc2hvcnQJCXNyY19zbmFuIC0gdGJsX3RyYW5zCSMgJDBkLTQgZmF0YW5oIHNuYW4KCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMGQtNiBmYXRhbmggdW5ub3JtCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDBkLTcgRVJST1IKCglzaG9ydAkJc3NpbgkgLSB0YmxfdHJhbnMJIyAkMGUtMCBmc2luIG5vcm0KCXNob3J0CQlzcmNfemVybyAtIHRibF90cmFucwkjICQwZS0xIGZzaW4gemVybwoJc2hvcnQJCXRfb3BlcnIJIC0gdGJsX3RyYW5zCSMgJDBlLTIgZnNpbiBpbmYKCXNob3J0CQlzcmNfcW5hbiAtIHRibF90cmFucwkjICQwZS0zIGZzaW4gcW5hbgoJc2hvcnQJCXNzaW5kCSAtIHRibF90cmFucwkjICQwZS01IGZzaW4gZGVub3JtCglzaG9ydAkJc3JjX3NuYW4gLSB0YmxfdHJhbnMJIyAkMGUtNCBmc2luIHNuYW4KCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMGUtNiBmc2luIHVubm9ybQoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwZS03IEVSUk9SCgoJc2hvcnQJCXN0YW4JIC0gdGJsX3RyYW5zCSMgJDBmLTAgZnRhbiBub3JtCglzaG9ydAkJc3JjX3plcm8gLSB0YmxfdHJhbnMJIyAkMGYtMSBmdGFuIHplcm8KCXNob3J0CQl0X29wZXJyCSAtIHRibF90cmFucwkjICQwZi0yIGZ0YW4gaW5mCglzaG9ydAkJc3JjX3FuYW4gLSB0YmxfdHJhbnMJIyAkMGYtMyBmdGFuIHFuYW4KCXNob3J0CQlzdGFuZAkgLSB0YmxfdHJhbnMJIyAkMGYtNSBmdGFuIGRlbm9ybQoJc2hvcnQJCXNyY19zbmFuIC0gdGJsX3RyYW5zCSMgJDBmLTQgZnRhbiBzbmFuCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDBmLTYgZnRhbiB1bm5vcm0KCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMGYtNyBFUlJPUgoKCXNob3J0CQlzZXRveAkgLSB0YmxfdHJhbnMJIyAkMTAtMCBmZXRveCBub3JtCglzaG9ydAkJbGRfcG9uZQkgLSB0YmxfdHJhbnMJIyAkMTAtMSBmZXRveCB6ZXJvCglzaG9ydAkJc3pyX2luZgkgLSB0YmxfdHJhbnMJIyAkMTAtMiBmZXRveCBpbmYKCXNob3J0CQlzcmNfcW5hbiAtIHRibF90cmFucwkjICQxMC0zIGZldG94IHFuYW4KCXNob3J0CQlzZXRveGQJIC0gdGJsX3RyYW5zCSMgJDEwLTUgZmV0b3ggZGVub3JtCglzaG9ydAkJc3JjX3NuYW4gLSB0YmxfdHJhbnMJIyAkMTAtNCBmZXRveCBzbmFuCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDEwLTYgZmV0b3ggdW5ub3JtCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDEwLTcgRVJST1IKCglzaG9ydAkJc3R3b3RveAkgLSB0YmxfdHJhbnMJIyAkMTEtMCBmdHdvdG94IG5vcm0KCXNob3J0CQlsZF9wb25lCSAtIHRibF90cmFucwkjICQxMS0xIGZ0d290b3ggemVybwoJc2hvcnQJCXN6cl9pbmYJIC0gdGJsX3RyYW5zCSMgJDExLTIgZnR3b3RveCBpbmYKCXNob3J0CQlzcmNfcW5hbiAtIHRibF90cmFucwkjICQxMS0zIGZ0d290b3ggcW5hbgoJc2hvcnQJCXN0d290b3hkIC0gdGJsX3RyYW5zCSMgJDExLTUgZnR3b3RveCBkZW5vcm0KCXNob3J0CQlzcmNfc25hbiAtIHRibF90cmFucwkjICQxMS00IGZ0d290b3ggc25hbgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxMS02IGZ0d290b3ggdW5ub3JtCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDExLTcgRVJST1IKCglzaG9ydAkJc3RlbnRveAkgLSB0YmxfdHJhbnMJIyAkMTItMCBmdGVudG94IG5vcm0KCXNob3J0CQlsZF9wb25lCSAtIHRibF90cmFucwkjICQxMi0xIGZ0ZW50b3ggemVybwoJc2hvcnQJCXN6cl9pbmYJIC0gdGJsX3RyYW5zCSMgJDEyLTIgZnRlbnRveCBpbmYKCXNob3J0CQlzcmNfcW5hbiAtIHRibF90cmFucwkjICQxMi0zIGZ0ZW50b3ggcW5hbgoJc2hvcnQJCXN0ZW50b3hkIC0gdGJsX3RyYW5zCSMgJDEyLTUgZnRlbnRveCBkZW5vcm0KCXNob3J0CQlzcmNfc25hbiAtIHRibF90cmFucwkjICQxMi00IGZ0ZW50b3ggc25hbgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxMi02IGZ0ZW50b3ggdW5ub3JtCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDEyLTcgRVJST1IKCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDEzLTAgRVJST1IKCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMTMtMSBFUlJPUgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxMy0yIEVSUk9SCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDEzLTMgRVJST1IKCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMTMtNCBFUlJPUgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxMy01IEVSUk9SCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDEzLTYgRVJST1IKCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMTMtNyBFUlJPUgoKCXNob3J0CQlzbG9nbgkgLSB0YmxfdHJhbnMJIyAkMTQtMCBmbG9nbiBub3JtCglzaG9ydAkJdF9kejIJIC0gdGJsX3RyYW5zCSMgJDE0LTEgZmxvZ24gemVybwoJc2hvcnQJCXNvcHJfaW5mIC0gdGJsX3RyYW5zCSMgJDE0LTIgZmxvZ24gaW5mCglzaG9ydAkJc3JjX3FuYW4gLSB0YmxfdHJhbnMJIyAkMTQtMyBmbG9nbiBxbmFuCglzaG9ydAkJc2xvZ25kCSAtIHRibF90cmFucwkjICQxNC01IGZsb2duIGRlbm9ybQoJc2hvcnQJCXNyY19zbmFuIC0gdGJsX3RyYW5zCSMgJDE0LTQgZmxvZ24gc25hbgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxNC02IGZsb2duIHVubm9ybQoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxNC03IEVSUk9SCgoJc2hvcnQJCXNsb2cxMAkgLSB0YmxfdHJhbnMJIyAkMTUtMCBmbG9nMTAgbm9ybQoJc2hvcnQJCXRfZHoyCSAtIHRibF90cmFucwkjICQxNS0xIGZsb2cxMCB6ZXJvCglzaG9ydAkJc29wcl9pbmYgLSB0YmxfdHJhbnMJIyAkMTUtMiBmbG9nMTAgaW5mCglzaG9ydAkJc3JjX3FuYW4gLSB0YmxfdHJhbnMJIyAkMTUtMyBmbG9nMTAgcW5hbgoJc2hvcnQJCXNsb2cxMGQJIC0gdGJsX3RyYW5zCSMgJDE1LTUgZmxvZzEwIGRlbm9ybQoJc2hvcnQJCXNyY19zbmFuIC0gdGJsX3RyYW5zCSMgJDE1LTQgZmxvZzEwIHNuYW4KCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMTUtNiBmbG9nMTAgdW5ub3JtCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDE1LTcgRVJST1IKCglzaG9ydAkJc2xvZzIJIC0gdGJsX3RyYW5zCSMgJDE2LTAgZmxvZzIgbm9ybQoJc2hvcnQJCXRfZHoyCSAtIHRibF90cmFucwkjICQxNi0xIGZsb2cyIHplcm8KCXNob3J0CQlzb3ByX2luZiAtIHRibF90cmFucwkjICQxNi0yIGZsb2cyIGluZgoJc2hvcnQJCXNyY19xbmFuIC0gdGJsX3RyYW5zCSMgJDE2LTMgZmxvZzIgcW5hbgoJc2hvcnQJCXNsb2cyZAkgLSB0YmxfdHJhbnMJIyAkMTYtNSBmbG9nMiBkZW5vcm0KCXNob3J0CQlzcmNfc25hbiAtIHRibF90cmFucwkjICQxNi00IGZsb2cyIHNuYW4KCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMTYtNiBmbG9nMiB1bm5vcm0KCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMTYtNyBFUlJPUgoKCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMTctMCBFUlJPUgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxNy0xIEVSUk9SCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDE3LTIgRVJST1IKCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMTctMyBFUlJPUgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxNy00IEVSUk9SCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDE3LTUgRVJST1IKCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMTctNiBFUlJPUgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxNy03IEVSUk9SCgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxOC0wIGZhYnMgbm9ybQoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxOC0xIGZhYnMgemVybwoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxOC0yIGZhYnMgaW5mCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDE4LTMgZmFicyBxbmFuCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDE4LTUgZmFicyBkZW5vcm0KCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMTgtNCBmYWJzIHNuYW4KCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMTgtNiBmYWJzIHVubm9ybQoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxOC03IEVSUk9SCgoJc2hvcnQJCXNjb3NoCSAtIHRibF90cmFucwkjICQxOS0wIGZjb3NoIG5vcm0KCXNob3J0CQlsZF9wb25lCSAtIHRibF90cmFucwkjICQxOS0xIGZjb3NoIHplcm8KCXNob3J0CQlsZF9waW5mCSAtIHRibF90cmFucwkjICQxOS0yIGZjb3NoIGluZgoJc2hvcnQJCXNyY19xbmFuIC0gdGJsX3RyYW5zCSMgJDE5LTMgZmNvc2ggcW5hbgoJc2hvcnQJCXNjb3NoZAkgLSB0YmxfdHJhbnMJIyAkMTktNSBmY29zaCBkZW5vcm0KCXNob3J0CQlzcmNfc25hbiAtIHRibF90cmFucwkjICQxOS00IGZjb3NoIHNuYW4KCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMTktNiBmY29zaCB1bm5vcm0KCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMTktNyBFUlJPUgoKCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMWEtMCBmbmVnIG5vcm0KCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMWEtMSBmbmVnIHplcm8KCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMWEtMiBmbmVnIGluZgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxYS0zIGZuZWcgcW5hbgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxYS01IGZuZWcgZGVub3JtCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDFhLTQgZm5lZyBzbmFuCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDFhLTYgZm5lZyB1bm5vcm0KCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMWEtNyBFUlJPUgoKCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMWItMCBFUlJPUgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxYi0xIEVSUk9SCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDFiLTIgRVJST1IKCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMWItMyBFUlJPUgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxYi00IEVSUk9SCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDFiLTUgRVJST1IKCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMWItNiBFUlJPUgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxYi03IEVSUk9SCgoJc2hvcnQJCXNhY29zCSAtIHRibF90cmFucwkjICQxYy0wIGZhY29zIG5vcm0KCXNob3J0CQlsZF9wcGkyCSAtIHRibF90cmFucwkjICQxYy0xIGZhY29zIHplcm8KCXNob3J0CQl0X29wZXJyCSAtIHRibF90cmFucwkjICQxYy0yIGZhY29zIGluZgoJc2hvcnQJCXNyY19xbmFuIC0gdGJsX3RyYW5zCSMgJDFjLTMgZmFjb3MgcW5hbgoJc2hvcnQJCXNhY29zZAkgLSB0YmxfdHJhbnMJIyAkMWMtNSBmYWNvcyBkZW5vcm0KCXNob3J0CQlzcmNfc25hbiAtIHRibF90cmFucwkjICQxYy00IGZhY29zIHNuYW4KCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMWMtNiBmYWNvcyB1bm5vcm0KCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMWMtNyBFUlJPUgoKCXNob3J0CQlzY29zCSAtIHRibF90cmFucwkjICQxZC0wIGZjb3Mgbm9ybQoJc2hvcnQJCWxkX3BvbmUJIC0gdGJsX3RyYW5zCSMgJDFkLTEgZmNvcyB6ZXJvCglzaG9ydAkJdF9vcGVycgkgLSB0YmxfdHJhbnMJIyAkMWQtMiBmY29zIGluZgoJc2hvcnQJCXNyY19xbmFuIC0gdGJsX3RyYW5zCSMgJDFkLTMgZmNvcyBxbmFuCglzaG9ydAkJc2Nvc2QJIC0gdGJsX3RyYW5zCSMgJDFkLTUgZmNvcyBkZW5vcm0KCXNob3J0CQlzcmNfc25hbiAtIHRibF90cmFucwkjICQxZC00IGZjb3Mgc25hbgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxZC02IGZjb3MgdW5ub3JtCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDFkLTcgRVJST1IKCglzaG9ydAkJc2dldGV4cAkgLSB0YmxfdHJhbnMJIyAkMWUtMCBmZ2V0ZXhwIG5vcm0KCXNob3J0CQlzcmNfemVybyAtIHRibF90cmFucwkjICQxZS0xIGZnZXRleHAgemVybwoJc2hvcnQJCXRfb3BlcnIJIC0gdGJsX3RyYW5zCSMgJDFlLTIgZmdldGV4cCBpbmYKCXNob3J0CQlzcmNfcW5hbiAtIHRibF90cmFucwkjICQxZS0zIGZnZXRleHAgcW5hbgoJc2hvcnQJCXNnZXRleHBkIC0gdGJsX3RyYW5zCSMgJDFlLTUgZmdldGV4cCBkZW5vcm0KCXNob3J0CQlzcmNfc25hbiAtIHRibF90cmFucwkjICQxZS00IGZnZXRleHAgc25hbgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxZS02IGZnZXRleHAgdW5ub3JtCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDFlLTcgRVJST1IKCglzaG9ydAkJc2dldG1hbgkgLSB0YmxfdHJhbnMJIyAkMWYtMCBmZ2V0bWFuIG5vcm0KCXNob3J0CQlzcmNfemVybyAtIHRibF90cmFucwkjICQxZi0xIGZnZXRtYW4gemVybwoJc2hvcnQJCXRfb3BlcnIJIC0gdGJsX3RyYW5zCSMgJDFmLTIgZmdldG1hbiBpbmYKCXNob3J0CQlzcmNfcW5hbiAtIHRibF90cmFucwkjICQxZi0zIGZnZXRtYW4gcW5hbgoJc2hvcnQJCXNnZXRtYW5kIC0gdGJsX3RyYW5zCSMgJDFmLTUgZmdldG1hbiBkZW5vcm0KCXNob3J0CQlzcmNfc25hbiAtIHRibF90cmFucwkjICQxZi00IGZnZXRtYW4gc25hbgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxZi02IGZnZXRtYW4gdW5ub3JtCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDFmLTcgRVJST1IKCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDIwLTAgZmRpdiBub3JtCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDIwLTEgZmRpdiB6ZXJvCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDIwLTIgZmRpdiBpbmYKCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMjAtMyBmZGl2IHFuYW4KCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMjAtNSBmZGl2IGRlbm9ybQoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyMC00IGZkaXYgc25hbgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyMC02IGZkaXYgdW5ub3JtCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDIwLTcgRVJST1IKCglzaG9ydAkJc21vZF9zbm9ybSAtIHRibF90cmFucwkjICQyMS0wIGZtb2Qgbm9ybQoJc2hvcnQJCXNtb2Rfc3plcm8gLSB0YmxfdHJhbnMJIyAkMjEtMSBmbW9kIHplcm8KCXNob3J0CQlzbW9kX3NpbmYgLSB0YmxfdHJhbnMJIyAkMjEtMiBmbW9kIGluZgoJc2hvcnQJCXNvcF9zcW5hbiAtIHRibF90cmFucwkjICQyMS0zIGZtb2QgcW5hbgoJc2hvcnQJCXNtb2Rfc2Rucm0gLSB0YmxfdHJhbnMJIyAkMjEtNSBmbW9kIGRlbm9ybQoJc2hvcnQJCXNvcF9zc25hbiAtIHRibF90cmFucwkjICQyMS00IGZtb2Qgc25hbgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyMS02IGZtb2QgdW5ub3JtCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDIxLTcgRVJST1IKCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDIyLTAgZmFkZCBub3JtCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDIyLTEgZmFkZCB6ZXJvCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDIyLTIgZmFkZCBpbmYKCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMjItMyBmYWRkIHFuYW4KCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMjItNSBmYWRkIGRlbm9ybQoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyMi00IGZhZGQgc25hbgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyMi02IGZhZGQgdW5ub3JtCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDIyLTcgRVJST1IKCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDIzLTAgZm11bCBub3JtCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDIzLTEgZm11bCB6ZXJvCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDIzLTIgZm11bCBpbmYKCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMjMtMyBmbXVsIHFuYW4KCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMjMtNSBmbXVsIGRlbm9ybQoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyMy00IGZtdWwgc25hbgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyMy02IGZtdWwgdW5ub3JtCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDIzLTcgRVJST1IKCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDI0LTAgZnNnbGRpdiBub3JtCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDI0LTEgZnNnbGRpdiB6ZXJvCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDI0LTIgZnNnbGRpdiBpbmYKCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMjQtMyBmc2dsZGl2IHFuYW4KCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMjQtNSBmc2dsZGl2IGRlbm9ybQoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyNC00IGZzZ2xkaXYgc25hbgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyNC02IGZzZ2xkaXYgdW5ub3JtCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDI0LTcgRVJST1IKCglzaG9ydAkJc3JlbV9zbm9ybSAtIHRibF90cmFucwkjICQyNS0wIGZyZW0gbm9ybQoJc2hvcnQJCXNyZW1fc3plcm8gLSB0YmxfdHJhbnMJIyAkMjUtMSBmcmVtIHplcm8KCXNob3J0CQlzcmVtX3NpbmYgLSB0YmxfdHJhbnMJIyAkMjUtMiBmcmVtIGluZgoJc2hvcnQJCXNvcF9zcW5hbiAtIHRibF90cmFucwkjICQyNS0zIGZyZW0gcW5hbgoJc2hvcnQJCXNyZW1fc2Rucm0gLSB0YmxfdHJhbnMJIyAkMjUtNSBmcmVtIGRlbm9ybQoJc2hvcnQJCXNvcF9zc25hbiAtIHRibF90cmFucwkjICQyNS00IGZyZW0gc25hbgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyNS02IGZyZW0gdW5ub3JtCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDI1LTcgRVJST1IKCglzaG9ydAkJc3NjYWxlX3Nub3JtIC0gdGJsX3RyYW5zICMgJDI2LTAgZnNjYWxlIG5vcm0KCXNob3J0CQlzc2NhbGVfc3plcm8gLSB0YmxfdHJhbnMgIyAkMjYtMSBmc2NhbGUgemVybwoJc2hvcnQJCXNzY2FsZV9zaW5mIC0gdGJsX3RyYW5zCSMgJDI2LTIgZnNjYWxlIGluZgoJc2hvcnQJCXNvcF9zcW5hbiAtIHRibF90cmFucwkjICQyNi0zIGZzY2FsZSBxbmFuCglzaG9ydAkJc3NjYWxlX3NkbnJtIC0gdGJsX3RyYW5zICMgJDI2LTUgZnNjYWxlIGRlbm9ybQoJc2hvcnQJCXNvcF9zc25hbiAtIHRibF90cmFucwkjICQyNi00IGZzY2FsZSBzbmFuCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDI2LTYgZnNjYWxlIHVubm9ybQoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyNi03IEVSUk9SCgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyNy0wIGZzZ2xtdWwgbm9ybQoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyNy0xIGZzZ2xtdWwgemVybwoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyNy0yIGZzZ2xtdWwgaW5mCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDI3LTMgZnNnbG11bCBxbmFuCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDI3LTUgZnNnbG11bCBkZW5vcm0KCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMjctNCBmc2dsbXVsIHNuYW4KCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMjctNiBmc2dsbXVsIHVubm9ybQoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyNy03IEVSUk9SCgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyOC0wIGZzdWIgbm9ybQoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyOC0xIGZzdWIgemVybwoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyOC0yIGZzdWIgaW5mCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDI4LTMgZnN1YiBxbmFuCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDI4LTUgZnN1YiBkZW5vcm0KCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMjgtNCBmc3ViIHNuYW4KCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMjgtNiBmc3ViIHVubm9ybQoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyOC03IEVSUk9SCgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyOS0wIEVSUk9SCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDI5LTEgRVJST1IKCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMjktMiBFUlJPUgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyOS0zIEVSUk9SCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDI5LTQgRVJST1IKCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMjktNSBFUlJPUgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyOS02IEVSUk9SCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDI5LTcgRVJST1IKCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDJhLTAgRVJST1IKCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMmEtMSBFUlJPUgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyYS0yIEVSUk9SCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDJhLTMgRVJST1IKCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMmEtNCBFUlJPUgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyYS01IEVSUk9SCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDJhLTYgRVJST1IKCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMmEtNyBFUlJPUgoKCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMmItMCBFUlJPUgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyYi0xIEVSUk9SCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDJiLTIgRVJST1IKCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMmItMyBFUlJPUgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyYi00IEVSUk9SCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDJiLTUgRVJST1IKCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMmItNiBFUlJPUgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyYi03IEVSUk9SCgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyYy0wIEVSUk9SCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDJjLTEgRVJST1IKCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMmMtMiBFUlJPUgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyYy0zIEVSUk9SCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDJjLTQgRVJST1IKCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMmMtNSBFUlJPUgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyYy02IEVSUk9SCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDJjLTcgRVJST1IKCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDJkLTAgRVJST1IKCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMmQtMSBFUlJPUgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyZC0yIEVSUk9SCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDJkLTMgRVJST1IKCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMmQtNCBFUlJPUgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyZC01IEVSUk9SCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDJkLTYgRVJST1IKCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMmQtNyBFUlJPUgoKCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMmUtMCBFUlJPUgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyZS0xIEVSUk9SCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDJlLTIgRVJST1IKCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMmUtMyBFUlJPUgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyZS00IEVSUk9SCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDJlLTUgRVJST1IKCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMmUtNiBFUlJPUgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyZS03IEVSUk9SCgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyZi0wIEVSUk9SCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDJmLTEgRVJST1IKCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMmYtMiBFUlJPUgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyZi0zIEVSUk9SCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDJmLTQgRVJST1IKCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMmYtNSBFUlJPUgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyZi02IEVSUk9SCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDJmLTcgRVJST1IKCglzaG9ydAkJc3NpbmNvcwkgLSB0YmxfdHJhbnMJIyAkMzAtMCBmc2luY29zIG5vcm0KCXNob3J0CQlzc2luY29zeiAtIHRibF90cmFucwkjICQzMC0xIGZzaW5jb3MgemVybwoJc2hvcnQJCXNzaW5jb3NpIC0gdGJsX3RyYW5zCSMgJDMwLTIgZnNpbmNvcyBpbmYKCXNob3J0CQlzc2luY29zcW5hbiAtIHRibF90cmFucwkjICQzMC0zIGZzaW5jb3MgcW5hbgoJc2hvcnQJCXNzaW5jb3NkIC0gdGJsX3RyYW5zCSMgJDMwLTUgZnNpbmNvcyBkZW5vcm0KCXNob3J0CQlzc2luY29zc25hbiAtIHRibF90cmFucwkjICQzMC00IGZzaW5jb3Mgc25hbgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQzMC02IGZzaW5jb3MgdW5ub3JtCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDMwLTcgRVJST1IKCglzaG9ydAkJc3NpbmNvcwkgLSB0YmxfdHJhbnMJIyAkMzEtMCBmc2luY29zIG5vcm0KCXNob3J0CQlzc2luY29zeiAtIHRibF90cmFucwkjICQzMS0xIGZzaW5jb3MgemVybwoJc2hvcnQJCXNzaW5jb3NpIC0gdGJsX3RyYW5zCSMgJDMxLTIgZnNpbmNvcyBpbmYKCXNob3J0CQlzc2luY29zcW5hbiAtIHRibF90cmFucwkjICQzMS0zIGZzaW5jb3MgcW5hbgoJc2hvcnQJCXNzaW5jb3NkIC0gdGJsX3RyYW5zCSMgJDMxLTUgZnNpbmNvcyBkZW5vcm0KCXNob3J0CQlzc2luY29zc25hbiAtIHRibF90cmFucwkjICQzMS00IGZzaW5jb3Mgc25hbgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQzMS02IGZzaW5jb3MgdW5ub3JtCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDMxLTcgRVJST1IKCglzaG9ydAkJc3NpbmNvcwkgLSB0YmxfdHJhbnMJIyAkMzItMCBmc2luY29zIG5vcm0KCXNob3J0CQlzc2luY29zeiAtIHRibF90cmFucwkjICQzMi0xIGZzaW5jb3MgemVybwoJc2hvcnQJCXNzaW5jb3NpIC0gdGJsX3RyYW5zCSMgJDMyLTIgZnNpbmNvcyBpbmYKCXNob3J0CQlzc2luY29zcW5hbiAtIHRibF90cmFucwkjICQzMi0zIGZzaW5jb3MgcW5hbgoJc2hvcnQJCXNzaW5jb3NkIC0gdGJsX3RyYW5zCSMgJDMyLTUgZnNpbmNvcyBkZW5vcm0KCXNob3J0CQlzc2luY29zc25hbiAtIHRibF90cmFucwkjICQzMi00IGZzaW5jb3Mgc25hbgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQzMi02IGZzaW5jb3MgdW5ub3JtCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDMyLTcgRVJST1IKCglzaG9ydAkJc3NpbmNvcwkgLSB0YmxfdHJhbnMJIyAkMzMtMCBmc2luY29zIG5vcm0KCXNob3J0CQlzc2luY29zeiAtIHRibF90cmFucwkjICQzMy0xIGZzaW5jb3MgemVybwoJc2hvcnQJCXNzaW5jb3NpIC0gdGJsX3RyYW5zCSMgJDMzLTIgZnNpbmNvcyBpbmYKCXNob3J0CQlzc2luY29zcW5hbiAtIHRibF90cmFucwkjICQzMy0zIGZzaW5jb3MgcW5hbgoJc2hvcnQJCXNzaW5jb3NkIC0gdGJsX3RyYW5zCSMgJDMzLTUgZnNpbmNvcyBkZW5vcm0KCXNob3J0CQlzc2luY29zc25hbiAtIHRibF90cmFucwkjICQzMy00IGZzaW5jb3Mgc25hbgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQzMy02IGZzaW5jb3MgdW5ub3JtCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDMzLTcgRVJST1IKCglzaG9ydAkJc3NpbmNvcwkgLSB0YmxfdHJhbnMJIyAkMzQtMCBmc2luY29zIG5vcm0KCXNob3J0CQlzc2luY29zeiAtIHRibF90cmFucwkjICQzNC0xIGZzaW5jb3MgemVybwoJc2hvcnQJCXNzaW5jb3NpIC0gdGJsX3RyYW5zCSMgJDM0LTIgZnNpbmNvcyBpbmYKCXNob3J0CQlzc2luY29zcW5hbiAtIHRibF90cmFucwkjICQzNC0zIGZzaW5jb3MgcW5hbgoJc2hvcnQJCXNzaW5jb3NkIC0gdGJsX3RyYW5zCSMgJDM0LTUgZnNpbmNvcyBkZW5vcm0KCXNob3J0CQlzc2luY29zc25hbiAtIHRibF90cmFucwkjICQzNC00IGZzaW5jb3Mgc25hbgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQzNC02IGZzaW5jb3MgdW5ub3JtCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDM0LTcgRVJST1IKCglzaG9ydAkJc3NpbmNvcwkgLSB0YmxfdHJhbnMJIyAkMzUtMCBmc2luY29zIG5vcm0KCXNob3J0CQlzc2luY29zeiAtIHRibF90cmFucwkjICQzNS0xIGZzaW5jb3MgemVybwoJc2hvcnQJCXNzaW5jb3NpIC0gdGJsX3RyYW5zCSMgJDM1LTIgZnNpbmNvcyBpbmYKCXNob3J0CQlzc2luY29zcW5hbiAtIHRibF90cmFucwkjICQzNS0zIGZzaW5jb3MgcW5hbgoJc2hvcnQJCXNzaW5jb3NkIC0gdGJsX3RyYW5zCSMgJDM1LTUgZnNpbmNvcyBkZW5vcm0KCXNob3J0CQlzc2luY29zc25hbiAtIHRibF90cmFucwkjICQzNS00IGZzaW5jb3Mgc25hbgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQzNS02IGZzaW5jb3MgdW5ub3JtCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDM1LTcgRVJST1IKCglzaG9ydAkJc3NpbmNvcwkgLSB0YmxfdHJhbnMJIyAkMzYtMCBmc2luY29zIG5vcm0KCXNob3J0CQlzc2luY29zeiAtIHRibF90cmFucwkjICQzNi0xIGZzaW5jb3MgemVybwoJc2hvcnQJCXNzaW5jb3NpIC0gdGJsX3RyYW5zCSMgJDM2LTIgZnNpbmNvcyBpbmYKCXNob3J0CQlzc2luY29zcW5hbiAtIHRibF90cmFucwkjICQzNi0zIGZzaW5jb3MgcW5hbgoJc2hvcnQJCXNzaW5jb3NkIC0gdGJsX3RyYW5zCSMgJDM2LTUgZnNpbmNvcyBkZW5vcm0KCXNob3J0CQlzc2luY29zc25hbiAtIHRibF90cmFucwkjICQzNi00IGZzaW5jb3Mgc25hbgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQzNi02IGZzaW5jb3MgdW5ub3JtCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDM2LTcgRVJST1IKCglzaG9ydAkJc3NpbmNvcwkgLSB0YmxfdHJhbnMJIyAkMzctMCBmc2luY29zIG5vcm0KCXNob3J0CQlzc2luY29zeiAtIHRibF90cmFucwkjICQzNy0xIGZzaW5jb3MgemVybwoJc2hvcnQJCXNzaW5jb3NpIC0gdGJsX3RyYW5zCSMgJDM3LTIgZnNpbmNvcyBpbmYKCXNob3J0CQlzc2luY29zcW5hbiAtIHRibF90cmFucwkjICQzNy0zIGZzaW5jb3MgcW5hbgoJc2hvcnQJCXNzaW5jb3NkIC0gdGJsX3RyYW5zCSMgJDM3LTUgZnNpbmNvcyBkZW5vcm0KCXNob3J0CQlzc2luY29zc25hbiAtIHRibF90cmFucwkjICQzNy00IGZzaW5jb3Mgc25hbgoJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQzNy02IGZzaW5jb3MgdW5ub3JtCglzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDM3LTcgRVJST1IKCiMjIyMjIyMjIyMKCiMgdGhlIGluc3RydWN0aW9uIGZldGNoIGFjY2VzcyBmb3IgdGhlIGRpc3BsYWNlbWVudCB3b3JkIGZvciB0aGUKIyBmZGJjYyBlbXVsYXRpb24gZmFpbGVkLiBoZXJlLCB3ZSBjcmVhdGUgYW4gYWNjZXNzIGVycm9yIGZyYW1lCiMgZnJvbSB0aGUgY3VycmVudCBmcmFtZSBhbmQgYnJhbmNoIHRvIF9yZWFsX2FjY2VzcygpLgpmdW5pbXBfaWFjYzoKCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCglmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC1mcDEKCgltb3YubAkJVVNFUl9GUElBUiglYTYpLEVYQ19QQyglYTYpICMgc3RvcmUgY3VycmVudCBQQwoKCXVubGsJCSVhNgoKCW1vdi5sCQkoJXNwKSwtKCVzcCkJCSMgc3RvcmUgU1IsaGkoUEMpCgltb3YudwkJMHg4KCVzcCksMHg0KCVzcCkJIyBzdG9yZSBsbyhQQykKCW1vdi53CQkmMHg0MDA4LDB4Niglc3ApCSMgc3RvcmUgdm9mZgoJbW92LmwJCTB4Miglc3ApLDB4OCglc3ApCSMgc3RvcmUgRUEKCW1vdi5sCQkmMHgwOTQyODAwMSwweGMoJXNwKQkjIHN0b3JlIEZTTFcKCglidHN0CQkmMHg1LCglc3ApCQkjIHVzZXIgb3Igc3VwZXJ2aXNvciBtb2RlPwoJYmVxLmIJCWZ1bmltcF9pYWNjX2VuZAkJIyB1c2VyCglic2V0CQkmMHgyLDB4ZCglc3ApCQkjIHNldCBzdXBlcnZpc29yIFRNIGJpdAoKZnVuaW1wX2lhY2NfZW5kOgoJYnJhLmwJCV9yZWFsX2FjY2VzcwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIHNzaW4oKTogICAgIGNvbXB1dGVzIHRoZSBzaW5lIG9mIGEgbm9ybWFsaXplZCBpbnB1dAkJCSMKIyBzc2luZCgpOiAgICBjb21wdXRlcyB0aGUgc2luZSBvZiBhIGRlbm9ybWFsaXplZCBpbnB1dAkJCSMKIyBzY29zKCk6ICAgICBjb21wdXRlcyB0aGUgY29zaW5lIG9mIGEgbm9ybWFsaXplZCBpbnB1dAkJCSMKIyBzY29zZCgpOiAgICBjb21wdXRlcyB0aGUgY29zaW5lIG9mIGEgZGVub3JtYWxpemVkIGlucHV0CQkjCiMgc3NpbmNvcygpOiAgY29tcHV0ZXMgdGhlIHNpbmUgYW5kIGNvc2luZSBvZiBhIG5vcm1hbGl6ZWQgaW5wdXQJIwojIHNzaW5jb3NkKCk6IGNvbXB1dGVzIHRoZSBzaW5lIGFuZCBjb3NpbmUgb2YgYSBkZW5vcm1hbGl6ZWQgaW5wdXQJIwojCQkJCQkJCQkJIwojIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCiMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBpbnB1dAkJCSMKIwlkMCA9IHJvdW5kIHByZWNpc2lvbixtb2RlCQkJCQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKIwlmcDAgPSBzaW4oWCkgb3IgY29zKFgpCQkJCQkJIwojCQkJCQkJCQkJIwojICAgIEZvciBzc2luY29zKFgpOgkJCQkJCQkjCiMJZnAwID0gc2luKFgpCQkJCQkJCSMKIwlmcDEgPSBjb3MoWCkJCQkJCQkJIwojCQkJCQkJCQkJIwojIEFDQ1VSQUNZIGFuZCBNT05PVE9OSUNJVFkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCiMJVGhlIHJldHVybmVkIHJlc3VsdCBpcyB3aXRoaW4gMSB1bHAgaW4gNjQgc2lnbmlmaWNhbnQgYml0LCBpLmUuCSMKIwl3aXRoaW4gMC41MDAxIHVscCB0byA1MyBiaXRzIGlmIHRoZSByZXN1bHQgaXMgc3Vic2VxdWVudGx5CSMKIwlyb3VuZGVkIHRvIGRvdWJsZSBwcmVjaXNpb24uIFRoZSByZXN1bHQgaXMgcHJvdmFibHkgbW9ub3RvbmljCSMKIwlpbiBkb3VibGUgcHJlY2lzaW9uLgkJCQkJCSMKIwkJCQkJCQkJCSMKIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCQkJCQkJCQkJIwojCVNJTiBhbmQgQ09TOgkJCQkJCQkjCiMJMS4gSWYgU0lOIGlzIGludm9rZWQsIHNldCBBZGpOIDo9IDA7IG90aGVyd2lzZSwgc2V0IEFkak4gOj0gMS4JIwojCQkJCQkJCQkJIwojCTIuIElmIHxYfCA+PSAxNVBpIG9yIHxYfCA8IDIqKigtNDApLCBnbyB0byA3LgkJCSMKIwkJCQkJCQkJCSMKIwkzLiBEZWNvbXBvc2UgWCBhcyBYID0gTihQaS8yKSArIHIgd2hlcmUgfHJ8IDw9IFBpLzQuIExldAkjCiMJCWsgPSBOIG1vZCA0LCBzbyBpbiBwYXJ0aWN1bGFyLCBrID0gMCwxLDIsb3IgMy4JCSMKIwkJT3ZlcndyaXRlIGsgYnkgayA6PSBrICsgQWRqTi4JCQkJIwojCQkJCQkJCQkJIwojCTQuIElmIGsgaXMgZXZlbiwgZ28gdG8gNi4JCQkJCSMKIwkJCQkJCQkJCSMKIwk1LiAoayBpcyBvZGQpIFNldCBqIDo9IChrLTEpLzIsIHNnbiA6PSAoLTEpKipqLgkJCSMKIwkJUmV0dXJuIHNnbipjb3Mocikgd2hlcmUgY29zKHIpIGlzIGFwcHJveGltYXRlZCBieSBhbgkjCiMJCWV2ZW4gcG9seW5vbWlhbCBpbiByLCAxICsgcipyKihCMStzKihCMisgLi4uICsgcypCOCkpLAkjCiMJCXMgPSByKnIuCQkJCQkJIwojCQlFeGl0LgkJCQkJCQkjCiMJCQkJCQkJCQkjCiMJNi4gKGsgaXMgZXZlbikgU2V0IGogOj0gay8yLCBzZ24gOj0gKC0xKSoqai4gUmV0dXJuIHNnbipzaW4ocikJIwojCQl3aGVyZSBzaW4ocikgaXMgYXBwcm94aW1hdGVkIGJ5IGFuIG9kZCBwb2x5bm9taWFsIGluIHIJIwojCQlyICsgcipzKihBMStzKihBMisgLi4uICsgcypBNykpLAlzID0gcipyLgkjCiMJCUV4aXQuCQkJCQkJCSMKIwkJCQkJCQkJCSMKIwk3LiBJZiB8WHwgPiAxLCBnbyB0byA5LgkJCQkJCSMKIwkJCQkJCQkJCSMKIwk4LiAofFh8PDIqKigtNDApKSBJZiBTSU4gaXMgaW52b2tlZCwgcmV0dXJuIFg7CQkJIwojCQlvdGhlcndpc2UgcmV0dXJuIDEuCQkJCQkjCiMJCQkJCQkJCQkjCiMJOS4gT3ZlcndyaXRlIFggYnkgWCA6PSBYIHJlbSAyUGkuIE5vdyB0aGF0IHxYfCA8PSBQaSwJCSMKIwkJZ28gYmFjayB0byAzLgkJCQkJCSMKIwkJCQkJCQkJCSMKIwlTSU5DT1M6CQkJCQkJCQkjCiMJMS4gSWYgfFh8ID49IDE1UGkgb3IgfFh8IDwgMioqKC00MCksIGdvIHRvIDYuCQkJIwojCQkJCQkJCQkJIwojCTIuIERlY29tcG9zZSBYIGFzIFggPSBOKFBpLzIpICsgciB3aGVyZSB8cnwgPD0gUGkvNC4gTGV0CSMKIwkJayA9IE4gbW9kIDQsIHNvIGluIHBhcnRpY3VsYXIsIGsgPSAwLDEsMixvciAzLgkJIwojCQkJCQkJCQkJIwojCTMuIElmIGsgaXMgZXZlbiwgZ28gdG8gNS4JCQkJCSMKIwkJCQkJCQkJCSMKIwk0LiAoayBpcyBvZGQpIFNldCBqMSA6PSAoay0xKS8yLCBqMiA6PSBqMSAoRU9SKSAoayBtb2QgMiksIGllLgkjCiMJCWoxIGV4Y2x1c2l2ZSBvciB3aXRoIHRoZSBsLnMuYi4gb2Ygay4JCQkjCiMJCXNnbjEgOj0gKC0xKSoqajEsIHNnbjIgOj0gKC0xKSoqajIuCQkJIwojCQlTSU4oWCkgPSBzZ24xICogY29zKHIpIGFuZCBDT1MoWCkgPSBzZ24yKnNpbihyKSB3aGVyZQkjCiMJCXNpbihyKSBhbmQgY29zKHIpIGFyZSBjb21wdXRlZCBhcyBvZGQgYW5kIGV2ZW4JCSMKIwkJcG9seW5vbWlhbHMgaW4gciwgcmVzcGVjdGl2ZWx5LiBFeGl0CQkJIwojCQkJCQkJCQkJIwojCTUuIChrIGlzIGV2ZW4pIFNldCBqMSA6PSBrLzIsIHNnbjEgOj0gKC0xKSoqajEuCQkJIwojCQlTSU4oWCkgPSBzZ24xICogc2luKHIpIGFuZCBDT1MoWCkgPSBzZ24xKmNvcyhyKSB3aGVyZQkjCiMJCXNpbihyKSBhbmQgY29zKHIpIGFyZSBjb21wdXRlZCBhcyBvZGQgYW5kIGV2ZW4JCSMKIwkJcG9seW5vbWlhbHMgaW4gciwgcmVzcGVjdGl2ZWx5LiBFeGl0CQkJIwojCQkJCQkJCQkJIwojCTYuIElmIHxYfCA+IDEsIGdvIHRvIDguCQkJCQkJIwojCQkJCQkJCQkJIwojCTcuICh8WHw8MioqKC00MCkpIFNJTihYKSA9IFggYW5kIENPUyhYKSA9IDEuIEV4aXQuCQkjCiMJCQkJCQkJCQkjCiMJOC4gT3ZlcndyaXRlIFggYnkgWCA6PSBYIHJlbSAyUGkuIE5vdyB0aGF0IHxYfCA8PSBQaSwJCSMKIwkJZ28gYmFjayB0byAyLgkJCQkJCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKU0lOQTc6CWxvbmcJCTB4QkQ2QUFBNzcsMHhDQ0M5OTRGNQpTSU5BNjoJbG9uZwkJMHgzREU2MTIwOSwweDdBQUU4REExClNJTkE1Oglsb25nCQkweEJFNUFFNjQ1LDB4MkExMThBRTQKU0lOQTQ6CWxvbmcJCTB4M0VDNzFERTMsMHhBNTM0MTUzMQpTSU5BMzoJbG9uZwkJMHhCRjJBMDFBMCwweDFBMDE4QjU5LDB4MDAwMDAwMDAsMHgwMDAwMDAwMApTSU5BMjoJbG9uZwkJMHgzRkY4MDAwMCwweDg4ODg4ODg4LDB4ODg4ODU5QUYsMHgwMDAwMDAwMApTSU5BMToJbG9uZwkJMHhCRkZDMDAwMCwweEFBQUFBQUFBLDB4QUFBQUFBOTksMHgwMDAwMDAwMAoKQ09TQjg6CWxvbmcJCTB4M0QyQUM0RDAsMHhENjAxMUVFMwpDT1NCNzoJbG9uZwkJMHhCREE5Mzk2RiwweDlGNDVBQzE5CkNPU0I2Oglsb25nCQkweDNFMjFFRUQ5LDB4MDYxMkM5NzIKQ09TQjU6CWxvbmcJCTB4QkU5MjdFNEYsMHhCNzlEOUZDRgpDT1NCNDoJbG9uZwkJMHgzRUZBMDFBMCwweDFBMDFENDIzLDB4MDAwMDAwMDAsMHgwMDAwMDAwMApDT1NCMzoJbG9uZwkJMHhCRkY1MDAwMCwweEI2MEI2MEI2LDB4MEI2MUQ0MzgsMHgwMDAwMDAwMApDT1NCMjoJbG9uZwkJMHgzRkZBMDAwMCwweEFBQUFBQUFBLDB4QUFBQUFCNUUKQ09TQjE6CWxvbmcJCTB4QkYwMDAwMDAKCglzZXQJCUlOQVJHLEZQX1NDUjAKCglzZXQJCVgsRlBfU0NSMAojCXNldAkJWERDQVJFLFgrMgoJc2V0CQlYRlJBQyxYKzQKCglzZXQJCVJQUklNRSxGUF9TQ1IwCglzZXQJCVNQUklNRSxGUF9TQ1IxCgoJc2V0CQlQT1NORUcxLExfU0NSMQoJc2V0CQlUV09UTzYzLExfU0NSMQoKCXNldAkJRU5ERkxBRyxMX1NDUjIKCXNldAkJSU5ULExfU0NSMgoKCXNldAkJQURKTixMX1NDUjMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCglnbG9iYWwJCXNzaW4Kc3NpbjoKCW1vdi5sCQkmMCxBREpOKCVhNikJCSMgeWVzOyBTRVQgQURKTiBUTyAwCglicmEuYgkJU0lOQkdOCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoJZ2xvYmFsCQlzY29zCnNjb3M6Cgltb3YubAkJJjEsQURKTiglYTYpCQkjIHllczsgU0VUIEFESk4gVE8gMQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKU0lOQkdOOgojLS1TQVZFIEZQQ1IsIEZQMS4gQ0hFQ0sgSUYgfFh8IElTIFRPTyBTTUFMTCBPUiBMQVJHRQoKCWZtb3YueAkJKCVhMCksJWZwMAkJIyBMT0FEIElOUFVUCglmbW92LngJCSVmcDAsWCglYTYpCQkjIHNhdmUgaW5wdXQgYXQgWAoKIyAiQ09NUEFDVElGWSIgWAoJbW92LmwJCSglYTApLCVkMQkJIyBwdXQgZXhwIGluIGhpIHdvcmQKCW1vdi53CQk0KCVhMCksJWQxCQkjIGZldGNoIGhpKG1hbikKCWFuZC5sCQkmMHg3RkZGRkZGRiwlZDEJCSMgc3RyaXAgc2lnbgoKCWNtcGkubAkJJWQxLCYweDNGRDc4MDAwCQkjIGlzIHxYfCA+PSAyKiooLTQwKT8KCWJnZS5iCQlTT0sxCQkJIyBubwoJYnJhLncJCVNJTlNNCQkJIyB5ZXM7IGlucHV0IGlzIHZlcnkgc21hbGwKClNPSzE6CgljbXAubAkJJWQxLCYweDQwMDRCQzdFCQkjIGlzIHxYfCA8IDE1IFBJPwoJYmx0LmIJCVNJTk1BSU4JCQkjIG5vCglicmEudwkJU1JFRFVDRVgJCSMgeWVzOyBpbnB1dCBpcyB2ZXJ5IGxhcmdlCgojLS1USElTIElTIFRIRSBVU1VBTCBDQVNFLCB8WHwgPD0gMTUgUEkuCiMtLVRIRSBBUkdVTUVOVCBSRURVQ1RJT04gSVMgRE9ORSBCWSBUQUJMRSBMT09LIFVQLgpTSU5NQUlOOgoJZm1vdi54CQklZnAwLCVmcDEKCWZtdWwuZAkJVFdPQllQSSglcGMpLCVmcDEJIyBYKjIvUEkKCglsZWEJCVBJVEJMKzB4MjAwKCVwYyksJWExCSMgVEFCTEUgT0YgTipQSS8yLCBOID0gLTMyLC4uLiwzMgoKCWZtb3YubAkJJWZwMSxJTlQoJWE2KQkJIyBDT05WRVJUIFRPIElOVEVHRVIKCgltb3YubAkJSU5UKCVhNiksJWQxCQkjIG1ha2UgYSBjb3B5IG9mIE4KCWFzbC5sCQkmNCwlZDEJCQkjIE4gKj0gMTYKCWFkZC5sCQklZDEsJWExCQkJIyB0YmxfYWRkciA9IGExICsgKE4qMTYpCgojIEExIElTIFRIRSBBRERSRVNTIE9GIE4qUElCWTIKIyAuLi5XSElDSCBJUyBJTiBUV08gUElFQ0VTIFkxICYgWTIKCWZzdWIueAkJKCVhMSkrLCVmcDAJCSMgWC1ZMQoJZnN1Yi5zCQkoJWExKSwlZnAwCQkjIGZwMCA9IFIgPSAoWC1ZMSktWTIKClNJTkNPTlQ6CiMtLWNvbnRpbnVhdGlvbiBmcm9tIFJFRFVDRVgKCiMtLUdFVCBOK0FESk4gQU5EIFNFRSBJRiBTSU4oUikgT1IgQ09TKFIpIElTIE5FRURFRAoJbW92LmwJCUlOVCglYTYpLCVkMQoJYWRkLmwJCUFESk4oJWE2KSwlZDEJCSMgU0VFIElGIEQwIElTIE9ERCBPUiBFVkVOCglyb3IubAkJJjEsJWQxCQkJIyBEMCBXQVMgT0REIElGRiBEMCBJUyBORUdBVElWRQoJY21wLmwJCSVkMSwmMAoJYmx0LncJCUNPU1BPTFkKCiMtLUxFVCBKIEJFIFRIRSBMRUFTVCBTSUcuIEJJVCBPRiBEMCwgTEVUIFNHTiA6PSAoLTEpKipKLgojLS1USEVOIFdFIFJFVFVSTglTR04qU0lOKFIpLiBTR04qU0lOKFIpIElTIENPTVBVVEVEIEJZCiMtLVInICsgUicqUyooQTEgKyBTKEEyICsgUyhBMyArIFMoQTQgKyAuLi4gKyBTQTcpKSkpLCBXSEVSRQojLS1SJyA9IFNHTipSLCBTPVIqUi4gVEhJUyBDQU4gQkUgUkVXUklUVEVOIEFTCiMtLVInICsgUicqUyooIFtBMStUKEEzK1QoQTUrVEE3KSldICsgW1MoQTIrVChBNCtUQTYpKV0pCiMtLVdIRVJFIFQ9UypTLgojLS1OT1RFIFRIQVQgQTMgVEhST1VHSCBBNyBBUkUgU1RPUkVEIElOIERPVUJMRSBQUkVDSVNJT04KIy0tV0hJTEUgQTEgQU5EIEEyIEFSRSBJTiBET1VCTEUtRVhURU5ERUQgRk9STUFULgpTSU5QT0xZOgoJZm1vdm0ueAkJJjB4MGMsLSglc3ApCQkjIHNhdmUgZnAyL2ZwMwoKCWZtb3YueAkJJWZwMCxYKCVhNikJCSMgWCBJUyBSCglmbXVsLngJCSVmcDAsJWZwMAkJIyBGUDAgSVMgUwoKCWZtb3YuZAkJU0lOQTcoJXBjKSwlZnAzCglmbW92LmQJCVNJTkE2KCVwYyksJWZwMgoKCWZtb3YueAkJJWZwMCwlZnAxCglmbXVsLngJCSVmcDEsJWZwMQkJIyBGUDEgSVMgVAoKCXJvci5sCQkmMSwlZDEKCWFuZC5sCQkmMHg4MDAwMDAwMCwlZDEKIyAuLi5MRUFTVCBTSUcuIEJJVCBPRiBEMCBJTiBTSUdOIFBPU0lUSU9OCgllb3IubAkJJWQxLFgoJWE2KQkJIyBYIElTIE5PVyBSJz0gU0dOKlIKCglmbXVsLngJCSVmcDEsJWZwMwkJIyBUQTcKCWZtdWwueAkJJWZwMSwlZnAyCQkjIFRBNgoKCWZhZGQuZAkJU0lOQTUoJXBjKSwlZnAzCQkjIEE1K1RBNwoJZmFkZC5kCQlTSU5BNCglcGMpLCVmcDIJCSMgQTQrVEE2CgoJZm11bC54CQklZnAxLCVmcDMJCSMgVChBNStUQTcpCglmbXVsLngJCSVmcDEsJWZwMgkJIyBUKEE0K1RBNikKCglmYWRkLmQJCVNJTkEzKCVwYyksJWZwMwkJIyBBMytUKEE1K1RBNykKCWZhZGQueAkJU0lOQTIoJXBjKSwlZnAyCQkjIEEyK1QoQTQrVEE2KQoKCWZtdWwueAkJJWZwMywlZnAxCQkjIFQoQTMrVChBNStUQTcpKQoKCWZtdWwueAkJJWZwMCwlZnAyCQkjIFMoQTIrVChBNCtUQTYpKQoJZmFkZC54CQlTSU5BMSglcGMpLCVmcDEJCSMgQTErVChBMytUKEE1K1RBNykpCglmbXVsLngJCVgoJWE2KSwlZnAwCQkjIFInKlMKCglmYWRkLngJCSVmcDIsJWZwMQkJIyBbQTErVChBMytUKEE1K1RBNykpXStbUyhBMitUKEE0K1RBNikpXQoKCWZtdWwueAkJJWZwMSwlZnAwCQkjIFNJTihSJyktUicKCglmbW92bS54CQkoJXNwKSssJjB4MzAJCSMgcmVzdG9yZSBmcDIvZnAzCgoJZm1vdi5sCQklZDAsJWZwY3IJCSMgcmVzdG9yZSB1c2VycyByb3VuZCBtb2RlLHByZWMKCWZhZGQueAkJWCglYTYpLCVmcDAJCSMgbGFzdCBpbnN0IC0gcG9zc2libGUgZXhjZXB0aW9uIHNldAoJYnJhCQl0X2lueDIKCiMtLUxFVCBKIEJFIFRIRSBMRUFTVCBTSUcuIEJJVCBPRiBEMCwgTEVUIFNHTiA6PSAoLTEpKipKLgojLS1USEVOIFdFIFJFVFVSTglTR04qQ09TKFIpLiBTR04qQ09TKFIpIElTIENPTVBVVEVEIEJZCiMtLVNHTiArIFMnKihCMSArIFMoQjIgKyBTKEIzICsgUyhCNCArIC4uLiArIFNCOCkpKSksIFdIRVJFCiMtLVM9UipSIEFORCBTJz1TR04qUy4gVEhJUyBDQU4gQkUgUkVXUklUVEVOIEFTCiMtLVNHTiArIFMnKihbQjErVChCMytUKEI1K1RCNykpXSArIFtTKEIyK1QoQjQrVChCNitUQjgpKSldKQojLS1XSEVSRSBUPVMqUy4KIy0tTk9URSBUSEFUIEI0IFRIUk9VR0ggQjggQVJFIFNUT1JFRCBJTiBET1VCTEUgUFJFQ0lTSU9OCiMtLVdISUxFIEIyIEFORCBCMyBBUkUgSU4gRE9VQkxFLUVYVEVOREVEIEZPUk1BVCwgQjEgSVMgLTEvMgojLS1BTkQgSVMgVEhFUkVGT1JFIFNUT1JFRCBBUyBTSU5HTEUgUFJFQ0lTSU9OLgpDT1NQT0xZOgoJZm1vdm0ueAkJJjB4MGMsLSglc3ApCQkjIHNhdmUgZnAyL2ZwMwoKCWZtdWwueAkJJWZwMCwlZnAwCQkjIEZQMCBJUyBTCgoJZm1vdi5kCQlDT1NCOCglcGMpLCVmcDIKCWZtb3YuZAkJQ09TQjcoJXBjKSwlZnAzCgoJZm1vdi54CQklZnAwLCVmcDEKCWZtdWwueAkJJWZwMSwlZnAxCQkjIEZQMSBJUyBUCgoJZm1vdi54CQklZnAwLFgoJWE2KQkJIyBYIElTIFMKCXJvci5sCQkmMSwlZDEKCWFuZC5sCQkmMHg4MDAwMDAwMCwlZDEKIyAuLi5MRUFTVCBTSUcuIEJJVCBPRiBEMCBJTiBTSUdOIFBPU0lUSU9OCgoJZm11bC54CQklZnAxLCVmcDIJCSMgVEI4CgoJZW9yLmwJCSVkMSxYKCVhNikJCSMgWCBJUyBOT1cgUyc9IFNHTipTCglhbmQubAkJJjB4ODAwMDAwMDAsJWQxCgoJZm11bC54CQklZnAxLCVmcDMJCSMgVEI3CgoJb3IubAkJJjB4M0Y4MDAwMDAsJWQxCQkjIEQwIElTIFNHTiBJTiBTSU5HTEUKCW1vdi5sCQklZDEsUE9TTkVHMSglYTYpCgoJZmFkZC5kCQlDT1NCNiglcGMpLCVmcDIJCSMgQjYrVEI4CglmYWRkLmQJCUNPU0I1KCVwYyksJWZwMwkJIyBCNStUQjcKCglmbXVsLngJCSVmcDEsJWZwMgkJIyBUKEI2K1RCOCkKCWZtdWwueAkJJWZwMSwlZnAzCQkjIFQoQjUrVEI3KQoKCWZhZGQuZAkJQ09TQjQoJXBjKSwlZnAyCQkjIEI0K1QoQjYrVEI4KQoJZmFkZC54CQlDT1NCMyglcGMpLCVmcDMJCSMgQjMrVChCNStUQjcpCgoJZm11bC54CQklZnAxLCVmcDIJCSMgVChCNCtUKEI2K1RCOCkpCglmbXVsLngJCSVmcDMsJWZwMQkJIyBUKEIzK1QoQjUrVEI3KSkKCglmYWRkLngJCUNPU0IyKCVwYyksJWZwMgkJIyBCMitUKEI0K1QoQjYrVEI4KSkKCWZhZGQucwkJQ09TQjEoJXBjKSwlZnAxCQkjIEIxK1QoQjMrVChCNStUQjcpKQoKCWZtdWwueAkJJWZwMiwlZnAwCQkjIFMoQjIrVChCNCtUKEI2K1RCOCkpKQoKCWZhZGQueAkJJWZwMSwlZnAwCgoJZm11bC54CQlYKCVhNiksJWZwMAoKCWZtb3ZtLngJCSglc3ApKywmMHgzMAkJIyByZXN0b3JlIGZwMi9mcDMKCglmbW92LmwJCSVkMCwlZnBjcgkJIyByZXN0b3JlIHVzZXJzIHJvdW5kIG1vZGUscHJlYwoJZmFkZC5zCQlQT1NORUcxKCVhNiksJWZwMAkjIGxhc3QgaW5zdCAtIHBvc3NpYmxlIGV4Y2VwdGlvbiBzZXQKCWJyYQkJdF9pbngyCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgojIFNJTmU6IEJpZyBPUiBTbWFsbD8KIy0tSUYgfFh8ID4gMTVQSSwgV0UgVVNFIFRIRSBHRU5FUkFMIEFSR1VNRU5UIFJFRFVDVElPTi4KIy0tSUYgfFh8IDwgMioqKC00MCksIFJFVFVSTiBYIE9SIDEuClNJTkJPUlM6CgljbXAubAkJJWQxLCYweDNGRkY4MDAwCgliZ3QubAkJU1JFRFVDRVgKClNJTlNNOgoJbW92LmwJCUFESk4oJWE2KSwlZDEKCWNtcC5sCQklZDEsJjAKCWJndC5iCQlDT1NUSU5ZCgojIGhlcmUsIHRoZSBvcGVyYXRpb24gbWF5IHVuZGVyZmxvdyBpZmYgdGhlIHByZWNpc2lvbiBpcyBzZ2wgb3IgZGJsLgojIGV4dGVuZGVkIGRlbm9ybXMgYXJlIGhhbmRsZWQgdGhyb3VnaCBhbm90aGVyIGVudHJ5IHBvaW50LgpTSU5USU5ZOgojCW1vdi53CQkmMHgwMDAwLFhEQ0FSRSglYTYpCSMgSlVTVCBJTiBDQVNFCgoJZm1vdi5sCQklZDAsJWZwY3IJCSMgcmVzdG9yZSB1c2VycyByb3VuZCBtb2RlLHByZWMKCW1vdi5iCQkmRk1PVl9PUCwlZDEJCSMgbGFzdCBpbnN0IGlzIE1PVkUKCWZtb3YueAkJWCglYTYpLCVmcDAJCSMgbGFzdCBpbnN0IC0gcG9zc2libGUgZXhjZXB0aW9uIHNldAoJYnJhCQl0X2NhdGNoCgpDT1NUSU5ZOgoJZm1vdi5zCQkmMHgzRjgwMDAwMCwlZnAwCSMgZnAwID0gMS4wCglmbW92LmwJCSVkMCwlZnBjcgkJIyByZXN0b3JlIHVzZXJzIHJvdW5kIG1vZGUscHJlYwoJZmFkZC5zCQkmMHg4MDgwMDAwMCwlZnAwCSMgbGFzdCBpbnN0IC0gcG9zc2libGUgZXhjZXB0aW9uIHNldAoJYnJhCQl0X3BpbngyCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCWdsb2JhbAkJc3NpbmQKIy0tU0lOKFgpID0gWCBGT1IgREVOT1JNQUxJWkVEIFgKc3NpbmQ6CglicmEJCXRfZXh0ZG5ybQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCWdsb2JhbAkJc2Nvc2QKIy0tQ09TKFgpID0gMSBGT1IgREVOT1JNQUxJWkVEIFgKc2Nvc2Q6CglmbW92LnMJCSYweDNGODAwMDAwLCVmcDAJIyBmcDAgPSAxLjAKCWJyYQkJdF9waW54MgoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCglnbG9iYWwJCXNzaW5jb3MKc3NpbmNvczoKIy0tU0VUIEFESk4gVE8gNAoJbW92LmwJCSY0LEFESk4oJWE2KQoKCWZtb3YueAkJKCVhMCksJWZwMAkJIyBMT0FEIElOUFVUCglmbW92LngJCSVmcDAsWCglYTYpCgoJbW92LmwJCSglYTApLCVkMQoJbW92LncJCTQoJWEwKSwlZDEKCWFuZC5sCQkmMHg3RkZGRkZGRiwlZDEJCSMgQ09NUEFDVElGWSBYCgoJY21wLmwJCSVkMSwmMHgzRkQ3ODAwMAkJIyB8WHwgPj0gMioqKC00MCk/CgliZ2UuYgkJU0NPSzEKCWJyYS53CQlTQ1NNCgpTQ09LMToKCWNtcC5sCQklZDEsJjB4NDAwNEJDN0UJCSMgfFh8IDwgMTUgUEk/CglibHQuYgkJU0NNQUlOCglicmEudwkJU1JFRFVDRVgKCgojLS1USElTIElTIFRIRSBVU1VBTCBDQVNFLCB8WHwgPD0gMTUgUEkuCiMtLVRIRSBBUkdVTUVOVCBSRURVQ1RJT04gSVMgRE9ORSBCWSBUQUJMRSBMT09LIFVQLgpTQ01BSU46CglmbW92LngJCSVmcDAsJWZwMQoKCWZtdWwuZAkJVFdPQllQSSglcGMpLCVmcDEJIyBYKjIvUEkKCglsZWEJCVBJVEJMKzB4MjAwKCVwYyksJWExCSMgVEFCTEUgT0YgTipQSS8yLCBOID0gLTMyLC4uLiwzMgoKCWZtb3YubAkJJWZwMSxJTlQoJWE2KQkJIyBDT05WRVJUIFRPIElOVEVHRVIKCgltb3YubAkJSU5UKCVhNiksJWQxCglhc2wubAkJJjQsJWQxCglhZGQubAkJJWQxLCVhMQkJCSMgQUREUkVTUyBPRiBOKlBJQlkyLCBJTiBZMSwgWTIKCglmc3ViLngJCSglYTEpKywlZnAwCQkjIFgtWTEKCWZzdWIucwkJKCVhMSksJWZwMAkJIyBGUDAgSVMgUiA9IChYLVkxKS1ZMgoKU0NDT05UOgojLS1jb250aW51YXRpb24gcG9pbnQgZnJvbSBSRURVQ0VYCgoJbW92LmwJCUlOVCglYTYpLCVkMQoJcm9yLmwJCSYxLCVkMQoJY21wLmwJCSVkMSwmMAkJCSMgRDAgPCAwIElGRiBOIElTIE9ERAoJYmdlLncJCU5FVkVOCgpTTk9ERDoKIy0tUkVHSVNURVJTIFNBVkVEIFNPIEZBUjogRDAsIEEwLCBGUDIuCglmbW92bS54CQkmMHgwNCwtKCVzcCkJCSMgc2F2ZSBmcDIKCglmbW92LngJCSVmcDAsUlBSSU1FKCVhNikKCWZtdWwueAkJJWZwMCwlZnAwCQkjIEZQMCBJUyBTID0gUipSCglmbW92LmQJCVNJTkE3KCVwYyksJWZwMQkJIyBBNwoJZm1vdi5kCQlDT1NCOCglcGMpLCVmcDIJCSMgQjgKCWZtdWwueAkJJWZwMCwlZnAxCQkjIFNBNwoJZm11bC54CQklZnAwLCVmcDIJCSMgU0I4CgoJbW92LmwJCSVkMiwtKCVzcCkKCW1vdi5sCQklZDEsJWQyCglyb3IubAkJJjEsJWQyCglhbmQubAkJJjB4ODAwMDAwMDAsJWQyCgllb3IubAkJJWQxLCVkMgoJYW5kLmwJCSYweDgwMDAwMDAwLCVkMgoKCWZhZGQuZAkJU0lOQTYoJXBjKSwlZnAxCQkjIEE2K1NBNwoJZmFkZC5kCQlDT1NCNyglcGMpLCVmcDIJCSMgQjcrU0I4CgoJZm11bC54CQklZnAwLCVmcDEJCSMgUyhBNitTQTcpCgllb3IubAkJJWQyLFJQUklNRSglYTYpCgltb3YubAkJKCVzcCkrLCVkMgoJZm11bC54CQklZnAwLCVmcDIJCSMgUyhCNytTQjgpCglyb3IubAkJJjEsJWQxCglhbmQubAkJJjB4ODAwMDAwMDAsJWQxCgltb3YubAkJJjB4M0Y4MDAwMDAsUE9TTkVHMSglYTYpCgllb3IubAkJJWQxLFBPU05FRzEoJWE2KQoKCWZhZGQuZAkJU0lOQTUoJXBjKSwlZnAxCQkjIEE1K1MoQTYrU0E3KQoJZmFkZC5kCQlDT1NCNiglcGMpLCVmcDIJCSMgQjYrUyhCNytTQjgpCgoJZm11bC54CQklZnAwLCVmcDEJCSMgUyhBNStTKEE2K1NBNykpCglmbXVsLngJCSVmcDAsJWZwMgkJIyBTKEI2K1MoQjcrU0I4KSkKCWZtb3YueAkJJWZwMCxTUFJJTUUoJWE2KQoKCWZhZGQuZAkJU0lOQTQoJXBjKSwlZnAxCQkjIEE0K1MoQTUrUyhBNitTQTcpKQoJZW9yLmwJCSVkMSxTUFJJTUUoJWE2KQoJZmFkZC5kCQlDT1NCNSglcGMpLCVmcDIJCSMgQjUrUyhCNitTKEI3K1NCOCkpCgoJZm11bC54CQklZnAwLCVmcDEJCSMgUyhBNCsuLi4pCglmbXVsLngJCSVmcDAsJWZwMgkJIyBTKEI1Ky4uLikKCglmYWRkLmQJCVNJTkEzKCVwYyksJWZwMQkJIyBBMytTKEE0Ky4uLikKCWZhZGQuZAkJQ09TQjQoJXBjKSwlZnAyCQkjIEI0K1MoQjUrLi4uKQoKCWZtdWwueAkJJWZwMCwlZnAxCQkjIFMoQTMrLi4uKQoJZm11bC54CQklZnAwLCVmcDIJCSMgUyhCNCsuLi4pCgoJZmFkZC54CQlTSU5BMiglcGMpLCVmcDEJCSMgQTIrUyhBMysuLi4pCglmYWRkLngJCUNPU0IzKCVwYyksJWZwMgkJIyBCMytTKEI0Ky4uLikKCglmbXVsLngJCSVmcDAsJWZwMQkJIyBTKEEyKy4uLikKCWZtdWwueAkJJWZwMCwlZnAyCQkjIFMoQjMrLi4uKQoKCWZhZGQueAkJU0lOQTEoJXBjKSwlZnAxCQkjIEExK1MoQTIrLi4uKQoJZmFkZC54CQlDT1NCMiglcGMpLCVmcDIJCSMgQjIrUyhCMysuLi4pCgoJZm11bC54CQklZnAwLCVmcDEJCSMgUyhBMSsuLi4pCglmbXVsLngJCSVmcDIsJWZwMAkJIyBTKEIyKy4uLikKCglmbXVsLngJCVJQUklNRSglYTYpLCVmcDEJIyBSJ1MoQTErLi4uKQoJZmFkZC5zCQlDT1NCMSglcGMpLCVmcDAJCSMgQjErUyhCMi4uLikKCWZtdWwueAkJU1BSSU1FKCVhNiksJWZwMAkjIFMnKEIxK1MoQjIrLi4uKSkKCglmbW92bS54CQkoJXNwKSssJjB4MjAJCSMgcmVzdG9yZSBmcDIKCglmbW92LmwJCSVkMCwlZnBjcgoJZmFkZC54CQlSUFJJTUUoJWE2KSwlZnAxCSMgQ09TKFgpCglic3IJCXN0b19jb3MJCQkjIHN0b3JlIGNvc2luZSByZXN1bHQKCWZhZGQucwkJUE9TTkVHMSglYTYpLCVmcDAJIyBTSU4oWCkKCWJyYQkJdF9pbngyCgpORVZFTjoKIy0tUkVHSVNURVJTIFNBVkVEIFNPIEZBUjogRlAyLgoJZm1vdm0ueAkJJjB4MDQsLSglc3ApCQkjIHNhdmUgZnAyCgoJZm1vdi54CQklZnAwLFJQUklNRSglYTYpCglmbXVsLngJCSVmcDAsJWZwMAkJIyBGUDAgSVMgUyA9IFIqUgoKCWZtb3YuZAkJQ09TQjgoJXBjKSwlZnAxCQkjIEI4CglmbW92LmQJCVNJTkE3KCVwYyksJWZwMgkJIyBBNwoKCWZtdWwueAkJJWZwMCwlZnAxCQkjIFNCOAoJZm1vdi54CQklZnAwLFNQUklNRSglYTYpCglmbXVsLngJCSVmcDAsJWZwMgkJIyBTQTcKCglyb3IubAkJJjEsJWQxCglhbmQubAkJJjB4ODAwMDAwMDAsJWQxCgoJZmFkZC5kCQlDT1NCNyglcGMpLCVmcDEJCSMgQjcrU0I4CglmYWRkLmQJCVNJTkE2KCVwYyksJWZwMgkJIyBBNitTQTcKCgllb3IubAkJJWQxLFJQUklNRSglYTYpCgllb3IubAkJJWQxLFNQUklNRSglYTYpCgoJZm11bC54CQklZnAwLCVmcDEJCSMgUyhCNytTQjgpCgoJb3IubAkJJjB4M0Y4MDAwMDAsJWQxCgltb3YubAkJJWQxLFBPU05FRzEoJWE2KQoKCWZtdWwueAkJJWZwMCwlZnAyCQkjIFMoQTYrU0E3KQoKCWZhZGQuZAkJQ09TQjYoJXBjKSwlZnAxCQkjIEI2K1MoQjcrU0I4KQoJZmFkZC5kCQlTSU5BNSglcGMpLCVmcDIJCSMgQTUrUyhBNitTQTcpCgoJZm11bC54CQklZnAwLCVmcDEJCSMgUyhCNitTKEI3K1NCOCkpCglmbXVsLngJCSVmcDAsJWZwMgkJIyBTKEE1K1MoQTYrU0E3KSkKCglmYWRkLmQJCUNPU0I1KCVwYyksJWZwMQkJIyBCNStTKEI2K1MoQjcrU0I4KSkKCWZhZGQuZAkJU0lOQTQoJXBjKSwlZnAyCQkjIEE0K1MoQTUrUyhBNitTQTcpKQoKCWZtdWwueAkJJWZwMCwlZnAxCQkjIFMoQjUrLi4uKQoJZm11bC54CQklZnAwLCVmcDIJCSMgUyhBNCsuLi4pCgoJZmFkZC5kCQlDT1NCNCglcGMpLCVmcDEJCSMgQjQrUyhCNSsuLi4pCglmYWRkLmQJCVNJTkEzKCVwYyksJWZwMgkJIyBBMytTKEE0Ky4uLikKCglmbXVsLngJCSVmcDAsJWZwMQkJIyBTKEI0Ky4uLikKCWZtdWwueAkJJWZwMCwlZnAyCQkjIFMoQTMrLi4uKQoKCWZhZGQueAkJQ09TQjMoJXBjKSwlZnAxCQkjIEIzK1MoQjQrLi4uKQoJZmFkZC54CQlTSU5BMiglcGMpLCVmcDIJCSMgQTIrUyhBMysuLi4pCgoJZm11bC54CQklZnAwLCVmcDEJCSMgUyhCMysuLi4pCglmbXVsLngJCSVmcDAsJWZwMgkJIyBTKEEyKy4uLikKCglmYWRkLngJCUNPU0IyKCVwYyksJWZwMQkJIyBCMitTKEIzKy4uLikKCWZhZGQueAkJU0lOQTEoJXBjKSwlZnAyCQkjIEExK1MoQTIrLi4uKQoKCWZtdWwueAkJJWZwMCwlZnAxCQkjIFMoQjIrLi4uKQoJZm11bC54CQklZnAyLCVmcDAJCSMgcyhhMSsuLi4pCgoKCWZhZGQucwkJQ09TQjEoJXBjKSwlZnAxCQkjIEIxK1MoQjIuLi4pCglmbXVsLngJCVJQUklNRSglYTYpLCVmcDAJIyBSJ1MoQTErLi4uKQoJZm11bC54CQlTUFJJTUUoJWE2KSwlZnAxCSMgUycoQjErUyhCMisuLi4pKQoKCWZtb3ZtLngJCSglc3ApKywmMHgyMAkJIyByZXN0b3JlIGZwMgoKCWZtb3YubAkJJWQwLCVmcGNyCglmYWRkLnMJCVBPU05FRzEoJWE2KSwlZnAxCSMgQ09TKFgpCglic3IJCXN0b19jb3MJCQkjIHN0b3JlIGNvc2luZSByZXN1bHQKCWZhZGQueAkJUlBSSU1FKCVhNiksJWZwMAkjIFNJTihYKQoJYnJhCQl0X2lueDIKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKU0NCT1JTOgoJY21wLmwJCSVkMSwmMHgzRkZGODAwMAoJYmd0LncJCVNSRURVQ0VYCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKClNDU006CiMJbW92LncJCSYweDAwMDAsWERDQVJFKCVhNikKCWZtb3YucwkJJjB4M0Y4MDAwMDAsJWZwMQoKCWZtb3YubAkJJWQwLCVmcGNyCglmc3ViLnMJCSYweDAwODAwMDAwLCVmcDEKCWJzcgkJc3RvX2NvcwkJCSMgc3RvcmUgY29zaW5lIHJlc3VsdAoJZm1vdi5sCQklZnBjciwlZDAJCSMgZDAgbXVzdCBoYXZlIGZwY3IsdG9vCgltb3YuYgkJJkZNT1ZfT1AsJWQxCQkjIGxhc3QgaW5zdCBpcyBNT1ZFCglmbW92LngJCVgoJWE2KSwlZnAwCglicmEJCXRfY2F0Y2gKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCglnbG9iYWwJCXNzaW5jb3NkCiMtLVNJTiBBTkQgQ09TIE9GIFggRk9SIERFTk9STUFMSVpFRCBYCnNzaW5jb3NkOgoJbW92LmwJCSVkMCwtKCVzcCkJCSMgc2F2ZSBkMAoJZm1vdi5zCQkmMHgzRjgwMDAwMCwlZnAxCglic3IJCXN0b19jb3MJCQkjIHN0b3JlIGNvc2luZSByZXN1bHQKCW1vdi5sCQkoJXNwKSssJWQwCQkjIHJlc3RvcmUgZDAKCWJyYQkJdF9leHRkbnJtCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIy0tV0hFTiBSRURVQ0VYIElTIFVTRUQsIFRIRSBDT0RFIFdJTEwgSU5FVklUQUJMWSBCRSBTTE9XLgojLS1USElTIFJFRFVDVElPTiBNRVRIT0QsIEhPV0VWRVIsIElTIE1VQ0ggRkFTVEVSIFRIQU4gVVNJTkcKIy0tVEhFIFJFTUFJTkRFUiBJTlNUUlVDVElPTiBXSElDSCBJUyBOT1cgSU4gU09GVFdBUkUuClNSRURVQ0VYOgoJZm1vdm0ueAkJJjB4M2MsLSglc3ApCQkjIHNhdmUge2ZwMi1mcDV9Cgltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCglmbW92LnMJCSYweDAwMDAwMDAwLCVmcDEJIyBmcDEgPSAwCgojLS1JZiBjb21wYWN0IGZvcm0gb2YgYWJzKGFyZykgaW4gZDA9JDdmZmVmZmZmLCBhcmd1bWVudCBpcyBzbyBsYXJnZSB0aGF0CiMtLXRoZXJlIGlzIGEgZGFuZ2VyIG9mIHVud2FudGVkIG92ZXJmbG93IGluIGZpcnN0IExPT1AgaXRlcmF0aW9uLiAgSW4gdGhpcwojLS1jYXNlLCByZWR1Y2UgYXJndW1lbnQgYnkgb25lIHJlbWFpbmRlciBzdGVwIHRvIG1ha2Ugc3Vic2VxdWVudCByZWR1Y3Rpb24KIy0tc2FmZS4KCWNtcC5sCQklZDEsJjB4N2ZmZWZmZmYJCSMgaXMgYXJnIGRhbmdlcm91c2x5IGxhcmdlPwoJYm5lLmIJCVNMT09QCQkJIyBubwoKIyB5ZXM7IGNyZWF0ZSAyKioxNjM4MypQSS8yCgltb3YudwkJJjB4N2ZmZSxGUF9TQ1IwX0VYKCVhNikKCW1vdi5sCQkmMHhjOTBmZGFhMixGUF9TQ1IwX0hJKCVhNikKCWNsci5sCQlGUF9TQ1IwX0xPKCVhNikKCiMgY3JlYXRlIGxvdyBoYWxmIG9mIDIqKjE2MzgzKlBJLzIgYXQgRlBfU0NSMQoJbW92LncJCSYweDdmZGMsRlBfU0NSMV9FWCglYTYpCgltb3YubAkJJjB4ODVhMzA4ZDMsRlBfU0NSMV9ISSglYTYpCgljbHIubAkJRlBfU0NSMV9MTyglYTYpCgoJZnRlc3QueAkJJWZwMAkJCSMgdGVzdCBzaWduIG9mIGFyZ3VtZW50CglmYmx0LncJCXNyZWRfbmVnCgoJb3IuYgkJJjB4ODAsRlBfU0NSMF9FWCglYTYpCSMgcG9zaXRpdmUgYXJnCglvci5iCQkmMHg4MCxGUF9TQ1IxX0VYKCVhNikKc3JlZF9uZWc6CglmYWRkLngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgaGlnaCBwYXJ0IG9mIHJlZHVjdGlvbiBpcyBleGFjdAoJZm1vdi54CQklZnAwLCVmcDEJCSMgc2F2ZSBoaWdoIHJlc3VsdCBpbiBmcDEKCWZhZGQueAkJRlBfU0NSMSglYTYpLCVmcDAJIyBsb3cgcGFydCBvZiByZWR1Y3Rpb24KCWZzdWIueAkJJWZwMCwlZnAxCQkjIGRldGVybWluZSBsb3cgY29tcG9uZW50IG9mIHJlc3VsdAoJZmFkZC54CQlGUF9TQ1IxKCVhNiksJWZwMQkjIGZwMC9mcDEgYXJlIHJlZHVjZWQgYXJndW1lbnQuCgojLS1PTiBFTlRSWSwgRlAwIElTIFgsIE9OIFJFVFVSTiwgRlAwIElTIFggUkVNIFBJLzIsIHxYfCA8PSBQSS80LgojLS1pbnRlZ2VyIHF1b3RpZW50IHdpbGwgYmUgc3RvcmVkIGluIE4KIy0tSW50ZXJtZWRpdGF0ZSByZW1haW5kZXIgaXMgNjYtYml0IGxvbmc7IChSLHIpIGluIChGUDAsRlAxKQpTTE9PUDoKCWZtb3YueAkJJWZwMCxJTkFSRyglYTYpCQkjICstMioqSyAqIEYsIDEgPD0gRiA8IDIKCW1vdi53CQlJTkFSRyglYTYpLCVkMQoJbW92LmwJCSVkMSwlYTEJCQkjIHNhdmUgYSBjb3B5IG9mIEQwCglhbmQubAkJJjB4MDAwMDdGRkYsJWQxCglzdWIubAkJJjB4MDAwMDNGRkYsJWQxCQkjIGQwID0gSwoJY21wLmwJCSVkMSwmMjgKCWJsZS5iCQlTTEFTVExPT1AKU0NPTlRMT09QOgoJc3ViLmwJCSYyNywlZDEJCQkjIGQwID0gTCA6PSBLLTI3Cgltb3YuYgkJJjAsRU5ERkxBRyglYTYpCglicmEuYgkJU1dPUksKU0xBU1RMT09QOgoJY2xyLmwJCSVkMQkJCSMgZDAgPSBMIDo9IDAKCW1vdi5iCQkmMSxFTkRGTEFHKCVhNikKClNXT1JLOgojLS1GSU5EIFRIRSBSRU1BSU5ERVIgT0YgKFIscikgVy5SLlQuCTIqKkwgKiAoUEkvMikuIEwgSVMgU08gQ0hPU0VOCiMtLVRIQVQJSU5UKCBYICogKDIvUEkpIC8gMioqKEwpICkgPCAyKioyOS4KCiMtLUNSRUFURSAyKiooLUwpICogKDIvUEkpLCBTSUdOKElOQVJHKSoyKiooNjMpLAojLS0yKipMICogKFBJYnkyXzEpLCAyKipMICogKFBJYnkyXzIpCgoJbW92LmwJCSYweDAwMDAzRkZFLCVkMgkJIyBCSUFTRUQgRVhQIE9GIDIvUEkKCXN1Yi5sCQklZDEsJWQyCQkJIyBCSUFTRUQgRVhQIE9GIDIqKigtTCkqKDIvUEkpCgoJbW92LmwJCSYweEEyRjk4MzZFLEZQX1NDUjBfSEkoJWE2KQoJbW92LmwJCSYweDRFNDQxNTJBLEZQX1NDUjBfTE8oJWE2KQoJbW92LncJCSVkMixGUF9TQ1IwX0VYKCVhNikJIyBGUF9TQ1IwID0gMioqKC1MKSooMi9QSSkKCglmbW92LngJCSVmcDAsJWZwMgoJZm11bC54CQlGUF9TQ1IwKCVhNiksJWZwMgkjIGZwMiA9IFggKiAyKiooLUwpKigyL1BJKQoKIy0tV0UgTVVTVCBOT1cgRklORCBJTlQoRlAyKS4gU0lOQ0UgV0UgTkVFRCBUSElTIFZBTFVFIElOCiMtLUZMT0FUSU5HIFBPSU5UIEZPUk1BVCwgVEhFIFRXTyBGTU9WRSdTCUZNT1ZFLkwgRlAgPC0tPiBOCiMtLVdJTEwgQkUgVE9PIElORUZGSUNJRU5ULiBUSEUgV0FZIEFST1VORCBJVCBJUyBUSEFUCiMtLShTSUdOKElOQVJHKSoyKio2MwkrCUZQMikgLSBTSUdOKElOQVJHKSoyKio2MyBXSUxMIEdJVkUKIy0tVVMgVEhFIERFU0lSRUQgVkFMVUUgSU4gRkxPQVRJTkcgUE9JTlQuCgltb3YubAkJJWExLCVkMgoJc3dhcAkJJWQyCglhbmQubAkJJjB4ODAwMDAwMDAsJWQyCglvci5sCQkmMHg1RjAwMDAwMCwlZDIJCSMgZDIgPSBTSUdOKElOQVJHKSoyKio2MyBJTiBTR0wKCW1vdi5sCQklZDIsVFdPVE82MyglYTYpCglmYWRkLnMJCVRXT1RPNjMoJWE2KSwlZnAyCSMgVEhFIEZSQUNUSU9OQUwgUEFSVCBPRiBGUDEgSVMgUk9VTkRFRAoJZnN1Yi5zCQlUV09UTzYzKCVhNiksJWZwMgkjIGZwMiA9IE4KIwlmaW50LngJCSVmcDIKCiMtLUNSRUFUSU5HIDIqKihMKSpQaWJ5Ml8xIGFuZCAyKiooTCkqUGlieTJfMgoJbW92LmwJCSVkMSwlZDIJCQkjIGQyID0gTAoKCWFkZC5sCQkmMHgwMDAwM0ZGRiwlZDIJCSMgQklBU0VEIEVYUCBPRiAyKipMICogKFBJLzIpCgltb3YudwkJJWQyLEZQX1NDUjBfRVgoJWE2KQoJbW92LmwJCSYweEM5MEZEQUEyLEZQX1NDUjBfSEkoJWE2KQoJY2xyLmwJCUZQX1NDUjBfTE8oJWE2KQkJIyBGUF9TQ1IwID0gMioqKEwpICogUGlieTJfMQoKCWFkZC5sCQkmMHgwMDAwM0ZERCwlZDEKCW1vdi53CQklZDEsRlBfU0NSMV9FWCglYTYpCgltb3YubAkJJjB4ODVBMzA4RDMsRlBfU0NSMV9ISSglYTYpCgljbHIubAkJRlBfU0NSMV9MTyglYTYpCQkjIEZQX1NDUjEgPSAyKiooTCkgKiBQaWJ5Ml8yCgoJbW92LmIJCUVOREZMQUcoJWE2KSwlZDEKCiMtLVdlIGFyZSBub3cgcmVhZHkgdG8gcGVyZm9ybSAoUityKSAtIE4qUDEgLSBOKlAyLCBQMSA9IDIqKihMKSAqIFBpYnkyXzEgYW5kCiMtLVAyID0gMioqKEwpICogUGlieTJfMgoJZm1vdi54CQklZnAyLCVmcDQJCSMgZnA0ID0gTgoJZm11bC54CQlGUF9TQ1IwKCVhNiksJWZwNAkjIGZwNCA9IFcgPSBOKlAxCglmbW92LngJCSVmcDIsJWZwNQkJIyBmcDUgPSBOCglmbXVsLngJCUZQX1NDUjEoJWE2KSwlZnA1CSMgZnA1ID0gdyA9IE4qUDIKCWZtb3YueAkJJWZwNCwlZnAzCQkjIGZwMyA9IFcgPSBOKlAxCgojLS13ZSB3YW50IFArcCA9IFcrdyAgYnV0ICB8cHwgPD0gaGFsZiB1bHAgb2YgUAojLS1UaGVuLCB3ZSBuZWVkIHRvIGNvbXB1dGUgIEEgOj0gUi1QICAgYW5kICBhIDo9IHItcAoJZmFkZC54CQklZnA1LCVmcDMJCSMgZnAzID0gUAoJZnN1Yi54CQklZnAzLCVmcDQJCSMgZnA0ID0gVy1QCgoJZnN1Yi54CQklZnAzLCVmcDAJCSMgZnAwID0gQSA6PSBSIC0gUAoJZmFkZC54CQklZnA1LCVmcDQJCSMgZnA0ID0gcCA9IChXLVApK3cKCglmbW92LngJCSVmcDAsJWZwMwkJIyBmcDMgPSBBCglmc3ViLngJCSVmcDQsJWZwMQkJIyBmcDEgPSBhIDo9IHIgLSBwCgojLS1Ob3cgd2UgbmVlZCB0byBub3JtYWxpemUgKEEsYSkgdG8gICJuZXcgKFIscikiIHdoZXJlIFIrciA9IEErYSBidXQKIy0tfHJ8IDw9IGhhbGYgdWxwIG9mIFIuCglmYWRkLngJCSVmcDEsJWZwMAkJIyBmcDAgPSBSIDo9IEErYQojLS1ObyBuZWVkIHRvIGNhbGN1bGF0ZSByIGlmIHRoaXMgaXMgdGhlIGxhc3QgbG9vcAoJY21wLmIJCSVkMSwmMAoJYmd0LncJCVNSRVNUT1JFCgojLS1OZWVkIHRvIGNhbGN1bGF0ZSByCglmc3ViLngJCSVmcDAsJWZwMwkJIyBmcDMgPSBBLVIKCWZhZGQueAkJJWZwMywlZnAxCQkjIGZwMSA9IHIgOj0gKEEtUikrYQoJYnJhLncJCVNMT09QCgpTUkVTVE9SRToKCWZtb3YubAkJJWZwMixJTlQoJWE2KQoJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgoJZm1vdm0ueAkJKCVzcCkrLCYweDNjCQkjIHJlc3RvcmUge2ZwMi1mcDV9CgoJbW92LmwJCUFESk4oJWE2KSwlZDEKCWNtcC5sCQklZDEsJjQKCglibHQudwkJU0lOQ09OVAoJYnJhLncJCVNDQ09OVAoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIHN0YW4oKTogIGNvbXB1dGVzIHRoZSB0YW5nZW50IG9mIGEgbm9ybWFsaXplZCBpbnB1dAkJCSMKIyBzdGFuZCgpOiBjb21wdXRlcyB0aGUgdGFuZ2VudCBvZiBhIGRlbm9ybWFsaXplZCBpbnB1dAkJCSMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIwojCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gaW5wdXQJCQkjCiMJZDAgPSByb3VuZCBwcmVjaXNpb24sbW9kZQkJCQkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCiMJZnAwID0gdGFuKFgpCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyBBQ0NVUkFDWSBhbmQgTU9OT1RPTklDSVRZICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIwojCVRoZSByZXR1cm5lZCByZXN1bHQgaXMgd2l0aGluIDMgdWxwIGluIDY0IHNpZ25pZmljYW50IGJpdCwgaS5lLiAjCiMJd2l0aGluIDAuNTAwMSB1bHAgdG8gNTMgYml0cyBpZiB0aGUgcmVzdWx0IGlzIHN1YnNlcXVlbnRseQkjCiMJcm91bmRlZCB0byBkb3VibGUgcHJlY2lzaW9uLiBUaGUgcmVzdWx0IGlzIHByb3ZhYmx5IG1vbm90b25pYwkjCiMJaW4gZG91YmxlIHByZWNpc2lvbi4JCQkJCQkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKIwkJCQkJCQkJCSMKIwkxLiBJZiB8WHwgPj0gMTVQaSBvciB8WHwgPCAyKiooLTQwKSwgZ28gdG8gNi4JCQkjCiMJCQkJCQkJCQkjCiMJMi4gRGVjb21wb3NlIFggYXMgWCA9IE4oUGkvMikgKyByIHdoZXJlIHxyfCA8PSBQaS80LiBMZXQJIwojCQlrID0gTiBtb2QgMiwgc28gaW4gcGFydGljdWxhciwgayA9IDAgb3IgMS4JCSMKIwkJCQkJCQkJCSMKIwkzLiBJZiBrIGlzIG9kZCwgZ28gdG8gNS4JCQkJCSMKIwkJCQkJCQkJCSMKIwk0LiAoayBpcyBldmVuKSBUYW4oWCkgPSB0YW4ocikgYW5kIHRhbihyKSBpcyBhcHByb3hpbWF0ZWQgYnkgYQkjCiMJCXJhdGlvbmFsIGZ1bmN0aW9uIFUvViB3aGVyZQkJCQkjCiMJCVUgPSByICsgcipzKihQMSArIHMqKFAyICsgcypQMykpLCBhbmQJCQkjCiMJCVYgPSAxICsgcyooUTEgKyBzKihRMiArIHMqKFEzICsgcypRNCkpKSwgIHMgPSByKnIuCSMKIwkJRXhpdC4JCQkJCQkJIwojCQkJCQkJCQkJIwojCTQuIChrIGlzIG9kZCkgVGFuKFgpID0gLWNvdChyKS4gU2luY2UgdGFuKHIpIGlzIGFwcHJveGltYXRlZCBieSAjCiMJCWEgcmF0aW9uYWwgZnVuY3Rpb24gVS9WIHdoZXJlCQkJCSMKIwkJVSA9IHIgKyByKnMqKFAxICsgcyooUDIgKyBzKlAzKSksIGFuZAkJCSMKIwkJViA9IDEgKyBzKihRMSArIHMqKFEyICsgcyooUTMgKyBzKlE0KSkpLCBzID0gcipyLAkjCiMJCS1Db3QocikgPSAtVi9VLiBFeGl0LgkJCQkJIwojCQkJCQkJCQkJIwojCTYuIElmIHxYfCA+IDEsIGdvIHRvIDguCQkJCQkJIwojCQkJCQkJCQkJIwojCTcuICh8WHw8MioqKC00MCkpIFRhbihYKSA9IFguIEV4aXQuCQkJCSMKIwkJCQkJCQkJCSMKIwk4LiBPdmVyd3JpdGUgWCBieSBYIDo9IFggcmVtIDJQaS4gTm93IHRoYXQgfFh8IDw9IFBpLCBnbyBiYWNrCSMKIwkJdG8gMi4JCQkJCQkJIwojCQkJCQkJCQkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgpUQU5RNDoKCWxvbmcJCTB4M0VBMEI3NTksMHhGNTBGODY4OApUQU5QMzoKCWxvbmcJCTB4QkVGMkJBQTUsMHhBODkyNEYwNAoKVEFOUTM6Cglsb25nCQkweEJGMzQ2RjU5LDB4QjM5QkE2NUYsMHgwMDAwMDAwMCwweDAwMDAwMDAwCgpUQU5QMjoKCWxvbmcJCTB4M0ZGNjAwMDAsMHhFMDczRDNGQywweDE5OUM0QTAwLDB4MDAwMDAwMDAKClRBTlEyOgoJbG9uZwkJMHgzRkY5MDAwMCwweEQyM0NENjg0LDB4MTVEOTVGQTEsMHgwMDAwMDAwMAoKVEFOUDE6Cglsb25nCQkweEJGRkMwMDAwLDB4ODg5NUE2QzUsMHhGQjQyM0JDQSwweDAwMDAwMDAwCgpUQU5RMToKCWxvbmcJCTB4QkZGRDAwMDAsMHhFRUY1N0UwRCwweEE4NEJDOENFLDB4MDAwMDAwMDAKCklOVlRXT1BJOgoJbG9uZwkJMHgzRkZDMDAwMCwweEEyRjk4MzZFLDB4NEU0NDE1MkEsMHgwMDAwMDAwMAoKVFdPUEkxOgoJbG9uZwkJMHg0MDAxMDAwMCwweEM5MEZEQUEyLDB4MDAwMDAwMDAsMHgwMDAwMDAwMApUV09QSTI6Cglsb25nCQkweDNGREYwMDAwLDB4ODVBMzA4RDQsMHgwMDAwMDAwMCwweDAwMDAwMDAwCgojLS1OKlBJLzIsIC0zMiA8PSBOIDw9IDMyLCBJTiBBIExFQURJTkcgVEVSTSBJTiBFWFQuIEFORCBUUkFJTElORwojLS1URVJNIElOIFNHTC4gTk9URSBUSEFUIFBJIElTIDY0LUJJVCBMT05HLCBUSFVTIE4qUEkvMiBJUyBBVAojLS1NT1NUIDY5IEJJVFMgTE9ORy4KIwlnbG9iYWwJCVBJVEJMClBJVEJMOgoJbG9uZwkJMHhDMDA0MDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHgyMTgwMDAwMAoJbG9uZwkJMHhDMDA0MDAwMCwweEMyQzc1QkNELDB4MTA1RDdDMjMsMHhBMEQwMDAwMAoJbG9uZwkJMHhDMDA0MDAwMCwweEJDN0VEQ0Y3LDB4RkY1MjM2MTEsMHhBMUU4MDAwMAoJbG9uZwkJMHhDMDA0MDAwMCwweEI2MzY1RTIyLDB4RUU0NkYwMDAsMHgyMTQ4MDAwMAoJbG9uZwkJMHhDMDA0MDAwMCwweEFGRURERjRELDB4REQzQkE5RUUsMHhBMTIwMDAwMAoJbG9uZwkJMHhDMDA0MDAwMCwweEE5QTU2MDc4LDB4Q0MzMDYzREQsMHgyMUZDMDAwMAoJbG9uZwkJMHhDMDA0MDAwMCwweEEzNUNFMUEzLDB4QkIyNTFEQ0IsMHgyMTEwMDAwMAoJbG9uZwkJMHhDMDA0MDAwMCwweDlEMTQ2MkNFLDB4QUExOUQ3QjksMHhBMTU4MDAwMAoJbG9uZwkJMHhDMDA0MDAwMCwweDk2Q0JFM0Y5LDB4OTkwRTkxQTgsMHgyMUUwMDAwMAoJbG9uZwkJMHhDMDA0MDAwMCwweDkwODM2NTI0LDB4ODgwMzRCOTYsMHgyMEIwMDAwMAoJbG9uZwkJMHhDMDA0MDAwMCwweDhBM0FFNjRGLDB4NzZGODA1ODQsMHhBMTg4MDAwMAoJbG9uZwkJMHhDMDA0MDAwMCwweDgzRjI2NzdBLDB4NjVFQ0JGNzMsMHgyMUM0MDAwMAoJbG9uZwkJMHhDMDAzMDAwMCwweEZCNTNEMTRBLDB4QTlDMkYyQzIsMHgyMDAwMDAwMAoJbG9uZwkJMHhDMDAzMDAwMCwweEVFQzJEM0EwLDB4ODdBQzY2OUYsMHgyMTM4MDAwMAoJbG9uZwkJMHhDMDAzMDAwMCwweEUyMzFENUY2LDB4NjU5NURBN0IsMHhBMTMwMDAwMAoJbG9uZwkJMHhDMDAzMDAwMCwweEQ1QTBEODRDLDB4NDM3RjRFNTgsMHg5RkMwMDAwMAoJbG9uZwkJMHhDMDAzMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHgyMTAwMDAwMAoJbG9uZwkJMHhDMDAzMDAwMCwweEJDN0VEQ0Y3LDB4RkY1MjM2MTEsMHhBMTY4MDAwMAoJbG9uZwkJMHhDMDAzMDAwMCwweEFGRURERjRELDB4REQzQkE5RUUsMHhBMEEwMDAwMAoJbG9uZwkJMHhDMDAzMDAwMCwweEEzNUNFMUEzLDB4QkIyNTFEQ0IsMHgyMDkwMDAwMAoJbG9uZwkJMHhDMDAzMDAwMCwweDk2Q0JFM0Y5LDB4OTkwRTkxQTgsMHgyMTYwMDAwMAoJbG9uZwkJMHhDMDAzMDAwMCwweDhBM0FFNjRGLDB4NzZGODA1ODQsMHhBMTA4MDAwMAoJbG9uZwkJMHhDMDAyMDAwMCwweEZCNTNEMTRBLDB4QTlDMkYyQzIsMHgxRjgwMDAwMAoJbG9uZwkJMHhDMDAyMDAwMCwweEUyMzFENUY2LDB4NjU5NURBN0IsMHhBMEIwMDAwMAoJbG9uZwkJMHhDMDAyMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHgyMDgwMDAwMAoJbG9uZwkJMHhDMDAyMDAwMCwweEFGRURERjRELDB4REQzQkE5RUUsMHhBMDIwMDAwMAoJbG9uZwkJMHhDMDAyMDAwMCwweDk2Q0JFM0Y5LDB4OTkwRTkxQTgsMHgyMEUwMDAwMAoJbG9uZwkJMHhDMDAxMDAwMCwweEZCNTNEMTRBLDB4QTlDMkYyQzIsMHgxRjAwMDAwMAoJbG9uZwkJMHhDMDAxMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHgyMDAwMDAwMAoJbG9uZwkJMHhDMDAxMDAwMCwweDk2Q0JFM0Y5LDB4OTkwRTkxQTgsMHgyMDYwMDAwMAoJbG9uZwkJMHhDMDAwMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHgxRjgwMDAwMAoJbG9uZwkJMHhCRkZGMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHgxRjAwMDAwMAoJbG9uZwkJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZGMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHg5RjAwMDAwMAoJbG9uZwkJMHg0MDAwMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHg5RjgwMDAwMAoJbG9uZwkJMHg0MDAxMDAwMCwweDk2Q0JFM0Y5LDB4OTkwRTkxQTgsMHhBMDYwMDAwMAoJbG9uZwkJMHg0MDAxMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHhBMDAwMDAwMAoJbG9uZwkJMHg0MDAxMDAwMCwweEZCNTNEMTRBLDB4QTlDMkYyQzIsMHg5RjAwMDAwMAoJbG9uZwkJMHg0MDAyMDAwMCwweDk2Q0JFM0Y5LDB4OTkwRTkxQTgsMHhBMEUwMDAwMAoJbG9uZwkJMHg0MDAyMDAwMCwweEFGRURERjRELDB4REQzQkE5RUUsMHgyMDIwMDAwMAoJbG9uZwkJMHg0MDAyMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHhBMDgwMDAwMAoJbG9uZwkJMHg0MDAyMDAwMCwweEUyMzFENUY2LDB4NjU5NURBN0IsMHgyMEIwMDAwMAoJbG9uZwkJMHg0MDAyMDAwMCwweEZCNTNEMTRBLDB4QTlDMkYyQzIsMHg5RjgwMDAwMAoJbG9uZwkJMHg0MDAzMDAwMCwweDhBM0FFNjRGLDB4NzZGODA1ODQsMHgyMTA4MDAwMAoJbG9uZwkJMHg0MDAzMDAwMCwweDk2Q0JFM0Y5LDB4OTkwRTkxQTgsMHhBMTYwMDAwMAoJbG9uZwkJMHg0MDAzMDAwMCwweEEzNUNFMUEzLDB4QkIyNTFEQ0IsMHhBMDkwMDAwMAoJbG9uZwkJMHg0MDAzMDAwMCwweEFGRURERjRELDB4REQzQkE5RUUsMHgyMEEwMDAwMAoJbG9uZwkJMHg0MDAzMDAwMCwweEJDN0VEQ0Y3LDB4RkY1MjM2MTEsMHgyMTY4MDAwMAoJbG9uZwkJMHg0MDAzMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHhBMTAwMDAwMAoJbG9uZwkJMHg0MDAzMDAwMCwweEQ1QTBEODRDLDB4NDM3RjRFNTgsMHgxRkMwMDAwMAoJbG9uZwkJMHg0MDAzMDAwMCwweEUyMzFENUY2LDB4NjU5NURBN0IsMHgyMTMwMDAwMAoJbG9uZwkJMHg0MDAzMDAwMCwweEVFQzJEM0EwLDB4ODdBQzY2OUYsMHhBMTM4MDAwMAoJbG9uZwkJMHg0MDAzMDAwMCwweEZCNTNEMTRBLDB4QTlDMkYyQzIsMHhBMDAwMDAwMAoJbG9uZwkJMHg0MDA0MDAwMCwweDgzRjI2NzdBLDB4NjVFQ0JGNzMsMHhBMUM0MDAwMAoJbG9uZwkJMHg0MDA0MDAwMCwweDhBM0FFNjRGLDB4NzZGODA1ODQsMHgyMTg4MDAwMAoJbG9uZwkJMHg0MDA0MDAwMCwweDkwODM2NTI0LDB4ODgwMzRCOTYsMHhBMEIwMDAwMAoJbG9uZwkJMHg0MDA0MDAwMCwweDk2Q0JFM0Y5LDB4OTkwRTkxQTgsMHhBMUUwMDAwMAoJbG9uZwkJMHg0MDA0MDAwMCwweDlEMTQ2MkNFLDB4QUExOUQ3QjksMHgyMTU4MDAwMAoJbG9uZwkJMHg0MDA0MDAwMCwweEEzNUNFMUEzLDB4QkIyNTFEQ0IsMHhBMTEwMDAwMAoJbG9uZwkJMHg0MDA0MDAwMCwweEE5QTU2MDc4LDB4Q0MzMDYzREQsMHhBMUZDMDAwMAoJbG9uZwkJMHg0MDA0MDAwMCwweEFGRURERjRELDB4REQzQkE5RUUsMHgyMTIwMDAwMAoJbG9uZwkJMHg0MDA0MDAwMCwweEI2MzY1RTIyLDB4RUU0NkYwMDAsMHhBMTQ4MDAwMAoJbG9uZwkJMHg0MDA0MDAwMCwweEJDN0VEQ0Y3LDB4RkY1MjM2MTEsMHgyMUU4MDAwMAoJbG9uZwkJMHg0MDA0MDAwMCwweEMyQzc1QkNELDB4MTA1RDdDMjMsMHgyMEQwMDAwMAoJbG9uZwkJMHg0MDA0MDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHhBMTgwMDAwMAoKCXNldAkJSU5BUkcsRlBfU0NSMAoKCXNldAkJVFdPVE82MyxMX1NDUjEKCXNldAkJSU5ULExfU0NSMQoJc2V0CQlFTkRGTEFHLExfU0NSMgoKCWdsb2JhbAkJc3RhbgpzdGFuOgoJZm1vdi54CQkoJWEwKSwlZnAwCQkjIExPQUQgSU5QVVQKCgltb3YubAkJKCVhMCksJWQxCgltb3YudwkJNCglYTApLCVkMQoJYW5kLmwJCSYweDdGRkZGRkZGLCVkMQoKCWNtcC5sCQklZDEsJjB4M0ZENzgwMDAJCSMgfFh8ID49IDIqKigtNDApPwoJYmdlLmIJCVRBTk9LMQoJYnJhLncJCVRBTlNNClRBTk9LMToKCWNtcC5sCQklZDEsJjB4NDAwNEJDN0UJCSMgfFh8IDwgMTUgUEk/CglibHQuYgkJVEFOTUFJTgoJYnJhLncJCVJFRFVDRVgKClRBTk1BSU46CiMtLVRISVMgSVMgVEhFIFVTVUFMIENBU0UsIHxYfCA8PSAxNSBQSS4KIy0tVEhFIEFSR1VNRU5UIFJFRFVDVElPTiBJUyBET05FIEJZIFRBQkxFIExPT0sgVVAuCglmbW92LngJCSVmcDAsJWZwMQoJZm11bC5kCQlUV09CWVBJKCVwYyksJWZwMQkjIFgqMi9QSQoKCWxlYS5sCQlQSVRCTCsweDIwMCglcGMpLCVhMQkjIFRBQkxFIE9GIE4qUEkvMiwgTiA9IC0zMiwuLi4sMzIKCglmbW92LmwJCSVmcDEsJWQxCQkjIENPTlZFUlQgVE8gSU5URUdFUgoKCWFzbC5sCQkmNCwlZDEKCWFkZC5sCQklZDEsJWExCQkJIyBBRERSRVNTIE4qUElCWTIgSU4gWTEsIFkyCgoJZnN1Yi54CQkoJWExKSssJWZwMAkJIyBYLVkxCgoJZnN1Yi5zCQkoJWExKSwlZnAwCQkjIEZQMCBJUyBSID0gKFgtWTEpLVkyCgoJcm9yLmwJCSY1LCVkMQoJYW5kLmwJCSYweDgwMDAwMDAwLCVkMQkJIyBEMCBXQVMgT0REIElGRiBEMCA8IDAKClRBTkNPTlQ6CglmbW92bS54CQkmMHgwYywtKCVzcCkJCSMgc2F2ZSBmcDIsZnAzCgoJY21wLmwJCSVkMSwmMAoJYmx0LncJCU5PREQKCglmbW92LngJCSVmcDAsJWZwMQoJZm11bC54CQklZnAxLCVmcDEJCSMgUyA9IFIqUgoKCWZtb3YuZAkJVEFOUTQoJXBjKSwlZnAzCglmbW92LmQJCVRBTlAzKCVwYyksJWZwMgoKCWZtdWwueAkJJWZwMSwlZnAzCQkjIFNRNAoJZm11bC54CQklZnAxLCVmcDIJCSMgU1AzCgoJZmFkZC5kCQlUQU5RMyglcGMpLCVmcDMJCSMgUTMrU1E0CglmYWRkLngJCVRBTlAyKCVwYyksJWZwMgkJIyBQMitTUDMKCglmbXVsLngJCSVmcDEsJWZwMwkJIyBTKFEzK1NRNCkKCWZtdWwueAkJJWZwMSwlZnAyCQkjIFMoUDIrU1AzKQoKCWZhZGQueAkJVEFOUTIoJXBjKSwlZnAzCQkjIFEyK1MoUTMrU1E0KQoJZmFkZC54CQlUQU5QMSglcGMpLCVmcDIJCSMgUDErUyhQMitTUDMpCgoJZm11bC54CQklZnAxLCVmcDMJCSMgUyhRMitTKFEzK1NRNCkpCglmbXVsLngJCSVmcDEsJWZwMgkJIyBTKFAxK1MoUDIrU1AzKSkKCglmYWRkLngJCVRBTlExKCVwYyksJWZwMwkJIyBRMStTKFEyK1MoUTMrU1E0KSkKCWZtdWwueAkJJWZwMCwlZnAyCQkjIFJTKFAxK1MoUDIrU1AzKSkKCglmbXVsLngJCSVmcDMsJWZwMQkJIyBTKFExK1MoUTIrUyhRMytTUTQpKSkKCglmYWRkLngJCSVmcDIsJWZwMAkJIyBSK1JTKFAxK1MoUDIrU1AzKSkKCglmYWRkLnMJCSYweDNGODAwMDAwLCVmcDEJIyAxK1MoUTErLi4uKQoKCWZtb3ZtLngJCSglc3ApKywmMHgzMAkJIyByZXN0b3JlIGZwMixmcDMKCglmbW92LmwJCSVkMCwlZnBjcgkJIyByZXN0b3JlIHVzZXJzIHJvdW5kIG1vZGUscHJlYwoJZmRpdi54CQklZnAxLCVmcDAJCSMgbGFzdCBpbnN0IC0gcG9zc2libGUgZXhjZXB0aW9uIHNldAoJYnJhCQl0X2lueDIKCk5PREQ6CglmbW92LngJCSVmcDAsJWZwMQoJZm11bC54CQklZnAwLCVmcDAJCSMgUyA9IFIqUgoKCWZtb3YuZAkJVEFOUTQoJXBjKSwlZnAzCglmbW92LmQJCVRBTlAzKCVwYyksJWZwMgoKCWZtdWwueAkJJWZwMCwlZnAzCQkjIFNRNAoJZm11bC54CQklZnAwLCVmcDIJCSMgU1AzCgoJZmFkZC5kCQlUQU5RMyglcGMpLCVmcDMJCSMgUTMrU1E0CglmYWRkLngJCVRBTlAyKCVwYyksJWZwMgkJIyBQMitTUDMKCglmbXVsLngJCSVmcDAsJWZwMwkJIyBTKFEzK1NRNCkKCWZtdWwueAkJJWZwMCwlZnAyCQkjIFMoUDIrU1AzKQoKCWZhZGQueAkJVEFOUTIoJXBjKSwlZnAzCQkjIFEyK1MoUTMrU1E0KQoJZmFkZC54CQlUQU5QMSglcGMpLCVmcDIJCSMgUDErUyhQMitTUDMpCgoJZm11bC54CQklZnAwLCVmcDMJCSMgUyhRMitTKFEzK1NRNCkpCglmbXVsLngJCSVmcDAsJWZwMgkJIyBTKFAxK1MoUDIrU1AzKSkKCglmYWRkLngJCVRBTlExKCVwYyksJWZwMwkJIyBRMStTKFEyK1MoUTMrU1E0KSkKCWZtdWwueAkJJWZwMSwlZnAyCQkjIFJTKFAxK1MoUDIrU1AzKSkKCglmbXVsLngJCSVmcDMsJWZwMAkJIyBTKFExK1MoUTIrUyhRMytTUTQpKSkKCglmYWRkLngJCSVmcDIsJWZwMQkJIyBSK1JTKFAxK1MoUDIrU1AzKSkKCWZhZGQucwkJJjB4M0Y4MDAwMDAsJWZwMAkjIDErUyhRMSsuLi4pCgoJZm1vdm0ueAkJKCVzcCkrLCYweDMwCQkjIHJlc3RvcmUgZnAyLGZwMwoKCWZtb3YueAkJJWZwMSwtKCVzcCkKCWVvci5sCQkmMHg4MDAwMDAwMCwoJXNwKQoKCWZtb3YubAkJJWQwLCVmcGNyCQkjIHJlc3RvcmUgdXNlcnMgcm91bmQgbW9kZSxwcmVjCglmZGl2LngJCSglc3ApKywlZnAwCQkjIGxhc3QgaW5zdCAtIHBvc3NpYmxlIGV4Y2VwdGlvbiBzZXQKCWJyYQkJdF9pbngyCgpUQU5CT1JTOgojLS1JRiB8WHwgPiAxNVBJLCBXRSBVU0UgVEhFIEdFTkVSQUwgQVJHVU1FTlQgUkVEVUNUSU9OLgojLS1JRiB8WHwgPCAyKiooLTQwKSwgUkVUVVJOIFggT1IgMS4KCWNtcC5sCQklZDEsJjB4M0ZGRjgwMDAKCWJndC5iCQlSRURVQ0VYCgpUQU5TTToKCWZtb3YueAkJJWZwMCwtKCVzcCkKCWZtb3YubAkJJWQwLCVmcGNyCQkjIHJlc3RvcmUgdXNlcnMgcm91bmQgbW9kZSxwcmVjCgltb3YuYgkJJkZNT1ZfT1AsJWQxCQkjIGxhc3QgaW5zdCBpcyBNT1ZFCglmbW92LngJCSglc3ApKywlZnAwCQkjIGxhc3QgaW5zdCAtIHBvc2liYmxlIGV4Y2VwdGlvbiBzZXQKCWJyYQkJdF9jYXRjaAoKCWdsb2JhbAkJc3RhbmQKIy0tVEFOKFgpID0gWCBGT1IgREVOT1JNQUxJWkVEIFgKc3RhbmQ6CglicmEJCXRfZXh0ZG5ybQoKIy0tV0hFTiBSRURVQ0VYIElTIFVTRUQsIFRIRSBDT0RFIFdJTEwgSU5FVklUQUJMWSBCRSBTTE9XLgojLS1USElTIFJFRFVDVElPTiBNRVRIT0QsIEhPV0VWRVIsIElTIE1VQ0ggRkFTVEVSIFRIQU4gVVNJTkcKIy0tVEhFIFJFTUFJTkRFUiBJTlNUUlVDVElPTiBXSElDSCBJUyBOT1cgSU4gU09GVFdBUkUuClJFRFVDRVg6CglmbW92bS54CQkmMHgzYywtKCVzcCkJCSMgc2F2ZSB7ZnAyLWZwNX0KCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKCWZtb3YucwkJJjB4MDAwMDAwMDAsJWZwMQkjIGZwMSA9IDAKCiMtLUlmIGNvbXBhY3QgZm9ybSBvZiBhYnMoYXJnKSBpbiBkMD0kN2ZmZWZmZmYsIGFyZ3VtZW50IGlzIHNvIGxhcmdlIHRoYXQKIy0tdGhlcmUgaXMgYSBkYW5nZXIgb2YgdW53YW50ZWQgb3ZlcmZsb3cgaW4gZmlyc3QgTE9PUCBpdGVyYXRpb24uICBJbiB0aGlzCiMtLWNhc2UsIHJlZHVjZSBhcmd1bWVudCBieSBvbmUgcmVtYWluZGVyIHN0ZXAgdG8gbWFrZSBzdWJzZXF1ZW50IHJlZHVjdGlvbgojLS1zYWZlLgoJY21wLmwJCSVkMSwmMHg3ZmZlZmZmZgkJIyBpcyBhcmcgZGFuZ2Vyb3VzbHkgbGFyZ2U/CglibmUuYgkJTE9PUAkJCSMgbm8KCiMgeWVzOyBjcmVhdGUgMioqMTYzODMqUEkvMgoJbW92LncJCSYweDdmZmUsRlBfU0NSMF9FWCglYTYpCgltb3YubAkJJjB4YzkwZmRhYTIsRlBfU0NSMF9ISSglYTYpCgljbHIubAkJRlBfU0NSMF9MTyglYTYpCgojIGNyZWF0ZSBsb3cgaGFsZiBvZiAyKioxNjM4MypQSS8yIGF0IEZQX1NDUjEKCW1vdi53CQkmMHg3ZmRjLEZQX1NDUjFfRVgoJWE2KQoJbW92LmwJCSYweDg1YTMwOGQzLEZQX1NDUjFfSEkoJWE2KQoJY2xyLmwJCUZQX1NDUjFfTE8oJWE2KQoKCWZ0ZXN0LngJCSVmcDAJCQkjIHRlc3Qgc2lnbiBvZiBhcmd1bWVudAoJZmJsdC53CQlyZWRfbmVnCgoJb3IuYgkJJjB4ODAsRlBfU0NSMF9FWCglYTYpCSMgcG9zaXRpdmUgYXJnCglvci5iCQkmMHg4MCxGUF9TQ1IxX0VYKCVhNikKcmVkX25lZzoKCWZhZGQueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBoaWdoIHBhcnQgb2YgcmVkdWN0aW9uIGlzIGV4YWN0CglmbW92LngJCSVmcDAsJWZwMQkJIyBzYXZlIGhpZ2ggcmVzdWx0IGluIGZwMQoJZmFkZC54CQlGUF9TQ1IxKCVhNiksJWZwMAkjIGxvdyBwYXJ0IG9mIHJlZHVjdGlvbgoJZnN1Yi54CQklZnAwLCVmcDEJCSMgZGV0ZXJtaW5lIGxvdyBjb21wb25lbnQgb2YgcmVzdWx0CglmYWRkLngJCUZQX1NDUjEoJWE2KSwlZnAxCSMgZnAwL2ZwMSBhcmUgcmVkdWNlZCBhcmd1bWVudC4KCiMtLU9OIEVOVFJZLCBGUDAgSVMgWCwgT04gUkVUVVJOLCBGUDAgSVMgWCBSRU0gUEkvMiwgfFh8IDw9IFBJLzQuCiMtLWludGVnZXIgcXVvdGllbnQgd2lsbCBiZSBzdG9yZWQgaW4gTgojLS1JbnRlcm1lZGl0YXRlIHJlbWFpbmRlciBpcyA2Ni1iaXQgbG9uZzsgKFIscikgaW4gKEZQMCxGUDEpCkxPT1A6CglmbW92LngJCSVmcDAsSU5BUkcoJWE2KQkJIyArLTIqKksgKiBGLCAxIDw9IEYgPCAyCgltb3YudwkJSU5BUkcoJWE2KSwlZDEKCW1vdi5sCQklZDEsJWExCQkJIyBzYXZlIGEgY29weSBvZiBEMAoJYW5kLmwJCSYweDAwMDA3RkZGLCVkMQoJc3ViLmwJCSYweDAwMDAzRkZGLCVkMQkJIyBkMCA9IEsKCWNtcC5sCQklZDEsJjI4CglibGUuYgkJTEFTVExPT1AKQ09OVExPT1A6CglzdWIubAkJJjI3LCVkMQkJCSMgZDAgPSBMIDo9IEstMjcKCW1vdi5iCQkmMCxFTkRGTEFHKCVhNikKCWJyYS5iCQlXT1JLCkxBU1RMT09QOgoJY2xyLmwJCSVkMQkJCSMgZDAgPSBMIDo9IDAKCW1vdi5iCQkmMSxFTkRGTEFHKCVhNikKCldPUks6CiMtLUZJTkQgVEhFIFJFTUFJTkRFUiBPRiAoUixyKSBXLlIuVC4JMioqTCAqIChQSS8yKS4gTCBJUyBTTyBDSE9TRU4KIy0tVEhBVAlJTlQoIFggKiAoMi9QSSkgLyAyKiooTCkgKSA8IDIqKjI5LgoKIy0tQ1JFQVRFIDIqKigtTCkgKiAoMi9QSSksIFNJR04oSU5BUkcpKjIqKig2MyksCiMtLTIqKkwgKiAoUElieTJfMSksIDIqKkwgKiAoUElieTJfMikKCgltb3YubAkJJjB4MDAwMDNGRkUsJWQyCQkjIEJJQVNFRCBFWFAgT0YgMi9QSQoJc3ViLmwJCSVkMSwlZDIJCQkjIEJJQVNFRCBFWFAgT0YgMioqKC1MKSooMi9QSSkKCgltb3YubAkJJjB4QTJGOTgzNkUsRlBfU0NSMF9ISSglYTYpCgltb3YubAkJJjB4NEU0NDE1MkEsRlBfU0NSMF9MTyglYTYpCgltb3YudwkJJWQyLEZQX1NDUjBfRVgoJWE2KQkjIEZQX1NDUjAgPSAyKiooLUwpKigyL1BJKQoKCWZtb3YueAkJJWZwMCwlZnAyCglmbXVsLngJCUZQX1NDUjAoJWE2KSwlZnAyCSMgZnAyID0gWCAqIDIqKigtTCkqKDIvUEkpCgojLS1XRSBNVVNUIE5PVyBGSU5EIElOVChGUDIpLiBTSU5DRSBXRSBORUVEIFRISVMgVkFMVUUgSU4KIy0tRkxPQVRJTkcgUE9JTlQgRk9STUFULCBUSEUgVFdPIEZNT1ZFJ1MJRk1PVkUuTCBGUCA8LS0+IE4KIy0tV0lMTCBCRSBUT08gSU5FRkZJQ0lFTlQuIFRIRSBXQVkgQVJPVU5EIElUIElTIFRIQVQKIy0tKFNJR04oSU5BUkcpKjIqKjYzCSsJRlAyKSAtIFNJR04oSU5BUkcpKjIqKjYzIFdJTEwgR0lWRQojLS1VUyBUSEUgREVTSVJFRCBWQUxVRSBJTiBGTE9BVElORyBQT0lOVC4KCW1vdi5sCQklYTEsJWQyCglzd2FwCQklZDIKCWFuZC5sCQkmMHg4MDAwMDAwMCwlZDIKCW9yLmwJCSYweDVGMDAwMDAwLCVkMgkJIyBkMiA9IFNJR04oSU5BUkcpKjIqKjYzIElOIFNHTAoJbW92LmwJCSVkMixUV09UTzYzKCVhNikKCWZhZGQucwkJVFdPVE82MyglYTYpLCVmcDIJIyBUSEUgRlJBQ1RJT05BTCBQQVJUIE9GIEZQMSBJUyBST1VOREVECglmc3ViLnMJCVRXT1RPNjMoJWE2KSwlZnAyCSMgZnAyID0gTgojCWZpbnRyei54CSVmcDIsJWZwMgoKIy0tQ1JFQVRJTkcgMioqKEwpKlBpYnkyXzEgYW5kIDIqKihMKSpQaWJ5Ml8yCgltb3YubAkJJWQxLCVkMgkJCSMgZDIgPSBMCgoJYWRkLmwJCSYweDAwMDAzRkZGLCVkMgkJIyBCSUFTRUQgRVhQIE9GIDIqKkwgKiAoUEkvMikKCW1vdi53CQklZDIsRlBfU0NSMF9FWCglYTYpCgltb3YubAkJJjB4QzkwRkRBQTIsRlBfU0NSMF9ISSglYTYpCgljbHIubAkJRlBfU0NSMF9MTyglYTYpCQkjIEZQX1NDUjAgPSAyKiooTCkgKiBQaWJ5Ml8xCgoJYWRkLmwJCSYweDAwMDAzRkRELCVkMQoJbW92LncJCSVkMSxGUF9TQ1IxX0VYKCVhNikKCW1vdi5sCQkmMHg4NUEzMDhEMyxGUF9TQ1IxX0hJKCVhNikKCWNsci5sCQlGUF9TQ1IxX0xPKCVhNikJCSMgRlBfU0NSMSA9IDIqKihMKSAqIFBpYnkyXzIKCgltb3YuYgkJRU5ERkxBRyglYTYpLCVkMQoKIy0tV2UgYXJlIG5vdyByZWFkeSB0byBwZXJmb3JtIChSK3IpIC0gTipQMSAtIE4qUDIsIFAxID0gMioqKEwpICogUGlieTJfMSBhbmQKIy0tUDIgPSAyKiooTCkgKiBQaWJ5Ml8yCglmbW92LngJCSVmcDIsJWZwNAkJIyBmcDQgPSBOCglmbXVsLngJCUZQX1NDUjAoJWE2KSwlZnA0CSMgZnA0ID0gVyA9IE4qUDEKCWZtb3YueAkJJWZwMiwlZnA1CQkjIGZwNSA9IE4KCWZtdWwueAkJRlBfU0NSMSglYTYpLCVmcDUJIyBmcDUgPSB3ID0gTipQMgoJZm1vdi54CQklZnA0LCVmcDMJCSMgZnAzID0gVyA9IE4qUDEKCiMtLXdlIHdhbnQgUCtwID0gVyt3ICBidXQgIHxwfCA8PSBoYWxmIHVscCBvZiBQCiMtLVRoZW4sIHdlIG5lZWQgdG8gY29tcHV0ZSAgQSA6PSBSLVAgICBhbmQgIGEgOj0gci1wCglmYWRkLngJCSVmcDUsJWZwMwkJIyBmcDMgPSBQCglmc3ViLngJCSVmcDMsJWZwNAkJIyBmcDQgPSBXLVAKCglmc3ViLngJCSVmcDMsJWZwMAkJIyBmcDAgPSBBIDo9IFIgLSBQCglmYWRkLngJCSVmcDUsJWZwNAkJIyBmcDQgPSBwID0gKFctUCkrdwoKCWZtb3YueAkJJWZwMCwlZnAzCQkjIGZwMyA9IEEKCWZzdWIueAkJJWZwNCwlZnAxCQkjIGZwMSA9IGEgOj0gciAtIHAKCiMtLU5vdyB3ZSBuZWVkIHRvIG5vcm1hbGl6ZSAoQSxhKSB0byAgIm5ldyAoUixyKSIgd2hlcmUgUityID0gQSthIGJ1dAojLS18cnwgPD0gaGFsZiB1bHAgb2YgUi4KCWZhZGQueAkJJWZwMSwlZnAwCQkjIGZwMCA9IFIgOj0gQSthCiMtLU5vIG5lZWQgdG8gY2FsY3VsYXRlIHIgaWYgdGhpcyBpcyB0aGUgbGFzdCBsb29wCgljbXAuYgkJJWQxLCYwCgliZ3QudwkJUkVTVE9SRQoKIy0tTmVlZCB0byBjYWxjdWxhdGUgcgoJZnN1Yi54CQklZnAwLCVmcDMJCSMgZnAzID0gQS1SCglmYWRkLngJCSVmcDMsJWZwMQkJIyBmcDEgPSByIDo9IChBLVIpK2EKCWJyYS53CQlMT09QCgpSRVNUT1JFOgoJZm1vdi5sCQklZnAyLElOVCglYTYpCgltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCglmbW92bS54CQkoJXNwKSssJjB4M2MJCSMgcmVzdG9yZSB7ZnAyLWZwNX0KCgltb3YubAkJSU5UKCVhNiksJWQxCglyb3IubAkJJjEsJWQxCgoJYnJhLncJCVRBTkNPTlQKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBzYXRhbigpOiAgY29tcHV0ZXMgdGhlIGFyY3RhbmdlbnQgb2YgYSBub3JtYWxpemVkIG51bWJlcgkJIwojIHNhdGFuZCgpOiBjb21wdXRlcyB0aGUgYXJjdGFuZ2VudCBvZiBhIGRlbm9ybWFsaXplZCBudW1iZXIJCSMKIwkJCQkJCQkJCSMKIyBJTlBVVAkqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIwojCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gaW5wdXQJCQkjCiMJZDAgPSByb3VuZCBwcmVjaXNpb24sbW9kZQkJCQkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCiMJZnAwID0gYXJjdGFuKFgpCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyBBQ0NVUkFDWSBhbmQgTU9OT1RPTklDSVRZICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIwojCVRoZSByZXR1cm5lZCByZXN1bHQgaXMgd2l0aGluIDIgdWxwcyBpbgk2NCBzaWduaWZpY2FudCBiaXQsCSMKIwlpLmUuIHdpdGhpbiAwLjUwMDEgdWxwIHRvIDUzIGJpdHMgaWYgdGhlIHJlc3VsdCBpcyBzdWJzZXF1ZW50bHkJIwojCXJvdW5kZWQgdG8gZG91YmxlIHByZWNpc2lvbi4gVGhlIHJlc3VsdCBpcyBwcm92YWJseSBtb25vdG9uaWMJIwojCWluIGRvdWJsZSBwcmVjaXNpb24uCQkJCQkJIwojCQkJCQkJCQkJIwojIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCiMJU3RlcCAxLiBJZiB8WHwgPj0gMTYgb3IgfFh8IDwgMS8xNiwgZ28gdG8gU3RlcCA1LgkJIwojCQkJCQkJCQkJIwojCVN0ZXAgMi4gTGV0IFggPSBzZ24gKiAyKiprICogMS54eHh4eHh4eC4uLnguCQkJIwojCQlOb3RlIHRoYXQgayA9IC00LCAtMywuLi4sIG9yIDMuCQkJCSMKIwkJRGVmaW5lIEYgPSBzZ24gKiAyKiprICogMS54eHh4MSwgaS5lLiB0aGUgZmlyc3QgNQkjCiMJCXNpZ25pZmljYW50IGJpdHMgb2YgWCB3aXRoIGEgYml0LTEgYXR0YWNoZWQgYXQgdGhlIDYtdGgJIwojCQliaXQgcG9zaXRpb24uIERlZmluZSB1IHRvIGJlIHUgPSAoWC1GKSAvICgxICsgWCpGKS4JIwojCQkJCQkJCQkJIwojCVN0ZXAgMy4gQXBwcm94aW1hdGUgYXJjdGFuKHUpIGJ5IGEgcG9seW5vbWlhbCBwb2x5LgkJIwojCQkJCQkJCQkJIwojCVN0ZXAgNC4gUmV0dXJuIGFyY3RhbihGKSArIHBvbHksIGFyY3RhbihGKSBpcyBmZXRjaGVkIGZyb20gYQkjCiMJCXRhYmxlIG9mIHZhbHVlcyBjYWxjdWxhdGVkIGJlZm9yZWhhbmQuIEV4aXQuCQkjCiMJCQkJCQkJCQkjCiMJU3RlcCA1LiBJZiB8WHwgPj0gMTYsIGdvIHRvIFN0ZXAgNy4JCQkJIwojCQkJCQkJCQkJIwojCVN0ZXAgNi4gQXBwcm94aW1hdGUgYXJjdGFuKFgpIGJ5IGFuIG9kZCBwb2x5bm9taWFsIGluIFguIEV4aXQuCSMKIwkJCQkJCQkJCSMKIwlTdGVwIDcuIERlZmluZSBYJyA9IC0xL1guIEFwcHJveGltYXRlIGFyY3RhbihYJykgYnkgYW4gb2RkCSMKIwkJcG9seW5vbWlhbCBpbiBYJy4JCQkJCSMKIwkJQXJjdGFuKFgpID0gc2lnbihYKSpQaS8yICsgYXJjdGFuKFgnKS4gRXhpdC4JCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKQVRBTkEzOglsb25nCQkweEJGRjY2ODdFLDB4MzE0OTg3RDgKQVRBTkEyOglsb25nCQkweDQwMDJBQzY5LDB4MzRBMjZEQjMKQVRBTkExOglsb25nCQkweEJGQzI0NzZGLDB4NEUxREEyOEUKCkFUQU5CNjoJbG9uZwkJMHgzRkIzNDQ0NCwweDdGODc2OTg5CkFUQU5CNToJbG9uZwkJMHhCRkI3NDRFRSwweDdGQUY0NURCCkFUQU5CNDoJbG9uZwkJMHgzRkJDNzFDNiwweDQ2OTQwMjIwCkFUQU5CMzoJbG9uZwkJMHhCRkMyNDkyNCwweDkyMTg3MkY5CkFUQU5CMjoJbG9uZwkJMHgzRkM5OTk5OSwweDk5OTk4RkE5CkFUQU5CMToJbG9uZwkJMHhCRkQ1NTU1NSwweDU1NTU1NTU1CgpBVEFOQzU6CWxvbmcJCTB4QkZCNzBCRjMsMHg5ODUzOUU2QQpBVEFOQzQ6CWxvbmcJCTB4M0ZCQzcxODcsMHg5NjJEMUQ3RApBVEFOQzM6CWxvbmcJCTB4QkZDMjQ5MjQsMHg4MjcxMDdCOApBVEFOQzI6CWxvbmcJCTB4M0ZDOTk5OTksMHg5OTk2MjYzRQpBVEFOQzE6CWxvbmcJCTB4QkZENTU1NTUsMHg1NTU1NTUzNgoKUFBJQlkyOglsb25nCQkweDNGRkYwMDAwLDB4QzkwRkRBQTIsMHgyMTY4QzIzNSwweDAwMDAwMDAwCk5QSUJZMjoJbG9uZwkJMHhCRkZGMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHgwMDAwMDAwMAoKUFRJTlk6CWxvbmcJCTB4MDAwMTAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKTlRJTlk6CWxvbmcJCTB4ODAwMTAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKCkFUQU5UQkw6Cglsb25nCQkweDNGRkIwMDAwLDB4ODNEMTUyQzUsMHgwNjBCN0E1MSwweDAwMDAwMDAwCglsb25nCQkweDNGRkIwMDAwLDB4OEJDODU0NDUsMHg2NTQ5OEI4QiwweDAwMDAwMDAwCglsb25nCQkweDNGRkIwMDAwLDB4OTNCRTQwNjAsMHgxNzYyNkIwRCwweDAwMDAwMDAwCglsb25nCQkweDNGRkIwMDAwLDB4OUJCMzA3OEQsMHgzNUFFQzIwMiwweDAwMDAwMDAwCglsb25nCQkweDNGRkIwMDAwLDB4QTNBNjlBNTIsMHg1RERDRTdERSwweDAwMDAwMDAwCglsb25nCQkweDNGRkIwMDAwLDB4QUI5OEU5NDMsMHg2Mjc2NTYxOSwweDAwMDAwMDAwCglsb25nCQkweDNGRkIwMDAwLDB4QjM4OUU1MDIsMHhGOUM1OTg2MiwweDAwMDAwMDAwCglsb25nCQkweDNGRkIwMDAwLDB4QkI3OTdFNDMsMHg2QjA5RTZGQiwweDAwMDAwMDAwCglsb25nCQkweDNGRkIwMDAwLDB4QzM2N0E1QzcsMHgzOUU1RjQ0NiwweDAwMDAwMDAwCglsb25nCQkweDNGRkIwMDAwLDB4Q0I1NDRDNjEsMHhDRkY3RDVDNiwweDAwMDAwMDAwCglsb25nCQkweDNGRkIwMDAwLDB4RDMzRjYyRjgsMHgyNDg4NTMzRSwweDAwMDAwMDAwCglsb25nCQkweDNGRkIwMDAwLDB4REIyOERBODEsMHg2MjQwNEM3NywweDAwMDAwMDAwCglsb25nCQkweDNGRkIwMDAwLDB4RTMxMEE0MDcsMHg4QUQzNEYxOCwweDAwMDAwMDAwCglsb25nCQkweDNGRkIwMDAwLDB4RUFGNkIwQTgsMHgxODhFRTFFQiwweDAwMDAwMDAwCglsb25nCQkweDNGRkIwMDAwLDB4RjJEQUYxOTQsMHg5REJFNzlENSwweDAwMDAwMDAwCglsb25nCQkweDNGRkIwMDAwLDB4RkFCRDU4MTMsMHg2MUQ0N0UzRSwweDAwMDAwMDAwCglsb25nCQkweDNGRkMwMDAwLDB4ODM0NkFDMjEsMHgwOTU5RUNDNCwweDAwMDAwMDAwCglsb25nCQkweDNGRkMwMDAwLDB4OEIyMzJBMDgsMHgzMDQyODJEOCwweDAwMDAwMDAwCglsb25nCQkweDNGRkMwMDAwLDB4OTJGQjcwQjgsMHhEMjlBRTJGOSwweDAwMDAwMDAwCglsb25nCQkweDNGRkMwMDAwLDB4OUFDRjQ3NkYsMHg1Q0NEMUNCNCwweDAwMDAwMDAwCglsb25nCQkweDNGRkMwMDAwLDB4QTI5RTc2MzAsMHg0OTU0RjIzRiwweDAwMDAwMDAwCglsb25nCQkweDNGRkMwMDAwLDB4QUE2OEM1RDAsMHg4QUI4NTIzMCwweDAwMDAwMDAwCglsb25nCQkweDNGRkMwMDAwLDB4QjIyREZGRkQsMHg5RDUzOUY4MywweDAwMDAwMDAwCglsb25nCQkweDNGRkMwMDAwLDB4QjlFREVGNDUsMHgzRTkwMEVBNSwweDAwMDAwMDAwCglsb25nCQkweDNGRkMwMDAwLDB4QzFBODVGMUMsMHhDNzVFM0VBNSwweDAwMDAwMDAwCglsb25nCQkweDNGRkMwMDAwLDB4Qzk1RDFCRTgsMHgyODEzOERFNiwweDAwMDAwMDAwCglsb25nCQkweDNGRkMwMDAwLDB4RDEwQkYzMDAsMHg4NDBEMkRFNCwweDAwMDAwMDAwCglsb25nCQkweDNGRkMwMDAwLDB4RDhCNEIyQkEsMHg2QkMwNUU3QSwweDAwMDAwMDAwCglsb25nCQkweDNGRkMwMDAwLDB4RTA1NzJBNkIsMHhCNDIzMzVGNiwweDAwMDAwMDAwCglsb25nCQkweDNGRkMwMDAwLDB4RTdGMzJBNzAsMHhFQTlDQUE4RiwweDAwMDAwMDAwCglsb25nCQkweDNGRkMwMDAwLDB4RUY4ODg0MzIsMHg2NEVDRUZBQSwweDAwMDAwMDAwCglsb25nCQkweDNGRkMwMDAwLDB4RjcxNzBBMjgsMHhFQ0MwNjY2NiwweDAwMDAwMDAwCglsb25nCQkweDNGRkQwMDAwLDB4ODEyRkQyODgsMHgzMzJEQUQzMiwweDAwMDAwMDAwCglsb25nCQkweDNGRkQwMDAwLDB4ODhBOEQxQjEsMHgyMThFNEQ2NCwweDAwMDAwMDAwCglsb25nCQkweDNGRkQwMDAwLDB4OTAxMkFCM0YsMHgyM0U0QUVFOCwweDAwMDAwMDAwCglsb25nCQkweDNGRkQwMDAwLDB4OTc2Q0MzRDQsMHgxMUU3RjFCOSwweDAwMDAwMDAwCglsb25nCQkweDNGRkQwMDAwLDB4OUVCNjg5NDksMHgzODg5QTIyNywweDAwMDAwMDAwCglsb25nCQkweDNGRkQwMDAwLDB4QTVFRjcyQzMsMHg0NDg3MzYxQiwweDAwMDAwMDAwCglsb25nCQkweDNGRkQwMDAwLDB4QUQxNzAwQkEsMHhGMDdBNzIyNywweDAwMDAwMDAwCglsb25nCQkweDNGRkQwMDAwLDB4QjQyQ0JDRkEsMHhGRDM3RUZCNywweDAwMDAwMDAwCglsb25nCQkweDNGRkQwMDAwLDB4QkIzMDNBOTQsMHgwQkE4MEY4OSwweDAwMDAwMDAwCglsb25nCQkweDNGRkQwMDAwLDB4QzIyMTE1QzYsMHhGQ0FFQkJBRiwweDAwMDAwMDAwCglsb25nCQkweDNGRkQwMDAwLDB4QzhGRUYzRTYsMHg4NjMzMTIyMSwweDAwMDAwMDAwCglsb25nCQkweDNGRkQwMDAwLDB4Q0ZDOTgzMzAsMHhCNDAwMEM3MCwweDAwMDAwMDAwCglsb25nCQkweDNGRkQwMDAwLDB4RDY4MDdBQTEsMHgxMDJDNUJGOSwweDAwMDAwMDAwCglsb25nCQkweDNGRkQwMDAwLDB4REQyMzk5QkMsMHgzMTI1MkFBMywweDAwMDAwMDAwCglsb25nCQkweDNGRkQwMDAwLDB4RTNCMkE4NTUsMHg2QjhGQzUxNywweDAwMDAwMDAwCglsb25nCQkweDNGRkQwMDAwLDB4RUEyRDc2NEYsMHg2NDMxNTk4OSwweDAwMDAwMDAwCglsb25nCQkweDNGRkQwMDAwLDB4RjNCRjVCRjgsMHhCQUQxQTIxRCwweDAwMDAwMDAwCglsb25nCQkweDNGRkUwMDAwLDB4ODAxQ0UzOUUsMHgwRDIwNUM5QSwweDAwMDAwMDAwCglsb25nCQkweDNGRkUwMDAwLDB4ODYzMEEyREEsMHhEQTFFRDA2NiwweDAwMDAwMDAwCglsb25nCQkweDNGRkUwMDAwLDB4OEMxQUQ0NDUsMHhGM0UwOUI4QywweDAwMDAwMDAwCglsb25nCQkweDNGRkUwMDAwLDB4OTFEQjhGMTYsMHg2NEYzNTBFMiwweDAwMDAwMDAwCglsb25nCQkweDNGRkUwMDAwLDB4OTc3MzE0MjAsMHgzNjVFNTM4QywweDAwMDAwMDAwCglsb25nCQkweDNGRkUwMDAwLDB4OUNFMUM4RTYsMHhBMEI4Q0RCQSwweDAwMDAwMDAwCglsb25nCQkweDNGRkUwMDAwLDB4QTIyODMyREIsMHhDQURBQUUwOSwweDAwMDAwMDAwCglsb25nCQkweDNGRkUwMDAwLDB4QTc0NkYyREQsMHhCNzYwMjI5NCwweDAwMDAwMDAwCglsb25nCQkweDNGRkUwMDAwLDB4QUMzRUMwRkIsMHg5OTdERDZBMiwweDAwMDAwMDAwCglsb25nCQkweDNGRkUwMDAwLDB4QjExMDY4OEEsMHhFQkRDNkY2QSwweDAwMDAwMDAwCglsb25nCQkweDNGRkUwMDAwLDB4QjVCQ0M0OTAsMHg1OUVDQzRCMCwweDAwMDAwMDAwCglsb25nCQkweDNGRkUwMDAwLDB4QkE0NEJDN0QsMHhENDcwNzgyRiwweDAwMDAwMDAwCglsb25nCQkweDNGRkUwMDAwLDB4QkVBOTQxNDQsMHhGRDA0OUFBQywweDAwMDAwMDAwCglsb25nCQkweDNGRkUwMDAwLDB4QzJFQjRBQkIsMHg2NjE2MjhCNiwweDAwMDAwMDAwCglsb25nCQkweDNGRkUwMDAwLDB4QzcwQkQ1NEMsMHhFNjAyRUUxNCwweDAwMDAwMDAwCglsb25nCQkweDNGRkUwMDAwLDB4Q0QwMDA1NDksMHhBREVDNzE1OSwweDAwMDAwMDAwCglsb25nCQkweDNGRkUwMDAwLDB4RDQ4NDU3RDIsMHhEOEVBNEVBMywweDAwMDAwMDAwCglsb25nCQkweDNGRkUwMDAwLDB4REI5NDhEQTcsMHgxMkRFQ0UzQiwweDAwMDAwMDAwCglsb25nCQkweDNGRkUwMDAwLDB4RTIzODU1RjksMHg2OUU4MDk2QSwweDAwMDAwMDAwCglsb25nCQkweDNGRkUwMDAwLDB4RTg3NzExMjksMHhDNDM1MzI1OSwweDAwMDAwMDAwCglsb25nCQkweDNGRkUwMDAwLDB4RUU1N0MxNkUsMHgwRDM3OUMwRCwweDAwMDAwMDAwCglsb25nCQkweDNGRkUwMDAwLDB4RjNFMTAyMTEsMHhBODdDMzc3OSwweDAwMDAwMDAwCglsb25nCQkweDNGRkUwMDAwLDB4RjkxOTAzOUQsMHg3NThCOEQ0MSwweDAwMDAwMDAwCglsb25nCQkweDNGRkUwMDAwLDB4RkUwNThCOEYsMHg2NDkzNUZCMywweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4ODE1NUZCNDksMHg3QjY4NUQwNCwweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4ODM4ODlFMzUsMHg0OUQxMDhFMSwweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4ODU5Q0ZBNzYsMHg1MTFENzI0QiwweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4ODc5NTJFQ0YsMHhGRjgxMzFFNywweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4ODk3MzJGRDEsMHg5NTU3NjQxQiwweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4OEIzOENBRDEsMHgwMTkzMkEzNSwweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4OENFN0E4RDgsMHgzMDFFRTZCNSwweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4OEY0NkEzOUUsMHgyRUFFNTI4MSwweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4OTIyREE3RDcsMHg5MTg4ODQ4NywweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4OTREMTlGQ0IsMHhERURGNTI0MSwweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4OTczQUI5NDQsMHgxOUQyQTA4QiwweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4OTk2RkYwMEUsMHgwOEUxMEI5NiwweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4OUI3NzNGOTUsMHgxMjMyMURBNywweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4OUQ1NUNDMzIsMHgwRjkzNTYyNCwweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4OUYxMDA1NzUsMHgwMDZDQzU3MSwweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4QTBBOUMyOTAsMHhEOTdDQzA2QywweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4QTIyNjU5RUIsMHhFQkMwNjMwQSwweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4QTM4OEI0QUYsMHhGNkVGMEVDOSwweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4QTREMzVGMTAsMHg2MUQyOTJDNCwweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4QTYwODk1REMsMHhGQkUzMTg3RSwweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4QTcyQTUxREMsMHg3MzY3QkVBQywweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4QTgzQTUxNTMsMHgwOTU2MTY4RiwweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4QTkzQTIwMDcsMHg3NTM5NTQ2RSwweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4QUE5RTcyNDUsMHgwMjNCMjYwNSwweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4QUM0Qzg0QkEsMHg2RkU0RDU4RiwweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4QURDRTRBNEEsMHg2MDZCOTcxMiwweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4QUYyQTJEQ0QsMHg4RDI2M0M5QywweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4QjA2NTZGODEsMHhGMjIyNjVDNywweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4QjE4NDY1MTUsMHgwRjcxNDk2QSwweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4QjI4QUFBMTUsMHg2RjlBREEzNSwweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4QjM3QjQ0RkYsMHgzNzY2Qjg5NSwweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4QjQ1OEMzREMsMHhFOTYzMDQzMywweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4QjUyNTUyOUQsMHg1NjIyNDZCRCwweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4QjVFMkNDQTksMHg1RjlEODhDQywweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4QjY5MkNBREEsMHg3QUNBMUFEQSwweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4QjczNkFFQTcsMHhBNjkyNTgzOCwweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4QjdDRkFCMjgsMHg3RTlGN0IzNiwweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4Qjg1RUNDNjYsMHhDQjIxOTgzNSwweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4QjhFNEZENUEsMHgyMEE1OTNEQSwweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4Qjk5RjQxRjYsMHg0QUZGOUJCNSwweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4QkE3RjFFMTcsMHg4NDJCQkU3QiwweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4QkI0NzEyODUsMHg3NjM3RTE3RCwweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4QkJGQUJFOEEsMHg0Nzg4REY2RiwweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4QkM5RDBGQUQsMHgyQjY4OUQ3OSwweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4QkQzMDZBMzksMHg0NzFFQ0Q4NiwweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4QkRCNkM3MzEsMHg4NTZBRjE4QSwweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4QkUzMUNBQzUsMHgwMkU4MEQ3MCwweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4QkVBMkQ1NUMsMHhFMzMxOTRFMiwweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4QkYwQjEwQjcsMHhDMDMxMjhGMCwweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4QkY2QjdBMTgsMHhEQUNCNzc4RCwweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4QkZDNEVBNDYsMHg2M0ZBMThGNiwweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4QzAxODFCREUsMHg4Qjg5QTQ1NCwweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4QzA2NUIwNjYsMHhDRkJGNjQzOSwweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4QzBBRTM0NUYsMHg1NjM0MEFFNiwweDAwMDAwMDAwCglsb25nCQkweDNGRkYwMDAwLDB4QzBGMjIyOTEsMHg5Q0I5RTZBNywweDAwMDAwMDAwCgoJc2V0CQlYLEZQX1NDUjAKCXNldAkJWERDQVJFLFgrMgoJc2V0CQlYRlJBQyxYKzQKCXNldAkJWEZSQUNMTyxYKzgKCglzZXQJCUFUQU5GLEZQX1NDUjEKCXNldAkJQVRBTkZISSxBVEFORis0CglzZXQJCUFUQU5GTE8sQVRBTkYrOAoKCWdsb2JhbAkJc2F0YW4KIy0tRU5UUlkgUE9JTlQgRk9SIEFUQU4oWCksIEhFUkUgWCBJUyBGSU5JVEUsIE5PTi1aRVJPLCBBTkQgTk9UIE5BTidTCnNhdGFuOgoJZm1vdi54CQkoJWEwKSwlZnAwCQkjIExPQUQgSU5QVVQKCgltb3YubAkJKCVhMCksJWQxCgltb3YudwkJNCglYTApLCVkMQoJZm1vdi54CQklZnAwLFgoJWE2KQoJYW5kLmwJCSYweDdGRkZGRkZGLCVkMQoKCWNtcC5sCQklZDEsJjB4M0ZGQjgwMDAJCSMgfFh8ID49IDEvMTY/CgliZ2UuYgkJQVRBTk9LMQoJYnJhLncJCUFUQU5TTQoKQVRBTk9LMToKCWNtcC5sCQklZDEsJjB4NDAwMkZGRkYJCSMgfFh8IDwgMTYgPwoJYmxlLmIJCUFUQU5NQUlOCglicmEudwkJQVRBTkJJRwoKIy0tVEhFIE1PU1QgTElLRUxZIENBU0UsIHxYfCBJTiBbMS8xNiwgMTYpLiBXRSBVU0UgVEFCTEUgVEVDSE5JUVVFCiMtLVRIRSBJREVBIElTIEFUQU4oWCkgPSBBVEFOKEYpICsgQVRBTiggW1gtRl0gLyBbMStYRl0gKS4KIy0tU08gSUYgRiBJUyBDSE9TRU4gVE8gQkUgQ0xPU0UgVE8gWCBBTkQgQVRBTihGKSBJUyBTVE9SRUQgSU4KIy0tQSBUQUJMRSwgQUxMIFdFIE5FRUQgSVMgVE8gQVBQUk9YSU1BVEUgQVRBTihVKSBXSEVSRQojLS1VID0gKFgtRikvKDErWEYpIElTIFNNQUxMIChSRU1FTUJFUiBGIElTIENMT1NFIFRPIFgpLiBJVCBJUwojLS1UUlVFIFRIQVQgQSBESVZJREUgSVMgTk9XIE5FRURFRCwgQlVUIFRIRSBBUFBST1hJTUFUSU9OIEZPUgojLS1BVEFOKFUpIElTIEEgVkVSWSBTSE9SVCBQT0xZTk9NSUFMIEFORCBUSEUgSU5ERVhJTkcgVE8KIy0tRkVUQ0ggRiBBTkQgU0FWSU5HIE9GIFJFR0lTVEVSUyBDQU4gQkUgQUxMIEhJREVEIFVOREVSIFRIRQojLS1ESVZJREUuIElOIFRIRSBFTkQgVEhJUyBNRVRIT0QgSVMgTVVDSCBGQVNURVIgVEhBTiBBIFRSQURJVElPTkFMCiMtLU9ORS4gTk9URSBBTFNPIFRIQVQgVEhFIFRSQURJVElPTkFMIFNDSEVNRSBUSEFUIEFQUFJPWElNQVRFCiMtLUFUQU4oWCkgRElSRUNUTFkgV0lMTCBORUVEIFRPIFVTRSBBIFJBVElPTkFMIEFQUFJPWElNQVRJT04KIy0tKERJVklTSU9OIE5FRURFRCkgQU5ZV0FZIEJFQ0FVU0UgQSBQT0xZTk9NSUFMIEFQUFJPWElNQVRJT04KIy0tV0lMTCBJTlZPTFZFIEEgVkVSWSBMT05HIFBPTFlOT01JQUwuCgojLS1OT1cgV0UgU0VFIFggQVMgKy0yXksgKiAxLkJCQkJCQkIuLi4uQiA8LSAxLiArIDYzIEJJVFMKIy0tV0UgQ0hPU0UgRiBUTyBCRSArLTJeSyAqIDEuQkJCQjEKIy0tVEhBVCBJUyBJVCBNQVRDSEVTIFRIRSBFWFBPTkVOVCBBTkQgRklSU1QgNSBCSVRTIE9GIFgsIFRIRQojLS1TSVhUSCBCSVRTIElTIFNFVCBUTyBCRSAxLiBTSU5DRSBLID0gLTQsIC0zLCAuLi4sIDMsIFRIRVJFCiMtLUFSRSBPTkxZIDggVElNRVMgMTYgPSAyXjcgPSAxMjggfEZ8J1MuIFNJTkNFIEFUQU4oLXxGfCkgSVMKIy0tIC1BVEFOKHxGfCksIFdFIE5FRUQgVE8gU1RPUkUgT05MWSBBVEFOKHxGfCkuCgpBVEFOTUFJTjoKCglhbmQubAkJJjB4RjgwMDAwMDAsWEZSQUMoJWE2KQkjIEZJUlNUIDUgQklUUwoJb3IubAkJJjB4MDQwMDAwMDAsWEZSQUMoJWE2KQkjIFNFVCA2LVRIIEJJVCBUTyAxCgltb3YubAkJJjB4MDAwMDAwMDAsWEZSQUNMTyglYTYpICMgTE9DQVRJT04gT0YgWCBJUyBOT1cgRgoKCWZtb3YueAkJJWZwMCwlZnAxCQkjIEZQMSBJUyBYCglmbXVsLngJCVgoJWE2KSwlZnAxCQkjIEZQMSBJUyBYKkYsIE5PVEUgVEhBVCBYKkYgPiAwCglmc3ViLngJCVgoJWE2KSwlZnAwCQkjIEZQMCBJUyBYLUYKCWZhZGQucwkJJjB4M0Y4MDAwMDAsJWZwMQkjIEZQMSBJUyAxICsgWCpGCglmZGl2LngJCSVmcDEsJWZwMAkJIyBGUDAgSVMgVSA9IChYLUYpLygxK1gqRikKCiMtLVdISUxFIFRIRSBESVZJU0lPTiBJUyBUQUtJTkcgSVRTIFRJTUUsIFdFIEZFVENIIEFUQU4ofEZ8KQojLS1DUkVBVEUgQVRBTihGKSBBTkQgU1RPUkUgSVQgSU4gQVRBTkYsIEFORAojLS1TQVZFIFJFR0lTVEVSUyBGUDIuCgoJbW92LmwJCSVkMiwtKCVzcCkJCSMgU0FWRSBkMiBURU1QT1JBUklMWQoJbW92LmwJCSVkMSwlZDIJCQkjIFRIRSBFWFAgQU5EIDE2IEJJVFMgT0YgWAoJYW5kLmwJCSYweDAwMDA3ODAwLCVkMQkJIyA0IFZBUllJTkcgQklUUyBPRiBGJ1MgRlJBQ1RJT04KCWFuZC5sCQkmMHg3RkZGMDAwMCwlZDIJCSMgRVhQT05FTlQgT0YgRgoJc3ViLmwJCSYweDNGRkIwMDAwLCVkMgkJIyBLKzQKCWFzci5sCQkmMSwlZDIKCWFkZC5sCQklZDIsJWQxCQkJIyBUSEUgNyBCSVRTIElERU5USUZZSU5HIEYKCWFzci5sCQkmNywlZDEJCQkjIElOREVYIElOVE8gVEJMIE9GIEFUQU4ofEZ8KQoJbGVhCQlBVEFOVEJMKCVwYyksJWExCglhZGQubAkJJWQxLCVhMQkJCSMgQUREUkVTUyBPRiBBVEFOKHxGfCkKCW1vdi5sCQkoJWExKSssQVRBTkYoJWE2KQoJbW92LmwJCSglYTEpKyxBVEFORkhJKCVhNikKCW1vdi5sCQkoJWExKSssQVRBTkZMTyglYTYpCSMgQVRBTkYgSVMgTk9XIEFUQU4ofEZ8KQoJbW92LmwJCVgoJWE2KSwlZDEJCSMgTE9BRCBTSUdOIEFORCBFWFBPLiBBR0FJTgoJYW5kLmwJCSYweDgwMDAwMDAwLCVkMQkJIyBTSUdOKEYpCglvci5sCQklZDEsQVRBTkYoJWE2KQkJIyBBVEFORiBJUyBOT1cgU0lHTihGKSpBVEFOKHxGfCkKCW1vdi5sCQkoJXNwKSssJWQyCQkjIFJFU1RPUkUgZDIKCiMtLVRIQVQnUyBBTEwgSSBIQVZFIFRPIERPIEZPUiBOT1csCiMtLUJVVCBBTEFTLCBUSEUgRElWSURFIElTIFNUSUxMIENSQU5LSU5HIQoKIy0tVSBJTiBGUDAsIFdFIEFSRSBOT1cgUkVBRFkgVE8gQ09NUFVURSBBVEFOKFUpIEFTCiMtLVUgKyBBMSpVKlYqKEEyICsgViooQTMgKyBWKSksIFYgPSBVKlUKIy0tVEhFIFBPTFlOT01JQUwgTUFZIExPT0sgU1RSQU5HRSwgQlVUIElTIE5FVkVSVEhFTEVTUyBDT1JSRUNULgojLS1USEUgTkFUVVJBTCBGT1JNIElTIFUgKyBVKlYqKEExICsgViooQTIgKyBWKkEzKSkKIy0tV0hBVCBXRSBIQVZFIEhFUkUgSVMgTUVSRUxZCUExID0gQTMsIEEyID0gQTEvQTMsIEEzID0gQTIvQTMuCiMtLVRIRSBSRUFTT04gRk9SIFRISVMgUkVBUlJBTkdFTUVOVCBJUyBUTyBNQUtFIFRIRSBJTkRFUEVOREVOVAojLS1QQVJUUyBBMSpVKlYgQU5EIChBMiArIC4uLiBTVFVGRikgTU9SRSBMT0FELUJBTEFOQ0VECgoJZm1vdm0ueAkJJjB4MDQsLSglc3ApCQkjIHNhdmUgZnAyCgoJZm1vdi54CQklZnAwLCVmcDEKCWZtdWwueAkJJWZwMSwlZnAxCglmbW92LmQJCUFUQU5BMyglcGMpLCVmcDIKCWZhZGQueAkJJWZwMSwlZnAyCQkjIEEzK1YKCWZtdWwueAkJJWZwMSwlZnAyCQkjIFYqKEEzK1YpCglmbXVsLngJCSVmcDAsJWZwMQkJIyBVKlYKCWZhZGQuZAkJQVRBTkEyKCVwYyksJWZwMgkjIEEyK1YqKEEzK1YpCglmbXVsLmQJCUFUQU5BMSglcGMpLCVmcDEJIyBBMSpVKlYKCWZtdWwueAkJJWZwMiwlZnAxCQkjIEExKlUqViooQTIrViooQTMrVikpCglmYWRkLngJCSVmcDEsJWZwMAkJIyBBVEFOKFUpLCBGUDEgUkVMRUFTRUQKCglmbW92bS54CQkoJXNwKSssJjB4MjAJCSMgcmVzdG9yZSBmcDIKCglmbW92LmwJCSVkMCwlZnBjcgkJIyByZXN0b3JlIHVzZXJzIHJuZCBtb2RlLHByZWMKCWZhZGQueAkJQVRBTkYoJWE2KSwlZnAwCQkjIEFUQU4oWCkKCWJyYQkJdF9pbngyCgpBVEFOQk9SUzoKIy0tfFh8IElTIElOIGQwIElOIENPTVBBQ1QgRk9STS4gRlAxLCBkMCBTQVZFRC4KIy0tRlAwIElTIFggQU5EIHxYfCA8PSAxLzE2IE9SIHxYfCA+PSAxNi4KCWNtcC5sCQklZDEsJjB4M0ZGRjgwMDAKCWJndC53CQlBVEFOQklHCQkJIyBJLkUuIHxYfCA+PSAxNgoKQVRBTlNNOgojLS18WHwgPD0gMS8xNgojLS1JRiB8WHwgPCAyXigtNDApLCBSRVRVUk4gWCBBUyBBTlNXRVIuIE9USEVSV0lTRSwgQVBQUk9YSU1BVEUKIy0tQVRBTihYKSBCWSBYICsgWCpZKihCMStZKihCMitZKihCMytZKihCNCtZKihCNStZKkI2KSkpKSkKIy0tV0hJQ0ggSVMgWCArIFgqWSooIFtCMStaKihCMytaKkI1KV0gKyBbWSooQjIrWiooQjQrWipCNildICkKIy0tV0hFUkUgWSA9IFgqWCwgQU5EIFogPSBZKlkuCgoJY21wLmwJCSVkMSwmMHgzRkQ3ODAwMAoJYmx0LncJCUFUQU5USU5ZCgojLS1DT01QVVRFIFBPTFlOT01JQUwKCWZtb3ZtLngJCSYweDBjLC0oJXNwKQkJIyBzYXZlIGZwMi9mcDMKCglmbXVsLngJCSVmcDAsJWZwMAkJIyBGUE8gSVMgWSA9IFgqWAoKCWZtb3YueAkJJWZwMCwlZnAxCglmbXVsLngJCSVmcDEsJWZwMQkJIyBGUDEgSVMgWiA9IFkqWQoKCWZtb3YuZAkJQVRBTkI2KCVwYyksJWZwMgoJZm1vdi5kCQlBVEFOQjUoJXBjKSwlZnAzCgoJZm11bC54CQklZnAxLCVmcDIJCSMgWipCNgoJZm11bC54CQklZnAxLCVmcDMJCSMgWipCNQoKCWZhZGQuZAkJQVRBTkI0KCVwYyksJWZwMgkjIEI0K1oqQjYKCWZhZGQuZAkJQVRBTkIzKCVwYyksJWZwMwkjIEIzK1oqQjUKCglmbXVsLngJCSVmcDEsJWZwMgkJIyBaKihCNCtaKkI2KQoJZm11bC54CQklZnAzLCVmcDEJCSMgWiooQjMrWipCNSkKCglmYWRkLmQJCUFUQU5CMiglcGMpLCVmcDIJIyBCMitaKihCNCtaKkI2KQoJZmFkZC5kCQlBVEFOQjEoJXBjKSwlZnAxCSMgQjErWiooQjMrWipCNSkKCglmbXVsLngJCSVmcDAsJWZwMgkJIyBZKihCMitaKihCNCtaKkI2KSkKCWZtdWwueAkJWCglYTYpLCVmcDAJCSMgWCpZCgoJZmFkZC54CQklZnAyLCVmcDEJCSMgW0IxK1oqKEIzK1oqQjUpXStbWSooQjIrWiooQjQrWipCNikpXQoKCWZtdWwueAkJJWZwMSwlZnAwCQkjIFgqWSooW0IxK1oqKEIzK1oqQjUpXStbWSooQjIrWiooQjQrWipCNikpXSkKCglmbW92bS54CQkoJXNwKSssJjB4MzAJCSMgcmVzdG9yZSBmcDIvZnAzCgoJZm1vdi5sCQklZDAsJWZwY3IJCSMgcmVzdG9yZSB1c2VycyBybmQgbW9kZSxwcmVjCglmYWRkLngJCVgoJWE2KSwlZnAwCglicmEJCXRfaW54MgoKQVRBTlRJTlk6CiMtLXxYfCA8IDJeKC00MCksIEFUQU4oWCkgPSBYCgoJZm1vdi5sCQklZDAsJWZwY3IJCSMgcmVzdG9yZSB1c2VycyBybmQgbW9kZSxwcmVjCgltb3YuYgkJJkZNT1ZfT1AsJWQxCQkjIGxhc3QgaW5zdCBpcyBNT1ZFCglmbW92LngJCVgoJWE2KSwlZnAwCQkjIGxhc3QgaW5zdCAtIHBvc3NpYmxlIGV4Y2VwdGlvbiBzZXQKCglicmEJCXRfY2F0Y2gKCkFUQU5CSUc6CiMtLUlGIHxYfCA+IDJeKDEwMCksIFJFVFVSTglTSUdOKFgpKihQSS8yIC0gVElOWSkuIE9USEVSV0lTRSwKIy0tUkVUVVJOIFNJR04oWCkqUEkvMiArIEFUQU4oLTEvWCkuCgljbXAubAkJJWQxLCYweDQwNjM4MDAwCgliZ3QudwkJQVRBTkhVR0UKCiMtLUFQUFJPWElNQVRFIEFUQU4oLTEvWCkgQlkKIy0tWCcrWCcqWSooQzErWSooQzIrWSooQzMrWSooQzQrWSpDNSkpKSksIFgnID0gLTEvWCwgWSA9IFgnKlgnCiMtLVRISVMgQ0FOIEJFIFJFLVdSSVRURU4gQVMKIy0tWCcrWCcqWSooIFtDMStaKihDMytaKkM1KV0gKyBbWSooQzIrWipDNCldICksIFogPSBZKlkuCgoJZm1vdm0ueAkJJjB4MGMsLSglc3ApCQkjIHNhdmUgZnAyL2ZwMwoKCWZtb3YucwkJJjB4QkY4MDAwMDAsJWZwMQkjIExPQUQgLTEKCWZkaXYueAkJJWZwMCwlZnAxCQkjIEZQMSBJUyAtMS9YCgojLS1ESVZJREUgSVMgU1RJTEwgQ1JBTktJTkcKCglmbW92LngJCSVmcDEsJWZwMAkJIyBGUDAgSVMgWCcKCWZtdWwueAkJJWZwMCwlZnAwCQkjIEZQMCBJUyBZID0gWCcqWCcKCWZtb3YueAkJJWZwMSxYKCVhNikJCSMgWCBJUyBSRUFMTFkgWCcKCglmbW92LngJCSVmcDAsJWZwMQoJZm11bC54CQklZnAxLCVmcDEJCSMgRlAxIElTIFogPSBZKlkKCglmbW92LmQJCUFUQU5DNSglcGMpLCVmcDMKCWZtb3YuZAkJQVRBTkM0KCVwYyksJWZwMgoKCWZtdWwueAkJJWZwMSwlZnAzCQkjIFoqQzUKCWZtdWwueAkJJWZwMSwlZnAyCQkjIFoqQjQKCglmYWRkLmQJCUFUQU5DMyglcGMpLCVmcDMJIyBDMytaKkM1CglmYWRkLmQJCUFUQU5DMiglcGMpLCVmcDIJIyBDMitaKkM0CgoJZm11bC54CQklZnAzLCVmcDEJCSMgWiooQzMrWipDNSksIEZQMyBSRUxFQVNFRAoJZm11bC54CQklZnAwLCVmcDIJCSMgWSooQzIrWipDNCkKCglmYWRkLmQJCUFUQU5DMSglcGMpLCVmcDEJIyBDMStaKihDMytaKkM1KQoJZm11bC54CQlYKCVhNiksJWZwMAkJIyBYJypZCgoJZmFkZC54CQklZnAyLCVmcDEJCSMgW1kqKEMyK1oqQzQpXStbQzErWiooQzMrWipDNSldCgoJZm11bC54CQklZnAxLCVmcDAJCSMgWCcqWSooW0IxK1oqKEIzK1oqQjUpXQojCQkJCQkuLi4JK1tZKihCMitaKihCNCtaKkI2KSldKQoJZmFkZC54CQlYKCVhNiksJWZwMAoKCWZtb3ZtLngJCSglc3ApKywmMHgzMAkJIyByZXN0b3JlIGZwMi9mcDMKCglmbW92LmwJCSVkMCwlZnBjcgkJIyByZXN0b3JlIHVzZXJzIHJuZCBtb2RlLHByZWMKCXRzdC5iCQkoJWEwKQoJYnBsLmIJCXBvc19iaWcKCm5lZ19iaWc6CglmYWRkLngJCU5QSUJZMiglcGMpLCVmcDAKCWJyYQkJdF9taW54MgoKcG9zX2JpZzoKCWZhZGQueAkJUFBJQlkyKCVwYyksJWZwMAoJYnJhCQl0X3BpbngyCgpBVEFOSFVHRToKIy0tUkVUVVJOIFNJR04oWCkqKFBJQlkyIC0gVElOWSkgPSBTSUdOKFgpKlBJQlkyIC0gU0lHTihYKSpUSU5ZCgl0c3QuYgkJKCVhMCkKCWJwbC5iCQlwb3NfaHVnZQoKbmVnX2h1Z2U6CglmbW92LngJCU5QSUJZMiglcGMpLCVmcDAKCWZtb3YubAkJJWQwLCVmcGNyCglmYWRkLngJCVBUSU5ZKCVwYyksJWZwMAoJYnJhCQl0X21pbngyCgpwb3NfaHVnZToKCWZtb3YueAkJUFBJQlkyKCVwYyksJWZwMAoJZm1vdi5sCQklZDAsJWZwY3IKCWZhZGQueAkJTlRJTlkoJXBjKSwlZnAwCglicmEJCXRfcGlueDIKCglnbG9iYWwJCXNhdGFuZAojLS1FTlRSWSBQT0lOVCBGT1IgQVRBTihYKSBGT1IgREVOT1JNQUxJWkVEIEFSR1VNRU5UCnNhdGFuZDoKCWJyYQkJdF9leHRkbnJtCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgc2FzaW4oKTogIGNvbXB1dGVzIHRoZSBpbnZlcnNlIHNpbmUgb2YgYSBub3JtYWxpemVkIGlucHV0CQkjCiMgc2FzaW5kKCk6IGNvbXB1dGVzIHRoZSBpbnZlcnNlIHNpbmUgb2YgYSBkZW5vcm1hbGl6ZWQgaW5wdXQJCSMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gaW5wdXQJCQkjCiMJZDAgPSByb3VuZCBwcmVjaXNpb24sbW9kZQkJCQkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJZnAwID0gYXJjc2luKFgpCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyBBQ0NVUkFDWSBhbmQgTU9OT1RPTklDSVRZICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCVRoZSByZXR1cm5lZCByZXN1bHQgaXMgd2l0aGluIDMgdWxwcyBpbgk2NCBzaWduaWZpY2FudCBiaXQsCSMKIwlpLmUuIHdpdGhpbiAwLjUwMDEgdWxwIHRvIDUzIGJpdHMgaWYgdGhlIHJlc3VsdCBpcyBzdWJzZXF1ZW50bHkJIwojCXJvdW5kZWQgdG8gZG91YmxlIHByZWNpc2lvbi4gVGhlIHJlc3VsdCBpcyBwcm92YWJseSBtb25vdG9uaWMJIwojCWluIGRvdWJsZSBwcmVjaXNpb24uCQkJCQkJIwojCQkJCQkJCQkJIwojIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJCQkJCQkJCQkjCiMJQVNJTgkJCQkJCQkJIwojCTEuIElmIHxYfCA+PSAxLCBnbyB0byAzLgkJCQkJIwojCQkJCQkJCQkJIwojCTIuICh8WHwgPCAxKSBDYWxjdWxhdGUgYXNpbihYKSBieQkJCQkjCiMJCXogOj0gc3FydCggWzEtWF1bMStYXSApCQkJCQkjCiMJCWFzaW4oWCkgPSBhdGFuKCB4IC8geiApLgkJCQkjCiMJCUV4aXQuCQkJCQkJCSMKIwkJCQkJCQkJCSMKIwkzLiBJZiB8WHwgPiAxLCBnbyB0byA1LgkJCQkJCSMKIwkJCQkJCQkJCSMKIwk0LiAofFh8ID0gMSkgc2duIDo9IHNpZ24oWCksIHJldHVybiBhc2luKFgpIDo9IHNnbiAqIFBpLzIuIEV4aXQuIwojCQkJCQkJCQkJIwojCTUuICh8WHwgPiAxKSBHZW5lcmF0ZSBhbiBpbnZhbGlkIG9wZXJhdGlvbiBieSAwICogaW5maW5pdHkuCSMKIwkJRXhpdC4JCQkJCQkJIwojCQkJCQkJCQkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoJZ2xvYmFsCQlzYXNpbgpzYXNpbjoKCWZtb3YueAkJKCVhMCksJWZwMAkJIyBMT0FEIElOUFVUCgoJbW92LmwJCSglYTApLCVkMQoJbW92LncJCTQoJWEwKSwlZDEKCWFuZC5sCQkmMHg3RkZGRkZGRiwlZDEKCWNtcC5sCQklZDEsJjB4M0ZGRjgwMDAKCWJnZS5iCQlBU0lOQklHCgojIFRoaXMgY2F0Y2ggaXMgYWRkZWQgaGVyZSBmb3IgdGhlICcwNjAgUVNQLiBPcmlnaW5hbGx5LCB0aGUgY2FsbCB0bwojIHNhdGFuKCkgd291bGQgaGFuZGxlIHRoaXMgY2FzZSBieSBjYXVzaW5nIHRoZSBleGNlcHRpb24gd2hpY2ggd291bGQKIyBub3QgYmUgY2F1Z2h0IHVudGlsIGdlbl9leGNlcHQoKS4gTm93LCB3aXRoIHRoZSBleGNlcHRpb25zIGJlaW5nCiMgZGV0ZWN0ZWQgaW5zaWRlIG9mIHNhdGFuKCksIHRoZSBleGNlcHRpb24gd291bGQgaGF2ZSBiZWVuIGhhbmRsZWQgdGhlcmUKIyBpbnN0ZWFkIG9mIGluc2lkZSBzYXNpbigpIGFzIGV4cGVjdGVkLgoJY21wLmwJCSVkMSwmMHgzRkQ3ODAwMAoJYmx0LncJCUFTSU5USU5ZCgojLS1USElTIElTIFRIRSBVU1VBTCBDQVNFLCB8WHwgPCAxCiMtLUFTSU4oWCkgPSBBVEFOKCBYIC8gU1FSVCggKDEtWCkoMStYKSApICkKCkFTSU5NQUlOOgoJZm1vdi5zCQkmMHgzRjgwMDAwMCwlZnAxCglmc3ViLngJCSVmcDAsJWZwMQkJIyAxLVgKCWZtb3ZtLngJCSYweDQsLSglc3ApCQkjICB7ZnAyfQoJZm1vdi5zCQkmMHgzRjgwMDAwMCwlZnAyCglmYWRkLngJCSVmcDAsJWZwMgkJIyAxK1gKCWZtdWwueAkJJWZwMiwlZnAxCQkjICgxK1gpKDEtWCkKCWZtb3ZtLngJCSglc3ApKywmMHgyMAkJIyAge2ZwMn0KCWZzcXJ0LngJCSVmcDEJCQkjIFNRUlQoWzEtWF1bMStYXSkKCWZkaXYueAkJJWZwMSwlZnAwCQkjIFgvU1FSVChbMS1YXVsxK1hdKQoJZm1vdm0ueAkJJjB4MDEsLSglc3ApCQkjIHNhdmUgWC9TUVJUKC4uLikKCWxlYQkJKCVzcCksJWEwCQkjIHBhc3MgcHRyIHRvIFgvU1FSVCguLi4pCglic3IJCXNhdGFuCglhZGQubAkJJjB4Yywlc3AJCSMgY2xlYXIgWC9TUVJUKC4uLikgZnJvbSBzdGFjawoJYnJhCQl0X2lueDIKCkFTSU5CSUc6CglmYWJzLngJCSVmcDAJCQkjIHxYfAoJZmNtcC5zCQklZnAwLCYweDNGODAwMDAwCglmYmd0CQl0X29wZXJyCQkJIyBjYXVzZSBhbiBvcGVyciBleGNlcHRpb24KCiMtLXxYfCA9IDEsIEFTSU4oWCkgPSArLSBQSS8yLgpBU0lOT05FOgoJZm1vdi54CQlQSUJZMiglcGMpLCVmcDAKCW1vdi5sCQkoJWEwKSwlZDEKCWFuZC5sCQkmMHg4MDAwMDAwMCwlZDEJCSMgU0lHTiBCSVQgT0YgWAoJb3IubAkJJjB4M0Y4MDAwMDAsJWQxCQkjICstMSBJTiBTR0wgRk9STUFUCgltb3YubAkJJWQxLC0oJXNwKQkJIyBwdXNoIFNJR04oWCkgSU4gU0dMLUZNVAoJZm1vdi5sCQklZDAsJWZwY3IKCWZtdWwucwkJKCVzcCkrLCVmcDAKCWJyYQkJdF9pbngyCgojLS18WHwgPCAyXigtNDApLCBBVEFOKFgpID0gWApBU0lOVElOWToKCWZtb3YubAkJJWQwLCVmcGNyCQkjIHJlc3RvcmUgdXNlcnMgcm5kIG1vZGUscHJlYwoJbW92LmIJCSZGTU9WX09QLCVkMQkJIyBsYXN0IGluc3QgaXMgTU9WRQoJZm1vdi54CQkoJWEwKSwlZnAwCQkjIGxhc3QgaW5zdCAtIHBvc3NpYmxlIGV4Y2VwdGlvbgoJYnJhCQl0X2NhdGNoCgoJZ2xvYmFsCQlzYXNpbmQKIy0tQVNJTihYKSA9IFggRk9SIERFTk9STUFMSVpFRCBYCnNhc2luZDoKCWJyYQkJdF9leHRkbnJtCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgc2Fjb3MoKTogIGNvbXB1dGVzIHRoZSBpbnZlcnNlIGNvc2luZSBvZiBhIG5vcm1hbGl6ZWQgaW5wdXQJCSMKIyBzYWNvc2QoKTogY29tcHV0ZXMgdGhlIGludmVyc2UgY29zaW5lIG9mIGEgZGVub3JtYWxpemVkIGlucHV0CQkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIGlucHV0CQkJIwojCWQwID0gcm91bmQgcHJlY2lzaW9uLG1vZGUJCQkJCSMKIwkJCQkJCQkJCSMKIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIwojCWZwMCA9IGFyY2NvcyhYKQkJCQkJCQkjCiMJCQkJCQkJCQkjCiMgQUNDVVJBQ1kgYW5kIE1PTk9UT05JQ0lUWSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlUaGUgcmV0dXJuZWQgcmVzdWx0IGlzIHdpdGhpbiAzIHVscHMgaW4JNjQgc2lnbmlmaWNhbnQgYml0LAkjCiMJaS5lLiB3aXRoaW4gMC41MDAxIHVscCB0byA1MyBiaXRzIGlmIHRoZSByZXN1bHQgaXMgc3Vic2VxdWVudGx5CSMKIwlyb3VuZGVkIHRvIGRvdWJsZSBwcmVjaXNpb24uIFRoZSByZXN1bHQgaXMgcHJvdmFibHkgbW9ub3RvbmljCSMKIwlpbiBkb3VibGUgcHJlY2lzaW9uLgkJCQkJCSMKIwkJCQkJCQkJCSMKIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIwojCQkJCQkJCQkJIwojCUFDT1MJCQkJCQkJCSMKIwkxLiBJZiB8WHwgPj0gMSwgZ28gdG8gMy4JCQkJCSMKIwkJCQkJCQkJCSMKIwkyLiAofFh8IDwgMSkgQ2FsY3VsYXRlIGFjb3MoWCkgYnkJCQkJIwojCQl6IDo9ICgxLVgpIC8gKDErWCkJCQkJCSMKIwkJYWNvcyhYKSA9IDIgKiBhdGFuKCBzcXJ0KHopICkuCQkJCSMKIwkJRXhpdC4JCQkJCQkJIwojCQkJCQkJCQkJIwojCTMuIElmIHxYfCA+IDEsIGdvIHRvIDUuCQkJCQkJIwojCQkJCQkJCQkJIwojCTQuICh8WHwgPSAxKSBJZiBYID4gMCwgcmV0dXJuIDAuIE90aGVyd2lzZSwgcmV0dXJuIFBpLiBFeGl0LgkjCiMJCQkJCQkJCQkjCiMJNS4gKHxYfCA+IDEpIEdlbmVyYXRlIGFuIGludmFsaWQgb3BlcmF0aW9uIGJ5IDAgKiBpbmZpbml0eS4JIwojCQlFeGl0LgkJCQkJCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCglnbG9iYWwJCXNhY29zCnNhY29zOgoJZm1vdi54CQkoJWEwKSwlZnAwCQkjIExPQUQgSU5QVVQKCgltb3YubAkJKCVhMCksJWQxCQkjIHBhY2sgZXhwIHcvIHVwcGVyIDE2IGZyYWN0aW9uCgltb3YudwkJNCglYTApLCVkMQoJYW5kLmwJCSYweDdGRkZGRkZGLCVkMQoJY21wLmwJCSVkMSwmMHgzRkZGODAwMAoJYmdlLmIJCUFDT1NCSUcKCiMtLVRISVMgSVMgVEhFIFVTVUFMIENBU0UsIHxYfCA8IDEKIy0tQUNPUyhYKSA9IDIgKiBBVEFOKAlTUVJUKCAoMS1YKS8oMStYKSApICkKCkFDT1NNQUlOOgoJZm1vdi5zCQkmMHgzRjgwMDAwMCwlZnAxCglmYWRkLngJCSVmcDAsJWZwMQkJIyAxK1gKCWZuZWcueAkJJWZwMAkJCSMgLVgKCWZhZGQucwkJJjB4M0Y4MDAwMDAsJWZwMAkjIDEtWAoJZmRpdi54CQklZnAxLCVmcDAJCSMgKDEtWCkvKDErWCkKCWZzcXJ0LngJCSVmcDAJCQkjIFNRUlQoKDEtWCkvKDErWCkpCgltb3YubAkJJWQwLC0oJXNwKQkJIyBzYXZlIG9yaWdpbmFsIHVzZXJzIGZwY3IKCWNsci5sCQklZDAKCWZtb3ZtLngJCSYweDAxLC0oJXNwKQkJIyBzYXZlIFNRUlQoLi4uKSB0byBzdGFjawoJbGVhCQkoJXNwKSwlYTAJCSMgcGFzcyBwdHIgdG8gc3FydAoJYnNyCQlzYXRhbgkJCSMgQVRBTihTUVJUKFsxLVhdL1sxK1hdKSkKCWFkZC5sCQkmMHhjLCVzcAkJIyBjbGVhciBTUVJUKC4uLikgZnJvbSBzdGFjawoKCWZtb3YubAkJKCVzcCkrLCVmcGNyCQkjIHJlc3RvcmUgdXNlcnMgcm91bmQgcHJlYyxtb2RlCglmYWRkLngJCSVmcDAsJWZwMAkJIyAyICogQVRBTiggU1RVRkYgKQoJYnJhCQl0X3BpbngyCgpBQ09TQklHOgoJZmFicy54CQklZnAwCglmY21wLnMJCSVmcDAsJjB4M0Y4MDAwMDAKCWZiZ3QJCXRfb3BlcnIJCQkjIGNhdXNlIGFuIG9wZXJyIGV4Y2VwdGlvbgoKIy0tfFh8ID0gMSwgQUNPUyhYKSA9IDAgT1IgUEkKCXRzdC5iCQkoJWEwKQkJCSMgaXMgWCBwb3NpdGl2ZSBvciBuZWdhdGl2ZT8KCWJwbC5iCQlBQ09TUDEKCiMtLVggPSAtMQojUmV0dXJucyBQSSBhbmQgaW5leGFjdCBleGNlcHRpb24KQUNPU00xOgoJZm1vdi54CQlQSSglcGMpLCVmcDAJCSMgbG9hZCBQSQoJZm1vdi5sCQklZDAsJWZwY3IJCSMgbG9hZCByb3VuZCBtb2RlLHByZWMKCWZhZGQucwkJJjB4MDA4MDAwMDAsJWZwMAkjIGFkZCBhIHNtYWxsIHZhbHVlCglicmEJCXRfcGlueDIKCkFDT1NQMToKCWJyYQkJbGRfcHplcm8JCSMgYW5zd2VyIGlzIHBvc2l0aXZlIHplcm8KCglnbG9iYWwJCXNhY29zZAojLS1BQ09TKFgpID0gUEkvMiBGT1IgREVOT1JNQUxJWkVEIFgKc2Fjb3NkOgoJZm1vdi5sCQklZDAsJWZwY3IJCSMgbG9hZCB1c2VyJ3Mgcm5kIG1vZGUvcHJlYwoJZm1vdi54CQlQSUJZMiglcGMpLCVmcDAKCWJyYQkJdF9waW54MgoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIHNldG94KCk6ICAgIGNvbXB1dGVzIHRoZSBleHBvbmVudGlhbCBmb3IgYSBub3JtYWxpemVkIGlucHV0CQkjCiMgc2V0b3hkKCk6ICAgY29tcHV0ZXMgdGhlIGV4cG9uZW50aWFsIGZvciBhIGRlbm9ybWFsaXplZCBpbnB1dAkJIwojIHNldG94bTEoKTogIGNvbXB1dGVzIHRoZSBleHBvbmVudGlhbCBtaW51cyAxIGZvciBhIG5vcm1hbGl6ZWQgaW5wdXQJIwojIHNldG94bTFkKCk6IGNvbXB1dGVzIHRoZSBleHBvbmVudGlhbCBtaW51cyAxIGZvciBhIGRlbm9ybWFsaXplZCBpbnB1dAkjCiMJCQkJCQkJCQkjCiMgSU5QVVQJKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIGlucHV0CQkJIwojCWQwID0gcm91bmQgcHJlY2lzaW9uLG1vZGUJCQkJCSMKIwkJCQkJCQkJCSMKIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIwojCWZwMCA9IGV4cChYKSBvciBleHAoWCktMQkJCQkJIwojCQkJCQkJCQkJIwojIEFDQ1VSQUNZIGFuZCBNT05PVE9OSUNJVFkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCiMJVGhlIHJldHVybmVkIHJlc3VsdCBpcyB3aXRoaW4gMC44NSB1bHBzIGluIDY0IHNpZ25pZmljYW50IGJpdCwJIwojCWkuZS4gd2l0aGluIDAuNTAwMSB1bHAgdG8gNTMgYml0cyBpZiB0aGUgcmVzdWx0IGlzIHN1YnNlcXVlbnRseSAjCiMJcm91bmRlZCB0byBkb3VibGUgcHJlY2lzaW9uLiBUaGUgcmVzdWx0IGlzIHByb3ZhYmx5IG1vbm90b25pYwkjCiMJaW4gZG91YmxlIHByZWNpc2lvbi4JCQkJCQkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNIGFuZCBJTVBMRU1FTlRBVElPTiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKIwkJCQkJCQkJCSMKIwlzZXRveGQJCQkJCQkJCSMKIwktLS0tLS0JCQkJCQkJCSMKIwlTdGVwIDEuCVNldCBhbnMgOj0gMS4wCQkJCQkJIwojCQkJCQkJCQkJIwojCVN0ZXAgMi4JUmV0dXJuCWFucyA6PSBhbnMgKyBzaWduKFgpKjJeKC0xMjYpLiBFeGl0LgkJIwojCU5vdGVzOglUaGlzIHdpbGwgYWx3YXlzIGdlbmVyYXRlIG9uZSBleGNlcHRpb24gLS0gaW5leGFjdC4JIwojCQkJCQkJCQkJIwojCQkJCQkJCQkJIwojCXNldG94CQkJCQkJCQkjCiMJLS0tLS0JCQkJCQkJCSMKIwkJCQkJCQkJCSMKIwlTdGVwIDEuCUZpbHRlciBvdXQgZXh0cmVtZSBjYXNlcyBvZiBpbnB1dCBhcmd1bWVudC4JCSMKIwkJMS4xCUlmIHxYfCA+PSAyXigtNjUpLCBnbyB0byBTdGVwIDEuMy4JCSMKIwkJMS4yCUdvIHRvIFN0ZXAgNy4JCQkJCSMKIwkJMS4zCUlmIHxYfCA8IDE2MzgwIGxvZygyKSwgZ28gdG8gU3RlcCAyLgkJIwojCQkxLjQJR28gdG8gU3RlcCA4LgkJCQkJIwojCU5vdGVzOglUaGUgdXN1YWwgY2FzZSBzaG91bGQgdGFrZSB0aGUgYnJhbmNoZXMgMS4xIC0+IDEuMyAtPiAyLiMKIwkJVG8gYXZvaWQgdGhlIHVzZSBvZiBmbG9hdGluZy1wb2ludCBjb21wYXJpc29ucywgYQkjCiMJCWNvbXBhY3QgcmVwcmVzZW50YXRpb24gb2YgfFh8IGlzIHVzZWQuIFRoaXMgZm9ybWF0IGlzIGEJIwojCQkzMi1iaXQgaW50ZWdlciwgdGhlIHVwcGVyIChtb3JlIHNpZ25pZmljYW50KSAxNiBiaXRzCSMKIwkJYXJlIHRoZSBzaWduIGFuZCBiaWFzZWQgZXhwb25lbnQgZmllbGQgb2YgfFh8OyB0aGUJIwojCQlsb3dlciAxNiBiaXRzIGFyZSB0aGUgMTYgbW9zdCBzaWduaWZpY2FudCBmcmFjdGlvbgkjCiMJCShpbmNsdWRpbmcgdGhlIGV4cGxpY2l0IGJpdCkgYml0cyBvZiB8WHwuIENvbnNlcXVlbnRseSwJIwojCQl0aGUgY29tcGFyaXNvbnMgaW4gU3RlcHMgMS4xIGFuZCAxLjMgY2FuIGJlIHBlcmZvcm1lZAkjCiMJCWJ5IGludGVnZXIgY29tcGFyaXNvbi4gTm90ZSBhbHNvIHRoYXQgdGhlIGNvbnN0YW50CSMKIwkJMTYzODAgbG9nKDIpIHVzZWQgaW4gU3RlcCAxLjMgaXMgYWxzbyBpbiB0aGUgY29tcGFjdAkjCiMJCWZvcm0uIFRodXMgdGFraW5nIHRoZSBicmFuY2ggdG8gU3RlcCAyIGd1YXJhbnRlZXMJIwojCQl8WHwgPCAxNjM4MCBsb2coMikuIFRoZXJlIGlzIG5vIGhhcm0gdG8gaGF2ZSBhIHNtYWxsCSMKIwkJbnVtYmVyIG9mIGNhc2VzIHdoZXJlIHxYfCBpcyBsZXNzIHRoYW4sCWJ1dCBjbG9zZSB0bywJIwojCQkxNjM4MCBsb2coMikgYW5kIHRoZSBicmFuY2ggdG8gU3RlcCA5IGlzIHRha2VuLgkJIwojCQkJCQkJCQkJIwojCVN0ZXAgMi4JQ2FsY3VsYXRlIE4gPSByb3VuZC10by1uZWFyZXN0LWludCggWCAqIDY0L2xvZzIgKS4JIwojCQkyLjEJU2V0IEFkakZsYWcgOj0gMCAoaW5kaWNhdGVzIHRoZSBicmFuY2ggMS4zIC0+IDIgIwojCQkJd2FzIHRha2VuKQkJCQkJIwojCQkyLjIJTiA6PSByb3VuZC10by1uZWFyZXN0LWludGVnZXIoIFggKiA2NC9sb2cyICkuCSMKIwkJMi4zCUNhbGN1bGF0ZQlKID0gTiBtb2QgNjQ7IHNvIEogPSAwLDEsMiwuLi4sICMKIwkJCW9yIDYzLgkJCQkJCSMKIwkJMi40CUNhbGN1bGF0ZQlNID0gKE4gLSBKKS82NDsgc28gTiA9IDY0TSArIEouCSMKIwkJMi41CUNhbGN1bGF0ZSB0aGUgYWRkcmVzcyBvZiB0aGUgc3RvcmVkIHZhbHVlIG9mCSMKIwkJCTJeKEovNjQpLgkJCQkJIwojCQkyLjYJQ3JlYXRlIHRoZSB2YWx1ZSBTY2FsZSA9IDJeTS4JCQkjCiMJTm90ZXM6CVRoZSBjYWxjdWxhdGlvbiBpbiAyLjIgaXMgcmVhbGx5IHBlcmZvcm1lZCBieQkJIwojCQkJWiA6PSBYICogY29uc3RhbnQJCQkJIwojCQkJTiA6PSByb3VuZC10by1uZWFyZXN0LWludGVnZXIoWikJCSMKIwkJd2hlcmUJCQkJCQkJIwojCQkJY29uc3RhbnQgOj0gc2luZ2xlLXByZWNpc2lvbiggNjQvbG9nIDIgKS4JIwojCQkJCQkJCQkJIwojCQlVc2luZyBhIHNpbmdsZS1wcmVjaXNpb24gY29uc3RhbnQgYXZvaWRzIG1lbW9yeQkJIwojCQlhY2Nlc3MuIEFub3RoZXIgZWZmZWN0IG9mIHVzaW5nIGEgc2luZ2xlLXByZWNpc2lvbgkjCiMJCSJjb25zdGFudCIgaXMgdGhhdCB0aGUgY2FsY3VsYXRlZCB2YWx1ZSBaIGlzCQkjCiMJCQkJCQkJCQkjCiMJCQlaID0gWCooNjQvbG9nMikqKDErZXBzKSwgfGVwc3wgPD0gMl4oLTI0KS4JIwojCQkJCQkJCQkJIwojCQlUaGlzIGVycm9yIGhhcyB0byBiZSBjb25zaWRlcmVkIGxhdGVyIGluIFN0ZXBzIDMgYW5kIDQuCSMKIwkJCQkJCQkJCSMKIwlTdGVwIDMuCUNhbGN1bGF0ZSBYIC0gTipsb2cyLzY0LgkJCQkjCiMJCTMuMQlSIDo9IFggKyBOKkwxLAkJCQkJIwojCQkJCXdoZXJlIEwxIDo9IHNpbmdsZS1wcmVjaXNpb24oLWxvZzIvNjQpLgkjCiMJCTMuMglSIDo9IFIgKyBOKkwyLAkJCQkJIwojCQkJCUwyIDo9IGV4dGVuZGVkLXByZWNpc2lvbigtbG9nMi82NCAtIEwxKS4jCiMJTm90ZXM6CWEpIFRoZSB3YXkgTDEgYW5kIEwyIGFyZSBjaG9zZW4gZW5zdXJlcyBMMStMMgkJIwojCQlhcHByb3hpbWF0ZSB0aGUgdmFsdWUgLWxvZzIvNjQgdG8gODggYml0cyBvZiBhY2N1cmFjeS4JIwojCQliKSBOKkwxIGlzIGV4YWN0IGJlY2F1c2UgTiBpcyBubyBsb25nZXIgdGhhbiAyMiBiaXRzCSMKIwkJYW5kIEwxIGlzIG5vIGxvbmdlciB0aGFuIDI0IGJpdHMuCQkJIwojCQljKSBUaGUgY2FsY3VsYXRpb24gWCtOKkwxIGlzIGFsc28gZXhhY3QgZHVlIHRvCQkjCiMJCWNhbmNlbGxhdGlvbi4gVGh1cywgUiBpcyBwcmFjdGljYWxseSBYK04oTDErTDIpIHRvIGZ1bGwJIwojCQk2NCBiaXRzLgkJCQkJCSMKIwkJZCkgSXQgaXMgaW1wb3J0YW50IHRvIGVzdGltYXRlIGhvdyBsYXJnZSBjYW4gfFJ8IGJlCSMKIwkJYWZ0ZXIgU3RlcCAzLjIuCQkJCQkJIwojCQkJCQkJCQkJIwojCQlOID0gcm5kLXRvLWludCggWCo2NC9sb2cyICgxK2VwcykgKSwgfGVwc3w8PTJeKC0yNCkJIwojCQlYKjY0L2xvZzIgKDErZXBzKQk9CU4gKyBmLAl8ZnwgPD0gMC41CSMKIwkJWCo2NC9sb2cyIC0gTgk9CWYgLSBlcHMqWCA2NC9sb2cyCQkjCiMJCVggLSBOKmxvZzIvNjQJPQlmKmxvZzIvNjQgLSBlcHMqWAkJIwojCQkJCQkJCQkJIwojCQkJCQkJCQkJIwojCQlOb3cgfFh8IDw9IDE2NDQ2IGxvZzIsIHRodXMJCQkJIwojCQkJCQkJCQkJIwojCQkJfFggLSBOKmxvZzIvNjR8IDw9ICgwLjUgKyAxNjQ0Ni8yXigxOCkpKmxvZzIvNjQJIwojCQkJCQk8PSAwLjU3IGxvZzIvNjQuCQkjCiMJCSBUaGlzIGJvdW5kIHdpbGwgYmUgdXNlZCBpbiBTdGVwIDQuCQkJIwojCQkJCQkJCQkJIwojCVN0ZXAgNC4JQXBwcm94aW1hdGUgZXhwKFIpLTEgYnkgYSBwb2x5bm9taWFsCQkJIwojCQlwID0gUiArIFIqUiooQTEgKyBSKihBMiArIFIqKEEzICsgUiooQTQgKyBSKkE1KSkpKQkjCiMJTm90ZXM6CWEpIEluIG9yZGVyIHRvIHJlZHVjZSBtZW1vcnkgYWNjZXNzLCB0aGUgY29lZmZpY2llbnRzCSMKIwkJYXJlIG1hZGUgYXMgInNob3J0IiBhcyBwb3NzaWJsZTogQTEgKHdoaWNoIGlzIDEvMiksIEE0CSMKIwkJYW5kIEE1IGFyZSBzaW5nbGUgcHJlY2lzaW9uOyBBMiBhbmQgQTMgYXJlIGRvdWJsZQkjCiMJCXByZWNpc2lvbi4JCQkJCQkjCiMJCWIpIEV2ZW4gd2l0aCB0aGUgcmVzdHJpY3Rpb25zIGFib3ZlLAkJCSMKIwkJICAgfHAgLSAoZXhwKFIpLTEpfCA8IDJeKC02OC44KSBmb3IgYWxsIHxSfCA8PSAwLjAwNjIuCSMKIwkJTm90ZSB0aGF0IDAuMDA2MiBpcyBzbGlnaHRseSBiaWdnZXIgdGhhbiAwLjU3IGxvZzIvNjQuCSMKIwkJYykgVG8gZnVsbHkgdXRpbGl6ZSB0aGUgcGlwZWxpbmUsIHAgaXMgc2VwYXJhdGVkIGludG8JIwojCQl0d28gaW5kZXBlbmRlbnQgcGllY2VzIG9mIHJvdWdobHkgZXF1YWwgY29tcGxleGl0aWVzCSMKIwkJCXAgPSBbIFIgKyBSKlMqKEEyICsgUypBNCkgXQkrCQkjCiMJCQkJWyBTKihBMSArIFMqKEEzICsgUypBNSkpIF0JCSMKIwkJd2hlcmUgUyA9IFIqUi4JCQkJCQkjCiMJCQkJCQkJCQkjCiMJU3RlcCA1LglDb21wdXRlIDJeKEovNjQpKmV4cChSKSA9IDJeKEovNjQpKigxK3ApIGJ5CQkjCiMJCQkJYW5zIDo9IFQgKyAoIFQqcCArIHQpCQkJIwojCQl3aGVyZSBUIGFuZCB0IGFyZSB0aGUgc3RvcmVkIHZhbHVlcyBmb3IgMl4oSi82NCkuCSMKIwlOb3RlczoJMl4oSi82NCkgaXMgc3RvcmVkIGFzIFQgYW5kIHQgd2hlcmUgVCt0IGFwcHJveGltYXRlcwkjCiMJCTJeKEovNjQpIHRvIHJvdWdobHkgODUgYml0czsgVCBpcyBpbiBleHRlbmRlZCBwcmVjaXNpb24JIwojCQlhbmQgdCBpcyBpbiBzaW5nbGUgcHJlY2lzaW9uLiBOb3RlIGFsc28gdGhhdCBUIGlzCSMKIwkJcm91bmRlZCB0byA2MiBiaXRzIHNvIHRoYXQgdGhlIGxhc3QgdHdvIGJpdHMgb2YgVCBhcmUJIwojCQl6ZXJvLiBUaGUgcmVhc29uIGZvciBzdWNoIGEgc3BlY2lhbCBmb3JtIGlzIHRoYXQgVC0xLAkjCiMJCVQtMiwgYW5kIFQtOCB3aWxsIGFsbCBiZSBleGFjdCAtLS0gYSBwcm9wZXJ0eSB0aGF0IHdpbGwJIwojCQlnaXZlIG11Y2ggbW9yZSBhY2N1cmF0ZSBjb21wdXRhdGlvbiBvZiB0aGUgZnVuY3Rpb24JIwojCQlFWFBNMS4JCQkJCQkJIwojCQkJCQkJCQkJIwojCVN0ZXAgNi4JUmVjb25zdHJ1Y3Rpb24gb2YgZXhwKFgpCQkJCSMKIwkJCWV4cChYKSA9IDJeTSAqIDJeKEovNjQpICogZXhwKFIpLgkJIwojCQk2LjEJSWYgQWRqRmxhZyA9IDAsIGdvIHRvIDYuMwkJCSMKIwkJNi4yCWFucyA6PSBhbnMgKiBBZGpTY2FsZQkJCQkjCiMJCTYuMwlSZXN0b3JlIHRoZSB1c2VyIEZQQ1IJCQkJIwojCQk2LjQJUmV0dXJuIGFucyA6PSBhbnMgKiBTY2FsZS4gRXhpdC4JCSMKIwlOb3RlczoJSWYgQWRqRmxhZyA9IDAsIHdlIGhhdmUgWCA9IE1sb2cyICsgSmxvZzIvNjQgKyBSLAkjCiMJCXxNfCA8PSAxNjM4MCwgYW5kIFNjYWxlID0gMl5NLiBNb3Jlb3ZlciwgZXhwKFgpIHdpbGwJIwojCQluZWl0aGVyIG92ZXJmbG93IG5vciB1bmRlcmZsb3cuIElmIEFkakZsYWcgPSAxLCB0aGF0CSMKIwkJbWVhbnMgdGhhdAkJCQkJCSMKIwkJCVggPSAoTTErTSlsb2cyICsgSmxvZzIvNjQgKyBSLCB8TTErTXwgPj0gMTYzODAuCSMKIwkJSGVuY2UsIGV4cChYKSBtYXkgb3ZlcmZsb3cgb3IgdW5kZXJmbG93IG9yIG5laXRoZXIuCSMKIwkJV2hlbiB0aGF0IGlzIHRoZSBjYXNlLCBBZGpTY2FsZSA9IDJeKE0xKSB3aGVyZSBNMSBpcwkjCiMJCWFwcHJveGltYXRlbHkgTS4gVGh1cyA2LjIgd2lsbCBuZXZlciBjYXVzZQkJIwojCQlvdmVyL3VuZGVyZmxvdy4gUG9zc2libGUgZXhjZXB0aW9uIGluIDYuNCBpcyBvdmVyZmxvdwkjCiMJCW9yIHVuZGVyZmxvdy4gVGhlIGluZXhhY3QgZXhjZXB0aW9uIGlzIG5vdCBnZW5lcmF0ZWQgaW4JIwojCQk2LjQuIEFsdGhvdWdoIG9uZSBjYW4gYXJndWUgdGhhdCB0aGUgaW5leGFjdCBmbGFnCSMKIwkJc2hvdWxkIGFsd2F5cyBiZSByYWlzZWQsIHRvIHNpbXVsYXRlIHRoYXQgZXhjZXB0aW9uCSMKIwkJY29zdCB0byBtdWNoIHRoYW4gdGhlIGZsYWcgaXMgd29ydGggaW4gcHJhY3RpY2FsIHVzZXMuCSMKIwkJCQkJCQkJCSMKIwlTdGVwIDcuCVJldHVybiAxICsgWC4JCQkJCQkjCiMJCTcuMQlhbnMgOj0gWAkJCQkJIwojCQk3LjIJUmVzdG9yZSB1c2VyIEZQQ1IuCQkJCSMKIwkJNy4zCVJldHVybiBhbnMgOj0gMSArIGFucy4gRXhpdAkJCSMKIwlOb3RlczoJRm9yIG5vbi16ZXJvIFgsIHRoZSBpbmV4YWN0IGV4Y2VwdGlvbiB3aWxsIGFsd2F5cyBiZQkjCiMJCXJhaXNlZCBieSA3LjMuIFRoYXQgaXMgdGhlIG9ubHkgZXhjZXB0aW9uIHJhaXNlZCBieSA3LjMuIwojCQlOb3RlIGFsc28gdGhhdCB3ZSB1c2UgdGhlIEZNT1ZFTSBpbnN0cnVjdGlvbiB0byBtb3ZlIFgJIwojCQlpbiBTdGVwIDcuMSB0byBhdm9pZCB1bm5lY2Vzc2FyeSB0cmFwcGluZy4gKEFsdGhvdWdoCSMKIwkJdGhlIEZNT1ZFTSBtYXkgbm90IHNlZW0gcmVsZXZhbnQgc2luY2UgWCBpcyBub3JtYWxpemVkLAkjCiMJCXRoZSBwcmVjYXV0aW9uIHdpbGwgYmUgdXNlZnVsIGluIHRoZSBsaWJyYXJ5IHZlcnNpb24gb2YJIwojCQl0aGlzIGNvZGUgd2hlcmUgdGhlIHNlcGFyYXRlIGVudHJ5IGZvciBkZW5vcm1hbGl6ZWQJIwojCQlpbnB1dHMgd2lsbCBiZSBkb25lIGF3YXkgd2l0aC4pCQkJCSMKIwkJCQkJCQkJCSMKIwlTdGVwIDguCUhhbmRsZSBleHAoWCkgd2hlcmUgfFh8ID49IDE2MzgwbG9nMi4JCQkjCiMJCTguMQlJZiB8WHwgPiAxNjQ4MCBsb2cyLCBnbyB0byBTdGVwIDkuCQkjCiMJCShtaW1pYyAyLjIgLSAyLjYpCQkJCQkjCiMJCTguMglOIDo9IHJvdW5kLXRvLWludGVnZXIoIFggKiA2NC9sb2cyICkJCSMKIwkJOC4zCUNhbGN1bGF0ZSBKID0gTiBtb2QgNjQsIEogPSAwLDEsLi4uLDYzCQkjCiMJCTguNAlLIDo9IChOLUopLzY0LCBNMSA6PSB0cnVuY2F0ZShLLzIpLCBNID0gSy1NMSwJIwojCQkJQWRqRmxhZyA6PSAxLgkJCQkJIwojCQk4LjUJQ2FsY3VsYXRlIHRoZSBhZGRyZXNzIG9mIHRoZSBzdG9yZWQgdmFsdWUJIwojCQkJMl4oSi82NCkuCQkJCQkjCiMJCTguNglDcmVhdGUgdGhlIHZhbHVlcyBTY2FsZSA9IDJeTSwgQWRqU2NhbGUgPSAyXk0xLgkjCiMJCTguNwlHbyB0byBTdGVwIDMuCQkJCQkjCiMJTm90ZXM6CVJlZmVyIHRvIG5vdGVzIGZvciAyLjIgLSAyLjYuCQkJCSMKIwkJCQkJCQkJCSMKIwlTdGVwIDkuCUhhbmRsZSBleHAoWCksIHxYfCA+IDE2NDgwIGxvZzIuCQkJIwojCQk5LjEJSWYgWCA8IDAsIGdvIHRvIDkuMwkJCQkjCiMJCTkuMglhbnMgOj0gSHVnZSwgZ28gdG8gOS40CQkJCSMKIwkJOS4zCWFucyA6PSBUaW55LgkJCQkJIwojCQk5LjQJUmVzdG9yZSB1c2VyIEZQQ1IuCQkJCSMKIwkJOS41CVJldHVybiBhbnMgOj0gYW5zICogYW5zLiBFeGl0LgkJCSMKIwlOb3RlczoJRXhwKFgpIHdpbGwgc3VyZWx5IG92ZXJmbG93IG9yIHVuZGVyZmxvdywgZGVwZW5kaW5nIG9uCSMKIwkJWCdzIHNpZ24uICJIdWdlIiBhbmQgIlRpbnkiIGFyZSByZXNwZWN0aXZlbHkgbGFyZ2UvdGlueQkjCiMJCWV4dGVuZGVkLXByZWNpc2lvbiBudW1iZXJzIHdob3NlIHNxdWFyZSBvdmVyL3VuZGVyZmxvdwkjCiMJCXdpdGggYW4gaW5leGFjdCByZXN1bHQuIFRodXMsIDkuNSBhbHdheXMgcmFpc2VzIHRoZQkjCiMJCWluZXhhY3QgdG9nZXRoZXIgd2l0aCBlaXRoZXIgb3ZlcmZsb3cgb3IgdW5kZXJmbG93LgkjCiMJCQkJCQkJCQkjCiMJc2V0b3htMWQJCQkJCQkJIwojCS0tLS0tLS0tCQkJCQkJCSMKIwkJCQkJCQkJCSMKIwlTdGVwIDEuCVNldCBhbnMgOj0gMAkJCQkJCSMKIwkJCQkJCQkJCSMKIwlTdGVwIDIuCVJldHVybglhbnMgOj0gWCArIGFucy4gRXhpdC4JCQkJIwojCU5vdGVzOglUaGlzIHdpbGwgcmV0dXJuIFggd2l0aCB0aGUgYXBwcm9wcmlhdGUgcm91bmRpbmcJIwojCQkgcHJlY2lzaW9uIHByZXNjcmliZWQgYnkgdGhlIHVzZXIgRlBDUi4JCQkjCiMJCQkJCQkJCQkjCiMJc2V0b3htMQkJCQkJCQkJIwojCS0tLS0tLS0JCQkJCQkJCSMKIwkJCQkJCQkJCSMKIwlTdGVwIDEuCUNoZWNrIHxYfAkJCQkJCSMKIwkJMS4xCUlmIHxYfCA+PSAxLzQsIGdvIHRvIFN0ZXAgMS4zLgkJCSMKIwkJMS4yCUdvIHRvIFN0ZXAgNy4JCQkJCSMKIwkJMS4zCUlmIHxYfCA8IDcwIGxvZygyKSwgZ28gdG8gU3RlcCAyLgkJIwojCQkxLjQJR28gdG8gU3RlcCAxMC4JCQkJCSMKIwlOb3RlczoJVGhlIHVzdWFsIGNhc2Ugc2hvdWxkIHRha2UgdGhlIGJyYW5jaGVzIDEuMSAtPiAxLjMgLT4gMi4jCiMJCUhvd2V2ZXIsIGl0IGlzIGNvbmNlaXZhYmxlIHxYfCBjYW4gYmUgc21hbGwgdmVyeSBvZnRlbgkjCiMJCWJlY2F1c2UgRVhQTTEgaXMgaW50ZW5kZWQgdG8gZXZhbHVhdGUgZXhwKFgpLTEJCSMKIwkJYWNjdXJhdGVseSB3aGVuIHxYfCBpcyBzbWFsbC4gRm9yIGZ1cnRoZXIgZGV0YWlscyBvbgkjCiMJCXRoZSBjb21wYXJpc29ucywgc2VlIHRoZSBub3RlcyBvbiBTdGVwIDEgb2Ygc2V0b3guCSMKIwkJCQkJCQkJCSMKIwlTdGVwIDIuCUNhbGN1bGF0ZSBOID0gcm91bmQtdG8tbmVhcmVzdC1pbnQoIFggKiA2NC9sb2cyICkuCSMKIwkJMi4xCU4gOj0gcm91bmQtdG8tbmVhcmVzdC1pbnRlZ2VyKCBYICogNjQvbG9nMiApLgkjCiMJCTIuMglDYWxjdWxhdGUJSiA9IE4gbW9kIDY0OyBzbyBKID0gMCwxLDIsLi4uLCAjCiMJCQlvciA2My4JCQkJCQkjCiMJCTIuMwlDYWxjdWxhdGUJTSA9IChOIC0gSikvNjQ7IHNvIE4gPSA2NE0gKyBKLgkjCiMJCTIuNAlDYWxjdWxhdGUgdGhlIGFkZHJlc3Mgb2YgdGhlIHN0b3JlZCB2YWx1ZSBvZgkjCiMJCQkyXihKLzY0KS4JCQkJCSMKIwkJMi41CUNyZWF0ZSB0aGUgdmFsdWVzIFNjID0gMl5NIGFuZAkJCSMKIwkJCU9uZWJ5U2MgOj0gLTJeKC1NKS4JCQkJIwojCU5vdGVzOglTZWUgdGhlIG5vdGVzIG9uIFN0ZXAgMiBvZiBzZXRveC4JCQkjCiMJCQkJCQkJCQkjCiMJU3RlcCAzLglDYWxjdWxhdGUgWCAtIE4qbG9nMi82NC4JCQkJIwojCQkzLjEJUiA6PSBYICsgTipMMSwJCQkJCSMKIwkJCQl3aGVyZSBMMSA6PSBzaW5nbGUtcHJlY2lzaW9uKC1sb2cyLzY0KS4JIwojCQkzLjIJUiA6PSBSICsgTipMMiwJCQkJCSMKIwkJCQlMMiA6PSBleHRlbmRlZC1wcmVjaXNpb24oLWxvZzIvNjQgLSBMMSkuIwojCU5vdGVzOglBcHBseWluZyB0aGUgYW5hbHlzaXMgb2YgU3RlcCAzIG9mIHNldG94IGluIHRoaXMgY2FzZQkjCiMJCXNob3dzIHRoYXQgfFJ8IDw9IDAuMDA1NSAobm90ZSB0aGF0IHxYfCA8PSA3MCBsb2cyIGluCSMKIwkJdGhpcyBjYXNlKS4JCQkJCQkjCiMJCQkJCQkJCQkjCiMJU3RlcCA0LglBcHByb3hpbWF0ZSBleHAoUiktMSBieSBhIHBvbHlub21pYWwJCQkjCiMJCQlwID0gUitSKlIqKEExK1IqKEEyK1IqKEEzK1IqKEE0K1IqKEE1K1IqQTYpKSkpKQkjCiMJTm90ZXM6CWEpIEluIG9yZGVyIHRvIHJlZHVjZSBtZW1vcnkgYWNjZXNzLCB0aGUgY29lZmZpY2llbnRzCSMKIwkJYXJlIG1hZGUgYXMgInNob3J0IiBhcyBwb3NzaWJsZTogQTEgKHdoaWNoIGlzIDEvMiksIEE1CSMKIwkJYW5kIEE2IGFyZSBzaW5nbGUgcHJlY2lzaW9uOyBBMiwgQTMgYW5kIEE0IGFyZSBkb3VibGUJIwojCQlwcmVjaXNpb24uCQkJCQkJIwojCQliKSBFdmVuIHdpdGggdGhlIHJlc3RyaWN0aW9uIGFib3ZlLAkJCSMKIwkJCXxwIC0gKGV4cChSKS0xKXwgPAl8UnwgKiAyXigtNzIuNykJCSMKIwkJZm9yIGFsbCB8UnwgPD0gMC4wMDU1LgkJCQkJIwojCQljKSBUbyBmdWxseSB1dGlsaXplIHRoZSBwaXBlbGluZSwgcCBpcyBzZXBhcmF0ZWQgaW50bwkjCiMJCXR3byBpbmRlcGVuZGVudCBwaWVjZXMgb2Ygcm91Z2hseSBlcXVhbCBjb21wbGV4aXR5CSMKIwkJCXAgPSBbIFIqUyooQTIgKyBTKihBNCArIFMqQTYpKSBdCSsJIwojCQkJCVsgUiArIFMqKEExICsgUyooQTMgKyBTKkE1KSkgXQkJIwojCQl3aGVyZSBTID0gUipSLgkJCQkJCSMKIwkJCQkJCQkJCSMKIwlTdGVwIDUuCUNvbXB1dGUgMl4oSi82NCkqcCBieQkJCQkJIwojCQkJCXAgOj0gVCpwCQkJCSMKIwkJd2hlcmUgVCBhbmQgdCBhcmUgdGhlIHN0b3JlZCB2YWx1ZXMgZm9yIDJeKEovNjQpLgkjCiMJTm90ZXM6CTJeKEovNjQpIGlzIHN0b3JlZCBhcyBUIGFuZCB0IHdoZXJlIFQrdCBhcHByb3hpbWF0ZXMJIwojCQkyXihKLzY0KSB0byByb3VnaGx5IDg1IGJpdHM7IFQgaXMgaW4gZXh0ZW5kZWQgcHJlY2lzaW9uCSMKIwkJYW5kIHQgaXMgaW4gc2luZ2xlIHByZWNpc2lvbi4gTm90ZSBhbHNvIHRoYXQgVCBpcwkjCiMJCXJvdW5kZWQgdG8gNjIgYml0cyBzbyB0aGF0IHRoZSBsYXN0IHR3byBiaXRzIG9mIFQgYXJlCSMKIwkJemVyby4gVGhlIHJlYXNvbiBmb3Igc3VjaCBhIHNwZWNpYWwgZm9ybSBpcyB0aGF0IFQtMSwJIwojCQlULTIsIGFuZCBULTggd2lsbCBhbGwgYmUgZXhhY3QgLS0tIGEgcHJvcGVydHkgdGhhdCB3aWxsCSMKIwkJYmUgZXhwbG9pdGVkIGluIFN0ZXAgNiBiZWxvdy4gVGhlIHRvdGFsIHJlbGF0aXZlIGVycm9yCSMKIwkJaW4gcCBpcyBubyBiaWdnZXIgdGhhbiAyXigtNjcuNykgY29tcGFyZWQgdG8gdGhlIGZpbmFsCSMKIwkJcmVzdWx0LgkJCQkJCQkjCiMJCQkJCQkJCQkjCiMJU3RlcCA2LglSZWNvbnN0cnVjdGlvbiBvZiBleHAoWCktMQkJCQkjCiMJCQlleHAoWCktMSA9IDJeTSAqICggMl4oSi82NCkgKyBwIC0gMl4oLU0pICkuCSMKIwkJNi4xCUlmIE0gPD0gNjMsIGdvIHRvIFN0ZXAgNi4zLgkJCSMKIwkJNi4yCWFucyA6PSBUICsgKHAgKyAodCArIE9uZWJ5U2MpKS4gR28gdG8gNi42CSMKIwkJNi4zCUlmIE0gPj0gLTMsIGdvIHRvIDYuNS4JCQkJIwojCQk2LjQJYW5zIDo9IChUICsgKHAgKyB0KSkgKyBPbmVieVNjLiBHbyB0byA2LjYJIwojCQk2LjUJYW5zIDo9IChUICsgT25lYnlTYykgKyAocCArIHQpLgkJCSMKIwkJNi42CVJlc3RvcmUgdXNlciBGUENSLgkJCQkjCiMJCTYuNwlSZXR1cm4gYW5zIDo9IFNjICogYW5zLiBFeGl0LgkJCSMKIwlOb3RlczoJVGhlIHZhcmlvdXMgYXJyYW5nZW1lbnRzIG9mIHRoZSBleHByZXNzaW9ucyBnaXZlCSMKIwkJYWNjdXJhdGUgZXZhbHVhdGlvbnMuCQkJCQkjCiMJCQkJCQkJCQkjCiMJU3RlcCA3LglleHAoWCktMSBmb3IgfFh8IDwgMS80LgkJCQkJIwojCQk3LjEJSWYgfFh8ID49IDJeKC02NSksIGdvIHRvIFN0ZXAgOS4JCSMKIwkJNy4yCUdvIHRvIFN0ZXAgOC4JCQkJCSMKIwkJCQkJCQkJCSMKIwlTdGVwIDguCUNhbGN1bGF0ZSBleHAoWCktMSwgfFh8IDwgMl4oLTY1KS4JCQkjCiMJCTguMQlJZiB8WHwgPCAyXigtMTYzMTIpLCBnb3RvIDguMwkJCSMKIwkJOC4yCVJlc3RvcmUgRlBDUjsgcmV0dXJuIGFucyA6PSBYIC0gMl4oLTE2MzgyKS4JIwojCQkJRXhpdC4JCQkJCQkjCiMJCTguMwlYIDo9IFggKiAyXigxNDApLgkJCQkjCiMJCTguNAlSZXN0b3JlIEZQQ1I7IGFucyA6PSBhbnMgLSAyXigtMTYzODIpLgkJIwojCQkgUmV0dXJuIGFucyA6PSBhbnMqMl4oMTQwKS4gRXhpdAkJCSMKIwlOb3RlczoJVGhlIGlkZWEgaXMgdG8gcmV0dXJuICJYIC0gdGlueSIgdW5kZXIgdGhlIHVzZXIJCSMKIwkJcHJlY2lzaW9uIGFuZCByb3VuZGluZyBtb2Rlcy4gVG8gYXZvaWQgdW5uZWNlc3NhcnkJIwojCQlpbmVmZmljaWVuY3ksIHdlIHN0YXkgYXdheSBmcm9tIGRlbm9ybWFsaXplZCBudW1iZXJzCSMKIwkJdGhlIGJlc3Qgd2UgY2FuLiBGb3IgfFh8ID49IDJeKC0xNjMxMiksIHRoZQkJIwojCQlzdHJhaWdodGZvcndhcmQgOC4yIGdlbmVyYXRlcyB0aGUgaW5leGFjdCBleGNlcHRpb24gYXMJIwojCQl0aGUgY2FzZSB3YXJyYW50cy4JCQkJCSMKIwkJCQkJCQkJCSMKIwlTdGVwIDkuCUNhbGN1bGF0ZSBleHAoWCktMSwgfFh8IDwgMS80LCBieSBhIHBvbHlub21pYWwJCSMKIwkJCXAgPSBYICsgWCpYKihCMSArIFgqKEIyICsgLi4uICsgWCpCMTIpKQkJIwojCU5vdGVzOglhKSBJbiBvcmRlciB0byByZWR1Y2UgbWVtb3J5IGFjY2VzcywgdGhlIGNvZWZmaWNpZW50cwkjCiMJCWFyZSBtYWRlIGFzICJzaG9ydCIgYXMgcG9zc2libGU6IEIxICh3aGljaCBpcyAxLzIpLCBCOQkjCiMJCXRvIEIxMiBhcmUgc2luZ2xlIHByZWNpc2lvbjsgQjMgdG8gQjggYXJlIGRvdWJsZQkjCiMJCXByZWNpc2lvbjsgYW5kIEIyIGlzIGRvdWJsZSBleHRlbmRlZC4JCQkjCiMJCWIpIEV2ZW4gd2l0aCB0aGUgcmVzdHJpY3Rpb24gYWJvdmUsCQkJIwojCQkJfHAgLSAoZXhwKFgpLTEpfCA8IHxYfCAyXigtNzAuNikJCSMKIwkJZm9yIGFsbCB8WHwgPD0gMC4yNTEuCQkJCQkjCiMJCU5vdGUgdGhhdCAwLjI1MSBpcyBzbGlnaHRseSBiaWdnZXIgdGhhbiAxLzQuCQkjCiMJCWMpIFRvIGZ1bGx5IHByZXNlcnZlIGFjY3VyYWN5LCB0aGUgcG9seW5vbWlhbCBpcwkjCiMJCWNvbXB1dGVkIGFzCQkJCQkJIwojCQkJWCArICggUypCMSArCVEgKSB3aGVyZSBTID0gWCpYIGFuZAkJIwojCQkJUQk9CVgqUyooQjIgKyBYKihCMyArIC4uLiArIFgqQjEyKSkJIwojCQlkKSBUbyBmdWxseSB1dGlsaXplIHRoZSBwaXBlbGluZSwgUSBpcyBzZXBhcmF0ZWQgaW50bwkjCiMJCXR3byBpbmRlcGVuZGVudCBwaWVjZXMgb2Ygcm91Z2hseSBlcXVhbCBjb21wbGV4aXR5CSMKIwkJCVEgPSBbIFgqUyooQjIgKyBTKihCNCArIC4uLiArIFMqQjEyKSkgXSArCSMKIwkJCQlbIFMqUyooQjMgKyBTKihCNSArIC4uLiArIFMqQjExKSkgXQkjCiMJCQkJCQkJCQkjCiMJU3RlcCAxMC4gQ2FsY3VsYXRlIGV4cChYKS0xIGZvciB8WHwgPj0gNzAgbG9nIDIuCQkjCiMJCTEwLjEgSWYgWCA+PSA3MGxvZzIgLCBleHAoWCkgLSAxID0gZXhwKFgpIGZvciBhbGwJIwojCQlwcmFjdGljYWwgcHVycG9zZXMuIFRoZXJlZm9yZSwgZ28gdG8gU3RlcCAxIG9mIHNldG94LgkjCiMJCTEwLjIgSWYgWCA8PSAtNzBsb2cyLCBleHAoWCkgLSAxID0gLTEgZm9yIGFsbCBwcmFjdGljYWwJIwojCQlwdXJwb3Nlcy4JCQkJCQkjCiMJCWFucyA6PSAtMQkJCQkJCSMKIwkJUmVzdG9yZSB1c2VyIEZQQ1IJCQkJCSMKIwkJUmV0dXJuIGFucyA6PSBhbnMgKyAyXigtMTI2KS4gRXhpdC4JCQkjCiMJTm90ZXM6CTEwLjIgd2lsbCBhbHdheXMgY3JlYXRlIGFuIGluZXhhY3QgYW5kIHJldHVybiAtMSArIHRpbnkJIwojCQlpbiB0aGUgdXNlciByb3VuZGluZyBwcmVjaXNpb24gYW5kIG1vZGUuCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCkwyOglsb25nCQkweDNGREMwMDAwLDB4ODJFMzA4NjUsMHg0MzYxQzRDNiwweDAwMDAwMDAwCgpFRVhQQTM6CWxvbmcJCTB4M0ZBNTU1NTUsMHg1NTU1NENDMQpFRVhQQTI6CWxvbmcJCTB4M0ZDNTU1NTUsMHg1NTU1NEE1NAoKRU0xQTQ6CWxvbmcJCTB4M0Y4MTExMTEsMHgxMTE3NDM4NQpFTTFBMzoJbG9uZwkJMHgzRkE1NTU1NSwweDU1NTU0RjVBCgpFTTFBMjoJbG9uZwkJMHgzRkM1NTU1NSwweDU1NTU1NTU1LDB4MDAwMDAwMDAsMHgwMDAwMDAwMAoKRU0xQjg6CWxvbmcJCTB4M0VDNzFERTMsMHhBNTc3NDY4MgpFTTFCNzoJbG9uZwkJMHgzRUZBMDFBMCwweDE5RDdDQjY4CgpFTTFCNjoJbG9uZwkJMHgzRjJBMDFBMCwweDFBMDE5REYzCkVNMUI1Oglsb25nCQkweDNGNTZDMTZDLDB4MTZDMTcwRTIKCkVNMUI0Oglsb25nCQkweDNGODExMTExLDB4MTExMTExMTEKRU0xQjM6CWxvbmcJCTB4M0ZBNTU1NTUsMHg1NTU1NTU1NQoKRU0xQjI6CWxvbmcJCTB4M0ZGQzAwMDAsMHhBQUFBQUFBQSwweEFBQUFBQUFCCglsb25nCQkweDAwMDAwMDAwCgpUV08xNDA6CWxvbmcJCTB4NDhCMDAwMDAsMHgwMDAwMDAwMApUV09OMTQwOgoJbG9uZwkJMHgzNzMwMDAwMCwweDAwMDAwMDAwCgpFRVhQVEJMOgoJbG9uZwkJMHgzRkZGMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZGMDAwMCwweDgxNjREMUYzLDB4QkMwMzA3NzQsMHg5Rjg0MUE5QgoJbG9uZwkJMHgzRkZGMDAwMCwweDgyQ0Q4Njk4LDB4QUMyQkExRDgsMHg5RkMxRDVCOQoJbG9uZwkJMHgzRkZGMDAwMCwweDg0M0EyOEMzLDB4QUNERTQwNDgsMHhBMDcyODM2OQoJbG9uZwkJMHgzRkZGMDAwMCwweDg1QUFDMzY3LDB4Q0M0ODdCMTQsMHgxRkM1Qzk1QwoJbG9uZwkJMHgzRkZGMDAwMCwweDg3MUY2MTk2LDB4OUU4RDEwMTAsMHgxRUU4NUM5RgoJbG9uZwkJMHgzRkZGMDAwMCwweDg4OTgwRTgwLDB4OTJEQTg1MjgsMHg5RkEyMDcyOQoJbG9uZwkJMHgzRkZGMDAwMCwweDhBMTRENTc1LDB4NDk2RUZEOUMsMHhBMDdCRjlBRgoJbG9uZwkJMHgzRkZGMDAwMCwweDhCOTVDMUUzLDB4RUE4QkQ2RTgsMHhBMDAyMERDRgoJbG9uZwkJMHgzRkZGMDAwMCwweDhEMUFERjVCLDB4N0U1QkE5RTQsMHgyMDVBNjNEQQoJbG9uZwkJMHgzRkZGMDAwMCwweDhFQTQzOThCLDB4NDVDRDUzQzAsMHgxRUI3MDA1MQoJbG9uZwkJMHgzRkZGMDAwMCwweDkwMzFEQzQzLDB4MTQ2NkIxREMsMHgxRjZFQjAyOQoJbG9uZwkJMHgzRkZGMDAwMCwweDkxQzNEMzczLDB4QUIxMUMzMzgsMHhBMDc4MTQ5NAoJbG9uZwkJMHgzRkZGMDAwMCwweDkzNUEyQjJGLDB4MTNFNkU5MkMsMHg5RUIzMTlCMAoJbG9uZwkJMHgzRkZGMDAwMCwweDk0RjRFRkE4LDB4RkVGNzA5NjAsMHgyMDE3NDU3RAoJbG9uZwkJMHgzRkZGMDAwMCwweDk2OTQyRDM3LDB4MjAxODVBMDAsMHgxRjExRDUzNwoJbG9uZwkJMHgzRkZGMDAwMCwweDk4MzdGMDUxLDB4OERCOEE5NzAsMHg5RkI5NTJERAoJbG9uZwkJMHgzRkZGMDAwMCwweDk5RTA0NTkzLDB4MjBCN0ZBNjQsMHgxRkU0MzA4NwoJbG9uZwkJMHgzRkZGMDAwMCwweDlCOEQzOUI5LDB4RDU0RTU1MzgsMHgxRkEyQTgxOAoJbG9uZwkJMHgzRkZGMDAwMCwweDlEM0VEOUE3LDB4MkNGRkI3NTAsMHgxRkRFNDk0RAoJbG9uZwkJMHgzRkZGMDAwMCwweDlFRjUzMjYwLDB4OTFBMTExQUMsMHgyMDUwNDg5MAoJbG9uZwkJMHgzRkZGMDAwMCwweEEwQjA1MTBGLDB4Qjk3MTRGQzQsMHhBMDczNjkxQwoJbG9uZwkJMHgzRkZGMDAwMCwweEEyNzA0MzAzLDB4MEM0OTY4MTgsMHgxRjlCN0EwNQoJbG9uZwkJMHgzRkZGMDAwMCwweEE0MzUxNUFFLDB4MDlFNjgwQTAsMHhBMDc5NzEyNgoJbG9uZwkJMHgzRkZGMDAwMCwweEE1RkVENkE5LDB4QjE1MTM4RUMsMHhBMDcxQTE0MAoJbG9uZwkJMHgzRkZGMDAwMCwweEE3Q0Q5M0I0LDB4RTk2NTM1NjgsMHgyMDRGNjJEQQoJbG9uZwkJMHgzRkZGMDAwMCwweEE5QTE1QUI0LDB4RUE3QzBFRjgsMHgxRjI4M0M0QQoJbG9uZwkJMHgzRkZGMDAwMCwweEFCN0EzOUI1LDB4QTkzRUQzMzgsMHg5RjlBN0ZEQwoJbG9uZwkJMHgzRkZGMDAwMCwweEFENTgzRUVBLDB4NDJBMTRBQzgsMHhBMDVCM0ZBQwoJbG9uZwkJMHgzRkZGMDAwMCwweEFGM0I3OEFELDB4NjkwQTQzNzQsMHgxRkRGMjYxMAoJbG9uZwkJMHgzRkZGMDAwMCwweEIxMjNGNTgxLDB4RDJBQzI1OTAsMHg5RjcwNUY5MAoJbG9uZwkJMHgzRkZGMDAwMCwweEIzMTFDNDEyLDB4QTkxMTI0ODgsMHgyMDFGNjc4QQoJbG9uZwkJMHgzRkZGMDAwMCwweEI1MDRGMzMzLDB4RjlERTY0ODQsMHgxRjMyRkIxMwoJbG9uZwkJMHgzRkZGMDAwMCwweEI2RkQ5MUUzLDB4MjhEMTc3OTAsMHgyMDAzOEIzMAoJbG9uZwkJMHgzRkZGMDAwMCwweEI4RkJBRjQ3LDB4NjJGQjlFRTgsMHgyMDBEQzNDQwoJbG9uZwkJMHgzRkZGMDAwMCwweEJBRkY1QUIyLDB4MTMzRTQ1RkMsMHg5RjhCMkFFNgoJbG9uZwkJMHgzRkZGMDAwMCwweEJEMDhBMzlGLDB4NTgwQzM2QzAsMHhBMDJCQkY3MAoJbG9uZwkJMHgzRkZGMDAwMCwweEJGMTc5OUI2LDB4N0E3MzEwODQsMHhBMDBCRjUxOAoJbG9uZwkJMHgzRkZGMDAwMCwweEMxMkM0Q0NBLDB4NjY3MDk0NTgsMHhBMDQxREQ0MQoJbG9uZwkJMHgzRkZGMDAwMCwweEMzNDZDQ0RBLDB4MjQ5NzY0MDgsMHg5RkRGMTM3QgoJbG9uZwkJMHgzRkZGMDAwMCwweEM1NjcyQTExLDB4NTUwNkRBREMsMHgyMDFGMTU2OAoJbG9uZwkJMHgzRkZGMDAwMCwweEM3OEQ3NEM4LDB4QUJCOUIxNUMsMHgxRkMxM0EyRQoJbG9uZwkJMHgzRkZGMDAwMCwweEM5QjlCRDg2LDB4NkUyRjI3QTQsMHhBMDNGOEYwMwoJbG9uZwkJMHgzRkZGMDAwMCwweENCRUMxNEZFLDB4RjI3MjdDNUMsMHgxRkY0OTA3RAoJbG9uZwkJMHgzRkZGMDAwMCwweENFMjQ4QzE1LDB4MUY4NDgwRTQsMHg5RTZFNTNFNAoJbG9uZwkJMHgzRkZGMDAwMCwweEQwNjMzM0RBLDB4RUYyQjI1OTQsMHgxRkQ2RDQ1QwoJbG9uZwkJMHgzRkZGMDAwMCwweEQyQTgxRDkxLDB4RjEyQUU0NUMsMHhBMDc2RURCOQoJbG9uZwkJMHgzRkZGMDAwMCwweEQ0RjM1QUFCLDB4Q0ZFREZBMjAsMHg5RkE2REUyMQoJbG9uZwkJMHgzRkZGMDAwMCwweEQ3NDRGQ0NBLDB4RDY5RDZBRjQsMHgxRUU2OUEyRgoJbG9uZwkJMHgzRkZGMDAwMCwweEQ5OUQxNUMyLDB4NzhBRkQ3QjQsMHgyMDdGNDM5RgoJbG9uZwkJMHgzRkZGMDAwMCwweERCRkJCNzk3LDB4REFGMjM3NTQsMHgyMDFFQzIwNwoJbG9uZwkJMHgzRkZGMDAwMCwweERFNjBGNDgyLDB4NUUwRTkxMjQsMHg5RThCRTE3NQoJbG9uZwkJMHgzRkZGMDAwMCwweEUwQ0NERUVDLDB4MkE5NEUxMTAsMHgyMDAzMkM0QgoJbG9uZwkJMHgzRkZGMDAwMCwweEUzM0Y4OTcyLDB4QkU4QTVBNTAsMHgyMDA0REZGNQoJbG9uZwkJMHgzRkZGMDAwMCwweEU1QjkwNkU3LDB4N0M4MzQ4QTgsMHgxRTcyRjQ3QQoJbG9uZwkJMHgzRkZGMDAwMCwweEU4Mzk2QTUwLDB4M0M0QkRDNjgsMHgxRjcyMkYyMgoJbG9uZwkJMHgzRkZGMDAwMCwweEVBQzBDNkU3LDB4REQyNDM5MzAsMHhBMDE3RTk0NQoJbG9uZwkJMHgzRkZGMDAwMCwweEVENEYzMDFFLDB4RDk5NDJCODQsMHgxRjQwMUE1QgoJbG9uZwkJMHgzRkZGMDAwMCwweEVGRTRCOTlCLDB4RENEQUY1Q0MsMHg5RkI5QTlFMwoJbG9uZwkJMHgzRkZGMDAwMCwweEYyODE3NzNDLDB4NTlGRkIxMzgsMHgyMDc0NEMwNQoJbG9uZwkJMHgzRkZGMDAwMCwweEY1MjU3RDE1LDB4MjQ4NkNDMkMsMHgxRjc3M0ExOQoJbG9uZwkJMHgzRkZGMDAwMCwweEY3RDBERjczLDB4MEFEMTNCQjgsMHgxRkZFOTBENQoJbG9uZwkJMHgzRkZGMDAwMCwweEZBODNCMkRCLDB4NzIyQTAzM0MsMHhBMDQxRUQyMgoJbG9uZwkJMHgzRkZGMDAwMCwweEZEM0UwQzBDLDB4RjQ4NkMxNzQsMHgxRjg1M0YzQQoKCXNldAkJQURKRkxBRyxMX1NDUjIKCXNldAkJU0NBTEUsRlBfU0NSMAoJc2V0CQlBREpTQ0FMRSxGUF9TQ1IxCglzZXQJCVNDLEZQX1NDUjAKCXNldAkJT05FQllTQyxGUF9TQ1IxCgoJZ2xvYmFsCQlzZXRveApzZXRveDoKIy0tZW50cnkgcG9pbnQgZm9yIEVYUChYKSwgaGVyZSBYIGlzIGZpbml0ZSwgbm9uLXplcm8sIGFuZCBub3QgTmFOJ3MKCiMtLVN0ZXAgMS4KCW1vdi5sCQkoJWEwKSwlZDEJCSMgbG9hZCBwYXJ0IG9mIGlucHV0IFgKCWFuZC5sCQkmMHg3RkZGMDAwMCwlZDEJCSMgYmlhc2VkIGV4cG8uIG9mIFgKCWNtcC5sCQklZDEsJjB4M0ZCRTAwMDAJCSMgMl4oLTY1KQoJYmdlLmIJCUVYUEMxCQkJIyBub3JtYWwgY2FzZQoJYnJhCQlFWFBTTQoKRVhQQzE6CiMtLVRoZSBjYXNlIHxYfCA+PSAyXigtNjUpCgltb3YudwkJNCglYTApLCVkMQkJIyBleHBvLiBhbmQgcGFydGlhbCBzaWcuIG9mIHxYfAoJY21wLmwJCSVkMSwmMHg0MDBDQjE2NwkJIyAxNjM4MCBsb2cyIHRydW5jLiAxNiBiaXRzCglibHQuYgkJRVhQTUFJTgkJCSMgbm9ybWFsIGNhc2UKCWJyYQkJRUVYUEJJRwoKRVhQTUFJTjoKIy0tU3RlcCAyLgojLS1UaGlzIGlzIHRoZSBub3JtYWwgYnJhbmNoOgkyXigtNjUpIDw9IHxYfCA8IDE2MzgwIGxvZzIuCglmbW92LngJCSglYTApLCVmcDAJCSMgbG9hZCBpbnB1dCBmcm9tIChhMCkKCglmbW92LngJCSVmcDAsJWZwMQoJZm11bC5zCQkmMHg0MkI4QUEzQiwlZnAwCSMgNjQvbG9nMiAqIFgKCWZtb3ZtLngJCSYweGMsLSglc3ApCQkjIHNhdmUgZnAyIHslZnAyLyVmcDN9Cgltb3YubAkJJjAsQURKRkxBRyglYTYpCglmbW92LmwJCSVmcDAsJWQxCQkjIE4gPSBpbnQoIFggKiA2NC9sb2cyICkKCWxlYQkJRUVYUFRCTCglcGMpLCVhMQoJZm1vdi5sCQklZDEsJWZwMAkJIyBjb252ZXJ0IHRvIGZsb2F0aW5nLWZvcm1hdAoKCW1vdi5sCQklZDEsTF9TQ1IxKCVhNikJCSMgc2F2ZSBOIHRlbXBvcmFyaWx5CglhbmQubAkJJjB4M0YsJWQxCQkjIEQwIGlzIEogPSBOIG1vZCA2NAoJbHNsLmwJCSY0LCVkMQoJYWRkLmwJCSVkMSwlYTEJCQkjIGFkZHJlc3Mgb2YgMl4oSi82NCkKCW1vdi5sCQlMX1NDUjEoJWE2KSwlZDEKCWFzci5sCQkmNiwlZDEJCQkjIEQwIGlzIE0KCWFkZC53CQkmMHgzRkZGLCVkMQkJIyBiaWFzZWQgZXhwby4gb2YgMl4oTSkKCW1vdi53CQlMMiglcGMpLExfU0NSMSglYTYpCSMgcHJlZmV0Y2ggTDIsIG5vIG5lZWQgaW4gQ0IKCkVYUENPTlQxOgojLS1TdGVwIDMuCiMtLWZwMSxmcDIgc2F2ZWQgb24gdGhlIHN0YWNrLiBmcDAgaXMgTiwgZnAxIGlzIFgsCiMtLWEwIHBvaW50cyB0byAyXihKLzY0KSwgRDAgaXMgYmlhc2VkIGV4cG8uIG9mIDJeKE0pCglmbW92LngJCSVmcDAsJWZwMgoJZm11bC5zCQkmMHhCQzMxNzIxOCwlZnAwCSMgTiAqIEwxLCBMMSA9IGxlYWQoLWxvZzIvNjQpCglmbXVsLngJCUwyKCVwYyksJWZwMgkJIyBOICogTDIsIEwxK0wyID0gLWxvZzIvNjQKCWZhZGQueAkJJWZwMSwlZnAwCQkjIFggKyBOKkwxCglmYWRkLngJCSVmcDIsJWZwMAkJIyBmcDAgaXMgUiwgcmVkdWNlZCBhcmcuCgojLS1TdGVwIDQuCiMtLVdFIE5PVyBDT01QVVRFIEVYUChSKS0xIEJZIEEgUE9MWU5PTUlBTAojLS0gUiArIFIqUiooQTEgKyBSKihBMiArIFIqKEEzICsgUiooQTQgKyBSKkE1KSkpKQojLS1UTyBGVUxMWSBVVElMSVpFIFRIRSBQSVBFTElORSwgV0UgQ09NUFVURSBTID0gUipSCiMtLVtSK1IqUyooQTIrUypBNCldICsgW1MqKEExK1MqKEEzK1MqQTUpKV0KCglmbW92LngJCSVmcDAsJWZwMQoJZm11bC54CQklZnAxLCVmcDEJCSMgZnAxIElTIFMgPSBSKlIKCglmbW92LnMJCSYweDNBQjYwQjcwLCVmcDIJIyBmcDIgSVMgQTUKCglmbXVsLngJCSVmcDEsJWZwMgkJIyBmcDIgSVMgUypBNQoJZm1vdi54CQklZnAxLCVmcDMKCWZtdWwucwkJJjB4M0MwODg4OTUsJWZwMwkjIGZwMyBJUyBTKkE0CgoJZmFkZC5kCQlFRVhQQTMoJXBjKSwlZnAyCSMgZnAyIElTIEEzK1MqQTUKCWZhZGQuZAkJRUVYUEEyKCVwYyksJWZwMwkjIGZwMyBJUyBBMitTKkE0CgoJZm11bC54CQklZnAxLCVmcDIJCSMgZnAyIElTIFMqKEEzK1MqQTUpCgltb3YudwkJJWQxLFNDQUxFKCVhNikJCSMgU0NBTEUgaXMgMl4oTSkgaW4gZXh0ZW5kZWQKCW1vdi5sCQkmMHg4MDAwMDAwMCxTQ0FMRSs0KCVhNikKCWNsci5sCQlTQ0FMRSs4KCVhNikKCglmbXVsLngJCSVmcDEsJWZwMwkJIyBmcDMgSVMgUyooQTIrUypBNCkKCglmYWRkLnMJCSYweDNGMDAwMDAwLCVmcDIJIyBmcDIgSVMgQTErUyooQTMrUypBNSkKCWZtdWwueAkJJWZwMCwlZnAzCQkjIGZwMyBJUyBSKlMqKEEyK1MqQTQpCgoJZm11bC54CQklZnAxLCVmcDIJCSMgZnAyIElTIFMqKEExK1MqKEEzK1MqQTUpKQoJZmFkZC54CQklZnAzLCVmcDAJCSMgZnAwIElTIFIrUipTKihBMitTKkE0KSwKCglmbW92LngJCSglYTEpKywlZnAxCQkjIGZwMSBpcyBsZWFkLiBwdC4gb2YgMl4oSi82NCkKCWZhZGQueAkJJWZwMiwlZnAwCQkjIGZwMCBpcyBFWFAoUikgLSAxCgojLS1TdGVwIDUKIy0tZmluYWwgcmVjb25zdHJ1Y3Rpb24gcHJvY2VzcwojLS1FWFAoWCkgPSAyXk0gKiAoIDJeKEovNjQpICsgMl4oSi82NCkqKEVYUChSKS0xKSApCgoJZm11bC54CQklZnAxLCVmcDAJCSMgMl4oSi82NCkqKEV4cChSKS0xKQoJZm1vdm0ueAkJKCVzcCkrLCYweDMwCQkjIGZwMiByZXN0b3JlZCB7JWZwMi8lZnAzfQoJZmFkZC5zCQkoJWExKSwlZnAwCQkjIGFjY3VyYXRlIDJeKEovNjQpCgoJZmFkZC54CQklZnAxLCVmcDAJCSMgMl4oSi82NCkgKyAyXihKLzY0KSouLi4KCW1vdi5sCQlBREpGTEFHKCVhNiksJWQxCgojLS1TdGVwIDYKCXRzdC5sCQklZDEKCWJlcS5iCQlOT1JNQUwKQURKVVNUOgoJZm11bC54CQlBREpTQ0FMRSglYTYpLCVmcDAKTk9STUFMOgoJZm1vdi5sCQklZDAsJWZwY3IJCSMgcmVzdG9yZSB1c2VyIEZQQ1IKCW1vdi5iCQkmRk1VTF9PUCwlZDEJCSMgbGFzdCBpbnN0IGlzIE1VTAoJZm11bC54CQlTQ0FMRSglYTYpLCVmcDAJCSMgbXVsdGlwbHkgMl4oTSkKCWJyYQkJdF9jYXRjaAoKRVhQU006CiMtLVN0ZXAgNwoJZm1vdm0ueAkJKCVhMCksJjB4ODAJCSMgbG9hZCBYCglmbW92LmwJCSVkMCwlZnBjcgoJZmFkZC5zCQkmMHgzRjgwMDAwMCwlZnAwCSMgMStYIGluIHVzZXIgbW9kZQoJYnJhCQl0X3BpbngyCgpFRVhQQklHOgojLS1TdGVwIDgKCWNtcC5sCQklZDEsJjB4NDAwQ0IyN0MJCSMgMTY0ODAgbG9nMgoJYmd0LmIJCUVYUDJCSUcKIy0tU3RlcHMgOC4yIC0tIDguNgoJZm1vdi54CQkoJWEwKSwlZnAwCQkjIGxvYWQgaW5wdXQgZnJvbSAoYTApCgoJZm1vdi54CQklZnAwLCVmcDEKCWZtdWwucwkJJjB4NDJCOEFBM0IsJWZwMAkjIDY0L2xvZzIgKiBYCglmbW92bS54CQkmMHhjLC0oJXNwKQkJIyBzYXZlIGZwMiB7JWZwMi8lZnAzfQoJbW92LmwJCSYxLEFESkZMQUcoJWE2KQoJZm1vdi5sCQklZnAwLCVkMQkJIyBOID0gaW50KCBYICogNjQvbG9nMiApCglsZWEJCUVFWFBUQkwoJXBjKSwlYTEKCWZtb3YubAkJJWQxLCVmcDAJCSMgY29udmVydCB0byBmbG9hdGluZy1mb3JtYXQKCW1vdi5sCQklZDEsTF9TQ1IxKCVhNikJCSMgc2F2ZSBOIHRlbXBvcmFyaWx5CglhbmQubAkJJjB4M0YsJWQxCQkjIEQwIGlzIEogPSBOIG1vZCA2NAoJbHNsLmwJCSY0LCVkMQoJYWRkLmwJCSVkMSwlYTEJCQkjIGFkZHJlc3Mgb2YgMl4oSi82NCkKCW1vdi5sCQlMX1NDUjEoJWE2KSwlZDEKCWFzci5sCQkmNiwlZDEJCQkjIEQwIGlzIEsKCW1vdi5sCQklZDEsTF9TQ1IxKCVhNikJCSMgc2F2ZSBLIHRlbXBvcmFyaWx5Cglhc3IubAkJJjEsJWQxCQkJIyBEMCBpcyBNMQoJc3ViLmwJCSVkMSxMX1NDUjEoJWE2KQkJIyBhMSBpcyBNCglhZGQudwkJJjB4M0ZGRiwlZDEJCSMgYmlhc2VkIGV4cG8uIG9mIDJeKE0xKQoJbW92LncJCSVkMSxBREpTQ0FMRSglYTYpCSMgQURKU0NBTEUgOj0gMl4oTTEpCgltb3YubAkJJjB4ODAwMDAwMDAsQURKU0NBTEUrNCglYTYpCgljbHIubAkJQURKU0NBTEUrOCglYTYpCgltb3YubAkJTF9TQ1IxKCVhNiksJWQxCQkjIEQwIGlzIE0KCWFkZC53CQkmMHgzRkZGLCVkMQkJIyBiaWFzZWQgZXhwby4gb2YgMl4oTSkKCWJyYS53CQlFWFBDT05UMQkJIyBnbyBiYWNrIHRvIFN0ZXAgMwoKRVhQMkJJRzoKIy0tU3RlcCA5Cgl0c3QuYgkJKCVhMCkJCQkjIGlzIFggcG9zaXRpdmUgb3IgbmVnYXRpdmU/CglibWkJCXRfdW5mbDIKCWJyYQkJdF9vdmZsMgoKCWdsb2JhbAkJc2V0b3hkCnNldG94ZDoKIy0tZW50cnkgcG9pbnQgZm9yIEVYUChYKSwgWCBpcyBkZW5vcm1hbGl6ZWQKCW1vdi5sCQkoJWEwKSwtKCVzcCkKCWFuZGkubAkJJjB4ODAwMDAwMDAsKCVzcCkKCW9yaS5sCQkmMHgwMDgwMDAwMCwoJXNwKQkjIHNpZ24oWCkqMl4oLTEyNikKCglmbW92LnMJCSYweDNGODAwMDAwLCVmcDAKCglmbW92LmwJCSVkMCwlZnBjcgoJZmFkZC5zCQkoJXNwKSssJWZwMAoJYnJhCQl0X3BpbngyCgoJZ2xvYmFsCQlzZXRveG0xCnNldG94bTE6CiMtLWVudHJ5IHBvaW50IGZvciBFWFBNMShYKSwgaGVyZSBYIGlzIGZpbml0ZSwgbm9uLXplcm8sIG5vbi1OYU4KCiMtLVN0ZXAgMS4KIy0tU3RlcCAxLjEKCW1vdi5sCQkoJWEwKSwlZDEJCSMgbG9hZCBwYXJ0IG9mIGlucHV0IFgKCWFuZC5sCQkmMHg3RkZGMDAwMCwlZDEJCSMgYmlhc2VkIGV4cG8uIG9mIFgKCWNtcC5sCQklZDEsJjB4M0ZGRDAwMDAJCSMgMS80CgliZ2UuYgkJRU0xQ09OMQkJCSMgfFh8ID49IDEvNAoJYnJhCQlFTTFTTQoKRU0xQ09OMToKIy0tU3RlcCAxLjMKIy0tVGhlIGNhc2UgfFh8ID49IDEvNAoJbW92LncJCTQoJWEwKSwlZDEJCSMgZXhwby4gYW5kIHBhcnRpYWwgc2lnLiBvZiB8WHwKCWNtcC5sCQklZDEsJjB4NDAwNEMyMTUJCSMgNzBsb2cyIHJvdW5kZWQgdXAgdG8gMTYgYml0cwoJYmxlLmIJCUVNMU1BSU4JCQkjIDEvNCA8PSB8WHwgPD0gNzBsb2cyCglicmEJCUVNMUJJRwoKRU0xTUFJTjoKIy0tU3RlcCAyLgojLS1UaGlzIGlzIHRoZSBjYXNlOgkxLzQgPD0gfFh8IDw9IDcwIGxvZzIuCglmbW92LngJCSglYTApLCVmcDAJCSMgbG9hZCBpbnB1dCBmcm9tIChhMCkKCglmbW92LngJCSVmcDAsJWZwMQoJZm11bC5zCQkmMHg0MkI4QUEzQiwlZnAwCSMgNjQvbG9nMiAqIFgKCWZtb3ZtLngJCSYweGMsLSglc3ApCQkjIHNhdmUgZnAyIHslZnAyLyVmcDN9CglmbW92LmwJCSVmcDAsJWQxCQkjIE4gPSBpbnQoIFggKiA2NC9sb2cyICkKCWxlYQkJRUVYUFRCTCglcGMpLCVhMQoJZm1vdi5sCQklZDEsJWZwMAkJIyBjb252ZXJ0IHRvIGZsb2F0aW5nLWZvcm1hdAoKCW1vdi5sCQklZDEsTF9TQ1IxKCVhNikJCSMgc2F2ZSBOIHRlbXBvcmFyaWx5CglhbmQubAkJJjB4M0YsJWQxCQkjIEQwIGlzIEogPSBOIG1vZCA2NAoJbHNsLmwJCSY0LCVkMQoJYWRkLmwJCSVkMSwlYTEJCQkjIGFkZHJlc3Mgb2YgMl4oSi82NCkKCW1vdi5sCQlMX1NDUjEoJWE2KSwlZDEKCWFzci5sCQkmNiwlZDEJCQkjIEQwIGlzIE0KCW1vdi5sCQklZDEsTF9TQ1IxKCVhNikJCSMgc2F2ZSBhIGNvcHkgb2YgTQoKIy0tU3RlcCAzLgojLS1mcDEsZnAyIHNhdmVkIG9uIHRoZSBzdGFjay4gZnAwIGlzIE4sIGZwMSBpcyBYLAojLS1hMCBwb2ludHMgdG8gMl4oSi82NCksIEQwIGFuZCBhMSBib3RoIGNvbnRhaW4gTQoJZm1vdi54CQklZnAwLCVmcDIKCWZtdWwucwkJJjB4QkMzMTcyMTgsJWZwMAkjIE4gKiBMMSwgTDEgPSBsZWFkKC1sb2cyLzY0KQoJZm11bC54CQlMMiglcGMpLCVmcDIJCSMgTiAqIEwyLCBMMStMMiA9IC1sb2cyLzY0CglmYWRkLngJCSVmcDEsJWZwMAkJIyBYICsgTipMMQoJZmFkZC54CQklZnAyLCVmcDAJCSMgZnAwIGlzIFIsIHJlZHVjZWQgYXJnLgoJYWRkLncJCSYweDNGRkYsJWQxCQkjIEQwIGlzIGJpYXNlZCBleHBvLiBvZiAyXk0KCiMtLVN0ZXAgNC4KIy0tV0UgTk9XIENPTVBVVEUgRVhQKFIpLTEgQlkgQSBQT0xZTk9NSUFMCiMtLSBSICsgUipSKihBMSArIFIqKEEyICsgUiooQTMgKyBSKihBNCArIFIqKEE1ICsgUipBNikpKSkpCiMtLVRPIEZVTExZIFVUSUxJWkUgVEhFIFBJUEVMSU5FLCBXRSBDT01QVVRFIFMgPSBSKlIKIy0tW1IqUyooQTIrUyooQTQrUypBNikpXSArIFtSK1MqKEExK1MqKEEzK1MqQTUpKV0KCglmbW92LngJCSVmcDAsJWZwMQoJZm11bC54CQklZnAxLCVmcDEJCSMgZnAxIElTIFMgPSBSKlIKCglmbW92LnMJCSYweDM5NTAwOTdCLCVmcDIJIyBmcDIgSVMgYTYKCglmbXVsLngJCSVmcDEsJWZwMgkJIyBmcDIgSVMgUypBNgoJZm1vdi54CQklZnAxLCVmcDMKCWZtdWwucwkJJjB4M0FCNjBCNkEsJWZwMwkjIGZwMyBJUyBTKkE1CgoJZmFkZC5kCQlFTTFBNCglcGMpLCVmcDIJCSMgZnAyIElTIEE0K1MqQTYKCWZhZGQuZAkJRU0xQTMoJXBjKSwlZnAzCQkjIGZwMyBJUyBBMytTKkE1Cgltb3YudwkJJWQxLFNDKCVhNikJCSMgU0MgaXMgMl4oTSkgaW4gZXh0ZW5kZWQKCW1vdi5sCQkmMHg4MDAwMDAwMCxTQys0KCVhNikKCWNsci5sCQlTQys4KCVhNikKCglmbXVsLngJCSVmcDEsJWZwMgkJIyBmcDIgSVMgUyooQTQrUypBNikKCW1vdi5sCQlMX1NDUjEoJWE2KSwlZDEJCSMgRDAgaXMJTQoJbmVnLncJCSVkMQkJCSMgRDAgaXMgLU0KCWZtdWwueAkJJWZwMSwlZnAzCQkjIGZwMyBJUyBTKihBMytTKkE1KQoJYWRkLncJCSYweDNGRkYsJWQxCQkjIGJpYXNlZCBleHBvLiBvZiAyXigtTSkKCWZhZGQuZAkJRU0xQTIoJXBjKSwlZnAyCQkjIGZwMiBJUyBBMitTKihBNCtTKkE2KQoJZmFkZC5zCQkmMHgzRjAwMDAwMCwlZnAzCSMgZnAzIElTIEExK1MqKEEzK1MqQTUpCgoJZm11bC54CQklZnAxLCVmcDIJCSMgZnAyIElTIFMqKEEyK1MqKEE0K1MqQTYpKQoJb3IudwkJJjB4ODAwMCwlZDEJCSMgc2lnbmVkL2V4cG8uIG9mIC0yXigtTSkKCW1vdi53CQklZDEsT05FQllTQyglYTYpCSMgT25lYnlTYyBpcyAtMl4oLU0pCgltb3YubAkJJjB4ODAwMDAwMDAsT05FQllTQys0KCVhNikKCWNsci5sCQlPTkVCWVNDKzgoJWE2KQoJZm11bC54CQklZnAzLCVmcDEJCSMgZnAxIElTIFMqKEExK1MqKEEzK1MqQTUpKQoKCWZtdWwueAkJJWZwMCwlZnAyCQkjIGZwMiBJUyBSKlMqKEEyK1MqKEE0K1MqQTYpKQoJZmFkZC54CQklZnAxLCVmcDAJCSMgZnAwIElTIFIrUyooQTErUyooQTMrUypBNSkpCgoJZmFkZC54CQklZnAyLCVmcDAJCSMgZnAwIElTIEVYUChSKS0xCgoJZm1vdm0ueAkJKCVzcCkrLCYweDMwCQkjIGZwMiByZXN0b3JlZCB7JWZwMi8lZnAzfQoKIy0tU3RlcCA1CiMtLUNvbXB1dGUgMl4oSi82NCkqcAoKCWZtdWwueAkJKCVhMSksJWZwMAkJIyAyXihKLzY0KSooRXhwKFIpLTEpCgojLS1TdGVwIDYKIy0tU3RlcCA2LjEKCW1vdi5sCQlMX1NDUjEoJWE2KSwlZDEJCSMgcmV0cmlldmUgTQoJY21wLmwJCSVkMSwmNjMKCWJsZS5iCQlNTEU2MwojLS1TdGVwIDYuMglNID49IDY0CglmbW92LnMJCTEyKCVhMSksJWZwMQkJIyBmcDEgaXMgdAoJZmFkZC54CQlPTkVCWVNDKCVhNiksJWZwMQkjIGZwMSBpcyB0K09uZWJ5U2MKCWZhZGQueAkJJWZwMSwlZnAwCQkjIHArKHQrT25lYnlTYyksIGZwMSByZWxlYXNlZAoJZmFkZC54CQkoJWExKSwlZnAwCQkjIFQrKHArKHQrT25lYnlTYykpCglicmEJCUVNMVNDQUxFCk1MRTYzOgojLS1TdGVwIDYuMwlNIDw9IDYzCgljbXAubAkJJWQxLCYtMwoJYmdlLmIJCU1HRU4zCk1MVE4zOgojLS1TdGVwIDYuNAlNIDw9IC00CglmYWRkLnMJCTEyKCVhMSksJWZwMAkJIyBwK3QKCWZhZGQueAkJKCVhMSksJWZwMAkJIyBUKyhwK3QpCglmYWRkLngJCU9ORUJZU0MoJWE2KSwlZnAwCSMgT25lYnlTYyArIChUKyhwK3QpKQoJYnJhCQlFTTFTQ0FMRQpNR0VOMzoKIy0tU3RlcCA2LjUJLTMgPD0gTSA8PSA2MwoJZm1vdi54CQkoJWExKSssJWZwMQkJIyBmcDEgaXMgVAoJZmFkZC5zCQkoJWExKSwlZnAwCQkjIGZwMCBpcyBwK3QKCWZhZGQueAkJT05FQllTQyglYTYpLCVmcDEJIyBmcDEgaXMgVCtPbmVieVNjCglmYWRkLngJCSVmcDEsJWZwMAkJIyAoVCtPbmVieVNjKSsocCt0KQoKRU0xU0NBTEU6CiMtLVN0ZXAgNi42CglmbW92LmwJCSVkMCwlZnBjcgoJZm11bC54CQlTQyglYTYpLCVmcDAKCWJyYQkJdF9pbngyCgpFTTFTTToKIy0tU3RlcCA3CXxYfCA8IDEvNC4KCWNtcC5sCQklZDEsJjB4M0ZCRTAwMDAJCSMgMl4oLTY1KQoJYmdlLmIJCUVNMVBPTFkKCkVNMVRJTlk6CiMtLVN0ZXAgOAl8WHwgPCAyXigtNjUpCgljbXAubAkJJWQxLCYweDAwMzMwMDAwCQkjIDJeKC0xNjMxMikKCWJsdC5iCQlFTTEyVElOWQojLS1TdGVwIDguMgoJbW92LmwJCSYweDgwMDEwMDAwLFNDKCVhNikJIyBTQyBpcyAtMl4oLTE2MzgyKQoJbW92LmwJCSYweDgwMDAwMDAwLFNDKzQoJWE2KQoJY2xyLmwJCVNDKzgoJWE2KQoJZm1vdi54CQkoJWEwKSwlZnAwCglmbW92LmwJCSVkMCwlZnBjcgoJbW92LmIJCSZGQUREX09QLCVkMQkJIyBsYXN0IGluc3QgaXMgQURECglmYWRkLngJCVNDKCVhNiksJWZwMAoJYnJhCQl0X2NhdGNoCgpFTTEyVElOWToKIy0tU3RlcCA4LjMKCWZtb3YueAkJKCVhMCksJWZwMAoJZm11bC5kCQlUV08xNDAoJXBjKSwlZnAwCgltb3YubAkJJjB4ODAwMTAwMDAsU0MoJWE2KQoJbW92LmwJCSYweDgwMDAwMDAwLFNDKzQoJWE2KQoJY2xyLmwJCVNDKzgoJWE2KQoJZmFkZC54CQlTQyglYTYpLCVmcDAKCWZtb3YubAkJJWQwLCVmcGNyCgltb3YuYgkJJkZNVUxfT1AsJWQxCQkjIGxhc3QgaW5zdCBpcyBNVUwKCWZtdWwuZAkJVFdPTjE0MCglcGMpLCVmcDAKCWJyYQkJdF9jYXRjaAoKRU0xUE9MWToKIy0tU3RlcCA5CWV4cChYKS0xIGJ5IGEgc2ltcGxlIHBvbHlub21pYWwKCWZtb3YueAkJKCVhMCksJWZwMAkJIyBmcDAgaXMgWAoJZm11bC54CQklZnAwLCVmcDAJCSMgZnAwIGlzIFMgOj0gWCpYCglmbW92bS54CQkmMHhjLC0oJXNwKQkJIyBzYXZlIGZwMiB7JWZwMi8lZnAzfQoJZm1vdi5zCQkmMHgyRjMwQ0FBOCwlZnAxCSMgZnAxIGlzIEIxMgoJZm11bC54CQklZnAwLCVmcDEJCSMgZnAxIGlzIFMqQjEyCglmbW92LnMJCSYweDMxMEY4MjkwLCVmcDIJIyBmcDIgaXMgQjExCglmYWRkLnMJCSYweDMyRDczMjIwLCVmcDEJIyBmcDEgaXMgQjEwK1MqQjEyCgoJZm11bC54CQklZnAwLCVmcDIJCSMgZnAyIGlzIFMqQjExCglmbXVsLngJCSVmcDAsJWZwMQkJIyBmcDEgaXMgUyooQjEwICsgLi4uCgoJZmFkZC5zCQkmMHgzNDkzRjI4MSwlZnAyCSMgZnAyIGlzIEI5K1MqLi4uCglmYWRkLmQJCUVNMUI4KCVwYyksJWZwMQkJIyBmcDEgaXMgQjgrUyouLi4KCglmbXVsLngJCSVmcDAsJWZwMgkJIyBmcDIgaXMgUyooQjkrLi4uCglmbXVsLngJCSVmcDAsJWZwMQkJIyBmcDEgaXMgUyooQjgrLi4uCgoJZmFkZC5kCQlFTTFCNyglcGMpLCVmcDIJCSMgZnAyIGlzIEI3K1MqLi4uCglmYWRkLmQJCUVNMUI2KCVwYyksJWZwMQkJIyBmcDEgaXMgQjYrUyouLi4KCglmbXVsLngJCSVmcDAsJWZwMgkJIyBmcDIgaXMgUyooQjcrLi4uCglmbXVsLngJCSVmcDAsJWZwMQkJIyBmcDEgaXMgUyooQjYrLi4uCgoJZmFkZC5kCQlFTTFCNSglcGMpLCVmcDIJCSMgZnAyIGlzIEI1K1MqLi4uCglmYWRkLmQJCUVNMUI0KCVwYyksJWZwMQkJIyBmcDEgaXMgQjQrUyouLi4KCglmbXVsLngJCSVmcDAsJWZwMgkJIyBmcDIgaXMgUyooQjUrLi4uCglmbXVsLngJCSVmcDAsJWZwMQkJIyBmcDEgaXMgUyooQjQrLi4uCgoJZmFkZC5kCQlFTTFCMyglcGMpLCVmcDIJCSMgZnAyIGlzIEIzK1MqLi4uCglmYWRkLngJCUVNMUIyKCVwYyksJWZwMQkJIyBmcDEgaXMgQjIrUyouLi4KCglmbXVsLngJCSVmcDAsJWZwMgkJIyBmcDIgaXMgUyooQjMrLi4uCglmbXVsLngJCSVmcDAsJWZwMQkJIyBmcDEgaXMgUyooQjIrLi4uCgoJZm11bC54CQklZnAwLCVmcDIJCSMgZnAyIGlzIFMqUyooQjMrLi4uKQoJZm11bC54CQkoJWEwKSwlZnAxCQkjIGZwMSBpcyBYKlMqKEIyLi4uCgoJZm11bC5zCQkmMHgzRjAwMDAwMCwlZnAwCSMgZnAwIGlzIFMqQjEKCWZhZGQueAkJJWZwMiwlZnAxCQkjIGZwMSBpcyBRCgoJZm1vdm0ueAkJKCVzcCkrLCYweDMwCQkjIGZwMiByZXN0b3JlZCB7JWZwMi8lZnAzfQoKCWZhZGQueAkJJWZwMSwlZnAwCQkjIGZwMCBpcyBTKkIxK1EKCglmbW92LmwJCSVkMCwlZnBjcgoJZmFkZC54CQkoJWEwKSwlZnAwCglicmEJCXRfaW54MgoKRU0xQklHOgojLS1TdGVwIDEwCXxYfCA+IDcwIGxvZzIKCW1vdi5sCQkoJWEwKSwlZDEKCWNtcC5sCQklZDEsJjAKCWJndC53CQlFWFBDMQojLS1TdGVwIDEwLjIKCWZtb3YucwkJJjB4QkY4MDAwMDAsJWZwMAkjIGZwMCBpcyAtMQoJZm1vdi5sCQklZDAsJWZwY3IKCWZhZGQucwkJJjB4MDA4MDAwMDAsJWZwMAkjIC0xICsgMl4oLTEyNikKCWJyYQkJdF9taW54MgoKCWdsb2JhbAkJc2V0b3htMWQKc2V0b3htMWQ6CiMtLWVudHJ5IHBvaW50IGZvciBFWFBNMShYKSwgaGVyZSBYIGlzIGRlbm9ybWFsaXplZAojLS1TdGVwIDAuCglicmEJCXRfZXh0ZG5ybQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIHNnZXRleHAoKTogIHJldHVybnMgdGhlIGV4cG9uZW50IHBvcnRpb24gb2YgdGhlIGlucHV0IGFyZ3VtZW50LgkjCiMJICAgICAgVGhlIGV4cG9uZW50IGJpYXMgaXMgcmVtb3ZlZCBhbmQgdGhlIGV4cG9uZW50IHZhbHVlIGlzCSMKIwkgICAgICByZXR1cm5lZCBhcyBhbiBleHRlbmRlZCBwcmVjaXNpb24gbnVtYmVyIGluIGZwMC4JCSMKIyBzZ2V0ZXhwZCgpOiBoYW5kbGVzIGRlbm9ybWFsaXplZCBudW1iZXJzLgkJCQkjCiMJCQkJCQkJCQkjCiMgc2dldG1hbigpOiAgZXh0cmFjdHMgdGhlIG1hbnRpc3NhIG9mIHRoZSBpbnB1dCBhcmd1bWVudC4gVGhlCQkjCiMJICAgICAgbWFudGlzc2EgaXMgY29udmVydGVkIHRvIGFuIGV4dGVuZGVkIHByZWNpc2lvbiBudW1iZXIgdy8JIwojCSAgICAgIGFuIGV4cG9uZW50IG9mICQzZmZmIGFuZCBpcyByZXR1cm5lZCBpbiBmcDAuIFRoZSByYW5nZSBvZiAjCiMJICAgICAgdGhlIHJlc3VsdCBpcyBbMS4wIC0gMi4wKS4JCQkJIwojIHNnZXRtYW5kKCk6IGhhbmRsZXMgZGVub3JtYWxpemVkIG51bWJlcnMuCQkJCSMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIwojCWEwICA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIGlucHV0CQkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCiMJZnAwID0gZXhwb25lbnQoWCkgb3IgbWFudGlzc2EoWCkJCQkJIwojCQkJCQkJCQkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoJZ2xvYmFsCQlzZ2V0ZXhwCnNnZXRleHA6Cgltb3YudwkJU1JDX0VYKCVhMCksJWQwCQkjIGdldCB0aGUgZXhwb25lbnQKCWJjbHIJCSYweGYsJWQwCQkjIGNsZWFyIHRoZSBzaWduIGJpdAoJc3ViaS53CQkmMHgzZmZmLCVkMAkJIyBzdWJ0cmFjdCBvZmYgdGhlIGJpYXMKCWZtb3YudwkJJWQwLCVmcDAJCSMgcmV0dXJuIGV4cCBpbiBmcDAKCWJsdC5iCQlzZ2V0ZXhwbgkJIyBpdCdzIG5lZ2F0aXZlCglydHMKCnNnZXRleHBuOgoJbW92LmIJCSZuZWdfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0ICdOJyBjY29kZSBiaXQKCXJ0cwoKCWdsb2JhbAkJc2dldGV4cGQKc2dldGV4cGQ6Cglic3IubAkJbm9ybQkJCSMgbm9ybWFsaXplCgluZWcudwkJJWQwCQkJIyBuZXcgZXhwID0gLShzaGZ0IGFtdCkKCXN1YmkudwkJJjB4M2ZmZiwlZDAJCSMgc3VidHJhY3Qgb2ZmIHRoZSBiaWFzCglmbW92LncJCSVkMCwlZnAwCQkjIHJldHVybiBleHAgaW4gZnAwCgltb3YuYgkJJm5lZ19ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgJ04nIGNjb2RlIGJpdAoJcnRzCgoJZ2xvYmFsCQlzZ2V0bWFuCnNnZXRtYW46Cgltb3YudwkJU1JDX0VYKCVhMCksJWQwCQkjIGdldCB0aGUgZXhwCglvcmkudwkJJjB4N2ZmZiwlZDAJCSMgY2xlYXIgb2xkIGV4cAoJYmNscgkJJjB4ZSwlZDAJCSMgbWFrZSBpdCB0aGUgbmV3IGV4cCArLTNmZmYKCiMgaGVyZSwgd2UgYnVpbGQgdGhlIHJlc3VsdCBpbiBhIHRtcCBsb2NhdGlvbiBzbyBhcyBub3QgdG8gZGlzdHVyYiB0aGUgaW5wdXQKCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikgIyBjb3B5IHRvIHRtcCBsb2MKCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikgIyBjb3B5IHRvIHRtcCBsb2MKCW1vdi53CQklZDAsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAoJZm1vdi54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIHB1dCBuZXcgdmFsdWUgYmFjayBpbiBmcDAKCWJtaS5iCQlzZ2V0bWFubgkJIyBpdCdzIG5lZ2F0aXZlCglydHMKCnNnZXRtYW5uOgoJbW92LmIJCSZuZWdfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0ICdOJyBjY29kZSBiaXQKCXJ0cwoKIwojIEZvciBkZW5vcm1hbGl6ZWQgbnVtYmVycywgc2hpZnQgdGhlIG1hbnRpc3NhIHVudGlsIHRoZSBqLWJpdCA9IDEsCiMgdGhlbiBsb2FkIHRoZSBleHBvbmVudCB3aXRoICsvMSAkM2ZmZi4KIwoJZ2xvYmFsCQlzZ2V0bWFuZApzZ2V0bWFuZDoKCWJzci5sCQlub3JtCQkJIyBub3JtYWxpemUgZXhwb25lbnQKCWJyYS5iCQlzZ2V0bWFuCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgc2Nvc2goKTogIGNvbXB1dGVzIHRoZSBoeXBlcmJvbGljIGNvc2luZSBvZiBhIG5vcm1hbGl6ZWQgaW5wdXQJIwojIHNjb3NoZCgpOiBjb21wdXRlcyB0aGUgaHlwZXJib2xpYyBjb3NpbmUgb2YgYSBkZW5vcm1hbGl6ZWQgaW5wdXQJIwojCQkJCQkJCQkJIwojIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBpbnB1dAkJCSMKIwlkMCA9IHJvdW5kIHByZWNpc2lvbixtb2RlCQkJCQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlmcDAgPSBjb3NoKFgpCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyBBQ0NVUkFDWSBhbmQgTU9OT1RPTklDSVRZICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCVRoZSByZXR1cm5lZCByZXN1bHQgaXMgd2l0aGluIDMgdWxwcyBpbiA2NCBzaWduaWZpY2FudCBiaXQsCSMKIwlpLmUuIHdpdGhpbiAwLjUwMDEgdWxwIHRvIDUzIGJpdHMgaWYgdGhlIHJlc3VsdCBpcyBzdWJzZXF1ZW50bHkJIwojCXJvdW5kZWQgdG8gZG91YmxlIHByZWNpc2lvbi4gVGhlIHJlc3VsdCBpcyBwcm92YWJseSBtb25vdG9uaWMJIwojCWluIGRvdWJsZSBwcmVjaXNpb24uCQkJCQkJIwojCQkJCQkJCQkJIwojIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJCQkJCQkJCQkjCiMJQ09TSAkJCQkJCQkJIwojCTEuIElmIHxYfCA+IDE2MzgwIGxvZzIsIGdvIHRvIDMuCQkJCSMKIwkJCQkJCQkJCSMKIwkyLiAofFh8IDw9IDE2MzgwIGxvZzIpIENvc2goWCkgaXMgb2J0YWluZWQgYnkgdGhlIGZvcm11bGFlCSMKIwkJeSA9IHxYfCwgeiA9IGV4cChZKSwgYW5kCQkJCSMKIwkJY29zaChYKSA9ICgxLzIpKiggeiArIDEveiApLgkJCQkjCiMJCUV4aXQuCQkJCQkJCSMKIwkJCQkJCQkJCSMKIwkzLiAofFh8ID4gMTYzODAgbG9nMikuIElmIHxYfCA+IDE2NDgwIGxvZzIsIGdvIHRvIDUuCQkjCiMJCQkJCQkJCQkjCiMJNC4gKDE2MzgwIGxvZzIgPCB8WHwgPD0gMTY0ODAgbG9nMikJCQkJIwojCQljb3NoKFgpID0gc2lnbihYKSAqIGV4cCh8WHwpLzIuCQkJCSMKIwkJSG93ZXZlciwgaW52b2tpbmcgZXhwKHxYfCkgbWF5IGNhdXNlIHByZW1hdHVyZQkJIwojCQlvdmVyZmxvdy4gVGh1cywgd2UgY2FsY3VsYXRlIHNpbmgoWCkgYXMgZm9sbG93czoJIwojCQlZCTo9IHxYfAkJCQkJCSMKIwkJRmFjdAk6PQkyKiooMTYzODApCQkJCSMKIwkJWScJOj0gWSAtIDE2MzgxIGxvZzIJCQkJIwojCQljb3NoKFgpIDo9IEZhY3QgKiBleHAoWScpLgkJCQkjCiMJCUV4aXQuCQkJCQkJCSMKIwkJCQkJCQkJCSMKIwk1LiAofFh8ID4gMTY0ODAgbG9nMikgc2luaChYKSBtdXN0IG92ZXJmbG93LiBSZXR1cm4JCSMKIwkJSHVnZSpIdWdlIHRvIGdlbmVyYXRlIG92ZXJmbG93IGFuZCBhbiBpbmZpbml0eSB3aXRoCSMKIwkJdGhlIGFwcHJvcHJpYXRlIHNpZ24uIEh1Z2UgaXMgdGhlIGxhcmdlc3QgZmluaXRlIG51bWJlcgkjCiMJCWluIGV4dGVuZGVkIGZvcm1hdC4gRXhpdC4JCQkJIwojCQkJCQkJCQkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgpUV08xNjM4MDoKCWxvbmcJCTB4N0ZGQjAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKCglnbG9iYWwJCXNjb3NoCnNjb3NoOgoJZm1vdi54CQkoJWEwKSwlZnAwCQkjIExPQUQgSU5QVVQKCgltb3YubAkJKCVhMCksJWQxCgltb3YudwkJNCglYTApLCVkMQoJYW5kLmwJCSYweDdGRkZGRkZGLCVkMQoJY21wLmwJCSVkMSwmMHg0MDBDQjE2NwoJYmd0LmIJCUNPU0hCSUcKCiMtLVRISVMgSVMgVEhFIFVTVUFMIENBU0UsIHxYfCA8IDE2MzgwIExPRzIKIy0tQ09TSChYKSA9ICgxLzIpICogKCBFWFAoWCkgKyAxL0VYUChYKSApCgoJZmFicy54CQklZnAwCQkJIyB8WHwKCgltb3YubAkJJWQwLC0oJXNwKQoJY2xyLmwJCSVkMAoJZm1vdm0ueAkJJjB4MDEsLSglc3ApCQkjIHNhdmUgfFh8IHRvIHN0YWNrCglsZWEJCSglc3ApLCVhMAkJIyBwYXNzIHB0ciB0byB8WHwKCWJzcgkJc2V0b3gJCQkjIEZQMCBJUyBFWFAofFh8KQoJYWRkLmwJCSYweGMsJXNwCQkjIGVyYXNlIHxYfCBmcm9tIHN0YWNrCglmbXVsLnMJCSYweDNGMDAwMDAwLCVmcDAJIyAoMS8yKUVYUCh8WHwpCgltb3YubAkJKCVzcCkrLCVkMAoKCWZtb3YucwkJJjB4M0U4MDAwMDAsJWZwMQkjICgxLzQpCglmZGl2LngJCSVmcDAsJWZwMQkJIyAxLygyIEVYUCh8WHwpKQoKCWZtb3YubAkJJWQwLCVmcGNyCgltb3YuYgkJJkZBRERfT1AsJWQxCQkjIGxhc3QgaW5zdCBpcyBBREQKCWZhZGQueAkJJWZwMSwlZnAwCglicmEJCXRfY2F0Y2gKCkNPU0hCSUc6CgljbXAubAkJJWQxLCYweDQwMENCMkIzCgliZ3QuYgkJQ09TSEhVR0UKCglmYWJzLngJCSVmcDAKCWZzdWIuZAkJVDEoJXBjKSwlZnAwCQkjICh8WHwtMTYzODFMT0cyX0xFQUQpCglmc3ViLmQJCVQyKCVwYyksJWZwMAkJIyB8WHwgLSAxNjM4MSBMT0cyLCBBQ0NVUkFURQoKCW1vdi5sCQklZDAsLSglc3ApCgljbHIubAkJJWQwCglmbW92bS54CQkmMHgwMSwtKCVzcCkJCSMgc2F2ZSBmcDAgdG8gc3RhY2sKCWxlYQkJKCVzcCksJWEwCQkjIHBhc3MgcHRyIHRvIGZwMAoJYnNyCQlzZXRveAoJYWRkLmwJCSYweGMsJXNwCQkjIGNsZWFyIGZwMCBmcm9tIHN0YWNrCgltb3YubAkJKCVzcCkrLCVkMAoKCWZtb3YubAkJJWQwLCVmcGNyCgltb3YuYgkJJkZNVUxfT1AsJWQxCQkjIGxhc3QgaW5zdCBpcyBNVUwKCWZtdWwueAkJVFdPMTYzODAoJXBjKSwlZnAwCglicmEJCXRfY2F0Y2gKCkNPU0hIVUdFOgoJYnJhCQl0X292ZmwyCgoJZ2xvYmFsCQlzY29zaGQKIy0tQ09TSChYKSA9IDEgRk9SIERFTk9STUFMSVpFRCBYCnNjb3NoZDoKCWZtb3YucwkJJjB4M0Y4MDAwMDAsJWZwMAoKCWZtb3YubAkJJWQwLCVmcGNyCglmYWRkLnMJCSYweDAwODAwMDAwLCVmcDAKCWJyYQkJdF9waW54MgoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIHNzaW5oKCk6ICBjb21wdXRlcyB0aGUgaHlwZXJib2xpYyBzaW5lIG9mIGEgbm9ybWFsaXplZCBpbnB1dAkJIwojIHNzaW5oZCgpOiBjb21wdXRlcyB0aGUgaHlwZXJib2xpYyBzaW5lIG9mIGEgZGVub3JtYWxpemVkIGlucHV0CSMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIwojCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gaW5wdXQJCQkjCiMJZDAgPSByb3VuZCBwcmVjaXNpb24sbW9kZQkJCQkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCiMJZnAwID0gc2luaChYKQkJCQkJCQkjCiMJCQkJCQkJCQkjCiMgQUNDVVJBQ1kgYW5kIE1PTk9UT05JQ0lUWSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlUaGUgcmV0dXJuZWQgcmVzdWx0IGlzIHdpdGhpbiAzIHVscHMgaW4gNjQgc2lnbmlmaWNhbnQgYml0LAkjCiMJaS5lLiB3aXRoaW4gMC41MDAxIHVscCB0byA1MyBiaXRzIGlmIHRoZSByZXN1bHQgaXMgc3Vic2VxdWVudGx5ICMKIwlyb3VuZGVkIHRvIGRvdWJsZSBwcmVjaXNpb24uIFRoZSByZXN1bHQgaXMgcHJvdmFibHkgbW9ub3RvbmljCSMKIwlpbiBkb3VibGUgcHJlY2lzaW9uLgkJCQkJCSMKIwkJCQkJCQkJCSMKIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIwojCQkJCQkJCQkJIwojICAgICAgIFNJTkgJCQkJCQkJCSMKIyAgICAgICAxLiBJZiB8WHwgPiAxNjM4MCBsb2cyLCBnbyB0byAzLgkJCQkjCiMJCQkJCQkJCQkjCiMgICAgICAgMi4gKHxYfCA8PSAxNjM4MCBsb2cyKSBTaW5oKFgpIGlzIG9idGFpbmVkIGJ5IHRoZSBmb3JtdWxhCSMKIyAgICAgICAgICAgICAgIHkgPSB8WHwsIHNnbiA9IHNpZ24oWCksIGFuZCB6ID0gZXhwbTEoWSksCQkjCiMgICAgICAgICAgICAgICBzaW5oKFgpID0gc2duKigxLzIpKiggeiArIHovKDEreikgKS4JCQkjCiMgICAgICAgICAgRXhpdC4JCQkJCQkJIwojCQkJCQkJCQkJIwojICAgICAgIDMuIElmIHxYfCA+IDE2NDgwIGxvZzIsIGdvIHRvIDUuCQkJCSMKIwkJCQkJCQkJCSMKIyAgICAgICA0LiAoMTYzODAgbG9nMiA8IHxYfCA8PSAxNjQ4MCBsb2cyKQkJCQkjCiMgICAgICAgICAgICAgICBzaW5oKFgpID0gc2lnbihYKSAqIGV4cCh8WHwpLzIuCQkJCSMKIyAgICAgICAgICBIb3dldmVyLCBpbnZva2luZyBleHAofFh8KSBtYXkgY2F1c2UgcHJlbWF0dXJlIG92ZXJmbG93LgkjCiMgICAgICAgICAgVGh1cywgd2UgY2FsY3VsYXRlIHNpbmgoWCkgYXMgZm9sbG93czoJCQkjCiMgICAgICAgICAgICAgWSAgICAgICA6PSB8WHwJCQkJCQkjCiMgICAgICAgICAgICAgc2duICAgICA6PSBzaWduKFgpCQkJCQkjCiMgICAgICAgICAgICAgc2duRmFjdCA6PSBzZ24gKiAyKiooMTYzODApCQkJCSMKIyAgICAgICAgICAgICBZJyAgICAgIDo9IFkgLSAxNjM4MSBsb2cyCQkJCQkjCiMgICAgICAgICAgICAgc2luaChYKSA6PSBzZ25GYWN0ICogZXhwKFknKS4JCQkJIwojICAgICAgICAgIEV4aXQuCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyAgICAgICA1LiAofFh8ID4gMTY0ODAgbG9nMikgc2luaChYKSBtdXN0IG92ZXJmbG93LiBSZXR1cm4JCSMKIyAgICAgICAgICBzaWduKFgpKkh1Z2UqSHVnZSB0byBnZW5lcmF0ZSBvdmVyZmxvdyBhbmQgYW4gaW5maW5pdHkgd2l0aAkjCiMgICAgICAgICAgdGhlIGFwcHJvcHJpYXRlIHNpZ24uIEh1Z2UgaXMgdGhlIGxhcmdlc3QgZmluaXRlIG51bWJlciBpbgkjCiMgICAgICAgICAgZXh0ZW5kZWQgZm9ybWF0LiBFeGl0LgkJCQkJIwojCQkJCQkJCQkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoJZ2xvYmFsCQlzc2luaApzc2luaDoKCWZtb3YueAkJKCVhMCksJWZwMAkJIyBMT0FEIElOUFVUCgoJbW92LmwJCSglYTApLCVkMQoJbW92LncJCTQoJWEwKSwlZDEKCW1vdi5sCQklZDEsJWExCQkJIyBzYXZlIChjb21wYWN0ZWQpIG9wZXJhbmQKCWFuZC5sCQkmMHg3RkZGRkZGRiwlZDEKCWNtcC5sCQklZDEsJjB4NDAwQ0IxNjcKCWJndC5iCQlTSU5IQklHCgojLS1USElTIElTIFRIRSBVU1VBTCBDQVNFLCB8WHwgPCAxNjM4MCBMT0cyCiMtLVkgPSB8WHwsIFogPSBFWFBNMShZKSwgU0lOSChYKSA9IFNJR04oWCkqKDEvMikqKCBaICsgWi8oMStaKSApCgoJZmFicy54CQklZnAwCQkJIyBZID0gfFh8CgoJbW92bS5sCQkmMHg4MDQwLC0oJXNwKQkJIyB7YTEvZDB9CglmbW92bS54CQkmMHgwMSwtKCVzcCkJCSMgc2F2ZSBZIG9uIHN0YWNrCglsZWEJCSglc3ApLCVhMAkJIyBwYXNzIHB0ciB0byBZCgljbHIubAkJJWQwCglic3IJCXNldG94bTEJCQkjIEZQMCBJUyBaID0gRVhQTTEoWSkKCWFkZC5sCQkmMHhjLCVzcAkJIyBjbGVhciBZIGZyb20gc3RhY2sKCWZtb3YubAkJJjAsJWZwY3IKCW1vdm0ubAkJKCVzcCkrLCYweDAyMDEJCSMge2ExL2QwfQoKCWZtb3YueAkJJWZwMCwlZnAxCglmYWRkLnMJCSYweDNGODAwMDAwLCVmcDEJIyAxK1oKCWZtb3YueAkJJWZwMCwtKCVzcCkKCWZkaXYueAkJJWZwMSwlZnAwCQkjIFovKDErWikKCW1vdi5sCQklYTEsJWQxCglhbmQubAkJJjB4ODAwMDAwMDAsJWQxCglvci5sCQkmMHgzRjAwMDAwMCwlZDEKCWZhZGQueAkJKCVzcCkrLCVmcDAKCW1vdi5sCQklZDEsLSglc3ApCgoJZm1vdi5sCQklZDAsJWZwY3IKCW1vdi5iCQkmRk1VTF9PUCwlZDEJCSMgbGFzdCBpbnN0IGlzIE1VTAoJZm11bC5zCQkoJXNwKSssJWZwMAkJIyBsYXN0IGZwIGluc3QgLSBwb3NzaWJsZSBleGNlcHRpb25zIHNldAoJYnJhCQl0X2NhdGNoCgpTSU5IQklHOgoJY21wLmwJCSVkMSwmMHg0MDBDQjJCMwoJYmd0CQl0X292ZmwKCWZhYnMueAkJJWZwMAoJZnN1Yi5kCQlUMSglcGMpLCVmcDAJCSMgKHxYfC0xNjM4MUxPRzJfTEVBRCkKCW1vdi5sCQkmMCwtKCVzcCkKCW1vdi5sCQkmMHg4MDAwMDAwMCwtKCVzcCkKCW1vdi5sCQklYTEsJWQxCglhbmQubAkJJjB4ODAwMDAwMDAsJWQxCglvci5sCQkmMHg3RkZCMDAwMCwlZDEKCW1vdi5sCQklZDEsLSglc3ApCQkjIEVYVEVOREVEIEZNVAoJZnN1Yi5kCQlUMiglcGMpLCVmcDAJCSMgfFh8IC0gMTYzODEgTE9HMiwgQUNDVVJBVEUKCgltb3YubAkJJWQwLC0oJXNwKQoJY2xyLmwJCSVkMAoJZm1vdm0ueAkJJjB4MDEsLSglc3ApCQkjIHNhdmUgZnAwIG9uIHN0YWNrCglsZWEJCSglc3ApLCVhMAkJIyBwYXNzIHB0ciB0byBmcDAKCWJzcgkJc2V0b3gKCWFkZC5sCQkmMHhjLCVzcAkJIyBjbGVhciBmcDAgZnJvbSBzdGFjawoKCW1vdi5sCQkoJXNwKSssJWQwCglmbW92LmwJCSVkMCwlZnBjcgoJbW92LmIJCSZGTVVMX09QLCVkMQkJIyBsYXN0IGluc3QgaXMgTVVMCglmbXVsLngJCSglc3ApKywlZnAwCQkjIHBvc3NpYmxlIGV4Y2VwdGlvbgoJYnJhCQl0X2NhdGNoCgoJZ2xvYmFsCQlzc2luaGQKIy0tU0lOSChYKSA9IFggRk9SIERFTk9STUFMSVpFRCBYCnNzaW5oZDoKCWJyYQkJdF9leHRkbnJtCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgc3RhbmgoKTogIGNvbXB1dGVzIHRoZSBoeXBlcmJvbGljIHRhbmdlbnQgb2YgYSBub3JtYWxpemVkIGlucHV0CSMKIyBzdGFuaGQoKTogY29tcHV0ZXMgdGhlIGh5cGVyYm9saWMgdGFuZ2VudCBvZiBhIGRlbm9ybWFsaXplZCBpbnB1dAkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIGlucHV0CQkJIwojCWQwID0gcm91bmQgcHJlY2lzaW9uLG1vZGUJCQkJCSMKIwkJCQkJCQkJCSMKIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWZwMCA9IHRhbmgoWCkJCQkJCQkJIwojCQkJCQkJCQkJIwojIEFDQ1VSQUNZIGFuZCBNT05PVE9OSUNJVFkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJVGhlIHJldHVybmVkIHJlc3VsdCBpcyB3aXRoaW4gMyB1bHBzIGluIDY0IHNpZ25pZmljYW50IGJpdCwJIwojCWkuZS4gd2l0aGluIDAuNTAwMSB1bHAgdG8gNTMgYml0cyBpZiB0aGUgcmVzdWx0IGlzIHN1YnNlcXVlbnRseSAjCiMJcm91bmRlZCB0byBkb3VibGUgcHJlY2lzaW9uLiBUaGUgcmVzdWx0IGlzIHByb3ZhYmx5IG1vbm90b25pYwkjCiMJaW4gZG91YmxlIHByZWNpc2lvbi4JCQkJCQkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwkJCQkJCQkJCSMKIwlUQU5ICQkJCQkJCQkjCiMJMS4gSWYgfFh8ID49ICg1LzIpIGxvZzIgb3IgfFh8IDw9IDIqKigtNDApLCBnbyB0byAzLgkJIwojCQkJCQkJCQkJIwojCTIuICgyKiooLTQwKSA8IHxYfCA8ICg1LzIpIGxvZzIpIENhbGN1bGF0ZSB0YW5oKFgpIGJ5CQkjCiMJCXNnbiA6PSBzaWduKFgpLCB5IDo9IDJ8WHwsIHogOj0gZXhwbTEoWSksIGFuZAkJIwojCQl0YW5oKFgpID0gc2duKiggei8oMit6KSApLgkJCQkjCiMJCUV4aXQuCQkJCQkJCSMKIwkJCQkJCQkJCSMKIwkzLiAofFh8IDw9IDIqKigtNDApIG9yIHxYfCA+PSAoNS8yKSBsb2cyKS4gSWYgfFh8IDwgMSwJCSMKIwkJZ28gdG8gNy4JCQkJCQkjCiMJCQkJCQkJCQkjCiMJNC4gKHxYfCA+PSAoNS8yKSBsb2cyKSBJZiB8WHwgPj0gNTAgbG9nMiwgZ28gdG8gNi4JCSMKIwkJCQkJCQkJCSMKIwk1LiAoKDUvMikgbG9nMiA8PSB8WHwgPCA1MCBsb2cyKSBDYWxjdWxhdGUgdGFuaChYKSBieQkJIwojCQlzZ24gOj0gc2lnbihYKSwgeSA6PSAyfFh8LCB6IDo9IGV4cChZKSwJCQkjCiMJCXRhbmgoWCkgPSBzZ24gLSBbIHNnbioyLygxK3opIF0uCQkJIwojCQlFeGl0LgkJCQkJCQkjCiMJCQkJCQkJCQkjCiMJNi4gKHxYfCA+PSA1MCBsb2cyKSBUYW5oKFgpID0gKy0xIChyb3VuZCB0byBuZWFyZXN0KS4gVGh1cywgd2UJIwojCQljYWxjdWxhdGUgVGFuaChYKSBieQkJCQkJIwojCQlzZ24gOj0gc2lnbihYKSwgVGlueSA6PSAyKiooLTEyNiksCQkJIwojCQl0YW5oKFgpIDo9IHNnbiAtIHNnbipUaW55LgkJCQkjCiMJCUV4aXQuCQkJCQkJCSMKIwkJCQkJCQkJCSMKIwk3LiAofFh8IDwgMioqKC00MCkpLiBUYW5oKFgpID0gWC4JRXhpdC4JCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCglzZXQJCVgsRlBfU0NSMAoJc2V0CQlYRlJBQyxYKzQKCglzZXQJCVNHTixMX1NDUjMKCglzZXQJCVYsRlBfU0NSMAoKCWdsb2JhbAkJc3RhbmgKc3Rhbmg6CglmbW92LngJCSglYTApLCVmcDAJCSMgTE9BRCBJTlBVVAoKCWZtb3YueAkJJWZwMCxYKCVhNikKCW1vdi5sCQkoJWEwKSwlZDEKCW1vdi53CQk0KCVhMCksJWQxCgltb3YubAkJJWQxLFgoJWE2KQoJYW5kLmwJCSYweDdGRkZGRkZGLCVkMQoJY21wLmwJCSVkMSwgJjB4M2ZkNzgwMDAJIyBpcyB8WHwgPCAyXigtNDApPwoJYmx0LncJCVRBTkhCT1JTCQkjIHllcwoJY21wLmwJCSVkMSwgJjB4M2ZmZmRkY2UJIyBpcyB8WHwgPiAoNS8yKUxPRzI/CgliZ3QudwkJVEFOSEJPUlMJCSMgeWVzCgojLS1USElTIElTIFRIRSBVU1VBTCBDQVNFCiMtLVkgPSAyfFh8LCBaID0gRVhQTTEoWSksIFRBTkgoWCkgPSBTSUdOKFgpICogWiAvIChaKzIpLgoKCW1vdi5sCQlYKCVhNiksJWQxCgltb3YubAkJJWQxLFNHTiglYTYpCglhbmQubAkJJjB4N0ZGRjAwMDAsJWQxCglhZGQubAkJJjB4MDAwMTAwMDAsJWQxCQkjIEVYUE9ORU5UIE9GIDJ8WHwKCW1vdi5sCQklZDEsWCglYTYpCglhbmQubAkJJjB4ODAwMDAwMDAsU0dOKCVhNikKCWZtb3YueAkJWCglYTYpLCVmcDAJCSMgRlAwIElTIFkgPSAyfFh8CgoJbW92LmwJCSVkMCwtKCVzcCkKCWNsci5sCQklZDAKCWZtb3ZtLngJCSYweDEsLSglc3ApCQkjIHNhdmUgWSBvbiBzdGFjawoJbGVhCQkoJXNwKSwlYTAJCSMgcGFzcyBwdHIgdG8gWQoJYnNyCQlzZXRveG0xCQkJIyBGUDAgSVMgWiA9IEVYUE0xKFkpCglhZGQubAkJJjB4Yywlc3AJCSMgY2xlYXIgWSBmcm9tIHN0YWNrCgltb3YubAkJKCVzcCkrLCVkMAoKCWZtb3YueAkJJWZwMCwlZnAxCglmYWRkLnMJCSYweDQwMDAwMDAwLCVmcDEJIyBaKzIKCW1vdi5sCQlTR04oJWE2KSwlZDEKCWZtb3YueAkJJWZwMSxWKCVhNikKCWVvci5sCQklZDEsViglYTYpCgoJZm1vdi5sCQklZDAsJWZwY3IJCSMgcmVzdG9yZSB1c2VycyByb3VuZCBwcmVjLG1vZGUKCWZkaXYueAkJViglYTYpLCVmcDAKCWJyYQkJdF9pbngyCgpUQU5IQk9SUzoKCWNtcC5sCQklZDEsJjB4M0ZGRjgwMDAKCWJsdC53CQlUQU5IU00KCgljbXAubAkJJWQxLCYweDQwMDQ4QUExCgliZ3QudwkJVEFOSEhVR0UKCiMtLSAoNS8yKSBMT0cyIDwgfFh8IDwgNTAgTE9HMiwKIy0tVEFOSChYKSA9IDEgLSAoMi9bRVhQKDJYKSsxXSkuIExFVCBZID0gMnxYfCwgU0dOID0gU0lHTihYKSwKIy0tVEFOSChYKSA9IFNHTiAtCVNHTioyL1tFWFAoWSkrMV0uCgoJbW92LmwJCVgoJWE2KSwlZDEKCW1vdi5sCQklZDEsU0dOKCVhNikKCWFuZC5sCQkmMHg3RkZGMDAwMCwlZDEKCWFkZC5sCQkmMHgwMDAxMDAwMCwlZDEJCSMgRVhQTyBPRiAyfFh8Cgltb3YubAkJJWQxLFgoJWE2KQkJIyBZID0gMnxYfAoJYW5kLmwJCSYweDgwMDAwMDAwLFNHTiglYTYpCgltb3YubAkJU0dOKCVhNiksJWQxCglmbW92LngJCVgoJWE2KSwlZnAwCQkjIFkgPSAyfFh8CgoJbW92LmwJCSVkMCwtKCVzcCkKCWNsci5sCQklZDAKCWZtb3ZtLngJCSYweDAxLC0oJXNwKQkJIyBzYXZlIFkgb24gc3RhY2sKCWxlYQkJKCVzcCksJWEwCQkjIHBhc3MgcHRyIHRvIFkKCWJzcgkJc2V0b3gJCQkjIEZQMCBJUyBFWFAoWSkKCWFkZC5sCQkmMHhjLCVzcAkJIyBjbGVhciBZIGZyb20gc3RhY2sKCW1vdi5sCQkoJXNwKSssJWQwCgltb3YubAkJU0dOKCVhNiksJWQxCglmYWRkLnMJCSYweDNGODAwMDAwLCVmcDAJIyBFWFAoWSkrMQoKCWVvci5sCQkmMHhDMDAwMDAwMCwlZDEJCSMgLVNJR04oWCkqMgoJZm1vdi5zCQklZDEsJWZwMQkJIyAtU0lHTihYKSoyIElOIFNHTCBGTVQKCWZkaXYueAkJJWZwMCwlZnAxCQkjIC1TSUdOKFgpMiAvIFtFWFAoWSkrMSBdCgoJbW92LmwJCVNHTiglYTYpLCVkMQoJb3IubAkJJjB4M0Y4MDAwMDAsJWQxCQkjIFNHTgoJZm1vdi5zCQklZDEsJWZwMAkJIyBTR04gSU4gU0dMIEZNVAoKCWZtb3YubAkJJWQwLCVmcGNyCQkjIHJlc3RvcmUgdXNlcnMgcm91bmQgcHJlYyxtb2RlCgltb3YuYgkJJkZBRERfT1AsJWQxCQkjIGxhc3QgaW5zdCBpcyBBREQKCWZhZGQueAkJJWZwMSwlZnAwCglicmEJCXRfaW54MgoKVEFOSFNNOgoJZm1vdi5sCQklZDAsJWZwY3IJCSMgcmVzdG9yZSB1c2VycyByb3VuZCBwcmVjLG1vZGUKCW1vdi5iCQkmRk1PVl9PUCwlZDEJCSMgbGFzdCBpbnN0IGlzIE1PVkUKCWZtb3YueAkJWCglYTYpLCVmcDAJCSMgbGFzdCBpbnN0IC0gcG9zc2libGUgZXhjZXB0aW9uIHNldAoJYnJhCQl0X2NhdGNoCgojLS0tUkVUVVJOIFNHTihYKSAtIFNHTihYKUVQUwpUQU5ISFVHRToKCW1vdi5sCQlYKCVhNiksJWQxCglhbmQubAkJJjB4ODAwMDAwMDAsJWQxCglvci5sCQkmMHgzRjgwMDAwMCwlZDEKCWZtb3YucwkJJWQxLCVmcDAKCWFuZC5sCQkmMHg4MDAwMDAwMCwlZDEKCWVvci5sCQkmMHg4MDgwMDAwMCwlZDEJCSMgLVNJR04oWCkqRVBTCgoJZm1vdi5sCQklZDAsJWZwY3IJCSMgcmVzdG9yZSB1c2VycyByb3VuZCBwcmVjLG1vZGUKCWZhZGQucwkJJWQxLCVmcDAKCWJyYQkJdF9pbngyCgoJZ2xvYmFsCQlzdGFuaGQKIy0tVEFOSChYKSA9IFggRk9SIERFTk9STUFMSVpFRCBYCnN0YW5oZDoKCWJyYQkJdF9leHRkbnJtCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgc2xvZ24oKTogICAgY29tcHV0ZXMgdGhlIG5hdHVyYWwgbG9nYXJpdGhtIG9mIGEgbm9ybWFsaXplZCBpbnB1dAkjCiMgc2xvZ25kKCk6ICAgY29tcHV0ZXMgdGhlIG5hdHVyYWwgbG9nYXJpdGhtIG9mIGEgZGVub3JtYWxpemVkIGlucHV0CSMKIyBzbG9nbnAxKCk6ICBjb21wdXRlcyB0aGUgbG9nKDErWCkgb2YgYSBub3JtYWxpemVkIGlucHV0CQkjCiMgc2xvZ25wMWQoKTogY29tcHV0ZXMgdGhlIGxvZygxK1gpIG9mIGEgZGVub3JtYWxpemVkIGlucHV0CQkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIGlucHV0CQkJIwojCWQwID0gcm91bmQgcHJlY2lzaW9uLG1vZGUJCQkJCSMKIwkJCQkJCQkJCSMKIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWZwMCA9IGxvZyhYKSBvciBsb2coMStYKQkJCQkJIwojCQkJCQkJCQkJIwojIEFDQ1VSQUNZIGFuZCBNT05PVE9OSUNJVFkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJVGhlIHJldHVybmVkIHJlc3VsdCBpcyB3aXRoaW4gMiB1bHBzIGluIDY0IHNpZ25pZmljYW50IGJpdCwJIwojCWkuZS4gd2l0aGluIDAuNTAwMSB1bHAgdG8gNTMgYml0cyBpZiB0aGUgcmVzdWx0IGlzIHN1YnNlcXVlbnRseQkjCiMJcm91bmRlZCB0byBkb3VibGUgcHJlY2lzaW9uLiBUaGUgcmVzdWx0IGlzIHByb3ZhYmx5IG1vbm90b25pYwkjCiMJaW4gZG91YmxlIHByZWNpc2lvbi4JCQkJCQkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlMT0dOOgkJCQkJCQkJIwojCVN0ZXAgMS4gSWYgfFgtMXwgPCAxLzE2LCBhcHByb3hpbWF0ZSBsb2coWCkgYnkgYW4gb2RkCQkjCiMJCXBvbHlub21pYWwgaW4gdSwgd2hlcmUgdSA9IDIoWC0xKS8oWCsxKS4gT3RoZXJ3aXNlLAkjCiMJCW1vdmUgb24gdG8gU3RlcCAyLgkJCQkJIwojCQkJCQkJCQkJIwojCVN0ZXAgMi4gWCA9IDIqKmsgKiBZIHdoZXJlIDEgPD0gWSA8IDIuIERlZmluZSBGIHRvIGJlIHRoZSBmaXJzdAkjCiMJCXNldmVuIHNpZ25pZmljYW50IGJpdHMgb2YgWSBwbHVzIDIqKigtNyksIGkuZS4JCSMKIwkJRiA9IDEueHh4eHh4MSBpbiBiYXNlIDIgd2hlcmUgdGhlIHNpeCAieCIgbWF0Y2ggdGhvc2UJIwojCQlvZiBZLiBOb3RlIHRoYXQgfFktRnwgPD0gMioqKC03KS4JCQkjCiMJCQkJCQkJCQkjCiMJU3RlcCAzLiBEZWZpbmUgdSA9IChZLUYpL0YuIEFwcHJveGltYXRlIGxvZygxK3UpIGJ5IGEJCSMKIwkJcG9seW5vbWlhbCBpbiB1LCBsb2coMSt1KSA9IHBvbHkuCQkJIwojCQkJCQkJCQkJIwojCVN0ZXAgNC4gUmVjb25zdHJ1Y3QJCQkJCQkjCiMJCWxvZyhYKSA9IGxvZyggMioqayAqIFkgKSA9IGsqbG9nKDIpICsgbG9nKEYpICsgbG9nKDErdSkJIwojCQlieSBrKmxvZygyKSArIChsb2coRikgKyBwb2x5KS4gVGhlIHZhbHVlcyBvZiBsb2coRikgYXJlCSMKIwkJY2FsY3VsYXRlZCBiZWZvcmVoYW5kIGFuZCBzdG9yZWQgaW4gdGhlIHByb2dyYW0uCSMKIwkJCQkJCQkJCSMKIwlsb2ducDE6CQkJCQkJCQkjCiMJU3RlcCAxOiBJZiB8WHwgPCAxLzE2LCBhcHByb3hpbWF0ZSBsb2coMStYKSBieSBhbiBvZGQJCSMKIwkJcG9seW5vbWlhbCBpbiB1IHdoZXJlIHUgPSAyWC8oMitYKS4gT3RoZXJ3aXNlLCBtb3ZlIG9uCSMKIwkJdG8gU3RlcCAyLgkJCQkJCSMKIwkJCQkJCQkJCSMKIwlTdGVwIDI6IExldCAxK1ggPSAyKiprICogWSwgd2hlcmUgMSA8PSBZIDwgMi4gRGVmaW5lIEYgYXMgZG9uZQkjCiMJCWluIFN0ZXAgMiBvZiB0aGUgYWxnb3JpdGhtIGZvciBMT0dOIGFuZCBjb21wdXRlCQkjCiMJCWxvZygxK1gpIGFzIGsqbG9nKDIpICsgbG9nKEYpICsgcG9seSB3aGVyZSBwb2x5CQkjCiMJCWFwcHJveGltYXRlcyBsb2coMSt1KSwgdSA9IChZLUYpL0YuCQkJIwojCQkJCQkJCQkJIwojCUltcGxlbWVudGF0aW9uIE5vdGVzOgkJCQkJCSMKIwlOb3RlIDEuIFRoZXJlIGFyZSA2NCBkaWZmZXJlbnQgcG9zc2libGUgdmFsdWVzIGZvciBGLCB0aHVzIDY0CSMKIwkJbG9nKEYpJ3MgbmVlZCB0byBiZSB0YWJ1bGF0ZWQuIE1vcmVvdmVyLCB0aGUgdmFsdWVzIG9mCSMKIwkJMS9GIGFyZSBhbHNvIHRhYnVsYXRlZCBzbyB0aGF0IHRoZSBkaXZpc2lvbiBpbiAoWS1GKS9GCSMKIwkJY2FuIGJlIHBlcmZvcm1lZCBieSBhIG11bHRpcGxpY2F0aW9uLgkJCSMKIwkJCQkJCQkJCSMKIwlOb3RlIDIuIEluIFN0ZXAgMiBvZiBsb2ducDEsIGluIG9yZGVyIHRvIHByZXNlcnZlZCBhY2N1cmFjeSwJIwojCQl0aGUgdmFsdWUgWS1GIGhhcyB0byBiZSBjYWxjdWxhdGVkIGNhcmVmdWxseSB3aGVuCSMKIwkJMS8yIDw9IFggPCAzLzIuCQkJCQkJIwojCQkJCQkJCQkJIwojCU5vdGUgMy4gVG8gZnVsbHkgZXhwbG9pdCB0aGUgcGlwZWxpbmUsIHBvbHlub21pYWxzIGFyZSB1c3VhbGx5CSMKIwkJc2VwYXJhdGVkIGludG8gdHdvIHBhcnRzIGV2YWx1YXRlZCBpbmRlcGVuZGVudGx5IGJlZm9yZQkjCiMJCWJlaW5nIGFkZGVkIHVwLgkJCQkJCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpMT0dPRjI6Cglsb25nCQkweDNGRkUwMDAwLDB4QjE3MjE3RjcsMHhEMUNGNzlBQywweDAwMDAwMDAwCgpvbmU6Cglsb25nCQkweDNGODAwMDAwCnplcm86Cglsb25nCQkweDAwMDAwMDAwCmluZnR5OgoJbG9uZwkJMHg3RjgwMDAwMApuZWdvbmU6Cglsb25nCQkweEJGODAwMDAwCgpMT0dBNjoKCWxvbmcJCTB4M0ZDMjQ5OUEsMHhCNUU0MDQwQgpMT0dBNToKCWxvbmcJCTB4QkZDNTU1QjUsMHg4NDhDQjdEQgoKTE9HQTQ6Cglsb25nCQkweDNGQzk5OTk5LDB4OTg3RDg3MzAKTE9HQTM6Cglsb25nCQkweEJGQ0ZGRkZGLDB4RkY2RjdFOTcKCkxPR0EyOgoJbG9uZwkJMHgzRkQ1NTU1NSwweDU1NTU1NUE0CkxPR0ExOgoJbG9uZwkJMHhCRkUwMDAwMCwweDAwMDAwMDA4CgpMT0dCNToKCWxvbmcJCTB4M0YxNzU0OTYsMHhBREQ3REFENgpMT0dCNDoKCWxvbmcJCTB4M0YzQzcxQzIsMHhGRTgwQzdFMAoKTE9HQjM6Cglsb25nCQkweDNGNjI0OTI0LDB4OTI4QkNDRkYKTE9HQjI6Cglsb25nCQkweDNGODk5OTk5LDB4OTk5OTk1RUMKCkxPR0IxOgoJbG9uZwkJMHgzRkI1NTU1NSwweDU1NTU1NTU1ClRXTzoKCWxvbmcJCTB4NDAwMDAwMDAsMHgwMDAwMDAwMAoKTFRIT0xEOgoJbG9uZwkJMHgzZjk5MDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAoKTE9HVEJMOgoJbG9uZwkJMHgzRkZFMDAwMCwweEZFMDNGODBGLDB4RTAzRjgwRkUsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkY3MDAwMCwweEZGMDE1MzU4LDB4ODMzQzQ3RTIsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweEZBMjMyQ0YyLDB4NTIxMzhBQzAsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkY5MDAwMCwweEJEQzhEODNFLDB4QUQ4OEQ1NDksMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweEY2NjAzRDk4LDB4MEY2NjAzREEsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZBMDAwMCwweDlDRjQzRENGLDB4RjVFQUZENDgsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweEYyQjlENjQ4LDB4MEYyQjlENjUsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZBMDAwMCwweERBMTZFQjg4LDB4Q0I4REY2MTQsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweEVGMkVCNzFGLDB4QzQzNDUyMzgsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZCMDAwMCwweDhCMjlCNzc1LDB4MUJENzA3NDMsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweEVCQkRCMkE1LDB4QzE2MTlDOEMsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZCMDAwMCwweEE4RDgzOUY4LDB4MzBDMUZCNDksMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweEU4NjVBQzdCLDB4NzYwM0ExOTcsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZCMDAwMCwweEM2MUEyRUIxLDB4OENEOTA3QUQsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweEU1MjU5ODJBLDB4RjcwQzg4MEUsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZCMDAwMCwweEUyRjJBNDdBLDB4REUzQTE4QUYsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweEUxRkM3ODBFLDB4MUZDNzgwRTIsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZCMDAwMCwweEZGNjQ4OThFLDB4REY1NUQ1NTEsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweERFRTk1QzRDLDB4QTAzN0JBNTcsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZDMDAwMCwweDhEQjk1NkE5LDB4N0IzRDAxNDgsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweERCRUI2MUVFLDB4RDE5QzU5NTgsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZDMDAwMCwweDlCOEZFMTAwLDB4RjQ3QkExREUsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweEQ5MDFCMjAzLDB4NjQwNkM4MEUsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZDMDAwMCwweEE5MzcyRjFELDB4MERBMUJEMTcsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweEQ2MkI4MEQ2LDB4MkI4MEQ2MkMsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZDMDAwMCwweEI2QjA3RjM4LDB4Q0U5MEU0NkIsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweEQzNjgwRDM2LDB4ODBEMzY4MEQsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZDMDAwMCwweEMzRkQwMzI5LDB4MDY0ODg0ODEsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweEQwQjY5RkNCLDB4RDI1ODBEMEIsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZDMDAwMCwweEQxMURFMEZGLDB4MTVBQjE4Q0EsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweENFMTY4QTc3LDB4MjUwODBDRTEsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZDMDAwMCwweERFMTQzM0ExLDB4NkM2NkIxNTAsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweENCODcyN0MwLDB4NjVDMzkzRTAsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZDMDAwMCwweEVBRTEwQjVBLDB4N0REQzhBREQsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweEM5MDdEQTRFLDB4ODcxMTQ2QUQsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZDMDAwMCwweEY3ODU2RTVFLDB4RTJDOUIyOTEsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweEM2OTgwQzY5LDB4ODBDNjk4MEMsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZEMDAwMCwweDgyMDEyQ0E1LDB4QTY4MjA2RDcsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweEM0MzcyRjg1LDB4NUQ4MjRDQTYsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZEMDAwMCwweDg4MkM1RkNELDB4NzI1NkE4QzUsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweEMxRTRCQkQ1LDB4OTVGNkU5NDcsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZEMDAwMCwweDhFNDRDNjBCLDB4NENDRkQ3REUsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweEJGQTAyRkU4LDB4MEJGQTAyRkYsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZEMDAwMCwweDk0NEFEMDlFLDB4RjQzNTFBRjYsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweEJENjkxMDQ3LDB4MDc2NjFBQTMsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZEMDAwMCwweDlBM0VFQ0Q0LDB4QzNFQUE2QjIsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweEJCM0VFNzIxLDB4QTU0RDg4MEMsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZEMDAwMCwweEEwMjE4NDM0LDB4MzUzRjFERTgsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweEI5MjE0M0ZBLDB4MzZGNUUwMkUsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZEMDAwMCwweEE1RjJGQ0FCLDB4QkJDNTA2REEsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweEI3MEZCQjVBLDB4MTlCRTM2NTksMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZEMDAwMCwweEFCQjNCOEJBLDB4MkFEMzYyQTUsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweEI1MDlFNjhBLDB4OUI5NDgyMUYsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZEMDAwMCwweEIxNjQxNzk1LDB4Q0UzQ0E5N0IsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweEIzMEY2MzUyLDB4ODkxN0M4MEIsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZEMDAwMCwweEI3MDQ3NTUxLDB4NUQwRjFDNjEsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweEIxMUZEM0I4LDB4MEIxMUZEM0MsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZEMDAwMCwweEJDOTUyQUZFLDB4RUEzRDEzRTEsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweEFGM0FEREM2LDB4ODBBRjNBREUsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZEMDAwMCwweEMyMTY4RUQwLDB4RjQ1OEJBNEEsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweEFENjAyQjU4LDB4MEFENjAyQjYsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZEMDAwMCwweEM3ODhGNDM5LDB4QjMxNjNCRjEsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweEFCOEY2OUUyLDB4ODM1OUNEMTEsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZEMDAwMCwweENDRUNBQzA4LDB4QkYwNDU2NUQsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweEE5Qzg0QTQ3LDB4QTA3RjU2MzgsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZEMDAwMCwweEQyNDIwNDg3LDB4MkREODUxNjAsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweEE4MEE4MEE4LDB4MEE4MEE4MEIsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZEMDAwMCwweEQ3ODk0OTkyLDB4M0JDMzU4OEEsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweEE2NTVDNDM5LDB4MkQ3QjczQTgsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZEMDAwMCwweERDQzJDNEI0LDB4OTg4N0RBQ0MsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweEE0QTlDRjFELDB4OTY4MzM3NTEsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZEMDAwMCwweEUxRUVCRDNFLDB4NkQ2QTZCOUUsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweEEzMDY1RTNGLDB4QUU3Q0QwRTAsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZEMDAwMCwweEU3MEQ3ODVDLDB4MkY5RjVCREMsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweEExNkIzMTJFLDB4QThGQzM3N0QsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZEMDAwMCwweEVDMUYzOTJDLDB4NTE3OUYyODMsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweDlGRDgwOUZELDB4ODA5RkQ4MEEsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZEMDAwMCwweEYxMjQ0MEQzLDB4RTM2MTMwRTYsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweDlFNENBRDIzLDB4REQ1RjNBMjAsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZEMDAwMCwweEY2MUNDRTkyLDB4MzQ2NjAwQkIsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweDlDQzhFMTYwLDB4QzNGQjE5QjksMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZEMDAwMCwweEZCMDkxRkQzLDB4ODE0NTYzMEEsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweDlCNEM2RjlFLDB4RjAzQTNDQUEsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZEMDAwMCwweEZGRTk3MDQyLDB4QkZBNEMyQUQsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweDk5RDcyMkRBLDB4QkRFNThGMDYsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweDgyNUVGQ0VELDB4NDkzNjkzMzAsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweDk4NjhDODA5LDB4ODY4QzgwOTgsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweDg0QzM3QTdBLDB4QjlBOTA1QzksMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweDk3MDEyRTAyLDB4NUMwNEI4MDksMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweDg3MjI0QzJFLDB4OEU2NDVGQjcsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweDk1QTAyNTY4LDB4MDk1QTAyNTcsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweDg5N0I4Q0FDLDB4OUY3REUyOTgsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweDk0NDU4MDk0LDB4NDU4MDk0NDYsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweDhCQ0Y1NURFLDB4QzRDRDA1RkUsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweDkyRjExMzg0LDB4MDQ5Nzg4OUMsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweDhFMURDMEZCLDB4ODlFMTI1RTUsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweDkxQTJCM0M0LDB4RDVFNkY4MDksMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweDkwNjZFNjhDLDB4OTU1QjZDOUIsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweDkwNUEzODYzLDB4M0UwNkM0M0IsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweDkyQUFERTc0LDB4QzdCRTU5RTAsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweDhGMTc3OUQ5LDB4RkRDM0EyMTksMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweDk0RTlCRkY2LDB4MTU4NDU2NDMsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweDhEREE1MjAyLDB4Mzc2OTQ4MDksMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweDk3MjNBMUI3LDB4MjAxMzQyMDMsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweDhDQTI5QzA0LDB4NjUxNEUwMjMsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweDk5NTg5OUM4LDB4OTBFQjg5OTAsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweDhCNzAzNDRBLDB4MTM5QkM3NUEsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweDlCODhCREFBLDB4M0EzREFFMkYsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweDhBNDJGODcwLDB4NTY2OURCNDYsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweDlEQjQyMjRGLDB4RkZFMTE1N0MsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweDg5MUFDNzNBLDB4RTk4MTlCNTAsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweDlGREFEQzI2LDB4OEI3QTEyREEsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweDg3Rjc4MDg3LDB4Rjc4MDg3RjgsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweEExRkNGRjE3LDB4Q0U3MzNCRDQsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweDg2RDkwNTQ0LDB4N0EzNEFDQzYsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweEE0MUE5RThGLDB4NTQ0NkZCOUYsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweDg1QkYzNzYxLDB4MkNFRTNDOUIsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweEE2MzNDRDdFLDB4Njc3MUNEOEIsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweDg0QTlGOUM4LDB4MDg0QTlGOUQsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweEE4NDg5RTYwLDB4MEI0MzVBNUUsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweDgzOTkzMDUyLDB4M0ZCRTMzNjgsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweEFBNTkyMzNDLDB4Q0NBNEJENDksMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweDgyOENCRkJFLDB4QjlBMDIwQTMsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweEFDNjU2REFFLDB4NkJDQzQ5ODUsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweDgxODQ4REE4LDB4RkFGMEQyNzcsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweEFFNkQ4RUUzLDB4NjBCQjI0NjgsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweDgwODA4MDgwLDB4ODA4MDgwODEsMHgwMDAwMDAwMAoJbG9uZwkJMHgzRkZFMDAwMCwweEIwNzE5N0EyLDB4M0M0NkM2NTQsMHgwMDAwMDAwMAoKCXNldAkJQURKSyxMX1NDUjEKCglzZXQJCVgsRlBfU0NSMAoJc2V0CQlYRENBUkUsWCsyCglzZXQJCVhGUkFDLFgrNAoKCXNldAkJRixGUF9TQ1IxCglzZXQJCUZGUkFDLEYrNAoKCXNldAkJS0xPRzIsRlBfU0NSMAoKCXNldAkJU0FWRVUsRlBfU0NSMAoKCWdsb2JhbAkJc2xvZ24KIy0tRU5UUlkgUE9JTlQgRk9SIExPRyhYKSBGT1IgWCBGSU5JVEUsIE5PTi1aRVJPLCBOT1QgTkFOJ1MKc2xvZ246CglmbW92LngJCSglYTApLCVmcDAJCSMgTE9BRCBJTlBVVAoJbW92LmwJCSYweDAwMDAwMDAwLEFESksoJWE2KQoKTE9HQkdOOgojLS1GUENSIFNBVkVEIEFORCBDTEVBUkVELCBJTlBVVCBJUyAyXihBREpLKSpGUDAsIEZQMCBDT05UQUlOUwojLS1BIEZJTklURSwgTk9OLVpFUk8sIE5PUk1BTElaRUQgTlVNQkVSLgoKCW1vdi5sCQkoJWEwKSwlZDEKCW1vdi53CQk0KCVhMCksJWQxCgoJbW92LmwJCSglYTApLFgoJWE2KQoJbW92LmwJCTQoJWEwKSxYKzQoJWE2KQoJbW92LmwJCTgoJWEwKSxYKzgoJWE2KQoKCWNtcC5sCQklZDEsJjAJCQkjIENIRUNLIElGIFggSVMgTkVHQVRJVkUKCWJsdC53CQlMT0dORUcJCQkjIExPRyBPRiBORUdBVElWRSBBUkdVTUVOVCBJUyBJTlZBTElECiMgWCBJUyBQT1NJVElWRSwgQ0hFQ0sgSUYgWCBJUyBORUFSIDEKCWNtcC5sCQklZDEsJjB4M2ZmZWYwN2QJCSMgSVMgWCA8IDE1LzE2PwoJYmx0LmIJCUxPR01BSU4JCQkjIFlFUwoJY21wLmwJCSVkMSwmMHgzZmZmODg0MQkJIyBJUyBYID4gMTcvMTY/CglibGUudwkJTE9HTkVBUjEJCSMgTk8KCkxPR01BSU46CiMtLVRISVMgU0hPVUxEIEJFIFRIRSBVU1VBTCBDQVNFLCBYIE5PVCBWRVJZIENMT1NFIFRPIDEKCiMtLVggPSAyXihLKSAqIFksIDEgPD0gWSA8IDIuIFRIVVMsIFkgPSAxLlhYWFhYWFhYLi4uLlhYIElOIEJJTkFSWS4KIy0tV0UgREVGSU5FIEYgPSAxLlhYWFhYWDEsIEkuRS4gRklSU1QgNyBCSVRTIE9GIFkgQU5EIEFUVEFDSCBBIDEuCiMtLVRIRSBJREVBIElTIFRIQVQgTE9HKFgpID0gSypMT0cyICsgTE9HKFkpCiMtLQkJCSA9IEsqTE9HMiArIExPRyhGKSArIExPRygxICsgKFktRikvRikuCiMtLU5PVEUgVEhBVCBVID0gKFktRikvRiBJUyBWRVJZIFNNQUxMIEFORCBUSFVTIEFQUFJPWElNQVRJTkcKIy0tTE9HKDErVSkgQ0FOIEJFIFZFUlkgRUZGSUNJRU5ULgojLS1BTFNPIE5PVEUgVEhBVCBUSEUgVkFMVUUgMS9GIElTIFNUT1JFRCBJTiBBIFRBQkxFIFNPIFRIQVQgTk8KIy0tRElWSVNJT04gSVMgTkVFREVEIFRPIENBTENVTEFURSAoWS1GKS9GLgoKIy0tR0VUIEssIFksIEYsIEFORCBBRERSRVNTIE9GIDEvRi4KCWFzci5sCQkmOCwlZDEKCWFzci5sCQkmOCwlZDEJCQkjIFNISUZURUQgMTYgQklUUywgQklBU0VEIEVYUE8uIE9GIFgKCXN1Yi5sCQkmMHgzRkZGLCVkMQkJIyBUSElTIElTIEsKCWFkZC5sCQlBREpLKCVhNiksJWQxCQkjIEFESlVTVCBLLCBPUklHSU5BTCBJTlBVVCBNQVkgQkUgIERFTk9STS4KCWxlYQkJTE9HVEJMKCVwYyksJWEwCQkjIEJBU0UgQUREUkVTUyBPRiAxL0YgQU5EIExPRyhGKQoJZm1vdi5sCQklZDEsJWZwMQkJIyBDT05WRVJUIEsgVE8gRkxPQVRJTkctUE9JTlQgRk9STUFUCgojLS1XSElMRSBUSEUgQ09OVkVSU0lPTiBJUyBHT0lORyBPTiwgV0UgR0VUIEYgQU5EIEFERFJFU1MgT0YgMS9GCgltb3YubAkJJjB4M0ZGRjAwMDAsWCglYTYpCSMgWCBJUyBOT1cgWSwgSS5FLiAyXigtSykqWAoJbW92LmwJCVhGUkFDKCVhNiksRkZSQUMoJWE2KQoJYW5kLmwJCSYweEZFMDAwMDAwLEZGUkFDKCVhNikJIyBGSVJTVCA3IEJJVFMgT0YgWQoJb3IubAkJJjB4MDEwMDAwMDAsRkZSQUMoJWE2KQkjIEdFVCBGOiBBVFRBQ0ggQSAxIEFUIFRIRSBFSUdIVEggQklUCgltb3YubAkJRkZSQUMoJWE2KSwlZDEJIyBSRUFEWSBUTyBHRVQgQUREUkVTUyBPRiAxL0YKCWFuZC5sCQkmMHg3RTAwMDAwMCwlZDEKCWFzci5sCQkmOCwlZDEKCWFzci5sCQkmOCwlZDEKCWFzci5sCQkmNCwlZDEJCQkjIFNISUZURUQgMjAsIEQwIElTIFRIRSBESVNQTEFDRU1FTlQKCWFkZC5sCQklZDEsJWEwCQkJIyBBMCBJUyBUSEUgQUREUkVTUyBGT1IgMS9GCgoJZm1vdi54CQlYKCVhNiksJWZwMAoJbW92LmwJCSYweDNmZmYwMDAwLEYoJWE2KQoJY2xyLmwJCUYrOCglYTYpCglmc3ViLngJCUYoJWE2KSwlZnAwCQkjIFktRgoJZm1vdm0ueAkJJjB4YywtKCVzcCkJCSMgU0FWRSBGUDItMyBXSElMRSBGUDAgSVMgTk9UIFJFQURZCiMtLVNVTU1BUlk6IEZQMCBJUyBZLUYsIEEwIElTIEFERFJFU1MgT0YgMS9GLCBGUDEgSVMgSwojLS1SRUdJU1RFUlMgU0FWRUQ6IEZQQ1IsIEZQMSwgRlAyCgpMUDFDT05UMToKIy0tQU4gUkUtRU5UUlkgUE9JTlQgRk9SIExPR05QMQoJZm11bC54CQkoJWEwKSwlZnAwCQkjIEZQMCBJUyBVID0gKFktRikvRgoJZm11bC54CQlMT0dPRjIoJXBjKSwlZnAxCSMgR0VUIEsqTE9HMiBXSElMRSBGUDAgSVMgTk9UIFJFQURZCglmbW92LngJCSVmcDAsJWZwMgoJZm11bC54CQklZnAyLCVmcDIJCSMgRlAyIElTIFY9VSpVCglmbW92LngJCSVmcDEsS0xPRzIoJWE2KQkJIyBQVVQgSypMT0cyIElOIE1FTUVPUlksIEZSRUUgRlAxCgojLS1MT0coMStVKSBJUyBBUFBST1hJTUFURUQgQlkKIy0tVSArIFYqKEExK1UqKEEyK1UqKEEzK1UqKEE0K1UqKEE1K1UqQTYpKSkpKSBXSElDSCBJUwojLS1bVSArIFYqKEExK1YqKEEzK1YqQTUpKV0gICsgIFtVKlYqKEEyK1YqKEE0K1YqQTYpKV0KCglmbW92LngJCSVmcDIsJWZwMwoJZm1vdi54CQklZnAyLCVmcDEKCglmbXVsLmQJCUxPR0E2KCVwYyksJWZwMQkJIyBWKkE2CglmbXVsLmQJCUxPR0E1KCVwYyksJWZwMgkJIyBWKkE1CgoJZmFkZC5kCQlMT0dBNCglcGMpLCVmcDEJCSMgQTQrVipBNgoJZmFkZC5kCQlMT0dBMyglcGMpLCVmcDIJCSMgQTMrVipBNQoKCWZtdWwueAkJJWZwMywlZnAxCQkjIFYqKEE0K1YqQTYpCglmbXVsLngJCSVmcDMsJWZwMgkJIyBWKihBMytWKkE1KQoKCWZhZGQuZAkJTE9HQTIoJXBjKSwlZnAxCQkjIEEyK1YqKEE0K1YqQTYpCglmYWRkLmQJCUxPR0ExKCVwYyksJWZwMgkJIyBBMStWKihBMytWKkE1KQoKCWZtdWwueAkJJWZwMywlZnAxCQkjIFYqKEEyK1YqKEE0K1YqQTYpKQoJYWRkLmwJCSYxNiwlYTAJCQkjIEFERFJFU1MgT0YgTE9HKEYpCglmbXVsLngJCSVmcDMsJWZwMgkJIyBWKihBMStWKihBMytWKkE1KSkKCglmbXVsLngJCSVmcDAsJWZwMQkJIyBVKlYqKEEyK1YqKEE0K1YqQTYpKQoJZmFkZC54CQklZnAyLCVmcDAJCSMgVStWKihBMStWKihBMytWKkE1KSkKCglmYWRkLngJCSglYTApLCVmcDEJCSMgTE9HKEYpK1UqViooQTIrViooQTQrVipBNikpCglmbW92bS54CQkoJXNwKSssJjB4MzAJCSMgUkVTVE9SRSBGUDItMwoJZmFkZC54CQklZnAxLCVmcDAJCSMgRlAwIElTIExPRyhGKSArIExPRygxK1UpCgoJZm1vdi5sCQklZDAsJWZwY3IKCWZhZGQueAkJS0xPRzIoJWE2KSwlZnAwCQkjIEZJTkFMIEFERAoJYnJhCQl0X2lueDIKCgpMT0dORUFSMToKCiMgaWYgdGhlIGlucHV0IGlzIGV4YWN0bHkgZXF1YWwgdG8gb25lLCB0aGVuIGV4aXQgdGhyb3VnaCBsZF9wemVyby4KIyBpZiB0aGVzZSAyIGxpbmVzIHdlcmVuJ3QgaGVyZSwgdGhlIGNvcnJlY3QgYW5zd2VyIHdvdWxkIGJlIHJldHVybmVkCiMgYnV0IHRoZSBJTkVYMiBiaXQgd291bGQgYmUgc2V0LgoJZmNtcC5iCQklZnAwLCYweDEJCSMgaXMgaXQgZXF1YWwgdG8gb25lPwoJZmJlcS5sCQlsZF9wemVybwkJIyB5ZXMKCiMtLVJFR0lTVEVSUyBTQVZFRDogRlBDUiwgRlAxLiBGUDAgQ09OVEFJTlMgVEhFIElOUFVULgoJZm1vdi54CQklZnAwLCVmcDEKCWZzdWIucwkJb25lKCVwYyksJWZwMQkJIyBGUDEgSVMgWC0xCglmYWRkLnMJCW9uZSglcGMpLCVmcDAJCSMgRlAwIElTIFgrMQoJZmFkZC54CQklZnAxLCVmcDEJCSMgRlAxIElTIDIoWC0xKQojLS1MT0coWCkgPSBMT0coMStVLzIpLUxPRygxLVUvMikgV0hJQ0ggSVMgQU4gT0REIFBPTFlOT01JQUwKIy0tSU4gVSwgVSA9IDIoWC0xKS8oWCsxKSA9IEZQMS9GUDAKCkxQMUNPTlQyOgojLS1USElTIElTIEFOIFJFLUVOVFJZIFBPSU5UIEZPUiBMT0dOUDEKCWZkaXYueAkJJWZwMCwlZnAxCQkjIEZQMSBJUyBVCglmbW92bS54CQkmMHhjLC0oJXNwKQkJIyBTQVZFIEZQMi0zCiMtLVJFR0lTVEVSUyBTQVZFRCBBUkUgTk9XIEZQQ1IsRlAxLEZQMixGUDMKIy0tTEVUIFY9VSpVLCBXPVYqViwgQ0FMQ1VMQVRFCiMtLVUgKyBVKlYqKEIxICsgViooQjIgKyBWKihCMyArIFYqKEI0ICsgVipCNSkpKSkgQlkKIy0tVSArIFUqViooICBbQjEgKyBXKihCMyArIFcqQjUpXSAgKyAgW1YqKEIyICsgVypCNCldICApCglmbW92LngJCSVmcDEsJWZwMAoJZm11bC54CQklZnAwLCVmcDAJCSMgRlAwIElTIFYKCWZtb3YueAkJJWZwMSxTQVZFVSglYTYpCQkjIFNUT1JFIFUgSU4gTUVNT1JZLCBGUkVFIEZQMQoJZm1vdi54CQklZnAwLCVmcDEKCWZtdWwueAkJJWZwMSwlZnAxCQkjIEZQMSBJUyBXCgoJZm1vdi5kCQlMT0dCNSglcGMpLCVmcDMKCWZtb3YuZAkJTE9HQjQoJXBjKSwlZnAyCgoJZm11bC54CQklZnAxLCVmcDMJCSMgVypCNQoJZm11bC54CQklZnAxLCVmcDIJCSMgVypCNAoKCWZhZGQuZAkJTE9HQjMoJXBjKSwlZnAzCQkjIEIzK1cqQjUKCWZhZGQuZAkJTE9HQjIoJXBjKSwlZnAyCQkjIEIyK1cqQjQKCglmbXVsLngJCSVmcDMsJWZwMQkJIyBXKihCMytXKkI1KSwgRlAzIFJFTEVBU0VECgoJZm11bC54CQklZnAwLCVmcDIJCSMgViooQjIrVypCNCkKCglmYWRkLmQJCUxPR0IxKCVwYyksJWZwMQkJIyBCMStXKihCMytXKkI1KQoJZm11bC54CQlTQVZFVSglYTYpLCVmcDAJCSMgRlAwIElTIFUqVgoKCWZhZGQueAkJJWZwMiwlZnAxCQkjIEIxK1cqKEIzK1cqQjUpICsgViooQjIrVypCNCksIEZQMiBSRUxFQVNFRAoJZm1vdm0ueAkJKCVzcCkrLCYweDMwCQkjIEZQMi0zIFJFU1RPUkVECgoJZm11bC54CQklZnAxLCVmcDAJCSMgVSpWKiggW0IxK1cqKEIzK1cqQjUpXSArIFtWKihCMitXKkI0KV0gKQoKCWZtb3YubAkJJWQwLCVmcGNyCglmYWRkLngJCVNBVkVVKCVhNiksJWZwMAoJYnJhCQl0X2lueDIKCiMtLVJFR0lTVEVSUyBTQVZFRCBGUENSLiBMT0coLVZFKSBJUyBJTlZBTElECkxPR05FRzoKCWJyYQkJdF9vcGVycgoKCWdsb2JhbAkJc2xvZ25kCnNsb2duZDoKIy0tRU5UUlkgUE9JTlQgRk9SIExPRyhYKSBGT1IgREVOT1JNQUxJWkVEIElOUFVUCgoJbW92LmwJCSYtMTAwLEFESksoJWE2KQkJIyBJTlBVVCA9IDJeKEFESkspICogRlAwCgojLS0tLW5vcm1hbGl6ZSB0aGUgaW5wdXQgdmFsdWUgYnkgbGVmdCBzaGlmdGluZyBrIGJpdHMgKGsgdG8gYmUgZGV0ZXJtaW5lZAojLS0tLWJlbG93KSwgYWRqdXN0aW5nIGV4cG9uZW50IGFuZCBzdG9yaW5nIC1rIHRvICBBREpLCiMtLS0tdGhlIHZhbHVlIFRXT1RPMTAwIGlzIG5vIGxvbmdlciBuZWVkZWQuCiMtLS0tTm90ZSB0aGF0IHRoaXMgY29kZSBhc3N1bWVzIHRoZSBkZW5vcm1hbGl6ZWQgaW5wdXQgaXMgTk9OLVpFUk8uCgoJbW92bS5sCQkmMHgzZjAwLC0oJXNwKQkJIyBzYXZlIHNvbWUgcmVnaXN0ZXJzICB7ZDItZDd9Cgltb3YubAkJKCVhMCksJWQzCQkjIEQzIGlzIGV4cG9uZW50IG9mIHNtYWxsZXN0IG5vcm0uICMKCW1vdi5sCQk0KCVhMCksJWQ0Cgltb3YubAkJOCglYTApLCVkNQkJIyAoRDQsRDUpIGlzIChIaV9YLExvX1gpCgljbHIubAkJJWQyCQkJIyBEMiB1c2VkIGZvciBob2xkaW5nIEsKCgl0c3QubAkJJWQ0CglibmUuYgkJSGlfbm90MAoKSGlfMDoKCW1vdi5sCQklZDUsJWQ0CgljbHIubAkJJWQ1Cgltb3YubAkJJjMyLCVkMgoJY2xyLmwJCSVkNgoJYmZmZm8JCSVkNHsmMDomMzJ9LCVkNgoJbHNsLmwJCSVkNiwlZDQKCWFkZC5sCQklZDYsJWQyCQkJIyAoRDMsRDQsRDUpIGlzIG5vcm1hbGl6ZWQKCgltb3YubAkJJWQzLFgoJWE2KQoJbW92LmwJCSVkNCxYRlJBQyglYTYpCgltb3YubAkJJWQ1LFhGUkFDKzQoJWE2KQoJbmVnLmwJCSVkMgoJbW92LmwJCSVkMixBREpLKCVhNikKCWZtb3YueAkJWCglYTYpLCVmcDAKCW1vdm0ubAkJKCVzcCkrLCYweGZjCQkjIHJlc3RvcmUgcmVnaXN0ZXJzIHtkMi1kN30KCWxlYQkJWCglYTYpLCVhMAoJYnJhLncJCUxPR0JHTgkJCSMgYmVnaW4gcmVndWxhciBsb2coWCkKCkhpX25vdDA6CgljbHIubAkJJWQ2CgliZmZmbwkJJWQ0eyYwOiYzMn0sJWQ2CQkjIGZpbmQgZmlyc3QgMQoJbW92LmwJCSVkNiwlZDIJCQkjIGdldCBrCglsc2wubAkJJWQ2LCVkNAoJbW92LmwJCSVkNSwlZDcJCQkjIGEgY29weSBvZiBENQoJbHNsLmwJCSVkNiwlZDUKCW5lZy5sCQklZDYKCWFkZC5sCQkmMzIsJWQ2Cglsc3IubAkJJWQ2LCVkNwoJb3IubAkJJWQ3LCVkNAkJCSMgKEQzLEQ0LEQ1KSBub3JtYWxpemVkCgoJbW92LmwJCSVkMyxYKCVhNikKCW1vdi5sCQklZDQsWEZSQUMoJWE2KQoJbW92LmwJCSVkNSxYRlJBQys0KCVhNikKCW5lZy5sCQklZDIKCW1vdi5sCQklZDIsQURKSyglYTYpCglmbW92LngJCVgoJWE2KSwlZnAwCgltb3ZtLmwJCSglc3ApKywmMHhmYwkJIyByZXN0b3JlIHJlZ2lzdGVycyB7ZDItZDd9CglsZWEJCVgoJWE2KSwlYTAKCWJyYS53CQlMT0dCR04JCQkjIGJlZ2luIHJlZ3VsYXIgbG9nKFgpCgoJZ2xvYmFsCQlzbG9nbnAxCiMtLUVOVFJZIFBPSU5UIEZPUiBMT0coMStYKSBGT1IgWCBGSU5JVEUsIE5PTi1aRVJPLCBOT1QgTkFOJ1MKc2xvZ25wMToKCWZtb3YueAkJKCVhMCksJWZwMAkJIyBMT0FEIElOUFVUCglmYWJzLngJCSVmcDAJCQkjIHRlc3QgbWFnbml0dWRlCglmY21wLngJCSVmcDAsTFRIT0xEKCVwYykJIyBjb21wYXJlIHdpdGggbWluIHRocmVzaG9sZAoJZmJndC53CQlMUDFSRUFMCQkJIyBpZiBncmVhdGVyLCBjb250aW51ZQoJZm1vdi5sCQklZDAsJWZwY3IKCW1vdi5iCQkmRk1PVl9PUCwlZDEJCSMgbGFzdCBpbnN0IGlzIE1PVkUKCWZtb3YueAkJKCVhMCksJWZwMAkJIyByZXR1cm4gc2lnbmVkIGFyZ3VtZW50CglicmEJCXRfY2F0Y2gKCkxQMVJFQUw6CglmbW92LngJCSglYTApLCVmcDAJCSMgTE9BRCBJTlBVVAoJbW92LmwJCSYweDAwMDAwMDAwLEFESksoJWE2KQoJZm1vdi54CQklZnAwLCVmcDEJCSMgRlAxIElTIElOUFVUIFoKCWZhZGQucwkJb25lKCVwYyksJWZwMAkJIyBYIDo9IFJPVU5EKDErWikKCWZtb3YueAkJJWZwMCxYKCVhNikKCW1vdi53CQlYRlJBQyglYTYpLFhEQ0FSRSglYTYpCgltb3YubAkJWCglYTYpLCVkMQoJY21wLmwJCSVkMSwmMAoJYmxlLncJCUxQMU5FRzAJCQkjIExPRyBPRiBaRVJPIE9SIC1WRQoJY21wLmwJCSVkMSwmMHgzZmZlODAwMAkJIyBJUyBCT1VORFMgWzEvMiwzLzJdPwoJYmx0LncJCUxPR01BSU4KCWNtcC5sCQklZDEsJjB4M2ZmZmMwMDAKCWJndC53CQlMT0dNQUlOCiMtLUlGIDErWiA+IDMvMiBPUiAxK1ogPCAxLzIsIFRIRU4gWCwgV0hJQ0ggSVMgUk9VTkRJTkcgMStaLAojLS1DT05UQUlOUyBBVCBMRUFTVCA2MyBCSVRTIE9GIElORk9STUFUSU9OIE9GIFouIElOIFRIQVQgQ0FTRSwKIy0tU0lNUExZIElOVk9LRSBMT0coWCkgRk9SIExPRygxK1opLgoKTFAxTkVBUjE6CiMtLU5FWFQgU0VFIElGIEVYUCgtMS8xNikgPCBYIDwgRVhQKDEvMTYpCgljbXAubAkJJWQxLCYweDNmZmVmMDdkCglibHQudwkJTFAxQ0FSRQoJY21wLmwJCSVkMSwmMHgzZmZmODg0MQoJYmd0LncJCUxQMUNBUkUKCkxQMU9ORTE2OgojLS1FWFAoLTEvMTYpIDwgWCA8IEVYUCgxLzE2KS4gTE9HKDErWikgPSBMT0coMStVLzIpIC0gTE9HKDEtVS8yKQojLS1XSEVSRSBVID0gMlovKDIrWikgPSAyWi8oMStYKS4KCWZhZGQueAkJJWZwMSwlZnAxCQkjIEZQMSBJUyAyWgoJZmFkZC5zCQlvbmUoJXBjKSwlZnAwCQkjIEZQMCBJUyAxK1gKIy0tVSA9IEZQMS9GUDAKCWJyYS53CQlMUDFDT05UMgoKTFAxQ0FSRToKIy0tSEVSRSBXRSBVU0UgVEhFIFVTVUFMIFRBQkxFIERSSVZFTiBBUFBST0FDSC4gQ0FSRSBIQVMgVE8gQkUKIy0tVEFLRU4gQkVDQVVTRSAxK1ogQ0FOIEhBVkUgNjcgQklUUyBPRiBJTkZPUk1BVElPTiBBTkQgV0UgTVVTVAojLS1QUkVTRVJWRSBBTEwgVEhFIElORk9STUFUSU9OLiBCRUNBVVNFIDErWiBJUyBJTiBbMS8yLDMvMl0sCiMtLVRIRVJFIEFSRSBPTkxZIFRXTyBDQVNFUy4KIy0tQ0FTRSAxOiAxK1ogPCAxLCBUSEVOIEsgPSAtMSBBTkQgWS1GID0gKDItRikgKyAyWgojLS1DQVNFIDI6IDErWiA+IDEsIFRIRU4gSyA9IDAgIEFORCBZLUYgPSAoMS1GKSArIFoKIy0tT04gUkVUVVJOSU5HIFRPIExQMUNPTlQxLCBXRSBNVVNUIEhBVkUgSyBJTiBGUDEsIEFERFJFU1MgT0YKIy0tKDEvRikgSU4gQTAsIFktRiBJTiBGUDAsIEFORCBGUDIgU0FWRUQuCgoJbW92LmwJCVhGUkFDKCVhNiksRkZSQUMoJWE2KQoJYW5kLmwJCSYweEZFMDAwMDAwLEZGUkFDKCVhNikKCW9yLmwJCSYweDAxMDAwMDAwLEZGUkFDKCVhNikJIyBGIE9CVEFJTkVECgljbXAubAkJJWQxLCYweDNGRkY4MDAwCQkjIFNFRSBJRiAxK1ogPiAxCgliZ2UuYgkJS0lTWkVSTwoKS0lTTkVHMToKCWZtb3YucwkJVFdPKCVwYyksJWZwMAoJbW92LmwJCSYweDNmZmYwMDAwLEYoJWE2KQoJY2xyLmwJCUYrOCglYTYpCglmc3ViLngJCUYoJWE2KSwlZnAwCQkjIDItRgoJbW92LmwJCUZGUkFDKCVhNiksJWQxCglhbmQubAkJJjB4N0UwMDAwMDAsJWQxCglhc3IubAkJJjgsJWQxCglhc3IubAkJJjgsJWQxCglhc3IubAkJJjQsJWQxCQkJIyBEMCBDT05UQUlOUyBESVNQTEFDRU1FTlQgRk9SIDEvRgoJZmFkZC54CQklZnAxLCVmcDEJCSMgR0VUIDJaCglmbW92bS54CQkmMHhjLC0oJXNwKQkJIyBTQVZFIEZQMiAgeyVmcDIvJWZwM30KCWZhZGQueAkJJWZwMSwlZnAwCQkjIEZQMCBJUyBZLUYgPSAoMi1GKSsyWgoJbGVhCQlMT0dUQkwoJXBjKSwlYTAJCSMgQTAgSVMgQUREUkVTUyBPRiAxL0YKCWFkZC5sCQklZDEsJWEwCglmbW92LnMJCW5lZ29uZSglcGMpLCVmcDEJIyBGUDEgSVMgSyA9IC0xCglicmEudwkJTFAxQ09OVDEKCktJU1pFUk86CglmbW92LnMJCW9uZSglcGMpLCVmcDAKCW1vdi5sCQkmMHgzZmZmMDAwMCxGKCVhNikKCWNsci5sCQlGKzgoJWE2KQoJZnN1Yi54CQlGKCVhNiksJWZwMAkJIyAxLUYKCW1vdi5sCQlGRlJBQyglYTYpLCVkMQoJYW5kLmwJCSYweDdFMDAwMDAwLCVkMQoJYXNyLmwJCSY4LCVkMQoJYXNyLmwJCSY4LCVkMQoJYXNyLmwJCSY0LCVkMQoJZmFkZC54CQklZnAxLCVmcDAJCSMgRlAwIElTIFktRgoJZm1vdm0ueAkJJjB4YywtKCVzcCkJCSMgRlAyIFNBVkVEIHslZnAyLyVmcDN9CglsZWEJCUxPR1RCTCglcGMpLCVhMAoJYWRkLmwJCSVkMSwlYTAJCQkjIEEwIElTIEFERFJFU1MgT0YgMS9GCglmbW92LnMJCXplcm8oJXBjKSwlZnAxCQkjIEZQMSBJUyBLID0gMAoJYnJhLncJCUxQMUNPTlQxCgpMUDFORUcwOgojLS1GUENSIFNBVkVELiBEMCBJUyBYIElOIENPTVBBQ1QgRk9STS4KCWNtcC5sCQklZDEsJjAKCWJsdC5iCQlMUDFORUcKTFAxWkVSTzoKCWZtb3YucwkJbmVnb25lKCVwYyksJWZwMAoKCWZtb3YubAkJJWQwLCVmcGNyCglicmEJCXRfZHoKCkxQMU5FRzoKCWZtb3YucwkJemVybyglcGMpLCVmcDAKCglmbW92LmwJCSVkMCwlZnBjcgoJYnJhCQl0X29wZXJyCgoJZ2xvYmFsCQlzbG9nbnAxZAojLS1FTlRSWSBQT0lOVCBGT1IgTE9HKDErWikgRk9SIERFTk9STUFMSVpFRCBJTlBVVAojIFNpbXBseSByZXR1cm4gdGhlIGRlbm9ybQpzbG9nbnAxZDoKCWJyYQkJdF9leHRkbnJtCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgc2F0YW5oKCk6ICBjb21wdXRlcyB0aGUgaW52ZXJzZSBoeXBlcmJvbGljIHRhbmdlbnQgb2YgYSBub3JtIGlucHV0CSMKIyBzYXRhbmhkKCk6IGNvbXB1dGVzIHRoZSBpbnZlcnNlIGh5cGVyYm9saWMgdGFuZ2VudCBvZiBhIGRlbm9ybSBpbnB1dAkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIGlucHV0CQkJIwojCWQwID0gcm91bmQgcHJlY2lzaW9uLG1vZGUJCQkJCSMKIwkJCQkJCQkJCSMKIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWZwMCA9IGFyY3RhbmgoWCkJCQkJCQkjCiMJCQkJCQkJCQkjCiMgQUNDVVJBQ1kgYW5kIE1PTk9UT05JQ0lUWSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlUaGUgcmV0dXJuZWQgcmVzdWx0IGlzIHdpdGhpbiAzIHVscHMgaW4JNjQgc2lnbmlmaWNhbnQgYml0LAkjCiMJaS5lLiB3aXRoaW4gMC41MDAxIHVscCB0byA1MyBiaXRzIGlmIHRoZSByZXN1bHQgaXMgc3Vic2VxdWVudGx5CSMKIwlyb3VuZGVkIHRvIGRvdWJsZSBwcmVjaXNpb24uIFRoZSByZXN1bHQgaXMgcHJvdmFibHkgbW9ub3RvbmljCSMKIwlpbiBkb3VibGUgcHJlY2lzaW9uLgkJCQkJCSMKIwkJCQkJCQkJCSMKIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCQkJCQkJCQkJIwojCUFUQU5ICQkJCQkJCQkjCiMJMS4gSWYgfFh8ID49IDEsIGdvIHRvIDMuCQkJCQkjCiMJCQkJCQkJCQkjCiMJMi4gKHxYfCA8IDEpIENhbGN1bGF0ZSBhdGFuaChYKSBieQkJCQkjCiMJCXNnbiA6PSBzaWduKFgpCQkJCQkJIwojCQl5IDo9IHxYfAkJCQkJCSMKIwkJeiA6PSAyeS8oMS15KQkJCQkJCSMKIwkJYXRhbmgoWCkgOj0gc2duICogKDEvMikgKiBsb2dwMSh6KQkJCSMKIwkJRXhpdC4JCQkJCQkJIwojCQkJCQkJCQkJIwojCTMuIElmIHxYfCA+IDEsIGdvIHRvIDUuCQkJCQkJIwojCQkJCQkJCQkJIwojCTQuICh8WHwgPSAxKSBHZW5lcmF0ZSBpbmZpbml0eSB3aXRoIGFuIGFwcHJvcHJpYXRlIHNpZ24gYW5kCSMKIwkJZGl2aWRlLWJ5LXplcm8gYnkJCQkJCSMKIwkJc2duIDo9IHNpZ24oWCkJCQkJCQkjCiMJCWF0YW4oWCkgOj0gc2duIC8gKCswKS4JCQkJCSMKIwkJRXhpdC4JCQkJCQkJIwojCQkJCQkJCQkJIwojCTUuICh8WHwgPiAxKSBHZW5lcmF0ZSBhbiBpbnZhbGlkIG9wZXJhdGlvbiBieSAwICogaW5maW5pdHkuCSMKIwkJRXhpdC4JCQkJCQkJIwojCQkJCQkJCQkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoJZ2xvYmFsCQlzYXRhbmgKc2F0YW5oOgoJbW92LmwJCSglYTApLCVkMQoJbW92LncJCTQoJWEwKSwlZDEKCWFuZC5sCQkmMHg3RkZGRkZGRiwlZDEKCWNtcC5sCQklZDEsJjB4M0ZGRjgwMDAKCWJnZS5iCQlBVEFOSEJJRwoKIy0tVEhJUyBJUyBUSEUgVVNVQUwgQ0FTRSwgfFh8IDwgMQojLS1ZID0gfFh8LCBaID0gMlkvKDEtWSksIEFUQU5IKFgpID0gU0lHTihYKSAqICgxLzIpICogTE9HMVAoWikuCgoJZmFicy54CQkoJWEwKSwlZnAwCQkjIFkgPSB8WHwKCWZtb3YueAkJJWZwMCwlZnAxCglmbmVnLngJCSVmcDEJCQkjIC1ZCglmYWRkLngJCSVmcDAsJWZwMAkJIyAyWQoJZmFkZC5zCQkmMHgzRjgwMDAwMCwlZnAxCSMgMS1ZCglmZGl2LngJCSVmcDEsJWZwMAkJIyAyWS8oMS1ZKQoJbW92LmwJCSglYTApLCVkMQoJYW5kLmwJCSYweDgwMDAwMDAwLCVkMQoJb3IubAkJJjB4M0YwMDAwMDAsJWQxCQkjIFNJR04oWCkqSEFMRgoJbW92LmwJCSVkMSwtKCVzcCkKCgltb3YubAkJJWQwLC0oJXNwKQkJIyBzYXZlIHJuZCBwcmVjLG1vZGUKCWNsci5sCQklZDAJCQkjIHBhc3MgZXh0IHByZWMsUk4KCWZtb3ZtLngJCSYweDAxLC0oJXNwKQkJIyBzYXZlIFogb24gc3RhY2sKCWxlYQkJKCVzcCksJWEwCQkjIHBhc3MgcHRyIHRvIFoKCWJzcgkJc2xvZ25wMQkJCSMgTE9HMVAoWikKCWFkZC5sCQkmMHhjLCVzcAkJIyBjbGVhciBaIGZyb20gc3RhY2sKCgltb3YubAkJKCVzcCkrLCVkMAkJIyBmZXRjaCBvbGQgcHJlYyxtb2RlCglmbW92LmwJCSVkMCwlZnBjcgkJIyBsb2FkIGl0Cgltb3YuYgkJJkZNVUxfT1AsJWQxCQkjIGxhc3QgaW5zdCBpcyBNVUwKCWZtdWwucwkJKCVzcCkrLCVmcDAKCWJyYQkJdF9jYXRjaAoKQVRBTkhCSUc6CglmYWJzLngJCSglYTApLCVmcDAJCSMgfFh8CglmY21wLnMJCSVmcDAsJjB4M0Y4MDAwMDAKCWZiZ3QJCXRfb3BlcnIKCWJyYQkJdF9kegoKCWdsb2JhbAkJc2F0YW5oZAojLS1BVEFOSChYKSA9IFggRk9SIERFTk9STUFMSVpFRCBYCnNhdGFuaGQ6CglicmEJCXRfZXh0ZG5ybQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIHNsb2cxMCgpOiAgY29tcHV0ZXMgdGhlIGJhc2UtMTAgbG9nYXJpdGhtIG9mIGEgbm9ybWFsaXplZCBpbnB1dAkjCiMgc2xvZzEwZCgpOiBjb21wdXRlcyB0aGUgYmFzZS0xMCBsb2dhcml0aG0gb2YgYSBkZW5vcm1hbGl6ZWQgaW5wdXQJIwojIHNsb2cyKCk6ICAgY29tcHV0ZXMgdGhlIGJhc2UtMiBsb2dhcml0aG0gb2YgYSBub3JtYWxpemVkIGlucHV0CSMKIyBzbG9nMmQoKTogIGNvbXB1dGVzIHRoZSBiYXNlLTIgbG9nYXJpdGhtIG9mIGEgZGVub3JtYWxpemVkIGlucHV0CSMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIwojCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gaW5wdXQJCQkjCiMJZDAgPSByb3VuZCBwcmVjaXNpb24sbW9kZQkJCQkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJZnAwID0gbG9nXzEwKFgpIG9yIGxvZ18yKFgpCQkJCQkjCiMJCQkJCQkJCQkjCiMgQUNDVVJBQ1kgYW5kIE1PTk9UT05JQ0lUWSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlUaGUgcmV0dXJuZWQgcmVzdWx0IGlzIHdpdGhpbiAxLjcgdWxwcyBpbiA2NCBzaWduaWZpY2FudCBiaXQsCSMKIwlpLmUuIHdpdGhpbiAwLjUwMDMgdWxwIHRvIDUzIGJpdHMgaWYgdGhlIHJlc3VsdCBpcyBzdWJzZXF1ZW50bHkJIwojCXJvdW5kZWQgdG8gZG91YmxlIHByZWNpc2lvbi4gVGhlIHJlc3VsdCBpcyBwcm92YWJseSBtb25vdG9uaWMJIwojCWluIGRvdWJsZSBwcmVjaXNpb24uCQkJCQkJIwojCQkJCQkJCQkJIwojIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJCQkJCQkJCQkjCiMgICAgICAgc2xvZzEwZDoJCQkJCQkJIwojCQkJCQkJCQkJIwojICAgICAgIFN0ZXAgMC4JSWYgWCA8IDAsIGNyZWF0ZSBhIE5hTiBhbmQgcmFpc2UgdGhlIGludmFsaWQgb3BlcmF0aW9uCSMKIyAgICAgICAgICAgICAgIGZsYWcuIE90aGVyd2lzZSwgc2F2ZSBGUENSIGluIEQxOyBzZXQgRnBDUiB0byBkZWZhdWx0LgkjCiMgICAgICAgTm90ZXM6ICBEZWZhdWx0IG1lYW5zIHJvdW5kLXRvLW5lYXJlc3QgbW9kZSwgbm8gZmxvYXRpbmctcG9pbnQJIwojICAgICAgICAgICAgICAgdHJhcHMsIGFuZCBwcmVjaXNpb24gY29udHJvbCA9IGRvdWJsZSBleHRlbmRlZC4JCSMKIwkJCQkJCQkJCSMKIyAgICAgICBTdGVwIDEuIENhbGwgc2xvZ25kIHRvIG9idGFpbiBZID0gbG9nKFgpLCB0aGUgbmF0dXJhbCBsb2cgb2YgWC4JIwojICAgICAgIE5vdGVzOiAgRXZlbiBpZiBYIGlzIGRlbm9ybWFsaXplZCwgbG9nKFgpIGlzIGFsd2F5cyBub3JtYWxpemVkLgkjCiMJCQkJCQkJCQkjCiMgICAgICAgU3RlcCAyLiAgQ29tcHV0ZSBsb2dfMTAoWCkgPSBsb2coWCkgKiAoMS9sb2coMTApKS4JCSMKIyAgICAgICAgICAgIDIuMSBSZXN0b3JlIHRoZSB1c2VyIEZQQ1IJCQkJCSMKIyAgICAgICAgICAgIDIuMiBSZXR1cm4gYW5zIDo9IFkgKiBJTlZfTDEwLgkJCQkjCiMJCQkJCQkJCQkjCiMgICAgICAgc2xvZzEwOgkJCQkJCQkJIwojCQkJCQkJCQkJIwojICAgICAgIFN0ZXAgMC4gSWYgWCA8IDAsIGNyZWF0ZSBhIE5hTiBhbmQgcmFpc2UgdGhlIGludmFsaWQgb3BlcmF0aW9uCSMKIyAgICAgICAgICAgICAgIGZsYWcuIE90aGVyd2lzZSwgc2F2ZSBGUENSIGluIEQxOyBzZXQgRnBDUiB0byBkZWZhdWx0LgkjCiMgICAgICAgTm90ZXM6ICBEZWZhdWx0IG1lYW5zIHJvdW5kLXRvLW5lYXJlc3QgbW9kZSwgbm8gZmxvYXRpbmctcG9pbnQJIwojICAgICAgICAgICAgICAgdHJhcHMsIGFuZCBwcmVjaXNpb24gY29udHJvbCA9IGRvdWJsZSBleHRlbmRlZC4JCSMKIwkJCQkJCQkJCSMKIyAgICAgICBTdGVwIDEuIENhbGwgc0xvZ04gdG8gb2J0YWluIFkgPSBsb2coWCksIHRoZSBuYXR1cmFsIGxvZyBvZiBYLgkjCiMJCQkJCQkJCQkjCiMgICAgICAgU3RlcCAyLiAgIENvbXB1dGUgbG9nXzEwKFgpID0gbG9nKFgpICogKDEvbG9nKDEwKSkuCQkjCiMgICAgICAgICAgICAyLjEgIFJlc3RvcmUgdGhlIHVzZXIgRlBDUgkJCQkJIwojICAgICAgICAgICAgMi4yICBSZXR1cm4gYW5zIDo9IFkgKiBJTlZfTDEwLgkJCQkjCiMJCQkJCQkJCQkjCiMgICAgICAgc0xvZzJkOgkJCQkJCQkJIwojCQkJCQkJCQkJIwojICAgICAgIFN0ZXAgMC4gSWYgWCA8IDAsIGNyZWF0ZSBhIE5hTiBhbmQgcmFpc2UgdGhlIGludmFsaWQgb3BlcmF0aW9uCSMKIyAgICAgICAgICAgICAgIGZsYWcuIE90aGVyd2lzZSwgc2F2ZSBGUENSIGluIEQxOyBzZXQgRnBDUiB0byBkZWZhdWx0LgkjCiMgICAgICAgTm90ZXM6ICBEZWZhdWx0IG1lYW5zIHJvdW5kLXRvLW5lYXJlc3QgbW9kZSwgbm8gZmxvYXRpbmctcG9pbnQJIwojICAgICAgICAgICAgICAgdHJhcHMsIGFuZCBwcmVjaXNpb24gY29udHJvbCA9IGRvdWJsZSBleHRlbmRlZC4JCSMKIwkJCQkJCQkJCSMKIyAgICAgICBTdGVwIDEuIENhbGwgc2xvZ25kIHRvIG9idGFpbiBZID0gbG9nKFgpLCB0aGUgbmF0dXJhbCBsb2cgb2YgWC4JIwojICAgICAgIE5vdGVzOiAgRXZlbiBpZiBYIGlzIGRlbm9ybWFsaXplZCwgbG9nKFgpIGlzIGFsd2F5cyBub3JtYWxpemVkLgkjCiMJCQkJCQkJCQkjCiMgICAgICAgU3RlcCAyLiAgIENvbXB1dGUgbG9nXzEwKFgpID0gbG9nKFgpICogKDEvbG9nKDIpKS4JCSMKIyAgICAgICAgICAgIDIuMSAgUmVzdG9yZSB0aGUgdXNlciBGUENSCQkJCQkjCiMgICAgICAgICAgICAyLjIgIFJldHVybiBhbnMgOj0gWSAqIElOVl9MMi4JCQkJIwojCQkJCQkJCQkJIwojICAgICAgIHNMb2cyOgkJCQkJCQkJIwojCQkJCQkJCQkJIwojICAgICAgIFN0ZXAgMC4gSWYgWCA8IDAsIGNyZWF0ZSBhIE5hTiBhbmQgcmFpc2UgdGhlIGludmFsaWQgb3BlcmF0aW9uCSMKIyAgICAgICAgICAgICAgIGZsYWcuIE90aGVyd2lzZSwgc2F2ZSBGUENSIGluIEQxOyBzZXQgRnBDUiB0byBkZWZhdWx0LgkjCiMgICAgICAgTm90ZXM6ICBEZWZhdWx0IG1lYW5zIHJvdW5kLXRvLW5lYXJlc3QgbW9kZSwgbm8gZmxvYXRpbmctcG9pbnQJIwojICAgICAgICAgICAgICAgdHJhcHMsIGFuZCBwcmVjaXNpb24gY29udHJvbCA9IGRvdWJsZSBleHRlbmRlZC4JCSMKIwkJCQkJCQkJCSMKIyAgICAgICBTdGVwIDEuIElmIFggaXMgbm90IGFuIGludGVnZXIgcG93ZXIgb2YgdHdvLCBpLmUuLCBYICE9IDJeaywJIwojICAgICAgICAgICAgICAgZ28gdG8gU3RlcCAzLgkJCQkJCSMKIwkJCQkJCQkJCSMKIyAgICAgICBTdGVwIDIuICAgUmV0dXJuIGsuCQkJCQkJIwojICAgICAgICAgICAgMi4xICBHZXQgaW50ZWdlciBrLCBYID0gMl5rLgkJCQkjCiMgICAgICAgICAgICAyLjIgIFJlc3RvcmUgdGhlIHVzZXIgRlBDUi4JCQkJIwojICAgICAgICAgICAgMi4zICBSZXR1cm4gYW5zIDo9IGNvbnZlcnQtdG8tZG91YmxlLWV4dGVuZGVkKGspLgkJIwojCQkJCQkJCQkJIwojICAgICAgIFN0ZXAgMy4gQ2FsbCBzTG9nTiB0byBvYnRhaW4gWSA9IGxvZyhYKSwgdGhlIG5hdHVyYWwgbG9nIG9mIFguCSMKIwkJCQkJCQkJCSMKIyAgICAgICBTdGVwIDQuICAgQ29tcHV0ZSBsb2dfMihYKSA9IGxvZyhYKSAqICgxL2xvZygyKSkuCQkjCiMgICAgICAgICAgICA0LjEgIFJlc3RvcmUgdGhlIHVzZXIgRlBDUgkJCQkJIwojICAgICAgICAgICAgNC4yICBSZXR1cm4gYW5zIDo9IFkgKiBJTlZfTDIuCQkJCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKSU5WX0wxMDoKCWxvbmcJCTB4M0ZGRDAwMDAsMHhERTVCRDhBOSwweDM3Mjg3MTk1LDB4MDAwMDAwMDAKCklOVl9MMjoKCWxvbmcJCTB4M0ZGRjAwMDAsMHhCOEFBM0IyOSwweDVDMTdGMEJDLDB4MDAwMDAwMDAKCglnbG9iYWwJCXNsb2cxMAojLS1lbnRyeSBwb2ludCBmb3IgTG9nMTAoWCksIFggaXMgbm9ybWFsaXplZApzbG9nMTA6CglmbW92LmIJCSYweDEsJWZwMAoJZmNtcC54CQklZnAwLCglYTApCQkjIGlmIG9wZXJhbmQgPT0gMSwKCWZiZXEubAkJbGRfcHplcm8JCSMgcmV0dXJuIGFuIEVYQUNUIHplcm8KCgltb3YubAkJKCVhMCksJWQxCglibHQudwkJaW52YWxpZAoJbW92LmwJCSVkMCwtKCVzcCkKCWNsci5sCQklZDAKCWJzcgkJc2xvZ24JCQkjIGxvZyhYKSwgWCBub3JtYWwuCglmbW92LmwJCSglc3ApKywlZnBjcgoJZm11bC54CQlJTlZfTDEwKCVwYyksJWZwMAoJYnJhCQl0X2lueDIKCglnbG9iYWwJCXNsb2cxMGQKIy0tZW50cnkgcG9pbnQgZm9yIExvZzEwKFgpLCBYIGlzIGRlbm9ybWFsaXplZApzbG9nMTBkOgoJbW92LmwJCSglYTApLCVkMQoJYmx0LncJCWludmFsaWQKCW1vdi5sCQklZDAsLSglc3ApCgljbHIubAkJJWQwCglic3IJCXNsb2duZAkJCSMgbG9nKFgpLCBYIGRlbm9ybS4KCWZtb3YubAkJKCVzcCkrLCVmcGNyCglmbXVsLngJCUlOVl9MMTAoJXBjKSwlZnAwCglicmEJCXRfbWlueDIKCglnbG9iYWwJCXNsb2cyCiMtLWVudHJ5IHBvaW50IGZvciBMb2cyKFgpLCBYIGlzIG5vcm1hbGl6ZWQKc2xvZzI6Cgltb3YubAkJKCVhMCksJWQxCglibHQudwkJaW52YWxpZAoKCW1vdi5sCQk4KCVhMCksJWQxCglibmUuYgkJY29udGludWUJCSMgWCBpcyBub3QgMl5rCgoJbW92LmwJCTQoJWEwKSwlZDEKCWFuZC5sCQkmMHg3RkZGRkZGRiwlZDEKCWJuZS5iCQljb250aW51ZQoKIy0tWCA9IDJeay4KCW1vdi53CQkoJWEwKSwlZDEKCWFuZC5sCQkmMHgwMDAwN0ZGRiwlZDEKCXN1Yi5sCQkmMHgzRkZGLCVkMQoJYmVxLmwJCWxkX3B6ZXJvCglmbW92LmwJCSVkMCwlZnBjcgoJZm1vdi5sCQklZDEsJWZwMAoJYnJhCQl0X2lueDIKCmNvbnRpbnVlOgoJbW92LmwJCSVkMCwtKCVzcCkKCWNsci5sCQklZDAKCWJzcgkJc2xvZ24JCQkjIGxvZyhYKSwgWCBub3JtYWwuCglmbW92LmwJCSglc3ApKywlZnBjcgoJZm11bC54CQlJTlZfTDIoJXBjKSwlZnAwCglicmEJCXRfaW54MgoKaW52YWxpZDoKCWJyYQkJdF9vcGVycgoKCWdsb2JhbAkJc2xvZzJkCiMtLWVudHJ5IHBvaW50IGZvciBMb2cyKFgpLCBYIGlzIGRlbm9ybWFsaXplZApzbG9nMmQ6Cgltb3YubAkJKCVhMCksJWQxCglibHQudwkJaW52YWxpZAoJbW92LmwJCSVkMCwtKCVzcCkKCWNsci5sCQklZDAKCWJzcgkJc2xvZ25kCQkJIyBsb2coWCksIFggZGVub3JtLgoJZm1vdi5sCQkoJXNwKSssJWZwY3IKCWZtdWwueAkJSU5WX0wyKCVwYyksJWZwMAoJYnJhCQl0X21pbngyCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgc3R3b3RveCgpOiAgY29tcHV0ZXMgMioqWCBmb3IgYSBub3JtYWxpemVkIGlucHV0CQkJIwojIHN0d290b3hkKCk6IGNvbXB1dGVzIDIqKlggZm9yIGEgZGVub3JtYWxpemVkIGlucHV0CQkJIwojIHN0ZW50b3goKTogIGNvbXB1dGVzIDEwKipYIGZvciBhIG5vcm1hbGl6ZWQgaW5wdXQJCQkjCiMgc3RlbnRveGQoKTogY29tcHV0ZXMgMTAqKlggZm9yIGEgZGVub3JtYWxpemVkIGlucHV0CQkJIwojCQkJCQkJCQkJIwojIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBpbnB1dAkJCSMKIwlkMCA9IHJvdW5kIHByZWNpc2lvbixtb2RlCQkJCQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlmcDAgPSAyKipYIG9yIDEwKipYCQkJCQkJIwojCQkJCQkJCQkJIwojIEFDQ1VSQUNZIGFuZCBNT05PVE9OSUNJVFkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJVGhlIHJldHVybmVkIHJlc3VsdCBpcyB3aXRoaW4gMiB1bHBzIGluIDY0IHNpZ25pZmljYW50IGJpdCwJIwojCWkuZS4gd2l0aGluIDAuNTAwMSB1bHAgdG8gNTMgYml0cyBpZiB0aGUgcmVzdWx0IGlzIHN1YnNlcXVlbnRseQkjCiMJcm91bmRlZCB0byBkb3VibGUgcHJlY2lzaW9uLiBUaGUgcmVzdWx0IGlzIHByb3ZhYmx5IG1vbm90b25pYwkjCiMJaW4gZG91YmxlIHByZWNpc2lvbi4JCQkJCQkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwkJCQkJCQkJCSMKIwl0d290b3gJCQkJCQkJCSMKIwkxLiBJZiB8WHwgPiAxNjQ4MCwgZ28gdG8gRXhwQmlnLgkJCQkjCiMJCQkJCQkJCQkjCiMJMi4gSWYgfFh8IDwgMioqKC03MCksIGdvIHRvIEV4cFNtLgkJCQkjCiMJCQkJCQkJCQkjCiMJMy4gRGVjb21wb3NlIFggYXMgWCA9IE4vNjQgKyByIHdoZXJlIHxyfCA8PSAxLzEyOC4gRnVydGhlcm1vcmUJIwojCQlkZWNvbXBvc2UgTiBhcwkJCQkJCSMKIwkJIE4gPSA2NChNICsgTScpICsgaiwgIGogPSAwLDEsMiwuLi4sNjMuCQkJIwojCQkJCQkJCQkJIwojCTQuIE92ZXJ3cml0ZSByIDo9IHIgKiBsb2cyLiBUaGVuCQkJCSMKIwkJMioqWCA9IDIqKihNJykgKiAyKiooTSkgKiAyKiooai82NCkgKiBleHAocikuCQkjCiMJCUdvIHRvIGV4cHIgdG8gY29tcHV0ZSB0aGF0IGV4cHJlc3Npb24uCQkJIwojCQkJCQkJCQkJIwojCXRlbnRveAkJCQkJCQkJIwojCTEuIElmIHxYfCA+IDE2NDgwKmxvZ18xMCgyKSAoYmFzZSAxMCBsb2cgb2YgMiksIGdvIHRvIEV4cEJpZy4JIwojCQkJCQkJCQkJIwojCTIuIElmIHxYfCA8IDIqKigtNzApLCBnbyB0byBFeHBTbS4JCQkJIwojCQkJCQkJCQkJIwojCTMuIFNldCB5IDo9IFgqbG9nXzIoMTApKjY0IChiYXNlIDIgbG9nIG9mIDEwKS4gU2V0CQkjCiMJCU4gOj0gcm91bmQtdG8taW50KHkpLiBEZWNvbXBvc2UgTiBhcwkJCSMKIwkJIE4gPSA2NChNICsgTScpICsgaiwgIGogPSAwLDEsMiwuLi4sNjMuCQkJIwojCQkJCQkJCQkJIwojCTQuIERlZmluZSByIGFzCQkJCQkJCSMKIwkJciA6PSAoKFggLSBOKkwxKS1OKkwyKSAqIEwxMAkJCQkjCiMJCXdoZXJlIEwxLCBMMiBhcmUgdGhlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHBhcnRzIG9mCSMKIwkJbG9nXzEwKDIpLzY0IGFuZCBMMTAgaXMgdGhlIG5hdHVyYWwgbG9nIG9mIDEwLiBUaGVuCSMKIwkJMTAqKlggPSAyKiooTScpICogMioqKE0pICogMioqKGovNjQpICogZXhwKHIpLgkJIwojCQlHbyB0byBleHByIHRvIGNvbXB1dGUgdGhhdCBleHByZXNzaW9uLgkJCSMKIwkJCQkJCQkJCSMKIwlleHByCQkJCQkJCQkjCiMJMS4gRmV0Y2ggMioqKGovNjQpIGZyb20gdGFibGUgYXMgRmFjdDEgYW5kIEZhY3QyLgkJIwojCQkJCQkJCQkJIwojCTIuIE92ZXJ3cml0ZSBGYWN0MSBhbmQgRmFjdDIgYnkJCQkJCSMKIwkJRmFjdDEgOj0gMioqKE0pICogRmFjdDEJCQkJCSMKIwkJRmFjdDIgOj0gMioqKE0pICogRmFjdDIJCQkJCSMKIwkJVGh1cyBGYWN0MSArIEZhY3QyID0gMioqKE0pICogMioqKGovNjQpLgkJIwojCQkJCQkJCQkJIwojCTMuIENhbGN1bGF0ZSBQIHdoZXJlIDEgKyBQIGFwcHJveGltYXRlcyBleHAocik6CQkJIwojCQlQID0gciArIHIqciooQTErciooQTIrLi4uK3IqQTUpKS4JCQkjCiMJCQkJCQkJCQkjCiMJNC4gTGV0IEFkakZhY3QgOj0gMioqKE0nKS4gUmV0dXJuCQkJCSMKIwkJQWRqRmFjdCAqICggRmFjdDEgKyAoKEZhY3QxKlApICsgRmFjdDIpICkuCQkjCiMJCUV4aXQuCQkJCQkJCSMKIwkJCQkJCQkJCSMKIwlFeHBCaWcJCQkJCQkJCSMKIwkxLiBHZW5lcmF0ZSBvdmVyZmxvdyBieSBIdWdlICogSHVnZSBpZiBYID4gMDsgb3RoZXJ3aXNlLAkjCiMJICAgICAgICBnZW5lcmF0ZSB1bmRlcmZsb3cgYnkgVGlueSAqIFRpbnkuCQkJIwojCQkJCQkJCQkJIwojCUV4cFNtCQkJCQkJCQkjCiMJMS4gUmV0dXJuIDEgKyBYLgkJCQkJCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKTDJURU42NDoKCWxvbmcJCTB4NDA2QTkzNEYsMHgwOTc5QTM3MQkjIDY0TE9HMTAvTE9HMgpMMTBUV08xOgoJbG9uZwkJMHgzRjczNDQxMywweDUwOUY4MDAwCSMgTE9HMi82NExPRzEwCgpMMTBUV08yOgoJbG9uZwkJMHhCRkNEMDAwMCwweEMwMjE5REMxLDB4REE5OTRGRDIsMHgwMDAwMDAwMAoKTE9HMTA6CWxvbmcJCTB4NDAwMDAwMDAsMHg5MzVEOERERCwweEFBQThBQzE3LDB4MDAwMDAwMDAKCkxPRzI6CWxvbmcJCTB4M0ZGRTAwMDAsMHhCMTcyMTdGNywweEQxQ0Y3OUFDLDB4MDAwMDAwMDAKCkVYUEE1Oglsb25nCQkweDNGNTZDMTZELDB4NkY3QkQwQjIKRVhQQTQ6CWxvbmcJCTB4M0Y4MTExMTIsMHgzMDJDNzEyQwpFWFBBMzoJbG9uZwkJMHgzRkE1NTU1NSwweDU1NTU0Q0MxCkVYUEEyOglsb25nCQkweDNGQzU1NTU1LDB4NTU1NTRBNTQKRVhQQTE6CWxvbmcJCTB4M0ZFMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKClRFWFBUQkw6Cglsb25nCQkweDNGRkYwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAwMCwweDNGNzM4MDAwCglsb25nCQkweDNGRkYwMDAwLDB4ODE2NEQxRjMsMHhCQzAzMDc3MywweDNGQkVGN0NBCglsb25nCQkweDNGRkYwMDAwLDB4ODJDRDg2OTgsMHhBQzJCQTFENywweDNGQkRGOEE5Cglsb25nCQkweDNGRkYwMDAwLDB4ODQzQTI4QzMsMHhBQ0RFNDA0NiwweDNGQkNEN0M5Cglsb25nCQkweDNGRkYwMDAwLDB4ODVBQUMzNjcsMHhDQzQ4N0IxNSwweEJGQkRFOERBCglsb25nCQkweDNGRkYwMDAwLDB4ODcxRjYxOTYsMHg5RThEMTAxMCwweDNGQkRFODVDCglsb25nCQkweDNGRkYwMDAwLDB4ODg5ODBFODAsMHg5MkRBODUyNywweDNGQkVCQkYxCglsb25nCQkweDNGRkYwMDAwLDB4OEExNEQ1NzUsMHg0OTZFRkQ5QSwweDNGQkI4MENBCglsb25nCQkweDNGRkYwMDAwLDB4OEI5NUMxRTMsMHhFQThCRDZFNywweEJGQkE4MzczCglsb25nCQkweDNGRkYwMDAwLDB4OEQxQURGNUIsMHg3RTVCQTlFNiwweEJGQkU5NjcwCglsb25nCQkweDNGRkYwMDAwLDB4OEVBNDM5OEIsMHg0NUNENTNDMCwweDNGQkRCNzAwCglsb25nCQkweDNGRkYwMDAwLDB4OTAzMURDNDMsMHgxNDY2QjFEQywweDNGQkVFRUIwCglsb25nCQkweDNGRkYwMDAwLDB4OTFDM0QzNzMsMHhBQjExQzMzNiwweDNGQkJGRDZECglsb25nCQkweDNGRkYwMDAwLDB4OTM1QTJCMkYsMHgxM0U2RTkyQywweEJGQkRCMzE5Cglsb25nCQkweDNGRkYwMDAwLDB4OTRGNEVGQTgsMHhGRUY3MDk2MSwweDNGQkRCQTJCCglsb25nCQkweDNGRkYwMDAwLDB4OTY5NDJEMzcsMHgyMDE4NUEwMCwweDNGQkU5MUQ1Cglsb25nCQkweDNGRkYwMDAwLDB4OTgzN0YwNTEsMHg4REI4QTk2RiwweDNGQkU4RDVBCglsb25nCQkweDNGRkYwMDAwLDB4OTlFMDQ1OTMsMHgyMEI3RkE2NSwweEJGQkNERTdCCglsb25nCQkweDNGRkYwMDAwLDB4OUI4RDM5QjksMHhENTRFNTUzOSwweEJGQkVCQUFGCglsb25nCQkweDNGRkYwMDAwLDB4OUQzRUQ5QTcsMHgyQ0ZGQjc1MSwweEJGQkQ4NkRBCglsb25nCQkweDNGRkYwMDAwLDB4OUVGNTMyNjAsMHg5MUExMTFBRSwweEJGQkVCRURECglsb25nCQkweDNGRkYwMDAwLDB4QTBCMDUxMEYsMHhCOTcxNEZDMiwweDNGQkNDOTZFCglsb25nCQkweDNGRkYwMDAwLDB4QTI3MDQzMDMsMHgwQzQ5NjgxOSwweEJGQkVDOTBCCglsb25nCQkweDNGRkYwMDAwLDB4QTQzNTE1QUUsMHgwOUU2ODA5RSwweDNGQkJEMURCCglsb25nCQkweDNGRkYwMDAwLDB4QTVGRUQ2QTksMHhCMTUxMzhFQSwweDNGQkNFNUVCCglsb25nCQkweDNGRkYwMDAwLDB4QTdDRDkzQjQsMHhFOTY1MzU2QSwweEJGQkVDMjc0Cglsb25nCQkweDNGRkYwMDAwLDB4QTlBMTVBQjQsMHhFQTdDMEVGOCwweDNGQkVBODNDCglsb25nCQkweDNGRkYwMDAwLDB4QUI3QTM5QjUsMHhBOTNFRDMzNywweDNGQkVDQjAwCglsb25nCQkweDNGRkYwMDAwLDB4QUQ1ODNFRUEsMHg0MkExNEFDNiwweDNGQkU5MzAxCglsb25nCQkweDNGRkYwMDAwLDB4QUYzQjc4QUQsMHg2OTBBNDM3NSwweEJGQkQ4MzY3Cglsb25nCQkweDNGRkYwMDAwLDB4QjEyM0Y1ODEsMHhEMkFDMjU5MCwweEJGQkVGMDVGCglsb25nCQkweDNGRkYwMDAwLDB4QjMxMUM0MTIsMHhBOTExMjQ4OSwweDNGQkRGQjNDCglsb25nCQkweDNGRkYwMDAwLDB4QjUwNEYzMzMsMHhGOURFNjQ4NCwweDNGQkVCMkZCCglsb25nCQkweDNGRkYwMDAwLDB4QjZGRDkxRTMsMHgyOEQxNzc5MSwweDNGQkFFMkNCCglsb25nCQkweDNGRkYwMDAwLDB4QjhGQkFGNDcsMHg2MkZCOUVFOSwweDNGQkNEQzNDCglsb25nCQkweDNGRkYwMDAwLDB4QkFGRjVBQjIsMHgxMzNFNDVGQiwweDNGQkVFOUFBCglsb25nCQkweDNGRkYwMDAwLDB4QkQwOEEzOUYsMHg1ODBDMzZCRiwweEJGQkVBRUZECglsb25nCQkweDNGRkYwMDAwLDB4QkYxNzk5QjYsMHg3QTczMTA4MywweEJGQkNCRjUxCglsb25nCQkweDNGRkYwMDAwLDB4QzEyQzRDQ0EsMHg2NjcwOTQ1NiwweDNGQkVGODhBCglsb25nCQkweDNGRkYwMDAwLDB4QzM0NkNDREEsMHgyNDk3NjQwNywweDNGQkQ4M0IyCglsb25nCQkweDNGRkYwMDAwLDB4QzU2NzJBMTEsMHg1NTA2REFERCwweDNGQkRGOEFCCglsb25nCQkweDNGRkYwMDAwLDB4Qzc4RDc0QzgsMHhBQkI5QjE1RCwweEJGQkRGQjE3Cglsb25nCQkweDNGRkYwMDAwLDB4QzlCOUJEODYsMHg2RTJGMjdBMywweEJGQkVGRTNDCglsb25nCQkweDNGRkYwMDAwLDB4Q0JFQzE0RkUsMHhGMjcyN0M1RCwweEJGQkJCNkY4Cglsb25nCQkweDNGRkYwMDAwLDB4Q0UyNDhDMTUsMHgxRjg0ODBFNCwweEJGQkNFRTUzCglsb25nCQkweDNGRkYwMDAwLDB4RDA2MzMzREEsMHhFRjJCMjU5NSwweEJGQkRBNEFFCglsb25nCQkweDNGRkYwMDAwLDB4RDJBODFEOTEsMHhGMTJBRTQ1QSwweDNGQkM5MTI0Cglsb25nCQkweDNGRkYwMDAwLDB4RDRGMzVBQUIsMHhDRkVERkExRiwweDNGQkVCMjQzCglsb25nCQkweDNGRkYwMDAwLDB4RDc0NEZDQ0EsMHhENjlENkFGNCwweDNGQkRFNjlBCglsb25nCQkweDNGRkYwMDAwLDB4RDk5RDE1QzIsMHg3OEFGRDdCNiwweEJGQjhCQzYxCglsb25nCQkweDNGRkYwMDAwLDB4REJGQkI3OTcsMHhEQUYyMzc1NSwweDNGQkRGNjEwCglsb25nCQkweDNGRkYwMDAwLDB4REU2MEY0ODIsMHg1RTBFOTEyNCwweEJGQkQ4QkUxCglsb25nCQkweDNGRkYwMDAwLDB4RTBDQ0RFRUMsMHgyQTk0RTExMSwweDNGQkFDQjEyCglsb25nCQkweDNGRkYwMDAwLDB4RTMzRjg5NzIsMHhCRThBNUE1MSwweDNGQkI5QkZFCglsb25nCQkweDNGRkYwMDAwLDB4RTVCOTA2RTcsMHg3QzgzNDhBOCwweDNGQkNGMkY0Cglsb25nCQkweDNGRkYwMDAwLDB4RTgzOTZBNTAsMHgzQzRCREM2OCwweDNGQkVGMjJGCglsb25nCQkweDNGRkYwMDAwLDB4RUFDMEM2RTcsMHhERDI0MzkyRiwweEJGQkRCRjRBCglsb25nCQkweDNGRkYwMDAwLDB4RUQ0RjMwMUUsMHhEOTk0MkI4NCwweDNGQkVDMDFBCglsb25nCQkweDNGRkYwMDAwLDB4RUZFNEI5OUIsMHhEQ0RBRjVDQiwweDNGQkU4Q0FDCglsb25nCQkweDNGRkYwMDAwLDB4RjI4MTc3M0MsMHg1OUZGQjEzQSwweEJGQkNCQjNGCglsb25nCQkweDNGRkYwMDAwLDB4RjUyNTdEMTUsMHgyNDg2Q0MyQywweDNGQkVGNzNBCglsb25nCQkweDNGRkYwMDAwLDB4RjdEMERGNzMsMHgwQUQxM0JCOSwweEJGQjhCNzk1Cglsb25nCQkweDNGRkYwMDAwLDB4RkE4M0IyREIsMHg3MjJBMDMzQSwweDNGQkVGODRCCglsb25nCQkweDNGRkYwMDAwLDB4RkQzRTBDMEMsMHhGNDg2QzE3NSwweEJGQkVGNTgxCgoJc2V0CQlJTlQsTF9TQ1IxCgoJc2V0CQlYLEZQX1NDUjAKCXNldAkJWERDQVJFLFgrMgoJc2V0CQlYRlJBQyxYKzQKCglzZXQJCUFESkZBQ1QsRlBfU0NSMAoKCXNldAkJRkFDVDEsRlBfU0NSMAoJc2V0CQlGQUNUMUhJLEZBQ1QxKzQKCXNldAkJRkFDVDFMT1csRkFDVDErOAoKCXNldAkJRkFDVDIsRlBfU0NSMQoJc2V0CQlGQUNUMkhJLEZBQ1QyKzQKCXNldAkJRkFDVDJMT1csRkFDVDIrOAoKCWdsb2JhbAkJc3R3b3RveAojLS1FTlRSWSBQT0lOVCBGT1IgMioqKFgpLCBIRVJFIFggSVMgRklOSVRFLCBOT04tWkVSTywgQU5EIE5PVCBOQU4nUwpzdHdvdG94OgoJZm1vdm0ueAkJKCVhMCksJjB4ODAJCSMgTE9BRCBJTlBVVAoKCW1vdi5sCQkoJWEwKSwlZDEKCW1vdi53CQk0KCVhMCksJWQxCglmbW92LngJCSVmcDAsWCglYTYpCglhbmQubAkJJjB4N0ZGRkZGRkYsJWQxCgoJY21wLmwJCSVkMSwmMHgzRkI5ODAwMAkJIyB8WHwgPj0gMioqKC03MCk/CgliZ2UuYgkJVFdPT0sxCglicmEudwkJRVhQQk9SUwoKVFdPT0sxOgoJY21wLmwJCSVkMSwmMHg0MDBEODBDMAkJIyB8WHwgPiAxNjQ4MD8KCWJsZS5iCQlUV09NQUlOCglicmEudwkJRVhQQk9SUwoKVFdPTUFJTjoKIy0tVVNVQUwgQ0FTRSwgMl4oLTcwKSA8PSB8WHwgPD0gMTY0ODAKCglmbW92LngJCSVmcDAsJWZwMQoJZm11bC5zCQkmMHg0MjgwMDAwMCwlZnAxCSMgNjQgKiBYCglmbW92LmwJCSVmcDEsSU5UKCVhNikJCSMgTiA9IFJPVU5ELVRPLUlOVCg2NCBYKQoJbW92LmwJCSVkMiwtKCVzcCkKCWxlYQkJVEVYUFRCTCglcGMpLCVhMQkjIExPQUQgQUREUkVTUyBPRiBUQUJMRSBPRiAyXihKLzY0KQoJZm1vdi5sCQlJTlQoJWE2KSwlZnAxCQkjIE4gLS0+IEZMT0FUSU5HIEZNVAoJbW92LmwJCUlOVCglYTYpLCVkMQoJbW92LmwJCSVkMSwlZDIKCWFuZC5sCQkmMHgzRiwlZDEJCSMgRDAgSVMgSgoJYXNsLmwJCSY0LCVkMQkJCSMgRElTUExBQ0VNRU5UIEZPUiAyXihKLzY0KQoJYWRkLmwJCSVkMSwlYTEJCQkjIEFERFJFU1MgRk9SIDJeKEovNjQpCglhc3IubAkJJjYsJWQyCQkJIyBkMiBJUyBMLCBOID0gNjRMICsgSgoJbW92LmwJCSVkMiwlZDEKCWFzci5sCQkmMSwlZDEJCQkjIEQwIElTIE0KCXN1Yi5sCQklZDEsJWQyCQkJIyBkMiBJUyBNJywgTiA9IDY0KE0rTScpICsgSgoJYWRkLmwJCSYweDNGRkYsJWQyCgojLS1TVU1NQVJZOiBhMSBJUyBBRERSRVNTIEZPUiBUSEUgTEVBRElORyBQT1JUSU9OIE9GIDJeKEovNjQpLAojLS1EMCBJUyBNIFdIRVJFIE4gPSA2NChNK00nKSArIEouIE5PVEUgVEhBVCB8TXwgPD0gMTYxNDAgQlkgREVTSUdOLgojLS1BREpGQUNUID0gMl4oTScpLgojLS1SRUdJU1RFUlMgU0FWRUQgU08gRkFSIEFSRSAoSU4gT1JERVIpIEZQQ1IsIEQwLCBGUDEsIGExLCBBTkQgRlAyLgoKCWZtb3ZtLngJCSYweDBjLC0oJXNwKQkJIyBzYXZlIGZwMi9mcDMKCglmbXVsLnMJCSYweDNDODAwMDAwLCVmcDEJIyAoMS82NCkqTgoJbW92LmwJCSglYTEpKyxGQUNUMSglYTYpCgltb3YubAkJKCVhMSkrLEZBQ1QxSEkoJWE2KQoJbW92LmwJCSglYTEpKyxGQUNUMUxPVyglYTYpCgltb3YudwkJKCVhMSkrLEZBQ1QyKCVhNikKCglmc3ViLngJCSVmcDEsJWZwMAkJIyBYIC0gKDEvNjQpKklOVCg2NCBYKQoKCW1vdi53CQkoJWExKSssRkFDVDJISSglYTYpCgljbHIudwkJRkFDVDJISSsyKCVhNikKCWNsci5sCQlGQUNUMkxPVyglYTYpCglhZGQudwkJJWQxLEZBQ1QxKCVhNikKCWZtdWwueAkJTE9HMiglcGMpLCVmcDAJCSMgRlAwIElTIFIKCWFkZC53CQklZDEsRkFDVDIoJWE2KQoKCWJyYS53CQlleHByCgpFWFBCT1JTOgojLS1GUENSLCBEMCBTQVZFRAoJY21wLmwJCSVkMSwmMHgzRkZGODAwMAoJYmd0LmIJCVRFWFBCSUcKCiMtLXxYfCBJUyBTTUFMTCwgUkVUVVJOIDEgKyBYCgoJZm1vdi5sCQklZDAsJWZwY3IJCSMgcmVzdG9yZSB1c2VycyByb3VuZCBwcmVjLG1vZGUKCWZhZGQucwkJJjB4M0Y4MDAwMDAsJWZwMAkjIFJFVFVSTiAxICsgWAoJYnJhCQl0X3BpbngyCgpURVhQQklHOgojLS18WHwgSVMgTEFSR0UsIEdFTkVSQVRFIE9WRVJGTE9XIElGIFggPiAwOyBFTFNFIEdFTkVSQVRFIFVOREVSRkxPVwojLS1SRUdJU1RFUlMgU0FWRSBTTyBGQVIgQVJFIEZQQ1IgQU5EICBEMAoJbW92LmwJCVgoJWE2KSwlZDEKCWNtcC5sCQklZDEsJjAKCWJsdC5iCQlFWFBORUcKCglicmEJCXRfb3ZmbDIJCQkjIHRfb3ZmbCBleHBlY3RzIHBvc2l0aXZlIHZhbHVlCgpFWFBORUc6CglicmEJCXRfdW5mbDIJCQkjIHRfdW5mbCBleHBlY3RzIHBvc2l0aXZlIHZhbHVlCgoJZ2xvYmFsCQlzdHdvdG94ZApzdHdvdG94ZDoKIy0tRU5UUlkgUE9JTlQgRk9SIDIqKihYKSBGT1IgREVOT1JNQUxJWkVEIEFSR1VNRU5UCgoJZm1vdi5sCQklZDAsJWZwY3IJCSMgc2V0IHVzZXIncyByb3VuZGluZyBtb2RlL3ByZWNpc2lvbgoJZm1vdi5zCQkmMHgzRjgwMDAwMCwlZnAwCSMgUkVUVVJOIDEgKyBYCgltb3YubAkJKCVhMCksJWQxCglvci5sCQkmMHgwMDgwMDAwMSwlZDEKCWZhZGQucwkJJWQxLCVmcDAKCWJyYQkJdF9waW54MgoKCWdsb2JhbAkJc3RlbnRveAojLS1FTlRSWSBQT0lOVCBGT1IgMTAqKihYKSwgSEVSRSBYIElTIEZJTklURSwgTk9OLVpFUk8sIEFORCBOT1QgTkFOJ1MKc3RlbnRveDoKCWZtb3ZtLngJCSglYTApLCYweDgwCQkjIExPQUQgSU5QVVQKCgltb3YubAkJKCVhMCksJWQxCgltb3YudwkJNCglYTApLCVkMQoJZm1vdi54CQklZnAwLFgoJWE2KQoJYW5kLmwJCSYweDdGRkZGRkZGLCVkMQoKCWNtcC5sCQklZDEsJjB4M0ZCOTgwMDAJCSMgfFh8ID49IDIqKigtNzApPwoJYmdlLmIJCVRFTk9LMQoJYnJhLncJCUVYUEJPUlMKClRFTk9LMToKCWNtcC5sCQklZDEsJjB4NDAwQjlCMDcJCSMgfFh8IDw9IDE2NDgwKmxvZzIvbG9nMTAgPwoJYmxlLmIJCVRFTk1BSU4KCWJyYS53CQlFWFBCT1JTCgpURU5NQUlOOgojLS1VU1VBTCBDQVNFLCAyXigtNzApIDw9IHxYfCA8PSAxNjQ4MCBMT0cgMiAvIExPRyAxMAoKCWZtb3YueAkJJWZwMCwlZnAxCglmbXVsLmQJCUwyVEVONjQoJXBjKSwlZnAxCSMgWCo2NCpMT0cxMC9MT0cyCglmbW92LmwJCSVmcDEsSU5UKCVhNikJCSMgTj1JTlQoWCo2NCpMT0cxMC9MT0cyKQoJbW92LmwJCSVkMiwtKCVzcCkKCWxlYQkJVEVYUFRCTCglcGMpLCVhMQkjIExPQUQgQUREUkVTUyBPRiBUQUJMRSBPRiAyXihKLzY0KQoJZm1vdi5sCQlJTlQoJWE2KSwlZnAxCQkjIE4gLS0+IEZMT0FUSU5HIEZNVAoJbW92LmwJCUlOVCglYTYpLCVkMQoJbW92LmwJCSVkMSwlZDIKCWFuZC5sCQkmMHgzRiwlZDEJCSMgRDAgSVMgSgoJYXNsLmwJCSY0LCVkMQkJCSMgRElTUExBQ0VNRU5UIEZPUiAyXihKLzY0KQoJYWRkLmwJCSVkMSwlYTEJCQkjIEFERFJFU1MgRk9SIDJeKEovNjQpCglhc3IubAkJJjYsJWQyCQkJIyBkMiBJUyBMLCBOID0gNjRMICsgSgoJbW92LmwJCSVkMiwlZDEKCWFzci5sCQkmMSwlZDEJCQkjIEQwIElTIE0KCXN1Yi5sCQklZDEsJWQyCQkJIyBkMiBJUyBNJywgTiA9IDY0KE0rTScpICsgSgoJYWRkLmwJCSYweDNGRkYsJWQyCgojLS1TVU1NQVJZOiBhMSBJUyBBRERSRVNTIEZPUiBUSEUgTEVBRElORyBQT1JUSU9OIE9GIDJeKEovNjQpLAojLS1EMCBJUyBNIFdIRVJFIE4gPSA2NChNK00nKSArIEouIE5PVEUgVEhBVCB8TXwgPD0gMTYxNDAgQlkgREVTSUdOLgojLS1BREpGQUNUID0gMl4oTScpLgojLS1SRUdJU1RFUlMgU0FWRUQgU08gRkFSIEFSRSAoSU4gT1JERVIpIEZQQ1IsIEQwLCBGUDEsIGExLCBBTkQgRlAyLgoJZm1vdm0ueAkJJjB4MGMsLSglc3ApCQkjIHNhdmUgZnAyL2ZwMwoKCWZtb3YueAkJJWZwMSwlZnAyCgoJZm11bC5kCQlMMTBUV08xKCVwYyksJWZwMQkjIE4qKExPRzIvNjRMT0cxMClfTEVBRAoJbW92LmwJCSglYTEpKyxGQUNUMSglYTYpCgoJZm11bC54CQlMMTBUV08yKCVwYyksJWZwMgkjIE4qKExPRzIvNjRMT0cxMClfVFJBSUwKCgltb3YubAkJKCVhMSkrLEZBQ1QxSEkoJWE2KQoJbW92LmwJCSglYTEpKyxGQUNUMUxPVyglYTYpCglmc3ViLngJCSVmcDEsJWZwMAkJIyBYIC0gTiBMX0xFQUQKCW1vdi53CQkoJWExKSssRkFDVDIoJWE2KQoKCWZzdWIueAkJJWZwMiwlZnAwCQkjIFggLSBOIExfVFJBSUwKCgltb3YudwkJKCVhMSkrLEZBQ1QySEkoJWE2KQoJY2xyLncJCUZBQ1QySEkrMiglYTYpCgljbHIubAkJRkFDVDJMT1coJWE2KQoKCWZtdWwueAkJTE9HMTAoJXBjKSwlZnAwCQkjIEZQMCBJUyBSCglhZGQudwkJJWQxLEZBQ1QxKCVhNikKCWFkZC53CQklZDEsRkFDVDIoJWE2KQoKZXhwcjoKIy0tRlBDUiwgRlAyLCBGUDMgQVJFIFNBVkVEIElOIE9SREVSIEFTIFNIT1dOLgojLS1BREpGQUNUIENPTlRBSU5TIDIqKihNJyksIEZBQ1QxICsgRkFDVDIgPSAyKiooTSkgKiAyKiooSi82NCkuCiMtLUZQMCBJUyBSLiBUSEUgRk9MTE9XSU5HIENPREUgQ09NUFVURVMKIy0tCTIqKihNJytNKSAqIDIqKihKLzY0KSAqIEVYUChSKQoKCWZtb3YueAkJJWZwMCwlZnAxCglmbXVsLngJCSVmcDEsJWZwMQkJIyBGUDEgSVMgUyA9IFIqUgoKCWZtb3YuZAkJRVhQQTUoJXBjKSwlZnAyCQkjIEZQMiBJUyBBNQoJZm1vdi5kCQlFWFBBNCglcGMpLCVmcDMJCSMgRlAzIElTIEE0CgoJZm11bC54CQklZnAxLCVmcDIJCSMgRlAyIElTIFMqQTUKCWZtdWwueAkJJWZwMSwlZnAzCQkjIEZQMyBJUyBTKkE0CgoJZmFkZC5kCQlFWFBBMyglcGMpLCVmcDIJCSMgRlAyIElTIEEzK1MqQTUKCWZhZGQuZAkJRVhQQTIoJXBjKSwlZnAzCQkjIEZQMyBJUyBBMitTKkE0CgoJZm11bC54CQklZnAxLCVmcDIJCSMgRlAyIElTIFMqKEEzK1MqQTUpCglmbXVsLngJCSVmcDEsJWZwMwkJIyBGUDMgSVMgUyooQTIrUypBNCkKCglmYWRkLmQJCUVYUEExKCVwYyksJWZwMgkJIyBGUDIgSVMgQTErUyooQTMrUypBNSkKCWZtdWwueAkJJWZwMCwlZnAzCQkjIEZQMyBJUyBSKlMqKEEyK1MqQTQpCgoJZm11bC54CQklZnAxLCVmcDIJCSMgRlAyIElTIFMqKEExK1MqKEEzK1MqQTUpKQoJZmFkZC54CQklZnAzLCVmcDAJCSMgRlAwIElTIFIrUipTKihBMitTKkE0KQoJZmFkZC54CQklZnAyLCVmcDAJCSMgRlAwIElTIEVYUChSKSAtIDEKCglmbW92bS54CQkoJXNwKSssJjB4MzAJCSMgcmVzdG9yZSBmcDIvZnAzCgojLS1GSU5BTCBSRUNPTlNUUlVDVElPTiBQUk9DRVNTCiMtLUVYUChYKSA9IDJeTSoyXihKLzY0KSArIDJeTSoyXihKLzY0KSooRVhQKFIpLTEpICAtICAoMSBPUiAwKQoKCWZtdWwueAkJRkFDVDEoJWE2KSwlZnAwCglmYWRkLngJCUZBQ1QyKCVhNiksJWZwMAoJZmFkZC54CQlGQUNUMSglYTYpLCVmcDAKCglmbW92LmwJCSVkMCwlZnBjcgkJIyByZXN0b3JlIHVzZXJzIHJvdW5kIHByZWMsbW9kZQoJbW92LncJCSVkMixBREpGQUNUKCVhNikJIyBJTlNFUlQgRVhQT05FTlQKCW1vdi5sCQkoJXNwKSssJWQyCgltb3YubAkJJjB4ODAwMDAwMDAsQURKRkFDVCs0KCVhNikKCWNsci5sCQlBREpGQUNUKzgoJWE2KQoJbW92LmIJCSZGTVVMX09QLCVkMQkJIyBsYXN0IGluc3QgaXMgTVVMCglmbXVsLngJCUFESkZBQ1QoJWE2KSwlZnAwCSMgRklOQUwgQURKVVNUTUVOVAoJYnJhCQl0X2NhdGNoCgoJZ2xvYmFsCQlzdGVudG94ZApzdGVudG94ZDoKIy0tRU5UUlkgUE9JTlQgRk9SIDEwKiooWCkgRk9SIERFTk9STUFMSVpFRCBBUkdVTUVOVAoKCWZtb3YubAkJJWQwLCVmcGNyCQkjIHNldCB1c2VyJ3Mgcm91bmRpbmcgbW9kZS9wcmVjaXNpb24KCWZtb3YucwkJJjB4M0Y4MDAwMDAsJWZwMAkjIFJFVFVSTiAxICsgWAoJbW92LmwJCSglYTApLCVkMQoJb3IubAkJJjB4MDA4MDAwMDEsJWQxCglmYWRkLnMJCSVkMSwlZnAwCglicmEJCXRfcGlueDIKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBzbW92Y3IoKTogcmV0dXJucyB0aGUgUk9NIGNvbnN0YW50IGF0IHRoZSBvZmZzZXQgc3BlY2lmaWVkIGluIGQxCSMKIwkgICAgcm91bmRlZCB0byB0aGUgbW9kZSBhbmQgcHJlY2lzaW9uIHNwZWNpZmllZCBpbiBkMC4JCSMKIwkJCQkJCQkJCSMKIyBJTlBVVAkqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWQwID0gcm5kIHByZWMsbW9kZQkJCQkJCSMKIwlkMSA9IFJPTSBvZmZzZXQJCQkJCQkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJZnAwID0gdGhlIFJPTSBjb25zdGFudCByb3VuZGVkIHRvIHRoZSB1c2VyJ3Mgcm91bmRpbmcgbW9kZSxwcmVjCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCWdsb2JhbAkJc21vdmNyCnNtb3ZjcjoKCW1vdi5sCQklZDEsLSglc3ApCQkjIHNhdmUgcm9tIG9mZnNldCBmb3IgYSBzZWMKCglsc3IuYgkJJjB4NCwlZDAJCSMgc2hpZnQgY3RybCBiaXRzIHRvIGxvCgltb3YubAkJJWQwLCVkMQkJCSMgbWFrZSBhIGNvcHkKCWFuZGkudwkJJjB4MywlZDEJCSMgZXh0cmFjdCBybmQgbW9kZQoJYW5kaS53CQkmMHhjLCVkMAkJIyBleHRyYWN0IHJuZCBwcmVjCglzd2FwCQklZDAJCQkjIHB1dCBybmQgcHJlYyBpbiBoaQoJbW92LncJCSVkMSwlZDAJCQkjIHB1dCBybmQgbW9kZSBpbiBsbwoKCW1vdi5sCQkoJXNwKSssJWQxCQkjIGdldCByb20gb2Zmc2V0CgojCiMgY2hlY2sgcmFuZ2Ugb2Ygb2Zmc2V0CiMKCXRzdC5iCQklZDEJCQkjIGlmIHplcm8sIG9mZnNldCBpcyB0byBwaQoJYmVxLmIJCXBpX3RibAkJCSMgaXQgaXMgcGkKCWNtcGkuYgkJJWQxLCYweDBhCQkjIGNoZWNrIHJhbmdlICQwMSAtICQwYQoJYmxlLmIJCXpfdmFsCQkJIyBpZiBpbiB0aGlzIHJhbmdlLCByZXR1cm4gemVybwoJY21waS5iCQklZDEsJjB4MGUJCSMgY2hlY2sgcmFuZ2UgJDBiIC0gJDBlCglibGUuYgkJc21fdGJsCQkJIyB2YWxpZCBjb25zdGFudHMgaW4gdGhpcyByYW5nZQoJY21waS5iCQklZDEsJjB4MmYJCSMgY2hlY2sgcmFuZ2UgJDEwIC0gJDJmCglibGUuYgkJel92YWwJCQkjIGlmIGluIHRoaXMgcmFuZ2UsIHJldHVybiB6ZXJvCgljbXBpLmIJCSVkMSwmMHgzZgkJIyBjaGVjayByYW5nZSAkMzAgLSAkM2YKCWJsZS5iCQliZ190YmwJCQkjIHZhbGlkIGNvbnN0YW50cyBpbiB0aGlzIHJhbmdlCgp6X3ZhbDoKCWJyYS5sCQlsZF9wemVybwkJIyByZXR1cm4gYSB6ZXJvCgojCiMgdGhlIGFuc3dlciBpcyBQSSByb3VuZGVkIHRvIHRoZSBwcm9wZXIgcHJlY2lzaW9uLgojCiMgZmV0Y2ggYSBwb2ludGVyIHRvIHRoZSBhbnN3ZXIgdGFibGUgcmVsYXRpbmcgdG8gdGhlIHByb3BlciByb3VuZGluZwojIHByZWNpc2lvbi4KIwpwaV90Ymw6Cgl0c3QuYgkJJWQwCQkJIyBpcyBybW9kZSBSTj8KCWJuZS5iCQlwaV9ub3Rfcm4JCSMgbm8KcGlfcm46CglsZWEubAkJUElSTiglcGMpLCVhMAkJIyB5ZXM7IGxvYWQgUEkgUk4gdGFibGUgYWRkcgoJYnJhLncJCXNldF9maW54CnBpX25vdF9ybjoKCWNtcGkuYgkJJWQwLCZycF9tb2RlCQkjIGlzIHJtb2RlIFJQPwoJYmVxLmIJCXBpX3JwCQkJIyB5ZXMKcGlfcnpybToKCWxlYS5sCQlQSVJaUk0oJXBjKSwlYTAJCSMgbm87IGxvYWQgUEkgUlosUk0gdGFibGUgYWRkcgoJYnJhLmIJCXNldF9maW54CnBpX3JwOgoJbGVhLmwJCVBJUlAoJXBjKSwlYTAJCSMgbG9hZCBQSSBSUCB0YWJsZSBhZGRyCglicmEuYgkJc2V0X2ZpbngKCiMKIyB0aGUgYW5zd2VyIGlzIG9uZSBvZjoKIwkkMEIJbG9nMTAoMikJKGluZXhhY3QpCiMJJDBDCWUJCShpbmV4YWN0KQojCSQwRAlsb2cyKGUpCQkoaW5leGFjdCkKIwkkMEUJbG9nMTAoZSkJKGV4YWN0KQojCiMgZmV0Y2ggYSBwb2ludGVyIHRvIHRoZSBhbnN3ZXIgdGFibGUgcmVsYXRpbmcgdG8gdGhlIHByb3BlciByb3VuZGluZwojIHByZWNpc2lvbi4KIwpzbV90Ymw6CglzdWJpLmIJCSYweGIsJWQxCQkjIG1ha2Ugb2Zmc2V0IGluIDAtNCByYW5nZQoJdHN0LmIJCSVkMAkJCSMgaXMgcm1vZGUgUk4/CglibmUuYgkJc21fbm90X3JuCQkjIG5vCnNtX3JuOgoJbGVhLmwJCVNNQUxSTiglcGMpLCVhMAkJIyB5ZXM7IGxvYWQgUk4gdGFibGUgYWRkcgpzbV90YmxfY29udDoKCWNtcGkuYgkJJWQxLCYweDIJCSMgaXMgcmVzdWx0IGxvZzEwKGUpPwoJYmxlLmIJCXNldF9maW54CQkjIG5vOyBhbnN3ZXIgaXMgaW5leGFjdAoJYnJhLmIJCW5vX2ZpbngJCQkjIHllczsgYW5zd2VyIGlzIGV4YWN0CnNtX25vdF9ybjoKCWNtcGkuYgkJJWQwLCZycF9tb2RlCQkjIGlzIHJtb2RlIFJQPwoJYmVxLmIJCXNtX3JwCQkJIyB5ZXMKc21fcnpybToKCWxlYS5sCQlTTUFMUlpSTSglcGMpLCVhMAkjIG5vOyBsb2FkIFJaLFJNIHRhYmxlIGFkZHIKCWJyYS5iCQlzbV90YmxfY29udApzbV9ycDoKCWxlYS5sCQlTTUFMUlAoJXBjKSwlYTAJCSMgbG9hZCBSUCB0YWJsZSBhZGRyCglicmEuYgkJc21fdGJsX2NvbnQKCiMKIyB0aGUgYW5zd2VyIGlzIG9uZSBvZjoKIwkkMzAJbG4oMikJCShpbmV4YWN0KQojCSQzMQlsbigxMCkJCShpbmV4YWN0KQojCSQzMgkxMF4wCQkoZXhhY3QpCiMJJDMzCTEwXjEJCShleGFjdCkKIwkkMzQJMTBeMgkJKGV4YWN0KQojCSQzNQkxMF40CQkoZXhhY3QpCiMJJDM2CTEwXjgJCShleGFjdCkKIwkkMzcJMTBeMTYJCShleGFjdCkKIwkkMzgJMTBeMzIJCShpbmV4YWN0KQojCSQzOQkxMF42NAkJKGluZXhhY3QpCiMJJDNBCTEwXjEyOAkJKGluZXhhY3QpCiMJJDNCCTEwXjI1NgkJKGluZXhhY3QpCiMJJDNDCTEwXjUxMgkJKGluZXhhY3QpCiMJJDNECTEwXjEwMjQJCShpbmV4YWN0KQojCSQzRQkxMF4yMDQ4CQkoaW5leGFjdCkKIwkkM0YJMTBeNDA5NgkJKGluZXhhY3QpCiMKIyBmZXRjaCBhIHBvaW50ZXIgdG8gdGhlIGFuc3dlciB0YWJsZSByZWxhdGluZyB0byB0aGUgcHJvcGVyIHJvdW5kaW5nCiMgcHJlY2lzaW9uLgojCmJnX3RibDoKCXN1YmkuYgkJJjB4MzAsJWQxCQkjIG1ha2Ugb2Zmc2V0IGluIDAtZiByYW5nZQoJdHN0LmIJCSVkMAkJCSMgaXMgcm1vZGUgUk4/CglibmUuYgkJYmdfbm90X3JuCQkjIG5vCmJnX3JuOgoJbGVhLmwJCUJJR1JOKCVwYyksJWEwCQkjIHllczsgbG9hZCBSTiB0YWJsZSBhZGRyCmJnX3RibF9jb250OgoJY21waS5iCQklZDEsJjB4MQkJIyBpcyBvZmZzZXQgPD0gJDMxPwoJYmxlLmIJCXNldF9maW54CQkjIHllczsgYW5zd2VyIGlzIGluZXhhY3QKCWNtcGkuYgkJJWQxLCYweDcJCSMgaXMgJDMyIDw9IG9mZnNldCA8PSAkMzc/CglibGUuYgkJbm9fZmlueAkJCSMgeWVzOyBhbnN3ZXIgaXMgZXhhY3QKCWJyYS5iCQlzZXRfZmlueAkJIyBubzsgYW5zd2VyIGlzIGluZXhhY3QKYmdfbm90X3JuOgoJY21waS5iCQklZDAsJnJwX21vZGUJCSMgaXMgcm1vZGUgUlA/CgliZXEuYgkJYmdfcnAJCQkjIHllcwpiZ19yenJtOgoJbGVhLmwJCUJJR1JaUk0oJXBjKSwlYTAJIyBubzsgbG9hZCBSWixSTSB0YWJsZSBhZGRyCglicmEuYgkJYmdfdGJsX2NvbnQKYmdfcnA6CglsZWEubAkJQklHUlAoJXBjKSwlYTAJCSMgbG9hZCBSUCB0YWJsZSBhZGRyCglicmEuYgkJYmdfdGJsX2NvbnQKCiMgYW5zd2VyIGlzIGluZXhhY3QsIHNvIHNldCBJTkVYMiBhbmQgQUlORVggaW4gdGhlIHVzZXIncyBGUFNSLgpzZXRfZmlueDoKCW9yaS5sCQkmaW54MmFfbWFzayxVU0VSX0ZQU1IoJWE2KSAjIHNldCBJTkVYMi9BSU5FWApub19maW54OgoJbXVsdS53CQkmMHhjLCVkMQkJIyBvZmZzZXQgcG9pbnRzIGludG8gdGFibGVzCglzd2FwCQklZDAJCQkjIHB1dCBybmQgcHJlYyBpbiBsbyB3b3JkCgl0c3QuYgkJJWQwCQkJIyBpcyBwcmVjaXNpb24gZXh0ZW5kZWQ/CgoJYm5lLmIJCW5vdF9leHQJCQkjIGlmIHhwcmVjLCBkbyBub3QgY2FsbCByb3VuZAoKIyBQcmVjaXNpb24gaXMgZXh0ZW5kZWQKCWZtb3ZtLngJCSglYTAsJWQxLncpLCYweDgwCSMgcmV0dXJuIHJlc3VsdCBpbiBmcDAKCXJ0cwoKIyBQcmVjaXNpb24gaXMgc2luZ2xlIG9yIGRvdWJsZQpub3RfZXh0OgoJc3dhcAkJJWQwCQkJIyBybmQgcHJlYyBpbiB1cHBlciB3b3JkCgojIGNhbGwgcm91bmQoKSB0byByb3VuZCB0aGUgYW5zd2VyIHRvIHRoZSBwcm9wZXIgcHJlY2lzaW9uLgojIGV4cG9uZW50cyBvdXQgb2YgcmFuZ2UgZm9yIHNpbmdsZSBvciBkb3VibGUgRE8gTk9UIGNhdXNlIHVuZGVyZmxvdwojIG9yIG92ZXJmbG93LgoJbW92LncJCTB4MCglYTAsJWQxLncpLEZQX1NDUjFfRVgoJWE2KSAjIGxvYWQgZmlyc3Qgd29yZAoJbW92LmwJCTB4NCglYTAsJWQxLncpLEZQX1NDUjFfSEkoJWE2KSAjIGxvYWQgc2Vjb25kIHdvcmQKCW1vdi5sCQkweDgoJWEwLCVkMS53KSxGUF9TQ1IxX0xPKCVhNikgIyBsb2FkIHRoaXJkIHdvcmQKCW1vdi5sCQklZDAsJWQxCgljbHIubAkJJWQwCQkJIyBjbGVhciBnLHIscwoJbGVhCQlGUF9TQ1IxKCVhNiksJWEwCSMgcGFzcyBwdHIgdG8gYW5zd2VyCgljbHIudwkJTE9DQUxfU0dOKCVhMCkJCSMgc2lnbiBhbHdheXMgcG9zaXRpdmUKCWJzci5sCQlfcm91bmQJCQkjIHJvdW5kIHRoZSBtYW50aXNzYQoKCWZtb3ZtLngJCSglYTApLCYweDgwCQkjIHJldHVybiByb3VuZGVkIHJlc3VsdCBpbiBmcDAKCXJ0cwoKCWFsaWduCQkweDQKClBJUk46CWxvbmcJCTB4NDAwMDAwMDAsMHhjOTBmZGFhMiwweDIxNjhjMjM1CSMgcGkKUElSWlJNOglsb25nCQkweDQwMDAwMDAwLDB4YzkwZmRhYTIsMHgyMTY4YzIzNAkjIHBpClBJUlA6CWxvbmcJCTB4NDAwMDAwMDAsMHhjOTBmZGFhMiwweDIxNjhjMjM1CSMgcGkKClNNQUxSTjoJbG9uZwkJMHgzZmZkMDAwMCwweDlhMjA5YTg0LDB4ZmJjZmY3OTgJIyBsb2cxMCgyKQoJbG9uZwkJMHg0MDAwMDAwMCwweGFkZjg1NDU4LDB4YTJiYjRhOWEJIyBlCglsb25nCQkweDNmZmYwMDAwLDB4YjhhYTNiMjksMHg1YzE3ZjBiYwkjIGxvZzIoZSkKCWxvbmcJCTB4M2ZmZDAwMDAsMHhkZTViZDhhOSwweDM3Mjg3MTk1CSMgbG9nMTAoZSkKCWxvbmcJCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCSMgMC4wCgpTTUFMUlpSTToKCWxvbmcJCTB4M2ZmZDAwMDAsMHg5YTIwOWE4NCwweGZiY2ZmNzk4CSMgbG9nMTAoMikKCWxvbmcJCTB4NDAwMDAwMDAsMHhhZGY4NTQ1OCwweGEyYmI0YTlhCSMgZQoJbG9uZwkJMHgzZmZmMDAwMCwweGI4YWEzYjI5LDB4NWMxN2YwYmIJIyBsb2cyKGUpCglsb25nCQkweDNmZmQwMDAwLDB4ZGU1YmQ4YTksMHgzNzI4NzE5NQkjIGxvZzEwKGUpCglsb25nCQkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAkjIDAuMAoKU01BTFJQOglsb25nCQkweDNmZmQwMDAwLDB4OWEyMDlhODQsMHhmYmNmZjc5OQkjIGxvZzEwKDIpCglsb25nCQkweDQwMDAwMDAwLDB4YWRmODU0NTgsMHhhMmJiNGE5YgkjIGUKCWxvbmcJCTB4M2ZmZjAwMDAsMHhiOGFhM2IyOSwweDVjMTdmMGJjCSMgbG9nMihlKQoJbG9uZwkJMHgzZmZkMDAwMCwweGRlNWJkOGE5LDB4MzcyODcxOTUJIyBsb2cxMChlKQoJbG9uZwkJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAJIyAwLjAKCkJJR1JOOglsb25nCQkweDNmZmUwMDAwLDB4YjE3MjE3ZjcsMHhkMWNmNzlhYwkjIGxuKDIpCglsb25nCQkweDQwMDAwMDAwLDB4OTM1ZDhkZGQsMHhhYWE4YWMxNwkjIGxuKDEwKQoKCWxvbmcJCTB4M2ZmZjAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDAwCSMgMTAgXiAwCglsb25nCQkweDQwMDIwMDAwLDB4QTAwMDAwMDAsMHgwMDAwMDAwMAkjIDEwIF4gMQoJbG9uZwkJMHg0MDA1MDAwMCwweEM4MDAwMDAwLDB4MDAwMDAwMDAJIyAxMCBeIDIKCWxvbmcJCTB4NDAwQzAwMDAsMHg5QzQwMDAwMCwweDAwMDAwMDAwCSMgMTAgXiA0Cglsb25nCQkweDQwMTkwMDAwLDB4QkVCQzIwMDAsMHgwMDAwMDAwMAkjIDEwIF4gOAoJbG9uZwkJMHg0MDM0MDAwMCwweDhFMUJDOUJGLDB4MDQwMDAwMDAJIyAxMCBeIDE2Cglsb25nCQkweDQwNjkwMDAwLDB4OURDNUFEQTgsMHgyQjcwQjU5RQkjIDEwIF4gMzIKCWxvbmcJCTB4NDBEMzAwMDAsMHhDMjc4MUY0OSwweEZGQ0ZBNkQ1CSMgMTAgXiA2NAoJbG9uZwkJMHg0MUE4MDAwMCwweDkzQkE0N0M5LDB4ODBFOThDRTAJIyAxMCBeIDEyOAoJbG9uZwkJMHg0MzUxMDAwMCwweEFBN0VFQkZCLDB4OURGOURFOEUJIyAxMCBeIDI1NgoJbG9uZwkJMHg0NkEzMDAwMCwweEUzMTlBMEFFLDB4QTYwRTkxQzcJIyAxMCBeIDUxMgoJbG9uZwkJMHg0RDQ4MDAwMCwweEM5NzY3NTg2LDB4ODE3NTBDMTcJIyAxMCBeIDEwMjQKCWxvbmcJCTB4NUE5MjAwMDAsMHg5RThCM0I1RCwweEM1M0Q1REU1CSMgMTAgXiAyMDQ4Cglsb25nCQkweDc1MjUwMDAwLDB4QzQ2MDUyMDIsMHg4QTIwOTc5QgkjIDEwIF4gNDA5NgoKQklHUlpSTToKCWxvbmcJCTB4M2ZmZTAwMDAsMHhiMTcyMTdmNywweGQxY2Y3OWFiCSMgbG4oMikKCWxvbmcJCTB4NDAwMDAwMDAsMHg5MzVkOGRkZCwweGFhYThhYzE2CSMgbG4oMTApCgoJbG9uZwkJMHgzZmZmMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMDAJIyAxMCBeIDAKCWxvbmcJCTB4NDAwMjAwMDAsMHhBMDAwMDAwMCwweDAwMDAwMDAwCSMgMTAgXiAxCglsb25nCQkweDQwMDUwMDAwLDB4QzgwMDAwMDAsMHgwMDAwMDAwMAkjIDEwIF4gMgoJbG9uZwkJMHg0MDBDMDAwMCwweDlDNDAwMDAwLDB4MDAwMDAwMDAJIyAxMCBeIDQKCWxvbmcJCTB4NDAxOTAwMDAsMHhCRUJDMjAwMCwweDAwMDAwMDAwCSMgMTAgXiA4Cglsb25nCQkweDQwMzQwMDAwLDB4OEUxQkM5QkYsMHgwNDAwMDAwMAkjIDEwIF4gMTYKCWxvbmcJCTB4NDA2OTAwMDAsMHg5REM1QURBOCwweDJCNzBCNTlECSMgMTAgXiAzMgoJbG9uZwkJMHg0MEQzMDAwMCwweEMyNzgxRjQ5LDB4RkZDRkE2RDUJIyAxMCBeIDY0Cglsb25nCQkweDQxQTgwMDAwLDB4OTNCQTQ3QzksMHg4MEU5OENERgkjIDEwIF4gMTI4Cglsb25nCQkweDQzNTEwMDAwLDB4QUE3RUVCRkIsMHg5REY5REU4RAkjIDEwIF4gMjU2Cglsb25nCQkweDQ2QTMwMDAwLDB4RTMxOUEwQUUsMHhBNjBFOTFDNgkjIDEwIF4gNTEyCglsb25nCQkweDRENDgwMDAwLDB4Qzk3Njc1ODYsMHg4MTc1MEMxNwkjIDEwIF4gMTAyNAoJbG9uZwkJMHg1QTkyMDAwMCwweDlFOEIzQjVELDB4QzUzRDVERTQJIyAxMCBeIDIwNDgKCWxvbmcJCTB4NzUyNTAwMDAsMHhDNDYwNTIwMiwweDhBMjA5NzlBCSMgMTAgXiA0MDk2CgpCSUdSUDoKCWxvbmcJCTB4M2ZmZTAwMDAsMHhiMTcyMTdmNywweGQxY2Y3OWFjCSMgbG4oMikKCWxvbmcJCTB4NDAwMDAwMDAsMHg5MzVkOGRkZCwweGFhYThhYzE3CSMgbG4oMTApCgoJbG9uZwkJMHgzZmZmMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMDAJIyAxMCBeIDAKCWxvbmcJCTB4NDAwMjAwMDAsMHhBMDAwMDAwMCwweDAwMDAwMDAwCSMgMTAgXiAxCglsb25nCQkweDQwMDUwMDAwLDB4QzgwMDAwMDAsMHgwMDAwMDAwMAkjIDEwIF4gMgoJbG9uZwkJMHg0MDBDMDAwMCwweDlDNDAwMDAwLDB4MDAwMDAwMDAJIyAxMCBeIDQKCWxvbmcJCTB4NDAxOTAwMDAsMHhCRUJDMjAwMCwweDAwMDAwMDAwCSMgMTAgXiA4Cglsb25nCQkweDQwMzQwMDAwLDB4OEUxQkM5QkYsMHgwNDAwMDAwMAkjIDEwIF4gMTYKCWxvbmcJCTB4NDA2OTAwMDAsMHg5REM1QURBOCwweDJCNzBCNTlFCSMgMTAgXiAzMgoJbG9uZwkJMHg0MEQzMDAwMCwweEMyNzgxRjQ5LDB4RkZDRkE2RDYJIyAxMCBeIDY0Cglsb25nCQkweDQxQTgwMDAwLDB4OTNCQTQ3QzksMHg4MEU5OENFMAkjIDEwIF4gMTI4Cglsb25nCQkweDQzNTEwMDAwLDB4QUE3RUVCRkIsMHg5REY5REU4RQkjIDEwIF4gMjU2Cglsb25nCQkweDQ2QTMwMDAwLDB4RTMxOUEwQUUsMHhBNjBFOTFDNwkjIDEwIF4gNTEyCglsb25nCQkweDRENDgwMDAwLDB4Qzk3Njc1ODYsMHg4MTc1MEMxOAkjIDEwIF4gMTAyNAoJbG9uZwkJMHg1QTkyMDAwMCwweDlFOEIzQjVELDB4QzUzRDVERTUJIyAxMCBeIDIwNDgKCWxvbmcJCTB4NzUyNTAwMDAsMHhDNDYwNTIwMiwweDhBMjA5NzlCCSMgMTAgXiA0MDk2CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgc3NjYWxlKCk6IGNvbXB1dGVzIHRoZSBkZXN0aW5hdGlvbiBvcGVyYW5kIHNjYWxlZCBieSB0aGUgc291cmNlCSMKIwkgICAgb3BlcmFuZC4gSWYgdGhlIGFic291bHV0ZSB2YWx1ZSBvZiB0aGUgc291cmNlIG9wZXJhbmQgaXMJIwojCSAgICA+PSAyXjE0LCBhbiBvdmVyZmxvdyBvciB1bmRlcmZsb3cgaXMgcmV0dXJuZWQuCQkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKIwlhMCAgPSBwb2ludGVyIHRvIGRvdWJsZS1leHRlbmRlZCBzb3VyY2Ugb3BlcmFuZCBYCQkjCiMJYTEgID0gcG9pbnRlciB0byBkb3VibGUtZXh0ZW5kZWQgZGVzdGluYXRpb24gb3BlcmFuZCBZCQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKIwlmcDAgPSAgc2NhbGUoWCxZKQkJCQkJCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKc2V0CVNJR04sCQlMX1NDUjEKCglnbG9iYWwJCXNzY2FsZQpzc2NhbGU6Cgltb3YubAkJJWQwLC0oJXNwKQkJIyBzdG9yZSBvZmYgY3RybCBiaXRzIGZvciBub3cKCgltb3YudwkJRFNUX0VYKCVhMSksJWQxCQkjIGdldCBkc3QgZXhwb25lbnQKCXNtaS5iCQlTSUdOKCVhNikJCSMgdXNlIFNJR04gdG8gaG9sZCBkc3Qgc2lnbgoJYW5kaS5sCQkmMHgwMDAwN2ZmZiwlZDEJCSMgc3RyaXAgc2lnbiBmcm9tIGRzdCBleHAKCgltb3YudwkJU1JDX0VYKCVhMCksJWQwCQkjIGNoZWNrIHNyYyBib3VuZHMKCWFuZGkudwkJJjB4N2ZmZiwlZDAJCSMgY2xyIHNyYyBzaWduIGJpdAoJY21waS53CQklZDAsJjB4M2ZmZgkJIyBpcyBzcmMgfiBaRVJPPwoJYmx0LncJCXNyY19zbWFsbAkJIyB5ZXMKCWNtcGkudwkJJWQwLCYweDQwMGMJCSMgbm87IGlzIHNyYyB0b28gYmlnPwoJYmd0LncJCXNyY19vdXQJCQkjIHllcwoKIwojIFNvdXJjZSBpcyB3aXRoaW4gMl4xNCByYW5nZS4KIwpzcmNfb2s6CglmaW50cnoueAlTUkMoJWEwKSwlZnAwCQkjIGNhbGMgaW50IG9mIHNyYwoJZm1vdi5sCQklZnAwLCVkMAkJIyBpbnQgc3JjIHRvIGQwCiMgZG9uJ3Qgd2FudCBhbnkgYWNjcnVlZCBiaXRzIGZyb20gdGhlIGZpbnRyeiBzaG93aW5nIHVwIGxhdGVyIHNpbmNlCiMgd2UgbWF5IG5lZWQgdG8gcmVhZCB0aGUgZnBzciBmb3IgdGhlIGxhc3QgZnAgb3AgaW4gdF9jYXRjaDIoKS4KCWZtb3YubAkJJjB4MCwlZnBzcgoKCXRzdC5iCQlEU1RfSEkoJWExKQkJIyBpcyBkc3QgZGVub3JtYWxpemVkPwoJYm1pLmIJCXNva19ub3JtCgojIHRoZSBkc3QgaXMgYSBERU5PUk0uIG5vcm1hbGl6ZSB0aGUgREVOT1JNIGFuZCBhZGQgdGhlIGFkanVzdG1lbnQgdG8KIyB0aGUgc3JjIHZhbHVlLiB0aGVuLCBqdW1wIHRvIHRoZSBub3JtIHBhcnQgb2YgdGhlIHJvdXRpbmUuCnNva19kbnJtOgoJbW92LmwJCSVkMCwtKCVzcCkJCSMgc2F2ZSBzcmMgZm9yIG5vdwoKCW1vdi53CQlEU1RfRVgoJWExKSxGUF9TQ1IwX0VYKCVhNikgIyBtYWtlIGEgY29weQoJbW92LmwJCURTVF9ISSglYTEpLEZQX1NDUjBfSEkoJWE2KQoJbW92LmwJCURTVF9MTyglYTEpLEZQX1NDUjBfTE8oJWE2KQoKCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3MgcHRyIHRvIERFTk9STQoJYnNyLmwJCW5vcm0JCQkjIG5vcm1hbGl6ZSB0aGUgREVOT1JNCgluZWcubAkJJWQwCglhZGQubAkJKCVzcCkrLCVkMAkJIyBhZGQgYWRqdXN0bWVudCB0byBzcmMKCglmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4ODAJIyBsb2FkIG5vcm1hbGl6ZWQgREVOT1JNCgoJY21waS53CQklZDAsJi0weDNmZmYJCSMgaXMgdGhlIHNoZnQgYW10IHJlYWxseSBsb3c/CgliZ2UuYgkJc29rX25vcm0yCQkjIHRoYW5rIGdvb2RuZXNzIG5vCgojIHRoZSBtdWx0aXBseSBmYWN0b3IgdGhhdCB3ZSdyZSB0cnlpbmcgdG8gY3JlYXRlIHNob3VsZCBiZSBhIGRlbm9ybQojIGZvciB0aGUgbXVsdGlwbHkgdG8gd29yay4gdGhlcmVmb3JlLCB3ZSdyZSBnb2luZyB0byBhY3R1YWxseSBkbyBhCiMgbXVsdGlwbHkgd2l0aCBhIGRlbm9ybSB3aGljaCB3aWxsIGNhdXNlIGFuIHVuaW1wbGVtZW50ZWQgZGF0YSB0eXBlCiMgZXhjZXB0aW9uIHRvIGJlIHB1dCBpbnRvIHRoZSBtYWNoaW5lIHdoaWNoIHdpbGwgYmUgY2F1Z2h0IGFuZCBjb3JyZWN0ZWQKIyBsYXRlci4gd2UgZG9uJ3QgZG8gdGhpcyB3aXRoIHRoZSBERU5PUk1zIGFib3ZlIGJlY2F1c2UgdGhpcyBtZXRob2QKIyBpcyBzbG93ZXIuIGJ1dCwgZG9uJ3QgZnJldCwgSSBkb24ndCBzZWUgaXQgYmVpbmcgdXNlZCBtdWNoIGVpdGhlci4KCWZtb3YubAkJKCVzcCkrLCVmcGNyCQkjIHJlc3RvcmUgdXNlciBmcGNyCgltb3YubAkJJjB4ODAwMDAwMDAsJWQxCQkjIGxvYWQgbm9ybWFsaXplZCBtYW50aXNzYQoJc3ViaS5sCQkmLTB4M2ZmZiwlZDAJCSMgaG93IG1hbnkgc2hvdWxkIHdlIHNoaWZ0PwoJbmVnLmwJCSVkMAkJCSMgbWFrZSBpdCBwb3NpdGl2ZQoJY21waS5iCQklZDAsJjB4MjAJCSMgaXMgaXQgPiAzMj8KCWJnZS5iCQlzb2tfZG5ybV8zMgkJIyB5ZXMKCWxzci5sCQklZDAsJWQxCQkJIyBubzsgYml0IHN0YXlzIGluIHVwcGVyIGx3CgljbHIubAkJLSglc3ApCQkJIyBpbnNlcnQgemVybyBsb3cgbWFudGlzc2EKCW1vdi5sCQklZDEsLSglc3ApCQkjIGluc2VydCBuZXcgaGlnaCBtYW50aXNzYQoJY2xyLmwJCS0oJXNwKQkJCSMgbWFrZSB6ZXJvIGV4cG9uZW50CglicmEuYgkJc29rX25vcm1fY29udApzb2tfZG5ybV8zMjoKCXN1YmkuYgkJJjB4MjAsJWQwCQkjIGdldCBzaGlmdCBjb3VudAoJbHNyLmwJCSVkMCwlZDEJCQkjIG1ha2UgbG93IG1hbnRpc3NhIGxvbmd3b3JkCgltb3YubAkJJWQxLC0oJXNwKQkJIyBpbnNlcnQgbmV3IGxvdyBtYW50aXNzYQoJY2xyLmwJCS0oJXNwKQkJCSMgaW5zZXJ0IHplcm8gaGlnaCBtYW50aXNzYQoJY2xyLmwJCS0oJXNwKQkJCSMgbWFrZSB6ZXJvIGV4cG9uZW50CglicmEuYgkJc29rX25vcm1fY29udAoKIyB0aGUgc3JjIHdpbGwgZm9yY2UgdGhlIGRzdCB0byBhIERFTk9STSB2YWx1ZSBvciB3b3JzZS4gc28sIGxldCdzCiMgY3JlYXRlIGFuIGZwIG11bHRpcGx5IHRoYXQgd2lsbCBjcmVhdGUgdGhlIHJlc3VsdC4Kc29rX25vcm06CglmbW92bS54CQlEU1QoJWExKSwmMHg4MAkJIyBsb2FkIGZwMCB3aXRoIG5vcm1hbGl6ZWQgc3JjCnNva19ub3JtMjoKCWZtb3YubAkJKCVzcCkrLCVmcGNyCQkjIHJlc3RvcmUgdXNlciBmcGNyCgoJYWRkaS53CQkmMHgzZmZmLCVkMAkJIyB0dXJuIHNyYyBhbXQgaW50byBleHAgdmFsdWUKCXN3YXAJCSVkMAkJCSMgcHV0IGV4cG9uZW50IGluIGhpZ2ggd29yZAoJY2xyLmwJCS0oJXNwKQkJCSMgaW5zZXJ0IG5ldyBleHBvbmVudAoJbW92LmwJCSYweDgwMDAwMDAwLC0oJXNwKQkjIGluc2VydCBuZXcgaGlnaCBtYW50aXNzYQoJbW92LmwJCSVkMCwtKCVzcCkJCSMgaW5zZXJ0IG5ldyBsbyBtYW50aXNzYQoKc29rX25vcm1fY29udDoKCWZtb3YubAkJJWZwY3IsJWQwCQkjIGQwIG5lZWRzIGZwY3IgZm9yIHRfY2F0Y2gyCgltb3YuYgkJJkZNVUxfT1AsJWQxCQkjIGxhc3QgaW5zdCBpcyBNVUwKCWZtdWwueAkJKCVzcCkrLCVmcDAJCSMgZG8gdGhlIG11bHRpcGx5CglicmEJCXRfY2F0Y2gyCQkjIGNhdGNoIGFueSBleGNlcHRpb25zCgojCiMgU291cmNlIGlzIG91dHNpZGUgb2YgMl4xNCByYW5nZS4gIFRlc3QgdGhlIHNpZ24gYW5kIGJyYW5jaAojIHRvIHRoZSBhcHByb3ByaWF0ZSBleGNlcHRpb24gaGFuZGxlci4KIwpzcmNfb3V0OgoJbW92LmwJCSglc3ApKywlZDAJCSMgcmVzdG9yZSBjdHJsIGJpdHMKCWV4ZwkJJWEwLCVhMQkJCSMgc3dhcCBzcmMsZHN0IHB0cnMKCXRzdC5iCQlTUkNfRVgoJWExKQkJIyBpcyBzcmMgbmVnYXRpdmU/CglibWkJCXRfdW5mbAkJCSMgeWVzOyB1bmRlcmZsb3cKCWJyYQkJdF9vdmZsX3NjCQkjIG5vOyBvdmVyZmxvdwoKIwojIFRoZSBzb3VyY2UgaW5wdXQgaXMgYmVsb3cgMSwgc28gd2UgY2hlY2sgZm9yIGRlbm9ybWFsaXplZCBudW1iZXJzCiMgYW5kIHNldCB1bmZsLgojCnNyY19zbWFsbDoKCXRzdC5iCQlEU1RfSEkoJWExKQkJIyBpcyBkc3QgZGVub3JtYWxpemVkPwoJYnBsLmIJCXNzbWFsbF9kb25lCQkjIHllcwoKCW1vdi5sCQkoJXNwKSssJWQwCglmbW92LmwJCSVkMCwlZnBjcgkJIyBubzsgbG9hZCBjb250cm9sIGJpdHMKCW1vdi5iCQkmRk1PVl9PUCwlZDEJCSMgbGFzdCBpbnN0IGlzIE1PVkUKCWZtb3YueAkJRFNUKCVhMSksJWZwMAkJIyBzaW1wbHkgcmV0dXJuIGRlc3QKCWJyYQkJdF9jYXRjaDIKc3NtYWxsX2RvbmU6Cgltb3YubAkJKCVzcCkrLCVkMAkJIyBsb2FkIGNvbnRyb2wgYml0cyBpbnRvIGQxCgltb3YubAkJJWExLCVhMAkJCSMgcGFzcyBwdHIgdG8gZHN0CglicmEJCXRfcmVzZG5ybQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIHNtb2QoKTogY29tcHV0ZXMgdGhlIGZwIE1PRCBvZiB0aGUgaW5wdXQgdmFsdWVzIFgsWS4JCQkjCiMgc3JlbSgpOiBjb21wdXRlcyB0aGUgZnAgKElFRUUpIFJFTSBvZiB0aGUgaW5wdXQgdmFsdWVzIFgsWS4JCSMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIwojCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gaW5wdXQgWAkJCSMKIwlhMSA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIGlucHV0IFkJCQkjCiMJZDAgPSByb3VuZCBwcmVjaXNpb24sbW9kZQkJCQkJIwojCQkJCQkJCQkJIwojCVRoZSBpbnB1dCBvcGVyYW5kcyBYIGFuZCBZIGNhbiBiZSBlaXRoZXIgbm9ybWFsaXplZCBvcgkJIwojCWRlbm9ybWFsaXplZC4JCQkJCQkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCiMgICAgICBmcDAgPSBGUkVNKFgsWSkgb3IgRk1PRChYLFkpCQkJCQkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKIwkJCQkJCQkJCSMKIyAgICAgICBTdGVwIDEuICBTYXZlIGFuZCBzdHJpcCBzaWducyBvZiBYIGFuZCBZOiBzaWduWCA6PSBzaWduKFgpLAkjCiMgICAgICAgICAgICAgICAgc2lnblkgOj0gc2lnbihZKSwgWCA6PSB8WHwsIFkgOj0gfFl8LAkJCSMKIyAgICAgICAgICAgICAgICBzaWduUSA6PSBzaWduWCBFT1Igc2lnblkuIFJlY29yZCB3aGV0aGVyIE1PRCBvciBSRU0JIwojICAgICAgICAgICAgICAgIGlzIHJlcXVlc3RlZC4JCQkJCQkjCiMJCQkJCQkJCQkjCiMgICAgICAgU3RlcCAyLiAgU2V0IEwgOj0gZXhwbyhYKS1leHBvKFkpLCBrIDo9IDAsIFEgOj0gMC4JCSMKIyAgICAgICAgICAgICAgICBJZiAoTCA8IDApIHRoZW4JCQkJCSMKIyAgICAgICAgICAgICAgICAgICBSIDo9IFgsIGdvIHRvIFN0ZXAgNC4JCQkJIwojICAgICAgICAgICAgICAgIGVsc2UJCQkJCQkJIwojICAgICAgICAgICAgICAgICAgIFIgOj0gMl4oLUwpWCwgaiA6PSBMLgkJCQkjCiMgICAgICAgICAgICAgICAgZW5kaWYJCQkJCQkJIwojCQkJCQkJCQkJIwojICAgICAgIFN0ZXAgMy4gIFBlcmZvcm0gTU9EKFgsWSkJCQkJCSMKIyAgICAgICAgICAgIDMuMSBJZiBSID0gWSwgZ28gdG8gU3RlcCA5LgkJCQkjCiMgICAgICAgICAgICAzLjIgSWYgUiA+IFksIHRoZW4geyBSIDo9IFIgLSBZLCBRIDo9IFEgKyAxfQkJIwojICAgICAgICAgICAgMy4zIElmIGogPSAwLCBnbyB0byBTdGVwIDQuCQkJCSMKIyAgICAgICAgICAgIDMuNCBrIDo9IGsgKyAxLCBqIDo9IGogLSAxLCBRIDo9IDJRLCBSIDo9IDJSLiBHbyB0bwkjCiMgICAgICAgICAgICAgICAgU3RlcCAzLjEuCQkJCQkJIwojCQkJCQkJCQkJIwojICAgICAgIFN0ZXAgNC4gIEF0IHRoaXMgcG9pbnQsIFIgPSBYIC0gUVkgPSBNT0QoWCxZKS4gU2V0CQkjCiMgICAgICAgICAgICAgICAgTGFzdF9TdWJ0cmFjdCA6PSBmYWxzZSAodXNlZCBpbiBTdGVwIDcgYmVsb3cpLiBJZgkjCiMgICAgICAgICAgICAgICAgTU9EIGlzIHJlcXVlc3RlZCwgZ28gdG8gU3RlcCA2LgkJCSMKIwkJCQkJCQkJCSMKIyAgICAgICBTdGVwIDUuICBSID0gTU9EKFgsWSksIGJ1dCBSRU0oWCxZKSBpcyByZXF1ZXN0ZWQuCQkjCiMgICAgICAgICAgICA1LjEgSWYgUiA8IFkvMiwgdGhlbiBSID0gTU9EKFgsWSkgPSBSRU0oWCxZKS4gR28gdG8JIwojICAgICAgICAgICAgICAgIFN0ZXAgNi4JCQkJCQkjCiMgICAgICAgICAgICA1LjIgSWYgUiA+IFkvMiwgdGhlbiB7IHNldCBMYXN0X1N1YnRyYWN0IDo9IHRydWUsCQkjCiMgICAgICAgICAgICAgICAgUSA6PSBRICsgMSwgWSA6PSBzaWduWSpZIH0uIEdvIHRvIFN0ZXAgNi4JCSMKIyAgICAgICAgICAgIDUuMyBUaGlzIGlzIHRoZSB0cmlja3kgY2FzZSBvZiBSID0gWS8yLiBJZiBRIGlzIG9kZCwJIwojICAgICAgICAgICAgICAgIHRoZW4geyBRIDo9IFEgKyAxLCBzaWduWCA6PSAtc2lnblggfS4JCQkjCiMJCQkJCQkJCQkjCiMgICAgICAgU3RlcCA2LiAgUiA6PSBzaWduWCpSLgkJCQkJCSMKIwkJCQkJCQkJCSMKIyAgICAgICBTdGVwIDcuICBJZiBMYXN0X1N1YnRyYWN0ID0gdHJ1ZSwgUiA6PSBSIC0gWS4JCQkjCiMJCQkJCQkJCQkjCiMgICAgICAgU3RlcCA4LiAgUmV0dXJuIHNpZ25RLCBsYXN0IDcgYml0cyBvZiBRLCBhbmQgUiBhcyByZXF1aXJlZC4JIwojCQkJCQkJCQkJIwojICAgICAgIFN0ZXAgOS4gIEF0IHRoaXMgcG9pbnQsIFIgPSAyXigtaikqWCAtIFEgWSA9IFkuIFRodXMsCQkjCiMgICAgICAgICAgICAgICAgWCA9IDJeKGopKihRKzEpWS4gc2V0IFEgOj0gMl4oaikqKFErMSksCQkjCiMgICAgICAgICAgICAgICAgUiA6PSAwLiBSZXR1cm4gc2lnblEsIGxhc3QgNyBiaXRzIG9mIFEsIGFuZCBSLgkJIwojCQkJCQkJCQkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoJc2V0CQlNb2RfRmxhZyxMX1NDUjMKCXNldAkJU2NfRmxhZyxMX1NDUjMrMQoKCXNldAkJU2lnblksTF9TQ1IyCglzZXQJCVNpZ25YLExfU0NSMisyCglzZXQJCVNpZ25RLExfU0NSMysyCgoJc2V0CQlZLEZQX1NDUjAKCXNldAkJWV9IaSxZKzQKCXNldAkJWV9MbyxZKzgKCglzZXQJCVIsRlBfU0NSMQoJc2V0CQlSX0hpLFIrNAoJc2V0CQlSX0xvLFIrOAoKU2NhbGU6Cglsb25nCQkweDAwMDEwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCgoJZ2xvYmFsCQlzbW9kCnNtb2Q6CgljbHIuYgkJRlBTUl9RQllURSglYTYpCgltb3YubAkJJWQwLC0oJXNwKQkJIyBzYXZlIGN0cmwgYml0cwoJY2xyLmIJCU1vZF9GbGFnKCVhNikKCWJyYS5iCQlNb2RfUmVtCgoJZ2xvYmFsCQlzcmVtCnNyZW06CgljbHIuYgkJRlBTUl9RQllURSglYTYpCgltb3YubAkJJWQwLC0oJXNwKQkJIyBzYXZlIGN0cmwgYml0cwoJbW92LmIJCSYweDEsTW9kX0ZsYWcoJWE2KQoKTW9kX1JlbToKIy4uU2F2ZSBzaWduIG9mIFggYW5kIFkKCW1vdm0ubAkJJjB4M2YwMCwtKCVzcCkJCSMgc2F2ZSBkYXRhIHJlZ2lzdGVycwoJbW92LncJCVNSQ19FWCglYTApLCVkMwoJbW92LncJCSVkMyxTaWduWSglYTYpCglhbmQubAkJJjB4MDAwMDdGRkYsJWQzCQkjIFkgOj0gfFl8CgojCgltb3YubAkJU1JDX0hJKCVhMCksJWQ0Cgltb3YubAkJU1JDX0xPKCVhMCksJWQ1CQkjIChEMyxENCxENSkgaXMgfFl8CgoJdHN0LmwJCSVkMwoJYm5lLmIJCVlfTm9ybWFsCgoJbW92LmwJCSYweDAwMDAzRkZFLCVkMwkJIyAkM0ZGRCArIDEKCXRzdC5sCQklZDQKCWJuZS5iCQlIaVlfbm90MAoKSGlZXzA6Cgltb3YubAkJJWQ1LCVkNAoJY2xyLmwJCSVkNQoJc3ViLmwJCSYzMiwlZDMKCWNsci5sCQklZDYKCWJmZmZvCQklZDR7JjA6JjMyfSwlZDYKCWxzbC5sCQklZDYsJWQ0CglzdWIubAkJJWQ2LCVkMwkJCSMgKEQzLEQ0LEQ1KSBpcyBub3JtYWxpemVkCiMJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLndpdGggYmlhcyAkN0ZGRAoJYnJhLmIJCUNoa19YCgpIaVlfbm90MDoKCWNsci5sCQklZDYKCWJmZmZvCQklZDR7JjA6JjMyfSwlZDYKCXN1Yi5sCQklZDYsJWQzCglsc2wubAkJJWQ2LCVkNAoJbW92LmwJCSVkNSwlZDcJCQkjIGEgY29weSBvZiBENQoJbHNsLmwJCSVkNiwlZDUKCW5lZy5sCQklZDYKCWFkZC5sCQkmMzIsJWQ2Cglsc3IubAkJJWQ2LCVkNwoJb3IubAkJJWQ3LCVkNAkJCSMgKEQzLEQ0LEQ1KSBub3JtYWxpemVkCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi53aXRoIGJpYXMgJDdGRkQKCWJyYS5iCQlDaGtfWAoKWV9Ob3JtYWw6CglhZGQubAkJJjB4MDAwMDNGRkUsJWQzCQkjIChEMyxENCxENSkgbm9ybWFsaXplZAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ud2l0aCBiaWFzICQ3RkZECgpDaGtfWDoKCW1vdi53CQlEU1RfRVgoJWExKSwlZDAKCW1vdi53CQklZDAsU2lnblgoJWE2KQoJbW92LncJCVNpZ25ZKCVhNiksJWQxCgllb3IubAkJJWQwLCVkMQoJYW5kLmwJCSYweDAwMDA4MDAwLCVkMQoJbW92LncJCSVkMSxTaWduUSglYTYpCQkjIHNpZ24oUSkgb2J0YWluZWQKCWFuZC5sCQkmMHgwMDAwN0ZGRiwlZDAKCW1vdi5sCQlEU1RfSEkoJWExKSwlZDEKCW1vdi5sCQlEU1RfTE8oJWExKSwlZDIJCSMgKEQwLEQxLEQyKSBpcyB8WHwKCXRzdC5sCQklZDAKCWJuZS5iCQlYX05vcm1hbAoJbW92LmwJCSYweDAwMDAzRkZFLCVkMAoJdHN0LmwJCSVkMQoJYm5lLmIJCUhpWF9ub3QwCgpIaVhfMDoKCW1vdi5sCQklZDIsJWQxCgljbHIubAkJJWQyCglzdWIubAkJJjMyLCVkMAoJY2xyLmwJCSVkNgoJYmZmZm8JCSVkMXsmMDomMzJ9LCVkNgoJbHNsLmwJCSVkNiwlZDEKCXN1Yi5sCQklZDYsJWQwCQkJIyAoRDAsRDEsRDIpIGlzIG5vcm1hbGl6ZWQKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLndpdGggYmlhcyAkN0ZGRAoJYnJhLmIJCUluaXQKCkhpWF9ub3QwOgoJY2xyLmwJCSVkNgoJYmZmZm8JCSVkMXsmMDomMzJ9LCVkNgoJc3ViLmwJCSVkNiwlZDAKCWxzbC5sCQklZDYsJWQxCgltb3YubAkJJWQyLCVkNwkJCSMgYSBjb3B5IG9mIEQyCglsc2wubAkJJWQ2LCVkMgoJbmVnLmwJCSVkNgoJYWRkLmwJCSYzMiwlZDYKCWxzci5sCQklZDYsJWQ3Cglvci5sCQklZDcsJWQxCQkJIyAoRDAsRDEsRDIpIG5vcm1hbGl6ZWQKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLndpdGggYmlhcyAkN0ZGRAoJYnJhLmIJCUluaXQKClhfTm9ybWFsOgoJYWRkLmwJCSYweDAwMDAzRkZFLCVkMAkJIyAoRDAsRDEsRDIpIG5vcm1hbGl6ZWQKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLndpdGggYmlhcyAkN0ZGRAoKSW5pdDoKIwoJbW92LmwJCSVkMyxMX1NDUjEoJWE2KQkJIyBzYXZlIGJpYXNlZCBleHAoWSkKCW1vdi5sCQklZDAsLSglc3ApCQkjIHNhdmUgYmlhc2VkIGV4cChYKQoJc3ViLmwJCSVkMywlZDAJCQkjIEwgOj0gZXhwbyhYKS1leHBvKFkpCgoJY2xyLmwJCSVkNgkJCSMgRDYgOj0gY2FycnkgPC0gMAoJY2xyLmwJCSVkMwkJCSMgRDMgaXMgUQoJbW92LmwJCSYwLCVhMQkJCSMgQTEgaXMgazsgaitrPUwsIFE9MAoKIy4uKENhcnJ5LEQxLEQyKSBpcyBSCgl0c3QubAkJJWQwCgliZ2UuYgkJTW9kX0xvb3BfcHJlCgojLi5leHBvKFgpIDwgZXhwbyhZKS4gVGh1cyBYID0gbW9kKFgsWSkKIwoJbW92LmwJCSglc3ApKywlZDAJCSMgcmVzdG9yZSBkMAoJYnJhLncJCUdldF9Nb2QKCk1vZF9Mb29wX3ByZToKCWFkZHEubAkJJjB4NCwlc3AJCSMgZXJhc2UgZXhwKFgpCiMuLkF0IHRoaXMgcG9pbnQgIFIgPSAyXigtTClYOyBRID0gMDsgayA9IDA7IGFuZCAgaytqID0gTApNb2RfTG9vcDoKCXRzdC5sCQklZDYJCQkjIHRlc3QgY2FycnkgYml0CgliZ3QuYgkJUl9HVF9ZCgojLi5BdCB0aGlzIHBvaW50IGNhcnJ5ID0gMCwgUiA9IChEMSxEMiksIFkgPSAoRDQsRDUpCgljbXAubAkJJWQxLCVkNAkJCSMgY29tcGFyZSBoaShSKSBhbmQgaGkoWSkKCWJuZS5iCQlSX05FX1kKCWNtcC5sCQklZDIsJWQ1CQkJIyBjb21wYXJlIGxvKFIpIGFuZCBsbyhZKQoJYm5lLmIJCVJfTkVfWQoKIy4uQXQgdGhpcyBwb2ludCwgUiA9IFkKCWJyYS53CQlSZW1faXNfMAoKUl9ORV9ZOgojLi51c2UgdGhlIGJvcnJvdyBvZiB0aGUgcHJldmlvdXMgY29tcGFyZQoJYmNzLmIJCVJfTFRfWQkJCSMgYm9ycm93IGlzIHNldCBpZmYgUiA8IFkKClJfR1RfWToKIy4uSWYgQ2FycnkgaXMgc2V0LCB0aGVuIFkgPCAoQ2FycnksRDEsRDIpIDwgMlkuIE90aGVyd2lzZSwgQ2FycnkgPSAwCiMuLmFuZCBZIDwgKEQxLEQyKSA8IDJZLiBFaXRoZXIgd2F5LCBwZXJmb3JtIFIgLSBZCglzdWIubAkJJWQ1LCVkMgkJCSMgbG8oUikgLSBsbyhZKQoJc3VieC5sCQklZDQsJWQxCQkJIyBoaShSKSAtIGhpKFkpCgljbHIubAkJJWQ2CQkJIyBjbGVhciBjYXJyeQoJYWRkcS5sCQkmMSwlZDMJCQkjIFEgOj0gUSArIDEKClJfTFRfWToKIy4uQXQgdGhpcyBwb2ludCwgQ2Fycnk9MCwgUiA8IFkuIFIgPSAyXihrLUwpWCAtIFFZOyBrK2ogPSBMOyBqID49IDAuCgl0c3QubAkJJWQwCQkJIyBzZWUgaWYgaiA9IDAuCgliZXEuYgkJUG9zdExvb3AKCglhZGQubAkJJWQzLCVkMwkJCSMgUSA6PSAyUQoJYWRkLmwJCSVkMiwlZDIJCQkjIGxvKFIpID0gMmxvKFIpCglyb3hsLmwJCSYxLCVkMQkJCSMgaGkoUikgPSAyaGkoUikgKyBjYXJyeQoJc2NzCQklZDYJCQkjIHNldCBDYXJyeSBpZiAyKFIpIG92ZXJmbG93cwoJYWRkcS5sCQkmMSwlYTEJCQkjIGsgOj0gaysxCglzdWJxLmwJCSYxLCVkMAkJCSMgaiA6PSBqIC0gMQojLi5BdCB0aGlzIHBvaW50LCBSPShDYXJyeSxEMSxEMikgPSAyXihrLUwpWCAtIFFZLCBqK2s9TCwgaiA+PSAwLCBSIDwgMlkuCgoJYnJhLmIJCU1vZF9Mb29wCgpQb3N0TG9vcDoKIy4uayA9IEwsIGogPSAwLCBDYXJyeSA9IDAsIFIgPSAoRDEsRDIpID0gWCAtIFFZLCBSIDwgWS4KCiMuLm5vcm1hbGl6ZSBSLgoJbW92LmwJCUxfU0NSMSglYTYpLCVkMAkJIyBuZXcgYmlhc2VkIGV4cG8gb2YgUgoJdHN0LmwJCSVkMQoJYm5lLmIJCUhpUl9ub3QwCgpIaVJfMDoKCW1vdi5sCQklZDIsJWQxCgljbHIubAkJJWQyCglzdWIubAkJJjMyLCVkMAoJY2xyLmwJCSVkNgoJYmZmZm8JCSVkMXsmMDomMzJ9LCVkNgoJbHNsLmwJCSVkNiwlZDEKCXN1Yi5sCQklZDYsJWQwCQkJIyAoRDAsRDEsRDIpIGlzIG5vcm1hbGl6ZWQKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLndpdGggYmlhcyAkN0ZGRAoJYnJhLmIJCUdldF9Nb2QKCkhpUl9ub3QwOgoJY2xyLmwJCSVkNgoJYmZmZm8JCSVkMXsmMDomMzJ9LCVkNgoJYm1pLmIJCUdldF9Nb2QJCQkjIGFscmVhZHkgbm9ybWFsaXplZAoJc3ViLmwJCSVkNiwlZDAKCWxzbC5sCQklZDYsJWQxCgltb3YubAkJJWQyLCVkNwkJCSMgYSBjb3B5IG9mIEQyCglsc2wubAkJJWQ2LCVkMgoJbmVnLmwJCSVkNgoJYWRkLmwJCSYzMiwlZDYKCWxzci5sCQklZDYsJWQ3Cglvci5sCQklZDcsJWQxCQkJIyAoRDAsRDEsRDIpIG5vcm1hbGl6ZWQKCiMKR2V0X01vZDoKCWNtcC5sCQklZDAsJjB4MDAwMDQxRkUKCWJnZS5iCQlOb19TY2FsZQpEb19TY2FsZToKCW1vdi53CQklZDAsUiglYTYpCgltb3YubAkJJWQxLFJfSGkoJWE2KQoJbW92LmwJCSVkMixSX0xvKCVhNikKCW1vdi5sCQlMX1NDUjEoJWE2KSwlZDYKCW1vdi53CQklZDYsWSglYTYpCgltb3YubAkJJWQ0LFlfSGkoJWE2KQoJbW92LmwJCSVkNSxZX0xvKCVhNikKCWZtb3YueAkJUiglYTYpLCVmcDAJCSMgbm8gZXhjZXB0aW9uCgltb3YuYgkJJjEsU2NfRmxhZyglYTYpCglicmEuYgkJTW9kT3JSZW0KTm9fU2NhbGU6Cgltb3YubAkJJWQxLFJfSGkoJWE2KQoJbW92LmwJCSVkMixSX0xvKCVhNikKCXN1Yi5sCQkmMHgzRkZFLCVkMAoJbW92LncJCSVkMCxSKCVhNikKCW1vdi5sCQlMX1NDUjEoJWE2KSwlZDYKCXN1Yi5sCQkmMHgzRkZFLCVkNgoJbW92LmwJCSVkNixMX1NDUjEoJWE2KQoJZm1vdi54CQlSKCVhNiksJWZwMAoJbW92LncJCSVkNixZKCVhNikKCW1vdi5sCQklZDQsWV9IaSglYTYpCgltb3YubAkJJWQ1LFlfTG8oJWE2KQoJY2xyLmIJCVNjX0ZsYWcoJWE2KQoKIwpNb2RPclJlbToKCXRzdC5iCQlNb2RfRmxhZyglYTYpCgliZXEuYgkJRml4X1NpZ24KCgltb3YubAkJTF9TQ1IxKCVhNiksJWQ2CQkjIG5ldyBiaWFzZWQgZXhwbyhZKQoJc3VicS5sCQkmMSwlZDYJCQkjIGJpYXNlZCBleHBvKFkvMikKCWNtcC5sCQklZDAsJWQ2CglibHQuYgkJRml4X1NpZ24KCWJndC5iCQlMYXN0X1N1YgoKCWNtcC5sCQklZDEsJWQ0CglibmUuYgkJTm90X0VRCgljbXAubAkJJWQyLCVkNQoJYm5lLmIJCU5vdF9FUQoJYnJhLncJCVRpZV9DYXNlCgpOb3RfRVE6CgliY3MuYgkJRml4X1NpZ24KCkxhc3RfU3ViOgojCglmc3ViLngJCVkoJWE2KSwlZnAwCQkjIG5vIGV4Y2VwdGlvbnMKCWFkZHEubAkJJjEsJWQzCQkJIyBRIDo9IFEgKyAxCgojCkZpeF9TaWduOgojLi5HZXQgc2lnbiBvZiBYCgltb3YudwkJU2lnblgoJWE2KSwlZDYKCWJnZS5iCQlHZXRfUQoJZm5lZy54CQklZnAwCgojLi5HZXQgUQojCkdldF9ROgoJY2xyLmwJCSVkNgoJbW92LncJCVNpZ25RKCVhNiksJWQ2CQkjIEQ2IGlzIHNpZ24oUSkKCW1vdi5sCQkmOCwlZDcKCWxzci5sCQklZDcsJWQ2CglhbmQubAkJJjB4MDAwMDAwN0YsJWQzCQkjIDcgYml0cyBvZiBRCglvci5sCQklZDYsJWQzCQkJIyBzaWduIGFuZCBiaXRzIG9mIFEKIwlzd2FwCQklZDMKIwlmbW92LmwJCSVmcHNyLCVkNgojCWFuZC5sCQkmMHhGRjAwRkZGRiwlZDYKIwlvci5sCQklZDMsJWQ2CiMJZm1vdi5sCQklZDYsJWZwc3IJCSMgcHV0IFEgaW4gZnBzcgoJbW92LmIJCSVkMyxGUFNSX1FCWVRFKCVhNikJIyBwdXQgUSBpbiBmcHNyCgojClJlc3RvcmU6Cgltb3ZtLmwJCSglc3ApKywmMHhmYwkJIyAgeyVkMi0lZDd9Cgltb3YubAkJKCVzcCkrLCVkMAoJZm1vdi5sCQklZDAsJWZwY3IKCXRzdC5iCQlTY19GbGFnKCVhNikKCWJlcS5iCQlGaW5pc2gKCW1vdi5iCQkmRk1VTF9PUCwlZDEJCSMgbGFzdCBpbnN0IGlzIE1VTAoJZm11bC54CQlTY2FsZSglcGMpLCVmcDAJCSMgbWF5IGNhdXNlIHVuZGVyZmxvdwoJYnJhCQl0X2NhdGNoMgojIHRoZSAnMDQwIHBhY2thZ2UgZGlkIHRoaXMgYXBwYXJlbnRseSB0byBzZWUgaWYgdGhlIGRzdCBvcGVyYW5kIGZvciB0aGUKIyBwcmVjZWRpbmcgZm11bCB3YXMgYSBkZW5vcm0uIGJ1dCwgaXQgYmV0dGVyIG5vdCBoYXZlIGJlZW4gc2luY2UgdGhlCiMgYWxnb3JpdGhtIGp1c3QgZ290IGRvbmUgcGxheWluZyB3aXRoIGZwMCBhbmQgZXhwZWN0ZWQgbm8gZXhjZXB0aW9ucwojIGFzIGEgcmVzdWx0LiB0cnVzdCBtZS4uLgojCWJyYQkJdF9hdm9pZF91bnN1cHAJCSMgY2hlY2sgZm9yIGRlbm9ybSBhcyBhCiMJCQkJCQk7cmVzdWx0IG9mIHRoZSBzY2FsaW5nCgpGaW5pc2g6Cgltb3YuYgkJJkZNT1ZfT1AsJWQxCQkjIGxhc3QgaW5zdCBpcyBNT1ZFCglmbW92LngJCSVmcDAsJWZwMAkJIyBjYXB0dXJlIGV4Y2VwdGlvbnMgJiByb3VuZAoJYnJhCQl0X2NhdGNoMgoKUmVtX2lzXzA6CiMuLlIgPSAyXigtailYIC0gUSBZID0gWSwgdGh1cyBSID0gMCBhbmQgcXVvdGllbnQgPSAyXmogKFErMSkKCWFkZHEubAkJJjEsJWQzCgljbXAubAkJJWQwLCY4CQkJIyBEMCBpcyBqCgliZ2UuYgkJUV9CaWcKCglsc2wubAkJJWQwLCVkMwoJYnJhLmIJCVNldF9SXzAKClFfQmlnOgoJY2xyLmwJCSVkMwoKU2V0X1JfMDoKCWZtb3YucwkJJjB4MDAwMDAwMDAsJWZwMAoJY2xyLmIJCVNjX0ZsYWcoJWE2KQoJYnJhLncJCUZpeF9TaWduCgpUaWVfQ2FzZToKIy4uQ2hlY2sgcGFyaXR5IG9mIFEKCW1vdi5sCQklZDMsJWQ2CglhbmQubAkJJjB4MDAwMDAwMDEsJWQ2Cgl0c3QubAkJJWQ2CgliZXEudwkJRml4X1NpZ24JCSMgUSBpcyBldmVuCgojLi5RIGlzIG9kZCwgUSA6PSBRICsgMSwgc2lnblggOj0gLXNpZ25YCglhZGRxLmwJCSYxLCVkMwoJbW92LncJCVNpZ25YKCVhNiksJWQ2Cgllb3IubAkJJjB4MDAwMDgwMDAsJWQ2Cgltb3YudwkJJWQ2LFNpZ25YKCVhNikKCWJyYS53CQlGaXhfU2lnbgoKcW5hbjoJbG9uZwkJMHg3ZmZmMDAwMCwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZgoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJdF9keigpOiBIYW5kbGUgRFogZXhjZXB0aW9uIGR1cmluZyB0cmFuc2NlbmRlbnRhbCBlbXVsYXRpb24uCSMKIwkgICAgICAgIFNldHMgTiBiaXQgYWNjb3JkaW5nIHRvIHNpZ24gb2Ygc291cmNlIG9wZXJhbmQuCQkjCiMJdF9kejIoKTogSGFuZGxlIERaIGV4Y2VwdGlvbiBkdXJpbmcgdHJhbnNjZW5kZW50YWwgZW11bGF0aW9uLgkjCiMJCSBTZXRzIE4gYml0IGFsd2F5cy4JCQkJCSMKIwkJCQkJCQkJCSMKIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCU5vbmUJCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWEwID0gcG9pbnRlciB0byBzb3VyY2Ugb3BlcmFuZAkJCQkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJZnAwID0gZGVmYXVsdCByZXN1bHQJCQkJCQkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwktIFN0b3JlIHByb3Blcmx5IHNpZ25lZCBJTkYgaW50byBmcDAuCQkJCSMKIwktIFNldCBGUFNSIGV4Y2VwdGlvbiBzdGF0dXMgZHogYml0LCBjY29kZSBpbmYgYml0LCBhbmQJCSMKIwkgIGFjY3J1ZWQgZHogYml0LgkJCQkJCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCWdsb2JhbAkJdF9kegp0X2R6OgoJdHN0LmIJCVNSQ19FWCglYTApCQkjIG5vOyBpcyBzcmMgbmVnYXRpdmU/CglibWkuYgkJdF9kejIJCQkjIHllcwoKZHpfcGluZjoKCWZtb3YucwkJJjB4N2Y4MDAwMDAsJWZwMAkjIHJldHVybiArSU5GIGluIGZwMAoJb3JpLmwJCSZkemluZl9tYXNrLFVTRVJfRlBTUiglYTYpICMgc2V0IEkvRFovQURaCglydHMKCglnbG9iYWwJCXRfZHoyCnRfZHoyOgoJZm1vdi5zCQkmMHhmZjgwMDAwMCwlZnAwCSMgcmV0dXJuIC1JTkYgaW4gZnAwCglvcmkubAkJJmR6aW5mX21hc2srbmVnX21hc2ssVVNFUl9GUFNSKCVhNikgIyBzZXQgTi9JL0RaL0FEWgoJcnRzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIE9QRVJSIGV4Y2VwdGlvbjoJCQkJCQkjCiMJLSBzZXQgRlBTUiBleGNlcHRpb24gc3RhdHVzIG9wZXJyIGJpdCwgY29uZGl0aW9uIGNvZGUJIwojCSAgbmFuIGJpdDsgU3RvcmUgZGVmYXVsdCBOQU4gaW50byBmcDAJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCglnbG9iYWwJCXRfb3BlcnIKdF9vcGVycjoKCW9yaS5sCQkmb3BuYW5fbWFzayxVU0VSX0ZQU1IoJWE2KSAjIHNldCBOYU4vT1BFUlIvQUlPUAoJZm1vdm0ueAkJcW5hbiglcGMpLCYweDgwCQkjIHJldHVybiBkZWZhdWx0IE5BTiBpbiBmcDAKCXJ0cwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBFeHRlbmRlZCBERU5PUk06CQkJCQkJIwojCS0gRm9yIGFsbCBmdW5jdGlvbnMgdGhhdCBoYXZlIGEgZGVub3JtYWxpemVkIGlucHV0IGFuZAkjCiMJICB0aGF0IGYoeCk9eCwgdGhpcyBpcyB0aGUgZW50cnkgcG9pbnQuCQkJIwojCS0gd2Ugb25seSByZXR1cm4gdGhlIEVYT1AgaGVyZSBpZiBlaXRoZXIgdW5kZXJmbG93IG9yCSMKIwkgIGluZXhhY3QgaXMgZW5hYmxlZC4JCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMgRW50cnkgcG9pbnQgZm9yIHNjYWxlIHcvIGV4dGVuZGVkIGRlbm9ybS4gVGhlIGZ1bmN0aW9uIGRvZXMKIyBOT1Qgc2V0IElORVgyL0FVTkZML0FJTkVYLgoJZ2xvYmFsCQl0X3Jlc2Rucm0KdF9yZXNkbnJtOgoJb3JpLmwJCSZ1bmZsX21hc2ssVVNFUl9GUFNSKCVhNikgIyBzZXQgVU5GTAoJYnJhLmIJCXhkbnJtX2NvbgoKCWdsb2JhbAkJdF9leHRkbnJtCnRfZXh0ZG5ybToKCW9yaS5sCQkmdW5maW54X21hc2ssVVNFUl9GUFNSKCVhNikgIyBzZXQgVU5GTC9JTkVYMi9BVU5GTC9BSU5FWAoKeGRucm1fY29uOgoJbW92LmwJCSVhMCwlYTEJCQkjIG1ha2UgY29weSBvZiBzcmMgcHRyCgltb3YubAkJJWQwLCVkMQkJCSMgbWFrZSBjb3B5IG9mIHJuZCBwcmVjLG1vZGUKCWFuZGkuYgkJJjB4YzAsJWQxCQkjIGV4dGVuZGVkIHByZWNpc2lvbj8KCWJuZS5iCQl4ZG5ybV9zZAkJIyBubwoKIyByZXN1bHQgcHJlY2lzaW9uIGlzIGV4dGVuZGVkLgoJdHN0LmIJCUxPQ0FMX0VYKCVhMCkJCSMgaXMgZGVub3JtIG5lZ2F0aXZlPwoJYnBsLmIJCXhkbnJtX2V4aXQJCSMgbm8KCglic2V0CQkmbmVnX2JpdCxGUFNSX0NDKCVhNikJIyB5ZXM7IHNldCAnTicgY2NvZGUgYml0CglicmEuYgkJeGRucm1fZXhpdAoKIyByZXN1bHQgcHJlY2lzaW9uIGlzIHNpbmdsZSBvciBkb3VibGUKeGRucm1fc2Q6Cgltb3YubAkJJWExLC0oJXNwKQoJdHN0LmIJCUxPQ0FMX0VYKCVhMCkJCSMgaXMgZGVub3JtIHBvcyBvciBuZWc/CglzbWkuYgkJJWQxCQkJIyBzZXQgZDAgYWNjb2RpbmdseQoJYnNyLmwJCXVuZl9zdWIKCW1vdi5sCQkoJXNwKSssJWExCnhkbnJtX2V4aXQ6CglmbW92bS54CQkoJWEwKSwmMHg4MAkJIyByZXR1cm4gZGVmYXVsdCByZXN1bHQgaW4gZnAwCgoJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQwCglhbmRpLmIJCSYweDBhLCVkMAkJIyBpcyBVTkZMIG9yIElORVggZW5hYmxlZD8KCWJuZS5iCQl4ZG5ybV9lbmEJCSMgeWVzCglydHMKCiMjIyMjIyMjIyMjIyMjIyMKIyB1bmZsIGVuYWJsZWQgIwojIyMjIyMjIyMjIyMjIyMjCiMgd2UgaGF2ZSBhIERFTk9STSB0aGF0IG5lZWRzIHRvIGJlIGNvbnZlcnRlZCBpbnRvIGFuIEVYT1AuCiMgc28sIG5vcm1hbGl6ZSB0aGUgbWFudGlzc2EsIGFkZCAweDYwMDAgdG8gdGhlIG5ldyBleHBvbmVudCwKIyBhbmQgcmV0dXJuIHRoZSByZXN1bHQgaW4gZnAxLgp4ZG5ybV9lbmE6Cgltb3YudwkJTE9DQUxfRVgoJWExKSxGUF9TQ1IwX0VYKCVhNikKCW1vdi5sCQlMT0NBTF9ISSglYTEpLEZQX1NDUjBfSEkoJWE2KQoJbW92LmwJCUxPQ0FMX0xPKCVhMSksRlBfU0NSMF9MTyglYTYpCgoJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCglic3IubAkJbm9ybQkJCSMgbm9ybWFsaXplIG1hbnRpc3NhCglhZGRpLmwJCSYweDYwMDAsJWQwCQkjIGFkZCBleHRyYSBiaWFzCglhbmRpLncJCSYweDgwMDAsRlBfU0NSMF9FWCglYTYpCSMga2VlcCBvbGQgc2lnbgoJb3IudwkJJWQwLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwb25lbnQKCglmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4NDAJIyByZXR1cm4gRVhPUCBpbiBmcDEKCXJ0cwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBVTkZMIGV4Y2VwdGlvbjoJCQkJCQkjCiMJLSBUaGlzIHJvdXRpbmUgaXMgZm9yIGNhc2VzIHdoZXJlIGV2ZW4gYW4gRVhPUCBpc24ndAkjCiMJICBsYXJnZSBlbm91Z2ggdG8gaG9sZCB0aGUgcmFuZ2Ugb2YgdGhpcyByZXN1bHQuCSMKIwkgIEluIHN1Y2ggYSBjYXNlLCB0aGUgRVhPUCBlcXVhbHMgemVyby4JCQkjCiMJLSBSZXR1cm4gdGhlIGRlZmF1bHQgcmVzdWx0IHRvIHRoZSBwcm9wZXIgcHJlY2lzaW9uCSMKIwkgIHdpdGggdGhlIHNpZ24gb2YgdGhpcyByZXN1bHQgYmVpbmcgdGhlIHNhbWUgYXMgdGhhdAkjCiMJICBvZiB0aGUgc3JjIG9wZXJhbmQuCQkJCQkjCiMJLSB0X3VuZmwyKCkgaXMgcHJvdmlkZWQgdG8gZm9yY2UgdGhlIHJlc3VsdCBzaWduIHRvCSMKIwkgIHBvc2l0aXZlIHdoaWNoIGlzIHRoZSBkZXNpcmVkIHJlc3VsdCBmb3IgZmV0b3goKS4JIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoJZ2xvYmFsCQl0X3VuZmwKdF91bmZsOgoJb3JpLmwJCSZ1bmZpbnhfbWFzayxVU0VSX0ZQU1IoJWE2KSAjIHNldCBVTkZML0lORVgyL0FVTkZML0FJTkVYCgoJdHN0LmIJCSglYTApCQkJIyBpcyByZXN1bHQgcG9zIG9yIG5lZz8KCXNtaS5iCQklZDEJCQkjIHNldCBkMSBhY2NvcmRpbmdseQoJYnNyLmwJCXVuZl9zdWIJCQkjIGNhbGMgZGVmYXVsdCB1bmZsIHJlc3VsdAoJZm1vdm0ueAkJKCVhMCksJjB4ODAJCSMgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGluIGZwMAoKCWZtb3YucwkJJjB4MDAwMDAwMDAsJWZwMQkjIHJldHVybiBFWE9QIGluIGZwMQoJcnRzCgojIHRfdW5mbDIgQUxXQVlTIHRlbGxzIHVuZl9zdWIgdG8gY3JlYXRlIGEgcG9zaXRpdmUgcmVzdWx0CglnbG9iYWwJCXRfdW5mbDIKdF91bmZsMjoKCW9yaS5sCQkmdW5maW54X21hc2ssVVNFUl9GUFNSKCVhNikgIyBzZXQgVU5GTC9JTkVYMi9BVU5GTC9BSU5FWAoKCXNmLmIJCSVkMQkJCSMgc2V0IGQwIHRvIHJlcHJlc2VudCBwb3NpdGl2ZQoJYnNyLmwJCXVuZl9zdWIJCQkjIGNhbGMgZGVmYXVsdCB1bmZsIHJlc3VsdAoJZm1vdm0ueAkJKCVhMCksJjB4ODAJCSMgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGluIGZwMAoKCWZtb3YucwkJJjB4MDAwMDAwMCwlZnAxCQkjIHJldHVybiBFWE9QIGluIGZwMQoJcnRzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIE9WRkwgZXhjZXB0aW9uOgkJCQkJCSMKIwktIFRoaXMgcm91dGluZSBpcyBmb3IgY2FzZXMgd2hlcmUgZXZlbiBhbiBFWE9QIGlzbid0CSMKIwkgIGxhcmdlIGVub3VnaCB0byBob2xkIHRoZSByYW5nZSBvZiB0aGlzIHJlc3VsdC4JIwojCS0gUmV0dXJuIHRoZSBkZWZhdWx0IHJlc3VsdCB0byB0aGUgcHJvcGVyIHByZWNpc2lvbgkjCiMJICB3aXRoIHRoZSBzaWduIG9mIHRoaXMgcmVzdWx0IGJlaW5nIHRoZSBzYW1lIGFzIHRoYXQJIwojCSAgb2YgdGhlIHNyYyBvcGVyYW5kLgkJCQkJIwojCS0gdF9vdmZsMigpIGlzIHByb3ZpZGVkIHRvIGZvcmNlIHRoZSByZXN1bHQgc2lnbiB0bwkjCiMJICBwb3NpdGl2ZSB3aGljaCBpcyB0aGUgZGVzaXJlZCByZXN1bHQgZm9yIGZjb3NoKCkuCSMKIwktIHRfb3ZmbF9zYygpIGlzIHByb3ZpZGVkIGZvciBzY2FsZSgpIHdoaWNoIG9ubHkgc2V0cwkjCiMJICB0aGUgaW5leGFjdCBiaXRzIGlmIHRoZSBudW1iZXIgaXMgaW5leGFjdCBmb3IgdGhlCSMKIwkgIHByZWNpc2lvbiBpbmRpY2F0ZWQuCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoJZ2xvYmFsCQl0X292Zmxfc2MKdF9vdmZsX3NjOgoJb3JpLmwJCSZvdmZsX2lueF9tYXNrLFVTRVJfRlBTUiglYTYpICMgc2V0IE9WRkwvQU9WRkwvQUlORVgKCgltb3YuYgkJJWQwLCVkMQkJCSMgZmV0Y2ggcm5kIG1vZGUvcHJlYwoJYW5kaS5iCQkmMHhjMCwlZDEJCSMgZXh0cmFjdCBybmQgcHJlYwoJYmVxLmIJCW92Zmxfd29yawkJIyBwcmVjIGlzIGV4dGVuZGVkCgoJdHN0LmIJCUxPQ0FMX0hJKCVhMCkJCSMgaXMgZHN0IGEgREVOT1JNPwoJYm1pLmIJCW92Zmxfc2Nfbm9ybQkJIyBubwoKIyBkc3Qgb3AgaXMgYSBERU5PUk0uIHdlIGhhdmUgdG8gbm9ybWFsaXplIHRoZSBtYW50aXNzYSB0byBzZWUgaWYgdGhlCiMgcmVzdWx0IHdvdWxkIGJlIGluZXhhY3QgZm9yIHRoZSBnaXZlbiBwcmVjaXNpb24uIG1ha2UgYSBjb3B5IG9mIHRoZQojIGRzdCBzbyB3ZSBkb24ndCBzY3JldyB1cCB0aGUgdmVyc2lvbiBwYXNzZWQgdG8gdXMuCgltb3YudwkJTE9DQUxfRVgoJWEwKSxGUF9TQ1IwX0VYKCVhNikKCW1vdi5sCQlMT0NBTF9ISSglYTApLEZQX1NDUjBfSEkoJWE2KQoJbW92LmwJCUxPQ0FMX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCglsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzIHB0ciB0byBGUF9TQ1IwCgltb3ZtLmwJCSYweGMwODAsLSglc3ApCQkjIHNhdmUgZDAtZDEvYTAKCWJzci5sCQlub3JtCQkJIyBub3JtYWxpemUgbWFudGlzc2EKCW1vdm0ubAkJKCVzcCkrLCYweDAxMDMJCSMgcmVzdG9yZSBkMC1kMS9hMAoKb3ZmbF9zY19ub3JtOgoJY21waS5iCQklZDEsJjB4NDAJCSMgaXMgcHJlYyBkYmw/CglibmUuYgkJb3ZmbF9zY19kYmwJCSMgbm87IHNnbApvdmZsX3NjX3NnbDoKCXRzdC5sCQlMT0NBTF9MTyglYTApCQkjIGlzIGxvIGx3IG9mIHNnbCBzZXQ/CglibmUuYgkJb3ZmbF9zY19pbngJCSMgeWVzCgl0c3QuYgkJMytMT0NBTF9ISSglYTApCQkjIGlzIGxvIGJ5dGUgb2YgaGkgbHcgc2V0PwoJYm5lLmIJCW92Zmxfc2NfaW54CQkjIHllcwoJYnJhLmIJCW92Zmxfd29yawkJIyBkb24ndCBzZXQgSU5FWDIKb3ZmbF9zY19kYmw6Cgltb3YubAkJTE9DQUxfTE8oJWEwKSwlZDEJIyBhcmUgYW55IG9mIGxvIDExIGJpdHMgb2YKCWFuZGkubAkJJjB4N2ZmLCVkMQkJIyBkYmwgbWFudGlzc2Egc2V0PwoJYmVxLmIJCW92Zmxfd29yawkJIyBubzsgZG9uJ3Qgc2V0IElORVgyCm92Zmxfc2NfaW54OgoJb3JpLmwJCSZpbmV4Ml9tYXNrLFVTRVJfRlBTUiglYTYpICMgc2V0IElORVgyCglicmEuYgkJb3ZmbF93b3JrCQkjIGNvbnRpbnVlCgoJZ2xvYmFsCQl0X292ZmwKdF9vdmZsOgoJb3JpLmwJCSZvdmZpbnhfbWFzayxVU0VSX0ZQU1IoJWE2KSAjIHNldCBPVkZML0lORVgyL0FPVkZML0FJTkVYCgpvdmZsX3dvcms6Cgl0c3QuYgkJTE9DQUxfRVgoJWEwKQkJIyB3aGF0IGlzIHRoZSBzaWduPwoJc21pLmIJCSVkMQkJCSMgc2V0IGQxIGFjY29yZGluZ2x5Cglic3IubAkJb3ZmX3JlcwkJCSMgY2FsYyBkZWZhdWx0IG92ZmwgcmVzdWx0Cgltb3YuYgkJJWQwLEZQU1JfQ0MoJWE2KQkjIGluc2VydCBuZXcgY2NvZGVzCglmbW92bS54CQkoJWEwKSwmMHg4MAkJIyByZXR1cm4gZGVmYXVsdCByZXN1bHQgaW4gZnAwCgoJZm1vdi5zCQkmMHgwMDAwMDAwMCwlZnAxCSMgcmV0dXJuIEVYT1AgaW4gZnAxCglydHMKCiMgdF9vdmZsMiBBTFdBWVMgdGVsbHMgb3ZmX3JlcyB0byBjcmVhdGUgYSBwb3NpdGl2ZSByZXN1bHQKCWdsb2JhbAkJdF9vdmZsMgp0X292ZmwyOgoJb3JpLmwJCSZvdmZpbnhfbWFzayxVU0VSX0ZQU1IoJWE2KSAjIHNldCBPVkZML0lORVgyL0FPVkZML0FJTkVYCgoJc2YuYgkJJWQxCQkJIyBjbGVhciBzaWduIGZsYWcgZm9yIHBvc2l0aXZlCglic3IubAkJb3ZmX3JlcwkJCSMgY2FsYyBkZWZhdWx0IG92ZmwgcmVzdWx0Cgltb3YuYgkJJWQwLEZQU1JfQ0MoJWE2KQkjIGluc2VydCBuZXcgY2NvZGVzCglmbW92bS54CQkoJWEwKSwmMHg4MAkJIyByZXR1cm4gZGVmYXVsdCByZXN1bHQgaW4gZnAwCgoJZm1vdi5zCQkmMHgwMDAwMDAwMCwlZnAxCSMgcmV0dXJuIEVYT1AgaW4gZnAxCglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgdF9jYXRjaCgpOgkJCQkJCQkjCiMJLSB0aGUgbGFzdCBvcGVyYXRpb24gb2YgYSB0cmFuc2NlbmRlbnRhbCBlbXVsYXRpb24JIwojCSAgcm91dGluZSBtYXkgaGF2ZSBjYXVzZWQgYW4gdW5kZXJmbG93IG9yIG92ZXJmbG93LgkjCiMJICB3ZSBmaW5kIG91dCBpZiB0aGlzIG9jY3VycmVkIGJ5IGRvaW5nIGFuIGZzYXZlIGFuZAkjCiMJICBjaGVja2luZyB0aGUgZXhjZXB0aW9uIGJpdC4gaWYgb25lIGRpZCBvY2N1ciwgdGhlbiB3ZQkjCiMJICBqdW1wIHRvIGZnZW5fZXhjZXB0KCkgd2hpY2ggY3JlYXRlcyB0aGUgZGVmYXVsdAkjCiMJICByZXN1bHQgYW5kIEVYT1AgZm9yIHVzLgkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCglnbG9iYWwJCXRfY2F0Y2gKdF9jYXRjaDoKCglmc2F2ZQkJLSglc3ApCgl0c3QuYgkJMHgyKCVzcCkKCWJtaS5iCQljYXRjaAoJYWRkLmwJCSYweGMsJXNwCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIElORVgyIGV4Y2VwdGlvbjoJCQkJCQkjCiMJLSBUaGUgaW5leDIgYW5kIGFpbmV4IGJpdHMgYXJlIHNldC4JCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCglnbG9iYWwJCXRfaW54Mgp0X2lueDI6CglmYmx0LncJCXRfbWlueDIKCWZiZXEudwkJaW54Ml96ZXJvCgoJZ2xvYmFsCQl0X3BpbngyCnRfcGlueDI6CglvcmkudwkJJmlueDJhX21hc2ssMitVU0VSX0ZQU1IoJWE2KSAjIHNldCBJTkVYMi9BSU5FWAoJcnRzCgoJZ2xvYmFsCQl0X21pbngyCnRfbWlueDI6CglvcmkubAkJJmlueDJhX21hc2srbmVnX21hc2ssVVNFUl9GUFNSKCVhNikgIyBzZXQgTi9JTkVYMi9BSU5FWAoJcnRzCgppbngyX3plcm86Cgltb3YuYgkJJnpfYm1hc2ssRlBTUl9DQyglYTYpCglvcmkudwkJJmlueDJhX21hc2ssMitVU0VSX0ZQU1IoJWE2KSAjIHNldCBJTkVYMi9BSU5FWAoJcnRzCgojIGFuIHVuZGVyZmxvdyBvciBvdmVyZmxvdyBleGNlcHRpb24gb2NjdXJyZWQuCiMgd2UgbXVzdCBzZXQgSU5FWC9BSU5FWCBzaW5jZSB0aGUgZm11bC9mZGl2L2Ztb3YgZW11bGF0aW9uIG1heSBub3QhCmNhdGNoOgoJb3JpLncJCSZpbngyYV9tYXNrLEZQU1JfRVhDRVBUKCVhNikKY2F0Y2gyOgoJYnNyLmwJCWZnZW5fZXhjZXB0CglhZGQubAkJJjB4Yywlc3AKCXJ0cwoKCWdsb2JhbAkJdF9jYXRjaDIKdF9jYXRjaDI6CgoJZnNhdmUJCS0oJXNwKQoKCXRzdC5iCQkweDIoJXNwKQoJYm1pLmIJCWNhdGNoMgoJYWRkLmwJCSYweGMsJXNwCgoJZm1vdi5sCQklZnBzciwlZDAKCW9yLmwJCSVkMCxVU0VSX0ZQU1IoJWE2KQoKCXJ0cwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIHVuZl9yZXMoKTogdW5kZXJmbG93IGRlZmF1bHQgcmVzdWx0IGNhbGN1bGF0aW9uIGZvciB0cmFuc2NlbmRlbnRhbHMJIwojCQkJCQkJCQkJIwojIElOUFVUOgkJCQkJCQkJIwojCWQwICAgOiBybmQgbW9kZSxwcmVjaXNpb24JCQkJCSMKIwlkMS5iIDogc2lnbiBiaXQgb2YgcmVzdWx0ICgnMTExMTExMTEgPSAoLSkgOyAnMDAwMDAwMDAgPSAoKykpCSMKIyBPVVRQVVQ6CQkJCQkJCQkjCiMJYTAgICA6IHBvaW50cyB0byByZXN1bHQgKGluIGluc3RydWN0aW9uIG1lbW9yeSkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKdW5mX3N1YjoKCW9yaS5sCQkmdW5maW54X21hc2ssVVNFUl9GUFNSKCVhNikKCglhbmRpLncJCSYweDEwLCVkMQkJIyBrZWVwIHNpZ24gYml0IGluIDR0aCBzcG90CgoJbHNyLmIJCSYweDQsJWQwCQkjIHNoaWZ0IHJuZCBwcmVjLG1vZGUgdG8gbG8gYml0cwoJYW5kaS5iCQkmMHhmLCVkMAkJIyBzdHJpcCBoaSBybmQgbW9kZSBiaXQKCW9yLmIJCSVkMSwlZDAJCQkjIGNvbmNhdCB7c2duLG1vZGUscHJlY30KCgltb3YubAkJJWQwLCVkMQkJCSMgbWFrZSBhIGNvcHkKCWxzbC5iCQkmMHgxLCVkMQkJIyBtdWx0IGluZGV4IDIgYnkgMgoKCW1vdi5iCQkodGJsX3VuZl9jYy5iLCVwYywlZDAudyoxKSxGUFNSX0NDKCVhNikgIyBpbnNlcnQgY2NvZGUgYml0cwoJbGVhCQkodGJsX3VuZl9yZXN1bHQuYiwlcGMsJWQxLncqOCksJWEwICMgZ3JhYiByZXN1bHQgcHRyCglydHMKCnRibF91bmZfY2M6CglieXRlCQkweDQsIDB4NCwgMHg0LCAweDAKCWJ5dGUJCTB4NCwgMHg0LCAweDQsIDB4MAoJYnl0ZQkJMHg0LCAweDQsIDB4NCwgMHgwCglieXRlCQkweDAsIDB4MCwgMHgwLCAweDAKCWJ5dGUJCTB4OCsweDQsIDB4OCsweDQsIDB4OCwgMHg4KzB4NAoJYnl0ZQkJMHg4KzB4NCwgMHg4KzB4NCwgMHg4LCAweDgrMHg0CglieXRlCQkweDgrMHg0LCAweDgrMHg0LCAweDgsIDB4OCsweDQKCnRibF91bmZfcmVzdWx0OgoJbG9uZwkJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwICMgWkVSTztleHQKCWxvbmcJCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MCAjIFpFUk87ZXh0Cglsb25nCQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAgIyBaRVJPO2V4dAoJbG9uZwkJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMSwgMHgwICMgTUlOOyBleHQKCglsb25nCQkweDNmODEwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAgIyBaRVJPO3NnbAoJbG9uZwkJMHgzZjgxMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwICMgWkVSTztzZ2wKCWxvbmcJCTB4M2Y4MTAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MCAjIFpFUk87c2dsCglsb25nCQkweDNmODEwMDAwLCAweDAwMDAwMTAwLCAweDAwMDAwMDAwLCAweDAgIyBNSU47IHNnbAoKCWxvbmcJCTB4M2MwMTAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MCAjIFpFUk87ZGJsCglsb25nCQkweDNjMDEwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAgIyBaRVIwO2RibAoJbG9uZwkJMHgzYzAxMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwICMgWkVSTztkYmwKCWxvbmcJCTB4M2MwMTAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDA4MDAsIDB4MCAjIE1JTjsgZGJsCgoJbG9uZwkJMHgwLDB4MCwweDAsMHgwCglsb25nCQkweDAsMHgwLDB4MCwweDAKCWxvbmcJCTB4MCwweDAsMHgwLDB4MAoJbG9uZwkJMHgwLDB4MCwweDAsMHgwCgoJbG9uZwkJMHg4MDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwICMgWkVSTztleHQKCWxvbmcJCTB4ODAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MCAjIFpFUk87ZXh0Cglsb25nCQkweDgwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAxLCAweDAgIyBNSU47IGV4dAoJbG9uZwkJMHg4MDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwICMgWkVSTztleHQKCglsb25nCQkweGJmODEwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAgIyBaRVJPO3NnbAoJbG9uZwkJMHhiZjgxMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwICMgWkVSTztzZ2wKCWxvbmcJCTB4YmY4MTAwMDAsIDB4MDAwMDAxMDAsIDB4MDAwMDAwMDAsIDB4MCAjIE1JTjsgc2dsCglsb25nCQkweGJmODEwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAgIyBaRVJPO3NnbAoKCWxvbmcJCTB4YmMwMTAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MCAjIFpFUk87ZGJsCglsb25nCQkweGJjMDEwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAgIyBaRVJPO2RibAoJbG9uZwkJMHhiYzAxMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDgwMCwgMHgwICMgTUlOOyBkYmwKCWxvbmcJCTB4YmMwMTAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MCAjIFpFUk87ZGJsCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBzcmNfemVybygpOiBSZXR1cm4gc2lnbmVkIHplcm8gYWNjb3JkaW5nIHRvIHNpZ24gb2Ygc3JjIG9wZXJhbmQuCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoJZ2xvYmFsCQlzcmNfemVybwpzcmNfemVybzoKCXRzdC5iCQlTUkNfRVgoJWEwKQkJIyBnZXQgc2lnbiBvZiBzcmMgb3BlcmFuZAoJYm1pLmIJCWxkX216ZXJvCQkjIGlmIG5lZywgbG9hZCBuZWcgemVybwoKIwojIGxkX3B6ZXJvKCk6IHJldHVybiBhIHBvc2l0aXZlIHplcm8uCiMKCWdsb2JhbAkJbGRfcHplcm8KbGRfcHplcm86CglmbW92LnMJCSYweDAwMDAwMDAwLCVmcDAJIyBsb2FkICswCgltb3YuYgkJJnpfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0ICdaJyBjY29kZSBiaXQKCXJ0cwoKIyBsZF9temVybygpOiByZXR1cm4gYSBuZWdhdGl2ZSB6ZXJvLgoJZ2xvYmFsCQlsZF9temVybwpsZF9temVybzoKCWZtb3YucwkJJjB4ODAwMDAwMDAsJWZwMAkjIGxvYWQgLTAKCW1vdi5iCQkmbmVnX2JtYXNrK3pfYm1hc2ssRlBTUl9DQyglYTYpICMgc2V0ICdOJywnWicgY2NvZGUgYml0cwoJcnRzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgZHN0X3plcm8oKTogUmV0dXJuIHNpZ25lZCB6ZXJvIGFjY29yZGluZyB0byBzaWduIG9mIGRzdCBvcGVyYW5kLgkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCWdsb2JhbAkJZHN0X3plcm8KZHN0X3plcm86Cgl0c3QuYgkJRFNUX0VYKCVhMSkJCSMgZ2V0IHNpZ24gb2YgZHN0IG9wZXJhbmQKCWJtaS5iCQlsZF9temVybwkJIyBpZiBuZWcsIGxvYWQgbmVnIHplcm8KCWJyYS5iCQlsZF9wemVybwkJIyBsb2FkIHBvc2l0aXZlIHplcm8KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBzcmNfaW5mKCk6IFJldHVybiBzaWduZWQgaW5mIGFjY29yZGluZyB0byBzaWduIG9mIHNyYyBvcGVyYW5kLgkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCWdsb2JhbAkJc3JjX2luZgpzcmNfaW5mOgoJdHN0LmIJCVNSQ19FWCglYTApCQkjIGdldCBzaWduIG9mIHNyYyBvcGVyYW5kCglibWkuYgkJbGRfbWluZgkJCSMgaWYgbmVnYXRpdmUgYnJhbmNoCgojCiMgbGRfcGluZigpOiByZXR1cm4gYSBwb3NpdGl2ZSBpbmZpbml0eS4KIwoJZ2xvYmFsCQlsZF9waW5mCmxkX3BpbmY6CglmbW92LnMJCSYweDdmODAwMDAwLCVmcDAJIyBsb2FkICtJTkYKCW1vdi5iCQkmaW5mX2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCAnSU5GJyBjY29kZSBiaXQKCXJ0cwoKIwojIGxkX21pbmYoKTpyZXR1cm4gYSBuZWdhdGl2ZSBpbmZpbml0eS4KIwoJZ2xvYmFsCQlsZF9taW5mCmxkX21pbmY6CglmbW92LnMJCSYweGZmODAwMDAwLCVmcDAJIyBsb2FkIC1JTkYKCW1vdi5iCQkmbmVnX2JtYXNrK2luZl9ibWFzayxGUFNSX0NDKCVhNikgIyBzZXQgJ04nLCdJJyBjY29kZSBiaXRzCglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBkc3RfaW5mKCk6IFJldHVybiBzaWduZWQgaW5mIGFjY29yZGluZyB0byBzaWduIG9mIGRzdCBvcGVyYW5kLgkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCWdsb2JhbAkJZHN0X2luZgpkc3RfaW5mOgoJdHN0LmIJCURTVF9FWCglYTEpCQkjIGdldCBzaWduIG9mIGRzdCBvcGVyYW5kCglibWkuYgkJbGRfbWluZgkJCSMgaWYgbmVnYXRpdmUgYnJhbmNoCglicmEuYgkJbGRfcGluZgoKCWdsb2JhbAkJc3pyX2luZgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIHN6cl9pbmYoKTogUmV0dXJuICtaRVJPIGZvciBhIG5lZ2F0aXZlIHNyYyBvcGVyYW5kIG9yCQkjCiMJICAgICAgICAgICAgK0lORiBmb3IgYSBwb3NpdGl2ZSBzcmMgb3BlcmFuZC4JCSMKIwkgICAgIFJvdXRpbmUgdXNlZCBmb3IgZmV0b3gsIGZ0d290b3gsIGFuZCBmdGVudG94LgkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCnN6cl9pbmY6Cgl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgY2hlY2sgc2lnbiBvZiBzb3VyY2UKCWJtaS5iCQlsZF9wemVybwoJYnJhLmIJCWxkX3BpbmYKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBzb3ByX2luZigpOiBSZXR1cm4gK0lORiBmb3IgYSBwb3NpdGl2ZSBzcmMgb3BlcmFuZCBvcgkJCSMKIwkgICAgICBqdW1wIHRvIG9wZXJhbmQgZXJyb3Igcm91dGluZSBmb3IgYSBuZWdhdGl2ZSBzcmMgb3BlcmFuZC4JIwojCSAgICAgIFJvdXRpbmUgdXNlZCBmb3IgZmxvZ24sIGZsb2ducDEsIGZsb2cxMCwgYW5kIGZsb2cyLgkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCWdsb2JhbAkJc29wcl9pbmYKc29wcl9pbmY6Cgl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgY2hlY2sgc2lnbiBvZiBzb3VyY2UKCWJtaS53CQl0X29wZXJyCglicmEuYgkJbGRfcGluZgoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBzZXRveG0xaSgpOiBSZXR1cm4gbWludXMgb25lIGZvciBhIG5lZ2F0aXZlIHNyYyBvcGVyYW5kIG9yCSMKIwkgICAgICBwb3NpdGl2ZSBpbmZpbml0eSBmb3IgYSBwb3NpdGl2ZSBzcmMgb3BlcmFuZC4JIwojCSAgICAgIFJvdXRpbmUgdXNlZCBmb3IgZmV0b3htMS4JCQkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoJZ2xvYmFsCQlzZXRveG0xaQpzZXRveG0xaToKCXRzdC5iCQlTUkNfRVgoJWEwKQkJIyBjaGVjayBzaWduIG9mIHNvdXJjZQoJYm1pLmIJCWxkX21vbmUKCWJyYS5iCQlsZF9waW5mCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgc3JjX29uZSgpOiBSZXR1cm4gc2lnbmVkIG9uZSBhY2NvcmRpbmcgdG8gc2lnbiBvZiBzcmMgb3BlcmFuZC4JIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCglnbG9iYWwJCXNyY19vbmUKc3JjX29uZToKCXRzdC5iCQlTUkNfRVgoJWEwKQkJIyBjaGVjayBzaWduIG9mIHNvdXJjZQoJYm1pLmIJCWxkX21vbmUKCiMKIyBsZF9wb25lKCk6IHJldHVybiBwb3NpdGl2ZSBvbmUuCiMKCWdsb2JhbAkJbGRfcG9uZQpsZF9wb25lOgoJZm1vdi5zCQkmMHgzZjgwMDAwMCwlZnAwCSMgbG9hZCArMQoJY2xyLmIJCUZQU1JfQ0MoJWE2KQoJcnRzCgojCiMgbGRfbW9uZSgpOiByZXR1cm4gbmVnYXRpdmUgb25lLgojCglnbG9iYWwJCWxkX21vbmUKbGRfbW9uZToKCWZtb3YucwkJJjB4YmY4MDAwMDAsJWZwMAkjIGxvYWQgLTEKCW1vdi5iCQkmbmVnX2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCAnTicgY2NvZGUgYml0CglydHMKCnBwaWJ5MjoJbG9uZwkJMHgzZmZmMDAwMCwgMHhjOTBmZGFhMiwgMHgyMTY4YzIzNQptcGlieTI6CWxvbmcJCTB4YmZmZjAwMDAsIDB4YzkwZmRhYTIsIDB4MjE2OGMyMzUKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgc3BpXzIoKTogUmV0dXJuIHNpZ25lZCBQSS8yIGFjY29yZGluZyB0byBzaWduIG9mIHNyYyBvcGVyYW5kLgkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCglnbG9iYWwJCXNwaV8yCnNwaV8yOgoJdHN0LmIJCVNSQ19FWCglYTApCQkjIGNoZWNrIHNpZ24gb2Ygc291cmNlCglibWkuYgkJbGRfbXBpMgoKIwojIGxkX3BwaTIoKTogcmV0dXJuIHBvc2l0aXZlIFBJLzIuCiMKCWdsb2JhbAkJbGRfcHBpMgpsZF9wcGkyOgoJZm1vdi5sCQklZDAsJWZwY3IKCWZtb3YueAkJcHBpYnkyKCVwYyksJWZwMAkjIGxvYWQgK3BpLzIKCWJyYS53CQl0X3BpbngyCQkJIyBzZXQgSU5FWDIKCiMKIyBsZF9tcGkyKCk6IHJldHVybiBuZWdhdGl2ZSBQSS8yLgojCglnbG9iYWwJCWxkX21waTIKbGRfbXBpMjoKCWZtb3YubAkJJWQwLCVmcGNyCglmbW92LngJCW1waWJ5MiglcGMpLCVmcDAJIyBsb2FkIC1waS8yCglicmEudwkJdF9taW54MgkJCSMgc2V0IElORVgyCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgVGhlIGZvbGxvd2luZyByb3V0aW5lcyBnaXZlIHN1cHBvcnQgZm9yIGZzaW5jb3MuICMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIwojIHNzaW5jb3N6KCk6IFdoZW4gdGhlIHNyYyBvcGVyYW5kIGlzIFpFUk8sIHN0b3JlIGEgb25lIGluIHRoZQojCSAgICAgIGNvc2luZSByZWdpc3RlciBhbmQgcmV0dXJuIGEgWkVSTyBpbiBmcDAgdy8gdGhlIHNhbWUgc2lnbgojCSAgICAgIGFzIHRoZSBzcmMgb3BlcmFuZC4KIwoJZ2xvYmFsCQlzc2luY29zegpzc2luY29zejoKCWZtb3YucwkJJjB4M2Y4MDAwMDAsJWZwMQoJdHN0LmIJCVNSQ19FWCglYTApCQkjIHRlc3Qgc2lnbgoJYnBsLmIJCXNpbmNvc3pwCglmbW92LnMJCSYweDgwMDAwMDAwLCVmcDAJIyByZXR1cm4gc2luIHJlc3VsdCBpbiBmcDAKCW1vdi5iCQkmel9ibWFzaytuZWdfYm1hc2ssRlBTUl9DQyglYTYpCglicmEuYgkJc3RvX2NvcwkJCSMgc3RvcmUgY29zaW5lIHJlc3VsdApzaW5jb3N6cDoKCWZtb3YucwkJJjB4MDAwMDAwMDAsJWZwMAkjIHJldHVybiBzaW4gcmVzdWx0IGluIGZwMAoJbW92LmIJCSZ6X2JtYXNrLEZQU1JfQ0MoJWE2KQoJYnJhLmIJCXN0b19jb3MJCQkjIHN0b3JlIGNvc2luZSByZXN1bHQKCiMKIyBzc2luY29zaSgpOiBXaGVuIHRoZSBzcmMgb3BlcmFuZCBpcyBJTkYsIHN0b3JlIGEgUU5BTiBpbiB0aGUgY29zaW5lCiMJICAgICAgcmVnaXN0ZXIgYW5kIGp1bXAgdG8gdGhlIG9wZXJhbmQgZXJyb3Igcm91dGluZSBmb3IgbmVnYXRpdmUKIwkgICAgICBzcmMgb3BlcmFuZHMuCiMKCWdsb2JhbAkJc3NpbmNvc2kKc3NpbmNvc2k6CglmbW92LngJCXFuYW4oJXBjKSwlZnAxCQkjIGxvYWQgTkFOCglic3IubAkJc3RvX2NvcwkJCSMgc3RvcmUgY29zaW5lIHJlc3VsdAoJYnJhLncJCXRfb3BlcnIKCiMKIyBzc2luY29zcW5hbigpOiBXaGVuIHRoZSBzcmMgb3BlcmFuZCBpcyBhIFFOQU4sIHN0b3JlIHRoZSBRTkFOIGluIHRoZSBjb3NpbmUKIwkJIHJlZ2lzdGVyIGFuZCBicmFuY2ggdG8gdGhlIHNyYyBRTkFOIHJvdXRpbmUuCiMKCWdsb2JhbAkJc3NpbmNvc3FuYW4Kc3NpbmNvc3FuYW46CglmbW92LngJCUxPQ0FMX0VYKCVhMCksJWZwMQoJYnNyLmwJCXN0b19jb3MKCWJyYS53CQlzcmNfcW5hbgoKIwojIHNzaW5jb3NzbmFuKCk6IFdoZW4gdGhlIHNyYyBvcGVyYW5kIGlzIGFuIFNOQU4sIHN0b3JlIHRoZSBTTkFOIHcvIHRoZSBTTkFOIGJpdCBzZXQKIwkJIGluIHRoZSBjb3NpbmUgcmVnaXN0ZXIgYW5kIGJyYW5jaCB0byB0aGUgc3JjIFNOQU4gcm91dGluZS4KIwoJZ2xvYmFsCQlzc2luY29zc25hbgpzc2luY29zc25hbjoKCWZtb3YueAkJTE9DQUxfRVgoJWEwKSwlZnAxCglic3IubAkJc3RvX2NvcwoJYnJhLncJCXNyY19zbmFuCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBzdG9fY29zKCk6IHN0b3JlIGZwMSB0byB0aGUgZnByZWcgZGVzaWduYXRlZCBieSB0aGUgQ01EUkVHIGRzdCBmaWVsZC4JIwojCSAgICAgZnAxIGhvbGRzIHRoZSByZXN1bHQgb2YgdGhlIGNvc2luZSBwb3J0aW9uIG9mIHNzaW5jb3MoKS4JIwojCSAgICAgdGhlIHZhbHVlIGluIGZwMSB3aWxsIG5vdCB0YWtlIGFueSBleGNlcHRpb25zIHdoZW4gbW92ZWQuCSMKIyBJTlBVVDoJCQkJCQkJCSMKIwlmcDEgOiBmcCB2YWx1ZSB0byBzdG9yZQkJCQkJCSMKIyBNT0RJRklFRDoJCQkJCQkJCSMKIwlkMAkJCQkJCQkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCglnbG9iYWwJCXN0b19jb3MKc3RvX2NvczoKCW1vdi5iCQkxK0VYQ19DTURSRUcoJWE2KSwlZDAKCWFuZGkudwkJJjB4NywlZDAKCW1vdi53CQkodGJsX3N0b19jb3MuYiwlcGMsJWQwLncqMiksJWQwCglqbXAJCSh0Ymxfc3RvX2Nvcy5iLCVwYywlZDAudyoxKQoKdGJsX3N0b19jb3M6CglzaG9ydAkJc3RvX2Nvc18wIC0gdGJsX3N0b19jb3MKCXNob3J0CQlzdG9fY29zXzEgLSB0Ymxfc3RvX2NvcwoJc2hvcnQJCXN0b19jb3NfMiAtIHRibF9zdG9fY29zCglzaG9ydAkJc3RvX2Nvc18zIC0gdGJsX3N0b19jb3MKCXNob3J0CQlzdG9fY29zXzQgLSB0Ymxfc3RvX2NvcwoJc2hvcnQJCXN0b19jb3NfNSAtIHRibF9zdG9fY29zCglzaG9ydAkJc3RvX2Nvc182IC0gdGJsX3N0b19jb3MKCXNob3J0CQlzdG9fY29zXzcgLSB0Ymxfc3RvX2NvcwoKc3RvX2Nvc18wOgoJZm1vdm0ueAkJJjB4NDAsRVhDX0ZQMCglYTYpCglydHMKc3RvX2Nvc18xOgoJZm1vdm0ueAkJJjB4NDAsRVhDX0ZQMSglYTYpCglydHMKc3RvX2Nvc18yOgoJZm1vdi54CQklZnAxLCVmcDIKCXJ0cwpzdG9fY29zXzM6CglmbW92LngJCSVmcDEsJWZwMwoJcnRzCnN0b19jb3NfNDoKCWZtb3YueAkJJWZwMSwlZnA0CglydHMKc3RvX2Nvc181OgoJZm1vdi54CQklZnAxLCVmcDUKCXJ0cwpzdG9fY29zXzY6CglmbW92LngJCSVmcDEsJWZwNgoJcnRzCnN0b19jb3NfNzoKCWZtb3YueAkJJWZwMSwlZnA3CglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoJZ2xvYmFsCQlzbW9kX3NkbnJtCglnbG9iYWwJCXNtb2Rfc25vcm0Kc21vZF9zZG5ybToKc21vZF9zbm9ybToKCW1vdi5iCQlEVEFHKCVhNiksJWQxCgliZXEubAkJc21vZAoJY21waS5iCQklZDEsJlpFUk8KCWJlcS53CQlzbW9kX3pybwoJY21waS5iCQklZDEsJklORgoJYmVxLmwJCXRfb3BlcnIKCWNtcGkuYgkJJWQxLCZERU5PUk0KCWJlcS5sCQlzbW9kCgljbXBpLmIJCSVkMSwmU05BTgoJYmVxLmwJCWRzdF9zbmFuCglicmEubAkJZHN0X3FuYW4KCglnbG9iYWwJCXNtb2Rfc3plcm8Kc21vZF9zemVybzoKCW1vdi5iCQlEVEFHKCVhNiksJWQxCgliZXEubAkJdF9vcGVycgoJY21waS5iCQklZDEsJlpFUk8KCWJlcS5sCQl0X29wZXJyCgljbXBpLmIJCSVkMSwmSU5GCgliZXEubAkJdF9vcGVycgoJY21waS5iCQklZDEsJkRFTk9STQoJYmVxLmwJCXRfb3BlcnIKCWNtcGkuYgkJJWQxLCZRTkFOCgliZXEubAkJZHN0X3FuYW4KCWJyYS5sCQlkc3Rfc25hbgoKCWdsb2JhbAkJc21vZF9zaW5mCnNtb2Rfc2luZjoKCW1vdi5iCQlEVEFHKCVhNiksJWQxCgliZXEubAkJc21vZF9mcG4KCWNtcGkuYgkJJWQxLCZaRVJPCgliZXEubAkJc21vZF96cm8KCWNtcGkuYgkJJWQxLCZJTkYKCWJlcS5sCQl0X29wZXJyCgljbXBpLmIJCSVkMSwmREVOT1JNCgliZXEubAkJc21vZF9mcG4KCWNtcGkuYgkJJWQxLCZRTkFOCgliZXEubAkJZHN0X3FuYW4KCWJyYS5sCQlkc3Rfc25hbgoKc21vZF96cm86CnNyZW1fenJvOgoJbW92LmIJCVNSQ19FWCglYTApLCVkMQkJIyBnZXQgc3JjIHNpZ24KCW1vdi5iCQlEU1RfRVgoJWExKSwlZDAJCSMgZ2V0IGRzdCBzaWduCgllb3IuYgkJJWQwLCVkMQkJCSMgZ2V0IHFieXRlIHNpZ24KCWFuZGkuYgkJJjB4ODAsJWQxCgltb3YuYgkJJWQxLEZQU1JfUUJZVEUoJWE2KQoJdHN0LmIJCSVkMAoJYnBsLncJCWxkX3B6ZXJvCglicmEudwkJbGRfbXplcm8KCnNtb2RfZnBuOgpzcmVtX2ZwbjoKCWNsci5iCQlGUFNSX1FCWVRFKCVhNikKCW1vdi5sCQklZDAsLSglc3ApCgltb3YuYgkJU1JDX0VYKCVhMCksJWQxCQkjIGdldCBzcmMgc2lnbgoJbW92LmIJCURTVF9FWCglYTEpLCVkMAkJIyBnZXQgZHN0IHNpZ24KCWVvci5iCQklZDAsJWQxCQkJIyBnZXQgcWJ5dGUgc2lnbgoJYW5kaS5iCQkmMHg4MCwlZDEKCW1vdi5iCQklZDEsRlBTUl9RQllURSglYTYpCgljbXBpLmIJCURUQUcoJWE2KSwmREVOT1JNCglibmUuYgkJc21vZF9ucm0KCWxlYQkJRFNUKCVhMSksJWEwCgltb3YubAkJKCVzcCkrLCVkMAoJYnJhCQl0X3Jlc2Rucm0Kc21vZF9ucm06CglmbW92LmwJCSglc3ApKywlZnBjcgoJZm1vdi54CQlEU1QoJWExKSwlZnAwCgl0c3QuYgkJRFNUX0VYKCVhMSkKCWJtaS5iCQlzbW9kX25ybV9uZWcKCXJ0cwoKc21vZF9ucm1fbmVnOgoJbW92LmIJCSZuZWdfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0ICdOJyBjY29kZQoJcnRzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCglnbG9iYWwJCXNyZW1fc25vcm0KCWdsb2JhbAkJc3JlbV9zZG5ybQpzcmVtX3NkbnJtOgpzcmVtX3Nub3JtOgoJbW92LmIJCURUQUcoJWE2KSwlZDEKCWJlcS5sCQlzcmVtCgljbXBpLmIJCSVkMSwmWkVSTwoJYmVxLncJCXNyZW1fenJvCgljbXBpLmIJCSVkMSwmSU5GCgliZXEubAkJdF9vcGVycgoJY21waS5iCQklZDEsJkRFTk9STQoJYmVxLmwJCXNyZW0KCWNtcGkuYgkJJWQxLCZRTkFOCgliZXEubAkJZHN0X3FuYW4KCWJyYS5sCQlkc3Rfc25hbgoKCWdsb2JhbAkJc3JlbV9zemVybwpzcmVtX3N6ZXJvOgoJbW92LmIJCURUQUcoJWE2KSwlZDEKCWJlcS5sCQl0X29wZXJyCgljbXBpLmIJCSVkMSwmWkVSTwoJYmVxLmwJCXRfb3BlcnIKCWNtcGkuYgkJJWQxLCZJTkYKCWJlcS5sCQl0X29wZXJyCgljbXBpLmIJCSVkMSwmREVOT1JNCgliZXEubAkJdF9vcGVycgoJY21waS5iCQklZDEsJlFOQU4KCWJlcS5sCQlkc3RfcW5hbgoJYnJhLmwJCWRzdF9zbmFuCgoJZ2xvYmFsCQlzcmVtX3NpbmYKc3JlbV9zaW5mOgoJbW92LmIJCURUQUcoJWE2KSwlZDEKCWJlcS53CQlzcmVtX2ZwbgoJY21waS5iCQklZDEsJlpFUk8KCWJlcS53CQlzcmVtX3pybwoJY21waS5iCQklZDEsJklORgoJYmVxLmwJCXRfb3BlcnIKCWNtcGkuYgkJJWQxLCZERU5PUk0KCWJlcS5sCQlzcmVtX2ZwbgoJY21waS5iCQklZDEsJlFOQU4KCWJlcS5sCQlkc3RfcW5hbgoJYnJhLmwJCWRzdF9zbmFuCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCglnbG9iYWwJCXNzY2FsZV9zbm9ybQoJZ2xvYmFsCQlzc2NhbGVfc2Rucm0Kc3NjYWxlX3Nub3JtOgpzc2NhbGVfc2Rucm06Cgltb3YuYgkJRFRBRyglYTYpLCVkMQoJYmVxLmwJCXNzY2FsZQoJY21waS5iCQklZDEsJlpFUk8KCWJlcS5sCQlkc3RfemVybwoJY21waS5iCQklZDEsJklORgoJYmVxLmwJCWRzdF9pbmYKCWNtcGkuYgkJJWQxLCZERU5PUk0KCWJlcS5sCQlzc2NhbGUKCWNtcGkuYgkJJWQxLCZRTkFOCgliZXEubAkJZHN0X3FuYW4KCWJyYS5sCQlkc3Rfc25hbgoKCWdsb2JhbAkJc3NjYWxlX3N6ZXJvCnNzY2FsZV9zemVybzoKCW1vdi5iCQlEVEFHKCVhNiksJWQxCgliZXEubAkJc3NjYWxlCgljbXBpLmIJCSVkMSwmWkVSTwoJYmVxLmwJCWRzdF96ZXJvCgljbXBpLmIJCSVkMSwmSU5GCgliZXEubAkJZHN0X2luZgoJY21waS5iCQklZDEsJkRFTk9STQoJYmVxLmwJCXNzY2FsZQoJY21waS5iCQklZDEsJlFOQU4KCWJlcS5sCQlkc3RfcW5hbgoJYnJhLmwJCWRzdF9zbmFuCgoJZ2xvYmFsCQlzc2NhbGVfc2luZgpzc2NhbGVfc2luZjoKCW1vdi5iCQlEVEFHKCVhNiksJWQxCgliZXEubAkJdF9vcGVycgoJY21waS5iCQklZDEsJlFOQU4KCWJlcS5sCQlkc3RfcW5hbgoJY21waS5iCQklZDEsJlNOQU4KCWJlcS5sCQlkc3Rfc25hbgoJYnJhLmwJCXRfb3BlcnIKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIwojIHNvcF9zcW5hbigpOiBUaGUgc3JjIG9wIGZvciBmcmVtL2Ztb2QvZnNjYWxlIHdhcyBhIFFOQU4uCiMKCWdsb2JhbAkJc29wX3NxbmFuCnNvcF9zcW5hbjoKCW1vdi5iCQlEVEFHKCVhNiksJWQxCgljbXBpLmIJCSVkMSwmUU5BTgoJYmVxLmIJCWRzdF9xbmFuCgljbXBpLmIJCSVkMSwmU05BTgoJYmVxLmIJCWRzdF9zbmFuCglicmEuYgkJc3JjX3FuYW4KCiMKIyBzb3Bfc3NuYW4oKTogVGhlIHNyYyBvcCBmb3IgZnJlbS9mbW9kL2ZzY2FsZSB3YXMgYW4gU05BTi4KIwoJZ2xvYmFsCQlzb3Bfc3NuYW4Kc29wX3NzbmFuOgoJbW92LmIJCURUQUcoJWE2KSwlZDEKCWNtcGkuYgkJJWQxLCZRTkFOCgliZXEuYgkJZHN0X3FuYW5fc3JjX3NuYW4KCWNtcGkuYgkJJWQxLCZTTkFOCgliZXEuYgkJZHN0X3NuYW4KCWJyYS5iCQlzcmNfc25hbgoKZHN0X3FuYW5fc3JjX3NuYW46CglvcmkubAkJJnNuYW5pb3BfbWFzayxVU0VSX0ZQU1IoJWE2KSAjIHNldCBOQU4vU05BTi9BSU9QCglicmEuYgkJZHN0X3FuYW4KCiMKIyBkc3RfcW5hbigpOiBSZXR1cm4gdGhlIGRzdCBTTkFOIHcvIHRoZSBTTkFOIGJpdCBzZXQuCiMKCWdsb2JhbAkJZHN0X3NuYW4KZHN0X3NuYW46CglmbW92LngJCURTVCglYTEpLCVmcDAJCSMgdGhlIGZtb3ZlIHNldHMgdGhlIFNOQU4gYml0CglmbW92LmwJCSVmcHNyLCVkMAkJIyBjYXRjaCByZXN1bHRpbmcgc3RhdHVzCglvci5sCQklZDAsVVNFUl9GUFNSKCVhNikJIyBzdG9yZSBzdGF0dXMKCXJ0cwoKIwojIGRzdF9xbmFuKCk6IFJldHVybiB0aGUgZHN0IFFOQU4uCiMKCWdsb2JhbAkJZHN0X3FuYW4KZHN0X3FuYW46CglmbW92LngJCURTVCglYTEpLCVmcDAJCSMgcmV0dXJuIHRoZSBub24tc2lnbmFsbGluZyBuYW4KCXRzdC5iCQlEU1RfRVgoJWExKQkJIyBzZXQgY2NvZGVzIGFjY29yZGluZyB0byBRTkFOIHNpZ24KCWJtaS5iCQlkc3RfcW5hbl9tCmRzdF9xbmFuX3A6Cgltb3YuYgkJJm5hbl9ibWFzayxGUFNSX0NDKCVhNikKCXJ0cwpkc3RfcW5hbl9tOgoJbW92LmIJCSZuZWdfYm1hc2srbmFuX2JtYXNrLEZQU1JfQ0MoJWE2KQoJcnRzCgojCiMgc3JjX3NuYW4oKTogUmV0dXJuIHRoZSBzcmMgU05BTiB3LyB0aGUgU05BTiBiaXQgc2V0LgojCglnbG9iYWwJCXNyY19zbmFuCnNyY19zbmFuOgoJZm1vdi54CQlTUkMoJWEwKSwlZnAwCQkjIHRoZSBmbW92ZSBzZXRzIHRoZSBTTkFOIGJpdAoJZm1vdi5sCQklZnBzciwlZDAJCSMgY2F0Y2ggcmVzdWx0aW5nIHN0YXR1cwoJb3IubAkJJWQwLFVTRVJfRlBTUiglYTYpCSMgc3RvcmUgc3RhdHVzCglydHMKCiMKIyBzcmNfcW5hbigpOiBSZXR1cm4gdGhlIHNyYyBRTkFOLgojCglnbG9iYWwJCXNyY19xbmFuCnNyY19xbmFuOgoJZm1vdi54CQlTUkMoJWEwKSwlZnAwCQkjIHJldHVybiB0aGUgbm9uLXNpZ25hbGxpbmcgbmFuCgl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgc2V0IGNjb2RlcyBhY2NvcmRpbmcgdG8gUU5BTiBzaWduCglibWkuYgkJZHN0X3FuYW5fbQpzcmNfcW5hbl9wOgoJbW92LmIJCSZuYW5fYm1hc2ssRlBTUl9DQyglYTYpCglydHMKc3JjX3FuYW5fbToKCW1vdi5iCQkmbmVnX2JtYXNrK25hbl9ibWFzayxGUFNSX0NDKCVhNikKCXJ0cwoKIwojIGZrZXJuMi5zOgojCVRoZXNlIGVudHJ5IHBvaW50cyBhcmUgdXNlZCBieSB0aGUgZXhjZXB0aW9uIGhhbmRsZXIKIyByb3V0aW5lcyB3aGVyZSBhbiBpbnN0cnVjdGlvbiBpcyBzZWxlY3RlZCBieSBhbiBpbmRleCBpbnRvCiMgYSBsYXJnZSBqdW1wIHRhYmxlIGNvcnJlc3BvbmRpbmcgdG8gYSBnaXZlbiBpbnN0cnVjdGlvbiB3aGljaAojIGhhcyBiZWVuIGRlY29kZWQuIEZsb3cgY29udGludWVzIGhlcmUgd2hlcmUgd2Ugbm93IGRlY29kZQojIGZ1cnRoZXIgYWNjb2RpbmcgdG8gdGhlIHNvdXJjZSBvcGVyYW5kIHR5cGUuCiMKCglnbG9iYWwJCWZzaW5oCmZzaW5oOgoJbW92LmIJCVNUQUcoJWE2KSwlZDEKCWJlcS5sCQlzc2luaAoJY21waS5iCQklZDEsJlpFUk8KCWJlcS5sCQlzcmNfemVybwoJY21waS5iCQklZDEsJklORgoJYmVxLmwJCXNyY19pbmYKCWNtcGkuYgkJJWQxLCZERU5PUk0KCWJlcS5sCQlzc2luaGQKCWNtcGkuYgkJJWQxLCZRTkFOCgliZXEubAkJc3JjX3FuYW4KCWJyYS5sCQlzcmNfc25hbgoKCWdsb2JhbAkJZmxvZ25wMQpmbG9nbnAxOgoJbW92LmIJCVNUQUcoJWE2KSwlZDEKCWJlcS5sCQlzbG9nbnAxCgljbXBpLmIJCSVkMSwmWkVSTwoJYmVxLmwJCXNyY196ZXJvCgljbXBpLmIJCSVkMSwmSU5GCgliZXEubAkJc29wcl9pbmYKCWNtcGkuYgkJJWQxLCZERU5PUk0KCWJlcS5sCQlzbG9nbnAxZAoJY21waS5iCQklZDEsJlFOQU4KCWJlcS5sCQlzcmNfcW5hbgoJYnJhLmwJCXNyY19zbmFuCgoJZ2xvYmFsCQlmZXRveG0xCmZldG94bTE6Cgltb3YuYgkJU1RBRyglYTYpLCVkMQoJYmVxLmwJCXNldG94bTEKCWNtcGkuYgkJJWQxLCZaRVJPCgliZXEubAkJc3JjX3plcm8KCWNtcGkuYgkJJWQxLCZJTkYKCWJlcS5sCQlzZXRveG0xaQoJY21waS5iCQklZDEsJkRFTk9STQoJYmVxLmwJCXNldG94bTFkCgljbXBpLmIJCSVkMSwmUU5BTgoJYmVxLmwJCXNyY19xbmFuCglicmEubAkJc3JjX3NuYW4KCglnbG9iYWwJCWZ0YW5oCmZ0YW5oOgoJbW92LmIJCVNUQUcoJWE2KSwlZDEKCWJlcS5sCQlzdGFuaAoJY21waS5iCQklZDEsJlpFUk8KCWJlcS5sCQlzcmNfemVybwoJY21waS5iCQklZDEsJklORgoJYmVxLmwJCXNyY19vbmUKCWNtcGkuYgkJJWQxLCZERU5PUk0KCWJlcS5sCQlzdGFuaGQKCWNtcGkuYgkJJWQxLCZRTkFOCgliZXEubAkJc3JjX3FuYW4KCWJyYS5sCQlzcmNfc25hbgoKCWdsb2JhbAkJZmF0YW4KZmF0YW46Cgltb3YuYgkJU1RBRyglYTYpLCVkMQoJYmVxLmwJCXNhdGFuCgljbXBpLmIJCSVkMSwmWkVSTwoJYmVxLmwJCXNyY196ZXJvCgljbXBpLmIJCSVkMSwmSU5GCgliZXEubAkJc3BpXzIKCWNtcGkuYgkJJWQxLCZERU5PUk0KCWJlcS5sCQlzYXRhbmQKCWNtcGkuYgkJJWQxLCZRTkFOCgliZXEubAkJc3JjX3FuYW4KCWJyYS5sCQlzcmNfc25hbgoKCWdsb2JhbAkJZmFzaW4KZmFzaW46Cgltb3YuYgkJU1RBRyglYTYpLCVkMQoJYmVxLmwJCXNhc2luCgljbXBpLmIJCSVkMSwmWkVSTwoJYmVxLmwJCXNyY196ZXJvCgljbXBpLmIJCSVkMSwmSU5GCgliZXEubAkJdF9vcGVycgoJY21waS5iCQklZDEsJkRFTk9STQoJYmVxLmwJCXNhc2luZAoJY21waS5iCQklZDEsJlFOQU4KCWJlcS5sCQlzcmNfcW5hbgoJYnJhLmwJCXNyY19zbmFuCgoJZ2xvYmFsCQlmYXRhbmgKZmF0YW5oOgoJbW92LmIJCVNUQUcoJWE2KSwlZDEKCWJlcS5sCQlzYXRhbmgKCWNtcGkuYgkJJWQxLCZaRVJPCgliZXEubAkJc3JjX3plcm8KCWNtcGkuYgkJJWQxLCZJTkYKCWJlcS5sCQl0X29wZXJyCgljbXBpLmIJCSVkMSwmREVOT1JNCgliZXEubAkJc2F0YW5oZAoJY21waS5iCQklZDEsJlFOQU4KCWJlcS5sCQlzcmNfcW5hbgoJYnJhLmwJCXNyY19zbmFuCgoJZ2xvYmFsCQlmc2luZQpmc2luZToKCW1vdi5iCQlTVEFHKCVhNiksJWQxCgliZXEubAkJc3NpbgoJY21waS5iCQklZDEsJlpFUk8KCWJlcS5sCQlzcmNfemVybwoJY21waS5iCQklZDEsJklORgoJYmVxLmwJCXRfb3BlcnIKCWNtcGkuYgkJJWQxLCZERU5PUk0KCWJlcS5sCQlzc2luZAoJY21waS5iCQklZDEsJlFOQU4KCWJlcS5sCQlzcmNfcW5hbgoJYnJhLmwJCXNyY19zbmFuCgoJZ2xvYmFsCQlmdGFuCmZ0YW46Cgltb3YuYgkJU1RBRyglYTYpLCVkMQoJYmVxLmwJCXN0YW4KCWNtcGkuYgkJJWQxLCZaRVJPCgliZXEubAkJc3JjX3plcm8KCWNtcGkuYgkJJWQxLCZJTkYKCWJlcS5sCQl0X29wZXJyCgljbXBpLmIJCSVkMSwmREVOT1JNCgliZXEubAkJc3RhbmQKCWNtcGkuYgkJJWQxLCZRTkFOCgliZXEubAkJc3JjX3FuYW4KCWJyYS5sCQlzcmNfc25hbgoKCWdsb2JhbAkJZmV0b3gKZmV0b3g6Cgltb3YuYgkJU1RBRyglYTYpLCVkMQoJYmVxLmwJCXNldG94CgljbXBpLmIJCSVkMSwmWkVSTwoJYmVxLmwJCWxkX3BvbmUKCWNtcGkuYgkJJWQxLCZJTkYKCWJlcS5sCQlzenJfaW5mCgljbXBpLmIJCSVkMSwmREVOT1JNCgliZXEubAkJc2V0b3hkCgljbXBpLmIJCSVkMSwmUU5BTgoJYmVxLmwJCXNyY19xbmFuCglicmEubAkJc3JjX3NuYW4KCglnbG9iYWwJCWZ0d290b3gKZnR3b3RveDoKCW1vdi5iCQlTVEFHKCVhNiksJWQxCgliZXEubAkJc3R3b3RveAoJY21waS5iCQklZDEsJlpFUk8KCWJlcS5sCQlsZF9wb25lCgljbXBpLmIJCSVkMSwmSU5GCgliZXEubAkJc3pyX2luZgoJY21waS5iCQklZDEsJkRFTk9STQoJYmVxLmwJCXN0d290b3hkCgljbXBpLmIJCSVkMSwmUU5BTgoJYmVxLmwJCXNyY19xbmFuCglicmEubAkJc3JjX3NuYW4KCglnbG9iYWwJCWZ0ZW50b3gKZnRlbnRveDoKCW1vdi5iCQlTVEFHKCVhNiksJWQxCgliZXEubAkJc3RlbnRveAoJY21waS5iCQklZDEsJlpFUk8KCWJlcS5sCQlsZF9wb25lCgljbXBpLmIJCSVkMSwmSU5GCgliZXEubAkJc3pyX2luZgoJY21waS5iCQklZDEsJkRFTk9STQoJYmVxLmwJCXN0ZW50b3hkCgljbXBpLmIJCSVkMSwmUU5BTgoJYmVxLmwJCXNyY19xbmFuCglicmEubAkJc3JjX3NuYW4KCglnbG9iYWwJCWZsb2duCmZsb2duOgoJbW92LmIJCVNUQUcoJWE2KSwlZDEKCWJlcS5sCQlzbG9nbgoJY21waS5iCQklZDEsJlpFUk8KCWJlcS5sCQl0X2R6MgoJY21waS5iCQklZDEsJklORgoJYmVxLmwJCXNvcHJfaW5mCgljbXBpLmIJCSVkMSwmREVOT1JNCgliZXEubAkJc2xvZ25kCgljbXBpLmIJCSVkMSwmUU5BTgoJYmVxLmwJCXNyY19xbmFuCglicmEubAkJc3JjX3NuYW4KCglnbG9iYWwJCWZsb2cxMApmbG9nMTA6Cgltb3YuYgkJU1RBRyglYTYpLCVkMQoJYmVxLmwJCXNsb2cxMAoJY21waS5iCQklZDEsJlpFUk8KCWJlcS5sCQl0X2R6MgoJY21waS5iCQklZDEsJklORgoJYmVxLmwJCXNvcHJfaW5mCgljbXBpLmIJCSVkMSwmREVOT1JNCgliZXEubAkJc2xvZzEwZAoJY21waS5iCQklZDEsJlFOQU4KCWJlcS5sCQlzcmNfcW5hbgoJYnJhLmwJCXNyY19zbmFuCgoJZ2xvYmFsCQlmbG9nMgpmbG9nMjoKCW1vdi5iCQlTVEFHKCVhNiksJWQxCgliZXEubAkJc2xvZzIKCWNtcGkuYgkJJWQxLCZaRVJPCgliZXEubAkJdF9kejIKCWNtcGkuYgkJJWQxLCZJTkYKCWJlcS5sCQlzb3ByX2luZgoJY21waS5iCQklZDEsJkRFTk9STQoJYmVxLmwJCXNsb2cyZAoJY21waS5iCQklZDEsJlFOQU4KCWJlcS5sCQlzcmNfcW5hbgoJYnJhLmwJCXNyY19zbmFuCgoJZ2xvYmFsCQlmY29zaApmY29zaDoKCW1vdi5iCQlTVEFHKCVhNiksJWQxCgliZXEubAkJc2Nvc2gKCWNtcGkuYgkJJWQxLCZaRVJPCgliZXEubAkJbGRfcG9uZQoJY21waS5iCQklZDEsJklORgoJYmVxLmwJCWxkX3BpbmYKCWNtcGkuYgkJJWQxLCZERU5PUk0KCWJlcS5sCQlzY29zaGQKCWNtcGkuYgkJJWQxLCZRTkFOCgliZXEubAkJc3JjX3FuYW4KCWJyYS5sCQlzcmNfc25hbgoKCWdsb2JhbAkJZmFjb3MKZmFjb3M6Cgltb3YuYgkJU1RBRyglYTYpLCVkMQoJYmVxLmwJCXNhY29zCgljbXBpLmIJCSVkMSwmWkVSTwoJYmVxLmwJCWxkX3BwaTIKCWNtcGkuYgkJJWQxLCZJTkYKCWJlcS5sCQl0X29wZXJyCgljbXBpLmIJCSVkMSwmREVOT1JNCgliZXEubAkJc2Fjb3NkCgljbXBpLmIJCSVkMSwmUU5BTgoJYmVxLmwJCXNyY19xbmFuCglicmEubAkJc3JjX3NuYW4KCglnbG9iYWwJCWZjb3MKZmNvczoKCW1vdi5iCQlTVEFHKCVhNiksJWQxCgliZXEubAkJc2NvcwoJY21waS5iCQklZDEsJlpFUk8KCWJlcS5sCQlsZF9wb25lCgljbXBpLmIJCSVkMSwmSU5GCgliZXEubAkJdF9vcGVycgoJY21waS5iCQklZDEsJkRFTk9STQoJYmVxLmwJCXNjb3NkCgljbXBpLmIJCSVkMSwmUU5BTgoJYmVxLmwJCXNyY19xbmFuCglicmEubAkJc3JjX3NuYW4KCglnbG9iYWwJCWZnZXRleHAKZmdldGV4cDoKCW1vdi5iCQlTVEFHKCVhNiksJWQxCgliZXEubAkJc2dldGV4cAoJY21waS5iCQklZDEsJlpFUk8KCWJlcS5sCQlzcmNfemVybwoJY21waS5iCQklZDEsJklORgoJYmVxLmwJCXRfb3BlcnIKCWNtcGkuYgkJJWQxLCZERU5PUk0KCWJlcS5sCQlzZ2V0ZXhwZAoJY21waS5iCQklZDEsJlFOQU4KCWJlcS5sCQlzcmNfcW5hbgoJYnJhLmwJCXNyY19zbmFuCgoJZ2xvYmFsCQlmZ2V0bWFuCmZnZXRtYW46Cgltb3YuYgkJU1RBRyglYTYpLCVkMQoJYmVxLmwJCXNnZXRtYW4KCWNtcGkuYgkJJWQxLCZaRVJPCgliZXEubAkJc3JjX3plcm8KCWNtcGkuYgkJJWQxLCZJTkYKCWJlcS5sCQl0X29wZXJyCgljbXBpLmIJCSVkMSwmREVOT1JNCgliZXEubAkJc2dldG1hbmQKCWNtcGkuYgkJJWQxLCZRTkFOCgliZXEubAkJc3JjX3FuYW4KCWJyYS5sCQlzcmNfc25hbgoKCWdsb2JhbAkJZnNpbmNvcwpmc2luY29zOgoJbW92LmIJCVNUQUcoJWE2KSwlZDEKCWJlcS5sCQlzc2luY29zCgljbXBpLmIJCSVkMSwmWkVSTwoJYmVxLmwJCXNzaW5jb3N6CgljbXBpLmIJCSVkMSwmSU5GCgliZXEubAkJc3NpbmNvc2kKCWNtcGkuYgkJJWQxLCZERU5PUk0KCWJlcS5sCQlzc2luY29zZAoJY21waS5iCQklZDEsJlFOQU4KCWJlcS5sCQlzc2luY29zcW5hbgoJYnJhLmwJCXNzaW5jb3NzbmFuCgoJZ2xvYmFsCQlmbW9kCmZtb2Q6Cgltb3YuYgkJU1RBRyglYTYpLCVkMQoJYmVxLmwJCXNtb2Rfc25vcm0KCWNtcGkuYgkJJWQxLCZaRVJPCgliZXEubAkJc21vZF9zemVybwoJY21waS5iCQklZDEsJklORgoJYmVxLmwJCXNtb2Rfc2luZgoJY21waS5iCQklZDEsJkRFTk9STQoJYmVxLmwJCXNtb2Rfc2Rucm0KCWNtcGkuYgkJJWQxLCZRTkFOCgliZXEubAkJc29wX3NxbmFuCglicmEubAkJc29wX3NzbmFuCgoJZ2xvYmFsCQlmcmVtCmZyZW06Cgltb3YuYgkJU1RBRyglYTYpLCVkMQoJYmVxLmwJCXNyZW1fc25vcm0KCWNtcGkuYgkJJWQxLCZaRVJPCgliZXEubAkJc3JlbV9zemVybwoJY21waS5iCQklZDEsJklORgoJYmVxLmwJCXNyZW1fc2luZgoJY21waS5iCQklZDEsJkRFTk9STQoJYmVxLmwJCXNyZW1fc2Rucm0KCWNtcGkuYgkJJWQxLCZRTkFOCgliZXEubAkJc29wX3NxbmFuCglicmEubAkJc29wX3NzbmFuCgoJZ2xvYmFsCQlmc2NhbGUKZnNjYWxlOgoJbW92LmIJCVNUQUcoJWE2KSwlZDEKCWJlcS5sCQlzc2NhbGVfc25vcm0KCWNtcGkuYgkJJWQxLCZaRVJPCgliZXEubAkJc3NjYWxlX3N6ZXJvCgljbXBpLmIJCSVkMSwmSU5GCgliZXEubAkJc3NjYWxlX3NpbmYKCWNtcGkuYgkJJWQxLCZERU5PUk0KCWJlcS5sCQlzc2NhbGVfc2Rucm0KCWNtcGkuYgkJJWQxLCZRTkFOCgliZXEubAkJc29wX3NxbmFuCglicmEubAkJc29wX3NzbmFuCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlmZ2VuX2V4Y2VwdCgpOiBjYXRjaCBhbiBleGNlcHRpb24gZHVyaW5nIHRyYW5zY2VuZGVudGFsCQkjCiMJCSAgICAgICBlbXVsYXRpb24JCQkJCSMKIwkJCQkJCQkJCSMKIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWZtdWwoKSAtIGVtdWxhdGUgYSBtdWx0aXBseSBpbnN0cnVjdGlvbgkJCQkjCiMJZmFkZCgpIC0gZW11bGF0ZSBhbiBhZGQgaW5zdHJ1Y3Rpb24JCQkJIwojCWZpbigpIC0gZW11bGF0ZSBhbiBmbW92ZSBpbnN0cnVjdGlvbgkJCQkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlmcDAgPSBkZXN0aW5hdGlvbiBvcGVyYW5kCQkJCQkjCiMJZDAgID0gdHlwZSBvZiBpbnN0cnVjdGlvbiB0aGF0IHRvb2sgZXhjZXB0aW9uCQkJIwojCWZzYXZlIGZyYW1lID0gc291cmNlIG9wZXJhbmQJCQkJCSMKIwkJCQkJCQkJCSMKIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWZwMCA9IHJlc3VsdAkJCQkJCQkjCiMJZnAxID0gRVhPUAkJCQkJCQkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlBbiBleGNlcHRpb24gb2NjdXJyZWQgb24gdGhlIGxhc3QgaW5zdHJ1Y3Rpb24gb2YgdGhlCQkjCiMgdHJhbnNjZW5kZW50YWwgZW11bGF0aW9uLiBob3BlZnVsbHksIHRoaXMgd29uJ3QgYmUgaGFwcGVuaW5nIG11Y2gJIwojIGJlY2F1c2UgaXQgd2lsbCBiZSBWRVJZIHNsb3cuCQkJCQkJIwojCVRoZSBvbmx5IGV4Y2VwdGlvbnMgY2FwYWJsZSBvZiBwYXNzaW5nIHRocm91Z2ggaGVyZSBhcmUJCSMKIyBPdmVyZmxvdywgVW5kZXJmbG93LCBhbmQgVW5zdXBwb3J0ZWQgRGF0YSBUeXBlLgkJCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCWdsb2JhbAkJZmdlbl9leGNlcHQKZmdlbl9leGNlcHQ6CgljbXBpLmIJCTB4Myglc3ApLCYweDcJCSMgaXMgZXhjZXB0aW9uIFVOU1VQUD8KCWJlcS5iCQlmZ2VfdW5zdXBwCQkjIHllcwoKCW1vdi5iCQkmTk9STSxTVEFHKCVhNikKCmZnZV9jb250OgoJbW92LmIJCSZOT1JNLERUQUcoJWE2KQoKIyBvaywgSSBoYXZlIGEgcHJvYmxlbSB3aXRoIHB1dHRpbmcgdGhlIGRzdCBvcCBhdCBGUF9EU1QuIHRoZSBlbXVsYXRpb24KIyByb3V0aW5lcyBhcmVuJ3Qgc3VwcG9zZWQgdG8gYWx0ZXIgdGhlIG9wZXJhbmRzIGJ1dCB3ZSd2ZSBqdXN0IHNxdWFzaGVkCiMgRlBfRFNUIGhlcmUuLi4KCiMgOC8xNy85MyAtIHRoaXMgdHVybnMgb3V0IHRvIGJlIG1vcmUgb2YgYSAiY2xlYW5saW5lc3MiIHN0YW5kcG9pbnQKIyB0aGVuIGEgcG90ZW50aWFsIGJ1Zy4gdG8gYmVnaW4gd2l0aCwgb25seSB0aGUgZHlhZGljIGZ1bmN0aW9ucwojIGZyZW0sZm1vZCwgYW5kIGZzY2FsZSB3b3VsZCBnZXQgdGhlIGRzdCB0cmFzaGVkIGhlcmUuIEJ1dCwgZm9yCiMgdGhlIDA2MFNQLCB0aGUgRlBfRFNUIGlzIG5ldmVyIHVzZWQgYWdhaW4gYW55d2F5cy4KCWZtb3ZtLngJCSYweDgwLEZQX0RTVCglYTYpCSMgZHN0IG9wIGlzIGluIGZwMAoKCWxlYQkJMHg0KCVzcCksJWEwCQkjIHBhc3M6IHB0ciB0byBzcmMgb3AKCWxlYQkJRlBfRFNUKCVhNiksJWExCQkjIHBhc3M6IHB0ciB0byBkc3Qgb3AKCgljbXBpLmIJCSVkMSwmRk1PVl9PUAoJYmVxLmIJCWZnZV9maW4JCQkjIGl0IHdhcyBhbiAiZm1vdiIKCWNtcGkuYgkJJWQxLCZGQUREX09QCgliZXEuYgkJZmdlX2ZhZGQJCSMgaXQgd2FzIGFuICJmYWRkIgpmZ2VfZm11bDoKCWJzci5sCQlmbXVsCglydHMKZmdlX2ZhZGQ6Cglic3IubAkJZmFkZAoJcnRzCmZnZV9maW46Cglic3IubAkJZmluCglydHMKCmZnZV91bnN1cHA6Cgltb3YuYgkJJkRFTk9STSxTVEFHKCVhNikKCWJyYS5iCQlmZ2VfY29udAoKIwojIFRoaXMgdGFibGUgaG9sZHMgdGhlIG9mZnNldHMgb2YgdGhlIGVtdWxhdGlvbiByb3V0aW5lcyBmb3IgZWFjaCBpbmRpdmlkdWFsCiMgbWF0aCBvcGVyYXRpb24gcmVsYXRpdmUgdG8gdGhlIGFkZHJlc3Mgb2YgdGhpcyB0YWJsZS4gSW5jbHVkZWQgYXJlCiMgcm91dGluZXMgbGlrZSBmYWRkL2ZtdWwvZmFicyBhcyB3ZWxsIGFzIHRoZSB0cmFuc2NlbmRlbnRhbHMuCiMgVGhlIGxvY2F0aW9uIHdpdGhpbiB0aGUgdGFibGUgaXMgZGV0ZXJtaW5lZCBieSB0aGUgZXh0ZW5zaW9uIGJpdHMgb2YgdGhlCiMgb3BlcmF0aW9uIGxvbmd3b3JkLgojCgoJc3diZWcJCSYxMDkKdGJsX3Vuc3VwcDoKCWxvbmcJCWZpbgkJLSB0YmxfdW5zdXBwCSMgMDA6IGZtb3ZlCglsb25nCQlmaW50CQktIHRibF91bnN1cHAJIyAwMTogZmludAoJbG9uZwkJZnNpbmgJCS0gdGJsX3Vuc3VwcAkjIDAyOiBmc2luaAoJbG9uZwkJZmludHJ6CQktIHRibF91bnN1cHAJIyAwMzogZmludHJ6Cglsb25nCQlmc3FydAkJLSB0YmxfdW5zdXBwCSMgMDQ6IGZzcXJ0Cglsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAoJbG9uZwkJZmxvZ25wMQkJLSB0YmxfdW5zdXBwCSMgMDY6IGZsb2ducDEKCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCglsb25nCQlmZXRveG0xCQktIHRibF91bnN1cHAJIyAwODogZmV0b3htMQoJbG9uZwkJZnRhbmgJCS0gdGJsX3Vuc3VwcAkjIDA5OiBmdGFuaAoJbG9uZwkJZmF0YW4JCS0gdGJsX3Vuc3VwcAkjIDBhOiBmYXRhbgoJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKCWxvbmcJCWZhc2luCQktIHRibF91bnN1cHAJIyAwYzogZmFzaW4KCWxvbmcJCWZhdGFuaAkJLSB0YmxfdW5zdXBwCSMgMGQ6IGZhdGFuaAoJbG9uZwkJZnNpbmUJCS0gdGJsX3Vuc3VwcAkjIDBlOiBmc2luCglsb25nCQlmdGFuCQktIHRibF91bnN1cHAJIyAwZjogZnRhbgoJbG9uZwkJZmV0b3gJCS0gdGJsX3Vuc3VwcAkjIDEwOiBmZXRveAoJbG9uZwkJZnR3b3RveAkJLSB0YmxfdW5zdXBwCSMgMTE6IGZ0d290b3gKCWxvbmcJCWZ0ZW50b3gJCS0gdGJsX3Vuc3VwcAkjIDEyOiBmdGVudG94Cglsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAoJbG9uZwkJZmxvZ24JCS0gdGJsX3Vuc3VwcAkjIDE0OiBmbG9nbgoJbG9uZwkJZmxvZzEwCQktIHRibF91bnN1cHAJIyAxNTogZmxvZzEwCglsb25nCQlmbG9nMgkJLSB0YmxfdW5zdXBwCSMgMTY6IGZsb2cyCglsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAoJbG9uZwkJZmFicwkJLSB0YmxfdW5zdXBwCSMgMTg6IGZhYnMKCWxvbmcJCWZjb3NoCQktIHRibF91bnN1cHAJIyAxOTogZmNvc2gKCWxvbmcJCWZuZWcJCS0gdGJsX3Vuc3VwcAkjIDFhOiBmbmVnCglsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAoJbG9uZwkJZmFjb3MJCS0gdGJsX3Vuc3VwcAkjIDFjOiBmYWNvcwoJbG9uZwkJZmNvcwkJLSB0YmxfdW5zdXBwCSMgMWQ6IGZjb3MKCWxvbmcJCWZnZXRleHAJCS0gdGJsX3Vuc3VwcAkjIDFlOiBmZ2V0ZXhwCglsb25nCQlmZ2V0bWFuCQktIHRibF91bnN1cHAJIyAxZjogZmdldG1hbgoJbG9uZwkJZmRpdgkJLSB0YmxfdW5zdXBwCSMgMjA6IGZkaXYKCWxvbmcJCWZtb2QJCS0gdGJsX3Vuc3VwcAkjIDIxOiBmbW9kCglsb25nCQlmYWRkCQktIHRibF91bnN1cHAJIyAyMjogZmFkZAoJbG9uZwkJZm11bAkJLSB0YmxfdW5zdXBwCSMgMjM6IGZtdWwKCWxvbmcJCWZzZ2xkaXYJCS0gdGJsX3Vuc3VwcAkjIDI0OiBmc2dsZGl2Cglsb25nCQlmcmVtCQktIHRibF91bnN1cHAJIyAyNTogZnJlbQoJbG9uZwkJZnNjYWxlCQktIHRibF91bnN1cHAJIyAyNjogZnNjYWxlCglsb25nCQlmc2dsbXVsCQktIHRibF91bnN1cHAJIyAyNzogZnNnbG11bAoJbG9uZwkJZnN1YgkJLSB0YmxfdW5zdXBwCSMgMjg6IGZzdWIKCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCglsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAoJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCglsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAoJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCglsb25nCQlmc2luY29zCQktIHRibF91bnN1cHAJIyAzMDogZnNpbmNvcwoJbG9uZwkJZnNpbmNvcwkJLSB0YmxfdW5zdXBwCSMgMzE6IGZzaW5jb3MKCWxvbmcJCWZzaW5jb3MJCS0gdGJsX3Vuc3VwcAkjIDMyOiBmc2luY29zCglsb25nCQlmc2luY29zCQktIHRibF91bnN1cHAJIyAzMzogZnNpbmNvcwoJbG9uZwkJZnNpbmNvcwkJLSB0YmxfdW5zdXBwCSMgMzQ6IGZzaW5jb3MKCWxvbmcJCWZzaW5jb3MJCS0gdGJsX3Vuc3VwcAkjIDM1OiBmc2luY29zCglsb25nCQlmc2luY29zCQktIHRibF91bnN1cHAJIyAzNjogZnNpbmNvcwoJbG9uZwkJZnNpbmNvcwkJLSB0YmxfdW5zdXBwCSMgMzc6IGZzaW5jb3MKCWxvbmcJCWZjbXAJCS0gdGJsX3Vuc3VwcAkjIDM4OiBmY21wCglsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAoJbG9uZwkJZnRzdAkJLSB0YmxfdW5zdXBwCSMgM2E6IGZ0c3QKCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCglsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAoJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCglsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAoJbG9uZwkJZnNpbgkJLSB0YmxfdW5zdXBwCSMgNDA6IGZzbW92ZQoJbG9uZwkJZnNzcXJ0CQktIHRibF91bnN1cHAJIyA0MTogZnNzcXJ0Cglsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAoJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKCWxvbmcJCWZkaW4JCS0gdGJsX3Vuc3VwcAkjIDQ0OiBmZG1vdmUKCWxvbmcJCWZkc3FydAkJLSB0YmxfdW5zdXBwCSMgNDU6IGZkc3FydAoJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCglsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAoJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCglsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAoJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCglsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAoJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCglsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAoJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCglsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAoJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCglsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAoJbG9uZwkJZnNhYnMJCS0gdGJsX3Vuc3VwcAkjIDU4OiBmc2FicwoJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKCWxvbmcJCWZzbmVnCQktIHRibF91bnN1cHAJIyA1YTogZnNuZWcKCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCglsb25nCQlmZGFicwkJLSB0YmxfdW5zdXBwCSMgNWM6IGZkYWJzCglsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAoJbG9uZwkJZmRuZWcJCS0gdGJsX3Vuc3VwcAkjIDVlOiBmZG5lZwoJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKCWxvbmcJCWZzZGl2CQktIHRibF91bnN1cHAJIyA2MDogZnNkaXYKCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCglsb25nCQlmc2FkZAkJLSB0YmxfdW5zdXBwCSMgNjI6IGZzYWRkCglsb25nCQlmc211bAkJLSB0YmxfdW5zdXBwCSMgNjM6IGZzbXVsCglsb25nCQlmZGRpdgkJLSB0YmxfdW5zdXBwCSMgNjQ6IGZkZGl2Cglsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAoJbG9uZwkJZmRhZGQJCS0gdGJsX3Vuc3VwcAkjIDY2OiBmZGFkZAoJbG9uZwkJZmRtdWwJCS0gdGJsX3Vuc3VwcAkjIDY3OiBmZG11bAoJbG9uZwkJZnNzdWIJCS0gdGJsX3Vuc3VwcAkjIDY4OiBmc3N1YgoJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCglsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAoJbG9uZwkJZmRzdWIJCS0gdGJsX3Vuc3VwcAkjIDZjOiBmZHN1YgoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJZm11bCgpOiBlbXVsYXRlcyB0aGUgZm11bCBpbnN0cnVjdGlvbgkJCQkjCiMJZnNtdWwoKTogZW11bGF0ZXMgdGhlIGZzbXVsIGluc3RydWN0aW9uCQkJCSMKIwlmZG11bCgpOiBlbXVsYXRlcyB0aGUgZmRtdWwgaW5zdHJ1Y3Rpb24JCQkJIwojCQkJCQkJCQkJIwojIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJc2NhbGVfdG9femVyb19zcmMoKSAtIHNjYWxlIHNyYyBleHBvbmVudCB0byB6ZXJvCQkjCiMJc2NhbGVfdG9femVyb19kc3QoKSAtIHNjYWxlIGRzdCBleHBvbmVudCB0byB6ZXJvCQkjCiMJdW5mX3JlcygpIC0gcmV0dXJuIGRlZmF1bHQgdW5kZXJmbG93IHJlc3VsdAkJCSMKIwlvdmZfcmVzKCkgLSByZXR1cm4gZGVmYXVsdCBvdmVyZmxvdyByZXN1bHQJCQkjCiMJcmVzX3FuYW4oKSAtIHJldHVybiBRTkFOIHJlc3VsdAkJCQkJIwojCXJlc19zbmFuKCkgLSByZXR1cm4gU05BTiByZXN1bHQJCQkJCSMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gc291cmNlIG9wZXJhbmQJCSMKIwlhMSA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIGRlc3RpbmF0aW9uIG9wZXJhbmQJCSMKIwlkMCAgcm5kIHByZWMsbW9kZQkJCQkJCSMKIwkJCQkJCQkJCSMKIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWZwMCA9IHJlc3VsdAkJCQkJCQkjCiMJZnAxID0gRVhPUCAoaWYgZXhjZXB0aW9uIG9jY3VycmVkKQkJCQkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlIYW5kbGUgTkFOcywgaW5maW5pdGllcywgYW5kIHplcm9lcyBhcyBzcGVjaWFsIGNhc2VzLiBEaXZpZGUJIwojIG5vcm1zL2Rlbm9ybXMgaW50byBleHQvc2dsL2RibCBwcmVjaXNpb24uCQkJCSMKIwlGb3Igbm9ybXMvZGVub3Jtcywgc2NhbGUgdGhlIGV4cG9uZW50cyBzdWNoIHRoYXQgYSBtdWx0aXBseQkjCiMgaW5zdHJ1Y3Rpb24gd29uJ3QgY2F1c2UgYW4gZXhjZXB0aW9uLiBVc2UgdGhlIHJlZ3VsYXIgZm11bCB0bwkJIwojIGNvbXB1dGUgYSByZXN1bHQuIENoZWNrIGlmIHRoZSByZWd1bGFyIG9wZXJhbmRzIHdvdWxkIGhhdmUgdGFrZW4JIwojIGFuIGV4Y2VwdGlvbi4gSWYgc28sIHJldHVybiB0aGUgZGVmYXVsdCBvdmVyZmxvdy91bmRlcmZsb3cgcmVzdWx0CSMKIyBhbmQgcmV0dXJuIHRoZSBFWE9QIGlmIGV4Y2VwdGlvbnMgYXJlIGVuYWJsZWQuIEVsc2UsIHNjYWxlIHRoZQkjCiMgcmVzdWx0IG9wZXJhbmQgdG8gdGhlIHByb3BlciBleHBvbmVudC4JCQkJIwojCQkJCQkJCQkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoJYWxpZ24JCTB4MTAKdGJsX2ZtdWxfb3ZmbDoKCWxvbmcJCTB4M2ZmZiAtIDB4N2ZmZQkJIyBleHRfbWF4Cglsb25nCQkweDNmZmYgLSAweDQwN2UJCSMgc2dsX21heAoJbG9uZwkJMHgzZmZmIC0gMHg0M2ZlCQkjIGRibF9tYXgKdGJsX2ZtdWxfdW5mbDoKCWxvbmcJCTB4M2ZmZiArIDB4MDAwMQkJIyBleHRfdW5mbAoJbG9uZwkJMHgzZmZmIC0gMHgzZjgwCQkjIHNnbF91bmZsCglsb25nCQkweDNmZmYgLSAweDNjMDAJCSMgZGJsX3VuZmwKCglnbG9iYWwJCWZzbXVsCmZzbXVsOgoJYW5kaS5iCQkmMHgzMCwlZDAJCSMgY2xlYXIgcm5kIHByZWMKCW9yaS5iCQkmc19tb2RlKjB4MTAsJWQwCSMgaW5zZXJ0IHNnbCBwcmVjCglicmEuYgkJZm11bAoKCWdsb2JhbAkJZmRtdWwKZmRtdWw6CglhbmRpLmIJCSYweDMwLCVkMAoJb3JpLmIJCSZkX21vZGUqMHgxMCwlZDAJIyBpbnNlcnQgZGJsIHByZWMKCglnbG9iYWwJCWZtdWwKZm11bDoKCW1vdi5sCQklZDAsTF9TQ1IzKCVhNikJCSMgc3RvcmUgcm5kIGluZm8KCgljbHIudwkJJWQxCgltb3YuYgkJRFRBRyglYTYpLCVkMQoJbHNsLmIJCSYweDMsJWQxCglvci5iCQlTVEFHKCVhNiksJWQxCQkjIGNvbWJpbmUgc3JjIHRhZ3MKCWJuZS53CQlmbXVsX25vdF9ub3JtCQkjIG9wdGltaXplIG9uIG5vbi1ub3JtIGlucHV0CgpmbXVsX25vcm06Cgltb3YudwkJRFNUX0VYKCVhMSksRlBfU0NSMV9FWCglYTYpCgltb3YubAkJRFNUX0hJKCVhMSksRlBfU0NSMV9ISSglYTYpCgltb3YubAkJRFNUX0xPKCVhMSksRlBfU0NSMV9MTyglYTYpCgoJbW92LncJCVNSQ19FWCglYTApLEZQX1NDUjBfRVgoJWE2KQoJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQoJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQoKCWJzci5sCQlzY2FsZV90b196ZXJvX3NyYwkjIHNjYWxlIHNyYyBleHBvbmVudAoJbW92LmwJCSVkMCwtKCVzcCkJCSMgc2F2ZSBzY2FsZSBmYWN0b3IgMQoKCWJzci5sCQlzY2FsZV90b196ZXJvX2RzdAkjIHNjYWxlIGRzdCBleHBvbmVudAoKCWFkZC5sCQklZDAsKCVzcCkJCSMgU0NBTEVfRkFDVE9SID0gc2NhbGUxICsgc2NhbGUyCgoJbW92LncJCTIrTF9TQ1IzKCVhNiksJWQxCSMgZmV0Y2ggcHJlY2lzaW9uCglsc3IuYgkJJjB4NiwlZDEJCSMgc2hpZnQgdG8gbG8gYml0cwoJbW92LmwJCSglc3ApKywlZDAJCSMgbG9hZCBTLkYuCgljbXAubAkJJWQwLCh0YmxfZm11bF9vdmZsLncsJXBjLCVkMS53KjQpICMgd291bGQgcmVzdWx0IG92Zmw/CgliZXEudwkJZm11bF9tYXlfb3ZmbAkJIyByZXN1bHQgbWF5IHJuZCB0byBvdmVyZmxvdwoJYmx0LncJCWZtdWxfb3ZmbAkJIyByZXN1bHQgd2lsbCBvdmVyZmxvdwoKCWNtcC5sCQklZDAsKHRibF9mbXVsX3VuZmwudywlcGMsJWQxLncqNCkgIyB3b3VsZCByZXN1bHQgdW5mbD8KCWJlcS53CQlmbXVsX21heV91bmZsCQkjIHJlc3VsdCBtYXkgcm5kIHRvIG5vIHVuZmwKCWJndC53CQlmbXVsX3VuZmwJCSMgcmVzdWx0IHdpbGwgdW5kZXJmbG93CgojCiMgTk9STUFMOgojIC0gdGhlIHJlc3VsdCBvZiB0aGUgbXVsdGlwbHkgb3BlcmF0aW9uIHdpbGwgbmVpdGhlciBvdmVyZmxvdyBub3IgdW5kZXJmbG93LgojIC0gZG8gdGhlIG11bHRpcGx5IHRvIHRoZSBwcm9wZXIgcHJlY2lzaW9uIGFuZCByb3VuZGluZyBtb2RlLgojIC0gc2NhbGUgdGhlIHJlc3VsdCBleHBvbmVudCB1c2luZyB0aGUgc2NhbGUgZmFjdG9yLiBpZiBib3RoIG9wZXJhbmRzIHdlcmUKIyBub3JtYWxpemVkIHRoZW4gd2UgcmVhbGx5IGRvbid0IG5lZWQgdG8gZ28gdGhyb3VnaCB0aGlzIHNjYWxpbmcuIGJ1dCBmb3Igbm93LAojIHRoaXMgd2lsbCBkby4KIwpmbXVsX25vcm1hbDoKCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wZXJhbmQKCglmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCgoJZm11bC54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIGV4ZWN1dGUgbXVsdGlwbHkKCglmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIHN0YXR1cwoJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKCglvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KCmZtdWxfbm9ybWFsX2V4aXQ6CglmbW92bS54CQkmMHg4MCxGUF9TQ1IwKCVhNikJIyBzdG9yZSBvdXQgcmVzdWx0Cgltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCgltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGxvYWQge3NnbixleHB9Cgltb3YubAkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgoJYW5kaS53CQkmMHg4MDAwLCVkMgkJIyBrZWVwIG9sZCBzaWduCglzdWIubAkJJWQwLCVkMQkJCSMgYWRkIHNjYWxlIGZhY3RvcgoJb3IudwkJJWQyLCVkMQkJCSMgY29uY2F0IG9sZCBzaWduLG5ldyBleHAKCW1vdi53CQklZDEsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAoJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgoJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDgwCSMgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGluIGZwMAoJcnRzCgojCiMgT1ZFUkZMT1c6CiMgLSB0aGUgcmVzdWx0IG9mIHRoZSBtdWx0aXBseSBvcGVyYXRpb24gaXMgYW4gb3ZlcmZsb3cuCiMgLSBkbyB0aGUgbXVsdGlwbHkgdG8gdGhlIHByb3BlciBwcmVjaXNpb24gYW5kIHJvdW5kaW5nIG1vZGUgaW4gb3JkZXIgdG8KIyBzZXQgdGhlIGluZXhhY3QgYml0cy4KIyAtIGNhbGN1bGF0ZSB0aGUgZGVmYXVsdCByZXN1bHQgYW5kIHJldHVybiBpdCBpbiBmcDAuCiMgLSBpZiBvdmVyZmxvdyBvciBpbmV4YWN0IGlzIGVuYWJsZWQsIHdlIG5lZWQgYSBtdWx0aXBseSByZXN1bHQgcm91bmRlZCB0bwojIGV4dGVuZGVkIHByZWNpc2lvbi4gaWYgdGhlIG9yaWdpbmFsIG9wZXJhdGlvbiB3YXMgZXh0ZW5kZWQsIHRoZW4gd2UgaGF2ZSB0aGlzCiMgcmVzdWx0LiBpZiB0aGUgb3JpZ2luYWwgb3BlcmF0aW9uIHdhcyBzaW5nbGUgb3IgZG91YmxlLCB3ZSBoYXZlIHRvIGRvIGFub3RoZXIKIyBtdWx0aXBseSB1c2luZyBleHRlbmRlZCBwcmVjaXNpb24gYW5kIHRoZSBjb3JyZWN0IHJvdW5kaW5nIG1vZGUuIHRoZSByZXN1bHQKIyBvZiB0aGlzIG9wZXJhdGlvbiB0aGVuIGhhcyBpdHMgZXhwb25lbnQgc2NhbGVkIGJ5IC0weDYwMDAgdG8gY3JlYXRlIHRoZQojIGV4Y2VwdGlvbmFsIG9wZXJhbmQuCiMKZm11bF9vdmZsOgoJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3BlcmFuZAoKCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgoJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKCglmbXVsLngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBtdWx0aXBseQoKCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgc3RhdHVzCglmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgoKCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgoKIyBzYXZlIHNldHRpbmcgdGhpcyB1bnRpbCBub3cgYmVjYXVzZSB0aGlzIGlzIHdoZXJlIGZtdWxfbWF5X292ZmwgbWF5IGp1bXAgaW4KZm11bF9vdmZsX3RzdDoKCW9yLmwJCSZvdmZsX2lueF9tYXNrLFVTRVJfRlBTUiglYTYpICMgc2V0IG92ZmwvYW92ZmwvYWluZXgKCgltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDEKCWFuZGkuYgkJJjB4MTMsJWQxCQkjIGlzIE9WRkwgb3IgSU5FWCBlbmFibGVkPwoJYm5lLmIJCWZtdWxfb3ZmbF9lbmEJCSMgeWVzCgojIGNhbGN1bGF0ZSB0aGUgZGVmYXVsdCByZXN1bHQKZm11bF9vdmZsX2RpczoKCWJ0c3QJCSZuZWdfYml0LEZQU1JfQ0MoJWE2KQkjIGlzIHJlc3VsdCBuZWdhdGl2ZT8KCXNuZQkJJWQxCQkJIyBzZXQgc2lnbiBwYXJhbSBhY2NvcmRpbmdseQoJbW92LmwJCUxfU0NSMyglYTYpLCVkMAkJIyBwYXNzIHJuZCBwcmVjLG1vZGUKCWJzci5sCQlvdmZfcmVzCQkJIyBjYWxjdWxhdGUgZGVmYXVsdCByZXN1bHQKCW9yLmIJCSVkMCxGUFNSX0NDKCVhNikJIyBzZXQgSU5GLE4gaWYgYXBwbGljYWJsZQoJZm1vdm0ueAkJKCVhMCksJjB4ODAJCSMgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGluIGZwMAoJcnRzCgojCiMgT1ZGTCBpcyBlbmFibGVkOyBDcmVhdGUgRVhPUDoKIyAtIGlmIHByZWNpc2lvbiBpcyBleHRlbmRlZCwgdGhlbiB3ZSBoYXZlIHRoZSBFWE9QLiBzaW1wbHkgYmlhcyB0aGUgZXhwb25lbnQKIyB3aXRoIGFuIGV4dHJhIC0weDYwMDAuIGlmIHRoZSBwcmVjaXNpb24gaXMgc2luZ2xlIG9yIGRvdWJsZSwgd2UgbmVlZCB0bwojIGNhbGN1bGF0ZSBhIHJlc3VsdCByb3VuZGVkIHRvIGV4dGVuZGVkIHByZWNpc2lvbi4KIwpmbXVsX292ZmxfZW5hOgoJbW92LmwJCUxfU0NSMyglYTYpLCVkMQoJYW5kaS5iCQkmMHhjMCwlZDEJCSMgdGVzdCB0aGUgcm5kIHByZWMKCWJuZS5iCQlmbXVsX292ZmxfZW5hX3NkCSMgaXQncyBzZ2wgb3IgZGJsCgpmbXVsX292ZmxfZW5hX2NvbnQ6CglmbW92bS54CQkmMHg4MCxGUF9TQ1IwKCVhNikJIyBtb3ZlIHJlc3VsdCB0byBzdGFjawoKCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgZmV0Y2gge3NnbixleHB9Cgltb3YudwkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgoJc3ViLmwJCSVkMCwlZDEJCQkjIGFkZCBzY2FsZSBmYWN0b3IKCXN1YmkubAkJJjB4NjAwMCwlZDEJCSMgc3VidHJhY3QgYmlhcwoJYW5kaS53CQkmMHg3ZmZmLCVkMQkJIyBjbGVhciBzaWduIGJpdAoJYW5kaS53CQkmMHg4MDAwLCVkMgkJIyBrZWVwIG9sZCBzaWduCglvci53CQklZDIsJWQxCQkJIyBjb25jYXQgb2xkIHNpZ24sbmV3IGV4cAoJbW92LncJCSVkMSxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50Cgltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCglmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4NDAJIyByZXR1cm4gRVhPUCBpbiBmcDEKCWJyYS5iCQlmbXVsX292ZmxfZGlzCgpmbXVsX292ZmxfZW5hX3NkOgoJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3BlcmFuZAoKCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEKCWFuZGkuYgkJJjB4MzAsJWQxCQkjIGtlZXAgcm5kIG1vZGUgb25seQoJZm1vdi5sCQklZDEsJWZwY3IJCSMgc2V0IEZQQ1IKCglmbXVsLngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBtdWx0aXBseQoKCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCglicmEuYgkJZm11bF9vdmZsX2VuYV9jb250CgojCiMgbWF5IE9WRVJGTE9XOgojIC0gdGhlIHJlc3VsdCBvZiB0aGUgbXVsdGlwbHkgb3BlcmF0aW9uIE1BWSBvdmVyZmxvdy4KIyAtIGRvIHRoZSBtdWx0aXBseSB0byB0aGUgcHJvcGVyIHByZWNpc2lvbiBhbmQgcm91bmRpbmcgbW9kZSBpbiBvcmRlciB0bwojIHNldCB0aGUgaW5leGFjdCBiaXRzLgojIC0gY2FsY3VsYXRlIHRoZSBkZWZhdWx0IHJlc3VsdCBhbmQgcmV0dXJuIGl0IGluIGZwMC4KIwpmbXVsX21heV9vdmZsOgoJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3AKCglmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCgoJZm11bC54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIGV4ZWN1dGUgbXVsdGlwbHkKCglmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIHN0YXR1cwoJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKCglvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KCglmYWJzLngJCSVmcDAsJWZwMQkJIyBtYWtlIGEgY29weSBvZiByZXN1bHQKCWZjbXAuYgkJJWZwMSwmMHgyCQkjIGlzIHxyZXN1bHR8ID49IDIuYj8KCWZiZ2UudwkJZm11bF9vdmZsX3RzdAkJIyB5ZXM7IG92ZXJmbG93IGhhcyBvY2N1cnJlZAoKIyBubywgaXQgZGlkbid0IG92ZXJmbG93OyB3ZSBoYXZlIGNvcnJlY3QgcmVzdWx0CglicmEudwkJZm11bF9ub3JtYWxfZXhpdAoKIwojIFVOREVSRkxPVzoKIyAtIHRoZSByZXN1bHQgb2YgdGhlIG11bHRpcGx5IG9wZXJhdGlvbiBpcyBhbiB1bmRlcmZsb3cuCiMgLSBkbyB0aGUgbXVsdGlwbHkgdG8gdGhlIHByb3BlciBwcmVjaXNpb24gYW5kIHJvdW5kaW5nIG1vZGUgaW4gb3JkZXIgdG8KIyBzZXQgdGhlIGluZXhhY3QgYml0cy4KIyAtIGNhbGN1bGF0ZSB0aGUgZGVmYXVsdCByZXN1bHQgYW5kIHJldHVybiBpdCBpbiBmcDAuCiMgLSBpZiBvdmVyZmxvdyBvciBpbmV4YWN0IGlzIGVuYWJsZWQsIHdlIG5lZWQgYSBtdWx0aXBseSByZXN1bHQgcm91bmRlZCB0bwojIGV4dGVuZGVkIHByZWNpc2lvbi4gaWYgdGhlIG9yaWdpbmFsIG9wZXJhdGlvbiB3YXMgZXh0ZW5kZWQsIHRoZW4gd2UgaGF2ZSB0aGlzCiMgcmVzdWx0LiBpZiB0aGUgb3JpZ2luYWwgb3BlcmF0aW9uIHdhcyBzaW5nbGUgb3IgZG91YmxlLCB3ZSBoYXZlIHRvIGRvIGFub3RoZXIKIyBtdWx0aXBseSB1c2luZyBleHRlbmRlZCBwcmVjaXNpb24gYW5kIHRoZSBjb3JyZWN0IHJvdW5kaW5nIG1vZGUuIHRoZSByZXN1bHQKIyBvZiB0aGlzIG9wZXJhdGlvbiB0aGVuIGhhcyBpdHMgZXhwb25lbnQgc2NhbGVkIGJ5IC0weDYwMDAgdG8gY3JlYXRlIHRoZQojIGV4Y2VwdGlvbmFsIG9wZXJhbmQuCiMKZm11bF91bmZsOgoJYnNldAkJJnVuZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgIyBzZXQgdW5mbCBleGMgYml0CgojIGZvciBmdW4sIGxldCdzIHVzZSBvbmx5IGV4dGVuZGVkIHByZWNpc2lvbiwgcm91bmQgdG8gemVyby4gdGhlbiwgbGV0CiMgdGhlIHVuZl9yZXMoKSByb3V0aW5lIGZpZ3VyZSBvdXQgYWxsIHRoZSByZXN0LgojIHdpbGwgd2UgZ2V0IHRoZSBjb3JyZWN0IGFuc3dlci4KCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wZXJhbmQKCglmbW92LmwJCSZyel9tb2RlKjB4MTAsJWZwY3IJIyBzZXQgRlBDUgoJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKCglmbXVsLngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBtdWx0aXBseQoKCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgc3RhdHVzCglmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgoKCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgoKCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMQoJYW5kaS5iCQkmMHgwYiwlZDEJCSMgaXMgVU5GTCBvciBJTkVYIGVuYWJsZWQ/CglibmUuYgkJZm11bF91bmZsX2VuYQkJIyB5ZXMKCmZtdWxfdW5mbF9kaXM6CglmbW92bS54CQkmMHg4MCxGUF9TQ1IwKCVhNikJIyBzdG9yZSBvdXQgcmVzdWx0CgoJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCSMgcGFzczogcmVzdWx0IGFkZHIKCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEJCSMgcGFzczogcm5kIHByZWMsbW9kZQoJYnNyLmwJCXVuZl9yZXMJCQkjIGNhbGN1bGF0ZSBkZWZhdWx0IHJlc3VsdAoJb3IuYgkJJWQwLEZQU1JfQ0MoJWE2KQkjIHVuZl9yZXMyIG1heSBoYXZlIHNldCAnWicKCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg4MAkjIHJldHVybiBkZWZhdWx0IHJlc3VsdCBpbiBmcDAKCXJ0cwoKIwojIFVORkwgaXMgZW5hYmxlZC4KIwpmbXVsX3VuZmxfZW5hOgoJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDQwCSMgbG9hZCBkc3Qgb3AKCgltb3YubAkJTF9TQ1IzKCVhNiksJWQxCglhbmRpLmIJCSYweGMwLCVkMQkJIyBpcyBwcmVjaXNpb24gZXh0ZW5kZWQ/CglibmUuYgkJZm11bF91bmZsX2VuYV9zZAkjIG5vLCBzZ2wgb3IgZGJsCgojIGlmIHRoZSBybmQgbW9kZSBpcyBhbnl0aGluZyBidXQgUlosIHRoZW4gd2UgaGF2ZSB0byByZS1kbyB0aGUgYWJvdmUKIyBtdWx0aXBsaWNhdGlvbiBiZWN1YXNlIHdlIHVzZWQgUlogZm9yIGFsbC4KCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgoKZm11bF91bmZsX2VuYV9jb250OgoJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKCglmbXVsLngJCUZQX1NDUjAoJWE2KSwlZnAxCSMgZXhlY3V0ZSBtdWx0aXBseQoKCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCgoJZm1vdm0ueAkJJjB4NDAsRlBfU0NSMCglYTYpCSMgc2F2ZSByZXN1bHQgdG8gc3RhY2sKCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgZmV0Y2gge3NnbixleHB9Cgltb3YubAkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgoJYW5kaS53CQkmMHg4MDAwLCVkMgkJIyBrZWVwIG9sZCBzaWduCglzdWIubAkJJWQwLCVkMQkJCSMgYWRkIHNjYWxlIGZhY3RvcgoJYWRkaS5sCQkmMHg2MDAwLCVkMQkJIyBhZGQgYmlhcwoJYW5kaS53CQkmMHg3ZmZmLCVkMQoJb3IudwkJJWQyLCVkMQkJCSMgY29uY2F0IG9sZCBzaWduLG5ldyBleHAKCW1vdi53CQklZDEsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAoJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgoJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDQwCSMgcmV0dXJuIEVYT1AgaW4gZnAxCglicmEudwkJZm11bF91bmZsX2RpcwoKZm11bF91bmZsX2VuYV9zZDoKCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEKCWFuZGkuYgkJJjB4MzAsJWQxCQkjIHVzZSBvbmx5IHJuZCBtb2RlCglmbW92LmwJCSVkMSwlZnBjcgkJIyBzZXQgRlBDUgoKCWJyYS5iCQlmbXVsX3VuZmxfZW5hX2NvbnQKCiMgTUFZIFVOREVSRkxPVzoKIyAtdXNlIHRoZSBjb3JyZWN0IHJvdW5kaW5nIG1vZGUgYW5kIHByZWNpc2lvbi4gdGhpcyBjb2RlIGZhdm9ycyBvcGVyYXRpb25zCiMgdGhhdCBkbyBub3QgdW5kZXJmbG93LgpmbXVsX21heV91bmZsOgoJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3BlcmFuZAoKCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgoJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKCglmbXVsLngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBtdWx0aXBseQoKCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgc3RhdHVzCglmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgoKCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgoKCWZhYnMueAkJJWZwMCwlZnAxCQkjIG1ha2UgYSBjb3B5IG9mIHJlc3VsdAoJZmNtcC5iCQklZnAxLCYweDIJCSMgaXMgfHJlc3VsdHwgPiAyLmI/CglmYmd0LncJCWZtdWxfbm9ybWFsX2V4aXQJIyBubzsgbm8gdW5kZXJmbG93IG9jY3VycmVkCglmYmx0LncJCWZtdWxfdW5mbAkJIyB5ZXM7IHVuZGVyZmxvdyBvY2N1cnJlZAoKIwojIHdlIHN0aWxsIGRvbid0IGtub3cgaWYgdW5kZXJmbG93IG9jY3VycmVkLiByZXN1bHQgaXMgfiBlcXVhbCB0byAyLiBidXQsCiMgd2UgZG9uJ3Qga25vdyBpZiB0aGUgcmVzdWx0IHdhcyBhbiB1bmRlcmZsb3cgdGhhdCByb3VuZGVkIHVwIHRvIGEgMiBvcgojIGEgbm9ybWFsaXplZCBudW1iZXIgdGhhdCByb3VuZGVkIGRvd24gdG8gYSAyLiBzbywgcmVkbyB0aGUgZW50aXJlIG9wZXJhdGlvbgojIHVzaW5nIFJaIGFzIHRoZSByb3VuZGluZyBtb2RlIHRvIHNlZSB3aGF0IHRoZSBwcmUtcm91bmRlZCByZXN1bHQgaXMuCiMgdGhpcyBjYXNlIHNob3VsZCBiZSByZWxhdGl2ZWx5IHJhcmUuCiMKCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg0MAkjIGxvYWQgZHN0IG9wZXJhbmQKCgltb3YubAkJTF9TQ1IzKCVhNiksJWQxCglhbmRpLmIJCSYweGMwLCVkMQkJIyBrZWVwIHJuZCBwcmVjCglvcmkuYgkJJnJ6X21vZGUqMHgxMCwlZDEJIyBpbnNlcnQgUloKCglmbW92LmwJCSVkMSwlZnBjcgkJIyBzZXQgRlBDUgoJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKCglmbXVsLngJCUZQX1NDUjAoJWE2KSwlZnAxCSMgZXhlY3V0ZSBtdWx0aXBseQoKCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCglmYWJzLngJCSVmcDEJCQkjIG1ha2UgYWJzb2x1dGUgdmFsdWUKCWZjbXAuYgkJJWZwMSwmMHgyCQkjIGlzIHxyZXN1bHR8IDwgMi5iPwoJZmJnZS53CQlmbXVsX25vcm1hbF9leGl0CSMgbm87IG5vIHVuZGVyZmxvdyBvY2N1cnJlZAoJYnJhLncJCWZtdWxfdW5mbAkJIyB5ZXMsIHVuZGVyZmxvdyBvY2N1cnJlZAoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMKIyBNdWx0aXBseTogaW5wdXRzIGFyZSBub3QgYm90aCBub3JtYWxpemVkOyB3aGF0IGFyZSB0aGV5PwojCmZtdWxfbm90X25vcm06Cgltb3YudwkJKHRibF9mbXVsX29wLmIsJXBjLCVkMS53KjIpLCVkMQoJam1wCQkodGJsX2ZtdWxfb3AuYiwlcGMsJWQxLncpCgoJc3diZWcJCSY0OAp0YmxfZm11bF9vcDoKCXNob3J0CQlmbXVsX25vcm0JLSB0YmxfZm11bF9vcCAjIE5PUk0geCBOT1JNCglzaG9ydAkJZm11bF96ZXJvCS0gdGJsX2ZtdWxfb3AgIyBOT1JNIHggWkVSTwoJc2hvcnQJCWZtdWxfaW5mX3NyYwktIHRibF9mbXVsX29wICMgTk9STSB4IElORgoJc2hvcnQJCWZtdWxfcmVzX3FuYW4JLSB0YmxfZm11bF9vcCAjIE5PUk0geCBRTkFOCglzaG9ydAkJZm11bF9ub3JtCS0gdGJsX2ZtdWxfb3AgIyBOT1JNIHggREVOT1JNCglzaG9ydAkJZm11bF9yZXNfc25hbgktIHRibF9mbXVsX29wICMgTk9STSB4IFNOQU4KCXNob3J0CQl0YmxfZm11bF9vcAktIHRibF9mbXVsX29wICMKCXNob3J0CQl0YmxfZm11bF9vcAktIHRibF9mbXVsX29wICMKCglzaG9ydAkJZm11bF96ZXJvCS0gdGJsX2ZtdWxfb3AgIyBaRVJPIHggTk9STQoJc2hvcnQJCWZtdWxfemVybwktIHRibF9mbXVsX29wICMgWkVSTyB4IFpFUk8KCXNob3J0CQlmbXVsX3Jlc19vcGVycgktIHRibF9mbXVsX29wICMgWkVSTyB4IElORgoJc2hvcnQJCWZtdWxfcmVzX3FuYW4JLSB0YmxfZm11bF9vcCAjIFpFUk8geCBRTkFOCglzaG9ydAkJZm11bF96ZXJvCS0gdGJsX2ZtdWxfb3AgIyBaRVJPIHggREVOT1JNCglzaG9ydAkJZm11bF9yZXNfc25hbgktIHRibF9mbXVsX29wICMgWkVSTyB4IFNOQU4KCXNob3J0CQl0YmxfZm11bF9vcAktIHRibF9mbXVsX29wICMKCXNob3J0CQl0YmxfZm11bF9vcAktIHRibF9mbXVsX29wICMKCglzaG9ydAkJZm11bF9pbmZfZHN0CS0gdGJsX2ZtdWxfb3AgIyBJTkYgeCBOT1JNCglzaG9ydAkJZm11bF9yZXNfb3BlcnIJLSB0YmxfZm11bF9vcCAjIElORiB4IFpFUk8KCXNob3J0CQlmbXVsX2luZl9kc3QJLSB0YmxfZm11bF9vcCAjIElORiB4IElORgoJc2hvcnQJCWZtdWxfcmVzX3FuYW4JLSB0YmxfZm11bF9vcCAjIElORiB4IFFOQU4KCXNob3J0CQlmbXVsX2luZl9kc3QJLSB0YmxfZm11bF9vcCAjIElORiB4IERFTk9STQoJc2hvcnQJCWZtdWxfcmVzX3NuYW4JLSB0YmxfZm11bF9vcCAjIElORiB4IFNOQU4KCXNob3J0CQl0YmxfZm11bF9vcAktIHRibF9mbXVsX29wICMKCXNob3J0CQl0YmxfZm11bF9vcAktIHRibF9mbXVsX29wICMKCglzaG9ydAkJZm11bF9yZXNfcW5hbgktIHRibF9mbXVsX29wICMgUU5BTiB4IE5PUk0KCXNob3J0CQlmbXVsX3Jlc19xbmFuCS0gdGJsX2ZtdWxfb3AgIyBRTkFOIHggWkVSTwoJc2hvcnQJCWZtdWxfcmVzX3FuYW4JLSB0YmxfZm11bF9vcCAjIFFOQU4geCBJTkYKCXNob3J0CQlmbXVsX3Jlc19xbmFuCS0gdGJsX2ZtdWxfb3AgIyBRTkFOIHggUU5BTgoJc2hvcnQJCWZtdWxfcmVzX3FuYW4JLSB0YmxfZm11bF9vcCAjIFFOQU4geCBERU5PUk0KCXNob3J0CQlmbXVsX3Jlc19zbmFuCS0gdGJsX2ZtdWxfb3AgIyBRTkFOIHggU05BTgoJc2hvcnQJCXRibF9mbXVsX29wCS0gdGJsX2ZtdWxfb3AgIwoJc2hvcnQJCXRibF9mbXVsX29wCS0gdGJsX2ZtdWxfb3AgIwoKCXNob3J0CQlmbXVsX25vcm0JLSB0YmxfZm11bF9vcCAjIE5PUk0geCBOT1JNCglzaG9ydAkJZm11bF96ZXJvCS0gdGJsX2ZtdWxfb3AgIyBOT1JNIHggWkVSTwoJc2hvcnQJCWZtdWxfaW5mX3NyYwktIHRibF9mbXVsX29wICMgTk9STSB4IElORgoJc2hvcnQJCWZtdWxfcmVzX3FuYW4JLSB0YmxfZm11bF9vcCAjIE5PUk0geCBRTkFOCglzaG9ydAkJZm11bF9ub3JtCS0gdGJsX2ZtdWxfb3AgIyBOT1JNIHggREVOT1JNCglzaG9ydAkJZm11bF9yZXNfc25hbgktIHRibF9mbXVsX29wICMgTk9STSB4IFNOQU4KCXNob3J0CQl0YmxfZm11bF9vcAktIHRibF9mbXVsX29wICMKCXNob3J0CQl0YmxfZm11bF9vcAktIHRibF9mbXVsX29wICMKCglzaG9ydAkJZm11bF9yZXNfc25hbgktIHRibF9mbXVsX29wICMgU05BTiB4IE5PUk0KCXNob3J0CQlmbXVsX3Jlc19zbmFuCS0gdGJsX2ZtdWxfb3AgIyBTTkFOIHggWkVSTwoJc2hvcnQJCWZtdWxfcmVzX3NuYW4JLSB0YmxfZm11bF9vcCAjIFNOQU4geCBJTkYKCXNob3J0CQlmbXVsX3Jlc19zbmFuCS0gdGJsX2ZtdWxfb3AgIyBTTkFOIHggUU5BTgoJc2hvcnQJCWZtdWxfcmVzX3NuYW4JLSB0YmxfZm11bF9vcCAjIFNOQU4geCBERU5PUk0KCXNob3J0CQlmbXVsX3Jlc19zbmFuCS0gdGJsX2ZtdWxfb3AgIyBTTkFOIHggU05BTgoJc2hvcnQJCXRibF9mbXVsX29wCS0gdGJsX2ZtdWxfb3AgIwoJc2hvcnQJCXRibF9mbXVsX29wCS0gdGJsX2ZtdWxfb3AgIwoKZm11bF9yZXNfb3BlcnI6CglicmEubAkJcmVzX29wZXJyCmZtdWxfcmVzX3NuYW46CglicmEubAkJcmVzX3NuYW4KZm11bF9yZXNfcW5hbjoKCWJyYS5sCQlyZXNfcW5hbgoKIwojIE11bHRpcGx5OiAoWmVybyB4IFplcm8pIHx8IChaZXJvIHggbm9ybSkgfHwgKFplcm8geCBkZW5vcm0pCiMKCWdsb2JhbAkJZm11bF96ZXJvCQkjIGdsb2JhbCBmb3IgZnNnbG11bApmbXVsX3plcm86Cgltb3YuYgkJU1JDX0VYKCVhMCksJWQwCQkjIGV4Y2x1c2l2ZSBvciB0aGUgc2lnbnMKCW1vdi5iCQlEU1RfRVgoJWExKSwlZDEKCWVvci5iCQklZDAsJWQxCglicGwuYgkJZm11bF96ZXJvX3AJCSMgcmVzdWx0IFpFUk8gaXMgcG9zLgpmbXVsX3plcm9fbjoKCWZtb3YucwkJJjB4ODAwMDAwMDAsJWZwMAkjIGxvYWQgLVpFUk8KCW1vdi5iCQkmel9ibWFzaytuZWdfYm1hc2ssRlBTUl9DQyglYTYpICMgc2V0IFovTgoJcnRzCmZtdWxfemVyb19wOgoJZm1vdi5zCQkmMHgwMDAwMDAwMCwlZnAwCSMgbG9hZCArWkVSTwoJbW92LmIJCSZ6X2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCBaCglydHMKCiMKIyBNdWx0aXBseTogKGluZiB4IGluZikgfHwgKGluZiB4IG5vcm0pIHx8IChpbmYgeCBkZW5vcm0pCiMKIyBOb3RlOiBUaGUgai1iaXQgZm9yIGFuIGluZmluaXR5IGlzIGEgZG9uJ3QtY2FyZS4gSG93ZXZlciwgdG8gYmUKIyBzdHJpY3RseSBjb21wYXRpYmxlIHcvIHRoZSA2ODg4MS84ODIsIHdlIG1ha2Ugc3VyZSB0byByZXR1cm4gYW4KIyBJTkYgdy8gdGhlIGotYml0IHNldCBpZiB0aGUgaW5wdXQgSU5GIGotYml0IHdhcyBzZXQuIERlc3RpbmF0aW9uCiMgSU5GcyB0YWtlIHByaW9yaXR5LgojCglnbG9iYWwJCWZtdWxfaW5mX2RzdAkJIyBnbG9iYWwgZm9yIGZzZ2xtdWwKZm11bF9pbmZfZHN0OgoJZm1vdm0ueAkJRFNUKCVhMSksJjB4ODAJCSMgcmV0dXJuIElORiByZXN1bHQgaW4gZnAwCgltb3YuYgkJU1JDX0VYKCVhMCksJWQwCQkjIGV4Y2x1c2l2ZSBvciB0aGUgc2lnbnMKCW1vdi5iCQlEU1RfRVgoJWExKSwlZDEKCWVvci5iCQklZDAsJWQxCglicGwuYgkJZm11bF9pbmZfZHN0X3AJCSMgcmVzdWx0IElORiBpcyBwb3MuCmZtdWxfaW5mX2RzdF9uOgoJZmFicy54CQklZnAwCQkJIyBjbGVhciByZXN1bHQgc2lnbgoJZm5lZy54CQklZnAwCQkJIyBzZXQgcmVzdWx0IHNpZ24KCW1vdi5iCQkmaW5mX2JtYXNrK25lZ19ibWFzayxGUFNSX0NDKCVhNikgIyBzZXQgSU5GL04KCXJ0cwpmbXVsX2luZl9kc3RfcDoKCWZhYnMueAkJJWZwMAkJCSMgY2xlYXIgcmVzdWx0IHNpZ24KCW1vdi5iCQkmaW5mX2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCBJTkYKCXJ0cwoKCWdsb2JhbAkJZm11bF9pbmZfc3JjCQkjIGdsb2JhbCBmb3IgZnNnbG11bApmbXVsX2luZl9zcmM6CglmbW92bS54CQlTUkMoJWEwKSwmMHg4MAkJIyByZXR1cm4gSU5GIHJlc3VsdCBpbiBmcDAKCW1vdi5iCQlTUkNfRVgoJWEwKSwlZDAJCSMgZXhjbHVzaXZlIG9yIHRoZSBzaWducwoJbW92LmIJCURTVF9FWCglYTEpLCVkMQoJZW9yLmIJCSVkMCwlZDEKCWJwbC5iCQlmbXVsX2luZl9kc3RfcAkJIyByZXN1bHQgSU5GIGlzIHBvcy4KCWJyYS5iCQlmbXVsX2luZl9kc3RfbgoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJZmluKCk6IGVtdWxhdGVzIHRoZSBmbW92ZSBpbnN0cnVjdGlvbgkJCQkjCiMJZnNpbigpOiBlbXVsYXRlcyB0aGUgZnNtb3ZlIGluc3RydWN0aW9uCQkJCSMKIwlmZGluKCk6IGVtdWxhdGVzIHRoZSBmZG1vdmUgaW5zdHJ1Y3Rpb24JCQkJIwojCQkJCQkJCQkJIwojIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJbm9ybSgpIC0gbm9ybWFsaXplIG1hbnRpc3NhIGZvciBFWE9QIG9uIGRlbm9ybQkJCSMKIwlzY2FsZV90b196ZXJvX3NyYygpIC0gc2NhbGUgc3JjIGV4cG9uZW50IHRvIHplcm8JCSMKIwlvdmZfcmVzKCkgLSByZXR1cm4gZGVmYXVsdCBvdmVyZmxvdyByZXN1bHQJCQkjCiMJdW5mX3JlcygpIC0gcmV0dXJuIGRlZmF1bHQgdW5kZXJmbG93IHJlc3VsdAkJCSMKIwlyZXNfcW5hbl8xb3AoKSAtIHJldHVybiBRTkFOIHJlc3VsdAkJCQkjCiMJcmVzX3NuYW5fMW9wKCkgLSByZXR1cm4gU05BTiByZXN1bHQJCQkJIwojCQkJCQkJCQkJIwojIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBzb3VyY2Ugb3BlcmFuZAkJIwojCWQwID0gcm91bmQgcHJlYy9tb2RlCQkJCQkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJZnAwID0gcmVzdWx0CQkJCQkJCSMKIwlmcDEgPSBFWE9QIChpZiBleGNlcHRpb24gb2NjdXJyZWQpCQkJCSMKIwkJCQkJCQkJCSMKIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCUhhbmRsZSBOQU5zLCBpbmZpbml0aWVzLCBhbmQgemVyb2VzIGFzIHNwZWNpYWwgY2FzZXMuIERpdmlkZQkjCiMgbm9ybXMgaW50byBleHRlbmRlZCwgc2luZ2xlLCBhbmQgZG91YmxlIHByZWNpc2lvbi4JCQkjCiMJTm9ybXMgY2FuIGJlIGVtdWxhdGVkIHcvIGEgcmVndWxhciBmbW92ZSBpbnN0cnVjdGlvbi4gRm9yCSMKIyBzZ2wvZGJsLCBtdXN0IHNjYWxlIGV4cG9uZW50IGFuZCBwZXJmb3JtIGFuICJmbW92ZSIuIENoZWNrIHRvIHNlZQkjCiMgaWYgdGhlIHJlc3VsdCB3b3VsZCBoYXZlIG92ZXJmbG93ZWQvdW5kZXJmbG93ZWQuIElmIHNvLCB1c2UgdW5mX3JlcygpCSMKIyBvciBvdmZfcmVzKCkgdG8gcmV0dXJuIHRoZSBkZWZhdWx0IHJlc3VsdC4gQWxzbyByZXR1cm4gRVhPUCBpZgkjCiMgZXhjZXB0aW9uIGlzIGVuYWJsZWQuIElmIG5vIGV4Y2VwdGlvbiwgcmV0dXJuIHRoZSBkZWZhdWx0IHJlc3VsdC4JIwojCVVubm9ybXMgZG9uJ3QgcGFzcyB0aHJvdWdoIGhlcmUuCQkJCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCWdsb2JhbAkJZnNpbgpmc2luOgoJYW5kaS5iCQkmMHgzMCwlZDAJCSMgY2xlYXIgcm5kIHByZWMKCW9yaS5iCQkmc19tb2RlKjB4MTAsJWQwCSMgaW5zZXJ0IHNnbCBwcmVjaXNpb24KCWJyYS5iCQlmaW4KCglnbG9iYWwJCWZkaW4KZmRpbjoKCWFuZGkuYgkJJjB4MzAsJWQwCQkjIGNsZWFyIHJuZCBwcmVjCglvcmkuYgkJJmRfbW9kZSoweDEwLCVkMAkjIGluc2VydCBkYmwgcHJlY2lzaW9uCgoJZ2xvYmFsCQlmaW4KZmluOgoJbW92LmwJCSVkMCxMX1NDUjMoJWE2KQkJIyBzdG9yZSBybmQgaW5mbwoKCW1vdi5iCQlTVEFHKCVhNiksJWQxCQkjIGZldGNoIHNyYyBvcHR5cGUgdGFnCglibmUudwkJZmluX25vdF9ub3JtCQkjIG9wdGltaXplIG9uIG5vbi1ub3JtIGlucHV0CgojCiMgRlAgTU9WRSBJTjogTk9STXMgYW5kIERFTk9STXMgT05MWSEKIwpmaW5fbm9ybToKCWFuZGkuYgkJJjB4YzAsJWQwCQkjIGlzIHByZWNpc2lvbiBleHRlbmRlZD8KCWJuZS53CQlmaW5fbm90X2V4dAkJIyBubywgc28gZ28gaGFuZGxlIGRibCBvciBzZ2wKCiMKIyBwcmVjaXNpb24gc2VsZWN0ZWQgaXMgZXh0ZW5kZWQuIHNvLi4ud2UgY2Fubm90IGdldCBhbiB1bmRlcmZsb3cKIyBvciBvdmVyZmxvdyBiZWNhdXNlIG9mIHJvdW5kaW5nIHRvIHRoZSBjb3JyZWN0IHByZWNpc2lvbi4gc28uLi4KIyBza2lwIHRoZSBzY2FsaW5nIGFuZCB1bnNjYWxpbmcuLi4KIwoJdHN0LmIJCVNSQ19FWCglYTApCQkjIGlzIHRoZSBvcGVyYW5kIG5lZ2F0aXZlPwoJYnBsLmIJCWZpbl9ub3JtX2RvbmUJCSMgbm8KCWJzZXQJCSZuZWdfYml0LEZQU1JfQ0MoJWE2KQkjIHllcywgc28gc2V0ICdOJyBjY29kZSBiaXQKZmluX25vcm1fZG9uZToKCWZtb3ZtLngJCVNSQyglYTApLCYweDgwCQkjIHJldHVybiByZXN1bHQgaW4gZnAwCglydHMKCiMKIyBmb3IgYW4gZXh0ZW5kZWQgcHJlY2lzaW9uIERFTk9STSwgdGhlIFVORkwgZXhjZXB0aW9uIGJpdCBpcyBzZXQKIyB0aGUgYWNjcnVlZCBiaXQgaXMgTk9UIHNldCBpbiB0aGlzIGluc3RhbmNlKG5vIGluZXhhY3RuZXNzISkKIwpmaW5fZGVub3JtOgoJYW5kaS5iCQkmMHhjMCwlZDAJCSMgaXMgcHJlY2lzaW9uIGV4dGVuZGVkPwoJYm5lLncJCWZpbl9ub3RfZXh0CQkjIG5vLCBzbyBnbyBoYW5kbGUgZGJsIG9yIHNnbAoKCWJzZXQJCSZ1bmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgc2V0IHVuZmwgZXhjIGJpdAoJdHN0LmIJCVNSQ19FWCglYTApCQkjIGlzIHRoZSBvcGVyYW5kIG5lZ2F0aXZlPwoJYnBsLmIJCWZpbl9kZW5vcm1fZG9uZQkJIyBubwoJYnNldAkJJm5lZ19iaXQsRlBTUl9DQyglYTYpCSMgeWVzLCBzbyBzZXQgJ04nIGNjb2RlIGJpdApmaW5fZGVub3JtX2RvbmU6CglmbW92bS54CQlTUkMoJWEwKSwmMHg4MAkJIyByZXR1cm4gcmVzdWx0IGluIGZwMAoJYnRzdAkJJnVuZmxfYml0LEZQQ1JfRU5BQkxFKCVhNikgIyBpcyBVTkZMIGVuYWJsZWQ/CglibmUuYgkJZmluX2Rlbm9ybV91bmZsX2VuYQkjIHllcwoJcnRzCgojCiMgdGhlIGlucHV0IGlzIGFuIGV4dGVuZGVkIERFTk9STSBhbmQgdW5kZXJmbG93IGlzIGVuYWJsZWQgaW4gdGhlIEZQQ1IuCiMgbm9ybWFsaXplIHRoZSBtYW50aXNzYSBhbmQgYWRkIHRoZSBiaWFzIG9mIDB4NjAwMCB0byB0aGUgcmVzdWx0aW5nIG5lZ2F0aXZlCiMgZXhwb25lbnQgYW5kIGluc2VydCBiYWNrIGludG8gdGhlIG9wZXJhbmQuCiMKZmluX2Rlbm9ybV91bmZsX2VuYToKCW1vdi53CQlTUkNfRVgoJWEwKSxGUF9TQ1IwX0VYKCVhNikKCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikKCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHB0ciB0byBvcGVyYW5kCglic3IubAkJbm9ybQkJCSMgbm9ybWFsaXplIHJlc3VsdAoJbmVnLncJCSVkMAkJCSMgbmV3IGV4cG9uZW50ID0gLShzaGZ0IHZhbCkKCWFkZGkudwkJJjB4NjAwMCwlZDAJCSMgYWRkIG5ldyBiaWFzIHRvIGV4cG9uZW50Cgltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGZldGNoIG9sZCBzaWduLGV4cAoJYW5kaS53CQkmMHg4MDAwLCVkMQkJIyBrZWVwIG9sZCBzaWduCglhbmRpLncJCSYweDdmZmYsJWQwCQkjIGNsZWFyIHNpZ24gcG9zaXRpb24KCW9yLncJCSVkMSwlZDAJCQkjIGNvbmNhdCBuZXcgZXhvLG9sZCBzaWduCgltb3YudwkJJWQwLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwb25lbnQKCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg0MAkjIHJldHVybiBFWE9QIGluIGZwMQoJcnRzCgojCiMgb3BlcmFuZCBpcyB0byBiZSByb3VuZGVkIHRvIHNpbmdsZSBvciBkb3VibGUgcHJlY2lzaW9uCiMKZmluX25vdF9leHQ6CgljbXBpLmIJCSVkMCwmc19tb2RlKjB4MTAJIyBzZXBhcmF0ZSBzZ2wvZGJsIHByZWMKCWJuZS5iCQlmaW5fZGJsCgojCiMgb3BlcmFuZCBpcyB0byBiZSByb3VuZGVkIHRvIHNpbmdsZSBwcmVjaXNpb24KIwpmaW5fc2dsOgoJbW92LncJCVNSQ19FWCglYTApLEZQX1NDUjBfRVgoJWE2KQoJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQoJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQoJYnNyLmwJCXNjYWxlX3RvX3plcm9fc3JjCSMgY2FsY3VsYXRlIHNjYWxlIGZhY3RvcgoKCWNtcGkubAkJJWQwLCYweDNmZmYtMHgzZjgwCSMgd2lsbCBtb3ZlIGluIHVuZGVyZmxvdz8KCWJnZS53CQlmaW5fc2RfdW5mbAkJIyB5ZXM7IGdvIGhhbmRsZSB1bmRlcmZsb3cKCWNtcGkubAkJJWQwLCYweDNmZmYtMHg0MDdlCSMgd2lsbCBtb3ZlIGluIG92ZXJmbG93PwoJYmVxLncJCWZpbl9zZF9tYXlfb3ZmbAkJIyBtYXliZTsgZ28gY2hlY2sKCWJsdC53CQlmaW5fc2Rfb3ZmbAkJIyB5ZXM7IGdvIGhhbmRsZSBvdmVyZmxvdwoKIwojIG9wZXJhbmQgd2lsbCBOT1Qgb3ZlcmZsb3cgb3IgdW5kZXJmbG93IHdoZW4gbW92ZWQgaW50byB0aGUgZnAgcmVnIGZpbGUKIwpmaW5fc2Rfbm9ybWFsOgoJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgoKCWZtb3YueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBwZXJmb3JtIG1vdmUKCglmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIEZQU1IKCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCgoJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCgpmaW5fc2Rfbm9ybWFsX2V4aXQ6Cgltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCglmbW92bS54CQkmMHg4MCxGUF9TQ1IwKCVhNikJIyBzdG9yZSBvdXQgcmVzdWx0Cgltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGxvYWQge3NnbixleHB9Cgltb3YudwkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgoJc3ViLmwJCSVkMCwlZDEJCQkjIGFkZCBzY2FsZSBmYWN0b3IKCWFuZGkudwkJJjB4ODAwMCwlZDIJCSMga2VlcCBvbGQgc2lnbgoJb3IudwkJJWQxLCVkMgkJCSMgY29uY2F0IG9sZCBzaWduLG5ldyBleHBvbmVudAoJbW92LncJCSVkMixGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50Cgltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCglmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4ODAJIyByZXR1cm4gcmVzdWx0IGluIGZwMAoJcnRzCgojCiMgb3BlcmFuZCBpcyB0byBiZSByb3VuZGVkIHRvIGRvdWJsZSBwcmVjaXNpb24KIwpmaW5fZGJsOgoJbW92LncJCVNSQ19FWCglYTApLEZQX1NDUjBfRVgoJWE2KQoJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQoJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQoJYnNyLmwJCXNjYWxlX3RvX3plcm9fc3JjCSMgY2FsY3VsYXRlIHNjYWxlIGZhY3RvcgoKCWNtcGkubAkJJWQwLCYweDNmZmYtMHgzYzAwCSMgd2lsbCBtb3ZlIGluIHVuZGVyZmxvdz8KCWJnZS53CQlmaW5fc2RfdW5mbAkJIyB5ZXM7IGdvIGhhbmRsZSB1bmRlcmZsb3cKCWNtcGkubAkJJWQwLCYweDNmZmYtMHg0M2ZlCSMgd2lsbCBtb3ZlIGluIG92ZXJmbG93PwoJYmVxLncJCWZpbl9zZF9tYXlfb3ZmbAkJIyBtYXliZTsgZ28gY2hlY2sKCWJsdC53CQlmaW5fc2Rfb3ZmbAkJIyB5ZXM7IGdvIGhhbmRsZSBvdmVyZmxvdwoJYnJhLncJCWZpbl9zZF9ub3JtYWwJCSMgbm87IGhvIGhhbmRsZSBub3JtYWxpemVkIG9wCgojCiMgb3BlcmFuZCBXSUxMIHVuZGVyZmxvdyB3aGVuIG1vdmVkIGluIHRvIHRoZSBmcCByZWdpc3RlciBmaWxlCiMKZmluX3NkX3VuZmw6Cglic2V0CQkmdW5mbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIHNldCB1bmZsIGV4YyBiaXQKCgl0c3QuYgkJRlBfU0NSMF9FWCglYTYpCQkjIGlzIG9wZXJhbmQgbmVnYXRpdmU/CglicGwuYgkJZmluX3NkX3VuZmxfdHN0Cglic2V0CQkmbmVnX2JpdCxGUFNSX0NDKCVhNikJIyBzZXQgJ04nIGNjb2RlIGJpdAoKIyBpZiB1bmRlcmZsb3cgb3IgaW5leGFjdCBpcyBlbmFibGVkLCB0aGVuIGdvIGNhbGN1bGF0ZSB0aGUgRVhPUCBmaXJzdC4KZmluX3NkX3VuZmxfdHN0OgoJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCglhbmRpLmIJCSYweDBiLCVkMQkJIyBpcyBVTkZMIG9yIElORVggZW5hYmxlZD8KCWJuZS5iCQlmaW5fc2RfdW5mbF9lbmEJCSMgeWVzCgpmaW5fc2RfdW5mbF9kaXM6CglsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzOiByZXN1bHQgYWRkcgoJbW92LmwJCUxfU0NSMyglYTYpLCVkMQkJIyBwYXNzOiBybmQgcHJlYyxtb2RlCglic3IubAkJdW5mX3JlcwkJCSMgY2FsY3VsYXRlIGRlZmF1bHQgcmVzdWx0Cglvci5iCQklZDAsRlBTUl9DQyglYTYpCSMgdW5mX3JlcyBtYXkgaGF2ZSBzZXQgJ1onCglmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4ODAJIyByZXR1cm4gZGVmYXVsdCByZXN1bHQgaW4gZnAwCglydHMKCiMKIyBvcGVyYW5kIHdpbGwgdW5kZXJmbG93IEFORCB1bmRlcmZsb3cgb3IgaW5leGFjdCBpcyBlbmFibGVkLgojIHRoZXJlZm9yZSwgd2UgbXVzdCByZXR1cm4gdGhlIHJlc3VsdCByb3VuZGVkIHRvIGV4dGVuZGVkIHByZWNpc2lvbi4KIwpmaW5fc2RfdW5mbF9lbmE6Cgltb3YubAkJRlBfU0NSMF9ISSglYTYpLEZQX1NDUjFfSEkoJWE2KQoJbW92LmwJCUZQX1NDUjBfTE8oJWE2KSxGUF9TQ1IxX0xPKCVhNikKCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgbG9hZCBjdXJyZW50IGV4cG9uZW50CgoJbW92LmwJCSVkMiwtKCVzcCkJCSMgc2F2ZSBkMgoJbW92LncJCSVkMSwlZDIJCQkjIG1ha2UgYSBjb3B5CglhbmRpLmwJCSYweDdmZmYsJWQxCQkjIHN0cmlwIHNpZ24KCXN1Yi5sCQklZDAsJWQxCQkJIyBzdWJ0cmFjdCBzY2FsZSBmYWN0b3IKCWFuZGkudwkJJjB4ODAwMCwlZDIJCSMgZXh0cmFjdCBvbGQgc2lnbgoJYWRkaS5sCQkmMHg2MDAwLCVkMQkJIyBhZGQgbmV3IGJpYXMKCWFuZGkudwkJJjB4N2ZmZiwlZDEKCW9yLncJCSVkMSwlZDIJCQkjIGNvbmNhdCBvbGQgc2lnbixuZXcgZXhwCgltb3YudwkJJWQyLEZQX1NDUjFfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwb25lbnQKCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg0MAkjIHJldHVybiBFWE9QIGluIGZwMQoJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgoJYnJhLmIJCWZpbl9zZF91bmZsX2RpcwoKIwojIG9wZXJhbmQgV0lMTCBvdmVyZmxvdy4KIwpmaW5fc2Rfb3ZmbDoKCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCglmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKCglmbW92LngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgcGVyZm9ybSBtb3ZlCgoJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgRlBTUgoKCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgoKZmluX3NkX292ZmxfdHN0OgoJb3IubAkJJm92ZmxfaW54X21hc2ssVVNFUl9GUFNSKCVhNikgIyBzZXQgb3ZmbC9hb3ZmbC9haW5leAoKCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMQoJYW5kaS5iCQkmMHgxMywlZDEJCSMgaXMgT1ZGTCBvciBJTkVYIGVuYWJsZWQ/CglibmUuYgkJZmluX3NkX292ZmxfZW5hCQkjIHllcwoKIwojIE9WRkwgaXMgbm90IGVuYWJsZWQ7IHRoZXJlZm9yZSwgd2UgbXVzdCBjcmVhdGUgdGhlIGRlZmF1bHQgcmVzdWx0IGJ5CiMgY2FsbGluZyBvdmZfcmVzKCkuCiMKZmluX3NkX292ZmxfZGlzOgoJYnRzdAkJJm5lZ19iaXQsRlBTUl9DQyglYTYpCSMgaXMgcmVzdWx0IG5lZ2F0aXZlPwoJc25lCQklZDEJCQkjIHNldCBzaWduIHBhcmFtIGFjY29yZGluZ2x5Cgltb3YubAkJTF9TQ1IzKCVhNiksJWQwCQkjIHBhc3M6IHByZWMsbW9kZQoJYnNyLmwJCW92Zl9yZXMJCQkjIGNhbGN1bGF0ZSBkZWZhdWx0IHJlc3VsdAoJb3IuYgkJJWQwLEZQU1JfQ0MoJWE2KQkjIHNldCBJTkYsTiBpZiBhcHBsaWNhYmxlCglmbW92bS54CQkoJWEwKSwmMHg4MAkJIyByZXR1cm4gZGVmYXVsdCByZXN1bHQgaW4gZnAwCglydHMKCiMKIyBPVkZMIGlzIGVuYWJsZWQuCiMgdGhlIElORVgyIGJpdCBoYXMgYWxyZWFkeSBiZWVuIHVwZGF0ZWQgYnkgdGhlIHJvdW5kIHRvIHRoZSBjb3JyZWN0IHByZWNpc2lvbi4KIyBub3csIHJvdW5kIHRvIGV4dGVuZGVkKGFuZCBkb24ndCBhbHRlciB0aGUgRlBTUikuCiMKZmluX3NkX292ZmxfZW5hOgoJbW92LmwJCSVkMiwtKCVzcCkJCSMgc2F2ZSBkMgoJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBmZXRjaCB7c2duLGV4cH0KCW1vdi5sCQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQoJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCglhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KCXN1Yi5sCQklZDAsJWQxCQkJIyBhZGQgc2NhbGUgZmFjdG9yCglzdWIubAkJJjB4NjAwMCwlZDEJCSMgc3VidHJhY3QgYmlhcwoJYW5kaS53CQkmMHg3ZmZmLCVkMQoJb3IudwkJJWQyLCVkMQoJbW92LncJCSVkMSxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50Cgltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCglmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4NDAJIyByZXR1cm4gRVhPUCBpbiBmcDEKCWJyYS5iCQlmaW5fc2Rfb3ZmbF9kaXMKCiMKIyB0aGUgbW92ZSBpbiBNQVkgb3ZlcmZsb3cuIHNvLi4uCiMKZmluX3NkX21heV9vdmZsOgoJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgoKCWZtb3YueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBwZXJmb3JtIHRoZSBtb3ZlCgoJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBzdGF0dXMKCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCgoJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCgoJZmFicy54CQklZnAwLCVmcDEJCSMgbWFrZSBhIGNvcHkgb2YgcmVzdWx0CglmY21wLmIJCSVmcDEsJjB4MgkJIyBpcyB8cmVzdWx0fCA+PSAyLmI/CglmYmdlLncJCWZpbl9zZF9vdmZsX3RzdAkJIyB5ZXM7IG92ZXJmbG93IGhhcyBvY2N1cnJlZAoKIyBubywgaXQgZGlkbid0IG92ZXJmbG93OyB3ZSBoYXZlIGNvcnJlY3QgcmVzdWx0CglicmEudwkJZmluX3NkX25vcm1hbF9leGl0CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIwojIG9wZXJhbmQgaXMgbm90IGEgTk9STTogY2hlY2sgaXRzIG9wdHlwZSBhbmQgYnJhbmNoIGFjY29yZGluZ2x5CiMKZmluX25vdF9ub3JtOgoJY21waS5iCQklZDEsJkRFTk9STQkJIyB3ZWVkIG91dCBERU5PUk0KCWJlcS53CQlmaW5fZGVub3JtCgljbXBpLmIJCSVkMSwmU05BTgkJIyB3ZWVkIG91dCBTTkFOcwoJYmVxLmwJCXJlc19zbmFuXzFvcAoJY21waS5iCQklZDEsJlFOQU4JCSMgd2VlZCBvdXQgUU5BTnMKCWJlcS5sCQlyZXNfcW5hbl8xb3AKCiMKIyBkbyB0aGUgZm1vdmUgaW47IGF0IHRoaXMgcG9pbnQsIG9ubHkgcG9zc2libGUgb3BzIGFyZSBaRVJPIGFuZCBJTkYuCiMgdXNlIGZtb3YgdG8gZGV0ZXJtaW5lIGNjb2Rlcy4KIyBwcmVjOm1vZGUgc2hvdWxkIGJlIHplcm8gYXQgdGhpcyBwb2ludCBidXQgaXQgd29uJ3QgYWZmZWN0IGFuc3dlciBhbnl3YXlzLgojCglmbW92LngJCVNSQyglYTApLCVmcDAJCSMgZG8gZm1vdmUgaW4KCWZtb3YubAkJJWZwc3IsJWQwCQkjIG5vIGV4Y2VwdGlvbnMgcG9zc2libGUKCXJvbC5sCQkmMHg4LCVkMAkJIyBwdXQgY2NvZGVzIGluIGxvIGJ5dGUKCW1vdi5iCQklZDAsRlBTUl9DQyglYTYpCSMgaW5zZXJ0IGNvcnJlY3QgY2NvZGVzCglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWZkaXYoKTogZW11bGF0ZXMgdGhlIGZkaXYgaW5zdHJ1Y3Rpb24JCQkJIwojCWZzZGl2KCk6IGVtdWxhdGVzIHRoZSBmc2RpdiBpbnN0cnVjdGlvbgkJCQkjCiMJZmRkaXYoKTogZW11bGF0ZXMgdGhlIGZkZGl2IGluc3RydWN0aW9uCQkJCSMKIwkJCQkJCQkJCSMKIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCXNjYWxlX3RvX3plcm9fc3JjKCkgLSBzY2FsZSBzcmMgZXhwb25lbnQgdG8gemVybwkJIwojCXNjYWxlX3RvX3plcm9fZHN0KCkgLSBzY2FsZSBkc3QgZXhwb25lbnQgdG8gemVybwkJIwojCXVuZl9yZXMoKSAtIHJldHVybiBkZWZhdWx0IHVuZGVyZmxvdyByZXN1bHQJCQkjCiMJb3ZmX3JlcygpIC0gcmV0dXJuIGRlZmF1bHQgb3ZlcmZsb3cgcmVzdWx0CQkJIwojCXJlc19xbmFuKCkgLSByZXR1cm4gUU5BTiByZXN1bHQJCQkJCSMKIwlyZXNfc25hbigpIC0gcmV0dXJuIFNOQU4gcmVzdWx0CQkJCQkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIHNvdXJjZSBvcGVyYW5kCQkjCiMJYTEgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBkZXN0aW5hdGlvbiBvcGVyYW5kCQkjCiMJZDAgIHJuZCBwcmVjLG1vZGUJCQkJCQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlmcDAgPSByZXN1bHQJCQkJCQkJIwojCWZwMSA9IEVYT1AgKGlmIGV4Y2VwdGlvbiBvY2N1cnJlZCkJCQkJIwojCQkJCQkJCQkJIwojIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJSGFuZGxlIE5BTnMsIGluZmluaXRpZXMsIGFuZCB6ZXJvZXMgYXMgc3BlY2lhbCBjYXNlcy4gRGl2aWRlCSMKIyBub3Jtcy9kZW5vcm1zIGludG8gZXh0L3NnbC9kYmwgcHJlY2lzaW9uLgkJCQkjCiMJRm9yIG5vcm1zL2Rlbm9ybXMsIHNjYWxlIHRoZSBleHBvbmVudHMgc3VjaCB0aGF0IGEgZGl2aWRlCSMKIyBpbnN0cnVjdGlvbiB3b24ndCBjYXVzZSBhbiBleGNlcHRpb24uIFVzZSB0aGUgcmVndWxhciBmZGl2IHRvCQkjCiMgY29tcHV0ZSBhIHJlc3VsdC4gQ2hlY2sgaWYgdGhlIHJlZ3VsYXIgb3BlcmFuZHMgd291bGQgaGF2ZSB0YWtlbgkjCiMgYW4gZXhjZXB0aW9uLiBJZiBzbywgcmV0dXJuIHRoZSBkZWZhdWx0IG92ZXJmbG93L3VuZGVyZmxvdyByZXN1bHQJIwojIGFuZCByZXR1cm4gdGhlIEVYT1AgaWYgZXhjZXB0aW9ucyBhcmUgZW5hYmxlZC4gRWxzZSwgc2NhbGUgdGhlCSMKIyByZXN1bHQgb3BlcmFuZCB0byB0aGUgcHJvcGVyIGV4cG9uZW50LgkJCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCglhbGlnbgkJMHgxMAp0YmxfZmRpdl91bmZsOgoJbG9uZwkJMHgzZmZmIC0gMHgwMDAwCQkjIGV4dF91bmZsCglsb25nCQkweDNmZmYgLSAweDNmODEJCSMgc2dsX3VuZmwKCWxvbmcJCTB4M2ZmZiAtIDB4M2MwMQkJIyBkYmxfdW5mbAoKdGJsX2ZkaXZfb3ZmbDoKCWxvbmcJCTB4M2ZmZiAtIDB4N2ZmZQkJIyBleHQgb3ZlcmZsb3cgZXhwb25lbnQKCWxvbmcJCTB4M2ZmZiAtIDB4NDA3ZQkJIyBzZ2wgb3ZlcmZsb3cgZXhwb25lbnQKCWxvbmcJCTB4M2ZmZiAtIDB4NDNmZQkJIyBkYmwgb3ZlcmZsb3cgZXhwb25lbnQKCglnbG9iYWwJCWZzZGl2CmZzZGl2OgoJYW5kaS5iCQkmMHgzMCwlZDAJCSMgY2xlYXIgcm5kIHByZWMKCW9yaS5iCQkmc19tb2RlKjB4MTAsJWQwCSMgaW5zZXJ0IHNnbCBwcmVjCglicmEuYgkJZmRpdgoKCWdsb2JhbAkJZmRkaXYKZmRkaXY6CglhbmRpLmIJCSYweDMwLCVkMAkJIyBjbGVhciBybmQgcHJlYwoJb3JpLmIJCSZkX21vZGUqMHgxMCwlZDAJIyBpbnNlcnQgZGJsIHByZWMKCglnbG9iYWwJCWZkaXYKZmRpdjoKCW1vdi5sCQklZDAsTF9TQ1IzKCVhNikJCSMgc3RvcmUgcm5kIGluZm8KCgljbHIudwkJJWQxCgltb3YuYgkJRFRBRyglYTYpLCVkMQoJbHNsLmIJCSYweDMsJWQxCglvci5iCQlTVEFHKCVhNiksJWQxCQkjIGNvbWJpbmUgc3JjIHRhZ3MKCglibmUudwkJZmRpdl9ub3Rfbm9ybQkJIyBvcHRpbWl6ZSBvbiBub24tbm9ybSBpbnB1dAoKIwojIERJVklERTogTk9STXMgYW5kIERFTk9STXMgT05MWSEKIwpmZGl2X25vcm06Cgltb3YudwkJRFNUX0VYKCVhMSksRlBfU0NSMV9FWCglYTYpCgltb3YubAkJRFNUX0hJKCVhMSksRlBfU0NSMV9ISSglYTYpCgltb3YubAkJRFNUX0xPKCVhMSksRlBfU0NSMV9MTyglYTYpCgoJbW92LncJCVNSQ19FWCglYTApLEZQX1NDUjBfRVgoJWE2KQoJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQoJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQoKCWJzci5sCQlzY2FsZV90b196ZXJvX3NyYwkjIHNjYWxlIHNyYyBleHBvbmVudAoJbW92LmwJCSVkMCwtKCVzcCkJCSMgc2F2ZSBzY2FsZSBmYWN0b3IgMQoKCWJzci5sCQlzY2FsZV90b196ZXJvX2RzdAkjIHNjYWxlIGRzdCBleHBvbmVudAoKCW5lZy5sCQkoJXNwKQkJCSMgU0NBTEUgRkFDVE9SID0gc2NhbGUxIC0gc2NhbGUyCglhZGQubAkJJWQwLCglc3ApCgoJbW92LncJCTIrTF9TQ1IzKCVhNiksJWQxCSMgZmV0Y2ggcHJlY2lzaW9uCglsc3IuYgkJJjB4NiwlZDEJCSMgc2hpZnQgdG8gbG8gYml0cwoJbW92LmwJCSglc3ApKywlZDAJCSMgbG9hZCBTLkYuCgljbXAubAkJJWQwLCh0YmxfZmRpdl9vdmZsLmIsJXBjLCVkMS53KjQpICMgd2lsbCByZXN1bHQgb3ZlcmZsb3c/CglibGUudwkJZmRpdl9tYXlfb3ZmbAkJIyByZXN1bHQgd2lsbCBvdmVyZmxvdwoKCWNtcC5sCQklZDAsKHRibF9mZGl2X3VuZmwudywlcGMsJWQxLncqNCkgIyB3aWxsIHJlc3VsdCB1bmRlcmZsb3c/CgliZXEudwkJZmRpdl9tYXlfdW5mbAkJIyBtYXliZQoJYmd0LncJCWZkaXZfdW5mbAkJIyB5ZXM7IGdvIGhhbmRsZSB1bmRlcmZsb3cKCmZkaXZfbm9ybWFsOgoJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3AKCglmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2F2ZSBGUENSCglmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgoKCWZkaXYueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBwZXJmb3JtIGRpdmlkZQoKCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgRlBTUgoJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKCglvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KCmZkaXZfbm9ybWFsX2V4aXQ6CglmbW92bS54CQkmMHg4MCxGUF9TQ1IwKCVhNikJIyBzdG9yZSByZXN1bHQgb24gc3RhY2sKCW1vdi5sCQklZDIsLSglc3ApCQkjIHN0b3JlIGQyCgltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGxvYWQge3NnbixleHB9Cgltb3YubAkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgoJYW5kaS53CQkmMHg4MDAwLCVkMgkJIyBrZWVwIG9sZCBzaWduCglzdWIubAkJJWQwLCVkMQkJCSMgYWRkIHNjYWxlIGZhY3RvcgoJb3IudwkJJWQyLCVkMQkJCSMgY29uY2F0IG9sZCBzaWduLG5ldyBleHAKCW1vdi53CQklZDEsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAoJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgoJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDgwCSMgcmV0dXJuIHJlc3VsdCBpbiBmcDAKCXJ0cwoKdGJsX2ZkaXZfb3ZmbDI6Cglsb25nCQkweDdmZmYKCWxvbmcJCTB4NDA3ZgoJbG9uZwkJMHg0M2ZmCgpmZGl2X25vX292Zmw6Cgltb3YubAkJKCVzcCkrLCVkMAkJIyByZXN0b3JlIHNjYWxlIGZhY3RvcgoJYnJhLmIJCWZkaXZfbm9ybWFsX2V4aXQKCmZkaXZfbWF5X292Zmw6Cgltb3YubAkJJWQwLC0oJXNwKQkJIyBzYXZlIHNjYWxlIGZhY3RvcgoKCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wCgoJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCglmbW92LmwJCSYweDAsJWZwc3IJCSMgc2V0IEZQU1IKCglmZGl2LngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBkaXZpZGUKCglmbW92LmwJCSVmcHNyLCVkMAoJZm1vdi5sCQkmMHgwLCVmcGNyCgoJb3IubAkJJWQwLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYLE4KCglmbW92bS54CQkmMHgwMSwtKCVzcCkJCSMgc2F2ZSByZXN1bHQgdG8gc3RhY2sKCW1vdi53CQkoJXNwKSwlZDAJCSMgZmV0Y2ggbmV3IGV4cG9uZW50CglhZGQubAkJJjB4Yywlc3AJCSMgY2xlYXIgcmVzdWx0IGZyb20gc3RhY2sKCWFuZGkubAkJJjB4N2ZmZiwlZDAJCSMgc3RyaXAgc2lnbgoJc3ViLmwJCSglc3ApLCVkMAkJIyBhZGQgc2NhbGUgZmFjdG9yCgljbXAubAkJJWQwLCh0YmxfZmRpdl9vdmZsMi5iLCVwYywlZDEudyo0KQoJYmx0LmIJCWZkaXZfbm9fb3ZmbAoJbW92LmwJCSglc3ApKywlZDAKCmZkaXZfb3ZmbF90c3Q6Cglvci5sCQkmb3ZmbF9pbnhfbWFzayxVU0VSX0ZQU1IoJWE2KSAjIHNldCBvdmZsL2FvdmZsL2FpbmV4CgoJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCglhbmRpLmIJCSYweDEzLCVkMQkJIyBpcyBPVkZMIG9yIElORVggZW5hYmxlZD8KCWJuZS5iCQlmZGl2X292ZmxfZW5hCQkjIHllcwoKZmRpdl9vdmZsX2RpczoKCWJ0c3QJCSZuZWdfYml0LEZQU1JfQ0MoJWE2KQkjIGlzIHJlc3VsdCBuZWdhdGl2ZT8KCXNuZQkJJWQxCQkJIyBzZXQgc2lnbiBwYXJhbSBhY2NvcmRpbmdseQoJbW92LmwJCUxfU0NSMyglYTYpLCVkMAkJIyBwYXNzIHByZWM6cm5kCglic3IubAkJb3ZmX3JlcwkJCSMgY2FsY3VsYXRlIGRlZmF1bHQgcmVzdWx0Cglvci5iCQklZDAsRlBTUl9DQyglYTYpCSMgc2V0IElORiBpZiBhcHBsaWNhYmxlCglmbW92bS54CQkoJWEwKSwmMHg4MAkJIyByZXR1cm4gZGVmYXVsdCByZXN1bHQgaW4gZnAwCglydHMKCmZkaXZfb3ZmbF9lbmE6Cgltb3YubAkJTF9TQ1IzKCVhNiksJWQxCglhbmRpLmIJCSYweGMwLCVkMQkJIyBpcyBwcmVjaXNpb24gZXh0ZW5kZWQ/CglibmUuYgkJZmRpdl9vdmZsX2VuYV9zZAkjIG5vLCBkbyBzZ2wgb3IgZGJsCgpmZGl2X292ZmxfZW5hX2NvbnQ6CglmbW92bS54CQkmMHg4MCxGUF9TQ1IwKCVhNikJIyBtb3ZlIHJlc3VsdCB0byBzdGFjawoKCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgZmV0Y2gge3NnbixleHB9Cgltb3YudwkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgoJc3ViLmwJCSVkMCwlZDEJCQkjIGFkZCBzY2FsZSBmYWN0b3IKCXN1YmkubAkJJjB4NjAwMCwlZDEJCSMgc3VidHJhY3QgYmlhcwoJYW5kaS53CQkmMHg3ZmZmLCVkMQkJIyBjbGVhciBzaWduIGJpdAoJYW5kaS53CQkmMHg4MDAwLCVkMgkJIyBrZWVwIG9sZCBzaWduCglvci53CQklZDIsJWQxCQkJIyBjb25jYXQgb2xkIHNpZ24sbmV3IGV4cAoJbW92LncJCSVkMSxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50Cgltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCglmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4NDAJIyByZXR1cm4gRVhPUCBpbiBmcDEKCWJyYS5iCQlmZGl2X292ZmxfZGlzCgpmZGl2X292ZmxfZW5hX3NkOgoJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3BlcmFuZAoKCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEKCWFuZGkuYgkJJjB4MzAsJWQxCQkjIGtlZXAgcm5kIG1vZGUKCWZtb3YubAkJJWQxLCVmcGNyCQkjIHNldCBGUENSCgoJZmRpdi54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIGV4ZWN1dGUgZGl2aWRlCgoJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKCWJyYS5iCQlmZGl2X292ZmxfZW5hX2NvbnQKCmZkaXZfdW5mbDoKCWJzZXQJCSZ1bmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgc2V0IHVuZmwgZXhjIGJpdAoKCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wCgoJZm1vdi5sCQkmcnpfbW9kZSoweDEwLCVmcGNyCSMgc2V0IEZQQ1IKCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCgoJZmRpdi54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIGV4ZWN1dGUgZGl2aWRlCgoJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBzdGF0dXMKCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCgoJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCgoJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCglhbmRpLmIJCSYweDBiLCVkMQkJIyBpcyBVTkZMIG9yIElORVggZW5hYmxlZD8KCWJuZS5iCQlmZGl2X3VuZmxfZW5hCQkjIHllcwoKZmRpdl91bmZsX2RpczoKCWZtb3ZtLngJCSYweDgwLEZQX1NDUjAoJWE2KQkjIHN0b3JlIG91dCByZXN1bHQKCglsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzOiByZXN1bHQgYWRkcgoJbW92LmwJCUxfU0NSMyglYTYpLCVkMQkJIyBwYXNzOiBybmQgcHJlYyxtb2RlCglic3IubAkJdW5mX3JlcwkJCSMgY2FsY3VsYXRlIGRlZmF1bHQgcmVzdWx0Cglvci5iCQklZDAsRlBTUl9DQyglYTYpCSMgJ1onIG1heSBoYXZlIGJlZW4gc2V0CglmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4ODAJIyByZXR1cm4gZGVmYXVsdCByZXN1bHQgaW4gZnAwCglydHMKCiMKIyBVTkZMIGlzIGVuYWJsZWQuCiMKZmRpdl91bmZsX2VuYToKCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg0MAkjIGxvYWQgZHN0IG9wCgoJbW92LmwJCUxfU0NSMyglYTYpLCVkMQoJYW5kaS5iCQkmMHhjMCwlZDEJCSMgaXMgcHJlY2lzaW9uIGV4dGVuZGVkPwoJYm5lLmIJCWZkaXZfdW5mbF9lbmFfc2QJIyBubywgc2dsIG9yIGRibAoKCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgoKZmRpdl91bmZsX2VuYV9jb250OgoJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKCglmZGl2LngJCUZQX1NDUjAoJWE2KSwlZnAxCSMgZXhlY3V0ZSBkaXZpZGUKCglmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgoKCWZtb3ZtLngJCSYweDQwLEZQX1NDUjAoJWE2KQkjIHNhdmUgcmVzdWx0IHRvIHN0YWNrCgltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCgltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGZldGNoIHtzZ24sZXhwfQoJbW92LmwJCSVkMSwlZDIJCQkjIG1ha2UgYSBjb3B5CglhbmRpLmwJCSYweDdmZmYsJWQxCQkjIHN0cmlwIHNpZ24KCWFuZGkudwkJJjB4ODAwMCwlZDIJCSMga2VlcCBvbGQgc2lnbgoJc3ViLmwJCSVkMCwlZDEJCQkjIGFkZCBzY2FsZSBmYWN0b2VyCglhZGRpLmwJCSYweDYwMDAsJWQxCQkjIGFkZCBiaWFzCglhbmRpLncJCSYweDdmZmYsJWQxCglvci53CQklZDIsJWQxCQkJIyBjb25jYXQgb2xkIHNpZ24sbmV3IGV4cAoJbW92LncJCSVkMSxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cAoJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgoJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDQwCSMgcmV0dXJuIEVYT1AgaW4gZnAxCglicmEudwkJZmRpdl91bmZsX2RpcwoKZmRpdl91bmZsX2VuYV9zZDoKCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEKCWFuZGkuYgkJJjB4MzAsJWQxCQkjIHVzZSBvbmx5IHJuZCBtb2RlCglmbW92LmwJCSVkMSwlZnBjcgkJIyBzZXQgRlBDUgoKCWJyYS5iCQlmZGl2X3VuZmxfZW5hX2NvbnQKCiMKIyB0aGUgZGl2aWRlIG9wZXJhdGlvbiBNQVkgdW5kZXJmbG93OgojCmZkaXZfbWF5X3VuZmw6CglmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4ODAJIyBsb2FkIGRzdCBvcAoKCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgoJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKCglmZGl2LngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBkaXZpZGUKCglmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIHN0YXR1cwoJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKCglvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KCglmYWJzLngJCSVmcDAsJWZwMQkJIyBtYWtlIGEgY29weSBvZiByZXN1bHQKCWZjbXAuYgkJJWZwMSwmMHgxCQkjIGlzIHxyZXN1bHR8ID4gMS5iPwoJZmJndC53CQlmZGl2X25vcm1hbF9leGl0CSMgbm87IG5vIHVuZGVyZmxvdyBvY2N1cnJlZAoJZmJsdC53CQlmZGl2X3VuZmwJCSMgeWVzOyB1bmRlcmZsb3cgb2NjdXJyZWQKCiMKIyB3ZSBzdGlsbCBkb24ndCBrbm93IGlmIHVuZGVyZmxvdyBvY2N1cnJlZC4gcmVzdWx0IGlzIH4gZXF1YWwgdG8gMS4gYnV0LAojIHdlIGRvbid0IGtub3cgaWYgdGhlIHJlc3VsdCB3YXMgYW4gdW5kZXJmbG93IHRoYXQgcm91bmRlZCB1cCB0byBhIDEKIyBvciBhIG5vcm1hbGl6ZWQgbnVtYmVyIHRoYXQgcm91bmRlZCBkb3duIHRvIGEgMS4gc28sIHJlZG8gdGhlIGVudGlyZQojIG9wZXJhdGlvbiB1c2luZyBSWiBhcyB0aGUgcm91bmRpbmcgbW9kZSB0byBzZWUgd2hhdCB0aGUgcHJlLXJvdW5kZWQKIyByZXN1bHQgaXMuIHRoaXMgY2FzZSBzaG91bGQgYmUgcmVsYXRpdmVseSByYXJlLgojCglmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4NDAJIyBsb2FkIGRzdCBvcCBpbnRvIGZwMQoKCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEKCWFuZGkuYgkJJjB4YzAsJWQxCQkjIGtlZXAgcm5kIHByZWMKCW9yaS5iCQkmcnpfbW9kZSoweDEwLCVkMQkjIGluc2VydCBSWgoKCWZtb3YubAkJJWQxLCVmcGNyCQkjIHNldCBGUENSCglmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgoKCWZkaXYueAkJRlBfU0NSMCglYTYpLCVmcDEJIyBleGVjdXRlIGRpdmlkZQoKCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCglmYWJzLngJCSVmcDEJCQkjIG1ha2UgYWJzb2x1dGUgdmFsdWUKCWZjbXAuYgkJJWZwMSwmMHgxCQkjIGlzIHxyZXN1bHR8IDwgMS5iPwoJZmJnZS53CQlmZGl2X25vcm1hbF9leGl0CSMgbm87IG5vIHVuZGVyZmxvdyBvY2N1cnJlZAoJYnJhLncJCWZkaXZfdW5mbAkJIyB5ZXM7IHVuZGVyZmxvdyBvY2N1cnJlZAoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIwojIERpdmlkZTogaW5wdXRzIGFyZSBub3QgYm90aCBub3JtYWxpemVkOyB3aGF0IGFyZSB0aGV5PwojCmZkaXZfbm90X25vcm06Cgltb3YudwkJKHRibF9mZGl2X29wLmIsJXBjLCVkMS53KjIpLCVkMQoJam1wCQkodGJsX2ZkaXZfb3AuYiwlcGMsJWQxLncqMSkKCglzd2JlZwkJJjQ4CnRibF9mZGl2X29wOgoJc2hvcnQJCWZkaXZfbm9ybQktIHRibF9mZGl2X29wICMgTk9STSAvIE5PUk0KCXNob3J0CQlmZGl2X2luZl9sb2FkCS0gdGJsX2ZkaXZfb3AgIyBOT1JNIC8gWkVSTwoJc2hvcnQJCWZkaXZfemVyb19sb2FkCS0gdGJsX2ZkaXZfb3AgIyBOT1JNIC8gSU5GCglzaG9ydAkJZmRpdl9yZXNfcW5hbgktIHRibF9mZGl2X29wICMgTk9STSAvIFFOQU4KCXNob3J0CQlmZGl2X25vcm0JLSB0YmxfZmRpdl9vcCAjIE5PUk0gLyBERU5PUk0KCXNob3J0CQlmZGl2X3Jlc19zbmFuCS0gdGJsX2ZkaXZfb3AgIyBOT1JNIC8gU05BTgoJc2hvcnQJCXRibF9mZGl2X29wCS0gdGJsX2ZkaXZfb3AgIwoJc2hvcnQJCXRibF9mZGl2X29wCS0gdGJsX2ZkaXZfb3AgIwoKCXNob3J0CQlmZGl2X3plcm9fbG9hZAktIHRibF9mZGl2X29wICMgWkVSTyAvIE5PUk0KCXNob3J0CQlmZGl2X3Jlc19vcGVycgktIHRibF9mZGl2X29wICMgWkVSTyAvIFpFUk8KCXNob3J0CQlmZGl2X3plcm9fbG9hZAktIHRibF9mZGl2X29wICMgWkVSTyAvIElORgoJc2hvcnQJCWZkaXZfcmVzX3FuYW4JLSB0YmxfZmRpdl9vcCAjIFpFUk8gLyBRTkFOCglzaG9ydAkJZmRpdl96ZXJvX2xvYWQJLSB0YmxfZmRpdl9vcCAjIFpFUk8gLyBERU5PUk0KCXNob3J0CQlmZGl2X3Jlc19zbmFuCS0gdGJsX2ZkaXZfb3AgIyBaRVJPIC8gU05BTgoJc2hvcnQJCXRibF9mZGl2X29wCS0gdGJsX2ZkaXZfb3AgIwoJc2hvcnQJCXRibF9mZGl2X29wCS0gdGJsX2ZkaXZfb3AgIwoKCXNob3J0CQlmZGl2X2luZl9kc3QJLSB0YmxfZmRpdl9vcCAjIElORiAvIE5PUk0KCXNob3J0CQlmZGl2X2luZl9kc3QJLSB0YmxfZmRpdl9vcCAjIElORiAvIFpFUk8KCXNob3J0CQlmZGl2X3Jlc19vcGVycgktIHRibF9mZGl2X29wICMgSU5GIC8gSU5GCglzaG9ydAkJZmRpdl9yZXNfcW5hbgktIHRibF9mZGl2X29wICMgSU5GIC8gUU5BTgoJc2hvcnQJCWZkaXZfaW5mX2RzdAktIHRibF9mZGl2X29wICMgSU5GIC8gREVOT1JNCglzaG9ydAkJZmRpdl9yZXNfc25hbgktIHRibF9mZGl2X29wICMgSU5GIC8gU05BTgoJc2hvcnQJCXRibF9mZGl2X29wCS0gdGJsX2ZkaXZfb3AgIwoJc2hvcnQJCXRibF9mZGl2X29wCS0gdGJsX2ZkaXZfb3AgIwoKCXNob3J0CQlmZGl2X3Jlc19xbmFuCS0gdGJsX2ZkaXZfb3AgIyBRTkFOIC8gTk9STQoJc2hvcnQJCWZkaXZfcmVzX3FuYW4JLSB0YmxfZmRpdl9vcCAjIFFOQU4gLyBaRVJPCglzaG9ydAkJZmRpdl9yZXNfcW5hbgktIHRibF9mZGl2X29wICMgUU5BTiAvIElORgoJc2hvcnQJCWZkaXZfcmVzX3FuYW4JLSB0YmxfZmRpdl9vcCAjIFFOQU4gLyBRTkFOCglzaG9ydAkJZmRpdl9yZXNfcW5hbgktIHRibF9mZGl2X29wICMgUU5BTiAvIERFTk9STQoJc2hvcnQJCWZkaXZfcmVzX3NuYW4JLSB0YmxfZmRpdl9vcCAjIFFOQU4gLyBTTkFOCglzaG9ydAkJdGJsX2ZkaXZfb3AJLSB0YmxfZmRpdl9vcCAjCglzaG9ydAkJdGJsX2ZkaXZfb3AJLSB0YmxfZmRpdl9vcCAjCgoJc2hvcnQJCWZkaXZfbm9ybQktIHRibF9mZGl2X29wICMgREVOT1JNIC8gTk9STQoJc2hvcnQJCWZkaXZfaW5mX2xvYWQJLSB0YmxfZmRpdl9vcCAjIERFTk9STSAvIFpFUk8KCXNob3J0CQlmZGl2X3plcm9fbG9hZAktIHRibF9mZGl2X29wICMgREVOT1JNIC8gSU5GCglzaG9ydAkJZmRpdl9yZXNfcW5hbgktIHRibF9mZGl2X29wICMgREVOT1JNIC8gUU5BTgoJc2hvcnQJCWZkaXZfbm9ybQktIHRibF9mZGl2X29wICMgREVOT1JNIC8gREVOT1JNCglzaG9ydAkJZmRpdl9yZXNfc25hbgktIHRibF9mZGl2X29wICMgREVOT1JNIC8gU05BTgoJc2hvcnQJCXRibF9mZGl2X29wCS0gdGJsX2ZkaXZfb3AgIwoJc2hvcnQJCXRibF9mZGl2X29wCS0gdGJsX2ZkaXZfb3AgIwoKCXNob3J0CQlmZGl2X3Jlc19zbmFuCS0gdGJsX2ZkaXZfb3AgIyBTTkFOIC8gTk9STQoJc2hvcnQJCWZkaXZfcmVzX3NuYW4JLSB0YmxfZmRpdl9vcCAjIFNOQU4gLyBaRVJPCglzaG9ydAkJZmRpdl9yZXNfc25hbgktIHRibF9mZGl2X29wICMgU05BTiAvIElORgoJc2hvcnQJCWZkaXZfcmVzX3NuYW4JLSB0YmxfZmRpdl9vcCAjIFNOQU4gLyBRTkFOCglzaG9ydAkJZmRpdl9yZXNfc25hbgktIHRibF9mZGl2X29wICMgU05BTiAvIERFTk9STQoJc2hvcnQJCWZkaXZfcmVzX3NuYW4JLSB0YmxfZmRpdl9vcCAjIFNOQU4gLyBTTkFOCglzaG9ydAkJdGJsX2ZkaXZfb3AJLSB0YmxfZmRpdl9vcCAjCglzaG9ydAkJdGJsX2ZkaXZfb3AJLSB0YmxfZmRpdl9vcCAjCgpmZGl2X3Jlc19xbmFuOgoJYnJhLmwJCXJlc19xbmFuCmZkaXZfcmVzX3NuYW46CglicmEubAkJcmVzX3NuYW4KZmRpdl9yZXNfb3BlcnI6CglicmEubAkJcmVzX29wZXJyCgoJZ2xvYmFsCQlmZGl2X3plcm9fbG9hZAkJIyBnbG9iYWwgZm9yIGZzZ2xkaXYKZmRpdl96ZXJvX2xvYWQ6Cgltb3YuYgkJU1JDX0VYKCVhMCksJWQwCQkjIHJlc3VsdCBzaWduIGlzIGV4Y2x1c2l2ZQoJbW92LmIJCURTVF9FWCglYTEpLCVkMQkJIyBvciBvZiBpbnB1dCBzaWducy4KCWVvci5iCQklZDAsJWQxCglicGwuYgkJZmRpdl96ZXJvX2xvYWRfcAkjIHJlc3VsdCBpcyBwb3NpdGl2ZQoJZm1vdi5zCQkmMHg4MDAwMDAwMCwlZnAwCSMgbG9hZCBhIC1aRVJPCgltb3YuYgkJJnpfYm1hc2srbmVnX2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCBaL04KCXJ0cwpmZGl2X3plcm9fbG9hZF9wOgoJZm1vdi5zCQkmMHgwMDAwMDAwMCwlZnAwCSMgbG9hZCBhICtaRVJPCgltb3YuYgkJJnpfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0IFoKCXJ0cwoKIwojIFRoZSBkZXN0aW5hdGlvbiB3YXMgSW4gUmFuZ2UgYW5kIHRoZSBzb3VyY2Ugd2FzIGEgWkVSTy4gVGhlIHJlc3VsdCwKIyB0aGVyZWZvcmUsIGlzIGFuIElORiB3LyB0aGUgcHJvcGVyIHNpZ24uCiMgU28sIGRldGVybWluZSB0aGUgc2lnbiBhbmQgcmV0dXJuIGEgbmV3IElORiAody8gdGhlIGotYml0IGNsZWFyZWQpLgojCglnbG9iYWwJCWZkaXZfaW5mX2xvYWQJCSMgZ2xvYmFsIGZvciBmc2dsZGl2CmZkaXZfaW5mX2xvYWQ6CglvcmkudwkJJmR6X21hc2srYWR6X21hc2ssMitVU0VSX0ZQU1IoJWE2KSAjIG5vOyBzZXQgRFovQURaCgltb3YuYgkJU1JDX0VYKCVhMCksJWQwCQkjIGxvYWQgYm90aCBzaWducwoJbW92LmIJCURTVF9FWCglYTEpLCVkMQoJZW9yLmIJCSVkMCwlZDEKCWJwbC5iCQlmZGl2X2luZl9sb2FkX3AJCSMgcmVzdWx0IGlzIHBvc2l0aXZlCglmbW92LnMJCSYweGZmODAwMDAwLCVmcDAJIyBtYWtlIHJlc3VsdCAtSU5GCgltb3YuYgkJJmluZl9ibWFzaytuZWdfYm1hc2ssRlBTUl9DQyglYTYpICMgc2V0IElORi9OCglydHMKZmRpdl9pbmZfbG9hZF9wOgoJZm1vdi5zCQkmMHg3ZjgwMDAwMCwlZnAwCSMgbWFrZSByZXN1bHQgK0lORgoJbW92LmIJCSZpbmZfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0IElORgoJcnRzCgojCiMgVGhlIGRlc3RpbmF0aW9uIHdhcyBhbiBJTkYgdy8gYW4gSW4gUmFuZ2Ugb3IgWkVSTyBzb3VyY2UsIHRoZSByZXN1bHQgaXMKIyBhbiBJTkYgdy8gdGhlIHByb3BlciBzaWduLgojIFRoZSA2ODg4MS84ODIgcmV0dXJucyB0aGUgZGVzdGluYXRpb24gSU5GIHcvIHRoZSBuZXcgc2lnbihpZiB0aGUgai1iaXQgb2YgdGhlCiMgZHN0IElORiBpcyBzZXQsIHRoZW4gdGhlbiBqLWJpdCBvZiB0aGUgcmVzdWx0IElORiBpcyBhbHNvIHNldCkuCiMKCWdsb2JhbAkJZmRpdl9pbmZfZHN0CQkjIGdsb2JhbCBmb3IgZnNnbGRpdgpmZGl2X2luZl9kc3Q6Cgltb3YuYgkJRFNUX0VYKCVhMSksJWQwCQkjIGxvYWQgYm90aCBzaWducwoJbW92LmIJCVNSQ19FWCglYTApLCVkMQoJZW9yLmIJCSVkMCwlZDEKCWJwbC5iCQlmZGl2X2luZl9kc3RfcAkJIyByZXN1bHQgaXMgcG9zaXRpdmUKCglmbW92bS54CQlEU1QoJWExKSwmMHg4MAkJIyByZXR1cm4gcmVzdWx0IGluIGZwMAoJZmFicy54CQklZnAwCQkJIyBjbGVhciBzaWduIGJpdAoJZm5lZy54CQklZnAwCQkJIyBzZXQgc2lnbiBiaXQKCW1vdi5iCQkmaW5mX2JtYXNrK25lZ19ibWFzayxGUFNSX0NDKCVhNikgIyBzZXQgSU5GL05FRwoJcnRzCgpmZGl2X2luZl9kc3RfcDoKCWZtb3ZtLngJCURTVCglYTEpLCYweDgwCQkjIHJldHVybiByZXN1bHQgaW4gZnAwCglmYWJzLngJCSVmcDAJCQkjIHJldHVybiBwb3NpdGl2ZSBJTkYKCW1vdi5iCQkmaW5mX2JtYXNrLEZQU1JfQ0MoJWE2KSAjIHNldCBJTkYKCXJ0cwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJZm5lZygpOiBlbXVsYXRlcyB0aGUgZm5lZyBpbnN0cnVjdGlvbgkJCQkjCiMJZnNuZWcoKTogZW11bGF0ZXMgdGhlIGZzbmVnIGluc3RydWN0aW9uCQkJCSMKIwlmZG5lZygpOiBlbXVsYXRlcyB0aGUgZmRuZWcgaW5zdHJ1Y3Rpb24JCQkJIwojCQkJCQkJCQkJIwojIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJbm9ybSgpIC0gbm9ybWFsaXplIGEgZGVub3JtIHRvIHByb3ZpZGUgRVhPUAkJCSMKIwlzY2FsZV90b196ZXJvX3NyYygpIC0gc2NhbGUgc2dsL2RibCBzb3VyY2UgZXhwb25lbnQJCSMKIwlvdmZfcmVzKCkgLSByZXR1cm4gZGVmYXVsdCBvdmVyZmxvdyByZXN1bHQJCQkjCiMJdW5mX3JlcygpIC0gcmV0dXJuIGRlZmF1bHQgdW5kZXJmbG93IHJlc3VsdAkJCSMKIwlyZXNfcW5hbl8xb3AoKSAtIHJldHVybiBRTkFOIHJlc3VsdAkJCQkjCiMJcmVzX3NuYW5fMW9wKCkgLSByZXR1cm4gU05BTiByZXN1bHQJCQkJIwojCQkJCQkJCQkJIwojIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBzb3VyY2Ugb3BlcmFuZAkJIwojCWQwID0gcm5kIHByZWMsbW9kZQkJCQkJCSMKIwkJCQkJCQkJCSMKIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWZwMCA9IHJlc3VsdAkJCQkJCQkjCiMJZnAxID0gRVhPUCAoaWYgZXhjZXB0aW9uIG9jY3VycmVkKQkJCQkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlIYW5kbGUgTkFOcywgemVyb2VzLCBhbmQgaW5maW5pdGllcyBhcyBzcGVjaWFsIGNhc2VzLiBTZXBhcmF0ZQkjCiMgbm9ybXMvZGVub3JtcyBpbnRvIGV4dC9zZ2wvZGJsIHByZWNpc2lvbnMuIEV4dGVuZGVkIHByZWNpc2lvbiBjYW4gYmUJIwojIGVtdWxhdGVkIGJ5IHNpbXBseSBzZXR0aW5nIHNpZ24gYml0LiBTZ2wvZGJsIG9wZXJhbmRzIG11c3QgYmUgc2NhbGVkCSMKIyBhbmQgYW4gYWN0dWFsIGZuZWcgcGVyZm9ybWVkIHRvIHNlZSBpZiBvdmVyZmxvdy91bmRlcmZsb3cgd291bGQgaGF2ZQkjCiMgb2NjdXJyZWQuIElmIHNvLCByZXR1cm4gZGVmYXVsdCB1bmRlcmZsb3cvb3ZlcmZsb3cgcmVzdWx0LiBFbHNlLAkjCiMgc2NhbGUgdGhlIHJlc3VsdCBleHBvbmVudCBhbmQgcmV0dXJuIHJlc3VsdC4gRlBTUiBnZXRzIHNldCBiYXNlZCBvbgkjCiMgdGhlIHJlc3VsdCB2YWx1ZS4JCQkJCQkJIwojCQkJCQkJCQkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoJZ2xvYmFsCQlmc25lZwpmc25lZzoKCWFuZGkuYgkJJjB4MzAsJWQwCQkjIGNsZWFyIHJuZCBwcmVjCglvcmkuYgkJJnNfbW9kZSoweDEwLCVkMAkjIGluc2VydCBzZ2wgcHJlY2lzaW9uCglicmEuYgkJZm5lZwoKCWdsb2JhbAkJZmRuZWcKZmRuZWc6CglhbmRpLmIJCSYweDMwLCVkMAkJIyBjbGVhciBybmQgcHJlYwoJb3JpLmIJCSZkX21vZGUqMHgxMCwlZDAJIyBpbnNlcnQgZGJsIHByZWMKCglnbG9iYWwJCWZuZWcKZm5lZzoKCW1vdi5sCQklZDAsTF9TQ1IzKCVhNikJCSMgc3RvcmUgcm5kIGluZm8KCW1vdi5iCQlTVEFHKCVhNiksJWQxCglibmUudwkJZm5lZ19ub3Rfbm9ybQkJIyBvcHRpbWl6ZSBvbiBub24tbm9ybSBpbnB1dAoKIwojIE5FR0FURSBTSUdOIDogbm9ybXMgYW5kIGRlbm9ybXMgT05MWSEKIwpmbmVnX25vcm06CglhbmRpLmIJCSYweGMwLCVkMAkJIyBpcyBwcmVjaXNpb24gZXh0ZW5kZWQ/CglibmUudwkJZm5lZ19ub3RfZXh0CQkjIG5vOyBnbyBoYW5kbGUgc2dsIG9yIGRibAoKIwojIHByZWNpc2lvbiBzZWxlY3RlZCBpcyBleHRlbmRlZC4gc28uLi53ZSBjYW4gbm90IGdldCBhbiB1bmRlcmZsb3cKIyBvciBvdmVyZmxvdyBiZWNhdXNlIG9mIHJvdW5kaW5nIHRvIHRoZSBjb3JyZWN0IHByZWNpc2lvbi4gc28uLi4KIyBza2lwIHRoZSBzY2FsaW5nIGFuZCB1bnNjYWxpbmcuLi4KIwoJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQoJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQoJbW92LncJCVNSQ19FWCglYTApLCVkMAoJZW9yaS53CQkmMHg4MDAwLCVkMAkJIyBuZWdhdGUgc2lnbgoJYnBsLmIJCWZuZWdfbm9ybV9sb2FkCQkjIHNpZ24gaXMgcG9zaXRpdmUKCW1vdi5iCQkmbmVnX2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCAnTicgY2NvZGUgYml0CmZuZWdfbm9ybV9sb2FkOgoJbW92LncJCSVkMCxGUF9TQ1IwX0VYKCVhNikKCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg4MAkjIHJldHVybiByZXN1bHQgaW4gZnAwCglydHMKCiMKIyBmb3IgYW4gZXh0ZW5kZWQgcHJlY2lzaW9uIERFTk9STSwgdGhlIFVORkwgZXhjZXB0aW9uIGJpdCBpcyBzZXQKIyB0aGUgYWNjcnVlZCBiaXQgaXMgTk9UIHNldCBpbiB0aGlzIGluc3RhbmNlKG5vIGluZXhhY3RuZXNzISkKIwpmbmVnX2Rlbm9ybToKCWFuZGkuYgkJJjB4YzAsJWQwCQkjIGlzIHByZWNpc2lvbiBleHRlbmRlZD8KCWJuZS5iCQlmbmVnX25vdF9leHQJCSMgbm87IGdvIGhhbmRsZSBzZ2wgb3IgZGJsCgoJYnNldAkJJnVuZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgIyBzZXQgdW5mbCBleGMgYml0CgoJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQoJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQoJbW92LncJCVNSQ19FWCglYTApLCVkMAoJZW9yaS53CQkmMHg4MDAwLCVkMAkJIyBuZWdhdGUgc2lnbgoJYnBsLmIJCWZuZWdfZGVub3JtX2RvbmUJIyBubwoJbW92LmIJCSZuZWdfYm1hc2ssRlBTUl9DQyglYTYpCSMgeWVzLCBzZXQgJ04nIGNjb2RlIGJpdApmbmVnX2Rlbm9ybV9kb25lOgoJbW92LncJCSVkMCxGUF9TQ1IwX0VYKCVhNikKCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg4MAkjIHJldHVybiBkZWZhdWx0IHJlc3VsdCBpbiBmcDAKCglidHN0CQkmdW5mbF9iaXQsRlBDUl9FTkFCTEUoJWE2KSAjIGlzIFVORkwgZW5hYmxlZD8KCWJuZS5iCQlmbmVnX2V4dF91bmZsX2VuYQkjIHllcwoJcnRzCgojCiMgdGhlIGlucHV0IGlzIGFuIGV4dGVuZGVkIERFTk9STSBhbmQgdW5kZXJmbG93IGlzIGVuYWJsZWQgaW4gdGhlIEZQQ1IuCiMgbm9ybWFsaXplIHRoZSBtYW50aXNzYSBhbmQgYWRkIHRoZSBiaWFzIG9mIDB4NjAwMCB0byB0aGUgcmVzdWx0aW5nIG5lZ2F0aXZlCiMgZXhwb25lbnQgYW5kIGluc2VydCBiYWNrIGludG8gdGhlIG9wZXJhbmQuCiMKZm5lZ19leHRfdW5mbF9lbmE6CglsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzOiBwdHIgdG8gb3BlcmFuZAoJYnNyLmwJCW5vcm0JCQkjIG5vcm1hbGl6ZSByZXN1bHQKCW5lZy53CQklZDAJCQkjIG5ldyBleHBvbmVudCA9IC0oc2hmdCB2YWwpCglhZGRpLncJCSYweDYwMDAsJWQwCQkjIGFkZCBuZXcgYmlhcyB0byBleHBvbmVudAoJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBmZXRjaCBvbGQgc2lnbixleHAKCWFuZGkudwkJJjB4ODAwMCwlZDEJCSMga2VlcCBvbGQgc2lnbgoJYW5kaS53CQkmMHg3ZmZmLCVkMAkJIyBjbGVhciBzaWduIHBvc2l0aW9uCglvci53CQklZDEsJWQwCQkJIyBjb25jYXQgb2xkIHNpZ24sIG5ldyBleHBvbmVudAoJbW92LncJCSVkMCxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50CglmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4NDAJIyByZXR1cm4gRVhPUCBpbiBmcDEKCXJ0cwoKIwojIG9wZXJhbmQgaXMgZWl0aGVyIHNpbmdsZSBvciBkb3VibGUKIwpmbmVnX25vdF9leHQ6CgljbXBpLmIJCSVkMCwmc19tb2RlKjB4MTAJIyBzZXBhcmF0ZSBzZ2wvZGJsIHByZWMKCWJuZS5iCQlmbmVnX2RibAoKIwojIG9wZXJhbmQgaXMgdG8gYmUgcm91bmRlZCB0byBzaW5nbGUgcHJlY2lzaW9uCiMKZm5lZ19zZ2w6Cgltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCgltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCgltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCglic3IubAkJc2NhbGVfdG9femVyb19zcmMJIyBjYWxjdWxhdGUgc2NhbGUgZmFjdG9yCgoJY21waS5sCQklZDAsJjB4M2ZmZi0weDNmODAJIyB3aWxsIG1vdmUgaW4gdW5kZXJmbG93PwoJYmdlLncJCWZuZWdfc2RfdW5mbAkJIyB5ZXM7IGdvIGhhbmRsZSB1bmRlcmZsb3cKCWNtcGkubAkJJWQwLCYweDNmZmYtMHg0MDdlCSMgd2lsbCBtb3ZlIGluIG92ZXJmbG93PwoJYmVxLncJCWZuZWdfc2RfbWF5X292ZmwJIyBtYXliZTsgZ28gY2hlY2sKCWJsdC53CQlmbmVnX3NkX292ZmwJCSMgeWVzOyBnbyBoYW5kbGUgb3ZlcmZsb3cKCiMKIyBvcGVyYW5kIHdpbGwgTk9UIG92ZXJmbG93IG9yIHVuZGVyZmxvdyB3aGVuIG1vdmVkIGluIHRvIHRoZSBmcCByZWcgZmlsZQojCmZuZWdfc2Rfbm9ybWFsOgoJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgoKCWZuZWcueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBwZXJmb3JtIG5lZ2F0aW9uCgoJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBGUFNSCglmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgoKCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgoKZm5lZ19zZF9ub3JtYWxfZXhpdDoKCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKCWZtb3ZtLngJCSYweDgwLEZQX1NDUjAoJWE2KQkjIHN0b3JlIG91dCByZXN1bHQKCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgbG9hZCBzZ24sZXhwCgltb3YudwkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgoJc3ViLmwJCSVkMCwlZDEJCQkjIGFkZCBzY2FsZSBmYWN0b3IKCWFuZGkudwkJJjB4ODAwMCwlZDIJCSMga2VlcCBvbGQgc2lnbgoJb3IudwkJJWQxLCVkMgkJCSMgY29uY2F0IG9sZCBzaWduLG5ldyBleHAKCW1vdi53CQklZDIsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAoJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgoJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDgwCSMgcmV0dXJuIHJlc3VsdCBpbiBmcDAKCXJ0cwoKIwojIG9wZXJhbmQgaXMgdG8gYmUgcm91bmRlZCB0byBkb3VibGUgcHJlY2lzaW9uCiMKZm5lZ19kYmw6Cgltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCgltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCgltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCglic3IubAkJc2NhbGVfdG9femVyb19zcmMJIyBjYWxjdWxhdGUgc2NhbGUgZmFjdG9yCgoJY21waS5sCQklZDAsJjB4M2ZmZi0weDNjMDAJIyB3aWxsIG1vdmUgaW4gdW5kZXJmbG93PwoJYmdlLmIJCWZuZWdfc2RfdW5mbAkJIyB5ZXM7IGdvIGhhbmRsZSB1bmRlcmZsb3cKCWNtcGkubAkJJWQwLCYweDNmZmYtMHg0M2ZlCSMgd2lsbCBtb3ZlIGluIG92ZXJmbG93PwoJYmVxLncJCWZuZWdfc2RfbWF5X292ZmwJIyBtYXliZTsgZ28gY2hlY2sKCWJsdC53CQlmbmVnX3NkX292ZmwJCSMgeWVzOyBnbyBoYW5kbGUgb3ZlcmZsb3cKCWJyYS53CQlmbmVnX3NkX25vcm1hbAkJIyBubzsgaG8gaGFuZGxlIG5vcm1hbGl6ZWQgb3AKCiMKIyBvcGVyYW5kIFdJTEwgdW5kZXJmbG93IHdoZW4gbW92ZWQgaW4gdG8gdGhlIGZwIHJlZ2lzdGVyIGZpbGUKIwpmbmVnX3NkX3VuZmw6Cglic2V0CQkmdW5mbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIHNldCB1bmZsIGV4YyBiaXQKCgllb3JpLmIJCSYweDgwLEZQX1NDUjBfRVgoJWE2KQkjIG5lZ2F0ZSBzaWduCglicGwuYgkJZm5lZ19zZF91bmZsX3RzdAoJYnNldAkJJm5lZ19iaXQsRlBTUl9DQyglYTYpCSMgc2V0ICdOJyBjY29kZSBiaXQKCiMgaWYgdW5kZXJmbG93IG9yIGluZXhhY3QgaXMgZW5hYmxlZCwgZ28gY2FsY3VsYXRlIEVYT1AgZmlyc3QuCmZuZWdfc2RfdW5mbF90c3Q6Cgltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDEKCWFuZGkuYgkJJjB4MGIsJWQxCQkjIGlzIFVORkwgb3IgSU5FWCBlbmFibGVkPwoJYm5lLmIJCWZuZWdfc2RfdW5mbF9lbmEJIyB5ZXMKCmZuZWdfc2RfdW5mbF9kaXM6CglsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzOiByZXN1bHQgYWRkcgoJbW92LmwJCUxfU0NSMyglYTYpLCVkMQkJIyBwYXNzOiBybmQgcHJlYyxtb2RlCglic3IubAkJdW5mX3JlcwkJCSMgY2FsY3VsYXRlIGRlZmF1bHQgcmVzdWx0Cglvci5iCQklZDAsRlBTUl9DQyglYTYpCSMgdW5mX3JlcyBtYXkgaGF2ZSBzZXQgJ1onCglmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4ODAJIyByZXR1cm4gZGVmYXVsdCByZXN1bHQgaW4gZnAwCglydHMKCiMKIyBvcGVyYW5kIHdpbGwgdW5kZXJmbG93IEFORCB1bmRlcmZsb3cgaXMgZW5hYmxlZC4KIyB0aGVyZWZvcmUsIHdlIG11c3QgcmV0dXJuIHRoZSByZXN1bHQgcm91bmRlZCB0byBleHRlbmRlZCBwcmVjaXNpb24uCiMKZm5lZ19zZF91bmZsX2VuYToKCW1vdi5sCQlGUF9TQ1IwX0hJKCVhNiksRlBfU0NSMV9ISSglYTYpCgltb3YubAkJRlBfU0NSMF9MTyglYTYpLEZQX1NDUjFfTE8oJWE2KQoJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBsb2FkIGN1cnJlbnQgZXhwb25lbnQKCgltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCgltb3YubAkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgoJYW5kaS53CQkmMHg4MDAwLCVkMgkJIyBrZWVwIG9sZCBzaWduCglzdWIubAkJJWQwLCVkMQkJCSMgc3VidHJhY3Qgc2NhbGUgZmFjdG9yCglhZGRpLmwJCSYweDYwMDAsJWQxCQkjIGFkZCBuZXcgYmlhcwoJYW5kaS53CQkmMHg3ZmZmLCVkMQoJb3IudwkJJWQyLCVkMQkJCSMgY29uY2F0IG5ldyBzaWduLG5ldyBleHAKCW1vdi53CQklZDEsRlBfU0NSMV9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHAKCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg0MAkjIHJldHVybiBFWE9QIGluIGZwMQoJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgoJYnJhLmIJCWZuZWdfc2RfdW5mbF9kaXMKCiMKIyBvcGVyYW5kIFdJTEwgb3ZlcmZsb3cuCiMKZm5lZ19zZF9vdmZsOgoJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgoKCWZuZWcueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBwZXJmb3JtIG5lZ2F0aW9uCgoJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgRlBTUgoKCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgoKZm5lZ19zZF9vdmZsX3RzdDoKCW9yLmwJCSZvdmZsX2lueF9tYXNrLFVTRVJfRlBTUiglYTYpICMgc2V0IG92ZmwvYW92ZmwvYWluZXgKCgltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDEKCWFuZGkuYgkJJjB4MTMsJWQxCQkjIGlzIE9WRkwgb3IgSU5FWCBlbmFibGVkPwoJYm5lLmIJCWZuZWdfc2Rfb3ZmbF9lbmEJIyB5ZXMKCiMKIyBPVkZMIGlzIG5vdCBlbmFibGVkOyB0aGVyZWZvcmUsIHdlIG11c3QgY3JlYXRlIHRoZSBkZWZhdWx0IHJlc3VsdCBieQojIGNhbGxpbmcgb3ZmX3JlcygpLgojCmZuZWdfc2Rfb3ZmbF9kaXM6CglidHN0CQkmbmVnX2JpdCxGUFNSX0NDKCVhNikJIyBpcyByZXN1bHQgbmVnYXRpdmU/CglzbmUJCSVkMQkJCSMgc2V0IHNpZ24gcGFyYW0gYWNjb3JkaW5nbHkKCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDAJCSMgcGFzczogcHJlYyxtb2RlCglic3IubAkJb3ZmX3JlcwkJCSMgY2FsY3VsYXRlIGRlZmF1bHQgcmVzdWx0Cglvci5iCQklZDAsRlBTUl9DQyglYTYpCSMgc2V0IElORixOIGlmIGFwcGxpY2FibGUKCWZtb3ZtLngJCSglYTApLCYweDgwCQkjIHJldHVybiBkZWZhdWx0IHJlc3VsdCBpbiBmcDAKCXJ0cwoKIwojIE9WRkwgaXMgZW5hYmxlZC4KIyB0aGUgSU5FWDIgYml0IGhhcyBhbHJlYWR5IGJlZW4gdXBkYXRlZCBieSB0aGUgcm91bmQgdG8gdGhlIGNvcnJlY3QgcHJlY2lzaW9uLgojIG5vdywgcm91bmQgdG8gZXh0ZW5kZWQoYW5kIGRvbid0IGFsdGVyIHRoZSBGUFNSKS4KIwpmbmVnX3NkX292ZmxfZW5hOgoJbW92LmwJCSVkMiwtKCVzcCkJCSMgc2F2ZSBkMgoJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBmZXRjaCB7c2duLGV4cH0KCW1vdi5sCQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQoJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCglhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KCXN1Yi5sCQklZDAsJWQxCQkJIyBhZGQgc2NhbGUgZmFjdG9yCglzdWJpLmwJCSYweDYwMDAsJWQxCQkjIHN1YnRyYWN0IGJpYXMKCWFuZGkudwkJJjB4N2ZmZiwlZDEKCW9yLncJCSVkMiwlZDEJCQkjIGNvbmNhdCBzaWduLGV4cAoJbW92LncJCSVkMSxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50CglmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4NDAJIyByZXR1cm4gRVhPUCBpbiBmcDEKCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKCWJyYS5iCQlmbmVnX3NkX292ZmxfZGlzCgojCiMgdGhlIG1vdmUgaW4gTUFZIHVuZGVyZmxvdy4gc28uLi4KIwpmbmVnX3NkX21heV9vdmZsOgoJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgoKCWZuZWcueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBwZXJmb3JtIG5lZ2F0aW9uCgoJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBzdGF0dXMKCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCgoJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCgoJZmFicy54CQklZnAwLCVmcDEJCSMgbWFrZSBhIGNvcHkgb2YgcmVzdWx0CglmY21wLmIJCSVmcDEsJjB4MgkJIyBpcyB8cmVzdWx0fCA+PSAyLmI/CglmYmdlLncJCWZuZWdfc2Rfb3ZmbF90c3QJIyB5ZXM7IG92ZXJmbG93IGhhcyBvY2N1cnJlZAoKIyBubywgaXQgZGlkbid0IG92ZXJmbG93OyB3ZSBoYXZlIGNvcnJlY3QgcmVzdWx0CglicmEudwkJZm5lZ19zZF9ub3JtYWxfZXhpdAoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMKIyBpbnB1dCBpcyBub3Qgbm9ybWFsaXplZDsgd2hhdCBpcyBpdD8KIwpmbmVnX25vdF9ub3JtOgoJY21waS5iCQklZDEsJkRFTk9STQkJIyB3ZWVkIG91dCBERU5PUk0KCWJlcS53CQlmbmVnX2Rlbm9ybQoJY21waS5iCQklZDEsJlNOQU4JCSMgd2VlZCBvdXQgU05BTgoJYmVxLmwJCXJlc19zbmFuXzFvcAoJY21waS5iCQklZDEsJlFOQU4JCSMgd2VlZCBvdXQgUU5BTgoJYmVxLmwJCXJlc19xbmFuXzFvcAoKIwojIGRvIHRoZSBmbmVnOyBhdCB0aGlzIHBvaW50LCBvbmx5IHBvc3NpYmxlIG9wcyBhcmUgWkVSTyBhbmQgSU5GLgojIHVzZSBmbmVnIHRvIGRldGVybWluZSBjY29kZXMuCiMgcHJlYzptb2RlIHNob3VsZCBiZSB6ZXJvIGF0IHRoaXMgcG9pbnQgYnV0IGl0IHdvbid0IGFmZmVjdCBhbnN3ZXIgYW55d2F5cy4KIwoJZm5lZy54CQlTUkNfRVgoJWEwKSwlZnAwCSMgZG8gZm5lZwoJZm1vdi5sCQklZnBzciwlZDAKCXJvbC5sCQkmMHg4LCVkMAkJIyBwdXQgY2NvZGVzIGluIGxvIGJ5dGUKCW1vdi5iCQklZDAsRlBTUl9DQyglYTYpCSMgaW5zZXJ0IGNvcnJlY3QgY2NvZGVzCglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWZ0c3QoKTogZW11bGF0ZXMgdGhlIGZ0ZXN0IGluc3RydWN0aW9uCQkJCSMKIwkJCQkJCQkJCSMKIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCXJlc3tzLHF9bmFuXzFvcCgpIC0gc2V0IE5BTiByZXN1bHQgZm9yIG1vbmFkaWMgaW5zdHJ1Y3Rpb24JIwojCQkJCQkJCQkJIwojIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBzb3VyY2Ugb3BlcmFuZAkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJbm9uZQkJCQkJCQkJIwojCQkJCQkJCQkJIwojIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJQ2hlY2sgdGhlIHNvdXJjZSBvcGVyYW5kIHRhZyAoU1RBRykgYW5kIHNldCB0aGUgRlBDUiBhY2NvcmRpbmcJIwojIHRvIHRoZSBvcGVyYW5kIHR5cGUgYW5kIHNpZ24uCQkJCQkJIwojCQkJCQkJCQkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoJZ2xvYmFsCQlmdHN0CmZ0c3Q6Cgltb3YuYgkJU1RBRyglYTYpLCVkMQoJYm5lLmIJCWZ0c3Rfbm90X25vcm0JCSMgb3B0aW1pemUgb24gbm9uLW5vcm0gaW5wdXQKCiMKIyBOb3JtOgojCmZ0c3Rfbm9ybToKCXRzdC5iCQlTUkNfRVgoJWEwKQkJIyBpcyBvcGVyYW5kIG5lZ2F0aXZlPwoJYm1pLmIJCWZ0c3Rfbm9ybV9tCQkjIHllcwoJcnRzCmZ0c3Rfbm9ybV9tOgoJbW92LmIJCSZuZWdfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0ICdOJyBjY29kZSBiaXQKCXJ0cwoKIwojIGlucHV0IGlzIG5vdCBub3JtYWxpemVkOyB3aGF0IGlzIGl0PwojCmZ0c3Rfbm90X25vcm06CgljbXBpLmIJCSVkMSwmWkVSTwkJIyB3ZWVkIG91dCBaRVJPCgliZXEuYgkJZnRzdF96ZXJvCgljbXBpLmIJCSVkMSwmSU5GCQkjIHdlZWQgb3V0IElORgoJYmVxLmIJCWZ0c3RfaW5mCgljbXBpLmIJCSVkMSwmU05BTgkJIyB3ZWVkIG91dCBTTkFOCgliZXEubAkJcmVzX3NuYW5fMW9wCgljbXBpLmIJCSVkMSwmUU5BTgkJIyB3ZWVkIG91dCBRTkFOCgliZXEubAkJcmVzX3FuYW5fMW9wCgojCiMgRGVub3JtOgojCmZ0c3RfZGVub3JtOgoJdHN0LmIJCVNSQ19FWCglYTApCQkjIGlzIG9wZXJhbmQgbmVnYXRpdmU/CglibWkuYgkJZnRzdF9kZW5vcm1fbQkJIyB5ZXMKCXJ0cwpmdHN0X2Rlbm9ybV9tOgoJbW92LmIJCSZuZWdfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0ICdOJyBjY29kZSBiaXQKCXJ0cwoKIwojIEluZmluaXR5OgojCmZ0c3RfaW5mOgoJdHN0LmIJCVNSQ19FWCglYTApCQkjIGlzIG9wZXJhbmQgbmVnYXRpdmU/CglibWkuYgkJZnRzdF9pbmZfbQkJIyB5ZXMKZnRzdF9pbmZfcDoKCW1vdi5iCQkmaW5mX2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCAnSScgY2NvZGUgYml0CglydHMKZnRzdF9pbmZfbToKCW1vdi5iCQkmaW5mX2JtYXNrK25lZ19ibWFzayxGUFNSX0NDKCVhNikgIyBzZXQgJ0knLCdOJyBjY29kZSBiaXRzCglydHMKCiMKIyBaZXJvOgojCmZ0c3RfemVybzoKCXRzdC5iCQlTUkNfRVgoJWEwKQkJIyBpcyBvcGVyYW5kIG5lZ2F0aXZlPwoJYm1pLmIJCWZ0c3RfemVyb19tCQkjIHllcwpmdHN0X3plcm9fcDoKCW1vdi5iCQkmel9ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgJ04nIGNjb2RlIGJpdAoJcnRzCmZ0c3RfemVyb19tOgoJbW92LmIJCSZ6X2JtYXNrK25lZ19ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgJ1onLCdOJyBjY29kZSBiaXRzCglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWZpbnQoKTogZW11bGF0ZXMgdGhlIGZpbnQgaW5zdHJ1Y3Rpb24JCQkJIwojCQkJCQkJCQkJIwojIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJcmVzX3tzLHF9bmFuXzFvcCgpIC0gc2V0IE5BTiByZXN1bHQgZm9yIG1vbmFkaWMgb3BlcmF0aW9uCSMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gc291cmNlIG9wZXJhbmQJCSMKIwlkMCA9IHJvdW5kIHByZWNpc2lvbi9tb2RlCQkJCQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlmcDAgPSByZXN1bHQJCQkJCQkJIwojCQkJCQkJCQkJIwojIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJU2VwYXJhdGUgYWNjb3JkaW5nIHRvIG9wZXJhbmQgdHlwZS4gVW5ub3JtcyBkb24ndCBwYXNzIHRocm91Z2gJIwojIGhlcmUuIEZvciBub3JtcywgbG9hZCB0aGUgcm91bmRpbmcgbW9kZS9wcmVjLCBleGVjdXRlIGEgImZpbnQiLCB0aGVuCSMKIyBzdG9yZSB0aGUgcmVzdWx0aW5nIEZQU1IgYml0cy4JCQkJCSMKIwlGb3IgZGVub3JtcywgZm9yY2UgdGhlIGotYml0IHRvIGEgb25lIGFuZCBkbyB0aGUgc2FtZSBhcyBmb3IJIwojIG5vcm1zLiBEZW5vcm1zIGFyZSBzbyBsb3cgdGhhdCB0aGUgYW5zd2VyIHdpbGwgZWl0aGVyIGJlIGEgemVybyBvciBhCSMKIyBvbmUuCQkJCQkJCQkJIwojCUZvciB6ZXJvZXMvaW5mcy9OQU5zLCByZXR1cm4gdGhlIHNhbWUgd2hpbGUgc2V0dGluZyB0aGUgRlBTUgkjCiMgYXMgYXBwcm9wcmlhdGUuCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCWdsb2JhbAkJZmludApmaW50OgoJbW92LmIJCVNUQUcoJWE2KSwlZDEKCWJuZS5iCQlmaW50X25vdF9ub3JtCQkjIG9wdGltaXplIG9uIG5vbi1ub3JtIGlucHV0CgojCiMgTm9ybToKIwpmaW50X25vcm06CglhbmRpLmIJCSYweDMwLCVkMAkJIyBzZXQgcHJlYyA9IGV4dAoKCWZtb3YubAkJJWQwLCVmcGNyCQkjIHNldCBGUENSCglmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgoKCWZpbnQueAkJU1JDKCVhMCksJWZwMAkJIyBleGVjdXRlIGZpbnQKCglmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgoJZm1vdi5sCQklZnBzciwlZDAJCSMgc2F2ZSBGUFNSCglvci5sCQklZDAsVVNFUl9GUFNSKCVhNikJIyBzZXQgZXhjZXB0aW9uIGJpdHMKCglydHMKCiMKIyBpbnB1dCBpcyBub3Qgbm9ybWFsaXplZDsgd2hhdCBpcyBpdD8KIwpmaW50X25vdF9ub3JtOgoJY21waS5iCQklZDEsJlpFUk8JCSMgd2VlZCBvdXQgWkVSTwoJYmVxLmIJCWZpbnRfemVybwoJY21waS5iCQklZDEsJklORgkJIyB3ZWVkIG91dCBJTkYKCWJlcS5iCQlmaW50X2luZgoJY21waS5iCQklZDEsJkRFTk9STQkJIyB3ZWVkIG91dCBERU5PUk0KCWJlcS5iCQlmaW50X2Rlbm9ybQoJY21waS5iCQklZDEsJlNOQU4JCSMgd2VlZCBvdXQgU05BTgoJYmVxLmwJCXJlc19zbmFuXzFvcAoJYnJhLmwJCXJlc19xbmFuXzFvcAkJIyB3ZWVkIG91dCBRTkFOCgojCiMgRGVub3JtOgojCiMgZm9yIERFTk9STXMsIHRoZSByZXN1bHQgd2lsbCBiZSBlaXRoZXIgKCsvLSlaRVJPIG9yICgrLy0pMS4KIyBhbHNvLCB0aGUgSU5FWDIgYW5kIEFJTkVYIGV4Y2VwdGlvbiBiaXRzIHdpbGwgYmUgc2V0LgojIHNvLCB3ZSBjb3VsZCBlaXRoZXIgc2V0IHRoZXNlIG1hbnVhbGx5IG9yIGZvcmNlIHRoZSBERU5PUk0KIyB0byBhIHZlcnkgc21hbGwgTk9STSBhbmQgc2hpcCBpdCB0byB0aGUgTk9STSByb3V0aW5lLgojIEkgZG8gdGhlIGxhdHRlci4KIwpmaW50X2Rlbm9ybToKCW1vdi53CQlTUkNfRVgoJWEwKSxGUF9TQ1IwX0VYKCVhNikgIyBjb3B5IHNpZ24sIHplcm8gZXhwCgltb3YuYgkJJjB4ODAsRlBfU0NSMF9ISSglYTYpCSMgZm9yY2UgREVOT1JNID09PiBzbWFsbCBOT1JNCglsZWEJCUZQX1NDUjAoJWE2KSwlYTAKCWJyYS5iCQlmaW50X25vcm0KCiMKIyBaZXJvOgojCmZpbnRfemVybzoKCXRzdC5iCQlTUkNfRVgoJWEwKQkJIyBpcyBaRVJPIG5lZ2F0aXZlPwoJYm1pLmIJCWZpbnRfemVyb19tCQkjIHllcwpmaW50X3plcm9fcDoKCWZtb3YucwkJJjB4MDAwMDAwMDAsJWZwMAkjIHJldHVybiArWkVSTyBpbiBmcDAKCW1vdi5iCQkmel9ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgJ1onIGNjb2RlIGJpdAoJcnRzCmZpbnRfemVyb19tOgoJZm1vdi5zCQkmMHg4MDAwMDAwMCwlZnAwCSMgcmV0dXJuIC1aRVJPIGluIGZwMAoJbW92LmIJCSZ6X2JtYXNrK25lZ19ibWFzayxGUFNSX0NDKCVhNikgIyBzZXQgJ1onLCdOJyBjY29kZSBiaXRzCglydHMKCiMKIyBJbmZpbml0eToKIwpmaW50X2luZjoKCWZtb3ZtLngJCVNSQyglYTApLCYweDgwCQkjIHJldHVybiByZXN1bHQgaW4gZnAwCgl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgaXMgSU5GIG5lZ2F0aXZlPwoJYm1pLmIJCWZpbnRfaW5mX20JCSMgeWVzCmZpbnRfaW5mX3A6Cgltb3YuYgkJJmluZl9ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgJ0knIGNjb2RlIGJpdAoJcnRzCmZpbnRfaW5mX206Cgltb3YuYgkJJmluZl9ibWFzaytuZWdfYm1hc2ssRlBTUl9DQyglYTYpICMgc2V0ICdOJywnSScgY2NvZGUgYml0cwoJcnRzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlmaW50cnooKTogZW11bGF0ZXMgdGhlIGZpbnRyeiBpbnN0cnVjdGlvbgkJCSMKIwkJCQkJCQkJCSMKIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCXJlc197cyxxfW5hbl8xb3AoKSAtIHNldCBOQU4gcmVzdWx0IGZvciBtb25hZGljIG9wZXJhdGlvbgkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIHNvdXJjZSBvcGVyYW5kCQkjCiMJZDAgPSByb3VuZCBwcmVjaXNpb24vbW9kZQkJCQkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJZnAwID0gcmVzdWx0CQkJCQkJCSMKIwkJCQkJCQkJCSMKIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCVNlcGFyYXRlIGFjY29yZGluZyB0byBvcGVyYW5kIHR5cGUuIFVubm9ybXMgZG9uJ3QgcGFzcyB0aHJvdWdoCSMKIyBoZXJlLiBGb3Igbm9ybXMsIGxvYWQgdGhlIHJvdW5kaW5nIG1vZGUvcHJlYywgZXhlY3V0ZSBhICJmaW50cnoiLAkjCiMgdGhlbiBzdG9yZSB0aGUgcmVzdWx0aW5nIEZQU1IgYml0cy4JCQkJCSMKIwlGb3IgZGVub3JtcywgZm9yY2UgdGhlIGotYml0IHRvIGEgb25lIGFuZCBkbyB0aGUgc2FtZSBhcyBmb3IJIwojIG5vcm1zLiBEZW5vcm1zIGFyZSBzbyBsb3cgdGhhdCB0aGUgYW5zd2VyIHdpbGwgZWl0aGVyIGJlIGEgemVybyBvciBhCSMKIyBvbmUuCQkJCQkJCQkJIwojCUZvciB6ZXJvZXMvaW5mcy9OQU5zLCByZXR1cm4gdGhlIHNhbWUgd2hpbGUgc2V0dGluZyB0aGUgRlBTUgkjCiMgYXMgYXBwcm9wcmlhdGUuCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCWdsb2JhbAkJZmludHJ6CmZpbnRyejoKCW1vdi5iCQlTVEFHKCVhNiksJWQxCglibmUuYgkJZmludHJ6X25vdF9ub3JtCQkjIG9wdGltaXplIG9uIG5vbi1ub3JtIGlucHV0CgojCiMgTm9ybToKIwpmaW50cnpfbm9ybToKCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCgoJZmludHJ6LngJU1JDKCVhMCksJWZwMAkJIyBleGVjdXRlIGZpbnRyegoKCWZtb3YubAkJJWZwc3IsJWQwCQkjIHNhdmUgRlBTUgoJb3IubAkJJWQwLFVTRVJfRlBTUiglYTYpCSMgc2V0IGV4Y2VwdGlvbiBiaXRzCgoJcnRzCgojCiMgaW5wdXQgaXMgbm90IG5vcm1hbGl6ZWQ7IHdoYXQgaXMgaXQ/CiMKZmludHJ6X25vdF9ub3JtOgoJY21waS5iCQklZDEsJlpFUk8JCSMgd2VlZCBvdXQgWkVSTwoJYmVxLmIJCWZpbnRyel96ZXJvCgljbXBpLmIJCSVkMSwmSU5GCQkjIHdlZWQgb3V0IElORgoJYmVxLmIJCWZpbnRyel9pbmYKCWNtcGkuYgkJJWQxLCZERU5PUk0JCSMgd2VlZCBvdXQgREVOT1JNCgliZXEuYgkJZmludHJ6X2Rlbm9ybQoJY21waS5iCQklZDEsJlNOQU4JCSMgd2VlZCBvdXQgU05BTgoJYmVxLmwJCXJlc19zbmFuXzFvcAoJYnJhLmwJCXJlc19xbmFuXzFvcAkJIyB3ZWVkIG91dCBRTkFOCgojCiMgRGVub3JtOgojCiMgZm9yIERFTk9STXMsIHRoZSByZXN1bHQgd2lsbCBiZSAoKy8tKVpFUk8uCiMgYWxzbywgdGhlIElORVgyIGFuZCBBSU5FWCBleGNlcHRpb24gYml0cyB3aWxsIGJlIHNldC4KIyBzbywgd2UgY291bGQgZWl0aGVyIHNldCB0aGVzZSBtYW51YWxseSBvciBmb3JjZSB0aGUgREVOT1JNCiMgdG8gYSB2ZXJ5IHNtYWxsIE5PUk0gYW5kIHNoaXAgaXQgdG8gdGhlIE5PUk0gcm91dGluZS4KIyBJIGRvIHRoZSBsYXR0ZXIuCiMKZmludHJ6X2Rlbm9ybToKCW1vdi53CQlTUkNfRVgoJWEwKSxGUF9TQ1IwX0VYKCVhNikgIyBjb3B5IHNpZ24sIHplcm8gZXhwCgltb3YuYgkJJjB4ODAsRlBfU0NSMF9ISSglYTYpCSMgZm9yY2UgREVOT1JNID09PiBzbWFsbCBOT1JNCglsZWEJCUZQX1NDUjAoJWE2KSwlYTAKCWJyYS5iCQlmaW50cnpfbm9ybQoKIwojIFplcm86CiMKZmludHJ6X3plcm86Cgl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgaXMgWkVSTyBuZWdhdGl2ZT8KCWJtaS5iCQlmaW50cnpfemVyb19tCQkjIHllcwpmaW50cnpfemVyb19wOgoJZm1vdi5zCQkmMHgwMDAwMDAwMCwlZnAwCSMgcmV0dXJuICtaRVJPIGluIGZwMAoJbW92LmIJCSZ6X2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCAnWicgY2NvZGUgYml0CglydHMKZmludHJ6X3plcm9fbToKCWZtb3YucwkJJjB4ODAwMDAwMDAsJWZwMAkjIHJldHVybiAtWkVSTyBpbiBmcDAKCW1vdi5iCQkmel9ibWFzaytuZWdfYm1hc2ssRlBTUl9DQyglYTYpICMgc2V0ICdaJywnTicgY2NvZGUgYml0cwoJcnRzCgojCiMgSW5maW5pdHk6CiMKZmludHJ6X2luZjoKCWZtb3ZtLngJCVNSQyglYTApLCYweDgwCQkjIHJldHVybiByZXN1bHQgaW4gZnAwCgl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgaXMgSU5GIG5lZ2F0aXZlPwoJYm1pLmIJCWZpbnRyel9pbmZfbQkJIyB5ZXMKZmludHJ6X2luZl9wOgoJbW92LmIJCSZpbmZfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0ICdJJyBjY29kZSBiaXQKCXJ0cwpmaW50cnpfaW5mX206Cgltb3YuYgkJJmluZl9ibWFzaytuZWdfYm1hc2ssRlBTUl9DQyglYTYpICMgc2V0ICdOJywnSScgY2NvZGUgYml0cwoJcnRzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlmYWJzKCk6ICBlbXVsYXRlcyB0aGUgZmFicyBpbnN0cnVjdGlvbgkJCQkjCiMJZnNhYnMoKTogZW11bGF0ZXMgdGhlIGZzYWJzIGluc3RydWN0aW9uCQkJCSMKIwlmZGFicygpOiBlbXVsYXRlcyB0aGUgZmRhYnMgaW5zdHJ1Y3Rpb24JCQkJIwojCQkJCQkJCQkJIwojIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCiMJbm9ybSgpIC0gbm9ybWFsaXplIGRlbm9ybSBtYW50aXNzYSB0byBwcm92aWRlIEVYT1AJCSMKIwlzY2FsZV90b196ZXJvX3NyYygpIC0gbWFrZSBleHBvbmVudC4gPSAwOyBnZXQgc2NhbGUgZmFjdG9yCSMKIwl1bmZfcmVzKCkgLSBjYWxjdWxhdGUgdW5kZXJmbG93IHJlc3VsdAkJCQkjCiMJb3ZmX3JlcygpIC0gY2FsY3VsYXRlIG92ZXJmbG93IHJlc3VsdAkJCQkjCiMJcmVzX3tzLHF9bmFuXzFvcCgpIC0gc2V0IE5BTiByZXN1bHQgZm9yIG1vbmFkaWMgb3BlcmF0aW9uCSMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIwojCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gc291cmNlIG9wZXJhbmQJCSMKIwlkMCA9IHJuZCBwcmVjaXNpb24vbW9kZQkJCQkJCSMKIwkJCQkJCQkJCSMKIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIwojCWZwMCA9IHJlc3VsdAkJCQkJCQkjCiMJZnAxID0gRVhPUCAoaWYgZXhjZXB0aW9uIG9jY3VycmVkKQkJCQkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlIYW5kbGUgTkFOcywgaW5maW5pdGllcywgYW5kIHplcm9lcyBhcyBzcGVjaWFsIGNhc2VzLiBEaXZpZGUJIwojIG5vcm1zIGludG8gZXh0ZW5kZWQsIHNpbmdsZSwgYW5kIGRvdWJsZSBwcmVjaXNpb24uCQkJIwojCVNpbXBseSBjbGVhciBzaWduIGZvciBleHRlbmRlZCBwcmVjaXNpb24gbm9ybS4gRXh0IHByZWMgZGVub3JtCSMKIyBnZXRzIGFuIEVYT1AgY3JlYXRlZCBmb3IgaXQgc2luY2UgaXQncyBhbiB1bmRlcmZsb3cuCQkJIwojCURvdWJsZSBhbmQgc2luZ2xlIHByZWNpc2lvbiBjYW4gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdy4gRmlyc3QsCSMKIyBzY2FsZSB0aGUgb3BlcmFuZCBzdWNoIHRoYXQgdGhlIGV4cG9uZW50IGlzIHplcm8uIFBlcmZvcm0gYW4gImZhYnMiCSMKIyB1c2luZyB0aGUgY29ycmVjdCBybmQgbW9kZS9wcmVjLiBDaGVjayB0byBzZWUgaWYgdGhlIG9yaWdpbmFsCQkjCiMgZXhwb25lbnQgd291bGQgdGFrZSBhbiBleGNlcHRpb24uIElmIHNvLCB1c2UgdW5mX3JlcygpIG9yIG92Zl9yZXMoKQkjCiMgdG8gY2FsY3VsYXRlIHRoZSBkZWZhdWx0IHJlc3VsdC4gQWxzbywgY3JlYXRlIHRoZSBFWE9QIGZvciB0aGUJIwojIGV4Y2VwdGlvbmFsIGNhc2UuIElmIG5vIGV4Y2VwdGlvbiBzaG91bGQgb2NjdXIsIGluc2VydCB0aGUgY29ycmVjdAkjCiMgcmVzdWx0IGV4cG9uZW50IGFuZCByZXR1cm4uCQkJCQkJIwojCVVubm9ybXMgZG9uJ3QgcGFzcyB0aHJvdWdoIGhlcmUuCQkJCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCWdsb2JhbAkJZnNhYnMKZnNhYnM6CglhbmRpLmIJCSYweDMwLCVkMAkJIyBjbGVhciBybmQgcHJlYwoJb3JpLmIJCSZzX21vZGUqMHgxMCwlZDAJIyBpbnNlcnQgc2dsIHByZWNpc2lvbgoJYnJhLmIJCWZhYnMKCglnbG9iYWwJCWZkYWJzCmZkYWJzOgoJYW5kaS5iCQkmMHgzMCwlZDAJCSMgY2xlYXIgcm5kIHByZWMKCW9yaS5iCQkmZF9tb2RlKjB4MTAsJWQwCSMgaW5zZXJ0IGRibCBwcmVjaXNpb24KCglnbG9iYWwJCWZhYnMKZmFiczoKCW1vdi5sCQklZDAsTF9TQ1IzKCVhNikJCSMgc3RvcmUgcm5kIGluZm8KCW1vdi5iCQlTVEFHKCVhNiksJWQxCglibmUudwkJZmFic19ub3Rfbm9ybQkJIyBvcHRpbWl6ZSBvbiBub24tbm9ybSBpbnB1dAoKIwojIEFCU09MVVRFIFZBTFVFOiBub3JtcyBhbmQgZGVub3JtcyBPTkxZIQojCmZhYnNfbm9ybToKCWFuZGkuYgkJJjB4YzAsJWQwCQkjIGlzIHByZWNpc2lvbiBleHRlbmRlZD8KCWJuZS5iCQlmYWJzX25vdF9leHQJCSMgbm87IGdvIGhhbmRsZSBzZ2wgb3IgZGJsCgojCiMgcHJlY2lzaW9uIHNlbGVjdGVkIGlzIGV4dGVuZGVkLiBzby4uLndlIGNhbiBub3QgZ2V0IGFuIHVuZGVyZmxvdwojIG9yIG92ZXJmbG93IGJlY2F1c2Ugb2Ygcm91bmRpbmcgdG8gdGhlIGNvcnJlY3QgcHJlY2lzaW9uLiBzby4uLgojIHNraXAgdGhlIHNjYWxpbmcgYW5kIHVuc2NhbGluZy4uLgojCgltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCgltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCgltb3YudwkJU1JDX0VYKCVhMCksJWQxCgliY2xyCQkmMTUsJWQxCQkJIyBmb3JjZSBhYnNvbHV0ZSB2YWx1ZQoJbW92LncJCSVkMSxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgZXhwb25lbnQKCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg4MAkjIHJldHVybiByZXN1bHQgaW4gZnAwCglydHMKCiMKIyBmb3IgYW4gZXh0ZW5kZWQgcHJlY2lzaW9uIERFTk9STSwgdGhlIFVORkwgZXhjZXB0aW9uIGJpdCBpcyBzZXQKIyB0aGUgYWNjcnVlZCBiaXQgaXMgTk9UIHNldCBpbiB0aGlzIGluc3RhbmNlKG5vIGluZXhhY3RuZXNzISkKIwpmYWJzX2Rlbm9ybToKCWFuZGkuYgkJJjB4YzAsJWQwCQkjIGlzIHByZWNpc2lvbiBleHRlbmRlZD8KCWJuZS5iCQlmYWJzX25vdF9leHQJCSMgbm8KCglic2V0CQkmdW5mbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIHNldCB1bmZsIGV4YyBiaXQKCgltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCgltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCgltb3YudwkJU1JDX0VYKCVhMCksJWQwCgliY2xyCQkmMTUsJWQwCQkJIyBjbGVhciBzaWduCgltb3YudwkJJWQwLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBleHBvbmVudAoKCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg4MAkjIHJldHVybiBkZWZhdWx0IHJlc3VsdCBpbiBmcDAKCglidHN0CQkmdW5mbF9iaXQsRlBDUl9FTkFCTEUoJWE2KSAjIGlzIFVORkwgZW5hYmxlZD8KCWJuZS5iCQlmYWJzX2V4dF91bmZsX2VuYQoJcnRzCgojCiMgdGhlIGlucHV0IGlzIGFuIGV4dGVuZGVkIERFTk9STSBhbmQgdW5kZXJmbG93IGlzIGVuYWJsZWQgaW4gdGhlIEZQQ1IuCiMgbm9ybWFsaXplIHRoZSBtYW50aXNzYSBhbmQgYWRkIHRoZSBiaWFzIG9mIDB4NjAwMCB0byB0aGUgcmVzdWx0aW5nIG5lZ2F0aXZlCiMgZXhwb25lbnQgYW5kIGluc2VydCBiYWNrIGludG8gdGhlIG9wZXJhbmQuCiMKZmFic19leHRfdW5mbF9lbmE6CglsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzOiBwdHIgdG8gb3BlcmFuZAoJYnNyLmwJCW5vcm0JCQkjIG5vcm1hbGl6ZSByZXN1bHQKCW5lZy53CQklZDAJCQkjIG5ldyBleHBvbmVudCA9IC0oc2hmdCB2YWwpCglhZGRpLncJCSYweDYwMDAsJWQwCQkjIGFkZCBuZXcgYmlhcyB0byBleHBvbmVudAoJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBmZXRjaCBvbGQgc2lnbixleHAKCWFuZGkudwkJJjB4ODAwMCwlZDEJCSMga2VlcCBvbGQgc2lnbgoJYW5kaS53CQkmMHg3ZmZmLCVkMAkJIyBjbGVhciBzaWduIHBvc2l0aW9uCglvci53CQklZDEsJWQwCQkJIyBjb25jYXQgb2xkIHNpZ24sIG5ldyBleHBvbmVudAoJbW92LncJCSVkMCxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50CglmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4NDAJIyByZXR1cm4gRVhPUCBpbiBmcDEKCXJ0cwoKIwojIG9wZXJhbmQgaXMgZWl0aGVyIHNpbmdsZSBvciBkb3VibGUKIwpmYWJzX25vdF9leHQ6CgljbXBpLmIJCSVkMCwmc19tb2RlKjB4MTAJIyBzZXBhcmF0ZSBzZ2wvZGJsIHByZWMKCWJuZS5iCQlmYWJzX2RibAoKIwojIG9wZXJhbmQgaXMgdG8gYmUgcm91bmRlZCB0byBzaW5nbGUgcHJlY2lzaW9uCiMKZmFic19zZ2w6Cgltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCgltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCgltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCglic3IubAkJc2NhbGVfdG9femVyb19zcmMJIyBjYWxjdWxhdGUgc2NhbGUgZmFjdG9yCgoJY21waS5sCQklZDAsJjB4M2ZmZi0weDNmODAJIyB3aWxsIG1vdmUgaW4gdW5kZXJmbG93PwoJYmdlLncJCWZhYnNfc2RfdW5mbAkJIyB5ZXM7IGdvIGhhbmRsZSB1bmRlcmZsb3cKCWNtcGkubAkJJWQwLCYweDNmZmYtMHg0MDdlCSMgd2lsbCBtb3ZlIGluIG92ZXJmbG93PwoJYmVxLncJCWZhYnNfc2RfbWF5X292ZmwJIyBtYXliZTsgZ28gY2hlY2sKCWJsdC53CQlmYWJzX3NkX292ZmwJCSMgeWVzOyBnbyBoYW5kbGUgb3ZlcmZsb3cKCiMKIyBvcGVyYW5kIHdpbGwgTk9UIG92ZXJmbG93IG9yIHVuZGVyZmxvdyB3aGVuIG1vdmVkIGluIHRvIHRoZSBmcCByZWcgZmlsZQojCmZhYnNfc2Rfbm9ybWFsOgoJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgoKCWZhYnMueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBwZXJmb3JtIGFic29sdXRlCgoJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBGUFNSCglmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgoKCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgoKZmFic19zZF9ub3JtYWxfZXhpdDoKCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKCWZtb3ZtLngJCSYweDgwLEZQX1NDUjAoJWE2KQkjIHN0b3JlIG91dCByZXN1bHQKCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgbG9hZCBzZ24sZXhwCgltb3YubAkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgoJc3ViLmwJCSVkMCwlZDEJCQkjIGFkZCBzY2FsZSBmYWN0b3IKCWFuZGkudwkJJjB4ODAwMCwlZDIJCSMga2VlcCBvbGQgc2lnbgoJb3IudwkJJWQxLCVkMgkJCSMgY29uY2F0IG9sZCBzaWduLG5ldyBleHAKCW1vdi53CQklZDIsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAoJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgoJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDgwCSMgcmV0dXJuIHJlc3VsdCBpbiBmcDAKCXJ0cwoKIwojIG9wZXJhbmQgaXMgdG8gYmUgcm91bmRlZCB0byBkb3VibGUgcHJlY2lzaW9uCiMKZmFic19kYmw6Cgltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCgltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCgltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCglic3IubAkJc2NhbGVfdG9femVyb19zcmMJIyBjYWxjdWxhdGUgc2NhbGUgZmFjdG9yCgoJY21waS5sCQklZDAsJjB4M2ZmZi0weDNjMDAJIyB3aWxsIG1vdmUgaW4gdW5kZXJmbG93PwoJYmdlLmIJCWZhYnNfc2RfdW5mbAkJIyB5ZXM7IGdvIGhhbmRsZSB1bmRlcmZsb3cKCWNtcGkubAkJJWQwLCYweDNmZmYtMHg0M2ZlCSMgd2lsbCBtb3ZlIGluIG92ZXJmbG93PwoJYmVxLncJCWZhYnNfc2RfbWF5X292ZmwJIyBtYXliZTsgZ28gY2hlY2sKCWJsdC53CQlmYWJzX3NkX292ZmwJCSMgeWVzOyBnbyBoYW5kbGUgb3ZlcmZsb3cKCWJyYS53CQlmYWJzX3NkX25vcm1hbAkJIyBubzsgaG8gaGFuZGxlIG5vcm1hbGl6ZWQgb3AKCiMKIyBvcGVyYW5kIFdJTEwgdW5kZXJmbG93IHdoZW4gbW92ZWQgaW4gdG8gdGhlIGZwIHJlZ2lzdGVyIGZpbGUKIwpmYWJzX3NkX3VuZmw6Cglic2V0CQkmdW5mbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIHNldCB1bmZsIGV4YyBiaXQKCgliY2xyCQkmMHg3LEZQX1NDUjBfRVgoJWE2KQkjIGZvcmNlIGFic29sdXRlIHZhbHVlCgojIGlmIHVuZGVyZmxvdyBvciBpbmV4YWN0IGlzIGVuYWJsZWQsIGdvIGNhbGN1bGF0ZSBFWE9QIGZpcnN0LgoJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCglhbmRpLmIJCSYweDBiLCVkMQkJIyBpcyBVTkZMIG9yIElORVggZW5hYmxlZD8KCWJuZS5iCQlmYWJzX3NkX3VuZmxfZW5hCSMgeWVzCgpmYWJzX3NkX3VuZmxfZGlzOgoJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCSMgcGFzczogcmVzdWx0IGFkZHIKCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEJCSMgcGFzczogcm5kIHByZWMsbW9kZQoJYnNyLmwJCXVuZl9yZXMJCQkjIGNhbGN1bGF0ZSBkZWZhdWx0IHJlc3VsdAoJb3IuYgkJJWQwLEZQU1JfQ0MoJWE2KQkjIHNldCBwb3NzaWJsZSAnWicgY2NvZGUKCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg4MAkjIHJldHVybiBkZWZhdWx0IHJlc3VsdCBpbiBmcDAKCXJ0cwoKIwojIG9wZXJhbmQgd2lsbCB1bmRlcmZsb3cgQU5EIHVuZGVyZmxvdyBpcyBlbmFibGVkLgojIHRoZXJlZm9yZSwgd2UgbXVzdCByZXR1cm4gdGhlIHJlc3VsdCByb3VuZGVkIHRvIGV4dGVuZGVkIHByZWNpc2lvbi4KIwpmYWJzX3NkX3VuZmxfZW5hOgoJbW92LmwJCUZQX1NDUjBfSEkoJWE2KSxGUF9TQ1IxX0hJKCVhNikKCW1vdi5sCQlGUF9TQ1IwX0xPKCVhNiksRlBfU0NSMV9MTyglYTYpCgltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGxvYWQgY3VycmVudCBleHBvbmVudAoKCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKCW1vdi5sCQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQoJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCglhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KCXN1Yi5sCQklZDAsJWQxCQkJIyBzdWJ0cmFjdCBzY2FsZSBmYWN0b3IKCWFkZGkubAkJJjB4NjAwMCwlZDEJCSMgYWRkIG5ldyBiaWFzCglhbmRpLncJCSYweDdmZmYsJWQxCglvci53CQklZDIsJWQxCQkJIyBjb25jYXQgbmV3IHNpZ24sbmV3IGV4cAoJbW92LncJCSVkMSxGUF9TQ1IxX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cAoJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDQwCSMgcmV0dXJuIEVYT1AgaW4gZnAxCgltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCglicmEuYgkJZmFic19zZF91bmZsX2RpcwoKIwojIG9wZXJhbmQgV0lMTCBvdmVyZmxvdy4KIwpmYWJzX3NkX292Zmw6CglmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgoJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCgoJZmFicy54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIHBlcmZvcm0gYWJzb2x1dGUKCglmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgoJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBGUFNSCgoJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCgpmYWJzX3NkX292ZmxfdHN0OgoJb3IubAkJJm92ZmxfaW54X21hc2ssVVNFUl9GUFNSKCVhNikgIyBzZXQgb3ZmbC9hb3ZmbC9haW5leAoKCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMQoJYW5kaS5iCQkmMHgxMywlZDEJCSMgaXMgT1ZGTCBvciBJTkVYIGVuYWJsZWQ/CglibmUuYgkJZmFic19zZF9vdmZsX2VuYQkjIHllcwoKIwojIE9WRkwgaXMgbm90IGVuYWJsZWQ7IHRoZXJlZm9yZSwgd2UgbXVzdCBjcmVhdGUgdGhlIGRlZmF1bHQgcmVzdWx0IGJ5CiMgY2FsbGluZyBvdmZfcmVzKCkuCiMKZmFic19zZF9vdmZsX2RpczoKCWJ0c3QJCSZuZWdfYml0LEZQU1JfQ0MoJWE2KQkjIGlzIHJlc3VsdCBuZWdhdGl2ZT8KCXNuZQkJJWQxCQkJIyBzZXQgc2lnbiBwYXJhbSBhY2NvcmRpbmdseQoJbW92LmwJCUxfU0NSMyglYTYpLCVkMAkJIyBwYXNzOiBwcmVjLG1vZGUKCWJzci5sCQlvdmZfcmVzCQkJIyBjYWxjdWxhdGUgZGVmYXVsdCByZXN1bHQKCW9yLmIJCSVkMCxGUFNSX0NDKCVhNikJIyBzZXQgSU5GLE4gaWYgYXBwbGljYWJsZQoJZm1vdm0ueAkJKCVhMCksJjB4ODAJCSMgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGluIGZwMAoJcnRzCgojCiMgT1ZGTCBpcyBlbmFibGVkLgojIHRoZSBJTkVYMiBiaXQgaGFzIGFscmVhZHkgYmVlbiB1cGRhdGVkIGJ5IHRoZSByb3VuZCB0byB0aGUgY29ycmVjdCBwcmVjaXNpb24uCiMgbm93LCByb3VuZCB0byBleHRlbmRlZChhbmQgZG9uJ3QgYWx0ZXIgdGhlIEZQU1IpLgojCmZhYnNfc2Rfb3ZmbF9lbmE6Cgltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCgltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGZldGNoIHtzZ24sZXhwfQoJbW92LmwJCSVkMSwlZDIJCQkjIG1ha2UgYSBjb3B5CglhbmRpLmwJCSYweDdmZmYsJWQxCQkjIHN0cmlwIHNpZ24KCWFuZGkudwkJJjB4ODAwMCwlZDIJCSMga2VlcCBvbGQgc2lnbgoJc3ViLmwJCSVkMCwlZDEJCQkjIGFkZCBzY2FsZSBmYWN0b3IKCXN1YmkubAkJJjB4NjAwMCwlZDEJCSMgc3VidHJhY3QgYmlhcwoJYW5kaS53CQkmMHg3ZmZmLCVkMQoJb3IudwkJJWQyLCVkMQkJCSMgY29uY2F0IHNpZ24sZXhwCgltb3YudwkJJWQxLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwb25lbnQKCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg0MAkjIHJldHVybiBFWE9QIGluIGZwMQoJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgoJYnJhLmIJCWZhYnNfc2Rfb3ZmbF9kaXMKCiMKIyB0aGUgbW92ZSBpbiBNQVkgdW5kZXJmbG93LiBzby4uLgojCmZhYnNfc2RfbWF5X292Zmw6CglmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgoJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCgoJZmFicy54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIHBlcmZvcm0gYWJzb2x1dGUKCglmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIHN0YXR1cwoJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKCglvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KCglmYWJzLngJCSVmcDAsJWZwMQkJIyBtYWtlIGEgY29weSBvZiByZXN1bHQKCWZjbXAuYgkJJWZwMSwmMHgyCQkjIGlzIHxyZXN1bHR8ID49IDIuYj8KCWZiZ2UudwkJZmFic19zZF9vdmZsX3RzdAkjIHllczsgb3ZlcmZsb3cgaGFzIG9jY3VycmVkCgojIG5vLCBpdCBkaWRuJ3Qgb3ZlcmZsb3c7IHdlIGhhdmUgY29ycmVjdCByZXN1bHQKCWJyYS53CQlmYWJzX3NkX25vcm1hbF9leGl0CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIwojIGlucHV0IGlzIG5vdCBub3JtYWxpemVkOyB3aGF0IGlzIGl0PwojCmZhYnNfbm90X25vcm06CgljbXBpLmIJCSVkMSwmREVOT1JNCQkjIHdlZWQgb3V0IERFTk9STQoJYmVxLncJCWZhYnNfZGVub3JtCgljbXBpLmIJCSVkMSwmU05BTgkJIyB3ZWVkIG91dCBTTkFOCgliZXEubAkJcmVzX3NuYW5fMW9wCgljbXBpLmIJCSVkMSwmUU5BTgkJIyB3ZWVkIG91dCBRTkFOCgliZXEubAkJcmVzX3FuYW5fMW9wCgoJZmFicy54CQlTUkMoJWEwKSwlZnAwCQkjIGZvcmNlIGFic29sdXRlIHZhbHVlCgoJY21waS5iCQklZDEsJklORgkJIyB3ZWVkIG91dCBJTkYKCWJlcS5iCQlmYWJzX2luZgpmYWJzX3plcm86Cgltb3YuYgkJJnpfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0ICdaJyBjY29kZSBiaXQKCXJ0cwpmYWJzX2luZjoKCW1vdi5iCQkmaW5mX2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCAnSScgY2NvZGUgYml0CglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWZjbXAoKTogZnAgY29tcGFyZSBvcCByb3V0aW5lCQkJCQkjCiMJCQkJCQkJCQkjCiMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlyZXNfcW5hbigpIC0gcmV0dXJuIFFOQU4gcmVzdWx0CQkJCQkjCiMJcmVzX3NuYW4oKSAtIHJldHVybiBTTkFOIHJlc3VsdAkJCQkJIwojCQkJCQkJCQkJIwojIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBzb3VyY2Ugb3BlcmFuZAkJIwojCWExID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gZGVzdGluYXRpb24gb3BlcmFuZAkJIwojCWQwID0gcm91bmQgcHJlYy9tb2RlCQkJCQkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCiMJTm9uZQkJCQkJCQkJIwojCQkJCQkJCQkJIwojIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJSGFuZGxlIE5BTnMgYW5kIGRlbm9ybXMgYXMgc3BlY2lhbCBjYXNlcy4gRm9yIGV2ZXJ5dGhpbmcgZWxzZSwJIwojIGp1c3QgdXNlIHRoZSBhY3R1YWwgZmNtcCBpbnN0cnVjdGlvbiB0byBwcm9kdWNlIHRoZSBjb3JyZWN0IGNvbmRpdGlvbgkjCiMgY29kZXMuCQkJCQkJCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCglnbG9iYWwJCWZjbXAKZmNtcDoKCWNsci53CQklZDEKCW1vdi5iCQlEVEFHKCVhNiksJWQxCglsc2wuYgkJJjB4MywlZDEKCW9yLmIJCVNUQUcoJWE2KSwlZDEKCWJuZS5iCQlmY21wX25vdF9ub3JtCQkjIG9wdGltaXplIG9uIG5vbi1ub3JtIGlucHV0CgojCiMgQ09NUEFSRSBGUCBPUHMgOiBOT1JNcywgWkVST3MsIElORnMsIGFuZCAiY29ycmVjdGVkIiBERU5PUk1zCiMKZmNtcF9ub3JtOgoJZm1vdm0ueAkJRFNUKCVhMSksJjB4ODAJCSMgbG9hZCBkc3Qgb3AKCglmY21wLngJCSVmcDAsU1JDKCVhMCkJCSMgZG8gY29tcGFyZQoKCWZtb3YubAkJJWZwc3IsJWQwCQkjIHNhdmUgRlBTUgoJcm9sLmwJCSYweDgsJWQwCQkjIGV4dHJhY3QgY2NvZGUgYml0cwoJbW92LmIJCSVkMCxGUFNSX0NDKCVhNikJIyBzZXQgY2NvZGUgYml0cyhubyBleGMgYml0cyBhcmUgc2V0KQoKCXJ0cwoKIwojIGZjbXA6IGlucHV0cyBhcmUgbm90IGJvdGggbm9ybWFsaXplZDsgd2hhdCBhcmUgdGhleT8KIwpmY21wX25vdF9ub3JtOgoJbW92LncJCSh0YmxfZmNtcF9vcC5iLCVwYywlZDEudyoyKSwlZDEKCWptcAkJKHRibF9mY21wX29wLmIsJXBjLCVkMS53KjEpCgoJc3diZWcJCSY0OAp0YmxfZmNtcF9vcDoKCXNob3J0CQlmY21wX25vcm0JLSB0YmxfZmNtcF9vcCAjIE5PUk0gLSBOT1JNCglzaG9ydAkJZmNtcF9ub3JtCS0gdGJsX2ZjbXBfb3AgIyBOT1JNIC0gWkVSTwoJc2hvcnQJCWZjbXBfbm9ybQktIHRibF9mY21wX29wICMgTk9STSAtIElORgoJc2hvcnQJCWZjbXBfcmVzX3FuYW4JLSB0YmxfZmNtcF9vcCAjIE5PUk0gLSBRTkFOCglzaG9ydAkJZmNtcF9ucm1fZG5ybQktIHRibF9mY21wX29wICMgTk9STSAtIERFTk9STQoJc2hvcnQJCWZjbXBfcmVzX3NuYW4JLSB0YmxfZmNtcF9vcCAjIE5PUk0gLSBTTkFOCglzaG9ydAkJdGJsX2ZjbXBfb3AJLSB0YmxfZmNtcF9vcCAjCglzaG9ydAkJdGJsX2ZjbXBfb3AJLSB0YmxfZmNtcF9vcCAjCgoJc2hvcnQJCWZjbXBfbm9ybQktIHRibF9mY21wX29wICMgWkVSTyAtIE5PUk0KCXNob3J0CQlmY21wX25vcm0JLSB0YmxfZmNtcF9vcCAjIFpFUk8gLSBaRVJPCglzaG9ydAkJZmNtcF9ub3JtCS0gdGJsX2ZjbXBfb3AgIyBaRVJPIC0gSU5GCglzaG9ydAkJZmNtcF9yZXNfcW5hbgktIHRibF9mY21wX29wICMgWkVSTyAtIFFOQU4KCXNob3J0CQlmY21wX2Rucm1fcwktIHRibF9mY21wX29wICMgWkVSTyAtIERFTk9STQoJc2hvcnQJCWZjbXBfcmVzX3NuYW4JLSB0YmxfZmNtcF9vcCAjIFpFUk8gLSBTTkFOCglzaG9ydAkJdGJsX2ZjbXBfb3AJLSB0YmxfZmNtcF9vcCAjCglzaG9ydAkJdGJsX2ZjbXBfb3AJLSB0YmxfZmNtcF9vcCAjCgoJc2hvcnQJCWZjbXBfbm9ybQktIHRibF9mY21wX29wICMgSU5GIC0gTk9STQoJc2hvcnQJCWZjbXBfbm9ybQktIHRibF9mY21wX29wICMgSU5GIC0gWkVSTwoJc2hvcnQJCWZjbXBfbm9ybQktIHRibF9mY21wX29wICMgSU5GIC0gSU5GCglzaG9ydAkJZmNtcF9yZXNfcW5hbgktIHRibF9mY21wX29wICMgSU5GIC0gUU5BTgoJc2hvcnQJCWZjbXBfZG5ybV9zCS0gdGJsX2ZjbXBfb3AgIyBJTkYgLSBERU5PUk0KCXNob3J0CQlmY21wX3Jlc19zbmFuCS0gdGJsX2ZjbXBfb3AgIyBJTkYgLSBTTkFOCglzaG9ydAkJdGJsX2ZjbXBfb3AJLSB0YmxfZmNtcF9vcCAjCglzaG9ydAkJdGJsX2ZjbXBfb3AJLSB0YmxfZmNtcF9vcCAjCgoJc2hvcnQJCWZjbXBfcmVzX3FuYW4JLSB0YmxfZmNtcF9vcCAjIFFOQU4gLSBOT1JNCglzaG9ydAkJZmNtcF9yZXNfcW5hbgktIHRibF9mY21wX29wICMgUU5BTiAtIFpFUk8KCXNob3J0CQlmY21wX3Jlc19xbmFuCS0gdGJsX2ZjbXBfb3AgIyBRTkFOIC0gSU5GCglzaG9ydAkJZmNtcF9yZXNfcW5hbgktIHRibF9mY21wX29wICMgUU5BTiAtIFFOQU4KCXNob3J0CQlmY21wX3Jlc19xbmFuCS0gdGJsX2ZjbXBfb3AgIyBRTkFOIC0gREVOT1JNCglzaG9ydAkJZmNtcF9yZXNfc25hbgktIHRibF9mY21wX29wICMgUU5BTiAtIFNOQU4KCXNob3J0CQl0YmxfZmNtcF9vcAktIHRibF9mY21wX29wICMKCXNob3J0CQl0YmxfZmNtcF9vcAktIHRibF9mY21wX29wICMKCglzaG9ydAkJZmNtcF9kbnJtX25ybQktIHRibF9mY21wX29wICMgREVOT1JNIC0gTk9STQoJc2hvcnQJCWZjbXBfZG5ybV9kCS0gdGJsX2ZjbXBfb3AgIyBERU5PUk0gLSBaRVJPCglzaG9ydAkJZmNtcF9kbnJtX2QJLSB0YmxfZmNtcF9vcCAjIERFTk9STSAtIElORgoJc2hvcnQJCWZjbXBfcmVzX3FuYW4JLSB0YmxfZmNtcF9vcCAjIERFTk9STSAtIFFOQU4KCXNob3J0CQlmY21wX2Rucm1fc2QJLSB0YmxfZmNtcF9vcCAjIERFTk9STSAtIERFTk9STQoJc2hvcnQJCWZjbXBfcmVzX3NuYW4JLSB0YmxfZmNtcF9vcCAjIERFTk9STSAtIFNOQU4KCXNob3J0CQl0YmxfZmNtcF9vcAktIHRibF9mY21wX29wICMKCXNob3J0CQl0YmxfZmNtcF9vcAktIHRibF9mY21wX29wICMKCglzaG9ydAkJZmNtcF9yZXNfc25hbgktIHRibF9mY21wX29wICMgU05BTiAtIE5PUk0KCXNob3J0CQlmY21wX3Jlc19zbmFuCS0gdGJsX2ZjbXBfb3AgIyBTTkFOIC0gWkVSTwoJc2hvcnQJCWZjbXBfcmVzX3NuYW4JLSB0YmxfZmNtcF9vcCAjIFNOQU4gLSBJTkYKCXNob3J0CQlmY21wX3Jlc19zbmFuCS0gdGJsX2ZjbXBfb3AgIyBTTkFOIC0gUU5BTgoJc2hvcnQJCWZjbXBfcmVzX3NuYW4JLSB0YmxfZmNtcF9vcCAjIFNOQU4gLSBERU5PUk0KCXNob3J0CQlmY21wX3Jlc19zbmFuCS0gdGJsX2ZjbXBfb3AgIyBTTkFOIC0gU05BTgoJc2hvcnQJCXRibF9mY21wX29wCS0gdGJsX2ZjbXBfb3AgIwoJc2hvcnQJCXRibF9mY21wX29wCS0gdGJsX2ZjbXBfb3AgIwoKIyB1bmxpa2UgYWxsIG90aGVyIGZ1bmN0aW9ucyBmb3IgUU5BTiBhbmQgU05BTiwgZmNtcCBkb2VzIE5PVCBzZXQgdGhlCiMgJ04nIGJpdCBmb3IgYSBuZWdhdGl2ZSBRTkFOIG9yIFNOQU4gaW5wdXQgc28gd2UgbXVzdCBzcXVlbGNoIGl0IGhlcmUuCmZjbXBfcmVzX3FuYW46Cglic3IubAkJcmVzX3FuYW4KCWFuZGkuYgkJJjB4ZjcsRlBTUl9DQyglYTYpCglydHMKZmNtcF9yZXNfc25hbjoKCWJzci5sCQlyZXNfc25hbgoJYW5kaS5iCQkmMHhmNyxGUFNSX0NDKCVhNikKCXJ0cwoKIwojIERFTk9STXMgYXJlIGEgbGl0dGxlIG1vcmUgZGlmZmljdWx0LgojIElmIHlvdSBoYXZlIGEgMiBERU5PUk1zLCB0aGVuIHlvdSBjYW4ganVzdCBmb3JjZSB0aGUgai1iaXQgdG8gYSBvbmUKIyBhbmQgdXNlIHRoZSBmY21wX25vcm0gcm91dGluZS4KIyBJZiB5b3UgaGF2ZSBhIERFTk9STSBhbmQgYW4gSU5GIG9yIFpFUk8sIGp1c3QgZm9yY2UgdGhlIERFTk9STSdzIGotYml0IHRvIGEgb25lCiMgYW5kIHVzZSB0aGUgZmNtcF9ub3JtIHJvdXRpbmUuCiMgSWYgeW91IGhhdmUgYSBERU5PUk0gYW5kIGEgTk9STSB3aXRoIG9wcG9zaXRlIHNpZ25zLCB0aGVuIHVzZSBmY21wX25vcm0sIGFsc28uCiMgQnV0IHdpdGggYSBERU5PUk0gYW5kIGEgTk9STSBvZiB0aGUgc2FtZSBzaWduLCB0aGUgbmVnIGJpdCBpcyBzZXQgaWYgdGhlCiMgKDEpIHNpZ25zIGFyZSAoKykgYW5kIHRoZSBERU5PUk0gaXMgdGhlIGRzdCBvcgojICgyKSBzaWducyBhcmUgKC0pIGFuZCB0aGUgREVOT1JNIGlzIHRoZSBzcmMKIwoKZmNtcF9kbnJtX3M6Cgltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCgltb3YubAkJU1JDX0hJKCVhMCksJWQwCglic2V0CQkmMzEsJWQwCQkJIyBERU5PUk0gc3JjOyBtYWtlIGludG8gc21hbGwgbm9ybQoJbW92LmwJCSVkMCxGUF9TQ1IwX0hJKCVhNikKCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKCWxlYQkJRlBfU0NSMCglYTYpLCVhMAoJYnJhLncJCWZjbXBfbm9ybQoKZmNtcF9kbnJtX2Q6Cgltb3YubAkJRFNUX0VYKCVhMSksRlBfU0NSMF9FWCglYTYpCgltb3YubAkJRFNUX0hJKCVhMSksJWQwCglic2V0CQkmMzEsJWQwCQkJIyBERU5PUk0gc3JjOyBtYWtlIGludG8gc21hbGwgbm9ybQoJbW92LmwJCSVkMCxGUF9TQ1IwX0hJKCVhNikKCW1vdi5sCQlEU1RfTE8oJWExKSxGUF9TQ1IwX0xPKCVhNikKCWxlYQkJRlBfU0NSMCglYTYpLCVhMQoJYnJhLncJCWZjbXBfbm9ybQoKZmNtcF9kbnJtX3NkOgoJbW92LncJCURTVF9FWCglYTEpLEZQX1NDUjFfRVgoJWE2KQoJbW92LncJCVNSQ19FWCglYTApLEZQX1NDUjBfRVgoJWE2KQoJbW92LmwJCURTVF9ISSglYTEpLCVkMAoJYnNldAkJJjMxLCVkMAkJCSMgREVOT1JNIGRzdDsgbWFrZSBpbnRvIHNtYWxsIG5vcm0KCW1vdi5sCQklZDAsRlBfU0NSMV9ISSglYTYpCgltb3YubAkJU1JDX0hJKCVhMCksJWQwCglic2V0CQkmMzEsJWQwCQkJIyBERU5PUk0gZHN0OyBtYWtlIGludG8gc21hbGwgbm9ybQoJbW92LmwJCSVkMCxGUF9TQ1IwX0hJKCVhNikKCW1vdi5sCQlEU1RfTE8oJWExKSxGUF9TQ1IxX0xPKCVhNikKCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKCWxlYQkJRlBfU0NSMSglYTYpLCVhMQoJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCglicmEudwkJZmNtcF9ub3JtCgpmY21wX25ybV9kbnJtOgoJbW92LmIJCVNSQ19FWCglYTApLCVkMAkJIyBkZXRlcm1pbmUgaWYgbGlrZSBzaWducwoJbW92LmIJCURTVF9FWCglYTEpLCVkMQoJZW9yLmIJCSVkMCwlZDEKCWJtaS53CQlmY21wX2Rucm1fcwoKIyBzaWducyBhcmUgdGhlIHNhbWUsIHNvIG11c3QgZGV0ZXJtaW5lIHRoZSBhbnN3ZXIgb3Vyc2VsdmVzLgoJdHN0LmIJCSVkMAkJCSMgaXMgc3JjIG9wIG5lZ2F0aXZlPwoJYm1pLmIJCWZjbXBfbnJtX2Rucm1fbQkJIyB5ZXMKCXJ0cwpmY21wX25ybV9kbnJtX206Cgltb3YuYgkJJm5lZ19ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgJ1onIGNjb2RlIGJpdAoJcnRzCgpmY21wX2Rucm1fbnJtOgoJbW92LmIJCVNSQ19FWCglYTApLCVkMAkJIyBkZXRlcm1pbmUgaWYgbGlrZSBzaWducwoJbW92LmIJCURTVF9FWCglYTEpLCVkMQoJZW9yLmIJCSVkMCwlZDEKCWJtaS53CQlmY21wX2Rucm1fZAoKIyBzaWducyBhcmUgdGhlIHNhbWUsIHNvIG11c3QgZGV0ZXJtaW5lIHRoZSBhbnN3ZXIgb3Vyc2VsdmVzLgoJdHN0LmIJCSVkMAkJCSMgaXMgc3JjIG9wIG5lZ2F0aXZlPwoJYnBsLmIJCWZjbXBfZG5ybV9ucm1fbQkJIyBubwoJcnRzCmZjbXBfZG5ybV9ucm1fbToKCW1vdi5iCQkmbmVnX2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCAnWicgY2NvZGUgYml0CglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWZzZ2xtdWwoKTogZW11bGF0ZXMgdGhlIGZzZ2xtdWwgaW5zdHJ1Y3Rpb24JCQkjCiMJCQkJCQkJCQkjCiMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlzY2FsZV90b196ZXJvX3NyYygpIC0gc2NhbGUgc3JjIGV4cG9uZW50IHRvIHplcm8JCSMKIwlzY2FsZV90b196ZXJvX2RzdCgpIC0gc2NhbGUgZHN0IGV4cG9uZW50IHRvIHplcm8JCSMKIwl1bmZfcmVzNCgpIC0gcmV0dXJuIGRlZmF1bHQgdW5kZXJmbG93IHJlc3VsdCBmb3Igc2dsb3AJCSMKIwlvdmZfcmVzKCkgLSByZXR1cm4gZGVmYXVsdCBvdmVyZmxvdyByZXN1bHQJCQkjCiMJcmVzX3FuYW4oKSAtIHJldHVybiBRTkFOIHJlc3VsdAkJCQkJIwojCXJlc19zbmFuKCkgLSByZXR1cm4gU05BTiByZXN1bHQJCQkJCSMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gc291cmNlIG9wZXJhbmQJCSMKIwlhMSA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIGRlc3RpbmF0aW9uIG9wZXJhbmQJCSMKIwlkMCAgcm5kIHByZWMsbW9kZQkJCQkJCSMKIwkJCQkJCQkJCSMKIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWZwMCA9IHJlc3VsdAkJCQkJCQkjCiMJZnAxID0gRVhPUCAoaWYgZXhjZXB0aW9uIG9jY3VycmVkKQkJCQkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlIYW5kbGUgTkFOcywgaW5maW5pdGllcywgYW5kIHplcm9lcyBhcyBzcGVjaWFsIGNhc2VzLiBEaXZpZGUJIwojIG5vcm1zL2Rlbm9ybXMgaW50byBleHQvc2dsL2RibCBwcmVjaXNpb24uCQkJCSMKIwlGb3Igbm9ybXMvZGVub3Jtcywgc2NhbGUgdGhlIGV4cG9uZW50cyBzdWNoIHRoYXQgYSBtdWx0aXBseQkjCiMgaW5zdHJ1Y3Rpb24gd29uJ3QgY2F1c2UgYW4gZXhjZXB0aW9uLiBVc2UgdGhlIHJlZ3VsYXIgZnNnbG11bCB0bwkjCiMgY29tcHV0ZSBhIHJlc3VsdC4gQ2hlY2sgaWYgdGhlIHJlZ3VsYXIgb3BlcmFuZHMgd291bGQgaGF2ZSB0YWtlbgkjCiMgYW4gZXhjZXB0aW9uLiBJZiBzbywgcmV0dXJuIHRoZSBkZWZhdWx0IG92ZXJmbG93L3VuZGVyZmxvdyByZXN1bHQJIwojIGFuZCByZXR1cm4gdGhlIEVYT1AgaWYgZXhjZXB0aW9ucyBhcmUgZW5hYmxlZC4gRWxzZSwgc2NhbGUgdGhlCSMKIyByZXN1bHQgb3BlcmFuZCB0byB0aGUgcHJvcGVyIGV4cG9uZW50LgkJCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCglnbG9iYWwJCWZzZ2xtdWwKZnNnbG11bDoKCW1vdi5sCQklZDAsTF9TQ1IzKCVhNikJCSMgc3RvcmUgcm5kIGluZm8KCgljbHIudwkJJWQxCgltb3YuYgkJRFRBRyglYTYpLCVkMQoJbHNsLmIJCSYweDMsJWQxCglvci5iCQlTVEFHKCVhNiksJWQxCgoJYm5lLncJCWZzZ2xtdWxfbm90X25vcm0JIyBvcHRpbWl6ZSBvbiBub24tbm9ybSBpbnB1dAoKZnNnbG11bF9ub3JtOgoJbW92LncJCURTVF9FWCglYTEpLEZQX1NDUjFfRVgoJWE2KQoJbW92LmwJCURTVF9ISSglYTEpLEZQX1NDUjFfSEkoJWE2KQoJbW92LmwJCURTVF9MTyglYTEpLEZQX1NDUjFfTE8oJWE2KQoKCW1vdi53CQlTUkNfRVgoJWEwKSxGUF9TQ1IwX0VYKCVhNikKCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikKCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKCglic3IubAkJc2NhbGVfdG9femVyb19zcmMJIyBzY2FsZSBleHBvbmVudAoJbW92LmwJCSVkMCwtKCVzcCkJCSMgc2F2ZSBzY2FsZSBmYWN0b3IgMQoKCWJzci5sCQlzY2FsZV90b196ZXJvX2RzdAkjIHNjYWxlIGRzdCBleHBvbmVudAoKCWFkZC5sCQkoJXNwKSssJWQwCQkjIFNDQUxFX0ZBQ1RPUiA9IHNjYWxlMSArIHNjYWxlMgoKCWNtcGkubAkJJWQwLCYweDNmZmYtMHg3ZmZlCSMgd291bGQgcmVzdWx0IG92Zmw/CgliZXEudwkJZnNnbG11bF9tYXlfb3ZmbAkjIHJlc3VsdCBtYXkgcm5kIHRvIG92ZXJmbG93CglibHQudwkJZnNnbG11bF9vdmZsCQkjIHJlc3VsdCB3aWxsIG92ZXJmbG93CgoJY21waS5sCQklZDAsJjB4M2ZmZisweDAwMDEJIyB3b3VsZCByZXN1bHQgdW5mbD8KCWJlcS53CQlmc2dsbXVsX21heV91bmZsCSMgcmVzdWx0IG1heSBybmQgdG8gbm8gdW5mbAoJYmd0LncJCWZzZ2xtdWxfdW5mbAkJIyByZXN1bHQgd2lsbCB1bmRlcmZsb3cKCmZzZ2xtdWxfbm9ybWFsOgoJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3AKCglmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCgoJZnNnbG11bC54CUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBzZ2wgbXVsdGlwbHkKCglmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIHN0YXR1cwoJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKCglvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KCmZzZ2xtdWxfbm9ybWFsX2V4aXQ6CglmbW92bS54CQkmMHg4MCxGUF9TQ1IwKCVhNikJIyBzdG9yZSBvdXQgcmVzdWx0Cgltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCgltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGxvYWQge3NnbixleHB9Cgltb3YubAkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgoJYW5kaS53CQkmMHg4MDAwLCVkMgkJIyBrZWVwIG9sZCBzaWduCglzdWIubAkJJWQwLCVkMQkJCSMgYWRkIHNjYWxlIGZhY3RvcgoJb3IudwkJJWQyLCVkMQkJCSMgY29uY2F0IG9sZCBzaWduLG5ldyBleHAKCW1vdi53CQklZDEsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAoJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgoJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDgwCSMgcmV0dXJuIHJlc3VsdCBpbiBmcDAKCXJ0cwoKZnNnbG11bF9vdmZsOgoJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3AKCglmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCgoJZnNnbG11bC54CUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBzZ2wgbXVsdGlwbHkKCglmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIHN0YXR1cwoJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKCglvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KCmZzZ2xtdWxfb3ZmbF90c3Q6CgojIHNhdmUgc2V0dGluZyB0aGlzIHVudGlsIG5vdyBiZWNhdXNlIHRoaXMgaXMgd2hlcmUgZnNnbG11bF9tYXlfb3ZmbCBtYXkganVtcCBpbgoJb3IubAkJJm92ZmxfaW54X21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IG92ZmwvYW92ZmwvYWluZXgKCgltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDEKCWFuZGkuYgkJJjB4MTMsJWQxCQkjIGlzIE9WRkwgb3IgSU5FWCBlbmFibGVkPwoJYm5lLmIJCWZzZ2xtdWxfb3ZmbF9lbmEJIyB5ZXMKCmZzZ2xtdWxfb3ZmbF9kaXM6CglidHN0CQkmbmVnX2JpdCxGUFNSX0NDKCVhNikJIyBpcyByZXN1bHQgbmVnYXRpdmU/CglzbmUJCSVkMQkJCSMgc2V0IHNpZ24gcGFyYW0gYWNjb3JkaW5nbHkKCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDAJCSMgcGFzcyBwcmVjOnJuZAoJYW5kaS5iCQkmMHgzMCwlZDAJCSMgZm9yY2UgcHJlYyA9IGV4dAoJYnNyLmwJCW92Zl9yZXMJCQkjIGNhbGN1bGF0ZSBkZWZhdWx0IHJlc3VsdAoJb3IuYgkJJWQwLEZQU1JfQ0MoJWE2KQkjIHNldCBJTkYsTiBpZiBhcHBsaWNhYmxlCglmbW92bS54CQkoJWEwKSwmMHg4MAkJIyByZXR1cm4gZGVmYXVsdCByZXN1bHQgaW4gZnAwCglydHMKCmZzZ2xtdWxfb3ZmbF9lbmE6CglmbW92bS54CQkmMHg4MCxGUF9TQ1IwKCVhNikJIyBtb3ZlIHJlc3VsdCB0byBzdGFjawoKCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgZmV0Y2gge3NnbixleHB9Cgltb3YubAkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgoJc3ViLmwJCSVkMCwlZDEJCQkjIGFkZCBzY2FsZSBmYWN0b3IKCXN1YmkubAkJJjB4NjAwMCwlZDEJCSMgc3VidHJhY3QgYmlhcwoJYW5kaS53CQkmMHg3ZmZmLCVkMQoJYW5kaS53CQkmMHg4MDAwLCVkMgkJIyBrZWVwIG9sZCBzaWduCglvci53CQklZDIsJWQxCQkJIyBjb25jYXQgb2xkIHNpZ24sbmV3IGV4cAoJbW92LncJCSVkMSxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50Cgltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCglmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4NDAJIyByZXR1cm4gRVhPUCBpbiBmcDEKCWJyYS5iCQlmc2dsbXVsX292ZmxfZGlzCgpmc2dsbXVsX21heV9vdmZsOgoJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3AKCglmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCgoJZnNnbG11bC54CUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBzZ2wgbXVsdGlwbHkKCglmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIHN0YXR1cwoJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKCglvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KCglmYWJzLngJCSVmcDAsJWZwMQkJIyBtYWtlIGEgY29weSBvZiByZXN1bHQKCWZjbXAuYgkJJWZwMSwmMHgyCQkjIGlzIHxyZXN1bHR8ID49IDIuYj8KCWZiZ2UudwkJZnNnbG11bF9vdmZsX3RzdAkjIHllczsgb3ZlcmZsb3cgaGFzIG9jY3VycmVkCgojIG5vLCBpdCBkaWRuJ3Qgb3ZlcmZsb3c7IHdlIGhhdmUgY29ycmVjdCByZXN1bHQKCWJyYS53CQlmc2dsbXVsX25vcm1hbF9leGl0Cgpmc2dsbXVsX3VuZmw6Cglic2V0CQkmdW5mbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIHNldCB1bmZsIGV4YyBiaXQKCglmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4ODAJIyBsb2FkIGRzdCBvcAoKCWZtb3YubAkJJnJ6X21vZGUqMHgxMCwlZnBjcgkjIHNldCBGUENSCglmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgoKCWZzZ2xtdWwueAlGUF9TQ1IwKCVhNiksJWZwMAkjIGV4ZWN1dGUgc2dsIG11bHRpcGx5CgoJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBzdGF0dXMKCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCgoJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCgoJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCglhbmRpLmIJCSYweDBiLCVkMQkJIyBpcyBVTkZMIG9yIElORVggZW5hYmxlZD8KCWJuZS5iCQlmc2dsbXVsX3VuZmxfZW5hCSMgeWVzCgpmc2dsbXVsX3VuZmxfZGlzOgoJZm1vdm0ueAkJJjB4ODAsRlBfU0NSMCglYTYpCSMgc3RvcmUgb3V0IHJlc3VsdAoKCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHJlc3VsdCBhZGRyCgltb3YubAkJTF9TQ1IzKCVhNiksJWQxCQkjIHBhc3M6IHJuZCBwcmVjLG1vZGUKCWJzci5sCQl1bmZfcmVzNAkJIyBjYWxjdWxhdGUgZGVmYXVsdCByZXN1bHQKCW9yLmIJCSVkMCxGUFNSX0NDKCVhNikJIyAnWicgYml0IG1heSBoYXZlIGJlZW4gc2V0CglmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4ODAJIyByZXR1cm4gZGVmYXVsdCByZXN1bHQgaW4gZnAwCglydHMKCiMKIyBVTkZMIGlzIGVuYWJsZWQuCiMKZnNnbG11bF91bmZsX2VuYToKCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg0MAkjIGxvYWQgZHN0IG9wCgoJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCglmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgoKCWZzZ2xtdWwueAlGUF9TQ1IwKCVhNiksJWZwMQkjIGV4ZWN1dGUgc2dsIG11bHRpcGx5CgoJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKCglmbW92bS54CQkmMHg0MCxGUF9TQ1IwKCVhNikJIyBzYXZlIHJlc3VsdCB0byBzdGFjawoJbW92LmwJCSVkMiwtKCVzcCkJCSMgc2F2ZSBkMgoJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBmZXRjaCB7c2duLGV4cH0KCW1vdi5sCQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQoJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCglhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KCXN1Yi5sCQklZDAsJWQxCQkJIyBhZGQgc2NhbGUgZmFjdG9yCglhZGRpLmwJCSYweDYwMDAsJWQxCQkjIGFkZCBiaWFzCglhbmRpLncJCSYweDdmZmYsJWQxCglvci53CQklZDIsJWQxCQkJIyBjb25jYXQgb2xkIHNpZ24sbmV3IGV4cAoJbW92LncJCSVkMSxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50Cgltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCglmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4NDAJIyByZXR1cm4gRVhPUCBpbiBmcDEKCWJyYS53CQlmc2dsbXVsX3VuZmxfZGlzCgpmc2dsbXVsX21heV91bmZsOgoJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3AKCglmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCgoJZnNnbG11bC54CUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBzZ2wgbXVsdGlwbHkKCglmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIHN0YXR1cwoJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKCglvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KCglmYWJzLngJCSVmcDAsJWZwMQkJIyBtYWtlIGEgY29weSBvZiByZXN1bHQKCWZjbXAuYgkJJWZwMSwmMHgyCQkjIGlzIHxyZXN1bHR8ID4gMi5iPwoJZmJndC53CQlmc2dsbXVsX25vcm1hbF9leGl0CSMgbm87IG5vIHVuZGVyZmxvdyBvY2N1cnJlZAoJZmJsdC53CQlmc2dsbXVsX3VuZmwJCSMgeWVzOyB1bmRlcmZsb3cgb2NjdXJyZWQKCiMKIyB3ZSBzdGlsbCBkb24ndCBrbm93IGlmIHVuZGVyZmxvdyBvY2N1cnJlZC4gcmVzdWx0IGlzIH4gZXF1YWwgdG8gMi4gYnV0LAojIHdlIGRvbid0IGtub3cgaWYgdGhlIHJlc3VsdCB3YXMgYW4gdW5kZXJmbG93IHRoYXQgcm91bmRlZCB1cCB0byBhIDIgb3IKIyBhIG5vcm1hbGl6ZWQgbnVtYmVyIHRoYXQgcm91bmRlZCBkb3duIHRvIGEgMi4gc28sIHJlZG8gdGhlIGVudGlyZSBvcGVyYXRpb24KIyB1c2luZyBSWiBhcyB0aGUgcm91bmRpbmcgbW9kZSB0byBzZWUgd2hhdCB0aGUgcHJlLXJvdW5kZWQgcmVzdWx0IGlzLgojIHRoaXMgY2FzZSBzaG91bGQgYmUgcmVsYXRpdmVseSByYXJlLgojCglmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4NDAJIyBsb2FkIGRzdCBvcCBpbnRvIGZwMQoKCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEKCWFuZGkuYgkJJjB4YzAsJWQxCQkjIGtlZXAgcm5kIHByZWMKCW9yaS5iCQkmcnpfbW9kZSoweDEwLCVkMQkjIGluc2VydCBSWgoKCWZtb3YubAkJJWQxLCVmcGNyCQkjIHNldCBGUENSCglmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgoKCWZzZ2xtdWwueAlGUF9TQ1IwKCVhNiksJWZwMQkjIGV4ZWN1dGUgc2dsIG11bHRpcGx5CgoJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKCWZhYnMueAkJJWZwMQkJCSMgbWFrZSBhYnNvbHV0ZSB2YWx1ZQoJZmNtcC5iCQklZnAxLCYweDIJCSMgaXMgfHJlc3VsdHwgPCAyLmI/CglmYmdlLncJCWZzZ2xtdWxfbm9ybWFsX2V4aXQJIyBubzsgbm8gdW5kZXJmbG93IG9jY3VycmVkCglicmEudwkJZnNnbG11bF91bmZsCQkjIHllcywgdW5kZXJmbG93IG9jY3VycmVkCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMKIyBTaW5nbGUgUHJlY2lzaW9uIE11bHRpcGx5OiBpbnB1dHMgYXJlIG5vdCBib3RoIG5vcm1hbGl6ZWQ7IHdoYXQgYXJlIHRoZXk/CiMKZnNnbG11bF9ub3Rfbm9ybToKCW1vdi53CQkodGJsX2ZzZ2xtdWxfb3AuYiwlcGMsJWQxLncqMiksJWQxCglqbXAJCSh0YmxfZnNnbG11bF9vcC5iLCVwYywlZDEudyoxKQoKCXN3YmVnCQkmNDgKdGJsX2ZzZ2xtdWxfb3A6CglzaG9ydAkJZnNnbG11bF9ub3JtCQktIHRibF9mc2dsbXVsX29wICMgTk9STSB4IE5PUk0KCXNob3J0CQlmc2dsbXVsX3plcm8JCS0gdGJsX2ZzZ2xtdWxfb3AgIyBOT1JNIHggWkVSTwoJc2hvcnQJCWZzZ2xtdWxfaW5mX3NyYwkJLSB0YmxfZnNnbG11bF9vcCAjIE5PUk0geCBJTkYKCXNob3J0CQlmc2dsbXVsX3Jlc19xbmFuCS0gdGJsX2ZzZ2xtdWxfb3AgIyBOT1JNIHggUU5BTgoJc2hvcnQJCWZzZ2xtdWxfbm9ybQkJLSB0YmxfZnNnbG11bF9vcCAjIE5PUk0geCBERU5PUk0KCXNob3J0CQlmc2dsbXVsX3Jlc19zbmFuCS0gdGJsX2ZzZ2xtdWxfb3AgIyBOT1JNIHggU05BTgoJc2hvcnQJCXRibF9mc2dsbXVsX29wCQktIHRibF9mc2dsbXVsX29wICMKCXNob3J0CQl0YmxfZnNnbG11bF9vcAkJLSB0YmxfZnNnbG11bF9vcCAjCgoJc2hvcnQJCWZzZ2xtdWxfemVybwkJLSB0YmxfZnNnbG11bF9vcCAjIFpFUk8geCBOT1JNCglzaG9ydAkJZnNnbG11bF96ZXJvCQktIHRibF9mc2dsbXVsX29wICMgWkVSTyB4IFpFUk8KCXNob3J0CQlmc2dsbXVsX3Jlc19vcGVycgktIHRibF9mc2dsbXVsX29wICMgWkVSTyB4IElORgoJc2hvcnQJCWZzZ2xtdWxfcmVzX3FuYW4JLSB0YmxfZnNnbG11bF9vcCAjIFpFUk8geCBRTkFOCglzaG9ydAkJZnNnbG11bF96ZXJvCQktIHRibF9mc2dsbXVsX29wICMgWkVSTyB4IERFTk9STQoJc2hvcnQJCWZzZ2xtdWxfcmVzX3NuYW4JLSB0YmxfZnNnbG11bF9vcCAjIFpFUk8geCBTTkFOCglzaG9ydAkJdGJsX2ZzZ2xtdWxfb3AJCS0gdGJsX2ZzZ2xtdWxfb3AgIwoJc2hvcnQJCXRibF9mc2dsbXVsX29wCQktIHRibF9mc2dsbXVsX29wICMKCglzaG9ydAkJZnNnbG11bF9pbmZfZHN0CQktIHRibF9mc2dsbXVsX29wICMgSU5GIHggTk9STQoJc2hvcnQJCWZzZ2xtdWxfcmVzX29wZXJyCS0gdGJsX2ZzZ2xtdWxfb3AgIyBJTkYgeCBaRVJPCglzaG9ydAkJZnNnbG11bF9pbmZfZHN0CQktIHRibF9mc2dsbXVsX29wICMgSU5GIHggSU5GCglzaG9ydAkJZnNnbG11bF9yZXNfcW5hbgktIHRibF9mc2dsbXVsX29wICMgSU5GIHggUU5BTgoJc2hvcnQJCWZzZ2xtdWxfaW5mX2RzdAkJLSB0YmxfZnNnbG11bF9vcCAjIElORiB4IERFTk9STQoJc2hvcnQJCWZzZ2xtdWxfcmVzX3NuYW4JLSB0YmxfZnNnbG11bF9vcCAjIElORiB4IFNOQU4KCXNob3J0CQl0YmxfZnNnbG11bF9vcAkJLSB0YmxfZnNnbG11bF9vcCAjCglzaG9ydAkJdGJsX2ZzZ2xtdWxfb3AJCS0gdGJsX2ZzZ2xtdWxfb3AgIwoKCXNob3J0CQlmc2dsbXVsX3Jlc19xbmFuCS0gdGJsX2ZzZ2xtdWxfb3AgIyBRTkFOIHggTk9STQoJc2hvcnQJCWZzZ2xtdWxfcmVzX3FuYW4JLSB0YmxfZnNnbG11bF9vcCAjIFFOQU4geCBaRVJPCglzaG9ydAkJZnNnbG11bF9yZXNfcW5hbgktIHRibF9mc2dsbXVsX29wICMgUU5BTiB4IElORgoJc2hvcnQJCWZzZ2xtdWxfcmVzX3FuYW4JLSB0YmxfZnNnbG11bF9vcCAjIFFOQU4geCBRTkFOCglzaG9ydAkJZnNnbG11bF9yZXNfcW5hbgktIHRibF9mc2dsbXVsX29wICMgUU5BTiB4IERFTk9STQoJc2hvcnQJCWZzZ2xtdWxfcmVzX3NuYW4JLSB0YmxfZnNnbG11bF9vcCAjIFFOQU4geCBTTkFOCglzaG9ydAkJdGJsX2ZzZ2xtdWxfb3AJCS0gdGJsX2ZzZ2xtdWxfb3AgIwoJc2hvcnQJCXRibF9mc2dsbXVsX29wCQktIHRibF9mc2dsbXVsX29wICMKCglzaG9ydAkJZnNnbG11bF9ub3JtCQktIHRibF9mc2dsbXVsX29wICMgTk9STSB4IE5PUk0KCXNob3J0CQlmc2dsbXVsX3plcm8JCS0gdGJsX2ZzZ2xtdWxfb3AgIyBOT1JNIHggWkVSTwoJc2hvcnQJCWZzZ2xtdWxfaW5mX3NyYwkJLSB0YmxfZnNnbG11bF9vcCAjIE5PUk0geCBJTkYKCXNob3J0CQlmc2dsbXVsX3Jlc19xbmFuCS0gdGJsX2ZzZ2xtdWxfb3AgIyBOT1JNIHggUU5BTgoJc2hvcnQJCWZzZ2xtdWxfbm9ybQkJLSB0YmxfZnNnbG11bF9vcCAjIE5PUk0geCBERU5PUk0KCXNob3J0CQlmc2dsbXVsX3Jlc19zbmFuCS0gdGJsX2ZzZ2xtdWxfb3AgIyBOT1JNIHggU05BTgoJc2hvcnQJCXRibF9mc2dsbXVsX29wCQktIHRibF9mc2dsbXVsX29wICMKCXNob3J0CQl0YmxfZnNnbG11bF9vcAkJLSB0YmxfZnNnbG11bF9vcCAjCgoJc2hvcnQJCWZzZ2xtdWxfcmVzX3NuYW4JLSB0YmxfZnNnbG11bF9vcCAjIFNOQU4geCBOT1JNCglzaG9ydAkJZnNnbG11bF9yZXNfc25hbgktIHRibF9mc2dsbXVsX29wICMgU05BTiB4IFpFUk8KCXNob3J0CQlmc2dsbXVsX3Jlc19zbmFuCS0gdGJsX2ZzZ2xtdWxfb3AgIyBTTkFOIHggSU5GCglzaG9ydAkJZnNnbG11bF9yZXNfc25hbgktIHRibF9mc2dsbXVsX29wICMgU05BTiB4IFFOQU4KCXNob3J0CQlmc2dsbXVsX3Jlc19zbmFuCS0gdGJsX2ZzZ2xtdWxfb3AgIyBTTkFOIHggREVOT1JNCglzaG9ydAkJZnNnbG11bF9yZXNfc25hbgktIHRibF9mc2dsbXVsX29wICMgU05BTiB4IFNOQU4KCXNob3J0CQl0YmxfZnNnbG11bF9vcAkJLSB0YmxfZnNnbG11bF9vcCAjCglzaG9ydAkJdGJsX2ZzZ2xtdWxfb3AJCS0gdGJsX2ZzZ2xtdWxfb3AgIwoKZnNnbG11bF9yZXNfb3BlcnI6CglicmEubAkJcmVzX29wZXJyCmZzZ2xtdWxfcmVzX3NuYW46CglicmEubAkJcmVzX3NuYW4KZnNnbG11bF9yZXNfcW5hbjoKCWJyYS5sCQlyZXNfcW5hbgpmc2dsbXVsX3plcm86CglicmEubAkJZm11bF96ZXJvCmZzZ2xtdWxfaW5mX3NyYzoKCWJyYS5sCQlmbXVsX2luZl9zcmMKZnNnbG11bF9pbmZfZHN0OgoJYnJhLmwJCWZtdWxfaW5mX2RzdAoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJZnNnbGRpdigpOiBlbXVsYXRlcyB0aGUgZnNnbGRpdiBpbnN0cnVjdGlvbgkJCSMKIwkJCQkJCQkJCSMKIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCXNjYWxlX3RvX3plcm9fc3JjKCkgLSBzY2FsZSBzcmMgZXhwb25lbnQgdG8gemVybwkJIwojCXNjYWxlX3RvX3plcm9fZHN0KCkgLSBzY2FsZSBkc3QgZXhwb25lbnQgdG8gemVybwkJIwojCXVuZl9yZXM0KCkgLSByZXR1cm4gZGVmYXVsdCB1bmRlcmZsb3cgcmVzdWx0IGZvciBzZ2xvcAkJIwojCW92Zl9yZXMoKSAtIHJldHVybiBkZWZhdWx0IG92ZXJmbG93IHJlc3VsdAkJCSMKIwlyZXNfcW5hbigpIC0gcmV0dXJuIFFOQU4gcmVzdWx0CQkJCQkjCiMJcmVzX3NuYW4oKSAtIHJldHVybiBTTkFOIHJlc3VsdAkJCQkJIwojCQkJCQkJCQkJIwojIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBzb3VyY2Ugb3BlcmFuZAkJIwojCWExID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gZGVzdGluYXRpb24gb3BlcmFuZAkJIwojCWQwICBybmQgcHJlYyxtb2RlCQkJCQkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJZnAwID0gcmVzdWx0CQkJCQkJCSMKIwlmcDEgPSBFWE9QIChpZiBleGNlcHRpb24gb2NjdXJyZWQpCQkJCSMKIwkJCQkJCQkJCSMKIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCUhhbmRsZSBOQU5zLCBpbmZpbml0aWVzLCBhbmQgemVyb2VzIGFzIHNwZWNpYWwgY2FzZXMuIERpdmlkZQkjCiMgbm9ybXMvZGVub3JtcyBpbnRvIGV4dC9zZ2wvZGJsIHByZWNpc2lvbi4JCQkJIwojCUZvciBub3Jtcy9kZW5vcm1zLCBzY2FsZSB0aGUgZXhwb25lbnRzIHN1Y2ggdGhhdCBhIGRpdmlkZQkjCiMgaW5zdHJ1Y3Rpb24gd29uJ3QgY2F1c2UgYW4gZXhjZXB0aW9uLiBVc2UgdGhlIHJlZ3VsYXIgZnNnbGRpdiB0bwkjCiMgY29tcHV0ZSBhIHJlc3VsdC4gQ2hlY2sgaWYgdGhlIHJlZ3VsYXIgb3BlcmFuZHMgd291bGQgaGF2ZSB0YWtlbgkjCiMgYW4gZXhjZXB0aW9uLiBJZiBzbywgcmV0dXJuIHRoZSBkZWZhdWx0IG92ZXJmbG93L3VuZGVyZmxvdyByZXN1bHQJIwojIGFuZCByZXR1cm4gdGhlIEVYT1AgaWYgZXhjZXB0aW9ucyBhcmUgZW5hYmxlZC4gRWxzZSwgc2NhbGUgdGhlCSMKIyByZXN1bHQgb3BlcmFuZCB0byB0aGUgcHJvcGVyIGV4cG9uZW50LgkJCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCglnbG9iYWwJCWZzZ2xkaXYKZnNnbGRpdjoKCW1vdi5sCQklZDAsTF9TQ1IzKCVhNikJCSMgc3RvcmUgcm5kIGluZm8KCgljbHIudwkJJWQxCgltb3YuYgkJRFRBRyglYTYpLCVkMQoJbHNsLmIJCSYweDMsJWQxCglvci5iCQlTVEFHKCVhNiksJWQxCQkjIGNvbWJpbmUgc3JjIHRhZ3MKCglibmUudwkJZnNnbGRpdl9ub3Rfbm9ybQkjIG9wdGltaXplIG9uIG5vbi1ub3JtIGlucHV0CgojCiMgRElWSURFOiBOT1JNcyBhbmQgREVOT1JNcyBPTkxZIQojCmZzZ2xkaXZfbm9ybToKCW1vdi53CQlEU1RfRVgoJWExKSxGUF9TQ1IxX0VYKCVhNikKCW1vdi5sCQlEU1RfSEkoJWExKSxGUF9TQ1IxX0hJKCVhNikKCW1vdi5sCQlEU1RfTE8oJWExKSxGUF9TQ1IxX0xPKCVhNikKCgltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCgltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCgltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCgoJYnNyLmwJCXNjYWxlX3RvX3plcm9fc3JjCSMgY2FsY3VsYXRlIHNjYWxlIGZhY3RvciAxCgltb3YubAkJJWQwLC0oJXNwKQkJIyBzYXZlIHNjYWxlIGZhY3RvciAxCgoJYnNyLmwJCXNjYWxlX3RvX3plcm9fZHN0CSMgY2FsY3VsYXRlIHNjYWxlIGZhY3RvciAyCgoJbmVnLmwJCSglc3ApCQkJIyBTLkYuID0gc2NhbGUxIC0gc2NhbGUyCglhZGQubAkJJWQwLCglc3ApCgoJbW92LncJCTIrTF9TQ1IzKCVhNiksJWQxCSMgZmV0Y2ggcHJlY2lzaW9uLG1vZGUKCWxzci5iCQkmMHg2LCVkMQoJbW92LmwJCSglc3ApKywlZDAKCWNtcGkubAkJJWQwLCYweDNmZmYtMHg3ZmZlCglibGUudwkJZnNnbGRpdl9tYXlfb3ZmbAoKCWNtcGkubAkJJWQwLCYweDNmZmYtMHgwMDAwCSMgd2lsbCByZXN1bHQgdW5kZXJmbG93PwoJYmVxLncJCWZzZ2xkaXZfbWF5X3VuZmwJIyBtYXliZQoJYmd0LncJCWZzZ2xkaXZfdW5mbAkJIyB5ZXM7IGdvIGhhbmRsZSB1bmRlcmZsb3cKCmZzZ2xkaXZfbm9ybWFsOgoJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3AKCglmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2F2ZSBGUENSCglmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgoKCWZzZ2xkaXYueAlGUF9TQ1IwKCVhNiksJWZwMAkjIHBlcmZvcm0gc2dsIGRpdmlkZQoKCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgRlBTUgoJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKCglvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KCmZzZ2xkaXZfbm9ybWFsX2V4aXQ6CglmbW92bS54CQkmMHg4MCxGUF9TQ1IwKCVhNikJIyBzdG9yZSByZXN1bHQgb24gc3RhY2sKCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgbG9hZCB7c2duLGV4cH0KCW1vdi5sCQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQoJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCglhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KCXN1Yi5sCQklZDAsJWQxCQkJIyBhZGQgc2NhbGUgZmFjdG9yCglvci53CQklZDIsJWQxCQkJIyBjb25jYXQgb2xkIHNpZ24sbmV3IGV4cAoJbW92LncJCSVkMSxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50Cgltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCglmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4ODAJIyByZXR1cm4gcmVzdWx0IGluIGZwMAoJcnRzCgpmc2dsZGl2X21heV9vdmZsOgoJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3AKCglmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBzZXQgRlBTUgoKCWZzZ2xkaXYueAlGUF9TQ1IwKCVhNiksJWZwMAkjIGV4ZWN1dGUgZGl2aWRlCgoJZm1vdi5sCQklZnBzciwlZDEKCWZtb3YubAkJJjB4MCwlZnBjcgoKCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWCxOCgoJZm1vdm0ueAkJJjB4MDEsLSglc3ApCQkjIHNhdmUgcmVzdWx0IHRvIHN0YWNrCgltb3YudwkJKCVzcCksJWQxCQkjIGZldGNoIG5ldyBleHBvbmVudAoJYWRkLmwJCSYweGMsJXNwCQkjIGNsZWFyIHJlc3VsdAoJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCglzdWIubAkJJWQwLCVkMQkJCSMgYWRkIHNjYWxlIGZhY3RvcgoJY21wLmwJCSVkMSwmMHg3ZmZmCQkjIGRpZCBkaXZpZGUgb3ZlcmZsb3c/CglibHQuYgkJZnNnbGRpdl9ub3JtYWxfZXhpdAoKZnNnbGRpdl9vdmZsX3RzdDoKCW9yLncJCSZvdmZsX2lueF9tYXNrLDIrVVNFUl9GUFNSKCVhNikgIyBzZXQgb3ZmbC9hb3ZmbC9haW5leAoKCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMQoJYW5kaS5iCQkmMHgxMywlZDEJCSMgaXMgT1ZGTCBvciBJTkVYIGVuYWJsZWQ/CglibmUuYgkJZnNnbGRpdl9vdmZsX2VuYQkjIHllcwoKZnNnbGRpdl9vdmZsX2RpczoKCWJ0c3QJCSZuZWdfYml0LEZQU1JfQ0MoJWE2KQkjIGlzIHJlc3VsdCBuZWdhdGl2ZQoJc25lCQklZDEJCQkjIHNldCBzaWduIHBhcmFtIGFjY29yZGluZ2x5Cgltb3YubAkJTF9TQ1IzKCVhNiksJWQwCQkjIHBhc3MgcHJlYzpybmQKCWFuZGkuYgkJJjB4MzAsJWQwCQkjIGtpbGwgcHJlY2lzaW9uCglic3IubAkJb3ZmX3JlcwkJCSMgY2FsY3VsYXRlIGRlZmF1bHQgcmVzdWx0Cglvci5iCQklZDAsRlBTUl9DQyglYTYpCSMgc2V0IElORiBpZiBhcHBsaWNhYmxlCglmbW92bS54CQkoJWEwKSwmMHg4MAkJIyByZXR1cm4gZGVmYXVsdCByZXN1bHQgaW4gZnAwCglydHMKCmZzZ2xkaXZfb3ZmbF9lbmE6CglmbW92bS54CQkmMHg4MCxGUF9TQ1IwKCVhNikJIyBtb3ZlIHJlc3VsdCB0byBzdGFjawoKCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgZmV0Y2gge3NnbixleHB9Cgltb3YubAkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgoJYW5kaS53CQkmMHg4MDAwLCVkMgkJIyBrZWVwIG9sZCBzaWduCglzdWIubAkJJWQwLCVkMQkJCSMgYWRkIHNjYWxlIGZhY3RvcgoJc3ViaS5sCQkmMHg2MDAwLCVkMQkJIyBzdWJ0cmFjdCBuZXcgYmlhcwoJYW5kaS53CQkmMHg3ZmZmLCVkMQkJIyBjbGVhciBtcyBiaXQKCW9yLncJCSVkMiwlZDEJCQkjIGNvbmNhdCBvbGQgc2lnbixuZXcgZXhwCgltb3YudwkJJWQxLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwb25lbnQKCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg0MAkjIHJldHVybiBFWE9QIGluIGZwMQoJYnJhLmIJCWZzZ2xkaXZfb3ZmbF9kaXMKCmZzZ2xkaXZfdW5mbDoKCWJzZXQJCSZ1bmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgc2V0IHVuZmwgZXhjIGJpdAoKCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wCgoJZm1vdi5sCQkmcnpfbW9kZSoweDEwLCVmcGNyCSMgc2V0IEZQQ1IKCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCgoJZnNnbGRpdi54CUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBzZ2wgZGl2aWRlCgoJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBzdGF0dXMKCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCgoJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCgoJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCglhbmRpLmIJCSYweDBiLCVkMQkJIyBpcyBVTkZMIG9yIElORVggZW5hYmxlZD8KCWJuZS5iCQlmc2dsZGl2X3VuZmxfZW5hCSMgeWVzCgpmc2dsZGl2X3VuZmxfZGlzOgoJZm1vdm0ueAkJJjB4ODAsRlBfU0NSMCglYTYpCSMgc3RvcmUgb3V0IHJlc3VsdAoKCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHJlc3VsdCBhZGRyCgltb3YubAkJTF9TQ1IzKCVhNiksJWQxCQkjIHBhc3M6IHJuZCBwcmVjLG1vZGUKCWJzci5sCQl1bmZfcmVzNAkJIyBjYWxjdWxhdGUgZGVmYXVsdCByZXN1bHQKCW9yLmIJCSVkMCxGUFNSX0NDKCVhNikJIyAnWicgYml0IG1heSBoYXZlIGJlZW4gc2V0CglmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4ODAJIyByZXR1cm4gZGVmYXVsdCByZXN1bHQgaW4gZnAwCglydHMKCiMKIyBVTkZMIGlzIGVuYWJsZWQuCiMKZnNnbGRpdl91bmZsX2VuYToKCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg0MAkjIGxvYWQgZHN0IG9wCgoJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCglmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgoKCWZzZ2xkaXYueAlGUF9TQ1IwKCVhNiksJWZwMQkjIGV4ZWN1dGUgc2dsIGRpdmlkZQoKCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCgoJZm1vdm0ueAkJJjB4NDAsRlBfU0NSMCglYTYpCSMgc2F2ZSByZXN1bHQgdG8gc3RhY2sKCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgZmV0Y2gge3NnbixleHB9Cgltb3YubAkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgoJYW5kaS53CQkmMHg4MDAwLCVkMgkJIyBrZWVwIG9sZCBzaWduCglzdWIubAkJJWQwLCVkMQkJCSMgYWRkIHNjYWxlIGZhY3RvcgoJYWRkaS5sCQkmMHg2MDAwLCVkMQkJIyBhZGQgYmlhcwoJYW5kaS53CQkmMHg3ZmZmLCVkMQkJIyBjbGVhciB0b3AgYml0Cglvci53CQklZDIsJWQxCQkJIyBjb25jYXQgb2xkIHNpZ24sIG5ldyBleHAKCW1vdi53CQklZDEsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAoJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgoJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDQwCSMgcmV0dXJuIEVYT1AgaW4gZnAxCglicmEuYgkJZnNnbGRpdl91bmZsX2RpcwoKIwojIHRoZSBkaXZpZGUgb3BlcmF0aW9uIE1BWSB1bmRlcmZsb3c6CiMKZnNnbGRpdl9tYXlfdW5mbDoKCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wCgoJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCglmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgoKCWZzZ2xkaXYueAlGUF9TQ1IwKCVhNiksJWZwMAkjIGV4ZWN1dGUgc2dsIGRpdmlkZQoKCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgc3RhdHVzCglmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgoKCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgoKCWZhYnMueAkJJWZwMCwlZnAxCQkjIG1ha2UgYSBjb3B5IG9mIHJlc3VsdAoJZmNtcC5iCQklZnAxLCYweDEJCSMgaXMgfHJlc3VsdHwgPiAxLmI/CglmYmd0LncJCWZzZ2xkaXZfbm9ybWFsX2V4aXQJIyBubzsgbm8gdW5kZXJmbG93IG9jY3VycmVkCglmYmx0LncJCWZzZ2xkaXZfdW5mbAkJIyB5ZXM7IHVuZGVyZmxvdyBvY2N1cnJlZAoKIwojIHdlIHN0aWxsIGRvbid0IGtub3cgaWYgdW5kZXJmbG93IG9jY3VycmVkLiByZXN1bHQgaXMgfiBlcXVhbCB0byAxLiBidXQsCiMgd2UgZG9uJ3Qga25vdyBpZiB0aGUgcmVzdWx0IHdhcyBhbiB1bmRlcmZsb3cgdGhhdCByb3VuZGVkIHVwIHRvIGEgMQojIG9yIGEgbm9ybWFsaXplZCBudW1iZXIgdGhhdCByb3VuZGVkIGRvd24gdG8gYSAxLiBzbywgcmVkbyB0aGUgZW50aXJlCiMgb3BlcmF0aW9uIHVzaW5nIFJaIGFzIHRoZSByb3VuZGluZyBtb2RlIHRvIHNlZSB3aGF0IHRoZSBwcmUtcm91bmRlZAojIHJlc3VsdCBpcy4gdGhpcyBjYXNlIHNob3VsZCBiZSByZWxhdGl2ZWx5IHJhcmUuCiMKCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg0MAkjIGxvYWQgZHN0IG9wIGludG8gJWZwMQoKCWNsci5sCQklZDEJCQkjIGNsZWFyIHNjcmF0Y2ggcmVnaXN0ZXIKCW9yaS5iCQkmcnpfbW9kZSoweDEwLCVkMQkjIGZvcmNlIFJaIHJuZCBtb2RlCgoJZm1vdi5sCQklZDEsJWZwY3IJCSMgc2V0IEZQQ1IKCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCgoJZnNnbGRpdi54CUZQX1NDUjAoJWE2KSwlZnAxCSMgZXhlY3V0ZSBzZ2wgZGl2aWRlCgoJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKCWZhYnMueAkJJWZwMQkJCSMgbWFrZSBhYnNvbHV0ZSB2YWx1ZQoJZmNtcC5iCQklZnAxLCYweDEJCSMgaXMgfHJlc3VsdHwgPCAxLmI/CglmYmdlLncJCWZzZ2xkaXZfbm9ybWFsX2V4aXQJIyBubzsgbm8gdW5kZXJmbG93IG9jY3VycmVkCglicmEudwkJZnNnbGRpdl91bmZsCQkjIHllczsgdW5kZXJmbG93IG9jY3VycmVkCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgojCiMgRGl2aWRlOiBpbnB1dHMgYXJlIG5vdCBib3RoIG5vcm1hbGl6ZWQ7IHdoYXQgYXJlIHRoZXk/CiMKZnNnbGRpdl9ub3Rfbm9ybToKCW1vdi53CQkodGJsX2ZzZ2xkaXZfb3AuYiwlcGMsJWQxLncqMiksJWQxCglqbXAJCSh0YmxfZnNnbGRpdl9vcC5iLCVwYywlZDEudyoxKQoKCXN3YmVnCQkmNDgKdGJsX2ZzZ2xkaXZfb3A6CglzaG9ydAkJZnNnbGRpdl9ub3JtCQktIHRibF9mc2dsZGl2X29wICMgTk9STSAvIE5PUk0KCXNob3J0CQlmc2dsZGl2X2luZl9sb2FkCS0gdGJsX2ZzZ2xkaXZfb3AgIyBOT1JNIC8gWkVSTwoJc2hvcnQJCWZzZ2xkaXZfemVyb19sb2FkCS0gdGJsX2ZzZ2xkaXZfb3AgIyBOT1JNIC8gSU5GCglzaG9ydAkJZnNnbGRpdl9yZXNfcW5hbgktIHRibF9mc2dsZGl2X29wICMgTk9STSAvIFFOQU4KCXNob3J0CQlmc2dsZGl2X25vcm0JCS0gdGJsX2ZzZ2xkaXZfb3AgIyBOT1JNIC8gREVOT1JNCglzaG9ydAkJZnNnbGRpdl9yZXNfc25hbgktIHRibF9mc2dsZGl2X29wICMgTk9STSAvIFNOQU4KCXNob3J0CQl0YmxfZnNnbGRpdl9vcAkJLSB0YmxfZnNnbGRpdl9vcCAjCglzaG9ydAkJdGJsX2ZzZ2xkaXZfb3AJCS0gdGJsX2ZzZ2xkaXZfb3AgIwoKCXNob3J0CQlmc2dsZGl2X3plcm9fbG9hZAktIHRibF9mc2dsZGl2X29wICMgWkVSTyAvIE5PUk0KCXNob3J0CQlmc2dsZGl2X3Jlc19vcGVycgktIHRibF9mc2dsZGl2X29wICMgWkVSTyAvIFpFUk8KCXNob3J0CQlmc2dsZGl2X3plcm9fbG9hZAktIHRibF9mc2dsZGl2X29wICMgWkVSTyAvIElORgoJc2hvcnQJCWZzZ2xkaXZfcmVzX3FuYW4JLSB0YmxfZnNnbGRpdl9vcCAjIFpFUk8gLyBRTkFOCglzaG9ydAkJZnNnbGRpdl96ZXJvX2xvYWQJLSB0YmxfZnNnbGRpdl9vcCAjIFpFUk8gLyBERU5PUk0KCXNob3J0CQlmc2dsZGl2X3Jlc19zbmFuCS0gdGJsX2ZzZ2xkaXZfb3AgIyBaRVJPIC8gU05BTgoJc2hvcnQJCXRibF9mc2dsZGl2X29wCQktIHRibF9mc2dsZGl2X29wICMKCXNob3J0CQl0YmxfZnNnbGRpdl9vcAkJLSB0YmxfZnNnbGRpdl9vcCAjCgoJc2hvcnQJCWZzZ2xkaXZfaW5mX2RzdAkJLSB0YmxfZnNnbGRpdl9vcCAjIElORiAvIE5PUk0KCXNob3J0CQlmc2dsZGl2X2luZl9kc3QJCS0gdGJsX2ZzZ2xkaXZfb3AgIyBJTkYgLyBaRVJPCglzaG9ydAkJZnNnbGRpdl9yZXNfb3BlcnIJLSB0YmxfZnNnbGRpdl9vcCAjIElORiAvIElORgoJc2hvcnQJCWZzZ2xkaXZfcmVzX3FuYW4JLSB0YmxfZnNnbGRpdl9vcCAjIElORiAvIFFOQU4KCXNob3J0CQlmc2dsZGl2X2luZl9kc3QJCS0gdGJsX2ZzZ2xkaXZfb3AgIyBJTkYgLyBERU5PUk0KCXNob3J0CQlmc2dsZGl2X3Jlc19zbmFuCS0gdGJsX2ZzZ2xkaXZfb3AgIyBJTkYgLyBTTkFOCglzaG9ydAkJdGJsX2ZzZ2xkaXZfb3AJCS0gdGJsX2ZzZ2xkaXZfb3AgIwoJc2hvcnQJCXRibF9mc2dsZGl2X29wCQktIHRibF9mc2dsZGl2X29wICMKCglzaG9ydAkJZnNnbGRpdl9yZXNfcW5hbgktIHRibF9mc2dsZGl2X29wICMgUU5BTiAvIE5PUk0KCXNob3J0CQlmc2dsZGl2X3Jlc19xbmFuCS0gdGJsX2ZzZ2xkaXZfb3AgIyBRTkFOIC8gWkVSTwoJc2hvcnQJCWZzZ2xkaXZfcmVzX3FuYW4JLSB0YmxfZnNnbGRpdl9vcCAjIFFOQU4gLyBJTkYKCXNob3J0CQlmc2dsZGl2X3Jlc19xbmFuCS0gdGJsX2ZzZ2xkaXZfb3AgIyBRTkFOIC8gUU5BTgoJc2hvcnQJCWZzZ2xkaXZfcmVzX3FuYW4JLSB0YmxfZnNnbGRpdl9vcCAjIFFOQU4gLyBERU5PUk0KCXNob3J0CQlmc2dsZGl2X3Jlc19zbmFuCS0gdGJsX2ZzZ2xkaXZfb3AgIyBRTkFOIC8gU05BTgoJc2hvcnQJCXRibF9mc2dsZGl2X29wCQktIHRibF9mc2dsZGl2X29wICMKCXNob3J0CQl0YmxfZnNnbGRpdl9vcAkJLSB0YmxfZnNnbGRpdl9vcCAjCgoJc2hvcnQJCWZzZ2xkaXZfbm9ybQkJLSB0YmxfZnNnbGRpdl9vcCAjIERFTk9STSAvIE5PUk0KCXNob3J0CQlmc2dsZGl2X2luZl9sb2FkCS0gdGJsX2ZzZ2xkaXZfb3AgIyBERU5PUk0gLyBaRVJPCglzaG9ydAkJZnNnbGRpdl96ZXJvX2xvYWQJLSB0YmxfZnNnbGRpdl9vcCAjIERFTk9STSAvIElORgoJc2hvcnQJCWZzZ2xkaXZfcmVzX3FuYW4JLSB0YmxfZnNnbGRpdl9vcCAjIERFTk9STSAvIFFOQU4KCXNob3J0CQlmc2dsZGl2X25vcm0JCS0gdGJsX2ZzZ2xkaXZfb3AgIyBERU5PUk0gLyBERU5PUk0KCXNob3J0CQlmc2dsZGl2X3Jlc19zbmFuCS0gdGJsX2ZzZ2xkaXZfb3AgIyBERU5PUk0gLyBTTkFOCglzaG9ydAkJdGJsX2ZzZ2xkaXZfb3AJCS0gdGJsX2ZzZ2xkaXZfb3AgIwoJc2hvcnQJCXRibF9mc2dsZGl2X29wCQktIHRibF9mc2dsZGl2X29wICMKCglzaG9ydAkJZnNnbGRpdl9yZXNfc25hbgktIHRibF9mc2dsZGl2X29wICMgU05BTiAvIE5PUk0KCXNob3J0CQlmc2dsZGl2X3Jlc19zbmFuCS0gdGJsX2ZzZ2xkaXZfb3AgIyBTTkFOIC8gWkVSTwoJc2hvcnQJCWZzZ2xkaXZfcmVzX3NuYW4JLSB0YmxfZnNnbGRpdl9vcCAjIFNOQU4gLyBJTkYKCXNob3J0CQlmc2dsZGl2X3Jlc19zbmFuCS0gdGJsX2ZzZ2xkaXZfb3AgIyBTTkFOIC8gUU5BTgoJc2hvcnQJCWZzZ2xkaXZfcmVzX3NuYW4JLSB0YmxfZnNnbGRpdl9vcCAjIFNOQU4gLyBERU5PUk0KCXNob3J0CQlmc2dsZGl2X3Jlc19zbmFuCS0gdGJsX2ZzZ2xkaXZfb3AgIyBTTkFOIC8gU05BTgoJc2hvcnQJCXRibF9mc2dsZGl2X29wCQktIHRibF9mc2dsZGl2X29wICMKCXNob3J0CQl0YmxfZnNnbGRpdl9vcAkJLSB0YmxfZnNnbGRpdl9vcCAjCgpmc2dsZGl2X3Jlc19xbmFuOgoJYnJhLmwJCXJlc19xbmFuCmZzZ2xkaXZfcmVzX3NuYW46CglicmEubAkJcmVzX3NuYW4KZnNnbGRpdl9yZXNfb3BlcnI6CglicmEubAkJcmVzX29wZXJyCmZzZ2xkaXZfaW5mX2xvYWQ6CglicmEubAkJZmRpdl9pbmZfbG9hZApmc2dsZGl2X3plcm9fbG9hZDoKCWJyYS5sCQlmZGl2X3plcm9fbG9hZApmc2dsZGl2X2luZl9kc3Q6CglicmEubAkJZmRpdl9pbmZfZHN0CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlmYWRkKCk6IGVtdWxhdGVzIHRoZSBmYWRkIGluc3RydWN0aW9uCQkJCSMKIwlmc2FkZCgpOiBlbXVsYXRlcyB0aGUgZmFkZCBpbnN0cnVjdGlvbgkJCQkjCiMJZmRhZGQoKTogZW11bGF0ZXMgdGhlIGZkYWRkIGluc3RydWN0aW9uCQkJCSMKIwkJCQkJCQkJCSMKIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWFkZHN1Yl9zY2FsZXIyKCkgLSBzY2FsZSB0aGUgb3BlcmFuZHMgc28gdGhleSB3b24ndCB0YWtlIGV4YwkjCiMJb3ZmX3JlcygpIC0gcmV0dXJuIGRlZmF1bHQgb3ZlcmZsb3cgcmVzdWx0CQkJIwojCXVuZl9yZXMoKSAtIHJldHVybiBkZWZhdWx0IHVuZGVyZmxvdyByZXN1bHQJCQkjCiMJcmVzX3FuYW4oKSAtIHNldCBRTkFOIHJlc3VsdAkJCQkJIwojCXJlc19zbmFuKCkgLSBzZXQgU05BTiByZXN1bHQJCQkJCSMKIwlyZXNfb3BlcnIoKSAtIHNldCBPUEVSUiByZXN1bHQJCQkJCSMKIwlzY2FsZV90b196ZXJvX3NyYygpIC0gc2V0IHNyYyBvcGVyYW5kIGV4cG9uZW50IGVxdWFsIHRvIHplcm8JIwojCXNjYWxlX3RvX3plcm9fZHN0KCkgLSBzZXQgZHN0IG9wZXJhbmQgZXhwb25lbnQgZXF1YWwgdG8gemVybwkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIHNvdXJjZSBvcGVyYW5kCQkjCiMJYTEgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBkZXN0aW5hdGlvbiBvcGVyYW5kCQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlmcDAgPSByZXN1bHQJCQkJCQkJIwojCWZwMSA9IEVYT1AgKGlmIGV4Y2VwdGlvbiBvY2N1cnJlZCkJCQkJIwojCQkJCQkJCQkJIwojIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJSGFuZGxlIE5BTnMsIGluZmluaXRpZXMsIGFuZCB6ZXJvZXMgYXMgc3BlY2lhbCBjYXNlcy4gRGl2aWRlCSMKIyBub3JtcyBpbnRvIGV4dGVuZGVkLCBzaW5nbGUsIGFuZCBkb3VibGUgcHJlY2lzaW9uLgkJCSMKIwlEbyBhZGRpdGlvbiBhZnRlciBzY2FsaW5nIGV4cG9uZW50cyBzdWNoIHRoYXQgZXhjZXB0aW9uIHdvbid0CSMKIyBvY2N1ci4gVGhlbiwgY2hlY2sgcmVzdWx0IGV4cG9uZW50IHRvIHNlZSBpZiBleGNlcHRpb24gd291bGQgaGF2ZQkjCiMgb2NjdXJyZWQuIElmIHNvLCByZXR1cm4gZGVmYXVsdCByZXN1bHQgYW5kIG1heWJlIEVYT1AuIEVsc2UsIGluc2VydAkjCiMgdGhlIGNvcnJlY3QgcmVzdWx0IGV4cG9uZW50IGFuZCByZXR1cm4uIFNldCBGUFNSIGJpdHMgYXMgYXBwcm9wcmlhdGUuCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCWdsb2JhbAkJZnNhZGQKZnNhZGQ6CglhbmRpLmIJCSYweDMwLCVkMAkJIyBjbGVhciBybmQgcHJlYwoJb3JpLmIJCSZzX21vZGUqMHgxMCwlZDAJIyBpbnNlcnQgc2dsIHByZWMKCWJyYS5iCQlmYWRkCgoJZ2xvYmFsCQlmZGFkZApmZGFkZDoKCWFuZGkuYgkJJjB4MzAsJWQwCQkjIGNsZWFyIHJuZCBwcmVjCglvcmkuYgkJJmRfbW9kZSoweDEwLCVkMAkjIGluc2VydCBkYmwgcHJlYwoKCWdsb2JhbAkJZmFkZApmYWRkOgoJbW92LmwJCSVkMCxMX1NDUjMoJWE2KQkJIyBzdG9yZSBybmQgaW5mbwoKCWNsci53CQklZDEKCW1vdi5iCQlEVEFHKCVhNiksJWQxCglsc2wuYgkJJjB4MywlZDEKCW9yLmIJCVNUQUcoJWE2KSwlZDEJCSMgY29tYmluZSBzcmMgdGFncwoKCWJuZS53CQlmYWRkX25vdF9ub3JtCQkjIG9wdGltaXplIG9uIG5vbi1ub3JtIGlucHV0CgojCiMgQUREOiBub3JtcyBhbmQgZGVub3JtcwojCmZhZGRfbm9ybToKCWJzci5sCQlhZGRzdWJfc2NhbGVyMgkJIyBzY2FsZSBleHBvbmVudHMKCmZhZGRfemVyb19lbnRyeToKCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wCgoJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgoKCWZhZGQueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBleGVjdXRlIGFkZAoKCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCglmbW92LmwJCSVmcHNyLCVkMQkJIyBmZXRjaCBJTkVYMixOLFoKCglvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIGV4YyBhbmQgY2NvZGUgYml0cwoKCWZiZXEudwkJZmFkZF96ZXJvX2V4aXQJCSMgaWYgcmVzdWx0IGlzIHplcm8sIGVuZCBub3cKCgltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCgoJZm1vdm0ueAkJJjB4MDEsLSglc3ApCQkjIHNhdmUgcmVzdWx0IHRvIHN0YWNrCgoJbW92LncJCTIrTF9TQ1IzKCVhNiksJWQxCglsc3IuYgkJJjB4NiwlZDEKCgltb3YudwkJKCVzcCksJWQyCQkjIGZldGNoIG5ldyBzaWduLCBleHAKCWFuZGkubAkJJjB4N2ZmZiwlZDIJCSMgc3RyaXAgc2lnbgoJc3ViLmwJCSVkMCwlZDIJCQkjIGFkZCBzY2FsZSBmYWN0b3IKCgljbXAubAkJJWQyLCh0YmxfZmFkZF9vdmZsLmIsJXBjLCVkMS53KjQpICMgaXMgaXQgYW4gb3ZlcmZsb3c/CgliZ2UuYgkJZmFkZF9vdmZsCQkjIHllcwoKCWNtcC5sCQklZDIsKHRibF9mYWRkX3VuZmwuYiwlcGMsJWQxLncqNCkgIyBpcyBpdCBhbiB1bmRlcmZsb3c/CglibHQudwkJZmFkZF91bmZsCQkjIHllcwoJYmVxLncJCWZhZGRfbWF5X3VuZmwJCSMgbWF5YmU7IGdvIGZpbmQgb3V0CgpmYWRkX25vcm1hbDoKCW1vdi53CQkoJXNwKSwlZDEKCWFuZGkudwkJJjB4ODAwMCwlZDEJCSMga2VlcCBzaWduCglvci53CQklZDIsJWQxCQkJIyBjb25jYXQgc2lnbixuZXcgZXhwCgltb3YudwkJJWQxLCglc3ApCQkjIGluc2VydCBuZXcgZXhwb25lbnQKCglmbW92bS54CQkoJXNwKSssJjB4ODAJCSMgcmV0dXJuIHJlc3VsdCBpbiBmcDAKCgltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCglydHMKCmZhZGRfemVyb19leGl0OgojCWZtb3YucwkJJjB4MDAwMDAwMDAsJWZwMAkjIHJldHVybiB6ZXJvIGluIGZwMAoJcnRzCgp0YmxfZmFkZF9vdmZsOgoJbG9uZwkJMHg3ZmZmCQkJIyBleHQgb3ZmbAoJbG9uZwkJMHg0MDdmCQkJIyBzZ2wgb3ZmbAoJbG9uZwkJMHg0M2ZmCQkJIyBkYmwgb3ZmbAoKdGJsX2ZhZGRfdW5mbDoKCWxvbmcJICAgICAgICAweDAwMDAJCQkjIGV4dCB1bmZsCglsb25nCQkweDNmODEJCQkjIHNnbCB1bmZsCglsb25nCQkweDNjMDEJCQkjIGRibCB1bmZsCgpmYWRkX292Zmw6Cglvci5sCQkmb3ZmbF9pbnhfbWFzayxVU0VSX0ZQU1IoJWE2KSAjIHNldCBvdmZsL2FvdmZsL2FpbmV4CgoJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCglhbmRpLmIJCSYweDEzLCVkMQkJIyBpcyBPVkZMIG9yIElORVggZW5hYmxlZD8KCWJuZS5iCQlmYWRkX292ZmxfZW5hCQkjIHllcwoKCWFkZC5sCQkmMHhjLCVzcApmYWRkX292ZmxfZGlzOgoJYnRzdAkJJm5lZ19iaXQsRlBTUl9DQyglYTYpCSMgaXMgcmVzdWx0IG5lZ2F0aXZlPwoJc25lCQklZDEJCQkjIHNldCBzaWduIHBhcmFtIGFjY29yZGluZ2x5Cgltb3YubAkJTF9TQ1IzKCVhNiksJWQwCQkjIHBhc3MgcHJlYzpybmQKCWJzci5sCQlvdmZfcmVzCQkJIyBjYWxjdWxhdGUgZGVmYXVsdCByZXN1bHQKCW9yLmIJCSVkMCxGUFNSX0NDKCVhNikJIyBzZXQgSU5GLE4gaWYgYXBwbGljYWJsZQoJZm1vdm0ueAkJKCVhMCksJjB4ODAJCSMgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGluIGZwMAoJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgoJcnRzCgpmYWRkX292ZmxfZW5hOgoJbW92LmIJCUxfU0NSMyglYTYpLCVkMQoJYW5kaS5iCQkmMHhjMCwlZDEJCSMgaXMgcHJlY2lzaW9uIGV4dGVuZGVkPwoJYm5lLmIJCWZhZGRfb3ZmbF9lbmFfc2QJIyBubzsgcHJlYyA9IHNnbCBvciBkYmwKCmZhZGRfb3ZmbF9lbmFfY29udDoKCW1vdi53CQkoJXNwKSwlZDEKCWFuZGkudwkJJjB4ODAwMCwlZDEJCSMga2VlcCBzaWduCglzdWJpLmwJCSYweDYwMDAsJWQyCQkjIGFkZCBleHRyYSBiaWFzCglhbmRpLncJCSYweDdmZmYsJWQyCglvci53CQklZDIsJWQxCQkJIyBjb25jYXQgc2lnbixuZXcgZXhwCgltb3YudwkJJWQxLCglc3ApCQkjIGluc2VydCBuZXcgZXhwb25lbnQKCglmbW92bS54CQkoJXNwKSssJjB4NDAJCSMgcmV0dXJuIEVYT1AgaW4gZnAxCglicmEuYgkJZmFkZF9vdmZsX2RpcwoKZmFkZF9vdmZsX2VuYV9zZDoKCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wCgoJbW92LmwJCUxfU0NSMyglYTYpLCVkMQoJYW5kaS5iCQkmMHgzMCwlZDEJCSMga2VlcCBybmQgbW9kZQoJZm1vdi5sCQklZDEsJWZwY3IJCSMgc2V0IEZQQ1IKCglmYWRkLngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBhZGQKCglmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgoKCWFkZC5sCQkmMHhjLCVzcAoJZm1vdm0ueAkJJjB4MDEsLSglc3ApCglicmEuYgkJZmFkZF9vdmZsX2VuYV9jb250CgpmYWRkX3VuZmw6Cglic2V0CQkmdW5mbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIHNldCB1bmZsIGV4YyBiaXQKCglhZGQubAkJJjB4Yywlc3AKCglmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4ODAJIyBsb2FkIGRzdCBvcAoKCWZtb3YubAkJJnJ6X21vZGUqMHgxMCwlZnBjcgkjIHNldCBGUENSCglmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgoKCWZhZGQueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBleGVjdXRlIGFkZAoKCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCglmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIHN0YXR1cwoKCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWCxOCgoJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCglhbmRpLmIJCSYweDBiLCVkMQkJIyBpcyBVTkZMIG9yIElORVggZW5hYmxlZD8KCWJuZS5iCQlmYWRkX3VuZmxfZW5hCQkjIHllcwoKZmFkZF91bmZsX2RpczoKCWZtb3ZtLngJCSYweDgwLEZQX1NDUjAoJWE2KQkjIHN0b3JlIG91dCByZXN1bHQKCglsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzOiByZXN1bHQgYWRkcgoJbW92LmwJCUxfU0NSMyglYTYpLCVkMQkJIyBwYXNzOiBybmQgcHJlYyxtb2RlCglic3IubAkJdW5mX3JlcwkJCSMgY2FsY3VsYXRlIGRlZmF1bHQgcmVzdWx0Cglvci5iCQklZDAsRlBTUl9DQyglYTYpCSMgJ1onIGJpdCBtYXkgaGF2ZSBiZWVuIHNldAoJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDgwCSMgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGluIGZwMAoJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgoJcnRzCgpmYWRkX3VuZmxfZW5hOgoJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDQwCSMgbG9hZCBkc3Qgb3AKCgltb3YubAkJTF9TQ1IzKCVhNiksJWQxCglhbmRpLmIJCSYweGMwLCVkMQkJIyBpcyBwcmVjaXNpb24gZXh0ZW5kZWQ/CglibmUuYgkJZmFkZF91bmZsX2VuYV9zZAkjIG5vOyBzZ2wgb3IgZGJsCgoJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCgpmYWRkX3VuZmxfZW5hX2NvbnQ6CglmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgoKCWZhZGQueAkJRlBfU0NSMCglYTYpLCVmcDEJIyBleGVjdXRlIG11bHRpcGx5CgoJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKCglmbW92bS54CQkmMHg0MCxGUF9TQ1IwKCVhNikJIyBzYXZlIHJlc3VsdCB0byBzdGFjawoJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBmZXRjaCB7c2duLGV4cH0KCW1vdi5sCQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQoJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCglhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KCXN1Yi5sCQklZDAsJWQxCQkJIyBhZGQgc2NhbGUgZmFjdG9yCglhZGRpLmwJCSYweDYwMDAsJWQxCQkjIGFkZCBuZXcgYmlhcwoJYW5kaS53CQkmMHg3ZmZmLCVkMQkJIyBjbGVhciB0b3AgYml0Cglvci53CQklZDIsJWQxCQkJIyBjb25jYXQgc2lnbixuZXcgZXhwCgltb3YudwkJJWQxLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwb25lbnQKCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg0MAkjIHJldHVybiBFWE9QIGluIGZwMQoJYnJhLncJCWZhZGRfdW5mbF9kaXMKCmZhZGRfdW5mbF9lbmFfc2Q6Cgltb3YubAkJTF9TQ1IzKCVhNiksJWQxCglhbmRpLmIJCSYweDMwLCVkMQkJIyB1c2Ugb25seSBybmQgbW9kZQoJZm1vdi5sCQklZDEsJWZwY3IJCSMgc2V0IEZQQ1IKCglicmEuYgkJZmFkZF91bmZsX2VuYV9jb250CgojCiMgcmVzdWx0IGlzIGVxdWFsIHRvIHRoZSBzbWFsbGVzdCBub3JtYWxpemVkIG51bWJlciBpbiB0aGUgc2VsZWN0ZWQgcHJlY2lzaW9uCiMgaWYgdGhlIHByZWNpc2lvbiBpcyBleHRlbmRlZCwgdGhpcyByZXN1bHQgY291bGQgbm90IGhhdmUgY29tZSBmcm9tIGFuCiMgdW5kZXJmbG93IHRoYXQgcm91bmRlZCB1cC4KIwpmYWRkX21heV91bmZsOgoJbW92LmwJCUxfU0NSMyglYTYpLCVkMQoJYW5kaS5iCQkmMHhjMCwlZDEKCWJlcS53CQlmYWRkX25vcm1hbAkJIyB5ZXM7IG5vIHVuZGVyZmxvdyBvY2N1cnJlZAoKCW1vdi5sCQkweDQoJXNwKSwlZDEJCSMgZXh0cmFjdCBoaShtYW4pCgljbXBpLmwJCSVkMSwmMHg4MDAwMDAwMAkJIyBpcyBoaShtYW4pID0gMHg4MDAwMDAwMD8KCWJuZS53CQlmYWRkX25vcm1hbAkJIyBubzsgbm8gdW5kZXJmbG93IG9jY3VycmVkCgoJdHN0LmwJCTB4OCglc3ApCQkjIGlzIGxvKG1hbikgPSAweDA/CglibmUudwkJZmFkZF9ub3JtYWwJCSMgbm87IG5vIHVuZGVyZmxvdyBvY2N1cnJlZAoKCWJ0c3QJCSZpbmV4Ml9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIGlzIElORVgyIHNldD8KCWJlcS53CQlmYWRkX25vcm1hbAkJIyBubzsgbm8gdW5kZXJmbG93IG9jY3VycmVkCgojCiMgb2ssIHNvIG5vdyB0aGUgcmVzdWx0IGhhcyBhIGV4cG9uZW50IGVxdWFsIHRvIHRoZSBzbWFsbGVzdCBub3JtYWxpemVkCiMgZXhwb25lbnQgZm9yIHRoZSBzZWxlY3RlZCBwcmVjaXNpb24uIGFsc28sIHRoZSBtYW50aXNzYSBpcyBlcXVhbCB0bwojIDB4ODAwMDAwMDAwMDAwMDAwMCBhbmQgdGhpcyBtYW50aXNzYSBpcyB0aGUgcmVzdWx0IG9mIHJvdW5kaW5nIG5vbi16ZXJvCiMgZyxyLHMuCiMgbm93LCB3ZSBtdXN0IGRldGVybWluZSB3aGV0aGVyIHRoZSBwcmUtcm91bmRlZCByZXN1bHQgd2FzIGFuIHVuZGVyZmxvdwojIHJvdW5kZWQgInVwIiBvciBhIG5vcm1hbGl6ZWQgbnVtYmVyIHJvdW5kZWQgImRvd24iLgojIHNvLCB3ZSBkbyB0aGlzIGJlIHJlLWV4ZWN1dGluZyB0aGUgYWRkIHVzaW5nIFJaIGFzIHRoZSByb3VuZGluZyBtb2RlIGFuZAojIHNlZWluZyBpZiB0aGUgbmV3IHJlc3VsdCBpcyBzbWFsbGVyIG9yIGVxdWFsIHRvIHRoZSBjdXJyZW50IHJlc3VsdC4KIwoJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDQwCSMgbG9hZCBkc3Qgb3AgaW50byBmcDEKCgltb3YubAkJTF9TQ1IzKCVhNiksJWQxCglhbmRpLmIJCSYweGMwLCVkMQkJIyBrZWVwIHJuZCBwcmVjCglvcmkuYgkJJnJ6X21vZGUqMHgxMCwlZDEJIyBpbnNlcnQgcm5kIG1vZGUKCWZtb3YubAkJJWQxLCVmcGNyCQkjIHNldCBGUENSCglmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgoKCWZhZGQueAkJRlBfU0NSMCglYTYpLCVmcDEJIyBleGVjdXRlIGFkZAoKCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCgoJZmFicy54CQklZnAwCQkJIyBjb21wYXJlIGFic29sdXRlIHZhbHVlcwoJZmFicy54CQklZnAxCglmY21wLngJCSVmcDAsJWZwMQkJIyBpcyBmaXJzdCByZXN1bHQgPiBzZWNvbmQ/CgoJZmJndC53CQlmYWRkX3VuZmwJCSMgeWVzOyBpdCdzIGFuIHVuZGVyZmxvdwoJYnJhLncJCWZhZGRfbm9ybWFsCQkjIG5vOyBpdCdzIG5vdCBhbiB1bmRlcmZsb3cKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgojCiMgQWRkOiBpbnB1dHMgYXJlIG5vdCBib3RoIG5vcm1hbGl6ZWQ7IHdoYXQgYXJlIHRoZXk/CiMKZmFkZF9ub3Rfbm9ybToKCW1vdi53CQkodGJsX2ZhZGRfb3AuYiwlcGMsJWQxLncqMiksJWQxCglqbXAJCSh0YmxfZmFkZF9vcC5iLCVwYywlZDEudyoxKQoKCXN3YmVnCQkmNDgKdGJsX2ZhZGRfb3A6CglzaG9ydAkJZmFkZF9ub3JtCS0gdGJsX2ZhZGRfb3AgIyBOT1JNICsgTk9STQoJc2hvcnQJCWZhZGRfemVyb19zcmMJLSB0YmxfZmFkZF9vcCAjIE5PUk0gKyBaRVJPCglzaG9ydAkJZmFkZF9pbmZfc3JjCS0gdGJsX2ZhZGRfb3AgIyBOT1JNICsgSU5GCglzaG9ydAkJZmFkZF9yZXNfcW5hbgktIHRibF9mYWRkX29wICMgTk9STSArIFFOQU4KCXNob3J0CQlmYWRkX25vcm0JLSB0YmxfZmFkZF9vcCAjIE5PUk0gKyBERU5PUk0KCXNob3J0CQlmYWRkX3Jlc19zbmFuCS0gdGJsX2ZhZGRfb3AgIyBOT1JNICsgU05BTgoJc2hvcnQJCXRibF9mYWRkX29wCS0gdGJsX2ZhZGRfb3AgIwoJc2hvcnQJCXRibF9mYWRkX29wCS0gdGJsX2ZhZGRfb3AgIwoKCXNob3J0CQlmYWRkX3plcm9fZHN0CS0gdGJsX2ZhZGRfb3AgIyBaRVJPICsgTk9STQoJc2hvcnQJCWZhZGRfemVyb18yCS0gdGJsX2ZhZGRfb3AgIyBaRVJPICsgWkVSTwoJc2hvcnQJCWZhZGRfaW5mX3NyYwktIHRibF9mYWRkX29wICMgWkVSTyArIElORgoJc2hvcnQJCWZhZGRfcmVzX3FuYW4JLSB0YmxfZmFkZF9vcCAjIE5PUk0gKyBRTkFOCglzaG9ydAkJZmFkZF96ZXJvX2RzdAktIHRibF9mYWRkX29wICMgWkVSTyArIERFTk9STQoJc2hvcnQJCWZhZGRfcmVzX3NuYW4JLSB0YmxfZmFkZF9vcCAjIE5PUk0gKyBTTkFOCglzaG9ydAkJdGJsX2ZhZGRfb3AJLSB0YmxfZmFkZF9vcCAjCglzaG9ydAkJdGJsX2ZhZGRfb3AJLSB0YmxfZmFkZF9vcCAjCgoJc2hvcnQJCWZhZGRfaW5mX2RzdAktIHRibF9mYWRkX29wICMgSU5GICsgTk9STQoJc2hvcnQJCWZhZGRfaW5mX2RzdAktIHRibF9mYWRkX29wICMgSU5GICsgWkVSTwoJc2hvcnQJCWZhZGRfaW5mXzIJLSB0YmxfZmFkZF9vcCAjIElORiArIElORgoJc2hvcnQJCWZhZGRfcmVzX3FuYW4JLSB0YmxfZmFkZF9vcCAjIE5PUk0gKyBRTkFOCglzaG9ydAkJZmFkZF9pbmZfZHN0CS0gdGJsX2ZhZGRfb3AgIyBJTkYgKyBERU5PUk0KCXNob3J0CQlmYWRkX3Jlc19zbmFuCS0gdGJsX2ZhZGRfb3AgIyBOT1JNICsgU05BTgoJc2hvcnQJCXRibF9mYWRkX29wCS0gdGJsX2ZhZGRfb3AgIwoJc2hvcnQJCXRibF9mYWRkX29wCS0gdGJsX2ZhZGRfb3AgIwoKCXNob3J0CQlmYWRkX3Jlc19xbmFuCS0gdGJsX2ZhZGRfb3AgIyBRTkFOICsgTk9STQoJc2hvcnQJCWZhZGRfcmVzX3FuYW4JLSB0YmxfZmFkZF9vcCAjIFFOQU4gKyBaRVJPCglzaG9ydAkJZmFkZF9yZXNfcW5hbgktIHRibF9mYWRkX29wICMgUU5BTiArIElORgoJc2hvcnQJCWZhZGRfcmVzX3FuYW4JLSB0YmxfZmFkZF9vcCAjIFFOQU4gKyBRTkFOCglzaG9ydAkJZmFkZF9yZXNfcW5hbgktIHRibF9mYWRkX29wICMgUU5BTiArIERFTk9STQoJc2hvcnQJCWZhZGRfcmVzX3NuYW4JLSB0YmxfZmFkZF9vcCAjIFFOQU4gKyBTTkFOCglzaG9ydAkJdGJsX2ZhZGRfb3AJLSB0YmxfZmFkZF9vcCAjCglzaG9ydAkJdGJsX2ZhZGRfb3AJLSB0YmxfZmFkZF9vcCAjCgoJc2hvcnQJCWZhZGRfbm9ybQktIHRibF9mYWRkX29wICMgREVOT1JNICsgTk9STQoJc2hvcnQJCWZhZGRfemVyb19zcmMJLSB0YmxfZmFkZF9vcCAjIERFTk9STSArIFpFUk8KCXNob3J0CQlmYWRkX2luZl9zcmMJLSB0YmxfZmFkZF9vcCAjIERFTk9STSArIElORgoJc2hvcnQJCWZhZGRfcmVzX3FuYW4JLSB0YmxfZmFkZF9vcCAjIE5PUk0gKyBRTkFOCglzaG9ydAkJZmFkZF9ub3JtCS0gdGJsX2ZhZGRfb3AgIyBERU5PUk0gKyBERU5PUk0KCXNob3J0CQlmYWRkX3Jlc19zbmFuCS0gdGJsX2ZhZGRfb3AgIyBOT1JNICsgU05BTgoJc2hvcnQJCXRibF9mYWRkX29wCS0gdGJsX2ZhZGRfb3AgIwoJc2hvcnQJCXRibF9mYWRkX29wCS0gdGJsX2ZhZGRfb3AgIwoKCXNob3J0CQlmYWRkX3Jlc19zbmFuCS0gdGJsX2ZhZGRfb3AgIyBTTkFOICsgTk9STQoJc2hvcnQJCWZhZGRfcmVzX3NuYW4JLSB0YmxfZmFkZF9vcCAjIFNOQU4gKyBaRVJPCglzaG9ydAkJZmFkZF9yZXNfc25hbgktIHRibF9mYWRkX29wICMgU05BTiArIElORgoJc2hvcnQJCWZhZGRfcmVzX3NuYW4JLSB0YmxfZmFkZF9vcCAjIFNOQU4gKyBRTkFOCglzaG9ydAkJZmFkZF9yZXNfc25hbgktIHRibF9mYWRkX29wICMgU05BTiArIERFTk9STQoJc2hvcnQJCWZhZGRfcmVzX3NuYW4JLSB0YmxfZmFkZF9vcCAjIFNOQU4gKyBTTkFOCglzaG9ydAkJdGJsX2ZhZGRfb3AJLSB0YmxfZmFkZF9vcCAjCglzaG9ydAkJdGJsX2ZhZGRfb3AJLSB0YmxfZmFkZF9vcCAjCgpmYWRkX3Jlc19xbmFuOgoJYnJhLmwJCXJlc19xbmFuCmZhZGRfcmVzX3NuYW46CglicmEubAkJcmVzX3NuYW4KCiMKIyBib3RoIG9wZXJhbmRzIGFyZSBaRVJPZXMKIwpmYWRkX3plcm9fMjoKCW1vdi5iCQlTUkNfRVgoJWEwKSwlZDAJCSMgYXJlIHRoZSBzaWducyBvcHBvc2l0ZQoJbW92LmIJCURTVF9FWCglYTEpLCVkMQoJZW9yLmIJCSVkMCwlZDEKCWJtaS53CQlmYWRkX3plcm9fMl9jaGtfcm0JIyB3ZWVkIG91dCAoLVpFUk8pKygrWkVSTykKCiMgdGhlIHNpZ25zIGFyZSB0aGUgc2FtZS4gc28gZGV0ZXJtaW5lIHdoZXRoZXIgdGhleSBhcmUgcG9zaXRpdmUgb3IgbmVnYXRpdmUKIyBhbmQgcmV0dXJuIHRoZSBhcHByb3ByaWF0ZWx5IHNpZ25lZCB6ZXJvLgoJdHN0LmIJCSVkMAkJCSMgYXJlIFpFUk9lcyBwb3NpdGl2ZSBvciBuZWdhdGl2ZT8KCWJtaS5iCQlmYWRkX3plcm9fcm0JCSMgbmVnYXRpdmUKCWZtb3YucwkJJjB4MDAwMDAwMDAsJWZwMAkjIHJldHVybiArWkVSTwoJbW92LmIJCSZ6X2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCBaCglydHMKCiMKIyB0aGUgWkVST2VzIGhhdmUgb3Bwb3NpdGUgc2lnbnM6CiMgLSB0aGVyZWZvcmUsIHdlIHJldHVybiArWkVSTyBpZiB0aGUgcm91bmRpbmcgbW9kZXMgYXJlIFJOLFJaLCBvciBSUC4KIyAtIC1aRVJPIGlzIHJldHVybmVkIGluIHRoZSBjYXNlIG9mIFJNLgojCmZhZGRfemVyb18yX2Noa19ybToKCW1vdi5iCQkzK0xfU0NSMyglYTYpLCVkMQoJYW5kaS5iCQkmMHgzMCwlZDEJCSMgZXh0cmFjdCBybmQgbW9kZQoJY21waS5iCQklZDEsJnJtX21vZGUqMHgxMAkjIGlzIHJuZCBtb2RlID09IFJNPwoJYmVxLmIJCWZhZGRfemVyb19ybQkJIyB5ZXMKCWZtb3YucwkJJjB4MDAwMDAwMDAsJWZwMAkjIHJldHVybiArWkVSTwoJbW92LmIJCSZ6X2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCBaCglydHMKCmZhZGRfemVyb19ybToKCWZtb3YucwkJJjB4ODAwMDAwMDAsJWZwMAkjIHJldHVybiAtWkVSTwoJbW92LmIJCSZuZWdfYm1hc2srel9ibWFzayxGUFNSX0NDKCVhNikgIyBzZXQgTkVHL1oKCXJ0cwoKIwojIG9uZSBvcGVyYW5kIGlzIGEgWkVSTyBhbmQgdGhlIG90aGVyIGlzIGEgREVOT1JNIG9yIE5PUk0uIHNjYWxlCiMgdGhlIERFTk9STSBvciBOT1JNIGFuZCBqdW1wIHRvIHRoZSByZWd1bGFyIGZhZGQgcm91dGluZS4KIwpmYWRkX3plcm9fZHN0OgoJbW92LncJCVNSQ19FWCglYTApLEZQX1NDUjBfRVgoJWE2KQoJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQoJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQoJYnNyLmwJCXNjYWxlX3RvX3plcm9fc3JjCSMgc2NhbGUgdGhlIG9wZXJhbmQKCWNsci53CQlGUF9TQ1IxX0VYKCVhNikKCWNsci5sCQlGUF9TQ1IxX0hJKCVhNikKCWNsci5sCQlGUF9TQ1IxX0xPKCVhNikKCWJyYS53CQlmYWRkX3plcm9fZW50cnkJCSMgZ28gZXhlY3V0ZSBmYWRkCgpmYWRkX3plcm9fc3JjOgoJbW92LncJCURTVF9FWCglYTEpLEZQX1NDUjFfRVgoJWE2KQoJbW92LmwJCURTVF9ISSglYTEpLEZQX1NDUjFfSEkoJWE2KQoJbW92LmwJCURTVF9MTyglYTEpLEZQX1NDUjFfTE8oJWE2KQoJYnNyLmwJCXNjYWxlX3RvX3plcm9fZHN0CSMgc2NhbGUgdGhlIG9wZXJhbmQKCWNsci53CQlGUF9TQ1IwX0VYKCVhNikKCWNsci5sCQlGUF9TQ1IwX0hJKCVhNikKCWNsci5sCQlGUF9TQ1IwX0xPKCVhNikKCWJyYS53CQlmYWRkX3plcm9fZW50cnkJCSMgZ28gZXhlY3V0ZSBmYWRkCgojCiMgYm90aCBvcGVyYW5kcyBhcmUgSU5Gcy4gYW4gT1BFUlIgd2lsbCByZXN1bHQgaWYgdGhlIElORnMgaGF2ZQojIGRpZmZlcmVudCBzaWducy4gZWxzZSwgYW4gSU5GIG9mIHRoZSBzYW1lIHNpZ24gaXMgcmV0dXJuZWQKIwpmYWRkX2luZl8yOgoJbW92LmIJCVNSQ19FWCglYTApLCVkMAkJIyBleGNsdXNpdmUgb3IgdGhlIHNpZ25zCgltb3YuYgkJRFNUX0VYKCVhMSksJWQxCgllb3IuYgkJJWQxLCVkMAoJYm1pLmwJCXJlc19vcGVycgkJIyB3ZWVkIG91dCAoLUlORikrKCtJTkYpCgojIG9rLCBzbyBpdCdzIG5vdCBhbiBPUEVSUi4gYnV0LCB3ZSBkbyBoYXZlIHRvIHJlbWVtYmVyIHRvIHJldHVybiB0aGUKIyBzcmMgSU5GIHNpbmNlIHRoYXQncyB3aGVyZSB0aGUgODgxLzg4MiBnZXRzIHRoZSBqLWJpdCBmcm9tLi4uCgojCiMgb3BlcmFuZHMgYXJlIElORiBhbmQgb25lIG9mIHtaRVJPLCBJTkYsIERFTk9STSwgTk9STX0KIwpmYWRkX2luZl9zcmM6CglmbW92bS54CQlTUkMoJWEwKSwmMHg4MAkJIyByZXR1cm4gc3JjIElORgoJdHN0LmIJCVNSQ19FWCglYTApCQkjIGlzIElORiBwb3NpdGl2ZT8KCWJwbC5iCQlmYWRkX2luZl9kb25lCQkjIHllczsgd2UncmUgZG9uZQoJbW92LmIJCSZuZWdfYm1hc2sraW5mX2JtYXNrLEZQU1JfQ0MoJWE2KSAjIHNldCBJTkYvTkVHCglydHMKCiMKIyBvcGVyYW5kcyBhcmUgSU5GIGFuZCBvbmUgb2Yge1pFUk8sIElORiwgREVOT1JNLCBOT1JNfQojCmZhZGRfaW5mX2RzdDoKCWZtb3ZtLngJCURTVCglYTEpLCYweDgwCQkjIHJldHVybiBkc3QgSU5GCgl0c3QuYgkJRFNUX0VYKCVhMSkJCSMgaXMgSU5GIHBvc2l0aXZlPwoJYnBsLmIJCWZhZGRfaW5mX2RvbmUJCSMgeWVzOyB3ZSdyZSBkb25lCgltb3YuYgkJJm5lZ19ibWFzaytpbmZfYm1hc2ssRlBTUl9DQyglYTYpICMgc2V0IElORi9ORUcKCXJ0cwoKZmFkZF9pbmZfZG9uZToKCW1vdi5iCQkmaW5mX2JtYXNrLEZQU1JfQ0MoJWE2KSAjIHNldCBJTkYKCXJ0cwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJZnN1YigpOiBlbXVsYXRlcyB0aGUgZnN1YiBpbnN0cnVjdGlvbgkJCQkjCiMJZnNzdWIoKTogZW11bGF0ZXMgdGhlIGZzc3ViIGluc3RydWN0aW9uCQkJCSMKIwlmZHN1YigpOiBlbXVsYXRlcyB0aGUgZmRzdWIgaW5zdHJ1Y3Rpb24JCQkJIwojCQkJCQkJCQkJIwojIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJYWRkc3ViX3NjYWxlcjIoKSAtIHNjYWxlIHRoZSBvcGVyYW5kcyBzbyB0aGV5IHdvbid0IHRha2UgZXhjCSMKIwlvdmZfcmVzKCkgLSByZXR1cm4gZGVmYXVsdCBvdmVyZmxvdyByZXN1bHQJCQkjCiMJdW5mX3JlcygpIC0gcmV0dXJuIGRlZmF1bHQgdW5kZXJmbG93IHJlc3VsdAkJCSMKIwlyZXNfcW5hbigpIC0gc2V0IFFOQU4gcmVzdWx0CQkJCQkjCiMJcmVzX3NuYW4oKSAtIHNldCBTTkFOIHJlc3VsdAkJCQkJIwojCXJlc19vcGVycigpIC0gc2V0IE9QRVJSIHJlc3VsdAkJCQkJIwojCXNjYWxlX3RvX3plcm9fc3JjKCkgLSBzZXQgc3JjIG9wZXJhbmQgZXhwb25lbnQgZXF1YWwgdG8gemVybwkjCiMJc2NhbGVfdG9femVyb19kc3QoKSAtIHNldCBkc3Qgb3BlcmFuZCBleHBvbmVudCBlcXVhbCB0byB6ZXJvCSMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gc291cmNlIG9wZXJhbmQJCSMKIwlhMSA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIGRlc3RpbmF0aW9uIG9wZXJhbmQJCSMKIwkJCQkJCQkJCSMKIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWZwMCA9IHJlc3VsdAkJCQkJCQkjCiMJZnAxID0gRVhPUCAoaWYgZXhjZXB0aW9uIG9jY3VycmVkKQkJCQkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlIYW5kbGUgTkFOcywgaW5maW5pdGllcywgYW5kIHplcm9lcyBhcyBzcGVjaWFsIGNhc2VzLiBEaXZpZGUJIwojIG5vcm1zIGludG8gZXh0ZW5kZWQsIHNpbmdsZSwgYW5kIGRvdWJsZSBwcmVjaXNpb24uCQkJIwojCURvIHN1YnRyYWN0aW9uIGFmdGVyIHNjYWxpbmcgZXhwb25lbnRzIHN1Y2ggdGhhdCBleGNlcHRpb24gd29uJ3QjCiMgb2NjdXIuIFRoZW4sIGNoZWNrIHJlc3VsdCBleHBvbmVudCB0byBzZWUgaWYgZXhjZXB0aW9uIHdvdWxkIGhhdmUJIwojIG9jY3VycmVkLiBJZiBzbywgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGFuZCBtYXliZSBFWE9QLiBFbHNlLCBpbnNlcnQJIwojIHRoZSBjb3JyZWN0IHJlc3VsdCBleHBvbmVudCBhbmQgcmV0dXJuLiBTZXQgRlBTUiBiaXRzIGFzIGFwcHJvcHJpYXRlLgkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCglnbG9iYWwJCWZzc3ViCmZzc3ViOgoJYW5kaS5iCQkmMHgzMCwlZDAJCSMgY2xlYXIgcm5kIHByZWMKCW9yaS5iCQkmc19tb2RlKjB4MTAsJWQwCSMgaW5zZXJ0IHNnbCBwcmVjCglicmEuYgkJZnN1YgoKCWdsb2JhbAkJZmRzdWIKZmRzdWI6CglhbmRpLmIJCSYweDMwLCVkMAkJIyBjbGVhciBybmQgcHJlYwoJb3JpLmIJCSZkX21vZGUqMHgxMCwlZDAJIyBpbnNlcnQgZGJsIHByZWMKCglnbG9iYWwJCWZzdWIKZnN1YjoKCW1vdi5sCQklZDAsTF9TQ1IzKCVhNikJCSMgc3RvcmUgcm5kIGluZm8KCgljbHIudwkJJWQxCgltb3YuYgkJRFRBRyglYTYpLCVkMQoJbHNsLmIJCSYweDMsJWQxCglvci5iCQlTVEFHKCVhNiksJWQxCQkjIGNvbWJpbmUgc3JjIHRhZ3MKCglibmUudwkJZnN1Yl9ub3Rfbm9ybQkJIyBvcHRpbWl6ZSBvbiBub24tbm9ybSBpbnB1dAoKIwojIFNVQjogbm9ybXMgYW5kIGRlbm9ybXMKIwpmc3ViX25vcm06Cglic3IubAkJYWRkc3ViX3NjYWxlcjIJCSMgc2NhbGUgZXhwb25lbnRzCgpmc3ViX3plcm9fZW50cnk6CglmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4ODAJIyBsb2FkIGRzdCBvcAoKCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCglmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKCglmc3ViLngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBzdWJ0cmFjdAoKCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCglmbW92LmwJCSVmcHNyLCVkMQkJIyBmZXRjaCBJTkVYMiwgTiwgWgoKCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgZXhjIGFuZCBjY29kZSBiaXRzCgoJZmJlcS53CQlmc3ViX3plcm9fZXhpdAkJIyBpZiByZXN1bHQgemVybywgZW5kIG5vdwoKCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKCglmbW92bS54CQkmMHgwMSwtKCVzcCkJCSMgc2F2ZSByZXN1bHQgdG8gc3RhY2sKCgltb3YudwkJMitMX1NDUjMoJWE2KSwlZDEKCWxzci5iCQkmMHg2LCVkMQoKCW1vdi53CQkoJXNwKSwlZDIJCSMgZmV0Y2ggbmV3IGV4cG9uZW50CglhbmRpLmwJCSYweDdmZmYsJWQyCQkjIHN0cmlwIHNpZ24KCXN1Yi5sCQklZDAsJWQyCQkJIyBhZGQgc2NhbGUgZmFjdG9yCgoJY21wLmwJCSVkMiwodGJsX2ZzdWJfb3ZmbC5iLCVwYywlZDEudyo0KSAjIGlzIGl0IGFuIG92ZXJmbG93PwoJYmdlLmIJCWZzdWJfb3ZmbAkJIyB5ZXMKCgljbXAubAkJJWQyLCh0YmxfZnN1Yl91bmZsLmIsJXBjLCVkMS53KjQpICMgaXMgaXQgYW4gdW5kZXJmbG93PwoJYmx0LncJCWZzdWJfdW5mbAkJIyB5ZXMKCWJlcS53CQlmc3ViX21heV91bmZsCQkjIG1heWJlOyBnbyBmaW5kIG91dAoKZnN1Yl9ub3JtYWw6Cgltb3YudwkJKCVzcCksJWQxCglhbmRpLncJCSYweDgwMDAsJWQxCQkjIGtlZXAgc2lnbgoJb3IudwkJJWQyLCVkMQkJCSMgaW5zZXJ0IG5ldyBleHBvbmVudAoJbW92LncJCSVkMSwoJXNwKQkJIyBpbnNlcnQgbmV3IGV4cG9uZW50CgoJZm1vdm0ueAkJKCVzcCkrLCYweDgwCQkjIHJldHVybiByZXN1bHQgaW4gZnAwCgoJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgoJcnRzCgpmc3ViX3plcm9fZXhpdDoKIwlmbW92LnMJCSYweDAwMDAwMDAwLCVmcDAJIyByZXR1cm4gemVybyBpbiBmcDAKCXJ0cwoKdGJsX2ZzdWJfb3ZmbDoKCWxvbmcJCTB4N2ZmZgkJCSMgZXh0IG92ZmwKCWxvbmcJCTB4NDA3ZgkJCSMgc2dsIG92ZmwKCWxvbmcJCTB4NDNmZgkJCSMgZGJsIG92ZmwKCnRibF9mc3ViX3VuZmw6Cglsb25nCSAgICAgICAgMHgwMDAwCQkJIyBleHQgdW5mbAoJbG9uZwkJMHgzZjgxCQkJIyBzZ2wgdW5mbAoJbG9uZwkJMHgzYzAxCQkJIyBkYmwgdW5mbAoKZnN1Yl9vdmZsOgoJb3IubAkJJm92ZmxfaW54X21hc2ssVVNFUl9GUFNSKCVhNikgIyBzZXQgb3ZmbC9hb3ZmbC9haW5leAoKCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMQoJYW5kaS5iCQkmMHgxMywlZDEJCSMgaXMgT1ZGTCBvciBJTkVYIGVuYWJsZWQ/CglibmUuYgkJZnN1Yl9vdmZsX2VuYQkJIyB5ZXMKCglhZGQubAkJJjB4Yywlc3AKZnN1Yl9vdmZsX2RpczoKCWJ0c3QJCSZuZWdfYml0LEZQU1JfQ0MoJWE2KQkjIGlzIHJlc3VsdCBuZWdhdGl2ZT8KCXNuZQkJJWQxCQkJIyBzZXQgc2lnbiBwYXJhbSBhY2NvcmRpbmdseQoJbW92LmwJCUxfU0NSMyglYTYpLCVkMAkJIyBwYXNzIHByZWM6cm5kCglic3IubAkJb3ZmX3JlcwkJCSMgY2FsY3VsYXRlIGRlZmF1bHQgcmVzdWx0Cglvci5iCQklZDAsRlBTUl9DQyglYTYpCSMgc2V0IElORixOIGlmIGFwcGxpY2FibGUKCWZtb3ZtLngJCSglYTApLCYweDgwCQkjIHJldHVybiBkZWZhdWx0IHJlc3VsdCBpbiBmcDAKCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKCXJ0cwoKZnN1Yl9vdmZsX2VuYToKCW1vdi5iCQlMX1NDUjMoJWE2KSwlZDEKCWFuZGkuYgkJJjB4YzAsJWQxCQkjIGlzIHByZWNpc2lvbiBleHRlbmRlZD8KCWJuZS5iCQlmc3ViX292ZmxfZW5hX3NkCSMgbm8KCmZzdWJfb3ZmbF9lbmFfY29udDoKCW1vdi53CQkoJXNwKSwlZDEJCSMgZmV0Y2gge3NnbixleHB9CglhbmRpLncJCSYweDgwMDAsJWQxCQkjIGtlZXAgc2lnbgoJc3ViaS5sCQkmMHg2MDAwLCVkMgkJIyBzdWJ0cmFjdCBuZXcgYmlhcwoJYW5kaS53CQkmMHg3ZmZmLCVkMgkJIyBjbGVhciB0b3AgYml0Cglvci53CQklZDIsJWQxCQkJIyBjb25jYXQgc2lnbixleHAKCW1vdi53CQklZDEsKCVzcCkJCSMgaW5zZXJ0IG5ldyBleHBvbmVudAoKCWZtb3ZtLngJCSglc3ApKywmMHg0MAkJIyByZXR1cm4gRVhPUCBpbiBmcDEKCWJyYS5iCQlmc3ViX292ZmxfZGlzCgpmc3ViX292ZmxfZW5hX3NkOgoJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3AKCgltb3YubAkJTF9TQ1IzKCVhNiksJWQxCglhbmRpLmIJCSYweDMwLCVkMQkJIyBjbGVhciBybmQgcHJlYwoJZm1vdi5sCQklZDEsJWZwY3IJCSMgc2V0IEZQQ1IKCglmc3ViLngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBzdWJ0cmFjdAoKCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCgoJYWRkLmwJCSYweGMsJXNwCglmbW92bS54CQkmMHgwMSwtKCVzcCkKCWJyYS5iCQlmc3ViX292ZmxfZW5hX2NvbnQKCmZzdWJfdW5mbDoKCWJzZXQJCSZ1bmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgc2V0IHVuZmwgZXhjIGJpdAoKCWFkZC5sCQkmMHhjLCVzcAoKCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wCgoJZm1vdi5sCQkmcnpfbW9kZSoweDEwLCVmcGNyCSMgc2V0IEZQQ1IKCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCgoJZnN1Yi54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIGV4ZWN1dGUgc3VidHJhY3QKCglmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgoJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBzdGF0dXMKCglvci5sCQklZDEsVVNFUl9GUFNSKCVhNikKCgltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDEKCWFuZGkuYgkJJjB4MGIsJWQxCQkjIGlzIFVORkwgb3IgSU5FWCBlbmFibGVkPwoJYm5lLmIJCWZzdWJfdW5mbF9lbmEJCSMgeWVzCgpmc3ViX3VuZmxfZGlzOgoJZm1vdm0ueAkJJjB4ODAsRlBfU0NSMCglYTYpCSMgc3RvcmUgb3V0IHJlc3VsdAoKCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHJlc3VsdCBhZGRyCgltb3YubAkJTF9TQ1IzKCVhNiksJWQxCQkjIHBhc3M6IHJuZCBwcmVjLG1vZGUKCWJzci5sCQl1bmZfcmVzCQkJIyBjYWxjdWxhdGUgZGVmYXVsdCByZXN1bHQKCW9yLmIJCSVkMCxGUFNSX0NDKCVhNikJIyAnWicgbWF5IGhhdmUgYmVlbiBzZXQKCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg4MAkjIHJldHVybiBkZWZhdWx0IHJlc3VsdCBpbiBmcDAKCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKCXJ0cwoKZnN1Yl91bmZsX2VuYToKCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg0MAoKCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEKCWFuZGkuYgkJJjB4YzAsJWQxCQkjIGlzIHByZWNpc2lvbiBleHRlbmRlZD8KCWJuZS5iCQlmc3ViX3VuZmxfZW5hX3NkCSMgbm8KCglmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKCmZzdWJfdW5mbF9lbmFfY29udDoKCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCgoJZnN1Yi54CQlGUF9TQ1IwKCVhNiksJWZwMQkjIGV4ZWN1dGUgc3VidHJhY3QKCglmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgoKCWZtb3ZtLngJCSYweDQwLEZQX1NDUjAoJWE2KQkjIHN0b3JlIHJlc3VsdCB0byBzdGFjawoJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBmZXRjaCB7c2duLGV4cH0KCW1vdi5sCQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQoJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCglhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KCXN1Yi5sCQklZDAsJWQxCQkJIyBhZGQgc2NhbGUgZmFjdG9yCglhZGRpLmwJCSYweDYwMDAsJWQxCQkjIHN1YnRyYWN0IG5ldyBiaWFzCglhbmRpLncJCSYweDdmZmYsJWQxCQkjIGNsZWFyIHRvcCBiaXQKCW9yLncJCSVkMiwlZDEJCQkjIGNvbmNhdCBzZ24sZXhwCgltb3YudwkJJWQxLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwb25lbnQKCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg0MAkjIHJldHVybiBFWE9QIGluIGZwMQoJYnJhLncJCWZzdWJfdW5mbF9kaXMKCmZzdWJfdW5mbF9lbmFfc2Q6Cgltb3YubAkJTF9TQ1IzKCVhNiksJWQxCglhbmRpLmIJCSYweDMwLCVkMQkJIyBjbGVhciBybmQgcHJlYwoJZm1vdi5sCQklZDEsJWZwY3IJCSMgc2V0IEZQQ1IKCglicmEuYgkJZnN1Yl91bmZsX2VuYV9jb250CgojCiMgcmVzdWx0IGlzIGVxdWFsIHRvIHRoZSBzbWFsbGVzdCBub3JtYWxpemVkIG51bWJlciBpbiB0aGUgc2VsZWN0ZWQgcHJlY2lzaW9uCiMgaWYgdGhlIHByZWNpc2lvbiBpcyBleHRlbmRlZCwgdGhpcyByZXN1bHQgY291bGQgbm90IGhhdmUgY29tZSBmcm9tIGFuCiMgdW5kZXJmbG93IHRoYXQgcm91bmRlZCB1cC4KIwpmc3ViX21heV91bmZsOgoJbW92LmwJCUxfU0NSMyglYTYpLCVkMQoJYW5kaS5iCQkmMHhjMCwlZDEJCSMgZmV0Y2ggcm5kIHByZWMKCWJlcS53CQlmc3ViX25vcm1hbAkJIyB5ZXM7IG5vIHVuZGVyZmxvdyBvY2N1cnJlZAoKCW1vdi5sCQkweDQoJXNwKSwlZDEKCWNtcGkubAkJJWQxLCYweDgwMDAwMDAwCQkjIGlzIGhpKG1hbikgPSAweDgwMDAwMDAwPwoJYm5lLncJCWZzdWJfbm9ybWFsCQkjIG5vOyBubyB1bmRlcmZsb3cgb2NjdXJyZWQKCgl0c3QubAkJMHg4KCVzcCkJCSMgaXMgbG8obWFuKSA9IDB4MD8KCWJuZS53CQlmc3ViX25vcm1hbAkJIyBubzsgbm8gdW5kZXJmbG93IG9jY3VycmVkCgoJYnRzdAkJJmluZXgyX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgaXMgSU5FWDIgc2V0PwoJYmVxLncJCWZzdWJfbm9ybWFsCQkjIG5vOyBubyB1bmRlcmZsb3cgb2NjdXJyZWQKCiMKIyBvaywgc28gbm93IHRoZSByZXN1bHQgaGFzIGEgZXhwb25lbnQgZXF1YWwgdG8gdGhlIHNtYWxsZXN0IG5vcm1hbGl6ZWQKIyBleHBvbmVudCBmb3IgdGhlIHNlbGVjdGVkIHByZWNpc2lvbi4gYWxzbywgdGhlIG1hbnRpc3NhIGlzIGVxdWFsIHRvCiMgMHg4MDAwMDAwMDAwMDAwMDAwIGFuZCB0aGlzIG1hbnRpc3NhIGlzIHRoZSByZXN1bHQgb2Ygcm91bmRpbmcgbm9uLXplcm8KIyBnLHIscy4KIyBub3csIHdlIG11c3QgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHByZS1yb3VuZGVkIHJlc3VsdCB3YXMgYW4gdW5kZXJmbG93CiMgcm91bmRlZCAidXAiIG9yIGEgbm9ybWFsaXplZCBudW1iZXIgcm91bmRlZCAiZG93biIuCiMgc28sIHdlIGRvIHRoaXMgYmUgcmUtZXhlY3V0aW5nIHRoZSBhZGQgdXNpbmcgUlogYXMgdGhlIHJvdW5kaW5nIG1vZGUgYW5kCiMgc2VlaW5nIGlmIHRoZSBuZXcgcmVzdWx0IGlzIHNtYWxsZXIgb3IgZXF1YWwgdG8gdGhlIGN1cnJlbnQgcmVzdWx0LgojCglmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4NDAJIyBsb2FkIGRzdCBvcCBpbnRvIGZwMQoKCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEKCWFuZGkuYgkJJjB4YzAsJWQxCQkjIGtlZXAgcm5kIHByZWMKCW9yaS5iCQkmcnpfbW9kZSoweDEwLCVkMQkjIGluc2VydCBybmQgbW9kZQoJZm1vdi5sCQklZDEsJWZwY3IJCSMgc2V0IEZQQ1IKCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCgoJZnN1Yi54CQlGUF9TQ1IwKCVhNiksJWZwMQkjIGV4ZWN1dGUgc3VidHJhY3QKCglmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgoKCWZhYnMueAkJJWZwMAkJCSMgY29tcGFyZSBhYnNvbHV0ZSB2YWx1ZXMKCWZhYnMueAkJJWZwMQoJZmNtcC54CQklZnAwLCVmcDEJCSMgaXMgZmlyc3QgcmVzdWx0ID4gc2Vjb25kPwoKCWZiZ3QudwkJZnN1Yl91bmZsCQkjIHllczsgaXQncyBhbiB1bmRlcmZsb3cKCWJyYS53CQlmc3ViX25vcm1hbAkJIyBubzsgaXQncyBub3QgYW4gdW5kZXJmbG93CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIwojIFN1YjogaW5wdXRzIGFyZSBub3QgYm90aCBub3JtYWxpemVkOyB3aGF0IGFyZSB0aGV5PwojCmZzdWJfbm90X25vcm06Cgltb3YudwkJKHRibF9mc3ViX29wLmIsJXBjLCVkMS53KjIpLCVkMQoJam1wCQkodGJsX2ZzdWJfb3AuYiwlcGMsJWQxLncqMSkKCglzd2JlZwkJJjQ4CnRibF9mc3ViX29wOgoJc2hvcnQJCWZzdWJfbm9ybQktIHRibF9mc3ViX29wICMgTk9STSAtIE5PUk0KCXNob3J0CQlmc3ViX3plcm9fc3JjCS0gdGJsX2ZzdWJfb3AgIyBOT1JNIC0gWkVSTwoJc2hvcnQJCWZzdWJfaW5mX3NyYwktIHRibF9mc3ViX29wICMgTk9STSAtIElORgoJc2hvcnQJCWZzdWJfcmVzX3FuYW4JLSB0YmxfZnN1Yl9vcCAjIE5PUk0gLSBRTkFOCglzaG9ydAkJZnN1Yl9ub3JtCS0gdGJsX2ZzdWJfb3AgIyBOT1JNIC0gREVOT1JNCglzaG9ydAkJZnN1Yl9yZXNfc25hbgktIHRibF9mc3ViX29wICMgTk9STSAtIFNOQU4KCXNob3J0CQl0YmxfZnN1Yl9vcAktIHRibF9mc3ViX29wICMKCXNob3J0CQl0YmxfZnN1Yl9vcAktIHRibF9mc3ViX29wICMKCglzaG9ydAkJZnN1Yl96ZXJvX2RzdAktIHRibF9mc3ViX29wICMgWkVSTyAtIE5PUk0KCXNob3J0CQlmc3ViX3plcm9fMgktIHRibF9mc3ViX29wICMgWkVSTyAtIFpFUk8KCXNob3J0CQlmc3ViX2luZl9zcmMJLSB0YmxfZnN1Yl9vcCAjIFpFUk8gLSBJTkYKCXNob3J0CQlmc3ViX3Jlc19xbmFuCS0gdGJsX2ZzdWJfb3AgIyBOT1JNIC0gUU5BTgoJc2hvcnQJCWZzdWJfemVyb19kc3QJLSB0YmxfZnN1Yl9vcCAjIFpFUk8gLSBERU5PUk0KCXNob3J0CQlmc3ViX3Jlc19zbmFuCS0gdGJsX2ZzdWJfb3AgIyBOT1JNIC0gU05BTgoJc2hvcnQJCXRibF9mc3ViX29wCS0gdGJsX2ZzdWJfb3AgIwoJc2hvcnQJCXRibF9mc3ViX29wCS0gdGJsX2ZzdWJfb3AgIwoKCXNob3J0CQlmc3ViX2luZl9kc3QJLSB0YmxfZnN1Yl9vcCAjIElORiAtIE5PUk0KCXNob3J0CQlmc3ViX2luZl9kc3QJLSB0YmxfZnN1Yl9vcCAjIElORiAtIFpFUk8KCXNob3J0CQlmc3ViX2luZl8yCS0gdGJsX2ZzdWJfb3AgIyBJTkYgLSBJTkYKCXNob3J0CQlmc3ViX3Jlc19xbmFuCS0gdGJsX2ZzdWJfb3AgIyBOT1JNIC0gUU5BTgoJc2hvcnQJCWZzdWJfaW5mX2RzdAktIHRibF9mc3ViX29wICMgSU5GIC0gREVOT1JNCglzaG9ydAkJZnN1Yl9yZXNfc25hbgktIHRibF9mc3ViX29wICMgTk9STSAtIFNOQU4KCXNob3J0CQl0YmxfZnN1Yl9vcAktIHRibF9mc3ViX29wICMKCXNob3J0CQl0YmxfZnN1Yl9vcAktIHRibF9mc3ViX29wICMKCglzaG9ydAkJZnN1Yl9yZXNfcW5hbgktIHRibF9mc3ViX29wICMgUU5BTiAtIE5PUk0KCXNob3J0CQlmc3ViX3Jlc19xbmFuCS0gdGJsX2ZzdWJfb3AgIyBRTkFOIC0gWkVSTwoJc2hvcnQJCWZzdWJfcmVzX3FuYW4JLSB0YmxfZnN1Yl9vcCAjIFFOQU4gLSBJTkYKCXNob3J0CQlmc3ViX3Jlc19xbmFuCS0gdGJsX2ZzdWJfb3AgIyBRTkFOIC0gUU5BTgoJc2hvcnQJCWZzdWJfcmVzX3FuYW4JLSB0YmxfZnN1Yl9vcCAjIFFOQU4gLSBERU5PUk0KCXNob3J0CQlmc3ViX3Jlc19zbmFuCS0gdGJsX2ZzdWJfb3AgIyBRTkFOIC0gU05BTgoJc2hvcnQJCXRibF9mc3ViX29wCS0gdGJsX2ZzdWJfb3AgIwoJc2hvcnQJCXRibF9mc3ViX29wCS0gdGJsX2ZzdWJfb3AgIwoKCXNob3J0CQlmc3ViX25vcm0JLSB0YmxfZnN1Yl9vcCAjIERFTk9STSAtIE5PUk0KCXNob3J0CQlmc3ViX3plcm9fc3JjCS0gdGJsX2ZzdWJfb3AgIyBERU5PUk0gLSBaRVJPCglzaG9ydAkJZnN1Yl9pbmZfc3JjCS0gdGJsX2ZzdWJfb3AgIyBERU5PUk0gLSBJTkYKCXNob3J0CQlmc3ViX3Jlc19xbmFuCS0gdGJsX2ZzdWJfb3AgIyBOT1JNIC0gUU5BTgoJc2hvcnQJCWZzdWJfbm9ybQktIHRibF9mc3ViX29wICMgREVOT1JNIC0gREVOT1JNCglzaG9ydAkJZnN1Yl9yZXNfc25hbgktIHRibF9mc3ViX29wICMgTk9STSAtIFNOQU4KCXNob3J0CQl0YmxfZnN1Yl9vcAktIHRibF9mc3ViX29wICMKCXNob3J0CQl0YmxfZnN1Yl9vcAktIHRibF9mc3ViX29wICMKCglzaG9ydAkJZnN1Yl9yZXNfc25hbgktIHRibF9mc3ViX29wICMgU05BTiAtIE5PUk0KCXNob3J0CQlmc3ViX3Jlc19zbmFuCS0gdGJsX2ZzdWJfb3AgIyBTTkFOIC0gWkVSTwoJc2hvcnQJCWZzdWJfcmVzX3NuYW4JLSB0YmxfZnN1Yl9vcCAjIFNOQU4gLSBJTkYKCXNob3J0CQlmc3ViX3Jlc19zbmFuCS0gdGJsX2ZzdWJfb3AgIyBTTkFOIC0gUU5BTgoJc2hvcnQJCWZzdWJfcmVzX3NuYW4JLSB0YmxfZnN1Yl9vcCAjIFNOQU4gLSBERU5PUk0KCXNob3J0CQlmc3ViX3Jlc19zbmFuCS0gdGJsX2ZzdWJfb3AgIyBTTkFOIC0gU05BTgoJc2hvcnQJCXRibF9mc3ViX29wCS0gdGJsX2ZzdWJfb3AgIwoJc2hvcnQJCXRibF9mc3ViX29wCS0gdGJsX2ZzdWJfb3AgIwoKZnN1Yl9yZXNfcW5hbjoKCWJyYS5sCQlyZXNfcW5hbgpmc3ViX3Jlc19zbmFuOgoJYnJhLmwJCXJlc19zbmFuCgojCiMgYm90aCBvcGVyYW5kcyBhcmUgWkVST2VzCiMKZnN1Yl96ZXJvXzI6Cgltb3YuYgkJU1JDX0VYKCVhMCksJWQwCgltb3YuYgkJRFNUX0VYKCVhMSksJWQxCgllb3IuYgkJJWQxLCVkMAoJYnBsLmIJCWZzdWJfemVyb18yX2Noa19ybQoKIyB0aGUgc2lnbnMgYXJlIG9wcG9zaXRlLCBzbywgcmV0dXJuIGEgWkVSTyB3LyB0aGUgc2lnbiBvZiB0aGUgZHN0IFpFUk8KCXRzdC5iCQklZDAJCQkjIGlzIGRzdCBuZWdhdGl2ZT8KCWJtaS5iCQlmc3ViX3plcm9fMl9ybQkJIyB5ZXMKCWZtb3YucwkJJjB4MDAwMDAwMDAsJWZwMAkjIG5vOyByZXR1cm4gK1pFUk8KCW1vdi5iCQkmel9ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgWgoJcnRzCgojCiMgdGhlIFpFUk9lcyBoYXZlIHRoZSBzYW1lIHNpZ25zOgojIC0gdGhlcmVmb3JlLCB3ZSByZXR1cm4gK1pFUk8gaWYgdGhlIHJvdW5kaW5nIG1vZGUgaXMgUk4sUlosIG9yIFJQCiMgLSAtWkVSTyBpcyByZXR1cm5lZCBpbiB0aGUgY2FzZSBvZiBSTS4KIwpmc3ViX3plcm9fMl9jaGtfcm06Cgltb3YuYgkJMytMX1NDUjMoJWE2KSwlZDEKCWFuZGkuYgkJJjB4MzAsJWQxCQkjIGV4dHJhY3Qgcm5kIG1vZGUKCWNtcGkuYgkJJWQxLCZybV9tb2RlKjB4MTAJIyBpcyBybmQgbW9kZSA9IFJNPwoJYmVxLmIJCWZzdWJfemVyb18yX3JtCQkjIHllcwoJZm1vdi5zCQkmMHgwMDAwMDAwMCwlZnAwCSMgbm87IHJldHVybiArWkVSTwoJbW92LmIJCSZ6X2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCBaCglydHMKCmZzdWJfemVyb18yX3JtOgoJZm1vdi5zCQkmMHg4MDAwMDAwMCwlZnAwCSMgcmV0dXJuIC1aRVJPCgltb3YuYgkJJnpfYm1hc2srbmVnX2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCBaL05FRwoJcnRzCgojCiMgb25lIG9wZXJhbmQgaXMgYSBaRVJPIGFuZCB0aGUgb3RoZXIgaXMgYSBERU5PUk0gb3IgYSBOT1JNLgojIHNjYWxlIHRoZSBERU5PUk0gb3IgTk9STSBhbmQganVtcCB0byB0aGUgcmVndWxhciBmc3ViIHJvdXRpbmUuCiMKZnN1Yl96ZXJvX2RzdDoKCW1vdi53CQlTUkNfRVgoJWEwKSxGUF9TQ1IwX0VYKCVhNikKCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikKCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKCWJzci5sCQlzY2FsZV90b196ZXJvX3NyYwkjIHNjYWxlIHRoZSBvcGVyYW5kCgljbHIudwkJRlBfU0NSMV9FWCglYTYpCgljbHIubAkJRlBfU0NSMV9ISSglYTYpCgljbHIubAkJRlBfU0NSMV9MTyglYTYpCglicmEudwkJZnN1Yl96ZXJvX2VudHJ5CQkjIGdvIGV4ZWN1dGUgZnN1YgoKZnN1Yl96ZXJvX3NyYzoKCW1vdi53CQlEU1RfRVgoJWExKSxGUF9TQ1IxX0VYKCVhNikKCW1vdi5sCQlEU1RfSEkoJWExKSxGUF9TQ1IxX0hJKCVhNikKCW1vdi5sCQlEU1RfTE8oJWExKSxGUF9TQ1IxX0xPKCVhNikKCWJzci5sCQlzY2FsZV90b196ZXJvX2RzdAkjIHNjYWxlIHRoZSBvcGVyYW5kCgljbHIudwkJRlBfU0NSMF9FWCglYTYpCgljbHIubAkJRlBfU0NSMF9ISSglYTYpCgljbHIubAkJRlBfU0NSMF9MTyglYTYpCglicmEudwkJZnN1Yl96ZXJvX2VudHJ5CQkjIGdvIGV4ZWN1dGUgZnN1YgoKIwojIGJvdGggb3BlcmFuZHMgYXJlIElORnMuIGFuIE9QRVJSIHdpbGwgcmVzdWx0IGlmIHRoZSBJTkZzIGhhdmUgdGhlCiMgc2FtZSBzaWducy4gZWxzZSwKIwpmc3ViX2luZl8yOgoJbW92LmIJCVNSQ19FWCglYTApLCVkMAkJIyBleGNsdXNpdmUgb3IgdGhlIHNpZ25zCgltb3YuYgkJRFNUX0VYKCVhMSksJWQxCgllb3IuYgkJJWQxLCVkMAoJYnBsLmwJCXJlc19vcGVycgkJIyB3ZWVkIG91dCAoLUlORikrKCtJTkYpCgojIG9rLCBzbyBpdCdzIG5vdCBhbiBPUEVSUi4gYnV0IHdlIGRvIGhhdmUgdG8gcmVtZW1iZXIgdG8gcmV0dXJuCiMgdGhlIHNyYyBJTkYgc2luY2UgdGhhdCdzIHdoZXJlIHRoZSA4ODEvODgyIGdldHMgdGhlIGotYml0LgoKZnN1Yl9pbmZfc3JjOgoJZm1vdm0ueAkJU1JDKCVhMCksJjB4ODAJCSMgcmV0dXJuIHNyYyBJTkYKCWZuZWcueAkJJWZwMAkJCSMgaW52ZXJ0IHNpZ24KCWZiZ2UudwkJZnN1Yl9pbmZfZG9uZQkJIyBzaWduIGlzIG5vdyBwb3NpdGl2ZQoJbW92LmIJCSZuZWdfYm1hc2sraW5mX2JtYXNrLEZQU1JfQ0MoJWE2KSAjIHNldCBJTkYvTkVHCglydHMKCmZzdWJfaW5mX2RzdDoKCWZtb3ZtLngJCURTVCglYTEpLCYweDgwCQkjIHJldHVybiBkc3QgSU5GCgl0c3QuYgkJRFNUX0VYKCVhMSkJCSMgaXMgSU5GIG5lZ2F0aXZlPwoJYnBsLmIJCWZzdWJfaW5mX2RvbmUJCSMgbm8KCW1vdi5iCQkmbmVnX2JtYXNrK2luZl9ibWFzayxGUFNSX0NDKCVhNikgIyBzZXQgSU5GL05FRwoJcnRzCgpmc3ViX2luZl9kb25lOgoJbW92LmIJCSZpbmZfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0IElORgoJcnRzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlmc3FydCgpOiBlbXVsYXRlcyB0aGUgZnNxcnQgaW5zdHJ1Y3Rpb24JCQkJIwojCWZzc3FydCgpOiBlbXVsYXRlcyB0aGUgZnNzcXJ0IGluc3RydWN0aW9uCQkJIwojCWZkc3FydCgpOiBlbXVsYXRlcyB0aGUgZmRzcXJ0IGluc3RydWN0aW9uCQkJIwojCQkJCQkJCQkJIwojIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJc2NhbGVfc3FydCgpIC0gc2NhbGUgdGhlIHNvdXJjZSBvcGVyYW5kCQkJCSMKIwl1bmZfcmVzKCkgLSByZXR1cm4gZGVmYXVsdCB1bmRlcmZsb3cgcmVzdWx0CQkJIwojCW92Zl9yZXMoKSAtIHJldHVybiBkZWZhdWx0IG92ZXJmbG93IHJlc3VsdAkJCSMKIwlyZXNfcW5hbl8xb3AoKSAtIHJldHVybiBRTkFOIHJlc3VsdAkJCQkjCiMJcmVzX3NuYW5fMW9wKCkgLSByZXR1cm4gU05BTiByZXN1bHQJCQkJIwojCQkJCQkJCQkJIwojIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBzb3VyY2Ugb3BlcmFuZAkJIwojCWQwICBybmQgcHJlYyxtb2RlCQkJCQkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJZnAwID0gcmVzdWx0CQkJCQkJCSMKIwlmcDEgPSBFWE9QIChpZiBleGNlcHRpb24gb2NjdXJyZWQpCQkJCSMKIwkJCQkJCQkJCSMKIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCUhhbmRsZSBOQU5zLCBpbmZpbml0aWVzLCBhbmQgemVyb2VzIGFzIHNwZWNpYWwgY2FzZXMuIERpdmlkZQkjCiMgbm9ybXMvZGVub3JtcyBpbnRvIGV4dC9zZ2wvZGJsIHByZWNpc2lvbi4JCQkJIwojCUZvciBub3Jtcy9kZW5vcm1zLCBzY2FsZSB0aGUgZXhwb25lbnRzIHN1Y2ggdGhhdCBhIHNxcnQJCSMKIyBpbnN0cnVjdGlvbiB3b24ndCBjYXVzZSBhbiBleGNlcHRpb24uIFVzZSB0aGUgcmVndWxhciBmc3FydCB0bwkjCiMgY29tcHV0ZSBhIHJlc3VsdC4gQ2hlY2sgaWYgdGhlIHJlZ3VsYXIgb3BlcmFuZHMgd291bGQgaGF2ZSB0YWtlbgkjCiMgYW4gZXhjZXB0aW9uLiBJZiBzbywgcmV0dXJuIHRoZSBkZWZhdWx0IG92ZXJmbG93L3VuZGVyZmxvdyByZXN1bHQJIwojIGFuZCByZXR1cm4gdGhlIEVYT1AgaWYgZXhjZXB0aW9ucyBhcmUgZW5hYmxlZC4gRWxzZSwgc2NhbGUgdGhlCSMKIyByZXN1bHQgb3BlcmFuZCB0byB0aGUgcHJvcGVyIGV4cG9uZW50LgkJCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCglnbG9iYWwJCWZzc3FydApmc3NxcnQ6CglhbmRpLmIJCSYweDMwLCVkMAkJIyBjbGVhciBybmQgcHJlYwoJb3JpLmIJCSZzX21vZGUqMHgxMCwlZDAJIyBpbnNlcnQgc2dsIHByZWNpc2lvbgoJYnJhLmIJCWZzcXJ0CgoJZ2xvYmFsCQlmZHNxcnQKZmRzcXJ0OgoJYW5kaS5iCQkmMHgzMCwlZDAJCSMgY2xlYXIgcm5kIHByZWMKCW9yaS5iCQkmZF9tb2RlKjB4MTAsJWQwCSMgaW5zZXJ0IGRibCBwcmVjaXNpb24KCglnbG9iYWwJCWZzcXJ0CmZzcXJ0OgoJbW92LmwJCSVkMCxMX1NDUjMoJWE2KQkJIyBzdG9yZSBybmQgaW5mbwoJY2xyLncJCSVkMQoJbW92LmIJCVNUQUcoJWE2KSwlZDEKCWJuZS53CQlmc3FydF9ub3Rfbm9ybQkJIyBvcHRpbWl6ZSBvbiBub24tbm9ybSBpbnB1dAoKIwojIFNRVUFSRSBST09UOiBub3JtcyBhbmQgZGVub3JtcyBPTkxZIQojCmZzcXJ0X25vcm06Cgl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgaXMgb3BlcmFuZCBuZWdhdGl2ZT8KCWJtaS5sCQlyZXNfb3BlcnIJCSMgeWVzCgoJYW5kaS5iCQkmMHhjMCwlZDAJCSMgaXMgcHJlY2lzaW9uIGV4dGVuZGVkPwoJYm5lLmIJCWZzcXJ0X25vdF9leHQJCSMgbm87IGdvIGhhbmRsZSBzZ2wgb3IgZGJsCgoJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCglmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgoKCWZzcXJ0LngJCSglYTApLCVmcDAJCSMgZXhlY3V0ZSBzcXVhcmUgcm9vdAoKCWZtb3YubAkJJWZwc3IsJWQxCglvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzZXQgTixJTkVYCgoJcnRzCgpmc3FydF9kZW5vcm06Cgl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgaXMgb3BlcmFuZCBuZWdhdGl2ZT8KCWJtaS5sCQlyZXNfb3BlcnIJCSMgeWVzCgoJYW5kaS5iCQkmMHhjMCwlZDAJCSMgaXMgcHJlY2lzaW9uIGV4dGVuZGVkPwoJYm5lLmIJCWZzcXJ0X25vdF9leHQJCSMgbm87IGdvIGhhbmRsZSBzZ2wgb3IgZGJsCgoJbW92LncJCVNSQ19FWCglYTApLEZQX1NDUjBfRVgoJWE2KQoJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQoJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQoKCWJzci5sCQlzY2FsZV9zcXJ0CQkjIGNhbGN1bGF0ZSBzY2FsZSBmYWN0b3IKCglicmEudwkJZnNxcnRfc2Rfbm9ybWFsCgojCiMgb3BlcmFuZCBpcyBlaXRoZXIgc2luZ2xlIG9yIGRvdWJsZQojCmZzcXJ0X25vdF9leHQ6CgljbXBpLmIJCSVkMCwmc19tb2RlKjB4MTAJIyBzZXBhcmF0ZSBzZ2wvZGJsIHByZWMKCWJuZS53CQlmc3FydF9kYmwKCiMKIyBvcGVyYW5kIGlzIHRvIGJlIHJvdW5kZWQgdG8gc2luZ2xlIHByZWNpc2lvbgojCmZzcXJ0X3NnbDoKCW1vdi53CQlTUkNfRVgoJWEwKSxGUF9TQ1IwX0VYKCVhNikKCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikKCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKCglic3IubAkJc2NhbGVfc3FydAkJIyBjYWxjdWxhdGUgc2NhbGUgZmFjdG9yCgoJY21waS5sCQklZDAsJjB4M2ZmZi0weDNmODEJIyB3aWxsIG1vdmUgaW4gdW5kZXJmbG93PwoJYmVxLncJCWZzcXJ0X3NkX21heV91bmZsCgliZ3QudwkJZnNxcnRfc2RfdW5mbAkJIyB5ZXM7IGdvIGhhbmRsZSB1bmRlcmZsb3cKCWNtcGkubAkJJWQwLCYweDNmZmYtMHg0MDdmCSMgd2lsbCBtb3ZlIGluIG92ZXJmbG93PwoJYmVxLncJCWZzcXJ0X3NkX21heV9vdmZsCSMgbWF5YmU7IGdvIGNoZWNrCglibHQudwkJZnNxcnRfc2Rfb3ZmbAkJIyB5ZXM7IGdvIGhhbmRsZSBvdmVyZmxvdwoKIwojIG9wZXJhbmQgd2lsbCBOT1Qgb3ZlcmZsb3cgb3IgdW5kZXJmbG93IHdoZW4gbW92ZWQgaW4gdG8gdGhlIGZwIHJlZyBmaWxlCiMKZnNxcnRfc2Rfbm9ybWFsOgoJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgoKCWZzcXJ0LngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgcGVyZm9ybSBhYnNvbHV0ZQoKCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgRlBTUgoJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKCglvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KCmZzcXJ0X3NkX25vcm1hbF9leGl0OgoJbW92LmwJCSVkMiwtKCVzcCkJCSMgc2F2ZSBkMgoJZm1vdm0ueAkJJjB4ODAsRlBfU0NSMCglYTYpCSMgc3RvcmUgb3V0IHJlc3VsdAoJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBsb2FkIHNnbixleHAKCW1vdi5sCQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQoJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCglzdWIubAkJJWQwLCVkMQkJCSMgYWRkIHNjYWxlIGZhY3RvcgoJYW5kaS53CQkmMHg4MDAwLCVkMgkJIyBrZWVwIG9sZCBzaWduCglvci53CQklZDEsJWQyCQkJIyBjb25jYXQgb2xkIHNpZ24sbmV3IGV4cAoJbW92LncJCSVkMixGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50Cgltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCglmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4ODAJIyByZXR1cm4gcmVzdWx0IGluIGZwMAoJcnRzCgojCiMgb3BlcmFuZCBpcyB0byBiZSByb3VuZGVkIHRvIGRvdWJsZSBwcmVjaXNpb24KIwpmc3FydF9kYmw6Cgltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCgltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCgltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCgoJYnNyLmwJCXNjYWxlX3NxcnQJCSMgY2FsY3VsYXRlIHNjYWxlIGZhY3RvcgoKCWNtcGkubAkJJWQwLCYweDNmZmYtMHgzYzAxCSMgd2lsbCBtb3ZlIGluIHVuZGVyZmxvdz8KCWJlcS53CQlmc3FydF9zZF9tYXlfdW5mbAoJYmd0LmIJCWZzcXJ0X3NkX3VuZmwJCSMgeWVzOyBnbyBoYW5kbGUgdW5kZXJmbG93CgljbXBpLmwJCSVkMCwmMHgzZmZmLTB4NDNmZgkjIHdpbGwgbW92ZSBpbiBvdmVyZmxvdz8KCWJlcS53CQlmc3FydF9zZF9tYXlfb3ZmbAkjIG1heWJlOyBnbyBjaGVjawoJYmx0LncJCWZzcXJ0X3NkX292ZmwJCSMgeWVzOyBnbyBoYW5kbGUgb3ZlcmZsb3cKCWJyYS53CQlmc3FydF9zZF9ub3JtYWwJCSMgbm87IGhvIGhhbmRsZSBub3JtYWxpemVkIG9wCgojIHdlJ3JlIG9uIHRoZSBsaW5lIGhlcmUgYW5kIHRoZSBkaXN0aW5ndWlzaW5nIGNoYXJhY3RlcmlzdGljIGlzIHdoZXRoZXIKIyB0aGUgZXhwb25lbnQgaXMgM2ZmZiBvciAzZmZlLiBpZiBpdCdzIDNmZmUsIHRoZW4gaXQncyBhIHNhZmUgbnVtYmVyCiMgZWxzZXdpc2UgZmFsbCB0aHJvdWdoIHRvIHVuZGVyZmxvdy4KZnNxcnRfc2RfbWF5X3VuZmw6CglidHN0CQkmMHgwLDErRlBfU0NSMF9FWCglYTYpCSMgaXMgZXhwb25lbnQgMHgzZmZmPwoJYm5lLncJCWZzcXJ0X3NkX25vcm1hbAkJIyB5ZXMsIHNvIG5vIHVuZGVyZmxvdwoKIwojIG9wZXJhbmQgV0lMTCB1bmRlcmZsb3cgd2hlbiBtb3ZlZCBpbiB0byB0aGUgZnAgcmVnaXN0ZXIgZmlsZQojCmZzcXJ0X3NkX3VuZmw6Cglic2V0CQkmdW5mbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIHNldCB1bmZsIGV4YyBiaXQKCglmbW92LmwJCSZyel9tb2RlKjB4MTAsJWZwY3IJIyBzZXQgRlBDUgoJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKCglmc3FydC54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIGV4ZWN1dGUgc3F1YXJlIHJvb3QKCglmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIHN0YXR1cwoJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKCglvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KCiMgaWYgdW5kZXJmbG93IG9yIGluZXhhY3QgaXMgZW5hYmxlZCwgZ28gY2FsY3VsYXRlIEVYT1AgZmlyc3QuCgltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDEKCWFuZGkuYgkJJjB4MGIsJWQxCQkjIGlzIFVORkwgb3IgSU5FWCBlbmFibGVkPwoJYm5lLmIJCWZzcXJ0X3NkX3VuZmxfZW5hCSMgeWVzCgpmc3FydF9zZF91bmZsX2RpczoKCWZtb3ZtLngJCSYweDgwLEZQX1NDUjAoJWE2KQkjIHN0b3JlIG91dCByZXN1bHQKCglsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzOiByZXN1bHQgYWRkcgoJbW92LmwJCUxfU0NSMyglYTYpLCVkMQkJIyBwYXNzOiBybmQgcHJlYyxtb2RlCglic3IubAkJdW5mX3JlcwkJCSMgY2FsY3VsYXRlIGRlZmF1bHQgcmVzdWx0Cglvci5iCQklZDAsRlBTUl9DQyglYTYpCSMgc2V0IHBvc3NpYmxlICdaJyBjY29kZQoJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDgwCSMgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGluIGZwMAoJcnRzCgojCiMgb3BlcmFuZCB3aWxsIHVuZGVyZmxvdyBBTkQgdW5kZXJmbG93IGlzIGVuYWJsZWQuCiMgdGhlcmVmb3JlLCB3ZSBtdXN0IHJldHVybiB0aGUgcmVzdWx0IHJvdW5kZWQgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uLgojCmZzcXJ0X3NkX3VuZmxfZW5hOgoJbW92LmwJCUZQX1NDUjBfSEkoJWE2KSxGUF9TQ1IxX0hJKCVhNikKCW1vdi5sCQlGUF9TQ1IwX0xPKCVhNiksRlBfU0NSMV9MTyglYTYpCgltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGxvYWQgY3VycmVudCBleHBvbmVudAoKCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKCW1vdi5sCQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQoJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCglhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KCXN1Yi5sCQklZDAsJWQxCQkJIyBzdWJ0cmFjdCBzY2FsZSBmYWN0b3IKCWFkZGkubAkJJjB4NjAwMCwlZDEJCSMgYWRkIG5ldyBiaWFzCglhbmRpLncJCSYweDdmZmYsJWQxCglvci53CQklZDIsJWQxCQkJIyBjb25jYXQgbmV3IHNpZ24sbmV3IGV4cAoJbW92LncJCSVkMSxGUF9TQ1IxX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cAoJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDQwCSMgcmV0dXJuIEVYT1AgaW4gZnAxCgltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCglicmEuYgkJZnNxcnRfc2RfdW5mbF9kaXMKCiMKIyBvcGVyYW5kIFdJTEwgb3ZlcmZsb3cuCiMKZnNxcnRfc2Rfb3ZmbDoKCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCglmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKCglmc3FydC54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIHBlcmZvcm0gc3F1YXJlIHJvb3QKCglmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgoJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBGUFNSCgoJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCgpmc3FydF9zZF9vdmZsX3RzdDoKCW9yLmwJCSZvdmZsX2lueF9tYXNrLFVTRVJfRlBTUiglYTYpICMgc2V0IG92ZmwvYW92ZmwvYWluZXgKCgltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDEKCWFuZGkuYgkJJjB4MTMsJWQxCQkjIGlzIE9WRkwgb3IgSU5FWCBlbmFibGVkPwoJYm5lLmIJCWZzcXJ0X3NkX292ZmxfZW5hCSMgeWVzCgojCiMgT1ZGTCBpcyBub3QgZW5hYmxlZDsgdGhlcmVmb3JlLCB3ZSBtdXN0IGNyZWF0ZSB0aGUgZGVmYXVsdCByZXN1bHQgYnkKIyBjYWxsaW5nIG92Zl9yZXMoKS4KIwpmc3FydF9zZF9vdmZsX2RpczoKCWJ0c3QJCSZuZWdfYml0LEZQU1JfQ0MoJWE2KQkjIGlzIHJlc3VsdCBuZWdhdGl2ZT8KCXNuZQkJJWQxCQkJIyBzZXQgc2lnbiBwYXJhbSBhY2NvcmRpbmdseQoJbW92LmwJCUxfU0NSMyglYTYpLCVkMAkJIyBwYXNzOiBwcmVjLG1vZGUKCWJzci5sCQlvdmZfcmVzCQkJIyBjYWxjdWxhdGUgZGVmYXVsdCByZXN1bHQKCW9yLmIJCSVkMCxGUFNSX0NDKCVhNikJIyBzZXQgSU5GLE4gaWYgYXBwbGljYWJsZQoJZm1vdm0ueAkJKCVhMCksJjB4ODAJCSMgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGluIGZwMAoJcnRzCgojCiMgT1ZGTCBpcyBlbmFibGVkLgojIHRoZSBJTkVYMiBiaXQgaGFzIGFscmVhZHkgYmVlbiB1cGRhdGVkIGJ5IHRoZSByb3VuZCB0byB0aGUgY29ycmVjdCBwcmVjaXNpb24uCiMgbm93LCByb3VuZCB0byBleHRlbmRlZChhbmQgZG9uJ3QgYWx0ZXIgdGhlIEZQU1IpLgojCmZzcXJ0X3NkX292ZmxfZW5hOgoJbW92LmwJCSVkMiwtKCVzcCkJCSMgc2F2ZSBkMgoJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBmZXRjaCB7c2duLGV4cH0KCW1vdi5sCQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQoJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCglhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KCXN1Yi5sCQklZDAsJWQxCQkJIyBhZGQgc2NhbGUgZmFjdG9yCglzdWJpLmwJCSYweDYwMDAsJWQxCQkjIHN1YnRyYWN0IGJpYXMKCWFuZGkudwkJJjB4N2ZmZiwlZDEKCW9yLncJCSVkMiwlZDEJCQkjIGNvbmNhdCBzaWduLGV4cAoJbW92LncJCSVkMSxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50CglmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4NDAJIyByZXR1cm4gRVhPUCBpbiBmcDEKCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKCWJyYS5iCQlmc3FydF9zZF9vdmZsX2RpcwoKIwojIHRoZSBtb3ZlIGluIE1BWSB1bmRlcmZsb3cuIHNvLi4uCiMKZnNxcnRfc2RfbWF5X292Zmw6CglidHN0CQkmMHgwLDErRlBfU0NSMF9FWCglYTYpCSMgaXMgZXhwb25lbnQgMHgzZmZmPwoJYm5lLncJCWZzcXJ0X3NkX292ZmwJCSMgeWVzLCBzbyBvdmVyZmxvdwoKCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCglmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKCglmc3FydC54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIHBlcmZvcm0gYWJzb2x1dGUKCglmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIHN0YXR1cwoJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKCglvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KCglmbW92LngJCSVmcDAsJWZwMQkJIyBtYWtlIGEgY29weSBvZiByZXN1bHQKCWZjbXAuYgkJJWZwMSwmMHgxCQkjIGlzIHxyZXN1bHR8ID49IDEuYj8KCWZiZ2UudwkJZnNxcnRfc2Rfb3ZmbF90c3QJIyB5ZXM7IG92ZXJmbG93IGhhcyBvY2N1cnJlZAoKIyBubywgaXQgZGlkbid0IG92ZXJmbG93OyB3ZSBoYXZlIGNvcnJlY3QgcmVzdWx0CglicmEudwkJZnNxcnRfc2Rfbm9ybWFsX2V4aXQKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgojCiMgaW5wdXQgaXMgbm90IG5vcm1hbGl6ZWQ7IHdoYXQgaXMgaXQ/CiMKZnNxcnRfbm90X25vcm06CgljbXBpLmIJCSVkMSwmREVOT1JNCQkjIHdlZWQgb3V0IERFTk9STQoJYmVxLncJCWZzcXJ0X2Rlbm9ybQoJY21waS5iCQklZDEsJlpFUk8JCSMgd2VlZCBvdXQgWkVSTwoJYmVxLmIJCWZzcXJ0X3plcm8KCWNtcGkuYgkJJWQxLCZJTkYJCSMgd2VlZCBvdXQgSU5GCgliZXEuYgkJZnNxcnRfaW5mCgljbXBpLmIJCSVkMSwmU05BTgkJIyB3ZWVkIG91dCBTTkFOCgliZXEubAkJcmVzX3NuYW5fMW9wCglicmEubAkJcmVzX3FuYW5fMW9wCgojCiMJZnNxcnQoKzApID0gKzAKIwlmc3FydCgtMCkgPSAtMAojCWZzcXJ0KCtJTkYpID0gK0lORgojCWZzcXJ0KC1JTkYpID0gT1BFUlIKIwpmc3FydF96ZXJvOgoJdHN0LmIJCVNSQ19FWCglYTApCQkjIGlzIFpFUk8gcG9zaXRpdmUgb3IgbmVnYXRpdmU/CglibWkuYgkJZnNxcnRfemVyb19tCQkjIG5lZ2F0aXZlCmZzcXJ0X3plcm9fcDoKCWZtb3YucwkJJjB4MDAwMDAwMDAsJWZwMAkjIHJldHVybiArWkVSTwoJbW92LmIJCSZ6X2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCAnWicgY2NvZGUgYml0CglydHMKZnNxcnRfemVyb19tOgoJZm1vdi5zCQkmMHg4MDAwMDAwMCwlZnAwCSMgcmV0dXJuIC1aRVJPCgltb3YuYgkJJnpfYm1hc2srbmVnX2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCAnWicsJ04nIGNjb2RlIGJpdHMKCXJ0cwoKZnNxcnRfaW5mOgoJdHN0LmIJCVNSQ19FWCglYTApCQkjIGlzIElORiBwb3NpdGl2ZSBvciBuZWdhdGl2ZT8KCWJtaS5sCQlyZXNfb3BlcnIJCSMgbmVnYXRpdmUKZnNxcnRfaW5mX3A6CglmbW92bS54CQlTUkMoJWEwKSwmMHg4MAkJIyByZXR1cm4gK0lORiBpbiBmcDAKCW1vdi5iCQkmaW5mX2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCAnSScgY2NvZGUgYml0CglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlhZGRzdWJfc2NhbGVyMigpOiBzY2FsZSBpbnB1dHMgdG8gZmFkZC9mc3ViIHN1Y2ggdGhhdCBubwkjCiMJCQkgIE9WRkwvVU5GTCBleGNlcHRpb25zIHdpbGwgcmVzdWx0CQkjCiMJCQkJCQkJCQkjCiMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlub3JtKCkgLSBub3JtYWxpemUgbWFudGlzc2EgYWZ0ZXIgYWRqdXN0aW5nIGV4cG9uZW50CQkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlGUF9TUkMoYTYpID0gZnAgb3AxKHNyYykJCQkJCSMKIwlGUF9EU1QoYTYpID0gZnAgb3AyKGRzdCkJCQkJCSMKIwkJCQkJCQkJCSMKIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCUZQX1NSQyhhNikgPSBmcCBvcDEgc2NhbGVkKHNyYykJCQkJCSMKIwlGUF9EU1QoYTYpID0gZnAgb3AyIHNjYWxlZChkc3QpCQkJCQkjCiMJZDAgICAgICAgICA9IHNjYWxlIGFtb3VudAkJCQkJIwojCQkJCQkJCQkJIwojIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJSWYgdGhlIERTVCBleHBvbmVudCBpcyA+IHRoZSBTUkMgZXhwb25lbnQsIHNldCB0aGUgRFNUIGV4cG9uZW50CSMKIyBlcXVhbCB0byAweDNmZmYgYW5kIHNjYWxlIHRoZSBTUkMgZXhwb25lbnQgYnkgdGhlIHZhbHVlIHRoYXQgdGhlCSMKIyBEU1QgZXhwb25lbnQgd2FzIHNjYWxlZCBieS4gSWYgdGhlIFNSQyBleHBvbmVudCBpcyBncmVhdGVyIG9yIGVxdWFsLAkjCiMgZG8gdGhlIG9wcG9zaXRlLiBSZXR1cm4gdGhpcyBzY2FsZSBmYWN0b3IgaW4gZDAuCQkJIwojCUlmIHRoZSB0d28gZXhwb25lbnRzIGRpZmZlciBieSA+IHRoZSBudW1iZXIgb2YgbWFudGlzc2EgYml0cwkjCiMgcGx1cyB0d28sIHRoZW4gc2V0IHRoZSBzbWFsbGVzdCBleHBvbmVudCB0byBhIHZlcnkgc21hbGwgdmFsdWUgYXMgYQkjCiMgcXVpY2sgc2hvcnRjdXQuCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCWdsb2JhbAkJYWRkc3ViX3NjYWxlcjIKYWRkc3ViX3NjYWxlcjI6Cgltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCgltb3YubAkJRFNUX0hJKCVhMSksRlBfU0NSMV9ISSglYTYpCgltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCgltb3YubAkJRFNUX0xPKCVhMSksRlBfU0NSMV9MTyglYTYpCgltb3YudwkJU1JDX0VYKCVhMCksJWQwCgltb3YudwkJRFNUX0VYKCVhMSksJWQxCgltb3YudwkJJWQwLEZQX1NDUjBfRVgoJWE2KQoJbW92LncJCSVkMSxGUF9TQ1IxX0VYKCVhNikKCglhbmRpLncJCSYweDdmZmYsJWQwCglhbmRpLncJCSYweDdmZmYsJWQxCgltb3YudwkJJWQwLExfU0NSMSglYTYpCQkjIHN0b3JlIHNyYyBleHBvbmVudAoJbW92LncJCSVkMSwyK0xfU0NSMSglYTYpCSMgc3RvcmUgZHN0IGV4cG9uZW50CgoJY21wLncJCSVkMCwgJWQxCQkjIGlzIHNyYyBleHAgPj0gZHN0IGV4cD8KCWJnZS5sCQlzcmNfZXhwX2dlMgoKIyBkc3QgZXhwIGlzID4gIHNyYyBleHA7IHNjYWxlIGRzdCB0byBleHAgPSAweDNmZmYKZHN0X2V4cF9ndDI6Cglic3IubAkJc2NhbGVfdG9femVyb19kc3QKCW1vdi5sCQklZDAsLSglc3ApCQkjIHNhdmUgc2NhbGUgZmFjdG9yCgoJY21waS5iCQlTVEFHKCVhNiksJkRFTk9STQkjIGlzIGRzdCBkZW5vcm1hbGl6ZWQ/CglibmUuYgkJY21wZXhwMTIKCglsZWEJCUZQX1NDUjAoJWE2KSwlYTAKCWJzci5sCQlub3JtCQkJIyBub3JtYWxpemUgdGhlIGRlbm9ybTsgcmVzdWx0IGlzIG5ldyBleHAKCW5lZy53CQklZDAJCQkjIG5ldyBleHAgPSAtKHNoZnQgdmFsKQoJbW92LncJCSVkMCxMX1NDUjEoJWE2KQkJIyBpbnNldCBuZXcgZXhwCgpjbXBleHAxMjoKCW1vdi53CQkyK0xfU0NSMSglYTYpLCVkMAoJc3ViaS53CQkmbWFudGlzc2FsZW4rMiwlZDAJIyBzdWJ0cmFjdCBtYW50aXNzYWxlbisyIGZyb20gbGFyZ2VyIGV4cAoKCWNtcC53CQklZDAsTF9TQ1IxKCVhNikJCSMgaXMgZGlmZmVyZW5jZSA+PSBsZW4obWFudGlzc2EpKzI/CgliZ2UuYgkJcXVpY2tfc2NhbGUxMgoKCW1vdi53CQlMX1NDUjEoJWE2KSwlZDAKCWFkZC53CQkweDIoJXNwKSwlZDAJCSMgc2NhbGUgc3JjIGV4cG9uZW50IGJ5IHNjYWxlIGZhY3RvcgoJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEKCWFuZC53CQkmMHg4MDAwLCVkMQoJb3IudwkJJWQxLCVkMAkJCSMgY29uY2F0IHtzZ24sbmV3IGV4cH0KCW1vdi53CQklZDAsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBkc3QgZXhwb25lbnQKCgltb3YubAkJKCVzcCkrLCVkMAkJIyByZXR1cm4gU0NBTEUgZmFjdG9yCglydHMKCnF1aWNrX3NjYWxlMTI6CglhbmRpLncJCSYweDgwMDAsRlBfU0NSMF9FWCglYTYpCSMgemVybyBzcmMgZXhwb25lbnQKCWJzZXQJCSYweDAsMStGUF9TQ1IwX0VYKCVhNikJIyBzZXQgZXhwID0gMQoKCW1vdi5sCQkoJXNwKSssJWQwCQkjIHJldHVybiBTQ0FMRSBmYWN0b3IKCXJ0cwoKIyBzcmMgZXhwIGlzID49IGRzdCBleHA7IHNjYWxlIHNyYyB0byBleHAgPSAweDNmZmYKc3JjX2V4cF9nZTI6Cglic3IubAkJc2NhbGVfdG9femVyb19zcmMKCW1vdi5sCQklZDAsLSglc3ApCQkjIHNhdmUgc2NhbGUgZmFjdG9yCgoJY21waS5iCQlEVEFHKCVhNiksJkRFTk9STQkjIGlzIGRzdCBkZW5vcm1hbGl6ZWQ/CglibmUuYgkJY21wZXhwMjIKCWxlYQkJRlBfU0NSMSglYTYpLCVhMAoJYnNyLmwJCW5vcm0JCQkjIG5vcm1hbGl6ZSB0aGUgZGVub3JtOyByZXN1bHQgaXMgbmV3IGV4cAoJbmVnLncJCSVkMAkJCSMgbmV3IGV4cCA9IC0oc2hmdCB2YWwpCgltb3YudwkJJWQwLDIrTF9TQ1IxKCVhNikJIyBpbnNldCBuZXcgZXhwCgpjbXBleHAyMjoKCW1vdi53CQlMX1NDUjEoJWE2KSwlZDAKCXN1YmkudwkJJm1hbnRpc3NhbGVuKzIsJWQwCSMgc3VidHJhY3QgbWFudGlzc2FsZW4rMiBmcm9tIGxhcmdlciBleHAKCgljbXAudwkJJWQwLDIrTF9TQ1IxKCVhNikJIyBpcyBkaWZmZXJlbmNlID49IGxlbihtYW50aXNzYSkrMj8KCWJnZS5iCQlxdWlja19zY2FsZTIyCgoJbW92LncJCTIrTF9TQ1IxKCVhNiksJWQwCglhZGQudwkJMHgyKCVzcCksJWQwCQkjIHNjYWxlIGRzdCBleHBvbmVudCBieSBzY2FsZSBmYWN0b3IKCW1vdi53CQlGUF9TQ1IxX0VYKCVhNiksJWQxCglhbmRpLncJCSYweDgwMDAsJWQxCglvci53CQklZDEsJWQwCQkJIyBjb25jYXQge3NnbixuZXcgZXhwfQoJbW92LncJCSVkMCxGUF9TQ1IxX0VYKCVhNikJIyBpbnNlcnQgbmV3IGRzdCBleHBvbmVudAoKCW1vdi5sCQkoJXNwKSssJWQwCQkjIHJldHVybiBTQ0FMRSBmYWN0b3IKCXJ0cwoKcXVpY2tfc2NhbGUyMjoKCWFuZGkudwkJJjB4ODAwMCxGUF9TQ1IxX0VYKCVhNikJIyB6ZXJvIGRzdCBleHBvbmVudAoJYnNldAkJJjB4MCwxK0ZQX1NDUjFfRVgoJWE2KQkjIHNldCBleHAgPSAxCgoJbW92LmwJCSglc3ApKywlZDAJCSMgcmV0dXJuIFNDQUxFIGZhY3RvcgoJcnRzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJc2NhbGVfdG9femVyb19zcmMoKTogc2NhbGUgdGhlIGV4cG9uZW50IG9mIGV4dGVuZGVkIHByZWNpc2lvbgkjCiMJCQkgICAgIHZhbHVlIGF0IEZQX1NDUjAoYTYpLgkJCSMKIwkJCQkJCQkJCSMKIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCW5vcm0oKSAtIG5vcm1hbGl6ZSB0aGUgbWFudGlzc2EgaWYgdGhlIG9wZXJhbmQgd2FzIGEgREVOT1JNCSMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCUZQX1NDUjAoYTYpID0gZXh0ZW5kZWQgcHJlY2lzaW9uIG9wZXJhbmQgdG8gYmUgc2NhbGVkCQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlGUF9TQ1IwKGE2KSA9IHNjYWxlZCBleHRlbmRlZCBwcmVjaXNpb24gb3BlcmFuZAkJCSMKIwlkMAkgICAgPSBzY2FsZSB2YWx1ZQkJCQkJIwojCQkJCQkJCQkJIwojIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJU2V0IHRoZSBleHBvbmVudCBvZiB0aGUgaW5wdXQgb3BlcmFuZCB0byAweDNmZmYuIFNhdmUgdGhlIHZhbHVlCSMKIyBvZiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBvcmlnaW5hbCBhbmQgbmV3IGV4cG9uZW50LiBUaGVuLAkjCiMgbm9ybWFsaXplIHRoZSBvcGVyYW5kIGlmIGl0IHdhcyBhIERFTk9STS4gQWRkIHRoaXMgbm9ybWFsaXphdGlvbgkjCiMgdmFsdWUgdG8gdGhlIHByZXZpb3VzIHZhbHVlLiBSZXR1cm4gdGhlIHJlc3VsdC4JCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCglnbG9iYWwJCXNjYWxlX3RvX3plcm9fc3JjCnNjYWxlX3RvX3plcm9fc3JjOgoJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBleHRyYWN0IG9wZXJhbmQncyB7c2duLGV4cH0KCW1vdi53CQklZDEsJWQwCQkJIyBtYWtlIGEgY29weQoKCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgZXh0cmFjdCBvcGVyYW5kJ3MgZXhwb25lbnQKCglhbmRpLncJCSYweDgwMDAsJWQwCQkjIGV4dHJhY3Qgb3BlcmFuZCdzIHNnbgoJb3IudwkJJjB4M2ZmZiwlZDAJCSMgaW5zZXJ0IG5ldyBvcGVyYW5kJ3MgZXhwb25lbnQoPTApCgoJbW92LncJCSVkMCxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgYmlhc2VkIGV4cG9uZW50CgoJY21waS5iCQlTVEFHKCVhNiksJkRFTk9STQkjIGlzIG9wZXJhbmQgbm9ybWFsaXplZD8KCWJlcS5iCQlzdHpzX2Rlbm9ybQkJIyBub3JtYWxpemUgdGhlIERFTk9STQoKc3R6c19ub3JtOgoJbW92LmwJCSYweDNmZmYsJWQwCglzdWIubAkJJWQxLCVkMAkJCSMgc2NhbGUgPSBCSUFTICsgKC1leHApCgoJcnRzCgpzdHpzX2Rlbm9ybToKCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3MgcHRyIHRvIHNyYyBvcAoJYnNyLmwJCW5vcm0JCQkjIG5vcm1hbGl6ZSBkZW5vcm0KCW5lZy5sCQklZDAJCQkjIG5ldyBleHBvbmVudCA9IC0oc2hmdCB2YWwpCgltb3YubAkJJWQwLCVkMQkJCSMgcHJlcGFyZSBmb3Igb3Bfbm9ybSBjYWxsCglicmEuYgkJc3R6c19ub3JtCQkjIGZpbmlzaCBzY2FsaW5nCgojIyMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCXNjYWxlX3NxcnQoKTogc2NhbGUgdGhlIGlucHV0IG9wZXJhbmQgZXhwb25lbnQgc28gYSBzdWJzZXF1ZW50CSMKIwkJICAgICAgZnNxcnQgb3BlcmF0aW9uIHdvbid0IHRha2UgYW4gZXhjZXB0aW9uLgkJIwojCQkJCQkJCQkJIwojIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJbm9ybSgpIC0gbm9ybWFsaXplIHRoZSBtYW50aXNzYSBpZiB0aGUgb3BlcmFuZCB3YXMgYSBERU5PUk0JIwojCQkJCQkJCQkJIwojIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJRlBfU0NSMChhNikgPSBleHRlbmRlZCBwcmVjaXNpb24gb3BlcmFuZCB0byBiZSBzY2FsZWQJCSMKIwkJCQkJCQkJCSMKIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCUZQX1NDUjAoYTYpID0gc2NhbGVkIGV4dGVuZGVkIHByZWNpc2lvbiBvcGVyYW5kCQkJIwojCWQwCSAgICA9IHNjYWxlIHZhbHVlCQkJCQkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlJZiB0aGUgaW5wdXQgb3BlcmFuZCBpcyBhIERFTk9STSwgbm9ybWFsaXplIGl0LgkJCSMKIwlJZiB0aGUgZXhwb25lbnQgb2YgdGhlIGlucHV0IG9wZXJhbmQgaXMgZXZlbiwgc2V0IHRoZSBleHBvbmVudAkjCiMgdG8gMHgzZmZlIGFuZCByZXR1cm4gYSBzY2FsZSBmYWN0b3Igb2YgIihleHAtMHgzZmZlKS8yIi4gSWYgdGhlCSMKIyBleHBvbmVudCBvZiB0aGUgaW5wdXQgb3BlcmFuZCBpcyBvZmYsIHNldCB0aGUgZXhwb25lbnQgdG8gb3gzZmZmIGFuZAkjCiMgcmV0dXJuIGEgc2NhbGUgZmFjdG9yIG9mICIoZXhwLTB4M2ZmZikvMiIuCQkJCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCWdsb2JhbAkJc2NhbGVfc3FydApzY2FsZV9zcXJ0OgoJY21waS5iCQlTVEFHKCVhNiksJkRFTk9STQkjIGlzIG9wZXJhbmQgbm9ybWFsaXplZD8KCWJlcS5iCQlzc19kZW5vcm0JCSMgbm9ybWFsaXplIHRoZSBERU5PUk0KCgltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGV4dHJhY3Qgb3BlcmFuZCdzIHtzZ24sZXhwfQoJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBleHRyYWN0IG9wZXJhbmQncyBleHBvbmVudAoKCWFuZGkudwkJJjB4ODAwMCxGUF9TQ1IwX0VYKCVhNikJIyBleHRyYWN0IG9wZXJhbmQncyBzZ24KCglidHN0CQkmMHgwLCVkMQkJIyBpcyBleHAgZXZlbiBvciBvZGQ/CgliZXEuYgkJc3Nfbm9ybV9ldmVuCgoJb3JpLncJCSYweDNmZmYsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBvcGVyYW5kJ3MgZXhwb25lbnQoPTApCgoJbW92LmwJCSYweDNmZmYsJWQwCglzdWIubAkJJWQxLCVkMAkJCSMgc2NhbGUgPSBCSUFTICsgKC1leHApCglhc3IubAkJJjB4MSwlZDAJCSMgZGl2aWRlIHNjYWxlIGZhY3RvciBieSAyCglydHMKCnNzX25vcm1fZXZlbjoKCW9yaS53CQkmMHgzZmZlLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgb3BlcmFuZCdzIGV4cG9uZW50KD0wKQoKCW1vdi5sCQkmMHgzZmZlLCVkMAoJc3ViLmwJCSVkMSwlZDAJCQkjIHNjYWxlID0gQklBUyArICgtZXhwKQoJYXNyLmwJCSYweDEsJWQwCQkjIGRpdmlkZSBzY2FsZSBmYWN0b3IgYnkgMgoJcnRzCgpzc19kZW5vcm06CglsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzIHB0ciB0byBzcmMgb3AKCWJzci5sCQlub3JtCQkJIyBub3JtYWxpemUgZGVub3JtCgoJYnRzdAkJJjB4MCwlZDAJCSMgaXMgZXhwIGV2ZW4gb3Igb2RkPwoJYmVxLmIJCXNzX2Rlbm9ybV9ldmVuCgoJb3JpLncJCSYweDNmZmYsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBvcGVyYW5kJ3MgZXhwb25lbnQoPTApCgoJYWRkLmwJCSYweDNmZmYsJWQwCglhc3IubAkJJjB4MSwlZDAJCSMgZGl2aWRlIHNjYWxlIGZhY3RvciBieSAyCglydHMKCnNzX2Rlbm9ybV9ldmVuOgoJb3JpLncJCSYweDNmZmUsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBvcGVyYW5kJ3MgZXhwb25lbnQoPTApCgoJYWRkLmwJCSYweDNmZmUsJWQwCglhc3IubAkJJjB4MSwlZDAJCSMgZGl2aWRlIHNjYWxlIGZhY3RvciBieSAyCglydHMKCiMjIwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJc2NhbGVfdG9femVyb19kc3QoKTogc2NhbGUgdGhlIGV4cG9uZW50IG9mIGV4dGVuZGVkIHByZWNpc2lvbgkjCiMJCQkgICAgIHZhbHVlIGF0IEZQX1NDUjEoYTYpLgkJCSMKIwkJCQkJCQkJCSMKIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCW5vcm0oKSAtIG5vcm1hbGl6ZSB0aGUgbWFudGlzc2EgaWYgdGhlIG9wZXJhbmQgd2FzIGEgREVOT1JNCSMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCUZQX1NDUjEoYTYpID0gZXh0ZW5kZWQgcHJlY2lzaW9uIG9wZXJhbmQgdG8gYmUgc2NhbGVkCQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlGUF9TQ1IxKGE2KSA9IHNjYWxlZCBleHRlbmRlZCBwcmVjaXNpb24gb3BlcmFuZAkJCSMKIwlkMAkgICAgPSBzY2FsZSB2YWx1ZQkJCQkJIwojCQkJCQkJCQkJIwojIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJU2V0IHRoZSBleHBvbmVudCBvZiB0aGUgaW5wdXQgb3BlcmFuZCB0byAweDNmZmYuIFNhdmUgdGhlIHZhbHVlCSMKIyBvZiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBvcmlnaW5hbCBhbmQgbmV3IGV4cG9uZW50LiBUaGVuLAkjCiMgbm9ybWFsaXplIHRoZSBvcGVyYW5kIGlmIGl0IHdhcyBhIERFTk9STS4gQWRkIHRoaXMgbm9ybWFsaXphdGlvbgkjCiMgdmFsdWUgdG8gdGhlIHByZXZpb3VzIHZhbHVlLiBSZXR1cm4gdGhlIHJlc3VsdC4JCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCglnbG9iYWwJCXNjYWxlX3RvX3plcm9fZHN0CnNjYWxlX3RvX3plcm9fZHN0OgoJbW92LncJCUZQX1NDUjFfRVgoJWE2KSwlZDEJIyBleHRyYWN0IG9wZXJhbmQncyB7c2duLGV4cH0KCW1vdi53CQklZDEsJWQwCQkJIyBtYWtlIGEgY29weQoKCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgZXh0cmFjdCBvcGVyYW5kJ3MgZXhwb25lbnQKCglhbmRpLncJCSYweDgwMDAsJWQwCQkjIGV4dHJhY3Qgb3BlcmFuZCdzIHNnbgoJb3IudwkJJjB4M2ZmZiwlZDAJCSMgaW5zZXJ0IG5ldyBvcGVyYW5kJ3MgZXhwb25lbnQoPTApCgoJbW92LncJCSVkMCxGUF9TQ1IxX0VYKCVhNikJIyBpbnNlcnQgYmlhc2VkIGV4cG9uZW50CgoJY21waS5iCQlEVEFHKCVhNiksJkRFTk9STQkjIGlzIG9wZXJhbmQgbm9ybWFsaXplZD8KCWJlcS5iCQlzdHpkX2Rlbm9ybQkJIyBub3JtYWxpemUgdGhlIERFTk9STQoKc3R6ZF9ub3JtOgoJbW92LmwJCSYweDNmZmYsJWQwCglzdWIubAkJJWQxLCVkMAkJCSMgc2NhbGUgPSBCSUFTICsgKC1leHApCglydHMKCnN0emRfZGVub3JtOgoJbGVhCQlGUF9TQ1IxKCVhNiksJWEwCSMgcGFzcyBwdHIgdG8gZHN0IG9wCglic3IubAkJbm9ybQkJCSMgbm9ybWFsaXplIGRlbm9ybQoJbmVnLmwJCSVkMAkJCSMgbmV3IGV4cG9uZW50ID0gLShzaGZ0IHZhbCkKCW1vdi5sCQklZDAsJWQxCQkJIyBwcmVwYXJlIGZvciBvcF9ub3JtIGNhbGwKCWJyYS5iCQlzdHpkX25vcm0JCSMgZmluaXNoIHNjYWxpbmcKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlyZXNfcW5hbigpOiByZXR1cm4gZGVmYXVsdCByZXN1bHQgdy8gUU5BTiBvcGVyYW5kIGZvciBkeWFkaWMJIwojCXJlc19zbmFuKCk6IHJldHVybiBkZWZhdWx0IHJlc3VsdCB3LyBTTkFOIG9wZXJhbmQgZm9yIGR5YWRpYwkjCiMJcmVzX3FuYW5fMW9wKCk6IHJldHVybiBkZmx0IHJlc3VsdCB3LyBRTkFOIG9wZXJhbmQgZm9yIG1vbmFkaWMJIwojCXJlc19zbmFuXzFvcCgpOiByZXR1cm4gZGZsdCByZXN1bHQgdy8gU05BTiBvcGVyYW5kIGZvciBtb25hZGljCSMKIwkJCQkJCQkJCSMKIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCU5vbmUJCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCUZQX1NSQyhhNikgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBzcmMgb3BlcmFuZAkJIwojCUZQX0RTVChhNikgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBkc3Qgb3BlcmFuZAkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJZnAwID0gZGVmYXVsdCByZXN1bHQJCQkJCQkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlJZiBlaXRoZXIgb3BlcmFuZCAoYnV0IG5vdCBib3RoIG9wZXJhbmRzKSBvZiBhbiBvcGVyYXRpb24gaXMgYQkjCiMgbm9uc2lnbmFsbGluZyBOQU4sIHRoZW4gdGhhdCBOQU4gaXMgcmV0dXJuZWQgYXMgdGhlIHJlc3VsdC4gSWYgYm90aAkjCiMgb3BlcmFuZHMgYXJlIG5vbnNpZ25hbGxpbmcgTkFOcywgdGhlbiB0aGUgZGVzdGluYXRpb24gb3BlcmFuZAkJIwojIG5vbnNpZ25hbGxpbmcgTkFOIGlzIHJldHVybmVkIGFzIHRoZSByZXN1bHQuCQkJCSMKIwlJZiBlaXRoZXIgb3BlcmFuZCB0byBhbiBvcGVyYXRpb24gaXMgYSBzaWduYWxsaW5nIE5BTiAoU05BTiksCSMKIyB0aGVuLCB0aGUgU05BTiBiaXQgaXMgc2V0IGluIHRoZSBGUFNSIEVYQyBieXRlLiBJZiB0aGUgU05BTiB0cmFwCSMKIyBlbmFibGUgYml0IGlzIHNldCBpbiB0aGUgRlBDUiwgdGhlbiB0aGUgdHJhcCBpcyB0YWtlbiBhbmQgdGhlCQkjCiMgZGVzdGluYXRpb24gaXMgbm90IG1vZGlmaWVkLiBJZiB0aGUgU05BTiB0cmFwIGVuYWJsZSBiaXQgaXMgbm90IHNldCwJIwojIHRoZW4gdGhlIFNOQU4gaXMgY29udmVydGVkIHRvIGEgbm9uc2lnbmFsbGluZyBOQU4gKGJ5IHNldHRpbmcgdGhlCSMKIyBTTkFOIGJpdCBpbiB0aGUgb3BlcmFuZCB0byBvbmUpLCBhbmQgdGhlIG9wZXJhdGlvbiBjb250aW51ZXMgYXMJIwojIGRlc2NyaWJlZCBpbiB0aGUgcHJlY2VkaW5nIHBhcmFncmFwaCwgZm9yIG5vbnNpZ25hbGxpbmcgTkFOcy4JCSMKIwlNYWtlIHN1cmUgdGhlIGFwcHJvcHJpYXRlIEZQU1IgYml0cyBhcmUgc2V0IGJlZm9yZSBleGl0aW5nLgkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCglnbG9iYWwJCXJlc19xbmFuCglnbG9iYWwJCXJlc19zbmFuCnJlc19xbmFuOgpyZXNfc25hbjoKCWNtcC5iCQlEVEFHKCVhNiksICZTTkFOCSMgaXMgdGhlIGRzdCBhbiBTTkFOPwoJYmVxLmIJCWRzdF9zbmFuMgoJY21wLmIJCURUQUcoJWE2KSwgJlFOQU4JIyBpcyB0aGUgZHN0IGEgIFFOQU4/CgliZXEuYgkJZHN0X3FuYW4yCnNyY19uYW46CgljbXAuYgkJU1RBRyglYTYpLCAmUU5BTgoJYmVxLmIJCXNyY19xbmFuMgoJZ2xvYmFsCQlyZXNfc25hbl8xb3AKcmVzX3NuYW5fMW9wOgpzcmNfc25hbjI6Cglic2V0CQkmMHg2LCBGUF9TUkNfSEkoJWE2KQkjIHNldCBTTkFOIGJpdAoJb3IubAkJJm5hbl9tYXNrK2Fpb3BfbWFzaytzbmFuX21hc2ssIFVTRVJfRlBTUiglYTYpCglsZWEJCUZQX1NSQyglYTYpLCAlYTAKCWJyYS5iCQluYW5fY29tcAoJZ2xvYmFsCQlyZXNfcW5hbl8xb3AKcmVzX3FuYW5fMW9wOgpzcmNfcW5hbjI6Cglvci5sCQkmbmFuX21hc2ssIFVTRVJfRlBTUiglYTYpCglsZWEJCUZQX1NSQyglYTYpLCAlYTAKCWJyYS5iCQluYW5fY29tcApkc3Rfc25hbjI6Cglvci5sCQkmbmFuX21hc2srYWlvcF9tYXNrK3NuYW5fbWFzaywgVVNFUl9GUFNSKCVhNikKCWJzZXQJCSYweDYsIEZQX0RTVF9ISSglYTYpCSMgc2V0IFNOQU4gYml0CglsZWEJCUZQX0RTVCglYTYpLCAlYTAKCWJyYS5iCQluYW5fY29tcApkc3RfcW5hbjI6CglsZWEJCUZQX0RTVCglYTYpLCAlYTAKCWNtcC5iCQlTVEFHKCVhNiksICZTTkFOCglibmUJCW5hbl9kb25lCglvci5sCQkmYWlvcF9tYXNrK3NuYW5fbWFzaywgVVNFUl9GUFNSKCVhNikKbmFuX2RvbmU6Cglvci5sCQkmbmFuX21hc2ssIFVTRVJfRlBTUiglYTYpCm5hbl9jb21wOgoJYnRzdAkJJjB4NywgRlRFTVBfRVgoJWEwKQkjIGlzIE5BTiBuZWc/CgliZXEuYgkJbmFuX25vdF9uZWcKCW9yLmwJCSZuZWdfbWFzaywgVVNFUl9GUFNSKCVhNikKbmFuX25vdF9uZWc6CglmbW92bS54CQkoJWEwKSwgJjB4ODAKCXJ0cwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJcmVzX29wZXJyKCk6IHJldHVybiBkZWZhdWx0IHJlc3VsdCBkdXJpbmcgb3BlcmFuZCBlcnJvcgkJIwojCQkJCQkJCQkJIwojIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJTm9uZQkJCQkJCQkJIwojCQkJCQkJCQkJIwojIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJTm9uZQkJCQkJCQkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJZnAwID0gZGVmYXVsdCBvcGVyYW5kIGVycm9yIHJlc3VsdAkJCQkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlBbiBub25zaWduYWxsaW5nIE5BTiBpcyByZXR1cm5lZCBhcyB0aGUgZGVmYXVsdCByZXN1bHQgd2hlbgkjCiMgYW4gb3BlcmFuZCBlcnJvciBvY2N1cnMgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXM6CQkJIwojCQkJCQkJCQkJIwojCU11bHRpcGx5OiAoSW5maW5pdHkgeCBaZXJvKQkJCQkJIwojCURpdmlkZSAgOiAoWmVybyAvIFplcm8pIHx8IChJbmZpbml0eSAvIEluZmluaXR5KQkJIwojCQkJCQkJCQkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoJZ2xvYmFsCQlyZXNfb3BlcnIKcmVzX29wZXJyOgoJb3IubAkJJm5hbl9tYXNrK29wZXJyX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KQoJZm1vdm0ueAkJbmFuX3JldHVybiglcGMpLCAmMHg4MAoJcnRzCgpuYW5fcmV0dXJuOgoJbG9uZwkJMHg3ZmZmMDAwMCwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZgoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIGZkYmNjKCk6IHJvdXRpbmUgdG8gZW11bGF0ZSB0aGUgZmRiY2MgaW5zdHJ1Y3Rpb24JCQkjCiMJCQkJCQkJCQkjCiMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKIwlfZmRiY2MoKQkJCQkJCQkjCiMJCQkJCQkJCQkjCiMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKIwlmZXRjaF9kcmVnKCkgLSBmZXRjaCBEbiB2YWx1ZQkJCQkJIwojCXN0b3JlX2RyZWdfbCgpIC0gc3RvcmUgdXBkYXRlZCBEbiB2YWx1ZQkJCQkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlkMCA9IGRpc3BsYWNlbWVudAkJCQkJCSMKIwkJCQkJCQkJCSMKIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIwojCW5vbmUJCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCVRoaXMgcm91dGluZSBjaGVja3Mgd2hpY2ggY29uZGl0aW9uYWwgcHJlZGljYXRlIGlzIHNwZWNpZmllZCBieQkjCiMgdGhlIHN0YWNrZWQgZmRiY2MgaW5zdHJ1Y3Rpb24gb3Bjb2RlIGFuZCB0aGVuIGJyYW5jaGVzIHRvIGEgcm91dGluZQkjCiMgZm9yIHRoYXQgcHJlZGljYXRlLiBUaGUgY29ycmVzcG9uZGluZyBmYmNjIGluc3RydWN0aW9uIGlzIHRoZW4gdXNlZAkjCiMgdG8gc2VlIHdoZXRoZXIgdGhlIGNvbmRpdGlvbiAoc3BlY2lmaWVkIGJ5IHRoZSBzdGFja2VkIEZQU1IpIGlzIHRydWUJIwojIG9yIGZhbHNlLgkJCQkJCQkJIwojCUlmIGEgQlNVTiBleGNlcHRpb24gc2hvdWxkIGJlIGluZGljYXRlZCwgdGhlIEJTVU4gYW5kIEFCU1VOCSMKIyBiaXRzIGFyZSBzZXQgaW4gdGhlIHN0YWNrZWQgRlBTUi4gSWYgdGhlIEJTVU4gZXhjZXB0aW9uIGlzIGVuYWJsZWQsCSMKIyB0aGUgZmJzdW5fZmxnIGlzIHNldCBpbiB0aGUgU1BDT05EX0ZMRyBsb2NhdGlvbiBvbiB0aGUgc3RhY2suIElmIGFuCSMKIyBlbmFibGVkIEJTVU4gc2hvdWxkIG5vdCBiZSBmbGFnZ2VkIGFuZCB0aGUgcHJlZGljYXRlIGlzIHRydWUsIHRoZW4JIwojIERuIGlzIGZldGNoZWQgYW5kIGRlY3JlbWVudGVkIGJ5IG9uZS4gSWYgRG4gaXMgbm90IGVxdWFsIHRvIC0xLCBhZGQJIwojIHRoZSBkaXNwbGFjZW1lbnQgdmFsdWUgdG8gdGhlIHN0YWNrZWQgUEMgc28gdGhhdCB3aGVuIGFuICJydGUiIGlzCSMKIyBmaW5hbGx5IGV4ZWN1dGVkLCB0aGUgYnJhbmNoIG9jY3Vycy4JCQkJCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoJZ2xvYmFsCQlfZmRiY2MKX2ZkYmNjOgoJbW92LmwJCSVkMCxMX1NDUjEoJWE2KQkJIyBzYXZlIGRpc3BsYWNlbWVudAoKCW1vdi53CQlFWENfQ01EUkVHKCVhNiksJWQwCSMgZmV0Y2ggcHJlZGljYXRlCgoJY2xyLmwJCSVkMQkJCSMgY2xlYXIgc2NyYXRjaCByZWcKCW1vdi5iCQlGUFNSX0NDKCVhNiksJWQxCSMgZmV0Y2ggZnAgY2NvZGVzCglyb3IubAkJJjB4OCwlZDEJCSMgcm90YXRlIHRvIHRvcCBieXRlCglmbW92LmwJCSVkMSwlZnBzcgkJIyBpbnNlcnQgaW50byBGUFNSCgoJbW92LncJCSh0YmxfZmRiY2MuYiwlcGMsJWQwLncqMiksJWQxICMgbG9hZCB0YWJsZQoJam1wCQkodGJsX2ZkYmNjLmIsJXBjLCVkMS53KSAjIGp1bXAgdG8gZmRiY2Mgcm91dGluZQoKdGJsX2ZkYmNjOgoJc2hvcnQJCWZkYmNjX2YJCS0JdGJsX2ZkYmNjCSMgMDAKCXNob3J0CQlmZGJjY19lcQktCXRibF9mZGJjYwkjIDAxCglzaG9ydAkJZmRiY2Nfb2d0CS0JdGJsX2ZkYmNjCSMgMDIKCXNob3J0CQlmZGJjY19vZ2UJLQl0YmxfZmRiY2MJIyAwMwoJc2hvcnQJCWZkYmNjX29sdAktCXRibF9mZGJjYwkjIDA0CglzaG9ydAkJZmRiY2Nfb2xlCS0JdGJsX2ZkYmNjCSMgMDUKCXNob3J0CQlmZGJjY19vZ2wJLQl0YmxfZmRiY2MJIyAwNgoJc2hvcnQJCWZkYmNjX29yCS0JdGJsX2ZkYmNjCSMgMDcKCXNob3J0CQlmZGJjY191bgktCXRibF9mZGJjYwkjIDA4CglzaG9ydAkJZmRiY2NfdWVxCS0JdGJsX2ZkYmNjCSMgMDkKCXNob3J0CQlmZGJjY191Z3QJLQl0YmxfZmRiY2MJIyAxMAoJc2hvcnQJCWZkYmNjX3VnZQktCXRibF9mZGJjYwkjIDExCglzaG9ydAkJZmRiY2NfdWx0CS0JdGJsX2ZkYmNjCSMgMTIKCXNob3J0CQlmZGJjY191bGUJLQl0YmxfZmRiY2MJIyAxMwoJc2hvcnQJCWZkYmNjX25lcQktCXRibF9mZGJjYwkjIDE0CglzaG9ydAkJZmRiY2NfdAkJLQl0YmxfZmRiY2MJIyAxNQoJc2hvcnQJCWZkYmNjX3NmCS0JdGJsX2ZkYmNjCSMgMTYKCXNob3J0CQlmZGJjY19zZXEJLQl0YmxfZmRiY2MJIyAxNwoJc2hvcnQJCWZkYmNjX2d0CS0JdGJsX2ZkYmNjCSMgMTgKCXNob3J0CQlmZGJjY19nZQktCXRibF9mZGJjYwkjIDE5CglzaG9ydAkJZmRiY2NfbHQJLQl0YmxfZmRiY2MJIyAyMAoJc2hvcnQJCWZkYmNjX2xlCS0JdGJsX2ZkYmNjCSMgMjEKCXNob3J0CQlmZGJjY19nbAktCXRibF9mZGJjYwkjIDIyCglzaG9ydAkJZmRiY2NfZ2xlCS0JdGJsX2ZkYmNjCSMgMjMKCXNob3J0CQlmZGJjY19uZ2xlCS0JdGJsX2ZkYmNjCSMgMjQKCXNob3J0CQlmZGJjY19uZ2wJLQl0YmxfZmRiY2MJIyAyNQoJc2hvcnQJCWZkYmNjX25sZQktCXRibF9mZGJjYwkjIDI2CglzaG9ydAkJZmRiY2Nfbmx0CS0JdGJsX2ZkYmNjCSMgMjcKCXNob3J0CQlmZGJjY19uZ2UJLQl0YmxfZmRiY2MJIyAyOAoJc2hvcnQJCWZkYmNjX25ndAktCXRibF9mZGJjYwkjIDI5CglzaG9ydAkJZmRiY2Nfc25lcQktCXRibF9mZGJjYwkjIDMwCglzaG9ydAkJZmRiY2Nfc3QJLQl0YmxfZmRiY2MJIyAzMQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojCQkJCQkJCQkJIwojIElFRUUgTm9uYXdhcmUgdGVzdHMJCQkJCQkJIwojCQkJCQkJCQkJIwojIEZvciB0aGUgSUVFRSBub25hd2FyZSB0ZXN0cywgb25seSB0aGUgZmFsc2UgYnJhbmNoIGNoYW5nZXMgdGhlCSMKIyBjb3VudGVyLiBIb3dldmVyLCB0aGUgdHJ1ZSBicmFuY2ggbWF5IHNldCBic3VuIHNvIHdlIGNoZWNrIHRvIHNlZQkjCiMgaWYgdGhlIE5BTiBiaXQgaXMgc2V0LCBpbiB3aGljaCBjYXNlIEJTVU4gYW5kIEFJT1Agd2lsbCBiZSBzZXQuCSMKIwkJCQkJCQkJCSMKIyBUaGUgY2FzZXMgRVEgYW5kIE5FIGFyZSBzaGFyZWQgYnkgdGhlIEF3YXJlIGFuZCBOb25hd2FyZSBncm91cHMJIwojIGFuZCBhcmUgaW5jYXBhYmxlIG9mIHNldHRpbmcgdGhlIEJTVU4gZXhjZXB0aW9uIGJpdC4JCQkjCiMJCQkJCQkJCQkjCiMgVHlwaWNhbGx5LCBvbmx5IG9uZSBvZiB0aGUgdHdvIHBvc3NpYmxlIGJyYW5jaCBkaXJlY3Rpb25zIGNvdWxkCSMKIyBoYXZlIHRoZSBOQU4gYml0IHNldC4JCQkJCQkJIwojIChUaGlzIGlzIGFzc3VtaW5nIHRoZSBtdXR1YWwgZXhjbHVzaXZlbmVzcyBvZiBGUFNSIGNjIGJpdCBncm91cGluZ3MJIwojICBpcyBwcmVzZXJ2ZWQuKQkJCQkJCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMKIyBlcXVhbDoKIwojCVoKIwpmZGJjY19lcToKCWZiZXEudwkJZmRiY2NfZXFfeWVzCQkjIGVxdWFsPwpmZGJjY19lcV9ubzoKCWJyYS53CQlmZGJjY19mYWxzZQkJIyBubzsgZ28gaGFuZGxlIGNvdW50ZXIKZmRiY2NfZXFfeWVzOgoJcnRzCgojCiMgbm90IGVxdWFsOgojCV8KIwlaCiMKZmRiY2NfbmVxOgoJZmJuZXEudwkJZmRiY2NfbmVxX3llcwkJIyBub3QgZXF1YWw/CmZkYmNjX25lcV9ubzoKCWJyYS53CQlmZGJjY19mYWxzZQkJIyBubzsgZ28gaGFuZGxlIGNvdW50ZXIKZmRiY2NfbmVxX3llczoKCXJ0cwoKIwojIGdyZWF0ZXIgdGhhbjoKIwlfX19fX19fCiMJTkFOdlp2TgojCmZkYmNjX2d0OgoJZmJndC53CQlmZGJjY19ndF95ZXMJCSMgZ3JlYXRlciB0aGFuPwoJYnRzdAkJJm5hbl9iaXQsIEZQU1JfQ0MoJWE2KQkjIGlzIE5BTiBzZXQgaW4gY2M/CgliZXEudwkJZmRiY2NfZmFsc2UJCSMgbm87Z28gaGFuZGxlIGNvdW50ZXIKCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CglidHN0CQkmYnN1bl9iaXQsIEZQQ1JfRU5BQkxFKCVhNikgIyBpcyBCU1VOIGVuYWJsZWQ/CglibmUudwkJZmRiY2NfYnN1bgkJIyB5ZXM7IHdlIGhhdmUgYW4gZXhjZXB0aW9uCglicmEudwkJZmRiY2NfZmFsc2UJCSMgbm87IGdvIGhhbmRsZSBjb3VudGVyCmZkYmNjX2d0X3llczoKCXJ0cwkJCQkJIyBkbyBub3RoaW5nCgojCiMgbm90IGdyZWF0ZXIgdGhhbjoKIwojCU5BTnZadk4KIwpmZGJjY19uZ3Q6CglmYm5ndC53CQlmZGJjY19uZ3RfeWVzCQkjIG5vdCBncmVhdGVyIHRoYW4/CmZkYmNjX25ndF9ubzoKCWJyYS53CQlmZGJjY19mYWxzZQkJIyBubzsgZ28gaGFuZGxlIGNvdW50ZXIKZmRiY2Nfbmd0X3llczoKCWJ0c3QJCSZuYW5fYml0LCBGUFNSX0NDKCVhNikJIyBpcyBOQU4gc2V0IGluIGNjPwoJYmVxLmIJCWZkYmNjX25ndF9kb25lCQkjIG5vO2dvIGZpbmlzaAoJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKCWJ0c3QJCSZic3VuX2JpdCwgRlBDUl9FTkFCTEUoJWE2KSAjIGlzIEJTVU4gZW5hYmxlZD8KCWJuZS53CQlmZGJjY19ic3VuCQkjIHllczsgd2UgaGF2ZSBhbiBleGNlcHRpb24KZmRiY2Nfbmd0X2RvbmU6CglydHMJCQkJCSMgbm87IGRvIG5vdGhpbmcKCiMKIyBncmVhdGVyIHRoYW4gb3IgZXF1YWw6CiMJICAgX19fX18KIwladihOQU52TikKIwpmZGJjY19nZToKCWZiZ2UudwkJZmRiY2NfZ2VfeWVzCQkjIGdyZWF0ZXIgdGhhbiBvciBlcXVhbD8KZmRiY2NfZ2Vfbm86CglidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgaXMgTkFOIHNldCBpbiBjYz8KCWJlcS53CQlmZGJjY19mYWxzZQkJIyBubztnbyBoYW5kbGUgY291bnRlcgoJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKCWJ0c3QJCSZic3VuX2JpdCwgRlBDUl9FTkFCTEUoJWE2KSAjIGlzIEJTVU4gZW5hYmxlZD8KCWJuZS53CQlmZGJjY19ic3VuCQkjIHllczsgd2UgaGF2ZSBhbiBleGNlcHRpb24KCWJyYS53CQlmZGJjY19mYWxzZQkJIyBubzsgZ28gaGFuZGxlIGNvdW50ZXIKZmRiY2NfZ2VfeWVzOgoJYnRzdAkJJm5hbl9iaXQsIEZQU1JfQ0MoJWE2KQkjIGlzIE5BTiBzZXQgaW4gY2M/CgliZXEuYgkJZmRiY2NfZ2VfeWVzX2RvbmUJIyBubztnbyBkbyBub3RoaW5nCglvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAoJYnRzdAkJJmJzdW5fYml0LCBGUENSX0VOQUJMRSglYTYpICMgaXMgQlNVTiBlbmFibGVkPwoJYm5lLncJCWZkYmNjX2JzdW4JCSMgeWVzOyB3ZSBoYXZlIGFuIGV4Y2VwdGlvbgpmZGJjY19nZV95ZXNfZG9uZToKCXJ0cwkJCQkJIyBkbyBub3RoaW5nCgojCiMgbm90IChncmVhdGVyIHRoYW4gb3IgZXF1YWwpOgojCSAgICAgICBfCiMJTkFOdihOXlopCiMKZmRiY2NfbmdlOgoJZmJuZ2UudwkJZmRiY2NfbmdlX3llcwkJIyBub3QgKGdyZWF0ZXIgdGhhbiBvciBlcXVhbCk/CmZkYmNjX25nZV9ubzoKCWJyYS53CQlmZGJjY19mYWxzZQkJIyBubzsgZ28gaGFuZGxlIGNvdW50ZXIKZmRiY2NfbmdlX3llczoKCWJ0c3QJCSZuYW5fYml0LCBGUFNSX0NDKCVhNikJIyBpcyBOQU4gc2V0IGluIGNjPwoJYmVxLmIJCWZkYmNjX25nZV9kb25lCQkjIG5vO2dvIGZpbmlzaAoJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKCWJ0c3QJCSZic3VuX2JpdCwgRlBDUl9FTkFCTEUoJWE2KSAjIGlzIEJTVU4gZW5hYmxlZD8KCWJuZS53CQlmZGJjY19ic3VuCQkjIHllczsgd2UgaGF2ZSBhbiBleGNlcHRpb24KZmRiY2NfbmdlX2RvbmU6CglydHMJCQkJCSMgbm87IGRvIG5vdGhpbmcKCiMKIyBsZXNzIHRoYW46CiMJICAgX19fX18KIwlOXihOQU52WikKIwpmZGJjY19sdDoKCWZibHQudwkJZmRiY2NfbHRfeWVzCQkjIGxlc3MgdGhhbj8KZmRiY2NfbHRfbm86CglidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgaXMgTkFOIHNldCBpbiBjYz8KCWJlcS53CQlmZGJjY19mYWxzZQkJIyBubzsgZ28gaGFuZGxlIGNvdW50ZXIKCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CglidHN0CQkmYnN1bl9iaXQsIEZQQ1JfRU5BQkxFKCVhNikgIyBpcyBCU1VOIGVuYWJsZWQ/CglibmUudwkJZmRiY2NfYnN1bgkJIyB5ZXM7IHdlIGhhdmUgYW4gZXhjZXB0aW9uCglicmEudwkJZmRiY2NfZmFsc2UJCSMgbm87IGdvIGhhbmRsZSBjb3VudGVyCmZkYmNjX2x0X3llczoKCXJ0cwkJCQkJIyBkbyBub3RoaW5nCgojCiMgbm90IGxlc3MgdGhhbjoKIwkgICAgICAgXwojCU5BTnYoWnZOKQojCmZkYmNjX25sdDoKCWZibmx0LncJCWZkYmNjX25sdF95ZXMJCSMgbm90IGxlc3MgdGhhbj8KZmRiY2Nfbmx0X25vOgoJYnJhLncJCWZkYmNjX2ZhbHNlCQkjIG5vOyBnbyBoYW5kbGUgY291bnRlcgpmZGJjY19ubHRfeWVzOgoJYnRzdAkJJm5hbl9iaXQsIEZQU1JfQ0MoJWE2KQkjIGlzIE5BTiBzZXQgaW4gY2M/CgliZXEuYgkJZmRiY2Nfbmx0X2RvbmUJCSMgbm87Z28gZmluaXNoCglvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAoJYnRzdAkJJmJzdW5fYml0LCBGUENSX0VOQUJMRSglYTYpICMgaXMgQlNVTiBlbmFibGVkPwoJYm5lLncJCWZkYmNjX2JzdW4JCSMgeWVzOyB3ZSBoYXZlIGFuIGV4Y2VwdGlvbgpmZGJjY19ubHRfZG9uZToKCXJ0cwkJCQkJIyBubzsgZG8gbm90aGluZwoKIwojIGxlc3MgdGhhbiBvciBlcXVhbDoKIwkgICAgIF9fXwojCVp2KE5eTkFOKQojCmZkYmNjX2xlOgoJZmJsZS53CQlmZGJjY19sZV95ZXMJCSMgbGVzcyB0aGFuIG9yIGVxdWFsPwpmZGJjY19sZV9ubzoKCWJ0c3QJCSZuYW5fYml0LCBGUFNSX0NDKCVhNikJIyBpcyBOQU4gc2V0IGluIGNjPwoJYmVxLncJCWZkYmNjX2ZhbHNlCQkjIG5vOyBnbyBoYW5kbGUgY291bnRlcgoJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKCWJ0c3QJCSZic3VuX2JpdCwgRlBDUl9FTkFCTEUoJWE2KSAjIGlzIEJTVU4gZW5hYmxlZD8KCWJuZS53CQlmZGJjY19ic3VuCQkjIHllczsgd2UgaGF2ZSBhbiBleGNlcHRpb24KCWJyYS53CQlmZGJjY19mYWxzZQkJIyBubzsgZ28gaGFuZGxlIGNvdW50ZXIKZmRiY2NfbGVfeWVzOgoJYnRzdAkJJm5hbl9iaXQsIEZQU1JfQ0MoJWE2KQkjIGlzIE5BTiBzZXQgaW4gY2M/CgliZXEuYgkJZmRiY2NfbGVfeWVzX2RvbmUJIyBubzsgZ28gZG8gbm90aGluZwoJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKCWJ0c3QJCSZic3VuX2JpdCwgRlBDUl9FTkFCTEUoJWE2KSAjIGlzIEJTVU4gZW5hYmxlZD8KCWJuZS53CQlmZGJjY19ic3VuCQkjIHllczsgd2UgaGF2ZSBhbiBleGNlcHRpb24KZmRiY2NfbGVfeWVzX2RvbmU6CglydHMJCQkJCSMgZG8gbm90aGluZwoKIwojIG5vdCAobGVzcyB0aGFuIG9yIGVxdWFsKToKIwkgICAgIF9fXwojCU5BTnYoTnZaKQojCmZkYmNjX25sZToKCWZibmxlLncJCWZkYmNjX25sZV95ZXMJCSMgbm90IChsZXNzIHRoYW4gb3IgZXF1YWwpPwpmZGJjY19ubGVfbm86CglicmEudwkJZmRiY2NfZmFsc2UJCSMgbm87IGdvIGhhbmRsZSBjb3VudGVyCmZkYmNjX25sZV95ZXM6CglidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgaXMgTkFOIHNldCBpbiBjYz8KCWJlcS53CQlmZGJjY19ubGVfZG9uZQkJIyBubzsgZ28gZmluaXNoCglvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAoJYnRzdAkJJmJzdW5fYml0LCBGUENSX0VOQUJMRSglYTYpICMgaXMgQlNVTiBlbmFibGVkPwoJYm5lLncJCWZkYmNjX2JzdW4JCSMgeWVzOyB3ZSBoYXZlIGFuIGV4Y2VwdGlvbgpmZGJjY19ubGVfZG9uZToKCXJ0cwkJCQkJIyBubzsgZG8gbm90aGluZwoKIwojIGdyZWF0ZXIgb3IgbGVzcyB0aGFuOgojCV9fX19fCiMJTkFOdloKIwpmZGJjY19nbDoKCWZiZ2wudwkJZmRiY2NfZ2xfeWVzCQkjIGdyZWF0ZXIgb3IgbGVzcyB0aGFuPwpmZGJjY19nbF9ubzoKCWJ0c3QJCSZuYW5fYml0LCBGUFNSX0NDKCVhNikJIyBpcyBOQU4gc2V0IGluIGNjPwoJYmVxLncJCWZkYmNjX2ZhbHNlCQkjIG5vOyBoYW5kbGUgY291bnRlcgoJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKCWJ0c3QJCSZic3VuX2JpdCwgRlBDUl9FTkFCTEUoJWE2KSAjIGlzIEJTVU4gZW5hYmxlZD8KCWJuZS53CQlmZGJjY19ic3VuCQkjIHllczsgd2UgaGF2ZSBhbiBleGNlcHRpb24KCWJyYS53CQlmZGJjY19mYWxzZQkJIyBubzsgZ28gaGFuZGxlIGNvdW50ZXIKZmRiY2NfZ2xfeWVzOgoJcnRzCQkJCQkjIGRvIG5vdGhpbmcKCiMKIyBub3QgKGdyZWF0ZXIgb3IgbGVzcyB0aGFuKToKIwojCU5BTnZaCiMKZmRiY2NfbmdsOgoJZmJuZ2wudwkJZmRiY2NfbmdsX3llcwkJIyBub3QgKGdyZWF0ZXIgb3IgbGVzcyB0aGFuKT8KZmRiY2NfbmdsX25vOgoJYnJhLncJCWZkYmNjX2ZhbHNlCQkjIG5vOyBnbyBoYW5kbGUgY291bnRlcgpmZGJjY19uZ2xfeWVzOgoJYnRzdAkJJm5hbl9iaXQsIEZQU1JfQ0MoJWE2KQkjIGlzIE5BTiBzZXQgaW4gY2M/CgliZXEuYgkJZmRiY2NfbmdsX2RvbmUJCSMgbm87IGdvIGZpbmlzaAoJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKCWJ0c3QJCSZic3VuX2JpdCwgRlBDUl9FTkFCTEUoJWE2KSAjIGlzIEJTVU4gZW5hYmxlZD8KCWJuZS53CQlmZGJjY19ic3VuCQkjIHllczsgd2UgaGF2ZSBhbiBleGNlcHRpb24KZmRiY2NfbmdsX2RvbmU6CglydHMJCQkJCSMgbm87IGRvIG5vdGhpbmcKCiMKIyBncmVhdGVyLCBsZXNzLCBvciBlcXVhbDoKIwlfX18KIwlOQU4KIwpmZGJjY19nbGU6CglmYmdsZS53CQlmZGJjY19nbGVfeWVzCQkjIGdyZWF0ZXIsIGxlc3MsIG9yIGVxdWFsPwpmZGJjY19nbGVfbm86CglvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAoJYnRzdAkJJmJzdW5fYml0LCBGUENSX0VOQUJMRSglYTYpICMgaXMgQlNVTiBlbmFibGVkPwoJYm5lLncJCWZkYmNjX2JzdW4JCSMgeWVzOyB3ZSBoYXZlIGFuIGV4Y2VwdGlvbgoJYnJhLncJCWZkYmNjX2ZhbHNlCQkjIG5vOyBnbyBoYW5kbGUgY291bnRlcgpmZGJjY19nbGVfeWVzOgoJcnRzCQkJCQkjIGRvIG5vdGhpbmcKCiMKIyBub3QgKGdyZWF0ZXIsIGxlc3MsIG9yIGVxdWFsKToKIwojCU5BTgojCmZkYmNjX25nbGU6CglmYm5nbGUudwlmZGJjY19uZ2xlX3llcwkJIyBub3QgKGdyZWF0ZXIsIGxlc3MsIG9yIGVxdWFsKT8KZmRiY2NfbmdsZV9ubzoKCWJyYS53CQlmZGJjY19mYWxzZQkJIyBubzsgZ28gaGFuZGxlIGNvdW50ZXIKZmRiY2NfbmdsZV95ZXM6CglvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAoJYnRzdAkJJmJzdW5fYml0LCBGUENSX0VOQUJMRSglYTYpICMgaXMgQlNVTiBlbmFibGVkPwoJYm5lLncJCWZkYmNjX2JzdW4JCSMgeWVzOyB3ZSBoYXZlIGFuIGV4Y2VwdGlvbgoJcnRzCQkJCQkjIG5vOyBkbyBub3RoaW5nCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMJCQkJCQkJCQkjCiMgTWlzY2VsbGFuZW91cyB0ZXN0cwkJCQkJCQkjCiMJCQkJCQkJCQkjCiMgRm9yIHRoZSBJRUVFIG1pc2NlbGxhbmVvdXMgdGVzdHMsIGFsbCBidXQgZmRiZiBhbmQgZmRidCBjYW4gc2V0IGJzdW4uICMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIwojIGZhbHNlOgojCiMJRmFsc2UKIwpmZGJjY19mOgkJCQkJIyBubyBic3VuIHBvc3NpYmxlCglicmEudwkJZmRiY2NfZmFsc2UJCSMgZ28gaGFuZGxlIGNvdW50ZXIKCiMKIyB0cnVlOgojCiMJVHJ1ZQojCmZkYmNjX3Q6CQkJCQkjIG5vIGJzdW4gcG9zc2libGUKCXJ0cwkJCQkJIyBkbyBub3RoaW5nCgojCiMgc2lnbmFsbGluZyBmYWxzZToKIwojCUZhbHNlCiMKZmRiY2Nfc2Y6CglidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgaXMgTkFOIHNldD8KCWJlcS53CQlmZGJjY19mYWxzZQkJIyBubztnbyBoYW5kbGUgY291bnRlcgoJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKCWJ0c3QJCSZic3VuX2JpdCwgRlBDUl9FTkFCTEUoJWE2KSAjIGlzIEJTVU4gZW5hYmxlZD8KCWJuZS53CQlmZGJjY19ic3VuCQkjIHllczsgd2UgaGF2ZSBhbiBleGNlcHRpb24KCWJyYS53CQlmZGJjY19mYWxzZQkJIyBnbyBoYW5kbGUgY291bnRlcgoKIwojIHNpZ25hbGxpbmcgdHJ1ZToKIwojCVRydWUKIwpmZGJjY19zdDoKCWJ0c3QJCSZuYW5fYml0LCBGUFNSX0NDKCVhNikJIyBpcyBOQU4gc2V0PwoJYmVxLmIJCWZkYmNjX3N0X2RvbmUJCSMgbm87Z28gZmluaXNoCglvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAoJYnRzdAkJJmJzdW5fYml0LCBGUENSX0VOQUJMRSglYTYpICMgaXMgQlNVTiBlbmFibGVkPwoJYm5lLncJCWZkYmNjX2JzdW4JCSMgeWVzOyB3ZSBoYXZlIGFuIGV4Y2VwdGlvbgpmZGJjY19zdF9kb25lOgoJcnRzCgojCiMgc2lnbmFsbGluZyBlcXVhbDoKIwojCVoKIwpmZGJjY19zZXE6CglmYnNlcS53CQlmZGJjY19zZXFfeWVzCQkjIHNpZ25hbGxpbmcgZXF1YWw/CmZkYmNjX3NlcV9ubzoKCWJ0c3QJCSZuYW5fYml0LCBGUFNSX0NDKCVhNikJIyBpcyBOQU4gc2V0PwoJYmVxLncJCWZkYmNjX2ZhbHNlCQkjIG5vO2dvIGhhbmRsZSBjb3VudGVyCglvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAoJYnRzdAkJJmJzdW5fYml0LCBGUENSX0VOQUJMRSglYTYpICMgaXMgQlNVTiBlbmFibGVkPwoJYm5lLncJCWZkYmNjX2JzdW4JCSMgeWVzOyB3ZSBoYXZlIGFuIGV4Y2VwdGlvbgoJYnJhLncJCWZkYmNjX2ZhbHNlCQkjIGdvIGhhbmRsZSBjb3VudGVyCmZkYmNjX3NlcV95ZXM6CglidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgaXMgTkFOIHNldD8KCWJlcS5iCQlmZGJjY19zZXFfeWVzX2RvbmUJIyBubztnbyBkbyBub3RoaW5nCglvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAoJYnRzdAkJJmJzdW5fYml0LCBGUENSX0VOQUJMRSglYTYpICMgaXMgQlNVTiBlbmFibGVkPwoJYm5lLncJCWZkYmNjX2JzdW4JCSMgeWVzOyB3ZSBoYXZlIGFuIGV4Y2VwdGlvbgpmZGJjY19zZXFfeWVzX2RvbmU6CglydHMJCQkJCSMgeWVzOyBkbyBub3RoaW5nCgojCiMgc2lnbmFsbGluZyBub3QgZXF1YWw6CiMJXwojCVoKIwpmZGJjY19zbmVxOgoJZmJzbmVxLncJZmRiY2Nfc25lcV95ZXMJCSMgc2lnbmFsbGluZyBub3QgZXF1YWw/CmZkYmNjX3NuZXFfbm86CglidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgaXMgTkFOIHNldD8KCWJlcS53CQlmZGJjY19mYWxzZQkJIyBubztnbyBoYW5kbGUgY291bnRlcgoJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKCWJ0c3QJCSZic3VuX2JpdCwgRlBDUl9FTkFCTEUoJWE2KSAjIGlzIEJTVU4gZW5hYmxlZD8KCWJuZS53CQlmZGJjY19ic3VuCQkjIHllczsgd2UgaGF2ZSBhbiBleGNlcHRpb24KCWJyYS53CQlmZGJjY19mYWxzZQkJIyBnbyBoYW5kbGUgY291bnRlcgpmZGJjY19zbmVxX3llczoKCWJ0c3QJCSZuYW5fYml0LCBGUFNSX0NDKCVhNikJIyBzZXQgQlNVTiBleGMgYml0CgliZXEudwkJZmRiY2Nfc25lcV9kb25lCQkjIG5vO2dvIGZpbmlzaAoJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKCWJ0c3QJCSZic3VuX2JpdCwgRlBDUl9FTkFCTEUoJWE2KSAjIGlzIEJTVU4gZW5hYmxlZD8KCWJuZS53CQlmZGJjY19ic3VuCQkjIHllczsgd2UgaGF2ZSBhbiBleGNlcHRpb24KZmRiY2Nfc25lcV9kb25lOgoJcnRzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMJCQkJCQkJCQkjCiMgSUVFRSBBd2FyZSB0ZXN0cwkJCQkJCQkjCiMJCQkJCQkJCQkjCiMgRm9yIHRoZSBJRUVFIGF3YXJlIHRlc3RzLCBhY3Rpb24gaXMgb25seSB0YWtlbiBpZiB0aGUgcmVzdWx0IGlzIGZhbHNlLiMKIyBUaGVyZWZvcmUsIHRoZSBvcHBvc2l0ZSBicmFuY2ggdHlwZSBpcyB1c2VkIHRvIGp1bXAgdG8gdGhlIGRlY3JlbWVudAkjCiMgcm91dGluZS4JCQkJCQkJCSMKIyBUaGUgQlNVTiBleGNlcHRpb24gd2lsbCBub3QgYmUgc2V0IGZvciBhbnkgb2YgdGhlc2UgdGVzdHMuCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMKIyBvcmRlcmVkIGdyZWF0ZXIgdGhhbjoKIwlfX19fX19fCiMJTkFOdlp2TgojCmZkYmNjX29ndDoKCWZib2d0LncJCWZkYmNjX29ndF95ZXMJCSMgb3JkZXJlZCBncmVhdGVyIHRoYW4/CmZkYmNjX29ndF9ubzoKCWJyYS53CQlmZGJjY19mYWxzZQkJIyBubzsgZ28gaGFuZGxlIGNvdW50ZXIKZmRiY2Nfb2d0X3llczoKCXJ0cwkJCQkJIyB5ZXM7IGRvIG5vdGhpbmcKCiMKIyB1bm9yZGVyZWQgb3IgbGVzcyBvciBlcXVhbDoKIwlfX19fX19fCiMJTkFOdlp2TgojCmZkYmNjX3VsZToKCWZidWxlLncJCWZkYmNjX3VsZV95ZXMJCSMgdW5vcmRlcmVkIG9yIGxlc3Mgb3IgZXF1YWw/CmZkYmNjX3VsZV9ubzoKCWJyYS53CQlmZGJjY19mYWxzZQkJIyBubzsgZ28gaGFuZGxlIGNvdW50ZXIKZmRiY2NfdWxlX3llczoKCXJ0cwkJCQkJIyB5ZXM7IGRvIG5vdGhpbmcKCiMKIyBvcmRlcmVkIGdyZWF0ZXIgdGhhbiBvciBlcXVhbDoKIwkgICBfX19fXwojCVp2KE5BTnZOKQojCmZkYmNjX29nZToKCWZib2dlLncJCWZkYmNjX29nZV95ZXMJCSMgb3JkZXJlZCBncmVhdGVyIHRoYW4gb3IgZXF1YWw/CmZkYmNjX29nZV9ubzoKCWJyYS53CQlmZGJjY19mYWxzZQkJIyBubzsgZ28gaGFuZGxlIGNvdW50ZXIKZmRiY2Nfb2dlX3llczoKCXJ0cwkJCQkJIyB5ZXM7IGRvIG5vdGhpbmcKCiMKIyB1bm9yZGVyZWQgb3IgbGVzcyB0aGFuOgojCSAgICAgICBfCiMJTkFOdihOXlopCiMKZmRiY2NfdWx0OgoJZmJ1bHQudwkJZmRiY2NfdWx0X3llcwkJIyB1bm9yZGVyZWQgb3IgbGVzcyB0aGFuPwpmZGJjY191bHRfbm86CglicmEudwkJZmRiY2NfZmFsc2UJCSMgbm87IGdvIGhhbmRsZSBjb3VudGVyCmZkYmNjX3VsdF95ZXM6CglydHMJCQkJCSMgeWVzOyBkbyBub3RoaW5nCgojCiMgb3JkZXJlZCBsZXNzIHRoYW46CiMJICAgX19fX18KIwlOXihOQU52WikKIwpmZGJjY19vbHQ6CglmYm9sdC53CQlmZGJjY19vbHRfeWVzCQkjIG9yZGVyZWQgbGVzcyB0aGFuPwpmZGJjY19vbHRfbm86CglicmEudwkJZmRiY2NfZmFsc2UJCSMgbm87IGdvIGhhbmRsZSBjb3VudGVyCmZkYmNjX29sdF95ZXM6CglydHMJCQkJCSMgeWVzOyBkbyBub3RoaW5nCgojCiMgdW5vcmRlcmVkIG9yIGdyZWF0ZXIgb3IgZXF1YWw6CiMKIwlOQU52WnZOCiMKZmRiY2NfdWdlOgoJZmJ1Z2UudwkJZmRiY2NfdWdlX3llcwkJIyB1bm9yZGVyZWQgb3IgZ3JlYXRlciB0aGFuPwpmZGJjY191Z2Vfbm86CglicmEudwkJZmRiY2NfZmFsc2UJCSMgbm87IGdvIGhhbmRsZSBjb3VudGVyCmZkYmNjX3VnZV95ZXM6CglydHMJCQkJCSMgeWVzOyBkbyBub3RoaW5nCgojCiMgb3JkZXJlZCBsZXNzIHRoYW4gb3IgZXF1YWw6CiMJICAgICBfX18KIwladihOXk5BTikKIwpmZGJjY19vbGU6CglmYm9sZS53CQlmZGJjY19vbGVfeWVzCQkjIG9yZGVyZWQgZ3JlYXRlciBvciBsZXNzIHRoYW4/CmZkYmNjX29sZV9ubzoKCWJyYS53CQlmZGJjY19mYWxzZQkJIyBubzsgZ28gaGFuZGxlIGNvdW50ZXIKZmRiY2Nfb2xlX3llczoKCXJ0cwkJCQkJIyB5ZXM7IGRvIG5vdGhpbmcKCiMKIyB1bm9yZGVyZWQgb3IgZ3JlYXRlciB0aGFuOgojCSAgICAgX19fCiMJTkFOdihOdlopCiMKZmRiY2NfdWd0OgoJZmJ1Z3QudwkJZmRiY2NfdWd0X3llcwkJIyB1bm9yZGVyZWQgb3IgZ3JlYXRlciB0aGFuPwpmZGJjY191Z3Rfbm86CglicmEudwkJZmRiY2NfZmFsc2UJCSMgbm87IGdvIGhhbmRsZSBjb3VudGVyCmZkYmNjX3VndF95ZXM6CglydHMJCQkJCSMgeWVzOyBkbyBub3RoaW5nCgojCiMgb3JkZXJlZCBncmVhdGVyIG9yIGxlc3MgdGhhbjoKIwlfX19fXwojCU5BTnZaCiMKZmRiY2Nfb2dsOgoJZmJvZ2wudwkJZmRiY2Nfb2dsX3llcwkJIyBvcmRlcmVkIGdyZWF0ZXIgb3IgbGVzcyB0aGFuPwpmZGJjY19vZ2xfbm86CglicmEudwkJZmRiY2NfZmFsc2UJCSMgbm87IGdvIGhhbmRsZSBjb3VudGVyCmZkYmNjX29nbF95ZXM6CglydHMJCQkJCSMgeWVzOyBkbyBub3RoaW5nCgojCiMgdW5vcmRlcmVkIG9yIGVxdWFsOgojCiMJTkFOdloKIwpmZGJjY191ZXE6CglmYnVlcS53CQlmZGJjY191ZXFfeWVzCQkjIHVub3JkZXJlZCBvciBlcXVhbD8KZmRiY2NfdWVxX25vOgoJYnJhLncJCWZkYmNjX2ZhbHNlCQkjIG5vOyBnbyBoYW5kbGUgY291bnRlcgpmZGJjY191ZXFfeWVzOgoJcnRzCQkJCQkjIHllczsgZG8gbm90aGluZwoKIwojIG9yZGVyZWQ6CiMJX19fCiMJTkFOCiMKZmRiY2Nfb3I6CglmYm9yLncJCWZkYmNjX29yX3llcwkJIyBvcmRlcmVkPwpmZGJjY19vcl9ubzoKCWJyYS53CQlmZGJjY19mYWxzZQkJIyBubzsgZ28gaGFuZGxlIGNvdW50ZXIKZmRiY2Nfb3JfeWVzOgoJcnRzCQkJCQkjIHllczsgZG8gbm90aGluZwoKIwojIHVub3JkZXJlZDoKIwojCU5BTgojCmZkYmNjX3VuOgoJZmJ1bi53CQlmZGJjY191bl95ZXMJCSMgdW5vcmRlcmVkPwpmZGJjY191bl9ubzoKCWJyYS53CQlmZGJjY19mYWxzZQkJIyBubzsgZ28gaGFuZGxlIGNvdW50ZXIKZmRiY2NfdW5feWVzOgoJcnRzCQkJCQkjIHllczsgZG8gbm90aGluZwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMKIyB0aGUgYnN1biBleGNlcHRpb24gYml0IHdhcyBub3Qgc2V0LgojCiMgKDEpIHN1YnRyYWN0IDEgZnJvbSB0aGUgY291bnQgcmVnaXN0ZXIKIyAoMikgaWYgKGNyID09IC0xKSB0aGVuCiMJcGMgPSBwYyBvZiBuZXh0IGluc3RydWN0aW9uCiMgICAgIGVsc2UKIwlwYyArPSBzaWduX2V4dCgxNi1iaXQgZGlzcGxhY2VtZW50KQojCmZkYmNjX2ZhbHNlOgoJbW92LmIJCTErRVhDX09QV09SRCglYTYpLCAlZDEJIyBmZXRjaCBsbyBvcHdvcmQKCWFuZGkudwkJJjB4NywgJWQxCQkjIGV4dHJhY3QgY291bnQgcmVnaXN0ZXIKCglic3IubAkJZmV0Y2hfZHJlZwkJIyBmZXRjaCBjb3VudCB2YWx1ZQojIG1ha2Ugc3VyZSB0aGF0IGQwIGlzbid0IGNvcnJ1cHRlZCBiZXR3ZWVuIGNhbGxzLi4uCgoJc3VicS53CQkmMHgxLCAlZDAJCSMgRG4gLSAxIC0+IERuCgoJYnNyLmwJCXN0b3JlX2RyZWdfbAkJIyBzdG9yZSBuZXcgY291bnQgdmFsdWUKCgljbXBpLncJCSVkMCwgJi0weDEJCSMgaXMgKERuID09IC0xKT8KCWJuZS5iCQlmZGJjY19mYWxzZV9jb250CSMgbm87CglydHMKCmZkYmNjX2ZhbHNlX2NvbnQ6Cgltb3YubAkJTF9TQ1IxKCVhNiksJWQwCQkjIGZldGNoIGRpc3BsYWNlbWVudAoJYWRkLmwJCVVTRVJfRlBJQVIoJWE2KSwlZDAJIyBhZGQgaW5zdHJ1Y3Rpb24gUEMKCWFkZHEubAkJJjB4NCwlZDAJCSMgYWRkIGluc3RydWN0aW9uIGxlbmd0aAoJbW92LmwJCSVkMCxFWENfUEMoJWE2KQkJIyBzZXQgbmV3IFBDCglydHMKCiMgdGhlIGVtdWxhdGlvbiByb3V0aW5lIHNldCBic3VuIGFuZCBCU1VOIHdhcyBlbmFibGVkLiBoYXZlIHRvCiMgZml4IHN0YWNrIGFuZCBqdW1wIHRvIHRoZSBic3VuIGhhbmRsZXIuCiMgbGV0IHRoZSBjYWxsZXIgb2YgdGhpcyByb3V0aW5lIHNoaWZ0IHRoZSBzdGFjayBmcmFtZSB1cCB0bwojIGVsaW1pbmF0ZSB0aGUgZWZmZWN0aXZlIGFkZHJlc3MgZmllbGQuCmZkYmNjX2JzdW46Cgltb3YuYgkJJmZic3VuX2ZsZyxTUENPTkRfRkxHKCVhNikKCXJ0cwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIGZ0cmFwY2MoKTogcm91dGluZSB0byBlbXVsYXRlIHRoZSBmdHJhcGNjIGluc3RydWN0aW9uCQkJIwojCQkJCQkJCQkJIwojIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJX2Z0cmFwY2MoKQkJCQkJCQkjCiMJCQkJCQkJCQkjCiMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlub25lCQkJCQkJCQkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKIwlub25lCQkJCQkJCQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKIwlub25lCQkJCQkJCQkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKIwlUaGlzIHJvdXRpbmUgY2hlY2tzIHdoaWNoIGNvbmRpdGlvbmFsIHByZWRpY2F0ZSBpcyBzcGVjaWZpZWQgYnkJIwojIHRoZSBzdGFja2VkIGZ0cmFwY2MgaW5zdHJ1Y3Rpb24gb3Bjb2RlIGFuZCB0aGVuIGJyYW5jaGVzIHRvIGEgcm91dGluZQkjCiMgZm9yIHRoYXQgcHJlZGljYXRlLiBUaGUgY29ycmVzcG9uZGluZyBmYmNjIGluc3RydWN0aW9uIGlzIHRoZW4gdXNlZAkjCiMgdG8gc2VlIHdoZXRoZXIgdGhlIGNvbmRpdGlvbiAoc3BlY2lmaWVkIGJ5IHRoZSBzdGFja2VkIEZQU1IpIGlzIHRydWUJIwojIG9yIGZhbHNlLgkJCQkJCQkJIwojCUlmIGEgQlNVTiBleGNlcHRpb24gc2hvdWxkIGJlIGluZGljYXRlZCwgdGhlIEJTVU4gYW5kIEFCU1VOCSMKIyBiaXRzIGFyZSBzZXQgaW4gdGhlIHN0YWNrZWQgRlBTUi4gSWYgdGhlIEJTVU4gZXhjZXB0aW9uIGlzIGVuYWJsZWQsCSMKIyB0aGUgZmJzdW5fZmxnIGlzIHNldCBpbiB0aGUgU1BDT05EX0ZMRyBsb2NhdGlvbiBvbiB0aGUgc3RhY2suIElmIGFuCSMKIyBlbmFibGVkIEJTVU4gc2hvdWxkIG5vdCBiZSBmbGFnZ2VkIGFuZCB0aGUgcHJlZGljYXRlIGlzIHRydWUsIHRoZW4JIwojIHRoZSBmdHJhcGNjX2ZsZyBpcyBzZXQgaW4gdGhlIFNQQ09ORF9GTEcgbG9jYXRpb24uIFRoZXNlIHNwZWNpYWwJIwojIGZsYWdzIGluZGljYXRlIHRvIHRoZSBjYWxsaW5nIHJvdXRpbmUgdG8gZW11bGF0ZSB0aGUgZXhjZXB0aW9uYWwJIwojIGNvbmRpdGlvbi4JCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCWdsb2JhbAkJX2Z0cmFwY2MKX2Z0cmFwY2M6Cgltb3YudwkJRVhDX0NNRFJFRyglYTYpLCVkMAkjIGZldGNoIHByZWRpY2F0ZQoKCWNsci5sCQklZDEJCQkjIGNsZWFyIHNjcmF0Y2ggcmVnCgltb3YuYgkJRlBTUl9DQyglYTYpLCVkMQkjIGZldGNoIGZwIGNjb2RlcwoJcm9yLmwJCSYweDgsJWQxCQkjIHJvdGF0ZSB0byB0b3AgYnl0ZQoJZm1vdi5sCQklZDEsJWZwc3IJCSMgaW5zZXJ0IGludG8gRlBTUgoKCW1vdi53CQkodGJsX2Z0cmFwY2MuYiwlcGMsJWQwLncqMiksICVkMSAjIGxvYWQgdGFibGUKCWptcAkJKHRibF9mdHJhcGNjLmIsJXBjLCVkMS53KSAjIGp1bXAgdG8gZnRyYXBjYyByb3V0aW5lCgp0YmxfZnRyYXBjYzoKCXNob3J0CQlmdHJhcGNjX2YJLQl0YmxfZnRyYXBjYwkjIDAwCglzaG9ydAkJZnRyYXBjY19lcQktCXRibF9mdHJhcGNjCSMgMDEKCXNob3J0CQlmdHJhcGNjX29ndAktCXRibF9mdHJhcGNjCSMgMDIKCXNob3J0CQlmdHJhcGNjX29nZQktCXRibF9mdHJhcGNjCSMgMDMKCXNob3J0CQlmdHJhcGNjX29sdAktCXRibF9mdHJhcGNjCSMgMDQKCXNob3J0CQlmdHJhcGNjX29sZQktCXRibF9mdHJhcGNjCSMgMDUKCXNob3J0CQlmdHJhcGNjX29nbAktCXRibF9mdHJhcGNjCSMgMDYKCXNob3J0CQlmdHJhcGNjX29yCS0JdGJsX2Z0cmFwY2MJIyAwNwoJc2hvcnQJCWZ0cmFwY2NfdW4JLQl0YmxfZnRyYXBjYwkjIDA4CglzaG9ydAkJZnRyYXBjY191ZXEJLQl0YmxfZnRyYXBjYwkjIDA5CglzaG9ydAkJZnRyYXBjY191Z3QJLQl0YmxfZnRyYXBjYwkjIDEwCglzaG9ydAkJZnRyYXBjY191Z2UJLQl0YmxfZnRyYXBjYwkjIDExCglzaG9ydAkJZnRyYXBjY191bHQJLQl0YmxfZnRyYXBjYwkjIDEyCglzaG9ydAkJZnRyYXBjY191bGUJLQl0YmxfZnRyYXBjYwkjIDEzCglzaG9ydAkJZnRyYXBjY19uZXEJLQl0YmxfZnRyYXBjYwkjIDE0CglzaG9ydAkJZnRyYXBjY190CS0JdGJsX2Z0cmFwY2MJIyAxNQoJc2hvcnQJCWZ0cmFwY2Nfc2YJLQl0YmxfZnRyYXBjYwkjIDE2CglzaG9ydAkJZnRyYXBjY19zZXEJLQl0YmxfZnRyYXBjYwkjIDE3CglzaG9ydAkJZnRyYXBjY19ndAktCXRibF9mdHJhcGNjCSMgMTgKCXNob3J0CQlmdHJhcGNjX2dlCS0JdGJsX2Z0cmFwY2MJIyAxOQoJc2hvcnQJCWZ0cmFwY2NfbHQJLQl0YmxfZnRyYXBjYwkjIDIwCglzaG9ydAkJZnRyYXBjY19sZQktCXRibF9mdHJhcGNjCSMgMjEKCXNob3J0CQlmdHJhcGNjX2dsCS0JdGJsX2Z0cmFwY2MJIyAyMgoJc2hvcnQJCWZ0cmFwY2NfZ2xlCS0JdGJsX2Z0cmFwY2MJIyAyMwoJc2hvcnQJCWZ0cmFwY2NfbmdsZQktCXRibF9mdHJhcGNjCSMgMjQKCXNob3J0CQlmdHJhcGNjX25nbAktCXRibF9mdHJhcGNjCSMgMjUKCXNob3J0CQlmdHJhcGNjX25sZQktCXRibF9mdHJhcGNjCSMgMjYKCXNob3J0CQlmdHJhcGNjX25sdAktCXRibF9mdHJhcGNjCSMgMjcKCXNob3J0CQlmdHJhcGNjX25nZQktCXRibF9mdHJhcGNjCSMgMjgKCXNob3J0CQlmdHJhcGNjX25ndAktCXRibF9mdHJhcGNjCSMgMjkKCXNob3J0CQlmdHJhcGNjX3NuZXEJLQl0YmxfZnRyYXBjYwkjIDMwCglzaG9ydAkJZnRyYXBjY19zdAktCXRibF9mdHJhcGNjCSMgMzEKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIwkJCQkJCQkJCSMKIyBJRUVFIE5vbmF3YXJlIHRlc3RzCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyBGb3IgdGhlIElFRUUgbm9uYXdhcmUgdGVzdHMsIHdlIHNldCB0aGUgcmVzdWx0IGJhc2VkIG9uIHRoZQkJIwojIGZsb2F0aW5nIHBvaW50IGNvbmRpdGlvbiBjb2Rlcy4gSW4gYWRkaXRpb24sIHdlIGNoZWNrIHRvIHNlZQkJIwojIGlmIHRoZSBOQU4gYml0IGlzIHNldCwgaW4gd2hpY2ggY2FzZSBCU1VOIGFuZCBBSU9QIHdpbGwgYmUgc2V0LgkjCiMJCQkJCQkJCQkjCiMgVGhlIGNhc2VzIEVRIGFuZCBORSBhcmUgc2hhcmVkIGJ5IHRoZSBBd2FyZSBhbmQgTm9uYXdhcmUgZ3JvdXBzCSMKIyBhbmQgYXJlIGluY2FwYWJsZSBvZiBzZXR0aW5nIHRoZSBCU1VOIGV4Y2VwdGlvbiBiaXQuCQkJIwojCQkJCQkJCQkJIwojIFR5cGljYWxseSwgb25seSBvbmUgb2YgdGhlIHR3byBwb3NzaWJsZSBicmFuY2ggZGlyZWN0aW9ucyBjb3VsZAkjCiMgaGF2ZSB0aGUgTkFOIGJpdCBzZXQuCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIwojIGVxdWFsOgojCiMJWgojCmZ0cmFwY2NfZXE6CglmYmVxLncJCWZ0cmFwY2NfdHJhcAkJIyBlcXVhbD8KZnRyYXBjY19lcV9ubzoKCXJ0cwkJCQkJIyBkbyBub3RoaW5nCgojCiMgbm90IGVxdWFsOgojCV8KIwlaCiMKZnRyYXBjY19uZXE6CglmYm5lcS53CQlmdHJhcGNjX3RyYXAJCSMgbm90IGVxdWFsPwpmdHJhcGNjX25lcV9ubzoKCXJ0cwkJCQkJIyBkbyBub3RoaW5nCgojCiMgZ3JlYXRlciB0aGFuOgojCV9fX19fX18KIwlOQU52WnZOCiMKZnRyYXBjY19ndDoKCWZiZ3QudwkJZnRyYXBjY190cmFwCQkjIGdyZWF0ZXIgdGhhbj8KZnRyYXBjY19ndF9ubzoKCWJ0c3QJCSZuYW5fYml0LCBGUFNSX0NDKCVhNikJIyBpcyBOQU4gc2V0IGluIGNjPwoJYmVxLmIJCWZ0cmFwY2NfZ3RfZG9uZQkJIyBubwoJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKCWJ0c3QJCSZic3VuX2JpdCwgRlBDUl9FTkFCTEUoJWE2KSAjIHdhcyBCU1VOIHNldD8KCWJuZS53CQlmdHJhcGNjX2JzdW4JCSMgeWVzCmZ0cmFwY2NfZ3RfZG9uZToKCXJ0cwkJCQkJIyBubzsgZG8gbm90aGluZwoKIwojIG5vdCBncmVhdGVyIHRoYW46CiMKIwlOQU52WnZOCiMKZnRyYXBjY19uZ3Q6CglmYm5ndC53CQlmdHJhcGNjX25ndF95ZXMJCSMgbm90IGdyZWF0ZXIgdGhhbj8KZnRyYXBjY19uZ3Rfbm86CglydHMJCQkJCSMgZG8gbm90aGluZwpmdHJhcGNjX25ndF95ZXM6CglidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgaXMgTkFOIHNldCBpbiBjYz8KCWJlcS53CQlmdHJhcGNjX3RyYXAJCSMgbm87IGdvIHRha2UgdHJhcAoJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKCWJ0c3QJCSZic3VuX2JpdCwgRlBDUl9FTkFCTEUoJWE2KSAjIHdhcyBCU1VOIHNldD8KCWJuZS53CQlmdHJhcGNjX2JzdW4JCSMgeWVzCglicmEudwkJZnRyYXBjY190cmFwCQkjIG5vOyBnbyB0YWtlIHRyYXAKCiMKIyBncmVhdGVyIHRoYW4gb3IgZXF1YWw6CiMJICAgX19fX18KIwladihOQU52TikKIwpmdHJhcGNjX2dlOgoJZmJnZS53CQlmdHJhcGNjX2dlX3llcwkJIyBncmVhdGVyIHRoYW4gb3IgZXF1YWw/CmZ0cmFwY2NfZ2Vfbm86CglidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgaXMgTkFOIHNldCBpbiBjYz8KCWJlcS5iCQlmdHJhcGNjX2dlX2RvbmUJCSMgbm87IGdvIGZpbmlzaAoJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKCWJ0c3QJCSZic3VuX2JpdCwgRlBDUl9FTkFCTEUoJWE2KSAjIHdhcyBCU1VOIHNldD8KCWJuZS53CQlmdHJhcGNjX2JzdW4JCSMgeWVzCmZ0cmFwY2NfZ2VfZG9uZToKCXJ0cwkJCQkJIyBubzsgZG8gbm90aGluZwpmdHJhcGNjX2dlX3llczoKCWJ0c3QJCSZuYW5fYml0LCBGUFNSX0NDKCVhNikJIyBpcyBOQU4gc2V0IGluIGNjPwoJYmVxLncJCWZ0cmFwY2NfdHJhcAkJIyBubzsgZ28gdGFrZSB0cmFwCglvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAoJYnRzdAkJJmJzdW5fYml0LCBGUENSX0VOQUJMRSglYTYpICMgd2FzIEJTVU4gc2V0PwoJYm5lLncJCWZ0cmFwY2NfYnN1bgkJIyB5ZXMKCWJyYS53CQlmdHJhcGNjX3RyYXAJCSMgbm87IGdvIHRha2UgdHJhcAoKIwojIG5vdCAoZ3JlYXRlciB0aGFuIG9yIGVxdWFsKToKIwkgICAgICAgXwojCU5BTnYoTl5aKQojCmZ0cmFwY2NfbmdlOgoJZmJuZ2UudwkJZnRyYXBjY19uZ2VfeWVzCQkjIG5vdCAoZ3JlYXRlciB0aGFuIG9yIGVxdWFsKT8KZnRyYXBjY19uZ2Vfbm86CglydHMJCQkJCSMgZG8gbm90aGluZwpmdHJhcGNjX25nZV95ZXM6CglidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgaXMgTkFOIHNldCBpbiBjYz8KCWJlcS53CQlmdHJhcGNjX3RyYXAJCSMgbm87IGdvIHRha2UgdHJhcAoJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKCWJ0c3QJCSZic3VuX2JpdCwgRlBDUl9FTkFCTEUoJWE2KSAjIHdhcyBCU1VOIHNldD8KCWJuZS53CQlmdHJhcGNjX2JzdW4JCSMgeWVzCglicmEudwkJZnRyYXBjY190cmFwCQkjIG5vOyBnbyB0YWtlIHRyYXAKCiMKIyBsZXNzIHRoYW46CiMJICAgX19fX18KIwlOXihOQU52WikKIwpmdHJhcGNjX2x0OgoJZmJsdC53CQlmdHJhcGNjX3RyYXAJCSMgbGVzcyB0aGFuPwpmdHJhcGNjX2x0X25vOgoJYnRzdAkJJm5hbl9iaXQsIEZQU1JfQ0MoJWE2KQkjIGlzIE5BTiBzZXQgaW4gY2M/CgliZXEuYgkJZnRyYXBjY19sdF9kb25lCQkjIG5vOyBnbyBmaW5pc2gKCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CglidHN0CQkmYnN1bl9iaXQsIEZQQ1JfRU5BQkxFKCVhNikgIyB3YXMgQlNVTiBzZXQ/CglibmUudwkJZnRyYXBjY19ic3VuCQkjIHllcwpmdHJhcGNjX2x0X2RvbmU6CglydHMJCQkJCSMgbm87IGRvIG5vdGhpbmcKCiMKIyBub3QgbGVzcyB0aGFuOgojCSAgICAgICBfCiMJTkFOdihadk4pCiMKZnRyYXBjY19ubHQ6CglmYm5sdC53CQlmdHJhcGNjX25sdF95ZXMJCSMgbm90IGxlc3MgdGhhbj8KZnRyYXBjY19ubHRfbm86CglydHMJCQkJCSMgZG8gbm90aGluZwpmdHJhcGNjX25sdF95ZXM6CglidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgaXMgTkFOIHNldCBpbiBjYz8KCWJlcS53CQlmdHJhcGNjX3RyYXAJCSMgbm87IGdvIHRha2UgdHJhcAoJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKCWJ0c3QJCSZic3VuX2JpdCwgRlBDUl9FTkFCTEUoJWE2KSAjIHdhcyBCU1VOIHNldD8KCWJuZS53CQlmdHJhcGNjX2JzdW4JCSMgeWVzCglicmEudwkJZnRyYXBjY190cmFwCQkjIG5vOyBnbyB0YWtlIHRyYXAKCiMKIyBsZXNzIHRoYW4gb3IgZXF1YWw6CiMJICAgICBfX18KIwladihOXk5BTikKIwpmdHJhcGNjX2xlOgoJZmJsZS53CQlmdHJhcGNjX2xlX3llcwkJIyBsZXNzIHRoYW4gb3IgZXF1YWw/CmZ0cmFwY2NfbGVfbm86CglidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgaXMgTkFOIHNldCBpbiBjYz8KCWJlcS5iCQlmdHJhcGNjX2xlX2RvbmUJCSMgbm87IGdvIGZpbmlzaAoJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKCWJ0c3QJCSZic3VuX2JpdCwgRlBDUl9FTkFCTEUoJWE2KSAjIHdhcyBCU1VOIHNldD8KCWJuZS53CQlmdHJhcGNjX2JzdW4JCSMgeWVzCmZ0cmFwY2NfbGVfZG9uZToKCXJ0cwkJCQkJIyBubzsgZG8gbm90aGluZwpmdHJhcGNjX2xlX3llczoKCWJ0c3QJCSZuYW5fYml0LCBGUFNSX0NDKCVhNikJIyBpcyBOQU4gc2V0IGluIGNjPwoJYmVxLncJCWZ0cmFwY2NfdHJhcAkJIyBubzsgZ28gdGFrZSB0cmFwCglvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAoJYnRzdAkJJmJzdW5fYml0LCBGUENSX0VOQUJMRSglYTYpICMgd2FzIEJTVU4gc2V0PwoJYm5lLncJCWZ0cmFwY2NfYnN1bgkJIyB5ZXMKCWJyYS53CQlmdHJhcGNjX3RyYXAJCSMgbm87IGdvIHRha2UgdHJhcAoKIwojIG5vdCAobGVzcyB0aGFuIG9yIGVxdWFsKToKIwkgICAgIF9fXwojCU5BTnYoTnZaKQojCmZ0cmFwY2NfbmxlOgoJZmJubGUudwkJZnRyYXBjY19ubGVfeWVzCQkjIG5vdCAobGVzcyB0aGFuIG9yIGVxdWFsKT8KZnRyYXBjY19ubGVfbm86CglydHMJCQkJCSMgZG8gbm90aGluZwpmdHJhcGNjX25sZV95ZXM6CglidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgaXMgTkFOIHNldCBpbiBjYz8KCWJlcS53CQlmdHJhcGNjX3RyYXAJCSMgbm87IGdvIHRha2UgdHJhcAoJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKCWJ0c3QJCSZic3VuX2JpdCwgRlBDUl9FTkFCTEUoJWE2KSAjIHdhcyBCU1VOIHNldD8KCWJuZS53CQlmdHJhcGNjX2JzdW4JCSMgeWVzCglicmEudwkJZnRyYXBjY190cmFwCQkjIG5vOyBnbyB0YWtlIHRyYXAKCiMKIyBncmVhdGVyIG9yIGxlc3MgdGhhbjoKIwlfX19fXwojCU5BTnZaCiMKZnRyYXBjY19nbDoKCWZiZ2wudwkJZnRyYXBjY190cmFwCQkjIGdyZWF0ZXIgb3IgbGVzcyB0aGFuPwpmdHJhcGNjX2dsX25vOgoJYnRzdAkJJm5hbl9iaXQsIEZQU1JfQ0MoJWE2KQkjIGlzIE5BTiBzZXQgaW4gY2M/CgliZXEuYgkJZnRyYXBjY19nbF9kb25lCQkjIG5vOyBnbyBmaW5pc2gKCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CglidHN0CQkmYnN1bl9iaXQsIEZQQ1JfRU5BQkxFKCVhNikgIyB3YXMgQlNVTiBzZXQ/CglibmUudwkJZnRyYXBjY19ic3VuCQkjIHllcwpmdHJhcGNjX2dsX2RvbmU6CglydHMJCQkJCSMgbm87IGRvIG5vdGhpbmcKCiMKIyBub3QgKGdyZWF0ZXIgb3IgbGVzcyB0aGFuKToKIwojCU5BTnZaCiMKZnRyYXBjY19uZ2w6CglmYm5nbC53CQlmdHJhcGNjX25nbF95ZXMJCSMgbm90IChncmVhdGVyIG9yIGxlc3MgdGhhbik/CmZ0cmFwY2NfbmdsX25vOgoJcnRzCQkJCQkjIGRvIG5vdGhpbmcKZnRyYXBjY19uZ2xfeWVzOgoJYnRzdAkJJm5hbl9iaXQsIEZQU1JfQ0MoJWE2KQkjIGlzIE5BTiBzZXQgaW4gY2M/CgliZXEudwkJZnRyYXBjY190cmFwCQkjIG5vOyBnbyB0YWtlIHRyYXAKCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CglidHN0CQkmYnN1bl9iaXQsIEZQQ1JfRU5BQkxFKCVhNikgIyB3YXMgQlNVTiBzZXQ/CglibmUudwkJZnRyYXBjY19ic3VuCQkjIHllcwoJYnJhLncJCWZ0cmFwY2NfdHJhcAkJIyBubzsgZ28gdGFrZSB0cmFwCgojCiMgZ3JlYXRlciwgbGVzcywgb3IgZXF1YWw6CiMJX19fCiMJTkFOCiMKZnRyYXBjY19nbGU6CglmYmdsZS53CQlmdHJhcGNjX3RyYXAJCSMgZ3JlYXRlciwgbGVzcywgb3IgZXF1YWw/CmZ0cmFwY2NfZ2xlX25vOgoJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKCWJ0c3QJCSZic3VuX2JpdCwgRlBDUl9FTkFCTEUoJWE2KSAjIHdhcyBCU1VOIHNldD8KCWJuZS53CQlmdHJhcGNjX2JzdW4JCSMgeWVzCglydHMJCQkJCSMgbm87IGRvIG5vdGhpbmcKCiMKIyBub3QgKGdyZWF0ZXIsIGxlc3MsIG9yIGVxdWFsKToKIwojCU5BTgojCmZ0cmFwY2NfbmdsZToKCWZibmdsZS53CWZ0cmFwY2NfbmdsZV95ZXMJIyBub3QgKGdyZWF0ZXIsIGxlc3MsIG9yIGVxdWFsKT8KZnRyYXBjY19uZ2xlX25vOgoJcnRzCQkJCQkjIGRvIG5vdGhpbmcKZnRyYXBjY19uZ2xlX3llczoKCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CglidHN0CQkmYnN1bl9iaXQsIEZQQ1JfRU5BQkxFKCVhNikgIyB3YXMgQlNVTiBzZXQ/CglibmUudwkJZnRyYXBjY19ic3VuCQkjIHllcwoJYnJhLncJCWZ0cmFwY2NfdHJhcAkJIyBubzsgZ28gdGFrZSB0cmFwCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMJCQkJCQkJCQkjCiMgTWlzY2VsbGFuZW91cyB0ZXN0cwkJCQkJCQkjCiMJCQkJCQkJCQkjCiMgRm9yIHRoZSBJRUVFIGF3YXJlIHRlc3RzLCB3ZSBvbmx5IGhhdmUgdG8gc2V0IHRoZSByZXN1bHQgYmFzZWQgb24gdGhlCSMKIyBmbG9hdGluZyBwb2ludCBjb25kaXRpb24gY29kZXMuIFRoZSBCU1VOIGV4Y2VwdGlvbiB3aWxsIG5vdCBiZQkjCiMgc2V0IGZvciBhbnkgb2YgdGhlc2UgdGVzdHMuCQkJCQkJIwojCQkJCQkJCQkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgojCiMgZmFsc2U6CiMKIwlGYWxzZQojCmZ0cmFwY2NfZjoKCXJ0cwkJCQkJIyBkbyBub3RoaW5nCgojCiMgdHJ1ZToKIwojCVRydWUKIwpmdHJhcGNjX3Q6CglicmEudwkJZnRyYXBjY190cmFwCQkjIGdvIHRha2UgdHJhcAoKIwojIHNpZ25hbGxpbmcgZmFsc2U6CiMKIwlGYWxzZQojCmZ0cmFwY2Nfc2Y6CglidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgc2V0IEJTVU4gZXhjIGJpdAoJYmVxLmIJCWZ0cmFwY2Nfc2ZfZG9uZQkJIyBubzsgZ28gZmluaXNoCglvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAoJYnRzdAkJJmJzdW5fYml0LCBGUENSX0VOQUJMRSglYTYpICMgd2FzIEJTVU4gc2V0PwoJYm5lLncJCWZ0cmFwY2NfYnN1bgkJIyB5ZXMKZnRyYXBjY19zZl9kb25lOgoJcnRzCQkJCQkjIG5vOyBkbyBub3RoaW5nCgojCiMgc2lnbmFsbGluZyB0cnVlOgojCiMJVHJ1ZQojCmZ0cmFwY2Nfc3Q6CglidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgc2V0IEJTVU4gZXhjIGJpdAoJYmVxLncJCWZ0cmFwY2NfdHJhcAkJIyBubzsgZ28gdGFrZSB0cmFwCglvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAoJYnRzdAkJJmJzdW5fYml0LCBGUENSX0VOQUJMRSglYTYpICMgd2FzIEJTVU4gc2V0PwoJYm5lLncJCWZ0cmFwY2NfYnN1bgkJIyB5ZXMKCWJyYS53CQlmdHJhcGNjX3RyYXAJCSMgbm87IGdvIHRha2UgdHJhcAoKIwojIHNpZ25hbGxpbmcgZXF1YWw6CiMKIwlaCiMKZnRyYXBjY19zZXE6CglmYnNlcS53CQlmdHJhcGNjX3NlcV95ZXMJCSMgc2lnbmFsbGluZyBlcXVhbD8KZnRyYXBjY19zZXFfbm86CglidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgc2V0IEJTVU4gZXhjIGJpdAoJYmVxLncJCWZ0cmFwY2Nfc2VxX2RvbmUJIyBubzsgZ28gZmluaXNoCglvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAoJYnRzdAkJJmJzdW5fYml0LCBGUENSX0VOQUJMRSglYTYpICMgd2FzIEJTVU4gc2V0PwoJYm5lLncJCWZ0cmFwY2NfYnN1bgkJIyB5ZXMKZnRyYXBjY19zZXFfZG9uZToKCXJ0cwkJCQkJIyBubzsgZG8gbm90aGluZwpmdHJhcGNjX3NlcV95ZXM6CglidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgc2V0IEJTVU4gZXhjIGJpdAoJYmVxLncJCWZ0cmFwY2NfdHJhcAkJIyBubzsgZ28gdGFrZSB0cmFwCglvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAoJYnRzdAkJJmJzdW5fYml0LCBGUENSX0VOQUJMRSglYTYpICMgd2FzIEJTVU4gc2V0PwoJYm5lLncJCWZ0cmFwY2NfYnN1bgkJIyB5ZXMKCWJyYS53CQlmdHJhcGNjX3RyYXAJCSMgbm87IGdvIHRha2UgdHJhcAoKIwojIHNpZ25hbGxpbmcgbm90IGVxdWFsOgojCV8KIwlaCiMKZnRyYXBjY19zbmVxOgoJZmJzbmVxLncJZnRyYXBjY19zbmVxX3llcwkjIHNpZ25hbGxpbmcgZXF1YWw/CmZ0cmFwY2Nfc25lcV9ubzoKCWJ0c3QJCSZuYW5fYml0LCBGUFNSX0NDKCVhNikJIyBzZXQgQlNVTiBleGMgYml0CgliZXEudwkJZnRyYXBjY19zbmVxX25vX2RvbmUJIyBubzsgZ28gZmluaXNoCglvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAoJYnRzdAkJJmJzdW5fYml0LCBGUENSX0VOQUJMRSglYTYpICMgd2FzIEJTVU4gc2V0PwoJYm5lLncJCWZ0cmFwY2NfYnN1bgkJIyB5ZXMKZnRyYXBjY19zbmVxX25vX2RvbmU6CglydHMJCQkJCSMgZG8gbm90aGluZwpmdHJhcGNjX3NuZXFfeWVzOgoJYnRzdAkJJm5hbl9iaXQsIEZQU1JfQ0MoJWE2KQkjIHNldCBCU1VOIGV4YyBiaXQKCWJlcS53CQlmdHJhcGNjX3RyYXAJCSMgbm87IGdvIHRha2UgdHJhcAoJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKCWJ0c3QJCSZic3VuX2JpdCwgRlBDUl9FTkFCTEUoJWE2KSAjIHdhcyBCU1VOIHNldD8KCWJuZS53CQlmdHJhcGNjX2JzdW4JCSMgeWVzCglicmEudwkJZnRyYXBjY190cmFwCQkjIG5vOyBnbyB0YWtlIHRyYXAKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIwkJCQkJCQkJCSMKIyBJRUVFIEF3YXJlIHRlc3RzCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyBGb3IgdGhlIElFRUUgYXdhcmUgdGVzdHMsIHdlIG9ubHkgaGF2ZSB0byBzZXQgdGhlIHJlc3VsdCBiYXNlZCBvbiB0aGUJIwojIGZsb2F0aW5nIHBvaW50IGNvbmRpdGlvbiBjb2Rlcy4gVGhlIEJTVU4gZXhjZXB0aW9uIHdpbGwgbm90IGJlCSMKIyBzZXQgZm9yIGFueSBvZiB0aGVzZSB0ZXN0cy4JCQkJCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMKIyBvcmRlcmVkIGdyZWF0ZXIgdGhhbjoKIwlfX19fX19fCiMJTkFOdlp2TgojCmZ0cmFwY2Nfb2d0OgoJZmJvZ3QudwkJZnRyYXBjY190cmFwCQkjIG9yZGVyZWQgZ3JlYXRlciB0aGFuPwpmdHJhcGNjX29ndF9ubzoKCXJ0cwkJCQkJIyBkbyBub3RoaW5nCgojCiMgdW5vcmRlcmVkIG9yIGxlc3Mgb3IgZXF1YWw6CiMJX19fX19fXwojCU5BTnZadk4KIwpmdHJhcGNjX3VsZToKCWZidWxlLncJCWZ0cmFwY2NfdHJhcAkJIyB1bm9yZGVyZWQgb3IgbGVzcyBvciBlcXVhbD8KZnRyYXBjY191bGVfbm86CglydHMJCQkJCSMgZG8gbm90aGluZwoKIwojIG9yZGVyZWQgZ3JlYXRlciB0aGFuIG9yIGVxdWFsOgojCSAgIF9fX19fCiMJWnYoTkFOdk4pCiMKZnRyYXBjY19vZ2U6CglmYm9nZS53CQlmdHJhcGNjX3RyYXAJCSMgb3JkZXJlZCBncmVhdGVyIHRoYW4gb3IgZXF1YWw/CmZ0cmFwY2Nfb2dlX25vOgoJcnRzCQkJCQkjIGRvIG5vdGhpbmcKCiMKIyB1bm9yZGVyZWQgb3IgbGVzcyB0aGFuOgojCSAgICAgICBfCiMJTkFOdihOXlopCiMKZnRyYXBjY191bHQ6CglmYnVsdC53CQlmdHJhcGNjX3RyYXAJCSMgdW5vcmRlcmVkIG9yIGxlc3MgdGhhbj8KZnRyYXBjY191bHRfbm86CglydHMJCQkJCSMgZG8gbm90aGluZwoKIwojIG9yZGVyZWQgbGVzcyB0aGFuOgojCSAgIF9fX19fCiMJTl4oTkFOdlopCiMKZnRyYXBjY19vbHQ6CglmYm9sdC53CQlmdHJhcGNjX3RyYXAJCSMgb3JkZXJlZCBsZXNzIHRoYW4/CmZ0cmFwY2Nfb2x0X25vOgoJcnRzCQkJCQkjIGRvIG5vdGhpbmcKCiMKIyB1bm9yZGVyZWQgb3IgZ3JlYXRlciBvciBlcXVhbDoKIwojCU5BTnZadk4KIwpmdHJhcGNjX3VnZToKCWZidWdlLncJCWZ0cmFwY2NfdHJhcAkJIyB1bm9yZGVyZWQgb3IgZ3JlYXRlciB0aGFuPwpmdHJhcGNjX3VnZV9ubzoKCXJ0cwkJCQkJIyBkbyBub3RoaW5nCgojCiMgb3JkZXJlZCBsZXNzIHRoYW4gb3IgZXF1YWw6CiMJICAgICBfX18KIwladihOXk5BTikKIwpmdHJhcGNjX29sZToKCWZib2xlLncJCWZ0cmFwY2NfdHJhcAkJIyBvcmRlcmVkIGdyZWF0ZXIgb3IgbGVzcyB0aGFuPwpmdHJhcGNjX29sZV9ubzoKCXJ0cwkJCQkJIyBkbyBub3RoaW5nCgojCiMgdW5vcmRlcmVkIG9yIGdyZWF0ZXIgdGhhbjoKIwkgICAgIF9fXwojCU5BTnYoTnZaKQojCmZ0cmFwY2NfdWd0OgoJZmJ1Z3QudwkJZnRyYXBjY190cmFwCQkjIHVub3JkZXJlZCBvciBncmVhdGVyIHRoYW4/CmZ0cmFwY2NfdWd0X25vOgoJcnRzCQkJCQkjIGRvIG5vdGhpbmcKCiMKIyBvcmRlcmVkIGdyZWF0ZXIgb3IgbGVzcyB0aGFuOgojCV9fX19fCiMJTkFOdloKIwpmdHJhcGNjX29nbDoKCWZib2dsLncJCWZ0cmFwY2NfdHJhcAkJIyBvcmRlcmVkIGdyZWF0ZXIgb3IgbGVzcyB0aGFuPwpmdHJhcGNjX29nbF9ubzoKCXJ0cwkJCQkJIyBkbyBub3RoaW5nCgojCiMgdW5vcmRlcmVkIG9yIGVxdWFsOgojCiMJTkFOdloKIwpmdHJhcGNjX3VlcToKCWZidWVxLncJCWZ0cmFwY2NfdHJhcAkJIyB1bm9yZGVyZWQgb3IgZXF1YWw/CmZ0cmFwY2NfdWVxX25vOgoJcnRzCQkJCQkjIGRvIG5vdGhpbmcKCiMKIyBvcmRlcmVkOgojCV9fXwojCU5BTgojCmZ0cmFwY2Nfb3I6CglmYm9yLncJCWZ0cmFwY2NfdHJhcAkJIyBvcmRlcmVkPwpmdHJhcGNjX29yX25vOgoJcnRzCQkJCQkjIGRvIG5vdGhpbmcKCiMKIyB1bm9yZGVyZWQ6CiMKIwlOQU4KIwpmdHJhcGNjX3VuOgoJZmJ1bi53CQlmdHJhcGNjX3RyYXAJCSMgdW5vcmRlcmVkPwpmdHJhcGNjX3VuX25vOgoJcnRzCQkJCQkjIGRvIG5vdGhpbmcKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgojIHRoZSBic3VuIGV4Y2VwdGlvbiBiaXQgd2FzIG5vdCBzZXQuCiMgd2Ugd2lsbCBuZWVkIHRvIGp1bXAgdG8gdGhlIGZ0cmFwY2MgdmVjdG9yLiB0aGUgc3RhY2sgZnJhbWUKIyBpcyB0aGUgc2FtZSBzaXplIGFzIHRoYXQgb2YgdGhlIGZwIHVuaW1wIGluc3RydWN0aW9uLiB0aGUKIyBvbmx5IGRpZmZlcmVuY2UgaXMgdGhhdCB0aGUgPGVhPiBmaWVsZCBzaG91bGQgaG9sZCB0aGUgUEMKIyBvZiB0aGUgZnRyYXBjYyBpbnN0cnVjdGlvbiBhbmQgdGhlIHZlY3RvciBvZmZzZXQgZmllbGQKIyBzaG91bGQgZGVub3RlIHRoZSBmdHJhcGNjIHRyYXAuCmZ0cmFwY2NfdHJhcDoKCW1vdi5iCQkmZnRyYXBjY19mbGcsU1BDT05EX0ZMRyglYTYpCglydHMKCiMgdGhlIGVtdWxhdGlvbiByb3V0aW5lIHNldCBic3VuIGFuZCBCU1VOIHdhcyBlbmFibGVkLiBoYXZlIHRvCiMgZml4IHN0YWNrIGFuZCBqdW1wIHRvIHRoZSBic3VuIGhhbmRsZXIuCiMgbGV0IHRoZSBjYWxsZXIgb2YgdGhpcyByb3V0aW5lIHNoaWZ0IHRoZSBzdGFjayBmcmFtZSB1cCB0bwojIGVsaW1pbmF0ZSB0aGUgZWZmZWN0aXZlIGFkZHJlc3MgZmllbGQuCmZ0cmFwY2NfYnN1bjoKCW1vdi5iCQkmZmJzdW5fZmxnLFNQQ09ORF9GTEcoJWE2KQoJcnRzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgZnNjYygpOiByb3V0aW5lIHRvIGVtdWxhdGUgdGhlIGZzY2MgaW5zdHJ1Y3Rpb24JCQkjCiMJCQkJCQkJCQkjCiMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKIwlfZnNjYygpCQkJCQkJCQkjCiMJCQkJCQkJCQkjCiMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKIwlzdG9yZV9kcmVnX2IoKSAtIHN0b3JlIHJlc3VsdCB0byBkYXRhIHJlZ2lzdGVyIGZpbGUJCSMKIwlkZWNfYXJlZygpIC0gZGVjcmVtZW50IGFuIGFyZWcgZm9yIC0oYW4pIG1vZGUJCQkjCiMJaW5jX2FyZWcoKSAtIGluY3JlbWVudCBhbiBhcmVnIGZvciAoYW4pKyBtb2RlCQkJIwojCV9kbWVtX3dyaXRlX2J5dGUoKSAtIHN0b3JlIHJlc3VsdCB0byBtZW1vcnkJCQkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlub25lCQkJCQkJCQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKIwlub25lCQkJCQkJCQkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlUaGlzIHJvdXRpbmUgY2hlY2tzIHdoaWNoIGNvbmRpdGlvbmFsIHByZWRpY2F0ZSBpcyBzcGVjaWZpZWQgYnkJIwojIHRoZSBzdGFja2VkIGZzY2MgaW5zdHJ1Y3Rpb24gb3Bjb2RlIGFuZCB0aGVuIGJyYW5jaGVzIHRvIGEgcm91dGluZQkjCiMgZm9yIHRoYXQgcHJlZGljYXRlLiBUaGUgY29ycmVzcG9uZGluZyBmYmNjIGluc3RydWN0aW9uIGlzIHRoZW4gdXNlZAkjCiMgdG8gc2VlIHdoZXRoZXIgdGhlIGNvbmRpdGlvbiAoc3BlY2lmaWVkIGJ5IHRoZSBzdGFja2VkIEZQU1IpIGlzIHRydWUJIwojIG9yIGZhbHNlLgkJCQkJCQkJIwojCUlmIGEgQlNVTiBleGNlcHRpb24gc2hvdWxkIGJlIGluZGljYXRlZCwgdGhlIEJTVU4gYW5kIEFCU1VOCSMKIyBiaXRzIGFyZSBzZXQgaW4gdGhlIHN0YWNrZWQgRlBTUi4gSWYgdGhlIEJTVU4gZXhjZXB0aW9uIGlzIGVuYWJsZWQsCSMKIyB0aGUgZmJzdW5fZmxnIGlzIHNldCBpbiB0aGUgU1BDT05EX0ZMRyBsb2NhdGlvbiBvbiB0aGUgc3RhY2suIElmIGFuCSMKIyBlbmFibGVkIEJTVU4gc2hvdWxkIG5vdCBiZSBmbGFnZ2VkIGFuZCB0aGUgcHJlZGljYXRlIGlzIHRydWUsIHRoZW4JIwojIHRoZSByZXN1bHQgaXMgc3RvcmVkIHRvIHRoZSBkYXRhIHJlZ2lzdGVyIGZpbGUgb3IgbWVtb3J5CQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCglnbG9iYWwJCV9mc2NjCl9mc2NjOgoJbW92LncJCUVYQ19DTURSRUcoJWE2KSwlZDAJIyBmZXRjaCBwcmVkaWNhdGUKCgljbHIubAkJJWQxCQkJIyBjbGVhciBzY3JhdGNoIHJlZwoJbW92LmIJCUZQU1JfQ0MoJWE2KSwlZDEJIyBmZXRjaCBmcCBjY29kZXMKCXJvci5sCQkmMHg4LCVkMQkJIyByb3RhdGUgdG8gdG9wIGJ5dGUKCWZtb3YubAkJJWQxLCVmcHNyCQkjIGluc2VydCBpbnRvIEZQU1IKCgltb3YudwkJKHRibF9mc2NjLmIsJXBjLCVkMC53KjIpLCVkMSAjIGxvYWQgdGFibGUKCWptcAkJKHRibF9mc2NjLmIsJXBjLCVkMS53KQkjIGp1bXAgdG8gZnNjYyByb3V0aW5lCgp0YmxfZnNjYzoKCXNob3J0CQlmc2NjX2YJCS0JdGJsX2ZzY2MJIyAwMAoJc2hvcnQJCWZzY2NfZXEJCS0JdGJsX2ZzY2MJIyAwMQoJc2hvcnQJCWZzY2Nfb2d0CS0JdGJsX2ZzY2MJIyAwMgoJc2hvcnQJCWZzY2Nfb2dlCS0JdGJsX2ZzY2MJIyAwMwoJc2hvcnQJCWZzY2Nfb2x0CS0JdGJsX2ZzY2MJIyAwNAoJc2hvcnQJCWZzY2Nfb2xlCS0JdGJsX2ZzY2MJIyAwNQoJc2hvcnQJCWZzY2Nfb2dsCS0JdGJsX2ZzY2MJIyAwNgoJc2hvcnQJCWZzY2Nfb3IJCS0JdGJsX2ZzY2MJIyAwNwoJc2hvcnQJCWZzY2NfdW4JCS0JdGJsX2ZzY2MJIyAwOAoJc2hvcnQJCWZzY2NfdWVxCS0JdGJsX2ZzY2MJIyAwOQoJc2hvcnQJCWZzY2NfdWd0CS0JdGJsX2ZzY2MJIyAxMAoJc2hvcnQJCWZzY2NfdWdlCS0JdGJsX2ZzY2MJIyAxMQoJc2hvcnQJCWZzY2NfdWx0CS0JdGJsX2ZzY2MJIyAxMgoJc2hvcnQJCWZzY2NfdWxlCS0JdGJsX2ZzY2MJIyAxMwoJc2hvcnQJCWZzY2NfbmVxCS0JdGJsX2ZzY2MJIyAxNAoJc2hvcnQJCWZzY2NfdAkJLQl0YmxfZnNjYwkjIDE1CglzaG9ydAkJZnNjY19zZgkJLQl0YmxfZnNjYwkjIDE2CglzaG9ydAkJZnNjY19zZXEJLQl0YmxfZnNjYwkjIDE3CglzaG9ydAkJZnNjY19ndAkJLQl0YmxfZnNjYwkjIDE4CglzaG9ydAkJZnNjY19nZQkJLQl0YmxfZnNjYwkjIDE5CglzaG9ydAkJZnNjY19sdAkJLQl0YmxfZnNjYwkjIDIwCglzaG9ydAkJZnNjY19sZQkJLQl0YmxfZnNjYwkjIDIxCglzaG9ydAkJZnNjY19nbAkJLQl0YmxfZnNjYwkjIDIyCglzaG9ydAkJZnNjY19nbGUJLQl0YmxfZnNjYwkjIDIzCglzaG9ydAkJZnNjY19uZ2xlCS0JdGJsX2ZzY2MJIyAyNAoJc2hvcnQJCWZzY2NfbmdsCS0JdGJsX2ZzY2MJIyAyNQoJc2hvcnQJCWZzY2NfbmxlCS0JdGJsX2ZzY2MJIyAyNgoJc2hvcnQJCWZzY2Nfbmx0CS0JdGJsX2ZzY2MJIyAyNwoJc2hvcnQJCWZzY2NfbmdlCS0JdGJsX2ZzY2MJIyAyOAoJc2hvcnQJCWZzY2Nfbmd0CS0JdGJsX2ZzY2MJIyAyOQoJc2hvcnQJCWZzY2Nfc25lcQktCXRibF9mc2NjCSMgMzAKCXNob3J0CQlmc2NjX3N0CQktCXRibF9mc2NjCSMgMzEKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIwkJCQkJCQkJCSMKIyBJRUVFIE5vbmF3YXJlIHRlc3RzCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyBGb3IgdGhlIElFRUUgbm9uYXdhcmUgdGVzdHMsIHdlIHNldCB0aGUgcmVzdWx0IGJhc2VkIG9uIHRoZQkJIwojIGZsb2F0aW5nIHBvaW50IGNvbmRpdGlvbiBjb2Rlcy4gSW4gYWRkaXRpb24sIHdlIGNoZWNrIHRvIHNlZQkJIwojIGlmIHRoZSBOQU4gYml0IGlzIHNldCwgaW4gd2hpY2ggY2FzZSBCU1VOIGFuZCBBSU9QIHdpbGwgYmUgc2V0LgkjCiMJCQkJCQkJCQkjCiMgVGhlIGNhc2VzIEVRIGFuZCBORSBhcmUgc2hhcmVkIGJ5IHRoZSBBd2FyZSBhbmQgTm9uYXdhcmUgZ3JvdXBzCSMKIyBhbmQgYXJlIGluY2FwYWJsZSBvZiBzZXR0aW5nIHRoZSBCU1VOIGV4Y2VwdGlvbiBiaXQuCQkJIwojCQkJCQkJCQkJIwojIFR5cGljYWxseSwgb25seSBvbmUgb2YgdGhlIHR3byBwb3NzaWJsZSBicmFuY2ggZGlyZWN0aW9ucyBjb3VsZAkjCiMgaGF2ZSB0aGUgTkFOIGJpdCBzZXQuCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIwojIGVxdWFsOgojCiMJWgojCmZzY2NfZXE6CglmYmVxLncJCWZzY2NfZXFfeWVzCQkjIGVxdWFsPwpmc2NjX2VxX25vOgoJY2xyLmIJCSVkMAkJCSMgc2V0IGZhbHNlCglicmEudwkJZnNjY19kb25lCQkjIGdvIGZpbmlzaApmc2NjX2VxX3llczoKCXN0CQklZDAJCQkjIHNldCB0cnVlCglicmEudwkJZnNjY19kb25lCQkjIGdvIGZpbmlzaAoKIwojIG5vdCBlcXVhbDoKIwlfCiMJWgojCmZzY2NfbmVxOgoJZmJuZXEudwkJZnNjY19uZXFfeWVzCQkjIG5vdCBlcXVhbD8KZnNjY19uZXFfbm86CgljbHIuYgkJJWQwCQkJIyBzZXQgZmFsc2UKCWJyYS53CQlmc2NjX2RvbmUJCSMgZ28gZmluaXNoCmZzY2NfbmVxX3llczoKCXN0CQklZDAJCQkjIHNldCB0cnVlCglicmEudwkJZnNjY19kb25lCQkjIGdvIGZpbmlzaAoKIwojIGdyZWF0ZXIgdGhhbjoKIwlfX19fX19fCiMJTkFOdlp2TgojCmZzY2NfZ3Q6CglmYmd0LncJCWZzY2NfZ3RfeWVzCQkjIGdyZWF0ZXIgdGhhbj8KZnNjY19ndF9ubzoKCWNsci5iCQklZDAJCQkjIHNldCBmYWxzZQoJYnRzdAkJJm5hbl9iaXQsIEZQU1JfQ0MoJWE2KQkjIGlzIE5BTiBzZXQgaW4gY2M/CgliZXEudwkJZnNjY19kb25lCQkjIG5vO2dvIGZpbmlzaAoJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKCWJyYS53CQlmc2NjX2Noa19ic3VuCQkjIGdvIGZpbmlzaApmc2NjX2d0X3llczoKCXN0CQklZDAJCQkjIHNldCB0cnVlCglicmEudwkJZnNjY19kb25lCQkjIGdvIGZpbmlzaAoKIwojIG5vdCBncmVhdGVyIHRoYW46CiMKIwlOQU52WnZOCiMKZnNjY19uZ3Q6CglmYm5ndC53CQlmc2NjX25ndF95ZXMJCSMgbm90IGdyZWF0ZXIgdGhhbj8KZnNjY19uZ3Rfbm86CgljbHIuYgkJJWQwCQkJIyBzZXQgZmFsc2UKCWJyYS53CQlmc2NjX2RvbmUJCSMgZ28gZmluaXNoCmZzY2Nfbmd0X3llczoKCXN0CQklZDAJCQkjIHNldCB0cnVlCglidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgaXMgTkFOIHNldCBpbiBjYz8KCWJlcS53CQlmc2NjX2RvbmUJCSMgbm87Z28gZmluaXNoCglvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAoJYnJhLncJCWZzY2NfY2hrX2JzdW4JCSMgZ28gZmluaXNoCgojCiMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsOgojCSAgIF9fX19fCiMJWnYoTkFOdk4pCiMKZnNjY19nZToKCWZiZ2UudwkJZnNjY19nZV95ZXMJCSMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsPwpmc2NjX2dlX25vOgoJY2xyLmIJCSVkMAkJCSMgc2V0IGZhbHNlCglidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgaXMgTkFOIHNldCBpbiBjYz8KCWJlcS53CQlmc2NjX2RvbmUJCSMgbm87Z28gZmluaXNoCglvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAoJYnJhLncJCWZzY2NfY2hrX2JzdW4JCSMgZ28gZmluaXNoCmZzY2NfZ2VfeWVzOgoJc3QJCSVkMAkJCSMgc2V0IHRydWUKCWJ0c3QJCSZuYW5fYml0LCBGUFNSX0NDKCVhNikJIyBpcyBOQU4gc2V0IGluIGNjPwoJYmVxLncJCWZzY2NfZG9uZQkJIyBubztnbyBmaW5pc2gKCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CglicmEudwkJZnNjY19jaGtfYnN1bgkJIyBnbyBmaW5pc2gKCiMKIyBub3QgKGdyZWF0ZXIgdGhhbiBvciBlcXVhbCk6CiMJICAgICAgIF8KIwlOQU52KE5eWikKIwpmc2NjX25nZToKCWZibmdlLncJCWZzY2NfbmdlX3llcwkJIyBub3QgKGdyZWF0ZXIgdGhhbiBvciBlcXVhbCk/CmZzY2NfbmdlX25vOgoJY2xyLmIJCSVkMAkJCSMgc2V0IGZhbHNlCglicmEudwkJZnNjY19kb25lCQkjIGdvIGZpbmlzaApmc2NjX25nZV95ZXM6CglzdAkJJWQwCQkJIyBzZXQgdHJ1ZQoJYnRzdAkJJm5hbl9iaXQsIEZQU1JfQ0MoJWE2KQkjIGlzIE5BTiBzZXQgaW4gY2M/CgliZXEudwkJZnNjY19kb25lCQkjIG5vO2dvIGZpbmlzaAoJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKCWJyYS53CQlmc2NjX2Noa19ic3VuCQkjIGdvIGZpbmlzaAoKIwojIGxlc3MgdGhhbjoKIwkgICBfX19fXwojCU5eKE5BTnZaKQojCmZzY2NfbHQ6CglmYmx0LncJCWZzY2NfbHRfeWVzCQkjIGxlc3MgdGhhbj8KZnNjY19sdF9ubzoKCWNsci5iCQklZDAJCQkjIHNldCBmYWxzZQoJYnRzdAkJJm5hbl9iaXQsIEZQU1JfQ0MoJWE2KQkjIGlzIE5BTiBzZXQgaW4gY2M/CgliZXEudwkJZnNjY19kb25lCQkjIG5vO2dvIGZpbmlzaAoJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKCWJyYS53CQlmc2NjX2Noa19ic3VuCQkjIGdvIGZpbmlzaApmc2NjX2x0X3llczoKCXN0CQklZDAJCQkjIHNldCB0cnVlCglicmEudwkJZnNjY19kb25lCQkjIGdvIGZpbmlzaAoKIwojIG5vdCBsZXNzIHRoYW46CiMJICAgICAgIF8KIwlOQU52KFp2TikKIwpmc2NjX25sdDoKCWZibmx0LncJCWZzY2Nfbmx0X3llcwkJIyBub3QgbGVzcyB0aGFuPwpmc2NjX25sdF9ubzoKCWNsci5iCQklZDAJCQkjIHNldCBmYWxzZQoJYnJhLncJCWZzY2NfZG9uZQkJIyBnbyBmaW5pc2gKZnNjY19ubHRfeWVzOgoJc3QJCSVkMAkJCSMgc2V0IHRydWUKCWJ0c3QJCSZuYW5fYml0LCBGUFNSX0NDKCVhNikJIyBpcyBOQU4gc2V0IGluIGNjPwoJYmVxLncJCWZzY2NfZG9uZQkJIyBubztnbyBmaW5pc2gKCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CglicmEudwkJZnNjY19jaGtfYnN1bgkJIyBnbyBmaW5pc2gKCiMKIyBsZXNzIHRoYW4gb3IgZXF1YWw6CiMJICAgICBfX18KIwladihOXk5BTikKIwpmc2NjX2xlOgoJZmJsZS53CQlmc2NjX2xlX3llcwkJIyBsZXNzIHRoYW4gb3IgZXF1YWw/CmZzY2NfbGVfbm86CgljbHIuYgkJJWQwCQkJIyBzZXQgZmFsc2UKCWJ0c3QJCSZuYW5fYml0LCBGUFNSX0NDKCVhNikJIyBpcyBOQU4gc2V0IGluIGNjPwoJYmVxLncJCWZzY2NfZG9uZQkJIyBubztnbyBmaW5pc2gKCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CglicmEudwkJZnNjY19jaGtfYnN1bgkJIyBnbyBmaW5pc2gKZnNjY19sZV95ZXM6CglzdAkJJWQwCQkJIyBzZXQgdHJ1ZQoJYnRzdAkJJm5hbl9iaXQsIEZQU1JfQ0MoJWE2KQkjIGlzIE5BTiBzZXQgaW4gY2M/CgliZXEudwkJZnNjY19kb25lCQkjIG5vO2dvIGZpbmlzaAoJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKCWJyYS53CQlmc2NjX2Noa19ic3VuCQkjIGdvIGZpbmlzaAoKIwojIG5vdCAobGVzcyB0aGFuIG9yIGVxdWFsKToKIwkgICAgIF9fXwojCU5BTnYoTnZaKQojCmZzY2NfbmxlOgoJZmJubGUudwkJZnNjY19ubGVfeWVzCQkjIG5vdCAobGVzcyB0aGFuIG9yIGVxdWFsKT8KZnNjY19ubGVfbm86CgljbHIuYgkJJWQwCQkJIyBzZXQgZmFsc2UKCWJyYS53CQlmc2NjX2RvbmUJCSMgZ28gZmluaXNoCmZzY2NfbmxlX3llczoKCXN0CQklZDAJCQkjIHNldCB0cnVlCglidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgaXMgTkFOIHNldCBpbiBjYz8KCWJlcS53CQlmc2NjX2RvbmUJCSMgbm87Z28gZmluaXNoCglvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAoJYnJhLncJCWZzY2NfY2hrX2JzdW4JCSMgZ28gZmluaXNoCgojCiMgZ3JlYXRlciBvciBsZXNzIHRoYW46CiMJX19fX18KIwlOQU52WgojCmZzY2NfZ2w6CglmYmdsLncJCWZzY2NfZ2xfeWVzCQkjIGdyZWF0ZXIgb3IgbGVzcyB0aGFuPwpmc2NjX2dsX25vOgoJY2xyLmIJCSVkMAkJCSMgc2V0IGZhbHNlCglidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgaXMgTkFOIHNldCBpbiBjYz8KCWJlcS53CQlmc2NjX2RvbmUJCSMgbm87Z28gZmluaXNoCglvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAoJYnJhLncJCWZzY2NfY2hrX2JzdW4JCSMgZ28gZmluaXNoCmZzY2NfZ2xfeWVzOgoJc3QJCSVkMAkJCSMgc2V0IHRydWUKCWJyYS53CQlmc2NjX2RvbmUJCSMgZ28gZmluaXNoCgojCiMgbm90IChncmVhdGVyIG9yIGxlc3MgdGhhbik6CiMKIwlOQU52WgojCmZzY2NfbmdsOgoJZmJuZ2wudwkJZnNjY19uZ2xfeWVzCQkjIG5vdCAoZ3JlYXRlciBvciBsZXNzIHRoYW4pPwpmc2NjX25nbF9ubzoKCWNsci5iCQklZDAJCQkjIHNldCBmYWxzZQoJYnJhLncJCWZzY2NfZG9uZQkJIyBnbyBmaW5pc2gKZnNjY19uZ2xfeWVzOgoJc3QJCSVkMAkJCSMgc2V0IHRydWUKCWJ0c3QJCSZuYW5fYml0LCBGUFNSX0NDKCVhNikJIyBpcyBOQU4gc2V0IGluIGNjPwoJYmVxLncJCWZzY2NfZG9uZQkJIyBubztnbyBmaW5pc2gKCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CglicmEudwkJZnNjY19jaGtfYnN1bgkJIyBnbyBmaW5pc2gKCiMKIyBncmVhdGVyLCBsZXNzLCBvciBlcXVhbDoKIwlfX18KIwlOQU4KIwpmc2NjX2dsZToKCWZiZ2xlLncJCWZzY2NfZ2xlX3llcwkJIyBncmVhdGVyLCBsZXNzLCBvciBlcXVhbD8KZnNjY19nbGVfbm86CgljbHIuYgkJJWQwCQkJIyBzZXQgZmFsc2UKCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CglicmEudwkJZnNjY19jaGtfYnN1bgkJIyBnbyBmaW5pc2gKZnNjY19nbGVfeWVzOgoJc3QJCSVkMAkJCSMgc2V0IHRydWUKCWJyYS53CQlmc2NjX2RvbmUJCSMgZ28gZmluaXNoCgojCiMgbm90IChncmVhdGVyLCBsZXNzLCBvciBlcXVhbCk6CiMKIwlOQU4KIwpmc2NjX25nbGU6CglmYm5nbGUudwkJZnNjY19uZ2xlX3llcwkjIG5vdCAoZ3JlYXRlciwgbGVzcywgb3IgZXF1YWwpPwpmc2NjX25nbGVfbm86CgljbHIuYgkJJWQwCQkJIyBzZXQgZmFsc2UKCWJyYS53CQlmc2NjX2RvbmUJCSMgZ28gZmluaXNoCmZzY2NfbmdsZV95ZXM6CglzdAkJJWQwCQkJIyBzZXQgdHJ1ZQoJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKCWJyYS53CQlmc2NjX2Noa19ic3VuCQkjIGdvIGZpbmlzaAoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojCQkJCQkJCQkJIwojIE1pc2NlbGxhbmVvdXMgdGVzdHMJCQkJCQkJIwojCQkJCQkJCQkJIwojIEZvciB0aGUgSUVFRSBhd2FyZSB0ZXN0cywgd2Ugb25seSBoYXZlIHRvIHNldCB0aGUgcmVzdWx0IGJhc2VkIG9uIHRoZQkjCiMgZmxvYXRpbmcgcG9pbnQgY29uZGl0aW9uIGNvZGVzLiBUaGUgQlNVTiBleGNlcHRpb24gd2lsbCBub3QgYmUJIwojIHNldCBmb3IgYW55IG9mIHRoZXNlIHRlc3RzLgkJCQkJCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIwojIGZhbHNlOgojCiMJRmFsc2UKIwpmc2NjX2Y6CgljbHIuYgkJJWQwCQkJIyBzZXQgZmFsc2UKCWJyYS53CQlmc2NjX2RvbmUJCSMgZ28gZmluaXNoCgojCiMgdHJ1ZToKIwojCVRydWUKIwpmc2NjX3Q6CglzdAkJJWQwCQkJIyBzZXQgdHJ1ZQoJYnJhLncJCWZzY2NfZG9uZQkJIyBnbyBmaW5pc2gKCiMKIyBzaWduYWxsaW5nIGZhbHNlOgojCiMJRmFsc2UKIwpmc2NjX3NmOgoJY2xyLmIJCSVkMAkJCSMgc2V0IGZhbHNlCglidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgc2V0IEJTVU4gZXhjIGJpdAoJYmVxLncJCWZzY2NfZG9uZQkJIyBubztnbyBmaW5pc2gKCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CglicmEudwkJZnNjY19jaGtfYnN1bgkJIyBnbyBmaW5pc2gKCiMKIyBzaWduYWxsaW5nIHRydWU6CiMKIwlUcnVlCiMKZnNjY19zdDoKCXN0CQklZDAJCQkjIHNldCBmYWxzZQoJYnRzdAkJJm5hbl9iaXQsIEZQU1JfQ0MoJWE2KQkjIHNldCBCU1VOIGV4YyBiaXQKCWJlcS53CQlmc2NjX2RvbmUJCSMgbm87Z28gZmluaXNoCglvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAoJYnJhLncJCWZzY2NfY2hrX2JzdW4JCSMgZ28gZmluaXNoCgojCiMgc2lnbmFsbGluZyBlcXVhbDoKIwojCVoKIwpmc2NjX3NlcToKCWZic2VxLncJCWZzY2Nfc2VxX3llcwkJIyBzaWduYWxsaW5nIGVxdWFsPwpmc2NjX3NlcV9ubzoKCWNsci5iCQklZDAJCQkjIHNldCBmYWxzZQoJYnRzdAkJJm5hbl9iaXQsIEZQU1JfQ0MoJWE2KQkjIHNldCBCU1VOIGV4YyBiaXQKCWJlcS53CQlmc2NjX2RvbmUJCSMgbm87Z28gZmluaXNoCglvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAoJYnJhLncJCWZzY2NfY2hrX2JzdW4JCSMgZ28gZmluaXNoCmZzY2Nfc2VxX3llczoKCXN0CQklZDAJCQkjIHNldCB0cnVlCglidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgc2V0IEJTVU4gZXhjIGJpdAoJYmVxLncJCWZzY2NfZG9uZQkJIyBubztnbyBmaW5pc2gKCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CglicmEudwkJZnNjY19jaGtfYnN1bgkJIyBnbyBmaW5pc2gKCiMKIyBzaWduYWxsaW5nIG5vdCBlcXVhbDoKIwlfCiMJWgojCmZzY2Nfc25lcToKCWZic25lcS53CWZzY2Nfc25lcV95ZXMJCSMgc2lnbmFsbGluZyBlcXVhbD8KZnNjY19zbmVxX25vOgoJY2xyLmIJCSVkMAkJCSMgc2V0IGZhbHNlCglidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgc2V0IEJTVU4gZXhjIGJpdAoJYmVxLncJCWZzY2NfZG9uZQkJIyBubztnbyBmaW5pc2gKCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CglicmEudwkJZnNjY19jaGtfYnN1bgkJIyBnbyBmaW5pc2gKZnNjY19zbmVxX3llczoKCXN0CQklZDAJCQkjIHNldCB0cnVlCglidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgc2V0IEJTVU4gZXhjIGJpdAoJYmVxLncJCWZzY2NfZG9uZQkJIyBubztnbyBmaW5pc2gKCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CglicmEudwkJZnNjY19jaGtfYnN1bgkJIyBnbyBmaW5pc2gKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIwkJCQkJCQkJCSMKIyBJRUVFIEF3YXJlIHRlc3RzCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyBGb3IgdGhlIElFRUUgYXdhcmUgdGVzdHMsIHdlIG9ubHkgaGF2ZSB0byBzZXQgdGhlIHJlc3VsdCBiYXNlZCBvbiB0aGUJIwojIGZsb2F0aW5nIHBvaW50IGNvbmRpdGlvbiBjb2Rlcy4gVGhlIEJTVU4gZXhjZXB0aW9uIHdpbGwgbm90IGJlCSMKIyBzZXQgZm9yIGFueSBvZiB0aGVzZSB0ZXN0cy4JCQkJCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMKIyBvcmRlcmVkIGdyZWF0ZXIgdGhhbjoKIwlfX19fX19fCiMJTkFOdlp2TgojCmZzY2Nfb2d0OgoJZmJvZ3QudwkJZnNjY19vZ3RfeWVzCQkjIG9yZGVyZWQgZ3JlYXRlciB0aGFuPwpmc2NjX29ndF9ubzoKCWNsci5iCQklZDAJCQkjIHNldCBmYWxzZQoJYnJhLncJCWZzY2NfZG9uZQkJIyBnbyBmaW5pc2gKZnNjY19vZ3RfeWVzOgoJc3QJCSVkMAkJCSMgc2V0IHRydWUKCWJyYS53CQlmc2NjX2RvbmUJCSMgZ28gZmluaXNoCgojCiMgdW5vcmRlcmVkIG9yIGxlc3Mgb3IgZXF1YWw6CiMJX19fX19fXwojCU5BTnZadk4KIwpmc2NjX3VsZToKCWZidWxlLncJCWZzY2NfdWxlX3llcwkJIyB1bm9yZGVyZWQgb3IgbGVzcyBvciBlcXVhbD8KZnNjY191bGVfbm86CgljbHIuYgkJJWQwCQkJIyBzZXQgZmFsc2UKCWJyYS53CQlmc2NjX2RvbmUJCSMgZ28gZmluaXNoCmZzY2NfdWxlX3llczoKCXN0CQklZDAJCQkjIHNldCB0cnVlCglicmEudwkJZnNjY19kb25lCQkjIGdvIGZpbmlzaAoKIwojIG9yZGVyZWQgZ3JlYXRlciB0aGFuIG9yIGVxdWFsOgojCSAgIF9fX19fCiMJWnYoTkFOdk4pCiMKZnNjY19vZ2U6CglmYm9nZS53CQlmc2NjX29nZV95ZXMJCSMgb3JkZXJlZCBncmVhdGVyIHRoYW4gb3IgZXF1YWw/CmZzY2Nfb2dlX25vOgoJY2xyLmIJCSVkMAkJCSMgc2V0IGZhbHNlCglicmEudwkJZnNjY19kb25lCQkjIGdvIGZpbmlzaApmc2NjX29nZV95ZXM6CglzdAkJJWQwCQkJIyBzZXQgdHJ1ZQoJYnJhLncJCWZzY2NfZG9uZQkJIyBnbyBmaW5pc2gKCiMKIyB1bm9yZGVyZWQgb3IgbGVzcyB0aGFuOgojCSAgICAgICBfCiMJTkFOdihOXlopCiMKZnNjY191bHQ6CglmYnVsdC53CQlmc2NjX3VsdF95ZXMJCSMgdW5vcmRlcmVkIG9yIGxlc3MgdGhhbj8KZnNjY191bHRfbm86CgljbHIuYgkJJWQwCQkJIyBzZXQgZmFsc2UKCWJyYS53CQlmc2NjX2RvbmUJCSMgZ28gZmluaXNoCmZzY2NfdWx0X3llczoKCXN0CQklZDAJCQkjIHNldCB0cnVlCglicmEudwkJZnNjY19kb25lCQkjIGdvIGZpbmlzaAoKIwojIG9yZGVyZWQgbGVzcyB0aGFuOgojCSAgIF9fX19fCiMJTl4oTkFOdlopCiMKZnNjY19vbHQ6CglmYm9sdC53CQlmc2NjX29sdF95ZXMJCSMgb3JkZXJlZCBsZXNzIHRoYW4/CmZzY2Nfb2x0X25vOgoJY2xyLmIJCSVkMAkJCSMgc2V0IGZhbHNlCglicmEudwkJZnNjY19kb25lCQkjIGdvIGZpbmlzaApmc2NjX29sdF95ZXM6CglzdAkJJWQwCQkJIyBzZXQgdHJ1ZQoJYnJhLncJCWZzY2NfZG9uZQkJIyBnbyBmaW5pc2gKCiMKIyB1bm9yZGVyZWQgb3IgZ3JlYXRlciBvciBlcXVhbDoKIwojCU5BTnZadk4KIwpmc2NjX3VnZToKCWZidWdlLncJCWZzY2NfdWdlX3llcwkJIyB1bm9yZGVyZWQgb3IgZ3JlYXRlciB0aGFuPwpmc2NjX3VnZV9ubzoKCWNsci5iCQklZDAJCQkjIHNldCBmYWxzZQoJYnJhLncJCWZzY2NfZG9uZQkJIyBnbyBmaW5pc2gKZnNjY191Z2VfeWVzOgoJc3QJCSVkMAkJCSMgc2V0IHRydWUKCWJyYS53CQlmc2NjX2RvbmUJCSMgZ28gZmluaXNoCgojCiMgb3JkZXJlZCBsZXNzIHRoYW4gb3IgZXF1YWw6CiMJICAgICBfX18KIwladihOXk5BTikKIwpmc2NjX29sZToKCWZib2xlLncJCWZzY2Nfb2xlX3llcwkJIyBvcmRlcmVkIGdyZWF0ZXIgb3IgbGVzcyB0aGFuPwpmc2NjX29sZV9ubzoKCWNsci5iCQklZDAJCQkjIHNldCBmYWxzZQoJYnJhLncJCWZzY2NfZG9uZQkJIyBnbyBmaW5pc2gKZnNjY19vbGVfeWVzOgoJc3QJCSVkMAkJCSMgc2V0IHRydWUKCWJyYS53CQlmc2NjX2RvbmUJCSMgZ28gZmluaXNoCgojCiMgdW5vcmRlcmVkIG9yIGdyZWF0ZXIgdGhhbjoKIwkgICAgIF9fXwojCU5BTnYoTnZaKQojCmZzY2NfdWd0OgoJZmJ1Z3QudwkJZnNjY191Z3RfeWVzCQkjIHVub3JkZXJlZCBvciBncmVhdGVyIHRoYW4/CmZzY2NfdWd0X25vOgoJY2xyLmIJCSVkMAkJCSMgc2V0IGZhbHNlCglicmEudwkJZnNjY19kb25lCQkjIGdvIGZpbmlzaApmc2NjX3VndF95ZXM6CglzdAkJJWQwCQkJIyBzZXQgdHJ1ZQoJYnJhLncJCWZzY2NfZG9uZQkJIyBnbyBmaW5pc2gKCiMKIyBvcmRlcmVkIGdyZWF0ZXIgb3IgbGVzcyB0aGFuOgojCV9fX19fCiMJTkFOdloKIwpmc2NjX29nbDoKCWZib2dsLncJCWZzY2Nfb2dsX3llcwkJIyBvcmRlcmVkIGdyZWF0ZXIgb3IgbGVzcyB0aGFuPwpmc2NjX29nbF9ubzoKCWNsci5iCQklZDAJCQkjIHNldCBmYWxzZQoJYnJhLncJCWZzY2NfZG9uZQkJIyBnbyBmaW5pc2gKZnNjY19vZ2xfeWVzOgoJc3QJCSVkMAkJCSMgc2V0IHRydWUKCWJyYS53CQlmc2NjX2RvbmUJCSMgZ28gZmluaXNoCgojCiMgdW5vcmRlcmVkIG9yIGVxdWFsOgojCiMJTkFOdloKIwpmc2NjX3VlcToKCWZidWVxLncJCWZzY2NfdWVxX3llcwkJIyB1bm9yZGVyZWQgb3IgZXF1YWw/CmZzY2NfdWVxX25vOgoJY2xyLmIJCSVkMAkJCSMgc2V0IGZhbHNlCglicmEudwkJZnNjY19kb25lCQkjIGdvIGZpbmlzaApmc2NjX3VlcV95ZXM6CglzdAkJJWQwCQkJIyBzZXQgdHJ1ZQoJYnJhLncJCWZzY2NfZG9uZQkJIyBnbyBmaW5pc2gKCiMKIyBvcmRlcmVkOgojCV9fXwojCU5BTgojCmZzY2Nfb3I6CglmYm9yLncJCWZzY2Nfb3JfeWVzCQkjIG9yZGVyZWQ/CmZzY2Nfb3Jfbm86CgljbHIuYgkJJWQwCQkJIyBzZXQgZmFsc2UKCWJyYS53CQlmc2NjX2RvbmUJCSMgZ28gZmluaXNoCmZzY2Nfb3JfeWVzOgoJc3QJCSVkMAkJCSMgc2V0IHRydWUKCWJyYS53CQlmc2NjX2RvbmUJCSMgZ28gZmluaXNoCgojCiMgdW5vcmRlcmVkOgojCiMJTkFOCiMKZnNjY191bjoKCWZidW4udwkJZnNjY191bl95ZXMJCSMgdW5vcmRlcmVkPwpmc2NjX3VuX25vOgoJY2xyLmIJCSVkMAkJCSMgc2V0IGZhbHNlCglicmEudwkJZnNjY19kb25lCQkjIGdvIGZpbmlzaApmc2NjX3VuX3llczoKCXN0CQklZDAJCQkjIHNldCB0cnVlCglicmEudwkJZnNjY19kb25lCQkjIGdvIGZpbmlzaAoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMKIyB0aGUgYnN1biBleGNlcHRpb24gYml0IHdhcyBzZXQuIG5vdywgY2hlY2sgdG8gc2VlIGlzIEJTVU4KIyBpcyBlbmFibGVkLiBpZiBzbywgZG9uJ3Qgc3RvcmUgcmVzdWx0IGFuZCBjb3JyZWN0IHN0YWNrIGZyYW1lCiMgZm9yIGEgYnN1biBleGNlcHRpb24uCiMKZnNjY19jaGtfYnN1bjoKCWJ0c3QJCSZic3VuX2JpdCxGUENSX0VOQUJMRSglYTYpICMgd2FzIEJTVU4gc2V0PwoJYm5lLncJCWZzY2NfYnN1bgoKIwojIHRoZSBic3VuIGV4Y2VwdGlvbiBiaXQgd2FzIG5vdCBzZXQuCiMgdGhlIHJlc3VsdCBoYXMgYmVlbiBzZWxlY3RlZC4KIyBub3csIGNoZWNrIHRvIHNlZSBpZiB0aGUgcmVzdWx0IGlzIHRvIGJlIHN0b3JlZCBpbiB0aGUgZGF0YSByZWdpc3RlcgojIGZpbGUgb3IgaW4gbWVtb3J5LgojCmZzY2NfZG9uZToKCW1vdi5sCQklZDAsJWEwCQkJIyBzYXZlIHJlc3VsdCBmb3IgYSBtb21lbnQKCgltb3YuYgkJMStFWENfT1BXT1JEKCVhNiksJWQxCSMgZmV0Y2ggbG8gb3B3b3JkCgltb3YubAkJJWQxLCVkMAkJCSMgbWFrZSBhIGNvcHkKCWFuZGkuYgkJJjB4MzgsJWQxCQkjIGV4dHJhY3Qgc3JjIG1vZGUKCglibmUuYgkJZnNjY19tZW1fb3AJCSMgaXQncyBhIG1lbW9yeSBvcGVyYXRpb24KCgltb3YubAkJJWQwLCVkMQoJYW5kaS53CQkmMHg3LCVkMQkJIyBwYXNzIGluZGV4IGluIGQxCgltb3YubAkJJWEwLCVkMAkJCSMgcGFzcyByZXN1bHQgaW4gZDAKCWJzci5sCQlzdG9yZV9kcmVnX2IJCSMgc2F2ZSByZXN1bHQgaW4gcmVnZmlsZQoJcnRzCgojCiMgdGhlIHN0YWNrZWQgPGVhPiBpcyBjb3JyZWN0IHdpdGggdGhlIGV4Y2VwdGlvbiBvZjoKIwktPiBEbiA6IDxlYT4gaXMgZ2FyYmFnZQojCiMgaWYgdGhlIGFkZHJlc3NpbmcgbW9kZSBpcyBwb3N0LWluY3JlbWVudCBvciBwcmUtZGVjcmVtZW50LAojIHRoZW4gdGhlIGFkZHJlc3MgcmVnaXN0ZXJzIGhhdmUgbm90IGJlZW4gdXBkYXRlZC4KIwpmc2NjX21lbV9vcDoKCWNtcGkuYgkJJWQxLCYweDE4CQkjIGlzIDxlYT4gKEFuKSsgPwoJYmVxLmIJCWZzY2NfbWVtX2luYwkJIyB5ZXMKCWNtcGkuYgkJJWQxLCYweDIwCQkjIGlzIDxlYT4gLShBbikgPwoJYmVxLmIJCWZzY2NfbWVtX2RlYwkJIyB5ZXMKCgltb3YubAkJJWEwLCVkMAkJCSMgcGFzcyByZXN1bHQgaW4gZDAKCW1vdi5sCQlFWENfRUEoJWE2KSwlYTAJCSMgZmV0Y2ggPGVhPgoJYnNyLmwJCV9kbWVtX3dyaXRlX2J5dGUJIyB3cml0ZSByZXN1bHQgYnl0ZQoKCXRzdC5sCQklZDEJCQkjIGRpZCBkc3RvcmUgZmFpbD8KCWJuZS53CQlmc2NjX2VycgkJIyB5ZXMKCglydHMKCiMgYWRkcmVzaW5nIG1vZGUgaXMgcG9zdC1pbmNyZW1lbnQuIHdyaXRlIHRoZSByZXN1bHQgYnl0ZS4gaWYgdGhlIHdyaXRlCiMgZmFpbHMgdGhlbiBkb24ndCB1cGRhdGUgdGhlIGFkZHJlc3MgcmVnaXN0ZXIuIGlmIHdyaXRlIHBhc3NlcyB0aGVuCiMgY2FsbCBpbmNfYXJlZygpIHRvIHVwZGF0ZSB0aGUgYWRkcmVzcyByZWdpc3Rlci4KZnNjY19tZW1faW5jOgoJbW92LmwJCSVhMCwlZDAJCQkjIHBhc3MgcmVzdWx0IGluIGQwCgltb3YubAkJRVhDX0VBKCVhNiksJWEwCQkjIGZldGNoIDxlYT4KCWJzci5sCQlfZG1lbV93cml0ZV9ieXRlCSMgd3JpdGUgcmVzdWx0IGJ5dGUKCgl0c3QubAkJJWQxCQkJIyBkaWQgZHN0b3JlIGZhaWw/CglibmUudwkJZnNjY19lcnIJCSMgeWVzCgoJbW92LmIJCTB4MStFWENfT1BXT1JEKCVhNiksJWQxCSMgZmV0Y2ggb3B3b3JkCglhbmRpLncJCSYweDcsJWQxCQkjIHBhc3MgaW5kZXggaW4gZDEKCW1vdnEubAkJJjB4MSwlZDAJCSMgcGFzcyBhbXQgdG8gaW5jIGJ5Cglic3IubAkJaW5jX2FyZWcJCSMgaW5jcmVtZW50IGFkZHJlc3MgcmVnaXN0ZXIKCglydHMKCiMgYWRkcmVzc2luZyBtb2RlIGlzIHByZS1kZWNyZW1lbnQuIHdyaXRlIHRoZSByZXN1bHQgYnl0ZS4gaWYgdGhlIHdyaXRlCiMgZmFpbHMgdGhlbiBkb24ndCB1cGRhdGUgdGhlIGFkZHJlc3MgcmVnaXN0ZXIuIGlmIHRoZSB3cml0ZSBwYXNzZXMgdGhlbgojIGNhbGwgZGVjX2FyZWcoKSB0byB1cGRhdGUgdGhlIGFkZHJlc3MgcmVnaXN0ZXIuCmZzY2NfbWVtX2RlYzoKCW1vdi5sCQklYTAsJWQwCQkJIyBwYXNzIHJlc3VsdCBpbiBkMAoJbW92LmwJCUVYQ19FQSglYTYpLCVhMAkJIyBmZXRjaCA8ZWE+Cglic3IubAkJX2RtZW1fd3JpdGVfYnl0ZQkjIHdyaXRlIHJlc3VsdCBieXRlCgoJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBmYWlsPwoJYm5lLncJCWZzY2NfZXJyCQkjIHllcwoKCW1vdi5iCQkweDErRVhDX09QV09SRCglYTYpLCVkMQkjIGZldGNoIG9wd29yZAoJYW5kaS53CQkmMHg3LCVkMQkJIyBwYXNzIGluZGV4IGluIGQxCgltb3ZxLmwJCSYweDEsJWQwCQkjIHBhc3MgYW10IHRvIGRlYyBieQoJYnNyLmwJCWRlY19hcmVnCQkjIGRlY3JlbWVudCBhZGRyZXNzIHJlZ2lzdGVyCgoJcnRzCgojIHRoZSBlbXVsYXRpb24gcm91dGluZSBzZXQgYnN1biBhbmQgQlNVTiB3YXMgZW5hYmxlZC4gaGF2ZSB0bwojIGZpeCBzdGFjayBhbmQganVtcCB0byB0aGUgYnN1biBoYW5kbGVyLgojIGxldCB0aGUgY2FsbGVyIG9mIHRoaXMgcm91dGluZSBzaGlmdCB0aGUgc3RhY2sgZnJhbWUgdXAgdG8KIyBlbGltaW5hdGUgdGhlIGVmZmVjdGl2ZSBhZGRyZXNzIGZpZWxkLgpmc2NjX2JzdW46Cgltb3YuYgkJJmZic3VuX2ZsZyxTUENPTkRfRkxHKCVhNikKCXJ0cwoKIyB0aGUgYnl0ZSB3cml0ZSB0byBtZW1vcnkgaGFzIGZhaWxlZC4gcGFzcyB0aGUgZmFpbGluZyBlZmZlY3RpdmUgYWRkcmVzcwojIGFuZCBhIEZTTFcgdG8gZnVuaW1wX2RhY2MoKS4KZnNjY19lcnI6Cgltb3YudwkJJjB4MDBhMSxFWENfVk9GRiglYTYpCglicmEubAkJZmFjY19maW5pc2gKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWZtb3ZtX2R5bmFtaWMoKTogZW11bGF0ZSAiZm1vdm0iIGR5bmFtaWMgaW5zdHJ1Y3Rpb24JCSMKIwkJCQkJCQkJCSMKIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWZldGNoX2RyZWcoKSAtIGZldGNoIGRhdGEgcmVnaXN0ZXIJCQkJIwojCXtpLGQsfW1lbV9yZWFkKCkgLSBmZXRjaCBkYXRhIGZyb20gbWVtb3J5CQkJIwojCV9tZW1fd3JpdGUoKSAtIHdyaXRlIGRhdGEgdG8gbWVtb3J5CQkJCSMKIwlpZWFfaWFjYygpIC0gaW5zdHJ1Y3Rpb24gbWVtb3J5IGFjY2VzcyBlcnJvciBvY2N1cnJlZAkJIwojCWllYV9kYWNjKCkgLSBkYXRhIG1lbW9yeSBhY2Nlc3MgZXJyb3Igb2NjdXJyZWQJCQkjCiMJcmVzdG9yZSgpIC0gcmVzdG9yZSBBbiBpbmRleCByZWdzIGlmIGFjY2VzcyBlcnJvciBvY2N1cnJlZAkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlOb25lCQkJCQkJCQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlJZiBpbnN0ciBpcyAiZm1vdm0gRG4sLShBNykiIGZyb20gc3VwZXJ2aXNvciBtb2RlLAkJIwojCQlkMCA9IHNpemUgb2YgZHVtcAkJCQkJIwojCQlkMSA9IERuCQkJCQkJCSMKIwlFbHNlIGlmIGluc3RydWN0aW9uIGFjY2VzcyBlcnJvciwJCQkJIwojCQlkMCA9IEZTTFcJCQkJCQkjCiMJRWxzZSBpZiBkYXRhIGFjY2VzcyBlcnJvciwJCQkJCSMKIwkJZDAgPSBGU0xXCQkJCQkJIwojCQlhMCA9IGFkZHJlc3Mgb2YgZmF1bHQJCQkJCSMKIwlFbHNlCQkJCQkJCQkjCiMJCW5vbmUuCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCVRoZSBlZmZlY3RpdmUgYWRkcmVzcyBtdXN0IGJlIGNhbGN1bGF0ZWQgc2luY2UgdGhpcyBpcyBlbnRlcmVkCSMKIyBmcm9tIGFuICJVbmltcGxlbWVudGVkIEVmZmVjdGl2ZSBBZGRyZXNzIiBleGNlcHRpb24gaGFuZGxlci4gU28sIHdlCSMKIyBoYXZlIG91ciBvd24gZmNhbGNfZWEoKSByb3V0aW5lIGhlcmUuIElmIGFuIGFjY2VzcyBlcnJvciBpcyBmbGFnZ2VkCSMKIyBieSBhIF97aSxkLH1tZW1fcmVhZCgpIGNhbGwsIHdlIG11c3QgZXhpdCB0aHJvdWdoIHRoZSBzcGVjaWFsCQkjCiMgaGFuZGxlci4JCQkJCQkJCSMKIwlUaGUgZGF0YSByZWdpc3RlciBpcyBkZXRlcm1pbmVkIGFuZCBpdHMgdmFsdWUgbG9hZGVkIHRvIGdldCB0aGUJIwojIHN0cmluZyBvZiBGUCByZWdpc3RlcnMgYWZmZWN0ZWQuIFRoaXMgdmFsdWUgaXMgdXNlZCBhcyBhbiBpbmRleCBpbnRvCSMKIyBhIGxvb2t1cCB0YWJsZSBzdWNoIHRoYXQgd2UgY2FuIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIGJ5dGVzCQkjCiMgaW52b2x2ZWQuCQkJCQkJCQkjCiMJSWYgdGhlIGluc3RydWN0aW9uIGlzICJmbW92bS54IDxlYT4sRG4iLCBhIF9tZW1fcmVhZCgpIGlzIHVzZWQJIwojIHRvIHJlYWQgaW4gYWxsIEZQIHZhbHVlcy4gQWdhaW4sIF9tZW1fcmVhZCgpIG1heSBmYWlsIGFuZCByZXF1aXJlIGEJIwojIHNwZWNpYWwgZXhpdC4JCQkJCQkJCSMKIwlJZiB0aGUgaW5zdHJ1Y3Rpb24gaXMgImZtb3ZtLnggRE4sPGVhPiIsIGEgX21lbV93cml0ZSgpIGlzIHVzZWQJIwojIHRvIHdyaXRlIGFsbCBGUCB2YWx1ZXMuIF9tZW1fd3JpdGUoKSBtYXkgYWxzbyBmYWlsLgkJCSMKIwlJZiB0aGUgaW5zdHJ1Y3Rpb24gaXMgImZtb3ZtLnggRE4sLShhNykiIGZyb20gc3VwZXJ2aXNvciBtb2RlLAkjCiMgdGhlbiB3ZSByZXR1cm4gdGhlIHNpemUgb2YgdGhlIGR1bXAgYW5kIHRoZSBzdHJpbmcgdG8gdGhlIGNhbGxlcgkjCiMgc28gdGhhdCB0aGUgbW92ZSBjYW4gb2NjdXIgb3V0c2lkZSBvZiB0aGlzIHJvdXRpbmUuIFRoaXMgc3BlY2lhbAkjCiMgY2FzZSBpcyByZXF1aXJlZCBzbyB0aGF0IG1vdmVzIHRvIHRoZSBzeXN0ZW0gc3RhY2sgYXJlIGhhbmRsZWQJIwojIGNvcnJlY3RseS4JCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyBEWU5BTUlDOgkJCQkJCQkJIwojCWZtb3ZtLngJZG4sIDxlYT4JCQkJCQkjCiMJZm1vdm0ueAk8ZWE+LCBkbgkJCQkJCSMKIwkJCQkJCQkJCSMKIwkgICAgICA8V09SRCAxPgkJICAgICAgPFdPUkQyPgkJCQkjCiMJMTExMSAwMDEwIDAwIHw8ZWE+fAkxMUAmIDEwMDAgMCQkJCAwMDAwCQkJIwojCQkJCQkJCQkJIwojCSYgPSAoMCk6IHByZWRlY3JlbWVudCBhZGRyZXNzaW5nIG1vZGUJCQkJIwojCSAgICAoMSk6IHBvc3RpbmNyZW1lbnQgb3IgY29udHJvbCBhZGRyZXNzaW5nIG1vZGUJCSMKIwlAID0gKDApOiBtb3ZlIGxpc3RlZCByZWdzIGZyb20gbWVtb3J5IHRvIHRoZSBGUFUJCSMKIwkgICAgKDEpOiBtb3ZlIGxpc3RlZCByZWdzIGZyb20gdGhlIEZQVSB0byBtZW1vcnkJCSMKIwkkJCQgICAgOiBpbmRleCBvZiBkYXRhIHJlZ2lzdGVyIGhvbGRpbmcgcmVnIHNlbGVjdCBtYXNrCQkjCiMJCQkJCQkJCQkjCiMgTk9URVM6CQkJCQkJCQkjCiMJSWYgdGhlIGRhdGEgcmVnaXN0ZXIgaG9sZHMgYSB6ZXJvLCB0aGVuIHRoZQkJCSMKIwlpbnN0cnVjdGlvbiBpcyBhIG5vcC4JCQkJCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCglnbG9iYWwJCWZtb3ZtX2R5bmFtaWMKZm1vdm1fZHluYW1pYzoKCiMgZXh0cmFjdCB0aGUgZGF0YSByZWdpc3RlciBpbiB3aGljaCB0aGUgYml0IHN0cmluZyByZXNpZGVzLi4uCgltb3YuYgkJMStFWENfRVhUV09SRCglYTYpLCVkMQkjIGZldGNoIGV4dHdvcmQKCWFuZGkudwkJJjB4NzAsJWQxCQkjIGV4dHJhY3QgcmVnIGJpdHMKCWxzci5iCQkmMHg0LCVkMQkJIyBzaGlmdCBpbnRvIGxvIGJpdHMKCiMgZmV0Y2ggdGhlIGJpdCBzdHJpbmcgaW50byBkMC4uLgoJYnNyLmwJCWZldGNoX2RyZWcJCSMgZmV0Y2ggcmVnIHN0cmluZwoKCWFuZGkubAkJJjB4MDAwMDAwZmYsJWQwCQkjIGtlZXAgb25seSBsbyBieXRlCgoJbW92LmwJCSVkMCwtKCVzcCkJCSMgc2F2ZSBzdHJnCgltb3YuYgkJKHRibF9mbW92bV9zaXplLncsJXBjLCVkMCksJWQwCgltb3YubAkJJWQwLC0oJXNwKQkJIyBzYXZlIHNpemUKCWJzci5sCQlmbW92bV9jYWxjX2VhCQkjIGNhbGN1bGF0ZSA8ZWE+Cgltb3YubAkJKCVzcCkrLCVkMAkJIyByZXN0b3JlIHNpemUKCW1vdi5sCQkoJXNwKSssJWQxCQkjIHJlc3RvcmUgc3RyZwoKIyBpZiB0aGUgYml0IHN0cmluZyBpcyBhIHplcm8sIHRoZW4gdGhlIG9wZXJhdGlvbiBpcyBhIG5vLW9wCiMgYnV0LCBtYWtlIHN1cmUgdGhhdCB3ZSd2ZSBjYWxjdWxhdGVkIGVhIGFuZCBhZHZhbmNlZCB0aGUgb3B3b3JkIHBvaW50ZXIKCWJlcS53CQlmbW92bV9kYXRhX2RvbmUKCiMgc2VwYXJhdGUgbW92ZSBpbnMgZnJvbSBtb3ZlIG91dHMuLi4KCWJ0c3QJCSYweDUsRVhDX0VYVFdPUkQoJWE2KQkjIGlzIGl0IGEgbW92ZSBpbiBvciBvdXQ/CgliZXEudwkJZm1vdm1fZGF0YV9pbgkJIyBpdCdzIGEgbW92ZSBvdXQKCiMjIyMjIyMjIyMjIyMKIyBNT1ZFIE9VVDogIwojIyMjIyMjIyMjIyMjCmZtb3ZtX2RhdGFfb3V0OgoJYnRzdAkJJjB4NCxFWENfRVhUV09SRCglYTYpCSMgY29udHJvbCBvciBwcmVkZWNyZW1lbnQ/CglibmUudwkJZm1vdm1fb3V0X2N0cmwJCSMgY29udHJvbAoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpmbW92bV9vdXRfcHJlZGVjOgojIGZvciBwcmVkZWNyZW1lbnQgbW9kZSwgdGhlIGJpdCBzdHJpbmcgaXMgdGhlIG9wcG9zaXRlIG9mIGJvdGggY29udHJvbAojIG9wZXJhdGlvbnMgYW5kIHBvc3RpbmNyZW1lbnQgbW9kZS4gKGJpdDcgPSBGUDcgLi4uIGJpdDAgPSBGUDApCiMgaGVyZSwgd2UgY29udmVydCBpdCB0byBiZSBqdXN0IGxpa2UgdGhlIG90aGVycy4uLgoJbW92LmIJCSh0YmxfZm1vdm1fY29udmVydC53LCVwYywlZDEudyoxKSwlZDEKCglidHN0CQkmMHg1LEVYQ19TUiglYTYpCSMgdXNlciBvciBzdXBlcnZpc29yIG1vZGU/CgliZXEuYgkJZm1vdm1fb3V0X2N0cmwJCSMgdXNlcgoKZm1vdm1fb3V0X3ByZWRlY19zOgoJY21waS5iCQlTUENPTkRfRkxHKCVhNiksJm1kYTdfZmxnICMgaXMgPGVhPiBtb2RlIC0oYTcpPwoJYm5lLmIJCWZtb3ZtX291dF9jdHJsCgojIHRoZSBvcGVyYXRpb24gd2FzIHVuZm9ydHVuYXRlbHkgYW46IGZtb3ZtLnggZG4sLShzcCkKIyBjYWxsZWQgZnJvbSBzdXBlcnZpc29yIG1vZGUuCiMgd2UncmUgYWxzbyBwYXNzaW5nICJzaXplIiBhbmQgInN0cmciIGJhY2sgdG8gdGhlIGNhbGxpbmcgcm91dGluZQoJcnRzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmZtb3ZtX291dF9jdHJsOgoJbW92LmwJCSVhMCwlYTEJCQkjIG1vdmUgPGVhPiB0byBhMQoKCXN1Yi5sCQklZDAsJXNwCQkJIyBzdWJ0cmFjdCBzaXplIG9mIGR1bXAKCWxlYQkJKCVzcCksJWEwCgoJdHN0LmIJCSVkMQkJCSMgc2hvdWxkIEZQMCBiZSBtb3ZlZD8KCWJwbC5iCQlmbW92bV9vdXRfY3RybF9mcDEJIyBubwoKCW1vdi5sCQkweDArRVhDX0ZQMCglYTYpLCglYTApKwkjIHllcwoJbW92LmwJCTB4NCtFWENfRlAwKCVhNiksKCVhMCkrCgltb3YubAkJMHg4K0VYQ19GUDAoJWE2KSwoJWEwKSsKCmZtb3ZtX291dF9jdHJsX2ZwMToKCWxzbC5iCQkmMHgxLCVkMQkJIyBzaG91bGQgRlAxIGJlIG1vdmVkPwoJYnBsLmIJCWZtb3ZtX291dF9jdHJsX2ZwMgkjIG5vCgoJbW92LmwJCTB4MCtFWENfRlAxKCVhNiksKCVhMCkrCSMgeWVzCgltb3YubAkJMHg0K0VYQ19GUDEoJWE2KSwoJWEwKSsKCW1vdi5sCQkweDgrRVhDX0ZQMSglYTYpLCglYTApKwoKZm1vdm1fb3V0X2N0cmxfZnAyOgoJbHNsLmIJCSYweDEsJWQxCQkjIHNob3VsZCBGUDIgYmUgbW92ZWQ/CglicGwuYgkJZm1vdm1fb3V0X2N0cmxfZnAzCSMgbm8KCglmbW92bS54CQkmMHgyMCwoJWEwKQkJIyB5ZXMKCWFkZC5sCQkmMHhjLCVhMAoKZm1vdm1fb3V0X2N0cmxfZnAzOgoJbHNsLmIJCSYweDEsJWQxCQkjIHNob3VsZCBGUDMgYmUgbW92ZWQ/CglicGwuYgkJZm1vdm1fb3V0X2N0cmxfZnA0CSMgbm8KCglmbW92bS54CQkmMHgxMCwoJWEwKQkJIyB5ZXMKCWFkZC5sCQkmMHhjLCVhMAoKZm1vdm1fb3V0X2N0cmxfZnA0OgoJbHNsLmIJCSYweDEsJWQxCQkjIHNob3VsZCBGUDQgYmUgbW92ZWQ/CglicGwuYgkJZm1vdm1fb3V0X2N0cmxfZnA1CSMgbm8KCglmbW92bS54CQkmMHgwOCwoJWEwKQkJIyB5ZXMKCWFkZC5sCQkmMHhjLCVhMAoKZm1vdm1fb3V0X2N0cmxfZnA1OgoJbHNsLmIJCSYweDEsJWQxCQkjIHNob3VsZCBGUDUgYmUgbW92ZWQ/CglicGwuYgkJZm1vdm1fb3V0X2N0cmxfZnA2CSMgbm8KCglmbW92bS54CQkmMHgwNCwoJWEwKQkJIyB5ZXMKCWFkZC5sCQkmMHhjLCVhMAoKZm1vdm1fb3V0X2N0cmxfZnA2OgoJbHNsLmIJCSYweDEsJWQxCQkjIHNob3VsZCBGUDYgYmUgbW92ZWQ/CglicGwuYgkJZm1vdm1fb3V0X2N0cmxfZnA3CSMgbm8KCglmbW92bS54CQkmMHgwMiwoJWEwKQkJIyB5ZXMKCWFkZC5sCQkmMHhjLCVhMAoKZm1vdm1fb3V0X2N0cmxfZnA3OgoJbHNsLmIJCSYweDEsJWQxCQkjIHNob3VsZCBGUDcgYmUgbW92ZWQ/CglicGwuYgkJZm1vdm1fb3V0X2N0cmxfZG9uZQkjIG5vCgoJZm1vdm0ueAkJJjB4MDEsKCVhMCkJCSMgeWVzCglhZGQubAkJJjB4YywlYTAKCmZtb3ZtX291dF9jdHJsX2RvbmU6Cgltb3YubAkJJWExLExfU0NSMSglYTYpCgoJbGVhCQkoJXNwKSwlYTAJCSMgcGFzczogc3VwZXJ2aXNvciBzcmMKCW1vdi5sCQklZDAsLSglc3ApCQkjIHNhdmUgc2l6ZQoJYnNyLmwJCV9kbWVtX3dyaXRlCQkjIGNvcHkgZGF0YSB0byB1c2VyIG1lbQoKCW1vdi5sCQkoJXNwKSssJWQwCglhZGQubAkJJWQwLCVzcAkJCSMgY2xlYXIgZnByZWcgZGF0YSBmcm9tIHN0YWNrCgoJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBlcnI/CglibmUudwkJZm1vdm1fb3V0X2VycgkJIyB5ZXMKCglydHMKCiMjIyMjIyMjIyMjIwojIE1PVkUgSU46ICMKIyMjIyMjIyMjIyMjCmZtb3ZtX2RhdGFfaW46Cgltb3YubAkJJWEwLExfU0NSMSglYTYpCgoJc3ViLmwJCSVkMCwlc3AJCQkjIG1ha2Ugcm9vbSBmb3IgZnByZWdzCglsZWEJCSglc3ApLCVhMQoKCW1vdi5sCQklZDEsLSglc3ApCQkjIHNhdmUgYml0IHN0cmluZyBmb3IgbGF0ZXIKCW1vdi5sCQklZDAsLSglc3ApCQkjIHNhdmUgIyBvZiBieXRlcwoKCWJzci5sCQlfZG1lbV9yZWFkCQkjIGNvcHkgZGF0YSBmcm9tIHVzZXIgbWVtCgoJbW92LmwJCSglc3ApKywlZDAJCSMgcmV0cmlldmUgIyBvZiBieXRlcwoKCXRzdC5sCQklZDEJCQkjIGRpZCBkZmV0Y2ggZmFpbD8KCWJuZS53CQlmbW92bV9pbl9lcnIJCSMgeWVzCgoJbW92LmwJCSglc3ApKywlZDEJCSMgbG9hZCBiaXQgc3RyaW5nCgoJbGVhCQkoJXNwKSwlYTAJCSMgYWRkciBvZiBzdGFjawoKCXRzdC5iCQklZDEJCQkjIHNob3VsZCBGUDAgYmUgbW92ZWQ/CglicGwuYgkJZm1vdm1fZGF0YV9pbl9mcDEJIyBubwoKCW1vdi5sCQkoJWEwKSssMHgwK0VYQ19GUDAoJWE2KQkjIHllcwoJbW92LmwJCSglYTApKywweDQrRVhDX0ZQMCglYTYpCgltb3YubAkJKCVhMCkrLDB4OCtFWENfRlAwKCVhNikKCmZtb3ZtX2RhdGFfaW5fZnAxOgoJbHNsLmIJCSYweDEsJWQxCQkjIHNob3VsZCBGUDEgYmUgbW92ZWQ/CglicGwuYgkJZm1vdm1fZGF0YV9pbl9mcDIJIyBubwoKCW1vdi5sCQkoJWEwKSssMHgwK0VYQ19GUDEoJWE2KQkjIHllcwoJbW92LmwJCSglYTApKywweDQrRVhDX0ZQMSglYTYpCgltb3YubAkJKCVhMCkrLDB4OCtFWENfRlAxKCVhNikKCmZtb3ZtX2RhdGFfaW5fZnAyOgoJbHNsLmIJCSYweDEsJWQxCQkjIHNob3VsZCBGUDIgYmUgbW92ZWQ/CglicGwuYgkJZm1vdm1fZGF0YV9pbl9mcDMJIyBubwoKCWZtb3ZtLngJCSglYTApKywmMHgyMAkJIyB5ZXMKCmZtb3ZtX2RhdGFfaW5fZnAzOgoJbHNsLmIJCSYweDEsJWQxCQkjIHNob3VsZCBGUDMgYmUgbW92ZWQ/CglicGwuYgkJZm1vdm1fZGF0YV9pbl9mcDQJIyBubwoKCWZtb3ZtLngJCSglYTApKywmMHgxMAkJIyB5ZXMKCmZtb3ZtX2RhdGFfaW5fZnA0OgoJbHNsLmIJCSYweDEsJWQxCQkjIHNob3VsZCBGUDQgYmUgbW92ZWQ/CglicGwuYgkJZm1vdm1fZGF0YV9pbl9mcDUJIyBubwoKCWZtb3ZtLngJCSglYTApKywmMHgwOAkJIyB5ZXMKCmZtb3ZtX2RhdGFfaW5fZnA1OgoJbHNsLmIJCSYweDEsJWQxCQkjIHNob3VsZCBGUDUgYmUgbW92ZWQ/CglicGwuYgkJZm1vdm1fZGF0YV9pbl9mcDYJIyBubwoKCWZtb3ZtLngJCSglYTApKywmMHgwNAkJIyB5ZXMKCmZtb3ZtX2RhdGFfaW5fZnA2OgoJbHNsLmIJCSYweDEsJWQxCQkjIHNob3VsZCBGUDYgYmUgbW92ZWQ/CglicGwuYgkJZm1vdm1fZGF0YV9pbl9mcDcJIyBubwoKCWZtb3ZtLngJCSglYTApKywmMHgwMgkJIyB5ZXMKCmZtb3ZtX2RhdGFfaW5fZnA3OgoJbHNsLmIJCSYweDEsJWQxCQkjIHNob3VsZCBGUDcgYmUgbW92ZWQ/CglicGwuYgkJZm1vdm1fZGF0YV9pbl9kb25lCSMgbm8KCglmbW92bS54CQkoJWEwKSssJjB4MDEJCSMgeWVzCgpmbW92bV9kYXRhX2luX2RvbmU6CglhZGQubAkJJWQwLCVzcAkJCSMgcmVtb3ZlIGZwcmVncyBmcm9tIHN0YWNrCglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCmZtb3ZtX2RhdGFfZG9uZToKCXJ0cwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgojCiMgdGFibGUgaW5kZXhlZCBieSB0aGUgb3BlcmF0aW9uJ3MgYml0IHN0cmluZyB0aGF0IGdpdmVzIHRoZSBudW1iZXIKIyBvZiBieXRlcyB0aGF0IHdpbGwgYmUgbW92ZWQuCiMKIyBudW1iZXIgb2YgYnl0ZXMgPSAoIyBvZiAxJ3MgaW4gYml0IHN0cmluZykgKiAxMihieXRlcy9mcHJlZykKIwp0YmxfZm1vdm1fc2l6ZToKCWJ5dGUJMHgwMCwweDBjLDB4MGMsMHgxOCwweDBjLDB4MTgsMHgxOCwweDI0CglieXRlCTB4MGMsMHgxOCwweDE4LDB4MjQsMHgxOCwweDI0LDB4MjQsMHgzMAoJYnl0ZQkweDBjLDB4MTgsMHgxOCwweDI0LDB4MTgsMHgyNCwweDI0LDB4MzAKCWJ5dGUJMHgxOCwweDI0LDB4MjQsMHgzMCwweDI0LDB4MzAsMHgzMCwweDNjCglieXRlCTB4MGMsMHgxOCwweDE4LDB4MjQsMHgxOCwweDI0LDB4MjQsMHgzMAoJYnl0ZQkweDE4LDB4MjQsMHgyNCwweDMwLDB4MjQsMHgzMCwweDMwLDB4M2MKCWJ5dGUJMHgxOCwweDI0LDB4MjQsMHgzMCwweDI0LDB4MzAsMHgzMCwweDNjCglieXRlCTB4MjQsMHgzMCwweDMwLDB4M2MsMHgzMCwweDNjLDB4M2MsMHg0OAoJYnl0ZQkweDBjLDB4MTgsMHgxOCwweDI0LDB4MTgsMHgyNCwweDI0LDB4MzAKCWJ5dGUJMHgxOCwweDI0LDB4MjQsMHgzMCwweDI0LDB4MzAsMHgzMCwweDNjCglieXRlCTB4MTgsMHgyNCwweDI0LDB4MzAsMHgyNCwweDMwLDB4MzAsMHgzYwoJYnl0ZQkweDI0LDB4MzAsMHgzMCwweDNjLDB4MzAsMHgzYywweDNjLDB4NDgKCWJ5dGUJMHgxOCwweDI0LDB4MjQsMHgzMCwweDI0LDB4MzAsMHgzMCwweDNjCglieXRlCTB4MjQsMHgzMCwweDMwLDB4M2MsMHgzMCwweDNjLDB4M2MsMHg0OAoJYnl0ZQkweDI0LDB4MzAsMHgzMCwweDNjLDB4MzAsMHgzYywweDNjLDB4NDgKCWJ5dGUJMHgzMCwweDNjLDB4M2MsMHg0OCwweDNjLDB4NDgsMHg0OCwweDU0CglieXRlCTB4MGMsMHgxOCwweDE4LDB4MjQsMHgxOCwweDI0LDB4MjQsMHgzMAoJYnl0ZQkweDE4LDB4MjQsMHgyNCwweDMwLDB4MjQsMHgzMCwweDMwLDB4M2MKCWJ5dGUJMHgxOCwweDI0LDB4MjQsMHgzMCwweDI0LDB4MzAsMHgzMCwweDNjCglieXRlCTB4MjQsMHgzMCwweDMwLDB4M2MsMHgzMCwweDNjLDB4M2MsMHg0OAoJYnl0ZQkweDE4LDB4MjQsMHgyNCwweDMwLDB4MjQsMHgzMCwweDMwLDB4M2MKCWJ5dGUJMHgyNCwweDMwLDB4MzAsMHgzYywweDMwLDB4M2MsMHgzYywweDQ4CglieXRlCTB4MjQsMHgzMCwweDMwLDB4M2MsMHgzMCwweDNjLDB4M2MsMHg0OAoJYnl0ZQkweDMwLDB4M2MsMHgzYywweDQ4LDB4M2MsMHg0OCwweDQ4LDB4NTQKCWJ5dGUJMHgxOCwweDI0LDB4MjQsMHgzMCwweDI0LDB4MzAsMHgzMCwweDNjCglieXRlCTB4MjQsMHgzMCwweDMwLDB4M2MsMHgzMCwweDNjLDB4M2MsMHg0OAoJYnl0ZQkweDI0LDB4MzAsMHgzMCwweDNjLDB4MzAsMHgzYywweDNjLDB4NDgKCWJ5dGUJMHgzMCwweDNjLDB4M2MsMHg0OCwweDNjLDB4NDgsMHg0OCwweDU0CglieXRlCTB4MjQsMHgzMCwweDMwLDB4M2MsMHgzMCwweDNjLDB4M2MsMHg0OAoJYnl0ZQkweDMwLDB4M2MsMHgzYywweDQ4LDB4M2MsMHg0OCwweDQ4LDB4NTQKCWJ5dGUJMHgzMCwweDNjLDB4M2MsMHg0OCwweDNjLDB4NDgsMHg0OCwweDU0CglieXRlCTB4M2MsMHg0OCwweDQ4LDB4NTQsMHg0OCwweDU0LDB4NTQsMHg2MAoKIwojIHRhYmxlIHRvIGNvbnZlcnQgYSBwcmUtZGVjcmVtZW50IGJpdCBzdHJpbmcgaW50byBhIHBvc3QtaW5jcmVtZW50CiMgb3IgY29udHJvbCBiaXQgc3RyaW5nLgojIGV4OgkweDAwCT09PgkweDAwCiMJMHgwMQk9PT4JMHg4MAojCTB4MDIJPT0+CTB4NDAKIwkJLgojCQkuCiMJMHhmZAk9PT4JMHhiZgojCTB4ZmUJPT0+CTB4N2YKIwkweGZmCT09PgkweGZmCiMKdGJsX2Ztb3ZtX2NvbnZlcnQ6CglieXRlCTB4MDAsMHg4MCwweDQwLDB4YzAsMHgyMCwweGEwLDB4NjAsMHhlMAoJYnl0ZQkweDEwLDB4OTAsMHg1MCwweGQwLDB4MzAsMHhiMCwweDcwLDB4ZjAKCWJ5dGUJMHgwOCwweDg4LDB4NDgsMHhjOCwweDI4LDB4YTgsMHg2OCwweGU4CglieXRlCTB4MTgsMHg5OCwweDU4LDB4ZDgsMHgzOCwweGI4LDB4NzgsMHhmOAoJYnl0ZQkweDA0LDB4ODQsMHg0NCwweGM0LDB4MjQsMHhhNCwweDY0LDB4ZTQKCWJ5dGUJMHgxNCwweDk0LDB4NTQsMHhkNCwweDM0LDB4YjQsMHg3NCwweGY0CglieXRlCTB4MGMsMHg4YywweDRjLDB4Y2MsMHgyYywweGFjLDB4NmMsMHhlYwoJYnl0ZQkweDFjLDB4OWMsMHg1YywweGRjLDB4M2MsMHhiYywweDdjLDB4ZmMKCWJ5dGUJMHgwMiwweDgyLDB4NDIsMHhjMiwweDIyLDB4YTIsMHg2MiwweGUyCglieXRlCTB4MTIsMHg5MiwweDUyLDB4ZDIsMHgzMiwweGIyLDB4NzIsMHhmMgoJYnl0ZQkweDBhLDB4OGEsMHg0YSwweGNhLDB4MmEsMHhhYSwweDZhLDB4ZWEKCWJ5dGUJMHgxYSwweDlhLDB4NWEsMHhkYSwweDNhLDB4YmEsMHg3YSwweGZhCglieXRlCTB4MDYsMHg4NiwweDQ2LDB4YzYsMHgyNiwweGE2LDB4NjYsMHhlNgoJYnl0ZQkweDE2LDB4OTYsMHg1NiwweGQ2LDB4MzYsMHhiNiwweDc2LDB4ZjYKCWJ5dGUJMHgwZSwweDhlLDB4NGUsMHhjZSwweDJlLDB4YWUsMHg2ZSwweGVlCglieXRlCTB4MWUsMHg5ZSwweDVlLDB4ZGUsMHgzZSwweGJlLDB4N2UsMHhmZQoJYnl0ZQkweDAxLDB4ODEsMHg0MSwweGMxLDB4MjEsMHhhMSwweDYxLDB4ZTEKCWJ5dGUJMHgxMSwweDkxLDB4NTEsMHhkMSwweDMxLDB4YjEsMHg3MSwweGYxCglieXRlCTB4MDksMHg4OSwweDQ5LDB4YzksMHgyOSwweGE5LDB4NjksMHhlOQoJYnl0ZQkweDE5LDB4OTksMHg1OSwweGQ5LDB4MzksMHhiOSwweDc5LDB4ZjkKCWJ5dGUJMHgwNSwweDg1LDB4NDUsMHhjNSwweDI1LDB4YTUsMHg2NSwweGU1CglieXRlCTB4MTUsMHg5NSwweDU1LDB4ZDUsMHgzNSwweGI1LDB4NzUsMHhmNQoJYnl0ZQkweDBkLDB4OGQsMHg0ZCwweGNkLDB4MmQsMHhhZCwweDZkLDB4ZWQKCWJ5dGUJMHgxZCwweDlkLDB4NWQsMHhkZCwweDNkLDB4YmQsMHg3ZCwweGZkCglieXRlCTB4MDMsMHg4MywweDQzLDB4YzMsMHgyMywweGEzLDB4NjMsMHhlMwoJYnl0ZQkweDEzLDB4OTMsMHg1MywweGQzLDB4MzMsMHhiMywweDczLDB4ZjMKCWJ5dGUJMHgwYiwweDhiLDB4NGIsMHhjYiwweDJiLDB4YWIsMHg2YiwweGViCglieXRlCTB4MWIsMHg5YiwweDViLDB4ZGIsMHgzYiwweGJiLDB4N2IsMHhmYgoJYnl0ZQkweDA3LDB4ODcsMHg0NywweGM3LDB4MjcsMHhhNywweDY3LDB4ZTcKCWJ5dGUJMHgxNywweDk3LDB4NTcsMHhkNywweDM3LDB4YjcsMHg3NywweGY3CglieXRlCTB4MGYsMHg4ZiwweDRmLDB4Y2YsMHgyZiwweGFmLDB4NmYsMHhlZgoJYnl0ZQkweDFmLDB4OWYsMHg1ZiwweGRmLDB4M2YsMHhiZiwweDdmLDB4ZmYKCglnbG9iYWwJCWZtb3ZtX2NhbGNfZWEKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBfZm1vdm1fY2FsY19lYTogY2FsY3VsYXRlIGVmZmVjdGl2ZSBhZGRyZXNzICMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZm1vdm1fY2FsY19lYToKCW1vdi5sCQklZDAsJWEwCQkJIyBtb3ZlICMgYnl0ZXMgdG8gYTAKCiMgY3VycmVudGx5LCBNT0RFIGFuZCBSRUcgYXJlIHRha2VuIGZyb20gdGhlIEVYQ19PUFdPUkQuIHRoaXMgY291bGQgYmUKIyBlYXNpbHkgY2hhbmdlZCBpZiB0aGV5IHdlcmUgaW5wdXRzIHBhc3NlZCBpbiByZWdpc3RlcnMuCgltb3YudwkJRVhDX09QV09SRCglYTYpLCVkMAkjIGZldGNoIG9wY29kZSB3b3JkCgltb3YudwkJJWQwLCVkMQkJCSMgbWFrZSBhIGNvcHkKCglhbmRpLncJCSYweDNmLCVkMAkJIyBleHRyYWN0IG1vZGUgZmllbGQKCWFuZGkubAkJJjB4NywlZDEJCSMgZXh0cmFjdCByZWcgIGZpZWxkCgojIGp1bXAgdG8gdGhlIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb24gZm9yIGVhY2gge01PREUsUkVHfSBwYWlyLgoJbW92LncJCSh0YmxfZmVhX21vZGUuYiwlcGMsJWQwLncqMiksJWQwICMgZmV0Y2ggam1wIGRpc3RhbmNlCglqbXAJCSh0YmxfZmVhX21vZGUuYiwlcGMsJWQwLncqMSkgIyBqbXAgdG8gY29ycmVjdCBlYSBtb2RlCgoJc3diZWcJCSY2NAp0YmxfZmVhX21vZGU6CglzaG9ydAkJdGJsX2ZlYV9tb2RlCS0JdGJsX2ZlYV9tb2RlCglzaG9ydAkJdGJsX2ZlYV9tb2RlCS0JdGJsX2ZlYV9tb2RlCglzaG9ydAkJdGJsX2ZlYV9tb2RlCS0JdGJsX2ZlYV9tb2RlCglzaG9ydAkJdGJsX2ZlYV9tb2RlCS0JdGJsX2ZlYV9tb2RlCglzaG9ydAkJdGJsX2ZlYV9tb2RlCS0JdGJsX2ZlYV9tb2RlCglzaG9ydAkJdGJsX2ZlYV9tb2RlCS0JdGJsX2ZlYV9tb2RlCglzaG9ydAkJdGJsX2ZlYV9tb2RlCS0JdGJsX2ZlYV9tb2RlCglzaG9ydAkJdGJsX2ZlYV9tb2RlCS0JdGJsX2ZlYV9tb2RlCgoJc2hvcnQJCXRibF9mZWFfbW9kZQktCXRibF9mZWFfbW9kZQoJc2hvcnQJCXRibF9mZWFfbW9kZQktCXRibF9mZWFfbW9kZQoJc2hvcnQJCXRibF9mZWFfbW9kZQktCXRibF9mZWFfbW9kZQoJc2hvcnQJCXRibF9mZWFfbW9kZQktCXRibF9mZWFfbW9kZQoJc2hvcnQJCXRibF9mZWFfbW9kZQktCXRibF9mZWFfbW9kZQoJc2hvcnQJCXRibF9mZWFfbW9kZQktCXRibF9mZWFfbW9kZQoJc2hvcnQJCXRibF9mZWFfbW9kZQktCXRibF9mZWFfbW9kZQoJc2hvcnQJCXRibF9mZWFfbW9kZQktCXRibF9mZWFfbW9kZQoKCXNob3J0CQlmYWRkcl9pbmRfYTAJLQl0YmxfZmVhX21vZGUKCXNob3J0CQlmYWRkcl9pbmRfYTEJLQl0YmxfZmVhX21vZGUKCXNob3J0CQlmYWRkcl9pbmRfYTIJLQl0YmxfZmVhX21vZGUKCXNob3J0CQlmYWRkcl9pbmRfYTMJLQl0YmxfZmVhX21vZGUKCXNob3J0CQlmYWRkcl9pbmRfYTQJLQl0YmxfZmVhX21vZGUKCXNob3J0CQlmYWRkcl9pbmRfYTUJLQl0YmxfZmVhX21vZGUKCXNob3J0CQlmYWRkcl9pbmRfYTYJLQl0YmxfZmVhX21vZGUKCXNob3J0CQlmYWRkcl9pbmRfYTcJLQl0YmxfZmVhX21vZGUKCglzaG9ydAkJZmFkZHJfaW5kX3BfYTAJLQl0YmxfZmVhX21vZGUKCXNob3J0CQlmYWRkcl9pbmRfcF9hMQktCXRibF9mZWFfbW9kZQoJc2hvcnQJCWZhZGRyX2luZF9wX2EyCS0JdGJsX2ZlYV9tb2RlCglzaG9ydAkJZmFkZHJfaW5kX3BfYTMJLQl0YmxfZmVhX21vZGUKCXNob3J0CQlmYWRkcl9pbmRfcF9hNAktCXRibF9mZWFfbW9kZQoJc2hvcnQJCWZhZGRyX2luZF9wX2E1CS0JdGJsX2ZlYV9tb2RlCglzaG9ydAkJZmFkZHJfaW5kX3BfYTYJLQl0YmxfZmVhX21vZGUKCXNob3J0CQlmYWRkcl9pbmRfcF9hNwktCXRibF9mZWFfbW9kZQoKCXNob3J0CQlmYWRkcl9pbmRfbV9hMAktCXRibF9mZWFfbW9kZQoJc2hvcnQJCWZhZGRyX2luZF9tX2ExCS0JdGJsX2ZlYV9tb2RlCglzaG9ydAkJZmFkZHJfaW5kX21fYTIJLQl0YmxfZmVhX21vZGUKCXNob3J0CQlmYWRkcl9pbmRfbV9hMwktCXRibF9mZWFfbW9kZQoJc2hvcnQJCWZhZGRyX2luZF9tX2E0CS0JdGJsX2ZlYV9tb2RlCglzaG9ydAkJZmFkZHJfaW5kX21fYTUJLQl0YmxfZmVhX21vZGUKCXNob3J0CQlmYWRkcl9pbmRfbV9hNgktCXRibF9mZWFfbW9kZQoJc2hvcnQJCWZhZGRyX2luZF9tX2E3CS0JdGJsX2ZlYV9tb2RlCgoJc2hvcnQJCWZhZGRyX2luZF9kaXNwX2EwCS0JdGJsX2ZlYV9tb2RlCglzaG9ydAkJZmFkZHJfaW5kX2Rpc3BfYTEJLQl0YmxfZmVhX21vZGUKCXNob3J0CQlmYWRkcl9pbmRfZGlzcF9hMgktCXRibF9mZWFfbW9kZQoJc2hvcnQJCWZhZGRyX2luZF9kaXNwX2EzCS0JdGJsX2ZlYV9tb2RlCglzaG9ydAkJZmFkZHJfaW5kX2Rpc3BfYTQJLQl0YmxfZmVhX21vZGUKCXNob3J0CQlmYWRkcl9pbmRfZGlzcF9hNQktCXRibF9mZWFfbW9kZQoJc2hvcnQJCWZhZGRyX2luZF9kaXNwX2E2CS0JdGJsX2ZlYV9tb2RlCglzaG9ydAkJZmFkZHJfaW5kX2Rpc3BfYTcJLQl0YmxfZmVhX21vZGUKCglzaG9ydAkJZmFkZHJfaW5kX2V4dAktCXRibF9mZWFfbW9kZQoJc2hvcnQJCWZhZGRyX2luZF9leHQJLQl0YmxfZmVhX21vZGUKCXNob3J0CQlmYWRkcl9pbmRfZXh0CS0JdGJsX2ZlYV9tb2RlCglzaG9ydAkJZmFkZHJfaW5kX2V4dAktCXRibF9mZWFfbW9kZQoJc2hvcnQJCWZhZGRyX2luZF9leHQJLQl0YmxfZmVhX21vZGUKCXNob3J0CQlmYWRkcl9pbmRfZXh0CS0JdGJsX2ZlYV9tb2RlCglzaG9ydAkJZmFkZHJfaW5kX2V4dAktCXRibF9mZWFfbW9kZQoJc2hvcnQJCWZhZGRyX2luZF9leHQJLQl0YmxfZmVhX21vZGUKCglzaG9ydAkJZmFic19zaG9ydAktCXRibF9mZWFfbW9kZQoJc2hvcnQJCWZhYnNfbG9uZwktCXRibF9mZWFfbW9kZQoJc2hvcnQJCWZwY19pbmQJCS0JdGJsX2ZlYV9tb2RlCglzaG9ydAkJZnBjX2luZF9leHQJLQl0YmxfZmVhX21vZGUKCXNob3J0CQl0YmxfZmVhX21vZGUJLQl0YmxfZmVhX21vZGUKCXNob3J0CQl0YmxfZmVhX21vZGUJLQl0YmxfZmVhX21vZGUKCXNob3J0CQl0YmxfZmVhX21vZGUJLQl0YmxfZmVhX21vZGUKCXNob3J0CQl0YmxfZmVhX21vZGUJLQl0YmxfZmVhX21vZGUKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgQWRkcmVzcyByZWdpc3RlciBpbmRpcmVjdDogKEFuKSAjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmZhZGRyX2luZF9hMDoKCW1vdi5sCQlFWENfRFJFR1MrMHg4KCVhNiksJWEwCSMgR2V0IGN1cnJlbnQgYTAKCXJ0cwoKZmFkZHJfaW5kX2ExOgoJbW92LmwJCUVYQ19EUkVHUysweGMoJWE2KSwlYTAJIyBHZXQgY3VycmVudCBhMQoJcnRzCgpmYWRkcl9pbmRfYTI6Cgltb3YubAkJJWEyLCVhMAkJCSMgR2V0IGN1cnJlbnQgYTIKCXJ0cwoKZmFkZHJfaW5kX2EzOgoJbW92LmwJCSVhMywlYTAJCQkjIEdldCBjdXJyZW50IGEzCglydHMKCmZhZGRyX2luZF9hNDoKCW1vdi5sCQklYTQsJWEwCQkJIyBHZXQgY3VycmVudCBhNAoJcnRzCgpmYWRkcl9pbmRfYTU6Cgltb3YubAkJJWE1LCVhMAkJCSMgR2V0IGN1cnJlbnQgYTUKCXJ0cwoKZmFkZHJfaW5kX2E2OgoJbW92LmwJCSglYTYpLCVhMAkJIyBHZXQgY3VycmVudCBhNgoJcnRzCgpmYWRkcl9pbmRfYTc6Cgltb3YubAkJRVhDX0E3KCVhNiksJWEwCQkjIEdldCBjdXJyZW50IGE3CglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgQWRkcmVzcyByZWdpc3RlciBpbmRpcmVjdCB3LyBwb3N0aW5jcmVtZW50OiAoQW4pKyAjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmZhZGRyX2luZF9wX2EwOgoJbW92LmwJCUVYQ19EUkVHUysweDgoJWE2KSwlZDAJIyBHZXQgY3VycmVudCBhMAoJbW92LmwJCSVkMCwlZDEKCWFkZC5sCQklYTAsJWQxCQkJIyBJbmNyZW1lbnQKCW1vdi5sCQklZDEsRVhDX0RSRUdTKzB4OCglYTYpCSMgU2F2ZSBpbmNyIHZhbHVlCgltb3YubAkJJWQwLCVhMAoJcnRzCgpmYWRkcl9pbmRfcF9hMToKCW1vdi5sCQlFWENfRFJFR1MrMHhjKCVhNiksJWQwCSMgR2V0IGN1cnJlbnQgYTEKCW1vdi5sCQklZDAsJWQxCglhZGQubAkJJWEwLCVkMQkJCSMgSW5jcmVtZW50Cgltb3YubAkJJWQxLEVYQ19EUkVHUysweGMoJWE2KQkjIFNhdmUgaW5jciB2YWx1ZQoJbW92LmwJCSVkMCwlYTAKCXJ0cwoKZmFkZHJfaW5kX3BfYTI6Cgltb3YubAkJJWEyLCVkMAkJCSMgR2V0IGN1cnJlbnQgYTIKCW1vdi5sCQklZDAsJWQxCglhZGQubAkJJWEwLCVkMQkJCSMgSW5jcmVtZW50Cgltb3YubAkJJWQxLCVhMgkJCSMgU2F2ZSBpbmNyIHZhbHVlCgltb3YubAkJJWQwLCVhMAoJcnRzCgpmYWRkcl9pbmRfcF9hMzoKCW1vdi5sCQklYTMsJWQwCQkJIyBHZXQgY3VycmVudCBhMwoJbW92LmwJCSVkMCwlZDEKCWFkZC5sCQklYTAsJWQxCQkJIyBJbmNyZW1lbnQKCW1vdi5sCQklZDEsJWEzCQkJIyBTYXZlIGluY3IgdmFsdWUKCW1vdi5sCQklZDAsJWEwCglydHMKCmZhZGRyX2luZF9wX2E0OgoJbW92LmwJCSVhNCwlZDAJCQkjIEdldCBjdXJyZW50IGE0Cgltb3YubAkJJWQwLCVkMQoJYWRkLmwJCSVhMCwlZDEJCQkjIEluY3JlbWVudAoJbW92LmwJCSVkMSwlYTQJCQkjIFNhdmUgaW5jciB2YWx1ZQoJbW92LmwJCSVkMCwlYTAKCXJ0cwoKZmFkZHJfaW5kX3BfYTU6Cgltb3YubAkJJWE1LCVkMAkJCSMgR2V0IGN1cnJlbnQgYTUKCW1vdi5sCQklZDAsJWQxCglhZGQubAkJJWEwLCVkMQkJCSMgSW5jcmVtZW50Cgltb3YubAkJJWQxLCVhNQkJCSMgU2F2ZSBpbmNyIHZhbHVlCgltb3YubAkJJWQwLCVhMAoJcnRzCgpmYWRkcl9pbmRfcF9hNjoKCW1vdi5sCQkoJWE2KSwlZDAJCSMgR2V0IGN1cnJlbnQgYTYKCW1vdi5sCQklZDAsJWQxCglhZGQubAkJJWEwLCVkMQkJCSMgSW5jcmVtZW50Cgltb3YubAkJJWQxLCglYTYpCQkjIFNhdmUgaW5jciB2YWx1ZQoJbW92LmwJCSVkMCwlYTAKCXJ0cwoKZmFkZHJfaW5kX3BfYTc6Cgltb3YuYgkJJm1pYTdfZmxnLFNQQ09ORF9GTEcoJWE2KSAjIHNldCAic3BlY2lhbCBjYXNlIiBmbGFnCgoJbW92LmwJCUVYQ19BNyglYTYpLCVkMAkJIyBHZXQgY3VycmVudCBhNwoJbW92LmwJCSVkMCwlZDEKCWFkZC5sCQklYTAsJWQxCQkJIyBJbmNyZW1lbnQKCW1vdi5sCQklZDEsRVhDX0E3KCVhNikJCSMgU2F2ZSBpbmNyIHZhbHVlCgltb3YubAkJJWQwLCVhMAoJcnRzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgQWRkcmVzcyByZWdpc3RlciBpbmRpcmVjdCB3LyBwcmVkZWNyZW1lbnQ6IC0oQW4pICMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpmYWRkcl9pbmRfbV9hMDoKCW1vdi5sCQlFWENfRFJFR1MrMHg4KCVhNiksJWQwCSMgR2V0IGN1cnJlbnQgYTAKCXN1Yi5sCQklYTAsJWQwCQkJIyBEZWNyZW1lbnQKCW1vdi5sCQklZDAsRVhDX0RSRUdTKzB4OCglYTYpCSMgU2F2ZSBkZWNyIHZhbHVlCgltb3YubAkJJWQwLCVhMAoJcnRzCgpmYWRkcl9pbmRfbV9hMToKCW1vdi5sCQlFWENfRFJFR1MrMHhjKCVhNiksJWQwCSMgR2V0IGN1cnJlbnQgYTEKCXN1Yi5sCQklYTAsJWQwCQkJIyBEZWNyZW1lbnQKCW1vdi5sCQklZDAsRVhDX0RSRUdTKzB4YyglYTYpCSMgU2F2ZSBkZWNyIHZhbHVlCgltb3YubAkJJWQwLCVhMAoJcnRzCgpmYWRkcl9pbmRfbV9hMjoKCW1vdi5sCQklYTIsJWQwCQkJIyBHZXQgY3VycmVudCBhMgoJc3ViLmwJCSVhMCwlZDAJCQkjIERlY3JlbWVudAoJbW92LmwJCSVkMCwlYTIJCQkjIFNhdmUgZGVjciB2YWx1ZQoJbW92LmwJCSVkMCwlYTAKCXJ0cwoKZmFkZHJfaW5kX21fYTM6Cgltb3YubAkJJWEzLCVkMAkJCSMgR2V0IGN1cnJlbnQgYTMKCXN1Yi5sCQklYTAsJWQwCQkJIyBEZWNyZW1lbnQKCW1vdi5sCQklZDAsJWEzCQkJIyBTYXZlIGRlY3IgdmFsdWUKCW1vdi5sCQklZDAsJWEwCglydHMKCmZhZGRyX2luZF9tX2E0OgoJbW92LmwJCSVhNCwlZDAJCQkjIEdldCBjdXJyZW50IGE0CglzdWIubAkJJWEwLCVkMAkJCSMgRGVjcmVtZW50Cgltb3YubAkJJWQwLCVhNAkJCSMgU2F2ZSBkZWNyIHZhbHVlCgltb3YubAkJJWQwLCVhMAoJcnRzCgpmYWRkcl9pbmRfbV9hNToKCW1vdi5sCQklYTUsJWQwCQkJIyBHZXQgY3VycmVudCBhNQoJc3ViLmwJCSVhMCwlZDAJCQkjIERlY3JlbWVudAoJbW92LmwJCSVkMCwlYTUJCQkjIFNhdmUgZGVjciB2YWx1ZQoJbW92LmwJCSVkMCwlYTAKCXJ0cwoKZmFkZHJfaW5kX21fYTY6Cgltb3YubAkJKCVhNiksJWQwCQkjIEdldCBjdXJyZW50IGE2CglzdWIubAkJJWEwLCVkMAkJCSMgRGVjcmVtZW50Cgltb3YubAkJJWQwLCglYTYpCQkjIFNhdmUgZGVjciB2YWx1ZQoJbW92LmwJCSVkMCwlYTAKCXJ0cwoKZmFkZHJfaW5kX21fYTc6Cgltb3YuYgkJJm1kYTdfZmxnLFNQQ09ORF9GTEcoJWE2KSAjIHNldCAic3BlY2lhbCBjYXNlIiBmbGFnCgoJbW92LmwJCUVYQ19BNyglYTYpLCVkMAkJIyBHZXQgY3VycmVudCBhNwoJc3ViLmwJCSVhMCwlZDAJCQkjIERlY3JlbWVudAoJbW92LmwJCSVkMCxFWENfQTcoJWE2KQkJIyBTYXZlIGRlY3IgdmFsdWUKCW1vdi5sCQklZDAsJWEwCglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgQWRkcmVzcyByZWdpc3RlciBpbmRpcmVjdCB3LyBkaXNwbGFjZW1lbnQ6IChkMTYsIEFuKSAjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmZhZGRyX2luZF9kaXNwX2EwOgoJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgoJYWRkcS5sCQkmMHgyLEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgoJYnNyLmwJCV9pbWVtX3JlYWRfd29yZAoKCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KCWJuZS5sCQlpZWFfaWFjYwkJIyB5ZXMKCgltb3YudwkJJWQwLCVhMAkJCSMgc2lnbiBleHRlbmQgZGlzcGxhY2VtZW50CgoJYWRkLmwJCUVYQ19EUkVHUysweDgoJWE2KSwlYTAJIyBhMCArIGQxNgoJcnRzCgpmYWRkcl9pbmRfZGlzcF9hMToKCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKCWFkZHEubAkJJjB4MixFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKCWJzci5sCQlfaW1lbV9yZWFkX3dvcmQKCgl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CglibmUubAkJaWVhX2lhY2MJCSMgeWVzCgoJbW92LncJCSVkMCwlYTAJCQkjIHNpZ24gZXh0ZW5kIGRpc3BsYWNlbWVudAoKCWFkZC5sCQlFWENfRFJFR1MrMHhjKCVhNiksJWEwCSMgYTEgKyBkMTYKCXJ0cwoKZmFkZHJfaW5kX2Rpc3BfYTI6Cgltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCglhZGRxLmwJCSYweDIsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCglic3IubAkJX2ltZW1fcmVhZF93b3JkCgoJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPwoJYm5lLmwJCWllYV9pYWNjCQkjIHllcwoKCW1vdi53CQklZDAsJWEwCQkJIyBzaWduIGV4dGVuZCBkaXNwbGFjZW1lbnQKCglhZGQubAkJJWEyLCVhMAkJCSMgYTIgKyBkMTYKCXJ0cwoKZmFkZHJfaW5kX2Rpc3BfYTM6Cgltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCglhZGRxLmwJCSYweDIsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCglic3IubAkJX2ltZW1fcmVhZF93b3JkCgoJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPwoJYm5lLmwJCWllYV9pYWNjCQkjIHllcwoKCW1vdi53CQklZDAsJWEwCQkJIyBzaWduIGV4dGVuZCBkaXNwbGFjZW1lbnQKCglhZGQubAkJJWEzLCVhMAkJCSMgYTMgKyBkMTYKCXJ0cwoKZmFkZHJfaW5kX2Rpc3BfYTQ6Cgltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCglhZGRxLmwJCSYweDIsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCglic3IubAkJX2ltZW1fcmVhZF93b3JkCgoJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPwoJYm5lLmwJCWllYV9pYWNjCQkjIHllcwoKCW1vdi53CQklZDAsJWEwCQkJIyBzaWduIGV4dGVuZCBkaXNwbGFjZW1lbnQKCglhZGQubAkJJWE0LCVhMAkJCSMgYTQgKyBkMTYKCXJ0cwoKZmFkZHJfaW5kX2Rpc3BfYTU6Cgltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCglhZGRxLmwJCSYweDIsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCglic3IubAkJX2ltZW1fcmVhZF93b3JkCgoJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPwoJYm5lLmwJCWllYV9pYWNjCQkjIHllcwoKCW1vdi53CQklZDAsJWEwCQkJIyBzaWduIGV4dGVuZCBkaXNwbGFjZW1lbnQKCglhZGQubAkJJWE1LCVhMAkJCSMgYTUgKyBkMTYKCXJ0cwoKZmFkZHJfaW5kX2Rpc3BfYTY6Cgltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCglhZGRxLmwJCSYweDIsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCglic3IubAkJX2ltZW1fcmVhZF93b3JkCgoJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPwoJYm5lLmwJCWllYV9pYWNjCQkjIHllcwoKCW1vdi53CQklZDAsJWEwCQkJIyBzaWduIGV4dGVuZCBkaXNwbGFjZW1lbnQKCglhZGQubAkJKCVhNiksJWEwCQkjIGE2ICsgZDE2CglydHMKCmZhZGRyX2luZF9kaXNwX2E3OgoJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgoJYWRkcS5sCQkmMHgyLEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgoJYnNyLmwJCV9pbWVtX3JlYWRfd29yZAoKCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KCWJuZS5sCQlpZWFfaWFjYwkJIyB5ZXMKCgltb3YudwkJJWQwLCVhMAkJCSMgc2lnbiBleHRlbmQgZGlzcGxhY2VtZW50CgoJYWRkLmwJCUVYQ19BNyglYTYpLCVhMAkJIyBhNyArIGQxNgoJcnRzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBBZGRyZXNzIHJlZ2lzdGVyIGluZGlyZWN0IHcvIGluZGV4KDgtYml0IGRpc3BsYWNlbWVudCk6IChkOCwgQW4sIFhuKSAjCiMgICAgIiAgICAgICAiICAgICAgICAgIiAgICB3LyAgICIgIChiYXNlIGRpc3BsYWNlbWVudCk6IChiZCwgQW4sIFhuKSAgIwojIE1lbW9yeSBpbmRpcmVjdCBwb3N0aW5kZXhlZDogKFtiZCwgQW5dLCBYbiwgb2QpCQkgICAgICAgIwojIE1lbW9yeSBpbmRpcmVjdCBwcmVpbmRleGVkOiAoW2JkLCBBbiwgWG5dLCBvZCkJCSAgICAgICAjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpmYWRkcl9pbmRfZXh0OgoJYWRkcS5sCQkmMHg4LCVkMQoJYnNyLmwJCWZldGNoX2RyZWcJCSMgZmV0Y2ggYmFzZSBhcmVnCgltb3YubAkJJWQwLC0oJXNwKQoKCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKCWFkZHEubAkJJjB4MixFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKCWJzci5sCQlfaW1lbV9yZWFkX3dvcmQJCSMgZmV0Y2ggZXh0d29yZCBpbiBkMAoKCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KCWJuZS5sCQlpZWFfaWFjYwkJIyB5ZXMKCgltb3YubAkJKCVzcCkrLCVhMAoKCWJ0c3QJCSYweDgsJWQwCglibmUudwkJZmNhbGNfbWVtX2luZAoKCW1vdi5sCQklZDAsTF9TQ1IxKCVhNikJCSMgaG9sZCBvcHdvcmQKCgltb3YubAkJJWQwLCVkMQoJcm9sLncJCSYweDQsJWQxCglhbmRpLncJCSYweGYsJWQxCQkjIGV4dHJhY3QgaW5kZXggcmVnbm8KCiMgY291bnQgb24gZmV0Y2hfZHJlZygpIG5vdCB0byBhbHRlciBhMC4uLgoJYnNyLmwJCWZldGNoX2RyZWcJCSMgZmV0Y2ggaW5kZXgKCgltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCgltb3YubAkJTF9TQ1IxKCVhNiksJWQyCQkjIGZldGNoIG9wd29yZAoKCWJ0c3QJCSYweGIsJWQyCQkjIGlzIGl0IHdvcmQgb3IgbG9uZz8KCWJuZS5iCQlmYWlpOF9sb25nCglleHQubAkJJWQwCQkJIyBzaWduIGV4dGVuZCB3b3JkIGluZGV4CmZhaWk4X2xvbmc6Cgltb3YubAkJJWQyLCVkMQoJcm9sLncJCSYweDcsJWQxCglhbmRpLmwJCSYweDMsJWQxCQkjIGV4dHJhY3Qgc2NhbGUgdmFsdWUKCglsc2wubAkJJWQxLCVkMAkJCSMgc2hpZnQgaW5kZXggYnkgc2NhbGUKCglleHRiLmwJCSVkMgkJCSMgc2lnbiBleHRlbmQgZGlzcGxhY2VtZW50CglhZGQubAkJJWQyLCVkMAkJCSMgaW5kZXggKyBkaXNwCglhZGQubAkJJWQwLCVhMAkJCSMgQW4gKyAoaW5kZXggKyBkaXNwKQoKCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgb2xkIGQyCglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIEFic29sdXRlIHNob3J0OiAoWFhYKS5XICMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmZhYnNfc2hvcnQ6Cgltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCglhZGRxLmwJCSYweDIsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCglic3IubAkJX2ltZW1fcmVhZF93b3JkCQkjIGZldGNoIHNob3J0IGFkZHJlc3MKCgl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CglibmUubAkJaWVhX2lhY2MJCSMgeWVzCgoJbW92LncJCSVkMCwlYTAJCQkjIHJldHVybiA8ZWE+IGluIGEwCglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgQWJzb2x1dGUgbG9uZzogKFhYWCkuTCAjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmZhYnNfbG9uZzoKCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKCWJzci5sCQlfaW1lbV9yZWFkX2xvbmcJCSMgZmV0Y2ggbG9uZyBhZGRyZXNzCgoJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPwoJYm5lLmwJCWllYV9pYWNjCQkjIHllcwoKCW1vdi5sCQklZDAsJWEwCQkJIyByZXR1cm4gPGVhPiBpbiBhMAoJcnRzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgUHJvZ3JhbSBjb3VudGVyIGluZGlyZWN0IHcvIGRpc3BsYWNlbWVudDogKGQxNiwgUEMpICMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpmcGNfaW5kOgoJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgoJYWRkcS5sCQkmMHgyLEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgoJYnNyLmwJCV9pbWVtX3JlYWRfd29yZAkJIyBmZXRjaCB3b3JkIGRpc3BsYWNlbWVudAoKCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KCWJuZS5sCQlpZWFfaWFjYwkJIyB5ZXMKCgltb3YudwkJJWQwLCVhMAkJCSMgc2lnbiBleHRlbmQgZGlzcGxhY2VtZW50CgoJYWRkLmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgcGMgKyBkMTYKCiMgX2ltZW1fcmVhZF93b3JkKCkgaW5jcmVhc2VkIHRoZSBleHR3cHRyIGJ5IDIuIG5lZWQgdG8gYWRqdXN0IGhlcmUuCglzdWJxLmwJCSYweDIsJWEwCQkjIGFkanVzdCA8ZWE+CglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBQQyBpbmRpcmVjdCB3LyBpbmRleCg4LWJpdCBkaXNwbGFjZW1lbnQpOiAoZDgsIFBDLCBBbikgIwojICIgICAgICIgICAgIHcvICAgIiAgKGJhc2UgZGlzcGxhY2VtZW50KTogKGJkLCBQQywgQW4pICAjCiMgUEMgbWVtb3J5IGluZGlyZWN0IHBvc3RpbmRleGVkOiAoW2JkLCBQQ10sIFhuLCBvZCkgICAgICMKIyBQQyBtZW1vcnkgaW5kaXJlY3QgcHJlaW5kZXhlZDogKFtiZCwgUEMsIFhuXSwgb2QpICAgICAgIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmZwY19pbmRfZXh0OgoJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgoJYWRkcS5sCQkmMHgyLEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgoJYnNyLmwJCV9pbWVtX3JlYWRfd29yZAkJIyBmZXRjaCBleHQgd29yZAoKCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KCWJuZS5sCQlpZWFfaWFjYwkJIyB5ZXMKCgltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBwdXQgYmFzZSBpbiBhMAoJc3VicS5sCQkmMHgyLCVhMAkJIyBhZGp1c3QgYmFzZQoKCWJ0c3QJCSYweDgsJWQwCQkjIGlzIGRpc3Agb25seSA4IGJpdHM/CglibmUudwkJZmNhbGNfbWVtX2luZAkJIyBjYWxjIG1lbW9yeSBpbmRpcmVjdAoKCW1vdi5sCQklZDAsTF9TQ1IxKCVhNikJCSMgc3RvcmUgb3B3b3JkCgoJbW92LmwJCSVkMCwlZDEJCQkjIG1ha2UgZXh0d29yZCBjb3B5Cglyb2wudwkJJjB4NCwlZDEJCSMgcm90YXRlIHJlZyBudW0gaW50byBwbGFjZQoJYW5kaS53CQkmMHhmLCVkMQkJIyBleHRyYWN0IHJlZ2lzdGVyIG51bWJlcgoKIyBjb3VudCBvbiBmZXRjaF9kcmVnKCkgbm90IHRvIGFsdGVyIGEwLi4uCglic3IubAkJZmV0Y2hfZHJlZwkJIyBmZXRjaCBpbmRleAoKCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKCW1vdi5sCQlMX1NDUjEoJWE2KSwlZDIJCSMgZmV0Y2ggb3B3b3JkCgoJYnRzdAkJJjB4YiwlZDIJCSMgaXMgaW5kZXggd29yZCBvciBsb25nPwoJYm5lLmIJCWZwaWk4X2xvbmcJCSMgbG9uZwoJZXh0LmwJCSVkMAkJCSMgc2lnbiBleHRlbmQgd29yZCBpbmRleApmcGlpOF9sb25nOgoJbW92LmwJCSVkMiwlZDEKCXJvbC53CQkmMHg3LCVkMQkJIyByb3RhdGUgc2NhbGUgdmFsdWUgaW50byBwbGFjZQoJYW5kaS5sCQkmMHgzLCVkMQkJIyBleHRyYWN0IHNjYWxlIHZhbHVlCgoJbHNsLmwJCSVkMSwlZDAJCQkjIHNoaWZ0IGluZGV4IGJ5IHNjYWxlCgoJZXh0Yi5sCQklZDIJCQkjIHNpZ24gZXh0ZW5kIGRpc3BsYWNlbWVudAoJYWRkLmwJCSVkMiwlZDAJCQkjIGRpc3AgKyBpbmRleAoJYWRkLmwJCSVkMCwlYTAJCQkjIEFuICsgKGluZGV4ICsgZGlzcCkKCgltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIHRlbXAgcmVnaXN0ZXIKCXJ0cwoKIyBkMiA9IGluZGV4CiMgZDMgPSBiYXNlCiMgZDQgPSBvZAojIGQ1ID0gZXh0d29yZApmY2FsY19tZW1faW5kOgoJYnRzdAkJJjB4NiwlZDAJCSMgaXMgdGhlIGluZGV4IHN1cHByZXNzZWQ/CgliZXEuYgkJZmNhbGNfaW5kZXgKCgltb3ZtLmwJCSYweDNjMDAsLSglc3ApCQkjIHNhdmUgZDItZDUKCgltb3YubAkJJWQwLCVkNQkJCSMgcHV0IGV4dHdvcmQgaW4gZDUKCW1vdi5sCQklYTAsJWQzCQkJIyBwdXQgYmFzZSBpbiBkMwoKCWNsci5sCQklZDIJCQkjIHllcywgc28gaW5kZXggPSAwCglicmEuYgkJZmJhc2Vfc3VwcF9jawoKIyBpbmRleDoKZmNhbGNfaW5kZXg6Cgltb3YubAkJJWQwLExfU0NSMSglYTYpCQkjIHNhdmUgZDAgKG9wd29yZCkKCWJmZXh0dQkJJWQweyYxNjomNH0sJWQxCQkjIGZldGNoIGRyZWcgaW5kZXgKCWJzci5sCQlmZXRjaF9kcmVnCgoJbW92bS5sCQkmMHgzYzAwLC0oJXNwKQkJIyBzYXZlIGQyLWQ1Cgltb3YubAkJJWQwLCVkMgkJCSMgcHV0IGluZGV4IGluIGQyCgltb3YubAkJTF9TQ1IxKCVhNiksJWQ1Cgltb3YubAkJJWEwLCVkMwoKCWJ0c3QJCSYweGIsJWQ1CQkjIGlzIGluZGV4IHdvcmQgb3IgbG9uZz8KCWJuZS5iCQlmbm9fZXh0CglleHQubAkJJWQyCgpmbm9fZXh0OgoJYmZleHR1CQklZDV7JjIxOiYyfSwlZDAKCWxzbC5sCQklZDAsJWQyCgojIGJhc2UgYWRkcmVzcyAocGFzc2VkIGFzIHBhcmFtZXRlciBpbiBkMyk6CiMgd2UgY2xlYXIgdGhlIHZhbHVlIGhlcmUgaWYgaXQgc2hvdWxkIGFjdHVhbGx5IGJlIHN1cHByZXNzZWQuCmZiYXNlX3N1cHBfY2s6CglidHN0CQkmMHg3LCVkNQkJIyBpcyB0aGUgYmQgc3VwcHJlc3NlZD8KCWJlcS5iCQlmbm9fYmFzZV9zdXAKCWNsci5sCQklZDMKCiMgYmFzZSBkaXNwbGFjZW1lbnQ6CmZub19iYXNlX3N1cDoKCWJmZXh0dQkJJWQ1eyYyNjomMn0sJWQwCQkjIGdldCBiZCBzaXplCiMJYmVxLmwJCWZtb3ZtX2Vycm9yCQkjIGlmIChzaXplID09IDApIGl0J3MgcmVzZXJ2ZWQKCgljbXBpLmIJCSVkMCwmMHgyCglibHQuYgkJZm5vX2JkCgliZXEuYgkJZmdldF93b3JkX2JkCgoJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgoJYWRkcS5sCQkmMHg0LEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgoJYnNyLmwJCV9pbWVtX3JlYWRfbG9uZwoKCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KCWJuZS5sCQlmY2VhX2lhY2MJCSMgeWVzCgoJYnJhLmIJCWZjaGtfaW5kCgpmZ2V0X3dvcmRfYmQ6Cgltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCglhZGRxLmwJCSYweDIsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCglic3IubAkJX2ltZW1fcmVhZF93b3JkCgoJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPwoJYm5lLmwJCWZjZWFfaWFjYwkJIyB5ZXMKCglleHQubAkJJWQwCQkJIyBzaWduIGV4dGVuZCBiZAoKZmNoa19pbmQ6CglhZGQubAkJJWQwLCVkMwkJCSMgYmFzZSArPSBiZAoKIyBvdXRlciBkaXNwbGFjZW1lbnQ6CmZub19iZDoKCWJmZXh0dQkJJWQ1eyYzMDomMn0sJWQwCQkjIGlzIG9kIHN1cHByZXNzZWQ/CgliZXEudwkJZmFpaV9iZAoKCWNtcGkuYgkJJWQwLCYweDIKCWJsdC5iCQlmbnVsbF9vZAoJYmVxLmIJCWZ3b3JkX29kCgoJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgoJYWRkcS5sCQkmMHg0LEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgoJYnNyLmwJCV9pbWVtX3JlYWRfbG9uZwoKCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KCWJuZS5sCQlmY2VhX2lhY2MJCSMgeWVzCgoJYnJhLmIJCWZhZGRfdGhlbQoKZndvcmRfb2Q6Cgltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCglhZGRxLmwJCSYweDIsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCglic3IubAkJX2ltZW1fcmVhZF93b3JkCgoJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPwoJYm5lLmwJCWZjZWFfaWFjYwkJIyB5ZXMKCglleHQubAkJJWQwCQkJIyBzaWduIGV4dGVuZCBvZAoJYnJhLmIJCWZhZGRfdGhlbQoKZm51bGxfb2Q6CgljbHIubAkJJWQwCgpmYWRkX3RoZW06Cgltb3YubAkJJWQwLCVkNAoKCWJ0c3QJCSYweDIsJWQ1CQkjIHByZSBvciBwb3N0IGluZGV4aW5nPwoJYmVxLmIJCWZwcmVfaW5kZXhlZAoKCW1vdi5sCQklZDMsJWEwCglic3IubAkJX2RtZW1fcmVhZF9sb25nCgoJdHN0LmwJCSVkMQkJCSMgZGlkIGRmZXRjaCBmYWlsPwoJYm5lLncJCWZjZWFfZXJyCQkjIHllcwoKCWFkZC5sCQklZDIsJWQwCQkJIyA8ZWE+ICs9IGluZGV4CglhZGQubAkJJWQ0LCVkMAkJCSMgPGVhPiArPSBvZAoJYnJhLmIJCWZkb25lX2VhCgpmcHJlX2luZGV4ZWQ6CglhZGQubAkJJWQyLCVkMwkJCSMgcHJlaW5kZXhpbmcKCW1vdi5sCQklZDMsJWEwCglic3IubAkJX2RtZW1fcmVhZF9sb25nCgoJdHN0LmwJCSVkMQkJCSMgZGlkIGRmZXRjaCBmYWlsPwoJYm5lLncJCWZjZWFfZXJyCQkjIHllcwoKCWFkZC5sCQklZDQsJWQwCQkJIyBlYSArPSBvZAoJYnJhLmIJCWZkb25lX2VhCgpmYWlpX2JkOgoJYWRkLmwJCSVkMiwlZDMJCQkjIGVhID0gKGJhc2UgKyBiZCkgKyBpbmRleAoJbW92LmwJCSVkMywlZDAKZmRvbmVfZWE6Cgltb3YubAkJJWQwLCVhMAoKCW1vdm0ubAkJKCVzcCkrLCYweDAwM2MJCSMgcmVzdG9yZSBkMi1kNQoJcnRzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZmNlYV9lcnI6Cgltb3YubAkJJWQzLCVhMAoKCW1vdm0ubAkJKCVzcCkrLCYweDAwM2MJCSMgcmVzdG9yZSBkMi1kNQoJbW92LncJCSYweDAxMDEsJWQwCglicmEubAkJaWVhX2RhY2MKCmZjZWFfaWFjYzoKCW1vdm0ubAkJKCVzcCkrLCYweDAwM2MJCSMgcmVzdG9yZSBkMi1kNQoJYnJhLmwJCWllYV9pYWNjCgpmbW92bV9vdXRfZXJyOgoJYnNyLmwJCXJlc3RvcmUKCW1vdi53CQkmMHgwMGUxLCVkMAoJYnJhLmIJCWZtb3ZtX2VycgoKZm1vdm1faW5fZXJyOgoJYnNyLmwJCXJlc3RvcmUKCW1vdi53CQkmMHgwMTYxLCVkMAoKZm1vdm1fZXJyOgoJbW92LmwJCUxfU0NSMSglYTYpLCVhMAoJYnJhLmwJCWllYV9kYWNjCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlmbW92bV9jdHJsKCk6IGVtdWxhdGUgZm1vdm0ubCBvZiBjb250cm9sIHJlZ2lzdGVycyBpbnN0cgkjCiMJCQkJCQkJCQkjCiMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlfaW1lbV9yZWFkX2xvbmcoKSAtIHJlYWQgbG9uZ3dvcmQgZnJvbSBtZW1vcnkJCQkjCiMJaWVhX2lhY2MoKSAtIF9pbWVtX3JlYWRfbG9uZygpIGZhaWxlZDsgZXJyb3IgcmVjb3ZlcnkJCSMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCU5vbmUJCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCUlmIF9pbWVtX3JlYWRfbG9uZygpIGRvZXNuJ3QgZmFpbDoJCQkJIwojCQlVU0VSX0ZQQ1IoYTYpICA9IG5ldyBGUENSIHZhbHVlCQkJCSMKIwkJVVNFUl9GUFNSKGE2KSAgPSBuZXcgRlBTUiB2YWx1ZQkJCQkjCiMJCVVTRVJfRlBJQVIoYTYpID0gbmV3IEZQSUFSIHZhbHVlCQkJIwojCQkJCQkJCQkJIwojIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJRGVjb2RlIHRoZSBpbnN0cnVjdGlvbiB0eXBlIGJ5IGxvb2tpbmcgYXQgdGhlIGV4dGVuc2lvbiB3b3JkCSMKIyBpbiBvcmRlciB0byBzZWUgaG93IG1hbnkgY29udHJvbCByZWdpc3RlcnMgdG8gZmV0Y2ggZnJvbSBtZW1vcnkuCSMKIyBGZXRjaCB0aGVtIHVzaW5nIF9pbWVtX3JlYWRfbG9uZygpLiBJZiB0aGlzIGZldGNoIGZhaWxzLCBleGl0IHRocm91Z2gJIwojIHRoZSBzcGVjaWFsIGFjY2VzcyBlcnJvciBleGl0IGhhbmRsZXIgaWVhX2lhY2MoKS4JCQkjCiMJCQkJCQkJCQkjCiMgSW5zdHJ1Y3Rpb24gd29yZCBkZWNvZGluZzoJCQkJCQkjCiMJCQkJCQkJCQkjCiMJZm1vdmVtLmwgIzxkYXRhPiwge0ZQSUFSJnxGUENSJnxGUFNSfQkJCQkjCiMJCQkJCQkJCQkjCiMJCVdPUkQxCQkJV09SRDIJCQkJIwojCTExMTEgMDAxMCAwMCAxMTExMDAJMTAwJCAkJDAwIDAwMDAgMDAwMAkJCSMKIwkJCQkJCQkJCSMKIwkkJCQgKDEwMCk6IEZQQ1IJCQkJCQkJIwojCSAgICAoMDEwKTogRlBTUgkJCQkJCQkjCiMJICAgICgwMDEpOiBGUElBUgkJCQkJCSMKIwkgICAgKDAwMCk6IEZQSUFSCQkJCQkJIwojCQkJCQkJCQkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoJZ2xvYmFsCQlmbW92bV9jdHJsCmZtb3ZtX2N0cmw6Cgltb3YuYgkJRVhDX0VYVFdPUkQoJWE2KSwlZDAJIyBmZXRjaCByZWcgc2VsZWN0IGJpdHMKCWNtcGkuYgkJJWQwLCYweDljCQkjIGZwY3IgJiBmcHNyICYgZnBpYXIgPwoJYmVxLncJCWZjdHJsX2luXzcJCSMgeWVzCgljbXBpLmIJCSVkMCwmMHg5OAkJIyBmcGNyICYgZnBzciA/CgliZXEudwkJZmN0cmxfaW5fNgkJIyB5ZXMKCWNtcGkuYgkJJWQwLCYweDk0CQkjIGZwY3IgJiBmcGlhciA/CgliZXEuYgkJZmN0cmxfaW5fNQkJIyB5ZXMKCiMgZm1vdmVtLmwgIzxkYXRhPiwgZnBzci9mcGlhcgpmY3RybF9pbl8zOgoJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgoJYWRkcS5sCQkmMHg0LEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgoJYnNyLmwJCV9pbWVtX3JlYWRfbG9uZwkJIyBmZXRjaCBGUFNSIGZyb20gbWVtCgoJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPwoJYm5lLmwJCWllYV9pYWNjCQkjIHllcwoKCW1vdi5sCQklZDAsVVNFUl9GUFNSKCVhNikJIyBzdG9yZSBuZXcgRlBTUiB0byBzdGFjawoJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgoJYWRkcS5sCQkmMHg0LEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgoJYnNyLmwJCV9pbWVtX3JlYWRfbG9uZwkJIyBmZXRjaCBGUElBUiBmcm9tIG1lbQoKCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KCWJuZS5sCQlpZWFfaWFjYwkJIyB5ZXMKCgltb3YubAkJJWQwLFVTRVJfRlBJQVIoJWE2KQkjIHN0b3JlIG5ldyBGUElBUiB0byBzdGFjawoJcnRzCgojIGZtb3ZlbS5sICM8ZGF0YT4sIGZwY3IvZnBpYXIKZmN0cmxfaW5fNToKCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKCWJzci5sCQlfaW1lbV9yZWFkX2xvbmcJCSMgZmV0Y2ggRlBDUiBmcm9tIG1lbQoKCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KCWJuZS5sCQlpZWFfaWFjYwkJIyB5ZXMKCgltb3YubAkJJWQwLFVTRVJfRlBDUiglYTYpCSMgc3RvcmUgbmV3IEZQQ1IgdG8gc3RhY2sKCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKCWJzci5sCQlfaW1lbV9yZWFkX2xvbmcJCSMgZmV0Y2ggRlBJQVIgZnJvbSBtZW0KCgl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CglibmUubAkJaWVhX2lhY2MJCSMgeWVzCgoJbW92LmwJCSVkMCxVU0VSX0ZQSUFSKCVhNikJIyBzdG9yZSBuZXcgRlBJQVIgdG8gc3RhY2sKCXJ0cwoKIyBmbW92ZW0ubCAjPGRhdGE+LCBmcGNyL2Zwc3IKZmN0cmxfaW5fNjoKCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKCWJzci5sCQlfaW1lbV9yZWFkX2xvbmcJCSMgZmV0Y2ggRlBDUiBmcm9tIG1lbQoKCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KCWJuZS5sCQlpZWFfaWFjYwkJIyB5ZXMKCgltb3YubAkJJWQwLFVTRVJfRlBDUiglYTYpCSMgc3RvcmUgbmV3IEZQQ1IgdG8gbWVtCgltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCglhZGRxLmwJCSYweDQsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCglic3IubAkJX2ltZW1fcmVhZF9sb25nCQkjIGZldGNoIEZQU1IgZnJvbSBtZW0KCgl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CglibmUubAkJaWVhX2lhY2MJCSMgeWVzCgoJbW92LmwJCSVkMCxVU0VSX0ZQU1IoJWE2KQkjIHN0b3JlIG5ldyBGUFNSIHRvIG1lbQoJcnRzCgojIGZtb3ZlbS5sICM8ZGF0YT4sIGZwY3IvZnBzci9mcGlhcgpmY3RybF9pbl83OgoJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgoJYWRkcS5sCQkmMHg0LEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgoJYnNyLmwJCV9pbWVtX3JlYWRfbG9uZwkJIyBmZXRjaCBGUENSIGZyb20gbWVtCgoJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPwoJYm5lLmwJCWllYV9pYWNjCQkjIHllcwoKCW1vdi5sCQklZDAsVVNFUl9GUENSKCVhNikJIyBzdG9yZSBuZXcgRlBDUiB0byBtZW0KCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKCWJzci5sCQlfaW1lbV9yZWFkX2xvbmcJCSMgZmV0Y2ggRlBTUiBmcm9tIG1lbQoKCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KCWJuZS5sCQlpZWFfaWFjYwkJIyB5ZXMKCgltb3YubAkJJWQwLFVTRVJfRlBTUiglYTYpCSMgc3RvcmUgbmV3IEZQU1IgdG8gbWVtCgltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCglhZGRxLmwJCSYweDQsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCglic3IubAkJX2ltZW1fcmVhZF9sb25nCQkjIGZldGNoIEZQSUFSIGZyb20gbWVtCgoJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPwoJYm5lLmwJCWllYV9pYWNjCQkjIHllcwoKCW1vdi5sCQklZDAsVVNFUl9GUElBUiglYTYpCSMgc3RvcmUgbmV3IEZQSUFSIHRvIG1lbQoJcnRzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlfZGNhbGNfZWEoKTogY2FsYyBjb3JyZWN0IDxlYT4gZnJvbSA8ZWE+IHN0YWNrZWQgb24gZXhjZXB0aW9uCSMKIwkJCQkJCQkJCSMKIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWluY19hcmVnKCkgLSBpbmNyZW1lbnQgYW4gYWRkcmVzcyByZWdpc3RlcgkJCSMKIwlkZWNfYXJlZygpIC0gZGVjcmVtZW50IGFuIGFkZHJlc3MgcmVnaXN0ZXIJCQkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlkMCA9IG51bWJlciBvZiBieXRlcyB0byBhZGp1c3QgPGVhPiBieQkJCQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlOb25lCQkJCQkJCQkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIyAiRHVtbXkiIENBTEN1bGF0ZSBFZmZlY3RpdmUgQWRkcmVzczoJCQkJCSMKIwlUaGUgc3RhY2tlZCA8ZWE+IGZvciBGUCB1bmltcGxlbWVudGVkIGluc3RydWN0aW9ucyBhbmQgb3BjbGFzcwkjCiMJdHdvIHBhY2tlZCBpbnN0cnVjdGlvbnMgaXMgY29ycmVjdCB3aXRoIHRoZSBleGNlcHRpb24gb2YuLi4JIwojCQkJCQkJCQkJIwojCTEpIC0oQW4pICAgOiBUaGUgcmVnaXN0ZXIgaXMgbm90IHVwZGF0ZWQgcmVnYXJkbGVzcyBvZiBzaXplLgkjCiMJCSAgICAgQWxzbywgZm9yIGV4dGVuZGVkIHByZWNpc2lvbiBhbmQgcGFja2VkLCB0aGUJIwojCQkgICAgIHN0YWNrZWQgPGVhPiB2YWx1ZSBpcyA4IGJ5dGVzIHRvbyBiaWcJCSMKIwkyKSAoQW4pKyAgIDogVGhlIHJlZ2lzdGVyIGlzIG5vdCB1cGRhdGVkLgkJCSMKIwkzKSAjPGRhdGE+IDogVGhlIHVwcGVyIGxvbmd3b3JkIG9mIHRoZSBpbW1lZGlhdGUgb3BlcmFuZCBpcwkjCiMJCSAgICAgc3RhY2tlZCBiLHcsbCBhbmQgcyBzaXplcyBhcmUgY29tcGxldGVseSBzdGFja2VkLgkjCiMJCSAgICAgZCx4LCBhbmQgcCBhcmUgbm90LgkJCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCglnbG9iYWwJCV9kY2FsY19lYQpfZGNhbGNfZWE6Cgltb3YubAkJJWQwLCAlYTAJCSMgbW92ZSAjIGJ5dGVzIHRvICVhMAoKCW1vdi5iCQkxK0VYQ19PUFdPUkQoJWE2KSwgJWQwCSMgZmV0Y2ggb3Bjb2RlIHdvcmQKCW1vdi5sCQklZDAsICVkMQkJIyBtYWtlIGEgY29weQoKCWFuZGkudwkJJjB4MzgsICVkMAkJIyBleHRyYWN0IG1vZGUgZmllbGQKCWFuZGkubAkJJjB4NywgJWQxCQkjIGV4dHJhY3QgcmVnICBmaWVsZAoKCWNtcGkuYgkJJWQwLCYweDE4CQkjIGlzIG1vZGUgKEFuKSsgPwoJYmVxLmIJCWRjZWFfcGkJCQkjIHllcwoKCWNtcGkuYgkJJWQwLCYweDIwCQkjIGlzIG1vZGUgLShBbikgPwoJYmVxLmIJCWRjZWFfcGQJCQkjIHllcwoKCW9yLncJCSVkMSwlZDAJCQkjIGNvbmNhdCBtb2RlLHJlZwoJY21waS5iCQklZDAsJjB4M2MJCSMgaXMgbW9kZSAjPGRhdGE+PwoKCWJlcS5iCQlkY2VhX2ltbQkJIyB5ZXMKCgltb3YubAkJRVhDX0VBKCVhNiksJWEwCQkjIHJldHVybiA8ZWE+CglydHMKCiMgbmVlZCB0byBzZXQgaW1tZWRpYXRlIGRhdGEgZmxhZyBoZXJlIHNpbmNlIHdlJ2xsIG5lZWQgdG8gZG8KIyBhbiBpbWVtX3JlYWQgdG8gZmV0Y2ggdGhpcyBsYXRlci4KZGNlYV9pbW06Cgltb3YuYgkJJmltbWVkX2ZsZyxTUENPTkRfRkxHKCVhNikKCWxlYQkJKFtVU0VSX0ZQSUFSLCVhNl0sMHg0KSwlYTAgIyBubzsgcmV0dXJuIDxlYT4KCXJ0cwoKIyBoZXJlLCB0aGUgPGVhPiBpcyBzdGFja2VkIGNvcnJlY3RseS4gaG93ZXZlciwgd2UgbXVzdCB1cGRhdGUgdGhlCiMgYWRkcmVzcyByZWdpc3Rlci4uLgpkY2VhX3BpOgoJbW92LmwJCSVhMCwlZDAJCQkjIHBhc3MgYW10IHRvIGluYyBieQoJYnNyLmwJCWluY19hcmVnCQkjIGluYyBhZGRyIHJlZ2lzdGVyCgoJbW92LmwJCUVYQ19FQSglYTYpLCVhMAkJIyBzdGFja2VkIDxlYT4gaXMgY29ycmVjdAoJcnRzCgojIHRoZSA8ZWE+IGlzIHN0YWNrZWQgY29ycmVjdGx5IGZvciBhbGwgYnV0IGV4dGVuZGVkIGFuZCBwYWNrZWQgd2hpY2gKIyB0aGUgPGVhPnMgYXJlIDggYnl0ZXMgdG9vIGxhcmdlLgojIGl0IHdvdWxkIG1ha2Ugbm8gc2Vuc2UgdG8gaGF2ZSBhIHByZS1kZWNyZW1lbnQgdG8gYTcgaW4gc3VwZXJ2aXNvcgojIG1vZGUgc28gd2UgZG9uJ3QgZXZlbiB3b3JyeSBhYm91dCB0aGlzIHRyaWNreSBjYXNlIGhlcmUgOiApCmRjZWFfcGQ6Cgltb3YubAkJJWEwLCVkMAkJCSMgcGFzcyBhbXQgdG8gZGVjIGJ5Cglic3IubAkJZGVjX2FyZWcJCSMgZGVjIGFkZHIgcmVnaXN0ZXIKCgltb3YubAkJRVhDX0VBKCVhNiksJWEwCQkjIHN0YWNrZWQgPGVhPiBpcyBjb3JyZWN0CgoJY21waS5iCQklZDAsJjB4YwkJIyBpcyBvcHNpemUgZXh0IG9yIHBhY2tlZD8KCWJlcS5iCQlkY2VhX3BkMgkJIyB5ZXMKCXJ0cwpkY2VhX3BkMjoKCXN1Yi5sCQkmMHg4LCVhMAkJIyBjb3JyZWN0IDxlYT4KCW1vdi5sCQklYTAsRVhDX0VBKCVhNikJCSMgcHV0IGNvcnJlY3QgPGVhPiBvbiBzdGFjawoJcnRzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlfY2FsY19lYV9mb3V0KCk6IGNhbGN1bGF0ZSBjb3JyZWN0IHN0YWNrZWQgPGVhPiBmb3IgZXh0ZW5kZWQJIwojCQkJIGFuZCBwYWNrZWQgZGF0YSBvcGNsYXNzIDMgb3BlcmF0aW9ucy4JCSMKIwkJCQkJCQkJCSMKIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCU5vbmUJCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCU5vbmUJCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWEwID0gcmV0dXJuIGNvcnJlY3QgZWZmZWN0aXZlIGFkZHJlc3MJCQkJIwojCQkJCQkJCQkJIwojIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJRm9yIG9wY2xhc3MgMyBleHRlbmRlZCBhbmQgcGFja2VkIGRhdGEgb3BlcmF0aW9ucywgdGhlIDxlYT4JIwojIHN0YWNrZWQgZm9yIHRoZSBleGNlcHRpb24gaXMgaW5jb3JyZWN0IGZvciAtKGFuKSBhbmQgKGFuKSsgYWRkcmVzc2luZwkjCiMgbW9kZXMuIEFsc28sIHdoaWxlIHdlJ3JlIGF0IGl0LCB0aGUgaW5kZXggcmVnaXN0ZXIgaXRzZWxmIG11c3QgZ2V0CSMKIyB1cGRhdGVkLgkJCQkJCQkJIwojCVNvLCBmb3IgLShhbiksIHdlIG11c3Qgc3VidHJhY3QgOCBvZmYgb2YgdGhlIHN0YWNrZWQgPGVhPiB2YWx1ZQkjCiMgYW5kIHJldHVybiB0aGF0IHZhbHVlIGFzIHRoZSBjb3JyZWN0IDxlYT4gYW5kIHN0b3JlIHRoYXQgdmFsdWUgaW4gQW4uCSMKIyBGb3IgKGFuKSssIHRoZSBzdGFja2VkIDxlYT4gaXMgY29ycmVjdCBidXQgd2UgbXVzdCBhZGp1c3QgQW4gYnkgKzEyLgkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMgVGhpcyBjYWxjX2VhIGlzIGN1cnJlbnRseSB1c2VkIHRvIHJldHJpZXZlIHRoZSBjb3JyZWN0IDxlYT4KIyBmb3IgZm1vdmUgb3V0cyBvZiB0eXBlIGV4dGVuZGVkIGFuZCBwYWNrZWQuCglnbG9iYWwJCV9jYWxjX2VhX2ZvdXQKX2NhbGNfZWFfZm91dDoKCW1vdi5iCQkxK0VYQ19PUFdPUkQoJWE2KSwlZDAJIyBmZXRjaCBvcGNvZGUgd29yZAoJbW92LmwJCSVkMCwlZDEJCQkjIG1ha2UgYSBjb3B5CgoJYW5kaS53CQkmMHgzOCwlZDAJCSMgZXh0cmFjdCBtb2RlIGZpZWxkCglhbmRpLmwJCSYweDcsJWQxCQkjIGV4dHJhY3QgcmVnICBmaWVsZAoKCWNtcGkuYgkJJWQwLCYweDE4CQkjIGlzIG1vZGUgKEFuKSsgPwoJYmVxLmIJCWNlYWZfcGkJCQkjIHllcwoKCWNtcGkuYgkJJWQwLCYweDIwCQkjIGlzIG1vZGUgLShBbikgPwoJYmVxLncJCWNlYWZfcGQJCQkjIHllcwoKCW1vdi5sCQlFWENfRUEoJWE2KSwlYTAJCSMgc3RhY2tlZCA8ZWE+IGlzIGNvcnJlY3QKCXJ0cwoKIyAoQW4pKyA6IGV4dGVuZGVkIGFuZCBwYWNrZWQgZm1vdmUgb3V0CiMJOiBzdGFja2VkIDxlYT4gaXMgY29ycmVjdAojCTogIkFuIiBub3QgdXBkYXRlZApjZWFmX3BpOgoJbW92LncJCSh0YmxfY2VhZl9waS5iLCVwYywlZDEudyoyKSwlZDEKCW1vdi5sCQlFWENfRUEoJWE2KSwlYTAKCWptcAkJKHRibF9jZWFmX3BpLmIsJXBjLCVkMS53KjEpCgoJc3diZWcJCSYweDgKdGJsX2NlYWZfcGk6CglzaG9ydAkJY2VhZl9waTAgLSB0YmxfY2VhZl9waQoJc2hvcnQJCWNlYWZfcGkxIC0gdGJsX2NlYWZfcGkKCXNob3J0CQljZWFmX3BpMiAtIHRibF9jZWFmX3BpCglzaG9ydAkJY2VhZl9waTMgLSB0YmxfY2VhZl9waQoJc2hvcnQJCWNlYWZfcGk0IC0gdGJsX2NlYWZfcGkKCXNob3J0CQljZWFmX3BpNSAtIHRibF9jZWFmX3BpCglzaG9ydAkJY2VhZl9waTYgLSB0YmxfY2VhZl9waQoJc2hvcnQJCWNlYWZfcGk3IC0gdGJsX2NlYWZfcGkKCmNlYWZfcGkwOgoJYWRkaS5sCQkmMHhjLEVYQ19EUkVHUysweDgoJWE2KQoJcnRzCmNlYWZfcGkxOgoJYWRkaS5sCQkmMHhjLEVYQ19EUkVHUysweGMoJWE2KQoJcnRzCmNlYWZfcGkyOgoJYWRkLmwJCSYweGMsJWEyCglydHMKY2VhZl9waTM6CglhZGQubAkJJjB4YywlYTMKCXJ0cwpjZWFmX3BpNDoKCWFkZC5sCQkmMHhjLCVhNAoJcnRzCmNlYWZfcGk1OgoJYWRkLmwJCSYweGMsJWE1CglydHMKY2VhZl9waTY6CglhZGRpLmwJCSYweGMsRVhDX0E2KCVhNikKCXJ0cwpjZWFmX3BpNzoKCW1vdi5iCQkmbWlhN19mbGcsU1BDT05EX0ZMRyglYTYpCglhZGRpLmwJCSYweGMsRVhDX0E3KCVhNikKCXJ0cwoKIyAtKEFuKSA6IGV4dGVuZGVkIGFuZCBwYWNrZWQgZm1vdmUgb3V0CiMJOiBzdGFja2VkIDxlYT4gPSBhY3R1YWwgPGVhPiArIDgKIwk6ICJBbiIgbm90IHVwZGF0ZWQKY2VhZl9wZDoKCW1vdi53CQkodGJsX2NlYWZfcGQuYiwlcGMsJWQxLncqMiksJWQxCgltb3YubAkJRVhDX0VBKCVhNiksJWEwCglzdWIubAkJJjB4OCwlYTAKCXN1Yi5sCQkmMHg4LEVYQ19FQSglYTYpCglqbXAJCSh0YmxfY2VhZl9wZC5iLCVwYywlZDEudyoxKQoKCXN3YmVnCQkmMHg4CnRibF9jZWFmX3BkOgoJc2hvcnQJCWNlYWZfcGQwIC0gdGJsX2NlYWZfcGQKCXNob3J0CQljZWFmX3BkMSAtIHRibF9jZWFmX3BkCglzaG9ydAkJY2VhZl9wZDIgLSB0YmxfY2VhZl9wZAoJc2hvcnQJCWNlYWZfcGQzIC0gdGJsX2NlYWZfcGQKCXNob3J0CQljZWFmX3BkNCAtIHRibF9jZWFmX3BkCglzaG9ydAkJY2VhZl9wZDUgLSB0YmxfY2VhZl9wZAoJc2hvcnQJCWNlYWZfcGQ2IC0gdGJsX2NlYWZfcGQKCXNob3J0CQljZWFmX3BkNyAtIHRibF9jZWFmX3BkCgpjZWFmX3BkMDoKCW1vdi5sCQklYTAsRVhDX0RSRUdTKzB4OCglYTYpCglydHMKY2VhZl9wZDE6Cgltb3YubAkJJWEwLEVYQ19EUkVHUysweGMoJWE2KQoJcnRzCmNlYWZfcGQyOgoJbW92LmwJCSVhMCwlYTIKCXJ0cwpjZWFmX3BkMzoKCW1vdi5sCQklYTAsJWEzCglydHMKY2VhZl9wZDQ6Cgltb3YubAkJJWEwLCVhNAoJcnRzCmNlYWZfcGQ1OgoJbW92LmwJCSVhMCwlYTUKCXJ0cwpjZWFmX3BkNjoKCW1vdi5sCQklYTAsRVhDX0E2KCVhNikKCXJ0cwpjZWFmX3BkNzoKCW1vdi5sCQklYTAsRVhDX0E3KCVhNikKCW1vdi5iCQkmbWRhN19mbGcsU1BDT05EX0ZMRyglYTYpCglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCV9sb2FkX2ZvcCgpOiBsb2FkIG9wZXJhbmQgZm9yIHVuaW1wbGVtZW50ZWQgRlAgZXhjZXB0aW9uCSMKIwkJCQkJCQkJCSMKIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCXNldF90YWdfeCgpIC0gZGV0ZXJtaW5lIGV4dCBwcmVjIG9wdHlwZSB0YWcJCQkjCiMJc2V0X3RhZ19zKCkgLSBkZXRlcm1pbmUgc2dsIHByZWMgb3B0eXBlIHRhZwkJCSMKIwlzZXRfdGFnX2QoKSAtIGRldGVybWluZSBkYmwgcHJlYyBvcHR5cGUgdGFnCQkJIwojCXVubm9ybV9maXgoKSAtIGNvbnZlcnQgbm9ybWFsaXplZCBudW1iZXIgdG8gZGVub3JtIG9yIHplcm8JIwojCW5vcm0oKSAtIG5vcm1hbGl6ZSBhIGRlbm9ybWFsaXplZCBudW1iZXIJCQkjCiMJZ2V0X3BhY2tlZCgpIC0gZmV0Y2ggYSBwYWNrZWQgb3BlcmFuZCBmcm9tIG1lbW9yeQkJIwojCV9kY2FsY19lYSgpIC0gY2FsY3VsYXRlIDxlYT4sIGZpeGluZyBBbiBpbiBwcm9jZXNzCQkjCiMJCQkJCQkJCQkjCiMJX2ltZW1fcmVhZF97d29yZCxsb25nfSgpIC0gcmVhZCBmcm9tIGluc3RydWN0aW9uIG1lbW9yeQkJIwojCV9kbWVtX3JlYWQoKSAtIHJlYWQgZnJvbSBkYXRhIG1lbW9yeQkJCQkjCiMJX2RtZW1fcmVhZF97Ynl0ZSx3b3JkLGxvbmd9KCkgLSByZWFkIGZyb20gZGF0YSBtZW1vcnkJCSMKIwkJCQkJCQkJCSMKIwlmYWNjX2luX3tiLHcsbCxkLHh9KCkgLSBtZW0gcmVhZCBmYWlsZWQ7IHNwZWNpYWwgZXhpdCBwb2ludAkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlOb25lCQkJCQkJCQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlJZiBtZW1vcnkgYWNjZXNzIGRvZXNuJ3QgZmFpbDoJCQkJCSMKIwkJRlBfU1JDKGE2KSA9IHNvdXJjZSBvcGVyYW5kIGluIGV4dGVuZGVkIHByZWNpc2lvbgkjCiMJCUZQX0RTVChhNikgPSBkZXN0aW5hdGlvbiBvcGVyYW5kIGluIGV4dGVuZGVkIHByZWNpc2lvbgkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlUaGlzIGlzIGNhbGxlZCBmcm9tIHRoZSBVbmltcGxlbWVudGVkIEZQIGV4Y2VwdGlvbiBoYW5kbGVyIGluCSMKIyBvcmRlciB0byBsb2FkIHRoZSBzb3VyY2UgYW5kIG1heWJlIGRlc3RpbmF0aW9uIG9wZXJhbmQgaW50bwkJIwojIEZQX1NSQyhhNikgYW5kIEZQX0RTVChhNikuIElmIHRoZSBpbnN0cnVjdGlvbiB3YXMgb3BjbGFzcyB6ZXJvLCBsb2FkCSMKIyB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBmcm9tIHRoZSBGUCByZWdpc3RlciBmaWxlLiBTZXQgdGhlIG9wdHlwZQkjCiMgdGFncyBmb3IgYm90aCBpZiBkeWFkaWMsIG9uZSBmb3IgbW9uYWRpYy4gSWYgYSBudW1iZXIgaXMgYW4gVU5OT1JNLAkjCiMgY29udmVydCBpdCB0byBhIERFTk9STSBvciBhIFpFUk8uCQkJCQkjCiMJSWYgdGhlIGluc3RydWN0aW9uIGlzIG9wY2xhc3MgdHdvIChtZW1vcnktPnJlZyksIHRoZW4gZmV0Y2gJIwojIHRoZSBkZXN0aW5hdGlvbiBmcm9tIHRoZSByZWdpc3RlciBmaWxlIGFuZCB0aGUgc291cmNlIG9wZXJhbmQgZnJvbQkjCiMgbWVtb3J5LiBUYWcgYW5kIGZpeCBib3RoIGFzIGFib3ZlIHcvIG9wY2xhc3MgemVybyBpbnN0cnVjdGlvbnMuCSMKIwlJZiB0aGUgc291cmNlIG9wZXJhbmQgaXMgYnl0ZSx3b3JkLGxvbmcsIG9yIHNpbmdsZSwgaXQgbWF5IGJlCSMKIyBpbiB0aGUgZGF0YSByZWdpc3RlciBmaWxlLiBJZiBpdCdzIGFjdHVhbGx5IG91dCBpbiBtZW1vcnksIHVzZSBvbmUgb2YJIwojIHRoZSBtZW1fcmVhZCgpIHJvdXRpbmVzIHRvIGZldGNoIGl0LiBJZiB0aGUgbWVtX3JlYWQoKSBhY2Nlc3MgcmV0dXJucwkjCiMgYSBmYWlsaW5nIHZhbHVlLCBleGl0IHRocm91Z2ggdGhlIHNwZWNpYWwgZmFjY19pbigpIHJvdXRpbmUgd2hpY2gJIwojIHdpbGwgY3JlYXRlIGFuIGFjY2VzcyBlcnJvciBleGNlcHRpb24gZnJhbWUgZnJvbSB0aGUgY3VycmVudCBleGNlcHRpb24gIwojIGZyYW1lLgkJCQkJCQkJIwojCUltbWVkaWF0ZSBkYXRhIGFuZCByZWd1bGFyIGRhdGEgYWNjZXNzZXMgYXJlIHNlcGFyYXRlZCBiZWNhdXNlCSMKIyBpZiBhbiBpbW1lZGlhdGUgZGF0YSBhY2Nlc3MgZmFpbHMsIHRoZSByZXN1bHRpbmcgZmF1bHQgc3RhdHVzCQkjCiMgbG9uZ3dvcmQgc3RhY2tlZCBmb3IgdGhlIGFjY2VzcyBlcnJvciBleGNlcHRpb24gbXVzdCBoYXZlIHRoZQkJIwojIGluc3RydWN0aW9uIGJpdCBzZXQuCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCWdsb2JhbAkJX2xvYWRfZm9wCl9sb2FkX2ZvcDoKCiMgIDE1ICAgICAxMyAxMiAxMCAgOSA3ICA2ICAgICAgIDAKIyAvICAgICAgICBcIC8gICBcIC8gIFwgLyAgICAgICAgIFwKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyB8IG9wY2xhc3MgfCBSWCAgfCBSWSB8IEVYVEVOU0lPTiB8ICAoMm5kIHdvcmQgb2YgZ2VuZXJhbCBGUCBpbnN0cnVjdGlvbikKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwoKIwliZmV4dHUJCUVYQ19DTURSRUcoJWE2KXsmMDomM30sICVkMCAjIGV4dHJhY3Qgb3BjbGFzcwojCWNtcGkuYgkJJWQwLCAmMHgyCQkjIHdoaWNoIGNsYXNzIGlzIGl0PyAoJzAwMCwnMDEwLCcwMTEpCiMJYmVxLncJCW9wMDEwCQkJIyBoYW5kbGUgPGVhPiAtPiBmcG4KIwliZ3QudwkJb3AwMTEJCQkjIGhhbmRsZSBmcG4gLT4gPGVhPgoKIyB3ZSdyZSBub3QgdXNpbmcgb3AwMTEgZm9yIG5vdy4uLgoJYnRzdAkJJjB4NixFWENfQ01EUkVHKCVhNikKCWJuZS5iCQlvcDAxMAoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIE9QQ0xBU1MgJzAwMDogcmVnIC0+IHJlZyAjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKb3AwMDA6Cgltb3YuYgkJMStFWENfQ01EUkVHKCVhNiksJWQwCSMgZmV0Y2ggZXh0ZW5zaW9uIHdvcmQgbG8KCWJ0c3QJCSYweDUsJWQwCQkjIHRlc3RpbmcgZXh0ZW5zaW9uIGJpdHMKCWJlcS5iCQlvcDAwMF9zcmMJCSMgKGJpdCA1ID09IDApID0+IG1vbmFkaWMKCWJ0c3QJCSYweDQsJWQwCQkjIChiaXQgNSA9PSAxKQoJYmVxLmIJCW9wMDAwX2RzdAkJIyAoYml0IDQgPT0gMCkgPT4gZHlhZGljCglhbmQudwkJJjB4MDA3ZiwlZDAJCSMgZXh0cmFjdCBleHRlbnNpb24gYml0cyB7NjowfQoJY21waS53CQklZDAsJjB4MDAzOAkJIyBpcyBpdCBhbiBmY21wIChkeWFkaWMpID8KCWJuZS5iCQlvcDAwMF9zcmMJCSMgaXQncyBhbiBmY21wCgpvcDAwMF9kc3Q6CgliZmV4dHUJCUVYQ19DTURSRUcoJWE2KXsmNjomM30sICVkMCAjIGV4dHJhY3QgZHN0IGZpZWxkCglic3IubAkJbG9hZF9mcG4yCQkjIGZldGNoIGRzdCBmcHJlZyBpbnRvIEZQX0RTVAoKCWJzci5sCQlzZXRfdGFnX3gJCSMgZ2V0IGRzdCBvcHR5cGUgdGFnCgoJY21waS5iCQklZDAsICZVTk5PUk0JCSMgaXMgZHN0IGZwcmVnIGFuIFVOTk9STT8KCWJlcS5iCQlvcDAwMF9kc3RfdW5ub3JtCSMgeWVzCm9wMDAwX2RzdF9jb250OgoJbW92LmIJCSVkMCwgRFRBRyglYTYpCQkjIHN0b3JlIHRoZSBkc3Qgb3B0eXBlIHRhZwoKb3AwMDBfc3JjOgoJYmZleHR1CQlFWENfQ01EUkVHKCVhNil7JjM6JjN9LCAlZDAgIyBleHRyYWN0IHNyYyBmaWVsZAoJYnNyLmwJCWxvYWRfZnBuMQkJIyBmZXRjaCBzcmMgZnByZWcgaW50byBGUF9TUkMKCglic3IubAkJc2V0X3RhZ194CQkjIGdldCBzcmMgb3B0eXBlIHRhZwoKCWNtcGkuYgkJJWQwLCAmVU5OT1JNCQkjIGlzIHNyYyBmcHJlZyBhbiBVTk5PUk0/CgliZXEuYgkJb3AwMDBfc3JjX3Vubm9ybQkjIHllcwpvcDAwMF9zcmNfY29udDoKCW1vdi5iCQklZDAsIFNUQUcoJWE2KQkJIyBzdG9yZSB0aGUgc3JjIG9wdHlwZSB0YWcKCXJ0cwoKb3AwMDBfZHN0X3Vubm9ybToKCWJzci5sCQl1bm5vcm1fZml4CQkjIGZpeCB0aGUgZHN0IFVOTk9STQoJYnJhLmIJCW9wMDAwX2RzdF9jb250Cm9wMDAwX3NyY191bm5vcm06Cglic3IubAkJdW5ub3JtX2ZpeAkJIyBmaXggdGhlIHNyYyBVTk5PUk0KCWJyYS5iCQlvcDAwMF9zcmNfY29udAoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBPUENMQVNTICcwMTA6IDxlYT4gLT4gcmVnICMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKb3AwMTA6Cgltb3YudwkJRVhDX0NNRFJFRyglYTYpLCVkMAkjIGZldGNoIGV4dGVuc2lvbiB3b3JkCglidHN0CQkmMHg1LCVkMAkJIyB0ZXN0aW5nIGV4dGVuc2lvbiBiaXRzCgliZXEuYgkJb3AwMTBfc3JjCQkjIChiaXQgNSA9PSAwKSA9PiBtb25hZGljCglidHN0CQkmMHg0LCVkMAkJIyAoYml0IDUgPT0gMSkKCWJlcS5iCQlvcDAxMF9kc3QJCSMgKGJpdCA0ID09IDApID0+IGR5YWRpYwoJYW5kLncJCSYweDAwN2YsJWQwCQkjIGV4dHJhY3QgZXh0ZW5zaW9uIGJpdHMgezY6MH0KCWNtcGkudwkJJWQwLCYweDAwMzgJCSMgaXMgaXQgYW4gZmNtcCAoZHlhZGljKSA/CglibmUuYgkJb3AwMTBfc3JjCQkjIGl0J3MgYW4gZmNtcAoKb3AwMTBfZHN0OgoJYmZleHR1CQlFWENfQ01EUkVHKCVhNil7JjY6JjN9LCAlZDAgIyBleHRyYWN0IGRzdCBmaWVsZAoJYnNyLmwJCWxvYWRfZnBuMgkJIyBmZXRjaCBkc3QgZnByZWcgcHRyCgoJYnNyLmwJCXNldF90YWdfeAkJIyBnZXQgZHN0IHR5cGUgdGFnCgoJY21waS5iCQklZDAsICZVTk5PUk0JCSMgaXMgZHN0IGZwcmVnIGFuIFVOTk9STT8KCWJlcS5iCQlvcDAxMF9kc3RfdW5ub3JtCSMgeWVzCm9wMDEwX2RzdF9jb250OgoJbW92LmIJCSVkMCwgRFRBRyglYTYpCQkjIHN0b3JlIHRoZSBkc3Qgb3B0eXBlIHRhZwoKb3AwMTBfc3JjOgoJYmZleHR1CQlFWENfQ01EUkVHKCVhNil7JjM6JjN9LCAlZDAgIyBleHRyYWN0IHNyYyB0eXBlIGZpZWxkCgoJYmZleHR1CQlFWENfT1BXT1JEKCVhNil7JjEwOiYzfSwgJWQxICMgZXh0cmFjdCA8ZWE+IG1vZGUgZmllbGQKCWJuZS53CQlmZXRjaF9mcm9tX21lbQkJIyBzcmMgb3AgaXMgaW4gbWVtb3J5CgpvcDAxMF9kcmVnOgoJY2xyLmIJCVNUQUcoJWE2KQkJIyBlaXRoZXIgTk9STSBvciBaRVJPCgliZmV4dHUJCUVYQ19PUFdPUkQoJWE2KXsmMTM6JjN9LCAlZDEgIyBleHRyYWN0IHNyYyByZWcgZmllbGQKCgltb3YudwkJKHRibF9vcDAxMF9kcmVnLmIsJXBjLCVkMC53KjIpLCAlZDAgIyBqbXAgYmFzZWQgb24gb3B0eXBlCglqbXAJCSh0Ymxfb3AwMTBfZHJlZy5iLCVwYywlZDAudyoxKSAjIGZldGNoIHNyYyBmcm9tIGRyZWcKCm9wMDEwX2RzdF91bm5vcm06Cglic3IubAkJdW5ub3JtX2ZpeAkJIyBmaXggdGhlIGRzdCBVTk5PUk0KCWJyYS5iCQlvcDAxMF9kc3RfY29udAoKCXN3YmVnCQkmMHg4CnRibF9vcDAxMF9kcmVnOgoJc2hvcnQJCW9wZF9sb25nCS0gdGJsX29wMDEwX2RyZWcKCXNob3J0CQlvcGRfc2dsCQktIHRibF9vcDAxMF9kcmVnCglzaG9ydAkJdGJsX29wMDEwX2RyZWcJLSB0Ymxfb3AwMTBfZHJlZwoJc2hvcnQJCXRibF9vcDAxMF9kcmVnCS0gdGJsX29wMDEwX2RyZWcKCXNob3J0CQlvcGRfd29yZAktIHRibF9vcDAxMF9kcmVnCglzaG9ydAkJdGJsX29wMDEwX2RyZWcJLSB0Ymxfb3AwMTBfZHJlZwoJc2hvcnQJCW9wZF9ieXRlCS0gdGJsX29wMDEwX2RyZWcKCXNob3J0CQl0Ymxfb3AwMTBfZHJlZwktIHRibF9vcDAxMF9kcmVnCgojCiMgTE9ORzogY2FuIGJlIGVpdGhlciBOT1JNIG9yIFpFUk8uLi4KIwpvcGRfbG9uZzoKCWJzci5sCQlmZXRjaF9kcmVnCQkjIGZldGNoIGxvbmcgaW4gZDAKCWZtb3YubAkJJWQwLCAlZnAwCQkjIGxvYWQgYSBsb25nCglmbW92bS54CQkmMHg4MCwgRlBfU1JDKCVhNikJIyByZXR1cm4gc3JjIG9wIGluIEZQX1NSQwoJZmJlcS53CQlvcGRfbG9uZ196ZXJvCQkjIGxvbmcgaXMgYSBaRVJPCglydHMKb3BkX2xvbmdfemVybzoKCW1vdi5iCQkmWkVSTywgU1RBRyglYTYpCSMgc2V0IFpFUk8gb3B0eXBlIGZsYWcKCXJ0cwoKIwojIFdPUkQ6IGNhbiBiZSBlaXRoZXIgTk9STSBvciBaRVJPLi4uCiMKb3BkX3dvcmQ6Cglic3IubAkJZmV0Y2hfZHJlZwkJIyBmZXRjaCB3b3JkIGluIGQwCglmbW92LncJCSVkMCwgJWZwMAkJIyBsb2FkIGEgd29yZAoJZm1vdm0ueAkJJjB4ODAsIEZQX1NSQyglYTYpCSMgcmV0dXJuIHNyYyBvcCBpbiBGUF9TUkMKCWZiZXEudwkJb3BkX3dvcmRfemVybwkJIyBXT1JEIGlzIGEgWkVSTwoJcnRzCm9wZF93b3JkX3plcm86Cgltb3YuYgkJJlpFUk8sIFNUQUcoJWE2KQkjIHNldCBaRVJPIG9wdHlwZSBmbGFnCglydHMKCiMKIyBCWVRFOiBjYW4gYmUgZWl0aGVyIE5PUk0gb3IgWkVSTy4uLgojCm9wZF9ieXRlOgoJYnNyLmwJCWZldGNoX2RyZWcJCSMgZmV0Y2ggd29yZCBpbiBkMAoJZm1vdi5iCQklZDAsICVmcDAJCSMgbG9hZCBhIGJ5dGUKCWZtb3ZtLngJCSYweDgwLCBGUF9TUkMoJWE2KQkjIHJldHVybiBzcmMgb3AgaW4gRlBfU1JDCglmYmVxLncJCW9wZF9ieXRlX3plcm8JCSMgYnl0ZSBpcyBhIFpFUk8KCXJ0cwpvcGRfYnl0ZV96ZXJvOgoJbW92LmIJCSZaRVJPLCBTVEFHKCVhNikJIyBzZXQgWkVSTyBvcHR5cGUgZmxhZwoJcnRzCgojCiMgU0dMOiBjYW4gYmUgZWl0aGVyIE5PUk0sIERFTk9STSwgWkVSTywgSU5GLCBRTkFOIG9yIFNOQU4gYnV0IG5vdCBVTk5PUk0KIwojIHNlcGFyYXRlIFNOQU5zIGFuZCBERU5PUk1zIHNvIHRoZXkgY2FuIGJlIGxvYWRlZCB3LyBzcGVjaWFsIGNhcmUuCiMgYWxsIG90aGVycyBjYW4gc2ltcGx5IGJlIG1vdmVkICJpbiIgdXNpbmcgZm1vdmUuCiMKb3BkX3NnbDoKCWJzci5sCQlmZXRjaF9kcmVnCQkjIGZldGNoIHNnbCBpbiBkMAoJbW92LmwJCSVkMCxMX1NDUjEoJWE2KQoKCWxlYQkJTF9TQ1IxKCVhNiksICVhMAkjIHBhc3M6IHB0ciB0byB0aGUgc2dsCglic3IubAkJc2V0X3RhZ19zCQkjIGRldGVybWluZSBzZ2wgdHlwZQoJbW92LmIJCSVkMCwgU1RBRyglYTYpCQkjIHNhdmUgdGhlIHNyYyB0YWcKCgljbXBpLmIJCSVkMCwgJlNOQU4JCSMgaXMgaXQgYW4gU05BTj8KCWJlcS53CQlnZXRfc2dsX3NuYW4JCSMgeWVzCgoJY21waS5iCQklZDAsICZERU5PUk0JCSMgaXMgaXQgYSBERU5PUk0/CgliZXEudwkJZ2V0X3NnbF9kZW5vcm0JCSMgeWVzCgoJZm1vdi5zCQkoJWEwKSwgJWZwMAkJIyBubywgc28gY2FuIGxvYWQgaXQgcmVndWxhcgoJZm1vdm0ueAkJJjB4ODAsIEZQX1NSQyglYTYpCSMgcmV0dXJuIHNyYyBvcCBpbiBGUF9TUkMKCXJ0cwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgZmV0Y2hfZnJvbV9tZW0oKToJCQkJCQkJIwojIC0gc3JjIGlzIG91dCBpbiBtZW1vcnkuIG11c3Q6CQkJCQkJIwojCSgxKSBjYWxjIGVhIC0gbXVzdCByZWFkIEFGVEVSIHlvdSBrbm93IHRoZSBzcmMgdHlwZSBzaW5jZQkjCiMJCSAgICAgIGlmIHRoZSBlYSBpcyAtKCkgb3IgKCkrLCBuZWVkIHRvIGtub3cgIyBvZiBieXRlcy4JIwojCSgyKSByZWFkIGl0IGluIGZyb20gZWl0aGVyIHVzZXIgb3Igc3VwZXJ2aXNvciBzcGFjZQkJIwojCSgzKSBpZiAoYiB8fCB3IHx8IGwpIHRoZW4gc2ltcGx5IHJlYWQgaW4JCQkjCiMJICAgIGlmIChzIHx8IGQgfHwgeCkgdGhlbiBjaGVjayBmb3IgU05BTixVTk5PUk0sREVOT1JNCQkjCiMJICAgIGlmIChwYWNrZWQpIHRoZW4gcHVudCBmb3Igbm93CQkJCSMKIyBJTlBVVDoJCQkJCQkJCSMKIwklZDAgOiBzcmMgdHlwZSBmaWVsZAkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpmZXRjaF9mcm9tX21lbToKCWNsci5iCQlTVEFHKCVhNikJCSMgZWl0aGVyIE5PUk0gb3IgWkVSTwoKCW1vdi53CQkodGJsX2ZwX3R5cGUuYiwlcGMsJWQwLncqMiksICVkMCAjIGluZGV4IGJ5IHNyYyB0eXBlIGZpZWxkCglqbXAJCSh0YmxfZnBfdHlwZS5iLCVwYywlZDAudyoxKQoKCXN3YmVnCQkmMHg4CnRibF9mcF90eXBlOgoJc2hvcnQJCWxvYWRfbG9uZwktIHRibF9mcF90eXBlCglzaG9ydAkJbG9hZF9zZ2wJLSB0YmxfZnBfdHlwZQoJc2hvcnQJCWxvYWRfZXh0CS0gdGJsX2ZwX3R5cGUKCXNob3J0CQlsb2FkX3BhY2tlZAktIHRibF9mcF90eXBlCglzaG9ydAkJbG9hZF93b3JkCS0gdGJsX2ZwX3R5cGUKCXNob3J0CQlsb2FkX2RibAktIHRibF9mcF90eXBlCglzaG9ydAkJbG9hZF9ieXRlCS0gdGJsX2ZwX3R5cGUKCXNob3J0CQl0YmxfZnBfdHlwZQktIHRibF9mcF90eXBlCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIGxvYWQgYSBMT05HIGludG8gJWZwMDoJCSMKIwktbnVtYmVyIGNhbid0IGZhdWx0CQkjCiMJKDEpIGNhbGMgZWEJCQkjCiMJKDIpIHJlYWQgNCBieXRlcyBpbnRvIExfU0NSMQkjCiMJKDMpIGZtb3YubCBpbnRvICVmcDAJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKbG9hZF9sb25nOgoJbW92cS5sCQkmMHg0LCAlZDAJCSMgcGFzczogNCAoYnl0ZXMpCglic3IubAkJX2RjYWxjX2VhCQkjIGNhbGMgPGVhPjsgPGVhPiBpbiAlYTAKCgljbXBpLmIJCVNQQ09ORF9GTEcoJWE2KSwmaW1tZWRfZmxnCgliZXEuYgkJbG9hZF9sb25nX2ltbWVkCgoJYnNyLmwJCV9kbWVtX3JlYWRfbG9uZwkJIyBmZXRjaCBzcmMgb3BlcmFuZCBmcm9tIG1lbW9yeQoKCXRzdC5sCQklZDEJCQkjIGRpZCBkZmV0Y2ggZmFpbD8KCWJuZS5sCQlmYWNjX2luX2wJCSMgeWVzCgpsb2FkX2xvbmdfY29udDoKCWZtb3YubAkJJWQwLCAlZnAwCQkjIHJlYWQgaW50byAlZnAwO2NvbnZlcnQgdG8geHByZWMKCWZtb3ZtLngJCSYweDgwLCBGUF9TUkMoJWE2KQkjIHJldHVybiBzcmMgb3AgaW4gRlBfU1JDCgoJZmJlcS53CQlsb2FkX2xvbmdfemVybwkJIyBzcmMgb3AgaXMgYSBaRVJPCglydHMKbG9hZF9sb25nX3plcm86Cgltb3YuYgkJJlpFUk8sIFNUQUcoJWE2KQkjIHNldCBvcHR5cGUgdGFnIHRvIFpFUk8KCXJ0cwoKbG9hZF9sb25nX2ltbWVkOgoJYnNyLmwJCV9pbWVtX3JlYWRfbG9uZwkJIyBmZXRjaCBzcmMgb3BlcmFuZCBpbW1lZCBkYXRhCgoJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPwoJYm5lLmwJCWZ1bmltcF9pYWNjCQkjIHllcwoJYnJhLmIJCWxvYWRfbG9uZ19jb250CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIGxvYWQgYSBXT1JEIGludG8gJWZwMDoJCSMKIwktbnVtYmVyIGNhbid0IGZhdWx0CQkjCiMJKDEpIGNhbGMgZWEJCQkjCiMJKDIpIHJlYWQgMiBieXRlcyBpbnRvIExfU0NSMQkjCiMJKDMpIGZtb3YudyBpbnRvICVmcDAJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKbG9hZF93b3JkOgoJbW92cS5sCQkmMHgyLCAlZDAJCSMgcGFzczogMiAoYnl0ZXMpCglic3IubAkJX2RjYWxjX2VhCQkjIGNhbGMgPGVhPjsgPGVhPiBpbiAlYTAKCgljbXBpLmIJCVNQQ09ORF9GTEcoJWE2KSwmaW1tZWRfZmxnCgliZXEuYgkJbG9hZF93b3JkX2ltbWVkCgoJYnNyLmwJCV9kbWVtX3JlYWRfd29yZAkJIyBmZXRjaCBzcmMgb3BlcmFuZCBmcm9tIG1lbW9yeQoKCXRzdC5sCQklZDEJCQkjIGRpZCBkZmV0Y2ggZmFpbD8KCWJuZS5sCQlmYWNjX2luX3cJCSMgeWVzCgpsb2FkX3dvcmRfY29udDoKCWZtb3YudwkJJWQwLCAlZnAwCQkjIHJlYWQgaW50byAlZnAwO2NvbnZlcnQgdG8geHByZWMKCWZtb3ZtLngJCSYweDgwLCBGUF9TUkMoJWE2KQkjIHJldHVybiBzcmMgb3AgaW4gRlBfU1JDCgoJZmJlcS53CQlsb2FkX3dvcmRfemVybwkJIyBzcmMgb3AgaXMgYSBaRVJPCglydHMKbG9hZF93b3JkX3plcm86Cgltb3YuYgkJJlpFUk8sIFNUQUcoJWE2KQkjIHNldCBvcHR5cGUgdGFnIHRvIFpFUk8KCXJ0cwoKbG9hZF93b3JkX2ltbWVkOgoJYnNyLmwJCV9pbWVtX3JlYWRfd29yZAkJIyBmZXRjaCBzcmMgb3BlcmFuZCBpbW1lZCBkYXRhCgoJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPwoJYm5lLmwJCWZ1bmltcF9pYWNjCQkjIHllcwoJYnJhLmIJCWxvYWRfd29yZF9jb250CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIGxvYWQgYSBCWVRFIGludG8gJWZwMDoJCSMKIwktbnVtYmVyIGNhbid0IGZhdWx0CQkjCiMJKDEpIGNhbGMgZWEJCQkjCiMJKDIpIHJlYWQgMSBieXRlIGludG8gTF9TQ1IxCSMKIwkoMykgZm1vdi5iIGludG8gJWZwMAkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpsb2FkX2J5dGU6Cgltb3ZxLmwJCSYweDEsICVkMAkJIyBwYXNzOiAxIChieXRlKQoJYnNyLmwJCV9kY2FsY19lYQkJIyBjYWxjIDxlYT47IDxlYT4gaW4gJWEwCgoJY21waS5iCQlTUENPTkRfRkxHKCVhNiksJmltbWVkX2ZsZwoJYmVxLmIJCWxvYWRfYnl0ZV9pbW1lZAoKCWJzci5sCQlfZG1lbV9yZWFkX2J5dGUJCSMgZmV0Y2ggc3JjIG9wZXJhbmQgZnJvbSBtZW1vcnkKCgl0c3QubAkJJWQxCQkJIyBkaWQgZGZldGNoIGZhaWw/CglibmUubAkJZmFjY19pbl9iCQkjIHllcwoKbG9hZF9ieXRlX2NvbnQ6CglmbW92LmIJCSVkMCwgJWZwMAkJIyByZWFkIGludG8gJWZwMDtjb252ZXJ0IHRvIHhwcmVjCglmbW92bS54CQkmMHg4MCwgRlBfU1JDKCVhNikJIyByZXR1cm4gc3JjIG9wIGluIEZQX1NSQwoKCWZiZXEudwkJbG9hZF9ieXRlX3plcm8JCSMgc3JjIG9wIGlzIGEgWkVSTwoJcnRzCmxvYWRfYnl0ZV96ZXJvOgoJbW92LmIJCSZaRVJPLCBTVEFHKCVhNikJIyBzZXQgb3B0eXBlIHRhZyB0byBaRVJPCglydHMKCmxvYWRfYnl0ZV9pbW1lZDoKCWJzci5sCQlfaW1lbV9yZWFkX3dvcmQJCSMgZmV0Y2ggc3JjIG9wZXJhbmQgaW1tZWQgZGF0YQoKCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KCWJuZS5sCQlmdW5pbXBfaWFjYwkJIyB5ZXMKCWJyYS5iCQlsb2FkX2J5dGVfY29udAoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBsb2FkIGEgU0dMIGludG8gJWZwMDoJCQkjCiMJLW51bWJlciBjYW4ndCBmYXVsdAkJIwojCSgxKSBjYWxjIGVhCQkJIwojCSgyKSByZWFkIDQgYnl0ZXMgaW50byBMX1NDUjEJIwojCSgzKSBmbW92LnMgaW50byAlZnAwCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmxvYWRfc2dsOgoJbW92cS5sCQkmMHg0LCAlZDAJCSMgcGFzczogNCAoYnl0ZXMpCglic3IubAkJX2RjYWxjX2VhCQkjIGNhbGMgPGVhPjsgPGVhPiBpbiAlYTAKCgljbXBpLmIJCVNQQ09ORF9GTEcoJWE2KSwmaW1tZWRfZmxnCgliZXEuYgkJbG9hZF9zZ2xfaW1tZWQKCglic3IubAkJX2RtZW1fcmVhZF9sb25nCQkjIGZldGNoIHNyYyBvcGVyYW5kIGZyb20gbWVtb3J5Cgltb3YubAkJJWQwLCBMX1NDUjEoJWE2KQkjIHN0b3JlIHNyYyBvcCBvbiBzdGFjawoKCXRzdC5sCQklZDEJCQkjIGRpZCBkZmV0Y2ggZmFpbD8KCWJuZS5sCQlmYWNjX2luX2wJCSMgeWVzCgpsb2FkX3NnbF9jb250OgoJbGVhCQlMX1NDUjEoJWE2KSwgJWEwCSMgcGFzczogcHRyIHRvIHNnbCBzcmMgb3AKCWJzci5sCQlzZXRfdGFnX3MJCSMgZGV0ZXJtaW5lIHNyYyB0eXBlIHRhZwoJbW92LmIJCSVkMCwgU1RBRyglYTYpCQkjIHNhdmUgc3JjIG9wdHlwZSB0YWcgb24gc3RhY2sKCgljbXBpLmIJCSVkMCwgJkRFTk9STQkJIyBpcyBpdCBhIHNnbCBERU5PUk0/CgliZXEudwkJZ2V0X3NnbF9kZW5vcm0JCSMgeWVzCgoJY21waS5iCQklZDAsICZTTkFOCQkjIGlzIGl0IGEgc2dsIFNOQU4/CgliZXEudwkJZ2V0X3NnbF9zbmFuCQkjIHllcwoKCWZtb3YucwkJTF9TQ1IxKCVhNiksICVmcDAJIyByZWFkIGludG8gJWZwMDtjb252ZXJ0IHRvIHhwcmVjCglmbW92bS54CQkmMHg4MCwgRlBfU1JDKCVhNikJIyByZXR1cm4gc3JjIG9wIGluIEZQX1NSQwoJcnRzCgpsb2FkX3NnbF9pbW1lZDoKCWJzci5sCQlfaW1lbV9yZWFkX2xvbmcJCSMgZmV0Y2ggc3JjIG9wZXJhbmQgaW1tZWQgZGF0YQoKCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KCWJuZS5sCQlmdW5pbXBfaWFjYwkJIyB5ZXMKCWJyYS5iCQlsb2FkX3NnbF9jb250CgojIG11c3QgY29udmVydCBzZ2wgZGVub3JtIGZvcm1hdCB0byBhbiBYcHJlYyBkZW5vcm0gZm10IHN1aXRhYmxlIGZvcgojIG5vcm1hbGl6YXRpb24uLi4KIyAlYTAgOiBwb2ludHMgdG8gc2dsIGRlbm9ybQpnZXRfc2dsX2Rlbm9ybToKCWNsci53CQlGUF9TUkNfRVgoJWE2KQoJYmZleHR1CQkoJWEwKXsmOTomMjN9LCAlZDAJIyBmZXRjaCBzZ2wgaGkoX21hbnRpc3NhKQoJbHNsLmwJCSYweDgsICVkMAoJbW92LmwJCSVkMCwgRlBfU1JDX0hJKCVhNikJIyBzZXQgZXh0IGhpKF9tYW50aXNzYSkKCWNsci5sCQlGUF9TUkNfTE8oJWE2KQkJIyBzZXQgZXh0IGxvKF9tYW50aXNzYSkKCgljbHIudwkJRlBfU1JDX0VYKCVhNikKCWJ0c3QJCSYweDcsICglYTApCQkjIGlzIHNnbiBiaXQgc2V0PwoJYmVxLmIJCXNnbF9kbnJtX25vcm0KCWJzZXQJCSYweDcsIEZQX1NSQ19FWCglYTYpCSMgc2V0IHNnbiBvZiB4cHJlYyB2YWx1ZQoKc2dsX2Rucm1fbm9ybToKCWxlYQkJRlBfU1JDKCVhNiksICVhMAoJYnNyLmwJCW5vcm0JCQkjIG5vcm1hbGl6ZSBudW1iZXIKCW1vdi53CQkmMHgzZjgxLCAlZDEJCSMgeHByZWMgZXhwID0gMHgzZjgxCglzdWIudwkJJWQwLCAlZDEJCSMgZXhwID0gMHgzZjgxIC0gc2hmdCBhbXQuCglvci53CQklZDEsIEZQX1NSQ19FWCglYTYpCSMge3NnbixleHB9CgoJbW92LmIJCSZOT1JNLCBTVEFHKCVhNikJIyBmaXggc3JjIHR5cGUgdGFnCglydHMKCiMgY29udmVydCBzZ2wgdG8gZXh0IFNOQU4KIyAlYTAgOiBwb2ludHMgdG8gc2dsIFNOQU4KZ2V0X3NnbF9zbmFuOgoJbW92LncJCSYweDdmZmYsIEZQX1NSQ19FWCglYTYpICMgc2V0IGV4cCBvZiBTTkFOCgliZmV4dHUJCSglYTApeyY5OiYyM30sICVkMAoJbHNsLmwJCSYweDgsICVkMAkJIyBleHRyYWN0IGFuZCBpbnNlcnQgaGkobWFuKQoJbW92LmwJCSVkMCwgRlBfU1JDX0hJKCVhNikKCWNsci5sCQlGUF9TUkNfTE8oJWE2KQoKCWJ0c3QJCSYweDcsICglYTApCQkjIHNlZSBpZiBzaWduIG9mIFNOQU4gaXMgc2V0CgliZXEuYgkJbm9fc2dsX3NuYW5fc2duCglic2V0CQkmMHg3LCBGUF9TUkNfRVgoJWE2KQpub19zZ2xfc25hbl9zZ246CglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgbG9hZCBhIERCTCBpbnRvICVmcDA6CQkJIwojCS1udW1iZXIgY2FuJ3QgZmF1bHQJCSMKIwkoMSkgY2FsYyBlYQkJCSMKIwkoMikgcmVhZCA4IGJ5dGVzIGludG8gTF9TQ1IoMSwyKSMKIwkoMykgZm1vdi5kIGludG8gJWZwMAkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpsb2FkX2RibDoKCW1vdnEubAkJJjB4OCwgJWQwCQkjIHBhc3M6IDggKGJ5dGVzKQoJYnNyLmwJCV9kY2FsY19lYQkJIyBjYWxjIDxlYT47IDxlYT4gaW4gJWEwCgoJY21waS5iCQlTUENPTkRfRkxHKCVhNiksJmltbWVkX2ZsZwoJYmVxLmIJCWxvYWRfZGJsX2ltbWVkCgoJbGVhCQlMX1NDUjEoJWE2KSwgJWExCSMgcGFzczogcHRyIHRvIGlucHV0IGRibCB0bXAgc3BhY2UKCW1vdnEubAkJJjB4OCwgJWQwCQkjIHBhc3M6ICMgYnl0ZXMgdG8gcmVhZAoJYnNyLmwJCV9kbWVtX3JlYWQJCSMgZmV0Y2ggc3JjIG9wZXJhbmQgZnJvbSBtZW1vcnkKCgl0c3QubAkJJWQxCQkJIyBkaWQgZGZldGNoIGZhaWw/CglibmUubAkJZmFjY19pbl9kCQkjIHllcwoKbG9hZF9kYmxfY29udDoKCWxlYQkJTF9TQ1IxKCVhNiksICVhMAkjIHBhc3M6IHB0ciB0byBpbnB1dCBkYmwKCWJzci5sCQlzZXRfdGFnX2QJCSMgZGV0ZXJtaW5lIHNyYyB0eXBlIHRhZwoJbW92LmIJCSVkMCwgU1RBRyglYTYpCQkjIHNldCBzcmMgb3B0eXBlIHRhZwoKCWNtcGkuYgkJJWQwLCAmREVOT1JNCQkjIGlzIGl0IGEgZGJsIERFTk9STT8KCWJlcS53CQlnZXRfZGJsX2Rlbm9ybQkJIyB5ZXMKCgljbXBpLmIJCSVkMCwgJlNOQU4JCSMgaXMgaXQgYSBkYmwgU05BTj8KCWJlcS53CQlnZXRfZGJsX3NuYW4JCSMgeWVzCgoJZm1vdi5kCQlMX1NDUjEoJWE2KSwgJWZwMAkjIHJlYWQgaW50byAlZnAwO2NvbnZlcnQgdG8geHByZWMKCWZtb3ZtLngJCSYweDgwLCBGUF9TUkMoJWE2KQkjIHJldHVybiBzcmMgb3AgaW4gRlBfU1JDCglydHMKCmxvYWRfZGJsX2ltbWVkOgoJbGVhCQlMX1NDUjEoJWE2KSwgJWExCSMgcGFzczogcHRyIHRvIGlucHV0IGRibCB0bXAgc3BhY2UKCW1vdnEubAkJJjB4OCwgJWQwCQkjIHBhc3M6ICMgYnl0ZXMgdG8gcmVhZAoJYnNyLmwJCV9pbWVtX3JlYWQJCSMgZmV0Y2ggc3JjIG9wZXJhbmQgZnJvbSBtZW1vcnkKCgl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CglibmUubAkJZnVuaW1wX2lhY2MJCSMgeWVzCglicmEuYgkJbG9hZF9kYmxfY29udAoKIyBtdXN0IGNvbnZlcnQgZGJsIGRlbm9ybSBmb3JtYXQgdG8gYW4gWHByZWMgZGVub3JtIGZtdCBzdWl0YWJsZSBmb3IKIyBub3JtYWxpemF0aW9uLi4uCiMgJWEwIDogbG9jLiBvZiBkYmwgZGVub3JtCmdldF9kYmxfZGVub3JtOgoJY2xyLncJCUZQX1NSQ19FWCglYTYpCgliZmV4dHUJCSglYTApeyYxMjomMzF9LCAlZDAJIyBmZXRjaCBoaShfbWFudGlzc2EpCgltb3YubAkJJWQwLCBGUF9TUkNfSEkoJWE2KQoJYmZleHR1CQk0KCVhMCl7JjExOiYyMX0sICVkMAkjIGZldGNoIGxvKF9tYW50aXNzYSkKCW1vdi5sCQkmMHhiLCAlZDEKCWxzbC5sCQklZDEsICVkMAoJbW92LmwJCSVkMCwgRlBfU1JDX0xPKCVhNikKCglidHN0CQkmMHg3LCAoJWEwKQkJIyBpcyBzZ24gYml0IHNldD8KCWJlcS5iCQlkYmxfZG5ybV9ub3JtCglic2V0CQkmMHg3LCBGUF9TUkNfRVgoJWE2KQkjIHNldCBzZ24gb2YgeHByZWMgdmFsdWUKCmRibF9kbnJtX25vcm06CglsZWEJCUZQX1NSQyglYTYpLCAlYTAKCWJzci5sCQlub3JtCQkJIyBub3JtYWxpemUgbnVtYmVyCgltb3YudwkJJjB4M2MwMSwgJWQxCQkjIHhwcmVjIGV4cCA9IDB4M2MwMQoJc3ViLncJCSVkMCwgJWQxCQkjIGV4cCA9IDB4M2MwMSAtIHNoZnQgYW10LgoJb3IudwkJJWQxLCBGUF9TUkNfRVgoJWE2KQkjIHtzZ24sZXhwfQoKCW1vdi5iCQkmTk9STSwgU1RBRyglYTYpCSMgZml4IHNyYyB0eXBlIHRhZwoJcnRzCgojIGNvbnZlcnQgZGJsIHRvIGV4dCBTTkFOCiMgJWEwIDogcG9pbnRzIHRvIGRibCBTTkFOCmdldF9kYmxfc25hbjoKCW1vdi53CQkmMHg3ZmZmLCBGUF9TUkNfRVgoJWE2KSAjIHNldCBleHAgb2YgU05BTgoKCWJmZXh0dQkJKCVhMCl7JjEyOiYzMX0sICVkMAkjIGZldGNoIGhpKF9tYW50aXNzYSkKCW1vdi5sCQklZDAsIEZQX1NSQ19ISSglYTYpCgliZmV4dHUJCTQoJWEwKXsmMTE6JjIxfSwgJWQwCSMgZmV0Y2ggbG8oX21hbnRpc3NhKQoJbW92LmwJCSYweGIsICVkMQoJbHNsLmwJCSVkMSwgJWQwCgltb3YubAkJJWQwLCBGUF9TUkNfTE8oJWE2KQoKCWJ0c3QJCSYweDcsICglYTApCQkjIHNlZSBpZiBzaWduIG9mIFNOQU4gaXMgc2V0CgliZXEuYgkJbm9fZGJsX3NuYW5fc2duCglic2V0CQkmMHg3LCBGUF9TUkNfRVgoJWE2KQpub19kYmxfc25hbl9zZ246CglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBsb2FkIGEgWHByZWMgaW50byAlZnAwOgkJCSMKIwktbnVtYmVyIGNhbid0IGZhdWx0CQkJIwojCSgxKSBjYWxjIGVhCQkJCSMKIwkoMikgcmVhZCAxMiBieXRlcyBpbnRvIExfU0NSKDEsMikJIwojCSgzKSBmbW92LnggaW50byAlZnAwCQkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmxvYWRfZXh0OgoJbW92LmwJCSYweGMsICVkMAkJIyBwYXNzOiAxMiAoYnl0ZXMpCglic3IubAkJX2RjYWxjX2VhCQkjIGNhbGMgPGVhPgoKCWxlYQkJRlBfU1JDKCVhNiksICVhMQkjIHBhc3M6IHB0ciB0byBpbnB1dCBleHQgdG1wIHNwYWNlCgltb3YubAkJJjB4YywgJWQwCQkjIHBhc3M6ICMgb2YgYnl0ZXMgdG8gcmVhZAoJYnNyLmwJCV9kbWVtX3JlYWQJCSMgZmV0Y2ggc3JjIG9wZXJhbmQgZnJvbSBtZW1vcnkKCgl0c3QubAkJJWQxCQkJIyBkaWQgZGZldGNoIGZhaWw/CglibmUubAkJZmFjY19pbl94CQkjIHllcwoKCWxlYQkJRlBfU1JDKCVhNiksICVhMAkjIHBhc3M6IHB0ciB0byBzcmMgb3AKCWJzci5sCQlzZXRfdGFnX3gJCSMgZGV0ZXJtaW5lIHNyYyB0eXBlIHRhZwoKCWNtcGkuYgkJJWQwLCAmVU5OT1JNCQkjIGlzIHRoZSBzcmMgb3AgYW4gVU5OT1JNPwoJYmVxLmIJCWxvYWRfZXh0X3Vubm9ybQkJIyB5ZXMKCgltb3YuYgkJJWQwLCBTVEFHKCVhNikJCSMgc3RvcmUgdGhlIHNyYyBvcHR5cGUgdGFnCglydHMKCmxvYWRfZXh0X3Vubm9ybToKCWJzci5sCQl1bm5vcm1fZml4CQkjIGZpeCB0aGUgc3JjIFVOTk9STQoJbW92LmIJCSVkMCwgU1RBRyglYTYpCQkjIHN0b3JlIHRoZSBzcmMgb3B0eXBlIHRhZwoJcnRzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgbG9hZCBhIHBhY2tlZCBpbnRvICVmcDA6CQkJIwojCS1udW1iZXIgY2FuJ3QgZmF1bHQJCQkjCiMJKDEpIGNhbGMgZWEJCQkJIwojCSgyKSByZWFkIDEyIGJ5dGVzIGludG8gTF9TQ1IoMSwyLDMpCSMKIwkoMykgZm1vdi54IGludG8gJWZwMAkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpsb2FkX3BhY2tlZDoKCWJzci5sCQlnZXRfcGFja2VkCgoJbGVhCQlGUF9TUkMoJWE2KSwlYTAJCSMgcGFzcyBwdHIgdG8gc3JjIG9wCglic3IubAkJc2V0X3RhZ194CQkjIGRldGVybWluZSBzcmMgdHlwZSB0YWcKCWNtcGkuYgkJJWQwLCZVTk5PUk0JCSMgaXMgdGhlIHNyYyBvcCBhbiBVTk5PUk0gWkVSTz8KCWJlcS5iCQlsb2FkX3BhY2tlZF91bm5vcm0JIyB5ZXMKCgltb3YuYgkJJWQwLFNUQUcoJWE2KQkJIyBzdG9yZSB0aGUgc3JjIG9wdHlwZSB0YWcKCXJ0cwoKbG9hZF9wYWNrZWRfdW5ub3JtOgoJYnNyLmwJCXVubm9ybV9maXgJCSMgZml4IHRoZSBVTk5PUk0gWkVSTwoJbW92LmIJCSVkMCxTVEFHKCVhNikJCSMgc3RvcmUgdGhlIHNyYyBvcHR5cGUgdGFnCglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWZvdXQoKTogbW92ZSBmcm9tIGZwIHJlZ2lzdGVyIHRvIG1lbW9yeSBvciBkYXRhIHJlZ2lzdGVyCSMKIwkJCQkJCQkJCSMKIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCV9yb3VuZCgpIC0gbmVlZGVkIHRvIGNyZWF0ZSBFWE9QIGZvciBzZ2wvZGJsIHByZWNpc2lvbgkJIwojCW5vcm0oKSAtIG5lZWRlZCB0byBjcmVhdGUgRVhPUCBmb3IgZXh0ZW5kZWQgcHJlY2lzaW9uCQkjCiMJb3ZmX3JlcygpIC0gY3JlYXRlIGRlZmF1bHQgb3ZlcmZsb3cgcmVzdWx0IGZvciBzZ2wvZGJsIHByZWNpc2lvbiMKIwl1bmZfcmVzKCkgLSBjcmVhdGUgZGVmYXVsdCB1bmRlcmZsb3cgcmVzdWx0IGZvciBzZ2wvZGJsIHByZWMuCSMKIwlkc3RfZGJsKCkgLSBjcmVhdGUgcm91bmRlZCBkYmwgcHJlY2lzaW9uIHJlc3VsdC4JCSMKIwlkc3Rfc2dsKCkgLSBjcmVhdGUgcm91bmRlZCBzZ2wgcHJlY2lzaW9uIHJlc3VsdC4JCSMKIwlmZXRjaF9kcmVnKCkgLSBmZXRjaCBkeW5hbWljIGstZmFjdG9yIHJlZyBmb3IgcGFja2VkLgkJIwojCWJpbmRlYygpIC0gY29udmVydCBGUCBiaW5hcnkgbnVtYmVyIHRvIHBhY2tlZCBudW1iZXIuCQkjCiMJX21lbV93cml0ZSgpIC0gd3JpdGUgZGF0YSB0byBtZW1vcnkuCQkJCSMKIwlfbWVtX3dyaXRlMigpIC0gd3JpdGUgZGF0YSB0byBtZW1vcnkgdW5sZXNzIHN1cHYgbW9kZSAtKGE3KSBleGMuIwojCV9kbWVtX3dyaXRlX3tieXRlLHdvcmQsbG9uZ30oKSAtIHdyaXRlIGRhdGEgdG8gbWVtb3J5LgkJIwojCXN0b3JlX2RyZWdfe2IsdyxsfSgpIC0gc3RvcmUgZGF0YSB0byBkYXRhIHJlZ2lzdGVyIGZpbGUuCSMKIwlmYWNjX291dF97Yix3LGwsZCx4fSgpIC0gZGF0YSBhY2Nlc3MgZXJyb3Igb2NjdXJyZWQuCQkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIHNvdXJjZSBvcGVyYW5kCQkjCiMJZDAgPSByb3VuZCBwcmVjLG1vZGUJCQkJCQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlmcDAgOiBpbnRlcm1lZGlhdGUgdW5kZXJmbG93IG9yIG92ZXJmbG93IHJlc3VsdCBpZgkJIwojCSAgICAgIE9WRkwvVU5GTCBvY2N1cnJlZCBmb3IgYSBzZ2wgb3IgZGJsIG9wZXJhbmQJCSMKIwkJCQkJCQkJCSMKIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCVRoaXMgcm91dGluZSBpcyBhY2Nlc3NlZCBieSBtYW55IGhhbmRsZXJzIHRoYXQgbmVlZCB0byBkbyBhbgkjCiMgb3BjbGFzcyB0aHJlZSBtb3ZlIG9mIGFuIG9wZXJhbmQgb3V0IHRvIG1lbW9yeS4JCQkjCiMJRGVjb2RlIGFuIGZtb3ZlIG91dCAob3BjbGFzcyAzKSBpbnN0cnVjdGlvbiB0byBkZXRlcm1pbmUgaWYJIwojIGl0J3MgYix3LGwscyxkLHgsIG9yIHAgaW4gc2l6ZS4gYix3LGwgY2FuIGJlIHN0b3JlZCB0byBlaXRoZXIgYSBkYXRhCSMKIyByZWdpc3RlciBvciBtZW1vcnkuIFRoZSBhbGdvcml0aG0gdXNlcyBhIHN0YW5kYXJkICJmbW92ZSIgdG8gY3JlYXRlCSMKIyB0aGUgcm91bmRlZCByZXN1bHQuIEFsc28sIHNpbmNlIGV4Y2VwdGlvbnMgYXJlIGRpc2FibGVkLCB0aGlzIGFsc28JIwojIGNyZWF0ZSB0aGUgY29ycmVjdCBPUEVSUiBkZWZhdWx0IHJlc3VsdCBpZiBhcHByb3ByaWF0ZS4JCSMKIwlGb3Igc2dsIG9yIGRibCBwcmVjaXNpb24sIG92ZXJmbG93IG9yIHVuZGVyZmxvdyBjYW4gb2NjdXIuIElmCSMKIyBlaXRoZXIgb2NjdXJzIGFuZCBpcyBlbmFibGVkLCB0aGUgRVhPUC4JCQkJIwojCUZvciBleHRlbmRlZCBwcmVjaXNpb24sIHRoZSBzdGFja2VkIDxlYT4gbXVzdCBiZSBmaXhlZCBhbG9uZwkjCiMgdy8gdGhlIGFkZHJlc3MgaW5kZXggcmVnaXN0ZXIgYXMgYXBwcm9wcmlhdGUgdy8gX2NhbGNfZWFfZm91dCgpLiBJZgkjCiMgdGhlIHNvdXJjZSBpcyBhIGRlbm9ybSBhbmQgaWYgdW5kZXJmbG93IGlzIGVuYWJsZWQsIGFuIEVYT1AgbXVzdCBiZQkjCiMgY3JlYXRlZC4JCQkJCQkJCSMKIwlGb3IgcGFja2VkLCB0aGUgay1mYWN0b3IgbXVzdCBiZSBmZXRjaGVkIGZyb20gdGhlIGluc3RydWN0aW9uCSMKIyB3b3JkIG9yIGEgZGF0YSByZWdpc3Rlci4gVGhlIDxlYT4gbXVzdCBiZSBmaXhlZCBhcyB3LyBleHRlbmRlZAkjCiMgcHJlY2lzaW9uLiBUaGVuLCBiaW5kZWMoKSBpcyBjYWxsZWQgdG8gY3JlYXRlIHRoZSBhcHByb3ByaWF0ZQkJIwojIHBhY2tlZCByZXN1bHQuCQkJCQkJCSMKIwlJZiBhdCBhbnkgdGltZSBhbiBhY2Nlc3MgZXJyb3IgaXMgZmxhZ2dlZCBieSBvbmUgb2YgdGhlIG1vdmUtCSMKIyB0by1tZW1vcnkgcm91dGluZXMsIHRoZW4gYSBzcGVjaWFsIGV4aXQgbXVzdCBiZSBtYWRlIHNvIHRoYXQgdGhlCSMKIyBhY2Nlc3MgZXJyb3IgY2FuIGJlIGhhbmRsZWQgcHJvcGVybHkuCQkJCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCglnbG9iYWwJCWZvdXQKZm91dDoKCWJmZXh0dQkJRVhDX0NNRFJFRyglYTYpeyYzOiYzfSwlZDEgIyBleHRyYWN0IGRzdCBmbXQKCW1vdi53CQkodGJsX2ZvdXQuYiwlcGMsJWQxLncqMiksJWExICMgdXNlIGFzIGluZGV4CglqbXAJCSh0YmxfZm91dC5iLCVwYywlYTEpCSMganVtcCB0byByb3V0aW5lCgoJc3diZWcJCSYweDgKdGJsX2ZvdXQ6CglzaG9ydAkJZm91dF9sb25nCS0JdGJsX2ZvdXQKCXNob3J0CQlmb3V0X3NnbAktCXRibF9mb3V0CglzaG9ydAkJZm91dF9leHQJLQl0YmxfZm91dAoJc2hvcnQJCWZvdXRfcGFjawktCXRibF9mb3V0CglzaG9ydAkJZm91dF93b3JkCS0JdGJsX2ZvdXQKCXNob3J0CQlmb3V0X2RibAktCXRibF9mb3V0CglzaG9ydAkJZm91dF9ieXRlCS0JdGJsX2ZvdXQKCXNob3J0CQlmb3V0X3BhY2sJLQl0YmxfZm91dAoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBmbW92ZS5iIG91dCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMgT25seSAiVW5pbXBsZW1lbnRlZCBEYXRhIFR5cGUiIGV4Y2VwdGlvbnMgZW50ZXIgaGVyZS4gVGhlIG9wZXJhbmQKIyBpcyBlaXRoZXIgYSBERU5PUk0gb3IgYSBOT1JNLgpmb3V0X2J5dGU6Cgl0c3QuYgkJU1RBRyglYTYpCQkjIGlzIG9wZXJhbmQgbm9ybWFsaXplZD8KCWJuZS5iCQlmb3V0X2J5dGVfZGVub3JtCSMgbm8KCglmbW92bS54CQlTUkMoJWEwKSwmMHg4MAkJIyBsb2FkIHZhbHVlCgpmb3V0X2J5dGVfbm9ybToKCWZtb3YubAkJJWQwLCVmcGNyCQkjIGluc2VydCBybmQgcHJlYyxtb2RlCgoJZm1vdi5iCQklZnAwLCVkMAkJIyBleGVjIG1vdmUgb3V0IHcvIGNvcnJlY3Qgcm5kIG1vZGUKCglmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgoJZm1vdi5sCQklZnBzciwlZDEJCSMgZmV0Y2ggRlBTUgoJb3IudwkJJWQxLDIrVVNFUl9GUFNSKCVhNikJIyBzYXZlIG5ldyBleGMsYWNjcnVlZCBiaXRzCgoJbW92LmIJCTErRVhDX09QV09SRCglYTYpLCVkMQkjIGV4dHJhY3QgZHN0IG1vZGUKCWFuZGkuYgkJJjB4MzgsJWQxCQkjIGlzIG1vZGUgPT0gMD8gKERyZWcgZHN0KQoJYmVxLmIJCWZvdXRfYnl0ZV9kbgkJIyBtdXN0IHNhdmUgdG8gaW50ZWdlciByZWdmaWxlCgoJbW92LmwJCUVYQ19FQSglYTYpLCVhMAkJIyBzdGFja2VkIDxlYT4gaXMgY29ycmVjdAoJYnNyLmwJCV9kbWVtX3dyaXRlX2J5dGUJIyB3cml0ZSBieXRlCgoJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBmYWlsPwoJYm5lLmwJCWZhY2Nfb3V0X2IJCSMgeWVzCgoJcnRzCgpmb3V0X2J5dGVfZG46Cgltb3YuYgkJMStFWENfT1BXT1JEKCVhNiksJWQxCSMgZXh0cmFjdCBEbgoJYW5kaS53CQkmMHg3LCVkMQoJYnNyLmwJCXN0b3JlX2RyZWdfYgoJcnRzCgpmb3V0X2J5dGVfZGVub3JtOgoJbW92LmwJCVNSQ19FWCglYTApLCVkMQoJYW5kaS5sCQkmMHg4MDAwMDAwMCwlZDEJCSMga2VlcCBERU5PUk0gc2lnbgoJb3JpLmwJCSYweDAwODAwMDAwLCVkMQkJIyBtYWtlIHNtYWxsZXN0IHNnbAoJZm1vdi5zCQklZDEsJWZwMAoJYnJhLmIJCWZvdXRfYnl0ZV9ub3JtCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIGZtb3ZlLncgb3V0ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIyBPbmx5ICJVbmltcGxlbWVudGVkIERhdGEgVHlwZSIgZXhjZXB0aW9ucyBlbnRlciBoZXJlLiBUaGUgb3BlcmFuZAojIGlzIGVpdGhlciBhIERFTk9STSBvciBhIE5PUk0uCmZvdXRfd29yZDoKCXRzdC5iCQlTVEFHKCVhNikJCSMgaXMgb3BlcmFuZCBub3JtYWxpemVkPwoJYm5lLmIJCWZvdXRfd29yZF9kZW5vcm0JIyBubwoKCWZtb3ZtLngJCVNSQyglYTApLCYweDgwCQkjIGxvYWQgdmFsdWUKCmZvdXRfd29yZF9ub3JtOgoJZm1vdi5sCQklZDAsJWZwY3IJCSMgaW5zZXJ0IHJuZCBwcmVjOm1vZGUKCglmbW92LncJCSVmcDAsJWQwCQkjIGV4ZWMgbW92ZSBvdXQgdy8gY29ycmVjdCBybmQgbW9kZQoKCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCglmbW92LmwJCSVmcHNyLCVkMQkJIyBmZXRjaCBGUFNSCglvci53CQklZDEsMitVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgbmV3IGV4YyxhY2NydWVkIGJpdHMKCgltb3YuYgkJMStFWENfT1BXT1JEKCVhNiksJWQxCSMgZXh0cmFjdCBkc3QgbW9kZQoJYW5kaS5iCQkmMHgzOCwlZDEJCSMgaXMgbW9kZSA9PSAwPyAoRHJlZyBkc3QpCgliZXEuYgkJZm91dF93b3JkX2RuCQkjIG11c3Qgc2F2ZSB0byBpbnRlZ2VyIHJlZ2ZpbGUKCgltb3YubAkJRVhDX0VBKCVhNiksJWEwCQkjIHN0YWNrZWQgPGVhPiBpcyBjb3JyZWN0Cglic3IubAkJX2RtZW1fd3JpdGVfd29yZAkjIHdyaXRlIHdvcmQKCgl0c3QubAkJJWQxCQkJIyBkaWQgZHN0b3JlIGZhaWw/CglibmUubAkJZmFjY19vdXRfdwkJIyB5ZXMKCglydHMKCmZvdXRfd29yZF9kbjoKCW1vdi5iCQkxK0VYQ19PUFdPUkQoJWE2KSwlZDEJIyBleHRyYWN0IERuCglhbmRpLncJCSYweDcsJWQxCglic3IubAkJc3RvcmVfZHJlZ193CglydHMKCmZvdXRfd29yZF9kZW5vcm06Cgltb3YubAkJU1JDX0VYKCVhMCksJWQxCglhbmRpLmwJCSYweDgwMDAwMDAwLCVkMQkJIyBrZWVwIERFTk9STSBzaWduCglvcmkubAkJJjB4MDA4MDAwMDAsJWQxCQkjIG1ha2Ugc21hbGxlc3Qgc2dsCglmbW92LnMJCSVkMSwlZnAwCglicmEuYgkJZm91dF93b3JkX25vcm0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgZm1vdmUubCBvdXQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgojIE9ubHkgIlVuaW1wbGVtZW50ZWQgRGF0YSBUeXBlIiBleGNlcHRpb25zIGVudGVyIGhlcmUuIFRoZSBvcGVyYW5kCiMgaXMgZWl0aGVyIGEgREVOT1JNIG9yIGEgTk9STS4KZm91dF9sb25nOgoJdHN0LmIJCVNUQUcoJWE2KQkJIyBpcyBvcGVyYW5kIG5vcm1hbGl6ZWQ/CglibmUuYgkJZm91dF9sb25nX2Rlbm9ybQkjIG5vCgoJZm1vdm0ueAkJU1JDKCVhMCksJjB4ODAJCSMgbG9hZCB2YWx1ZQoKZm91dF9sb25nX25vcm06CglmbW92LmwJCSVkMCwlZnBjcgkJIyBpbnNlcnQgcm5kIHByZWM6bW9kZQoKCWZtb3YubAkJJWZwMCwlZDAJCSMgZXhlYyBtb3ZlIG91dCB3LyBjb3JyZWN0IHJuZCBtb2RlCgoJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKCWZtb3YubAkJJWZwc3IsJWQxCQkjIGZldGNoIEZQU1IKCW9yLncJCSVkMSwyK1VTRVJfRlBTUiglYTYpCSMgc2F2ZSBuZXcgZXhjLGFjY3J1ZWQgYml0cwoKZm91dF9sb25nX3dyaXRlOgoJbW92LmIJCTErRVhDX09QV09SRCglYTYpLCVkMQkjIGV4dHJhY3QgZHN0IG1vZGUKCWFuZGkuYgkJJjB4MzgsJWQxCQkjIGlzIG1vZGUgPT0gMD8gKERyZWcgZHN0KQoJYmVxLmIJCWZvdXRfbG9uZ19kbgkJIyBtdXN0IHNhdmUgdG8gaW50ZWdlciByZWdmaWxlCgoJbW92LmwJCUVYQ19FQSglYTYpLCVhMAkJIyBzdGFja2VkIDxlYT4gaXMgY29ycmVjdAoJYnNyLmwJCV9kbWVtX3dyaXRlX2xvbmcJIyB3cml0ZSBsb25nCgoJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBmYWlsPwoJYm5lLmwJCWZhY2Nfb3V0X2wJCSMgeWVzCgoJcnRzCgpmb3V0X2xvbmdfZG46Cgltb3YuYgkJMStFWENfT1BXT1JEKCVhNiksJWQxCSMgZXh0cmFjdCBEbgoJYW5kaS53CQkmMHg3LCVkMQoJYnNyLmwJCXN0b3JlX2RyZWdfbAoJcnRzCgpmb3V0X2xvbmdfZGVub3JtOgoJbW92LmwJCVNSQ19FWCglYTApLCVkMQoJYW5kaS5sCQkmMHg4MDAwMDAwMCwlZDEJCSMga2VlcCBERU5PUk0gc2lnbgoJb3JpLmwJCSYweDAwODAwMDAwLCVkMQkJIyBtYWtlIHNtYWxsZXN0IHNnbAoJZm1vdi5zCQklZDEsJWZwMAoJYnJhLmIJCWZvdXRfbG9uZ19ub3JtCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIGZtb3ZlLnggb3V0ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIyBPbmx5ICJVbmltcGxlbWVudGVkIERhdGEgVHlwZSIgZXhjZXB0aW9ucyBlbnRlciBoZXJlLiBUaGUgb3BlcmFuZAojIGlzIGVpdGhlciBhIERFTk9STSBvciBhIE5PUk0uCiMgVGhlIERFTk9STSBjYXVzZXMgYW4gVW5kZXJmbG93IGV4Y2VwdGlvbi4KZm91dF9leHQ6CgojIHdlIGNvcHkgdGhlIGV4dGVuZGVkIHByZWNpc2lvbiByZXN1bHQgdG8gRlBfU0NSMCBzbyB0aGF0IHRoZSByZXNlcnZlZAojIDE2LWJpdCBmaWVsZCBnZXRzIHplcm9lZC4gd2UgZG8gdGhpcyBzaW5jZSB3ZSBwcm9taXNlIG5vdCB0byBkaXN0dXJiCiMgd2hhdCdzIGF0IFNSQyhhMCkuCgltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCgljbHIudwkJMitGUF9TQ1IwX0VYKCVhNikJIyBjbGVhciByZXNlcnZlZCBmaWVsZAoJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQoJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQoKCWZtb3ZtLngJCVNSQyglYTApLCYweDgwCQkjIHJldHVybiByZXN1bHQKCglic3IubAkJX2NhbGNfZWFfZm91dAkJIyBmaXggc3RhY2tlZCA8ZWE+CgoJbW92LmwJCSVhMCwlYTEJCQkjIHBhc3M6IGRzdCBhZGRyCglsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzOiBzcmMgYWRkcgoJbW92LmwJCSYweGMsJWQwCQkjIHBhc3M6IG9wc2l6ZSBpcyAxMiBieXRlcwoKIyB3ZSBtdXN0IG5vdCB5ZXQgd3JpdGUgdGhlIGV4dGVuZGVkIHByZWNpc2lvbiBkYXRhIHRvIHRoZSBzdGFjawojIGluIHRoZSBwcmUtZGVjcmVtZW50IGNhc2UgZnJvbSBzdXBlcnZpc29yIG1vZGUgb3IgZWxzZSB3ZSdsbCBjb3JydXB0CiMgdGhlIHN0YWNrIGZyYW1lLiBzbywgbGVhdmUgaXQgaW4gRlBfU1JDIGZvciBub3cgYW5kIGRlYWwgd2l0aCBpdCBsYXRlci4uLgoJY21waS5iCQlTUENPTkRfRkxHKCVhNiksJm1kYTdfZmxnCgliZXEuYgkJZm91dF9leHRfYTcKCglic3IubAkJX2RtZW1fd3JpdGUJCSMgd3JpdGUgZXh0IHByZWMgbnVtYmVyIHRvIG1lbW9yeQoKCXRzdC5sCQklZDEJCQkjIGRpZCBkc3RvcmUgZmFpbD8KCWJuZS53CQlmb3V0X2V4dF9lcnIJCSMgeWVzCgoJdHN0LmIJCVNUQUcoJWE2KQkJIyBpcyBvcGVyYW5kIG5vcm1hbGl6ZWQ/CglibmUuYgkJZm91dF9leHRfZGVub3JtCQkjIG5vCglydHMKCiMgdGhlIG51bWJlciBpcyBhIERFTk9STS4gbXVzdCBzZXQgdGhlIHVuZGVyZmxvdyBleGNlcHRpb24gYml0CmZvdXRfZXh0X2Rlbm9ybToKCWJzZXQJCSZ1bmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgc2V0IHVuZGVyZmxvdyBleGMgYml0CgoJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQwCglhbmRpLmIJCSYweDBhLCVkMAkJIyBpcyBVTkZMIG9yIElORVggZW5hYmxlZD8KCWJuZS5iCQlmb3V0X2V4dF9leGMJCSMgeWVzCglydHMKCiMgd2UgZG9uJ3Qgd2FudCB0byBkbyB0aGUgd3JpdGUgaWYgdGhlIGV4Y2VwdGlvbiBvY2N1cnJlZCBpbiBzdXBlcnZpc29yIG1vZGUKIyBzbyBfbWVtX3dyaXRlMigpIGhhbmRsZXMgdGhpcyBmb3IgdXMuCmZvdXRfZXh0X2E3OgoJYnNyLmwJCV9tZW1fd3JpdGUyCQkjIHdyaXRlIGV4dCBwcmVjIG51bWJlciB0byBtZW1vcnkKCgl0c3QubAkJJWQxCQkJIyBkaWQgZHN0b3JlIGZhaWw/CglibmUudwkJZm91dF9leHRfZXJyCQkjIHllcwoKCXRzdC5iCQlTVEFHKCVhNikJCSMgaXMgb3BlcmFuZCBub3JtYWxpemVkPwoJYm5lLmIJCWZvdXRfZXh0X2Rlbm9ybQkJIyBubwoJcnRzCgpmb3V0X2V4dF9leGM6CglsZWEJCUZQX1NDUjAoJWE2KSwlYTAKCWJzci5sCQlub3JtCQkJIyBub3JtYWxpemUgdGhlIG1hbnRpc3NhCgluZWcudwkJJWQwCQkJIyBuZXcgZXhwID0gLShzaGZ0IGFtdCkKCWFuZGkudwkJJjB4N2ZmZiwlZDAKCWFuZGkudwkJJjB4ODAwMCxGUF9TQ1IwX0VYKCVhNikJIyBrZWVwIG9ubHkgb2xkIHNpZ24KCW9yLncJCSVkMCxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50CglmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4NDAJIyByZXR1cm4gRVhPUCBpbiBmcDEKCXJ0cwoKZm91dF9leHRfZXJyOgoJbW92LmwJCUVYQ19BNiglYTYpLCglYTYpCSMgZml4IHN0YWNrZWQgYTYKCWJyYS5sCQlmYWNjX291dF94CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgZm1vdmUucyBvdXQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpmb3V0X3NnbDoKCWFuZGkuYgkJJjB4MzAsJWQwCQkjIGNsZWFyIHJuZCBwcmVjCglvcmkuYgkJJnNfbW9kZSoweDEwLCVkMAkjIGluc2VydCBzZ2wgcHJlYwoJbW92LmwJCSVkMCxMX1NDUjMoJWE2KQkJIyBzYXZlIHJuZCBwcmVjLG1vZGUgb24gc3RhY2sKCiMKIyBvcGVyYW5kIGlzIGEgbm9ybWFsaXplZCBudW1iZXIuIGZpcnN0LCB3ZSBjaGVjayB0byBzZWUgaWYgdGhlIG1vdmUgb3V0CiMgd291bGQgY2F1c2UgZWl0aGVyIGFuIHVuZGVyZmxvdyBvciBvdmVyZmxvdy4gdGhlc2UgY2FzZXMgYXJlIGhhbmRsZWQKIyBzZXBhcmF0ZWx5LiBvdGhlcndpc2UsIHNldCB0aGUgRlBDUiB0byB0aGUgcHJvcGVyIHJvdW5kaW5nIG1vZGUgYW5kCiMgZXhlY3V0ZSB0aGUgbW92ZS4KIwoJbW92LncJCVNSQ19FWCglYTApLCVkMAkJIyBleHRyYWN0IGV4cG9uZW50CglhbmRpLncJCSYweDdmZmYsJWQwCQkjIHN0cmlwIHNpZ24KCgljbXBpLncJCSVkMCwmU0dMX0hJCQkjIHdpbGwgb3BlcmFuZCBvdmVyZmxvdz8KCWJndC53CQlmb3V0X3NnbF9vdmZsCQkjIHllczsgZ28gaGFuZGxlIE9WRkwKCWJlcS53CQlmb3V0X3NnbF9tYXlfb3ZmbAkjIG1heWJlOyBnbyBoYW5kbGUgcG9zc2libGUgT1ZGTAoJY21waS53CQklZDAsJlNHTF9MTwkJIyB3aWxsIG9wZXJhbmQgdW5kZXJmbG93PwoJYmx0LncJCWZvdXRfc2dsX3VuZmwJCSMgeWVzOyBnbyBoYW5kbGUgdW5kZXJmbG93CgojCiMgTk9STXMoaW4gcmFuZ2UpIGNhbiBiZSBzdG9yZWQgb3V0IGJ5IGEgc2ltcGxlICJmbW92LnMiCiMgVW5ub3JtYWxpemVkIGlucHV0cyBjYW4gY29tZSB0aHJvdWdoIHRoaXMgcG9pbnQuCiMKZm91dF9zZ2xfZXhnOgoJZm1vdm0ueAkJU1JDKCVhMCksJjB4ODAJCSMgZmV0Y2ggZm9wIGZyb20gc3RhY2sKCglmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCgoJZm1vdi5zCQklZnAwLCVkMAkJIyBzdG9yZSBkb2VzIGNvbnZlcnQgYW5kIHJvdW5kCgoJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgRlBTUgoKCW9yLncJCSVkMSwyK1VTRVJfRlBTUiglYTYpCSMgc2V0IHBvc3NpYmxlIGluZXgyL2FpbmV4Cgpmb3V0X3NnbF9leGdfd3JpdGU6Cgltb3YuYgkJMStFWENfT1BXT1JEKCVhNiksJWQxCSMgZXh0cmFjdCBkc3QgbW9kZQoJYW5kaS5iCQkmMHgzOCwlZDEJCSMgaXMgbW9kZSA9PSAwPyAoRHJlZyBkc3QpCgliZXEuYgkJZm91dF9zZ2xfZXhnX3dyaXRlX2RuCSMgbXVzdCBzYXZlIHRvIGludGVnZXIgcmVnZmlsZQoKCW1vdi5sCQlFWENfRUEoJWE2KSwlYTAJCSMgc3RhY2tlZCA8ZWE+IGlzIGNvcnJlY3QKCWJzci5sCQlfZG1lbV93cml0ZV9sb25nCSMgd3JpdGUgbG9uZwoKCXRzdC5sCQklZDEJCQkjIGRpZCBkc3RvcmUgZmFpbD8KCWJuZS5sCQlmYWNjX291dF9sCQkjIHllcwoKCXJ0cwoKZm91dF9zZ2xfZXhnX3dyaXRlX2RuOgoJbW92LmIJCTErRVhDX09QV09SRCglYTYpLCVkMQkjIGV4dHJhY3QgRG4KCWFuZGkudwkJJjB4NywlZDEKCWJzci5sCQlzdG9yZV9kcmVnX2wKCXJ0cwoKIwojIGhlcmUsIHdlIGtub3cgdGhhdCB0aGUgb3BlcmFuZCB3b3VsZCBVTkZMIGlmIG1vdmVkIG91dCB0byBzaW5nbGUgcHJlYywKIyBzbywgZGVub3JtIGFuZCByb3VuZCBhbmQgdGhlbiB1c2UgZ2VuZXJpYyBzdG9yZSBzaW5nbGUgcm91dGluZSB0bwojIHdyaXRlIHRoZSB2YWx1ZSB0byBtZW1vcnkuCiMKZm91dF9zZ2xfdW5mbDoKCWJzZXQJCSZ1bmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgc2V0IFVORkwKCgltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCgltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCgltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCgltb3YubAkJJWEwLC0oJXNwKQoKCWNsci5sCQklZDAJCQkjIHBhc3M6IFMuRi4gPSAwCgoJY21waS5iCQlTVEFHKCVhNiksJkRFTk9STQkjIGZldGNoIHNyYyBvcHR5cGUgdGFnCglibmUuYgkJZm91dF9zZ2xfdW5mbF9jb250CSMgbGV0IERFTk9STXMgZmFsbCB0aHJvdWdoCgoJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCglic3IubAkJbm9ybQkJCSMgbm9ybWFsaXplIHRoZSBERU5PUk0KCmZvdXRfc2dsX3VuZmxfY29udDoKCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHB0ciB0byBvcGVyYW5kCgltb3YubAkJTF9TQ1IzKCVhNiksJWQxCQkjIHBhc3M6IHJuZCBwcmVjLG1vZGUKCWJzci5sCQl1bmZfcmVzCQkJIyBjYWxjIGRlZmF1bHQgdW5kZXJmbG93IHJlc3VsdAoKCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHB0ciB0byBmb3AKCWJzci5sCQlkc3Rfc2dsCQkJIyBjb252ZXJ0IHRvIHNpbmdsZSBwcmVjCgoJbW92LmIJCTErRVhDX09QV09SRCglYTYpLCVkMQkjIGV4dHJhY3QgZHN0IG1vZGUKCWFuZGkuYgkJJjB4MzgsJWQxCQkjIGlzIG1vZGUgPT0gMD8gKERyZWcgZHN0KQoJYmVxLmIJCWZvdXRfc2dsX3VuZmxfZG4JIyBtdXN0IHNhdmUgdG8gaW50ZWdlciByZWdmaWxlCgoJbW92LmwJCUVYQ19FQSglYTYpLCVhMAkJIyBzdGFja2VkIDxlYT4gaXMgY29ycmVjdAoJYnNyLmwJCV9kbWVtX3dyaXRlX2xvbmcJIyB3cml0ZSBsb25nCgoJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBmYWlsPwoJYm5lLmwJCWZhY2Nfb3V0X2wJCSMgeWVzCgoJYnJhLmIJCWZvdXRfc2dsX3VuZmxfY2hrZXhjCgpmb3V0X3NnbF91bmZsX2RuOgoJbW92LmIJCTErRVhDX09QV09SRCglYTYpLCVkMQkjIGV4dHJhY3QgRG4KCWFuZGkudwkJJjB4NywlZDEKCWJzci5sCQlzdG9yZV9kcmVnX2wKCmZvdXRfc2dsX3VuZmxfY2hrZXhjOgoJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCglhbmRpLmIJCSYweDBhLCVkMQkJIyBpcyBVTkZMIG9yIElORVggZW5hYmxlZD8KCWJuZS53CQlmb3V0X3NkX2V4Y191bmZsCSMgeWVzCglhZGRxLmwJCSYweDQsJXNwCglydHMKCiMKIyBpdCdzIGRlZmluaXRlbHkgYW4gb3ZlcmZsb3cgc28gY2FsbCBvdmZfcmVzIHRvIGdldCB0aGUgY29ycmVjdCBhbnN3ZXIKIwpmb3V0X3NnbF9vdmZsOgoJdHN0LmIJCTMrU1JDX0hJKCVhMCkJCSMgaXMgcmVzdWx0IGluZXhhY3Q/CglibmUuYgkJZm91dF9zZ2xfb3ZmbF9pbmV4MgoJdHN0LmwJCVNSQ19MTyglYTApCQkjIGlzIHJlc3VsdCBpbmV4YWN0PwoJYm5lLmIJCWZvdXRfc2dsX292ZmxfaW5leDIKCW9yaS53CQkmb3ZmbF9pbnhfbWFzaywyK1VTRVJfRlBTUiglYTYpICMgc2V0IG92ZmwvYW92ZmwvYWluZXgKCWJyYS5iCQlmb3V0X3NnbF9vdmZsX2NvbnQKZm91dF9zZ2xfb3ZmbF9pbmV4MjoKCW9yaS53CQkmb3ZmaW54X21hc2ssMitVU0VSX0ZQU1IoJWE2KSAjIHNldCBvdmZsL2FvdmZsL2FpbmV4L2luZXgyCgpmb3V0X3NnbF9vdmZsX2NvbnQ6Cgltb3YubAkJJWEwLC0oJXNwKQoKIyBjYWxsIG92Zl9yZXMoKSB3LyBzZ2wgcHJlYyBhbmQgdGhlIGNvcnJlY3Qgcm5kIG1vZGUgdG8gY3JlYXRlIHRoZSBkZWZhdWx0CiMgb3ZlcmZsb3cgcmVzdWx0LiBET04nVCBzYXZlIHRoZSByZXR1cm5lZCBjY29kZXMgZnJvbSBvdmZfcmVzKCkgc2luY2UKIyBmbW92ZSBvdXQgZG9lc24ndCBhbHRlciB0aGVtLgoJdHN0LmIJCVNSQ19FWCglYTApCQkjIGlzIG9wZXJhbmQgbmVnYXRpdmU/CglzbWkJCSVkMQkJCSMgc2V0IGlmIHNvCgltb3YubAkJTF9TQ1IzKCVhNiksJWQwCQkjIHBhc3M6IHNnbCBwcmVjLHJuZCBtb2RlCglic3IubAkJb3ZmX3JlcwkJCSMgY2FsYyBPVkZMIHJlc3VsdAoJZm1vdm0ueAkJKCVhMCksJjB4ODAJCSMgbG9hZCBkZWZhdWx0IG92ZXJmbG93IHJlc3VsdAoJZm1vdi5zCQklZnAwLCVkMAkJIyBzdG9yZSB0byBzaW5nbGUKCgltb3YuYgkJMStFWENfT1BXT1JEKCVhNiksJWQxCSMgZXh0cmFjdCBkc3QgbW9kZQoJYW5kaS5iCQkmMHgzOCwlZDEJCSMgaXMgbW9kZSA9PSAwPyAoRHJlZyBkc3QpCgliZXEuYgkJZm91dF9zZ2xfb3ZmbF9kbgkjIG11c3Qgc2F2ZSB0byBpbnRlZ2VyIHJlZ2ZpbGUKCgltb3YubAkJRVhDX0VBKCVhNiksJWEwCQkjIHN0YWNrZWQgPGVhPiBpcyBjb3JyZWN0Cglic3IubAkJX2RtZW1fd3JpdGVfbG9uZwkjIHdyaXRlIGxvbmcKCgl0c3QubAkJJWQxCQkJIyBkaWQgZHN0b3JlIGZhaWw/CglibmUubAkJZmFjY19vdXRfbAkJIyB5ZXMKCglicmEuYgkJZm91dF9zZ2xfb3ZmbF9jaGtleGMKCmZvdXRfc2dsX292ZmxfZG46Cgltb3YuYgkJMStFWENfT1BXT1JEKCVhNiksJWQxCSMgZXh0cmFjdCBEbgoJYW5kaS53CQkmMHg3LCVkMQoJYnNyLmwJCXN0b3JlX2RyZWdfbAoKZm91dF9zZ2xfb3ZmbF9jaGtleGM6Cgltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDEKCWFuZGkuYgkJJjB4MGEsJWQxCQkjIGlzIFVORkwgb3IgSU5FWCBlbmFibGVkPwoJYm5lLncJCWZvdXRfc2RfZXhjX292ZmwJIyB5ZXMKCWFkZHEubAkJJjB4NCwlc3AKCXJ0cwoKIwojIG1vdmUgb3V0IE1BWSBvdmVyZmxvdzoKIyAoMSkgZm9yY2UgdGhlIGV4cCB0byAweDNmZmYKIyAoMikgZG8gYSBtb3ZlIHcvIGFwcHJvcHJpYXRlIHJuZCBtb2RlCiMgKDMpIGlmIGV4cCBzdGlsbCBlcXVhbHMgemVybywgdGhlbiBpbnNlcnQgb3JpZ2luYWwgZXhwb25lbnQKIwlmb3IgdGhlIGNvcnJlY3QgcmVzdWx0LgojICAgICBpZiBleHAgbm93IGVxdWFscyBvbmUsIHRoZW4gaXQgb3ZlcmZsb3dlZCBzbyBjYWxsIG92Zl9yZXMuCiMKZm91dF9zZ2xfbWF5X292Zmw6Cgltb3YudwkJU1JDX0VYKCVhMCksJWQxCQkjIGZldGNoIGN1cnJlbnQgc2lnbgoJYW5kaS53CQkmMHg4MDAwLCVkMQkJIyBrZWVwIGl0LGNsZWFyIGV4cAoJb3JpLncJCSYweDNmZmYsJWQxCQkjIGluc2VydCBleHAgPSAwCgltb3YudwkJJWQxLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBzY2FsZWQgZXhwCgltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpICMgY29weSBoaShtYW4pCgltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpICMgY29weSBsbyhtYW4pCgoJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCgoJZm1vdi54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIGZvcmNlIGZvcCB0byBiZSByb3VuZGVkCglmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgoKCWZhYnMueAkJJWZwMAkJCSMgbmVlZCBhYnNvbHV0ZSB2YWx1ZQoJZmNtcC5iCQklZnAwLCYweDIJCSMgZGlkIGV4cG9uZW50IGluY3JlYXNlPwoJZmJsdC53CQlmb3V0X3NnbF9leGcJCSMgbm87IGdvIGZpbmlzaCBOT1JNCglicmEudwkJZm91dF9zZ2xfb3ZmbAkJIyB5ZXM7IGdvIGhhbmRsZSBvdmVyZmxvdwoKIyMjIyMjIyMjIyMjIyMjIwoKZm91dF9zZF9leGNfdW5mbDoKCW1vdi5sCQkoJXNwKSssJWEwCgoJbW92LncJCVNSQ19FWCglYTApLEZQX1NDUjBfRVgoJWE2KQoJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQoJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQoKCWNtcGkuYgkJU1RBRyglYTYpLCZERU5PUk0JIyB3YXMgc3JjIGEgREVOT1JNPwoJYm5lLmIJCWZvdXRfc2RfZXhjX2NvbnQJIyBubwoKCWxlYQkJRlBfU0NSMCglYTYpLCVhMAoJYnNyLmwJCW5vcm0KCW5lZy5sCQklZDAKCWFuZGkudwkJJjB4N2ZmZiwlZDAKCWJmaW5zCQklZDAsRlBfU0NSMF9FWCglYTYpeyYxOiYxNX0KCWJyYS5iCQlmb3V0X3NkX2V4Y19jb250Cgpmb3V0X3NkX2V4YzoKZm91dF9zZF9leGNfb3ZmbDoKCW1vdi5sCQkoJXNwKSssJWEwCQkjIHJlc3RvcmUgYTAKCgltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCgltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCgltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCgpmb3V0X3NkX2V4Y19jb250OgoJYmNscgkJJjB4NyxGUF9TQ1IwX0VYKCVhNikJIyBjbGVhciBzaWduIGJpdAoJc25lLmIJCTIrRlBfU0NSMF9FWCglYTYpCSMgc2V0IGludGVybmFsIHNpZ24gYml0CglsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzOiBwdHIgdG8gREVOT1JNCgoJbW92LmIJCTMrTF9TQ1IzKCVhNiksJWQxCglsc3IuYgkJJjB4NCwlZDEKCWFuZGkudwkJJjB4MGMsJWQxCglzd2FwCQklZDEKCW1vdi5iCQkzK0xfU0NSMyglYTYpLCVkMQoJbHNyLmIJCSYweDQsJWQxCglhbmRpLncJCSYweDAzLCVkMQoJY2xyLmwJCSVkMAkJCSMgcGFzczogemVybyBnLHIscwoJYnNyLmwJCV9yb3VuZAkJCSMgcm91bmQgdGhlIERFTk9STQoKCXRzdC5iCQkyK0ZQX1NDUjBfRVgoJWE2KQkjIGlzIEVYT1AgbmVnYXRpdmU/CgliZXEuYgkJZm91dF9zZF9leGNfZG9uZQkjIG5vCglic2V0CQkmMHg3LEZQX1NDUjBfRVgoJWE2KQkjIHllcwoKZm91dF9zZF9leGNfZG9uZToKCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg0MAkjIHJldHVybiBFWE9QIGluIGZwMQoJcnRzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIGZtb3ZlLmQgb3V0ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpmb3V0X2RibDoKCWFuZGkuYgkJJjB4MzAsJWQwCQkjIGNsZWFyIHJuZCBwcmVjCglvcmkuYgkJJmRfbW9kZSoweDEwLCVkMAkjIGluc2VydCBkYmwgcHJlYwoJbW92LmwJCSVkMCxMX1NDUjMoJWE2KQkJIyBzYXZlIHJuZCBwcmVjLG1vZGUgb24gc3RhY2sKCiMKIyBvcGVyYW5kIGlzIGEgbm9ybWFsaXplZCBudW1iZXIuIGZpcnN0LCB3ZSBjaGVjayB0byBzZWUgaWYgdGhlIG1vdmUgb3V0CiMgd291bGQgY2F1c2UgZWl0aGVyIGFuIHVuZGVyZmxvdyBvciBvdmVyZmxvdy4gdGhlc2UgY2FzZXMgYXJlIGhhbmRsZWQKIyBzZXBhcmF0ZWx5LiBvdGhlcndpc2UsIHNldCB0aGUgRlBDUiB0byB0aGUgcHJvcGVyIHJvdW5kaW5nIG1vZGUgYW5kCiMgZXhlY3V0ZSB0aGUgbW92ZS4KIwoJbW92LncJCVNSQ19FWCglYTApLCVkMAkJIyBleHRyYWN0IGV4cG9uZW50CglhbmRpLncJCSYweDdmZmYsJWQwCQkjIHN0cmlwIHNpZ24KCgljbXBpLncJCSVkMCwmREJMX0hJCQkjIHdpbGwgb3BlcmFuZCBvdmVyZmxvdz8KCWJndC53CQlmb3V0X2RibF9vdmZsCQkjIHllczsgZ28gaGFuZGxlIE9WRkwKCWJlcS53CQlmb3V0X2RibF9tYXlfb3ZmbAkjIG1heWJlOyBnbyBoYW5kbGUgcG9zc2libGUgT1ZGTAoJY21waS53CQklZDAsJkRCTF9MTwkJIyB3aWxsIG9wZXJhbmQgdW5kZXJmbG93PwoJYmx0LncJCWZvdXRfZGJsX3VuZmwJCSMgeWVzOyBnbyBoYW5kbGUgdW5kZXJmbG93CgojCiMgTk9STXMoaW4gcmFuZ2UpIGNhbiBiZSBzdG9yZWQgb3V0IGJ5IGEgc2ltcGxlICJmbW92LmQiCiMgVW5ub3JtYWxpemVkIGlucHV0cyBjYW4gY29tZSB0aHJvdWdoIHRoaXMgcG9pbnQuCiMKZm91dF9kYmxfZXhnOgoJZm1vdm0ueAkJU1JDKCVhMCksJjB4ODAJCSMgZmV0Y2ggZm9wIGZyb20gc3RhY2sKCglmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCgoJZm1vdi5kCQklZnAwLExfU0NSMSglYTYpCSMgc3RvcmUgZG9lcyBjb252ZXJ0IGFuZCByb3VuZAoKCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCglmbW92LmwJCSVmcHNyLCVkMAkJIyBzYXZlIEZQU1IKCglvci53CQklZDAsMitVU0VSX0ZQU1IoJWE2KQkjIHNldCBwb3NzaWJsZSBpbmV4Mi9haW5leAoKCW1vdi5sCQlFWENfRUEoJWE2KSwlYTEJCSMgcGFzczogZHN0IGFkZHIKCWxlYQkJTF9TQ1IxKCVhNiksJWEwCQkjIHBhc3M6IHNyYyBhZGRyCgltb3ZxLmwJCSYweDgsJWQwCQkjIHBhc3M6IG9wc2l6ZSBpcyA4IGJ5dGVzCglic3IubAkJX2RtZW1fd3JpdGUJCSMgc3RvcmUgZGJsIGZvcCB0byBtZW1vcnkKCgl0c3QubAkJJWQxCQkJIyBkaWQgZHN0b3JlIGZhaWw/CglibmUubAkJZmFjY19vdXRfZAkJIyB5ZXMKCglydHMJCQkJCSMgbm87IHNvIHdlJ3JlIGZpbmlzaGVkCgojCiMgaGVyZSwgd2Uga25vdyB0aGF0IHRoZSBvcGVyYW5kIHdvdWxkIFVORkwgaWYgbW92ZWQgb3V0IHRvIGRvdWJsZSBwcmVjLAojIHNvLCBkZW5vcm0gYW5kIHJvdW5kIGFuZCB0aGVuIHVzZSBnZW5lcmljIHN0b3JlIGRvdWJsZSByb3V0aW5lIHRvCiMgd3JpdGUgdGhlIHZhbHVlIHRvIG1lbW9yeS4KIwpmb3V0X2RibF91bmZsOgoJYnNldAkJJnVuZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgIyBzZXQgVU5GTAoKCW1vdi53CQlTUkNfRVgoJWEwKSxGUF9TQ1IwX0VYKCVhNikKCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikKCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKCW1vdi5sCQklYTAsLSglc3ApCgoJY2xyLmwJCSVkMAkJCSMgcGFzczogUy5GLiA9IDAKCgljbXBpLmIJCVNUQUcoJWE2KSwmREVOT1JNCSMgZmV0Y2ggc3JjIG9wdHlwZSB0YWcKCWJuZS5iCQlmb3V0X2RibF91bmZsX2NvbnQJIyBsZXQgREVOT1JNcyBmYWxsIHRocm91Z2gKCglsZWEJCUZQX1NDUjAoJWE2KSwlYTAKCWJzci5sCQlub3JtCQkJIyBub3JtYWxpemUgdGhlIERFTk9STQoKZm91dF9kYmxfdW5mbF9jb250OgoJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCSMgcGFzczogcHRyIHRvIG9wZXJhbmQKCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEJCSMgcGFzczogcm5kIHByZWMsbW9kZQoJYnNyLmwJCXVuZl9yZXMJCQkjIGNhbGMgZGVmYXVsdCB1bmRlcmZsb3cgcmVzdWx0CgoJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCSMgcGFzczogcHRyIHRvIGZvcAoJYnNyLmwJCWRzdF9kYmwJCQkjIGNvbnZlcnQgdG8gc2luZ2xlIHByZWMKCW1vdi5sCQklZDAsTF9TQ1IxKCVhNikKCW1vdi5sCQklZDEsTF9TQ1IyKCVhNikKCgltb3YubAkJRVhDX0VBKCVhNiksJWExCQkjIHBhc3M6IGRzdCBhZGRyCglsZWEJCUxfU0NSMSglYTYpLCVhMAkJIyBwYXNzOiBzcmMgYWRkcgoJbW92cS5sCQkmMHg4LCVkMAkJIyBwYXNzOiBvcHNpemUgaXMgOCBieXRlcwoJYnNyLmwJCV9kbWVtX3dyaXRlCQkjIHN0b3JlIGRibCBmb3AgdG8gbWVtb3J5CgoJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBmYWlsPwoJYm5lLmwJCWZhY2Nfb3V0X2QJCSMgeWVzCgoJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCglhbmRpLmIJCSYweDBhLCVkMQkJIyBpcyBVTkZMIG9yIElORVggZW5hYmxlZD8KCWJuZS53CQlmb3V0X3NkX2V4Y191bmZsCSMgeWVzCglhZGRxLmwJCSYweDQsJXNwCglydHMKCiMKIyBpdCdzIGRlZmluaXRlbHkgYW4gb3ZlcmZsb3cgc28gY2FsbCBvdmZfcmVzIHRvIGdldCB0aGUgY29ycmVjdCBhbnN3ZXIKIwpmb3V0X2RibF9vdmZsOgoJbW92LncJCTIrU1JDX0xPKCVhMCksJWQwCglhbmRpLncJCSYweDdmZiwlZDAKCWJuZS5iCQlmb3V0X2RibF9vdmZsX2luZXgyCgoJb3JpLncJCSZvdmZsX2lueF9tYXNrLDIrVVNFUl9GUFNSKCVhNikgIyBzZXQgb3ZmbC9hb3ZmbC9haW5leAoJYnJhLmIJCWZvdXRfZGJsX292ZmxfY29udApmb3V0X2RibF9vdmZsX2luZXgyOgoJb3JpLncJCSZvdmZpbnhfbWFzaywyK1VTRVJfRlBTUiglYTYpICMgc2V0IG92ZmwvYW92ZmwvYWluZXgvaW5leDIKCmZvdXRfZGJsX292ZmxfY29udDoKCW1vdi5sCQklYTAsLSglc3ApCgojIGNhbGwgb3ZmX3JlcygpIHcvIGRibCBwcmVjIGFuZCB0aGUgY29ycmVjdCBybmQgbW9kZSB0byBjcmVhdGUgdGhlIGRlZmF1bHQKIyBvdmVyZmxvdyByZXN1bHQuIERPTidUIHNhdmUgdGhlIHJldHVybmVkIGNjb2RlcyBmcm9tIG92Zl9yZXMoKSBzaW5jZQojIGZtb3ZlIG91dCBkb2Vzbid0IGFsdGVyIHRoZW0uCgl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgaXMgb3BlcmFuZCBuZWdhdGl2ZT8KCXNtaQkJJWQxCQkJIyBzZXQgaWYgc28KCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDAJCSMgcGFzczogZGJsIHByZWMscm5kIG1vZGUKCWJzci5sCQlvdmZfcmVzCQkJIyBjYWxjIE9WRkwgcmVzdWx0CglmbW92bS54CQkoJWEwKSwmMHg4MAkJIyBsb2FkIGRlZmF1bHQgb3ZlcmZsb3cgcmVzdWx0CglmbW92LmQJCSVmcDAsTF9TQ1IxKCVhNikJIyBzdG9yZSB0byBkb3VibGUKCgltb3YubAkJRVhDX0VBKCVhNiksJWExCQkjIHBhc3M6IGRzdCBhZGRyCglsZWEJCUxfU0NSMSglYTYpLCVhMAkJIyBwYXNzOiBzcmMgYWRkcgoJbW92cS5sCQkmMHg4LCVkMAkJIyBwYXNzOiBvcHNpemUgaXMgOCBieXRlcwoJYnNyLmwJCV9kbWVtX3dyaXRlCQkjIHN0b3JlIGRibCBmb3AgdG8gbWVtb3J5CgoJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBmYWlsPwoJYm5lLmwJCWZhY2Nfb3V0X2QJCSMgeWVzCgoJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCglhbmRpLmIJCSYweDBhLCVkMQkJIyBpcyBVTkZMIG9yIElORVggZW5hYmxlZD8KCWJuZS53CQlmb3V0X3NkX2V4Y19vdmZsCSMgeWVzCglhZGRxLmwJCSYweDQsJXNwCglydHMKCiMKIyBtb3ZlIG91dCBNQVkgb3ZlcmZsb3c6CiMgKDEpIGZvcmNlIHRoZSBleHAgdG8gMHgzZmZmCiMgKDIpIGRvIGEgbW92ZSB3LyBhcHByb3ByaWF0ZSBybmQgbW9kZQojICgzKSBpZiBleHAgc3RpbGwgZXF1YWxzIHplcm8sIHRoZW4gaW5zZXJ0IG9yaWdpbmFsIGV4cG9uZW50CiMJZm9yIHRoZSBjb3JyZWN0IHJlc3VsdC4KIyAgICAgaWYgZXhwIG5vdyBlcXVhbHMgb25lLCB0aGVuIGl0IG92ZXJmbG93ZWQgc28gY2FsbCBvdmZfcmVzLgojCmZvdXRfZGJsX21heV9vdmZsOgoJbW92LncJCVNSQ19FWCglYTApLCVkMQkJIyBmZXRjaCBjdXJyZW50IHNpZ24KCWFuZGkudwkJJjB4ODAwMCwlZDEJCSMga2VlcCBpdCxjbGVhciBleHAKCW9yaS53CQkmMHgzZmZmLCVkMQkJIyBpbnNlcnQgZXhwID0gMAoJbW92LncJCSVkMSxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgc2NhbGVkIGV4cAoJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KSAjIGNvcHkgaGkobWFuKQoJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KSAjIGNvcHkgbG8obWFuKQoKCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgoKCWZtb3YueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBmb3JjZSBmb3AgdG8gYmUgcm91bmRlZAoJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKCglmYWJzLngJCSVmcDAJCQkjIG5lZWQgYWJzb2x1dGUgdmFsdWUKCWZjbXAuYgkJJWZwMCwmMHgyCQkjIGRpZCBleHBvbmVudCBpbmNyZWFzZT8KCWZibHQudwkJZm91dF9kYmxfZXhnCQkjIG5vOyBnbyBmaW5pc2ggTk9STQoJYnJhLncJCWZvdXRfZGJsX292ZmwJCSMgeWVzOyBnbyBoYW5kbGUgb3ZlcmZsb3cKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWRzdF9kYmwoKTogY3JlYXRlIGRvdWJsZSBwcmVjaXNpb24gdmFsdWUgZnJvbSBleHRlbmRlZCBwcmVjLgkjCiMJCQkJCQkJCQkjCiMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlOb25lCQkJCQkJCQkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlhMCA9IHBvaW50ZXIgdG8gc291cmNlIG9wZXJhbmQgaW4gZXh0ZW5kZWQgcHJlY2lzaW9uCQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlkMCA9IGhpKGRvdWJsZSBwcmVjaXNpb24gcmVzdWx0KQkJCQkjCiMJZDEgPSBsbyhkb3VibGUgcHJlY2lzaW9uIHJlc3VsdCkJCQkJIwojCQkJCQkJCQkJIwojIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJCQkJCQkJCQkjCiMgIENoYW5nZXMgZXh0ZW5kZWQgcHJlY2lzaW9uIHRvIGRvdWJsZSBwcmVjaXNpb24uCQkJIwojICBOb3RlOiBubyBhdHRlbXB0IGlzIG1hZGUgdG8gcm91bmQgdGhlIGV4dGVuZGVkIHZhbHVlIHRvIGRvdWJsZS4JIwojCWRibF9zaWduID0gZXh0X3NpZ24JCQkJCQkjCiMJZGJsX2V4cCA9IGV4dF9leHAgLSAkM2ZmZihleHQgYmlhcykgKyAkN2ZmKGRibCBiaWFzKQkJIwojCWdldCByaWQgb2YgZXh0IGludGVnZXIgYml0CQkJCQkjCiMJZGJsX21hbnQgPSBleHRfbWFudHs2MjoxMn0JCQkJCSMKIwkJCQkJCQkJCSMKIwkJLS0tLS0tLS0tLS0tLS0tICAgLS0tLS0tLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0tLS0tLQkjCiMgIGV4dGVuZGVkIC0+ICB8c3wgICAgZXhwICAgIHwgICB8MXwgbXMgbWFudCAgIHwgICAgfCBscyBtYW50ICAgICB8CSMKIwkJLS0tLS0tLS0tLS0tLS0tICAgLS0tLS0tLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0tLS0tLQkjCiMJCSA5NQkgICAgNjQgICAgNjMgNjIJICAgICAgMzIgICAgICAzMSAgICAgMTEJICAwCSMKIwkJCQkgICAgIHwJCQkgICAgIHwJCSMKIwkJCQkgICAgIHwJCQkgICAgIHwJCSMKIwkJCQkgICAgIHwJCQkgICAgIHwJCSMKIwkJCSAgICAgICAgICAgICB2CQkJICAgICB2CQkjCiMJCQkgICAgICAtLS0tLS0tLS0tLS0tLS0gICAtLS0tLS0tLS0tLS0tLS0JCSMKIyAgZG91YmxlICAgLT4JCSAgICAgIHxzfGV4cHwgbWFudCAgfCAgIHwgIG1hbnQgICAgICAgfAkJIwojCQkJICAgICAgLS0tLS0tLS0tLS0tLS0tICAgLS0tLS0tLS0tLS0tLS0tCQkjCiMJCQkgICAgICA2MyAgICAgNTEgICAzMiAgIDMxCSAgICAgICAwCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKZHN0X2RibDoKCWNsci5sCQklZDAJCQkjIGNsZWFyIGQwCgltb3YudwkJRlRFTVBfRVgoJWEwKSwlZDAJIyBnZXQgZXhwb25lbnQKCXN1YmkudwkJJkVYVF9CSUFTLCVkMAkJIyBzdWJ0cmFjdCBleHRlbmRlZCBwcmVjaXNpb24gYmlhcwoJYWRkaS53CQkmREJMX0JJQVMsJWQwCQkjIGFkZCBkb3VibGUgcHJlY2lzaW9uIGJpYXMKCXRzdC5iCQlGVEVNUF9ISSglYTApCQkjIGlzIG51bWJlciBhIGRlbm9ybT8KCWJtaS5iCQlkc3RfZ2V0X2R1cHBlcgkJIyBubwoJc3VicS53CQkmMHgxLCVkMAkJIyB5ZXM7IGRlbm9ybSBiaWFzID0gREJMX0JJQVMgLSAxCmRzdF9nZXRfZHVwcGVyOgoJc3dhcAkJJWQwCQkJIyBkMCBub3cgaW4gdXBwZXIgd29yZAoJbHNsLmwJCSYweDQsJWQwCQkjIGQwIGluIHByb3BlciBwbGFjZSBmb3IgZGJsIHByZWMgZXhwCgl0c3QuYgkJRlRFTVBfRVgoJWEwKQkJIyB0ZXN0IHNpZ24KCWJwbC5iCQlkc3RfZ2V0X2RtYW4JCSMgaWYgcG9zdGl2ZSwgZ28gcHJvY2VzcyBtYW50aXNzYQoJYnNldAkJJjB4MWYsJWQwCQkjIGlmIG5lZ2F0aXZlLCBzZXQgc2lnbgpkc3RfZ2V0X2RtYW46Cgltb3YubAkJRlRFTVBfSEkoJWEwKSwlZDEJIyBnZXQgbXMgbWFudGlzc2EKCWJmZXh0dQkJJWQxeyYxOiYyMH0sJWQxCQkjIGdldCB1cHBlciAyMCBiaXRzIG9mIG1zCglvci5sCQklZDEsJWQwCQkJIyBwdXQgdGhlc2UgYml0cyBpbiBtcyB3b3JkIG9mIGRvdWJsZQoJbW92LmwJCSVkMCxMX1NDUjEoJWE2KQkJIyBwdXQgdGhlIG5ldyBleHAgYmFjayBvbiB0aGUgc3RhY2sKCW1vdi5sCQlGVEVNUF9ISSglYTApLCVkMQkjIGdldCBtcyBtYW50aXNzYQoJbW92LmwJCSYyMSwlZDAJCQkjIGxvYWQgc2hpZnQgY291bnQKCWxzbC5sCQklZDAsJWQxCQkJIyBwdXQgbG93ZXIgMTEgYml0cyBpbiB1cHBlciBiaXRzCgltb3YubAkJJWQxLExfU0NSMiglYTYpCQkjIGJ1aWxkIGxvd2VyIGx3b3JkIGluIG1lbW9yeQoJbW92LmwJCUZURU1QX0xPKCVhMCksJWQxCSMgZ2V0IGxzIG1hbnRpc3NhCgliZmV4dHUJCSVkMXsmMDomMjF9LCVkMAkJIyBnZXQgbHMgMjEgYml0cyBvZiBkb3VibGUKCW1vdi5sCQlMX1NDUjIoJWE2KSwlZDEKCW9yLmwJCSVkMCwlZDEJCQkjIHB1dCB0aGVtIGluIGRvdWJsZSByZXN1bHQKCW1vdi5sCQlMX1NDUjEoJWE2KSwlZDAKCXJ0cwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJZHN0X3NnbCgpOiBjcmVhdGUgc2luZ2xlIHByZWNpc2lvbiB2YWx1ZSBmcm9tIGV4dGVuZGVkIHByZWMJIwojCQkJCQkJCQkJIwojIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlhMCA9IHBvaW50ZXIgdG8gc291cmNlIG9wZXJhbmQgaW4gZXh0ZW5kZWQgcHJlY2lzaW9uCQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlkMCA9IHNpbmdsZSBwcmVjaXNpb24gcmVzdWx0CQkJCQkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwkJCQkJCQkJCSMKIyBDaGFuZ2VzIGV4dGVuZGVkIHByZWNpc2lvbiB0byBzaW5nbGUgcHJlY2lzaW9uLgkJCSMKIwlzZ2xfc2lnbiA9IGV4dF9zaWduCQkJCQkJIwojCXNnbF9leHAgPSBleHRfZXhwIC0gJDNmZmYoZXh0IGJpYXMpICsgJDdmKHNnbCBiaWFzKQkJIwojCWdldCByaWQgb2YgZXh0IGludGVnZXIgYml0CQkJCQkjCiMJc2dsX21hbnQgPSBleHRfbWFudHs2MjoxMn0JCQkJCSMKIwkJCQkJCQkJCSMKIwkJLS0tLS0tLS0tLS0tLS0tICAgLS0tLS0tLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0tLS0tLQkjCiMgIGV4dGVuZGVkIC0+ICB8c3wgICAgZXhwICAgIHwgICB8MXwgbXMgbWFudCAgIHwgICAgfCBscyBtYW50ICAgICB8CSMKIwkJLS0tLS0tLS0tLS0tLS0tICAgLS0tLS0tLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0tLS0tLQkjCiMJCSA5NQkgICAgNjQgICAgNjMgNjIJICAgNDAgMzIgICAgICAzMSAgICAgMTIJICAwCSMKIwkJCQkgICAgIHwJICAgfAkJCQkjCiMJCQkJICAgICB8CSAgIHwJCQkJIwojCQkJCSAgICAgfAkgICB8CQkJCSMKIwkJCSAgICAgICAgICAgICB2ICAgICB2CQkJCSMKIwkJCSAgICAgIC0tLS0tLS0tLS0tLS0tLQkJCQkjCiMgIHNpbmdsZSAgIC0+CQkgICAgICB8c3xleHB8IG1hbnQgIHwJCQkJIwojCQkJICAgICAgLS0tLS0tLS0tLS0tLS0tCQkJCSMKIwkJCSAgICAgIDMxICAgICAyMiAgICAgMAkJCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCmRzdF9zZ2w6CgljbHIubAkJJWQwCgltb3YudwkJRlRFTVBfRVgoJWEwKSwlZDAJIyBnZXQgZXhwb25lbnQKCXN1YmkudwkJJkVYVF9CSUFTLCVkMAkJIyBzdWJ0cmFjdCBleHRlbmRlZCBwcmVjaXNpb24gYmlhcwoJYWRkaS53CQkmU0dMX0JJQVMsJWQwCQkjIGFkZCBzaW5nbGUgcHJlY2lzaW9uIGJpYXMKCXRzdC5iCQlGVEVNUF9ISSglYTApCQkjIGlzIG51bWJlciBhIGRlbm9ybT8KCWJtaS5iCQlkc3RfZ2V0X3N1cHBlcgkJIyBubwoJc3VicS53CQkmMHgxLCVkMAkJIyB5ZXM7IGRlbm9ybSBiaWFzID0gU0dMX0JJQVMgLSAxCmRzdF9nZXRfc3VwcGVyOgoJc3dhcAkJJWQwCQkJIyBwdXQgZXhwIGluIHVwcGVyIHdvcmQgb2YgZDAKCWxzbC5sCQkmMHg3LCVkMAkJIyBzaGlmdCBpdCBpbnRvIHNpbmdsZSBleHAgYml0cwoJdHN0LmIJCUZURU1QX0VYKCVhMCkJCSMgdGVzdCBzaWduCglicGwuYgkJZHN0X2dldF9zbWFuCQkjIGlmIHBvc2l0aXZlLCBjb250aW51ZQoJYnNldAkJJjB4MWYsJWQwCQkjIGlmIG5lZ2F0aXZlLCBwdXQgaW4gc2lnbiBmaXJzdApkc3RfZ2V0X3NtYW46Cgltb3YubAkJRlRFTVBfSEkoJWEwKSwlZDEJIyBnZXQgbXMgbWFudGlzc2EKCWFuZGkubAkJJjB4N2ZmZmZmMDAsJWQxCQkjIGdldCB1cHBlciAyMyBiaXRzIG9mIG1zCglsc3IubAkJJjB4OCwlZDEJCSMgYW5kIHB1dCB0aGVtIGZsdXNoIHJpZ2h0Cglvci5sCQklZDEsJWQwCQkJIyBwdXQgdGhlc2UgYml0cyBpbiBtcyB3b3JkIG9mIHNpbmdsZQoJcnRzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZm91dF9wYWNrOgoJYnNyLmwJCV9jYWxjX2VhX2ZvdXQJCSMgZmV0Y2ggdGhlIDxlYT4KCW1vdi5sCQklYTAsLSglc3ApCgoJbW92LmIJCVNUQUcoJWE2KSwlZDAJCSMgZmV0Y2ggaW5wdXQgdHlwZQoJYm5lLncJCWZvdXRfcGFja19ub3Rfbm9ybQkjIGlucHV0IGlzIG5vdCBOT1JNCgpmb3V0X3BhY2tfbm9ybToKCWJ0c3QJCSYweDQsRVhDX0NNRFJFRyglYTYpCSMgc3RhdGljIG9yIGR5bmFtaWM/CgliZXEuYgkJZm91dF9wYWNrX3MJCSMgc3RhdGljCgpmb3V0X3BhY2tfZDoKCW1vdi5iCQkxK0VYQ19DTURSRUcoJWE2KSwlZDEJIyBmZXRjaCBkeW5hbWljIHJlZwoJbHNyLmIJCSYweDQsJWQxCglhbmRpLncJCSYweDcsJWQxCgoJYnNyLmwJCWZldGNoX2RyZWcJCSMgZmV0Y2ggRG4gdy8gay1mYWN0b3IKCglicmEuYgkJZm91dF9wYWNrX3R5cGUKZm91dF9wYWNrX3M6Cgltb3YuYgkJMStFWENfQ01EUkVHKCVhNiksJWQwCSMgZmV0Y2ggc3RhdGljIGZpZWxkCgpmb3V0X3BhY2tfdHlwZToKCWJmZXh0cwkJJWQweyYyNTomN30sJWQwCQkjIGV4dHJhY3Qgay1mYWN0b3IKCW1vdi5sCSVkMCwtKCVzcCkKCglsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzOiBwdHIgdG8gaW5wdXQKCiMgYmluZGVjIGlzIGN1cnJlbnRseSBzY3JhbWJsaW5nIEZQX1NSQyBmb3IgZGVub3JtIGlucHV0cy4KIyB3ZSdsbCBoYXZlIHRvIGNoYW5nZSB0aGlzLCBidXQgZm9yIG5vdywgdG91Z2ggbHVjayEhIQoJYnNyLmwJCWJpbmRlYwkJCSMgY29udmVydCB4cHJlYyB0byBwYWNrZWQKCiMJYW5kaS5sCQkmMHhjZmZmMDAwZixGUF9TQ1IwKCVhNikgIyBjbGVhciB1bnVzZWQgZmllbGRzCglhbmRpLmwJCSYweGNmZmZmMDBmLEZQX1NDUjAoJWE2KSAjIGNsZWFyIHVudXNlZCBmaWVsZHMKCgltb3YubAkoJXNwKSssJWQwCgoJdHN0LmIJCTMrRlBfU0NSMF9FWCglYTYpCglibmUuYgkJZm91dF9wYWNrX3NldAoJdHN0LmwJCUZQX1NDUjBfSEkoJWE2KQoJYm5lLmIJCWZvdXRfcGFja19zZXQKCXRzdC5sCQlGUF9TQ1IwX0xPKCVhNikKCWJuZS5iCQlmb3V0X3BhY2tfc2V0CgojIGFkZCB0aGUgZXh0cmEgY29uZGl0aW9uIHRoYXQgb25seSBpZiB0aGUgay1mYWN0b3Igd2FzIHplcm8sIHRvbywgc2hvdWxkCiMgd2UgemVybyB0aGUgZXhwb25lbnQKCXRzdC5sCQklZDAKCWJuZS5iCQlmb3V0X3BhY2tfc2V0CiMgIm1hbnRpc3NhIiBpcyBhbGwgemVybyB3aGljaCBtZWFucyB0aGF0IHRoZSBhbnN3ZXIgaXMgemVyby4gYnV0LCB0aGUgJzA0MAojIGFsZ29yaXRobSBhbGxvd3MgdGhlIGV4cG9uZW50IHRvIGJlIG5vbi16ZXJvLiB0aGUgODgxLzIgZG8gbm90LiB0aGVyZWZvcmUsCiMgaWYgdGhlIG1hbnRpc3NhIGlzIHplcm8sIEkgd2lsbCB6ZXJvIHRoZSBleHBvbmVudCwgdG9vLgojIHRoZSBxdWVzdGlvbiBub3cgaXMgd2hldGhlciB0aGUgZXhwb25lbnRzIHNpZ24gYml0IGlzIGFsbG93ZWQgdG8gYmUgbm9uLXplcm8KIyBmb3IgYSB6ZXJvLCBhbHNvLi4uCglhbmRpLncJCSYweGYwMDAsRlBfU0NSMCglYTYpCgpmb3V0X3BhY2tfc2V0OgoKCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHNyYyBhZGRyCgpmb3V0X3BhY2tfd3JpdGU6Cgltb3YubAkJKCVzcCkrLCVhMQkJIyBwYXNzOiBkc3QgYWRkcgoJbW92LmwJCSYweGMsJWQwCQkjIHBhc3M6IG9wc2l6ZSBpcyAxMiBieXRlcwoKCWNtcGkuYgkJU1BDT05EX0ZMRyglYTYpLCZtZGE3X2ZsZwoJYmVxLmIJCWZvdXRfcGFja19hNwoKCWJzci5sCQlfZG1lbV93cml0ZQkJIyB3cml0ZSBleHQgcHJlYyBudW1iZXIgdG8gbWVtb3J5CgoJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBmYWlsPwoJYm5lLncJCWZvdXRfZXh0X2VycgkJIyB5ZXMKCglydHMKCiMgd2UgZG9uJ3Qgd2FudCB0byBkbyB0aGUgd3JpdGUgaWYgdGhlIGV4Y2VwdGlvbiBvY2N1cnJlZCBpbiBzdXBlcnZpc29yIG1vZGUKIyBzbyBfbWVtX3dyaXRlMigpIGhhbmRsZXMgdGhpcyBmb3IgdXMuCmZvdXRfcGFja19hNzoKCWJzci5sCQlfbWVtX3dyaXRlMgkJIyB3cml0ZSBleHQgcHJlYyBudW1iZXIgdG8gbWVtb3J5CgoJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBmYWlsPwoJYm5lLncJCWZvdXRfZXh0X2VycgkJIyB5ZXMKCglydHMKCmZvdXRfcGFja19ub3Rfbm9ybToKCWNtcGkuYgkJJWQwLCZERU5PUk0JCSMgaXMgaXQgYSBERU5PUk0/CgliZXEudwkJZm91dF9wYWNrX25vcm0JCSMgeWVzCglsZWEJCUZQX1NSQyglYTYpLCVhMAoJY2xyLncJCTIrRlBfU1JDX0VYKCVhNikKCWNtcGkuYgkJJWQwLCZTTkFOCQkjIGlzIGl0IGFuIFNOQU4/CgliZXEuYgkJZm91dF9wYWNrX3NuYW4JCSMgeWVzCglicmEuYgkJZm91dF9wYWNrX3dyaXRlCQkjIG5vCgpmb3V0X3BhY2tfc25hbjoKCW9yaS53CQkmc25hbmlvcDJfbWFzayxGUFNSX0VYQ0VQVCglYTYpICMgc2V0IFNOQU4vQUlPUAoJYnNldAkJJjB4NixGUF9TUkNfSEkoJWE2KQkjIHNldCBzbmFuIGJpdAoJYnJhLmIJCWZvdXRfcGFja193cml0ZQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJZmV0Y2hfZHJlZygpOiBmZXRjaCByZWdpc3RlciBhY2NvcmRpbmcgdG8gaW5kZXggaW4gZDEJCSMKIwkJCQkJCQkJCSMKIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCU5vbmUJCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWQxID0gaW5kZXggb2YgcmVnaXN0ZXIgdG8gZmV0Y2ggZnJvbQkJCQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlkMCA9IHZhbHVlIG9mIHJlZ2lzdGVyIGZldGNoZWQJCQkJCSMKIwkJCQkJCQkJCSMKIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCUFjY29yZGluZyB0byB0aGUgaW5kZXggdmFsdWUgaW4gZDEgd2hpY2ggY2FuIHJhbmdlIGZyb20gemVybwkjCiMgdG8gZmlmdGVlbiwgbG9hZCB0aGUgY29ycmVzcG9uZGluZyByZWdpc3RlciBmaWxlIHZhbHVlICh3aGVyZQkJIwojIGFkZHJlc3MgcmVnaXN0ZXIgaW5kZXhlcyBzdGFydCBhdCA4KS4gRDAvRDEvQTAvQTEvQTYvQTcgYXJlIG9uIHRoZQkjCiMgc3RhY2suIFRoZSByZXN0IHNob3VsZCBzdGlsbCBiZSBpbiB0aGVpciBvcmlnaW5hbCBwbGFjZXMuCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMgdGhpcyByb3V0aW5lIGxlYXZlcyBkMSBpbnRhY3QgZm9yIHN1YnNlcXVlbnQgc3RvcmVfZHJlZyBjYWxscy4KCWdsb2JhbAkJZmV0Y2hfZHJlZwpmZXRjaF9kcmVnOgoJbW92LncJCSh0YmxfZmRyZWcuYiwlcGMsJWQxLncqMiksJWQwCglqbXAJCSh0YmxfZmRyZWcuYiwlcGMsJWQwLncqMSkKCnRibF9mZHJlZzoKCXNob3J0CQlmZHJlZzAgLSB0YmxfZmRyZWcKCXNob3J0CQlmZHJlZzEgLSB0YmxfZmRyZWcKCXNob3J0CQlmZHJlZzIgLSB0YmxfZmRyZWcKCXNob3J0CQlmZHJlZzMgLSB0YmxfZmRyZWcKCXNob3J0CQlmZHJlZzQgLSB0YmxfZmRyZWcKCXNob3J0CQlmZHJlZzUgLSB0YmxfZmRyZWcKCXNob3J0CQlmZHJlZzYgLSB0YmxfZmRyZWcKCXNob3J0CQlmZHJlZzcgLSB0YmxfZmRyZWcKCXNob3J0CQlmZHJlZzggLSB0YmxfZmRyZWcKCXNob3J0CQlmZHJlZzkgLSB0YmxfZmRyZWcKCXNob3J0CQlmZHJlZ2EgLSB0YmxfZmRyZWcKCXNob3J0CQlmZHJlZ2IgLSB0YmxfZmRyZWcKCXNob3J0CQlmZHJlZ2MgLSB0YmxfZmRyZWcKCXNob3J0CQlmZHJlZ2QgLSB0YmxfZmRyZWcKCXNob3J0CQlmZHJlZ2UgLSB0YmxfZmRyZWcKCXNob3J0CQlmZHJlZ2YgLSB0YmxfZmRyZWcKCmZkcmVnMDoKCW1vdi5sCQlFWENfRFJFR1MrMHgwKCVhNiksJWQwCglydHMKZmRyZWcxOgoJbW92LmwJCUVYQ19EUkVHUysweDQoJWE2KSwlZDAKCXJ0cwpmZHJlZzI6Cgltb3YubAkJJWQyLCVkMAoJcnRzCmZkcmVnMzoKCW1vdi5sCQklZDMsJWQwCglydHMKZmRyZWc0OgoJbW92LmwJCSVkNCwlZDAKCXJ0cwpmZHJlZzU6Cgltb3YubAkJJWQ1LCVkMAoJcnRzCmZkcmVnNjoKCW1vdi5sCQklZDYsJWQwCglydHMKZmRyZWc3OgoJbW92LmwJCSVkNywlZDAKCXJ0cwpmZHJlZzg6Cgltb3YubAkJRVhDX0RSRUdTKzB4OCglYTYpLCVkMAoJcnRzCmZkcmVnOToKCW1vdi5sCQlFWENfRFJFR1MrMHhjKCVhNiksJWQwCglydHMKZmRyZWdhOgoJbW92LmwJCSVhMiwlZDAKCXJ0cwpmZHJlZ2I6Cgltb3YubAkJJWEzLCVkMAoJcnRzCmZkcmVnYzoKCW1vdi5sCQklYTQsJWQwCglydHMKZmRyZWdkOgoJbW92LmwJCSVhNSwlZDAKCXJ0cwpmZHJlZ2U6Cgltb3YubAkJKCVhNiksJWQwCglydHMKZmRyZWdmOgoJbW92LmwJCUVYQ19BNyglYTYpLCVkMAoJcnRzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlzdG9yZV9kcmVnX2woKTogc3RvcmUgbG9uZ3dvcmQgdG8gZGF0YSByZWdpc3RlciBzcGVjaWZpZWQgYnkgZDEJIwojCQkJCQkJCQkJIwojIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJTm9uZQkJCQkJCQkJIwojCQkJCQkJCQkJIwojIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJZDAgPSBsb25nb3dyZCB2YWx1ZSB0byBzdG9yZQkJCQkJIwojCWQxID0gaW5kZXggb2YgcmVnaXN0ZXIgdG8gZmV0Y2ggZnJvbQkJCQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwkoZGF0YSByZWdpc3RlciBpcyB1cGRhdGVkKQkJCQkJIwojCQkJCQkJCQkJIwojIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJQWNjb3JkaW5nIHRvIHRoZSBpbmRleCB2YWx1ZSBpbiBkMSwgc3RvcmUgdGhlIGxvbmd3b3JkIHZhbHVlCSMKIyBpbiBkMCB0byB0aGUgY29ycmVzcG9uZGluZyBkYXRhIHJlZ2lzdGVyLiBEMC9EMSBhcmUgb24gdGhlIHN0YWNrCSMKIyB3aGlsZSB0aGUgcmVzdCBhcmUgaW4gdGhlaXIgaW5pdGlhbCBwbGFjZXMuCQkJCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCWdsb2JhbAkJc3RvcmVfZHJlZ19sCnN0b3JlX2RyZWdfbDoKCW1vdi53CQkodGJsX3NkcmVnbC5iLCVwYywlZDEudyoyKSwlZDEKCWptcAkJKHRibF9zZHJlZ2wuYiwlcGMsJWQxLncqMSkKCnRibF9zZHJlZ2w6CglzaG9ydAkJc2RyZWdsMCAtIHRibF9zZHJlZ2wKCXNob3J0CQlzZHJlZ2wxIC0gdGJsX3NkcmVnbAoJc2hvcnQJCXNkcmVnbDIgLSB0Ymxfc2RyZWdsCglzaG9ydAkJc2RyZWdsMyAtIHRibF9zZHJlZ2wKCXNob3J0CQlzZHJlZ2w0IC0gdGJsX3NkcmVnbAoJc2hvcnQJCXNkcmVnbDUgLSB0Ymxfc2RyZWdsCglzaG9ydAkJc2RyZWdsNiAtIHRibF9zZHJlZ2wKCXNob3J0CQlzZHJlZ2w3IC0gdGJsX3NkcmVnbAoKc2RyZWdsMDoKCW1vdi5sCQklZDAsRVhDX0RSRUdTKzB4MCglYTYpCglydHMKc2RyZWdsMToKCW1vdi5sCQklZDAsRVhDX0RSRUdTKzB4NCglYTYpCglydHMKc2RyZWdsMjoKCW1vdi5sCQklZDAsJWQyCglydHMKc2RyZWdsMzoKCW1vdi5sCQklZDAsJWQzCglydHMKc2RyZWdsNDoKCW1vdi5sCQklZDAsJWQ0CglydHMKc2RyZWdsNToKCW1vdi5sCQklZDAsJWQ1CglydHMKc2RyZWdsNjoKCW1vdi5sCQklZDAsJWQ2CglydHMKc2RyZWdsNzoKCW1vdi5sCQklZDAsJWQ3CglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCXN0b3JlX2RyZWdfdygpOiBzdG9yZSB3b3JkIHRvIGRhdGEgcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5IGQxCSMKIwkJCQkJCQkJCSMKIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCU5vbmUJCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWQwID0gd29yZCB2YWx1ZSB0byBzdG9yZQkJCQkJIwojCWQxID0gaW5kZXggb2YgcmVnaXN0ZXIgdG8gZmV0Y2ggZnJvbQkJCQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwkoZGF0YSByZWdpc3RlciBpcyB1cGRhdGVkKQkJCQkJIwojCQkJCQkJCQkJIwojIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJQWNjb3JkaW5nIHRvIHRoZSBpbmRleCB2YWx1ZSBpbiBkMSwgc3RvcmUgdGhlIHdvcmQgdmFsdWUJIwojIGluIGQwIHRvIHRoZSBjb3JyZXNwb25kaW5nIGRhdGEgcmVnaXN0ZXIuIEQwL0QxIGFyZSBvbiB0aGUgc3RhY2sJIwojIHdoaWxlIHRoZSByZXN0IGFyZSBpbiB0aGVpciBpbml0aWFsIHBsYWNlcy4JCQkJIwojCQkJCQkJCQkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoJZ2xvYmFsCQlzdG9yZV9kcmVnX3cKc3RvcmVfZHJlZ193OgoJbW92LncJCSh0Ymxfc2RyZWd3LmIsJXBjLCVkMS53KjIpLCVkMQoJam1wCQkodGJsX3NkcmVndy5iLCVwYywlZDEudyoxKQoKdGJsX3NkcmVndzoKCXNob3J0CQlzZHJlZ3cwIC0gdGJsX3NkcmVndwoJc2hvcnQJCXNkcmVndzEgLSB0Ymxfc2RyZWd3CglzaG9ydAkJc2RyZWd3MiAtIHRibF9zZHJlZ3cKCXNob3J0CQlzZHJlZ3czIC0gdGJsX3NkcmVndwoJc2hvcnQJCXNkcmVndzQgLSB0Ymxfc2RyZWd3CglzaG9ydAkJc2RyZWd3NSAtIHRibF9zZHJlZ3cKCXNob3J0CQlzZHJlZ3c2IC0gdGJsX3NkcmVndwoJc2hvcnQJCXNkcmVndzcgLSB0Ymxfc2RyZWd3CgpzZHJlZ3cwOgoJbW92LncJCSVkMCwyK0VYQ19EUkVHUysweDAoJWE2KQoJcnRzCnNkcmVndzE6Cgltb3YudwkJJWQwLDIrRVhDX0RSRUdTKzB4NCglYTYpCglydHMKc2RyZWd3MjoKCW1vdi53CQklZDAsJWQyCglydHMKc2RyZWd3MzoKCW1vdi53CQklZDAsJWQzCglydHMKc2RyZWd3NDoKCW1vdi53CQklZDAsJWQ0CglydHMKc2RyZWd3NToKCW1vdi53CQklZDAsJWQ1CglydHMKc2RyZWd3NjoKCW1vdi53CQklZDAsJWQ2CglydHMKc2RyZWd3NzoKCW1vdi53CQklZDAsJWQ3CglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCXN0b3JlX2RyZWdfYigpOiBzdG9yZSBieXRlIHRvIGRhdGEgcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5IGQxCSMKIwkJCQkJCQkJCSMKIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCU5vbmUJCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWQwID0gYnl0ZSB2YWx1ZSB0byBzdG9yZQkJCQkJIwojCWQxID0gaW5kZXggb2YgcmVnaXN0ZXIgdG8gZmV0Y2ggZnJvbQkJCQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwkoZGF0YSByZWdpc3RlciBpcyB1cGRhdGVkKQkJCQkJIwojCQkJCQkJCQkJIwojIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJQWNjb3JkaW5nIHRvIHRoZSBpbmRleCB2YWx1ZSBpbiBkMSwgc3RvcmUgdGhlIGJ5dGUgdmFsdWUJIwojIGluIGQwIHRvIHRoZSBjb3JyZXNwb25kaW5nIGRhdGEgcmVnaXN0ZXIuIEQwL0QxIGFyZSBvbiB0aGUgc3RhY2sJIwojIHdoaWxlIHRoZSByZXN0IGFyZSBpbiB0aGVpciBpbml0aWFsIHBsYWNlcy4JCQkJIwojCQkJCQkJCQkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoJZ2xvYmFsCQlzdG9yZV9kcmVnX2IKc3RvcmVfZHJlZ19iOgoJbW92LncJCSh0Ymxfc2RyZWdiLmIsJXBjLCVkMS53KjIpLCVkMQoJam1wCQkodGJsX3NkcmVnYi5iLCVwYywlZDEudyoxKQoKdGJsX3NkcmVnYjoKCXNob3J0CQlzZHJlZ2IwIC0gdGJsX3NkcmVnYgoJc2hvcnQJCXNkcmVnYjEgLSB0Ymxfc2RyZWdiCglzaG9ydAkJc2RyZWdiMiAtIHRibF9zZHJlZ2IKCXNob3J0CQlzZHJlZ2IzIC0gdGJsX3NkcmVnYgoJc2hvcnQJCXNkcmVnYjQgLSB0Ymxfc2RyZWdiCglzaG9ydAkJc2RyZWdiNSAtIHRibF9zZHJlZ2IKCXNob3J0CQlzZHJlZ2I2IC0gdGJsX3NkcmVnYgoJc2hvcnQJCXNkcmVnYjcgLSB0Ymxfc2RyZWdiCgpzZHJlZ2IwOgoJbW92LmIJCSVkMCwzK0VYQ19EUkVHUysweDAoJWE2KQoJcnRzCnNkcmVnYjE6Cgltb3YuYgkJJWQwLDMrRVhDX0RSRUdTKzB4NCglYTYpCglydHMKc2RyZWdiMjoKCW1vdi5iCQklZDAsJWQyCglydHMKc2RyZWdiMzoKCW1vdi5iCQklZDAsJWQzCglydHMKc2RyZWdiNDoKCW1vdi5iCQklZDAsJWQ0CglydHMKc2RyZWdiNToKCW1vdi5iCQklZDAsJWQ1CglydHMKc2RyZWdiNjoKCW1vdi5iCQklZDAsJWQ2CglydHMKc2RyZWdiNzoKCW1vdi5iCQklZDAsJWQ3CglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWluY19hcmVnKCk6IGluY3JlbWVudCBhbiBhZGRyZXNzIHJlZ2lzdGVyIGJ5IHRoZSB2YWx1ZSBpbiBkMAkjCiMJCQkJCQkJCQkjCiMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlOb25lCQkJCQkJCQkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlkMCA9IGFtb3VudCB0byBpbmNyZW1lbnQgYnkJCQkJCSMKIwlkMSA9IGluZGV4IG9mIGFkZHJlc3MgcmVnaXN0ZXIgdG8gaW5jcmVtZW50CQkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJKGFkZHJlc3MgcmVnaXN0ZXIgaXMgdXBkYXRlZCkJCQkJCSMKIwkJCQkJCQkJCSMKIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCVR5cGljYWxseSB1c2VkIGZvciBhbiBpbnN0cnVjdGlvbiB3LyBhIHBvc3QtaW5jcmVtZW50IDxlYT4sCSMKIyB0aGlzIHJvdXRpbmUgYWRkcyB0aGUgaW5jcmVtZW50IHZhbHVlIGluIGQwIHRvIHRoZSBhZGRyZXNzIHJlZ2lzdGVyCSMKIyBzcGVjaWZpZWQgYnkgZDEuIEEwL0ExL0E2L0E3IHJlc2lkZSBvbiB0aGUgc3RhY2suIFRoZSByZXN0IHJlc2lkZQkjCiMgaW4gdGhlaXIgb3JpZ2luYWwgcGxhY2VzLgkJCQkJCSMKIwlGb3IgYTcsIGlmIHRoZSBpbmNyZW1lbnQgYW1vdW50IGlzIG9uZSwgdGhlbiB3ZSBoYXZlIHRvCQkjCiMgaW5jcmVtZW50IGJ5IHR3by4gRm9yIGFueSBhNyB1cGRhdGUsIHNldCB0aGUgbWlhN19mbGFnIHNvIHRoYXQgaWYJIwojIGFuIGFjY2VzcyBlcnJvciBleGNlcHRpb24gb2NjdXJzIGxhdGVyIGluIGVtdWxhdGlvbiwgdGhpcyBhZGRyZXNzCSMKIyByZWdpc3RlciB1cGRhdGUgY2FuIGJlIHVuZG9uZS4JCQkJCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCWdsb2JhbAkJaW5jX2FyZWcKaW5jX2FyZWc6Cgltb3YudwkJKHRibF9pYXJlZy5iLCVwYywlZDEudyoyKSwlZDEKCWptcAkJKHRibF9pYXJlZy5iLCVwYywlZDEudyoxKQoKdGJsX2lhcmVnOgoJc2hvcnQJCWlhcmVnMCAtIHRibF9pYXJlZwoJc2hvcnQJCWlhcmVnMSAtIHRibF9pYXJlZwoJc2hvcnQJCWlhcmVnMiAtIHRibF9pYXJlZwoJc2hvcnQJCWlhcmVnMyAtIHRibF9pYXJlZwoJc2hvcnQJCWlhcmVnNCAtIHRibF9pYXJlZwoJc2hvcnQJCWlhcmVnNSAtIHRibF9pYXJlZwoJc2hvcnQJCWlhcmVnNiAtIHRibF9pYXJlZwoJc2hvcnQJCWlhcmVnNyAtIHRibF9pYXJlZwoKaWFyZWcwOglhZGQubAkJJWQwLEVYQ19EUkVHUysweDgoJWE2KQoJcnRzCmlhcmVnMToJYWRkLmwJCSVkMCxFWENfRFJFR1MrMHhjKCVhNikKCXJ0cwppYXJlZzI6CWFkZC5sCQklZDAsJWEyCglydHMKaWFyZWczOglhZGQubAkJJWQwLCVhMwoJcnRzCmlhcmVnNDoJYWRkLmwJCSVkMCwlYTQKCXJ0cwppYXJlZzU6CWFkZC5sCQklZDAsJWE1CglydHMKaWFyZWc2OglhZGQubAkJJWQwLCglYTYpCglydHMKaWFyZWc3Ogltb3YuYgkJJm1pYTdfZmxnLFNQQ09ORF9GTEcoJWE2KQoJY21waS5iCQklZDAsJjB4MQoJYmVxLmIJCWlhcmVnN2IKCWFkZC5sCQklZDAsRVhDX0E3KCVhNikKCXJ0cwppYXJlZzdiOgoJYWRkcS5sCQkmMHgyLEVYQ19BNyglYTYpCglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWRlY19hcmVnKCk6IGRlY3JlbWVudCBhbiBhZGRyZXNzIHJlZ2lzdGVyIGJ5IHRoZSB2YWx1ZSBpbiBkMAkjCiMJCQkJCQkJCQkjCiMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlOb25lCQkJCQkJCQkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlkMCA9IGFtb3VudCB0byBkZWNyZW1lbnQgYnkJCQkJCSMKIwlkMSA9IGluZGV4IG9mIGFkZHJlc3MgcmVnaXN0ZXIgdG8gZGVjcmVtZW50CQkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJKGFkZHJlc3MgcmVnaXN0ZXIgaXMgdXBkYXRlZCkJCQkJCSMKIwkJCQkJCQkJCSMKIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCVR5cGljYWxseSB1c2VkIGZvciBhbiBpbnN0cnVjdGlvbiB3LyBhIHByZS1kZWNyZW1lbnQgPGVhPiwJIwojIHRoaXMgcm91dGluZSBhZGRzIHRoZSBkZWNyZW1lbnQgdmFsdWUgaW4gZDAgdG8gdGhlIGFkZHJlc3MgcmVnaXN0ZXIJIwojIHNwZWNpZmllZCBieSBkMS4gQTAvQTEvQTYvQTcgcmVzaWRlIG9uIHRoZSBzdGFjay4gVGhlIHJlc3QgcmVzaWRlCSMKIyBpbiB0aGVpciBvcmlnaW5hbCBwbGFjZXMuCQkJCQkJIwojCUZvciBhNywgaWYgdGhlIGRlY3JlbWVudCBhbW91bnQgaXMgb25lLCB0aGVuIHdlIGhhdmUgdG8JCSMKIyBkZWNyZW1lbnQgYnkgdHdvLiBGb3IgYW55IGE3IHVwZGF0ZSwgc2V0IHRoZSBtZGE3X2ZsYWcgc28gdGhhdCBpZgkjCiMgYW4gYWNjZXNzIGVycm9yIGV4Y2VwdGlvbiBvY2N1cnMgbGF0ZXIgaW4gZW11bGF0aW9uLCB0aGlzIGFkZHJlc3MJIwojIHJlZ2lzdGVyIHVwZGF0ZSBjYW4gYmUgdW5kb25lLgkJCQkJIwojCQkJCQkJCQkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoJZ2xvYmFsCQlkZWNfYXJlZwpkZWNfYXJlZzoKCW1vdi53CQkodGJsX2RhcmVnLmIsJXBjLCVkMS53KjIpLCVkMQoJam1wCQkodGJsX2RhcmVnLmIsJXBjLCVkMS53KjEpCgp0YmxfZGFyZWc6CglzaG9ydAkJZGFyZWcwIC0gdGJsX2RhcmVnCglzaG9ydAkJZGFyZWcxIC0gdGJsX2RhcmVnCglzaG9ydAkJZGFyZWcyIC0gdGJsX2RhcmVnCglzaG9ydAkJZGFyZWczIC0gdGJsX2RhcmVnCglzaG9ydAkJZGFyZWc0IC0gdGJsX2RhcmVnCglzaG9ydAkJZGFyZWc1IC0gdGJsX2RhcmVnCglzaG9ydAkJZGFyZWc2IC0gdGJsX2RhcmVnCglzaG9ydAkJZGFyZWc3IC0gdGJsX2RhcmVnCgpkYXJlZzA6CXN1Yi5sCQklZDAsRVhDX0RSRUdTKzB4OCglYTYpCglydHMKZGFyZWcxOglzdWIubAkJJWQwLEVYQ19EUkVHUysweGMoJWE2KQoJcnRzCmRhcmVnMjoJc3ViLmwJCSVkMCwlYTIKCXJ0cwpkYXJlZzM6CXN1Yi5sCQklZDAsJWEzCglydHMKZGFyZWc0OglzdWIubAkJJWQwLCVhNAoJcnRzCmRhcmVnNToJc3ViLmwJCSVkMCwlYTUKCXJ0cwpkYXJlZzY6CXN1Yi5sCQklZDAsKCVhNikKCXJ0cwpkYXJlZzc6CW1vdi5iCQkmbWRhN19mbGcsU1BDT05EX0ZMRyglYTYpCgljbXBpLmIJCSVkMCwmMHgxCgliZXEuYgkJZGFyZWc3YgoJc3ViLmwJCSVkMCxFWENfQTcoJWE2KQoJcnRzCmRhcmVnN2I6CglzdWJxLmwJCSYweDIsRVhDX0E3KCVhNikKCXJ0cwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlsb2FkX2ZwbjEoKTogbG9hZCBGUCByZWdpc3RlciB2YWx1ZSBpbnRvIEZQX1NSQyhhNikuCQkjCiMJCQkJCQkJCQkjCiMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlOb25lCQkJCQkJCQkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlkMCA9IGluZGV4IG9mIEZQIHJlZ2lzdGVyIHRvIGxvYWQJCQkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJRlBfU1JDKGE2KSA9IHZhbHVlIGxvYWRlZCBmcm9tIEZQIHJlZ2lzdGVyIGZpbGUJCQkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlVc2luZyB0aGUgaW5kZXggaW4gZDAsIGxvYWQgRlBfU1JDKGE2KSB3aXRoIGEgbnVtYmVyIGZyb20gdGhlCSMKIyBGUCByZWdpc3RlciBmaWxlLgkJCQkJCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCglnbG9iYWwJCWxvYWRfZnBuMQpsb2FkX2ZwbjE6Cgltb3YudwkJKHRibF9sb2FkX2ZwbjEuYiwlcGMsJWQwLncqMiksICVkMAoJam1wCQkodGJsX2xvYWRfZnBuMS5iLCVwYywlZDAudyoxKQoKdGJsX2xvYWRfZnBuMToKCXNob3J0CQlsb2FkX2ZwbjFfMCAtIHRibF9sb2FkX2ZwbjEKCXNob3J0CQlsb2FkX2ZwbjFfMSAtIHRibF9sb2FkX2ZwbjEKCXNob3J0CQlsb2FkX2ZwbjFfMiAtIHRibF9sb2FkX2ZwbjEKCXNob3J0CQlsb2FkX2ZwbjFfMyAtIHRibF9sb2FkX2ZwbjEKCXNob3J0CQlsb2FkX2ZwbjFfNCAtIHRibF9sb2FkX2ZwbjEKCXNob3J0CQlsb2FkX2ZwbjFfNSAtIHRibF9sb2FkX2ZwbjEKCXNob3J0CQlsb2FkX2ZwbjFfNiAtIHRibF9sb2FkX2ZwbjEKCXNob3J0CQlsb2FkX2ZwbjFfNyAtIHRibF9sb2FkX2ZwbjEKCmxvYWRfZnBuMV8wOgoJbW92LmwJCTArRVhDX0ZQMCglYTYpLCAwK0ZQX1NSQyglYTYpCgltb3YubAkJNCtFWENfRlAwKCVhNiksIDQrRlBfU1JDKCVhNikKCW1vdi5sCQk4K0VYQ19GUDAoJWE2KSwgOCtGUF9TUkMoJWE2KQoJbGVhCQlGUF9TUkMoJWE2KSwgJWEwCglydHMKbG9hZF9mcG4xXzE6Cgltb3YubAkJMCtFWENfRlAxKCVhNiksIDArRlBfU1JDKCVhNikKCW1vdi5sCQk0K0VYQ19GUDEoJWE2KSwgNCtGUF9TUkMoJWE2KQoJbW92LmwJCTgrRVhDX0ZQMSglYTYpLCA4K0ZQX1NSQyglYTYpCglsZWEJCUZQX1NSQyglYTYpLCAlYTAKCXJ0cwpsb2FkX2ZwbjFfMjoKCWZtb3ZtLngJCSYweDIwLCBGUF9TUkMoJWE2KQoJbGVhCQlGUF9TUkMoJWE2KSwgJWEwCglydHMKbG9hZF9mcG4xXzM6CglmbW92bS54CQkmMHgxMCwgRlBfU1JDKCVhNikKCWxlYQkJRlBfU1JDKCVhNiksICVhMAoJcnRzCmxvYWRfZnBuMV80OgoJZm1vdm0ueAkJJjB4MDgsIEZQX1NSQyglYTYpCglsZWEJCUZQX1NSQyglYTYpLCAlYTAKCXJ0cwpsb2FkX2ZwbjFfNToKCWZtb3ZtLngJCSYweDA0LCBGUF9TUkMoJWE2KQoJbGVhCQlGUF9TUkMoJWE2KSwgJWEwCglydHMKbG9hZF9mcG4xXzY6CglmbW92bS54CQkmMHgwMiwgRlBfU1JDKCVhNikKCWxlYQkJRlBfU1JDKCVhNiksICVhMAoJcnRzCmxvYWRfZnBuMV83OgoJZm1vdm0ueAkJJjB4MDEsIEZQX1NSQyglYTYpCglsZWEJCUZQX1NSQyglYTYpLCAlYTAKCXJ0cwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWxvYWRfZnBuMigpOiBsb2FkIEZQIHJlZ2lzdGVyIHZhbHVlIGludG8gRlBfRFNUKGE2KS4JCSMKIwkJCQkJCQkJCSMKIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCU5vbmUJCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWQwID0gaW5kZXggb2YgRlAgcmVnaXN0ZXIgdG8gbG9hZAkJCQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlGUF9EU1QoYTYpID0gdmFsdWUgbG9hZGVkIGZyb20gRlAgcmVnaXN0ZXIgZmlsZQkJCSMKIwkJCQkJCQkJCSMKIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCVVzaW5nIHRoZSBpbmRleCBpbiBkMCwgbG9hZCBGUF9EU1QoYTYpIHdpdGggYSBudW1iZXIgZnJvbSB0aGUJIwojIEZQIHJlZ2lzdGVyIGZpbGUuCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCWdsb2JhbAkJbG9hZF9mcG4yCmxvYWRfZnBuMjoKCW1vdi53CQkodGJsX2xvYWRfZnBuMi5iLCVwYywlZDAudyoyKSwgJWQwCglqbXAJCSh0YmxfbG9hZF9mcG4yLmIsJXBjLCVkMC53KjEpCgp0YmxfbG9hZF9mcG4yOgoJc2hvcnQJCWxvYWRfZnBuMl8wIC0gdGJsX2xvYWRfZnBuMgoJc2hvcnQJCWxvYWRfZnBuMl8xIC0gdGJsX2xvYWRfZnBuMgoJc2hvcnQJCWxvYWRfZnBuMl8yIC0gdGJsX2xvYWRfZnBuMgoJc2hvcnQJCWxvYWRfZnBuMl8zIC0gdGJsX2xvYWRfZnBuMgoJc2hvcnQJCWxvYWRfZnBuMl80IC0gdGJsX2xvYWRfZnBuMgoJc2hvcnQJCWxvYWRfZnBuMl81IC0gdGJsX2xvYWRfZnBuMgoJc2hvcnQJCWxvYWRfZnBuMl82IC0gdGJsX2xvYWRfZnBuMgoJc2hvcnQJCWxvYWRfZnBuMl83IC0gdGJsX2xvYWRfZnBuMgoKbG9hZF9mcG4yXzA6Cgltb3YubAkJMCtFWENfRlAwKCVhNiksIDArRlBfRFNUKCVhNikKCW1vdi5sCQk0K0VYQ19GUDAoJWE2KSwgNCtGUF9EU1QoJWE2KQoJbW92LmwJCTgrRVhDX0ZQMCglYTYpLCA4K0ZQX0RTVCglYTYpCglsZWEJCUZQX0RTVCglYTYpLCAlYTAKCXJ0cwpsb2FkX2ZwbjJfMToKCW1vdi5sCQkwK0VYQ19GUDEoJWE2KSwgMCtGUF9EU1QoJWE2KQoJbW92LmwJCTQrRVhDX0ZQMSglYTYpLCA0K0ZQX0RTVCglYTYpCgltb3YubAkJOCtFWENfRlAxKCVhNiksIDgrRlBfRFNUKCVhNikKCWxlYQkJRlBfRFNUKCVhNiksICVhMAoJcnRzCmxvYWRfZnBuMl8yOgoJZm1vdm0ueAkJJjB4MjAsIEZQX0RTVCglYTYpCglsZWEJCUZQX0RTVCglYTYpLCAlYTAKCXJ0cwpsb2FkX2ZwbjJfMzoKCWZtb3ZtLngJCSYweDEwLCBGUF9EU1QoJWE2KQoJbGVhCQlGUF9EU1QoJWE2KSwgJWEwCglydHMKbG9hZF9mcG4yXzQ6CglmbW92bS54CQkmMHgwOCwgRlBfRFNUKCVhNikKCWxlYQkJRlBfRFNUKCVhNiksICVhMAoJcnRzCmxvYWRfZnBuMl81OgoJZm1vdm0ueAkJJjB4MDQsIEZQX0RTVCglYTYpCglsZWEJCUZQX0RTVCglYTYpLCAlYTAKCXJ0cwpsb2FkX2ZwbjJfNjoKCWZtb3ZtLngJCSYweDAyLCBGUF9EU1QoJWE2KQoJbGVhCQlGUF9EU1QoJWE2KSwgJWEwCglydHMKbG9hZF9mcG4yXzc6CglmbW92bS54CQkmMHgwMSwgRlBfRFNUKCVhNikKCWxlYQkJRlBfRFNUKCVhNiksICVhMAoJcnRzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJc3RvcmVfZnByZWcoKTogc3RvcmUgYW4gZnAgdmFsdWUgdG8gdGhlIGZwcmVnIGRlc2lnbmF0ZWQgZDAuCSMKIwkJCQkJCQkJCSMKIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCU5vbmUJCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWZwMCA9IGV4dGVuZGVkIHByZWNpc2lvbiB2YWx1ZSB0byBzdG9yZQkJCQkjCiMJZDAgID0gaW5kZXggb2YgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXIJCQkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJTm9uZQkJCQkJCQkJIwojCQkJCQkJCQkJIwojIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJU3RvcmUgdGhlIHZhbHVlIGluIGZwMCB0byB0aGUgRlAgcmVnaXN0ZXIgZGVzaWduYXRlZCBieSB0aGUJIwojIHZhbHVlIGluIGQwLiBUaGUgRlAgbnVtYmVyIGNhbiBiZSBERU5PUk0gb3IgU05BTiBzbyB3ZSBoYXZlIHRvIGJlCSMKIyBjYXJlZnVsIHRoYXQgd2UgZG9uJ3QgdGFrZSBhbiBleGNlcHRpb24gaGVyZS4JCQkJIwojCQkJCQkJCQkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoJZ2xvYmFsCQlzdG9yZV9mcHJlZwpzdG9yZV9mcHJlZzoKCW1vdi53CQkodGJsX3N0b3JlX2ZwcmVnLmIsJXBjLCVkMC53KjIpLCAlZDAKCWptcAkJKHRibF9zdG9yZV9mcHJlZy5iLCVwYywlZDAudyoxKQoKdGJsX3N0b3JlX2ZwcmVnOgoJc2hvcnQJCXN0b3JlX2ZwcmVnXzAgLSB0Ymxfc3RvcmVfZnByZWcKCXNob3J0CQlzdG9yZV9mcHJlZ18xIC0gdGJsX3N0b3JlX2ZwcmVnCglzaG9ydAkJc3RvcmVfZnByZWdfMiAtIHRibF9zdG9yZV9mcHJlZwoJc2hvcnQJCXN0b3JlX2ZwcmVnXzMgLSB0Ymxfc3RvcmVfZnByZWcKCXNob3J0CQlzdG9yZV9mcHJlZ180IC0gdGJsX3N0b3JlX2ZwcmVnCglzaG9ydAkJc3RvcmVfZnByZWdfNSAtIHRibF9zdG9yZV9mcHJlZwoJc2hvcnQJCXN0b3JlX2ZwcmVnXzYgLSB0Ymxfc3RvcmVfZnByZWcKCXNob3J0CQlzdG9yZV9mcHJlZ183IC0gdGJsX3N0b3JlX2ZwcmVnCgpzdG9yZV9mcHJlZ18wOgoJZm1vdm0ueAkJJjB4ODAsIEVYQ19GUDAoJWE2KQoJcnRzCnN0b3JlX2ZwcmVnXzE6CglmbW92bS54CQkmMHg4MCwgRVhDX0ZQMSglYTYpCglydHMKc3RvcmVfZnByZWdfMjoKCWZtb3ZtLngJCSYweDAxLCAtKCVzcCkKCWZtb3ZtLngJCSglc3ApKywgJjB4MjAKCXJ0cwpzdG9yZV9mcHJlZ18zOgoJZm1vdm0ueAkJJjB4MDEsIC0oJXNwKQoJZm1vdm0ueAkJKCVzcCkrLCAmMHgxMAoJcnRzCnN0b3JlX2ZwcmVnXzQ6CglmbW92bS54CQkmMHgwMSwgLSglc3ApCglmbW92bS54CQkoJXNwKSssICYweDA4CglydHMKc3RvcmVfZnByZWdfNToKCWZtb3ZtLngJCSYweDAxLCAtKCVzcCkKCWZtb3ZtLngJCSglc3ApKywgJjB4MDQKCXJ0cwpzdG9yZV9mcHJlZ182OgoJZm1vdm0ueAkJJjB4MDEsIC0oJXNwKQoJZm1vdm0ueAkJKCVzcCkrLCAmMHgwMgoJcnRzCnN0b3JlX2ZwcmVnXzc6CglmbW92bS54CQkmMHgwMSwgLSglc3ApCglmbW92bS54CQkoJXNwKSssICYweDAxCglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCV9kZW5vcm0oKTogZGVub3JtYWxpemUgYW4gaW50ZXJtZWRpYXRlIHJlc3VsdAkJCSMKIwkJCQkJCQkJCSMKIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCU5vbmUJCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIwojCWEwID0gcG9pbnRzIHRvIHRoZSBvcGVyYW5kIHRvIGJlIGRlbm9ybWFsaXplZAkJCSMKIwkJKGluIHRoZSBpbnRlcm5hbCBleHRlbmRlZCBmb3JtYXQpCQkJIwojCQkJCQkJCQkJIwojCWQwID0gcm91bmRpbmcgcHJlY2lzaW9uCQkJCQkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJYTAgPSBwb2ludGVyIHRvIHRoZSBkZW5vcm1hbGl6ZWQgcmVzdWx0CQkJCSMKIwkJKGluIHRoZSBpbnRlcm5hbCBleHRlbmRlZCBmb3JtYXQpCQkJIwojCQkJCQkJCQkJIwojCWQwID0gZ3VhcmQscm91bmQsc3RpY2t5CQkJCQkJIwojCQkJCQkJCQkJIwojIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJQWNjb3JkaW5nIHRvIHRoZSBleHBvbmVudCB1bmRlcmZsb3cgdGhyZXNob2xkIGZvciB0aGUgZ2l2ZW4JIwojIHByZWNpc2lvbiwgc2hpZnQgdGhlIG1hbnRpc3NhIGJpdHMgdG8gdGhlIHJpZ2h0IGluIG9yZGVyIHJhaXNlIHRoZQkjCiMgZXhwb25lbnQgb2YgdGhlIG9wZXJhbmQgdG8gdGhlIHRocmVzaG9sZCB2YWx1ZS4gV2hpbGUgc2hpZnRpbmcgdGhlCSMKIyBtYW50aXNzYSBiaXRzIHJpZ2h0LCBtYWludGFpbiB0aGUgdmFsdWUgb2YgdGhlIGd1YXJkLCByb3VuZCwgYW5kCSMKIyBzdGlja3kgYml0cy4JCQkJCQkJCSMKIyBvdGhlciBub3RlczoJCQkJCQkJCSMKIwkoMSkgX2Rlbm9ybSgpIGlzIGNhbGxlZCBieSB0aGUgdW5kZXJmbG93IHJvdXRpbmVzCQkjCiMJKDIpIF9kZW5vcm0oKSBkb2VzIE5PVCBhZmZlY3QgdGhlIHN0YXR1cyByZWdpc3RlcgkJIwojCQkJCQkJCQkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgojCiMgdGFibGUgb2YgZXhwb25lbnQgdGhyZXNob2xkIHZhbHVlcyBmb3IgZWFjaCBwcmVjaXNpb24KIwp0YmxfdGhyZXNoOgoJc2hvcnQJCTB4MAoJc2hvcnQJCXNnbF90aHJlc2gKCXNob3J0CQlkYmxfdGhyZXNoCgoJZ2xvYmFsCQlfZGVub3JtCl9kZW5vcm06CiMKIyBMb2FkIHRoZSBleHBvbmVudCB0aHJlc2hvbGQgZm9yIHRoZSBwcmVjaXNpb24gc2VsZWN0ZWQgYW5kIGNoZWNrCiMgdG8gc2VlIGlmICh0aHJlc2hvbGQgLSBleHBvbmVudCkgaXMgPiA2NSBpbiB3aGljaCBjYXNlIHdlIGNhbgojIHNpbXBseSBjYWxjdWxhdGUgdGhlIHN0aWNreSBiaXQgYW5kIHplcm8gdGhlIG1hbnRpc3NhLiBvdGhlcndpc2UKIyB3ZSBoYXZlIHRvIGNhbGwgdGhlIGRlbm9ybWFsaXphdGlvbiByb3V0aW5lLgojCglsc3IuYgkJJjB4MiwgJWQwCQkjIHNoaWZ0IHByZWMgdG8gbG8gYml0cwoJbW92LncJCSh0YmxfdGhyZXNoLmIsJXBjLCVkMC53KjIpLCAlZDEgIyBsb2FkIHByZWMgdGhyZXNob2xkCgltb3YudwkJJWQxLCAlZDAJCSMgY29weSBkMSBpbnRvIGQwCglzdWIudwkJRlRFTVBfRVgoJWEwKSwgJWQwCSMgZGlmZiA9IHRocmVzaG9sZCAtIGV4cAoJY21waS53CQklZDAsICY2NgkJIyBpcyBkaWZmID4gNjU/IChtYW50ICsgZyxyIGJpdHMpCglicGwuYgkJZGVub3JtX3NldF9zdGt5CQkjIHllczsganVzdCBjYWxjIHN0aWNreQoKCWNsci5sCQklZDAJCQkjIGNsZWFyIGcscixzCglidHN0CQkmaW5leDJfYml0LCBGUFNSX0VYQ0VQVCglYTYpICMgeWVzOyB3YXMgSU5FWDIgc2V0PwoJYmVxLmIJCWRlbm9ybV9jYWxsCQkjIG5vOyBkb24ndCBjaGFuZ2UgYW55dGhpbmcKCWJzZXQJCSYyOSwgJWQwCQkjIHllczsgc2V0IHN0aWNreSBiaXQKCmRlbm9ybV9jYWxsOgoJYnNyLmwJCWRucm1fbHAJCQkjIGRlbm9ybWFsaXplIHRoZSBudW1iZXIKCXJ0cwoKIwojIGFsbCBiaXQgd291bGQgaGF2ZSBiZWVuIHNoaWZ0ZWQgb2ZmIGR1cmluZyB0aGUgZGVub3JtIHNvIHNpbXBseQojIGNhbGN1bGF0ZSBpZiB0aGUgc3RpY2t5IHNob3VsZCBiZSBzZXQgYW5kIGNsZWFyIHRoZSBlbnRpcmUgbWFudGlzc2EuCiMKZGVub3JtX3NldF9zdGt5OgoJbW92LmwJCSYweDIwMDAwMDAwLCAlZDAJIyBzZXQgc3RpY2t5IGJpdCBpbiByZXR1cm4gdmFsdWUKCW1vdi53CQklZDEsIEZURU1QX0VYKCVhMCkJIyBsb2FkIGV4cCB3aXRoIHRocmVzaG9sZAoJY2xyLmwJCUZURU1QX0hJKCVhMCkJCSMgc2V0IGQxID0gMCAobXMgbWFudGlzc2EpCgljbHIubAkJRlRFTVBfTE8oJWEwKQkJIyBzZXQgZDIgPSAwIChtcyBtYW50aXNzYSkKCXJ0cwoKIwkJCQkJCQkJCSMKIyBkbnJtX2xwKCk6IG5vcm1hbGl6ZSBleHBvbmVudC9tYW50aXNzYSB0byBzcGVjaWZpZWQgdGhyZXNoaG9sZAkjCiMJCQkJCQkJCQkjCiMgSU5QVVQ6CQkJCQkJCQkjCiMJJWEwCSAgIDogcG9pbnRzIHRvIHRoZSBvcGVyYW5kIHRvIGJlIGRlbm9ybWFsaXplZAkJIwojCSVkMHszMToyOX0gOiBpbml0aWFsIGd1YXJkLHJvdW5kLHN0aWNreQkJCQkjCiMJJWQxezE1OjB9ICA6IGRlbm9ybWFsaXphdGlvbiB0aHJlc2hvbGQJCQkJIwojIE9VVFBVVDoJCQkJCQkJCSMKIwklYTAJICAgOiBwb2ludHMgdG8gdGhlIGRlbm9ybWFsaXplZCBvcGVyYW5kCQkJIwojCSVkMHszMToyOX0gOiBmaW5hbCBndWFyZCxyb3VuZCxzdGlja3kJCQkJIwojCQkJCQkJCQkJIwoKIyAqKiogTG9jYWwgRXF1YXRlcyAqKiogIwpzZXQJR1JTLAkJTF9TQ1IyCQkJIyBnLHIscyB0ZW1wIHN0b3JhZ2UKc2V0CUZURU1QX0xPMiwJTF9TQ1IxCQkJIyBGVEVNUF9MTyBjb3B5CgoJZ2xvYmFsCQlkbnJtX2xwCmRucm1fbHA6CgojCiMgbWFrZSBhIGNvcHkgb2YgRlRFTVBfTE8gYW5kIHBsYWNlIHRoZSBnLHIscyBiaXRzIGRpcmVjdGx5IGFmdGVyIGl0CiMgaW4gbWVtb3J5IHNvIGFzIHRvIG1ha2UgdGhlIGJpdGZpZWxkIGV4dHJhY3Rpb24gZm9yIGRlbm9ybWFsaXphdGlvbiBlYXNpZXIuCiMKCW1vdi5sCQlGVEVNUF9MTyglYTApLCBGVEVNUF9MTzIoJWE2KSAjIG1ha2UgRlRFTVBfTE8gY29weQoJbW92LmwJCSVkMCwgR1JTKCVhNikJCSMgcGxhY2UgZyxyLHMgYWZ0ZXIgaXQKCiMKIyBjaGVjayB0byBzZWUgaG93IG11Y2ggbGVzcyB0aGFuIHRoZSB1bmRlcmZsb3cgdGhyZXNob2xkIHRoZSBvcGVyYW5kCiMgZXhwb25lbnQgaXMuCiMKCW1vdi5sCQklZDEsICVkMAkJIyBjb3B5IHRoZSBkZW5vcm0gdGhyZXNob2xkCglzdWIudwkJRlRFTVBfRVgoJWEwKSwgJWQxCSMgZDEgPSB0aHJlc2hvbGQgLSB1bnMgZXhwb25lbnQKCWJsZS5iCQlkbnJtX25vX2xwCQkjIGQxIDw9IDAKCWNtcGkudwkJJWQxLCAmMHgyMAkJIyBpcyAoIDAgPD0gZDEgPCAzMikgPwoJYmx0LmIJCWNhc2VfMQkJCSMgeWVzCgljbXBpLncJCSVkMSwgJjB4NDAJCSMgaXMgKDMyIDw9IGQxIDwgNjQpID8KCWJsdC5iCQljYXNlXzIJCQkjIHllcwoJYnJhLncJCWNhc2VfMwkJCSMgKGQxID49IDY0KQoKIwojIE5vIG5vcm1hbGl6YXRpb24gbmVjZXNzYXJ5CiMKZG5ybV9ub19scDoKCW1vdi5sCQlHUlMoJWE2KSwgJWQwCQkjIHJlc3RvcmUgb3JpZ2luYWwgZyxyLHMKCXJ0cwoKIwojIGNhc2UgKDA8ZDE8MzIpCiMKIyAlZDAgPSBkZW5vcm0gdGhyZXNob2xkCiMgJWQxID0gIm4iID0gYW10IHRvIHNoaWZ0CiMKIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwl8ICAgICBGVEVNUF9ISQkgIHwJRlRFTVBfTE8gICAgIHxncnMwMDAuLi4uLi4uLi4wMDB8CiMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMJPC0oMzIgLSBuKS0+PC0obiktPjwtKDMyIC0gbiktPjwtKG4pLT48LSgzMiAtIG4pLT48LShuKS0+CiMJXAkgICBcCQkgICAgICBcCQkJIFwKIwkgXAkgICAgXAkJICAgICAgIFwJCSAgXAojCSAgXAkgICAgIFwJCQlcCQkgICBcCiMJICAgXAkgICAgICBcCQkJIFwJCSAgICBcCiMJICAgIFwJICAgICAgIFwJCSAgXAkJICAgICBcCiMJICAgICBcCQlcCQkgICBcCQkgICAgICBcCiMJICAgICAgXAkJIFwJCSAgICBcCQkgICAgICAgXAojCSAgICAgICBcCSAgXAkJICAgICBcCQkJXAojCTwtKG4pLT48LSgzMiAtIG4pLT48LS0tLS0tKDMyKS0tLS0tLS0+PC0tLS0tLSgzMiktLS0tLS0tPgojCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCXwwLi4uLi4wfCBORVdfSEkgIHwgIE5FV19GVEVNUF9MTyAgICAgfGdycwkJfAojCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCmNhc2VfMToKCW1vdi5sCQklZDIsIC0oJXNwKQkJIyBjcmVhdGUgdGVtcCBzdG9yYWdlCgoJbW92LncJCSVkMCwgRlRFTVBfRVgoJWEwKQkjIGV4cG9uZW50ID0gZGVub3JtIHRocmVzaG9sZAoJbW92LmwJCSYzMiwgJWQwCglzdWIudwkJJWQxLCAlZDAJCSMgJWQwID0gMzIgLSAlZDEKCgljbXBpLncJCSVkMSwgJjI5CQkjIGlzIHNoZnQgYW10ID49IDI5CglibHQuYgkJY2FzZTFfZXh0cmFjdAkJIyBubzsgbm8gZml4IG5lZWRlZAoJbW92LmIJCUdSUyglYTYpLCAlZDIKCW9yLmIJCSVkMiwgMytGVEVNUF9MTzIoJWE2KQoKY2FzZTFfZXh0cmFjdDoKCWJmZXh0dQkJRlRFTVBfSEkoJWEwKXsmMDolZDB9LCAlZDIgIyAlZDIgPSBuZXcgRlRFTVBfSEkKCWJmZXh0dQkJRlRFTVBfSEkoJWEwKXslZDA6JjMyfSwgJWQxICMgJWQxID0gbmV3IEZURU1QX0xPCgliZmV4dHUJCUZURU1QX0xPMiglYTYpeyVkMDomMzJ9LCAlZDAgIyAlZDAgPSBuZXcgRyxSLFMKCgltb3YubAkJJWQyLCBGVEVNUF9ISSglYTApCSMgc3RvcmUgbmV3IEZURU1QX0hJCgltb3YubAkJJWQxLCBGVEVNUF9MTyglYTApCSMgc3RvcmUgbmV3IEZURU1QX0xPCgoJYmZ0c3QJCSVkMHsmMjomMzB9CQkjIHdlcmUgYml0cyBzaGlmdGVkIG9mZj8KCWJlcS5iCQljYXNlMV9zdGlja3lfY2xlYXIJIyBubzsgZ28gZmluaXNoCglic2V0CQkmcm5kX3N0a3lfYml0LCAlZDAJIyB5ZXM7IHNldCBzdGlja3kgYml0CgpjYXNlMV9zdGlja3lfY2xlYXI6CglhbmQubAkJJjB4ZTAwMDAwMDAsICVkMAkjIGNsZWFyIGFsbCBidXQgRyxSLFMKCW1vdi5sCQkoJXNwKSssICVkMgkJIyByZXN0b3JlIHRlbXAgcmVnaXN0ZXIKCXJ0cwoKIwojIGNhc2UgKDMyPD1kMTw2NCkKIwojICVkMCA9IGRlbm9ybSB0aHJlc2hvbGQKIyAlZDEgPSAibiIgPSBhbXQgdG8gc2hpZnQKIwojCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCXwgICAgIEZURU1QX0hJCSAgfAlGVEVNUF9MTyAgICAgfGdyczAwMC4uLi4uLi4uLjAwMHwKIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwk8LSgzMiAtIG4pLT48LShuKS0+PC0oMzIgLSBuKS0+PC0obiktPjwtKDMyIC0gbiktPjwtKG4pLT4KIwlcCSAgIFwJCSAgICAgIFwKIwkgXAkgICAgXAkJICAgICAgIFwKIwkgIFwJICAgICBcCQkJLS0tLS0tLS0tLS0tLS0tLS0tLQojCSAgIFwJICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0JCSAgIFwKIwkgICAgLS0tLS0tLS0tLS0tLS0tLS0tLQkJICBcCQkgICAgXAojCQkJICAgICAgIFwJICAgXAkJICAgICBcCiMJCQkJXAkgICAgXAkJICAgICAgXAojCQkJCSBcCSAgICAgXAkJICAgICAgIFwKIwk8LS0tLS0tLSgzMiktLS0tLS0+PC0obiktPjwtKDMyIC0gbiktPjwtLS0tLS0oMzIpLS0tLS0tLT4KIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwl8MC4uLi4uLi4uLi4uLi4uLjB8MC4uLi4wfCBORVdfTE8gICAgIHxncnMJCXwKIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwpjYXNlXzI6Cgltb3YubAkJJWQyLCAtKCVzcCkJCSMgY3JlYXRlIHRlbXAgc3RvcmFnZQoKCW1vdi53CQklZDAsIEZURU1QX0VYKCVhMCkJIyBleHBvbmVudCA9IGRlbm9ybSB0aHJlc2hvbGQKCXN1YmkudwkJJjB4MjAsICVkMQkJIyAlZDEgbm93IGJldHdlZW4gMCBhbmQgMzIKCW1vdi5sCQkmMHgyMCwgJWQwCglzdWIudwkJJWQxLCAlZDAJCSMgJWQwID0gMzIgLSAlZDEKCiMgc3VidGxlIHN0ZXAgaGVyZTsgb3IgaW4gdGhlIGcscixzIGF0IHRoZSBib3R0b20gb2YgRlRFTVBfTE8gdG8gbWluaW1pemUKIyB0aGUgbnVtYmVyIG9mIGJpdHMgdG8gY2hlY2sgZm9yIHRoZSBzdGlja3kgZGV0ZWN0LgojIGl0IG9ubHkgcGxheXMgYSByb2xlIGluIHNoaWZ0IGFtb3VudHMgb2YgNjEtNjMuCgltb3YuYgkJR1JTKCVhNiksICVkMgoJb3IuYgkJJWQyLCAzK0ZURU1QX0xPMiglYTYpCgoJYmZleHR1CQlGVEVNUF9ISSglYTApeyYwOiVkMH0sICVkMiAjICVkMiA9IG5ldyBGVEVNUF9MTwoJYmZleHR1CQlGVEVNUF9ISSglYTApeyVkMDomMzJ9LCAlZDEgIyAlZDEgPSBuZXcgRyxSLFMKCgliZnRzdAkJJWQxeyYyOiYzMH0JCSMgd2VyZSBhbnkgYml0cyBzaGlmdGVkIG9mZj8KCWJuZS5iCQljYXNlMl9zZXRfc3RpY2t5CSMgeWVzOyBzZXQgc3RpY2t5IGJpdAoJYmZ0c3QJCUZURU1QX0xPMiglYTYpeyVkMDomMzF9CSMgd2VyZSBhbnkgYml0cyBzaGlmdGVkIG9mZj8KCWJuZS5iCQljYXNlMl9zZXRfc3RpY2t5CSMgeWVzOyBzZXQgc3RpY2t5IGJpdAoKCW1vdi5sCQklZDEsICVkMAkJIyBtb3ZlIG5ldyBHLFIsUyB0byAlZDAKCWJyYS5iCQljYXNlMl9lbmQKCmNhc2UyX3NldF9zdGlja3k6Cgltb3YubAkJJWQxLCAlZDAJCSMgbW92ZSBuZXcgRyxSLFMgdG8gJWQwCglic2V0CQkmcm5kX3N0a3lfYml0LCAlZDAJIyBzZXQgc3RpY2t5IGJpdAoKY2FzZTJfZW5kOgoJY2xyLmwJCUZURU1QX0hJKCVhMCkJCSMgc3RvcmUgRlRFTVBfSEkgPSAwCgltb3YubAkJJWQyLCBGVEVNUF9MTyglYTApCSMgc3RvcmUgRlRFTVBfTE8KCWFuZC5sCQkmMHhlMDAwMDAwMCwgJWQwCSMgY2xlYXIgYWxsIGJ1dCBHLFIsUwoKCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgdGVtcCByZWdpc3RlcgoJcnRzCgojCiMgY2FzZSAoZDE+PTY0KQojCiMgJWQwID0gZGVub3JtIHRocmVzaG9sZAojICVkMSA9IGFtdCB0byBzaGlmdAojCmNhc2VfMzoKCW1vdi53CQklZDAsIEZURU1QX0VYKCVhMCkJIyBpbnNlcnQgZGVub3JtIHRocmVzaG9sZAoKCWNtcGkudwkJJWQxLCAmNjUJCSMgaXMgc2hpZnQgYW10ID4gNjU/CglibHQuYgkJY2FzZTNfNjQJCSMgbm87IGl0J3MgPT0gNjQKCWJlcS5iCQljYXNlM182NQkJIyBubzsgaXQncyA9PSA2NQoKIwojIGNhc2UgKGQxPjY1KQojCiMgU2hpZnQgdmFsdWUgaXMgPiA2NSBhbmQgb3V0IG9mIHJhbmdlLiBBbGwgYml0cyBhcmUgc2hpZnRlZCBvZmYuCiMgUmV0dXJuIGEgemVybyBtYW50aXNzYSB3aXRoIHRoZSBzdGlja3kgYml0IHNldAojCgljbHIubAkJRlRFTVBfSEkoJWEwKQkJIyBjbGVhciBoaShtYW50aXNzYSkKCWNsci5sCQlGVEVNUF9MTyglYTApCQkjIGNsZWFyIGxvKG1hbnRpc3NhKQoJbW92LmwJCSYweDIwMDAwMDAwLCAlZDAJIyBzZXQgc3RpY2t5IGJpdAoJcnRzCgojCiMgY2FzZSAoZDEgPT0gNjQpCiMKIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwl8ICAgICBGVEVNUF9ISQkgIHwJRlRFTVBfTE8gICAgIHxncnMwMDAuLi4uLi4uLi4wMDB8CiMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMJPC0tLS0tLS0oMzIpLS0tLS0tPgojCVwJCSAgIFwKIwkgXAkJICAgIFwKIwkgIFwJCSAgICAgXAojCSAgIFwJCSAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCQkgICAgXAojCQkJCQkgICBcCQkgICAgIFwKIwkJCQkJICAgIFwJCSAgICAgIFwKIwkJCQkJICAgICBcCQkgICAgICAgXAojCQkJCQkgICAgICA8LS0tLS0tLSgzMiktLS0tLS0+CiMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMJfDAuLi4uLi4uLi4uLi4uLi4wfDAuLi4uLi4uLi4uLi4uLi4uMHxncnMJCXwKIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwpjYXNlM182NDoKCW1vdi5sCQlGVEVNUF9ISSglYTApLCAlZDAJIyBmZXRjaCBoaShtYW50aXNzYSkKCW1vdi5sCQklZDAsICVkMQkJIyBtYWtlIGEgY29weQoJYW5kLmwJCSYweGMwMDAwMDAwLCAlZDAJIyBleHRyYWN0IEcsUgoJYW5kLmwJCSYweDNmZmZmZmZmLCAlZDEJIyBleHRyYWN0IG90aGVyIGJpdHMKCglicmEuYgkJY2FzZTNfY29tcGxldGUKCiMKIyBjYXNlIChkMSA9PSA2NSkKIwojCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCXwgICAgIEZURU1QX0hJCSAgfAlGVEVNUF9MTyAgICAgfGdyczAwMC4uLi4uLi4uLjAwMHwKIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwk8LS0tLS0tLSgzMiktLS0tLS0+CiMJXAkJICAgXAojCSBcCQkgICAgXAojCSAgXAkJICAgICBcCiMJICAgXAkJICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMJICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCQkgICAgXAojCQkJCQkgICAgXAkJICAgICBcCiMJCQkJCSAgICAgXAkJICAgICAgXAojCQkJCQkgICAgICBcCQkgICAgICAgXAojCQkJCQkgICAgICAgPC0tLS0tLS0oMzEpLS0tLS0+CiMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMJfDAuLi4uLi4uLi4uLi4uLi4wfDAuLi4uLi4uLi4uLi4uLi4uMHwwcnMJCXwKIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwpjYXNlM182NToKCW1vdi5sCQlGVEVNUF9ISSglYTApLCAlZDAJIyBmZXRjaCBoaShtYW50aXNzYSkKCWFuZC5sCQkmMHg4MDAwMDAwMCwgJWQwCSMgZXh0cmFjdCBSIGJpdAoJbHNyLmwJCSYweDEsICVkMAkJIyBzaGlmdCBoaWdoIGJpdCBpbnRvIFIgYml0CglhbmQubAkJJjB4N2ZmZmZmZmYsICVkMQkjIGV4dHJhY3Qgb3RoZXIgYml0cwoKY2FzZTNfY29tcGxldGU6CiMgbGFzdCBvcGVyYXRpb24gZG9uZSB3YXMgYW4gImFuZCIgb2YgdGhlIGJpdHMgc2hpZnRlZCBvZmYgc28gdGhlIGNvbmRpdGlvbgojIGNvZGVzIGFyZSBhbHJlYWR5IHNldCBzbyBicmFuY2ggYWNjb3JkaW5nbHkuCglibmUuYgkJY2FzZTNfc2V0X3N0aWNreQkjIHllczsgZ28gc2V0IG5ldyBzdGlja3kKCXRzdC5sCQlGVEVNUF9MTyglYTApCQkjIHdlcmUgYW55IGJpdHMgc2hpZnRlZCBvZmY/CglibmUuYgkJY2FzZTNfc2V0X3N0aWNreQkjIHllczsgZ28gc2V0IG5ldyBzdGlja3kKCXRzdC5iCQlHUlMoJWE2KQkJIyB3ZXJlIGFueSBiaXRzIHNoaWZ0ZWQgb2ZmPwoJYm5lLmIJCWNhc2UzX3NldF9zdGlja3kJIyB5ZXM7IGdvIHNldCBuZXcgc3RpY2t5CgojCiMgbm8gYml0cyB3ZXJlIHNoaWZ0ZWQgb2ZmIHNvIGRvbid0IHNldCB0aGUgc3RpY2t5IGJpdC4KIyB0aGUgZ3VhcmQgYW5kCiMgdGhlIGVudGlyZSBtYW50aXNzYSBpcyB6ZXJvLgojCgljbHIubAkJRlRFTVBfSEkoJWEwKQkJIyBjbGVhciBoaShtYW50aXNzYSkKCWNsci5sCQlGVEVNUF9MTyglYTApCQkjIGNsZWFyIGxvKG1hbnRpc3NhKQoJcnRzCgojCiMgc29tZSBiaXRzIHdlcmUgc2hpZnRlZCBvZmYgc28gc2V0IHRoZSBzdGlja3kgYml0LgojIHRoZSBlbnRpcmUgbWFudGlzc2EgaXMgemVyby4KIwpjYXNlM19zZXRfc3RpY2t5OgoJYnNldAkJJnJuZF9zdGt5X2JpdCwlZDAJIyBzZXQgbmV3IHN0aWNreSBiaXQKCWNsci5sCQlGVEVNUF9ISSglYTApCQkjIGNsZWFyIGhpKG1hbnRpc3NhKQoJY2xyLmwJCUZURU1QX0xPKCVhMCkJCSMgY2xlYXIgbG8obWFudGlzc2EpCglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCV9yb3VuZCgpOiByb3VuZCByZXN1bHQgYWNjb3JkaW5nIHRvIHByZWNpc2lvbi9tb2RlCQkjCiMJCQkJCQkJCQkjCiMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlOb25lCQkJCQkJCQkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlhMAkgID0gcHRyIHRvIGlucHV0IG9wZXJhbmQgaW4gaW50ZXJuYWwgZXh0ZW5kZWQgZm9ybWF0CSMKIwlkMShoaSkgICAgPSBjb250YWlucyByb3VuZGluZyBwcmVjaXNpb246CQkJIwojCQkJZXh0ID0gJDAwMDB4eHh4CQkJCQkjCiMJCQlzZ2wgPSAkMDAwNHh4eHgJCQkJCSMKIwkJCWRibCA9ICQwMDA4eHh4eAkJCQkJIwojCWQxKGxvKQkgID0gY29udGFpbnMgcm91bmRpbmcgbW9kZToJCQkJIwojCQkJUk4gID0gJHh4eHgwMDAwCQkJCQkjCiMJCQlSWiAgPSAkeHh4eDAwMDEJCQkJCSMKIwkJCVJNICA9ICR4eHh4MDAwMgkJCQkJIwojCQkJUlAgID0gJHh4eHgwMDAzCQkJCQkjCiMJZDB7MzE6Mjl9ID0gY29udGFpbnMgdGhlIGcscixzIGJpdHMgKGV4dGVuZGVkKQkJCSMKIwkJCQkJCQkJCSMKIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWEwID0gcG9pbnRlciB0byByb3VuZGVkIHJlc3VsdAkJCQkJIwojCQkJCQkJCQkJIwojIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJT24gcmV0dXJuIHRoZSB2YWx1ZSBwb2ludGVkIHRvIGJ5IGEwIGlzIGNvcnJlY3RseSByb3VuZGVkLAkjCiMJYTAgaXMgcHJlc2VydmVkIGFuZCB0aGUgZy1yLXMgYml0cyBpbiBkMCBhcmUgY2xlYXJlZC4JCSMKIwlUaGUgcmVzdWx0IGlzIG5vdCB0eXBlZCAtIHRoZSB0YWcgZmllbGQgaXMgaW52YWxpZC4gIFRoZQkjCiMJcmVzdWx0IGlzIHN0aWxsIGluIHRoZSBpbnRlcm5hbCBleHRlbmRlZCBmb3JtYXQuCQkjCiMJCQkJCQkJCQkjCiMJVGhlIElORVggYml0IG9mIFVTRVJfRlBTUiB3aWxsIGJlIHNldCBpZiB0aGUgcm91bmRlZCByZXN1bHQgd2FzCSMKIwlpbmV4YWN0IChpLmUuIGlmIGFueSBvZiB0aGUgZy1yLXMgYml0cyB3ZXJlIHNldCkuCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCglnbG9iYWwJCV9yb3VuZApfcm91bmQ6CiMKIyBleHRfZ3JzKCkgbG9va3MgYXQgdGhlIHJvdW5kaW5nIHByZWNpc2lvbiBhbmQgc2V0cyB0aGUgYXBwcm9wcmlhdGUKIyBHLFIsUyBiaXRzLgojIElmIChHLFIsUyA9PSAwKSB0aGVuIHJlc3VsdCBpcyBleGFjdCBhbmQgcm91bmQgaXMgZG9uZSwgZWxzZSBzZXQKIyB0aGUgaW5leCBmbGFnIGluIHN0YXR1cyByZWcgYW5kIGNvbnRpbnVlLgojCglic3IubAkJZXh0X2dycwkJCSMgZXh0cmFjdCBHLFIsUwoKCXRzdC5sCQklZDAJCQkjIGFyZSBHLFIsUyB6ZXJvPwoJYmVxLncJCXRydW5jYXRlCQkjIHllczsgcm91bmQgaXMgY29tcGxldGUKCglvci53CQkmaW54MmFfbWFzaywgMitVU0VSX0ZQU1IoJWE2KSAjIHNldCBpbmV4Mi9haW5leAoKIwojIFVzZSByb3VuZGluZyBtb2RlIGFzIGFuIGluZGV4IGludG8gYSBqdW1wIHRhYmxlIGZvciB0aGVzZSBtb2Rlcy4KIyBBbGwgb2YgdGhlIGZvbGxvd2luZyBhc3N1bWVzIGdycyAhPSAwLgojCgltb3YudwkJKHRibF9tb2RlLmIsJXBjLCVkMS53KjIpLCAlYTEgIyBsb2FkIGp1bXAgb2Zmc2V0CglqbXAJCSh0YmxfbW9kZS5iLCVwYywlYTEpCSMgam1wIHRvIHJuZCBtb2RlIGhhbmRsZXIKCnRibF9tb2RlOgoJc2hvcnQJCXJuZF9uZWFyIC0gdGJsX21vZGUKCXNob3J0CQl0cnVuY2F0ZSAtIHRibF9tb2RlCSMgUlogYWx3YXlzIHRydW5jYXRlcwoJc2hvcnQJCXJuZF9tbnVzIC0gdGJsX21vZGUKCXNob3J0CQlybmRfcGx1cyAtIHRibF9tb2RlCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojCVJPVU5EIFBMVVMgSU5GSU5JVFkJCQkJCSMKIwkJCQkJCQkJIwojCUlmIHNpZ24gb2YgZnAgbnVtYmVyID0gMCAocG9zaXRpdmUpLCB0aGVuIGFkZCAxIHRvIGwuCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKcm5kX3BsdXM6Cgl0c3QuYgkJRlRFTVBfU0dOKCVhMCkJCSMgY2hlY2sgZm9yIHNpZ24KCWJtaS53CQl0cnVuY2F0ZQkJIyBpZiBwb3NpdGl2ZSB0aGVuIHRydW5jYXRlCgoJbW92LmwJCSYweGZmZmZmZmZmLCAlZDAJIyBmb3JjZSBnLHIscyB0byBiZSBhbGwgZidzCglzd2FwCQklZDEJCQkjIHNldCB1cCBkMSBmb3Igcm91bmQgcHJlYy4KCgljbXBpLmIJCSVkMSwgJnNfbW9kZQkJIyBpcyBwcmVjID0gc2dsPwoJYmVxLncJCWFkZF9zZ2wJCQkjIHllcwoJYmd0LncJCWFkZF9kYmwJCQkjIG5vOyBpdCdzIGRibAoJYnJhLncJCWFkZF9leHQJCQkjIG5vOyBpdCdzIGV4dAoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIwlST1VORCBNSU5VUyBJTkZJTklUWQkJCQkJIwojCQkJCQkJCQkjCiMJSWYgc2lnbiBvZiBmcCBudW1iZXIgPSAxIChuZWdhdGl2ZSksIHRoZW4gYWRkIDEgdG8gbC4JIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpybmRfbW51czoKCXRzdC5iCQlGVEVNUF9TR04oJWEwKQkJIyBjaGVjayBmb3Igc2lnbgoJYnBsLncJCXRydW5jYXRlCQkjIGlmIG5lZ2F0aXZlIHRoZW4gdHJ1bmNhdGUKCgltb3YubAkJJjB4ZmZmZmZmZmYsICVkMAkjIGZvcmNlIGcscixzIHRvIGJlIGFsbCBmJ3MKCXN3YXAJCSVkMQkJCSMgc2V0IHVwIGQxIGZvciByb3VuZCBwcmVjLgoKCWNtcGkuYgkJJWQxLCAmc19tb2RlCQkjIGlzIHByZWMgPSBzZ2w/CgliZXEudwkJYWRkX3NnbAkJCSMgeWVzCgliZ3QudwkJYWRkX2RibAkJCSMgbm87IGl0J3MgZGJsCglicmEudwkJYWRkX2V4dAkJCSMgbm87IGl0J3MgZXh0CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojCVJPVU5EIE5FQVJFU1QJCQkJCQkjCiMJCQkJCQkJCSMKIwlJZiAoZz0xKSwgdGhlbiBhZGQgMSB0byBsIGFuZCBpZiAocj1zPTApLCB0aGVuIGNsZWFyIGwJIwojCU5vdGUgdGhhdCB0aGlzIHdpbGwgcm91bmQgdG8gZXZlbiBpbiBjYXNlIG9mIGEgdGllLgkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCnJuZF9uZWFyOgoJYXNsLmwJCSYweDEsICVkMAkJIyBzaGlmdCBnLWJpdCB0byBjLWJpdAoJYmNjLncJCXRydW5jYXRlCQkjIGlmIChnPTEpIHRoZW4KCglzd2FwCQklZDEJCQkjIHNldCB1cCBkMSBmb3Igcm91bmQgcHJlYy4KCgljbXBpLmIJCSVkMSwgJnNfbW9kZQkJIyBpcyBwcmVjID0gc2dsPwoJYmVxLncJCWFkZF9zZ2wJCQkjIHllcwoJYmd0LncJCWFkZF9kYmwJCQkjIG5vOyBpdCdzIGRibAoJYnJhLncJCWFkZF9leHQJCQkjIG5vOyBpdCdzIGV4dAoKIyAqKiogTE9DQUwgRVFVQVRFUyAqKioKc2V0CWFkXzFfc2dsLAkweDAwMDAwMTAwCSMgY29uc3RhbnQgdG8gYWRkIDEgdG8gbC1iaXQgaW4gc2dsIHByZWMKc2V0CWFkXzFfZGJsLAkweDAwMDAwODAwCSMgY29uc3RhbnQgdG8gYWRkIDEgdG8gbC1iaXQgaW4gZGJsIHByZWMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIwlBREQgU0lOR0xFCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwphZGRfc2dsOgoJYWRkLmwJCSZhZF8xX3NnbCwgRlRFTVBfSEkoJWEwKQoJYmNjLmIJCXNjY19jbHIJCQkjIG5vIG1hbnRpc3NhIG92ZXJmbG93Cglyb3hyLncJCUZURU1QX0hJKCVhMCkJCSMgc2hpZnQgdi1iaXQgYmFjayBpbgoJcm94ci53CQlGVEVNUF9ISSsyKCVhMCkJCSMgc2hpZnQgdi1iaXQgYmFjayBpbgoJYWRkLncJCSYweDEsIEZURU1QX0VYKCVhMCkJIyBhbmQgaW5jciBleHBvbmVudApzY2NfY2xyOgoJdHN0LmwJCSVkMAkJCSMgdGVzdCBmb3IgcnMgPSAwCglibmUuYgkJc2dsX2RvbmUKCWFuZC53CQkmMHhmZTAwLCBGVEVNUF9ISSsyKCVhMCkgIyBjbGVhciB0aGUgbC1iaXQKc2dsX2RvbmU6CglhbmQubAkJJjB4ZmZmZmZmMDAsIEZURU1QX0hJKCVhMCkgIyB0cnVuY2F0ZSBiaXRzIGJleW9uZCBzZ2wgbGltaXQKCWNsci5sCQlGVEVNUF9MTyglYTApCQkjIGNsZWFyIGQyCglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIwlBREQgRVhURU5ERUQJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmFkZF9leHQ6CglhZGRxLmwJCSYxLEZURU1QX0xPKCVhMCkJIyBhZGQgMSB0byBsLWJpdAoJYmNjLmIJCXhjY19jbHIJCQkjIHRlc3QgZm9yIGNhcnJ5IG91dAoJYWRkcS5sCQkmMSxGVEVNUF9ISSglYTApCSMgcHJvcGFnYXRlIGNhcnJ5CgliY2MuYgkJeGNjX2NscgoJcm94ci53CQlGVEVNUF9ISSglYTApCQkjIG1hbnQgaXMgMCBzbyByZXN0b3JlIHYtYml0Cglyb3hyLncJCUZURU1QX0hJKzIoJWEwKQkJIyBtYW50IGlzIDAgc28gcmVzdG9yZSB2LWJpdAoJcm94ci53CQlGVEVNUF9MTyglYTApCglyb3hyLncJCUZURU1QX0xPKzIoJWEwKQoJYWRkLncJCSYweDEsRlRFTVBfRVgoJWEwKQkjIGFuZCBpbmMgZXhwCnhjY19jbHI6Cgl0c3QubAkJJWQwCQkJIyB0ZXN0IHJzID0gMAoJYm5lLmIJCWFkZF9leHRfZG9uZQoJYW5kLmIJCSYweGZlLEZURU1QX0xPKzMoJWEwKQkjIGNsZWFyIHRoZSBsIGJpdAphZGRfZXh0X2RvbmU6CglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIwlBREQgRE9VQkxFCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwphZGRfZGJsOgoJYWRkLmwJCSZhZF8xX2RibCwgRlRFTVBfTE8oJWEwKSAjIGFkZCAxIHRvIGxzYgoJYmNjLmIJCWRjY19jbHIJCQkjIG5vIGNhcnJ5CglhZGRxLmwJCSYweDEsIEZURU1QX0hJKCVhMCkJIyBwcm9wYWdhdGUgY2FycnkKCWJjYy5iCQlkY2NfY2xyCQkJIyBubyBjYXJyeQoKCXJveHIudwkJRlRFTVBfSEkoJWEwKQkJIyBtYW50IGlzIDAgc28gcmVzdG9yZSB2LWJpdAoJcm94ci53CQlGVEVNUF9ISSsyKCVhMCkJCSMgbWFudCBpcyAwIHNvIHJlc3RvcmUgdi1iaXQKCXJveHIudwkJRlRFTVBfTE8oJWEwKQoJcm94ci53CQlGVEVNUF9MTysyKCVhMCkKCWFkZHEudwkJJjB4MSwgRlRFTVBfRVgoJWEwKQkjIGluY3IgZXhwb25lbnQKZGNjX2NscjoKCXRzdC5sCQklZDAJCQkjIHRlc3QgZm9yIHJzID0gMAoJYm5lLmIJCWRibF9kb25lCglhbmQudwkJJjB4ZjAwMCwgRlRFTVBfTE8rMiglYTApICMgY2xlYXIgdGhlIGwtYml0CgpkYmxfZG9uZToKCWFuZC5sCQkmMHhmZmZmZjgwMCxGVEVNUF9MTyglYTApICMgdHJ1bmNhdGUgYml0cyBiZXlvbmQgZGJsIGxpbWl0CglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFRydW5jYXRlIGFsbCBvdGhlciBiaXRzICMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCnRydW5jYXRlOgoJc3dhcAkJJWQxCQkJIyBzZWxlY3Qgcm5kIHByZWMKCgljbXBpLmIJCSVkMSwgJnNfbW9kZQkJIyBpcyBwcmVjIHNnbD8KCWJlcS53CQlzZ2xfZG9uZQkJIyB5ZXMKCWJndC5iCQlkYmxfZG9uZQkJIyBubzsgaXQncyBkYmwKCXJ0cwkJCQkJIyBubzsgaXQncyBleHQKCgojCiMgZXh0X2dycygpOiBleHRyYWN0IGd1YXJkLCByb3VuZCBhbmQgc3RpY2t5IGJpdHMgYWNjb3JkaW5nIHRvCiMJICAgICByb3VuZGluZyBwcmVjaXNpb24uCiMKIyBJTlBVVAojCWQwCSAgID0gZXh0ZW5kZWQgcHJlY2lzaW9uIGcscixzIChpbiBkMHszMToyOX0pCiMJZDEJICAgPSB7UFJFQyxST1VORH0KIyBPVVRQVVQKIwlkMHszMToyOX0gID0gZ3VhcmQsIHJvdW5kLCBzdGlja3kKIwojIFRoZSBleHRfZ3JzIGV4dHJhY3QgdGhlIGd1YXJkL3JvdW5kL3N0aWNreSBiaXRzIGFjY29yZGluZyB0byB0aGUKIyBzZWxlY3RlZCByb3VuZGluZyBwcmVjaXNpb24uIEl0IGlzIGNhbGxlZCBieSB0aGUgcm91bmQgc3Vicm91dGluZQojIG9ubHkuICBBbGwgcmVnaXN0ZXJzIGV4Y2VwdCBkMCBhcmUga2VwdCBpbnRhY3QuIGQwIGJlY29tZXMgYW4KIyB1cGRhdGVkIGd1YXJkLHJvdW5kLHN0aWNreSBpbiBkMHszMToyOX0KIwojIE5vdGVzOiB0aGUgZXh0X2dycyB1c2VzIHRoZSByb3VuZCBQUkVDLCBhbmQgdGhlcmVmb3JlIGhhcyB0byBzd2FwIGQxCiMJIHByaW9yIHRvIHVzYWdlLCBhbmQgbmVlZHMgdG8gcmVzdG9yZSBkMSB0byBvcmlnaW5hbC4gdGhpcwojCSByb3V0aW5lIGlzIHRpZ2h0bHkgdGllZCB0byB0aGUgcm91bmQgcm91dGluZSBhbmQgbm90IG1lYW50IHRvCiMJIHVwaG9sZCBzdGFuZGFyZCBzdWJyb3V0aW5lIGNhbGxpbmcgcHJhY3RpY2VzLgojCgpleHRfZ3JzOgoJc3dhcAkJJWQxCQkJIyBoYXZlIGQxLncgcG9pbnQgdG8gcm91bmQgcHJlY2lzaW9uCgl0c3QuYgkJJWQxCQkJIyBpcyBybmQgcHJlYyA9IGV4dGVuZGVkPwoJYm5lLmIJCWV4dF9ncnNfbm90X2V4dAkJIyBubzsgZ28gaGFuZGxlIHNnbCBvciBkYmwKCiMKIyAlZDAgYWN0dWFsbHkgYWxyZWFkeSBob2xkIGcscixzIHNpbmNlIF9yb3VuZCgpIGhhZCBpdCBiZWZvcmUgY2FsbGluZwojIHRoaXMgZnVuY3Rpb24uIHNvLCBhcyBsb25nIGFzIHdlIGRvbid0IGRpc3R1cmIgaXQsIHdlIGFyZSAicmV0dXJuaW5nIiBpdC4KIwpleHRfZ3JzX2V4dDoKCXN3YXAJCSVkMQkJCSMgeWVzOyByZXR1cm4gdG8gY29ycmVjdCBwb3NpdGlvbnMKCXJ0cwoKZXh0X2dyc19ub3RfZXh0OgoJbW92bS5sCQkmMHgzMDAwLCAtKCVzcCkJCSMgbWFrZSBzb21lIHRlbXAgcmVnaXN0ZXJzIHtkMi9kM30KCgljbXBpLmIJCSVkMSwgJnNfbW9kZQkJIyBpcyBybmQgcHJlYyA9IHNnbD8KCWJuZS5iCQlleHRfZ3JzX2RibAkJIyBubzsgZ28gaGFuZGxlIGRibAoKIwojIHNnbDoKIwk5NgkJNjQJICA0MAkzMgkJMAojCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMJfCBFWFAJfFhYWFhYWFh8CSAgfHh4CXwJCXxncnN8CiMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwkJCTwtLSgyNCktLS0+bm5cCQkJICAgLwojCQkJCSAgIGVlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCQkJCSAgIHd3CQl8CiMJCQkJCQl2CiMJCQkJICAgZ3IJICAgbmV3IHN0aWNreQojCmV4dF9ncnNfc2dsOgoJYmZleHR1CQlGVEVNUF9ISSglYTApeyYyNDomMn0sICVkMyAjIHNnbCBwcmVjLiBnLXIgYXJlIDIgYml0cyByaWdodAoJbW92LmwJCSYzMCwgJWQyCQkjIG9mIHRoZSBzZ2wgcHJlYy4gbGltaXRzCglsc2wubAkJJWQyLCAlZDMJCSMgc2hpZnQgZy1yIGJpdHMgdG8gTVNCIG9mIGQzCgltb3YubAkJRlRFTVBfSEkoJWEwKSwgJWQyCSMgZ2V0IHdvcmQgMiBmb3Igcy1iaXQgdGVzdAoJYW5kLmwJCSYweDAwMDAwMDNmLCAlZDIJIyBzIGJpdCBpcyB0aGUgb3Igb2YgYWxsIG90aGVyCglibmUuYgkJZXh0X2dyc19zdF9zdGt5CQkjIGJpdHMgdG8gdGhlIHJpZ2h0IG9mIGctcgoJdHN0LmwJCUZURU1QX0xPKCVhMCkJCSMgdGVzdCBsb3dlciBtYW50aXNzYQoJYm5lLmIJCWV4dF9ncnNfc3Rfc3RreQkJIyBpZiBhbnkgYXJlIHNldCwgc2V0IHN0aWNreQoJdHN0LmwJCSVkMAkJCSMgdGVzdCBvcmlnaW5hbCBnLHIscwoJYm5lLmIJCWV4dF9ncnNfc3Rfc3RreQkJIyBpZiBhbnkgYXJlIHNldCwgc2V0IHN0aWNreQoJYnJhLmIJCWV4dF9ncnNfZW5kX3NkCQkjIGlmIHdvcmRzIDMgYW5kIDQgYXJlIGNsciwgZXhpdAoKIwojIGRibDoKIwk5NgkJNjQJCTMyCSAxMQkwCiMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwl8IEVYUAl8WFhYWFhYWHwJCXwJIHx4eAl8Z3JzfAojCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMJCQkJCQkgIG5uXAkgICAgLwojCQkJCQkJICBlZSAtLS0tLS0tCiMJCQkJCQkgIHd3CXwKIwkJCQkJCQl2CiMJCQkJCQkgIGdyCW5ldyBzdGlja3kKIwpleHRfZ3JzX2RibDoKCWJmZXh0dQkJRlRFTVBfTE8oJWEwKXsmMjE6JjJ9LCAlZDMgIyBkYmwtcHJlYy4gZy1yIGFyZSAyIGJpdHMgcmlnaHQKCW1vdi5sCQkmMzAsICVkMgkJIyBvZiB0aGUgZGJsIHByZWMuIGxpbWl0cwoJbHNsLmwJCSVkMiwgJWQzCQkjIHNoaWZ0IGctciBiaXRzIHRvIHRoZSBNU0Igb2YgZDMKCW1vdi5sCQlGVEVNUF9MTyglYTApLCAlZDIJIyBnZXQgbG93ZXIgbWFudGlzc2EgIGZvciBzLWJpdCB0ZXN0CglhbmQubAkJJjB4MDAwMDAxZmYsICVkMgkjIHMgYml0IGlzIHRoZSBvci1pbmcgb2YgYWxsCglibmUuYgkJZXh0X2dyc19zdF9zdGt5CQkjIG90aGVyIGJpdHMgdG8gdGhlIHJpZ2h0IG9mIGctcgoJdHN0LmwJCSVkMAkJCSMgdGVzdCB3b3JkIG9yaWdpbmFsIGcscixzCglibmUuYgkJZXh0X2dyc19zdF9zdGt5CQkjIGlmIGFueSBhcmUgc2V0LCBzZXQgc3RpY2t5CglicmEuYgkJZXh0X2dyc19lbmRfc2QJCSMgaWYgY2xlYXIsIGV4aXQKCmV4dF9ncnNfc3Rfc3RreToKCWJzZXQJCSZybmRfc3RreV9iaXQsICVkMwkjIHNldCBzdGlja3kgYml0CmV4dF9ncnNfZW5kX3NkOgoJbW92LmwJCSVkMywgJWQwCQkjIHJldHVybiBncnMgdG8gZDAKCgltb3ZtLmwJCSglc3ApKywgJjB4YwkJIyByZXN0b3JlIHNjcmF0Y2ggcmVnaXN0ZXJzIHtkMi9kM30KCglzd2FwCQklZDEJCQkjIHJlc3RvcmUgZDEgdG8gb3JpZ2luYWwKCXJ0cwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIG5vcm0oKTogbm9ybWFsaXplIHRoZSBtYW50aXNzYSBvZiBhbiBleHRlbmRlZCBwcmVjaXNpb24gaW5wdXQuIHRoZQkjCiMJICBpbnB1dCBvcGVyYW5kIHNob3VsZCBub3QgYmUgbm9ybWFsaXplZCBhbHJlYWR5LgkJIwojCQkJCQkJCQkJIwojIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJbm9ybSgpCQkJCQkJCQkjCiMJCQkJCQkJCQkjCiMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKIwlub25lCQkJCQkJCQkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKIwlhMCA9IHBvaW50ZXIgZnAgZXh0ZW5kZWQgcHJlY2lzaW9uIG9wZXJhbmQgdG8gbm9ybWFsaXplCQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKIwlkMCA9IG51bWJlciBvZiBiaXQgcG9zaXRpb25zIHRoZSBtYW50aXNzYSB3YXMgc2hpZnRlZAkJIwojCWEwID0gdGhlIGlucHV0IG9wZXJhbmQncyBtYW50aXNzYSBpcyBub3JtYWxpemVkOyB0aGUgZXhwb25lbnQJIwojCSAgICAgaXMgdW5jaGFuZ2VkLgkJCQkJCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoJZ2xvYmFsCQlub3JtCm5vcm06Cgltb3YubAkJJWQyLCAtKCVzcCkJCSMgY3JlYXRlIHNvbWUgdGVtcCByZWdzCgltb3YubAkJJWQzLCAtKCVzcCkKCgltb3YubAkJRlRFTVBfSEkoJWEwKSwgJWQwCSMgbG9hZCBoaShtYW50aXNzYSkKCW1vdi5sCQlGVEVNUF9MTyglYTApLCAlZDEJIyBsb2FkIGxvKG1hbnRpc3NhKQoKCWJmZmZvCQklZDB7JjA6JjMyfSwgJWQyCSMgaG93IG1hbnkgcGxhY2VzIHRvIHNoaWZ0PwoJYmVxLmIJCW5vcm1fbG8JCQkjIGhpKG1hbikgaXMgYWxsIHplcm9lcyEKCm5vcm1faGk6Cglsc2wubAkJJWQyLCAlZDAJCSMgbGVmdCBzaGlmdCBoaShtYW4pCgliZmV4dHUJCSVkMXsmMDolZDJ9LCAlZDMJIyBleHRyYWN0IGxvIGJpdHMKCglvci5sCQklZDMsICVkMAkJIyBjcmVhdGUgaGkobWFuKQoJbHNsLmwJCSVkMiwgJWQxCQkjIGNyZWF0ZSBsbyhtYW4pCgoJbW92LmwJCSVkMCwgRlRFTVBfSEkoJWEwKQkjIHN0b3JlIG5ldyBoaShtYW4pCgltb3YubAkJJWQxLCBGVEVNUF9MTyglYTApCSMgc3RvcmUgbmV3IGxvKG1hbikKCgltb3YubAkJJWQyLCAlZDAJCSMgcmV0dXJuIHNoaWZ0IGFtb3VudAoKCW1vdi5sCQkoJXNwKSssICVkMwkJIyByZXN0b3JlIHRlbXAgcmVncwoJbW92LmwJCSglc3ApKywgJWQyCgoJcnRzCgpub3JtX2xvOgoJYmZmZm8JCSVkMXsmMDomMzJ9LCAlZDIJIyBob3cgbWFueSBwbGFjZXMgdG8gc2hpZnQ/Cglsc2wubAkJJWQyLCAlZDEJCSMgc2hpZnQgbG8obWFuKQoJYWRkLmwJCSYzMiwgJWQyCQkjIGFkZCAzMiB0byBzaGZ0IGFtb3VudAoKCW1vdi5sCQklZDEsIEZURU1QX0hJKCVhMCkJIyBzdG9yZSBoaShtYW4pCgljbHIubAkJRlRFTVBfTE8oJWEwKQkJIyBsbyhtYW4pIGlzIG5vdyB6ZXJvCgoJbW92LmwJCSVkMiwgJWQwCQkjIHJldHVybiBzaGlmdCBhbW91bnQKCgltb3YubAkJKCVzcCkrLCAlZDMJCSMgcmVzdG9yZSB0ZW1wIHJlZ3MKCW1vdi5sCQkoJXNwKSssICVkMgoKCXJ0cwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIHVubm9ybV9maXgoKTogLSBjaGFuZ2VzIGFuIFVOTk9STSB0byBvbmUgb2YgTk9STSwgREVOT1JNLCBvciBaRVJPCSMKIwkJLSByZXR1cm5zIGNvcnJlc3BvbmRpbmcgb3B0eXBlIHRhZwkJCSMKIwkJCQkJCQkJCSMKIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCXVubm9ybV9maXgoKQkJCQkJCQkjCiMJCQkJCQkJCQkjCiMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKIwlub3JtKCkgLSBub3JtYWxpemUgdGhlIG1hbnRpc3NhCQkJCQkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKIwlhMCA9IHBvaW50ZXIgdG8gdW5ub3JtYWxpemVkIGV4dGVuZGVkIHByZWNpc2lvbiBudW1iZXIJCSMKIwkJCQkJCQkJCSMKIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIwojCWQwID0gb3B0eXBlIHRhZyAtIGlzIGNvcnJlY3RlZCB0byBvbmUgb2YgTk9STSwgREVOT1JNLCBvciBaRVJPCSMKIwlhMCA9IGlucHV0IG9wZXJhbmQgaGFzIGJlZW4gY29udmVydGVkIHRvIGEgbm9ybSwgZGVub3JtLCBvcgkjCiMJICAgICB6ZXJvOyBib3RoIHRoZSBleHBvbmVudCBhbmQgbWFudGlzc2EgYXJlIGNoYW5nZWQuCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCglnbG9iYWwJCXVubm9ybV9maXgKdW5ub3JtX2ZpeDoKCWJmZmZvCQlGVEVNUF9ISSglYTApeyYwOiYzMn0sICVkMCAjIGhvdyBtYW55IHNoaWZ0cyBhcmUgbmVlZGVkPwoJYm5lLmIJCXVubm9ybV9zaGlmdAkJIyBoaShtYW4pIGlzIG5vdCBhbGwgemVyb2VzCgojCiMgaGkobWFuKSBpcyBhbGwgemVyb2VzIHNvIHNlZSBpZiBhbnkgYml0cyBpbiBsbyhtYW4pIGFyZSBzZXQKIwp1bm5vcm1fY2hrX2xvOgoJYmZmZm8JCUZURU1QX0xPKCVhMCl7JjA6JjMyfSwgJWQwICMgaXMgb3BlcmFuZCByZWFsbHkgYSB6ZXJvPwoJYmVxLncJCXVubm9ybV96ZXJvCQkjIHllcwoKCWFkZC53CQkmMzIsICVkMAkJIyBubzsgZml4IHNoaWZ0IGRpc3RhbmNlCgojCiMgZDAgPSAjIHNoaWZ0cyBuZWVkZWQgZm9yIGNvbXBsZXRlIG5vcm1hbGl6YXRpb24KIwp1bm5vcm1fc2hpZnQ6CgljbHIubAkJJWQxCQkJIyBjbGVhciB0b3Agd29yZAoJbW92LncJCUZURU1QX0VYKCVhMCksICVkMQkjIGV4dHJhY3QgZXhwb25lbnQKCWFuZC53CQkmMHg3ZmZmLCAlZDEJCSMgc3RyaXAgb2ZmIHNnbgoKCWNtcC53CQklZDAsICVkMQkJIyB3aWxsIGRlbm9ybSBwdXNoIGV4cCA8IDA/CgliZ3QuYgkJdW5ub3JtX25ybV96ZXJvCQkjIHllczsgZGVub3JtIG9ubHkgdW50aWwgZXhwID0gMAoKIwojIGV4cG9uZW50IHdvdWxkIG5vdCBnbyA8IDAuIHRoZXJlZm9yZSwgbnVtYmVyIHN0YXlzIG5vcm1hbGl6ZWQKIwoJc3ViLncJCSVkMCwgJWQxCQkjIHNoaWZ0IGV4cG9uZW50IHZhbHVlCgltb3YudwkJRlRFTVBfRVgoJWEwKSwgJWQwCSMgbG9hZCBvbGQgZXhwb25lbnQKCWFuZC53CQkmMHg4MDAwLCAlZDAJCSMgc2F2ZSBvbGQgc2lnbgoJb3IudwkJJWQwLCAlZDEJCSMge3NnbixuZXcgZXhwfQoJbW92LncJCSVkMSwgRlRFTVBfRVgoJWEwKQkjIGluc2VydCBuZXcgZXhwb25lbnQKCglic3IubAkJbm9ybQkJCSMgbm9ybWFsaXplIFVOTk9STQoKCW1vdi5iCQkmTk9STSwgJWQwCQkjIHJldHVybiBuZXcgb3B0eXBlIHRhZwoJcnRzCgojCiMgZXhwb25lbnQgd291bGQgZ28gPCAwLCBzbyBvbmx5IGRlbm9ybWFsaXplIHVudGlsIGV4cCA9IDAKIwp1bm5vcm1fbnJtX3plcm86CgljbXAuYgkJJWQxLCAmMzIJCSMgaXMgZXhwIDw9IDMyPwoJYmd0LmIJCXVubm9ybV9ucm1femVyb19scmcJIyBubzsgZ28gaGFuZGxlIGxhcmdlIGV4cG9uZW50CgoJYmZleHR1CQlGVEVNUF9ISSglYTApeyVkMTomMzJ9LCAlZDAgIyBleHRyYWN0IG5ldyBoaShtYW4pCgltb3YubAkJJWQwLCBGVEVNUF9ISSglYTApCSMgc2F2ZSBuZXcgaGkobWFuKQoKCW1vdi5sCQlGVEVNUF9MTyglYTApLCAlZDAJIyBmZXRjaCBvbGQgbG8obWFuKQoJbHNsLmwJCSVkMSwgJWQwCQkjIGV4dHJhY3QgbmV3IGxvKG1hbikKCW1vdi5sCQklZDAsIEZURU1QX0xPKCVhMCkJIyBzYXZlIG5ldyBsbyhtYW4pCgoJYW5kLncJCSYweDgwMDAsIEZURU1QX0VYKCVhMCkJIyBzZXQgZXhwID0gMAoKCW1vdi5iCQkmREVOT1JNLCAlZDAJCSMgcmV0dXJuIG5ldyBvcHR5cGUgdGFnCglydHMKCiMKIyBvbmx5IG1hbnRpc3NhIGJpdHMgc2V0IGFyZSBpbiBsbyhtYW4pCiMKdW5ub3JtX25ybV96ZXJvX2xyZzoKCXN1Yi53CQkmMzIsICVkMQkJIyBhZGp1c3Qgc2hmdCBhbXQgYnkgMzIKCgltb3YubAkJRlRFTVBfTE8oJWEwKSwgJWQwCSMgZmV0Y2ggb2xkIGxvKG1hbikKCWxzbC5sCQklZDEsICVkMAkJIyBsZWZ0IHNoaWZ0IGxvKG1hbikKCgltb3YubAkJJWQwLCBGVEVNUF9ISSglYTApCSMgc3RvcmUgbmV3IGhpKG1hbikKCWNsci5sCQlGVEVNUF9MTyglYTApCQkjIGxvKG1hbikgPSAwCgoJYW5kLncJCSYweDgwMDAsIEZURU1QX0VYKCVhMCkJIyBzZXQgZXhwID0gMAoKCW1vdi5iCQkmREVOT1JNLCAlZDAJCSMgcmV0dXJuIG5ldyBvcHR5cGUgdGFnCglydHMKCiMKIyB3aG9sZSBtYW50aXNzYSBpcyB6ZXJvIHNvIHRoaXMgVU5OT1JNIGlzIGFjdHVhbGx5IGEgemVybwojCnVubm9ybV96ZXJvOgoJYW5kLncJCSYweDgwMDAsIEZURU1QX0VYKCVhMCkJIyBmb3JjZSBleHBvbmVudCB0byB6ZXJvCgoJbW92LmIJCSZaRVJPLCAlZDAJCSMgZml4IG9wdHlwZSB0YWcKCXJ0cwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJc2V0X3RhZ194KCk6IHJldHVybiB0aGUgb3B0eXBlIG9mIHRoZSBpbnB1dCBleHQgZnAgbnVtYmVyCSMKIwkJCQkJCQkJCSMKIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCU5vbmUJCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gb3BlcmFuZAkJCSMKIwkJCQkJCQkJCSMKIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWQwID0gdmFsdWUgb2YgdHlwZSB0YWcJCQkJCQkjCiMJCW9uZSBvZjogTk9STSwgSU5GLCBRTkFOLCBTTkFOLCBERU5PUk0sIFVOTk9STSwgWkVSTwkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlTaW1wbHkgdGVzdCB0aGUgZXhwb25lbnQsIGotYml0LCBhbmQgbWFudGlzc2EgdmFsdWVzIHRvCQkjCiMgZGV0ZXJtaW5lIHRoZSB0eXBlIG9mIG9wZXJhbmQuCQkJCQkjCiMJSWYgaXQncyBhbiB1bm5vcm1hbGl6ZWQgemVybywgYWx0ZXIgdGhlIG9wZXJhbmQgYW5kIGZvcmNlIGl0CSMKIyB0byBiZSBhIG5vcm1hbCB6ZXJvLgkJCQkJCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCglnbG9iYWwJCXNldF90YWdfeApzZXRfdGFnX3g6Cgltb3YudwkJRlRFTVBfRVgoJWEwKSwgJWQwCSMgZXh0cmFjdCBleHBvbmVudAoJYW5kaS53CQkmMHg3ZmZmLCAlZDAJCSMgc3RyaXAgb2ZmIHNpZ24KCWNtcGkudwkJJWQwLCAmMHg3ZmZmCQkjIGlzIChFWFAgPT0gTUFYKT8KCWJlcS5iCQlpbmZfb3JfbmFuX3gKbm90X2luZl9vcl9uYW5feDoKCWJ0c3QJCSYweDcsRlRFTVBfSEkoJWEwKQoJYmVxLmIJCW5vdF9ub3JtX3gKaXNfbm9ybV94OgoJbW92LmIJCSZOT1JNLCAlZDAKCXJ0cwpub3Rfbm9ybV94OgoJdHN0LncJCSVkMAkJCSMgaXMgZXhwb25lbnQgPSAwPwoJYm5lLmIJCWlzX3Vubm9ybV94Cm5vdF91bm5vcm1feDoKCXRzdC5sCQlGVEVNUF9ISSglYTApCglibmUuYgkJaXNfZGVub3JtX3gKCXRzdC5sCQlGVEVNUF9MTyglYTApCglibmUuYgkJaXNfZGVub3JtX3gKaXNfemVyb194OgoJbW92LmIJCSZaRVJPLCAlZDAKCXJ0cwppc19kZW5vcm1feDoKCW1vdi5iCQkmREVOT1JNLCAlZDAKCXJ0cwojIG11c3QgZGlzdGluZ3Vpc2ggbm93ICJVbm5vcm1hbGl6ZWQgemVyb2VzIiB3aGljaCB3ZQojIG11c3QgY29udmVydCB0byB6ZXJvLgppc191bm5vcm1feDoKCXRzdC5sCQlGVEVNUF9ISSglYTApCglibmUuYgkJaXNfdW5ub3JtX3JlZ194Cgl0c3QubAkJRlRFTVBfTE8oJWEwKQoJYm5lLmIJCWlzX3Vubm9ybV9yZWdfeAojIGl0J3MgYW4gInVubm9ybWFsaXplZCB6ZXJvIi4gbGV0J3MgY29udmVydCBpdCB0byBhbiBhY3R1YWwgemVyby4uLgoJYW5kaS53CQkmMHg4MDAwLEZURU1QX0VYKCVhMCkJIyBjbGVhciBleHBvbmVudAoJbW92LmIJCSZaRVJPLCAlZDAKCXJ0cwppc191bm5vcm1fcmVnX3g6Cgltb3YuYgkJJlVOTk9STSwgJWQwCglydHMKaW5mX29yX25hbl94OgoJdHN0LmwJCUZURU1QX0xPKCVhMCkKCWJuZS5iCQlpc19uYW5feAoJbW92LmwJCUZURU1QX0hJKCVhMCksICVkMAoJYW5kLmwJCSYweDdmZmZmZmZmLCAlZDAJIyBtc2IgaXMgYSBkb24ndCBjYXJlIQoJYm5lLmIJCWlzX25hbl94CmlzX2luZl94OgoJbW92LmIJCSZJTkYsICVkMAoJcnRzCmlzX25hbl94OgoJYnRzdAkJJjB4NiwgRlRFTVBfSEkoJWEwKQoJYmVxLmIJCWlzX3NuYW5feAoJbW92LmIJCSZRTkFOLCAlZDAKCXJ0cwppc19zbmFuX3g6Cgltb3YuYgkJJlNOQU4sICVkMAoJcnRzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlzZXRfdGFnX2QoKTogcmV0dXJuIHRoZSBvcHR5cGUgb2YgdGhlIGlucHV0IGRibCBmcCBudW1iZXIJIwojCQkJCQkJCQkJIwojIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJTm9uZQkJCQkJCQkJIwojCQkJCQkJCQkJIwojIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJYTAgPSBwb2ludHMgdG8gZG91YmxlIHByZWNpc2lvbiBvcGVyYW5kCQkJCSMKIwkJCQkJCQkJCSMKIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWQwID0gdmFsdWUgb2YgdHlwZSB0YWcJCQkJCQkjCiMJCW9uZSBvZjogTk9STSwgSU5GLCBRTkFOLCBTTkFOLCBERU5PUk0sIFpFUk8JCSMKIwkJCQkJCQkJCSMKIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCVNpbXBseSB0ZXN0IHRoZSBleHBvbmVudCwgai1iaXQsIGFuZCBtYW50aXNzYSB2YWx1ZXMgdG8JCSMKIyBkZXRlcm1pbmUgdGhlIHR5cGUgb2Ygb3BlcmFuZC4JCQkJCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCWdsb2JhbAkJc2V0X3RhZ19kCnNldF90YWdfZDoKCW1vdi5sCQlGVEVNUCglYTApLCAlZDAKCW1vdi5sCQklZDAsICVkMQoKCWFuZGkubAkJJjB4N2ZmMDAwMDAsICVkMAoJYmVxLmIJCXplcm9fb3JfZGVub3JtX2QKCgljbXBpLmwJCSVkMCwgJjB4N2ZmMDAwMDAKCWJlcS5iCQlpbmZfb3JfbmFuX2QKCmlzX25vcm1fZDoKCW1vdi5iCQkmTk9STSwgJWQwCglydHMKemVyb19vcl9kZW5vcm1fZDoKCWFuZC5sCQkmMHgwMDBmZmZmZiwgJWQxCglibmUJCWlzX2Rlbm9ybV9kCgl0c3QubAkJNCtGVEVNUCglYTApCglibmUJCWlzX2Rlbm9ybV9kCmlzX3plcm9fZDoKCW1vdi5iCQkmWkVSTywgJWQwCglydHMKaXNfZGVub3JtX2Q6Cgltb3YuYgkJJkRFTk9STSwgJWQwCglydHMKaW5mX29yX25hbl9kOgoJYW5kLmwJCSYweDAwMGZmZmZmLCAlZDEKCWJuZQkJaXNfbmFuX2QKCXRzdC5sCQk0K0ZURU1QKCVhMCkKCWJuZQkJaXNfbmFuX2QKaXNfaW5mX2Q6Cgltb3YuYgkJJklORiwgJWQwCglydHMKaXNfbmFuX2Q6CglidHN0CQkmMTksICVkMQoJYm5lCQlpc19xbmFuX2QKaXNfc25hbl9kOgoJbW92LmIJCSZTTkFOLCAlZDAKCXJ0cwppc19xbmFuX2Q6Cgltb3YuYgkJJlFOQU4sICVkMAoJcnRzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlzZXRfdGFnX3MoKTogcmV0dXJuIHRoZSBvcHR5cGUgb2YgdGhlIGlucHV0IHNnbCBmcCBudW1iZXIJIwojCQkJCQkJCQkJIwojIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJTm9uZQkJCQkJCQkJIwojCQkJCQkJCQkJIwojIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJYTAgPSBwb2ludGVyIHRvIHNpbmdsZSBwcmVjaXNpb24gb3BlcmFuZAkJCSMKIwkJCQkJCQkJCSMKIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWQwID0gdmFsdWUgb2YgdHlwZSB0YWcJCQkJCQkjCiMJCW9uZSBvZjogTk9STSwgSU5GLCBRTkFOLCBTTkFOLCBERU5PUk0sIFpFUk8JCSMKIwkJCQkJCQkJCSMKIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCVNpbXBseSB0ZXN0IHRoZSBleHBvbmVudCwgai1iaXQsIGFuZCBtYW50aXNzYSB2YWx1ZXMgdG8JCSMKIyBkZXRlcm1pbmUgdGhlIHR5cGUgb2Ygb3BlcmFuZC4JCQkJCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCWdsb2JhbAkJc2V0X3RhZ19zCnNldF90YWdfczoKCW1vdi5sCQlGVEVNUCglYTApLCAlZDAKCW1vdi5sCQklZDAsICVkMQoKCWFuZGkubAkJJjB4N2Y4MDAwMDAsICVkMAoJYmVxLmIJCXplcm9fb3JfZGVub3JtX3MKCgljbXBpLmwJCSVkMCwgJjB4N2Y4MDAwMDAKCWJlcS5iCQlpbmZfb3JfbmFuX3MKCmlzX25vcm1fczoKCW1vdi5iCQkmTk9STSwgJWQwCglydHMKemVyb19vcl9kZW5vcm1fczoKCWFuZC5sCQkmMHgwMDdmZmZmZiwgJWQxCglibmUJCWlzX2Rlbm9ybV9zCmlzX3plcm9fczoKCW1vdi5iCQkmWkVSTywgJWQwCglydHMKaXNfZGVub3JtX3M6Cgltb3YuYgkJJkRFTk9STSwgJWQwCglydHMKaW5mX29yX25hbl9zOgoJYW5kLmwJCSYweDAwN2ZmZmZmLCAlZDEKCWJuZQkJaXNfbmFuX3MKaXNfaW5mX3M6Cgltb3YuYgkJJklORiwgJWQwCglydHMKaXNfbmFuX3M6CglidHN0CQkmMjIsICVkMQoJYm5lCQlpc19xbmFuX3MKaXNfc25hbl9zOgoJbW92LmIJCSZTTkFOLCAlZDAKCXJ0cwppc19xbmFuX3M6Cgltb3YuYgkJJlFOQU4sICVkMAoJcnRzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwl1bmZfcmVzKCk6IHJvdXRpbmUgdG8gcHJvZHVjZSBkZWZhdWx0IHVuZGVyZmxvdyByZXN1bHQgb2YgYQkjCiMJCSAgIHNjYWxlZCBleHRlbmRlZCBwcmVjaXNpb24gbnVtYmVyOyB0aGlzIGlzIHVzZWQgYnkJIwojCQkgICBmYWRkL2ZkaXYvZm11bC9ldGMuIGVtdWxhdGlvbiByb3V0aW5lcy4JCSMKIwl1bmZfcmVzNCgpOiBzYW1lIGFzIGFib3ZlIGJ1dCBmb3IgZnNnbG11bC9mc2dsZGl2IHdoaWNoIHVzZQkjCiMJCSAgICBzaW5nbGUgcm91bmQgcHJlYyBhbmQgZXh0ZW5kZWQgcHJlYyBtb2RlLgkJIwojCQkJCQkJCQkJIwojIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJX2Rlbm9ybSgpIC0gZGVub3JtYWxpemUgYWNjb3JkaW5nIHRvIHNjYWxlIGZhY3RvcgkJIwojCV9yb3VuZCgpIC0gcm91bmQgZGVub3JtYWxpemVkIG51bWJlciBhY2NvcmRpbmcgdG8gcm5kIHByZWMJIwojCQkJCQkJCQkJIwojIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc29uIG9wZXJhbmQJCQkjCiMJZDAgPSBzY2FsZSBmYWN0b3IJCQkJCQkjCiMJZDEgPSByb3VuZGluZyBwcmVjaXNpb24vbW9kZQkJCQkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJYTAgPSBwb2ludGVyIHRvIGRlZmF1bHQgdW5kZXJmbG93IHJlc3VsdCBpbiBleHRlbmRlZCBwcmVjaXNpb24JIwojCWQwLmIgPSByZXN1bHQgRlBTUl9jYyB3aGljaCBjYWxsZXIgbWF5IG9yIG1heSBub3Qgd2FudCB0byBzYXZlCSMKIwkJCQkJCQkJCSMKIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCUNvbnZlcnQgdGhlIGlucHV0IG9wZXJhbmQgdG8gImludGVybmFsIGZvcm1hdCIgd2hpY2ggbWVhbnMgdGhlCSMKIyBleHBvbmVudCBpcyBleHRlbmRlZCB0byAxNiBiaXRzIGFuZCB0aGUgc2lnbiBpcyBzdG9yZWQgaW4gdGhlIHVudXNlZAkjCiMgcG9ydGlvbiBvZiB0aGUgZXh0ZW5kZWQgcHJlY2lzb24gb3BlcmFuZC4gRGVub3JtYWxpemUgdGhlIG51bWJlcgkjCiMgYWNjb3JkaW5nIHRvIHRoZSBzY2FsZSBmYWN0b3IgcGFzc2VkIGluIGQwLiBUaGVuLCByb3VuZCB0aGUJCSMKIyBkZW5vcm1hbGl6ZWQgcmVzdWx0LgkJCQkJCQkjCiMJU2V0IHRoZSBGUFNSX2V4YyBiaXRzIGFzIGFwcHJvcHJpYXRlIGJ1dCByZXR1cm4gdGhlIGNjIGJpdHMgaW4JIwojIGQwIGluIGNhc2UgdGhlIGNhbGxlciBkb2Vzbid0IHdhbnQgdG8gc2F2ZSB0aGVtIChhcyBpcyB0aGUgY2FzZSBmb3IJIwojIGZtb3ZlIG91dCkuCQkJCQkJCQkjCiMJdW5mX3JlczQoKSBmb3IgZnNnbG11bC9mc2dsZGl2IGZvcmNlcyB0aGUgZGVub3JtIHRvIGV4dGVuZGVkCSMKIyBwcmVjaXNpb24gYW5kIHRoZSByb3VuZGluZyBtb2RlIHRvIHNpbmdsZS4JCQkJIwojCQkJCQkJCQkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCglnbG9iYWwJCXVuZl9yZXMKdW5mX3JlczoKCW1vdi5sCQklZDEsIC0oJXNwKQkJIyBzYXZlIHJuZCBwcmVjLG1vZGUgb24gc3RhY2sKCglidHN0CQkmMHg3LCBGVEVNUF9FWCglYTApCSMgbWFrZSAiaW50ZXJuYWwiIGZvcm1hdAoJc25lCQlGVEVNUF9TR04oJWEwKQoKCW1vdi53CQlGVEVNUF9FWCglYTApLCAlZDEJIyBleHRyYWN0IGV4cG9uZW50CglhbmQudwkJJjB4N2ZmZiwgJWQxCglzdWIudwkJJWQwLCAlZDEKCW1vdi53CQklZDEsIEZURU1QX0VYKCVhMCkJIyBpbnNlcnQgMTYgYml0IGV4cG9uZW50CgoJbW92LmwJCSVhMCwgLSglc3ApCQkjIHNhdmUgb3BlcmFuZCBwdHIgZHVyaW5nIGNhbGxzCgoJbW92LmwJCTB4NCglc3ApLCVkMAkJIyBwYXNzIHJuZCBwcmVjLgoJYW5kaS53CQkmMHgwMGMwLCVkMAoJbHNyLncJCSYweDQsJWQwCglic3IubAkJX2Rlbm9ybQkJCSMgZGVub3JtIHJlc3VsdAoKCW1vdi5sCQkoJXNwKSwlYTAKCW1vdi53CQkweDYoJXNwKSwlZDEJCSMgbG9hZCBwcmVjOm1vZGUgaW50byAlZDEKCWFuZGkudwkJJjB4YzAsJWQxCQkjIGV4dHJhY3Qgcm5kIHByZWMKCWxzci53CQkmMHg0LCVkMQoJc3dhcAkJJWQxCgltb3YudwkJMHg2KCVzcCksJWQxCglhbmRpLncJCSYweDMwLCVkMQoJbHNyLncJCSYweDQsJWQxCglic3IubAkJX3JvdW5kCQkJIyByb3VuZCB0aGUgZGVub3JtCgoJbW92LmwJCSglc3ApKywgJWEwCgojIHJlc3VsdCBpcyBub3cgcm91bmRlZCBwcm9wZXJseS4gY29udmVydCBiYWNrIHRvIG5vcm1hbCBmb3JtYXQKCWJjbHIJCSYweDcsIEZURU1QX0VYKCVhMCkJIyBjbGVhciBzZ24gZmlyc3Q7IG1heSBoYXZlIHJlc2lkdWUKCXRzdC5iCQlGVEVNUF9TR04oJWEwKQkJIyBpcyAiaW50ZXJuYWwgcmVzdWx0IiBzaWduIHNldD8KCWJlcS5iCQl1bmZfcmVzX2Noa2lmemVybwkjIG5vOyByZXN1bHQgaXMgcG9zaXRpdmUKCWJzZXQJCSYweDcsIEZURU1QX0VYKCVhMCkJIyBzZXQgcmVzdWx0IHNnbgoJY2xyLmIJCUZURU1QX1NHTiglYTApCQkjIGNsZWFyIHRlbXAgc2lnbgoKIyB0aGUgbnVtYmVyIG1heSBoYXZlIGJlY29tZSB6ZXJvIGFmdGVyIHJvdW5kaW5nLiBzZXQgY2NvZGVzIGFjY29yZGluZ2x5Lgp1bmZfcmVzX2Noa2lmemVybzoKCWNsci5sCQklZDAKCXRzdC5sCQlGVEVNUF9ISSglYTApCQkjIGlzIHZhbHVlIG5vdyBhIHplcm8/CglibmUuYgkJdW5mX3Jlc19jb250CQkjIG5vCgl0c3QubAkJRlRFTVBfTE8oJWEwKQoJYm5lLmIJCXVuZl9yZXNfY29udAkJIyBubwojCWJzZXQJCSZ6X2JpdCwgRlBTUl9DQyglYTYpCSMgeWVzOyBzZXQgemVybyBjY29kZSBiaXQKCWJzZXQJCSZ6X2JpdCwgJWQwCQkjIHllczsgc2V0IHplcm8gY2NvZGUgYml0Cgp1bmZfcmVzX2NvbnQ6CgojCiMgY2FuIGluZXgxIGFsc28gYmUgc2V0IGFsb25nIHdpdGggdW5mbCBhbmQgaW5leDI/Pz8KIwojIHdlIGtub3cgdGhhdCB1bmRlcmZsb3cgaGFzIG9jY3VycmVkLiBhdW5mbCBzaG91bGQgYmUgc2V0IGlmIElORVgyIGlzIGFsc28gc2V0LgojCglidHN0CQkmaW5leDJfYml0LCBGUFNSX0VYQ0VQVCglYTYpICMgaXMgSU5FWDIgc2V0PwoJYmVxLmIJCXVuZl9yZXNfZW5kCQkjIG5vCglic2V0CQkmYXVuZmxfYml0LCBGUFNSX0FFWENFUFQoJWE2KSAjIHllczsgc2V0IGF1bmZsCgp1bmZfcmVzX2VuZDoKCWFkZC5sCQkmMHg0LCAlc3AJCSMgY2xlYXIgc3RhY2sKCXJ0cwoKIyB1bmZfcmVzKCkgZm9yIGZzZ2xtdWwoKSBhbmQgZnNnbGRpdigpLgoJZ2xvYmFsCQl1bmZfcmVzNAp1bmZfcmVzNDoKCW1vdi5sCQklZDEsLSglc3ApCQkjIHNhdmUgcm5kIHByZWMsbW9kZSBvbiBzdGFjawoKCWJ0c3QJCSYweDcsRlRFTVBfRVgoJWEwKQkjIG1ha2UgImludGVybmFsIiBmb3JtYXQKCXNuZQkJRlRFTVBfU0dOKCVhMCkKCgltb3YudwkJRlRFTVBfRVgoJWEwKSwlZDEJIyBleHRyYWN0IGV4cG9uZW50CglhbmQudwkJJjB4N2ZmZiwlZDEKCXN1Yi53CQklZDAsJWQxCgltb3YudwkJJWQxLEZURU1QX0VYKCVhMCkJIyBpbnNlcnQgMTYgYml0IGV4cG9uZW50CgoJbW92LmwJCSVhMCwtKCVzcCkJCSMgc2F2ZSBvcGVyYW5kIHB0ciBkdXJpbmcgY2FsbHMKCgljbHIubAkJJWQwCQkJIyBmb3JjZSBybmQgcHJlYyA9IGV4dAoJYnNyLmwJCV9kZW5vcm0JCQkjIGRlbm9ybSByZXN1bHQKCgltb3YubAkJKCVzcCksJWEwCgltb3YudwkJJnNfbW9kZSwlZDEJCSMgZm9yY2Ugcm5kIHByZWMgPSBzZ2wKCXN3YXAJCSVkMQoJbW92LncJCTB4Niglc3ApLCVkMQkJIyBsb2FkIHJuZCBtb2RlCglhbmRpLncJCSYweDMwLCVkMQkJIyBleHRyYWN0IHJuZCBwcmVjCglsc3IudwkJJjB4NCwlZDEKCWJzci5sCQlfcm91bmQJCQkjIHJvdW5kIHRoZSBkZW5vcm0KCgltb3YubAkJKCVzcCkrLCVhMAoKIyByZXN1bHQgaXMgbm93IHJvdW5kZWQgcHJvcGVybHkuIGNvbnZlcnQgYmFjayB0byBub3JtYWwgZm9ybWF0CgliY2xyCQkmMHg3LEZURU1QX0VYKCVhMCkJIyBjbGVhciBzZ24gZmlyc3Q7IG1heSBoYXZlIHJlc2lkdWUKCXRzdC5iCQlGVEVNUF9TR04oJWEwKQkJIyBpcyAiaW50ZXJuYWwgcmVzdWx0IiBzaWduIHNldD8KCWJlcS5iCQl1bmZfcmVzNF9jaGtpZnplcm8JIyBubzsgcmVzdWx0IGlzIHBvc2l0aXZlCglic2V0CQkmMHg3LEZURU1QX0VYKCVhMCkJIyBzZXQgcmVzdWx0IHNnbgoJY2xyLmIJCUZURU1QX1NHTiglYTApCQkjIGNsZWFyIHRlbXAgc2lnbgoKIyB0aGUgbnVtYmVyIG1heSBoYXZlIGJlY29tZSB6ZXJvIGFmdGVyIHJvdW5kaW5nLiBzZXQgY2NvZGVzIGFjY29yZGluZ2x5Lgp1bmZfcmVzNF9jaGtpZnplcm86CgljbHIubAkJJWQwCgl0c3QubAkJRlRFTVBfSEkoJWEwKQkJIyBpcyB2YWx1ZSBub3cgYSB6ZXJvPwoJYm5lLmIJCXVuZl9yZXM0X2NvbnQJCSMgbm8KCXRzdC5sCQlGVEVNUF9MTyglYTApCglibmUuYgkJdW5mX3JlczRfY29udAkJIyBubwojCWJzZXQJCSZ6X2JpdCxGUFNSX0NDKCVhNikJIyB5ZXM7IHNldCB6ZXJvIGNjb2RlIGJpdAoJYnNldAkJJnpfYml0LCVkMAkJIyB5ZXM7IHNldCB6ZXJvIGNjb2RlIGJpdAoKdW5mX3JlczRfY29udDoKCiMKIyBjYW4gaW5leDEgYWxzbyBiZSBzZXQgYWxvbmcgd2l0aCB1bmZsIGFuZCBpbmV4Mj8/PwojCiMgd2Uga25vdyB0aGF0IHVuZGVyZmxvdyBoYXMgb2NjdXJyZWQuIGF1bmZsIHNob3VsZCBiZSBzZXQgaWYgSU5FWDIgaXMgYWxzbyBzZXQuCiMKCWJ0c3QJCSZpbmV4Ml9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIGlzIElORVgyIHNldD8KCWJlcS5iCQl1bmZfcmVzNF9lbmQJCSMgbm8KCWJzZXQJCSZhdW5mbF9iaXQsRlBTUl9BRVhDRVBUKCVhNikgIyB5ZXM7IHNldCBhdW5mbAoKdW5mX3JlczRfZW5kOgoJYWRkLmwJCSYweDQsJXNwCQkjIGNsZWFyIHN0YWNrCglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCW92Zl9yZXMoKTogcm91dGluZSB0byBwcm9kdWNlIHRoZSBkZWZhdWx0IG92ZXJmbG93IHJlc3VsdCBvZgkjCiMJCSAgIGFuIG92ZXJmbG93aW5nIG51bWJlci4JCQkJIwojCW92Zl9yZXMyKCk6IHNhbWUgYXMgYWJvdmUgYnV0IHRoZSBybmQgbW9kZS9wcmVjIGFyZSBwYXNzZWQJIwojCQkgICAgZGlmZmVyZW50bHkuCQkJCQkjCiMJCQkJCQkJCQkjCiMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlub25lCQkJCQkJCQkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlkMS5iCT0gJy0xJyA9PiAoLSk7ICcwJyA9PiAoKykJCQkJIwojICAgb3ZmX3JlcygpOgkJCQkJCQkJIwojCWQwCT0gcm5kIG1vZGUvcHJlYwkJCQkJCSMKIyAgIG92Zl9yZXMyKCk6CQkJCQkJCQkjCiMJaGkoZDApCT0gcm5kIHByZWMJCQkJCQkjCiMJbG8oZDApCT0gcm5kIG1vZGUJCQkJCQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlhMAk9IHBvaW50cyB0byBleHRlbmRlZCBwcmVjaXNpb24gcmVzdWx0CQkJIwojCWQwLmIJPSBjb25kaXRpb24gY29kZSBiaXRzCQkJCQkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlUaGUgZGVmYXVsdCBvdmVyZmxvdyByZXN1bHQgY2FuIGJlIGRldGVybWluZWQgYnkgdGhlIHNpZ24gb2YJIwojIHRoZSByZXN1bHQgYW5kIHRoZSByb3VuZGluZyBtb2RlL3ByZWMgaW4gZWZmZWN0LiBUaGVzZSBiaXRzIGFyZQkjCiMgY29uY2F0ZW5hdGVkIHRvZ2V0aGVyIHRvIGNyZWF0ZSBhbiBpbmRleCBpbnRvIHRoZSBkZWZhdWx0IHJlc3VsdAkjCiMgdGFibGUuIEEgcG9pbnRlciB0byB0aGUgY29ycmVjdCByZXN1bHQgaXMgcmV0dXJuZWQgaW4gYTAuIFRoZQkJIwojIHJlc3VsdGluZyBjb25kaXRpb24gY29kZXMgYXJlIHJldHVybmVkIGluIGQwIGluIGNhc2UgdGhlIGNhbGxlcgkjCiMgZG9lc24ndCB3YW50IEZQU1JfY2MgYWx0ZXJlZCAoYXMgaXMgdGhlIGNhc2UgZm9yIGZtb3ZlIG91dCkuCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCglnbG9iYWwJCW92Zl9yZXMKb3ZmX3JlczoKCWFuZGkudwkJJjB4MTAsJWQxCQkjIGtlZXAgcmVzdWx0IHNpZ24KCWxzci5iCQkmMHg0LCVkMAkJIyBzaGlmdCBwcmVjL21vZGUKCW9yLmIJCSVkMCwlZDEJCQkjIGNvbmNhdCB0aGUgdHdvCgltb3YudwkJJWQxLCVkMAkJCSMgbWFrZSBhIGNvcHkKCWxzbC5iCQkmMHgxLCVkMQkJIyBtdWx0aXBseSBkMSBieSAyCglicmEuYgkJb3ZmX3Jlc19sb2FkCgoJZ2xvYmFsCQlvdmZfcmVzMgpvdmZfcmVzMjoKCWFuZC53CQkmMHgxMCwgJWQxCQkjIGtlZXAgcmVzdWx0IHNpZ24KCW9yLmIJCSVkMCwgJWQxCQkjIGluc2VydCBybmQgbW9kZQoJc3dhcAkJJWQwCglvci5iCQklZDAsICVkMQkJIyBpbnNlcnQgcm5kIHByZWMKCW1vdi53CQklZDEsICVkMAkJIyBtYWtlIGEgY29weQoJbHNsLmIJCSYweDEsICVkMQkJIyBzaGlmdCBsZWZ0IGJ5IDEKCiMKIyB1c2UgdGhlIHJvdW5kaW5nIG1vZGUsIHByZWNpc2lvbiwgYW5kIHJlc3VsdCBzaWduIGFzIGluIGluZGV4IGludG8gdGhlCiMgdHdvIHRhYmxlcyBiZWxvdyB0byBmZXRjaCB0aGUgZGVmYXVsdCByZXN1bHQgYW5kIHRoZSByZXN1bHQgY2NvZGVzLgojCm92Zl9yZXNfbG9hZDoKCW1vdi5iCQkodGJsX292ZmxfY2MuYiwlcGMsJWQwLncqMSksICVkMCAjIGZldGNoIHJlc3VsdCBjY29kZXMKCWxlYQkJKHRibF9vdmZsX3Jlc3VsdC5iLCVwYywlZDEudyo4KSwgJWEwICMgcmV0dXJuIHJlc3VsdCBwdHIKCglydHMKCnRibF9vdmZsX2NjOgoJYnl0ZQkJMHgyLCAweDAsIDB4MCwgMHgyCglieXRlCQkweDIsIDB4MCwgMHgwLCAweDIKCWJ5dGUJCTB4MiwgMHgwLCAweDAsIDB4MgoJYnl0ZQkJMHgwLCAweDAsIDB4MCwgMHgwCglieXRlCQkweDIrMHg4LCAweDgsIDB4MisweDgsIDB4OAoJYnl0ZQkJMHgyKzB4OCwgMHg4LCAweDIrMHg4LCAweDgKCWJ5dGUJCTB4MisweDgsIDB4OCwgMHgyKzB4OCwgMHg4Cgp0Ymxfb3ZmbF9yZXN1bHQ6Cglsb25nCQkweDdmZmYwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwICMgK0lORjsgUk4KCWxvbmcJCTB4N2ZmZTAwMDAsMHhmZmZmZmZmZiwweGZmZmZmZmZmLDB4MDAwMDAwMDAgIyArRVhUOyBSWgoJbG9uZwkJMHg3ZmZlMDAwMCwweGZmZmZmZmZmLDB4ZmZmZmZmZmYsMHgwMDAwMDAwMCAjICtFWFQ7IFJNCglsb25nCQkweDdmZmYwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwICMgK0lORjsgUlAKCglsb25nCQkweDdmZmYwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwICMgK0lORjsgUk4KCWxvbmcJCTB4NDA3ZTAwMDAsMHhmZmZmZmYwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAgIyArU0dMOyBSWgoJbG9uZwkJMHg0MDdlMDAwMCwweGZmZmZmZjAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCAjICtTR0w7IFJNCglsb25nCQkweDdmZmYwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwICMgK0lORjsgUlAKCglsb25nCQkweDdmZmYwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwICMgK0lORjsgUk4KCWxvbmcJCTB4NDNmZTAwMDAsMHhmZmZmZmZmZiwweGZmZmZmODAwLDB4MDAwMDAwMDAgIyArREJMOyBSWgoJbG9uZwkJMHg0M2ZlMDAwMCwweGZmZmZmZmZmLDB4ZmZmZmY4MDAsMHgwMDAwMDAwMCAjICtEQkw7IFJNCglsb25nCQkweDdmZmYwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwICMgK0lORjsgUlAKCglsb25nCQkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCglsb25nCQkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCglsb25nCQkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCglsb25nCQkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCgoJbG9uZwkJMHhmZmZmMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCAjIC1JTkY7IFJOCglsb25nCQkweGZmZmUwMDAwLDB4ZmZmZmZmZmYsMHhmZmZmZmZmZiwweDAwMDAwMDAwICMgLUVYVDsgUloKCWxvbmcJCTB4ZmZmZjAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAgIyAtSU5GOyBSTQoJbG9uZwkJMHhmZmZlMDAwMCwweGZmZmZmZmZmLDB4ZmZmZmZmZmYsMHgwMDAwMDAwMCAjIC1FWFQ7IFJQCgoJbG9uZwkJMHhmZmZmMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCAjIC1JTkY7IFJOCglsb25nCQkweGMwN2UwMDAwLDB4ZmZmZmZmMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwICMgLVNHTDsgUloKCWxvbmcJCTB4ZmZmZjAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAgIyAtSU5GOyBSTQoJbG9uZwkJMHhjMDdlMDAwMCwweGZmZmZmZjAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCAjIC1TR0w7IFJQCgoJbG9uZwkJMHhmZmZmMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCAjIC1JTkY7IFJOCglsb25nCQkweGMzZmUwMDAwLDB4ZmZmZmZmZmYsMHhmZmZmZjgwMCwweDAwMDAwMDAwICMgLURCTDsgUloKCWxvbmcJCTB4ZmZmZjAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAgIyAtSU5GOyBSTQoJbG9uZwkJMHhjM2ZlMDAwMCwweGZmZmZmZmZmLDB4ZmZmZmY4MDAsMHgwMDAwMDAwMCAjIC1EQkw7IFJQCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlnZXRfcGFja2VkKCk6IGZldGNoIGEgcGFja2VkIG9wZXJhbmQgZnJvbSBtZW1vcnkgYW5kIHRoZW4JIwojCQkgICAgICBjb252ZXJ0IGl0IHRvIGEgZmxvYXRpbmctcG9pbnQgYmluYXJ5IG51bWJlci4JIwojCQkJCQkJCQkJIwojIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJX2RjYWxjX2VhKCkgLSBjYWxjdWxhdGUgdGhlIGNvcnJlY3QgPGVhPgkJCSMKIwlfbWVtX3JlYWQoKSAtIGZldGNoIHRoZSBwYWNrZWQgb3BlcmFuZCBmcm9tIG1lbW9yeQkJIwojCWZhY2NfaW5feCgpIC0gdGhlIGZldGNoIGZhaWxlZCBzbyBqdW1wIHRvIHNwZWNpYWwgZXhpdCBjb2RlCSMKIwlkZWNiaW4oKSAgICAtIGNvbnZlcnQgcGFja2VkIHRvIGJpbmFyeSBleHRlbmRlZCBwcmVjaXNpb24JIwojCQkJCQkJCQkJIwojIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJTm9uZQkJCQkJCQkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJSWYgbm8gZmFpbHVyZSBvbiBfbWVtX3JlYWQoKToJCQkJCSMKIwlGUF9TUkMoYTYpID0gcGFja2VkIG9wZXJhbmQgbm93IGFzIGEgYmluYXJ5IEZQIG51bWJlcgkJIwojCQkJCQkJCQkJIwojIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJR2V0IHRoZSBjb3JyZWN0IDxlYT4gd2hpaGMgaXMgdGhlIHZhbHVlIG9uIHRoZSBleGNlcHRpb24gc3RhY2sJIwojIGZyYW1lIHcvIG1heWJlIGEgY29ycmVjdGlvbiBmYWN0b3IgaWYgdGhlIDxlYT4gaXMgLShhbikgb3IgKGFuKSsuCSMKIyBUaGVuLCBmZXRjaCB0aGUgb3BlcmFuZCBmcm9tIG1lbW9yeS4gSWYgdGhlIGZldGNoIGZhaWxzLCBleGl0CQkjCiMgdGhyb3VnaCBmYWNjX2luX3goKS4JCQkJCQkJIwojCUlmIHRoZSBwYWNrZWQgb3BlcmFuZCBpcyBhIFpFUk8sTkFOLCBvciBJTkYsIGNvbnZlcnQgaXQgdG8JIwojIGl0cyBiaW5hcnkgcmVwcmVzZW50YXRpb24gaGVyZS4gRWxzZSwgY2FsbCBkZWNiaW4oKSB3aGljaCB3aWxsCSMKIyBjb252ZXJ0IHRoZSBwYWNrZWQgdmFsdWUgdG8gYW4gZXh0ZW5kZWQgcHJlY2lzaW9uIGJpbmFyeSB2YWx1ZS4JIwojCQkJCQkJCQkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgojIHRoZSBzdGFja2VkIDxlYT4gZm9yIHBhY2tlZCBpcyBjb3JyZWN0IGV4Y2VwdCBmb3IgLShBbikuCiMgdGhlIGJhc2UgcmVnIG11c3QgYmUgdXBkYXRlZCBmb3IgYm90aCAtKEFuKSBhbmQgKEFuKSsuCglnbG9iYWwJCWdldF9wYWNrZWQKZ2V0X3BhY2tlZDoKCW1vdi5sCQkmMHhjLCVkMAkJIyBwYWNrZWQgaXMgMTIgYnl0ZXMKCWJzci5sCQlfZGNhbGNfZWEJCSMgZmV0Y2ggPGVhPjsgY29ycmVjdCBBbgoKCWxlYQkJRlBfU1JDKCVhNiksJWExCQkjIHBhc3M6IHB0ciB0byBzdXBlciBkc3QKCW1vdi5sCQkmMHhjLCVkMAkJIyBwYXNzOiAxMiBieXRlcwoJYnNyLmwJCV9kbWVtX3JlYWQJCSMgcmVhZCBwYWNrZWQgb3BlcmFuZAoKCXRzdC5sCQklZDEJCQkjIGRpZCBkZmV0Y2ggZmFpbD8KCWJuZS5sCQlmYWNjX2luX3gJCSMgeWVzCgojIFRoZSBwYWNrZWQgb3BlcmFuZCBpcyBhbiBJTkYgb3IgYSBOQU4gaWYgdGhlIGV4cG9uZW50IGZpZWxkIGlzIGFsbCBvbmVzLgoJYmZleHR1CQlGUF9TUkMoJWE2KXsmMTomMTV9LCVkMAkjIGdldCBleHAKCWNtcGkudwkJJWQwLCYweDdmZmYJCSMgSU5GIG9yIE5BTj8KCWJuZS5iCQlncF90cnlfemVybwkJIyBubwoJcnRzCQkJCQkjIG9wZXJhbmQgaXMgYW4gSU5GIG9yIE5BTgoKIyBUaGUgcGFja2VkIG9wZXJhbmQgaXMgYSB6ZXJvIGlmIHRoZSBtYW50aXNzYSBpcyBhbGwgemVybywgZWxzZSBpdCdzCiMgYSBub3JtYWwgcGFja2VkIG9wLgpncF90cnlfemVybzoKCW1vdi5iCQkzK0ZQX1NSQyglYTYpLCVkMAkjIGdldCBieXRlIDQKCWFuZGkuYgkJJjB4MGYsJWQwCQkjIGNsZWFyIGFsbCBidXQgbGFzdCBueWJibGUKCWJuZS5iCQlncF9ub3Rfc3BlYwkJIyBub3QgYSB6ZXJvCgl0c3QubAkJRlBfU1JDX0hJKCVhNikJCSMgaXMgbHcgMiB6ZXJvPwoJYm5lLmIJCWdwX25vdF9zcGVjCQkjIG5vdCBhIHplcm8KCXRzdC5sCQlGUF9TUkNfTE8oJWE2KQkJIyBpcyBsdyAzIHplcm8/CglibmUuYgkJZ3Bfbm90X3NwZWMJCSMgbm90IGEgemVybwoJcnRzCQkJCQkjIG9wZXJhbmQgaXMgYSBaRVJPCmdwX25vdF9zcGVjOgoJbGVhCQlGUF9TUkMoJWE2KSwlYTAJCSMgcGFzczogcHRyIHRvIHBhY2tlZCBvcAoJYnNyLmwJCWRlY2JpbgkJCSMgY29udmVydCB0byBleHRlbmRlZAoJZm1vdm0ueAkJJjB4ODAsRlBfU1JDKCVhNikJIyBtYWtlIHRoaXMgdGhlIHNyY29wCglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBkZWNiaW4oKTogQ29udmVydHMgbm9ybWFsaXplZCBwYWNrZWQgYmNkIHZhbHVlIHBvaW50ZWQgdG8gYnkgcmVnaXN0ZXIJIwojCSAgICBhMCB0byBleHRlbmRlZC1wcmVjaXNpb24gdmFsdWUgaW4gZnAwLgkJCSMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWEwID0gcG9pbnRlciB0byBub3JtYWxpemVkIHBhY2tlZCBiY2QgdmFsdWUJCQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlmcDAgPSBleGFjdCBmcCByZXByZXNlbnRhdGlvbiBvZiB0aGUgcGFja2VkIGJjZCB2YWx1ZS4JCSMKIwkJCQkJCQkJCSMKIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCUV4cGVjdGVkIGlzIGEgbm9ybWFsIGJjZCAoaS5lLiBub24tZXhjZXB0aW9uYWw7IGFsbCBpbmYsIHplcm8sCSMKIwlhbmQgTmFOIG9wZXJhbmRzIGFyZSBkaXNwYXRjaGVkIHdpdGhvdXQgZW50ZXJpbmcgdGhpcyByb3V0aW5lKQkjCiMJdmFsdWUgaW4gNjg4ODEvODgyIGZvcm1hdCBhdCBsb2NhdGlvbiAoYTApLgkJCSMKIwkJCQkJCQkJCSMKIwlBMS4gQ29udmVydCB0aGUgYmNkIGV4cG9uZW50IHRvIGJpbmFyeSBieSBzdWNjZXNzaXZlIGFkZHMgYW5kCSMKIwltdWxzLiBTZXQgdGhlIHNpZ24gYWNjb3JkaW5nIHRvIFNFLiBTdWJ0cmFjdCAxNiB0byBjb21wZW5zYXRlCSMKIwlmb3IgdGhlIG1hbnRpc3NhIHdoaWNoIGlzIHRvIGJlIGludGVycHJldGVkIGFzIDE3IGludGVnZXIJIwojCWRpZ2l0cywgcmF0aGVyIHRoYW4gMSBpbnRlZ2VyIGFuZCAxNiBmcmFjdGlvbiBkaWdpdHMuCQkjCiMJTm90ZTogdGhpcyBvcGVyYXRpb24gY2FuIG5ldmVyIG92ZXJmbG93LgkJCSMKIwkJCQkJCQkJCSMKIwlBMi4gQ29udmVydCB0aGUgYmNkIG1hbnRpc3NhIHRvIGJpbmFyeSBieSBzdWNjZXNzaXZlCQkjCiMJYWRkcyBhbmQgbXVscyBpbiBGUDAuIFNldCB0aGUgc2lnbiBhY2NvcmRpbmcgdG8gU00uCQkjCiMJVGhlIG1hbnRpc3NhIGRpZ2l0cyB3aWxsIGJlIGNvbnZlcnRlZCB3aXRoIHRoZSBkZWNpbWFsIHBvaW50CSMKIwlhc3N1bWVkIGZvbGxvd2luZyB0aGUgbGVhc3Qtc2lnbmlmaWNhbnQgZGlnaXQuCQkJIwojCU5vdGU6IHRoaXMgb3BlcmF0aW9uIGNhbiBuZXZlciBvdmVyZmxvdy4JCQkjCiMJCQkJCQkJCQkjCiMJQTMuIENvdW50IHRoZSBudW1iZXIgb2YgbGVhZGluZy90cmFpbGluZyB6ZXJvcyBpbiB0aGUJCSMKIwliY2Qgc3RyaW5nLiAgSWYgU0UgaXMgcG9zaXRpdmUsIGNvdW50IHRoZSBsZWFkaW5nIHplcm9zOwkjCiMJaWYgbmVnYXRpdmUsIGNvdW50IHRoZSB0cmFpbGluZyB6ZXJvcy4gIFNldCB0aGUgYWRqdXN0ZWQJIwojCWV4cG9uZW50IGVxdWFsIHRvIHRoZSBleHBvbmVudCBmcm9tIEExIGFuZCB0aGUgemVybyBjb3VudAkjCiMJYWRkZWQgaWYgU00gPSAxIGFuZCBzdWJ0cmFjdGVkIGlmIFNNID0gMC4gIFNjYWxlIHRoZQkJIwojCW1hbnRpc3NhIHRoZSBlcXVpdmFsZW50IG9mIGZvcmNpbmcgaW4gdGhlIGJjZCB2YWx1ZToJCSMKIwkJCQkJCQkJCSMKIwlTTSA9IDAJYSBub24temVybyBkaWdpdCBpbiB0aGUgaW50ZWdlciBwb3NpdGlvbgkJIwojCVNNID0gMQlhIG5vbi16ZXJvIGRpZ2l0IGluIE1hbnQwLCBsc2Qgb2YgdGhlIGZyYWN0aW9uCQkjCiMJCQkJCQkJCQkjCiMJdGhpcyB3aWxsIGluc3VyZSB0aGF0IGFueSB2YWx1ZSwgcmVnYXJkbGVzcyBvZiBpdHMJCSMKIwlyZXByZXNlbnRhdGlvbiAoZXguIDAuMUUyLCAxRTEsIDEwRTAsIDEwMEUtMSksIGlzIGNvbnZlcnRlZAkjCiMJY29uc2lzdGVudGx5LgkJCQkJCQkjCiMJCQkJCQkJCQkjCiMJQTQuIENhbGN1bGF0ZSB0aGUgZmFjdG9yIDEwXmV4cCBpbiBGUDEgdXNpbmcgYSB0YWJsZSBvZgkJIwojCTEwXigyXm4pIHZhbHVlcy4gIFRvIHJlZHVjZSB0aGUgZXJyb3IgaW4gZm9ybWluZyBmYWN0b3JzCSMKIwlncmVhdGVyIHRoYW4gMTBeMjcsIGEgZGlyZWN0ZWQgcm91bmRpbmcgc2NoZW1lIGlzIHVzZWQgd2l0aAkjCiMJdGFibGVzIHJvdW5kZWQgdG8gUk4sIFJNLCBhbmQgUlAsIGFjY29yZGluZyB0byB0aGUgdGFibGUJIwojCWluIHRoZSBjb21tZW50cyBvZiB0aGUgcHdydGVuIHNlY3Rpb24uCQkJCSMKIwkJCQkJCQkJCSMKIwlBNS4gRm9ybSB0aGUgZmluYWwgYmluYXJ5IG51bWJlciBieSBzY2FsaW5nIHRoZSBtYW50aXNzYSBieQkjCiMJdGhlIGV4cG9uZW50IGZhY3Rvci4gIFRoaXMgaXMgZG9uZSBieSBtdWx0aXBseWluZyB0aGUJCSMKIwltYW50aXNzYSBpbiBGUDAgYnkgdGhlIGZhY3RvciBpbiBGUDEgaWYgdGhlIGFkanVzdGVkCQkjCiMJZXhwb25lbnQgc2lnbiBpcyBwb3NpdGl2ZSwgYW5kIGRpdmlkaW5nIEZQMCBieSBGUDEgaWYJCSMKIwlpdCBpcyBuZWdhdGl2ZS4JCQkJCQkJIwojCQkJCQkJCQkJIwojCUNsZWFuIHVwIGFuZCByZXR1cm4uIENoZWNrIGlmIHRoZSBmaW5hbCBtdWwgb3IgZGl2IHdhcyBpbmV4YWN0LgkjCiMJSWYgc28sIHNldCBJTkVYMSBpbiBVU0VSX0ZQU1IuCQkJCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMKIwlQVEVOUk4sIFBURU5STSwgYW5kIFBURU5SUCBhcmUgYXJyYXlzIG9mIHBvd2VycyBvZiAxMCByb3VuZGVkCiMJdG8gbmVhcmVzdCwgbWludXMsIGFuZCBwbHVzLCByZXNwZWN0aXZlbHkuICBUaGUgdGFibGVzIGluY2x1ZGUKIwkxMCoqezEsMiw0LDgsMTYsMzIsNjQsMTI4LDI1Niw1MTIsMTAyNCwyMDQ4LDQwOTZ9LiAgTm8gcm91bmRpbmcKIwlpcyByZXF1aXJlZCB1bnRpbCB0aGUgcG93ZXIgaXMgZ3JlYXRlciB0aGFuIDI3LCBob3dldmVyLCBhbGwKIwl0YWJsZXMgaW5jbHVkZSB0aGUgZmlyc3QgNSBmb3IgZWFzZSBvZiBpbmRleGluZy4KIwpSVEFCTEU6CglieXRlCQkwLDAsMCwwCglieXRlCQkyLDMsMiwzCglieXRlCQkyLDMsMywyCglieXRlCQkzLDIsMiwzCgoJc2V0CQlGTklCUyw3CglzZXQJCUZTVFJULDAKCglzZXQJCUVTVFJULDQKCXNldAkJRURJR0lUUywyCgoJZ2xvYmFsCQlkZWNiaW4KZGVjYmluOgoJbW92LmwJCTB4MCglYTApLEZQX1NDUjBfRVgoJWE2KSAjIG1ha2UgYSBjb3B5IG9mIGlucHV0Cgltb3YubAkJMHg0KCVhMCksRlBfU0NSMF9ISSglYTYpICMgc28gd2UgZG9uJ3QgYWx0ZXIgaXQKCW1vdi5sCQkweDgoJWEwKSxGUF9TQ1IwX0xPKCVhNikKCglsZWEJCUZQX1NDUjAoJWE2KSwlYTAKCgltb3ZtLmwJCSYweDNjMDAsLSglc3ApCQkjIHNhdmUgZDItZDUKCWZtb3ZtLngJCSYweDEsLSglc3ApCQkjIHNhdmUgZnAxCiMKIyBDYWxjdWxhdGUgZXhwb25lbnQ6CiMgIDEuIENvcHkgYmNkIHZhbHVlIGluIG1lbW9yeSBmb3IgdXNlIGFzIGEgd29ya2luZyBjb3B5LgojICAyLiBDYWxjdWxhdGUgYWJzb2x1dGUgdmFsdWUgb2YgZXhwb25lbnQgaW4gZDEgYnkgbXVsIGFuZCBhZGQuCiMgIDMuIENvcnJlY3QgZm9yIGV4cG9uZW50IHNpZ24uCiMgIDQuIFN1YnRyYWN0IDE2IHRvIGNvbXBlbnNhdGUgZm9yIGludGVycHJldGluZyB0aGUgbWFudCBhcyBhbGwgaW50ZWdlciBkaWdpdHMuCiMgICAgIChpLmUuLCBhbGwgZGlnaXRzIGFzc3VtZWQgbGVmdCBvZiB0aGUgZGVjaW1hbCBwb2ludC4pCiMKIyBSZWdpc3RlciB1c2FnZToKIwojICBjYWxjX2U6CiMJKCopICBkMDogdGVtcCBkaWdpdCBzdG9yYWdlCiMJKCopICBkMTogYWNjdW11bGF0b3IgZm9yIGJpbmFyeSBleHBvbmVudAojCSgqKSAgZDI6IGRpZ2l0IGNvdW50CiMJKCopICBkMzogb2Zmc2V0IHBvaW50ZXIKIwkoICkgIGQ0OiBmaXJzdCB3b3JkIG9mIGJjZAojCSggKSAgYTA6IHBvaW50ZXIgdG8gd29ya2luZyBiY2QgdmFsdWUKIwkoICkgIGE2OiBwb2ludGVyIHRvIG9yaWdpbmFsIGJjZCB2YWx1ZQojCSgqKSAgRlBfU0NSMTogd29ya2luZyBjb3B5IG9mIG9yaWdpbmFsIGJjZCB2YWx1ZQojCSgqKSAgTF9TQ1IxOiBjb3B5IG9mIG9yaWdpbmFsIGV4cG9uZW50IHdvcmQKIwpjYWxjX2U6Cgltb3YubAkJJkVESUdJVFMsJWQyCQkjICMgb2YgbmliYmxlcyAoZGlnaXRzKSBpbiBmcmFjdGlvbiBwYXJ0Cgltb3YubAkJJkVTVFJULCVkMwkJIyBjb3VudGVyIHRvIHBpY2sgdXAgZGlnaXRzCgltb3YubAkJKCVhMCksJWQ0CQkjIGdldCBmaXJzdCB3b3JkIG9mIGJjZAoJY2xyLmwJCSVkMQkJCSMgemVybyBkMSBmb3IgYWNjdW11bGF0b3IKZV9nZDoKCW11bHUubAkJJjB4YSwlZDEJCSMgbXVsIHBhcnRpYWwgcHJvZHVjdCBieSBvbmUgZGlnaXQgcGxhY2UKCWJmZXh0dQkJJWQ0eyVkMzomNH0sJWQwCQkjIGdldCB0aGUgZGlnaXQgYW5kIHplcm8gZXh0ZW5kIGludG8gZDAKCWFkZC5sCQklZDAsJWQxCQkJIyBkMSA9IGQxICsgZDAKCWFkZHEuYgkJJjQsJWQzCQkJIyBhZHZhbmNlIGQzIHRvIHRoZSBuZXh0IGRpZ2l0CglkYmYudwkJJWQyLGVfZ2QJCSMgaWYgd2UgaGF2ZSB1c2VkIGFsbCAzIGRpZ2l0cywgZXhpdCBsb29wCglidHN0CQkmMzAsJWQ0CQkJIyBnZXQgU0UKCWJlcS5iCQllX3BvcwkJCSMgZG9uJ3QgbmVnYXRlIGlmIHBvcwoJbmVnLmwJCSVkMQkJCSMgbmVnYXRlIGJlZm9yZSBzdWJ0cmFjdGluZwplX3BvczoKCXN1Yi5sCQkmMTYsJWQxCQkJIyBzdWIgdG8gY29tcGVuc2F0ZSBmb3Igc2hpZnQgb2YgbWFudAoJYmdlLmIJCWVfc2F2ZQkJCSMgaWYgc3RpbGwgcG9zLCBkbyBub3QgbmVnCgluZWcubAkJJWQxCQkJIyBub3cgbmVnYXRpdmUsIG1ha2UgcG9zIGFuZCBzZXQgU0UKCW9yLmwJCSYweDQwMDAwMDAwLCVkNAkJIyBzZXQgU0UgaW4gZDQsCglvci5sCQkmMHg0MDAwMDAwMCwoJWEwKQkjIGFuZCBpbiB3b3JraW5nIGJjZAplX3NhdmU6Cgltb3YubAkJJWQxLC0oJXNwKQkJIyBzYXZlIGV4cCBvbiBzdGFjawojCiMKIyBDYWxjdWxhdGUgbWFudGlzc2E6CiMgIDEuIENhbGN1bGF0ZSBhYnNvbHV0ZSB2YWx1ZSBvZiBtYW50aXNzYSBpbiBmcDAgYnkgbXVsIGFuZCBhZGQuCiMgIDIuIENvcnJlY3QgZm9yIG1hbnRpc3NhIHNpZ24uCiMgICAgIChpLmUuLCBhbGwgZGlnaXRzIGFzc3VtZWQgbGVmdCBvZiB0aGUgZGVjaW1hbCBwb2ludC4pCiMKIyBSZWdpc3RlciB1c2FnZToKIwojICBjYWxjX206CiMJKCopICBkMDogdGVtcCBkaWdpdCBzdG9yYWdlCiMJKCopICBkMTogbHdvcmQgY291bnRlcgojCSgqKSAgZDI6IGRpZ2l0IGNvdW50CiMJKCopICBkMzogb2Zmc2V0IHBvaW50ZXIKIwkoICkgIGQ0OiB3b3JkcyAyIGFuZCAzIG9mIGJjZAojCSggKSAgYTA6IHBvaW50ZXIgdG8gd29ya2luZyBiY2QgdmFsdWUKIwkoICkgIGE2OiBwb2ludGVyIHRvIG9yaWdpbmFsIGJjZCB2YWx1ZQojCSgqKSBmcDA6IG1hbnRpc3NhIGFjY3VtdWxhdG9yCiMJKCApICBGUF9TQ1IxOiB3b3JraW5nIGNvcHkgb2Ygb3JpZ2luYWwgYmNkIHZhbHVlCiMJKCApICBMX1NDUjE6IGNvcHkgb2Ygb3JpZ2luYWwgZXhwb25lbnQgd29yZAojCmNhbGNfbToKCW1vdi5sCQkmMSwlZDEJCQkjIHdvcmQgY291bnRlciwgaW5pdCB0byAxCglmbW92LnMJCSYweDAwMDAwMDAwLCVmcDAJIyBhY2N1bXVsYXRvcgojCiMKIyAgU2luY2UgdGhlIHBhY2tlZCBudW1iZXIgaGFzIGEgbG9uZyB3b3JkIGJldHdlZW4gdGhlIGZpcnN0ICYgc2Vjb25kIHBhcnRzLAojICBnZXQgdGhlIGludGVnZXIgZGlnaXQgdGhlbiBza2lwIGRvd24gJiBnZXQgdGhlIHJlc3Qgb2YgdGhlCiMgIG1hbnRpc3NhLiAgV2Ugd2lsbCB1bnJvbGwgdGhlIGxvb3Agb25jZS4KIwoJYmZleHR1CQkoJWEwKXsmMjg6JjR9LCVkMAkjIGludGVnZXIgcGFydCBpcyBscyBkaWdpdCBpbiBsb25nIHdvcmQKCWZhZGQuYgkJJWQwLCVmcDAJCSMgYWRkIGRpZ2l0IHRvIHN1bSBpbiBmcDAKIwojCiMgIEdldCB0aGUgcmVzdCBvZiB0aGUgbWFudGlzc2EuCiMKbG9hZGx3OgoJbW92LmwJCSglYTAsJWQxLkwqNCksJWQ0CSMgbG9hZCBtYW50aXNzYSBsb25xd29yZCBpbnRvIGQ0Cgltb3YubAkJJkZTVFJULCVkMwkJIyBjb3VudGVyIHRvIHBpY2sgdXAgZGlnaXRzCgltb3YubAkJJkZOSUJTLCVkMgkJIyByZXNldCBudW1iZXIgb2YgZGlnaXRzIHBlciBhMCBwdHIKbWQyYjoKCWZtdWwucwkJJjB4NDEyMDAwMDAsJWZwMAkjIGZwMCA9IGZwMCAqIDEwCgliZmV4dHUJCSVkNHslZDM6JjR9LCVkMAkJIyBnZXQgdGhlIGRpZ2l0IGFuZCB6ZXJvIGV4dGVuZAoJZmFkZC5iCQklZDAsJWZwMAkJIyBmcDAgPSBmcDAgKyBkaWdpdAojCiMKIyAgSWYgYWxsIHRoZSBkaWdpdHMgKDgpIGluIHRoYXQgbG9uZyB3b3JkIGhhdmUgYmVlbiBjb252ZXJ0ZWQgKGQyPTApLAojICB0aGVuIGluYyBkMSAoPTIpIHRvIHBvaW50IHRvIHRoZSBuZXh0IGxvbmcgd29yZCBhbmQgcmVzZXQgZDMgdG8gMAojICB0byBpbml0aWFsaXplIHRoZSBkaWdpdCBvZmZzZXQsIGFuZCBzZXQgZDIgdG8gNyBmb3IgdGhlIGRpZ2l0IGNvdW50OwojICBlbHNlIGNvbnRpbnVlIHdpdGggdGhpcyBsb25nIHdvcmQuCiMKCWFkZHEuYgkJJjQsJWQzCQkJIyBhZHZhbmNlIGQzIHRvIHRoZSBuZXh0IGRpZ2l0CglkYmYudwkJJWQyLG1kMmIJCSMgY2hlY2sgZm9yIGxhc3QgZGlnaXQgaW4gdGhpcyBsdwpuZXh0bHc6CglhZGRxLmwJCSYxLCVkMQkJCSMgaW5jIGx3IHBvaW50ZXIgaW4gbWFudGlzc2EKCWNtcC5sCQklZDEsJjIJCQkjIHRlc3QgZm9yIGxhc3QgbHcKCWJsZS5iCQlsb2FkbHcJCQkjIGlmIG5vdCwgZ2V0IGxhc3Qgb25lCiMKIyAgQ2hlY2sgdGhlIHNpZ24gb2YgdGhlIG1hbnQgYW5kIG1ha2UgdGhlIHZhbHVlIGluIGZwMCB0aGUgc2FtZSBzaWduLgojCm1fc2lnbjoKCWJ0c3QJCSYzMSwoJWEwKQkJIyB0ZXN0IHNpZ24gb2YgdGhlIG1hbnRpc3NhCgliZXEuYgkJYXBfc3RfegkJCSMgaWYgY2xlYXIsIGdvIHRvIGFwcGVuZC9zdHJpcCB6ZXJvcwoJZm5lZy54CQklZnAwCQkJIyBpZiBzZXQsIG5lZ2F0ZSBmcDAKIwojIEFwcGVuZC9zdHJpcCB6ZXJvczoKIwojICBGb3IgYWRqdXN0ZWQgZXhwb25lbnRzIHdoaWNoIGhhdmUgYW4gYWJzb2x1dGUgdmFsdWUgZ3JlYXRlciB0aGFuIDI3KiwKIyAgdGhpcyByb3V0aW5lIGNhbGN1bGF0ZXMgdGhlIGFtb3VudCBuZWVkZWQgdG8gbm9ybWFsaXplIHRoZSBtYW50aXNzYQojICBmb3IgdGhlIGFkanVzdGVkIGV4cG9uZW50LiAgVGhhdCBudW1iZXIgaXMgc3VidHJhY3RlZCBmcm9tIHRoZSBleHAKIyAgaWYgdGhlIGV4cCB3YXMgcG9zaXRpdmUsIGFuZCBhZGRlZCBpZiBpdCB3YXMgbmVnYXRpdmUuICBUaGUgcHVycG9zZQojICBvZiB0aGlzIGlzIHRvIHJlZHVjZSB0aGUgdmFsdWUgb2YgdGhlIGV4cG9uZW50IGFuZCB0aGUgcG9zc2liaWxpdHkKIyAgb2YgZXJyb3IgaW4gY2FsY3VsYXRpb24gb2YgcHdydGVuLgojCiMgIDEuIEJyYW5jaCBvbiB0aGUgc2lnbiBvZiB0aGUgYWRqdXN0ZWQgZXhwb25lbnQuCiMgIDJwLihwb3NpdGl2ZSBleHApCiMgICAyLiBDaGVjayBNMTYgYW5kIHRoZSBkaWdpdHMgaW4gbHdvcmRzIDIgYW5kIDMgaW4gZGVjZW5kaW5nIG9yZGVyLgojICAgMy4gQWRkIG9uZSBmb3IgZWFjaCB6ZXJvIGVuY291bnRlcmVkIHVudGlsIGEgbm9uLXplcm8gZGlnaXQuCiMgICA0LiBTdWJ0cmFjdCB0aGUgY291bnQgZnJvbSB0aGUgZXhwLgojICAgNS4gQ2hlY2sgaWYgdGhlIGV4cCBoYXMgY3Jvc3NlZCB6ZXJvIGluICMzIGFib3ZlOyBtYWtlIHRoZSBleHAgYWJzCiMJICAgYW5kIHNldCBTRS4KIwk2LiBNdWx0aXBseSB0aGUgbWFudGlzc2EgYnkgMTAqKmNvdW50LgojICAybi4obmVnYXRpdmUgZXhwKQojICAgMi4gQ2hlY2sgdGhlIGRpZ2l0cyBpbiBsd29yZHMgMyBhbmQgMiBpbiBkZWNlbmRpbmcgb3JkZXIuCiMgICAzLiBBZGQgb25lIGZvciBlYWNoIHplcm8gZW5jb3VudGVyZWQgdW50aWwgYSBub24temVybyBkaWdpdC4KIyAgIDQuIEFkZCB0aGUgY291bnQgdG8gdGhlIGV4cC4KIyAgIDUuIENoZWNrIGlmIHRoZSBleHAgaGFzIGNyb3NzZWQgemVybyBpbiAjMyBhYm92ZTsgY2xlYXIgU0UuCiMgICA2LiBEaXZpZGUgdGhlIG1hbnRpc3NhIGJ5IDEwKipjb3VudC4KIwojICAqV2h5IDI3PyAgSWYgdGhlIGFkanVzdGVkIGV4cG9uZW50IGlzIHdpdGhpbiAtMjggPCBleHBBIDwgMjgsIHRoYW4KIyAgIGFueSBhZGp1c3RtZW50IGR1ZSB0byBhcHBlbmQvc3RyaXAgemVyb3Mgd2lsbCBkcml2ZSB0aGUgcmVzdWx0YW5lCiMgICBleHBvbmVudCB0b3dhcmRzIHplcm8uICBTaW5jZSBhbGwgcHdydGVuIGNvbnN0YW50cyB3aXRoIGEgcG93ZXIKIyAgIG9mIDI3IG9yIGxlc3MgYXJlIGV4YWN0LCB0aGVyZSBpcyBubyBuZWVkIHRvIHVzZSB0aGlzIHJvdXRpbmUgdG8KIyAgIGF0dGVtcHQgdG8gbGVzc2VuIHRoZSByZXN1bHRhbnQgZXhwb25lbnQuCiMKIyBSZWdpc3RlciB1c2FnZToKIwojICBhcF9zdF96OgojCSgqKSAgZDA6IHRlbXAgZGlnaXQgc3RvcmFnZQojCSgqKSAgZDE6IHplcm8gY291bnQKIwkoKikgIGQyOiBkaWdpdCBjb3VudAojCSgqKSAgZDM6IG9mZnNldCBwb2ludGVyCiMJKCApICBkNDogZmlyc3Qgd29yZCBvZiBiY2QKIwkoKikgIGQ1OiBsd29yZCBjb3VudGVyCiMJKCApICBhMDogcG9pbnRlciB0byB3b3JraW5nIGJjZCB2YWx1ZQojCSggKSAgRlBfU0NSMTogd29ya2luZyBjb3B5IG9mIG9yaWdpbmFsIGJjZCB2YWx1ZQojCSggKSAgTF9TQ1IxOiBjb3B5IG9mIG9yaWdpbmFsIGV4cG9uZW50IHdvcmQKIwojCiMgRmlyc3QgY2hlY2sgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZSBleHBvbmVudCB0byBzZWUgaWYgdGhpcwojIHJvdXRpbmUgaXMgbmVjZXNzYXJ5LiAgSWYgc28sIHRoZW4gY2hlY2sgdGhlIHNpZ24gb2YgdGhlIGV4cG9uZW50CiMgYW5kIGRvIGFwcGVuZCAoKykgb3Igc3RyaXAgKC0pIHplcm9zIGFjY29yZGluZ2x5LgojIFRoaXMgc2VjdGlvbiBoYW5kbGVzIGEgcG9zaXRpdmUgYWRqdXN0ZWQgZXhwb25lbnQuCiMKYXBfc3RfejoKCW1vdi5sCQkoJXNwKSwlZDEJCSMgbG9hZCBleHBBIGZvciByYW5nZSB0ZXN0CgljbXAubAkJJWQxLCYyNwkJCSMgdGVzdCBpcyB3aXRoIDI3CglibGUudwkJcHdydGVuCQkJIyBpZiBhYnMoZXhwQSkgPDI4LCBza2lwIGFwL3N0IHplcm9zCglidHN0CQkmMzAsKCVhMCkJCSMgY2hlY2sgc2lnbiBvZiBleHAKCWJuZS5iCQlhcF9zdF9uCQkJIyBpZiBuZWcsIGdvIHRvIG5lZyBzaWRlCgljbHIubAkJJWQxCQkJIyB6ZXJvIGNvdW50IHJlZwoJbW92LmwJCSglYTApLCVkNAkJIyBsb2FkIGx3b3JkIDEgdG8gZDQKCWJmZXh0dQkJJWQ0eyYyODomNH0sJWQwCQkjIGdldCBNMTYgaW4gZDAKCWJuZS5iCQlhcF9wX2Z4CQkJIyBpZiBNMTYgaXMgbm9uLXplcm8sIGdvIGZpeCBleHAKCWFkZHEubAkJJjEsJWQxCQkJIyBpbmMgemVybyBjb3VudAoJbW92LmwJCSYxLCVkNQkJCSMgaW5pdCBsd29yZCBjb3VudGVyCgltb3YubAkJKCVhMCwlZDUuTCo0KSwlZDQJIyBnZXQgbHdvcmQgMiB0byBkNAoJYm5lLmIJCWFwX3BfY2wJCQkjIGlmIGx3IDIgaXMgemVybywgc2tpcCBpdAoJYWRkcS5sCQkmOCwlZDEJCQkjIGFuZCBpbmMgY291bnQgYnkgOAoJYWRkcS5sCQkmMSwlZDUJCQkjIGluYyBsd29yZCBjb3VudGVyCgltb3YubAkJKCVhMCwlZDUuTCo0KSwlZDQJIyBnZXQgbHdvcmQgMyB0byBkNAphcF9wX2NsOgoJY2xyLmwJCSVkMwkJCSMgaW5pdCBvZmZzZXQgcmVnCgltb3YubAkJJjcsJWQyCQkJIyBpbml0IGRpZ2l0IGNvdW50ZXIKYXBfcF9nZDoKCWJmZXh0dQkJJWQ0eyVkMzomNH0sJWQwCQkjIGdldCBkaWdpdAoJYm5lLmIJCWFwX3BfZngJCQkjIGlmIG5vbi16ZXJvLCBnbyB0byBmaXggZXhwCglhZGRxLmwJCSY0LCVkMwkJCSMgcG9pbnQgdG8gbmV4dCBkaWdpdAoJYWRkcS5sCQkmMSwlZDEJCQkjIGluYyBkaWdpdCBjb3VudGVyCglkYmYudwkJJWQyLGFwX3BfZ2QJCSMgZ2V0IG5leHQgZGlnaXQKYXBfcF9meDoKCW1vdi5sCQklZDEsJWQwCQkJIyBjb3B5IGNvdW50ZXIgdG8gZDIKCW1vdi5sCQkoJXNwKSwlZDEJCSMgZ2V0IGFkanVzdGVkIGV4cCBmcm9tIG1lbW9yeQoJc3ViLmwJCSVkMCwlZDEJCQkjIHN1YnRyYWN0IGNvdW50IGZyb20gZXhwCgliZ2UuYgkJYXBfcF9mbQkJCSMgaWYgc3RpbGwgcG9zLCBnbyB0byBwd3J0ZW4KCW5lZy5sCQklZDEJCQkjIG5vdyBpdHMgbmVnOyBnZXQgYWJzCgltb3YubAkJKCVhMCksJWQ0CQkjIGxvYWQgbHdvcmQgMSB0byBkNAoJb3IubAkJJjB4NDAwMDAwMDAsJWQ0CQkjIGFuZCBzZXQgU0UgaW4gZDQKCW9yLmwJCSYweDQwMDAwMDAwLCglYTApCSMgYW5kIGluIG1lbW9yeQojCiMgQ2FsY3VsYXRlIHRoZSBtYW50aXNzYSBtdWx0aXBsaWVyIHRvIGNvbXBlbnNhdGUgZm9yIHRoZSBzdHJpcGluZyBvZgojIHplcm9zIGZyb20gdGhlIG1hbnRpc3NhLgojCmFwX3BfZm06CglsZWEubAkJUFRFTlJOKCVwYyksJWExCQkjIGdldCBhZGRyZXNzIG9mIHBvd2VyLW9mLXRlbiB0YWJsZQoJY2xyLmwJCSVkMwkJCSMgaW5pdCB0YWJsZSBpbmRleAoJZm1vdi5zCQkmMHgzZjgwMDAwMCwlZnAxCSMgaW5pdCBmcDEgdG8gMQoJbW92LmwJCSYzLCVkMgkJCSMgaW5pdCBkMiB0byBjb3VudCBiaXRzIGluIGNvdW50ZXIKYXBfcF9lbDoKCWFzci5sCQkmMSwlZDAJCQkjIHNoaWZ0IGxzYiBpbnRvIGNhcnJ5CgliY2MuYgkJYXBfcF9lbgkJCSMgaWYgMSwgbXVsIGZwMSBieSBwd3J0ZW4gZmFjdG9yCglmbXVsLngJCSglYTEsJWQzKSwlZnAxCQkjIG11bCBieSAxMCoqKGQzX2JpdF9ubykKYXBfcF9lbjoKCWFkZC5sCQkmMTIsJWQzCQkJIyBpbmMgZDMgdG8gbmV4dCBydGFibGUgZW50cnkKCXRzdC5sCQklZDAJCQkjIGNoZWNrIGlmIGQwIGlzIHplcm8KCWJuZS5iCQlhcF9wX2VsCQkJIyBpZiBub3QsIGdldCBuZXh0IGJpdAoJZm11bC54CQklZnAxLCVmcDAJCSMgbXVsIG1hbnRpc3NhIGJ5IDEwKioobm9fYml0c19zaGlmdGVkKQoJYnJhLmIJCXB3cnRlbgkJCSMgZ28gY2FsYyBwd3J0ZW4KIwojIFRoaXMgc2VjdGlvbiBoYW5kbGVzIGEgbmVnYXRpdmUgYWRqdXN0ZWQgZXhwb25lbnQuCiMKYXBfc3RfbjoKCWNsci5sCQklZDEJCQkjIGNsciBjb3VudGVyCgltb3YubAkJJjIsJWQ1CQkJIyBzZXQgdXAgZDUgdG8gcG9pbnQgdG8gbHdvcmQgMwoJbW92LmwJCSglYTAsJWQ1LkwqNCksJWQ0CSMgZ2V0IGx3b3JkIDMKCWJuZS5iCQlhcF9uX2NsCQkJIyBpZiBub3QgemVybywgY2hlY2sgZGlnaXRzCglzdWIubAkJJjEsJWQ1CQkJIyBkZWMgZDUgdG8gcG9pbnQgdG8gbHdvcmQgMgoJYWRkcS5sCQkmOCwlZDEJCQkjIGluYyBjb3VudGVyIGJ5IDgKCW1vdi5sCQkoJWEwLCVkNS5MKjQpLCVkNAkjIGdldCBsd29yZCAyCmFwX25fY2w6Cgltb3YubAkJJjI4LCVkMwkJCSMgcG9pbnQgdG8gbGFzdCBkaWdpdAoJbW92LmwJCSY3LCVkMgkJCSMgaW5pdCBkaWdpdCBjb3VudGVyCmFwX25fZ2Q6CgliZmV4dHUJCSVkNHslZDM6JjR9LCVkMAkJIyBnZXQgZGlnaXQKCWJuZS5iCQlhcF9uX2Z4CQkJIyBpZiBub24temVybywgZ28gdG8gZXhwIGZpeAoJc3VicS5sCQkmNCwlZDMJCQkjIHBvaW50IHRvIHByZXZpb3VzIGRpZ2l0CglhZGRxLmwJCSYxLCVkMQkJCSMgaW5jIGRpZ2l0IGNvdW50ZXIKCWRiZi53CQklZDIsYXBfbl9nZAkJIyBnZXQgbmV4dCBkaWdpdAphcF9uX2Z4OgoJbW92LmwJCSVkMSwlZDAJCQkjIGNvcHkgY291bnRlciB0byBkMAoJbW92LmwJCSglc3ApLCVkMQkJIyBnZXQgYWRqdXN0ZWQgZXhwIGZyb20gbWVtb3J5CglzdWIubAkJJWQwLCVkMQkJCSMgc3VidHJhY3QgY291bnQgZnJvbSBleHAKCWJndC5iCQlhcF9uX2ZtCQkJIyBpZiBzdGlsbCBwb3MsIGdvIGZpeCBtYW50aXNzYQoJbmVnLmwJCSVkMQkJCSMgdGFrZSBhYnMgb2YgZXhwIGFuZCBjbHIgU0UKCW1vdi5sCQkoJWEwKSwlZDQJCSMgbG9hZCBsd29yZCAxIHRvIGQ0CglhbmQubAkJJjB4YmZmZmZmZmYsJWQ0CQkjIGFuZCBjbHIgU0UgaW4gZDQKCWFuZC5sCQkmMHhiZmZmZmZmZiwoJWEwKQkjIGFuZCBpbiBtZW1vcnkKIwojIENhbGN1bGF0ZSB0aGUgbWFudGlzc2EgbXVsdGlwbGllciB0byBjb21wZW5zYXRlIGZvciB0aGUgYXBwZW5kaW5nIG9mCiMgemVyb3MgdG8gdGhlIG1hbnRpc3NhLgojCmFwX25fZm06CglsZWEubAkJUFRFTlJOKCVwYyksJWExCQkjIGdldCBhZGRyZXNzIG9mIHBvd2VyLW9mLXRlbiB0YWJsZQoJY2xyLmwJCSVkMwkJCSMgaW5pdCB0YWJsZSBpbmRleAoJZm1vdi5zCQkmMHgzZjgwMDAwMCwlZnAxCSMgaW5pdCBmcDEgdG8gMQoJbW92LmwJCSYzLCVkMgkJCSMgaW5pdCBkMiB0byBjb3VudCBiaXRzIGluIGNvdW50ZXIKYXBfbl9lbDoKCWFzci5sCQkmMSwlZDAJCQkjIHNoaWZ0IGxzYiBpbnRvIGNhcnJ5CgliY2MuYgkJYXBfbl9lbgkJCSMgaWYgMSwgbXVsIGZwMSBieSBwd3J0ZW4gZmFjdG9yCglmbXVsLngJCSglYTEsJWQzKSwlZnAxCQkjIG11bCBieSAxMCoqKGQzX2JpdF9ubykKYXBfbl9lbjoKCWFkZC5sCQkmMTIsJWQzCQkJIyBpbmMgZDMgdG8gbmV4dCBydGFibGUgZW50cnkKCXRzdC5sCQklZDAJCQkjIGNoZWNrIGlmIGQwIGlzIHplcm8KCWJuZS5iCQlhcF9uX2VsCQkJIyBpZiBub3QsIGdldCBuZXh0IGJpdAoJZmRpdi54CQklZnAxLCVmcDAJCSMgZGl2IG1hbnRpc3NhIGJ5IDEwKioobm9fYml0c19zaGlmdGVkKQojCiMKIyBDYWxjdWxhdGUgcG93ZXItb2YtdGVuIGZhY3RvciBmcm9tIGFkanVzdGVkIGFuZCBzaGlmdGVkIGV4cG9uZW50LgojCiMgUmVnaXN0ZXIgdXNhZ2U6CiMKIyAgcHdydGVuOgojCSgqKSAgZDA6IHRlbXAKIwkoICkgIGQxOiBleHBvbmVudAojCSgqKSAgZDI6IHtGUENSWzY6NV0sU00sU0V9IGFzIGluZGV4IGluIFJUQUJMRTsgdGVtcAojCSgqKSAgZDM6IEZQQ1Igd29yayBjb3B5CiMJKCApICBkNDogZmlyc3Qgd29yZCBvZiBiY2QKIwkoKikgIGExOiBSVEFCTEUgcG9pbnRlcgojICBjYWxjX3A6CiMJKCopICBkMDogdGVtcAojCSggKSAgZDE6IGV4cG9uZW50CiMJKCopICBkMzogUFdSVHh4IHRhYmxlIGluZGV4CiMJKCApICBhMDogcG9pbnRlciB0byB3b3JraW5nIGNvcHkgb2YgYmNkCiMJKCopICBhMTogUFdSVHh4IHBvaW50ZXIKIwkoKikgZnAxOiBwb3dlci1vZi10ZW4gYWNjdW11bGF0b3IKIwojIFB3cnRlbiBjYWxjdWxhdGVzIHRoZSBleHBvbmVudCBmYWN0b3IgaW4gdGhlIHNlbGVjdGVkIHJvdW5kaW5nIG1vZGUKIyBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyB0YWJsZToKIwojCVNpZ24gb2YgTWFudCAgU2lnbiBvZiBFeHAgIFJvdW5kaW5nIE1vZGUgIFBXUlRFTiBSb3VuZGluZyBNb2RlCiMKIwlBTlkJICBBTlkJUk4JUk4KIwojCSArCSAgICsJUlAJUlAKIwkgLQkgICArCVJQCVJNCiMJICsJICAgLQlSUAlSTQojCSAtCSAgIC0JUlAJUlAKIwojCSArCSAgICsJUk0JUk0KIwkgLQkgICArCVJNCVJQCiMJICsJICAgLQlSTQlSUAojCSAtCSAgIC0JUk0JUk0KIwojCSArCSAgICsJUloJUk0KIwkgLQkgICArCVJaCVJNCiMJICsJICAgLQlSWglSUAojCSAtCSAgIC0JUloJUlAKIwojCnB3cnRlbjoKCW1vdi5sCQlVU0VSX0ZQQ1IoJWE2KSwlZDMJIyBnZXQgdXNlcidzIEZQQ1IKCWJmZXh0dQkJJWQzeyYyNjomMn0sJWQyCQkjIGlzb2xhdGUgcm91bmRpbmcgbW9kZSBiaXRzCgltb3YubAkJKCVhMCksJWQ0CQkjIHJlbG9hZCAxc3QgYmNkIHdvcmQgdG8gZDQKCWFzbC5sCQkmMiwlZDIJCQkjIGZvcm1hdCBkMiB0byBiZQoJYmZleHR1CQklZDR7JjA6JjJ9LCVkMAkJIyB7RlBDUls2XSxGUENSWzVdLFNNLFNFfQoJYWRkLmwJCSVkMCwlZDIJCQkjIGluIGQyIGFzIGluZGV4IGludG8gUlRBQkxFCglsZWEubAkJUlRBQkxFKCVwYyksJWExCQkjIGxvYWQgcnRhYmxlIGJhc2UKCW1vdi5iCQkoJWExLCVkMiksJWQwCQkjIGxvYWQgbmV3IHJvdW5kaW5nIGJpdHMgZnJvbSB0YWJsZQoJY2xyLmwJCSVkMwkJCSMgY2xlYXIgZDMgdG8gZm9yY2Ugbm8gZXhjIGFuZCBleHRlbmRlZAoJYmZpbnMJCSVkMCwlZDN7JjI2OiYyfQkJIyBzdHVmZiBuZXcgcm91bmRpbmcgYml0cyBpbiBGUENSCglmbW92LmwJCSVkMywlZnBjcgkJIyB3cml0ZSBuZXcgRlBDUgoJYXNyLmwJCSYxLCVkMAkJCSMgd3JpdGUgY29ycmVjdCBQVEVOeHggdGFibGUKCWJjYy5iCQlub3RfcnAJCQkjIHRvIGExCglsZWEubAkJUFRFTlJQKCVwYyksJWExCQkjIGl0IGlzIFJQCglicmEuYgkJY2FsY19wCQkJIyBnbyB0byBpbml0IHNlY3Rpb24Kbm90X3JwOgoJYXNyLmwJCSYxLCVkMAkJCSMga2VlcCBjaGVja2luZwoJYmNjLmIJCW5vdF9ybQoJbGVhLmwJCVBURU5STSglcGMpLCVhMQkJIyBpdCBpcyBSTQoJYnJhLmIJCWNhbGNfcAkJCSMgZ28gdG8gaW5pdCBzZWN0aW9uCm5vdF9ybToKCWxlYS5sCQlQVEVOUk4oJXBjKSwlYTEJCSMgaXQgaXMgUk4KY2FsY19wOgoJbW92LmwJCSVkMSwlZDAJCQkjIGNvcHkgZXhwIHRvIGQwO3VzZSBkMAoJYnBsLmIJCW5vX25lZwkJCSMgaWYgZXhwIGlzIG5lZ2F0aXZlLAoJbmVnLmwJCSVkMAkJCSMgaW52ZXJ0IGl0Cglvci5sCQkmMHg0MDAwMDAwMCwoJWEwKQkjIGFuZCBzZXQgU0UgYml0Cm5vX25lZzoKCWNsci5sCQklZDMJCQkjIHRhYmxlIGluZGV4CglmbW92LnMJCSYweDNmODAwMDAwLCVmcDEJIyBpbml0IGZwMSB0byAxCmVfbG9vcDoKCWFzci5sCQkmMSwlZDAJCQkjIHNoaWZ0IG5leHQgYml0IGludG8gY2FycnkKCWJjYy5iCQllX25leHQJCQkjIGlmIHplcm8sIHNraXAgdGhlIG11bAoJZm11bC54CQkoJWExLCVkMyksJWZwMQkJIyBtdWwgYnkgMTAqKihkM19iaXRfbm8pCmVfbmV4dDoKCWFkZC5sCQkmMTIsJWQzCQkJIyBpbmMgZDMgdG8gbmV4dCBydGFibGUgZW50cnkKCXRzdC5sCQklZDAJCQkjIGNoZWNrIGlmIGQwIGlzIHplcm8KCWJuZS5iCQllX2xvb3AJCQkjIG5vdCB6ZXJvLCBjb250aW51ZSBzaGlmdGluZwojCiMKIyAgQ2hlY2sgdGhlIHNpZ24gb2YgdGhlIGFkanVzdGVkIGV4cCBhbmQgbWFrZSB0aGUgdmFsdWUgaW4gZnAwIHRoZQojICBzYW1lIHNpZ24uIElmIHRoZSBleHAgd2FzIHBvcyB0aGVuIG11bHRpcGx5IGZwMSpmcDA7CiMgIGVsc2UgZGl2aWRlIGZwMC9mcDEuCiMKIyBSZWdpc3RlciBVc2FnZToKIyAgbm9ybToKIwkoICkgIGEwOiBwb2ludGVyIHRvIHdvcmtpbmcgYmNkIHZhbHVlCiMJKCopIGZwMDogbWFudGlzc2EgYWNjdW11bGF0b3IKIwkoICkgZnAxOiBzY2FsaW5nIGZhY3RvciAtIDEwKiooYWJzKGV4cCkpCiMKcG5vcm06CglidHN0CQkmMzAsKCVhMCkJCSMgdGVzdCB0aGUgc2lnbiBvZiB0aGUgZXhwb25lbnQKCWJlcS5iCQltdWwJCQkjIGlmIGNsZWFyLCBnbyB0byBtdWx0aXBseQpkaXY6CglmZGl2LngJCSVmcDEsJWZwMAkJIyBleHAgaXMgbmVnYXRpdmUsIHNvIGRpdmlkZSBtYW50IGJ5IGV4cAoJYnJhLmIJCWVuZF9kZWMKbXVsOgoJZm11bC54CQklZnAxLCVmcDAJCSMgZXhwIGlzIHBvc2l0aXZlLCBzbyBtdWx0aXBseSBieSBleHAKIwojCiMgQ2xlYW4gdXAgYW5kIHJldHVybiB3aXRoIHJlc3VsdCBpbiBmcDAuCiMKIyBJZiB0aGUgZmluYWwgbXVsL2RpdiBpbiBkZWNiaW4gaW5jdXJyZWQgYW4gaW5leCBleGNlcHRpb24sCiMgaXQgd2lsbCBiZSBpbmV4MiwgYnV0IHdpbGwgYmUgcmVwb3J0ZWQgYXMgaW5leDEgYnkgZ2V0X29wLgojCmVuZF9kZWM6CglmbW92LmwJCSVmcHNyLCVkMAkJIyBnZXQgc3RhdHVzIHJlZ2lzdGVyCgliY2xyCQkmaW5leDJfYml0KzgsJWQwCSMgdGVzdCBmb3IgaW5leDIgYW5kIGNsZWFyIGl0CgliZXEuYgkJbm9fZXhjCQkJIyBza2lwIHRoaXMgaWYgbm8gZXhjCglvcmkudwkJJmlueDFhX21hc2ssMitVU0VSX0ZQU1IoJWE2KSAjIHNldCBJTkVYMS9BSU5FWApub19leGM6CglhZGQubAkJJjB4NCwlc3AJCSMgY2xlYXIgMSBsdyBwYXJhbQoJZm1vdm0ueAkJKCVzcCkrLCYweDQwCQkjIHJlc3RvcmUgZnAxCgltb3ZtLmwJCSglc3ApKywmMHgzYwkJIyByZXN0b3JlIGQyLWQ1CglmbW92LmwJCSYweDAsJWZwY3IKCWZtb3YubAkJJjB4MCwlZnBzcgoJcnRzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgYmluZGVjKCk6IENvbnZlcnRzIGFuIGlucHV0IGluIGV4dGVuZGVkIHByZWNpc2lvbiBmb3JtYXQgdG8gYmNkIGZvcm1hdCMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCWEwID0gcG9pbnRlciB0byB0aGUgaW5wdXQgZXh0ZW5kZWQgcHJlY2lzaW9uIHZhbHVlIGluIG1lbW9yeS4JIwojCSAgICAgdGhlIGlucHV0IG1heSBiZSBlaXRoZXIgbm9ybWFsaXplZCwgdW5ub3JtYWxpemVkLCBvcgkjCiMJICAgICBkZW5vcm1hbGl6ZWQuCQkJCQkJIwojCWQwID0gY29udGFpbnMgdGhlIGstZmFjdG9yIHNpZ24tZXh0ZW5kZWQgdG8gMzItYml0cy4JCSMKIwkJCQkJCQkJCSMKIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCUZQX1NDUjAoYTYpID0gYmNkIGZvcm1hdCByZXN1bHQgb24gdGhlIHN0YWNrLgkJCSMKIwkJCQkJCQkJCSMKIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCQkJCQkJCQkJIwojCUExLglTZXQgUk0gYW5kIHNpemUgZXh0OyAgU2V0IFNJR01BID0gc2lnbiBvZiBpbnB1dC4JIwojCQlUaGUgay1mYWN0b3IgaXMgc2F2ZWQgZm9yIHVzZSBpbiBkNy4gQ2xlYXIgdGhlCQkjCiMJCUJJTkRFQ19GTEcgZm9yIHNlcGFyYXRpbmcgbm9ybWFsaXplZC9kZW5vcm1hbGl6ZWQJIwojCQlpbnB1dC4gIElmIGlucHV0IGlzIHVubm9ybWFsaXplZCBvciBkZW5vcm1hbGl6ZWQsCSMKIwkJbm9ybWFsaXplIGl0LgkJCQkJCSMKIwkJCQkJCQkJCSMKIwlBMi4JU2V0IFggPSBhYnMoaW5wdXQpLgkJCQkJIwojCQkJCQkJCQkJIwojCUEzLglDb21wdXRlIElMT0cuCQkJCQkJIwojCQlJTE9HIGlzIHRoZSBsb2cgYmFzZSAxMCBvZiB0aGUgaW5wdXQgdmFsdWUuICBJdCBpcwkjCiMJCWFwcHJveGltYXRlZCBieSBhZGRpbmcgZSArIDAuZiB3aGVuIHRoZSBvcmlnaW5hbAkjCiMJCXZhbHVlIGlzIHZpZXdlZCBhcyAyXl5lICogMS5mIGluIGV4dGVuZGVkIHByZWNpc2lvbi4JIwojCQlUaGlzIHZhbHVlIGlzIHN0b3JlZCBpbiBkNi4JCQkJIwojCQkJCQkJCQkJIwojCUE0LglDbHIgSU5FWCBiaXQuCQkJCQkJIwojCQlUaGUgb3BlcmF0aW9uIGluIEEzIGFib3ZlIG1heSBoYXZlIHNldCBJTkVYMi4JCSMKIwkJCQkJCQkJCSMKIwlBNS4JU2V0IElDVFIgPSAwOwkJCQkJCSMKIwkJSUNUUiBpcyBhIGZsYWcgdXNlZCBpbiBBMTMuICBJdCBtdXN0IGJlIHNldCBiZWZvcmUgdGhlCSMKIwkJbG9vcCBlbnRyeSBBNi4JCQkJCQkjCiMJCQkJCQkJCQkjCiMJQTYuCUNhbGN1bGF0ZSBMRU4uCQkJCQkJIwojCQlMRU4gaXMgdGhlIG51bWJlciBvZiBkaWdpdHMgdG8gYmUgZGlzcGxheWVkLiAgVGhlCSMKIwkJay1mYWN0b3IgY2FuIGRpY3RhdGUgZWl0aGVyIHRoZSB0b3RhbCBudW1iZXIgb2YgZGlnaXRzLAkjCiMJCWlmIGl0IGlzIGEgcG9zaXRpdmUgbnVtYmVyLCBvciB0aGUgbnVtYmVyIG9mIGRpZ2l0cwkjCiMJCWFmdGVyIHRoZSBkZWNpbWFsIHBvaW50IHdoaWNoIGFyZSB0byBiZSBpbmNsdWRlZCBhcwkjCiMJCXNpZ25pZmljYW50LiAgU2VlIHRoZSA2ODg4MiBtYW51YWwgZm9yIGV4YW1wbGVzLgkjCiMJCUlmIExFTiBpcyBjb21wdXRlZCB0byBiZSBncmVhdGVyIHRoYW4gMTcsIHNldCBPUEVSUiBpbgkjCiMJCVVTRVJfRlBTUi4gIExFTiBpcyBzdG9yZWQgaW4gZDQuCQkJIwojCQkJCQkJCQkJIwojCUE3LglDYWxjdWxhdGUgU0NBTEUuCQkJCQkjCiMJCVNDQUxFIGlzIGVxdWFsIHRvIDEwXklTQ0FMRSwgd2hlcmUgSVNDQUxFIGlzIHRoZSBudW1iZXIJIwojCQlvZiBkZWNpbWFsIHBsYWNlcyBuZWVkZWQgdG8gaW5zdXJlIExFTiBpbnRlZ2VyIGRpZ2l0cwkjCiMJCWluIHRoZSBvdXRwdXQgYmVmb3JlIGNvbnZlcnNpb24gdG8gYmNkLiBMQU1CREEgaXMgdGhlCSMKIwkJc2lnbiBvZiBJU0NBTEUsIHVzZWQgaW4gQTkuIEZwMSBjb250YWlucwkJIwojCQkxMF5eKGFicyhJU0NBTEUpKSB1c2luZyBhIHJvdW5kaW5nIG1vZGUgd2hpY2ggaXMgYQkjCiMJCWZ1bmN0aW9uIG9mIHRoZSBvcmlnaW5hbCByb3VuZGluZyBtb2RlIGFuZCB0aGUgc2lnbnMJIwojCQlvZiBJU0NBTEUgYW5kIFguICBBIHRhYmxlIGlzIGdpdmVuIGluIHRoZSBjb2RlLgkJIwojCQkJCQkJCQkJIwojCUE4LglDbHIgSU5FWDsgRm9yY2UgUlouCQkJCQkjCiMJCVRoZSBvcGVyYXRpb24gaW4gQTMgYWJvdmUgbWF5IGhhdmUgc2V0IElORVgyLgkJIwojCQlSWiBtb2RlIGlzIGZvcmNlZCBmb3IgdGhlIHNjYWxpbmcgb3BlcmF0aW9uIHRvIGluc3VyZQkjCiMJCW9ubHkgb25lIHJvdW5kaW5nIGVycm9yLiAgVGhlIGdycyBiaXRzIGFyZSBjb2xsZWN0ZWQgaW4gIwojCQl0aGUgSU5FWCBmbGFnIGZvciB1c2UgaW4gQTEwLgkJCQkjCiMJCQkJCQkJCQkjCiMJQTkuCVNjYWxlIFggLT4gWS4JCQkJCQkjCiMJCVRoZSBtYW50aXNzYSBpcyBzY2FsZWQgdG8gdGhlIGRlc2lyZWQgbnVtYmVyIG9mCQkjCiMJCXNpZ25pZmljYW50IGRpZ2l0cy4gIFRoZSBleGNlc3MgZGlnaXRzIGFyZSBjb2xsZWN0ZWQJIwojCQlpbiBJTkVYMi4JCQkJCQkjCiMJCQkJCQkJCQkjCiMJQTEwLglPciBpbiBJTkVYLgkJCQkJCSMKIwkJSWYgSU5FWCBpcyBzZXQsIHJvdW5kIGVycm9yIG9jY3VycmVkLiAgVGhpcyBpcwkJIwojCQljb21wZW5zYXRlZCBmb3IgYnkgJ29yLWluZycgaW4gdGhlIElORVgyIGZsYWcgdG8JIwojCQl0aGUgbHNiIG9mIFkuCQkJCQkJIwojCQkJCQkJCQkJIwojCUExMS4JUmVzdG9yZSBvcmlnaW5hbCBGUENSOyBzZXQgc2l6ZSBleHQuCQkJIwojCQlQZXJmb3JtIEZJTlQgb3BlcmF0aW9uIGluIHRoZSB1c2VyJ3Mgcm91bmRpbmcgbW9kZS4JIwojCQlLZWVwIHRoZSBzaXplIHRvIGV4dGVuZGVkLgkJCQkjCiMJCQkJCQkJCQkjCiMJQTEyLglDYWxjdWxhdGUgWUlOVCA9IEZJTlQoWSkgYWNjb3JkaW5nIHRvIHVzZXIncyByb3VuZGluZwkjCiMJCW1vZGUuICBUaGUgRlBTUCByb3V0aW5lIHNpbnRkMCBpcyB1c2VkLiAgVGhlIG91dHB1dAkjCiMJCWlzIGluIGZwMC4JCQkJCQkjCiMJCQkJCQkJCQkjCiMJQTEzLglDaGVjayBmb3IgTEVOIGRpZ2l0cy4JCQkJCSMKIwkJSWYgdGhlIGludCBvcGVyYXRpb24gcmVzdWx0cyBpbiBtb3JlIHRoYW4gTEVOIGRpZ2l0cywJIwojCQlvciBsZXNzIHRoYW4gTEVOIC0xIGRpZ2l0cywgYWRqdXN0IElMT0cgYW5kIHJlcGVhdCBmcm9tCSMKIwkJQTYuICBUaGlzIHRlc3Qgb2NjdXJzIG9ubHkgb24gdGhlIGZpcnN0IHBhc3MuICBJZiB0aGUJIwojCQlyZXN1bHQgaXMgZXhhY3RseSAxMF5MRU4sIGRlY3JlbWVudCBJTE9HIGFuZCBkaXZpZGUJIwojCQl0aGUgbWFudGlzc2EgYnkgMTAuCQkJCQkjCiMJCQkJCQkJCQkjCiMJQTE0LglDb252ZXJ0IHRoZSBtYW50aXNzYSB0byBiY2QuCQkJCSMKIwkJVGhlIGJpbnN0ciByb3V0aW5lIGlzIHVzZWQgdG8gY29udmVydCB0aGUgTEVOIGRpZ2l0CSMKIwkJbWFudGlzc2EgdG8gYmNkIGluIG1lbW9yeS4gIFRoZSBpbnB1dCB0byBiaW5zdHIgaXMJIwojCQl0byBiZSBhIGZyYWN0aW9uOyBpLmUuIChtYW50aXNzYSkvMTBeTEVOIGFuZCBhZGp1c3RlZAkjCiMJCXN1Y2ggdGhhdCB0aGUgZGVjaW1hbCBwb2ludCBpcyB0byB0aGUgbGVmdCBvZiBiaXQgNjMuCSMKIwkJVGhlIGJjZCBkaWdpdHMgYXJlIHN0b3JlZCBpbiB0aGUgY29ycmVjdCBwb3NpdGlvbiBpbgkjCiMJCXRoZSBmaW5hbCBzdHJpbmcgYXJlYSBpbiBtZW1vcnkuCQkJIwojCQkJCQkJCQkJIwojCUExNS4JQ29udmVydCB0aGUgZXhwb25lbnQgdG8gYmNkLgkJCQkjCiMJCUFzIGluIEExNCBhYm92ZSwgdGhlIGV4cCBpcyBjb252ZXJ0ZWQgdG8gYmNkIGFuZCB0aGUJIwojCQlkaWdpdHMgYXJlIHN0b3JlZCBpbiB0aGUgZmluYWwgc3RyaW5nLgkJCSMKIwkJVGVzdCB0aGUgbGVuZ3RoIG9mIHRoZSBmaW5hbCBleHBvbmVudCBzdHJpbmcuICBJZiB0aGUJIwojCQlsZW5ndGggaXMgNCwgc2V0IG9wZXJyLgkJCQkJIwojCQkJCQkJCQkJIwojCUExNi4JV3JpdGUgc2lnbiBiaXRzIHRvIGZpbmFsIHN0cmluZy4JCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCnNldAlCSU5ERUNfRkxHLAlFWENfVEVNUAkjIERFTk9STSBmbGFnCgojIENvbnN0YW50cyBpbiBleHRlbmRlZCBwcmVjaXNpb24KUExPRzI6Cglsb25nCQkweDNGRkQwMDAwLDB4OUEyMDlBODQsMHhGQkNGRjc5OCwweDAwMDAwMDAwClBMT0cyVVAxOgoJbG9uZwkJMHgzRkZEMDAwMCwweDlBMjA5QTg0LDB4RkJDRkY3OTksMHgwMDAwMDAwMAoKIyBDb25zdGFudHMgaW4gc2luZ2xlIHByZWNpc2lvbgpGT05FOgoJbG9uZwkJMHgzRjgwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMApGVFdPOgoJbG9uZwkJMHg0MDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMApGVEVOOgoJbG9uZwkJMHg0MTIwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMApGNDkzMzoKCWxvbmcJCTB4NDU5QTI4MDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKClJCRFRCTDoKCWJ5dGUJCTAsMCwwLDAKCWJ5dGUJCTMsMywyLDIKCWJ5dGUJCTMsMiwyLDMKCWJ5dGUJCTIsMywzLDIKCiMJSW1wbGVtZW50YXRpb24gTm90ZXM6CiMKIwlUaGUgcmVnaXN0ZXJzIGFyZSB1c2VkIGFzIGZvbGxvd3M6CiMKIwkJZDA6IHNjcmF0Y2g7IExFTiBpbnB1dCB0byBiaW5zdHIKIwkJZDE6IHNjcmF0Y2gKIwkJZDI6IHVwcGVyIDMyLWJpdHMgb2YgbWFudGlzc2EgZm9yIGJpbnN0cgojCQlkMzogc2NyYXRjaDtsb3dlciAzMi1iaXRzIG9mIG1hbnRpc3NhIGZvciBiaW5zdHIKIwkJZDQ6IExFTgojCQlkNTogTEFNQkRBL0lDVFIKIwkJZDY6IElMT0cKIwkJZDc6IGstZmFjdG9yCiMJCWEwOiBwdHIgZm9yIG9yaWdpbmFsIG9wZXJhbmQvZmluYWwgcmVzdWx0CiMJCWExOiBzY3JhdGNoIHBvaW50ZXIKIwkJYTI6IHBvaW50ZXIgdG8gRlBfWDsgYWJzKG9yaWdpbmFsIHZhbHVlKSBpbiBleHQKIwkJZnAwOiBzY3JhdGNoCiMJCWZwMTogc2NyYXRjaAojCQlmcDI6IHNjcmF0Y2gKIwkJRl9TQ1IxOgojCQlGX1NDUjI6CiMJCUxfU0NSMToKIwkJTF9TQ1IyOgoKCWdsb2JhbAkJYmluZGVjCmJpbmRlYzoKCW1vdm0ubAkJJjB4M2YyMCwtKCVzcCkJIyAgeyVkMi0lZDcvJWEyfQoJZm1vdm0ueAkJJjB4NywtKCVzcCkJIyAgeyVmcDAtJWZwMn0KCiMgQTEuIFNldCBSTSBhbmQgc2l6ZSBleHQuIFNldCBTSUdNQSA9IHNpZ24gaW5wdXQ7CiMgICAgIFRoZSBrLWZhY3RvciBpcyBzYXZlZCBmb3IgdXNlIGluIGQ3LiAgQ2xlYXIgQklOREVDX0ZMRyBmb3IKIyAgICAgc2VwYXJhdGluZyAgbm9ybWFsaXplZC9kZW5vcm1hbGl6ZWQgaW5wdXQuICBJZiB0aGUgaW5wdXQKIyAgICAgaXMgYSBkZW5vcm1hbGl6ZWQgbnVtYmVyLCBzZXQgdGhlIEJJTkRFQ19GTEcgbWVtb3J5IHdvcmQKIyAgICAgdG8gc2lnbmFsIGRlbm9ybS4gIElmIHRoZSBpbnB1dCBpcyB1bm5vcm1hbGl6ZWQsIG5vcm1hbGl6ZQojICAgICB0aGUgaW5wdXQgYW5kIHRlc3QgZm9yIGRlbm9ybWFsaXplZCByZXN1bHQuCiMKCWZtb3YubAkJJnJtX21vZGUqMHgxMCwlZnBjcgkjIHNldCBSTSBhbmQgZXh0Cgltb3YubAkJKCVhMCksTF9TQ1IyKCVhNikJIyBzYXZlIGV4cG9uZW50IGZvciBzaWduIGNoZWNrCgltb3YubAkJJWQwLCVkNwkJIyBtb3ZlIGstZmFjdG9yIHRvIGQ3CgoJY2xyLmIJCUJJTkRFQ19GTEcoJWE2KQkjIGNsciBub3JtL2Rlbm9ybSBmbGFnCgljbXBpLmIJCVNUQUcoJWE2KSwmREVOT1JNICMgaXMgaW5wdXQgYSBERU5PUk0/CglibmUudwkJQTJfc3RyCQkjIG5vOyBpbnB1dCBpcyBhIE5PUk0KCiMKIyBOb3JtYWxpemUgdGhlIGRlbm9ybQojCnVuX2RlX25vcm06Cgltb3YudwkJKCVhMCksJWQwCglhbmQudwkJJjB4N2ZmZiwlZDAJIyBzdHJpcCBzaWduIG9mIG5vcm1hbGl6ZWQgZXhwCgltb3YubAkJNCglYTApLCVkMQoJbW92LmwJCTgoJWEwKSwlZDIKbm9ybV9sb29wOgoJc3ViLncJCSYxLCVkMAoJbHNsLmwJCSYxLCVkMgoJcm94bC5sCQkmMSwlZDEKCXRzdC5sCQklZDEKCWJnZS5iCQlub3JtX2xvb3AKIwojIFRlc3QgaWYgdGhlIG5vcm1hbGl6ZWQgaW5wdXQgaXMgZGVub3JtYWxpemVkCiMKCXRzdC53CQklZDAKCWJndC5iCQlwb3NfZXhwCQkjIGlmIGdyZWF0ZXIgdGhhbiB6ZXJvLCBpdCBpcyBhIG5vcm0KCXN0CQlCSU5ERUNfRkxHKCVhNikJIyBzZXQgZmxhZyBmb3IgZGVub3JtCnBvc19leHA6CglhbmQudwkJJjB4N2ZmZiwlZDAJIyBzdHJpcCBzaWduIG9mIG5vcm1hbGl6ZWQgZXhwCgltb3YudwkJJWQwLCglYTApCgltb3YubAkJJWQxLDQoJWEwKQoJbW92LmwJCSVkMiw4KCVhMCkKCiMgQTIuIFNldCBYID0gYWJzKGlucHV0KS4KIwpBMl9zdHI6Cgltb3YubAkJKCVhMCksRlBfU0NSMSglYTYpCSMgbW92ZSBpbnB1dCB0byB3b3JrIHNwYWNlCgltb3YubAkJNCglYTApLEZQX1NDUjErNCglYTYpCSMgbW92ZSBpbnB1dCB0byB3b3JrIHNwYWNlCgltb3YubAkJOCglYTApLEZQX1NDUjErOCglYTYpCSMgbW92ZSBpbnB1dCB0byB3b3JrIHNwYWNlCglhbmQubAkJJjB4N2ZmZmZmZmYsRlBfU0NSMSglYTYpCSMgY3JlYXRlIGFicyhYKQoKIyBBMy4gQ29tcHV0ZSBJTE9HLgojICAgICBJTE9HIGlzIHRoZSBsb2cgYmFzZSAxMCBvZiB0aGUgaW5wdXQgdmFsdWUuICBJdCBpcyBhcHByb3gtCiMgICAgIGltYXRlZCBieSBhZGRpbmcgZSArIDAuZiB3aGVuIHRoZSBvcmlnaW5hbCB2YWx1ZSBpcyB2aWV3ZWQKIyAgICAgYXMgMl5eZSAqIDEuZiBpbiBleHRlbmRlZCBwcmVjaXNpb24uICBUaGlzIHZhbHVlIGlzIHN0b3JlZAojICAgICBpbiBkNi4KIwojIFJlZ2lzdGVyIHVzYWdlOgojCUlucHV0L091dHB1dAojCWQwOiBrLWZhY3Rvci9leHBvbmVudAojCWQyOiB4L3gKIwlkMzogeC94CiMJZDQ6IHgveAojCWQ1OiB4L3gKIwlkNjogeC9JTE9HCiMJZDc6IGstZmFjdG9yL1VuY2hhbmdlZAojCWEwOiBwdHIgZm9yIG9yaWdpbmFsIG9wZXJhbmQvZmluYWwgcmVzdWx0CiMJYTE6IHgveAojCWEyOiB4L3gKIwlmcDA6IHgvZmxvYXQoSUxPRykKIwlmcDE6IHgveAojCWZwMjogeC94CiMJRl9TQ1IxOngveAojCUZfU0NSMjpBYnMoWCkvQWJzKFgpIHdpdGggJDNmZmYgZXhwb25lbnQKIwlMX1NDUjE6eC94CiMJTF9TQ1IyOmZpcnN0IHdvcmQgb2YgWCBwYWNrZWQvVW5jaGFuZ2VkCgoJdHN0LmIJCUJJTkRFQ19GTEcoJWE2KQkjIGNoZWNrIGZvciBkZW5vcm0KCWJlcS5iCQlBM19jb250CQkjIGlmIGNsciwgY29udGludWUgd2l0aCBub3JtCgltb3YubAkJJi00OTMzLCVkNgkjIGZvcmNlIElMT0cgPSAtNDkzMwoJYnJhLmIJCUE0X3N0cgpBM19jb250OgoJbW92LncJCUZQX1NDUjEoJWE2KSwlZDAJIyBtb3ZlIGV4cCB0byBkMAoJbW92LncJCSYweDNmZmYsRlBfU0NSMSglYTYpCSMgcmVwbGFjZSBleHBvbmVudCB3aXRoIDB4M2ZmZgoJZm1vdi54CQlGUF9TQ1IxKCVhNiksJWZwMAkjIG5vdyBmcDAgaGFzIDEuZgoJc3ViLncJCSYweDNmZmYsJWQwCSMgc3RyaXAgb2ZmIGJpYXMKCWZhZGQudwkJJWQwLCVmcDAJIyBhZGQgaW4gZXhwCglmc3ViLnMJCUZPTkUoJXBjKSwlZnAwCSMgc3VidHJhY3Qgb2ZmIDEuMAoJZmJnZS53CQlwb3NfcmVzCQkjIGlmIHBvcywgYnJhbmNoCglmbXVsLngJCVBMT0cyVVAxKCVwYyksJWZwMAkjIGlmIG5lZywgbXVsIGJ5IExPRzJVUDEKCWZtb3YubAkJJWZwMCwlZDYJIyBwdXQgSUxPRyBpbiBkNiBhcyBhIGx3b3JkCglicmEuYgkJQTRfc3RyCQkjIGdvIG1vdmUgb3V0IElMT0cKcG9zX3JlczoKCWZtdWwueAkJUExPRzIoJXBjKSwlZnAwCSMgaWYgcG9zLCBtdWwgYnkgTE9HMgoJZm1vdi5sCQklZnAwLCVkNgkjIHB1dCBJTE9HIGluIGQ2IGFzIGEgbHdvcmQKCgojIEE0LiBDbHIgSU5FWCBiaXQuCiMgICAgIFRoZSBvcGVyYXRpb24gaW4gQTMgYWJvdmUgbWF5IGhhdmUgc2V0IElORVgyLgoKQTRfc3RyOgoJZm1vdi5sCQkmMCwlZnBzcgkjIHplcm8gYWxsIG9mIGZwc3IgLSBub3RoaW5nIG5lZWRlZAoKCiMgQTUuIFNldCBJQ1RSID0gMDsKIyAgICAgSUNUUiBpcyBhIGZsYWcgdXNlZCBpbiBBMTMuICBJdCBtdXN0IGJlIHNldCBiZWZvcmUgdGhlCiMgICAgIGxvb3AgZW50cnkgQTYuIFRoZSBsb3dlciB3b3JkIG9mIGQ1IGlzIHVzZWQgZm9yIElDVFIuCgoJY2xyLncJCSVkNQkJIyBjbGVhciBJQ1RSCgojIEE2LiBDYWxjdWxhdGUgTEVOLgojICAgICBMRU4gaXMgdGhlIG51bWJlciBvZiBkaWdpdHMgdG8gYmUgZGlzcGxheWVkLiAgVGhlIGstZmFjdG9yCiMgICAgIGNhbiBkaWN0YXRlIGVpdGhlciB0aGUgdG90YWwgbnVtYmVyIG9mIGRpZ2l0cywgaWYgaXQgaXMKIyAgICAgYSBwb3NpdGl2ZSBudW1iZXIsIG9yIHRoZSBudW1iZXIgb2YgZGlnaXRzIGFmdGVyIHRoZQojICAgICBvcmlnaW5hbCBkZWNpbWFsIHBvaW50IHdoaWNoIGFyZSB0byBiZSBpbmNsdWRlZCBhcwojICAgICBzaWduaWZpY2FudC4gIFNlZSB0aGUgNjg4ODIgbWFudWFsIGZvciBleGFtcGxlcy4KIyAgICAgSWYgTEVOIGlzIGNvbXB1dGVkIHRvIGJlIGdyZWF0ZXIgdGhhbiAxNywgc2V0IE9QRVJSIGluCiMgICAgIFVTRVJfRlBTUi4gIExFTiBpcyBzdG9yZWQgaW4gZDQuCiMKIyBSZWdpc3RlciB1c2FnZToKIwlJbnB1dC9PdXRwdXQKIwlkMDogZXhwb25lbnQvVW5jaGFuZ2VkCiMJZDI6IHgveC9zY3JhdGNoCiMJZDM6IHgveAojCWQ0OiBleGMgcGljdHVyZS9MRU4KIwlkNTogSUNUUi9VbmNoYW5nZWQKIwlkNjogSUxPRy9VbmNoYW5nZWQKIwlkNzogay1mYWN0b3IvVW5jaGFuZ2VkCiMJYTA6IHB0ciBmb3Igb3JpZ2luYWwgb3BlcmFuZC9maW5hbCByZXN1bHQKIwlhMTogeC94CiMJYTI6IHgveAojCWZwMDogZmxvYXQoSUxPRykvVW5jaGFuZ2VkCiMJZnAxOiB4L3gKIwlmcDI6IHgveAojCUZfU0NSMTp4L3gKIwlGX1NDUjI6QWJzKFgpIHdpdGggJDNmZmYgZXhwb25lbnQvVW5jaGFuZ2VkCiMJTF9TQ1IxOngveAojCUxfU0NSMjpmaXJzdCB3b3JkIG9mIFggcGFja2VkL1VuY2hhbmdlZAoKQTZfc3RyOgoJdHN0LmwJCSVkNwkJIyBicmFuY2ggb24gc2lnbiBvZiBrCglibGUuYgkJa19uZWcJCSMgaWYgayA8PSAwLCBMRU4gPSBJTE9HICsgMSAtIGsKCW1vdi5sCQklZDcsJWQ0CQkjIGlmIGsgPiAwLCBMRU4gPSBrCglicmEuYgkJbGVuX2NrCQkjIHNraXAgdG8gTEVOIGNoZWNrCmtfbmVnOgoJbW92LmwJCSVkNiwlZDQJCSMgZmlyc3QgbG9hZCBJTE9HIHRvIGQ0CglzdWIubAkJJWQ3LCVkNAkJIyBzdWJ0cmFjdCBvZmYgawoJYWRkcS5sCQkmMSwlZDQJCSMgYWRkIGluIHRoZSAxCmxlbl9jazoKCXRzdC5sCQklZDQJCSMgTEVOIGNoZWNrOiBicmFuY2ggb24gc2lnbiBvZiBMRU4KCWJsZS5iCQlMRU5fbmcJCSMgaWYgbmVnLCBzZXQgTEVOID0gMQoJY21wLmwJCSVkNCwmMTcJCSMgdGVzdCBpZiBMRU4gPiAxNwoJYmxlLmIJCUE3X3N0cgkJIyBpZiBub3QsIGZvcmdldCBpdAoJbW92LmwJCSYxNywlZDQJCSMgc2V0IG1heCBMRU4gPSAxNwoJdHN0LmwJCSVkNwkJIyBpZiBuZWdhdGl2ZSwgbmV2ZXIgc2V0IE9QRVJSCglibGUuYgkJQTdfc3RyCQkjIGlmIHBvc2l0aXZlLCBjb250aW51ZQoJb3IubAkJJm9wYW9wX21hc2ssVVNFUl9GUFNSKCVhNikJIyBzZXQgT1BFUlIgJiBBSU9QIGluIFVTRVJfRlBTUgoJYnJhLmIJCUE3X3N0cgkJIyBmaW5pc2hlZCBoZXJlCkxFTl9uZzoKCW1vdi5sCQkmMSwlZDQJCSMgbWluIExFTiBpcyAxCgoKIyBBNy4gQ2FsY3VsYXRlIFNDQUxFLgojICAgICBTQ0FMRSBpcyBlcXVhbCB0byAxMF5JU0NBTEUsIHdoZXJlIElTQ0FMRSBpcyB0aGUgbnVtYmVyCiMgICAgIG9mIGRlY2ltYWwgcGxhY2VzIG5lZWRlZCB0byBpbnN1cmUgTEVOIGludGVnZXIgZGlnaXRzCiMgICAgIGluIHRoZSBvdXRwdXQgYmVmb3JlIGNvbnZlcnNpb24gdG8gYmNkLiBMQU1CREEgaXMgdGhlIHNpZ24KIyAgICAgb2YgSVNDQUxFLCB1c2VkIGluIEE5LiAgRnAxIGNvbnRhaW5zIDEwXl4oYWJzKElTQ0FMRSkpIHVzaW5nCiMgICAgIHRoZSByb3VuZGluZyBtb2RlIGFzIGdpdmVuIGluIHRoZSBmb2xsb3dpbmcgdGFibGUgKHNlZQojICAgICBDb29uZW4sIHAuIDcuMjMgYXMgcmVmLjsgaG93ZXZlciwgdGhlIFNDQUxFIHZhcmlhYmxlIGlzCiMgICAgIG9mIG9wcG9zaXRlIHNpZ24gaW4gYmluZGVjLnNhIGZyb20gQ29vbmVuKS4KIwojCUluaXRpYWwJCQkJCVVTRQojCUZQQ1JbNjo1XQlMQU1CREEJU0lHTihYKQkJRlBDUls2OjVdCiMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCSBSTgkwMAkgICAwCSAgIDAJCTAwLzAJUk4KIwkgUk4JMDAJICAgMAkgICAxCQkwMC8wCVJOCiMJIFJOCTAwCSAgIDEJICAgMAkJMDAvMAlSTgojCSBSTgkwMAkgICAxCSAgIDEJCTAwLzAJUk4KIwkgUloJMDEJICAgMAkgICAwCQkxMS8zCVJQCiMJIFJaCTAxCSAgIDAJICAgMQkJMTEvMwlSUAojCSBSWgkwMQkgICAxCSAgIDAJCTEwLzIJUk0KIwkgUloJMDEJICAgMQkgICAxCQkxMC8yCVJNCiMJIFJNCTEwCSAgIDAJICAgMAkJMTEvMwlSUAojCSBSTQkxMAkgICAwCSAgIDEJCTEwLzIJUk0KIwkgUk0JMTAJICAgMQkgICAwCQkxMC8yCVJNCiMJIFJNCTEwCSAgIDEJICAgMQkJMTEvMwlSUAojCSBSUAkxMQkgICAwCSAgIDAJCTEwLzIJUk0KIwkgUlAJMTEJICAgMAkgICAxCQkxMS8zCVJQCiMJIFJQCTExCSAgIDEJICAgMAkJMTEvMwlSUAojCSBSUAkxMQkgICAxCSAgIDEJCTEwLzIJUk0KIwojIFJlZ2lzdGVyIHVzYWdlOgojCUlucHV0L091dHB1dAojCWQwOiBleHBvbmVudC9zY3JhdGNoIC0gZmluYWwgaXMgMAojCWQyOiB4LzAgb3IgMjQgZm9yIEE5CiMJZDM6IHgvc2NyYXRjaCAtIG9mZnNldCBwdHIgaW50byBQVEVOUk0gYXJyYXkKIwlkNDogTEVOL1VuY2hhbmdlZAojCWQ1OiAwL0lDVFI6TEFNQkRBCiMJZDY6IElMT0cvSUxPRyBvciBrIGlmICgoazw9MCkmKElMT0c8aykpCiMJZDc6IGstZmFjdG9yL1VuY2hhbmdlZAojCWEwOiBwdHIgZm9yIG9yaWdpbmFsIG9wZXJhbmQvZmluYWwgcmVzdWx0CiMJYTE6IHgvcHRyIHRvIFBURU5STSBhcnJheQojCWEyOiB4L3gKIwlmcDA6IGZsb2F0KElMT0cpL1VuY2hhbmdlZAojCWZwMTogeC8xMF5JU0NBTEUKIwlmcDI6IHgveAojCUZfU0NSMTp4L3gKIwlGX1NDUjI6QWJzKFgpIHdpdGggJDNmZmYgZXhwb25lbnQvVW5jaGFuZ2VkCiMJTF9TQ1IxOngveAojCUxfU0NSMjpmaXJzdCB3b3JkIG9mIFggcGFja2VkL1VuY2hhbmdlZAoKQTdfc3RyOgoJdHN0LmwJCSVkNwkJIyB0ZXN0IHNpZ24gb2YgawoJYmd0LmIJCWtfcG9zCQkjIGlmIHBvcyBhbmQgPiAwLCBza2lwIHRoaXMKCWNtcC5sCQklZDcsJWQ2CQkjIHRlc3QgayAtIElMT0cKCWJsdC5iCQlrX3BvcwkJIyBpZiBJTE9HID49IGssIHNraXAgdGhpcwoJbW92LmwJCSVkNywlZDYJCSMgaWYgKChrPDApICYgKElMT0cgPCBrKSkgSUxPRyA9IGsKa19wb3M6Cgltb3YubAkJJWQ2LCVkMAkJIyBjYWxjIElMT0cgKyAxIC0gTEVOIGluIGQwCglhZGRxLmwJCSYxLCVkMAkJIyBhZGQgdGhlIDEKCXN1Yi5sCQklZDQsJWQwCQkjIHN1YiBvZmYgTEVOCglzd2FwCQklZDUJCSMgdXNlIHVwcGVyIHdvcmQgb2YgZDUgZm9yIExBTUJEQQoJY2xyLncJCSVkNQkJIyBzZXQgaXQgemVybyBpbml0aWFsbHkKCWNsci53CQklZDIJCSMgc2V0IHVwIGQyIGZvciB2ZXJ5IHNtYWxsIGNhc2UKCXRzdC5sCQklZDAJCSMgdGVzdCBzaWduIG9mIElTQ0FMRQoJYmdlLmIJCWlzY2FsZQkJIyBpZiBwb3MsIHNraXAgbmV4dCBpbnN0CglhZGRxLncJCSYxLCVkNQkJIyBpZiBuZWcsIHNldCBMQU1CREEgdHJ1ZQoJY21wLmwJCSVkMCwmMHhmZmZmZWNkNAkjIHRlc3QgaXNjYWxlIDw9IC00OTA4CgliZ3QuYgkJbm9faW5mCQkjIGlmIGZhbHNlLCBza2lwIHJlc3QKCWFkZC5sCQkmMjQsJWQwCQkjIGFkZCBpbiAyNCB0byBpc2NhbGUKCW1vdi5sCQkmMjQsJWQyCQkjIHB1dCAyNCBpbiBkMiBmb3IgQTkKbm9faW5mOgoJbmVnLmwJCSVkMAkJIyBhbmQgdGFrZSBhYnMgb2YgSVNDQUxFCmlzY2FsZToKCWZtb3YucwkJRk9ORSglcGMpLCVmcDEJIyBpbml0IGZwMSB0byAxCgliZmV4dHUJCVVTRVJfRlBDUiglYTYpeyYyNjomMn0sJWQxCSMgZ2V0IGluaXRpYWwgcm1vZGUgYml0cwoJbHNsLncJCSYxLCVkMQkJIyBwdXQgdGhlbSBpbiBiaXRzIDI6MQoJYWRkLncJCSVkNSwlZDEJCSMgYWRkIGluIExBTUJEQQoJbHNsLncJCSYxLCVkMQkJIyBwdXQgdGhlbSBpbiBiaXRzIDM6MQoJdHN0LmwJCUxfU0NSMiglYTYpCSMgdGVzdCBzaWduIG9mIG9yaWdpbmFsIHgKCWJnZS5iCQl4X3BvcwkJIyBpZiBwb3MsIGRvbid0IHNldCBiaXQgMAoJYWRkcS5sCQkmMSwlZDEJCSMgaWYgbmVnLCBzZXQgYml0IDAKeF9wb3M6CglsZWEubAkJUkJEVEJMKCVwYyksJWEyCSMgbG9hZCByYmR0YmwgYmFzZQoJbW92LmIJCSglYTIsJWQxKSwlZDMJIyBsb2FkIGQzIHdpdGggbmV3IHJtb2RlCglsc2wubAkJJjQsJWQzCQkjIHB1dCBiaXRzIGluIHByb3BlciBwb3NpdGlvbgoJZm1vdi5sCQklZDMsJWZwY3IJIyBsb2FkIGJpdHMgaW50byBmcHUKCWxzci5sCQkmNCwlZDMJCSMgcHV0IGJpdHMgaW4gcHJvcGVyIHBvc2l0aW9uCgl0c3QuYgkJJWQzCQkjIGRlY29kZSBuZXcgcm1vZGUgZm9yIHB0ZW4gdGFibGUKCWJuZS5iCQlub3Rfcm4JCSMgaWYgemVybywgaXQgaXMgUk4KCWxlYS5sCQlQVEVOUk4oJXBjKSwlYTEJIyBsb2FkIGExIHdpdGggUk4gdGFibGUgYmFzZQoJYnJhLmIJCXJtb2RlCQkjIGV4aXQgZGVjb2RlCm5vdF9ybjoKCWxzci5iCQkmMSwlZDMJCSMgZ2V0IGxzYiBpbiBjYXJyeQoJYmNjLmIJCW5vdF9ycDIJCSMgaWYgY2FycnkgY2xlYXIsIGl0IGlzIFJNCglsZWEubAkJUFRFTlJQKCVwYyksJWExCSMgbG9hZCBhMSB3aXRoIFJQIHRhYmxlIGJhc2UKCWJyYS5iCQlybW9kZQkJIyBleGl0IGRlY29kZQpub3RfcnAyOgoJbGVhLmwJCVBURU5STSglcGMpLCVhMQkjIGxvYWQgYTEgd2l0aCBSTSB0YWJsZSBiYXNlCnJtb2RlOgoJY2xyLmwJCSVkMwkJIyBjbHIgdGFibGUgaW5kZXgKZV9sb29wMjoKCWxzci5sCQkmMSwlZDAJCSMgc2hpZnQgbmV4dCBiaXQgaW50byBjYXJyeQoJYmNjLmIJCWVfbmV4dDIJCSMgaWYgemVybywgc2tpcCB0aGUgbXVsCglmbXVsLngJCSglYTEsJWQzKSwlZnAxCSMgbXVsIGJ5IDEwKiooZDNfYml0X25vKQplX25leHQyOgoJYWRkLmwJCSYxMiwlZDMJCSMgaW5jIGQzIHRvIG5leHQgcHdydGVuIHRhYmxlIGVudHJ5Cgl0c3QubAkJJWQwCQkjIHRlc3QgaWYgSVNDQUxFIGlzIHplcm8KCWJuZS5iCQllX2xvb3AyCQkjIGlmIG5vdCwgbG9vcAoKIyBBOC4gQ2xyIElORVg7IEZvcmNlIFJaLgojICAgICBUaGUgb3BlcmF0aW9uIGluIEEzIGFib3ZlIG1heSBoYXZlIHNldCBJTkVYMi4KIyAgICAgUlogbW9kZSBpcyBmb3JjZWQgZm9yIHRoZSBzY2FsaW5nIG9wZXJhdGlvbiB0byBpbnN1cmUKIyAgICAgb25seSBvbmUgcm91bmRpbmcgZXJyb3IuICBUaGUgZ3JzIGJpdHMgYXJlIGNvbGxlY3RlZCBpbgojICAgICB0aGUgSU5FWCBmbGFnIGZvciB1c2UgaW4gQTEwLgojCiMgUmVnaXN0ZXIgdXNhZ2U6CiMJSW5wdXQvT3V0cHV0CgoJZm1vdi5sCQkmMCwlZnBzcgkjIGNsciBJTkVYCglmbW92LmwJCSZyel9tb2RlKjB4MTAsJWZwY3IJIyBzZXQgUlogcm91bmRpbmcgbW9kZQoKIyBBOS4gU2NhbGUgWCAtPiBZLgojICAgICBUaGUgbWFudGlzc2EgaXMgc2NhbGVkIHRvIHRoZSBkZXNpcmVkIG51bWJlciBvZiBzaWduaWZpY2FudAojICAgICBkaWdpdHMuICBUaGUgZXhjZXNzIGRpZ2l0cyBhcmUgY29sbGVjdGVkIGluIElORVgyLiBJZiBtdWwsCiMgICAgIENoZWNrIGQyIGZvciBleGNlc3MgMTAgZXhwb25lbnRpYWwgdmFsdWUuICBJZiBub3QgemVybywKIyAgICAgdGhlIGlzY2FsZSB2YWx1ZSB3b3VsZCBoYXZlIGNhdXNlZCB0aGUgcHdydGVuIGNhbGN1bGF0aW9uCiMgICAgIHRvIG92ZXJmbG93LiAgT25seSBhIG5lZ2F0aXZlIGlzY2FsZSBjYW4gY2F1c2UgdGhpcywgc28KIyAgICAgbXVsdGlwbHkgYnkgMTBeKGQyKSwgd2hpY2ggaXMgbm93IG9ubHkgYWxsb3dlZCB0byBiZSAyNCwKIyAgICAgd2l0aCBhIG11bHRpcGx5IGJ5IDEwXjggYW5kIDEwXjE2LCB3aGljaCBpcyBleGFjdCBzaW5jZQojICAgICAxMF4yNCBpcyBleGFjdC4gIElmIHRoZSBpbnB1dCB3YXMgZGVub3JtYWxpemVkLCB3ZSBtdXN0CiMgICAgIGNyZWF0ZSBhIGJ1c3kgc3RhY2sgZnJhbWUgd2l0aCB0aGUgbXVsIGNvbW1hbmQgYW5kIHRoZQojICAgICB0d28gb3BlcmFuZHMsIGFuZCBhbGxvdyB0aGUgZnB1IHRvIGNvbXBsZXRlIHRoZSBtdWx0aXBseS4KIwojIFJlZ2lzdGVyIHVzYWdlOgojCUlucHV0L091dHB1dAojCWQwOiBGUENSIHdpdGggUlogbW9kZS9VbmNoYW5nZWQKIwlkMjogMCBvciAyNC91bmNoYW5nZWQKIwlkMzogeC94CiMJZDQ6IExFTi9VbmNoYW5nZWQKIwlkNTogSUNUUjpMQU1CREEKIwlkNjogSUxPRy9VbmNoYW5nZWQKIwlkNzogay1mYWN0b3IvVW5jaGFuZ2VkCiMJYTA6IHB0ciBmb3Igb3JpZ2luYWwgb3BlcmFuZC9maW5hbCByZXN1bHQKIwlhMTogcHRyIHRvIFBURU5STSBhcnJheS9VbmNoYW5nZWQKIwlhMjogeC94CiMJZnAwOiBmbG9hdChJTE9HKS9YIGFkanVzdGVkIGZvciBTQ0FMRSAoWSkKIwlmcDE6IDEwXklTQ0FMRS9VbmNoYW5nZWQKIwlmcDI6IHgveAojCUZfU0NSMTp4L3gKIwlGX1NDUjI6QWJzKFgpIHdpdGggJDNmZmYgZXhwb25lbnQvVW5jaGFuZ2VkCiMJTF9TQ1IxOngveAojCUxfU0NSMjpmaXJzdCB3b3JkIG9mIFggcGFja2VkL1VuY2hhbmdlZAoKQTlfc3RyOgoJZm1vdi54CQkoJWEwKSwlZnAwCSMgbG9hZCBYIGZyb20gbWVtb3J5CglmYWJzLngJCSVmcDAJCSMgdXNlIGFicyhYKQoJdHN0LncJCSVkNQkJIyBMQU1CREEgaXMgaW4gbG93ZXIgd29yZCBvZiBkNQoJYm5lLmIJCXNjX211bAkJIyBpZiBuZWcgKExBTUJEQSA9IDEpLCBzY2FsZSBieSBtdWwKCWZkaXYueAkJJWZwMSwlZnAwCSMgY2FsY3VsYXRlIFggLyBTQ0FMRSAtPiBZIHRvIGZwMAoJYnJhLncJCUExMF9zdAkJIyBicmFuY2ggdG8gQTEwCgpzY19tdWw6Cgl0c3QuYgkJQklOREVDX0ZMRyglYTYpCSMgY2hlY2sgZm9yIGRlbm9ybQoJYmVxLncJCUE5X25vcm0JCSMgaWYgbm9ybSwgY29udGludWUgd2l0aCBtdWwKCiMgZm9yIERFTk9STSwgd2UgbXVzdCBjYWxjdWxhdGU6CiMJZnAwID0gaW5wdXRfb3AgKiAxMF5JU0NBTEUgKiAxMF4yNAojIHNpbmNlIHRoZSBpbnB1dCBvcGVyYW5kIGlzIGEgREVOT1JNLCB3ZSBjYW4ndCBtdWx0aXBseSBpdCBkaXJlY3RseS4KIyBzbywgd2UgZG8gdGhlIG11bHRpcGxpY2F0aW9uIG9mIHRoZSBleHBvbmVudHMgYW5kIG1hbnRpc3NhcyBzZXBhcmF0ZWx5LgojIGluIHRoaXMgd2F5LCB3ZSBhdm9pZCB1bmRlcmZsb3cgb24gaW50ZXJtZWRpYXRlIHN0YWdlcyBvZiB0aGUKIyBtdWx0aXBsaWNhdGlvbiBhbmQgZ3VhcmFudGVlIGEgcmVzdWx0IHdpdGhvdXQgZXhjZXB0aW9uLgoJZm1vdm0ueAkJJjB4MiwtKCVzcCkJIyBzYXZlIDEwXklTQ0FMRSB0byBzdGFjawoKCW1vdi53CQkoJXNwKSwlZDMJIyBncmFiIGV4cG9uZW50CglhbmRpLncJCSYweDdmZmYsJWQzCSMgY2xlYXIgc2lnbgoJb3JpLncJCSYweDgwMDAsKCVhMCkJIyBtYWtlIERFTk9STSBleHAgbmVnYXRpdmUKCWFkZC53CQkoJWEwKSwlZDMJIyBhZGQgREVOT1JNIGV4cCB0byAxMF5JU0NBTEUgZXhwCglzdWJpLncJCSYweDNmZmYsJWQzCSMgc3VidHJhY3QgQklBUwoJYWRkLncJCTM2KCVhMSksJWQzCglzdWJpLncJCSYweDNmZmYsJWQzCSMgc3VidHJhY3QgQklBUwoJYWRkLncJCTQ4KCVhMSksJWQzCglzdWJpLncJCSYweDNmZmYsJWQzCSMgc3VidHJhY3QgQklBUwoKCWJtaS53CQlzY19tdWxfZXJyCSMgaXMgcmVzdWx0IGlzIERFTk9STSwgcHVudCEhIQoKCWFuZGkudwkJJjB4ODAwMCwoJXNwKQkjIGtlZXAgc2lnbgoJb3IudwkJJWQzLCglc3ApCSMgaW5zZXJ0IG5ldyBleHBvbmVudAoJYW5kaS53CQkmMHg3ZmZmLCglYTApCSMgY2xlYXIgc2lnbiBiaXQgb24gREVOT1JNIGFnYWluCgltb3YubAkJMHg4KCVhMCksLSglc3ApICMgcHV0IGlucHV0IG9wIG1hbnRpc3NhIG9uIHN0awoJbW92LmwJCTB4NCglYTApLC0oJXNwKQoJbW92LmwJCSYweDNmZmYwMDAwLC0oJXNwKSAjIGZvcmNlIGV4cCB0byB6ZXJvCglmbW92bS54CQkoJXNwKSssJjB4ODAJIyBsb2FkIG5vcm1hbGl6ZWQgREVOT1JNIGludG8gZnAwCglmbXVsLngJCSglc3ApKywlZnAwCgojCWZtdWwueAkzNiglYTEpLCVmcDAJIyBtdWx0aXBseSBmcDAgYnkgMTBeOAojCWZtdWwueAk0OCglYTEpLCVmcDAJIyBtdWx0aXBseSBmcDAgYnkgMTBeMTYKCW1vdi5sCQkzNis4KCVhMSksLSglc3ApICMgZ2V0IDEwXjggbWFudGlzc2EKCW1vdi5sCQkzNis0KCVhMSksLSglc3ApCgltb3YubAkJJjB4M2ZmZjAwMDAsLSglc3ApICMgZm9yY2UgZXhwIHRvIHplcm8KCW1vdi5sCQk0OCs4KCVhMSksLSglc3ApICMgZ2V0IDEwXjE2IG1hbnRpc3NhCgltb3YubAkJNDgrNCglYTEpLC0oJXNwKQoJbW92LmwJCSYweDNmZmYwMDAwLC0oJXNwKSMgZm9yY2UgZXhwIHRvIHplcm8KCWZtdWwueAkJKCVzcCkrLCVmcDAJIyBtdWx0aXBseSBmcDAgYnkgMTBeOAoJZm11bC54CQkoJXNwKSssJWZwMAkjIG11bHRpcGx5IGZwMCBieSAxMF4xNgoJYnJhLmIJCUExMF9zdAoKc2NfbXVsX2VycjoKCWJyYS5iCQlzY19tdWxfZXJyCgpBOV9ub3JtOgoJdHN0LncJCSVkMgkJIyB0ZXN0IGZvciBzbWFsbCBleHAgY2FzZQoJYmVxLmIJCUE5X2NvbgkJIyBpZiB6ZXJvLCBjb250aW51ZSBhcyBub3JtYWwKCWZtdWwueAkJMzYoJWExKSwlZnAwCSMgbXVsdGlwbHkgZnAwIGJ5IDEwXjgKCWZtdWwueAkJNDgoJWExKSwlZnAwCSMgbXVsdGlwbHkgZnAwIGJ5IDEwXjE2CkE5X2NvbjoKCWZtdWwueAkJJWZwMSwlZnAwCSMgY2FsY3VsYXRlIFggKiBTQ0FMRSAtPiBZIHRvIGZwMAoKIyBBMTAuIE9yIGluIElORVguCiMgICAgICBJZiBJTkVYIGlzIHNldCwgcm91bmQgZXJyb3Igb2NjdXJyZWQuICBUaGlzIGlzIGNvbXBlbnNhdGVkCiMgICAgICBmb3IgYnkgJ29yLWluZycgaW4gdGhlIElORVgyIGZsYWcgdG8gdGhlIGxzYiBvZiBZLgojCiMgUmVnaXN0ZXIgdXNhZ2U6CiMJSW5wdXQvT3V0cHV0CiMJZDA6IEZQQ1Igd2l0aCBSWiBtb2RlL0ZQU1Igd2l0aCBJTkVYMiBpc29sYXRlZAojCWQyOiB4L3gKIwlkMzogeC94CiMJZDQ6IExFTi9VbmNoYW5nZWQKIwlkNTogSUNUUjpMQU1CREEKIwlkNjogSUxPRy9VbmNoYW5nZWQKIwlkNzogay1mYWN0b3IvVW5jaGFuZ2VkCiMJYTA6IHB0ciBmb3Igb3JpZ2luYWwgb3BlcmFuZC9maW5hbCByZXN1bHQKIwlhMTogcHRyIHRvIFBURU54eCBhcnJheS9VbmNoYW5nZWQKIwlhMjogeC9wdHIgdG8gRlBfU0NSMShhNikKIwlmcDA6IFkvWSB3aXRoIGxzYiBhZGp1c3RlZAojCWZwMTogMTBeSVNDQUxFL1VuY2hhbmdlZAojCWZwMjogeC94CgpBMTBfc3Q6CglmbW92LmwJCSVmcHNyLCVkMAkjIGdldCBGUFNSCglmbW92LngJCSVmcDAsRlBfU0NSMSglYTYpCSMgbW92ZSBZIHRvIG1lbW9yeQoJbGVhLmwJCUZQX1NDUjEoJWE2KSwlYTIJIyBsb2FkIGEyIHdpdGggcHRyIHRvIEZQX1NDUjEKCWJ0c3QJCSY5LCVkMAkJIyBjaGVjayBpZiBJTkVYMiBzZXQKCWJlcS5iCQlBMTFfc3QJCSMgaWYgY2xlYXIsIHNraXAgcmVzdAoJb3IubAkJJjEsOCglYTIpCSMgb3IgaW4gMSB0byBsc2Igb2YgbWFudGlzc2EKCWZtb3YueAkJRlBfU0NSMSglYTYpLCVmcDAJIyB3cml0ZSBhZGp1c3RlZCBZIGJhY2sgdG8gZnB1CgoKIyBBMTEuIFJlc3RvcmUgb3JpZ2luYWwgRlBDUjsgc2V0IHNpemUgZXh0LgojICAgICAgUGVyZm9ybSBGSU5UIG9wZXJhdGlvbiBpbiB0aGUgdXNlcidzIHJvdW5kaW5nIG1vZGUuICBLZWVwCiMgICAgICB0aGUgc2l6ZSB0byBleHRlbmRlZC4gIFRoZSBzaW50ZG8gZW50cnkgcG9pbnQgaW4gdGhlIHNpbnQKIyAgICAgIHJvdXRpbmUgZXhwZWN0cyB0aGUgRlBDUiB2YWx1ZSB0byBiZSBpbiBVU0VSX0ZQQ1IgZm9yCiMgICAgICBtb2RlIGFuZCBwcmVjaXNpb24uICBUaGUgb3JpZ2luYWwgRlBDUiBpcyBzYXZlZCBpbiBMX1NDUjEuCgpBMTFfc3Q6Cgltb3YubAkJVVNFUl9GUENSKCVhNiksTF9TQ1IxKCVhNikJIyBzYXZlIGl0IGZvciBsYXRlcgoJYW5kLmwJCSYweDAwMDAwMDMwLFVTRVJfRlBDUiglYTYpCSMgc2V0IHNpemUgdG8gZXh0LAojCQkJCQk7YmxvY2sgZXhjZXB0aW9ucwoKCiMgQTEyLiBDYWxjdWxhdGUgWUlOVCA9IEZJTlQoWSkgYWNjb3JkaW5nIHRvIHVzZXIncyByb3VuZGluZyBtb2RlLgojICAgICAgVGhlIEZQU1Agcm91dGluZSBzaW50ZDAgaXMgdXNlZC4gIFRoZSBvdXRwdXQgaXMgaW4gZnAwLgojCiMgUmVnaXN0ZXIgdXNhZ2U6CiMJSW5wdXQvT3V0cHV0CiMJZDA6IEZQU1Igd2l0aCBBSU5FWCBjbGVhcmVkL0ZQQ1Igd2l0aCBzaXplIHNldCB0byBleHQKIwlkMjogeC94L3NjcmF0Y2gKIwlkMzogeC94CiMJZDQ6IExFTi9VbmNoYW5nZWQKIwlkNTogSUNUUjpMQU1CREEvVW5jaGFuZ2VkCiMJZDY6IElMT0cvVW5jaGFuZ2VkCiMJZDc6IGstZmFjdG9yL1VuY2hhbmdlZAojCWEwOiBwdHIgZm9yIG9yaWdpbmFsIG9wZXJhbmQvc3JjIHB0ciBmb3Igc2ludGRvCiMJYTE6IHB0ciB0byBQVEVOeHggYXJyYXkvVW5jaGFuZ2VkCiMJYTI6IHB0ciB0byBGUF9TQ1IxKGE2KS9VbmNoYW5nZWQKIwlhNjogdGVtcCBwb2ludGVyIHRvIEZQX1NDUjEoYTYpIC0gb3JpZyB2YWx1ZSBzYXZlZCBhbmQgcmVzdG9yZWQKIwlmcDA6IFkvWUlOVAojCWZwMTogMTBeSVNDQUxFL1VuY2hhbmdlZAojCWZwMjogeC94CiMJRl9TQ1IxOngveAojCUZfU0NSMjpZIGFkanVzdGVkIGZvciBpbmV4L1kgd2l0aCBvcmlnaW5hbCBleHBvbmVudAojCUxfU0NSMTp4L29yaWdpbmFsIFVTRVJfRlBDUgojCUxfU0NSMjpmaXJzdCB3b3JkIG9mIFggcGFja2VkL1VuY2hhbmdlZAoKQTEyX3N0OgoJbW92bS5sCSYweGMwYzAsLSglc3ApCSMgc2F2ZSByZWdzIHVzZWQgYnkgc2ludGQwCSB7JWQwLSVkMS8lYTAtJWExfQoJbW92LmwJTF9TQ1IxKCVhNiksLSglc3ApCgltb3YubAlMX1NDUjIoJWE2KSwtKCVzcCkKCglsZWEubAkJRlBfU0NSMSglYTYpLCVhMAkjIGEwIGlzIHB0ciB0byBGUF9TQ1IxKGE2KQoJZm1vdi54CQklZnAwLCglYTApCSMgbW92ZSBZIHRvIG1lbW9yeSBhdCBGUF9TQ1IxKGE2KQoJdHN0LmwJCUxfU0NSMiglYTYpCSMgdGVzdCBzaWduIG9mIG9yaWdpbmFsIG9wZXJhbmQKCWJnZS5iCQlkb19maW50MTIJCSMgaWYgcG9zLCB1c2UgWQoJb3IubAkJJjB4ODAwMDAwMDAsKCVhMCkJIyBpZiBuZWcsIHVzZSAtWQpkb19maW50MTI6Cgltb3YubAlVU0VSX0ZQU1IoJWE2KSwtKCVzcCkKIwlic3IJc2ludGRvCQkjIHNpbnQgcm91dGluZSByZXR1cm5zIGludCBpbiBmcDAKCglmbW92LmwJVVNFUl9GUENSKCVhNiksJWZwY3IKCWZtb3YubAkmMHgwLCVmcHNyCQkJIyBjbGVhciB0aGUgQUVYQyBiaXRzISEhCiMjCW1vdi5sCQlVU0VSX0ZQQ1IoJWE2KSwlZDAJIyBleHQgcHJlYy9rZWVwIHJuZCBtb2RlCiMjCWFuZGkubAkJJjB4MDAwMDAwMzAsJWQwCiMjCWZtb3YubAkJJWQwLCVmcGNyCglmaW50LngJCUZQX1NDUjEoJWE2KSwlZnAwCSMgZG8gZmludCgpCglmbW92LmwJJWZwc3IsJWQwCglvci53CSVkMCxGUFNSX0VYQ0VQVCglYTYpCiMjCWZtb3YubAkJJjB4MCwlZnBjcgojIwlmbW92LmwJCSVmcHNyLCVkMAkJIyBkb24ndCBrZWVwIGNjb2RlcwojIwlvci53CQklZDAsRlBTUl9FWENFUFQoJWE2KQoKCW1vdi5iCSglc3ApLFVTRVJfRlBTUiglYTYpCglhZGQubAkmNCwlc3AKCgltb3YubAkoJXNwKSssTF9TQ1IyKCVhNikKCW1vdi5sCSglc3ApKyxMX1NDUjEoJWE2KQoJbW92bS5sCSglc3ApKywmMHgzMDMJIyByZXN0b3JlIHJlZ3MgdXNlZCBieSBzaW50CSB7JWQwLSVkMS8lYTAtJWExfQoKCW1vdi5sCUxfU0NSMiglYTYpLEZQX1NDUjEoJWE2KQkjIHJlc3RvcmUgb3JpZ2luYWwgZXhwb25lbnQKCW1vdi5sCUxfU0NSMSglYTYpLFVTRVJfRlBDUiglYTYpCSMgcmVzdG9yZSB1c2VyJ3MgRlBDUgoKIyBBMTMuIENoZWNrIGZvciBMRU4gZGlnaXRzLgojICAgICAgSWYgdGhlIGludCBvcGVyYXRpb24gcmVzdWx0cyBpbiBtb3JlIHRoYW4gTEVOIGRpZ2l0cywKIyAgICAgIG9yIGxlc3MgdGhhbiBMRU4gLTEgZGlnaXRzLCBhZGp1c3QgSUxPRyBhbmQgcmVwZWF0IGZyb20KIyAgICAgIEE2LiAgVGhpcyB0ZXN0IG9jY3VycyBvbmx5IG9uIHRoZSBmaXJzdCBwYXNzLiAgSWYgdGhlCiMgICAgICByZXN1bHQgaXMgZXhhY3RseSAxMF5MRU4sIGRlY3JlbWVudCBJTE9HIGFuZCBkaXZpZGUKIyAgICAgIHRoZSBtYW50aXNzYSBieSAxMC4gIFRoZSBjYWxjdWxhdGlvbiBvZiAxMF5MRU4gY2Fubm90CiMgICAgICBiZSBpbmV4YWN0LCBzaW5jZSBhbGwgcG93ZXJzIG9mIHRlbiB1cHRvIDEwXjI3IGFyZSBleGFjdAojICAgICAgaW4gZXh0ZW5kZWQgcHJlY2lzaW9uLCBzbyB0aGUgdXNlIG9mIGEgcHJldmlvdXMgcG93ZXItb2YtdGVuCiMgICAgICB0YWJsZSB3aWxsIGludHJvZHVjZSBubyBlcnJvci4KIwojCiMgUmVnaXN0ZXIgdXNhZ2U6CiMJSW5wdXQvT3V0cHV0CiMJZDA6IEZQQ1Igd2l0aCBzaXplIHNldCB0byBleHQvc2NyYXRjaCBmaW5hbCA9IDAKIwlkMjogeC94CiMJZDM6IHgvc2NyYXRjaCBmaW5hbCA9IHgKIwlkNDogTEVOL0xFTiBhZGp1c3RlZAojCWQ1OiBJQ1RSOkxBTUJEQS9MQU1CREE6SUNUUgojCWQ2OiBJTE9HL0lMT0cgYWRqdXN0ZWQKIwlkNzogay1mYWN0b3IvVW5jaGFuZ2VkCiMJYTA6IHBvaW50ZXIgaW50byBtZW1vcnkgZm9yIHBhY2tlZCBiY2Qgc3RyaW5nIGZvcm1hdGlvbgojCWExOiBwdHIgdG8gUFRFTnh4IGFycmF5L1VuY2hhbmdlZAojCWEyOiBwdHIgdG8gRlBfU0NSMShhNikvVW5jaGFuZ2VkCiMJZnAwOiBpbnQgcG9ydGlvbiBvZiBZL2FicyhZSU5UKSBhZGp1c3RlZAojCWZwMTogMTBeSVNDQUxFL1VuY2hhbmdlZAojCWZwMjogeC8xMF5MRU4KIwlGX1NDUjE6eC94CiMJRl9TQ1IyOlkgd2l0aCBvcmlnaW5hbCBleHBvbmVudC9VbmNoYW5nZWQKIwlMX1NDUjE6b3JpZ2luYWwgVVNFUl9GUENSL1VuY2hhbmdlZAojCUxfU0NSMjpmaXJzdCB3b3JkIG9mIFggcGFja2VkL1VuY2hhbmdlZAoKQTEzX3N0OgoJc3dhcAkJJWQ1CQkjIHB1dCBJQ1RSIGluIGxvd2VyIHdvcmQgb2YgZDUKCXRzdC53CQklZDUJCSMgY2hlY2sgaWYgSUNUUiA9IDAKCWJuZQkJbm90X3pyCQkjIGlmIG5vbi16ZXJvLCBnbyB0byBzZWNvbmQgdGVzdAojCiMgQ29tcHV0ZSAxMF4oTEVOLTEpCiMKCWZtb3YucwkJRk9ORSglcGMpLCVmcDIJIyBpbml0IGZwMiB0byAxLjAKCW1vdi5sCQklZDQsJWQwCQkjIHB1dCBMRU4gaW4gZDAKCXN1YnEubAkJJjEsJWQwCQkjIGQwID0gTEVOIC0xCgljbHIubAkJJWQzCQkjIGNsciB0YWJsZSBpbmRleApsX2xvb3A6Cglsc3IubAkJJjEsJWQwCQkjIHNoaWZ0IG5leHQgYml0IGludG8gY2FycnkKCWJjYy5iCQlsX25leHQJCSMgaWYgemVybywgc2tpcCB0aGUgbXVsCglmbXVsLngJCSglYTEsJWQzKSwlZnAyCSMgbXVsIGJ5IDEwKiooZDNfYml0X25vKQpsX25leHQ6CglhZGQubAkJJjEyLCVkMwkJIyBpbmMgZDMgdG8gbmV4dCBwd3J0ZW4gdGFibGUgZW50cnkKCXRzdC5sCQklZDAJCSMgdGVzdCBpZiBMRU4gaXMgemVybwoJYm5lLmIJCWxfbG9vcAkJIyBpZiBub3QsIGxvb3AKIwojIDEwXkxFTi0xIGlzIGNvbXB1dGVkIGZvciB0aGlzIHRlc3QgYW5kIEExNC4gIElmIHRoZSBpbnB1dCB3YXMKIyBkZW5vcm1hbGl6ZWQsIGNoZWNrIG9ubHkgdGhlIGNhc2UgaW4gd2hpY2ggWUlOVCA+IDEwXkxFTi4KIwoJdHN0LmIJCUJJTkRFQ19GTEcoJWE2KQkjIGNoZWNrIGlmIGlucHV0IHdhcyBub3JtCgliZXEuYgkJQTEzX2NvbgkJIyBpZiBub3JtLCBjb250aW51ZSB3aXRoIGNoZWNraW5nCglmYWJzLngJCSVmcDAJCSMgdGFrZSBhYnMgb2YgWUlOVAoJYnJhCQl0ZXN0XzIKIwojIENvbXBhcmUgYWJzKFlJTlQpIHRvIDEwXihMRU4tMSkgYW5kIDEwXkxFTgojCkExM19jb246CglmYWJzLngJCSVmcDAJCSMgdGFrZSBhYnMgb2YgWUlOVAoJZmNtcC54CQklZnAwLCVmcDIJIyBjb21wYXJlIGFicyhZSU5UKSB3aXRoIDEwXihMRU4tMSkKCWZiZ2UudwkJdGVzdF8yCQkjIGlmIGdyZWF0ZXIsIGRvIG5leHQgdGVzdAoJc3VicS5sCQkmMSwlZDYJCSMgc3VidHJhY3QgMSBmcm9tIElMT0cKCW1vdi53CQkmMSwlZDUJCSMgc2V0IElDVFIKCWZtb3YubAkJJnJtX21vZGUqMHgxMCwlZnBjcgkjIHNldCBybW9kZSB0byBSTQoJZm11bC5zCQlGVEVOKCVwYyksJWZwMgkjIGNvbXB1dGUgMTBeTEVOCglicmEudwkJQTZfc3RyCQkjIHJldHVybiB0byBBNiBhbmQgcmVjb21wdXRlIFlJTlQKdGVzdF8yOgoJZm11bC5zCQlGVEVOKCVwYyksJWZwMgkjIGNvbXB1dGUgMTBeTEVOCglmY21wLngJCSVmcDAsJWZwMgkjIGNvbXBhcmUgYWJzKFlJTlQpIHdpdGggMTBeTEVOCglmYmx0LncJCUExNF9zdAkJIyBpZiBsZXNzLCBhbGwgaXMgb2ssIGdvIHRvIEExNAoJZmJndC53CQlmaXhfZXgJCSMgaWYgZ3JlYXRlciwgZml4IGFuZCByZWRvCglmZGl2LnMJCUZURU4oJXBjKSwlZnAwCSMgaWYgZXF1YWwsIGRpdmlkZSBieSAxMAoJYWRkcS5sCQkmMSwlZDYJCSMgYW5kIGluYyBJTE9HCglicmEuYgkJQTE0X3N0CQkjIGFuZCBjb250aW51ZSBlbHNld2hlcmUKZml4X2V4OgoJYWRkcS5sCQkmMSwlZDYJCSMgaW5jcmVtZW50IElMT0cgYnkgMQoJbW92LncJCSYxLCVkNQkJIyBzZXQgSUNUUgoJZm1vdi5sCQkmcm1fbW9kZSoweDEwLCVmcGNyCSMgc2V0IHJtb2RlIHRvIFJNCglicmEudwkJQTZfc3RyCQkjIHJldHVybiB0byBBNiBhbmQgcmVjb21wdXRlIFlJTlQKIwojIFNpbmNlIElDVFIgPD4gMCwgd2UgaGF2ZSBhbHJlYWR5IGJlZW4gdGhyb3VnaCBvbmUgYWRqdXN0bWVudCwKIyBhbmQgc2hvdWxkbid0IGhhdmUgYW5vdGhlcjsgdGhpcyBpcyB0byBjaGVjayBpZiBhYnMoWUlOVCkgPSAxMF5MRU4KIyAxMF5MRU4gaXMgYWdhaW4gY29tcHV0ZWQgdXNpbmcgd2hhdGV2ZXIgdGFibGUgaXMgaW4gYTEgc2luY2UgdGhlCiMgdmFsdWUgY2FsY3VsYXRlZCBjYW5ub3QgYmUgaW5leGFjdC4KIwpub3RfenI6CglmbW92LnMJCUZPTkUoJXBjKSwlZnAyCSMgaW5pdCBmcDIgdG8gMS4wCgltb3YubAkJJWQ0LCVkMAkJIyBwdXQgTEVOIGluIGQwCgljbHIubAkJJWQzCQkjIGNsciB0YWJsZSBpbmRleAp6X2xvb3A6Cglsc3IubAkJJjEsJWQwCQkjIHNoaWZ0IG5leHQgYml0IGludG8gY2FycnkKCWJjYy5iCQl6X25leHQJCSMgaWYgemVybywgc2tpcCB0aGUgbXVsCglmbXVsLngJCSglYTEsJWQzKSwlZnAyCSMgbXVsIGJ5IDEwKiooZDNfYml0X25vKQp6X25leHQ6CglhZGQubAkJJjEyLCVkMwkJIyBpbmMgZDMgdG8gbmV4dCBwd3J0ZW4gdGFibGUgZW50cnkKCXRzdC5sCQklZDAJCSMgdGVzdCBpZiBMRU4gaXMgemVybwoJYm5lLmIJCXpfbG9vcAkJIyBpZiBub3QsIGxvb3AKCWZhYnMueAkJJWZwMAkJIyBnZXQgYWJzKFlJTlQpCglmY21wLngJCSVmcDAsJWZwMgkjIGNoZWNrIGlmIGFicyhZSU5UKSA9IDEwXkxFTgoJZmJuZXEudwkJQTE0X3N0CQkjIGlmIG5vdCwgc2tpcCB0aGlzCglmZGl2LnMJCUZURU4oJXBjKSwlZnAwCSMgZGl2aWRlIGFicyhZSU5UKSBieSAxMAoJYWRkcS5sCQkmMSwlZDYJCSMgYW5kIGluYyBJTE9HIGJ5IDEKCWFkZHEubAkJJjEsJWQ0CQkjIGFuZCBpbmMgTEVOCglmbXVsLnMJCUZURU4oJXBjKSwlZnAyCSMgaWYgTEVOKyssIHRoZSBnZXQgMTBeXkxFTgoKIyBBMTQuIENvbnZlcnQgdGhlIG1hbnRpc3NhIHRvIGJjZC4KIyAgICAgIFRoZSBiaW5zdHIgcm91dGluZSBpcyB1c2VkIHRvIGNvbnZlcnQgdGhlIExFTiBkaWdpdAojICAgICAgbWFudGlzc2EgdG8gYmNkIGluIG1lbW9yeS4gIFRoZSBpbnB1dCB0byBiaW5zdHIgaXMKIyAgICAgIHRvIGJlIGEgZnJhY3Rpb247IGkuZS4gKG1hbnRpc3NhKS8xMF5MRU4gYW5kIGFkanVzdGVkCiMgICAgICBzdWNoIHRoYXQgdGhlIGRlY2ltYWwgcG9pbnQgaXMgdG8gdGhlIGxlZnQgb2YgYml0IDYzLgojICAgICAgVGhlIGJjZCBkaWdpdHMgYXJlIHN0b3JlZCBpbiB0aGUgY29ycmVjdCBwb3NpdGlvbiBpbgojICAgICAgdGhlIGZpbmFsIHN0cmluZyBhcmVhIGluIG1lbW9yeS4KIwojCiMgUmVnaXN0ZXIgdXNhZ2U6CiMJSW5wdXQvT3V0cHV0CiMJZDA6IHgvTEVOIGNhbGwgdG8gYmluc3RyIC0gZmluYWwgaXMgMAojCWQxOiB4LzAKIwlkMjogeC9tcyAzMi1iaXRzIG9mIG1hbnQgb2YgYWJzKFlJTlQpCiMJZDM6IHgvbHMgMzItYml0cyBvZiBtYW50IG9mIGFicyhZSU5UKQojCWQ0OiBMRU4vVW5jaGFuZ2VkCiMJZDU6IElDVFI6TEFNQkRBL0xBTUJEQTpJQ1RSCiMJZDY6IElMT0cKIwlkNzogay1mYWN0b3IvVW5jaGFuZ2VkCiMJYTA6IHBvaW50ZXIgaW50byBtZW1vcnkgZm9yIHBhY2tlZCBiY2Qgc3RyaW5nIGZvcm1hdGlvbgojCSAgICAvcHRyIHRvIGZpcnN0IG1hbnRpc3NhIGJ5dGUgaW4gcmVzdWx0IHN0cmluZwojCWExOiBwdHIgdG8gUFRFTnh4IGFycmF5L1VuY2hhbmdlZAojCWEyOiBwdHIgdG8gRlBfU0NSMShhNikvVW5jaGFuZ2VkCiMJZnAwOiBpbnQgcG9ydGlvbiBvZiBZL2FicyhZSU5UKSBhZGp1c3RlZAojCWZwMTogMTBeSVNDQUxFL1VuY2hhbmdlZAojCWZwMjogMTBeTEVOL1VuY2hhbmdlZAojCUZfU0NSMTp4L1dvcmsgYXJlYSBmb3IgZmluYWwgcmVzdWx0CiMJRl9TQ1IyOlkgd2l0aCBvcmlnaW5hbCBleHBvbmVudC9VbmNoYW5nZWQKIwlMX1NDUjE6b3JpZ2luYWwgVVNFUl9GUENSL1VuY2hhbmdlZAojCUxfU0NSMjpmaXJzdCB3b3JkIG9mIFggcGFja2VkL1VuY2hhbmdlZAoKQTE0X3N0OgoJZm1vdi5sCQkmcnpfbW9kZSoweDEwLCVmcGNyCSMgZm9yY2UgcnogZm9yIGNvbnZlcnNpb24KCWZkaXYueAkJJWZwMiwlZnAwCSMgZGl2aWRlIGFicyhZSU5UKSBieSAxMF5MRU4KCWxlYS5sCQlGUF9TQ1IwKCVhNiksJWEwCglmbW92LngJCSVmcDAsKCVhMCkJIyBtb3ZlIGFicyhZSU5UKS8xMF5MRU4gdG8gbWVtb3J5Cgltb3YubAkJNCglYTApLCVkMgkjIG1vdmUgMm5kIHdvcmQgb2YgRlBfUkVTIHRvIGQyCgltb3YubAkJOCglYTApLCVkMwkjIG1vdmUgM3JkIHdvcmQgb2YgRlBfUkVTIHRvIGQzCgljbHIubAkJNCglYTApCQkjIHplcm8gd29yZCAyIG9mIEZQX1JFUwoJY2xyLmwJCTgoJWEwKQkJIyB6ZXJvIHdvcmQgMyBvZiBGUF9SRVMKCW1vdi5sCQkoJWEwKSwlZDAJIyBtb3ZlIGV4cG9uZW50IHRvIGQwCglzd2FwCQklZDAJCSMgcHV0IGV4cG9uZW50IGluIGxvd2VyIHdvcmQKCWJlcS5iCQlub19zZnQJCSMgaWYgemVybywgZG9uJ3Qgc2hpZnQKCXN1Yi5sCQkmMHgzZmZkLCVkMAkjIHN1YiBiaWFzIGxlc3MgMiB0byBtYWtlIGZyYWN0Cgl0c3QubAkJJWQwCQkjIGNoZWNrIGlmID4gMQoJYmd0LmIJCW5vX3NmdAkJIyBpZiBzbywgZG9uJ3Qgc2hpZnQKCW5lZy5sCQklZDAJCSMgbWFrZSBleHAgcG9zaXRpdmUKbV9sb29wOgoJbHNyLmwJCSYxLCVkMgkJIyBzaGlmdCBkMjpkMyByaWdodCwgYWRkIDBzCglyb3hyLmwJCSYxLCVkMwkJIyB0aGUgbnVtYmVyIG9mIHBsYWNlcwoJZGJmLncJCSVkMCxtX2xvb3AJIyBnaXZlbiBpbiBkMApub19zZnQ6Cgl0c3QubAkJJWQyCQkjIGNoZWNrIGZvciBtYW50aXNzYSBvZiB6ZXJvCglibmUuYgkJbm9fenIJCSMgaWYgbm90LCBnbyBvbgoJdHN0LmwJCSVkMwkJIyBjb250aW51ZSB6ZXJvIGNoZWNrCgliZXEuYgkJemVyX20JCSMgaWYgemVybywgZ28gZGlyZWN0bHkgdG8gYmluc3RyCm5vX3pyOgoJY2xyLmwJCSVkMQkJIyBwdXQgemVybyBpbiBkMSBmb3IgYWRkeAoJYWRkLmwJCSYweDAwMDAwMDgwLCVkMwkjIGluYyBhdCBiaXQgNwoJYWRkeC5sCQklZDEsJWQyCQkjIGNvbnRpbnVlIGluYwoJYW5kLmwJCSYweGZmZmZmZjgwLCVkMwkjIHN0cmlwIG9mZiBsc2Igbm90IHVzZWQgYnkgODgyCnplcl9tOgoJbW92LmwJCSVkNCwlZDAJCSMgcHV0IExFTiBpbiBkMCBmb3IgYmluc3RyIGNhbGwKCWFkZHEubAkJJjMsJWEwCQkjIGEwIHBvaW50cyB0byBNMTYgYnl0ZSBpbiByZXN1bHQKCWJzcgkJYmluc3RyCQkjIGNhbGwgYmluc3RyIHRvIGNvbnZlcnQgbWFudAoKCiMgQTE1LiBDb252ZXJ0IHRoZSBleHBvbmVudCB0byBiY2QuCiMgICAgICBBcyBpbiBBMTQgYWJvdmUsIHRoZSBleHAgaXMgY29udmVydGVkIHRvIGJjZCBhbmQgdGhlCiMgICAgICBkaWdpdHMgYXJlIHN0b3JlZCBpbiB0aGUgZmluYWwgc3RyaW5nLgojCiMgICAgICBEaWdpdHMgYXJlIHN0b3JlZCBpbiBMX1NDUjEoYTYpIG9uIHJldHVybiBmcm9tIEJJTkRFQyBhczoKIwojCSAzMiAgICAgICAgICAgICAgIDE2IDE1ICAgICAgICAgICAgICAgIDAKIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCXwgIDAgfCBlMyB8IGUyIHwgZTEgfCBlNCB8ICBYIHwgIFggfCAgWCB8CiMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIEFuZCBhcmUgbW92ZWQgaW50byB0aGVpciBwcm9wZXIgcGxhY2VzIGluIEZQX1NDUjAuICBJZiBkaWdpdCBlNAojIGlzIG5vbi16ZXJvLCBPUEVSUiBpcyBzaWduYWxlZC4gIEluIGFsbCBjYXNlcywgYWxsIDQgZGlnaXRzIGFyZQojIHdyaXR0ZW4gYXMgc3BlY2lmaWVkIGluIHRoZSA4ODEvODgyIG1hbnVhbCBmb3IgcGFja2VkIGRlY2ltYWwuCiMKIyBSZWdpc3RlciB1c2FnZToKIwlJbnB1dC9PdXRwdXQKIwlkMDogeC9MRU4gY2FsbCB0byBiaW5zdHIgLSBmaW5hbCBpcyAwCiMJZDE6IHgvc2NyYXRjaCAoMCk7c2hpZnQgY291bnQgZm9yIGZpbmFsIGV4cG9uZW50IHBhY2tpbmcKIwlkMjogeC9tcyAzMi1iaXRzIG9mIGV4cCBmcmFjdGlvbi9zY3JhdGNoCiMJZDM6IHgvbHMgMzItYml0cyBvZiBleHAgZnJhY3Rpb24KIwlkNDogTEVOL1VuY2hhbmdlZAojCWQ1OiBJQ1RSOkxBTUJEQS9MQU1CREE6SUNUUgojCWQ2OiBJTE9HCiMJZDc6IGstZmFjdG9yL1VuY2hhbmdlZAojCWEwOiBwdHIgdG8gcmVzdWx0IHN0cmluZy9wdHIgdG8gTF9TQ1IxKGE2KQojCWExOiBwdHIgdG8gUFRFTnh4IGFycmF5L1VuY2hhbmdlZAojCWEyOiBwdHIgdG8gRlBfU0NSMShhNikvVW5jaGFuZ2VkCiMJZnAwOiBhYnMoWUlOVCkgYWRqdXN0ZWQvZmxvYXQoSUxPRykKIwlmcDE6IDEwXklTQ0FMRS9VbmNoYW5nZWQKIwlmcDI6IDEwXkxFTi9VbmNoYW5nZWQKIwlGX1NDUjE6V29yayBhcmVhIGZvciBmaW5hbCByZXN1bHQvQkNEIHJlc3VsdAojCUZfU0NSMjpZIHdpdGggb3JpZ2luYWwgZXhwb25lbnQvSUxPRy8xMF40CiMJTF9TQ1IxOm9yaWdpbmFsIFVTRVJfRlBDUi9FeHBvbmVudCBkaWdpdHMgb24gcmV0dXJuIGZyb20gYmluc3RyCiMJTF9TQ1IyOmZpcnN0IHdvcmQgb2YgWCBwYWNrZWQvVW5jaGFuZ2VkCgpBMTVfc3Q6Cgl0c3QuYgkJQklOREVDX0ZMRyglYTYpCSMgY2hlY2sgZm9yIGRlbm9ybQoJYmVxLmIJCW5vdF9kZW5vcm0KCWZ0ZXN0LngJCSVmcDAJCSMgdGVzdCBmb3IgemVybwoJZmJlcS53CQlkZW5femVybwkjIGlmIHplcm8sIHVzZSBrLWZhY3RvciBvciA0OTMzCglmbW92LmwJCSVkNiwlZnAwCSMgZmxvYXQgSUxPRwoJZmFicy54CQklZnAwCQkjIGdldCBhYnMgb2YgSUxPRwoJYnJhLmIJCWNvbnZydApkZW5femVybzoKCXRzdC5sCQklZDcJCSMgY2hlY2sgc2lnbiBvZiB0aGUgay1mYWN0b3IKCWJsdC5iCQl1c2VfaWxvZwkjIGlmIG5lZ2F0aXZlLCB1c2UgSUxPRwoJZm1vdi5zCQlGNDkzMyglcGMpLCVmcDAJIyBmb3JjZSBleHBvbmVudCB0byA0OTMzCglicmEuYgkJY29udnJ0CQkjIGRvIGl0CnVzZV9pbG9nOgoJZm1vdi5sCQklZDYsJWZwMAkjIGZsb2F0IElMT0cKCWZhYnMueAkJJWZwMAkJIyBnZXQgYWJzIG9mIElMT0cKCWJyYS5iCQljb252cnQKbm90X2Rlbm9ybToKCWZ0ZXN0LngJCSVmcDAJCSMgdGVzdCBmb3IgemVybwoJZmJuZXEudwkJbm90X3plcm8JIyBpZiB6ZXJvLCBmb3JjZSBleHBvbmVudAoJZm1vdi5zCQlGT05FKCVwYyksJWZwMAkjIGZvcmNlIGV4cG9uZW50IHRvIDEKCWJyYS5iCQljb252cnQJCSMgZG8gaXQKbm90X3plcm86CglmbW92LmwJCSVkNiwlZnAwCSMgZmxvYXQgSUxPRwoJZmFicy54CQklZnAwCQkjIGdldCBhYnMgb2YgSUxPRwpjb252cnQ6CglmZGl2LngJCTI0KCVhMSksJWZwMAkjIGNvbXB1dGUgSUxPRy8xMF40CglmbW92LngJCSVmcDAsRlBfU0NSMSglYTYpCSMgc3RvcmUgZnAwIGluIG1lbW9yeQoJbW92LmwJCTQoJWEyKSwlZDIJIyBtb3ZlIHdvcmQgMiB0byBkMgoJbW92LmwJCTgoJWEyKSwlZDMJIyBtb3ZlIHdvcmQgMyB0byBkMwoJbW92LncJCSglYTIpLCVkMAkjIG1vdmUgZXhwIHRvIGQwCgliZXEuYgkJeF9sb29wX2ZpbgkjIGlmIHplcm8sIHNraXAgdGhlIHNoaWZ0CglzdWIudwkJJjB4M2ZmZCwlZDAJIyBzdWJ0cmFjdCBvZmYgYmlhcwoJbmVnLncJCSVkMAkJIyBtYWtlIGV4cCBwb3NpdGl2ZQp4X2xvb3A6Cglsc3IubAkJJjEsJWQyCQkjIHNoaWZ0IGQyOmQzIHJpZ2h0Cglyb3hyLmwJCSYxLCVkMwkJIyB0aGUgbnVtYmVyIG9mIHBsYWNlcwoJZGJmLncJCSVkMCx4X2xvb3AJIyBnaXZlbiBpbiBkMAp4X2xvb3BfZmluOgoJY2xyLmwJCSVkMQkJIyBwdXQgemVybyBpbiBkMSBmb3IgYWRkeAoJYWRkLmwJCSYweDAwMDAwMDgwLCVkMwkjIGluYyBhdCBiaXQgNgoJYWRkeC5sCQklZDEsJWQyCQkjIGNvbnRpbnVlIGluYwoJYW5kLmwJCSYweGZmZmZmZjgwLCVkMwkjIHN0cmlwIG9mZiBsc2Igbm90IHVzZWQgYnkgODgyCgltb3YubAkJJjQsJWQwCQkjIHB1dCA0IGluIGQwIGZvciBiaW5zdHIgY2FsbAoJbGVhLmwJCUxfU0NSMSglYTYpLCVhMAkjIGEwIGlzIHB0ciB0byBMX1NDUjEgZm9yIGV4cCBkaWdpdHMKCWJzcgkJYmluc3RyCQkjIGNhbGwgYmluc3RyIHRvIGNvbnZlcnQgZXhwCgltb3YubAkJTF9TQ1IxKCVhNiksJWQwCSMgbG9hZCBMX1NDUjEgbHdvcmQgdG8gZDAKCW1vdi5sCQkmMTIsJWQxCQkjIHVzZSBkMSBmb3Igc2hpZnQgY291bnQKCWxzci5sCQklZDEsJWQwCQkjIHNoaWZ0IGQwIHJpZ2h0IGJ5IDEyCgliZmlucwkJJWQwLEZQX1NDUjAoJWE2KXsmNDomMTJ9CSMgcHV0IGUzOmUyOmUxIGluIEZQX1NDUjAKCWxzci5sCQklZDEsJWQwCQkjIHNoaWZ0IGQwIHJpZ2h0IGJ5IDEyCgliZmlucwkJJWQwLEZQX1NDUjAoJWE2KXsmMTY6JjR9CSMgcHV0IGU0IGluIEZQX1NDUjAKCXRzdC5iCQklZDAJCSMgY2hlY2sgaWYgZTQgaXMgemVybwoJYmVxLmIJCUExNl9zdAkJIyBpZiB6ZXJvLCBza2lwIHJlc3QKCW9yLmwJCSZvcGFvcF9tYXNrLFVTRVJfRlBTUiglYTYpCSMgc2V0IE9QRVJSICYgQUlPUCBpbiBVU0VSX0ZQU1IKCgojIEExNi4gV3JpdGUgc2lnbiBiaXRzIHRvIGZpbmFsIHN0cmluZy4KIwkgICBTaWdtYSBpcyBiaXQgMzEgb2YgaW5pdGlhbCB2YWx1ZTsgUkhPIGlzIGJpdCAzMSBvZiBkNiAoSUxPRykuCiMKIyBSZWdpc3RlciB1c2FnZToKIwlJbnB1dC9PdXRwdXQKIwlkMDogeC9zY3JhdGNoIC0gZmluYWwgaXMgeAojCWQyOiB4L3gKIwlkMzogeC94CiMJZDQ6IExFTi9VbmNoYW5nZWQKIwlkNTogSUNUUjpMQU1CREEvTEFNQkRBOklDVFIKIwlkNjogSUxPRy9JTE9HIGFkanVzdGVkCiMJZDc6IGstZmFjdG9yL1VuY2hhbmdlZAojCWEwOiBwdHIgdG8gTF9TQ1IxKGE2KS9VbmNoYW5nZWQKIwlhMTogcHRyIHRvIFBURU54eCBhcnJheS9VbmNoYW5nZWQKIwlhMjogcHRyIHRvIEZQX1NDUjEoYTYpL1VuY2hhbmdlZAojCWZwMDogZmxvYXQoSUxPRykvVW5jaGFuZ2VkCiMJZnAxOiAxMF5JU0NBTEUvVW5jaGFuZ2VkCiMJZnAyOiAxMF5MRU4vVW5jaGFuZ2VkCiMJRl9TQ1IxOkJDRCByZXN1bHQgd2l0aCBjb3JyZWN0IHNpZ25zCiMJRl9TQ1IyOklMT0cvMTBeNAojCUxfU0NSMTpFeHBvbmVudCBkaWdpdHMgb24gcmV0dXJuIGZyb20gYmluc3RyCiMJTF9TQ1IyOmZpcnN0IHdvcmQgb2YgWCBwYWNrZWQvVW5jaGFuZ2VkCgpBMTZfc3Q6CgljbHIubAkJJWQwCQkjIGNsciBkMCBmb3IgY29sbGVjdGlvbiBvZiBzaWducwoJYW5kLmIJCSYweDBmLEZQX1NDUjAoJWE2KQkjIGNsZWFyIGZpcnN0IG5pYmJsZSBvZiBGUF9TQ1IwCgl0c3QubAkJTF9TQ1IyKCVhNikJIyBjaGVjayBzaWduIG9mIG9yaWdpbmFsIG1hbnRpc3NhCgliZ2UuYgkJbWFudF9wCQkjIGlmIHBvcywgZG9uJ3Qgc2V0IFNNCgltb3YubAkJJjIsJWQwCQkjIG1vdmUgMiBpbiB0byBkMCBmb3IgU00KbWFudF9wOgoJdHN0LmwJCSVkNgkJIyBjaGVjayBzaWduIG9mIElMT0cKCWJnZS5iCQl3cl9zZ24JCSMgaWYgcG9zLCBkb24ndCBzZXQgU0UKCWFkZHEubAkJJjEsJWQwCQkjIHNldCBiaXQgMCBpbiBkMCBmb3IgU0UKd3Jfc2duOgoJYmZpbnMJCSVkMCxGUF9TQ1IwKCVhNil7JjA6JjJ9CSMgaW5zZXJ0IFNNIGFuZCBTRSBpbnRvIEZQX1NDUjAKCiMgQ2xlYW4gdXAgYW5kIHJlc3RvcmUgYWxsIHJlZ2lzdGVycyB1c2VkLgoKCWZtb3YubAkJJjAsJWZwc3IJIyBjbGVhciBwb3NzaWJsZSBpbmV4Mi9haW5leCBiaXRzCglmbW92bS54CQkoJXNwKSssJjB4ZTAJIyAgeyVmcDAtJWZwMn0KCW1vdm0ubAkJKCVzcCkrLCYweDRmYwkjICB7JWQyLSVkNy8lYTJ9CglydHMKCglnbG9iYWwJCVBURU5STgpQVEVOUk46Cglsb25nCQkweDQwMDIwMDAwLDB4QTAwMDAwMDAsMHgwMDAwMDAwMAkjIDEwIF4gMQoJbG9uZwkJMHg0MDA1MDAwMCwweEM4MDAwMDAwLDB4MDAwMDAwMDAJIyAxMCBeIDIKCWxvbmcJCTB4NDAwQzAwMDAsMHg5QzQwMDAwMCwweDAwMDAwMDAwCSMgMTAgXiA0Cglsb25nCQkweDQwMTkwMDAwLDB4QkVCQzIwMDAsMHgwMDAwMDAwMAkjIDEwIF4gOAoJbG9uZwkJMHg0MDM0MDAwMCwweDhFMUJDOUJGLDB4MDQwMDAwMDAJIyAxMCBeIDE2Cglsb25nCQkweDQwNjkwMDAwLDB4OURDNUFEQTgsMHgyQjcwQjU5RQkjIDEwIF4gMzIKCWxvbmcJCTB4NDBEMzAwMDAsMHhDMjc4MUY0OSwweEZGQ0ZBNkQ1CSMgMTAgXiA2NAoJbG9uZwkJMHg0MUE4MDAwMCwweDkzQkE0N0M5LDB4ODBFOThDRTAJIyAxMCBeIDEyOAoJbG9uZwkJMHg0MzUxMDAwMCwweEFBN0VFQkZCLDB4OURGOURFOEUJIyAxMCBeIDI1NgoJbG9uZwkJMHg0NkEzMDAwMCwweEUzMTlBMEFFLDB4QTYwRTkxQzcJIyAxMCBeIDUxMgoJbG9uZwkJMHg0RDQ4MDAwMCwweEM5NzY3NTg2LDB4ODE3NTBDMTcJIyAxMCBeIDEwMjQKCWxvbmcJCTB4NUE5MjAwMDAsMHg5RThCM0I1RCwweEM1M0Q1REU1CSMgMTAgXiAyMDQ4Cglsb25nCQkweDc1MjUwMDAwLDB4QzQ2MDUyMDIsMHg4QTIwOTc5QgkjIDEwIF4gNDA5NgoKCWdsb2JhbAkJUFRFTlJQClBURU5SUDoKCWxvbmcJCTB4NDAwMjAwMDAsMHhBMDAwMDAwMCwweDAwMDAwMDAwCSMgMTAgXiAxCglsb25nCQkweDQwMDUwMDAwLDB4QzgwMDAwMDAsMHgwMDAwMDAwMAkjIDEwIF4gMgoJbG9uZwkJMHg0MDBDMDAwMCwweDlDNDAwMDAwLDB4MDAwMDAwMDAJIyAxMCBeIDQKCWxvbmcJCTB4NDAxOTAwMDAsMHhCRUJDMjAwMCwweDAwMDAwMDAwCSMgMTAgXiA4Cglsb25nCQkweDQwMzQwMDAwLDB4OEUxQkM5QkYsMHgwNDAwMDAwMAkjIDEwIF4gMTYKCWxvbmcJCTB4NDA2OTAwMDAsMHg5REM1QURBOCwweDJCNzBCNTlFCSMgMTAgXiAzMgoJbG9uZwkJMHg0MEQzMDAwMCwweEMyNzgxRjQ5LDB4RkZDRkE2RDYJIyAxMCBeIDY0Cglsb25nCQkweDQxQTgwMDAwLDB4OTNCQTQ3QzksMHg4MEU5OENFMAkjIDEwIF4gMTI4Cglsb25nCQkweDQzNTEwMDAwLDB4QUE3RUVCRkIsMHg5REY5REU4RQkjIDEwIF4gMjU2Cglsb25nCQkweDQ2QTMwMDAwLDB4RTMxOUEwQUUsMHhBNjBFOTFDNwkjIDEwIF4gNTEyCglsb25nCQkweDRENDgwMDAwLDB4Qzk3Njc1ODYsMHg4MTc1MEMxOAkjIDEwIF4gMTAyNAoJbG9uZwkJMHg1QTkyMDAwMCwweDlFOEIzQjVELDB4QzUzRDVERTUJIyAxMCBeIDIwNDgKCWxvbmcJCTB4NzUyNTAwMDAsMHhDNDYwNTIwMiwweDhBMjA5NzlCCSMgMTAgXiA0MDk2CgoJZ2xvYmFsCQlQVEVOUk0KUFRFTlJNOgoJbG9uZwkJMHg0MDAyMDAwMCwweEEwMDAwMDAwLDB4MDAwMDAwMDAJIyAxMCBeIDEKCWxvbmcJCTB4NDAwNTAwMDAsMHhDODAwMDAwMCwweDAwMDAwMDAwCSMgMTAgXiAyCglsb25nCQkweDQwMEMwMDAwLDB4OUM0MDAwMDAsMHgwMDAwMDAwMAkjIDEwIF4gNAoJbG9uZwkJMHg0MDE5MDAwMCwweEJFQkMyMDAwLDB4MDAwMDAwMDAJIyAxMCBeIDgKCWxvbmcJCTB4NDAzNDAwMDAsMHg4RTFCQzlCRiwweDA0MDAwMDAwCSMgMTAgXiAxNgoJbG9uZwkJMHg0MDY5MDAwMCwweDlEQzVBREE4LDB4MkI3MEI1OUQJIyAxMCBeIDMyCglsb25nCQkweDQwRDMwMDAwLDB4QzI3ODFGNDksMHhGRkNGQTZENQkjIDEwIF4gNjQKCWxvbmcJCTB4NDFBODAwMDAsMHg5M0JBNDdDOSwweDgwRTk4Q0RGCSMgMTAgXiAxMjgKCWxvbmcJCTB4NDM1MTAwMDAsMHhBQTdFRUJGQiwweDlERjlERThECSMgMTAgXiAyNTYKCWxvbmcJCTB4NDZBMzAwMDAsMHhFMzE5QTBBRSwweEE2MEU5MUM2CSMgMTAgXiA1MTIKCWxvbmcJCTB4NEQ0ODAwMDAsMHhDOTc2NzU4NiwweDgxNzUwQzE3CSMgMTAgXiAxMDI0Cglsb25nCQkweDVBOTIwMDAwLDB4OUU4QjNCNUQsMHhDNTNENURFNAkjIDEwIF4gMjA0OAoJbG9uZwkJMHg3NTI1MDAwMCwweEM0NjA1MjAyLDB4OEEyMDk3OUEJIyAxMCBeIDQwOTYKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBiaW5zdHIoKTogQ29udmVydHMgYSA2NC1iaXQgYmluYXJ5IGludGVnZXIgdG8gYmNkLgkJCSMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIwojCWQyOmQzID0gNjQtYml0IGJpbmFyeSBpbnRlZ2VyCQkJCQkjCiMJZDAgICAgPSBkZXNpcmVkIGxlbmd0aCAoTEVOKQkJCQkJIwojCWEwICAgID0gcG9pbnRlciB0byBzdGFydCBpbiBtZW1vcnkgZm9yIGJjZCBjaGFyYWN0ZXJzCQkjCiMJCShUaGlzIHBvaW50ZXIgbXVzdCBwb2ludCB0byBieXRlIDQgb2YgdGhlIGZpcnN0CQkjCiMJCSBsd29yZCBvZiB0aGUgcGFja2VkIGRlY2ltYWwgbWVtb3J5IHN0cmluZy4pCQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKIwlhMCA9IHBvaW50ZXIgdG8gTEVOIGJjZCBkaWdpdHMgcmVwcmVzZW50aW5nIHRoZSA2NC1iaXQgaW50ZWdlci4JIwojCQkJCQkJCQkJIwojIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJVGhlIDY0LWJpdCBiaW5hcnkgaXMgYXNzdW1lZCB0byBoYXZlIGEgZGVjaW1hbCBwb2ludCBiZWZvcmUJIwojCWJpdCA2My4gIFRoZSBmcmFjdGlvbiBpcyBtdWx0aXBsaWVkIGJ5IDEwIHVzaW5nIGEgbXVsIGJ5IDIJIwojCXNoaWZ0IGFuZCBhIG11bCBieSA4IHNoaWZ0LiAgVGhlIGJpdHMgc2hpZnRlZCBvdXQgb2YgdGhlCSMKIwltc2IgZm9ybSBhIGRlY2ltYWwgZGlnaXQuICBUaGlzIHByb2Nlc3MgaXMgaXRlcmF0ZWQgdW50aWwJIwojCUxFTiBkaWdpdHMgYXJlIGZvcm1lZC4JCQkJCQkjCiMJCQkJCQkJCQkjCiMgQTEuIEluaXQgZDcgdG8gMS4gIEQ3IGlzIHRoZSBieXRlIGRpZ2l0IGNvdW50ZXIsIGFuZCBpZiAxLCB0aGUJIwojICAgICBkaWdpdCBmb3JtZWQgd2lsbCBiZSBhc3N1bWVkIHRoZSBsZWFzdCBzaWduaWZpY2FudC4gIFRoaXMgaXMJIwojICAgICB0byBmb3JjZSB0aGUgZmlyc3QgYnl0ZSBmb3JtZWQgdG8gaGF2ZSBhIDAgaW4gdGhlIHVwcGVyIDQgYml0cy4JIwojCQkJCQkJCQkJIwojIEEyLiBCZWdpbm5pbmcgb2YgdGhlIGxvb3A6CQkJCQkJIwojICAgICBDb3B5IHRoZSBmcmFjdGlvbiBpbiBkMjpkMyB0byBkNDpkNS4JCQkJIwojCQkJCQkJCQkJIwojIEEzLiBNdWx0aXBseSB0aGUgZnJhY3Rpb24gaW4gZDI6ZDMgYnkgOCB1c2luZyBiaXQtZmllbGQJCSMKIyAgICAgZXh0cmFjdHMgYW5kIHNoaWZ0cy4gIFRoZSB0aHJlZSBtc2JzIGZyb20gZDIgd2lsbCBnbyBpbnRvIGQxLgkjCiMJCQkJCQkJCQkjCiMgQTQuIE11bHRpcGx5IHRoZSBmcmFjdGlvbiBpbiBkNDpkNSBieSAyIHVzaW5nIHNoaWZ0cy4gIFRoZSBtc2IJIwojICAgICB3aWxsIGJlIGNvbGxlY3RlZCBieSB0aGUgY2FycnkuCQkJCQkjCiMJCQkJCQkJCQkjCiMgQTUuIEFkZCB1c2luZyB0aGUgY2FycnkgdGhlIDY0LWJpdCBxdWFudGl0aWVzIGluIGQyOmQzIGFuZCBkNDpkNQkjCiMgICAgIGludG8gZDI6ZDMuICBEMSB3aWxsIGNvbnRhaW4gdGhlIGJjZCBkaWdpdCBmb3JtZWQuCQkjCiMJCQkJCQkJCQkjCiMgQTYuIFRlc3QgZDcuICBJZiB6ZXJvLCB0aGUgZGlnaXQgZm9ybWVkIGlzIHRoZSBtcyBkaWdpdC4gIElmIG5vbi0JIwojICAgICB6ZXJvLCBpdCBpcyB0aGUgbHMgZGlnaXQuICBQdXQgdGhlIGRpZ2l0IGluIGl0cyBwbGFjZSBpbiB0aGUJIwojICAgICB1cHBlciB3b3JkIG9mIGQwLiAgSWYgaXQgaXMgdGhlIGxzIGRpZ2l0LCB3cml0ZSB0aGUgd29yZAkJIwojICAgICBmcm9tIGQwIHRvIG1lbW9yeS4JCQkJCQkjCiMJCQkJCQkJCQkjCiMgQTcuIERlY3JlbWVudCBkNiAoTEVOIGNvdW50ZXIpIGFuZCByZXBlYXQgdGhlIGxvb3AgdW50aWwgemVyby4JIwojCQkJCQkJCQkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgojCUltcGxlbWVudGF0aW9uIE5vdGVzOgojCiMJVGhlIHJlZ2lzdGVycyBhcmUgdXNlZCBhcyBmb2xsb3dzOgojCiMJCWQwOiBMRU4gY291bnRlcgojCQlkMTogdGVtcCB1c2VkIHRvIGZvcm0gdGhlIGRpZ2l0CiMJCWQyOiB1cHBlciAzMi1iaXRzIG9mIGZyYWN0aW9uIGZvciBtdWwgYnkgOAojCQlkMzogbG93ZXIgMzItYml0cyBvZiBmcmFjdGlvbiBmb3IgbXVsIGJ5IDgKIwkJZDQ6IHVwcGVyIDMyLWJpdHMgb2YgZnJhY3Rpb24gZm9yIG11bCBieSAyCiMJCWQ1OiBsb3dlciAzMi1iaXRzIG9mIGZyYWN0aW9uIGZvciBtdWwgYnkgMgojCQlkNjogdGVtcCBmb3IgYml0LWZpZWxkIGV4dHJhY3RzCiMJCWQ3OiBieXRlIGRpZ2l0IGZvcm1hdGlvbiB3b3JkO2RpZ2l0IGNvdW50IHswLDF9CiMJCWEwOiBwb2ludGVyIGludG8gbWVtb3J5IGZvciBwYWNrZWQgYmNkIHN0cmluZyBmb3JtYXRpb24KIwoKCWdsb2JhbAkJYmluc3RyCmJpbnN0cjoKCW1vdm0ubAkJJjB4ZmYwMCwtKCVzcCkJIyAgeyVkMC0lZDd9CgojCiMgQTE6IEluaXQgZDcKIwoJbW92LmwJCSYxLCVkNwkJIyBpbml0IGQ3IGZvciBzZWNvbmQgZGlnaXQKCXN1YnEubAkJJjEsJWQwCQkjIGZvciBkYmYgZDAgd291bGQgaGF2ZSBMRU4rMSBwYXNzZXMKIwojIEEyLiBDb3B5IGQyOmQzIHRvIGQ0OmQ1LiAgU3RhcnQgbG9vcC4KIwpsb29wOgoJbW92LmwJCSVkMiwlZDQJCSMgY29weSB0aGUgZnJhY3Rpb24gYmVmb3JlIG11bHMKCW1vdi5sCQklZDMsJWQ1CQkjIHRvIGQ0OmQ1CiMKIyBBMy4gTXVsdGlwbHkgZDI6ZDMgYnkgODsgZXh0cmFjdCBtc2JzIGludG8gZDEuCiMKCWJmZXh0dQkJJWQyeyYwOiYzfSwlZDEJIyBjb3B5IDMgbXNicyBvZiBkMiBpbnRvIGQxCglhc2wubAkJJjMsJWQyCQkjIHNoaWZ0IGQyIGxlZnQgYnkgMyBwbGFjZXMKCWJmZXh0dQkJJWQzeyYwOiYzfSwlZDYJIyBjb3B5IDMgbXNicyBvZiBkMyBpbnRvIGQ2Cglhc2wubAkJJjMsJWQzCQkjIHNoaWZ0IGQzIGxlZnQgYnkgMyBwbGFjZXMKCW9yLmwJCSVkNiwlZDIJCSMgb3IgaW4gbXNicyBmcm9tIGQzIGludG8gZDIKIwojIEE0LiBNdWx0aXBseSBkNDpkNSBieSAyOyBhZGQgY2Fycnkgb3V0IHRvIGQxLgojCglhc2wubAkJJjEsJWQ1CQkjIG11bCBkNSBieSAyCglyb3hsLmwJCSYxLCVkNAkJIyBtdWwgZDQgYnkgMgoJc3dhcAkJJWQ2CQkjIHB1dCAwIGluIGQ2IGxvd2VyIHdvcmQKCWFkZHgudwkJJWQ2LCVkMQkJIyBhZGQgaW4gZXh0ZW5kIGZyb20gbXVsIGJ5IDIKIwojIEE1LiBBZGQgbXVsIGJ5IDggdG8gbXVsIGJ5IDIuICBEMSBjb250YWlucyB0aGUgZGlnaXQgZm9ybWVkLgojCglhZGQubAkJJWQ1LCVkMwkJIyBhZGQgbG93ZXIgMzIgYml0cwoJbm9wCQkJCSMgRVJSQVRBIEZJWCAjMTMgKFJldi4gMS4yIDYvNi85MCkKCWFkZHgubAkJJWQ0LCVkMgkJIyBhZGQgd2l0aCBleHRlbmQgdXBwZXIgMzIgYml0cwoJbm9wCQkJCSMgRVJSQVRBIEZJWCAjMTMgKFJldi4gMS4yIDYvNi85MCkKCWFkZHgudwkJJWQ2LCVkMQkJIyBhZGQgaW4gZXh0ZW5kIGZyb20gYWRkIHRvIGQxCglzd2FwCQklZDYJCSMgd2l0aCBkNiA9IDA7IHB1dCAwIGluIHVwcGVyIHdvcmQKIwojIEE2LiBUZXN0IGQ3IGFuZCBicmFuY2guCiMKCXRzdC53CQklZDcJCSMgaWYgemVybywgc3RvcmUgZGlnaXQgJiB0byBsb29wCgliZXEuYgkJZmlyc3RfZAkJIyBpZiBub24temVybywgZm9ybSBieXRlICYgd3JpdGUKc2VjX2Q6Cglzd2FwCQklZDcJCSMgYnJpbmcgZmlyc3QgZGlnaXQgdG8gd29yZCBkN2IKCWFzbC53CQkmNCwlZDcJCSMgZmlyc3QgZGlnaXQgaW4gdXBwZXIgNCBiaXRzIGQ3YgoJYWRkLncJCSVkMSwlZDcJCSMgYWRkIGluIGxzIGRpZ2l0IHRvIGQ3YgoJbW92LmIJCSVkNywoJWEwKSsJIyBzdG9yZSBkN2IgYnl0ZSBpbiBtZW1vcnkKCXN3YXAJCSVkNwkJIyBwdXQgTEVOIGNvdW50ZXIgaW4gd29yZCBkN2EKCWNsci53CQklZDcJCSMgc2V0IGQ3YSB0byBzaWduYWwgbm8gZGlnaXRzIGRvbmUKCWRiZi53CQklZDAsbG9vcAkjIGRvIGxvb3Agc29tZSBtb3JlIQoJYnJhLmIJCWVuZF9ic3RyCSMgZmluaXNoZWQsIHNvIGV4aXQKZmlyc3RfZDoKCXN3YXAJCSVkNwkJIyBwdXQgZGlnaXQgd29yZCBpbiBkN2IKCW1vdi53CQklZDEsJWQ3CQkjIHB1dCBuZXcgZGlnaXQgaW4gZDdiCglzd2FwCQklZDcJCSMgcHV0IExFTiBjb3VudGVyIGluIHdvcmQgZDdhCglhZGRxLncJCSYxLCVkNwkJIyBzZXQgZDdhIHRvIHNpZ25hbCBmaXJzdCBkaWdpdCBkb25lCglkYmYudwkJJWQwLGxvb3AJIyBkbyBsb29wIHNvbWUgbW9yZSEKCXN3YXAJCSVkNwkJIyBwdXQgbGFzdCBkaWdpdCBpbiBzdHJpbmcKCWxzbC53CQkmNCwlZDcJCSMgbW92ZSBpdCB0byB1cHBlciA0IGJpdHMKCW1vdi5iCQklZDcsKCVhMCkrCSMgc3RvcmUgaXQgaW4gbWVtb3J5IHN0cmluZwojCiMgQ2xlYW4gdXAgYW5kIHJldHVybiB3aXRoIHJlc3VsdCBpbiBmcDAuCiMKZW5kX2JzdHI6Cgltb3ZtLmwJCSglc3ApKywmMHhmZgkjICB7JWQwLSVkN30KCXJ0cwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJZmFjY19pbl9iKCk6IGRtZW1fcmVhZF9ieXRlIGZhaWxlZAkJCQkjCiMJZmFjY19pbl93KCk6IGRtZW1fcmVhZF93b3JkIGZhaWxlZAkJCQkjCiMJZmFjY19pbl9sKCk6IGRtZW1fcmVhZF9sb25nIGZhaWxlZAkJCQkjCiMJZmFjY19pbl9kKCk6IGRtZW1fcmVhZCBvZiBkYmwgcHJlYyBmYWlsZWQJCQkjCiMJZmFjY19pbl94KCk6IGRtZW1fcmVhZCBvZiBleHQgcHJlYyBmYWlsZWQJCQkjCiMJCQkJCQkJCQkjCiMJZmFjY19vdXRfYigpOiBkbWVtX3dyaXRlX2J5dGUgZmFpbGVkCQkJCSMKIwlmYWNjX291dF93KCk6IGRtZW1fd3JpdGVfd29yZCBmYWlsZWQJCQkJIwojCWZhY2Nfb3V0X2woKTogZG1lbV93cml0ZV9sb25nIGZhaWxlZAkJCQkjCiMJZmFjY19vdXRfZCgpOiBkbWVtX3dyaXRlIG9mIGRibCBwcmVjIGZhaWxlZAkJCSMKIwlmYWNjX291dF94KCk6IGRtZW1fd3JpdGUgb2YgZXh0IHByZWMgZmFpbGVkCQkJIwojCQkJCQkJCQkJIwojIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJX3JlYWxfYWNjZXNzKCkgLSBleGl0IHRocm91Z2ggYWNjZXNzIGVycm9yIGhhbmRsZXIJCSMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCU5vbmUJCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCU5vbmUJCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCUZsb3cganVtcHMgaGVyZSB3aGVuIGFuIEZQIGRhdGEgZmV0Y2ggY2FsbCBnZXRzIGFuIGVycm9yCSMKIyByZXN1bHQuIFRoaXMgbWVhbnMgdGhlIG9wZXJhdGluZyBzeXN0ZW0gd2FudHMgYW4gYWNjZXNzIGVycm9yIGZyYW1lCSMKIyBtYWRlIG91dCBvZiB0aGUgY3VycmVudCBleGNlcHRpb24gc3RhY2sgZnJhbWUuCQkJIwojCVNvLCB3ZSBmaXJzdCBjYWxsIHJlc3RvcmUoKSB3aGljaCBtYWtlcyBzdXJlIHRoYXQgYW55IHVwZGF0ZWQJIwojIC0oYW4pKyByZWdpc3RlciBnZXRzIHJldHVybmVkIHRvIGl0cyBwcmUtZXhjZXB0aW9uIHZhbHVlIGFuZCB0aGVuCSMKIyB3ZSBjaGFuZ2UgdGhlIHN0YWNrIHRvIGFuIGFjY2VzcyBlcnJvciBzdGFjayBmcmFtZS4JCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCmZhY2NfaW5fYjoKCW1vdnEubAkJJjB4MSwlZDAJCQkjIG9uZSBieXRlCglic3IudwkJcmVzdG9yZQkJCQkjIGZpeCBBbgoKCW1vdi53CQkmMHgwMTIxLEVYQ19WT0ZGKCVhNikJCSMgc2V0IEZTTFcKCWJyYS53CQlmYWNjX2ZpbmlzaAoKZmFjY19pbl93OgoJbW92cS5sCQkmMHgyLCVkMAkJCSMgdHdvIGJ5dGVzCglic3IudwkJcmVzdG9yZQkJCQkjIGZpeCBBbgoKCW1vdi53CQkmMHgwMTQxLEVYQ19WT0ZGKCVhNikJCSMgc2V0IEZTTFcKCWJyYS5iCQlmYWNjX2ZpbmlzaAoKZmFjY19pbl9sOgoJbW92cS5sCQkmMHg0LCVkMAkJCSMgZm91ciBieXRlcwoJYnNyLncJCXJlc3RvcmUJCQkJIyBmaXggQW4KCgltb3YudwkJJjB4MDEwMSxFWENfVk9GRiglYTYpCQkjIHNldCBGU0xXCglicmEuYgkJZmFjY19maW5pc2gKCmZhY2NfaW5fZDoKCW1vdnEubAkJJjB4OCwlZDAJCQkjIGVpZ2h0IGJ5dGVzCglic3IudwkJcmVzdG9yZQkJCQkjIGZpeCBBbgoKCW1vdi53CQkmMHgwMTYxLEVYQ19WT0ZGKCVhNikJCSMgc2V0IEZTTFcKCWJyYS5iCQlmYWNjX2ZpbmlzaAoKZmFjY19pbl94OgoJbW92cS5sCQkmMHhjLCVkMAkJCSMgdHdlbHZlIGJ5dGVzCglic3IudwkJcmVzdG9yZQkJCQkjIGZpeCBBbgoKCW1vdi53CQkmMHgwMTYxLEVYQ19WT0ZGKCVhNikJCSMgc2V0IEZTTFcKCWJyYS5iCQlmYWNjX2ZpbmlzaAoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKZmFjY19vdXRfYjoKCW1vdnEubAkJJjB4MSwlZDAJCQkjIG9uZSBieXRlCglic3IudwkJcmVzdG9yZQkJCQkjIHJlc3RvcmUgQW4KCgltb3YudwkJJjB4MDBhMSxFWENfVk9GRiglYTYpCQkjIHNldCBGU0xXCglicmEuYgkJZmFjY19maW5pc2gKCmZhY2Nfb3V0X3c6Cgltb3ZxLmwJCSYweDIsJWQwCQkJIyB0d28gYnl0ZXMKCWJzci53CQlyZXN0b3JlCQkJCSMgcmVzdG9yZSBBbgoKCW1vdi53CQkmMHgwMGMxLEVYQ19WT0ZGKCVhNikJCSMgc2V0IEZTTFcKCWJyYS5iCQlmYWNjX2ZpbmlzaAoKZmFjY19vdXRfbDoKCW1vdnEubAkJJjB4NCwlZDAJCQkjIGZvdXIgYnl0ZXMKCWJzci53CQlyZXN0b3JlCQkJCSMgcmVzdG9yZSBBbgoKCW1vdi53CQkmMHgwMDgxLEVYQ19WT0ZGKCVhNikJCSMgc2V0IEZTTFcKCWJyYS5iCQlmYWNjX2ZpbmlzaAoKZmFjY19vdXRfZDoKCW1vdnEubAkJJjB4OCwlZDAJCQkjIGVpZ2h0IGJ5dGVzCglic3IudwkJcmVzdG9yZQkJCQkjIHJlc3RvcmUgQW4KCgltb3YudwkJJjB4MDBlMSxFWENfVk9GRiglYTYpCQkjIHNldCBGU0xXCglicmEuYgkJZmFjY19maW5pc2gKCmZhY2Nfb3V0X3g6Cgltb3YubAkJJjB4YywlZDAJCQkjIHR3ZWx2ZSBieXRlcwoJYnNyLncJCXJlc3RvcmUJCQkJIyByZXN0b3JlIEFuCgoJbW92LncJCSYweDAwZTEsRVhDX1ZPRkYoJWE2KQkJIyBzZXQgRlNMVwoKIyBoZXJlJ3Mgd2hlcmUgd2UgYWN0dWFsbHkgY3JlYXRlIHRoZSBhY2Nlc3MgZXJyb3IgZnJhbWUgZnJvbSB0aGUKIyBjdXJyZW50IGV4Y2VwdGlvbiBzdGFjayBmcmFtZS4KZmFjY19maW5pc2g6Cgltb3YubAkJVVNFUl9GUElBUiglYTYpLEVYQ19QQyglYTYpICMgc3RvcmUgY3VycmVudCBQQwoKCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMQoJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKCgl1bmxrCQklYTYKCgltb3YubAkJKCVzcCksLSglc3ApCQkjIHN0b3JlIFNSLCBoaShQQykKCW1vdi5sCQkweDgoJXNwKSwweDQoJXNwKQkjIHN0b3JlIGxvKFBDKQoJbW92LmwJCTB4Yyglc3ApLDB4OCglc3ApCSMgc3RvcmUgRUEKCW1vdi5sCQkmMHgwMDAwMDAwMSwweGMoJXNwKQkjIHN0b3JlIEZTTFcKCW1vdi53CQkweDYoJXNwKSwweGMoJXNwKQkjIGZpeCBGU0xXIChzaXplKQoJbW92LncJCSYweDQwMDgsMHg2KCVzcCkJIyBzdG9yZSB2b2ZmCgoJYnRzdAkJJjB4NSwoJXNwKQkJIyBzdXBlcnZpc29yIG9yIHVzZXIgbW9kZT8KCWJlcS5iCQlmYWNjX291dDIJCSMgdXNlcgoJYnNldAkJJjB4MiwweGQoJXNwKQkJIyBzZXQgc3VwZXJ2aXNvciBUTSBiaXQKCmZhY2Nfb3V0MjoKCWJyYS5sCQlfcmVhbF9hY2Nlc3MKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIyBpZiB0aGUgZWZmZWN0aXZlIGFkZHJlc3NpbmcgbW9kZSB3YXMgcHJlZGVjcmVtZW50IG9yIHBvc3RpbmNyZW1lbnQsCiMgdGhlIGVtdWxhdGlvbiBoYXMgYWxyZWFkeSBjaGFuZ2VkIGl0cyB2YWx1ZSB0byB0aGUgY29ycmVjdCBwb3N0LQojIGluc3RydWN0aW9uIHZhbHVlLiBidXQgc2luY2Ugd2UncmUgZXhpdGluZyB0byB0aGUgYWNjZXNzIGVycm9yCiMgaGFuZGxlciwgdGhlbiBBTiBtdXN0IGJlIHJldHVybmVkIHRvIGl0cyBwcmUtaW5zdHJ1Y3Rpb24gdmFsdWUuCiMgd2UgZG8gdGhhdCBoZXJlLgpyZXN0b3JlOgoJbW92LmIJCUVYQ19PUFdPUkQrMHgxKCVhNiksJWQxCglhbmRpLmIJCSYweDM4LCVkMQkJIyBleHRyYWN0IG9wbW9kZQoJY21waS5iCQklZDEsJjB4MTgJCSMgcG9zdGluYz8KCWJlcS53CQlyZXN0X2luYwoJY21waS5iCQklZDEsJjB4MjAJCSMgcHJlZGVjPwoJYmVxLncJCXJlc3RfZGVjCglydHMKCnJlc3RfaW5jOgoJbW92LmIJCUVYQ19PUFdPUkQrMHgxKCVhNiksJWQxCglhbmRpLncJCSYweDAwMDcsJWQxCQkjIGZldGNoIEFuCgoJbW92LncJCSh0YmxfcmVzdF9pbmMuYiwlcGMsJWQxLncqMiksJWQxCglqbXAJCSh0YmxfcmVzdF9pbmMuYiwlcGMsJWQxLncqMSkKCnRibF9yZXN0X2luYzoKCXNob3J0CQlyaV9hMCAtIHRibF9yZXN0X2luYwoJc2hvcnQJCXJpX2ExIC0gdGJsX3Jlc3RfaW5jCglzaG9ydAkJcmlfYTIgLSB0YmxfcmVzdF9pbmMKCXNob3J0CQlyaV9hMyAtIHRibF9yZXN0X2luYwoJc2hvcnQJCXJpX2E0IC0gdGJsX3Jlc3RfaW5jCglzaG9ydAkJcmlfYTUgLSB0YmxfcmVzdF9pbmMKCXNob3J0CQlyaV9hNiAtIHRibF9yZXN0X2luYwoJc2hvcnQJCXJpX2E3IC0gdGJsX3Jlc3RfaW5jCgpyaV9hMDoKCXN1Yi5sCQklZDAsRVhDX0RSRUdTKzB4OCglYTYpCSMgZml4IHN0YWNrZWQgYTAKCXJ0cwpyaV9hMToKCXN1Yi5sCQklZDAsRVhDX0RSRUdTKzB4YyglYTYpCSMgZml4IHN0YWNrZWQgYTEKCXJ0cwpyaV9hMjoKCXN1Yi5sCQklZDAsJWEyCQkJIyBmaXggYTIKCXJ0cwpyaV9hMzoKCXN1Yi5sCQklZDAsJWEzCQkJIyBmaXggYTMKCXJ0cwpyaV9hNDoKCXN1Yi5sCQklZDAsJWE0CQkJIyBmaXggYTQKCXJ0cwpyaV9hNToKCXN1Yi5sCQklZDAsJWE1CQkJIyBmaXggYTUKCXJ0cwpyaV9hNjoKCXN1Yi5sCQklZDAsKCVhNikJCSMgZml4IHN0YWNrZWQgYTYKCXJ0cwojIGlmIGl0J3MgYSBmbW92ZSBvdXQgaW5zdHJ1Y3Rpb24sIHdlIGRvbid0IGhhdmUgdG8gZml4IGE3CiMgYmVjYXVzZSB3ZSBoYWRuJ3QgY2hhbmdlZCBpdCB5ZXQuIGlmIGl0J3MgYW4gb3BjbGFzcyB0d28KIyBpbnN0cnVjdGlvbiAoZGF0YSBtb3ZlZCBpbikgYW5kIHRoZSBleGNlcHRpb24gd2FzIGluIHN1cGVydmlzb3IKIyBtb2RlLCB0aGVuIGFsc28gYWxzbyB3YXNuJ3QgdXBkYXRlZC4gaWYgaXQgd2FzIHVzZXIgbW9kZSwgdGhlbgojIHJlc3RvcmUgdGhlIGNvcnJlY3QgYTcgd2hpY2ggaXMgaW4gdGhlIFVTUCBjdXJyZW50bHkuCnJpX2E3OgoJY21waS5iCQlFWENfVk9GRiglYTYpLCYweDMwCSMgbW92ZSBpbiBvciBvdXQ/CglibmUuYgkJcmlfYTdfZG9uZQkJIyBvdXQKCglidHN0CQkmMHg1LEVYQ19TUiglYTYpCSMgdXNlciBvciBzdXBlcnZpc29yPwoJYm5lLmIJCXJpX2E3X2RvbmUJCSMgc3VwZXJ2aXNvcgoJbW92YwkJJXVzcCwlYTAJCSMgcmVzdG9yZSBVU1AKCXN1Yi5sCQklZDAsJWEwCgltb3ZjCQklYTAsJXVzcApyaV9hN19kb25lOgoJcnRzCgojIG5lZWQgdG8gaW52ZXJ0IGFkanVzdG1lbnQgdmFsdWUgaWYgdGhlIDxlYT4gd2FzIHByZWRlYwpyZXN0X2RlYzoKCW5lZy5sCQklZDAKCWJyYS5iCQlyZXN0X2luYwo=